Merge 5.4.173 into android12-5.4-lts

Changes in 5.4.173
	kbuild: Add $(KBUILD_HOSTLDFLAGS) to 'has_libelf' test
	devtmpfs regression fix: reconfigure on each mount
	orangefs: Fix the size of a memory allocation in orangefs_bufmap_alloc()
	vfs: fs_context: fix up param length parsing in legacy_parse_param
	perf: Protect perf_guest_cbs with RCU
	KVM: s390: Clarify SIGP orders versus STOP/RESTART
	media: uvcvideo: fix division by zero at stream start
	rtlwifi: rtl8192cu: Fix WARNING when calling local_irq_restore() with interrupts enabled
	firmware: qemu_fw_cfg: fix sysfs information leak
	firmware: qemu_fw_cfg: fix NULL-pointer deref on duplicate entries
	firmware: qemu_fw_cfg: fix kobject leak in probe error path
	KVM: x86: remove PMU FIXED_CTR3 from msrs_to_save_all
	ALSA: hda/realtek - Fix silent output on Gigabyte X570 Aorus Master after reboot from Windows
	mtd: fixup CFI on ixp4xx
	ARM: 9025/1: Kconfig: CPU_BIG_ENDIAN depends on !LD_IS_LLD
	Linux 5.4.173

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: If356ae2b91f67360d74bf1fa74d234c707606cf5
diff --git a/Documentation/ABI/testing/OWNERS b/Documentation/ABI/testing/OWNERS
new file mode 100644
index 0000000..75edfd5
--- /dev/null
+++ b/Documentation/ABI/testing/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/Documentation/ABI/testing/OWNERS
diff --git a/Documentation/ABI/testing/sysfs-class-devlink b/Documentation/ABI/testing/sysfs-class-devlink
new file mode 100644
index 0000000..64791b6
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-class-devlink
@@ -0,0 +1,126 @@
+What:		/sys/class/devlink/.../
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		Provide a place in sysfs for the device link objects in the
+		kernel at any given time.  The name of a device link directory,
+		denoted as ... above, is of the form <supplier>--<consumer>
+		where <supplier> is the supplier device name and <consumer> is
+		the consumer device name.
+
+What:		/sys/class/devlink/.../auto_remove_on
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link will ever be
+		automatically removed by the driver core when the consumer and
+		supplier devices themselves are still present.
+
+		This will be one of the following strings:
+
+		'consumer unbind'
+		'supplier unbind'
+		'never'
+
+		'consumer unbind' means the device link will be removed when
+		the consumer's driver is unbound from the consumer device.
+
+		'supplier unbind' means the device link will be removed when
+		the supplier's driver is unbound from the supplier device.
+
+		'never' means the device link will not be automatically removed
+		when as long as the supplier and consumer devices themselves
+		are still present.
+
+What:		/sys/class/devlink/.../consumer
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file is a symlink to the consumer device's sysfs directory.
+
+What:		/sys/class/devlink/.../runtime_pm
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link has any impact on the
+		runtime power management behavior of the consumer and supplier
+		devices. For example: Making sure the supplier doesn't enter
+		runtime suspend while the consumer is active.
+
+		This will be one of the following strings:
+
+		'0' - Does not affect runtime power management
+		'1' - Affects runtime power management
+
+What:		/sys/class/devlink/.../status
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates the status of the device link. The status
+		of a device link is affected by whether the supplier and
+		consumer devices have been bound to their corresponding
+		drivers. The status of a device link also affects the binding
+		and unbinding of the supplier and consumer devices with their
+		drivers and also affects whether the software state of the
+		supplier device is synced with the hardware state of the
+		supplier device after boot up.
+		See also: sysfs-devices-state_synced.
+
+		This will be one of the following strings:
+
+		'not tracked'
+		'dormant'
+		'available'
+		'consumer probing'
+		'active'
+		'supplier unbinding'
+		'unknown'
+
+		'not tracked' means this device link does not track the status
+		and has no impact on the binding, unbinding and syncing the
+		hardware and software device state.
+
+		'dormant' means the supplier and the consumer devices have not
+		bound to their driver.
+
+		'available' means the supplier has bound to its driver and is
+		available to supply resources to the consumer device.
+
+		'consumer probing' means the consumer device is currently
+		trying to bind to its driver.
+
+		'active' means the supplier and consumer devices have both
+		bound successfully to their drivers.
+
+		'supplier unbinding' means the supplier devices is currently in
+		the process of unbinding from its driver.
+
+		'unknown' means the state of the device link is not any of the
+		above. If this is ever the value, there's a bug in the kernel.
+
+What:		/sys/class/devlink/.../supplier
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file is a symlink to the supplier device's sysfs directory.
+
+What:		/sys/class/devlink/.../sync_state_only
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		This file indicates if the device link is limited to only
+		affecting the syncing of the hardware and software state of the
+		supplier device.
+
+		This will be one of the following strings:
+
+		'0'
+		'1' - Affects runtime power management
+
+		'0' means the device link can affect other device behaviors
+		like binding/unbinding, suspend/resume, runtime power
+		management, etc.
+
+		'1' means the device link will only affect the syncing of
+		hardware and software state of the supplier device after boot
+		up and doesn't not affect other behaviors of the devices.
diff --git a/Documentation/ABI/testing/sysfs-class-power b/Documentation/ABI/testing/sysfs-class-power
index 27edc06..7d3aae6 100644
--- a/Documentation/ABI/testing/sysfs-class-power
+++ b/Documentation/ABI/testing/sysfs-class-power
@@ -74,6 +74,21 @@
 		Access: Read, Write
 		Valid values: 0 - 100 (percent)
 
+What:		/sys/class/power_supply/<supply_name>/capacity_error_margin
+Date:		April 2019
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Battery capacity measurement becomes unreliable without
+		recalibration. This values provides the maximum error
+		margin expected to exist by the fuel gauge in percent.
+		Values close to 0% will be returned after (re-)calibration
+		has happened. Over time the error margin will increase.
+		100% means, that the capacity related values are basically
+		completely useless.
+
+		Access: Read
+		Valid values: 0 - 100 (percent)
+
 What:		/sys/class/power_supply/<supply_name>/capacity_level
 Date:		June 2009
 Contact:	linux-pm@vger.kernel.org
@@ -189,7 +204,9 @@
 		Access: Read
 		Valid values: "Unknown", "Good", "Overheat", "Dead",
 			      "Over voltage", "Unspecified failure", "Cold",
-			      "Watchdog timer expire", "Safety timer expire"
+			      "Watchdog timer expire", "Safety timer expire",
+			      "Over current", "Calibration required",
+			      "Warm", "Cool", "Hot"
 
 What:		/sys/class/power_supply/<supply_name>/precharge_current
 Date:		June 2017
@@ -664,3 +681,31 @@
 		Valid values:
 		- 1: enabled
 		- 0: disabled
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_year
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the year (following Gregorian calendar) when the device has been
+		manufactured.
+
+		Access: Read
+		Valid values: Reported as integer
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_month
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the month when the device has been manufactured.
+
+		Access: Read
+		Valid values: 1-12
+
+What:		/sys/class/power_supply/<supply_name>/manufacture_day
+Date:		January 2020
+Contact:	linux-pm@vger.kernel.org
+Description:
+		Reports the day of month when the device has been manufactured.
+
+		Access: Read
+		Valid values: 1-31
diff --git a/Documentation/ABI/testing/sysfs-devices-consumer b/Documentation/ABI/testing/sysfs-devices-consumer
new file mode 100644
index 0000000..1f06d74
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-consumer
@@ -0,0 +1,8 @@
+What:		/sys/devices/.../consumer:<consumer>
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../consumer:<consumer> are symlinks to device
+		links where this device is the supplier. <consumer> denotes the
+		name of the consumer in that device link. There can be zero or
+		more of these symlinks for a given device.
diff --git a/Documentation/ABI/testing/sysfs-devices-state_synced b/Documentation/ABI/testing/sysfs-devices-state_synced
new file mode 100644
index 0000000..0c922d7
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-state_synced
@@ -0,0 +1,24 @@
+What:		/sys/devices/.../state_synced
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../state_synced attribute is only present for
+		devices whose bus types or driver provides the .sync_state()
+		callback. The number read from it (0 or 1) reflects the value
+		of the device's 'state_synced' field. A value of 0 means the
+		.sync_state() callback hasn't been called yet. A value of 1
+		means the .sync_state() callback has been called.
+
+		Generally, if a device has sync_state() support and has some of
+		the resources it provides enabled at the time the kernel starts
+		(Eg: enabled by hardware reset or bootloader or anything that
+		run before the kernel starts), then it'll keep those resources
+		enabled and in a state that's compatible with the state they
+		were in at the start of the kernel. The device will stop doing
+		this only when the sync_state() callback has been called --
+		which happens only when all its consumer devices are registered
+		and have probed successfully. Resources that were left disabled
+		at the time the kernel starts are not affected or limited in
+		any way by sync_state() callbacks.
+
+
diff --git a/Documentation/ABI/testing/sysfs-devices-supplier b/Documentation/ABI/testing/sysfs-devices-supplier
new file mode 100644
index 0000000..a919e0d
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-supplier
@@ -0,0 +1,8 @@
+What:		/sys/devices/.../supplier:<supplier>
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../supplier:<supplier> are symlinks to device
+		links where this device is the consumer. <supplier> denotes the
+		name of the supplier in that device link. There can be zero or
+		more of these symlinks for a given device.
diff --git a/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier b/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier
new file mode 100644
index 0000000..59d073d
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-devices-waiting_for_supplier
@@ -0,0 +1,17 @@
+What:		/sys/devices/.../waiting_for_supplier
+Date:		May 2020
+Contact:	Saravana Kannan <saravanak@google.com>
+Description:
+		The /sys/devices/.../waiting_for_supplier attribute is only
+		present when fw_devlink kernel command line option is enabled
+		and is set to something stricter than "permissive".  It is
+		removed once a device probes successfully (because the
+		information is no longer relevant). The number read from it (0
+		or 1) reflects whether the device is waiting for one or more
+		suppliers to be added and then linked to using device links
+		before the device can probe.
+
+		A value of 0 means the device is not waiting for any suppliers
+		to be added before it can probe.  A value of 1 means the device
+		is waiting for one or more suppliers to be added before it can
+		probe.
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 7ab2b1b..4d0e2f8 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -1,260 +1,475 @@
 What:		/sys/fs/f2fs/<disk>/gc_max_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the maximun sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the maximum sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_min_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the minimum sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the minimum sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_no_gc_sleep_time
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the default sleep time for gc_thread. Time
-		 is in milliseconds.
+Description:	Controls the default sleep time for gc_thread. Time
+		is in milliseconds.
 
 What:		/sys/fs/f2fs/<disk>/gc_idle
 Date:		July 2013
 Contact:	"Namjae Jeon" <namjae.jeon@samsung.com>
-Description:
-		 Controls the victim selection policy for garbage collection.
+Description:	Controls the victim selection policy for garbage collection.
+		Setting gc_idle = 0(default) will disable this option. Setting
+		gc_idle = 1 will select the Cost Benefit approach & setting
+		gc_idle = 2 will select the greedy approach & setting
+		gc_idle = 3 will select the age-threshold based approach.
 
 What:		/sys/fs/f2fs/<disk>/reclaim_segments
 Date:		October 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
+Description:	This parameter controls the number of prefree segments to be
+		reclaimed. If the number of prefree segments is larger than
+		the number of segments in the proportion to the percentage
+		over total volume size, f2fs tries to conduct checkpoint to
+		reclaim the prefree segments to free segments.
+		By default, 5% over total # of segments.
+
+What:		/sys/fs/f2fs/<disk>/main_blkaddr
+Date:		November 2019
+Contact:	"Ramon Pantin" <pantin@google.com>
 Description:
-		 Controls the issue rate of segment discard commands.
+		 Shows first block address of MAIN area.
 
 What:		/sys/fs/f2fs/<disk>/ipu_policy
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the in-place-update policy.
+Description:	Controls the in-place-update policy.
+		updates in f2fs. User can set:
+		0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
+		0x04: F2FS_IPU_UTIL,  0x08: F2FS_IPU_SSR_UTIL,
+		0x10: F2FS_IPU_FSYNC, 0x20: F2FS_IPU_ASYNC,
+		0x40: F2FS_IPU_NOCACHE.
+		Refer segment.h for details.
 
 What:		/sys/fs/f2fs/<disk>/min_ipu_util
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the FS utilization condition for the in-place-update
-		 policies.
+Description:	Controls the FS utilization condition for the in-place-update
+		policies. It is used by F2FS_IPU_UTIL and F2FS_IPU_SSR_UTIL policies.
 
 What:		/sys/fs/f2fs/<disk>/min_fsync_blocks
 Date:		September 2014
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for the in-place-update
-		 policies.
+Description:	Controls the dirty page count condition for the in-place-update
+		policies.
 
 What:		/sys/fs/f2fs/<disk>/min_seq_blocks
 Date:		August 2018
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for batched sequential
-		 writes in ->writepages.
-
+Description:	Controls the dirty page count condition for batched sequential
+		writes in writepages.
 
 What:		/sys/fs/f2fs/<disk>/min_hot_blocks
 Date:		March 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the dirty page count condition for redefining hot data.
+Description:	Controls the dirty page count condition for redefining hot data.
 
 What:		/sys/fs/f2fs/<disk>/min_ssr_sections
 Date:		October 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls the fee section threshold to trigger SSR allocation.
+Description:	Controls the free section threshold to trigger SSR allocation.
+		If this is large, SSR mode will be enabled early.
 
 What:		/sys/fs/f2fs/<disk>/max_small_discards
 Date:		November 2013
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the issue rate of small discard commands.
+Description:	Controls the issue rate of discard commands that consist of 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.
 
-What:          /sys/fs/f2fs/<disk>/discard_granularity
-Date:          July 2017
-Contact:       "Chao Yu" <yuchao0@huawei.com>
-Description:
-		Controls discard granularity of inner discard thread, inner thread
+What:		/sys/fs/f2fs/<disk>/discard_granularity
+Date:		July 2017
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	Controls discard granularity of inner discard thread. Inner thread
 		will not issue discards with size that is smaller than granularity.
-		The unit size is one block, now only support configuring in range
-		of [1, 512].
+		The unit size is one block(4KB), now only support configuring
+		in range of [1, 512]. Default value is 4(=16KB).
 
-What:          /sys/fs/f2fs/<disk>/umount_discard_timeout
-Date:          January 2019
-Contact:       "Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		Set timeout to issue discard commands during umount.
-		Default: 5 secs
+What:		/sys/fs/f2fs/<disk>/umount_discard_timeout
+Date:		January 2019
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Set timeout to issue discard commands during umount.
+	        Default: 5 secs
 
 What:		/sys/fs/f2fs/<disk>/max_victim_search
 Date:		January 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the number of trials to find a victim segment.
+Description:	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.
 
 What:		/sys/fs/f2fs/<disk>/migration_granularity
 Date:		October 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls migration granularity of garbage collection on large
-		 section, it can let GC move partial segment{s} of one section
-		 in one GC cycle, so that dispersing heavy overhead GC to
-		 multiple lightweight one.
+Description:	Controls migration granularity of garbage collection on large
+		section, it can let GC move partial segment{s} of one section
+		in one GC cycle, so that dispersing heavy overhead GC to
+		multiple lightweight one.
 
 What:		/sys/fs/f2fs/<disk>/dir_level
 Date:		March 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the directory level for large directory.
+Description:	Controls the directory level for large directory. If a
+		directory has a number of files, it can reduce the file lookup
+		latency by increasing this dir_level value. Otherwise, it
+		needs to decrease this value to reduce the space overhead.
+		The default value is 0.
 
 What:		/sys/fs/f2fs/<disk>/ram_thresh
 Date:		March 2014
 Contact:	"Jaegeuk Kim" <jaegeuk.kim@samsung.com>
-Description:
-		 Controls the memory footprint used by f2fs.
+Description:	Controls the memory footprint used by free nids and cached
+		nat entries. By default, 1 is set, which indicates
+		10 MB / 1 GB RAM.
 
 What:		/sys/fs/f2fs/<disk>/batched_trim_sections
 Date:		February 2015
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the trimming rate in batch mode.
-		 <deprecated>
+Description:	Controls the trimming rate in batch mode.
+		<deprecated>
 
 What:		/sys/fs/f2fs/<disk>/cp_interval
 Date:		October 2015
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the checkpoint timing.
+Description:	Controls the checkpoint timing, set to 60 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/idle_interval
 Date:		January 2016
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls the idle timing for all paths other than
-		 discard and gc path.
+Description:	Controls the idle timing of system, if there is no FS operation
+		during given interval.
+		Set to 5 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/discard_idle_interval
 Date:		September 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
 Contact:	"Sahitya Tummala" <stummala@codeaurora.org>
-Description:
-		 Controls the idle timing for discard path.
+Description:	Controls the idle timing of discard thread given
+		this time interval.
+		Default is 5 secs.
 
 What:		/sys/fs/f2fs/<disk>/gc_idle_interval
 Date:		September 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
 Contact:	"Sahitya Tummala" <stummala@codeaurora.org>
-Description:
-		 Controls the idle timing for gc path.
+Description:    Controls the idle timing for gc path. Set to 5 seconds by default.
 
 What:		/sys/fs/f2fs/<disk>/iostat_enable
 Date:		August 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls to enable/disable IO stat.
+Description:	Controls to enable/disable IO stat.
 
 What:		/sys/fs/f2fs/<disk>/ra_nid_pages
 Date:		October 2015
 Contact:	"Chao Yu" <chao2.yu@samsung.com>
-Description:
-		 Controls the count of nid pages to be readaheaded.
+Description:	Controls the count of nid pages to be readaheaded.
+		When building free nids, F2FS reads NAT blocks ahead for
+		speed up. Default is 0.
 
 What:		/sys/fs/f2fs/<disk>/dirty_nats_ratio
 Date:		January 2016
 Contact:	"Chao Yu" <chao2.yu@samsung.com>
-Description:
-		 Controls dirty nat entries ratio threshold, if current
-		 ratio exceeds configured threshold, checkpoint will
-		 be triggered for flushing dirty nat entries.
+Description:	Controls dirty nat entries ratio threshold, if current
+		ratio exceeds configured threshold, checkpoint will
+		be triggered for flushing dirty nat entries.
 
 What:		/sys/fs/f2fs/<disk>/lifetime_write_kbytes
 Date:		January 2016
 Contact:	"Shuoran Liu" <liushuoran@huawei.com>
-Description:
-		 Shows total written kbytes issued to disk.
+Description:	Shows total written kbytes issued to disk.
 
 What:		/sys/fs/f2fs/<disk>/features
 Date:		July 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Shows all enabled features in current device.
+Description:	<deprecated: should use /sys/fs/f2fs/<disk>/feature_list/
+		Shows all enabled features in current device.
+		Supported features:
+		encryption, blkzoned, extra_attr, projquota, inode_checksum,
+		flexible_inline_xattr, quota_ino, inode_crtime, lost_found,
+		verity, sb_checksum, casefold, readonly, compression, pin_file.
+
+What:		/sys/fs/f2fs/<disk>/feature_list/
+Date:		June 2021
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Expand /sys/fs/f2fs/<disk>/features to meet sysfs rule.
+		Supported on-disk features:
+		encryption, block_zoned (aka blkzoned), extra_attr,
+		project_quota (aka projquota), inode_checksum,
+		flexible_inline_xattr, quota_ino, inode_crtime, lost_found,
+		verity, sb_checksum, casefold, readonly, compression.
+		Note that, pin_file is moved into /sys/fs/f2fs/features/.
+
+What:		/sys/fs/f2fs/features/
+Date:		July 2017
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Shows all enabled kernel features.
+		Supported features:
+		encryption, block_zoned, extra_attr, project_quota,
+		inode_checksum, flexible_inline_xattr, quota_ino,
+		inode_crtime, lost_found, verity, sb_checksum,
+		casefold, readonly, compression, test_dummy_encryption_v2,
+		atomic_write, pin_file, encrypted_casefold.
 
 What:		/sys/fs/f2fs/<disk>/inject_rate
 Date:		May 2016
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls the injection rate.
+Description:	Controls the injection rate of arbitrary faults.
 
 What:		/sys/fs/f2fs/<disk>/inject_type
 Date:		May 2016
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls the injection type.
+Description:	Controls the injection type of arbitrary faults.
+
+What:		/sys/fs/f2fs/<disk>/dirty_segments
+Date:		October 2017
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Shows the number of dirty segments.
 
 What:		/sys/fs/f2fs/<disk>/reserved_blocks
 Date:		June 2017
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Controls target reserved blocks in system, the threshold
-		 is soft, it could exceed current available user space.
+Description:	Controls target reserved blocks in system, the threshold
+		is soft, it could exceed current available user space.
 
 What:		/sys/fs/f2fs/<disk>/current_reserved_blocks
 Date:		October 2017
 Contact:	"Yunlong Song" <yunlong.song@huawei.com>
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Shows current reserved blocks in system, it may be temporarily
-		 smaller than target_reserved_blocks, but will gradually
-		 increase to target_reserved_blocks when more free blocks are
-		 freed by user later.
+Description:	Shows current reserved blocks in system, it may be temporarily
+		smaller than target_reserved_blocks, but will gradually
+		increase to target_reserved_blocks when more free blocks are
+		freed by user later.
 
 What:		/sys/fs/f2fs/<disk>/gc_urgent
 Date:		August 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Do background GC agressively
+Description:	Do background GC agressively when set. When gc_urgent = 1,
+		background thread starts to do GC by given gc_urgent_sleep_time
+		interval. When gc_urgent = 2, F2FS will lower the bar of
+		checking idle in order to process outstanding discard commands
+		and GC a little bit aggressively. It is set to 0 by default.
 
 What:		/sys/fs/f2fs/<disk>/gc_urgent_sleep_time
 Date:		August 2017
 Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
-Description:
-		 Controls sleep time of GC urgent mode
+Description:	Controls sleep time of GC urgent mode. Set to 500ms by default.
 
 What:		/sys/fs/f2fs/<disk>/readdir_ra
 Date:		November 2017
 Contact:	"Sheng Yong" <shengyong1@huawei.com>
-Description:
-		 Controls readahead inode block in readdir.
+Description:	Controls readahead inode block in readdir. Enabled by default.
+
+What:		/sys/fs/f2fs/<disk>/gc_pin_file_thresh
+Date:		January 2018
+Contact:	Jaegeuk Kim <jaegeuk@kernel.org>
+Description:	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.
 
 What:		/sys/fs/f2fs/<disk>/extension_list
 Date:		Feburary 2018
 Contact:	"Chao Yu" <yuchao0@huawei.com>
-Description:
-		 Used to control configure extension list:
-		 - Query: cat /sys/fs/f2fs/<disk>/extension_list
-		 - Add: echo '[h/c]extension' > /sys/fs/f2fs/<disk>/extension_list
-		 - 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
+Description:	Used to control configure extension list:
+		- Query: cat /sys/fs/f2fs/<disk>/extension_list
+		- Add: echo '[h/c]extension' > /sys/fs/f2fs/<disk>/extension_list
+		- 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.
+Description:	If checkpoint=disable, it displays the number of blocks that
+		are unusable.
+		If checkpoint=enable it displays the number 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)
+Description:	Displays name and version of the encoding set for the filesystem.
+		If no encoding is set, displays (none)
+
+What:		/sys/fs/f2fs/<disk>/free_segments
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of free segments in disk.
+
+What:		/sys/fs/f2fs/<disk>/cp_foreground_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of checkpoint operations performed on demand. Available when
+		CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/cp_background_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of checkpoint operations performed in the background to
+		free segments. Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/gc_foreground_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of garbage collection operations performed on demand.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/gc_background_calls
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of garbage collection operations triggered in background.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/moved_blocks_foreground
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of blocks moved by garbage collection in foreground.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/moved_blocks_background
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Number of blocks moved by garbage collection in background.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/avg_vblocks
+Date:		September 2019
+Contact:	"Hridya Valsaraju" <hridya@google.com>
+Description:	Average number of valid blocks.
+		Available when CONFIG_F2FS_STAT_FS=y.
+
+What:		/sys/fs/f2fs/<disk>/mounted_time_sec
+Date:		February 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Show the mounted time in secs of this partition.
+
+What:		/sys/fs/f2fs/<disk>/data_io_flag
+Date:		April 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Give a way to attach REQ_META|FUA to data writes
+		given temperature-based bits. Now the bits indicate:
+		*      REQ_META     |      REQ_FUA      |
+		*    5 |    4 |   3 |    2 |    1 |   0 |
+		* Cold | Warm | Hot | Cold | Warm | Hot |
+
+What:		/sys/fs/f2fs/<disk>/node_io_flag
+Date:		June 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Give a way to attach REQ_META|FUA to node writes
+		given temperature-based bits. Now the bits indicate:
+		*      REQ_META     |      REQ_FUA      |
+		*    5 |    4 |   3 |    2 |    1 |   0 |
+		* Cold | Warm | Hot | Cold | Warm | Hot |
+
+What:		/sys/fs/f2fs/<disk>/iostat_period_ms
+Date:		April 2020
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Give a way to change iostat_period time. 3secs by default.
+		The new iostat trace gives stats gap given the period.
+What:		/sys/fs/f2fs/<disk>/max_io_bytes
+Date:		December 2020
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	This gives a control to limit the bio size in f2fs.
+		Default is zero, which will follow underlying block layer limit,
+		whereas, if it has a certain bytes value, f2fs won't submit a
+		bio larger than that size.
+
+What:		/sys/fs/f2fs/<disk>/stat/sb_status
+Date:		December 2020
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	Show status of f2fs superblock in real time.
+
+		====== ===================== =================================
+		value  sb status macro       description
+		0x1    SBI_IS_DIRTY          dirty flag for checkpoint
+		0x2    SBI_IS_CLOSE          specify unmounting
+		0x4    SBI_NEED_FSCK         need fsck.f2fs to fix
+		0x8    SBI_POR_DOING         recovery is doing or not
+		0x10   SBI_NEED_SB_WRITE     need to recover superblock
+		0x20   SBI_NEED_CP           need to checkpoint
+		0x40   SBI_IS_SHUTDOWN       shutdown by ioctl
+		0x80   SBI_IS_RECOVERED      recovered orphan/data
+		0x100  SBI_CP_DISABLED       CP was disabled last mount
+		0x200  SBI_CP_DISABLED_QUICK CP was disabled quickly
+		0x400  SBI_QUOTA_NEED_FLUSH  need to flush quota info in CP
+		0x800  SBI_QUOTA_SKIP_FLUSH  skip flushing quota in current CP
+		0x1000 SBI_QUOTA_NEED_REPAIR quota file may be corrupted
+		0x2000 SBI_IS_RESIZEFS       resizefs is in process
+		====== ===================== =================================
+
+What:		/sys/fs/f2fs/<disk>/ckpt_thread_ioprio
+Date:		January 2021
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Give a way to change checkpoint merge daemon's io priority.
+		Its default value is "be,3", which means "BE" I/O class and
+		I/O priority "3". We can select the class between "rt" and "be",
+		and set the I/O priority within valid range of it. "," delimiter
+		is necessary in between I/O class and priority number.
+
+What:		/sys/fs/f2fs/<disk>/ovp_segments
+Date:		March 2021
+Contact:	"Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:	Shows the number of overprovision segments.
+
+What:		/sys/fs/f2fs/<disk>/compr_written_block
+Date:		March 2021
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Show the block count written after compression since mount. Note
+		that when the compressed blocks are deleted, this count doesn't
+		decrease. If you write "0" here, you can initialize
+		compr_written_block and compr_saved_block to "0".
+
+What:		/sys/fs/f2fs/<disk>/compr_saved_block
+Date:		March 2021
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Show the saved block count with compression since mount. Note
+		that when the compressed blocks are deleted, this count doesn't
+		decrease. If you write "0" here, you can initialize
+		compr_written_block and compr_saved_block to "0".
+
+What:		/sys/fs/f2fs/<disk>/compr_new_inode
+Date:		March 2021
+Contact:	"Daeho Jeong" <daehojeong@google.com>
+Description:	Show the count of inode newly enabled for compression since mount.
+		Note that when the compression is disabled for the files, this count
+		doesn't decrease. If you write "0" here, you can initialize
+		compr_new_inode to "0".
+
+What:		/sys/fs/f2fs/<disk>/atgc_candidate_ratio
+Date:		May 2021
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	When ATGC is on, it controls candidate ratio in order to limit total
+		number of potential victim in all candidates, the value should be in
+		range of [0, 100], by default it was initialized as 20(%).
+
+What:		/sys/fs/f2fs/<disk>/atgc_candidate_count
+Date:		May 2021
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	When ATGC is on, it controls candidate count in order to limit total
+		number of potential victim in all candidates, by default it was
+		initialized as 10 (sections).
+
+What:		/sys/fs/f2fs/<disk>/atgc_age_weight
+Date:		May 2021
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	When ATGC is on, it controls age weight to balance weight proportion
+		in between aging and valid blocks, the value should be in range of
+		[0, 100], by default it was initialized as 60(%).
+
+What:		/sys/fs/f2fs/<disk>/atgc_age_threshold
+Date:		May 2021
+Contact:	"Chao Yu" <yuchao0@huawei.com>
+Description:	When ATGC is on, it controls age threshold to bypass GCing young
+		candidates whose age is not beyond the threshold, by default it was
+		initialized as 604800 seconds (equals to 7 days).
diff --git a/Documentation/ABI/testing/sysfs-fs-incfs b/Documentation/ABI/testing/sysfs-fs-incfs
new file mode 100644
index 0000000..690c687
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-fs-incfs
@@ -0,0 +1,64 @@
+What:		/sys/fs/incremental-fs/features/corefs
+Date:		2019
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Reads 'supported'. Always present.
+
+What:		/sys/fs/incremental-fs/features/v2
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Reads 'supported'. Present if all v2 features of incfs are
+		supported.
+
+What:		/sys/fs/incremental-fs/features/zstd
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Reads 'supported'. Present if zstd compression is supported
+		for data blocks.
+
+What:		/sys/fs/incremental-fs/instances/[name]
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Folder created when incfs is mounted with the sysfs_name=[name]
+		option. If this option is used, the following values are created
+		in this folder.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_delayed_min
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns a count of the number of reads that were delayed as a
+		result of the per UID read timeouts min time setting.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_delayed_min_us
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns total delay time for all files since first mount as a
+		result of the per UID read timeouts min time setting.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns a count of the number of reads that were delayed as a
+		result of waiting for a pending read.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending_us
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns total delay time for all files since first mount as a
+		result of waiting for a pending read.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_failed_hash_verification
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns number of reads that failed because of hash verification
+		failures.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_failed_other
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns number of reads that failed for reasons other than
+		timing out or hash failures.
+
+What:		/sys/fs/incremental-fs/instances/[name]/reads_failed_timed_out
+Date:		April 2021
+Contact:	Paul Lawrence <paullawrence@google.com>
+Description:	Returns number of reads that timed out.
diff --git a/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers b/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers
new file mode 100644
index 0000000..122185c
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-dmabuf-buffers
@@ -0,0 +1,24 @@
+What:		/sys/kernel/dmabuf/buffers
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	The /sys/kernel/dmabuf/buffers directory contains a
+		snapshot of the internal state of every DMA-BUF.
+		/sys/kernel/dmabuf/buffers/<inode_number> will contain the
+		statistics for the DMA-BUF with the unique inode number
+		<inode_number>
+Users:		kernel memory tuning/debugging tools
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/exporter_name
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and contains the name of the exporter of
+		the DMA-BUF.
+
+What:		/sys/kernel/dmabuf/buffers/<inode_number>/size
+Date:		January 2021
+KernelVersion:	v5.12
+Contact:	Hridya Valsaraju <hridya@google.com>
+Description:	This file is read-only and specifies the size of the DMA-BUF in
+		bytes.
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-kernel-wakeup_reasons b/Documentation/ABI/testing/sysfs-kernel-wakeup_reasons
new file mode 100644
index 0000000..acb19b9
--- /dev/null
+++ b/Documentation/ABI/testing/sysfs-kernel-wakeup_reasons
@@ -0,0 +1,16 @@
+What:		/sys/kernel/wakeup_reasons/last_resume_reason
+Date:		February 2014
+Contact:	Ruchi Kandoi <kandoiruchi@google.com>
+Description:
+		The /sys/kernel/wakeup_reasons/last_resume_reason is
+		used to report wakeup reasons after system exited suspend.
+
+What:		/sys/kernel/wakeup_reasons/last_suspend_time
+Date:		March 2015
+Contact:	jinqian <jinqian@google.com>
+Description:
+		The /sys/kernel/wakeup_reasons/last_suspend_time is
+		used to report time spent in last suspend cycle. It contains
+		two numbers (in seconds) separated by space. First number is
+		the time spent in suspend and resume processes. Second number
+		is the time spent in sleep state.
\ No newline at end of file
diff --git a/Documentation/admin-guide/blockdev/zram.rst b/Documentation/admin-guide/blockdev/zram.rst
index 6eccf13..caa17c4 100644
--- a/Documentation/admin-guide/blockdev/zram.rst
+++ b/Documentation/admin-guide/blockdev/zram.rst
@@ -335,6 +335,11 @@
 
 With the command, zram writeback idle pages from memory to the storage.
 
+If admin want to write a specific page in zram device to backing device,
+they could write a page index into the interface.
+
+	echo "page_index=1251" > /sys/block/zramX/writeback
+
 If there are lots of write IO with flash device, potentially, it has
 flash wearout problem so that admin needs to design write limitation
 to guarantee storage health for entire product life.
diff --git a/Documentation/admin-guide/bootconfig.rst b/Documentation/admin-guide/bootconfig.rst
new file mode 100644
index 0000000..8b64977
--- /dev/null
+++ b/Documentation/admin-guide/bootconfig.rst
@@ -0,0 +1,249 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==================
+Boot Configuration
+==================
+
+:Author: Masami Hiramatsu <mhiramat@kernel.org>
+
+Overview
+========
+
+The boot configuration expands the current kernel command line to support
+additional key-value data when booting the kernel in an efficient way.
+This allows administrators to pass a structured-Key config file.
+
+Config File Syntax
+==================
+
+The boot config syntax is a simple structured key-value. Each key consists
+of dot-connected-words, and key and value are connected by ``=``. The value
+has to be terminated by semi-colon (``;``) or newline (``\n``).
+For array value, array entries are separated by comma (``,``). ::
+
+  KEY[.WORD[...]] = VALUE[, VALUE2[...]][;]
+
+Unlike the kernel command line syntax, spaces are OK around the comma and ``=``.
+
+Each key word must contain only alphabets, numbers, dash (``-``) or underscore
+(``_``). And each value only contains printable characters or spaces except
+for delimiters such as semi-colon (``;``), new-line (``\n``), comma (``,``),
+hash (``#``) and closing brace (``}``).
+
+If you want to use those delimiters in a value, you can use either double-
+quotes (``"VALUE"``) or single-quotes (``'VALUE'``) to quote it. Note that
+you can not escape these quotes.
+
+There can be a key which doesn't have value or has an empty value. Those keys
+are used for checking if the key exists or not (like a boolean).
+
+Key-Value Syntax
+----------------
+
+The boot config file syntax allows user to merge partially same word keys
+by brace. For example::
+
+ foo.bar.baz = value1
+ foo.bar.qux.quux = value2
+
+These can be written also in::
+
+ foo.bar {
+    baz = value1
+    qux.quux = value2
+ }
+
+Or more shorter, written as following::
+
+ foo.bar { baz = value1; qux.quux = value2 }
+
+In both styles, same key words are automatically merged when parsing it
+at boot time. So you can append similar trees or key-values.
+
+Same-key Values
+---------------
+
+It is prohibited that two or more values or arrays share a same-key.
+For example,::
+
+ foo = bar, baz
+ foo = qux  # !ERROR! we can not re-define same key
+
+If you want to update the value, you must use the override operator
+``:=`` explicitly. For example::
+
+ foo = bar, baz
+ foo := qux
+
+then, the ``qux`` is assigned to ``foo`` key. This is useful for
+overriding the default value by adding (partial) custom bootconfigs
+without parsing the default bootconfig.
+
+If you want to append the value to existing key as an array member,
+you can use ``+=`` operator. For example::
+
+ foo = bar, baz
+ foo += qux
+
+In this case, the key ``foo`` has ``bar``, ``baz`` and ``qux``.
+
+Moreover, sub-keys and a value can coexist under a parent key.
+For example, following config is allowed.::
+
+ foo = value1
+ foo.bar = value2
+ foo := value3 # This will update foo's value.
+
+Note, since there is no syntax to put a raw value directly under a
+structured key, you have to define it outside of the brace. For example::
+
+ foo {
+     bar = value1
+     bar {
+         baz = value2
+         qux = value3
+     }
+ }
+
+Also, the order of the value node under a key is fixed. If there
+are a value and subkeys, the value is always the first child node
+of the key. Thus if user specifies subkeys first, e.g.::
+
+ foo.bar = value1
+ foo = value2
+
+In the program (and /proc/bootconfig), it will be shown as below::
+
+ foo = value2
+ foo.bar = value1
+
+Comments
+--------
+
+The config syntax accepts shell-script style comments. The comments starting
+with hash ("#") until newline ("\n") will be ignored.
+
+::
+
+ # comment line
+ foo = value # value is set to foo.
+ bar = 1, # 1st element
+       2, # 2nd element
+       3  # 3rd element
+
+This is parsed as below::
+
+ foo = value
+ bar = 1, 2, 3
+
+Note that you can not put a comment between value and delimiter(``,`` or
+``;``). This means following config has a syntax error ::
+
+ key = 1 # comment
+       ,2
+
+
+/proc/bootconfig
+================
+
+/proc/bootconfig is a user-space interface of the boot config.
+Unlike /proc/cmdline, this file shows the key-value style list.
+Each key-value pair is shown in each line with following style::
+
+ KEY[.WORDS...] = "[VALUE]"[,"VALUE2"...]
+
+
+Boot Kernel With a Boot Config
+==============================
+
+Since the boot configuration file is loaded with initrd, it will be added
+to the end of the initrd (initramfs) image file with size, checksum and
+12-byte magic word as below.
+
+[initrd][bootconfig][size(u32)][checksum(u32)][#BOOTCONFIG\n]
+
+The Linux kernel decodes the last part of the initrd image in memory to
+get the boot configuration data.
+Because of this "piggyback" method, there is no need to change or
+update the boot loader and the kernel image itself.
+
+To do this operation, Linux kernel provides "bootconfig" command under
+tools/bootconfig, which allows admin to apply or delete the config file
+to/from initrd image. You can build it by the following command::
+
+ # make -C tools/bootconfig
+
+To add your boot config file to initrd image, run bootconfig as below
+(Old data is removed automatically if exists)::
+
+ # tools/bootconfig/bootconfig -a your-config /boot/initrd.img-X.Y.Z
+
+To remove the config from the image, you can use -d option as below::
+
+ # tools/bootconfig/bootconfig -d /boot/initrd.img-X.Y.Z
+
+Then add "bootconfig" on the normal kernel command line to tell the
+kernel to look for the bootconfig at the end of the initrd file.
+
+Config File Limitation
+======================
+
+Currently the maximum config size size is 32KB and the total key-words (not
+key-value entries) must be under 1024 nodes.
+Note: this is not the number of entries but nodes, an entry must consume
+more than 2 nodes (a key-word and a value). So theoretically, it will be
+up to 512 key-value pairs. If keys contains 3 words in average, it can
+contain 256 key-value pairs. In most cases, the number of config items
+will be under 100 entries and smaller than 8KB, so it would be enough.
+If the node number exceeds 1024, parser returns an error even if the file
+size is smaller than 32KB.
+Anyway, since bootconfig command verifies it when appending a boot config
+to initrd image, user can notice it before boot.
+
+
+Bootconfig APIs
+===============
+
+User can query or loop on key-value pairs, also it is possible to find
+a root (prefix) key node and find key-values under that node.
+
+If you have a key string, you can query the value directly with the key
+using xbc_find_value(). If you want to know what keys exist in the boot
+config, you can use xbc_for_each_key_value() to iterate key-value pairs.
+Note that you need to use xbc_array_for_each_value() for accessing
+each array's value, e.g.::
+
+ vnode = NULL;
+ xbc_find_value("key.word", &vnode);
+ if (vnode && xbc_node_is_array(vnode))
+    xbc_array_for_each_value(vnode, value) {
+      printk("%s ", value);
+    }
+
+If you want to focus on keys which have a prefix string, you can use
+xbc_find_node() to find a node by the prefix string, and iterate
+keys under the prefix node with xbc_node_for_each_key_value().
+
+But the most typical usage is to get the named value under prefix
+or get the named array under prefix as below::
+
+ root = xbc_find_node("key.prefix");
+ value = xbc_node_find_value(root, "option", &vnode);
+ ...
+ xbc_node_for_each_array_value(root, "array-option", value, anode) {
+    ...
+ }
+
+This accesses a value of "key.prefix.option" and an array of
+"key.prefix.array-option".
+
+Locking is not needed, since after initialization, the config becomes
+read-only. All data and keys must be copied if you need to modify it.
+
+
+Functions and structures
+========================
+
+.. kernel-doc:: include/linux/bootconfig.h
+.. kernel-doc:: lib/bootconfig.c
+
diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentation/admin-guide/dynamic-debug-howto.rst
index 252e5ef..1012bd9 100644
--- a/Documentation/admin-guide/dynamic-debug-howto.rst
+++ b/Documentation/admin-guide/dynamic-debug-howto.rst
@@ -13,6 +13,11 @@
 ``print_hex_dump_debug()``/``print_hex_dump_bytes()`` calls can be dynamically
 enabled per-callsite.
 
+If you do not want to enable dynamic debug globally (i.e. in some embedded
+system), you may set ``CONFIG_DYNAMIC_DEBUG_CORE`` as basic support of dynamic
+debug and add ``ccflags := -DDYNAMIC_DEBUG_MODULE`` into the Makefile of any
+modules which you'd like to dynamically debug later.
+
 If ``CONFIG_DYNAMIC_DEBUG`` is not set, ``print_hex_dump_debug()`` is just
 shortcut for ``print_hex_dump(KERN_DEBUG)``.
 
@@ -54,6 +59,9 @@
 				<debugfs>/dynamic_debug/control
   -bash: echo: write error: Invalid argument
 
+Note, for systems without 'debugfs' enabled, the control file can be
+found in ``/proc/dynamic_debug/control``.
+
 Viewing Dynamic Debug Behaviour
 ===============================
 
diff --git a/Documentation/admin-guide/ext4.rst b/Documentation/admin-guide/ext4.rst
index 059ddcb..87b0a3e 100644
--- a/Documentation/admin-guide/ext4.rst
+++ b/Documentation/admin-guide/ext4.rst
@@ -390,6 +390,13 @@
         Documentation/filesystems/dax.txt.  Note that this option is
         incompatible with data=journal.
 
+  inlinecrypt
+        When possible, encrypt/decrypt the contents of encrypted files using the
+        blk-crypto framework rather than filesystem-layer encryption. This
+        allows the use of inline encryption hardware. The on-disk format is
+        unaffected. For more details, see
+        Documentation/block/inline-encryption.rst.
+
 Data Mode
 =========
 There are 3 different data modes:
diff --git a/Documentation/admin-guide/index.rst b/Documentation/admin-guide/index.rst
index 34cc20e..4aa87af9 100644
--- a/Documentation/admin-guide/index.rst
+++ b/Documentation/admin-guide/index.rst
@@ -58,6 +58,7 @@
    :maxdepth: 1
 
    initrd
+   bootconfig
    cgroup-v2
    cgroup-v1/index
    serial-console
diff --git a/Documentation/admin-guide/kernel-parameters.rst b/Documentation/admin-guide/kernel-parameters.rst
index d05d531..6d42169 100644
--- a/Documentation/admin-guide/kernel-parameters.rst
+++ b/Documentation/admin-guide/kernel-parameters.rst
@@ -127,6 +127,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 165abcb..99b64c8 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -441,6 +441,12 @@
 			no delay (0).
 			Format: integer
 
+	bootconfig	[KNL]
+			Extended command line options can be added to an initrd
+			and this will cause the kernel to look for it.
+
+			See Documentation/admin-guide/bootconfig.rst
+
 	bootmem_debug	[KNL] Enable bootmem allocator debug messages.
 
 	bert_disable	[ACPI]
@@ -484,16 +490,21 @@
 	ccw_timeout_log	[S390]
 			See Documentation/s390/common_io.rst for details.
 
-	cgroup_disable=	[KNL] Disable a particular controller
-			Format: {name of the controller(s) to disable}
+	cgroup_disable=	[KNL] Disable a particular controller or optional feature
+			Format: {name of the controller(s) or feature(s) to disable}
 			The effects of cgroup_disable=foo are:
 			- foo isn't auto-mounted if you mount all cgroups in
 			  a single hierarchy
 			- foo isn't visible as an individually mountable
 			  subsystem
+			- if foo is an optional feature then the feature is
+			  disabled and corresponding cgroup files are not
+			  created
 			{Currently only "memory" controller deal with this and
 			cut the overhead, others just disable the usage. So
 			only cgroup_disable=memory is actually worthy}
+			Specifying "pressure" disables per-cgroup pressure
+			stall information accounting feature
 
 	cgroup_no_v1=	[KNL] Disable cgroup controllers and named hierarchies in v1
 			Format: { { controller | "all" | "named" }
@@ -3091,6 +3102,21 @@
 			in certain environments such as networked servers or
 			real-time systems.
 
+	no_hash_pointers
+			Force pointers printed to the console or buffers to be
+			unhashed.  By default, when a pointer is printed via %p
+			format string, that pointer is "hashed", i.e. obscured
+			by hashing the pointer value.  This is a security feature
+			that hides actual kernel addresses from unprivileged
+			users, but it also makes debugging the kernel more
+			difficult since unequal pointers can no longer be
+			compared.  However, if this command-line option is
+			specified, then all normal pointers will have their true
+			value printed.  Pointers printed via %pK may still be
+			hashed.  This option should only be specified when
+			debugging the kernel.  Please do not use on production
+			kernels.
+
 	nohibernate	[HIBERNATION] Disable hibernation and resume.
 
 	nohz=		[KNL] Boottime enable/disable dynamic ticks
@@ -3250,6 +3276,12 @@
 			This can be set from sysctl after boot.
 			See Documentation/admin-guide/sysctl/vm.rst 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/admin-guide/mm/userfaultfd.rst b/Documentation/admin-guide/mm/userfaultfd.rst
index 5048cf6..819e09b 100644
--- a/Documentation/admin-guide/mm/userfaultfd.rst
+++ b/Documentation/admin-guide/mm/userfaultfd.rst
@@ -63,36 +63,37 @@
 
 The uffdio_api.features bitmask returned by the UFFDIO_API ioctl
 defines what memory types are supported by the userfaultfd and what
-events, except page fault notifications, may be generated.
+events, except page fault notifications, may be generated:
 
-If the kernel supports registering userfaultfd ranges on hugetlbfs
-virtual memory areas, UFFD_FEATURE_MISSING_HUGETLBFS will be set in
-uffdio_api.features. Similarly, UFFD_FEATURE_MISSING_SHMEM will be
-set if the kernel supports registering userfaultfd ranges on shared
-memory (covering all shmem APIs, i.e. tmpfs, IPCSHM, /dev/zero
-MAP_SHARED, memfd_create, etc).
+- The UFFD_FEATURE_EVENT_* flags indicate that various other events
+  other than page faults are supported. These events are described in more
+  detail below in the Non-cooperative userfaultfd section.
 
-The userland application that wants to use userfaultfd with hugetlbfs
-or shared memory need to set the corresponding flag in
-uffdio_api.features to enable those features.
+- UFFD_FEATURE_MISSING_HUGETLBFS and UFFD_FEATURE_MISSING_SHMEM
+  indicate that the kernel supports UFFDIO_REGISTER_MODE_MISSING
+  registrations for hugetlbfs and shared memory (covering all shmem APIs,
+  i.e. tmpfs, IPCSHM, /dev/zero, MAP_SHARED, memfd_create,
+  etc) virtual memory areas, respectively.
 
-If the userland desires to receive notifications for events other than
-page faults, it has to verify that uffdio_api.features has appropriate
-UFFD_FEATURE_EVENT_* bits set. These events are described in more
-detail below in "Non-cooperative userfaultfd" section.
+- UFFD_FEATURE_MINOR_HUGETLBFS indicates that the kernel supports
+  UFFDIO_REGISTER_MODE_MINOR registration for hugetlbfs virtual memory
+  areas. UFFD_FEATURE_MINOR_SHMEM is the analogous feature indicating
+  support for shmem virtual memory areas.
 
-Once the userfaultfd has been enabled the UFFDIO_REGISTER ioctl should
-be invoked (if present in the returned uffdio_api.ioctls bitmask) to
-register a memory range in the userfaultfd by setting the
+The userland application should set the feature flags it intends to use
+when invoking the UFFDIO_API ioctl, to request that those features be
+enabled if supported.
+
+Once the userfaultfd API has been enabled the UFFDIO_REGISTER
+ioctl should be invoked (if present in the returned uffdio_api.ioctls
+bitmask) to register a memory range in the userfaultfd by setting the
 uffdio_register structure accordingly. The uffdio_register.mode
 bitmask will specify to the kernel which kind of faults to track for
-the range (UFFDIO_REGISTER_MODE_MISSING would track missing
-pages). The UFFDIO_REGISTER ioctl will return the
+the range. The UFFDIO_REGISTER ioctl will return the
 uffdio_register.ioctls bitmask of ioctls that are suitable to resolve
 userfaults on the range registered. Not all ioctls will necessarily be
-supported for all memory types depending on the underlying virtual
-memory backend (anonymous memory vs tmpfs vs real filebacked
-mappings).
+supported for all memory types (e.g. anonymous memory vs. shmem vs.
+hugetlbfs), or all types of intercepted faults.
 
 Userland can use the uffdio_register.ioctls to manage the virtual
 address space in the background (to add or potentially also remove
@@ -100,13 +101,60 @@
 could be triggering just before userland maps in the background the
 user-faulted page.
 
-The primary ioctl to resolve userfaults is UFFDIO_COPY. That
-atomically copies a page into the userfault registered range and wakes
-up the blocked userfaults (unless uffdio_copy.mode &
-UFFDIO_COPY_MODE_DONTWAKE is set). Other ioctl works similarly to
-UFFDIO_COPY. They're atomic as in guaranteeing that nothing can see an
-half copied page since it'll keep userfaulting until the copy has
-finished.
+Resolving Userfaults
+--------------------
+
+There are three basic ways to resolve userfaults:
+
+- UFFDIO_COPY atomically copies some existing page contents from
+  userspace.
+
+- UFFDIO_ZEROPAGE atomically zeros the new page.
+
+- UFFDIO_CONTINUE maps an existing, previously-populated page.
+
+These operations are atomic in the sense that they guarantee nothing can
+see a half-populated page, since readers will keep userfaulting until the
+operation has finished.
+
+By default, these wake up userfaults blocked on the range in question.
+They support a UFFDIO_*_MODE_DONTWAKE mode flag, which indicates
+that waking will be done separately at some later time.
+
+Which ioctl to choose depends on the kind of page fault, and what we'd
+like to do to resolve it:
+
+- For UFFDIO_REGISTER_MODE_MISSING faults, the fault needs to be
+  resolved by either providing a new page (UFFDIO_COPY), or mapping
+  the zero page (UFFDIO_ZEROPAGE). By default, the kernel would map
+  the zero page for a missing fault. With userfaultfd, userspace can
+  decide what content to provide before the faulting thread continues.
+
+- For UFFDIO_REGISTER_MODE_MINOR faults, there is an existing page (in
+  the page cache). Userspace has the option of modifying the page's
+  contents before resolving the fault. Once the contents are correct
+  (modified or not), userspace asks the kernel to map the page and let the
+  faulting thread continue with UFFDIO_CONTINUE.
+
+Notes:
+
+- You can tell which kind of fault occurred by examining
+  pagefault.flags within the uffd_msg, checking for the
+  UFFD_PAGEFAULT_FLAG_* flags.
+
+- None of the page-delivering ioctls default to the range that you
+  registered with.  You must fill in all fields for the appropriate
+  ioctl struct including the range.
+
+- You get the address of the access that triggered the missing page
+  event out of a struct uffd_msg that you read in the thread from the
+  uffd.  You can supply as many pages as you want with these IOCTLs.
+  Keep in mind that unless you used DONTWAKE then the first of any of
+  those IOCTLs wakes up the faulting thread.
+
+- Be sure to test for all errors including
+  (pollfd[0].revents & POLLERR).  This can happen, e.g. when ranges
+  supplied were incorrect.
 
 QEMU/KVM
 ========
diff --git a/Documentation/admin-guide/pstore-blk.rst b/Documentation/admin-guide/pstore-blk.rst
new file mode 100644
index 0000000..296d502
--- /dev/null
+++ b/Documentation/admin-guide/pstore-blk.rst
@@ -0,0 +1,243 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+pstore block oops/panic logger
+==============================
+
+Introduction
+------------
+
+pstore block (pstore/blk) is an oops/panic logger that writes its logs to a
+block device and non-block device before the system crashes. You can get
+these log files by mounting pstore filesystem like::
+
+    mount -t pstore pstore /sys/fs/pstore
+
+
+pstore block concepts
+---------------------
+
+pstore/blk provides efficient configuration method for pstore/blk, which
+divides all configurations into two parts, configurations for user and
+configurations for driver.
+
+Configurations for user determine how pstore/blk works, such as pmsg_size,
+kmsg_size and so on. All of them support both Kconfig and module parameters,
+but module parameters have priority over Kconfig.
+
+Configurations for driver are all about block device and non-block device,
+such as total_size of block device and read/write operations.
+
+Configurations for user
+-----------------------
+
+All of these configurations support both Kconfig and module parameters, but
+module parameters have priority over Kconfig.
+
+Here is an example for module parameters::
+
+        pstore_blk.blkdev=179:7 pstore_blk.kmsg_size=64
+
+The detail of each configurations may be of interest to you.
+
+blkdev
+~~~~~~
+
+The block device to use. Most of the time, it is a partition of block device.
+It's required for pstore/blk. It is also used for MTD device.
+
+It accepts the following variants for block device:
+
+1. <hex_major><hex_minor> device number in hexadecimal represents itself; no
+   leading 0x, for example b302.
+#. /dev/<disk_name> represents the device number of disk
+#. /dev/<disk_name><decimal> represents the device number of partition - device
+   number of disk plus the partition number
+#. /dev/<disk_name>p<decimal> - same as the above; this form is used when disk
+   name of partitioned disk ends with a digit.
+#. PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF represents the unique id of
+   a partition if the partition table provides it. The UUID may be either an
+   EFI/GPT UUID, or refer to an MSDOS partition using the format SSSSSSSS-PP,
+   where SSSSSSSS is a zero-filled hex representation of the 32-bit
+   "NT disk signature", and PP is a zero-filled hex representation of the
+   1-based partition number.
+#. PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to a
+   partition with a known unique id.
+#. <major>:<minor> major and minor number of the device separated by a colon.
+
+It accepts the following variants for MTD device:
+
+1. <device name> MTD device name. "pstore" is recommended.
+#. <device number> MTD device number.
+
+kmsg_size
+~~~~~~~~~
+
+The chunk size in KB for oops/panic front-end. It **MUST** be a multiple of 4.
+It's optional if you do not care oops/panic log.
+
+There are multiple chunks for oops/panic front-end depending on the remaining
+space except other pstore front-ends.
+
+pstore/blk will log to oops/panic chunks one by one, and always overwrite the
+oldest chunk if there is no more free chunk.
+
+pmsg_size
+~~~~~~~~~
+
+The chunk size in KB for pmsg front-end. It **MUST** be a multiple of 4.
+It's optional if you do not care pmsg log.
+
+Unlike oops/panic front-end, there is only one chunk for pmsg front-end.
+
+Pmsg is a user space accessible pstore object. Writes to */dev/pmsg0* are
+appended to the chunk. On reboot the contents are available in
+*/sys/fs/pstore/pmsg-pstore-blk-0*.
+
+console_size
+~~~~~~~~~~~~
+
+The chunk size in KB for console front-end.  It **MUST** be a multiple of 4.
+It's optional if you do not care console log.
+
+Similar to pmsg front-end, there is only one chunk for console front-end.
+
+All log of console will be appended to the chunk. On reboot the contents are
+available in */sys/fs/pstore/console-pstore-blk-0*.
+
+ftrace_size
+~~~~~~~~~~~
+
+The chunk size in KB for ftrace front-end. It **MUST** be a multiple of 4.
+It's optional if you do not care console log.
+
+Similar to oops front-end, there are multiple chunks for ftrace front-end
+depending on the count of cpu processors. Each chunk size is equal to
+ftrace_size / processors_count.
+
+All log of ftrace will be appended to the chunk. On reboot the contents are
+combined and available in */sys/fs/pstore/ftrace-pstore-blk-0*.
+
+Persistent function tracing might be useful for debugging software or hardware
+related hangs. Here is an example of usage::
+
+ # mount -t pstore pstore /sys/fs/pstore
+ # mount -t debugfs debugfs /sys/kernel/debug/
+ # echo 1 > /sys/kernel/debug/pstore/record_ftrace
+ # reboot -f
+ [...]
+ # mount -t pstore pstore /sys/fs/pstore
+ # tail /sys/fs/pstore/ftrace-pstore-blk-0
+ CPU:0 ts:5914676 c0063828  c0063b94  call_cpuidle <- cpu_startup_entry+0x1b8/0x1e0
+ CPU:0 ts:5914678 c039ecdc  c006385c  cpuidle_enter_state <- call_cpuidle+0x44/0x48
+ CPU:0 ts:5914680 c039e9a0  c039ecf0  cpuidle_enter_freeze <- cpuidle_enter_state+0x304/0x314
+ CPU:0 ts:5914681 c0063870  c039ea30  sched_idle_set_state <- cpuidle_enter_state+0x44/0x314
+ CPU:1 ts:5916720 c0160f59  c015ee04  kernfs_unmap_bin_file <- __kernfs_remove+0x140/0x204
+ CPU:1 ts:5916721 c05ca625  c015ee0c  __mutex_lock_slowpath <- __kernfs_remove+0x148/0x204
+ CPU:1 ts:5916723 c05c813d  c05ca630  yield_to <- __mutex_lock_slowpath+0x314/0x358
+ CPU:1 ts:5916724 c05ca2d1  c05ca638  __ww_mutex_lock <- __mutex_lock_slowpath+0x31c/0x358
+
+max_reason
+~~~~~~~~~~
+
+Limiting which kinds of kmsg dumps are stored can be controlled via
+the ``max_reason`` value, as defined in include/linux/kmsg_dump.h's
+``enum kmsg_dump_reason``. For example, to store both Oopses and Panics,
+``max_reason`` should be set to 2 (KMSG_DUMP_OOPS), to store only Panics
+``max_reason`` should be set to 1 (KMSG_DUMP_PANIC). Setting this to 0
+(KMSG_DUMP_UNDEF), means the reason filtering will be controlled by the
+``printk.always_kmsg_dump`` boot param: if unset, it'll be KMSG_DUMP_OOPS,
+otherwise KMSG_DUMP_MAX.
+
+Configurations for driver
+-------------------------
+
+Only a block device driver cares about these configurations. A block device
+driver uses ``register_pstore_blk`` to register to pstore/blk.
+
+.. kernel-doc:: fs/pstore/blk.c
+   :identifiers: register_pstore_blk
+
+A non-block device driver uses ``register_pstore_device`` with
+``struct pstore_device_info`` to register to pstore/blk.
+
+.. kernel-doc:: fs/pstore/blk.c
+   :identifiers: register_pstore_device
+
+.. kernel-doc:: include/linux/pstore_blk.h
+   :identifiers: pstore_device_info
+
+Compression and header
+----------------------
+
+Block device is large enough for uncompressed oops data. Actually we do not
+recommend data compression because pstore/blk will insert some information into
+the first line of oops/panic data. For example::
+
+        Panic: Total 16 times
+
+It means that it's OOPS|Panic for the 16th time since the first booting.
+Sometimes the number of occurrences of oops|panic since the first booting is
+important to judge whether the system is stable.
+
+The following line is inserted by pstore filesystem. For example::
+
+        Oops#2 Part1
+
+It means that it's OOPS for the 2nd time on the last boot.
+
+Reading the data
+----------------
+
+The dump data can be read from the pstore filesystem. The format for these
+files is ``dmesg-pstore-blk-[N]`` for oops/panic front-end,
+``pmsg-pstore-blk-0`` for pmsg front-end and so on.  The timestamp of the
+dump file records the trigger time. To delete a stored record from block
+device, simply unlink the respective pstore file.
+
+Attentions in panic read/write APIs
+-----------------------------------
+
+If on panic, the kernel is not going to run for much longer, the tasks will not
+be scheduled and most kernel resources will be out of service. It
+looks like a single-threaded program running on a single-core computer.
+
+The following points require special attention for panic read/write APIs:
+
+1. Can **NOT** allocate any memory.
+   If you need memory, just allocate while the block driver is initializing
+   rather than waiting until the panic.
+#. Must be polled, **NOT** interrupt driven.
+   No task schedule any more. The block driver should delay to ensure the write
+   succeeds, but NOT sleep.
+#. Can **NOT** take any lock.
+   There is no other task, nor any shared resource; you are safe to break all
+   locks.
+#. Just use CPU to transfer.
+   Do not use DMA to transfer unless you are sure that DMA will not keep lock.
+#. Control registers directly.
+   Please control registers directly rather than use Linux kernel resources.
+   Do I/O map while initializing rather than wait until a panic occurs.
+#. Reset your block device and controller if necessary.
+   If you are not sure of the state of your block device and controller when
+   a panic occurs, you are safe to stop and reset them.
+
+pstore/blk supports psblk_blkdev_info(), which is defined in
+*linux/pstore_blk.h*, to get information of using block device, such as the
+device number, sector count and start sector of the whole disk.
+
+pstore block internals
+----------------------
+
+For developer reference, here are all the important structures and APIs:
+
+.. kernel-doc:: fs/pstore/zone.c
+   :internal:
+
+.. kernel-doc:: include/linux/pstore_zone.h
+   :internal:
+
+.. kernel-doc:: fs/pstore/blk.c
+   :export:
+
+.. kernel-doc:: include/linux/pstore_blk.h
+   :internal:
diff --git a/Documentation/admin-guide/ramoops.rst b/Documentation/admin-guide/ramoops.rst
index 6dbcc54..a60a962 100644
--- a/Documentation/admin-guide/ramoops.rst
+++ b/Documentation/admin-guide/ramoops.rst
@@ -32,11 +32,17 @@
 memory are implementation defined, and won't work on many ARMs such as omaps.
 
 The memory area is divided into ``record_size`` chunks (also rounded down to
-power of two) and each oops/panic writes a ``record_size`` chunk of
+power of two) and each kmesg dump writes a ``record_size`` chunk of
 information.
 
-Dumping both oopses and panics can be done by setting 1 in the ``dump_oops``
-variable while setting 0 in that variable dumps only the panics.
+Limiting which kinds of kmsg dumps are stored can be controlled via
+the ``max_reason`` value, as defined in include/linux/kmsg_dump.h's
+``enum kmsg_dump_reason``. For example, to store both Oopses and Panics,
+``max_reason`` should be set to 2 (KMSG_DUMP_OOPS), to store only Panics
+``max_reason`` should be set to 1 (KMSG_DUMP_PANIC). Setting this to 0
+(KMSG_DUMP_UNDEF), means the reason filtering will be controlled by the
+``printk.always_kmsg_dump`` boot param: if unset, it'll be KMSG_DUMP_OOPS,
+otherwise KMSG_DUMP_MAX.
 
 The module uses a counter to record multiple dumps but the counter gets reset
 on restart (i.e. new dumps after the restart will overwrite old ones).
@@ -90,7 +96,7 @@
         .mem_address            = <...>,
         .mem_type               = <...>,
         .record_size            = <...>,
-        .dump_oops              = <...>,
+        .max_reason             = <...>,
         .ecc                    = <...>,
   };
 
diff --git a/Documentation/admin-guide/sysctl/kernel.rst b/Documentation/admin-guide/sysctl/kernel.rst
index 032c7cd..2675980 100644
--- a/Documentation/admin-guide/sysctl/kernel.rst
+++ b/Documentation/admin-guide/sysctl/kernel.rst
@@ -933,6 +933,60 @@
 incurs a small amount of overhead in the scheduler but is
 useful for debugging and performance tuning.
 
+sched_util_clamp_min:
+=====================
+
+Max allowed *minimum* utilization.
+
+Default value is 1024, which is the maximum possible value.
+
+It means that any requested uclamp.min value cannot be greater than
+sched_util_clamp_min, i.e., it is restricted to the range
+[0:sched_util_clamp_min].
+
+sched_util_clamp_max:
+=====================
+
+Max allowed *maximum* utilization.
+
+Default value is 1024, which is the maximum possible value.
+
+It means that any requested uclamp.max value cannot be greater than
+sched_util_clamp_max, i.e., it is restricted to the range
+[0:sched_util_clamp_max].
+
+sched_util_clamp_min_rt_default:
+================================
+
+By default Linux is tuned for performance. Which means that RT tasks always run
+at the highest frequency and most capable (highest capacity) CPU (in
+heterogeneous systems).
+
+Uclamp achieves this by setting the requested uclamp.min of all RT tasks to
+1024 by default, which effectively boosts the tasks to run at the highest
+frequency and biases them to run on the biggest CPU.
+
+This knob allows admins to change the default behavior when uclamp is being
+used. In battery powered devices particularly, running at the maximum
+capacity and frequency will increase energy consumption and shorten the battery
+life.
+
+This knob is only effective for RT tasks which the user hasn't modified their
+requested uclamp.min value via sched_setattr() syscall.
+
+This knob will not escape the range constraint imposed by sched_util_clamp_min
+defined above.
+
+For example if
+
+	sched_util_clamp_min_rt_default = 800
+	sched_util_clamp_min = 600
+
+Then the boost will be clamped to 600 because 800 is outside of the permissible
+range of [0:600]. This could happen for instance if a powersave mode will
+restrict all boosts temporarily by modifying sched_util_clamp_min. As soon as
+this restriction is lifted, the requested sched_util_clamp_min_rt_default
+will take effect.
 
 sg-big-buff:
 ============
diff --git a/Documentation/admin-guide/sysctl/vm.rst b/Documentation/admin-guide/sysctl/vm.rst
index 64aeee1..dcca8a6 100644
--- a/Documentation/admin-guide/sysctl/vm.rst
+++ b/Documentation/admin-guide/sysctl/vm.rst
@@ -37,6 +37,7 @@
 - dirty_writeback_centisecs
 - drop_caches
 - extfrag_threshold
+- extra_free_kbytes
 - hugetlb_shm_group
 - laptop_mode
 - legacy_va_layout
@@ -287,6 +288,21 @@
 any throttling.
 
 
+extra_free_kbytes
+
+This parameter tells the VM to keep extra free memory between the threshold
+where background reclaim (kswapd) kicks in, and the threshold where direct
+reclaim (by allocating processes) kicks in.
+
+This is useful for workloads that require low latency memory allocations
+and have a bounded burstiness in memory allocations, for example a
+realtime application that receives and transmits network traffic
+(causing in-kernel memory allocations) with a maximum total message burst
+size of 200MB may need 200MB of extra free memory to avoid direct reclaim
+related latencies.
+
+==============================================================
+
 hugetlb_shm_group
 =================
 
@@ -840,12 +856,17 @@
 unprivileged_userfaultfd
 ========================
 
-This flag controls whether unprivileged users can use the userfaultfd
-system calls.  Set this to 1 to allow unprivileged users to use the
-userfaultfd system calls, or set this to 0 to restrict userfaultfd to only
-privileged users (with SYS_CAP_PTRACE capability).
+This flag controls the mode in which unprivileged users can use the
+userfaultfd system calls. Set this to 0 to restrict unprivileged users
+to handle page faults in user mode only. In this case, users without
+SYS_CAP_PTRACE must pass UFFD_USER_MODE_ONLY in order for userfaultfd to
+succeed. Prohibiting use of userfaultfd for handling faults from kernel
+mode may make certain vulnerabilities more difficult to exploit.
 
-The default value is 1.
+Set this to 1 to allow unprivileged users to use the userfaultfd system
+calls without any restrictions.
+
+The default value is 0.
 
 
 user_reserve_kbytes
diff --git a/Documentation/arm64/amu.rst b/Documentation/arm64/amu.rst
new file mode 100644
index 0000000..5057b11
--- /dev/null
+++ b/Documentation/arm64/amu.rst
@@ -0,0 +1,112 @@
+=======================================================
+Activity Monitors Unit (AMU) extension in AArch64 Linux
+=======================================================
+
+Author: Ionela Voinescu <ionela.voinescu@arm.com>
+
+Date: 2019-09-10
+
+This document briefly describes the provision of Activity Monitors Unit
+support in AArch64 Linux.
+
+
+Architecture overview
+---------------------
+
+The activity monitors extension is an optional extension introduced by the
+ARMv8.4 CPU architecture.
+
+The activity monitors unit, implemented in each CPU, provides performance
+counters intended for system management use. The AMU extension provides a
+system register interface to the counter registers and also supports an
+optional external memory-mapped interface.
+
+Version 1 of the Activity Monitors architecture implements a counter group
+of four fixed and architecturally defined 64-bit event counters.
+  - CPU cycle counter: increments at the frequency of the CPU.
+  - Constant counter: increments at the fixed frequency of the system
+    clock.
+  - Instructions retired: increments with every architecturally executed
+    instruction.
+  - Memory stall cycles: counts instruction dispatch stall cycles caused by
+    misses in the last level cache within the clock domain.
+
+When in WFI or WFE these counters do not increment.
+
+The Activity Monitors architecture provides space for up to 16 architected
+event counters. Future versions of the architecture may use this space to
+implement additional architected event counters.
+
+Additionally, version 1 implements a counter group of up to 16 auxiliary
+64-bit event counters.
+
+On cold reset all counters reset to 0.
+
+
+Basic support
+-------------
+
+The kernel can safely run a mix of CPUs with and without support for the
+activity monitors extension. Therefore, when CONFIG_ARM64_AMU_EXTN is
+selected we unconditionally enable the capability to allow any late CPU
+(secondary or hotplugged) to detect and use the feature.
+
+When the feature is detected on a CPU, we flag the availability of the
+feature but this does not guarantee the correct functionality of the
+counters, only the presence of the extension.
+
+Firmware (code running at higher exception levels, e.g. arm-tf) support is
+needed to:
+ - Enable access for lower exception levels (EL2 and EL1) to the AMU
+   registers.
+ - Enable the counters. If not enabled these will read as 0.
+ - Save/restore the counters before/after the CPU is being put/brought up
+   from the 'off' power state.
+
+When using kernels that have this feature enabled but boot with broken
+firmware the user may experience panics or lockups when accessing the
+counter registers. Even if these symptoms are not observed, the values
+returned by the register reads might not correctly reflect reality. Most
+commonly, the counters will read as 0, indicating that they are not
+enabled.
+
+If proper support is not provided in firmware it's best to disable
+CONFIG_ARM64_AMU_EXTN. To be noted that for security reasons, this does not
+bypass the setting of AMUSERENR_EL0 to trap accesses from EL0 (userspace) to
+EL1 (kernel). Therefore, firmware should still ensure accesses to AMU registers
+are not trapped in EL2/EL3.
+
+The fixed counters of AMUv1 are accessible though the following system
+register definitions:
+ - SYS_AMEVCNTR0_CORE_EL0
+ - SYS_AMEVCNTR0_CONST_EL0
+ - SYS_AMEVCNTR0_INST_RET_EL0
+ - SYS_AMEVCNTR0_MEM_STALL_EL0
+
+Auxiliary platform specific counters can be accessed using
+SYS_AMEVCNTR1_EL0(n), where n is a value between 0 and 15.
+
+Details can be found in: arch/arm64/include/asm/sysreg.h.
+
+
+Userspace access
+----------------
+
+Currently, access from userspace to the AMU registers is disabled due to:
+ - Security reasons: they might expose information about code executed in
+   secure mode.
+ - Purpose: AMU counters are intended for system management use.
+
+Also, the presence of the feature is not visible to userspace.
+
+
+Virtualization
+--------------
+
+Currently, access from userspace (EL0) and kernelspace (EL1) on the KVM
+guest side is disabled due to:
+ - Security reasons: they might expose information about code executed
+   by other guests or the host.
+
+Any attempt to access the AMU registers will result in an UNDEFINED
+exception being injected into the guest.
diff --git a/Documentation/arm64/booting.rst b/Documentation/arm64/booting.rst
index d3f3a60..a17f427 100644
--- a/Documentation/arm64/booting.rst
+++ b/Documentation/arm64/booting.rst
@@ -245,6 +245,20 @@
     - HCR_EL2.APK (bit 40) must be initialised to 0b1
     - HCR_EL2.API (bit 41) must be initialised to 0b1
 
+  For CPUs with Activity Monitors Unit v1 (AMUv1) extension present:
+  - If EL3 is present:
+    CPTR_EL3.TAM (bit 30) must be initialised to 0b0
+    CPTR_EL2.TAM (bit 30) must be initialised to 0b0
+    AMCNTENSET0_EL0 must be initialised to 0b1111
+    AMCNTENSET1_EL0 must be initialised to a platform specific value
+    having 0b1 set for the corresponding bit for each of the auxiliary
+    counters present.
+  - If the kernel is entered at EL1:
+    AMCNTENSET0_EL0 must be initialised to 0b1111
+    AMCNTENSET1_EL0 must be initialised to a platform specific value
+    having 0b1 set for the corresponding bit for each of the auxiliary
+    counters present.
+
 The requirements described above for CPU mode, caches, MMUs, architected
 timers, coherency and system registers apply to all CPUs.  All CPUs must
 enter the kernel in the same exception level.
diff --git a/Documentation/arm64/index.rst b/Documentation/arm64/index.rst
index 5c0c69d..09cbb4e 100644
--- a/Documentation/arm64/index.rst
+++ b/Documentation/arm64/index.rst
@@ -6,6 +6,7 @@
     :maxdepth: 1
 
     acpi_object_usage
+    amu
     arm-acpi
     booting
     cpu-feature-registers
diff --git a/Documentation/block/index.rst b/Documentation/block/index.rst
index 3fa7a52..026addf 100644
--- a/Documentation/block/index.rst
+++ b/Documentation/block/index.rst
@@ -14,6 +14,7 @@
    cmdline-partition
    data-integrity
    deadline-iosched
+   inline-encryption
    ioprio
    kyber-iosched
    null_blk
diff --git a/Documentation/block/inline-encryption.rst b/Documentation/block/inline-encryption.rst
new file mode 100644
index 0000000..5fcea79
--- /dev/null
+++ b/Documentation/block/inline-encryption.rst
@@ -0,0 +1,263 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=================
+Inline Encryption
+=================
+
+Background
+==========
+
+Inline encryption hardware sits logically between memory and the disk, and can
+en/decrypt data as it goes in/out of the disk. Inline encryption hardware has a
+fixed number of "keyslots" - slots into which encryption contexts (i.e. the
+encryption key, encryption algorithm, data unit size) can be programmed by the
+kernel at any time. Each request sent to the disk can be tagged with the index
+of a keyslot (and also a data unit number to act as an encryption tweak), and
+the inline encryption hardware will en/decrypt the data in the request with the
+encryption context programmed into that keyslot. This is very different from
+full disk encryption solutions like self encrypting drives/TCG OPAL/ATA
+Security standards, since with inline encryption, any block on disk could be
+encrypted with any encryption context the kernel chooses.
+
+
+Objective
+=========
+
+We want to support inline encryption (IE) in the kernel.
+To allow for testing, we also want a crypto API fallback when actual
+IE hardware is absent. We also want IE to work with layered devices
+like dm and loopback (i.e. we want to be able to use the IE hardware
+of the underlying devices if present, or else fall back to crypto API
+en/decryption).
+
+
+Constraints and notes
+=====================
+
+- IE hardware has a limited number of "keyslots" that can be programmed
+  with an encryption context (key, algorithm, data unit size, etc.) at any time.
+  One can specify a keyslot in a data request made to the device, and the
+  device will en/decrypt the data using the encryption context programmed into
+  that specified keyslot. When possible, we want to make multiple requests with
+  the same encryption context share the same keyslot.
+
+- We need a way for upper layers like filesystems to specify an encryption
+  context to use for en/decrypting a struct bio, and a device driver (like UFS)
+  needs to be able to use that encryption context when it processes the bio.
+
+- We need a way for device drivers to expose their inline encryption
+  capabilities in a unified way to the upper layers.
+
+
+Design
+======
+
+We add a :c:type:`struct bio_crypt_ctx` to :c:type:`struct bio` that can
+represent an encryption context, because we need to be able to pass this
+encryption context from the upper layers (like the fs layer) to the
+device driver to act upon.
+
+While IE hardware works on the notion of keyslots, the FS layer has no
+knowledge of keyslots - it simply wants to specify an encryption context to
+use while en/decrypting a bio.
+
+We introduce a keyslot manager (KSM) that handles the translation from
+encryption contexts specified by the FS to keyslots on the IE hardware.
+This KSM also serves as the way IE hardware can expose its capabilities to
+upper layers. The generic mode of operation is: each device driver that wants
+to support IE will construct a KSM and set it up in its struct request_queue.
+Upper layers that want to use IE on this device can then use this KSM in
+the device's struct request_queue to translate an encryption context into
+a keyslot. The presence of the KSM in the request queue shall be used to mean
+that the device supports IE.
+
+The KSM uses refcounts to track which keyslots are idle (either they have no
+encryption context programmed, or there are no in-flight struct bios
+referencing that keyslot). When a new encryption context needs a keyslot, it
+tries to find a keyslot that has already been programmed with the same
+encryption context, and if there is no such keyslot, it evicts the least
+recently used idle keyslot and programs the new encryption context into that
+one. If no idle keyslots are available, then the caller will sleep until there
+is at least one.
+
+
+blk-mq changes, other block layer changes and blk-crypto-fallback
+=================================================================
+
+We add a pointer to a ``bi_crypt_context`` and ``keyslot`` to
+:c:type:`struct request`. These will be referred to as the ``crypto fields``
+for the request. This ``keyslot`` is the keyslot into which the
+``bi_crypt_context`` has been programmed in the KSM of the ``request_queue``
+that this request is being sent to.
+
+We introduce ``block/blk-crypto-fallback.c``, which allows upper layers to remain
+blissfully unaware of whether or not real inline encryption hardware is present
+underneath. When a bio is submitted with a target ``request_queue`` that doesn't
+support the encryption context specified with the bio, the block layer will
+en/decrypt the bio with the blk-crypto-fallback.
+
+If the bio is a ``WRITE`` bio, a bounce bio is allocated, and the data in the bio
+is encrypted stored in the bounce bio - blk-mq will then proceed to process the
+bounce bio as if it were not encrypted at all (except when blk-integrity is
+concerned). ``blk-crypto-fallback`` sets the bounce bio's ``bi_end_io`` to an
+internal function that cleans up the bounce bio and ends the original bio.
+
+If the bio is a ``READ`` bio, the bio's ``bi_end_io`` (and also ``bi_private``)
+is saved and overwritten by ``blk-crypto-fallback`` to
+``bio_crypto_fallback_decrypt_bio``.  The bio's ``bi_crypt_context`` is also
+overwritten with ``NULL``, so that to the rest of the stack, the bio looks
+as if it was a regular bio that never had an encryption context specified.
+``bio_crypto_fallback_decrypt_bio`` will decrypt the bio, restore the original
+``bi_end_io`` (and also ``bi_private``) and end the bio again.
+
+Regardless of whether real inline encryption hardware is used or the
+blk-crypto-fallback is used, the ciphertext written to disk (and hence the
+on-disk format of data) will be the same (assuming the hardware's implementation
+of the algorithm being used adheres to spec and functions correctly).
+
+If a ``request queue``'s inline encryption hardware claimed to support the
+encryption context specified with a bio, then it will not be handled by the
+``blk-crypto-fallback``. We will eventually reach a point in blk-mq when a
+:c:type:`struct request` needs to be allocated for that bio. At that point,
+blk-mq tries to program the encryption context into the ``request_queue``'s
+keyslot_manager, and obtain a keyslot, which it stores in its newly added
+``keyslot`` field. This keyslot is released when the request is completed.
+
+When the first bio is added to a request, ``blk_crypto_rq_bio_prep`` is called,
+which sets the request's ``crypt_ctx`` to a copy of the bio's
+``bi_crypt_context``. bio_crypt_do_front_merge is called whenever a subsequent
+bio is merged to the front of the request, which updates the ``crypt_ctx`` of
+the request so that it matches the newly merged bio's ``bi_crypt_context``. In particular, the request keeps a copy of the ``bi_crypt_context`` of the first
+bio in its bio-list (blk-mq needs to be careful to maintain this invariant
+during bio and request merges).
+
+To make it possible for inline encryption to work with request queue based
+layered devices, when a request is cloned, its ``crypto fields`` are cloned as
+well. When the cloned request is submitted, blk-mq programs the
+``bi_crypt_context`` of the request into the clone's request_queue's keyslot
+manager, and stores the returned keyslot in the clone's ``keyslot``.
+
+
+API presented to users of the block layer
+=========================================
+
+``struct blk_crypto_key`` represents a crypto key (the raw key, size of the
+key, the crypto algorithm to use, the data unit size to use, and the number of
+bytes required to represent data unit numbers that will be specified with the
+``bi_crypt_context``).
+
+``blk_crypto_init_key`` allows upper layers to initialize such a
+``blk_crypto_key``.
+
+``bio_crypt_set_ctx`` should be called on any bio that a user of
+the block layer wants en/decrypted via inline encryption (or the
+blk-crypto-fallback, if hardware support isn't available for the desired
+crypto configuration). This function takes the ``blk_crypto_key`` and the
+data unit number (DUN) to use when en/decrypting the bio.
+
+``blk_crypto_config_supported`` allows upper layers to query whether or not the
+an encryption context passed to request queue can be handled by blk-crypto
+(either by real inline encryption hardware, or by the blk-crypto-fallback).
+This is useful e.g. when blk-crypto-fallback is disabled, and the upper layer
+wants to use an algorithm that may not supported by hardware - this function
+lets the upper layer know ahead of time that the algorithm isn't supported,
+and the upper layer can fallback to something else if appropriate.
+
+``blk_crypto_start_using_key`` - Upper layers must call this function on
+``blk_crypto_key`` and a ``request_queue`` before using the key with any bio
+headed for that ``request_queue``. This function ensures that either the
+hardware supports the key's crypto settings, or the crypto API fallback has
+transforms for the needed mode allocated and ready to go. Note that this
+function may allocate an ``skcipher``, and must not be called from the data
+path, since allocating ``skciphers`` from the data path can deadlock.
+
+``blk_crypto_evict_key`` *must* be called by upper layers before a
+``blk_crypto_key`` is freed. Further, it *must* only be called only once
+there are no more in-flight requests that use that ``blk_crypto_key``.
+``blk_crypto_evict_key`` will ensure that a key is removed from any keyslots in
+inline encryption hardware that the key might have been programmed into (or the blk-crypto-fallback).
+
+API presented to device drivers
+===============================
+
+A :c:type:``struct blk_keyslot_manager`` should be set up by device drivers in
+the ``request_queue`` of the device. The device driver needs to call
+``blk_ksm_init`` (or its resource-managed variant ``devm_blk_ksm_init``) on the
+``blk_keyslot_manager``, while specifying the number of keyslots supported by
+the hardware.
+
+The device driver also needs to tell the KSM how to actually manipulate the
+IE hardware in the device to do things like programming the crypto key into
+the IE hardware into a particular keyslot. All this is achieved through the
+:c:type:`struct blk_ksm_ll_ops` field in the KSM that the device driver
+must fill up after initing the ``blk_keyslot_manager``.
+
+The KSM also handles runtime power management for the device when applicable
+(e.g. when it wants to program a crypto key into the IE hardware, the device
+must be runtime powered on) - so the device driver must also set the ``dev``
+field in the ksm to point to the `struct device` for the KSM to use for runtime
+power management.
+
+``blk_ksm_reprogram_all_keys`` can be called by device drivers if the device
+needs each and every of its keyslots to be reprogrammed with the key it
+"should have" at the point in time when the function is called. This is useful
+e.g. if a device loses all its keys on runtime power down/up.
+
+If the driver used ``blk_ksm_init`` instead of ``devm_blk_ksm_init``, then
+``blk_ksm_destroy`` should be called to free up all resources used by a
+``blk_keyslot_manager`` once it is no longer needed.
+
+Layered Devices
+===============
+
+Request queue based layered devices like dm-rq that wish to support IE need to
+create their own keyslot manager for their request queue, and expose whatever
+functionality they choose. When a layered device wants to pass a clone of that
+request to another ``request_queue``, blk-crypto will initialize and prepare the
+clone as necessary - see ``blk_crypto_insert_cloned_request`` in
+``blk-crypto.c``.
+
+
+Future Optimizations for layered devices
+========================================
+
+Creating a keyslot manager for a layered device uses up memory for each
+keyslot, and in general, a layered device merely passes the request on to a
+"child" device, so the keyslots in the layered device itself are completely
+unused, and don't need any refcounting or keyslot programming. We can instead
+define a new type of KSM; the "passthrough KSM", that layered devices can use
+to advertise an unlimited number of keyslots, and support for any encryption
+algorithms they choose, while not actually using any memory for each keyslot.
+Another use case for the "passthrough KSM" is for IE devices that do not have a
+limited number of keyslots.
+
+
+Interaction between inline encryption and blk integrity
+=======================================================
+
+At the time of this patch, there is no real hardware that supports both these
+features. However, these features do interact with each other, and it's not
+completely trivial to make them both work together properly. In particular,
+when a WRITE bio wants to use inline encryption on a device that supports both
+features, the bio will have an encryption context specified, after which
+its integrity information is calculated (using the plaintext data, since
+the encryption will happen while data is being written), and the data and
+integrity info is sent to the device. Obviously, the integrity info must be
+verified before the data is encrypted. After the data is encrypted, the device
+must not store the integrity info that it received with the plaintext data
+since that might reveal information about the plaintext data. As such, it must
+re-generate the integrity info from the ciphertext data and store that on disk
+instead. Another issue with storing the integrity info of the plaintext data is
+that it changes the on disk format depending on whether hardware inline
+encryption support is present or the kernel crypto API fallback is used (since
+if the fallback is used, the device will receive the integrity info of the
+ciphertext, not that of the plaintext).
+
+Because there isn't any real hardware yet, it seems prudent to assume that
+hardware implementations might not implement both features together correctly,
+and disallow the combination for now. Whenever a device supports integrity, the
+kernel will pretend that the device does not support hardware inline encryption
+(by essentially setting the keyslot manager in the request_queue of the device
+to NULL). When the crypto API fallback is enabled, this means that all bios with
+and encryption context will use the fallback, and IO will complete as usual.
+When the fallback is disabled, a bio with an encryption context will be failed.
diff --git a/Documentation/dev-tools/index.rst b/Documentation/dev-tools/index.rst
index b0522a4..e09315b 100644
--- a/Documentation/dev-tools/index.rst
+++ b/Documentation/dev-tools/index.rst
@@ -21,9 +21,11 @@
    kasan
    ubsan
    kmemleak
+   kfence
    gdb-kernel-debugging
    kgdb
    kselftest
+   kunit/index
 
 
 .. only::  subproject and html
diff --git a/Documentation/dev-tools/kcov.rst b/Documentation/dev-tools/kcov.rst
index 42b6126..1c4e182 100644
--- a/Documentation/dev-tools/kcov.rst
+++ b/Documentation/dev-tools/kcov.rst
@@ -34,6 +34,7 @@
 
 Coverage collection
 -------------------
+
 The following program demonstrates coverage collection from within a test
 program using kcov:
 
@@ -128,6 +129,7 @@
 
 Comparison operands collection
 ------------------------------
+
 Comparison operands collection is similar to coverage collection:
 
 .. code-block:: c
@@ -202,3 +204,130 @@
 
 Note that the kcov modes (coverage collection or comparison operands) are
 mutually exclusive.
+
+Remote coverage collection
+--------------------------
+
+With KCOV_ENABLE coverage is collected only for syscalls that are issued
+from the current process. With KCOV_REMOTE_ENABLE it's possible to collect
+coverage for arbitrary parts of the kernel code, provided that those parts
+are annotated with kcov_remote_start()/kcov_remote_stop().
+
+This allows to collect coverage from two types of kernel background
+threads: the global ones, that are spawned during kernel boot in a limited
+number of instances (e.g. one USB hub_event() worker thread is spawned per
+USB HCD); and the local ones, that are spawned when a user interacts with
+some kernel interface (e.g. vhost workers).
+
+To enable collecting coverage from a global background thread, a unique
+global handle must be assigned and passed to the corresponding
+kcov_remote_start() call. Then a userspace process can pass a list of such
+handles to the KCOV_REMOTE_ENABLE ioctl in the handles array field of the
+kcov_remote_arg struct. This will attach the used kcov device to the code
+sections, that are referenced by those handles.
+
+Since there might be many local background threads spawned from different
+userspace processes, we can't use a single global handle per annotation.
+Instead, the userspace process passes a non-zero handle through the
+common_handle field of the kcov_remote_arg struct. This common handle gets
+saved to the kcov_handle field in the current task_struct and needs to be
+passed to the newly spawned threads via custom annotations. Those threads
+should in turn be annotated with kcov_remote_start()/kcov_remote_stop().
+
+Internally kcov stores handles as u64 integers. The top byte of a handle
+is used to denote the id of a subsystem that this handle belongs to, and
+the lower 4 bytes are used to denote the id of a thread instance within
+that subsystem. A reserved value 0 is used as a subsystem id for common
+handles as they don't belong to a particular subsystem. The bytes 4-7 are
+currently reserved and must be zero. In the future the number of bytes
+used for the subsystem or handle ids might be increased.
+
+When a particular userspace proccess collects coverage by via a common
+handle, kcov will collect coverage for each code section that is annotated
+to use the common handle obtained as kcov_handle from the current
+task_struct. However non common handles allow to collect coverage
+selectively from different subsystems.
+
+.. code-block:: c
+
+    struct kcov_remote_arg {
+	__u32		trace_mode;
+	__u32		area_size;
+	__u32		num_handles;
+	__aligned_u64	common_handle;
+	__aligned_u64	handles[0];
+    };
+
+    #define KCOV_INIT_TRACE			_IOR('c', 1, unsigned long)
+    #define KCOV_DISABLE			_IO('c', 101)
+    #define KCOV_REMOTE_ENABLE		_IOW('c', 102, struct kcov_remote_arg)
+
+    #define COVER_SIZE	(64 << 10)
+
+    #define KCOV_TRACE_PC	0
+
+    #define KCOV_SUBSYSTEM_COMMON	(0x00ull << 56)
+    #define KCOV_SUBSYSTEM_USB	(0x01ull << 56)
+
+    #define KCOV_SUBSYSTEM_MASK	(0xffull << 56)
+    #define KCOV_INSTANCE_MASK	(0xffffffffull)
+
+    static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst)
+    {
+	if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK)
+		return 0;
+	return subsys | inst;
+    }
+
+    #define KCOV_COMMON_ID	0x42
+    #define KCOV_USB_BUS_NUM	1
+
+    int main(int argc, char **argv)
+    {
+	int fd;
+	unsigned long *cover, n, i;
+	struct kcov_remote_arg *arg;
+
+	fd = open("/sys/kernel/debug/kcov", O_RDWR);
+	if (fd == -1)
+		perror("open"), exit(1);
+	if (ioctl(fd, KCOV_INIT_TRACE, COVER_SIZE))
+		perror("ioctl"), exit(1);
+	cover = (unsigned long*)mmap(NULL, COVER_SIZE * sizeof(unsigned long),
+				     PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
+	if ((void*)cover == MAP_FAILED)
+		perror("mmap"), exit(1);
+
+	/* Enable coverage collection via common handle and from USB bus #1. */
+	arg = calloc(1, sizeof(*arg) + sizeof(uint64_t));
+	if (!arg)
+		perror("calloc"), exit(1);
+	arg->trace_mode = KCOV_TRACE_PC;
+	arg->area_size = COVER_SIZE;
+	arg->num_handles = 1;
+	arg->common_handle = kcov_remote_handle(KCOV_SUBSYSTEM_COMMON,
+							KCOV_COMMON_ID);
+	arg->handles[0] = kcov_remote_handle(KCOV_SUBSYSTEM_USB,
+						KCOV_USB_BUS_NUM);
+	if (ioctl(fd, KCOV_REMOTE_ENABLE, arg))
+		perror("ioctl"), free(arg), exit(1);
+	free(arg);
+
+	/*
+	 * Here the user needs to trigger execution of a kernel code section
+	 * that is either annotated with the common handle, or to trigger some
+	 * activity on USB bus #1.
+	 */
+	sleep(2);
+
+	n = __atomic_load_n(&cover[0], __ATOMIC_RELAXED);
+	for (i = 0; i < n; i++)
+		printf("0x%lx\n", cover[i + 1]);
+	if (ioctl(fd, KCOV_DISABLE, 0))
+		perror("ioctl"), exit(1);
+	if (munmap(cover, COVER_SIZE * sizeof(unsigned long)))
+		perror("munmap"), exit(1);
+	if (close(fd))
+		perror("close"), exit(1);
+	return 0;
+    }
diff --git a/Documentation/dev-tools/kfence.rst b/Documentation/dev-tools/kfence.rst
new file mode 100644
index 0000000..fdf04e7
--- /dev/null
+++ b/Documentation/dev-tools/kfence.rst
@@ -0,0 +1,298 @@
+.. SPDX-License-Identifier: GPL-2.0
+.. Copyright (C) 2020, Google LLC.
+
+Kernel Electric-Fence (KFENCE)
+==============================
+
+Kernel Electric-Fence (KFENCE) is a low-overhead sampling-based memory safety
+error detector. KFENCE detects heap out-of-bounds access, use-after-free, and
+invalid-free errors.
+
+KFENCE is designed to be enabled in production kernels, and has near zero
+performance overhead. Compared to KASAN, KFENCE trades performance for
+precision. The main motivation behind KFENCE's design, is that with enough
+total uptime KFENCE will detect bugs in code paths not typically exercised by
+non-production test workloads. One way to quickly achieve a large enough total
+uptime is when the tool is deployed across a large fleet of machines.
+
+Usage
+-----
+
+To enable KFENCE, configure the kernel with::
+
+    CONFIG_KFENCE=y
+
+To build a kernel with KFENCE support, but disabled by default (to enable, set
+``kfence.sample_interval`` to non-zero value), configure the kernel with::
+
+    CONFIG_KFENCE=y
+    CONFIG_KFENCE_SAMPLE_INTERVAL=0
+
+KFENCE provides several other configuration options to customize behaviour (see
+the respective help text in ``lib/Kconfig.kfence`` for more info).
+
+Tuning performance
+~~~~~~~~~~~~~~~~~~
+
+The most important parameter is KFENCE's sample interval, which can be set via
+the kernel boot parameter ``kfence.sample_interval`` in milliseconds. The
+sample interval determines the frequency with which heap allocations will be
+guarded by KFENCE. The default is configurable via the Kconfig option
+``CONFIG_KFENCE_SAMPLE_INTERVAL``. Setting ``kfence.sample_interval=0``
+disables KFENCE.
+
+The KFENCE memory pool is of fixed size, and if the pool is exhausted, no
+further KFENCE allocations occur. With ``CONFIG_KFENCE_NUM_OBJECTS`` (default
+255), the number of available guarded objects can be controlled. Each object
+requires 2 pages, one for the object itself and the other one used as a guard
+page; object pages are interleaved with guard pages, and every object page is
+therefore surrounded by two guard pages.
+
+The total memory dedicated to the KFENCE memory pool can be computed as::
+
+    ( #objects + 1 ) * 2 * PAGE_SIZE
+
+Using the default config, and assuming a page size of 4 KiB, results in
+dedicating 2 MiB to the KFENCE memory pool.
+
+Note: On architectures that support huge pages, KFENCE will ensure that the
+pool is using pages of size ``PAGE_SIZE``. This will result in additional page
+tables being allocated.
+
+Error reports
+~~~~~~~~~~~~~
+
+A typical out-of-bounds access looks like this::
+
+    ==================================================================
+    BUG: KFENCE: out-of-bounds read in test_out_of_bounds_read+0xa3/0x22b
+
+    Out-of-bounds read at 0xffffffffb672efff (1B left of kfence-#17):
+     test_out_of_bounds_read+0xa3/0x22b
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#17 [0xffffffffb672f000-0xffffffffb672f01f, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_out_of_bounds_read+0x98/0x22b
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 107 Comm: kunit_try_catch Not tainted 5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+The header of the report provides a short summary of the function involved in
+the access. It is followed by more detailed information about the access and
+its origin. Note that, real kernel addresses are only shown when using the
+kernel command line option ``no_hash_pointers``.
+
+Use-after-free accesses are reported as::
+
+    ==================================================================
+    BUG: KFENCE: use-after-free read in test_use_after_free_read+0xb3/0x143
+
+    Use-after-free read at 0xffffffffb673dfe0 (in kfence-#24):
+     test_use_after_free_read+0xb3/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#24 [0xffffffffb673dfe0-0xffffffffb673dfff, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_use_after_free_read+0x76/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    freed by task 507:
+     test_use_after_free_read+0xa8/0x143
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 109 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+KFENCE also reports on invalid frees, such as double-frees::
+
+    ==================================================================
+    BUG: KFENCE: invalid free in test_double_free+0xdc/0x171
+
+    Invalid free of 0xffffffffb6741000:
+     test_double_free+0xdc/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#26 [0xffffffffb6741000-0xffffffffb674101f, size=32, cache=kmalloc-32] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_double_free+0x76/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    freed by task 507:
+     test_double_free+0xa8/0x171
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 111 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+KFENCE also uses pattern-based redzones on the other side of an object's guard
+page, to detect out-of-bounds writes on the unprotected side of the object.
+These are reported on frees::
+
+    ==================================================================
+    BUG: KFENCE: memory corruption in test_kmalloc_aligned_oob_write+0xef/0x184
+
+    Corrupted memory at 0xffffffffb6797ff9 [ 0xac . . . . . . ] (in kfence-#69):
+     test_kmalloc_aligned_oob_write+0xef/0x184
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    kfence-#69 [0xffffffffb6797fb0-0xffffffffb6797ff8, size=73, cache=kmalloc-96] allocated by task 507:
+     test_alloc+0xf3/0x25b
+     test_kmalloc_aligned_oob_write+0x57/0x184
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 120 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+For such errors, the address where the corruption occurred as well as the
+invalidly written bytes (offset from the address) are shown; in this
+representation, '.' denote untouched bytes. In the example above ``0xac`` is
+the value written to the invalid address at offset 0, and the remaining '.'
+denote that no following bytes have been touched. Note that, real values are
+only shown if the kernel was booted with ``no_hash_pointers``; to avoid
+information disclosure otherwise, '!' is used instead to denote invalidly
+written bytes.
+
+And finally, KFENCE may also report on invalid accesses to any protected page
+where it was not possible to determine an associated object, e.g. if adjacent
+object pages had not yet been allocated::
+
+    ==================================================================
+    BUG: KFENCE: invalid read in test_invalid_access+0x26/0xe0
+
+    Invalid read at 0xffffffffb670b00a:
+     test_invalid_access+0x26/0xe0
+     kunit_try_run_case+0x51/0x85
+     kunit_generic_run_threadfn_adapter+0x16/0x30
+     kthread+0x137/0x160
+     ret_from_fork+0x22/0x30
+
+    CPU: 4 PID: 124 Comm: kunit_try_catch Tainted: G        W         5.8.0-rc6+ #7
+    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
+    ==================================================================
+
+DebugFS interface
+~~~~~~~~~~~~~~~~~
+
+Some debugging information is exposed via debugfs:
+
+* The file ``/sys/kernel/debug/kfence/stats`` provides runtime statistics.
+
+* The file ``/sys/kernel/debug/kfence/objects`` provides a list of objects
+  allocated via KFENCE, including those already freed but protected.
+
+Implementation Details
+----------------------
+
+Guarded allocations are set up based on the sample interval. After expiration
+of the sample interval, the next allocation through the main allocator (SLAB or
+SLUB) returns a guarded allocation from the KFENCE object pool (allocation
+sizes up to PAGE_SIZE are supported). At this point, the timer is reset, and
+the next allocation is set up after the expiration of the interval. To "gate" a
+KFENCE allocation through the main allocator's fast-path without overhead,
+KFENCE relies on static branches via the static keys infrastructure. The static
+branch is toggled to redirect the allocation to KFENCE.
+
+KFENCE objects each reside on a dedicated page, at either the left or right
+page boundaries selected at random. The pages to the left and right of the
+object page are "guard pages", whose attributes are changed to a protected
+state, and cause page faults on any attempted access. Such page faults are then
+intercepted by KFENCE, which handles the fault gracefully by reporting an
+out-of-bounds access, and marking the page as accessible so that the faulting
+code can (wrongly) continue executing (set ``panic_on_warn`` to panic instead).
+
+To detect out-of-bounds writes to memory within the object's page itself,
+KFENCE also uses pattern-based redzones. For each object page, a redzone is set
+up for all non-object memory. For typical alignments, the redzone is only
+required on the unguarded side of an object. Because KFENCE must honor the
+cache's requested alignment, special alignments may result in unprotected gaps
+on either side of an object, all of which are redzoned.
+
+The following figure illustrates the page layout::
+
+    ---+-----------+-----------+-----------+-----------+-----------+---
+       | xxxxxxxxx | O :       | xxxxxxxxx |       : O | xxxxxxxxx |
+       | xxxxxxxxx | B :       | xxxxxxxxx |       : B | xxxxxxxxx |
+       | x GUARD x | J : RED-  | x GUARD x | RED-  : J | x GUARD x |
+       | xxxxxxxxx | E :  ZONE | xxxxxxxxx |  ZONE : E | xxxxxxxxx |
+       | xxxxxxxxx | C :       | xxxxxxxxx |       : C | xxxxxxxxx |
+       | xxxxxxxxx | T :       | xxxxxxxxx |       : T | xxxxxxxxx |
+    ---+-----------+-----------+-----------+-----------+-----------+---
+
+Upon deallocation of a KFENCE object, the object's page is again protected and
+the object is marked as freed. Any further access to the object causes a fault
+and KFENCE reports a use-after-free access. Freed objects are inserted at the
+tail of KFENCE's freelist, so that the least recently freed objects are reused
+first, and the chances of detecting use-after-frees of recently freed objects
+is increased.
+
+Interface
+---------
+
+The following describes the functions which are used by allocators as well as
+page handling code to set up and deal with KFENCE allocations.
+
+.. kernel-doc:: include/linux/kfence.h
+   :functions: is_kfence_address
+               kfence_shutdown_cache
+               kfence_alloc kfence_free __kfence_free
+               kfence_ksize kfence_object_start
+               kfence_handle_page_fault
+
+Related Tools
+-------------
+
+In userspace, a similar approach is taken by `GWP-ASan
+<http://llvm.org/docs/GwpAsan.html>`_. GWP-ASan also relies on guard pages and
+a sampling strategy to detect memory unsafety bugs at scale. KFENCE's design is
+directly influenced by GWP-ASan, and can be seen as its kernel sibling. Another
+similar but non-sampling approach, that also inspired the name "KFENCE", can be
+found in the userspace `Electric Fence Malloc Debugger
+<https://linux.die.net/man/3/efence>`_.
+
+In the kernel, several tools exist to debug memory access errors, and in
+particular KASAN can detect all bug classes that KFENCE can detect. While KASAN
+is more precise, relying on compiler instrumentation, this comes at a
+performance cost.
+
+It is worth highlighting that KASAN and KFENCE are complementary, with
+different target environments. For instance, KASAN is the better debugging-aid,
+where test cases or reproducers exists: due to the lower chance to detect the
+error, it would require more effort using KFENCE to debug. Deployments at scale
+that cannot afford to enable KASAN, however, would benefit from using KFENCE to
+discover bugs due to code paths not exercised by test cases or fuzzers.
diff --git a/Documentation/dev-tools/kunit/api/index.rst b/Documentation/dev-tools/kunit/api/index.rst
new file mode 100644
index 0000000..9b9bffe
--- /dev/null
+++ b/Documentation/dev-tools/kunit/api/index.rst
@@ -0,0 +1,16 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=============
+API Reference
+=============
+.. toctree::
+
+	test
+
+This section documents the KUnit kernel testing API. It is divided into the
+following sections:
+
+================================= ==============================================
+:doc:`test`                       documents all of the standard testing API
+                                  excluding mocking or mocking related features.
+================================= ==============================================
diff --git a/Documentation/dev-tools/kunit/api/test.rst b/Documentation/dev-tools/kunit/api/test.rst
new file mode 100644
index 0000000..aaa97f1
--- /dev/null
+++ b/Documentation/dev-tools/kunit/api/test.rst
@@ -0,0 +1,11 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+========
+Test API
+========
+
+This file documents all of the standard testing API excluding mocking or mocking
+related features.
+
+.. kernel-doc:: include/kunit/test.h
+   :internal:
diff --git a/Documentation/dev-tools/kunit/faq.rst b/Documentation/dev-tools/kunit/faq.rst
new file mode 100644
index 0000000..bf20951
--- /dev/null
+++ b/Documentation/dev-tools/kunit/faq.rst
@@ -0,0 +1,62 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==========================
+Frequently Asked Questions
+==========================
+
+How is this different from Autotest, kselftest, etc?
+====================================================
+KUnit is a unit testing framework. Autotest, kselftest (and some others) are
+not.
+
+A `unit test <https://martinfowler.com/bliki/UnitTest.html>`_ is supposed to
+test a single unit of code in isolation, hence the name. A unit test should be
+the finest granularity of testing and as such should allow all possible code
+paths to be tested in the code under test; this is only possible if the code
+under test is very small and does not have any external dependencies outside of
+the test's control like hardware.
+
+There are no testing frameworks currently available for the kernel that do not
+require installing the kernel on a test machine or in a VM and all require
+tests to be written in userspace and run on the kernel under test; this is true
+for Autotest, kselftest, and some others, disqualifying any of them from being
+considered unit testing frameworks.
+
+Does KUnit support running on architectures other than UML?
+===========================================================
+
+Yes, well, mostly.
+
+For the most part, the KUnit core framework (what you use to write the tests)
+can compile to any architecture; it compiles like just another part of the
+kernel and runs when the kernel boots. However, there is some infrastructure,
+like the KUnit Wrapper (``tools/testing/kunit/kunit.py``) that does not support
+other architectures.
+
+In short, this means that, yes, you can run KUnit on other architectures, but
+it might require more work than using KUnit on UML.
+
+For more information, see :ref:`kunit-on-non-uml`.
+
+What is the difference between a unit test and these other kinds of tests?
+==========================================================================
+Most existing tests for the Linux kernel would be categorized as an integration
+test, or an end-to-end test.
+
+- A unit test is supposed to test a single unit of code in isolation, hence the
+  name. A unit test should be the finest granularity of testing and as such
+  should allow all possible code paths to be tested in the code under test; this
+  is only possible if the code under test is very small and does not have any
+  external dependencies outside of the test's control like hardware.
+- An integration test tests the interaction between a minimal set of components,
+  usually just two or three. For example, someone might write an integration
+  test to test the interaction between a driver and a piece of hardware, or to
+  test the interaction between the userspace libraries the kernel provides and
+  the kernel itself; however, one of these tests would probably not test the
+  entire kernel along with hardware interactions and interactions with the
+  userspace.
+- An end-to-end test usually tests the entire system from the perspective of the
+  code under test. For example, someone might write an end-to-end test for the
+  kernel by installing a production configuration of the kernel on production
+  hardware with a production userspace and then trying to exercise some behavior
+  that depends on interactions between the hardware, the kernel, and userspace.
diff --git a/Documentation/dev-tools/kunit/index.rst b/Documentation/dev-tools/kunit/index.rst
new file mode 100644
index 0000000..26ffb46
--- /dev/null
+++ b/Documentation/dev-tools/kunit/index.rst
@@ -0,0 +1,79 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=========================================
+KUnit - Unit Testing for the Linux Kernel
+=========================================
+
+.. toctree::
+	:maxdepth: 2
+
+	start
+	usage
+	api/index
+	faq
+
+What is KUnit?
+==============
+
+KUnit is a lightweight unit testing and mocking framework for the Linux kernel.
+These tests are able to be run locally on a developer's workstation without a VM
+or special hardware.
+
+KUnit is heavily inspired by JUnit, Python's unittest.mock, and
+Googletest/Googlemock for C++. KUnit provides facilities for defining unit test
+cases, grouping related test cases into test suites, providing common
+infrastructure for running tests, and much more.
+
+Get started now: :doc:`start`
+
+Why KUnit?
+==========
+
+A unit test is supposed to test a single unit of code in isolation, hence the
+name. A unit test should be the finest granularity of testing and as such should
+allow all possible code paths to be tested in the code under test; this is only
+possible if the code under test is very small and does not have any external
+dependencies outside of the test's control like hardware.
+
+Outside of KUnit, there are no testing frameworks currently
+available for the kernel that do not require installing the kernel on a test
+machine or in a VM and all require tests to be written in userspace running on
+the kernel; this is true for Autotest, and kselftest, disqualifying
+any of them from being considered unit testing frameworks.
+
+KUnit addresses the problem of being able to run tests without needing a virtual
+machine or actual hardware with User Mode Linux. User Mode Linux is a Linux
+architecture, like ARM or x86; however, unlike other architectures it compiles
+to a standalone program that can be run like any other program directly inside
+of a host operating system; to be clear, it does not require any virtualization
+support; it is just a regular program.
+
+KUnit is fast. Excluding build time, from invocation to completion KUnit can run
+several dozen tests in only 10 to 20 seconds; this might not sound like a big
+deal to some people, but having such fast and easy to run tests fundamentally
+changes the way you go about testing and even writing code in the first place.
+Linus himself said in his `git talk at Google
+<https://gist.github.com/lorn/1272686/revisions#diff-53c65572127855f1b003db4064a94573R874>`_:
+
+	"... a lot of people seem to think that performance is about doing the
+	same thing, just doing it faster, and that is not true. That is not what
+	performance is all about. If you can do something really fast, really
+	well, people will start using it differently."
+
+In this context Linus was talking about branching and merging,
+but this point also applies to testing. If your tests are slow, unreliable, are
+difficult to write, and require a special setup or special hardware to run,
+then you wait a lot longer to write tests, and you wait a lot longer to run
+tests; this means that tests are likely to break, unlikely to test a lot of
+things, and are unlikely to be rerun once they pass. If your tests are really
+fast, you run them all the time, every time you make a change, and every time
+someone sends you some code. Why trust that someone ran all their tests
+correctly on every change when you can just run them yourself in less time than
+it takes to read their test log?
+
+How do I use it?
+================
+
+*   :doc:`start` - for new users of KUnit
+*   :doc:`usage` - for a more detailed explanation of KUnit features
+*   :doc:`api/index` - for the list of KUnit APIs used for testing
diff --git a/Documentation/dev-tools/kunit/start.rst b/Documentation/dev-tools/kunit/start.rst
new file mode 100644
index 0000000..aeeddfa
--- /dev/null
+++ b/Documentation/dev-tools/kunit/start.rst
@@ -0,0 +1,180 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===============
+Getting Started
+===============
+
+Installing dependencies
+=======================
+KUnit has the same dependencies as the Linux kernel. As long as you can build
+the kernel, you can run KUnit.
+
+KUnit Wrapper
+=============
+Included with KUnit is a simple Python wrapper that helps format the output to
+easily use and read KUnit output. It handles building and running the kernel, as
+well as formatting the output.
+
+The wrapper can be run with:
+
+.. code-block:: bash
+
+   ./tools/testing/kunit/kunit.py run
+
+Creating a kunitconfig
+======================
+The Python script is a thin wrapper around Kbuild as such, it needs to be
+configured with a ``kunitconfig`` file. This file essentially contains the
+regular Kernel config, with the specific test targets as well.
+
+.. code-block:: bash
+
+	git clone -b master https://kunit.googlesource.com/kunitconfig $PATH_TO_KUNITCONFIG_REPO
+	cd $PATH_TO_LINUX_REPO
+	ln -s $PATH_TO_KUNIT_CONFIG_REPO/kunitconfig kunitconfig
+
+You may want to add kunitconfig to your local gitignore.
+
+Verifying KUnit Works
+---------------------
+
+To make sure that everything is set up correctly, simply invoke the Python
+wrapper from your kernel repo:
+
+.. code-block:: bash
+
+	./tools/testing/kunit/kunit.py run
+
+.. note::
+   You may want to run ``make mrproper`` first.
+
+If everything worked correctly, you should see the following:
+
+.. code-block:: bash
+
+	Generating .config ...
+	Building KUnit Kernel ...
+	Starting KUnit Kernel ...
+
+followed by a list of tests that are run. All of them should be passing.
+
+.. note::
+   Because it is building a lot of sources for the first time, the ``Building
+   kunit kernel`` step may take a while.
+
+Writing your first test
+=======================
+
+In your kernel repo let's add some code that we can test. Create a file
+``drivers/misc/example.h`` with the contents:
+
+.. code-block:: c
+
+	int misc_example_add(int left, int right);
+
+create a file ``drivers/misc/example.c``:
+
+.. code-block:: c
+
+	#include <linux/errno.h>
+
+	#include "example.h"
+
+	int misc_example_add(int left, int right)
+	{
+		return left + right;
+	}
+
+Now add the following lines to ``drivers/misc/Kconfig``:
+
+.. code-block:: kconfig
+
+	config MISC_EXAMPLE
+		bool "My example"
+
+and the following lines to ``drivers/misc/Makefile``:
+
+.. code-block:: make
+
+	obj-$(CONFIG_MISC_EXAMPLE) += example.o
+
+Now we are ready to write the test. The test will be in
+``drivers/misc/example-test.c``:
+
+.. code-block:: c
+
+	#include <kunit/test.h>
+	#include "example.h"
+
+	/* Define the test cases. */
+
+	static void misc_example_add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, misc_example_add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, misc_example_add(1, 1));
+		KUNIT_EXPECT_EQ(test, 0, misc_example_add(-1, 1));
+		KUNIT_EXPECT_EQ(test, INT_MAX, misc_example_add(0, INT_MAX));
+		KUNIT_EXPECT_EQ(test, -1, misc_example_add(INT_MAX, INT_MIN));
+	}
+
+	static void misc_example_test_failure(struct kunit *test)
+	{
+		KUNIT_FAIL(test, "This test never passes.");
+	}
+
+	static struct kunit_case misc_example_test_cases[] = {
+		KUNIT_CASE(misc_example_add_test_basic),
+		KUNIT_CASE(misc_example_test_failure),
+		{}
+	};
+
+	static struct kunit_suite misc_example_test_suite = {
+		.name = "misc-example",
+		.test_cases = misc_example_test_cases,
+	};
+	kunit_test_suite(misc_example_test_suite);
+
+Now add the following to ``drivers/misc/Kconfig``:
+
+.. code-block:: kconfig
+
+	config MISC_EXAMPLE_TEST
+		bool "Test for my example"
+		depends on MISC_EXAMPLE && KUNIT
+
+and the following to ``drivers/misc/Makefile``:
+
+.. code-block:: make
+
+	obj-$(CONFIG_MISC_EXAMPLE_TEST) += example-test.o
+
+Now add it to your ``kunitconfig``:
+
+.. code-block:: none
+
+	CONFIG_MISC_EXAMPLE=y
+	CONFIG_MISC_EXAMPLE_TEST=y
+
+Now you can run the test:
+
+.. code-block:: bash
+
+	./tools/testing/kunit/kunit.py
+
+You should see the following failure:
+
+.. code-block:: none
+
+	...
+	[16:08:57] [PASSED] misc-example:misc_example_add_test_basic
+	[16:08:57] [FAILED] misc-example:misc_example_test_failure
+	[16:08:57] EXPECTATION FAILED at drivers/misc/example-test.c:17
+	[16:08:57] 	This test never passes.
+	...
+
+Congrats! You just wrote your first KUnit test!
+
+Next Steps
+==========
+*   Check out the :doc:`usage` page for a more
+    in-depth explanation of KUnit.
diff --git a/Documentation/dev-tools/kunit/usage.rst b/Documentation/dev-tools/kunit/usage.rst
new file mode 100644
index 0000000..c6e6963
--- /dev/null
+++ b/Documentation/dev-tools/kunit/usage.rst
@@ -0,0 +1,576 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+===========
+Using KUnit
+===========
+
+The purpose of this document is to describe what KUnit is, how it works, how it
+is intended to be used, and all the concepts and terminology that are needed to
+understand it. This guide assumes a working knowledge of the Linux kernel and
+some basic knowledge of testing.
+
+For a high level introduction to KUnit, including setting up KUnit for your
+project, see :doc:`start`.
+
+Organization of this document
+=============================
+
+This document is organized into two main sections: Testing and Isolating
+Behavior. The first covers what a unit test is and how to use KUnit to write
+them. The second covers how to use KUnit to isolate code and make it possible
+to unit test code that was otherwise un-unit-testable.
+
+Testing
+=======
+
+What is KUnit?
+--------------
+
+"K" is short for "kernel" so "KUnit" is the "(Linux) Kernel Unit Testing
+Framework." KUnit is intended first and foremost for writing unit tests; it is
+general enough that it can be used to write integration tests; however, this is
+a secondary goal. KUnit has no ambition of being the only testing framework for
+the kernel; for example, it does not intend to be an end-to-end testing
+framework.
+
+What is Unit Testing?
+---------------------
+
+A `unit test <https://martinfowler.com/bliki/UnitTest.html>`_ is a test that
+tests code at the smallest possible scope, a *unit* of code. In the C
+programming language that's a function.
+
+Unit tests should be written for all the publicly exposed functions in a
+compilation unit; so that is all the functions that are exported in either a
+*class* (defined below) or all functions which are **not** static.
+
+Writing Tests
+-------------
+
+Test Cases
+~~~~~~~~~~
+
+The fundamental unit in KUnit is the test case. A test case is a function with
+the signature ``void (*)(struct kunit *test)``. It calls a function to be tested
+and then sets *expectations* for what should happen. For example:
+
+.. code-block:: c
+
+	void example_test_success(struct kunit *test)
+	{
+	}
+
+	void example_test_failure(struct kunit *test)
+	{
+		KUNIT_FAIL(test, "This test never passes.");
+	}
+
+In the above example ``example_test_success`` always passes because it does
+nothing; no expectations are set, so all expectations pass. On the other hand
+``example_test_failure`` always fails because it calls ``KUNIT_FAIL``, which is
+a special expectation that logs a message and causes the test case to fail.
+
+Expectations
+~~~~~~~~~~~~
+An *expectation* is a way to specify that you expect a piece of code to do
+something in a test. An expectation is called like a function. A test is made
+by setting expectations about the behavior of a piece of code under test; when
+one or more of the expectations fail, the test case fails and information about
+the failure is logged. For example:
+
+.. code-block:: c
+
+	void add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+	}
+
+In the above example ``add_test_basic`` makes a number of assertions about the
+behavior of a function called ``add``; the first parameter is always of type
+``struct kunit *``, which contains information about the current test context;
+the second parameter, in this case, is what the value is expected to be; the
+last value is what the value actually is. If ``add`` passes all of these
+expectations, the test case, ``add_test_basic`` will pass; if any one of these
+expectations fail, the test case will fail.
+
+It is important to understand that a test case *fails* when any expectation is
+violated; however, the test will continue running, potentially trying other
+expectations until the test case ends or is otherwise terminated. This is as
+opposed to *assertions* which are discussed later.
+
+To learn about more expectations supported by KUnit, see :doc:`api/test`.
+
+.. note::
+   A single test case should be pretty short, pretty easy to understand,
+   focused on a single behavior.
+
+For example, if we wanted to properly test the add function above, we would
+create additional tests cases which would each test a different property that an
+add function should have like this:
+
+.. code-block:: c
+
+	void add_test_basic(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+	}
+
+	void add_test_negative(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
+	}
+
+	void add_test_max(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
+		KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
+	}
+
+	void add_test_overflow(struct kunit *test)
+	{
+		KUNIT_EXPECT_EQ(test, INT_MIN, add(INT_MAX, 1));
+	}
+
+Notice how it is immediately obvious what all the properties that we are testing
+for are.
+
+Assertions
+~~~~~~~~~~
+
+KUnit also has the concept of an *assertion*. An assertion is just like an
+expectation except the assertion immediately terminates the test case if it is
+not satisfied.
+
+For example:
+
+.. code-block:: c
+
+	static void mock_test_do_expect_default_return(struct kunit *test)
+	{
+		struct mock_test_context *ctx = test->priv;
+		struct mock *mock = ctx->mock;
+		int param0 = 5, param1 = -5;
+		const char *two_param_types[] = {"int", "int"};
+		const void *two_params[] = {&param0, &param1};
+		const void *ret;
+
+		ret = mock->do_expect(mock,
+				      "test_printk", test_printk,
+				      two_param_types, two_params,
+				      ARRAY_SIZE(two_params));
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ret);
+		KUNIT_EXPECT_EQ(test, -4, *((int *) ret));
+	}
+
+In this example, the method under test should return a pointer to a value, so
+if the pointer returned by the method is null or an errno, we don't want to
+bother continuing the test since the following expectation could crash the test
+case. `ASSERT_NOT_ERR_OR_NULL(...)` allows us to bail out of the test case if
+the appropriate conditions have not been satisfied to complete the test.
+
+Test Suites
+~~~~~~~~~~~
+
+Now obviously one unit test isn't very helpful; the power comes from having
+many test cases covering all of your behaviors. Consequently it is common to
+have many *similar* tests; in order to reduce duplication in these closely
+related tests most unit testing frameworks provide the concept of a *test
+suite*, in KUnit we call it a *test suite*; all it is is just a collection of
+test cases for a unit of code with a set up function that gets invoked before
+every test cases and then a tear down function that gets invoked after every
+test case completes.
+
+Example:
+
+.. code-block:: c
+
+	static struct kunit_case example_test_cases[] = {
+		KUNIT_CASE(example_test_foo),
+		KUNIT_CASE(example_test_bar),
+		KUNIT_CASE(example_test_baz),
+		{}
+	};
+
+	static struct kunit_suite example_test_suite = {
+		.name = "example",
+		.init = example_test_init,
+		.exit = example_test_exit,
+		.test_cases = example_test_cases,
+	};
+	kunit_test_suite(example_test_suite);
+
+In the above example the test suite, ``example_test_suite``, would run the test
+cases ``example_test_foo``, ``example_test_bar``, and ``example_test_baz``,
+each would have ``example_test_init`` called immediately before it and would
+have ``example_test_exit`` called immediately after it.
+``kunit_test_suite(example_test_suite)`` registers the test suite with the
+KUnit test framework.
+
+.. note::
+   A test case will only be run if it is associated with a test suite.
+
+For a more information on these types of things see the :doc:`api/test`.
+
+Isolating Behavior
+==================
+
+The most important aspect of unit testing that other forms of testing do not
+provide is the ability to limit the amount of code under test to a single unit.
+In practice, this is only possible by being able to control what code gets run
+when the unit under test calls a function and this is usually accomplished
+through some sort of indirection where a function is exposed as part of an API
+such that the definition of that function can be changed without affecting the
+rest of the code base. In the kernel this primarily comes from two constructs,
+classes, structs that contain function pointers that are provided by the
+implementer, and architecture specific functions which have definitions selected
+at compile time.
+
+Classes
+-------
+
+Classes are not a construct that is built into the C programming language;
+however, it is an easily derived concept. Accordingly, pretty much every project
+that does not use a standardized object oriented library (like GNOME's GObject)
+has their own slightly different way of doing object oriented programming; the
+Linux kernel is no exception.
+
+The central concept in kernel object oriented programming is the class. In the
+kernel, a *class* is a struct that contains function pointers. This creates a
+contract between *implementers* and *users* since it forces them to use the
+same function signature without having to call the function directly. In order
+for it to truly be a class, the function pointers must specify that a pointer
+to the class, known as a *class handle*, be one of the parameters; this makes
+it possible for the member functions (also known as *methods*) to have access
+to member variables (more commonly known as *fields*) allowing the same
+implementation to have multiple *instances*.
+
+Typically a class can be *overridden* by *child classes* by embedding the
+*parent class* in the child class. Then when a method provided by the child
+class is called, the child implementation knows that the pointer passed to it is
+of a parent contained within the child; because of this, the child can compute
+the pointer to itself because the pointer to the parent is always a fixed offset
+from the pointer to the child; this offset is the offset of the parent contained
+in the child struct. For example:
+
+.. code-block:: c
+
+	struct shape {
+		int (*area)(struct shape *this);
+	};
+
+	struct rectangle {
+		struct shape parent;
+		int length;
+		int width;
+	};
+
+	int rectangle_area(struct shape *this)
+	{
+		struct rectangle *self = container_of(this, struct shape, parent);
+
+		return self->length * self->width;
+	};
+
+	void rectangle_new(struct rectangle *self, int length, int width)
+	{
+		self->parent.area = rectangle_area;
+		self->length = length;
+		self->width = width;
+	}
+
+In this example (as in most kernel code) the operation of computing the pointer
+to the child from the pointer to the parent is done by ``container_of``.
+
+Faking Classes
+~~~~~~~~~~~~~~
+
+In order to unit test a piece of code that calls a method in a class, the
+behavior of the method must be controllable, otherwise the test ceases to be a
+unit test and becomes an integration test.
+
+A fake just provides an implementation of a piece of code that is different than
+what runs in a production instance, but behaves identically from the standpoint
+of the callers; this is usually done to replace a dependency that is hard to
+deal with, or is slow.
+
+A good example for this might be implementing a fake EEPROM that just stores the
+"contents" in an internal buffer. For example, let's assume we have a class that
+represents an EEPROM:
+
+.. code-block:: c
+
+	struct eeprom {
+		ssize_t (*read)(struct eeprom *this, size_t offset, char *buffer, size_t count);
+		ssize_t (*write)(struct eeprom *this, size_t offset, const char *buffer, size_t count);
+	};
+
+And we want to test some code that buffers writes to the EEPROM:
+
+.. code-block:: c
+
+	struct eeprom_buffer {
+		ssize_t (*write)(struct eeprom_buffer *this, const char *buffer, size_t count);
+		int flush(struct eeprom_buffer *this);
+		size_t flush_count; /* Flushes when buffer exceeds flush_count. */
+	};
+
+	struct eeprom_buffer *new_eeprom_buffer(struct eeprom *eeprom);
+	void destroy_eeprom_buffer(struct eeprom *eeprom);
+
+We can easily test this code by *faking out* the underlying EEPROM:
+
+.. code-block:: c
+
+	struct fake_eeprom {
+		struct eeprom parent;
+		char contents[FAKE_EEPROM_CONTENTS_SIZE];
+	};
+
+	ssize_t fake_eeprom_read(struct eeprom *parent, size_t offset, char *buffer, size_t count)
+	{
+		struct fake_eeprom *this = container_of(parent, struct fake_eeprom, parent);
+
+		count = min(count, FAKE_EEPROM_CONTENTS_SIZE - offset);
+		memcpy(buffer, this->contents + offset, count);
+
+		return count;
+	}
+
+	ssize_t fake_eeprom_write(struct eeprom *this, size_t offset, const char *buffer, size_t count)
+	{
+		struct fake_eeprom *this = container_of(parent, struct fake_eeprom, parent);
+
+		count = min(count, FAKE_EEPROM_CONTENTS_SIZE - offset);
+		memcpy(this->contents + offset, buffer, count);
+
+		return count;
+	}
+
+	void fake_eeprom_init(struct fake_eeprom *this)
+	{
+		this->parent.read = fake_eeprom_read;
+		this->parent.write = fake_eeprom_write;
+		memset(this->contents, 0, FAKE_EEPROM_CONTENTS_SIZE);
+	}
+
+We can now use it to test ``struct eeprom_buffer``:
+
+.. code-block:: c
+
+	struct eeprom_buffer_test {
+		struct fake_eeprom *fake_eeprom;
+		struct eeprom_buffer *eeprom_buffer;
+	};
+
+	static void eeprom_buffer_test_does_not_write_until_flush(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff};
+
+		eeprom_buffer->flush_count = SIZE_MAX;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0);
+
+		eeprom_buffer->flush(eeprom_buffer);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+	}
+
+	static void eeprom_buffer_test_flushes_after_flush_count_met(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff};
+
+		eeprom_buffer->flush_count = 2;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+	}
+
+	static void eeprom_buffer_test_flushes_increments_of_flush_count(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+		struct eeprom_buffer *eeprom_buffer = ctx->eeprom_buffer;
+		struct fake_eeprom *fake_eeprom = ctx->fake_eeprom;
+		char buffer[] = {0xff, 0xff};
+
+		eeprom_buffer->flush_count = 2;
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 1);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0);
+
+		eeprom_buffer->write(eeprom_buffer, buffer, 2);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[0], 0xff);
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[1], 0xff);
+		/* Should have only flushed the first two bytes. */
+		KUNIT_EXPECT_EQ(test, fake_eeprom->contents[2], 0);
+	}
+
+	static int eeprom_buffer_test_init(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx;
+
+		ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+
+		ctx->fake_eeprom = kunit_kzalloc(test, sizeof(*ctx->fake_eeprom), GFP_KERNEL);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->fake_eeprom);
+		fake_eeprom_init(ctx->fake_eeprom);
+
+		ctx->eeprom_buffer = new_eeprom_buffer(&ctx->fake_eeprom->parent);
+		KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->eeprom_buffer);
+
+		test->priv = ctx;
+
+		return 0;
+	}
+
+	static void eeprom_buffer_test_exit(struct kunit *test)
+	{
+		struct eeprom_buffer_test *ctx = test->priv;
+
+		destroy_eeprom_buffer(ctx->eeprom_buffer);
+	}
+
+.. _kunit-on-non-uml:
+
+KUnit on non-UML architectures
+==============================
+
+By default KUnit uses UML as a way to provide dependencies for code under test.
+Under most circumstances KUnit's usage of UML should be treated as an
+implementation detail of how KUnit works under the hood. Nevertheless, there
+are instances where being able to run architecture specific code, or test
+against real hardware is desirable. For these reasons KUnit supports running on
+other architectures.
+
+Running existing KUnit tests on non-UML architectures
+-----------------------------------------------------
+
+There are some special considerations when running existing KUnit tests on
+non-UML architectures:
+
+*   Hardware may not be deterministic, so a test that always passes or fails
+    when run under UML may not always do so on real hardware.
+*   Hardware and VM environments may not be hermetic. KUnit tries its best to
+    provide a hermetic environment to run tests; however, it cannot manage state
+    that it doesn't know about outside of the kernel. Consequently, tests that
+    may be hermetic on UML may not be hermetic on other architectures.
+*   Some features and tooling may not be supported outside of UML.
+*   Hardware and VMs are slower than UML.
+
+None of these are reasons not to run your KUnit tests on real hardware; they are
+only things to be aware of when doing so.
+
+The biggest impediment will likely be that certain KUnit features and
+infrastructure may not support your target environment. For example, at this
+time the KUnit Wrapper (``tools/testing/kunit/kunit.py``) does not work outside
+of UML. Unfortunately, there is no way around this. Using UML (or even just a
+particular architecture) allows us to make a lot of assumptions that make it
+possible to do things which might otherwise be impossible.
+
+Nevertheless, all core KUnit framework features are fully supported on all
+architectures, and using them is straightforward: all you need to do is to take
+your kunitconfig, your Kconfig options for the tests you would like to run, and
+merge them into whatever config your are using for your platform. That's it!
+
+For example, let's say you have the following kunitconfig:
+
+.. code-block:: none
+
+	CONFIG_KUNIT=y
+	CONFIG_KUNIT_EXAMPLE_TEST=y
+
+If you wanted to run this test on an x86 VM, you might add the following config
+options to your ``.config``:
+
+.. code-block:: none
+
+	CONFIG_KUNIT=y
+	CONFIG_KUNIT_EXAMPLE_TEST=y
+	CONFIG_SERIAL_8250=y
+	CONFIG_SERIAL_8250_CONSOLE=y
+
+All these new options do is enable support for a common serial console needed
+for logging.
+
+Next, you could build a kernel with these tests as follows:
+
+
+.. code-block:: bash
+
+	make ARCH=x86 olddefconfig
+	make ARCH=x86
+
+Once you have built a kernel, you could run it on QEMU as follows:
+
+.. code-block:: bash
+
+	qemu-system-x86_64 -enable-kvm \
+			   -m 1024 \
+			   -kernel arch/x86_64/boot/bzImage \
+			   -append 'console=ttyS0' \
+			   --nographic
+
+Interspersed in the kernel logs you might see the following:
+
+.. code-block:: none
+
+	TAP version 14
+		# Subtest: example
+		1..1
+		# example_simple_test: initializing
+		ok 1 - example_simple_test
+	ok 1 - example
+
+Congratulations, you just ran a KUnit test on the x86 architecture!
+
+Writing new tests for other architectures
+-----------------------------------------
+
+The first thing you must do is ask yourself whether it is necessary to write a
+KUnit test for a specific architecture, and then whether it is necessary to
+write that test for a particular piece of hardware. In general, writing a test
+that depends on having access to a particular piece of hardware or software (not
+included in the Linux source repo) should be avoided at all costs.
+
+Even if you only ever plan on running your KUnit test on your hardware
+configuration, other people may want to run your tests and may not have access
+to your hardware. If you write your test to run on UML, then anyone can run your
+tests without knowing anything about your particular setup, and you can still
+run your tests on your hardware setup just by compiling for your architecture.
+
+.. important::
+   Always prefer tests that run on UML to tests that only run under a particular
+   architecture, and always prefer tests that run under QEMU or another easy
+   (and monitarily free) to obtain software environment to a specific piece of
+   hardware.
+
+Nevertheless, there are still valid reasons to write an architecture or hardware
+specific test: for example, you might want to test some code that really belongs
+in ``arch/some-arch/*``. Even so, try your best to write the test so that it
+does not depend on physical hardware: if some of your test cases don't need the
+hardware, only require the hardware for tests that actually need it.
+
+Now that you have narrowed down exactly what bits are hardware specific, the
+actual procedure for writing and running the tests is pretty much the same as
+writing normal KUnit tests. One special caveat is that you have to reset
+hardware state in between test cases; if this is not possible, you may only be
+able to run one test case per invocation.
+
+.. TODO(brendanhiggins@google.com): Add an actual example of an architecture
+   dependent KUnit test.
diff --git a/Documentation/device-mapper/dm-bow.txt b/Documentation/device-mapper/dm-bow.txt
new file mode 100644
index 0000000..e3fc4d2
--- /dev/null
+++ b/Documentation/device-mapper/dm-bow.txt
@@ -0,0 +1,99 @@
+dm_bow (backup on write)
+========================
+
+dm_bow is a device mapper driver that uses the free space on a device to back up
+data that is overwritten. The changes can then be committed by a simple state
+change, or rolled back by removing the dm_bow device and running a command line
+utility over the underlying device.
+
+dm_bow has three states, set by writing ‘1’ or ‘2’ to /sys/block/dm-?/bow/state.
+It is only possible to go from state 0 (initial state) to state 1, and then from
+state 1 to state 2.
+
+State 0: dm_bow collects all trims to the device and assumes that these mark
+free space on the overlying file system that can be safely used. Typically the
+mount code would create the dm_bow device, mount the file system, call the
+FITRIM ioctl on the file system then switch to state 1. These trims are not
+propagated to the underlying device.
+
+State 1: All writes to the device cause the underlying data to be backed up to
+the free (trimmed) area as needed in such a way as they can be restored.
+However, the writes, with one exception, then happen exactly as they would
+without dm_bow, so the device is always in a good final state. The exception is
+that sector 0 is used to keep a log of the latest changes, both to indicate that
+we are in this state and to allow rollback. See below for all details. If there
+isn't enough free space, writes are failed with -ENOSPC.
+
+State 2: The transition to state 2 triggers replacing the special sector 0 with
+the normal sector 0, and the freeing of all state information. dm_bow then
+becomes a pass-through driver, allowing the device to continue to be used with
+minimal performance impact.
+
+Usage
+=====
+dm-bow takes one command line parameter, the name of the underlying device.
+
+dm-bow will typically be used in the following way. dm-bow will be loaded with a
+suitable underlying device and the resultant device will be mounted. A file
+system trim will be issued via the FITRIM ioctl, then the device will be
+switched to state 1. The file system will now be used as normal. At some point,
+the changes can either be committed by switching to state 2, or rolled back by
+unmounting the file system, removing the dm-bow device and running the command
+line utility. Note that rebooting the device will be equivalent to unmounting
+and removing, but the command line utility must still be run
+
+Details of operation in state 1
+===============================
+
+dm_bow maintains a type for all sectors. A sector can be any of:
+
+SECTOR0
+SECTOR0_CURRENT
+UNCHANGED
+FREE
+CHANGED
+BACKUP
+
+SECTOR0 is the first sector on the device, and is used to hold the log of
+changes. This is the one exception.
+
+SECTOR0_CURRENT is a sector picked from the FREE sectors, and is where reads and
+writes from the true sector zero are redirected to. Note that like any backup
+sector, if the sector is written to directly, it must be moved again.
+
+UNCHANGED means that the sector has not been changed since we entered state 1.
+Thus if it is written to or trimmed, the contents must first be backed up.
+
+FREE means that the sector was trimmed in state 0 and has not yet been written
+to or used for backup. On being written to, a FREE sector is changed to CHANGED.
+
+CHANGED means that the sector has been modified, and can be further modified
+without further backup.
+
+BACKUP means that this is a free sector being used as a backup. On being written
+to, the contents must first be backed up again.
+
+All backup operations are logged to the first sector. The log sector has the
+format:
+--------------------------------------------------------
+| Magic | Count | Sequence | Log entry | Log entry | …
+--------------------------------------------------------
+
+Magic is a magic number. Count is the number of log entries. Sequence is 0
+initially. A log entry is
+
+-----------------------------------
+| Source | Dest | Size | Checksum |
+-----------------------------------
+
+When SECTOR0 is full, the log sector is backed up and another empty log sector
+created with sequence number one higher. The first entry in any log entry with
+sequence > 0 therefore must be the log of the backing up of the previous log
+sector. Note that sequence is not strictly needed, but is a useful sanity check
+and potentially limits the time spent trying to restore a corrupted snapshot.
+
+On entering state 1, dm_bow has a list of free sectors. All other sectors are
+unchanged. Sector0_current is selected from the free sectors and the contents of
+sector 0 are copied there. The sector 0 is backed up, which triggers the first
+log entry to be written.
+
diff --git a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
index 4a3ee25..4ebfa00 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
@@ -108,3 +108,15 @@
 			sensitivity = <7>;
 		};
 	};
+
+3) Interrupt wakeup parent
+--------------------------
+
+Some interrupt controllers in a SoC, are always powered on and have a select
+interrupts routed to them, so that they can wakeup the SoC from suspend. These
+interrupt controllers do not fall into the category of a parent interrupt
+controller and can be specified by the "wakeup-parent" property and contain a
+single phandle referring to the wakeup capable interrupt controller.
+
+   Example:
+	wakeup-parent = <&pdc_intc>;
diff --git a/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt b/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
index 8e0797c..e329f8d 100644
--- a/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
+++ b/Documentation/devicetree/bindings/interrupt-controller/qcom,pdc.txt
@@ -24,6 +24,9 @@
 	Usage: required
 	Value type: <prop-encoded-array>
 	Definition: Specifies the base physical address for PDC hardware.
+		    Optionally, specify the PDC's GIC interface registers that
+		    need to be configured for wakeup capable GPIOs routed to
+		    the PDC.
 
 - interrupt-cells:
 	Usage: required
@@ -50,15 +53,23 @@
 		    The second element is the GIC hwirq number for the PDC port.
 		    The third element is the number of interrupts in sequence.
 
+- qcom,scm-spi-cfg:
+	Usage: optional
+	Value type: <bool>
+	Definition: Specifies if the SPI configuration registers have to be
+		    written from the firmware. Sometimes the PDC interface
+		    register to the GIC can only be written from the firmware.
+
 Example:
 
 	pdc: interrupt-controller@b220000 {
 		compatible = "qcom,sdm845-pdc";
-		reg = <0xb220000 0x30000>;
+		reg = <0 0x0b220000 0 0x30000>, <0 0x179900f0 0 0x60>;
 		qcom,pdc-ranges = <0 512 94>, <94 641 15>, <115 662 7>;
 		#interrupt-cells = <2>;
 		interrupt-parent = <&intc>;
 		interrupt-controller;
+		qcom,scm-spi-cfg;
 	};
 
 DT binding of a device that wants to use the GIC SPI 514 as a wakeup
diff --git a/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt b/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt
new file mode 100644
index 0000000..1e131b3
--- /dev/null
+++ b/Documentation/devicetree/bindings/misc/hisilicon-hikey-usb.txt
@@ -0,0 +1,40 @@
+Support usb hub and usb data role switch of Hisilicon HiKey960 Board.
+
+-----------------------------
+
+Required properties:
+- compatible: "hisilicon,gpio_hubv1"
+- typec-vbus-gpios: gpio to control the vbus of typeC port
+- otg-switch-gpios: gpio to switch DP & DM between the hub and typeC port
+- hub-vdd33-en-gpios: gpio to enable the power of hub
+- pinctrl-names: pin configuration state name ("default")
+- pinctrl-0: pinctrl config
+- usb-role-switch: flags the driver as a role switch provider
+- ports: two endpoints to connect the usb core role switch provider
+	 to the usb-c tcpm driver.
+
+Example
+-----
+	hisi_hikey_usb: hisi_hikey_usb {
+		compatible = "hisilicon,gpio_hubv1";
+		typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+		otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+		hub-vdd33-en-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usbhub5734_pmx_func>;
+		usb-role-switch;
+
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			hikey_usb_ep0: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&dwc3_role_switch>;
+			};
+			hikey_usb_ep1: endpoint@1 {
+				reg = <1>;
+				remote-endpoint = <&rt1711h_ep>;
+			};
+		};
+	};
diff --git a/Documentation/devicetree/bindings/mmc/sdhci-msm.txt b/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
index da4edb1..33ef90f 100644
--- a/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
+++ b/Documentation/devicetree/bindings/mmc/sdhci-msm.txt
@@ -25,7 +25,15 @@
 
 - reg: Base address and length of the register in the following order:
 	- Host controller register map (required)
-	- SD Core register map (required for msm-v4 and below)
+	- SD Core register map (required for controllers earlier than msm-v5)
+	- CQE register map (Optional, CQE support is present on SDHC instance meant
+	                    for eMMC and version v4.2 and above)
+	- Inline Crypto Engine register map (optional)
+- reg-names: When CQE register map is supplied, below reg-names are required
+	- "hc" for Host controller register map
+	- "core" for SD core register map
+	- "cqhci" for CQE register map
+	- "ice" for Inline Crypto Engine register map (optional)
 - interrupts: Should contain an interrupt-specifiers for the interrupts:
 	- Host controller interrupt (required)
 - pinctrl-names: Should contain only one value - "default".
@@ -38,6 +46,7 @@
 	"xo"	- TCXO clock (optional)
 	"cal"	- reference clock for RCLK delay calibration (optional)
 	"sleep"	- sleep clock for RCLK delay calibration (optional)
+	"ice" - clock for Inline Crypto Engine (optional)
 
 Example:
 
diff --git a/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt b/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt
new file mode 100644
index 0000000..96b6fee
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/sprd-efuse.txt
@@ -0,0 +1,39 @@
+= Spreadtrum eFuse device tree bindings =
+
+Required properties:
+- compatible: Should be "sprd,ums312-efuse".
+- reg: Specify the address offset of efuse controller.
+- clock-names: Should be "enable".
+- clocks: The phandle and specifier referencing the controller's clock.
+- hwlocks: Reference to a phandle of a hwlock provider node.
+
+= Data cells =
+Are child nodes of eFuse, bindings of which as described in
+bindings/nvmem/nvmem.txt
+
+Example:
+
+	ap_efuse: efuse@32240000 {
+		compatible = "sprd,ums312-efuse";
+		reg = <0 0x32240000 0 0x10000>;
+		clock-names = "enable";
+		hwlocks = <&hwlock 8>;
+		clocks = <&aonapb_gate CLK_EFUSE_EB>;
+
+		/* Data cells */
+		thermal_calib: calib@10 {
+			reg = <0x10 0x2>;
+		};
+	};
+
+= Data consumers =
+Are device nodes which consume nvmem data cells.
+
+Example:
+
+	thermal {
+		...
+
+		nvmem-cells = <&thermal_calib>;
+		nvmem-cell-names = "calibration";
+	};
diff --git a/Documentation/devicetree/bindings/power/supply/battery.txt b/Documentation/devicetree/bindings/power/supply/battery.txt
index 5c913d4c..3049cf8 100644
--- a/Documentation/devicetree/bindings/power/supply/battery.txt
+++ b/Documentation/devicetree/bindings/power/supply/battery.txt
@@ -35,6 +35,10 @@
    for each of the battery capacity lookup table. The first temperature value
    specifies the OCV table 0, and the second temperature value specifies the
    OCV table 1, and so on.
+ - resistance-temp-table: An array providing the temperature in degree Celsius
+   and corresponding battery internal resistance percent, which is used to look
+   up the resistance percent according to current temperature to get a accurate
+   batterty internal resistance in different temperatures.
 
 Battery properties are named, where possible, for the corresponding
 elements in enum power_supply_property, defined in
@@ -61,6 +65,7 @@
 		ocv-capacity-table-0 = <4185000 100>, <4113000 95>, <4066000 90>, ...;
 		ocv-capacity-table-1 = <4200000 100>, <4185000 95>, <4113000 90>, ...;
 		ocv-capacity-table-2 = <4250000 100>, <4200000 95>, <4185000 90>, ...;
+		resistance-temp-table = <20 100>, <10 90>, <0 80>, <(-10) 60>;
 	};
 
 	charger: charger@11 {
diff --git a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
index 0a5705b..b6359b5 100644
--- a/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
+++ b/Documentation/devicetree/bindings/power/supply/sc27xx-fg.txt
@@ -13,6 +13,8 @@
 - io-channel-names: Should be "bat-temp" or "charge-vol".
 - nvmem-cells: A phandle to the calibration cells provided by eFuse device.
 - nvmem-cell-names: Should be "fgu_calib".
+- sprd,calib-resistance-micro-ohms: Specify the real resistance of coulomb counter
+  chip in micro Ohms.
 - monitored-battery: Phandle of battery characteristics devicetree node.
   See Documentation/devicetree/bindings/power/supply/battery.txt
 
@@ -52,5 +54,6 @@
 			nvmem-cells = <&fgu_calib>;
 			nvmem-cell-names = "fgu_calib";
 			monitored-battery = <&bat>;
+			sprd,calib-resistance-micro-ohms = <21500>;
 		};
 	};
diff --git a/Documentation/devicetree/bindings/reserved-memory/ramoops.txt b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
index 0eba562..b7886fe 100644
--- a/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
+++ b/Documentation/devicetree/bindings/reserved-memory/ramoops.txt
@@ -30,7 +30,7 @@
 - ecc-size: enables ECC support and specifies ECC buffer size in bytes
   (defaults to 0: no ECC)
 
-- record-size: maximum size in bytes of each dump done on oops/panic
+- record-size: maximum size in bytes of each kmsg dump.
   (defaults to 0: disabled)
 
 - console-size: size in bytes of log buffer reserved for kernel messages
@@ -45,7 +45,16 @@
 - unbuffered: if present, use unbuffered mappings to map the reserved region
   (defaults to buffered mappings)
 
-- no-dump-oops: if present, only dump panics (defaults to panics and oops)
+- max-reason: if present, sets maximum type of kmsg dump reasons to store
+  (defaults to 2: log Oopses and Panics). This can be set to INT_MAX to
+  store all kmsg dumps. See include/linux/kmsg_dump.h KMSG_DUMP_* for other
+  kmsg dump reason values. Setting this to 0 (KMSG_DUMP_UNDEF), means the
+  reason filtering will be controlled by the printk.always_kmsg_dump boot
+  param: if unset, it will be KMSG_DUMP_OOPS, otherwise KMSG_DUMP_MAX.
+
+- no-dump-oops: deprecated, use max_reason instead. If present, and
+  max_reason is not specified, it is equivalent to max_reason = 1
+  (KMSG_DUMP_PANIC).
 
 - flags: if present, pass ramoops behavioral flags (defaults to 0,
   see include/linux/pstore_ram.h RAMOOPS_FLAG_* for flag values).
diff --git a/Documentation/devicetree/bindings/serial/samsung_uart.txt b/Documentation/devicetree/bindings/serial/samsung_uart.txt
index e85f37e..86211e8 100644
--- a/Documentation/devicetree/bindings/serial/samsung_uart.txt
+++ b/Documentation/devicetree/bindings/serial/samsung_uart.txt
@@ -25,6 +25,8 @@
     internal baud clock mux).
 - clocks: phandles and specifiers for all clocks specified in "clock-names"
   property, in the same order, according to clock bindings documentation [2].
+- reg-io-width: The size (in bytes) of the IO accesses that should be
+  performed on the device.
 
 [1] Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
 [2] Documentation/devicetree/bindings/clock/clock-bindings.txt
diff --git a/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt b/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt
new file mode 100644
index 0000000..654c234
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/hisilicon,hi3660-i2s.txt
@@ -0,0 +1,49 @@
+* Hisilicon 6210 i2s controller
+
+Required properties:
+
+- compatible: should be one of the following:
+   - "hisilicon,hi3660-i2s-1.0"
+- reg: physical base address of the i2s controller unit and length of
+   memory mapped region.
+- interrupts: should contain the i2s interrupt.
+- clocks: a list of phandle + clock-specifier pairs, one for each entry
+  in clock-names.
+- clock-names: should contain following:
+   - "dacodec"
+   - "i2s-base"
+- dmas: DMA specifiers for tx dma. See the DMA client binding,
+  Documentation/devicetree/bindings/dma/dma.txt
+- dma-names: should be "tx" and "rx"
+- hisilicon,sysctrl-syscon: phandle to sysctrl syscon
+- #sound-dai-cells: Should be set to 1 (for multi-dai)
+
+Example for the hi3660 i2s controller:
+
+	i2s2: hisi_i2s {
+		compatible = "hisilicon,hi3660-i2s-1.0";
+		reg = <0x0 0xe804f800 0x0 0x400>,
+			  <0x0 0xe804e000 0x0 0x400>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2s2_pmx_func &i2s2_cfg_func>;
+		dmas = <&asp_dmac 18 &asp_dmac 19>;
+		dma-names = "rx", "tx";
+		#sound-dai-cells = <0>;
+	};
+
+	sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "hikey-hdmi";
+		simple-audio-card,format = "i2s";
+
+		simple-audio-card,bitclock-master = <&sound_master>;
+		simple-audio-card,frame-master = <&sound_master>;
+
+		sound_master: simple-audio-card,cpu {
+			sound-dai = <&i2s2>;
+		};
+
+		simple-audio-card,codec {
+			sound-dai = <&adv7533>;
+		};
+	};
diff --git a/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml b/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml
new file mode 100644
index 0000000..3bfe055
--- /dev/null
+++ b/Documentation/devicetree/bindings/thermal/sprd-thermal.yaml
@@ -0,0 +1,108 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/thermal/sprd-thermal.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Spreadtrum thermal sensor controller bindings
+
+maintainers:
+  - Orson Zhai <orsonzhai@gmail.com>
+  - Baolin Wang <baolin.wang7@gmail.com>
+  - Chunyan Zhang <zhang.lyra@gmail.com>
+
+properties:
+  compatible:
+    const: sprd,ums512-thermal
+
+  reg:
+    maxItems: 1
+
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    items:
+      - const: enable
+
+  nvmem-cells:
+    maxItems: 2
+    description:
+      Reference to nvmem nodes for the calibration data.
+
+  nvmem-cell-names:
+    maxItems: 2
+    items:
+      - const: thm_sign_cal
+      - const: thm_ratio_cal
+
+  "#thermal-sensor-cells":
+    const: 1
+
+  "#address-cells":
+    const: 1
+
+  "#size-cells":
+    const: 0
+
+patternProperties:
+  "^([a-z]*-)?sensor(-section)?@[0-9]+$":
+    type: object
+    description:
+      Represent one thermal sensor.
+
+    properties:
+      reg:
+        description: Specify the sensor id.
+        maxItems: 1
+
+      nvmem-cells:
+        maxItems: 1
+        description:
+          Reference to an nvmem node for the calibration data.
+
+      nvmem-cell-names:
+        const: sen_delta_cal
+
+    required:
+      - reg
+      - nvmem-cells
+      - nvmem-cell-names
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - nvmem-cells
+  - nvmem-cell-names
+  - "#thermal-sensor-cells"
+  - "#address-cells"
+  - "#size-cells"
+
+examples:
+  - |
+        ap_thm0: thermal@32200000 {
+                compatible = "sprd,ums512-thermal";
+                reg = <0 0x32200000 0 0x10000>;
+                clock-names = "enable";
+                clocks = <&aonapb_gate 32>;
+                #thermal-sensor-cells = <1>;
+                nvmem-cells = <&thm0_sign>, <&thm0_ratio>;
+                nvmem-cell-names = "thm_sign_cal", "thm_ratio_cal";
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                prometheus-sensor@0 {
+                        reg = <0>;
+                        nvmem-cells = <&thm0_sen0>;
+                        nvmem-cell-names = "sen_delta_cal";
+                };
+
+                ank-sensor@1 {
+                        reg = <1>;
+                        nvmem-cells = <&thm0_sen1>;
+                        nvmem-cell-names = "sen_delta_cal";
+                };
+        };
+...
diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt
index c977a3b..9946ff9 100644
--- a/Documentation/devicetree/bindings/usb/dwc3.txt
+++ b/Documentation/devicetree/bindings/usb/dwc3.txt
@@ -7,7 +7,8 @@
  - compatible: must be "snps,dwc3"
  - reg : Address and length of the register set for the device
  - interrupts: Interrupts used by the dwc3 controller.
- - clock-names: should contain "ref", "bus_early", "suspend"
+ - clock-names: list of clock names. Ideally should be "ref",
+                "bus_early", "suspend" but may be less or more.
  - clocks: list of phandle and clock specifier pairs corresponding to
            entries in the clock-names property.
 
@@ -36,7 +37,7 @@
  - phys: from the *Generic PHY* bindings
  - phy-names: from the *Generic PHY* bindings; supported names are "usb2-phy"
 	or "usb3-phy".
- - resets: a single pair of phandle and reset specifier
+ - resets: set of phandle and reset specifier pairs
  - snps,usb2-lpm-disable: indicate if we don't want to enable USB2 HW LPM
  - snps,usb3_lpm_capable: determines if platform is USB3 LPM capable
  - snps,dis-start-transfer-quirk: when set, disable isoc START TRANSFER command
diff --git a/Documentation/devicetree/bindings/usb/generic.txt b/Documentation/devicetree/bindings/usb/generic.txt
index cf5a1ad..dd733fa 100644
--- a/Documentation/devicetree/bindings/usb/generic.txt
+++ b/Documentation/devicetree/bindings/usb/generic.txt
@@ -34,6 +34,12 @@
 			the USB data role (USB host or USB device) for a given
 			USB connector, such as Type-C, Type-B(micro).
 			see connector/usb-connector.txt.
+ - role-switch-default-mode: indicating if usb-role-switch is enabled, the
+			device default operation mode of controller while usb
+			role is USB_ROLE_NONE. Valid arguments are "host" and
+			"peripheral". Defaults to "peripheral" if not
+			specified.
+
 
 This is an attribute to a USB controller such as:
 
diff --git a/Documentation/devicetree/bindings/usb/mediatek,musb.txt b/Documentation/devicetree/bindings/usb/mediatek,musb.txt
new file mode 100644
index 0000000..2b8a87c
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/mediatek,musb.txt
@@ -0,0 +1,57 @@
+MediaTek musb DRD/OTG controller
+-------------------------------------------
+
+Required properties:
+ - compatible      : should be one of:
+                     "mediatek,mt2701-musb"
+                     ...
+                     followed by "mediatek,mtk-musb"
+ - reg             : specifies physical base address and size of
+                     the registers
+ - interrupts      : interrupt used by musb controller
+ - interrupt-names : must be "mc"
+ - phys            : PHY specifier for the OTG phy
+ - dr_mode         : should be one of "host", "peripheral" or "otg",
+                     refer to usb/generic.txt
+ - clocks          : a list of phandle + clock-specifier pairs, one for
+                     each entry in clock-names
+ - clock-names     : must contain "main", "mcu", "univpll"
+                     for clocks of controller
+
+Optional properties:
+ - power-domains   : a phandle to USB power domain node to control USB's
+                     MTCMOS
+
+Required child nodes:
+ usb connector node as defined in bindings/connector/usb-connector.txt
+Optional properties:
+ - id-gpios        : input GPIO for USB ID pin.
+ - vbus-gpios      : input GPIO for USB VBUS pin.
+ - vbus-supply     : reference to the VBUS regulator, needed when supports
+                     dual-role mode
+ - usb-role-switch : use USB Role Switch to support dual-role switch, see
+                     usb/generic.txt.
+
+Example:
+
+usb2: usb@11200000 {
+	compatible = "mediatek,mt2701-musb",
+		     "mediatek,mtk-musb";
+	reg = <0 0x11200000 0 0x1000>;
+	interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_LOW>;
+	interrupt-names = "mc";
+	phys = <&u2port2 PHY_TYPE_USB2>;
+	dr_mode = "otg";
+	clocks = <&pericfg CLK_PERI_USB0>,
+		 <&pericfg CLK_PERI_USB0_MCU>,
+		 <&pericfg CLK_PERI_USB_SLV>;
+	clock-names = "main","mcu","univpll";
+	power-domains = <&scpsys MT2701_POWER_DOMAIN_IFR_MSC>;
+	usb-role-switch;
+	connector{
+		compatible = "gpio-usb-b-connector", "usb-b-connector";
+		type = "micro";
+		id-gpios = <&pio 44 GPIO_ACTIVE_HIGH>;
+		vbus-supply = <&usb_vbus>;
+	};
+};
diff --git a/Documentation/driver-api/device_link.rst b/Documentation/driver-api/device_link.rst
index 1b5020e..bc2d89a 100644
--- a/Documentation/driver-api/device_link.rst
+++ b/Documentation/driver-api/device_link.rst
@@ -281,7 +281,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-api/driver-model/driver.rst b/Documentation/driver-api/driver-model/driver.rst
index 11d2815..baa6a85c 100644
--- a/Documentation/driver-api/driver-model/driver.rst
+++ b/Documentation/driver-api/driver-model/driver.rst
@@ -169,6 +169,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/OWNERS b/Documentation/filesystems/OWNERS
new file mode 100644
index 0000000..5b6ec53
--- /dev/null
+++ b/Documentation/filesystems/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/Documentation/filesystems/OWNERS
diff --git a/Documentation/filesystems/ext4/directory.rst b/Documentation/filesystems/ext4/directory.rst
index 073940c..55f618b 100644
--- a/Documentation/filesystems/ext4/directory.rst
+++ b/Documentation/filesystems/ext4/directory.rst
@@ -121,6 +121,31 @@
    * - 0x7
      - Symbolic link.
 
+To support directories that are both encrypted and casefolded directories, we
+must also include hash information in the directory entry. We append
+``ext4_extended_dir_entry_2`` to ``ext4_dir_entry_2`` except for the entries
+for dot and dotdot, which are kept the same. The structure follows immediately
+after ``name`` and is included in the size listed by ``rec_len`` If a directory
+entry uses this extension, it may be up to 271 bytes.
+
+.. list-table::
+   :widths: 8 8 24 40
+   :header-rows: 1
+
+   * - Offset
+     - Size
+     - Name
+     - Description
+   * - 0x0
+     - \_\_le32
+     - hash
+     - The hash of the directory name
+   * - 0x4
+     - \_\_le32
+     - minor\_hash
+     - The minor hash of the directory name
+
+
 In order to add checksums to these classic directory blocks, a phony
 ``struct ext4_dir_entry`` is placed at the end of each leaf block to
 hold the checksum. The directory entry is 12 bytes long. The inode
@@ -322,6 +347,8 @@
      - Half MD4, unsigned.
    * - 0x5
      - Tea, unsigned.
+   * - 0x6
+     - Siphash.
 
 Interior nodes of an htree are recorded as ``struct dx_node``, which is
 also the full length of a data block:
diff --git a/Documentation/filesystems/f2fs.rst b/Documentation/filesystems/f2fs.rst
new file mode 100644
index 0000000..b91e5a8
--- /dev/null
+++ b/Documentation/filesystems/f2fs.rst
@@ -0,0 +1,894 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+==========================================
+WHAT IS Flash-Friendly File System (F2FS)?
+==========================================
+
+NAND flash memory-based storage devices, such as SSD, eMMC, and SD cards, have
+been equipped on a variety systems ranging from mobile to server systems. Since
+they are known to have different characteristics from the conventional rotating
+disks, a file system, an upper layer to the storage device, should adapt to the
+changes from the sketch in the design level.
+
+F2FS is a file system exploiting NAND flash memory-based storage devices, which
+is based on Log-structured File System (LFS). The design has been focused on
+addressing the fundamental issues in LFS, which are snowball effect of wandering
+tree and high cleaning overhead.
+
+Since a NAND flash memory-based storage device shows different characteristic
+according to its internal geometry or flash memory management scheme, namely FTL,
+F2FS and its tools support various parameters not only for configuring on-disk
+layout, but also for selecting allocation and cleaning algorithms.
+
+The following git tree provides the file system formatting tool (mkfs.f2fs),
+a consistency checking tool (fsck.f2fs), and a debugging tool (dump.f2fs).
+
+- git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git
+
+For reporting bugs and sending patches, please use the following mailing list:
+
+- linux-f2fs-devel@lists.sourceforge.net
+
+Background and Design issues
+============================
+
+Log-structured File System (LFS)
+--------------------------------
+"A log-structured file system writes all modifications to disk sequentially in
+a log-like structure, thereby speeding up  both file writing and crash recovery.
+The log is the only structure on disk; it contains indexing information so that
+files can be read back from the log efficiently. In order to maintain large free
+areas on disk for fast writing, we divide  the log into segments and use a
+segment cleaner to compress the live information from heavily fragmented
+segments." from Rosenblum, M. and Ousterhout, J. K., 1992, "The design and
+implementation of a log-structured file system", ACM Trans. Computer Systems
+10, 1, 26–52.
+
+Wandering Tree Problem
+----------------------
+In LFS, when a file data is updated and written to the end of log, its direct
+pointer block is updated due to the changed location. Then the indirect pointer
+block is also updated due to the direct pointer block update. In this manner,
+the upper index structures such as inode, inode map, and checkpoint block are
+also updated recursively. This problem is called as wandering tree problem [1],
+and in order to enhance the performance, it should eliminate or relax the update
+propagation as much as possible.
+
+[1] Bityutskiy, A. 2005. JFFS3 design issues. http://www.linux-mtd.infradead.org/
+
+Cleaning Overhead
+-----------------
+Since LFS is based on out-of-place writes, it produces so many obsolete blocks
+scattered across the whole storage. In order to serve new empty log space, it
+needs to reclaim these obsolete blocks seamlessly to users. This job is called
+as a cleaning process.
+
+The process consists of three operations as follows.
+
+1. A victim segment is selected through referencing segment usage table.
+2. It loads parent index structures of all the data in the victim identified by
+   segment summary blocks.
+3. It checks the cross-reference between the data and its parent index structure.
+4. It moves valid data selectively.
+
+This cleaning job may cause unexpected long delays, so the most important goal
+is to hide the latencies to users. And also definitely, it should reduce the
+amount of valid data to be moved, and move them quickly as well.
+
+Key Features
+============
+
+Flash Awareness
+---------------
+- Enlarge the random write area for better performance, but provide the high
+  spatial locality
+- Align FS data structures to the operational units in FTL as best efforts
+
+Wandering Tree Problem
+----------------------
+- Use a term, “node”, that represents inodes as well as various pointer blocks
+- Introduce Node Address Table (NAT) containing the locations of all the “node”
+  blocks; this will cut off the update propagation.
+
+Cleaning Overhead
+-----------------
+- Support a background cleaning process
+- Support greedy and cost-benefit algorithms for victim selection policies
+- Support multi-head logs for static/dynamic hot and cold data separation
+- Introduce adaptive logging for efficient block allocation
+
+Mount Options
+=============
+
+
+======================== ============================================================
+background_gc=%s	 Turn on/off cleaning operations, namely garbage
+			 collection, triggered in background when I/O subsystem is
+			 idle. If background_gc=on, it will turn on the garbage
+			 collection and if background_gc=off, garbage collection
+			 will be turned off. If background_gc=sync, it will turn
+			 on synchronous garbage collection running in background.
+			 Default value for this option is on. So garbage
+			 collection is on by default.
+gc_merge		 When background_gc is on, this option can be enabled to
+			 let background GC thread to handle foreground GC requests,
+			 it can eliminate the sluggish issue caused by slow foreground
+			 GC operation when GC is triggered from a process with limited
+			 I/O and CPU resources.
+nogc_merge		 Disable GC merge feature.
+disable_roll_forward	 Disable the roll-forward recovery routine
+norecovery		 Disable the roll-forward recovery routine, mounted read-
+			 only (i.e., -o ro,disable_roll_forward)
+discard/nodiscard	 Enable/disable real-time discard in f2fs, if discard is
+			 enabled, f2fs will issue discard/TRIM commands when a
+			 segment is cleaned.
+no_heap			 Disable heap-style segment allocation which finds free
+			 segments for data from the beginning of main area, while
+			 for node from the end of main area.
+nouser_xattr		 Disable Extended User Attributes. Note: xattr is enabled
+			 by default if CONFIG_F2FS_FS_XATTR is selected.
+noacl			 Disable POSIX Access Control List. Note: acl is enabled
+			 by default if CONFIG_F2FS_FS_POSIX_ACL is selected.
+active_logs=%u		 Support configuring the number of active logs. In the
+			 current design, f2fs supports only 2, 4, and 6 logs.
+			 Default number is 6.
+disable_ext_identify	 Disable the extension list configured by mkfs, so f2fs
+			 is not aware of cold files such as media files.
+inline_xattr		 Enable the inline xattrs feature.
+noinline_xattr		 Disable the inline xattrs feature.
+inline_xattr_size=%u	 Support configuring inline xattr size, it depends on
+			 flexible inline xattr feature.
+inline_data		 Enable the inline data feature: Newly created small (<~3.4k)
+			 files can be written into inode block.
+inline_dentry		 Enable the inline dir feature: data in newly created
+			 directory entries can be written into inode block. The
+			 space of inode block which is used to store inline
+			 dentries is limited to ~3.4k.
+noinline_dentry		 Disable the inline dentry feature.
+flush_merge		 Merge concurrent cache_flush commands as much as possible
+			 to eliminate redundant command issues. If the underlying
+			 device handles the cache_flush command relatively slowly,
+			 recommend to enable this option.
+nobarrier		 This option can be used if underlying storage guarantees
+			 its cached data should be written to the novolatile area.
+			 If this option is set, no cache_flush commands are issued
+			 but f2fs still guarantees the write ordering of all the
+			 data writes.
+fastboot		 This option is used when a system wants to reduce mount
+			 time as much as possible, even though normal performance
+			 can be sacrificed.
+extent_cache		 Enable an extent cache based on rb-tree, it can cache
+			 as many as extent which map between contiguous logical
+			 address and physical address per inode, resulting in
+			 increasing the cache hit ratio. Set by default.
+noextent_cache		 Disable an extent cache based on rb-tree explicitly, see
+			 the above extent_cache mount option.
+noinline_data		 Disable the inline data feature, inline data feature is
+			 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
+			 enabled with fault_injection option, fault type value
+			 is shown below, it supports single or combined type.
+
+			 ===================	  ===========
+			 Type_Name		  Type_Value
+			 ===================	  ===========
+			 FAULT_KMALLOC		  0x000000001
+			 FAULT_KVMALLOC		  0x000000002
+			 FAULT_PAGE_ALLOC	  0x000000004
+			 FAULT_PAGE_GET		  0x000000008
+			 FAULT_ALLOC_NID	  0x000000020
+			 FAULT_ORPHAN		  0x000000040
+			 FAULT_BLOCK		  0x000000080
+			 FAULT_DIR_DEPTH	  0x000000100
+			 FAULT_EVICT_INODE	  0x000000200
+			 FAULT_TRUNCATE		  0x000000400
+			 FAULT_READ_IO		  0x000000800
+			 FAULT_CHECKPOINT	  0x000001000
+			 FAULT_DISCARD		  0x000002000
+			 FAULT_WRITE_IO		  0x000004000
+			 ===================	  ===========
+mode=%s			 Control block allocation mode which supports "adaptive"
+			 and "lfs". In "lfs" mode, there should be no random
+			 writes towards main area.
+io_bits=%u		 Set the bit size of write IO requests. It should be set
+			 with "mode=lfs".
+usrquota		 Enable plain user disk quota accounting.
+grpquota		 Enable plain group disk quota accounting.
+prjquota		 Enable plain project quota accounting.
+usrjquota=<file>	 Appoint specified file and type during mount, so that quota
+grpjquota=<file>	 information can be properly updated during recovery flow,
+prjjquota=<file>	 <quota file>: must be in root directory;
+jqfmt=<quota type>	 <quota type>: [vfsold,vfsv0,vfsv1].
+offusrjquota		 Turn off user journalled quota.
+offgrpjquota		 Turn off group journalled quota.
+offprjjquota		 Turn off project journalled quota.
+quota			 Enable plain user disk quota accounting.
+noquota			 Disable all plain disk quota option.
+whint_mode=%s		 Control which write hints are passed down to block
+			 layer. This supports "off", "user-based", and
+			 "fs-based".  In "off" mode (default), f2fs does not pass
+			 down hints. In "user-based" mode, f2fs tries to pass
+			 down hints given by users. And in "fs-based" mode, f2fs
+			 passes down hints with its policy.
+alloc_mode=%s		 Adjust block allocation policy, which supports "reuse"
+			 and "default".
+fsync_mode=%s		 Control the policy of fsync. Currently supports "posix",
+			 "strict", and "nobarrier". In "posix" mode, which is
+			 default, fsync will follow POSIX semantics and does a
+			 light operation to improve the filesystem performance.
+			 In "strict" mode, fsync will be heavy and behaves in line
+			 with xfs, ext4 and btrfs, where xfstest generic/342 will
+			 pass, but the performance will regress. "nobarrier" is
+			 based on "posix", but doesn't issue flush command for
+			 non-atomic files likewise "nobarrier" mount option.
+test_dummy_encryption
+test_dummy_encryption=%s
+			 Enable dummy encryption, which provides a fake fscrypt
+			 context. The fake fscrypt context is used by xfstests.
+			 The argument may be either "v1" or "v2", in order to
+			 select the corresponding fscrypt policy version.
+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.
+checkpoint_merge	 When checkpoint is enabled, this can be used to create a kernel
+			 daemon and make it to merge concurrent checkpoint requests as
+			 much as possible to eliminate redundant checkpoint issues. Plus,
+			 we can eliminate the sluggish issue caused by slow checkpoint
+			 operation when the checkpoint is done in a process context in
+			 a cgroup having low i/o budget and cpu shares. To make this
+			 do better, we set the default i/o priority of the kernel daemon
+			 to "3", to give one higher priority than other kernel threads.
+			 This is the same way to give a I/O priority to the jbd2
+			 journaling thread of ext4 filesystem.
+nocheckpoint_merge	 Disable checkpoint merge feature.
+compress_algorithm=%s	 Control compress algorithm, currently f2fs supports "lzo",
+			 "lz4", "zstd" and "lzo-rle" algorithm.
+compress_algorithm=%s:%d Control compress algorithm and its compress level, now, only
+			 "lz4" and "zstd" support compress level config.
+			 algorithm	level range
+			 lz4		3 - 16
+			 zstd		1 - 22
+compress_log_size=%u	 Support configuring compress cluster size, the size will
+			 be 4KB * (1 << %u), 16KB is minimum size, also it's
+			 default size.
+compress_extension=%s	 Support adding specified extension, so that f2fs can enable
+			 compression on those corresponding files, e.g. if all files
+			 with '.ext' has high compression rate, we can set the '.ext'
+			 on compression extension list and enable compression on
+			 these file by default rather than to enable it via ioctl.
+			 For other files, we can still enable compression via ioctl.
+			 Note that, there is one reserved special extension '*', it
+			 can be set to enable compression for all files.
+compress_chksum		 Support verifying chksum of raw data in compressed cluster.
+compress_mode=%s	 Control file compression mode. This supports "fs" and "user"
+			 modes. In "fs" mode (default), f2fs does automatic compression
+			 on the compression enabled files. In "user" mode, f2fs disables
+			 the automaic compression and gives the user discretion of
+			 choosing the target file and the timing. The user can do manual
+			 compression/decompression on the compression enabled files using
+			 ioctls.
+compress_cache		 Support to use address space of a filesystem managed inode to
+			 cache compressed block, in order to improve cache hit ratio of
+			 random read.
+inlinecrypt		 When possible, encrypt/decrypt the contents of encrypted
+			 files using the blk-crypto framework rather than
+			 filesystem-layer encryption. This allows the use of
+			 inline encryption hardware. The on-disk format is
+			 unaffected. For more details, see
+			 Documentation/block/inline-encryption.rst.
+atgc			 Enable age-threshold garbage collection, it provides high
+			 effectiveness and efficiency on background GC.
+======================== ============================================================
+
+Debugfs Entries
+===============
+
+/sys/kernel/debug/f2fs/ contains information about all the partitions mounted as
+f2fs. Each file shows the whole f2fs information.
+
+/sys/kernel/debug/f2fs/status includes:
+
+ - major file system information managed by f2fs currently
+ - average SIT information about whole segments
+ - current memory footprint consumed by f2fs.
+
+Sysfs Entries
+=============
+
+Information about mounted f2fs file systems can be found in
+/sys/fs/f2fs.  Each mounted filesystem will have a directory in
+/sys/fs/f2fs based on its device name (i.e., /sys/fs/f2fs/sda).
+The files in each per-device directory are shown in table below.
+
+Files in /sys/fs/f2fs/<devname>
+(see also Documentation/ABI/testing/sysfs-fs-f2fs)
+
+Usage
+=====
+
+1. Download userland tools and compile them.
+
+2. Skip, if f2fs was compiled statically inside kernel.
+   Otherwise, insert the f2fs.ko module::
+
+	# insmod f2fs.ko
+
+3. Create a directory to use when mounting::
+
+	# mkdir /mnt/f2fs
+
+4. Format the block device, and then mount as f2fs::
+
+	# mkfs.f2fs -l label /dev/block_device
+	# mount -t f2fs /dev/block_device /mnt/f2fs
+
+mkfs.f2fs
+---------
+The mkfs.f2fs is for the use of formatting a partition as the f2fs filesystem,
+which builds a basic on-disk layout.
+
+The quick options consist of:
+
+===============    ===========================================================
+``-l [label]``     Give a volume label, up to 512 unicode name.
+``-a [0 or 1]``    Split start location of each area for heap-based allocation.
+
+                   1 is set by default, which performs this.
+``-o [int]``       Set overprovision ratio in percent over volume size.
+
+                   5 is set by default.
+``-s [int]``       Set the number of segments per section.
+
+                   1 is set by default.
+``-z [int]``       Set the number of sections per zone.
+
+                   1 is set by default.
+``-e [str]``       Set basic extension list. e.g. "mp3,gif,mov"
+``-t [0 or 1]``    Disable discard command or not.
+
+                   1 is set by default, which conducts discard.
+===============    ===========================================================
+
+Note: please refer to the manpage of mkfs.f2fs(8) to get full option list.
+
+fsck.f2fs
+---------
+The fsck.f2fs is a tool to check the consistency of an f2fs-formatted
+partition, which examines whether the filesystem metadata and user-made data
+are cross-referenced correctly or not.
+Note that, initial version of the tool does not fix any inconsistency.
+
+The quick options consist of::
+
+  -d debug level [default:0]
+
+Note: please refer to the manpage of fsck.f2fs(8) to get full option list.
+
+dump.f2fs
+---------
+The dump.f2fs shows the information of specific inode and dumps SSA and SIT to
+file. Each file is dump_ssa and dump_sit.
+
+The dump.f2fs is used to debug on-disk data structures of the f2fs filesystem.
+It shows on-disk inode information recognized by a given inode number, and is
+able to dump all the SSA and SIT entries into predefined files, ./dump_ssa and
+./dump_sit respectively.
+
+The options consist of::
+
+  -d debug level [default:0]
+  -i inode no (hex)
+  -s [SIT dump segno from #1~#2 (decimal), for all 0~-1]
+  -a [SSA dump segno from #1~#2 (decimal), for all 0~-1]
+
+Examples::
+
+    # dump.f2fs -i [ino] /dev/sdx
+    # dump.f2fs -s 0~-1 /dev/sdx (SIT dump)
+    # dump.f2fs -a 0~-1 /dev/sdx (SSA dump)
+
+Note: please refer to the manpage of dump.f2fs(8) to get full option list.
+
+sload.f2fs
+----------
+The sload.f2fs gives a way to insert files and directories in the exisiting disk
+image. This tool is useful when building f2fs images given compiled files.
+
+Note: please refer to the manpage of sload.f2fs(8) to get full option list.
+
+resize.f2fs
+-----------
+The resize.f2fs lets a user resize the f2fs-formatted disk image, while preserving
+all the files and directories stored in the image.
+
+Note: please refer to the manpage of resize.f2fs(8) to get full option list.
+
+defrag.f2fs
+-----------
+The defrag.f2fs can be used to defragment scattered written data as well as
+filesystem metadata across the disk. This can improve the write speed by giving
+more free consecutive space.
+
+Note: please refer to the manpage of defrag.f2fs(8) to get full option list.
+
+f2fs_io
+-------
+The f2fs_io is a simple tool to issue various filesystem APIs as well as
+f2fs-specific ones, which is very useful for QA tests.
+
+Note: please refer to the manpage of f2fs_io(8) to get full option list.
+
+Design
+======
+
+On-disk Layout
+--------------
+
+F2FS divides the whole volume into a number of segments, each of which is fixed
+to 2MB in size. A section is composed of consecutive segments, and a zone
+consists of a set of sections. By default, section and zone sizes are set to one
+segment size identically, but users can easily modify the sizes by mkfs.
+
+F2FS splits the entire volume into six areas, and all the areas except superblock
+consist of multiple segments as described below::
+
+                                            align with the zone size <-|
+                 |-> align with the segment size
+     _________________________________________________________________________
+    |            |            |   Segment   |    Node     |   Segment  |      |
+    | Superblock | Checkpoint |    Info.    |   Address   |   Summary  | Main |
+    |    (SB)    |   (CP)     | Table (SIT) | Table (NAT) | Area (SSA) |      |
+    |____________|_____2______|______N______|______N______|______N_____|__N___|
+                                                                       .      .
+                                                             .                .
+                                                 .                            .
+                                    ._________________________________________.
+                                    |_Segment_|_..._|_Segment_|_..._|_Segment_|
+                                    .           .
+                                    ._________._________
+                                    |_section_|__...__|_
+                                    .            .
+		                    .________.
+	                            |__zone__|
+
+- Superblock (SB)
+   It is located at the beginning of the partition, and there exist two copies
+   to avoid file system crash. It contains basic partition information and some
+   default parameters of f2fs.
+
+- Checkpoint (CP)
+   It contains file system information, bitmaps for valid NAT/SIT sets, orphan
+   inode lists, and summary entries of current active segments.
+
+- Segment Information Table (SIT)
+   It contains segment information such as valid block count and bitmap for the
+   validity of all the blocks.
+
+- Node Address Table (NAT)
+   It is composed of a block address table for all the node blocks stored in
+   Main area.
+
+- Segment Summary Area (SSA)
+   It contains summary entries which contains the owner information of all the
+   data and node blocks stored in Main area.
+
+- Main Area
+   It contains file and directory data including their indices.
+
+In order to avoid misalignment between file system and flash-based storage, F2FS
+aligns the start block address of CP with the segment size. Also, it aligns the
+start block address of Main area with the zone size by reserving some segments
+in SSA area.
+
+Reference the following survey for additional technical details.
+https://wiki.linaro.org/WorkingGroups/Kernel/Projects/FlashCardSurvey
+
+File System Metadata Structure
+------------------------------
+
+F2FS adopts the checkpointing scheme to maintain file system consistency. At
+mount time, F2FS first tries to find the last valid checkpoint data by scanning
+CP area. In order to reduce the scanning time, F2FS uses only two copies of CP.
+One of them always indicates the last valid data, which is called as shadow copy
+mechanism. In addition to CP, NAT and SIT also adopt the shadow copy mechanism.
+
+For file system consistency, each CP points to which NAT and SIT copies are
+valid, as shown as below::
+
+  +--------+----------+---------+
+  |   CP   |    SIT   |   NAT   |
+  +--------+----------+---------+
+  .         .          .          .
+  .            .              .              .
+  .               .                 .                 .
+  +-------+-------+--------+--------+--------+--------+
+  | CP #0 | CP #1 | SIT #0 | SIT #1 | NAT #0 | NAT #1 |
+  +-------+-------+--------+--------+--------+--------+
+     |             ^                          ^
+     |             |                          |
+     `----------------------------------------'
+
+Index Structure
+---------------
+
+The key data structure to manage the data locations is a "node". Similar to
+traditional file structures, F2FS has three types of node: inode, direct node,
+indirect node. F2FS assigns 4KB to an inode block which contains 923 data block
+indices, two direct node pointers, two indirect node pointers, and one double
+indirect node pointer as described below. One direct node block contains 1018
+data blocks, and one indirect node block contains also 1018 node blocks. Thus,
+one inode block (i.e., a file) covers::
+
+  4KB * (923 + 2 * 1018 + 2 * 1018 * 1018 + 1018 * 1018 * 1018) := 3.94TB.
+
+   Inode block (4KB)
+     |- data (923)
+     |- direct node (2)
+     |          `- data (1018)
+     |- indirect node (2)
+     |            `- direct node (1018)
+     |                       `- data (1018)
+     `- double indirect node (1)
+                         `- indirect node (1018)
+			              `- direct node (1018)
+	                                         `- data (1018)
+
+Note that all the node blocks are mapped by NAT which means the location of
+each node is translated by the NAT table. In the consideration of the wandering
+tree problem, F2FS is able to cut off the propagation of node updates caused by
+leaf data writes.
+
+Directory Structure
+-------------------
+
+A directory entry occupies 11 bytes, which consists of the following attributes.
+
+- hash		hash value of the file name
+- ino		inode number
+- len		the length of file name
+- type		file type such as directory, symlink, etc
+
+A dentry block consists of 214 dentry slots and file names. Therein a bitmap is
+used to represent whether each dentry is valid or not. A dentry block occupies
+4KB with the following composition.
+
+::
+
+  Dentry Block(4 K) = bitmap (27 bytes) + reserved (3 bytes) +
+	              dentries(11 * 214 bytes) + file name (8 * 214 bytes)
+
+                         [Bucket]
+             +--------------------------------+
+             |dentry block 1 | dentry block 2 |
+             +--------------------------------+
+             .               .
+       .                             .
+  .       [Dentry Block Structure: 4KB]       .
+  +--------+----------+----------+------------+
+  | bitmap | reserved | dentries | file names |
+  +--------+----------+----------+------------+
+  [Dentry Block: 4KB] .   .
+		 .               .
+            .                          .
+            +------+------+-----+------+
+            | hash | ino  | len | type |
+            +------+------+-----+------+
+            [Dentry Structure: 11 bytes]
+
+F2FS implements multi-level hash tables for directory structure. Each level has
+a hash table with dedicated number of hash buckets as shown below. Note that
+"A(2B)" means a bucket includes 2 data blocks.
+
+::
+
+    ----------------------
+    A : bucket
+    B : block
+    N : MAX_DIR_HASH_DEPTH
+    ----------------------
+
+    level #0   | A(2B)
+	    |
+    level #1   | A(2B) - A(2B)
+	    |
+    level #2   | A(2B) - A(2B) - A(2B) - A(2B)
+	.     |   .       .       .       .
+    level #N/2 | A(2B) - A(2B) - A(2B) - A(2B) - A(2B) - ... - A(2B)
+	.     |   .       .       .       .
+    level #N   | A(4B) - A(4B) - A(4B) - A(4B) - A(4B) - ... - A(4B)
+
+The number of blocks and buckets are determined by::
+
+                            ,- 2, if n < MAX_DIR_HASH_DEPTH / 2,
+  # of blocks in level #n = |
+                            `- 4, Otherwise
+
+                             ,- 2^(n + dir_level),
+			     |        if n + dir_level < MAX_DIR_HASH_DEPTH / 2,
+  # of buckets in level #n = |
+                             `- 2^((MAX_DIR_HASH_DEPTH / 2) - 1),
+			              Otherwise
+
+When F2FS finds a file name in a directory, at first a hash value of the file
+name is calculated. Then, F2FS scans the hash table in level #0 to find the
+dentry consisting of the file name and its inode number. If not found, F2FS
+scans the next hash table in level #1. In this way, F2FS scans hash tables in
+each levels incrementally from 1 to N. In each level F2FS needs to scan only
+one bucket determined by the following equation, which shows O(log(# of files))
+complexity::
+
+  bucket number to scan in level #n = (hash value) % (# of buckets in level #n)
+
+In the case of file creation, F2FS finds empty consecutive slots that cover the
+file name. F2FS searches the empty slots in the hash tables of whole levels from
+1 to N in the same way as the lookup operation.
+
+The following figure shows an example of two cases holding children::
+
+       --------------> Dir <--------------
+       |                                 |
+    child                             child
+
+    child - child                     [hole] - child
+
+    child - child - child             [hole] - [hole] - child
+
+   Case 1:                           Case 2:
+   Number of children = 6,           Number of children = 3,
+   File size = 7                     File size = 7
+
+Default Block Allocation
+------------------------
+
+At runtime, F2FS manages six active logs inside "Main" area: Hot/Warm/Cold node
+and Hot/Warm/Cold data.
+
+- Hot node	contains direct node blocks of directories.
+- Warm node	contains direct node blocks except hot node blocks.
+- Cold node	contains indirect node blocks
+- Hot data	contains dentry blocks
+- Warm data	contains data blocks except hot and cold data blocks
+- Cold data	contains multimedia data or migrated data blocks
+
+LFS has two schemes for free space management: threaded log and copy-and-compac-
+tion. The copy-and-compaction scheme which is known as cleaning, is well-suited
+for devices showing very good sequential write performance, since free segments
+are served all the time for writing new data. However, it suffers from cleaning
+overhead under high utilization. Contrarily, the threaded log scheme suffers
+from random writes, but no cleaning process is needed. F2FS adopts a hybrid
+scheme where the copy-and-compaction scheme is adopted by default, but the
+policy is dynamically changed to the threaded log scheme according to the file
+system status.
+
+In order to align F2FS with underlying flash-based storage, F2FS allocates a
+segment in a unit of section. F2FS expects that the section size would be the
+same as the unit size of garbage collection in FTL. Furthermore, with respect
+to the mapping granularity in FTL, F2FS allocates each section of the active
+logs from different zones as much as possible, since FTL can write the data in
+the active logs into one allocation unit according to its mapping granularity.
+
+Cleaning process
+----------------
+
+F2FS does cleaning both on demand and in the background. On-demand cleaning is
+triggered when there are not enough free segments to serve VFS calls. Background
+cleaner is operated by a kernel thread, and triggers the cleaning job when the
+system is idle.
+
+F2FS supports two victim selection policies: greedy and cost-benefit algorithms.
+In the greedy algorithm, F2FS selects a victim segment having the smallest number
+of valid blocks. In the cost-benefit algorithm, F2FS selects a victim segment
+according to the segment age and the number of valid blocks in order to address
+log block thrashing problem in the greedy algorithm. F2FS adopts the greedy
+algorithm for on-demand cleaner, while background cleaner adopts cost-benefit
+algorithm.
+
+In order to identify whether the data in the victim segment are valid or not,
+F2FS manages a bitmap. Each bit represents the validity of a block, and the
+bitmap is composed of a bit stream covering whole blocks in main area.
+
+Write-hint Policy
+-----------------
+
+1) whint_mode=off. F2FS only passes down WRITE_LIFE_NOT_SET.
+
+2) whint_mode=user-based. F2FS tries to pass down hints given by
+users.
+
+===================== ======================== ===================
+User                  F2FS                     Block
+===================== ======================== ===================
+N/A                   META                     WRITE_LIFE_NOT_SET
+N/A                   HOT_NODE                 "
+N/A                   WARM_NODE                "
+N/A                   COLD_NODE                "
+ioctl(COLD)           COLD_DATA                WRITE_LIFE_EXTREME
+extension list        "                        "
+
+-- buffered io
+WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
+WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
+WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
+WRITE_LIFE_NONE       "                        "
+WRITE_LIFE_MEDIUM     "                        "
+WRITE_LIFE_LONG       "                        "
+
+-- direct io
+WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
+WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
+WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
+WRITE_LIFE_NONE       "                        WRITE_LIFE_NONE
+WRITE_LIFE_MEDIUM     "                        WRITE_LIFE_MEDIUM
+WRITE_LIFE_LONG       "                        WRITE_LIFE_LONG
+===================== ======================== ===================
+
+3) whint_mode=fs-based. F2FS passes down hints with its policy.
+
+===================== ======================== ===================
+User                  F2FS                     Block
+===================== ======================== ===================
+N/A                   META                     WRITE_LIFE_MEDIUM;
+N/A                   HOT_NODE                 WRITE_LIFE_NOT_SET
+N/A                   WARM_NODE                "
+N/A                   COLD_NODE                WRITE_LIFE_NONE
+ioctl(COLD)           COLD_DATA                WRITE_LIFE_EXTREME
+extension list        "                        "
+
+-- buffered io
+WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
+WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
+WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_LONG
+WRITE_LIFE_NONE       "                        "
+WRITE_LIFE_MEDIUM     "                        "
+WRITE_LIFE_LONG       "                        "
+
+-- direct io
+WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
+WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
+WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
+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 block 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)
+
+Compression implementation
+--------------------------
+
+- New term named cluster is defined as basic unit of compression, file can
+  be divided into multiple clusters logically. One cluster includes 4 << n
+  (n >= 0) logical pages, compression size is also cluster size, each of
+  cluster can be compressed or not.
+
+- In cluster metadata layout, one special block address is used to indicate
+  a cluster is a compressed one or normal one; for compressed cluster, following
+  metadata maps cluster to [1, 4 << n - 1] physical blocks, in where f2fs
+  stores data including compress header and compressed data.
+
+- In order to eliminate write amplification during overwrite, F2FS only
+  support compression on write-once file, data can be compressed only when
+  all logical blocks in cluster contain valid data and compress ratio of
+  cluster data is lower than specified threshold.
+
+- To enable compression on regular inode, there are three ways:
+
+  * chattr +c file
+  * chattr +c dir; touch dir/file
+  * mount w/ -o compress_extension=ext; touch file.ext
+  * mount w/ -o compress_extension=*; touch any_file
+
+- At this point, compression feature doesn't expose compressed space to user
+  directly in order to guarantee potential data updates later to the space.
+  Instead, the main goal is to reduce data writes to flash disk as much as
+  possible, resulting in extending disk life time as well as relaxing IO
+  congestion. Alternatively, we've added ioctl interface to reclaim compressed
+  space and show it to user after putting the immutable bit.
+
+Compress metadata layout::
+
+				[Dnode Structure]
+		+-----------------------------------------------+
+		| cluster 1 | cluster 2 | ......... | cluster N |
+		+-----------------------------------------------+
+		.           .                       .           .
+	.                       .                .                      .
+    .         Compressed Cluster       .        .        Normal Cluster            .
+    +----------+---------+---------+---------+  +---------+---------+---------+---------+
+    |compr flag| block 1 | block 2 | block 3 |  | block 1 | block 2 | block 3 | block 4 |
+    +----------+---------+---------+---------+  +---------+---------+---------+---------+
+	    .                             .
+	    .                                           .
+	.                                                           .
+	+-------------+-------------+----------+----------------------------+
+	| data length | data chksum | reserved |      compressed data       |
+	+-------------+-------------+----------+----------------------------+
+
+Compression mode
+--------------------------
+
+f2fs supports "fs" and "user" compression modes with "compression_mode" mount option.
+With this option, f2fs provides a choice to select the way how to compress the
+compression enabled files (refer to "Compression implementation" section for how to
+enable compression on a regular inode).
+
+1) compress_mode=fs
+This is the default option. f2fs does automatic compression in the writeback of the
+compression enabled files.
+
+2) compress_mode=user
+This disables the automatic compression and gives the user discretion of choosing the
+target file and the timing. The user can do manual compression/decompression on the
+compression enabled files using F2FS_IOC_DECOMPRESS_FILE and F2FS_IOC_COMPRESS_FILE
+ioctls like the below.
+
+To decompress a file,
+
+fd = open(filename, O_WRONLY, 0);
+ret = ioctl(fd, F2FS_IOC_DECOMPRESS_FILE);
+
+To compress a file,
+
+fd = open(filename, O_WRONLY, 0);
+ret = ioctl(fd, F2FS_IOC_COMPRESS_FILE);
+
+NVMe Zoned Namespace devices
+----------------------------
+
+- ZNS defines a per-zone capacity which can be equal or less than the
+  zone-size. Zone-capacity is the number of usable blocks in the zone.
+  F2FS checks if zone-capacity is less than zone-size, if it is, then any
+  segment which starts after the zone-capacity is marked as not-free in
+  the free segment bitmap at initial mount time. These segments are marked
+  as permanently used so they are not allocated for writes and
+  consequently are not needed to be garbage collected. In case the
+  zone-capacity is not aligned to default segment size(2MB), then a segment
+  can start before the zone-capacity and span across zone-capacity boundary.
+  Such spanning segments are also considered as usable segments. All blocks
+  past the zone-capacity are considered unusable in these segments.
diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
deleted file mode 100644
index 7e19913..0000000
--- a/Documentation/filesystems/f2fs.txt
+++ /dev/null
@@ -1,839 +0,0 @@
-================================================================================
-WHAT IS Flash-Friendly File System (F2FS)?
-================================================================================
-
-NAND flash memory-based storage devices, such as SSD, eMMC, and SD cards, have
-been equipped on a variety systems ranging from mobile to server systems. Since
-they are known to have different characteristics from the conventional rotating
-disks, a file system, an upper layer to the storage device, should adapt to the
-changes from the sketch in the design level.
-
-F2FS is a file system exploiting NAND flash memory-based storage devices, which
-is based on Log-structured File System (LFS). The design has been focused on
-addressing the fundamental issues in LFS, which are snowball effect of wandering
-tree and high cleaning overhead.
-
-Since a NAND flash memory-based storage device shows different characteristic
-according to its internal geometry or flash memory management scheme, namely FTL,
-F2FS and its tools support various parameters not only for configuring on-disk
-layout, but also for selecting allocation and cleaning algorithms.
-
-The following git tree provides the file system formatting tool (mkfs.f2fs),
-a consistency checking tool (fsck.f2fs), and a debugging tool (dump.f2fs).
->> git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs-tools.git
-
-For reporting bugs and sending patches, please use the following mailing list:
->> linux-f2fs-devel@lists.sourceforge.net
-
-================================================================================
-BACKGROUND AND DESIGN ISSUES
-================================================================================
-
-Log-structured File System (LFS)
---------------------------------
-"A log-structured file system writes all modifications to disk sequentially in
-a log-like structure, thereby speeding up  both file writing and crash recovery.
-The log is the only structure on disk; it contains indexing information so that
-files can be read back from the log efficiently. In order to maintain large free
-areas on disk for fast writing, we divide  the log into segments and use a
-segment cleaner to compress the live information from heavily fragmented
-segments." from Rosenblum, M. and Ousterhout, J. K., 1992, "The design and
-implementation of a log-structured file system", ACM Trans. Computer Systems
-10, 1, 26–52.
-
-Wandering Tree Problem
-----------------------
-In LFS, when a file data is updated and written to the end of log, its direct
-pointer block is updated due to the changed location. Then the indirect pointer
-block is also updated due to the direct pointer block update. In this manner,
-the upper index structures such as inode, inode map, and checkpoint block are
-also updated recursively. This problem is called as wandering tree problem [1],
-and in order to enhance the performance, it should eliminate or relax the update
-propagation as much as possible.
-
-[1] Bityutskiy, A. 2005. JFFS3 design issues. http://www.linux-mtd.infradead.org/
-
-Cleaning Overhead
------------------
-Since LFS is based on out-of-place writes, it produces so many obsolete blocks
-scattered across the whole storage. In order to serve new empty log space, it
-needs to reclaim these obsolete blocks seamlessly to users. This job is called
-as a cleaning process.
-
-The process consists of three operations as follows.
-1. A victim segment is selected through referencing segment usage table.
-2. It loads parent index structures of all the data in the victim identified by
-   segment summary blocks.
-3. It checks the cross-reference between the data and its parent index structure.
-4. It moves valid data selectively.
-
-This cleaning job may cause unexpected long delays, so the most important goal
-is to hide the latencies to users. And also definitely, it should reduce the
-amount of valid data to be moved, and move them quickly as well.
-
-================================================================================
-KEY FEATURES
-================================================================================
-
-Flash Awareness
----------------
-- Enlarge the random write area for better performance, but provide the high
-  spatial locality
-- Align FS data structures to the operational units in FTL as best efforts
-
-Wandering Tree Problem
-----------------------
-- Use a term, “node”, that represents inodes as well as various pointer blocks
-- Introduce Node Address Table (NAT) containing the locations of all the “node”
-  blocks; this will cut off the update propagation.
-
-Cleaning Overhead
------------------
-- Support a background cleaning process
-- Support greedy and cost-benefit algorithms for victim selection policies
-- Support multi-head logs for static/dynamic hot and cold data separation
-- Introduce adaptive logging for efficient block allocation
-
-================================================================================
-MOUNT OPTIONS
-================================================================================
-
-background_gc=%s       Turn on/off cleaning operations, namely garbage
-                       collection, triggered in background when I/O subsystem is
-                       idle. If background_gc=on, it will turn on the garbage
-                       collection and if background_gc=off, garbage collection
-                       will be turned off. If background_gc=sync, it will turn
-                       on synchronous garbage collection running in background.
-                       Default value for this option is on. So garbage
-                       collection is on by default.
-disable_roll_forward   Disable the roll-forward recovery routine
-norecovery             Disable the roll-forward recovery routine, mounted read-
-                       only (i.e., -o ro,disable_roll_forward)
-discard/nodiscard      Enable/disable real-time discard in f2fs, if discard is
-                       enabled, f2fs will issue discard/TRIM commands when a
-		       segment is cleaned.
-no_heap                Disable heap-style segment allocation which finds free
-                       segments for data from the beginning of main area, while
-		       for node from the end of main area.
-nouser_xattr           Disable Extended User Attributes. Note: xattr is enabled
-                       by default if CONFIG_F2FS_FS_XATTR is selected.
-noacl                  Disable POSIX Access Control List. Note: acl is enabled
-                       by default if CONFIG_F2FS_FS_POSIX_ACL is selected.
-active_logs=%u         Support configuring the number of active logs. In the
-                       current design, f2fs supports only 2, 4, and 6 logs.
-                       Default number is 6.
-disable_ext_identify   Disable the extension list configured by mkfs, so f2fs
-                       does not aware of cold files such as media files.
-inline_xattr           Enable the inline xattrs feature.
-noinline_xattr         Disable the inline xattrs feature.
-inline_xattr_size=%u   Support configuring inline xattr size, it depends on
-		       flexible inline xattr feature.
-inline_data            Enable the inline data feature: New created small(<~3.4k)
-                       files can be written into inode block.
-inline_dentry          Enable the inline dir feature: data in new created
-                       directory entries can be written into inode block. The
-                       space of inode block which is used to store inline
-                       dentries is limited to ~3.4k.
-noinline_dentry        Disable the inline dentry feature.
-flush_merge	       Merge concurrent cache_flush commands as much as possible
-                       to eliminate redundant command issues. If the underlying
-		       device handles the cache_flush command relatively slowly,
-		       recommend to enable this option.
-nobarrier              This option can be used if underlying storage guarantees
-                       its cached data should be written to the novolatile area.
-		       If this option is set, no cache_flush commands are issued
-		       but f2fs still guarantees the write ordering of all the
-		       data writes.
-fastboot               This option is used when a system wants to reduce mount
-                       time as much as possible, even though normal performance
-		       can be sacrificed.
-extent_cache           Enable an extent cache based on rb-tree, it can cache
-                       as many as extent which map between contiguous logical
-                       address and physical address per inode, resulting in
-                       increasing the cache hit ratio. Set by default.
-noextent_cache         Disable an extent cache based on rb-tree explicitly, see
-                       the above extent_cache mount option.
-noinline_data          Disable the inline data feature, inline data feature is
-                       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
-                       enabled with fault_injection option, fault type value
-                       is shown below, it supports single or combined type.
-                       Type_Name		Type_Value
-                       FAULT_KMALLOC		0x000000001
-                       FAULT_KVMALLOC		0x000000002
-                       FAULT_PAGE_ALLOC		0x000000004
-                       FAULT_PAGE_GET		0x000000008
-                       FAULT_ALLOC_BIO		0x000000010
-                       FAULT_ALLOC_NID		0x000000020
-                       FAULT_ORPHAN		0x000000040
-                       FAULT_BLOCK		0x000000080
-                       FAULT_DIR_DEPTH		0x000000100
-                       FAULT_EVICT_INODE	0x000000200
-                       FAULT_TRUNCATE		0x000000400
-                       FAULT_READ_IO		0x000000800
-                       FAULT_CHECKPOINT		0x000001000
-                       FAULT_DISCARD		0x000002000
-                       FAULT_WRITE_IO		0x000004000
-mode=%s                Control block allocation mode which supports "adaptive"
-                       and "lfs". In "lfs" mode, there should be no random
-                       writes towards main area.
-io_bits=%u             Set the bit size of write IO requests. It should be set
-                       with "mode=lfs".
-usrquota               Enable plain user disk quota accounting.
-grpquota               Enable plain group disk quota accounting.
-prjquota               Enable plain project quota accounting.
-usrjquota=<file>       Appoint specified file and type during mount, so that quota
-grpjquota=<file>       information can be properly updated during recovery flow,
-prjjquota=<file>       <quota file>: must be in root directory;
-jqfmt=<quota type>     <quota type>: [vfsold,vfsv0,vfsv1].
-offusrjquota           Turn off user journelled quota.
-offgrpjquota           Turn off group journelled quota.
-offprjjquota           Turn off project journelled quota.
-quota                  Enable plain user disk quota accounting.
-noquota                Disable all plain disk quota option.
-whint_mode=%s          Control which write hints are passed down to block
-                       layer. This supports "off", "user-based", and
-                       "fs-based".  In "off" mode (default), f2fs does not pass
-                       down hints. In "user-based" mode, f2fs tries to pass
-                       down hints given by users. And in "fs-based" mode, f2fs
-                       passes down hints with its policy.
-alloc_mode=%s          Adjust block allocation policy, which supports "reuse"
-                       and "default".
-fsync_mode=%s          Control the policy of fsync. Currently supports "posix",
-                       "strict", and "nobarrier". In "posix" mode, which is
-                       default, fsync will follow POSIX semantics and does a
-                       light operation to improve the filesystem performance.
-                       In "strict" mode, fsync will be heavy and behaves in line
-                       with xfs, ext4 and btrfs, where xfstest generic/342 will
-                       pass, but the performance will regress. "nobarrier" is
-                       based on "posix", but doesn't issue flush command for
-                       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[:%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
-================================================================================
-
-/sys/kernel/debug/f2fs/ contains information about all the partitions mounted as
-f2fs. Each file shows the whole f2fs information.
-
-/sys/kernel/debug/f2fs/status includes:
- - major file system information managed by f2fs currently
- - average SIT information about whole segments
- - current memory footprint consumed by f2fs.
-
-================================================================================
-SYSFS ENTRIES
-================================================================================
-
-Information about mounted f2fs file systems can be found in
-/sys/fs/f2fs.  Each mounted filesystem will have a directory in
-/sys/fs/f2fs based on its device name (i.e., /sys/fs/f2fs/sda).
-The files in each per-device directory are shown in table below.
-
-Files in /sys/fs/f2fs/<devname>
-(see also Documentation/ABI/testing/sysfs-fs-f2fs)
-..............................................................................
- File                         Content
-
- 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_max_sleep_time            This tuning parameter controls the maximum sleep
-                              time for the garbage collection thread. Time is
-                              in milliseconds.
-
- gc_no_gc_sleep_time          This tuning parameter controls the default sleep
-                              time for the garbage collection thread. Time is
-                              in milliseconds.
-
- gc_idle                      This parameter controls the selection of victim
-                              policy for garbage collection. Setting gc_idle = 0
-                              (default) will disable this option. Setting
-                              gc_idle = 1 will select the Cost Benefit approach
-                              & setting gc_idle = 2 will select the greedy approach.
-
- gc_urgent                    This parameter controls triggering background GCs
-                              urgently or not. Setting gc_urgent = 0 [default]
-                              makes back to default behavior, while if it is set
-                              to 1, background thread starts to do GC by given
-                              gc_urgent_sleep_time interval.
-
- 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
-			      in the proportion to the percentage over total
-			      volume size, f2fs tries to conduct checkpoint to
-			      reclaim the prefree segments to free segments.
-			      By default, 5% over total # of segments.
-
- 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.
-
- 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.
-
- ipu_policy                   This parameter controls the policy of in-place
-                              updates in f2fs. There are five policies:
-                               0x01: F2FS_IPU_FORCE, 0x02: F2FS_IPU_SSR,
-                               0x04: F2FS_IPU_UTIL,  0x08: F2FS_IPU_SSR_UTIL,
-                               0x10: F2FS_IPU_FSYNC.
-
- min_ipu_util                 This parameter controls the threshold to trigger
-                              in-place-updates. The number indicates percentage
-                              of the filesystem utilization, and used by
-                              F2FS_IPU_UTIL and F2FS_IPU_SSR_UTIL policies.
-
- min_fsync_blocks             This parameter controls the threshold to trigger
-                              in-place-updates when F2FS_IPU_FSYNC mode is set.
-			      The number indicates the number of dirty pages
-			      when fsync needs to flush on its call path. If
-			      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,
-			      10 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
-			      latency by increasing this dir_level value.
-			      Otherwise, it needs to decrease this value to
-			      reduce the space overhead. The default value is 0.
-
- 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
-================================================================================
-
-1. Download userland tools and compile them.
-
-2. Skip, if f2fs was compiled statically inside kernel.
-   Otherwise, insert the f2fs.ko module.
- # insmod f2fs.ko
-
-3. Create a directory trying to mount
- # mkdir /mnt/f2fs
-
-4. Format the block device, and then mount as f2fs
- # mkfs.f2fs -l label /dev/block_device
- # mount -t f2fs /dev/block_device /mnt/f2fs
-
-mkfs.f2fs
----------
-The mkfs.f2fs is for the use of formatting a partition as the f2fs filesystem,
-which builds a basic on-disk layout.
-
-The options consist of:
--l [label]   : Give a volume label, up to 512 unicode name.
--a [0 or 1]  : Split start location of each area for heap-based allocation.
-               1 is set by default, which performs this.
--o [int]     : Set overprovision ratio in percent over volume size.
-               5 is set by default.
--s [int]     : Set the number of segments per section.
-               1 is set by default.
--z [int]     : Set the number of sections per zone.
-               1 is set by default.
--e [str]     : Set basic extension list. e.g. "mp3,gif,mov"
--t [0 or 1]  : Disable discard command or not.
-               1 is set by default, which conducts discard.
-
-fsck.f2fs
----------
-The fsck.f2fs is a tool to check the consistency of an f2fs-formatted
-partition, which examines whether the filesystem metadata and user-made data
-are cross-referenced correctly or not.
-Note that, initial version of the tool does not fix any inconsistency.
-
-The options consist of:
-  -d debug level [default:0]
-
-dump.f2fs
----------
-The dump.f2fs shows the information of specific inode and dumps SSA and SIT to
-file. Each file is dump_ssa and dump_sit.
-
-The dump.f2fs is used to debug on-disk data structures of the f2fs filesystem.
-It shows on-disk inode information recognized by a given inode number, and is
-able to dump all the SSA and SIT entries into predefined files, ./dump_ssa and
-./dump_sit respectively.
-
-The options consist of:
-  -d debug level [default:0]
-  -i inode no (hex)
-  -s [SIT dump segno from #1~#2 (decimal), for all 0~-1]
-  -a [SSA dump segno from #1~#2 (decimal), for all 0~-1]
-
-Examples:
-# dump.f2fs -i [ino] /dev/sdx
-# dump.f2fs -s 0~-1 /dev/sdx (SIT dump)
-# dump.f2fs -a 0~-1 /dev/sdx (SSA dump)
-
-================================================================================
-DESIGN
-================================================================================
-
-On-disk Layout
---------------
-
-F2FS divides the whole volume into a number of segments, each of which is fixed
-to 2MB in size. A section is composed of consecutive segments, and a zone
-consists of a set of sections. By default, section and zone sizes are set to one
-segment size identically, but users can easily modify the sizes by mkfs.
-
-F2FS splits the entire volume into six areas, and all the areas except superblock
-consists of multiple segments as described below.
-
-                                            align with the zone size <-|
-                 |-> align with the segment size
-     _________________________________________________________________________
-    |            |            |   Segment   |    Node     |   Segment  |      |
-    | Superblock | Checkpoint |    Info.    |   Address   |   Summary  | Main |
-    |    (SB)    |   (CP)     | Table (SIT) | Table (NAT) | Area (SSA) |      |
-    |____________|_____2______|______N______|______N______|______N_____|__N___|
-                                                                       .      .
-                                                             .                .
-                                                 .                            .
-                                    ._________________________________________.
-                                    |_Segment_|_..._|_Segment_|_..._|_Segment_|
-                                    .           .
-                                    ._________._________
-                                    |_section_|__...__|_
-                                    .            .
-		                    .________.
-	                            |__zone__|
-
-- Superblock (SB)
- : It is located at the beginning of the partition, and there exist two copies
-   to avoid file system crash. It contains basic partition information and some
-   default parameters of f2fs.
-
-- Checkpoint (CP)
- : It contains file system information, bitmaps for valid NAT/SIT sets, orphan
-   inode lists, and summary entries of current active segments.
-
-- Segment Information Table (SIT)
- : It contains segment information such as valid block count and bitmap for the
-   validity of all the blocks.
-
-- Node Address Table (NAT)
- : It is composed of a block address table for all the node blocks stored in
-   Main area.
-
-- Segment Summary Area (SSA)
- : It contains summary entries which contains the owner information of all the
-   data and node blocks stored in Main area.
-
-- Main Area
- : It contains file and directory data including their indices.
-
-In order to avoid misalignment between file system and flash-based storage, F2FS
-aligns the start block address of CP with the segment size. Also, it aligns the
-start block address of Main area with the zone size by reserving some segments
-in SSA area.
-
-Reference the following survey for additional technical details.
-https://wiki.linaro.org/WorkingGroups/Kernel/Projects/FlashCardSurvey
-
-File System Metadata Structure
-------------------------------
-
-F2FS adopts the checkpointing scheme to maintain file system consistency. At
-mount time, F2FS first tries to find the last valid checkpoint data by scanning
-CP area. In order to reduce the scanning time, F2FS uses only two copies of CP.
-One of them always indicates the last valid data, which is called as shadow copy
-mechanism. In addition to CP, NAT and SIT also adopt the shadow copy mechanism.
-
-For file system consistency, each CP points to which NAT and SIT copies are
-valid, as shown as below.
-
-  +--------+----------+---------+
-  |   CP   |    SIT   |   NAT   |
-  +--------+----------+---------+
-  .         .          .          .
-  .            .              .              .
-  .               .                 .                 .
-  +-------+-------+--------+--------+--------+--------+
-  | CP #0 | CP #1 | SIT #0 | SIT #1 | NAT #0 | NAT #1 |
-  +-------+-------+--------+--------+--------+--------+
-     |             ^                          ^
-     |             |                          |
-     `----------------------------------------'
-
-Index Structure
----------------
-
-The key data structure to manage the data locations is a "node". Similar to
-traditional file structures, F2FS has three types of node: inode, direct node,
-indirect node. F2FS assigns 4KB to an inode block which contains 923 data block
-indices, two direct node pointers, two indirect node pointers, and one double
-indirect node pointer as described below. One direct node block contains 1018
-data blocks, and one indirect node block contains also 1018 node blocks. Thus,
-one inode block (i.e., a file) covers:
-
-  4KB * (923 + 2 * 1018 + 2 * 1018 * 1018 + 1018 * 1018 * 1018) := 3.94TB.
-
-   Inode block (4KB)
-     |- data (923)
-     |- direct node (2)
-     |          `- data (1018)
-     |- indirect node (2)
-     |            `- direct node (1018)
-     |                       `- data (1018)
-     `- double indirect node (1)
-                         `- indirect node (1018)
-			              `- direct node (1018)
-	                                         `- data (1018)
-
-Note that, all the node blocks are mapped by NAT which means the location of
-each node is translated by the NAT table. In the consideration of the wandering
-tree problem, F2FS is able to cut off the propagation of node updates caused by
-leaf data writes.
-
-Directory Structure
--------------------
-
-A directory entry occupies 11 bytes, which consists of the following attributes.
-
-- hash		hash value of the file name
-- ino		inode number
-- len		the length of file name
-- type		file type such as directory, symlink, etc
-
-A dentry block consists of 214 dentry slots and file names. Therein a bitmap is
-used to represent whether each dentry is valid or not. A dentry block occupies
-4KB with the following composition.
-
-  Dentry Block(4 K) = bitmap (27 bytes) + reserved (3 bytes) +
-	              dentries(11 * 214 bytes) + file name (8 * 214 bytes)
-
-                         [Bucket]
-             +--------------------------------+
-             |dentry block 1 | dentry block 2 |
-             +--------------------------------+
-             .               .
-       .                             .
-  .       [Dentry Block Structure: 4KB]       .
-  +--------+----------+----------+------------+
-  | bitmap | reserved | dentries | file names |
-  +--------+----------+----------+------------+
-  [Dentry Block: 4KB] .   .
-		 .               .
-            .                          .
-            +------+------+-----+------+
-            | hash | ino  | len | type |
-            +------+------+-----+------+
-            [Dentry Structure: 11 bytes]
-
-F2FS implements multi-level hash tables for directory structure. Each level has
-a hash table with dedicated number of hash buckets as shown below. Note that
-"A(2B)" means a bucket includes 2 data blocks.
-
-----------------------
-A : bucket
-B : block
-N : MAX_DIR_HASH_DEPTH
-----------------------
-
-level #0   | A(2B)
-           |
-level #1   | A(2B) - A(2B)
-           |
-level #2   | A(2B) - A(2B) - A(2B) - A(2B)
-     .     |   .       .       .       .
-level #N/2 | A(2B) - A(2B) - A(2B) - A(2B) - A(2B) - ... - A(2B)
-     .     |   .       .       .       .
-level #N   | A(4B) - A(4B) - A(4B) - A(4B) - A(4B) - ... - A(4B)
-
-The number of blocks and buckets are determined by,
-
-                            ,- 2, if n < MAX_DIR_HASH_DEPTH / 2,
-  # of blocks in level #n = |
-                            `- 4, Otherwise
-
-                             ,- 2^(n + dir_level),
-			     |        if n + dir_level < MAX_DIR_HASH_DEPTH / 2,
-  # of buckets in level #n = |
-                             `- 2^((MAX_DIR_HASH_DEPTH / 2) - 1),
-			              Otherwise
-
-When F2FS finds a file name in a directory, at first a hash value of the file
-name is calculated. Then, F2FS scans the hash table in level #0 to find the
-dentry consisting of the file name and its inode number. If not found, F2FS
-scans the next hash table in level #1. In this way, F2FS scans hash tables in
-each levels incrementally from 1 to N. In each levels F2FS needs to scan only
-one bucket determined by the following equation, which shows O(log(# of files))
-complexity.
-
-  bucket number to scan in level #n = (hash value) % (# of buckets in level #n)
-
-In the case of file creation, F2FS finds empty consecutive slots that cover the
-file name. F2FS searches the empty slots in the hash tables of whole levels from
-1 to N in the same way as the lookup operation.
-
-The following figure shows an example of two cases holding children.
-       --------------> Dir <--------------
-       |                                 |
-    child                             child
-
-    child - child                     [hole] - child
-
-    child - child - child             [hole] - [hole] - child
-
-   Case 1:                           Case 2:
-   Number of children = 6,           Number of children = 3,
-   File size = 7                     File size = 7
-
-Default Block Allocation
-------------------------
-
-At runtime, F2FS manages six active logs inside "Main" area: Hot/Warm/Cold node
-and Hot/Warm/Cold data.
-
-- Hot node	contains direct node blocks of directories.
-- Warm node	contains direct node blocks except hot node blocks.
-- Cold node	contains indirect node blocks
-- Hot data	contains dentry blocks
-- Warm data	contains data blocks except hot and cold data blocks
-- Cold data	contains multimedia data or migrated data blocks
-
-LFS has two schemes for free space management: threaded log and copy-and-compac-
-tion. The copy-and-compaction scheme which is known as cleaning, is well-suited
-for devices showing very good sequential write performance, since free segments
-are served all the time for writing new data. However, it suffers from cleaning
-overhead under high utilization. Contrarily, the threaded log scheme suffers
-from random writes, but no cleaning process is needed. F2FS adopts a hybrid
-scheme where the copy-and-compaction scheme is adopted by default, but the
-policy is dynamically changed to the threaded log scheme according to the file
-system status.
-
-In order to align F2FS with underlying flash-based storage, F2FS allocates a
-segment in a unit of section. F2FS expects that the section size would be the
-same as the unit size of garbage collection in FTL. Furthermore, with respect
-to the mapping granularity in FTL, F2FS allocates each section of the active
-logs from different zones as much as possible, since FTL can write the data in
-the active logs into one allocation unit according to its mapping granularity.
-
-Cleaning process
-----------------
-
-F2FS does cleaning both on demand and in the background. On-demand cleaning is
-triggered when there are not enough free segments to serve VFS calls. Background
-cleaner is operated by a kernel thread, and triggers the cleaning job when the
-system is idle.
-
-F2FS supports two victim selection policies: greedy and cost-benefit algorithms.
-In the greedy algorithm, F2FS selects a victim segment having the smallest number
-of valid blocks. In the cost-benefit algorithm, F2FS selects a victim segment
-according to the segment age and the number of valid blocks in order to address
-log block thrashing problem in the greedy algorithm. F2FS adopts the greedy
-algorithm for on-demand cleaner, while background cleaner adopts cost-benefit
-algorithm.
-
-In order to identify whether the data in the victim segment are valid or not,
-F2FS manages a bitmap. Each bit represents the validity of a block, and the
-bitmap is composed of a bit stream covering whole blocks in main area.
-
-Write-hint Policy
------------------
-
-1) whint_mode=off. F2FS only passes down WRITE_LIFE_NOT_SET.
-
-2) whint_mode=user-based. F2FS tries to pass down hints given by
-users.
-
-User                  F2FS                     Block
-----                  ----                     -----
-                      META                     WRITE_LIFE_NOT_SET
-                      HOT_NODE                 "
-                      WARM_NODE                "
-                      COLD_NODE                "
-*ioctl(COLD)          COLD_DATA                WRITE_LIFE_EXTREME
-*extension list       "                        "
-
--- buffered io
-WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
-WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
-WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
-WRITE_LIFE_NONE       "                        "
-WRITE_LIFE_MEDIUM     "                        "
-WRITE_LIFE_LONG       "                        "
-
--- direct io
-WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
-WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
-WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
-WRITE_LIFE_NONE       "                        WRITE_LIFE_NONE
-WRITE_LIFE_MEDIUM     "                        WRITE_LIFE_MEDIUM
-WRITE_LIFE_LONG       "                        WRITE_LIFE_LONG
-
-3) whint_mode=fs-based. F2FS passes down hints with its policy.
-
-User                  F2FS                     Block
-----                  ----                     -----
-                      META                     WRITE_LIFE_MEDIUM;
-                      HOT_NODE                 WRITE_LIFE_NOT_SET
-                      WARM_NODE                "
-                      COLD_NODE                WRITE_LIFE_NONE
-ioctl(COLD)           COLD_DATA                WRITE_LIFE_EXTREME
-extension list        "                        "
-
--- buffered io
-WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
-WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
-WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_LONG
-WRITE_LIFE_NONE       "                        "
-WRITE_LIFE_MEDIUM     "                        "
-WRITE_LIFE_LONG       "                        "
-
--- direct io
-WRITE_LIFE_EXTREME    COLD_DATA                WRITE_LIFE_EXTREME
-WRITE_LIFE_SHORT      HOT_DATA                 WRITE_LIFE_SHORT
-WRITE_LIFE_NOT_SET    WARM_DATA                WRITE_LIFE_NOT_SET
-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 8a0700a..70d90e3 100644
--- a/Documentation/filesystems/fscrypt.rst
+++ b/Documentation/filesystems/fscrypt.rst
@@ -234,8 +234,8 @@
 entropy from the master key.  HKDF is also standardized and widely
 used by other software, whereas the AES-128-ECB based KDF is ad-hoc.
 
-Per-file keys
--------------
+Per-file encryption keys
+------------------------
 
 Since each master key can protect many files, it is necessary to
 "tweak" the encryption of each file so that the same plaintext in two
@@ -256,13 +256,8 @@
 the master keys may be wrapped in userspace, e.g. as is done by the
 `fscrypt <https://github.com/google/fscrypt>`_ tool.
 
-Including the inode number in the IVs was considered.  However, it was
-rejected as it would have prevented ext4 filesystems from being
-resized, and by itself still wouldn't have been sufficient to prevent
-the same key from being directly reused for both XTS and CTS-CBC.
-
-DIRECT_KEY and per-mode keys
-----------------------------
+DIRECT_KEY policies
+-------------------
 
 The Adiantum encryption mode (see `Encryption modes and usage`_) is
 suitable for both contents and filenames encryption, and it accepts
@@ -273,9 +268,9 @@
 Therefore, to improve performance and save memory, for Adiantum a
 "direct key" configuration is supported.  When the user has enabled
 this by setting FSCRYPT_POLICY_FLAG_DIRECT_KEY in the fscrypt policy,
-per-file keys are not used.  Instead, whenever any data (contents or
-filenames) is encrypted, the file's 16-byte nonce is included in the
-IV.  Moreover:
+per-file encryption keys are not used.  Instead, whenever any data
+(contents or filenames) is encrypted, the file's 16-byte nonce is
+included in the IV.  Moreover:
 
 - For v1 encryption policies, the encryption is done directly with the
   master key.  Because of this, users **must not** use the same master
@@ -285,6 +280,35 @@
   key derived using the KDF.  Users may use the same master key for
   other v2 encryption policies.
 
+IV_INO_LBLK_64 policies
+-----------------------
+
+When FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 is set in the fscrypt policy,
+the encryption keys are derived from the master key, encryption mode
+number, and filesystem UUID.  This normally results in all files
+protected by the same master key sharing a single contents encryption
+key and a single filenames encryption key.  To still encrypt different
+files' data differently, inode numbers are included in the IVs.
+Consequently, shrinking the filesystem may not be allowed.
+
+This format is optimized for use with inline encryption hardware
+compliant with the UFS standard, which supports only 64 IV bits per
+I/O request and may have only a small number of keyslots.
+
+IV_INO_LBLK_32 policies
+-----------------------
+
+IV_INO_LBLK_32 policies work like IV_INO_LBLK_64, except that for
+IV_INO_LBLK_32, the inode number is hashed with SipHash-2-4 (where the
+SipHash key is derived from the master key) and added to the file
+logical block number mod 2^32 to produce a 32-bit IV.
+
+This format is optimized for use with inline encryption hardware
+compliant with the eMMC v5.2 standard, which supports only 32 IV bits
+per I/O request and may have only a small number of keyslots.  This
+format results in some level of IV reuse, so it should only be used
+when necessary due to hardware limitations.
+
 Key identifiers
 ---------------
 
@@ -292,6 +316,16 @@
 identifier" is also derived using the KDF.  This value is stored in
 the clear, since it is needed to reliably identify the key itself.
 
+Dirhash keys
+------------
+
+For directories that are indexed using a secret-keyed dirhash over the
+plaintext filenames, the KDF is also used to derive a 128-bit
+SipHash-2-4 key per directory in order to hash filenames.  This works
+just like deriving a per-file encryption key, except that a different
+KDF context is used.  Currently, only casefolded ("case-insensitive")
+encrypted directories use this style of hashing.
+
 Encryption modes and usage
 ==========================
 
@@ -308,17 +342,18 @@
 
 AES-128-CBC was added only for low-powered embedded devices with
 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.
+use AES-128-CBC, CONFIG_CRYPTO_ESSIV and 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
 wide-block mode, unlike XTS.  It can also eliminate the need to derive
-per-file keys.  However, it depends on the security of two primitives,
-XChaCha12 and AES-256, rather than just one.  See the paper
-"Adiantum: length-preserving encryption for entry-level processors"
-(https://eprint.iacr.org/2018/720.pdf) for more details.  To use
-Adiantum, CONFIG_CRYPTO_ADIANTUM must be enabled.  Also, fast
+per-file encryption keys.  However, it depends on the security of two
+primitives, XChaCha12 and AES-256, rather than just one.  See the
+paper "Adiantum: length-preserving encryption for entry-level
+processors" (https://eprint.iacr.org/2018/720.pdf) for more details.
+To use Adiantum, CONFIG_CRYPTO_ADIANTUM must be enabled.  Also, fast
 implementations of ChaCha and NHPoly1305 should be enabled, e.g.
 CONFIG_CRYPTO_CHACHA20_NEON and CONFIG_CRYPTO_NHPOLY1305_NEON for ARM.
 
@@ -341,10 +376,20 @@
   is encrypted with AES-256 where the AES-256 key is the SHA-256 hash
   of the file's data encryption key.
 
-- In the "direct key" configuration (FSCRYPT_POLICY_FLAG_DIRECT_KEY
-  set in the fscrypt_policy), the file's nonce is also appended to the
-  IV.  Currently this is only allowed with the Adiantum encryption
-  mode.
+- With `DIRECT_KEY policies`_, the file's nonce is appended to the IV.
+  Currently this is only allowed with the Adiantum encryption mode.
+
+- With `IV_INO_LBLK_64 policies`_, the logical block number is limited
+  to 32 bits and is placed in bits 0-31 of the IV.  The inode number
+  (which is also limited to 32 bits) is placed in bits 32-63.
+
+- With `IV_INO_LBLK_32 policies`_, the logical block number is limited
+  to 32 bits and is placed in bits 0-31 of the IV.  The inode number
+  is then hashed and added mod 2^32.
+
+Note that because file logical block numbers are included in the IVs,
+filesystems must enforce that blocks are never shifted around within
+encrypted files, e.g. via "collapse range" or "insert range".
 
 Filenames encryption
 --------------------
@@ -354,10 +399,10 @@
 filenames of up to 255 bytes, the same IV is used for every filename
 in a directory.
 
-However, each encrypted directory still uses a unique key; or
-alternatively (for the "direct key" configuration) has the file's
-nonce included in the IVs.  Thus, IV reuse is limited to within a
-single directory.
+However, each encrypted directory still uses a unique key, or
+alternatively has the file's nonce (for `DIRECT_KEY policies`_) or
+inode number (for `IV_INO_LBLK_64 policies`_) included in the IVs.
+Thus, IV reuse is limited to within a single directory.
 
 With CTS-CBC, the IV reuse means that when the plaintext filenames
 share a common prefix at least as long as the cipher block size (16
@@ -391,9 +436,9 @@
 
 The FS_IOC_SET_ENCRYPTION_POLICY ioctl sets an encryption policy on an
 empty directory or verifies that a directory or regular file already
-has the specified encryption policy.  It takes in a pointer to a
-:c:type:`struct fscrypt_policy_v1` or a :c:type:`struct
-fscrypt_policy_v2`, defined as follows::
+has the specified encryption policy.  It takes in a pointer to
+struct fscrypt_policy_v1 or struct fscrypt_policy_v2, defined as
+follows::
 
     #define FSCRYPT_POLICY_V1               0
     #define FSCRYPT_KEY_DESCRIPTOR_SIZE     8
@@ -419,11 +464,11 @@
 
 This structure must be initialized as follows:
 
-- ``version`` must be FSCRYPT_POLICY_V1 (0) if the struct is
-  :c:type:`fscrypt_policy_v1` or FSCRYPT_POLICY_V2 (2) if the struct
-  is :c:type:`fscrypt_policy_v2`.  (Note: we refer to the original
-  policy version as "v1", though its version code is really 0.)  For
-  new encrypted directories, use v2 policies.
+- ``version`` must be FSCRYPT_POLICY_V1 (0) if
+  struct fscrypt_policy_v1 is used or FSCRYPT_POLICY_V2 (2) if
+  struct fscrypt_policy_v2 is used. (Note: we refer to the original
+  policy version as "v1", though its version code is really 0.)
+  For new encrypted directories, use v2 policies.
 
 - ``contents_encryption_mode`` and ``filenames_encryption_mode`` must
   be set to constants from ``<linux/fscrypt.h>`` which identify the
@@ -431,12 +476,22 @@
   (1) for ``contents_encryption_mode`` and FSCRYPT_MODE_AES_256_CTS
   (4) for ``filenames_encryption_mode``.
 
-- ``flags`` must contain a value from ``<linux/fscrypt.h>`` which
-  identifies the amount of NUL-padding to use when encrypting
-  filenames.  If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32 (0x3).
-  Additionally, if the encryption modes are both
-  FSCRYPT_MODE_ADIANTUM, this can contain
-  FSCRYPT_POLICY_FLAG_DIRECT_KEY; see `DIRECT_KEY and per-mode keys`_.
+- ``flags`` contains optional flags from ``<linux/fscrypt.h>``:
+
+  - FSCRYPT_POLICY_FLAGS_PAD_*: The amount of NUL padding to use when
+    encrypting filenames.  If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32
+    (0x3).
+  - FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_.
+  - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64
+    policies`_.
+  - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32: See `IV_INO_LBLK_32
+    policies`_.
+
+  v1 encryption policies only support the PAD_* and DIRECT_KEY flags.
+  The other flags are only supported by v2 encryption policies.
+
+  The DIRECT_KEY, IV_INO_LBLK_64, and IV_INO_LBLK_32 flags are
+  mutually exclusive.
 
 - For v2 encryption policies, ``__reserved`` must be zeroed.
 
@@ -453,9 +508,9 @@
   replaced with ``master_key_identifier``, which is longer and cannot
   be arbitrarily chosen.  Instead, the key must first be added using
   `FS_IOC_ADD_ENCRYPTION_KEY`_.  Then, the ``key_spec.u.identifier``
-  the kernel returned in the :c:type:`struct fscrypt_add_key_arg` must
-  be used as the ``master_key_identifier`` in the :c:type:`struct
-  fscrypt_policy_v2`.
+  the kernel returned in the struct fscrypt_add_key_arg must
+  be used as the ``master_key_identifier`` in
+  struct fscrypt_policy_v2.
 
 If the file is not yet encrypted, then FS_IOC_SET_ENCRYPTION_POLICY
 verifies that the file is an empty directory.  If so, the specified
@@ -493,7 +548,9 @@
 - ``EEXIST``: the file is already encrypted with an encryption policy
   different from the one specified
 - ``EINVAL``: an invalid encryption policy was specified (invalid
-  version, mode(s), or flags; or reserved bits were set)
+  version, mode(s), or flags; or reserved bits were set); or a v1
+  encryption policy was specified but the directory has the casefold
+  flag enabled (casefolding is incompatible with v1 policies).
 - ``ENOKEY``: a v2 encryption policy was specified, but the key with
   the specified ``master_key_identifier`` has not been added, nor does
   the process have the CAP_FOWNER capability in the initial user
@@ -533,7 +590,7 @@
 The FS_IOC_GET_ENCRYPTION_POLICY_EX ioctl retrieves the encryption
 policy, if any, for a directory or regular file.  No additional
 permissions are required beyond the ability to open the file.  It
-takes in a pointer to a :c:type:`struct fscrypt_get_policy_ex_arg`,
+takes in a pointer to struct fscrypt_get_policy_ex_arg,
 defined as follows::
 
     struct fscrypt_get_policy_ex_arg {
@@ -580,9 +637,8 @@
 encryption policy, if any, for a directory or regular file.  However,
 unlike `FS_IOC_GET_ENCRYPTION_POLICY_EX`_,
 FS_IOC_GET_ENCRYPTION_POLICY only supports the original policy
-version.  It takes in a pointer directly to a :c:type:`struct
-fscrypt_policy_v1` rather than a :c:type:`struct
-fscrypt_get_policy_ex_arg`.
+version.  It takes in a pointer directly to struct fscrypt_policy_v1
+rather than struct fscrypt_get_policy_ex_arg.
 
 The error codes for FS_IOC_GET_ENCRYPTION_POLICY are the same as those
 for FS_IOC_GET_ENCRYPTION_POLICY_EX, except that
@@ -601,6 +657,17 @@
 FS_IOC_GET_ENCRYPTION_PWSALT is deprecated.  Instead, prefer to
 generate and manage any needed salt(s) in userspace.
 
+Getting a file's encryption nonce
+---------------------------------
+
+Since Linux v5.7, the ioctl FS_IOC_GET_ENCRYPTION_NONCE is supported.
+On encrypted files and directories it gets the inode's 16-byte nonce.
+On unencrypted files and directories, it fails with ENODATA.
+
+This ioctl can be useful for automated tests which verify that the
+encryption is being done correctly.  It is not needed for normal use
+of fscrypt.
+
 Adding keys
 -----------
 
@@ -612,13 +679,13 @@
 encrypted using that key appear "unlocked", i.e. in plaintext form.
 It can be executed on any file or directory on the target filesystem,
 but using the filesystem's root directory is recommended.  It takes in
-a pointer to a :c:type:`struct fscrypt_add_key_arg`, defined as
-follows::
+a pointer to struct fscrypt_add_key_arg, defined as follows::
 
     struct fscrypt_add_key_arg {
             struct fscrypt_key_specifier key_spec;
             __u32 raw_size;
-            __u32 __reserved[9];
+            __u32 key_id;
+            __u32 __reserved[8];
             __u8 raw[];
     };
 
@@ -635,17 +702,22 @@
             } u;
     };
 
-:c:type:`struct fscrypt_add_key_arg` must be zeroed, then initialized
+    struct fscrypt_provisioning_key_payload {
+            __u32 type;
+            __u32 __reserved;
+            __u8 raw[];
+    };
+
+struct fscrypt_add_key_arg must be zeroed, then initialized
 as follows:
 
 - If the key is being added for use by v1 encryption policies, then
   ``key_spec.type`` must contain FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR, and
   ``key_spec.u.descriptor`` must contain the descriptor of the key
   being added, corresponding to the value in the
-  ``master_key_descriptor`` field of :c:type:`struct
-  fscrypt_policy_v1`.  To add this type of key, the calling process
-  must have the CAP_SYS_ADMIN capability in the initial user
-  namespace.
+  ``master_key_descriptor`` field of struct fscrypt_policy_v1.
+  To add this type of key, the calling process must have the
+  CAP_SYS_ADMIN capability in the initial user namespace.
 
   Alternatively, if the key is being added for use by v2 encryption
   policies, then ``key_spec.type`` must contain
@@ -657,9 +729,27 @@
   ``Documentation/security/keys/core.rst``).
 
 - ``raw_size`` must be the size of the ``raw`` key provided, in bytes.
+  Alternatively, if ``key_id`` is nonzero, this field must be 0, since
+  in that case the size is implied by the specified Linux keyring key.
+
+- ``key_id`` is 0 if the raw key is given directly in the ``raw``
+  field.  Otherwise ``key_id`` is the ID of a Linux keyring key of
+  type "fscrypt-provisioning" whose payload is
+  struct fscrypt_provisioning_key_payload whose ``raw`` field contains
+  the raw key and whose ``type`` field matches ``key_spec.type``.
+  Since ``raw`` is variable-length, the total size of this key's
+  payload must be ``sizeof(struct fscrypt_provisioning_key_payload)``
+  plus the raw key size.  The process must have Search permission on
+  this key.
+
+  Most users should leave this 0 and specify the raw key directly.
+  The support for specifying a Linux keyring key is intended mainly to
+  allow re-adding keys after a filesystem is unmounted and re-mounted,
+  without having to store the raw keys in userspace memory.
 
 - ``raw`` is a variable-length field which must contain the actual
-  key, ``raw_size`` bytes long.
+  key, ``raw_size`` bytes long.  Alternatively, if ``key_id`` is
+  nonzero, then this field is unused.
 
 For v2 policy keys, the kernel keeps track of which user (identified
 by effective user ID) added the key, and only allows the key to be
@@ -681,11 +771,16 @@
 
 - ``EACCES``: FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR was specified, but the
   caller does not have the CAP_SYS_ADMIN capability in the initial
-  user namespace
+  user namespace; or the raw key was specified by Linux key ID but the
+  process lacks Search permission on the key.
 - ``EDQUOT``: the key quota for this user would be exceeded by adding
   the key
 - ``EINVAL``: invalid key size or key specifier type, or reserved bits
   were set
+- ``EKEYREJECTED``: the raw key was specified by Linux key ID, but the
+  key has the wrong type
+- ``ENOKEY``: the raw key was specified by Linux key ID, but no key
+  exists with that ID
 - ``ENOTTY``: this type of filesystem does not implement encryption
 - ``EOPNOTSUPP``: the kernel was not configured with encryption
   support for this filesystem, or the filesystem superblock has not
@@ -763,8 +858,8 @@
 encryption key from the filesystem, and possibly removes the key
 itself.  It can be executed on any file or directory on the target
 filesystem, but using the filesystem's root directory is recommended.
-It takes in a pointer to a :c:type:`struct fscrypt_remove_key_arg`,
-defined as follows::
+It takes in a pointer to struct fscrypt_remove_key_arg, defined
+as follows::
 
     struct fscrypt_remove_key_arg {
             struct fscrypt_key_specifier key_spec;
@@ -859,8 +954,8 @@
 The FS_IOC_GET_ENCRYPTION_KEY_STATUS ioctl retrieves the status of a
 master encryption key.  It can be executed on any file or directory on
 the target filesystem, but using the filesystem's root directory is
-recommended.  It takes in a pointer to a :c:type:`struct
-fscrypt_get_key_status_arg`, defined as follows::
+recommended.  It takes in a pointer to
+struct fscrypt_get_key_status_arg, defined as follows::
 
     struct fscrypt_get_key_status_arg {
             /* input */
@@ -1051,17 +1146,17 @@
 Encryption context
 ------------------
 
-An encryption policy is represented on-disk by a :c:type:`struct
-fscrypt_context_v1` or a :c:type:`struct fscrypt_context_v2`.  It is
-up to individual filesystems to decide where to store it, but normally
-it would be stored in a hidden extended attribute.  It should *not* be
+An encryption policy is represented on-disk by
+struct fscrypt_context_v1 or struct fscrypt_context_v2.  It is up to
+individual filesystems to decide where to store it, but normally it
+would be stored in a hidden extended attribute.  It should *not* be
 exposed by the xattr-related system calls such as getxattr() and
 setxattr() because of the special semantics of the encryption xattr.
 (In particular, there would be much confusion if an encryption policy
 were to be added to or removed from anything other than an empty
 directory.)  These structs are defined as follows::
 
-    #define FS_KEY_DERIVATION_NONCE_SIZE 16
+    #define FSCRYPT_FILE_NONCE_SIZE 16
 
     #define FSCRYPT_KEY_DESCRIPTOR_SIZE  8
     struct fscrypt_context_v1 {
@@ -1070,7 +1165,7 @@
             u8 filenames_encryption_mode;
             u8 flags;
             u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
-            u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+            u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
     };
 
     #define FSCRYPT_KEY_IDENTIFIER_SIZE  16
@@ -1081,15 +1176,15 @@
             u8 flags;
             u8 __reserved[4];
             u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
-            u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+            u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
     };
 
 The context structs contain the same information as the corresponding
 policy structs (see `Setting an encryption policy`_), except that the
 context structs also contain a nonce.  The nonce is randomly generated
 by the kernel and is used as KDF input or as a tweak to cause
-different files to be encrypted differently; see `Per-file keys`_ and
-`DIRECT_KEY and per-mode keys`_.
+different files to be encrypted differently; see `Per-file encryption
+keys`_ and `DIRECT_KEY policies`_.
 
 Data path changes
 -----------------
@@ -1107,6 +1202,18 @@
 buffers regardless of encryption.  Other filesystems, such as ext4 and
 F2FS, have to allocate bounce pages specially for encryption.
 
+Fscrypt is also able to use inline encryption hardware instead of the
+kernel crypto API for en/decryption of file contents.  When possible,
+and if directed to do so (by specifying the 'inlinecrypt' mount option
+for an ext4/F2FS filesystem), it adds encryption contexts to bios and
+uses blk-crypto to perform the en/decryption instead of making use of
+the above read/write path changes.  Of course, even if directed to
+make use of inline encryption, fscrypt will only be able to do so if
+either hardware inline encryption support is available for the
+selected encryption algorithm or CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK
+is selected.  If neither is the case, fscrypt will fall back to using
+the above mentioned read/write path changes for en/decryption.
+
 Filename hashing and encoding
 -----------------------------
 
@@ -1140,8 +1247,8 @@
 filesystem-specific hash(es) needed for directory lookups.  This
 allows the filesystem to still, with a high degree of confidence, map
 the filename given in ->lookup() back to a particular directory entry
-that was previously listed by readdir().  See :c:type:`struct
-fscrypt_digested_name` in the source for more details.
+that was previously listed by readdir().  See
+struct fscrypt_nokey_name in the source for more details.
 
 Note that the precise way that filenames are presented to userspace
 without the key is subject to change in the future.  It is only meant
@@ -1153,11 +1260,14 @@
 
 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
+group on the relevant filesystem(s).  One can also run the tests
+with the 'inlinecrypt' mount option to test the implementation for
+inline encryption support.  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
+    kvm-xfstests -c ext4,f2fs -g encrypt -m inlinecrypt
 
 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
@@ -1179,6 +1289,7 @@
 kvm-xfstests, use the "encrypt" filesystem configuration::
 
     kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
+    kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto -m inlinecrypt
 
 Because this runs many more tests than "-g encrypt" does, it takes
 much longer to run; so also consider using `gce-xfstests
@@ -1186,3 +1297,4 @@
 instead of kvm-xfstests::
 
     gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto
+    gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto -m inlinecrypt
diff --git a/Documentation/filesystems/fsverity.rst b/Documentation/filesystems/fsverity.rst
index 42a0b6d..8e73ac0 100644
--- a/Documentation/filesystems/fsverity.rst
+++ b/Documentation/filesystems/fsverity.rst
@@ -27,9 +27,9 @@
 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.
+the "fs-verity file digest", which is a hash that includes the Merkle
+tree 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
@@ -177,9 +177,10 @@
 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.
+The FS_IOC_MEASURE_VERITY ioctl retrieves the digest of a verity file.
+The fs-verity file digest is a cryptographic digest that identifies
+the file contents that are being enforced on reads; it is computed via
+a Merkle tree and is different from a traditional full-file digest.
 
 This ioctl takes in a pointer to a variable-length structure::
 
@@ -197,7 +198,7 @@
 follows:
 
 - ``digest_algorithm`` will be the hash algorithm used for the file
-  measurement.  It will match ``fsverity_enable_arg::hash_algorithm``.
+  digest.  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.
@@ -216,6 +217,82 @@
 - ``EOVERFLOW``: the digest is longer than the specified
   ``digest_size`` bytes.  Try providing a larger buffer.
 
+FS_IOC_READ_VERITY_METADATA
+---------------------------
+
+The FS_IOC_READ_VERITY_METADATA ioctl reads verity metadata from a
+verity file.  This ioctl is available since Linux v5.12.
+
+This ioctl allows writing a server program that takes a verity file
+and serves it to a client program, such that the client can do its own
+fs-verity compatible verification of the file.  This only makes sense
+if the client doesn't trust the server and if the server needs to
+provide the storage for the client.
+
+This is a fairly specialized use case, and most fs-verity users won't
+need this ioctl.
+
+This ioctl takes in a pointer to the following structure::
+
+   #define FS_VERITY_METADATA_TYPE_MERKLE_TREE     1
+   #define FS_VERITY_METADATA_TYPE_DESCRIPTOR      2
+   #define FS_VERITY_METADATA_TYPE_SIGNATURE       3
+
+   struct fsverity_read_metadata_arg {
+           __u64 metadata_type;
+           __u64 offset;
+           __u64 length;
+           __u64 buf_ptr;
+           __u64 __reserved;
+   };
+
+``metadata_type`` specifies the type of metadata to read:
+
+- ``FS_VERITY_METADATA_TYPE_MERKLE_TREE`` reads the blocks of the
+  Merkle tree.  The blocks are returned in order from the root level
+  to the leaf level.  Within each level, the blocks are returned in
+  the same order that their hashes are themselves hashed.
+  See `Merkle tree`_ for more information.
+
+- ``FS_VERITY_METADATA_TYPE_DESCRIPTOR`` reads the fs-verity
+  descriptor.  See `fs-verity descriptor`_.
+
+- ``FS_VERITY_METADATA_TYPE_SIGNATURE`` reads the signature which was
+  passed to FS_IOC_ENABLE_VERITY, if any.  See `Built-in signature
+  verification`_.
+
+The semantics are similar to those of ``pread()``.  ``offset``
+specifies the offset in bytes into the metadata item to read from, and
+``length`` specifies the maximum number of bytes to read from the
+metadata item.  ``buf_ptr`` is the pointer to the buffer to read into,
+cast to a 64-bit integer.  ``__reserved`` must be 0.  On success, the
+number of bytes read is returned.  0 is returned at the end of the
+metadata item.  The returned length may be less than ``length``, for
+example if the ioctl is interrupted.
+
+The metadata returned by FS_IOC_READ_VERITY_METADATA isn't guaranteed
+to be authenticated against the file digest that would be returned by
+`FS_IOC_MEASURE_VERITY`_, as the metadata is expected to be used to
+implement fs-verity compatible verification anyway (though absent a
+malicious disk, the metadata will indeed match).  E.g. to implement
+this ioctl, the filesystem is allowed to just read the Merkle tree
+blocks from disk without actually verifying the path to the root node.
+
+FS_IOC_READ_VERITY_METADATA can fail with the following errors:
+
+- ``EFAULT``: the caller provided inaccessible memory
+- ``EINTR``: the ioctl was interrupted before any data was read
+- ``EINVAL``: reserved fields were set, or ``offset + length``
+  overflowed
+- ``ENODATA``: the file is not a verity file, or
+  FS_VERITY_METADATA_TYPE_SIGNATURE was requested but the file doesn't
+  have a built-in signature
+- ``ENOTTY``: this type of filesystem does not implement fs-verity, or
+  this ioctl is not yet implemented on it
+- ``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`_.)
+
 FS_IOC_GETFLAGS
 ---------------
 
@@ -226,6 +303,14 @@
 The verity flag is not settable via FS_IOC_SETFLAGS.  You must use
 FS_IOC_ENABLE_VERITY instead, since parameters must be provided.
 
+statx
+-----
+
+Since Linux v5.5, the statx() system call sets STATX_ATTR_VERITY if
+the file has fs-verity enabled.  This can perform better than
+FS_IOC_GETFLAGS and FS_IOC_MEASURE_VERITY because it doesn't require
+opening the file, and opening verity files can be expensive.
+
 Accessing verity files
 ======================
 
@@ -249,25 +334,24 @@
   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`_.
+  file 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
-============================
+File digest 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.
+Merkle tree to produce the digest 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.
+compute fs-verity file digests itself, e.g. in order to sign files.
 
 .. _fsverity_merkle_tree:
 
@@ -317,26 +401,22 @@
 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::
+To solve this problem, the fs-verity file digest 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 */
+            __le32 __reserved_0x04; /* 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
 ===============================
 
@@ -351,20 +431,20 @@
    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.
+   detached signature in DER format of the file's fs-verity digest.
+   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.
+   file's actual digest 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).
+   correctly signed digest 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`_::
+fs-verity file digests must be signed in the following format, which
+is similar to the structure used by `FS_IOC_MEASURE_VERITY`_::
 
-    struct fsverity_signed_digest {
+    struct fsverity_formatted_digest {
             char magic[8];                  /* must be "FSVerity" */
             __le16 digest_algorithm;
             __le16 digest_size;
@@ -398,7 +478,7 @@
 ext4
 ----
 
-ext4 supports fs-verity since Linux TODO and e2fsprogs v1.45.2.
+ext4 supports fs-verity since Linux v5.4 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
@@ -413,8 +493,8 @@
 
 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.
+the ciphertext.  This is necessary in order to make the fs-verity file
+digest 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
@@ -434,7 +514,7 @@
 f2fs
 ----
 
-f2fs supports fs-verity since Linux TODO and f2fs-tools v1.11.0.
+f2fs supports fs-verity since Linux v5.4 and f2fs-tools v1.11.0.
 
 To create verity files on an f2fs filesystem, the filesystem must have
 been formatted with ``-O verity``.
@@ -584,8 +664,8 @@
 :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`_.
+    the authenticity of the "fs-verity file digest", which
+    incorporates 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?
diff --git a/Documentation/filesystems/incfs.rst b/Documentation/filesystems/incfs.rst
new file mode 100644
index 0000000..03ae39e
--- /dev/null
+++ b/Documentation/filesystems/incfs.rst
@@ -0,0 +1,82 @@
+.. SPDX-License-Identifier: GPL-2.0
+
+=================================================
+incfs: A stacked incremental filesystem for Linux
+=================================================
+
+/sys/fs interface
+=================
+
+Please update Documentation/ABI/testing/sys-fs-incfs if you update this
+section.
+
+incfs creates the following files in /sys/fs.
+
+Features
+--------
+
+/sys/fs/incremental-fs/features/corefs
+  Reads 'supported'. Always present.
+
+/sys/fs/incremental-fs/features/v2
+  Reads 'supported'. Present if all v2 features of incfs are supported. These
+  are:
+    fs-verity support
+    inotify support
+    ioclts:
+      INCFS_IOC_SET_READ_TIMEOUTS
+      INCFS_IOC_GET_READ_TIMEOUTS
+      INCFS_IOC_GET_BLOCK_COUNT
+      INCFS_IOC_CREATE_MAPPED_FILE
+    .incomplete folder
+    .blocks_written pseudo file
+    report_uid mount option
+
+/sys/fs/incremental-fs/features/zstd
+  Reads 'supported'. Present if zstd compression is supported for data blocks.
+
+Optional per mount
+------------------
+
+For each incfs mount, the mount option sysfs_name=[name] creates a /sys/fs
+node called:
+
+/sys/fs/incremental-fs/instances/[name]
+
+This will contain the following files:
+
+/sys/fs/incremental-fs/instances/[name]/reads_delayed_min
+  Returns a count of the number of reads that were delayed as a result of the
+  per UID read timeouts min time setting.
+
+/sys/fs/incremental-fs/instances/[name]/reads_delayed_min_us
+  Returns total delay time for all files since first mount as a result of the
+  per UID read timeouts min time setting.
+
+/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending
+  Returns a count of the number of reads that were delayed as a result of
+  waiting for a pending read.
+
+/sys/fs/incremental-fs/instances/[name]/reads_delayed_pending_us
+  Returns total delay time for all files since first mount as a result of
+  waiting for a pending read.
+
+/sys/fs/incremental-fs/instances/[name]/reads_failed_hash_verification
+  Returns number of reads that failed because of hash verification failures.
+
+/sys/fs/incremental-fs/instances/[name]/reads_failed_other
+  Returns number of reads that failed for reasons other than timing out or
+  hash failures.
+
+/sys/fs/incremental-fs/instances/[name]/reads_failed_timed_out
+  Returns number of reads that timed out.
+
+For reads_delayed_*** settings, note that a file can count for both
+reads_delayed_min and reads_delayed_pending if incfs first waits for a pending
+read then has to wait further for the min time. In that case, the time spent
+waiting is split between reads_delayed_pending_us, which is increased by the
+time spent waiting for the pending read, and reads_delayed_min_us, which is
+increased by the remainder of the time spent waiting.
+
+Reads that timed out are not added to the reads_delayed_pending or the
+reads_delayed_pending_us counters.
diff --git a/Documentation/filesystems/locking.rst b/Documentation/filesystems/locking.rst
index fc3a070..d479820 100644
--- a/Documentation/filesystems/locking.rst
+++ b/Documentation/filesystems/locking.rst
@@ -125,7 +125,7 @@
 	bool (*list)(struct dentry *dentry);
 	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, void *buffer,
-		   size_t size);
+		   size_t size, int flags);
 	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, const void *buffer,
 		   size_t size, int flags);
diff --git a/Documentation/filesystems/overlayfs.txt b/Documentation/filesystems/overlayfs.txt
index 845d689..c7ab389 100644
--- a/Documentation/filesystems/overlayfs.txt
+++ b/Documentation/filesystems/overlayfs.txt
@@ -102,6 +102,29 @@
 such as metadata and extended attributes are reported for the upper
 directory only.  These attributes of the lower directory are hidden.
 
+credentials
+-----------
+
+By default, all access to the upper, lower and work directories is the
+recorded mounter's MAC and DAC credentials.  The incoming accesses are
+checked against the caller's credentials.
+
+In the case where caller MAC or DAC credentials do not overlap, a
+use case available in older versions of the driver, the
+override_creds mount flag can be turned off and help when the use
+pattern has caller with legitimate credentials where the mounter
+does not.  Several unintended side effects will occur though.  The
+caller without certain key capabilities or lower privilege will not
+always be able to delete files or directories, create nodes, or
+search some restricted directories.  The ability to search and read
+a directory entry is spotty as a result of the cache mechanism not
+retesting the credentials because of the assumption, a privileged
+caller can fill cache, then a lower privilege can read the directory
+cache.  The uneven security model where cache, upperdir and workdir
+are opened at privilege, but accessed without creating a form of
+privilege escalation, should only be used with strict understanding
+of the side effects and of the security policies.
+
 whiteouts and opaque directories
 --------------------------------
 
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt
index 99ca040..27c79cf 100644
--- a/Documentation/filesystems/proc.txt
+++ b/Documentation/filesystems/proc.txt
@@ -415,6 +415,8 @@
  [stack]                  = the stack of the main process
  [vdso]                   = the "virtual dynamic shared object",
                             the kernel system call handler
+ [anon:<name>]            = an anonymous mapping that has been
+                            named by userspace
 
  or if empty, the mapping is anonymous.
 
@@ -447,6 +449,7 @@
 Locked:                0 kB
 THPeligible:           0
 VmFlags: rd ex mr mw me dw
+Name:           name from userspace
 
 The first of these lines shows the same information as is displayed for the
 mapping in /proc/PID/maps.  Following lines show the size of the mapping
@@ -526,6 +529,9 @@
 might change in future as well. So each consumer of these flags has to
 follow each specific kernel version for the exact semantic.
 
+The "Name" field will only be present on a mapping that has been named by
+userspace, and will show the name passed in by userspace.
+
 This file is only present if the CONFIG_MMU kernel configuration option is
 enabled.
 
@@ -1797,18 +1803,20 @@
 3.8	/proc/<pid>/fdinfo/<fd> - Information about opened file
 ---------------------------------------------------------------
 This file provides information associated with an opened file. The regular
-files have at least three fields -- 'pos', 'flags' and mnt_id. The 'pos'
-represents the current offset of the opened file in decimal form [see lseek(2)
-for details], 'flags' denotes the octal O_xxx mask the file has been
-created with [see open(2) for details] and 'mnt_id' represents mount ID of
-the file system containing the opened file [see 3.5 /proc/<pid>/mountinfo
-for details].
+files have at least four fields -- 'pos', 'flags', 'mnt_id' and 'ino'.
+The 'pos' represents the current offset of the opened file in decimal
+form [see lseek(2) for details], 'flags' denotes the octal O_xxx mask the
+file has been created with [see open(2) for details] and 'mnt_id' represents
+mount ID of the file system containing the opened file [see 3.5
+/proc/<pid>/mountinfo for details]. 'ino' represents the inode number of
+the file.
 
 A typical output is
 
 	pos:	0
 	flags:	0100002
 	mnt_id:	19
+	ino:	63107
 
 All locks associated with a file descriptor are shown in its fdinfo too.
 
@@ -1822,6 +1830,7 @@
 	pos:	0
 	flags:	04002
 	mnt_id:	9
+	ino:	63107
 	eventfd-count:	5a
 
 	where 'eventfd-count' is hex value of a counter.
@@ -1831,6 +1840,7 @@
 	pos:	0
 	flags:	04002
 	mnt_id:	9
+	ino:	63107
 	sigmask:	0000000000000200
 
 	where 'sigmask' is hex value of the signal mask associated
@@ -1841,6 +1851,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	tfd:        5 events:       1d data: ffffffffffffffff pos:0 ino:61af sdev:7
 
 	where 'tfd' is a target file descriptor number in decimal form,
@@ -1857,6 +1868,8 @@
 
 	pos:	0
 	flags:	02000000
+	mnt_id:	9
+	ino:	63107
 	inotify wd:3 ino:9e7e sdev:800013 mask:800afce ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:7e9e0000640d1b6d
 
 	where 'wd' is a watch descriptor in decimal form, ie a target file
@@ -1879,6 +1892,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	fanotify flags:10 event-flags:0
 	fanotify mnt_id:12 mflags:40 mask:38 ignored_mask:40000003
 	fanotify ino:4f969 sdev:800013 mflags:0 mask:3b ignored_mask:40000000 fhandle-bytes:8 fhandle-type:1 f_handle:69f90400c275b5b4
@@ -1901,6 +1915,7 @@
 	pos:	0
 	flags:	02
 	mnt_id:	9
+	ino:	63107
 	clockid: 0
 	ticks: 0
 	settime flags: 01
@@ -1915,6 +1930,22 @@
 	with TIMER_ABSTIME option which will be shown in 'settime flags', but 'it_value'
 	still exhibits timer's remaining time.
 
+DMA Buffer files
+~~~~~~~~~~~~~~~~
+
+::
+
+	pos:	0
+	flags:	04002
+	mnt_id:	9
+	ino:	63107
+	size:   32768
+	count:  2
+	exp_name:  system-heap
+
+where 'size' is the size of the DMA buffer in bytes. 'count' is the file count of
+the DMA buffer file. 'exp_name' is the name of the DMA buffer exporter.
+
 3.9	/proc/<pid>/map_files - Information about memory mapped files
 ---------------------------------------------------------------------
 This directory contains symbolic links which represent memory mapped files
diff --git a/Documentation/ioctl/ioctl-number.rst b/Documentation/ioctl/ioctl-number.rst
index bef79cd..4ef8643 100644
--- a/Documentation/ioctl/ioctl-number.rst
+++ b/Documentation/ioctl/ioctl-number.rst
@@ -233,6 +233,7 @@
 'f'   00-0F  fs/ext4/ext4.h                                          conflict!
 'f'   00-0F  linux/fs.h                                              conflict!
 'f'   00-0F  fs/ocfs2/ocfs2_fs.h                                     conflict!
+'f'   13-27  linux/fscrypt.h
 'f'   81-8F  linux/fsverity.h
 'g'   00-0F  linux/usb/gadgetfs.h
 'g'   20-2F  linux/usb/g_printer.h
diff --git a/Documentation/media/uapi/v4l/biblio.rst b/Documentation/media/uapi/v4l/biblio.rst
index ad2ff25..8095f57 100644
--- a/Documentation/media/uapi/v4l/biblio.rst
+++ b/Documentation/media/uapi/v4l/biblio.rst
@@ -131,6 +131,15 @@
 
 :author:    International Telecommunication Union (http://www.itu.ch)
 
+.. _hevc:
+
+ITU H.265/HEVC
+==============
+
+:title:     ITU-T Rec. H.265 | ISO/IEC 23008-2 "High Efficiency Video Coding"
+
+:author:    International Telecommunication Union (http://www.itu.ch), International Organisation for Standardisation (http://www.iso.ch)
+
 .. _jfif:
 
 JFIF
diff --git a/Documentation/media/uapi/v4l/buffer.rst b/Documentation/media/uapi/v4l/buffer.rst
index 1cbd9cde..9149b57 100644
--- a/Documentation/media/uapi/v4l/buffer.rst
+++ b/Documentation/media/uapi/v4l/buffer.rst
@@ -607,6 +607,19 @@
 	applications shall use this flag for output buffers if the data in
 	this buffer has not been created by the CPU but by some
 	DMA-capable unit, in which case caches have not been used.
+    * .. _`V4L2-BUF-FLAG-M2M-HOLD-CAPTURE-BUF`:
+
+      - ``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF``
+      - 0x00000200
+      - Only valid if ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF`` is
+	set. It is typically used with stateless decoders where multiple
+	output buffers each decode to a slice of the decoded frame.
+	Applications can set this flag when queueing the output buffer
+	to prevent the driver from dequeueing the capture buffer after
+	the output buffer has been decoded (i.e. the capture buffer is
+	'held'). If the timestamp of this output buffer differs from that
+	of the previous output buffer, then that indicates the start of a
+	new frame and the previously held capture buffer is dequeued.
     * .. _`V4L2-BUF-FLAG-LAST`:
 
       - ``V4L2_BUF_FLAG_LAST``
diff --git a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
index bc5dd8e..03a40fd 100644
--- a/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
+++ b/Documentation/media/uapi/v4l/ext-ctrls-codec.rst
@@ -756,6 +756,14 @@
       - Level 5.0
     * - ``V4L2_MPEG_VIDEO_H264_LEVEL_5_1``
       - Level 5.1
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_5_2``
+      - Level 5.2
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_0``
+      - Level 6.0
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_1``
+      - Level 6.1
+    * - ``V4L2_MPEG_VIDEO_H264_LEVEL_6_2``
+      - Level 6.2
 
 
 
@@ -868,6 +876,8 @@
       - Stereo High profile
     * - ``V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH``
       - Multiview High profile
+    * - ``V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH``
+      - Constrained High profile
 
 
 
diff --git a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
index 57f0066..f1a5048 100644
--- a/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
+++ b/Documentation/media/uapi/v4l/vidioc-decoder-cmd.rst
@@ -208,7 +208,15 @@
 	been started yet, the driver will return an ``EPERM`` error code. When
 	the decoder is already running, this command does nothing. No
 	flags are defined for this command.
-
+    * - ``V4L2_DEC_CMD_FLUSH``
+      - 4
+      - Flush any held capture buffers. Only valid for stateless decoders.
+	This command is typically used when the application reached the
+	end of the stream and the last output buffer had the
+	``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF`` flag set. This would prevent
+	dequeueing the capture buffer containing the last decoded frame.
+	So this command can be used to explicitly flush that final decoded
+	frame. This command does nothing if there are no held capture buffers.
 
 Return Value
 ============
diff --git a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
index a3d56ff..c0b59a5f 100644
--- a/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
+++ b/Documentation/media/uapi/v4l/vidioc-queryctrl.rst
@@ -473,6 +473,24 @@
       - n/a
       - A struct :c:type:`v4l2_ctrl_h264_decode_params`, containing H264
 	decode parameters for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_SPS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_sps`, containing HEVC Sequence
+	Parameter Set for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_PPS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_pps`, containing HEVC Picture
+	Parameter Set for stateless video decoders.
+    * - ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``
+      - n/a
+      - n/a
+      - n/a
+      - A struct :c:type:`v4l2_ctrl_hevc_slice_params`, containing HEVC
+	slice parameters for stateless video decoders.
 
 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
 
diff --git a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
index d7faef1..d0c643d 100644
--- a/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
+++ b/Documentation/media/uapi/v4l/vidioc-reqbufs.rst
@@ -125,6 +125,7 @@
 .. _V4L2-BUF-CAP-SUPPORTS-DMABUF:
 .. _V4L2-BUF-CAP-SUPPORTS-REQUESTS:
 .. _V4L2-BUF-CAP-SUPPORTS-ORPHANED-BUFS:
+.. _V4L2-BUF-CAP-SUPPORTS-M2M-HOLD-CAPTURE-BUF:
 
 .. cssclass:: longtable
 
@@ -150,6 +151,11 @@
       - The kernel allows calling :ref:`VIDIOC_REQBUFS` while buffers are still
         mapped or exported via DMABUF. These orphaned buffers will be freed
         when they are unmapped or when the exported DMABUF fds are closed.
+    * - ``V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF``
+      - 0x00000020
+      - Only valid for stateless decoders. If set, then userspace can set the
+        ``V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF`` flag to hold off on returning the
+	capture buffer until the OUTPUT timestamp changes.
 
 Return Value
 ============
diff --git a/Documentation/media/videodev2.h.rst.exceptions b/Documentation/media/videodev2.h.rst.exceptions
index adeb6b7..a79028e 100644
--- a/Documentation/media/videodev2.h.rst.exceptions
+++ b/Documentation/media/videodev2.h.rst.exceptions
@@ -434,6 +434,7 @@
 replace define V4L2_DEC_CMD_STOP decoder-cmds
 replace define V4L2_DEC_CMD_PAUSE decoder-cmds
 replace define V4L2_DEC_CMD_RESUME decoder-cmds
+replace define V4L2_DEC_CMD_FLUSH decoder-cmds
 
 replace define V4L2_DEC_CMD_START_MUTE_AUDIO decoder-cmds
 replace define V4L2_DEC_CMD_PAUSE_TO_BLACK decoder-cmds
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt
index 8af3771..e37f809 100644
--- a/Documentation/networking/ip-sysctl.txt
+++ b/Documentation/networking/ip-sysctl.txt
@@ -939,6 +939,19 @@
 
 	Default: Empty
 
+ip_local_unbindable_ports - list of comma separated ranges
+	Specify the ports which are not directly bind()able.
+
+	Usually you would use this to block the use of ports which
+	are invalid due to something outside of the control of the
+	kernel.  For example a port stolen by the nic for serial
+	console, remote power management or debugging.
+
+	There's a relatively high chance you will also want to list
+	these ports in 'ip_local_reserved_ports' to prevent autobinding.
+
+	Default: Empty
+
 ip_unprivileged_port_start - INTEGER
 	This is a per-namespace sysctl.  It defines the first
 	unprivileged port in the network namespace.  Privileged ports
diff --git a/Documentation/usb/index.rst b/Documentation/usb/index.rst
index e55386a..370d1e0 100644
--- a/Documentation/usb/index.rst
+++ b/Documentation/usb/index.rst
@@ -23,6 +23,7 @@
     mtouchusb
     ohci
     rio
+    raw-gadget
     usbip_protocol
     usbmon
     usb-serial
diff --git a/Documentation/usb/raw-gadget.rst b/Documentation/usb/raw-gadget.rst
new file mode 100644
index 0000000..68d879a
--- /dev/null
+++ b/Documentation/usb/raw-gadget.rst
@@ -0,0 +1,84 @@
+==============
+USB Raw Gadget
+==============
+
+USB Raw Gadget is a kernel module that provides a userspace interface for
+the USB Gadget subsystem. Essentially it allows to emulate USB devices
+from userspace. Enabled with CONFIG_USB_RAW_GADGET. Raw Gadget is
+currently a strictly debugging feature and shouldn't be used in
+production, use GadgetFS instead.
+
+Comparison to GadgetFS
+~~~~~~~~~~~~~~~~~~~~~~
+
+Raw Gadget is similar to GadgetFS, but provides a more low-level and
+direct access to the USB Gadget layer for the userspace. The key
+differences are:
+
+1. Every USB request is passed to the userspace to get a response, while
+   GadgetFS responds to some USB requests internally based on the provided
+   descriptors. However note, that the UDC driver might respond to some
+   requests on its own and never forward them to the Gadget layer.
+
+2. GadgetFS performs some sanity checks on the provided USB descriptors,
+   while Raw Gadget allows you to provide arbitrary data as responses to
+   USB requests.
+
+3. Raw Gadget provides a way to select a UDC device/driver to bind to,
+   while GadgetFS currently binds to the first available UDC.
+
+4. Raw Gadget explicitly exposes information about endpoints addresses and
+   capabilities allowing a user to write UDC-agnostic gadgets.
+
+5. Raw Gadget has ioctl-based interface instead of a filesystem-based one.
+
+Userspace interface
+~~~~~~~~~~~~~~~~~~~
+
+To create a Raw Gadget instance open /dev/raw-gadget. Multiple raw-gadget
+instances (bound to different UDCs) can be used at the same time. The
+interaction with the opened file happens through the ioctl() calls, see
+comments in include/uapi/linux/usb/raw_gadget.h for details.
+
+The typical usage of Raw Gadget looks like:
+
+1. Open Raw Gadget instance via /dev/raw-gadget.
+2. Initialize the instance via USB_RAW_IOCTL_INIT.
+3. Launch the instance with USB_RAW_IOCTL_RUN.
+4. In a loop issue USB_RAW_IOCTL_EVENT_FETCH calls to receive events from
+   Raw Gadget and react to those depending on what kind of USB device
+   needs to be emulated.
+
+Note, that some UDC drivers have fixed addresses assigned to endpoints, and
+therefore arbitrary endpoint addresses can't be used in the descriptors.
+Nevertheles, Raw Gadget provides a UDC-agnostic way to write USB gadgets.
+Once a USB_RAW_EVENT_CONNECT event is received via USB_RAW_IOCTL_EVENT_FETCH,
+the USB_RAW_IOCTL_EPS_INFO ioctl can be used to find out information about
+endpoints that the UDC driver has. Based on that information, the user must
+chose UDC endpoints that will be used for the gadget being emulated, and
+properly assign addresses in endpoint descriptors.
+
+You can find usage examples (along with a test suite) here:
+
+https://github.com/xairy/raw-gadget
+
+Internal details
+~~~~~~~~~~~~~~~~
+
+Currently every endpoint read/write ioctl submits a USB request and waits until
+its completion. This is the desired mode for coverage-guided fuzzing (as we'd
+like all USB request processing happen during the lifetime of a syscall),
+and must be kept in the implementation. (This might be slow for real world
+applications, thus the O_NONBLOCK improvement suggestion below.)
+
+Potential future improvements
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Report more events (suspend, resume, etc.) through USB_RAW_IOCTL_EVENT_FETCH.
+
+- Support O_NONBLOCK I/O.
+
+- Support USB 3 features (accept SS endpoint companion descriptor when
+  enabling endpoints; allow providing stream_id for bulk transfers).
+
+- Support ISO transfer features (expose frame_number for completed requests).
diff --git a/Kconfig b/Kconfig
index e10b3ee..745bc77 100644
--- a/Kconfig
+++ b/Kconfig
@@ -5,8 +5,6 @@
 #
 mainmenu "Linux/$(ARCH) $(KERNELVERSION) Kernel Configuration"
 
-comment "Compiler: $(CC_VERSION_TEXT)"
-
 source "scripts/Kconfig.include"
 
 source "init/Kconfig"
diff --git a/MAINTAINERS b/MAINTAINERS
index 1407008..cbfbb40 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2128,7 +2128,7 @@
 F:	drivers/phy/qualcomm/
 F:	drivers/power/*/msm*
 F:	drivers/reset/reset-qcom-*
-F:	drivers/scsi/ufs/ufs-qcom.*
+F:	drivers/scsi/ufs/ufs-qcom*
 F:	drivers/spi/spi-qup.c
 F:	drivers/spi/spi-geni-qcom.c
 F:	drivers/spi/spi-qcom-qspi.c
@@ -4940,6 +4940,24 @@
 F:	Documentation/driver-api/dma-buf.rst
 T:	git git://anongit.freedesktop.org/drm/drm-misc
 
+DMA-BUF HEAPS FRAMEWORK
+M:	Sumit Semwal <sumit.semwal@linaro.org>
+R:	Andrew F. Davis <afd@ti.com>
+R:	Benjamin Gaignard <benjamin.gaignard@linaro.org>
+R:	Liam Mark <lmark@codeaurora.org>
+R:	Laura Abbott <labbott@redhat.com>
+R:	Brian Starkey <Brian.Starkey@arm.com>
+R:	John Stultz <john.stultz@linaro.org>
+S:	Maintained
+L:	linux-media@vger.kernel.org
+L:	dri-devel@lists.freedesktop.org
+L:	linaro-mm-sig@lists.linaro.org (moderated for non-subscribers)
+F:	include/uapi/linux/dma-heap.h
+F:	include/linux/dma-heap.h
+F:	drivers/dma-buf/dma-heap.c
+F:	drivers/dma-buf/heaps/*
+T:	git git://anongit.freedesktop.org/drm/drm-misc
+
 DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
 M:	Vinod Koul <vkoul@kernel.org>
 L:	dmaengine@vger.kernel.org
@@ -7320,6 +7338,12 @@
 F:	include/linux/hid*
 F:	include/uapi/linux/hid*
 
+HID PLAYSTATION DRIVER
+M:	Roderick Colenbrander <roderick.colenbrander@sony.com>
+L:	linux-input@vger.kernel.org
+S:	Supported
+F:	drivers/hid/hid-playstation.c
+
 HID SENSOR HUB DRIVERS
 M:	Jiri Kosina <jikos@kernel.org>
 M:	Jonathan Cameron <jic23@kernel.org>
@@ -11508,6 +11532,12 @@
 F:	Documentation/scsi/NinjaSCSI.txt
 F:	drivers/scsi/nsp32*
 
+NINTENDO HID DRIVER
+M:	Daniel J. Ogorchock <djogorchock@gmail.com>
+L:	linux-input@vger.kernel.org
+S:	Maintained
+F:	drivers/hid/hid-nintendo*
+
 NIOS2 ARCHITECTURE
 M:	Ley Foon Tan <lftan@altera.com>
 L:	nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
@@ -13191,6 +13221,7 @@
 F:	drivers/firmware/efi/efi-pstore.c
 F:	drivers/acpi/apei/erst.c
 F:	Documentation/admin-guide/ramoops.rst
+F:	Documentation/admin-guide/pstore-blk.rst
 F:	Documentation/devicetree/bindings/reserved-memory/ramoops.txt
 K:	\b(pstore|ramoops)
 
@@ -14608,6 +14639,7 @@
 W:	https://github.com/SELinuxProject
 T:	git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/selinux.git
 S:	Supported
+F:	include/trace/events/avc.h
 F:	include/uapi/linux/selinux_netlink.h
 F:	security/selinux/
 F:	scripts/selinux/
@@ -15540,6 +15572,15 @@
 S:	Supported
 F:	drivers/net/ethernet/stmicro/stmmac/
 
+EXTRA BOOT CONFIG
+M:	Masami Hiramatsu <mhiramat@kernel.org>
+S:	Maintained
+F:	lib/bootconfig.c
+F:	fs/proc/bootconfig.c
+F:	include/linux/bootconfig.h
+F:	tools/bootconfig/*
+F:	Documentation/admin-guide/bootconfig.rst
+
 SUN3/3X
 M:	Sam Creasey <sammy@sammy.net>
 W:	http://sammy.net/sun3/
@@ -17584,6 +17625,14 @@
 S:	Maintained
 F:	drivers/gpio/gpio-ws16c48.c
 
+WIREGUARD SECURE NETWORK TUNNEL
+M:	Jason A. Donenfeld <Jason@zx2c4.com>
+S:	Maintained
+F:	drivers/net/wireguard/
+F:	tools/testing/selftests/wireguard/
+L:	wireguard@lists.zx2c4.com
+L:	netdev@vger.kernel.org
+
 WISTRON LAPTOP BUTTON DRIVER
 M:	Miloslav Trmac <mitr@volny.cz>
 S:	Maintained
diff --git a/Makefile b/Makefile
index cb9e6cd..92fb72b 100644
--- a/Makefile
+++ b/Makefile
@@ -789,11 +789,20 @@
 endif
 endif
 
-# Initialize all stack variables with a pattern, if desired.
-ifdef CONFIG_INIT_STACK_ALL
+# Initialize all stack variables with a 0xAA pattern.
+ifdef CONFIG_INIT_STACK_ALL_PATTERN
 KBUILD_CFLAGS	+= -ftrivial-auto-var-init=pattern
 endif
 
+# Initialize all stack variables with a zero value.
+ifdef CONFIG_INIT_STACK_ALL_ZERO
+# Future support for zero initialization is still being debated, see
+# https://bugs.llvm.org/show_bug.cgi?id=45497. These flags are subject to being
+# renamed or dropped.
+KBUILD_CFLAGS	+= -ftrivial-auto-var-init=zero
+KBUILD_CFLAGS	+= -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
+endif
+
 DEBUG_CFLAGS	:= $(call cc-option, -fno-var-tracking-assignments)
 
 ifdef CONFIG_DEBUG_INFO
@@ -864,6 +873,58 @@
 KBUILD_CFLAGS += $(call cc-option, -flive-patching=inline-clone)
 endif
 
+ifdef CONFIG_SHADOW_CALL_STACK
+CC_FLAGS_SCS	:= -fsanitize=shadow-call-stack
+KBUILD_CFLAGS	+= $(CC_FLAGS_SCS)
+export CC_FLAGS_SCS
+endif
+
+ifdef CONFIG_LTO_CLANG
+ifdef CONFIG_THINLTO
+CC_FLAGS_LTO_CLANG := -flto=thin $(call cc-option, -fsplit-lto-unit)
+KBUILD_LDFLAGS	+= --thinlto-cache-dir=.thinlto-cache
+else
+CC_FLAGS_LTO_CLANG := -flto
+endif
+CC_FLAGS_LTO_CLANG += -fvisibility=default
+
+# 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 += scripts/module-lto.lds
+endif
+
+ifdef CONFIG_LTO
+CC_FLAGS_LTO	:= $(CC_FLAGS_LTO_CLANG)
+KBUILD_CFLAGS	+= $(CC_FLAGS_LTO)
+export CC_FLAGS_LTO
+endif
+
+ifdef CONFIG_CFI_CLANG
+CC_FLAGS_CFI	:= -fsanitize=cfi \
+		   -fno-sanitize-cfi-canonical-jump-tables \
+		   -fno-sanitize-blacklist
+
+ifdef CONFIG_MODULES
+CC_FLAGS_CFI	+= -fsanitize-cfi-cross-dso
+endif
+
+ifdef CONFIG_CFI_PERMISSIVE
+CC_FLAGS_CFI	+= -fsanitize-recover=cfi \
+		   -fno-sanitize-trap=cfi
+else
+CC_FLAGS_CFI	+= -ftrap-function=__ubsan_handle_cfi_check_fail_abort
+endif
+
+# If LTO flags are filtered out, we must also filter out CFI.
+CC_FLAGS_LTO	+= $(CC_FLAGS_CFI)
+KBUILD_CFLAGS	+= $(CC_FLAGS_CFI)
+export CC_FLAGS_CFI
+endif
+
 # arch Makefile may override CC so keep this after arch Makefile is included
 NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
 
@@ -1022,7 +1083,8 @@
 
 ifdef CONFIG_STACK_VALIDATION
   has_libelf := $(call try-run,\
-		echo "int main() {}" | $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -xc -o /dev/null $(HOST_LIBELF_LIBS) -,1,0)
+                  echo "int main() {}" | \
+                  $(HOSTCC) $(KBUILD_HOSTCFLAGS) -xc -o /dev/null $(KBUILD_HOSTLDFLAGS) $(HOST_LIBELF_LIBS) -,1,0)
   ifeq ($(has_libelf),1)
     objtool_target := tools/objtool FORCE
   else
@@ -1085,9 +1147,12 @@
 
 autoksyms_h := $(if $(CONFIG_TRIM_UNUSED_KSYMS), include/generated/autoksyms.h)
 
+quiet_cmd_autoksyms_h = GEN     $@
+      cmd_autoksyms_h = mkdir -p $(dir $@); \
+			$(CONFIG_SHELL) $(srctree)/scripts/gen_autoksyms.sh $@
+
 $(autoksyms_h):
-	$(Q)mkdir -p $(dir $@)
-	$(Q)touch $@
+	$(call cmd,autoksyms_h)
 
 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
 
@@ -1106,7 +1171,8 @@
 $(sort $(vmlinux-deps)): descend ;
 
 filechk_kernel.release = \
-	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+	echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
+		$(srctree) $(BRANCH) $(KMI_GENERATION))"
 
 # Store (new) KERNELRELEASE string in include/config/kernel.release
 include/config/kernel.release: FORCE
@@ -1166,12 +1232,17 @@
 # needs to be updated, so this check is forced on all builds
 
 uts_len := 64
+ifneq (,$(BUILD_NUMBER))
+	UTS_RELEASE=$(KERNELRELEASE)-ab$(BUILD_NUMBER)
+else
+	UTS_RELEASE=$(KERNELRELEASE)
+endif
 define filechk_utsrelease.h
-	if [ `echo -n "$(KERNELRELEASE)" | wc -c ` -gt $(uts_len) ]; then \
-	  echo '"$(KERNELRELEASE)" exceeds $(uts_len) characters' >&2;    \
-	  exit 1;                                                         \
-	fi;                                                               \
-	echo \#define UTS_RELEASE \"$(KERNELRELEASE)\"
+	if [ `echo -n "$(UTS_RELEASE)" | wc -c ` -gt $(uts_len) ]; then \
+		echo '"$(UTS_RELEASE)" exceeds $(uts_len) characters' >&2;    \
+		exit 1;                                                       \
+	fi;                                                             \
+	echo \#define UTS_RELEASE \"$(UTS_RELEASE)\"
 endef
 
 define filechk_version.h
@@ -1756,7 +1827,8 @@
 		-o -name modules.builtin -o -name '.tmp_*.o.*' \
 		-o -name '*.c.[012]*.*' \
 		-o -name '*.ll' \
-		-o -name '*.gcno' \) -type f -print | xargs rm -f
+		-o -name '*.gcno' \
+		-o -name '*.*.symversions' \) -type f -print | xargs rm -f
 
 # Generate tags for editors
 # ---------------------------------------------------------------------------
@@ -1815,7 +1887,8 @@
 	$(PERL) $(srctree)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
 
 kernelrelease:
-	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
+	@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion \
+		$(srctree) $(BRANCH) $(KMI_GENERATION))"
 
 kernelversion:
 	@echo $(KERNELVERSION)
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 0000000..2b5ccce
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/OWNERS
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7012373
--- /dev/null
+++ b/README.md
@@ -0,0 +1,142 @@
+# How do I submit patches to Android Common Kernels
+
+1. BEST: Make all of your changes to upstream Linux. If appropriate, backport to the stable releases.
+   These patches will be merged automatically in the corresponding common kernels. If the patch is already
+   in upstream Linux, post a backport of the patch that conforms to the patch requirements below.
+
+2. LESS GOOD: Develop your patches out-of-tree (from an upstream Linux point-of-view). Unless these are
+   fixing an Android-specific bug, these are very unlikely to be accepted unless they have been
+   coordinated with kernel-team@android.com. If you want to proceed, post a patch that conforms to the
+   patch requirements below.
+
+# Common Kernel patch requirements
+
+- All patches must conform to the Linux kernel coding standards and pass `script/checkpatch.pl`
+- Patches shall not break gki_defconfig or allmodconfig builds for arm, arm64, x86, x86_64 architectures
+(see  https://source.android.com/setup/build/building-kernels)
+- If the patch is not merged from an upstream branch, the subject must be tagged with the type of patch:
+`UPSTREAM:`, `BACKPORT:`, `FROMGIT:`, `FROMLIST:`, or `ANDROID:`.
+- All patches must have a `Change-Id:` tag (see https://gerrit-review.googlesource.com/Documentation/user-changeid.html)
+- If an Android bug has been assigned, there must be a `Bug:` tag.
+- All patches must have a `Signed-off-by:` tag by the author and the submitter
+
+Additional requirements are listed below based on patch type
+
+## Requirements for backports from mainline Linux: `UPSTREAM:`, `BACKPORT:`
+
+- If the patch is a cherry-pick from Linux mainline with no changes at all
+    - tag the patch subject with `UPSTREAM:`.
+    - add upstream commit information with a `(cherry-picked from ...)` line
+    - Example:
+        - if the upstream commit message is
+```
+        important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+```
+        - then Joe Smith would upload the patch for the common kernel as
+```
+        UPSTREAM: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        (cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+- If the patch requires any changes from the upstream version, tag the patch with `BACKPORT:`
+instead of `UPSTREAM:`.
+    - use the same tags as `UPSTREAM:`
+    - add comments about the changes under the `(cherry-picked from ...)` line
+    - Example:
+```
+        BACKPORT: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        (cherry-picked from c31e73121f4c1ec41143423ac6ce3ce6dafdcec1)
+        [ Resolved minor conflict in drivers/foo/bar.c ]
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+## Requirements for other backports: `FROMGIT:`, `FROMLIST:`,
+
+- If the patch has been merged into an upstream maintainer tree, but has not yet
+been merged into Linux mainline
+    - tag the patch subject with `FROMGIT:`
+    - add info on where the patch came from as `(cherry picked from commit <sha1> <repo> <branch>)`. This
+must be a stable maintainer branch (not rebased, so don't use `linux-next` for example).
+    - if changes were required, use `BACKPORT: FROMGIT:`
+    - Example:
+        - if the commit message in the maintainer tree is
+```
+        important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+```
+        - then Joe Smith would upload the patch for the common kernel as
+```
+        FROMGIT: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        (cherry picked from commit 878a2fd9de10b03d11d2f622250285c7e63deace
+         https://git.kernel.org/pub/scm/linux/kernel/git/foo/bar.git test-branch)
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+
+- If the patch has been submitted to LKML, but not accepted into any maintainer tree
+    - tag the patch subject with `FROMLIST:`
+    - add a `Link:` tag with a link to the submittal on lore.kernel.org
+    - if changes were required, use `BACKPORT: FROMLIST:`
+    - Example:
+```
+        FROMLIST: important patch from upstream
+
+        This is the detailed description of the important patch
+
+        Signed-off-by: Fred Jones <fred.jones@foo.org>
+
+        Bug: 135791357
+        Link: https://lore.kernel.org/lkml/20190619171517.GA17557@someone.com/
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+## Requirements for Android-specific patches: `ANDROID:`
+
+- If the patch is fixing a bug to Android-specific code
+    - tag the patch subject with `ANDROID:`
+    - add a `Fixes:` tag that cites the patch with the bug
+    - Example:
+```
+        ANDROID: fix android-specific bug in foobar.c
+
+        This is the detailed description of the important fix
+
+        Fixes: 1234abcd2468 ("foobar: add cool feature")
+        Change-Id: I4caaaa566ea080fa148c5e768bb1a0b6f7201c01
+        Signed-off-by: Joe Smith <joe.smith@foo.org>
+```
+
+- If the patch is a new feature
+    - tag the patch subject with `ANDROID:`
+    - add a `Bug:` tag with the Android bug (required for android-specific features)
+
diff --git a/android/OWNERS b/android/OWNERS
new file mode 100644
index 0000000..15daab5
--- /dev/null
+++ b/android/OWNERS
@@ -0,0 +1,12 @@
+# If we ever add another OWNERS above this directory, it's likely to be
+# more permissive, so don't inherit from it
+set noparent
+adelva@google.com
+maennich@google.com
+saravanak@google.com
+sspatil@google.com
+tkjos@google.com
+willmcvicker@google.com
+# Downstream boards maintained directly in this manifest branch
+per-file abi_gki_aarch64_cuttlefish = adelva@google.com, rammuthiah@google.com
+per-file abi_gki_aarch64_goldfish = rkir@google.com
diff --git a/android/abi_gki_aarch64 b/android/abi_gki_aarch64
new file mode 100644
index 0000000..57914f29
--- /dev/null
+++ b/android/abi_gki_aarch64
@@ -0,0 +1,4 @@
+[abi_symbol_list]
+# commonly used symbols
+  module_layout
+  __put_task_struct
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
new file mode 100644
index 0000000..3ed25df
--- /dev/null
+++ b/android/abi_gki_aarch64.xml
@@ -0,0 +1,183377 @@
+<abi-corpus-group version='2.0' architecture='elf-arm-aarch64'>
+  <abi-corpus version='2.0' path='vmlinux' architecture='elf-arm-aarch64'>
+    <elf-function-symbols>
+      <elf-symbol name='I_BDEV' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23dd175'/>
+      <elf-symbol name='LZ4_decompress_safe_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15bed7a5'/>
+      <elf-symbol name='PDE_DATA' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3da3813e'/>
+      <elf-symbol name='__ClearPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66bae922'/>
+      <elf-symbol name='__SetPageMovable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2873c5ec'/>
+      <elf-symbol name='___pskb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd884a6e3'/>
+      <elf-symbol name='___ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d24c881'/>
+      <elf-symbol name='__alloc_disk_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x104c3faf'/>
+      <elf-symbol name='__alloc_pages_nodemask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x712a92a7'/>
+      <elf-symbol name='__alloc_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x949f7342'/>
+      <elf-symbol name='__alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa051d53f'/>
+      <elf-symbol name='__arch_clear_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55686530'/>
+      <elf-symbol name='__arch_copy_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf507de1'/>
+      <elf-symbol name='__arch_copy_in_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9957204'/>
+      <elf-symbol name='__arch_copy_to_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b2941b2'/>
+      <elf-symbol name='__arm_smccc_hvc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50f85302'/>
+      <elf-symbol name='__arm_smccc_smc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf93aae46'/>
+      <elf-symbol name='__bdevname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe569f4be'/>
+      <elf-symbol name='__bitmap_andnot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadfdfcef'/>
+      <elf-symbol name='__bitmap_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x922f45a6'/>
+      <elf-symbol name='__bitmap_or' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa084749a'/>
+      <elf-symbol name='__bitmap_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df119fa'/>
+      <elf-symbol name='__bitmap_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x615911d7'/>
+      <elf-symbol name='__bitmap_subset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd61eeee'/>
+      <elf-symbol name='__bitmap_weight' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c4d61f'/>
+      <elf-symbol name='__blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8961a706'/>
+      <elf-symbol name='__blockdev_direct_IO' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51c2f53d'/>
+      <elf-symbol name='__bread_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x395a9797'/>
+      <elf-symbol name='__breadahead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbbd5239'/>
+      <elf-symbol name='__brelse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87b192bb'/>
+      <elf-symbol name='__cfg80211_alloc_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefdfee5a'/>
+      <elf-symbol name='__cfg80211_alloc_reply_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x428d634b'/>
+      <elf-symbol name='__cfg80211_send_event_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x620abe4f'/>
+      <elf-symbol name='__cfi_slowpath' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cd90edd'/>
+      <elf-symbol name='__check_object_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88db9f48'/>
+      <elf-symbol name='__class_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c7692a7'/>
+      <elf-symbol name='__class_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77461ff5'/>
+      <elf-symbol name='__clk_determine_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91408e0e'/>
+      <elf-symbol name='__clk_get_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7635dd32'/>
+      <elf-symbol name='__clk_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc569d8ce'/>
+      <elf-symbol name='__clk_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6a4a872'/>
+      <elf-symbol name='__clk_mux_determine_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43962fce'/>
+      <elf-symbol name='__clk_mux_determine_rate_closest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb82558e4'/>
+      <elf-symbol name='__clocksource_register_scale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb10d44ed'/>
+      <elf-symbol name='__close_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71743be6'/>
+      <elf-symbol name='__compat_only_sysfs_link_entry_to_kobj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97069b9'/>
+      <elf-symbol name='__const_udelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeae3dfd6'/>
+      <elf-symbol name='__cpufreq_driver_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fd2cc84'/>
+      <elf-symbol name='__cpuhp_remove_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b399fed'/>
+      <elf-symbol name='__cpuhp_setup_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc45c395b'/>
+      <elf-symbol name='__cpuhp_setup_state_cpuslocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3627e21'/>
+      <elf-symbol name='__cpuhp_state_add_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b3390ef'/>
+      <elf-symbol name='__cpuhp_state_remove_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e9d4448'/>
+      <elf-symbol name='__crypto_memneq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a44f8cb'/>
+      <elf-symbol name='__crypto_xor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3f12f69'/>
+      <elf-symbol name='__dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53b63b6a'/>
+      <elf-symbol name='__dev_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35fcf75a'/>
+      <elf-symbol name='__dev_kfree_skb_any' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda665d6d'/>
+      <elf-symbol name='__dev_kfree_skb_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2e42184'/>
+      <elf-symbol name='__devm_iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73f26fa9'/>
+      <elf-symbol name='__devm_of_phy_provider_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd7efb91'/>
+      <elf-symbol name='__devm_regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db9566d'/>
+      <elf-symbol name='__devm_regmap_init_i2c' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb794200'/>
+      <elf-symbol name='__devm_regmap_init_mmio_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6acaeba2'/>
+      <elf-symbol name='__devm_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ca3e14b'/>
+      <elf-symbol name='__devm_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96e95b17'/>
+      <elf-symbol name='__devm_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a289926'/>
+      <elf-symbol name='__dma_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586a2bf2'/>
+      <elf-symbol name='__do_once_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4198ca95'/>
+      <elf-symbol name='__do_once_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18e60984'/>
+      <elf-symbol name='__drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4417384'/>
+      <elf-symbol name='__drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x777ddab0'/>
+      <elf-symbol name='__drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x796eb8d6'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf72066b2'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x710d56eb'/>
+      <elf-symbol name='__drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86caf2b4'/>
+      <elf-symbol name='__drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a52db4d'/>
+      <elf-symbol name='__drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x208c33f8'/>
+      <elf-symbol name='__drm_atomic_helper_private_obj_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bd44151'/>
+      <elf-symbol name='__drm_atomic_state_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9cad492'/>
+      <elf-symbol name='__drm_crtc_commit_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae277372'/>
+      <elf-symbol name='__drm_printfn_debug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf824c7db'/>
+      <elf-symbol name='__drm_printfn_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe317082a'/>
+      <elf-symbol name='__drm_printfn_seq_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeb953b1'/>
+      <elf-symbol name='__drm_puts_seq_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x513072fe'/>
+      <elf-symbol name='__dynamic_dev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe16a5d4b'/>
+      <elf-symbol name='__dynamic_netdev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f40df4e'/>
+      <elf-symbol name='__dynamic_pr_debug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x837b7b09'/>
+      <elf-symbol name='__ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x260a3ead'/>
+      <elf-symbol name='__find_get_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd19640c2'/>
+      <elf-symbol name='__free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91b20686'/>
+      <elf-symbol name='__genphy_config_aneg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed675992'/>
+      <elf-symbol name='__get_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5cb5ee'/>
+      <elf-symbol name='__get_task_comm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7185df7c'/>
+      <elf-symbol name='__getblk_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71a8f0f5'/>
+      <elf-symbol name='__hrtimer_get_remaining' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bcdbf43'/>
+      <elf-symbol name='__hvc_resize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd946ed7'/>
+      <elf-symbol name='__hw_addr_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf389fe60'/>
+      <elf-symbol name='__hw_addr_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x865029ac'/>
+      <elf-symbol name='__hw_addr_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e9110fa'/>
+      <elf-symbol name='__hwspin_lock_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68b34496'/>
+      <elf-symbol name='__hwspin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc77978d'/>
+      <elf-symbol name='__i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc7ac649'/>
+      <elf-symbol name='__ieee80211_schedule_txq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf993ab93'/>
+      <elf-symbol name='__iio_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0bf042b'/>
+      <elf-symbol name='__iio_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x556de5fc'/>
+      <elf-symbol name='__init_rwsem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9859fe0'/>
+      <elf-symbol name='__init_waitqueue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9a5ea54'/>
+      <elf-symbol name='__insert_inode_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a253207'/>
+      <elf-symbol name='__ion_device_add_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed5ccf2'/>
+      <elf-symbol name='__ioread32_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3801776b'/>
+      <elf-symbol name='__ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b4b2933'/>
+      <elf-symbol name='__iowrite32_copy' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x2dba276a'/>
+      <elf-symbol name='__ip_select_ident' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81d203c7'/>
+      <elf-symbol name='__ipv6_addr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd542439'/>
+      <elf-symbol name='__irq_alloc_descs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db075d0'/>
+      <elf-symbol name='__irq_alloc_domain_generic_chips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d6dd2'/>
+      <elf-symbol name='__irq_domain_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b265bd7'/>
+      <elf-symbol name='__kfifo_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x139f2189'/>
+      <elf-symbol name='__kfifo_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb760f52'/>
+      <elf-symbol name='__kfifo_from_user_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeebc7c4'/>
+      <elf-symbol name='__kfifo_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf23fcb99'/>
+      <elf-symbol name='__kfifo_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd462b55'/>
+      <elf-symbol name='__kfifo_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13d0adf7'/>
+      <elf-symbol name='__kfifo_to_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4578f528'/>
+      <elf-symbol name='__kfifo_to_user_r' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2484adc3'/>
+      <elf-symbol name='__kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb233a45'/>
+      <elf-symbol name='__kthread_init_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16c62329'/>
+      <elf-symbol name='__list_add_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68f31cbd'/>
+      <elf-symbol name='__list_del_entry_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1537255'/>
+      <elf-symbol name='__local_bh_enable_ip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3fce39'/>
+      <elf-symbol name='__lock_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1df29a87'/>
+      <elf-symbol name='__lock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e143c73'/>
+      <elf-symbol name='__mark_inode_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcedc3235'/>
+      <elf-symbol name='__mdiobus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b64aa8a'/>
+      <elf-symbol name='__media_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11c6eb49'/>
+      <elf-symbol name='__media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd952618'/>
+      <elf-symbol name='__memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d112304'/>
+      <elf-symbol name='__memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf77555cd'/>
+      <elf-symbol name='__memset_io' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18b48e28'/>
+      <elf-symbol name='__mmc_claim_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d4e9d6b'/>
+      <elf-symbol name='__mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf89ed524'/>
+      <elf-symbol name='__mmdrop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc182117e'/>
+      <elf-symbol name='__module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dcf43c1'/>
+      <elf-symbol name='__msecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f02188f'/>
+      <elf-symbol name='__mutex_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x977f511b'/>
+      <elf-symbol name='__napi_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d4d8be2'/>
+      <elf-symbol name='__napi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3dc800a'/>
+      <elf-symbol name='__ndelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf8c695a'/>
+      <elf-symbol name='__netdev_alloc_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdbd67d5'/>
+      <elf-symbol name='__netif_set_xps_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3823b1f'/>
+      <elf-symbol name='__netlink_dump_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafa0c203'/>
+      <elf-symbol name='__netlink_kernel_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88452026'/>
+      <elf-symbol name='__nla_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x984ce9bd'/>
+      <elf-symbol name='__nlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee719ad7'/>
+      <elf-symbol name='__of_reset_control_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28dfd368'/>
+      <elf-symbol name='__pci_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24532275'/>
+      <elf-symbol name='__platform_driver_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe7d15cb'/>
+      <elf-symbol name='__platform_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x983a29c0'/>
+      <elf-symbol name='__platform_register_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dc19c7a'/>
+      <elf-symbol name='__pm_relax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe04efd8f'/>
+      <elf-symbol name='__pm_runtime_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5605cdc0'/>
+      <elf-symbol name='__pm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd96f02e9'/>
+      <elf-symbol name='__pm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aca5e50'/>
+      <elf-symbol name='__pm_runtime_set_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4fbd427'/>
+      <elf-symbol name='__pm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8e97ede'/>
+      <elf-symbol name='__pm_runtime_use_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56c3ffcd'/>
+      <elf-symbol name='__pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7beb2966'/>
+      <elf-symbol name='__printk_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6128b5fc'/>
+      <elf-symbol name='__pskb_copy_fclone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb795a90'/>
+      <elf-symbol name='__pskb_pull_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56136a31'/>
+      <elf-symbol name='__put_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4ea2038'/>
+      <elf-symbol name='__put_net' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x169a7cab'/>
+      <elf-symbol name='__put_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x864b50d8'/>
+      <elf-symbol name='__put_task_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dafd8b3'/>
+      <elf-symbol name='__raw_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf932015f'/>
+      <elf-symbol name='__raw_v4_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf27664e9'/>
+      <elf-symbol name='__raw_v6_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44ad866a'/>
+      <elf-symbol name='__rcu_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d522714'/>
+      <elf-symbol name='__rcu_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2469810f'/>
+      <elf-symbol name='__refrigerator' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4482cdb'/>
+      <elf-symbol name='__register_binfmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa164cbb4'/>
+      <elf-symbol name='__register_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f62dbaa'/>
+      <elf-symbol name='__register_rpmsg_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb38cca97'/>
+      <elf-symbol name='__regmap_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e9e2d4f'/>
+      <elf-symbol name='__regmap_init_i2c' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe311146'/>
+      <elf-symbol name='__release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1848221d'/>
+      <elf-symbol name='__remove_inode_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa06bcc2c'/>
+      <elf-symbol name='__request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa24f23d8'/>
+      <elf-symbol name='__request_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d9ee2a0'/>
+      <elf-symbol name='__request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca39ba0'/>
+      <elf-symbol name='__rht_bucket_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0d156e9'/>
+      <elf-symbol name='__rtc_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc3c2eca'/>
+      <elf-symbol name='__scsi_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5e4eb27'/>
+      <elf-symbol name='__scsi_device_lookup_by_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f63cd0'/>
+      <elf-symbol name='__scsi_execute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95594983'/>
+      <elf-symbol name='__scsi_print_sense' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfba8bd67'/>
+      <elf-symbol name='__sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4c6d758'/>
+      <elf-symbol name='__sdhci_set_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73d68c50'/>
+      <elf-symbol name='__seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85673197'/>
+      <elf-symbol name='__serio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586d7338'/>
+      <elf-symbol name='__serio_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b59e06a'/>
+      <elf-symbol name='__sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd220def2'/>
+      <elf-symbol name='__sg_page_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c9ca58f'/>
+      <elf-symbol name='__sg_page_iter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccd4c999'/>
+      <elf-symbol name='__sk_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6799c627'/>
+      <elf-symbol name='__skb_ext_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1999cf1b'/>
+      <elf-symbol name='__skb_flow_dissect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x527961ca'/>
+      <elf-symbol name='__skb_get_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fc2cf86'/>
+      <elf-symbol name='__skb_gso_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79aee31'/>
+      <elf-symbol name='__skb_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe032aa7e'/>
+      <elf-symbol name='__sock_recv_ts_and_drops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd339b72'/>
+      <elf-symbol name='__sock_tx_timestamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x437a0d6d'/>
+      <elf-symbol name='__spi_alloc_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d88c792'/>
+      <elf-symbol name='__spi_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3304776'/>
+      <elf-symbol name='__splice_from_pipe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x566790b'/>
+      <elf-symbol name='__spmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda99dadb'/>
+      <elf-symbol name='__stack_chk_fail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0fdf6cb'/>
+      <elf-symbol name='__sw_hweight16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57674fd7'/>
+      <elf-symbol name='__sw_hweight32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74c134b9'/>
+      <elf-symbol name='__sw_hweight64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f46ced8'/>
+      <elf-symbol name='__sw_hweight8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc3fcbc9'/>
+      <elf-symbol name='__sync_dirty_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb412fba8'/>
+      <elf-symbol name='__sysfs_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x169938c1'/>
+      <elf-symbol name='__task_pid_nr_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f3d0879'/>
+      <elf-symbol name='__tasklet_hi_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47939e0d'/>
+      <elf-symbol name='__tasklet_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaef0ed'/>
+      <elf-symbol name='__trace_bprintk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa20d01ba'/>
+      <elf-symbol name='__trace_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d41e6f5'/>
+      <elf-symbol name='__tty_alloc_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e78073'/>
+      <elf-symbol name='__tty_insert_flip_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22fa4161'/>
+      <elf-symbol name='__ubsan_handle_cfi_check_fail_abort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf7a4c69'/>
+      <elf-symbol name='__udelay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e7d6bd0'/>
+      <elf-symbol name='__uio_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66d3c958'/>
+      <elf-symbol name='__unregister_chrdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bc3fbc0'/>
+      <elf-symbol name='__usb_get_extra_descriptor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd36760ef'/>
+      <elf-symbol name='__usecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1969a8e'/>
+      <elf-symbol name='__v4l2_ctrl_modify_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5444ed4'/>
+      <elf-symbol name='__v4l2_ctrl_s_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff90266'/>
+      <elf-symbol name='__video_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e6ddf04'/>
+      <elf-symbol name='__vmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcddf45c2'/>
+      <elf-symbol name='__wait_on_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ff6f412'/>
+      <elf-symbol name='__wake_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eeb2322'/>
+      <elf-symbol name='__wake_up_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2773c485'/>
+      <elf-symbol name='__warn_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56470118'/>
+      <elf-symbol name='__xa_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf40e7a73'/>
+      <elf-symbol name='__xfrm_state_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6d16b25'/>
+      <elf-symbol name='_atomic_dec_and_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf4fdd4d'/>
+      <elf-symbol name='_bcd2bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6936ffe'/>
+      <elf-symbol name='_bin2bcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80ca5026'/>
+      <elf-symbol name='_copy_from_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x506ab60b'/>
+      <elf-symbol name='_copy_from_iter_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2c2b079'/>
+      <elf-symbol name='_copy_to_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51133856'/>
+      <elf-symbol name='_dev_crit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e782b19'/>
+      <elf-symbol name='_dev_emerg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4185cd3b'/>
+      <elf-symbol name='_dev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe92c3701'/>
+      <elf-symbol name='_dev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c03d71e'/>
+      <elf-symbol name='_dev_notice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x512186f1'/>
+      <elf-symbol name='_dev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc13d7c22'/>
+      <elf-symbol name='_raw_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32ae5741'/>
+      <elf-symbol name='_raw_read_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x150e3657'/>
+      <elf-symbol name='_raw_read_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8595510'/>
+      <elf-symbol name='_raw_read_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x736b5662'/>
+      <elf-symbol name='_raw_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef2993f4'/>
+      <elf-symbol name='_raw_read_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad10eb8'/>
+      <elf-symbol name='_raw_read_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8f375c1'/>
+      <elf-symbol name='_raw_read_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa16c8613'/>
+      <elf-symbol name='_raw_spin_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbf17652'/>
+      <elf-symbol name='_raw_spin_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3635b01'/>
+      <elf-symbol name='_raw_spin_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47941711'/>
+      <elf-symbol name='_raw_spin_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51760917'/>
+      <elf-symbol name='_raw_spin_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3253ec'/>
+      <elf-symbol name='_raw_spin_trylock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x963dcba1'/>
+      <elf-symbol name='_raw_spin_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x301fa007'/>
+      <elf-symbol name='_raw_spin_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49c41a57'/>
+      <elf-symbol name='_raw_spin_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5664491'/>
+      <elf-symbol name='_raw_spin_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3812050a'/>
+      <elf-symbol name='_raw_write_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a245f6d'/>
+      <elf-symbol name='_raw_write_lock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1ed698d'/>
+      <elf-symbol name='_raw_write_lock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eab8d85'/>
+      <elf-symbol name='_raw_write_lock_irqsave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe25ee9d3'/>
+      <elf-symbol name='_raw_write_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8c318e2'/>
+      <elf-symbol name='_raw_write_unlock_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ad29bab'/>
+      <elf-symbol name='_raw_write_unlock_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ccd378a'/>
+      <elf-symbol name='_raw_write_unlock_irqrestore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c1b9f8e'/>
+      <elf-symbol name='_snd_ctl_add_slave' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d98b481'/>
+      <elf-symbol name='ack_all_badblocks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49717f83'/>
+      <elf-symbol name='add_device_randomness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fb6de5d'/>
+      <elf-symbol name='add_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65744673'/>
+      <elf-symbol name='add_timer_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa83a512'/>
+      <elf-symbol name='add_to_page_cache_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ce66200'/>
+      <elf-symbol name='add_uevent_var' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x719e0e44'/>
+      <elf-symbol name='add_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4afb2238'/>
+      <elf-symbol name='addrconf_prefix_rcv_add_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10f3701c'/>
+      <elf-symbol name='adjust_managed_page_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4790683b'/>
+      <elf-symbol name='aes_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77e9eb37'/>
+      <elf-symbol name='aes_expandkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x558b281d'/>
+      <elf-symbol name='alarm_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54705c5b'/>
+      <elf-symbol name='alarm_expires_remaining' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb03aa936'/>
+      <elf-symbol name='alarm_forward' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc34e7'/>
+      <elf-symbol name='alarm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95a71c53'/>
+      <elf-symbol name='alarm_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x112ddc66'/>
+      <elf-symbol name='alarm_start_relative' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x158e5b50'/>
+      <elf-symbol name='alarmtimer_get_rtcdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7662aa63'/>
+      <elf-symbol name='all_vm_events' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7278d328'/>
+      <elf-symbol name='alloc_anon_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d373337'/>
+      <elf-symbol name='alloc_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3ec2f2b'/>
+      <elf-symbol name='alloc_etherdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94c9e526'/>
+      <elf-symbol name='alloc_io_pgtable_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1086e0e'/>
+      <elf-symbol name='alloc_netdev_mqs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98d679c0'/>
+      <elf-symbol name='alloc_page_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61a6d81b'/>
+      <elf-symbol name='alloc_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fc72f0e'/>
+      <elf-symbol name='alloc_skb_with_frags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7473612b'/>
+      <elf-symbol name='alloc_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf9208c0'/>
+      <elf-symbol name='amba_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71b61543'/>
+      <elf-symbol name='amba_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5c4c57'/>
+      <elf-symbol name='amba_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe661f216'/>
+      <elf-symbol name='amba_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2acffb7a'/>
+      <elf-symbol name='anon_inode_getfd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfe03918'/>
+      <elf-symbol name='anon_inode_getfile' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5984e3bc'/>
+      <elf-symbol name='arc4_crypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd47fcc4'/>
+      <elf-symbol name='arc4_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bb32ad1'/>
+      <elf-symbol name='arch_bpf_jit_check_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0f931f0'/>
+      <elf-symbol name='arch_set_freq_scale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16128ed2'/>
+      <elf-symbol name='arch_setup_dma_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33db6581'/>
+      <elf-symbol name='async_schedule_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5f370e0'/>
+      <elf-symbol name='atomic_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3752c27'/>
+      <elf-symbol name='atomic_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b9997fb'/>
+      <elf-symbol name='atomic_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7181db30'/>
+      <elf-symbol name='autoremove_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad73041f'/>
+      <elf-symbol name='backlight_device_get_by_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cefc57c'/>
+      <elf-symbol name='backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x888bf9a4'/>
+      <elf-symbol name='backlight_device_set_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9a91497'/>
+      <elf-symbol name='backlight_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ab5f5e1'/>
+      <elf-symbol name='badblocks_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd41898d7'/>
+      <elf-symbol name='badblocks_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d979a0c'/>
+      <elf-symbol name='badblocks_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad1b1b30'/>
+      <elf-symbol name='badblocks_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82c0e94d'/>
+      <elf-symbol name='badblocks_show' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ed780b7'/>
+      <elf-symbol name='badblocks_store' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x393fa9f5'/>
+      <elf-symbol name='balloon_page_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1dcf987'/>
+      <elf-symbol name='balloon_page_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54184478'/>
+      <elf-symbol name='balloon_page_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4be9eaf7'/>
+      <elf-symbol name='bcmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x263c3152'/>
+      <elf-symbol name='bd_link_disk_holder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bef86d2'/>
+      <elf-symbol name='bd_unlink_disk_holder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x333146c1'/>
+      <elf-symbol name='bdev_read_only' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e492906'/>
+      <elf-symbol name='bdevname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70482b6'/>
+      <elf-symbol name='bdget_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e4cd3b2'/>
+      <elf-symbol name='bdgrab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec2f354d'/>
+      <elf-symbol name='bdput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafd1a7a9'/>
+      <elf-symbol name='bin2hex' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd45cc6ca'/>
+      <elf-symbol name='bio_add_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed7ca793'/>
+      <elf-symbol name='bio_alloc_bioset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf91fd114'/>
+      <elf-symbol name='bio_associate_blkg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa95a8e4f'/>
+      <elf-symbol name='bio_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfc49bd8'/>
+      <elf-symbol name='bio_clone_blkg_association' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe30e8150'/>
+      <elf-symbol name='bio_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x965d210'/>
+      <elf-symbol name='bio_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2344fdff'/>
+      <elf-symbol name='bio_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4d1030a'/>
+      <elf-symbol name='bioset_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60de266b'/>
+      <elf-symbol name='bioset_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6efa0a8'/>
+      <elf-symbol name='bit_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16e297c3'/>
+      <elf-symbol name='bitmap_find_next_zero_area_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64127b67'/>
+      <elf-symbol name='bitmap_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca21ebd3'/>
+      <elf-symbol name='bitmap_parselist' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b015d25'/>
+      <elf-symbol name='bitmap_print_to_pagebuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf474c21c'/>
+      <elf-symbol name='bitmap_zalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2688ec10'/>
+      <elf-symbol name='blk_alloc_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53d3475c'/>
+      <elf-symbol name='blk_cleanup_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x522659fd'/>
+      <elf-symbol name='blk_execute_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ca4e3a9'/>
+      <elf-symbol name='blk_execute_rq_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed38a52'/>
+      <elf-symbol name='blk_finish_plug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2215f74'/>
+      <elf-symbol name='blk_freeze_queue_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe37a9578'/>
+      <elf-symbol name='blk_get_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed94442a'/>
+      <elf-symbol name='blk_get_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c2809d'/>
+      <elf-symbol name='blk_lookup_devt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2af650c'/>
+      <elf-symbol name='blk_mq_alloc_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ee33f7e'/>
+      <elf-symbol name='blk_mq_alloc_request_hctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba5db502'/>
+      <elf-symbol name='blk_mq_alloc_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1b946d5'/>
+      <elf-symbol name='blk_mq_complete_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x736d8767'/>
+      <elf-symbol name='blk_mq_delay_kick_requeue_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb046c82a'/>
+      <elf-symbol name='blk_mq_end_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9494f7ef'/>
+      <elf-symbol name='blk_mq_free_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4ea4b16'/>
+      <elf-symbol name='blk_mq_free_tag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0afc48'/>
+      <elf-symbol name='blk_mq_freeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cedde3e'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa67779c'/>
+      <elf-symbol name='blk_mq_freeze_queue_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f7363ea'/>
+      <elf-symbol name='blk_mq_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89b277cc'/>
+      <elf-symbol name='blk_mq_init_sq_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff732519'/>
+      <elf-symbol name='blk_mq_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d4d7b79'/>
+      <elf-symbol name='blk_mq_pci_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f2060e'/>
+      <elf-symbol name='blk_mq_quiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33e7cf68'/>
+      <elf-symbol name='blk_mq_request_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c2e81ba'/>
+      <elf-symbol name='blk_mq_requeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b8a1abb'/>
+      <elf-symbol name='blk_mq_run_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0523d25'/>
+      <elf-symbol name='blk_mq_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc30d0944'/>
+      <elf-symbol name='blk_mq_start_stopped_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1f86fff'/>
+      <elf-symbol name='blk_mq_stop_hw_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c85aed2'/>
+      <elf-symbol name='blk_mq_tag_to_rq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1863e4c3'/>
+      <elf-symbol name='blk_mq_tagset_busy_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe772d3c3'/>
+      <elf-symbol name='blk_mq_tagset_wait_completed_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fdfe3f6'/>
+      <elf-symbol name='blk_mq_unfreeze_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c4b4770'/>
+      <elf-symbol name='blk_mq_unique_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52e213e9'/>
+      <elf-symbol name='blk_mq_unquiesce_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2730566'/>
+      <elf-symbol name='blk_mq_update_nr_hw_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31947f53'/>
+      <elf-symbol name='blk_mq_virtio_map_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a68170e'/>
+      <elf-symbol name='blk_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa75ea9fe'/>
+      <elf-symbol name='blk_put_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf513f03b'/>
+      <elf-symbol name='blk_put_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb8199dc'/>
+      <elf-symbol name='blk_queue_alignment_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf5570f3'/>
+      <elf-symbol name='blk_queue_bounce_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba59e7e7'/>
+      <elf-symbol name='blk_queue_can_use_dma_map_merging' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84fbe890'/>
+      <elf-symbol name='blk_queue_chunk_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3da9426'/>
+      <elf-symbol name='blk_queue_flag_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aafd1e4'/>
+      <elf-symbol name='blk_queue_flag_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22a1a019'/>
+      <elf-symbol name='blk_queue_flag_test_and_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99ef04'/>
+      <elf-symbol name='blk_queue_io_min' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf23b271'/>
+      <elf-symbol name='blk_queue_io_opt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x824a1ad'/>
+      <elf-symbol name='blk_queue_logical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc97b523f'/>
+      <elf-symbol name='blk_queue_make_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a4290f'/>
+      <elf-symbol name='blk_queue_max_discard_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81923953'/>
+      <elf-symbol name='blk_queue_max_discard_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac4c86b7'/>
+      <elf-symbol name='blk_queue_max_hw_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa10f7084'/>
+      <elf-symbol name='blk_queue_max_segment_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2334be1'/>
+      <elf-symbol name='blk_queue_max_segments' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91f5c2be'/>
+      <elf-symbol name='blk_queue_max_write_zeroes_sectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2691ef95'/>
+      <elf-symbol name='blk_queue_physical_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15c612a6'/>
+      <elf-symbol name='blk_queue_rq_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2fa82cb'/>
+      <elf-symbol name='blk_queue_split' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e424675'/>
+      <elf-symbol name='blk_queue_update_dma_alignment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c027117'/>
+      <elf-symbol name='blk_queue_virt_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7076ca0'/>
+      <elf-symbol name='blk_queue_write_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb9b03ef'/>
+      <elf-symbol name='blk_register_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dfa0413'/>
+      <elf-symbol name='blk_rq_map_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab4c2e72'/>
+      <elf-symbol name='blk_rq_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9e8f0ac'/>
+      <elf-symbol name='blk_rq_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x849845c6'/>
+      <elf-symbol name='blk_rq_map_user_iov' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a3c9cc'/>
+      <elf-symbol name='blk_rq_unmap_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb846647'/>
+      <elf-symbol name='blk_set_queue_dying' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37138d9'/>
+      <elf-symbol name='blk_set_stacking_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdc177ea'/>
+      <elf-symbol name='blk_start_plug' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a9b37e8'/>
+      <elf-symbol name='blk_status_to_errno' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84502a47'/>
+      <elf-symbol name='blk_sync_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcad65b6e'/>
+      <elf-symbol name='blk_unregister_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c4265f6'/>
+      <elf-symbol name='blk_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c498019'/>
+      <elf-symbol name='blk_verify_command' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27639220'/>
+      <elf-symbol name='blkdev_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab71f7d8'/>
+      <elf-symbol name='blkdev_get_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf1ef910'/>
+      <elf-symbol name='blkdev_get_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70deedb1'/>
+      <elf-symbol name='blkdev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2cfc3c5'/>
+      <elf-symbol name='block_is_partially_uptodate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64eb3a7c'/>
+      <elf-symbol name='block_write_full_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66eebce6'/>
+      <elf-symbol name='blocking_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1d2c01b'/>
+      <elf-symbol name='blocking_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4ab5609'/>
+      <elf-symbol name='blocking_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x444e9140'/>
+      <elf-symbol name='bmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x651a7db3'/>
+      <elf-symbol name='bpf_prog_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6226fa1'/>
+      <elf-symbol name='bpf_prog_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49790955'/>
+      <elf-symbol name='bpf_prog_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x145da218'/>
+      <elf-symbol name='bpf_prog_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3a172f8'/>
+      <elf-symbol name='bpf_prog_sub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fc31742'/>
+      <elf-symbol name='bpf_trace_run1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdf185f0'/>
+      <elf-symbol name='bpf_trace_run10' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cd8e50b'/>
+      <elf-symbol name='bpf_trace_run11' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5167cc4'/>
+      <elf-symbol name='bpf_trace_run12' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8a86210'/>
+      <elf-symbol name='bpf_trace_run2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdb6cf62'/>
+      <elf-symbol name='bpf_trace_run3' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x452bc88b'/>
+      <elf-symbol name='bpf_trace_run4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9d77e1f'/>
+      <elf-symbol name='bpf_trace_run5' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac5ffcc4'/>
+      <elf-symbol name='bpf_trace_run6' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c0146ea'/>
+      <elf-symbol name='bpf_trace_run7' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54e90f8f'/>
+      <elf-symbol name='bpf_trace_run8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb593ed54'/>
+      <elf-symbol name='bpf_trace_run9' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83d8502e'/>
+      <elf-symbol name='bpf_warn_invalid_xdp_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c2bcd37'/>
+      <elf-symbol name='bprm_change_interp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6d43c06'/>
+      <elf-symbol name='bsearch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50a90e8d'/>
+      <elf-symbol name='bt_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b8c32f1'/>
+      <elf-symbol name='buffer_migrate_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fd9058'/>
+      <elf-symbol name='build_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fc0beb2'/>
+      <elf-symbol name='bus_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5411d662'/>
+      <elf-symbol name='bus_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2aad9016'/>
+      <elf-symbol name='bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1363e0b'/>
+      <elf-symbol name='bus_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b985e10'/>
+      <elf-symbol name='bus_set_iommu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fd85b25'/>
+      <elf-symbol name='bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7865f8c'/>
+      <elf-symbol name='bus_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4e3db30'/>
+      <elf-symbol name='cache_line_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x605d5bfa'/>
+      <elf-symbol name='call_netdevice_notifiers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x506b2dd7'/>
+      <elf-symbol name='call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28aa6a67'/>
+      <elf-symbol name='cancel_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda571594'/>
+      <elf-symbol name='cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8beca97'/>
+      <elf-symbol name='cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd969d6f4'/>
+      <elf-symbol name='capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6cbbc89'/>
+      <elf-symbol name='cdc_parse_cdc_header' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfb059e9'/>
+      <elf-symbol name='cdev_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b92f49a'/>
+      <elf-symbol name='cdev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cc11055'/>
+      <elf-symbol name='cdev_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fa2dbaf'/>
+      <elf-symbol name='cdev_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed6a00'/>
+      <elf-symbol name='cdev_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c6abf62'/>
+      <elf-symbol name='cdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefc55013'/>
+      <elf-symbol name='ce_aes_expandkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68f275ad'/>
+      <elf-symbol name='cec_allocate_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64883e01'/>
+      <elf-symbol name='cec_delete_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32f2e187'/>
+      <elf-symbol name='cec_received_msg_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcca6fe15'/>
+      <elf-symbol name='cec_register_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ff5fdf'/>
+      <elf-symbol name='cec_s_log_addrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbffe363'/>
+      <elf-symbol name='cec_s_phys_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x278e4eac'/>
+      <elf-symbol name='cec_s_phys_addr_from_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22e5079b'/>
+      <elf-symbol name='cec_transmit_attempt_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa60d8de5'/>
+      <elf-symbol name='cec_transmit_done_ts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd956cf41'/>
+      <elf-symbol name='cec_unregister_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4a9f0d6'/>
+      <elf-symbol name='cfg80211_assoc_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd5119b4'/>
+      <elf-symbol name='cfg80211_auth_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x203ef6f3'/>
+      <elf-symbol name='cfg80211_cac_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda9b3a63'/>
+      <elf-symbol name='cfg80211_calculate_bitrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15a37cf3'/>
+      <elf-symbol name='cfg80211_ch_switch_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf06a8779'/>
+      <elf-symbol name='cfg80211_chandef_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18b53545'/>
+      <elf-symbol name='cfg80211_chandef_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81a471d6'/>
+      <elf-symbol name='cfg80211_classify8021d' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5eba79'/>
+      <elf-symbol name='cfg80211_connect_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a69ec3a'/>
+      <elf-symbol name='cfg80211_cqm_pktloss_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9d7129c'/>
+      <elf-symbol name='cfg80211_cqm_rssi_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfb12720'/>
+      <elf-symbol name='cfg80211_del_sta_sinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda879c85'/>
+      <elf-symbol name='cfg80211_disconnected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b51f553'/>
+      <elf-symbol name='cfg80211_external_auth_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a3c52cd'/>
+      <elf-symbol name='cfg80211_find_elem_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d6cba30'/>
+      <elf-symbol name='cfg80211_find_vendor_elem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79b82a71'/>
+      <elf-symbol name='cfg80211_ft_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5df9efc1'/>
+      <elf-symbol name='cfg80211_get_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x348d478b'/>
+      <elf-symbol name='cfg80211_gtk_rekey_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ebd5b1f'/>
+      <elf-symbol name='cfg80211_ibss_joined' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac6f9505'/>
+      <elf-symbol name='cfg80211_inform_bss_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff30d183'/>
+      <elf-symbol name='cfg80211_inform_bss_frame_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2e3c7f3'/>
+      <elf-symbol name='cfg80211_mgmt_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd040de63'/>
+      <elf-symbol name='cfg80211_michael_mic_failure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf556deb'/>
+      <elf-symbol name='cfg80211_new_sta' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4749a2b8'/>
+      <elf-symbol name='cfg80211_pmksa_candidate_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67e60e4d'/>
+      <elf-symbol name='cfg80211_put_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34d7de42'/>
+      <elf-symbol name='cfg80211_radar_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0fb9858'/>
+      <elf-symbol name='cfg80211_ready_on_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x847ac1c2'/>
+      <elf-symbol name='cfg80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0605975'/>
+      <elf-symbol name='cfg80211_roamed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5a0e610'/>
+      <elf-symbol name='cfg80211_rx_assoc_resp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb249e785'/>
+      <elf-symbol name='cfg80211_rx_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70f4a004'/>
+      <elf-symbol name='cfg80211_rx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda7f6213'/>
+      <elf-symbol name='cfg80211_rx_unprot_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd16a0451'/>
+      <elf-symbol name='cfg80211_scan_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb72ef10'/>
+      <elf-symbol name='cfg80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf98d912b'/>
+      <elf-symbol name='cfg80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdd3e3d4'/>
+      <elf-symbol name='cfg80211_stop_iface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd93b05db'/>
+      <elf-symbol name='cfg80211_tdls_oper_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6aa5fd4'/>
+      <elf-symbol name='cfg80211_tx_mlme_mgmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26062d59'/>
+      <elf-symbol name='cfg80211_unlink_bss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91d86f63'/>
+      <elf-symbol name='cfg80211_unregister_wdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf911756f'/>
+      <elf-symbol name='cfg80211_vendor_cmd_reply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdfd4cec'/>
+      <elf-symbol name='check_disk_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22928cf2'/>
+      <elf-symbol name='class_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbd7b523'/>
+      <elf-symbol name='class_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97ef57cf'/>
+      <elf-symbol name='class_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fb2631c'/>
+      <elf-symbol name='class_interface_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f3ed20e'/>
+      <elf-symbol name='class_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61ce3e96'/>
+      <elf-symbol name='class_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb08f2424'/>
+      <elf-symbol name='cleanup_srcu_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b7ed86c'/>
+      <elf-symbol name='clear_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9dd97247'/>
+      <elf-symbol name='clear_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb439ef6a'/>
+      <elf-symbol name='clear_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d9ee9f0'/>
+      <elf-symbol name='clk_bulk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479f7d4b'/>
+      <elf-symbol name='clk_bulk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec68ba70'/>
+      <elf-symbol name='clk_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa988521f'/>
+      <elf-symbol name='clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb806275e'/>
+      <elf-symbol name='clk_bulk_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeafe07b8'/>
+      <elf-symbol name='clk_bulk_put_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8caa845'/>
+      <elf-symbol name='clk_bulk_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63c08029'/>
+      <elf-symbol name='clk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6e6d99d'/>
+      <elf-symbol name='clk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x815588a6'/>
+      <elf-symbol name='clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc15f84ac'/>
+      <elf-symbol name='clk_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63150e06'/>
+      <elf-symbol name='clk_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x556e4390'/>
+      <elf-symbol name='clk_get_sys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec4d9e3a'/>
+      <elf-symbol name='clk_hw_get_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19c0dbb7'/>
+      <elf-symbol name='clk_hw_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b6a9259'/>
+      <elf-symbol name='clk_hw_get_num_parents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bfe2ba7'/>
+      <elf-symbol name='clk_hw_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd46a7d7'/>
+      <elf-symbol name='clk_hw_get_parent_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594b10db'/>
+      <elf-symbol name='clk_hw_get_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7e0695e'/>
+      <elf-symbol name='clk_hw_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6878910d'/>
+      <elf-symbol name='clk_hw_is_prepared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc44819a'/>
+      <elf-symbol name='clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc162c86e'/>
+      <elf-symbol name='clk_hw_register_divider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd11a3643'/>
+      <elf-symbol name='clk_hw_register_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc92affac'/>
+      <elf-symbol name='clk_hw_register_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62862f5d'/>
+      <elf-symbol name='clk_hw_register_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58e2ae42'/>
+      <elf-symbol name='clk_hw_round_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6f1dc5d'/>
+      <elf-symbol name='clk_hw_set_rate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67a416f'/>
+      <elf-symbol name='clk_hw_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf12b6f7'/>
+      <elf-symbol name='clk_hw_unregister_divider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa51e40c8'/>
+      <elf-symbol name='clk_hw_unregister_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d32e29f'/>
+      <elf-symbol name='clk_hw_unregister_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fe502cb'/>
+      <elf-symbol name='clk_hw_unregister_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8f6d137'/>
+      <elf-symbol name='clk_notifier_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60091316'/>
+      <elf-symbol name='clk_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c9a7371'/>
+      <elf-symbol name='clk_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e1ca751'/>
+      <elf-symbol name='clk_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d27d65b'/>
+      <elf-symbol name='clk_register_clkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9822234'/>
+      <elf-symbol name='clk_register_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fd4c093'/>
+      <elf-symbol name='clk_register_fixed_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3655bb3'/>
+      <elf-symbol name='clk_register_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92295424'/>
+      <elf-symbol name='clk_round_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43f81957'/>
+      <elf-symbol name='clk_set_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2396c7f0'/>
+      <elf-symbol name='clk_set_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76d9b876'/>
+      <elf-symbol name='clk_sync_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8d166a5'/>
+      <elf-symbol name='clk_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb077e70a'/>
+      <elf-symbol name='clk_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7757b51a'/>
+      <elf-symbol name='clk_unregister_fixed_factor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45558f56'/>
+      <elf-symbol name='clk_unregister_fixed_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52252316'/>
+      <elf-symbol name='clk_unregister_gate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8506baa8'/>
+      <elf-symbol name='clockevents_config_and_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc69796ea'/>
+      <elf-symbol name='clocks_calc_mult_shift' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62bb09bf'/>
+      <elf-symbol name='cma_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x273c8462'/>
+      <elf-symbol name='cma_for_each_area' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46765be7'/>
+      <elf-symbol name='cma_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2994243b'/>
+      <elf-symbol name='cma_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab4670ae'/>
+      <elf-symbol name='compat_alloc_user_space' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbffde8ec'/>
+      <elf-symbol name='complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29361773'/>
+      <elf-symbol name='complete_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd94814e'/>
+      <elf-symbol name='complete_and_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8133c67d'/>
+      <elf-symbol name='completion_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51bd55b5'/>
+      <elf-symbol name='component_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf18b83a4'/>
+      <elf-symbol name='component_bind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a35580d'/>
+      <elf-symbol name='component_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52ead637'/>
+      <elf-symbol name='component_master_add_with_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8865a26'/>
+      <elf-symbol name='component_master_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fa5203a'/>
+      <elf-symbol name='component_match_add_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85d876f4'/>
+      <elf-symbol name='component_unbind_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50b50201'/>
+      <elf-symbol name='config_ep_by_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x794cf83d'/>
+      <elf-symbol name='config_group_init_type_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25ee3560'/>
+      <elf-symbol name='config_item_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c59472c'/>
+      <elf-symbol name='console_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbaaf01e'/>
+      <elf-symbol name='console_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb940700'/>
+      <elf-symbol name='console_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d04664'/>
+      <elf-symbol name='console_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc631580a'/>
+      <elf-symbol name='consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b81acb'/>
+      <elf-symbol name='cont_write_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6512c767'/>
+      <elf-symbol name='copy_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d0d163d'/>
+      <elf-symbol name='copy_strings_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9d8cfe8'/>
+      <elf-symbol name='cpu_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cb1ae69'/>
+      <elf-symbol name='cpu_have_feature' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41237f71'/>
+      <elf-symbol name='cpu_pm_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x444f1735'/>
+      <elf-symbol name='cpu_pm_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f98d766'/>
+      <elf-symbol name='cpu_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56d697ce'/>
+      <elf-symbol name='cpufreq_add_update_util_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1403ad09'/>
+      <elf-symbol name='cpufreq_cpu_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x852a3079'/>
+      <elf-symbol name='cpufreq_cpu_get_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed76f969'/>
+      <elf-symbol name='cpufreq_cpu_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc86eca4'/>
+      <elf-symbol name='cpufreq_dbs_governor_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3aa32dd7'/>
+      <elf-symbol name='cpufreq_dbs_governor_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2fc9535'/>
+      <elf-symbol name='cpufreq_dbs_governor_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x498db17'/>
+      <elf-symbol name='cpufreq_dbs_governor_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11641ac6'/>
+      <elf-symbol name='cpufreq_dbs_governor_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ccc8518'/>
+      <elf-symbol name='cpufreq_driver_resolve_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb508e17'/>
+      <elf-symbol name='cpufreq_enable_boost_support' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf30a5502'/>
+      <elf-symbol name='cpufreq_freq_transition_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52259d81'/>
+      <elf-symbol name='cpufreq_freq_transition_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1013ff4'/>
+      <elf-symbol name='cpufreq_frequency_table_verify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec774acb'/>
+      <elf-symbol name='cpufreq_generic_frequency_table_verify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc289e46d'/>
+      <elf-symbol name='cpufreq_generic_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba2b7f64'/>
+      <elf-symbol name='cpufreq_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3ab081'/>
+      <elf-symbol name='cpufreq_get_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70d14aa'/>
+      <elf-symbol name='cpufreq_quick_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c46233a'/>
+      <elf-symbol name='cpufreq_quick_get_max' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33f0768c'/>
+      <elf-symbol name='cpufreq_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f3cb2aa'/>
+      <elf-symbol name='cpufreq_register_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea5d19df'/>
+      <elf-symbol name='cpufreq_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d9e877'/>
+      <elf-symbol name='cpufreq_remove_update_util_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3192d768'/>
+      <elf-symbol name='cpufreq_table_index_unsorted' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x108fda47'/>
+      <elf-symbol name='cpufreq_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5a3799b'/>
+      <elf-symbol name='cpufreq_unregister_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48c64094'/>
+      <elf-symbol name='cpufreq_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6214aef2'/>
+      <elf-symbol name='cpufreq_update_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc37f9c6e'/>
+      <elf-symbol name='cpumask_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92ad1db9'/>
+      <elf-symbol name='cpumask_next_and' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4445ab21'/>
+      <elf-symbol name='cpumask_next_wrap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x233eb8eb'/>
+      <elf-symbol name='cpus_read_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa04f945a'/>
+      <elf-symbol name='cpus_read_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18fb2caf'/>
+      <elf-symbol name='crc16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd6841d4'/>
+      <elf-symbol name='crc32_be' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df02057'/>
+      <elf-symbol name='crc32_le' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69dd3b5b'/>
+      <elf-symbol name='crc8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2aae5cc'/>
+      <elf-symbol name='crc8_populate_msb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa8106bc'/>
+      <elf-symbol name='create_empty_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x242324b9'/>
+      <elf-symbol name='crypto_aead_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5078c27'/>
+      <elf-symbol name='crypto_aead_setauthsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93b44177'/>
+      <elf-symbol name='crypto_aead_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cbbfc32'/>
+      <elf-symbol name='crypto_ahash_digest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x133408a0'/>
+      <elf-symbol name='crypto_ahash_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eb475e5'/>
+      <elf-symbol name='crypto_alloc_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1a829be'/>
+      <elf-symbol name='crypto_alloc_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xece05977'/>
+      <elf-symbol name='crypto_alloc_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa55ba6eb'/>
+      <elf-symbol name='crypto_alloc_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15346b63'/>
+      <elf-symbol name='crypto_alloc_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe46f7739'/>
+      <elf-symbol name='crypto_alloc_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5df7fdc'/>
+      <elf-symbol name='crypto_attr_alg2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9058da5'/>
+      <elf-symbol name='crypto_check_attr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x243f0b4b'/>
+      <elf-symbol name='crypto_dequeue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77761ec3'/>
+      <elf-symbol name='crypto_destroy_tfm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9e4fe19'/>
+      <elf-symbol name='crypto_engine_alloc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc13adec7'/>
+      <elf-symbol name='crypto_engine_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2be3efce'/>
+      <elf-symbol name='crypto_engine_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d888be2'/>
+      <elf-symbol name='crypto_enqueue_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdcc2073'/>
+      <elf-symbol name='crypto_finalize_ablkcipher_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x958a876b'/>
+      <elf-symbol name='crypto_has_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34407691'/>
+      <elf-symbol name='crypto_has_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x951a2773'/>
+      <elf-symbol name='crypto_inc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ef051c8'/>
+      <elf-symbol name='crypto_init_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x499043d3'/>
+      <elf-symbol name='crypto_init_spawn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a728527'/>
+      <elf-symbol name='crypto_mod_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69c9e28e'/>
+      <elf-symbol name='crypto_register_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74217072'/>
+      <elf-symbol name='crypto_register_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69c5f6ed'/>
+      <elf-symbol name='crypto_register_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x196c2c46'/>
+      <elf-symbol name='crypto_register_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51da0956'/>
+      <elf-symbol name='crypto_register_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa917cbd7'/>
+      <elf-symbol name='crypto_register_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x726429bd'/>
+      <elf-symbol name='crypto_register_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80ec0467'/>
+      <elf-symbol name='crypto_register_shashes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88379507'/>
+      <elf-symbol name='crypto_register_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7f05f09'/>
+      <elf-symbol name='crypto_register_skciphers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c2e75d1'/>
+      <elf-symbol name='crypto_register_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1efdcfee'/>
+      <elf-symbol name='crypto_sha1_finup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6eb7451'/>
+      <elf-symbol name='crypto_sha1_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5f03915'/>
+      <elf-symbol name='crypto_shash_digest' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d82247a'/>
+      <elf-symbol name='crypto_shash_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfce201f7'/>
+      <elf-symbol name='crypto_shash_setkey' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdef5f2f6'/>
+      <elf-symbol name='crypto_shash_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ddb0e89'/>
+      <elf-symbol name='crypto_skcipher_decrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55e7ba01'/>
+      <elf-symbol name='crypto_skcipher_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3398a0e'/>
+      <elf-symbol name='crypto_spawn_tfm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9913a8e8'/>
+      <elf-symbol name='crypto_transfer_ablkcipher_request_to_engine' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50178332'/>
+      <elf-symbol name='crypto_unregister_aead' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe866e9e'/>
+      <elf-symbol name='crypto_unregister_ahash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x586c3af5'/>
+      <elf-symbol name='crypto_unregister_alg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9094e746'/>
+      <elf-symbol name='crypto_unregister_rng' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd444b7a3'/>
+      <elf-symbol name='crypto_unregister_rngs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2073d4'/>
+      <elf-symbol name='crypto_unregister_scomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fd0a069'/>
+      <elf-symbol name='crypto_unregister_shash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8242e7c'/>
+      <elf-symbol name='crypto_unregister_shashes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf632e97f'/>
+      <elf-symbol name='crypto_unregister_skcipher' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e77875b'/>
+      <elf-symbol name='crypto_unregister_skciphers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeb8713d'/>
+      <elf-symbol name='crypto_unregister_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x718da49a'/>
+      <elf-symbol name='csum_ipv6_magic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d65cbd5'/>
+      <elf-symbol name='csum_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe113bbbc'/>
+      <elf-symbol name='csum_tcpudp_nofold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd25bc5d4'/>
+      <elf-symbol name='current_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6feaa96'/>
+      <elf-symbol name='current_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd75ee543'/>
+      <elf-symbol name='d_add_ci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2cdee54'/>
+      <elf-symbol name='d_drop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14aaf437'/>
+      <elf-symbol name='d_find_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92b101e5'/>
+      <elf-symbol name='d_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ac481b3'/>
+      <elf-symbol name='d_make_root' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dd1cef2'/>
+      <elf-symbol name='d_move' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9e71a9'/>
+      <elf-symbol name='d_obtain_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x509ae90e'/>
+      <elf-symbol name='d_splice_alias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4506f90a'/>
+      <elf-symbol name='dapm_kcontrol_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf17ca248'/>
+      <elf-symbol name='dapm_pinctrl_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1db38723'/>
+      <elf-symbol name='dapm_regulator_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x347e57ca'/>
+      <elf-symbol name='datagram_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb5c38b4'/>
+      <elf-symbol name='dbs_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x958e3fb0'/>
+      <elf-symbol name='debugfs_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef00c6cf'/>
+      <elf-symbol name='debugfs_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44906179'/>
+      <elf-symbol name='debugfs_create_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f3852c'/>
+      <elf-symbol name='debugfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7899ba76'/>
+      <elf-symbol name='debugfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4802d24f'/>
+      <elf-symbol name='debugfs_create_file_unsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37f6a963'/>
+      <elf-symbol name='debugfs_create_regset32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30d6bb4d'/>
+      <elf-symbol name='debugfs_create_size_t' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6111be8'/>
+      <elf-symbol name='debugfs_create_symlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaae3c59'/>
+      <elf-symbol name='debugfs_create_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f9345f9'/>
+      <elf-symbol name='debugfs_create_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3a7fa8'/>
+      <elf-symbol name='debugfs_create_x32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90c44d2d'/>
+      <elf-symbol name='debugfs_initialized' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x716265c7'/>
+      <elf-symbol name='debugfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23332c80'/>
+      <elf-symbol name='debugfs_remove_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b975c1b'/>
+      <elf-symbol name='dec_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb538b8f2'/>
+      <elf-symbol name='default_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58bc1751'/>
+      <elf-symbol name='default_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaad8c7d6'/>
+      <elf-symbol name='del_gendisk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5817487'/>
+      <elf-symbol name='del_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa4008af'/>
+      <elf-symbol name='del_timer_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf15e728e'/>
+      <elf-symbol name='delayed_work_timer_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x253af43d'/>
+      <elf-symbol name='dentry_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7c3a3db'/>
+      <elf-symbol name='dequeue_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x440f76f3'/>
+      <elf-symbol name='desc_to_gpio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d2a353f'/>
+      <elf-symbol name='destroy_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c03d20c'/>
+      <elf-symbol name='dev_add_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66690ba'/>
+      <elf-symbol name='dev_alloc_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4220d11'/>
+      <elf-symbol name='dev_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc10b282'/>
+      <elf-symbol name='dev_driver_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3da93d5e'/>
+      <elf-symbol name='dev_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c7c95c8'/>
+      <elf-symbol name='dev_get_by_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4c2b933'/>
+      <elf-symbol name='dev_get_by_index_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28edff15'/>
+      <elf-symbol name='dev_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52487fbf'/>
+      <elf-symbol name='dev_get_by_name_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64bead6d'/>
+      <elf-symbol name='dev_get_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64e84f3a'/>
+      <elf-symbol name='dev_get_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f1bea0d'/>
+      <elf-symbol name='dev_mc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a1e2ce3'/>
+      <elf-symbol name='dev_mc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cc9db04'/>
+      <elf-symbol name='dev_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26eacfff'/>
+      <elf-symbol name='dev_pm_clear_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x841138c'/>
+      <elf-symbol name='dev_pm_domain_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23f97942'/>
+      <elf-symbol name='dev_pm_domain_attach_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6d6e886'/>
+      <elf-symbol name='dev_pm_domain_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x568918cf'/>
+      <elf-symbol name='dev_pm_genpd_set_performance_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdde1f518'/>
+      <elf-symbol name='dev_pm_opp_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab7d20f8'/>
+      <elf-symbol name='dev_pm_opp_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf60bd722'/>
+      <elf-symbol name='dev_pm_opp_find_freq_ceil' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc827185'/>
+      <elf-symbol name='dev_pm_opp_find_freq_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x855d4e92'/>
+      <elf-symbol name='dev_pm_opp_find_freq_floor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fe817e5'/>
+      <elf-symbol name='dev_pm_opp_free_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2edd98d7'/>
+      <elf-symbol name='dev_pm_opp_get_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb0963ff'/>
+      <elf-symbol name='dev_pm_opp_get_level' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97f7eda7'/>
+      <elf-symbol name='dev_pm_opp_get_max_transition_latency' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcec73dc2'/>
+      <elf-symbol name='dev_pm_opp_get_opp_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x415ebe3e'/>
+      <elf-symbol name='dev_pm_opp_get_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78befe29'/>
+      <elf-symbol name='dev_pm_opp_get_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d05935'/>
+      <elf-symbol name='dev_pm_opp_get_suspend_opp_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b32a14b'/>
+      <elf-symbol name='dev_pm_opp_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3eea74bd'/>
+      <elf-symbol name='dev_pm_opp_init_cpufreq_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x214bf22'/>
+      <elf-symbol name='dev_pm_opp_of_add_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe25d867d'/>
+      <elf-symbol name='dev_pm_opp_of_cpumask_add_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cf281e7'/>
+      <elf-symbol name='dev_pm_opp_of_cpumask_remove_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ded56d3'/>
+      <elf-symbol name='dev_pm_opp_of_get_opp_desc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae19f760'/>
+      <elf-symbol name='dev_pm_opp_of_get_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf7079c4'/>
+      <elf-symbol name='dev_pm_opp_of_register_em' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabe0636f'/>
+      <elf-symbol name='dev_pm_opp_of_remove_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x842519b7'/>
+      <elf-symbol name='dev_pm_opp_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaffc183'/>
+      <elf-symbol name='dev_pm_opp_put_opp_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3faa40b'/>
+      <elf-symbol name='dev_pm_opp_put_prop_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc71ebd20'/>
+      <elf-symbol name='dev_pm_opp_put_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70d4869'/>
+      <elf-symbol name='dev_pm_opp_put_supported_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ed92134'/>
+      <elf-symbol name='dev_pm_opp_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49416e3d'/>
+      <elf-symbol name='dev_pm_opp_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca325853'/>
+      <elf-symbol name='dev_pm_opp_remove_all_dynamic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4640281'/>
+      <elf-symbol name='dev_pm_opp_set_prop_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa46dbb20'/>
+      <elf-symbol name='dev_pm_opp_set_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4409cb7'/>
+      <elf-symbol name='dev_pm_opp_set_regulators' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1af0fba'/>
+      <elf-symbol name='dev_pm_opp_set_sharing_cpus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x435b9875'/>
+      <elf-symbol name='dev_pm_opp_set_supported_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bd9920b'/>
+      <elf-symbol name='dev_pm_opp_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8de10cc7'/>
+      <elf-symbol name='dev_pm_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38bc8ed1'/>
+      <elf-symbol name='dev_pm_qos_expose_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x410bbef2'/>
+      <elf-symbol name='dev_pm_qos_hide_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a55fedd'/>
+      <elf-symbol name='dev_pm_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabaa6815'/>
+      <elf-symbol name='dev_pm_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b07281b'/>
+      <elf-symbol name='dev_pm_qos_update_user_latency_tolerance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff78bb39'/>
+      <elf-symbol name='dev_pm_set_dedicated_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff50a9b0'/>
+      <elf-symbol name='dev_pm_set_wake_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2fbb884'/>
+      <elf-symbol name='dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b77114c'/>
+      <elf-symbol name='dev_queue_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef32882c'/>
+      <elf-symbol name='dev_remove_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1816358c'/>
+      <elf-symbol name='dev_set_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5359d23a'/>
+      <elf-symbol name='dev_set_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87a65fef'/>
+      <elf-symbol name='dev_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5db90fbb'/>
+      <elf-symbol name='dev_uc_sync_multiple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd172060'/>
+      <elf-symbol name='dev_uc_unsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdcb5b2f'/>
+      <elf-symbol name='devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb41c6d2d'/>
+      <elf-symbol name='devfreq_add_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3af3aab4'/>
+      <elf-symbol name='devfreq_cooling_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2ff843d'/>
+      <elf-symbol name='devfreq_event_get_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d7f5e72'/>
+      <elf-symbol name='devfreq_recommended_opp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde80e7d7'/>
+      <elf-symbol name='devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x276291ca'/>
+      <elf-symbol name='devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xada59ea4'/>
+      <elf-symbol name='devfreq_remove_governor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8f690ab'/>
+      <elf-symbol name='devfreq_resume_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4d1fbf2'/>
+      <elf-symbol name='devfreq_suspend_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ec4d343'/>
+      <elf-symbol name='devfreq_unregister_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd94c9a7f'/>
+      <elf-symbol name='devfreq_update_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x305afb0c'/>
+      <elf-symbol name='device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x104033a'/>
+      <elf-symbol name='device_add_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28e43fe7'/>
+      <elf-symbol name='device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2dee09c'/>
+      <elf-symbol name='device_bind_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1f5d92f'/>
+      <elf-symbol name='device_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ca6e8a6'/>
+      <elf-symbol name='device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dd73054'/>
+      <elf-symbol name='device_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73b6a4d7'/>
+      <elf-symbol name='device_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ec12135'/>
+      <elf-symbol name='device_create_with_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9a1b87'/>
+      <elf-symbol name='device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3efd36b8'/>
+      <elf-symbol name='device_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26669a5f'/>
+      <elf-symbol name='device_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6397c90a'/>
+      <elf-symbol name='device_for_each_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5327e5a8'/>
+      <elf-symbol name='device_get_child_node_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86abfb0e'/>
+      <elf-symbol name='device_get_dma_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88880911'/>
+      <elf-symbol name='device_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73dbfe04'/>
+      <elf-symbol name='device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c2ec2ab'/>
+      <elf-symbol name='device_get_named_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2974f8cb'/>
+      <elf-symbol name='device_get_next_child_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85b8ee1'/>
+      <elf-symbol name='device_init_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7b158bc'/>
+      <elf-symbol name='device_initialize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fa2cb09'/>
+      <elf-symbol name='device_link_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47382126'/>
+      <elf-symbol name='device_link_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d5cc4b8'/>
+      <elf-symbol name='device_match_fwnode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78d32ef'/>
+      <elf-symbol name='device_match_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38e9add6'/>
+      <elf-symbol name='device_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68dadcd6'/>
+      <elf-symbol name='device_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x666bbe22'/>
+      <elf-symbol name='device_property_read_string_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c07d157'/>
+      <elf-symbol name='device_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac062c2f'/>
+      <elf-symbol name='device_property_read_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x495dd388'/>
+      <elf-symbol name='device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fa49650'/>
+      <elf-symbol name='device_release_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2b35ae2'/>
+      <elf-symbol name='device_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63be24b4'/>
+      <elf-symbol name='device_remove_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcd6e460'/>
+      <elf-symbol name='device_remove_file_self' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bdd6569'/>
+      <elf-symbol name='device_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63bd5018'/>
+      <elf-symbol name='device_rename' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e9fad7a'/>
+      <elf-symbol name='device_set_wakeup_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7986f51'/>
+      <elf-symbol name='device_set_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1fbefff'/>
+      <elf-symbol name='device_show_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f8b1428'/>
+      <elf-symbol name='device_show_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e1b15'/>
+      <elf-symbol name='device_store_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba1c5a10'/>
+      <elf-symbol name='device_store_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x145a6181'/>
+      <elf-symbol name='device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9942ab61'/>
+      <elf-symbol name='device_wakeup_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3744ce97'/>
+      <elf-symbol name='device_wakeup_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x884322fc'/>
+      <elf-symbol name='devm_add_action' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92c29567'/>
+      <elf-symbol name='devm_backlight_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc05bea4c'/>
+      <elf-symbol name='devm_blk_ksm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d2cd160'/>
+      <elf-symbol name='devm_clk_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cfa6f8'/>
+      <elf-symbol name='devm_clk_bulk_get_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6854016b'/>
+      <elf-symbol name='devm_clk_bulk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x825ac957'/>
+      <elf-symbol name='devm_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1b8ca89'/>
+      <elf-symbol name='devm_clk_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8913be17'/>
+      <elf-symbol name='devm_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18088e87'/>
+      <elf-symbol name='devm_clk_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12a21a9e'/>
+      <elf-symbol name='devm_clk_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f673f7a'/>
+      <elf-symbol name='devm_devfreq_add_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3553b70b'/>
+      <elf-symbol name='devm_devfreq_register_opp_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17c9e094'/>
+      <elf-symbol name='devm_devfreq_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5be9ea1a'/>
+      <elf-symbol name='devm_extcon_dev_allocate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ba05785'/>
+      <elf-symbol name='devm_extcon_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb04accb2'/>
+      <elf-symbol name='devm_extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d371567'/>
+      <elf-symbol name='devm_extcon_register_notifier_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66f7bf36'/>
+      <elf-symbol name='devm_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24844da3'/>
+      <elf-symbol name='devm_fwnode_get_index_gpiod_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b97de9e'/>
+      <elf-symbol name='devm_get_clk_from_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3925653a'/>
+      <elf-symbol name='devm_gpio_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c29c267'/>
+      <elf-symbol name='devm_gpio_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc621b144'/>
+      <elf-symbol name='devm_gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6995d06'/>
+      <elf-symbol name='devm_gpiochip_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe969536'/>
+      <elf-symbol name='devm_gpiod_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf02d501'/>
+      <elf-symbol name='devm_gpiod_get_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x199d9539'/>
+      <elf-symbol name='devm_gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47fba0eb'/>
+      <elf-symbol name='devm_hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x887f784a'/>
+      <elf-symbol name='devm_iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80087df1'/>
+      <elf-symbol name='devm_iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd009c86'/>
+      <elf-symbol name='devm_input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a2a4356'/>
+      <elf-symbol name='devm_ioremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cb51f06'/>
+      <elf-symbol name='devm_ioremap_nocache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0ca5025'/>
+      <elf-symbol name='devm_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69654542'/>
+      <elf-symbol name='devm_ioremap_wc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe6ca008'/>
+      <elf-symbol name='devm_iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x223adf42'/>
+      <elf-symbol name='devm_kasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf72298fd'/>
+      <elf-symbol name='devm_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27a52644'/>
+      <elf-symbol name='devm_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bb2aa4e'/>
+      <elf-symbol name='devm_kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb43b3f4e'/>
+      <elf-symbol name='devm_kstrdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3bb6604'/>
+      <elf-symbol name='devm_kvasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf133db27'/>
+      <elf-symbol name='devm_led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8e1b945'/>
+      <elf-symbol name='devm_mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e2cc031'/>
+      <elf-symbol name='devm_memremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf88a1f93'/>
+      <elf-symbol name='devm_mfd_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeb436d1'/>
+      <elf-symbol name='devm_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34dce42e'/>
+      <elf-symbol name='devm_nvmem_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44063ff4'/>
+      <elf-symbol name='devm_nvmem_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3eb16b5'/>
+      <elf-symbol name='devm_of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4afe985e'/>
+      <elf-symbol name='devm_of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa26e9415'/>
+      <elf-symbol name='devm_of_pci_get_host_bridge_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd67e8b61'/>
+      <elf-symbol name='devm_of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5266c44d'/>
+      <elf-symbol name='devm_of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99c4633d'/>
+      <elf-symbol name='devm_pci_alloc_host_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6ea9edb'/>
+      <elf-symbol name='devm_phy_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8ca5636'/>
+      <elf-symbol name='devm_phy_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e857f9d'/>
+      <elf-symbol name='devm_pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c58fa9d'/>
+      <elf-symbol name='devm_pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64f04446'/>
+      <elf-symbol name='devm_pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a15c52d'/>
+      <elf-symbol name='devm_platform_ioremap_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5c48775'/>
+      <elf-symbol name='devm_power_supply_get_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6fdb8ff'/>
+      <elf-symbol name='devm_power_supply_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9009a9d8'/>
+      <elf-symbol name='devm_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b2f232e'/>
+      <elf-symbol name='devm_pwm_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b753af3'/>
+      <elf-symbol name='devm_regmap_add_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a114c1b'/>
+      <elf-symbol name='devm_regmap_del_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30f884e9'/>
+      <elf-symbol name='devm_regmap_field_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfab645d9'/>
+      <elf-symbol name='devm_regulator_bulk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38d04d66'/>
+      <elf-symbol name='devm_regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30eea1ec'/>
+      <elf-symbol name='devm_regulator_get_exclusive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9edac3dd'/>
+      <elf-symbol name='devm_regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21a34e45'/>
+      <elf-symbol name='devm_regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c42df5e'/>
+      <elf-symbol name='devm_regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39ce539'/>
+      <elf-symbol name='devm_regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2b1db41'/>
+      <elf-symbol name='devm_request_any_context_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69eb94ca'/>
+      <elf-symbol name='devm_request_pci_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x766bd6f1'/>
+      <elf-symbol name='devm_request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefdfe452'/>
+      <elf-symbol name='devm_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6e46843'/>
+      <elf-symbol name='devm_reset_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe48cd2e6'/>
+      <elf-symbol name='devm_rtc_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9270ec28'/>
+      <elf-symbol name='devm_rtc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0f4036a'/>
+      <elf-symbol name='devm_snd_dmaengine_pcm_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf388f416'/>
+      <elf-symbol name='devm_snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfae582'/>
+      <elf-symbol name='devm_snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33e060ce'/>
+      <elf-symbol name='devm_spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x603c0758'/>
+      <elf-symbol name='devm_thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64b8a6f0'/>
+      <elf-symbol name='devm_thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ae58430'/>
+      <elf-symbol name='devm_thermal_zone_of_sensor_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeac24de'/>
+      <elf-symbol name='devm_usb_get_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b676d40'/>
+      <elf-symbol name='devm_usb_get_phy_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1009405'/>
+      <elf-symbol name='devm_watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81c35467'/>
+      <elf-symbol name='devres_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe6dd395'/>
+      <elf-symbol name='devres_alloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe73cef04'/>
+      <elf-symbol name='devres_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c0daef1'/>
+      <elf-symbol name='devres_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe93e49c3'/>
+      <elf-symbol name='devres_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa027cba7'/>
+      <elf-symbol name='disable_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ce4ca6f'/>
+      <elf-symbol name='disable_irq_nosync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27bbf221'/>
+      <elf-symbol name='disable_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf21e1f9b'/>
+      <elf-symbol name='divider_get_val' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e798ffb'/>
+      <elf-symbol name='divider_recalc_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb998640'/>
+      <elf-symbol name='divider_ro_round_rate_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6b8b234'/>
+      <elf-symbol name='divider_round_rate_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb014861e'/>
+      <elf-symbol name='dma_alloc_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4824cf'/>
+      <elf-symbol name='dma_async_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b9ec29d'/>
+      <elf-symbol name='dma_async_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf514b46f'/>
+      <elf-symbol name='dma_async_tx_descriptor_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec697a9c'/>
+      <elf-symbol name='dma_buf_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a690010'/>
+      <elf-symbol name='dma_buf_begin_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x262734b7'/>
+      <elf-symbol name='dma_buf_begin_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc45db106'/>
+      <elf-symbol name='dma_buf_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9506420'/>
+      <elf-symbol name='dma_buf_end_cpu_access' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3103607f'/>
+      <elf-symbol name='dma_buf_end_cpu_access_partial' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x575bc961'/>
+      <elf-symbol name='dma_buf_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa95d18bc'/>
+      <elf-symbol name='dma_buf_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19147a9a'/>
+      <elf-symbol name='dma_buf_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec1ea0fc'/>
+      <elf-symbol name='dma_buf_get_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf948bd75'/>
+      <elf-symbol name='dma_buf_get_uuid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fa7e396'/>
+      <elf-symbol name='dma_buf_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f85dbda'/>
+      <elf-symbol name='dma_buf_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5cef4b4'/>
+      <elf-symbol name='dma_buf_map_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x741bf2f9'/>
+      <elf-symbol name='dma_buf_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8016733'/>
+      <elf-symbol name='dma_buf_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c765df1'/>
+      <elf-symbol name='dma_buf_unmap_attachment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf53457e2'/>
+      <elf-symbol name='dma_buf_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34c34592'/>
+      <elf-symbol name='dma_buf_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48277d61'/>
+      <elf-symbol name='dma_direct_map_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94666419'/>
+      <elf-symbol name='dma_direct_map_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaa9ce9f'/>
+      <elf-symbol name='dma_direct_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37850788'/>
+      <elf-symbol name='dma_direct_sync_sg_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa971f75e'/>
+      <elf-symbol name='dma_direct_sync_sg_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf5beb6e'/>
+      <elf-symbol name='dma_direct_sync_single_for_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ec27b41'/>
+      <elf-symbol name='dma_direct_sync_single_for_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x542d9553'/>
+      <elf-symbol name='dma_direct_unmap_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd148b855'/>
+      <elf-symbol name='dma_direct_unmap_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8de18599'/>
+      <elf-symbol name='dma_fence_add_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e21c9a1'/>
+      <elf-symbol name='dma_fence_array_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb15ab250'/>
+      <elf-symbol name='dma_fence_context_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14605535'/>
+      <elf-symbol name='dma_fence_default_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x350ea558'/>
+      <elf-symbol name='dma_fence_enable_sw_signaling' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d9ca0e6'/>
+      <elf-symbol name='dma_fence_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd8166a1'/>
+      <elf-symbol name='dma_fence_get_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e0b1deb'/>
+      <elf-symbol name='dma_fence_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16dee44d'/>
+      <elf-symbol name='dma_fence_match_context' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacaa4c72'/>
+      <elf-symbol name='dma_fence_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe123f3d9'/>
+      <elf-symbol name='dma_fence_remove_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b20fb95'/>
+      <elf-symbol name='dma_fence_signal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x731c4a9c'/>
+      <elf-symbol name='dma_fence_signal_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d02cd70'/>
+      <elf-symbol name='dma_fence_wait_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98c039dc'/>
+      <elf-symbol name='dma_free_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbfd5aaf'/>
+      <elf-symbol name='dma_get_any_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f1153bc'/>
+      <elf-symbol name='dma_get_merge_boundary' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20aec575'/>
+      <elf-symbol name='dma_get_sgtable_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63f0dcc0'/>
+      <elf-symbol name='dma_get_slave_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45058005'/>
+      <elf-symbol name='dma_get_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40fe1aff'/>
+      <elf-symbol name='dma_heap_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1334649d'/>
+      <elf-symbol name='dma_heap_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c598736'/>
+      <elf-symbol name='dma_heap_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf39b6569'/>
+      <elf-symbol name='dma_heap_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed3a3cb3'/>
+      <elf-symbol name='dma_max_mapping_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62e0887d'/>
+      <elf-symbol name='dma_mmap_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44e88344'/>
+      <elf-symbol name='dma_pool_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x678b96ec'/>
+      <elf-symbol name='dma_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c001ab0'/>
+      <elf-symbol name='dma_pool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5aa7165'/>
+      <elf-symbol name='dma_pool_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f7754a8'/>
+      <elf-symbol name='dma_release_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89a99264'/>
+      <elf-symbol name='dma_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1cc19f8'/>
+      <elf-symbol name='dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed2cca51'/>
+      <elf-symbol name='dma_resv_add_excl_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x670f2999'/>
+      <elf-symbol name='dma_resv_add_shared_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x123476cd'/>
+      <elf-symbol name='dma_resv_copy_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32b0a40a'/>
+      <elf-symbol name='dma_resv_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8870ec55'/>
+      <elf-symbol name='dma_resv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x992bce5'/>
+      <elf-symbol name='dma_resv_reserve_shared' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd142d8cd'/>
+      <elf-symbol name='dma_resv_test_signaled_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4baea7b0'/>
+      <elf-symbol name='dma_resv_wait_timeout_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa773805c'/>
+      <elf-symbol name='dma_set_coherent_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51e9cc6b'/>
+      <elf-symbol name='dma_set_mask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4b57edc'/>
+      <elf-symbol name='dmaengine_unmap_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa81487fd'/>
+      <elf-symbol name='dmam_alloc_attrs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2538c36'/>
+      <elf-symbol name='dmam_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9df97138'/>
+      <elf-symbol name='dmam_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc049fe7a'/>
+      <elf-symbol name='do_SAK' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7da48cf2'/>
+      <elf-symbol name='do_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x952664c5'/>
+      <elf-symbol name='do_wait_intr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b2f27fb'/>
+      <elf-symbol name='down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6626afca'/>
+      <elf-symbol name='down_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b395b3'/>
+      <elf-symbol name='down_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb162aef5'/>
+      <elf-symbol name='down_read_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ff63d1'/>
+      <elf-symbol name='down_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9682235'/>
+      <elf-symbol name='down_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc7e2596'/>
+      <elf-symbol name='down_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x486fdb09'/>
+      <elf-symbol name='downgrade_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x971410bd'/>
+      <elf-symbol name='dput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc836b6f'/>
+      <elf-symbol name='drain_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa38602cd'/>
+      <elf-symbol name='driver_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f370876'/>
+      <elf-symbol name='driver_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaa878fe'/>
+      <elf-symbol name='driver_find_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x955f6c10'/>
+      <elf-symbol name='driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6685345d'/>
+      <elf-symbol name='driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf753411'/>
+      <elf-symbol name='drm_add_edid_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc30330a6'/>
+      <elf-symbol name='drm_add_modes_noedid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51a56933'/>
+      <elf-symbol name='drm_atomic_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf2df9d3'/>
+      <elf-symbol name='drm_atomic_get_connector_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7346085d'/>
+      <elf-symbol name='drm_atomic_get_crtc_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86fc4311'/>
+      <elf-symbol name='drm_atomic_get_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d142590'/>
+      <elf-symbol name='drm_atomic_get_private_obj_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaebe3e90'/>
+      <elf-symbol name='drm_atomic_helper_async_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f8ffc8a'/>
+      <elf-symbol name='drm_atomic_helper_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a81da9b'/>
+      <elf-symbol name='drm_atomic_helper_check_plane_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e7fe676'/>
+      <elf-symbol name='drm_atomic_helper_cleanup_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f7bf2fe'/>
+      <elf-symbol name='drm_atomic_helper_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99e2baaa'/>
+      <elf-symbol name='drm_atomic_helper_commit_cleanup_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82ced0e'/>
+      <elf-symbol name='drm_atomic_helper_commit_duplicated_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6928ba91'/>
+      <elf-symbol name='drm_atomic_helper_commit_hw_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c4b10bc'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_disables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7d44fb8'/>
+      <elf-symbol name='drm_atomic_helper_commit_modeset_enables' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb94c0dd'/>
+      <elf-symbol name='drm_atomic_helper_commit_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f0e353d'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79040130'/>
+      <elf-symbol name='drm_atomic_helper_commit_tail_rpm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec714775'/>
+      <elf-symbol name='drm_atomic_helper_connector_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37e71488'/>
+      <elf-symbol name='drm_atomic_helper_connector_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0d27db3'/>
+      <elf-symbol name='drm_atomic_helper_connector_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x252959d8'/>
+      <elf-symbol name='drm_atomic_helper_crtc_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bbe795e'/>
+      <elf-symbol name='drm_atomic_helper_crtc_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5ee2e62'/>
+      <elf-symbol name='drm_atomic_helper_crtc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c71e56a'/>
+      <elf-symbol name='drm_atomic_helper_dirtyfb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42a1f52c'/>
+      <elf-symbol name='drm_atomic_helper_disable_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e60f33a'/>
+      <elf-symbol name='drm_atomic_helper_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a300cf5'/>
+      <elf-symbol name='drm_atomic_helper_page_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf4fa584'/>
+      <elf-symbol name='drm_atomic_helper_plane_destroy_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x195ac6bc'/>
+      <elf-symbol name='drm_atomic_helper_plane_duplicate_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1516b3e'/>
+      <elf-symbol name='drm_atomic_helper_plane_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85308fa3'/>
+      <elf-symbol name='drm_atomic_helper_prepare_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89af43df'/>
+      <elf-symbol name='drm_atomic_helper_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4636eb8'/>
+      <elf-symbol name='drm_atomic_helper_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78a1eb21'/>
+      <elf-symbol name='drm_atomic_helper_setup_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39bf1579'/>
+      <elf-symbol name='drm_atomic_helper_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f405ed6'/>
+      <elf-symbol name='drm_atomic_helper_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bdf43b1'/>
+      <elf-symbol name='drm_atomic_helper_swap_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46440ab7'/>
+      <elf-symbol name='drm_atomic_helper_update_legacy_modeset_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf88783a'/>
+      <elf-symbol name='drm_atomic_helper_update_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f50018a'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_dependencies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58378c46'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_fences' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c9275b9'/>
+      <elf-symbol name='drm_atomic_helper_wait_for_vblanks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22da861e'/>
+      <elf-symbol name='drm_atomic_private_obj_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe36a83ac'/>
+      <elf-symbol name='drm_atomic_private_obj_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf2583a2'/>
+      <elf-symbol name='drm_atomic_set_crtc_for_connector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a877b3d'/>
+      <elf-symbol name='drm_atomic_set_fence_for_plane' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69f5c7cd'/>
+      <elf-symbol name='drm_atomic_set_mode_for_crtc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed39d731'/>
+      <elf-symbol name='drm_atomic_state_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45b3f1f'/>
+      <elf-symbol name='drm_atomic_state_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddfae0e'/>
+      <elf-symbol name='drm_atomic_state_default_clear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58a9ad75'/>
+      <elf-symbol name='drm_atomic_state_default_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5226c49d'/>
+      <elf-symbol name='drm_atomic_state_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d0966a4'/>
+      <elf-symbol name='drm_bridge_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fd2e2b4'/>
+      <elf-symbol name='drm_bridge_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa14ad2da'/>
+      <elf-symbol name='drm_bridge_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8188ef4'/>
+      <elf-symbol name='drm_bridge_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fa47570'/>
+      <elf-symbol name='drm_bridge_mode_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1673338b'/>
+      <elf-symbol name='drm_bridge_post_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe36ecccc'/>
+      <elf-symbol name='drm_bridge_pre_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfa0a5f6'/>
+      <elf-symbol name='drm_bridge_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11d02ebe'/>
+      <elf-symbol name='drm_calc_vbltimestamp_from_scanoutpos' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x487844bd'/>
+      <elf-symbol name='drm_class_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f66d401'/>
+      <elf-symbol name='drm_class_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x253673c3'/>
+      <elf-symbol name='drm_clflush_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84a2f812'/>
+      <elf-symbol name='drm_client_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e454f5'/>
+      <elf-symbol name='drm_client_modeset_commit_force' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x750c34b8'/>
+      <elf-symbol name='drm_client_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc4e86b4'/>
+      <elf-symbol name='drm_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c3d7225'/>
+      <elf-symbol name='drm_connector_attach_content_protection_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9218137'/>
+      <elf-symbol name='drm_connector_attach_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeccc3405'/>
+      <elf-symbol name='drm_connector_attach_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b9f7f3b'/>
+      <elf-symbol name='drm_connector_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe4dce16'/>
+      <elf-symbol name='drm_connector_has_possible_encoder' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc5a8444'/>
+      <elf-symbol name='drm_connector_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14710458'/>
+      <elf-symbol name='drm_connector_list_iter_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f35a5e4'/>
+      <elf-symbol name='drm_connector_list_iter_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14b49698'/>
+      <elf-symbol name='drm_connector_list_iter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27251ea3'/>
+      <elf-symbol name='drm_connector_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b019f4'/>
+      <elf-symbol name='drm_connector_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3069a4e'/>
+      <elf-symbol name='drm_connector_update_edid_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97a339aa'/>
+      <elf-symbol name='drm_crtc_arm_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98093b02'/>
+      <elf-symbol name='drm_crtc_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40836622'/>
+      <elf-symbol name='drm_crtc_handle_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac99dbfc'/>
+      <elf-symbol name='drm_crtc_init_with_planes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec6e5129'/>
+      <elf-symbol name='drm_crtc_send_vblank_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60379cd3'/>
+      <elf-symbol name='drm_crtc_set_max_vblank_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1bd3cc8'/>
+      <elf-symbol name='drm_crtc_vblank_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x333b84d2'/>
+      <elf-symbol name='drm_crtc_vblank_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a1b903b'/>
+      <elf-symbol name='drm_crtc_vblank_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4598bc6a'/>
+      <elf-symbol name='drm_crtc_vblank_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf3ac8f8'/>
+      <elf-symbol name='drm_crtc_vblank_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8894b15'/>
+      <elf-symbol name='drm_crtc_wait_one_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdde2ae63'/>
+      <elf-symbol name='drm_cvt_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e3530e9'/>
+      <elf-symbol name='drm_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34a4640a'/>
+      <elf-symbol name='drm_debugfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c20e166'/>
+      <elf-symbol name='drm_detect_hdmi_monitor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8ad5d01'/>
+      <elf-symbol name='drm_detect_monitor_audio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66551bc7'/>
+      <elf-symbol name='drm_dev_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacfd75c4'/>
+      <elf-symbol name='drm_dev_dbg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aab252f'/>
+      <elf-symbol name='drm_dev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb08ad80a'/>
+      <elf-symbol name='drm_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4e77924'/>
+      <elf-symbol name='drm_dev_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8a9fe11'/>
+      <elf-symbol name='drm_dev_set_unique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb85260f8'/>
+      <elf-symbol name='drm_dev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x492a48fa'/>
+      <elf-symbol name='drm_display_mode_from_videomode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec55cbce'/>
+      <elf-symbol name='drm_display_mode_to_videomode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d44d611'/>
+      <elf-symbol name='drm_do_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55f8e21d'/>
+      <elf-symbol name='drm_dp_atomic_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd849800c'/>
+      <elf-symbol name='drm_dp_atomic_release_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cd53896'/>
+      <elf-symbol name='drm_dp_aux_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59c01c21'/>
+      <elf-symbol name='drm_dp_aux_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf76d0b1'/>
+      <elf-symbol name='drm_dp_bw_code_to_link_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73011db0'/>
+      <elf-symbol name='drm_dp_calc_pbn_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa47826e4'/>
+      <elf-symbol name='drm_dp_channel_eq_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedcf81ce'/>
+      <elf-symbol name='drm_dp_clock_recovery_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d701329'/>
+      <elf-symbol name='drm_dp_dpcd_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d14233c'/>
+      <elf-symbol name='drm_dp_dpcd_read_link_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadc198fc'/>
+      <elf-symbol name='drm_dp_dpcd_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa89b04e'/>
+      <elf-symbol name='drm_dp_find_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x738bdd6d'/>
+      <elf-symbol name='drm_dp_get_adjust_request_pre_emphasis' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x582f248e'/>
+      <elf-symbol name='drm_dp_get_adjust_request_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5c99a79'/>
+      <elf-symbol name='drm_dp_link_configure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebd797c0'/>
+      <elf-symbol name='drm_dp_link_power_down' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8849e36'/>
+      <elf-symbol name='drm_dp_link_power_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x589eab70'/>
+      <elf-symbol name='drm_dp_link_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33ac17da'/>
+      <elf-symbol name='drm_dp_link_rate_to_bw_code' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26815dbc'/>
+      <elf-symbol name='drm_dp_link_train_channel_eq_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48b62a57'/>
+      <elf-symbol name='drm_dp_link_train_clock_recovery_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6ff9496'/>
+      <elf-symbol name='drm_dp_mst_allocate_vcpi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe698cd88'/>
+      <elf-symbol name='drm_dp_mst_deallocate_vcpi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc6fef56'/>
+      <elf-symbol name='drm_dp_mst_detect_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb024508'/>
+      <elf-symbol name='drm_dp_mst_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x956ecaee'/>
+      <elf-symbol name='drm_dp_mst_hpd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b477210'/>
+      <elf-symbol name='drm_dp_mst_reset_vcpi_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f23371c'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d4d6dbd'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x486560f5'/>
+      <elf-symbol name='drm_dp_mst_topology_mgr_set_mst' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54d3b5eb'/>
+      <elf-symbol name='drm_dp_send_power_updown_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf247864c'/>
+      <elf-symbol name='drm_dp_update_payload_part1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfce7c310'/>
+      <elf-symbol name='drm_dp_update_payload_part2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ec097df'/>
+      <elf-symbol name='drm_edid_duplicate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47f985aa'/>
+      <elf-symbol name='drm_encoder_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb40a838c'/>
+      <elf-symbol name='drm_encoder_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0b00517'/>
+      <elf-symbol name='drm_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd8b879a'/>
+      <elf-symbol name='drm_event_reserve_init_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa40f0b1c'/>
+      <elf-symbol name='drm_fb_cma_get_gem_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea903af'/>
+      <elf-symbol name='drm_flip_work_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd60ff1c2'/>
+      <elf-symbol name='drm_flip_work_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a2ed2c'/>
+      <elf-symbol name='drm_flip_work_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x737100b1'/>
+      <elf-symbol name='drm_flip_work_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcb59b84'/>
+      <elf-symbol name='drm_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7de7124'/>
+      <elf-symbol name='drm_framebuffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd6d4611'/>
+      <elf-symbol name='drm_framebuffer_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d99d275'/>
+      <elf-symbol name='drm_framebuffer_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5813d82b'/>
+      <elf-symbol name='drm_framebuffer_unregister_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f5c1f39'/>
+      <elf-symbol name='drm_gem_cma_dumb_create_internal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x635c0cd4'/>
+      <elf-symbol name='drm_gem_cma_free_object' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x261b7071'/>
+      <elf-symbol name='drm_gem_cma_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76e952c5'/>
+      <elf-symbol name='drm_gem_cma_prime_get_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xded1bb5d'/>
+      <elf-symbol name='drm_gem_cma_prime_import_sg_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71b1c18e'/>
+      <elf-symbol name='drm_gem_cma_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4c7f262'/>
+      <elf-symbol name='drm_gem_cma_prime_vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xead33f8'/>
+      <elf-symbol name='drm_gem_cma_prime_vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca98e5c6'/>
+      <elf-symbol name='drm_gem_create_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6537b59c'/>
+      <elf-symbol name='drm_gem_fb_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2f71c92'/>
+      <elf-symbol name='drm_gem_fb_create_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d33a724'/>
+      <elf-symbol name='drm_gem_fb_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ca12d8c'/>
+      <elf-symbol name='drm_gem_fb_get_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x409b3708'/>
+      <elf-symbol name='drm_gem_fb_prepare_fb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaa0a122'/>
+      <elf-symbol name='drm_gem_free_mmap_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cd73d20'/>
+      <elf-symbol name='drm_gem_get_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb093373b'/>
+      <elf-symbol name='drm_gem_handle_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28d86e6f'/>
+      <elf-symbol name='drm_gem_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c5426ee'/>
+      <elf-symbol name='drm_gem_mmap_obj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fe7fc89'/>
+      <elf-symbol name='drm_gem_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0783e1a'/>
+      <elf-symbol name='drm_gem_object_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf096cca3'/>
+      <elf-symbol name='drm_gem_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff6b0a6e'/>
+      <elf-symbol name='drm_gem_object_put_unlocked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x288f0d41'/>
+      <elf-symbol name='drm_gem_object_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x984ef9c'/>
+      <elf-symbol name='drm_gem_prime_export' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa99f7de9'/>
+      <elf-symbol name='drm_gem_prime_fd_to_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc6198c0'/>
+      <elf-symbol name='drm_gem_prime_handle_to_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e779450'/>
+      <elf-symbol name='drm_gem_prime_import' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27a472fc'/>
+      <elf-symbol name='drm_gem_prime_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa18fe42a'/>
+      <elf-symbol name='drm_gem_private_object_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x399b1e58'/>
+      <elf-symbol name='drm_gem_put_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0c8c546'/>
+      <elf-symbol name='drm_gem_vm_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8d80557'/>
+      <elf-symbol name='drm_gem_vm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82f725e6'/>
+      <elf-symbol name='drm_get_connector_status_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd60df2'/>
+      <elf-symbol name='drm_get_edid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53c24451'/>
+      <elf-symbol name='drm_get_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd26daf9'/>
+      <elf-symbol name='drm_get_format_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e095f11'/>
+      <elf-symbol name='drm_handle_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9394fd80'/>
+      <elf-symbol name='drm_hdcp_check_ksvs_revoked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59b8e303'/>
+      <elf-symbol name='drm_hdcp_update_content_protection' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91c52577'/>
+      <elf-symbol name='drm_hdmi_avi_infoframe_from_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b0a33fd'/>
+      <elf-symbol name='drm_helper_hpd_irq_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41bd3e7c'/>
+      <elf-symbol name='drm_helper_mode_fill_fb_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcef3aaed'/>
+      <elf-symbol name='drm_helper_probe_single_connector_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e7b9c54'/>
+      <elf-symbol name='drm_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26255d0e'/>
+      <elf-symbol name='drm_ioctl_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29ec0afd'/>
+      <elf-symbol name='drm_irq_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb43a034e'/>
+      <elf-symbol name='drm_irq_uninstall' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee1ed686'/>
+      <elf-symbol name='drm_kms_helper_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb511a1f'/>
+      <elf-symbol name='drm_kms_helper_poll_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf338756e'/>
+      <elf-symbol name='drm_kms_helper_poll_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdce66e94'/>
+      <elf-symbol name='drm_kms_helper_poll_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6aafbce'/>
+      <elf-symbol name='drm_kms_helper_poll_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc246f3c2'/>
+      <elf-symbol name='drm_match_cea_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16c66718'/>
+      <elf-symbol name='drm_mm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b982195'/>
+      <elf-symbol name='drm_mm_insert_node_in_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d12fd6e'/>
+      <elf-symbol name='drm_mm_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d93e65'/>
+      <elf-symbol name='drm_mm_remove_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c287154'/>
+      <elf-symbol name='drm_mm_takedown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc307a10c'/>
+      <elf-symbol name='drm_mode_config_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd690381'/>
+      <elf-symbol name='drm_mode_config_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa44d3ada'/>
+      <elf-symbol name='drm_mode_config_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x138b6e94'/>
+      <elf-symbol name='drm_mode_convert_umode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa24320cc'/>
+      <elf-symbol name='drm_mode_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa33ab01d'/>
+      <elf-symbol name='drm_mode_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8d3f63a'/>
+      <elf-symbol name='drm_mode_create_dp_colorspace_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43caf35b'/>
+      <elf-symbol name='drm_mode_crtc_set_gamma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6819da71'/>
+      <elf-symbol name='drm_mode_debug_printmodeline' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521c94e8'/>
+      <elf-symbol name='drm_mode_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xace1c130'/>
+      <elf-symbol name='drm_mode_duplicate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70aa2f57'/>
+      <elf-symbol name='drm_mode_equal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c8d1457'/>
+      <elf-symbol name='drm_mode_object_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xade89574'/>
+      <elf-symbol name='drm_mode_object_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d347314'/>
+      <elf-symbol name='drm_mode_object_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa37ca28a'/>
+      <elf-symbol name='drm_mode_probed_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc88d5955'/>
+      <elf-symbol name='drm_mode_set_crtcinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb26bf25d'/>
+      <elf-symbol name='drm_mode_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c2a17d8'/>
+      <elf-symbol name='drm_mode_vrefresh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6661bd33'/>
+      <elf-symbol name='drm_modeset_acquire_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72e4460a'/>
+      <elf-symbol name='drm_modeset_acquire_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8159afe9'/>
+      <elf-symbol name='drm_modeset_backoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67c9b4c4'/>
+      <elf-symbol name='drm_modeset_drop_locks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba035c20'/>
+      <elf-symbol name='drm_modeset_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35827bdc'/>
+      <elf-symbol name='drm_modeset_lock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f894c9a'/>
+      <elf-symbol name='drm_modeset_lock_all_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dade3bc'/>
+      <elf-symbol name='drm_modeset_lock_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1971637c'/>
+      <elf-symbol name='drm_modeset_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30ca02cb'/>
+      <elf-symbol name='drm_modeset_unlock_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6fe6e96'/>
+      <elf-symbol name='drm_object_attach_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bf736b3'/>
+      <elf-symbol name='drm_object_property_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd27c5e1f'/>
+      <elf-symbol name='drm_of_component_match_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x480ef44e'/>
+      <elf-symbol name='drm_of_find_possible_crtcs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce9a4c13'/>
+      <elf-symbol name='drm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55568078'/>
+      <elf-symbol name='drm_panel_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x168021b2'/>
+      <elf-symbol name='drm_panel_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71c49735'/>
+      <elf-symbol name='drm_panel_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f14f34f'/>
+      <elf-symbol name='drm_panel_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc41f8784'/>
+      <elf-symbol name='drm_panel_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92196389'/>
+      <elf-symbol name='drm_panel_get_modes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1c4c33f'/>
+      <elf-symbol name='drm_panel_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x381425f7'/>
+      <elf-symbol name='drm_panel_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500ab92b'/>
+      <elf-symbol name='drm_panel_notifier_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6d2e74d'/>
+      <elf-symbol name='drm_panel_notifier_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63a6087c'/>
+      <elf-symbol name='drm_panel_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcbd0bf8'/>
+      <elf-symbol name='drm_panel_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b199943'/>
+      <elf-symbol name='drm_panel_unprepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe34822e5'/>
+      <elf-symbol name='drm_plane_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10dc612c'/>
+      <elf-symbol name='drm_plane_create_alpha_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84eee894'/>
+      <elf-symbol name='drm_plane_create_blend_mode_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd711ac68'/>
+      <elf-symbol name='drm_plane_create_color_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ab025ad'/>
+      <elf-symbol name='drm_plane_create_rotation_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb611ae1'/>
+      <elf-symbol name='drm_plane_create_zpos_immutable_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x932e3780'/>
+      <elf-symbol name='drm_plane_create_zpos_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59d9a824'/>
+      <elf-symbol name='drm_plane_enable_fb_damage_clips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5815548'/>
+      <elf-symbol name='drm_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x214c2520'/>
+      <elf-symbol name='drm_prime_gem_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x774385d3'/>
+      <elf-symbol name='drm_prime_pages_to_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf140cf1'/>
+      <elf-symbol name='drm_prime_sg_to_page_addr_arrays' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42b8d395'/>
+      <elf-symbol name='drm_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28779e52'/>
+      <elf-symbol name='drm_property_blob_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a575c20'/>
+      <elf-symbol name='drm_property_blob_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c50a4eb'/>
+      <elf-symbol name='drm_property_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb116a602'/>
+      <elf-symbol name='drm_property_create_bitmask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbe4fee2'/>
+      <elf-symbol name='drm_property_create_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e3faf61'/>
+      <elf-symbol name='drm_property_create_enum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3c9f579'/>
+      <elf-symbol name='drm_property_create_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1898fed7'/>
+      <elf-symbol name='drm_property_lookup_blob' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28c49b3e'/>
+      <elf-symbol name='drm_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fea8a2c'/>
+      <elf-symbol name='drm_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521ad6d0'/>
+      <elf-symbol name='drm_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69591876'/>
+      <elf-symbol name='drm_rect_calc_hscale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d50570f'/>
+      <elf-symbol name='drm_rect_calc_vscale' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91fec1cc'/>
+      <elf-symbol name='drm_rect_intersect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x871ab41a'/>
+      <elf-symbol name='drm_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x457002b'/>
+      <elf-symbol name='drm_rotation_simplify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf666902'/>
+      <elf-symbol name='drm_send_event_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb54db77b'/>
+      <elf-symbol name='drm_set_preferred_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc60363ba'/>
+      <elf-symbol name='drm_state_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67a97f26'/>
+      <elf-symbol name='drm_sysfs_hotplug_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x367a3ee8'/>
+      <elf-symbol name='drm_universal_plane_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x602a99e1'/>
+      <elf-symbol name='drm_vblank_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ee7fa9f'/>
+      <elf-symbol name='drm_vma_offset_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21c5c26'/>
+      <elf-symbol name='drm_vma_offset_lookup_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c06514e'/>
+      <elf-symbol name='drm_vma_offset_manager_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ca0833d'/>
+      <elf-symbol name='drm_vma_offset_manager_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc73cda3c'/>
+      <elf-symbol name='drm_vma_offset_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd592615'/>
+      <elf-symbol name='drm_wait_one_vblank' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35cf0d85'/>
+      <elf-symbol name='drop_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70e039c'/>
+      <elf-symbol name='dst_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x932c1a5d'/>
+      <elf-symbol name='dump_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf2cebf'/>
+      <elf-symbol name='dump_stack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b2dc060'/>
+      <elf-symbol name='dw_pcie_host_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x354e7c08'/>
+      <elf-symbol name='dw_pcie_msi_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5230f357'/>
+      <elf-symbol name='dw_pcie_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7791e066'/>
+      <elf-symbol name='dw_pcie_read_dbi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22861a'/>
+      <elf-symbol name='dw_pcie_setup_rc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0d70e2c'/>
+      <elf-symbol name='dw_pcie_wait_for_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c779379'/>
+      <elf-symbol name='dw_pcie_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe9a83d5'/>
+      <elf-symbol name='dw_pcie_write_dbi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33a8ed62'/>
+      <elf-symbol name='ehci_init_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7807cfc9'/>
+      <elf-symbol name='ehci_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28a5e30a'/>
+      <elf-symbol name='ehci_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x847818b8'/>
+      <elf-symbol name='enable_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcec0987'/>
+      <elf-symbol name='enable_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x335c570f'/>
+      <elf-symbol name='end_buffer_read_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4c33fc1'/>
+      <elf-symbol name='eth_commit_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x690a72b1'/>
+      <elf-symbol name='eth_mac_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa313e9e7'/>
+      <elf-symbol name='eth_platform_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14f8b138'/>
+      <elf-symbol name='eth_prepare_mac_addr_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22bfbc22'/>
+      <elf-symbol name='eth_type_trans' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d808386'/>
+      <elf-symbol name='eth_validate_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52338ff4'/>
+      <elf-symbol name='ether_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb16bfd16'/>
+      <elf-symbol name='ethtool_op_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70a964e5'/>
+      <elf-symbol name='ethtool_op_get_ts_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9283f79f'/>
+      <elf-symbol name='event_triggers_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x510ba548'/>
+      <elf-symbol name='extcon_find_edev_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee0faeda'/>
+      <elf-symbol name='extcon_get_edev_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fbb0a58'/>
+      <elf-symbol name='extcon_get_edev_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffa98220'/>
+      <elf-symbol name='extcon_get_extcon_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19b822ea'/>
+      <elf-symbol name='extcon_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf95eaf42'/>
+      <elf-symbol name='extcon_get_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc91afd91'/>
+      <elf-symbol name='extcon_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c13fd9f'/>
+      <elf-symbol name='extcon_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfef73f3e'/>
+      <elf-symbol name='extcon_set_property_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d00cba'/>
+      <elf-symbol name='extcon_set_state_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec6f3c1f'/>
+      <elf-symbol name='extcon_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf7d28a1'/>
+      <elf-symbol name='fasync_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x106888f4'/>
+      <elf-symbol name='fd_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f37fac'/>
+      <elf-symbol name='fget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9de6de6'/>
+      <elf-symbol name='file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x751241'/>
+      <elf-symbol name='filemap_fdatawait_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3172ffa'/>
+      <elf-symbol name='filemap_fdatawrite_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5adf7791'/>
+      <elf-symbol name='filp_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95382c36'/>
+      <elf-symbol name='filp_open_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8219190f'/>
+      <elf-symbol name='find_last_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6a68816'/>
+      <elf-symbol name='find_next_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0a3d105'/>
+      <elf-symbol name='find_next_zero_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x479c3c86'/>
+      <elf-symbol name='find_snd_usb_substream' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa15aef52'/>
+      <elf-symbol name='find_vma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6495770'/>
+      <elf-symbol name='find_vpid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15663513'/>
+      <elf-symbol name='finish_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92540fbf'/>
+      <elf-symbol name='firmware_request_nowarn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3546cd0'/>
+      <elf-symbol name='fixed_phy_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6255871'/>
+      <elf-symbol name='fixed_phy_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a7e5bb7'/>
+      <elf-symbol name='flush_dcache_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda51e5a9'/>
+      <elf-symbol name='flush_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1148c0ea'/>
+      <elf-symbol name='flush_signals' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcffccf60'/>
+      <elf-symbol name='flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4735ac17'/>
+      <elf-symbol name='flush_workqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42160169'/>
+      <elf-symbol name='fput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34043a38'/>
+      <elf-symbol name='frame_vector_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1dee5f1'/>
+      <elf-symbol name='frame_vector_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff903b43'/>
+      <elf-symbol name='frame_vector_to_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x689f370d'/>
+      <elf-symbol name='frame_vector_to_pfns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcdc14d6'/>
+      <elf-symbol name='free_buffer_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa36de7c'/>
+      <elf-symbol name='free_io_pgtable_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1485a307'/>
+      <elf-symbol name='free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1514a3b'/>
+      <elf-symbol name='free_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa43e2493'/>
+      <elf-symbol name='free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4302d0eb'/>
+      <elf-symbol name='free_pages_exact' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb44339a'/>
+      <elf-symbol name='free_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9ec4e21'/>
+      <elf-symbol name='free_percpu_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc6bec66'/>
+      <elf-symbol name='freezing_slow_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3e4b941'/>
+      <elf-symbol name='freq_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc83dc59'/>
+      <elf-symbol name='freq_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x156f33cf'/>
+      <elf-symbol name='freq_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b28a16'/>
+      <elf-symbol name='freq_reg_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dada2fa'/>
+      <elf-symbol name='fs_ftype_to_dtype' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3805cd1'/>
+      <elf-symbol name='fsl8250_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa8c8e68'/>
+      <elf-symbol name='fsync_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadfd7871'/>
+      <elf-symbol name='full_name_hash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6eaaea1'/>
+      <elf-symbol name='fwnode_connection_find_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96defee1'/>
+      <elf-symbol name='fwnode_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa71ec725'/>
+      <elf-symbol name='fwnode_handle_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe68bf1bb'/>
+      <elf-symbol name='fwnode_property_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff75a34'/>
+      <elf-symbol name='fwnode_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfcdf1e8'/>
+      <elf-symbol name='fwnode_property_read_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2441dc04'/>
+      <elf-symbol name='fwnode_property_read_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x656d18de'/>
+      <elf-symbol name='gcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea124bd1'/>
+      <elf-symbol name='gen_pool_add_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbefa51a3'/>
+      <elf-symbol name='gen_pool_alloc_algo_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b593aa8'/>
+      <elf-symbol name='gen_pool_avail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0d3f0a4'/>
+      <elf-symbol name='gen_pool_best_fit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb737b185'/>
+      <elf-symbol name='gen_pool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xced0f4d4'/>
+      <elf-symbol name='gen_pool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c224cda'/>
+      <elf-symbol name='gen_pool_dma_alloc_align' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xada31e57'/>
+      <elf-symbol name='gen_pool_dma_zalloc_align' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d210724'/>
+      <elf-symbol name='gen_pool_fixed_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57900416'/>
+      <elf-symbol name='gen_pool_free_owner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60ba97c'/>
+      <elf-symbol name='gen_pool_set_algo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96e5d30f'/>
+      <elf-symbol name='gen_pool_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2464da17'/>
+      <elf-symbol name='gen_pool_virt_to_phys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d0ba682'/>
+      <elf-symbol name='generic_block_bmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3361c2'/>
+      <elf-symbol name='generic_cont_expand_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e3f3de6'/>
+      <elf-symbol name='generic_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x177cf375'/>
+      <elf-symbol name='generic_end_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87a6b294'/>
+      <elf-symbol name='generic_error_remove_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe4733b0'/>
+      <elf-symbol name='generic_fh_to_dentry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf86ba46c'/>
+      <elf-symbol name='generic_fh_to_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x580ddc55'/>
+      <elf-symbol name='generic_file_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2185ea'/>
+      <elf-symbol name='generic_file_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe40f38c1'/>
+      <elf-symbol name='generic_file_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d83d8'/>
+      <elf-symbol name='generic_file_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd4a1d97'/>
+      <elf-symbol name='generic_file_read_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16c870ac'/>
+      <elf-symbol name='generic_file_splice_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcad47a2'/>
+      <elf-symbol name='generic_file_write_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa917cf73'/>
+      <elf-symbol name='generic_fillattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82a32636'/>
+      <elf-symbol name='generic_handle_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ceaf0d5'/>
+      <elf-symbol name='generic_key_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a043f7'/>
+      <elf-symbol name='generic_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4485813b'/>
+      <elf-symbol name='generic_read_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb765ca2'/>
+      <elf-symbol name='generic_start_io_acct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7b480a3'/>
+      <elf-symbol name='generic_write_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23718261'/>
+      <elf-symbol name='genl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc1b1a24'/>
+      <elf-symbol name='genl_register_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33f655d0'/>
+      <elf-symbol name='genl_unregister_family' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde1c339a'/>
+      <elf-symbol name='genlmsg_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f87e480'/>
+      <elf-symbol name='genphy_read_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a955daf'/>
+      <elf-symbol name='genphy_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83167f6f'/>
+      <elf-symbol name='get_cpu_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5cf5a33'/>
+      <elf-symbol name='get_cpu_idle_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fe899b7'/>
+      <elf-symbol name='get_cpu_idle_time_us' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b9793a2'/>
+      <elf-symbol name='get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12c763ec'/>
+      <elf-symbol name='get_device_system_crosststamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66ef3875'/>
+      <elf-symbol name='get_governor_parent_kobj' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd77d8142'/>
+      <elf-symbol name='get_next_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe953b21f'/>
+      <elf-symbol name='get_option' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0e10781'/>
+      <elf-symbol name='get_pid_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde1db599'/>
+      <elf-symbol name='get_random_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79aa04a2'/>
+      <elf-symbol name='get_random_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd36dc10c'/>
+      <elf-symbol name='get_task_exe_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e9cc1ed'/>
+      <elf-symbol name='get_task_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63b38ce4'/>
+      <elf-symbol name='get_tree_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa20ded8b'/>
+      <elf-symbol name='get_tree_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58bcdab9'/>
+      <elf-symbol name='get_unmapped_area' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb915de4'/>
+      <elf-symbol name='get_unused_fd_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa843805a'/>
+      <elf-symbol name='get_user_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d88e347'/>
+      <elf-symbol name='get_user_pages_fast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92906237'/>
+      <elf-symbol name='get_user_pages_remote' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc43687b4'/>
+      <elf-symbol name='get_vaddr_frames' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655611bf'/>
+      <elf-symbol name='get_zeroed_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf09b5d9a'/>
+      <elf-symbol name='getboottime64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef464c28'/>
+      <elf-symbol name='gf128mul_lle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e13f6f6'/>
+      <elf-symbol name='gnss_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc020a71f'/>
+      <elf-symbol name='gnss_deregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1537899'/>
+      <elf-symbol name='gnss_insert_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f1ea4bb'/>
+      <elf-symbol name='gnss_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab1d7b81'/>
+      <elf-symbol name='gnss_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31f2c7de'/>
+      <elf-symbol name='gov_attr_set_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8407cbd'/>
+      <elf-symbol name='gov_attr_set_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb08d927d'/>
+      <elf-symbol name='gov_attr_set_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf0ddd44'/>
+      <elf-symbol name='gov_update_cpu_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77699e9e'/>
+      <elf-symbol name='gpio_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe990052'/>
+      <elf-symbol name='gpio_free_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0d1656c'/>
+      <elf-symbol name='gpio_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47229b5c'/>
+      <elf-symbol name='gpio_request_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x403f9529'/>
+      <elf-symbol name='gpio_to_desc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63edcf64'/>
+      <elf-symbol name='gpiochip_add_data_with_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b628ac7'/>
+      <elf-symbol name='gpiochip_add_pin_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb6155bb'/>
+      <elf-symbol name='gpiochip_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7345886'/>
+      <elf-symbol name='gpiochip_generic_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e595995'/>
+      <elf-symbol name='gpiochip_generic_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c4fa63f'/>
+      <elf-symbol name='gpiochip_generic_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d4b99c'/>
+      <elf-symbol name='gpiochip_get_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bf3d7fe'/>
+      <elf-symbol name='gpiochip_line_is_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6586ea35'/>
+      <elf-symbol name='gpiochip_lock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51049cbb'/>
+      <elf-symbol name='gpiochip_populate_parent_fwspec_fourcell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d560b6'/>
+      <elf-symbol name='gpiochip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c90d1a5'/>
+      <elf-symbol name='gpiochip_unlock_as_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x348f6cea'/>
+      <elf-symbol name='gpiod_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4012848'/>
+      <elf-symbol name='gpiod_direction_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10a1301f'/>
+      <elf-symbol name='gpiod_direction_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f39a96'/>
+      <elf-symbol name='gpiod_direction_output_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6a85c24'/>
+      <elf-symbol name='gpiod_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1266524'/>
+      <elf-symbol name='gpiod_get_direction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1477377'/>
+      <elf-symbol name='gpiod_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ed7d6dd'/>
+      <elf-symbol name='gpiod_get_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1da01f9b'/>
+      <elf-symbol name='gpiod_get_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a8a9d5d'/>
+      <elf-symbol name='gpiod_get_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86cfde3a'/>
+      <elf-symbol name='gpiod_get_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x550696d7'/>
+      <elf-symbol name='gpiod_is_active_low' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd5125cb'/>
+      <elf-symbol name='gpiod_set_consumer_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61cc2572'/>
+      <elf-symbol name='gpiod_set_debounce' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeafc9a87'/>
+      <elf-symbol name='gpiod_set_raw_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74a5f44e'/>
+      <elf-symbol name='gpiod_set_raw_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc040d953'/>
+      <elf-symbol name='gpiod_set_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb26f4053'/>
+      <elf-symbol name='gpiod_set_value_cansleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60af9944'/>
+      <elf-symbol name='gpiod_to_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0e7ea44'/>
+      <elf-symbol name='gpiod_to_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd85ab98a'/>
+      <elf-symbol name='gre_add_protocol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46d50d0e'/>
+      <elf-symbol name='gre_del_protocol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69b7487e'/>
+      <elf-symbol name='gro_cells_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f54ead7'/>
+      <elf-symbol name='gro_cells_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc530cb23'/>
+      <elf-symbol name='gro_cells_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a983b48'/>
+      <elf-symbol name='gs_alloc_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed92d186'/>
+      <elf-symbol name='gs_free_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb70f45cd'/>
+      <elf-symbol name='gserial_alloc_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33bfdca2'/>
+      <elf-symbol name='gserial_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6079b148'/>
+      <elf-symbol name='gserial_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60dd8811'/>
+      <elf-symbol name='gserial_free_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6652875'/>
+      <elf-symbol name='handle_bad_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2586264b'/>
+      <elf-symbol name='handle_edge_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2492c8f'/>
+      <elf-symbol name='handle_fasteoi_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78cf978'/>
+      <elf-symbol name='handle_level_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96829634'/>
+      <elf-symbol name='handle_nested_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x549525ef'/>
+      <elf-symbol name='handle_simple_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392af444'/>
+      <elf-symbol name='handle_sysrq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7647726c'/>
+      <elf-symbol name='have_governor_per_policy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47aad3b9'/>
+      <elf-symbol name='hci_alloc_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfc88cba'/>
+      <elf-symbol name='hci_free_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddbda670'/>
+      <elf-symbol name='hci_recv_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x680d4177'/>
+      <elf-symbol name='hci_register_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffa71e7b'/>
+      <elf-symbol name='hci_unregister_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8d5c617'/>
+      <elf-symbol name='hdmi_audio_infoframe_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb14ab1ef'/>
+      <elf-symbol name='hdmi_audio_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29e1e204'/>
+      <elf-symbol name='hdmi_avi_infoframe_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x148f46e3'/>
+      <elf-symbol name='hdmi_avi_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x809712ff'/>
+      <elf-symbol name='hdmi_infoframe_pack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x595d8002'/>
+      <elf-symbol name='hex2bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2edbeaf7'/>
+      <elf-symbol name='hex_dump_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe916dc6'/>
+      <elf-symbol name='hex_to_bin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11f7ed4c'/>
+      <elf-symbol name='hrtimer_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500514f9'/>
+      <elf-symbol name='hrtimer_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5529cbf8'/>
+      <elf-symbol name='hrtimer_forward' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54d3d43c'/>
+      <elf-symbol name='hrtimer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11d6940e'/>
+      <elf-symbol name='hrtimer_start_range_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3827429d'/>
+      <elf-symbol name='hrtimer_try_to_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa55b0436'/>
+      <elf-symbol name='hvc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x339b9b75'/>
+      <elf-symbol name='hvc_instantiate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4893657f'/>
+      <elf-symbol name='hvc_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9833bc0c'/>
+      <elf-symbol name='hvc_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51f01525'/>
+      <elf-symbol name='hvc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x229eb088'/>
+      <elf-symbol name='hwrng_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cfb19d0'/>
+      <elf-symbol name='hwrng_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb605aeff'/>
+      <elf-symbol name='hwspin_lock_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x782ba41a'/>
+      <elf-symbol name='hwspin_lock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c7950e9'/>
+      <elf-symbol name='hwspin_lock_request_specific' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb1dc069'/>
+      <elf-symbol name='hwspin_lock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a02e87c'/>
+      <elf-symbol name='i2c_add_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28cb9046'/>
+      <elf-symbol name='i2c_add_numbered_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ea0d52c'/>
+      <elf-symbol name='i2c_del_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb36a2e8'/>
+      <elf-symbol name='i2c_del_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x480f5714'/>
+      <elf-symbol name='i2c_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe42b55d9'/>
+      <elf-symbol name='i2c_generic_scl_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e85d10e'/>
+      <elf-symbol name='i2c_get_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc9d2a3d'/>
+      <elf-symbol name='i2c_get_dma_safe_msg_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42041512'/>
+      <elf-symbol name='i2c_new_ancillary_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1037c8ae'/>
+      <elf-symbol name='i2c_new_dummy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9f57972'/>
+      <elf-symbol name='i2c_new_dummy_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb051276e'/>
+      <elf-symbol name='i2c_new_probed_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7162c17'/>
+      <elf-symbol name='i2c_parse_fw_timings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ce6826d'/>
+      <elf-symbol name='i2c_put_adapter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20e01c15'/>
+      <elf-symbol name='i2c_put_dma_safe_msg_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dae16e4'/>
+      <elf-symbol name='i2c_recover_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x923c31e7'/>
+      <elf-symbol name='i2c_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x594fc0ce'/>
+      <elf-symbol name='i2c_smbus_read_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9f86db4'/>
+      <elf-symbol name='i2c_smbus_read_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x989b57c1'/>
+      <elf-symbol name='i2c_smbus_read_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd063ccd'/>
+      <elf-symbol name='i2c_smbus_write_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x336f1351'/>
+      <elf-symbol name='i2c_smbus_write_byte_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58f7fbc0'/>
+      <elf-symbol name='i2c_smbus_write_i2c_block_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x635b4ee2'/>
+      <elf-symbol name='i2c_smbus_write_word_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x352db360'/>
+      <elf-symbol name='i2c_smbus_xfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfade9788'/>
+      <elf-symbol name='i2c_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x337fae10'/>
+      <elf-symbol name='i2c_transfer_buffer_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38ffb6e9'/>
+      <elf-symbol name='i2c_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd2434b3'/>
+      <elf-symbol name='i2c_verify_client' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5da5c4b4'/>
+      <elf-symbol name='icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b589c9c'/>
+      <elf-symbol name='icc_link_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x670ae775'/>
+      <elf-symbol name='icc_node_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x181c7649'/>
+      <elf-symbol name='icc_node_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x151f9726'/>
+      <elf-symbol name='icc_node_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd35d6b29'/>
+      <elf-symbol name='icc_node_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc58a3ee6'/>
+      <elf-symbol name='icc_provider_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x804300e2'/>
+      <elf-symbol name='icc_provider_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ea304a8'/>
+      <elf-symbol name='icc_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29d732fd'/>
+      <elf-symbol name='icc_set_bw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x943509e6'/>
+      <elf-symbol name='icc_set_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d6677ca'/>
+      <elf-symbol name='icmp6_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7055fe5f'/>
+      <elf-symbol name='ida_alloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a02573'/>
+      <elf-symbol name='ida_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7d5f92e'/>
+      <elf-symbol name='ida_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffb7c514'/>
+      <elf-symbol name='idr_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8f11603'/>
+      <elf-symbol name='idr_alloc_cyclic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91f44510'/>
+      <elf-symbol name='idr_alloc_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12ab31f1'/>
+      <elf-symbol name='idr_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e17b3ae'/>
+      <elf-symbol name='idr_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20978fb9'/>
+      <elf-symbol name='idr_for_each' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d40b6f3'/>
+      <elf-symbol name='idr_get_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc57c48a3'/>
+      <elf-symbol name='idr_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x954f099c'/>
+      <elf-symbol name='idr_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7665a95b'/>
+      <elf-symbol name='idr_replace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b82b9a1'/>
+      <elf-symbol name='ieee80211_alloc_hw_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cd7a983'/>
+      <elf-symbol name='ieee80211_amsdu_to_8023s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30e7105e'/>
+      <elf-symbol name='ieee80211_ap_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72616142'/>
+      <elf-symbol name='ieee80211_beacon_get_template' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a984374'/>
+      <elf-symbol name='ieee80211_beacon_get_tim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e525a78'/>
+      <elf-symbol name='ieee80211_beacon_loss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x272d0c7d'/>
+      <elf-symbol name='ieee80211_bss_get_elem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb695a89d'/>
+      <elf-symbol name='ieee80211_channel_to_freq_khz' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafe8b001'/>
+      <elf-symbol name='ieee80211_chswitch_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1cc9e15'/>
+      <elf-symbol name='ieee80211_connection_loss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d23a14e'/>
+      <elf-symbol name='ieee80211_cqm_beacon_loss_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe758c69d'/>
+      <elf-symbol name='ieee80211_cqm_rssi_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f6463ca'/>
+      <elf-symbol name='ieee80211_csa_finish' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa45d9e10'/>
+      <elf-symbol name='ieee80211_csa_is_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5793a024'/>
+      <elf-symbol name='ieee80211_csa_update_counter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe80dfcda'/>
+      <elf-symbol name='ieee80211_data_to_8023_exthdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x714ad90d'/>
+      <elf-symbol name='ieee80211_find_sta' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb99f202'/>
+      <elf-symbol name='ieee80211_find_sta_by_ifaddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a83defc'/>
+      <elf-symbol name='ieee80211_free_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4641b1e2'/>
+      <elf-symbol name='ieee80211_free_txskb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa56b7ef2'/>
+      <elf-symbol name='ieee80211_freq_khz_to_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6bedf402'/>
+      <elf-symbol name='ieee80211_get_channel_khz' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2953e447'/>
+      <elf-symbol name='ieee80211_get_hdrlen_from_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc51b453a'/>
+      <elf-symbol name='ieee80211_get_tx_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99c69e7c'/>
+      <elf-symbol name='ieee80211_hdrlen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ef39823'/>
+      <elf-symbol name='ieee80211_iter_chan_contexts_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf357b1'/>
+      <elf-symbol name='ieee80211_iterate_active_interfaces_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea065bc'/>
+      <elf-symbol name='ieee80211_iterate_interfaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71407a75'/>
+      <elf-symbol name='ieee80211_iterate_stations_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee29a2aa'/>
+      <elf-symbol name='ieee80211_manage_rx_ba_offl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9c7e53a'/>
+      <elf-symbol name='ieee80211_next_txq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e6d6810'/>
+      <elf-symbol name='ieee80211_nullfunc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad2cfa6d'/>
+      <elf-symbol name='ieee80211_probereq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaacf7e17'/>
+      <elf-symbol name='ieee80211_proberesp_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x259c0466'/>
+      <elf-symbol name='ieee80211_pspoll_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8dc5631'/>
+      <elf-symbol name='ieee80211_queue_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b67a53b'/>
+      <elf-symbol name='ieee80211_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2a8cf9e'/>
+      <elf-symbol name='ieee80211_radar_detected' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9e67790'/>
+      <elf-symbol name='ieee80211_radiotap_iterator_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac97a207'/>
+      <elf-symbol name='ieee80211_radiotap_iterator_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46312808'/>
+      <elf-symbol name='ieee80211_ready_on_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x639f1f0'/>
+      <elf-symbol name='ieee80211_register_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73204fc6'/>
+      <elf-symbol name='ieee80211_remain_on_channel_expired' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f894c55'/>
+      <elf-symbol name='ieee80211_report_low_ack' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7870d014'/>
+      <elf-symbol name='ieee80211_restart_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bcdb007'/>
+      <elf-symbol name='ieee80211_rx_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15aee1ab'/>
+      <elf-symbol name='ieee80211_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44dab51'/>
+      <elf-symbol name='ieee80211_scan_completed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe22f7b82'/>
+      <elf-symbol name='ieee80211_sched_scan_results' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd078ca8'/>
+      <elf-symbol name='ieee80211_sched_scan_stopped' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e9d4314'/>
+      <elf-symbol name='ieee80211_sta_ps_transition' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fbaa878'/>
+      <elf-symbol name='ieee80211_sta_register_airtime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f32a695'/>
+      <elf-symbol name='ieee80211_start_tx_ba_cb_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc87581e7'/>
+      <elf-symbol name='ieee80211_stop_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x553ccb2c'/>
+      <elf-symbol name='ieee80211_stop_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9175db9c'/>
+      <elf-symbol name='ieee80211_stop_rx_ba_session' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d259de2'/>
+      <elf-symbol name='ieee80211_stop_tx_ba_cb_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd939ffcf'/>
+      <elf-symbol name='ieee80211_tdls_oper_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b8fcab'/>
+      <elf-symbol name='ieee80211_tx_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5516af8'/>
+      <elf-symbol name='ieee80211_tx_rate_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa15cb00d'/>
+      <elf-symbol name='ieee80211_tx_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a780445'/>
+      <elf-symbol name='ieee80211_tx_status_irqsafe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b9e37d7'/>
+      <elf-symbol name='ieee80211_txq_get_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d3a8ce2'/>
+      <elf-symbol name='ieee80211_txq_may_transmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8382db20'/>
+      <elf-symbol name='ieee80211_txq_schedule_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa896d442'/>
+      <elf-symbol name='ieee80211_unregister_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a9e2731'/>
+      <elf-symbol name='ieee80211_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e48c741'/>
+      <elf-symbol name='ieee80211_wake_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33d9a9b7'/>
+      <elf-symbol name='iget5_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda264ac'/>
+      <elf-symbol name='iget_failed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x879a2ae9'/>
+      <elf-symbol name='iget_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f638fe7'/>
+      <elf-symbol name='igrab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5278c08'/>
+      <elf-symbol name='ihold' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7c0f41a'/>
+      <elf-symbol name='iio_alloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x213c2e80'/>
+      <elf-symbol name='iio_buffer_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6289c1bb'/>
+      <elf-symbol name='iio_buffer_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51a29f46'/>
+      <elf-symbol name='iio_channel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dfe0fce'/>
+      <elf-symbol name='iio_channel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c14a316'/>
+      <elf-symbol name='iio_dealloc_pollfunc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x514f4283'/>
+      <elf-symbol name='iio_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe0d31cc'/>
+      <elf-symbol name='iio_device_attach_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x163dadaa'/>
+      <elf-symbol name='iio_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3386e5b8'/>
+      <elf-symbol name='iio_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0c92f60'/>
+      <elf-symbol name='iio_map_array_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa533ae3c'/>
+      <elf-symbol name='iio_map_array_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49d6c81a'/>
+      <elf-symbol name='iio_pollfunc_store_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf76bbeb'/>
+      <elf-symbol name='iio_push_to_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x398ee715'/>
+      <elf-symbol name='iio_read_channel_processed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc949745d'/>
+      <elf-symbol name='iio_read_channel_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f130e88'/>
+      <elf-symbol name='iio_trigger_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77a5ce7d'/>
+      <elf-symbol name='iio_trigger_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45e54ecd'/>
+      <elf-symbol name='iio_trigger_notify_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3522e20'/>
+      <elf-symbol name='iio_trigger_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25399aa7'/>
+      <elf-symbol name='iio_trigger_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x313a50d7'/>
+      <elf-symbol name='iio_triggered_buffer_postenable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f303a6'/>
+      <elf-symbol name='iio_triggered_buffer_predisable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c01946a'/>
+      <elf-symbol name='iio_write_channel_attribute' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8dfdcde2'/>
+      <elf-symbol name='ilookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e39b2ef'/>
+      <elf-symbol name='import_iovec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3f2cc5'/>
+      <elf-symbol name='in4_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac5fcec0'/>
+      <elf-symbol name='in6_dev_finish_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc46f97c'/>
+      <elf-symbol name='in6_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x609bcd98'/>
+      <elf-symbol name='in_egroup_p' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39461d6a'/>
+      <elf-symbol name='in_group_p' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b8059bd'/>
+      <elf-symbol name='inc_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf51c55cb'/>
+      <elf-symbol name='inc_zone_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd2c971'/>
+      <elf-symbol name='inet_dev_addr_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57d7456a'/>
+      <elf-symbol name='inet_diag_bc_sk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6440ddef'/>
+      <elf-symbol name='inet_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f9d422e'/>
+      <elf-symbol name='inet_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f1de7b6'/>
+      <elf-symbol name='inet_proto_csum_replace4' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc906f03'/>
+      <elf-symbol name='inet_select_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5862a5ea'/>
+      <elf-symbol name='inet_sk_diag_fill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3373f003'/>
+      <elf-symbol name='init_dummy_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b4978fc'/>
+      <elf-symbol name='init_pseudo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8722751c'/>
+      <elf-symbol name='init_special_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x302409d9'/>
+      <elf-symbol name='init_srcu_struct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87da0360'/>
+      <elf-symbol name='init_timer_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79cf5987'/>
+      <elf-symbol name='init_wait_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe487975'/>
+      <elf-symbol name='inode_init_once' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9b9fc2d'/>
+      <elf-symbol name='inode_nohighmem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x335fc5e7'/>
+      <elf-symbol name='input_alloc_absinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd43e13f9'/>
+      <elf-symbol name='input_allocate_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b59f34f'/>
+      <elf-symbol name='input_close_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb51de171'/>
+      <elf-symbol name='input_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b0a2f3d'/>
+      <elf-symbol name='input_ff_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5be1ee39'/>
+      <elf-symbol name='input_ff_create_memless' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x562f1561'/>
+      <elf-symbol name='input_ff_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffe6d2b1'/>
+      <elf-symbol name='input_free_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a8d8b50'/>
+      <elf-symbol name='input_mt_destroy_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x737cee0f'/>
+      <elf-symbol name='input_mt_get_slot_by_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2703eda5'/>
+      <elf-symbol name='input_mt_init_slots' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa11b3bc7'/>
+      <elf-symbol name='input_mt_report_pointer_emulation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0ffa27'/>
+      <elf-symbol name='input_mt_report_slot_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a8b66ee'/>
+      <elf-symbol name='input_mt_sync_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1bb5122'/>
+      <elf-symbol name='input_open_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f9c54fd'/>
+      <elf-symbol name='input_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8e57f'/>
+      <elf-symbol name='input_register_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc1b3f54'/>
+      <elf-symbol name='input_register_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x596feec8'/>
+      <elf-symbol name='input_scancode_to_scalar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c256e1f'/>
+      <elf-symbol name='input_set_abs_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c4884af'/>
+      <elf-symbol name='input_set_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe176655'/>
+      <elf-symbol name='input_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98100458'/>
+      <elf-symbol name='input_unregister_handle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73c696ba'/>
+      <elf-symbol name='input_unregister_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3698943b'/>
+      <elf-symbol name='int_pow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1af267f8'/>
+      <elf-symbol name='int_to_scsilun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ed90adc'/>
+      <elf-symbol name='invalidate_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5fdecd94'/>
+      <elf-symbol name='invalidate_inode_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a10e5d2'/>
+      <elf-symbol name='invalidate_mapping_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7b19fb3'/>
+      <elf-symbol name='io_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93a6e0b2'/>
+      <elf-symbol name='iommu_alloc_resv_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf40724'/>
+      <elf-symbol name='iommu_attach_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75bc0a51'/>
+      <elf-symbol name='iommu_attach_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fc4370'/>
+      <elf-symbol name='iommu_detach_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44fa1c01'/>
+      <elf-symbol name='iommu_device_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc12a3575'/>
+      <elf-symbol name='iommu_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0d69953'/>
+      <elf-symbol name='iommu_device_sysfs_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb14c248b'/>
+      <elf-symbol name='iommu_device_sysfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85c2018a'/>
+      <elf-symbol name='iommu_device_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e4886d7'/>
+      <elf-symbol name='iommu_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0a6d252'/>
+      <elf-symbol name='iommu_dma_get_resv_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd98990dc'/>
+      <elf-symbol name='iommu_dma_reserve_iova' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5243c4e5'/>
+      <elf-symbol name='iommu_domain_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd40612c2'/>
+      <elf-symbol name='iommu_domain_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x715b0642'/>
+      <elf-symbol name='iommu_domain_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b4cf4ec'/>
+      <elf-symbol name='iommu_domain_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef754c57'/>
+      <elf-symbol name='iommu_fwspec_add_ids' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4658e20e'/>
+      <elf-symbol name='iommu_fwspec_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18bebdbb'/>
+      <elf-symbol name='iommu_get_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d294c11'/>
+      <elf-symbol name='iommu_get_domain_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa49cbb1'/>
+      <elf-symbol name='iommu_group_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d22bb58'/>
+      <elf-symbol name='iommu_group_for_each_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1ac45fa'/>
+      <elf-symbol name='iommu_group_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2c25db'/>
+      <elf-symbol name='iommu_group_get_for_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1742ccf5'/>
+      <elf-symbol name='iommu_group_get_iommudata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd55ad93b'/>
+      <elf-symbol name='iommu_group_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89485687'/>
+      <elf-symbol name='iommu_group_ref_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d6d0bbc'/>
+      <elf-symbol name='iommu_group_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36075bb5'/>
+      <elf-symbol name='iommu_group_remove_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d854a57'/>
+      <elf-symbol name='iommu_group_set_iommudata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc66b77b1'/>
+      <elf-symbol name='iommu_group_set_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcdd5b99'/>
+      <elf-symbol name='iommu_iova_to_phys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf683fd80'/>
+      <elf-symbol name='iommu_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd83f62'/>
+      <elf-symbol name='iommu_map_sg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccdee31b'/>
+      <elf-symbol name='iommu_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc16bdcf'/>
+      <elf-symbol name='iommu_put_dma_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6b29e9a'/>
+      <elf-symbol name='iommu_register_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc349323d'/>
+      <elf-symbol name='iommu_report_device_fault' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55b4720d'/>
+      <elf-symbol name='iommu_set_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50501904'/>
+      <elf-symbol name='iommu_unmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94cc574b'/>
+      <elf-symbol name='iommu_unregister_device_fault_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x770ef4cf'/>
+      <elf-symbol name='ion_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad6ec691'/>
+      <elf-symbol name='ion_buffer_prep_noncached' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x810da84'/>
+      <elf-symbol name='ion_buffer_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd659ec0e'/>
+      <elf-symbol name='ion_device_remove_heap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66030666'/>
+      <elf-symbol name='ion_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60cc470d'/>
+      <elf-symbol name='ion_heap_map_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x352b3ec9'/>
+      <elf-symbol name='ion_heap_map_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31de5841'/>
+      <elf-symbol name='ion_heap_unmap_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc1b3af6'/>
+      <elf-symbol name='ion_query_heaps_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4abc39a'/>
+      <elf-symbol name='iounmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedc03953'/>
+      <elf-symbol name='iov_iter_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76ad1edf'/>
+      <elf-symbol name='ip6_find_1stfragopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x884b6f1e'/>
+      <elf-symbol name='ip6_local_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d7a0a45'/>
+      <elf-symbol name='ip6_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2a77845'/>
+      <elf-symbol name='ip6_route_output_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfc770ea'/>
+      <elf-symbol name='ip6_update_pmtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd618aff'/>
+      <elf-symbol name='ip6t_alloc_initial_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0139873'/>
+      <elf-symbol name='ip6t_do_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbfdcf7d'/>
+      <elf-symbol name='ip6t_register_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab2ba842'/>
+      <elf-symbol name='ip6t_unregister_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f38a96'/>
+      <elf-symbol name='ip_compute_csum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20eadeb6'/>
+      <elf-symbol name='ip_local_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedb3df39'/>
+      <elf-symbol name='ip_route_output_flow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25c0cfce'/>
+      <elf-symbol name='ip_send_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2124474'/>
+      <elf-symbol name='ipcomp_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ada1c3'/>
+      <elf-symbol name='ipcomp_init_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d70e84'/>
+      <elf-symbol name='ipcomp_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82a919be'/>
+      <elf-symbol name='ipcomp_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4da496c8'/>
+      <elf-symbol name='iput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f3fb38a'/>
+      <elf-symbol name='ipv4_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1aad077'/>
+      <elf-symbol name='ipv4_update_pmtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53bdd318'/>
+      <elf-symbol name='ipv6_chk_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c3119a9'/>
+      <elf-symbol name='ipv6_dev_get_saddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d1db527'/>
+      <elf-symbol name='ipv6_ext_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x452ba683'/>
+      <elf-symbol name='ipv6_find_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1f87e35'/>
+      <elf-symbol name='ipv6_select_ident' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98b21b10'/>
+      <elf-symbol name='ipv6_skip_exthdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2e1dd0a'/>
+      <elf-symbol name='ir_lirc_scancode_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x159aa599'/>
+      <elf-symbol name='ir_raw_gen_manchester' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cf52901'/>
+      <elf-symbol name='ir_raw_gen_pd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e12e343'/>
+      <elf-symbol name='ir_raw_gen_pl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ad91f6e'/>
+      <elf-symbol name='ir_raw_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f049e96'/>
+      <elf-symbol name='ir_raw_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1cedb45d'/>
+      <elf-symbol name='irq_chip_ack_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9a6ad2'/>
+      <elf-symbol name='irq_chip_disable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x991572eb'/>
+      <elf-symbol name='irq_chip_enable_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x550c18a3'/>
+      <elf-symbol name='irq_chip_eoi_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a41dfd2'/>
+      <elf-symbol name='irq_chip_get_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x888bd4af'/>
+      <elf-symbol name='irq_chip_mask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e23f52c'/>
+      <elf-symbol name='irq_chip_retrigger_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc832d7e'/>
+      <elf-symbol name='irq_chip_set_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aad78fc'/>
+      <elf-symbol name='irq_chip_set_parent_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a1e08d5'/>
+      <elf-symbol name='irq_chip_set_type_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd3a956'/>
+      <elf-symbol name='irq_chip_set_vcpu_affinity_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac70e979'/>
+      <elf-symbol name='irq_chip_set_wake_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49764a2b'/>
+      <elf-symbol name='irq_chip_unmask_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9a07e37'/>
+      <elf-symbol name='irq_create_fwspec_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a8118fe'/>
+      <elf-symbol name='irq_create_mapping_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3199f922'/>
+      <elf-symbol name='irq_create_of_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x525d585c'/>
+      <elf-symbol name='irq_dispose_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c7db649'/>
+      <elf-symbol name='irq_domain_add_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e0532d8'/>
+      <elf-symbol name='irq_domain_alloc_irqs_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a0ddf9e'/>
+      <elf-symbol name='irq_domain_create_hierarchy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f633adc'/>
+      <elf-symbol name='irq_domain_free_irqs_common' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41b2e9c6'/>
+      <elf-symbol name='irq_domain_free_irqs_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe54b3c64'/>
+      <elf-symbol name='irq_domain_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeec21b92'/>
+      <elf-symbol name='irq_domain_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d0f60e6'/>
+      <elf-symbol name='irq_domain_set_hwirq_and_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e321e69'/>
+      <elf-symbol name='irq_domain_set_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4af43a'/>
+      <elf-symbol name='irq_domain_update_bus_token' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x500d9e80'/>
+      <elf-symbol name='irq_domain_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x869846e2'/>
+      <elf-symbol name='irq_domain_xlate_onetwocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb2679f2'/>
+      <elf-symbol name='irq_domain_xlate_twocell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75131b7f'/>
+      <elf-symbol name='irq_find_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x171e2446'/>
+      <elf-symbol name='irq_find_matching_fwspec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b4acec'/>
+      <elf-symbol name='irq_gc_ack_set_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb72ede70'/>
+      <elf-symbol name='irq_gc_mask_clr_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa299ba48'/>
+      <elf-symbol name='irq_gc_mask_set_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c198a8c'/>
+      <elf-symbol name='irq_get_domain_generic_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee257bbe'/>
+      <elf-symbol name='irq_get_irq_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1871135'/>
+      <elf-symbol name='irq_modify_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7522f3ba'/>
+      <elf-symbol name='irq_of_parse_and_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f77668b'/>
+      <elf-symbol name='irq_set_affinity_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a7b4b03'/>
+      <elf-symbol name='irq_set_affinity_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7082834f'/>
+      <elf-symbol name='irq_set_chained_handler_and_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc4ff5bd'/>
+      <elf-symbol name='irq_set_chip_and_handler_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99940894'/>
+      <elf-symbol name='irq_set_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20a789ac'/>
+      <elf-symbol name='irq_set_handler_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dcb88a0'/>
+      <elf-symbol name='irq_set_irq_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc477a2'/>
+      <elf-symbol name='irq_set_irq_wake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce2840e7'/>
+      <elf-symbol name='irq_set_irqchip_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb88dbfce'/>
+      <elf-symbol name='irq_set_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc6596fa'/>
+      <elf-symbol name='irq_setup_alt_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48376be1'/>
+      <elf-symbol name='irq_to_desc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe33278e5'/>
+      <elf-symbol name='irq_work_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfb5871c'/>
+      <elf-symbol name='irq_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6923ce63'/>
+      <elf-symbol name='is_bad_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7eeb9b5a'/>
+      <elf-symbol name='is_console_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x944a564d'/>
+      <elf-symbol name='iterate_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9aaa4a94'/>
+      <elf-symbol name='iunique' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6211790'/>
+      <elf-symbol name='jiffies_64_to_clock_t' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1ddf995'/>
+      <elf-symbol name='jiffies_to_msecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37befc70'/>
+      <elf-symbol name='jiffies_to_usecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f24de73'/>
+      <elf-symbol name='kasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb384d37'/>
+      <elf-symbol name='kern_mount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd646827'/>
+      <elf-symbol name='kern_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91d22bcf'/>
+      <elf-symbol name='kern_unmount' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc93998c6'/>
+      <elf-symbol name='kernel_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fa6c655'/>
+      <elf-symbol name='kernel_getsockname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea5327e2'/>
+      <elf-symbol name='kernel_neon_begin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fd180e7'/>
+      <elf-symbol name='kernel_neon_end' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8a8110c'/>
+      <elf-symbol name='kernel_param_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49de5030'/>
+      <elf-symbol name='kernel_param_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35045bae'/>
+      <elf-symbol name='kernel_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf184d189'/>
+      <elf-symbol name='kernel_recvmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf934e4d'/>
+      <elf-symbol name='kernel_sendmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8c6e108'/>
+      <elf-symbol name='kernel_sigaction' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6df1aaf1'/>
+      <elf-symbol name='kernfs_find_and_get_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75956452'/>
+      <elf-symbol name='kernfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb158c819'/>
+      <elf-symbol name='kernfs_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9983c21'/>
+      <elf-symbol name='key_invalidate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7b0ede0'/>
+      <elf-symbol name='key_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x615f8017'/>
+      <elf-symbol name='key_revoke' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7167e31'/>
+      <elf-symbol name='key_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5abc1ca4'/>
+      <elf-symbol name='keyring_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58c05a13'/>
+      <elf-symbol name='kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37a0cba'/>
+      <elf-symbol name='kfree_call_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19f462ab'/>
+      <elf-symbol name='kfree_const' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf474fdcb'/>
+      <elf-symbol name='kfree_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8dc89c5'/>
+      <elf-symbol name='kfree_skb_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2521f19'/>
+      <elf-symbol name='kill_anon_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf078a10'/>
+      <elf-symbol name='kill_block_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16d822f0'/>
+      <elf-symbol name='kill_fasync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4144b99b'/>
+      <elf-symbol name='kill_litter_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a49925b'/>
+      <elf-symbol name='kill_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe1bb81e'/>
+      <elf-symbol name='kmalloc_order' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbe80fdb'/>
+      <elf-symbol name='kmalloc_order_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8b9f817'/>
+      <elf-symbol name='kmem_cache_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71460eea'/>
+      <elf-symbol name='kmem_cache_alloc_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8e563e'/>
+      <elf-symbol name='kmem_cache_alloc_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4d04abb'/>
+      <elf-symbol name='kmem_cache_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f61bc34'/>
+      <elf-symbol name='kmem_cache_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x253d23aa'/>
+      <elf-symbol name='kmem_cache_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x197750ba'/>
+      <elf-symbol name='kmem_cache_free_bulk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed127907'/>
+      <elf-symbol name='kmemdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66b4cc41'/>
+      <elf-symbol name='kmemdup_nul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f548ad'/>
+      <elf-symbol name='kobject_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6f4f60e'/>
+      <elf-symbol name='kobject_create_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7aff490'/>
+      <elf-symbol name='kobject_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaafacce3'/>
+      <elf-symbol name='kobject_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ddde786'/>
+      <elf-symbol name='kobject_get_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53ef7eff'/>
+      <elf-symbol name='kobject_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c2fe6fe'/>
+      <elf-symbol name='kobject_init_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabe979b'/>
+      <elf-symbol name='kobject_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a471220'/>
+      <elf-symbol name='kobject_uevent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b1efdcc'/>
+      <elf-symbol name='kobject_uevent_env' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x334512ae'/>
+      <elf-symbol name='krealloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1e12d81'/>
+      <elf-symbol name='kset_create_and_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38c4af7b'/>
+      <elf-symbol name='kset_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6da4fa7b'/>
+      <elf-symbol name='ksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ea5d10'/>
+      <elf-symbol name='kstrdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d39b0a7'/>
+      <elf-symbol name='kstrdup_const' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x365e7911'/>
+      <elf-symbol name='kstrdup_quotable_cmdline' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c535ec7'/>
+      <elf-symbol name='kstrndup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eacf8a5'/>
+      <elf-symbol name='kstrtobool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0875eb1'/>
+      <elf-symbol name='kstrtobool_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda9fc7ae'/>
+      <elf-symbol name='kstrtoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2276db98'/>
+      <elf-symbol name='kstrtoint_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23c9891c'/>
+      <elf-symbol name='kstrtoll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x779a18af'/>
+      <elf-symbol name='kstrtos8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcbdf60f'/>
+      <elf-symbol name='kstrtos8_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb417f082'/>
+      <elf-symbol name='kstrtou16' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b0192da'/>
+      <elf-symbol name='kstrtou16_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe13d5d07'/>
+      <elf-symbol name='kstrtou8' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46045dd7'/>
+      <elf-symbol name='kstrtou8_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1179daa'/>
+      <elf-symbol name='kstrtouint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69ad2f20'/>
+      <elf-symbol name='kstrtouint_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcb926cd'/>
+      <elf-symbol name='kstrtoul_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a6af65c'/>
+      <elf-symbol name='kstrtoull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c80c06c'/>
+      <elf-symbol name='kstrtoull_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54245b39'/>
+      <elf-symbol name='kthread_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa89c4735'/>
+      <elf-symbol name='kthread_cancel_delayed_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f525e45'/>
+      <elf-symbol name='kthread_cancel_work_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba09d7c9'/>
+      <elf-symbol name='kthread_create_on_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x214fb3de'/>
+      <elf-symbol name='kthread_create_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0cb9f2'/>
+      <elf-symbol name='kthread_delayed_work_timer_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1b48cc6'/>
+      <elf-symbol name='kthread_destroy_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x504e6d05'/>
+      <elf-symbol name='kthread_flush_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x189c1fb1'/>
+      <elf-symbol name='kthread_flush_worker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85d1c723'/>
+      <elf-symbol name='kthread_freezable_should_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca7d8764'/>
+      <elf-symbol name='kthread_mod_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0cb3469'/>
+      <elf-symbol name='kthread_park' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6471e764'/>
+      <elf-symbol name='kthread_parkme' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf95322f4'/>
+      <elf-symbol name='kthread_queue_delayed_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a146ab'/>
+      <elf-symbol name='kthread_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81a8223b'/>
+      <elf-symbol name='kthread_should_park' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79defbe1'/>
+      <elf-symbol name='kthread_should_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3f7646e'/>
+      <elf-symbol name='kthread_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa873cff8'/>
+      <elf-symbol name='kthread_unpark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f3aa923'/>
+      <elf-symbol name='kthread_worker_fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x955b0e2e'/>
+      <elf-symbol name='ktime_add_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3952887'/>
+      <elf-symbol name='ktime_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb43f9365'/>
+      <elf-symbol name='ktime_get_boot_fast_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ef6b54f'/>
+      <elf-symbol name='ktime_get_mono_fast_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ebe366f'/>
+      <elf-symbol name='ktime_get_raw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9714e0bb'/>
+      <elf-symbol name='ktime_get_raw_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1edb69d6'/>
+      <elf-symbol name='ktime_get_real_seconds' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x953e1b9e'/>
+      <elf-symbol name='ktime_get_real_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ec6ca96'/>
+      <elf-symbol name='ktime_get_ts64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e515be6'/>
+      <elf-symbol name='ktime_get_with_offset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4f0da12'/>
+      <elf-symbol name='kvasprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x587b0954'/>
+      <elf-symbol name='kvfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aa1756e'/>
+      <elf-symbol name='kvmalloc_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x599fb41c'/>
+      <elf-symbol name='kzfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a4497db'/>
+      <elf-symbol name='l2tp_session_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a832557'/>
+      <elf-symbol name='l2tp_session_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2863ab9d'/>
+      <elf-symbol name='l2tp_session_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0edddd'/>
+      <elf-symbol name='l2tp_session_get_nth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9732106d'/>
+      <elf-symbol name='l2tp_session_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cee36a2'/>
+      <elf-symbol name='l2tp_session_set_header_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43c59766'/>
+      <elf-symbol name='l2tp_tunnel_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15972f22'/>
+      <elf-symbol name='l2tp_tunnel_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3719cd6'/>
+      <elf-symbol name='l2tp_tunnel_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68880f7b'/>
+      <elf-symbol name='l2tp_tunnel_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x810b1016'/>
+      <elf-symbol name='l2tp_tunnel_get_nth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe64d62f5'/>
+      <elf-symbol name='l2tp_tunnel_get_session' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7183c94'/>
+      <elf-symbol name='l2tp_tunnel_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cbf70e6'/>
+      <elf-symbol name='l2tp_udp_encap_recv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7eaac327'/>
+      <elf-symbol name='l2tp_xmit_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd63dc2f'/>
+      <elf-symbol name='led_classdev_flash_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6430968a'/>
+      <elf-symbol name='led_classdev_flash_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x157a8cf3'/>
+      <elf-symbol name='led_classdev_register_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11be0a69'/>
+      <elf-symbol name='led_classdev_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb396dc27'/>
+      <elf-symbol name='led_get_default_pattern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53c6c49'/>
+      <elf-symbol name='led_set_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47710d64'/>
+      <elf-symbol name='led_trigger_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x843ec021'/>
+      <elf-symbol name='led_trigger_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc731309b'/>
+      <elf-symbol name='led_trigger_register_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52e2dc06'/>
+      <elf-symbol name='led_trigger_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655ee821'/>
+      <elf-symbol name='led_trigger_unregister_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6adb587'/>
+      <elf-symbol name='list_sort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcba4abe3'/>
+      <elf-symbol name='ll_rw_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9df6768'/>
+      <elf-symbol name='llist_add_batch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a1840e'/>
+      <elf-symbol name='load_nls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76bc3268'/>
+      <elf-symbol name='load_nls_default' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8302ed4b'/>
+      <elf-symbol name='lock_sock_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a3e76ab'/>
+      <elf-symbol name='lockref_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9b85ef6'/>
+      <elf-symbol name='logfc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ff10023'/>
+      <elf-symbol name='lookup_one_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd20eb77a'/>
+      <elf-symbol name='lzo1x_1_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x787c882b'/>
+      <elf-symbol name='lzo1x_decompress_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df8fbc'/>
+      <elf-symbol name='lzorle1x_1_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79f697e4'/>
+      <elf-symbol name='mac_pton' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x652032cb'/>
+      <elf-symbol name='make_bad_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa6018aa'/>
+      <elf-symbol name='mark_buffer_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45ef418b'/>
+      <elf-symbol name='mark_page_accessed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcc3d084'/>
+      <elf-symbol name='match_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e3567f7'/>
+      <elf-symbol name='match_octal' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x815b5dd4'/>
+      <elf-symbol name='match_strdup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacf4d843'/>
+      <elf-symbol name='match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81188c30'/>
+      <elf-symbol name='match_token' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44e9a829'/>
+      <elf-symbol name='mbox_chan_received_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba5833f1'/>
+      <elf-symbol name='mbox_chan_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61d6b491'/>
+      <elf-symbol name='mbox_client_txdone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca85cf0d'/>
+      <elf-symbol name='mbox_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d9e1c1d'/>
+      <elf-symbol name='mbox_controller_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7bff1d8'/>
+      <elf-symbol name='mbox_free_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd5b8240'/>
+      <elf-symbol name='mbox_request_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22832290'/>
+      <elf-symbol name='mbox_request_channel_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x263e2d9c'/>
+      <elf-symbol name='mbox_send_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1951a283'/>
+      <elf-symbol name='mdiobus_alloc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x888aee40'/>
+      <elf-symbol name='mdiobus_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fe8a8b6'/>
+      <elf-symbol name='mdiobus_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6052139b'/>
+      <elf-symbol name='mdiobus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb78d0e'/>
+      <elf-symbol name='mdiobus_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ba9887f'/>
+      <elf-symbol name='media_create_intf_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7954849'/>
+      <elf-symbol name='media_create_pad_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b58a8f'/>
+      <elf-symbol name='media_device_cleanup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd30310b4'/>
+      <elf-symbol name='media_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x959d441c'/>
+      <elf-symbol name='media_device_register_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf8fddde'/>
+      <elf-symbol name='media_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x432129e8'/>
+      <elf-symbol name='media_device_unregister_entity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8935fed'/>
+      <elf-symbol name='media_devnode_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb98014ae'/>
+      <elf-symbol name='media_devnode_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e94295c'/>
+      <elf-symbol name='media_entity_find_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9175fde7'/>
+      <elf-symbol name='media_entity_pads_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc072ba92'/>
+      <elf-symbol name='media_entity_remote_pad' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x757d6b44'/>
+      <elf-symbol name='media_entity_remove_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dd97270'/>
+      <elf-symbol name='media_entity_setup_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cb9c989'/>
+      <elf-symbol name='media_graph_walk_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b17d467'/>
+      <elf-symbol name='media_graph_walk_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea2c9d9d'/>
+      <elf-symbol name='media_graph_walk_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe07f1a3d'/>
+      <elf-symbol name='media_remove_intf_links' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e082b1'/>
+      <elf-symbol name='memblock_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f0ec720'/>
+      <elf-symbol name='memchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xa07a37f0'/>
+      <elf-symbol name='memchr_inv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8df92f66'/>
+      <elf-symbol name='memcmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x449ad0a7'/>
+      <elf-symbol name='memcpy' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x4829a47e'/>
+      <elf-symbol name='memdup_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9291cd3b'/>
+      <elf-symbol name='memmove' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9f1d63'/>
+      <elf-symbol name='memory_read_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65e0d6d7'/>
+      <elf-symbol name='memparse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27864d57'/>
+      <elf-symbol name='mempool_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3762aec'/>
+      <elf-symbol name='mempool_alloc_slab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc972449f'/>
+      <elf-symbol name='mempool_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1953c958'/>
+      <elf-symbol name='mempool_create_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c122bcf'/>
+      <elf-symbol name='mempool_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9034a696'/>
+      <elf-symbol name='mempool_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa897e3e7'/>
+      <elf-symbol name='mempool_free_slab' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a99a016'/>
+      <elf-symbol name='mempool_kfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a037cf1'/>
+      <elf-symbol name='mempool_kmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd35a6d31'/>
+      <elf-symbol name='memremap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d924f20'/>
+      <elf-symbol name='memset' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xdcb764ad'/>
+      <elf-symbol name='memset32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x489eda10'/>
+      <elf-symbol name='memset64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed8a2d95'/>
+      <elf-symbol name='memunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e9fdd9d'/>
+      <elf-symbol name='memweight' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fe2ccbe'/>
+      <elf-symbol name='mfd_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa277603e'/>
+      <elf-symbol name='mfd_remove_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dc2205b'/>
+      <elf-symbol name='mii_check_media' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7aaee8fc'/>
+      <elf-symbol name='mii_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94d87971'/>
+      <elf-symbol name='mii_ethtool_gset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda9c4560'/>
+      <elf-symbol name='mii_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7588cc0'/>
+      <elf-symbol name='mii_link_ok' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x203ef498'/>
+      <elf-symbol name='mii_nway_restart' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebeae5d'/>
+      <elf-symbol name='mipi_dsi_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8215f96d'/>
+      <elf-symbol name='mipi_dsi_create_packet' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81ce66fa'/>
+      <elf-symbol name='mipi_dsi_dcs_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c127f19'/>
+      <elf-symbol name='mipi_dsi_dcs_set_display_brightness' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x610f244c'/>
+      <elf-symbol name='mipi_dsi_dcs_set_tear_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20214ba7'/>
+      <elf-symbol name='mipi_dsi_dcs_write_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xceab86e6'/>
+      <elf-symbol name='mipi_dsi_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9cce2d'/>
+      <elf-symbol name='mipi_dsi_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd27fe0'/>
+      <elf-symbol name='mipi_dsi_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc67891a7'/>
+      <elf-symbol name='mipi_dsi_driver_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee645378'/>
+      <elf-symbol name='mipi_dsi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd083aa6a'/>
+      <elf-symbol name='mipi_dsi_generic_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91397de8'/>
+      <elf-symbol name='mipi_dsi_generic_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8facc47b'/>
+      <elf-symbol name='mipi_dsi_host_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc58759f'/>
+      <elf-symbol name='mipi_dsi_host_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f4dd44e'/>
+      <elf-symbol name='mipi_dsi_packet_format_is_long' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadbeed61'/>
+      <elf-symbol name='mipi_dsi_set_maximum_return_packet_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4059d7ee'/>
+      <elf-symbol name='misc_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b4dfd89'/>
+      <elf-symbol name='misc_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91513e68'/>
+      <elf-symbol name='mktime64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb2f8a4'/>
+      <elf-symbol name='mm_trace_rss_stat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3f72a62'/>
+      <elf-symbol name='mmc_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a09d257'/>
+      <elf-symbol name='mmc_alloc_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d49ce15'/>
+      <elf-symbol name='mmc_app_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc135bda4'/>
+      <elf-symbol name='mmc_calc_max_discard' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8cd5e89'/>
+      <elf-symbol name='mmc_can_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a78ebe1'/>
+      <elf-symbol name='mmc_can_gpio_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75f9d64c'/>
+      <elf-symbol name='mmc_can_sanitize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d8a2e5c'/>
+      <elf-symbol name='mmc_can_secure_erase_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe30a16f1'/>
+      <elf-symbol name='mmc_can_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b739d57'/>
+      <elf-symbol name='mmc_cmdq_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79e78148'/>
+      <elf-symbol name='mmc_cmdq_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd3b4b3d'/>
+      <elf-symbol name='mmc_cqe_post_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84dd3296'/>
+      <elf-symbol name='mmc_cqe_recovery' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaf893d5'/>
+      <elf-symbol name='mmc_cqe_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dd1904e'/>
+      <elf-symbol name='mmc_cqe_start_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x682eb383'/>
+      <elf-symbol name='mmc_crypto_prepare_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbae9a8d1'/>
+      <elf-symbol name='mmc_crypto_setup_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39eb8e97'/>
+      <elf-symbol name='mmc_detect_card_removed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba9f4166'/>
+      <elf-symbol name='mmc_detect_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fa9f660'/>
+      <elf-symbol name='mmc_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44f2361'/>
+      <elf-symbol name='mmc_erase_group_aligned' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3383da7'/>
+      <elf-symbol name='mmc_flush_cache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f2a450c'/>
+      <elf-symbol name='mmc_free_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22544fd'/>
+      <elf-symbol name='mmc_get_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4648bdfd'/>
+      <elf-symbol name='mmc_get_ext_csd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x696f24d4'/>
+      <elf-symbol name='mmc_gpio_get_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0c5f0d'/>
+      <elf-symbol name='mmc_gpio_get_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94ca8bd9'/>
+      <elf-symbol name='mmc_gpiod_request_cd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb52e7e73'/>
+      <elf-symbol name='mmc_gpiod_request_cd_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x363a7d74'/>
+      <elf-symbol name='mmc_gpiod_request_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20344d66'/>
+      <elf-symbol name='mmc_hw_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x971f3ebc'/>
+      <elf-symbol name='mmc_of_parse' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x180882f6'/>
+      <elf-symbol name='mmc_of_parse_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6512aba0'/>
+      <elf-symbol name='mmc_put_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef38aa3'/>
+      <elf-symbol name='mmc_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x235a6a0a'/>
+      <elf-symbol name='mmc_regulator_get_supply' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20f7d4ae'/>
+      <elf-symbol name='mmc_regulator_set_ocr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa51ab6ef'/>
+      <elf-symbol name='mmc_regulator_set_vqmmc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a25dd5'/>
+      <elf-symbol name='mmc_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5c49281'/>
+      <elf-symbol name='mmc_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce57332'/>
+      <elf-symbol name='mmc_request_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e6d6a40'/>
+      <elf-symbol name='mmc_retune_pause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19180bf1'/>
+      <elf-symbol name='mmc_retune_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf59e2dba'/>
+      <elf-symbol name='mmc_retune_unpause' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d88a97e'/>
+      <elf-symbol name='mmc_run_bkops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aa88f07'/>
+      <elf-symbol name='mmc_send_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21b949ab'/>
+      <elf-symbol name='mmc_send_tuning' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9d16689'/>
+      <elf-symbol name='mmc_set_data_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfea26dce'/>
+      <elf-symbol name='mmc_start_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x910a3937'/>
+      <elf-symbol name='mmc_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f6a02b9'/>
+      <elf-symbol name='mmc_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f175f97'/>
+      <elf-symbol name='mmc_wait_for_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1156962'/>
+      <elf-symbol name='mmc_wait_for_req' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb77820e'/>
+      <elf-symbol name='mmput' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32fd2ec6'/>
+      <elf-symbol name='mod_delayed_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4f47221'/>
+      <elf-symbol name='mod_node_page_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcb2bfde'/>
+      <elf-symbol name='mod_timer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72cd0f7f'/>
+      <elf-symbol name='module_layout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f279e7b'/>
+      <elf-symbol name='module_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68dd06d2'/>
+      <elf-symbol name='mount_bdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19953e61'/>
+      <elf-symbol name='mpage_readpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f5aa845'/>
+      <elf-symbol name='mpage_readpages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdaf784a'/>
+      <elf-symbol name='mpage_writepages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaabf776'/>
+      <elf-symbol name='msi_desc_to_pci_sysdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41a57a45'/>
+      <elf-symbol name='msleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9a482f9'/>
+      <elf-symbol name='msleep_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5005fe'/>
+      <elf-symbol name='msm_pinctrl_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a9d5177'/>
+      <elf-symbol name='msm_pinctrl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22c6abf9'/>
+      <elf-symbol name='mutex_is_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x318d6fec'/>
+      <elf-symbol name='mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ab7989d'/>
+      <elf-symbol name='mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2db3d320'/>
+      <elf-symbol name='mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf21017d9'/>
+      <elf-symbol name='mutex_trylock_recursive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae7e3a35'/>
+      <elf-symbol name='mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x409bcb62'/>
+      <elf-symbol name='n_tty_ioctl_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x910daf9'/>
+      <elf-symbol name='napi_complete_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9105dcad'/>
+      <elf-symbol name='napi_consume_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad1d1777'/>
+      <elf-symbol name='napi_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc260f3'/>
+      <elf-symbol name='napi_gro_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdc865a1'/>
+      <elf-symbol name='napi_gro_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xecff2308'/>
+      <elf-symbol name='napi_hash_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b7cb23a'/>
+      <elf-symbol name='napi_schedule_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11ec0ef6'/>
+      <elf-symbol name='neigh_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12800782'/>
+      <elf-symbol name='net_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6ebc03b'/>
+      <elf-symbol name='netdev_alloc_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fe912f1'/>
+      <elf-symbol name='netdev_change_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4396a76'/>
+      <elf-symbol name='netdev_err' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc1a6ddd'/>
+      <elf-symbol name='netdev_increment_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69668826'/>
+      <elf-symbol name='netdev_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75e9c078'/>
+      <elf-symbol name='netdev_lower_state_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d92cc88'/>
+      <elf-symbol name='netdev_master_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x413c46d2'/>
+      <elf-symbol name='netdev_notify_peers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf789d201'/>
+      <elf-symbol name='netdev_pick_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d7d689d'/>
+      <elf-symbol name='netdev_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdfa3765a'/>
+      <elf-symbol name='netdev_rx_handler_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa7dc2a'/>
+      <elf-symbol name='netdev_rx_handler_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4394e78'/>
+      <elf-symbol name='netdev_upper_dev_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15ae32f0'/>
+      <elf-symbol name='netdev_upper_dev_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ad75747'/>
+      <elf-symbol name='netdev_warn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12c086db'/>
+      <elf-symbol name='netif_carrier_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73179c0c'/>
+      <elf-symbol name='netif_carrier_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x552b42c'/>
+      <elf-symbol name='netif_device_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad0edd43'/>
+      <elf-symbol name='netif_device_detach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x439566b4'/>
+      <elf-symbol name='netif_napi_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde4dfeb7'/>
+      <elf-symbol name='netif_napi_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x813b4f1'/>
+      <elf-symbol name='netif_receive_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x58fb5cd1'/>
+      <elf-symbol name='netif_rx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x542fa0a9'/>
+      <elf-symbol name='netif_rx_ni' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1df1d37'/>
+      <elf-symbol name='netif_schedule_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb64a9b6'/>
+      <elf-symbol name='netif_set_real_num_rx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0de1590'/>
+      <elf-symbol name='netif_set_real_num_tx_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a60f799'/>
+      <elf-symbol name='netif_stacked_transfer_operstate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bb5a9a3'/>
+      <elf-symbol name='netif_tx_stop_all_queues' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc797a85a'/>
+      <elf-symbol name='netif_tx_wake_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57f0899a'/>
+      <elf-symbol name='netlink_broadcast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64044752'/>
+      <elf-symbol name='netlink_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62eda852'/>
+      <elf-symbol name='netlink_has_listeners' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10ec7d61'/>
+      <elf-symbol name='netlink_kernel_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9912f486'/>
+      <elf-symbol name='netlink_net_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7af9564'/>
+      <elf-symbol name='netlink_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa599bb2'/>
+      <elf-symbol name='netlink_unicast' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebd4f776'/>
+      <elf-symbol name='netlink_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf54a8f7'/>
+      <elf-symbol name='new_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98f7df22'/>
+      <elf-symbol name='nf_conntrack_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a18c74'/>
+      <elf-symbol name='nf_conntrack_find_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb79976'/>
+      <elf-symbol name='nf_ct_get_tuplepr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5533d3f7'/>
+      <elf-symbol name='nf_ct_invert_tuple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe731af8'/>
+      <elf-symbol name='nf_ct_l4proto_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e079cb4'/>
+      <elf-symbol name='nf_register_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac3e3d0a'/>
+      <elf-symbol name='nf_unregister_net_hooks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48de5b73'/>
+      <elf-symbol name='nla_memcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1db1704'/>
+      <elf-symbol name='nla_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce81a2d1'/>
+      <elf-symbol name='nla_put_64bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c71b03'/>
+      <elf-symbol name='nla_put_nohdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcadadd39'/>
+      <elf-symbol name='nla_strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b640864'/>
+      <elf-symbol name='no_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97a373d4'/>
+      <elf-symbol name='no_seek_end_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc20eced'/>
+      <elf-symbol name='nonseekable_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96dc0cb9'/>
+      <elf-symbol name='noop_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9289b70'/>
+      <elf-symbol name='ns_capable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7858552'/>
+      <elf-symbol name='ns_to_timespec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66decfd5'/>
+      <elf-symbol name='ns_to_timespec64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e1e140e'/>
+      <elf-symbol name='ns_to_timeval' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f548802'/>
+      <elf-symbol name='nsecs_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffae8e8b'/>
+      <elf-symbol name='nvdimm_bus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9147419'/>
+      <elf-symbol name='nvdimm_bus_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa56fa91f'/>
+      <elf-symbol name='nvdimm_pmem_region_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x307fb935'/>
+      <elf-symbol name='nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a2f2de1'/>
+      <elf-symbol name='nvmem_cell_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85540ebc'/>
+      <elf-symbol name='nvmem_cell_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99f018c4'/>
+      <elf-symbol name='nvmem_cell_read_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61c1eeb5'/>
+      <elf-symbol name='nvmem_cell_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x202d4ed6'/>
+      <elf-symbol name='nvmem_device_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaefc10dd'/>
+      <elf-symbol name='nvmem_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x334a8d74'/>
+      <elf-symbol name='of_address_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6c1f1be'/>
+      <elf-symbol name='of_alias_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22bca29f'/>
+      <elf-symbol name='of_clk_add_hw_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadb39760'/>
+      <elf-symbol name='of_clk_add_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef608f86'/>
+      <elf-symbol name='of_clk_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62e67260'/>
+      <elf-symbol name='of_clk_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf78681d'/>
+      <elf-symbol name='of_clk_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdca04a6d'/>
+      <elf-symbol name='of_clk_get_from_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcecbad9e'/>
+      <elf-symbol name='of_clk_get_parent_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4b92647'/>
+      <elf-symbol name='of_clk_get_parent_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9316c37f'/>
+      <elf-symbol name='of_clk_hw_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd151355'/>
+      <elf-symbol name='of_clk_hw_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc715b510'/>
+      <elf-symbol name='of_clk_hw_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb423ebdb'/>
+      <elf-symbol name='of_clk_set_defaults' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3f99ff6'/>
+      <elf-symbol name='of_clk_src_onecell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb987cddb'/>
+      <elf-symbol name='of_clk_src_simple_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dce2412'/>
+      <elf-symbol name='of_count_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaeba997d'/>
+      <elf-symbol name='of_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2ae53ac'/>
+      <elf-symbol name='of_devfreq_cooling_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e0eefb3'/>
+      <elf-symbol name='of_devfreq_cooling_register_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x958480ed'/>
+      <elf-symbol name='of_device_get_match_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ab15d03'/>
+      <elf-symbol name='of_device_is_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3144fbfc'/>
+      <elf-symbol name='of_device_is_big_endian' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b08f046'/>
+      <elf-symbol name='of_device_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0799103'/>
+      <elf-symbol name='of_device_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57ebbb3e'/>
+      <elf-symbol name='of_device_request_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9aec422'/>
+      <elf-symbol name='of_device_uevent_modalias' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a88726b'/>
+      <elf-symbol name='of_dma_configure' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8ad4640'/>
+      <elf-symbol name='of_dma_controller_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3b3d6e9'/>
+      <elf-symbol name='of_dma_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefb8ae41'/>
+      <elf-symbol name='of_dma_is_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35c1e1a1'/>
+      <elf-symbol name='of_dma_request_slave_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf247e36'/>
+      <elf-symbol name='of_dma_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa545e22'/>
+      <elf-symbol name='of_drm_find_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1de7cc69'/>
+      <elf-symbol name='of_drm_find_panel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd75abf63'/>
+      <elf-symbol name='of_fdt_unflatten_tree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce7b997'/>
+      <elf-symbol name='of_find_backlight_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e71f1df'/>
+      <elf-symbol name='of_find_compatible_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa37f6988'/>
+      <elf-symbol name='of_find_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ffecacb'/>
+      <elf-symbol name='of_find_i2c_adapter_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x590d27da'/>
+      <elf-symbol name='of_find_i2c_device_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95c9fa87'/>
+      <elf-symbol name='of_find_matching_node_and_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8598233'/>
+      <elf-symbol name='of_find_mipi_dsi_host_by_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14461afa'/>
+      <elf-symbol name='of_find_node_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e54aa32'/>
+      <elf-symbol name='of_find_node_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0716981'/>
+      <elf-symbol name='of_find_node_by_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd3babcb'/>
+      <elf-symbol name='of_find_node_opts_by_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cf2acde'/>
+      <elf-symbol name='of_find_node_with_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa73788b8'/>
+      <elf-symbol name='of_find_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52254c20'/>
+      <elf-symbol name='of_genpd_add_provider_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bb84aeb'/>
+      <elf-symbol name='of_genpd_add_provider_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3039bfe2'/>
+      <elf-symbol name='of_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc123907a'/>
+      <elf-symbol name='of_genpd_del_provider' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c1f323b'/>
+      <elf-symbol name='of_get_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70ee527c'/>
+      <elf-symbol name='of_get_child_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdd11043'/>
+      <elf-symbol name='of_get_compatible_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e79686e'/>
+      <elf-symbol name='of_get_cpu_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5662fa9'/>
+      <elf-symbol name='of_get_dma_window' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5263db15'/>
+      <elf-symbol name='of_get_drm_display_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57314765'/>
+      <elf-symbol name='of_get_mac_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71ba1989'/>
+      <elf-symbol name='of_get_named_gpio_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0e22a5d'/>
+      <elf-symbol name='of_get_next_available_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72ed8b70'/>
+      <elf-symbol name='of_get_next_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c3681c2'/>
+      <elf-symbol name='of_get_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9007907'/>
+      <elf-symbol name='of_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38c390f9'/>
+      <elf-symbol name='of_get_regulator_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x881ea87c'/>
+      <elf-symbol name='of_graph_get_endpoint_by_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b92502'/>
+      <elf-symbol name='of_graph_get_next_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fd30633'/>
+      <elf-symbol name='of_graph_get_remote_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8395378a'/>
+      <elf-symbol name='of_graph_get_remote_port_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc3fe92b'/>
+      <elf-symbol name='of_graph_parse_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8b67940'/>
+      <elf-symbol name='of_hwspin_lock_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd747859c'/>
+      <elf-symbol name='of_hwspin_lock_get_id_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x801b77b'/>
+      <elf-symbol name='of_icc_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1caae79'/>
+      <elf-symbol name='of_icc_xlate_onecell' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd110231b'/>
+      <elf-symbol name='of_io_request_and_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6df53fdb'/>
+      <elf-symbol name='of_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47e2c811'/>
+      <elf-symbol name='of_irq_find_parent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd10314d'/>
+      <elf-symbol name='of_irq_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42043646'/>
+      <elf-symbol name='of_irq_get_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f538fa2'/>
+      <elf-symbol name='of_irq_parse_and_map_pci' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1d8e9a2'/>
+      <elf-symbol name='of_irq_parse_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cbc6de9'/>
+      <elf-symbol name='of_irq_to_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fdde659'/>
+      <elf-symbol name='of_machine_is_compatible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd31ccb06'/>
+      <elf-symbol name='of_match_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b45186e'/>
+      <elf-symbol name='of_match_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc656649b'/>
+      <elf-symbol name='of_mdiobus_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd57e1a07'/>
+      <elf-symbol name='of_modalias_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50681ad3'/>
+      <elf-symbol name='of_n_addr_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74dc5727'/>
+      <elf-symbol name='of_n_size_cells' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8cf6656'/>
+      <elf-symbol name='of_node_name_eq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82635d8d'/>
+      <elf-symbol name='of_nvmem_cell_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b471410'/>
+      <elf-symbol name='of_parse_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8b6e80d'/>
+      <elf-symbol name='of_parse_phandle_with_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9de034c9'/>
+      <elf-symbol name='of_parse_phandle_with_fixed_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfcac1fc'/>
+      <elf-symbol name='of_phandle_iterator_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x334b230e'/>
+      <elf-symbol name='of_phandle_iterator_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb370334a'/>
+      <elf-symbol name='of_phy_simple_xlate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1a14ea'/>
+      <elf-symbol name='of_platform_depopulate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c4ea9d7'/>
+      <elf-symbol name='of_platform_device_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabf4e54c'/>
+      <elf-symbol name='of_platform_populate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd8aee9f'/>
+      <elf-symbol name='of_prop_next_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bc6401c'/>
+      <elf-symbol name='of_prop_next_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x109b2c92'/>
+      <elf-symbol name='of_property_count_elems_of_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59f85572'/>
+      <elf-symbol name='of_property_match_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x958e700f'/>
+      <elf-symbol name='of_property_read_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d67646e'/>
+      <elf-symbol name='of_property_read_string_helper' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88748a82'/>
+      <elf-symbol name='of_property_read_u32_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e216618'/>
+      <elf-symbol name='of_property_read_u64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8455312'/>
+      <elf-symbol name='of_property_read_u64_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca3dfd9a'/>
+      <elf-symbol name='of_property_read_variable_u16_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a878399'/>
+      <elf-symbol name='of_property_read_variable_u32_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88219e72'/>
+      <elf-symbol name='of_property_read_variable_u64_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8afdd2d3'/>
+      <elf-symbol name='of_property_read_variable_u8_array' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3f5751f'/>
+      <elf-symbol name='of_pwm_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x570b55de'/>
+      <elf-symbol name='of_pwm_xlate_with_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb48b46b7'/>
+      <elf-symbol name='of_reserved_mem_device_init_by_idx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ae7ec8f'/>
+      <elf-symbol name='of_reserved_mem_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73e24e6e'/>
+      <elf-symbol name='of_reserved_mem_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bae2ecd'/>
+      <elf-symbol name='of_reset_control_array_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb977400'/>
+      <elf-symbol name='of_thermal_get_ntrips' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x618ef20c'/>
+      <elf-symbol name='of_thermal_get_trip_points' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cb7bc4b'/>
+      <elf-symbol name='of_thermal_is_trip_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33abb3ac'/>
+      <elf-symbol name='of_translate_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d47e62'/>
+      <elf-symbol name='of_usb_get_phy_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1727ed5'/>
+      <elf-symbol name='of_usb_host_tpl_support' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f01909f'/>
+      <elf-symbol name='on_each_cpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x294b9ea1'/>
+      <elf-symbol name='open_exec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a353d6d'/>
+      <elf-symbol name='orderly_poweroff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56256e8a'/>
+      <elf-symbol name='out_of_line_wait_on_bit_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3687850'/>
+      <elf-symbol name='page_endio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0f7d3cc'/>
+      <elf-symbol name='page_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdecaade0'/>
+      <elf-symbol name='page_mapping' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b5bedf2'/>
+      <elf-symbol name='pagecache_get_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x636e86e'/>
+      <elf-symbol name='panic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1e046cc'/>
+      <elf-symbol name='param_get_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5299f5d0'/>
+      <elf-symbol name='param_get_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x272604aa'/>
+      <elf-symbol name='param_set_bool' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84b36aef'/>
+      <elf-symbol name='param_set_copystring' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf067ed73'/>
+      <elf-symbol name='param_set_int' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5906a38'/>
+      <elf-symbol name='passthru_features_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6728b65'/>
+      <elf-symbol name='pci_alloc_irq_vectors_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbefb86a'/>
+      <elf-symbol name='pci_assign_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe35d1b5'/>
+      <elf-symbol name='pci_assign_unassigned_bus_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e7761f5'/>
+      <elf-symbol name='pci_bus_add_devices' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6128940b'/>
+      <elf-symbol name='pci_check_and_mask_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7ae1414'/>
+      <elf-symbol name='pci_check_and_unmask_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb05799e'/>
+      <elf-symbol name='pci_clear_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa49d750d'/>
+      <elf-symbol name='pci_common_swizzle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcaa7743d'/>
+      <elf-symbol name='pci_d3cold_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x310a75ea'/>
+      <elf-symbol name='pci_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96116da6'/>
+      <elf-symbol name='pci_device_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd73014'/>
+      <elf-symbol name='pci_device_is_present' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9613b12'/>
+      <elf-symbol name='pci_disable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5768721a'/>
+      <elf-symbol name='pci_disable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1127d103'/>
+      <elf-symbol name='pci_disable_msix' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b8bb09e'/>
+      <elf-symbol name='pci_disable_sriov' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b760cbc'/>
+      <elf-symbol name='pci_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2984e142'/>
+      <elf-symbol name='pci_enable_device_mem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4ab571'/>
+      <elf-symbol name='pci_enable_msi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfee9bb6b'/>
+      <elf-symbol name='pci_enable_msix_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe70fe03a'/>
+      <elf-symbol name='pci_enable_sriov' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x351d71c4'/>
+      <elf-symbol name='pci_enable_wake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac2aa6aa'/>
+      <elf-symbol name='pci_find_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2a7e254'/>
+      <elf-symbol name='pci_find_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd003e58e'/>
+      <elf-symbol name='pci_find_ext_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98eca016'/>
+      <elf-symbol name='pci_find_next_capability' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d956b08'/>
+      <elf-symbol name='pci_find_pcie_root_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd276105e'/>
+      <elf-symbol name='pci_free_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34405149'/>
+      <elf-symbol name='pci_free_irq_vectors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98d830fd'/>
+      <elf-symbol name='pci_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f8e0418'/>
+      <elf-symbol name='pci_get_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaef3d267'/>
+      <elf-symbol name='pci_intx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8fe3d22'/>
+      <elf-symbol name='pci_iomap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a6b9d05'/>
+      <elf-symbol name='pci_iomap_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b1f41f7'/>
+      <elf-symbol name='pci_ioremap_bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5595ff3b'/>
+      <elf-symbol name='pci_ioremap_wc_bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe42f1f4f'/>
+      <elf-symbol name='pci_irq_get_affinity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1ef25c6'/>
+      <elf-symbol name='pci_irq_vector' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99b8f2c1'/>
+      <elf-symbol name='pci_load_and_free_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b56d2cf'/>
+      <elf-symbol name='pci_load_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54bff1b'/>
+      <elf-symbol name='pci_lock_rescan_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddbeeecc'/>
+      <elf-symbol name='pci_match_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15c5c778'/>
+      <elf-symbol name='pci_msi_create_irq_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bf2ffe7'/>
+      <elf-symbol name='pci_msi_mask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x34bfc821'/>
+      <elf-symbol name='pci_msi_unmask_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x446ce0a6'/>
+      <elf-symbol name='pci_msi_vec_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaf5fe9d'/>
+      <elf-symbol name='pci_read_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1f04a8'/>
+      <elf-symbol name='pci_read_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x289aa4a4'/>
+      <elf-symbol name='pci_read_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c511aaf'/>
+      <elf-symbol name='pci_release_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3f5fa2e'/>
+      <elf-symbol name='pci_release_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24654f7f'/>
+      <elf-symbol name='pci_release_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf336b6bd'/>
+      <elf-symbol name='pci_request_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a9baf7f'/>
+      <elf-symbol name='pci_request_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6079129d'/>
+      <elf-symbol name='pci_request_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7be0792f'/>
+      <elf-symbol name='pci_request_selected_regions' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x299afe66'/>
+      <elf-symbol name='pci_rescan_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63675fb1'/>
+      <elf-symbol name='pci_reset_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x621f195c'/>
+      <elf-symbol name='pci_restore_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe42bbae4'/>
+      <elf-symbol name='pci_save_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ef5a2a1'/>
+      <elf-symbol name='pci_scan_child_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd13f45f9'/>
+      <elf-symbol name='pci_scan_root_bus_bridge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcabde58'/>
+      <elf-symbol name='pci_select_bars' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe98fb3b1'/>
+      <elf-symbol name='pci_set_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2728c711'/>
+      <elf-symbol name='pci_set_mwi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa56f3c64'/>
+      <elf-symbol name='pci_set_power_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d70aa5e'/>
+      <elf-symbol name='pci_stop_and_remove_bus_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2f7633'/>
+      <elf-symbol name='pci_store_saved_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x527e1d16'/>
+      <elf-symbol name='pci_unlock_rescan_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5790e7a0'/>
+      <elf-symbol name='pci_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c7f6238'/>
+      <elf-symbol name='pci_vfs_assigned' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0c1271'/>
+      <elf-symbol name='pci_walk_bus' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61a8eae7'/>
+      <elf-symbol name='pci_write_config_byte' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6799e61'/>
+      <elf-symbol name='pci_write_config_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8de7181'/>
+      <elf-symbol name='pci_write_config_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x242ff980'/>
+      <elf-symbol name='pcie_aspm_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd7c885a4'/>
+      <elf-symbol name='pcie_bus_configure_settings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fc680c9'/>
+      <elf-symbol name='pcie_capability_read_dword' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed8c2321'/>
+      <elf-symbol name='pcie_capability_read_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a00d372'/>
+      <elf-symbol name='pcie_capability_write_word' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf2276b0'/>
+      <elf-symbol name='pcim_enable_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddc9a62f'/>
+      <elf-symbol name='percpu_ref_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x284fe794'/>
+      <elf-symbol name='percpu_ref_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41b200f9'/>
+      <elf-symbol name='percpu_ref_switch_to_atomic_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12dbc8f6'/>
+      <elf-symbol name='percpu_ref_switch_to_percpu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26c622ee'/>
+      <elf-symbol name='perf_event_create_kernel_counter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bbee960'/>
+      <elf-symbol name='perf_event_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca8c1bf9'/>
+      <elf-symbol name='perf_event_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2ca90402'/>
+      <elf-symbol name='perf_event_read_value' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2ffede2'/>
+      <elf-symbol name='perf_event_release_kernel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56a06e6e'/>
+      <elf-symbol name='perf_trace_buf_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4eae733'/>
+      <elf-symbol name='perf_trace_run_bpf_submit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce68514'/>
+      <elf-symbol name='pfn_valid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51e77c97'/>
+      <elf-symbol name='phy_calibrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae138f4'/>
+      <elf-symbol name='phy_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ee2176f'/>
+      <elf-symbol name='phy_connect_direct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad8ce682'/>
+      <elf-symbol name='phy_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcd72d2a'/>
+      <elf-symbol name='phy_ethtool_get_eee' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ffe0f5'/>
+      <elf-symbol name='phy_ethtool_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ed8c45e'/>
+      <elf-symbol name='phy_ethtool_ksettings_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2cfaa87'/>
+      <elf-symbol name='phy_ethtool_ksettings_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69e6e84d'/>
+      <elf-symbol name='phy_ethtool_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x714207ac'/>
+      <elf-symbol name='phy_ethtool_set_eee' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe23df1df'/>
+      <elf-symbol name='phy_ethtool_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb47997c4'/>
+      <elf-symbol name='phy_ethtool_set_wol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x765b74c4'/>
+      <elf-symbol name='phy_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x171647d5'/>
+      <elf-symbol name='phy_find_first' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcca51629'/>
+      <elf-symbol name='phy_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x31d86bae'/>
+      <elf-symbol name='phy_mii_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbec4613a'/>
+      <elf-symbol name='phy_pm_runtime_get_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89b6cc43'/>
+      <elf-symbol name='phy_pm_runtime_put_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x605337fb'/>
+      <elf-symbol name='phy_power_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa172450f'/>
+      <elf-symbol name='phy_power_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x790ab49d'/>
+      <elf-symbol name='phy_print_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25122001'/>
+      <elf-symbol name='phy_read_mmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcfe80d65'/>
+      <elf-symbol name='phy_register_fixup_for_uid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b89fba0'/>
+      <elf-symbol name='phy_remove_link_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b9f9c7d'/>
+      <elf-symbol name='phy_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44c9da2a'/>
+      <elf-symbol name='phy_set_mode_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9957a889'/>
+      <elf-symbol name='phy_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5abf6a6'/>
+      <elf-symbol name='phy_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f698270'/>
+      <elf-symbol name='phy_unregister_fixup_for_uid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd738ca1b'/>
+      <elf-symbol name='phy_write_mmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3046564'/>
+      <elf-symbol name='pid_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7bb1a779'/>
+      <elf-symbol name='pin_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89e83216'/>
+      <elf-symbol name='pinconf_generic_dt_node_to_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5ede972'/>
+      <elf-symbol name='pinconf_generic_parse_dt_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7d0391e'/>
+      <elf-symbol name='pinctrl_add_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x568c31e7'/>
+      <elf-symbol name='pinctrl_dev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91b796af'/>
+      <elf-symbol name='pinctrl_force_sleep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f2d5e2c'/>
+      <elf-symbol name='pinctrl_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc95ae1ec'/>
+      <elf-symbol name='pinctrl_gpio_direction_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1bc5eebe'/>
+      <elf-symbol name='pinctrl_gpio_direction_output' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b8822d8'/>
+      <elf-symbol name='pinctrl_gpio_set_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b92d16e'/>
+      <elf-symbol name='pinctrl_lookup_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6abff9'/>
+      <elf-symbol name='pinctrl_pm_select_default_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1f6ae29'/>
+      <elf-symbol name='pinctrl_pm_select_idle_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6434232'/>
+      <elf-symbol name='pinctrl_pm_select_sleep_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x788ec893'/>
+      <elf-symbol name='pinctrl_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeef99467'/>
+      <elf-symbol name='pinctrl_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d2f8a03'/>
+      <elf-symbol name='pinctrl_remove_gpio_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4771eaaa'/>
+      <elf-symbol name='pinctrl_select_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14f975d3'/>
+      <elf-symbol name='pinctrl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd584ed63'/>
+      <elf-symbol name='pinctrl_utils_add_map_configs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9cc4ac3'/>
+      <elf-symbol name='pinctrl_utils_add_map_mux' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x458099e6'/>
+      <elf-symbol name='pinctrl_utils_free_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x894cb92d'/>
+      <elf-symbol name='pinctrl_utils_reserve_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab24cf5d'/>
+      <elf-symbol name='pipe_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba66184'/>
+      <elf-symbol name='pipe_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6d4edd0'/>
+      <elf-symbol name='platform_device_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbe048a52'/>
+      <elf-symbol name='platform_device_add_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde0f1e02'/>
+      <elf-symbol name='platform_device_add_properties' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19bbc82b'/>
+      <elf-symbol name='platform_device_add_resources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1c0bbea'/>
+      <elf-symbol name='platform_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa892b5a5'/>
+      <elf-symbol name='platform_device_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b584c46'/>
+      <elf-symbol name='platform_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x753a2282'/>
+      <elf-symbol name='platform_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fe7ef07'/>
+      <elf-symbol name='platform_device_register_full' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6090a287'/>
+      <elf-symbol name='platform_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86837f22'/>
+      <elf-symbol name='platform_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67298718'/>
+      <elf-symbol name='platform_get_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4609d8d9'/>
+      <elf-symbol name='platform_get_irq_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bd6ca52'/>
+      <elf-symbol name='platform_get_irq_byname_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23be6f55'/>
+      <elf-symbol name='platform_get_irq_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9726c11'/>
+      <elf-symbol name='platform_get_resource' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fe13c29'/>
+      <elf-symbol name='platform_get_resource_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28bfbacc'/>
+      <elf-symbol name='platform_irq_count' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5866ba72'/>
+      <elf-symbol name='platform_unregister_drivers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaab2e4d6'/>
+      <elf-symbol name='pm_generic_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e133ada'/>
+      <elf-symbol name='pm_generic_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a80caef'/>
+      <elf-symbol name='pm_generic_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b7ef77a'/>
+      <elf-symbol name='pm_generic_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd89a0a9'/>
+      <elf-symbol name='pm_genpd_add_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdeb09e5d'/>
+      <elf-symbol name='pm_genpd_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a0c33a1'/>
+      <elf-symbol name='pm_genpd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9750bc4d'/>
+      <elf-symbol name='pm_genpd_remove_subdomain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85f735d'/>
+      <elf-symbol name='pm_get_active_wakeup_sources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a8edb31'/>
+      <elf-symbol name='pm_print_active_wakeup_sources' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4065d168'/>
+      <elf-symbol name='pm_qos_add_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e5b03dc'/>
+      <elf-symbol name='pm_qos_add_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c763745'/>
+      <elf-symbol name='pm_qos_remove_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcac6160'/>
+      <elf-symbol name='pm_qos_remove_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd4e9d03'/>
+      <elf-symbol name='pm_qos_request_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb64bcb2'/>
+      <elf-symbol name='pm_qos_update_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7dc742f'/>
+      <elf-symbol name='pm_relax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc82df753'/>
+      <elf-symbol name='pm_runtime_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ede92f1'/>
+      <elf-symbol name='pm_runtime_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8db5d8aa'/>
+      <elf-symbol name='pm_runtime_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33d0b58e'/>
+      <elf-symbol name='pm_runtime_forbid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70fb30f6'/>
+      <elf-symbol name='pm_runtime_force_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72fe4d6'/>
+      <elf-symbol name='pm_runtime_force_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23a966be'/>
+      <elf-symbol name='pm_runtime_get_if_in_use' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f57b990'/>
+      <elf-symbol name='pm_runtime_irq_safe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a0b4f7'/>
+      <elf-symbol name='pm_runtime_no_callbacks' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1c4ca57'/>
+      <elf-symbol name='pm_runtime_set_autosuspend_delay' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dd8ee3c'/>
+      <elf-symbol name='pm_stay_awake' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f965329'/>
+      <elf-symbol name='pm_system_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c0215f2'/>
+      <elf-symbol name='pm_wakeup_dev_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe35f1584'/>
+      <elf-symbol name='pm_wakeup_ws_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60fa8d64'/>
+      <elf-symbol name='policy_has_boost_freq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x260f7b2'/>
+      <elf-symbol name='posix_acl_from_xattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fe7c3c7'/>
+      <elf-symbol name='power_supply_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd9846f4'/>
+      <elf-symbol name='power_supply_find_ocv2cap_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72784646'/>
+      <elf-symbol name='power_supply_get_battery_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb01fe9d'/>
+      <elf-symbol name='power_supply_get_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0aff7cb'/>
+      <elf-symbol name='power_supply_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65bde01a'/>
+      <elf-symbol name='power_supply_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57e44dfc'/>
+      <elf-symbol name='power_supply_ocv2cap_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cad8fc3'/>
+      <elf-symbol name='power_supply_powers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8028aabf'/>
+      <elf-symbol name='power_supply_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbe24633'/>
+      <elf-symbol name='power_supply_put_battery_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb557403'/>
+      <elf-symbol name='power_supply_reg_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x136209db'/>
+      <elf-symbol name='power_supply_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0f28c21'/>
+      <elf-symbol name='power_supply_set_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bf6f089'/>
+      <elf-symbol name='power_supply_temp2resist_simple' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b6150fb'/>
+      <elf-symbol name='power_supply_unreg_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b81c38b'/>
+      <elf-symbol name='power_supply_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef25448'/>
+      <elf-symbol name='ppp_channel_index' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79ced1db'/>
+      <elf-symbol name='ppp_dev_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x316da3ba'/>
+      <elf-symbol name='ppp_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe29f6987'/>
+      <elf-symbol name='ppp_input_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a82c9eb'/>
+      <elf-symbol name='ppp_output_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb65b6ede'/>
+      <elf-symbol name='ppp_register_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4364807'/>
+      <elf-symbol name='ppp_register_compressor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1792550c'/>
+      <elf-symbol name='ppp_register_net_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5ca6527'/>
+      <elf-symbol name='ppp_unit_number' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2440e203'/>
+      <elf-symbol name='ppp_unregister_channel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa93d6d32'/>
+      <elf-symbol name='ppp_unregister_compressor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x616dd7d2'/>
+      <elf-symbol name='pppox_compat_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96fdf88a'/>
+      <elf-symbol name='pppox_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97b9343f'/>
+      <elf-symbol name='pppox_unbind_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa8dec98'/>
+      <elf-symbol name='prandom_u32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfda9581f'/>
+      <elf-symbol name='preempt_schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43b0c9c3'/>
+      <elf-symbol name='preempt_schedule_notrace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf70e4a4d'/>
+      <elf-symbol name='prepare_binprm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x945e2e49'/>
+      <elf-symbol name='prepare_kernel_cred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1f2f497'/>
+      <elf-symbol name='prepare_to_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5fd90f1'/>
+      <elf-symbol name='prepare_to_wait_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c26d495'/>
+      <elf-symbol name='print_hex_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x167c5967'/>
+      <elf-symbol name='printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5850110'/>
+      <elf-symbol name='printk_timed_ratelimit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cc4a5d'/>
+      <elf-symbol name='proc_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6ab3c4f'/>
+      <elf-symbol name='proc_create_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x702effbc'/>
+      <elf-symbol name='proc_create_net_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6970c8ec'/>
+      <elf-symbol name='proc_create_net_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69f5a4d'/>
+      <elf-symbol name='proc_create_seq_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x545a6284'/>
+      <elf-symbol name='proc_create_single_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcced78cc'/>
+      <elf-symbol name='proc_dointvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8181adf'/>
+      <elf-symbol name='proc_mkdir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc89ad71'/>
+      <elf-symbol name='proc_mkdir_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32cc9dc1'/>
+      <elf-symbol name='proc_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x777369c3'/>
+      <elf-symbol name='proto_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75a2e67c'/>
+      <elf-symbol name='proto_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf92d11d0'/>
+      <elf-symbol name='pskb_expand_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1f289b'/>
+      <elf-symbol name='pskb_trim_rcsum_slow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11b1464'/>
+      <elf-symbol name='put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93f7ff1d'/>
+      <elf-symbol name='put_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc53f570b'/>
+      <elf-symbol name='put_pages_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0009fee'/>
+      <elf-symbol name='put_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9db1d52e'/>
+      <elf-symbol name='put_tty_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a65836a'/>
+      <elf-symbol name='put_unused_fd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f4547a7'/>
+      <elf-symbol name='put_vaddr_frames' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x568f2f3f'/>
+      <elf-symbol name='pwm_apply_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b449de'/>
+      <elf-symbol name='pwm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3dd69b1e'/>
+      <elf-symbol name='pwm_get_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x498955a6'/>
+      <elf-symbol name='pwm_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85da70'/>
+      <elf-symbol name='pwm_set_chip_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c756a75'/>
+      <elf-symbol name='pwmchip_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0e3996b'/>
+      <elf-symbol name='pwmchip_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fa12eb8'/>
+      <elf-symbol name='qcom_smem_state_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bf78972'/>
+      <elf-symbol name='qcom_smem_state_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d51cbd'/>
+      <elf-symbol name='qcom_smem_state_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4561f990'/>
+      <elf-symbol name='qcom_smem_state_update_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf730fb4a'/>
+      <elf-symbol name='qdisc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f6cfd0a'/>
+      <elf-symbol name='queue_delayed_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf57e89e'/>
+      <elf-symbol name='queue_work_on' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x732ac580'/>
+      <elf-symbol name='radix_tree_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e6e4b41'/>
+      <elf-symbol name='radix_tree_gang_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b27729b'/>
+      <elf-symbol name='radix_tree_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fbc6a00'/>
+      <elf-symbol name='radix_tree_iter_delete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dc35b25'/>
+      <elf-symbol name='radix_tree_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70ad75fb'/>
+      <elf-symbol name='radix_tree_maybe_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb22e16d5'/>
+      <elf-symbol name='radix_tree_next_chunk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c541e7b'/>
+      <elf-symbol name='radix_tree_preload' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32ce3777'/>
+      <elf-symbol name='rational_best_approximation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0a0da0c'/>
+      <elf-symbol name='raw_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa851973a'/>
+      <elf-symbol name='raw_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc9fa232'/>
+      <elf-symbol name='raw_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd06524ba'/>
+      <elf-symbol name='rb_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d9b652b'/>
+      <elf-symbol name='rb_first' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xece784c2'/>
+      <elf-symbol name='rb_insert_color' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5526619'/>
+      <elf-symbol name='rb_last' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf2c2742'/>
+      <elf-symbol name='rb_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca9360b5'/>
+      <elf-symbol name='rb_prev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf82ec573'/>
+      <elf-symbol name='rb_replace_node' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fe32873'/>
+      <elf-symbol name='rc_keydown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9606dfc'/>
+      <elf-symbol name='rc_map_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x366ac4a3'/>
+      <elf-symbol name='rc_map_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6e332f'/>
+      <elf-symbol name='rc_repeat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83dd63f7'/>
+      <elf-symbol name='rcu_barrier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a13e90'/>
+      <elf-symbol name='rdev_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae444faf'/>
+      <elf-symbol name='rdev_get_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ab7ffd2'/>
+      <elf-symbol name='read_cache_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd3476f9'/>
+      <elf-symbol name='read_cache_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2e6bd6f'/>
+      <elf-symbol name='refcount_dec_and_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9e8aee7'/>
+      <elf-symbol name='refcount_dec_and_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc156c981'/>
+      <elf-symbol name='refcount_dec_and_test_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb62b74af'/>
+      <elf-symbol name='refcount_dec_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8223179'/>
+      <elf-symbol name='refcount_dec_not_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe441e95a'/>
+      <elf-symbol name='refcount_inc_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ee8d6d4'/>
+      <elf-symbol name='refcount_inc_not_zero_checked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x957b1fb6'/>
+      <elf-symbol name='reg_initiator_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdba126c1'/>
+      <elf-symbol name='regcache_cache_only' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xace1e3fe'/>
+      <elf-symbol name='regcache_drop_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bb05f89'/>
+      <elf-symbol name='regcache_mark_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcefa117f'/>
+      <elf-symbol name='regcache_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd36e120a'/>
+      <elf-symbol name='regcache_sync_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe35e975'/>
+      <elf-symbol name='register_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71a50dbc'/>
+      <elf-symbol name='register_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd78f3b'/>
+      <elf-symbol name='register_console' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a626850'/>
+      <elf-symbol name='register_die_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb6261484'/>
+      <elf-symbol name='register_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c333e9'/>
+      <elf-symbol name='register_inet6addr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60352082'/>
+      <elf-symbol name='register_inetaddr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf68285c0'/>
+      <elf-symbol name='register_key_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd39d7f1f'/>
+      <elf-symbol name='register_net_sysctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fa39396'/>
+      <elf-symbol name='register_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xffb86b1a'/>
+      <elf-symbol name='register_netdevice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82a0fc5c'/>
+      <elf-symbol name='register_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd2da1048'/>
+      <elf-symbol name='register_netevent_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4761f17c'/>
+      <elf-symbol name='register_pernet_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x241c81db'/>
+      <elf-symbol name='register_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9c4fed0'/>
+      <elf-symbol name='register_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cc4f70a'/>
+      <elf-symbol name='register_pppox_proto' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88f10f33'/>
+      <elf-symbol name='register_reboot_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3517383e'/>
+      <elf-symbol name='register_restart_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9d8fd16'/>
+      <elf-symbol name='register_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc04d5f22'/>
+      <elf-symbol name='register_syscore_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9c425de'/>
+      <elf-symbol name='register_sysctl_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97d7de2'/>
+      <elf-symbol name='register_tcf_proto_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9604d6b'/>
+      <elf-symbol name='register_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd43e9019'/>
+      <elf-symbol name='register_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94bdc53f'/>
+      <elf-symbol name='register_vmap_purge_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26ed2186'/>
+      <elf-symbol name='regmap_add_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c9d295a'/>
+      <elf-symbol name='regmap_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2d323ad'/>
+      <elf-symbol name='regmap_bulk_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c1369c5'/>
+      <elf-symbol name='regmap_bulk_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa9ed02af'/>
+      <elf-symbol name='regmap_del_irq_chip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x131a5ed7'/>
+      <elf-symbol name='regmap_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c1ddf3d'/>
+      <elf-symbol name='regmap_field_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2c8bfbf'/>
+      <elf-symbol name='regmap_field_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdcb0448a'/>
+      <elf-symbol name='regmap_get_reg_stride' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70eb8ba4'/>
+      <elf-symbol name='regmap_get_val_bytes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27532a0e'/>
+      <elf-symbol name='regmap_irq_get_domain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x424ad9bb'/>
+      <elf-symbol name='regmap_irq_get_virq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55784228'/>
+      <elf-symbol name='regmap_multi_reg_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2514dc99'/>
+      <elf-symbol name='regmap_multi_reg_write_bypassed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4911e1a7'/>
+      <elf-symbol name='regmap_raw_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc0fee0e'/>
+      <elf-symbol name='regmap_raw_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c127699'/>
+      <elf-symbol name='regmap_raw_write_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1498f'/>
+      <elf-symbol name='regmap_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b68e07c'/>
+      <elf-symbol name='regmap_register_patch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95415678'/>
+      <elf-symbol name='regmap_update_bits_base' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x432e5a81'/>
+      <elf-symbol name='regmap_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6093b1c6'/>
+      <elf-symbol name='regulator_bulk_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63b4c37e'/>
+      <elf-symbol name='regulator_bulk_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x818b9e22'/>
+      <elf-symbol name='regulator_count_voltages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x390bb4fa'/>
+      <elf-symbol name='regulator_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a69d0d5'/>
+      <elf-symbol name='regulator_disable_deferred' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4650a5a2'/>
+      <elf-symbol name='regulator_disable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x748f3ca6'/>
+      <elf-symbol name='regulator_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67c67c5b'/>
+      <elf-symbol name='regulator_enable_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb373a42'/>
+      <elf-symbol name='regulator_force_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7382309'/>
+      <elf-symbol name='regulator_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe07f836'/>
+      <elf-symbol name='regulator_get_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa313a54'/>
+      <elf-symbol name='regulator_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6149b1a2'/>
+      <elf-symbol name='regulator_get_linear_step' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb16c6135'/>
+      <elf-symbol name='regulator_get_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87c05be9'/>
+      <elf-symbol name='regulator_get_optional' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5739f10f'/>
+      <elf-symbol name='regulator_get_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2475cae'/>
+      <elf-symbol name='regulator_get_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a22b1fd'/>
+      <elf-symbol name='regulator_is_enabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd46c6f25'/>
+      <elf-symbol name='regulator_is_enabled_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x720e5c90'/>
+      <elf-symbol name='regulator_is_supported_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x169ceab8'/>
+      <elf-symbol name='regulator_list_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x776897eb'/>
+      <elf-symbol name='regulator_list_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54945ffa'/>
+      <elf-symbol name='regulator_list_voltage_linear_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6308713c'/>
+      <elf-symbol name='regulator_list_voltage_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0ea0e71'/>
+      <elf-symbol name='regulator_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e98693c'/>
+      <elf-symbol name='regulator_map_voltage_ascend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fe5938a'/>
+      <elf-symbol name='regulator_map_voltage_linear' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fa5e4ea'/>
+      <elf-symbol name='regulator_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd8e2dc4'/>
+      <elf-symbol name='regulator_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cecab37'/>
+      <elf-symbol name='regulator_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7811a9e'/>
+      <elf-symbol name='regulator_register_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f60d965'/>
+      <elf-symbol name='regulator_set_current_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4ccde4b'/>
+      <elf-symbol name='regulator_set_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xced676d1'/>
+      <elf-symbol name='regulator_set_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfdc6080'/>
+      <elf-symbol name='regulator_set_voltage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcc5ac23'/>
+      <elf-symbol name='regulator_set_voltage_sel_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb90716c'/>
+      <elf-symbol name='regulator_set_voltage_time_sel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3f82373'/>
+      <elf-symbol name='regulator_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a912179'/>
+      <elf-symbol name='regulator_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c7b32ab'/>
+      <elf-symbol name='regulator_unregister_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b1478b5'/>
+      <elf-symbol name='regulatory_hint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9080d64a'/>
+      <elf-symbol name='regulatory_set_wiphy_regd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6cc0df9'/>
+      <elf-symbol name='release_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7defe80'/>
+      <elf-symbol name='release_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd85e6948'/>
+      <elf-symbol name='release_sock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a2e4e97'/>
+      <elf-symbol name='remap_pfn_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30ff0138'/>
+      <elf-symbol name='remap_vmalloc_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x192849b1'/>
+      <elf-symbol name='remove_arg_zero' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1959a4fe'/>
+      <elf-symbol name='remove_proc_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4484ec2c'/>
+      <elf-symbol name='remove_wait_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37110088'/>
+      <elf-symbol name='report_iommu_fault' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8ee5f27'/>
+      <elf-symbol name='request_firmware' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbb1d73b'/>
+      <elf-symbol name='request_firmware_direct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c736f6c'/>
+      <elf-symbol name='request_firmware_into_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a8288db'/>
+      <elf-symbol name='request_firmware_nowait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54074fd2'/>
+      <elf-symbol name='request_key_tag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf178984f'/>
+      <elf-symbol name='request_threaded_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2072ee9b'/>
+      <elf-symbol name='reset_control_assert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c4b6684'/>
+      <elf-symbol name='reset_control_deassert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2210d64'/>
+      <elf-symbol name='reset_control_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40f0683e'/>
+      <elf-symbol name='reset_control_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24f39c39'/>
+      <elf-symbol name='reset_controller_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd8bcd3b'/>
+      <elf-symbol name='return_address' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb917b6d7'/>
+      <elf-symbol name='revalidate_disk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1232544b'/>
+      <elf-symbol name='rfkill_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f1abec9'/>
+      <elf-symbol name='rfkill_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb68bbad'/>
+      <elf-symbol name='rfkill_find_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50b73ce2'/>
+      <elf-symbol name='rfkill_init_sw_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaad6d92f'/>
+      <elf-symbol name='rfkill_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25277497'/>
+      <elf-symbol name='rfkill_set_states' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85b5e625'/>
+      <elf-symbol name='rfkill_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83eb21c'/>
+      <elf-symbol name='rhashtable_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39d8c1bf'/>
+      <elf-symbol name='rhashtable_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1510dd2'/>
+      <elf-symbol name='rhashtable_insert_slow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22964e6d'/>
+      <elf-symbol name='rht_bucket_nested' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f990e9'/>
+      <elf-symbol name='rht_bucket_nested_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe01d6bec'/>
+      <elf-symbol name='round_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91eb9b4'/>
+      <elf-symbol name='round_jiffies_relative' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1eb9516e'/>
+      <elf-symbol name='round_jiffies_up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50fad434'/>
+      <elf-symbol name='rpmsg_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9f6289c'/>
+      <elf-symbol name='rpmsg_send' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73abe68b'/>
+      <elf-symbol name='rpmsg_trysend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2cf67ea'/>
+      <elf-symbol name='rpmsg_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd90a5b54'/>
+      <elf-symbol name='rproc_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69e6b8f6'/>
+      <elf-symbol name='rproc_add_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabae6e4e'/>
+      <elf-symbol name='rproc_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52ad78dd'/>
+      <elf-symbol name='rproc_coredump_add_custom_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65f96cdc'/>
+      <elf-symbol name='rproc_coredump_add_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3b90ac8'/>
+      <elf-symbol name='rproc_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf71c47e3'/>
+      <elf-symbol name='rproc_elf_get_boot_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6cc626b'/>
+      <elf-symbol name='rproc_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1134582'/>
+      <elf-symbol name='rproc_get_by_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb4a2f480'/>
+      <elf-symbol name='rproc_remove_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a18fae3'/>
+      <elf-symbol name='rproc_report_crash' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x529d7b1e'/>
+      <elf-symbol name='rq_flush_dcache_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3934289e'/>
+      <elf-symbol name='rt6_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f68d1'/>
+      <elf-symbol name='rt_mutex_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50d4ae32'/>
+      <elf-symbol name='rtc_class_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20ee2f17'/>
+      <elf-symbol name='rtc_class_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba5b3e43'/>
+      <elf-symbol name='rtc_ktime_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4c2c66c'/>
+      <elf-symbol name='rtc_read_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89d8bad5'/>
+      <elf-symbol name='rtc_time64_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x356461c8'/>
+      <elf-symbol name='rtc_tm_to_time64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f2250ba'/>
+      <elf-symbol name='rtc_update_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71359654'/>
+      <elf-symbol name='rtc_valid_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5838f6c9'/>
+      <elf-symbol name='rtc_year_days' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4859b8bb'/>
+      <elf-symbol name='rtnl_is_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85670f1d'/>
+      <elf-symbol name='rtnl_link_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc5eddae'/>
+      <elf-symbol name='rtnl_link_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1724e054'/>
+      <elf-symbol name='rtnl_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7a4fbed'/>
+      <elf-symbol name='rtnl_register_module' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe25e1214'/>
+      <elf-symbol name='rtnl_trylock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf4f14de6'/>
+      <elf-symbol name='rtnl_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e720ff2'/>
+      <elf-symbol name='rtnl_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b52e38'/>
+      <elf-symbol name='rtnl_unregister_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x579e0bf5'/>
+      <elf-symbol name='save_stack_trace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x361e2bcc'/>
+      <elf-symbol name='save_stack_trace_tsk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x679ca8b3'/>
+      <elf-symbol name='sb800_prefetch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aef2a14'/>
+      <elf-symbol name='sb_min_blocksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95c22d90'/>
+      <elf-symbol name='sb_set_blocksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b0bd961'/>
+      <elf-symbol name='scatterwalk_ffwd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5bbdfa26'/>
+      <elf-symbol name='scatterwalk_map_and_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x845dbf3b'/>
+      <elf-symbol name='sched_clock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd653b126'/>
+      <elf-symbol name='sched_setattr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7489de1b'/>
+      <elf-symbol name='sched_setscheduler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1ae0b5a'/>
+      <elf-symbol name='sched_setscheduler_nocheck' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x562603a6'/>
+      <elf-symbol name='sched_show_task' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1dddd77'/>
+      <elf-symbol name='schedule' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1000e51'/>
+      <elf-symbol name='schedule_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ddd8aad'/>
+      <elf-symbol name='schedule_timeout_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54496b4'/>
+      <elf-symbol name='schedule_timeout_uninterruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x151f4898'/>
+      <elf-symbol name='scmd_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78233af8'/>
+      <elf-symbol name='scmi_driver_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadecb7e6'/>
+      <elf-symbol name='scmi_driver_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42f92b40'/>
+      <elf-symbol name='scnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96848186'/>
+      <elf-symbol name='scsi_add_host_with_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa065af75'/>
+      <elf-symbol name='scsi_autopm_get_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x514c84fd'/>
+      <elf-symbol name='scsi_autopm_put_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c6f330c'/>
+      <elf-symbol name='scsi_block_requests' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f947cb9'/>
+      <elf-symbol name='scsi_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa18e409b'/>
+      <elf-symbol name='scsi_change_queue_depth' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x540ef5e8'/>
+      <elf-symbol name='scsi_device_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2d53185'/>
+      <elf-symbol name='scsi_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe578704'/>
+      <elf-symbol name='scsi_eh_prep_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf10bd708'/>
+      <elf-symbol name='scsi_eh_restore_cmnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d1e03d5'/>
+      <elf-symbol name='scsi_get_host_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a0eece6'/>
+      <elf-symbol name='scsi_host_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a17a7e1'/>
+      <elf-symbol name='scsi_host_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83a13aa8'/>
+      <elf-symbol name='scsi_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0aee0d7'/>
+      <elf-symbol name='scsi_ioctl_block_when_processing_errors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e6f3f05'/>
+      <elf-symbol name='scsi_is_host_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2585fa5'/>
+      <elf-symbol name='scsi_normalize_sense' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbad3cf0'/>
+      <elf-symbol name='scsi_print_command' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57abfada'/>
+      <elf-symbol name='scsi_print_sense_hdr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa1c3e8e'/>
+      <elf-symbol name='scsi_register_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe557f7cc'/>
+      <elf-symbol name='scsi_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x845a9b5c'/>
+      <elf-symbol name='scsi_report_bus_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec366e02'/>
+      <elf-symbol name='scsi_report_device_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86372865'/>
+      <elf-symbol name='scsi_scan_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a9c665c'/>
+      <elf-symbol name='scsi_sense_desc_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10d9f885'/>
+      <elf-symbol name='scsi_test_unit_ready' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5a23a6c'/>
+      <elf-symbol name='scsi_unblock_requests' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d178cfa'/>
+      <elf-symbol name='sdev_prefix_printk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32f75d3d'/>
+      <elf-symbol name='sdhci_add_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49fa6895'/>
+      <elf-symbol name='sdhci_cleanup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d728c52'/>
+      <elf-symbol name='sdhci_cqe_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d0b0c9e'/>
+      <elf-symbol name='sdhci_cqe_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67d1aafc'/>
+      <elf-symbol name='sdhci_cqe_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf8d18124'/>
+      <elf-symbol name='sdhci_enable_clk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e2d8abc'/>
+      <elf-symbol name='sdhci_enable_v4_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb52d943d'/>
+      <elf-symbol name='sdhci_get_property' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d9f3508'/>
+      <elf-symbol name='sdhci_pltfm_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x26256ed8'/>
+      <elf-symbol name='sdhci_pltfm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3cb607d1'/>
+      <elf-symbol name='sdhci_remove_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc53298d2'/>
+      <elf-symbol name='sdhci_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe188ed53'/>
+      <elf-symbol name='sdhci_request_atomic' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2650b758'/>
+      <elf-symbol name='sdhci_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc5271bb'/>
+      <elf-symbol name='sdhci_runtime_resume_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab569c42'/>
+      <elf-symbol name='sdhci_runtime_suspend_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x447943ae'/>
+      <elf-symbol name='sdhci_set_bus_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x83328134'/>
+      <elf-symbol name='sdhci_setup_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd033fe36'/>
+      <elf-symbol name='sdio_align_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bcf513'/>
+      <elf-symbol name='sdio_claim_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e8b312e'/>
+      <elf-symbol name='sdio_claim_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7851e728'/>
+      <elf-symbol name='sdio_disable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4279450'/>
+      <elf-symbol name='sdio_enable_func' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aa397f7'/>
+      <elf-symbol name='sdio_f0_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8315dc20'/>
+      <elf-symbol name='sdio_f0_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5300bb7'/>
+      <elf-symbol name='sdio_get_host_pm_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9bc58da'/>
+      <elf-symbol name='sdio_memcpy_fromio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd540b22a'/>
+      <elf-symbol name='sdio_memcpy_toio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9743229'/>
+      <elf-symbol name='sdio_readb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x803ef33'/>
+      <elf-symbol name='sdio_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e2e664d'/>
+      <elf-symbol name='sdio_readsb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc77c4a6a'/>
+      <elf-symbol name='sdio_readw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87d04e38'/>
+      <elf-symbol name='sdio_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6213a1ef'/>
+      <elf-symbol name='sdio_release_host' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ead17a3'/>
+      <elf-symbol name='sdio_release_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56320bc'/>
+      <elf-symbol name='sdio_set_block_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x532f1d51'/>
+      <elf-symbol name='sdio_set_host_pm_flags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1de900'/>
+      <elf-symbol name='sdio_signal_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f66aa'/>
+      <elf-symbol name='sdio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f7f0f9b'/>
+      <elf-symbol name='sdio_writeb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3df0080c'/>
+      <elf-symbol name='sdio_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24af59bd'/>
+      <elf-symbol name='sdio_writesb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf6268c5'/>
+      <elf-symbol name='sdio_writew' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bd17af2'/>
+      <elf-symbol name='search_binary_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9cfe854'/>
+      <elf-symbol name='security_sk_classify_flow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0875158'/>
+      <elf-symbol name='security_sock_graft' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda10ec3'/>
+      <elf-symbol name='securityfs_create_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x141f9ea9'/>
+      <elf-symbol name='securityfs_create_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabf1aa0b'/>
+      <elf-symbol name='securityfs_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1acca2a1'/>
+      <elf-symbol name='send_sig_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf7bd467'/>
+      <elf-symbol name='seq_file_path' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x341d99e4'/>
+      <elf-symbol name='seq_hex_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d4fe40b'/>
+      <elf-symbol name='seq_lseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfdd1f47b'/>
+      <elf-symbol name='seq_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81960b2f'/>
+      <elf-symbol name='seq_open_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7a917a6'/>
+      <elf-symbol name='seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1965156b'/>
+      <elf-symbol name='seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb95727db'/>
+      <elf-symbol name='seq_puts' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43bd4873'/>
+      <elf-symbol name='seq_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x307e6cd2'/>
+      <elf-symbol name='seq_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2a01764'/>
+      <elf-symbol name='seq_release_private' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80b98483'/>
+      <elf-symbol name='seq_vprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ba4815a'/>
+      <elf-symbol name='seq_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f57aa71'/>
+      <elf-symbol name='serdev_device_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66c8c907'/>
+      <elf-symbol name='serdev_device_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaca0c87a'/>
+      <elf-symbol name='serdev_device_set_baudrate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dd9bf4a'/>
+      <elf-symbol name='serdev_device_set_flow_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17a260b3'/>
+      <elf-symbol name='serdev_device_wait_until_sent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x226a8aa1'/>
+      <elf-symbol name='serdev_device_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5028d6f9'/>
+      <elf-symbol name='serdev_device_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c7751d8'/>
+      <elf-symbol name='serial8250_get_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b0a6486'/>
+      <elf-symbol name='serial8250_register_8250_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3587b23'/>
+      <elf-symbol name='serial8250_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7208c3a'/>
+      <elf-symbol name='serial8250_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc248d26'/>
+      <elf-symbol name='serial8250_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcefcd99a'/>
+      <elf-symbol name='serio_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e21cc83'/>
+      <elf-symbol name='serio_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96ca1f69'/>
+      <elf-symbol name='serio_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4bfb6dd'/>
+      <elf-symbol name='serio_reconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20338017'/>
+      <elf-symbol name='serio_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7733f2fb'/>
+      <elf-symbol name='serio_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90a9dcdc'/>
+      <elf-symbol name='set_blocksize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ddaa384'/>
+      <elf-symbol name='set_cpus_allowed_ptr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa714dd5a'/>
+      <elf-symbol name='set_disk_ro' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x691f0011'/>
+      <elf-symbol name='set_freezable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e61bb05'/>
+      <elf-symbol name='set_nlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe251d323'/>
+      <elf-symbol name='set_normalized_timespec64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x365acda7'/>
+      <elf-symbol name='set_page_dirty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f99b0ba'/>
+      <elf-symbol name='set_page_dirty_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae149d08'/>
+      <elf-symbol name='set_user_nice' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x969fd823'/>
+      <elf-symbol name='setattr_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581db737'/>
+      <elf-symbol name='setattr_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b56bc83'/>
+      <elf-symbol name='setup_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f7af521'/>
+      <elf-symbol name='sg_alloc_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a2f6702'/>
+      <elf-symbol name='sg_alloc_table_from_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a56e834'/>
+      <elf-symbol name='sg_copy_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x905695ab'/>
+      <elf-symbol name='sg_copy_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b8ab42'/>
+      <elf-symbol name='sg_free_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f5b4fe4'/>
+      <elf-symbol name='sg_init_one' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb320cc0e'/>
+      <elf-symbol name='sg_init_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf888ca21'/>
+      <elf-symbol name='sg_miter_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f07920f'/>
+      <elf-symbol name='sg_miter_skip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38074f07'/>
+      <elf-symbol name='sg_miter_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbf567ea'/>
+      <elf-symbol name='sg_miter_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x421fd6f1'/>
+      <elf-symbol name='sg_nents' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x461d16ca'/>
+      <elf-symbol name='sg_nents_for_len' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4230a8d7'/>
+      <elf-symbol name='sg_next' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87b8798d'/>
+      <elf-symbol name='sg_pcopy_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0fe8d51'/>
+      <elf-symbol name='sg_pcopy_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea778fab'/>
+      <elf-symbol name='sg_scsi_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7227b1c'/>
+      <elf-symbol name='shash_free_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19e2cf72'/>
+      <elf-symbol name='shash_register_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10802c80'/>
+      <elf-symbol name='shmem_file_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x578ed03d'/>
+      <elf-symbol name='shmem_read_mapping_page_gfp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf779dffb'/>
+      <elf-symbol name='shmem_truncate_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6731839e'/>
+      <elf-symbol name='si_mem_available' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x785a93b4'/>
+      <elf-symbol name='si_meminfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40c7247c'/>
+      <elf-symbol name='sigprocmask' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a5fa363'/>
+      <elf-symbol name='simd_skcipher_create_compat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88638552'/>
+      <elf-symbol name='simd_skcipher_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xefe73979'/>
+      <elf-symbol name='simple_attr_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e614275'/>
+      <elf-symbol name='simple_attr_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d60e922'/>
+      <elf-symbol name='simple_attr_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x392d1c44'/>
+      <elf-symbol name='simple_attr_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b63cb3f'/>
+      <elf-symbol name='simple_fill_super' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1b5fcdd'/>
+      <elf-symbol name='simple_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2fefcb1'/>
+      <elf-symbol name='simple_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0d07cf9'/>
+      <elf-symbol name='simple_pin_fs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9976d54'/>
+      <elf-symbol name='simple_read_from_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x619cb7dd'/>
+      <elf-symbol name='simple_release_fs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5910ce9'/>
+      <elf-symbol name='simple_statfs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7498f0ce'/>
+      <elf-symbol name='simple_strtol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb742fd7'/>
+      <elf-symbol name='simple_strtoul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20000329'/>
+      <elf-symbol name='simple_write_to_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb4f4766'/>
+      <elf-symbol name='single_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4523a6f2'/>
+      <elf-symbol name='single_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fc78fea'/>
+      <elf-symbol name='sk_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa18e9ee'/>
+      <elf-symbol name='sk_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68d94d7e'/>
+      <elf-symbol name='sk_setup_caps' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51009f9d'/>
+      <elf-symbol name='skb_add_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d8ae60c'/>
+      <elf-symbol name='skb_append_pagefrags' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x668dd9c0'/>
+      <elf-symbol name='skb_checksum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ab1a43c'/>
+      <elf-symbol name='skb_checksum_help' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf121386c'/>
+      <elf-symbol name='skb_clone' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15f7526d'/>
+      <elf-symbol name='skb_coalesce_rx_frag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22b74f51'/>
+      <elf-symbol name='skb_copy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebf634eb'/>
+      <elf-symbol name='skb_copy_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a423e4a'/>
+      <elf-symbol name='skb_copy_datagram_iter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd15d384'/>
+      <elf-symbol name='skb_copy_expand' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xca46afec'/>
+      <elf-symbol name='skb_cow_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbfc1e4'/>
+      <elf-symbol name='skb_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9234abf2'/>
+      <elf-symbol name='skb_dequeue_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde985de4'/>
+      <elf-symbol name='skb_ensure_writable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc37225b3'/>
+      <elf-symbol name='skb_free_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4846ca38'/>
+      <elf-symbol name='skb_page_frag_refill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde6dee7a'/>
+      <elf-symbol name='skb_partial_csum_set' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaec001b'/>
+      <elf-symbol name='skb_pull' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb46d4c62'/>
+      <elf-symbol name='skb_pull_rcsum' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67c0cf6e'/>
+      <elf-symbol name='skb_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6ac91ef'/>
+      <elf-symbol name='skb_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a7181d3'/>
+      <elf-symbol name='skb_queue_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3d46b26'/>
+      <elf-symbol name='skb_queue_purge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa32aab3f'/>
+      <elf-symbol name='skb_queue_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb8f5cff'/>
+      <elf-symbol name='skb_realloc_headroom' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdd8a62b'/>
+      <elf-symbol name='skb_recv_datagram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x70915842'/>
+      <elf-symbol name='skb_scrub_packet' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x300e4e02'/>
+      <elf-symbol name='skb_set_owner_w' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e82e9c0'/>
+      <elf-symbol name='skb_store_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0c2bb77'/>
+      <elf-symbol name='skb_to_sgvec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x983a5d73'/>
+      <elf-symbol name='skb_to_sgvec_nomark' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe7e3b69e'/>
+      <elf-symbol name='skb_trim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e8bbda5'/>
+      <elf-symbol name='skb_tstamp_tx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18c05e5'/>
+      <elf-symbol name='skb_unlink' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x314e05bc'/>
+      <elf-symbol name='skcipher_walk_aead_decrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94b8dde3'/>
+      <elf-symbol name='skcipher_walk_aead_encrypt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x995ad284'/>
+      <elf-symbol name='skcipher_walk_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x787f28c9'/>
+      <elf-symbol name='skcipher_walk_virt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1c28ef11'/>
+      <elf-symbol name='skip_spaces' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0a91bab'/>
+      <elf-symbol name='slhc_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6c8f2de'/>
+      <elf-symbol name='slhc_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5bc9a53'/>
+      <elf-symbol name='slhc_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x215a8ec8'/>
+      <elf-symbol name='slhc_remember' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf102033e'/>
+      <elf-symbol name='slhc_toss' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6405dcd3'/>
+      <elf-symbol name='slhc_uncompress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85fbc931'/>
+      <elf-symbol name='smp_call_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0eae826'/>
+      <elf-symbol name='smp_call_function_single' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6228c21f'/>
+      <elf-symbol name='smpboot_register_percpu_thread' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b13b938'/>
+      <elf-symbol name='snd_card_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6b7da71'/>
+      <elf-symbol name='snd_card_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60121cb9'/>
+      <elf-symbol name='snd_card_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85ba8c09'/>
+      <elf-symbol name='snd_card_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfb9318cc'/>
+      <elf-symbol name='snd_card_rw_proc_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x272e42fb'/>
+      <elf-symbol name='snd_component_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf03162ec'/>
+      <elf-symbol name='snd_compr_stop_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d41835a'/>
+      <elf-symbol name='snd_ctl_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf999adcf'/>
+      <elf-symbol name='snd_ctl_add_vmaster_hook' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac02c70c'/>
+      <elf-symbol name='snd_ctl_apply_vmaster_slaves' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcebfd3ef'/>
+      <elf-symbol name='snd_ctl_boolean_mono_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5bb3030'/>
+      <elf-symbol name='snd_ctl_boolean_stereo_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed061d89'/>
+      <elf-symbol name='snd_ctl_enum_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81b69e41'/>
+      <elf-symbol name='snd_ctl_find_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4bc2d7e'/>
+      <elf-symbol name='snd_ctl_make_virtual_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe0ef0e4'/>
+      <elf-symbol name='snd_ctl_new1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xec33ddd1'/>
+      <elf-symbol name='snd_ctl_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0e7fe57'/>
+      <elf-symbol name='snd_ctl_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c4ff1a0'/>
+      <elf-symbol name='snd_ctl_remove_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x956831ce'/>
+      <elf-symbol name='snd_ctl_sync_vmaster' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e7fd8d7'/>
+      <elf-symbol name='snd_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9caefda9'/>
+      <elf-symbol name='snd_device_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3b34706'/>
+      <elf-symbol name='snd_device_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6f1990'/>
+      <elf-symbol name='snd_dma_alloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1a77308'/>
+      <elf-symbol name='snd_dma_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x786c9651'/>
+      <elf-symbol name='snd_dmaengine_pcm_close_release_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3fe5499'/>
+      <elf-symbol name='snd_dmaengine_pcm_get_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x378e020a'/>
+      <elf-symbol name='snd_dmaengine_pcm_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4cce05d'/>
+      <elf-symbol name='snd_dmaengine_pcm_open_request_chan' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e48adfd'/>
+      <elf-symbol name='snd_dmaengine_pcm_pointer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x132cef37'/>
+      <elf-symbol name='snd_dmaengine_pcm_pointer_no_residue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13bff843'/>
+      <elf-symbol name='snd_dmaengine_pcm_prepare_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4cfc1f1'/>
+      <elf-symbol name='snd_dmaengine_pcm_trigger' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1db8588'/>
+      <elf-symbol name='snd_hwdep_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8c19369e'/>
+      <elf-symbol name='snd_hwparams_to_dma_slave_config' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63a4279c'/>
+      <elf-symbol name='snd_info_create_card_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbad480'/>
+      <elf-symbol name='snd_info_create_module_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x521d55fe'/>
+      <elf-symbol name='snd_info_free_entry' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe24b79a6'/>
+      <elf-symbol name='snd_info_get_line' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24a94b26'/>
+      <elf-symbol name='snd_info_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf78fb702'/>
+      <elf-symbol name='snd_interval_refine' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cda566'/>
+      <elf-symbol name='snd_jack_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb35fbcde'/>
+      <elf-symbol name='snd_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e84178d'/>
+      <elf-symbol name='snd_jack_set_key' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cb04acb'/>
+      <elf-symbol name='snd_pci_quirk_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5762586d'/>
+      <elf-symbol name='snd_pcm_add_chmap_ctls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd17cb482'/>
+      <elf-symbol name='snd_pcm_create_iec958_consumer_hw_params' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11eba48e'/>
+      <elf-symbol name='snd_pcm_format_physical_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68a24153'/>
+      <elf-symbol name='snd_pcm_format_width' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe56a9336'/>
+      <elf-symbol name='snd_pcm_hw_constraint_eld' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6396b5d4'/>
+      <elf-symbol name='snd_pcm_hw_constraint_integer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf5f6b3b'/>
+      <elf-symbol name='snd_pcm_hw_constraint_list' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf1629d'/>
+      <elf-symbol name='snd_pcm_hw_constraint_mask64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc747f96'/>
+      <elf-symbol name='snd_pcm_hw_constraint_minmax' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80c0be2a'/>
+      <elf-symbol name='snd_pcm_hw_constraint_msbits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38a7ac42'/>
+      <elf-symbol name='snd_pcm_hw_constraint_step' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x886abd48'/>
+      <elf-symbol name='snd_pcm_hw_rule_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d9c75b3'/>
+      <elf-symbol name='snd_pcm_lib_default_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe668d59'/>
+      <elf-symbol name='snd_pcm_lib_free_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3bf33d4'/>
+      <elf-symbol name='snd_pcm_lib_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb4fefae'/>
+      <elf-symbol name='snd_pcm_lib_malloc_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63493581'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_free_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf35b4301'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3f837b6'/>
+      <elf-symbol name='snd_pcm_lib_preallocate_pages_for_all' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b2e7d16'/>
+      <elf-symbol name='snd_pcm_limit_hw_rates' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75689802'/>
+      <elf-symbol name='snd_pcm_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92ef25ff'/>
+      <elf-symbol name='snd_pcm_period_elapsed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe1a6f19'/>
+      <elf-symbol name='snd_pcm_rate_bit_to_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff6104d0'/>
+      <elf-symbol name='snd_pcm_rate_range_to_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d864069'/>
+      <elf-symbol name='snd_pcm_rate_to_rate_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9638db4'/>
+      <elf-symbol name='snd_pcm_set_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8615e94'/>
+      <elf-symbol name='snd_pcm_set_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcec5a8b7'/>
+      <elf-symbol name='snd_pcm_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd4b8de3'/>
+      <elf-symbol name='snd_soc_add_card_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4561fd72'/>
+      <elf-symbol name='snd_soc_add_component_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1d4a757'/>
+      <elf-symbol name='snd_soc_bytes_info_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66199eb'/>
+      <elf-symbol name='snd_soc_bytes_tlv_callback' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c1677d4'/>
+      <elf-symbol name='snd_soc_card_get_kcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10349f15'/>
+      <elf-symbol name='snd_soc_card_jack_new' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48e33a2d'/>
+      <elf-symbol name='snd_soc_component_async_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2df137ce'/>
+      <elf-symbol name='snd_soc_component_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4a8efcd5'/>
+      <elf-symbol name='snd_soc_component_exit_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ea11950'/>
+      <elf-symbol name='snd_soc_component_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbdb25d9'/>
+      <elf-symbol name='snd_soc_component_init_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e23aa4'/>
+      <elf-symbol name='snd_soc_component_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69e70e1c'/>
+      <elf-symbol name='snd_soc_component_read32' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8acd8019'/>
+      <elf-symbol name='snd_soc_component_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf12dd3bd'/>
+      <elf-symbol name='snd_soc_component_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17d1382d'/>
+      <elf-symbol name='snd_soc_component_update_bits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa8dff5cb'/>
+      <elf-symbol name='snd_soc_component_update_bits_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb43d6916'/>
+      <elf-symbol name='snd_soc_component_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9ac6db76'/>
+      <elf-symbol name='snd_soc_dai_get_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b41acd9'/>
+      <elf-symbol name='snd_soc_dai_set_bclk_ratio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42618e80'/>
+      <elf-symbol name='snd_soc_dai_set_channel_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa7ec0ed'/>
+      <elf-symbol name='snd_soc_dai_set_clkdiv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5614315'/>
+      <elf-symbol name='snd_soc_dai_set_fmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8866b0f2'/>
+      <elf-symbol name='snd_soc_dai_set_pll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c0282e0'/>
+      <elf-symbol name='snd_soc_dai_set_sysclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e1a7672'/>
+      <elf-symbol name='snd_soc_dai_set_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99e8ec4e'/>
+      <elf-symbol name='snd_soc_dapm_add_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac74f097'/>
+      <elf-symbol name='snd_soc_dapm_disable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5ee5c2a'/>
+      <elf-symbol name='snd_soc_dapm_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28736605'/>
+      <elf-symbol name='snd_soc_dapm_force_enable_pin' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb6238c5'/>
+      <elf-symbol name='snd_soc_dapm_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29985718'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b8ad36a'/>
+      <elf-symbol name='snd_soc_dapm_get_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8279b841'/>
+      <elf-symbol name='snd_soc_dapm_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbeef104b'/>
+      <elf-symbol name='snd_soc_dapm_ignore_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe54a287'/>
+      <elf-symbol name='snd_soc_dapm_info_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8497b955'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_dapm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f33895a'/>
+      <elf-symbol name='snd_soc_dapm_kcontrol_widget' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc30635c2'/>
+      <elf-symbol name='snd_soc_dapm_mixer_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x548c306d'/>
+      <elf-symbol name='snd_soc_dapm_mux_update_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57e0eecf'/>
+      <elf-symbol name='snd_soc_dapm_new_control' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35bdce17'/>
+      <elf-symbol name='snd_soc_dapm_new_controls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f830c9b'/>
+      <elf-symbol name='snd_soc_dapm_new_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48376014'/>
+      <elf-symbol name='snd_soc_dapm_put_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa41fd495'/>
+      <elf-symbol name='snd_soc_dapm_put_pin_switch' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf7c05e'/>
+      <elf-symbol name='snd_soc_dapm_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd2583f0'/>
+      <elf-symbol name='snd_soc_dapm_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46af97d3'/>
+      <elf-symbol name='snd_soc_dapm_weak_routes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa001bb24'/>
+      <elf-symbol name='snd_soc_find_dai' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5d9c3b'/>
+      <elf-symbol name='snd_soc_get_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7d3fed8'/>
+      <elf-symbol name='snd_soc_get_pcm_runtime' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d6b508e'/>
+      <elf-symbol name='snd_soc_get_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8a34569'/>
+      <elf-symbol name='snd_soc_get_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bb47fc6'/>
+      <elf-symbol name='snd_soc_get_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c54acf2'/>
+      <elf-symbol name='snd_soc_get_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68df41c6'/>
+      <elf-symbol name='snd_soc_info_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0958ff0'/>
+      <elf-symbol name='snd_soc_info_multi_ext' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8714994'/>
+      <elf-symbol name='snd_soc_info_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe4fdcc8'/>
+      <elf-symbol name='snd_soc_info_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4f040d4'/>
+      <elf-symbol name='snd_soc_info_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x73adde82'/>
+      <elf-symbol name='snd_soc_info_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe72cb85d'/>
+      <elf-symbol name='snd_soc_jack_add_gpios' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3c50952'/>
+      <elf-symbol name='snd_soc_jack_report' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35d843ad'/>
+      <elf-symbol name='snd_soc_lookup_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4dbc36c'/>
+      <elf-symbol name='snd_soc_new_compress' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce741b5a'/>
+      <elf-symbol name='snd_soc_of_get_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8994cf2a'/>
+      <elf-symbol name='snd_soc_of_get_dai_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x845cdafe'/>
+      <elf-symbol name='snd_soc_of_parse_audio_routing' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa060767a'/>
+      <elf-symbol name='snd_soc_of_parse_audio_simple_widgets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9eb0e7ea'/>
+      <elf-symbol name='snd_soc_of_parse_card_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3a16def'/>
+      <elf-symbol name='snd_soc_of_parse_daifmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f6d9344'/>
+      <elf-symbol name='snd_soc_of_parse_node_prefix' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa03ea21e'/>
+      <elf-symbol name='snd_soc_of_parse_tdm_slot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1673981c'/>
+      <elf-symbol name='snd_soc_of_put_dai_link_codecs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x298d907d'/>
+      <elf-symbol name='snd_soc_params_to_bclk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb711ae7'/>
+      <elf-symbol name='snd_soc_put_enum_double' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd19d5019'/>
+      <elf-symbol name='snd_soc_put_volsw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x45adad2c'/>
+      <elf-symbol name='snd_soc_put_volsw_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedfad107'/>
+      <elf-symbol name='snd_soc_put_volsw_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b1ab797'/>
+      <elf-symbol name='snd_soc_put_xr_sx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5d1a983'/>
+      <elf-symbol name='snd_soc_register_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1af2c25'/>
+      <elf-symbol name='snd_soc_register_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46069960'/>
+      <elf-symbol name='snd_soc_rtdcom_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3e3c7b8d'/>
+      <elf-symbol name='snd_soc_set_runtime_hwparams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe58bbb6f'/>
+      <elf-symbol name='snd_soc_tplg_component_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ff48b69'/>
+      <elf-symbol name='snd_soc_tplg_component_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81274768'/>
+      <elf-symbol name='snd_soc_tplg_widget_bind_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xedcd39c7'/>
+      <elf-symbol name='snd_soc_unregister_card' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40997c19'/>
+      <elf-symbol name='snd_soc_unregister_component' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x214eaf5d'/>
+      <elf-symbol name='snd_timer_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb338a3e0'/>
+      <elf-symbol name='snd_usb_enable_audio_stream' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2bad0263'/>
+      <elf-symbol name='snprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x656e4a6e'/>
+      <elf-symbol name='soc_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x862083e7'/>
+      <elf-symbol name='soc_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19c20269'/>
+      <elf-symbol name='sock_alloc_send_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe76a2cf7'/>
+      <elf-symbol name='sock_create_kern' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3d25045'/>
+      <elf-symbol name='sock_diag_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a5d179a'/>
+      <elf-symbol name='sock_diag_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x178fb5a2'/>
+      <elf-symbol name='sock_diag_save_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x804f07d1'/>
+      <elf-symbol name='sock_diag_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddfe42fb'/>
+      <elf-symbol name='sock_efree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3841ace8'/>
+      <elf-symbol name='sock_gettstamp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29afdb9'/>
+      <elf-symbol name='sock_i_ino' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2565db49'/>
+      <elf-symbol name='sock_init_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f064349'/>
+      <elf-symbol name='sock_no_accept' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7fbb1aaf'/>
+      <elf-symbol name='sock_no_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5dd261d'/>
+      <elf-symbol name='sock_no_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f397873'/>
+      <elf-symbol name='sock_no_getname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff4386aa'/>
+      <elf-symbol name='sock_no_getsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4393522f'/>
+      <elf-symbol name='sock_no_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x985c7944'/>
+      <elf-symbol name='sock_no_listen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x439ffd29'/>
+      <elf-symbol name='sock_no_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x849ffd89'/>
+      <elf-symbol name='sock_no_recvmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7131482'/>
+      <elf-symbol name='sock_no_sendmsg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87255f60'/>
+      <elf-symbol name='sock_no_sendpage' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7cbbefef'/>
+      <elf-symbol name='sock_no_setsockopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6624fb3'/>
+      <elf-symbol name='sock_no_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f1c4595'/>
+      <elf-symbol name='sock_no_socketpair' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7fddc4c'/>
+      <elf-symbol name='sock_queue_rcv_skb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5884858'/>
+      <elf-symbol name='sock_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18c7be6'/>
+      <elf-symbol name='sock_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x361ad01f'/>
+      <elf-symbol name='sock_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62737e1d'/>
+      <elf-symbol name='sock_wfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ee12fdc'/>
+      <elf-symbol name='sock_wmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36c271c5'/>
+      <elf-symbol name='sort' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a53f4c'/>
+      <elf-symbol name='spi_bus_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6413390a'/>
+      <elf-symbol name='spi_bus_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x829aa7bd'/>
+      <elf-symbol name='spi_busnum_to_master' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5bba331'/>
+      <elf-symbol name='spi_controller_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x13b9fb1'/>
+      <elf-symbol name='spi_controller_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x583a82d8'/>
+      <elf-symbol name='spi_finalize_current_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x49a55848'/>
+      <elf-symbol name='spi_finalize_current_transfer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4baaf489'/>
+      <elf-symbol name='spi_get_next_queued_message' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fac0b4'/>
+      <elf-symbol name='spi_register_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1da01612'/>
+      <elf-symbol name='spi_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaf7a255'/>
+      <elf-symbol name='spi_sync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7503ce03'/>
+      <elf-symbol name='spi_sync_locked' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21b45ff8'/>
+      <elf-symbol name='spi_unregister_controller' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15dc1acd'/>
+      <elf-symbol name='spi_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc257569e'/>
+      <elf-symbol name='split_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x655cc8af'/>
+      <elf-symbol name='spmi_controller_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa51507f5'/>
+      <elf-symbol name='spmi_controller_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3228cca4'/>
+      <elf-symbol name='spmi_controller_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x979caee0'/>
+      <elf-symbol name='spmi_ext_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe33d8b41'/>
+      <elf-symbol name='spmi_ext_register_readl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2a3b9dac'/>
+      <elf-symbol name='spmi_ext_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x605507f5'/>
+      <elf-symbol name='spmi_ext_register_writel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x493165f'/>
+      <elf-symbol name='spmi_register_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81e489d8'/>
+      <elf-symbol name='spmi_register_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x492e0700'/>
+      <elf-symbol name='spmi_register_zero_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe15daad5'/>
+      <elf-symbol name='sprint_symbol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x661601de'/>
+      <elf-symbol name='sprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3ff9fd'/>
+      <elf-symbol name='srcu_init_notifier_head' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5e17e48'/>
+      <elf-symbol name='srcu_notifier_call_chain' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x638c7b16'/>
+      <elf-symbol name='srcu_notifier_chain_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d41972d'/>
+      <elf-symbol name='srcu_notifier_chain_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4294849c'/>
+      <elf-symbol name='sscanf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbcab6ee6'/>
+      <elf-symbol name='stack_trace_print' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa45c7b90'/>
+      <elf-symbol name='start_tty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7710d71'/>
+      <elf-symbol name='static_key_slow_dec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f4880df'/>
+      <elf-symbol name='static_key_slow_inc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8e92f7c4'/>
+      <elf-symbol name='stop_tty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66f91713'/>
+      <elf-symbol name='store_sampling_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcbe3b2c'/>
+      <elf-symbol name='strcasecmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaafdc258'/>
+      <elf-symbol name='strcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x61651be'/>
+      <elf-symbol name='strchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x349cba85'/>
+      <elf-symbol name='strchrnul' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xceab0311'/>
+      <elf-symbol name='strcmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xe2d5255a'/>
+      <elf-symbol name='strcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe914e41e'/>
+      <elf-symbol name='strcspn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ac5d3cb'/>
+      <elf-symbol name='stream_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71a356c0'/>
+      <elf-symbol name='strim' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77bc13a0'/>
+      <elf-symbol name='string_get_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x48a91171'/>
+      <elf-symbol name='string_unescape' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64bbc288'/>
+      <elf-symbol name='strlcat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9c0b663'/>
+      <elf-symbol name='strlcpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5792f848'/>
+      <elf-symbol name='strlen' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x98cf60b3'/>
+      <elf-symbol name='strncasecmp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96b29254'/>
+      <elf-symbol name='strncat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e2b40d2'/>
+      <elf-symbol name='strnchr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4841bdee'/>
+      <elf-symbol name='strncmp' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x5a921311'/>
+      <elf-symbol name='strncpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9166fada'/>
+      <elf-symbol name='strncpy_from_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x24428be5'/>
+      <elf-symbol name='strnlen' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0xa916b694'/>
+      <elf-symbol name='strnstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc310b981'/>
+      <elf-symbol name='strpbrk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a1dfd65'/>
+      <elf-symbol name='strrchr' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes' crc='0x9f984513'/>
+      <elf-symbol name='strreplace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7410aba2'/>
+      <elf-symbol name='strscpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd64e639'/>
+      <elf-symbol name='strsep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85df9b6c'/>
+      <elf-symbol name='strstr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e6d26a8'/>
+      <elf-symbol name='submit_bh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd635528'/>
+      <elf-symbol name='submit_bio' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa87bbb72'/>
+      <elf-symbol name='submit_bio_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6683884a'/>
+      <elf-symbol name='subsys_system_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8506e121'/>
+      <elf-symbol name='swiotlb_max_segment' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5b6b0329'/>
+      <elf-symbol name='sync_blockdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69195deb'/>
+      <elf-symbol name='sync_dirty_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd7e9f2b'/>
+      <elf-symbol name='sync_file_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28aa7a0f'/>
+      <elf-symbol name='sync_file_get_fence' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dca08ee'/>
+      <elf-symbol name='sync_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6b181013'/>
+      <elf-symbol name='sync_mapping_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfb00446'/>
+      <elf-symbol name='synchronize_hardirq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa309cf'/>
+      <elf-symbol name='synchronize_irq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe523ad75'/>
+      <elf-symbol name='synchronize_net' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x609f1c7e'/>
+      <elf-symbol name='synchronize_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6091797f'/>
+      <elf-symbol name='synchronize_srcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf5865f0'/>
+      <elf-symbol name='syscon_node_to_regmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8ed01c'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x189bc51c'/>
+      <elf-symbol name='syscon_regmap_lookup_by_phandle_args' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76e3a239'/>
+      <elf-symbol name='sysfs_add_file_to_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50ce7ff3'/>
+      <elf-symbol name='sysfs_create_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x873c2372'/>
+      <elf-symbol name='sysfs_create_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dfaeca9'/>
+      <elf-symbol name='sysfs_create_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4b65421'/>
+      <elf-symbol name='sysfs_create_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb65e28cd'/>
+      <elf-symbol name='sysfs_create_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23966c95'/>
+      <elf-symbol name='sysfs_create_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x477d125'/>
+      <elf-symbol name='sysfs_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74eeb146'/>
+      <elf-symbol name='sysfs_remove_bin_file' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x159acfac'/>
+      <elf-symbol name='sysfs_remove_file_from_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2cf16d0'/>
+      <elf-symbol name='sysfs_remove_file_ns' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc455a8b2'/>
+      <elf-symbol name='sysfs_remove_files' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc54f0d1e'/>
+      <elf-symbol name='sysfs_remove_group' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4819b6a'/>
+      <elf-symbol name='sysfs_remove_groups' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2625153c'/>
+      <elf-symbol name='sysfs_remove_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x299442d7'/>
+      <elf-symbol name='sysfs_streq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x222e7ce2'/>
+      <elf-symbol name='tasklet_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9545af6d'/>
+      <elf-symbol name='tasklet_kill' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82072614'/>
+      <elf-symbol name='tcf_action_exec' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3a99ede'/>
+      <elf-symbol name='tcf_exts_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea6a0b4e'/>
+      <elf-symbol name='tcf_exts_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x172cfea2'/>
+      <elf-symbol name='tcf_exts_dump_stats' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3db5001'/>
+      <elf-symbol name='tcf_exts_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c84a10d'/>
+      <elf-symbol name='tcf_queue_work' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x29063663'/>
+      <elf-symbol name='tcpm_cc_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc37b9769'/>
+      <elf-symbol name='tcpm_pd_hard_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e0bd753'/>
+      <elf-symbol name='tcpm_pd_receive' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb655342c'/>
+      <elf-symbol name='tcpm_pd_transmit_complete' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b84657b'/>
+      <elf-symbol name='tcpm_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7b1bec5'/>
+      <elf-symbol name='tcpm_tcpc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xea220941'/>
+      <elf-symbol name='tcpm_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76eeda4b'/>
+      <elf-symbol name='tcpm_vbus_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xceb50012'/>
+      <elf-symbol name='thermal_cdev_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e5f940c'/>
+      <elf-symbol name='thermal_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xccc71ac7'/>
+      <elf-symbol name='thermal_cooling_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8737d970'/>
+      <elf-symbol name='thermal_of_cooling_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd63258a7'/>
+      <elf-symbol name='thermal_zone_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x76baa1fa'/>
+      <elf-symbol name='thermal_zone_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75d0daf1'/>
+      <elf-symbol name='thermal_zone_device_update' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ccaa7f4'/>
+      <elf-symbol name='thermal_zone_get_slope' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2ab1b0e'/>
+      <elf-symbol name='thermal_zone_get_temp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7f0b4ad'/>
+      <elf-symbol name='thermal_zone_get_zone_by_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5fda691'/>
+      <elf-symbol name='thermal_zone_of_sensor_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ff18b11'/>
+      <elf-symbol name='thermal_zone_of_sensor_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3f95b04e'/>
+      <elf-symbol name='time64_to_tm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfff5afc'/>
+      <elf-symbol name='timecounter_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x862258db'/>
+      <elf-symbol name='timecounter_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6f9e763b'/>
+      <elf-symbol name='timer_of_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb0f11ae1'/>
+      <elf-symbol name='timespec64_to_jiffies' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf93b9d8'/>
+      <elf-symbol name='touch_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x664fc559'/>
+      <elf-symbol name='touch_softlockup_watchdog' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fcb87a1'/>
+      <elf-symbol name='trace_define_field' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa4d455ae'/>
+      <elf-symbol name='trace_event_buffer_commit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfed403c3'/>
+      <elf-symbol name='trace_event_buffer_reserve' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43c8e8f2'/>
+      <elf-symbol name='trace_event_ignore_this_pid' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x755782aa'/>
+      <elf-symbol name='trace_event_raw_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd947537'/>
+      <elf-symbol name='trace_event_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9571b829'/>
+      <elf-symbol name='trace_handle_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7381287f'/>
+      <elf-symbol name='trace_output_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f78387'/>
+      <elf-symbol name='trace_print_array_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3bc72ad'/>
+      <elf-symbol name='trace_print_flags_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x99078b39'/>
+      <elf-symbol name='trace_print_hex_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe02ba436'/>
+      <elf-symbol name='trace_print_symbols_seq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc5c2df4'/>
+      <elf-symbol name='trace_raw_output_prep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35533c0f'/>
+      <elf-symbol name='trace_seq_printf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x525d0aa3'/>
+      <elf-symbol name='trace_seq_putc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b5f4377'/>
+      <elf-symbol name='trace_set_clr_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd217e9e6'/>
+      <elf-symbol name='tracepoint_probe_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x659e63f8'/>
+      <elf-symbol name='tracing_off' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7944e0fc'/>
+      <elf-symbol name='truncate_inode_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa170964'/>
+      <elf-symbol name='truncate_inode_pages_final' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd82ec0f5'/>
+      <elf-symbol name='truncate_pagecache' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ad7101c'/>
+      <elf-symbol name='truncate_setsize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40349a55'/>
+      <elf-symbol name='try_module_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd316ac40'/>
+      <elf-symbol name='try_wait_for_completion' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4005f38c'/>
+      <elf-symbol name='ttm_bo_add_to_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa77abb7c'/>
+      <elf-symbol name='ttm_bo_del_sub_from_lru' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7769b0cb'/>
+      <elf-symbol name='ttm_bo_device_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa309d5e7'/>
+      <elf-symbol name='ttm_bo_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x651c75df'/>
+      <elf-symbol name='ttm_bo_dma_acc_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27a92dd3'/>
+      <elf-symbol name='ttm_bo_eviction_valuable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11baa03b'/>
+      <elf-symbol name='ttm_bo_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1753f537'/>
+      <elf-symbol name='ttm_bo_init_mm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa6223d68'/>
+      <elf-symbol name='ttm_bo_kmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe332bf7c'/>
+      <elf-symbol name='ttm_bo_kunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc8ff5541'/>
+      <elf-symbol name='ttm_bo_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3c3292a0'/>
+      <elf-symbol name='ttm_bo_move_to_lru_tail' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x514258a'/>
+      <elf-symbol name='ttm_bo_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95fd1ce3'/>
+      <elf-symbol name='ttm_bo_validate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb66a576'/>
+      <elf-symbol name='ttm_bo_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37285361'/>
+      <elf-symbol name='ttm_dma_tt_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d130a18'/>
+      <elf-symbol name='ttm_dma_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b3650e1'/>
+      <elf-symbol name='ttm_eu_backoff_reservation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee47a4ee'/>
+      <elf-symbol name='ttm_eu_fence_buffer_objects' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe45c3194'/>
+      <elf-symbol name='ttm_eu_reserve_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x922174e5'/>
+      <elf-symbol name='ttm_tt_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9734d5d'/>
+      <elf-symbol name='tty_flip_buffer_push' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6ea3dfaa'/>
+      <elf-symbol name='tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaccf40b9'/>
+      <elf-symbol name='tty_insert_flip_string_fixed_flag' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62e5005b'/>
+      <elf-symbol name='tty_kref_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62429003'/>
+      <elf-symbol name='tty_ldisc_deref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x566d75b8'/>
+      <elf-symbol name='tty_ldisc_ref' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11ef337f'/>
+      <elf-symbol name='tty_mode_ioctl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c282d8a'/>
+      <elf-symbol name='tty_port_close' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f77b005'/>
+      <elf-symbol name='tty_port_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6d1eea4'/>
+      <elf-symbol name='tty_port_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fa99e07'/>
+      <elf-symbol name='tty_port_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x323889d4'/>
+      <elf-symbol name='tty_port_link_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf506531c'/>
+      <elf-symbol name='tty_port_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7fb9724'/>
+      <elf-symbol name='tty_port_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb59fe101'/>
+      <elf-symbol name='tty_port_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x154f9357'/>
+      <elf-symbol name='tty_port_tty_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5edd14b'/>
+      <elf-symbol name='tty_port_tty_hangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd558a343'/>
+      <elf-symbol name='tty_port_tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a2d15ef'/>
+      <elf-symbol name='tty_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb2c49259'/>
+      <elf-symbol name='tty_register_ldisc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa83b641d'/>
+      <elf-symbol name='tty_schedule_flip' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac4787ca'/>
+      <elf-symbol name='tty_set_operations' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc2ca366'/>
+      <elf-symbol name='tty_standard_install' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x829357a1'/>
+      <elf-symbol name='tty_termios_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x409873e3'/>
+      <elf-symbol name='tty_termios_copy_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30e74134'/>
+      <elf-symbol name='tty_termios_encode_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5641485b'/>
+      <elf-symbol name='tty_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e21933d'/>
+      <elf-symbol name='tty_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50d689c3'/>
+      <elf-symbol name='tty_unregister_ldisc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa120d33c'/>
+      <elf-symbol name='tty_unthrottle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54adb473'/>
+      <elf-symbol name='tty_vhangup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x81f64d9'/>
+      <elf-symbol name='tty_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3586a7ec'/>
+      <elf-symbol name='typec_altmode_attention' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd11801d3'/>
+      <elf-symbol name='typec_altmode_get_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22738bd'/>
+      <elf-symbol name='typec_altmode_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x21db0bde'/>
+      <elf-symbol name='typec_altmode_update_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36542867'/>
+      <elf-symbol name='typec_altmode_vdm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x549ced32'/>
+      <elf-symbol name='typec_find_port_data_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9049491e'/>
+      <elf-symbol name='typec_find_port_power_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeafc1eb8'/>
+      <elf-symbol name='typec_find_power_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d1e301d'/>
+      <elf-symbol name='typec_get_drvdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x734a9c4d'/>
+      <elf-symbol name='typec_match_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30dcd299'/>
+      <elf-symbol name='typec_partner_register_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x366128e3'/>
+      <elf-symbol name='typec_partner_set_identity' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x493159cc'/>
+      <elf-symbol name='typec_port_register_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cc56d0b'/>
+      <elf-symbol name='typec_register_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9a00a11c'/>
+      <elf-symbol name='typec_register_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x477e7de3'/>
+      <elf-symbol name='typec_set_data_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f2c6469'/>
+      <elf-symbol name='typec_set_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x54c93810'/>
+      <elf-symbol name='typec_set_orientation' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x36852716'/>
+      <elf-symbol name='typec_set_pwr_opmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33fd62de'/>
+      <elf-symbol name='typec_set_pwr_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e2998e7'/>
+      <elf-symbol name='typec_set_vconn_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5ac3a632'/>
+      <elf-symbol name='typec_unregister_altmode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a239288'/>
+      <elf-symbol name='typec_unregister_partner' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cad8da6'/>
+      <elf-symbol name='typec_unregister_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda0a9c4c'/>
+      <elf-symbol name='uart_add_one_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85227588'/>
+      <elf-symbol name='uart_console_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8793f6a8'/>
+      <elf-symbol name='uart_console_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3ce5dda'/>
+      <elf-symbol name='uart_get_baud_rate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf181b6d'/>
+      <elf-symbol name='uart_get_divisor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x847ef099'/>
+      <elf-symbol name='uart_handle_cts_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a1456e3'/>
+      <elf-symbol name='uart_handle_dcd_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc012595'/>
+      <elf-symbol name='uart_insert_char' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde55c4a6'/>
+      <elf-symbol name='uart_parse_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4f72a987'/>
+      <elf-symbol name='uart_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae8fa81f'/>
+      <elf-symbol name='uart_remove_one_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bca3a47'/>
+      <elf-symbol name='uart_resume_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4df6da47'/>
+      <elf-symbol name='uart_set_options' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5eb5714'/>
+      <elf-symbol name='uart_suspend_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc3a30af7'/>
+      <elf-symbol name='uart_unregister_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xab3d2972'/>
+      <elf-symbol name='uart_update_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4bbd1cc4'/>
+      <elf-symbol name='uart_write_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4c3a077'/>
+      <elf-symbol name='ufshcd_dme_get_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x65d89dbe'/>
+      <elf-symbol name='ufshcd_dme_set_attr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6e3bd82'/>
+      <elf-symbol name='ufshcd_dump_regs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb0ee72f'/>
+      <elf-symbol name='ufshcd_get_local_unipro_ver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1e7347fc'/>
+      <elf-symbol name='ufshcd_get_pwr_dev_param' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff85cd6b'/>
+      <elf-symbol name='ufshcd_pltfrm_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3510beb'/>
+      <elf-symbol name='ufshcd_pltfrm_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa228721c'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_idle' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc4e5a6b4'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1b5f459'/>
+      <elf-symbol name='ufshcd_pltfrm_runtime_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd5dc272'/>
+      <elf-symbol name='ufshcd_pltfrm_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37cf0460'/>
+      <elf-symbol name='ufshcd_pltfrm_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdb88eaeb'/>
+      <elf-symbol name='ufshcd_read_desc_param' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8417d22b'/>
+      <elf-symbol name='ufshcd_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3a7894'/>
+      <elf-symbol name='ufshcd_uic_hibern8_enter' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68bb0771'/>
+      <elf-symbol name='ufshcd_uic_hibern8_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf39dadd0'/>
+      <elf-symbol name='uio_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3f1e762'/>
+      <elf-symbol name='unload_nls' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33ae253b'/>
+      <elf-symbol name='unlock_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95afef20'/>
+      <elf-symbol name='unlock_new_inode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1aaa32a'/>
+      <elf-symbol name='unlock_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b7edc65'/>
+      <elf-symbol name='unmap_mapping_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3bd741a1'/>
+      <elf-symbol name='unregister_binfmt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x682b5fb6'/>
+      <elf-symbol name='unregister_blkdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb5a459dc'/>
+      <elf-symbol name='unregister_chrdev_region' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6091b333'/>
+      <elf-symbol name='unregister_console' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f379038'/>
+      <elf-symbol name='unregister_filesystem' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4cfa9e8a'/>
+      <elf-symbol name='unregister_gadget_item' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x357f51b7'/>
+      <elf-symbol name='unregister_inet6addr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fe252cc'/>
+      <elf-symbol name='unregister_inetaddr_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe029963'/>
+      <elf-symbol name='unregister_key_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa339a943'/>
+      <elf-symbol name='unregister_netdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb771a637'/>
+      <elf-symbol name='unregister_netdevice_many' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fdecc31'/>
+      <elf-symbol name='unregister_netdevice_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d0d6206'/>
+      <elf-symbol name='unregister_netdevice_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbdb6faa2'/>
+      <elf-symbol name='unregister_netevent_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fe1eddf'/>
+      <elf-symbol name='unregister_pernet_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c8edd1e'/>
+      <elf-symbol name='unregister_pernet_subsys' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9156a215'/>
+      <elf-symbol name='unregister_pm_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7681946c'/>
+      <elf-symbol name='unregister_pppox_proto' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe0ff7a18'/>
+      <elf-symbol name='unregister_reboot_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac1a55be'/>
+      <elf-symbol name='unregister_restart_handler' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40d59096'/>
+      <elf-symbol name='unregister_rpmsg_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdde0d8c6'/>
+      <elf-symbol name='unregister_shrinker' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe22369a5'/>
+      <elf-symbol name='unregister_syscore_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfa1eb910'/>
+      <elf-symbol name='unregister_sysctl_table' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6be0d38b'/>
+      <elf-symbol name='unregister_tcf_proto_ops' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12db3341'/>
+      <elf-symbol name='unregister_virtio_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94f6df99'/>
+      <elf-symbol name='unregister_virtio_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb8172fce'/>
+      <elf-symbol name='unregister_vmap_purge_notifier' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7c69a63'/>
+      <elf-symbol name='up' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf2a6966'/>
+      <elf-symbol name='up_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98d747fd'/>
+      <elf-symbol name='up_write' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x469de6d2'/>
+      <elf-symbol name='update_devfreq' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeee0ee5d'/>
+      <elf-symbol name='usb_add_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b9731b1'/>
+      <elf-symbol name='usb_add_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe639686f'/>
+      <elf-symbol name='usb_add_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x697b9e57'/>
+      <elf-symbol name='usb_add_phy_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad2461b1'/>
+      <elf-symbol name='usb_alloc_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c616c7f'/>
+      <elf-symbol name='usb_alloc_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbf14d02e'/>
+      <elf-symbol name='usb_alloc_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e1cfe40'/>
+      <elf-symbol name='usb_alloc_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9402d37'/>
+      <elf-symbol name='usb_amd_dev_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb9b9df41'/>
+      <elf-symbol name='usb_amd_prefetch_quirk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd87fc0a0'/>
+      <elf-symbol name='usb_amd_pt_check_port' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12c9345a'/>
+      <elf-symbol name='usb_amd_quirk_pll_check' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf4014ff'/>
+      <elf-symbol name='usb_amd_quirk_pll_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc825d6c'/>
+      <elf-symbol name='usb_amd_quirk_pll_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10ecc52c'/>
+      <elf-symbol name='usb_anchor_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b2c52ba'/>
+      <elf-symbol name='usb_asmedia_modifyflowcontrol' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85a4811b'/>
+      <elf-symbol name='usb_assign_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25cb000a'/>
+      <elf-symbol name='usb_autopm_get_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67ab3998'/>
+      <elf-symbol name='usb_autopm_get_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x25ad45fb'/>
+      <elf-symbol name='usb_autopm_get_interface_no_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7de5eaca'/>
+      <elf-symbol name='usb_autopm_put_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafbd698e'/>
+      <elf-symbol name='usb_autopm_put_interface_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22ffa40d'/>
+      <elf-symbol name='usb_autopm_put_interface_no_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5153643a'/>
+      <elf-symbol name='usb_bulk_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce5f232f'/>
+      <elf-symbol name='usb_calc_bus_time' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e64181d'/>
+      <elf-symbol name='usb_clear_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75e8a94'/>
+      <elf-symbol name='usb_composite_setup_continue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98a237b3'/>
+      <elf-symbol name='usb_control_msg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x529acda0'/>
+      <elf-symbol name='usb_copy_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e09263f'/>
+      <elf-symbol name='usb_create_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb868d0f'/>
+      <elf-symbol name='usb_decode_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4531624f'/>
+      <elf-symbol name='usb_del_gadget_udc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2908c9b0'/>
+      <elf-symbol name='usb_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb5eee36'/>
+      <elf-symbol name='usb_disable_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b0b649b'/>
+      <elf-symbol name='usb_disabled' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19a304ba'/>
+      <elf-symbol name='usb_driver_claim_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfec3dc93'/>
+      <elf-symbol name='usb_driver_release_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa83233d7'/>
+      <elf-symbol name='usb_enable_autosuspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc42565fc'/>
+      <elf-symbol name='usb_enable_intel_xhci_ports' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74943392'/>
+      <elf-symbol name='usb_ep_alloc_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19d9aa8b'/>
+      <elf-symbol name='usb_ep_autoconfig' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x59ccf3f1'/>
+      <elf-symbol name='usb_ep_clear_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32c7093a'/>
+      <elf-symbol name='usb_ep_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90d6960'/>
+      <elf-symbol name='usb_ep_disable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5467f774'/>
+      <elf-symbol name='usb_ep_enable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f7c915e'/>
+      <elf-symbol name='usb_ep_fifo_flush' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fdd7356'/>
+      <elf-symbol name='usb_ep_free_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfd9327e2'/>
+      <elf-symbol name='usb_ep_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a7a92'/>
+      <elf-symbol name='usb_ep_set_halt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1eb47487'/>
+      <elf-symbol name='usb_ep_set_maxpacket_limit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5134ddc8'/>
+      <elf-symbol name='usb_ep_set_wedge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6290ddd9'/>
+      <elf-symbol name='usb_find_common_endpoints' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8eae8dfd'/>
+      <elf-symbol name='usb_free_all_descriptors' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2648cf7a'/>
+      <elf-symbol name='usb_free_coherent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80c83f33'/>
+      <elf-symbol name='usb_free_streams' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5668fc1'/>
+      <elf-symbol name='usb_free_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x27533a4d'/>
+      <elf-symbol name='usb_function_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x39d288cd'/>
+      <elf-symbol name='usb_function_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3267cf85'/>
+      <elf-symbol name='usb_gadget_giveback_request' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbba060d3'/>
+      <elf-symbol name='usb_gadget_map_request_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x441599e5'/>
+      <elf-symbol name='usb_gadget_set_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa1550e62'/>
+      <elf-symbol name='usb_gadget_udc_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74708372'/>
+      <elf-symbol name='usb_gadget_unmap_request_by_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c176390'/>
+      <elf-symbol name='usb_gadget_vbus_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xae60da31'/>
+      <elf-symbol name='usb_gadget_vbus_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fa48497'/>
+      <elf-symbol name='usb_gadget_vbus_draw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x72fd0f5f'/>
+      <elf-symbol name='usb_gadget_wakeup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2a952bf'/>
+      <elf-symbol name='usb_get_current_frame_number' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x678eeb36'/>
+      <elf-symbol name='usb_get_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89f525d6'/>
+      <elf-symbol name='usb_get_dr_mode' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57338364'/>
+      <elf-symbol name='usb_get_from_anchor' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa752a087'/>
+      <elf-symbol name='usb_get_intf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb615398'/>
+      <elf-symbol name='usb_get_maximum_speed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fd8fb6c'/>
+      <elf-symbol name='usb_get_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x74a12da'/>
+      <elf-symbol name='usb_gstrings_attach' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe8b0a315'/>
+      <elf-symbol name='usb_hc_died' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc968902a'/>
+      <elf-symbol name='usb_hcd_check_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfc116ea6'/>
+      <elf-symbol name='usb_hcd_giveback_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd483884'/>
+      <elf-symbol name='usb_hcd_is_primary_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd55fad0d'/>
+      <elf-symbol name='usb_hcd_link_urb_to_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23fd5486'/>
+      <elf-symbol name='usb_hcd_map_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8bf6109d'/>
+      <elf-symbol name='usb_hcd_pci_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8ecdaa54'/>
+      <elf-symbol name='usb_hcd_pci_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2a38948'/>
+      <elf-symbol name='usb_hcd_pci_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5cc5f17'/>
+      <elf-symbol name='usb_hcd_platform_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9611264c'/>
+      <elf-symbol name='usb_hcd_poll_rh_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf28dd099'/>
+      <elf-symbol name='usb_hcd_resume_root_hub' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b86c41'/>
+      <elf-symbol name='usb_hcd_unlink_urb_from_ep' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x53f052e8'/>
+      <elf-symbol name='usb_hcd_unmap_urb_for_dma' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7899114'/>
+      <elf-symbol name='usb_hub_find_child' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa837b17'/>
+      <elf-symbol name='usb_ifnum_to_if' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3617c7a6'/>
+      <elf-symbol name='usb_interface_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2977c784'/>
+      <elf-symbol name='usb_kill_anchored_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x962c8ae1'/>
+      <elf-symbol name='usb_kill_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7c90703a'/>
+      <elf-symbol name='usb_lock_device_for_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6285c1e'/>
+      <elf-symbol name='usb_match_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5af4ecb9'/>
+      <elf-symbol name='usb_match_one_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d500dc5'/>
+      <elf-symbol name='usb_os_desc_prepare_interf_dir' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14d92bcf'/>
+      <elf-symbol name='usb_otg_state_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f0d9053'/>
+      <elf-symbol name='usb_phy_get_charger_current' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x169695a'/>
+      <elf-symbol name='usb_phy_set_charger_current' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd80802b7'/>
+      <elf-symbol name='usb_phy_set_charger_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9c3f7111'/>
+      <elf-symbol name='usb_poison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff585e78'/>
+      <elf-symbol name='usb_put_dev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8649034'/>
+      <elf-symbol name='usb_put_function_instance' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe6e6efb'/>
+      <elf-symbol name='usb_put_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaf194cbe'/>
+      <elf-symbol name='usb_put_intf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b67f087'/>
+      <elf-symbol name='usb_register_driver' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc08a739a'/>
+      <elf-symbol name='usb_register_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x89bbafc6'/>
+      <elf-symbol name='usb_remove_hcd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97e58c9'/>
+      <elf-symbol name='usb_remove_phy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e52db7a'/>
+      <elf-symbol name='usb_reset_configuration' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e15e8c6'/>
+      <elf-symbol name='usb_reset_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf0b45969'/>
+      <elf-symbol name='usb_reset_endpoint' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9057d8e'/>
+      <elf-symbol name='usb_role_switch_get' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c90f0c4'/>
+      <elf-symbol name='usb_role_switch_get_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff42c374'/>
+      <elf-symbol name='usb_role_switch_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9fd634a'/>
+      <elf-symbol name='usb_role_switch_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28f8d500'/>
+      <elf-symbol name='usb_role_switch_set_role' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd5474690'/>
+      <elf-symbol name='usb_role_switch_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2882d40e'/>
+      <elf-symbol name='usb_root_hub_lost_power' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe12885ae'/>
+      <elf-symbol name='usb_scuttle_anchored_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x807766ea'/>
+      <elf-symbol name='usb_set_device_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa41b48f'/>
+      <elf-symbol name='usb_set_interface' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb35d3be4'/>
+      <elf-symbol name='usb_sg_cancel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3edcdb8e'/>
+      <elf-symbol name='usb_sg_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4dd7649c'/>
+      <elf-symbol name='usb_sg_wait' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8dd847e'/>
+      <elf-symbol name='usb_show_dynids' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17e9946'/>
+      <elf-symbol name='usb_speed_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x77ae495d'/>
+      <elf-symbol name='usb_store_new_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66e5d33e'/>
+      <elf-symbol name='usb_string' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5dbbf50e'/>
+      <elf-symbol name='usb_string_id' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x18643b25'/>
+      <elf-symbol name='usb_submit_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x91c90cff'/>
+      <elf-symbol name='usb_unanchor_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf52d836a'/>
+      <elf-symbol name='usb_unlink_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f2791a'/>
+      <elf-symbol name='usb_unpoison_urb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x93ceca61'/>
+      <elf-symbol name='usb_unregister_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x811dc334'/>
+      <elf-symbol name='usb_wait_anchor_empty_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x407af304'/>
+      <elf-symbol name='usb_wakeup_notification' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe3c87807'/>
+      <elf-symbol name='usbnet_change_mtu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x718690f'/>
+      <elf-symbol name='usbnet_defer_kevent' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x968513ba'/>
+      <elf-symbol name='usbnet_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaafbd6c7'/>
+      <elf-symbol name='usbnet_get_drvinfo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa91205d2'/>
+      <elf-symbol name='usbnet_get_endpoints' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2eef4d0c'/>
+      <elf-symbol name='usbnet_get_link' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf79a5f36'/>
+      <elf-symbol name='usbnet_get_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf359df14'/>
+      <elf-symbol name='usbnet_get_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa61d9e5e'/>
+      <elf-symbol name='usbnet_get_stats64' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46c51eec'/>
+      <elf-symbol name='usbnet_link_change' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xee5f6865'/>
+      <elf-symbol name='usbnet_nway_reset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94e57214'/>
+      <elf-symbol name='usbnet_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3a98f2e'/>
+      <elf-symbol name='usbnet_probe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd901ac93'/>
+      <elf-symbol name='usbnet_read_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd39ef0af'/>
+      <elf-symbol name='usbnet_read_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x643fb07d'/>
+      <elf-symbol name='usbnet_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbaef38df'/>
+      <elf-symbol name='usbnet_set_link_ksettings' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x51718f02'/>
+      <elf-symbol name='usbnet_set_msglevel' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x292e091e'/>
+      <elf-symbol name='usbnet_skb_return' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf03c4b2c'/>
+      <elf-symbol name='usbnet_start_xmit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fa7650b'/>
+      <elf-symbol name='usbnet_stop' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6e5055a4'/>
+      <elf-symbol name='usbnet_suspend' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x797d007b'/>
+      <elf-symbol name='usbnet_tx_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41e4bb7d'/>
+      <elf-symbol name='usbnet_unlink_rx_urbs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x87ed4eef'/>
+      <elf-symbol name='usbnet_update_max_qlen' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7dfe81d3'/>
+      <elf-symbol name='usbnet_write_cmd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa3fa42ee'/>
+      <elf-symbol name='usbnet_write_cmd_async' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcb9874f3'/>
+      <elf-symbol name='usbnet_write_cmd_nopm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd53a9fe5'/>
+      <elf-symbol name='user_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x961605e3'/>
+      <elf-symbol name='user_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6a637efc'/>
+      <elf-symbol name='user_revoke' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc6d4007b'/>
+      <elf-symbol name='usleep_range' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x12a38747'/>
+      <elf-symbol name='utf16s_to_utf8s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xabf32f29'/>
+      <elf-symbol name='utf8s_to_utf16s' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x97adb487'/>
+      <elf-symbol name='v4l2_ctrl_cluster' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d16c66a'/>
+      <elf-symbol name='v4l2_ctrl_find' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdf50d146'/>
+      <elf-symbol name='v4l2_ctrl_g_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ce8bbab'/>
+      <elf-symbol name='v4l2_ctrl_get_name' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x32d43420'/>
+      <elf-symbol name='v4l2_ctrl_handler_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x71d50ab7'/>
+      <elf-symbol name='v4l2_ctrl_handler_init_class' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5feff994'/>
+      <elf-symbol name='v4l2_ctrl_handler_setup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x858d4a8e'/>
+      <elf-symbol name='v4l2_ctrl_log_status' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16246be7'/>
+      <elf-symbol name='v4l2_ctrl_merge' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b5c0864'/>
+      <elf-symbol name='v4l2_ctrl_new_custom' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78c4f43'/>
+      <elf-symbol name='v4l2_ctrl_new_int_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc72c298d'/>
+      <elf-symbol name='v4l2_ctrl_new_std' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86d86d1'/>
+      <elf-symbol name='v4l2_ctrl_new_std_menu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f2cd759'/>
+      <elf-symbol name='v4l2_ctrl_replace' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b77c88d'/>
+      <elf-symbol name='v4l2_ctrl_subdev_subscribe_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x82dc59c3'/>
+      <elf-symbol name='v4l2_ctrl_subscribe_event' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11b83a75'/>
+      <elf-symbol name='v4l2_device_disconnect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38f0a634'/>
+      <elf-symbol name='v4l2_device_put' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84934162'/>
+      <elf-symbol name='v4l2_device_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8843da3b'/>
+      <elf-symbol name='v4l2_device_register_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd00541d4'/>
+      <elf-symbol name='v4l2_device_register_subdev_nodes' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x64c0eff0'/>
+      <elf-symbol name='v4l2_device_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9726d876'/>
+      <elf-symbol name='v4l2_device_unregister_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x223bfc93'/>
+      <elf-symbol name='v4l2_event_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x80c001b9'/>
+      <elf-symbol name='v4l2_event_pending' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd465a7c'/>
+      <elf-symbol name='v4l2_event_queue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf97dd1ed'/>
+      <elf-symbol name='v4l2_event_queue_fh' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19c6ac98'/>
+      <elf-symbol name='v4l2_event_subdev_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd081379c'/>
+      <elf-symbol name='v4l2_event_subscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe50b6949'/>
+      <elf-symbol name='v4l2_event_unsubscribe' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa298d525'/>
+      <elf-symbol name='v4l2_fh_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75630847'/>
+      <elf-symbol name='v4l2_fh_del' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f06544b'/>
+      <elf-symbol name='v4l2_fh_exit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc711aaf'/>
+      <elf-symbol name='v4l2_fh_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf3c06e25'/>
+      <elf-symbol name='v4l2_fh_open' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfeb53db0'/>
+      <elf-symbol name='v4l2_fh_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x241ab8e0'/>
+      <elf-symbol name='v4l2_format_info' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28b12cc9'/>
+      <elf-symbol name='v4l2_g_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2974a5b6'/>
+      <elf-symbol name='v4l2_i2c_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1291cb34'/>
+      <elf-symbol name='v4l2_i2c_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95bd503c'/>
+      <elf-symbol name='v4l2_prio_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb77b0159'/>
+      <elf-symbol name='v4l2_s_ctrl' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa5a8362e'/>
+      <elf-symbol name='v4l2_spi_new_subdev' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb502a264'/>
+      <elf-symbol name='v4l2_subdev_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4c5e3274'/>
+      <elf-symbol name='v4l_bound_align_image' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5ef842e'/>
+      <elf-symbol name='vb2_buffer_done' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdae5db1'/>
+      <elf-symbol name='vb2_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x778e1860'/>
+      <elf-symbol name='vb2_dma_contig_clear_max_seg_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8a3781ee'/>
+      <elf-symbol name='vb2_dma_contig_set_max_seg_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x284a4624'/>
+      <elf-symbol name='vb2_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9de6b987'/>
+      <elf-symbol name='vb2_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc54f7ba'/>
+      <elf-symbol name='vb2_fop_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1220430'/>
+      <elf-symbol name='vb2_fop_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x28d7da0c'/>
+      <elf-symbol name='vb2_fop_read' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x63cc0e2b'/>
+      <elf-symbol name='vb2_fop_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x882c73f2'/>
+      <elf-symbol name='vb2_ioctl_create_bufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd85550e6'/>
+      <elf-symbol name='vb2_ioctl_dqbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe70fecf9'/>
+      <elf-symbol name='vb2_ioctl_expbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1ea706c5'/>
+      <elf-symbol name='vb2_ioctl_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x44174ff6'/>
+      <elf-symbol name='vb2_ioctl_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b80efc2'/>
+      <elf-symbol name='vb2_ioctl_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb44f9e9d'/>
+      <elf-symbol name='vb2_ioctl_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdee03623'/>
+      <elf-symbol name='vb2_ioctl_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdbd965d2'/>
+      <elf-symbol name='vb2_ioctl_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6cbddd34'/>
+      <elf-symbol name='vb2_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5f121ad'/>
+      <elf-symbol name='vb2_ops_wait_finish' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed63b3ce'/>
+      <elf-symbol name='vb2_ops_wait_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42ca2731'/>
+      <elf-symbol name='vb2_plane_cookie' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7201451e'/>
+      <elf-symbol name='vb2_plane_vaddr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b5bdf81'/>
+      <elf-symbol name='vb2_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8fb12fa0'/>
+      <elf-symbol name='vb2_prepare_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40ae640c'/>
+      <elf-symbol name='vb2_qbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0c0cc5'/>
+      <elf-symbol name='vb2_querybuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc1637217'/>
+      <elf-symbol name='vb2_queue_error' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xad66f13b'/>
+      <elf-symbol name='vb2_queue_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc5990401'/>
+      <elf-symbol name='vb2_queue_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc95a04c7'/>
+      <elf-symbol name='vb2_reqbufs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9e6b20e'/>
+      <elf-symbol name='vb2_request_object_is_buffer' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7996b337'/>
+      <elf-symbol name='vb2_streamoff' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x617e3b72'/>
+      <elf-symbol name='vb2_streamon' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56259627'/>
+      <elf-symbol name='vb2_wait_for_all_buffers' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd54c01e2'/>
+      <elf-symbol name='vfree' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x999e8297'/>
+      <elf-symbol name='vfs_fsync' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x57a870f'/>
+      <elf-symbol name='vfs_llseek' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe47c3d9b'/>
+      <elf-symbol name='video_devdata' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x55f858ad'/>
+      <elf-symbol name='video_device_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2500492'/>
+      <elf-symbol name='video_device_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdc297bbe'/>
+      <elf-symbol name='video_device_release_empty' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7b5844b2'/>
+      <elf-symbol name='video_ioctl2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfaaa9f96'/>
+      <elf-symbol name='video_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa647a2e2'/>
+      <elf-symbol name='virtio_break_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8cdcb78d'/>
+      <elf-symbol name='virtio_check_driver_offered_feature' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa3c33f8'/>
+      <elf-symbol name='virtio_config_changed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10f9773a'/>
+      <elf-symbol name='virtio_device_freeze' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcadb3389'/>
+      <elf-symbol name='virtio_device_restore' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x41a1f9ee'/>
+      <elf-symbol name='virtio_max_dma_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2578bf5e'/>
+      <elf-symbol name='virtio_transport_connect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fa73af8'/>
+      <elf-symbol name='virtio_transport_deliver_tap_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x19157482'/>
+      <elf-symbol name='virtio_transport_destruct' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9b0c7d5e'/>
+      <elf-symbol name='virtio_transport_dgram_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbabd30f5'/>
+      <elf-symbol name='virtio_transport_dgram_bind' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe2558a42'/>
+      <elf-symbol name='virtio_transport_dgram_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe96b6b5e'/>
+      <elf-symbol name='virtio_transport_dgram_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb201d4e1'/>
+      <elf-symbol name='virtio_transport_do_socket_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2f43dd26'/>
+      <elf-symbol name='virtio_transport_free_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1cce648d'/>
+      <elf-symbol name='virtio_transport_notify_buffer_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4eba109d'/>
+      <elf-symbol name='virtio_transport_notify_poll_in' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3d23e25'/>
+      <elf-symbol name='virtio_transport_notify_poll_out' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xef17cdcd'/>
+      <elf-symbol name='virtio_transport_notify_recv_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dcc06c0'/>
+      <elf-symbol name='virtio_transport_notify_recv_post_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42e46f0d'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x23465bbd'/>
+      <elf-symbol name='virtio_transport_notify_recv_pre_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6efb39a'/>
+      <elf-symbol name='virtio_transport_notify_send_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9d2207d8'/>
+      <elf-symbol name='virtio_transport_notify_send_post_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95e2d2df'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_block' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb339e238'/>
+      <elf-symbol name='virtio_transport_notify_send_pre_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd1eaefbd'/>
+      <elf-symbol name='virtio_transport_recv_pkt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc76c8ec'/>
+      <elf-symbol name='virtio_transport_release' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6cc70e1'/>
+      <elf-symbol name='virtio_transport_shutdown' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9cbe164c'/>
+      <elf-symbol name='virtio_transport_stream_allow' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3a81e69'/>
+      <elf-symbol name='virtio_transport_stream_dequeue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd8bd1ea3'/>
+      <elf-symbol name='virtio_transport_stream_enqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x152908b2'/>
+      <elf-symbol name='virtio_transport_stream_has_data' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4934d61a'/>
+      <elf-symbol name='virtio_transport_stream_has_space' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x52cc95e0'/>
+      <elf-symbol name='virtio_transport_stream_is_active' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1942feb'/>
+      <elf-symbol name='virtio_transport_stream_rcvhiwat' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa551523'/>
+      <elf-symbol name='virtqueue_add_inbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xddb6c04c'/>
+      <elf-symbol name='virtqueue_add_inbuf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x30238595'/>
+      <elf-symbol name='virtqueue_add_outbuf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf36914a8'/>
+      <elf-symbol name='virtqueue_add_sgs' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x33bbbd82'/>
+      <elf-symbol name='virtqueue_detach_unused_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x43e859d8'/>
+      <elf-symbol name='virtqueue_disable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9d736c'/>
+      <elf-symbol name='virtqueue_enable_cb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5209a181'/>
+      <elf-symbol name='virtqueue_enable_cb_delayed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8222793e'/>
+      <elf-symbol name='virtqueue_enable_cb_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b2331b9'/>
+      <elf-symbol name='virtqueue_get_avail_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf9d88aba'/>
+      <elf-symbol name='virtqueue_get_buf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba11fec7'/>
+      <elf-symbol name='virtqueue_get_buf_ctx' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d268e96'/>
+      <elf-symbol name='virtqueue_get_desc_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xafb74898'/>
+      <elf-symbol name='virtqueue_get_used_addr' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2fd9e0b0'/>
+      <elf-symbol name='virtqueue_get_vring_size' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x938ef85b'/>
+      <elf-symbol name='virtqueue_is_broken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8524e5bc'/>
+      <elf-symbol name='virtqueue_kick' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x84711ef8'/>
+      <elf-symbol name='virtqueue_kick_prepare' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3b77b66d'/>
+      <elf-symbol name='virtqueue_notify' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b0b0918'/>
+      <elf-symbol name='virtqueue_poll' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5aa13ea3'/>
+      <elf-symbol name='vm_get_page_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2c91e17c'/>
+      <elf-symbol name='vm_insert_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4de2571b'/>
+      <elf-symbol name='vm_iomap_memory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x92525c5c'/>
+      <elf-symbol name='vm_map_pages' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dfbd5ae'/>
+      <elf-symbol name='vm_map_ram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc0d23221'/>
+      <elf-symbol name='vm_mmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b28637a'/>
+      <elf-symbol name='vm_unmap_aliases' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc22a3091'/>
+      <elf-symbol name='vm_unmap_ram' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3fd2571'/>
+      <elf-symbol name='vmalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd6ee688f'/>
+      <elf-symbol name='vmalloc_to_page' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbfc4628e'/>
+      <elf-symbol name='vmalloc_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5635a60a'/>
+      <elf-symbol name='vmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d04dd1b'/>
+      <elf-symbol name='vmemdup_user' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x90576ec4'/>
+      <elf-symbol name='vmf_insert_mixed' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb932149b'/>
+      <elf-symbol name='vmf_insert_pfn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x204e172a'/>
+      <elf-symbol name='vmf_insert_pfn_prot' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2e31241'/>
+      <elf-symbol name='vprintk' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x715a5ed0'/>
+      <elf-symbol name='vring_create_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x686a08'/>
+      <elf-symbol name='vring_del_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbbbcb539'/>
+      <elf-symbol name='vring_interrupt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff05fa13'/>
+      <elf-symbol name='vring_new_virtqueue' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x68107dc5'/>
+      <elf-symbol name='vring_transport_features' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf6c35f56'/>
+      <elf-symbol name='vscnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xaa0c318b'/>
+      <elf-symbol name='vsnprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x148653'/>
+      <elf-symbol name='vsock_core_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x79c1447c'/>
+      <elf-symbol name='vsock_core_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95b34cfb'/>
+      <elf-symbol name='vsock_for_each_connected_socket' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5939d2c5'/>
+      <elf-symbol name='vsprintf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x78b887ed'/>
+      <elf-symbol name='vsscanf' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50d035c2'/>
+      <elf-symbol name='vunmap' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x94961283'/>
+      <elf-symbol name='vzalloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x40a9b349'/>
+      <elf-symbol name='wait_for_completion' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6de13801'/>
+      <elf-symbol name='wait_for_completion_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x262e823a'/>
+      <elf-symbol name='wait_for_completion_interruptible_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa33c0eac'/>
+      <elf-symbol name='wait_for_completion_io_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x139cee21'/>
+      <elf-symbol name='wait_for_completion_killable' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa096b889'/>
+      <elf-symbol name='wait_for_completion_killable_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x917490b'/>
+      <elf-symbol name='wait_for_completion_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4d1ff60a'/>
+      <elf-symbol name='wait_woken' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb308c97d'/>
+      <elf-symbol name='wake_up_bit' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0fbac79'/>
+      <elf-symbol name='wake_up_process' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9184295c'/>
+      <elf-symbol name='wakeup_source_add' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x832f897'/>
+      <elf-symbol name='wakeup_source_create' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7937c985'/>
+      <elf-symbol name='wakeup_source_destroy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x416643e8'/>
+      <elf-symbol name='wakeup_source_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x863caa85'/>
+      <elf-symbol name='wakeup_source_remove' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d9b342f'/>
+      <elf-symbol name='wakeup_source_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8681b31a'/>
+      <elf-symbol name='watchdog_init_timeout' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe272c567'/>
+      <elf-symbol name='watchdog_register_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7464c503'/>
+      <elf-symbol name='watchdog_set_restart_priority' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xda7653ef'/>
+      <elf-symbol name='watchdog_unregister_device' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8153ca78'/>
+      <elf-symbol name='wiphy_apply_custom_regulatory' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdd37250a'/>
+      <elf-symbol name='wiphy_free' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x850987a2'/>
+      <elf-symbol name='wiphy_new_nm' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3aca9cfc'/>
+      <elf-symbol name='wiphy_read_of_freq_limits' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe65f47bc'/>
+      <elf-symbol name='wiphy_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcad973c9'/>
+      <elf-symbol name='wiphy_to_ieee80211_hw' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1aeac582'/>
+      <elf-symbol name='wiphy_unregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e053e71'/>
+      <elf-symbol name='woken_wake_function' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd0654aba'/>
+      <elf-symbol name='work_busy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x86ab091d'/>
+      <elf-symbol name='would_dump' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb68129e7'/>
+      <elf-symbol name='write_inode_now' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x490a7a78'/>
+      <elf-symbol name='ww_mutex_lock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1fc5b6d7'/>
+      <elf-symbol name='ww_mutex_lock_interruptible' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf5196ddb'/>
+      <elf-symbol name='ww_mutex_unlock' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f59a34e'/>
+      <elf-symbol name='xa_erase' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x745a981'/>
+      <elf-symbol name='xa_load' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa85a3e6d'/>
+      <elf-symbol name='xdp_convert_zc_to_xdp_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff015373'/>
+      <elf-symbol name='xdp_do_flush_map' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x559b27f8'/>
+      <elf-symbol name='xdp_do_redirect' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x288dccdc'/>
+      <elf-symbol name='xdp_return_frame' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x491b21c9'/>
+      <elf-symbol name='xdp_return_frame_rx_napi' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcf844f71'/>
+      <elf-symbol name='xdp_rxq_info_reg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x794ee757'/>
+      <elf-symbol name='xdp_rxq_info_reg_mem_model' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb7529cba'/>
+      <elf-symbol name='xdp_rxq_info_unreg' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x56e1af1b'/>
+      <elf-symbol name='xfrm4_protocol_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20f9ace1'/>
+      <elf-symbol name='xfrm4_protocol_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x749e2c54'/>
+      <elf-symbol name='xfrm4_rcv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1caa59b'/>
+      <elf-symbol name='xfrm4_tunnel_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc64822d5'/>
+      <elf-symbol name='xfrm4_tunnel_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf69818d7'/>
+      <elf-symbol name='xfrm6_find_1stfragopt' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf21378e8'/>
+      <elf-symbol name='xfrm6_protocol_deregister' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8d813e35'/>
+      <elf-symbol name='xfrm6_protocol_register' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dbfb433'/>
+      <elf-symbol name='xfrm6_rcv' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4ac8bade'/>
+      <elf-symbol name='xfrm_aalg_get_byname' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x37a02412'/>
+      <elf-symbol name='xfrm_init_state' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b447dff'/>
+      <elf-symbol name='xfrm_input' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb57bb37d'/>
+      <elf-symbol name='xfrm_input_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7af062a4'/>
+      <elf-symbol name='xfrm_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x66987200'/>
+      <elf-symbol name='xfrm_output_resume' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe40fa9c7'/>
+      <elf-symbol name='xfrm_register_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x560e2ed1'/>
+      <elf-symbol name='xfrm_state_afinfo_get_rcu' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc97a7b64'/>
+      <elf-symbol name='xfrm_state_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf890627f'/>
+      <elf-symbol name='xfrm_state_insert' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacb0da24'/>
+      <elf-symbol name='xfrm_state_lookup' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd7d7531'/>
+      <elf-symbol name='xfrm_unregister_type' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x317d7702'/>
+      <elf-symbol name='xt_hook_ops_alloc' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4fb60ad'/>
+      <elf-symbol name='xt_register_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf54ac311'/>
+      <elf-symbol name='xt_register_matches' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x632aaa7a'/>
+      <elf-symbol name='xt_register_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e092046'/>
+      <elf-symbol name='xt_register_targets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38a8462d'/>
+      <elf-symbol name='xt_unregister_match' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2dfe5a61'/>
+      <elf-symbol name='xt_unregister_matches' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xff42b7fd'/>
+      <elf-symbol name='xt_unregister_target' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x88e5aae4'/>
+      <elf-symbol name='xt_unregister_targets' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4be838b3'/>
+      <elf-symbol name='zlib_deflate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf2c43f3f'/>
+      <elf-symbol name='zlib_deflateEnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc890c008'/>
+      <elf-symbol name='zlib_deflateInit2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5a0b73d0'/>
+      <elf-symbol name='zlib_deflateReset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6aeefac4'/>
+      <elf-symbol name='zlib_deflate_workspacesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9f7149c'/>
+      <elf-symbol name='zlib_inflate' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x581f98da'/>
+      <elf-symbol name='zlib_inflateEnd' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x107e5878'/>
+      <elf-symbol name='zlib_inflateIncomp' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x424d3620'/>
+      <elf-symbol name='zlib_inflateInit2' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x35a88f28'/>
+      <elf-symbol name='zlib_inflateReset' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbb0540aa'/>
+      <elf-symbol name='zlib_inflate_workspacesize' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xce5ac24f'/>
+    </elf-function-symbols>
+    <elf-variable-symbols>
+      <elf-symbol name='__cpu_active_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15db3b99'/>
+      <elf-symbol name='__cpu_online_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xac594e02'/>
+      <elf-symbol name='__cpu_possible_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xde7ece30'/>
+      <elf-symbol name='__cpu_present_mask' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb3055449'/>
+      <elf-symbol name='__num_online_cpus' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc60d0620'/>
+      <elf-symbol name='__per_cpu_offset' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x280f9f14'/>
+      <elf-symbol name='__stack_chk_guard' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f678b07'/>
+      <elf-symbol name='__tracepoint_android_vh_psci_cpu_suspend' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa2bb4e64'/>
+      <elf-symbol name='__tracepoint_android_vh_psci_tos_resident_on' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa47bec35'/>
+      <elf-symbol name='__tracepoint_clock_set_rate' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe86cdf49'/>
+      <elf-symbol name='__tracepoint_dma_fence_emit' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x349ac524'/>
+      <elf-symbol name='__tracepoint_gpu_mem_total' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfbeb6f2f'/>
+      <elf-symbol name='__tracepoint_xdp_exception' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x666b755a'/>
+      <elf-symbol name='_ctype' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x11089ac7'/>
+      <elf-symbol name='_totalram_pages' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x944375db'/>
+      <elf-symbol name='amba_bustype' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9bf5f181'/>
+      <elf-symbol name='arch_timer_read_counter' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x75fb9062'/>
+      <elf-symbol name='arm64_const_caps_ready' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14b89635'/>
+      <elf-symbol name='arp_tbl' size='568' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa55b47a3'/>
+      <elf-symbol name='balloon_aops' size='200' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7ca2da4'/>
+      <elf-symbol name='bpf_stats_enabled_key' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf84bd6ee'/>
+      <elf-symbol name='bridge_tunnel_header' size='6' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1879fcbd'/>
+      <elf-symbol name='clk_fixed_factor_ops' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbd7bb311'/>
+      <elf-symbol name='clk_fixed_rate_ops' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xeb75a95'/>
+      <elf-symbol name='console_printk' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2592fc6c'/>
+      <elf-symbol name='console_suspend_enabled' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x366307a'/>
+      <elf-symbol name='contig_page_data' size='5760' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xadf6331a'/>
+      <elf-symbol name='cpu_all_bits' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd994ecee'/>
+      <elf-symbol name='cpu_bit_bitmap' size='520' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x62ad2053'/>
+      <elf-symbol name='cpu_hwcap_keys' size='992' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5e2d7875'/>
+      <elf-symbol name='cpu_hwcaps' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5c1c3eb4'/>
+      <elf-symbol name='cpu_number' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7a2af7b4'/>
+      <elf-symbol name='cpu_subsys' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xacdc685'/>
+      <elf-symbol name='cpu_topology' size='1280' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42bf23cb'/>
+      <elf-symbol name='cpufreq_freq_attr_scaling_available_freqs' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x10b77b32'/>
+      <elf-symbol name='cpufreq_freq_attr_scaling_boost_freqs' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x22edbca6'/>
+      <elf-symbol name='cpufreq_generic_attr' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x925f5795'/>
+      <elf-symbol name='cpuhp_tasks_frozen' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4507f4a8'/>
+      <elf-symbol name='crc_ccitt_table' size='512' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7f03b6a9'/>
+      <elf-symbol name='crypto_ablkcipher_type' size='72' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa44ceb3f'/>
+      <elf-symbol name='crypto_aes_inv_sbox' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa84ce9e0'/>
+      <elf-symbol name='crypto_aes_sbox' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd9d952d1'/>
+      <elf-symbol name='dma_contiguous_default_area' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4fd950ed'/>
+      <elf-symbol name='dma_fence_array_ops' size='72' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe03a689d'/>
+      <elf-symbol name='drm_debug' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x20645642'/>
+      <elf-symbol name='drm_gem_cma_vm_ops' size='144' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x46f71313'/>
+      <elf-symbol name='efi' size='344' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0f493d9'/>
+      <elf-symbol name='efi_tpm_final_log_size' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe9e8faeb'/>
+      <elf-symbol name='fb_mode_option' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xdaf4dfb3'/>
+      <elf-symbol name='flow_keys_basic_dissector' size='60' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa7e38f12'/>
+      <elf-symbol name='fpsimd_context_busy' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8946ea72'/>
+      <elf-symbol name='fs_bio_set' size='272' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9f2937'/>
+      <elf-symbol name='generic_ro_fops' size='288' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbc872823'/>
+      <elf-symbol name='governor_sysfs_ops' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1d6a9b23'/>
+      <elf-symbol name='hash_digest_size' size='80' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd24e146'/>
+      <elf-symbol name='i2c_adapter_type' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7688e34d'/>
+      <elf-symbol name='i2c_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4b6880c'/>
+      <elf-symbol name='ignore_console_lock_warning' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98e508ef'/>
+      <elf-symbol name='init_net' size='4352' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc9175eb1'/>
+      <elf-symbol name='init_task' size='3776' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7d9429d7'/>
+      <elf-symbol name='init_user_ns' size='568' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfcd2c02'/>
+      <elf-symbol name='init_uts_ns' size='440' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa44919c8'/>
+      <elf-symbol name='iomem_resource' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc7da062f'/>
+      <elf-symbol name='irq_generic_chip_ops' size='80' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x124a303e'/>
+      <elf-symbol name='jiffies' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15ba50a6'/>
+      <elf-symbol name='jiffies_64' size='8' type='object-type' binding='global-binding' visibility='default-visibility' alias='jiffies' is-defined='yes' crc='0x55e77e8'/>
+      <elf-symbol name='kernel_kobj' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf46695b5'/>
+      <elf-symbol name='kimage_voffset' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe4bbc1dd'/>
+      <elf-symbol name='kmalloc_caches' size='224' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x96db7d36'/>
+      <elf-symbol name='kstat' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x38869d88'/>
+      <elf-symbol name='loops_per_jiffy' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xba497f13'/>
+      <elf-symbol name='memstart_addr' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9688de8b'/>
+      <elf-symbol name='msm_pinctrl_dev_pm_ops' size='192' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x98307c54'/>
+      <elf-symbol name='nd_tbl' size='568' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1b46c629'/>
+      <elf-symbol name='net_namespace_list' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6d2fc5a6'/>
+      <elf-symbol name='nr_cpu_ids' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x17de3d5'/>
+      <elf-symbol name='nr_irqs' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcdca3691'/>
+      <elf-symbol name='nr_swap_pages' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa0d3456d'/>
+      <elf-symbol name='of_fwnode_ops' size='128' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xa41e6706'/>
+      <elf-symbol name='of_root' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4159ba2c'/>
+      <elf-symbol name='oops_in_progress' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb1c3a01a'/>
+      <elf-symbol name='overflowgid' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7171121c'/>
+      <elf-symbol name='overflowuid' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8b618d08'/>
+      <elf-symbol name='panic_notifier_list' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ceeac9'/>
+      <elf-symbol name='panic_timeout' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1f8544b8'/>
+      <elf-symbol name='param_array_ops' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6fc1463e'/>
+      <elf-symbol name='param_ops_bint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x3907b0c5'/>
+      <elf-symbol name='param_ops_bool' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9fb51d77'/>
+      <elf-symbol name='param_ops_byte' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b76e2ec'/>
+      <elf-symbol name='param_ops_charp' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1232356f'/>
+      <elf-symbol name='param_ops_int' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x50c8957'/>
+      <elf-symbol name='param_ops_long' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc2b310ea'/>
+      <elf-symbol name='param_ops_string' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2e61b5e3'/>
+      <elf-symbol name='param_ops_uint' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xebc7fb57'/>
+      <elf-symbol name='param_ops_ullong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x588f7610'/>
+      <elf-symbol name='param_ops_ulong' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc25ddb98'/>
+      <elf-symbol name='param_ops_ushort' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2b5c7b18'/>
+      <elf-symbol name='pci_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67f1bb4b'/>
+      <elf-symbol name='platform_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x1dd59444'/>
+      <elf-symbol name='pm_power_off' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x60a32ea9'/>
+      <elf-symbol name='pm_suspend_global_flags' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x42635d55'/>
+      <elf-symbol name='posix_acl_access_xattr_handler' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4b965b27'/>
+      <elf-symbol name='posix_acl_default_xattr_handler' size='48' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5f7e4bf6'/>
+      <elf-symbol name='raw_v4_hashinfo' size='2056' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xb510c250'/>
+      <elf-symbol name='raw_v6_hashinfo' size='2056' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xed7c7b91'/>
+      <elf-symbol name='reboot_mode' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x429c3f9c'/>
+      <elf-symbol name='reservation_ww_class' size='32' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcc328a5c'/>
+      <elf-symbol name='rfc1042_header' size='6' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x69b18f43'/>
+      <elf-symbol name='rps_needed' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8761c87b'/>
+      <elf-symbol name='scsi_command_size_tbl' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x334da4e'/>
+      <elf-symbol name='snd_pcm_alt_chmaps' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x9e913c1'/>
+      <elf-symbol name='snd_pcm_std_chmaps' size='96' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x4e1b99f'/>
+      <elf-symbol name='snd_soc_pm_ops' size='192' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x14982592'/>
+      <elf-symbol name='softnet_data' size='704' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7e66369a'/>
+      <elf-symbol name='spi_bus_type' size='208' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8547dcbe'/>
+      <elf-symbol name='static_key_initialized' size='1' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xbea5ff1e'/>
+      <elf-symbol name='sys_tz' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xfe5d4bb2'/>
+      <elf-symbol name='system_freezable_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4034828'/>
+      <elf-symbol name='system_freezing_cnt' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x7ab88a45'/>
+      <elf-symbol name='system_highpri_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xcd91b127'/>
+      <elf-symbol name='system_long_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x131db64a'/>
+      <elf-symbol name='system_power_efficient_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x47884890'/>
+      <elf-symbol name='system_state' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x15af7f4'/>
+      <elf-symbol name='system_unbound_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd4c14632'/>
+      <elf-symbol name='system_wq' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x2d3385d3'/>
+      <elf-symbol name='timer_unstable_counter_workaround' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x8f5fb950'/>
+      <elf-symbol name='ttm_bo_manager_func' size='40' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x16242c93'/>
+      <elf-symbol name='tty_std_termios' size='44' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x67b27ec1'/>
+      <elf-symbol name='usb_debug_root' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x85ffce2'/>
+      <elf-symbol name='usb_hcd_pci_pm_ops' size='192' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x5d2c4553'/>
+      <elf-symbol name='usb_hcds_loaded' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc17515d7'/>
+      <elf-symbol name='uuid_null' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x6dcf857f'/>
+      <elf-symbol name='v4l2_subdev_call_wrappers' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7de0457'/>
+      <elf-symbol name='v4l2_type_names' size='120' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x123959a1'/>
+      <elf-symbol name='vabits_actual' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xc56a41e6'/>
+      <elf-symbol name='vb2_dma_contig_memops' size='120' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xf7143f5b'/>
+      <elf-symbol name='vm_event_states' size='584' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0x95b0105'/>
+      <elf-symbol name='vm_node_stat' size='256' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xe5c4cf93'/>
+      <elf-symbol name='xt_tee_enabled' size='16' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes' crc='0xd3fcc511'/>
+    </elf-variable-symbols>
+    <abi-instr address-size='64' path='arch/arm64/crypto/aes-ce-glue.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1920' id='08b4ad9f'>
+        <subrange length='60' type-id='7ff19f0f' id='b114e3c3'/>
+      </array-type-def>
+      <class-decl name='crypto_aes_ctx' size-in-bits='3872' is-struct='yes' visibility='default' filepath='include/crypto/aes.h' line='25' column='1' id='b5b9216e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key_enc' type-id='08b4ad9f' visibility='default' filepath='include/crypto/aes.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='key_dec' type-id='08b4ad9f' visibility='default' filepath='include/crypto/aes.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='key_length' type-id='19c2251e' visibility='default' filepath='include/crypto/aes.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b5b9216e' size-in-bits='64' id='21370cb4'/>
+      <function-decl name='ce_aes_expandkey' mangled-name='ce_aes_expandkey' filepath='arch/arm64/crypto/aes-ce-glue.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ce_aes_expandkey'>
+        <parameter type-id='21370cb4' name='ctx' filepath='arch/arm64/crypto/aes-ce-glue.c' line='74' column='1'/>
+        <parameter type-id='bbaf3419' name='in_key' filepath='arch/arm64/crypto/aes-ce-glue.c' line='74' column='1'/>
+        <parameter type-id='f0981eeb' name='key_len' filepath='arch/arm64/crypto/aes-ce-glue.c' line='75' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='7ff19f0f'/>
+      <pointer-type-def type-id='19272f09' size-in-bits='64' id='bbaf3419'/>
+      <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+      <typedef-decl name='u32' type-id='3f1a6b60' filepath='include/asm-generic/int-ll64.h' line='21' column='1' id='19c2251e'/>
+      <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+      <qualified-type-def type-id='f9b06939' const='yes' id='19272f09'/>
+      <typedef-decl name='__u32' type-id='f0981eeb' filepath='include/uapi/asm-generic/int-ll64.h' line='27' column='1' id='3f1a6b60'/>
+      <typedef-decl name='u8' type-id='8f048e17' filepath='include/asm-generic/int-ll64.h' line='17' column='1' id='f9b06939'/>
+      <typedef-decl name='__u8' type-id='002ac4a6' filepath='include/uapi/asm-generic/int-ll64.h' line='21' column='1' id='8f048e17'/>
+      <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/cacheinfo.c' language='LANG_C89'>
+      <function-decl name='cache_line_size' mangled-name='cache_line_size' filepath='arch/arm64/kernel/cacheinfo.c' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cache_line_size'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/cpufeature.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='237c0d27' size-in-bits='7936' id='6288ed8b'>
+        <subrange length='62' type-id='7ff19f0f' id='f519cbfd'/>
+      </array-type-def>
+      <class-decl name='static_key_false' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='350' column='1' id='237c0d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='cpu_hwcap_keys' type-id='6288ed8b' mangled-name='cpu_hwcap_keys' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='82' column='1' elf-symbol-id='cpu_hwcap_keys'/>
+      <var-decl name='arm64_const_caps_ready' type-id='237c0d27' mangled-name='arm64_const_caps_ready' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='2082' column='1' elf-symbol-id='arm64_const_caps_ready'/>
+      <var-decl name='cpu_hwcaps' type-id='f066dd3c' mangled-name='cpu_hwcaps' visibility='default' filepath='arch/arm64/kernel/cpufeature.c' line='41' column='1' elf-symbol-id='cpu_hwcaps'/>
+      <function-decl name='cpu_have_feature' mangled-name='cpu_have_feature' filepath='arch/arm64/kernel/cpufeature.c' line='2109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_have_feature'>
+        <parameter type-id='f0981eeb' name='num' filepath='arch/arm64/kernel/cpufeature.c' line='2109' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <class-decl name='static_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='87' column='1' id='00205383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='49178f86' visibility='default' filepath='include/linux/jump_label.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7792d5a2' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bool' type-id='c894953d' filepath='include/linux/types.h' line='30' column='1' id='b50a4934'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='64' id='f066dd3c'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <type-decl name='bool' size-in-bits='8' id='c894953d'/>
+      <typedef-decl name='atomic_t' type-id='79faeff3' filepath='include/linux/types.h' line='173' column='1' id='49178f86'/>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1' id='7792d5a2'>
+        <data-member access='public'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/jump_label.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='include/linux/jump_label.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='include/linux/jump_label.h' line='105' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='49178f86' visibility='default' filepath='include/linux/types.h' line='171' column='1' id='79faeff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='95e97e5e' visibility='default' filepath='include/linux/types.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ca0c09a6' size-in-bits='64' id='7a35228c'/>
+      <pointer-type-def type-id='5081ed08' size-in-bits='64' id='c77a71ce'/>
+      <class-decl name='jump_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='122' column='1' id='ca0c09a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='bd54fe1a' visibility='default' filepath='include/linux/jump_label.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key_mod' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/jump_label.c' line='510' column='1' id='5081ed08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='kernel/jump_label.c' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='kernel/jump_label.c' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='kernel/jump_label.c' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
+      <pointer-type-def type-id='29476915' size-in-bits='64' id='2730d015'/>
+      <typedef-decl name='s32' type-id='3158a266' filepath='include/asm-generic/int-ll64.h' line='20' column='1' id='a7832498'/>
+      <class-decl name='module' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='349' column='1' id='29476915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='327e04c6' visibility='default' filepath='include/linux/module.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkobj' type-id='7bd9942c' visibility='default' filepath='include/linux/module.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='modinfo_attrs' type-id='063da268' visibility='default' filepath='include/linux/module.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='srcversion' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='holders_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cfi_check' type-id='d7c6106c' visibility='default' filepath='include/linux/module.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='param_lock' type-id='925167dc' visibility='default' filepath='include/linux/module.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='kp' type-id='a7c6e908' visibility='default' filepath='include/linux/module.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='num_kp' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='num_gpl_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='gpl_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gpl_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='using_gplonly_symbols' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2696'>
+          <var-decl name='sig_ok' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='async_probe_requested' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='gpl_future_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='gpl_future_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_gpl_future_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='num_exentries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='extable' type-id='7f0eb64c' visibility='default' filepath='include/linux/module.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='init' type-id='1db260e5' visibility='default' filepath='include/linux/module.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='core_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='init_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='arch' type-id='ea05c185' visibility='default' filepath='include/linux/module.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='taints' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='num_bugs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='bug_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='bug_table' type-id='c250b0e4' visibility='default' filepath='include/linux/module.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='kallsyms' type-id='209d601e' visibility='default' filepath='include/linux/module.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='core_kallsyms' type-id='6a003ee8' visibility='default' filepath='include/linux/module.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sect_attrs' type-id='3f4455c4' visibility='default' filepath='include/linux/module.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='notes_attrs' type-id='f0cb8b62' visibility='default' filepath='include/linux/module.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='args' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='percpu' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='percpu_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='num_tracepoints' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tracepoints_ptrs' type-id='700727c0' visibility='default' filepath='include/linux/module.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='num_srcu_structs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='srcu_struct_ptrs' type-id='57933490' visibility='default' filepath='include/linux/module.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_bpf_raw_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='bpf_raw_events' type-id='1f7f0216' visibility='default' filepath='include/linux/module.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='jump_entries' type-id='7a35228c' visibility='default' filepath='include/linux/module.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='num_jump_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='num_trace_bprintk_fmt' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='trace_bprintk_fmt_start' type-id='7d3cd834' visibility='default' filepath='include/linux/module.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='trace_events' type-id='109cc752' visibility='default' filepath='include/linux/module.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_trace_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='trace_evals' type-id='69881700' visibility='default' filepath='include/linux/module.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='num_trace_evals' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='source_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='target_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='exit' type-id='953b12f8' visibility='default' filepath='include/linux/module.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/module.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ei_funcs' type-id='7f79f20e' visibility='default' filepath='include/linux/module.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='num_ei_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='522' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__s32' type-id='95e97e5e' filepath='include/uapi/asm-generic/int-ll64.h' line='26' column='1' id='3158a266'/>
+      <pointer-type-def type-id='72790540' size-in-bits='64' id='1f7f0216'/>
+      <pointer-type-def type-id='93630c4e' size-in-bits='64' id='c250b0e4'/>
+      <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <class-decl name='list_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='181' column='1' id='72f469ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_arch_specific' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='19' column='1' id='ea05c185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='init' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ftrace_trampoline' type-id='72ece9e2' visibility='default' filepath='arch/arm64/include/asm/module.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_kallsyms' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='333' column='1' id='6a003ee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symtab' type-id='7d71a706' visibility='default' filepath='include/linux/module.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_symtab' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strtab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='typetab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_kobject' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='44' column='1' id='7bd9942c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/module.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='drivers_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mp' type-id='ad9e36e6' visibility='default' filepath='include/linux/module.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj_completion' type-id='389faaf7' visibility='default' filepath='include/linux/module.h' line='49' 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='309' column='1' id='68b3d9a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='text_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ro_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ro_after_init_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mtn' type-id='3351dce1' visibility='default' filepath='include/linux/module.h' line='322' 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='925167dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='f22a8abb' 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='fb4018a0' 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='0c3105cd' 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='72f469ec' visibility='default' filepath='include/linux/mutex.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
+      <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
+      <pointer-type-def type-id='d03af91a' size-in-bits='64' id='fcd64690'/>
+      <pointer-type-def type-id='5e3feda8' size-in-bits='64' id='e0a2e3a6'/>
+      <enum-decl name='module_state' filepath='include/linux/module.h' line='297' column='1' id='327e04c6'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='e6a2a878' size-in-bits='64' id='7f79f20e'/>
+      <pointer-type-def type-id='da1095b6' size-in-bits='64' id='7f0eb64c'/>
+      <pointer-type-def type-id='276427e1' size-in-bits='64' id='1db260e5'/>
+      <pointer-type-def type-id='ca10d3ca' size-in-bits='64' id='a7c6e908'/>
+      <pointer-type-def type-id='b6ab8849' size-in-bits='64' id='d30bdc51'/>
+      <pointer-type-def type-id='6a003ee8' size-in-bits='64' id='209d601e'/>
+      <pointer-type-def type-id='8f90cd2a' size-in-bits='64' id='063da268'/>
+      <pointer-type-def type-id='96b6b914' size-in-bits='64' id='f0cb8b62'/>
+      <pointer-type-def type-id='b43b0dce' size-in-bits='64' id='3f4455c4'/>
+      <pointer-type-def type-id='f7d7131a' size-in-bits='64' id='57933490'/>
+      <pointer-type-def type-id='0f81ed2a' size-in-bits='64' id='69881700'/>
+      <pointer-type-def type-id='23d6768c' size-in-bits='64' id='109cc752'/>
+      <pointer-type-def type-id='e431ac27' size-in-bits='64' id='700727c0'/>
+      <typedef-decl name='cfi_check_fn' type-id='64115f6c' filepath='include/linux/cfi.h' line='15' column='1' id='d7c6106c'/>
+      <typedef-decl name='u64' type-id='d3130597' filepath='include/asm-generic/int-ll64.h' line='23' column='1' id='91ce1af9'/>
+      <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/>
+      <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
+      <pointer-type-def type-id='7cdfe313' size-in-bits='64' id='7d71a706'/>
+      <type-decl name='char' size-in-bits='8' id='a84c031d'/>
+      <class-decl name='bpf_raw_event_map' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='44' column='1' id='72790540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/tracepoint-defs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_args' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writable_size' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bug_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/asm-generic/bug.h' line='24' column='1' id='93630c4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bug_addr_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='error_injection_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/asm-generic/error-injection.h' line='14' column='1' id='e6a2a878'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='7359adad' visibility='default' filepath='include/asm-generic/error-injection.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='etype' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/error-injection.h' line='16' 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='da1095b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='95e97e5e' 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='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/extable.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='69' column='1' id='ca10d3ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/moduleparam.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/moduleparam.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm' type-id='d5c0a628' visibility='default' filepath='include/linux/moduleparam.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='level' type-id='fdbf7a0f' visibility='default' filepath='include/linux/moduleparam.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/moduleparam.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='cbb4664d' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobject' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='66' column='1' id='b6ab8849'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kobject.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='d30bdc51' visibility='default' filepath='include/linux/kobject.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='kset' type-id='89b70200' visibility='default' filepath='include/linux/kobject.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ktype' type-id='c48b394e' visibility='default' filepath='include/linux/kobject.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sd' type-id='150efd3f' visibility='default' filepath='include/linux/kobject.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/kobject.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_initialized' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='state_in_sysfs' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='state_add_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_remove_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='uevent_suppress' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_plt_sec' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='13' column='1' id='1615ea0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plt_shndx' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='plt_num_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plt_max_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='16' 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='304' column='1' id='3351dce1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='dc9cc7c7' visibility='default' filepath='include/linux/module.h' line='306' 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='52' column='1' id='8f90cd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/module.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='9a6e3348' visibility='default' filepath='include/linux/module.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='96948294' visibility='default' filepath='include/linux/module.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='537ed613' visibility='default' filepath='include/linux/module.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='test' type-id='fe3af88b' visibility='default' filepath='include/linux/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='d6f1846c' visibility='default' filepath='include/linux/module.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_notes_attrs' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1660' column='1' id='96b6b914'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dir' type-id='d30bdc51' visibility='default' filepath='kernel/module.c' line='1661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notes' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attrs' type-id='7cfae8e1' visibility='default' filepath='kernel/module.c' line='1663' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_sect_attrs' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1547' column='1' id='b43b0dce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='grp' type-id='e4af473b' visibility='default' filepath='kernel/module.c' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nsections' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='attrs' type-id='ae08da59' visibility='default' filepath='kernel/module.c' line='1550' 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='0c3105cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tail' type-id='49178f86' visibility='default' filepath='include/linux/osq_lock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f9fef04f' size-in-bits='64' id='389faaf7'/>
+      <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+      <qualified-type-def type-id='9493d3c9' const='yes' id='d03af91a'/>
+      <qualified-type-def type-id='a7832498' const='yes' id='5e3feda8'/>
+      <pointer-type-def type-id='72f469ec' size-in-bits='64' id='e84b031a'/>
+      <pointer-type-def type-id='9e045430' size-in-bits='64' id='ad9e36e6'/>
+      <pointer-type-def type-id='2519c394' size-in-bits='64' id='72ece9e2'/>
+      <pointer-type-def type-id='e4a7867c' size-in-bits='64' id='f7d7131a'/>
+      <pointer-type-def type-id='49b910cc' size-in-bits='64' id='0f81ed2a'/>
+      <pointer-type-def type-id='fd48a6e6' size-in-bits='64' id='23d6768c'/>
+      <typedef-decl name='__u64' type-id='3a47d82b' filepath='include/uapi/asm-generic/int-ll64.h' line='31' column='1' id='d3130597'/>
+      <typedef-decl name='atomic_long_t' type-id='28ee064c' filepath='include/asm-generic/atomic-long.h' line='12' column='1' id='f22a8abb'/>
+      <typedef-decl name='spinlock_t' type-id='53fb272e' filepath='include/linux/spinlock_types.h' line='73' column='1' id='fb4018a0'/>
+      <typedef-decl name='tracepoint_ptr_t' type-id='d2d812d1' filepath='include/linux/tracepoint-defs.h' line='41' column='1' id='e431ac27'/>
+      <type-decl name='void' id='48b5725f'/>
+      <pointer-type-def type-id='cdd056d2' size-in-bits='64' id='64115f6c'/>
+      <array-type-def dimensions='1' type-id='d83a2db1' size-in-bits='infinite' id='7cfae8e1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='attribute' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='30' column='1' id='a6222917'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='2594b00f' visibility='default' filepath='include/linux/sysfs.h' line='32' 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='e4af473b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='f69fcfe1' 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='cc3e2efb' 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='862c676f' 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='87d62959' visibility='default' filepath='include/linux/sysfs.h' line='91' 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='f9fef04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' 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='b5ab048f' visibility='default' filepath='include/linux/completion.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_symbol' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/export.h' line='87' column='1' id='9493d3c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='include/linux/export.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='namespace' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='90' 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='19' column='1' id='400fb07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/kref.h' line='20' 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='dc9cc7c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='d46544fa' visibility='default' filepath='include/linux/rbtree_latch.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='9e045430'/>
+      <class-decl name='plt_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='41' column='1' id='2519c394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adrp' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='add' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='br' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='61' column='1' id='53fb272e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1076cffc' visibility='default' filepath='include/linux/spinlock_types.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_struct' size-in-bits='5184' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='64' column='1' id='e4a7867c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='01115b96' visibility='default' filepath='include/linux/srcutree.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='level' type-id='2f7565c6' visibility='default' filepath='include/linux/srcutree.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='srcu_cb_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='srcu_gp_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='srcu_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/srcutree.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='srcu_gp_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='srcu_last_gp_end' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sda' type-id='2a5ff2f1' visibility='default' filepath='include/linux/srcutree.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='srcu_barrier_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='srcu_barrier_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='srcu_barrier_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/srcutree.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='srcu_barrier_cpu_cnt' type-id='49178f86' visibility='default' filepath='include/linux/srcutree.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/srcutree.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint.h' line='27' column='1' id='49b910cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eval_string' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eval_value' type-id='7359adad' visibility='default' filepath='include/linux/tracepoint.h' line='30' 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='254' column='1' id='fd48a6e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3570c570' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7d3eb798' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event' type-id='78b26ac9' visibility='default' filepath='include/linux/trace_events.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='print_fmt' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='perf_refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perf_events' type-id='030d0b18' visibility='default' filepath='include/linux/trace_events.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog_array' type-id='380c7edc' visibility='default' filepath='include/linux/trace_events.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='perf_perm' type-id='7fa32aba' visibility='default' filepath='include/linux/trace_events.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='95d0d4e8' size-in-bits='64' id='99beed66'/>
+      <qualified-type-def type-id='1dc6a898' const='yes' id='d5c0a628'/>
+      <pointer-type-def type-id='e32cf39f' size-in-bits='64' id='fe3af88b'/>
+      <pointer-type-def type-id='29d79af7' size-in-bits='64' id='150efd3f'/>
+      <pointer-type-def type-id='1a08fab8' size-in-bits='64' id='c48b394e'/>
+      <pointer-type-def type-id='8cf069a2' size-in-bits='64' id='89b70200'/>
+      <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/>
+      <array-type-def dimensions='1' type-id='def413c9' size-in-bits='infinite' id='ae08da59'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='4ca0c298' size-in-bits='64' id='08e531de'/>
+      <qualified-type-def type-id='08e531de' const='yes' id='d2d812d1'/>
+      <typedef-decl name='Elf64_Sym' type-id='30bf9720' filepath='include/uapi/linux/elf.h' line='199' column='1' id='7cdfe313'/>
+      <typedef-decl name='atomic64_t' type-id='4efbf2c5' filepath='include/linux/types.h' line='178' column='1' id='28ee064c'/>
+      <typedef-decl name='s8' type-id='8af57d41' filepath='include/asm-generic/int-ll64.h' line='16' column='1' id='fdbf7a0f'/>
+      <pointer-type-def type-id='18188cce' size-in-bits='64' id='9a6e3348'/>
+      <pointer-type-def type-id='78199102' size-in-bits='64' id='96948294'/>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='cbb4664d'>
+        <data-member access='public'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='str' type-id='db4b7928' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='arr' type-id='ffa2ea6a' visibility='default' filepath='include/linux/moduleparam.h' line='79' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+      <pointer-type-def type-id='5985c13a' size-in-bits='64' id='d6f1846c'/>
+      <pointer-type-def type-id='7a42d02f' size-in-bits='64' id='537ed613'/>
+      <pointer-type-def type-id='0b001c1f' size-in-bits='64' id='862c676f'/>
+      <pointer-type-def type-id='c0e2acc9' size-in-bits='64' id='87d62959'/>
+      <pointer-type-def type-id='c75c7b06' size-in-bits='64' id='380c7edc'/>
+      <class-decl name='bin_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='161' column='1' id='d83a2db1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' 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='b59d7dce' 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='eaa32e2f' 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='afa767ca' 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='afa767ca' 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='a02c170c' visibility='default' filepath='include/linux/sysfs.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_work' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='118' column='1' id='5ad6e0ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/workqueue.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='30bf9720'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='st_name' type-id='e57120d4' 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='002ac4a6' 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='002ac4a6' 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='101a70d5' 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='e14340cf' 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='c87c44e4' visibility='default' filepath='include/uapi/linux/elf.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_node' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1' id='29d79af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kernfs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/kernfs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ns' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hash' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='de6f7c53' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id' type-id='3dfef700' visibility='default' filepath='include/linux/kernfs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/kernfs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/kernfs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iattr' type-id='1f4b5d14' visibility='default' filepath='include/linux/kernfs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_type' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='145' column='1' id='1a08fab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='aa377a8c' visibility='default' filepath='include/linux/kobject.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysfs_ops' type-id='ebd313ed' visibility='default' filepath='include/linux/kobject.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='default_attrs' type-id='862c676f' visibility='default' filepath='include/linux/kobject.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/kobject.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='child_ns_type' type-id='10f0a819' visibility='default' filepath='include/linux/kobject.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='namespace' type-id='9c1150bc' visibility='default' filepath='include/linux/kobject.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_ownership' type-id='96b6fff2' visibility='default' filepath='include/linux/kobject.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='204' column='1' id='8cf069a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/kobject.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/kobject.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uevent_ops' type-id='86462700' visibility='default' filepath='include/linux/kobject.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_sect_attr' size-in-bits='512' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1542' column='1' id='def413c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='battr' type-id='d83a2db1' visibility='default' filepath='kernel/module.c' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='kernel/module.c' line='1544' column='1'/>
+        </data-member>
+      </class-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='78b26ac9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' 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='72f469ec' 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='95e97e5e' 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='d6d37d27' visibility='default' filepath='include/linux/trace_events.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracepoint' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='30' column='1' id='4ca0c298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='00205383' visibility='default' filepath='include/linux/tracepoint-defs.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regfunc' type-id='1db260e5' visibility='default' filepath='include/linux/tracepoint-defs.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unregfunc' type-id='953b12f8' visibility='default' filepath='include/linux/tracepoint-defs.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='484b400f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='28ee064c' visibility='default' filepath='include/linux/types.h' line='176' column='1' id='4efbf2c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='9b7c55ef' visibility='default' filepath='include/linux/types.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1740bab9' const='yes' id='95d0d4e8'/>
+      <pointer-type-def type-id='d8801604' size-in-bits='64' id='ffa2ea6a'/>
+      <pointer-type-def type-id='ef40fb12' size-in-bits='64' id='db4b7928'/>
+      <pointer-type-def type-id='5ff1273a' size-in-bits='64' id='26461068'/>
+      <pointer-type-def type-id='e151255a' size-in-bits='64' id='030d0b18'/>
+      <pointer-type-def type-id='ca8c1528' size-in-bits='64' id='7fa32aba'/>
+      <array-type-def dimensions='1' type-id='2a8a6332' size-in-bits='384' id='d46544fa'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='1207cfa9' size-in-bits='64' id='2a5ff2f1'/>
+      <array-type-def dimensions='1' type-id='8dee6d89' size-in-bits='192' id='2f7565c6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='56798c81' size-in-bits='2304' id='01115b96'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='a2689372' size-in-bits='64' id='3570c570'/>
+      <typedef-decl name='__le32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='31' column='1' id='2f162548'/>
+      <typedef-decl name='__s8' type-id='28577a57' filepath='include/uapi/asm-generic/int-ll64.h' line='20' column='1' id='8af57d41'/>
+      <typedef-decl name='refcount_t' type-id='637cfeaf' filepath='include/linux/refcount.h' line='21' column='1' id='64615833'/>
+      <typedef-decl name='u16' type-id='d315442e' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='1dc6a898'/>
+      <typedef-decl name='umode_t' type-id='8efea9e5' filepath='include/linux/types.h' line='19' column='1' id='2594b00f'/>
+      <pointer-type-def type-id='5ea5a07d' size-in-bits='64' id='f69fcfe1'/>
+      <pointer-type-def type-id='449f791f' size-in-bits='64' id='cc3e2efb'/>
+      <typedef-decl name='wait_queue_head_t' type-id='cff07063' filepath='include/linux/wait.h' line='38' column='1' id='b5ab048f'/>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='7d3eb798'>
+        <data-member access='public'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/trace_events.h' line='260' column='1'/>
+        </data-member>
+      </union-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='1076cffc'>
+        <data-member access='public'>
+          <var-decl name='rlock' type-id='f106d0e5' visibility='default' filepath='include/linux/spinlock_types.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a6222917' size-in-bits='64' id='0b001c1f'/>
+      <pointer-type-def type-id='d83a2db1' size-in-bits='64' id='c0e2acc9'/>
+      <class-decl name='bpf_prog_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='525' column='1' id='c75c7b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='items' type-id='3f814540' visibility='default' filepath='include/linux/bpf.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='event_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1344' column='1' id='5ff1273a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='efd0fdec' visibility='default' filepath='kernel/trace/trace.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_string' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='1346' 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='185' column='1' id='e151255a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='186' 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='189' column='1' id='03a4a074'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='50a213e8' visibility='default' filepath='include/linux/types.h' line='190' 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='47' column='1' id='1740bab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='388a7f2a' visibility='default' filepath='include/linux/moduleparam.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get' type-id='d1c62993' visibility='default' filepath='include/linux/moduleparam.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/moduleparam.h' line='55' column='1'/>
+        </data-member>
+      </class-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='f106d0e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='641c41d1' visibility='default' filepath='include/linux/spinlock_types.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rb_node' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rbtree.h' line='24' column='1' id='2a8a6332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__rb_parent_color' type-id='7359adad' visibility='default' filepath='include/linux/rbtree.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_right' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rb_left' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='refcount_struct' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/refcount.h' line='19' column='1' id='637cfeaf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refs' type-id='49178f86' visibility='default' filepath='include/linux/refcount.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_data' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='24' column='1' id='1207cfa9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcu_lock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='srcu_unlock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_cblist' type-id='541c023a' visibility='default' filepath='include/linux/srcutree.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='srcu_cblist_invoking' type-id='b50a4934' visibility='default' filepath='include/linux/srcutree.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_work' type-id='abe41e67' visibility='default' filepath='include/linux/srcutree.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/srcutree.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='srcu_barrier_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/srcutree.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='mynode' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='grpmask' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ssp' type-id='f7d7131a' visibility='default' filepath='include/linux/srcutree.h' line='42' 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='48' column='1' id='56798c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcu_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='srcu_data_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='srcu_parent' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='grplo' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='grphi' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/timer.h' line='12' column='1' id='abe41e67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='03a4a074' visibility='default' filepath='include/linux/timer.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/linux/timer.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='function' type-id='9582ad9a' visibility='default' filepath='include/linux/timer.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/timer.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='27' 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='190' column='1' id='a2689372'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/trace_events.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg' type-id='50ec573b' visibility='default' filepath='include/linux/trace_events.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='define_fields' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_fields' type-id='17898fce' visibility='default' filepath='include/linux/trace_events.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fields' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_init' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='cff07063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='72f469ec' visibility='default' filepath='include/linux/wait.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='work_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='103' column='1' id='ef9025d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='f22a8abb' visibility='default' filepath='include/linux/workqueue.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/workqueue.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='72666d3f' visibility='default' filepath='include/linux/workqueue.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8ff9530e' size-in-bits='64' id='c97de1ac'/>
+      <pointer-type-def type-id='10e36dc5' size-in-bits='64' id='10f0a819'/>
+      <qualified-type-def type-id='3b156a69' const='yes' id='d8801604'/>
+      <qualified-type-def type-id='744e4af5' const='yes' id='ef40fb12'/>
+      <pointer-type-def type-id='b2d59d2a' size-in-bits='64' id='86462700'/>
+      <pointer-type-def type-id='0f840455' size-in-bits='64' id='ebd313ed'/>
+      <pointer-type-def type-id='cdead692' size-in-bits='64' id='a02c170c'/>
+      <pointer-type-def type-id='7b5435ce' size-in-bits='64' id='1f4b5d14'/>
+      <type-decl name='signed char' size-in-bits='8' id='28577a57'/>
+      <pointer-type-def type-id='56798c81' size-in-bits='64' id='8dee6d89'/>
+      <pointer-type-def type-id='195ea87f' size-in-bits='64' id='d6d37d27'/>
+      <pointer-type-def type-id='3132e187' size-in-bits='64' id='484b400f'/>
+      <typedef-decl name='Elf64_Addr' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='16' column='1' id='e14340cf'/>
+      <typedef-decl name='Elf64_Half' type-id='d315442e' filepath='include/uapi/linux/elf.h' line='17' column='1' id='101a70d5'/>
+      <typedef-decl name='Elf64_Word' type-id='3f1a6b60' filepath='include/uapi/linux/elf.h' line='21' column='1' id='e57120d4'/>
+      <typedef-decl name='Elf64_Xword' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='22' column='1' id='c87c44e4'/>
+      <typedef-decl name='__u16' type-id='8efea9e5' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='d315442e'/>
+      <typedef-decl name='s64' type-id='49659421' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='9b7c55ef'/>
+      <typedef-decl name='size_t' type-id='9e19ad6e' filepath='include/linux/types.h' line='55' column='1' id='b59d7dce'/>
+      <pointer-type-def type-id='e7e14410' size-in-bits='64' id='afa767ca'/>
+      <union-decl name='kernfs_node_id' size-in-bits='64' visibility='default' filepath='include/linux/kernfs.h' line='109' column='1' id='3dfef700'>
+        <data-member access='public'>
+          <var-decl name='' type-id='9d3d640f' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1' id='de6f7c53'>
+        <data-member access='public'>
+          <var-decl name='dir' type-id='4303ca40' visibility='default' filepath='include/linux/kernfs.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='symlink' type-id='c8685ef0' visibility='default' filepath='include/linux/kernfs.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='attr' type-id='9e04468e' visibility='default' filepath='include/linux/kernfs.h' line='154' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='10587c0a' size-in-bits='64' id='aa377a8c'/>
+      <pointer-type-def type-id='257e5168' size-in-bits='64' id='96b6fff2'/>
+      <pointer-type-def type-id='e0c79ce2' size-in-bits='64' id='9c1150bc'/>
+      <pointer-type-def type-id='a5159c01' size-in-bits='64' id='242e3d19'/>
+      <array-type-def dimensions='1' type-id='f67e137c' size-in-bits='infinite' id='3f814540'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='callback_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='219' column='1' id='e3d8ce29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='69c138b1' visibility='default' filepath='include/linux/types.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='eb839374' visibility='default' filepath='include/linux/types.h' line='221' 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='101' column='1' id='9e04468e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='d37373f6' visibility='default' filepath='include/linux/kernfs.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='627d9f9e' visibility='default' filepath='include/linux/kernfs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/kernfs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify_next' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_elem_dir' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='85' column='1' id='4303ca40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subdirs' type-id='7359adad' visibility='default' filepath='include/linux/kernfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='dec44472' visibility='default' filepath='include/linux/kernfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='e18defdb' visibility='default' filepath='include/linux/kernfs.h' line='94' 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='97' column='1' id='c8685ef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_iattrs' size-in-bits='640' is-struct='yes' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='21' column='1' id='7b5435ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_uid' type-id='d80b72e6' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_gid' type-id='094d8048' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_atime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_mtime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_ctime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='xattrs' type-id='00ed5110' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='28' 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='92' column='1' id='3b156a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='elemsize' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='807869d3' visibility='default' filepath='include/linux/moduleparam.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elem' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kparam_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='86' column='1' id='744e4af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxlen' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/moduleparam.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_segcblist' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/rcu_segcblist.h' line='67' column='1' id='541c023a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='69c138b1' visibility='default' filepath='include/linux/rcu_segcblist.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tails' type-id='68694f49' visibility='default' filepath='include/linux/rcu_segcblist.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gp_seq' type-id='f46d9f4d' visibility='default' filepath='include/linux/rcu_segcblist.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='len' type-id='f22a8abb' visibility='default' filepath='include/linux/rcu_segcblist.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='len_lazy' type-id='bd54fe1a' visibility='default' filepath='include/linux/rcu_segcblist.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enabled' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='offloaded' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='78' 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='195ea87f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trace' type-id='8e7f627c' 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='8e7f627c' 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='8e7f627c' 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='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='121' 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='3132e187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='eaa32e2f' 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='eaa32e2f' 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='95e97e5e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='243' column='1' id='a5159c01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwqs' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='kernel/workqueue.c' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_pwqs_to_flush' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='first_flusher' type-id='ec037527' visibility='default' filepath='kernel/workqueue.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flusher_queue' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flusher_overflow' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='maydays' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescuer' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_drainers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='saved_max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='unbound_attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dfl_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wq_dev' type-id='5cebc26e' visibility='default' filepath='kernel/workqueue.c' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='6653bb13' visibility='default' filepath='kernel/workqueue.c' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cpu_pwqs' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='numa_pwq_tbl' type-id='55b5dc02' visibility='default' filepath='kernel/workqueue.c' line='284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1' id='9d3d640f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e88d0150' size-in-bits='64' id='8ff9530e'/>
+      <qualified-type-def type-id='9f6abc71' const='yes' id='b2d59d2a'/>
+      <qualified-type-def type-id='e7826ffa' const='yes' id='0f840455'/>
+      <pointer-type-def type-id='03a4a074' size-in-bits='64' id='08cbad52'/>
+      <pointer-type-def type-id='08cbad52' size-in-bits='64' id='50a213e8'/>
+      <pointer-type-def type-id='05cd795f' size-in-bits='64' id='d1c62993'/>
+      <pointer-type-def type-id='e625eab0' size-in-bits='64' id='388a7f2a'/>
+      <pointer-type-def type-id='abe3ca10' size-in-bits='64' id='9a5ed472'/>
+      <pointer-type-def type-id='287b404f' size-in-bits='64' id='50ec573b'/>
+      <pointer-type-def type-id='08694484' size-in-bits='64' id='17898fce'/>
+      <pointer-type-def type-id='da952956' size-in-bits='64' id='efd0fdec'/>
+      <pointer-type-def type-id='2a8a6332' size-in-bits='64' id='e6532500'/>
+      <typedef-decl name='__kernel_size_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='72' column='1' id='9e19ad6e'/>
+      <typedef-decl name='__s64' type-id='1eb56b1e' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='49659421'/>
+      <typedef-decl name='arch_spinlock_t' type-id='c167abfb' filepath='include/asm-generic/qspinlock_types.h' line='52' column='1' id='641c41d1'/>
+      <typedef-decl name='work_func_t' type-id='939280af' filepath='include/linux/workqueue.h' line='22' column='1' id='72666d3f'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='128' id='f05e8e77'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='256' id='f46d9f4d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='8029c9e0' size-in-bits='64' id='9582ad9a'/>
+      <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/>
+      <pointer-type-def type-id='e3d8ce29' size-in-bits='64' id='69c138b1'/>
+      <array-type-def dimensions='1' type-id='162c1c01' size-in-bits='256' id='68694f49'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='192' id='6653bb13'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <class-decl name='bpf_prog_array_item' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='520' column='1' id='f67e137c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cgroup_storage' type-id='dcd9fb4c' visibility='default' filepath='include/linux/bpf.h' line='522' 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='168' column='1' id='9f6abc71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='2a3ad845' visibility='default' filepath='include/linux/kobject.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='1ea91ded' visibility='default' filepath='include/linux/kobject.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='9125ffcd' visibility='default' filepath='include/linux/kobject.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prog_entry' is-struct='yes' visibility='default' is-declaration-only='yes' id='da952956'/>
+      <class-decl name='qspinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='22' column='1' id='c167abfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='16e927d3' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' 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='31' column='1' id='dec44472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='simple_xattrs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='70' column='1' id='00ed5110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/xattr.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xattr.h' line='72' 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='223' column='1' id='e7826ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show' type-id='434e45fe' visibility='default' filepath='include/linux/sysfs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='store' type-id='855e70d2' visibility='default' filepath='include/linux/sysfs.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timespec64' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/time64.h' line='13' column='1' id='40a816ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='1afd27ac' visibility='default' filepath='include/linux/time64.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/time64.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e4af473b' const='yes' id='e88d0150'/>
+      <pointer-type-def type-id='499c8dd8' size-in-bits='64' id='d37373f6'/>
+      <pointer-type-def type-id='cc9b8e48' size-in-bits='64' id='627d9f9e'/>
+      <pointer-type-def type-id='471fc91b' size-in-bits='64' id='e18defdb'/>
+      <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
+      <pointer-type-def type-id='b0355154' size-in-bits='64' id='a7a31b92'/>
+      <array-type-def dimensions='1' type-id='a7a31b92' size-in-bits='infinite' id='55b5dc02'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <typedef-decl name='__kernel_ulong_t' type-id='7359adad' filepath='include/uapi/asm-generic/posix_types.h' line='16' column='1' id='447da2ae'/>
+      <typedef-decl name='kgid_t' type-id='bac1227a' filepath='include/linux/uidgid.h' line='28' column='1' id='094d8048'/>
+      <typedef-decl name='kuid_t' type-id='e8b29774' filepath='include/linux/uidgid.h' line='23' column='1' id='d80b72e6'/>
+      <typedef-decl name='loff_t' type-id='537a730e' filepath='include/linux/types.h' line='46' column='1' id='69bf7bee'/>
+      <typedef-decl name='trace_print_func' type-id='ff826f29' filepath='include/linux/trace_events.h' line='114' column='1' id='8e7f627c'/>
+      <pointer-type-def type-id='f0981eeb' size-in-bits='64' id='807869d3'/>
+      <pointer-type-def type-id='34135eb2' size-in-bits='64' id='eb839374'/>
+      <pointer-type-def type-id='4827f223' size-in-bits='64' id='939280af'/>
+      <pointer-type-def type-id='146df21f' size-in-bits='64' id='50a159c7'/>
+      <pointer-type-def type-id='2fe6f208' size-in-bits='64' id='cfd15e7e'/>
+      <pointer-type-def type-id='a88ecfc8' size-in-bits='64' id='5cebc26e'/>
+      <pointer-type-def type-id='c8eb0f4f' size-in-bits='64' id='ec037527'/>
+      <array-type-def dimensions='1' type-id='531c24d0' size-in-bits='128' id='dcd9fb4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='facd5338' size-in-bits='64' id='bdcee7ae'/>
+      <pointer-type-def type-id='69c138b1' size-in-bits='64' id='162c1c01'/>
+      <class-decl name='kernfs_open_node' size-in-bits='384' is-struct='yes' visibility='default' filepath='fs/kernfs/file.c' line='34' column='1' id='cc9b8e48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='fs/kernfs/file.c' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='fs/kernfs/file.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='fs/kernfs/file.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='files' type-id='72f469ec' visibility='default' filepath='fs/kernfs/file.c' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_root' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='191' column='1' id='471fc91b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ino_idr' type-id='37ce495e' visibility='default' filepath='include/linux/kernfs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='next_generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='syscall_ops' type-id='fefa8c5f' visibility='default' filepath='include/linux/kernfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='supers' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deactivate_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/kernfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pool_workqueue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='204' column='1' id='b0355154'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nr_in_flight' type-id='73c97830' visibility='default' filepath='kernel/workqueue.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delayed_works' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pwqs_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='unbound_release_work' type-id='ef9025d0' visibility='default' filepath='kernel/workqueue.c' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='24' column='1' id='146df21f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d331b3a2' 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='83c1bde6' 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='72666d3f' 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='a7a31b92' 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='72f469ec' 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='f23e2572' 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='1ce8c5e4' 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='72f469ec' 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='7359adad' 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='f0981eeb' 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='95e97e5e' 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='sleeping' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='desc' type-id='6653bb13' visibility='default' filepath='kernel/workqueue_internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescue_wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='59' 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='143' column='1' id='2fe6f208'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nice' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/workqueue.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_numa' type-id='b50a4934' visibility='default' filepath='include/linux/workqueue.h' line='161' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_device' size-in-bits='7552' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='5372' column='1' id='a88ecfc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='5373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='kernel/workqueue.c' line='5374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_flusher' size-in-bits='448' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='231' column='1' id='c8eb0f4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='kernel/workqueue.c' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='094d8048' visibility='default' filepath='include/linux/uidgid.h' line='26' column='1' id='bac1227a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='2bb2b96f' visibility='default' filepath='include/linux/uidgid.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='d80b72e6' visibility='default' filepath='include/linux/uidgid.h' line='21' column='1' id='e8b29774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='354978ed' visibility='default' filepath='include/linux/uidgid.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='84ba3262' const='yes' id='1ea91ded'/>
+      <qualified-type-def type-id='ae89b201' const='yes' id='499c8dd8'/>
+      <pointer-type-def type-id='a43a9295' size-in-bits='64' id='ff826f29'/>
+      <qualified-type-def type-id='a42969fa' const='yes' id='2a3ad845'/>
+      <qualified-type-def type-id='795bbc42' const='yes' id='9125ffcd'/>
+      <typedef-decl name='__kernel_loff_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='88' column='1' id='537a730e'/>
+      <pointer-type-def type-id='d5b6f34c' size-in-bits='64' id='434e45fe'/>
+      <pointer-type-def type-id='be97e3d8' size-in-bits='64' id='855e70d2'/>
+      <typedef-decl name='time64_t' type-id='49659421' filepath='include/linux/time64.h' line='8' column='1' id='1afd27ac'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1' id='16e927d3'>
+        <data-member access='public'>
+          <var-decl name='val' type-id='49178f86' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='e56340ee' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='33729b5d' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='15881542' size-in-bits='64' id='531c24d0'/>
+      <class-decl name='bpf_prog' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='540' column='1' id='facd5338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='jited' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='jit_requested' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='gpl_compatible' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='cb_access' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_needed' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='blinded' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_func' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='kprobe_override' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='has_callchain_buf' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='enforce_expected_attach_type' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='b80df76a' visibility='default' filepath='include/linux/filter.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='expected_attach_type' type-id='67ce11ed' visibility='default' filepath='include/linux/filter.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tag' type-id='d2f7b56a' visibility='default' filepath='include/linux/filter.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aux' type-id='1e6beae1' visibility='default' filepath='include/linux/filter.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_prog' type-id='e93ad915' visibility='default' filepath='include/linux/filter.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bpf_func' type-id='531a7450' visibility='default' filepath='include/linux/filter.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='fe772793' visibility='default' filepath='include/linux/filter.h' line='562' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1251' column='1' id='66e487eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/device.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='p' type-id='0d3b0dcf' visibility='default' filepath='include/linux/device.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='init_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='type' type-id='cd28613b' visibility='default' filepath='include/linux/device.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='include/linux/device.h' line='1261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/device.h' line='1270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='links' type-id='2d178f63' visibility='default' filepath='include/linux/device.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='power' type-id='f3166b6b' visibility='default' filepath='include/linux/device.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='pm_domain' type-id='a4375c03' visibility='default' filepath='include/linux/device.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='include/linux/device.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='pins' type-id='fa43ef1d' visibility='default' filepath='include/linux/device.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='msi_list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dma_ops' type-id='ac58af12' visibility='default' filepath='include/linux/device.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='dma_mask' type-id='3df9fd28' visibility='default' filepath='include/linux/device.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='coherent_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='bus_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_pfn_offset' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='dma_parms' type-id='9b4aaf1f' visibility='default' filepath='include/linux/device.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='dma_pools' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dma_mem' type-id='5bfba86c' visibility='default' filepath='include/linux/device.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='cma_area' type-id='6f67b38a' visibility='default' filepath='include/linux/device.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='archdata' type-id='d3e142f5' visibility='default' filepath='include/linux/device.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/device.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='devt' type-id='8504f260' visibility='default' filepath='include/linux/device.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6304'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='devres_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/device.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='devres_head' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='iommu_group' type-id='0b19fc54' visibility='default' filepath='include/linux/device.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='iommu_fwspec' type-id='1979c577' visibility='default' filepath='include/linux/device.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='iommu_param' type-id='506df562' visibility='default' filepath='include/linux/device.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offline_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='offline' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_synced' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dma_coherent' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1349' 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='37ce495e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idr_rt' type-id='d39738ac' 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='f0981eeb' 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='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='232' column='1' id='ae89b201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/kernfs.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/kernfs.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/kernfs.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/kernfs.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/kernfs.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/kernfs.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/kernfs.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='f9e738c5' visibility='default' filepath='include/linux/kernfs.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1' id='33729b5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked_pending' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tail' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='e56340ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ebb550f0' size-in-bits='64' id='84ba3262'/>
+      <pointer-type-def type-id='93be8120' size-in-bits='64' id='a42969fa'/>
+      <pointer-type-def type-id='6ee62c60' size-in-bits='64' id='795bbc42'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='480' id='73c97830'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <pointer-type-def type-id='91f5bcb7' size-in-bits='64' id='fefa8c5f'/>
+      <pointer-type-def type-id='bc3f1924' size-in-bits='64' id='f23e2572'/>
+      <typedef-decl name='cpumask_var_t' type-id='db98c084' filepath='include/linux/cpumask.h' line='751' column='1' id='b16b461b'/>
+      <typedef-decl name='gid_t' type-id='b4413cee' filepath='include/linux/types.h' line='33' column='1' id='2bb2b96f'/>
+      <typedef-decl name='uid_t' type-id='70734f24' filepath='include/linux/types.h' line='32' column='1' id='354978ed'/>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='26' column='1' id='d331b3a2'>
+        <data-member access='public'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hentry' type-id='03a4a074' visibility='default' filepath='kernel/workqueue_internal.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ef9025d0' size-in-bits='64' id='83c1bde6'/>
+      <pointer-type-def type-id='19ea21fe' size-in-bits='64' id='1ce8c5e4'/>
+      <pointer-type-def type-id='09d9fab9' size-in-bits='64' id='1e6beae1'/>
+      <pointer-type-def type-id='b31bfc8a' size-in-bits='64' id='5e2671f8'/>
+      <class-decl name='bpf_cgroup_storage' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='42' column='1' id='15881542'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dad3eb71' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='b6a33eaf' visibility='default' filepath='include/linux/bpf-cgroup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='d8d7111e' visibility='default' filepath='include/linux/bpf-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/bpf-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/bpf-cgroup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_archdata' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='8' column='1' id='d3e142f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/device.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_links_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1151' column='1' id='2d178f63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='needs_suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='defer_hook' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='need_for_probe' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='status' type-id='070abca2' visibility='default' filepath='include/linux/device.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_info' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='576' column='1' id='f3166b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_state' type-id='08496218' visibility='default' filepath='include/linux/pm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='can_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='async_suspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='in_dpm_list' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_noirq_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_late_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_pm' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='direct_complete' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/linux/pm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/pm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='1ea237a6' visibility='default' filepath='include/linux/pm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wakeup_path' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='syscore' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='no_pm_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='must_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='may_skip_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suspend_timer' type-id='b6993efc' visibility='default' filepath='include/linux/pm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='timer_expires' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/pm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='child_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disable_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='idle_notification' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='deferred_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='needs_force_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='runtime_auto' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ignore_children' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='no_callbacks' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='irq_safe' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='use_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='timer_autosuspends' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='memalloc_noio' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='links_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='request' type-id='2418515b' visibility='default' filepath='include/linux/pm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='runtime_status' type-id='3c1b7fd8' visibility='default' filepath='include/linux/pm.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='runtime_error' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_busy' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='active_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='suspended_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='accounting_timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subsys_data' type-id='77415389' visibility='default' filepath='include/linux/pm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_latency_tolerance' type-id='c3d2558f' visibility='default' filepath='include/linux/pm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='qos' type-id='b991f562' visibility='default' filepath='include/linux/pm.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='637' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_syscall_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='174' column='1' id='91f5bcb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show_options' type-id='efd5496b' visibility='default' filepath='include/linux/kernfs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mkdir' type-id='58d10a98' visibility='default' filepath='include/linux/kernfs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rmdir' type-id='0b56752f' visibility='default' filepath='include/linux/kernfs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rename' type-id='aea90108' visibility='default' filepath='include/linux/kernfs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show_path' type-id='26692209' visibility='default' filepath='include/linux/kernfs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_struct' size-in-bits='30208' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='636' column='1' id='bc3f1924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_info' type-id='575a2c7a' visibility='default' filepath='include/linux/sched.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='5efddaac' visibility='default' filepath='include/linux/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stack' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ptrace' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_entry' type-id='c5ccfee8' visibility='default' filepath='include/linux/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='on_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wakee_flips' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wakee_flip_decay_ts' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_wakee' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='recent_used_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='wake_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='on_rq' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='static_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='normal_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rt_priority' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sched_class' type-id='162b4cce' visibility='default' filepath='include/linux/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='se' type-id='2561fcb2' visibility='default' filepath='include/linux/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rt' type-id='29843697' visibility='default' filepath='include/linux/sched.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sched_task_group' type-id='3c32f9de' visibility='default' filepath='include/linux/sched.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dl' type-id='2d494b2d' visibility='default' filepath='include/linux/sched.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='preempt_notifiers' type-id='e151255a' visibility='default' filepath='include/linux/sched.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='nr_cpus_allowed' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cpus_ptr' type-id='af4bd535' visibility='default' filepath='include/linux/sched.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='cpus_mask' type-id='90bc6bed' visibility='default' filepath='include/linux/sched.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_read_lock_nesting' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rcu_read_unlock_special' type-id='a324790e' visibility='default' filepath='include/linux/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rcu_node_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='rcu_blocked_node' type-id='d5d06540' visibility='default' filepath='include/linux/sched.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='rcu_tasks_nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='rcu_tasks_holdout' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8904'>
+          <var-decl name='rcu_tasks_idx' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='rcu_tasks_idle_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='rcu_tasks_holdout_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='sched_info' type-id='59ddd03d' visibility='default' filepath='include/linux/sched.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='pushable_tasks' type-id='e3a91a7c' visibility='default' filepath='include/linux/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='pushable_dl_tasks' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='active_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vmacache' type-id='4f79f8f3' visibility='default' filepath='include/linux/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='rss_stat' type-id='dfedb05a' visibility='default' filepath='include/linux/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='exit_state' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='exit_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pdeath_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='jobctl' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='personality' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sched_reset_on_fork' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sched_contributes_to_load' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sched_migrated' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='sched_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='sched_psi_wake_requeue' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_execve' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='in_iowait' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='in_user_fault' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_cgroup_migration' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='use_memdelay' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='atomic_flags' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='restart_block' type-id='45e819d6' visibility='default' filepath='include/linux/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='tgid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='stack_canary' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='real_parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='group_leader' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='ptraced' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ptrace_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='thread_pid' type-id='b94e5398' visibility='default' filepath='include/linux/sched.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='pid_links' type-id='3f6e320a' visibility='default' filepath='include/linux/sched.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='thread_group' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='thread_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='vfork_done' type-id='389faaf7' visibility='default' filepath='include/linux/sched.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='set_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='clear_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='time_in_state' type-id='3df9fd28' visibility='default' filepath='include/linux/sched.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='real_start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='ptracer_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='real_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='cached_requested_key' type-id='204a4632' visibility='default' filepath='include/linux/sched.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/linux/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='nameidata' type-id='26452515' visibility='default' filepath='include/linux/sched.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='fs' type-id='08890290' visibility='default' filepath='include/linux/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15296'>
+          <var-decl name='files' type-id='16c53416' visibility='default' filepath='include/linux/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='nsproxy' type-id='dc5ce118' visibility='default' filepath='include/linux/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='signal' type-id='a91cd5f7' visibility='default' filepath='include/linux/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sighand' type-id='32cc1711' visibility='default' filepath='include/linux/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='real_blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='saved_sigmask' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15936'>
+          <var-decl name='sas_ss_sp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='sas_ss_size' type-id='b59d7dce' visibility='default' filepath='include/linux/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='sas_ss_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='task_works' type-id='69c138b1' visibility='default' filepath='include/linux/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='audit_context' type-id='a9f319d2' visibility='default' filepath='include/linux/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='loginuid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16288'>
+          <var-decl name='sessionid' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='seccomp' type-id='298af459' visibility='default' filepath='include/linux/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16448'>
+          <var-decl name='parent_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='self_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='alloc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16608'>
+          <var-decl name='pi_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='wake_q' type-id='69970be2' visibility='default' filepath='include/linux/sched.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='pi_waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='pi_top_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='pi_blocked_on' type-id='54d4ed50' visibility='default' filepath='include/linux/sched.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='journal_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='bio_list' type-id='ee802604' visibility='default' filepath='include/linux/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='plug' type-id='39944481' visibility='default' filepath='include/linux/sched.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='reclaim_state' type-id='c78f98c0' visibility='default' filepath='include/linux/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='io_context' type-id='d042cfad' visibility='default' filepath='include/linux/sched.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='capture_control' type-id='f886696f' visibility='default' filepath='include/linux/sched.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='ptrace_message' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='last_siginfo' type-id='3638c201' visibility='default' filepath='include/linux/sched.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='psi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='acct_rss_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='acct_vm_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='acct_timexpd' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='mems_allowed' type-id='6a7d16bb' visibility='default' filepath='include/linux/sched.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='mems_allowed_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/sched.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18400'>
+          <var-decl name='cpuset_mem_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='cpuset_slab_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='cgroups' type-id='85d57723' visibility='default' filepath='include/linux/sched.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cg_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='robust_list' type-id='c44b3996' visibility='default' filepath='include/linux/sched.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='compat_robust_list' type-id='917bb1c5' visibility='default' filepath='include/linux/sched.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='pi_state_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='pi_state_cache' type-id='0bbc9f87' visibility='default' filepath='include/linux/sched.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='futex_exit_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='futex_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='perf_event_ctxp' type-id='c7e7059f' visibility='default' filepath='include/linux/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='perf_event_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='perf_event_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='tlb_ubc' type-id='a3d9f566' visibility='default' filepath='include/linux/sched.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='' type-id='b45135d0' visibility='default' filepath='include/linux/sched.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='splice_pipe' type-id='15d29710' visibility='default' filepath='include/linux/sched.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='task_frag' type-id='06c0432f' visibility='default' filepath='include/linux/sched.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_dirtied' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='nr_dirtied_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='dirty_paused_when' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='default_timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='trace' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='trace_recursion' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='memcg_in_oom' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='memcg_oom_gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/sched.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20640'>
+          <var-decl name='memcg_oom_order' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='memcg_nr_pages_over_high' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_memcg' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20800'>
+          <var-decl name='throttle_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/sched.h' line='1264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='utask' type-id='9d2cef34' visibility='default' filepath='include/linux/sched.h' line='1268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20928'>
+          <var-decl name='pagefault_disabled' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='oom_reaper_list' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='stack_vm_area' type-id='d295dab2' visibility='default' filepath='include/linux/sched.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='stack_refcount' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='android_vendor_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='android_oem_data1' type-id='20a130cf' visibility='default' filepath='include/linux/sched.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21696'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21760'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='thread' type-id='0c8a83c7' visibility='default' filepath='include/linux/sched.h' line='1320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker_pool' size-in-bits='7168' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='152' column='1' id='19ea21fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='kernel/workqueue.c' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_ts' type-id='7359adad' visibility='default' filepath='kernel/workqueue.c' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='worklist' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_workers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nr_idle' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='idle_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='busy_hash' type-id='53b70d6c' visibility='default' filepath='kernel/workqueue.c' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='manager' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='workers' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='detach_completion' type-id='389faaf7' visibility='default' filepath='kernel/workqueue.c' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='worker_ida' type-id='46ce60fb' visibility='default' filepath='kernel/workqueue.c' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='kernel/workqueue.c' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='nr_running' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xarray' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='292' column='1' id='d39738ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xarray.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='xa_flags' type-id='3eb7c31c' visibility='default' filepath='include/linux/xarray.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xa_head' type-id='eaa32e2f' visibility='default' filepath='include/linux/xarray.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fd48a067' size-in-bits='64' id='67aca04f'/>
+      <pointer-type-def type-id='6110442c' size-in-bits='64' id='6f67b38a'/>
+      <pointer-type-def type-id='683a8a93' size-in-bits='64' id='cd28613b'/>
+      <pointer-type-def type-id='512ac7cc' size-in-bits='64' id='ac58af12'/>
+      <array-type-def dimensions='1' type-id='1354385d' size-in-bits='64' id='db98c084'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='038d05bd' size-in-bits='64' id='fa43ef1d'/>
+      <pointer-type-def type-id='7c94eaa3' size-in-bits='64' id='a4375c03'/>
+      <pointer-type-def type-id='66e487eb' size-in-bits='64' id='fa0b179b'/>
+      <pointer-type-def type-id='37251e77' size-in-bits='64' id='9b4aaf1f'/>
+      <pointer-type-def type-id='fe007c02' size-in-bits='64' id='00c7b870'/>
+      <pointer-type-def type-id='6661a698' size-in-bits='64' id='9a537bbe'/>
+      <pointer-type-def type-id='d066d157' size-in-bits='64' id='0d3b0dcf'/>
+      <pointer-type-def type-id='5d5ff7f6' size-in-bits='64' id='5bfba86c'/>
+      <enum-decl name='bpf_attach_type' filepath='include/uapi/linux/bpf.h' line='178' column='1' id='67ce11ed'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_FLOW_DISSECTOR' value='17'/>
+        <enumerator name='BPF_CGROUP_SYSCTL' value='18'/>
+        <enumerator name='BPF_CGROUP_UDP4_RECVMSG' value='19'/>
+        <enumerator name='BPF_CGROUP_UDP6_RECVMSG' value='20'/>
+        <enumerator name='BPF_CGROUP_GETSOCKOPT' value='21'/>
+        <enumerator name='BPF_CGROUP_SETSOCKOPT' value='22'/>
+        <enumerator name='__MAX_BPF_ATTACH_TYPE' value='23'/>
+      </enum-decl>
+      <enum-decl name='bpf_prog_type' filepath='include/uapi/linux/bpf.h' line='149' column='1' id='b80df76a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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'/>
+        <enumerator name='BPF_PROG_TYPE_FLOW_DISSECTOR' value='22'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SYSCTL' value='23'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE' value='24'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCKOPT' value='25'/>
+      </enum-decl>
+      <pointer-type-def type-id='d5ace205' size-in-bits='64' id='4a935625'/>
+      <pointer-type-def type-id='8bcde2dc' size-in-bits='64' id='964d2eb6'/>
+      <pointer-type-def type-id='054882f1' size-in-bits='64' id='f9e738c5'/>
+      <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/>
+      <pointer-type-def type-id='0d6f83ff' size-in-bits='64' id='1979c577'/>
+      <pointer-type-def type-id='2352f3ae' size-in-bits='64' id='0b19fc54'/>
+      <pointer-type-def type-id='6c784694' size-in-bits='64' id='506df562'/>
+      <pointer-type-def type-id='a667f60e' size-in-bits='64' id='7544e824'/>
+      <pointer-type-def type-id='f29d9605' size-in-bits='64' id='e93ad915'/>
+      <typedef-decl name='__kernel_gid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='50' column='1' id='b4413cee'/>
+      <typedef-decl name='__kernel_uid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='49' column='1' id='70734f24'/>
+      <pointer-type-def type-id='1a4194ca' size-in-bits='64' id='b347e5ac'/>
+      <typedef-decl name='dev_t' type-id='8f336000' filepath='include/linux/types.h' line='16' column='1' id='8504f260'/>
+      <pointer-type-def type-id='beb5fff3' size-in-bits='64' id='17b1add7'/>
+      <pointer-type-def type-id='91ce1af9' size-in-bits='64' id='3df9fd28'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='64' id='d2f7b56a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__21' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='562' column='1' id='fe772793'>
+        <data-member access='public'>
+          <var-decl name='insns' type-id='4967766c' visibility='default' filepath='include/linux/filter.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='insnsi' type-id='b50399da' visibility='default' filepath='include/linux/filter.h' line='564' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='98b2ffae' size-in-bits='64' id='531a7450'/>
+      <pointer-type-def type-id='fb2144e8' size-in-bits='64' id='dd787f72'/>
+      <pointer-type-def type-id='c96d591d' size-in-bits='64' id='f1825e09'/>
+      <pointer-type-def type-id='127ce78a' size-in-bits='64' id='6ba28d1c'/>
+      <pointer-type-def type-id='943685e6' size-in-bits='64' id='a46b05a0'/>
+      <pointer-type-def type-id='749378a8' size-in-bits='64' id='b6ba26fa'/>
+      <pointer-type-def type-id='82d9d5d4' size-in-bits='64' id='a9f319d2'/>
+      <pointer-type-def type-id='c0badb3b' size-in-bits='64' id='ef4fae1b'/>
+      <pointer-type-def type-id='096280be' size-in-bits='64' id='ee802604'/>
+      <pointer-type-def type-id='718a7cd9' size-in-bits='64' id='39944481'/>
+      <pointer-type-def type-id='0ad68707' size-in-bits='64' id='b6a33eaf'/>
+      <array-type-def dimensions='1' type-id='8c2bf2b2' size-in-bits='infinite' id='b50399da'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='978e8e27' size-in-bits='64' id='f886696f'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='128' id='ac1fa8c0'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='bpf_cgroup_storage_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='79' column='1' id='d8d7111e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup_inode_id' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_aux' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='376' column='1' id='09d9fab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used_map_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_ctx_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pkt_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_tp_access' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stack_depth' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='func_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='func_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='verifier_zext' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='offload_requested' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='50b674cc' visibility='default' filepath='include/linux/bpf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='jit_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ksym_tnode' type-id='dc9cc7c7' visibility='default' filepath='include/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ksym_lnode' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='330c0db4' visibility='default' filepath='include/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='used_maps' type-id='0928d5d6' visibility='default' filepath='include/linux/bpf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='load_time' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cgroup_storage' type-id='f57e9a44' visibility='default' filepath='include/linux/bpf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='offload' type-id='11f19dd0' visibility='default' filepath='include/linux/bpf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='func_info' type-id='368d43d3' visibility='default' filepath='include/linux/bpf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='linfo' type-id='2fcb9b17' visibility='default' filepath='include/linux/bpf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='jited_linfo' type-id='63e171df' visibility='default' filepath='include/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='func_info_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_linfo' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='linfo_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='stats' type-id='fbf2ba3a' visibility='default' filepath='include/linux/bpf.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='' type-id='b597c0fa' visibility='default' filepath='include/linux/bpf.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='432' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bus_type' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='123' column='1' id='b31bfc8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_root' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drv_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='2f28f04c' visibility='default' filepath='include/linux/device.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='online' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offline' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_vf' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dma_configure' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iommu_ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_key' type-id='47479831' visibility='default' filepath='include/linux/device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='need_parent_lock' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='600' column='1' id='fd48a067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/device.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='8cd77b5f' visibility='default' filepath='include/linux/device.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class_release' type-id='bea4d586' visibility='default' filepath='include/linux/device.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='shutdown_pre' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ns_type' type-id='47547dee' visibility='default' filepath='include/linux/device.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='namespace' type-id='e6c297c2' visibility='default' filepath='include/linux/device.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_ownership' type-id='f5f7cbd4' visibility='default' filepath='include/linux/device.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='628' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cma' size-in-bits='576' is-struct='yes' visibility='default' filepath='mm/cma.h' line='5' column='1' id='6110442c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='mm/cma.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='order_per_bit' type-id='f0981eeb' visibility='default' filepath='mm/cma.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='mm/cma.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='mm/cma.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpumask' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1' id='1354385d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pin_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='30' column='1' id='038d05bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sleep_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_domain' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='656' column='1' id='7c94eaa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3ea82289' visibility='default' filepath='include/linux/pm.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='detach' type-id='7d18218b' visibility='default' filepath='include/linux/pm.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='activate' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sync' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dismiss' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='663' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_dma_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1022' column='1' id='37251e77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/device.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1028' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_driver' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='389' column='1' id='fe007c02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suppress_bind_attrs' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='probe_type' type-id='171c98b7' visibility='default' filepath='include/linux/device.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_match_table' type-id='e5ce629e' visibility='default' filepath='include/linux/device.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='acpi_match_table' type-id='5b62aa60' visibility='default' filepath='include/linux/device.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='coredump' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='p' type-id='52abf1d3' visibility='default' filepath='include/linux/device.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_node' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='51' column='1' id='6661a698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='phandle' type-id='6e394fba' 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='full_name' type-id='80f4b756' 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='fwnode' type-id='d5ace205' visibility='default' filepath='include/linux/of.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='deadprops' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='child' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sibling' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/of.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='_flags' type-id='7359adad' visibility='default' filepath='include/linux/of.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_private' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='77' column='1' id='d066d157'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='klist_children' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='knode_parent' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='knode_driver' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_class' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='deferred_probe' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='drivers/base/base.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='drivers/base/base.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_coherent_mem' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d5ff7f6'/>
+      <class-decl name='fwnode_handle' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='18' column='1' id='d5ace205'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='secondary' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='b4ff6cf8' visibility='default' filepath='include/linux/fwnode.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fwnode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='118' column='1' id='b6993efc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/hrtimer.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_softexpires' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='function' type-id='ca9b3bbf' visibility='default' filepath='include/linux/hrtimer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='base' type-id='730f4667' visibility='default' filepath='include/linux/hrtimer.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_rel' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_soft' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='is_hard' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/hrtimer.h' line='128' 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='244' column='1' id='46ce60fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fwspec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='569' column='1' id='0d6f83ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/iommu.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iommu_fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iommu_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/iommu.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='num_ids' type-id='f0981eeb' visibility='default' filepath='include/linux/iommu.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ids' type-id='587936a0' visibility='default' filepath='include/linux/iommu.h' line='575' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_group' size-in-bits='2048' is-struct='yes' visibility='default' filepath='drivers/iommu/iommu.c' line='35' column='1' id='2352f3ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/iommu/iommu.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='devices_kobj' type-id='d30bdc51' visibility='default' filepath='drivers/iommu/iommu.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='drivers/iommu/iommu.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/iommu/iommu.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='drivers/iommu/iommu.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iommu_data' type-id='eaa32e2f' visibility='default' filepath='drivers/iommu/iommu.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iommu_data_release' type-id='b7f9d8e6' visibility='default' filepath='drivers/iommu/iommu.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='drivers/iommu/iommu.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/iommu/iommu.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='default_domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='367' column='1' id='6c784694'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault_param' type-id='0a9b173b' visibility='default' filepath='include/linux/iommu.h' line='369' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='162' column='1' id='a667f60e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/irqdomain.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdomain.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='2c202856' visibility='default' filepath='include/linux/irqdomain.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irqdomain.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mapcount' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bus_token' type-id='385b8018' visibility='default' filepath='include/linux/irqdomain.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gc' type-id='8e62d7cb' visibility='default' filepath='include/linux/irqdomain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='7544e824' visibility='default' filepath='include/linux/irqdomain.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hwirq_max' type-id='88370ce9' visibility='default' filepath='include/linux/irqdomain.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='revmap_direct_max_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='revmap_size' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='revmap_tree' type-id='d39738ac' visibility='default' filepath='include/linux/irqdomain.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='revmap_tree_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdomain.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='linear_revmap' type-id='c764d637' visibility='default' filepath='include/linux/irqdomain.h' line='192' 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='58' column='1' id='c5ccfee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='page_frag' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='64' column='1' id='06c0432f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types_task.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='68' 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='83' column='1' id='e3a91a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/plist.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prio_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimers' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='122' column='1' id='1069de27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bases' type-id='0e685653' visibility='default' filepath='include/linux/posix-timers.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='timers_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='expiry_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='125' 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='244' column='1' id='9c7bf560'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='248' 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='125' column='1' id='6fe1603d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/linux/rbtree.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_leftmost' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='127' 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='45e819d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='d5b25e9c' 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='7f825f2d' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_dl_entity' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='511' column='1' id='2d494b2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dl_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dl_deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_period' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dl_bw' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dl_density' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl_throttled' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='dl_boosted' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='dl_yielded' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dl_non_contending' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dl_overrun' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dl_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='inactive_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='577' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_entity' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='446' column='1' id='2561fcb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='include/linux/sched.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='run_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='on_rq' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exec_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vruntime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prev_sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='statistics' type-id='4ebe02b2' visibility='default' filepath='include/linux/sched.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='parent' type-id='ff2b3d10' visibility='default' filepath='include/linux/sched.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='cfs_rq' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='my_q' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='include/linux/sched.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='485' 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='287' column='1' id='59ddd03d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcount' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='run_delay' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_arrival' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_queued' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_rt_entity' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='488' column='1' id='29843697'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='run_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_stamp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_slice' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='on_rq' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='on_list' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='back' type-id='9eead88f' visibility='default' filepath='include/linux/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/seccomp.h' line='30' column='1' id='298af459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/seccomp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='filter_count' type-id='49178f86' visibility='default' filepath='include/linux/seccomp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='2a128f5a' visibility='default' filepath='include/linux/seccomp.h' line='33' 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='30' column='1' id='7b5c012d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/signal_types.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='signal' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='32' 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='524' column='1' id='f29d9605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='e1ea11f6' visibility='default' filepath='include/linux/filter.h' line='526' 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='ca075c7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rchar' type-id='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='46' 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='54' column='1' id='dfedb05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types_task.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='2020bac4' visibility='default' filepath='include/linux/mm_types_task.h' line='56' 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='26' column='1' id='575a2c7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_limit' type-id='f079b4db' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttbr0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9a29bfd9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shadow_call_stack' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='45' 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='127' column='1' id='0c8a83c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_context' type-id='6a577ca5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uw' type-id='3bb05d08' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fpsimd_cpu' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sve_state' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sve_vl' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sve_vl_onexec' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='fault_address' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fault_code' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='debug' type-id='2f821a8d' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tlbflush_unmap_batch' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='76' column='1' id='a3d9f566'/>
+      <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='4f79f8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqnum' type-id='91ce1af9' 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='ae25b7bc' visibility='default' filepath='include/linux/mm_types_task.h' line='36' 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='632' column='1' id='69970be2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='b16791f0' visibility='default' filepath='include/linux/sched.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1b9c6d35' size-in-bits='64' id='917bb1c5'/>
+      <pointer-type-def type-id='2cd82b3d' size-in-bits='64' id='af4bd535'/>
+      <pointer-type-def type-id='bca91994' size-in-bits='64' id='bc33861a'/>
+      <qualified-type-def type-id='bdae35f4' const='yes' id='683a8a93'/>
+      <qualified-type-def type-id='d45f2b4f' const='yes' id='512ac7cc'/>
+      <pointer-type-def type-id='60263890' size-in-bits='64' id='162b4cce'/>
+      <pointer-type-def type-id='afbeac63' size-in-bits='64' id='85d57723'/>
+      <pointer-type-def type-id='7d93f824' size-in-bits='64' id='b991f562'/>
+      <enum-decl name='dl_dev_state' filepath='include/linux/device.h' line='1133' column='1' id='070abca2'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='rpm_request' filepath='include/linux/pm.h' line='521' column='1' id='2418515b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='499' column='1' id='3c1b7fd8'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='bccdf330' size-in-bits='64' id='16c53416'/>
+      <pointer-type-def type-id='7dc87302' size-in-bits='64' id='08890290'/>
+      <pointer-type-def type-id='62bd013f' size-in-bits='64' id='0bbc9f87'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='4096' id='53b70d6c'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='03a4a074' size-in-bits='512' id='3f6e320a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='a71373a3' size-in-bits='64' id='0b56752f'/>
+      <pointer-type-def type-id='e1ee975e' size-in-bits='64' id='58d10a98'/>
+      <pointer-type-def type-id='8e42c936' size-in-bits='64' id='aea90108'/>
+      <pointer-type-def type-id='774cf1e5' size-in-bits='64' id='26692209'/>
+      <pointer-type-def type-id='c655c7b7' size-in-bits='64' id='efd5496b'/>
+      <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/>
+      <pointer-type-def type-id='d002899d' size-in-bits='64' id='d042cfad'/>
+      <pointer-type-def type-id='22ec9634' size-in-bits='64' id='3638c201'/>
+      <pointer-type-def type-id='128d0ac4' size-in-bits='64' id='204a4632'/>
+      <pointer-type-def type-id='11c8601b' size-in-bits='64' id='223696fb'/>
+      <pointer-type-def type-id='311626f1' size-in-bits='64' id='df4b7819'/>
+      <pointer-type-def type-id='0319fc05' size-in-bits='64' id='26452515'/>
+      <pointer-type-def type-id='b82b9d3a' size-in-bits='64' id='dc5ce118'/>
+      <array-type-def dimensions='1' type-id='b9419dc5' size-in-bits='128' id='c7e7059f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='d10e968a' size-in-bits='64' id='b94e5398'/>
+      <pointer-type-def type-id='bed94322' size-in-bits='64' id='15d29710'/>
+      <pointer-type-def type-id='1269b801' size-in-bits='64' id='77415389'/>
+      <pointer-type-def type-id='67b24a02' size-in-bits='64' id='d5d06540'/>
+      <pointer-type-def type-id='b9b792e2' size-in-bits='64' id='c78f98c0'/>
+      <pointer-type-def type-id='caf652c6' size-in-bits='64' id='e7d2a5fc'/>
+      <pointer-type-def type-id='999b38a0' size-in-bits='64' id='c44b3996'/>
+      <pointer-type-def type-id='afb04a62' size-in-bits='64' id='54d4ed50'/>
+      <pointer-type-def type-id='317e3dc9' size-in-bits='64' id='32cc1711'/>
+      <pointer-type-def type-id='9a4619bf' size-in-bits='64' id='a91cd5f7'/>
+      <array-type-def dimensions='1' type-id='f588f6e0' size-in-bits='infinite' id='4967766c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='2d863538' size-in-bits='64' id='3c32f9de'/>
+      <typedef-decl name='__kernel_dev_t' type-id='19c2251e' filepath='include/linux/types.h' line='13' column='1' id='8f336000'/>
+      <typedef-decl name='cpumask_t' type-id='1354385d' filepath='include/linux/cpumask.h' line='17' column='1' id='90bc6bed'/>
+      <typedef-decl name='gfp_t' type-id='f0981eeb' filepath='include/linux/types.h' line='153' column='1' id='3eb7c31c'/>
+      <typedef-decl name='nodemask_t' type-id='24d23dab' filepath='include/linux/nodemask.h' line='98' column='1' id='6a7d16bb'/>
+      <typedef-decl name='pid_t' type-id='63eb2bf2' filepath='include/linux/types.h' line='22' column='1' id='587f89d2'/>
+      <typedef-decl name='pm_message_t' type-id='c120b5da' filepath='include/linux/pm.h' line='53' column='1' id='08496218'/>
+      <typedef-decl name='raw_spinlock_t' type-id='f106d0e5' filepath='include/linux/spinlock_types.h' line='29' column='1' id='f5c90b3f'/>
+      <typedef-decl name='seqcount_t' type-id='3a74ff0b' filepath='include/linux/seqlock.h' line='53' column='1' id='e14c3b11'/>
+      <typedef-decl name='sigset_t' type-id='e6ea37b8' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='daf33c64'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='128' id='24a375b2'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='192' id='20a130cf'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0888126c' size-in-bits='64' id='c6e3c250'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='615' column='1' id='a324790e'>
+        <data-member access='public'>
+          <var-decl name='b' type-id='4edee319' visibility='default' filepath='include/linux/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='s' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='622' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1' id='dad3eb71'>
+        <data-member access='public'>
+          <var-decl name='buf' type-id='b1253746' visibility='default' filepath='include/linux/bpf-cgroup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='percpu_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf-cgroup.h' line='45' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1158' column='1' id='b45135d0'>
+        <data-member access='public'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1160' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='98f6607e' size-in-bits='64' id='9d2cef34'/>
+      <pointer-type-def type-id='5f2f8da4' size-in-bits='64' id='d295dab2'/>
+      <pointer-type-def type-id='766eac03' size-in-bits='64' id='c3d2558f'/>
+      <qualified-type-def type-id='bd54fe1a' volatile='yes' id='5efddaac'/>
+      <pointer-type-def type-id='4657336c' size-in-bits='64' id='303e01fa'/>
+      <pointer-type-def type-id='152cd1b0' size-in-bits='64' id='1ea237a6'/>
+      <pointer-type-def type-id='8a1373a3' size-in-bits='64' id='368d43d3'/>
+      <pointer-type-def type-id='88565f1f' size-in-bits='64' id='2fcb9b17'/>
+      <pointer-type-def type-id='00ee50b8' size-in-bits='64' id='0928d5d6'/>
+      <array-type-def dimensions='1' type-id='00ee50b8' size-in-bits='128' id='f57e9a44'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='bdcee7ae' size-in-bits='64' id='50b674cc'/>
+      <pointer-type-def type-id='eef53362' size-in-bits='64' id='11f19dd0'/>
+      <pointer-type-def type-id='7af446cc' size-in-bits='64' id='fbf2ba3a'/>
+      <pointer-type-def type-id='0ef5c7e0' size-in-bits='64' id='b1253746'/>
+      <pointer-type-def type-id='dccc7677' size-in-bits='64' id='a469220f'/>
+      <pointer-type-def type-id='feeb4c2f' size-in-bits='64' id='a6892387'/>
+      <pointer-type-def type-id='6a18482b' size-in-bits='64' id='8cd77b5f'/>
+      <class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='82d9d5d4'/>
+      <class-decl name='backing_dev_info' size-in-bits='9600' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='192' column='1' id='c0badb3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bdi_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ra_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='congested_fn' type-id='84127e50' visibility='default' filepath='include/linux/backing-dev-defs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='congested_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/backing-dev-defs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='capabilities' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_prop_frac' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tot_write_bandwidth' type-id='f22a8abb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wb' type-id='ac0aeb1d' visibility='default' filepath='include/linux/backing-dev-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cgwb_tree' type-id='d39738ac' visibility='default' filepath='include/linux/backing-dev-defs.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='cgwb_congested_tree' type-id='dec44472' visibility='default' filepath='include/linux/backing-dev-defs.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cgwb_release_mutex' type-id='925167dc' visibility='default' filepath='include/linux/backing-dev-defs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='wb_switch_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/backing-dev-defs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='wb_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='dev_name' type-id='59daf3ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='owner' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='laptop_mode_wb_timer' type-id='abe41e67' visibility='default' filepath='include/linux/backing-dev-defs.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='debug_dir' type-id='27675065' visibility='default' filepath='include/linux/backing-dev-defs.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='237' 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='576' column='1' id='096280be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_plug' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1181' column='1' id='718a7cd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rq_count' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='1184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='multiple_queues' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='1185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blocking_notifier_head' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='65' column='1' id='708c2394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/notifier.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='0ad68707'/>
+      <class-decl name='bpf_insn' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='65' column='1' id='8c2bf2b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='src_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='off' type-id='b55def60' visibility='default' filepath='include/uapi/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='imm' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='978e8e27'/>
+      <class-decl name='compat_robust_list_head' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='378' column='1' id='1b9c6d35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='bd51dd4a' visibility='default' filepath='include/linux/compat.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='futex_offset' type-id='abb906de' visibility='default' filepath='include/linux/compat.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list_op_pending' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='381' 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='111' column='1' id='6a577ca5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x19' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x20' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='x21' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x22' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='x23' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='x24' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='x25' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x26' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='x27' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='x28' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pc' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='css_set' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='191' column='1' id='afbeac63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/cgroup-defs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dom_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dfl_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mg_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dying_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='task_iters' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='e_cset_node' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='threaded_csets' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='threaded_csets_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='include/linux/cgroup-defs.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cgrp_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='mg_preload_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='mg_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mg_src_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mg_dst_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mg_dst_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/cgroup-defs.h' line='277' 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='98' column='1' id='2f821a8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended_step' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hbp_break' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hbp_watch' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='279' column='1' id='3ea82289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='freeze' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thaw' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poweroff' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='restore' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='suspend_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='poweroff_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restore_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='freeze_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='thaw_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poweroff_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='restore_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='runtime_suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='runtime_resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='runtime_idle' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='121' column='1' id='7d93f824'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resume_latency' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='latency_tolerance' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freq' type-id='7ca99f8c' visibility='default' filepath='include/linux/pm_qos.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='e0a9bd3c' visibility='default' filepath='include/linux/pm_qos.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='resume_latency_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='latency_tolerance_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='flags_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='128' 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='825' column='1' id='bdae35f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devnode' type-id='b72fdee5' visibility='default' filepath='include/linux/device.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='833' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/dma-mapping.h' line='80' column='1' id='d45f2b4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='06c31e09' visibility='default' filepath='include/linux/dma-mapping.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='d7b98f89' visibility='default' filepath='include/linux/dma-mapping.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mmap' type-id='f7114ca5' visibility='default' filepath='include/linux/dma-mapping.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sgtable' type-id='295a92ed' visibility='default' filepath='include/linux/dma-mapping.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_page' type-id='7855184a' visibility='default' filepath='include/linux/dma-mapping.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unmap_page' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_sg' type-id='64452f48' visibility='default' filepath='include/linux/dma-mapping.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unmap_sg' type-id='772c77c9' visibility='default' filepath='include/linux/dma-mapping.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_resource' type-id='66c8694d' visibility='default' filepath='include/linux/dma-mapping.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unmap_resource' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sync_single_for_cpu' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sync_single_for_device' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sync_sg_for_cpu' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sync_sg_for_device' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cache_sync' type-id='4935400d' visibility='default' filepath='include/linux/dma-mapping.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dma_supported' type-id='5aa1f3eb' visibility='default' filepath='include/linux/dma-mapping.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_required_mask' type-id='5dee5830' visibility='default' filepath='include/linux/dma-mapping.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_mapping_size' type-id='49f5e2e5' visibility='default' filepath='include/linux/dma-mapping.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_merge_boundary' type-id='1588722c' visibility='default' filepath='include/linux/dma-mapping.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='files_struct' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='48' column='1' id='bccdf330'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fdtable.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resize_in_progress' type-id='b50a4934' visibility='default' filepath='include/linux/fdtable.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resize_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fdtable.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fdt' type-id='02b857a9' visibility='default' filepath='include/linux/fdtable.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fdtab' type-id='ff35cfe1' visibility='default' filepath='include/linux/fdtable.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='file_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fdtable.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='next_fd' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='close_on_exec_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='open_fds_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='full_fds_bits_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fd_array' type-id='d2c516bd' visibility='default' filepath='include/linux/fdtable.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_struct' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs_struct.h' line='9' column='1' id='7dc87302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs_struct.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/fs_struct.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='umask' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='in_exec' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='root' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pwd' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='62bd013f'/>
+      <class-decl name='io_context' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='99' column='1' id='d002899d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/iocontext.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_ref' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_tasks' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/iocontext.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/iocontext.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_batch_requests' type-id='95e97e5e' visibility='default' filepath='include/linux/iocontext.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_waited' type-id='7359adad' visibility='default' filepath='include/linux/iocontext.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icq_tree' type-id='d39738ac' visibility='default' filepath='include/linux/iocontext.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='icq_hint' type-id='7c6e0e0c' visibility='default' filepath='include/linux/iocontext.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='icq_list' type-id='e151255a' visibility='default' filepath='include/linux/iocontext.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/iocontext.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='172' column='1' id='128d0ac4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='serial' type-id='c84025ab' visibility='default' filepath='include/linux/key.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1a65b0a7' visibility='default' filepath='include/linux/key.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sem' type-id='f19fdb93' visibility='default' filepath='include/linux/key.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user' type-id='23704f74' visibility='default' filepath='include/linux/key.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='21f0eb77' visibility='default' filepath='include/linux/key.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_used_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/key.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/key.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perm' type-id='296adac1' visibility='default' filepath='include/linux/key.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='quotalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='datalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='state' type-id='a2185560' visibility='default' filepath='include/linux/key.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='' type-id='51bb2fb5' visibility='default' filepath='include/linux/key.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='d5d77d48' visibility='default' filepath='include/linux/key.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='restrict_link' type-id='92daca01' visibility='default' filepath='include/linux/key.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='klist' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/klist.h' line='18' column='1' id='6160a6ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='k_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/klist.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='k_list' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='22' 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='37' column='1' id='3d045a53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_klist' type-id='eaa32e2f' visibility='default' filepath='include/linux/klist.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_node' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_ref' type-id='400fb07b' visibility='default' filepath='include/linux/klist.h' line='40' 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='322' column='1' id='ad979632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inv_weight' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_class_key' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='459' column='1' id='47479831'/>
+      <class-decl name='mem_cgroup' size-in-bits='23040' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='208' column='1' id='11c8601b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/memcontrol.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='id' type-id='18f7b101' visibility='default' filepath='include/linux/memcontrol.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memory' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='swap' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='memsw' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tcpmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='high' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='high_work' type-id='ef9025d0' visibility='default' filepath='include/linux/memcontrol.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='soft_limit' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vmpressure' type-id='d6294af7' visibility='default' filepath='include/linux/memcontrol.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8008'>
+          <var-decl name='oom_group' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8016'>
+          <var-decl name='oom_lock' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='under_oom' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='swappiness' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='oom_kill_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='events_local_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='swap_events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='thresholds_lock' type-id='925167dc' visibility='default' filepath='include/linux/memcontrol.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='memsw_thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='oom_notify' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='move_charge_at_immigrate' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='move_lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='_pad1_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='moving_account' type-id='49178f86' visibility='default' filepath='include/linux/memcontrol.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='move_lock_task' type-id='f23e2572' visibility='default' filepath='include/linux/memcontrol.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='vmstats_local' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='vmstats_percpu' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='vmstats' type-id='9dc2293d' visibility='default' filepath='include/linux/memcontrol.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='vmevents' type-id='525b50d2' visibility='default' filepath='include/linux/memcontrol.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='memory_events' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='memory_events_local' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='socket_pressure' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='tcpmem_active' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19360'>
+          <var-decl name='tcpmem_pressure' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='kmemcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19424'>
+          <var-decl name='kmem_state' type-id='def0995c' visibility='default' filepath='include/linux/memcontrol.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='kmem_caches' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='last_scanned_node' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='cgwb_domain' type-id='960bf1fd' visibility='default' filepath='include/linux/memcontrol.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='cgwb_frn' type-id='f53c5bdb' visibility='default' filepath='include/linux/memcontrol.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22272'>
+          <var-decl name='event_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22336'>
+          <var-decl name='deferred_split_queue' type-id='d619c1c5' visibility='default' filepath='include/linux/memcontrol.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22592'>
+          <var-decl name='nodeinfo' type-id='687d975e' visibility='default' filepath='include/linux/memcontrol.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mm_struct' size-in-bits='7296' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='385' column='1' id='311626f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='993073b4' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cpu_bitmap' type-id='c99b5ecd' visibility='default' filepath='include/linux/mm_types.h' line='551' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='0319fc05'/>
+      <class-decl name='nsproxy' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/nsproxy.h' line='31' column='1' id='b82b9d3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' 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='9d5923ed' 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='76ccea8d' 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='d60f4f10' 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='b816e1d0' 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='a2bff676' 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='f774a955' visibility='default' filepath='include/linux/nsproxy.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='59' column='1' id='d10e968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/pid.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tasks' type-id='fc3a8480' visibility='default' filepath='include/linux/pid.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait_pidfd' type-id='b5ab048f' visibility='default' filepath='include/linux/pid.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numbers' type-id='9a69aeec' visibility='default' filepath='include/linux/pid.h' line='68' 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='bed94322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' 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='b5ab048f' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='02f11ed4' 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='5bb9c75d' 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='5bb9c75d' 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='e15f3242' 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='273a7d34' visibility='default' filepath='include/linux/pipe_fs_i.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_message' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='51' column='1' id='c120b5da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_subsys_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='533' column='1' id='1269b801'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcount' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_data' type-id='53e3a7d6' visibility='default' filepath='include/linux/pm.h' line='540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='67b24a02'/>
+      <class-decl name='reclaim_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/swap.h' line='131' column='1' id='b9b792e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reclaimed_slab' type-id='7359adad' visibility='default' filepath='include/linux/swap.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' size-in-bits='16832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='405' column='1' id='caf652c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_merge' type-id='3dad1a48' visibility='default' filepath='include/linux/blkdev.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator' type-id='07d0a3e7' visibility='default' filepath='include/linux/blkdev.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stats' type-id='a0408c5a' visibility='default' filepath='include/linux/blkdev.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rq_qos' type-id='c3a28778' visibility='default' filepath='include/linux/blkdev.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='make_request_fn' type-id='8f01ad5c' visibility='default' filepath='include/linux/blkdev.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_drain_needed' type-id='1b19faa1' visibility='default' filepath='include/linux/blkdev.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mq_ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blkdev.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queue_hw_ctx' type-id='3e195537' visibility='default' filepath='include/linux/blkdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/blkdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queuedata' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='queue_flags' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pm_only' type-id='49178f86' visibility='default' filepath='include/linux/blkdev.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bounce_gfp' type-id='3eb7c31c' visibility='default' filepath='include/linux/blkdev.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kobj' type-id='b6ab8849' 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='mq_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/blkdev.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/blkdev.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rpm_status' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_requests' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_drain_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_drain_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dma_pad_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='dma_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='include/linux/blkdev.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rq_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='poll_nsec' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='poll_cb' type-id='1f98c663' visibility='default' filepath='include/linux/blkdev.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='poll_stat' type-id='8574e02e' visibility='default' filepath='include/linux/blkdev.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/linux/blkdev.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='timeout_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='icq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='blkcg_pols' type-id='f066dd3c' visibility='default' filepath='include/linux/blkdev.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='root_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blkdev.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='blkg_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='limits' type-id='f0966d3d' visibility='default' filepath='include/linux/blkdev.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='required_elevator_features' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9696'>
+          <var-decl name='sg_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='sg_reserved_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9760'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blkdev.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='requeue_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='requeue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='requeue_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blkdev.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='sysfs_dir_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='unused_hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='unused_hctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11808'>
+          <var-decl name='mq_freeze_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='bsg_dev' type-id='6a3af55b' visibility='default' filepath='include/linux/blkdev.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='td' type-id='b0d49e67' visibility='default' filepath='include/linux/blkdev.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blkdev.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='mq_freeze_wq' type-id='b5ab048f' visibility='default' filepath='include/linux/blkdev.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='mq_freeze_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='q_usage_counter' type-id='818799b4' visibility='default' filepath='include/linux/blkdev.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='tag_set' type-id='cc26d15f' visibility='default' filepath='include/linux/blkdev.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='tag_set_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='bio_split' type-id='dfa886b2' visibility='default' filepath='include/linux/blkdev.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='rqos_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='mq_sysfs_init_done' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15808'>
+          <var-decl name='cmd_size' type-id='b59d7dce' visibility='default' filepath='include/linux/blkdev.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15872'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='write_hints' type-id='64af1365' visibility='default' filepath='include/linux/blkdev.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='607' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='999b38a0'/>
+      <class-decl name='rt_mutex_waiter' size-in-bits='640' is-struct='yes' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='27' column='1' id='afb04a62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree_entry' type-id='2a8a6332' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pi_tree_entry' type-id='2a8a6332' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='3992a90f' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_avg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='398' column='1' id='629c8d83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_update_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='util_sum' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='period_contrib' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runnable_load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='util_est' type-id='594488ba' visibility='default' filepath='include/linux/sched.h' line='407' 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='410' column='1' id='4ebe02b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iowait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iowait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sleep_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sleep_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sum_sleep_runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='block_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='block_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exec_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slice_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations_cold' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_failed_migrations_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nr_failed_migrations_running' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_failed_migrations_hot' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nr_forced_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_wakeups' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nr_wakeups_sync' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_wakeups_migrate' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nr_wakeups_local' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='nr_wakeups_remote' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_wakeups_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_wakeups_affine_attempts' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nr_wakeups_passive' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nr_wakeups_idle' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seqcount' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/seqlock.h' line='48' column='1' id='3a74ff0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sequence' type-id='f0981eeb' visibility='default' filepath='include/linux/seqlock.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sighand_struct' size-in-bits='16640' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='21' column='1' id='317e3dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siglock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched/signal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='signalfd_wqh' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action' type-id='02d77f24' visibility='default' filepath='include/linux/sched/signal.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='signal_struct' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='83' column='1' id='9a4619bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sigcnt' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='live' type-id='49178f86' visibility='default' filepath='include/linux/sched/signal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_threads' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_head' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait_chldexit' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='curr_target' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shared_pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched/signal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='multiprocess' type-id='e151255a' visibility='default' filepath='include/linux/sched/signal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='group_exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='notify_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='group_exit_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='group_stop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='has_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='posix_timer_id' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='posix_timers' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='real_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched/signal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='it_real_incr' type-id='fbc017ef' visibility='default' filepath='include/linux/sched/signal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='it' type-id='bb2d0d4e' visibility='default' filepath='include/linux/sched/signal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cputimer' type-id='9480bb51' visibility='default' filepath='include/linux/sched/signal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched/signal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pids' type-id='3449295e' visibility='default' filepath='include/linux/sched/signal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='tty_old_pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/sched/signal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='leader' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/sched/signal.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='stats_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/sched/signal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cutime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='cstime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cgtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched/signal.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cnvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='cnivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cmin_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cmaj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='inblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='oublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='cinblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='coublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='maxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='cmaxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sum_sched_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/signal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='rlim' type-id='80f344e1' visibility='default' filepath='include/linux/sched/signal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='stats' type-id='2c927837' visibility='default' filepath='include/linux/sched/signal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='audit_tty' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='tty_audit_buf' type-id='868c74f4' visibility='default' filepath='include/linux/sched/signal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='oom_flag_origin' type-id='b50a4934' visibility='default' filepath='include/linux/sched/signal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='oom_score_adj' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='oom_score_adj_min' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='oom_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched/signal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='cred_guard_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched/signal.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='exec_update_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/sched/signal.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='242' 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='f588f6e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='d315442e' 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='8f048e17' 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='8f048e17' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/filter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_group' size-in-bits='4096' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='358' column='1' id='2d863538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='kernel/sched/sched.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='se' type-id='eb11624e' visibility='default' filepath='kernel/sched/sched.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cfs_rq' type-id='d6e32957' visibility='default' filepath='kernel/sched/sched.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shares' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='load_avg' type-id='f22a8abb' visibility='default' filepath='kernel/sched/sched.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='parent' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='cfs_bandwidth' type-id='68e4a3af' visibility='default' filepath='kernel/sched/sched.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='uclamp_pct' type-id='0d532ec1' visibility='default' filepath='kernel/sched/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='latency_sensitive' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='412' 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='fe3acb42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' 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='fbc017ef' visibility='default' filepath='include/linux/timerqueue.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_se' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='607' column='1' id='0888126c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='bucket_id' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='user_defined' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='611' 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='61' column='1' id='98f6607e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='5d1a5bc7' visibility='default' filepath='include/linux/uprobes.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='f5a928fc' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xol_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='return_instances' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/uprobes.h' line='80' 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='41' column='1' id='5f2f8da4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d295dab2' visibility='default' filepath='include/linux/vmalloc.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/vmalloc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/vmalloc.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='phys_addr' type-id='2522883d' visibility='default' filepath='include/linux/vmalloc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caller' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_irq' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/power/power.h' line='31' column='1' id='4657336c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/power/power.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='status' type-id='f0981eeb' visibility='default' filepath='drivers/base/power/power.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/power/power.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/power/power.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wakeup_source' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/pm_wakeup.h' line='43' column='1' id='152cd1b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_wakeup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_wakeup.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm_wakeup.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_wakeup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm_wakeup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/pm_wakeup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_expires' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='total_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='last_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='start_prevent_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='prevent_sleep_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='event_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='active_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='relax_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='expire_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wakeup_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_wakeup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='autosleep_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='616' column='1' id='4edee319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blocked' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='need_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='exp_hint' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='deferred_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='620' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='6a7d16bb' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1' id='24d23dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='daf33c64' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='90' column='1' id='e6ea37b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sig' type-id='f066dd3c' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1' id='3bb05d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tp2_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fpsimd_state' type-id='3cb82f3a' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3c7ea80a' size-in-bits='64' id='5b62aa60'/>
+      <pointer-type-def type-id='b9a01bd6' size-in-bits='64' id='330c0db4'/>
+      <qualified-type-def type-id='90bc6bed' const='yes' id='2cd82b3d'/>
+      <qualified-type-def type-id='6739dd09' const='yes' id='bca91994'/>
+      <pointer-type-def type-id='86af1d10' size-in-bits='64' id='3fab024e'/>
+      <pointer-type-def type-id='2eb8da02' size-in-bits='64' id='b4ff6cf8'/>
+      <pointer-type-def type-id='9ce849da' size-in-bits='64' id='f1ac64d0'/>
+      <pointer-type-def type-id='a4974438' size-in-bits='64' id='2c202856'/>
+      <pointer-type-def type-id='a4a37730' size-in-bits='64' id='47547dee'/>
+      <pointer-type-def type-id='c46fad80' size-in-bits='64' id='e5ce629e'/>
+      <qualified-type-def type-id='74191d27' const='yes' id='60263890'/>
+      <pointer-type-def type-id='e44b8083' size-in-bits='64' id='52abf1d3'/>
+      <pointer-type-def type-id='9280516b' size-in-bits='64' id='ca9b3bbf'/>
+      <enum-decl name='irq_domain_bus_token' filepath='include/linux/irqdomain.h' line='77' column='1' id='385b8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DOMAIN_BUS_ANY' value='0'/>
+        <enumerator name='DOMAIN_BUS_WIRED' value='1'/>
+        <enumerator name='DOMAIN_BUS_GENERIC_MSI' value='2'/>
+        <enumerator name='DOMAIN_BUS_PCI_MSI' value='3'/>
+        <enumerator name='DOMAIN_BUS_PLATFORM_MSI' value='4'/>
+        <enumerator name='DOMAIN_BUS_NEXUS' value='5'/>
+        <enumerator name='DOMAIN_BUS_IPI' value='6'/>
+        <enumerator name='DOMAIN_BUS_FSL_MC_MSI' value='7'/>
+        <enumerator name='DOMAIN_BUS_TI_SCI_INTA_MSI' value='8'/>
+        <enumerator name='DOMAIN_BUS_WAKEUP' value='9'/>
+      </enum-decl>
+      <enum-decl name='probe_type' filepath='include/linux/device.h' line='338' column='1' id='171c98b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PROBE_DEFAULT_STRATEGY' value='0'/>
+        <enumerator name='PROBE_PREFER_ASYNCHRONOUS' value='1'/>
+        <enumerator name='PROBE_FORCE_SYNCHRONOUS' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='1851ab9f' size-in-bits='64' id='730f4667'/>
+      <pointer-type-def type-id='374a88a9' size-in-bits='64' id='613d39f5'/>
+      <pointer-type-def type-id='63217e72' size-in-bits='64' id='2f28f04c'/>
+      <pointer-type-def type-id='9c1f445d' size-in-bits='64' id='22deb949'/>
+      <pointer-type-def type-id='aa70b8e2' size-in-bits='64' id='df416a94'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='128' id='2020bac4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='80ef8feb' size-in-bits='64' id='bff05edb'/>
+      <pointer-type-def type-id='325adc8b' size-in-bits='64' id='0a9b173b'/>
+      <pointer-type-def type-id='f100815b' size-in-bits='64' id='8e62d7cb'/>
+      <pointer-type-def type-id='c5ccfee8' size-in-bits='64' id='023b769e'/>
+      <pointer-type-def type-id='b68c3fba' size-in-bits='64' id='d5b25e9c'/>
+      <pointer-type-def type-id='a25ce1be' size-in-bits='64' id='02f11ed4'/>
+      <pointer-type-def type-id='9d67acd5' size-in-bits='64' id='b9419dc5'/>
+      <pointer-type-def type-id='51195455' size-in-bits='64' id='73ea90c5'/>
+      <pointer-type-def type-id='f66244c3' size-in-bits='64' id='f418ceb3'/>
+      <array-type-def dimensions='1' type-id='e710f78e' size-in-bits='576' id='0e685653'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='ebe3ac70' size-in-bits='64' id='ddcd89c6'/>
+      <pointer-type-def type-id='2561fcb2' size-in-bits='64' id='ff2b3d10'/>
+      <pointer-type-def type-id='29843697' size-in-bits='64' id='9eead88f'/>
+      <pointer-type-def type-id='e290c28c' size-in-bits='64' id='2a128f5a'/>
+      <pointer-type-def type-id='f588f6e0' size-in-bits='64' id='e1ea11f6'/>
+      <pointer-type-def type-id='4a19d21e' size-in-bits='64' id='5da77304'/>
+      <typedef-decl name='__kernel_pid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='28' column='1' id='63eb2bf2'/>
+      <typedef-decl name='irq_hw_number_t' type-id='7359adad' filepath='include/linux/types.h' line='169' column='1' id='88370ce9'/>
+      <typedef-decl name='kernel_siginfo_t' type-id='38ef7882' filepath='include/linux/signal_types.h' line='14' column='1' id='22ec9634'/>
+      <typedef-decl name='ktime_t' type-id='9b7c55ef' filepath='include/linux/ktime.h' line='28' column='1' id='fbc017ef'/>
+      <typedef-decl name='mm_segment_t' type-id='7359adad' filepath='arch/arm64/include/asm/thread_info.h' line='21' column='1' id='f079b4db'/>
+      <typedef-decl name='phandle' type-id='19c2251e' filepath='include/linux/of.h' line='28' column='1' id='6e394fba'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='32' id='587936a0'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__2' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='7f825f2d'>
+        <data-member access='public'>
+          <var-decl name='futex' type-id='71f149c6' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nanosleep' type-id='5047547d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='poll' type-id='98bfe848' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1' id='9a29bfd9'>
+        <data-member access='public'>
+          <var-decl name='preempt_count' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='preempt' type-id='45bb8abd' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='42' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='428' column='1' id='b597c0fa'>
+        <data-member access='public'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='430' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='infinite' id='c764d637'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='7359adad' size-in-bits='64' id='1d2c2b85'/>
+      <pointer-type-def type-id='ddd7cbfe' size-in-bits='64' id='273a7d34'/>
+      <array-type-def dimensions='1' type-id='2ae08426' size-in-bits='256' id='ae25b7bc'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='59bcd074' size-in-bits='64' id='bea4d586'/>
+      <pointer-type-def type-id='630e0832' size-in-bits='64' id='f5f7cbd4'/>
+      <pointer-type-def type-id='0a84ab07' size-in-bits='64' id='7d18218b'/>
+      <pointer-type-def type-id='f8c641b0' size-in-bits='64' id='e6c297c2'/>
+      <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/>
+      <pointer-type-def type-id='69970be2' size-in-bits='64' id='b16791f0'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2432' id='9dc2293d'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='4672' id='525b50d2'>
+        <subrange length='73' type-id='7ff19f0f' id='1ee2a653'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='448' id='76b91d35'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='f3e87129' size-in-bits='64' id='fb55efa1'/>
+      <pointer-type-def type-id='1d120221' size-in-bits='64' id='e118aff9'/>
+      <pointer-type-def type-id='13fcfe64' size-in-bits='64' id='bf8a20d2'/>
+      <pointer-type-def type-id='cde99b39' size-in-bits='64' id='9a335021'/>
+      <pointer-type-def type-id='a47d3467' size-in-bits='64' id='3e195537'/>
+      <pointer-type-def type-id='651086d7' size-in-bits='64' id='cc26d15f'/>
+      <pointer-type-def type-id='99d089ec' size-in-bits='64' id='a0408c5a'/>
+      <array-type-def dimensions='1' type-id='a3274c4b' size-in-bits='5120' id='8574e02e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='be8f4983' size-in-bits='64' id='1f98c663'/>
+      <pointer-type-def type-id='9467b853' size-in-bits='64' id='1146dea3'/>
+      <pointer-type-def type-id='9e4acc7a' size-in-bits='64' id='00ee50b8'/>
+      <pointer-type-def type-id='a6892387' size-in-bits='64' id='d6e32957'/>
+      <pointer-type-def type-id='ab9643dd' size-in-bits='64' id='46ff135d'/>
+      <pointer-type-def type-id='e54806c5' size-in-bits='64' id='f774a955'/>
+      <array-type-def dimensions='1' type-id='cfff5953' size-in-bits='384' id='7975e215'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='7e6588d9' size-in-bits='64' id='b72fdee5'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='512' id='59daf3ef'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='bdi_writeback' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='131' column='1' id='ac0aeb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_old_flush' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_dirty' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_more_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_dirty_time' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='aca5b9e5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='congested' type-id='d97a04ce' visibility='default' filepath='include/linux/backing-dev-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='bw_time_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dirtied_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='written_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='avg_write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='balanced_dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dirty_exceeded' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='start_all_reason' type-id='c1602c7a' visibility='default' filepath='include/linux/backing-dev-defs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='work_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='dirty_sleep' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='bdi_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/backing-dev-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='memcg_completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='memcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='blkcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='memcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='blkcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='' type-id='93944b10' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_set' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='704' column='1' id='dfa886b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bio_slab' type-id='f3b4aca8' visibility='default' filepath='include/linux/bio.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='front_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/bio.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bio_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bvec_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rescue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/bio.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rescue_list' type-id='096280be' visibility='default' filepath='include/linux/bio.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rescue_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bio.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rescue_workqueue' type-id='242e3d19' visibility='default' filepath='include/linux/bio.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='727' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_func_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3603' column='1' id='8a1373a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_line_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3611' column='1' id='88565f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_name_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='line_col' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_offload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='350' column='1' id='eef53362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/linux/bpf.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offdev' type-id='d079c835' visibility='default' filepath='include/linux/bpf.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev_state' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='opt_failed' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jited_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='370' column='1' id='7af446cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nsecs' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/bpf.h' line='373' 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='37' column='1' id='0ef5c7e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/bpf-cgroup.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='6a3af55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class_dev' type-id='fa0b179b' 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='95e97e5e' 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='e7d2a5fc' 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='1a0da7f7' visibility='default' filepath='include/linux/bsg.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='btf' is-struct='yes' visibility='default' is-declaration-only='yes' id='dccc7677'/>
+      <class-decl name='cfs_bandwidth' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='334' column='1' id='68e4a3af'/>
+      <class-decl name='cfs_rq' size-in-bits='3072' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='499' column='1' id='feeb4c2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='kernel/sched/sched.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exec_clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_vruntime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tasks_timeline' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='curr' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='skip' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_spread_over' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='removed' type-id='dbb6a82c' visibility='default' filepath='kernel/sched/sched.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tg_load_avg_contrib' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='propagate' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prop_runnable_sum' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='h_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='last_h_load_update' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='h_load_next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rq' type-id='6ed6b432' visibility='default' filepath='kernel/sched/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='on_list' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='tg' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='573' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_file' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='120' column='1' id='37a4ee40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notified_at' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_timer' type-id='abe41e67' visibility='default' filepath='include/linux/cgroup-defs.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_subsys_state' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='134' column='1' id='7f3df443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/cgroup-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rstat_css_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='serial_nr' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='online_cnt' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='destroy_rwork' type-id='7c0b9fdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='parent' type-id='cfff5953' visibility='default' filepath='include/linux/cgroup-defs.h' line='181' 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='374' column='1' id='bd51dd4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='375' 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='111' column='1' id='6739dd09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='suid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='egid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsuid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fsgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='securebits' type-id='f0981eeb' visibility='default' filepath='include/linux/cred.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_inheritable' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cap_permitted' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cap_effective' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_bset' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cap_ambient' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='jit_keyring' type-id='002ac4a6' visibility='default' filepath='include/linux/cred.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='session_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='process_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='thread_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key_auth' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/cred.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/cred.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cred.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_info' type-id='383471a1' visibility='default' filepath='include/linux/cred.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='0a97cc35' visibility='default' filepath='include/linux/cred.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='deferred_split' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='695' column='1' id='d619c1c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='split_queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='split_queue' type-id='72f469ec' visibility='default' filepath='include/linux/mmzone.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='split_queue_len' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='698' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_private' size-in-bits='1472' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='47' column='1' id='e44b8083'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/base/base.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mkobj' type-id='47ed147a' visibility='default' filepath='drivers/base/base.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fdtable' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='26' column='1' id='ff35cfe1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_fds' type-id='f0981eeb' 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='229806b3' 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='1d2c2b85' 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='1d2c2b85' 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='1d2c2b85' 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='e3d8ce29' visibility='default' filepath='include/linux/fdtable.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_constraints' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='89' column='1' id='7ca99f8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer_clock_base' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='161' column='1' id='1851ab9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_base' type-id='75e9503b' visibility='default' filepath='include/linux/hrtimer.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/hrtimer.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/hrtimer.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='ff3c7f20' visibility='default' filepath='include/linux/hrtimer.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_time' type-id='7a6c9108' visibility='default' filepath='include/linux/hrtimer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='169' column='1'/>
+        </data-member>
+      </class-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='80ef8feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' 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='f1ac64d0' 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='7359adad' 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='a01c3626' 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='eaa32e2f' 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='1f78af0c' 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='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_param' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='351' column='1' id='325adc8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='a84f5b46' visibility='default' filepath='include/linux/iommu.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='faults' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='355' 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='1081' column='1' id='f100815b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_per_chip' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_chips' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='irq_flags_to_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq_flags_to_set' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gc_flags' type-id='7a1ec3b1' visibility='default' filepath='include/linux/irq.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gc' type-id='a5527824' visibility='default' filepath='include/linux/irq.h' line='1087' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_siginfo' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='12' column='1' id='38ef7882'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c60b207d' visibility='default' filepath='include/linux/signal_types.h' line='13' 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='70' column='1' id='18f7b101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/memcontrol.h' line='72' 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='159' column='1' id='a38368d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='primary' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spare' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_padding' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='177' column='1' id='4f5a0c96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/memcontrol.h' line='178' 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='a25ce1be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' 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='aa291214' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='f47d5752' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_cgroup' type-id='223696fb' visibility='default' filepath='include/linux/mm_types.h' line='203' 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='635c3685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='f22a8abb' 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='7359adad' 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='7359adad' 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='7359adad' 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='ea7fad85' 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='7359adad' 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='f22a8abb' 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='f22a8abb' 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='7359adad' 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='f22a8abb' 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='f22a8abb' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='path' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/path.h' line='8' column='1' id='b5382ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt' type-id='549da823' 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='27675065' visibility='default' filepath='include/linux/path.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_ref' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/percpu-refcount.h' line='95' column='1' id='818799b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/percpu-refcount.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu_count_ptr' type-id='7359adad' visibility='default' filepath='include/linux/percpu-refcount.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirm_switch' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='force_atomic' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='allow_reinit' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/percpu-refcount.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_context' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='743' column='1' id='9d67acd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='active_ctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinned_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flexible_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pinned_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flexible_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='is_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='nr_stat' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rotate_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rotate_necessary' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/perf_event.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parent_ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='parent_gen' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='generation' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pin_count' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='task_ctx_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='77' column='1' id='51195455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dt_maps' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='400fb07b' visibility='default' filepath='drivers/pinctrl/core.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='92' column='1' id='f66244c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='settings' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='95' 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='66' column='1' id='4ad5b81b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='57b0eed2' visibility='default' filepath='include/linux/pm_qos.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='default_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='no_constraint_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='1389f6b6' visibility='default' filepath='include/linux/pm_qos.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifiers' type-id='282b7312' visibility='default' filepath='include/linux/pm_qos.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='75' column='1' id='e0a9bd3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='effective_flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='107' column='1' id='e710f78e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nextevt' type-id='91ce1af9' visibility='default' filepath='include/linux/posix-timers.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tqhead' type-id='ff3c7f20' visibility='default' filepath='include/linux/posix-timers.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='31' column='1' id='ebe3ac70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' 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='95e97e5e' 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='eaa32e2f' 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='ddcd89c6' 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='d83a2db1' visibility='default' filepath='include/linux/of.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='queue_limits' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='329' column='1' id='f0966d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bounce_pfn' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seg_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_hw_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_dev_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chunk_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='physical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='logical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='alignment_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_min' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='io_opt' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_hw_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_same_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_write_zeroes_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='discard_granularity' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_integrity_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_discard_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='752'>
+          <var-decl name='misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='760'>
+          <var-decl name='discard_misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='raid_partial_stripes_expensive' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='zoned' type-id='a48b5528' visibility='default' filepath='include/linux/blkdev.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rw_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rwsem.h' line='36' column='1' id='f19fdb93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/rwsem.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rwsem.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/rwsem.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/rwsem.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_class' size-in-bits='1664' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1737' column='1' id='74191d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='162b4cce' visibility='default' filepath='kernel/sched/sched.h' line='1738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uclamp_enabled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enqueue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dequeue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='yield_task' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yield_to_task' type-id='c4b7e554' visibility='default' filepath='kernel/sched/sched.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_preempt_curr' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pick_next_task' type-id='2a7b00f2' visibility='default' filepath='kernel/sched/sched.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_prev_task' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_next_task' type-id='f13b7179' visibility='default' filepath='kernel/sched/sched.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='balance' type-id='5346c726' visibility='default' filepath='kernel/sched/sched.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='select_task_rq' type-id='c3408547' visibility='default' filepath='kernel/sched/sched.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migrate_task_rq' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='task_woken' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_cpus_allowed' type-id='54777a92' visibility='default' filepath='kernel/sched/sched.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_online' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_offline' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='task_tick' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='task_fork' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='task_dead' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='switched_from' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='switched_to' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='prio_changed' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_rr_interval' type-id='c79c9f4c' visibility='default' filepath='kernel/sched/sched.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='update_curr' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='task_change_group' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1805' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='e290c28c'/>
+      <class-decl name='subsys_private' size-in-bits='4352' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='29' column='1' id='4a19d21e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='devices_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/base.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='drivers_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='klist_drivers' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='bus_notifier' type-id='708c2394' visibility='default' filepath='drivers/base/base.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drivers_autoprobe' type-id='f0981eeb' visibility='default' filepath='drivers/base/base.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='drivers/base/base.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='glue_dirs' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='drivers/base/base.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_group_cputimer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='67' column='1' id='9480bb51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime_atomic' type-id='4b60fba4' visibility='default' filepath='include/linux/sched/signal.h' line='68' 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='82' column='1' id='3cb82f3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vregs' type-id='98f84070' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fpsr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='fpcr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='__reserved' type-id='839e8989' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_struct' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/sched/user.h' line='14' column='1' id='ddd7cbfe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__count' type-id='64615833' visibility='default' filepath='include/linux/sched/user.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='processes' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sigpending' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='epoll_watches' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='locked_shm' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unix_inflight' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pipe_bufs' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uidhash_node' type-id='03a4a074' visibility='default' filepath='include/linux/sched/user.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched/user.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='locked_vm' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ratelimit' type-id='8b829a50' visibility='default' filepath='include/linux/sched/user.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='45' 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='349' column='1' id='594488ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueued' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ewma' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmpressure' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/vmpressure.h' line='13' column='1' id='d6294af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scanned' type-id='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='fb4018a0' 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='72f469ec' 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='925167dc' 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='ef9025d0' visibility='default' filepath='include/linux/vmpressure.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_domain' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='129' column='1' id='960bf1fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/writeback.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completions' type-id='7dc82ec2' visibility='default' filepath='include/linux/writeback.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_timer' type-id='abe41e67' visibility='default' filepath='include/linux/writeback.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_time' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dirty_limit_tstamp' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dirty_limit' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='5047547d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='a1c3b834' 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='58918b27' 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='95408dfc' 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='91ce1af9' visibility='default' filepath='include/linux/restart_block.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='98bfe848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='3ac36db0' 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='95e97e5e' 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='95e97e5e' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='34' column='1' id='45bb8abd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='need_resched' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='71f149c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uaddr' type-id='f9409001' 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='19c2251e' 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='19c2251e' 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='19c2251e' 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='91ce1af9' 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='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='7296' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='993073b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='dec44472' visibility='default' filepath='include/linux/mm_types.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='2e97ceaf' visibility='default' filepath='include/linux/mm_types.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='membarrier_state' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_users' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mm_count' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pgtables_bytes' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='page_table_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/mm_types.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmlist' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hiwater_rss' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hiwater_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='locked_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='pinned_vm' type-id='28ee064c' visibility='default' filepath='include/linux/mm_types.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exec_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='stack_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='def_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='arg_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='start_stack' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='arg_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='arg_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='env_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='env_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='saved_auxv' type-id='d964a553' visibility='default' filepath='include/linux/mm_types.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rss_stat' type-id='2235a2cb' visibility='default' filepath='include/linux/mm_types.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='binfmt' type-id='7cc59444' visibility='default' filepath='include/linux/mm_types.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='context' type-id='0eb9c3fd' visibility='default' filepath='include/linux/mm_types.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='core_state' type-id='90ad83aa' visibility='default' filepath='include/linux/mm_types.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ioctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ioctx_table' type-id='122191b2' visibility='default' filepath='include/linux/mm_types.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/mm_types.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='exe_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mmu_notifier_mm' type-id='cc546a3e' visibility='default' filepath='include/linux/mm_types.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tlb_flush_pending' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='uprobes_state' type-id='6308a819' visibility='default' filepath='include/linux/mm_types.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='async_put_work' type-id='ef9025d0' visibility='default' filepath='include/linux/mm_types.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='544' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6e3695a3' size-in-bits='64' id='84127e50'/>
+      <qualified-type-def type-id='ad95e21b' const='yes' id='3c7ea80a'/>
+      <pointer-type-def type-id='c3619065' size-in-bits='64' id='e1962c5d'/>
+      <qualified-type-def type-id='9a1fed7b' const='yes' id='b9a01bd6'/>
+      <qualified-type-def type-id='3ea82289' const='yes' id='86af1d10'/>
+      <qualified-type-def type-id='f45a6a89' const='yes' id='2eb8da02'/>
+      <qualified-type-def type-id='8b7a2cd1' const='yes' id='9ce849da'/>
+      <qualified-type-def type-id='0926e4bd' const='yes' id='a4974438'/>
+      <qualified-type-def type-id='ff771233' const='yes' id='a4a37730'/>
+      <qualified-type-def type-id='8bb45a31' const='yes' id='c46fad80'/>
+      <array-type-def dimensions='1' type-id='47841236' size-in-bits='256' id='bb2d0d4e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='d6ebca75' size-in-bits='64' id='27675065'/>
+      <pointer-type-def type-id='32536656' size-in-bits='64' id='a80fd1bc'/>
+      <pointer-type-def type-id='0128515a' size-in-bits='64' id='1b19faa1'/>
+      <pointer-type-def type-id='fc87d78f' size-in-bits='64' id='07d0a3e7'/>
+      <enum-decl name='memcg_kmem_state' filepath='include/linux/memcontrol.h' line='170' column='1' id='def0995c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='KMEM_NONE' value='0'/>
+        <enumerator name='KMEM_ALLOCATED' value='1'/>
+        <enumerator name='KMEM_ONLINE' value='2'/>
+      </enum-decl>
+      <enum-decl name='uprobe_task_state' filepath='include/linux/uprobes.h' line='51' column='1' id='5d1a5bc7'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='70c545cd' size-in-bits='64' id='5bb9c75d'/>
+      <pointer-type-def type-id='ff35cfe1' size-in-bits='64' id='02b857a9'/>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='4096' id='d2c516bd'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='256' id='fc3a8480'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='a301f696' size-in-bits='64' id='64452f48'/>
+      <pointer-type-def type-id='dccf0381' size-in-bits='64' id='295a92ed'/>
+      <pointer-type-def type-id='8ab5a2af' size-in-bits='64' id='5aa1f3eb'/>
+      <pointer-type-def type-id='a2ac80c1' size-in-bits='64' id='f7114ca5'/>
+      <pointer-type-def type-id='db04abd6' size-in-bits='64' id='7c6e0e0c'/>
+      <pointer-type-def type-id='dd74f3ed' size-in-bits='64' id='76ccea8d'/>
+      <array-type-def dimensions='1' type-id='a21c4412' size-in-bits='16384' id='02d77f24'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='fe81ecb9' size-in-bits='64' id='92daca01'/>
+      <pointer-type-def type-id='696d238e' size-in-bits='64' id='23704f74'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='768' id='e4e6d6c4'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='99cd4891' size-in-bits='64' id='8f01ad5c'/>
+      <array-type-def dimensions='1' type-id='97851996' size-in-bits='infinite' id='687d975e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aac38d0b' size-in-bits='1280' id='f53c5bdb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='6aac043b' size-in-bits='64' id='a0d3a64b'/>
+      <pointer-type-def type-id='de031042' size-in-bits='64' id='d60f4f10'/>
+      <pointer-type-def type-id='bd965180' size-in-bits='64' id='a2bff676'/>
+      <pointer-type-def type-id='9b08f7cd' size-in-bits='64' id='d504f73d'/>
+      <pointer-type-def type-id='02f11ed4' size-in-bits='64' id='9f93c9da'/>
+      <array-type-def dimensions='1' type-id='2bf16f59' size-in-bits='1024' id='18b1b6ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b94e5398' size-in-bits='256' id='3449295e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='0252e252' size-in-bits='64' id='b816e1d0'/>
+      <pointer-type-def type-id='a490b814' size-in-bits='64' id='e15f3242'/>
+      <pointer-type-def type-id='3bf19710' size-in-bits='64' id='53e3a7d6'/>
+      <pointer-type-def type-id='ceee71ca' size-in-bits='64' id='3dad1a48'/>
+      <pointer-type-def type-id='c0342c43' size-in-bits='64' id='d38eb863'/>
+      <array-type-def dimensions='1' type-id='60dcbf6c' size-in-bits='2048' id='80f344e1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='e0a68fea' size-in-bits='64' id='c3a28778'/>
+      <pointer-type-def type-id='dd823037' size-in-bits='64' id='3992a90f'/>
+      <pointer-type-def type-id='ff2b3d10' size-in-bits='64' id='eb11624e'/>
+      <type-decl name='short int' size-in-bits='16' id='a2185560'/>
+      <pointer-type-def type-id='3a97b64f' size-in-bits='64' id='2c927837'/>
+      <pointer-type-def type-id='87b18d2f' size-in-bits='64' id='b0d49e67'/>
+      <pointer-type-def type-id='9127cd0e' size-in-bits='64' id='868c74f4'/>
+      <pointer-type-def type-id='4c8d9cac' size-in-bits='64' id='572fbdca'/>
+      <typedef-decl name='__s16' type-id='a2185560' filepath='include/uapi/asm-generic/int-ll64.h' line='23' column='1' id='b55def60'/>
+      <typedef-decl name='compat_long_t' type-id='a7832498' filepath='include/asm-generic/compat.h' line='18' column='1' id='abb906de'/>
+      <typedef-decl name='compat_uptr_t' type-id='19c2251e' filepath='include/asm-generic/compat.h' line='22' column='1' id='782d78af'/>
+      <pointer-type-def type-id='b39453c8' size-in-bits='64' id='7855184a'/>
+      <pointer-type-def type-id='ea038279' size-in-bits='64' id='66c8694d'/>
+      <typedef-decl name='key_perm_t' type-id='8f92235e' filepath='include/linux/key.h' line='31' column='1' id='296adac1'/>
+      <typedef-decl name='key_serial_t' type-id='3ff5601b' filepath='include/linux/key.h' line='28' column='1' id='c84025ab'/>
+      <typedef-decl name='phys_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='158' column='1' id='2522883d'/>
+      <typedef-decl name='seqlock_t' type-id='c87ee7e4' filepath='include/linux/seqlock.h' line='414' column='1' id='e6cd5ecf'/>
+      <pointer-type-def type-id='7df55081' size-in-bits='64' id='49f5e2e5'/>
+      <pointer-type-def type-id='1f1ec116' size-in-bits='64' id='5dee5830'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='320' id='64af1365'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__45' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='f5a928fc'>
+        <data-member access='public'>
+          <var-decl name='' type-id='2b31becf' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='46982a3f' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='234' column='1' id='d5d77d48'>
+        <data-member access='public'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='607bacb1' visibility='default' filepath='include/linux/key.h' line='236' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='219' column='1' id='51bb2fb5'>
+        <data-member access='public'>
+          <var-decl name='index_key' type-id='16ab8749' visibility='default' filepath='include/linux/key.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5b740cc8' visibility='default' filepath='include/linux/key.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='175' column='1' id='1a65b0a7'>
+        <data-member access='public'>
+          <var-decl name='graveyard_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='serial_node' type-id='2a8a6332' visibility='default' filepath='include/linux/key.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='182' column='1' id='21f0eb77'>
+        <data-member access='public'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='revoked_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='38b33cba' size-in-bits='64' id='1588722c'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='infinite' id='c99b5ecd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='120c01b5' size-in-bits='128' id='9a69aeec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='b7e0fed2' size-in-bits='64' id='57376310'/>
+      <pointer-type-def type-id='44f52e9d' size-in-bits='64' id='9d5923ed'/>
+      <pointer-type-def type-id='62c85860' size-in-bits='64' id='2ae08426'/>
+      <pointer-type-def type-id='dd082beb' size-in-bits='64' id='9ed36ca7'/>
+      <pointer-type-def type-id='2157493d' size-in-bits='64' id='772c77c9'/>
+      <pointer-type-def type-id='08cd0705' size-in-bits='64' id='b97350f1'/>
+      <pointer-type-def type-id='09c8f1a3' size-in-bits='64' id='6407fd0f'/>
+      <pointer-type-def type-id='8741a34d' size-in-bits='64' id='d7b98f89'/>
+      <pointer-type-def type-id='e76f1d29' size-in-bits='64' id='4935400d'/>
+      <pointer-type-def type-id='b3fff074' size-in-bits='64' id='a80942ae'/>
+      <pointer-type-def type-id='066ca455' size-in-bits='64' id='06c31e09'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='64' id='839e8989'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e2609cc' size-in-bits='4096' id='98f84070'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='87886298' size-in-bits='64' id='d97a04ce'/>
+      <pointer-type-def type-id='e063028f' size-in-bits='64' id='a47d3467'/>
+      <pointer-type-def type-id='708c2394' size-in-bits='64' id='282b7312'/>
+      <pointer-type-def type-id='22474385' size-in-bits='64' id='d079c835'/>
+      <pointer-type-def type-id='1d115fd5' size-in-bits='64' id='dc91d125'/>
+      <pointer-type-def type-id='7f3df443' size-in-bits='64' id='cfff5953'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='acpi_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='210' column='1' id='ad95e21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='060772ed' visibility='default' filepath='include/linux/mod_devicetable.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cls' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cls_msk' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='146' column='1' id='f3e87129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_next' type-id='fb55efa1' visibility='default' filepath='include/linux/blk_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_disk' type-id='33c599da' visibility='default' filepath='include/linux/blk_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_opf' type-id='f0981eeb' visibility='default' filepath='include/linux/blk_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='bi_ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bi_write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='bi_status' type-id='f4e2facd' visibility='default' filepath='include/linux/blk_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='bi_partno' type-id='f9b06939' visibility='default' filepath='include/linux/blk_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bi_iter' type-id='9e0198d8' visibility='default' filepath='include/linux/blk_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__bi_remaining' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bi_end_io' type-id='8213bb9f' visibility='default' filepath='include/linux/blk_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bi_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bi_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk_types.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bi_issue' type-id='a9b0f4f1' visibility='default' filepath='include/linux/blk_types.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bi_iocost_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bi_crypt_context' type-id='9d1360ce' visibility='default' filepath='include/linux/blk_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bi_skip_dm_default_key' type-id='b50a4934' visibility='default' filepath='include/linux/blk_types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='bi_vcnt' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='bi_max_vecs' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='__bi_cnt' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bi_io_vec' type-id='cddcb53e' visibility='default' filepath='include/linux/blk_types.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bi_pool' type-id='38b1e3a0' visibility='default' filepath='include/linux/blk_types.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bi_inline_vecs' type-id='7289e834' visibility='default' filepath='include/linux/blk_types.h' line='214' 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='20' column='1' id='1d120221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flush_queue_delayed' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='flush_pending_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='flush_running_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='rq_status' type-id='f4e2facd' visibility='default' filepath='block/blk.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush_pending_since' type-id='7359adad' visibility='default' filepath='block/blk.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_queue' type-id='e4f16420' visibility='default' filepath='block/blk.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flush_data_in_flight' type-id='72f469ec' visibility='default' filepath='block/blk.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flush_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='orig_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='key' type-id='47479831' visibility='default' filepath='block/blk.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mq_flush_lock' type-id='fb4018a0' visibility='default' filepath='block/blk.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_keyslot_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='52' column='1' id='13fcfe64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ksm_ll_ops' type-id='85385c54' visibility='default' filepath='include/linux/keyslot-manager.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_dun_bytes_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto_modes_supported' type-id='49580a63' visibility='default' filepath='include/linux/keyslot-manager.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/keyslot-manager.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_slots' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='f19fdb93' visibility='default' filepath='include/linux/keyslot-manager.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='idle_slots_wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/keyslot-manager.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='idle_slots' type-id='72f469ec' visibility='default' filepath='include/linux/keyslot-manager.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='idle_slots_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/keyslot-manager.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='slot_hashtable' type-id='030d0b18' visibility='default' filepath='include/linux/keyslot-manager.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='log_slot_ht_size' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='slots' type-id='5b559658' visibility='default' filepath='include/linux/keyslot-manager.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctx' size-in-bits='2048' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='18' column='1' id='cde99b39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e9e9d685' visibility='default' filepath='block/blk-mq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='block/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index_hw' type-id='ff2536e2' visibility='default' filepath='block/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hctxs' type-id='56ac7648' visibility='default' filepath='block/blk-mq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rq_dispatched' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_merged' type-id='7359adad' visibility='default' filepath='block/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_completed' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='block/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ctxs' type-id='ceead144' visibility='default' filepath='block/blk-mq.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_tag_set' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='93' column='1' id='651086d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='ffbe012f' visibility='default' filepath='include/linux/blk-mq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_maps' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blk-mq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tags' type-id='c527e30d' visibility='default' filepath='include/linux/blk-mq.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tag_list_lock' type-id='925167dc' visibility='default' filepath='include/linux/blk-mq.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tag_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_queue_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='99d089ec'/>
+      <class-decl name='blk_rq_stat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='491' column='1' id='a3274c4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mean' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_samples' type-id='19c2251e' visibility='default' filepath='include/linux/blk_types.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='batch' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_stat_callback' size-in-bits='1088' is-struct='yes' visibility='default' filepath='block/blk-stat.h' line='19' column='1' id='be8f4983'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='block/blk-stat.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='block/blk-stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bucket_fn' type-id='484cd9e5' visibility='default' filepath='block/blk-stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buckets' type-id='f0981eeb' visibility='default' filepath='block/blk-stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_fn' type-id='454b8f82' visibility='default' filepath='block/blk-stat.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='block/blk-stat.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='block/blk-stat.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_gq' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='108' column='1' id='9467b853'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blk-cgroup.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_node' type-id='03a4a074' visibility='default' filepath='include/linux/blk-cgroup.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wb_congested' type-id='d97a04ce' visibility='default' filepath='include/linux/blk-cgroup.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/blk-cgroup.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='online' type-id='b50a4934' visibility='default' filepath='include/linux/blk-cgroup.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stat_bytes' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='stat_ios' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='pd' type-id='f5665670' visibility='default' filepath='include/linux/blk-cgroup.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='async_bio_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='async_bios' type-id='096280be' visibility='default' filepath='include/linux/blk-cgroup.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='async_bio_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blk-cgroup.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='use_delay' type-id='49178f86' visibility='default' filepath='include/linux/blk-cgroup.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='delay_nsec' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='delay_start' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='last_delay' type-id='91ce1af9' visibility='default' filepath='include/linux/blk-cgroup.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='last_use' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blk-cgroup.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='78' column='1' id='9e4acc7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3a109e70' visibility='default' filepath='include/linux/bpf.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inner_map_meta' type-id='00ee50b8' visibility='default' filepath='include/linux/bpf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_type' type-id='da8f27ee' visibility='default' filepath='include/linux/bpf.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='key_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='value_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_entries' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_flags' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='spin_lock_off' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_key_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='btf_value_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='memory' type-id='7c6af338' visibility='default' filepath='include/linux/bpf.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unpriv_array' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='frozen' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='usercnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='109' 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='306' column='1' id='9a1fed7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='test_run' type-id='eddbe2ad' visibility='default' filepath='include/linux/bpf.h' line='307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup' size-in-bits='18624' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='352' column='1' id='ab9643dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='7f3df443' visibility='default' filepath='include/linux/cgroup-defs.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='max_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='nr_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nr_dying_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='nr_populated_csets' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='nr_populated_domain_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nr_populated_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='nr_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='procs_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3792'>
+          <var-decl name='subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='old_subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='old_subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='cset_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='e_csets' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='old_dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='rstat_cpu' type-id='d8e759a7' visibility='default' filepath='include/linux/cgroup-defs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rstat_css_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='pending_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/cgroup-defs.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='pidlists' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pidlist_mutex' type-id='925167dc' visibility='default' filepath='include/linux/cgroup-defs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='offline_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/cgroup-defs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release_agent_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='psi' type-id='12878ab3' visibility='default' filepath='include/linux/cgroup-defs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='bpf' type-id='b80e3996' visibility='default' filepath='include/linux/cgroup-defs.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='congestion_count' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18464'>
+          <var-decl name='freezer' type-id='ad50988b' visibility='default' filepath='include/linux/cgroup-defs.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18592'>
+          <var-decl name='ancestor_ids' type-id='1fdc7fa6' visibility='default' filepath='include/linux/cgroup-defs.h' line='492' 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='866' column='1' id='e54806c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/cgroup.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/cgroup.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cgroup.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/cgroup.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='root_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup.h' line='871' 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='39' column='1' id='47841236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='incr' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='90' column='1' id='d6ebca75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dcache.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='d_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dcache.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_parent' type-id='27675065' visibility='default' filepath='include/linux/dcache.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_name' type-id='02244303' visibility='default' filepath='include/linux/dcache.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_inode' type-id='7e666abe' visibility='default' filepath='include/linux/dcache.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_iname' type-id='fc872715' visibility='default' filepath='include/linux/dcache.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_lockref' type-id='60efdfd3' visibility='default' filepath='include/linux/dcache.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_op' type-id='1ee57353' visibility='default' filepath='include/linux/dcache.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_sb' type-id='42c8f564' visibility='default' filepath='include/linux/dcache.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_time' type-id='7359adad' visibility='default' filepath='include/linux/dcache.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='d_fsdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/dcache.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='ba311a3a' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d_child' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='d_subdirs' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='d_u' type-id='ba0a0e48' visibility='default' filepath='include/linux/dcache.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos_request' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='111' column='1' id='32536656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c47ba023' visibility='default' filepath='include/linux/pm_qos.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5d6ef881' visibility='default' filepath='include/linux/pm_qos.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_qos.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_queue' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='110' column='1' id='fc87d78f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='4a89adae' visibility='default' filepath='include/linux/elevator.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/elevator.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/elevator.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/elevator.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/elevator.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hash' type-id='53b70d6c' visibility='default' filepath='include/linux/elevator.h' line='117' 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='1373' column='1' id='70c545cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fa_lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fa_fd' type-id='95e97e5e' 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='fa_next' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fa_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fa_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1379' 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='7dc82ec2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' 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='f0981eeb' 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='e14c3b11' visibility='default' filepath='include/linux/flex_proportions.h' line='34' 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='587caff2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' 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='f0981eeb' 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='f5c90b3f' visibility='default' filepath='include/linux/flex_proportions.h' line='81' 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='114' column='1' id='f45a6a89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='c379ce2c' visibility='default' filepath='include/linux/fwnode.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='device_is_available' type-id='e4913062' visibility='default' filepath='include/linux/fwnode.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device_get_match_data' type-id='def135ae' visibility='default' filepath='include/linux/fwnode.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='property_present' type-id='a9ee1319' visibility='default' filepath='include/linux/fwnode.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='property_read_int_array' type-id='15f6292e' visibility='default' filepath='include/linux/fwnode.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='property_read_string_array' type-id='841b4311' visibility='default' filepath='include/linux/fwnode.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_next_child_node' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_named_child_node' type-id='c297681a' visibility='default' filepath='include/linux/fwnode.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_reference_args' type-id='4324a0e5' visibility='default' filepath='include/linux/fwnode.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='graph_get_next_endpoint' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='graph_get_remote_endpoint' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='graph_get_port_parent' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='graph_parse_endpoint' type-id='bde527e9' visibility='default' filepath='include/linux/fwnode.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='add_links' type-id='5eff49b2' visibility='default' filepath='include/linux/fwnode.h' line='150' 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='73' column='1' id='db04abd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/iocontext.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioc' type-id='d042cfad' visibility='default' filepath='include/linux/iocontext.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='df248743' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='eb20ccf0' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iocontext.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='1f78af0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aperture_start' type-id='cf29c9b3' 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='cf29c9b3' 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='b50a4934' visibility='default' filepath='include/linux/iommu.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_ops' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='250' column='1' id='8b7a2cd1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capable' type-id='fd03a8f4' visibility='default' filepath='include/linux/iommu.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain_alloc' type-id='2908e93a' visibility='default' filepath='include/linux/iommu.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_free' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map' type-id='2371b41a' visibility='default' filepath='include/linux/iommu.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unmap' type-id='d1a6d6c2' visibility='default' filepath='include/linux/iommu.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_iotlb_all' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iotlb_sync_map' type-id='7b4e3cad' visibility='default' filepath='include/linux/iommu.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iotlb_sync' type-id='a6bf568c' visibility='default' filepath='include/linux/iommu.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iova_to_phys' type-id='c4904652' visibility='default' filepath='include/linux/iommu.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='add_device' type-id='613d39f5' visibility='default' filepath='include/linux/iommu.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='remove_device' type-id='dd787f72' visibility='default' filepath='include/linux/iommu.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='device_group' type-id='5448fdd7' visibility='default' filepath='include/linux/iommu.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='domain_get_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='domain_set_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='put_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='apply_resv_region' type-id='b20722ab' visibility='default' filepath='include/linux/iommu.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='domain_window_enable' type-id='7f31e8fb' visibility='default' filepath='include/linux/iommu.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='domain_window_disable' type-id='d3b2d361' visibility='default' filepath='include/linux/iommu.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='of_xlate' type-id='7fc43753' visibility='default' filepath='include/linux/iommu.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='is_attach_deferred' type-id='6ee36fa3' visibility='default' filepath='include/linux/iommu.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dev_has_feat' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev_feat_enabled' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev_enable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dev_disable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='aux_get_pasid' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sva_bind' type-id='925b860a' visibility='default' filepath='include/linux/iommu.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sva_unbind' type-id='4fb74714' visibility='default' filepath='include/linux/iommu.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sva_get_pasid' type-id='4ded61d5' visibility='default' filepath='include/linux/iommu.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='page_response' type-id='1ff48951' visibility='default' filepath='include/linux/iommu.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iommu.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='dd74f3ed'/>
+      <class-decl name='irq_domain_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='105' column='1' id='0926e4bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='f1c95c76' visibility='default' filepath='include/linux/irqdomain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select' type-id='e1759090' visibility='default' filepath='include/linux/irqdomain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='8a2b0cc8' visibility='default' filepath='include/linux/irqdomain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap' type-id='8b74557f' visibility='default' filepath='include/linux/irqdomain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xlate' type-id='7881e15c' visibility='default' filepath='include/linux/irqdomain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='0871ecbc' visibility='default' filepath='include/linux/irqdomain.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='644a4b55' visibility='default' filepath='include/linux/irqdomain.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='7ad47ca2' visibility='default' filepath='include/linux/irqdomain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deactivate' type-id='0b8fca52' visibility='default' filepath='include/linux/irqdomain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='translate' type-id='bbe45043' visibility='default' filepath='include/linux/irqdomain.h' line='123' 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='49' column='1' id='a21c4412'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa' type-id='fe391c48' visibility='default' filepath='include/linux/signal_types.h' line='50' 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='153' column='1' id='fe81ecb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check' type-id='f87a5fab' visibility='default' filepath='include/linux/key.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/key.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keytype' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_user' size-in-bits='704' is-struct='yes' visibility='default' filepath='security/keys/internal.h' line='53' column='1' id='696d238e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='security/keys/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cons_lock' type-id='925167dc' visibility='default' filepath='security/keys/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='security/keys/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='security/keys/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nkeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nikeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='security/keys/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='qnkeys' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='qnbytes' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='keyring_index_key' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='91' column='1' id='16ab8749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='465ca58e' visibility='default' filepath='include/linux/key.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/key.h' line='108' 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='ff771233'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='52127d59' 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='d4ae3f3f' 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='0cfacb48' 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='8734cf20' 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='0cfacb48' 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='b7f9d8e6' visibility='default' filepath='include/linux/kobject_ns.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cgwb_frn' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='195' column='1' id='aac38d0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi_id' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='at' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='9eb3e00b' visibility='default' filepath='include/linux/memcontrol.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_vmstats_percpu' size-in-bits='7360' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='88' column='1' id='6aac043b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat' type-id='4f05d88f' visibility='default' filepath='include/linux/memcontrol.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='events' type-id='6bd30ceb' visibility='default' filepath='include/linux/memcontrol.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='nr_page_events' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='targets' type-id='3461381a' visibility='default' filepath='include/linux/memcontrol.h' line='92' 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='60' column='1' id='2235a2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='b6b7435e' visibility='default' filepath='include/linux/mm_types_task.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='de031042'/>
+      <class-decl name='net' size-in-bits='34816' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='54' column='1' id='bd965180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='passive' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rules_mod_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dev_unreg_count' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_base_seq' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/net_namespace.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nsid_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fnhe_genid' type-id='49178f86' visibility='default' filepath='include/net/net_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit_list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_list' type-id='c5ccfee8' visibility='default' filepath='include/net/net_namespace.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='key_domain' type-id='fce14c5f' visibility='default' filepath='include/net/net_namespace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/net/net_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/net/net_namespace.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='netns_ids' type-id='37ce495e' visibility='default' filepath='include/net/net_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/net/net_namespace.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev_base_head' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='proc_net' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='proc_net_stat' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctls' type-id='3fc3d262' visibility='default' filepath='include/net/net_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rtnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='genl_sock' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='uevent_sock' type-id='5224788d' visibility='default' filepath='include/net/net_namespace.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev_name_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev_index_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='hash_mix' type-id='19c2251e' visibility='default' filepath='include/net/net_namespace.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='loopback_dev' type-id='68a2d05b' visibility='default' filepath='include/net/net_namespace.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rules_ops' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='core' type-id='7436aa2b' visibility='default' filepath='include/net/net_namespace.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mib' type-id='870ef624' visibility='default' filepath='include/net/net_namespace.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='packet' type-id='49d7aa74' visibility='default' filepath='include/net/net_namespace.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='unx' type-id='6e306fde' visibility='default' filepath='include/net/net_namespace.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nexthop' type-id='03364088' visibility='default' filepath='include/net/net_namespace.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ipv4' type-id='dba1641f' visibility='default' filepath='include/net/net_namespace.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='ipv6' type-id='dda16745' visibility='default' filepath='include/net/net_namespace.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='nf' type-id='0a6298e0' visibility='default' filepath='include/net/net_namespace.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='xt' type-id='288fe7b8' visibility='default' filepath='include/net/net_namespace.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='ct' type-id='2a831eeb' visibility='default' filepath='include/net/net_namespace.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='nf_frag' type-id='ebd39a5d' visibility='default' filepath='include/net/net_namespace.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='nf_frag_frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/net_namespace.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='nfnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='nfnl_stash' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25216'>
+          <var-decl name='wext_nlevents' type-id='e61c85d0' visibility='default' filepath='include/net/net_namespace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25408'>
+          <var-decl name='gen' type-id='871fd930' visibility='default' filepath='include/net/net_namespace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25472'>
+          <var-decl name='flow_dissector_prog' type-id='bdcee7ae' visibility='default' filepath='include/net/net_namespace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25600'>
+          <var-decl name='xfrm' type-id='3d2d291b' visibility='default' filepath='include/net/net_namespace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='can' type-id='8f9898ce' visibility='default' filepath='include/net/net_namespace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='xdp' type-id='a2b0ef48' visibility='default' filepath='include/net/net_namespace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34624'>
+          <var-decl name='diag_nlsk' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='notifier_block' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='54' column='1' id='9b08f7cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='notifier_call' type-id='0ec8c658' 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='d504f73d' 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='95e97e5e' visibility='default' filepath='include/linux/notifier.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='260' column='1' id='8bb45a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='compatible' type-id='e3204322' visibility='default' filepath='include/linux/mod_devicetable.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='264' 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='733' column='1' id='3643bc2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree' type-id='dec44472' visibility='default' filepath='include/linux/perf_event.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid_namespace' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pid_namespace.h' line='24' column='1' id='0252e252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' 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='37ce495e' 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='e3d8ce29' 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='f0981eeb' 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='f23e2572' 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='f3b4aca8' 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='f0981eeb' 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='b816e1d0' 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='549da823' 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='27675065' 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='27675065' 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='c0ced320' 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='b1d4934a' 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='ef9025d0' visibility='default' filepath='include/linux/pid_namespace.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pid_gid' type-id='094d8048' visibility='default' filepath='include/linux/pid_namespace.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='hide_pid' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='reboot' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/pid_namespace.h' line='47' 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='a490b814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' 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='f0981eeb' 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='f0981eeb' 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='edef9855' 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='f0981eeb' 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='7359adad' visibility='default' filepath='include/linux/pipe_fs_i.h' line='26' 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='79' column='1' id='57b0eed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_domain_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='172' column='1' id='3bf19710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_domain.h' line='174' 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='8b829a50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_work' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='130' column='1' id='7c0b9fdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/workqueue.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='134' column='1' id='ceee71ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blkdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mq_hctx' type-id='a47d3467' visibility='default' filepath='include/linux/blkdev.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rq_flags' type-id='3b445e53' visibility='default' filepath='include/linux/blkdev.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='internal_tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__sector' type-id='a42536cd' visibility='default' filepath='include/linux/blkdev.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bio' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='biotail' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queuelist' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='2f76bc4b' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='df8866ad' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='7fc3d482' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rq_disk' type-id='33c599da' visibility='default' filepath='include/linux/blkdev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='part' type-id='84dc82b7' visibility='default' filepath='include/linux/blkdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='alloc_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='io_start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='stats_sectors' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='nr_phys_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='crypt_ctx' type-id='9d1360ce' visibility='default' filepath='include/linux/blkdev.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='crypt_keyslot' type-id='5b559658' visibility='default' filepath='include/linux/blkdev.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='extra_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='state' type-id='4df77f20' visibility='default' filepath='include/linux/blkdev.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/blkdev.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='deadline' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='097c5bdb' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='end_io_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='return_instance' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='83' column='1' id='c0342c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stack' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_ret_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chained' type-id='b50a4934' visibility='default' filepath='include/linux/uprobes.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='90' 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='60dcbf6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rlim_cur' type-id='447da2ae' 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='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_qos' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='27' column='1' id='e0a68fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4a3f5a61' 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='q' type-id='e7d2a5fc' 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='id' type-id='51cb492d' 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='next' type-id='c3a28778' 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='debugfs_dir' type-id='27675065' visibility='default' filepath='block/blk-rq-qos.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/rtmutex.h' line='30' column='1' id='dd823037'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rtmutex.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/rtmutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/rtmutex.h' line='33' 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='48' column='1' id='4b60fba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='51' 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='3a97b64f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='d315442e' 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='3f1a6b60' 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='8f048e17' 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='8f048e17' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='16dc656a' 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='8f048e17' 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='c216126b' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='throtl_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='87b18d2f'/>
+      <class-decl name='timerqueue_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='14' column='1' id='ff3c7f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/timerqueue.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='9127cd0e'/>
+      <class-decl name='tty_struct' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='290' column='1' id='4c8d9cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/tty.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ldisc_sem' type-id='d3aa38f0' visibility='default' filepath='include/linux/tty.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ldisc' type-id='e0bbd59c' visibility='default' filepath='include/linux/tty.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_write_lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='legacy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='throttle_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='termios_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='winsize_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ctrl_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flow_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='termios_locked' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='termiox' type-id='684d860d' visibility='default' filepath='include/linux/tty.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/tty.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='session' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='winsize' type-id='a818b7a0' visibility='default' filepath='include/linux/tty.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33'>
+          <var-decl name='flow_stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctrl_status' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='packet' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused_ctrl' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='receive_room' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='flow_change' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='link' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/tty.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='write_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='read_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='hangup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='disc_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='tty_files' type-id='72f469ec' visibility='default' filepath='include/linux/tty.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='closing' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='write_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='write_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='SAK_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='port' type-id='ec77b5b8' visibility='default' filepath='include/linux/tty.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='352' 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='e4d85780'/>
+      <class-decl name='upid' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='54' column='1' id='120c01b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pid.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/pid.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uprobe' is-struct='yes' visibility='default' is-declaration-only='yes' id='b7e0fed2'/>
+      <class-decl name='uprobes_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='101' column='1' id='6308a819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xol_area' type-id='3d15880e' visibility='default' filepath='include/linux/uprobes.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uts_namespace' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/utsname.h' line='24' column='1' id='44f52e9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/utsname.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='ee2746d3' visibility='default' filepath='include/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/utsname.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_area_struct' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='294' column='1' id='62c85860'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vm_next' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vm_prev' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vm_rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rb_subtree_gap' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vm_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm_types.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='cc072175' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='anon_vma_chain' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='anon_vma' type-id='a8f86cda' visibility='default' filepath='include/linux/mm_types.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/mm_types.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vm_pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vm_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swap_readahead_info' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vm_userfaultfd_ctx' type-id='fdd6214e' visibility='default' filepath='include/linux/mm_types.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='370' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__38' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1' id='2b31becf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autask' type-id='79aea64f' visibility='default' filepath='include/linux/uprobes.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__39' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1' id='46982a3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dup_xol_work' type-id='e3d8ce29' visibility='default' filepath='include/linux/uprobes.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dup_xol_addr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1' id='c60b207d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='si_signo' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='si_errno' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='si_code' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sifields' type-id='a60646cb' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='236' column='1' id='607bacb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keys' type-id='b58d1e12' visibility='default' filepath='include/linux/key.h' line='239' 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='535' column='1' id='dbb6a82c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='runnable_sum' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__35' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='e6cd5ecf' visibility='default' filepath='include/linux/seqlock.h' line='411' column='1' id='c87ee7e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='3a74ff0b' visibility='default' filepath='include/linux/seqlock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/seqlock.h' line='413' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='221' column='1' id='5b740cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len_desc' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b785b938' const='yes' id='c3619065'/>
+      <pointer-type-def type-id='e4664ea7' size-in-bits='64' id='1a0da7f7'/>
+      <pointer-type-def type-id='0e1f7cac' size-in-bits='64' id='90ad83aa'/>
+      <enum-decl name='blk_zoned_model' filepath='include/linux/blkdev.h' line='323' column='1' id='a48b5528'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ZONED_NONE' value='0'/>
+        <enumerator name='BLK_ZONED_HA' value='1'/>
+        <enumerator name='BLK_ZONED_HM' value='2'/>
+      </enum-decl>
+      <enum-decl name='irq_gc_flags' filepath='include/linux/irq.h' line='1064' column='1' id='7a1ec3b1'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='pm_qos_type' filepath='include/linux/pm_qos.h' line='54' column='1' id='1389f6b6'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='timespec_type' filepath='include/linux/restart_block.h' line='16' column='1' id='58918b27'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TT_NONE' value='0'/>
+        <enumerator name='TT_NATIVE' value='1'/>
+        <enumerator name='TT_COMPAT' value='2'/>
+      </enum-decl>
+      <enum-decl name='wb_reason' filepath='include/linux/backing-dev-defs.h' line='52' column='1' id='c1602c7a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_FOREIGN_FLUSH' value='8'/>
+        <enumerator name='WB_REASON_MAX' value='9'/>
+      </enum-decl>
+      <pointer-type-def type-id='b4b8adeb' size-in-bits='64' id='77e79a4b'/>
+      <pointer-type-def type-id='77e79a4b' size-in-bits='64' id='229806b3'/>
+      <pointer-type-def type-id='781993c9' size-in-bits='64' id='383471a1'/>
+      <pointer-type-def type-id='b6993efc' size-in-bits='64' id='08c8d0fa'/>
+      <pointer-type-def type-id='8d24b00b' size-in-bits='64' id='75e9503b'/>
+      <pointer-type-def type-id='2fa2db94' size-in-bits='64' id='5346c726'/>
+      <pointer-type-def type-id='5dcc12a3' size-in-bits='64' id='c3408547'/>
+      <array-type-def dimensions='1' type-id='e53d7a90' size-in-bits='infinite' id='a5527824'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='5d0f15d4' size-in-bits='64' id='122191b2'/>
+      <pointer-type-def type-id='a3119fea' size-in-bits='64' id='f3b4aca8'/>
+      <pointer-type-def type-id='47d6e76e' size-in-bits='64' id='7cc59444'/>
+      <pointer-type-def type-id='2e6f3990' size-in-bits='64' id='97851996'/>
+      <pointer-type-def type-id='413be38e' size-in-bits='64' id='4ec56f94'/>
+      <pointer-type-def type-id='770fc578' size-in-bits='64' id='cc546a3e'/>
+      <pointer-type-def type-id='7bd9942c' size-in-bits='64' id='47ed147a'/>
+      <pointer-type-def type-id='5a9929eb' size-in-bits='64' id='68a2d05b'/>
+      <pointer-type-def type-id='635c3685' size-in-bits='64' id='ea7fad85'/>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1280' id='aca5b9e5'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='ed7b7f6b' size-in-bits='64' id='903b12fe'/>
+      <pointer-type-def type-id='7263c471' size-in-bits='64' id='2bf16f59'/>
+      <pointer-type-def type-id='12aa8ce4' size-in-bits='64' id='2e97ceaf'/>
+      <pointer-type-def type-id='e205b6f1' size-in-bits='64' id='0906f5b9'/>
+      <pointer-type-def type-id='b440e872' size-in-bits='64' id='3ac36db0'/>
+      <pointer-type-def type-id='d5ee6a94' size-in-bits='64' id='6ed6b432'/>
+      <pointer-type-def type-id='158e8b98' size-in-bits='64' id='2a7b00f2'/>
+      <pointer-type-def type-id='5753d902' size-in-bits='64' id='c4b7e554'/>
+      <typedef-decl name='clockid_t' type-id='7eb128d4' filepath='include/linux/types.h' line='27' column='1' id='a1c3b834'/>
+      <typedef-decl name='congested_fn' type-id='dd42ab12' filepath='include/linux/backing-dev-defs.h' line='37' column='1' id='6e3695a3'/>
+      <typedef-decl name='dma_drain_needed_fn' type-id='59bb6212' filepath='include/linux/blkdev.h' line='302' column='1' id='0128515a'/>
+      <typedef-decl name='int32_t' type-id='a7832498' filepath='include/linux/types.h' line='103' column='1' id='3ff5601b'/>
+      <typedef-decl name='iommu_dev_fault_handler_t' type-id='6d118cd1' filepath='include/linux/iommu.h' line='57' column='1' id='a84f5b46'/>
+      <typedef-decl name='iommu_fault_handler_t' type-id='8e0d1900' filepath='include/linux/iommu.h' line='53' column='1' id='a01c3626'/>
+      <typedef-decl name='kernel_cap_t' type-id='923128a5' filepath='include/linux/capability.h' line='26' column='1' id='7496b151'/>
+      <pointer-type-def type-id='68d3e576' size-in-bits='64' id='7a6c9108'/>
+      <typedef-decl name='make_request_fn' type-id='f8561c55' filepath='include/linux/blkdev.h' line='299' column='1' id='99cd4891'/>
+      <typedef-decl name='mempool_t' type-id='5932767e' filepath='include/linux/mempool.h' line='26' column='1' id='2745fad8'/>
+      <typedef-decl name='mm_context_t' type-id='7319f51c' filepath='arch/arm64/include/asm/mmu.h' line='23' column='1' id='0eb9c3fd'/>
+      <typedef-decl name='uint32_t' type-id='19c2251e' filepath='include/linux/types.h' line='109' column='1' id='8f92235e'/>
+      <pointer-type-def type-id='19c2251e' size-in-bits='64' id='f9409001'/>
+      <union-decl name='key_payload' size-in-bits='256' visibility='default' filepath='include/linux/key.h' line='111' column='1' id='2888d74a'>
+        <data-member access='public'>
+          <var-decl name='rcu_data0' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='209ef23f' visibility='default' filepath='include/linux/key.h' line='113' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='95408dfc'>
+        <data-member access='public'>
+          <var-decl name='rmtp' type-id='59229509' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compat_rmtp' type-id='e69c040e' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='f47d5752'>
+        <data-member access='public'>
+          <var-decl name='_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='page_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='units' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='196' column='1'/>
+        </data-member>
+      </union-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='aa291214'>
+        <data-member access='public'>
+          <var-decl name='' type-id='9228d425' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='4877c7ec' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7d00e4f0' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='1c2d6ac7' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='ce8e16a4' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='b32fec8c' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='754ab6d5' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/mm_types.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='0a97cc35'>
+        <data-member access='public'>
+          <var-decl name='non_rcu' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/cred.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1' id='93944b10'>
+        <data-member access='public'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/backing-dev-defs.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='45660d72' size-in-bits='64' id='c79c9f4c'/>
+      <pointer-type-def type-id='0fae1622' size-in-bits='64' id='d44a8cec'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2944' id='d964a553'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <pointer-type-def type-id='8c178e22' size-in-bits='64' id='c0ced320'/>
+      <pointer-type-def type-id='19e88833' size-in-bits='64' id='549da823'/>
+      <pointer-type-def type-id='82e3e1cf' size-in-bits='64' id='d846ae3b'/>
+      <pointer-type-def type-id='47d2043e' size-in-bits='64' id='604374c8'/>
+      <pointer-type-def type-id='f67639d3' size-in-bits='64' id='7bca30b7'/>
+      <pointer-type-def type-id='f83bf2cd' size-in-bits='64' id='f13b7179'/>
+      <pointer-type-def type-id='1c0f29cf' size-in-bits='64' id='1c9e19fb'/>
+      <pointer-type-def type-id='24bb49a8' size-in-bits='64' id='54777a92'/>
+      <pointer-type-def type-id='ca7f7878' size-in-bits='64' id='9d640202'/>
+      <pointer-type-def type-id='5c155a71' size-in-bits='64' id='59229509'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='24' id='c216126b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='72' id='060772ed'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='14f332cc' size-in-bits='64' id='a8f86cda'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='256' id='b6b7435e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='b545ce08' size-in-bits='64' id='9d1360ce'/>
+      <pointer-type-def type-id='2ec4b2ae' size-in-bits='64' id='8213bb9f'/>
+      <pointer-type-def type-id='dfa886b2' size-in-bits='64' id='38b1e3a0'/>
+      <pointer-type-def type-id='40af3608' size-in-bits='64' id='cddcb53e'/>
+      <array-type-def dimensions='1' type-id='40af3608' size-in-bits='infinite' id='7289e834'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='479d017a' size-in-bits='64' id='5b559658'/>
+      <pointer-type-def type-id='70bf757e' size-in-bits='64' id='ceead144'/>
+      <array-type-def dimensions='1' type-id='a47d3467' size-in-bits='192' id='56ac7648'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='32406f0a' size-in-bits='384' id='ffbe012f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='0461ecf5' size-in-bits='64' id='c527e30d'/>
+      <pointer-type-def type-id='a3274c4b' size-in-bits='64' id='253d2bfb'/>
+      <pointer-type-def type-id='19b26952' size-in-bits='64' id='11bff950'/>
+      <array-type-def dimensions='1' type-id='3213e875' size-in-bits='320' id='f5665670'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='66f1e832' size-in-bits='64' id='aede2cf0'/>
+      <pointer-type-def type-id='a73d96cf' size-in-bits='64' id='d8e759a7'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='1024' id='e3204322'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='arch_uprobe_task' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/uprobes.h' line='21' column='1' id='79aea64f'/>
+      <class-decl name='assoc_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/assoc_array.h' line='22' column='1' id='b58d1e12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='815cf0d3' visibility='default' filepath='include/linux/assoc_array.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_leaves_on_tree' type-id='7359adad' visibility='default' filepath='include/linux/assoc_array.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bdi_writeback_congested' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='99' column='1' id='87886298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/backing-dev-defs.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_issue' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='114' column='1' id='a9b0f4f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_ll_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='39' column='1' id='85385c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keyslot_program' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='keyslot_evict' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='derive_raw_secret' type-id='9f82b8fd' visibility='default' filepath='include/linux/keyslot-manager.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_hw_ctx' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='15' column='1' id='e063028f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='87322991' 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='5ad6e0ef' visibility='default' filepath='include/linux/blk-mq.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/blk-mq.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='next_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='next_cpu_batch' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sched_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blk-mq.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ctx_map' type-id='6e051ed1' visibility='default' filepath='include/linux/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dispatch_from' type-id='9a335021' visibility='default' filepath='include/linux/blk-mq.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dispatch_busy' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2352'>
+          <var-decl name='nr_ctx' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ctxs' type-id='c9c70151' visibility='default' filepath='include/linux/blk-mq.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dispatch_wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dispatch_wait' type-id='fe794aa9' visibility='default' filepath='include/linux/blk-mq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='wait_index' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='queued' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='run' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='dispatched' type-id='346bc576' visibility='default' filepath='include/linux/blk-mq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='numa_node' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='queue_num' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='nr_active' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cpuhp_dead' type-id='03a4a074' visibility='default' filepath='include/linux/blk-mq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blk-mq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='poll_considered' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='poll_invoked' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='poll_success' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='srcu' type-id='6abca080' visibility='default' filepath='include/linux/blk-mq.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='146' column='1' id='b785b938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_rq' type-id='cf544519' visibility='default' filepath='include/linux/blk-mq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='commit_rqs' type-id='10b13b44' visibility='default' filepath='include/linux/blk-mq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_budget' type-id='9712eb54' visibility='default' filepath='include/linux/blk-mq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_budget' type-id='247cb56b' visibility='default' filepath='include/linux/blk-mq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout' type-id='23816d7d' visibility='default' filepath='include/linux/blk-mq.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='969a6bcd' visibility='default' filepath='include/linux/blk-mq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='681aaa17' visibility='default' filepath='include/linux/blk-mq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='init_hctx' type-id='e1f2504c' visibility='default' filepath='include/linux/blk-mq.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='exit_hctx' type-id='1fb247c2' visibility='default' filepath='include/linux/blk-mq.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_request' type-id='57e65d80' visibility='default' filepath='include/linux/blk-mq.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exit_request' type-id='9a2e43a6' visibility='default' filepath='include/linux/blk-mq.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='initialize_rq_fn' type-id='bbf015cd' visibility='default' filepath='include/linux/blk-mq.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cleanup_rq' type-id='ac8cd584' visibility='default' filepath='include/linux/blk-mq.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='busy' type-id='65c718a5' visibility='default' filepath='include/linux/blk-mq.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_queues' type-id='06a241cf' visibility='default' filepath='include/linux/blk-mq.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='show_rq' type-id='05a372cf' visibility='default' filepath='include/linux/blk-mq.h' line='222' 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='68' column='1' id='247d0323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_cnt' type-id='68a92070' visibility='default' filepath='include/linux/blk-cgroup.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='aux_cnt' type-id='39e531ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_memory' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='73' column='1' id='7c6af338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_offload_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22474385'/>
+      <class-decl name='bvec_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='24' column='1' id='9e0198d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_sector' type-id='a42536cd' visibility='default' filepath='include/linux/bvec.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_size' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bi_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_bvec_done' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='31' 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='280' column='1' id='cfd8587e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime' type-id='ad6873f4' visibility='default' filepath='include/linux/cgroup-defs.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_bpf' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='62' column='1' id='b80e3996'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='effective' type-id='47645c1d' visibility='default' filepath='include/linux/bpf-cgroup.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='progs' type-id='a835e1f5' visibility='default' filepath='include/linux/bpf-cgroup.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='flags' type-id='bd44dad8' visibility='default' filepath='include/linux/bpf-cgroup.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='inactive' type-id='380c7edc' visibility='default' filepath='include/linux/bpf-cgroup.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/bpf-cgroup.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf-cgroup.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_freezer_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='333' column='1' id='ad50988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freeze' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e_freeze' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_frozen_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_frozen_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='349' 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='630' column='1' id='1d115fd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css_alloc' type-id='a87691ee' visibility='default' filepath='include/linux/cgroup-defs.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='css_online' type-id='8bdbbb63' visibility='default' filepath='include/linux/cgroup-defs.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='css_offline' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='css_released' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='css_free' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='css_reset' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='css_rstat_flush' type-id='fe17c379' visibility='default' filepath='include/linux/cgroup-defs.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='css_extra_stat_show' type-id='f22a42d7' visibility='default' filepath='include/linux/cgroup-defs.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='can_attach' type-id='354bcec3' visibility='default' filepath='include/linux/cgroup-defs.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cancel_attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='post_attach' type-id='953b12f8' visibility='default' filepath='include/linux/cgroup-defs.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_fork' type-id='2c2624ea' visibility='default' filepath='include/linux/cgroup-defs.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cancel_fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bind' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='implicit_on_dfl' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='warned_broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='legacy_name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='css_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cfts' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dfl_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='legacy_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='depends_on' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='727' 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='378' column='1' id='0e1f7cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_threads' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dumper' type-id='f3d147c3' visibility='default' filepath='include/linux/mm_types.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='startup' type-id='f9fef04f' visibility='default' filepath='include/linux/mm_types.h' line='381' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_set' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='169' column='1' id='3fc3d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_seen' type-id='35e8c658' visibility='default' filepath='include/linux/sysctl.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dir' type-id='7c7d6006' visibility='default' filepath='include/linux/sysctl.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='962' column='1' id='b4b8adeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='8c8e2781' visibility='default' filepath='include/linux/fs.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_path' type-id='b5382ece' visibility='default' filepath='include/linux/fs.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_op' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='f_write_hint' type-id='0d20c3dd' visibility='default' filepath='include/linux/fs.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='f_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_pos_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='f_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='f_owner' type-id='6b640edd' visibility='default' filepath='include/linux/fs.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='f_cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='f_ra' type-id='b31f003f' visibility='default' filepath='include/linux/fs.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='f_version' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='f_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='f_ep_links' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='f_tfile_llink' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='f_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='f_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='f_sb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_oem_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1004' 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='25' column='1' id='781993c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ngroups' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='da6e2919' visibility='default' filepath='include/linux/cred.h' line='28' 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='8db0df1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d09d4bab' 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='e89ddc13' visibility='default' filepath='include/linux/list_bl.h' line='39' 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='216' column='1' id='8d24b00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/hrtimer.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_bases' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hres_active' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='in_hrtirq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='hang_detected' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='softirq_activated' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_events' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_retries' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='nr_hangs' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_hang_time' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='softirq_expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='softirq_next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clock_base' type-id='cb01bf4b' visibility='default' filepath='include/linux/hrtimer.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='923128a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='839e8989' visibility='default' filepath='include/linux/capability.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d0f15d4'/>
+      <class-decl name='kmem_cache' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='82' column='1' id='a3119fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_slab' type-id='75f3cc0b' visibility='default' filepath='include/linux/slub_def.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f7fe96cb' visibility='default' filepath='include/linux/slub_def.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_partial' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='object_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cpu_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='oo' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='allocflags' type-id='3eb7c31c' visibility='default' filepath='include/linux/slub_def.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/slub_def.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctor' type-id='b7f9d8e6' visibility='default' filepath='include/linux/slub_def.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='align' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='red_left_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/slub_def.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/slub_def.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/slub_def.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='kobj_remove_work' type-id='ef9025d0' visibility='default' filepath='include/linux/slub_def.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memcg_params' type-id='f36112b4' visibility='default' filepath='include/linux/slub_def.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='max_attr_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='memcg_kset' type-id='89b70200' visibility='default' filepath='include/linux/slub_def.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='random' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='random_seq' type-id='807869d3' visibility='default' filepath='include/linux/slub_def.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='node' type-id='425436e6' visibility='default' filepath='include/linux/slub_def.h' line='142' 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='2f8662b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c_iflag' type-id='241ce6f8' 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='241ce6f8' 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='241ce6f8' 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='241ce6f8' 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='fb7c6451' 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='8f04ba62' 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='6a8e8a14' 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='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='40' 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='134' column='1' id='d3aa38f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/tty_ldisc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/tty_ldisc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait_readers' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_ldisc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='102' column='1' id='47d6e76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lh' type-id='72f469ec' visibility='default' filepath='include/linux/binfmts.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/binfmts.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_binary' type-id='c5c535b4' visibility='default' filepath='include/linux/binfmts.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_shlib' type-id='4da4101d' visibility='default' filepath='include/linux/binfmts.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='core_dump' type-id='be2c124b' visibility='default' filepath='include/linux/binfmts.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_coredump' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='108' 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='60efdfd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d9c71193' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_per_node' size-in-bits='6336' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='117' column='1' id='2e6f3990'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/memcontrol.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lruvec_stat_local' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lruvec_stat_cpu' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lruvec_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/memcontrol.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='lru_zone_size' type-id='aa6663dd' visibility='default' filepath='include/linux/memcontrol.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='iter' type-id='d1982c82' visibility='default' filepath='include/linux/memcontrol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='shrinker_map' type-id='09f6e9a4' visibility='default' filepath='include/linux/memcontrol.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tree_node' type-id='2a8a6332' visibility='default' filepath='include/linux/memcontrol.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='usage_in_excess' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='on_tree' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6216'>
+          <var-decl name='congested' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/memcontrol.h' line='140' 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='150' column='1' id='413be38e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='current_threshold' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='31f1649b' visibility='default' filepath='include/linux/memcontrol.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mempool_s' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mempool.h' line='16' column='1' id='5932767e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='95e97e5e' 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='95e97e5e' 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='63e171df' 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='eaa32e2f' 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='8bf6d789' 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='a4c19f22' 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='b5ab048f' visibility='default' filepath='include/linux/mempool.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmu_notifier_mm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmu_notifier.h' line='56' column='1' id='770fc578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/mmu_notifier.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmu_notifier.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device' size-in-bits='19456' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1823' column='1' id='5a9929eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/netdevice.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ifalias' type-id='d81cf24c' visibility='default' filepath='include/linux/netdevice.h' line='1826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mem_end' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mem_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='base_addr' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='napi_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unreg_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='close_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ptype_all' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ptype_specific' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='adj_list' type-id='19245258' visibility='default' filepath='include/linux/netdevice.h' line='1854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='hw_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wanted_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vlan_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='hw_enc_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='mpls_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gso_partial_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='group' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='stats' type-id='a3566137' visibility='default' filepath='include/linux/netdevice.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='rx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='rx_nohandler' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='carrier_up_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='carrier_down_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='wireless_handlers' type-id='3e2bb973' visibility='default' filepath='include/linux/netdevice.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='wireless_data' type-id='e40f7bda' visibility='default' filepath='include/linux/netdevice.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='netdev_ops' type-id='a84ec761' visibility='default' filepath='include/linux/netdevice.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ethtool_ops' type-id='bdf901f8' visibility='default' filepath='include/linux/netdevice.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndisc_ops' type-id='a2e418a6' visibility='default' filepath='include/linux/netdevice.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='header_ops' type-id='2d747e78' visibility='default' filepath='include/linux/netdevice.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='priv_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='gflags' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4368'>
+          <var-decl name='padded' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='operstate' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='link_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='if_port' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4408'>
+          <var-decl name='dma' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='min_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='max_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4528'>
+          <var-decl name='hard_header_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='min_header_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4560'>
+          <var-decl name='needed_headroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='needed_tailroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='perm_addr' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4848'>
+          <var-decl name='addr_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4856'>
+          <var-decl name='addr_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='upper_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4872'>
+          <var-decl name='lower_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4880'>
+          <var-decl name='neigh_priv_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='dev_id' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4912'>
+          <var-decl name='dev_port' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='addr_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='name_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4968'>
+          <var-decl name='uc_promisc' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='uc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='mc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dev_addrs' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='queues_kset' type-id='89b70200' visibility='default' filepath='include/linux/netdevice.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='promiscuity' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='allmulti' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tipc_ptr' type-id='eeaf504d' visibility='default' filepath='include/linux/netdevice.h' line='1959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip_ptr' type-id='fc6f14a9' visibility='default' filepath='include/linux/netdevice.h' line='1964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='ip6_ptr' type-id='f026b16b' visibility='default' filepath='include/linux/netdevice.h' line='1968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='ieee80211_ptr' type-id='63c7e8e1' visibility='default' filepath='include/linux/netdevice.h' line='1972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='ieee802154_ptr' type-id='165146ad' visibility='default' filepath='include/linux/netdevice.h' line='1973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='dev_addr' type-id='cf536864' visibility='default' filepath='include/linux/netdevice.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='_rx' type-id='31094274' visibility='default' filepath='include/linux/netdevice.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='real_num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='xdp_prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/netdevice.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='gro_flush_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='rx_handler' type-id='da1cb816' visibility='default' filepath='include/linux/netdevice.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='rx_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='miniq_ingress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='ingress_queue' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='nf_hooks_ingress' type-id='39a43b40' visibility='default' filepath='include/linux/netdevice.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='broadcast' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='rx_cpu_rmap' type-id='52baee64' visibility='default' filepath='include/linux/netdevice.h' line='2003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='index_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='2005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='_tx' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='2010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='real_num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='qdisc_hash' type-id='ccfd385f' visibility='default' filepath='include/linux/netdevice.h' line='2015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_queue_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='tx_global_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='watchdog_timeo' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='xps_cpus_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='xps_rxqs_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='miniq_egress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='watchdog_timer' type-id='abe41e67' visibility='default' filepath='include/linux/netdevice.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='pcpu_refcnt' type-id='7292109c' visibility='default' filepath='include/linux/netdevice.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='todo_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='link_watch_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg_state' type-id='08f5ca17' visibility='default' filepath='include/linux/netdevice.h' line='2043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9480'>
+          <var-decl name='dismantle' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rtnl_link_state' type-id='08f5ca18' visibility='default' filepath='include/linux/netdevice.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='needs_free_netdev' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='priv_destructor' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='2053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='nd_net' type-id='c9df1e6c' visibility='default' filepath='include/linux/netdevice.h' line='2059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='ml_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='2062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='ml_priv_type' type-id='9c6bf017' visibility='default' filepath='include/linux/netdevice.h' line='2063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='' type-id='ca29cb68' visibility='default' filepath='include/linux/netdevice.h' line='2065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/netdevice.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='sysfs_groups' type-id='db1b7234' visibility='default' filepath='include/linux/netdevice.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17600'>
+          <var-decl name='sysfs_rx_queue_group' type-id='8ff9530e' visibility='default' filepath='include/linux/netdevice.h' line='2080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17664'>
+          <var-decl name='rtnl_link_ops' type-id='999c8d90' visibility='default' filepath='include/linux/netdevice.h' line='2082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17760'>
+          <var-decl name='gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='2088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17776'>
+          <var-decl name='num_tc' type-id='9b7e9486' visibility='default' filepath='include/linux/netdevice.h' line='2093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17792'>
+          <var-decl name='tc_to_txq' type-id='b5839634' visibility='default' filepath='include/linux/netdevice.h' line='2094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='prio_tc_map' type-id='0d8415b5' visibility='default' filepath='include/linux/netdevice.h' line='2095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='phydev' type-id='7efbcaaf' visibility='default' filepath='include/linux/netdevice.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='sfp_bus' type-id='6daf6abd' visibility='default' filepath='include/linux/netdevice.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_tx_busylock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_running_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_xmit_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='addr_list_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='proto_down' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='wol_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_can' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/netns/can.h' line='16' column='1' id='8f9898ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_version' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pde_stats' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_reset_stats' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_rcvlist_all' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pde_rcvlist_fil' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pde_rcvlist_inv' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pde_rcvlist_sff' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pde_rcvlist_eff' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pde_rcvlist_err' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bcmproc_dir' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_alldev_list' type-id='d180faa7' visibility='default' filepath='include/net/netns/can.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcvlists_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/can.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stattimer' type-id='abe41e67' visibility='default' filepath='include/net/netns/can.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pkg_stats' type-id='daf2ec26' visibility='default' filepath='include/net/netns/can.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcv_lists_stats' type-id='8981c393' visibility='default' filepath='include/net/netns/can.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cgw_list' type-id='e151255a' visibility='default' filepath='include/net/netns/can.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/can.h' line='41' 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='7436aa2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' 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='95e97e5e' 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='7292109c' 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='a06a810d' visibility='default' filepath='include/net/netns/core.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ct' size-in-bits='3328' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='95' column='1' id='2a831eeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/net/netns/conntrack.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='expect_count' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ecache_dwork' type-id='5ad6e0ef' visibility='default' filepath='include/net/netns/conntrack.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ecache_dwork_pending' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='auto_assign_helper_warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sysctl_log_invalid' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sysctl_events' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sysctl_acct' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sysctl_auto_assign_helper' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctl_tstamp' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='sysctl_checksum' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pcpu_lists' type-id='b2bcb5d9' visibility='default' filepath='include/net/netns/conntrack.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stat' type-id='e46089fd' visibility='default' filepath='include/net/netns/conntrack.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nf_conntrack_event_cb' type-id='2db792b9' visibility='default' filepath='include/net/netns/conntrack.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nf_expect_event_cb' type-id='bb6de7e1' visibility='default' filepath='include/net/netns/conntrack.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='nf_ct_proto' type-id='7f3015f3' visibility='default' filepath='include/net/netns/conntrack.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv4' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='44' column='1' id='dba1641f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forw_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipv4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devconf_all' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devconf_dflt' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ra_chain' type-id='00c4cbac' visibility='default' filepath='include/net/netns/ipv4.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ra_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/ipv4.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv4.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fib_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fib_main' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fib_default' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_has_custom_local_routes' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv4.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fib_offload_disabled' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fibnl' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv4.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='tcp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv4.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='iptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iptable_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iptable_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='iptable_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nat_table' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sysctl_icmp_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sysctl_icmp_echo_ignore_broadcasts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysctl_icmp_ignore_bogus_error_responses' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sysctl_icmp_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_icmp_ratemask' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sysctl_icmp_errors_use_inbound_ifaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ip_local_ports' type-id='93d4ab27' visibility='default' filepath='include/net/netns/ipv4.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_tcp_ecn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sysctl_tcp_ecn_fallback' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='sysctl_ip_default_ttl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sysctl_ip_no_pmtu_disc' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sysctl_ip_fwd_use_pmtu' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sysctl_ip_fwd_update_priority' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sysctl_ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sysctl_ip_dynaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sysctl_ip_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sysctl_tcp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sysctl_udp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sysctl_fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='sysctl_tcp_fwmark_accept' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sysctl_tcp_mtu_probing' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='sysctl_tcp_mtu_probe_floor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sysctl_tcp_base_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='sysctl_tcp_min_snd_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sysctl_tcp_probe_threshold' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='sysctl_tcp_probe_interval' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv4.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_tcp_keepalive_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_tcp_keepalive_probes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_tcp_keepalive_intvl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_tcp_syn_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_tcp_synack_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sysctl_tcp_syncookies' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sysctl_tcp_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sysctl_tcp_retries1' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sysctl_tcp_retries2' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='sysctl_tcp_orphan_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sysctl_tcp_fin_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='sysctl_tcp_notsent_lowat' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='sysctl_tcp_tw_reuse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='sysctl_tcp_sack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysctl_tcp_window_scaling' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='sysctl_tcp_timestamps' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='sysctl_tcp_early_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='sysctl_tcp_recovery' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sysctl_tcp_thin_linear_timeouts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='sysctl_tcp_slow_start_after_idle' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='sysctl_tcp_retrans_collapse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='sysctl_tcp_stdurg' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='sysctl_tcp_rfc1337' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='sysctl_tcp_abort_on_overflow' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sysctl_tcp_fack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sysctl_tcp_max_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sysctl_tcp_dsack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='sysctl_tcp_app_win' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sysctl_tcp_adv_win_scale' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='sysctl_tcp_frto' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sysctl_tcp_nometrics_save' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='sysctl_tcp_moderate_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctl_tcp_tso_win_divisor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='sysctl_tcp_workaround_signed_windows' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sysctl_tcp_limit_output_bytes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='sysctl_tcp_challenge_ack_limit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sysctl_tcp_min_tso_segs' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='sysctl_tcp_min_rtt_wlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sysctl_tcp_autocorking' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='sysctl_tcp_invalid_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sysctl_tcp_pacing_ss_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sysctl_tcp_pacing_ca_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sysctl_tcp_wmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sysctl_tcp_rmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sysctl_tcp_comp_sack_nr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sysctl_tcp_comp_sack_delay_ns' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tcp_death_row' type-id='af2c6a56' visibility='default' filepath='include/net/netns/ipv4.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sysctl_max_syn_backlog' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='sysctl_tcp_fastopen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tcp_congestion_control' type-id='b3ef56ee' visibility='default' filepath='include/net/netns/ipv4.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='tcp_fastopen_ctx' type-id='104fa32f' visibility='default' filepath='include/net/netns/ipv4.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tcp_fastopen_ctx_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv4.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='sysctl_tcp_fastopen_blackhole_timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tfo_active_disable_times' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tfo_active_disable_stamp' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sysctl_udp_wmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sysctl_udp_rmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='sysctl_igmp_max_memberships' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sysctl_igmp_max_msf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sysctl_igmp_llm_reports' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='sysctl_igmp_qrv' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ping_group_range' type-id='89d35c53' visibility='default' filepath='include/net/netns/ipv4.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sysctl_local_reserved_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='sysctl_local_unbindable_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='sysctl_ip_prot_sock' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ipmr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='rt_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='ip_id_key' type-id='7799da43' visibility='default' filepath='include/net/netns/ipv4.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/ipv4.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv6' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='57' column='1' id='dda16745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='6c13064a' visibility='default' filepath='include/net/netns/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='devconf_all' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='devconf_dflt' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ip6table_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ip6table_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ip6table_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ip6table_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ip6table_nat' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='fib6_null_entry' type-id='fe454a75' visibility='default' filepath='include/net/netns/ipv6.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ip6_null_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rt6_stats' type-id='aca8a113' visibility='default' filepath='include/net/netns/ipv6.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ip6_fib_timer' type-id='abe41e67' visibility='default' filepath='include/net/netns/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='fib6_main_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='fib6_walkers' type-id='72f469ec' visibility='default' filepath='include/net/netns/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ip6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/ipv6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fib6_walker_lock' type-id='ac16795b' visibility='default' filepath='include/net/netns/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='fib6_gc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='ip6_rt_gc_expire' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='ip6_rt_last_gc' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='fib6_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='fib6_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ip6_prohibit_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ip6_blk_hole_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='fib6_local_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='fib6_rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv6.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='ndisc_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='tcp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='igmp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='fib6_sernum' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='seg6_data' type-id='15b8a3be' visibility='default' filepath='include/net/netns/ipv6.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='ip6mr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip6addrlbl_table' type-id='a03c964b' visibility='default' filepath='include/net/netns/ipv6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/ipv6.h' line='117' 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='870ef624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcp_statistics' type-id='19a26ee3' 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='30897c4e' 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='016811bc' 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='d1440a9f' 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='d1440a9f' 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='c085a9fb' 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='0296b670' 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='d077e928' 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='d1440a9f' 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='d1440a9f' 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='30897c4e' 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='1a16368f' 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='bf0465ec' 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='f43a2d4c' visibility='default' filepath='include/net/netns/mib.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nexthop' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/nexthop.h' line='11' column='1' id='03364088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/netns/nexthop.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devhash' type-id='030d0b18' visibility='default' filepath='include/net/netns/nexthop.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/nexthop.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_id_allocated' type-id='19c2251e' visibility='default' filepath='include/net/netns/nexthop.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/net/netns/netfilter.h' line='12' column='1' id='0a6298e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_netfilter' type-id='d077e928' visibility='default' filepath='include/net/netns/netfilter.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_handler' type-id='67f12fe3' visibility='default' filepath='include/net/netns/netfilter.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nf_loggers' type-id='e521ce61' visibility='default' filepath='include/net/netns/netfilter.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nf_log_dir_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/netfilter.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hooks_ipv4' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hooks_ipv6' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hooks_arp' type-id='d82cf371' visibility='default' filepath='include/net/netns/netfilter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='defrag_ipv4' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='defrag_ipv6' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/netfilter.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf_frag' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='121' column='1' id='ebd39a5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='122' 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='49d7aa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sklist_lock' type-id='925167dc' 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='e151255a' 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='6e306fde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_max_dgram_qlen' type-id='95e97e5e' 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='11b101bb' visibility='default' filepath='include/net/netns/unix.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xdp' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/xdp.h' line='8' column='1' id='a2b0ef48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/netns/xdp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/net/netns/xdp.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xfrm' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='33' column='1' id='3d2d291b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_bydst' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_bysrc' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state_byspi' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='state_num' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_hash_work' type-id='ef9025d0' 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_all' type-id='72f469ec' 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_byidx' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='policy_idx_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy_inexact' type-id='fc293b5f' visibility='default' filepath='include/net/netns/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='policy_bydst' type-id='bd1ec77b' visibility='default' filepath='include/net/netns/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='policy_count' type-id='0d5c291d' visibility='default' filepath='include/net/netns/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='policy_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='policy_hthresh' type-id='52aaaba4' visibility='default' filepath='include/net/netns/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='inexact_bins' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='nlsk' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='nlsk_stash' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_aevent_etime' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_aevent_rseqth' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_larval_drop' type-id='95e97e5e' visibility='default' filepath='include/net/netns/xfrm.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_acq_expires' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='xfrm4_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='xfrm6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='xfrm_state_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='xfrm_state_hash_generation' type-id='e14c3b11' visibility='default' filepath='include/net/netns/xfrm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='xfrm_policy_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='xfrm_cfg_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/xfrm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/xfrm.h' line='82' 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='288fe7b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tables' type-id='5e747b58' 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='b50a4934' 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='b50a4934' visibility='default' filepath='include/net/netns/x_tables.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='ee2746d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysname' type-id='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='31' 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='99f367f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stashed' type-id='f22a8abb' 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='4598bd2d' 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='f0981eeb' visibility='default' filepath='include/linux/ns_common.h' line='10' 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='b92c8d0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='9b7c55ef' 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='72f469ec' 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='9f2cce4b' visibility='default' filepath='include/linux/percpu_counter.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='575' column='1' id='7263c471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sibling_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='2a8a6332' visibility='default' filepath='include/linux/perf_event.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='group_index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='migrate_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hlist_entry' type-id='03a4a074' visibility='default' filepath='include/linux/perf_event.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='active_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_siblings' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='event_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='group_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_leader' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pmu_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='state' type-id='31fdb95a' visibility='default' filepath='include/linux/perf_event.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='attach_state' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_count' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='total_time_enabled' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='total_time_running' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tstamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='shadow_ctx_time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attr' type-id='e57536d9' visibility='default' filepath='include/linux/perf_event.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='id_header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='read_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hw' type-id='b594b0c9' visibility='default' filepath='include/linux/perf_event.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/perf_event.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='child_total_time_enabled' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='child_total_time_running' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='child_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='child_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='parent' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='owner_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='mmap_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='rb' type-id='8462bc54' visibility='default' filepath='include/linux/perf_event.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='rcu_batches' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='rcu_pending' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/perf_event.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/perf_event.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='pending_wakeup' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='pending_kill' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pending_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='pending' type-id='9281c70f' visibility='default' filepath='include/linux/perf_event.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='event_limit' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='addr_filters' type-id='54885433' visibility='default' filepath='include/linux/perf_event.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr_filter_ranges' type-id='200ffa89' visibility='default' filepath='include/linux/perf_event.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='aux_event' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='destroy' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/perf_event.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='clock' type-id='0e70db3e' visibility='default' filepath='include/linux/perf_event.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='overflow_handler_context' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='orig_overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/perf_event.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tp_event' type-id='23d6768c' visibility='default' filepath='include/linux/perf_event.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/perf_event.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='728' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pmu' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='255' column='1' id='e205b6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/perf_event.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/perf_event.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attr_update' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/perf_event.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pmu_disable_count' type-id='7292109c' visibility='default' filepath='include/linux/perf_event.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pmu_cpu_context' type-id='090503c3' visibility='default' filepath='include/linux/perf_event.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exclusive_cnt' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='task_ctx_nr' type-id='95e97e5e' 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='hrtimer_interval_ms' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='nr_addr_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pmu_enable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pmu_disable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_init' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_mapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event_unmapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='add' type-id='afc38bc6' visibility='default' filepath='include/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='del' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='stop' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='read' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_txn' type-id='f865774a' visibility='default' filepath='include/linux/perf_event.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='commit_txn' type-id='0cd76695' visibility='default' filepath='include/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cancel_txn' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_idx' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sched_task' type-id='54df184d' visibility='default' filepath='include/linux/perf_event.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='task_ctx_size' type-id='b59d7dce' visibility='default' filepath='include/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='setup_aux' type-id='e91cc304' visibility='default' filepath='include/linux/perf_event.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='include/linux/perf_event.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='addr_filters_validate' type-id='6668d13a' visibility='default' filepath='include/linux/perf_event.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='addr_filters_sync' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='aux_output_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='filter_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='check_period' type-id='36f91979' visibility='default' filepath='include/linux/perf_event.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='36' column='1' id='b440e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='events' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='revents' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='128' column='1' id='12878ab3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='avgs_lock' type-id='925167dc' 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='9dc40234' 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='64af1365' 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='91ce1af9' 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='91ce1af9' 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='5ad6e0ef' visibility='default' filepath='include/linux/psi_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='total' type-id='a4295685' visibility='default' filepath='include/linux/psi_types.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='avg' type-id='625e8699' visibility='default' filepath='include/linux/psi_types.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='poll_task' type-id='f23e2572' visibility='default' filepath='include/linux/psi_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='poll_timer' type-id='abe41e67' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='poll_wakeup' type-id='49178f86' visibility='default' filepath='include/linux/psi_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='trigger_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='nr_triggers' type-id='586ea944' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='poll_states' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='poll_min_period' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='polling_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='polling_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='polling_until' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='165' 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='48' column='1' id='02244303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c047989c' visibility='default' filepath='include/linux/dcache.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/linux/dcache.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq' size-in-bits='25600' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='871' column='1' id='d5ee6a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_blocked_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_blocked_load' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nohz_tick_stopped' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nohz_flags' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_load_updates' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_switches' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uclamp' type-id='cf2a9adf' visibility='default' filepath='kernel/sched/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uclamp_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cfs' type-id='feeb4c2f' visibility='default' filepath='kernel/sched/sched.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='rt' type-id='e648d771' visibility='default' filepath='kernel/sched/sched.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='dl' type-id='53d038df' visibility='default' filepath='kernel/sched/sched.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='tmp_alone_branch' type-id='e84b031a' visibility='default' filepath='kernel/sched/sched.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='nr_uninterruptible' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='curr' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='idle' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='stop' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='next_balance' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='prev_mm' type-id='df4b7819' visibility='default' filepath='kernel/sched/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='clock_task' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='clock_pelt' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='lost_idle_time' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_iowait' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='membarrier_state' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='rd' type-id='c13bca88' visibility='default' filepath='kernel/sched/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='sd' type-id='e9d32201' visibility='default' filepath='kernel/sched/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='cpu_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='cpu_capacity_orig' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='balance_callback' type-id='69c138b1' visibility='default' filepath='kernel/sched/sched.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='idle_balance' type-id='002ac4a6' visibility='default' filepath='kernel/sched/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='misfit_task_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='active_balance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20704'>
+          <var-decl name='push_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_balance_work' type-id='8eb07132' visibility='default' filepath='kernel/sched/sched.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21088'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='cfs_tasks' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_rt' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='avg_dl' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='avg_irq' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23040'>
+          <var-decl name='idle_stamp' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23104'>
+          <var-decl name='avg_idle' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23168'>
+          <var-decl name='max_idle_balance_cost' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23232'>
+          <var-decl name='prev_irq_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23296'>
+          <var-decl name='prev_steal_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23360'>
+          <var-decl name='calc_load_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23424'>
+          <var-decl name='calc_load_active' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23488'>
+          <var-decl name='hrtick_csd_pending' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='hrtick_csd' type-id='223a68bd' visibility='default' filepath='kernel/sched/sched.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='hrtick_timer' type-id='b6993efc' visibility='default' filepath='kernel/sched/sched.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='hrtick_time' type-id='fbc017ef' visibility='default' filepath='kernel/sched/sched.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24448'>
+          <var-decl name='rq_sched_info' type-id='59ddd03d' visibility='default' filepath='kernel/sched/sched.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24704'>
+          <var-decl name='rq_cpu_time' type-id='3a47d82b' visibility='default' filepath='kernel/sched/sched.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24768'>
+          <var-decl name='yld_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24800'>
+          <var-decl name='sched_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24832'>
+          <var-decl name='sched_goidle' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24864'>
+          <var-decl name='ttwu_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='ttwu_local' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='wake_list' type-id='77df194e' visibility='default' filepath='kernel/sched/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='idle_state' type-id='2e3e746d' visibility='default' filepath='kernel/sched/sched.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25216'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25280'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1031' 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='35' column='1' id='fe391c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_handler' type-id='8cdd9566' visibility='default' filepath='include/linux/signal_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sa_flags' type-id='7359adad' visibility='default' filepath='include/linux/signal_types.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_restorer' type-id='81564178' visibility='default' filepath='include/linux/signal_types.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sa_mask' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='291' column='1' id='e61c85d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/skbuff.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='56' column='1' id='8c178e22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='projid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/user_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parent' type-id='c0ced320' visibility='default' filepath='include/linux/user_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='owner' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='group' type-id='094d8048' visibility='default' filepath='include/linux/user_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/user_namespace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/user_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='keyring_name_list' type-id='72f469ec' visibility='default' filepath='include/linux/user_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='user_keyring_register' type-id='204a4632' visibility='default' filepath='include/linux/user_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='keyring_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/user_namespace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/user_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set' type-id='3fc3d262' visibility='default' filepath='include/linux/user_namespace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctls' type-id='11b101bb' visibility='default' filepath='include/linux/user_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/user_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ucount_max' type-id='e415235d' visibility='default' filepath='include/linux/user_namespace.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vfsmount' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='69' column='1' id='19e88833'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt_root' type-id='27675065' visibility='default' filepath='include/linux/mount.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mnt_sb' type-id='42c8f564' visibility='default' filepath='include/linux/mount.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mnt_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mount.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_userfaultfd_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='280' column='1' id='fdd6214e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d25db30' visibility='default' filepath='include/linux/mm_types.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_completion' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='72' column='1' id='9eb3e00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='49178f86' visibility='default' filepath='include/linux/backing-dev-defs.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='03d48e96' visibility='default' filepath='include/linux/backing-dev-defs.h' line='74' 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='a818b7a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ws_row' type-id='8efea9e5' 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='8efea9e5' 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='8efea9e5' 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='8efea9e5' visibility='default' filepath='include/uapi/asm-generic/termios.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__31' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='0eb9c3fd' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='19' column='1' id='7319f51c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='28ee064c' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vdso' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='754ab6d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgmap' type-id='b1a5e68a' visibility='default' filepath='include/linux/mm_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_device_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='9228d425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='72f469ec' 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='f57039f0' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='block/blk-mq.h' line='19' column='1' id='e9e9d685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/blk-mq.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rq_lists' type-id='e8ef2bd5' visibility='default' filepath='block/blk-mq.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='7d00e4f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c06bf9dd' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/mm_types.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='freelist' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='77c8e02e' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__28' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1' id='ce8e16a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_compound_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_compound_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deferred_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__29' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='b32fec8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pt_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmd_huge_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_pt_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='787e8237' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ptl' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__27' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1' id='1c2d6ac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compound_head' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compound_dtor' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='compound_order' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='compound_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='4877c7ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dma_addr' type-id='f05e8e77' visibility='default' filepath='include/linux/mm_types.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4e65adfa' size-in-bits='64' id='3a109e70'/>
+      <qualified-type-def type-id='ebd46aa4' const='yes' id='e4664ea7'/>
+      <pointer-type-def type-id='1d22df6b' size-in-bits='64' id='1ee57353'/>
+      <pointer-type-def type-id='2153cf5d' size-in-bits='64' id='edef9855'/>
+      <pointer-type-def type-id='559d6206' size-in-bits='64' id='f2c18b44'/>
+      <pointer-type-def type-id='92e9b57c' size-in-bits='64' id='9be87662'/>
+      <pointer-type-def type-id='ed51618b' size-in-bits='64' id='11b101bb'/>
+      <pointer-type-def type-id='2731de48' size-in-bits='64' id='4a89adae'/>
+      <enum-decl name='bpf_map_type' filepath='include/uapi/linux/bpf.h' line='112' column='1' id='da8f27ee'>
+        <underlying-type type-id='9cac1fee'/>
+        <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'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE' value='21'/>
+        <enumerator name='BPF_MAP_TYPE_QUEUE' value='22'/>
+        <enumerator name='BPF_MAP_TYPE_STACK' value='23'/>
+        <enumerator name='BPF_MAP_TYPE_SK_STORAGE' value='24'/>
+        <enumerator name='BPF_MAP_TYPE_DEVMAP_HASH' value='25'/>
+      </enum-decl>
+      <enum-decl name='dev_pm_qos_req_type' filepath='include/linux/pm_qos.h' line='103' column='1' id='c47ba023'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PM_QOS_RESUME_LATENCY' value='1'/>
+        <enumerator name='DEV_PM_QOS_LATENCY_TOLERANCE' value='2'/>
+        <enumerator name='DEV_PM_QOS_MIN_FREQUENCY' value='3'/>
+        <enumerator name='DEV_PM_QOS_MAX_FREQUENCY' value='4'/>
+        <enumerator name='DEV_PM_QOS_FLAGS' value='5'/>
+      </enum-decl>
+      <enum-decl name='kobj_ns_type' filepath='include/linux/kobject_ns.h' line='26' column='1' id='52127d59'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='mq_rq_state' filepath='include/linux/blkdev.h' line='122' column='1' id='4df77f20'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-decl>
+      <enum-decl name='rq_qos_id' filepath='block/blk-rq-qos.h' line='16' column='1' id='51cb492d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RQ_QOS_WBT' value='0'/>
+        <enumerator name='RQ_QOS_LATENCY' value='1'/>
+        <enumerator name='RQ_QOS_COST' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='d4693377' size-in-bits='64' id='e9910ceb'/>
+      <pointer-type-def type-id='cbab5390' size-in-bits='64' id='c297681a'/>
+      <pointer-type-def type-id='34e265cf' size-in-bits='64' id='900dcb03'/>
+      <pointer-type-def type-id='8f5d4d00' size-in-bits='64' id='e3a3f61a'/>
+      <pointer-type-def type-id='4f60ffbc' size-in-bits='64' id='33c599da'/>
+      <pointer-type-def type-id='2473bc1f' size-in-bits='64' id='84dc82b7'/>
+      <pointer-type-def type-id='fe070fe8' size-in-bits='64' id='7e666abe'/>
+      <pointer-type-def type-id='87461f69' size-in-bits='64' id='eddbe2ad'/>
+      <pointer-type-def type-id='bde8b845' size-in-bits='64' id='841b4311'/>
+      <pointer-type-def type-id='2a123bf1' size-in-bits='64' id='4324a0e5'/>
+      <pointer-type-def type-id='630a7fa4' size-in-bits='64' id='15f6292e'/>
+      <pointer-type-def type-id='00631170' size-in-bits='64' id='5eff49b2'/>
+      <pointer-type-def type-id='41d25fad' size-in-bits='64' id='bde527e9'/>
+      <pointer-type-def type-id='03278979' size-in-bits='64' id='484cd9e5'/>
+      <pointer-type-def type-id='46816f8f' size-in-bits='64' id='5a1281ab'/>
+      <pointer-type-def type-id='984b30c5' size-in-bits='64' id='1ff48951'/>
+      <pointer-type-def type-id='0ebe5367' size-in-bits='64' id='7fc43753'/>
+      <pointer-type-def type-id='0ef3e0fd' size-in-bits='64' id='21e9ca19'/>
+      <pointer-type-def type-id='bdb68106' size-in-bits='64' id='8e0d1900'/>
+      <pointer-type-def type-id='f11f5d07' size-in-bits='64' id='fe396a7b'/>
+      <pointer-type-def type-id='99373687' size-in-bits='64' id='7f31e8fb'/>
+      <pointer-type-def type-id='c619ce98' size-in-bits='64' id='2371b41a'/>
+      <pointer-type-def type-id='9bb659f5' size-in-bits='64' id='6d118cd1'/>
+      <pointer-type-def type-id='dab705c1' size-in-bits='64' id='4ded61d5'/>
+      <pointer-type-def type-id='8ab70c7a' size-in-bits='64' id='7881e15c'/>
+      <pointer-type-def type-id='3de312fc' size-in-bits='64' id='f1c95c76'/>
+      <pointer-type-def type-id='dea13b10' size-in-bits='64' id='7ad47ca2'/>
+      <pointer-type-def type-id='a5eadeee' size-in-bits='64' id='e1759090'/>
+      <pointer-type-def type-id='a2ef4917' size-in-bits='64' id='bbe45043'/>
+      <pointer-type-def type-id='7e765fce' size-in-bits='64' id='8a2b0cc8'/>
+      <pointer-type-def type-id='1d6846fa' size-in-bits='64' id='0871ecbc'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='infinite' id='1fdc7fa6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='78536370' size-in-bits='64' id='2908e93a'/>
+      <pointer-type-def type-id='834d1a2b' size-in-bits='64' id='5448fdd7'/>
+      <pointer-type-def type-id='a2dba6b8' size-in-bits='64' id='925b860a'/>
+      <pointer-type-def type-id='bb06f572' size-in-bits='64' id='e53d7a90'/>
+      <pointer-type-def type-id='3173bc57' size-in-bits='64' id='fce14c5f'/>
+      <pointer-type-def type-id='71e87d49' size-in-bits='64' id='d0a699d1'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='256' id='e4f16420'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2432' id='4f05d88f'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <pointer-type-def type-id='8e5f5512' size-in-bits='64' id='871fd930'/>
+      <pointer-type-def type-id='f4b65c68' size-in-bits='64' id='e69c040e'/>
+      <pointer-type-def type-id='fe4ffa7a' size-in-bits='64' id='d077e928'/>
+      <pointer-type-def type-id='537d88b1' size-in-bits='64' id='5afdaa66'/>
+      <pointer-type-def type-id='59969f99' size-in-bits='64' id='4a3f5a61'/>
+      <pointer-type-def type-id='a240f41d' size-in-bits='64' id='f772df6d'/>
+      <pointer-type-def type-id='bc39a8be' size-in-bits='64' id='42c8f564'/>
+      <pointer-type-def type-id='b855e40d' size-in-bits='64' id='684d860d'/>
+      <pointer-type-def type-id='9b27c78b' size-in-bits='64' id='c2b4b27b'/>
+      <pointer-type-def type-id='f87db0b6' size-in-bits='64' id='e0bbd59c'/>
+      <pointer-type-def type-id='7e1e521a' size-in-bits='64' id='ec77b5b8'/>
+      <typedef-decl name='__kernel_clockid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='93' column='1' id='7eb128d4'/>
+      <typedef-decl name='__uint128_t' type-id='4f340252' filepath='init/version.c' line='27' column='1' id='7e2609cc'/>
+      <typedef-decl name='blk_status_t' type-id='f9b06939' filepath='include/linux/blk_types.h' line='31' column='1' id='f4e2facd'/>
+      <pointer-type-def type-id='3273164b' size-in-bits='64' id='d4ae3f3f'/>
+      <pointer-type-def type-id='f611d028' size-in-bits='64' id='e4913062'/>
+      <pointer-type-def type-id='19bf080d' size-in-bits='64' id='a9ee1319'/>
+      <pointer-type-def type-id='24f3731d' size-in-bits='64' id='6981b6e9'/>
+      <pointer-type-def type-id='b3bc5b3a' size-in-bits='64' id='fd03a8f4'/>
+      <pointer-type-def type-id='53143c97' size-in-bits='64' id='6ee36fa3'/>
+      <typedef-decl name='dma_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='148' column='1' id='cf29c9b3'/>
+      <typedef-decl name='kernel_ulong_t' type-id='7359adad' filepath='include/linux/mod_devicetable.h' line='14' column='1' id='0791d6c8'/>
+      <typedef-decl name='key_restrict_link_func_t' type-id='a5786cbb' filepath='include/linux/key.h' line='148' column='1' id='f87a5fab'/>
+      <typedef-decl name='notifier_fn_t' type-id='38a7cb79' filepath='include/linux/notifier.h' line='51' column='1' id='0ec8c658'/>
+      <typedef-decl name='percpu_ref_func_t' type-id='96650caf' filepath='include/linux/percpu-refcount.h' line='60' column='1' id='ed7b7f6b'/>
+      <typedef-decl name='pgd_t' type-id='59473550' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='12aa8ce4'/>
+      <typedef-decl name='pgprot_t' type-id='051883a9' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='2e2dcbd3'/>
+      <pointer-type-def type-id='7a348508' size-in-bits='64' id='c4904652'/>
+      <typedef-decl name='req_flags_t' type-id='3f1a6b60' filepath='include/linux/blkdev.h' line='68' column='1' id='3b445e53'/>
+      <typedef-decl name='rwlock_t' type-id='d7ab0a14' filepath='include/linux/rwlock_types.h' line='20' column='1' id='ac16795b'/>
+      <typedef-decl name='sector_t' type-id='91ce1af9' filepath='include/linux/types.h' line='130' column='1' id='a42536cd'/>
+      <pointer-type-def type-id='f1a922f0' size-in-bits='64' id='d1a6d6c2'/>
+      <pointer-type-def type-id='fdf3707c' size-in-bits='64' id='b1d4934a'/>
+      <pointer-type-def type-id='0c7ab04d' size-in-bits='64' id='5224788d'/>
+      <union-decl name='__sifields' size-in-bits='256' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='32' column='1' id='a60646cb'>
+        <data-member access='public'>
+          <var-decl name='_kill' type-id='35888a92' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_timer' type-id='11b42bf5' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_rt' type-id='90a6a0a3' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigchld' type-id='5b8a7161' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigfault' type-id='b47416ba' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigpoll' type-id='88c21632' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigsys' type-id='07fe0781' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1' id='097c5bdb'>
+        <data-member access='public'>
+          <var-decl name='csd' type-id='bb75ea85' visibility='default' filepath='include/linux/blkdev.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fifo_time' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='246' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1' id='7fc3d482'>
+        <data-member access='public'>
+          <var-decl name='elv' type-id='6d001302' visibility='default' filepath='include/linux/blkdev.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='flush' type-id='5596717b' visibility='default' filepath='include/linux/blkdev.h' line='194' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='cc072175'>
+        <data-member access='public'>
+          <var-decl name='shared' type-id='0c408f16' visibility='default' filepath='include/linux/mm_types.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='anon_name' type-id='80f4b756' visibility='default' filepath='include/linux/mm_types.h' line='333' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='465ca58e'>
+        <data-member access='public'>
+          <var-decl name='' type-id='6a74abcf' visibility='default' filepath='include/linux/key.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='x' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='104' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='ba0a0e48'>
+        <data-member access='public'>
+          <var-decl name='d_alias' type-id='03a4a074' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_in_lookup_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dcache.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1' id='2f76bc4b'>
+        <data-member access='public'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/linux/blkdev.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ipi_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='eb20ccf0'>
+        <data-member access='public'>
+          <var-decl name='ioc_node' type-id='03a4a074' visibility='default' filepath='include/linux/iocontext.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__rcu_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/iocontext.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='ba311a3a'>
+        <data-member access='public'>
+          <var-decl name='d_lru' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_wait' type-id='03d48e96' visibility='default' filepath='include/linux/dcache.h' line='110' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1' id='df248743'>
+        <data-member access='public'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__rcu_icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/iocontext.h' line='85' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/linux/pm_qos.h' line='113' column='1' id='5d6ef881'>
+        <data-member access='public'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='flr' type-id='a70ae6be' visibility='default' filepath='include/linux/pm_qos.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='freq' type-id='da4cc8f3' visibility='default' filepath='include/linux/pm_qos.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1' id='df8866ad'>
+        <data-member access='public'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/blkdev.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='special_vec' type-id='40af3608' visibility='default' filepath='include/linux/blkdev.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='completion_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='175' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='2a125a28'/>
+      <pointer-type-def type-id='002ac4a6' size-in-bits='64' id='cf536864'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='256' id='fc872715'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='128' id='49580a63'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='192' id='3461381a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='4672' id='6bd30ceb'>
+        <subrange length='73' type-id='7ff19f0f' id='1ee2a653'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='419202b8' size-in-bits='64' id='454b8f82'/>
+      <pointer-type-def type-id='6c99ab8f' size-in-bits='64' id='b20722ab'/>
+      <pointer-type-def type-id='06a1c469' size-in-bits='64' id='83d96d05'/>
+      <pointer-type-def type-id='d8fd579a' size-in-bits='64' id='c379ce2c'/>
+      <pointer-type-def type-id='0b1ef2a8' size-in-bits='64' id='36caa4da'/>
+      <pointer-type-def type-id='e931abd6' size-in-bits='64' id='32baba38'/>
+      <pointer-type-def type-id='87769f42' size-in-bits='64' id='a6bf568c'/>
+      <pointer-type-def type-id='e5507ab5' size-in-bits='64' id='d3b2d361'/>
+      <pointer-type-def type-id='8aecb761' size-in-bits='64' id='7b4e3cad'/>
+      <pointer-type-def type-id='22400b6a' size-in-bits='64' id='4fb74714'/>
+      <pointer-type-def type-id='71099d68' size-in-bits='64' id='0b8fca52'/>
+      <pointer-type-def type-id='eb940a3b' size-in-bits='64' id='8b74557f'/>
+      <pointer-type-def type-id='267816c1' size-in-bits='64' id='644a4b55'/>
+      <pointer-type-def type-id='afb1917e' size-in-bits='64' id='0cfacb48'/>
+      <pointer-type-def type-id='c00013f4' size-in-bits='64' id='def135ae'/>
+      <pointer-type-def type-id='c0e5af96' size-in-bits='64' id='8734cf20'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='256' id='209ef23f'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='c39df2b8' size-in-bits='64' id='3d15880e'/>
+      <pointer-type-def type-id='85c22421' size-in-bits='64' id='ee406209'/>
+      <pointer-type-def type-id='0fd82dc2' size-in-bits='64' id='f57039f0'/>
+      <pointer-type-def type-id='3249e303' size-in-bits='64' id='815cf0d3'/>
+      <array-type-def dimensions='1' type-id='28ee064c' size-in-bits='320' id='39e531ac'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2048' id='99d12d7b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='9a335021' size-in-bits='64' id='c9c70151'/>
+      <pointer-type-def type-id='8efd3865' size-in-bits='64' id='0461ecf5'/>
+      <pointer-type-def type-id='55eaf925' size-in-bits='64' id='3213e875'/>
+      <array-type-def dimensions='1' type-id='380c7edc' size-in-bits='1472' id='47645c1d'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <pointer-type-def type-id='53cc9bd6' size-in-bits='64' id='65c718a5'/>
+      <pointer-type-def type-id='e82476af' size-in-bits='64' id='d180faa7'/>
+      <pointer-type-def type-id='036e1e80' size-in-bits='64' id='daf2ec26'/>
+      <pointer-type-def type-id='8c8c8763' size-in-bits='64' id='8981c393'/>
+      <array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='152' id='8f04ba62'>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <pointer-type-def type-id='ea2ebeac' size-in-bits='64' id='03054cfa'/>
+      <pointer-type-def type-id='5332c7dc' size-in-bits='64' id='a87691ee'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+      </array-type-def>
+      <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='bb75ea85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llist' type-id='c5ccfee8' 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='89714567' 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='eaa32e2f' 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='f0981eeb' visibility='default' filepath='include/linux/smp.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__kernel_timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time_types.h' line='7' column='1' id='5c155a71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='3d9e85cc' visibility='default' filepath='include/uapi/linux/time_types.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='1eb56b1e' visibility='default' filepath='include/uapi/linux/time_types.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='anon_vma' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rmap.h' line='29' column='1' id='14f332cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/rmap.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/rmap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='degree' type-id='f0981eeb' visibility='default' filepath='include/linux/rmap.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/rmap.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_crypt_ctx' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='71' column='1' id='b545ce08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bc_key' type-id='9baaf905' visibility='default' filepath='include/linux/blk-crypto.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bc_dun' type-id='20b279f0' visibility='default' filepath='include/linux/blk-crypto.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='18' column='1' id='40af3608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bv_page' type-id='02f11ed4' visibility='default' filepath='include/linux/bvec.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bv_len' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bv_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_keyslot' size-in-bits='448' is-struct='yes' visibility='default' filepath='block/keyslot-manager.c' line='39' column='1' id='479d017a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slot_refs' type-id='49178f86' visibility='default' filepath='block/keyslot-manager.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idle_slot_node' type-id='72f469ec' visibility='default' filepath='block/keyslot-manager.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='block/keyslot-manager.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key' type-id='9baaf905' visibility='default' filepath='block/keyslot-manager.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='block/keyslot-manager.c' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctxs' size-in-bits='832' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='10' column='1' id='70bf757e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='block/blk-mq.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_queue_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='79' column='1' id='32406f0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_map' type-id='807869d3' visibility='default' filepath='include/linux/blk-mq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='queue_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='47' column='1' id='19b26952'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/blk-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='blkg_tree' type-id='d39738ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='blkg_hint' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='blkg_list' type-id='e151255a' visibility='default' filepath='include/linux/blk-cgroup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cpd' type-id='39e1fe03' visibility='default' filepath='include/linux/blk-cgroup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='all_blkcgs_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cgwb_refcnt' type-id='64615833' visibility='default' filepath='include/linux/blk-cgroup.h' line='60' 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='ebd46aa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_proto' type-id='22aed5fd' 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='b31b5e29' 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='f45f2842' 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='bbf015cd' visibility='default' filepath='include/linux/bsg.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_root' size-in-bits='52480' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='500' column='1' id='66f1e832'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kf_root' type-id='e18defdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subsys_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hierarchy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cgrp' type-id='ab9643dd' visibility='default' filepath='include/linux/cgroup-defs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='cgrp_ancestor_id_storage' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18784'>
+          <var-decl name='nr_cgrps' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='root_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='cgroup_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='release_agent_path' type-id='d16c6df4' visibility='default' filepath='include/linux/cgroup-defs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51968'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='531' 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='304' column='1' id='a73d96cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bsync' type-id='e4d85780' visibility='default' filepath='include/linux/cgroup-defs.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='updated_children' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='updated_next' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='330' 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='373' column='1' id='f3d147c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='740b5503' visibility='default' filepath='include/linux/mm_types.h' line='375' 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='8eb07132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='87dfefa3' 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='eaa32e2f' 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='d589c913' visibility='default' filepath='include/linux/stop_machine.h' line='28' 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='163' column='1' id='7c7d6006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='ed51618b' visibility='default' filepath='include/linux/sysctl.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='root' type-id='dec44472' visibility='default' filepath='include/linux/sysctl.h' line='166' 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='143' column='1' id='ed51618b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='201d54e5' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregistering' type-id='389faaf7' visibility='default' filepath='include/linux/sysctl.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctl_table_arg' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='root' type-id='2993adbc' visibility='default' filepath='include/linux/sysctl.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set' type-id='42988600' visibility='default' filepath='include/linux/sysctl.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1c66bddc' visibility='default' filepath='include/linux/sysctl.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='node' type-id='a586bbcf' visibility='default' filepath='include/linux/sysctl.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inodes' type-id='e151255a' visibility='default' filepath='include/linux/sysctl.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_rq' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='641' column='1' id='53d038df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dl_nr_running' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='8c6b5470' visibility='default' filepath='kernel/sched/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pushable_dl_tasks_root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='running_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='this_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extra_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bw_ratio' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='694' 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='32358857'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8efea9e5' 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='f0981eeb' 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='79efa3b3' 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='d7c38177' 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='34c443b7' 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='34c443b7' 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='9917918c' 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='d6965222' 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='ce828d9f' 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='3ce3447a' 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='0ef96694' 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='79b8da5c' 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='9f403612' 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='0023218e' 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='950eceb8' 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='7e5b15cf' 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='f3b4aca8' 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='b92c8d0d' visibility='default' filepath='include/net/dst_ops.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_type' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='72' column='1' id='2731de48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/elevator.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='386fe521' visibility='default' filepath='include/linux/elevator.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='icq_size' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='icq_align' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='elevator_attrs' type-id='177a4437' visibility='default' filepath='include/linux/elevator.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='elevator_name' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='elevator_alias' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='elevator_features' type-id='20f5f452' visibility='default' filepath='include/linux/elevator.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='elevator_owner' type-id='2730d015' visibility='default' filepath='include/linux/elevator.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='queue_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hctx_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='icq_cache_name' type-id='aa4fa8f1' visibility='default' filepath='include/linux/elevator.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/elevator.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_ra_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='942' column='1' id='b31f003f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='async_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mmap_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prev_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='950' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='931' column='1' id='6b640edd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/linux/fs.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid_type' type-id='ce78cf46' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='signum' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='936' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_qos_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='96' column='1' id='da4cc8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1df5cca8' visibility='default' filepath='include/linux/pm_qos.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='qos' type-id='1351457a' visibility='default' filepath='include/linux/pm_qos.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gendisk' size-in-bits='11264' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='191' column='1' id='4f60ffbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='first_minor' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minors' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='disk_name' type-id='16dc656a' visibility='default' filepath='include/linux/genhd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='b160f6ba' visibility='default' filepath='include/linux/genhd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='part_tbl' type-id='af836b25' visibility='default' filepath='include/linux/genhd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='part0' type-id='2473bc1f' visibility='default' filepath='include/linux/genhd.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='fops' type-id='6829b047' visibility='default' filepath='include/linux/genhd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/genhd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genhd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='lookup_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/genhd.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='slave_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='random' type-id='22aa3c54' visibility='default' filepath='include/linux/genhd.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='sync_io' type-id='49178f86' visibility='default' filepath='include/linux/genhd.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='ev' type-id='26f00576' visibility='default' filepath='include/linux/genhd.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='bb' type-id='5760652c' visibility='default' filepath='include/linux/genhd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='lockdep_map' type-id='d34a605e' visibility='default' filepath='include/linux/genhd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_struct' size-in-bits='9408' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='109' column='1' id='2473bc1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_sect' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sects' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_sects_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/genhd.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alignment_offset' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__dev' type-id='66e487eb' visibility='default' filepath='include/linux/genhd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='holder_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='policy' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='partno' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='info' type-id='d4f2b9b2' visibility='default' filepath='include/linux/genhd.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='dkstats' type-id='70f1634e' visibility='default' filepath='include/linux/genhd.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='ref' type-id='818799b4' visibility='default' filepath='include/linux/genhd.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_work' type-id='7c0b9fdb' visibility='default' filepath='include/linux/genhd.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hw_perf_event' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='122' column='1' id='b594b0c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='47a85f98' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='addr_filters' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prev_count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sample_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='period_left' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interrupts_seq' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interrupts' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='freq_time_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='freq_count_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='227' 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='35' column='1' id='af2c6a56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tw_count' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/netns/ipv4.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sysctl_max_tw_buckets' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='651' column='1' id='fe070fe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i_opflags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_default_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_op' type-id='de2c232c' visibility='default' filepath='include/linux/fs.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='i_sb' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='i_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='i_ino' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='3ee18b51' visibility='default' filepath='include/linux/fs.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='i_rdev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='i_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='i_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='i_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='i_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='i_bytes' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='i_blkbits' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='i_write_hint' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='i_blocks' type-id='17345459' visibility='default' filepath='include/linux/fs.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='i_state' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='i_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirtied_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dirtied_time_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='i_hash' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='i_io_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='i_wb' type-id='f885ca7d' visibility='default' filepath='include/linux/fs.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='i_wb_frn_winner' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='i_wb_frn_avg_time' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2160'>
+          <var-decl name='i_wb_frn_history' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='i_lru' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='i_sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='i_wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='' type-id='cbd4a95b' visibility='default' filepath='include/linux/fs.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='i_version' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='i_sequence' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='i_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='i_dio_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='i_writecount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='i_readcount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='' type-id='67f3b119' visibility='default' filepath='include/linux/fs.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='i_flctx' type-id='731257ff' visibility='default' filepath='include/linux/fs.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='i_data' type-id='0fd82dc2' visibility='default' filepath='include/linux/fs.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='i_devices' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='' type-id='d1afa4fe' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='i_generation' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='i_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='i_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='i_crypt_info' type-id='1ea8c5af' visibility='default' filepath='include/linux/fs.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='i_verity_info' type-id='ba18e248' visibility='default' filepath='include/linux/fs.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='i_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='764' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_generic' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1031' column='1' id='bb06f572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irq.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg_readl' type-id='99577235' visibility='default' filepath='include/linux/irq.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg_writel' type-id='f34cc61f' visibility='default' filepath='include/linux/irq.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_base' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mask_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='type_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='polarity_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='wake_enabled' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_active' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ct' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='installed' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/irq.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/irq.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chip_types' type-id='7290550d' visibility='default' filepath='include/linux/irq.h' line='1051' 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='9281c70f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' 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='c5ccfee8' 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='f48b73f6' visibility='default' filepath='include/linux/irq_work.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_tag' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='85' column='1' id='3173bc57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/key.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='removed' type-id='b50a4934' visibility='default' filepath='include/linux/key.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_type' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='64' column='1' id='71e87d49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/key-type.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='def_datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vet_description' type-id='70487b28' visibility='default' filepath='include/linux/key-type.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preparse' type-id='320c9cb0' visibility='default' filepath='include/linux/key-type.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free_preparse' type-id='54d7d559' visibility='default' filepath='include/linux/key-type.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='instantiate' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='update' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match_preparse' type-id='0954c675' visibility='default' filepath='include/linux/key-type.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='match_free' type-id='87f6a50e' visibility='default' filepath='include/linux/key-type.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='revoke' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='describe' type-id='f68ddecc' visibility='default' filepath='include/linux/key-type.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='read' type-id='a9cc7986' visibility='default' filepath='include/linux/key-type.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key' type-id='99147724' visibility='default' filepath='include/linux/key-type.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lookup_restriction' type-id='7c4a6c91' visibility='default' filepath='include/linux/key-type.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='asym_query' type-id='b6633a3c' visibility='default' filepath='include/linux/key-type.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='asym_eds_op' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='asym_verify_signature' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/key-type.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/key-type.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/key-type.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock_class' type-id='47479831' visibility='default' filepath='include/linux/key-type.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='dfc42026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='llist_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='54' column='1' id='77df194e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='55' 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='22' column='1' id='93d4ab27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='e4266c7e' visibility='default' filepath='include/net/netns/ipv4.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='25' 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='302' column='1' id='9e8c0698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lists' type-id='e4e01aff' visibility='default' filepath='include/linux/mmzone.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reclaim_stat' type-id='1f1f4d8e' visibility='default' filepath='include/linux/mmzone.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='inactive_age' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='refaults' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_params' size-in-bits='1280' is-struct='yes' visibility='default' filepath='mm/slab.h' line='73' column='1' id='f36112b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_cache' type-id='f3b4aca8' visibility='default' filepath='mm/slab.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='8305e8d4' visibility='default' filepath='mm/slab.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device_stats' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='164' column='1' id='a3566137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/generic.h' line='28' column='1' id='8e5f5512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1a99b3b8' visibility='default' filepath='include/net/netns/generic.h' line='29' 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='220' column='1' id='44a1ec32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_sysctl_ipv6' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='16' column='1' id='6c13064a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmp_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm6_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bindv6only' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flush_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ip6_rt_max_size' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ip6_rt_gc_min_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ip6_rt_gc_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ip6_rt_gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip6_rt_gc_elasticity' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ip6_rt_mtu_expires' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ip6_rt_min_advmss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='multipath_hash_policy' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flowlabel_consistency' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='auto_flowlabels' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='icmpv6_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6_echo_ignore_multicast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='icmpv6_echo_ignore_anycast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='icmpv6_ratemask' type-id='f46d9f4d' visibility='default' filepath='include/net/netns/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='icmpv6_ratemask_ptr' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv6.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='anycast_src_echo_reply' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='idgen_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='idgen_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='flowlabel_state_ranges' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flowlabel_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='max_dst_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_hbh_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_dst_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_hbh_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='seg6_flowlabel' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='skip_notify_on_dev_down' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ip_net' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='72' column='1' id='7f3015f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generic' type-id='80487c53' visibility='default' filepath='include/net/netns/conntrack.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcp' type-id='a2e01929' visibility='default' filepath='include/net/netns/conntrack.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udp' type-id='328aff41' visibility='default' filepath='include/net/netns/conntrack.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='icmp' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='icmpv6' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dccp' type-id='ddb2f0ec' visibility='default' filepath='include/net/netns/conntrack.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sctp' type-id='c91839d0' visibility='default' filepath='include/net/netns/conntrack.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gre' type-id='ef266e4a' visibility='default' filepath='include/net/netns/conntrack.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='old_timespec32' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/vdso/time32.h' line='7' column='1' id='f4b65c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='5d60da55' visibility='default' filepath='include/vdso/time32.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tv_nsec' type-id='a7832498' visibility='default' filepath='include/vdso/time32.h' line='9' 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='506' column='1' id='54885433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_file_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='509' 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='e57536d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='de6d2b01' 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='d3130597' 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='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='inherit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='pinned' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='exclusive' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='exclude_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='exclude_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='exclude_hv' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='exclude_idle' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mmap' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='comm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='inherit_stat' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='enable_on_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='task' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='watermark' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='precise_ip' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='mmap_data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='sample_id_all' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='exclude_host' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='exclude_guest' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='exclude_callchain_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='exclude_callchain_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='mmap2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='comm_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='use_clockid' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='context_switch' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='write_backward' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='namespaces' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='ksymbol' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='bpf_event' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='aux_output' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='__reserved_1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='051df3c3' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bp_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='3089c176' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='38c76117' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sample_regs_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_stack_user' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clockid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sample_regs_intr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='aux_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sample_max_stack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='880'>
+          <var-decl name='__reserved_2' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='427' 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='28' column='1' id='89d35c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='5fd0d2fb' visibility='default' filepath='include/net/netns/ipv4.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags_request' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='49' column='1' id='a70ae6be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_dir_entry' size-in-bits='1408' is-struct='yes' visibility='default' filepath='fs/proc/internal.h' line='30' column='1' id='fe4ffa7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_use' type-id='49178f86' visibility='default' filepath='fs/proc/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='fs/proc/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_openers' type-id='72f469ec' visibility='default' filepath='fs/proc/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_unload_lock' type-id='fb4018a0' visibility='default' filepath='fs/proc/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_unload_completion' type-id='389faaf7' visibility='default' filepath='fs/proc/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc_iops' type-id='de2c232c' visibility='default' filepath='fs/proc/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='proc_fops' type-id='61758ee5' visibility='default' filepath='fs/proc/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_dops' type-id='1ee57353' visibility='default' filepath='fs/proc/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='1371a02f' visibility='default' filepath='fs/proc/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='7c2b18ab' visibility='default' filepath='fs/proc/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='fs/proc/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_size' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='low_ino' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nlink' type-id='6fa67d85' visibility='default' filepath='fs/proc/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='fs/proc/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='fs/proc/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='fs/proc/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent' type-id='d077e928' visibility='default' filepath='fs/proc/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='subdir' type-id='dec44472' visibility='default' filepath='fs/proc/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='subdir_node' type-id='2a8a6332' visibility='default' filepath='fs/proc/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='fs/proc/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='fs/proc/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='namelen' type-id='f9b06939' visibility='default' filepath='fs/proc/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='inline_name' type-id='e84913bd' visibility='default' filepath='fs/proc/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq_qos_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='37' column='1' id='59969f99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='throttle' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='track' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='merge' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='issue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='requeue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='done' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='done_bio' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue_depth_changed' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exit' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='debugfs_attrs' type-id='e649198d' visibility='default' filepath='block/blk-rq-qos.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt_rq' size-in-bits='13632' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='600' column='1' id='e648d771'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='3ac6deac' visibility='default' filepath='kernel/sched/sched.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='rt_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12960'>
+          <var-decl name='rr_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='highest_prio' type-id='8f548118' visibility='default' filepath='kernel/sched/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='rt_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='rt_nr_total' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='pushable_tasks' type-id='57b0eed2' visibility='default' filepath='kernel/sched/sched.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='rt_queued' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='rt_throttled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='rt_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='rt_runtime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='rt_runtime_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='625' 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='48' column='1' id='6e051ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_nr' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='278a4544' visibility='default' filepath='include/linux/sbitmap.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock' size-in-bits='6720' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='326' column='1' id='a240f41d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__sk_common' type-id='5999c5f7' visibility='default' filepath='include/net/sock.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sk_lock' type-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sk_drops' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sk_rcvlowat' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sk_error_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sk_rx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sk_receive_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sk_backlog' type-id='6a96185e' visibility='default' filepath='include/net/sock.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sk_forward_alloc' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sk_ll_usec' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sk_napi_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sk_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sk_filter' type-id='90956edc' visibility='default' filepath='include/net/sock.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='' type-id='a29f8367' visibility='default' filepath='include/net/sock.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sk_policy' type-id='eb61ae4b' visibility='default' filepath='include/net/sock.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sk_rx_dst' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sk_dst_cache' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sk_omem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sk_sndbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sk_wmem_queued' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sk_wmem_alloc' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sk_tsq_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='' type-id='fc714247' visibility='default' filepath='include/net/sock.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sk_tx_skb_cache' type-id='0fbf3cfd' 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_write_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sk_peek_off' type-id='3158a266' visibility='default' filepath='include/net/sock.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sk_write_pending' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sk_dst_pending_confirm' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sk_pacing_status' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sk_sndtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sk_timer' type-id='abe41e67' visibility='default' filepath='include/net/sock.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sk_priority' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sk_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sk_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sk_max_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sk_frag' type-id='06c0432f' visibility='default' filepath='include/net/sock.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sk_route_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sk_route_nocaps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sk_route_forced_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sk_gso_type' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sk_gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sk_allocation' type-id='3eb7c31c' visibility='default' filepath='include/net/sock.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='sk_txhash' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='__sk_flags_offset' type-id='c764d637' visibility='default' filepath='include/net/sock.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk_padding' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sk_kern_sock' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sk_no_check_tx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='sk_no_check_rx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='sk_userlocks' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sk_protocol' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sk_type' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sk_gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sk_lingertime' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sk_prot_creator' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sk_callback_lock' type-id='ac16795b' visibility='default' filepath='include/net/sock.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sk_err' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='sk_err_soft' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='sk_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='sk_max_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='sk_uid' type-id='d80b72e6' visibility='default' filepath='include/net/sock.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='sk_peer_pid' type-id='b94e5398' visibility='default' filepath='include/net/sock.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sk_peer_cred' type-id='bc33861a' visibility='default' filepath='include/net/sock.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sk_rcvtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sk_stamp' type-id='fbc017ef' visibility='default' filepath='include/net/sock.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sk_tsflags' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5072'>
+          <var-decl name='sk_shutdown' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='sk_tskey' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sk_zckey' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='sk_clockid' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk_txtime_deadline_mode' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sk_txtime_report_errors' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sk_txtime_unused' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sk_socket' type-id='13103032' visibility='default' filepath='include/net/sock.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sk_user_data' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sk_security' type-id='eaa32e2f' 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_cgrp_data' type-id='8544f103' visibility='default' filepath='include/net/sock.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sk_memcg' type-id='223696fb' visibility='default' filepath='include/net/sock.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sk_state_change' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sk_data_ready' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sk_write_space' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sk_error_report' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='sk_backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='sk_destruct' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='sk_reuseport_cb' type-id='1d22b7e5' visibility='default' filepath='include/net/sock.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='sk_bpf_storage' type-id='f3f553e2' visibility='default' filepath='include/net/sock.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sk_rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='' type-id='b3414a3c' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='android_oem_data1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='536' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_block' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1473' column='1' id='bc39a8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s_blocksize_bits' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_blocksize' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_maxbytes' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='1479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_op' type-id='f7c6dcac' visibility='default' filepath='include/linux/fs.h' line='1480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dq_op' type-id='85741a2a' visibility='default' filepath='include/linux/fs.h' line='1481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_qcop' type-id='2cb49514' visibility='default' filepath='include/linux/fs.h' line='1482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_export_op' type-id='ab932c45' visibility='default' filepath='include/linux/fs.h' line='1483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='s_iflags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='s_magic' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_root' type-id='27675065' visibility='default' filepath='include/linux/fs.h' line='1487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_umount' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='1488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='s_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='s_active' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='1490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='s_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='s_xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/fs.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='s_cop' type-id='8d31a8d6' visibility='default' filepath='include/linux/fs.h' line='1496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='s_master_keys' type-id='204a4632' visibility='default' filepath='include/linux/fs.h' line='1497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='s_vop' type-id='e3008443' visibility='default' filepath='include/linux/fs.h' line='1500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='s_encoding' type-id='72835629' visibility='default' filepath='include/linux/fs.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='s_encoding_flags' type-id='d315442e' visibility='default' filepath='include/linux/fs.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='s_roots' type-id='def98e71' visibility='default' filepath='include/linux/fs.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='s_mounts' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='s_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='s_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='s_mtd' type-id='58ed56f5' visibility='default' filepath='include/linux/fs.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='s_instances' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='s_quota_types' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='s_dquot' type-id='c26e4ad8' visibility='default' filepath='include/linux/fs.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='s_writers' type-id='fb476a2b' visibility='default' filepath='include/linux/fs.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='s_time_gran' type-id='19c2251e' visibility='default' filepath='include/linux/fs.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='s_time_min' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='s_time_max' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='s_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='s_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='s_id' type-id='16dc656a' visibility='default' filepath='include/linux/fs.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='s_uuid' type-id='ec55eb74' visibility='default' filepath='include/linux/fs.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='s_max_links' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='s_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='s_vfs_rename_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='s_subtype' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='s_d_op' type-id='1ee57353' visibility='default' filepath='include/linux/fs.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='cleancache_poolid' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='s_shrink' type-id='27cb404f' visibility='default' filepath='include/linux/fs.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='s_remove_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='s_fsnotify_inode_refs' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='s_readonly_remount' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='s_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='s_dio_done_wq' type-id='242e3d19' visibility='default' filepath='include/linux/fs.h' line='1574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='s_pins' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='1575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='s_user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs.h' line='1582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='s_dentry_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='s_inode_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/fs.h' line='1592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='s_sync_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='s_stack_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='s_inode_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='s_inodes' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='s_inode_wblist_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_inodes_wb' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1611' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/types.h' line='17' column='1' id='ad6873f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/types.h' line='20' 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='b855e40d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x_hflag' type-id='d315442e' 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='d315442e' 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='811c9338' 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='d315442e' visibility='default' filepath='include/uapi/linux/termios.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='306' column='1' id='9b27c78b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty_driver.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cdevs' type-id='5b4d58e9' visibility='default' filepath='include/linux/tty_driver.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name_base' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor_start' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_driver.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='subtype' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='init_termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty_driver.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty_driver.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='proc_entry' type-id='d077e928' visibility='default' filepath='include/linux/tty_driver.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='other' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty_driver.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ttys' type-id='2027e7a0' visibility='default' filepath='include/linux/tty_driver.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ports' type-id='d272d4d6' visibility='default' filepath='include/linux/tty_driver.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='termios' type-id='d910a7dd' visibility='default' filepath='include/linux/tty_driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty_driver.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tty_drivers' type-id='72f469ec' visibility='default' filepath='include/linux/tty_driver.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='340' 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='219' column='1' id='f87db0b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='9d632ac5' visibility='default' filepath='include/linux/tty_ldisc.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/tty_ldisc.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='233' column='1' id='7e1e521a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='6b1bde38' visibility='default' filepath='include/linux/tty.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='itty' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='103756a0' visibility='default' filepath='include/linux/tty.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='client_ops' type-id='8cd9dbc0' visibility='default' filepath='include/linux/tty.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='blocked_open' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='delta_msr_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='iflags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='console' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='low_latency' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='buf_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='xmit_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='close_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='closing_wait' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='drain_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='client_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='259' 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='95' column='1' id='fdf3707c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/user_namespace.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ns' type-id='c0ced320' visibility='default' filepath='include/linux/user_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucount' type-id='32e5d672' visibility='default' filepath='include/linux/user_namespace.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uevent_sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c7ab04d'/>
+      <class-decl name='uid_gid_map' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='24' column='1' id='f179bf1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_extents' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c3ec14d0' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hthresh' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='24' column='1' id='52aaaba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='rbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='lbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='rbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='c39df2b8'/>
+      <class-decl name='__anonymous_struct__15' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='55' column='1' id='5b8a7161'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_status' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_utime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_stime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='48' column='1' id='90a6a0a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='34' column='1' id='35888a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='40' column='1' id='11b42bf5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_tid' type-id='c28acba6' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sys_private' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac16795b' visibility='default' filepath='include/linux/rwlock_types.h' line='11' column='1' id='d7ab0a14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='fed2d8ee' visibility='default' filepath='include/linux/rwlock_types.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__37' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='111' column='1' id='a03c964b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/netns/ipv6.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv6.h' line='114' 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/linux/blkdev.h' line='185' column='1' id='6d001302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq' type-id='7c6e0e0c' visibility='default' filepath='include/linux/blkdev.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='24ae0315' visibility='default' filepath='include/linux/blkdev.h' line='187' 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/netdevice.h' line='1851' column='1' id='19245258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upper' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lower' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1853' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='98' column='1' id='88c21632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_band' type-id='bd54fe1a' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='12aa8ce4' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='59473550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='df6d7e75' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='2e2dcbd3' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='051883a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgprot' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='329' column='1' id='0c408f16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb_subtree_last' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='331' 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='87322991'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='72f469ec' 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='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='95' column='1' id='6a74abcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc_len' type-id='1dc6a898' visibility='default' filepath='include/linux/key.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='4a008bc3' visibility='default' filepath='include/linux/key.h' line='98' 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/linux/blkdev.h' line='190' column='1' id='5596717b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1' id='b47416ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_addr' type-id='eaa32e2f' 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='' type-id='c4e140b8' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' 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/uapi/asm-generic/siginfo.h' line='104' column='1' id='07fe0781'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_call_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_syscall' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='_arch' type-id='f0981eeb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3577ed21' size-in-bits='64' id='ac8cd584'/>
+      <pointer-type-def type-id='ac1c385d' size-in-bits='64' id='10b13b44'/>
+      <pointer-type-def type-id='f7915bc8' size-in-bits='64' id='681aaa17'/>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='256' id='db1b7234'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <qualified-type-def type-id='90cdb889' const='yes' id='4e65adfa'/>
+      <qualified-type-def type-id='e4992400' const='yes' id='1d22df6b'/>
+      <pointer-type-def type-id='b56a1102' size-in-bits='64' id='bdf901f8'/>
+      <pointer-type-def type-id='b8ae588d' size-in-bits='64' id='61758ee5'/>
+      <pointer-type-def type-id='60407282' size-in-bits='64' id='2d747e78'/>
+      <pointer-type-def type-id='12cfd48b' size-in-bits='64' id='3e2bb973'/>
+      <pointer-type-def type-id='99cf04a8' size-in-bits='64' id='a2e418a6'/>
+      <pointer-type-def type-id='68c47b91' size-in-bits='64' id='a84ec761'/>
+      <array-type-def dimensions='1' type-id='30e60925' size-in-bits='832' id='e521ce61'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='2d144a5b' size-in-bits='64' id='67f12fe3'/>
+      <qualified-type-def type-id='ed6c59ba' const='yes' id='2153cf5d'/>
+      <pointer-type-def type-id='4e267e15' size-in-bits='64' id='4598bd2d'/>
+      <pointer-type-def type-id='ab23f61a' size-in-bits='64' id='999c8d90'/>
+      <pointer-type-def type-id='c408da30' size-in-bits='64' id='b3ef56ee'/>
+      <qualified-type-def type-id='b8553c6b' const='yes' id='559d6206'/>
+      <pointer-type-def type-id='ea86de29' size-in-bits='64' id='354f7eb9'/>
+      <qualified-type-def type-id='19795245' const='yes' id='92e9b57c'/>
+      <pointer-type-def type-id='e09a048e' size-in-bits='64' id='52baee64'/>
+      <pointer-type-def type-id='97aa083d' size-in-bits='64' id='2e3e746d'/>
+      <pointer-type-def type-id='4ec43a31' size-in-bits='64' id='b2bcb5d9'/>
+      <pointer-type-def type-id='ddd212e6' size-in-bits='64' id='d81cf24c'/>
+      <pointer-type-def type-id='8e586c5c' size-in-bits='64' id='b1a5e68a'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2037' column='1' id='08f5ca17'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2047' column='1' id='08f5ca18'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <enum-decl name='netdev_ml_priv_type' filepath='include/linux/netdevice.h' line='1592' column='1' id='9c6bf017'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ML_PRIV_NONE' value='0'/>
+        <enumerator name='ML_PRIV_CAN' value='1'/>
+      </enum-decl>
+      <enum-decl name='perf_event_state' filepath='include/linux/perf_event.h' line='520' column='1' id='31fdb95a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='302' column='1' id='0d20c3dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='e6f81ea9' size-in-bits='64' id='1fb247c2'/>
+      <pointer-type-def type-id='d63f4ff3' size-in-bits='64' id='9a2e43a6'/>
+      <pointer-type-def type-id='faaac7a5' size-in-bits='64' id='fe454a75'/>
+      <pointer-type-def type-id='7147e7ff' size-in-bits='64' id='7156b317'/>
+      <pointer-type-def type-id='ef45f062' size-in-bits='64' id='74f101b0'/>
+      <pointer-type-def type-id='e079fe29' size-in-bits='64' id='a68064b1'/>
+      <pointer-type-def type-id='a2b406b5' size-in-bits='64' id='107630a5'/>
+      <pointer-type-def type-id='84dbb257' size-in-bits='64' id='943ad75f'/>
+      <pointer-type-def type-id='f47b0345' size-in-bits='64' id='9712eb54'/>
+      <pointer-type-def type-id='8db0df1b' size-in-bits='64' id='d09d4bab'/>
+      <pointer-type-def type-id='d09d4bab' size-in-bits='64' id='e89ddc13'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='1024' id='ccfd385f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='192' id='fc293b5f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1851ab9f' size-in-bits='4096' id='cb01bf4b'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='bd4dc4cb' size-in-bits='64' id='c085a9fb'/>
+      <pointer-type-def type-id='b4bfe052' size-in-bits='64' id='0296b670'/>
+      <pointer-type-def type-id='c7afdfb7' size-in-bits='64' id='1a16368f'/>
+      <pointer-type-def type-id='1f91fd06' size-in-bits='64' id='bf0465ec'/>
+      <pointer-type-def type-id='4234e231' size-in-bits='64' id='fc6f14a9'/>
+      <pointer-type-def type-id='8db8de2b' size-in-bits='64' id='f026b16b'/>
+      <pointer-type-def type-id='27ebfa24' size-in-bits='64' id='01d310c2'/>
+      <pointer-type-def type-id='76c7c9df' size-in-bits='64' id='e1f2504c'/>
+      <pointer-type-def type-id='4e958389' size-in-bits='64' id='57e65d80'/>
+      <pointer-type-def type-id='24254372' size-in-bits='64' id='c1e89b34'/>
+      <pointer-type-def type-id='bba85209' size-in-bits='64' id='9f82b8fd'/>
+      <pointer-type-def type-id='749ee287' size-in-bits='64' id='8bdbbb63'/>
+      <pointer-type-def type-id='28d1931f' size-in-bits='64' id='354bcec3'/>
+      <pointer-type-def type-id='28cb132f' size-in-bits='64' id='be2c124b'/>
+      <pointer-type-def type-id='647d371e' size-in-bits='64' id='35e8c658'/>
+      <pointer-type-def type-id='d07af849' size-in-bits='64' id='4da4101d'/>
+      <pointer-type-def type-id='f8cb692f' size-in-bits='64' id='a5786cbb'/>
+      <pointer-type-def type-id='17f2d2f2' size-in-bits='64' id='c5c535b4'/>
+      <pointer-type-def type-id='ed4be5c0' size-in-bits='64' id='6668d13a'/>
+      <pointer-type-def type-id='294be38d' size-in-bits='64' id='38a7cb79'/>
+      <pointer-type-def type-id='9b94c22b' size-in-bits='64' id='8d78edef'/>
+      <pointer-type-def type-id='87732674' size-in-bits='64' id='afc38bc6'/>
+      <pointer-type-def type-id='6ad7a215' size-in-bits='64' id='36f91979'/>
+      <pointer-type-def type-id='6d544aa1' size-in-bits='64' id='0cd76695'/>
+      <pointer-type-def type-id='b52da57b' size-in-bits='64' id='f22a42d7'/>
+      <pointer-type-def type-id='595c4720' size-in-bits='64' id='2c2624ea'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='96' id='e024279b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='288' id='e415235d'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='be50a64d' size-in-bits='64' id='e46089fd'/>
+      <pointer-type-def type-id='4816a146' size-in-bits='64' id='00c4cbac'/>
+      <pointer-type-def type-id='f52a1ce8' size-in-bits='64' id='30897c4e'/>
+      <pointer-type-def type-id='c2c09950' size-in-bits='64' id='e963f446'/>
+      <pointer-type-def type-id='55e8af82' size-in-bits='64' id='ca399350'/>
+      <pointer-type-def type-id='44b3a0ac' size-in-bits='64' id='e40f7bda'/>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='infinite' id='da6e2919'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='8696da2b' size-in-bits='64' id='75f3cc0b'/>
+      <array-type-def dimensions='1' type-id='42c7aae7' size-in-bits='64' id='425436e6'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <pointer-type-def type-id='e222a326' size-in-bits='64' id='016811bc'/>
+      <pointer-type-def type-id='7f2c5e96' size-in-bits='64' id='f43a2d4c'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1664' id='5e747b58'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='2944' id='a835e1f5'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='384' id='e8ef2bd5'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='f8009817' size-in-bits='64' id='208b18ef'/>
+      <pointer-type-def type-id='6e9b911c' size-in-bits='64' id='06a241cf'/>
+      <array-type-def dimensions='1' type-id='e0324306' size-in-bits='1664' id='d1982c82'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ad98c82f' size-in-bits='infinite' id='31f1649b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='366e0ade' size-in-bits='64' id='09f6e9a4'/>
+      <pointer-type-def type-id='94d117ca' size-in-bits='64' id='8bf6d789'/>
+      <pointer-type-def type-id='27f2e0d9' size-in-bits='64' id='a4c19f22'/>
+      <pointer-type-def type-id='b10d582f' size-in-bits='64' id='b70f37f7'/>
+      <pointer-type-def type-id='49a7c5a7' size-in-bits='64' id='35b28c4f'/>
+      <pointer-type-def type-id='f12ac4ae' size-in-bits='64' id='31094274'/>
+      <array-type-def dimensions='1' type-id='f1e1eb79' size-in-bits='512' id='b5839634'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='a27aef61' size-in-bits='64' id='2db792b9'/>
+      <pointer-type-def type-id='602fd1a9' size-in-bits='64' id='bb6de7e1'/>
+      <pointer-type-def type-id='85c08b52' size-in-bits='64' id='39a43b40'/>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='192' id='d82cf371'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='320' id='94310593'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1600' id='68a92070'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='3490ee41' size-in-bits='64' id='200ffa89'/>
+      <pointer-type-def type-id='4448fdd3' size-in-bits='64' id='090503c3'/>
+      <pointer-type-def type-id='7c1f8187' size-in-bits='64' id='7efbcaaf'/>
+      <pointer-type-def type-id='9a083a6e' size-in-bits='64' id='969a6bcd'/>
+      <pointer-type-def type-id='ac763c5d' size-in-bits='64' id='a06a810d'/>
+      <pointer-type-def type-id='956e764e' size-in-bits='64' id='9dc40234'/>
+      <pointer-type-def type-id='695ed59c' size-in-bits='64' id='247cb56b'/>
+      <pointer-type-def type-id='aa8737f6' size-in-bits='64' id='cf544519'/>
+      <pointer-type-def type-id='6efee8be' size-in-bits='64' id='8462bc54'/>
+      <pointer-type-def type-id='9cdca91a' size-in-bits='64' id='c13bca88'/>
+      <pointer-type-def type-id='384b6d84' size-in-bits='64' id='6ceb7782'/>
+      <pointer-type-def type-id='aa112583' size-in-bits='64' id='aca8a113'/>
+      <pointer-type-def type-id='9193647b' size-in-bits='64' id='da1cb816'/>
+      <pointer-type-def type-id='a7832498' size-in-bits='64' id='9f2cce4b'/>
+      <pointer-type-def type-id='1706cf19' size-in-bits='64' id='e9d32201'/>
+      <pointer-type-def type-id='990cce78' size-in-bits='64' id='15b8a3be'/>
+      <pointer-type-def type-id='cc52ca8d' size-in-bits='64' id='6daf6abd'/>
+      <pointer-type-def type-id='ae8bfcdd' size-in-bits='64' id='0fbf3cfd'/>
+      <pointer-type-def type-id='f772df6d' size-in-bits='64' id='d0d57cc5'/>
+      <array-type-def dimensions='1' type-id='e4a7867c' size-in-bits='infinite' id='6abca080'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='f77d4717' size-in-bits='64' id='104fa32f'/>
+      <pointer-type-def type-id='e1f906a3' size-in-bits='64' id='19a26ee3'/>
+      <pointer-type-def type-id='9509b3ac' size-in-bits='64' id='23816d7d'/>
+      <pointer-type-def type-id='10ec1ded' size-in-bits='64' id='eeaf504d'/>
+      <typedef-decl name='__sighandler_t' type-id='a38aafde' filepath='include/uapi/asm-generic/signal-defs.h' line='19' column='1' id='8cdd9566'/>
+      <typedef-decl name='__sigrestore_t' type-id='5d3a884e' filepath='include/uapi/asm-generic/signal-defs.h' line='22' column='1' id='81564178'/>
+      <typedef-decl name='bio_end_io_t' type-id='98617d6e' filepath='include/linux/blk_types.h' line='21' column='1' id='2ec4b2ae'/>
+      <typedef-decl name='call_single_data_t' type-id='bb75ea85' filepath='include/linux/smp.h' line='26' column='1' id='223a68bd'/>
+      <typedef-decl name='cc_t' type-id='002ac4a6' filepath='include/uapi/asm-generic/termbits.h' line='7' column='1' id='fb7c6451'/>
+      <typedef-decl name='errseq_t' type-id='19c2251e' filepath='include/linux/errseq.h' line='8' column='1' id='1da55f79'/>
+      <typedef-decl name='fmode_t' type-id='f0981eeb' filepath='include/linux/types.h' line='155' column='1' id='2665334e'/>
+      <typedef-decl name='local64_t' type-id='2b04c975' filepath='include/asm-generic/local64.h' line='26' column='1' id='7da7300e'/>
+      <typedef-decl name='netdev_features_t' type-id='91ce1af9' filepath='include/linux/netdev_features.h' line='12' column='1' id='f9f4b16f'/>
+      <typedef-decl name='perf_overflow_handler_t' type-id='a8564695' filepath='include/linux/perf_event.h' line='532' column='1' id='20a2e4e6'/>
+      <typedef-decl name='pgtable_t' type-id='02f11ed4' filepath='arch/arm64/include/asm/page.h' line='31' column='1' id='c28b9700'/>
+      <typedef-decl name='possible_net_t' type-id='0a0aec0a' filepath='include/net/net_namespace.h' line='315' column='1' id='c9df1e6c'/>
+      <typedef-decl name='rq_end_io_fn' type-id='06c207bd' filepath='include/linux/blkdev.h' line='64' column='1' id='537d88b1'/>
+      <typedef-decl name='s16' type-id='b55def60' filepath='include/asm-generic/int-ll64.h' line='18' column='1' id='9b7e9486'/>
+      <typedef-decl name='siphash_key_t' type-id='a1908dcc' filepath='include/linux/siphash.h' line='22' column='1' id='7799da43'/>
+      <typedef-decl name='slab_flags_t' type-id='f0981eeb' filepath='include/linux/types.h' line='154' column='1' id='f7fe96cb'/>
+      <typedef-decl name='speed_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='8' column='1' id='6a8e8a14'/>
+      <typedef-decl name='tcflag_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='9' column='1' id='241ce6f8'/>
+      <pointer-type-def type-id='8804cbe4' size-in-bits='64' id='0e70db3e'/>
+      <typedef-decl name='wait_queue_entry_t' type-id='504855b3' filepath='include/linux/wait.h' line='14' column='1' id='fe794aa9'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='736' id='bd44dad8'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='160' id='586ea944'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='91ce1af9' size-in-bits='640' id='a4295685'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='128' id='0d8415b5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='30847fcd' size-in-bits='768' id='cf2a9adf'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='89e527b7' size-in-bits='64' id='d1440a9f'/>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='d9c71193'>
+        <data-member access='public'>
+          <var-decl name='lock_count' type-id='d3130597' visibility='default' filepath='include/linux/lockref.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a58bf78' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='c047989c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a2c0764' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hash_len' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='53' 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='106' column='1' id='c06bf9dd'>
+        <data-member access='public'>
+          <var-decl name='slab_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5e3b2ede' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='963' column='1' id='8c8e2781'>
+        <data-member access='public'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='965' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__29' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='787e8237'>
+        <data-member access='public'>
+          <var-decl name='pt_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pt_frag_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='2065' column='1' id='ca29cb68'>
+        <data-member access='public'>
+          <var-decl name='lstats' type-id='a42934eb' visibility='default' filepath='include/linux/netdevice.h' line='2066' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tstats' type-id='90cd86e5' visibility='default' filepath='include/linux/netdevice.h' line='2067' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dstats' type-id='f59f5033' visibility='default' filepath='include/linux/netdevice.h' line='2068' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='77c8e02e'>
+        <data-member access='public'>
+          <var-decl name='s_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='counters' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='26dfc30c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <type-decl name='unsigned __int128' size-in-bits='128' id='4f340252'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='192' id='0d5c291d'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='aa6663dd'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='625e8699'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='448' id='346bc576'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='526b1662' size-in-bits='64' id='9d25db30'/>
+      <pointer-type-def type-id='07c30a78' size-in-bits='64' id='f65daff2'/>
+      <pointer-type-def type-id='d71978c5' size-in-bits='64' id='fe17c379'/>
+      <pointer-type-def type-id='03d219e2' size-in-bits='64' id='6484073c'/>
+      <pointer-type-def type-id='4ae18970' size-in-bits='64' id='548eee3a'/>
+      <pointer-type-def type-id='a79c760e' size-in-bits='64' id='aed2baa8'/>
+      <pointer-type-def type-id='078589a3' size-in-bits='64' id='6c534e17'/>
+      <pointer-type-def type-id='e589860a' size-in-bits='64' id='eddb9394'/>
+      <pointer-type-def type-id='d725da49' size-in-bits='64' id='54df184d'/>
+      <pointer-type-def type-id='2a275b06' size-in-bits='64' id='dae07608'/>
+      <pointer-type-def type-id='88d4f840' size-in-bits='64' id='f865774a'/>
+      <pointer-type-def type-id='45e743e9' size-in-bits='64' id='bbf015cd'/>
+      <pointer-type-def type-id='96bf0a3b' size-in-bits='64' id='05a372cf'/>
+      <pointer-type-def type-id='f9617b12' size-in-bits='64' id='e91cc304'/>
+      <pointer-type-def type-id='b5ab048f' size-in-bits='64' id='03d48e96'/>
+      <pointer-type-def type-id='3ce3a3e9' size-in-bits='64' id='63c7e8e1'/>
+      <pointer-type-def type-id='8ae2fb1d' size-in-bits='64' id='165146ad'/>
+      <array-type-def dimensions='1' type-id='9b61d1a6' size-in-bits='384' id='bd1ec77b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='4edc4180' size-in-bits='64' id='bf237056'/>
+      <pointer-type-def type-id='469df90e' size-in-bits='64' id='95610bd4'/>
+      <pointer-type-def type-id='830ee0a7' size-in-bits='64' id='5d3a884e'/>
+      <pointer-type-def type-id='3b5c61ad' size-in-bits='64' id='a38aafde'/>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='80' id='811c9338'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='288' id='32e5d672'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='cacf0f56' size-in-bits='64' id='5760652c'/>
+      <pointer-type-def type-id='ac0aeb1d' size-in-bits='64' id='f885ca7d'/>
+      <array-type-def dimensions='1' type-id='0f8f80b0' size-in-bits='320' id='39e1fe03'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='1b893cc5' size-in-bits='64' id='b88dd945'/>
+      <pointer-type-def type-id='36313ee4' size-in-bits='64' id='f3f553e2'/>
+      <pointer-type-def type-id='3e6eb939' size-in-bits='64' id='5b4d58e9'/>
+      <pointer-type-def type-id='24c24978' size-in-bits='64' id='b160f6ba'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='176' id='aa4fa8f1'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
+        <subrange length='4096' type-id='7ff19f0f' id='bc1b5ddc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='48' id='4a008bc3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='Qdisc' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='59' column='1' id='85c22421'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='limit' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='aa7f9205' visibility='default' filepath='include/net/sch_generic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stab' type-id='2e2106be' visibility='default' filepath='include/net/sch_generic.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='parent' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_queue' type-id='35b28c4f' visibility='default' filepath='include/net/sch_generic.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/sch_generic.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='padded' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='gso_skb' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='q' type-id='d34f2f01' visibility='default' filepath='include/net/sch_generic.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/sch_generic.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='running' type-id='e14c3b11' visibility='default' filepath='include/net/sch_generic.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='qstats' type-id='a212a715' visibility='default' filepath='include/net/sch_generic.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/net/sch_generic.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='next_sched' type-id='ee406209' visibility='default' filepath='include/net/sch_generic.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='skb_bad_txq' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='busylock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='seqlock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='empty' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='458' column='1' id='0fd82dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_pages' type-id='d39738ac' visibility='default' filepath='include/linux/fs.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/fs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_mmap_writable' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_mmap' type-id='6fe1603d' visibility='default' filepath='include/linux/fs.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mmap_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nrpages' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nrexceptional' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writeback_index' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='a_ops' type-id='7311f672' visibility='default' filepath='include/linux/fs.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='private_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='482' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='3249e303'/>
+      <class-decl name='blk_mq_tags' size-in-bits='1408' is-struct='yes' visibility='default' filepath='block/blk-mq-tag.h' line='10' column='1' id='8efd3865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_tags' type-id='f0981eeb' 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='f0981eeb' 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='49178f86' 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='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='breserved_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='static_rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='block/blk-mq-tag.h' line='21' 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='88' column='1' id='55eaf925'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='32' column='1' id='90cdb889'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_alloc_check' type-id='9c946059' visibility='default' filepath='include/linux/bpf.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_alloc' type-id='0f1b0147' visibility='default' filepath='include/linux/bpf.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_release' type-id='8bf3cff5' visibility='default' filepath='include/linux/bpf.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_free' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_get_next_key' type-id='45ef3730' visibility='default' filepath='include/linux/bpf.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_release_uref' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_lookup_elem_sys_only' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_lookup_elem' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_update_elem' type-id='65fcdb9c' visibility='default' filepath='include/linux/bpf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_delete_elem' type-id='bf8c5f5e' visibility='default' filepath='include/linux/bpf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='map_push_elem' type-id='aad51e56' visibility='default' filepath='include/linux/bpf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_pop_elem' type-id='bf8c5f5e' 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_peek_elem' type-id='bf8c5f5e' 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_get_ptr' type-id='2a3a4aec' visibility='default' filepath='include/linux/bpf.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_fd_put_ptr' type-id='b7f9d8e6' visibility='default' filepath='include/linux/bpf.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='map_gen_lookup' type-id='82ff4739' visibility='default' filepath='include/linux/bpf.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='map_fd_sys_lookup_elem' type-id='99577235' visibility='default' filepath='include/linux/bpf.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='map_seq_show_elem' type-id='81c90e99' visibility='default' filepath='include/linux/bpf.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='map_check_btf' type-id='098d4d92' visibility='default' filepath='include/linux/bpf.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='map_direct_value_addr' type-id='da4ee44b' visibility='default' filepath='include/linux/bpf.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_direct_value_meta' type-id='f6a079db' visibility='default' filepath='include/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='can_dev_rcv_lists' is-struct='yes' visibility='default' is-declaration-only='yes' id='e82476af'/>
+      <class-decl name='can_pkg_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='036e1e80'/>
+      <class-decl name='can_rcv_lists_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='8c8c8763'/>
+      <class-decl name='cftype' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='541' column='1' id='ea2ebeac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/cgroup-defs.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='file_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kf_ops' type-id='1f2a8949' visibility='default' filepath='include/linux/cgroup-defs.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/cgroup-defs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/cgroup-defs.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='read_u64' type-id='ad13fd93' visibility='default' filepath='include/linux/cgroup-defs.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='read_s64' type-id='ae18a37d' visibility='default' filepath='include/linux/cgroup-defs.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/cgroup-defs.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/cgroup-defs.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/cgroup-defs.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/cgroup-defs.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='write_u64' type-id='3e9fac96' visibility='default' filepath='include/linux/cgroup-defs.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_s64' type-id='2b0348f0' visibility='default' filepath='include/linux/cgroup-defs.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/cgroup-defs.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/cgroup-defs.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_rmap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='24' column='1' id='e09a048e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/cpu_rmap.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='used' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='obj' type-id='63e171df' visibility='default' filepath='include/linux/cpu_rmap.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='near' type-id='f443352a' visibility='default' filepath='include/linux/cpu_rmap.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='45' column='1' id='97aa083d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpuidle.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='16dc656a' visibility='default' filepath='include/linux/cpuidle.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='exit_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='power_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='target_residency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpuidle.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enter' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enter_dead' type-id='0ba194b9' visibility='default' filepath='include/linux/cpuidle.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enter_s2idle' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='69' 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='89' column='1' id='4ec43a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/conntrack.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unconfirmed' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dying' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry_operations' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='139' column='1' id='e4992400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_weak_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_hash' type-id='65cea51e' visibility='default' filepath='include/linux/dcache.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_compare' type-id='fb86b772' visibility='default' filepath='include/linux/dcache.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_delete' type-id='a50c1d00' visibility='default' filepath='include/linux/dcache.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_init' type-id='6241aa4f' visibility='default' filepath='include/linux/dcache.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_release' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_prune' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_iput' type-id='40363cbb' visibility='default' filepath='include/linux/dcache.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_dname' type-id='84618a95' visibility='default' filepath='include/linux/dcache.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_automount' type-id='da81d789' visibility='default' filepath='include/linux/dcache.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_manage' type-id='6eededc8' visibility='default' filepath='include/linux/dcache.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_real' type-id='3cce524c' visibility='default' filepath='include/linux/dcache.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='159' 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='946' column='1' id='ddd212e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifalias' type-id='e84913bd' visibility='default' filepath='include/linux/netdevice.h' line='948' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='107' column='1' id='8e586c5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altmap' type-id='62d0a96c' visibility='default' filepath='include/linux/memremap.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/memremap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ref' type-id='60219102' visibility='default' filepath='include/linux/memremap.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='internal_ref' type-id='818799b4' visibility='default' filepath='include/linux/memremap.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='include/linux/memremap.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='type' type-id='cc7210fc' visibility='default' filepath='include/linux/memremap.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/memremap.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ops' type-id='55917c32' visibility='default' filepath='include/linux/memremap.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_mq_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='30' column='1' id='386fe521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_sched' type-id='c2889977' visibility='default' filepath='include/linux/elevator.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit_sched' type-id='89340c26' visibility='default' filepath='include/linux/elevator.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_hctx' type-id='a2abb549' visibility='default' filepath='include/linux/elevator.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit_hctx' type-id='66288ae4' visibility='default' filepath='include/linux/elevator.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='depth_updated' type-id='a75080c6' visibility='default' filepath='include/linux/elevator.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allow_merge' type-id='1734c68b' visibility='default' filepath='include/linux/elevator.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio_merge' type-id='3ed0c5ec' visibility='default' filepath='include/linux/elevator.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='request_merge' type-id='f72cc247' visibility='default' filepath='include/linux/elevator.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='request_merged' type-id='b615a053' visibility='default' filepath='include/linux/elevator.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='requests_merged' type-id='40f624e9' visibility='default' filepath='include/linux/elevator.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='limit_depth' type-id='e46f66f3' visibility='default' filepath='include/linux/elevator.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prepare_request' type-id='639b44d1' visibility='default' filepath='include/linux/elevator.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='finish_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='insert_requests' type-id='60c9df2c' visibility='default' filepath='include/linux/elevator.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dispatch_request' type-id='a66a8231' visibility='default' filepath='include/linux/elevator.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='has_work' type-id='6ca30b05' visibility='default' filepath='include/linux/elevator.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='completed_request' type-id='300d6413' visibility='default' filepath='include/linux/elevator.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requeue_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='former_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='next_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='init_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='exit_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_info' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='141' column='1' id='faaac7a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib6_table' type-id='7156b317' visibility='default' filepath='include/net/ip6_fib.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib6_next' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib6_node' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='faf198da' visibility='default' filepath='include/net/ip6_fib.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib6_nsiblings' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fib6_ref' type-id='64615833' visibility='default' filepath='include/net/ip6_fib.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib6_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip6_fib.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib6_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fib6_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib6_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib6_prefsrc' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib6_metric' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='fib6_protocol' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='fib6_type' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='should_flush' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='dst_nocount' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='dst_nopolicy' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dst_host' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='fib6_destroying' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip6_fib.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fib6_nh' type-id='7be723ef' visibility='default' filepath='include/net/ip6_fib.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_table' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='360' column='1' id='7147e7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb6_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip6_fib.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb6_id' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb6_lock' type-id='fb4018a0' visibility='default' filepath='include/net/ip6_fib.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tb6_root' type-id='9f30e4ad' visibility='default' filepath='include/net/ip6_fib.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tb6_peers' type-id='27ebfa24' visibility='default' filepath='include/net/ip6_fib.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='367' 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='29' column='1' id='ef45f062'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/fib_notifier.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/fib_notifier.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_seq_read' type-id='3a0c781f' visibility='default' filepath='include/net/fib_notifier.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fib_dump' type-id='9def3eca' visibility='default' filepath='include/net/fib_notifier.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_notifier.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_notifier.h' line='35' column='1'/>
+        </data-member>
+      </class-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='e079fe29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' 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='72f469ec' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='f0981eeb' 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='33356d2c' 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='9c26ea89' visibility='default' filepath='include/net/fib_rules.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match' type-id='9ce2e6e7' visibility='default' filepath='include/net/fib_rules.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='configure' type-id='41323fc2' visibility='default' filepath='include/net/fib_rules.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42bc911b' visibility='default' filepath='include/net/fib_rules.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compare' type-id='98a3b427' visibility='default' filepath='include/net/fib_rules.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill' type-id='72fd300e' visibility='default' filepath='include/net/fib_rules.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nlmsg_payload' type-id='b3002d4b' visibility='default' filepath='include/net/fib_rules.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flush_cache' type-id='28375890' visibility='default' filepath='include/net/fib_rules.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nlgroup' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/fib_rules.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rules_list' type-id='72f469ec' visibility='default' filepath='include/net/fib_rules.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_rules.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fro_net' type-id='a2bff676' visibility='default' filepath='include/net/fib_rules.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_rules.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='234' column='1' id='a2b406b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb_num_default' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tb_data' type-id='1d2c2b85' visibility='default' filepath='include/net/ip_fib.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__data' type-id='c99b5ecd' visibility='default' filepath='include/net/ip_fib.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fqdir' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='9' column='1' id='84dbb257'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='high_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='low_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dist' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f' type-id='f6c3a7a5' visibility='default' filepath='include/net/inet_frag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/inet_frag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/net/inet_frag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rhashtable' type-id='9e095f93' visibility='default' filepath='include/net/inet_frag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mem' type-id='f22a8abb' visibility='default' filepath='include/net/inet_frag.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/net/inet_frag.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='def98e71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='35' 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='59' column='1' id='bd4dc4cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='8bbc0f7f' visibility='default' filepath='include/net/snmp.h' line='60' 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='64' column='1' id='b4bfe052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='65' 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='71' column='1' id='c7afdfb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='f0691bd3' visibility='default' filepath='include/net/snmp.h' line='72' 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='81' column='1' id='1f91fd06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in_device' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='25' column='1' id='4234e231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='64615833' 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='95e97e5e' 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='3a639063' 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='26479c18' 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='74bae2b6' 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='95e97e5e' 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='fb4018a0' 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='26479c18' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='002ac4a6' 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='002ac4a6' 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='002ac4a6' 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='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mr_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='arp_parms' type-id='affe0fe2' visibility='default' filepath='include/linux/inetdevice.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cnf' type-id='c2c09950' visibility='default' filepath='include/linux/inetdevice.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/inetdevice.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_dev' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='163' column='1' id='8db8de2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/if_inet6.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_tomb' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_qrv' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='mc_gq_running' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='mc_ifc_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='mc_dad_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_v1_seen' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mc_qi' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mc_qri' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mc_maxdelay' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mc_gq_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mc_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mc_dad_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ac_list' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='if_flags' type-id='3f1a6b60' visibility='default' filepath='include/net/if_inet6.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='desync_factor' type-id='19c2251e' visibility='default' filepath='include/net/if_inet6.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='rndid' type-id='d2f7b56a' visibility='default' filepath='include/net/if_inet6.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='tempaddr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='token' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='nd_parms' type-id='affe0fe2' visibility='default' filepath='include/net/if_inet6.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cnf' type-id='55e8af82' visibility='default' filepath='include/net/if_inet6.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='stats' type-id='0e97f526' visibility='default' filepath='include/net/if_inet6.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='rs_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rs_interval' type-id='3158a266' visibility='default' filepath='include/net/if_inet6.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='rs_probes' type-id='8f048e17' visibility='default' filepath='include/net/if_inet6.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/inetpeer.h' line='61' column='1' id='27ebfa24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/inetpeer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/inetpeer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total' type-id='95e97e5e' visibility='default' filepath='include/net/inetpeer.h' line='64' 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='8' column='1' id='be50a64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='found' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='invalid' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='insert' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='insert_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expect_new' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='expect_create' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='expect_delete' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='search_restart' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='20' 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='124' column='1' id='4816a146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='00c4cbac' visibility='default' filepath='include/net/ip.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/net/ip.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='4fa91678' visibility='default' filepath='include/net/ip.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip.h' line='131' 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='51' column='1' id='f52a1ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='2b89ba50' visibility='default' filepath='include/net/snmp.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/net/snmp.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='17' column='1' id='c2c09950'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='eaa32e2f' visibility='default' filepath='include/linux/inetdevice.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='9e942f0d' visibility='default' filepath='include/linux/inetdevice.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='state' type-id='f066dd3c' visibility='default' filepath='include/linux/inetdevice.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devconf' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='13' column='1' id='55e8af82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forwarding' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mtu6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='accept_ra' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accept_redirects' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='autoconf' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dad_transmits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rtr_solicits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtr_solicit_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='rtr_solicit_max_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rtr_solicit_delay' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='force_mld_version' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mldv1_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mldv2_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='use_tempaddr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='temp_valid_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='temp_prefered_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='regen_max_retry' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_desync_factor' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_addresses' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='accept_ra_defrtr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='accept_ra_min_hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='accept_ra_pinfo' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ignore_routes_with_linkdown' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accept_ra_rtr_pref' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rtr_probe_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='accept_ra_rt_info_min_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='accept_ra_rt_info_max_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='accept_ra_rt_table' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='proxy_ndp' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='accept_source_route' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='accept_ra_from_local' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='optimistic_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='use_optimistic' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='disable_ipv6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='drop_unicast_in_l2_multicast' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='accept_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='force_tllao' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndisc_notify' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='suppress_frag_ndisc' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='accept_ra_mtu' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='drop_unsolicited_na' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stable_secret' type-id='b2fc06b3' visibility='default' filepath='include/linux/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='use_oif_addrs_only' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='keep_addr_on_down' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='seg6_enabled' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='enhanced_dad' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='addr_gen_mode' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='disable_policy' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ndisc_tclass' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/linux/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_public_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='420' column='1' id='44b3a0ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_data' type-id='96efb615' visibility='default' filepath='include/net/iw_handler.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='libipw' type-id='29244949' visibility='default' filepath='include/net/iw_handler.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='8696da2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freelist' type-id='63e171df' 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='7359adad' 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='02f11ed4' 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='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_mib' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='104' column='1' id='e222a326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='1868bbfa' visibility='default' filepath='include/net/snmp.h' line='105' 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='110' column='1' id='7f2c5e96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='4fbdefa2' visibility='default' filepath='include/net/snmp.h' line='111' 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='c653aac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='a6d2fa52' 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='72f469ec' 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='95e97e5e' 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='b50a4934' visibility='default' filepath='include/linux/list_lru.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockdep_map' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='472' column='1' id='d34a605e'/>
+      <class-decl name='lruvec_stat' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='101' column='1' id='f8009817'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='52f6d451' visibility='default' filepath='include/linux/memcontrol.h' line='102' 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='95' column='1' id='e0324306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='position' type-id='223696fb' visibility='default' filepath='include/linux/memcontrol.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='98' 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='144' column='1' id='ad98c82f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eventfd' type-id='71f2e203' visibility='default' filepath='include/linux/memcontrol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='threshold' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='146' 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='109' column='1' id='366e0ade'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/memcontrol.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='c99b5ecd' visibility='default' filepath='include/linux/memcontrol.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mini_Qdisc' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='1307' column='1' id='b10d582f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_list' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='1311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_queue' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='600' column='1' id='49a7c5a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qdisc_sleeping' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tx_maxrate' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='trans_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sb_dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_xmit_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='xmit_lock_owner' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='trans_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dql' type-id='471cb386' visibility='default' filepath='include/linux/netdevice.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_rx_queue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='752' column='1' id='f12ac4ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rps_map' type-id='f30dbff5' visibility='default' filepath='include/linux/netdevice.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps_flow_table' type-id='deff2378' visibility='default' filepath='include/linux/netdevice.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='xdp_rxq' type-id='eb0d6f26' visibility='default' filepath='include/linux/netdevice.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='767' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_tc_txq' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='814' column='1' id='f1e1eb79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='offset' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='816' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='75' column='1' id='a27aef61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='117abbea' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_dccp_net' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='47' column='1' id='ddb2f0ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dccp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dccp_timeout' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='161' column='1' id='602fd1a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='c8fa3070' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_generic_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='21' column='1' id='80487c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_gre_net' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='66' column='1' id='ef266e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keymap_list' type-id='72f469ec' visibility='default' filepath='include/net/netns/conntrack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='101' column='1' id='85c08b52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_hook_entries' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hooks' type-id='84607bca' visibility='default' filepath='include/linux/netfilter.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_icmp_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='42' column='1' id='8cc9c55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_sctp_net' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='54' column='1' id='c91839d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_tcp_net' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='25' column='1' id='a2e01929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='27cbf0c8' visibility='default' filepath='include/net/netns/conntrack.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tcp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tcp_be_liberal' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tcp_max_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_udp_net' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='38' column='1' id='328aff41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='39' 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='512' column='1' id='3490ee41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_cpu_context' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='809' column='1' id='4448fdd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d67acd5' visibility='default' filepath='include/linux/perf_event.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='task_ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='active_oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hrtimer_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hrtimer_interval' type-id='fbc017ef' visibility='default' filepath='include/linux/perf_event.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hrtimer_active' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_cb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sched_cb_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='828' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_device' size-in-bits='11456' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='361' column='1' id='7c1f8187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdio' type-id='f3a32dbb' visibility='default' filepath='include/linux/phy.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='drv' type-id='e812884b' visibility='default' filepath='include/linux/phy.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='c45_ids' type-id='0463cbfd' visibility='default' filepath='include/linux/phy.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_c45' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_internal' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_pseudo_fixed_link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_gigabit_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='has_fixups' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='suspended_by_mdio_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='sysfs_links' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='loopback_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='autoneg' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='autoneg_complete' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='interrupts' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='state' type-id='d29ba889' visibility='default' filepath='include/linux/phy.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='dev_flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='interface' type-id='d61bf978' visibility='default' filepath='include/linux/phy.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='duplex' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='asym_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='supported' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='lp_advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='adv_old' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='eee_broken_modes' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='state_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/phy.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='phylink' type-id='56f3c6ca' visibility='default' filepath='include/linux/phy.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='attached_dev' type-id='68a2d05b' visibility='default' filepath='include/linux/phy.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='mdix' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11016'>
+          <var-decl name='mdix_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='phy_link_change' type-id='8a09feb6' visibility='default' filepath='include/linux/phy.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='adjust_link' type-id='548eee3a' visibility='default' filepath='include/linux/phy.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='450' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pipe_buf_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='75' column='1' id='ed6c59ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='confirm' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='941a57ca' visibility='default' filepath='include/linux/pipe_fs_i.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='steal' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='c2ab7955' visibility='default' filepath='include/linux/pipe_fs_i.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prot_inuse' size-in-bits='2048' is-struct='yes' visibility='default' filepath='net/core/sock.c' line='3263' column='1' id='ac763c5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='93e41790' visibility='default' filepath='net/core/sock.c' line='3264' 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='956e764e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='e14c3b11' 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='0955670c' 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='19c2251e' 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='5867ed7f' 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='91ce1af9' 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='4e00dfcd' visibility='default' filepath='include/linux/psi_types.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_info' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='527' column='1' id='c26e4ad8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqio_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/quota.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='files' type-id='e6ff92fb' visibility='default' filepath='include/linux/quota.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info' type-id='83ae09a1' visibility='default' filepath='include/linux/quota.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ops' type-id='59bd9302' visibility='default' filepath='include/linux/quota.h' line='532' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ring_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='kernel/events/internal.h' line='13' column='1' id='6efee8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='kernel/events/internal.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='kernel/events/internal.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_pages' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overwrite' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='paused' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='poll' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='kernel/events/internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lost' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='watermark' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='aux_watermark' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='kernel/events/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='kernel/events/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mmap_locked' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmap_user' type-id='273a7d34' visibility='default' filepath='kernel/events/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='aux_head' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='aux_nest' type-id='f0981eeb' visibility='default' filepath='kernel/events/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='aux_wakeup' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='aux_pgoff' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='aux_nr_pages' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='aux_overwrite' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='aux_mmap_count' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='aux_mmap_locked' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='kernel/events/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='aux_refcount' type-id='64615833' visibility='default' filepath='kernel/events/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_pages' type-id='63e171df' visibility='default' filepath='kernel/events/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_priv' type-id='eaa32e2f' visibility='default' filepath='kernel/events/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='user_page' type-id='4b860c99' visibility='default' filepath='kernel/events/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='data_pages' type-id='baf98fd3' visibility='default' filepath='kernel/events/internal.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='root_domain' size-in-bits='14976' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='747' column='1' id='9cdca91a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rto_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='span' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='online' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='overload' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='overutilized' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dlo_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dlo_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dl_bw' type-id='51a92649' visibility='default' filepath='kernel/sched/sched.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpudl' type-id='a9cef929' visibility='default' filepath='kernel/sched/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rto_push_work' type-id='9281c70f' visibility='default' filepath='kernel/sched/sched.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rto_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rto_loop' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rto_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rto_loop_next' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rto_loop_start' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rto_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cpupri' type-id='afe3b3de' visibility='default' filepath='kernel/sched/sched.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='max_cpu_capacity' type-id='12dbc6b5' visibility='default' filepath='kernel/sched/sched.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pd' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14720'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='805' 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='185' column='1' id='384b6d84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/ip6_fib.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt6i_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rt6i_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rt6i_gateway' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rt6i_idev' type-id='f026b16b' visibility='default' filepath='include/net/ip6_fib.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rt6i_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rt6i_uncached' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rt6i_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/ip6_fib.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rt6i_nfheader_len' type-id='8efea9e5' visibility='default' filepath='include/net/ip6_fib.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='202' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='338' column='1' id='aa112583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fib_route_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib_rt_entries' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fib_rt_cache' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_discarded_routes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fib_rt_alloc' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_rt_uncache' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='347' 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='237' column='1' id='3ac6deac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bitmap' type-id='f05e8e77' visibility='default' filepath='kernel/sched/sched.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='6f53db1b' visibility='default' filepath='kernel/sched/sched.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sb_writers' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1467' column='1' id='fb476a2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_unfrozen' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rw_sem' type-id='a09ef5a6' visibility='default' filepath='include/linux/fs.h' line='1470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='72' column='1' id='1706cf19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='child' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='f3dcd492' visibility='default' filepath='include/linux/sched/topology.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='busy_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='imbalance_pct' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_nice_tries' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nohz_idle' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='last_balance' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='balance_interval' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='nr_balance_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_newidle_lb_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_decay_max_lb_cost' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_scan_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lb_count' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lb_failed' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lb_balanced' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lb_imbalance' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lb_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lb_hot_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lb_nobusyg' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='lb_nobusyq' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='alb_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='alb_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='alb_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='sbe_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sbe_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='sbe_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sbf_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='sbf_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sbf_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ttwu_wake_remote' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ttwu_move_affine' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='ttwu_move_balance' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/sched/topology.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='52c6c1a9' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='shared' type-id='774b23cf' visibility='default' filepath='include/linux/sched/topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='span_weight' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='span' type-id='c99b5ecd' visibility='default' filepath='include/linux/sched/topology.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seg6_pernet_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='990cce78'/>
+      <class-decl name='sfp_bus' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc52ca8d'/>
+      <class-decl name='shrinker' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='60' column='1' id='27cb404f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_objects' type-id='cd2cc9e1' 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='cd2cc9e1' 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='bd54fe1a' 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='95e97e5e' 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='f0981eeb' 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='72f469ec' 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='95e97e5e' 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='5403cb36' visibility='default' filepath='include/linux/shrinker.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='691' column='1' id='ae8bfcdd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='da6f1b1a' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='a6d66544' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='b24a5a7e' visibility='default' filepath='include/linux/skbuff.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb' type-id='36d7f119' visibility='default' filepath='include/linux/skbuff.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='271a40b8' visibility='default' filepath='include/linux/skbuff.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='_nfct' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mac_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='hdr_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_mapping' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='__cloned_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cloned' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='nohdr' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fclone' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='peeked' type-id='8f048e17' 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='head_frag' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='pfmemalloc' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='active_extensions' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='headers_start' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__pkt_type_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pkt_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ignore_df' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='nf_trace' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='ip_summed' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ooo_okay' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l4_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sw_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wifi_acked_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='wifi_acked' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_fcs' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='encapsulation' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='encap_hdr_csum' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='csum_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='__pkt_vlan_present_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vlan_present' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='csum_complete_sw' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='csum_level' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='csum_not_inet' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dst_pending_confirm' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='ndisc_nodetype' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipvs_property' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='inner_protocol_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='remcsum_offload' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='tc_skip_classify' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='tc_at_ingress' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='redirected' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='from_ingress' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='tc_index' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='' type-id='b4fc55b7' visibility='default' filepath='include/linux/skbuff.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='priority' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='skb_iif' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='hash' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vlan_proto' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='vlan_tci' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='' type-id='8c3ee840' visibility='default' filepath='include/linux/skbuff.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='secmark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='' type-id='9c81e675' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='' type-id='b97daab4' visibility='default' filepath='include/linux/skbuff.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='inner_transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='inner_network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1392'>
+          <var-decl name='inner_mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='headers_end' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tail' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='end' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='head' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='truesize' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extensions' type-id='374692c7' visibility='default' filepath='include/linux/skbuff.h' line='896' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_cgroup_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1' id='8544f103'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='de05b94c' visibility='default' filepath='include/linux/cgroup-defs.h' line='798' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_common' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='149' column='1' id='5999c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='f126afef' visibility='default' filepath='include/net/sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='5d6a1e78' visibility='default' filepath='include/net/sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d1c6b54d' visibility='default' filepath='include/net/sock.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skc_family' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='skc_state' type-id='75a392dc' visibility='default' filepath='include/net/sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_reuse' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skc_reuseport' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='skc_ipv6only' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='skc_net_refcnt' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='skc_bound_dev_if' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9e20c58f' visibility='default' filepath='include/net/sock.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='skc_prot' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_net' type-id='c9df1e6c' visibility='default' filepath='include/net/sock.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='skc_v6_daddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='skc_v6_rcv_saddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='skc_cookie' type-id='28ee064c' visibility='default' filepath='include/net/sock.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='56935795' visibility='default' filepath='include/net/sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='skc_dontcopy_begin' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='38f5bda8' visibility='default' filepath='include/net/sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='skc_tx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='skc_rx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='' type-id='9e121764' visibility='default' filepath='include/net/sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='skc_refcnt' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skc_dontcopy_end' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='5547e6b1' visibility='default' filepath='include/net/sock.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_fastopen_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1676' column='1' id='f77d4717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='5b02a6fc' visibility='default' filepath='include/net/tcp.h' line='1677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/tcp.h' line='1679' 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='92' column='1' id='e1f906a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='d2baa450' visibility='default' filepath='include/net/snmp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tipc_bearer' is-struct='yes' visibility='default' is-declaration-only='yes' id='10ec1ded'/>
+      <class-decl name='tty_bufhead' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='86' column='1' id='6b1bde38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priority' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sentinel' type-id='2f351d1f' visibility='default' filepath='include/linux/tty.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='free' type-id='77df194e' visibility='default' filepath='include/linux/tty.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mem_used' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mem_limit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tail' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='255' column='1' id='b8553c6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='dd354844' visibility='default' filepath='include/linux/tty_driver.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='install' type-id='b8fa1170' visibility='default' filepath='include/linux/tty_driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='8127e1dd' visibility='default' filepath='include/linux/tty_driver.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='574ff926' visibility='default' filepath='include/linux/tty_driver.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='35f07b8f' visibility='default' filepath='include/linux/tty_driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='shutdown' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='74005b57' visibility='default' filepath='include/linux/tty_driver.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_char' type-id='20a1c8e7' visibility='default' filepath='include/linux/tty_driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flush_chars' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_room' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chars_in_buffer' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ioctl' type-id='18d7129a' visibility='default' filepath='include/linux/tty_driver.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_ioctl' type-id='0b8da5f6' visibility='default' filepath='include/linux/tty_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_driver.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='throttle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='unthrottle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stop' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hangup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='break_ctl' type-id='61019833' visibility='default' filepath='include/linux/tty_driver.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_ldisc' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wait_until_sent' type-id='bc0ca82e' visibility='default' filepath='include/linux/tty_driver.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='send_xchar' type-id='f3d2e9a7' visibility='default' filepath='include/linux/tty_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tiocmget' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tiocmset' type-id='24725b0c' visibility='default' filepath='include/linux/tty_driver.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resize' type-id='20174b1f' visibility='default' filepath='include/linux/tty_driver.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_termiox' type-id='ebf0489c' visibility='default' filepath='include/linux/tty_driver.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_icount' type-id='9cc1e100' visibility='default' filepath='include/linux/tty_driver.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='set_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='show_fdinfo' type-id='25c6126f' visibility='default' filepath='include/linux/tty_driver.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='proc_show' type-id='0131eb61' visibility='default' filepath='include/linux/tty_driver.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_rq' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='856' column='1' id='30847fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bucket' type-id='ec2b1499' visibility='default' filepath='kernel/sched/sched.h' line='858' 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='98' column='1' id='89e527b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='307ac9b4' visibility='default' filepath='include/net/snmp.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='userfaultfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='526b1662'/>
+      <class-decl name='vm_operations_struct' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='549' column='1' id='19795245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='split' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='6e731d78' visibility='default' filepath='include/linux/mm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='huge_fault' type-id='5e15576d' visibility='default' filepath='include/linux/mm.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_pages' type-id='8f17d05e' visibility='default' filepath='include/linux/mm.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pagesize' type-id='1a17e40d' visibility='default' filepath='include/linux/mm.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pfn_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='access' type-id='6850e780' visibility='default' filepath='include/linux/mm.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='e803acd0' visibility='default' filepath='include/linux/mm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='find_special_page' type-id='d9e60bb2' visibility='default' filepath='include/linux/mm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='614' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='504855b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' 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='eaa32e2f' 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='67119c17' 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='72f469ec' visibility='default' filepath='include/linux/wait.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wireless_dev' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4973' column='1' id='3ce3a3e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='4974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg80211.h' line='4979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mgmt_registrations' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mgmt_registrations_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mtx' type-id='925167dc' visibility='default' filepath='include/net/cfg80211.h' line='4986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='use_4addr' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='is_running' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='address' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='4993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mesh_id_up_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='conn' type-id='6dbc8e18' visibility='default' filepath='include/net/cfg80211.h' line='4995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='connect_keys' type-id='561a36db' visibility='default' filepath='include/net/cfg80211.h' line='4996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='conn_bss_type' type-id='cb952348' visibility='default' filepath='include/net/cfg80211.h' line='4997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='conn_owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disconnect_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='disconnect_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='5001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_bss' type-id='1819dec8' visibility='default' filepath='include/net/cfg80211.h' line='5006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='preset_chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='5007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='5008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ibss_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='ibss_dfs_possible' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2640'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='ap_unexpected_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='5018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='5020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2792'>
+          <var-decl name='cac_started' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='cac_start_time' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='5024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cac_time_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='5025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cqm_config' type-id='ee527710' visibility='default' filepath='include/net/cfg80211.h' line='5043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pmsr_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='pmsr_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='pmsr_free_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='5049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='5050' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='326' column='1' id='8ae2fb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpan_phy' type-id='82398c35' visibility='default' filepath='include/net/cfg802154.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='95e97e5e' visibility='default' filepath='include/net/cfg802154.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg802154.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg802154.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='header_ops' type-id='790774ef' visibility='default' filepath='include/net/cfg802154.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lowpan_dev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg802154.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='pan_id' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='short_addr' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='max_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='csma_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='664'>
+          <var-decl name='frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='lbt' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='promiscuous_mode' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='ackreq' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='361' 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='15' column='1' id='9b61d1a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='sbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='sbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='21' 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='798' column='1' id='4edc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_map' type-id='a0955e2b' visibility='default' filepath='include/linux/netdevice.h' line='800' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_table' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='223' column='1' id='469df90e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='b6316a7f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='table_init' type-id='e83d6bbe' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='639bec1b' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='242' 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='289' column='1' id='1f1f4d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recent_rotated' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recent_scanned' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='380' column='1' id='6a96185e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rmem_alloc' type-id='49178f86' 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='95e97e5e' 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='0fbf3cfd' 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='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='384' 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='605' column='1' id='8f548118'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='608' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='7da7300e' visibility='default' filepath='include/asm-generic/local64.h' line='24' column='1' id='2b04c975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='dd91f264' visibility='default' filepath='include/asm-generic/local64.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__29' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='c9df1e6c' visibility='default' filepath='include/net/net_namespace.h' line='311' column='1' id='0a0aec0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/net_namespace.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='5e3b2ede'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='112' 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='include/linux/lockref.h' line='30' column='1' id='7a58bf78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='95e97e5e' visibility='default' filepath='include/linux/lockref.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='50' column='1' id='7a2c0764'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' 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='654' column='1' id='8c6b5470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='656' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__36' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='7799da43' visibility='default' filepath='include/linux/siphash.h' line='20' column='1' id='a1908dcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='24a375b2' visibility='default' filepath='include/linux/siphash.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__26' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='26dfc30c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='objects' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='72b61a2d' size-in-bits='64' id='9baaf905'/>
+      <pointer-type-def type-id='9bf7ec75' size-in-bits='64' id='e649198d'/>
+      <pointer-type-def type-id='425496d7' size-in-bits='64' id='6829b047'/>
+      <pointer-type-def type-id='47d6ff44' size-in-bits='64' id='85741a2a'/>
+      <qualified-type-def type-id='8a3b11ed' const='yes' id='b56a1102'/>
+      <pointer-type-def type-id='3cea21ed' size-in-bits='64' id='ab932c45'/>
+      <qualified-type-def type-id='7dffcde2' const='yes' id='b8ae588d'/>
+      <pointer-type-def type-id='de5211b8' size-in-bits='64' id='8d31a8d6'/>
+      <pointer-type-def type-id='0c45e0bb' size-in-bits='64' id='e3008443'/>
+      <qualified-type-def type-id='f6e7855b' const='yes' id='60407282'/>
+      <pointer-type-def type-id='c8e0fb8e' size-in-bits='64' id='de2c232c'/>
+      <qualified-type-def type-id='9218f3f6' const='yes' id='12cfd48b'/>
+      <qualified-type-def type-id='88ef330b' const='yes' id='99cf04a8'/>
+      <qualified-type-def type-id='ba44c7d8' const='yes' id='68c47b91'/>
+      <pointer-type-def type-id='f1415d4d' size-in-bits='64' id='30e60925'/>
+      <qualified-type-def type-id='b77325d2' const='yes' id='2d144a5b'/>
+      <qualified-type-def type-id='2ba71bf0' const='yes' id='4e267e15'/>
+      <pointer-type-def type-id='051f9336' size-in-bits='64' id='2cb49514'/>
+      <qualified-type-def type-id='6696ef79' const='yes' id='ab23f61a'/>
+      <pointer-type-def type-id='ecd54c0e' size-in-bits='64' id='f7c6dcac'/>
+      <qualified-type-def type-id='54718f09' const='yes' id='c408da30'/>
+      <pointer-type-def type-id='cf470d6a' size-in-bits='64' id='8cd9dbc0'/>
+      <pointer-type-def type-id='6e03f2ca' size-in-bits='64' id='103756a0'/>
+      <qualified-type-def type-id='002ac4a6' const='yes' id='ea86de29'/>
+      <qualified-type-def type-id='f0981eeb' const='yes' id='20f5f452'/>
+      <pointer-type-def type-id='6a54ab42' size-in-bits='64' id='cb49d4b8'/>
+      <pointer-type-def type-id='f3d147c3' size-in-bits='64' id='740b5503'/>
+      <pointer-type-def type-id='64c36f53' size-in-bits='64' id='d589c913'/>
+      <pointer-type-def type-id='7c7d6006' size-in-bits='64' id='1c66bddc'/>
+      <pointer-type-def type-id='beafd747' size-in-bits='64' id='a586bbcf'/>
+      <pointer-type-def type-id='91a515f9' size-in-bits='64' id='631dc3c1'/>
+      <pointer-type-def type-id='d83969a6' size-in-bits='64' id='2993adbc'/>
+      <pointer-type-def type-id='3fc3d262' size-in-bits='64' id='42988600'/>
+      <pointer-type-def type-id='ec1aac50' size-in-bits='64' id='26f00576'/>
+      <pointer-type-def type-id='a8d380d5' size-in-bits='64' id='af836b25'/>
+      <pointer-type-def type-id='acfd9368' size-in-bits='64' id='70f1634e'/>
+      <pointer-type-def type-id='772a4ddf' size-in-bits='64' id='141b6427'/>
+      <pointer-type-def type-id='c21690c0' size-in-bits='64' id='3ce3447a'/>
+      <pointer-type-def type-id='7f4a5e53' size-in-bits='64' id='d7c38177'/>
+      <pointer-type-def type-id='aaa166ff' size-in-bits='64' id='177a4437'/>
+      <enum-decl name='freq_qos_req_type' filepath='include/linux/pm_qos.h' line='84' column='1' id='1df5cca8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FREQ_QOS_MIN' value='1'/>
+        <enumerator name='FREQ_QOS_MAX' value='2'/>
+      </enum-decl>
+      <enum-decl name='pid_type' filepath='include/linux/pid.h' line='9' column='1' id='ce78cf46'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='fb0c2987' size-in-bits='64' id='731257ff'/>
+      <pointer-type-def type-id='2f5a60be' size-in-bits='64' id='21e53d44'/>
+      <pointer-type-def type-id='7ca99f8c' size-in-bits='64' id='1351457a'/>
+      <pointer-type-def type-id='9441bb37' size-in-bits='64' id='1ea8c5af'/>
+      <pointer-type-def type-id='aadc8ce9' size-in-bits='64' id='994d9d61'/>
+      <pointer-type-def type-id='43489bca' size-in-bits='64' id='ba18e248'/>
+      <pointer-type-def type-id='3482ac54' size-in-bits='64' id='d7a1e3c2'/>
+      <pointer-type-def type-id='5113b296' size-in-bits='64' id='70487b28'/>
+      <pointer-type-def type-id='690d3bc2' size-in-bits='64' id='b6633a3c'/>
+      <pointer-type-def type-id='923a53bf' size-in-bits='64' id='79efa3b3'/>
+      <pointer-type-def type-id='1a55bf13' size-in-bits='64' id='824beef7'/>
+      <pointer-type-def type-id='b3bf9ca3' size-in-bits='64' id='ab4f7fd7'/>
+      <pointer-type-def type-id='d442aa81' size-in-bits='64' id='0954c675'/>
+      <pointer-type-def type-id='47a8f7d6' size-in-bits='64' id='320c9cb0'/>
+      <pointer-type-def type-id='fc8b497c' size-in-bits='64' id='0023218e'/>
+      <pointer-type-def type-id='a21db860' size-in-bits='64' id='f45f2842'/>
+      <pointer-type-def type-id='4e83077d' size-in-bits='64' id='b31b5e29'/>
+      <pointer-type-def type-id='0f83e831' size-in-bits='64' id='22aed5fd'/>
+      <pointer-type-def type-id='0be333ab' size-in-bits='64' id='a0f5247f'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='64' id='e4266c7e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='62778ae5' size-in-bits='infinite' id='7290550d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='c7da7875' size-in-bits='64' id='7c4a6c91'/>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='64' id='5fd0d2fb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='edac1e8f' size-in-bits='64' id='42c7aae7'/>
+      <pointer-type-def type-id='e55856e5' size-in-bits='64' id='d910a7dd'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='640' id='e4e01aff'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='4c16d0cc' size-in-bits='64' id='a9cc7986'/>
+      <pointer-type-def type-id='25dc4075' size-in-bits='64' id='58ed56f5'/>
+      <pointer-type-def type-id='37688d8e' size-in-bits='64' id='950eceb8'/>
+      <pointer-type-def type-id='a388c264' size-in-bits='64' id='d4f2b9b2'/>
+      <pointer-type-def type-id='45092453' size-in-bits='64' id='f59f5033'/>
+      <pointer-type-def type-id='b71b307b' size-in-bits='64' id='a42934eb'/>
+      <pointer-type-def type-id='101eeec5' size-in-bits='64' id='90cd86e5'/>
+      <pointer-type-def type-id='54406315' size-in-bits='64' id='c876a7a5'/>
+      <pointer-type-def type-id='605b61bb' size-in-bits='64' id='2871909b'/>
+      <pointer-type-def type-id='7203ee09' size-in-bits='64' id='d2524501'/>
+      <pointer-type-def type-id='28e1d9ae' size-in-bits='64' id='278a4544'/>
+      <pointer-type-def type-id='dbc9a936' size-in-bits='64' id='90956edc'/>
+      <pointer-type-def type-id='ff751355' size-in-bits='64' id='1d22b7e5'/>
+      <pointer-type-def type-id='ee14fd94' size-in-bits='64' id='13103032'/>
+      <pointer-type-def type-id='f308a7ce' size-in-bits='64' id='22aa3c54'/>
+      <pointer-type-def type-id='053f72e5' size-in-bits='64' id='9d632ac5'/>
+      <pointer-type-def type-id='ec77b5b8' size-in-bits='64' id='d272d4d6'/>
+      <pointer-type-def type-id='572fbdca' size-in-bits='64' id='2027e7a0'/>
+      <typedef-decl name='__kernel_clock_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='91' column='1' id='880ebc01'/>
+      <typedef-decl name='__kernel_time64_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='90' column='1' id='3d9e85cc'/>
+      <typedef-decl name='__kernel_timer_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='92' column='1' id='c28acba6'/>
+      <typedef-decl name='arch_rwlock_t' type-id='319e0e18' filepath='include/asm-generic/qrwlock_types.h' line='27' column='1' id='fed2d8ee'/>
+      <typedef-decl name='blkcnt_t' type-id='91ce1af9' filepath='include/linux/types.h' line='131' column='1' id='17345459'/>
+      <typedef-decl name='busy_fn' type-id='06c81b64' filepath='include/linux/blk-mq.h' line='141' column='1' id='53cc9bd6'/>
+      <typedef-decl name='cleanup_rq_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='143' column='1' id='3577ed21'/>
+      <typedef-decl name='commit_rqs_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='125' column='1' id='ac1c385d'/>
+      <typedef-decl name='complete_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='142' column='1' id='f7915bc8'/>
+      <typedef-decl name='cpu_stop_fn_t' type-id='b9b212f5' filepath='include/linux/stop_machine.h' line='20' column='1' id='87dfefa3'/>
+      <typedef-decl name='exit_hctx_fn' type-id='4f1e6b9a' filepath='include/linux/blk-mq.h' line='130' column='1' id='e6f81ea9'/>
+      <typedef-decl name='exit_request_fn' type-id='9d05a3e9' filepath='include/linux/blk-mq.h' line='133' column='1' id='d63f4ff3'/>
+      <typedef-decl name='get_budget_fn' type-id='c2be64d1' filepath='include/linux/blk-mq.h' line='126' column='1' id='f47b0345'/>
+      <typedef-decl name='init_hctx_fn' type-id='02e8b0a1' filepath='include/linux/blk-mq.h' line='129' column='1' id='76c7c9df'/>
+      <typedef-decl name='init_request_fn' type-id='722249f6' filepath='include/linux/blk-mq.h' line='131' column='1' id='4e958389'/>
+      <typedef-decl name='map_queues_fn' type-id='640838f9' filepath='include/linux/blk-mq.h' line='140' column='1' id='6e9b911c'/>
+      <typedef-decl name='mempool_alloc_t' type-id='6f7f4c91' filepath='include/linux/mempool.h' line='13' column='1' id='94d117ca'/>
+      <typedef-decl name='mempool_free_t' type-id='c039af2e' filepath='include/linux/mempool.h' line='14' column='1' id='27f2e0d9'/>
+      <typedef-decl name='nlink_t' type-id='19c2251e' filepath='include/linux/types.h' line='20' column='1' id='6fa67d85'/>
+      <typedef-decl name='old_time32_t' type-id='a7832498' filepath='include/vdso/time32.h' line='5' column='1' id='5d60da55'/>
+      <typedef-decl name='pgdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='17' column='1' id='df6d7e75'/>
+      <typedef-decl name='poll_fn' type-id='8ce1651f' filepath='include/linux/blk-mq.h' line='139' column='1' id='9a083a6e'/>
+      <typedef-decl name='proc_write_t' type-id='f71f3e00' filepath='include/linux/proc_fs.h' line='17' column='1' id='7c2b18ab'/>
+      <typedef-decl name='pteval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='14' column='1' id='e044eb0d'/>
+      <typedef-decl name='put_budget_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='127' column='1' id='695ed59c'/>
+      <typedef-decl name='queue_rq_fn' type-id='32672900' filepath='include/linux/blk-mq.h' line='123' column='1' id='aa8737f6'/>
+      <typedef-decl name='request_key_actor_t' type-id='a4946104' filepath='include/linux/key-type.h' line='41' column='1' id='99147724'/>
+      <typedef-decl name='rx_handler_func_t' type-id='77c9a241' filepath='include/linux/netdevice.h' line='432' column='1' id='9193647b'/>
+      <typedef-decl name='sigval_t' type-id='a094b870' filepath='include/uapi/asm-generic/siginfo.h' line='11' column='1' id='95506cfb'/>
+      <typedef-decl name='smp_call_func_t' type-id='b7f9d8e6' filepath='include/linux/smp.h' line='17' column='1' id='89714567'/>
+      <typedef-decl name='socket_lock_t' type-id='a865a4bb' filepath='include/net/sock.h' line='110' column='1' id='40d8a3da'/>
+      <typedef-decl name='timeout_fn' type-id='9b58f3d9' filepath='include/linux/blk-mq.h' line='128' column='1' id='9509b3ac'/>
+      <pointer-type-def type-id='e0e73a01' size-in-bits='64' id='99577235'/>
+      <typedef-decl name='uuid_t' type-id='8425539a' filepath='include/linux/uuid.h' line='18' column='1' id='ec55eb74'/>
+      <pointer-type-def type-id='b5975902' size-in-bits='64' id='9917918c'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='256' id='20b279f0'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='a24978a1' size-in-bits='64' id='72835629'/>
+      <union-decl name='__anonymous_union__14' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1' id='051df3c3'>
+        <data-member access='public'>
+          <var-decl name='wakeup_events' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='wakeup_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='382' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1' id='3089c176'>
+        <data-member access='public'>
+          <var-decl name='bp_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kprobe_func' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='uprobe_path' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='config1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='390' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1' id='38c76117'>
+        <data-member access='public'>
+          <var-decl name='bp_len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kprobe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='config2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='396' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1' id='de6d2b01'>
+        <data-member access='public'>
+          <var-decl name='sample_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sample_freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1' id='201d54e5'>
+        <data-member access='public'>
+          <var-decl name='' type-id='1acab550' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sysctl.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='1216' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='75' column='1' id='8305e8d4'>
+        <data-member access='public'>
+          <var-decl name='' type-id='22e2627b' visibility='default' filepath='mm/slab.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='b5fecf67' visibility='default' filepath='mm/slab.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='768' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1' id='47a85f98'>
+        <data-member access='public'>
+          <var-decl name='' type-id='e816fcaa' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='35e31cc2' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='17578164' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='f9c5ea3e' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='c0044425' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a56104f' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1' id='1a99b3b8'>
+        <data-member access='public'>
+          <var-decl name='s' type-id='88d8a388' visibility='default' filepath='include/net/netns/generic.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='baf98fd3' visibility='default' filepath='include/net/netns/generic.h' line='35' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='67f3b119'>
+        <data-member access='public'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='fs/proc/internal.h' line='44' column='1' id='1371a02f'>
+        <data-member access='public'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='fs/proc/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='single_show' type-id='0131eb61' visibility='default' filepath='fs/proc/internal.h' line='46' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='680' column='1' id='3ee18b51'>
+        <data-member access='public'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='719' column='1' id='cbd4a95b'>
+        <data-member access='public'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='721' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='738' column='1' id='d1afa4fe'>
+        <data-member access='public'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='743' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1' id='c4e140b8'>
+        <data-member access='public'>
+          <var-decl name='_addr_lsb' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_addr_bnd' type-id='ea0e6645' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_addr_pkey' type-id='8a41173c' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='93' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='413' column='1' id='fc714247'>
+        <data-member access='public'>
+          <var-decl name='sk_send_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp_rtx_queue' type-id='dec44472' visibility='default' filepath='include/net/sock.h' line='415' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='397' column='1' id='a29f8367'>
+        <data-member access='public'>
+          <var-decl name='sk_wq' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sk_wq_raw' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='399' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='526' column='1' id='b3414a3c'>
+        <data-member access='public'>
+          <var-decl name='sk_peer_lock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='156952c4' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1' id='c3ec14d0'>
+        <data-member access='public'>
+          <var-decl name='extent' type-id='df6d2206' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='e873af3e' visibility='default' filepath='include/linux/user_namespace.h' line='28' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='6d22a61b' size-in-bits='64' id='34c443b7'/>
+      <pointer-type-def type-id='a66ce823' size-in-bits='64' id='7e5b15cf'/>
+      <pointer-type-def type-id='8422a42a' size-in-bits='64' id='f68ddecc'/>
+      <pointer-type-def type-id='b98b24d0' size-in-bits='64' id='d6965222'/>
+      <pointer-type-def type-id='56958353' size-in-bits='64' id='ce828d9f'/>
+      <pointer-type-def type-id='165b46a0' size-in-bits='64' id='9f403612'/>
+      <pointer-type-def type-id='4c671f3a' size-in-bits='64' id='79b8da5c'/>
+      <pointer-type-def type-id='75685cad' size-in-bits='64' id='bf17d761'/>
+      <pointer-type-def type-id='8e9eec3c' size-in-bits='64' id='f48b73f6'/>
+      <pointer-type-def type-id='fae72313' size-in-bits='64' id='b36896a7'/>
+      <pointer-type-def type-id='0ef969d4' size-in-bits='64' id='87f6a50e'/>
+      <pointer-type-def type-id='a9237415' size-in-bits='64' id='54d7d559'/>
+      <pointer-type-def type-id='7a592779' size-in-bits='64' id='a8564695'/>
+      <pointer-type-def type-id='0627f2fd' size-in-bits='64' id='754d9fe1'/>
+      <pointer-type-def type-id='d86a6269' size-in-bits='64' id='7eeb4265'/>
+      <pointer-type-def type-id='836381ca' size-in-bits='64' id='4b080d34'/>
+      <pointer-type-def type-id='4b4e7d36' size-in-bits='64' id='923f12f8'/>
+      <pointer-type-def type-id='1646f19a' size-in-bits='64' id='0ef96694'/>
+      <pointer-type-def type-id='8b66a21e' size-in-bits='64' id='841969d0'/>
+      <pointer-type-def type-id='4b8eb833' size-in-bits='64' id='f34cc61f'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='128' id='24ae0315'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ae4d1761' size-in-bits='128' id='eb61ae4b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bb08c7e1' size-in-bits='infinite' id='f443352a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='infinite' id='d5016f6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='infinite' id='167619f6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='f22a8abb' size-in-bits='64' id='5403cb36'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='32768' id='61cd76ae'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <pointer-type-def type-id='11fd1392' size-in-bits='64' id='0f8f80b0'/>
+      <pointer-type-def type-id='732df9b3' size-in-bits='64' id='0f1b0147'/>
+      <pointer-type-def type-id='22f86351' size-in-bits='64' id='3e6eb939'/>
+      <pointer-type-def type-id='1540019b' size-in-bits='64' id='561a36db'/>
+      <pointer-type-def type-id='43420c6a' size-in-bits='64' id='6dbc8e18'/>
+      <pointer-type-def type-id='2e77eb82' size-in-bits='64' id='ee527710'/>
+      <pointer-type-def type-id='2baffd9a' size-in-bits='64' id='1819dec8'/>
+      <pointer-type-def type-id='473764d9' size-in-bits='64' id='84618a95'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='384' id='36d7f119'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <class-decl name='badblocks' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/badblocks.h' line='27' column='1' id='cacf0f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/badblocks.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='unacked_exist' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shift' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page' type-id='3df9fd28' visibility='default' filepath='include/linux/badblocks.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='changed' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/badblocks.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sector' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='491' column='1' id='1b893cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bd_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bd_openers' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bd_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bd_super' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bd_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bd_claiming' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bd_holder' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bd_holders' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bd_write_holder' type-id='b50a4934' visibility='default' filepath='include/linux/fs.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bd_holder_disks' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bd_contains' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bd_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bd_partno' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bd_part' type-id='84dc82b7' visibility='default' filepath='include/linux/fs.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bd_part_count' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='bd_invalidated' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bd_disk' type-id='33c599da' visibility='default' filepath='include/linux/fs.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bd_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/fs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bd_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bd_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bd_private' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bd_fsfreeze_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bd_fsfreeze_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='531' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_sk_storage' is-struct='yes' visibility='default' is-declaration-only='yes' id='36313ee4'/>
+      <class-decl name='cfg80211_chan_def' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='618' column='1' id='e07d69c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='e043cccc' visibility='default' filepath='include/net/cfg80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='center_freq1' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='center_freq2' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='freq1_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='624' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpu_stop_done' is-struct='yes' visibility='default' is-declaration-only='yes' id='64c36f53'/>
+      <class-decl name='cpudl' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/sched/cpudeadline.h' line='11' column='1' id='a9cef929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='95e97e5e' 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='b16b461b' 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='9bf95e81' visibility='default' filepath='kernel/sched/cpudeadline.h' line='15' 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='afe3b3de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pri_to_cpu' type-id='f88f3d38' 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='7292109c' visibility='default' filepath='kernel/sched/cpupri.h' line='17' 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='136' column='1' id='beafd747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/sysctl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='header' type-id='11b101bb' visibility='default' filepath='include/linux/sysctl.h' line='138' 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='123' column='1' id='91a515f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='procname' type-id='80f4b756' visibility='default' filepath='include/linux/sysctl.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='maxlen' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysctl.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_handler' type-id='66032958' visibility='default' filepath='include/linux/sysctl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='4dec003b' visibility='default' filepath='include/linux/sysctl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra1' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra2' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='133' 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='174' column='1' id='d83969a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_set' type-id='3fc3d262' visibility='default' filepath='include/linux/sysctl.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lookup' type-id='50abd760' visibility='default' filepath='include/linux/sysctl.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_ownership' type-id='47727520' visibility='default' filepath='include/linux/sysctl.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='permissions' type-id='7bada959' visibility='default' filepath='include/linux/sysctl.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_events' size-in-bits='1792' is-struct='yes' visibility='default' filepath='block/genhd.c' line='1622' column='1' id='ec1aac50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='block/genhd.c' line='1623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disk' type-id='33c599da' visibility='default' filepath='block/genhd.c' line='1624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/genhd.c' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='block_mutex' type-id='925167dc' visibility='default' filepath='block/genhd.c' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='block' type-id='95e97e5e' visibility='default' filepath='block/genhd.c' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pending' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='clearing' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_msecs' type-id='bd54fe1a' visibility='default' filepath='block/genhd.c' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='block/genhd.c' line='1633' 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='166' column='1' id='a8d380d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/genhd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_lookup' type-id='84dc82b7' visibility='default' filepath='include/linux/genhd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='part' type-id='f7aeb09b' visibility='default' filepath='include/linux/genhd.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_stats' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='87' column='1' id='acfd9368'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nsecs' type-id='20a130cf' visibility='default' filepath='include/linux/genhd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sectors' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ios' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='merges' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_ticks' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time_in_queue' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='in_flight' type-id='efa46f39' visibility='default' filepath='include/linux/genhd.h' line='94' 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='282' column='1' id='51a92649'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='285' 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='471cb386'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_queued' type-id='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='7359adad' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' visibility='default' filepath='include/linux/dynamic_queue_limits.h' line='62' 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='24' column='1' id='772a4ddf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/dst.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='6d30564f' visibility='default' filepath='include/net/dst.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_metrics' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm' type-id='328dda6e' visibility='default' filepath='include/net/dst.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='d2e00785' visibility='default' filepath='include/net/dst.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='0023218e' visibility='default' filepath='include/net/dst.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='obsolete' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='header_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='trailer_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__refcnt' type-id='49178f86' visibility='default' filepath='include/net/dst.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__use' type-id='95e97e5e' visibility='default' filepath='include/net/dst.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/dst.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/dst.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='error' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='__pad' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='tclassid' type-id='3f1a6b60' visibility='default' filepath='include/net/dst.h' line='76' 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='63' column='1' id='aaa166ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/elevator.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='a2178c8a' visibility='default' filepath='include/linux/elevator.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='1854489e' visibility='default' filepath='include/linux/elevator.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ops' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='326' column='1' id='8a3b11ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_drvinfo' type-id='343c05fa' visibility='default' filepath='include/linux/ethtool.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_regs_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_regs' type-id='345f0501' visibility='default' filepath='include/linux/ethtool.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_wol' type-id='afcbd268' visibility='default' filepath='include/linux/ethtool.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_wol' type-id='5a92dd37' visibility='default' filepath='include/linux/ethtool.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_msglevel' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_msglevel' type-id='9038f441' visibility='default' filepath='include/linux/ethtool.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nway_reset' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_link' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_eeprom_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_ringparam' type-id='89b5be7f' visibility='default' filepath='include/linux/ethtool.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ringparam' type-id='807c842c' visibility='default' filepath='include/linux/ethtool.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_pauseparam' type-id='f45e1d71' visibility='default' filepath='include/linux/ethtool.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_pauseparam' type-id='d57a1ee4' visibility='default' filepath='include/linux/ethtool.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='self_test' type-id='4acd4951' visibility='default' filepath='include/linux/ethtool.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='get_strings' type-id='27653c4c' visibility='default' filepath='include/linux/ethtool.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_phys_id' type-id='e0c03654' visibility='default' filepath='include/linux/ethtool.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_ethtool_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='begin' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='complete' type-id='548eee3a' visibility='default' filepath='include/linux/ethtool.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_priv_flags' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_priv_flags' type-id='0f8df030' visibility='default' filepath='include/linux/ethtool.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_sset_count' type-id='d6762aa0' visibility='default' filepath='include/linux/ethtool.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='get_rxnfc' type-id='d67468b4' visibility='default' filepath='include/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rxnfc' type-id='fece2110' visibility='default' filepath='include/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='flash_device' type-id='d91e8ea3' visibility='default' filepath='include/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='reset' type-id='4814c3f9' visibility='default' filepath='include/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='get_rxfh_key_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_rxfh_indir_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='get_rxfh' type-id='de5dab7b' visibility='default' filepath='include/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='set_rxfh' type-id='13680d10' visibility='default' filepath='include/linux/ethtool.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='get_rxfh_context' type-id='64efa47a' visibility='default' filepath='include/linux/ethtool.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_rxfh_context' type-id='5f0d472d' visibility='default' filepath='include/linux/ethtool.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='get_channels' type-id='74287ea0' visibility='default' filepath='include/linux/ethtool.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_channels' type-id='b60e7255' visibility='default' filepath='include/linux/ethtool.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='get_dump_flag' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='get_dump_data' type-id='b7ee351b' visibility='default' filepath='include/linux/ethtool.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_dump' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='get_ts_info' type-id='88f4e837' visibility='default' filepath='include/linux/ethtool.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='get_module_info' type-id='20974125' visibility='default' filepath='include/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='get_module_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='get_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='set_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='get_link_ksettings' type-id='83359c30' visibility='default' filepath='include/linux/ethtool.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_link_ksettings' type-id='5a3c102b' visibility='default' filepath='include/linux/ethtool.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='set_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='get_ethtool_phy_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_node' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='73' column='1' id='9f30e4ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='left' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='right' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fn_bit' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='fn_flags' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fn_sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rr_ptr' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='88' 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='1159' column='1' id='fb0c2987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flc_flock' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flc_posix' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flc_lease' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1885' column='1' id='7dffcde2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llseek' type-id='07ebb4cd' visibility='default' filepath='include/linux/fs.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/linux/fs.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/linux/fs.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iopoll' type-id='6c4618be' visibility='default' filepath='include/linux/fs.h' line='1892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iterate' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iterate_shared' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/linux/fs.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/linux/fs.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_supported_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='open' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flush' type-id='5ddef2dd' visibility='default' filepath='include/linux/fs.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fsync' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fasync' type-id='b94ac371' visibility='default' filepath='include/linux/fs.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sendpage' type-id='40da47a8' visibility='default' filepath='include/linux/fs.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/fs.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='check_flags' type-id='7f416e10' visibility='default' filepath='include/linux/fs.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='flock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='splice_write' type-id='b22f4610' visibility='default' filepath='include/linux/fs.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='splice_read' type-id='72cd68b0' visibility='default' filepath='include/linux/fs.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setlease' type-id='87e3d3e2' visibility='default' filepath='include/linux/fs.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fallocate' type-id='a53e2328' visibility='default' filepath='include/linux/fs.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='show_fdinfo' type-id='eda08098' visibility='default' filepath='include/linux/fs.h' line='1915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='copy_file_range' type-id='d0882d6b' visibility='default' filepath='include/linux/fs.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remap_file_range' type-id='c1de1086' visibility='default' filepath='include/linux/fs.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='fadvise' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1929' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_system_type' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2299' column='1' id='2f5a60be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fs_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_fs_context' type-id='57f0383a' visibility='default' filepath='include/linux/fs.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parameters' type-id='a2fb6348' visibility='default' filepath='include/linux/fs.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mount' type-id='d9394db1' visibility='default' filepath='include/linux/fs.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kill_sb' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='2314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fs_supers' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_umount_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_vfs_rename_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_writers_key' type-id='9c02e2a6' visibility='default' filepath='include/linux/fs.h' line='2320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_dir_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2329' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='9441bb37'/>
+      <class-decl name='fsnotify_mark_connector' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='292' column='1' id='aadc8ce9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fsnotify_backend.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fsid' type-id='ac895711' visibility='default' filepath='include/linux/fsnotify_backend.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9114ebb7' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/fsnotify_backend.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsverity_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='43489bca'/>
+      <class-decl name='gnet_stats_basic_packed' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='29' column='1' id='1f9b1a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='31' 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='62' column='1' id='a212a715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drops' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='requeues' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='header_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='266' column='1' id='f6e7855b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='e82aa0fb' visibility='default' filepath='include/linux/netdevice.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse' type-id='35b37061' visibility='default' filepath='include/linux/netdevice.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cache' type-id='464a4247' visibility='default' filepath='include/linux/netdevice.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cache_update' type-id='b713d448' visibility='default' filepath='include/linux/netdevice.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate' type-id='5a60e638' visibility='default' filepath='include/linux/netdevice.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parse_protocol' type-id='98c4c95a' visibility='default' filepath='include/linux/netdevice.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='279' 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='af86905d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='6cf6468f' visibility='default' filepath='include/linux/list_nulls.h' line='22' 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='f6ed712a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in6_u' type-id='0efc37b8' visibility='default' filepath='include/uapi/linux/in6.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_hashinfo' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='124' column='1' id='3482ac54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ehash' type-id='77011cbc' visibility='default' filepath='include/net/inet_hashtables.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ehash_locks' type-id='cff2d845' visibility='default' filepath='include/net/inet_hashtables.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ehash_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ehash_locks_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_bucket_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_hashtables.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bhash' type-id='fd53db64' visibility='default' filepath='include/net/inet_hashtables.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bhash_size' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lhash2_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lhash2' type-id='e0087b68' visibility='default' filepath='include/net/inet_hashtables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='listening_hash' type-id='e3638da9' visibility='default' filepath='include/net/inet_hashtables.h' line='159' 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='156' column='1' id='0e97f526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir_entry' type-id='d077e928' visibility='default' filepath='include/net/if_inet6.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ipv6' type-id='30897c4e' visibility='default' filepath='include/net/if_inet6.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmpv6dev' type-id='6551bd60' visibility='default' filepath='include/net/if_inet6.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='icmpv6msgdev' type-id='793f0d19' visibility='default' filepath='include/net/if_inet6.h' line='160' 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='65' column='1' id='b2fc06b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='secret' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_type' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='989' column='1' id='62778ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='0f5f7920' visibility='default' filepath='include/linux/irq.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='regs' type-id='6194fd9a' visibility='default' filepath='include/linux/irq.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/irq.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='mask_cache_priv' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mask_cache' type-id='f9409001' visibility='default' filepath='include/linux/irq.h' line='995' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_handler_def' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='324' column='1' id='9218f3f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standard' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_standard' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='num_private' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_private_args' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='private' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_args' type-id='d841feae' visibility='default' filepath='include/net/iw_handler.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_wireless_stats' type-id='55e2a83c' visibility='default' filepath='include/net/iw_handler.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kmem_cache_node' size-in-bits='512' is-struct='yes' visibility='default' filepath='mm/slab.h' line='598' column='1' id='edac1e8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='mm/slab.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_partial' type-id='7359adad' visibility='default' filepath='mm/slab.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='partial' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_slabs' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_objects' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='full' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='622' 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='729' column='1' id='12dbc6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='732' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_device' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='26' column='1' id='f3a32dbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mdio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='bus' type-id='ff47b24b' visibility='default' filepath='include/linux/mdio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/mdio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='bus_match' type-id='2f28f04c' visibility='default' filepath='include/linux/mdio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='device_free' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='device_remove' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='addr' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='reset_gpio' type-id='26760480' visibility='default' filepath='include/linux/mdio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='reset_ctrl' type-id='9f9b8114' visibility='default' filepath='include/linux/mdio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='reset_assert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='reset_deassert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='25dc4075'/>
+      <class-decl name='ndisc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='202' column='1' id='88ef330b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_useropt' type-id='c1655339' visibility='default' filepath='include/net/ndisc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse_options' type-id='58505a39' visibility='default' filepath='include/net/ndisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update' type-id='0feea528' visibility='default' filepath='include/net/ndisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='opt_addr_space' type-id='beb4f24d' visibility='default' filepath='include/net/ndisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_addr_option' type-id='b78e9a0f' visibility='default' filepath='include/net/ndisc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prefix_rcv_add_addr' type-id='1cebc84d' visibility='default' filepath='include/net/ndisc.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device_ops' size-in-bits='4736' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1273' column='1' id='ba44c7d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndo_init' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndo_uninit' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ndo_open' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ndo_stop' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ndo_start_xmit' type-id='bd3f3f93' visibility='default' filepath='include/linux/netdevice.h' line='1278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ndo_features_check' type-id='7a0ed254' visibility='default' filepath='include/linux/netdevice.h' line='1280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndo_select_queue' type-id='de36db77' visibility='default' filepath='include/linux/netdevice.h' line='1283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ndo_change_rx_flags' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ndo_set_rx_mode' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ndo_set_mac_address' type-id='f4dd5cc5' visibility='default' filepath='include/linux/netdevice.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ndo_validate_addr' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ndo_do_ioctl' type-id='cc325be7' visibility='default' filepath='include/linux/netdevice.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ndo_set_config' type-id='bd2d1eba' visibility='default' filepath='include/linux/netdevice.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ndo_change_mtu' type-id='d6762aa0' visibility='default' filepath='include/linux/netdevice.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ndo_neigh_setup' type-id='5c9f2a92' visibility='default' filepath='include/linux/netdevice.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ndo_tx_timeout' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ndo_get_stats64' type-id='cb4c6db1' visibility='default' filepath='include/linux/netdevice.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ndo_has_offload_stats' type-id='e95fd96b' visibility='default' filepath='include/linux/netdevice.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ndo_get_offload_stats' type-id='f98694f9' visibility='default' filepath='include/linux/netdevice.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndo_get_stats' type-id='3217f9ba' visibility='default' filepath='include/linux/netdevice.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ndo_vlan_rx_add_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ndo_vlan_rx_kill_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ndo_set_vf_mac' type-id='bae60bcf' visibility='default' filepath='include/linux/netdevice.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ndo_set_vf_vlan' type-id='699131d0' visibility='default' filepath='include/linux/netdevice.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ndo_set_vf_rate' type-id='7cd466e6' visibility='default' filepath='include/linux/netdevice.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ndo_set_vf_spoofchk' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ndo_set_vf_trust' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ndo_get_vf_config' type-id='d22f8cbe' visibility='default' filepath='include/linux/netdevice.h' line='1332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ndo_set_vf_link_state' type-id='b54cfa0f' visibility='default' filepath='include/linux/netdevice.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ndo_get_vf_stats' type-id='eee971fd' visibility='default' filepath='include/linux/netdevice.h' line='1337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ndo_set_vf_port' type-id='af60ef81' visibility='default' filepath='include/linux/netdevice.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ndo_get_vf_port' type-id='be55abd8' visibility='default' filepath='include/linux/netdevice.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ndo_set_vf_guid' type-id='0617ad2b' visibility='default' filepath='include/linux/netdevice.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ndo_set_vf_rss_query_en' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ndo_setup_tc' type-id='06b83346' visibility='default' filepath='include/linux/netdevice.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ndo_rx_flow_steer' type-id='47498e6c' visibility='default' filepath='include/linux/netdevice.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ndo_add_slave' type-id='031fe454' visibility='default' filepath='include/linux/netdevice.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ndo_del_slave' type-id='ed3019e9' visibility='default' filepath='include/linux/netdevice.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ndo_fix_features' type-id='4a028f44' visibility='default' filepath='include/linux/netdevice.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ndo_set_features' type-id='10dae4c5' visibility='default' filepath='include/linux/netdevice.h' line='1392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ndo_neigh_construct' type-id='92446276' visibility='default' filepath='include/linux/netdevice.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ndo_neigh_destroy' type-id='11e89fb9' visibility='default' filepath='include/linux/netdevice.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ndo_fdb_add' type-id='5ffcd66c' visibility='default' filepath='include/linux/netdevice.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ndo_fdb_del' type-id='e6032f80' visibility='default' filepath='include/linux/netdevice.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ndo_fdb_dump' type-id='147cd5a7' visibility='default' filepath='include/linux/netdevice.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='ndo_fdb_get' type-id='6537d478' visibility='default' filepath='include/linux/netdevice.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ndo_bridge_setlink' type-id='50756496' visibility='default' filepath='include/linux/netdevice.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ndo_bridge_getlink' type-id='e78e01a9' visibility='default' filepath='include/linux/netdevice.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ndo_bridge_dellink' type-id='1223555b' visibility='default' filepath='include/linux/netdevice.h' line='1431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ndo_change_carrier' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ndo_get_phys_port_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ndo_get_port_parent_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ndo_get_phys_port_name' type-id='5139dd84' visibility='default' filepath='include/linux/netdevice.h' line='1440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ndo_udp_tunnel_add' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ndo_udp_tunnel_del' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='ndo_dfwd_add_station' type-id='e2d7f258' visibility='default' filepath='include/linux/netdevice.h' line='1446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ndo_dfwd_del_station' type-id='5ac7baf4' visibility='default' filepath='include/linux/netdevice.h' line='1448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ndo_set_tx_maxrate' type-id='c1e0b02f' visibility='default' filepath='include/linux/netdevice.h' line='1451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='ndo_get_iflink' type-id='4753b592' visibility='default' filepath='include/linux/netdevice.h' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ndo_change_proto_down' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='ndo_fill_metadata_dst' type-id='2cc5a575' visibility='default' filepath='include/linux/netdevice.h' line='1457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='ndo_set_rx_headroom' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='ndo_bpf' type-id='49f84764' visibility='default' filepath='include/linux/netdevice.h' line='1461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ndo_xdp_xmit' type-id='0c7d25ff' visibility='default' filepath='include/linux/netdevice.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ndo_xsk_wakeup' type-id='149f0e1f' visibility='default' filepath='include/linux/netdevice.h' line='1466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndo_get_devlink_port' type-id='cd97030f' visibility='default' filepath='include/linux/netdevice.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1477' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_queue_handler' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='27' column='1' id='b77325d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='outfn' type-id='c2147f48' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nf_hook_drop' type-id='9b92b29b' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='30' 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='104' column='1' id='a388c264'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uuid' type-id='12e4ade3' visibility='default' filepath='include/linux/genhd.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='volname' type-id='47ba3182' visibility='default' filepath='include/linux/genhd.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcpu_dstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='45092453'/>
+      <class-decl name='pcpu_lstats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2477' column='1' id='b71b307b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2480' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcpu_sw_netstats' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2469' column='1' id='101eeec5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2474' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pglist_data' size-in-bits='46080' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='711' column='1' id='54406315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_zones' type-id='83aedf28' visibility='default' filepath='include/linux/mmzone.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39936'>
+          <var-decl name='node_zonelists' type-id='9509a9de' visibility='default' filepath='include/linux/mmzone.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='nr_zones' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40480'>
+          <var-decl name='node_size_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40512'>
+          <var-decl name='node_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40576'>
+          <var-decl name='node_present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40640'>
+          <var-decl name='node_spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40704'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40768'>
+          <var-decl name='kswapd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40960'>
+          <var-decl name='pfmemalloc_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41152'>
+          <var-decl name='kswapd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41216'>
+          <var-decl name='kswapd_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41248'>
+          <var-decl name='kswapd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41280'>
+          <var-decl name='kswapd_failures' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41312'>
+          <var-decl name='kcompactd_max_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41344'>
+          <var-decl name='kcompactd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41408'>
+          <var-decl name='kcompactd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41600'>
+          <var-decl name='kcompactd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41664'>
+          <var-decl name='totalreserve_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42048'>
+          <var-decl name='deferred_split_queue' type-id='d619c1c5' visibility='default' filepath='include/linux/mmzone.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42304'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/mmzone.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43392'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='per_cpu_nodestats' type-id='36700cde' visibility='default' filepath='include/linux/mmzone.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='vm_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/mmzone.h' line='795' 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='324' column='1' id='0463cbfd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devices_in_package' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device_ids' type-id='1c6311dd' visibility='default' filepath='include/linux/phy.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='27' column='1' id='605b61bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a_refcount' type-id='64615833' visibility='default' filepath='include/linux/posix_acl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='a_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/posix_acl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='a_count' type-id='f0981eeb' visibility='default' filepath='include/linux/posix_acl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='a_entries' type-id='a51f6b3c' visibility='default' filepath='include/linux/posix_acl.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/proc_ns.h' line='16' column='1' id='2ba71bf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real_ns_name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/proc_ns.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='3e644294' visibility='default' filepath='include/linux/proc_ns.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='277e3361' visibility='default' filepath='include/linux/proc_ns.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='install' type-id='d23fe9bd' visibility='default' filepath='include/linux/proc_ns.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='6fa26802' visibility='default' filepath='include/linux/proc_ns.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e0677422' visibility='default' filepath='include/linux/proc_ns.h' line='24' 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='1099' column='1' id='7203ee09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='close' type-id='09f3a86b' visibility='default' filepath='include/net/sock.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='accept' type-id='67adf9a9' visibility='default' filepath='include/net/sock.h' line='1110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ioctl' type-id='08113f0a' visibility='default' filepath='include/net/sock.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='init' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='destroy' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='keepalive' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compat_ioctl' type-id='20da830b' visibility='default' filepath='include/net/sock.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sendmsg' type-id='1df08751' visibility='default' filepath='include/net/sock.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='recvmsg' type-id='74e71fae' visibility='default' filepath='include/net/sock.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendpage' type-id='65399e23' visibility='default' filepath='include/net/sock.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bind' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='release_cb' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hash' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unhash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rehash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_port' type-id='078de3a3' visibility='default' filepath='include/net/sock.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inuse_idx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stream_memory_free' type-id='bf751261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stream_memory_read' type-id='3d4d3aba' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='enter_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='memory_allocated' type-id='5403cb36' visibility='default' filepath='include/net/sock.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sockets_allocated' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memory_pressure' type-id='1d2c2b85' visibility='default' filepath='include/net/sock.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_mem' type-id='3ccc2590' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysctl_wmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sysctl_rmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sysctl_wmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_rmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='max_header' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='1184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_autobind' type-id='b50a4934' visibility='default' filepath='include/net/sock.h' line='1185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/sock.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='slab_flags' type-id='f7fe96cb' visibility='default' filepath='include/net/sock.h' line='1189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='orphan_count' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rsk_prot' type-id='db994912' visibility='default' filepath='include/net/sock.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='twsk_prot' type-id='d68ad8b5' visibility='default' filepath='include/net/sock.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='h' type-id='adf5bf47' visibility='default' filepath='include/net/sock.h' line='1203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sock.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/net/sock.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/net/sock.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='diag_destroy' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1213' 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='52' column='1' id='d34f2f01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/net/sch_generic.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='319e0e18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='54d74023' 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='641c41d1' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ioport.h' line='21' column='1' id='5218160d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ioport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sibling' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='81' column='1' id='9e095f93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable-types.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_elems' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='p' type-id='e4c11782' visibility='default' filepath='include/linux/rhashtable-types.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rhlist' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='ef9025d0' visibility='default' filepath='include/linux/rhashtable-types.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/rhashtable-types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rhashtable-types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nelems' type-id='49178f86' visibility='default' filepath='include/linux/rhashtable-types.h' line='90' 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='107' column='1' id='d7f36d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='plen' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='109' 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='60' column='1' id='6696ef79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/rtnetlink.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='80f4b756' visibility='default' filepath='include/net/rtnetlink.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv_size' type-id='b59d7dce' visibility='default' filepath='include/net/rtnetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='548eee3a' visibility='default' filepath='include/net/rtnetlink.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='netns_refund' type-id='b50a4934' visibility='default' filepath='include/net/rtnetlink.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='validate' type-id='69d3de54' visibility='default' filepath='include/net/rtnetlink.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='newlink' type-id='234d802d' visibility='default' filepath='include/net/rtnetlink.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='changelink' type-id='66b76584' visibility='default' filepath='include/net/rtnetlink.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dellink' type-id='3778bdcd' visibility='default' filepath='include/net/rtnetlink.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill_info' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_xstats_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fill_xstats' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_num_tx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_num_rx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='slave_maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='slave_policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='slave_changelink' type-id='a6c912f4' visibility='default' filepath='include/net/rtnetlink.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_slave_size' type-id='c297924f' visibility='default' filepath='include/net/rtnetlink.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fill_slave_info' type-id='f3e878cb' visibility='default' filepath='include/net/rtnetlink.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_link_net' type-id='13b49faa' visibility='default' filepath='include/net/rtnetlink.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_linkxstats_size' type-id='d3210449' visibility='default' filepath='include/net/rtnetlink.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fill_linkxstats' type-id='c11c2e76' visibility='default' filepath='include/net/rtnetlink.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_queue' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='97' column='1' id='a133315d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sb' type-id='6e051ed1' visibility='default' filepath='include/linux/sbitmap.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_hint' type-id='807869d3' visibility='default' filepath='include/linux/sbitmap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wake_batch' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake_index' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ws' type-id='cdff193b' visibility='default' filepath='include/linux/sbitmap.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ws_active' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='round_robin' type-id='b50a4934' visibility='default' filepath='include/linux/sbitmap.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='min_shallow_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_word' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='20' column='1' id='28e1d9ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='word' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cleared' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sbitmap.h' line='39' 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='568' column='1' id='dbc9a936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/filter.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/filter.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/filter.h' line='571' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_reuseport' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sock_reuseport.h' line='13' column='1' id='ff751355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock_reuseport.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='num_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='synq_overflow_ts' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reuseport_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind_inany' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='has_conns' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/net/sock_reuseport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socks' type-id='5be9db8d' visibility='default' filepath='include/net/sock_reuseport.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='socket' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='114' column='1' id='ee14fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='ee2ecafb' visibility='default' filepath='include/linux/net.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/net.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/net.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/net.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='38a81521' visibility='default' filepath='include/linux/net.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='8bd06fd9' visibility='default' filepath='include/linux/net.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_congestion_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1038' column='1' id='54718f09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/tcp.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssthresh' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cong_avoid' type-id='ece3af1e' visibility='default' filepath='include/net/tcp.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_state' type-id='f5feb7a4' visibility='default' filepath='include/net/tcp.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cwnd_event' type-id='bfacbc7a' visibility='default' filepath='include/net/tcp.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='in_ack_event' type-id='815f64bf' visibility='default' filepath='include/net/tcp.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='undo_cwnd' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pkts_acked' type-id='bffb5883' visibility='default' filepath='include/net/tcp.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_tso_segs' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sndbuf_expand' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cong_control' type-id='636d3a20' visibility='default' filepath='include/net/tcp.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_info' type-id='14ca5c08' visibility='default' filepath='include/net/tcp.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/tcp.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/tcp.h' line='1075' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='f308a7ce'/>
+      <class-decl name='tty_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='59' column='1' id='2f351d1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='053892cc' visibility='default' filepath='include/linux/tty.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='read' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='c99b5ecd' visibility='default' filepath='include/linux/tty.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='176' column='1' id='053f72e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/tty_ldisc.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='ac9bc941' visibility='default' filepath='include/linux/tty_ldisc.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='01db3d7c' visibility='default' filepath='include/linux/tty_ldisc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_ldisc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='poll' type-id='9fe65c08' visibility='default' filepath='include/linux/tty_ldisc.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hangup' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='receive_buf' type-id='71f0211c' visibility='default' filepath='include/linux/tty_ldisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='write_wakeup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dcd_change' type-id='aef0224d' visibility='default' filepath='include/linux/tty_ldisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='receive_buf2' type-id='c6e84913' visibility='default' filepath='include/linux/tty_ldisc.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_ldisc.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_ldisc.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_ldisc.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='unicode_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='a24978a1'/>
+      <class-decl name='vmem_altmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='18' column='1' id='62d0a96c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserve' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='align' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='24' 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='eb0d6f26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='19c2251e' 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='19c2251e' 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='1182636e' visibility='default' filepath='include/net/xdp.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='ec55eb74' visibility='default' filepath='include/linux/uuid.h' line='16' column='1' id='8425539a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='9396cabb' visibility='default' filepath='include/linux/uuid.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1' id='c0044425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='b61f34eb' visibility='default' filepath='include/linux/perf_event.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1' id='ea0e6645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_bnd' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_lower' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_upper' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='90' column='1' id='8a41173c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_pkey' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_pkey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='92' column='1'/>
+        </data-member>
+      </class-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='146' column='1' id='1acab550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nreg' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1' id='35e31cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1' id='17578164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='82' column='1' id='b5fecf67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='mm/slab.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kmem_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='mm/slab.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='work_fn' type-id='8a4f2b79' visibility='default' filepath='mm/slab.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='436b4ed4' visibility='default' filepath='mm/slab.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='76' column='1' id='22e2627b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='mm/slab.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__root_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dying' type-id='b50a4934' visibility='default' filepath='mm/slab.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='97' column='1' id='a865a4bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='owned' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/net/sock.h' line='100' 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='include/net/sock.h' line='526' column='1' id='156952c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1' id='e816fcaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_tag' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='config_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event_base_rdpmc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1' id='f9c5ea3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwr_acc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ptsc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='147' 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/perf_event.h' line='160' column='1' id='7a56104f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu_bank' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='iommu_cntr' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='padding' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conf' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='conf1' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='165' 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='28' column='1' id='e873af3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forward' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reverse' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='30' column='1'/>
+        </data-member>
+      </class-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='88d8a388'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' 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='e3d8ce29' visibility='default' filepath='include/net/netns/generic.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2212bd2d' size-in-bits='64' id='aa7f9205'/>
+      <pointer-type-def type-id='38ce7f2c' size-in-bits='64' id='7311f672'/>
+      <qualified-type-def type-id='7b61b7b4' const='yes' id='72b61a2d'/>
+      <qualified-type-def type-id='d53ee986' const='yes' id='9bf7ec75'/>
+      <qualified-type-def type-id='dbd58b50' const='yes' id='425496d7'/>
+      <pointer-type-def type-id='6dbd849e' size-in-bits='64' id='e803acd0'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='256' id='639bec1b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='7c8b7a6c' size-in-bits='64' id='55917c32'/>
+      <qualified-type-def type-id='0584e65d' const='yes' id='47d6ff44'/>
+      <qualified-type-def type-id='1a0c5572' const='yes' id='3cea21ed'/>
+      <qualified-type-def type-id='fa21a7e9' const='yes' id='de5211b8'/>
+      <qualified-type-def type-id='5f0d764c' const='yes' id='0c45e0bb'/>
+      <qualified-type-def type-id='5f5aa1ff' const='yes' id='c8e0fb8e'/>
+      <qualified-type-def type-id='01c546da' const='yes' id='f1415d4d'/>
+      <pointer-type-def type-id='8967eee8' size-in-bits='64' id='109cdb66'/>
+      <array-type-def dimensions='1' type-id='bd561d05' size-in-bits='192' id='59bd9302'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <qualified-type-def type-id='8ce4ff83' const='yes' id='051f9336'/>
+      <pointer-type-def type-id='b64da4b2' size-in-bits='64' id='943a1b48'/>
+      <qualified-type-def type-id='874691ab' const='yes' id='ecd54c0e'/>
+      <qualified-type-def type-id='2a8ca227' const='yes' id='cf470d6a'/>
+      <qualified-type-def type-id='7778009d' const='yes' id='6e03f2ca'/>
+      <pointer-type-def type-id='ff37489f' size-in-bits='64' id='790774ef'/>
+      <pointer-type-def type-id='e4f938dc' size-in-bits='64' id='6a54ab42'/>
+      <pointer-type-def type-id='277029da' size-in-bits='64' id='3cce524c'/>
+      <pointer-type-def type-id='e51de182' size-in-bits='64' id='8eff91b0'/>
+      <enum-decl name='ieee80211_bss_type' filepath='include/net/cfg80211.h' line='208' column='1' id='cb952348'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='memory_type' filepath='include/linux/memremap.h' line='59' column='1' id='cc7210fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEMORY_DEVICE_PRIVATE' value='1'/>
+        <enumerator name='MEMORY_DEVICE_FS_DAX' value='2'/>
+        <enumerator name='MEMORY_DEVICE_DEVDAX' value='3'/>
+        <enumerator name='MEMORY_DEVICE_PCI_P2PDMA' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2933' column='1' id='86505f90'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='phy_state' filepath='include/linux/phy.h' line='310' column='1' id='d29ba889'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PHY_DOWN' value='0'/>
+        <enumerator name='PHY_READY' value='1'/>
+        <enumerator name='PHY_HALTED' value='2'/>
+        <enumerator name='PHY_UP' value='3'/>
+        <enumerator name='PHY_RUNNING' value='4'/>
+        <enumerator name='PHY_NOLINK' value='5'/>
+      </enum-decl>
+      <pointer-type-def type-id='77dc8383' size-in-bits='64' id='71f2e203'/>
+      <array-type-def dimensions='1' type-id='979d5bbb' size-in-bits='infinite' id='7be723ef'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='9f30e4ad' size-in-bits='64' id='f7b83e6d'/>
+      <pointer-type-def type-id='c026ae59' size-in-bits='64' id='b3542b31'/>
+      <pointer-type-def type-id='a212a715' size-in-bits='64' id='338303f5'/>
+      <pointer-type-def type-id='1883cd3d' size-in-bits='64' id='034d7ded'/>
+      <pointer-type-def type-id='cc23d6f1' size-in-bits='64' id='d1ca3a89'/>
+      <pointer-type-def type-id='b95a5ed3' size-in-bits='64' id='3a639063'/>
+      <pointer-type-def type-id='e56bc2e5' size-in-bits='64' id='f6c3a7a5'/>
+      <array-type-def dimensions='1' type-id='7e666abe' size-in-bits='192' id='e6ff92fb'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='203c1d4d' size-in-bits='64' id='a2abb549'/>
+      <pointer-type-def type-id='f8a93d65' size-in-bits='64' id='9c946059'/>
+      <pointer-type-def type-id='5abe74b4' size-in-bits='64' id='bf8c5f5e'/>
+      <pointer-type-def type-id='73e35fcc' size-in-bits='64' id='aad51e56'/>
+      <pointer-type-def type-id='58407416' size-in-bits='64' id='45ef3730'/>
+      <pointer-type-def type-id='8f138f6a' size-in-bits='64' id='65fcdb9c'/>
+      <pointer-type-def type-id='969fc316' size-in-bits='64' id='2b0348f0'/>
+      <pointer-type-def type-id='2cfafd1c' size-in-bits='64' id='3e9fac96'/>
+      <pointer-type-def type-id='1c674f90' size-in-bits='64' id='098d4d92'/>
+      <pointer-type-def type-id='d1043097' size-in-bits='64' id='f6a079db'/>
+      <pointer-type-def type-id='9ebac747' size-in-bits='64' id='da4ee44b'/>
+      <pointer-type-def type-id='8b7bbbae' size-in-bits='64' id='a50c1d00'/>
+      <pointer-type-def type-id='b11be48c' size-in-bits='64' id='65cea51e'/>
+      <pointer-type-def type-id='75985c10' size-in-bits='64' id='fb86b772'/>
+      <pointer-type-def type-id='935b1156' size-in-bits='64' id='6eededc8'/>
+      <pointer-type-def type-id='2d2d4460' size-in-bits='64' id='738b5bc2'/>
+      <pointer-type-def type-id='0174792d' size-in-bits='64' id='0ba194b9'/>
+      <pointer-type-def type-id='eb0f802b' size-in-bits='64' id='6241aa4f'/>
+      <pointer-type-def type-id='c3384bd1' size-in-bits='64' id='30ab2c05'/>
+      <pointer-type-def type-id='df587ad7' size-in-bits='64' id='42bc911b'/>
+      <pointer-type-def type-id='0477141b' size-in-bits='64' id='98a3b427'/>
+      <pointer-type-def type-id='a72f8b53' size-in-bits='64' id='9ce2e6e7'/>
+      <pointer-type-def type-id='648adb0a' size-in-bits='64' id='33356d2c'/>
+      <pointer-type-def type-id='fe695434' size-in-bits='64' id='72fd300e'/>
+      <pointer-type-def type-id='7a3aa0c8' size-in-bits='64' id='41323fc2'/>
+      <pointer-type-def type-id='56b34f46' size-in-bits='64' id='f71f3e00'/>
+      <pointer-type-def type-id='b2a9667a' size-in-bits='64' id='a4946104'/>
+      <pointer-type-def type-id='0790750c' size-in-bits='64' id='e83d6bbe'/>
+      <pointer-type-def type-id='a39e0090' size-in-bits='64' id='9def3eca'/>
+      <pointer-type-def type-id='cea824ff' size-in-bits='64' id='254733eb'/>
+      <pointer-type-def type-id='62855293' size-in-bits='64' id='c2889977'/>
+      <pointer-type-def type-id='081f19f3' size-in-bits='64' id='f72cc247'/>
+      <pointer-type-def type-id='972398b7' size-in-bits='64' id='3d6e005b'/>
+      <pointer-type-def type-id='439a4d86' size-in-bits='64' id='b8fa1170'/>
+      <pointer-type-def type-id='0f590202' size-in-bits='64' id='84d8e9b4'/>
+      <pointer-type-def type-id='1e330b13' size-in-bits='64' id='74005b57'/>
+      <pointer-type-def type-id='1621811c' size-in-bits='64' id='574ff926'/>
+      <pointer-type-def type-id='39fc1af7' size-in-bits='64' id='61019833'/>
+      <pointer-type-def type-id='53878b76' size-in-bits='64' id='9cc1e100'/>
+      <pointer-type-def type-id='f139a2f0' size-in-bits='64' id='dc2036b2'/>
+      <pointer-type-def type-id='e03cf6d2' size-in-bits='64' id='ebf0489c'/>
+      <pointer-type-def type-id='c6077113' size-in-bits='64' id='20a1c8e7'/>
+      <pointer-type-def type-id='3e33342a' size-in-bits='64' id='24725b0c'/>
+      <pointer-type-def type-id='31975058' size-in-bits='64' id='18d7129a'/>
+      <pointer-type-def type-id='a721b4ab' size-in-bits='64' id='20174b1f'/>
+      <pointer-type-def type-id='ad974870' size-in-bits='64' id='117abbea'/>
+      <pointer-type-def type-id='27ca88ce' size-in-bits='64' id='c8fa3070'/>
+      <pointer-type-def type-id='80d02f4e' size-in-bits='64' id='6e731d78'/>
+      <pointer-type-def type-id='262a563e' size-in-bits='64' id='6910c028'/>
+      <pointer-type-def type-id='3b03705e' size-in-bits='64' id='6850e780'/>
+      <pointer-type-def type-id='9efbfb11' size-in-bits='64' id='b9b212f5'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1024' id='9e942f0d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='2048' id='93e41790'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='c2a59aaa' size-in-bits='64' id='26479c18'/>
+      <pointer-type-def type-id='26479c18' size-in-bits='64' id='74bae2b6'/>
+      <pointer-type-def type-id='f8292115' size-in-bits='64' id='96efb615'/>
+      <pointer-type-def type-id='ae89b201' size-in-bits='64' id='1f2a8949'/>
+      <pointer-type-def type-id='2f8662b5' size-in-bits='64' id='e55856e5'/>
+      <pointer-type-def type-id='9c91a761' size-in-bits='64' id='29244949'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='12800' id='6f53db1b'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <pointer-type-def type-id='dc49d474' size-in-bits='64' id='a6d2fa52'/>
+      <pointer-type-def type-id='b8a3dbd4' size-in-bits='64' id='0b8da5f6'/>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2048' id='52f6d451'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b0690d78' size-in-bits='1728' id='83ae09a1'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='1429eee4' size-in-bits='64' id='affe0fe2'/>
+      <pointer-type-def type-id='51dbeb7e' size-in-bits='64' id='8c1bb0b4'/>
+      <pointer-type-def type-id='b754514f' size-in-bits='64' id='f32120a7'/>
+      <array-type-def dimensions='1' type-id='7a1bc3c2' size-in-bits='infinite' id='84607bca'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='e17bc528' size-in-bits='64' id='d9e60bb2'/>
+      <pointer-type-def type-id='818799b4' size-in-bits='64' id='60219102'/>
+      <array-type-def dimensions='1' type-id='ce848ab1' size-in-bits='2880' id='a09ef5a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='f2e22af7' size-in-bits='64' id='30f9749f'/>
+      <pointer-type-def type-id='a752caf1' size-in-bits='64' id='4b860c99'/>
+      <pointer-type-def type-id='84a0e7ab' size-in-bits='64' id='e812884b'/>
+      <pointer-type-def type-id='7d5dfb1c' size-in-bits='64' id='56f3c6ca'/>
+      <pointer-type-def type-id='bd1d1d08' size-in-bits='64' id='2e2106be'/>
+      <pointer-type-def type-id='b715cae5' size-in-bits='64' id='a66a8231'/>
+      <pointer-type-def type-id='f111d4f3' size-in-bits='64' id='27bb8677'/>
+      <pointer-type-def type-id='3dad1a48' size-in-bits='64' id='79808846'/>
+      <pointer-type-def type-id='aca51d4a' size-in-bits='64' id='deff2378'/>
+      <pointer-type-def type-id='6f8d5f55' size-in-bits='64' id='f30dbff5'/>
+      <pointer-type-def type-id='ccc53977' size-in-bits='64' id='774b23cf'/>
+      <pointer-type-def type-id='8b6491f4' size-in-bits='64' id='f3dcd492'/>
+      <array-type-def dimensions='1' type-id='7799da43' size-in-bits='256' id='5b02a6fc'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='8470101c' size-in-bits='64' id='3d95b5f6'/>
+      <pointer-type-def type-id='a8c69bdf' size-in-bits='64' id='374692c7'/>
+      <pointer-type-def type-id='8bd06fd9' size-in-bits='64' id='99f34ac1'/>
+      <pointer-type-def type-id='17992e3b' size-in-bits='64' id='6dca061b'/>
+      <pointer-type-def type-id='2f351d1f' size-in-bits='64' id='a150e667'/>
+      <pointer-type-def type-id='9728e02a' size-in-bits='64' id='dd354844'/>
+      <typedef-decl name='__be16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='30' column='1' id='84a5c3d4'/>
+      <typedef-decl name='__kernel_long_t' type-id='bd54fe1a' filepath='include/uapi/asm-generic/posix_types.h' line='15' column='1' id='6a11bd61'/>
+      <typedef-decl name='__le16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='29' column='1' id='23119536'/>
+      <typedef-decl name='__le64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='33' column='1' id='a30e8d1f'/>
+      <typedef-decl name='__restorefn_t' type-id='ee076206' filepath='include/uapi/asm-generic/signal-defs.h' line='21' column='1' id='830ee0a7'/>
+      <typedef-decl name='__signalfn_t' type-id='f712e2b7' filepath='include/uapi/asm-generic/signal-defs.h' line='18' column='1' id='3b5c61ad'/>
+      <pointer-type-def type-id='c2be64d1' size-in-bits='64' id='6ca30b05'/>
+      <pointer-type-def type-id='40b5eec5' size-in-bits='64' id='9c26ea89'/>
+      <pointer-type-def type-id='5e80f131' size-in-bits='64' id='c2ab7955'/>
+      <pointer-type-def type-id='8b28624a' size-in-bits='64' id='3ed0c5ec'/>
+      <pointer-type-def type-id='b911101f' size-in-bits='64' id='1734c68b'/>
+      <typedef-decl name='local_t' type-id='de878dd6' filepath='include/asm-generic/local.h' line='25' column='1' id='dd91f264'/>
+      <typedef-decl name='phy_interface_t' type-id='08f5ca19' filepath='include/linux/phy.h' line='107' column='1' id='d61bf978'/>
+      <pointer-type-def type-id='59145b91' size-in-bits='64' id='ae18a37d'/>
+      <pointer-type-def type-id='3ad2f92f' size-in-bits='64' id='b3002d4b'/>
+      <typedef-decl name='sk_buff_data_t' type-id='f0981eeb' filepath='include/linux/skbuff.h' line='608' column='1' id='5c1abc34'/>
+      <pointer-type-def type-id='670d37f5' size-in-bits='64' id='82ff4739'/>
+      <pointer-type-def type-id='90c1df7f' size-in-bits='64' id='ad13fd93'/>
+      <typedef-decl name='u_int8_t' type-id='f9b06939' filepath='include/linux/types.h' line='98' column='1' id='892641a4'/>
+      <pointer-type-def type-id='ecbaa04a' size-in-bits='64' id='bb28da1c'/>
+      <pointer-type-def type-id='af6e35e9' size-in-bits='64' id='5e15576d'/>
+      <typedef-decl name='wait_queue_func_t' type-id='3e643710' filepath='include/linux/wait.h' line='16' column='1' id='67119c17'/>
+      <array-type-def dimensions='2' type-id='19c2251e' size-in-bits='384' id='4e00dfcd'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='192' id='5867ed7f'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='2368' id='2b89ba50'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='256' id='e3dc4fdb'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='48' id='cf1a4160'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ab0c2f56' size-in-bits='320' id='ec2b1499'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d71093' size-in-bits='480' id='df6d2206'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='6b1203e5' size-in-bits='64' id='e9bf5d35'/>
+      <union-decl name='sigval' size-in-bits='64' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='8' column='1' id='a094b870'>
+        <data-member access='public'>
+          <var-decl name='sival_int' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sival_ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='10' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='153' column='1' id='f126afef'>
+        <data-member access='public'>
+          <var-decl name='skc_addrpair' type-id='d17a6eed' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7eabe5fc' visibility='default' filepath='include/net/sock.h' line='155' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='865' column='1' id='b97daab4'>
+        <data-member access='public'>
+          <var-decl name='inner_protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='inner_ipproto' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='867' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='165' column='1' id='d1c6b54d'>
+        <data-member access='public'>
+          <var-decl name='skc_portpair' type-id='e7c2a649' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='a414c3c0' visibility='default' filepath='include/net/sock.h' line='167' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1' id='9c81e675'>
+        <data-member access='public'>
+          <var-decl name='mark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved_tailroom' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__38' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='838' column='1' id='b4fc55b7'>
+        <data-member access='public'>
+          <var-decl name='csum' type-id='fbd88bba' visibility='default' filepath='include/linux/skbuff.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='358587ec' visibility='default' filepath='include/linux/skbuff.h' line='840' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1' id='da6f1b1a'>
+        <data-member access='public'>
+          <var-decl name='' type-id='fe3b99ac' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='798' column='1' id='de05b94c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='16b0d6e5' visibility='default' filepath='include/linux/cgroup-defs.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='818' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='728' column='1' id='271a40b8'>
+        <data-member access='public'>
+          <var-decl name='' type-id='710cec71' visibility='default' filepath='include/linux/skbuff.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp_tsorted_anchor' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='733' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='180' column='1' id='9e20c58f'>
+        <data-member access='public'>
+          <var-decl name='skc_bind_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='182' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='211' column='1' id='38f5bda8'>
+        <data-member access='public'>
+          <var-decl name='skc_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_nulls_node' type-id='5bd248e7' visibility='default' filepath='include/net/sock.h' line='213' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='219' column='1' id='9e121764'>
+        <data-member access='public'>
+          <var-decl name='skc_incoming_cpu' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_rcv_wnd' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_rcv_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='222' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='716' column='1' id='b24a5a7e'>
+        <data-member access='public'>
+          <var-decl name='tstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skb_mstamp_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='718' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='151' column='1' id='faf198da'>
+        <data-member access='public'>
+          <var-decl name='fib6_siblings' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='153' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1' id='a6d66544'>
+        <data-member access='public'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/skbuff.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip_defrag_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='713' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='228' column='1' id='5547e6b1'>
+        <data-member access='public'>
+          <var-decl name='skc_rxhash' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_window_clamp' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_snd_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='231' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__39' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='851' column='1' id='8c3ee840'>
+        <data-member access='public'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sender_cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='853' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='160' column='1' id='5d6a1e78'>
+        <data-member access='public'>
+          <var-decl name='skc_hash' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_u16hashes' type-id='810b4a17' visibility='default' filepath='include/net/sock.h' line='162' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='199' column='1' id='56935795'>
+        <data-member access='public'>
+          <var-decl name='skc_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_listener' type-id='f772df6d' visibility='default' filepath='include/net/sock.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_dr' type-id='b7ab21fc' visibility='default' filepath='include/net/sock.h' line='202' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='127' column='1' id='4fa91678'>
+        <data-member access='public'>
+          <var-decl name='destructor' type-id='841969d0' visibility='default' filepath='include/net/ip.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='saved_sk' type-id='f772df6d' visibility='default' filepath='include/net/ip.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1' id='52c6c1a9'>
+        <data-member access='public'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched/topology.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched/topology.h' line='134' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='02138eb3' size-in-bits='64' id='3a0c781f'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='320' id='67c1c82c'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='448' id='27cbf0c8'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='96' id='0955670c'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='8f9ed095' size-in-bits='64' id='cd2cc9e1'/>
+      <pointer-type-def type-id='08616ba1' size-in-bits='64' id='1a17e40d'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='7680' id='1868bbfa'>
+        <subrange length='120' type-id='7ff19f0f' id='1ec4f032'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1792' id='8bbc0f7f'>
+        <subrange length='28' type-id='7ff19f0f' id='3db583d7'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1856' id='4fbdefa2'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='384' id='f0691bd3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='576' id='307ac9b4'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <pointer-type-def type-id='a38d6c05' size-in-bits='64' id='da81d789'/>
+      <pointer-type-def type-id='4e7ef9a4' size-in-bits='64' id='a75080c6'/>
+      <pointer-type-def type-id='607834f2' size-in-bits='64' id='60c9df2c'/>
+      <pointer-type-def type-id='4f1e6b9a' size-in-bits='64' id='66288ae4'/>
+      <pointer-type-def type-id='47658c9d' size-in-bits='64' id='cf265ed1'/>
+      <pointer-type-def type-id='9c267c11' size-in-bits='64' id='8bf3cff5'/>
+      <pointer-type-def type-id='f6590065' size-in-bits='64' id='81c90e99'/>
+      <pointer-type-def type-id='97db9237' size-in-bits='64' id='8581ac2b'/>
+      <pointer-type-def type-id='d843c93e' size-in-bits='64' id='f42e15b8'/>
+      <pointer-type-def type-id='37f6d957' size-in-bits='64' id='40363cbb'/>
+      <pointer-type-def type-id='ff15393c' size-in-bits='64' id='89340c26'/>
+      <pointer-type-def type-id='d8579536' size-in-bits='64' id='28375890'/>
+      <pointer-type-def type-id='6c0e4a93' size-in-bits='64' id='4f3d95df'/>
+      <pointer-type-def type-id='8eeb5a69' size-in-bits='64' id='fedb17fd'/>
+      <pointer-type-def type-id='8999d61c' size-in-bits='64' id='8a09feb6'/>
+      <pointer-type-def type-id='c611b7c0' size-in-bits='64' id='941a57ca'/>
+      <pointer-type-def type-id='90d2ca45' size-in-bits='64' id='639b44d1'/>
+      <pointer-type-def type-id='820ec76f' size-in-bits='64' id='300d6413'/>
+      <pointer-type-def type-id='1ee46c97' size-in-bits='64' id='b615a053'/>
+      <pointer-type-def type-id='2572f485' size-in-bits='64' id='40f624e9'/>
+      <pointer-type-def type-id='ac104281' size-in-bits='64' id='8127e1dd'/>
+      <pointer-type-def type-id='9f5ca0a3' size-in-bits='64' id='1ee0b597'/>
+      <pointer-type-def type-id='46af63cb' size-in-bits='64' id='f3d2e9a7'/>
+      <pointer-type-def type-id='2914f7c3' size-in-bits='64' id='35f07b8f'/>
+      <pointer-type-def type-id='c83cb72c' size-in-bits='64' id='bc0ca82e'/>
+      <pointer-type-def type-id='ecd721d1' size-in-bits='64' id='1779e61d'/>
+      <pointer-type-def type-id='117b6b23' size-in-bits='64' id='25c6126f'/>
+      <pointer-type-def type-id='07c93537' size-in-bits='64' id='e46f66f3'/>
+      <pointer-type-def type-id='e74bcc7b' size-in-bits='64' id='170cc62f'/>
+      <pointer-type-def type-id='1650bf24' size-in-bits='64' id='8f17d05e'/>
+      <pointer-type-def type-id='4cb2ce2a' size-in-bits='64' id='2a3a4aec'/>
+      <pointer-type-def type-id='19db78f1' size-in-bits='64' id='7a66877d'/>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='infinite' id='baf98fd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <qualified-type-def type-id='002ac4a6' volatile='yes' id='75a392dc'/>
+      <pointer-type-def type-id='68523a94' size-in-bits='64' id='666fb412'/>
+      <pointer-type-def type-id='0a042b05' size-in-bits='64' id='82398c35'/>
+      <pointer-type-def type-id='bbbd8970' size-in-bits='64' id='577ede06'/>
+      <pointer-type-def type-id='ccf6c819' size-in-bits='64' id='ae4d1761'/>
+      <array-type-def dimensions='1' type-id='c6675287' size-in-bits='infinite' id='a0955e2b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='68a72cd7' size-in-bits='64' id='b6316a7f'/>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='32' id='810b4a17'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='128' id='9396cabb'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='984972f4' size-in-bits='64' id='35e7a722'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='296' id='12e4ade3'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='arch_hw_breakpoint' size-in-bits='192' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='21' column='1' id='b61f34eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ctrl' type-id='2633d065' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_crypto_key' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='52' column='1' id='7b61b7b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_cfg' type-id='cdcb89ef' visibility='default' filepath='include/linux/blk-crypto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_unit_size_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raw' type-id='7f475abd' visibility='default' filepath='include/linux/blk-crypto.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_debugfs_attr' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-mq-debugfs.h' line='9' column='1' id='d53ee986'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='block/blk-mq-debugfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='block/blk-mq-debugfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='5694e921' visibility='default' filepath='block/blk-mq-debugfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='9682fd8c' visibility='default' filepath='block/blk-mq-debugfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='block/blk-mq-debugfs.h' line='15' 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='101' column='1' id='11fd1392'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1744' column='1' id='dbd58b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='2207988a' visibility='default' filepath='include/linux/blkdev.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='156433b6' visibility='default' filepath='include/linux/blkdev.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rw_page' type-id='55f833ce' visibility='default' filepath='include/linux/blkdev.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='check_events' type-id='4bf65d9d' visibility='default' filepath='include/linux/blkdev.h' line='1750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='media_changed' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlock_native_capacity' type-id='dabeff1b' visibility='default' filepath='include/linux/blkdev.h' line='1754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='revalidate_disk' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='getgeo' type-id='68a88aaa' visibility='default' filepath='include/linux/blkdev.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='swap_slot_free_notify' type-id='c4cac78c' visibility='default' filepath='include/linux/blkdev.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='report_zones' type-id='8eee5b07' visibility='default' filepath='include/linux/blkdev.h' line='1759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/blkdev.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pr_ops' type-id='08d45f21' visibility='default' filepath='include/linux/blkdev.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='1764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='1765' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cdev' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/cdev.h' line='14' column='1' id='22f86351'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cdev.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cdev.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/cdev.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/cdev.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/cdev.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/cdev.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_cached_keys' size-in-bits='1472' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='273' column='1' id='1540019b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='248874df' visibility='default' filepath='net/wireless/core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data' type-id='b726c152' visibility='default' filepath='net/wireless/core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='def' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_conn' size-in-bits='3392' is-struct='yes' visibility='default' filepath='net/wireless/sme.c' line='31' column='1' id='43420c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='1291defd' visibility='default' filepath='net/wireless/sme.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='state' type-id='08f5ca1a' visibility='default' filepath='net/wireless/sme.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='prev_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='net/wireless/sme.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='net/wireless/sme.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='auto_auth' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3336'>
+          <var-decl name='prev_bssid_valid' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='290' column='1' id='2e77eb82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rssi_hyst' type-id='19c2251e' visibility='default' filepath='net/wireless/core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_rssi_event_value' type-id='a7832498' visibility='default' filepath='net/wireless/core.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rssi_thresholds' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rssi_thresholds' type-id='a4bfb48f' visibility='default' filepath='net/wireless/core.h' line='294' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_internal_bss' size-in-bits='1664' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='152' column='1' id='2baffd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidden_list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rbn' type-id='2a8a6332' visibility='default' filepath='net/wireless/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ts_boottime' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ts' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcount' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hold' type-id='49178f86' visibility='default' filepath='net/wireless/core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pub' type-id='5f145050' visibility='default' filepath='net/wireless/core.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot_operations' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='325' column='1' id='0584e65d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alloc_dquot' type-id='324070f9' visibility='default' filepath='include/linux/quota.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_dquot' type-id='dbc22931' visibility='default' filepath='include/linux/quota.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acquire_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mark_dirty' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_reserved_space' type-id='15543b10' visibility='default' filepath='include/linux/quota.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_projid' type-id='c23b3cbc' visibility='default' filepath='include/linux/quota.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_inode_usage' type-id='6b7539fb' visibility='default' filepath='include/linux/quota.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='343' 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='82' column='1' id='e51de182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metrics' type-id='46fc18d9' visibility='default' filepath='include/net/dst.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/dst.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='eventfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='77dc8383'/>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='193' column='1' id='1a0c5572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encode_fh' type-id='2cdfbf0a' visibility='default' filepath='include/linux/exportfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fh_to_dentry' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fh_to_parent' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='cb0ca137' visibility='default' filepath='include/linux/exportfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_parent' type-id='36ed3b9a' visibility='default' filepath='include/linux/exportfs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_metadata' type-id='28ba4492' visibility='default' filepath='include/linux/exportfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_uuid' type-id='547aa7d2' visibility='default' filepath='include/linux/exportfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_blocks' type-id='35d085ce' visibility='default' filepath='include/linux/exportfs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='commit_blocks' type-id='30144f27' visibility='default' filepath='include/linux/exportfs.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_nh' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='130' column='1' id='979d5bbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip6_fib.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='last_probe' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rt6i_pcpu' type-id='1ead5d78' visibility='default' filepath='include/net/ip6_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rt6i_exception_bucket' type-id='cc9f99b2' visibility='default' filepath='include/net/ip6_fib.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_operations' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fscrypt.h' line='58' column='1' id='fa21a7e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_prefix' type-id='80f4b756' visibility='default' filepath='include/linux/fscrypt.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_context' type-id='c60354f3' visibility='default' filepath='include/linux/fscrypt.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_context' type-id='ef75df1f' visibility='default' filepath='include/linux/fscrypt.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_dummy_policy' type-id='c0135c9c' visibility='default' filepath='include/linux/fscrypt.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='empty_dir' type-id='deb31178' visibility='default' filepath='include/linux/fscrypt.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_namelen' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='has_stable_inodes' type-id='3b2da7a6' visibility='default' filepath='include/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_ino_and_lblk_bits' type-id='c95d966d' visibility='default' filepath='include/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_num_devices' type-id='d2f4c704' visibility='default' filepath='include/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_devices' type-id='b0ddaf40' visibility='default' filepath='include/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_oem_data1' type-id='20b279f0' visibility='default' filepath='include/linux/fscrypt.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsverity_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f0d764c'/>
+      <class-decl name='gnet_stats_basic_cpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='10' column='1' id='c026ae59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstats' type-id='1f9b1a31' 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='e4d85780' visibility='default' filepath='include/net/gen_stats.h' line='12' 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='5bd248e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6cf6468f' 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='2cb135bf' visibility='default' filepath='include/linux/list_nulls.h' line='26' 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='112' column='1' id='a80839c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alloc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_edmg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='388' column='1' id='d87e6929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bw_config' type-id='51403231' visibility='default' filepath='include/net/cfg80211.h' line='390' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifacaddr6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='140' column='1' id='1883cd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='aca_rt' type-id='fe454a75' visibility='default' filepath='include/net/if_inet6.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_next' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aca_addr_lst' type-id='03a4a074' visibility='default' filepath='include/net/if_inet6.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='aca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='aca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifmcaddr6' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='114' column='1' id='cc23d6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idev' type-id='f026b16b' visibility='default' filepath='include/net/if_inet6.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mca_sources' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mca_tomb' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mca_sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mca_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mca_sfcount' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mca_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mca_flags' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='mca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mca_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='129' 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='b95a5ed3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='03a4a074' 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='3a639063' 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='fc6f14a9' 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='e3d8ce29' 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='78a133c2' 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='78a133c2' 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='78a133c2' 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='3f1a6b60' 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='78a133c2' 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='002ac4a6' 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='002ac4a6' 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='3f1a6b60' 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='ac1fa8c0' 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='3f1a6b60' 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='3f1a6b60' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frags' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='98' column='1' id='e56bc2e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_frag.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constructor' type-id='82a6d477' visibility='default' filepath='include/net/inet_frag.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destructor' type-id='7e20177b' visibility='default' filepath='include/net/inet_frag.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frag_expire' type-id='9582ad9a' visibility='default' filepath='include/net/inet_frag.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frags_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_frag.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='frags_cache_name' type-id='80f4b756' visibility='default' filepath='include/net/inet_frag.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rhash_params' type-id='e4c11782' visibility='default' filepath='include/net/inet_frag.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/net/inet_frag.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1932' column='1' id='5f5aa1ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='02f90a61' visibility='default' filepath='include/linux/fs.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_link' type-id='76ae8e1d' visibility='default' filepath='include/linux/fs.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='permission' type-id='f4f91b99' visibility='default' filepath='include/linux/fs.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_acl' type-id='7f30b822' visibility='default' filepath='include/linux/fs.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readlink' type-id='a57bd028' visibility='default' filepath='include/linux/fs.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='c9cd0e09' visibility='default' filepath='include/linux/fs.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link' type-id='4b872e00' visibility='default' filepath='include/linux/fs.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlink' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='symlink' type-id='234843b5' visibility='default' filepath='include/linux/fs.h' line='1943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mkdir' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rmdir' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mknod' type-id='f9e0c0e5' visibility='default' filepath='include/linux/fs.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rename' type-id='7733ef81' visibility='default' filepath='include/linux/fs.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='setattr' type-id='c237e829' visibility='default' filepath='include/linux/fs.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='getattr' type-id='0b787edf' visibility='default' filepath='include/linux/fs.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='listxattr' type-id='3494e4bb' visibility='default' filepath='include/linux/fs.h' line='1951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fiemap' type-id='0508acce' visibility='default' filepath='include/linux/fs.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='update_time' type-id='64ecf6a5' visibility='default' filepath='include/linux/fs.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='atomic_open' type-id='d3807eb0' visibility='default' filepath='include/linux/fs.h' line='1955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tmpfile' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_acl' type-id='820976ef' visibility='default' filepath='include/linux/fs.h' line='1959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1964' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_mc_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='c2a59aaa'/>
+      <class-decl name='irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='482' column='1' id='0f5f7920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_device' type-id='fa0b179b' visibility='default' filepath='include/linux/irq.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irq.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq_startup' type-id='1cb2627d' visibility='default' filepath='include/linux/irq.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq_mask_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='irq_unmask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='irq_eoi' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_set_affinity' type-id='d72a0292' visibility='default' filepath='include/linux/irq.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_retrigger' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_set_type' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_set_wake' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='irq_bus_lock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='irq_bus_sync_unlock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq_cpu_online' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='irq_cpu_offline' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq_suspend' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_resume' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irq_pm_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='irq_calc_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='irq_print_chip' type-id='9438aa05' visibility='default' filepath='include/linux/irq.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='irq_request_resources' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='irq_release_resources' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='irq_compose_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='irq_write_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='irq_get_irqchip_state' type-id='f12b668c' visibility='default' filepath='include/linux/irq.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='irq_set_irqchip_state' type-id='ecf8d02d' visibility='default' filepath='include/linux/irq.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='irq_set_vcpu_affinity' type-id='cb5b8228' visibility='default' filepath='include/linux/irq.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ipi_send_single' type-id='19c5fc2b' visibility='default' filepath='include/linux/irq.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ipi_send_mask' type-id='eb0bccd8' visibility='default' filepath='include/linux/irq.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_nmi_setup' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='irq_nmi_teardown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='531' 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='966' column='1' id='6194fd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ack' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='eoi' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='polarity' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='973' 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='f8292115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_number' type-id='95e97e5e' 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='2d507faf' 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='c73a16a3' 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='aa80c027' 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='aa80c027' 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='4a744ea1' visibility='default' filepath='include/net/iw_handler.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='libipw_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='9c91a761'/>
+      <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='dc49d474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='ff0d68dc' 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='153e161b' 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='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='49' 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='b0690d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqi_format' type-id='eb9a3ab6' 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='95e97e5e' 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='72f469ec' 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='7359adad' 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='f0981eeb' 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='f0981eeb' 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='33341965' 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='33341965' 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='eaa32e2f' visibility='default' filepath='include/linux/quota.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='71' column='1' id='1429eee4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='c9df1e6c' 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='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' 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_setup' type-id='8eff9c66' 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='6bbe39a7' 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='eaa32e2f' 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='95e97e5e' 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='64615833' 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='e3d8ce29' 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='95e97e5e' 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='77ba73f2' 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='f066dd3c' visibility='default' filepath='include/net/neighbour.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_rate_estimator' is-struct='yes' visibility='default' is-declaration-only='yes' id='51dbeb7e'/>
+      <class-decl name='nexthop' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='80' column='1' id='b754514f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/net/nexthop.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fi_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f6i_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='grp_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/nexthop.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/net/nexthop.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='nh_flags' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='is_group' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/nexthop.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/nexthop.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='' type-id='21fca59c' visibility='default' filepath='include/net/nexthop.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='91' column='1' id='7a1bc3c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_logger' is-struct='yes' visibility='default' is-declaration-only='yes' id='01c546da'/>
+      <class-decl name='percpu_rw_semaphore' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/percpu-rwsem.h' line='12' column='1' id='ce848ab1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rss' type-id='638a7d75' visibility='default' filepath='include/linux/percpu-rwsem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_count' type-id='807869d3' visibility='default' filepath='include/linux/percpu-rwsem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rw_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/percpu-rwsem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='writer' type-id='71598d38' visibility='default' filepath='include/linux/percpu-rwsem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='readers_block' type-id='95e97e5e' visibility='default' filepath='include/linux/percpu-rwsem.h' line='17' 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='723' column='1' id='f2e22af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='em_pd' type-id='ce714046' visibility='default' filepath='kernel/sched/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='726' column='1'/>
+        </data-member>
+      </class-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='474' column='1' id='a752caf1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='compat_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='49659421' visibility='default' filepath='include/uapi/linux/perf_event.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_enabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_running' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='' type-id='9aa86c15' visibility='default' filepath='include/uapi/linux/perf_event.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pmc_width' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='time_shift' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='time_mult' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='time_zero' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='__reserved' type-id='e1f95b49' visibility='default' filepath='include/uapi/linux/perf_event.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='data_head' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='data_tail' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='data_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='data_size' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='aux_head' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='aux_tail' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='aux_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='aux_size' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='629' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_driver' size-in-bits='4160' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='476' column='1' id='84a0e7ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdiodrv' type-id='7eda6831' visibility='default' filepath='include/linux/phy.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/phy.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='phy_id_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='3635993f' visibility='default' filepath='include/linux/phy.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_reset' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='config_init' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='probe' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_features' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='suspend' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='resume' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='config_aneg' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='aneg_done' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='read_status' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ack_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='config_intr' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='did_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='handle_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='remove' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='match_phy_device' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ts_info' type-id='21cdc373' visibility='default' filepath='include/linux/phy.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hwtstamp' type-id='f2c45924' visibility='default' filepath='include/linux/phy.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='rxtstamp' type-id='bce7b4e2' visibility='default' filepath='include/linux/phy.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='txtstamp' type-id='b8bd68c5' visibility='default' filepath='include/linux/phy.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wol' type-id='47f66a6b' visibility='default' filepath='include/linux/phy.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_wol' type-id='887cf9b8' visibility='default' filepath='include/linux/phy.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='link_change_notify' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='read_mmd' type-id='3eb4a20d' visibility='default' filepath='include/linux/phy.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='write_mmd' type-id='4c9695fa' visibility='default' filepath='include/linux/phy.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='read_page' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='write_page' type-id='b1be7154' visibility='default' filepath='include/linux/phy.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='module_info' type-id='930fcda9' visibility='default' filepath='include/linux/phy.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='module_eeprom' type-id='51f1236c' visibility='default' filepath='include/linux/phy.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_sset_count' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='get_strings' type-id='0cce9961' visibility='default' filepath='include/linux/phy.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='get_stats' type-id='44fd4636' visibility='default' filepath='include/linux/phy.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='get_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='set_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_loopback' type-id='f727c4d8' visibility='default' filepath='include/linux/phy.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='642' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phylink' is-struct='yes' visibility='default' is-declaration-only='yes' id='7d5dfb1c'/>
+      <class-decl name='qdisc_size_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='43' column='1' id='bd1d1d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='szopts' type-id='c7a2cf9f' visibility='default' filepath='include/net/sch_generic.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='data' type-id='0f300383' visibility='default' filepath='include/net/sch_generic.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quotactl_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='434' column='1' id='8ce4ff83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quota_on' type-id='de6b64d0' visibility='default' filepath='include/linux/quota.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quota_off' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='quota_enable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='quota_disable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quota_sync' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_info' type-id='4e326e06' visibility='default' filepath='include/linux/quota.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_nextdqblk' type-id='483e8c3a' visibility='default' filepath='include/linux/quota.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_state' type-id='eb638046' visibility='default' filepath='include/linux/quota.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rm_xquota' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='449' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='56' column='1' id='e4c11782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nelem_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_len' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='head_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_size' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='automatic_shrinking' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hashfn' type-id='07fa0d18' visibility='default' filepath='include/linux/rhashtable-types.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='obj_hashfn' type-id='365fa902' visibility='default' filepath='include/linux/rhashtable-types.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='obj_cmpfn' type-id='a8e15d8c' visibility='default' filepath='include/linux/rhashtable-types.h' line='66' 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='700' column='1' id='aca51d4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flows' type-id='11d66d65' visibility='default' filepath='include/linux/netdevice.h' line='703' 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='678' column='1' id='6f8d5f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpus' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='681' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain_shared' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='66' column='1' id='ccc53977'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_busy_cpus' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_idle_cores' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='69' 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='1432' column='1' id='8b6491f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='f3dcd492' visibility='default' filepath='kernel/sched/sched.h' line='1433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_weight' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgc' type-id='29a48d3d' visibility='default' filepath='kernel/sched/sched.h' line='1437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='asym_prefer_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skb_ext' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='4137' column='1' id='a8c69bdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='4138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='cf114704' visibility='default' filepath='include/linux/skbuff.h' line='4139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='chunks' type-id='f9b06939' visibility='default' filepath='include/linux/skbuff.h' line='4140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/skbuff.h' line='4141' 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='96' column='1' id='8bd06fd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/net.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fasync_list' type-id='5bb9c75d' visibility='default' filepath='include/linux/net.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/net.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_operations' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2016' column='1' id='874691ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_inode' type-id='e8c4dba4' visibility='default' filepath='include/linux/fs.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dirty_inode' type-id='5f5506f6' visibility='default' filepath='include/linux/fs.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_inode' type-id='fd780be6' visibility='default' filepath='include/linux/fs.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_inode' type-id='28ba4492' visibility='default' filepath='include/linux/fs.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put_super' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_fs' type-id='dcab5203' visibility='default' filepath='include/linux/fs.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeze_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unfreeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='statfs' type-id='35646c79' visibility='default' filepath='include/linux/fs.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='remount_fs' type-id='552c8f87' visibility='default' filepath='include/linux/fs.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='umount_begin' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='show_options' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='show_devname' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='show_path' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_stats' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='quota_read' type-id='e295c77c' visibility='default' filepath='include/linux/fs.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='quota_write' type-id='a9b95107' visibility='default' filepath='include/linux/fs.h' line='2041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_dquots' type-id='ae02292a' visibility='default' filepath='include/linux/fs.h' line='2042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bdev_try_to_free_page' type-id='ea44f8d2' visibility='default' filepath='include/linux/fs.h' line='2044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2053' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='401' column='1' id='17992e3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='root' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/sch_generic.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prio' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='deleting' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy_ht_node' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='424' 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='226' column='1' id='2a8ca227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='1a7b1e1d' visibility='default' filepath='include/linux/tty.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='206' column='1' id='7778009d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='carrier_raised' type-id='5626e636' visibility='default' filepath='include/linux/tty.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtr_rts' type-id='21b6f944' visibility='default' filepath='include/linux/tty.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='activate' type-id='62d26ff9' visibility='default' filepath='include/linux/tty.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destruct' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='829' column='1' id='ab0c2f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='tasks' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='831' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uid_gid_extent' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='18' column='1' id='a9d71093'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lower_first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uncached_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='net/ipv4/route.c' line='1524' column='1' id='6b1203e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/ipv4/route.c' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='net/ipv4/route.c' line='1526' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy' size-in-bits='11264' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4611' column='1' id='68523a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='perm_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addresses' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='4618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mgmt_stypes' type-id='0cda9080' visibility='default' filepath='include/net/cfg80211.h' line='4620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iface_combinations' type-id='fa32a449' visibility='default' filepath='include/net/cfg80211.h' line='4622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='n_iface_combinations' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='software_iftypes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='n_addresses' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='interface_modes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='max_acl_mac_addrs' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulatory_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ext_features' type-id='8f1320db' visibility='default' filepath='include/net/cfg80211.h' line='4634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ap_sme_capa' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='signal_type' type-id='b8524648' visibility='default' filepath='include/net/cfg80211.h' line='4638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='max_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='max_sched_scan_reqs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_sched_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='max_match_sets' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_sched_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_sched_scan_plans' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_sched_scan_plan_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_sched_scan_plan_iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='n_cipher_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cipher_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='akm_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='retry_short' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='retry_long' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='frag_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rts_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='coverage_class' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/net/cfg80211.h' line='4663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hw_version' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='wowlan' type-id='78a34b70' visibility='default' filepath='include/net/cfg80211.h' line='4667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='wowlan_config' type-id='9d025b00' visibility='default' filepath='include/net/cfg80211.h' line='4668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='max_remain_on_channel_duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1680'>
+          <var-decl name='max_num_pmkids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='available_antennas_tx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='available_antennas_rx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='probe_resp_offload' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='iftype_ext_capab' type-id='3ca25343' visibility='default' filepath='include/net/cfg80211.h' line='4688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_iftype_ext_capab' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='4696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='bands' type-id='641ce2e8' visibility='default' filepath='include/net/cfg80211.h' line='4698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reg_notifier' type-id='39ee8359' visibility='default' filepath='include/net/cfg80211.h' line='4701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='regd' type-id='4e819401' visibility='default' filepath='include/net/cfg80211.h' line='4706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg80211.h' line='4710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='debugfsdir' type-id='27675065' visibility='default' filepath='include/net/cfg80211.h' line='4716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='ht_capa_mod_mask' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='4718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='vht_capa_mod_mask' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='4719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='wdev_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg80211.h' line='4724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='coalesce' type-id='9ef499bf' visibility='default' filepath='include/net/cfg80211.h' line='4730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='vendor_commands' type-id='41e3f782' visibility='default' filepath='include/net/cfg80211.h' line='4732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='vendor_events' type-id='b188cc4f' visibility='default' filepath='include/net/cfg80211.h' line='4733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='n_vendor_commands' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='n_vendor_events' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='max_ap_assoc_sta' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10768'>
+          <var-decl name='max_num_csa_counters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10776'>
+          <var-decl name='max_adj_channel_rssi_comp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='bss_select_support' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='nan_supported_bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10848'>
+          <var-decl name='txq_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='txq_memory_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='txq_quantum' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='support_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='support_only_he_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='pmsr_capa' type-id='5abfac26' visibility='default' filepath='include/net/cfg80211.h' line='4752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg80211.h' line='4756' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy' size-in-bits='9472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='176' column='1' id='0a042b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg802154.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='current_channel' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='current_page' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='supported' type-id='7b03c2a4' visibility='default' filepath='include/net/cfg802154.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='transmit_power' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='cca' type-id='51a1cee7' visibility='default' filepath='include/net/cfg802154.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='perm_extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cca_ed_level' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='symbol_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='lifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg802154.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg802154.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg802154.h' line='217' 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='1182636e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='19c2251e' 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='19c2251e' visibility='default' filepath='include/net/xdp.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='44' column='1' id='bbbd8970'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='48e57944' visibility='default' filepath='include/net/xdp_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chunk_mask' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='headroom' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chunk_size_nohr' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/net/xdp_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/net/xdp_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/net/xdp_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/xdp_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pgs' type-id='9f93c9da' visibility='default' filepath='include/net/xdp_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='npgs' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='queue_id' type-id='1dc6a898' visibility='default' filepath='include/net/xdp_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='need_wakeup' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/xdp_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/xdp_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fq_reuse' type-id='b925f68b' visibility='default' filepath='include/net/xdp_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='zc' type-id='b50a4934' visibility='default' filepath='include/net/xdp_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='xsk_list_lock' type-id='fb4018a0' visibility='default' filepath='include/net/xdp_sock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='xsk_list' type-id='72f469ec' visibility='default' filepath='include/net/xdp_sock.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='499' column='1' id='ccf6c819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xp_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='byidx' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/xfrm.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='pos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='genid' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='priority' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='selector' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='walk' type-id='e8e96050' visibility='default' filepath='include/net/xfrm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='polq' type-id='d15e38d5' visibility='default' filepath='include/net/xfrm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='bydst_reinsert' type-id='b50a4934' visibility='default' filepath='include/net/xfrm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3216'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3224'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='xfrm_nr' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3248'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='xfrm_vec' type-id='41cc9498' visibility='default' filepath='include/net/xfrm.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='bydst_inexact_list' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/xfrm.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_table_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='248' column='1' id='68a72cd7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='initial_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stacksize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jumpstack' type-id='30e664af' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='entries' type-id='5e6516ee' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_padding' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='171' column='1' id='6041cd25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/mmzone.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='167' column='1' id='a414c3c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_dport' type-id='84a5c3d4' visibility='default' filepath='include/net/sock.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='skc_num' type-id='d315442e' visibility='default' filepath='include/net/sock.h' line='169' 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='include/net/sock.h' line='155' column='1' id='7eabe5fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_daddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skc_rcv_saddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__34' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='840' column='1' id='358587ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='csum_start' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='csum_offset' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='842' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='dd91f264' visibility='default' filepath='include/asm-generic/local.h' line='22' column='1' id='de878dd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='f22a8abb' visibility='default' filepath='include/asm-generic/local.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__32' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1' id='fe3b99ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='1285aa79' visibility='default' filepath='include/linux/skbuff.h' line='698' column='1'/>
+        </data-member>
+      </class-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='28' column='1' id='bb08c7e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dist' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='800' column='1' id='16b0d6e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_data' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_refcnt' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='padding' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prioidx' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/linux/cgroup-defs.h' line='806' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__33' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='729' column='1' id='710cec71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_skb_refdst' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destructor' type-id='0ef96694' visibility='default' filepath='include/linux/skbuff.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='47692c1a' const='yes' id='2212bd2d'/>
+      <qualified-type-def type-id='66fa8ce5' const='yes' id='38ce7f2c'/>
+      <qualified-type-def type-id='c553aabf' const='yes' id='7c8b7a6c'/>
+      <pointer-type-def type-id='dc743cb2' size-in-bits='64' id='a2fb6348'/>
+      <pointer-type-def type-id='208298e3' size-in-bits='64' id='f696846b'/>
+      <pointer-type-def type-id='afa36b70' size-in-bits='64' id='d841feae'/>
+      <qualified-type-def type-id='ca7a1741' const='yes' id='8967eee8'/>
+      <pointer-type-def type-id='a87d8ed1' size-in-bits='64' id='38a81521'/>
+      <pointer-type-def type-id='3ae4e62d' size-in-bits='64' id='bd561d05'/>
+      <qualified-type-def type-id='c4b04493' const='yes' id='b64da4b2'/>
+      <qualified-type-def type-id='7359adad' const='yes' id='9cbd1c16'/>
+      <qualified-type-def type-id='95fcbc94' const='yes' id='ff37489f'/>
+      <qualified-type-def type-id='2d3dd5e3' const='yes' id='e4f938dc'/>
+      <pointer-type-def type-id='4dc01f59' size-in-bits='64' id='9bf95e81'/>
+      <array-type-def dimensions='1' type-id='a7623477' size-in-bits='13056' id='f88f3d38'>
+        <subrange length='102' type-id='7ff19f0f' id='8590b11a'/>
+      </array-type-def>
+      <pointer-type-def type-id='d39c42ab' size-in-bits='64' id='4dec003b'/>
+      <pointer-type-def type-id='7552fc26' size-in-bits='64' id='50abd760'/>
+      <pointer-type-def type-id='fbe9020d' size-in-bits='64' id='d9394db1'/>
+      <pointer-type-def type-id='c435a5bb' size-in-bits='64' id='cd97030f'/>
+      <pointer-type-def type-id='32358857' size-in-bits='64' id='6d30564f'/>
+      <enum-decl name='__anonymous_enum__3' is-anonymous='yes' filepath='include/linux/phy.h' line='80' column='1' id='08f5ca19'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_USXGMII' value='23'/>
+        <enumerator name='PHY_INTERFACE_MODE_MAX' value='24'/>
+      </enum-decl>
+      <enum-decl name='nl80211_chan_width' filepath='include/uapi/linux/nl80211.h' line='4287' column='1' id='e043cccc'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='zone_type' filepath='include/linux/mmzone.h' line='364' column='1' id='d278ff03'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='63b74212' size-in-bits='64' id='26760480'/>
+      <array-type-def dimensions='1' type-id='84dc82b7' size-in-bits='infinite' id='f7aeb09b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='5bd248e7' size-in-bits='64' id='6cf6468f'/>
+      <pointer-type-def type-id='1b8801b2' size-in-bits='64' id='6551bd60'/>
+      <pointer-type-def type-id='e4ca98d1' size-in-bits='64' id='793f0d19'/>
+      <pointer-type-def type-id='839b249b' size-in-bits='64' id='ec00acfb'/>
+      <pointer-type-def type-id='082b64be' size-in-bits='64' id='fd53db64'/>
+      <pointer-type-def type-id='08400b46' size-in-bits='64' id='77011cbc'/>
+      <pointer-type-def type-id='42b16dba' size-in-bits='64' id='e0087b68'/>
+      <array-type-def dimensions='1' type-id='42b16dba' size-in-bits='4096' id='e3638da9'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='af2c6a56' size-in-bits='64' id='b7ab21fc'/>
+      <pointer-type-def type-id='25126efb' size-in-bits='64' id='464a4247'/>
+      <pointer-type-def type-id='8e4f6a60' size-in-bits='64' id='4753b592'/>
+      <pointer-type-def type-id='5931aad5' size-in-bits='64' id='58505a39'/>
+      <pointer-type-def type-id='5fffc559' size-in-bits='64' id='beb4f24d'/>
+      <pointer-type-def type-id='b29581c5' size-in-bits='64' id='35b37061'/>
+      <pointer-type-def type-id='d99ae68d' size-in-bits='64' id='7bada959'/>
+      <pointer-type-def type-id='19ebf718' size-in-bits='64' id='42beb73a'/>
+      <pointer-type-def type-id='56cb7858' size-in-bits='64' id='12f0ff82'/>
+      <pointer-type-def type-id='c1f57de8' size-in-bits='64' id='87e3d3e2'/>
+      <pointer-type-def type-id='1b99a1f1' size-in-bits='64' id='5ddef2dd'/>
+      <pointer-type-def type-id='e0d0028a' size-in-bits='64' id='31cc9254'/>
+      <pointer-type-def type-id='6bd699b2' size-in-bits='64' id='8ea2626c'/>
+      <pointer-type-def type-id='cb6487f8' size-in-bits='64' id='57f0383a'/>
+      <pointer-type-def type-id='b073751e' size-in-bits='64' id='47800058'/>
+      <pointer-type-def type-id='9b634486' size-in-bits='64' id='7f416e10'/>
+      <pointer-type-def type-id='31b74d85' size-in-bits='64' id='f98694f9'/>
+      <pointer-type-def type-id='3e7a7dc5' size-in-bits='64' id='b94ac371'/>
+      <pointer-type-def type-id='92cdf314' size-in-bits='64' id='6c4618be'/>
+      <pointer-type-def type-id='960bee7e' size-in-bits='64' id='e6032f80'/>
+      <pointer-type-def type-id='458c097a' size-in-bits='64' id='5ffcd66c'/>
+      <pointer-type-def type-id='4ea599f1' size-in-bits='64' id='234d802d'/>
+      <pointer-type-def type-id='80343f75' size-in-bits='64' id='2555df59'/>
+      <pointer-type-def type-id='8087fc9a' size-in-bits='64' id='5139dd84'/>
+      <pointer-type-def type-id='cd2b672f' size-in-bits='64' id='5a3c102b'/>
+      <pointer-type-def type-id='6557550d' size-in-bits='64' id='a3c69469'/>
+      <pointer-type-def type-id='49d94952' size-in-bits='64' id='47498e6c'/>
+      <pointer-type-def type-id='f4398a06' size-in-bits='64' id='13680d10'/>
+      <pointer-type-def type-id='538b7809' size-in-bits='64' id='5f0d472d'/>
+      <pointer-type-def type-id='ecb90832' size-in-bits='64' id='e0c03654'/>
+      <pointer-type-def type-id='35b31004' size-in-bits='64' id='06b83346'/>
+      <pointer-type-def type-id='9e33bce1' size-in-bits='64' id='b60e7255'/>
+      <pointer-type-def type-id='c15e0ad2' size-in-bits='64' id='5a8326dc'/>
+      <pointer-type-def type-id='35c1cbe3' size-in-bits='64' id='351add77'/>
+      <pointer-type-def type-id='21e2c677' size-in-bits='64' id='b7ee351b'/>
+      <pointer-type-def type-id='4cef7edc' size-in-bits='64' id='d2be5b16'/>
+      <pointer-type-def type-id='a80d6b6e' size-in-bits='64' id='67a2c0c8'/>
+      <pointer-type-def type-id='d2df6ce2' size-in-bits='64' id='bda101d4'/>
+      <pointer-type-def type-id='c6751b87' size-in-bits='64' id='d91e8ea3'/>
+      <pointer-type-def type-id='f6dcb63e' size-in-bits='64' id='83359c30'/>
+      <pointer-type-def type-id='62f14019' size-in-bits='64' id='20974125'/>
+      <pointer-type-def type-id='205059e2' size-in-bits='64' id='d57a1ee4'/>
+      <pointer-type-def type-id='a82c7e12' size-in-bits='64' id='807c842c'/>
+      <pointer-type-def type-id='8427fe66' size-in-bits='64' id='fece2110'/>
+      <pointer-type-def type-id='c0de0cb2' size-in-bits='64' id='d67468b4'/>
+      <pointer-type-def type-id='965023eb' size-in-bits='64' id='88f4e837'/>
+      <pointer-type-def type-id='89e92d83' size-in-bits='64' id='5a92dd37'/>
+      <pointer-type-def type-id='3b28e6a8' size-in-bits='64' id='bd2d1eba'/>
+      <pointer-type-def type-id='858c6d7b' size-in-bits='64' id='cc325be7'/>
+      <pointer-type-def type-id='0b0288d6' size-in-bits='64' id='d6762aa0'/>
+      <pointer-type-def type-id='e87d68d4' size-in-bits='64' id='d22f8cbe'/>
+      <pointer-type-def type-id='782b4219' size-in-bits='64' id='eee971fd'/>
+      <pointer-type-def type-id='32ee1dcb' size-in-bits='64' id='b54cfa0f'/>
+      <pointer-type-def type-id='2976f714' size-in-bits='64' id='7cd466e6'/>
+      <pointer-type-def type-id='4c110a85' size-in-bits='64' id='af60ef81'/>
+      <pointer-type-def type-id='0ccb1a26' size-in-bits='64' id='be55abd8'/>
+      <pointer-type-def type-id='50801c15' size-in-bits='64' id='0c16aca1'/>
+      <pointer-type-def type-id='c8915c86' size-in-bits='64' id='699131d0'/>
+      <pointer-type-def type-id='61b18a3b' size-in-bits='64' id='c1e0b02f'/>
+      <pointer-type-def type-id='9b7dfd9f' size-in-bits='64' id='0617ad2b'/>
+      <pointer-type-def type-id='cb28c283' size-in-bits='64' id='bae60bcf'/>
+      <pointer-type-def type-id='65655453' size-in-bits='64' id='0c7d25ff'/>
+      <pointer-type-def type-id='337862e8' size-in-bits='64' id='5c9f2a92'/>
+      <pointer-type-def type-id='18359f44' size-in-bits='64' id='92446276'/>
+      <pointer-type-def type-id='cbbca4c5' size-in-bits='64' id='ed3019e9'/>
+      <pointer-type-def type-id='c0ac60c2' size-in-bits='64' id='031fe454'/>
+      <pointer-type-def type-id='0ff60dc2' size-in-bits='64' id='a6c912f4'/>
+      <pointer-type-def type-id='d8da8ad2' size-in-bits='64' id='49f84764'/>
+      <pointer-type-def type-id='e3a1e7d2' size-in-bits='64' id='98252144'/>
+      <pointer-type-def type-id='86c85b12' size-in-bits='64' id='66b76584'/>
+      <pointer-type-def type-id='594ef19f' size-in-bits='64' id='1223555b'/>
+      <pointer-type-def type-id='29cf1864' size-in-bits='64' id='50756496'/>
+      <pointer-type-def type-id='455e2261' size-in-bits='64' id='2cc5a575'/>
+      <pointer-type-def type-id='45639e3d' size-in-bits='64' id='4fcb4c39'/>
+      <pointer-type-def type-id='c4e36342' size-in-bits='64' id='e36088ec'/>
+      <pointer-type-def type-id='b4cb0241' size-in-bits='64' id='10dae4c5'/>
+      <pointer-type-def type-id='9803cec6' size-in-bits='64' id='0f8df030'/>
+      <pointer-type-def type-id='924e6a9f' size-in-bits='64' id='6f2bf2e3'/>
+      <pointer-type-def type-id='34072a4b' size-in-bits='64' id='149f0e1f'/>
+      <pointer-type-def type-id='81c3d1f5' size-in-bits='64' id='4814c3f9'/>
+      <pointer-type-def type-id='77fe651f' size-in-bits='64' id='de5dab7b'/>
+      <pointer-type-def type-id='da556df0' size-in-bits='64' id='64efa47a'/>
+      <pointer-type-def type-id='85832c21' size-in-bits='64' id='f4dd5cc5'/>
+      <pointer-type-def type-id='33f50c8e' size-in-bits='64' id='c2147f48'/>
+      <pointer-type-def type-id='898c19a2' size-in-bits='64' id='69d3de54'/>
+      <pointer-type-def type-id='d0d650b9' size-in-bits='64' id='d23fe9bd'/>
+      <pointer-type-def type-id='918604f1' size-in-bits='64' id='d2e00785'/>
+      <pointer-type-def type-id='ca6c3304' size-in-bits='64' id='922133c6'/>
+      <pointer-type-def type-id='f962dd87' size-in-bits='64' id='f3e878cb'/>
+      <pointer-type-def type-id='729b729c' size-in-bits='64' id='c11c2e76'/>
+      <pointer-type-def type-id='930eb0f7' size-in-bits='64' id='e82aa0fb'/>
+      <pointer-type-def type-id='b7b43e53' size-in-bits='64' id='147cd5a7'/>
+      <pointer-type-def type-id='811eff86' size-in-bits='64' id='6537d478'/>
+      <pointer-type-def type-id='7e5bb1dd' size-in-bits='64' id='e78e01a9'/>
+      <pointer-type-def type-id='3c813efb' size-in-bits='64' id='55530c47'/>
+      <pointer-type-def type-id='ca0a6184' size-in-bits='64' id='95208a5e'/>
+      <pointer-type-def type-id='1f17d624' size-in-bits='64' id='e0fadd76'/>
+      <pointer-type-def type-id='bcdeebc9' size-in-bits='64' id='bc1bf185'/>
+      <pointer-type-def type-id='ec50bf48' size-in-bits='64' id='08113f0a'/>
+      <pointer-type-def type-id='476a87f5' size-in-bits='64' id='1df08751'/>
+      <pointer-type-def type-id='ce67f06c' size-in-bits='64' id='74e71fae'/>
+      <pointer-type-def type-id='6858ea97' size-in-bits='64' id='65399e23'/>
+      <pointer-type-def type-id='eb19b127' size-in-bits='64' id='c25ed103'/>
+      <pointer-type-def type-id='6f52f27f' size-in-bits='64' id='20da830b'/>
+      <pointer-type-def type-id='4d6fc4c7' size-in-bits='64' id='078de3a3'/>
+      <pointer-type-def type-id='86ee0347' size-in-bits='64' id='c6e84913'/>
+      <pointer-type-def type-id='b99a3102' size-in-bits='64' id='1f6f58f4'/>
+      <pointer-type-def type-id='18da11bd' size-in-bits='64' id='c1655339'/>
+      <pointer-type-def type-id='3cab519e' size-in-bits='64' id='3e643710'/>
+      <pointer-type-def type-id='cfdbff8a' size-in-bits='64' id='55e2a83c'/>
+      <array-type-def dimensions='1' type-id='dd91f264' size-in-bits='128' id='efa46f39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='47479831' id='9c02e2a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='0cf2912e' size-in-bits='64' id='a53e2328'/>
+      <pointer-type-def type-id='9386c3d1' size-in-bits='64' id='fc7daf55'/>
+      <pointer-type-def type-id='bd54fe1a' size-in-bits='64' id='3ccc2590'/>
+      <pointer-type-def type-id='44644afc' size-in-bits='64' id='d19f4fca'/>
+      <pointer-type-def type-id='dbef6377' size-in-bits='64' id='2c8ce02f'/>
+      <pointer-type-def type-id='ed5381db' size-in-bits='64' id='ff47b24b'/>
+      <pointer-type-def type-id='75a3ad48' size-in-bits='64' id='13b49faa'/>
+      <pointer-type-def type-id='4469e818' size-in-bits='64' id='3217f9ba'/>
+      <pointer-type-def type-id='b0f27198' size-in-bits='64' id='e0677422'/>
+      <pointer-type-def type-id='32f8fd62' size-in-bits='64' id='3e644294'/>
+      <pointer-type-def type-id='d84ae668' size-in-bits='64' id='36700cde'/>
+      <pointer-type-def type-id='b92c8d0d' size-in-bits='64' id='84c6078d'/>
+      <array-type-def dimensions='1' type-id='05438640' size-in-bits='infinite' id='a51f6b3c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='8cf4128f' size-in-bits='64' id='66032958'/>
+      <pointer-type-def type-id='ad499564' size-in-bits='64' id='db994912'/>
+      <pointer-type-def type-id='cdc9541e' size-in-bits='64' id='9f9b8114'/>
+      <pointer-type-def type-id='5218160d' size-in-bits='64' id='c9d64c0d'/>
+      <pointer-type-def type-id='41425a4b' size-in-bits='64' id='cdff193b'/>
+      <pointer-type-def type-id='aec72305' size-in-bits='64' id='67adf9a9'/>
+      <array-type-def dimensions='1' type-id='f772df6d' size-in-bits='infinite' id='5be9db8d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='fb4018a0' size-in-bits='64' id='cff2d845'/>
+      <pointer-type-def type-id='b8765d15' size-in-bits='64' id='d68ad8b5'/>
+      <typedef-decl name='__addrpair' type-id='d3130597' filepath='include/net/sock.h' line='117' column='1' id='d17a6eed'/>
+      <pointer-type-def type-id='ca5008d0' size-in-bits='64' id='98c4c95a'/>
+      <typedef-decl name='__kernel_fsid_t' type-id='b55219f8' filepath='include/uapi/asm-generic/posix_types.h' line='81' column='1' id='ac895711'/>
+      <pointer-type-def type-id='1c0d3c63' size-in-bits='64' id='4d01ede7'/>
+      <pointer-type-def type-id='39ed8dbe' size-in-bits='64' id='9fe65c08'/>
+      <typedef-decl name='__portpair' type-id='3f1a6b60' filepath='include/net/sock.h' line='116' column='1' id='e7c2a649'/>
+      <typedef-decl name='__wsum' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='37' column='1' id='fbd88bba'/>
+      <pointer-type-def type-id='68bc5e16' size-in-bits='64' id='5a60e638'/>
+      <pointer-type-def type-id='a115139f' size-in-bits='64' id='e95fd96b'/>
+      <pointer-type-def type-id='7e5ce7a8' size-in-bits='64' id='3d4d3aba'/>
+      <pointer-type-def type-id='7ad36775' size-in-bits='64' id='bf751261'/>
+      <typedef-decl name='irq_flow_handler_t' type-id='8937f3c2' filepath='include/linux/irqhandler.h' line='12' column='1' id='cdb741d3'/>
+      <pointer-type-def type-id='ff95f77c' size-in-bits='64' id='c1de1086'/>
+      <pointer-type-def type-id='56731789' size-in-bits='64' id='07ebb4cd'/>
+      <pointer-type-def type-id='64f32e32' size-in-bits='64' id='4a028f44'/>
+      <pointer-type-def type-id='9754e8aa' size-in-bits='64' id='7a0ed254'/>
+      <pointer-type-def type-id='6fd68117' size-in-bits='64' id='bd3f3f93'/>
+      <typedef-decl name='resource_size_t' type-id='2522883d' filepath='include/linux/types.h' line='163' column='1' id='acc63fdf'/>
+      <pointer-type-def type-id='fa5149d8' size-in-bits='64' id='c65c1382'/>
+      <pointer-type-def type-id='dd9a5153' size-in-bits='64' id='c297924f'/>
+      <pointer-type-def type-id='80310425' size-in-bits='64' id='d3210449'/>
+      <pointer-type-def type-id='fe1697ae' size-in-bits='64' id='14ca5c08'/>
+      <typedef-decl name='socket_state' type-id='08f5ca1b' filepath='include/uapi/linux/net.h' line='54' column='1' id='ee2ecafb'/>
+      <pointer-type-def type-id='30247438' size-in-bits='64' id='a2178c8a'/>
+      <pointer-type-def type-id='54c5fdf4' size-in-bits='64' id='1854489e'/>
+      <pointer-type-def type-id='100ce309' size-in-bits='64' id='4d8f5625'/>
+      <pointer-type-def type-id='0caa7082' size-in-bits='64' id='5f29549c'/>
+      <pointer-type-def type-id='e9855576' size-in-bits='64' id='72cd68b0'/>
+      <pointer-type-def type-id='ebe8eb0e' size-in-bits='64' id='40da47a8'/>
+      <pointer-type-def type-id='309ed22f' size-in-bits='64' id='d0882d6b'/>
+      <pointer-type-def type-id='357e5279' size-in-bits='64' id='227e209d'/>
+      <pointer-type-def type-id='8c180526' size-in-bits='64' id='b22f4610'/>
+      <pointer-type-def type-id='9babdafa' size-in-bits='64' id='01db3d7c'/>
+      <pointer-type-def type-id='1f060985' size-in-bits='64' id='ac9bc941'/>
+      <pointer-type-def type-id='3d5d0103' size-in-bits='64' id='de36db77'/>
+      <pointer-type-def type-id='b364ee65' size-in-bits='64' id='92d86499'/>
+      <pointer-type-def type-id='50acc06b' size-in-bits='64' id='8af06487'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='256' id='1c6311dd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='512' id='47ba3182'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <pointer-type-def type-id='a9d71093' size-in-bits='64' id='9b105293'/>
+      <union-decl name='__anonymous_union__32' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='34' column='1' id='0efc37b8'>
+        <data-member access='public'>
+          <var-decl name='u6_addr8' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/in6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u6_addr16' type-id='7f112b69' visibility='default' filepath='include/uapi/linux/in6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u6_addr32' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/in6.h' line='38' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='54d74023'>
+        <data-member access='public'>
+          <var-decl name='cnts' type-id='49178f86' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='f29807b6' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='89' column='1' id='436b4ed4'>
+        <data-member access='public'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='mm/slab.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1' id='9114ebb7'>
+        <data-member access='public'>
+          <var-decl name='obj' type-id='c66f5ec5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='destroy_next' type-id='994d9d61' visibility='default' filepath='include/linux/fsnotify_backend.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1198' column='1' id='adf5bf47'>
+        <data-member access='public'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/sock.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp_table' type-id='115daa23' visibility='default' filepath='include/net/sock.h' line='1200' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_hash' type-id='eb2c56dc' visibility='default' filepath='include/net/sock.h' line='1201' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='smc_hash' type-id='aa8162a3' visibility='default' filepath='include/net/sock.h' line='1202' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/tty.h' line='60' column='1' id='053892cc'>
+        <data-member access='public'>
+          <var-decl name='next' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='free' type-id='c5ccfee8' visibility='default' filepath='include/linux/tty.h' line='62' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ae2eaa42' size-in-bits='64' id='0838a534'/>
+      <pointer-type-def type-id='61062930' size-in-bits='64' id='6fa26802'/>
+      <pointer-type-def type-id='c2e47616' size-in-bits='64' id='0feea528'/>
+      <pointer-type-def type-id='4d3ea3f3' size-in-bits='64' id='b78e9a0f'/>
+      <pointer-type-def type-id='6d41ed4e' size-in-bits='64' id='47727520'/>
+      <pointer-type-def type-id='4cc265e6' size-in-bits='64' id='b713d448'/>
+      <pointer-type-def type-id='ad0ff4ed' size-in-bits='64' id='8a4f2b79'/>
+      <pointer-type-def type-id='a733634c' size-in-bits='64' id='a5490056'/>
+      <pointer-type-def type-id='6ddd203f' size-in-bits='64' id='9b92b29b'/>
+      <pointer-type-def type-id='99690429' size-in-bits='64' id='1cebc84d'/>
+      <pointer-type-def type-id='395aad7e' size-in-bits='64' id='74287ea0'/>
+      <pointer-type-def type-id='07b58648' size-in-bits='64' id='343c05fa'/>
+      <pointer-type-def type-id='be90799d' size-in-bits='64' id='f45e1d71'/>
+      <pointer-type-def type-id='3fe3822d' size-in-bits='64' id='345f0501'/>
+      <pointer-type-def type-id='ffb8b223' size-in-bits='64' id='89b5be7f'/>
+      <pointer-type-def type-id='e0f7a7a4' size-in-bits='64' id='6c781266'/>
+      <pointer-type-def type-id='f6d2a7cd' size-in-bits='64' id='4acd4951'/>
+      <pointer-type-def type-id='b41203ee' size-in-bits='64' id='afcbd268'/>
+      <pointer-type-def type-id='af1a3b3d' size-in-bits='64' id='c7c94ce1'/>
+      <pointer-type-def type-id='d31161f1' size-in-bits='64' id='3778bdcd'/>
+      <pointer-type-def type-id='7e2e2485' size-in-bits='64' id='11e89fb9'/>
+      <pointer-type-def type-id='0bd6c9bd' size-in-bits='64' id='cb4c6db1'/>
+      <pointer-type-def type-id='f6dbfe8d' size-in-bits='64' id='9038f441'/>
+      <pointer-type-def type-id='c05e7862' size-in-bits='64' id='27653c4c'/>
+      <pointer-type-def type-id='f8448e05' size-in-bits='64' id='a43821b9'/>
+      <pointer-type-def type-id='cd9acaaa' size-in-bits='64' id='5ac7baf4'/>
+      <pointer-type-def type-id='107219ed' size-in-bits='64' id='277e3361'/>
+      <pointer-type-def type-id='d6e6975e' size-in-bits='64' id='eda08098'/>
+      <pointer-type-def type-id='c9315117' size-in-bits='64' id='bffb5883'/>
+      <pointer-type-def type-id='aa95bc9e' size-in-bits='64' id='636d3a20'/>
+      <pointer-type-def type-id='84f0d8f8' size-in-bits='64' id='bfacbc7a'/>
+      <pointer-type-def type-id='9263c6b3' size-in-bits='64' id='e937debf'/>
+      <pointer-type-def type-id='4e62b18f' size-in-bits='64' id='09f3a86b'/>
+      <pointer-type-def type-id='fa7c8a73' size-in-bits='64' id='815f64bf'/>
+      <pointer-type-def type-id='77618c14' size-in-bits='64' id='ece3af1e'/>
+      <pointer-type-def type-id='7e2beda2' size-in-bits='64' id='f5feb7a4'/>
+      <pointer-type-def type-id='18fcefa9' size-in-bits='64' id='1ff54a45'/>
+      <pointer-type-def type-id='da22736a' size-in-bits='64' id='71f0211c'/>
+      <pointer-type-def type-id='3f9037c9' size-in-bits='64' id='aef0224d'/>
+      <pointer-type-def type-id='cd562d46' size-in-bits='64' id='e2d7f258'/>
+      <pointer-type-def type-id='cb961c68' size-in-bits='64' id='328dda6e'/>
+      <pointer-type-def type-id='279bdcdf' size-in-bits='64' id='c6675287'/>
+      <array-type-def dimensions='1' type-id='be9189df' size-in-bits='39936' id='83aedf28'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='459f31a7' size-in-bits='512' id='9509a9de'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='84a5c3d4' size-in-bits='128' id='7f112b69'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='128' id='30180d4b'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='7584' id='e1f95b49'>
+        <subrange length='948' type-id='7ff19f0f' id='9d8fc450'/>
+      </array-type-def>
+      <pointer-type-def type-id='80126e32' size-in-bits='64' id='9d025b00'/>
+      <class-decl name='Qdisc_ops' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='285' column='1' id='47692c1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d6369c88' visibility='default' filepath='include/net/sch_generic.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cl_ops' type-id='bb5ee79c' visibility='default' filepath='include/net/sch_generic.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='static_flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peek' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reset' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='destroy' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='change' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='attach' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='change_tx_queue_len' type-id='a959128b' visibility='default' filepath='include/net/sch_generic.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dump' type-id='612567ad' visibility='default' filepath='include/net/sch_generic.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dump_stats' type-id='edfa28b2' visibility='default' filepath='include/net/sch_generic.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ingress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='egress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ingress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='egress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space_operations' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='370' column='1' id='66fa8ce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='writepage' type-id='8b8bc11e' visibility='default' filepath='include/linux/fs.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='readpage' type-id='ab57fa9e' visibility='default' filepath='include/linux/fs.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='writepages' type-id='01ffd89c' visibility='default' filepath='include/linux/fs.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_page_dirty' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readpages' type-id='230dd919' visibility='default' filepath='include/linux/fs.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_begin' type-id='4eb95ade' visibility='default' filepath='include/linux/fs.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_end' type-id='e6da64f6' visibility='default' filepath='include/linux/fs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bmap' type-id='aecbf18b' visibility='default' filepath='include/linux/fs.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='invalidatepage' type-id='d8db14d1' visibility='default' filepath='include/linux/fs.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='releasepage' type-id='919b335b' visibility='default' filepath='include/linux/fs.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freepage' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='direct_IO' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migratepage' type-id='10451dea' visibility='default' filepath='include/linux/fs.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='isolate_page' type-id='a8faf36f' visibility='default' filepath='include/linux/fs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='putback_page' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='launder_page' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='is_partially_uptodate' type-id='800c67c2' visibility='default' filepath='include/linux/fs.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='is_dirty_writeback' type-id='6af64a09' visibility='default' filepath='include/linux/fs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='error_remove_page' type-id='2c5f769d' visibility='default' filepath='include/linux/fs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='swap_activate' type-id='2eb7248e' visibility='default' filepath='include/linux/fs.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='swap_deactivate' type-id='88909596' visibility='default' filepath='include/linux/fs.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='422' 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='13' column='1' id='2633d065'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__reserved' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='privilege' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='enabled' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_crypto_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='33' column='1' id='cdcb89ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_mode' type-id='e951e732' visibility='default' filepath='include/linux/blk-crypto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dun_bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_hw_wrapped' type-id='b50a4934' visibility='default' filepath='include/linux/blk-crypto.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bucket_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='76' column='1' id='984972f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_rnd' type-id='19c2251e' visibility='default' filepath='include/linux/rhashtable.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='walkers' type-id='72f469ec' visibility='default' filepath='include/linux/rhashtable.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/rhashtable.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='future_tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dep_map' type-id='d34a605e' visibility='default' filepath='include/linux/rhashtable.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buckets' type-id='7c792e5e' visibility='default' filepath='include/linux/rhashtable.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2252' column='1' id='5f145050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proberesp_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hidden_beacon_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='transmitted_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nontrans_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='728'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='priv' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_params' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2584' column='1' id='1291defd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel_hint' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bssid_hint' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mfp' type-id='dfb2486c' visibility='default' filepath='include/net/cfg80211.h' line='2595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1544'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bg_scan_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='bss_select' type-id='d24a933d' visibility='default' filepath='include/net/cfg80211.h' line='2606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='fils_erp_username' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='fils_erp_username_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fils_erp_realm' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fils_erp_realm_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fils_erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='fils_erp_rrk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fils_erp_rrk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='want_1x' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='2616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2618' 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='4dc01f59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl' type-id='91ce1af9' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='kernel/sched/cpudeadline.h' line='8' 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='a7623477'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' 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='b16b461b' visibility='default' filepath='kernel/sched/cpupri.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ctl_table_poll' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='105' column='1' id='d39c42ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/sysctl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sysctl.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='67' column='1' id='c553aabf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_free' type-id='2f974a69' visibility='default' filepath='include/linux/memremap.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kill' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='migrate_to_ram' type-id='bb28da1c' visibility='default' filepath='include/linux/memremap.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_common' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='80' column='1' id='e1f89457'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nhc_dev' type-id='68a2d05b' visibility='default' filepath='include/net/ip_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nhc_oif' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nhc_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='nhc_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhc_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='nhc_flags' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nhc_lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/ip_fib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nhc_gw' type-id='37def4b7' visibility='default' filepath='include/net/ip_fib.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nhc_weight' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nhc_upper_bound' type-id='49178f86' visibility='default' filepath='include/net/ip_fib.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nhc_pcpu_rth_output' type-id='0f830eef' visibility='default' filepath='include/net/ip_fib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nhc_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nhc_exceptions' type-id='09c59e98' visibility='default' filepath='include/net/ip_fib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='96' column='1' id='63b74212'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gdev' type-id='fb7dc22d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/gpio/gpiolib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='117' 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='75' column='1' id='1b8801b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='72bb5580' visibility='default' filepath='include/net/snmp.h' line='76' 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='85' column='1' id='e4ca98d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='86' 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='149' column='1' id='839b249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='center_freq' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='freq_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_antenna_gain' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_reg_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='beacon_found' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='orig_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='orig_mag' type-id='95e97e5e' 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='orig_mpwr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dfs_state' type-id='996e1634' 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='7359adad' 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='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='163' 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='101' column='1' id='082b64be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_ehash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='38' column='1' id='08400b46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='39' 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='112' column='1' id='42b16dba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ba169a6c' visibility='default' filepath='include/net/inet_hashtables.h' line='115' 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='716' column='1' id='aa80c027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qual' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='noise' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='updated' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='721' 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='ff0d68dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='bd54fe1a' visibility='default' filepath='include/linux/list_lru.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lwtunnel_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/lwtunnel.h' line='25' column='1' id='44644afc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='headroom' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/net/lwtunnel.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='orig_output' type-id='0023218e' visibility='default' filepath='include/net/lwtunnel.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_input' type-id='d2e00785' visibility='default' filepath='include/net/lwtunnel.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/lwtunnel.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/net/lwtunnel.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_driver_common' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='47' column='1' id='7eda6831'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/mdio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='mm/slab.h' line='35' column='1' id='dbef6377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='c66d33bc' visibility='default' filepath='mm/slab.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_bus' size-in-bits='12032' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='213' column='1' id='ed5381db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/phy.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='1de7616e' visibility='default' filepath='include/linux/phy.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='22ad5849' visibility='default' filepath='include/linux/phy.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='e10d6bae' visibility='default' filepath='include/linux/phy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset' type-id='6edade7b' visibility='default' filepath='include/linux/phy.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mdio_lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/phy.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='state' type-id='08f5ca1c' visibility='default' filepath='include/linux/phy.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='mdio_map' type-id='70a48c94' visibility='default' filepath='include/linux/phy.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='phy_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10848'>
+          <var-decl name='phy_ignore_ta_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='irq' type-id='9e942f0d' visibility='default' filepath='include/linux/phy.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='reset_delay_us' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='reset_gpiod' type-id='26760480' visibility='default' filepath='include/linux/phy.h' line='255' 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='291' column='1' id='ca7a1741'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='validation_type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='4a3999ba' visibility='default' filepath='include/net/netlink.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_nodestat' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='357' column='1' id='d84ae668'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vm_node_stat_diff' type-id='c8478d3d' visibility='default' filepath='include/linux/mmzone.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='18' column='1' id='05438640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='e_tag' type-id='a2185560' visibility='default' filepath='include/linux/posix_acl.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='e_perm' type-id='8efea9e5' visibility='default' filepath='include/linux/posix_acl.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='21c0164a' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_sync' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rcu_sync.h' line='17' column='1' id='638a7d75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gp_state' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gp_count' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gp_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/rcu_sync.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/rcu_sync.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcuwait' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rcuwait.h' line='15' column='1' id='71598d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/rcuwait.h' line='16' 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='27' column='1' id='ad499564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/request_sock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/request_sock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_name' type-id='26a90f95' visibility='default' filepath='include/net/request_sock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rtx_syn_ack' type-id='cd05c94e' visibility='default' filepath='include/net/request_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='send_ack' type-id='d3d20d73' visibility='default' filepath='include/net/request_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='send_reset' type-id='c9214b77' visibility='default' filepath='include/net/request_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destructor' type-id='b249945a' visibility='default' filepath='include/net/request_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='syn_ack_timeout' type-id='29e425c9' visibility='default' filepath='include/net/request_sock.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reset_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/reset/core.c' line='40' column='1' id='cdc9541e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcdev' type-id='775147d9' visibility='default' filepath='drivers/reset/core.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/reset/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/reset/core.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/reset/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acquired' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='shared' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='array' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deassert_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='triggered_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='49' 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='76' column='1' id='41425a4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_cnt' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sbitmap.h' line='85' 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='c4b04493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='a46b05a0' 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='6ba28d1c' 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='b6ba26fa' 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='0131eb61' visibility='default' filepath='include/linux/seq_file.h' line='36' 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='102' column='1' id='c7a2cf9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cell_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='size_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cell_align' type-id='a2185560' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='overhead' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='linklayer' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mpu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tsize' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='110' 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='14' column='1' id='b8765d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='twsk_slab' type-id='f3b4aca8' visibility='default' filepath='include/net/timewait_sock.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='twsk_slab_name' type-id='26a90f95' visibility='default' filepath='include/net/timewait_sock.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='twsk_obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/timewait_sock.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='twsk_unique' type-id='1d8e5a11' visibility='default' filepath='include/net/timewait_sock.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='twsk_destructor' type-id='841969d0' visibility='default' filepath='include/net/timewait_sock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_dev_header_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='315' column='1' id='95fcbc94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='5afbd3c3' visibility='default' filepath='include/net/cfg802154.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_cca' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='145' column='1' id='51a1cee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='59ec32df' visibility='default' filepath='include/net/cfg802154.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='opt' type-id='ef15418f' visibility='default' filepath='include/net/cfg802154.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_supported' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='134' column='1' id='7b03c2a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='6dcfc3c6' visibility='default' filepath='include/net/cfg802154.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cca_modes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='cca_opts' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='iftypes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lbt' type-id='c78c6f33' visibility='default' filepath='include/net/cfg802154.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='min_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='max_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='min_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='min_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='max_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='min_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='max_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_powers_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cca_ed_levels_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tx_powers' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cca_ed_levels' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xattr_handler' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='28' column='1' id='2d3dd5e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/xattr.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='439be051' visibility='default' filepath='include/linux/xattr.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='36' column='1'/>
+        </data-member>
+      </class-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='4ca5f2ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='soft_byte_limit' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='29d519c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' visibility='default' filepath='include/uapi/linux/xfrm.h' line='81' 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='0084df72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='v' type-id='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='493' column='1' id='d15e38d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hold_queue' type-id='e61c85d0' visibility='default' filepath='include/net/xfrm.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hold_timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='496' 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='482' column='1' id='e8e96050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='484' 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='8eb3b1fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' 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='c210d497' 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='84a5c3d4' 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='84a5c3d4' 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='84a5c3d4' 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='84a5c3d4' 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='d315442e' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='95e97e5e' 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='70734f24' visibility='default' filepath='include/uapi/linux/xfrm.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state' size-in-bits='5824' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='147' column='1' id='cb961c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xs_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='fc320d58' visibility='default' filepath='include/net/xfrm.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bysrc' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='byspi' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/xfrm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sel' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='tfcpad' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='genid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='km' type-id='12872440' visibility='default' filepath='include/net/xfrm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='props' type-id='35535e57' visibility='default' filepath='include/net/xfrm.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='aalg' type-id='255e0487' visibility='default' filepath='include/net/xfrm.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ealg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='calg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='aead' type-id='c56b5ee4' visibility='default' filepath='include/net/xfrm.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='geniv' type-id='80f4b756' visibility='default' filepath='include/net/xfrm.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='encap' type-id='47541e34' visibility='default' filepath='include/net/xfrm.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='coaddr' type-id='47a1c9f4' visibility='default' filepath='include/net/xfrm.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tunnel' type-id='328dda6e' visibility='default' filepath='include/net/xfrm.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tunnel_users' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='replay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='replay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='preplay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='preplay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='repl' type-id='400b9143' visibility='default' filepath='include/net/xfrm.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='xflags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='replay_maxage' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='replay_maxdiff' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='rtimer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='stats' type-id='c1960caa' visibility='default' filepath='include/net/xfrm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtimer' type-id='b6993efc' visibility='default' filepath='include/net/xfrm.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='xso' type-id='f5284c72' visibility='default' filepath='include/net/xfrm.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='saved_tmo' type-id='bd54fe1a' visibility='default' filepath='include/net/xfrm.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='lastused' type-id='1afd27ac' visibility='default' filepath='include/net/xfrm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='xfrag' type-id='06c0432f' visibility='default' filepath='include/net/xfrm.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='type' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='inner_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5528'>
+          <var-decl name='inner_mode_iaf' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5552'>
+          <var-decl name='outer_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='type_offload' type-id='2f8b61b4' visibility='default' filepath='include/net/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xfrm.h' line='259' 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='785' column='1' id='279bdcdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='alloc_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='queues' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='789' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='421' column='1' id='be9189df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_watermark' type-id='3461381a' visibility='default' filepath='include/linux/mmzone.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watermark_boost' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_reserved_highatomic' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lowmem_reserve' type-id='5d34b9c7' visibility='default' filepath='include/linux/mmzone.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='zone_pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pageset' type-id='16cfe92b' visibility='default' filepath='include/linux/mmzone.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cma_alloc' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='zone_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='managed_pages' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mmzone.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_isolate_pageblock' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='span_seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/mmzone.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='free_area' type-id='be1ad65f' visibility='default' filepath='include/linux/mmzone.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='percpu_drift_mark' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='compact_cached_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='compact_cached_migrate_pfn' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='compact_init_migrate_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='compact_init_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='compact_considered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='compact_defer_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='compact_order_failed' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='compact_blockskip_flush' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11752'>
+          <var-decl name='contiguous' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='_pad3_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='vm_stat' type-id='80b13f9b' visibility='default' filepath='include/linux/mmzone.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vm_numa_stat' type-id='a922812c' visibility='default' filepath='include/linux/mmzone.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='576' 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='685' column='1' id='459f31a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_zonerefs' type-id='c2eeb70e' visibility='default' filepath='include/linux/mmzone.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac895711' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='79' column='1' id='b55219f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='e4266c7e' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='f29807b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wlocked' type-id='f9b06939' 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='930ea9f9' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a0ef5328' size-in-bits='64' id='5abfac26'/>
+      <pointer-type-def type-id='933e0e21' size-in-bits='64' id='76ae8e1d'/>
+      <qualified-type-def type-id='8a2a988b' const='yes' id='dc743cb2'/>
+      <pointer-type-def type-id='4b7af74a' size-in-bits='64' id='c0135c9c'/>
+      <pointer-type-def type-id='269d8092' size-in-bits='64' id='81f1a1a8'/>
+      <pointer-type-def type-id='29c8dc19' size-in-bits='64' id='fa32a449'/>
+      <pointer-type-def type-id='5960e0b1' size-in-bits='64' id='4e819401'/>
+      <pointer-type-def type-id='64b77daa' size-in-bits='64' id='0cda9080'/>
+      <pointer-type-def type-id='46f53066' size-in-bits='64' id='fffb07a4'/>
+      <qualified-type-def type-id='bcc5cab3' const='yes' id='208298e3'/>
+      <qualified-type-def type-id='0c842ad9' const='yes' id='afa36b70'/>
+      <pointer-type-def type-id='af3cafff' size-in-bits='64' id='b188cc4f'/>
+      <pointer-type-def type-id='8ef65cd1' size-in-bits='64' id='08d45f21'/>
+      <qualified-type-def type-id='4e0399c2' const='yes' id='a87d8ed1'/>
+      <qualified-type-def type-id='87cad984' const='yes' id='3ae4e62d'/>
+      <pointer-type-def type-id='94052af7' size-in-bits='64' id='e12279e7'/>
+      <pointer-type-def type-id='51bb592e' size-in-bits='64' id='aded214c'/>
+      <qualified-type-def type-id='f9b37274' const='yes' id='3635993f'/>
+      <pointer-type-def type-id='7253d28f' size-in-bits='64' id='9ef499bf'/>
+      <pointer-type-def type-id='703a35bb' size-in-bits='64' id='3ca25343'/>
+      <pointer-type-def type-id='2ffd639c' size-in-bits='64' id='41e3f782'/>
+      <pointer-type-def type-id='93286cfa' size-in-bits='64' id='78a34b70'/>
+      <pointer-type-def type-id='39d64410' size-in-bits='64' id='36ed3b9a'/>
+      <pointer-type-def type-id='2bdce7cd' size-in-bits='64' id='02f90a61'/>
+      <pointer-type-def type-id='5d64147c' size-in-bits='64' id='9b9ccb86'/>
+      <pointer-type-def type-id='13edfabd' size-in-bits='64' id='324070f9'/>
+      <pointer-type-def type-id='5a9e3f68' size-in-bits='64' id='ae02292a'/>
+      <pointer-type-def type-id='f8d03d40' size-in-bits='64' id='ce714046'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='net/wireless/sme.c' line='34' column='1' id='08f5ca1a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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__' is-anonymous='yes' filepath='include/uapi/linux/net.h' line='48' column='1' id='08f5ca1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='cfg80211_signal_type' filepath='include/net/cfg80211.h' line='2164' column='1' id='b8524648'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='ieee80211_edmg_bw_config' filepath='include/net/cfg80211.h' line='360' column='1' id='51403231'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_4' value='4'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_5' value='5'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_6' value='6'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_7' value='7'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_8' value='8'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_9' value='9'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_10' value='10'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_11' value='11'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_12' value='12'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_13' value='13'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_14' value='14'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_15' value='15'/>
+      </enum-decl>
+      <pointer-type-def type-id='dc5fa7f0' size-in-bits='64' id='c66f5ec5'/>
+      <pointer-type-def type-id='6cf6468f' size-in-bits='64' id='2cb135bf'/>
+      <array-type-def dimensions='1' type-id='3cad9e1a' size-in-bits='256' id='641ce2e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='96bb51fa' size-in-bits='64' id='e8c4dba4'/>
+      <pointer-type-def type-id='9e22fc50' size-in-bits='64' id='68a88aaa'/>
+      <pointer-type-def type-id='0afc6f78' size-in-bits='64' id='2207988a'/>
+      <pointer-type-def type-id='806a4586' size-in-bits='64' id='6ed32e60'/>
+      <pointer-type-def type-id='1ee59844' size-in-bits='64' id='55f833ce'/>
+      <pointer-type-def type-id='f29c5fbb' size-in-bits='64' id='0b787edf'/>
+      <pointer-type-def type-id='96658a93' size-in-bits='64' id='cb0ca137'/>
+      <pointer-type-def type-id='904e13de' size-in-bits='64' id='a57bd028'/>
+      <pointer-type-def type-id='fb8e936d' size-in-bits='64' id='c237e829'/>
+      <pointer-type-def type-id='dfe7e6ee' size-in-bits='64' id='4b872e00'/>
+      <pointer-type-def type-id='ea863425' size-in-bits='64' id='35646c79'/>
+      <pointer-type-def type-id='d87d8242' size-in-bits='64' id='24c1e1dc'/>
+      <pointer-type-def type-id='4ed460e4' size-in-bits='64' id='f220106e'/>
+      <pointer-type-def type-id='603a76bb' size-in-bits='64' id='8eee5b07'/>
+      <pointer-type-def type-id='cd313b90' size-in-bits='64' id='28ba4492'/>
+      <pointer-type-def type-id='91de15a8' size-in-bits='64' id='2cdfbf0a'/>
+      <pointer-type-def type-id='09c8759c' size-in-bits='64' id='7f5be7f6'/>
+      <pointer-type-def type-id='a04cd5a9' size-in-bits='64' id='234843b5'/>
+      <pointer-type-def type-id='7e8ddfae' size-in-bits='64' id='d3807eb0'/>
+      <pointer-type-def type-id='f2fea3d5' size-in-bits='64' id='7733ef81'/>
+      <pointer-type-def type-id='453343e6' size-in-bits='64' id='98c2d938'/>
+      <pointer-type-def type-id='f3601a85' size-in-bits='64' id='c9cd0e09'/>
+      <pointer-type-def type-id='270f5881' size-in-bits='64' id='f9e0c0e5'/>
+      <pointer-type-def type-id='79d185ec' size-in-bits='64' id='0508acce'/>
+      <pointer-type-def type-id='cfe842dd' size-in-bits='64' id='f4f91b99'/>
+      <pointer-type-def type-id='91b0693b' size-in-bits='64' id='30144f27'/>
+      <pointer-type-def type-id='a92634ba' size-in-bits='64' id='c23b3cbc'/>
+      <pointer-type-def type-id='bdd382a3' size-in-bits='64' id='820976ef'/>
+      <pointer-type-def type-id='27e3f547' size-in-bits='64' id='6b7539fb'/>
+      <pointer-type-def type-id='c3b65e91' size-in-bits='64' id='64ecf6a5'/>
+      <pointer-type-def type-id='a48b0884' size-in-bits='64' id='35d085ce'/>
+      <pointer-type-def type-id='7a6178ff' size-in-bits='64' id='c60354f3'/>
+      <pointer-type-def type-id='4f0fdafb' size-in-bits='64' id='ef75df1f'/>
+      <pointer-type-def type-id='b36b391c' size-in-bits='64' id='fd780be6'/>
+      <pointer-type-def type-id='4852a8ec' size-in-bits='64' id='ed9f97a6'/>
+      <pointer-type-def type-id='f5c32c38' size-in-bits='64' id='d72a0292'/>
+      <pointer-type-def type-id='97f95e6a' size-in-bits='64' id='f12b668c'/>
+      <pointer-type-def type-id='2cabe151' size-in-bits='64' id='ecf8d02d'/>
+      <pointer-type-def type-id='91265862' size-in-bits='64' id='f3bd9244'/>
+      <pointer-type-def type-id='20f1cebe' size-in-bits='64' id='cb5b8228'/>
+      <pointer-type-def type-id='4eb067f4' size-in-bits='64' id='8eff9c66'/>
+      <pointer-type-def type-id='c657e2b9' size-in-bits='64' id='aa2748ad'/>
+      <pointer-type-def type-id='918531c2' size-in-bits='64' id='51f1236c'/>
+      <pointer-type-def type-id='26a5fedd' size-in-bits='64' id='930fcda9'/>
+      <pointer-type-def type-id='4f200117' size-in-bits='64' id='21cdc373'/>
+      <pointer-type-def type-id='b69cad70' size-in-bits='64' id='1cc860f2'/>
+      <pointer-type-def type-id='43ffd497' size-in-bits='64' id='47f66a6b'/>
+      <pointer-type-def type-id='78ee2032' size-in-bits='64' id='f2c45924'/>
+      <pointer-type-def type-id='c76bfb3a' size-in-bits='64' id='b1be7154'/>
+      <pointer-type-def type-id='501579d1' size-in-bits='64' id='3eb4a20d'/>
+      <pointer-type-def type-id='a5dc8838' size-in-bits='64' id='4c9695fa'/>
+      <pointer-type-def type-id='05cd341e' size-in-bits='64' id='f727c4d8'/>
+      <pointer-type-def type-id='b16db39f' size-in-bits='64' id='c94f6b13'/>
+      <pointer-type-def type-id='bd9eea97' size-in-bits='64' id='624375a3'/>
+      <pointer-type-def type-id='c604b3e2' size-in-bits='64' id='d2f4c704'/>
+      <pointer-type-def type-id='eeeb3192' size-in-bits='64' id='9e27a8d4'/>
+      <pointer-type-def type-id='3b1012d7' size-in-bits='64' id='dcab5203'/>
+      <pointer-type-def type-id='4f21665b' size-in-bits='64' id='552c8f87'/>
+      <pointer-type-def type-id='e85fe596' size-in-bits='64' id='de6b64d0'/>
+      <pointer-type-def type-id='b992836c' size-in-bits='64' id='4e326e06'/>
+      <pointer-type-def type-id='e6f3a13f' size-in-bits='64' id='70b08f83'/>
+      <pointer-type-def type-id='cda9f6b0' size-in-bits='64' id='483e8c3a'/>
+      <pointer-type-def type-id='26f907b0' size-in-bits='64' id='ea44f8d2'/>
+      <pointer-type-def type-id='0e61b6d4' size-in-bits='64' id='eb638046'/>
+      <pointer-type-def type-id='657fbd80' size-in-bits='64' id='547aa7d2'/>
+      <pointer-type-def type-id='56a7b834' size-in-bits='64' id='7aa5a21e'/>
+      <pointer-type-def type-id='c443a9fc' size-in-bits='64' id='5626e636'/>
+      <pointer-type-def type-id='266b9741' size-in-bits='64' id='1a7b1e1d'/>
+      <pointer-type-def type-id='4aaf059d' size-in-bits='64' id='62d26ff9'/>
+      <pointer-type-def type-id='9bc672dd' size-in-bits='64' id='5694e921'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='416' id='77ba73f2'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <pointer-type-def type-id='b83c8287' size-in-bits='64' id='60f4096f'/>
+      <array-type-def dimensions='1' type-id='aa80c027' size-in-bits='256' id='c73a16a3'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='45947737' size-in-bits='1024' id='248874df'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='5a3e162b' size-in-bits='64' id='153e161b'/>
+      <pointer-type-def type-id='7f8cc66d' size-in-bits='64' id='c4facf61'/>
+      <pointer-type-def type-id='6d8d26fb' size-in-bits='64' id='01b378ab'/>
+      <pointer-type-def type-id='aebe1cff' size-in-bits='64' id='6bbe39a7'/>
+      <pointer-type-def type-id='0331c4d6' size-in-bits='64' id='c8f8b049'/>
+      <pointer-type-def type-id='a2802dd0' size-in-bits='64' id='7f30b822'/>
+      <pointer-type-def type-id='e29df76e' size-in-bits='64' id='15543b10'/>
+      <pointer-type-def type-id='c2be49b0' size-in-bits='64' id='eb9a3ab6'/>
+      <pointer-type-def type-id='51ee3086' size-in-bits='64' id='eb2c56dc'/>
+      <array-type-def dimensions='1' type-id='b65a052d' size-in-bits='infinite' id='11d66d65'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='db281924' size-in-bits='64' id='cc9f99b2'/>
+      <pointer-type-def type-id='6ceb7782' size-in-bits='64' id='1ead5d78'/>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='infinite' id='a4bfb48f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='ea3de64d' size-in-bits='64' id='29a48d3d'/>
+      <pointer-type-def type-id='adb1d973' size-in-bits='64' id='aa8162a3'/>
+      <pointer-type-def type-id='1546c604' size-in-bits='64' id='45305972'/>
+      <typedef-decl name='__be32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='32' column='1' id='78a133c2'/>
+      <pointer-type-def type-id='e74568be' size-in-bits='64' id='deb31178'/>
+      <pointer-type-def type-id='8abd4c90' size-in-bits='64' id='bce7b4e2'/>
+      <pointer-type-def type-id='3e80a1bc' size-in-bits='64' id='3b2da7a6'/>
+      <typedef-decl name='proc_handler' type-id='99803d40' filepath='include/linux/sysctl.h' line='47' column='1' id='8cf4128f'/>
+      <typedef-decl name='qsize_t' type-id='1eb56b1e' filepath='include/linux/quota.h' line='66' column='1' id='33341965'/>
+      <typedef-decl name='rht_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='38' column='1' id='07fa0d18'/>
+      <typedef-decl name='rht_obj_cmpfn_t' type-id='d8c458ae' filepath='include/linux/rhashtable-types.h' line='40' column='1' id='a8e15d8c'/>
+      <typedef-decl name='rht_obj_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='39' column='1' id='365fa902'/>
+      <pointer-type-def type-id='ebaa0f87' size-in-bits='64' id='3494e4bb'/>
+      <pointer-type-def type-id='d802bf72' size-in-bits='64' id='e295c77c'/>
+      <pointer-type-def type-id='fec629e3' size-in-bits='64' id='a9b95107'/>
+      <pointer-type-def type-id='9f5a4f22' size-in-bits='64' id='9682fd8c'/>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='infinite' id='0f300383'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='544' id='46fc18d9'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='1024' id='7f475abd'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='16' id='cf114704'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='f9b06939' size-in-bits='416' id='b726c152'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='40' id='8f1320db'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b151a3a8' size-in-bits='64' id='4a744ea1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b151a3a8' size-in-bits='384' id='2d507faf'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='9a516b13' size-in-bits='64' id='115daa23'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='518' column='1' id='9aa86c15'>
+        <data-member access='public'>
+          <var-decl name='capabilities' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7179013d' visibility='default' filepath='include/uapi/linux/perf_event.h' line='520' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='698' column='1' id='1285aa79'>
+        <data-member access='public'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/skbuff.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='704' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='96' column='1' id='21fca59c'>
+        <data-member access='public'>
+          <var-decl name='nh_info' type-id='e55edb2e' visibility='default' filepath='include/net/nexthop.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nh_grp' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='98' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='infinite' id='5e6516ee'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='ad4a13f9' size-in-bits='64' id='4bf65d9d'/>
+      <pointer-type-def type-id='7addb8a1' size-in-bits='64' id='1cb2627d'/>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='160' id='4d5a4f46'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <pointer-type-def type-id='5d58e1d2' size-in-bits='64' id='c4cac78c'/>
+      <pointer-type-def type-id='cbbffc65' size-in-bits='64' id='dbc22931'/>
+      <pointer-type-def type-id='3683b7e7' size-in-bits='64' id='dabeff1b'/>
+      <pointer-type-def type-id='bc51cf2c' size-in-bits='64' id='156433b6'/>
+      <pointer-type-def type-id='b6c1136f' size-in-bits='64' id='7e20177b'/>
+      <pointer-type-def type-id='54b1caeb' size-in-bits='64' id='82a6d477'/>
+      <pointer-type-def type-id='ebcc73dc' size-in-bits='64' id='5f5506f6'/>
+      <pointer-type-def type-id='3b7ef195' size-in-bits='64' id='185ccd91'/>
+      <pointer-type-def type-id='9cad7816' size-in-bits='64' id='eb0bccd8'/>
+      <pointer-type-def type-id='16ebfbba' size-in-bits='64' id='3a3e6b6c'/>
+      <pointer-type-def type-id='9e497d29' size-in-bits='64' id='9438aa05'/>
+      <pointer-type-def type-id='e7c67bff' size-in-bits='64' id='19c5fc2b'/>
+      <pointer-type-def type-id='da4d9050' size-in-bits='64' id='8937f3c2'/>
+      <pointer-type-def type-id='6909d288' size-in-bits='64' id='0634414a'/>
+      <pointer-type-def type-id='2bb0168c' size-in-bits='64' id='44fd4636'/>
+      <pointer-type-def type-id='226cc4c6' size-in-bits='64' id='887cf9b8'/>
+      <pointer-type-def type-id='20948739' size-in-bits='64' id='b8bd68c5'/>
+      <pointer-type-def type-id='31fdacad' size-in-bits='64' id='0cce9961'/>
+      <pointer-type-def type-id='64604191' size-in-bits='64' id='c95d966d'/>
+      <pointer-type-def type-id='a96e8cde' size-in-bits='64' id='b0ddaf40'/>
+      <pointer-type-def type-id='d7741e39' size-in-bits='64' id='7e5b379d'/>
+      <pointer-type-def type-id='74edcdba' size-in-bits='64' id='21b6f944'/>
+      <pointer-type-def type-id='10781bfd' size-in-bits='64' id='39ee8359'/>
+      <pointer-type-def type-id='63e171df' size-in-bits='64' id='30e664af'/>
+      <pointer-type-def type-id='c06daf3b' size-in-bits='64' id='b925f68b'/>
+      <pointer-type-def type-id='8ea64c8e' size-in-bits='64' id='48e57944'/>
+      <pointer-type-def type-id='cddfb84e' size-in-bits='64' id='b07c2494'/>
+      <array-type-def dimensions='1' type-id='a30f25c8' size-in-bits='3072' id='41cc9498'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <pointer-type-def type-id='7f424251' size-in-bits='64' id='9fa25a99'/>
+      <pointer-type-def type-id='47692c1a' size-in-bits='64' id='d6369c88'/>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='896' id='80b13f9b'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='384' id='72bb5580'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='infinite' id='a922812c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='5f145050' size-in-bits='64' id='bda81d86'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='488' id='1de7616e'>
+        <subrange length='61' type-id='7ff19f0f' id='b51728a6'/>
+      </array-type-def>
+      <class-decl name='cfg80211_bss_selection' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2513' column='1' id='d24a933d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='behaviour' type-id='10fd9108' visibility='default' filepath='include/net/cfg80211.h' line='2514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='param' type-id='0532d6f6' visibility='default' filepath='include/net/cfg80211.h' line='2518' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_crypto_settings' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='880' column='1' id='f81bbd3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpa_versions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cipher_group' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ciphers_pairwise' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ciphers_pairwise' type-id='586ea944' visibility='default' filepath='include/net/cfg80211.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='akm_suites' type-id='1872161b' visibility='default' filepath='include/net/cfg80211.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='control_port_ethertype' type-id='84a5c3d4' visibility='default' filepath='include/net/cfg80211.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='control_port_no_encrypt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='psk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sae_pwd' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sae_pwd_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='897' 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='2763' column='1' id='80126e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='any' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='disconnect' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='magic_pkt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gtk_rekey_failure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='eap_identity_req' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='four_way_handshake' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='rfkill_release' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcp' type-id='e0c1c1b8' visibility='default' filepath='include/net/cfg80211.h' line='2768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_config' type-id='9e4995c7' visibility='default' filepath='include/net/cfg80211.h' line='2770' 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='f8d03d40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='57c51e1c' 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='95e97e5e' 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='c99b5ecd' visibility='default' filepath='include/linux/energy_model.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_description' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='64' column='1' id='8a2a988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='include/linux/fs_parser.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='specs' type-id='8d4f223b' visibility='default' filepath='include/linux/fs_parser.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enums' type-id='6d6531cd' visibility='default' filepath='include/linux/fs_parser.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ht_cap' size-in-bits='208' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1319' column='1' id='16e7829f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ampdu_params_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/linux/ieee80211.h' line='1324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='extended_ht_cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='tx_BF_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='antenna_selection_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1328' 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='1535' column='1' id='2eec6999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supp_mcs' type-id='830056b5' visibility='default' filepath='include/linux/ieee80211.h' line='1537' 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='99' column='1' id='b83c8287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sf_next' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sf_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sf_count' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sf_gsresp' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sf_oldin' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='sf_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='105' 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='1063' column='1' id='0c842ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='get_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='1067' 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='596' column='1' id='45947737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mode' type-id='30430d28' visibility='default' filepath='include/net/cfg80211.h' line='602' 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='5a3e162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' 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='b969bd7a' visibility='default' filepath='include/linux/list_lru.h' line='37' 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='948' column='1' id='6d8d26fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='949' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_table' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='200' column='1' id='aebe1cff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry_size' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/neighbour.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash' type-id='f60e04ee' visibility='default' filepath='include/net/neighbour.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='key_eq' type-id='8fbb31d1' visibility='default' filepath='include/net/neighbour.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='constructor' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pconstructor' type-id='9264da33' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pdestructor' type-id='5c4c6144' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proxy_redo' type-id='0ef96694' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_multicast' type-id='b9b212f5' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='allow_add' type-id='6ade418d' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='26a90f95' visibility='default' filepath='include/net/neighbour.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parms' type-id='1429eee4' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='parms_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='gc_thresh1' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gc_thresh2' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='gc_thresh3' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_flush' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gc_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/neighbour.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='proxy_timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='proxy_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='gc_entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='last_rand' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='stats' type-id='3a0389d8' visibility='default' filepath='include/net/neighbour.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nht' type-id='0d378d14' visibility='default' filepath='include/net/neighbour.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='phash_buckets' type-id='62c51a1d' visibility='default' filepath='include/net/neighbour.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proto_ops' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='137' column='1' id='4e0399c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connect' type-id='be6c7be7' visibility='default' filepath='include/linux/net.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socketpair' type-id='be3a232b' visibility='default' filepath='include/linux/net.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='accept' type-id='2136470b' visibility='default' filepath='include/linux/net.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='getname' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='e93ad56e' visibility='default' filepath='include/linux/net.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gettstamp' type-id='d78dd406' visibility='default' filepath='include/linux/net.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='listen' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='shutdown' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='compat_setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='compat_getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sendmsg' type-id='f38728c0' visibility='default' filepath='include/linux/net.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='recvmsg' type-id='93abc02f' visibility='default' filepath='include/linux/net.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mmap' type-id='3eef3bc7' visibility='default' filepath='include/linux/net.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sendpage' type-id='42b02383' visibility='default' filepath='include/linux/net.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='splice_read' type-id='21641a6b' visibility='default' filepath='include/linux/net.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_peek_off' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='peek_len' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='read_sock' type-id='8755cc63' visibility='default' filepath='include/linux/net.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sendpage_locked' type-id='65399e23' visibility='default' filepath='include/linux/net.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sendmsg_locked' type-id='1df08751' visibility='default' filepath='include/linux/net.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rcvlowat' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='310' column='1' id='87cad984'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_quota_file' type-id='dcab5203' 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='dcab5203' 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='dcab5203' 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='dcab5203' 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='24c1e1dc' 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='24c1e1dc' 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='24c1e1dc' 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='70b08f83' visibility='default' filepath='include/linux/quota.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='321' 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='452' column='1' id='c2be49b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qf_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qf_ops' type-id='bd561d05' visibility='default' filepath='include/linux/quota.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qf_owner' type-id='2730d015' visibility='default' filepath='include/linux/quota.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qf_next' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='raw_hashinfo' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/net/raw.h' line='35' column='1' id='51ee3086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/raw.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='a7c26c7b' visibility='default' filepath='include/net/raw.h' line='37' 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='690' column='1' id='b65a052d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filter' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_qtail' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='693' 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='114' column='1' id='db281924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/ip6_fib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='116' 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='1413' column='1' id='ea3de64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='imbalance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1429' 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='adb1d973'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' 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='e151255a' visibility='default' filepath='include/net/smc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_chain' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='439' column='1' id='1546c604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_chain_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='filter_chain' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='block' type-id='13ef4686' visibility='default' filepath='include/net/sch_generic.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='action_refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='explicitly_created' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='616'>
+          <var-decl name='flushing' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tmplt_ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmplt_priv' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='452' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='71' column='1' id='9a516b13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash2' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='log' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_fq_reuse' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='31' column='1' id='c06daf3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nentries' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handles' type-id='09b35382' visibility='default' filepath='include/net/xdp_sock.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_page' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='26' column='1' id='8ea64c8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp_sock.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/net/xdp_sock.h' line='28' 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='d07aeeaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' 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='78a133c2' 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='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mode' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='135' column='1' id='fdc52c40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='138' 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='c59d261e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oseq' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='87' 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='cddfb84e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx_doi' type-id='8f048e17' 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='8f048e17' 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='d315442e' 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='3f1a6b60' 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='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='36' 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='f5284c72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='7359adad' 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='f0981eeb' 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='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='132' 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='12872440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' 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='f9b06939' 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='f9b06939' 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='f9b06939' 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='19c2251e' 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='14a0013e' visibility='default' filepath='include/net/xfrm.h' line='125' 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='c1960caa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='replay_window' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='125' 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='445' column='1' id='a30f25c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='encap_family' type-id='8efea9e5' visibility='default' filepath='include/net/xfrm.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='optional' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='allalgs' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aalgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ealgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='calgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='476' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xsk_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f424251'/>
+      <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='520' column='1' id='7179013d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_bit0' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='cap_bit0_is_deprecated' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='cap_user_rdpmc' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='cap_user_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='cap_user_time_zero' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='cap_____res' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='527' 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='171' column='1' id='35535e57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='replay_window' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aalgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='ealgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='calgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='header_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trailer_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='extra_flags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='170bab5e' size-in-bits='64' id='bb5ee79c'/>
+      <pointer-type-def type-id='5e2a189d' size-in-bits='64' id='f344e815'/>
+      <qualified-type-def type-id='e9bb2749' const='yes' id='a0ef5328'/>
+      <qualified-type-def type-id='16e7829f' const='yes' id='269d8092'/>
+      <qualified-type-def type-id='1179f27e' const='yes' id='29c8dc19'/>
+      <qualified-type-def type-id='5c28f25e' const='yes' id='5960e0b1'/>
+      <qualified-type-def type-id='21301fc9' const='yes' id='64b77daa'/>
+      <qualified-type-def type-id='2eec6999' const='yes' id='46f53066'/>
+      <qualified-type-def type-id='e223f110' const='yes' id='af3cafff'/>
+      <qualified-type-def type-id='b45c773c' const='yes' id='8ef65cd1'/>
+      <qualified-type-def type-id='bd4e4ac8' const='yes' id='94052af7'/>
+      <qualified-type-def type-id='19c2251e' const='yes' id='51bb592e'/>
+      <pointer-type-def type-id='9cbd1c16' size-in-bits='64' id='f9b37274'/>
+      <qualified-type-def type-id='7124a2a6' const='yes' id='7253d28f'/>
+      <qualified-type-def type-id='378a6c5a' const='yes' id='703a35bb'/>
+      <qualified-type-def type-id='fc206ed1' const='yes' id='2ffd639c'/>
+      <qualified-type-def type-id='5bbd300b' const='yes' id='93286cfa'/>
+      <pointer-type-def type-id='3d6abfbb' size-in-bits='64' id='400b9143'/>
+      <pointer-type-def type-id='9819baf4' size-in-bits='64' id='4e812b7a'/>
+      <pointer-type-def type-id='9d07f7d6' size-in-bits='64' id='2f8b61b4'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/phy.h' line='229' column='1' id='08f5ca1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='blk_crypto_mode_num' filepath='include/linux/blk-crypto.h' line='11' column='1' id='e951e732'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_INVALID' value='0'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_256_XTS' value='1'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV' value='2'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_ADIANTUM' value='3'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_MAX' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_auth_type' filepath='include/uapi/linux/nl80211.h' line='4427' column='1' id='f7dadf06'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_band' filepath='include/uapi/linux/nl80211.h' line='4588' column='1' id='3eaa0294'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BAND_2GHZ' value='0'/>
+        <enumerator name='NL80211_BAND_5GHZ' value='1'/>
+        <enumerator name='NL80211_BAND_60GHZ' value='2'/>
+        <enumerator name='NL80211_BAND_6GHZ' value='3'/>
+        <enumerator name='NUM_NL80211_BANDS' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_bss_scan_width' filepath='include/uapi/linux/nl80211.h' line='4307' column='1' id='95d46034'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='nl80211_dfs_state' filepath='include/uapi/linux/nl80211.h' line='5746' column='1' id='996e1634'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_DFS_USABLE' value='0'/>
+        <enumerator name='NL80211_DFS_UNAVAILABLE' value='1'/>
+        <enumerator name='NL80211_DFS_AVAILABLE' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl80211_mfp' filepath='include/uapi/linux/nl80211.h' line='4464' column='1' id='dfb2486c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_MFP_NO' value='0'/>
+        <enumerator name='NL80211_MFP_REQUIRED' value='1'/>
+        <enumerator name='NL80211_MFP_OPTIONAL' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl802154_cca_modes' filepath='include/net/nl802154.h' line='235' column='1' id='59ec32df'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL802154_CCA_INVALID' value='0'/>
+        <enumerator name='NL802154_CCA_ENERGY' value='1'/>
+        <enumerator name='NL802154_CCA_CARRIER' value='2'/>
+        <enumerator name='NL802154_CCA_ENERGY_CARRIER' value='3'/>
+        <enumerator name='NL802154_CCA_ALOHA' value='4'/>
+        <enumerator name='NL802154_CCA_UWB_SHR' value='5'/>
+        <enumerator name='NL802154_CCA_UWB_MULTIPLEXED' value='6'/>
+        <enumerator name='__NL802154_CCA_ATTR_AFTER_LAST' value='7'/>
+        <enumerator name='NL802154_CCA_ATTR_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='nl802154_cca_opts' filepath='include/net/nl802154.h' line='255' column='1' id='ef15418f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_AND' value='0'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_OR' value='1'/>
+        <enumerator name='__NL802154_CCA_OPT_ATTR_AFTER_LAST' value='2'/>
+        <enumerator name='NL802154_CCA_OPT_ATTR_MAX' value='1'/>
+      </enum-decl>
+      <enum-decl name='nl802154_supported_bool_states' filepath='include/net/nl802154.h' line='274' column='1' id='c78c6f33'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_FALSE' value='0'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_TRUE' value='1'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_INVALD' value='2'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_BOTH' value='3'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_AFTER_LAST' value='4'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_MAX' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='ba046e9a' size-in-bits='64' id='09c59e98'/>
+      <array-type-def dimensions='1' type-id='39ec6fe5' size-in-bits='9152' id='be1ad65f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <pointer-type-def type-id='e32a05ed' size-in-bits='64' id='fb7dc22d'/>
+      <pointer-type-def type-id='f7e1259c' size-in-bits='64' id='3cad9e1a'/>
+      <pointer-type-def type-id='12afeb30' size-in-bits='64' id='edfa28b2'/>
+      <pointer-type-def type-id='15aa5ecd' size-in-bits='64' id='a84eb241'/>
+      <pointer-type-def type-id='1d4f5209' size-in-bits='64' id='612567ad'/>
+      <pointer-type-def type-id='a46a9227' size-in-bits='64' id='a959128b'/>
+      <pointer-type-def type-id='8d077d91' size-in-bits='64' id='2c5f769d'/>
+      <pointer-type-def type-id='0f1de308' size-in-bits='64' id='10451dea'/>
+      <pointer-type-def type-id='ffad938a' size-in-bits='64' id='01ffd89c'/>
+      <pointer-type-def type-id='d328415c' size-in-bits='64' id='cd05c94e'/>
+      <pointer-type-def type-id='e2da4ade' size-in-bits='64' id='d5f76b20'/>
+      <pointer-type-def type-id='37d25cd5' size-in-bits='64' id='230dd919'/>
+      <pointer-type-def type-id='cd1955fc' size-in-bits='64' id='4eb95ade'/>
+      <pointer-type-def type-id='da73ead4' size-in-bits='64' id='e6da64f6'/>
+      <pointer-type-def type-id='d9f53f44' size-in-bits='64' id='ab57fa9e'/>
+      <pointer-type-def type-id='07b37f3f' size-in-bits='64' id='6edade7b'/>
+      <pointer-type-def type-id='07dc6635' size-in-bits='64' id='22ad5849'/>
+      <pointer-type-def type-id='c85b8434' size-in-bits='64' id='e10d6bae'/>
+      <pointer-type-def type-id='869f5d80' size-in-bits='64' id='1654d99a'/>
+      <pointer-type-def type-id='dc2316e7' size-in-bits='64' id='919b335b'/>
+      <pointer-type-def type-id='31e7d828' size-in-bits='64' id='800c67c2'/>
+      <pointer-type-def type-id='a804e84c' size-in-bits='64' id='8b8bc11e'/>
+      <pointer-type-def type-id='b4bb7eac' size-in-bits='64' id='d8c458ae'/>
+      <pointer-type-def type-id='bb1a67f7' size-in-bits='64' id='5afbd3c3'/>
+      <pointer-type-def type-id='e8300215' size-in-bits='64' id='1d8e5a11'/>
+      <pointer-type-def type-id='c95d9034' size-in-bits='64' id='2eb7248e'/>
+      <array-type-def dimensions='1' type-id='f3b4aca8' size-in-bits='infinite' id='c66d33bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='192' id='5d34b9c7'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='efa21d3b' size-in-bits='2048' id='70a48c94'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <pointer-type-def type-id='6ed3e587' size-in-bits='64' id='c5ff416f'/>
+      <pointer-type-def type-id='3f017308' size-in-bits='64' id='e55edb2e'/>
+      <pointer-type-def type-id='23a849db' size-in-bits='64' id='16cfe92b'/>
+      <pointer-type-def type-id='a5e8d9a1' size-in-bits='64' id='775147d9'/>
+      <array-type-def dimensions='1' type-id='0f8b1896' size-in-bits='infinite' id='7c792e5e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='6aebc4a7' size-in-bits='64' id='c8f5869f'/>
+      <pointer-type-def type-id='c8f5869f' size-in-bits='64' id='0f830eef'/>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='256' id='c8478d3d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='32' id='da004b74'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='916c4095' size-in-bits='64' id='439be051'/>
+      <pointer-type-def type-id='f037e1bb' size-in-bits='64' id='a8faf36f'/>
+      <typedef-decl name='fsnotify_connp_t' type-id='994d9d61' filepath='include/linux/fsnotify_backend.h' line='284' column='1' id='dc5fa7f0'/>
+      <typedef-decl name='iw_handler' type-id='2c8ff697' filepath='include/net/iw_handler.h' line='315' column='1' id='bcc5cab3'/>
+      <typedef-decl name='nf_hookfn' type-id='272e7e29' filepath='include/linux/netfilter.h' line='77' column='1' id='0331c4d6'/>
+      <pointer-type-def type-id='51edb62f' size-in-bits='64' id='aecbf18b'/>
+      <pointer-type-def type-id='756696ad' size-in-bits='64' id='c021fd31'/>
+      <pointer-type-def type-id='243799e7' size-in-bits='64' id='bc00c03b'/>
+      <typedef-decl name='u_char' type-id='002ac4a6' filepath='include/linux/types.h' line='84' column='1' id='b151a3a8'/>
+      <typedef-decl name='xfrm_address_t' type-id='eba8a6fd' filepath='include/uapi/linux/xfrm.h' line='19' column='1' id='c210d497'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1024' id='6dcfc3c6'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='24' id='930ea9f9'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='infinite' id='29c3368c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__22' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip_fib.h' line='89' column='1' id='37def4b7'>
+        <data-member access='public'>
+          <var-decl name='ipv4' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ipv6' type-id='f6ed712a' visibility='default' filepath='include/net/ip_fib.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='ba169a6c'>
+        <data-member access='public'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nulls_head' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='149' column='1' id='fc320d58'>
+        <data-member access='public'>
+          <var-decl name='gclist' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1' id='21c0164a'>
+        <data-member access='public'>
+          <var-decl name='e_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/posix_acl.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='e_gid' type-id='094d8048' visibility='default' filepath='include/linux/posix_acl.h' line='23' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='295' column='1' id='4a3999ba'>
+        <data-member access='public'>
+          <var-decl name='validation_data' type-id='eaa32e2f' visibility='default' filepath='include/net/netlink.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='46901745' visibility='default' filepath='include/net/netlink.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='validate' type-id='9c9480f6' visibility='default' filepath='include/net/netlink.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='strict_start_type' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='319' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='63c3ee86' size-in-bits='64' id='5b4e5af0'/>
+      <pointer-type-def type-id='58e5bb8b' size-in-bits='64' id='03862e5f'/>
+      <pointer-type-def type-id='557c51cd' size-in-bits='64' id='29e425c9'/>
+      <pointer-type-def type-id='33ca674b' size-in-bits='64' id='c9214b77'/>
+      <pointer-type-def type-id='a41f849f' size-in-bits='64' id='d3d20d73'/>
+      <pointer-type-def type-id='a9732c0b' size-in-bits='64' id='b90b068f'/>
+      <pointer-type-def type-id='a9cc575c' size-in-bits='64' id='88909596'/>
+      <pointer-type-def type-id='e9ef9215' size-in-bits='64' id='2f974a69'/>
+      <pointer-type-def type-id='74e7a035' size-in-bits='64' id='6af64a09'/>
+      <pointer-type-def type-id='0cf765ad' size-in-bits='64' id='d8db14d1'/>
+      <pointer-type-def type-id='22814d90' size-in-bits='64' id='b249945a'/>
+      <pointer-type-def type-id='c210d497' size-in-bits='64' id='47a1c9f4'/>
+      <pointer-type-def type-id='4da03818' size-in-bits='64' id='1663a26e'/>
+      <pointer-type-def type-id='307587ae' size-in-bits='64' id='c56b5ee4'/>
+      <pointer-type-def type-id='faa1424f' size-in-bits='64' id='255e0487'/>
+      <pointer-type-def type-id='f9cce85e' size-in-bits='64' id='47541e34'/>
+      <pointer-type-def type-id='b3f5c5f7' size-in-bits='64' id='71411b0f'/>
+      <array-type-def dimensions='1' type-id='caf9c470' size-in-bits='512' id='c2eeb70e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='76959226' size-in-bits='64' id='1ed3660c'/>
+      <pointer-type-def type-id='12a2e88f' size-in-bits='64' id='9e4995c7'/>
+      <pointer-type-def type-id='1752769a' size-in-bits='64' id='e0c1c1b8'/>
+      <class-decl name='cfg80211_pmsr_capabilities' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4419' column='1' id='e9bb2749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_peers' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='randomize_mac_addr' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ftm' type-id='0de9002c' visibility='default' filepath='include/net/cfg80211.h' line='4434' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fnhe_hash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='72' column='1' id='ba046e9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='73' 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='101' column='1' id='39ec6fe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free_list' type-id='e4e6d6c4' visibility='default' filepath='include/linux/mmzone.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_free' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_device' size-in-bits='9344' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='44' column='1' id='e32a05ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/gpio/gpiolib.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='chrdev' type-id='22f86351' visibility='default' filepath='drivers/gpio/gpiolib.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='mockdev' type-id='fa0b179b' visibility='default' filepath='drivers/gpio/gpiolib.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/gpio/gpiolib.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='chip' type-id='e324928d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='descs' type-id='26760480' visibility='default' filepath='drivers/gpio/gpiolib.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='drivers/gpio/gpiolib.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/gpio/gpiolib.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='pin_ranges' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='65' 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='4164' column='1' id='1179f27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits' type-id='2fde6795' visibility='default' filepath='include/net/cfg80211.h' line='4169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_different_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_interfaces' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='n_limits' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='beacon_int_infra_match' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='radar_detect_widths' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='radar_detect_regions' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='beacon_int_min_gcd' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4219' 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='1285' column='1' id='835fe4c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mask' type-id='097504df' visibility='default' filepath='include/linux/ieee80211.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_params' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='reserved' type-id='930ea9f9' visibility='default' filepath='include/linux/ieee80211.h' line='1289' column='1'/>
+        </data-member>
+      </class-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='5c28f25e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' 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='19c2251e' 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='4df9d64a' 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='5a85c988' 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='9195bab1' visibility='default' filepath='include/net/regulatory.h' line='231' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_supported_band' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='416' column='1' id='f7e1259c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitrates' type-id='4343d470' visibility='default' filepath='include/net/cfg80211.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_bitrates' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/cfg80211.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/cfg80211.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='edmg_cap' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='n_iftype_data' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iftype_data' type-id='e76a43c4' visibility='default' filepath='include/net/cfg80211.h' line='426' 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='4222' column='1' id='21301fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4223' 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='1492' column='1' id='830056b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='72' column='1' id='6ed3e587'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spare' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_nh' type-id='1dc6a898' visibility='default' filepath='include/net/nexthop.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mpath' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='has_v4' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_entries' type-id='720e3ec4' visibility='default' filepath='include/net/nexthop.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='49' column='1' id='3f017308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_hash' type-id='03a4a074' visibility='default' filepath='include/net/nexthop.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_parent' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='reject_nh' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='757a0dbc' visibility='default' filepath='include/net/nexthop.h' line='56' 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='5816' column='1' id='e223f110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subcmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pageset' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='345' column='1' id='23a849db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcp' type-id='3572f41a' visibility='default' filepath='include/linux/mmzone.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='vm_stat_diff' type-id='a2b7d295' visibility='default' filepath='include/linux/mmzone.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pr_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='b45c773c'/>
+      <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='a5e8d9a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='cfc6a130' 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='2730d015' 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='72f469ec' 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='72f469ec' 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='fa0b179b' 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='9a537bbe' 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='95e97e5e' 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='81145c38' 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='f0981eeb' visibility='default' filepath='include/linux/reset-controller.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtable' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/route.h' line='49' column='1' id='6aebc4a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/route.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rt_genid' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='rt_flags' type-id='f0981eeb' visibility='default' filepath='include/net/route.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rt_type' type-id='d315442e' visibility='default' filepath='include/net/route.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='rt_is_input' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='rt_uses_gateway' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt_iif' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rt_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/route.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='77077303' visibility='default' filepath='include/net/route.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rt_mtu_locked' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='rt_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rt_uncached' type-id='72f469ec' visibility='default' filepath='include/net/route.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rt_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/route.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='342' column='1' id='bd4e4ac8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='init' type-id='98f35cbb' visibility='default' filepath='include/net/sch_generic.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='59f6a07a' visibility='default' filepath='include/net/sch_generic.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get' type-id='94c16fa5' visibility='default' filepath='include/net/sch_generic.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='change' type-id='6266601d' visibility='default' filepath='include/net/sch_generic.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42c362d1' visibility='default' filepath='include/net/sch_generic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='delete_empty' type-id='a4cbdcd9' visibility='default' filepath='include/net/sch_generic.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='4ffa0523' visibility='default' filepath='include/net/sch_generic.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reoffload' type-id='a852a9de' visibility='default' filepath='include/net/sch_generic.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hw_add' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_del' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bind_class' type-id='f590d4d9' visibility='default' filepath='include/net/sch_generic.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tmplt_create' type-id='938abf68' visibility='default' filepath='include/net/sch_generic.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tmplt_destroy' type-id='b7f9d8e6' visibility='default' filepath='include/net/sch_generic.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dump' type-id='69b48c13' visibility='default' filepath='include/net/sch_generic.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tmplt_dump' type-id='d18dbee4' visibility='default' filepath='include/net/sch_generic.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='390' 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='4298' column='1' id='7124a2a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4304' 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='4394' column='1' id='378a6c5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4398' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_vendor_command' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4369' column='1' id='fc206ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='e223f110' visibility='default' filepath='include/net/cfg80211.h' line='4370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='doit' type-id='a9032da3' visibility='default' filepath='include/net/cfg80211.h' line='4372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dumpit' type-id='dcf81beb' visibility='default' filepath='include/net/cfg80211.h' line='4374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/cfg80211.h' line='4377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4380' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_wowlan_support' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4278' column='1' id='5bbd300b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_nd_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcp' type-id='b3ebc0a8' visibility='default' filepath='include/net/cfg80211.h' line='4285' 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='4da03818'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='e84913bd' 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='307587ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='f0981eeb' 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='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='119' 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='faa1424f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='f0981eeb' 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='e84913bd' visibility='default' filepath='include/uapi/linux/xfrm.h' line='112' 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='f9cce85e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap_type' type-id='d315442e' 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='84a5c3d4' 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='84a5c3d4' 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='c210d497' visibility='default' filepath='include/uapi/linux/xfrm.h' line='253' 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='b3f5c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmp_len' type-id='f0981eeb' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d5016f6f' visibility='default' filepath='include/uapi/linux/xfrm.h' line='99' 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='666' column='1' id='caf9c470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='zone' type-id='0a0aff97' visibility='default' filepath='include/linux/mmzone.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='668' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='297' column='1' id='46901745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d9ceb659' const='yes' id='170bab5e'/>
+      <qualified-type-def type-id='7eedb398' const='yes' id='5e2a189d'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='128' id='8d43b1f5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='e76b9b35' size-in-bits='64' id='6d6531cd'/>
+      <pointer-type-def type-id='a6f56593' size-in-bits='64' id='8d4f223b'/>
+      <qualified-type-def type-id='9a401bb0' const='yes' id='3d6abfbb'/>
+      <qualified-type-def type-id='972f40bf' const='yes' id='9819baf4'/>
+      <qualified-type-def type-id='faf1ab29' const='yes' id='9d07f7d6'/>
+      <pointer-type-def type-id='44399e16' size-in-bits='64' id='57c51e1c'/>
+      <enum-decl name='nl80211_bss_select_attr' filepath='include/uapi/linux/nl80211.h' line='5895' column='1' id='10fd9108'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='nl80211_key_mode' filepath='include/uapi/linux/nl80211.h' line='4262' column='1' id='30430d28'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEY_RX_TX' value='0'/>
+        <enumerator name='NL80211_KEY_NO_TX' value='1'/>
+        <enumerator name='NL80211_KEY_SET_TX' value='2'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='16384' id='a7c26c7b'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <pointer-type-def type-id='627c50fc' size-in-bits='64' id='9c9480f6'/>
+      <pointer-type-def type-id='47308153' size-in-bits='64' id='3eef3bc7'/>
+      <pointer-type-def type-id='97488913' size-in-bits='64' id='2c8ff697'/>
+      <pointer-type-def type-id='f18c6e1f' size-in-bits='64' id='9264da33'/>
+      <pointer-type-def type-id='0f40f777' size-in-bits='64' id='8755cc63'/>
+      <pointer-type-def type-id='b86ed83e' size-in-bits='64' id='27936440'/>
+      <pointer-type-def type-id='88b7b5d3' size-in-bits='64' id='6dfd92af'/>
+      <pointer-type-def type-id='202f00af' size-in-bits='64' id='a9c0cdab'/>
+      <pointer-type-def type-id='708a4426' size-in-bits='64' id='82ffa5a0'/>
+      <pointer-type-def type-id='5dc99a0e' size-in-bits='64' id='f38728c0'/>
+      <pointer-type-def type-id='cce3f5a3' size-in-bits='64' id='93abc02f'/>
+      <pointer-type-def type-id='a6ad86be' size-in-bits='64' id='c9664af8'/>
+      <pointer-type-def type-id='3a5c2153' size-in-bits='64' id='be6c7be7'/>
+      <pointer-type-def type-id='abc85e8f' size-in-bits='64' id='be3a232b'/>
+      <pointer-type-def type-id='9d9592f7' size-in-bits='64' id='2136470b'/>
+      <pointer-type-def type-id='bf6a2c5c' size-in-bits='64' id='82a9a11e'/>
+      <pointer-type-def type-id='d11dd9c4' size-in-bits='64' id='d78dd406'/>
+      <pointer-type-def type-id='45947737' size-in-bits='64' id='706d79ff'/>
+      <array-type-def dimensions='1' type-id='f6507b0a' size-in-bits='infinite' id='b969bd7a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='f3a32dbb' size-in-bits='64' id='efa21d3b'/>
+      <pointer-type-def type-id='1f305e7e' size-in-bits='64' id='0d378d14'/>
+      <pointer-type-def type-id='59a2e4aa' size-in-bits='64' id='3a0389d8'/>
+      <pointer-type-def type-id='12f283a5' size-in-bits='64' id='62c51a1d'/>
+      <pointer-type-def type-id='c0065bf0' size-in-bits='64' id='0f8b1896'/>
+      <pointer-type-def type-id='16c50f80' size-in-bits='64' id='13ef4686'/>
+      <pointer-type-def type-id='c9a7d694' size-in-bits='64' id='e93ad56e'/>
+      <pointer-type-def type-id='b9c5fbfc' size-in-bits='64' id='f60e04ee'/>
+      <pointer-type-def type-id='8e2d4615' size-in-bits='64' id='8fbb31d1'/>
+      <pointer-type-def type-id='7c9213d1' size-in-bits='64' id='6ade418d'/>
+      <pointer-type-def type-id='c87333bf' size-in-bits='64' id='21641a6b'/>
+      <pointer-type-def type-id='217933b7' size-in-bits='64' id='42b02383'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='64' id='1872161b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='infinite' id='09b35382'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='fa07ab8f' size-in-bits='64' id='9cc41107'/>
+      <union-decl name='__anonymous_union__19' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='15' column='1' id='eba8a6fd'>
+        <data-member access='public'>
+          <var-decl name='a4' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='a6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/xfrm.h' line='18' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2515' column='1' id='0532d6f6'>
+        <data-member access='public'>
+          <var-decl name='band_pref' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2516' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2517' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='d66ae2ca' size-in-bits='64' id='5c4c6144'/>
+      <pointer-type-def type-id='b4a65d38' size-in-bits='64' id='14a0013e'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='24' id='4df9d64a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='Qdisc_class_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='243' column='1' id='d9ceb659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' 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='select_queue' type-id='98ff7360' visibility='default' filepath='include/net/sch_generic.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='graft' type-id='19bc34e4' visibility='default' filepath='include/net/sch_generic.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='c4d81be6' visibility='default' filepath='include/net/sch_generic.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qlen_notify' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='find' type-id='b95e1b8d' visibility='default' filepath='include/net/sch_generic.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='change' type-id='c0073bf3' visibility='default' filepath='include/net/sch_generic.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='delete' type-id='d60d5a0f' visibility='default' filepath='include/net/sch_generic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='walk' type-id='154ec6df' visibility='default' filepath='include/net/sch_generic.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcf_block' type-id='da0b22b2' visibility='default' filepath='include/net/sch_generic.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bind_tcf' type-id='4c592849' visibility='default' filepath='include/net/sch_generic.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unbind_tcf' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dump' type-id='3c31c59b' visibility='default' filepath='include/net/sch_generic.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dump_stats' type-id='6313cef0' visibility='default' filepath='include/net/sch_generic.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss_ies' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2209' column='1' id='7eedb398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_beacon' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2214' 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='2063' column='1' id='5da08e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delta' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2065' 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='2704' column='1' id='76959226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2707' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_request' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2118' column='1' id='12a2e88f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='2120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match_sets' type-id='ea00c914' visibility='default' filepath='include/net/cfg80211.h' line='2127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='n_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_plans' type-id='302e9391' visibility='default' filepath='include/net/cfg80211.h' line='2131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_scan_plans' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='relative_rssi_set' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='relative_rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rssi_adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='2142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg80211.h' line='2143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='2144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='report_results' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2154' 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='2729' column='1' id='1752769a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sock' type-id='13103032' visibility='default' filepath='include/net/cfg80211.h' line='2730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dst' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dst_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_mac' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='payload_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='payload_seq' type-id='d5a1b375' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wake_len' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tokens_size' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='payload_tok' type-id='2868c21b' visibility='default' filepath='include/net/cfg80211.h' line='2742' 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='44399e16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frequency' type-id='7359adad' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='23' 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='277' column='1' id='a041735c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ampdu_factor' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ampdu_density' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/net/cfg80211.h' line='282' 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='295' column='1' id='c994e9c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vht_mcs' type-id='830056b5' visibility='default' filepath='include/net/cfg80211.h' line='298' 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='192' column='1' id='1f305e7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash_buckets' type-id='104977a4' visibility='default' filepath='include/net/neighbour.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_shift' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_rnd' type-id='3fa29bab' visibility='default' filepath='include/net/neighbour.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='196' 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='115' column='1' id='59a2e4aa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroys' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_grows' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='res_failed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lookups' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hits' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcv_probes_mcast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcv_probes_ucast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periodic_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forced_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unres_discards' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='table_fulls' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pages' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='336' column='1' id='3572f41a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='high' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='batch' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lists' type-id='a8e1fb22' visibility='default' filepath='include/linux/mmzone.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhash_lock_head' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='47' column='1' id='c0065bf0'/>
+      <class-decl name='tcf_block' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='455' column='1' id='16c50f80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/sch_generic.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='q' type-id='ee406209' visibility='default' filepath='include/net/sch_generic.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cb_lock' type-id='f19fdb93' visibility='default' filepath='include/net/sch_generic.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flow_block' type-id='bc545b43' visibility='default' filepath='include/net/sch_generic.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='keep_dst' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='offloadcnt' type-id='49178f86' visibility='default' filepath='include/net/sch_generic.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nooffloaddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='lockeddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='chain0' type-id='894533b3' visibility='default' filepath='include/net/sch_generic.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proto_destroy_ht' type-id='64f4baeb' visibility='default' filepath='include/net/sch_generic.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='proto_destroy_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_hslot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='57' column='1' id='fa07ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/udp.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/net/udp.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/udp.h' line='60' 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='b4a65d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='c210d497' 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='c210d497' 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='d315442e' 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='8f048e17' 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='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='500' 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='296' column='1' id='9a401bb0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='advance' type-id='7e17c1b8' visibility='default' filepath='include/net/xfrm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='check' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recheck' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify' type-id='b2edd032' visibility='default' filepath='include/net/xfrm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overflow' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='305' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='390' column='1' id='972f40bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' 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='2730d015' 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='f9b06939' 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='f9b06939' 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='0642cb3c' 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='d507826b' 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='5e185d4c' 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='5e185d4c' 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='ae9790c6' 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='d236d29d' visibility='default' filepath='include/net/xfrm.h' line='406' 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='412' column='1' id='faf1ab29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='encap' type-id='a81671bb' visibility='default' filepath='include/net/xfrm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_tail' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='231269da' visibility='default' filepath='include/net/xfrm.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='4424' column='1' id='0de9002c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preambles' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bandwidths' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bursts_exponent' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='4427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='non_asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4433' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1a71e14e' const='yes' id='e76b9b35'/>
+      <qualified-type-def type-id='077208d0' const='yes' id='a6f56593'/>
+      <pointer-type-def type-id='06f84b1d' size-in-bits='64' id='2fde6795'/>
+      <pointer-type-def type-id='36c71786' size-in-bits='64' id='e76a43c4'/>
+      <pointer-type-def type-id='b954583a' size-in-bits='64' id='cfc6a130'/>
+      <pointer-type-def type-id='bd4a4592' size-in-bits='64' id='b3ebc0a8'/>
+      <enum-decl name='nl80211_dfs_regions' filepath='include/uapi/linux/nl80211.h' line='3828' column='1' id='5a85c988'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='e92f1a2f' size-in-bits='64' id='aa804387'/>
+      <pointer-type-def type-id='59f9f35d' size-in-bits='64' id='e324928d'/>
+      <pointer-type-def type-id='ce30b5d2' size-in-bits='64' id='4343d470'/>
+      <array-type-def dimensions='1' type-id='a9d5f761' size-in-bits='infinite' id='9195bab1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='7ae39c29' size-in-bits='64' id='6266601d'/>
+      <pointer-type-def type-id='f3f27ff7' size-in-bits='64' id='69b48c13'/>
+      <pointer-type-def type-id='137e352e' size-in-bits='64' id='81145c38'/>
+      <pointer-type-def type-id='0332edd2' size-in-bits='64' id='d18dbee4'/>
+      <pointer-type-def type-id='d8488877' size-in-bits='64' id='98f35cbb'/>
+      <pointer-type-def type-id='6cb7d4e4' size-in-bits='64' id='a852a9de'/>
+      <pointer-type-def type-id='21f5310d' size-in-bits='64' id='42c362d1'/>
+      <pointer-type-def type-id='d91d4c07' size-in-bits='64' id='dcf81beb'/>
+      <pointer-type-def type-id='c756879f' size-in-bits='64' id='a9032da3'/>
+      <pointer-type-def type-id='ff0d68dc' size-in-bits='64' id='f6507b0a'/>
+      <array-type-def dimensions='1' type-id='f59a8358' size-in-bits='infinite' id='720e3ec4'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='fff56995' size-in-bits='64' id='12f283a5'/>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='112' id='a2b7d295'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <pointer-type-def type-id='93a4c7d5' size-in-bits='64' id='a4cbdcd9'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='80' id='097504df'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__23' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/route.h' line='62' column='1' id='77077303'>
+        <data-member access='public'>
+          <var-decl name='rt_gw4' type-id='78a133c2' visibility='default' filepath='include/net/route.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rt_gw6' type-id='f6ed712a' visibility='default' filepath='include/net/route.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='832' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='56' column='1' id='757a0dbc'>
+        <data-member access='public'>
+          <var-decl name='fib_nhc' type-id='e1f89457' visibility='default' filepath='include/net/nexthop.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fib_nh' type-id='deb3203d' visibility='default' filepath='include/net/nexthop.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fib6_nh' type-id='979d5bbb' visibility='default' filepath='include/net/nexthop.h' line='59' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='187fa8c7' size-in-bits='64' id='4ffa0523'/>
+      <pointer-type-def type-id='46adf4c0' size-in-bits='64' id='59f6a07a'/>
+      <pointer-type-def type-id='09f0c826' size-in-bits='64' id='825ef190'/>
+      <pointer-type-def type-id='4aa54e65' size-in-bits='64' id='f590d4d9'/>
+      <pointer-type-def type-id='30a49526' size-in-bits='64' id='938abf68'/>
+      <pointer-type-def type-id='4ede01e9' size-in-bits='64' id='94c16fa5'/>
+      <pointer-type-def type-id='be9189df' size-in-bits='64' id='0a0aff97'/>
+      <pointer-type-def type-id='77780344' size-in-bits='64' id='c4d81be6'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='128' id='3fa29bab'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='7430554e' size-in-bits='64' id='ea00c914'/>
+      <pointer-type-def type-id='391881a9' size-in-bits='64' id='302e9391'/>
+      <pointer-type-def type-id='0c960fcf' size-in-bits='64' id='a1fa7fb7'/>
+      <class-decl name='fib_nh' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='103' column='1' id='deb3203d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip_fib.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nh_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nh_parent' type-id='09dcd1bf' visibility='default' filepath='include/net/ip_fib.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nh_saddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nh_saddr_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_exception' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='58' column='1' id='e92f1a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fnhe_next' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnhe_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fnhe_daddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fnhe_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fnhe_mtu_locked' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fnhe_gw' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fnhe_expires' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fnhe_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fnhe_rth_output' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fnhe_stamp' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flow_block' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/flow_offload.h' line='281' column='1' id='bc545b43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/net/flow_offload.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='58' column='1' id='1a71e14e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='name' type-id='f01a039e' visibility='default' filepath='include/linux/fs_parser.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='47' column='1' id='077208d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs_parser.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='ef73e3d4' visibility='default' filepath='include/linux/fs_parser.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs_parser.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_chip' size-in-bits='3968' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='344' column='1' id='59f9f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiodev' type-id='fb7dc22d' visibility='default' filepath='include/linux/gpio/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/gpio/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/gpio/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='d2a48436' visibility='default' filepath='include/linux/gpio/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_direction' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='direction_input' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='direction_output' type-id='9d5147b2' visibility='default' filepath='include/linux/gpio/driver.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_multiple' type-id='ea666691' visibility='default' filepath='include/linux/gpio/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set' type-id='7c70f4dd' visibility='default' filepath='include/linux/gpio/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_multiple' type-id='f471a8cc' visibility='default' filepath='include/linux/gpio/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_config' type-id='49728c6d' visibility='default' filepath='include/linux/gpio/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='to_irq' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dbg_show' type-id='2c6d11fe' visibility='default' filepath='include/linux/gpio/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='init_valid_mask' type-id='0084e9cb' visibility='default' filepath='include/linux/gpio/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/gpio/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='include/linux/gpio/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='names' type-id='13956559' visibility='default' filepath='include/linux/gpio/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='can_sleep' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='31045126' visibility='default' filepath='include/linux/gpio/driver.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/gpio/driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='of_gpio_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='of_xlate' type-id='fdd04afe' visibility='default' filepath='include/linux/gpio/driver.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='458' 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='ce30b5d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' 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='1dc6a898' 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='1dc6a898' 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='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='249' 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='a9d5f761'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freq_range' type-id='a81053d4' 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='736b3d64' 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='8eec5cae' 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='19c2251e' 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='19c2251e' 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='b50a4934' visibility='default' filepath='include/net/regulatory.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_grp_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='63' column='1' id='f59a8358'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='upper_bound' type-id='49178f86' visibility='default' filepath='include/net/nexthop.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_parent' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='69' column='1'/>
+        </data-member>
+      </class-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='4893' column='1' id='d5a1b375'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' 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='4904' column='1' id='2868c21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='token_stream' type-id='167619f6' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pneigh_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='177' column='1' id='fff56995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='12f283a5' visibility='default' filepath='include/net/neighbour.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__28' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='473' column='1' id='894533b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='475' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e47a5a92' const='yes' id='06f84b1d'/>
+      <qualified-type-def type-id='1ffb3281' const='yes' id='36c71786'/>
+      <qualified-type-def type-id='ac76d92d' const='yes' id='b954583a'/>
+      <qualified-type-def type-id='557bca33' const='yes' id='bd4a4592'/>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='8192' id='64f4baeb'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ec00acfb' size-in-bits='infinite' id='14cad687'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='9c757b77' size-in-bits='64' id='c0073bf3'/>
+      <pointer-type-def type-id='c393ee9b' size-in-bits='64' id='d60d5a0f'/>
+      <pointer-type-def type-id='74c76c4a' size-in-bits='64' id='19bc34e4'/>
+      <pointer-type-def type-id='83d13e0e' size-in-bits='64' id='6313cef0'/>
+      <pointer-type-def type-id='23ce80b7' size-in-bits='64' id='3c31c59b'/>
+      <pointer-type-def type-id='1b8c67aa' size-in-bits='64' id='0642cb3c'/>
+      <pointer-type-def type-id='389d1e82' size-in-bits='64' id='5e185d4c'/>
+      <pointer-type-def type-id='0286989c' size-in-bits='64' id='ae9790c6'/>
+      <pointer-type-def type-id='65fbb133' size-in-bits='64' id='796b13b7'/>
+      <pointer-type-def type-id='08abca50' size-in-bits='64' id='231269da'/>
+      <pointer-type-def type-id='06b4cb39' size-in-bits='64' id='d236d29d'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='512' id='a8e1fb22'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='3c330066' size-in-bits='64' id='104977a4'/>
+      <pointer-type-def type-id='1a196c3e' size-in-bits='64' id='98ff7360'/>
+      <pointer-type-def type-id='daae3cc8' size-in-bits='64' id='da0b22b2'/>
+      <pointer-type-def type-id='c02c4ff1' size-in-bits='64' id='b95e1b8d'/>
+      <pointer-type-def type-id='da14b6a5' size-in-bits='64' id='4c592849'/>
+      <pointer-type-def type-id='2707fa43' size-in-bits='64' id='154ec6df'/>
+      <pointer-type-def type-id='5257f496' size-in-bits='64' id='0fb373c0'/>
+      <pointer-type-def type-id='8edc59cf' size-in-bits='64' id='d507826b'/>
+      <pointer-type-def type-id='751b0878' size-in-bits='64' id='b2edd032'/>
+      <pointer-type-def type-id='bf7aaec7' size-in-bits='64' id='a81671bb'/>
+      <pointer-type-def type-id='f85fb8c6' size-in-bits='64' id='7e17c1b8'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='112' id='f01a039e'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='cfg80211_match_set' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2036' column='1' id='7430554e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='per_band_rssi_thold' type-id='68c8d0cb' visibility='default' filepath='include/net/cfg80211.h' line='2040' 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='2052' column='1' id='391881a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2054' 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='1928' column='1' id='0c960fcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1930' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='29' column='1' id='31045126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/gpio/driver.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/gpio/driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_ops' type-id='2c202856' visibility='default' filepath='include/linux/gpio/driver.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/gpio/driver.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_domain' type-id='7544e824' visibility='default' filepath='include/linux/gpio/driver.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='child_to_parent_hwirq' type-id='391871d1' visibility='default' filepath='include/linux/gpio/driver.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='populate_parent_fwspec' type-id='c12d7269' visibility='default' filepath='include/linux/gpio/driver.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_offset_to_irq' type-id='f5b0f2f2' visibility='default' filepath='include/linux/gpio/driver.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='child_irq_domain_ops' type-id='0926e4bd' visibility='default' filepath='include/linux/gpio/driver.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='default_type' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='request_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='parent_handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='parent_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/gpio/driver.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_parents' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parents' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='map' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='init_hw' type-id='26bfaed1' visibility='default' filepath='include/linux/gpio/driver.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='init_valid_mask' type-id='bb3baa4e' visibility='default' filepath='include/linux/gpio/driver.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='257' 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='a81053d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_freq_khz' type-id='19c2251e' 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='19c2251e' 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='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='184' 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='4100' column='1' id='e47a5a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='types' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4102' 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='736b3d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_antenna_gain' type-id='19c2251e' 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='19c2251e' visibility='default' filepath='include/net/regulatory.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sband_iftype_data' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='333' column='1' id='1ffb3281'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='types_mask' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/cfg80211.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='he_6ghz_capa' type-id='192864a5' visibility='default' filepath='include/net/cfg80211.h' line='336' 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='8eec5cae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='00286dfe' 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='00286dfe' visibility='default' filepath='include/net/regulatory.h' line='214' 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='ac76d92d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='c637b701' 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='c637b701' 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='c637b701' 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='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='22' 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='4255' column='1' id='557bca33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tok' type-id='6a8cbf59' visibility='default' filepath='include/net/cfg80211.h' line='4256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_interval_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4260' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/>
+      <enum-decl name='fs_parameter_type' filepath='include/linux/fs_parser.h' line='23' column='1' id='ef73e3d4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__fs_param_wasnt_defined' value='0'/>
+        <enumerator name='fs_param_is_flag' value='1'/>
+        <enumerator name='fs_param_is_bool' value='2'/>
+        <enumerator name='fs_param_is_u32' value='3'/>
+        <enumerator name='fs_param_is_u32_octal' value='4'/>
+        <enumerator name='fs_param_is_u32_hex' value='5'/>
+        <enumerator name='fs_param_is_s32' value='6'/>
+        <enumerator name='fs_param_is_u64' value='7'/>
+        <enumerator name='fs_param_is_enum' value='8'/>
+        <enumerator name='fs_param_is_string' value='9'/>
+        <enumerator name='fs_param_is_blob' value='10'/>
+        <enumerator name='fs_param_is_blockdev' value='11'/>
+        <enumerator name='fs_param_is_path' value='12'/>
+        <enumerator name='fs_param_is_fd' value='13'/>
+        <enumerator name='nr__fs_parameter_type' value='14'/>
+      </enum-decl>
+      <pointer-type-def type-id='85bdf127' size-in-bits='64' id='09dcd1bf'/>
+      <pointer-type-def type-id='95abac74' size-in-bits='64' id='fdd04afe'/>
+      <pointer-type-def type-id='e19b8aa7' size-in-bits='64' id='9f2634eb'/>
+      <pointer-type-def type-id='40afefd0' size-in-bits='64' id='9d5147b2'/>
+      <pointer-type-def type-id='706f3909' size-in-bits='64' id='49728c6d'/>
+      <pointer-type-def type-id='068d5e4f' size-in-bits='64' id='0084e9cb'/>
+      <pointer-type-def type-id='4cbeea4d' size-in-bits='64' id='ea666691'/>
+      <pointer-type-def type-id='da0e76a0' size-in-bits='64' id='3c330066'/>
+      <pointer-type-def type-id='bd08cd5c' size-in-bits='64' id='d2a48436'/>
+      <pointer-type-def type-id='e30804d9' size-in-bits='64' id='7c70f4dd'/>
+      <pointer-type-def type-id='8a70282a' size-in-bits='64' id='f471a8cc'/>
+      <pointer-type-def type-id='92920004' size-in-bits='64' id='2c6d11fe'/>
+      <class-decl name='fib_info' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='131' column='1' id='85bdf127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_lhash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip_fib.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fib_net' type-id='a2bff676' visibility='default' filepath='include/net/ip_fib.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib_treeref' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='fib_clntref' type-id='64615833' visibility='default' filepath='include/net/ip_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib_flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip_fib.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fib_dead' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='fib_protocol' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='560'>
+          <var-decl name='fib_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='568'>
+          <var-decl name='fib_type' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fib_prefsrc' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='fib_tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fib_priority' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip_fib.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fib_nhs' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='fib_nh_is_v6' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='808'>
+          <var-decl name='nh_updated' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip_fib.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_nh' type-id='c094d415' visibility='default' filepath='include/net/ip_fib.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_6ghz_capa' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3160' column='1' id='192864a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capa' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='3162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_he_cap' size-in-bits='440' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='314' column='1' id='0056bfcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_he' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='he_cap_elem' type-id='4dffc3f2' visibility='default' filepath='include/net/cfg80211.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='he_mcs_nss_supp' type-id='b1f4f4c7' visibility='default' filepath='include/net/cfg80211.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='ppe_thres' type-id='5030b3c3' visibility='default' filepath='include/net/cfg80211.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neighbour' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='137' column='1' id='da0e76a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3c330066' visibility='default' filepath='include/net/neighbour.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parms' type-id='affe0fe2' visibility='default' filepath='include/net/neighbour.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirmed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='updated' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='arp_queue_len_bytes' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='arp_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='used' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='probes' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='nud_state' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='dead' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='ha_lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/neighbour.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ha' type-id='fc872715' visibility='default' filepath='include/net/neighbour.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hh' type-id='0db936dc' visibility='default' filepath='include/net/neighbour.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ops' type-id='66fa472a' visibility='default' filepath='include/net/neighbour.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='primary_key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
+      <pointer-type-def type-id='ed477ec9' size-in-bits='64' id='6a8cbf59'/>
+      <array-type-def dimensions='1' type-id='86d70780' size-in-bits='256' id='00286dfe'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='33c534fd' size-in-bits='64' id='26bfaed1'/>
+      <pointer-type-def type-id='d35840cd' size-in-bits='64' id='391871d1'/>
+      <pointer-type-def type-id='d0d01815' size-in-bits='64' id='c637b701'/>
+      <pointer-type-def type-id='0f5f7920' size-in-bits='64' id='8846a616'/>
+      <pointer-type-def type-id='47479831' size-in-bits='64' id='a57283f9'/>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='128' id='68c8d0cb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='74b5d8d8' size-in-bits='64' id='f5b0f2f2'/>
+      <pointer-type-def type-id='0d702425' size-in-bits='64' id='c12d7269'/>
+      <pointer-type-def type-id='0863015c' size-in-bits='64' id='bb3baa4e'/>
+      <class-decl name='hh_cache' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='240' column='1' id='0db936dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hh_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hh_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/netdevice.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hh_data' type-id='d2b016f4' visibility='default' filepath='include/linux/netdevice.h' line='250' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_cap_elem' size-in-bits='136' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1578' column='1' id='4dffc3f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac_cap_info' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='phy_cap_info' type-id='4d77ae82' visibility='default' filepath='include/linux/ieee80211.h' line='1580' 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='1625' column='1' id='b1f4f4c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='tx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1631' 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='86d70780'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cw_min' type-id='1dc6a898' 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='1dc6a898' 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='1dc6a898' 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='f9b06939' visibility='default' filepath='include/net/regulatory.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4083e44' size-in-bits='64' id='66fa472a'/>
+      <qualified-type-def type-id='0dd56ffa' const='yes' id='ed477ec9'/>
+      <array-type-def dimensions='1' type-id='deb3203d' size-in-bits='infinite' id='c094d415'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='38a112d0' size-in-bits='64' id='a57789c2'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='200' id='5030b3c3'>
+        <subrange length='25' type-id='7ff19f0f' id='41d5ddce'/>
+      </array-type-def>
+      <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='4915' column='1' id='0dd56ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bufsize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='06dfa6bb' const='yes' id='e4083e44'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='88' id='4d77ae82'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='768' id='d2b016f4'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <class-decl name='neigh_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='169' column='1' id='06dfa6bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='solicit' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='error_report' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connected_output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6415147f' size-in-bits='64' id='8e78f753'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/fpsimd.c' language='LANG_C89'>
+      <var-decl name='fpsimd_context_busy' type-id='b50a4934' mangled-name='fpsimd_context_busy' visibility='default' filepath='arch/arm64/kernel/fpsimd.c' line='149' column='1' elf-symbol-id='fpsimd_context_busy'/>
+      <function-decl name='kernel_neon_end' mangled-name='kernel_neon_end' filepath='arch/arm64/kernel/fpsimd.c' line='1282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_neon_end'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_neon_begin' mangled-name='kernel_neon_begin' filepath='arch/arm64/kernel/fpsimd.c' line='1256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_neon_begin'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/io.c' language='LANG_C89'>
+      <qualified-type-def type-id='b0b3cbf9' const='yes' id='484cd8ba'/>
+      <pointer-type-def type-id='484cd8ba' size-in-bits='64' id='60f8eab0'/>
+      <qualified-type-def type-id='48b5725f' volatile='yes' id='b0b3cbf9'/>
+      <pointer-type-def type-id='b0b3cbf9' size-in-bits='64' id='fe09dd29'/>
+      <function-decl name='__memset_io' mangled-name='__memset_io' filepath='arch/arm64/kernel/io.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memset_io'>
+        <parameter type-id='fe09dd29' name='dst' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='71' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__memcpy_toio' mangled-name='__memcpy_toio' filepath='arch/arm64/kernel/io.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_toio'>
+        <parameter type-id='fe09dd29' name='to' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='43' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__memcpy_fromio' mangled-name='__memcpy_fromio' filepath='arch/arm64/kernel/io.c' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__memcpy_fromio'>
+        <parameter type-id='eaa32e2f' name='to' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <parameter type-id='60f8eab0' name='from' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='arch/arm64/kernel/io.c' line='15' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/process.c' language='LANG_C89'>
+      <var-decl name='__stack_chk_guard' type-id='7359adad' mangled-name='__stack_chk_guard' visibility='default' filepath='arch/arm64/kernel/process.c' line='60' column='1' elf-symbol-id='__stack_chk_guard'/>
+      <var-decl name='pm_power_off' type-id='953b12f8' mangled-name='pm_power_off' visibility='default' filepath='arch/arm64/kernel/process.c' line='67' column='1' elf-symbol-id='pm_power_off'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/return_address.c' language='LANG_C89'>
+      <function-decl name='return_address' mangled-name='return_address' filepath='arch/arm64/kernel/return_address.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='return_address'>
+        <parameter type-id='f0981eeb' name='level' filepath='arch/arm64/kernel/return_address.c' line='35' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/smp.c' language='LANG_C89'>
+      <var-decl name='cpu_number' type-id='95e97e5e' mangled-name='cpu_number' visibility='default' filepath='arch/arm64/kernel/smp.c' line='60' column='1' elf-symbol-id='cpu_number'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/kernel/stacktrace.c' language='LANG_C89'>
+      <class-decl name='stack_trace' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/stacktrace.h' line='64' column='1' id='e7058f21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/stacktrace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/stacktrace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='1d2c2b85' visibility='default' filepath='include/linux/stacktrace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skip' type-id='95e97e5e' visibility='default' filepath='include/linux/stacktrace.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e7058f21' size-in-bits='64' id='e5248359'/>
+      <function-decl name='save_stack_trace_tsk' mangled-name='save_stack_trace_tsk' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='save_stack_trace_tsk'>
+        <parameter type-id='f23e2572' name='tsk' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1'/>
+        <parameter type-id='e5248359' name='trace' filepath='arch/arm64/kernel/stacktrace.c' line='201' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='save_stack_trace' mangled-name='save_stack_trace' filepath='arch/arm64/kernel/stacktrace.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='save_stack_trace'>
+        <parameter type-id='e5248359' name='trace' filepath='arch/arm64/kernel/stacktrace.c' line='206' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/lib/delay.c' language='LANG_C89'>
+      <function-decl name='__udelay' mangled-name='__udelay' filepath='arch/arm64/lib/delay.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__udelay'>
+        <parameter type-id='7359adad' name='usecs' filepath='arch/arm64/lib/delay.c' line='49' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ndelay' mangled-name='__ndelay' filepath='arch/arm64/lib/delay.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ndelay'>
+        <parameter type-id='7359adad' name='nsecs' filepath='arch/arm64/lib/delay.c' line='55' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__const_udelay' mangled-name='__const_udelay' filepath='arch/arm64/lib/delay.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__const_udelay'>
+        <parameter type-id='7359adad' name='xloops' filepath='arch/arm64/lib/delay.c' line='43' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/copypage.c' language='LANG_C89'>
+      <function-decl name='copy_page' filepath='arch/arm64/include/asm/page.h' line='21' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clear_page' filepath='arch/arm64/include/asm/page.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/dma-mapping.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='448' id='a038344f'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='72' id='060772ed'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='1024' id='e3204322'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <class-decl name='cma' size-in-bits='576' is-struct='yes' visibility='default' filepath='mm/cma.h' line='5' column='1' id='6110442c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='7359adad' visibility='default' filepath='mm/cma.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='mm/cma.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='order_per_bit' type-id='f0981eeb' visibility='default' filepath='mm/cma.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='mm/cma.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='mm/cma.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pin_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='30' column='1' id='038d05bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sleep_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_state' type-id='f418ceb3' visibility='default' filepath='include/linux/pinctrl/devinfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='121' column='1' id='7d93f824'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resume_latency' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='latency_tolerance' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freq' type-id='7ca99f8c' visibility='default' filepath='include/linux/pm_qos.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='e0a9bd3c' visibility='default' filepath='include/linux/pm_qos.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='resume_latency_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='latency_tolerance_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='flags_req' type-id='a80fd1bc' visibility='default' filepath='include/linux/pm_qos.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_private' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='77' column='1' id='d066d157'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='klist_children' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='knode_parent' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='knode_driver' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_class' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='deferred_probe' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='drivers/base/base.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='drivers/base/base.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_coherent_mem' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d5ff7f6'/>
+      <class-decl name='driver_private' size-in-bits='1472' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='47' column='1' id='e44b8083'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/base/base.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='knode_bus' type-id='3d045a53' visibility='default' filepath='drivers/base/base.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mkobj' type-id='47ed147a' visibility='default' filepath='drivers/base/base.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='drivers/base/base.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_group' size-in-bits='2048' is-struct='yes' visibility='default' filepath='drivers/iommu/iommu.c' line='35' column='1' id='2352f3ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/iommu/iommu.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='devices_kobj' type-id='d30bdc51' visibility='default' filepath='drivers/iommu/iommu.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='drivers/iommu/iommu.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/iommu/iommu.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='drivers/iommu/iommu.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iommu_data' type-id='eaa32e2f' visibility='default' filepath='drivers/iommu/iommu.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iommu_data_release' type-id='b7f9d8e6' visibility='default' filepath='drivers/iommu/iommu.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='drivers/iommu/iommu.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/iommu/iommu.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='default_domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='drivers/iommu/iommu.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_domain' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='162' column='1' id='a667f60e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/irqdomain.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdomain.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='2c202856' visibility='default' filepath='include/linux/irqdomain.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irqdomain.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mapcount' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bus_token' type-id='385b8018' visibility='default' filepath='include/linux/irqdomain.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='gc' type-id='8e62d7cb' visibility='default' filepath='include/linux/irqdomain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='parent' type-id='7544e824' visibility='default' filepath='include/linux/irqdomain.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/irqdomain.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hwirq_max' type-id='88370ce9' visibility='default' filepath='include/linux/irqdomain.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='revmap_direct_max_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='revmap_size' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdomain.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='revmap_tree' type-id='d39738ac' visibility='default' filepath='include/linux/irqdomain.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='revmap_tree_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdomain.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='linear_revmap' type-id='c764d637' visibility='default' filepath='include/linux/irqdomain.h' line='192' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_domain_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='172' column='1' id='3bf19710'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_domain.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='subsys_private' size-in-bits='4352' is-struct='yes' visibility='default' filepath='drivers/base/base.h' line='29' column='1' id='4a19d21e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='devices_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='drivers/base/base.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/base.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='drivers_kset' type-id='89b70200' visibility='default' filepath='drivers/base/base.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='klist_devices' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='klist_drivers' type-id='6160a6ce' visibility='default' filepath='drivers/base/base.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='bus_notifier' type-id='708c2394' visibility='default' filepath='drivers/base/base.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drivers_autoprobe' type-id='f0981eeb' visibility='default' filepath='drivers/base/base.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='drivers/base/base.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='glue_dirs' type-id='8cf069a2' visibility='default' filepath='drivers/base/base.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='drivers/base/base.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wake_irq' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/power/power.h' line='31' column='1' id='4657336c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/power/power.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='status' type-id='f0981eeb' visibility='default' filepath='drivers/base/power/power.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/power/power.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/power/power.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='32' id='587936a0'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='512' id='6094c99c'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='512' id='625d6c02'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='device' size-in-bits='7488' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1251' column='1' id='66e487eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/device.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='p' type-id='0d3b0dcf' visibility='default' filepath='include/linux/device.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='init_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='type' type-id='cd28613b' visibility='default' filepath='include/linux/device.h' line='1258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='driver' type-id='00c7b870' visibility='default' filepath='include/linux/device.h' line='1261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/device.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/device.h' line='1270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='links' type-id='2d178f63' visibility='default' filepath='include/linux/device.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='power' type-id='f3166b6b' visibility='default' filepath='include/linux/device.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='pm_domain' type-id='a4375c03' visibility='default' filepath='include/linux/device.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='include/linux/device.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='pins' type-id='fa43ef1d' visibility='default' filepath='include/linux/device.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='msi_list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dma_ops' type-id='ac58af12' visibility='default' filepath='include/linux/device.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='dma_mask' type-id='3df9fd28' visibility='default' filepath='include/linux/device.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='coherent_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='bus_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_pfn_offset' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='dma_parms' type-id='9b4aaf1f' visibility='default' filepath='include/linux/device.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='dma_pools' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dma_mem' type-id='5bfba86c' visibility='default' filepath='include/linux/device.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='cma_area' type-id='6f67b38a' visibility='default' filepath='include/linux/device.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='archdata' type-id='d3e142f5' visibility='default' filepath='include/linux/device.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/device.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='devt' type-id='8504f260' visibility='default' filepath='include/linux/device.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6304'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='devres_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/device.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='devres_head' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='iommu_group' type-id='0b19fc54' visibility='default' filepath='include/linux/device.h' line='1329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='iommu_fwspec' type-id='1979c577' visibility='default' filepath='include/linux/device.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='iommu_param' type-id='506df562' visibility='default' filepath='include/linux/device.h' line='1331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offline_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='offline' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_synced' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dma_coherent' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1349' 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='825' column='1' id='bdae35f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devnode' type-id='b72fdee5' visibility='default' filepath='include/linux/device.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='833' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='279' column='1' id='3ea82289'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='freeze' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thaw' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poweroff' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='restore' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='suspend_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='poweroff_late' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restore_early' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='freeze_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='thaw_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='poweroff_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='restore_noirq' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='runtime_suspend' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='runtime_resume' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='runtime_idle' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bus_type' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='123' column='1' id='b31bfc8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_root' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drv_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='2f28f04c' visibility='default' filepath='include/linux/device.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='online' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offline' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_vf' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dma_configure' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iommu_ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lock_key' type-id='47479831' visibility='default' filepath='include/linux/device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='need_parent_lock' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_driver' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='389' column='1' id='fe007c02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus' type-id='5e2671f8' visibility='default' filepath='include/linux/device.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suppress_bind_attrs' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='probe_type' type-id='171c98b7' visibility='default' filepath='include/linux/device.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_match_table' type-id='e5ce629e' visibility='default' filepath='include/linux/device.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='acpi_match_table' type-id='5b62aa60' visibility='default' filepath='include/linux/device.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_state' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='remove' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='suspend' type-id='df416a94' visibility='default' filepath='include/linux/device.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='resume' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='coredump' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='p' type-id='52abf1d3' visibility='default' filepath='include/linux/device.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='probe_type' filepath='include/linux/device.h' line='338' column='1' id='171c98b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PROBE_DEFAULT_STRATEGY' value='0'/>
+        <enumerator name='PROBE_PREFER_ASYNCHRONOUS' value='1'/>
+        <enumerator name='PROBE_FORCE_SYNCHRONOUS' value='2'/>
+      </enum-decl>
+      <class-decl name='of_device_id' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='260' column='1' id='8bb45a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='compatible' type-id='e3204322' visibility='default' filepath='include/linux/mod_devicetable.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='acpi_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='210' column='1' id='ad95e21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='060772ed' visibility='default' filepath='include/linux/mod_devicetable.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cls' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cls_msk' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kernel_ulong_t' type-id='7359adad' filepath='include/linux/mod_devicetable.h' line='14' column='1' id='0791d6c8'/>
+      <typedef-decl name='pm_message_t' type-id='c120b5da' filepath='include/linux/pm.h' line='53' column='1' id='08496218'/>
+      <class-decl name='pm_message' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='51' column='1' id='c120b5da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_ops' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='250' column='1' id='8b7a2cd1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capable' type-id='fd03a8f4' visibility='default' filepath='include/linux/iommu.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain_alloc' type-id='2908e93a' visibility='default' filepath='include/linux/iommu.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_free' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map' type-id='2371b41a' visibility='default' filepath='include/linux/iommu.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unmap' type-id='d1a6d6c2' visibility='default' filepath='include/linux/iommu.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_iotlb_all' type-id='36caa4da' visibility='default' filepath='include/linux/iommu.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iotlb_sync_map' type-id='7b4e3cad' visibility='default' filepath='include/linux/iommu.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='iotlb_sync' type-id='a6bf568c' visibility='default' filepath='include/linux/iommu.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iova_to_phys' type-id='c4904652' visibility='default' filepath='include/linux/iommu.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='add_device' type-id='613d39f5' visibility='default' filepath='include/linux/iommu.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='remove_device' type-id='dd787f72' visibility='default' filepath='include/linux/iommu.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='device_group' type-id='5448fdd7' visibility='default' filepath='include/linux/iommu.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='domain_get_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='domain_set_attr' type-id='fe396a7b' visibility='default' filepath='include/linux/iommu.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='put_resv_regions' type-id='83d96d05' visibility='default' filepath='include/linux/iommu.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='apply_resv_region' type-id='b20722ab' visibility='default' filepath='include/linux/iommu.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='domain_window_enable' type-id='7f31e8fb' visibility='default' filepath='include/linux/iommu.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='domain_window_disable' type-id='d3b2d361' visibility='default' filepath='include/linux/iommu.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='of_xlate' type-id='7fc43753' visibility='default' filepath='include/linux/iommu.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='is_attach_deferred' type-id='6ee36fa3' visibility='default' filepath='include/linux/iommu.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dev_has_feat' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev_feat_enabled' type-id='6981b6e9' visibility='default' filepath='include/linux/iommu.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev_enable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dev_disable_feat' type-id='5a1281ab' visibility='default' filepath='include/linux/iommu.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_attach_dev' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_detach_dev' type-id='32baba38' visibility='default' filepath='include/linux/iommu.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='aux_get_pasid' type-id='21e9ca19' visibility='default' filepath='include/linux/iommu.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sva_bind' type-id='925b860a' visibility='default' filepath='include/linux/iommu.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sva_unbind' type-id='4fb74714' visibility='default' filepath='include/linux/iommu.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sva_get_pasid' type-id='4ded61d5' visibility='default' filepath='include/linux/iommu.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='page_response' type-id='1ff48951' visibility='default' filepath='include/linux/iommu.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iommu.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_cap' filepath='include/linux/iommu.h' line='99' column='1' id='031224de'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='80ef8feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' 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='f1ac64d0' 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='7359adad' 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='a01c3626' 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='eaa32e2f' 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='1f78af0c' 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='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_fault_handler_t' type-id='8e0d1900' filepath='include/linux/iommu.h' line='53' column='1' id='a01c3626'/>
+      <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='1f78af0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aperture_start' type-id='cf29c9b3' 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='cf29c9b3' 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='b50a4934' visibility='default' filepath='include/linux/iommu.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='148' column='1' id='cf29c9b3'/>
+      <class-decl name='iommu_iotlb_gather' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='205' column='1' id='34fc4897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='7359adad' visibility='default' filepath='include/linux/iommu.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgsize' type-id='b59d7dce' visibility='default' filepath='include/linux/iommu.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_attr' filepath='include/linux/iommu.h' line='119' column='1' id='e176cc45'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_DMA_USE_FLUSH_QUEUE' value='7'/>
+        <enumerator name='DOMAIN_ATTR_MAX' value='8'/>
+      </enum-decl>
+      <class-decl name='iommu_resv_region' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='157' column='1' id='91088608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='2522883d' visibility='default' filepath='include/linux/iommu.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/iommu.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prot' type-id='95e97e5e' visibility='default' filepath='include/linux/iommu.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='256c2037' visibility='default' filepath='include/linux/iommu.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_resv_type' filepath='include/linux/iommu.h' line='132' column='1' id='256c2037'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IOMMU_RESV_DIRECT' value='0'/>
+        <enumerator name='IOMMU_RESV_DIRECT_RELAXABLE' value='1'/>
+        <enumerator name='IOMMU_RESV_RESERVED' value='2'/>
+        <enumerator name='IOMMU_RESV_MSI' value='3'/>
+        <enumerator name='IOMMU_RESV_SW_MSI' value='4'/>
+      </enum-decl>
+      <class-decl name='of_phandle_args' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='74' column='1' id='fbff4263'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='args_count' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='args' type-id='625d6c02' visibility='default' filepath='include/linux/of.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_node' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='51' column='1' id='6661a698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='phandle' type-id='6e394fba' 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='full_name' type-id='80f4b756' 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='fwnode' type-id='d5ace205' visibility='default' filepath='include/linux/of.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='deadprops' type-id='ddcd89c6' visibility='default' filepath='include/linux/of.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='child' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sibling' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/of.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='_flags' type-id='7359adad' visibility='default' filepath='include/linux/of.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='phandle' type-id='19c2251e' filepath='include/linux/of.h' line='28' column='1' id='6e394fba'/>
+      <class-decl name='fwnode_handle' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fwnode.h' line='18' column='1' id='d5ace205'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='secondary' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='b4ff6cf8' visibility='default' filepath='include/linux/fwnode.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fwnode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fwnode.h' line='26' 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='114' column='1' id='f45a6a89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='c379ce2c' visibility='default' filepath='include/linux/fwnode.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='device_is_available' type-id='e4913062' visibility='default' filepath='include/linux/fwnode.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device_get_match_data' type-id='def135ae' visibility='default' filepath='include/linux/fwnode.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='property_present' type-id='a9ee1319' visibility='default' filepath='include/linux/fwnode.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='property_read_int_array' type-id='15f6292e' visibility='default' filepath='include/linux/fwnode.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='property_read_string_array' type-id='841b4311' visibility='default' filepath='include/linux/fwnode.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_next_child_node' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_named_child_node' type-id='c297681a' visibility='default' filepath='include/linux/fwnode.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_reference_args' type-id='4324a0e5' visibility='default' filepath='include/linux/fwnode.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='graph_get_next_endpoint' type-id='900dcb03' visibility='default' filepath='include/linux/fwnode.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='graph_get_remote_endpoint' type-id='e9910ceb' visibility='default' filepath='include/linux/fwnode.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='graph_get_port_parent' type-id='e3a3f61a' visibility='default' filepath='include/linux/fwnode.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='graph_parse_endpoint' type-id='bde527e9' visibility='default' filepath='include/linux/fwnode.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='add_links' type-id='5eff49b2' visibility='default' filepath='include/linux/fwnode.h' line='150' 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='49' column='1' id='8dbba1ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/fwnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nargs' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='args' type-id='6094c99c' visibility='default' filepath='include/linux/fwnode.h' line='52' 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='35' column='1' id='84a13146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/fwnode.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_fwnode' type-id='7837cd88' visibility='default' filepath='include/linux/fwnode.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='property' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='31' column='1' id='ebe3ac70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' 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='95e97e5e' 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='eaa32e2f' 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='ddcd89c6' 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='d83a2db1' visibility='default' filepath='include/linux/of.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iommu_dev_features' filepath='include/linux/iommu.h' line='166' column='1' id='29d28711'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IOMMU_DEV_FEAT_AUX' value='0'/>
+        <enumerator name='IOMMU_DEV_FEAT_SVA' value='1'/>
+      </enum-decl>
+      <class-decl name='iommu_sva' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='584' column='1' id='c0e44fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cdcad9b1' visibility='default' filepath='include/linux/iommu.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_sva_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='188' column='1' id='dcdc0d46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_exit' type-id='bf86d885' visibility='default' filepath='include/linux/iommu.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_mm_exit_handler_t' type-id='459dcf05' filepath='include/linux/iommu.h' line='55' column='1' id='bf86d885'/>
+      <class-decl name='iommu_fault_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='339' column='1' id='00f37356'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fault' type-id='1f190221' visibility='default' filepath='include/linux/iommu.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='341' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='111' column='1' id='1f190221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='padding' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='10f19c49' visibility='default' filepath='include/uapi/linux/iommu.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='114' column='1' id='10f19c49'>
+        <data-member access='public'>
+          <var-decl name='event' type-id='85fb8e73' visibility='default' filepath='include/uapi/linux/iommu.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='prm' type-id='cfbe6297' visibility='default' filepath='include/uapi/linux/iommu.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='padding2' type-id='a038344f' visibility='default' filepath='include/uapi/linux/iommu.h' line='117' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='iommu_fault_unrecoverable' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='69' column='1' id='85fb8e73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reason' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='perm' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fetch_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_page_request' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='91' column='1' id='cfbe6297'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='grpid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='perm' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/iommu.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='8a7b7524' visibility='default' filepath='include/uapi/linux/iommu.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_page_response' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/iommu.h' line='145' column='1' id='719148b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pasid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='grpid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/iommu.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_links_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1151' column='1' id='2d178f63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='needs_suppliers' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='defer_hook' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='need_for_probe' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='status' type-id='070abca2' visibility='default' filepath='include/linux/device.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dl_dev_state' filepath='include/linux/device.h' line='1133' column='1' id='070abca2'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2752' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='576' column='1' id='f3166b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_state' type-id='08496218' visibility='default' filepath='include/linux/pm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='can_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='async_suspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='in_dpm_list' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_noirq_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_late_suspended' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='no_pm' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='direct_complete' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/linux/pm.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/pm.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='1ea237a6' visibility='default' filepath='include/linux/pm.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wakeup_path' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='syscore' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='no_pm_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='must_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='may_skip_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='suspend_timer' type-id='b6993efc' visibility='default' filepath='include/linux/pm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='timer_expires' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/pm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='child_count' type-id='49178f86' visibility='default' filepath='include/linux/pm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disable_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='idle_notification' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='deferred_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='needs_force_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='runtime_auto' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ignore_children' type-id='b50a4934' visibility='default' filepath='include/linux/pm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='no_callbacks' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='irq_safe' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='use_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='timer_autosuspends' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='memalloc_noio' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='links_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='request' type-id='2418515b' visibility='default' filepath='include/linux/pm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='runtime_status' type-id='3c1b7fd8' visibility='default' filepath='include/linux/pm.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='runtime_error' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/pm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_busy' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='active_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='suspended_time' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='accounting_timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subsys_data' type-id='77415389' visibility='default' filepath='include/linux/pm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_latency_tolerance' type-id='c3d2558f' visibility='default' filepath='include/linux/pm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='qos' type-id='b991f562' visibility='default' filepath='include/linux/pm.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='637' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wakeup_source' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/pm_wakeup.h' line='43' column='1' id='152cd1b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_wakeup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_wakeup.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/pm_wakeup.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_wakeup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wakeirq' type-id='303e01fa' visibility='default' filepath='include/linux/pm_wakeup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/pm_wakeup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_expires' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='total_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='last_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='start_prevent_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='prevent_sleep_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_wakeup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='event_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='active_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='relax_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='expire_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wakeup_count' type-id='7359adad' visibility='default' filepath='include/linux/pm_wakeup.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_wakeup.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='autosleep_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pm_wakeup.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rpm_request' filepath='include/linux/pm.h' line='521' column='1' id='2418515b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='499' column='1' id='3c1b7fd8'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='256' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='533' column='1' id='1269b801'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcount' type-id='f0981eeb' visibility='default' filepath='include/linux/pm.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_data' type-id='53e3a7d6' visibility='default' filepath='include/linux/pm.h' line='540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_domain' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/pm.h' line='656' column='1' id='7c94eaa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3ea82289' visibility='default' filepath='include/linux/pm.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='detach' type-id='7d18218b' visibility='default' filepath='include/linux/pm.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='activate' type-id='613d39f5' visibility='default' filepath='include/linux/pm.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sync' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dismiss' type-id='dd787f72' visibility='default' filepath='include/linux/pm.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pm.h' line='663' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/dma-mapping.h' line='80' column='1' id='d45f2b4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='06c31e09' visibility='default' filepath='include/linux/dma-mapping.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='d7b98f89' visibility='default' filepath='include/linux/dma-mapping.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mmap' type-id='f7114ca5' visibility='default' filepath='include/linux/dma-mapping.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sgtable' type-id='295a92ed' visibility='default' filepath='include/linux/dma-mapping.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_page' type-id='7855184a' visibility='default' filepath='include/linux/dma-mapping.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unmap_page' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_sg' type-id='64452f48' visibility='default' filepath='include/linux/dma-mapping.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unmap_sg' type-id='772c77c9' visibility='default' filepath='include/linux/dma-mapping.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_resource' type-id='66c8694d' visibility='default' filepath='include/linux/dma-mapping.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unmap_resource' type-id='6407fd0f' visibility='default' filepath='include/linux/dma-mapping.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sync_single_for_cpu' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sync_single_for_device' type-id='b97350f1' visibility='default' filepath='include/linux/dma-mapping.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sync_sg_for_cpu' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sync_sg_for_device' type-id='9ed36ca7' visibility='default' filepath='include/linux/dma-mapping.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cache_sync' type-id='4935400d' visibility='default' filepath='include/linux/dma-mapping.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dma_supported' type-id='5aa1f3eb' visibility='default' filepath='include/linux/dma-mapping.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_required_mask' type-id='5dee5830' visibility='default' filepath='include/linux/dma-mapping.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_mapping_size' type-id='49f5e2e5' visibility='default' filepath='include/linux/dma-mapping.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_merge_boundary' type-id='1588722c' visibility='default' filepath='include/linux/dma-mapping.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-mapping.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='42' column='1' id='c59e4f4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sgl' type-id='bf3ef905' 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='f0981eeb' 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='f0981eeb' 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='663acc25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_link' type-id='7359adad' 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='f0981eeb' 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='f0981eeb' 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='cf29c9b3' 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='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dma_data_direction' filepath='include/linux/dma-direction.h' line='5' column='1' id='eea6b025'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1022' column='1' id='37251e77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/device.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/device.h' line='1028' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_archdata' size-in-bits='64' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='8' column='1' id='d3e142f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/device.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='600' column='1' id='fd48a067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/device.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/device.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/device.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_uevent' type-id='22deb949' visibility='default' filepath='include/linux/device.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='8cd77b5f' visibility='default' filepath='include/linux/device.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class_release' type-id='bea4d586' visibility='default' filepath='include/linux/device.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_release' type-id='dd787f72' visibility='default' filepath='include/linux/device.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='shutdown_pre' type-id='613d39f5' visibility='default' filepath='include/linux/device.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ns_type' type-id='47547dee' visibility='default' filepath='include/linux/device.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='namespace' type-id='e6c297c2' visibility='default' filepath='include/linux/device.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_ownership' type-id='f5f7cbd4' visibility='default' filepath='include/linux/device.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pm' type-id='3fab024e' visibility='default' filepath='include/linux/device.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='p' type-id='5da77304' visibility='default' filepath='include/linux/device.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='628' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fwspec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='569' column='1' id='0d6f83ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/iommu.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iommu_fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iommu_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/iommu.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='num_ids' type-id='f0981eeb' visibility='default' filepath='include/linux/iommu.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ids' type-id='587936a0' visibility='default' filepath='include/linux/iommu.h' line='575' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='367' column='1' id='6c784694'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault_param' type-id='0a9b173b' visibility='default' filepath='include/linux/iommu.h' line='369' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_fault_param' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='351' column='1' id='325adc8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='a84f5b46' visibility='default' filepath='include/linux/iommu.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iommu.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='faults' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/iommu.h' line='355' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iommu_dev_fault_handler_t' type-id='6d118cd1' filepath='include/linux/iommu.h' line='57' column='1' id='a84f5b46'/>
+      <pointer-type-def type-id='b31bfc8a' size-in-bits='64' id='5e2671f8'/>
+      <pointer-type-def type-id='6a18482b' size-in-bits='64' id='8cd77b5f'/>
+      <pointer-type-def type-id='7e6588d9' size-in-bits='64' id='b72fdee5'/>
+      <pointer-type-def type-id='fd48a067' size-in-bits='64' id='67aca04f'/>
+      <pointer-type-def type-id='6110442c' size-in-bits='64' id='6f67b38a'/>
+      <qualified-type-def type-id='ad95e21b' const='yes' id='3c7ea80a'/>
+      <pointer-type-def type-id='3c7ea80a' size-in-bits='64' id='5b62aa60'/>
+      <qualified-type-def type-id='3ea82289' const='yes' id='86af1d10'/>
+      <pointer-type-def type-id='86af1d10' size-in-bits='64' id='3fab024e'/>
+      <qualified-type-def type-id='66e487eb' const='yes' id='a78232f6'/>
+      <pointer-type-def type-id='a78232f6' size-in-bits='64' id='8df61054'/>
+      <qualified-type-def type-id='bdae35f4' const='yes' id='683a8a93'/>
+      <pointer-type-def type-id='683a8a93' size-in-bits='64' id='cd28613b'/>
+      <qualified-type-def type-id='d45f2b4f' const='yes' id='512ac7cc'/>
+      <pointer-type-def type-id='512ac7cc' size-in-bits='64' id='ac58af12'/>
+      <qualified-type-def type-id='d5ace205' const='yes' id='03419172'/>
+      <pointer-type-def type-id='03419172' size-in-bits='64' id='7837cd88'/>
+      <qualified-type-def type-id='f45a6a89' const='yes' id='2eb8da02'/>
+      <pointer-type-def type-id='2eb8da02' size-in-bits='64' id='b4ff6cf8'/>
+      <qualified-type-def type-id='8b7a2cd1' const='yes' id='9ce849da'/>
+      <pointer-type-def type-id='9ce849da' size-in-bits='64' id='f1ac64d0'/>
+      <qualified-type-def type-id='dcdc0d46' const='yes' id='c880d201'/>
+      <pointer-type-def type-id='c880d201' size-in-bits='64' id='cdcad9b1'/>
+      <qualified-type-def type-id='8bb45a31' const='yes' id='c46fad80'/>
+      <pointer-type-def type-id='c46fad80' size-in-bits='64' id='e5ce629e'/>
+      <pointer-type-def type-id='038d05bd' size-in-bits='64' id='fa43ef1d'/>
+      <pointer-type-def type-id='7c94eaa3' size-in-bits='64' id='a4375c03'/>
+      <pointer-type-def type-id='7d93f824' size-in-bits='64' id='b991f562'/>
+      <pointer-type-def type-id='66e487eb' size-in-bits='64' id='fa0b179b'/>
+      <pointer-type-def type-id='37251e77' size-in-bits='64' id='9b4aaf1f'/>
+      <pointer-type-def type-id='fe007c02' size-in-bits='64' id='00c7b870'/>
+      <pointer-type-def type-id='6661a698' size-in-bits='64' id='9a537bbe'/>
+      <pointer-type-def type-id='d066d157' size-in-bits='64' id='0d3b0dcf'/>
+      <pointer-type-def type-id='cf29c9b3' size-in-bits='64' id='e835b5d8'/>
+      <pointer-type-def type-id='5d5ff7f6' size-in-bits='64' id='5bfba86c'/>
+      <pointer-type-def type-id='e44b8083' size-in-bits='64' id='52abf1d3'/>
+      <pointer-type-def type-id='84a13146' size-in-bits='64' id='41b1c13c'/>
+      <pointer-type-def type-id='d5ace205' size-in-bits='64' id='4a935625'/>
+      <pointer-type-def type-id='d4693377' size-in-bits='64' id='e9910ceb'/>
+      <pointer-type-def type-id='cbab5390' size-in-bits='64' id='c297681a'/>
+      <pointer-type-def type-id='34e265cf' size-in-bits='64' id='900dcb03'/>
+      <pointer-type-def type-id='8f5d4d00' size-in-bits='64' id='e3a3f61a'/>
+      <pointer-type-def type-id='8dbba1ec' size-in-bits='64' id='861f302a'/>
+      <pointer-type-def type-id='bde8b845' size-in-bits='64' id='841b4311'/>
+      <pointer-type-def type-id='2a123bf1' size-in-bits='64' id='4324a0e5'/>
+      <pointer-type-def type-id='630a7fa4' size-in-bits='64' id='15f6292e'/>
+      <pointer-type-def type-id='00631170' size-in-bits='64' id='5eff49b2'/>
+      <pointer-type-def type-id='41d25fad' size-in-bits='64' id='bde527e9'/>
+      <pointer-type-def type-id='374a88a9' size-in-bits='64' id='613d39f5'/>
+      <pointer-type-def type-id='63217e72' size-in-bits='64' id='2f28f04c'/>
+      <pointer-type-def type-id='46816f8f' size-in-bits='64' id='5a1281ab'/>
+      <pointer-type-def type-id='984b30c5' size-in-bits='64' id='1ff48951'/>
+      <pointer-type-def type-id='b838f429' size-in-bits='64' id='459dcf05'/>
+      <pointer-type-def type-id='9c1f445d' size-in-bits='64' id='22deb949'/>
+      <pointer-type-def type-id='0ebe5367' size-in-bits='64' id='7fc43753'/>
+      <pointer-type-def type-id='a301f696' size-in-bits='64' id='64452f48'/>
+      <pointer-type-def type-id='dccf0381' size-in-bits='64' id='295a92ed'/>
+      <pointer-type-def type-id='aa70b8e2' size-in-bits='64' id='df416a94'/>
+      <pointer-type-def type-id='8ab5a2af' size-in-bits='64' id='5aa1f3eb'/>
+      <pointer-type-def type-id='a2ac80c1' size-in-bits='64' id='f7114ca5'/>
+      <pointer-type-def type-id='0ef3e0fd' size-in-bits='64' id='21e9ca19'/>
+      <pointer-type-def type-id='bdb68106' size-in-bits='64' id='8e0d1900'/>
+      <pointer-type-def type-id='f11f5d07' size-in-bits='64' id='fe396a7b'/>
+      <pointer-type-def type-id='99373687' size-in-bits='64' id='7f31e8fb'/>
+      <pointer-type-def type-id='c619ce98' size-in-bits='64' id='2371b41a'/>
+      <pointer-type-def type-id='9bb659f5' size-in-bits='64' id='6d118cd1'/>
+      <pointer-type-def type-id='dab705c1' size-in-bits='64' id='4ded61d5'/>
+      <pointer-type-def type-id='80ef8feb' size-in-bits='64' id='bff05edb'/>
+      <pointer-type-def type-id='78536370' size-in-bits='64' id='2908e93a'/>
+      <pointer-type-def type-id='1f190221' size-in-bits='64' id='9d9e2a39'/>
+      <pointer-type-def type-id='00f37356' size-in-bits='64' id='af233abc'/>
+      <pointer-type-def type-id='325adc8b' size-in-bits='64' id='0a9b173b'/>
+      <pointer-type-def type-id='0d6f83ff' size-in-bits='64' id='1979c577'/>
+      <pointer-type-def type-id='2352f3ae' size-in-bits='64' id='0b19fc54'/>
+      <pointer-type-def type-id='834d1a2b' size-in-bits='64' id='5448fdd7'/>
+      <pointer-type-def type-id='34fc4897' size-in-bits='64' id='1c63cc3f'/>
+      <pointer-type-def type-id='719148b2' size-in-bits='64' id='de4fef50'/>
+      <pointer-type-def type-id='6c784694' size-in-bits='64' id='506df562'/>
+      <pointer-type-def type-id='91088608' size-in-bits='64' id='24b0cc5e'/>
+      <pointer-type-def type-id='c0e44fcd' size-in-bits='64' id='419266fd'/>
+      <pointer-type-def type-id='a2dba6b8' size-in-bits='64' id='925b860a'/>
+      <pointer-type-def type-id='a667f60e' size-in-bits='64' id='7544e824'/>
+      <pointer-type-def type-id='fbff4263' size-in-bits='64' id='51a94113'/>
+      <pointer-type-def type-id='3bf19710' size-in-bits='64' id='53e3a7d6'/>
+      <pointer-type-def type-id='1269b801' size-in-bits='64' id='77415389'/>
+      <pointer-type-def type-id='ebe3ac70' size-in-bits='64' id='ddcd89c6'/>
+      <pointer-type-def type-id='663acc25' size-in-bits='64' id='bf3ef905'/>
+      <pointer-type-def type-id='c59e4f4c' size-in-bits='64' id='4adb0e6a'/>
+      <pointer-type-def type-id='4a19d21e' size-in-bits='64' id='5da77304'/>
+      <pointer-type-def type-id='f611d028' size-in-bits='64' id='e4913062'/>
+      <pointer-type-def type-id='19bf080d' size-in-bits='64' id='a9ee1319'/>
+      <pointer-type-def type-id='24f3731d' size-in-bits='64' id='6981b6e9'/>
+      <pointer-type-def type-id='b3bc5b3a' size-in-bits='64' id='fd03a8f4'/>
+      <pointer-type-def type-id='53143c97' size-in-bits='64' id='6ee36fa3'/>
+      <pointer-type-def type-id='b39453c8' size-in-bits='64' id='7855184a'/>
+      <pointer-type-def type-id='ea038279' size-in-bits='64' id='66c8694d'/>
+      <pointer-type-def type-id='7a348508' size-in-bits='64' id='c4904652'/>
+      <pointer-type-def type-id='7df55081' size-in-bits='64' id='49f5e2e5'/>
+      <pointer-type-def type-id='f1a922f0' size-in-bits='64' id='d1a6d6c2'/>
+      <pointer-type-def type-id='1f1ec116' size-in-bits='64' id='5dee5830'/>
+      <pointer-type-def type-id='2594b00f' size-in-bits='64' id='c484cc9e'/>
+      <pointer-type-def type-id='38b33cba' size-in-bits='64' id='1588722c'/>
+      <pointer-type-def type-id='59bcd074' size-in-bits='64' id='bea4d586'/>
+      <pointer-type-def type-id='fb2144e8' size-in-bits='64' id='dd787f72'/>
+      <pointer-type-def type-id='6c99ab8f' size-in-bits='64' id='b20722ab'/>
+      <pointer-type-def type-id='630e0832' size-in-bits='64' id='f5f7cbd4'/>
+      <pointer-type-def type-id='06a1c469' size-in-bits='64' id='83d96d05'/>
+      <pointer-type-def type-id='dd082beb' size-in-bits='64' id='9ed36ca7'/>
+      <pointer-type-def type-id='2157493d' size-in-bits='64' id='772c77c9'/>
+      <pointer-type-def type-id='0a84ab07' size-in-bits='64' id='7d18218b'/>
+      <pointer-type-def type-id='08cd0705' size-in-bits='64' id='b97350f1'/>
+      <pointer-type-def type-id='09c8f1a3' size-in-bits='64' id='6407fd0f'/>
+      <pointer-type-def type-id='766eac03' size-in-bits='64' id='c3d2558f'/>
+      <pointer-type-def type-id='8741a34d' size-in-bits='64' id='d7b98f89'/>
+      <pointer-type-def type-id='e76f1d29' size-in-bits='64' id='4935400d'/>
+      <pointer-type-def type-id='d8fd579a' size-in-bits='64' id='c379ce2c'/>
+      <pointer-type-def type-id='0b1ef2a8' size-in-bits='64' id='36caa4da'/>
+      <pointer-type-def type-id='e931abd6' size-in-bits='64' id='32baba38'/>
+      <pointer-type-def type-id='87769f42' size-in-bits='64' id='a6bf568c'/>
+      <pointer-type-def type-id='e5507ab5' size-in-bits='64' id='d3b2d361'/>
+      <pointer-type-def type-id='8aecb761' size-in-bits='64' id='7b4e3cad'/>
+      <pointer-type-def type-id='22400b6a' size-in-bits='64' id='4fb74714'/>
+      <pointer-type-def type-id='c00013f4' size-in-bits='64' id='def135ae'/>
+      <pointer-type-def type-id='f8c641b0' size-in-bits='64' id='e6c297c2'/>
+      <pointer-type-def type-id='066ca455' size-in-bits='64' id='06c31e09'/>
+      <pointer-type-def type-id='4657336c' size-in-bits='64' id='303e01fa'/>
+      <pointer-type-def type-id='152cd1b0' size-in-bits='64' id='1ea237a6'/>
+      <function-decl name='arch_setup_dma_ops' mangled-name='arch_setup_dma_ops' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_setup_dma_ops'>
+        <parameter type-id='fa0b179b' name='dev' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='91ce1af9' name='dma_base' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='arch/arm64/mm/dma-mapping.c' line='40' column='1'/>
+        <parameter type-id='f1ac64d0' name='iommu' filepath='arch/arm64/mm/dma-mapping.c' line='41' column='1'/>
+        <parameter type-id='b50a4934' name='coherent' filepath='arch/arm64/mm/dma-mapping.c' line='41' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='128' id='8a7b7524'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <function-type size-in-bits='64' id='6a18482b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c484cc9e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e6588d9'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c484cc9e'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4693377'>
+        <parameter type-id='7837cd88'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbab5390'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34e265cf'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='4a935625'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f5d4d00'>
+        <parameter type-id='4a935625'/>
+        <return type-id='4a935625'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bde8b845'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7d3cd834'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a123bf1'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='861f302a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='630a7fa4'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00631170'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41d25fad'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='41b1c13c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='374a88a9'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63217e72'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='00c7b870'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46816f8f'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='29d28711'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='984b30c5'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='af233abc'/>
+        <parameter type-id='de4fef50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b838f429'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='419266fd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c1f445d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='d9d65b21'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ebe5367'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='51a94113'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a301f696'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dccf0381'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa70b8e2'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ab5a2af'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2ac80c1'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ef3e0fd'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bdb68106'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f11f5d07'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='e176cc45'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99373687'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c619ce98'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bb659f5'>
+        <parameter type-id='9d9e2a39'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dab705c1'>
+        <parameter type-id='419266fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78536370'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='bff05edb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='834d1a2b'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='0b19fc54'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2dba6b8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='df4b7819'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='419266fd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f611d028'>
+        <parameter type-id='7837cd88'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19bf080d'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24f3731d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='29d28711'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3bc5b3a'>
+        <parameter type-id='031224de'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53143c97'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b39453c8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='cf29c9b3'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea038279'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='cf29c9b3'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a348508'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='cf29c9b3'/>
+        <return type-id='2522883d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7df55081'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1a922f0'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f1ec116'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38b33cba'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59bcd074'>
+        <parameter type-id='67aca04f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb2144e8'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c99ab8f'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='24b0cc5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='630e0832'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06a1c469'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd082beb'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2157493d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a84ab07'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08cd0705'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09c8f1a3'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='766eac03'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8741a34d'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e76f1d29'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8fd579a'>
+        <parameter type-id='4a935625'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b1ef2a8'>
+        <parameter type-id='bff05edb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e931abd6'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87769f42'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5507ab5'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8aecb761'>
+        <parameter type-id='bff05edb'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22400b6a'>
+        <parameter type-id='419266fd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c00013f4'>
+        <parameter type-id='7837cd88'/>
+        <parameter type-id='8df61054'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8c641b0'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='066ca455'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='094d8048' size-in-bits='64' id='acd96ee1'/>
+      <pointer-type-def type-id='a5179659' size-in-bits='64' id='d9d65b21'/>
+      <pointer-type-def type-id='d80b72e6' size-in-bits='64' id='2168a3eb'/>
+      <class-decl name='kobj_uevent_env' size-in-bits='18688' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='160' column='1' id='a5179659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='argv' type-id='461c9ed2' visibility='default' filepath='include/linux/kobject.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='envp' type-id='2e646d82' visibility='default' filepath='include/linux/kobject.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='envp_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='buf' type-id='41bf80f3' visibility='default' filepath='include/linux/kobject.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18656'>
+          <var-decl name='buflen' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='2048' id='2e646d82'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='192' id='461c9ed2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='16384' id='41bf80f3'>
+        <subrange length='2048' type-id='7ff19f0f' id='e5323efb'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/flush.c' language='LANG_C89'>
+      <function-decl name='flush_dcache_page' mangled-name='flush_dcache_page' filepath='arch/arm64/mm/flush.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_dcache_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='arch/arm64/mm/flush.c' line='68' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/init.c' language='LANG_C89'>
+      <var-decl name='memstart_addr' type-id='9b7c55ef' mangled-name='memstart_addr' visibility='default' filepath='arch/arm64/mm/init.c' line='50' column='1' elf-symbol-id='memstart_addr'/>
+      <function-decl name='pfn_valid' mangled-name='pfn_valid' filepath='arch/arm64/mm/init.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pfn_valid'>
+        <parameter type-id='7359adad' name='pfn' filepath='arch/arm64/mm/init.c' line='235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/ioremap.c' language='LANG_C89'>
+      <function-decl name='iounmap' mangled-name='iounmap' filepath='arch/arm64/mm/ioremap.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iounmap'>
+        <parameter type-id='fe09dd29' name='io_addr' filepath='arch/arm64/mm/ioremap.c' line='72' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ioremap' mangled-name='__ioremap' filepath='arch/arm64/mm/ioremap.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ioremap'>
+        <parameter type-id='2522883d' name='phys_addr' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='arch/arm64/mm/ioremap.c' line='65' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/mm/mmu.c' language='LANG_C89'>
+      <var-decl name='kimage_voffset' type-id='91ce1af9' mangled-name='kimage_voffset' visibility='default' filepath='arch/arm64/mm/mmu.c' line='47' column='1' elf-symbol-id='kimage_voffset'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='arch/arm64/net/bpf_jit_comp.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='64' id='f41331a9'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='224' id='3faaea70'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='256' id='7f84eb57'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='infinite' id='52cd3f2c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='16' id='0618bc0e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='256' id='7e67d89d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='24' id='c216126b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='416' id='a0412eab'>
+        <subrange length='52' type-id='7ff19f0f' id='f81e05f0'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='48' id='c60dc9f2'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8c2bf2b2' size-in-bits='infinite' id='b50399da'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='00ee50b8' size-in-bits='128' id='f57e9a44'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='96' id='ac151b64'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='112' id='f01a039e'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <class-decl name='bpf_offload_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='22474385'/>
+      <class-decl name='btf' is-struct='yes' visibility='default' is-declaration-only='yes' id='dccc7677'/>
+      <class-decl name='btf_type' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f6b1830'/>
+      <class-decl name='cpu_rmap' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cpu_rmap.h' line='24' column='1' id='e09a048e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/cpu_rmap.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='used' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='obj' type-id='63e171df' visibility='default' filepath='include/linux/cpu_rmap.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='near' type-id='f443352a' visibility='default' filepath='include/linux/cpu_rmap.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devlink_port' is-struct='yes' visibility='default' is-declaration-only='yes' id='b62ee7e2'/>
+      <class-decl name='in_device' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='25' column='1' id='4234e231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='64615833' 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='95e97e5e' 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='3a639063' 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='26479c18' 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='74bae2b6' 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='95e97e5e' 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='fb4018a0' 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='26479c18' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='002ac4a6' 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='002ac4a6' 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='002ac4a6' 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='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mr_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/linux/inetdevice.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='arp_parms' type-id='affe0fe2' visibility='default' filepath='include/linux/inetdevice.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cnf' type-id='c2c09950' visibility='default' filepath='include/linux/inetdevice.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/inetdevice.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet6_dev' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='163' column='1' id='8db8de2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/if_inet6.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mc_list' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mc_tomb' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='mc_qrv' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='mc_gq_running' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='mc_ifc_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='mc_dad_count' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mc_v1_seen' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mc_qi' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mc_qri' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mc_maxdelay' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mc_gq_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mc_ifc_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mc_dad_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ac_list' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='if_flags' type-id='3f1a6b60' visibility='default' filepath='include/net/if_inet6.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dead' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='desync_factor' type-id='19c2251e' visibility='default' filepath='include/net/if_inet6.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='rndid' type-id='d2f7b56a' visibility='default' filepath='include/net/if_inet6.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='tempaddr_list' type-id='72f469ec' visibility='default' filepath='include/net/if_inet6.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='token' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='nd_parms' type-id='affe0fe2' visibility='default' filepath='include/net/if_inet6.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cnf' type-id='55e8af82' visibility='default' filepath='include/net/if_inet6.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='stats' type-id='0e97f526' visibility='default' filepath='include/net/if_inet6.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='rs_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rs_interval' type-id='3158a266' visibility='default' filepath='include/net/if_inet6.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='rs_probes' type-id='8f048e17' visibility='default' filepath='include/net/if_inet6.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_handler_def' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='324' column='1' id='9218f3f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standard' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_standard' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='num_private' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_private_args' type-id='d315442e' visibility='default' filepath='include/net/iw_handler.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='private' type-id='f696846b' visibility='default' filepath='include/net/iw_handler.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_args' type-id='d841feae' visibility='default' filepath='include/net/iw_handler.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_wireless_stats' type-id='55e2a83c' visibility='default' filepath='include/net/iw_handler.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iw_public_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/iw_handler.h' line='420' column='1' id='44b3a0ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_data' type-id='96efb615' visibility='default' filepath='include/net/iw_handler.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='libipw' type-id='29244949' visibility='default' filepath='include/net/iw_handler.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ndisc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='202' column='1' id='88ef330b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_useropt' type-id='c1655339' visibility='default' filepath='include/net/ndisc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse_options' type-id='58505a39' visibility='default' filepath='include/net/ndisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update' type-id='0feea528' visibility='default' filepath='include/net/ndisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='opt_addr_space' type-id='beb4f24d' visibility='default' filepath='include/net/ndisc.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_addr_option' type-id='b78e9a0f' visibility='default' filepath='include/net/ndisc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prefix_rcv_add_addr' type-id='1cebc84d' visibility='default' filepath='include/net/ndisc.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_parms' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='71' column='1' id='1429eee4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='c9df1e6c' 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='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' 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_setup' type-id='8eff9c66' 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='6bbe39a7' 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='eaa32e2f' 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='95e97e5e' 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='64615833' 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='e3d8ce29' 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='95e97e5e' 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='77ba73f2' 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='f066dd3c' visibility='default' filepath='include/net/neighbour.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_rate_estimator' is-struct='yes' visibility='default' is-declaration-only='yes' id='51dbeb7e'/>
+      <class-decl name='pcpu_dstats' is-struct='yes' visibility='default' is-declaration-only='yes' id='45092453'/>
+      <class-decl name='phy_device' size-in-bits='11456' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='361' column='1' id='7c1f8187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdio' type-id='f3a32dbb' visibility='default' filepath='include/linux/phy.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='drv' type-id='e812884b' visibility='default' filepath='include/linux/phy.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='c45_ids' type-id='0463cbfd' visibility='default' filepath='include/linux/phy.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_c45' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_internal' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_pseudo_fixed_link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_gigabit_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='has_fixups' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='suspended_by_mdio_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='sysfs_links' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='loopback_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='autoneg' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='link' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='autoneg_complete' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='interrupts' type-id='f0981eeb' visibility='default' filepath='include/linux/phy.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='state' type-id='d29ba889' visibility='default' filepath='include/linux/phy.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='dev_flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='interface' type-id='d61bf978' visibility='default' filepath='include/linux/phy.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='duplex' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='asym_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='supported' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='lp_advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='adv_old' type-id='f05e8e77' visibility='default' filepath='include/linux/phy.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='eee_broken_modes' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='state_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/phy.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='phylink' type-id='56f3c6ca' visibility='default' filepath='include/linux/phy.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='attached_dev' type-id='68a2d05b' visibility='default' filepath='include/linux/phy.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='mdix' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11016'>
+          <var-decl name='mdix_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/phy.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='phy_link_change' type-id='8a09feb6' visibility='default' filepath='include/linux/phy.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='adjust_link' type-id='548eee3a' visibility='default' filepath='include/linux/phy.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='450' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qdisc_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f36a7f0'/>
+      <class-decl name='sfp_bus' is-struct='yes' visibility='default' is-declaration-only='yes' id='cc52ca8d'/>
+      <class-decl name='tcf_walker' is-struct='yes' visibility='default' is-declaration-only='yes' id='9a9d8c1d'/>
+      <class-decl name='tipc_bearer' is-struct='yes' visibility='default' is-declaration-only='yes' id='10ec1ded'/>
+      <class-decl name='udp_tunnel_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='a49fa2a0'/>
+      <class-decl name='wireless_dev' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4973' column='1' id='3ce3a3e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='4974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg80211.h' line='4979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mgmt_registrations' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mgmt_registrations_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='4984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mtx' type-id='925167dc' visibility='default' filepath='include/net/cfg80211.h' line='4986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='use_4addr' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='is_running' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='address' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='4993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mesh_id_up_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='conn' type-id='6dbc8e18' visibility='default' filepath='include/net/cfg80211.h' line='4995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='connect_keys' type-id='561a36db' visibility='default' filepath='include/net/cfg80211.h' line='4996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='conn_bss_type' type-id='cb952348' visibility='default' filepath='include/net/cfg80211.h' line='4997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='conn_owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disconnect_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='disconnect_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='5001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_bss' type-id='1819dec8' visibility='default' filepath='include/net/cfg80211.h' line='5006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='preset_chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='5007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='5008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ibss_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='ibss_dfs_possible' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2640'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='ap_unexpected_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='5018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='5020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2792'>
+          <var-decl name='cac_started' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='5023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='cac_start_time' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='5024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cac_time_ms' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='5025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cqm_config' type-id='ee527710' visibility='default' filepath='include/net/cfg80211.h' line='5043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pmsr_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='5045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='pmsr_lock' type-id='fb4018a0' visibility='default' filepath='include/net/cfg80211.h' line='5046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='pmsr_free_wk' type-id='ef9025d0' visibility='default' filepath='include/net/cfg80211.h' line='5047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='5049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='5050' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='326' column='1' id='8ae2fb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpan_phy' type-id='82398c35' visibility='default' filepath='include/net/cfg802154.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iftype' type-id='95e97e5e' visibility='default' filepath='include/net/cfg802154.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg802154.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg802154.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='header_ops' type-id='790774ef' visibility='default' filepath='include/net/cfg802154.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lowpan_dev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg802154.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='identifier' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='pan_id' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='short_addr' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dsn' type-id='49178f86' visibility='default' filepath='include/net/cfg802154.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='max_be' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='656'>
+          <var-decl name='csma_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='664'>
+          <var-decl name='frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='lbt' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='promiscuous_mode' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='ackreq' type-id='b50a4934' visibility='default' filepath='include/net/cfg802154.h' line='361' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='44' column='1' id='bbbd8970'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cq' type-id='9fa25a99' visibility='default' filepath='include/net/xdp_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='48e57944' visibility='default' filepath='include/net/xdp_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chunk_mask' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/net/xdp_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='headroom' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chunk_size_nohr' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/net/xdp_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/net/xdp_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/net/xdp_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/xdp_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pgs' type-id='9f93c9da' visibility='default' filepath='include/net/xdp_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='npgs' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='queue_id' type-id='1dc6a898' visibility='default' filepath='include/net/xdp_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='need_wakeup' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xdp_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/xdp_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/xdp_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fq_reuse' type-id='b925f68b' visibility='default' filepath='include/net/xdp_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='zc' type-id='b50a4934' visibility='default' filepath='include/net/xdp_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='xsk_list_lock' type-id='fb4018a0' visibility='default' filepath='include/net/xdp_sock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='xsk_list' type-id='72f469ec' visibility='default' filepath='include/net/xdp_sock.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='256' id='db1b7234'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='8192' id='64f4baeb'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='1024' id='ccfd385f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='384' id='613ff906'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f1e1eb79' size-in-bits='512' id='b5839634'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f8b1896' size-in-bits='infinite' id='7c792e5e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b65a052d' size-in-bits='infinite' id='11d66d65'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f588f6e0' size-in-bits='infinite' id='4967766c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='infinite' id='0f300383'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='128' id='0d8415b5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='160' id='5429fe4a'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='384' id='6aa9aca0'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='64' id='d2f7b56a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='48' id='4cfa781a'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='768' id='d2b016f4'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='infinite' id='baf98fd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c6675287' size-in-bits='infinite' id='a0955e2b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <enum-decl name='bpf_prog_type' filepath='include/uapi/linux/bpf.h' line='149' column='1' id='b80df76a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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'/>
+        <enumerator name='BPF_PROG_TYPE_FLOW_DISSECTOR' value='22'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SYSCTL' value='23'/>
+        <enumerator name='BPF_PROG_TYPE_RAW_TRACEPOINT_WRITABLE' value='24'/>
+        <enumerator name='BPF_PROG_TYPE_CGROUP_SOCKOPT' value='25'/>
+      </enum-decl>
+      <enum-decl name='bpf_attach_type' filepath='include/uapi/linux/bpf.h' line='178' column='1' id='67ce11ed'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_FLOW_DISSECTOR' value='17'/>
+        <enumerator name='BPF_CGROUP_SYSCTL' value='18'/>
+        <enumerator name='BPF_CGROUP_UDP4_RECVMSG' value='19'/>
+        <enumerator name='BPF_CGROUP_UDP6_RECVMSG' value='20'/>
+        <enumerator name='BPF_CGROUP_GETSOCKOPT' value='21'/>
+        <enumerator name='BPF_CGROUP_SETSOCKOPT' value='22'/>
+        <enumerator name='__MAX_BPF_ATTACH_TYPE' value='23'/>
+      </enum-decl>
+      <class-decl name='bpf_prog_aux' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='376' column='1' id='09d9fab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used_map_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_ctx_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pkt_offset' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_tp_access' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stack_depth' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='func_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='func_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='verifier_zext' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='offload_requested' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='50b674cc' visibility='default' filepath='include/linux/bpf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='jit_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ksym_tnode' type-id='dc9cc7c7' visibility='default' filepath='include/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ksym_lnode' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ops' type-id='330c0db4' visibility='default' filepath='include/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='used_maps' type-id='0928d5d6' visibility='default' filepath='include/linux/bpf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='load_time' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cgroup_storage' type-id='f57e9a44' visibility='default' filepath='include/linux/bpf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='offload' type-id='11f19dd0' visibility='default' filepath='include/linux/bpf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='func_info' type-id='368d43d3' visibility='default' filepath='include/linux/bpf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='linfo' type-id='2fcb9b17' visibility='default' filepath='include/linux/bpf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='jited_linfo' type-id='63e171df' visibility='default' filepath='include/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='func_info_cnt' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_linfo' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='linfo_idx' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='stats' type-id='fbf2ba3a' visibility='default' filepath='include/linux/bpf.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='' type-id='b597c0fa' visibility='default' filepath='include/linux/bpf.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='432' 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='306' column='1' id='9a1fed7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='test_run' type-id='eddbe2ad' visibility='default' filepath='include/linux/bpf.h' line='307' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='bpf_attr' size-in-bits='896' visibility='default' filepath='include/uapi/linux/bpf.h' line='369' column='1' id='8eb8eec2'>
+        <data-member access='public'>
+          <var-decl name='' type-id='61517c3b' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='27086fb9' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5bd442ce' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='26ba5712' visibility='default' filepath='include/uapi/linux/bpf.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='ecd71c3f' visibility='default' filepath='include/uapi/linux/bpf.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='test' type-id='220f72e3' visibility='default' filepath='include/uapi/linux/bpf.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5ae16468' visibility='default' filepath='include/uapi/linux/bpf.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='info' type-id='cca669dc' visibility='default' filepath='include/uapi/linux/bpf.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='query' type-id='e4eac598' visibility='default' filepath='include/uapi/linux/bpf.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_tracepoint' type-id='d316bc32' visibility='default' filepath='include/uapi/linux/bpf.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='fb043dae' visibility='default' filepath='include/uapi/linux/bpf.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='task_fd_query' type-id='e7d0ed32' visibility='default' filepath='include/uapi/linux/bpf.h' line='512' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='480' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='370' column='1' id='61517c3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_entries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='inner_map_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numa_node' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='map_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/bpf.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='map_ifindex' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='btf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='btf_key_type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_value_type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='386' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='389' column='1' id='27086fb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='e4a9eb9a' visibility='default' filepath='include/uapi/linux/bpf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='396' 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='392' column='1' id='e4a9eb9a'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='next_key' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='394' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='896' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='399' column='1' id='5bd442ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_type' type-id='3f1a6b60' 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='insn_cnt' type-id='3f1a6b60' 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='insns' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='license' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='log_level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='log_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='log_buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kern_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='prog_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prog_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/bpf.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prog_ifindex' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='expected_attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='prog_btf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='func_info_rec_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='func_info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='func_info_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='line_info_rec_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='line_info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='line_info_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='422' column='1'/>
+        </data-member>
+      </class-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='425' column='1' id='26ba5712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pathname' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='file_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='431' column='1' id='ecd71c3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='attach_bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='attach_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='435' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='438' column='1' id='220f72e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='retval' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_size_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_size_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_in' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_out' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='repeat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='duration' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctx_size_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ctx_size_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ctx_in' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctx_out' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='459' column='1' id='5ae16468'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='8f526230' visibility='default' filepath='include/uapi/linux/bpf.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='467' 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='460' column='1' id='8f526230'>
+        <data-member access='public'>
+          <var-decl name='start_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='prog_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='map_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='btf_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='464' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='470' column='1' id='cca669dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bpf_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='info_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='473' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='476' column='1' id='e4eac598'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='attach_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prog_ids' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='482' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='485' column='1' id='d316bc32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog_fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='487' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='490' column='1' id='fb043dae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='btf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='btf_log_buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='btf_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='btf_log_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='btf_log_level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='498' column='1' id='e7d0ed32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='buf_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fd_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='78' column='1' id='9e4acc7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='3a109e70' visibility='default' filepath='include/linux/bpf.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inner_map_meta' type-id='00ee50b8' visibility='default' filepath='include/linux/bpf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_type' type-id='da8f27ee' visibility='default' filepath='include/linux/bpf.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='key_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='value_size' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_entries' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_flags' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='spin_lock_off' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/bpf.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='btf_key_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='btf_value_type_id' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='btf' type-id='a469220f' visibility='default' filepath='include/linux/bpf.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='memory' type-id='7c6af338' visibility='default' filepath='include/linux/bpf.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unpriv_array' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='frozen' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='usercnt' type-id='49178f86' visibility='default' filepath='include/linux/bpf.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/bpf.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='32' column='1' id='90cdb889'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_alloc_check' type-id='9c946059' visibility='default' filepath='include/linux/bpf.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_alloc' type-id='0f1b0147' visibility='default' filepath='include/linux/bpf.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_release' type-id='8bf3cff5' visibility='default' filepath='include/linux/bpf.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_free' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='map_get_next_key' type-id='45ef3730' visibility='default' filepath='include/linux/bpf.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='map_release_uref' type-id='cf265ed1' visibility='default' filepath='include/linux/bpf.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_lookup_elem_sys_only' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_lookup_elem' type-id='7a66877d' visibility='default' filepath='include/linux/bpf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='map_update_elem' type-id='65fcdb9c' visibility='default' filepath='include/linux/bpf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_delete_elem' type-id='bf8c5f5e' visibility='default' filepath='include/linux/bpf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='map_push_elem' type-id='aad51e56' visibility='default' filepath='include/linux/bpf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map_pop_elem' type-id='bf8c5f5e' 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_peek_elem' type-id='bf8c5f5e' 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_get_ptr' type-id='2a3a4aec' visibility='default' filepath='include/linux/bpf.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_fd_put_ptr' type-id='b7f9d8e6' visibility='default' filepath='include/linux/bpf.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='map_gen_lookup' type-id='82ff4739' visibility='default' filepath='include/linux/bpf.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='map_fd_sys_lookup_elem' type-id='99577235' visibility='default' filepath='include/linux/bpf.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='map_seq_show_elem' type-id='81c90e99' visibility='default' filepath='include/linux/bpf.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='map_check_btf' type-id='098d4d92' visibility='default' filepath='include/linux/bpf.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='map_direct_value_addr' type-id='da4ee44b' visibility='default' filepath='include/linux/bpf.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_direct_value_meta' type-id='f6a079db' visibility='default' filepath='include/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='70' 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='65' column='1' id='8c2bf2b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='src_reg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/bpf.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='off' type-id='b55def60' visibility='default' filepath='include/uapi/linux/bpf.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='imm' type-id='3158a266' visibility='default' filepath='include/uapi/linux/bpf.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__s16' type-id='a2185560' filepath='include/uapi/asm-generic/int-ll64.h' line='23' column='1' id='b55def60'/>
+      <enum-decl name='bpf_map_type' filepath='include/uapi/linux/bpf.h' line='112' column='1' id='da8f27ee'>
+        <underlying-type type-id='9cac1fee'/>
+        <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'/>
+        <enumerator name='BPF_MAP_TYPE_PERCPU_CGROUP_STORAGE' value='21'/>
+        <enumerator name='BPF_MAP_TYPE_QUEUE' value='22'/>
+        <enumerator name='BPF_MAP_TYPE_STACK' value='23'/>
+        <enumerator name='BPF_MAP_TYPE_SK_STORAGE' value='24'/>
+        <enumerator name='BPF_MAP_TYPE_DEVMAP_HASH' value='25'/>
+      </enum-decl>
+      <class-decl name='bpf_map_memory' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='73' column='1' id='7c6af338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/bpf.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_offload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='350' column='1' id='eef53362'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/linux/bpf.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offdev' type-id='d079c835' visibility='default' filepath='include/linux/bpf.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev_state' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='opt_failed' type-id='b50a4934' visibility='default' filepath='include/linux/bpf.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jited_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/bpf.h' line='359' 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='946' column='1' id='ddd212e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifalias' type-id='e84913bd' visibility='default' filepath='include/linux/netdevice.h' line='948' 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/netdevice.h' line='1851' column='1' id='19245258'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upper' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lower' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1853' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_features_t' type-id='91ce1af9' filepath='include/linux/netdev_features.h' line='12' column='1' id='f9f4b16f'/>
+      <class-decl name='net_device_stats' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='164' column='1' id='a3566137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_packets' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tx_dropped' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='multicast' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='collisions' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_length_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_over_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rx_crc_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rx_frame_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rx_missed_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tx_aborted_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tx_carrier_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tx_fifo_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_heartbeat_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_window_errors' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_compressed' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device_ops' size-in-bits='4736' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1273' column='1' id='ba44c7d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndo_init' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ndo_uninit' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ndo_open' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ndo_stop' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ndo_start_xmit' type-id='bd3f3f93' visibility='default' filepath='include/linux/netdevice.h' line='1278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ndo_features_check' type-id='7a0ed254' visibility='default' filepath='include/linux/netdevice.h' line='1280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndo_select_queue' type-id='de36db77' visibility='default' filepath='include/linux/netdevice.h' line='1283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ndo_change_rx_flags' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ndo_set_rx_mode' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ndo_set_mac_address' type-id='f4dd5cc5' visibility='default' filepath='include/linux/netdevice.h' line='1289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ndo_validate_addr' type-id='2555df59' visibility='default' filepath='include/linux/netdevice.h' line='1291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ndo_do_ioctl' type-id='cc325be7' visibility='default' filepath='include/linux/netdevice.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ndo_set_config' type-id='bd2d1eba' visibility='default' filepath='include/linux/netdevice.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ndo_change_mtu' type-id='d6762aa0' visibility='default' filepath='include/linux/netdevice.h' line='1296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ndo_neigh_setup' type-id='5c9f2a92' visibility='default' filepath='include/linux/netdevice.h' line='1298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ndo_tx_timeout' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ndo_get_stats64' type-id='cb4c6db1' visibility='default' filepath='include/linux/netdevice.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ndo_has_offload_stats' type-id='e95fd96b' visibility='default' filepath='include/linux/netdevice.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ndo_get_offload_stats' type-id='f98694f9' visibility='default' filepath='include/linux/netdevice.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndo_get_stats' type-id='3217f9ba' visibility='default' filepath='include/linux/netdevice.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ndo_vlan_rx_add_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ndo_vlan_rx_kill_vid' type-id='4fcb4c39' visibility='default' filepath='include/linux/netdevice.h' line='1312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ndo_set_vf_mac' type-id='bae60bcf' visibility='default' filepath='include/linux/netdevice.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ndo_set_vf_vlan' type-id='699131d0' visibility='default' filepath='include/linux/netdevice.h' line='1322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ndo_set_vf_rate' type-id='7cd466e6' visibility='default' filepath='include/linux/netdevice.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ndo_set_vf_spoofchk' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='ndo_set_vf_trust' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ndo_get_vf_config' type-id='d22f8cbe' visibility='default' filepath='include/linux/netdevice.h' line='1332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ndo_set_vf_link_state' type-id='b54cfa0f' visibility='default' filepath='include/linux/netdevice.h' line='1335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ndo_get_vf_stats' type-id='eee971fd' visibility='default' filepath='include/linux/netdevice.h' line='1337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ndo_set_vf_port' type-id='af60ef81' visibility='default' filepath='include/linux/netdevice.h' line='1341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ndo_get_vf_port' type-id='be55abd8' visibility='default' filepath='include/linux/netdevice.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ndo_set_vf_guid' type-id='0617ad2b' visibility='default' filepath='include/linux/netdevice.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ndo_set_vf_rss_query_en' type-id='0c16aca1' visibility='default' filepath='include/linux/netdevice.h' line='1349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ndo_setup_tc' type-id='06b83346' visibility='default' filepath='include/linux/netdevice.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ndo_rx_flow_steer' type-id='47498e6c' visibility='default' filepath='include/linux/netdevice.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='ndo_add_slave' type-id='031fe454' visibility='default' filepath='include/linux/netdevice.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ndo_del_slave' type-id='ed3019e9' visibility='default' filepath='include/linux/netdevice.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ndo_fix_features' type-id='4a028f44' visibility='default' filepath='include/linux/netdevice.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ndo_set_features' type-id='10dae4c5' visibility='default' filepath='include/linux/netdevice.h' line='1392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ndo_neigh_construct' type-id='92446276' visibility='default' filepath='include/linux/netdevice.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ndo_neigh_destroy' type-id='11e89fb9' visibility='default' filepath='include/linux/netdevice.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ndo_fdb_add' type-id='5ffcd66c' visibility='default' filepath='include/linux/netdevice.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='ndo_fdb_del' type-id='e6032f80' visibility='default' filepath='include/linux/netdevice.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ndo_fdb_dump' type-id='147cd5a7' visibility='default' filepath='include/linux/netdevice.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='ndo_fdb_get' type-id='6537d478' visibility='default' filepath='include/linux/netdevice.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ndo_bridge_setlink' type-id='50756496' visibility='default' filepath='include/linux/netdevice.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='ndo_bridge_getlink' type-id='e78e01a9' visibility='default' filepath='include/linux/netdevice.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ndo_bridge_dellink' type-id='1223555b' visibility='default' filepath='include/linux/netdevice.h' line='1431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='ndo_change_carrier' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ndo_get_phys_port_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ndo_get_port_parent_id' type-id='98252144' visibility='default' filepath='include/linux/netdevice.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ndo_get_phys_port_name' type-id='5139dd84' visibility='default' filepath='include/linux/netdevice.h' line='1440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='ndo_udp_tunnel_add' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ndo_udp_tunnel_del' type-id='a43821b9' visibility='default' filepath='include/linux/netdevice.h' line='1444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='ndo_dfwd_add_station' type-id='e2d7f258' visibility='default' filepath='include/linux/netdevice.h' line='1446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ndo_dfwd_del_station' type-id='5ac7baf4' visibility='default' filepath='include/linux/netdevice.h' line='1448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ndo_set_tx_maxrate' type-id='c1e0b02f' visibility='default' filepath='include/linux/netdevice.h' line='1451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='ndo_get_iflink' type-id='4753b592' visibility='default' filepath='include/linux/netdevice.h' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ndo_change_proto_down' type-id='e36088ec' visibility='default' filepath='include/linux/netdevice.h' line='1455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='ndo_fill_metadata_dst' type-id='2cc5a575' visibility='default' filepath='include/linux/netdevice.h' line='1457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='ndo_set_rx_headroom' type-id='c7c94ce1' visibility='default' filepath='include/linux/netdevice.h' line='1459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='ndo_bpf' type-id='49f84764' visibility='default' filepath='include/linux/netdevice.h' line='1461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ndo_xdp_xmit' type-id='0c7d25ff' visibility='default' filepath='include/linux/netdevice.h' line='1463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ndo_xsk_wakeup' type-id='149f0e1f' visibility='default' filepath='include/linux/netdevice.h' line='1466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndo_get_devlink_port' type-id='cd97030f' visibility='default' filepath='include/linux/netdevice.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='1477' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='netdev_tx_t' type-id='e246a80b' filepath='include/linux/netdevice.h' line='115' column='1' id='6849a88c'/>
+      <enum-decl name='netdev_tx' filepath='include/linux/netdevice.h' line='110' column='1' id='e246a80b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='ifreq' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='231' column='1' id='c1a75286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ifr_ifrn' type-id='96ef15db' 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='95fd560f' visibility='default' filepath='include/uapi/linux/if.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='233' column='1' id='96ef15db'>
+        <data-member access='public'>
+          <var-decl name='ifrn_name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='235' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='238' column='1' id='95fd560f'>
+        <data-member access='public'>
+          <var-decl name='ifru_addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_dstaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_broadaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_netmask' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_hwaddr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/if.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_flags' type-id='a2185560' visibility='default' filepath='include/uapi/linux/if.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_ivalue' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/if.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_mtu' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/if.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_map' type-id='c6fb2ff8' visibility='default' filepath='include/uapi/linux/if.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_slave' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_newname' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/if.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_data' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/if.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ifru_settings' type-id='1cff49be' 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='31' column='1' id='5221b18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_family' type-id='376fda66' visibility='default' filepath='include/linux/socket.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sa_data' type-id='f01a039e' visibility='default' filepath='include/linux/socket.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sa_family_t' type-id='93d679c6' filepath='include/linux/socket.h' line='25' column='1' id='376fda66'/>
+      <typedef-decl name='__kernel_sa_family_t' type-id='8efea9e5' filepath='include/uapi/linux/socket.h' line='10' column='1' id='93d679c6'/>
+      <class-decl name='ifmap' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/if.h' line='194' column='1' id='c6fb2ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_start' type-id='7359adad' 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='7359adad' 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='8efea9e5' 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='002ac4a6' 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='002ac4a6' 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='002ac4a6' 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='1cff49be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' 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='f0981eeb' 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='11418911' visibility='default' filepath='include/uapi/linux/if.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/if.h' line='208' column='1' id='11418911'>
+        <data-member access='public'>
+          <var-decl name='raw_hdlc' type-id='b3ce99dc' visibility='default' filepath='include/uapi/linux/if.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cisco' type-id='0c90c619' visibility='default' filepath='include/uapi/linux/if.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fr' type-id='0fd7b97e' visibility='default' filepath='include/uapi/linux/if.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fr_pvc' type-id='fae5f6fe' visibility='default' filepath='include/uapi/linux/if.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fr_pvc_info' type-id='a5896095' visibility='default' filepath='include/uapi/linux/if.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sync' type-id='85d83b09' visibility='default' filepath='include/uapi/linux/if.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='te1' type-id='08fd2ee7' visibility='default' filepath='include/uapi/linux/if.h' line='218' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='raw_hdlc_proto' type-id='f9167bd9' filepath='include/uapi/linux/hdlc/ioctl.h' line='56' column='1' id='a79adfa3'/>
+      <class-decl name='__anonymous_struct__14' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='a79adfa3' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='53' column='1' id='f9167bd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encoding' type-id='8efea9e5' 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='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cisco_proto' type-id='a30de527' filepath='include/uapi/linux/hdlc/ioctl.h' line='80' column='1' id='36051b76'/>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='36051b76' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='77' column='1' id='a30de527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='f0981eeb' 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='f0981eeb' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='fr_proto' type-id='09d0e305' filepath='include/uapi/linux/hdlc/ioctl.h' line='66' column='1' id='8d64a1ad'/>
+      <class-decl name='__anonymous_struct__16' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='8d64a1ad' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='58' column='1' id='09d0e305'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t391' type-id='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='8efea9e5' 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='8efea9e5' 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='e1f2add0' filepath='include/uapi/linux/hdlc/ioctl.h' line='70' column='1' id='a622177d'/>
+      <class-decl name='__anonymous_struct__17' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='a622177d' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='68' column='1' id='e1f2add0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='f0981eeb' 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='eccf113e' filepath='include/uapi/linux/hdlc/ioctl.h' line='75' column='1' id='26e73b36'/>
+      <class-decl name='__anonymous_struct__18' size-in-bits='160' is-struct='yes' is-anonymous='yes' naming-typedef-id='26e73b36' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='72' column='1' id='eccf113e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlci' type-id='f0981eeb' 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='ac1fa8c0' 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='60cb7ded' filepath='include/uapi/linux/hdlc/ioctl.h' line='44' column='1' id='4d8b71ac'/>
+      <class-decl name='__anonymous_struct__19' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='4d8b71ac' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='40' column='1' id='60cb7ded'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='f0981eeb' 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='f0981eeb' 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='8efea9e5' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='te1_settings' type-id='cf721265' filepath='include/uapi/linux/hdlc/ioctl.h' line='51' column='1' id='f9d018aa'/>
+      <class-decl name='__anonymous_struct__20' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='f9d018aa' visibility='default' filepath='include/uapi/linux/hdlc/ioctl.h' line='46' column='1' id='cf721265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_rate' type-id='f0981eeb' 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='f0981eeb' 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='8efea9e5' 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='f0981eeb' 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='be643f38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='8468004b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vf' type-id='3f1a6b60' 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='7e67d89d' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='84a5c3d4' 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='01e6a0f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='211' column='1' id='89d7cb48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nla_len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='nla_type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netlink.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tc_setup_type' filepath='include/linux/netdevice.h' line='857' column='1' id='b3e12f1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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'/>
+        <enumerator name='TC_SETUP_ROOT_QDISC' value='11'/>
+        <enumerator name='TC_SETUP_QDISC_GRED' value='12'/>
+        <enumerator name='TC_SETUP_QDISC_TAPRIO' value='13'/>
+      </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='852a961e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_msg' type-id='80f4b756' 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='0f2a7ce5' 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='5429fe4a' 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='f9b06939' 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='bef19510'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ndm_family' type-id='8f048e17' 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='8f048e17' 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='d315442e' 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='3158a266' 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='d315442e' 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='8f048e17' 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='8f048e17' visibility='default' filepath='include/uapi/linux/neighbour.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netlink_callback' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='180' column='1' id='d1678a2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netlink.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlh' type-id='390fbe8f' visibility='default' filepath='include/linux/netlink.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dump' type-id='32a663ca' visibility='default' filepath='include/linux/netlink.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netlink.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/netlink.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/linux/netlink.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='min_dump_alloc' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='strict_check' type-id='b50a4934' visibility='default' filepath='include/linux/netlink.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='answer_flags' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prev_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='4ce2708e' visibility='default' filepath='include/linux/netlink.h' line='195' 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='5b37df4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nlmsg_len' type-id='3f1a6b60' 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='d315442e' 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='d315442e' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/netlink.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/netlink.h' line='195' column='1' id='4ce2708e'>
+        <data-member access='public'>
+          <var-decl name='ctx' type-id='6aa9aca0' visibility='default' filepath='include/linux/netlink.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='args' type-id='613ff906' visibility='default' filepath='include/linux/netlink.h' line='201' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='netdev_phys_item_id' size-in-bits='264' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='841' column='1' id='14a30316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='843' 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='899' column='1' id='0360a184'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command' type-id='fa64b30d' visibility='default' filepath='include/linux/netdevice.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='dd64c8e8' visibility='default' filepath='include/linux/netdevice.h' line='901' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bpf_netdev_command' filepath='include/linux/netdevice.h' line='877' column='1' id='fa64b30d'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_MAP_ALLOC' value='4'/>
+        <enumerator name='BPF_OFFLOAD_MAP_FREE' value='5'/>
+        <enumerator name='XDP_SETUP_XSK_UMEM' value='6'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='901' column='1' id='dd64c8e8'>
+        <data-member access='public'>
+          <var-decl name='' type-id='33bba89f' visibility='default' filepath='include/linux/netdevice.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='0ed9a4e9' visibility='default' filepath='include/linux/netdevice.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='f7a2361f' visibility='default' filepath='include/linux/netdevice.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='xsk' type-id='40a847cb' visibility='default' filepath='include/linux/netdevice.h' line='922' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='903' column='1' id='33bba89f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/netdevice.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/linux/netdevice.h' line='906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='909' column='1' id='0ed9a4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog_id' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='prog_flags' type-id='19c2251e' visibility='default' filepath='include/linux/netdevice.h' line='912' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='915' column='1' id='f7a2361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offmap' type-id='366d2695' visibility='default' filepath='include/linux/netdevice.h' line='916' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_offloaded_map' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='157' column='1' id='15ac14d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='9e4acc7a' visibility='default' filepath='include/linux/bpf.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='netdev' type-id='68a2d05b' visibility='default' filepath='include/linux/bpf.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dev_ops' type-id='2ce97450' visibility='default' filepath='include/linux/bpf.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='offloads' type-id='72f469ec' visibility='default' filepath='include/linux/bpf.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_map_dev_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='145' column='1' id='1779ab9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_get_next_key' type-id='ef2b6bf5' visibility='default' filepath='include/linux/bpf.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_lookup_elem' type-id='ef2b6bf5' visibility='default' filepath='include/linux/bpf.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_update_elem' type-id='bedcc9eb' visibility='default' filepath='include/linux/bpf.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_delete_elem' type-id='e24c55c9' visibility='default' filepath='include/linux/bpf.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='154' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='919' column='1' id='40a847cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_id' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='921' 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='21f83f61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' 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='1dc6a898' 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='1dc6a898' 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='1dc6a898' 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='1182636e' 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='68a2d05b' 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='1182636e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='19c2251e' 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='19c2251e' visibility='default' filepath='include/net/xdp.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ops' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='326' column='1' id='8a3b11ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_drvinfo' type-id='343c05fa' visibility='default' filepath='include/linux/ethtool.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_regs_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_regs' type-id='345f0501' visibility='default' filepath='include/linux/ethtool.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_wol' type-id='afcbd268' visibility='default' filepath='include/linux/ethtool.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_wol' type-id='5a92dd37' visibility='default' filepath='include/linux/ethtool.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_msglevel' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_msglevel' type-id='9038f441' visibility='default' filepath='include/linux/ethtool.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nway_reset' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_link' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_eeprom_len' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_coalesce' type-id='5a8326dc' visibility='default' filepath='include/linux/ethtool.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_ringparam' type-id='89b5be7f' visibility='default' filepath='include/linux/ethtool.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ringparam' type-id='807c842c' visibility='default' filepath='include/linux/ethtool.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_pauseparam' type-id='f45e1d71' visibility='default' filepath='include/linux/ethtool.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_pauseparam' type-id='d57a1ee4' visibility='default' filepath='include/linux/ethtool.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='self_test' type-id='4acd4951' visibility='default' filepath='include/linux/ethtool.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='get_strings' type-id='27653c4c' visibility='default' filepath='include/linux/ethtool.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_phys_id' type-id='e0c03654' visibility='default' filepath='include/linux/ethtool.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_ethtool_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='begin' type-id='2555df59' visibility='default' filepath='include/linux/ethtool.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='complete' type-id='548eee3a' visibility='default' filepath='include/linux/ethtool.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_priv_flags' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_priv_flags' type-id='0f8df030' visibility='default' filepath='include/linux/ethtool.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_sset_count' type-id='d6762aa0' visibility='default' filepath='include/linux/ethtool.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='get_rxnfc' type-id='d67468b4' visibility='default' filepath='include/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rxnfc' type-id='fece2110' visibility='default' filepath='include/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='flash_device' type-id='d91e8ea3' visibility='default' filepath='include/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='reset' type-id='4814c3f9' visibility='default' filepath='include/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='get_rxfh_key_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_rxfh_indir_size' type-id='92d86499' visibility='default' filepath='include/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='get_rxfh' type-id='de5dab7b' visibility='default' filepath='include/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='set_rxfh' type-id='13680d10' visibility='default' filepath='include/linux/ethtool.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='get_rxfh_context' type-id='64efa47a' visibility='default' filepath='include/linux/ethtool.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_rxfh_context' type-id='5f0d472d' visibility='default' filepath='include/linux/ethtool.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='get_channels' type-id='74287ea0' visibility='default' filepath='include/linux/ethtool.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_channels' type-id='b60e7255' visibility='default' filepath='include/linux/ethtool.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='get_dump_flag' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='get_dump_data' type-id='b7ee351b' visibility='default' filepath='include/linux/ethtool.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_dump' type-id='351add77' visibility='default' filepath='include/linux/ethtool.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='get_ts_info' type-id='88f4e837' visibility='default' filepath='include/linux/ethtool.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='get_module_info' type-id='20974125' visibility='default' filepath='include/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='get_module_eeprom' type-id='67a2c0c8' visibility='default' filepath='include/linux/ethtool.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='get_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='set_eee' type-id='d2be5b16' visibility='default' filepath='include/linux/ethtool.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_tunable' type-id='a3c69469' visibility='default' filepath='include/linux/ethtool.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set_per_queue_coalesce' type-id='6f2bf2e3' visibility='default' filepath='include/linux/ethtool.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='get_link_ksettings' type-id='83359c30' visibility='default' filepath='include/linux/ethtool.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_link_ksettings' type-id='5a3c102b' visibility='default' filepath='include/linux/ethtool.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='set_fecparam' type-id='bda101d4' visibility='default' filepath='include/linux/ethtool.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='get_ethtool_phy_stats' type-id='6c781266' visibility='default' filepath='include/linux/ethtool.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ethtool.h' line='412' 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='177' column='1' id='b32a1711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='erom_version' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='reserved2' type-id='ac151b64' visibility='default' filepath='include/uapi/linux/ethtool.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='n_priv_flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='n_stats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='testinfo_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='eedump_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='regdump_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='189' 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='310' column='1' id='a96e1a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='314' 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='203' column='1' id='c3b8a83b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wolopts' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sopass' type-id='c60dc9f2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='207' 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='335' column='1' id='7dc7ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magic' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='340' 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='462' column='1' id='d1d61218'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_max_coalesced_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_coalesce_usecs_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_max_coalesced_frames_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_max_coalesced_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_coalesce_usecs_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_max_coalesced_frames_irq' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='stats_block_coalesce_usecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='use_adaptive_rx_coalesce' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='use_adaptive_tx_coalesce' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pkt_rate_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rx_coalesce_usecs_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_max_coalesced_frames_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tx_coalesce_usecs_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tx_max_coalesced_frames_low' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pkt_rate_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rx_coalesce_usecs_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_max_coalesced_frames_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_coalesce_usecs_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_max_coalesced_frames_high' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rate_sample_interval' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='485' 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='513' column='1' id='555033d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mini_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rx_jumbo_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_max_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_mini_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_jumbo_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='522' 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='575' column='1' id='e38bdef8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='autoneg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_pause' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_pause' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='579' 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='683' column='1' id='9b087887'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='52cd3f2c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='688' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ethtool_phys_id_state' filepath='include/linux/ethtool.h' line='55' column='1' id='cb317f38'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='702' column='1' id='c8d63c6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_stats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='52cd3f2c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='705' 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='1001' column='1' id='51e825b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flow_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs' type-id='a8ce468c' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='9567c730' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='rule_locs' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1010' 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='905' column='1' id='a8ce468c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flow_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='h_u' type-id='b79b5da2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_ext' type-id='abeda0b3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='m_u' type-id='b79b5da2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='m_ext' type-id='abeda0b3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ring_cookie' type-id='d3130597' visibility='default' filepath='include/uapi/linux/ethtool.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='location' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='912' 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='852' column='1' id='b79b5da2'>
+        <data-member access='public'>
+          <var-decl name='tcp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sctp_ip4_spec' type-id='51bf1175' visibility='default' filepath='include/uapi/linux/ethtool.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ah_ip4_spec' type-id='b6a9d1ee' visibility='default' filepath='include/uapi/linux/ethtool.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='esp_ip4_spec' type-id='b6a9d1ee' visibility='default' filepath='include/uapi/linux/ethtool.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='usr_ip4_spec' type-id='3b9817d8' visibility='default' filepath='include/uapi/linux/ethtool.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sctp_ip6_spec' type-id='cdd8eaf7' visibility='default' filepath='include/uapi/linux/ethtool.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ah_ip6_spec' type-id='c324ec54' visibility='default' filepath='include/uapi/linux/ethtool.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='esp_ip6_spec' type-id='c324ec54' visibility='default' filepath='include/uapi/linux/ethtool.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='usr_ip6_spec' type-id='fbb12f62' visibility='default' filepath='include/uapi/linux/ethtool.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ether_spec' type-id='1c00b436' visibility='default' filepath='include/uapi/linux/ethtool.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hdata' type-id='a0412eab' visibility='default' filepath='include/uapi/linux/ethtool.h' line='866' 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='758' column='1' id='51bf1175'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='psrc' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pdst' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='763' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_ah_espip4_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='775' column='1' id='b6a9d1ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='779' 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='793' column='1' id='3b9817d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip4src' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ip4dst' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='l4_4_bytes' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='ip_ver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='799' 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='812' column='1' id='cdd8eaf7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='psrc' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='pdst' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='817' 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='829' column='1' id='c324ec54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='833' 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='844' column='1' id='fbb12f62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ip6src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ip6dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='l4_4_bytes' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ethtool.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='l4_proto' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='849' 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='163' column='1' id='1c00b436'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='h_dest' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/if_ether.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='h_source' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/if_ether.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='h_proto' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/if_ether.h' line='166' 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='880' column='1' id='abeda0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='h_dest' type-id='4cfa781a' visibility='default' filepath='include/uapi/linux/ethtool.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan_etype' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vlan_tci' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ethtool.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data' type-id='f41331a9' visibility='default' filepath='include/uapi/linux/ethtool.h' line='885' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1006' column='1' id='9567c730'>
+        <data-member access='public'>
+          <var-decl name='rule_cnt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rss_context' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1008' 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='1130' column='1' id='1f90162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='region' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='e3204322' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1133' 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='541' column='1' id='ed7ee6ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_rx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_tx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_other' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_combined' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rx_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='other_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='combined_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='550' 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='1150' column='1' id='2d064c05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flag' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1155' 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='1230' column='1' id='91f77fa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='so_timestamping' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phc_index' type-id='3158a266' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_types' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rx_filters' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1237' 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='382' column='1' id='5e7de2a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eeprom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/ethtool.h' line='386' 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='360' column='1' id='d666fa80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertised' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lp_advertised' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eee_active' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='eee_enabled' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_lpi_enabled' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_lpi_timer' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/ethtool.h' line='369' 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='244' column='1' id='89f717fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='baf98fd3' visibility='default' filepath='include/uapi/linux/ethtool.h' line='249' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ethtool_link_ksettings' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ethtool.h' line='109' column='1' id='1e1b3494'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='7aeccae5' visibility='default' filepath='include/linux/ethtool.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_modes' type-id='28334c43' visibility='default' filepath='include/linux/ethtool.h' line='115' 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='1870' column='1' id='7aeccae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='speed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duplex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='port' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='phy_address' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='autoneg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mdio_support' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='eth_tp_mdix' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='link_mode_masks_nwords' type-id='8af57d41' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transceiver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='reserved1' type-id='c216126b' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_mode_masks' type-id='d5016f6f' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1884' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ethtool.h' line='111' column='1' id='28334c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lp_advertising' type-id='f05e8e77' visibility='default' filepath='include/linux/ethtool.h' line='114' 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='1302' column='1' id='d0cace14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active_fec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='1307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='header_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='266' column='1' id='f6e7855b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='e82aa0fb' visibility='default' filepath='include/linux/netdevice.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parse' type-id='35b37061' visibility='default' filepath='include/linux/netdevice.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cache' type-id='464a4247' visibility='default' filepath='include/linux/netdevice.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cache_update' type-id='b713d448' visibility='default' filepath='include/linux/netdevice.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate' type-id='5a60e638' visibility='default' filepath='include/linux/netdevice.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parse_protocol' type-id='98c4c95a' visibility='default' filepath='include/linux/netdevice.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='279' 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='240' column='1' id='0db936dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hh_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hh_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/netdevice.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hh_data' type-id='d2b016f4' visibility='default' filepath='include/linux/netdevice.h' line='250' 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='220' column='1' id='44a1ec32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_rx_queue' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='752' column='1' id='f12ac4ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rps_map' type-id='f30dbff5' visibility='default' filepath='include/linux/netdevice.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps_flow_table' type-id='deff2378' visibility='default' filepath='include/linux/netdevice.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='xdp_rxq' type-id='eb0d6f26' visibility='default' filepath='include/linux/netdevice.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='767' 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='678' column='1' id='6f8d5f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpus' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='681' 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='700' column='1' id='aca51d4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flows' type-id='11d66d65' visibility='default' filepath='include/linux/netdevice.h' line='703' 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='690' column='1' id='b65a052d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='filter' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_qtail' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='693' 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='eb0d6f26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='19c2251e' 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='19c2251e' 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='1182636e' visibility='default' filepath='include/net/xdp.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rx_handler_func_t' type-id='77c9a241' filepath='include/linux/netdevice.h' line='432' column='1' id='9193647b'/>
+      <typedef-decl name='rx_handler_result_t' type-id='aee6711b' filepath='include/linux/netdevice.h' line='431' column='1' id='a110acfc'/>
+      <enum-decl name='rx_handler_result' filepath='include/linux/netdevice.h' line='425' column='1' id='aee6711b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1307' column='1' id='b10d582f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_list' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='1311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='401' column='1' id='17992e3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='root' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/sch_generic.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prio' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='deleting' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy_ht_node' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='424' 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='324' column='1' id='68d8e236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e686dd16' visibility='default' filepath='include/net/sch_generic.h' line='325' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='325' column='1' id='e686dd16'>
+        <data-member access='public'>
+          <var-decl name='' type-id='a2699296' visibility='default' filepath='include/net/sch_generic.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='goto_tp' type-id='122b71ba' visibility='default' filepath='include/net/sch_generic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='c2617f12' visibility='default' filepath='include/net/sch_generic.h' line='333' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__26' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='326' column='1' id='a2699296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='7359adad' visibility='default' filepath='include/net/sch_generic.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__27' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='333' column='1' id='c2617f12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ingress' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='335' 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='62' column='1' id='a212a715'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drops' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='requeues' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_proto_ops' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='342' column='1' id='bd4e4ac8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='classify' type-id='624375a3' visibility='default' filepath='include/net/sch_generic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='init' type-id='98f35cbb' visibility='default' filepath='include/net/sch_generic.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destroy' type-id='59f6a07a' visibility='default' filepath='include/net/sch_generic.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get' type-id='94c16fa5' visibility='default' filepath='include/net/sch_generic.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='change' type-id='6266601d' visibility='default' filepath='include/net/sch_generic.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42c362d1' visibility='default' filepath='include/net/sch_generic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='delete_empty' type-id='a4cbdcd9' visibility='default' filepath='include/net/sch_generic.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='4ffa0523' visibility='default' filepath='include/net/sch_generic.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reoffload' type-id='a852a9de' visibility='default' filepath='include/net/sch_generic.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hw_add' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_del' type-id='825ef190' visibility='default' filepath='include/net/sch_generic.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bind_class' type-id='f590d4d9' visibility='default' filepath='include/net/sch_generic.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tmplt_create' type-id='938abf68' visibility='default' filepath='include/net/sch_generic.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tmplt_destroy' type-id='b7f9d8e6' visibility='default' filepath='include/net/sch_generic.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dump' type-id='69b48c13' visibility='default' filepath='include/net/sch_generic.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tmplt_dump' type-id='d18dbee4' visibility='default' filepath='include/net/sch_generic.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='390' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lockdep_map' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='472' column='1' id='d34a605e'/>
+      <class-decl name='rhash_lock_head' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='47' column='1' id='c0065bf0'/>
+      <typedef-decl name='flow_setup_cb_t' type-id='1322ddb6' filepath='include/net/flow_offload.h' line='300' column='1' id='11d6bd91'/>
+      <class-decl name='tcf_chain' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='439' column='1' id='1546c604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter_chain_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='filter_chain' type-id='6dca061b' visibility='default' filepath='include/net/sch_generic.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='block' type-id='13ef4686' visibility='default' filepath='include/net/sch_generic.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='action_refcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='explicitly_created' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='616'>
+          <var-decl name='flushing' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tmplt_ops' type-id='e12279e7' visibility='default' filepath='include/net/sch_generic.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tmplt_priv' type-id='eaa32e2f' visibility='default' filepath='include/net/sch_generic.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='452' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_block' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='455' column='1' id='16c50f80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/sch_generic.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='q' type-id='ee406209' visibility='default' filepath='include/net/sch_generic.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cb_lock' type-id='f19fdb93' visibility='default' filepath='include/net/sch_generic.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flow_block' type-id='bc545b43' visibility='default' filepath='include/net/sch_generic.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='keep_dst' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='offloadcnt' type-id='49178f86' visibility='default' filepath='include/net/sch_generic.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nooffloaddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='lockeddevcnt' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='chain0' type-id='894533b3' visibility='default' filepath='include/net/sch_generic.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proto_destroy_ht' type-id='64f4baeb' visibility='default' filepath='include/net/sch_generic.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='proto_destroy_lock' type-id='925167dc' visibility='default' filepath='include/net/sch_generic.h' line='479' 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='59' column='1' id='85c22421'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='limit' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='aa7f9205' visibility='default' filepath='include/net/sch_generic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stab' type-id='2e2106be' visibility='default' filepath='include/net/sch_generic.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/net/sch_generic.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='parent' type-id='19c2251e' visibility='default' filepath='include/net/sch_generic.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev_queue' type-id='35b28c4f' visibility='default' filepath='include/net/sch_generic.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/sch_generic.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/sch_generic.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/sch_generic.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='padded' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/sch_generic.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='gso_skb' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='q' type-id='d34f2f01' visibility='default' filepath='include/net/sch_generic.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/sch_generic.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='running' type-id='e14c3b11' visibility='default' filepath='include/net/sch_generic.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='qstats' type-id='a212a715' visibility='default' filepath='include/net/sch_generic.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/net/sch_generic.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='next_sched' type-id='ee406209' visibility='default' filepath='include/net/sch_generic.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='skb_bad_txq' type-id='e61c85d0' visibility='default' filepath='include/net/sch_generic.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='busylock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='seqlock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='empty' type-id='b50a4934' visibility='default' filepath='include/net/sch_generic.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_ops' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='285' column='1' id='47692c1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d6369c88' visibility='default' filepath='include/net/sch_generic.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cl_ops' type-id='bb5ee79c' visibility='default' filepath='include/net/sch_generic.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/net/sch_generic.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='static_flags' type-id='f0981eeb' visibility='default' filepath='include/net/sch_generic.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='enqueue' type-id='3d6e005b' visibility='default' filepath='include/net/sch_generic.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peek' type-id='3d95b5f6' visibility='default' filepath='include/net/sch_generic.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reset' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='destroy' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='change' type-id='a84eb241' visibility='default' filepath='include/net/sch_generic.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='attach' type-id='5b4e5af0' visibility='default' filepath='include/net/sch_generic.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='change_tx_queue_len' type-id='a959128b' visibility='default' filepath='include/net/sch_generic.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dump' type-id='612567ad' visibility='default' filepath='include/net/sch_generic.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dump_stats' type-id='edfa28b2' visibility='default' filepath='include/net/sch_generic.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ingress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='egress_block_set' type-id='03862e5f' visibility='default' filepath='include/net/sch_generic.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ingress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='egress_block_get' type-id='c021fd31' visibility='default' filepath='include/net/sch_generic.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sch_generic.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Qdisc_class_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/sch_generic.h' line='243' column='1' id='d9ceb659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' 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='select_queue' type-id='98ff7360' visibility='default' filepath='include/net/sch_generic.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='graft' type-id='19bc34e4' visibility='default' filepath='include/net/sch_generic.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='c4d81be6' visibility='default' filepath='include/net/sch_generic.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qlen_notify' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='find' type-id='b95e1b8d' visibility='default' filepath='include/net/sch_generic.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='change' type-id='c0073bf3' visibility='default' filepath='include/net/sch_generic.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='delete' type-id='d60d5a0f' visibility='default' filepath='include/net/sch_generic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='walk' type-id='154ec6df' visibility='default' filepath='include/net/sch_generic.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcf_block' type-id='da0b22b2' visibility='default' filepath='include/net/sch_generic.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bind_tcf' type-id='4c592849' visibility='default' filepath='include/net/sch_generic.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unbind_tcf' type-id='0fb373c0' visibility='default' filepath='include/net/sch_generic.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dump' type-id='3c31c59b' visibility='default' filepath='include/net/sch_generic.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dump_stats' type-id='6313cef0' visibility='default' filepath='include/net/sch_generic.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sch_generic.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netdev_queue' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='600' column='1' id='49a7c5a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qdisc_sleeping' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/netdevice.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tx_maxrate' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='trans_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sb_dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='umem' type-id='577ede06' visibility='default' filepath='include/linux/netdevice.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_xmit_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='xmit_lock_owner' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='trans_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dql' type-id='471cb386' visibility='default' filepath='include/linux/netdevice.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='644' 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='471cb386'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_queued' type-id='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='7359adad' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='560' column='1' id='22e47c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcm_family' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tcm__pad1' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tcm__pad2' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcm_ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tcm_handle' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tcm_parent' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcm_info' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='571' 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='65baad60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' 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='0fbf3cfd' 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='6fcaf91e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='eaa32e2f' 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='95e97e5e' 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='7bef637c' 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='34' column='1' id='7bef637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='drops' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='overlimits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='backlog' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='43' 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='43' column='1' id='bd1d1d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sch_generic.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='szopts' type-id='c7a2cf9f' visibility='default' filepath='include/net/sch_generic.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/net/sch_generic.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='data' type-id='0f300383' visibility='default' filepath='include/net/sch_generic.h' line='48' 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='102' column='1' id='c7a2cf9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cell_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='size_log' type-id='002ac4a6' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cell_align' type-id='a2185560' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='overhead' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='linklayer' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mpu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tsize' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/pkt_sched.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gnet_stats_basic_cpu' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/gen_stats.h' line='10' column='1' id='c026ae59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstats' type-id='1f9b1a31' 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='e4d85780' 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='29' column='1' id='1f9b1a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/gen_stats.h' line='31' 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='52' column='1' id='d34f2f01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/sch_generic.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/net/sch_generic.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/sch_generic.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='flow_block' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/flow_offload.h' line='281' column='1' id='bc545b43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/net/flow_offload.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__28' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sch_generic.h' line='473' column='1' id='894533b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='45305972' visibility='default' filepath='include/net/sch_generic.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_chain_list' type-id='72f469ec' visibility='default' filepath='include/net/sch_generic.h' line='475' 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='798' column='1' id='4edc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_map' type-id='a0955e2b' visibility='default' filepath='include/linux/netdevice.h' line='800' 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='785' column='1' id='279bdcdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='alloc_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/netdevice.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='queues' type-id='0f300383' visibility='default' filepath='include/linux/netdevice.h' line='789' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/netdevice.h' line='2037' column='1' id='08f5ca17'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2047' column='1' id='08f5ca18'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RTNL_LINK_INITIALIZED' value='0'/>
+        <enumerator name='RTNL_LINK_INITIALIZING' value='1'/>
+      </enum-decl>
+      <typedef-decl name='possible_net_t' type-id='0a0aec0a' filepath='include/net/net_namespace.h' line='315' column='1' id='c9df1e6c'/>
+      <class-decl name='__anonymous_struct__29' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='c9df1e6c' visibility='default' filepath='include/net/net_namespace.h' line='311' column='1' id='0a0aec0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/net_namespace.h' line='313' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='netdev_ml_priv_type' filepath='include/linux/netdevice.h' line='1592' column='1' id='9c6bf017'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ML_PRIV_NONE' value='0'/>
+        <enumerator name='ML_PRIV_CAN' value='1'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='2065' column='1' id='ca29cb68'>
+        <data-member access='public'>
+          <var-decl name='lstats' type-id='a42934eb' visibility='default' filepath='include/linux/netdevice.h' line='2066' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tstats' type-id='90cd86e5' visibility='default' filepath='include/linux/netdevice.h' line='2067' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dstats' type-id='f59f5033' visibility='default' filepath='include/linux/netdevice.h' line='2068' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pcpu_lstats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2477' column='1' id='b71b307b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2480' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcpu_sw_netstats' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2469' column='1' id='101eeec5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_packets' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/netdevice.h' line='2474' 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='60' column='1' id='6696ef79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/rtnetlink.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='80f4b756' visibility='default' filepath='include/net/rtnetlink.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv_size' type-id='b59d7dce' visibility='default' filepath='include/net/rtnetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='548eee3a' visibility='default' filepath='include/net/rtnetlink.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='netns_refund' type-id='b50a4934' visibility='default' filepath='include/net/rtnetlink.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='validate' type-id='69d3de54' visibility='default' filepath='include/net/rtnetlink.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='newlink' type-id='234d802d' visibility='default' filepath='include/net/rtnetlink.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='changelink' type-id='66b76584' visibility='default' filepath='include/net/rtnetlink.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dellink' type-id='3778bdcd' visibility='default' filepath='include/net/rtnetlink.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill_info' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_xstats_size' type-id='c65c1382' visibility='default' filepath='include/net/rtnetlink.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fill_xstats' type-id='922133c6' visibility='default' filepath='include/net/rtnetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_num_tx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_num_rx_queues' type-id='0838a534' visibility='default' filepath='include/net/rtnetlink.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='slave_maxtype' type-id='f0981eeb' visibility='default' filepath='include/net/rtnetlink.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='slave_policy' type-id='109cdb66' visibility='default' filepath='include/net/rtnetlink.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='slave_changelink' type-id='a6c912f4' visibility='default' filepath='include/net/rtnetlink.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_slave_size' type-id='c297924f' visibility='default' filepath='include/net/rtnetlink.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fill_slave_info' type-id='f3e878cb' visibility='default' filepath='include/net/rtnetlink.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_link_net' type-id='13b49faa' visibility='default' filepath='include/net/rtnetlink.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_linkxstats_size' type-id='d3210449' visibility='default' filepath='include/net/rtnetlink.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fill_linkxstats' type-id='c11c2e76' visibility='default' filepath='include/net/rtnetlink.h' line='112' 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='291' column='1' id='ca7a1741'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='validation_type' type-id='f9b06939' visibility='default' filepath='include/net/netlink.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='4a3999ba' visibility='default' filepath='include/net/netlink.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='295' column='1' id='4a3999ba'>
+        <data-member access='public'>
+          <var-decl name='validation_data' type-id='eaa32e2f' visibility='default' filepath='include/net/netlink.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='46901745' visibility='default' filepath='include/net/netlink.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='validate' type-id='9c9480f6' visibility='default' filepath='include/net/netlink.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='strict_start_type' type-id='1dc6a898' visibility='default' filepath='include/net/netlink.h' line='319' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netlink.h' line='297' column='1' id='46901745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max' type-id='9b7e9486' visibility='default' filepath='include/net/netlink.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s16' type-id='b55def60' filepath='include/asm-generic/int-ll64.h' line='18' column='1' id='9b7e9486'/>
+      <class-decl name='netdev_tc_txq' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='814' column='1' id='f1e1eb79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='offset' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='816' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_func_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3603' column='1' id='8a1373a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_line_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/bpf.h' line='3611' column='1' id='88565f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_name_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line_off' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='line_col' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='3615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='370' column='1' id='7af446cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nsecs' type-id='91ce1af9' visibility='default' filepath='include/linux/bpf.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/linux/bpf.h' line='373' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/bpf.h' line='428' column='1' id='b597c0fa'>
+        <data-member access='public'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='430' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sock_fprog_kern' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='524' column='1' id='f29d9605'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='e1ea11f6' visibility='default' filepath='include/linux/filter.h' line='526' 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='f588f6e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='d315442e' 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='8f048e17' 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='8f048e17' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/filter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' is-anonymous='yes' visibility='default' filepath='include/linux/filter.h' line='562' column='1' id='fe772793'>
+        <data-member access='public'>
+          <var-decl name='insns' type-id='4967766c' visibility='default' filepath='include/linux/filter.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='insnsi' type-id='b50399da' visibility='default' filepath='include/linux/filter.h' line='564' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='85c22421' size-in-bits='64' id='ee406209'/>
+      <pointer-type-def type-id='77780344' size-in-bits='64' id='c4d81be6'/>
+      <pointer-type-def type-id='ee406209' size-in-bits='64' id='325a7d19'/>
+      <pointer-type-def type-id='47692c1a' size-in-bits='64' id='d6369c88'/>
+      <pointer-type-def type-id='8eb8eec2' size-in-bits='64' id='231422bf'/>
+      <pointer-type-def type-id='8a1373a3' size-in-bits='64' id='368d43d3'/>
+      <pointer-type-def type-id='8c2bf2b2' size-in-bits='64' id='7fe42640'/>
+      <pointer-type-def type-id='88565f1f' size-in-bits='64' id='2fcb9b17'/>
+      <pointer-type-def type-id='9e4acc7a' size-in-bits='64' id='00ee50b8'/>
+      <pointer-type-def type-id='732df9b3' size-in-bits='64' id='0f1b0147'/>
+      <pointer-type-def type-id='00ee50b8' size-in-bits='64' id='0928d5d6'/>
+      <pointer-type-def type-id='22474385' size-in-bits='64' id='d079c835'/>
+      <pointer-type-def type-id='15ac14d5' size-in-bits='64' id='366d2695'/>
+      <pointer-type-def type-id='bdcee7ae' size-in-bits='64' id='50b674cc'/>
+      <pointer-type-def type-id='09d9fab9' size-in-bits='64' id='1e6beae1'/>
+      <pointer-type-def type-id='eef53362' size-in-bits='64' id='11f19dd0'/>
+      <pointer-type-def type-id='7af446cc' size-in-bits='64' id='fbf2ba3a'/>
+      <pointer-type-def type-id='dccc7677' size-in-bits='64' id='a469220f'/>
+      <pointer-type-def type-id='36051b76' size-in-bits='64' id='0c90c619'/>
+      <qualified-type-def type-id='d9ceb659' const='yes' id='170bab5e'/>
+      <pointer-type-def type-id='170bab5e' size-in-bits='64' id='bb5ee79c'/>
+      <qualified-type-def type-id='47692c1a' const='yes' id='2212bd2d'/>
+      <pointer-type-def type-id='2212bd2d' size-in-bits='64' id='aa7f9205'/>
+      <qualified-type-def type-id='8eb8eec2' const='yes' id='326f37e2'/>
+      <pointer-type-def type-id='326f37e2' size-in-bits='64' id='2d14cfd8'/>
+      <qualified-type-def type-id='8c2bf2b2' const='yes' id='cfd499ab'/>
+      <pointer-type-def type-id='cfd499ab' size-in-bits='64' id='acada613'/>
+      <qualified-type-def type-id='9e4acc7a' const='yes' id='9fda12c1'/>
+      <pointer-type-def type-id='9fda12c1' size-in-bits='64' id='8f4bc7f1'/>
+      <qualified-type-def type-id='1779ab9d' const='yes' id='a4feac5a'/>
+      <pointer-type-def type-id='a4feac5a' size-in-bits='64' id='2ce97450'/>
+      <qualified-type-def type-id='90cdb889' const='yes' id='4e65adfa'/>
+      <pointer-type-def type-id='4e65adfa' size-in-bits='64' id='3a109e70'/>
+      <qualified-type-def type-id='facd5338' const='yes' id='728100fd'/>
+      <pointer-type-def type-id='728100fd' size-in-bits='64' id='18145275'/>
+      <qualified-type-def type-id='9a1fed7b' const='yes' id='b9a01bd6'/>
+      <pointer-type-def type-id='b9a01bd6' size-in-bits='64' id='330c0db4'/>
+      <qualified-type-def type-id='dccc7677' const='yes' id='f3cb01e4'/>
+      <pointer-type-def type-id='f3cb01e4' size-in-bits='64' id='9693d74a'/>
+      <qualified-type-def type-id='5f6b1830' const='yes' id='82a21fa9'/>
+      <pointer-type-def type-id='82a21fa9' size-in-bits='64' id='28379b39'/>
+      <qualified-type-def type-id='1e1b3494' const='yes' id='d09d6361'/>
+      <pointer-type-def type-id='d09d6361' size-in-bits='64' id='b2c34f11'/>
+      <qualified-type-def type-id='8a3b11ed' const='yes' id='b56a1102'/>
+      <pointer-type-def type-id='b56a1102' size-in-bits='64' id='bdf901f8'/>
+      <qualified-type-def type-id='89f717fe' const='yes' id='fe943e01'/>
+      <pointer-type-def type-id='fe943e01' size-in-bits='64' id='ee5dddb1'/>
+      <qualified-type-def type-id='f6e7855b' const='yes' id='60407282'/>
+      <pointer-type-def type-id='60407282' size-in-bits='64' id='2d747e78'/>
+      <qualified-type-def type-id='9218f3f6' const='yes' id='12cfd48b'/>
+      <pointer-type-def type-id='12cfd48b' size-in-bits='64' id='3e2bb973'/>
+      <qualified-type-def type-id='88ef330b' const='yes' id='99cf04a8'/>
+      <pointer-type-def type-id='99cf04a8' size-in-bits='64' id='a2e418a6'/>
+      <qualified-type-def type-id='da0e76a0' const='yes' id='e5d19dc7'/>
+      <pointer-type-def type-id='e5d19dc7' size-in-bits='64' id='b5fb9c17'/>
+      <qualified-type-def type-id='5a9929eb' const='yes' id='1d8cf482'/>
+      <pointer-type-def type-id='1d8cf482' size-in-bits='64' id='2ce52478'/>
+      <qualified-type-def type-id='ba44c7d8' const='yes' id='68c47b91'/>
+      <pointer-type-def type-id='68c47b91' size-in-bits='64' id='a84ec761'/>
+      <qualified-type-def type-id='ca7a1741' const='yes' id='8967eee8'/>
+      <pointer-type-def type-id='8967eee8' size-in-bits='64' id='109cdb66'/>
+      <qualified-type-def type-id='89d7cb48' const='yes' id='fc72728d'/>
+      <pointer-type-def type-id='fc72728d' size-in-bits='64' id='0f2a7ce5'/>
+      <qualified-type-def type-id='5b37df4a' const='yes' id='754a5cbf'/>
+      <pointer-type-def type-id='754a5cbf' size-in-bits='64' id='390fbe8f'/>
+      <qualified-type-def type-id='6696ef79' const='yes' id='ab23f61a'/>
+      <pointer-type-def type-id='ab23f61a' size-in-bits='64' id='999c8d90'/>
+      <qualified-type-def type-id='ae8bfcdd' const='yes' id='599ce02a'/>
+      <pointer-type-def type-id='599ce02a' size-in-bits='64' id='11f4a000'/>
+      <qualified-type-def type-id='17992e3b' const='yes' id='59db43b4'/>
+      <pointer-type-def type-id='59db43b4' size-in-bits='64' id='122b71ba'/>
+      <qualified-type-def type-id='bd4e4ac8' const='yes' id='94052af7'/>
+      <pointer-type-def type-id='94052af7' size-in-bits='64' id='e12279e7'/>
+      <qualified-type-def type-id='19c2251e' const='yes' id='51bb592e'/>
+      <pointer-type-def type-id='51bb592e' size-in-bits='64' id='aded214c'/>
+      <qualified-type-def type-id='f9b06939' const='yes' id='19272f09'/>
+      <pointer-type-def type-id='19272f09' size-in-bits='64' id='bbaf3419'/>
+      <pointer-type-def type-id='e09a048e' size-in-bits='64' id='52baee64'/>
+      <pointer-type-def type-id='ddd212e6' size-in-bits='64' id='d81cf24c'/>
+      <pointer-type-def type-id='b62ee7e2' size-in-bits='64' id='f41a0030'/>
+      <pointer-type-def type-id='c435a5bb' size-in-bits='64' id='cd97030f'/>
+      <pointer-type-def type-id='ed7ee6ab' size-in-bits='64' id='7f9b4c1b'/>
+      <pointer-type-def type-id='d1d61218' size-in-bits='64' id='6db6a1be'/>
+      <pointer-type-def type-id='b32a1711' size-in-bits='64' id='8c4c4029'/>
+      <pointer-type-def type-id='2d064c05' size-in-bits='64' id='6e313ad5'/>
+      <pointer-type-def type-id='d666fa80' size-in-bits='64' id='eced47f6'/>
+      <pointer-type-def type-id='7dc7ab8f' size-in-bits='64' id='02557527'/>
+      <pointer-type-def type-id='d0cace14' size-in-bits='64' id='a99bd7d2'/>
+      <pointer-type-def type-id='1f90162b' size-in-bits='64' id='ddd0a58b'/>
+      <pointer-type-def type-id='1e1b3494' size-in-bits='64' id='70de91e2'/>
+      <pointer-type-def type-id='5e7de2a9' size-in-bits='64' id='b1e844c1'/>
+      <pointer-type-def type-id='e38bdef8' size-in-bits='64' id='ab38066e'/>
+      <pointer-type-def type-id='a96e1a44' size-in-bits='64' id='31f59912'/>
+      <pointer-type-def type-id='555033d2' size-in-bits='64' id='2bf5f3d0'/>
+      <pointer-type-def type-id='51e825b6' size-in-bits='64' id='a079e5cc'/>
+      <pointer-type-def type-id='c8d63c6e' size-in-bits='64' id='33e1dfe4'/>
+      <pointer-type-def type-id='9b087887' size-in-bits='64' id='469e947f'/>
+      <pointer-type-def type-id='91f77fa3' size-in-bits='64' id='fa058983'/>
+      <pointer-type-def type-id='c3b8a83b' size-in-bits='64' id='fde1bbcb'/>
+      <pointer-type-def type-id='11d6bd91' size-in-bits='64' id='18a1ba64'/>
+      <pointer-type-def type-id='8d64a1ad' size-in-bits='64' id='0fd7b97e'/>
+      <pointer-type-def type-id='a622177d' size-in-bits='64' id='fae5f6fe'/>
+      <pointer-type-def type-id='26e73b36' size-in-bits='64' id='a5896095'/>
+      <pointer-type-def type-id='65baad60' size-in-bits='64' id='7ca29816'/>
+      <pointer-type-def type-id='c026ae59' size-in-bits='64' id='b3542b31'/>
+      <pointer-type-def type-id='a212a715' size-in-bits='64' id='338303f5'/>
+      <pointer-type-def type-id='0db936dc' size-in-bits='64' id='236f06da'/>
+      <pointer-type-def type-id='8468004b' size-in-bits='64' id='691d1b3b'/>
+      <pointer-type-def type-id='01e6a0f2' size-in-bits='64' id='c0a50b50'/>
+      <pointer-type-def type-id='c6fb2ff8' size-in-bits='64' id='cf0da35e'/>
+      <pointer-type-def type-id='c1a75286' size-in-bits='64' id='d494b97c'/>
+      <pointer-type-def type-id='4234e231' size-in-bits='64' id='fc6f14a9'/>
+      <pointer-type-def type-id='8db8de2b' size-in-bits='64' id='f026b16b'/>
+      <pointer-type-def type-id='12afeb30' size-in-bits='64' id='edfa28b2'/>
+      <pointer-type-def type-id='15aa5ecd' size-in-bits='64' id='a84eb241'/>
+      <pointer-type-def type-id='1d4f5209' size-in-bits='64' id='612567ad'/>
+      <pointer-type-def type-id='9c757b77' size-in-bits='64' id='c0073bf3'/>
+      <pointer-type-def type-id='a46a9227' size-in-bits='64' id='a959128b'/>
+      <pointer-type-def type-id='c393ee9b' size-in-bits='64' id='d60d5a0f'/>
+      <pointer-type-def type-id='74c76c4a' size-in-bits='64' id='19bc34e4'/>
+      <pointer-type-def type-id='83d13e0e' size-in-bits='64' id='6313cef0'/>
+      <pointer-type-def type-id='23ce80b7' size-in-bits='64' id='3c31c59b'/>
+      <pointer-type-def type-id='f8a93d65' size-in-bits='64' id='9c946059'/>
+      <pointer-type-def type-id='5abe74b4' size-in-bits='64' id='bf8c5f5e'/>
+      <pointer-type-def type-id='73e35fcc' size-in-bits='64' id='aad51e56'/>
+      <pointer-type-def type-id='58407416' size-in-bits='64' id='45ef3730'/>
+      <pointer-type-def type-id='8f138f6a' size-in-bits='64' id='65fcdb9c'/>
+      <pointer-type-def type-id='081241b5' size-in-bits='64' id='e24c55c9'/>
+      <pointer-type-def type-id='3c2554e1' size-in-bits='64' id='ef2b6bf5'/>
+      <pointer-type-def type-id='1b0dcbb7' size-in-bits='64' id='bedcc9eb'/>
+      <pointer-type-def type-id='87461f69' size-in-bits='64' id='eddbe2ad'/>
+      <pointer-type-def type-id='1c674f90' size-in-bits='64' id='098d4d92'/>
+      <pointer-type-def type-id='d1043097' size-in-bits='64' id='f6a079db'/>
+      <pointer-type-def type-id='9ebac747' size-in-bits='64' id='da4ee44b'/>
+      <pointer-type-def type-id='25126efb' size-in-bits='64' id='464a4247'/>
+      <pointer-type-def type-id='8e4f6a60' size-in-bits='64' id='4753b592'/>
+      <pointer-type-def type-id='627c50fc' size-in-bits='64' id='9c9480f6'/>
+      <pointer-type-def type-id='b29581c5' size-in-bits='64' id='35b37061'/>
+      <pointer-type-def type-id='31b74d85' size-in-bits='64' id='f98694f9'/>
+      <pointer-type-def type-id='960bee7e' size-in-bits='64' id='e6032f80'/>
+      <pointer-type-def type-id='458c097a' size-in-bits='64' id='5ffcd66c'/>
+      <pointer-type-def type-id='4ea599f1' size-in-bits='64' id='234d802d'/>
+      <pointer-type-def type-id='7ae39c29' size-in-bits='64' id='6266601d'/>
+      <pointer-type-def type-id='f3f27ff7' size-in-bits='64' id='69b48c13'/>
+      <pointer-type-def type-id='80343f75' size-in-bits='64' id='2555df59'/>
+      <pointer-type-def type-id='8087fc9a' size-in-bits='64' id='5139dd84'/>
+      <pointer-type-def type-id='cd2b672f' size-in-bits='64' id='5a3c102b'/>
+      <pointer-type-def type-id='6557550d' size-in-bits='64' id='a3c69469'/>
+      <pointer-type-def type-id='49d94952' size-in-bits='64' id='47498e6c'/>
+      <pointer-type-def type-id='f4398a06' size-in-bits='64' id='13680d10'/>
+      <pointer-type-def type-id='538b7809' size-in-bits='64' id='5f0d472d'/>
+      <pointer-type-def type-id='ecb90832' size-in-bits='64' id='e0c03654'/>
+      <pointer-type-def type-id='35b31004' size-in-bits='64' id='06b83346'/>
+      <pointer-type-def type-id='9e33bce1' size-in-bits='64' id='b60e7255'/>
+      <pointer-type-def type-id='c15e0ad2' size-in-bits='64' id='5a8326dc'/>
+      <pointer-type-def type-id='35c1cbe3' size-in-bits='64' id='351add77'/>
+      <pointer-type-def type-id='21e2c677' size-in-bits='64' id='b7ee351b'/>
+      <pointer-type-def type-id='4cef7edc' size-in-bits='64' id='d2be5b16'/>
+      <pointer-type-def type-id='a80d6b6e' size-in-bits='64' id='67a2c0c8'/>
+      <pointer-type-def type-id='d2df6ce2' size-in-bits='64' id='bda101d4'/>
+      <pointer-type-def type-id='c6751b87' size-in-bits='64' id='d91e8ea3'/>
+      <pointer-type-def type-id='f6dcb63e' size-in-bits='64' id='83359c30'/>
+      <pointer-type-def type-id='62f14019' size-in-bits='64' id='20974125'/>
+      <pointer-type-def type-id='205059e2' size-in-bits='64' id='d57a1ee4'/>
+      <pointer-type-def type-id='a82c7e12' size-in-bits='64' id='807c842c'/>
+      <pointer-type-def type-id='8427fe66' size-in-bits='64' id='fece2110'/>
+      <pointer-type-def type-id='c0de0cb2' size-in-bits='64' id='d67468b4'/>
+      <pointer-type-def type-id='965023eb' size-in-bits='64' id='88f4e837'/>
+      <pointer-type-def type-id='89e92d83' size-in-bits='64' id='5a92dd37'/>
+      <pointer-type-def type-id='3b28e6a8' size-in-bits='64' id='bd2d1eba'/>
+      <pointer-type-def type-id='858c6d7b' size-in-bits='64' id='cc325be7'/>
+      <pointer-type-def type-id='0b0288d6' size-in-bits='64' id='d6762aa0'/>
+      <pointer-type-def type-id='e87d68d4' size-in-bits='64' id='d22f8cbe'/>
+      <pointer-type-def type-id='782b4219' size-in-bits='64' id='eee971fd'/>
+      <pointer-type-def type-id='32ee1dcb' size-in-bits='64' id='b54cfa0f'/>
+      <pointer-type-def type-id='2976f714' size-in-bits='64' id='7cd466e6'/>
+      <pointer-type-def type-id='4c110a85' size-in-bits='64' id='af60ef81'/>
+      <pointer-type-def type-id='0ccb1a26' size-in-bits='64' id='be55abd8'/>
+      <pointer-type-def type-id='50801c15' size-in-bits='64' id='0c16aca1'/>
+      <pointer-type-def type-id='c8915c86' size-in-bits='64' id='699131d0'/>
+      <pointer-type-def type-id='61b18a3b' size-in-bits='64' id='c1e0b02f'/>
+      <pointer-type-def type-id='9b7dfd9f' size-in-bits='64' id='0617ad2b'/>
+      <pointer-type-def type-id='cb28c283' size-in-bits='64' id='bae60bcf'/>
+      <pointer-type-def type-id='65655453' size-in-bits='64' id='0c7d25ff'/>
+      <pointer-type-def type-id='337862e8' size-in-bits='64' id='5c9f2a92'/>
+      <pointer-type-def type-id='18359f44' size-in-bits='64' id='92446276'/>
+      <pointer-type-def type-id='cbbca4c5' size-in-bits='64' id='ed3019e9'/>
+      <pointer-type-def type-id='c0ac60c2' size-in-bits='64' id='031fe454'/>
+      <pointer-type-def type-id='0ff60dc2' size-in-bits='64' id='a6c912f4'/>
+      <pointer-type-def type-id='d8da8ad2' size-in-bits='64' id='49f84764'/>
+      <pointer-type-def type-id='e3a1e7d2' size-in-bits='64' id='98252144'/>
+      <pointer-type-def type-id='86c85b12' size-in-bits='64' id='66b76584'/>
+      <pointer-type-def type-id='594ef19f' size-in-bits='64' id='1223555b'/>
+      <pointer-type-def type-id='29cf1864' size-in-bits='64' id='50756496'/>
+      <pointer-type-def type-id='455e2261' size-in-bits='64' id='2cc5a575'/>
+      <pointer-type-def type-id='45639e3d' size-in-bits='64' id='4fcb4c39'/>
+      <pointer-type-def type-id='c4e36342' size-in-bits='64' id='e36088ec'/>
+      <pointer-type-def type-id='b4cb0241' size-in-bits='64' id='10dae4c5'/>
+      <pointer-type-def type-id='9803cec6' size-in-bits='64' id='0f8df030'/>
+      <pointer-type-def type-id='924e6a9f' size-in-bits='64' id='6f2bf2e3'/>
+      <pointer-type-def type-id='34072a4b' size-in-bits='64' id='149f0e1f'/>
+      <pointer-type-def type-id='81c3d1f5' size-in-bits='64' id='4814c3f9'/>
+      <pointer-type-def type-id='77fe651f' size-in-bits='64' id='de5dab7b'/>
+      <pointer-type-def type-id='da556df0' size-in-bits='64' id='64efa47a'/>
+      <pointer-type-def type-id='85832c21' size-in-bits='64' id='f4dd5cc5'/>
+      <pointer-type-def type-id='9035443c' size-in-bits='64' id='eca40b6e'/>
+      <pointer-type-def type-id='898c19a2' size-in-bits='64' id='69d3de54'/>
+      <pointer-type-def type-id='972398b7' size-in-bits='64' id='3d6e005b'/>
+      <pointer-type-def type-id='ca6c3304' size-in-bits='64' id='922133c6'/>
+      <pointer-type-def type-id='f962dd87' size-in-bits='64' id='f3e878cb'/>
+      <pointer-type-def type-id='729b729c' size-in-bits='64' id='c11c2e76'/>
+      <pointer-type-def type-id='bd9eea97' size-in-bits='64' id='624375a3'/>
+      <pointer-type-def type-id='0332edd2' size-in-bits='64' id='d18dbee4'/>
+      <pointer-type-def type-id='930eb0f7' size-in-bits='64' id='e82aa0fb'/>
+      <pointer-type-def type-id='6386f568' size-in-bits='64' id='32a663ca'/>
+      <pointer-type-def type-id='b7b43e53' size-in-bits='64' id='147cd5a7'/>
+      <pointer-type-def type-id='811eff86' size-in-bits='64' id='6537d478'/>
+      <pointer-type-def type-id='7e5bb1dd' size-in-bits='64' id='e78e01a9'/>
+      <pointer-type-def type-id='d8488877' size-in-bits='64' id='98f35cbb'/>
+      <pointer-type-def type-id='6cb7d4e4' size-in-bits='64' id='a852a9de'/>
+      <pointer-type-def type-id='21f5310d' size-in-bits='64' id='42c362d1'/>
+      <pointer-type-def type-id='44b3a0ac' size-in-bits='64' id='e40f7bda'/>
+      <pointer-type-def type-id='b10d582f' size-in-bits='64' id='b70f37f7'/>
+      <pointer-type-def type-id='bef19510' size-in-bits='64' id='ccc13476'/>
+      <pointer-type-def type-id='1429eee4' size-in-bits='64' id='affe0fe2'/>
+      <pointer-type-def type-id='75a3ad48' size-in-bits='64' id='13b49faa'/>
+      <pointer-type-def type-id='a3566137' size-in-bits='64' id='c15eecdf'/>
+      <pointer-type-def type-id='4469e818' size-in-bits='64' id='3217f9ba'/>
+      <pointer-type-def type-id='51dbeb7e' size-in-bits='64' id='8c1bb0b4'/>
+      <pointer-type-def type-id='0360a184' size-in-bits='64' id='4da45462'/>
+      <pointer-type-def type-id='14a30316' size-in-bits='64' id='5bc7662c'/>
+      <pointer-type-def type-id='49a7c5a7' size-in-bits='64' id='35b28c4f'/>
+      <pointer-type-def type-id='1a196c3e' size-in-bits='64' id='98ff7360'/>
+      <pointer-type-def type-id='f12ac4ae' size-in-bits='64' id='31094274'/>
+      <pointer-type-def type-id='d1678a2e' size-in-bits='64' id='07b9ee34'/>
+      <pointer-type-def type-id='852a961e' size-in-bits='64' id='5799dc94'/>
+      <pointer-type-def type-id='89d7cb48' size-in-bits='64' id='6fcaf91e'/>
+      <pointer-type-def type-id='6fcaf91e' size-in-bits='64' id='30864cdc'/>
+      <pointer-type-def type-id='5b37df4a' size-in-bits='64' id='c2074578'/>
+      <pointer-type-def type-id='45092453' size-in-bits='64' id='f59f5033'/>
+      <pointer-type-def type-id='b71b307b' size-in-bits='64' id='a42934eb'/>
+      <pointer-type-def type-id='101eeec5' size-in-bits='64' id='90cd86e5'/>
+      <pointer-type-def type-id='7c1f8187' size-in-bits='64' id='7efbcaaf'/>
+      <pointer-type-def type-id='bd1d1d08' size-in-bits='64' id='2e2106be'/>
+      <pointer-type-def type-id='7f36a7f0' size-in-bits='64' id='a63f3a26'/>
+      <pointer-type-def type-id='a79adfa3' size-in-bits='64' id='b3ce99dc'/>
+      <pointer-type-def type-id='c0065bf0' size-in-bits='64' id='0f8b1896'/>
+      <pointer-type-def type-id='aca51d4a' size-in-bits='64' id='deff2378'/>
+      <pointer-type-def type-id='6f8d5f55' size-in-bits='64' id='f30dbff5'/>
+      <pointer-type-def type-id='be643f38' size-in-bits='64' id='bd3860fe'/>
+      <pointer-type-def type-id='9193647b' size-in-bits='64' id='da1cb816'/>
+      <pointer-type-def type-id='cc52ca8d' size-in-bits='64' id='6daf6abd'/>
+      <pointer-type-def type-id='8470101c' size-in-bits='64' id='3d95b5f6'/>
+      <pointer-type-def type-id='0fbf3cfd' size-in-bits='64' id='a10cc675'/>
+      <pointer-type-def type-id='f588f6e0' size-in-bits='64' id='e1ea11f6'/>
+      <pointer-type-def type-id='f29d9605' size-in-bits='64' id='e93ad915'/>
+      <pointer-type-def type-id='4d8b71ac' size-in-bits='64' id='85d83b09'/>
+      <pointer-type-def type-id='16c50f80' size-in-bits='64' id='13ef4686'/>
+      <pointer-type-def type-id='daae3cc8' size-in-bits='64' id='da0b22b2'/>
+      <pointer-type-def type-id='1546c604' size-in-bits='64' id='45305972'/>
+      <pointer-type-def type-id='17992e3b' size-in-bits='64' id='6dca061b'/>
+      <pointer-type-def type-id='68d8e236' size-in-bits='64' id='e638cd0c'/>
+      <pointer-type-def type-id='9a9d8c1d' size-in-bits='64' id='4c98e95d'/>
+      <pointer-type-def type-id='22e47c79' size-in-bits='64' id='12c1f7e1'/>
+      <pointer-type-def type-id='f9d018aa' size-in-bits='64' id='08fd2ee7'/>
+      <pointer-type-def type-id='10ec1ded' size-in-bits='64' id='eeaf504d'/>
+      <pointer-type-def type-id='ca5008d0' size-in-bits='64' id='98c4c95a'/>
+      <pointer-type-def type-id='68bc5e16' size-in-bits='64' id='5a60e638'/>
+      <pointer-type-def type-id='a115139f' size-in-bits='64' id='e95fd96b'/>
+      <pointer-type-def type-id='93a4c7d5' size-in-bits='64' id='a4cbdcd9'/>
+      <pointer-type-def type-id='64f32e32' size-in-bits='64' id='4a028f44'/>
+      <pointer-type-def type-id='9754e8aa' size-in-bits='64' id='7a0ed254'/>
+      <pointer-type-def type-id='6fd68117' size-in-bits='64' id='bd3f3f93'/>
+      <pointer-type-def type-id='fa5149d8' size-in-bits='64' id='c65c1382'/>
+      <pointer-type-def type-id='dd9a5153' size-in-bits='64' id='c297924f'/>
+      <pointer-type-def type-id='80310425' size-in-bits='64' id='d3210449'/>
+      <pointer-type-def type-id='3d5d0103' size-in-bits='64' id='de36db77'/>
+      <pointer-type-def type-id='756696ad' size-in-bits='64' id='c021fd31'/>
+      <pointer-type-def type-id='670d37f5' size-in-bits='64' id='82ff4739'/>
+      <pointer-type-def type-id='b364ee65' size-in-bits='64' id='92d86499'/>
+      <pointer-type-def type-id='e0e73a01' size-in-bits='64' id='99577235'/>
+      <pointer-type-def type-id='f9b06939' size-in-bits='64' id='8bff8096'/>
+      <pointer-type-def type-id='a49fa2a0' size-in-bits='64' id='84bbda06'/>
+      <pointer-type-def type-id='ae2eaa42' size-in-bits='64' id='0838a534'/>
+      <pointer-type-def type-id='98b2ffae' size-in-bits='64' id='531a7450'/>
+      <pointer-type-def type-id='c02c4ff1' size-in-bits='64' id='b95e1b8d'/>
+      <pointer-type-def type-id='da14b6a5' size-in-bits='64' id='4c592849'/>
+      <pointer-type-def type-id='63c3ee86' size-in-bits='64' id='5b4e5af0'/>
+      <pointer-type-def type-id='2707fa43' size-in-bits='64' id='154ec6df'/>
+      <pointer-type-def type-id='58e5bb8b' size-in-bits='64' id='03862e5f'/>
+      <pointer-type-def type-id='5257f496' size-in-bits='64' id='0fb373c0'/>
+      <pointer-type-def type-id='47658c9d' size-in-bits='64' id='cf265ed1'/>
+      <pointer-type-def type-id='9c267c11' size-in-bits='64' id='8bf3cff5'/>
+      <pointer-type-def type-id='f6590065' size-in-bits='64' id='81c90e99'/>
+      <pointer-type-def type-id='4cc265e6' size-in-bits='64' id='b713d448'/>
+      <pointer-type-def type-id='4ae18970' size-in-bits='64' id='548eee3a'/>
+      <pointer-type-def type-id='395aad7e' size-in-bits='64' id='74287ea0'/>
+      <pointer-type-def type-id='07b58648' size-in-bits='64' id='343c05fa'/>
+      <pointer-type-def type-id='be90799d' size-in-bits='64' id='f45e1d71'/>
+      <pointer-type-def type-id='3fe3822d' size-in-bits='64' id='345f0501'/>
+      <pointer-type-def type-id='ffb8b223' size-in-bits='64' id='89b5be7f'/>
+      <pointer-type-def type-id='e0f7a7a4' size-in-bits='64' id='6c781266'/>
+      <pointer-type-def type-id='f6d2a7cd' size-in-bits='64' id='4acd4951'/>
+      <pointer-type-def type-id='b41203ee' size-in-bits='64' id='afcbd268'/>
+      <pointer-type-def type-id='af1a3b3d' size-in-bits='64' id='c7c94ce1'/>
+      <pointer-type-def type-id='d31161f1' size-in-bits='64' id='3778bdcd'/>
+      <pointer-type-def type-id='7e2e2485' size-in-bits='64' id='11e89fb9'/>
+      <pointer-type-def type-id='0bd6c9bd' size-in-bits='64' id='cb4c6db1'/>
+      <pointer-type-def type-id='f6dbfe8d' size-in-bits='64' id='9038f441'/>
+      <pointer-type-def type-id='c05e7862' size-in-bits='64' id='27653c4c'/>
+      <pointer-type-def type-id='f8448e05' size-in-bits='64' id='a43821b9'/>
+      <pointer-type-def type-id='cd9acaaa' size-in-bits='64' id='5ac7baf4'/>
+      <pointer-type-def type-id='187fa8c7' size-in-bits='64' id='4ffa0523'/>
+      <pointer-type-def type-id='46adf4c0' size-in-bits='64' id='59f6a07a'/>
+      <pointer-type-def type-id='09f0c826' size-in-bits='64' id='825ef190'/>
+      <pointer-type-def type-id='4aa54e65' size-in-bits='64' id='f590d4d9'/>
+      <pointer-type-def type-id='4cb2ce2a' size-in-bits='64' id='2a3a4aec'/>
+      <pointer-type-def type-id='19db78f1' size-in-bits='64' id='7a66877d'/>
+      <pointer-type-def type-id='30a49526' size-in-bits='64' id='938abf68'/>
+      <pointer-type-def type-id='cd562d46' size-in-bits='64' id='e2d7f258'/>
+      <pointer-type-def type-id='4ede01e9' size-in-bits='64' id='94c16fa5'/>
+      <pointer-type-def type-id='3ce3a3e9' size-in-bits='64' id='63c7e8e1'/>
+      <pointer-type-def type-id='8ae2fb1d' size-in-bits='64' id='165146ad'/>
+      <pointer-type-def type-id='21f83f61' size-in-bits='64' id='cb1c5129'/>
+      <pointer-type-def type-id='cb1c5129' size-in-bits='64' id='c09387b9'/>
+      <pointer-type-def type-id='bbbd8970' size-in-bits='64' id='577ede06'/>
+      <pointer-type-def type-id='4edc4180' size-in-bits='64' id='bf237056'/>
+      <pointer-type-def type-id='279bdcdf' size-in-bits='64' id='c6675287'/>
+      <function-decl name='arch_bpf_jit_check_func' mangled-name='arch_bpf_jit_check_func' filepath='arch/arm64/net/bpf_jit_comp.c' line='1018' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_bpf_jit_check_func'>
+        <parameter type-id='18145275' name='prog' filepath='arch/arm64/net/bpf_jit_comp.c' line='1018' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='96' id='3fa05d14'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <function-type size-in-bits='64' id='77780344'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='ee406209'/>
+      </function-type>
+      <function-type size-in-bits='64' id='732df9b3'>
+        <parameter type-id='231422bf'/>
+        <return type-id='00ee50b8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c435a5bb'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='f41a0030'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12afeb30'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7ca29816'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15aa5ecd'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d4f5209'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c757b77'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a46a9227'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c393ee9b'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74c76c4a'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='325a7d19'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83d13e0e'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7ca29816'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23ce80b7'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='12c1f7e1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8a93d65'>
+        <parameter type-id='231422bf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5abe74b4'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73e35fcc'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58407416'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f138f6a'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='081241b5'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c2554e1'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b0dcbb7'>
+        <parameter type-id='366d2695'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87461f69'>
+        <parameter type-id='bdcee7ae'/>
+        <parameter type-id='2d14cfd8'/>
+        <parameter type-id='231422bf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c674f90'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='9693d74a'/>
+        <parameter type-id='28379b39'/>
+        <parameter type-id='28379b39'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1043097'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9ebac747'>
+        <parameter type-id='8f4bc7f1'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25126efb'>
+        <parameter type-id='b5fb9c17'/>
+        <parameter type-id='236f06da'/>
+        <parameter type-id='84a5c3d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e4f6a60'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='627c50fc'>
+        <parameter type-id='0f2a7ce5'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b29581c5'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='cf536864'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1322ddb6'>
+        <parameter type-id='b3e12f1c'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31b74d85'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960bee7e'>
+        <parameter type-id='ccc13476'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='458c097a'>
+        <parameter type-id='ccc13476'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ea599f1'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ae39c29'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3f27ff7'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='12c1f7e1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80343f75'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8087fc9a'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd2b672f'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b2c34f11'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6557550d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ee5dddb1'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49d94952'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f4398a06'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='19272f09'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='538b7809'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='19272f09'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecb90832'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='cb317f38'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35b31004'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b3e12f1c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e33bce1'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='7f9b4c1b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c15e0ad2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='6db6a1be'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35c1cbe3'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='6e313ad5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21e2c677'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='6e313ad5'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cef7edc'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='eced47f6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a80d6b6e'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='02557527'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2df6ce2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a99bd7d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6751b87'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ddd0a58b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6dcb63e'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='70de91e2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62f14019'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b1e844c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='205059e2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ab38066e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a82c7e12'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='2bf5f3d0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8427fe66'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a079e5cc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0de0cb2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a079e5cc'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='965023eb'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='fa058983'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89e92d83'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b28e6a8'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='cf0da35e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='858c6d7b'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='d494b97c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b0288d6'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e87d68d4'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='691d1b3b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='782b4219'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c0a50b50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ee1dcb'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2976f714'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c110a85'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='30864cdc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ccb1a26'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50801c15'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c8915c86'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='84a5c3d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='61b18a3b'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b7dfd9f'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb28c283'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='65655453'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='c09387b9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='337862e8'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='affe0fe2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18359f44'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='3c330066'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbbca4c5'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0ac60c2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ff60dc2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8da8ad2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='4da45462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3a1e7d2'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='5bc7662c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86c85b12'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='594ef19f'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29cf1864'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='455e2261'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45639e3d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='84a5c3d4'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4e36342'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4cb0241'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9803cec6'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='924e6a9f'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='6db6a1be'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34072a4b'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81c3d1f5'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77fe651f'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da556df0'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='85832c21'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9035443c'>
+        <parameter type-id='07b9ee34'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='898c19a2'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='972398b7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='a10cc675'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca6c3304'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f962dd87'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='729b729c'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd9eea97'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='122b71ba'/>
+        <parameter type-id='e638cd0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0332edd2'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='930eb0f7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6386f568'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7b43e53'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='811eff86'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5bb1dd'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8488877'>
+        <parameter type-id='6dca061b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cb7d4e4'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='18a1ba64'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21f5310d'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d8e6b335'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75a3ad48'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='a2bff676'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4469e818'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='c15eecdf'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a196c3e'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='12c1f7e1'/>
+        <return type-id='35b28c4f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8470101c'>
+        <parameter type-id='ee406209'/>
+        <return type-id='0fbf3cfd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daae3cc8'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='13ef4686'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca5008d0'>
+        <parameter type-id='11f4a000'/>
+        <return type-id='84a5c3d4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68bc5e16'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a115139f'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93a4c7d5'>
+        <parameter type-id='6dca061b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64f32e32'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='f9f4b16f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9754e8aa'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='f9f4b16f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6fd68117'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='6849a88c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77c9a241'>
+        <parameter type-id='a10cc675'/>
+        <return type-id='a110acfc'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa5149d8'>
+        <parameter type-id='2ce52478'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd9a5153'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='2ce52478'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80310425'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d5d0103'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='1dc6a898'/>
+      </function-type>
+      <function-type size-in-bits='64' id='756696ad'>
+        <parameter type-id='ee406209'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='670d37f5'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='7fe42640'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b364ee65'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0e73a01'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae2eaa42'>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98b2ffae'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='acada613'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c02c4ff1'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da14b6a5'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63c3ee86'>
+        <parameter type-id='ee406209'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2707fa43'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='a63f3a26'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58e5bb8b'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5257f496'>
+        <parameter type-id='ee406209'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47658c9d'>
+        <parameter type-id='00ee50b8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c267c11'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6590065'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cc265e6'>
+        <parameter type-id='236f06da'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='354f7eb9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ae18970'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='395aad7e'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='7f9b4c1b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07b58648'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='8c4c4029'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be90799d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ab38066e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3fe3822d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='31f59912'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffb8b223'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='2bf5f3d0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0f7a7a4'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6d2a7cd'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='469e947f'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b41203ee'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af1a3b3d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d31161f1'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e2e2485'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='3c330066'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0bd6c9bd'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bd3860fe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6dbfe8d'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c05e7862'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8448e05'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='84bbda06'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd9acaaa'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='187fa8c7'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='4c98e95d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46adf4c0'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09f0c826'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa54e65'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cb2ce2a'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19db78f1'>
+        <parameter type-id='00ee50b8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30a49526'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='45305972'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd562d46'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ede01e9'>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='b50a4934' size-in-bits='64' id='d8e6b335'/>
+      <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/>
+      <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='f3415517'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' 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='b59d7dce' 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='b59d7dce' 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='b59d7dce' 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='b59d7dce' 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='69bf7bee' 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='69bf7bee' 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='91ce1af9' 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='925167dc' 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='943a1b48' 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='95e97e5e' 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='5d92c9e0' 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='eaa32e2f' visibility='default' filepath='include/linux/seq_file.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='09ffba8a' size-in-bits='64' id='5d92c9e0'/>
+      <qualified-type-def type-id='b4b8adeb' const='yes' id='09ffba8a'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/badblocks.c' language='LANG_C89'>
+      <function-decl name='badblocks_set' mangled-name='badblocks_set' filepath='block/badblocks.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_set'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='a42536cd' name='s' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='sectors' filepath='block/badblocks.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='acknowledged' filepath='block/badblocks.c' line='164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='badblocks_store' mangled-name='badblocks_store' filepath='block/badblocks.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_store'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='517' column='1'/>
+        <parameter type-id='80f4b756' name='page' filepath='block/badblocks.c' line='517' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='block/badblocks.c' line='517' column='1'/>
+        <parameter type-id='95e97e5e' name='unack' filepath='block/badblocks.c' line='518' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='badblocks_show' mangled-name='badblocks_show' filepath='block/badblocks.c' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_show'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='467' column='1'/>
+        <parameter type-id='26a90f95' name='page' filepath='block/badblocks.c' line='467' column='1'/>
+        <parameter type-id='95e97e5e' name='unack' filepath='block/badblocks.c' line='467' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='badblocks_init' mangled-name='badblocks_init' filepath='block/badblocks.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_init'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='575' column='1'/>
+        <parameter type-id='95e97e5e' name='enable' filepath='block/badblocks.c' line='575' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='badblocks_exit' mangled-name='badblocks_exit' filepath='block/badblocks.c' line='593' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_exit'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='593' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='badblocks_clear' mangled-name='badblocks_clear' filepath='block/badblocks.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='badblocks_clear'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='331' column='1'/>
+        <parameter type-id='a42536cd' name='s' filepath='block/badblocks.c' line='331' column='1'/>
+        <parameter type-id='95e97e5e' name='sectors' filepath='block/badblocks.c' line='331' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ack_all_badblocks' mangled-name='ack_all_badblocks' filepath='block/badblocks.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ack_all_badblocks'>
+        <parameter type-id='5760652c' name='bb' filepath='block/badblocks.c' line='433' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <typedef-decl name='ssize_t' type-id='b6b3ebaf' filepath='include/linux/types.h' line='60' column='1' id='79a0948f'/>
+      <typedef-decl name='__kernel_ssize_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='73' column='1' id='b6b3ebaf'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/bio.c' language='LANG_C89'>
+      <var-decl name='fs_bio_set' type-id='dfa886b2' mangled-name='fs_bio_set' visibility='default' filepath='block/bio.c' line='47' column='1' elf-symbol-id='fs_bio_set'/>
+      <function-decl name='bio_put' mangled-name='bio_put' filepath='block/bio.c' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_put'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='601' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_alloc_bioset' mangled-name='bio_alloc_bioset' filepath='block/bio.c' line='432' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_alloc_bioset'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/bio.c' line='432' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_iovecs' filepath='block/bio.c' line='432' column='1'/>
+        <parameter type-id='38b1e3a0' name='bs' filepath='block/bio.c' line='433' column='1'/>
+        <return type-id='fb55efa1'/>
+      </function-decl>
+      <function-decl name='bio_associate_blkg' mangled-name='bio_associate_blkg' filepath='block/bio.c' line='2158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_associate_blkg'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='2158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_add_page' mangled-name='bio_add_page' filepath='block/bio.c' line='866' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_add_page'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='866' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='block/bio.c' line='866' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='block/bio.c' line='867' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='block/bio.c' line='867' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bio_endio' mangled-name='bio_endio' filepath='block/bio.c' line='1844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_endio'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='1844' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bioset_init' mangled-name='bioset_init' filepath='block/bio.c' line='2001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bioset_init'>
+        <parameter type-id='38b1e3a0' name='bs' filepath='block/bio.c' line='2001' column='1'/>
+        <parameter type-id='f0981eeb' name='pool_size' filepath='block/bio.c' line='2002' column='1'/>
+        <parameter type-id='f0981eeb' name='front_pad' filepath='block/bio.c' line='2003' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='block/bio.c' line='2004' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bioset_exit' mangled-name='bioset_exit' filepath='block/bio.c' line='1964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bioset_exit'>
+        <parameter type-id='38b1e3a0' name='bs' filepath='block/bio.c' line='1964' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='submit_bio_wait' mangled-name='submit_bio_wait' filepath='block/bio.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bio_wait'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='1024' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_start_io_acct' mangled-name='generic_start_io_acct' filepath='block/bio.c' line='1777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_start_io_acct'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/bio.c' line='1777' column='1'/>
+        <parameter type-id='95e97e5e' name='op' filepath='block/bio.c' line='1777' column='1'/>
+        <parameter type-id='7359adad' name='sectors' filepath='block/bio.c' line='1778' column='1'/>
+        <parameter type-id='84dc82b7' name='part' filepath='block/bio.c' line='1778' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_end_io_acct' mangled-name='generic_end_io_acct' filepath='block/bio.c' line='1793' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_end_io_acct'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/bio.c' line='1793' column='1'/>
+        <parameter type-id='95e97e5e' name='req_op' filepath='block/bio.c' line='1793' column='1'/>
+        <parameter type-id='84dc82b7' name='part' filepath='block/bio.c' line='1794' column='1'/>
+        <parameter type-id='7359adad' name='start_time' filepath='block/bio.c' line='1794' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_init' mangled-name='bio_init' filepath='block/bio.c' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_init'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='273' column='1'/>
+        <parameter type-id='cddcb53e' name='table' filepath='block/bio.c' line='273' column='1'/>
+        <parameter type-id='8efea9e5' name='max_vecs' filepath='block/bio.c' line='274' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_clone_blkg_association' mangled-name='bio_clone_blkg_association' filepath='block/bio.c' line='2180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_clone_blkg_association'>
+        <parameter type-id='fb55efa1' name='dst' filepath='block/bio.c' line='2180' column='1'/>
+        <parameter type-id='fb55efa1' name='src' filepath='block/bio.c' line='2180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bio_chain' mangled-name='bio_chain' filepath='block/bio.c' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bio_chain'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/bio.c' line='333' column='1'/>
+        <parameter type-id='fb55efa1' name='parent' filepath='block/bio.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a47d3467' size-in-bits='192' id='56ac7648'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='256' id='e4f16420'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='384' id='e8ef2bd5'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e4a7867c' size-in-bits='infinite' id='6abca080'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='1024' id='7f475abd'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='448' id='346bc576'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='48' id='ff2536e2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='blk_crypto_key' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='52' column='1' id='7b61b7b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_cfg' type-id='cdcb89ef' visibility='default' filepath='include/linux/blk-crypto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_unit_size_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raw' type-id='7f475abd' visibility='default' filepath='include/linux/blk-crypto.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_crypto_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='33' column='1' id='cdcb89ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_mode' type-id='e951e732' visibility='default' filepath='include/linux/blk-crypto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dun_bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-crypto.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_hw_wrapped' type-id='b50a4934' visibility='default' filepath='include/linux/blk-crypto.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_crypto_mode_num' filepath='include/linux/blk-crypto.h' line='11' column='1' id='e951e732'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_INVALID' value='0'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_256_XTS' value='1'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV' value='2'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_ADIANTUM' value='3'/>
+        <enumerator name='BLK_ENCRYPTION_MODE_MAX' value='4'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='block/blk-mq.h' line='19' column='1' id='e9e9d685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/blk-mq.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rq_lists' type-id='e8ef2bd5' visibility='default' filepath='block/blk-mq.h' line='21' 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='87322991'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='72f469ec' 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='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='19' 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='48' column='1' id='6e051ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map_nr' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='278a4544' visibility='default' filepath='include/linux/sbitmap.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_word' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='20' column='1' id='28e1d9ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='depth' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='word' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cleared' type-id='7359adad' visibility='default' filepath='include/linux/sbitmap.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sbitmap.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_tags' size-in-bits='1408' is-struct='yes' visibility='default' filepath='block/blk-mq-tag.h' line='10' column='1' id='8efd3865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_tags' type-id='f0981eeb' 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='f0981eeb' 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='49178f86' 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='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='breserved_tags' type-id='a133315d' visibility='default' filepath='block/blk-mq-tag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='static_rqs' type-id='79808846' visibility='default' filepath='block/blk-mq-tag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='block/blk-mq-tag.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sbitmap_queue' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sbitmap.h' line='97' column='1' id='a133315d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sb' type-id='6e051ed1' visibility='default' filepath='include/linux/sbitmap.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_hint' type-id='807869d3' visibility='default' filepath='include/linux/sbitmap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wake_batch' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake_index' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ws' type-id='cdff193b' visibility='default' filepath='include/linux/sbitmap.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ws_active' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='round_robin' type-id='b50a4934' visibility='default' filepath='include/linux/sbitmap.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='min_shallow_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/sbitmap.h' line='141' 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='76' column='1' id='41425a4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_cnt' type-id='49178f86' visibility='default' filepath='include/linux/sbitmap.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sbitmap.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ctxs' size-in-bits='832' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='10' column='1' id='70bf757e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='block/blk-mq.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blk_mq_req_flags_t' type-id='3f1a6b60' filepath='include/linux/blk_types.h' line='268' column='1' id='346d62be'/>
+      <pointer-type-def type-id='9a335021' size-in-bits='64' id='c9c70151'/>
+      <pointer-type-def type-id='70bf757e' size-in-bits='64' id='ceead144'/>
+      <pointer-type-def type-id='8efd3865' size-in-bits='64' id='0461ecf5'/>
+      <qualified-type-def type-id='7b61b7b4' const='yes' id='72b61a2d'/>
+      <pointer-type-def type-id='72b61a2d' size-in-bits='64' id='9baaf905'/>
+      <pointer-type-def type-id='28e1d9ae' size-in-bits='64' id='278a4544'/>
+      <pointer-type-def type-id='41425a4b' size-in-bits='64' id='cdff193b'/>
+      <function-decl name='submit_bio' mangled-name='submit_bio' filepath='block/blk-core.c' line='1154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bio'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/blk-core.c' line='1154' column='1'/>
+        <return type-id='041bc907'/>
+      </function-decl>
+      <function-decl name='rq_flush_dcache_pages' mangled-name='rq_flush_dcache_pages' filepath='block/blk-core.c' line='1538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rq_flush_dcache_pages'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-core.c' line='1538' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_update_request' mangled-name='blk_update_request' filepath='block/blk-core.c' line='1446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_update_request'>
+        <parameter type-id='3dad1a48' name='req' filepath='block/blk-core.c' line='1446' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-core.c' line='1446' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_bytes' filepath='block/blk-core.c' line='1447' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_sync_queue' mangled-name='blk_sync_queue' filepath='block/blk-core.c' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_sync_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='282' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_status_to_errno' mangled-name='blk_status_to_errno' filepath='block/blk-core.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_status_to_errno'>
+        <parameter type-id='f4e2facd' name='status' filepath='block/blk-core.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_start_plug' mangled-name='blk_start_plug' filepath='block/blk-core.c' line='1717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_start_plug'>
+        <parameter type-id='39944481' name='plug' filepath='block/blk-core.c' line='1717' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_set_queue_dying' mangled-name='blk_set_queue_dying' filepath='block/blk-core.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_set_queue_dying'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='316' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_test_and_set' mangled-name='blk_queue_flag_test_and_set' filepath='block/blk-core.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_test_and_set'>
+        <parameter type-id='f0981eeb' name='flag' filepath='block/blk-core.c' line='104' column='1'/>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='104' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_set' mangled-name='blk_queue_flag_set' filepath='block/blk-core.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_set'>
+        <parameter type-id='f0981eeb' name='flag' filepath='block/blk-core.c' line='79' column='1'/>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='79' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_flag_clear' mangled-name='blk_queue_flag_clear' filepath='block/blk-core.c' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_flag_clear'>
+        <parameter type-id='f0981eeb' name='flag' filepath='block/blk-core.c' line='90' column='1'/>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='90' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_put_request' mangled-name='blk_put_request' filepath='block/blk-core.c' line='599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_request'>
+        <parameter type-id='3dad1a48' name='req' filepath='block/blk-core.c' line='599' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_put_queue' mangled-name='blk_put_queue' filepath='block/blk-core.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_put_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='310' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_get_request' mangled-name='blk_get_request' filepath='block/blk-core.c' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_request'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='583' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-core.c' line='583' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-core.c' line='584' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_get_queue' mangled-name='blk_get_queue' filepath='block/blk-core.c' line='566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_get_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='566' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_finish_plug' mangled-name='blk_finish_plug' filepath='block/blk-core.c' line='1800' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_finish_plug'>
+        <parameter type-id='39944481' name='plug' filepath='block/blk-core.c' line='1800' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_cleanup_queue' mangled-name='blk_cleanup_queue' filepath='block/blk-core.c' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_cleanup_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-core.c' line='342' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_alloc_queue' mangled-name='blk_alloc_queue' filepath='block/blk-core.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_alloc_queue'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-core.c' line='394' column='1'/>
+        <return type-id='e7d2a5fc'/>
+      </function-decl>
+      <typedef-decl name='blk_qc_t' type-id='f0981eeb' filepath='include/linux/blk_types.h' line='465' column='1' id='041bc907'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-exec.c' language='LANG_C89'>
+      <function-decl name='blk_execute_rq_nowait' mangled-name='blk_execute_rq_nowait' filepath='block/blk-exec.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_execute_rq_nowait'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-exec.c' line='48' column='1'/>
+        <parameter type-id='33c599da' name='bd_disk' filepath='block/blk-exec.c' line='48' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-exec.c' line='49' column='1'/>
+        <parameter type-id='95e97e5e' name='at_head' filepath='block/blk-exec.c' line='49' column='1'/>
+        <parameter type-id='5afdaa66' name='done' filepath='block/blk-exec.c' line='50' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_execute_rq' mangled-name='blk_execute_rq' filepath='block/blk-exec.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_execute_rq'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-exec.c' line='77' column='1'/>
+        <parameter type-id='33c599da' name='bd_disk' filepath='block/blk-exec.c' line='77' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-exec.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='at_head' filepath='block/blk-exec.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-map.c' language='LANG_C89'>
+      <class-decl name='rq_map_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='822' column='1' id='9a6e6516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/blkdev.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page_order' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_entries' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='null_mapped' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_user' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='828' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f2b4d088' const='yes' id='7f60130d'/>
+      <pointer-type-def type-id='7f60130d' size-in-bits='64' id='ab3e2665'/>
+      <pointer-type-def type-id='9a6e6516' size-in-bits='64' id='9c9d090c'/>
+      <function-decl name='blk_rq_unmap_user' mangled-name='blk_rq_unmap_user' filepath='block/blk-map.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_unmap_user'>
+        <parameter type-id='fb55efa1' name='bio' filepath='block/blk-map.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_user_iov' mangled-name='blk_rq_map_user_iov' filepath='block/blk-map.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_user_iov'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-map.c' line='121' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='121' column='1'/>
+        <parameter type-id='9c9d090c' name='map_data' filepath='block/blk-map.c' line='122' column='1'/>
+        <parameter type-id='ab3e2665' name='iter' filepath='block/blk-map.c' line='123' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_user' mangled-name='blk_rq_map_user' filepath='block/blk-map.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_user'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-map.c' line='162' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='162' column='1'/>
+        <parameter type-id='9c9d090c' name='map_data' filepath='block/blk-map.c' line='163' column='1'/>
+        <parameter type-id='eaa32e2f' name='ubuf' filepath='block/blk-map.c' line='163' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='block/blk-map.c' line='164' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_rq_map_kern' mangled-name='blk_rq_map_kern' filepath='block/blk-map.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_kern'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='eaa32e2f' name='kbuf' filepath='block/blk-map.c' line='222' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='block/blk-map.c' line='223' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='block/blk-map.c' line='223' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='iov_iter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/uio.h' line='30' column='1' id='f2b4d088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_offset' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9b26deed' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='a8aafb60' visibility='default' filepath='include/linux/uio.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='9b26deed'>
+        <data-member access='public'>
+          <var-decl name='iov' type-id='2c556848' visibility='default' filepath='include/linux/uio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kvec' type-id='5199c30d' visibility='default' filepath='include/linux/uio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bvec' type-id='15c9a01b' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pipe' type-id='15d29710' visibility='default' filepath='include/linux/uio.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='45' column='1' id='a8aafb60'>
+        <data-member access='public'>
+          <var-decl name='nr_segs' type-id='7359adad' visibility='default' filepath='include/linux/uio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='1570e040' visibility='default' filepath='include/linux/uio.h' line='47' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='47' column='1' id='1570e040'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e70f1c73' size-in-bits='64' id='15c9a01b'/>
+      <pointer-type-def type-id='fb4943b2' size-in-bits='64' id='2c556848'/>
+      <pointer-type-def type-id='ccd48cf5' size-in-bits='64' id='5199c30d'/>
+      <qualified-type-def type-id='40af3608' const='yes' id='e70f1c73'/>
+      <qualified-type-def type-id='0f042891' const='yes' id='fb4943b2'/>
+      <qualified-type-def type-id='cd5915d8' const='yes' id='ccd48cf5'/>
+      <class-decl name='iovec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/uio.h' line='17' column='1' id='0f042891'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' 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='9e19ad6e' 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='16' column='1' id='cd5915d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-merge.c' language='LANG_C89'>
+      <pointer-type-def type-id='fb55efa1' size-in-bits='64' id='334817d1'/>
+      <function-decl name='blk_rq_map_sg' mangled-name='blk_rq_map_sg' filepath='block/blk-merge.c' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_rq_map_sg'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-merge.c' line='515' column='1'/>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-merge.c' line='515' column='1'/>
+        <parameter type-id='bf3ef905' name='sglist' filepath='block/blk-merge.c' line='516' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_queue_split' mangled-name='blk_queue_split' filepath='block/blk-merge.c' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_split'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-merge.c' line='352' column='1'/>
+        <parameter type-id='334817d1' name='bio' filepath='block/blk-merge.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-mq-cpumap.c' language='LANG_C89'>
+      <pointer-type-def type-id='32406f0a' size-in-bits='64' id='187ae308'/>
+      <function-decl name='blk_mq_map_queues' mangled-name='blk_mq_map_queues' filepath='block/blk-mq-cpumap.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_map_queues'>
+        <parameter type-id='187ae308' name='qmap' filepath='block/blk-mq-cpumap.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-mq-pci.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='c0e2acc9' size-in-bits='1088' id='f0bfbfd1'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='hotplug_slot' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='56' column='1' id='2dfcfaf9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='94bc2d77' visibility='default' filepath='include/linux/pci_hotplug.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci_hotplug.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pci_slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci_hotplug.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pci_hotplug.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mod_name' type-id='80f4b756' visibility='default' filepath='include/linux/pci_hotplug.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_controller' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='215' column='1' id='1f8bced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/msi.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/msi.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_irq' type-id='01170708' visibility='default' filepath='include/linux/msi.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_irqs' type-id='3c23f0a7' visibility='default' filepath='include/linux/msi.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='teardown_irq' type-id='694b6f36' visibility='default' filepath='include/linux/msi.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_sriov' size-in-bits='1280' is-struct='yes' visibility='default' filepath='drivers/pci/pci.h' line='319' column='1' id='1c590219'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pos' type-id='95e97e5e' visibility='default' filepath='drivers/pci/pci.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nres' type-id='95e97e5e' visibility='default' filepath='drivers/pci/pci.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cap' type-id='19c2251e' visibility='default' filepath='drivers/pci/pci.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ctrl' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='total_VFs' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='initial_VFs' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='num_VFs' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='offset' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='stride' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vf_device' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='pgsz' type-id='19c2251e' visibility='default' filepath='drivers/pci/pci.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='link' type-id='f9b06939' visibility='default' filepath='drivers/pci/pci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='max_VF_buses' type-id='f9b06939' visibility='default' filepath='drivers/pci/pci.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='driver_max_VFs' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='85196e3f' visibility='default' filepath='drivers/pci/pci.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='self' type-id='85196e3f' visibility='default' filepath='drivers/pci/pci.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class' type-id='19c2251e' visibility='default' filepath='drivers/pci/pci.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hdr_type' type-id='f9b06939' visibility='default' filepath='drivers/pci/pci.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='subsystem_vendor' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subsystem_device' type-id='1dc6a898' visibility='default' filepath='drivers/pci/pci.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='barsz' type-id='21e79dbc' visibility='default' filepath='drivers/pci/pci.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='drivers_autoprobe' type-id='b50a4934' visibility='default' filepath='drivers/pci/pci.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/pci/pci.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/pci/pci.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/pci/pci.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/pci/pci.h' line='346' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_vpd' is-struct='yes' visibility='default' is-declaration-only='yes' id='059a2256'/>
+      <class-decl name='pcie_link_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='49' column='1' id='2b7bb54d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pdev' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='downstream' type-id='85196e3f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='fe2d9f1d' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aspm_support' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='aspm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='aspm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='aspm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aspm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='clkpm_capable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='clkpm_enabled' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='clkpm_default' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='clkpm_disable' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='latency_up' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='latency_dw' type-id='d0622163' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acceptable' type-id='fa0d0a7f' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='l1ss' type-id='a1d8a938' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='c9d64c0d' size-in-bits='256' id='774e8b2d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='5218160d' size-in-bits='13056' id='2629ebcd'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='pci_dev' size-in-bits='25728' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='294' column='1' id='5c93f9a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subordinate' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='procent' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='slot' type-id='4f146b8a' visibility='default' filepath='include/linux/pci.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='devfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subsystem_vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='subsystem_device' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='hdr_type' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='pcie_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='600'>
+          <var-decl name='msi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='msix_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcie_mpss' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='rom_base_reg' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='632'>
+          <var-decl name='pin' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pcie_flags_reg' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dma_alias_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/pci.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='85b59624' visibility='default' filepath='include/linux/pci.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dma_parms' type-id='37251e77' visibility='default' filepath='include/linux/pci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='current_state' type-id='49c32219' visibility='default' filepath='include/linux/pci.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='imm_ready' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='pm_cap' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pme_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='pme_poll' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='d1_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='d2_support' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='no_d1d2' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='no_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='bridge_d3' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='d3cold_allowed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='mmio_always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='wakeup_prepared' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='runtime_d3cold' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='skip_bus_pm' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ignore_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='hotplug_user_indicators' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='clear_retrain_link' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='d3_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d3cold_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='link_state' type-id='fe2d9f1d' visibility='default' filepath='include/linux/pci.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ltr_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='eetlp_prefix_path' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='error_state' type-id='7d5a17ad' visibility='default' filepath='include/linux/pci.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='cfg_size' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='resource' type-id='2629ebcd' visibility='default' filepath='include/linux/pci.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='match_driver' type-id='b50a4934' visibility='default' filepath='include/linux/pci.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='transparent' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='io_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='pref_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='pref_64_window' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='multifunction' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='is_busmaster' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='no_64bit_msi' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='block_cfg_access' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='broken_parity_status' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='irq_reroute_variant' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='ari_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='ats_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pasid_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='pri_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='needs_freset' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='state_saved' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='is_physfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='is_virtfn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='reset_fn' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_hotplug_bridge' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='shpc_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_thunderbolt' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='untrusted' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='__aer_firmware_first_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='__aer_firmware_first' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='broken_intx_masking' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='io_window_1k' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='irq_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='non_compliant_bars' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='is_probed' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='link_active_reporting' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='no_vf_scan' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='no_command_memory' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22000'>
+          <var-decl name='dev_flags' type-id='0f4efb07' visibility='default' filepath='include/linux/pci.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='enable_cnt' type-id='49178f86' visibility='default' filepath='include/linux/pci.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22048'>
+          <var-decl name='saved_config_space' type-id='02fdec64' visibility='default' filepath='include/linux/pci.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22592'>
+          <var-decl name='saved_cap_space' type-id='e151255a' visibility='default' filepath='include/linux/pci.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22656'>
+          <var-decl name='rom_attr' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22720'>
+          <var-decl name='rom_attr_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22784'>
+          <var-decl name='res_attr' type-id='f0bfbfd1' visibility='default' filepath='include/linux/pci.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23872'>
+          <var-decl name='res_attr_wc' type-id='f0bfbfd1' visibility='default' filepath='include/linux/pci.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='msi_irq_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='vpd' type-id='0b72939c' visibility='default' filepath='include/linux/pci.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='' type-id='8cda7317' visibility='default' filepath='include/linux/pci.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='ats_cap' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25168'>
+          <var-decl name='ats_stu' type-id='f9b06939' visibility='default' filepath='include/linux/pci.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25184'>
+          <var-decl name='ats_ref_cnt' type-id='49178f86' visibility='default' filepath='include/linux/pci.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25216'>
+          <var-decl name='rom' type-id='2522883d' visibility='default' filepath='include/linux/pci.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25280'>
+          <var-decl name='romlen' type-id='b59d7dce' visibility='default' filepath='include/linux/pci.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25344'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/pci.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25408'>
+          <var-decl name='priv_flags' type-id='7359adad' visibility='default' filepath='include/linux/pci.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25600'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25664'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_bus' size-in-bits='10560' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='583' column='1' id='7e8e008e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='self' type-id='85196e3f' visibility='default' filepath='include/linux/pci.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slots' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resource' type-id='774e8b2d' visibility='default' filepath='include/linux/pci.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn_res' type-id='5218160d' visibility='default' filepath='include/linux/pci.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ops' type-id='2058826a' visibility='default' filepath='include/linux/pci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='msi' type-id='b9526cc1' visibility='default' filepath='include/linux/pci.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='procdir' type-id='d077e928' visibility='default' filepath='include/linux/pci.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2056'>
+          <var-decl name='primary' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='max_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2072'>
+          <var-decl name='cur_bus_speed' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='domain_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/pci.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='bridge_ctl' type-id='8efea9e5' visibility='default' filepath='include/linux/pci.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2512'>
+          <var-decl name='bus_flags' type-id='757fc982' visibility='default' filepath='include/linux/pci.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bridge' type-id='fa0b179b' visibility='default' filepath='include/linux/pci.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='legacy_io' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='legacy_mem' type-id='c0e2acc9' visibility='default' filepath='include/linux/pci.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_added' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='621' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='714' column='1' id='fc2007cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_bus' type-id='4a1c3304' visibility='default' filepath='include/linux/pci.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove_bus' type-id='7df445b9' visibility='default' filepath='include/linux/pci.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_bus' type-id='d479d76a' visibility='default' filepath='include/linux/pci.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read' type-id='ffde3570' visibility='default' filepath='include/linux/pci.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write' type-id='934d23eb' visibility='default' filepath='include/linux/pci.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='721' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_bus_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='221' column='1' id='757fc982'/>
+      <class-decl name='pci_slot' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='63' column='1' id='cce0f0cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='b47b0d41' visibility='default' filepath='include/linux/pci.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='number' type-id='002ac4a6' visibility='default' filepath='include/linux/pci.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/pci.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_driver' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='847' column='1' id='314e713e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pci.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='92fc8aa5' visibility='default' filepath='include/linux/pci.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='probe' type-id='6cc3a8b3' visibility='default' filepath='include/linux/pci.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='remove' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend_late' type-id='831f84c2' visibility='default' filepath='include/linux/pci.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume_early' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='resume' type-id='40672f7b' visibility='default' filepath='include/linux/pci.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sriov_configure' type-id='ab05e282' visibility='default' filepath='include/linux/pci.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='err_handler' type-id='2da88de7' visibility='default' filepath='include/linux/pci.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/pci.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/pci.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dynids' type-id='022719b7' visibility='default' filepath='include/linux/pci.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='867' 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='38' column='1' id='6cb59de2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subvendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='class_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_error_handlers' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='780' column='1' id='709bf5ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='error_detected' type-id='abc80f30' visibility='default' filepath='include/linux/pci.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mmio_enabled' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slot_reset' type-id='80b73a7b' visibility='default' filepath='include/linux/pci.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset_prepare' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset_done' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='01d543be' visibility='default' filepath='include/linux/pci.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='798' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_ers_result_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='757' column='1' id='453a795e'/>
+      <enum-decl name='pci_channel_state' filepath='include/linux/pci.h' line='164' column='1' id='c36cf4da'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='744' column='1' id='022719b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pci.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='746' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pci_power_t' type-id='95e97e5e' filepath='include/linux/pci.h' line='137' column='1' id='49c32219'/>
+      <typedef-decl name='pci_channel_state_t' type-id='f0981eeb' filepath='include/linux/pci.h' line='162' column='1' id='7d5a17ad'/>
+      <typedef-decl name='pci_dev_flags_t' type-id='8efea9e5' filepath='include/linux/pci.h' line='188' column='1' id='0f4efb07'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/pci.h' line='453' column='1' id='8cda7317'>
+        <data-member access='public'>
+          <var-decl name='sriov' type-id='e3be65f1' visibility='default' filepath='include/linux/pci.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='physfn' type-id='85196e3f' visibility='default' filepath='include/linux/pci.h' line='455' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='6cb59de2' const='yes' id='b947c5cd'/>
+      <pointer-type-def type-id='b947c5cd' size-in-bits='64' id='92fc8aa5'/>
+      <qualified-type-def type-id='709bf5ba' const='yes' id='b68346f7'/>
+      <pointer-type-def type-id='b68346f7' size-in-bits='64' id='2da88de7'/>
+      <pointer-type-def type-id='2dfcfaf9' size-in-bits='64' id='b47b0d41'/>
+      <pointer-type-def type-id='6334ba8a' size-in-bits='64' id='4a1c3304'/>
+      <pointer-type-def type-id='ba6c1a6f' size-in-bits='64' id='934d23eb'/>
+      <pointer-type-def type-id='89c3fb76' size-in-bits='64' id='ffde3570'/>
+      <pointer-type-def type-id='b4db8337' size-in-bits='64' id='40672f7b'/>
+      <pointer-type-def type-id='1e828e67' size-in-bits='64' id='6cc3a8b3'/>
+      <pointer-type-def type-id='173cc5a0' size-in-bits='64' id='ab05e282'/>
+      <pointer-type-def type-id='dedd4d90' size-in-bits='64' id='831f84c2'/>
+      <pointer-type-def type-id='1f8bced9' size-in-bits='64' id='b9526cc1'/>
+      <pointer-type-def type-id='7e8e008e' size-in-bits='64' id='d1feb554'/>
+      <pointer-type-def type-id='5c93f9a7' size-in-bits='64' id='85196e3f'/>
+      <pointer-type-def type-id='314e713e' size-in-bits='64' id='85b59624'/>
+      <pointer-type-def type-id='fc2007cc' size-in-bits='64' id='2058826a'/>
+      <pointer-type-def type-id='cce0f0cc' size-in-bits='64' id='4f146b8a'/>
+      <pointer-type-def type-id='1c590219' size-in-bits='64' id='e3be65f1'/>
+      <pointer-type-def type-id='059a2256' size-in-bits='64' id='0b72939c'/>
+      <pointer-type-def type-id='2b7bb54d' size-in-bits='64' id='fe2d9f1d'/>
+      <pointer-type-def type-id='b359f47f' size-in-bits='64' id='80b73a7b'/>
+      <pointer-type-def type-id='9325ec16' size-in-bits='64' id='abc80f30'/>
+      <pointer-type-def type-id='0181b08d' size-in-bits='64' id='7df445b9'/>
+      <pointer-type-def type-id='7d41fdf4' size-in-bits='64' id='01d543be'/>
+      <pointer-type-def type-id='9f1d7608' size-in-bits='64' id='d479d76a'/>
+      <function-decl name='blk_mq_pci_map_queues' mangled-name='blk_mq_pci_map_queues' filepath='block/blk-mq-pci.c' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_pci_map_queues'>
+        <parameter type-id='187ae308' name='qmap' filepath='block/blk-mq-pci.c' line='26' column='1'/>
+        <parameter type-id='85196e3f' name='pdev' filepath='block/blk-mq-pci.c' line='26' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='block/blk-mq-pci.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='d0622163' size-in-bits='512' id='fa0d0a7f'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='aspm_latency' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='44' column='1' id='d0622163'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l0s' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='l1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='79' column='1' id='a1d8a938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='up_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dw_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ctl2' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='61872327' size-in-bits='64' id='94bc2d77'/>
+      <function-type size-in-bits='64' id='6334ba8a'>
+        <parameter type-id='d1feb554'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba6c1a6f'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89c3fb76'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4db8337'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e828e67'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='92fc8aa5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='173cc5a0'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dedd4d90'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b359f47f'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='453a795e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9325ec16'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='c36cf4da'/>
+        <return type-id='453a795e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0181b08d'>
+        <parameter type-id='d1feb554'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d41fdf4'>
+        <parameter type-id='85196e3f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f1d7608'>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='c03e8273' size-in-bits='64' id='3c23f0a7'/>
+      <pointer-type-def type-id='da757fbe' size-in-bits='64' id='01170708'/>
+      <array-type-def dimensions='1' type-id='acc63fdf' size-in-bits='384' id='21e79dbc'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='512' id='02fdec64'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='deb48314' size-in-bits='64' id='694b6f36'/>
+      <qualified-type-def type-id='8d2c0dd2' const='yes' id='61872327'/>
+      <class-decl name='hotplug_slot_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='38' column='1' id='8d2c0dd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_attention_status' type-id='4b81d8e7' visibility='default' filepath='include/linux/pci_hotplug.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hardware_test' type-id='b3f54aba' visibility='default' filepath='include/linux/pci_hotplug.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_power_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_attention_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_latch_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_adapter_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset_slot' type-id='3801bb42' visibility='default' filepath='include/linux/pci_hotplug.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d9435f47' size-in-bits='64' id='1617c63b'/>
+      <pointer-type-def type-id='b6b1bef0' size-in-bits='64' id='3801bb42'/>
+      <pointer-type-def type-id='9d9db488' size-in-bits='64' id='b3f54aba'/>
+      <pointer-type-def type-id='025c78c3' size-in-bits='64' id='4b81d8e7'/>
+      <pointer-type-def type-id='ad4c5814' size-in-bits='64' id='db02d786'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-mq-tag.c' language='LANG_C89'>
+      <typedef-decl name='busy_tag_iter_fn' type-id='784e7aa9' filepath='include/linux/blk-mq.h' line='138' column='1' id='f8a88be2'/>
+      <pointer-type-def type-id='f8a88be2' size-in-bits='64' id='65a8a3df'/>
+      <function-decl name='blk_mq_unique_tag' mangled-name='blk_mq_unique_tag' filepath='block/blk-mq-tag.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unique_tag'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq-tag.c' line='556' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='blk_mq_tagset_wait_completed_request' mangled-name='blk_mq_tagset_wait_completed_request' filepath='block/blk-mq-tag.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tagset_wait_completed_request'>
+        <parameter type-id='cc26d15f' name='tagset' filepath='block/blk-mq-tag.c' line='375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_tagset_busy_iter' mangled-name='blk_mq_tagset_busy_iter' filepath='block/blk-mq-tag.c' line='346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tagset_busy_iter'>
+        <parameter type-id='cc26d15f' name='tagset' filepath='block/blk-mq-tag.c' line='346' column='1'/>
+        <parameter type-id='65a8a3df' name='fn' filepath='block/blk-mq-tag.c' line='347' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='block/blk-mq-tag.c' line='347' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='784e7aa9'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-mq-virtio.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b7a93b96' size-in-bits='infinite' id='5f759053'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='irq_affinity' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='279' column='1' id='bf33c00a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='post_vectors' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sets' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='set_size' type-id='49580a63' visibility='default' filepath='include/linux/interrupt.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='calc_sets' type-id='887112a7' visibility='default' filepath='include/linux/interrupt.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='285' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f1f6cfe9' size-in-bits='infinite' id='59d36c99'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='virtio_device' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='108' column='1' id='a23921c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/virtio.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='failed' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='config_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='config_change_pending' type-id='b50a4934' visibility='default' filepath='include/linux/virtio.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='config_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/virtio.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/virtio.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='id' type-id='7462f12f' visibility='default' filepath='include/linux/virtio.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='config' type-id='afc22511' visibility='default' filepath='include/linux/virtio.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='vringh_config' type-id='f9c3a0be' visibility='default' filepath='include/linux/virtio.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='vqs' type-id='72f469ec' visibility='default' filepath='include/linux/virtio.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='features' type-id='91ce1af9' visibility='default' filepath='include/linux/virtio.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='120' 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='427' column='1' id='7462f12f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vendor' type-id='3f1a6b60' visibility='default' filepath='include/linux/mod_devicetable.h' line='429' 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='70' column='1' id='d70a473a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='b22e78ee' visibility='default' filepath='include/linux/virtio_config.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='generation' type-id='fe5a9a49' visibility='default' filepath='include/linux/virtio_config.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_status' type-id='bbefcc2a' visibility='default' filepath='include/linux/virtio_config.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_status' type-id='3dc18b9c' visibility='default' filepath='include/linux/virtio_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='find_vqs' type-id='17035a6b' visibility='default' filepath='include/linux/virtio_config.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='del_vqs' type-id='33d93b18' visibility='default' filepath='include/linux/virtio_config.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_features' type-id='f428336a' visibility='default' filepath='include/linux/virtio_config.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='finalize_features' type-id='b89d0409' visibility='default' filepath='include/linux/virtio_config.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bus_name' type-id='eb8aa2f1' visibility='default' filepath='include/linux/virtio_config.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_vq_affinity' type-id='53a5ad54' visibility='default' filepath='include/linux/virtio_config.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_vq_affinity' type-id='7642cce6' visibility='default' filepath='include/linux/virtio_config.h' line='89' 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='d7c60ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='c881e0a0' 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='80f4b756' 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='5dbfcbb1' 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='f0981eeb' 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='f0981eeb' 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='eaa32e2f' visibility='default' filepath='include/linux/virtio.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vq_callback_t' type-id='efc29a3e' filepath='include/linux/virtio_config.h' line='69' column='1' id='b1376802'/>
+      <class-decl name='vringh_config_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/vringh.h' line='59' column='1' id='b16ef9f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='find_vrhs' type-id='7035601e' visibility='default' filepath='include/linux/vringh.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del_vrhs' type-id='33d93b18' visibility='default' filepath='include/linux/vringh.h' line='62' 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='20' column='1' id='499b654d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='little_endian' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='event_indices' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_barriers' type-id='b50a4934' visibility='default' filepath='include/linux/vringh.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_avail_idx' type-id='1dc6a898' visibility='default' filepath='include/linux/vringh.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='last_used_idx' type-id='1dc6a898' visibility='default' filepath='include/linux/vringh.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completed' type-id='19c2251e' visibility='default' filepath='include/linux/vringh.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vring' type-id='83eac9f7' visibility='default' filepath='include/linux/vringh.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='notify' type-id='f6482e38' visibility='default' filepath='include/linux/vringh.h' line='43' 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='121' column='1' id='83eac9f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='desc' type-id='a5e666e1' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='avail' type-id='79c5fcaf' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='used' type-id='00f2075d' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='128' 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='90' column='1' id='f0783229'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='b7a6fcff' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='next' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__virtio64' type-id='d3130597' filepath='include/uapi/linux/virtio_types.h' line='44' column='1' id='b7a6fcff'/>
+      <typedef-decl name='__virtio32' type-id='3f1a6b60' filepath='include/uapi/linux/virtio_types.h' line='43' column='1' id='43ae9528'/>
+      <typedef-decl name='__virtio16' type-id='d315442e' filepath='include/uapi/linux/virtio_types.h' line='42' column='1' id='b7a93b96'/>
+      <class-decl name='vring_avail' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='101' column='1' id='b3f6da27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='5f759053' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='104' 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='115' column='1' id='83e62d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idx' type-id='b7a93b96' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ring' type-id='59d36c99' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='118' 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='108' column='1' id='f1f6cfe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='43ae9528' visibility='default' filepath='include/uapi/linux/virtio_ring.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vrh_callback_t' type-id='7af6d412' filepath='include/linux/vringh.h' line='58' column='1' id='63a70519'/>
+      <qualified-type-def type-id='b50a4934' const='yes' id='4ab96a04'/>
+      <pointer-type-def type-id='4ab96a04' size-in-bits='64' id='cfe2266a'/>
+      <pointer-type-def type-id='f2207a6d' size-in-bits='64' id='eb8aa2f1'/>
+      <pointer-type-def type-id='ba92be9c' size-in-bits='64' id='7642cce6'/>
+      <qualified-type-def type-id='d70a473a' const='yes' id='17c0f561'/>
+      <pointer-type-def type-id='17c0f561' size-in-bits='64' id='afc22511'/>
+      <qualified-type-def type-id='b16ef9f3' const='yes' id='79eccb20'/>
+      <pointer-type-def type-id='79eccb20' size-in-bits='64' id='f9c3a0be'/>
+      <pointer-type-def type-id='f214de7d' size-in-bits='64' id='b89d0409'/>
+      <pointer-type-def type-id='e636858f' size-in-bits='64' id='17035a6b'/>
+      <pointer-type-def type-id='b70014f4' size-in-bits='64' id='7035601e'/>
+      <pointer-type-def type-id='628f102a' size-in-bits='64' id='53a5ad54'/>
+      <pointer-type-def type-id='bf33c00a' size-in-bits='64' id='8a876638'/>
+      <pointer-type-def type-id='1e91d6cd' size-in-bits='64' id='fe5a9a49'/>
+      <pointer-type-def type-id='70a1a668' size-in-bits='64' id='f428336a'/>
+      <pointer-type-def type-id='983b8510' size-in-bits='64' id='bbefcc2a'/>
+      <pointer-type-def type-id='a23921c9' size-in-bits='64' id='5dbfcbb1'/>
+      <pointer-type-def type-id='d7c60ba9' size-in-bits='64' id='91d0de51'/>
+      <pointer-type-def type-id='91d0de51' size-in-bits='64' id='06ce3ba1'/>
+      <pointer-type-def type-id='bbf47576' size-in-bits='64' id='33d93b18'/>
+      <pointer-type-def type-id='83c3d80a' size-in-bits='64' id='3dc18b9c'/>
+      <pointer-type-def type-id='6c0f5f3c' size-in-bits='64' id='b22e78ee'/>
+      <pointer-type-def type-id='efc29a3e' size-in-bits='64' id='c881e0a0'/>
+      <pointer-type-def type-id='af1578f6' size-in-bits='64' id='f6482e38'/>
+      <pointer-type-def type-id='b1376802' size-in-bits='64' id='14cefd25'/>
+      <pointer-type-def type-id='14cefd25' size-in-bits='64' id='d0d85e9d'/>
+      <pointer-type-def type-id='63a70519' size-in-bits='64' id='250d5c0a'/>
+      <pointer-type-def type-id='250d5c0a' size-in-bits='64' id='74080660'/>
+      <pointer-type-def type-id='b3f6da27' size-in-bits='64' id='79c5fcaf'/>
+      <pointer-type-def type-id='f0783229' size-in-bits='64' id='a5e666e1'/>
+      <pointer-type-def type-id='83e62d3d' size-in-bits='64' id='00f2075d'/>
+      <pointer-type-def type-id='499b654d' size-in-bits='64' id='05a6a00d'/>
+      <pointer-type-def type-id='05a6a00d' size-in-bits='64' id='0c4e1d65'/>
+      <function-decl name='blk_mq_virtio_map_queues' mangled-name='blk_mq_virtio_map_queues' filepath='block/blk-mq-virtio.c' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_virtio_map_queues'>
+        <parameter type-id='187ae308' name='qmap' filepath='block/blk-mq-virtio.c' line='24' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='block/blk-mq-virtio.c' line='25' column='1'/>
+        <parameter type-id='95e97e5e' name='first_vec' filepath='block/blk-mq-virtio.c' line='25' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f2207a6d'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba92be9c'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5f8a1ac4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f214de7d'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e636858f'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='06ce3ba1'/>
+        <parameter type-id='d0d85e9d'/>
+        <parameter type-id='13956559'/>
+        <parameter type-id='cfe2266a'/>
+        <parameter type-id='8a876638'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b70014f4'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='0c4e1d65'/>
+        <parameter type-id='74080660'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='628f102a'>
+        <parameter type-id='91d0de51'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e91d6cd'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a1a668'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='983b8510'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bbf47576'>
+        <parameter type-id='5dbfcbb1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83c3d80a'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c0f5f3c'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7af6d412'>
+        <parameter type-id='5dbfcbb1'/>
+        <parameter type-id='05a6a00d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efc29a3e'>
+        <parameter type-id='91d0de51'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af1578f6'>
+        <parameter type-id='05a6a00d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='ec180093' size-in-bits='64' id='887112a7'/>
+      <pointer-type-def type-id='6b2a4486' size-in-bits='64' id='5f8a1ac4'/>
+      <qualified-type-def type-id='1354385d' const='yes' id='6b2a4486'/>
+    </abi-instr>
+    <abi-instr 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='3093' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_tag_set'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3093' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_poll' mangled-name='blk_poll' filepath='block/blk-mq.c' line='3542' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_poll'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='3542' column='1'/>
+        <parameter type-id='041bc907' name='cookie' filepath='block/blk-mq.c' line='3542' column='1'/>
+        <parameter type-id='b50a4934' name='spin' filepath='block/blk-mq.c' line='3542' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_free_request' mangled-name='blk_mq_free_request' filepath='block/blk-mq.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_quiesce_queue' mangled-name='blk_mq_quiesce_queue' filepath='block/blk-mq.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_quiesce_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='235' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_unfreeze_queue' mangled-name='blk_mq_unfreeze_queue' filepath='block/blk-mq.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unfreeze_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='203' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_freeze_queue_start' mangled-name='blk_freeze_queue_start' filepath='block/blk-mq.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_freeze_queue_start'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__blk_mq_end_request' mangled-name='__blk_mq_end_request' filepath='block/blk-mq.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blk_mq_end_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='543' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-mq.c' line='543' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_update_nr_hw_queues' mangled-name='blk_mq_update_nr_hw_queues' filepath='block/blk-mq.c' line='3376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_update_nr_hw_queues'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3376' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_hw_queues' filepath='block/blk-mq.c' line='3376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_unquiesce_queue' mangled-name='blk_mq_unquiesce_queue' filepath='block/blk-mq.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_unquiesce_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='261' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_tag_to_rq' mangled-name='blk_mq_tag_to_rq' filepath='block/blk-mq.c' line='819' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_tag_to_rq'>
+        <parameter type-id='0461ecf5' name='tags' filepath='block/blk-mq.c' line='819' column='1'/>
+        <parameter type-id='f0981eeb' name='tag' filepath='block/blk-mq.c' line='819' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_mq_stop_hw_queue' mangled-name='blk_mq_stop_hw_queue' filepath='block/blk-mq.c' line='1583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_stop_hw_queue'>
+        <parameter type-id='a47d3467' name='hctx' filepath='block/blk-mq.c' line='1583' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_stopped_hw_queues'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='1638' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1638' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_start_request' mangled-name='blk_mq_start_request' filepath='block/blk-mq.c' line='681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_start_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='681' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_run_hw_queues' mangled-name='blk_mq_run_hw_queues' filepath='block/blk-mq.c' line='1540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_run_hw_queues'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='1540' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='block/blk-mq.c' line='1540' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_requeue_request' mangled-name='blk_mq_requeue_request' filepath='block/blk-mq.c' line='732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_requeue_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='732' column='1'/>
+        <parameter type-id='b50a4934' name='kick_requeue_list' filepath='block/blk-mq.c' line='732' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_request_completed' mangled-name='blk_mq_request_completed' filepath='block/blk-mq.c' line='675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_request_completed'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='675' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_init_sq_queue' mangled-name='blk_mq_init_sq_queue' filepath='block/blk-mq.c' line='2766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_sq_queue'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='2766' column='1'/>
+        <parameter type-id='e1962c5d' name='ops' filepath='block/blk-mq.c' line='2767' column='1'/>
+        <parameter type-id='f0981eeb' name='queue_depth' filepath='block/blk-mq.c' line='2768' column='1'/>
+        <parameter type-id='f0981eeb' name='set_flags' filepath='block/blk-mq.c' line='2769' column='1'/>
+        <return type-id='e7d2a5fc'/>
+      </function-decl>
+      <function-decl name='blk_mq_free_tag_set' mangled-name='blk_mq_free_tag_set' filepath='block/blk-mq.c' line='3179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_free_tag_set'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='3179' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_init_queue' mangled-name='blk_mq_init_queue' filepath='block/blk-mq.c' line='2742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_init_queue'>
+        <parameter type-id='cc26d15f' name='set' filepath='block/blk-mq.c' line='2742' column='1'/>
+        <return type-id='e7d2a5fc'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue_wait_timeout' mangled-name='blk_mq_freeze_queue_wait_timeout' filepath='block/blk-mq.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue_wait_timeout'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='167' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='block/blk-mq.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue_wait' mangled-name='blk_mq_freeze_queue_wait' filepath='block/blk-mq.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue_wait'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='161' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_freeze_queue' mangled-name='blk_mq_freeze_queue' filepath='block/blk-mq.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_freeze_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='193' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_end_request' mangled-name='blk_mq_end_request' filepath='block/blk-mq.c' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_end_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='569' column='1'/>
+        <parameter type-id='f4e2facd' name='error' filepath='block/blk-mq.c' line='569' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_delay_kick_requeue_list' mangled-name='blk_mq_delay_kick_requeue_list' filepath='block/blk-mq.c' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_delay_kick_requeue_list'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='811' column='1'/>
+        <parameter type-id='7359adad' name='msecs' filepath='block/blk-mq.c' line='812' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_mq_complete_request' mangled-name='blk_mq_complete_request' filepath='block/blk-mq.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_complete_request'>
+        <parameter type-id='3dad1a48' name='rq' filepath='block/blk-mq.c' line='660' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_mq_alloc_request_hctx' mangled-name='blk_mq_alloc_request_hctx' filepath='block/blk-mq.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_request_hctx'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='448' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-mq.c' line='449' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-mq.c' line='449' column='1'/>
+        <parameter type-id='f0981eeb' name='hctx_idx' filepath='block/blk-mq.c' line='449' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+      <function-decl name='blk_mq_alloc_request' mangled-name='blk_mq_alloc_request' filepath='block/blk-mq.c' line='424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_mq_alloc_request'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-mq.c' line='424' column='1'/>
+        <parameter type-id='f0981eeb' name='op' filepath='block/blk-mq.c' line='424' column='1'/>
+        <parameter type-id='346d62be' name='flags' filepath='block/blk-mq.c' line='425' column='1'/>
+        <return type-id='3dad1a48'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/blk-settings.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='32406f0a' size-in-bits='384' id='ffbe012f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='rq_qos_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='37' column='1' id='59969f99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='throttle' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='track' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='merge' type-id='923f12f8' visibility='default' filepath='block/blk-rq-qos.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='issue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='requeue' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='done' type-id='4b080d34' visibility='default' filepath='block/blk-rq-qos.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='done_bio' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup' type-id='7eeb4265' visibility='default' filepath='block/blk-rq-qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue_depth_changed' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exit' type-id='754d9fe1' visibility='default' filepath='block/blk-rq-qos.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='debugfs_attrs' type-id='e649198d' visibility='default' filepath='block/blk-rq-qos.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rq_qos_id' filepath='block/blk-rq-qos.h' line='16' column='1' id='51cb492d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RQ_QOS_WBT' value='0'/>
+        <enumerator name='RQ_QOS_LATENCY' value='1'/>
+        <enumerator name='RQ_QOS_COST' value='2'/>
+      </enum-decl>
+      <typedef-decl name='queue_rq_fn' type-id='32672900' filepath='include/linux/blk-mq.h' line='123' column='1' id='aa8737f6'/>
+      <class-decl name='blk_mq_queue_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='118' column='1' id='03a1b8ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rq' type-id='3dad1a48' visibility='default' filepath='include/linux/blk-mq.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last' type-id='b50a4934' visibility='default' filepath='include/linux/blk-mq.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='commit_rqs_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='125' column='1' id='ac1c385d'/>
+      <typedef-decl name='get_budget_fn' type-id='c2be64d1' filepath='include/linux/blk-mq.h' line='126' column='1' id='f47b0345'/>
+      <typedef-decl name='put_budget_fn' type-id='4e7ef9a4' filepath='include/linux/blk-mq.h' line='127' column='1' id='695ed59c'/>
+      <typedef-decl name='timeout_fn' type-id='9b58f3d9' filepath='include/linux/blk-mq.h' line='128' column='1' id='9509b3ac'/>
+      <enum-decl name='blk_eh_timer_return' filepath='include/linux/blkdev.h' line='304' column='1' id='0f4f6276'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_EH_DONE' value='0'/>
+        <enumerator name='BLK_EH_RESET_TIMER' value='1'/>
+      </enum-decl>
+      <typedef-decl name='poll_fn' type-id='8ce1651f' filepath='include/linux/blk-mq.h' line='139' column='1' id='9a083a6e'/>
+      <typedef-decl name='complete_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='142' column='1' id='f7915bc8'/>
+      <typedef-decl name='init_hctx_fn' type-id='02e8b0a1' filepath='include/linux/blk-mq.h' line='129' column='1' id='76c7c9df'/>
+      <typedef-decl name='exit_hctx_fn' type-id='4f1e6b9a' filepath='include/linux/blk-mq.h' line='130' column='1' id='e6f81ea9'/>
+      <typedef-decl name='init_request_fn' type-id='722249f6' filepath='include/linux/blk-mq.h' line='131' column='1' id='4e958389'/>
+      <class-decl name='blk_mq_queue_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='79' column='1' id='32406f0a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_map' type-id='807869d3' visibility='default' filepath='include/linux/blk-mq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='queue_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='exit_request_fn' type-id='9d05a3e9' filepath='include/linux/blk-mq.h' line='133' column='1' id='d63f4ff3'/>
+      <typedef-decl name='cleanup_rq_fn' type-id='45e743e9' filepath='include/linux/blk-mq.h' line='143' column='1' id='3577ed21'/>
+      <typedef-decl name='busy_fn' type-id='06c81b64' filepath='include/linux/blk-mq.h' line='141' column='1' id='53cc9bd6'/>
+      <typedef-decl name='map_queues_fn' type-id='640838f9' filepath='include/linux/blk-mq.h' line='140' column='1' id='6e9b911c'/>
+      <pointer-type-def type-id='0461ecf5' size-in-bits='64' id='c527e30d'/>
+      <pointer-type-def type-id='a3274c4b' size-in-bits='64' id='253d2bfb'/>
+      <pointer-type-def type-id='53cc9bd6' size-in-bits='64' id='65c718a5'/>
+      <pointer-type-def type-id='3577ed21' size-in-bits='64' id='ac8cd584'/>
+      <pointer-type-def type-id='ac1c385d' size-in-bits='64' id='10b13b44'/>
+      <pointer-type-def type-id='f7915bc8' size-in-bits='64' id='681aaa17'/>
+      <qualified-type-def type-id='03a1b8ac' const='yes' id='a2b0f227'/>
+      <pointer-type-def type-id='a2b0f227' size-in-bits='64' id='298d0a77'/>
+      <qualified-type-def type-id='ceee71ca' const='yes' id='6ace3b65'/>
+      <pointer-type-def type-id='6ace3b65' size-in-bits='64' id='71a75d5d'/>
+      <pointer-type-def type-id='e6f81ea9' size-in-bits='64' id='1fb247c2'/>
+      <pointer-type-def type-id='d63f4ff3' size-in-bits='64' id='9a2e43a6'/>
+      <pointer-type-def type-id='f47b0345' size-in-bits='64' id='9712eb54'/>
+      <pointer-type-def type-id='76c7c9df' size-in-bits='64' id='e1f2504c'/>
+      <pointer-type-def type-id='4e958389' size-in-bits='64' id='57e65d80'/>
+      <pointer-type-def type-id='03278979' size-in-bits='64' id='484cd9e5'/>
+      <pointer-type-def type-id='9bc672dd' size-in-bits='64' id='5694e921'/>
+      <pointer-type-def type-id='6e9b911c' size-in-bits='64' id='06a241cf'/>
+      <pointer-type-def type-id='9a083a6e' size-in-bits='64' id='969a6bcd'/>
+      <pointer-type-def type-id='695ed59c' size-in-bits='64' id='247cb56b'/>
+      <pointer-type-def type-id='f0966d3d' size-in-bits='64' id='7604ff1d'/>
+      <pointer-type-def type-id='aa8737f6' size-in-bits='64' id='cf544519'/>
+      <pointer-type-def type-id='59969f99' size-in-bits='64' id='4a3f5a61'/>
+      <pointer-type-def type-id='9509b3ac' size-in-bits='64' id='23816d7d'/>
+      <pointer-type-def type-id='9f5a4f22' size-in-bits='64' id='9682fd8c'/>
+      <pointer-type-def type-id='419202b8' size-in-bits='64' id='454b8f82'/>
+      <pointer-type-def type-id='0627f2fd' size-in-bits='64' id='754d9fe1'/>
+      <pointer-type-def type-id='d86a6269' size-in-bits='64' id='7eeb4265'/>
+      <pointer-type-def type-id='836381ca' size-in-bits='64' id='4b080d34'/>
+      <pointer-type-def type-id='4b4e7d36' size-in-bits='64' id='923f12f8'/>
+      <pointer-type-def type-id='96bf0a3b' size-in-bits='64' id='05a372cf'/>
+      <function-decl name='blk_set_stacking_limits' mangled-name='blk_set_stacking_limits' filepath='block/blk-settings.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_set_stacking_limits'>
+        <parameter type-id='7604ff1d' name='lim' filepath='block/blk-settings.c' line='73' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_write_cache' mangled-name='blk_queue_write_cache' filepath='block/blk-settings.c' line='836' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_write_cache'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='836' column='1'/>
+        <parameter type-id='b50a4934' name='wc' filepath='block/blk-settings.c' line='836' column='1'/>
+        <parameter type-id='b50a4934' name='fua' filepath='block/blk-settings.c' line='836' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_virt_boundary' mangled-name='blk_queue_virt_boundary' filepath='block/blk-settings.c' line='761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_virt_boundary'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='761' column='1'/>
+        <parameter type-id='7359adad' name='mask' filepath='block/blk-settings.c' line='761' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_update_dma_alignment' mangled-name='blk_queue_update_dma_alignment' filepath='block/blk-settings.c' line='806' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_update_dma_alignment'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='806' column='1'/>
+        <parameter type-id='95e97e5e' name='mask' filepath='block/blk-settings.c' line='806' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_rq_timeout' mangled-name='blk_queue_rq_timeout' filepath='block/blk-settings.c' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_rq_timeout'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='25' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout' filepath='block/blk-settings.c' line='25' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_physical_block_size' mangled-name='blk_queue_physical_block_size' filepath='block/blk-settings.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_physical_block_size'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='353' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='block/blk-settings.c' line='353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_write_zeroes_sectors' mangled-name='blk_queue_max_write_zeroes_sectors' filepath='block/blk-settings.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_write_zeroes_sectors'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='253' column='1'/>
+        <parameter type-id='f0981eeb' name='max_write_zeroes_sectors' filepath='block/blk-settings.c' line='254' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segments' mangled-name='blk_queue_max_segments' filepath='block/blk-settings.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segments'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='269' column='1'/>
+        <parameter type-id='8efea9e5' name='max_segments' filepath='block/blk-settings.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_segment_size' mangled-name='blk_queue_max_segment_size' filepath='block/blk-settings.c' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_segment_size'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='306' column='1'/>
+        <parameter type-id='f0981eeb' name='max_size' filepath='block/blk-settings.c' line='306' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_hw_sectors' mangled-name='blk_queue_max_hw_sectors' filepath='block/blk-settings.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_hw_sectors'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='183' column='1'/>
+        <parameter type-id='f0981eeb' name='max_hw_sectors' filepath='block/blk-settings.c' line='183' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_discard_segments' mangled-name='blk_queue_max_discard_segments' filepath='block/blk-settings.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_discard_segments'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='290' column='1'/>
+        <parameter type-id='8efea9e5' name='max_segments' filepath='block/blk-settings.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_max_discard_sectors' mangled-name='blk_queue_max_discard_sectors' filepath='block/blk-settings.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_max_discard_sectors'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='227' column='1'/>
+        <parameter type-id='f0981eeb' name='max_discard_sectors' filepath='block/blk-settings.c' line='228' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_make_request' mangled-name='blk_queue_make_request' filepath='block/blk-settings.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_make_request'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='111' column='1'/>
+        <parameter type-id='8f01ad5c' name='mfn' filepath='block/blk-settings.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_logical_block_size' mangled-name='blk_queue_logical_block_size' filepath='block/blk-settings.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_logical_block_size'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='331' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='block/blk-settings.c' line='331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_opt' mangled-name='blk_queue_io_opt' filepath='block/blk-settings.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_opt'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='459' column='1'/>
+        <parameter type-id='f0981eeb' name='opt' filepath='block/blk-settings.c' line='459' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_io_min' mangled-name='blk_queue_io_min' filepath='block/blk-settings.c' line='421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_io_min'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='421' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='block/blk-settings.c' line='421' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_chunk_sectors' mangled-name='blk_queue_chunk_sectors' filepath='block/blk-settings.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_chunk_sectors'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='215' column='1'/>
+        <parameter type-id='f0981eeb' name='chunk_sectors' filepath='block/blk-settings.c' line='215' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_can_use_dma_map_merging' mangled-name='blk_queue_can_use_dma_map_merging' filepath='block/blk-settings.c' line='874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_can_use_dma_map_merging'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='874' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='block/blk-settings.c' line='875' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='blk_queue_bounce_limit' mangled-name='blk_queue_bounce_limit' filepath='block/blk-settings.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_bounce_limit'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='136' column='1'/>
+        <parameter type-id='91ce1af9' name='max_addr' filepath='block/blk-settings.c' line='136' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_queue_alignment_offset' mangled-name='blk_queue_alignment_offset' filepath='block/blk-settings.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_queue_alignment_offset'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/blk-settings.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='block/blk-settings.c' line='376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9b58f3d9'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='0f4f6276'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ce1651f'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02e8b0a1'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='640838f9'>
+        <parameter type-id='cc26d15f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='722249f6'>
+        <parameter type-id='cc26d15f'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03278979'>
+        <parameter type-id='71a75d5d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bc672dd'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32672900'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='298d0a77'/>
+        <return type-id='f4e2facd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2be64d1'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06c81b64'>
+        <parameter type-id='e7d2a5fc'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f5a4f22'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e7ef9a4'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f1e6b9a'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d05a3e9'>
+        <parameter type-id='cc26d15f'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='419202b8'>
+        <parameter type-id='1f98c663'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45e743e9'>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0627f2fd'>
+        <parameter type-id='c3a28778'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d86a6269'>
+        <parameter type-id='c3a28778'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='836381ca'>
+        <parameter type-id='c3a28778'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b4e7d36'>
+        <parameter type-id='c3a28778'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96bf0a3b'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='69bf7bee' size-in-bits='64' id='b53e8dbb'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/genhd.c' language='LANG_C89'>
+      <pointer-type-def type-id='445b0832' size-in-bits='64' id='a8735e7c'/>
+      <pointer-type-def type-id='eed59d16' size-in-bits='64' id='aaaf3990'/>
+      <function-decl name='__alloc_disk_node' mangled-name='__alloc_disk_node' filepath='block/genhd.c' line='1465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_disk_node'>
+        <parameter type-id='95e97e5e' name='minors' filepath='block/genhd.c' line='1465' column='1'/>
+        <parameter type-id='95e97e5e' name='node_id' filepath='block/genhd.c' line='1465' column='1'/>
+        <return type-id='33c599da'/>
+      </function-decl>
+      <function-decl name='blk_lookup_devt' mangled-name='blk_lookup_devt' filepath='block/genhd.c' line='1430' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_lookup_devt'>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='1430' column='1'/>
+        <parameter type-id='95e97e5e' name='partno' filepath='block/genhd.c' line='1430' column='1'/>
+        <return type-id='8504f260'/>
+      </function-decl>
+      <function-decl name='bdget_disk' mangled-name='bdget_disk' filepath='block/genhd.c' line='927' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdget_disk'>
+        <parameter type-id='33c599da' name='disk' filepath='block/genhd.c' line='927' column='1'/>
+        <parameter type-id='95e97e5e' name='partno' filepath='block/genhd.c' line='927' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='unregister_blkdev' mangled-name='unregister_blkdev' filepath='block/genhd.c' line='421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_blkdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='block/genhd.c' line='421' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='421' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_disk_ro' mangled-name='set_disk_ro' filepath='block/genhd.c' line='1578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_disk_ro'>
+        <parameter type-id='33c599da' name='disk' filepath='block/genhd.c' line='1578' column='1'/>
+        <parameter type-id='95e97e5e' name='flag' filepath='block/genhd.c' line='1578' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_blkdev' mangled-name='register_blkdev' filepath='block/genhd.c' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_blkdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='block/genhd.c' line='357' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='block/genhd.c' line='357' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='put_disk' mangled-name='put_disk' filepath='block/genhd.c' line='1539' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_disk'>
+        <parameter type-id='33c599da' name='disk' filepath='block/genhd.c' line='1539' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_add_disk' mangled-name='device_add_disk' filepath='block/genhd.c' line='760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add_disk'>
+        <parameter type-id='fa0b179b' name='parent' filepath='block/genhd.c' line='760' column='1'/>
+        <parameter type-id='33c599da' name='disk' filepath='block/genhd.c' line='760' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='block/genhd.c' line='761' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='del_gendisk' mangled-name='del_gendisk' filepath='block/genhd.c' line='774' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_gendisk'>
+        <parameter type-id='33c599da' name='disk' filepath='block/genhd.c' line='774' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_unregister_region' mangled-name='blk_unregister_region' filepath='block/genhd.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_unregister_region'>
+        <parameter type-id='8504f260' name='devt' filepath='block/genhd.c' line='576' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blk_register_region' mangled-name='blk_register_region' filepath='block/genhd.c' line='567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_register_region'>
+        <parameter type-id='8504f260' name='devt' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='7359adad' name='range' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='block/genhd.c' line='567' column='1'/>
+        <parameter type-id='aaaf3990' name='probe' filepath='block/genhd.c' line='568' column='1'/>
+        <parameter type-id='a8735e7c' name='lock' filepath='block/genhd.c' line='569' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='block/genhd.c' line='569' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bdev_read_only' mangled-name='bdev_read_only' filepath='block/genhd.c' line='1596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdev_read_only'>
+        <parameter type-id='b88dd945' name='bdev' filepath='block/genhd.c' line='1596' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='445b0832'>
+        <parameter type-id='8504f260'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eed59d16'>
+        <parameter type-id='8504f260'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='d30bdc51'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/keyslot-manager.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='128' id='49580a63'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='blk_ksm_ll_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='39' column='1' id='85385c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keyslot_program' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='keyslot_evict' type-id='c1e89b34' visibility='default' filepath='include/linux/keyslot-manager.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='derive_raw_secret' type-id='9f82b8fd' visibility='default' filepath='include/linux/keyslot-manager.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='24254372' size-in-bits='64' id='c1e89b34'/>
+      <pointer-type-def type-id='bba85209' size-in-bits='64' id='9f82b8fd'/>
+      <function-decl name='devm_blk_ksm_init' mangled-name='devm_blk_ksm_init' filepath='block/keyslot-manager.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_blk_ksm_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='block/keyslot-manager.c' line='152' column='1'/>
+        <parameter type-id='bf8a20d2' name='ksm' filepath='block/keyslot-manager.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='num_slots' filepath='block/keyslot-manager.c' line='153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='24254372'>
+        <parameter type-id='bf8a20d2'/>
+        <parameter type-id='9baaf905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bba85209'>
+        <parameter type-id='bf8a20d2'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/partition-generic.c' language='LANG_C89'>
+      <function-decl name='__bdevname' mangled-name='__bdevname' filepath='block/partition-generic.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bdevname'>
+        <parameter type-id='8504f260' name='dev' filepath='block/partition-generic.c' line='65' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='block/partition-generic.c' line='65' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='bdevname' mangled-name='bdevname' filepath='block/partition-generic.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdevname'>
+        <parameter type-id='b88dd945' name='bdev' filepath='block/partition-generic.c' line='47' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='block/partition-generic.c' line='47' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='block/scsi_ioctl.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='64' id='561570b5'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='infinite' id='5e6516ee'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='scsi_ioctl_command' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='27' column='1' id='85553493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='inlen' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='outlen' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/scsi/scsi_ioctl.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='85553493' size-in-bits='64' id='2926d4f3'/>
+      <var-decl name='scsi_command_size_tbl' type-id='561570b5' mangled-name='scsi_command_size_tbl' visibility='default' filepath='block/scsi_ioctl.c' line='31' column='1' elf-symbol-id='scsi_command_size_tbl'/>
+      <function-decl name='sg_scsi_ioctl' mangled-name='sg_scsi_ioctl' filepath='block/scsi_ioctl.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_scsi_ioctl'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='33c599da' name='disk' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='block/scsi_ioctl.c' line='404' column='1'/>
+        <parameter type-id='2926d4f3' name='sic' filepath='block/scsi_ioctl.c' line='405' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blk_verify_command' mangled-name='blk_verify_command' filepath='block/scsi_ioctl.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blk_verify_command'>
+        <parameter type-id='cf536864' name='cmd' filepath='block/scsi_ioctl.c' line='196' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='block/scsi_ioctl.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/ablkcipher.c' language='LANG_C89'>
+      <var-decl name='crypto_ablkcipher_type' type-id='3e448446' mangled-name='crypto_ablkcipher_type' visibility='default' filepath='crypto/ablkcipher.c' line='399' column='1' elf-symbol-id='crypto_ablkcipher_type'/>
+      <qualified-type-def type-id='caca298d' const='yes' id='3e448446'/>
+      <class-decl name='crypto_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='31' column='1' id='caca298d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctxsize' type-id='a506a456' visibility='default' filepath='include/crypto/algapi.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extsize' type-id='f77c2568' visibility='default' filepath='include/crypto/algapi.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='d066db18' visibility='default' filepath='include/crypto/algapi.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_tfm' type-id='469599ea' visibility='default' filepath='include/crypto/algapi.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show' type-id='2c17fd2e' visibility='default' filepath='include/crypto/algapi.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report' type-id='2108b777' visibility='default' filepath='include/crypto/algapi.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='maskclear' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='maskset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tfmsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d093a820' size-in-bits='64' id='469599ea'/>
+      <pointer-type-def type-id='b739ffde' size-in-bits='64' id='d066db18'/>
+      <pointer-type-def type-id='d10f08e3' size-in-bits='64' id='2108b777'/>
+      <pointer-type-def type-id='cdd79d4e' size-in-bits='64' id='f77c2568'/>
+      <pointer-type-def type-id='3642b004' size-in-bits='64' id='a506a456'/>
+      <pointer-type-def type-id='cc2d5b01' size-in-bits='64' id='3aa8795d'/>
+      <pointer-type-def type-id='26d45b0c' size-in-bits='64' id='2c17fd2e'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/aead.c' language='LANG_C89'>
+      <class-decl name='aead_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='130' column='1' id='94111b83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='4598a9be' visibility='default' filepath='include/crypto/aead.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setauthsize' type-id='d87ec006' visibility='default' filepath='include/crypto/aead.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='a97ec1c4' visibility='default' filepath='include/crypto/aead.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='a97ec1c4' visibility='default' filepath='include/crypto/aead.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init' type-id='3fb740ac' visibility='default' filepath='include/crypto/aead.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='465e35b9' visibility='default' filepath='include/crypto/aead.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='maxauthsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='chunksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/aead.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_aead' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='146' column='1' id='472efbee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/aead.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='aead_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/aead.h' line='81' column='1' id='850096b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/aead.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='assoclen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cryptlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/aead.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iv' type-id='8bff8096' visibility='default' filepath='include/crypto/aead.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/crypto/aead.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/aead.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='94111b83' size-in-bits='64' id='e4163de3'/>
+      <pointer-type-def type-id='850096b4' size-in-bits='64' id='146bc842'/>
+      <pointer-type-def type-id='472efbee' size-in-bits='64' id='a585cbc4'/>
+      <pointer-type-def type-id='c0de8daa' size-in-bits='64' id='a97ec1c4'/>
+      <pointer-type-def type-id='e4d537fa' size-in-bits='64' id='3fb740ac'/>
+      <pointer-type-def type-id='44b564e4' size-in-bits='64' id='4598a9be'/>
+      <pointer-type-def type-id='a41d4f0c' size-in-bits='64' id='d87ec006'/>
+      <pointer-type-def type-id='309421a5' size-in-bits='64' id='465e35b9'/>
+      <function-decl name='crypto_unregister_aead' mangled-name='crypto_unregister_aead' filepath='crypto/aead.c' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_aead'>
+        <parameter type-id='e4163de3' name='alg' filepath='crypto/aead.c' line='416' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_register_aead' mangled-name='crypto_register_aead' filepath='crypto/aead.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_aead'>
+        <parameter type-id='e4163de3' name='alg' filepath='crypto/aead.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_aead' mangled-name='crypto_alloc_aead' filepath='crypto/aead.c' line='379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_aead'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/aead.c' line='379' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/aead.c' line='379' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/aead.c' line='379' column='1'/>
+        <return type-id='a585cbc4'/>
+      </function-decl>
+      <function-decl name='crypto_aead_setkey' mangled-name='crypto_aead_setkey' filepath='crypto/aead.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_setkey'>
+        <parameter type-id='a585cbc4' name='tfm' filepath='crypto/aead.c' line='48' column='1'/>
+        <parameter type-id='bbaf3419' name='key' filepath='crypto/aead.c' line='49' column='1'/>
+        <parameter type-id='f0981eeb' name='keylen' filepath='crypto/aead.c' line='49' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_aead_setauthsize' mangled-name='crypto_aead_setauthsize' filepath='crypto/aead.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_setauthsize'>
+        <parameter type-id='a585cbc4' name='tfm' filepath='crypto/aead.c' line='69' column='1'/>
+        <parameter type-id='f0981eeb' name='authsize' filepath='crypto/aead.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_aead_encrypt' mangled-name='crypto_aead_encrypt' filepath='crypto/aead.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_aead_encrypt'>
+        <parameter type-id='146bc842' name='req' filepath='crypto/aead.c' line='88' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='crypto_alg' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='553' column='1' id='514fe525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cra_list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cra_users' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cra_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cra_blocksize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cra_ctxsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='cra_alignmask' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cra_priority' type-id='95e97e5e' visibility='default' filepath='include/linux/crypto.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cra_refcnt' type-id='64615833' visibility='default' filepath='include/linux/crypto.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cra_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cra_driver_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cra_type' type-id='71dc7604' visibility='default' filepath='include/linux/crypto.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cra_u' type-id='89e73658' visibility='default' filepath='include/linux/crypto.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cra_init' type-id='469599ea' visibility='default' filepath='include/linux/crypto.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cra_exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='cra_destroy' type-id='33e7622c' visibility='default' filepath='include/linux/crypto.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cra_module' type-id='2730d015' visibility='default' filepath='include/linux/crypto.h' line='581' 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='160' column='1' id='5e6083f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete' type-id='2cfb2e6f' visibility='default' filepath='include/linux/crypto.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tfm' type-id='dfeb7f6c' visibility='default' filepath='include/linux/crypto.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='166' 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='764' column='1' id='0328c8b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crt_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crt_u' type-id='1f411b02' visibility='default' filepath='include/linux/crypto.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__crt_alg' type-id='67f526b5' visibility='default' filepath='include/linux/crypto.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__crt_ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='779' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='c0de8daa'>
+        <parameter type-id='146bc842'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4d537fa'>
+        <parameter type-id='a585cbc4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='44b564e4'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a41d4f0c'>
+        <parameter type-id='a585cbc4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='309421a5'>
+        <parameter type-id='a585cbc4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='3e448446' size-in-bits='64' id='71dc7604'/>
+      <pointer-type-def type-id='514fe525' size-in-bits='64' id='67f526b5'/>
+      <pointer-type-def type-id='0328c8b6' size-in-bits='64' id='dfeb7f6c'/>
+      <typedef-decl name='crypto_completion_t' type-id='60d662f3' filepath='include/linux/crypto.h' line='151' column='1' id='2cfb2e6f'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='570' column='1' id='89e73658'>
+        <data-member access='public'>
+          <var-decl name='ablkcipher' type-id='67574995' visibility='default' filepath='include/linux/crypto.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='blkcipher' type-id='69794f86' visibility='default' filepath='include/linux/crypto.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cipher' type-id='208c9717' visibility='default' filepath='include/linux/crypto.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compress' type-id='380acddc' visibility='default' filepath='include/linux/crypto.h' line='574' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='768' column='1' id='1f411b02'>
+        <data-member access='public'>
+          <var-decl name='ablkcipher' type-id='3bbbf306' visibility='default' filepath='include/linux/crypto.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='blkcipher' type-id='a93bd501' visibility='default' filepath='include/linux/crypto.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cipher' type-id='015d8760' visibility='default' filepath='include/linux/crypto.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compress' type-id='2fcb265f' visibility='default' filepath='include/linux/crypto.h' line='772' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='58d69ec2' size-in-bits='64' id='33e7622c'/>
+      <pointer-type-def type-id='420b230d' size-in-bits='64' id='3ba771a1'/>
+      <class-decl name='ablkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='235' column='1' id='67574995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ablkcipher_tfm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='721' column='1' id='3bbbf306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='7171de96' visibility='default' filepath='include/linux/crypto.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='730' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='257' column='1' id='69794f86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='269' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_tfm' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='733' column='1' id='a93bd501'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='739' 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='319' column='1' id='208c9717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cia_min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cia_max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cia_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cia_encrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cia_decrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='325' 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='743' column='1' id='015d8760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cit_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cit_encrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cit_decrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='747' 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='339' column='1' id='380acddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coa_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coa_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='342' 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='750' column='1' id='2fcb265f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cot_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cot_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='754' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dcb10fbf' size-in-bits='64' id='60d662f3'/>
+      <pointer-type-def type-id='609c0c20' size-in-bits='64' id='7171de96'/>
+      <pointer-type-def type-id='9b8b35dc' size-in-bits='64' id='68e5f4e6'/>
+      <pointer-type-def type-id='01941a31' size-in-bits='64' id='3347d7ed'/>
+      <pointer-type-def type-id='3c5b888e' size-in-bits='64' id='214533b0'/>
+      <pointer-type-def type-id='1af55526' size-in-bits='64' id='b201adb8'/>
+      <pointer-type-def type-id='38c67a4b' size-in-bits='64' id='8801b8af'/>
+      <pointer-type-def type-id='54d829fa' size-in-bits='64' id='f76f0ea4'/>
+      <class-decl name='crypto_ablkcipher' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='782' column='1' id='609c0c20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='783' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/ahash.c' language='LANG_C89'>
+      <class-decl name='ahash_alg' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='128' column='1' id='d0f077d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='c509dbc2' visibility='default' filepath='include/crypto/hash.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='halg' type-id='a3fe44e4' visibility='default' filepath='include/crypto/hash.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ahash_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='49' column='1' id='41207a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/hash.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/hash.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='result' type-id='8bff8096' visibility='default' filepath='include/crypto/hash.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/crypto/hash.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_ahash' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='203' column='1' id='8eb3840c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='0b5e03e0' visibility='default' filepath='include/crypto/hash.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='77c96f7a' visibility='default' filepath='include/crypto/hash.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='c509dbc2' visibility='default' filepath='include/crypto/hash.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/hash.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hash_alg_common' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='42' column='1' id='a3fe44e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='digestsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='statesize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/hash.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d0f077d9' size-in-bits='64' id='16144ad1'/>
+      <pointer-type-def type-id='41207a16' size-in-bits='64' id='6f3c82ac'/>
+      <pointer-type-def type-id='8eb3840c' size-in-bits='64' id='1351523a'/>
+      <pointer-type-def type-id='e501fad6' size-in-bits='64' id='0b5e03e0'/>
+      <pointer-type-def type-id='928ea938' size-in-bits='64' id='77c96f7a'/>
+      <pointer-type-def type-id='c2b07168' size-in-bits='64' id='c509dbc2'/>
+      <function-decl name='crypto_unregister_ahash' mangled-name='crypto_unregister_ahash' filepath='crypto/ahash.c' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_ahash'>
+        <parameter type-id='16144ad1' name='alg' filepath='crypto/ahash.c' line='601' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_ahash' mangled-name='crypto_register_ahash' filepath='crypto/ahash.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_ahash'>
+        <parameter type-id='16144ad1' name='alg' filepath='crypto/ahash.c' line='588' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_has_ahash' mangled-name='crypto_has_ahash' filepath='crypto/ahash.c' line='566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_has_ahash'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/ahash.c' line='566' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/ahash.c' line='566' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/ahash.c' line='566' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_ahash' mangled-name='crypto_alloc_ahash' filepath='crypto/ahash.c' line='559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_ahash'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/ahash.c' line='559' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/ahash.c' line='559' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/ahash.c' line='560' column='1'/>
+        <return type-id='1351523a'/>
+      </function-decl>
+      <function-decl name='crypto_ahash_setkey' mangled-name='crypto_ahash_setkey' filepath='crypto/ahash.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_ahash_setkey'>
+        <parameter type-id='1351523a' name='tfm' filepath='crypto/ahash.c' line='203' column='1'/>
+        <parameter type-id='bbaf3419' name='key' filepath='crypto/ahash.c' line='203' column='1'/>
+        <parameter type-id='f0981eeb' name='keylen' filepath='crypto/ahash.c' line='204' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_ahash_digest' mangled-name='crypto_ahash_digest' filepath='crypto/ahash.c' line='399' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_ahash_digest'>
+        <parameter type-id='6f3c82ac' name='req' filepath='crypto/ahash.c' line='399' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e501fad6'>
+        <parameter type-id='6f3c82ac'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='928ea938'>
+        <parameter type-id='6f3c82ac'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2b07168'>
+        <parameter type-id='1351523a'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/algapi.c' language='LANG_C89'>
+      <class-decl name='crypto_spawn' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='67' column='1' id='58ba85d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alg' type-id='67f526b5' visibility='default' filepath='include/crypto/algapi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='inst' type-id='708ae4d0' visibility='default' filepath='include/crypto/algapi.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frontend' type-id='71dc7604' visibility='default' filepath='include/crypto/algapi.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/crypto/algapi.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='590223f8' size-in-bits='64' id='1a8fddbe'/>
+      <pointer-type-def type-id='58ba85d8' size-in-bits='64' id='5f880e0e'/>
+      <function-decl name='crypto_unregister_alg' mangled-name='crypto_unregister_alg' filepath='crypto/algapi.c' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_alg'>
+        <parameter type-id='67f526b5' name='alg' filepath='crypto/algapi.c' line='418' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_alg' mangled-name='crypto_register_alg' filepath='crypto/algapi.c' line='383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_alg'>
+        <parameter type-id='67f526b5' name='alg' filepath='crypto/algapi.c' line='383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_enqueue_request' mangled-name='crypto_enqueue_request' filepath='crypto/algapi.c' line='904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_enqueue_request'>
+        <parameter type-id='1a8fddbe' name='queue' filepath='crypto/algapi.c' line='904' column='1'/>
+        <parameter type-id='af5eeab9' name='request' filepath='crypto/algapi.c' line='905' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_template' mangled-name='crypto_unregister_template' filepath='crypto/algapi.c' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_template'>
+        <parameter type-id='f0f856cb' name='tmpl' filepath='crypto/algapi.c' line='514' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_spawn_tfm' mangled-name='crypto_spawn_tfm' filepath='crypto/algapi.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_spawn_tfm'>
+        <parameter type-id='5f880e0e' name='spawn' filepath='crypto/algapi.c' line='712' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/algapi.c' line='712' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/algapi.c' line='713' column='1'/>
+        <return type-id='dfeb7f6c'/>
+      </function-decl>
+      <function-decl name='crypto_register_template' mangled-name='crypto_register_template' filepath='crypto/algapi.c' line='474' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_template'>
+        <parameter type-id='f0f856cb' name='tmpl' filepath='crypto/algapi.c' line='474' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_init_spawn' mangled-name='crypto_init_spawn' filepath='crypto/algapi.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_init_spawn'>
+        <parameter type-id='5f880e0e' name='spawn' filepath='crypto/algapi.c' line='632' column='1'/>
+        <parameter type-id='67f526b5' name='alg' filepath='crypto/algapi.c' line='632' column='1'/>
+        <parameter type-id='708ae4d0' name='inst' filepath='crypto/algapi.c' line='633' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/algapi.c' line='633' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_init_queue' mangled-name='crypto_init_queue' filepath='crypto/algapi.c' line='895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_init_queue'>
+        <parameter type-id='1a8fddbe' name='queue' filepath='crypto/algapi.c' line='895' column='1'/>
+        <parameter type-id='f0981eeb' name='max_qlen' filepath='crypto/algapi.c' line='895' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_inc' mangled-name='crypto_inc' filepath='crypto/algapi.c' line='959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_inc'>
+        <parameter type-id='8bff8096' name='a' filepath='crypto/algapi.c' line='959' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='crypto/algapi.c' line='959' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_dequeue_request' mangled-name='crypto_dequeue_request' filepath='crypto/algapi.c' line='927' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_dequeue_request'>
+        <parameter type-id='1a8fddbe' name='queue' filepath='crypto/algapi.c' line='927' column='1'/>
+        <return type-id='af5eeab9'/>
+      </function-decl>
+      <function-decl name='crypto_check_attr_type' mangled-name='crypto_check_attr_type' filepath='crypto/algapi.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_check_attr_type'>
+        <parameter type-id='c161b868' name='tb' filepath='crypto/algapi.c' line='789' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/algapi.c' line='789' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_attr_alg2' mangled-name='crypto_attr_alg2' filepath='crypto/algapi.c' line='822' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_attr_alg2'>
+        <parameter type-id='f28646d2' name='rta' filepath='crypto/algapi.c' line='822' column='1'/>
+        <parameter type-id='71dc7604' name='frontend' filepath='crypto/algapi.c' line='823' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/algapi.c' line='824' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/algapi.c' line='824' column='1'/>
+        <return type-id='67f526b5'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_instance' mangled-name='crypto_alloc_instance' filepath='crypto/algapi.c' line='869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_instance'>
+        <parameter type-id='80f4b756' name='name' filepath='crypto/algapi.c' line='869' column='1'/>
+        <parameter type-id='67f526b5' name='alg' filepath='crypto/algapi.c' line='869' column='1'/>
+        <parameter type-id='f0981eeb' name='head' filepath='crypto/algapi.c' line='870' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__crypto_xor' mangled-name='__crypto_xor' filepath='crypto/algapi.c' line='977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__crypto_xor'>
+        <parameter type-id='8bff8096' name='dst' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='bbaf3419' name='src1' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='bbaf3419' name='src2' filepath='crypto/algapi.c' line='977' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/algapi.c' line='977' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='crypto_queue' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='75' column='1' id='590223f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='backlog' type-id='e84b031a' visibility='default' filepath='include/crypto/algapi.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5e6083f1' size-in-bits='64' id='af5eeab9'/>
+      <pointer-type-def type-id='85c172d2' size-in-bits='64' id='708ae4d0'/>
+      <pointer-type-def type-id='90a4444b' size-in-bits='64' id='f0f856cb'/>
+      <pointer-type-def type-id='549dd8f4' size-in-bits='64' id='f28646d2'/>
+      <pointer-type-def type-id='f28646d2' size-in-bits='64' id='c161b868'/>
+      <class-decl name='crypto_instance' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='46' column='1' id='85c172d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='514fe525' visibility='default' filepath='include/crypto/algapi.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='tmpl' type-id='f0f856cb' visibility='default' filepath='include/crypto/algapi.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='03a4a074' visibility='default' filepath='include/crypto/algapi.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/algapi.h' line='52' 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='55' column='1' id='90a4444b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='instances' type-id='e151255a' visibility='default' filepath='include/crypto/algapi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/crypto/algapi.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='94271082' visibility='default' filepath='include/crypto/algapi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='db94924a' visibility='default' filepath='include/crypto/algapi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='e3204322' visibility='default' filepath='include/crypto/algapi.h' line='64' 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='181' column='1' id='549dd8f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rta_len' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rta_type' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cdf069c8' size-in-bits='64' id='94271082'/>
+      <pointer-type-def type-id='4130d810' size-in-bits='64' id='db94924a'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/api.c' language='LANG_C89'>
+      <class-decl name='rtattr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='181' column='1' id='549dd8f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rta_len' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rta_type' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/rtnetlink.h' line='183' 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='764' column='1' id='0328c8b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crt_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crt_u' type-id='1f411b02' visibility='default' filepath='include/linux/crypto.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__crt_alg' type-id='67f526b5' visibility='default' filepath='include/linux/crypto.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__crt_ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='779' 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='768' column='1' id='1f411b02'>
+        <data-member access='public'>
+          <var-decl name='ablkcipher' type-id='3bbbf306' visibility='default' filepath='include/linux/crypto.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='blkcipher' type-id='a93bd501' visibility='default' filepath='include/linux/crypto.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cipher' type-id='015d8760' visibility='default' filepath='include/linux/crypto.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compress' type-id='2fcb265f' visibility='default' filepath='include/linux/crypto.h' line='772' 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='721' column='1' id='3bbbf306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='7171de96' visibility='default' filepath='include/linux/crypto.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='730' 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='782' column='1' id='609c0c20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='783' 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='169' column='1' id='d0793682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/linux/crypto.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/linux/crypto.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/linux/crypto.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/linux/crypto.h' line='179' 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='160' column='1' id='5e6083f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='complete' type-id='2cfb2e6f' visibility='default' filepath='include/linux/crypto.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tfm' type-id='dfeb7f6c' visibility='default' filepath='include/linux/crypto.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='crypto_completion_t' type-id='60d662f3' filepath='include/linux/crypto.h' line='151' column='1' id='2cfb2e6f'/>
+      <class-decl name='blkcipher_tfm' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='733' column='1' id='a93bd501'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='739' 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='182' column='1' id='101fbff9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='ffbca087' visibility='default' filepath='include/linux/crypto.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='eaa32e2f' visibility='default' filepath='include/linux/crypto.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='185' 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='786' column='1' id='3cc0f7af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/linux/crypto.h' line='787' 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='743' column='1' id='015d8760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cit_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cit_encrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cit_decrypt_one' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='747' 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='750' column='1' id='2fcb265f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cot_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cot_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='754' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_alg' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='553' column='1' id='514fe525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cra_list' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cra_users' type-id='72f469ec' visibility='default' filepath='include/linux/crypto.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cra_flags' type-id='19c2251e' visibility='default' filepath='include/linux/crypto.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cra_blocksize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cra_ctxsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='cra_alignmask' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cra_priority' type-id='95e97e5e' visibility='default' filepath='include/linux/crypto.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='cra_refcnt' type-id='64615833' visibility='default' filepath='include/linux/crypto.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cra_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cra_driver_name' type-id='e3204322' visibility='default' filepath='include/linux/crypto.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cra_type' type-id='71dc7604' visibility='default' filepath='include/linux/crypto.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cra_u' type-id='89e73658' visibility='default' filepath='include/linux/crypto.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='cra_init' type-id='469599ea' visibility='default' filepath='include/linux/crypto.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cra_exit' type-id='3ba771a1' visibility='default' filepath='include/linux/crypto.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='cra_destroy' type-id='33e7622c' visibility='default' filepath='include/linux/crypto.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cra_module' type-id='2730d015' visibility='default' filepath='include/linux/crypto.h' line='581' 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='31' column='1' id='caca298d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctxsize' type-id='a506a456' visibility='default' filepath='include/crypto/algapi.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extsize' type-id='f77c2568' visibility='default' filepath='include/crypto/algapi.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='d066db18' visibility='default' filepath='include/crypto/algapi.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init_tfm' type-id='469599ea' visibility='default' filepath='include/crypto/algapi.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show' type-id='2c17fd2e' visibility='default' filepath='include/crypto/algapi.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='report' type-id='2108b777' visibility='default' filepath='include/crypto/algapi.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='maskclear' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='maskset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tfmsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='43' 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='46' column='1' id='85c172d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='514fe525' visibility='default' filepath='include/crypto/algapi.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='tmpl' type-id='f0f856cb' visibility='default' filepath='include/crypto/algapi.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='list' type-id='03a4a074' visibility='default' filepath='include/crypto/algapi.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/algapi.h' line='52' 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='55' column='1' id='90a4444b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='instances' type-id='e151255a' visibility='default' filepath='include/crypto/algapi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/crypto/algapi.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc' type-id='94271082' visibility='default' filepath='include/crypto/algapi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='3aa8795d' visibility='default' filepath='include/crypto/algapi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='create' type-id='db94924a' visibility='default' filepath='include/crypto/algapi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='e3204322' visibility='default' filepath='include/crypto/algapi.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/crypto.h' line='570' column='1' id='89e73658'>
+        <data-member access='public'>
+          <var-decl name='ablkcipher' type-id='67574995' visibility='default' filepath='include/linux/crypto.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='blkcipher' type-id='69794f86' visibility='default' filepath='include/linux/crypto.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cipher' type-id='208c9717' visibility='default' filepath='include/linux/crypto.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compress' type-id='380acddc' visibility='default' filepath='include/linux/crypto.h' line='574' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ablkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='235' column='1' id='67574995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='214533b0' visibility='default' filepath='include/linux/crypto.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='68e5f4e6' visibility='default' filepath='include/linux/crypto.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcipher_alg' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/crypto.h' line='257' column='1' id='69794f86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='3347d7ed' visibility='default' filepath='include/linux/crypto.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='269' 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='319' column='1' id='208c9717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cia_min_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cia_max_keysize' type-id='f0981eeb' visibility='default' filepath='include/linux/crypto.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cia_setkey' type-id='b201adb8' visibility='default' filepath='include/linux/crypto.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cia_encrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cia_decrypt' type-id='f76f0ea4' visibility='default' filepath='include/linux/crypto.h' line='325' 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='339' column='1' id='380acddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coa_compress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coa_decompress' type-id='8801b8af' visibility='default' filepath='include/linux/crypto.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d0793682' size-in-bits='64' id='792ca340'/>
+      <pointer-type-def type-id='101fbff9' size-in-bits='64' id='23e79551'/>
+      <qualified-type-def type-id='caca298d' const='yes' id='3e448446'/>
+      <pointer-type-def type-id='3e448446' size-in-bits='64' id='71dc7604'/>
+      <pointer-type-def type-id='609c0c20' size-in-bits='64' id='7171de96'/>
+      <pointer-type-def type-id='514fe525' size-in-bits='64' id='67f526b5'/>
+      <pointer-type-def type-id='5e6083f1' size-in-bits='64' id='af5eeab9'/>
+      <pointer-type-def type-id='3cc0f7af' size-in-bits='64' id='ffbca087'/>
+      <pointer-type-def type-id='85c172d2' size-in-bits='64' id='708ae4d0'/>
+      <pointer-type-def type-id='cdf069c8' size-in-bits='64' id='94271082'/>
+      <pointer-type-def type-id='90a4444b' size-in-bits='64' id='f0f856cb'/>
+      <pointer-type-def type-id='0328c8b6' size-in-bits='64' id='dfeb7f6c'/>
+      <pointer-type-def type-id='9b8b35dc' size-in-bits='64' id='68e5f4e6'/>
+      <pointer-type-def type-id='01941a31' size-in-bits='64' id='3347d7ed'/>
+      <pointer-type-def type-id='3c5b888e' size-in-bits='64' id='214533b0'/>
+      <pointer-type-def type-id='4130d810' size-in-bits='64' id='db94924a'/>
+      <pointer-type-def type-id='d093a820' size-in-bits='64' id='469599ea'/>
+      <pointer-type-def type-id='1af55526' size-in-bits='64' id='b201adb8'/>
+      <pointer-type-def type-id='38c67a4b' size-in-bits='64' id='8801b8af'/>
+      <pointer-type-def type-id='b739ffde' size-in-bits='64' id='d066db18'/>
+      <pointer-type-def type-id='d10f08e3' size-in-bits='64' id='2108b777'/>
+      <pointer-type-def type-id='549dd8f4' size-in-bits='64' id='f28646d2'/>
+      <pointer-type-def type-id='f28646d2' size-in-bits='64' id='c161b868'/>
+      <pointer-type-def type-id='cdd79d4e' size-in-bits='64' id='f77c2568'/>
+      <pointer-type-def type-id='3642b004' size-in-bits='64' id='a506a456'/>
+      <pointer-type-def type-id='58d69ec2' size-in-bits='64' id='33e7622c'/>
+      <pointer-type-def type-id='dcb10fbf' size-in-bits='64' id='60d662f3'/>
+      <pointer-type-def type-id='cc2d5b01' size-in-bits='64' id='3aa8795d'/>
+      <pointer-type-def type-id='420b230d' size-in-bits='64' id='3ba771a1'/>
+      <pointer-type-def type-id='54d829fa' size-in-bits='64' id='f76f0ea4'/>
+      <pointer-type-def type-id='26d45b0c' size-in-bits='64' id='2c17fd2e'/>
+      <function-decl name='crypto_destroy_tfm' mangled-name='crypto_destroy_tfm' filepath='crypto/api.c' line='567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_destroy_tfm'>
+        <parameter type-id='eaa32e2f' name='mem' filepath='crypto/api.c' line='567' column='1'/>
+        <parameter type-id='dfeb7f6c' name='tfm' filepath='crypto/api.c' line='567' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_has_alg' mangled-name='crypto_has_alg' filepath='crypto/api.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_has_alg'>
+        <parameter type-id='80f4b756' name='name' filepath='crypto/api.c' line='584' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/api.c' line='584' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/api.c' line='584' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_base' mangled-name='crypto_alloc_base' filepath='crypto/api.c' line='414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_base'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/api.c' line='414' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/api.c' line='414' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/api.c' line='414' column='1'/>
+        <return type-id='dfeb7f6c'/>
+      </function-decl>
+      <function-decl name='crypto_mod_put' mangled-name='crypto_mod_put' filepath='crypto/api.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_mod_put'>
+        <parameter type-id='67f526b5' name='alg' filepath='crypto/api.c' line='41' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cdf069c8'>
+        <parameter type-id='c161b868'/>
+        <return type-id='708ae4d0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b8b35dc'>
+        <parameter type-id='792ca340'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01941a31'>
+        <parameter type-id='23e79551'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c5b888e'>
+        <parameter type-id='7171de96'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4130d810'>
+        <parameter type-id='f0f856cb'/>
+        <parameter type-id='c161b868'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d093a820'>
+        <parameter type-id='dfeb7f6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1af55526'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38c67a4b'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b739ffde'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d10f08e3'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='67f526b5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdd79d4e'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3642b004'>
+        <parameter type-id='67f526b5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58d69ec2'>
+        <parameter type-id='67f526b5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dcb10fbf'>
+        <parameter type-id='af5eeab9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cc2d5b01'>
+        <parameter type-id='708ae4d0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='420b230d'>
+        <parameter type-id='dfeb7f6c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54d829fa'>
+        <parameter type-id='dfeb7f6c'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26d45b0c'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='67f526b5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/crc32_generic.c' language='LANG_C89'>
+      <function-decl name='crc32_le' filepath='include/linux/crc32.h' line='11' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/crypto_engine.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='240' id='d2e20a8c'>
+        <subrange length='30' type-id='7ff19f0f' id='6a6183a4'/>
+      </array-type-def>
+      <class-decl name='crypto_engine' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/crypto/engine.h' line='43' column='1' id='52afe07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='d2e20a8c' visibility='default' filepath='include/crypto/engine.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='idling' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='busy' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='cur_req_prepared' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/engine.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/crypto/engine.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue' type-id='590223f8' visibility='default' filepath='include/crypto/engine.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/crypto/engine.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/crypto/engine.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='prepare_crypt_hardware' type-id='4c6bdb1f' visibility='default' filepath='include/crypto/engine.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unprepare_crypt_hardware' type-id='4c6bdb1f' visibility='default' filepath='include/crypto/engine.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kworker' type-id='c41f4539' visibility='default' filepath='include/crypto/engine.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pump_requests' type-id='ac165296' visibility='default' filepath='include/crypto/engine.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv_data' type-id='eaa32e2f' visibility='default' filepath='include/crypto/engine.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cur_req' type-id='af5eeab9' visibility='default' filepath='include/crypto/engine.h' line='64' 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='75' column='1' id='590223f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/crypto/algapi.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='backlog' type-id='e84b031a' visibility='default' filepath='include/crypto/algapi.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_qlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='52afe07b' size-in-bits='64' id='2281d68b'/>
+      <pointer-type-def type-id='ee48a0b3' size-in-bits='64' id='4c6bdb1f'/>
+      <function-decl name='crypto_transfer_ablkcipher_request_to_engine' mangled-name='crypto_transfer_ablkcipher_request_to_engine' filepath='crypto/crypto_engine.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_transfer_ablkcipher_request_to_engine'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='223' column='1'/>
+        <parameter type-id='792ca340' name='req' filepath='crypto/crypto_engine.c' line='224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_finalize_ablkcipher_request' mangled-name='crypto_finalize_ablkcipher_request' filepath='crypto/crypto_engine.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_finalize_ablkcipher_request'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='290' column='1'/>
+        <parameter type-id='792ca340' name='req' filepath='crypto/crypto_engine.c' line='291' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='crypto/crypto_engine.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_engine_start' mangled-name='crypto_engine_start' filepath='crypto/crypto_engine.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_start'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_engine_exit' mangled-name='crypto_engine_exit' filepath='crypto/crypto_engine.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_exit'>
+        <parameter type-id='2281d68b' name='engine' filepath='crypto/crypto_engine.c' line='473' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_engine_alloc_init' mangled-name='crypto_engine_alloc_init' filepath='crypto/crypto_engine.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_engine_alloc_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='crypto/crypto_engine.c' line='426' column='1'/>
+        <parameter type-id='b50a4934' name='rt' filepath='crypto/crypto_engine.c' line='426' column='1'/>
+        <return type-id='2281d68b'/>
+      </function-decl>
+      <class-decl name='kthread_work' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='98' column='1' id='ac165296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='a785c7fd' visibility='default' filepath='include/linux/kthread.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='worker' type-id='c41f4539' visibility='default' filepath='include/linux/kthread.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='canceling' type-id='95e97e5e' visibility='default' filepath='include/linux/kthread.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='ee48a0b3'>
+        <parameter type-id='2281d68b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='62968721' size-in-bits='64' id='c41f4539'/>
+      <class-decl name='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='89' column='1' id='62968721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kthread.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/kthread.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delayed_work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/kthread.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='current_work' type-id='401eb95c' visibility='default' filepath='include/linux/kthread.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='2a5d0ea1' filepath='include/linux/kthread.h' line='82' column='1' id='a785c7fd'/>
+      <pointer-type-def type-id='ac165296' size-in-bits='64' id='401eb95c'/>
+      <pointer-type-def type-id='38d1cb6d' size-in-bits='64' id='2a5d0ea1'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/gf128mul.c' language='LANG_C89'>
+      <typedef-decl name='be128' type-id='e1637ddc' filepath='include/crypto/b128ops.h' line='58' column='1' id='2c3bbc0e'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='2c3bbc0e' visibility='default' filepath='include/crypto/b128ops.h' line='56' column='1' id='e1637ddc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='0899c7ad' visibility='default' filepath='include/crypto/b128ops.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='b' type-id='0899c7ad' visibility='default' filepath='include/crypto/b128ops.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2c3bbc0e' size-in-bits='64' id='342f43d1'/>
+      <qualified-type-def type-id='2c3bbc0e' const='yes' id='9b734d5e'/>
+      <pointer-type-def type-id='9b734d5e' size-in-bits='64' id='2a82ed9c'/>
+      <function-decl name='gf128mul_lle' mangled-name='gf128mul_lle' filepath='crypto/gf128mul.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gf128mul_lle'>
+        <parameter type-id='342f43d1' name='r' filepath='crypto/gf128mul.c' line='170' column='1'/>
+        <parameter type-id='2a82ed9c' name='b' filepath='crypto/gf128mul.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <typedef-decl name='__be64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='34' column='1' id='0899c7ad'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/hash_info.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2448a865' size-in-bits='640' id='9208c5df'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <qualified-type-def type-id='95e97e5e' const='yes' id='2448a865'/>
+      <var-decl name='hash_digest_size' type-id='9208c5df' mangled-name='hash_digest_size' visibility='default' filepath='crypto/hash_info.c' line='35' column='1' elf-symbol-id='hash_digest_size'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/memneq.c' language='LANG_C89'>
+      <function-decl name='__crypto_memneq' mangled-name='__crypto_memneq' filepath='crypto/memneq.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__crypto_memneq'>
+        <parameter type-id='eaa32e2f' name='a' filepath='crypto/memneq.c' line='156' column='1'/>
+        <parameter type-id='eaa32e2f' name='b' filepath='crypto/memneq.c' line='156' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='crypto/memneq.c' line='157' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/rng.c' language='LANG_C89'>
+      <class-decl name='rng_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/rng.h' line='41' column='1' id='edc58e1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generate' type-id='5cae2f79' visibility='default' filepath='include/crypto/rng.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seed' type-id='0499c3f4' visibility='default' filepath='include/crypto/rng.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_ent' type-id='a37de2bd' visibility='default' filepath='include/crypto/rng.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seedsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/rng.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/rng.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_rng' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/rng.h' line='54' column='1' id='673937f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/rng.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='673937f2' size-in-bits='64' id='5474f420'/>
+      <pointer-type-def type-id='7b596412' size-in-bits='64' id='0499c3f4'/>
+      <pointer-type-def type-id='09978275' size-in-bits='64' id='5cae2f79'/>
+      <pointer-type-def type-id='edc58e1f' size-in-bits='64' id='090a6ee7'/>
+      <pointer-type-def type-id='de6e2151' size-in-bits='64' id='a37de2bd'/>
+      <function-decl name='crypto_unregister_rngs' mangled-name='crypto_unregister_rngs' filepath='crypto/rng.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_rngs'>
+        <parameter type-id='090a6ee7' name='algs' filepath='crypto/rng.c' line='218' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/rng.c' line='218' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_rng' mangled-name='crypto_unregister_rng' filepath='crypto/rng.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_rng'>
+        <parameter type-id='090a6ee7' name='alg' filepath='crypto/rng.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_register_rngs' mangled-name='crypto_register_rngs' filepath='crypto/rng.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_rngs'>
+        <parameter type-id='090a6ee7' name='algs' filepath='crypto/rng.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/rng.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_rng' mangled-name='crypto_register_rng' filepath='crypto/rng.c' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_rng'>
+        <parameter type-id='090a6ee7' name='alg' filepath='crypto/rng.c' line='177' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7b596412'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09978275'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de6e2151'>
+        <parameter type-id='5474f420'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/scatterwalk.c' language='LANG_C89'>
+      <function-decl name='scatterwalk_map_and_copy' mangled-name='scatterwalk_map_and_copy' filepath='crypto/scatterwalk.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scatterwalk_map_and_copy'>
+        <parameter type-id='eaa32e2f' name='buf' filepath='crypto/scatterwalk.c' line='55' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='crypto/scatterwalk.c' line='55' column='1'/>
+        <parameter type-id='f0981eeb' name='start' filepath='crypto/scatterwalk.c' line='56' column='1'/>
+        <parameter type-id='f0981eeb' name='nbytes' filepath='crypto/scatterwalk.c' line='56' column='1'/>
+        <parameter type-id='95e97e5e' name='out' filepath='crypto/scatterwalk.c' line='56' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scatterwalk_ffwd' mangled-name='scatterwalk_ffwd' filepath='crypto/scatterwalk.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scatterwalk_ffwd'>
+        <parameter type-id='bf3ef905' name='dst' filepath='crypto/scatterwalk.c' line='72' column='1'/>
+        <parameter type-id='bf3ef905' name='src' filepath='crypto/scatterwalk.c' line='73' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/scatterwalk.c' line='74' column='1'/>
+        <return type-id='bf3ef905'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/scompress.c' language='LANG_C89'>
+      <class-decl name='scomp_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/internal/scompress.h' line='28' column='1' id='c2b72af8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_ctx' type-id='f531dfd0' visibility='default' filepath='include/crypto/internal/scompress.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free_ctx' type-id='0459295a' visibility='default' filepath='include/crypto/internal/scompress.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compress' type-id='e4372f12' visibility='default' filepath='include/crypto/internal/scompress.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decompress' type-id='e4372f12' visibility='default' filepath='include/crypto/internal/scompress.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/internal/scompress.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_scomp' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/internal/scompress.h' line='15' column='1' id='09bcad51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/internal/scompress.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='09bcad51' size-in-bits='64' id='f03f21e9'/>
+      <pointer-type-def type-id='61c46dd8' size-in-bits='64' id='e4372f12'/>
+      <pointer-type-def type-id='c2b72af8' size-in-bits='64' id='6e764b1e'/>
+      <pointer-type-def type-id='b2c72f60' size-in-bits='64' id='0459295a'/>
+      <pointer-type-def type-id='4ed265d6' size-in-bits='64' id='f531dfd0'/>
+      <function-decl name='crypto_unregister_scomp' mangled-name='crypto_unregister_scomp' filepath='crypto/scompress.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_scomp'>
+        <parameter type-id='6e764b1e' name='alg' filepath='crypto/scompress.c' line='269' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_scomp' mangled-name='crypto_register_scomp' filepath='crypto/scompress.c' line='257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_scomp'>
+        <parameter type-id='6e764b1e' name='alg' filepath='crypto/scompress.c' line='257' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='61c46dd8'>
+        <parameter type-id='f03f21e9'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2c72f60'>
+        <parameter type-id='f03f21e9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ed265d6'>
+        <parameter type-id='f03f21e9'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/sha1_generic.c' language='LANG_C89'>
+      <function-decl name='crypto_sha1_update' mangled-name='crypto_sha1_update' filepath='crypto/sha1_generic.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_sha1_update'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/sha1_generic.c' line='43' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/sha1_generic.c' line='43' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/sha1_generic.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_sha1_finup' mangled-name='crypto_sha1_finup' filepath='crypto/sha1_generic.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_sha1_finup'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/sha1_generic.c' line='56' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/sha1_generic.c' line='56' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/sha1_generic.c' line='57' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='crypto/sha1_generic.c' line='57' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='55bdfa3e' size-in-bits='64' id='32efad44'/>
+      <class-decl name='shash_desc' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='142' column='1' id='55bdfa3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='247dd85c' visibility='default' filepath='include/crypto/hash.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='df5e8716' size-in-bits='64' id='247dd85c'/>
+      <class-decl name='crypto_shash' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='218' column='1' id='df5e8716'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='descsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/hash.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/shash.c' language='LANG_C89'>
+      <class-decl name='shash_alg' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='179' column='1' id='b73dd29b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='88994406' visibility='default' filepath='include/crypto/hash.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update' type-id='b07c56ec' visibility='default' filepath='include/crypto/hash.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='final' type-id='bf4ae585' visibility='default' filepath='include/crypto/hash.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='finup' type-id='80662063' visibility='default' filepath='include/crypto/hash.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='digest' type-id='80662063' visibility='default' filepath='include/crypto/hash.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='export' type-id='2fd02888' visibility='default' filepath='include/crypto/hash.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='import' type-id='2fd02888' visibility='default' filepath='include/crypto/hash.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setkey' type-id='1c33159c' visibility='default' filepath='include/crypto/hash.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='descsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='digestsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='statesize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/hash.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shash_desc' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='142' column='1' id='55bdfa3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tfm' type-id='247dd85c' visibility='default' filepath='include/crypto/hash.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/hash.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_shash' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/hash.h' line='218' column='1' id='df5e8716'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='descsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/hash.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/hash.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='shash_instance' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/crypto/internal/hash.h' line='36' column='1' id='08d1d960'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg' type-id='b73dd29b' visibility='default' filepath='include/crypto/internal/hash.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='df5e8716' size-in-bits='64' id='247dd85c'/>
+      <pointer-type-def type-id='e613f28a' size-in-bits='64' id='1c33159c'/>
+      <pointer-type-def type-id='cca56d7c' size-in-bits='64' id='88994406'/>
+      <pointer-type-def type-id='270dc7da' size-in-bits='64' id='b07c56ec'/>
+      <pointer-type-def type-id='0467beaf' size-in-bits='64' id='80662063'/>
+      <pointer-type-def type-id='36a439e9' size-in-bits='64' id='bf4ae585'/>
+      <pointer-type-def type-id='c012d70e' size-in-bits='64' id='2fd02888'/>
+      <pointer-type-def type-id='b73dd29b' size-in-bits='64' id='1be0f6ab'/>
+      <pointer-type-def type-id='55bdfa3e' size-in-bits='64' id='32efad44'/>
+      <pointer-type-def type-id='08d1d960' size-in-bits='64' id='9414c4b6'/>
+      <function-decl name='crypto_unregister_shashes' mangled-name='crypto_unregister_shashes' filepath='crypto/shash.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_shashes'>
+        <parameter type-id='1be0f6ab' name='algs' filepath='crypto/shash.c' line='536' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/shash.c' line='536' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_shashes' mangled-name='crypto_register_shashes' filepath='crypto/shash.c' line='516' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_shashes'>
+        <parameter type-id='1be0f6ab' name='algs' filepath='crypto/shash.c' line='516' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/shash.c' line='516' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_shash' mangled-name='crypto_register_shash' filepath='crypto/shash.c' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_shash'>
+        <parameter type-id='1be0f6ab' name='alg' filepath='crypto/shash.c' line='497' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_shash_setkey' mangled-name='crypto_shash_setkey' filepath='crypto/shash.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_setkey'>
+        <parameter type-id='247dd85c' name='tfm' filepath='crypto/shash.c' line='70' column='1'/>
+        <parameter type-id='bbaf3419' name='key' filepath='crypto/shash.c' line='70' column='1'/>
+        <parameter type-id='f0981eeb' name='keylen' filepath='crypto/shash.c' line='71' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_shash_update' mangled-name='crypto_shash_update' filepath='crypto/shash.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_update'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/shash.c' line='122' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/shash.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/shash.c' line='123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='shash_register_instance' mangled-name='shash_register_instance' filepath='crypto/shash.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shash_register_instance'>
+        <parameter type-id='f0f856cb' name='tmpl' filepath='crypto/shash.c' line='552' column='1'/>
+        <parameter type-id='9414c4b6' name='inst' filepath='crypto/shash.c' line='553' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_shash_final' mangled-name='crypto_shash_final' filepath='crypto/shash.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_final'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/shash.c' line='164' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='crypto/shash.c' line='164' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='shash_free_instance' mangled-name='shash_free_instance' filepath='crypto/shash.c' line='565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shash_free_instance'>
+        <parameter type-id='708ae4d0' name='inst' filepath='crypto/shash.c' line='565' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_shash' mangled-name='crypto_unregister_shash' filepath='crypto/shash.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_shash'>
+        <parameter type-id='1be0f6ab' name='alg' filepath='crypto/shash.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_shash_digest' mangled-name='crypto_shash_digest' filepath='crypto/shash.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_shash_digest'>
+        <parameter type-id='32efad44' name='desc' filepath='crypto/shash.c' line='205' column='1'/>
+        <parameter type-id='bbaf3419' name='data' filepath='crypto/shash.c' line='205' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='crypto/shash.c' line='206' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='crypto/shash.c' line='206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_shash' mangled-name='crypto_alloc_shash' filepath='crypto/shash.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_shash'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/shash.c' line='459' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/shash.c' line='459' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/shash.c' line='460' column='1'/>
+        <return type-id='247dd85c'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e613f28a'>
+        <parameter type-id='247dd85c'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cca56d7c'>
+        <parameter type-id='32efad44'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='270dc7da'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0467beaf'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='36a439e9'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c012d70e'>
+        <parameter type-id='32efad44'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/simd.c' language='LANG_C89'>
+      <class-decl name='simd_skcipher_alg' size-in-bits='6144' is-struct='yes' visibility='default' filepath='crypto/simd.c' line='41' column='1' id='5165995d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ialg_name' type-id='80f4b756' visibility='default' filepath='crypto/simd.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='alg' type-id='dd37d315' visibility='default' filepath='crypto/simd.c' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5165995d' size-in-bits='64' id='31be5add'/>
+      <function-decl name='simd_skcipher_create_compat' mangled-name='simd_skcipher_create_compat' filepath='crypto/simd.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simd_skcipher_create_compat'>
+        <parameter type-id='80f4b756' name='algname' filepath='crypto/simd.c' line='143' column='1'/>
+        <parameter type-id='80f4b756' name='drvname' filepath='crypto/simd.c' line='144' column='1'/>
+        <parameter type-id='80f4b756' name='basename' filepath='crypto/simd.c' line='145' column='1'/>
+        <return type-id='31be5add'/>
+      </function-decl>
+      <function-decl name='simd_skcipher_free' mangled-name='simd_skcipher_free' filepath='crypto/simd.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simd_skcipher_free'>
+        <parameter type-id='31be5add' name='salg' filepath='crypto/simd.c' line='225' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='skcipher_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='111' column='1' id='dd37d315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='b298c88e' visibility='default' filepath='include/crypto/skcipher.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='7997266f' visibility='default' filepath='include/crypto/skcipher.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chunksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='walksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/skcipher.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c0d42424' size-in-bits='64' id='b298c88e'/>
+      <pointer-type-def type-id='3e497762' size-in-bits='64' id='9e5416b4'/>
+      <pointer-type-def type-id='031a4ff0' size-in-bits='64' id='1507ee2a'/>
+      <pointer-type-def type-id='0ae96173' size-in-bits='64' id='7997266f'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='crypto/skcipher.c' language='LANG_C89'>
+      <class-decl name='skcipher_alg' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='111' column='1' id='dd37d315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='b298c88e' visibility='default' filepath='include/crypto/skcipher.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='7997266f' visibility='default' filepath='include/crypto/skcipher.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chunksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='walksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='514fe525' visibility='default' filepath='include/crypto/skcipher.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='crypto_skcipher' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='37' column='1' id='d80b6ab0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setkey' type-id='9e5416b4' visibility='default' filepath='include/crypto/skcipher.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='decrypt' type-id='1507ee2a' visibility='default' filepath='include/crypto/skcipher.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reqsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='keysize' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='base' type-id='0328c8b6' visibility='default' filepath='include/crypto/skcipher.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skcipher_request' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/crypto/skcipher.h' line='24' column='1' id='8838d802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cryptlen' type-id='f0981eeb' visibility='default' filepath='include/crypto/skcipher.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iv' type-id='8bff8096' visibility='default' filepath='include/crypto/skcipher.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src' type-id='bf3ef905' visibility='default' filepath='include/crypto/skcipher.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst' type-id='bf3ef905' visibility='default' filepath='include/crypto/skcipher.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='base' type-id='5e6083f1' visibility='default' filepath='include/crypto/skcipher.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__ctx' type-id='baf98fd3' visibility='default' filepath='include/crypto/skcipher.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='skcipher_walk' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='34' column='1' id='917c67c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='916e0901' visibility='default' filepath='include/crypto/internal/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='916e0901' visibility='default' filepath='include/crypto/internal/skcipher.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='in' type-id='9953e88b' visibility='default' filepath='include/crypto/internal/skcipher.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='out' type-id='9953e88b' visibility='default' filepath='include/crypto/internal/skcipher.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='total' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buffers' type-id='72f469ec' visibility='default' filepath='include/crypto/internal/skcipher.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='page' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='buffer' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='oiv' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iv' type-id='eaa32e2f' visibility='default' filepath='include/crypto/internal/skcipher.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ivsize' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/crypto/internal/skcipher.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blocksize' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='stride' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='alignmask' type-id='f0981eeb' visibility='default' filepath='include/crypto/internal/skcipher.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='35' column='1' id='916e0901'>
+        <data-member access='public'>
+          <var-decl name='phys' type-id='9c85f28a' visibility='default' filepath='include/crypto/internal/skcipher.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='virt' type-id='58aa248a' visibility='default' filepath='include/crypto/internal/skcipher.h' line='44' 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/crypto/internal/skcipher.h' line='36' column='1' id='9c85f28a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/crypto/internal/skcipher.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/crypto/internal/skcipher.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/crypto/internal/skcipher.h' line='41' column='1' id='58aa248a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='8bff8096' visibility='default' filepath='include/crypto/internal/skcipher.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/crypto/internal/skcipher.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scatter_walk' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/crypto/algapi.h' line='83' column='1' id='9953e88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/crypto/algapi.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/crypto/algapi.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d80b6ab0' size-in-bits='64' id='72bb8c36'/>
+      <pointer-type-def type-id='c0d42424' size-in-bits='64' id='b298c88e'/>
+      <pointer-type-def type-id='3e497762' size-in-bits='64' id='9e5416b4'/>
+      <pointer-type-def type-id='031a4ff0' size-in-bits='64' id='1507ee2a'/>
+      <pointer-type-def type-id='dd37d315' size-in-bits='64' id='613dff15'/>
+      <pointer-type-def type-id='8838d802' size-in-bits='64' id='c249b570'/>
+      <pointer-type-def type-id='917c67c0' size-in-bits='64' id='74439606'/>
+      <pointer-type-def type-id='0ae96173' size-in-bits='64' id='7997266f'/>
+      <function-decl name='crypto_register_skciphers' mangled-name='crypto_register_skciphers' filepath='crypto/skcipher.c' line='1066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_skciphers'>
+        <parameter type-id='613dff15' name='algs' filepath='crypto/skcipher.c' line='1066' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/skcipher.c' line='1066' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_virt' mangled-name='skcipher_walk_virt' filepath='crypto/skcipher.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_virt'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='476' column='1'/>
+        <parameter type-id='c249b570' name='req' filepath='crypto/skcipher.c' line='477' column='1'/>
+        <parameter type-id='b50a4934' name='atomic' filepath='crypto/skcipher.c' line='477' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_done' mangled-name='skcipher_walk_done' filepath='crypto/skcipher.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_done'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='104' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='crypto/skcipher.c' line='104' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_aead_encrypt' mangled-name='skcipher_walk_aead_encrypt' filepath='crypto/skcipher.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_aead_encrypt'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='561' column='1'/>
+        <parameter type-id='146bc842' name='req' filepath='crypto/skcipher.c' line='562' column='1'/>
+        <parameter type-id='b50a4934' name='atomic' filepath='crypto/skcipher.c' line='562' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skcipher_walk_aead_decrypt' mangled-name='skcipher_walk_aead_decrypt' filepath='crypto/skcipher.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skcipher_walk_aead_decrypt'>
+        <parameter type-id='74439606' name='walk' filepath='crypto/skcipher.c' line='570' column='1'/>
+        <parameter type-id='146bc842' name='req' filepath='crypto/skcipher.c' line='571' column='1'/>
+        <parameter type-id='b50a4934' name='atomic' filepath='crypto/skcipher.c' line='571' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_skciphers' mangled-name='crypto_unregister_skciphers' filepath='crypto/skcipher.c' line='1086' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_skciphers'>
+        <parameter type-id='613dff15' name='algs' filepath='crypto/skcipher.c' line='1086' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='crypto/skcipher.c' line='1086' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_unregister_skcipher' mangled-name='crypto_unregister_skcipher' filepath='crypto/skcipher.c' line='1060' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_unregister_skcipher'>
+        <parameter type-id='613dff15' name='alg' filepath='crypto/skcipher.c' line='1060' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crypto_skcipher_encrypt' mangled-name='crypto_skcipher_encrypt' filepath='crypto/skcipher.c' line='844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_skcipher_encrypt'>
+        <parameter type-id='c249b570' name='req' filepath='crypto/skcipher.c' line='844' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_skcipher_decrypt' mangled-name='crypto_skcipher_decrypt' filepath='crypto/skcipher.c' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_skcipher_decrypt'>
+        <parameter type-id='c249b570' name='req' filepath='crypto/skcipher.c' line='861' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_register_skcipher' mangled-name='crypto_register_skcipher' filepath='crypto/skcipher.c' line='1047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_register_skcipher'>
+        <parameter type-id='613dff15' name='alg' filepath='crypto/skcipher.c' line='1047' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='crypto_alloc_skcipher' mangled-name='crypto_alloc_skcipher' filepath='crypto/skcipher.c' line='989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crypto_alloc_skcipher'>
+        <parameter type-id='80f4b756' name='alg_name' filepath='crypto/skcipher.c' line='989' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='crypto/skcipher.c' line='990' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='crypto/skcipher.c' line='990' column='1'/>
+        <return type-id='72bb8c36'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c0d42424'>
+        <parameter type-id='72bb8c36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e497762'>
+        <parameter type-id='72bb8c36'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='031a4ff0'>
+        <parameter type-id='c249b570'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ae96173'>
+        <parameter type-id='72bb8c36'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/amba/bus.c' language='LANG_C89'>
+      <class-decl name='clk' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='99' column='1' id='830e3b1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='con_id' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exclusive_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clks_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='288' id='0d6477e2'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <class-decl name='amba_device' size-in-bits='9024' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='65' column='1' id='92e8f939'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/amba/bus.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/amba/bus.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='pclk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/amba/bus.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='periphid' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='cid' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='uci' type-id='ca73ce17' visibility='default' filepath='include/linux/amba/bus.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='irq' type-id='0d6477e2' visibility='default' filepath='include/linux/amba/bus.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/amba/bus.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/amba/bus.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_cs_uci_id' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='52' column='1' id='ca73ce17'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devarch' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='devarch_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devtype' type-id='f0981eeb' visibility='default' filepath='include/linux/amba/bus.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/amba/bus.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_driver' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/amba/bus.h' line='78' column='1' id='929b60e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/amba/bus.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='3c6ca22d' visibility='default' filepath='include/linux/amba/bus.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='64cf15f5' visibility='default' filepath='include/linux/amba/bus.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='690433e0' visibility='default' filepath='include/linux/amba/bus.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='id_table' type-id='be3ce245' visibility='default' filepath='include/linux/amba/bus.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/amba/bus.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amba_id' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='638' column='1' id='c0e32d5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/mod_devicetable.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/mod_devicetable.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mod_devicetable.h' line='641' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='92e8f939' size-in-bits='64' id='ddd322c1'/>
+      <pointer-type-def type-id='929b60e1' size-in-bits='64' id='6e829429'/>
+      <pointer-type-def type-id='830e3b1b' size-in-bits='64' id='7d0bc0eb'/>
+      <qualified-type-def type-id='c0e32d5e' const='yes' id='860353ed'/>
+      <pointer-type-def type-id='860353ed' size-in-bits='64' id='be3ce245'/>
+      <pointer-type-def type-id='1340ad71' size-in-bits='64' id='64cf15f5'/>
+      <pointer-type-def type-id='d4a58841' size-in-bits='64' id='3c6ca22d'/>
+      <pointer-type-def type-id='d3efde9e' size-in-bits='64' id='690433e0'/>
+      <var-decl name='amba_bustype' type-id='b31bfc8a' mangled-name='amba_bustype' visibility='default' filepath='drivers/amba/bus.c' line='215' column='1' elf-symbol-id='amba_bustype'/>
+      <function-decl name='amba_request_regions' mangled-name='amba_request_regions' filepath='drivers/amba/bus.c' line='794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_request_regions'>
+        <parameter type-id='ddd322c1' name='dev' filepath='drivers/amba/bus.c' line='794' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/amba/bus.c' line='794' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='amba_release_regions' mangled-name='amba_release_regions' filepath='drivers/amba/bus.c' line='816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_release_regions'>
+        <parameter type-id='ddd322c1' name='dev' filepath='drivers/amba/bus.c' line='816' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='amba_driver_unregister' mangled-name='amba_driver_unregister' filepath='drivers/amba/bus.c' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_driver_unregister'>
+        <parameter type-id='6e829429' name='drv' filepath='drivers/amba/bus.c' line='357' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='amba_driver_register' mangled-name='amba_driver_register' filepath='drivers/amba/bus.c' line='336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='amba_driver_register'>
+        <parameter type-id='6e829429' name='drv' filepath='drivers/amba/bus.c' line='336' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='636cc9ab' size-in-bits='64' id='ba21e62b'/>
+      <function-type size-in-bits='64' id='1340ad71'>
+        <parameter type-id='ddd322c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4a58841'>
+        <parameter type-id='ddd322c1'/>
+        <parameter type-id='be3ce245'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d3efde9e'>
+        <parameter type-id='ddd322c1' name='dev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='clk_core' size-in-bits='1984' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='56' column='1' id='636cc9ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='drivers/clk/clk.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw' type-id='3aaeef89' visibility='default' filepath='drivers/clk/clk.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/clk/clk.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/clk/clk.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parents' type-id='338d484d' visibility='default' filepath='drivers/clk/clk.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='new_parent_index' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='new_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='new_parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='new_child' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='rpm_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='need_sync' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='boot_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prepare_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='protect_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='accuracy' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phase' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='duty' type-id='4f935e80' visibility='default' filepath='drivers/clk/clk.c' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='children' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='clks' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notifier_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/clk/clk.c' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='debug_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='drivers/clk/clk.c' line='93' 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='70' column='1' id='4f935e80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='den' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cf8d7d81' size-in-bits='64' id='3aaeef89'/>
+      <pointer-type-def type-id='710f82fd' size-in-bits='64' id='338d484d'/>
+      <pointer-type-def type-id='92072f8b' size-in-bits='64' id='824ffa73'/>
+      <class-decl name='clk_hw' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='319' column='1' id='cf8d7d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='include/linux/clk-provider.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk-provider.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='b6a95a02' visibility='default' filepath='include/linux/clk-provider.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_parent_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='48' column='1' id='710f82fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='drivers/clk/clk.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='512851e8' const='yes' id='92072f8b'/>
+      <class-decl name='clk_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='222' column='1' id='512851e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_prepared' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='is_enabled' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='save_context' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='restore_context' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='recalc_rate' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='round_rate' type-id='1eac8fa1' visibility='default' filepath='include/linux/clk-provider.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='determine_rate' type-id='c2c32efe' visibility='default' filepath='include/linux/clk-provider.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_parent' type-id='a05e478f' visibility='default' filepath='include/linux/clk-provider.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_parent' type-id='38527a92' visibility='default' filepath='include/linux/clk-provider.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rate' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_rate_and_parent' type-id='d598c37f' visibility='default' filepath='include/linux/clk-provider.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='recalc_accuracy' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_phase' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_phase' type-id='eeb35eda' visibility='default' filepath='include/linux/clk-provider.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='init' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='debug_init' type-id='c2d2a400' visibility='default' filepath='include/linux/clk-provider.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pre_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='post_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fdb55010' size-in-bits='64' id='9e6d4b4e'/>
+      <pointer-type-def type-id='d7aa071c' size-in-bits='64' id='b6a95a02'/>
+      <qualified-type-def type-id='cf8d7d81' const='yes' id='fdb55010'/>
+      <qualified-type-def type-id='065eee5b' const='yes' id='d7aa071c'/>
+      <pointer-type-def type-id='f5a529af' size-in-bits='64' id='2d015d73'/>
+      <pointer-type-def type-id='73b85a24' size-in-bits='64' id='3993d336'/>
+      <pointer-type-def type-id='f867473c' size-in-bits='64' id='c2c32efe'/>
+      <pointer-type-def type-id='fc053d58' size-in-bits='64' id='eeb35eda'/>
+      <pointer-type-def type-id='8de1c3db' size-in-bits='64' id='a05e478f'/>
+      <pointer-type-def type-id='2e5f4f0f' size-in-bits='64' id='3d287e03'/>
+      <pointer-type-def type-id='59f7b4bb' size-in-bits='64' id='d598c37f'/>
+      <pointer-type-def type-id='7fb4efa5' size-in-bits='64' id='1eac8fa1'/>
+      <pointer-type-def type-id='d49e6088' size-in-bits='64' id='38527a92'/>
+      <pointer-type-def type-id='0a38a8f0' size-in-bits='64' id='93097cd2'/>
+      <pointer-type-def type-id='30913582' size-in-bits='64' id='0112fb3c'/>
+      <pointer-type-def type-id='7c1f247e' size-in-bits='64' id='c2d2a400'/>
+      <class-decl name='clk_init_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='292' column='1' id='065eee5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='include/linux/clk-provider.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_names' type-id='13956559' visibility='default' filepath='include/linux/clk-provider.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_data' type-id='4cdbecf4' visibility='default' filepath='include/linux/clk-provider.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_hws' type-id='ca0dae6c' visibility='default' filepath='include/linux/clk-provider.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='include/linux/clk-provider.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9e6d4b4e' size-in-bits='64' id='ca0dae6c'/>
+      <pointer-type-def type-id='dcc94796' size-in-bits='64' id='4cdbecf4'/>
+      <qualified-type-def type-id='bd5c3911' const='yes' id='dcc94796'/>
+      <class-decl name='clk_parent_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='271' column='1' id='bd5c3911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='include/linux/clk-provider.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/clk-provider.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/android/vendor_hooks.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_android_vh_psci_tos_resident_on' type-id='4ca0c298' mangled-name='__tracepoint_android_vh_psci_tos_resident_on' visibility='default' filepath='include/trace/hooks/psci.h' line='14' column='1' elf-symbol-id='__tracepoint_android_vh_psci_tos_resident_on'/>
+      <var-decl name='__tracepoint_android_vh_psci_cpu_suspend' type-id='4ca0c298' mangled-name='__tracepoint_android_vh_psci_cpu_suspend' visibility='default' filepath='include/trace/hooks/psci.h' line='18' column='1' elf-symbol-id='__tracepoint_android_vh_psci_cpu_suspend'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/arch_topology.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7c13c5bf' size-in-bits='10240' id='366d2368'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='cpu_topology' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/arch_topology.h' line='44' column='1' id='7c13c5bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='core_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='package_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='llc_id' type-id='95e97e5e' visibility='default' filepath='include/linux/arch_topology.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='core_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llc_sibling' type-id='90bc6bed' visibility='default' filepath='include/linux/arch_topology.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='cpu_topology' type-id='366d2368' mangled-name='cpu_topology' visibility='default' filepath='drivers/base/arch_topology.c' line='459' column='1' elf-symbol-id='cpu_topology'/>
+      <function-decl name='arch_set_freq_scale' mangled-name='arch_set_freq_scale' filepath='drivers/base/arch_topology.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arch_set_freq_scale'>
+        <parameter type-id='74bccedd' name='cpus' filepath='drivers/base/arch_topology.c' line='29' column='1'/>
+        <parameter type-id='7359adad' name='cur_freq' filepath='drivers/base/arch_topology.c' line='29' column='1'/>
+        <parameter type-id='7359adad' name='max_freq' filepath='drivers/base/arch_topology.c' line='30' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='1354385d' size-in-bits='64' id='74bccedd'/>
+    </abi-instr>
+    <abi-instr 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='801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_register'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='801' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_find_device' mangled-name='bus_find_device' filepath='drivers/base/bus.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_find_device'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='325' column='1'/>
+        <parameter type-id='fa0b179b' name='start' filepath='drivers/base/bus.c' line='326' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/bus.c' line='326' column='1'/>
+        <parameter type-id='92d15ae9' name='match' filepath='drivers/base/bus.c' line='327' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='bus_unregister' mangled-name='bus_unregister' filepath='drivers/base/bus.c' line='886' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_unregister'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='886' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='subsys_system_register' mangled-name='subsys_system_register' filepath='drivers/base/bus.c' line='1156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='subsys_system_register'>
+        <parameter type-id='5e2671f8' name='subsys' filepath='drivers/base/bus.c' line='1156' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/bus.c' line='1157' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_unregister_notifier' mangled-name='bus_unregister_notifier' filepath='drivers/base/bus.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_unregister_notifier'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='906' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/base/bus.c' line='906' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_register_notifier' mangled-name='bus_register_notifier' filepath='drivers/base/bus.c' line='900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_register_notifier'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='900' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/base/bus.c' line='900' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bus_for_each_dev' mangled-name='bus_for_each_dev' filepath='drivers/base/bus.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_for_each_dev'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/bus.c' line='291' column='1'/>
+        <parameter type-id='fa0b179b' name='start' filepath='drivers/base/bus.c' line='291' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/bus.c' line='292' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/base/bus.c' line='292' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e6c6c6cd' size-in-bits='64' id='92d15ae9'/>
+      <function-type size-in-bits='64' id='e6c6c6cd'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/class.c' language='LANG_C89'>
+      <class-decl name='class_interface' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='792' column='1' id='aba1d11b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/device.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_dev' type-id='6da1022f' visibility='default' filepath='include/linux/device.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='remove_dev' type-id='0bd06100' visibility='default' filepath='include/linux/device.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='class_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='742' column='1' id='fc927268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='c4c01ce7' visibility='default' filepath='include/linux/device.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='dfcac4bb' visibility='default' filepath='include/linux/device.h' line='746' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fc927268' size-in-bits='64' id='9cc1ac3e'/>
+      <pointer-type-def type-id='aba1d11b' size-in-bits='64' id='ec167ceb'/>
+      <qualified-type-def type-id='fc927268' const='yes' id='2bc6669b'/>
+      <pointer-type-def type-id='2bc6669b' size-in-bits='64' id='9a53a8a3'/>
+      <pointer-type-def type-id='fa712c1b' size-in-bits='64' id='6da1022f'/>
+      <pointer-type-def type-id='32aa9d63' size-in-bits='64' id='c4c01ce7'/>
+      <pointer-type-def type-id='5243924f' size-in-bits='64' id='dfcac4bb'/>
+      <pointer-type-def type-id='391f1e06' size-in-bits='64' id='0bd06100'/>
+      <function-decl name='class_find_device' mangled-name='class_find_device' filepath='drivers/base/class.c' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_find_device'>
+        <parameter type-id='67aca04f' name='class' filepath='drivers/base/class.c' line='398' column='1'/>
+        <parameter type-id='fa0b179b' name='start' filepath='drivers/base/class.c' line='398' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/class.c' line='399' column='1'/>
+        <parameter type-id='92d15ae9' name='match' filepath='drivers/base/class.c' line='400' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='class_interface_unregister' mangled-name='class_interface_unregister' filepath='drivers/base/class.c' line='452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_interface_unregister'>
+        <parameter type-id='ec167ceb' name='class_intf' filepath='drivers/base/class.c' line='452' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__class_create' mangled-name='__class_create' filepath='drivers/base/class.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_create'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/class.c' line='225' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/class.c' line='225' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/base/class.c' line='226' column='1'/>
+        <return type-id='67aca04f'/>
+      </function-decl>
+      <function-decl name='__class_register' mangled-name='__class_register' filepath='drivers/base/class.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__class_register'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='152' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/base/class.c' line='152' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='class_destroy' mangled-name='class_destroy' filepath='drivers/base/class.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_destroy'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='260' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='class_unregister' mangled-name='class_unregister' filepath='drivers/base/class.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_unregister'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='class_remove_file_ns' mangled-name='class_remove_file_ns' filepath='drivers/base/class.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_remove_file_ns'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='100' column='1'/>
+        <parameter type-id='9a53a8a3' name='attr' filepath='drivers/base/class.c' line='100' column='1'/>
+        <parameter type-id='eaa32e2f' name='ns' filepath='drivers/base/class.c' line='101' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='class_create_file_ns' mangled-name='class_create_file_ns' filepath='drivers/base/class.c' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='class_create_file_ns'>
+        <parameter type-id='67aca04f' name='cls' filepath='drivers/base/class.c' line='87' column='1'/>
+        <parameter type-id='9a53a8a3' name='attr' filepath='drivers/base/class.c' line='87' column='1'/>
+        <parameter type-id='eaa32e2f' name='ns' filepath='drivers/base/class.c' line='88' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fa712c1b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='ec167ceb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32aa9d63'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9cc1ac3e'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5243924f'>
+        <parameter type-id='67aca04f'/>
+        <parameter type-id='9cc1ac3e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='391f1e06'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='ec167ceb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/component.c' language='LANG_C89'>
+      <class-decl name='component_master_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/component.h' line='52' column='1' id='85fa4490'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='613d39f5' visibility='default' filepath='include/linux/component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='dd787f72' visibility='default' filepath='include/linux/component.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component_match_array' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='47' column='1' id='c991d9f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/base/component.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compare' type-id='92d15ae9' visibility='default' filepath='drivers/base/component.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare_typed' type-id='78e7ce8e' visibility='default' filepath='drivers/base/component.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='680bf43c' visibility='default' filepath='drivers/base/component.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='component' type-id='52f567fe' visibility='default' filepath='drivers/base/component.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duplicate' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='72' column='1' id='02e89848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/base/component.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='master' type-id='f623d45b' visibility='default' filepath='drivers/base/component.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bound' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='14f24806' visibility='default' filepath='drivers/base/component.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='subcomponent' type-id='95e97e5e' visibility='default' filepath='drivers/base/component.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/component.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='master' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='62' column='1' id='d050fd8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/base/component.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bound' type-id='b50a4934' visibility='default' filepath='drivers/base/component.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='27729729' visibility='default' filepath='drivers/base/component.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/component.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='match' type-id='7d9421ac' visibility='default' filepath='drivers/base/component.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/base/component.c' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='component_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/component.h' line='16' column='1' id='89a1ee2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='3385b72d' visibility='default' filepath='include/linux/component.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='9e6fc9aa' visibility='default' filepath='include/linux/component.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02e89848' size-in-bits='64' id='52f567fe'/>
+      <pointer-type-def type-id='c991d9f0' size-in-bits='64' id='72dd5196'/>
+      <qualified-type-def type-id='85fa4490' const='yes' id='ec8469f9'/>
+      <pointer-type-def type-id='ec8469f9' size-in-bits='64' id='27729729'/>
+      <qualified-type-def type-id='89a1ee2b' const='yes' id='2b7b3388'/>
+      <pointer-type-def type-id='2b7b3388' size-in-bits='64' id='14f24806'/>
+      <pointer-type-def type-id='08bd3e89' size-in-bits='64' id='3385b72d'/>
+      <pointer-type-def type-id='1fc93694' size-in-bits='64' id='78e7ce8e'/>
+      <pointer-type-def type-id='d050fd8b' size-in-bits='64' id='f623d45b'/>
+      <pointer-type-def type-id='be36c378' size-in-bits='64' id='9e6fc9aa'/>
+      <function-decl name='component_master_add_with_match' mangled-name='component_master_add_with_match' filepath='drivers/base/component.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_master_add_with_match'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='468' column='1'/>
+        <parameter type-id='27729729' name='ops' filepath='drivers/base/component.c' line='469' column='1'/>
+        <parameter type-id='7d9421ac' name='match' filepath='drivers/base/component.c' line='470' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='component_unbind_all' mangled-name='component_unbind_all' filepath='drivers/base/component.c' line='549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_unbind_all'>
+        <parameter type-id='fa0b179b' name='master_dev' filepath='drivers/base/component.c' line='549' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/component.c' line='549' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_match_add_release' mangled-name='component_match_add_release' filepath='drivers/base/component.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_match_add_release'>
+        <parameter type-id='fa0b179b' name='master' filepath='drivers/base/component.c' line='401' column='1'/>
+        <parameter type-id='3630c5f2' name='matchptr' filepath='drivers/base/component.c' line='402' column='1'/>
+        <parameter type-id='680bf43c' name='release' filepath='drivers/base/component.c' line='403' column='1'/>
+        <parameter type-id='92d15ae9' name='compare' filepath='drivers/base/component.c' line='404' column='1'/>
+        <parameter type-id='eaa32e2f' name='compare_data' filepath='drivers/base/component.c' line='404' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_master_del' mangled-name='component_master_del' filepath='drivers/base/component.c' line='513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_master_del'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='513' column='1'/>
+        <parameter type-id='27729729' name='ops' filepath='drivers/base/component.c' line='514' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_del' mangled-name='component_del' filepath='drivers/base/component.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_del'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='757' column='1'/>
+        <parameter type-id='14f24806' name='ops' filepath='drivers/base/component.c' line='757' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='component_bind_all' mangled-name='component_bind_all' filepath='drivers/base/component.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_bind_all'>
+        <parameter type-id='fa0b179b' name='master_dev' filepath='drivers/base/component.c' line='632' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/component.c' line='632' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='component_add' mangled-name='component_add' filepath='drivers/base/component.c' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='component_add'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/component.c' line='742' column='1'/>
+        <parameter type-id='14f24806' name='ops' filepath='drivers/base/component.c' line='742' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='37c0f586' size-in-bits='64' id='7d9421ac'/>
+      <pointer-type-def type-id='7d9421ac' size-in-bits='64' id='3630c5f2'/>
+      <function-type size-in-bits='64' id='08bd3e89'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fc93694'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be36c378'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='b5d4a6d2' size-in-bits='64' id='680bf43c'/>
+      <class-decl name='component_match' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='56' column='1' id='37c0f586'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare' type-id='72dd5196' visibility='default' filepath='drivers/base/component.c' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr 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='18' column='1' id='6160a6ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='k_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/klist.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='k_list' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='a80942ae' visibility='default' filepath='include/linux/klist.h' line='22' 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='37' column='1' id='3d045a53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_klist' type-id='eaa32e2f' visibility='default' filepath='include/linux/klist.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_node' type-id='72f469ec' visibility='default' filepath='include/linux/klist.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_ref' type-id='400fb07b' visibility='default' filepath='include/linux/klist.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pm_qos_flags' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='75' column='1' id='e0a9bd3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='effective_flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_qos_request' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='111' column='1' id='32536656'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c47ba023' visibility='default' filepath='include/linux/pm_qos.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='5d6ef881' visibility='default' filepath='include/linux/pm_qos.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_qos.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_pm_qos_req_type' filepath='include/linux/pm_qos.h' line='103' column='1' id='c47ba023'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_PM_QOS_RESUME_LATENCY' value='1'/>
+        <enumerator name='DEV_PM_QOS_LATENCY_TOLERANCE' value='2'/>
+        <enumerator name='DEV_PM_QOS_MIN_FREQUENCY' value='3'/>
+        <enumerator name='DEV_PM_QOS_MAX_FREQUENCY' value='4'/>
+        <enumerator name='DEV_PM_QOS_FLAGS' value='5'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='448' is-anonymous='yes' visibility='default' filepath='include/linux/pm_qos.h' line='113' column='1' id='5d6ef881'>
+        <data-member access='public'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='flr' type-id='a70ae6be' visibility='default' filepath='include/linux/pm_qos.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='freq' type-id='da4cc8f3' visibility='default' filepath='include/linux/pm_qos.h' line='116' 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='49' column='1' id='a70ae6be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_qos.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='device_link' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1366' column='1' id='b52abcec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supplier' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumer' type-id='fa0b179b' visibility='default' filepath='include/linux/device.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c_node' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link_dev' type-id='66e487eb' visibility='default' filepath='include/linux/device.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='status' type-id='3f7ac0c9' visibility='default' filepath='include/linux/device.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/device.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='rpm_active' type-id='64615833' visibility='default' filepath='include/linux/device.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/device.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/device.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='rm_work' type-id='ef9025d0' visibility='default' filepath='include/linux/device.h' line='1380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='supplier_preactivated' type-id='b50a4934' visibility='default' filepath='include/linux/device.h' line='1381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/device.h' line='1386' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='device_link_state' filepath='include/linux/device.h' line='1096' column='1' id='3f7ac0c9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DL_STATE_NONE' value='-1'/>
+        <enumerator name='DL_STATE_DORMANT' value='0'/>
+        <enumerator name='DL_STATE_AVAILABLE' value='1'/>
+        <enumerator name='DL_STATE_CONSUMER_PROBE' value='2'/>
+        <enumerator name='DL_STATE_ACTIVE' value='3'/>
+        <enumerator name='DL_STATE_SUPPLIER_UNBIND' value='4'/>
+      </enum-decl>
+      <qualified-type-def type-id='dbf3947c' const='yes' id='fad8dcd1'/>
+      <pointer-type-def type-id='fad8dcd1' size-in-bits='64' id='de63df21'/>
+      <pointer-type-def type-id='32536656' size-in-bits='64' id='a80fd1bc'/>
+      <pointer-type-def type-id='b52abcec' size-in-bits='64' id='7acfb3fa'/>
+      <pointer-type-def type-id='3d045a53' size-in-bits='64' id='4b4b90b3'/>
+      <pointer-type-def type-id='b3fff074' size-in-bits='64' id='a80942ae'/>
+      <function-decl name='device_initialize' mangled-name='device_initialize' filepath='drivers/base/core.c' line='2383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_initialize'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2383' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_driver_string' mangled-name='dev_driver_string' filepath='drivers/base/core.c' line='1622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_driver_string'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='1622' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='_dev_err' mangled-name='_dev_err' filepath='drivers/base/core.c' line='4090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_err'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4090' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4090' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_del' mangled-name='device_del' filepath='drivers/base/core.c' line='3042' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_del'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='3042' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_set_name' mangled-name='dev_set_name' filepath='drivers/base/core.c' line='2688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2688' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='2688' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_add' mangled-name='device_add' filepath='drivers/base/core.c' line='2787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_add'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2787' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_create_file' mangled-name='device_create_file' filepath='drivers/base/core.c' line='2270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2270' column='1'/>
+        <parameter type-id='de63df21' name='attr' filepath='drivers/base/core.c' line='2271' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_dev_warn' mangled-name='_dev_warn' filepath='drivers/base/core.c' line='4091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_warn'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4091' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4091' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_create' mangled-name='device_create' filepath='drivers/base/core.c' line='3624' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create'>
+        <parameter type-id='67aca04f' name='class' filepath='drivers/base/core.c' line='3624' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/base/core.c' line='3624' column='1'/>
+        <parameter type-id='8504f260' name='devt' filepath='drivers/base/core.c' line='3625' column='1'/>
+        <parameter type-id='eaa32e2f' name='drvdata' filepath='drivers/base/core.c' line='3625' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='3625' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='_dev_info' mangled-name='_dev_info' filepath='drivers/base/core.c' line='4093' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_info'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4093' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4093' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_link_add' mangled-name='device_link_add' filepath='drivers/base/core.c' line='530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_link_add'>
+        <parameter type-id='fa0b179b' name='consumer' filepath='drivers/base/core.c' line='530' column='1'/>
+        <parameter type-id='fa0b179b' name='supplier' filepath='drivers/base/core.c' line='531' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/base/core.c' line='531' column='1'/>
+        <return type-id='7acfb3fa'/>
+      </function-decl>
+      <function-decl name='_dev_crit' mangled-name='_dev_crit' filepath='drivers/base/core.c' line='4089' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_crit'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4089' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4089' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_find_child' mangled-name='device_find_child' filepath='drivers/base/core.c' line='3270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_find_child'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/base/core.c' line='3270' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/core.c' line='3270' column='1'/>
+        <parameter type-id='92d15ae9' name='match' filepath='drivers/base/core.c' line='3271' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='dev_printk' mangled-name='dev_printk' filepath='drivers/base/core.c' line='4053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_printk'>
+        <parameter type-id='80f4b756' name='level' filepath='drivers/base/core.c' line='4053' column='1'/>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4053' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4054' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_create_with_groups' mangled-name='device_create_with_groups' filepath='drivers/base/core.c' line='3664' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_with_groups'>
+        <parameter type-id='67aca04f' name='class' filepath='drivers/base/core.c' line='3664' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/base/core.c' line='3665' column='1'/>
+        <parameter type-id='8504f260' name='devt' filepath='drivers/base/core.c' line='3665' column='1'/>
+        <parameter type-id='eaa32e2f' name='drvdata' filepath='drivers/base/core.c' line='3666' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/core.c' line='3667' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='3668' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='_dev_notice' mangled-name='_dev_notice' filepath='drivers/base/core.c' line='4092' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_notice'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4092' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4092' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='put_device' mangled-name='put_device' filepath='drivers/base/core.c' line='3003' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='3003' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_device' mangled-name='get_device' filepath='drivers/base/core.c' line='2993' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2993' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='device_unregister' mangled-name='device_unregister' filepath='drivers/base/core.c' line='3114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='3114' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_for_each_child' mangled-name='device_for_each_child' filepath='drivers/base/core.c' line='3205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_for_each_child'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/base/core.c' line='3205' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/core.c' line='3205' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/base/core.c' line='3206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_store_int' mangled-name='device_store_int' filepath='drivers/base/core.c' line='1700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_store_int'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1700' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1701' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1702' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1702' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_store_bool' mangled-name='device_store_bool' filepath='drivers/base/core.c' line='1730' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_store_bool'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1730' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1730' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/base/core.c' line='1731' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/core.c' line='1731' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_show_int' mangled-name='device_show_int' filepath='drivers/base/core.c' line='1720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_show_int'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1720' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1721' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1722' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_show_bool' mangled-name='device_show_bool' filepath='drivers/base/core.c' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_show_bool'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='1742' column='1'/>
+        <parameter type-id='89a2612a' name='attr' filepath='drivers/base/core.c' line='1742' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/base/core.c' line='1743' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='device_rename' mangled-name='device_rename' filepath='drivers/base/core.c' line='3740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_rename'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='3740' column='1'/>
+        <parameter type-id='80f4b756' name='new_name' filepath='drivers/base/core.c' line='3740' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_remove_groups' mangled-name='device_remove_groups' filepath='drivers/base/core.c' line='2008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_groups'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2008' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/base/core.c' line='2009' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_remove_file_self' mangled-name='device_remove_file_self' filepath='drivers/base/core.c' line='2309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_file_self'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2309' column='1'/>
+        <parameter type-id='de63df21' name='attr' filepath='drivers/base/core.c' line='2310' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='device_remove_file' mangled-name='device_remove_file' filepath='drivers/base/core.c' line='2294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2294' column='1'/>
+        <parameter type-id='de63df21' name='attr' filepath='drivers/base/core.c' line='2295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_remove_bin_file' mangled-name='device_remove_bin_file' filepath='drivers/base/core.c' line='2339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_remove_bin_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2339' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2340' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_register' mangled-name='device_register' filepath='drivers/base/core.c' line='2978' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2978' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_match_name' mangled-name='device_match_name' filepath='drivers/base/core.c' line='4172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_match_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='4172' column='1'/>
+        <parameter type-id='eaa32e2f' name='name' filepath='drivers/base/core.c' line='4172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_match_fwnode' mangled-name='device_match_fwnode' filepath='drivers/base/core.c' line='4184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_match_fwnode'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='4184' column='1'/>
+        <parameter type-id='eaa32e2f' name='fwnode' filepath='drivers/base/core.c' line='4184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_link_del' mangled-name='device_link_del' filepath='drivers/base/core.c' line='828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_link_del'>
+        <parameter type-id='7acfb3fa' name='link' filepath='drivers/base/core.c' line='828' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_destroy' mangled-name='device_destroy' filepath='drivers/base/core.c' line='3689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_destroy'>
+        <parameter type-id='67aca04f' name='class' filepath='drivers/base/core.c' line='3689' column='1'/>
+        <parameter type-id='8504f260' name='devt' filepath='drivers/base/core.c' line='3689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_create_bin_file' mangled-name='device_create_bin_file' filepath='drivers/base/core.c' line='2324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_create_bin_file'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/core.c' line='2324' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='drivers/base/core.c' line='2325' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_dev_emerg' mangled-name='_dev_emerg' filepath='drivers/base/core.c' line='4087' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_dev_emerg'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/base/core.c' line='4087' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/core.c' line='4087' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='device_attribute' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='837' column='1' id='dbf3947c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='3dcc4acf' visibility='default' filepath='include/linux/device.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='839105d3' visibility='default' filepath='include/linux/device.h' line='841' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dbce337a' size-in-bits='64' id='559ac6f0'/>
+      <pointer-type-def type-id='dbf3947c' size-in-bits='64' id='89a2612a'/>
+      <function-type size-in-bits='64' id='b3fff074'>
+        <parameter type-id='4b4b90b3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='d83a2db1' const='yes' id='dbce337a'/>
+      <pointer-type-def type-id='4bbe36cb' size-in-bits='64' id='3dcc4acf'/>
+      <pointer-type-def type-id='50bd3cc7' size-in-bits='64' id='839105d3'/>
+      <function-type size-in-bits='64' id='4bbe36cb'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='89a2612a' name='attr'/>
+        <parameter type-id='26a90f95' name='buf'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50bd3cc7'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='89a2612a' name='attr'/>
+        <parameter type-id='80f4b756' name='buf'/>
+        <parameter type-id='b59d7dce' name='size'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/cpu.c' language='LANG_C89'>
+      <var-decl name='cpu_subsys' type-id='b31bfc8a' mangled-name='cpu_subsys' visibility='default' filepath='drivers/base/cpu.c' line='128' column='1' elf-symbol-id='cpu_subsys'/>
+      <function-decl name='get_cpu_device' mangled-name='get_cpu_device' filepath='drivers/base/cpu.c' line='393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_cpu_device'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/base/cpu.c' line='393' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/dd.c' language='LANG_C89'>
+      <function-decl name='driver_attach' mangled-name='driver_attach' filepath='drivers/base/dd.c' line='1115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_attach'>
+        <parameter type-id='00c7b870' name='drv' filepath='drivers/base/dd.c' line='1115' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_release_driver' mangled-name='device_release_driver' filepath='drivers/base/dd.c' line='1212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_release_driver'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/dd.c' line='1212' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_bind_driver' mangled-name='device_bind_driver' filepath='drivers/base/dd.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_bind_driver'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/dd.c' line='468' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_attach' mangled-name='device_attach' filepath='drivers/base/dd.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_attach'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/dd.c' line='962' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/devcon.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='80f4b756' size-in-bits='128' id='35e20666'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <typedef-decl name='devcon_match_fn_t' type-id='2100d554' filepath='include/linux/device.h' line='1049' column='1' id='2517d133'/>
+      <class-decl name='device_connection' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/device.h' line='1042' column='1' id='c42d830c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/device.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endpoint' type-id='35e20666' visibility='default' filepath='include/linux/device.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/device.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/device.h' line='1046' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c42d830c' size-in-bits='64' id='ee2d5a9a'/>
+      <pointer-type-def type-id='a179af1a' size-in-bits='64' id='2100d554'/>
+      <function-decl name='fwnode_connection_find_match' mangled-name='fwnode_connection_find_match' filepath='drivers/base/devcon.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_connection_find_match'>
+        <parameter type-id='4a935625' name='fwnode' filepath='drivers/base/devcon.c' line='71' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/base/devcon.c' line='72' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/devcon.c' line='72' column='1'/>
+        <parameter type-id='2517d133' name='match' filepath='drivers/base/devcon.c' line='73' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='device_connection_find_match' mangled-name='device_connection_find_match' filepath='drivers/base/devcon.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_connection_find_match'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devcon.c' line='99' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/base/devcon.c' line='99' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/devcon.c' line='100' column='1'/>
+        <parameter type-id='2517d133' name='match' filepath='drivers/base/devcon.c' line='100' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a179af1a'>
+        <parameter type-id='ee2d5a9a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/devres.c' language='LANG_C89'>
+      <typedef-decl name='dr_release_t' type-id='680bf43c' filepath='include/linux/device.h' line='899' column='1' id='b6609e5b'/>
+      <typedef-decl name='dr_match_t' type-id='7e69f315' filepath='include/linux/device.h' line='900' column='1' id='4a798fcf'/>
+      <pointer-type-def type-id='0fa06c89' size-in-bits='64' id='7e69f315'/>
+      <function-decl name='devres_add' mangled-name='devres_add' filepath='drivers/base/devres.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_add'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='229' column='1'/>
+        <parameter type-id='eaa32e2f' name='res' filepath='drivers/base/devres.c' line='229' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_kmalloc' mangled-name='devm_kmalloc' filepath='drivers/base/devres.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kmalloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='810' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/devres.c' line='810' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='810' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_kfree' mangled-name='devm_kfree' filepath='drivers/base/devres.c' line='940' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kfree'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='940' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='drivers/base/devres.c' line='940' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_add_action' mangled-name='devm_add_action' filepath='drivers/base/devres.c' line='723' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_add_action'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='723' column='1'/>
+        <parameter type-id='b7f9d8e6' name='action' filepath='drivers/base/devres.c' line='723' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/devres.c' line='723' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_kasprintf' mangled-name='devm_kasprintf' filepath='drivers/base/devres.c' line='920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kasprintf'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='920' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='920' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/devres.c' line='920' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='devres_release' mangled-name='devres_release' filepath='drivers/base/devres.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_release'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='406' column='1'/>
+        <parameter type-id='b6609e5b' name='release' filepath='drivers/base/devres.c' line='406' column='1'/>
+        <parameter type-id='4a798fcf' name='match' filepath='drivers/base/devres.c' line='407' column='1'/>
+        <parameter type-id='eaa32e2f' name='match_data' filepath='drivers/base/devres.c' line='407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devres_free' mangled-name='devres_free' filepath='drivers/base/devres.c' line='209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_free'>
+        <parameter type-id='eaa32e2f' name='res' filepath='drivers/base/devres.c' line='209' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devres_destroy' mangled-name='devres_destroy' filepath='drivers/base/devres.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_destroy'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='376' column='1'/>
+        <parameter type-id='b6609e5b' name='release' filepath='drivers/base/devres.c' line='376' column='1'/>
+        <parameter type-id='4a798fcf' name='match' filepath='drivers/base/devres.c' line='377' column='1'/>
+        <parameter type-id='eaa32e2f' name='match_data' filepath='drivers/base/devres.c' line='377' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devres_alloc_node' mangled-name='devres_alloc_node' filepath='drivers/base/devres.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devres_alloc_node'>
+        <parameter type-id='b6609e5b' name='release' filepath='drivers/base/devres.c' line='149' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/devres.c' line='149' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='149' column='1'/>
+        <parameter type-id='95e97e5e' name='nid' filepath='drivers/base/devres.c' line='149' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_kvasprintf' mangled-name='devm_kvasprintf' filepath='drivers/base/devres.c' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kvasprintf'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/base/devres.c' line='888' column='1'/>
+        <parameter type-id='2aee9912' name='ap' filepath='drivers/base/devres.c' line='889' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='devm_kstrdup' mangled-name='devm_kstrdup' filepath='drivers/base/devres.c' line='839' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kstrdup'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='839' column='1'/>
+        <parameter type-id='80f4b756' name='s' filepath='drivers/base/devres.c' line='839' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='839' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='devm_kmemdup' mangled-name='devm_kmemdup' filepath='drivers/base/devres.c' line='966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_kmemdup'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/devres.c' line='966' column='1'/>
+        <parameter type-id='eaa32e2f' name='src' filepath='drivers/base/devres.c' line='966' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/base/devres.c' line='966' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/devres.c' line='966' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0fa06c89'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <typedef-decl name='va_list' type-id='7f896fb4' filepath='prebuilts-master/clang/host/linux-x86/clang-r416183b/lib64/clang/12.0.5/include/stdarg.h' line='14' column='1' id='2aee9912'/>
+      <typedef-decl name='__builtin_va_list' type-id='5f919c1f' filepath='kernel/printk/printk.c' line='1646' column='1' id='7f896fb4'/>
+      <class-decl name='__va_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1' id='5f919c1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__stack' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__gr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__vr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='__gr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='__vr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr 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='00c7b870' name='drv' filepath='drivers/base/driver.c' line='146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='00c7b870' name='drv' filepath='drivers/base/driver.c' line='190' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='driver_find_device' mangled-name='driver_find_device' filepath='drivers/base/driver.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_find_device'>
+        <parameter type-id='00c7b870' name='drv' filepath='drivers/base/driver.c' line='75' column='1'/>
+        <parameter type-id='fa0b179b' name='start' filepath='drivers/base/driver.c' line='76' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/driver.c' line='76' column='1'/>
+        <parameter type-id='92d15ae9' name='match' filepath='drivers/base/driver.c' line='77' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='driver_find' mangled-name='driver_find' filepath='drivers/base/driver.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='driver_find'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/driver.c' line='213' column='1'/>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/base/driver.c' line='213' column='1'/>
+        <return type-id='00c7b870'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/firmware_loader/main.c' language='LANG_C89'>
+      <class-decl name='firmware' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/firmware.h' line='12' column='1' id='62049774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/firmware.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='bbaf3419' visibility='default' filepath='include/linux/firmware.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/firmware.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/firmware.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='62049774' const='yes' id='732bc085'/>
+      <pointer-type-def type-id='732bc085' size-in-bits='64' id='fce0537d'/>
+      <pointer-type-def type-id='fce0537d' size-in-bits='64' id='6c2331f5'/>
+      <pointer-type-def type-id='b4dce158' size-in-bits='64' id='c8e4e392'/>
+      <function-decl name='release_firmware' mangled-name='release_firmware' filepath='drivers/base/firmware_loader/main.c' line='953' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_firmware'>
+        <parameter type-id='fce0537d' name='fw' filepath='drivers/base/firmware_loader/main.c' line='953' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='request_firmware_nowait' mangled-name='request_firmware_nowait' filepath='drivers/base/firmware_loader/main.c' line='1015' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_nowait'>
+        <parameter type-id='2730d015' name='module' filepath='drivers/base/firmware_loader/main.c' line='1016' column='1'/>
+        <parameter type-id='b50a4934' name='uevent' filepath='drivers/base/firmware_loader/main.c' line='1016' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='1017' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='1017' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/base/firmware_loader/main.c' line='1017' column='1'/>
+        <parameter type-id='eaa32e2f' name='context' filepath='drivers/base/firmware_loader/main.c' line='1017' column='1'/>
+        <parameter type-id='c8e4e392' name='cont' filepath='drivers/base/firmware_loader/main.c' line='1018' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware_into_buf' mangled-name='request_firmware_into_buf' filepath='drivers/base/firmware_loader/main.c' line='933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_into_buf'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='933' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='933' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='934' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/base/firmware_loader/main.c' line='934' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/firmware_loader/main.c' line='934' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware_direct' mangled-name='request_firmware_direct' filepath='drivers/base/firmware_loader/main.c' line='879' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware_direct'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='879' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='880' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='880' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='request_firmware' mangled-name='request_firmware' filepath='drivers/base/firmware_loader/main.c' line='827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_firmware'>
+        <parameter type-id='6c2331f5' name='firmware_p' filepath='drivers/base/firmware_loader/main.c' line='827' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='827' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='828' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='firmware_request_nowarn' mangled-name='firmware_request_nowarn' filepath='drivers/base/firmware_loader/main.c' line='854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='firmware_request_nowarn'>
+        <parameter type-id='6c2331f5' name='firmware' filepath='drivers/base/firmware_loader/main.c' line='854' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/firmware_loader/main.c' line='854' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/base/firmware_loader/main.c' line='855' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b4dce158'>
+        <parameter type-id='fce0537d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/platform.c' language='LANG_C89'>
+      <class-decl name='platform_device_info' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='75' column='1' id='b4a2c74e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/platform_device.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/platform_device.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node_reused' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/platform_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/platform_device.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='res' type-id='e153f6de' visibility='default' filepath='include/linux/platform_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_res' type-id='f0981eeb' visibility='default' filepath='include/linux/platform_device.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/platform_device.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='size_data' type-id='b59d7dce' visibility='default' filepath='include/linux/platform_device.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/platform_device.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='92' 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='231' column='1' id='822bf95b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/property.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_array' type-id='b50a4934' visibility='default' filepath='include/linux/property.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='fec738e2' visibility='default' filepath='include/linux/property.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7f9d5221' visibility='default' filepath='include/linux/property.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_prop_type' filepath='include/linux/property.h' line='19' column='1' id='fec738e2'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='236' column='1' id='7f9d5221'>
+        <data-member access='public'>
+          <var-decl name='pointer' type-id='cbb0e2f4' visibility='default' filepath='include/linux/property.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value' type-id='8e9a613b' visibility='default' filepath='include/linux/property.h' line='250' 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='237' column='1' id='cbb0e2f4'>
+        <data-member access='public'>
+          <var-decl name='u8_data' type-id='bbaf3419' visibility='default' filepath='include/linux/property.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u16_data' type-id='80455526' visibility='default' filepath='include/linux/property.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u32_data' type-id='aded214c' visibility='default' filepath='include/linux/property.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u64_data' type-id='c8fec899' visibility='default' filepath='include/linux/property.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='str' type-id='13956559' visibility='default' filepath='include/linux/property.h' line='242' 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='244' column='1' id='8e9a613b'>
+        <data-member access='public'>
+          <var-decl name='u8_data' type-id='f9b06939' visibility='default' filepath='include/linux/property.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u16_data' type-id='1dc6a898' visibility='default' filepath='include/linux/property.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u32_data' type-id='19c2251e' visibility='default' filepath='include/linux/property.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u64_data' type-id='91ce1af9' visibility='default' filepath='include/linux/property.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='str' type-id='80f4b756' visibility='default' filepath='include/linux/property.h' line='249' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='platform_driver' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='196' column='1' id='0742eda5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probe' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='remove' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='2cbd236c' visibility='default' filepath='include/linux/platform_device.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='5a92c1cc' visibility='default' filepath='include/linux/platform_device.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/platform_device.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/platform_device.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='id_table' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='prevent_deferred_probe' type-id='b50a4934' visibility='default' filepath='include/linux/platform_device.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b4a2c74e' const='yes' id='d0fea0bb'/>
+      <pointer-type-def type-id='d0fea0bb' size-in-bits='64' id='91d6c443'/>
+      <qualified-type-def type-id='822bf95b' const='yes' id='283e536e'/>
+      <pointer-type-def type-id='283e536e' size-in-bits='64' id='9e1d140c'/>
+      <pointer-type-def type-id='d5c0a628' size-in-bits='64' id='80455526'/>
+      <qualified-type-def type-id='91ce1af9' const='yes' id='49c81889'/>
+      <pointer-type-def type-id='49c81889' size-in-bits='64' id='c8fec899'/>
+      <pointer-type-def type-id='b083f9b9' size-in-bits='64' id='e05ae2cd'/>
+      <pointer-type-def type-id='90220a52' size-in-bits='64' id='5a92c1cc'/>
+      <pointer-type-def type-id='0742eda5' size-in-bits='64' id='d53c2eb5'/>
+      <qualified-type-def type-id='d53c2eb5' const='yes' id='7c7c6daa'/>
+      <pointer-type-def type-id='7c7c6daa' size-in-bits='64' id='77e06080'/>
+      <pointer-type-def type-id='822bf95b' size-in-bits='64' id='6db3218b'/>
+      <pointer-type-def type-id='cfb839d2' size-in-bits='64' id='2cbd236c'/>
+      <var-decl name='platform_bus_type' type-id='b31bfc8a' mangled-name='platform_bus_type' visibility='default' filepath='drivers/base/platform.c' line='1262' column='1' elf-symbol-id='platform_bus_type'/>
+      <function-decl name='platform_device_register_full' mangled-name='platform_device_register_full' filepath='drivers/base/platform.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_register_full'>
+        <parameter type-id='91d6c443' name='pdevinfo' filepath='drivers/base/platform.c' line='622' column='1'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='platform_device_unregister' mangled-name='platform_device_unregister' filepath='drivers/base/platform.c' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_unregister'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='606' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_driver_unregister' mangled-name='platform_driver_unregister' filepath='drivers/base/platform.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_driver_unregister'>
+        <parameter type-id='d53c2eb5' name='drv' filepath='drivers/base/platform.c' line='749' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_get_resource_byname' mangled-name='platform_get_resource_byname' filepath='drivers/base/platform.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_resource_byname'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='226' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/base/platform.c' line='227' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/platform.c' line='228' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='platform_get_irq_byname' mangled-name='platform_get_irq_byname' filepath='drivers/base/platform.c' line='274' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_byname'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='274' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/platform.c' line='274' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_alloc' mangled-name='platform_device_alloc' filepath='drivers/base/platform.c' line='379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_alloc'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/platform.c' line='379' column='1'/>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/base/platform.c' line='379' column='1'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='platform_device_add' mangled-name='platform_device_add' filepath='drivers/base/platform.c' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='475' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_del' mangled-name='platform_device_del' filepath='drivers/base/platform.c' line='565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_del'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='565' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_unregister_drivers' mangled-name='platform_unregister_drivers' filepath='drivers/base/platform.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_unregister_drivers'>
+        <parameter type-id='77e06080' name='drivers' filepath='drivers/base/platform.c' line='935' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/base/platform.c' line='936' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_irq_count' mangled-name='platform_irq_count' filepath='drivers/base/platform.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_irq_count'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_get_resource' mangled-name='platform_get_resource' filepath='drivers/base/platform.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_resource'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='49' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/base/platform.c' line='50' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='50' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='platform_get_irq_optional' mangled-name='platform_get_irq_optional' filepath='drivers/base/platform.c' line='194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_optional'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='194' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='194' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_get_irq_byname_optional' mangled-name='platform_get_irq_byname_optional' filepath='drivers/base/platform.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq_byname_optional'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='296' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/platform.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_get_irq' mangled-name='platform_get_irq' filepath='drivers/base/platform.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_get_irq'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/base/platform.c' line='165' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='165' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_register' mangled-name='platform_device_register' filepath='drivers/base/platform.c' line='590' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_register'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='590' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_put' mangled-name='platform_device_put' filepath='drivers/base/platform.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_put'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='351' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='platform_device_add_resources' mangled-name='platform_device_add_resources' filepath='drivers/base/platform.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_resources'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='407' column='1'/>
+        <parameter type-id='e153f6de' name='res' filepath='drivers/base/platform.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/base/platform.c' line='408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_add_properties' mangled-name='platform_device_add_properties' filepath='drivers/base/platform.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_properties'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='461' column='1'/>
+        <parameter type-id='9e1d140c' name='properties' filepath='drivers/base/platform.c' line='462' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='platform_device_add_data' mangled-name='platform_device_add_data' filepath='drivers/base/platform.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='platform_device_add_data'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='435' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/base/platform.c' line='435' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/base/platform.c' line='436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_platform_ioremap_resource' mangled-name='devm_platform_ioremap_resource' filepath='drivers/base/platform.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_platform_ioremap_resource'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/base/platform.c' line='73' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/base/platform.c' line='74' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__platform_register_drivers' mangled-name='__platform_register_drivers' filepath='drivers/base/platform.c' line='897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_register_drivers'>
+        <parameter type-id='77e06080' name='drivers' filepath='drivers/base/platform.c' line='897' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/base/platform.c' line='898' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/platform.c' line='898' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__platform_driver_register' mangled-name='__platform_driver_register' filepath='drivers/base/platform.c' line='732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_driver_register'>
+        <parameter type-id='d53c2eb5' name='drv' filepath='drivers/base/platform.c' line='732' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/base/platform.c' line='733' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__platform_driver_probe' mangled-name='__platform_driver_probe' filepath='drivers/base/platform.c' line='775' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__platform_driver_probe'>
+        <parameter type-id='d53c2eb5' name='drv' filepath='drivers/base/platform.c' line='775' column='1'/>
+        <parameter type-id='e05ae2cd' name='probe' filepath='drivers/base/platform.c' line='776' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='drivers/base/platform.c' line='776' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='213c3202' size-in-bits='64' id='79c2f4f8'/>
+      <pointer-type-def type-id='20b17040' size-in-bits='64' id='e153f6de'/>
+      <function-type size-in-bits='64' id='b083f9b9'>
+        <parameter type-id='db362995'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90220a52'>
+        <parameter type-id='db362995'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfb839d2'>
+        <parameter type-id='db362995' name='pdev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='7bb4e525' size-in-bits='64' id='db362995'/>
+      <class-decl name='platform_device' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='23' column='1' id='7bb4e525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='95e97e5e' 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='b50a4934' 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='66e487eb' visibility='default' filepath='include/linux/platform_device.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='platform_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='num_resources' type-id='19c2251e' visibility='default' filepath='include/linux/platform_device.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='resource' type-id='c9d64c0d' visibility='default' filepath='include/linux/platform_device.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='id_entry' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/platform_device.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='mfd_cell' type-id='fb02122b' visibility='default' filepath='include/linux/platform_device.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='archdata' type-id='89ee2f2f' visibility='default' filepath='include/linux/platform_device.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c4ec4353' const='yes' id='213c3202'/>
+      <qualified-type-def type-id='5218160d' const='yes' id='20b17040'/>
+      <class-decl name='pdev_archdata' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='14' column='1' id='89ee2f2f'/>
+      <class-decl name='platform_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='582' column='1' id='c4ec4353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='584' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='54cc740b' size-in-bits='64' id='fb02122b'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='mfd_cell' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='29' column='1' id='54cc740b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage_count' type-id='8a47abc3' visibility='default' filepath='include/linux/mfd/core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='suspend' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mfd/core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pdata_size' type-id='b59d7dce' visibility='default' filepath='include/linux/mfd/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/mfd/core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='of_compatible' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acpi_match' type-id='66421794' visibility='default' filepath='include/linux/mfd/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_resources' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/mfd/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ignore_resource_conflicts' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='pm_runtime_no_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent_supplies' type-id='13956559' visibility='default' filepath='include/linux/mfd/core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_parent_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49178f86' size-in-bits='64' id='8a47abc3'/>
+      <pointer-type-def type-id='7a7796b6' size-in-bits='64' id='66421794'/>
+      <qualified-type-def type-id='7fe6c639' const='yes' id='7a7796b6'/>
+      <class-decl name='mfd_cell_acpi_match' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='19' column='1' id='7fe6c639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pnpid' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adr' type-id='340461fe' visibility='default' filepath='include/linux/mfd/core.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3a47d82b' const='yes' id='340461fe'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/common.c' language='LANG_C89'>
+      <function-decl name='dev_pm_domain_detach' mangled-name='dev_pm_domain_detach' filepath='drivers/base/power/common.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_detach'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/common.c' line='183' column='1'/>
+        <parameter type-id='b50a4934' name='power_off' filepath='drivers/base/power/common.c' line='183' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_domain_attach_by_name' mangled-name='dev_pm_domain_attach_by_name' filepath='drivers/base/power/common.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_attach_by_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/common.c' line='160' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/power/common.c' line='161' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='dev_pm_domain_attach' mangled-name='dev_pm_domain_attach' filepath='drivers/base/power/common.c' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_domain_attach'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/common.c' line='102' column='1'/>
+        <parameter type-id='b50a4934' name='power_on' filepath='drivers/base/power/common.c' line='102' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/domain.c' language='LANG_C89'>
+      <class-decl name='dev_pm_opp' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/opp/opp.h' line='71' column='1' id='3ba81dd0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/opp/opp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='available' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dynamic' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='turbo' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='suspend' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pstate' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='drivers/opp/opp.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock_latency_ns' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='required_opps' type-id='79c84484' visibility='default' filepath='drivers/opp/opp.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='opp_table' type-id='e62a60bd' visibility='default' filepath='drivers/opp/opp.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/opp/opp.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/opp/opp.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='opp_table' size-in-bits='4544' is-struct='yes' visibility='default' filepath='drivers/opp/opp.h' line='162' column='1' id='08aeec0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='708c2394' visibility='default' filepath='drivers/opp/opp.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='opp_list' type-id='72f469ec' visibility='default' filepath='drivers/opp/opp.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/opp/opp.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/opp/opp.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/opp/opp.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='clock_latency_ns_max' type-id='7359adad' visibility='default' filepath='drivers/opp/opp.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='voltage_tolerance_v1' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='parsed_static_opps' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='shared_opp' type-id='943b03b5' visibility='default' filepath='drivers/opp/opp.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='suspend_opp' type-id='02e48bc6' visibility='default' filepath='drivers/opp/opp.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='genpd_virt_dev_lock' type-id='925167dc' visibility='default' filepath='drivers/opp/opp.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='genpd_virt_devs' type-id='50764ba3' visibility='default' filepath='drivers/opp/opp.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='required_opp_tables' type-id='ebb60db5' visibility='default' filepath='drivers/opp/opp.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='required_opp_count' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='supported_hw' type-id='807869d3' visibility='default' filepath='drivers/opp/opp.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='supported_hw_count' type-id='f0981eeb' visibility='default' filepath='drivers/opp/opp.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='prop_name' type-id='80f4b756' visibility='default' filepath='drivers/opp/opp.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='drivers/opp/opp.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='drivers/opp/opp.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='regulator_count' type-id='95e97e5e' visibility='default' filepath='drivers/opp/opp.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='genpd_performance_state' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2280'>
+          <var-decl name='is_genpd' type-id='b50a4934' visibility='default' filepath='drivers/opp/opp.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='set_opp' type-id='c1433076' visibility='default' filepath='drivers/opp/opp.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_opp_data' type-id='7727bbf2' visibility='default' filepath='drivers/opp/opp.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/opp/opp.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dentry_name' type-id='11641789' visibility='default' filepath='drivers/opp/opp.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='generic_pm_domain' size-in-bits='12160' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='94' column='1' id='d52c7591'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pm_domain.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='domain' type-id='7c94eaa3' visibility='default' filepath='include/linux/pm_domain.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='gpd_list_node' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='master_links' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='slave_links' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/pm_domain.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='gov' type-id='5db9bd89' visibility='default' filepath='include/linux/pm_domain.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='power_off_work' type-id='ef9025d0' visibility='default' filepath='include/linux/pm_domain.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='provider' type-id='4a935625' visibility='default' filepath='include/linux/pm_domain.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='has_provider' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pm_domain.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='sd_count' type-id='49178f86' visibility='default' filepath='include/linux/pm_domain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10528'>
+          <var-decl name='status' type-id='8c497ed4' visibility='default' filepath='include/linux/pm_domain.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='device_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='suspended_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='prepared_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='performance_state' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='cpus' type-id='b16b461b' visibility='default' filepath='include/linux/pm_domain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='power_off' type-id='16052051' visibility='default' filepath='include/linux/pm_domain.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='power_on' type-id='16052051' visibility='default' filepath='include/linux/pm_domain.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='opp_table' type-id='e62a60bd' visibility='default' filepath='include/linux/pm_domain.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='opp_to_performance_state' type-id='0adcd7cb' visibility='default' filepath='include/linux/pm_domain.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='set_performance_state' type-id='791b4a6b' visibility='default' filepath='include/linux/pm_domain.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='dev_ops' type-id='e56d1ecd' visibility='default' filepath='include/linux/pm_domain.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='max_off_time_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='max_off_time_changed' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11272'>
+          <var-decl name='cached_power_down_ok' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11280'>
+          <var-decl name='cached_power_down_state_idx' type-id='b50a4934' visibility='default' filepath='include/linux/pm_domain.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='attach_dev' type-id='9ab734dd' visibility='default' filepath='include/linux/pm_domain.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='detach_dev' type-id='c24523fe' visibility='default' filepath='include/linux/pm_domain.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='states' type-id='ab59ee31' visibility='default' filepath='include/linux/pm_domain.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='free_states' type-id='28773d52' visibility='default' filepath='include/linux/pm_domain.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='state_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='state_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='on_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='accounting_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='lock_ops' type-id='adbc0a2b' visibility='default' filepath='include/linux/pm_domain.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='' type-id='d4d3f8b8' visibility='default' filepath='include/linux/pm_domain.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_power_governor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='71' column='1' id='3e115181'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_down_ok' type-id='cb27da0d' visibility='default' filepath='include/linux/pm_domain.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='suspend_ok' type-id='df4bf537' visibility='default' filepath='include/linux/pm_domain.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gpd_status' filepath='include/linux/pm_domain.h' line='66' column='1' id='8c497ed4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GPD_STATE_ACTIVE' value='0'/>
+        <enumerator name='GPD_STATE_POWER_OFF' value='1'/>
+      </enum-decl>
+      <class-decl name='gpd_dev_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='76' column='1' id='e56d1ecd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='613d39f5' visibility='default' filepath='include/linux/pm_domain.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='613d39f5' visibility='default' filepath='include/linux/pm_domain.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_power_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='81' column='1' id='d5e6c299'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_off_latency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power_on_latency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='residency_ns' type-id='9b7c55ef' visibility='default' filepath='include/linux/pm_domain.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/pm_domain.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_time' type-id='fbc017ef' visibility='default' filepath='include/linux/pm_domain.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pm_domain.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_lock_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/power/domain.c' line='44' column='1' id='4c993ea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cccdf8f0' visibility='default' filepath='drivers/base/power/domain.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock_nested' type-id='795e6e5f' visibility='default' filepath='drivers/base/power/domain.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock_interruptible' type-id='16052051' visibility='default' filepath='drivers/base/power/domain.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlock' type-id='cccdf8f0' visibility='default' filepath='drivers/base/power/domain.c' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/pm_domain.h' line='138' column='1' id='d4d3f8b8'>
+        <data-member access='public'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/pm_domain.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='9df67ae2' visibility='default' filepath='include/linux/pm_domain.h' line='140' 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/pm_domain.h' line='140' column='1' id='9df67ae2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/linux/pm_domain.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/pm_domain.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genpd_onecell_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pm_domain.h' line='272' column='1' id='964819d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='domains' type-id='464f84a9' visibility='default' filepath='include/linux/pm_domain.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_domains' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_domain.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xlate' type-id='5b046932' visibility='default' filepath='include/linux/pm_domain.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='genpd_xlate_t' type-id='293b7ad2' filepath='include/linux/pm_domain.h' line='269' column='1' id='5b046932'/>
+      <qualified-type-def type-id='4c993ea6' const='yes' id='3cc19423'/>
+      <pointer-type-def type-id='3cc19423' size-in-bits='64' id='adbc0a2b'/>
+      <pointer-type-def type-id='3ba81dd0' size-in-bits='64' id='02e48bc6'/>
+      <pointer-type-def type-id='3e115181' size-in-bits='64' id='5db9bd89'/>
+      <pointer-type-def type-id='d52c7591' size-in-bits='64' id='855e3679'/>
+      <pointer-type-def type-id='4fa40360' size-in-bits='64' id='293b7ad2'/>
+      <pointer-type-def type-id='855e3679' size-in-bits='64' id='464f84a9'/>
+      <pointer-type-def type-id='964819d7' size-in-bits='64' id='29f0ac2f'/>
+      <pointer-type-def type-id='d5e6c299' size-in-bits='64' id='ab59ee31'/>
+      <pointer-type-def type-id='2aedd95d' size-in-bits='64' id='16052051'/>
+      <pointer-type-def type-id='a6676061' size-in-bits='64' id='9ab734dd'/>
+      <pointer-type-def type-id='adbacf87' size-in-bits='64' id='791b4a6b'/>
+      <pointer-type-def type-id='08aeec0d' size-in-bits='64' id='e62a60bd'/>
+      <pointer-type-def type-id='f60505a1' size-in-bits='64' id='cb27da0d'/>
+      <pointer-type-def type-id='0393750b' size-in-bits='64' id='df4bf537'/>
+      <pointer-type-def type-id='e5a91b7f' size-in-bits='64' id='0adcd7cb'/>
+      <pointer-type-def type-id='4f4445b6' size-in-bits='64' id='cccdf8f0'/>
+      <pointer-type-def type-id='35210e5c' size-in-bits='64' id='c24523fe'/>
+      <pointer-type-def type-id='7ebd7dab' size-in-bits='64' id='795e6e5f'/>
+      <pointer-type-def type-id='a017baf8' size-in-bits='64' id='28773d52'/>
+      <function-decl name='pm_genpd_remove_subdomain' mangled-name='pm_genpd_remove_subdomain' filepath='drivers/base/power/domain.c' line='1695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_remove_subdomain'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1695' column='1'/>
+        <parameter type-id='855e3679' name='subdomain' filepath='drivers/base/power/domain.c' line='1696' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_remove' mangled-name='pm_genpd_remove' filepath='drivers/base/power/domain.c' line='1899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_remove'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1899' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_init' mangled-name='pm_genpd_init' filepath='drivers/base/power/domain.c' line='1776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_init'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1776' column='1'/>
+        <parameter type-id='5db9bd89' name='gov' filepath='drivers/base/power/domain.c' line='1777' column='1'/>
+        <parameter type-id='b50a4934' name='is_off' filepath='drivers/base/power/domain.c' line='1777' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_genpd_add_subdomain' mangled-name='pm_genpd_add_subdomain' filepath='drivers/base/power/domain.c' line='1677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_genpd_add_subdomain'>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='1677' column='1'/>
+        <parameter type-id='855e3679' name='subdomain' filepath='drivers/base/power/domain.c' line='1678' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_del_provider' mangled-name='of_genpd_del_provider' filepath='drivers/base/power/domain.c' line='2165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_del_provider'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_subdomain' mangled-name='of_genpd_add_subdomain' filepath='drivers/base/power/domain.c' line='2276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_subdomain'>
+        <parameter type-id='51a94113' name='parent_spec' filepath='drivers/base/power/domain.c' line='2276' column='1'/>
+        <parameter type-id='51a94113' name='subdomain_spec' filepath='drivers/base/power/domain.c' line='2277' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_provider_simple' mangled-name='of_genpd_add_provider_simple' filepath='drivers/base/power/domain.c' line='2028' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_provider_simple'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2028' column='1'/>
+        <parameter type-id='855e3679' name='genpd' filepath='drivers/base/power/domain.c' line='2029' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_genpd_add_provider_onecell' mangled-name='of_genpd_add_provider_onecell' filepath='drivers/base/power/domain.c' line='2085' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_genpd_add_provider_onecell'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/base/power/domain.c' line='2085' column='1'/>
+        <parameter type-id='29f0ac2f' name='data' filepath='drivers/base/power/domain.c' line='2086' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_genpd_set_performance_state' mangled-name='dev_pm_genpd_set_performance_state' filepath='drivers/base/power/domain.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_genpd_set_performance_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/domain.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='state' filepath='drivers/base/power/domain.c' line='376' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2040' id='11641789'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <pointer-type-def type-id='02e48bc6' size-in-bits='64' id='79c84484'/>
+      <pointer-type-def type-id='c1ac25a6' size-in-bits='64' id='614c5efc'/>
+      <pointer-type-def type-id='d48383c4' size-in-bits='64' id='7727bbf2'/>
+      <pointer-type-def type-id='fa0b179b' size-in-bits='64' id='50764ba3'/>
+      <enum-decl name='opp_table_access' filepath='drivers/opp/opp.h' line='115' column='1' id='943b03b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OPP_TABLE_ACCESS_UNKNOWN' value='0'/>
+        <enumerator name='OPP_TABLE_ACCESS_EXCLUSIVE' value='1'/>
+        <enumerator name='OPP_TABLE_ACCESS_SHARED' value='2'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='4fa40360'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='855e3679'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2aedd95d'>
+        <parameter type-id='855e3679'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6676061'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='adbacf87'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f60505a1'>
+        <parameter type-id='a4375c03'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0393750b'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5a91b7f'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='02e48bc6'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f4445b6'>
+        <parameter type-id='855e3679'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35210e5c'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ebd7dab'>
+        <parameter type-id='855e3679'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a017baf8'>
+        <parameter type-id='ab59ee31'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='4b3ae594' size-in-bits='64' id='c1433076'/>
+      <pointer-type-def type-id='e62a60bd' size-in-bits='64' id='ebb60db5'/>
+      <pointer-type-def type-id='850c13f6' size-in-bits='64' id='4e034354'/>
+      <class-decl name='dev_pm_opp_supply' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='36' column='1' id='c1ac25a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u_volt' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u_volt_min' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u_volt_max' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u_amp' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_set_opp_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='66' column='1' id='d48383c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='old_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='include/linux/pm_opp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='regulator_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_opp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/pm_opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_opp.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b06eb6f0' size-in-bits='64' id='850c13f6'/>
+      <class-decl name='dev_pm_opp_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='50' column='1' id='de175b0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='include/linux/pm_opp.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator' size-in-bits='1088' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='34' column='1' id='b06eb6f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/regulator/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='bypass' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='device_link' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='uA_load' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deferred_disables' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='voltage' type-id='06883fa0' visibility='default' filepath='drivers/regulator/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='drivers/regulator/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dev_attr' type-id='dbf3947c' visibility='default' filepath='drivers/regulator/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rdev' type-id='43c38462' visibility='default' filepath='drivers/regulator/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/regulator/internal.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7dfdcc84' size-in-bits='64' id='43c38462'/>
+      <array-type-def dimensions='1' type-id='712d28ed' size-in-bits='320' id='06883fa0'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='regulator_dev' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='451' column='1' id='7dfdcc84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='5629bd41' visibility='default' filepath='include/linux/regulator/driver.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='use_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bypass_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='consumer_list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='coupling_desc' type-id='3ce445fe' visibility='default' filepath='include/linux/regulator/driver.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/linux/regulator/driver.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/linux/regulator/driver.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mutex_owner' type-id='f23e2572' visibility='default' filepath='include/linux/regulator/driver.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ref_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/regulator/driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='constraints' type-id='2fed99fc' visibility='default' filepath='include/linux/regulator/driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='supply' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/driver.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='include/linux/regulator/driver.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='disable_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/regulator/driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='reg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='include/linux/regulator/driver.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='ena_pin' type-id='6045f216' visibility='default' filepath='include/linux/regulator/driver.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ena_gpio_state' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_switch' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='last_off_jiffy' type-id='7359adad' visibility='default' filepath='include/linux/regulator/driver.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='491' 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='18' column='1' id='712d28ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coupling_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='434' column='1' id='3ce445fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coupled_rdevs' type-id='f4c93d58' visibility='default' filepath='include/linux/regulator/driver.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coupler' type-id='d1347205' visibility='default' filepath='include/linux/regulator/driver.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_resolved' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_coupled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='438' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='45793a97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='925167dc' 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='c1d02a64' visibility='default' filepath='include/linux/ww_mutex.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0a26da71' size-in-bits='64' id='5629bd41'/>
+      <pointer-type-def type-id='ddf16879' size-in-bits='64' id='29af9a71'/>
+      <pointer-type-def type-id='d0b77cf6' size-in-bits='64' id='2fed99fc'/>
+      <pointer-type-def type-id='616cdd90' size-in-bits='64' id='6045f216'/>
+      <class-decl name='regmap' size-in-bits='4928' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='49' column='1' id='ddf16879'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='ed93e75e' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='drivers/base/regmap/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='drivers/base/regmap/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alloc_flags' type-id='3eb7c31c' visibility='default' filepath='drivers/base/regmap/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/regmap/internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='format' type-id='32ee7e31' visibility='default' filepath='drivers/base/regmap/internal.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bus' type-id='00e96299' visibility='default' filepath='drivers/base/regmap/internal.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_context' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='async_lock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_waitq' type-id='b5ab048f' visibility='default' filepath='drivers/base/regmap/internal.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='async_free' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='async_ret' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='debugfs_disable' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/base/regmap/internal.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='debugfs_name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='debugfs_reg_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='debugfs_val_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='debugfs_tot_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_off_cache' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='cache_lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='drivers/base/regmap/internal.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='drivers/base/regmap/internal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='reg_update_bits' type-id='3a0b4ecf' visibility='default' filepath='drivers/base/regmap/internal.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='defer_caching' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='reg_shift' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='reg_stride_order' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='cache_ops' type-id='66755d9f' visibility='default' filepath='drivers/base/regmap/internal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='cache_size_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cache_word_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='cache_only' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4200'>
+          <var-decl name='cache_bypass' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4208'>
+          <var-decl name='cache_free' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='reg_defaults' type-id='629ca5cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cache' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cache_dirty' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4424'>
+          <var-decl name='no_sync_defaults' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='patch' type-id='f94cf1ff' visibility='default' filepath='drivers/base/regmap/internal.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='patch_regs' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4584'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='range_tree' type-id='dec44472' visibility='default' filepath='drivers/base/regmap/internal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='selector_work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='hwlock' type-id='0cb0b26f' visibility='default' filepath='drivers/base/regmap/internal.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulation_constraints' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='138' column='1' id='d0b77cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uV_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ilim_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='system_load' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_spread' type-id='f9409001' visibility='default' filepath='include/linux/regulator/machine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_uV_step' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='valid_modes_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='valid_ops_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='input_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state_disk' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_mem' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='state_standby' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='initial_state' type-id='e884daa5' visibility='default' filepath='include/linux/regulator/machine.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='initial_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='settling_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='settling_time_up' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='settling_time_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='active_discharge' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='boot_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='apply_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ramp_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='soft_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pull_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='over_current_protection' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_enable_gpio' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/regulator/core.c' line='75' column='1' id='616cdd90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/core.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpiod' type-id='26760480' visibility='default' filepath='drivers/regulator/core.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='request_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='45814d78' const='yes' id='0a26da71'/>
+      <pointer-type-def type-id='4ceb5ab5' size-in-bits='64' id='d1347205'/>
+      <pointer-type-def type-id='43c38462' size-in-bits='64' id='f4c93d58'/>
+      <pointer-type-def type-id='2c45f76e' size-in-bits='64' id='c1d02a64'/>
+      <class-decl name='regmap_format' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='30' column='1' id='32ee7e31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf_size' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='val_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='format_write' type-id='d1abd66c' visibility='default' filepath='drivers/base/regmap/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='format_reg' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format_val' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parse_val' type-id='caa804f2' visibility='default' filepath='drivers/base/regmap/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parse_inplace' type-id='b7f9d8e6' visibility='default' filepath='drivers/base/regmap/internal.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_coupler' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regulator/coupler.h' line='41' column='1' id='4ceb5ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/coupler.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='detach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='balance_voltage' type-id='08b1f4aa' visibility='default' filepath='include/linux/regulator/coupler.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_desc' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='330' column='1' id='45814d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_match' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regulators_node' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_parse_cb' type-id='62e9cc9c' visibility='default' filepath='include/linux/regulator/driver.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='continuous_voltage_range' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='n_voltages' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='n_current_limits' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='b4605ad2' visibility='default' filepath='include/linux/regulator/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='b9a524a4' visibility='default' filepath='include/linux/regulator/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='linear_min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fixed_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_dropout_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='linear_ranges' type-id='ae51eb5f' visibility='default' filepath='include/linux/regulator/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='linear_range_selectors' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_linear_ranges' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='volt_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='curr_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vsel_range_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='vsel_range_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vsel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='vsel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vsel_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='csel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='csel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='apply_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='apply_bit' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='enable_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='enable_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='enable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='disable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='enable_is_inverted' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bypass_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='bypass_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bypass_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='bypass_val_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='active_discharge_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='active_discharge_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='active_discharge_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='active_discharge_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_start_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='soft_start_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='soft_start_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='pull_down_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='pull_down_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='pull_down_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='off_on_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='of_map_mode' type-id='17a94daa' visibility='default' filepath='include/linux/regulator/driver.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='397' 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='77' column='1' id='7fe6815e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='changeable' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/machine.h' line='83' 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='2c45f76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' 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='7359adad' 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='f0981eeb' 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='8efea9e5' 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='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2dd1eb6f' size-in-bits='64' id='66755d9f'/>
+      <pointer-type-def type-id='a82172e0' size-in-bits='64' id='76a7b3fe'/>
+      <pointer-type-def type-id='4dbb5689' size-in-bits='64' id='00e96299'/>
+      <enum-decl name='regcache_type' filepath='include/linux/regmap.h' line='38' column='1' id='6e1356fd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGCACHE_NONE' value='0'/>
+        <enumerator name='REGCACHE_RBTREE' value='1'/>
+        <enumerator name='REGCACHE_COMPRESSED' value='2'/>
+        <enumerator name='REGCACHE_FLAT' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='38db93a7' size-in-bits='64' id='0cb0b26f'/>
+      <pointer-type-def type-id='7ee67639' size-in-bits='64' id='db7eb22d'/>
+      <pointer-type-def type-id='b4c4ed0b' size-in-bits='64' id='4893ffdf'/>
+      <pointer-type-def type-id='9f19269b' size-in-bits='64' id='3a0b4ecf'/>
+      <pointer-type-def type-id='0ee576bb' size-in-bits='64' id='629ca5cb'/>
+      <pointer-type-def type-id='4fcc4597' size-in-bits='64' id='f94cf1ff'/>
+      <pointer-type-def type-id='e14a26b1' size-in-bits='64' id='8e565e6d'/>
+      <typedef-decl name='regmap_lock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='233' column='1' id='a4d5c862'/>
+      <typedef-decl name='regmap_unlock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='234' column='1' id='cf202c75'/>
+      <typedef-decl name='suspend_state_t' type-id='95e97e5e' filepath='include/linux/suspend.h' line='35' column='1' id='e884daa5'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1' id='ed93e75e'>
+        <data-member access='public'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='3eaed1cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hwspinlock' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='40' column='1' id='38db93a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bank' type-id='b8cd8f00' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_default' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='54' column='1' id='0ee576bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='69' column='1' id='4fcc4597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1' id='3eaed1cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spinlock_flags' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='81cd3626' const='yes' id='2dd1eb6f'/>
+      <qualified-type-def type-id='2bed066b' const='yes' id='a82172e0'/>
+      <qualified-type-def type-id='bd5f6464' const='yes' id='4dbb5689'/>
+      <pointer-type-def type-id='6702beaf' size-in-bits='64' id='ae51eb5f'/>
+      <pointer-type-def type-id='a06ec50c' size-in-bits='64' id='b4605ad2'/>
+      <pointer-type-def type-id='20f5f452' size-in-bits='64' id='5b2fd8e8'/>
+      <enum-decl name='regulator_type' filepath='include/linux/regulator/driver.h' line='230' column='1' id='b9a524a4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGULATOR_VOLTAGE' value='0'/>
+        <enumerator name='REGULATOR_CURRENT' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='46155a72' size-in-bits='64' id='62e9cc9c'/>
+      <pointer-type-def type-id='4c0e45bc' size-in-bits='64' id='55a10ce6'/>
+      <pointer-type-def type-id='7be36c00' size-in-bits='64' id='08b1f4aa'/>
+      <pointer-type-def type-id='32efe300' size-in-bits='64' id='17a94daa'/>
+      <pointer-type-def type-id='2ea97d28' size-in-bits='64' id='caa804f2'/>
+      <pointer-type-def type-id='aee29222' size-in-bits='64' id='d1abd66c'/>
+      <pointer-type-def type-id='7c5064e4' size-in-bits='64' id='8052541e'/>
+      <class-decl name='regcache_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='166' column='1' id='81cd3626'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_init' type-id='078f0514' visibility='default' filepath='drivers/base/regmap/internal.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='b8529195' visibility='default' filepath='drivers/base/regmap/internal.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='drop' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_access_table' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='226' column='1' id='2bed066b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='yes_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_yes_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_no_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_bus' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='509' column='1' id='bd5f6464'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='928c5b64' visibility='default' filepath='include/linux/regmap.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gather_write' type-id='60be0faa' visibility='default' filepath='include/linux/regmap.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='async_write' type-id='6ee2c7d7' visibility='default' filepath='include/linux/regmap.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reg_write' type-id='8c8780d1' visibility='default' filepath='include/linux/regmap.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reg_update_bits' type-id='59483ee8' visibility='default' filepath='include/linux/regmap.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='697414cd' visibility='default' filepath='include/linux/regmap.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='ec8d430e' visibility='default' filepath='include/linux/regmap.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='free_context' type-id='5c459137' visibility='default' filepath='include/linux/regmap.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='async_alloc' type-id='27a024fd' visibility='default' filepath='include/linux/regmap.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read_flag_mask' type-id='f9b06939' visibility='default' filepath='include/linux/regmap.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='reg_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='val_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='618915a2' const='yes' id='6702beaf'/>
+      <qualified-type-def type-id='707f0173' const='yes' id='a06ec50c'/>
+      <pointer-type-def type-id='8712a502' size-in-bits='64' id='b8cd8f00'/>
+      <class-decl name='hwspinlock_device' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='54' column='1' id='8712a502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='9138a099' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_id' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_locks' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='e84e7d83' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_linear_range' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='54' column='1' id='618915a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_ops' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='145' column='1' id='707f0173'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_voltage' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_voltage' type-id='e83ba222' visibility='default' filepath='include/linux/regulator/driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_voltage' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_voltage_sel' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_voltage' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_voltage_sel' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_current_limit' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_current_limit' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_input_current_limit' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_over_current_protection' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_active_discharge' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='is_enabled' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_mode' type-id='383e66df' visibility='default' filepath='include/linux/regulator/driver.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_error_flags' type-id='7ef3bbb0' visibility='default' filepath='include/linux/regulator/driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='enable_time' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='set_ramp_delay' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_voltage_time' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_voltage_time_sel' type-id='ec23f0e2' visibility='default' filepath='include/linux/regulator/driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_soft_start' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_status' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_optimum_mode' type-id='f14ddf44' visibility='default' filepath='include/linux/regulator/driver.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='set_load' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_bypass' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_bypass' type-id='43934166' visibility='default' filepath='include/linux/regulator/driver.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_suspend_voltage' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_suspend_enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_suspend_disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_suspend_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='resume' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_pull_down' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9a6d2bc2' size-in-bits='64' id='01dc1e38'/>
+      <enum-decl name='regmap_endian' filepath='include/linux/regmap.h' line='191' column='1' id='e8a9ba7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGMAP_ENDIAN_DEFAULT' value='0'/>
+        <enumerator name='REGMAP_ENDIAN_BIG' value='1'/>
+        <enumerator name='REGMAP_ENDIAN_LITTLE' value='2'/>
+        <enumerator name='REGMAP_ENDIAN_NATIVE' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='b5732d6f' size-in-bits='64' id='02c2e3f3'/>
+      <pointer-type-def type-id='3b43e527' size-in-bits='64' id='2f739ebb'/>
+      <pointer-type-def type-id='71e3f969' size-in-bits='64' id='b8529195'/>
+      <typedef-decl name='regmap_hw_async_alloc' type-id='68f92bd7' filepath='include/linux/regmap.h' line='471' column='1' id='27a024fd'/>
+      <typedef-decl name='regmap_hw_async_write' type-id='38921430' filepath='include/linux/regmap.h' line='458' column='1' id='6ee2c7d7'/>
+      <typedef-decl name='regmap_hw_free_context' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='472' column='1' id='5c459137'/>
+      <typedef-decl name='regmap_hw_gather_write' type-id='acda35bb' filepath='include/linux/regmap.h' line='455' column='1' id='60be0faa'/>
+      <typedef-decl name='regmap_hw_read' type-id='acda35bb' filepath='include/linux/regmap.h' line='462' column='1' id='697414cd'/>
+      <typedef-decl name='regmap_hw_reg_read' type-id='4893ffdf' filepath='include/linux/regmap.h' line='465' column='1' id='ec8d430e'/>
+      <typedef-decl name='regmap_hw_reg_update_bits' type-id='3a0b4ecf' filepath='include/linux/regmap.h' line='469' column='1' id='59483ee8'/>
+      <typedef-decl name='regmap_hw_reg_write' type-id='db7eb22d' filepath='include/linux/regmap.h' line='467' column='1' id='8c8780d1'/>
+      <typedef-decl name='regmap_hw_write' type-id='02a757da' filepath='include/linux/regmap.h' line='453' column='1' id='928c5b64'/>
+      <pointer-type-def type-id='0086a11a' size-in-bits='64' id='078f0514'/>
+      <pointer-type-def type-id='822de089' size-in-bits='64' id='9138a099'/>
+      <qualified-type-def type-id='20f6935f' const='yes' id='9a6d2bc2'/>
+      <array-type-def dimensions='1' type-id='38db93a7' size-in-bits='infinite' id='e84e7d83'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='13b1c3f8' size-in-bits='64' id='c3db487a'/>
+      <pointer-type-def type-id='dfce8aa4' size-in-bits='64' id='43934166'/>
+      <pointer-type-def type-id='25e34545' size-in-bits='64' id='12239021'/>
+      <pointer-type-def type-id='387ddca6' size-in-bits='64' id='caa0e368'/>
+      <pointer-type-def type-id='72a2bb90' size-in-bits='64' id='e83ba222'/>
+      <pointer-type-def type-id='2ab93737' size-in-bits='64' id='2b6bf4a3'/>
+      <pointer-type-def type-id='1c9f9836' size-in-bits='64' id='bfb02820'/>
+      <pointer-type-def type-id='0639fb3e' size-in-bits='64' id='7ef3bbb0'/>
+      <pointer-type-def type-id='fdb31210' size-in-bits='64' id='ec23f0e2'/>
+      <pointer-type-def type-id='bc6e6178' size-in-bits='64' id='02a757da'/>
+      <pointer-type-def type-id='51192447' size-in-bits='64' id='acda35bb'/>
+      <pointer-type-def type-id='22a55ca6' size-in-bits='64' id='38921430'/>
+      <pointer-type-def type-id='bae213e3' size-in-bits='64' id='68f92bd7'/>
+      <pointer-type-def type-id='c1a2f7eb' size-in-bits='64' id='383e66df'/>
+      <pointer-type-def type-id='a7b38e12' size-in-bits='64' id='f14ddf44'/>
+      <class-decl name='regmap_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='206' column='1' id='20f6935f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b74ac0d4' const='yes' id='822de089'/>
+      <class-decl name='hwspinlock_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='28' column='1' id='b74ac0d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trylock' type-id='18277869' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unlock' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='relax' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2fedb035' size-in-bits='64' id='18277869'/>
+      <pointer-type-def type-id='3f7e2e74' size-in-bits='64' id='35411736'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/generic_ops.c' language='LANG_C89'>
+      <function-decl name='pm_generic_suspend' mangled-name='pm_generic_suspend' filepath='drivers/base/power/generic_ops.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_runtime_suspend' mangled-name='pm_generic_runtime_suspend' filepath='drivers/base/power/generic_ops.c' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='20' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_runtime_resume' mangled-name='pm_generic_runtime_resume' filepath='drivers/base/power/generic_ops.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_runtime_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='39' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_generic_resume' mangled-name='pm_generic_resume' filepath='drivers/base/power/generic_ops.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_generic_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/generic_ops.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/qos.c' language='LANG_C89'>
+      <function-decl name='dev_pm_qos_update_user_latency_tolerance' mangled-name='dev_pm_qos_update_user_latency_tolerance' filepath='drivers/base/power/qos.c' line='904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_update_user_latency_tolerance'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='904' column='1'/>
+        <parameter type-id='a7832498' name='val' filepath='drivers/base/power/qos.c' line='904' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_update_request' mangled-name='dev_pm_qos_update_request' filepath='drivers/base/power/qos.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_update_request'>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='463' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='drivers/base/power/qos.c' line='463' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_remove_request' mangled-name='dev_pm_qos_remove_request' filepath='drivers/base/power/qos.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_remove_request'>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_hide_latency_tolerance' mangled-name='dev_pm_qos_hide_latency_tolerance' filepath='drivers/base/power/qos.c' line='970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_hide_latency_tolerance'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='970' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_expose_latency_tolerance' mangled-name='dev_pm_qos_expose_latency_tolerance' filepath='drivers/base/power/qos.c' line='951' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_expose_latency_tolerance'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='951' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_qos_add_request' mangled-name='dev_pm_qos_add_request' filepath='drivers/base/power/qos.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_qos_add_request'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/qos.c' line='388' column='1'/>
+        <parameter type-id='a80fd1bc' name='req' filepath='drivers/base/power/qos.c' line='388' column='1'/>
+        <parameter type-id='c47ba023' name='type' filepath='drivers/base/power/qos.c' line='389' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='drivers/base/power/qos.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/runtime.c' language='LANG_C89'>
+      <function-decl name='__pm_runtime_resume' mangled-name='__pm_runtime_resume' filepath='drivers/base/power/runtime.c' line='1096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1096' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1096' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_idle' mangled-name='__pm_runtime_idle' filepath='drivers/base/power/runtime.c' line='1033' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_idle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1033' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1033' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_set_autosuspend_delay' mangled-name='pm_runtime_set_autosuspend_delay' filepath='drivers/base/power/runtime.c' line='1558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_set_autosuspend_delay'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1558' column='1'/>
+        <parameter type-id='95e97e5e' name='delay' filepath='drivers/base/power/runtime.c' line='1558' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_use_autosuspend' mangled-name='__pm_runtime_use_autosuspend' filepath='drivers/base/power/runtime.c' line='1579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_use_autosuspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1579' column='1'/>
+        <parameter type-id='b50a4934' name='use' filepath='drivers/base/power/runtime.c' line='1579' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_suspend' mangled-name='__pm_runtime_suspend' filepath='drivers/base/power/runtime.c' line='1065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1065' column='1'/>
+        <parameter type-id='95e97e5e' name='rpmflags' filepath='drivers/base/power/runtime.c' line='1065' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_disable' mangled-name='__pm_runtime_disable' filepath='drivers/base/power/runtime.c' line='1360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_disable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1360' column='1'/>
+        <parameter type-id='b50a4934' name='check_resume' filepath='drivers/base/power/runtime.c' line='1360' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_enable' mangled-name='pm_runtime_enable' filepath='drivers/base/power/runtime.c' line='1402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_enable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1402' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_no_callbacks' mangled-name='pm_runtime_no_callbacks' filepath='drivers/base/power/runtime.c' line='1481' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_no_callbacks'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1481' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_allow' mangled-name='pm_runtime_allow' filepath='drivers/base/power/runtime.c' line='1458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_allow'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1458' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_forbid' mangled-name='pm_runtime_forbid' filepath='drivers/base/power/runtime.c' line='1437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_forbid'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1437' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_barrier' mangled-name='pm_runtime_barrier' filepath='drivers/base/power/runtime.c' line='1324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_barrier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1324' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pm_runtime_set_status' mangled-name='__pm_runtime_set_status' filepath='drivers/base/power/runtime.c' line='1163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_runtime_set_status'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1163' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/base/power/runtime.c' line='1163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_irq_safe' mangled-name='pm_runtime_irq_safe' filepath='drivers/base/power/runtime.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_irq_safe'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1502' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_runtime_get_if_in_use' mangled-name='pm_runtime_get_if_in_use' filepath='drivers/base/power/runtime.c' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_get_if_in_use'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_force_suspend' mangled-name='pm_runtime_force_suspend' filepath='drivers/base/power/runtime.c' line='1760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_force_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1760' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_runtime_force_resume' mangled-name='pm_runtime_force_resume' filepath='drivers/base/power/runtime.c' line='1808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_runtime_force_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/runtime.c' line='1808' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/wakeirq.c' language='LANG_C89'>
+      <function-decl name='dev_pm_set_wake_irq' mangled-name='dev_pm_set_wake_irq' filepath='drivers/base/power/wakeirq.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_set_wake_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeirq.c' line='53' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/power/wakeirq.c' line='53' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_set_dedicated_wake_irq' mangled-name='dev_pm_set_dedicated_wake_irq' filepath='drivers/base/power/wakeirq.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_set_dedicated_wake_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeirq.c' line='165' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/power/wakeirq.c' line='165' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_clear_wake_irq' mangled-name='dev_pm_clear_wake_irq' filepath='drivers/base/power/wakeirq.c' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_clear_wake_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeirq.c' line='87' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/power/wakeup.c' language='LANG_C89'>
+      <function-decl name='pm_print_active_wakeup_sources' mangled-name='pm_print_active_wakeup_sources' filepath='drivers/base/power/wakeup.c' line='852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_print_active_wakeup_sources'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_register' mangled-name='wakeup_source_register' filepath='drivers/base/power/wakeup.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='218' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/power/wakeup.c' line='219' column='1'/>
+        <return type-id='1ea237a6'/>
+      </function-decl>
+      <function-decl name='pm_wakeup_ws_event' mangled-name='pm_wakeup_ws_event' filepath='drivers/base/power/wakeup.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_wakeup_ws_event'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='769' column='1'/>
+        <parameter type-id='f0981eeb' name='msec' filepath='drivers/base/power/wakeup.c' line='769' column='1'/>
+        <parameter type-id='b50a4934' name='hard' filepath='drivers/base/power/wakeup.c' line='769' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_stay_awake' mangled-name='__pm_stay_awake' filepath='drivers/base/power/wakeup.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_stay_awake'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='582' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pm_relax' mangled-name='__pm_relax' filepath='drivers/base/power/wakeup.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pm_relax'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='699' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_unregister' mangled-name='wakeup_source_unregister' filepath='drivers/base/power/wakeup.c' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_unregister'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_wakeup_dev_event' mangled-name='pm_wakeup_dev_event' filepath='drivers/base/power/wakeup.c' line='808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_wakeup_dev_event'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='808' column='1'/>
+        <parameter type-id='f0981eeb' name='msec' filepath='drivers/base/power/wakeup.c' line='808' column='1'/>
+        <parameter type-id='b50a4934' name='hard' filepath='drivers/base/power/wakeup.c' line='808' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_wakeup_enable' mangled-name='device_wakeup_enable' filepath='drivers/base/power/wakeup.c' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_wakeup_enable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='282' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_set_wakeup_enable' mangled-name='device_set_wakeup_enable' filepath='drivers/base/power/wakeup.c' line='482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_set_wakeup_enable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='482' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/base/power/wakeup.c' line='482' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_wakeup_disable' mangled-name='device_wakeup_disable' filepath='drivers/base/power/wakeup.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_wakeup_disable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='404' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wakeup_source_destroy' mangled-name='wakeup_source_destroy' filepath='drivers/base/power/wakeup.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_destroy'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='156' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_remove' mangled-name='wakeup_source_remove' filepath='drivers/base/power/wakeup.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_remove'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wakeup_source_create' mangled-name='wakeup_source_create' filepath='drivers/base/power/wakeup.c' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_create'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/power/wakeup.c' line='84' column='1'/>
+        <return type-id='1ea237a6'/>
+      </function-decl>
+      <function-decl name='wakeup_source_add' mangled-name='wakeup_source_add' filepath='drivers/base/power/wakeup.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wakeup_source_add'>
+        <parameter type-id='1ea237a6' name='ws' filepath='drivers/base/power/wakeup.c' line='171' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_system_wakeup' mangled-name='pm_system_wakeup' filepath='drivers/base/power/wakeup.c' line='914' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_system_wakeup'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_stay_awake' mangled-name='pm_stay_awake' filepath='drivers/base/power/wakeup.c' line='610' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_stay_awake'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='610' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_relax' mangled-name='pm_relax' filepath='drivers/base/power/wakeup.c' line='719' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_relax'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='719' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_get_active_wakeup_sources' mangled-name='pm_get_active_wakeup_sources' filepath='drivers/base/power/wakeup.c' line='821' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_get_active_wakeup_sources'>
+        <parameter type-id='26a90f95' name='pending_wakeup_source' filepath='drivers/base/power/wakeup.c' line='821' column='1'/>
+        <parameter type-id='b59d7dce' name='max' filepath='drivers/base/power/wakeup.c' line='821' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_set_wakeup_capable' mangled-name='device_set_wakeup_capable' filepath='drivers/base/power/wakeup.c' line='429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_set_wakeup_capable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='429' column='1'/>
+        <parameter type-id='b50a4934' name='capable' filepath='drivers/base/power/wakeup.c' line='429' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='device_init_wakeup' mangled-name='device_init_wakeup' filepath='drivers/base/power/wakeup.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_init_wakeup'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/power/wakeup.c' line='459' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/base/power/wakeup.c' line='459' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/property.c' language='LANG_C89'>
+      <enum-decl name='dev_dma_attr' filepath='include/linux/property.h' line='28' column='1' id='0f98306c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_DMA_NOT_SUPPORTED' value='0'/>
+        <enumerator name='DEV_DMA_NON_COHERENT' value='1'/>
+        <enumerator name='DEV_DMA_COHERENT' value='2'/>
+      </enum-decl>
+      <function-decl name='device_property_present' mangled-name='device_property_present' filepath='drivers/base/property.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_present'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='35' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='35' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_u32_array' mangled-name='fwnode_property_read_u32_array' filepath='drivers/base/property.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_u32_array'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='317' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='318' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/base/property.c' line='318' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='318' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_u16_array' mangled-name='fwnode_property_read_u16_array' filepath='drivers/base/property.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_u16_array'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='291' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='292' column='1'/>
+        <parameter type-id='26d4d46f' name='val' filepath='drivers/base/property.c' line='292' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='292' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_read_string' mangled-name='fwnode_property_read_string' filepath='drivers/base/property.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_read_string'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='401' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='402' column='1'/>
+        <parameter type-id='7d3cd834' name='val' filepath='drivers/base/property.c' line='402' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fwnode_property_present' mangled-name='fwnode_property_present' filepath='drivers/base/property.c' line='46' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_property_present'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='46' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='47' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='fwnode_handle_put' mangled-name='fwnode_handle_put' filepath='drivers/base/property.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_handle_put'>
+        <parameter type-id='4a935625' name='fwnode' filepath='drivers/base/property.c' line='700' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fwnode_get_parent' mangled-name='fwnode_get_parent' filepath='drivers/base/property.c' line='587' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fwnode_get_parent'>
+        <parameter type-id='7837cd88' name='fwnode' filepath='drivers/base/property.c' line='587' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='device_property_read_u8_array' mangled-name='device_property_read_u8_array' filepath='drivers/base/property.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_u8_array'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='78' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='78' column='1'/>
+        <parameter type-id='8bff8096' name='val' filepath='drivers/base/property.c' line='79' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_property_read_u32_array' mangled-name='device_property_read_u32_array' filepath='drivers/base/property.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_u32_array'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='128' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='128' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/base/property.c' line='129' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='129' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_property_read_string_array' mangled-name='device_property_read_string_array' filepath='drivers/base/property.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_string_array'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='178' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='178' column='1'/>
+        <parameter type-id='7d3cd834' name='val' filepath='drivers/base/property.c' line='179' column='1'/>
+        <parameter type-id='b59d7dce' name='nval' filepath='drivers/base/property.c' line='179' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_property_read_string' mangled-name='device_property_read_string' filepath='drivers/base/property.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_property_read_string'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='200' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/base/property.c' line='200' column='1'/>
+        <parameter type-id='7d3cd834' name='val' filepath='drivers/base/property.c' line='201' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='device_get_next_child_node' mangled-name='device_get_next_child_node' filepath='drivers/base/property.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_next_child_node'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='637' column='1'/>
+        <parameter type-id='4a935625' name='child' filepath='drivers/base/property.c' line='638' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='device_get_named_child_node' mangled-name='device_get_named_child_node' filepath='drivers/base/property.c' line='670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_named_child_node'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='670' column='1'/>
+        <parameter type-id='80f4b756' name='childname' filepath='drivers/base/property.c' line='671' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <function-decl name='device_get_match_data' mangled-name='device_get_match_data' filepath='drivers/base/property.c' line='1103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_match_data'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='1103' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='device_get_mac_address' mangled-name='device_get_mac_address' filepath='drivers/base/property.c' line='859' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_mac_address'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='859' column='1'/>
+        <parameter type-id='26a90f95' name='addr' filepath='drivers/base/property.c' line='859' column='1'/>
+        <parameter type-id='95e97e5e' name='alen' filepath='drivers/base/property.c' line='859' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='device_get_dma_attr' mangled-name='device_get_dma_attr' filepath='drivers/base/property.c' line='745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_dma_attr'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='745' column='1'/>
+        <return type-id='0f98306c'/>
+      </function-decl>
+      <function-decl name='device_get_child_node_count' mangled-name='device_get_child_node_count' filepath='drivers/base/property.c' line='720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='device_get_child_node_count'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='720' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='dev_fwnode' mangled-name='dev_fwnode' filepath='drivers/base/property.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_fwnode'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/property.c' line='21' column='1'/>
+        <return type-id='4a935625'/>
+      </function-decl>
+      <pointer-type-def type-id='1dc6a898' size-in-bits='64' id='26d4d46f'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/regmap/regcache.c' language='LANG_C89'>
+      <function-decl name='regcache_sync_region' mangled-name='regcache_sync_region' filepath='drivers/base/regmap/regcache.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_sync_region'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/base/regmap/regcache.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/base/regmap/regcache.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_sync' mangled-name='regcache_sync' filepath='drivers/base/regmap/regcache.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_sync'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='339' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_mark_dirty' mangled-name='regcache_mark_dirty' filepath='drivers/base/regmap/regcache.c' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_mark_dirty'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='518' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regcache_drop_region' mangled-name='regcache_drop_region' filepath='drivers/base/regmap/regcache.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_drop_region'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='463' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/base/regmap/regcache.c' line='463' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/base/regmap/regcache.c' line='464' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regcache_cache_only' mangled-name='regcache_cache_only' filepath='drivers/base/regmap/regcache.c' line='495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regcache_cache_only'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regcache.c' line='495' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/base/regmap/regcache.c' line='495' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/regmap/regmap-i2c.c' language='LANG_C89'>
+      <class-decl name='i2c_client' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='313' column='1' id='a9cdb48b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adapter' type-id='b9af02c3' visibility='default' filepath='include/linux/i2c.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='init_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='detected' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='332' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a9cdb48b' size-in-bits='64' id='3e31633b'/>
+      <function-decl name='__regmap_init_i2c' mangled-name='__regmap_init_i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__regmap_init_i2c'>
+        <parameter type-id='3e31633b' name='i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='277' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap-i2c.c' line='278' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap-i2c.c' line='279' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap-i2c.c' line='280' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='__devm_regmap_init_i2c' mangled-name='__devm_regmap_init_i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init_i2c'>
+        <parameter type-id='3e31633b' name='i2c' filepath='drivers/base/regmap/regmap-i2c.c' line='292' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap-i2c.c' line='293' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap-i2c.c' line='294' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap-i2c.c' line='295' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <pointer-type-def type-id='23e41d37' size-in-bits='64' id='9d19d4a7'/>
+      <pointer-type-def type-id='ec5384d3' size-in-bits='64' id='b9af02c3'/>
+      <class-decl name='i2c_adapter' size-in-bits='9728' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='687' column='1' id='ec5384d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/i2c.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='algo' type-id='e93ce0cc' visibility='default' filepath='include/linux/i2c.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='algo_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock_ops' type-id='16d08491' visibility='default' filepath='include/linux/i2c.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bus_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mux_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='locked_flags' type-id='7359adad' visibility='default' filepath='include/linux/i2c.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/i2c.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='dev_released' type-id='f9fef04f' visibility='default' filepath='include/linux/i2c.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='userspace_clients_lock' type-id='925167dc' visibility='default' filepath='include/linux/i2c.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='userspace_clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='bus_recovery_info' type-id='f1537b61' visibility='default' filepath='include/linux/i2c.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='quirks' type-id='398e6008' visibility='default' filepath='include/linux/i2c.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='host_notify_domain' type-id='7544e824' visibility='default' filepath='include/linux/i2c.h' line='715' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='20b6fd7c' const='yes' id='23e41d37'/>
+      <class-decl name='regmap_config' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='353' column='1' id='20b6fd7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='val_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_locking' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='include/linux/regmap.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='include/linux/regmap.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='include/linux/regmap.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='include/linux/regmap.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='reg_defaults' type-id='4825f6ba' visibility='default' filepath='include/linux/regmap.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='include/linux/regmap.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='zero_flag_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reg_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='val_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ranges' type-id='cf08cac3' visibility='default' filepath='include/linux/regmap.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='num_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='use_hwlock' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='hwlock_id' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hwlock_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='409' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d79644f2' size-in-bits='64' id='398e6008'/>
+      <pointer-type-def type-id='9be24bae' size-in-bits='64' id='e93ce0cc'/>
+      <pointer-type-def type-id='00d2c7e1' size-in-bits='64' id='16d08491'/>
+      <pointer-type-def type-id='d5526a99' size-in-bits='64' id='f1537b61'/>
+      <class-decl name='i2c_bus_recovery_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='611' column='1' id='d5526a99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recover_bus' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_scl' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_scl' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sda' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_sda' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_bus_free' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unprepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scl_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sda_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='625' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='21fe2d6b' const='yes' id='d79644f2'/>
+      <qualified-type-def type-id='547b1199' const='yes' id='9be24bae'/>
+      <qualified-type-def type-id='a94a041a' const='yes' id='00d2c7e1'/>
+      <pointer-type-def type-id='9fddcab4' size-in-bits='64' id='4825f6ba'/>
+      <pointer-type-def type-id='9e02903b' size-in-bits='64' id='cf08cac3'/>
+      <class-decl name='i2c_adapter_quirks' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='654' column='1' id='21fe2d6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='91ce1af9' visibility='default' filepath='include/linux/i2c.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_num_msgs' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_write_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_read_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_comb_1st_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='max_comb_2nd_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_algorithm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='526' column='1' id='547b1199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_xfer' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_xfer_atomic' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smbus_xfer' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smbus_xfer_atomic' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='functionality' type-id='d0ff2b97' visibility='default' filepath='include/linux/i2c.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_lock_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='564' column='1' id='a94a041a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trylock_bus' type-id='3d5afe0d' visibility='default' filepath='include/linux/i2c.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unlock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='0ee576bb' const='yes' id='9fddcab4'/>
+      <qualified-type-def type-id='b683d7fe' const='yes' id='9e02903b'/>
+      <pointer-type-def type-id='4033dd6b' size-in-bits='64' id='6ae2afd7'/>
+      <pointer-type-def type-id='d385bfac' size-in-bits='64' id='8616a4a6'/>
+      <pointer-type-def type-id='d6574e69' size-in-bits='64' id='8f19938d'/>
+      <class-decl name='regmap_range_cfg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='432' column='1' id='b683d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='selector_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='selector_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='selector_shift' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='window_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='window_len' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='448' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='674bdea8' size-in-bits='64' id='4813c4da'/>
+      <pointer-type-def type-id='86768fbb' size-in-bits='64' id='99dc8ee7'/>
+      <pointer-type-def type-id='5d16c291' size-in-bits='64' id='3d5afe0d'/>
+      <pointer-type-def type-id='64f1e67b' size-in-bits='64' id='d0ff2b97'/>
+      <pointer-type-def type-id='9d4721a2' size-in-bits='64' id='6523d744'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/regmap/regmap-irq.c' language='LANG_C89'>
+      <class-decl name='regmap_irq_chip' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1231' column='1' id='349c0cdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='main_status' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_main_status_bits' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sub_reg_offsets' type-id='521ebb15' visibility='default' filepath='include/linux/regmap.h' line='1236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_main_regs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='status_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='unmask_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ack_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='wake_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type_base' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_reg_stride' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask_writeonly' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='init_ack_masked' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='mask_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='use_ack' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ack_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='wake_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='runtime_pm' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='type_invert' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_in_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='clear_on_unmask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='1255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_regs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irqs' type-id='f630e149' visibility='default' filepath='include/linux/regmap.h' line='1259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_irqs' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_type_reg' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='1262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='type_reg_stride' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='handle_pre_irq' type-id='b9b212f5' visibility='default' filepath='include/linux/regmap.h' line='1265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='handle_post_irq' type-id='b9b212f5' visibility='default' filepath='include/linux/regmap.h' line='1266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='1267' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_sub_irq_map' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1161' column='1' id='652bbaa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_regs' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='807869d3' visibility='default' filepath='include/linux/regmap.h' line='1163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1143' column='1' id='5fb55d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='ecdf025d' visibility='default' filepath='include/linux/regmap.h' line='1146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_type' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1126' column='1' id='ecdf025d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_reg_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type_reg_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_rising_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type_falling_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type_level_low_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type_level_high_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='types_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_irq_chip_data' size-in-bits='3520' is-struct='yes' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='20' column='1' id='6161d888'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_chip' type-id='0f5f7920' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='map' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='chip' type-id='78965926' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='irq_base' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='wake_count' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='status_reg_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='main_status_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='status_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='mask_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='mask_buf_def' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='wake_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='type_buf' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='type_buf_def' type-id='807869d3' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='irq_reg_stride' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='type_reg_stride' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clear_status' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/regmap-irq.c' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='5fb55d48' const='yes' id='70ebcb19'/>
+      <pointer-type-def type-id='70ebcb19' size-in-bits='64' id='f630e149'/>
+      <qualified-type-def type-id='349c0cdf' const='yes' id='23de1228'/>
+      <pointer-type-def type-id='23de1228' size-in-bits='64' id='78965926'/>
+      <pointer-type-def type-id='6161d888' size-in-bits='64' id='a2782ece'/>
+      <pointer-type-def type-id='a2782ece' size-in-bits='64' id='a731d0ec'/>
+      <pointer-type-def type-id='652bbaa5' size-in-bits='64' id='521ebb15'/>
+      <function-decl name='regmap_add_irq_chip' mangled-name='regmap_add_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_add_irq_chip'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_flags' filepath='drivers/base/regmap/regmap-irq.c' line='559' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/base/regmap/regmap-irq.c' line='560' column='1'/>
+        <parameter type-id='78965926' name='chip' filepath='drivers/base/regmap/regmap-irq.c' line='560' column='1'/>
+        <parameter type-id='a731d0ec' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='561' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_irq_get_virq' mangled-name='regmap_irq_get_virq' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_irq_get_virq'>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='965' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_irq_get_domain' mangled-name='regmap_irq_get_domain' filepath='drivers/base/regmap/regmap-irq.c' line='985' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_irq_get_domain'>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='985' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='regmap_del_irq_chip' mangled-name='regmap_del_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_del_irq_chip'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1'/>
+        <parameter type-id='a2782ece' name='d' filepath='drivers/base/regmap/regmap-irq.c' line='821' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regmap_del_irq_chip' mangled-name='devm_regmap_del_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_del_irq_chip'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='929' column='1'/>
+        <parameter type-id='a2782ece' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='930' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regmap_add_irq_chip' mangled-name='devm_regmap_add_irq_chip' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_add_irq_chip'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/base/regmap/regmap-irq.c' line='893' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_flags' filepath='drivers/base/regmap/regmap-irq.c' line='894' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/base/regmap/regmap-irq.c' line='894' column='1'/>
+        <parameter type-id='78965926' name='chip' filepath='drivers/base/regmap/regmap-irq.c' line='895' column='1'/>
+        <parameter type-id='a731d0ec' name='data' filepath='drivers/base/regmap/regmap-irq.c' line='896' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/regmap/regmap-mmio.c' language='LANG_C89'>
+      <function-decl name='__devm_regmap_init_mmio_clk' mangled-name='__devm_regmap_init_mmio_clk' filepath='drivers/base/regmap/regmap-mmio.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init_mmio_clk'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap-mmio.c' line='339' column='1'/>
+        <parameter type-id='80f4b756' name='clk_id' filepath='drivers/base/regmap/regmap-mmio.c' line='340' column='1'/>
+        <parameter type-id='eaa32e2f' name='regs' filepath='drivers/base/regmap/regmap-mmio.c' line='341' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap-mmio.c' line='342' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap-mmio.c' line='343' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap-mmio.c' line='344' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/regmap/regmap.c' language='LANG_C89'>
+      <class-decl name='hwspinlock' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='40' column='1' id='38db93a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bank' type-id='b8cd8f00' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1' id='ed93e75e'>
+        <data-member access='public'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='3eaed1cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='52' column='1' id='3eaed1cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spinlock_flags' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_lock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='233' column='1' id='a4d5c862'/>
+      <typedef-decl name='regmap_unlock' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='234' column='1' id='cf202c75'/>
+      <class-decl name='regmap_format' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='30' column='1' id='32ee7e31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf_size' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='val_bytes' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='format_write' type-id='d1abd66c' visibility='default' filepath='drivers/base/regmap/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='format_reg' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format_val' type-id='8052541e' visibility='default' filepath='drivers/base/regmap/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parse_val' type-id='caa804f2' visibility='default' filepath='drivers/base/regmap/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parse_inplace' type-id='b7f9d8e6' visibility='default' filepath='drivers/base/regmap/internal.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_bus' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='509' column='1' id='bd5f6464'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='928c5b64' visibility='default' filepath='include/linux/regmap.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gather_write' type-id='60be0faa' visibility='default' filepath='include/linux/regmap.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='async_write' type-id='6ee2c7d7' visibility='default' filepath='include/linux/regmap.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reg_write' type-id='8c8780d1' visibility='default' filepath='include/linux/regmap.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reg_update_bits' type-id='59483ee8' visibility='default' filepath='include/linux/regmap.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='697414cd' visibility='default' filepath='include/linux/regmap.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='ec8d430e' visibility='default' filepath='include/linux/regmap.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='free_context' type-id='5c459137' visibility='default' filepath='include/linux/regmap.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='async_alloc' type-id='27a024fd' visibility='default' filepath='include/linux/regmap.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read_flag_mask' type-id='f9b06939' visibility='default' filepath='include/linux/regmap.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='reg_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='val_format_endian_default' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='include/linux/regmap.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_hw_write' type-id='02a757da' filepath='include/linux/regmap.h' line='453' column='1' id='928c5b64'/>
+      <typedef-decl name='regmap_hw_gather_write' type-id='acda35bb' filepath='include/linux/regmap.h' line='455' column='1' id='60be0faa'/>
+      <typedef-decl name='regmap_hw_async_write' type-id='38921430' filepath='include/linux/regmap.h' line='458' column='1' id='6ee2c7d7'/>
+      <class-decl name='regmap_async' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='43' column='1' id='26527266'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='regmap_hw_reg_write' type-id='db7eb22d' filepath='include/linux/regmap.h' line='467' column='1' id='8c8780d1'/>
+      <typedef-decl name='regmap_hw_reg_update_bits' type-id='3a0b4ecf' filepath='include/linux/regmap.h' line='469' column='1' id='59483ee8'/>
+      <typedef-decl name='regmap_hw_read' type-id='acda35bb' filepath='include/linux/regmap.h' line='462' column='1' id='697414cd'/>
+      <typedef-decl name='regmap_hw_reg_read' type-id='4893ffdf' filepath='include/linux/regmap.h' line='465' column='1' id='ec8d430e'/>
+      <typedef-decl name='regmap_hw_free_context' type-id='b7f9d8e6' filepath='include/linux/regmap.h' line='472' column='1' id='5c459137'/>
+      <typedef-decl name='regmap_hw_async_alloc' type-id='68f92bd7' filepath='include/linux/regmap.h' line='471' column='1' id='27a024fd'/>
+      <enum-decl name='regmap_endian' filepath='include/linux/regmap.h' line='191' column='1' id='e8a9ba7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGMAP_ENDIAN_DEFAULT' value='0'/>
+        <enumerator name='REGMAP_ENDIAN_BIG' value='1'/>
+        <enumerator name='REGMAP_ENDIAN_LITTLE' value='2'/>
+        <enumerator name='REGMAP_ENDIAN_NATIVE' value='3'/>
+      </enum-decl>
+      <class-decl name='regmap_access_table' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='226' column='1' id='2bed066b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='yes_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_yes_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_ranges' type-id='01dc1e38' visibility='default' filepath='include/linux/regmap.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_no_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_range' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='206' column='1' id='20f6935f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regcache_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='166' column='1' id='81cd3626'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='02c2e3f3' visibility='default' filepath='drivers/base/regmap/internal.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_init' type-id='078f0514' visibility='default' filepath='drivers/base/regmap/internal.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='b8529195' visibility='default' filepath='drivers/base/regmap/internal.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='drop' type-id='2f739ebb' visibility='default' filepath='drivers/base/regmap/internal.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='regcache_type' filepath='include/linux/regmap.h' line='38' column='1' id='6e1356fd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REGCACHE_NONE' value='0'/>
+        <enumerator name='REGCACHE_RBTREE' value='1'/>
+        <enumerator name='REGCACHE_COMPRESSED' value='2'/>
+        <enumerator name='REGCACHE_FLAT' value='3'/>
+      </enum-decl>
+      <class-decl name='reg_default' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='54' column='1' id='0ee576bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='69' column='1' id='4fcc4597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='def' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_config' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='353' column='1' id='20b6fd7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pad_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='val_bits' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='include/linux/regmap.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_locking' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='include/linux/regmap.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='include/linux/regmap.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='include/linux/regmap.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='include/linux/regmap.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fast_io' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='include/linux/regmap.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='reg_defaults' type-id='4825f6ba' visibility='default' filepath='include/linux/regmap.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='include/linux/regmap.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='include/linux/regmap.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='include/linux/regmap.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='zero_flag_mask' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1816'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reg_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='val_format_endian' type-id='e8a9ba7e' visibility='default' filepath='include/linux/regmap.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ranges' type-id='cf08cac3' visibility='default' filepath='include/linux/regmap.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='num_ranges' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='use_hwlock' type-id='b50a4934' visibility='default' filepath='include/linux/regmap.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='hwlock_id' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hwlock_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='409' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_range_cfg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='432' column='1' id='b683d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regmap.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range_min' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='range_max' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='selector_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='selector_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='selector_shift' type-id='95e97e5e' visibility='default' filepath='include/linux/regmap.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='window_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='window_len' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regmap.h' line='448' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regmap_field' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='207' column='1' id='ccbe56f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='drivers/base/regmap/internal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='shift' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='id_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_offset' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reg_field' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/regmap.h' line='1085' column='1' id='d7d5e052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lsb' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msb' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id_size' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/regmap.h' line='1090' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='0ee576bb' const='yes' id='9fddcab4'/>
+      <pointer-type-def type-id='9fddcab4' size-in-bits='64' id='4825f6ba'/>
+      <qualified-type-def type-id='4fcc4597' const='yes' id='40308fd2'/>
+      <pointer-type-def type-id='40308fd2' size-in-bits='64' id='0472a368'/>
+      <qualified-type-def type-id='81cd3626' const='yes' id='2dd1eb6f'/>
+      <pointer-type-def type-id='2dd1eb6f' size-in-bits='64' id='66755d9f'/>
+      <qualified-type-def type-id='2bed066b' const='yes' id='a82172e0'/>
+      <pointer-type-def type-id='a82172e0' size-in-bits='64' id='76a7b3fe'/>
+      <qualified-type-def type-id='bd5f6464' const='yes' id='4dbb5689'/>
+      <pointer-type-def type-id='4dbb5689' size-in-bits='64' id='00e96299'/>
+      <qualified-type-def type-id='20b6fd7c' const='yes' id='23e41d37'/>
+      <pointer-type-def type-id='23e41d37' size-in-bits='64' id='9d19d4a7'/>
+      <qualified-type-def type-id='20f6935f' const='yes' id='9a6d2bc2'/>
+      <pointer-type-def type-id='9a6d2bc2' size-in-bits='64' id='01dc1e38'/>
+      <qualified-type-def type-id='b683d7fe' const='yes' id='9e02903b'/>
+      <pointer-type-def type-id='9e02903b' size-in-bits='64' id='cf08cac3'/>
+      <pointer-type-def type-id='38db93a7' size-in-bits='64' id='0cb0b26f'/>
+      <pointer-type-def type-id='b5732d6f' size-in-bits='64' id='02c2e3f3'/>
+      <pointer-type-def type-id='3b43e527' size-in-bits='64' id='2f739ebb'/>
+      <pointer-type-def type-id='71e3f969' size-in-bits='64' id='b8529195'/>
+      <pointer-type-def type-id='7ee67639' size-in-bits='64' id='db7eb22d'/>
+      <pointer-type-def type-id='b4c4ed0b' size-in-bits='64' id='4893ffdf'/>
+      <pointer-type-def type-id='9f19269b' size-in-bits='64' id='3a0b4ecf'/>
+      <pointer-type-def type-id='bc6e6178' size-in-bits='64' id='02a757da'/>
+      <pointer-type-def type-id='51192447' size-in-bits='64' id='acda35bb'/>
+      <pointer-type-def type-id='22a55ca6' size-in-bits='64' id='38921430'/>
+      <pointer-type-def type-id='0ee576bb' size-in-bits='64' id='629ca5cb'/>
+      <pointer-type-def type-id='4fcc4597' size-in-bits='64' id='f94cf1ff'/>
+      <pointer-type-def type-id='26527266' size-in-bits='64' id='211c185c'/>
+      <pointer-type-def type-id='bae213e3' size-in-bits='64' id='68f92bd7'/>
+      <pointer-type-def type-id='ccbe56f6' size-in-bits='64' id='476eb32c'/>
+      <pointer-type-def type-id='e14a26b1' size-in-bits='64' id='8e565e6d'/>
+      <pointer-type-def type-id='2ea97d28' size-in-bits='64' id='caa804f2'/>
+      <pointer-type-def type-id='0086a11a' size-in-bits='64' id='078f0514'/>
+      <pointer-type-def type-id='aee29222' size-in-bits='64' id='d1abd66c'/>
+      <pointer-type-def type-id='7c5064e4' size-in-bits='64' id='8052541e'/>
+      <function-decl name='__regmap_init' mangled-name='__regmap_init' filepath='drivers/base/regmap/regmap.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__regmap_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='674' column='1'/>
+        <parameter type-id='00e96299' name='bus' filepath='drivers/base/regmap/regmap.c' line='675' column='1'/>
+        <parameter type-id='eaa32e2f' name='bus_context' filepath='drivers/base/regmap/regmap.c' line='676' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap.c' line='677' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap.c' line='678' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap.c' line='679' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='regmap_register_patch' mangled-name='regmap_register_patch' filepath='drivers/base/regmap/regmap.c' line='3015' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_register_patch'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3015' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='3015' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='3016' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_write' mangled-name='regmap_write' filepath='drivers/base/regmap/regmap.c' line='1798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='1798' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='1798' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/base/regmap/regmap.c' line='1798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_update_bits_base' mangled-name='regmap_update_bits_base' filepath='drivers/base/regmap/regmap.c' line='2913' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_update_bits_base'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2913' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2913' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='drivers/base/regmap/regmap.c' line='2914' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/base/regmap/regmap.c' line='2914' column='1'/>
+        <parameter type-id='d8e6b335' name='change' filepath='drivers/base/regmap/regmap.c' line='2915' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='drivers/base/regmap/regmap.c' line='2915' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='drivers/base/regmap/regmap.c' line='2915' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_async_complete' mangled-name='regmap_async_complete' filepath='drivers/base/regmap/regmap.c' line='2974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_async_complete'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2974' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_read' mangled-name='regmap_read' filepath='drivers/base/regmap/regmap.c' line='2558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_read'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2558' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2558' column='1'/>
+        <parameter type-id='807869d3' name='val' filepath='drivers/base/regmap/regmap.c' line='2558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_raw_write_async' mangled-name='regmap_raw_write_async' filepath='drivers/base/regmap/regmap.c' line='2433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_write_async'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2433' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2433' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2434' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_raw_write' mangled-name='regmap_raw_write' filepath='drivers/base/regmap/regmap.c' line='1900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='1900' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='1900' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='1901' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='1901' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_raw_read' mangled-name='regmap_raw_read' filepath='drivers/base/regmap/regmap.c' line='2586' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_raw_read'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2586' column='1'/>
+        <parameter type-id='b59d7dce' name='val_len' filepath='drivers/base/regmap/regmap.c' line='2587' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_multi_reg_write_bypassed' mangled-name='regmap_multi_reg_write_bypassed' filepath='drivers/base/regmap/regmap.c' line='2389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_multi_reg_write_bypassed'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2389' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2390' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2391' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_multi_reg_write' mangled-name='regmap_multi_reg_write' filepath='drivers/base/regmap/regmap.c' line='2356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_multi_reg_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2356' column='1'/>
+        <parameter type-id='0472a368' name='regs' filepath='drivers/base/regmap/regmap.c' line='2356' column='1'/>
+        <parameter type-id='95e97e5e' name='num_regs' filepath='drivers/base/regmap/regmap.c' line='2357' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_get_val_bytes' mangled-name='regmap_get_val_bytes' filepath='drivers/base/regmap/regmap.c' line='3065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_get_val_bytes'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3065' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_get_reg_stride' mangled-name='regmap_get_reg_stride' filepath='drivers/base/regmap/regmap.c' line='3096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_get_reg_stride'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='3096' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_field_update_bits_base' mangled-name='regmap_field_update_bits_base' filepath='drivers/base/regmap/regmap.c' line='2000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_field_update_bits_base'>
+        <parameter type-id='476eb32c' name='field' filepath='drivers/base/regmap/regmap.c' line='2000' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/base/regmap/regmap.c' line='2001' column='1'/>
+        <parameter type-id='d8e6b335' name='change' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <parameter type-id='b50a4934' name='async' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='drivers/base/regmap/regmap.c' line='2002' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_field_read' mangled-name='regmap_field_read' filepath='drivers/base/regmap/regmap.c' line='2733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_field_read'>
+        <parameter type-id='476eb32c' name='field' filepath='drivers/base/regmap/regmap.c' line='2733' column='1'/>
+        <parameter type-id='807869d3' name='val' filepath='drivers/base/regmap/regmap.c' line='2733' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_exit' mangled-name='regmap_exit' filepath='drivers/base/regmap/regmap.c' line='1330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_exit'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='1330' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regmap_bulk_write' mangled-name='regmap_bulk_write' filepath='drivers/base/regmap/regmap.c' line='2057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_bulk_write'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2057' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2058' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regmap_bulk_read' mangled-name='regmap_bulk_read' filepath='drivers/base/regmap/regmap.c' line='2793' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regmap_bulk_read'>
+        <parameter type-id='29af9a71' name='map' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/base/regmap/regmap.c' line='2793' column='1'/>
+        <parameter type-id='b59d7dce' name='val_count' filepath='drivers/base/regmap/regmap.c' line='2794' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_regmap_field_alloc' mangled-name='devm_regmap_field_alloc' filepath='drivers/base/regmap/regmap.c' line='1219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regmap_field_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='1219' column='1'/>
+        <parameter type-id='29af9a71' name='regmap' filepath='drivers/base/regmap/regmap.c' line='1220' column='1'/>
+        <parameter type-id='d7d5e052' name='reg_field' filepath='drivers/base/regmap/regmap.c' line='1220' column='1'/>
+        <return type-id='476eb32c'/>
+      </function-decl>
+      <function-decl name='dev_get_regmap' mangled-name='dev_get_regmap' filepath='drivers/base/regmap/regmap.c' line='1383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_regmap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='1383' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/base/regmap/regmap.c' line='1383' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='__devm_regmap_init' mangled-name='__devm_regmap_init' filepath='drivers/base/regmap/regmap.c' line='1171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_regmap_init'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/base/regmap/regmap.c' line='1171' column='1'/>
+        <parameter type-id='00e96299' name='bus' filepath='drivers/base/regmap/regmap.c' line='1172' column='1'/>
+        <parameter type-id='eaa32e2f' name='bus_context' filepath='drivers/base/regmap/regmap.c' line='1173' column='1'/>
+        <parameter type-id='9d19d4a7' name='config' filepath='drivers/base/regmap/regmap.c' line='1174' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/base/regmap/regmap.c' line='1175' column='1'/>
+        <parameter type-id='80f4b756' name='lock_name' filepath='drivers/base/regmap/regmap.c' line='1176' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b5732d6f'>
+        <parameter type-id='29af9a71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b43e527'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71e3f969'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ee67639'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4c4ed0b'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f19269b'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc6e6178'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51192447'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22a55ca6'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='211c185c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bae213e3'>
+        <return type-id='211c185c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e14a26b1'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ea97d28'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0086a11a'>
+        <parameter type-id='29af9a71'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aee29222'>
+        <parameter type-id='29af9a71'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c5064e4'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/soc.c' language='LANG_C89'>
+      <class-decl name='soc_device' size-in-bits='7616' is-struct='yes' visibility='default' filepath='drivers/base/soc.c' line='24' column='1' id='a353e32f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/base/soc.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='attr' type-id='2dbbe856' visibility='default' filepath='drivers/base/soc.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='soc_dev_num' type-id='95e97e5e' visibility='default' filepath='drivers/base/soc.c' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='soc_device_attribute' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/sys_soc.h' line='11' column='1' id='81954c90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='machine' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='family' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='revision' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_number' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='soc_id' type-id='80f4b756' visibility='default' filepath='include/linux/sys_soc.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sys_soc.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='custom_attr_group' type-id='8ff9530e' visibility='default' filepath='include/linux/sys_soc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a353e32f' size-in-bits='64' id='97eb1967'/>
+      <pointer-type-def type-id='81954c90' size-in-bits='64' id='2dbbe856'/>
+      <function-decl name='soc_device_unregister' mangled-name='soc_device_unregister' filepath='drivers/base/soc.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='soc_device_unregister'>
+        <parameter type-id='97eb1967' name='soc_dev' filepath='drivers/base/soc.c' line='176' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='soc_device_register' mangled-name='soc_device_register' filepath='drivers/base/soc.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='soc_device_register'>
+        <parameter type-id='2dbbe856' name='soc_dev_attr' filepath='drivers/base/soc.c' line='118' column='1'/>
+        <return type-id='97eb1967'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/base/syscore.c' language='LANG_C89'>
+      <class-decl name='syscore_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/syscore_ops.h' line='13' column='1' id='654484ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/syscore_ops.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='suspend' type-id='1db260e5' visibility='default' filepath='include/linux/syscore_ops.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resume' type-id='953b12f8' visibility='default' filepath='include/linux/syscore_ops.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shutdown' type-id='953b12f8' visibility='default' filepath='include/linux/syscore_ops.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='654484ba' size-in-bits='64' id='cbd24a98'/>
+      <function-decl name='register_syscore_ops' mangled-name='register_syscore_ops' filepath='drivers/base/syscore.c' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_syscore_ops'>
+        <parameter type-id='cbd24a98' name='ops' filepath='drivers/base/syscore.c' line='22' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_syscore_ops' mangled-name='unregister_syscore_ops' filepath='drivers/base/syscore.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_syscore_ops'>
+        <parameter type-id='cbd24a98' name='ops' filepath='drivers/base/syscore.c' line='34' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='39' column='1' id='9f3c2055'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/hw_random.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='83a85211' visibility='default' filepath='include/linux/hw_random.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='844c2e84' visibility='default' filepath='include/linux/hw_random.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data_present' type-id='0b1bf018' visibility='default' filepath='include/linux/hw_random.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data_read' type-id='81767071' visibility='default' filepath='include/linux/hw_random.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read' type-id='c38df6d7' visibility='default' filepath='include/linux/hw_random.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='7359adad' visibility='default' filepath='include/linux/hw_random.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quality' type-id='8efea9e5' visibility='default' filepath='include/linux/hw_random.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/hw_random.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/hw_random.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/linux/hw_random.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9f3c2055' size-in-bits='64' id='c1547255'/>
+      <pointer-type-def type-id='d660dfdd' size-in-bits='64' id='83a85211'/>
+      <pointer-type-def type-id='78627a7e' size-in-bits='64' id='0b1bf018'/>
+      <pointer-type-def type-id='b03c6e7d' size-in-bits='64' id='81767071'/>
+      <pointer-type-def type-id='4f6af29b' size-in-bits='64' id='c38df6d7'/>
+      <pointer-type-def type-id='72fc7982' size-in-bits='64' id='844c2e84'/>
+      <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='c1547255' name='rng' filepath='drivers/char/hw_random/core.c' line='517' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='c1547255' name='rng' filepath='drivers/char/hw_random/core.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d660dfdd'>
+        <parameter type-id='c1547255'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78627a7e'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b03c6e7d'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f6af29b'>
+        <parameter type-id='c1547255'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72fc7982'>
+        <parameter type-id='c1547255' name='rng'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='ae7d199f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='minor' type-id='95e97e5e' 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='80f4b756' 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='61758ee5' 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='72f469ec' 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='fa0b179b' 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='fa0b179b' 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='c97de1ac' 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='80f4b756' 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='2594b00f' visibility='default' filepath='include/linux/miscdevice.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ae7d199f' size-in-bits='64' id='c63257f7'/>
+      <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='c63257f7' name='misc' filepath='drivers/char/misc.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='misc_deregister' mangled-name='misc_deregister' filepath='drivers/char/misc.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='misc_deregister'>
+        <parameter type-id='c63257f7' name='misc' filepath='drivers/char/misc.c' line='239' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='1562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_random_bytes'>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/char/random.c' line='1562' column='1'/>
+        <parameter type-id='95e97e5e' name='nbytes' filepath='drivers/char/random.c' line='1562' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_random_u32' mangled-name='get_random_u32' filepath='drivers/char/random.c' line='2206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_random_u32'>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='add_device_randomness' mangled-name='add_device_randomness' filepath='drivers/char/random.c' line='1116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_device_randomness'>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/char/random.c' line='1116' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/char/random.c' line='1116' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-bulk.c' language='LANG_C89'>
+      <qualified-type-def type-id='158c8c35' const='yes' id='38a035e6'/>
+      <pointer-type-def type-id='38a035e6' size-in-bits='64' id='f034b024'/>
+      <function-decl name='clk_bulk_get_all' mangled-name='clk_bulk_get_all' filepath='drivers/clk/clk-bulk.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_get_all'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-bulk.c' line='139' column='1'/>
+        <parameter type-id='734c20ed' name='clks' filepath='drivers/clk/clk-bulk.c' line='140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_unprepare' mangled-name='clk_bulk_unprepare' filepath='drivers/clk/clk-bulk.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_unprepare'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='161' column='1'/>
+        <parameter type-id='f034b024' name='clks' filepath='drivers/clk/clk-bulk.c' line='161' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_bulk_put_all' mangled-name='clk_bulk_put_all' filepath='drivers/clk/clk-bulk.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_put_all'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='128' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-bulk.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_bulk_prepare' mangled-name='clk_bulk_prepare' filepath='drivers/clk/clk-bulk.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_prepare'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='176' column='1'/>
+        <parameter type-id='f034b024' name='clks' filepath='drivers/clk/clk-bulk.c' line='177' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_get' mangled-name='clk_bulk_get' filepath='drivers/clk/clk-bulk.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-bulk.c' line='114' column='1'/>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='114' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-bulk.c' line='115' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_enable' mangled-name='clk_bulk_enable' filepath='drivers/clk/clk-bulk.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_enable'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='227' column='1'/>
+        <parameter type-id='f034b024' name='clks' filepath='drivers/clk/clk-bulk.c' line='227' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_bulk_disable' mangled-name='clk_bulk_disable' filepath='drivers/clk/clk-bulk.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_bulk_disable'>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-bulk.c' line='211' column='1'/>
+        <parameter type-id='f034b024' name='clks' filepath='drivers/clk/clk-bulk.c' line='211' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='clk_bulk_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/clk.h' line='87' column='1' id='158c8c35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/clk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='158c8c35' size-in-bits='64' id='2942e355'/>
+      <pointer-type-def type-id='2942e355' size-in-bits='64' id='734c20ed'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-conf.c' language='LANG_C89'>
+      <function-decl name='of_clk_set_defaults' mangled-name='of_clk_set_defaults' filepath='drivers/clk/clk-conf.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_set_defaults'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/clk/clk-conf.c' line='131' column='1'/>
+        <parameter type-id='b50a4934' name='clk_supplier' filepath='drivers/clk/clk-conf.c' line='131' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-devres.c' language='LANG_C89'>
+      <class-decl name='clk_bulk_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/clk.h' line='87' column='1' id='158c8c35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/linux/clk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='158c8c35' size-in-bits='64' id='2942e355'/>
+      <pointer-type-def type-id='2942e355' size-in-bits='64' id='734c20ed'/>
+      <function-decl name='devm_clk_get' mangled-name='devm_clk_get' filepath='drivers/clk/clk-devres.c' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='12' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/clk/clk-devres.c' line='12' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='devm_clk_bulk_get' mangled-name='devm_clk_bulk_get' filepath='drivers/clk/clk-devres.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='81' column='1'/>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-devres.c' line='81' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-devres.c' line='82' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_get_optional' mangled-name='devm_clk_get_optional' filepath='drivers/clk/clk-devres.c' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='32' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/clk/clk-devres.c' line='32' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='devm_get_clk_from_child' mangled-name='devm_get_clk_from_child' filepath='drivers/clk/clk-devres.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_get_clk_from_child'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='146' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk-devres.c' line='147' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clk-devres.c' line='147' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='devm_clk_put' mangled-name='devm_clk_put' filepath='drivers/clk/clk-devres.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_put'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='136' column='1'/>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk-devres.c' line='136' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_clk_bulk_get_optional' mangled-name='devm_clk_bulk_get_optional' filepath='drivers/clk/clk-devres.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='88' column='1'/>
+        <parameter type-id='95e97e5e' name='num_clks' filepath='drivers/clk/clk-devres.c' line='88' column='1'/>
+        <parameter type-id='2942e355' name='clks' filepath='drivers/clk/clk-devres.c' line='89' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_bulk_get_all' mangled-name='devm_clk_bulk_get_all' filepath='drivers/clk/clk-devres.c' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_bulk_get_all'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-devres.c' line='102' column='1'/>
+        <parameter type-id='734c20ed' name='clks' filepath='drivers/clk/clk-devres.c' line='103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-divider.c' language='LANG_C89'>
+      <class-decl name='clk_div_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='415' column='1' id='32858f34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='div' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='417' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='32858f34' const='yes' id='bb21a21f'/>
+      <pointer-type-def type-id='bb21a21f' size-in-bits='64' id='caf2596f'/>
+      <function-decl name='divider_round_rate_parent' mangled-name='divider_round_rate_parent' filepath='drivers/clk/clk-divider.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_round_rate_parent'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='345' column='1'/>
+        <parameter type-id='3aaeef89' name='parent' filepath='drivers/clk/clk-divider.c' line='345' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='346' column='1'/>
+        <parameter type-id='1d2c2b85' name='prate' filepath='drivers/clk/clk-divider.c' line='346' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='347' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='348' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='348' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='divider_ro_round_rate_parent' mangled-name='divider_ro_round_rate_parent' filepath='drivers/clk/clk-divider.c' line='358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_ro_round_rate_parent'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='358' column='1'/>
+        <parameter type-id='3aaeef89' name='parent' filepath='drivers/clk/clk-divider.c' line='358' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='359' column='1'/>
+        <parameter type-id='1d2c2b85' name='prate' filepath='drivers/clk/clk-divider.c' line='359' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='360' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='360' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='361' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/clk/clk-divider.c' line='361' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='divider_recalc_rate' mangled-name='divider_recalc_rate' filepath='drivers/clk/clk-divider.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_recalc_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='129' column='1'/>
+        <parameter type-id='7359adad' name='parent_rate' filepath='drivers/clk/clk-divider.c' line='129' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='drivers/clk/clk-divider.c' line='130' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='131' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='132' column='1'/>
+        <parameter type-id='7359adad' name='width' filepath='drivers/clk/clk-divider.c' line='132' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='divider_get_val' mangled-name='divider_get_val' filepath='drivers/clk/clk-divider.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='divider_get_val'>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk-divider.c' line='401' column='1'/>
+        <parameter type-id='7359adad' name='parent_rate' filepath='drivers/clk/clk-divider.c' line='401' column='1'/>
+        <parameter type-id='caf2596f' name='table' filepath='drivers/clk/clk-divider.c' line='402' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='402' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_divider' mangled-name='clk_hw_unregister_divider' filepath='drivers/clk/clk-divider.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_divider'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-divider.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_register_divider' mangled-name='clk_hw_register_divider' filepath='drivers/clk/clk-divider.c' line='557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_divider'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-divider.c' line='557' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-divider.c' line='557' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-divider.c' line='558' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-divider.c' line='558' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='shift' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-divider.c' line='559' column='1'/>
+        <parameter type-id='f9b06939' name='clk_divider_flags' filepath='drivers/clk/clk-divider.c' line='560' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-divider.c' line='560' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-fixed-factor.c' language='LANG_C89'>
+      <var-decl name='clk_fixed_factor_ops' type-id='92072f8b' mangled-name='clk_fixed_factor_ops' visibility='default' filepath='drivers/clk/clk-fixed-factor.c' line='60' column='1' elf-symbol-id='clk_fixed_factor_ops'/>
+      <function-decl name='clk_unregister_fixed_factor' mangled-name='clk_unregister_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unregister_fixed_factor'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk-fixed-factor.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_register_fixed_factor' mangled-name='clk_register_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_fixed_factor'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-factor.c' line='118' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-factor.c' line='119' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-factor.c' line='119' column='1'/>
+        <parameter type-id='f0981eeb' name='mult' filepath='drivers/clk/clk-fixed-factor.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='div' filepath='drivers/clk/clk-fixed-factor.c' line='120' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_hw_register_fixed_factor' mangled-name='clk_hw_register_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_fixed_factor'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-factor.c' line='109' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-factor.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='mult' filepath='drivers/clk/clk-fixed-factor.c' line='111' column='1'/>
+        <parameter type-id='f0981eeb' name='div' filepath='drivers/clk/clk-fixed-factor.c' line='111' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_fixed_factor' mangled-name='clk_hw_unregister_fixed_factor' filepath='drivers/clk/clk-fixed-factor.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_fixed_factor'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-fixed-factor.c' line='145' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-fixed-rate.c' language='LANG_C89'>
+      <var-decl name='clk_fixed_rate_ops' type-id='92072f8b' mangled-name='clk_fixed_rate_ops' visibility='default' filepath='drivers/clk/clk-fixed-rate.c' line='39' column='1' elf-symbol-id='clk_fixed_rate_ops'/>
+      <function-decl name='clk_unregister_fixed_rate' mangled-name='clk_unregister_fixed_rate' filepath='drivers/clk/clk-fixed-rate.c' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unregister_fixed_rate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk-fixed-rate.c' line='133' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_register_fixed_rate' mangled-name='clk_register_fixed_rate' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_fixed_rate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-fixed-rate.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-fixed-rate.c' line='125' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-fixed-rate.c' line='125' column='1'/>
+        <parameter type-id='7359adad' name='fixed_rate' filepath='drivers/clk/clk-fixed-rate.c' line='126' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-gate.c' language='LANG_C89'>
+      <function-decl name='clk_unregister_gate' mangled-name='clk_unregister_gate' filepath='drivers/clk/clk-gate.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unregister_gate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk-gate.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_register_gate' mangled-name='clk_register_gate' filepath='drivers/clk/clk-gate.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_gate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-gate.c' line='183' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-gate.c' line='183' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-gate.c' line='184' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-gate.c' line='184' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-gate.c' line='185' column='1'/>
+        <parameter type-id='f9b06939' name='bit_idx' filepath='drivers/clk/clk-gate.c' line='185' column='1'/>
+        <parameter type-id='f9b06939' name='clk_gate_flags' filepath='drivers/clk/clk-gate.c' line='186' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-gate.c' line='186' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_hw_register_gate' mangled-name='clk_hw_register_gate' filepath='drivers/clk/clk-gate.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_gate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-gate.c' line='137' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-gate.c' line='137' column='1'/>
+        <parameter type-id='80f4b756' name='parent_name' filepath='drivers/clk/clk-gate.c' line='138' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-gate.c' line='138' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-gate.c' line='139' column='1'/>
+        <parameter type-id='f9b06939' name='bit_idx' filepath='drivers/clk/clk-gate.c' line='139' column='1'/>
+        <parameter type-id='f9b06939' name='clk_gate_flags' filepath='drivers/clk/clk-gate.c' line='140' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-gate.c' line='140' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister_gate' mangled-name='clk_hw_unregister_gate' filepath='drivers/clk/clk-gate.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_gate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-gate.c' line='214' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clk-mux.c' language='LANG_C89'>
+      <function-decl name='clk_hw_unregister_mux' mangled-name='clk_hw_unregister_mux' filepath='drivers/clk/clk-mux.c' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister_mux'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk-mux.c' line='263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_register_mux' mangled-name='clk_hw_register_mux' filepath='drivers/clk/clk-mux.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register_mux'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk-mux.c' line='233' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk-mux.c' line='233' column='1'/>
+        <parameter type-id='13956559' name='parent_names' filepath='drivers/clk/clk-mux.c' line='234' column='1'/>
+        <parameter type-id='f9b06939' name='num_parents' filepath='drivers/clk/clk-mux.c' line='234' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/clk/clk-mux.c' line='235' column='1'/>
+        <parameter type-id='eaa32e2f' name='reg' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='shift' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='width' filepath='drivers/clk/clk-mux.c' line='236' column='1'/>
+        <parameter type-id='f9b06939' name='clk_mux_flags' filepath='drivers/clk/clk-mux.c' line='237' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/clk/clk-mux.c' line='237' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='56' column='1' id='636cc9ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='drivers/clk/clk.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw' type-id='3aaeef89' visibility='default' filepath='drivers/clk/clk.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/clk/clk.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/clk/clk.c' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/clk/clk.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parents' type-id='338d484d' visibility='default' filepath='drivers/clk/clk.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='new_parent_index' type-id='f9b06939' visibility='default' filepath='drivers/clk/clk.c' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='new_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='new_parent' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='new_child' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='968'>
+          <var-decl name='rpm_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='need_sync' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='boot_enabled' type-id='b50a4934' visibility='default' filepath='drivers/clk/clk.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prepare_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='protect_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='accuracy' type-id='7359adad' visibility='default' filepath='drivers/clk/clk.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='phase' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='duty' type-id='4f935e80' visibility='default' filepath='drivers/clk/clk.c' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='children' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='clks' type-id='e151255a' visibility='default' filepath='drivers/clk/clk.c' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notifier_count' type-id='f0981eeb' visibility='default' filepath='drivers/clk/clk.c' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/clk/clk.c' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='debug_node' type-id='03a4a074' visibility='default' filepath='drivers/clk/clk.c' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='drivers/clk/clk.c' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='222' column='1' id='512851e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='is_prepared' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='is_enabled' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable_unused' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='save_context' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='restore_context' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='recalc_rate' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='round_rate' type-id='1eac8fa1' visibility='default' filepath='include/linux/clk-provider.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='determine_rate' type-id='c2c32efe' visibility='default' filepath='include/linux/clk-provider.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_parent' type-id='a05e478f' visibility='default' filepath='include/linux/clk-provider.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_parent' type-id='38527a92' visibility='default' filepath='include/linux/clk-provider.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rate' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_rate_and_parent' type-id='d598c37f' visibility='default' filepath='include/linux/clk-provider.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='recalc_accuracy' type-id='93097cd2' visibility='default' filepath='include/linux/clk-provider.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_phase' type-id='2d015d73' visibility='default' filepath='include/linux/clk-provider.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_phase' type-id='eeb35eda' visibility='default' filepath='include/linux/clk-provider.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_duty_cycle' type-id='3993d336' visibility='default' filepath='include/linux/clk-provider.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='init' type-id='0112fb3c' visibility='default' filepath='include/linux/clk-provider.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='debug_init' type-id='c2d2a400' visibility='default' filepath='include/linux/clk-provider.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pre_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='post_rate_change' type-id='3d287e03' visibility='default' filepath='include/linux/clk-provider.h' line='259' 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='319' column='1' id='cf8d7d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='include/linux/clk-provider.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/clk-provider.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='b6a95a02' visibility='default' filepath='include/linux/clk-provider.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_init_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='292' column='1' id='065eee5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='824ffa73' visibility='default' filepath='include/linux/clk-provider.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent_names' type-id='13956559' visibility='default' filepath='include/linux/clk-provider.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_data' type-id='4cdbecf4' visibility='default' filepath='include/linux/clk-provider.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_hws' type-id='ca0dae6c' visibility='default' filepath='include/linux/clk-provider.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_parents' type-id='f9b06939' visibility='default' filepath='include/linux/clk-provider.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_parent_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/clk-provider.h' line='271' column='1' id='bd5c3911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='include/linux/clk-provider.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clk-provider.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/clk-provider.h' line='275' 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='56' column='1' id='e9bea70c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_parent_rate' type-id='7359adad' visibility='default' filepath='include/linux/clk-provider.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='best_parent_hw' type-id='3aaeef89' visibility='default' filepath='include/linux/clk-provider.h' line='61' 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='70' column='1' id='4f935e80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='den' type-id='f0981eeb' visibility='default' filepath='include/linux/clk-provider.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clk_parent_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clk/clk.c' line='48' column='1' id='710f82fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw' type-id='9e6d4b4e' visibility='default' filepath='drivers/clk/clk.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='core' type-id='ba21e62b' visibility='default' filepath='drivers/clk/clk.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fw_name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clk/clk.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clk/clk.c' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='824a7fd2' size-in-bits='64' id='f1c652ac'/>
+      <pointer-type-def type-id='636cc9ab' size-in-bits='64' id='ba21e62b'/>
+      <pointer-type-def type-id='4f935e80' size-in-bits='64' id='f726dab6'/>
+      <pointer-type-def type-id='cf8d7d81' size-in-bits='64' id='3aaeef89'/>
+      <pointer-type-def type-id='e4cb80c8' size-in-bits='64' id='a5186342'/>
+      <pointer-type-def type-id='710f82fd' size-in-bits='64' id='338d484d'/>
+      <pointer-type-def type-id='e9bea70c' size-in-bits='64' id='23a0ad0a'/>
+      <qualified-type-def type-id='830e3b1b' const='yes' id='75144de8'/>
+      <pointer-type-def type-id='75144de8' size-in-bits='64' id='10f66866'/>
+      <qualified-type-def type-id='cf8d7d81' const='yes' id='fdb55010'/>
+      <pointer-type-def type-id='fdb55010' size-in-bits='64' id='9e6d4b4e'/>
+      <pointer-type-def type-id='9e6d4b4e' size-in-bits='64' id='ca0dae6c'/>
+      <qualified-type-def type-id='065eee5b' const='yes' id='d7aa071c'/>
+      <pointer-type-def type-id='d7aa071c' size-in-bits='64' id='b6a95a02'/>
+      <qualified-type-def type-id='512851e8' const='yes' id='92072f8b'/>
+      <pointer-type-def type-id='92072f8b' size-in-bits='64' id='824ffa73'/>
+      <qualified-type-def type-id='bd5c3911' const='yes' id='dcc94796'/>
+      <pointer-type-def type-id='dcc94796' size-in-bits='64' id='4cdbecf4'/>
+      <pointer-type-def type-id='f5a529af' size-in-bits='64' id='2d015d73'/>
+      <pointer-type-def type-id='73b85a24' size-in-bits='64' id='3993d336'/>
+      <pointer-type-def type-id='f867473c' size-in-bits='64' id='c2c32efe'/>
+      <pointer-type-def type-id='fc053d58' size-in-bits='64' id='eeb35eda'/>
+      <pointer-type-def type-id='8de1c3db' size-in-bits='64' id='a05e478f'/>
+      <pointer-type-def type-id='2e5f4f0f' size-in-bits='64' id='3d287e03'/>
+      <pointer-type-def type-id='59f7b4bb' size-in-bits='64' id='d598c37f'/>
+      <pointer-type-def type-id='7fb4efa5' size-in-bits='64' id='1eac8fa1'/>
+      <pointer-type-def type-id='d49e6088' size-in-bits='64' id='38527a92'/>
+      <pointer-type-def type-id='0a38a8f0' size-in-bits='64' id='93097cd2'/>
+      <pointer-type-def type-id='30913582' size-in-bits='64' id='0112fb3c'/>
+      <pointer-type-def type-id='7c1f247e' size-in-bits='64' id='c2d2a400'/>
+      <function-decl name='clk_prepare' mangled-name='clk_prepare' filepath='drivers/clk/clk.c' line='944' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_prepare'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='944' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_unprepare' mangled-name='clk_unprepare' filepath='drivers/clk/clk.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unprepare'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='863' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_set_rate' mangled-name='clk_set_rate' filepath='drivers/clk/clk.c' line='2283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_set_rate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='2283' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk.c' line='2283' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_get_by_name' mangled-name='of_clk_get_by_name' filepath='drivers/clk/clk.c' line='4741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_by_name'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4741' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/clk/clk.c' line='4741' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_src_simple_get' mangled-name='of_clk_src_simple_get' filepath='drivers/clk/clk.c' line='4344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_src_simple_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4344' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4345' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_src_onecell_get' mangled-name='of_clk_src_onecell_get' filepath='drivers/clk/clk.c' line='4357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_src_onecell_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4357' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4357' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_simple_get' mangled-name='of_clk_hw_simple_get' filepath='drivers/clk/clk.c' line='4351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_simple_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4351' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4351' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_register' mangled-name='of_clk_hw_register' filepath='drivers/clk/clk.c' line='3904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_register'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/clk/clk.c' line='3904' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3904' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_get_parent_name' mangled-name='of_clk_get_parent_name' filepath='drivers/clk/clk.c' line='4768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_parent_name'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4768' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/clk/clk.c' line='4768' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='of_clk_hw_onecell_get' mangled-name='of_clk_hw_onecell_get' filepath='drivers/clk/clk.c' line='4372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_hw_onecell_get'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4372' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4372' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='of_clk_get_parent_count' mangled-name='of_clk_get_parent_count' filepath='drivers/clk/clk.c' line='4756' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_parent_count'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4756' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_clk_get_from_provider' mangled-name='of_clk_get_from_provider' filepath='drivers/clk/clk.c' line='4692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get_from_provider'>
+        <parameter type-id='51a94113' name='clkspec' filepath='drivers/clk/clk.c' line='4692' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_get' mangled-name='of_clk_get' filepath='drivers/clk/clk.c' line='4726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_get'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4726' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/clk/clk.c' line='4726' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='of_clk_del_provider' mangled-name='of_clk_del_provider' filepath='drivers/clk/clk.c' line='4530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_del_provider'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4530' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_clk_add_provider' mangled-name='of_clk_add_provider' filepath='drivers/clk/clk.c' line='4394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_add_provider'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4394' column='1'/>
+        <parameter type-id='f1c652ac' name='clk_src_get' filepath='drivers/clk/clk.c' line='4395' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4397' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_clk_add_hw_provider' mangled-name='of_clk_add_hw_provider' filepath='drivers/clk/clk.c' line='4431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_clk_add_hw_provider'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clk/clk.c' line='4431' column='1'/>
+        <parameter type-id='a5186342' name='get' filepath='drivers/clk/clk.c' line='4432' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_of_clk_add_hw_provider' mangled-name='devm_of_clk_add_hw_provider' filepath='drivers/clk/clk.c' line='4500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_clk_add_hw_provider'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='4500' column='1'/>
+        <parameter type-id='a5186342' name='get' filepath='drivers/clk/clk.c' line='4501' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/clk/clk.c' line='4503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_clk_register' mangled-name='devm_clk_register' filepath='drivers/clk/clk.c' line='4072' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='4072' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='4072' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_unregister' mangled-name='clk_unregister' filepath='drivers/clk/clk.c' line='3989' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_unregister'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='3989' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_clk_hw_register' mangled-name='devm_clk_hw_register' filepath='drivers/clk/clk.c' line='4102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_clk_hw_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='4102' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='4102' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_sync_state' mangled-name='clk_sync_state' filepath='drivers/clk/clk.c' line='1333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_sync_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='1333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_set_parent' mangled-name='clk_set_parent' filepath='drivers/clk/clk.c' line='2627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_set_parent'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='2627' column='1'/>
+        <parameter type-id='7d0bc0eb' name='parent' filepath='drivers/clk/clk.c' line='2627' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_round_rate' mangled-name='clk_round_rate' filepath='drivers/clk/clk.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_round_rate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='1470' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk.c' line='1470' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='clk_register' mangled-name='clk_register' filepath='drivers/clk/clk.c' line='3870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='3870' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3870' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_notifier_register' mangled-name='clk_notifier_register' filepath='drivers/clk/clk.c' line='4232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_notifier_register'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='4232' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/clk/clk.c' line='4232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_hw_unregister' mangled-name='clk_hw_unregister' filepath='drivers/clk/clk.c' line='4046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_unregister'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='4046' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_set_rate_range' mangled-name='clk_hw_set_rate_range' filepath='drivers/clk/clk.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_set_rate_range'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='642' column='1'/>
+        <parameter type-id='7359adad' name='min_rate' filepath='drivers/clk/clk.c' line='642' column='1'/>
+        <parameter type-id='7359adad' name='max_rate' filepath='drivers/clk/clk.c' line='643' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_hw_round_rate' mangled-name='clk_hw_round_rate' filepath='drivers/clk/clk.c' line='1445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_round_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='1445' column='1'/>
+        <parameter type-id='7359adad' name='rate' filepath='drivers/clk/clk.c' line='1445' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_hw_register' mangled-name='clk_hw_register' filepath='drivers/clk/clk.c' line='3886' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clk.c' line='3886' column='1'/>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='3886' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_hw_is_prepared' mangled-name='clk_hw_is_prepared' filepath='drivers/clk/clk.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_is_prepared'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='517' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='clk_hw_is_enabled' mangled-name='clk_hw_is_enabled' filepath='drivers/clk/clk.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_is_enabled'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='529' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_rate' mangled-name='clk_hw_get_rate' filepath='drivers/clk/clk.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_rate'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='491' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_parent_by_index' mangled-name='clk_hw_get_parent_by_index' filepath='drivers/clk/clk.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_parent_by_index'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='460' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/clk/clk.c' line='460' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_parent' mangled-name='clk_hw_get_parent' filepath='drivers/clk/clk.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_parent'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='290' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_num_parents' mangled-name='clk_hw_get_num_parents' filepath='drivers/clk/clk.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_num_parents'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='284' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_name' mangled-name='clk_hw_get_name' filepath='drivers/clk/clk.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_name'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='272' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='clk_hw_get_flags' mangled-name='clk_hw_get_flags' filepath='drivers/clk/clk.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_hw_get_flags'>
+        <parameter type-id='9e6d4b4e' name='hw' filepath='drivers/clk/clk.c' line='511' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_get_rate' mangled-name='clk_get_rate' filepath='drivers/clk/clk.c' line='1671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_rate'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='1671' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='clk_get_parent' mangled-name='clk_get_parent' filepath='drivers/clk/clk.c' line='2463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_parent'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='2463' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_enable' mangled-name='clk_enable' filepath='drivers/clk/clk.c' line='1166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_enable'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='1166' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_disable' mangled-name='clk_disable' filepath='drivers/clk/clk.c' line='1001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_disable'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='1001' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__clk_mux_determine_rate_closest' mangled-name='__clk_mux_determine_rate_closest' filepath='drivers/clk/clk.c' line='668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_mux_determine_rate_closest'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='668' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='669' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__clk_mux_determine_rate' mangled-name='__clk_mux_determine_rate' filepath='drivers/clk/clk.c' line='661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_mux_determine_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='661' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='662' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__clk_is_enabled' mangled-name='__clk_is_enabled' filepath='drivers/clk/clk.c' line='535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_is_enabled'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='535' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__clk_get_name' mangled-name='__clk_get_name' filepath='drivers/clk/clk.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_get_name'>
+        <parameter type-id='10f66866' name='clk' filepath='drivers/clk/clk.c' line='266' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='__clk_get_hw' mangled-name='__clk_get_hw' filepath='drivers/clk/clk.c' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_get_hw'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clk.c' line='278' column='1'/>
+        <return type-id='3aaeef89'/>
+      </function-decl>
+      <function-decl name='__clk_determine_rate' mangled-name='__clk_determine_rate' filepath='drivers/clk/clk.c' line='1434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clk_determine_rate'>
+        <parameter type-id='3aaeef89' name='hw' filepath='drivers/clk/clk.c' line='1434' column='1'/>
+        <parameter type-id='23a0ad0a' name='req' filepath='drivers/clk/clk.c' line='1434' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='824a7fd2'>
+        <parameter type-id='51a94113' name='clkspec'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='7d0bc0eb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4cb80c8'>
+        <parameter type-id='51a94113' name='clkspec'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='3aaeef89'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5a529af'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73b85a24'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='f726dab6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f867473c'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='23a0ad0a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc053d58'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8de1c3db'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e5f4f0f'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59f7b4bb'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fb4efa5'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d49e6088'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a38a8f0'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30913582'>
+        <parameter type-id='3aaeef89'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c1f247e'>
+        <parameter type-id='3aaeef89'/>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clk/clkdev.c' language='LANG_C89'>
+      <function-decl name='clk_register_clkdev' mangled-name='clk_register_clkdev' filepath='drivers/clk/clkdev.c' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_register_clkdev'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clkdev.c' line='341' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clkdev.c' line='341' column='1'/>
+        <parameter type-id='80f4b756' name='dev_id' filepath='drivers/clk/clkdev.c' line='342' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='clk_put' mangled-name='clk_put' filepath='drivers/clk/clkdev.c' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_put'>
+        <parameter type-id='7d0bc0eb' name='clk' filepath='drivers/clk/clkdev.c' line='115' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clk_get_sys' mangled-name='clk_get_sys' filepath='drivers/clk/clkdev.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get_sys'>
+        <parameter type-id='80f4b756' name='dev_id' filepath='drivers/clk/clkdev.c' line='94' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clkdev.c' line='94' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+      <function-decl name='clk_get' mangled-name='clk_get' filepath='drivers/clk/clkdev.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/clk/clkdev.c' line='100' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/clk/clkdev.c' line='100' column='1'/>
+        <return type-id='7d0bc0eb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clocksource/arm_arch_timer.c' language='LANG_C89'>
+      <class-decl name='arch_timer_erratum_workaround' size-in-bits='640' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='51' column='1' id='a3e4c395'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='2377364c' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='80f4b756' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_cntp_tval_el0' type-id='d91eb3a5' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_cntv_tval_el0' type-id='d91eb3a5' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='read_cntpct_el0' type-id='0e70db3e' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_cntvct_el0' type-id='0e70db3e' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_next_event_phys' type-id='1bff60d1' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_next_event_virt' type-id='1bff60d1' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable_compat_vdso' type-id='b50a4934' visibility='default' filepath='arch/arm64/include/asm/arch_timer.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='arch_timer_erratum_match_type' filepath='arch/arm64/include/asm/arch_timer.h' line='43' column='1' id='2377364c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ate_match_dt' value='0'/>
+        <enumerator name='ate_match_local_cap_id' value='1'/>
+        <enumerator name='ate_match_acpi_oem_info' value='2'/>
+      </enum-decl>
+      <qualified-type-def type-id='a3e4c395' const='yes' id='8bd3aaa6'/>
+      <pointer-type-def type-id='8bd3aaa6' size-in-bits='64' id='aa357a64'/>
+      <pointer-type-def type-id='428b7011' size-in-bits='64' id='d91eb3a5'/>
+      <var-decl name='arch_timer_read_counter' type-id='0e70db3e' mangled-name='arch_timer_read_counter' visibility='default' filepath='drivers/clocksource/arm_arch_timer.c' line='175' column='1' elf-symbol-id='arch_timer_read_counter'/>
+      <var-decl name='timer_unstable_counter_workaround' type-id='aa357a64' mangled-name='timer_unstable_counter_workaround' visibility='default' filepath='drivers/clocksource/arm_arch_timer.c' line='379' column='1' elf-symbol-id='timer_unstable_counter_workaround'/>
+      <function-type size-in-bits='64' id='428b7011'>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <pointer-type-def type-id='242d8ed5' size-in-bits='64' id='1bff60d1'/>
+      <function-type size-in-bits='64' id='242d8ed5'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/clocksource/timer-of.c' language='LANG_C89'>
+      <class-decl name='timer_of' size-in-bits='3584' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='34' column='1' id='ebdc8782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='drivers/clocksource/timer-of.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/clocksource/timer-of.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clkevt' type-id='13964735' visibility='default' filepath='drivers/clocksource/timer-of.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='of_base' type-id='bd48ef82' visibility='default' filepath='drivers/clocksource/timer-of.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='of_irq' type-id='dbd50a93' visibility='default' filepath='drivers/clocksource/timer-of.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='of_clk' type-id='63c32039' visibility='default' filepath='drivers/clocksource/timer-of.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='drivers/clocksource/timer-of.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_timer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='20' column='1' id='bd48ef82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='drivers/clocksource/timer-of.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_timer_irq' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='11' column='1' id='dbd50a93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='drivers/clocksource/timer-of.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='of_timer_clk' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/clocksource/timer-of.h' line='26' column='1' id='63c32039'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='drivers/clocksource/timer-of.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/clocksource/timer-of.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/clocksource/timer-of.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='7359adad' visibility='default' filepath='drivers/clocksource/timer-of.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ebdc8782' size-in-bits='64' id='b2168730'/>
+      <function-decl name='timer_of_init' mangled-name='timer_of_init' filepath='drivers/clocksource/timer-of.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timer_of_init'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/clocksource/timer-of.c' line='168' column='1'/>
+        <parameter type-id='b2168730' name='to' filepath='drivers/clocksource/timer-of.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='clock_event_device' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/clockchips.h' line='100' column='1' id='13964735'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_handler' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_next_event' type-id='1bff60d1' visibility='default' filepath='include/linux/clockchips.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_next_ktime' type-id='a4477ecf' visibility='default' filepath='include/linux/clockchips.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_event' type-id='fbc017ef' visibility='default' filepath='include/linux/clockchips.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state_use_accessors' type-id='3d8b7ef7' visibility='default' filepath='include/linux/clockchips.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/clockchips.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='retries' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_state_periodic' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_state_oneshot' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_state_oneshot_stopped' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_state_shutdown' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tick_resume' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='broadcast' type-id='5858ec15' visibility='default' filepath='include/linux/clockchips.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clockchips.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bound_on' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cpumask' type-id='5f8a1ac4' visibility='default' filepath='include/linux/clockchips.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clockchips.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clockchips.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_handler_t' type-id='3fefe9b7' filepath='include/linux/interrupt.h' line='92' column='1' id='29591c9a'/>
+      <enum-decl name='clock_event_state' filepath='include/linux/clockchips.h' line='35' column='1' id='3d8b7ef7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CLOCK_EVT_STATE_DETACHED' value='0'/>
+        <enumerator name='CLOCK_EVT_STATE_SHUTDOWN' value='1'/>
+        <enumerator name='CLOCK_EVT_STATE_PERIODIC' value='2'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT' value='3'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT_STOPPED' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='c740a74f' size-in-bits='64' id='d6a989c3'/>
+      <pointer-type-def type-id='632cd7c3' size-in-bits='64' id='a4477ecf'/>
+      <pointer-type-def type-id='19f1c953' size-in-bits='64' id='3fefe9b7'/>
+      <pointer-type-def type-id='64588176' size-in-bits='64' id='7106dab8'/>
+      <pointer-type-def type-id='075176f9' size-in-bits='64' id='5858ec15'/>
+      <function-type size-in-bits='64' id='c740a74f'>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='632cd7c3'>
+        <parameter type-id='fbc017ef'/>
+        <parameter type-id='aff725d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64588176'>
+        <parameter type-id='aff725d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='075176f9'>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='570cf6cf'/>
+      <class-decl name='cpufreq_policy' size-in-bits='5696' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='51' column='1' id='dbcf5bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='related_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='real_cpus' type-id='b16b461b' visibility='default' filepath='include/linux/cpufreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared_type' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/cpufreq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='cur' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restore_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='suspend_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='last_policy' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor' type-id='6925355c' visibility='default' filepath='include/linux/cpufreq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='last_governor' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update' type-id='ef9025d0' visibility='default' filepath='include/linux/cpufreq.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='constraints' type-id='7ca99f8c' visibility='default' filepath='include/linux/cpufreq.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='min_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_freq_req' type-id='3fdf7ca3' visibility='default' filepath='include/linux/cpufreq.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='freq_table_sorted' type-id='e29b2d58' visibility='default' filepath='include/linux/cpufreq.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='policy_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cpufreq.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='kobj_unregister' type-id='f9fef04f' visibility='default' filepath='include/linux/cpufreq.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/cpufreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fast_switch_possible' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4616'>
+          <var-decl name='fast_switch_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='transition_delay_us' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='dvfs_possible_from_any_cpu' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='cached_target_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='cached_resolved_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/cpufreq.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='transition_ongoing' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='transition_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/cpufreq.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='transition_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/cpufreq.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='transition_task' type-id='f23e2572' visibility='default' filepath='include/linux/cpufreq.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='stats' type-id='dfdc5e57' visibility='default' filepath='include/linux/cpufreq.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='cdev' type-id='2feec21f' visibility='default' filepath='include/linux/cpufreq.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='nb_min' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='nb_max' type-id='9b08f7cd' visibility='default' filepath='include/linux/cpufreq.h' line='148' 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='43' column='1' id='861f63ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_freq' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='transition_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='48' 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='543' column='1' id='c0525226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='limits' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='show_setspeed' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='store_setspeed' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dynamic_switching' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cpufreq.h' line='557' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cpufreq_table_sorting' filepath='include/linux/cpufreq.h' line='37' column='1' id='e29b2d58'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='cpufreq_freqs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='165' column='1' id='9906d117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='policy' type-id='343c3ae4' visibility='default' filepath='include/linux/cpufreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='old' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='new' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/cpufreq.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='289' column='1' id='9b8dc95a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpufreq.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/cpufreq.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/cpufreq.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='verify' type-id='0c33493b' visibility='default' filepath='include/linux/cpufreq.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setpolicy' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='target' type-id='8a854266' visibility='default' filepath='include/linux/cpufreq.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='target_index' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fast_switch' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resolve_freq' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_intermediate' type-id='b3e04083' visibility='default' filepath='include/linux/cpufreq.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target_intermediate' type-id='933bd18c' visibility='default' filepath='include/linux/cpufreq.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get' type-id='17a94daa' visibility='default' filepath='include/linux/cpufreq.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_limits' type-id='4a84e7de' visibility='default' filepath='include/linux/cpufreq.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bios_limit' type-id='2a05538a' visibility='default' filepath='include/linux/cpufreq.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='online' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='offline' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='exit' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='stop_cpu' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='suspend' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='resume' type-id='8dc588ee' visibility='default' filepath='include/linux/cpufreq.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ready' type-id='bbebd435' visibility='default' filepath='include/linux/cpufreq.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='attr' type-id='fc0762ab' visibility='default' filepath='include/linux/cpufreq.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='boost_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpufreq.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_boost' type-id='7f416e10' visibility='default' filepath='include/linux/cpufreq.h' line='365' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpufreq_policy_data' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='157' column='1' id='ffe5737b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpuinfo' type-id='861f63ae' visibility='default' filepath='include/linux/cpufreq.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='freq_table' type-id='3b8b42e1' visibility='default' filepath='include/linux/cpufreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_attr' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='258' column='1' id='9f2d4ea3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/cpufreq.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='7126cf8f' visibility='default' filepath='include/linux/cpufreq.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='880ef693' visibility='default' filepath='include/linux/cpufreq.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9b8dc95a' size-in-bits='64' id='eb90c228'/>
+      <pointer-type-def type-id='9906d117' size-in-bits='64' id='857d6f7f'/>
+      <pointer-type-def type-id='c0525226' size-in-bits='64' id='6925355c'/>
+      <pointer-type-def type-id='dbcf5bbe' size-in-bits='64' id='343c3ae4'/>
+      <pointer-type-def type-id='ffe5737b' size-in-bits='64' id='5aa4f86b'/>
+      <pointer-type-def type-id='570cf6cf' size-in-bits='64' id='dfdc5e57'/>
+      <pointer-type-def type-id='9f2d4ea3' size-in-bits='64' id='15e229a3'/>
+      <pointer-type-def type-id='15e229a3' size-in-bits='64' id='fc0762ab'/>
+      <pointer-type-def type-id='8393eddc' size-in-bits='64' id='8dc588ee'/>
+      <pointer-type-def type-id='144e93b2' size-in-bits='64' id='933bd18c'/>
+      <pointer-type-def type-id='88ffd624' size-in-bits='64' id='8a854266'/>
+      <pointer-type-def type-id='242fdc5f' size-in-bits='64' id='0c33493b'/>
+      <pointer-type-def type-id='1d2f7bf0' size-in-bits='64' id='2a05538a'/>
+      <pointer-type-def type-id='4292193b' size-in-bits='64' id='7126cf8f'/>
+      <pointer-type-def type-id='52126317' size-in-bits='64' id='880ef693'/>
+      <pointer-type-def type-id='c85f87a7' size-in-bits='64' id='b3e04083'/>
+      <pointer-type-def type-id='593ec809' size-in-bits='64' id='bbebd435'/>
+      <function-decl name='cpufreq_cpu_get' mangled-name='cpufreq_cpu_get' filepath='drivers/cpufreq/cpufreq.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_get'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='222' column='1'/>
+        <return type-id='343c3ae4'/>
+      </function-decl>
+      <function-decl name='cpufreq_register_governor' mangled-name='cpufreq_register_governor' filepath='drivers/cpufreq/cpufreq.c' line='2317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_governor'>
+        <parameter type-id='6925355c' name='governor' filepath='drivers/cpufreq/cpufreq.c' line='2317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpufreq_driver_target' mangled-name='__cpufreq_driver_target' filepath='drivers/cpufreq/cpufreq.c' line='2150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpufreq_driver_target'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='2150' column='1'/>
+        <parameter type-id='f0981eeb' name='target_freq' filepath='drivers/cpufreq/cpufreq.c' line='2151' column='1'/>
+        <parameter type-id='f0981eeb' name='relation' filepath='drivers/cpufreq/cpufreq.c' line='2152' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_driver_resolve_freq' mangled-name='cpufreq_driver_resolve_freq' filepath='drivers/cpufreq/cpufreq.c' line='539' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_driver_resolve_freq'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='539' column='1'/>
+        <parameter type-id='f0981eeb' name='target_freq' filepath='drivers/cpufreq/cpufreq.c' line='540' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpufreq_quick_get' mangled-name='cpufreq_quick_get' filepath='drivers/cpufreq/cpufreq.c' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_quick_get'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='1716' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='have_governor_per_policy' mangled-name='have_governor_per_policy' filepath='drivers/cpufreq/cpufreq.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='have_governor_per_policy'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='get_governor_parent_kobj' mangled-name='get_governor_parent_kobj' filepath='drivers/cpufreq/cpufreq.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_governor_parent_kobj'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='111' column='1'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+      <function-decl name='get_cpu_idle_time' mangled-name='get_cpu_idle_time' filepath='drivers/cpufreq/cpufreq.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_cpu_idle_time'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='142' column='1'/>
+        <parameter type-id='3df9fd28' name='wall' filepath='drivers/cpufreq/cpufreq.c' line='142' column='1'/>
+        <parameter type-id='95e97e5e' name='io_busy' filepath='drivers/cpufreq/cpufreq.c' line='142' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='cpufreq_update_policy' mangled-name='cpufreq_update_policy' filepath='drivers/cpufreq/cpufreq.c' line='2505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_update_policy'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='2505' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_freq_transition_begin' mangled-name='cpufreq_freq_transition_begin' filepath='drivers/cpufreq/cpufreq.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_freq_transition_begin'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='412' column='1'/>
+        <parameter type-id='857d6f7f' name='freqs' filepath='drivers/cpufreq/cpufreq.c' line='413' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_notifier' mangled-name='cpufreq_unregister_notifier' filepath='drivers/cpufreq/cpufreq.c' line='1994' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/cpufreq/cpufreq.c' line='1994' column='1'/>
+        <parameter type-id='f0981eeb' name='list' filepath='drivers/cpufreq/cpufreq.c' line='1994' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_governor' mangled-name='cpufreq_unregister_governor' filepath='drivers/cpufreq/cpufreq.c' line='2340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_governor'>
+        <parameter type-id='6925355c' name='governor' filepath='drivers/cpufreq/cpufreq.c' line='2340' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_unregister_driver' mangled-name='cpufreq_unregister_driver' filepath='drivers/cpufreq/cpufreq.c' line='2764' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_unregister_driver'>
+        <parameter type-id='eb90c228' name='driver' filepath='drivers/cpufreq/cpufreq.c' line='2764' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_freq_transition_end' mangled-name='cpufreq_freq_transition_end' filepath='drivers/cpufreq/cpufreq.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_freq_transition_end'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='446' column='1'/>
+        <parameter type-id='857d6f7f' name='freqs' filepath='drivers/cpufreq/cpufreq.c' line='447' column='1'/>
+        <parameter type-id='95e97e5e' name='transition_failed' filepath='drivers/cpufreq/cpufreq.c' line='447' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_register_notifier' mangled-name='cpufreq_register_notifier' filepath='drivers/cpufreq/cpufreq.c' line='1950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/cpufreq/cpufreq.c' line='1950' column='1'/>
+        <parameter type-id='f0981eeb' name='list' filepath='drivers/cpufreq/cpufreq.c' line='1950' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_register_driver' mangled-name='cpufreq_register_driver' filepath='drivers/cpufreq/cpufreq.c' line='2670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_register_driver'>
+        <parameter type-id='eb90c228' name='driver_data' filepath='drivers/cpufreq/cpufreq.c' line='2670' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_quick_get_max' mangled-name='cpufreq_quick_get_max' filepath='drivers/cpufreq/cpufreq.c' line='1748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_quick_get_max'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='1748' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpufreq_get_policy' mangled-name='cpufreq_get_policy' filepath='drivers/cpufreq/cpufreq.c' line='2379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_get_policy'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='2379' column='1'/>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='2379' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_generic_suspend' mangled-name='cpufreq_generic_suspend' filepath='drivers/cpufreq/cpufreq.c' line='1805' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_suspend'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='1805' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_generic_get' mangled-name='cpufreq_generic_get' filepath='drivers/cpufreq/cpufreq.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_get'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='197' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpufreq_enable_boost_support' mangled-name='cpufreq_enable_boost_support' filepath='drivers/cpufreq/cpufreq.c' line='2620' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_enable_boost_support'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_cpu_put' mangled-name='cpufreq_cpu_put' filepath='drivers/cpufreq/cpufreq.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_put'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_cpu_get_raw' mangled-name='cpufreq_cpu_get_raw' filepath='drivers/cpufreq/cpufreq.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_cpu_get_raw'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='drivers/cpufreq/cpufreq.c' line='189' column='1'/>
+        <return type-id='343c3ae4'/>
+      </function-decl>
+      <pointer-type-def type-id='f7f17df9' size-in-bits='64' id='3b8b42e1'/>
+      <pointer-type-def type-id='da4cc8f3' size-in-bits='64' id='3fdf7ca3'/>
+      <function-type size-in-bits='64' id='8393eddc'>
+        <parameter type-id='343c3ae4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='144e93b2'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88ffd624'>
+        <parameter type-id='343c3ae4' name='policy'/>
+        <parameter type-id='f0981eeb' name='target_freq'/>
+        <parameter type-id='f0981eeb' name='relation'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='242fdc5f'>
+        <parameter type-id='5aa4f86b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d2f7bf0'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4292193b'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52126317'>
+        <parameter type-id='343c3ae4'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c85f87a7'>
+        <parameter type-id='343c3ae4' name='policy'/>
+        <parameter type-id='f0981eeb' name='target_freq'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='593ec809'>
+        <parameter type-id='343c3ae4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='3ae87f87' size-in-bits='64' id='2feec21f'/>
+      <pointer-type-def type-id='e69c1394' size-in-bits='64' id='4a84e7de'/>
+      <class-decl name='cpufreq_frequency_table' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='619' column='1' id='f7f17df9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver_data' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_cooling_device' size-in-bits='8576' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='134' column='1' id='3ae87f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='stats' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ops' type-id='6f4dc085' visibility='default' filepath='include/linux/thermal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='updated' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e542e4ad' size-in-bits='64' id='6f4dc085'/>
+      <qualified-type-def type-id='ff1a03f4' const='yes' id='e542e4ad'/>
+      <class-decl name='thermal_cooling_device_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='120' column='1' id='ff1a03f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_max_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_cur_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_cur_state' type-id='4b4c62ab' visibility='default' filepath='include/linux/thermal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_requested_power' type-id='6f31af4c' visibility='default' filepath='include/linux/thermal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state2power' type-id='4692f31c' visibility='default' filepath='include/linux/thermal.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='power2state' type-id='c1eac593' visibility='default' filepath='include/linux/thermal.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='51dca1f7' size-in-bits='64' id='c1eac593'/>
+      <pointer-type-def type-id='9762f152' size-in-bits='64' id='6f31af4c'/>
+      <pointer-type-def type-id='35aa2942' size-in-bits='64' id='4692f31c'/>
+      <pointer-type-def type-id='e7176377' size-in-bits='64' id='4b4c62ab'/>
+      <pointer-type-def type-id='7fd43619' size-in-bits='64' id='ff2d9ea5'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/cpufreq/cpufreq_governor.c' language='LANG_C89'>
+      <class-decl name='dbs_data' size-in-bits='1472' is-struct='yes' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='38' column='1' id='94ac9155'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr_set' type-id='32d20c8c' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tuners' type-id='eaa32e2f' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ignore_nice_load' type-id='f0981eeb' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sampling_rate' type-id='f0981eeb' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sampling_down_factor' type-id='f0981eeb' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='up_threshold' type-id='f0981eeb' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='io_is_busy' type-id='f0981eeb' visibility='default' filepath='drivers/cpufreq/cpufreq_governor.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gov_attr_set' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='587' column='1' id='32d20c8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cpufreq.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='policy_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpufreq.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_lock' type-id='925167dc' visibility='default' filepath='include/linux/cpufreq.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usage_count' type-id='95e97e5e' visibility='default' filepath='include/linux/cpufreq.h' line='591' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='94ac9155' size-in-bits='64' id='280461d5'/>
+      <pointer-type-def type-id='32d20c8c' size-in-bits='64' id='902fed1a'/>
+      <function-decl name='dbs_update' mangled-name='dbs_update' filepath='drivers/cpufreq/cpufreq_governor.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dbs_update'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='114' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='gov_update_cpu_data' mangled-name='gov_update_cpu_data' filepath='drivers/cpufreq/cpufreq_governor.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_update_cpu_data'>
+        <parameter type-id='280461d5' name='dbs_data' filepath='drivers/cpufreq/cpufreq_governor.c' line='95' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='store_sampling_rate' mangled-name='store_sampling_rate' filepath='drivers/cpufreq/cpufreq_governor.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='store_sampling_rate'>
+        <parameter type-id='902fed1a' name='attr_set' filepath='drivers/cpufreq/cpufreq_governor.c' line='44' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/cpufreq/cpufreq_governor.c' line='44' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/cpufreq/cpufreq_governor.c' line='45' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='cpufreq_dbs_governor_stop' mangled-name='cpufreq_dbs_governor_stop' filepath='drivers/cpufreq/cpufreq_governor.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_dbs_governor_stop'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='543' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_dbs_governor_start' mangled-name='cpufreq_dbs_governor_start' filepath='drivers/cpufreq/cpufreq_governor.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_dbs_governor_start'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='505' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_dbs_governor_limits' mangled-name='cpufreq_dbs_governor_limits' filepath='drivers/cpufreq/cpufreq_governor.c' line='555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_dbs_governor_limits'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='555' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_dbs_governor_init' mangled-name='cpufreq_dbs_governor_init' filepath='drivers/cpufreq/cpufreq_governor.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_dbs_governor_init'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='391' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_dbs_governor_exit' mangled-name='cpufreq_dbs_governor_exit' filepath='drivers/cpufreq/cpufreq_governor.c' line='477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_dbs_governor_exit'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/cpufreq_governor.c' line='477' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/cpufreq/cpufreq_governor_attr_set.c' language='LANG_C89'>
+      <var-decl name='governor_sysfs_ops' type-id='0f840455' mangled-name='governor_sysfs_ops' visibility='default' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='42' column='1' elf-symbol-id='governor_sysfs_ops'/>
+      <function-decl name='gov_attr_set_init' mangled-name='gov_attr_set_init' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_init'>
+        <parameter type-id='902fed1a' name='attr_set' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='48' column='1'/>
+        <parameter type-id='e84b031a' name='list_node' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='48' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gov_attr_set_get' mangled-name='gov_attr_set_get' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_get'>
+        <parameter type-id='902fed1a' name='attr_set' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='57' column='1'/>
+        <parameter type-id='e84b031a' name='list_node' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gov_attr_set_put' mangled-name='gov_attr_set_put' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gov_attr_set_put'>
+        <parameter type-id='902fed1a' name='attr_set' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='66' column='1'/>
+        <parameter type-id='e84b031a' name='list_node' filepath='drivers/cpufreq/cpufreq_governor_attr_set.c' line='66' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/cpufreq/freq_table.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='15e229a3' size-in-bits='128' id='82486e89'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <var-decl name='cpufreq_freq_attr_scaling_available_freqs' type-id='9f2d4ea3' mangled-name='cpufreq_freq_attr_scaling_available_freqs' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='272' column='1' elf-symbol-id='cpufreq_freq_attr_scaling_available_freqs'/>
+      <var-decl name='cpufreq_freq_attr_scaling_boost_freqs' type-id='9f2d4ea3' mangled-name='cpufreq_freq_attr_scaling_boost_freqs' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='284' column='1' elf-symbol-id='cpufreq_freq_attr_scaling_boost_freqs'/>
+      <var-decl name='cpufreq_generic_attr' type-id='82486e89' mangled-name='cpufreq_generic_attr' visibility='default' filepath='drivers/cpufreq/freq_table.c' line='287' column='1' elf-symbol-id='cpufreq_generic_attr'/>
+      <function-decl name='cpufreq_table_index_unsorted' mangled-name='cpufreq_table_index_unsorted' filepath='drivers/cpufreq/freq_table.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_table_index_unsorted'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/freq_table.c' line='112' column='1'/>
+        <parameter type-id='f0981eeb' name='target_freq' filepath='drivers/cpufreq/freq_table.c' line='113' column='1'/>
+        <parameter type-id='f0981eeb' name='relation' filepath='drivers/cpufreq/freq_table.c' line='114' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='policy_has_boost_freq' mangled-name='policy_has_boost_freq' filepath='drivers/cpufreq/freq_table.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='policy_has_boost_freq'>
+        <parameter type-id='343c3ae4' name='policy' filepath='drivers/cpufreq/freq_table.c' line='17' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cpufreq_generic_frequency_table_verify' mangled-name='cpufreq_generic_frequency_table_verify' filepath='drivers/cpufreq/freq_table.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_generic_frequency_table_verify'>
+        <parameter type-id='5aa4f86b' name='policy' filepath='drivers/cpufreq/freq_table.c' line='103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpufreq_frequency_table_verify' mangled-name='cpufreq_frequency_table_verify' filepath='drivers/cpufreq/freq_table.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_frequency_table_verify'>
+        <parameter type-id='5aa4f86b' name='policy' filepath='drivers/cpufreq/freq_table.c' line='63' column='1'/>
+        <parameter type-id='3b8b42e1' name='table' filepath='drivers/cpufreq/freq_table.c' line='64' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/devfreq/devfreq-event.c' language='LANG_C89'>
+      <class-decl name='devfreq_event_dev' size-in-bits='8000' is-struct='yes' visibility='default' filepath='include/linux/devfreq-event.h' line='26' column='1' id='112f2691'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/devfreq-event.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/devfreq-event.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/devfreq-event.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='enable_count' type-id='19c2251e' visibility='default' filepath='include/linux/devfreq-event.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='desc' type-id='dcea1110' visibility='default' filepath='include/linux/devfreq-event.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_event_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq-event.h' line='92' column='1' id='ef40f18b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/devfreq-event.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event_type' type-id='19c2251e' visibility='default' filepath='include/linux/devfreq-event.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq-event.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='e9774929' visibility='default' filepath='include/linux/devfreq-event.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_event_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/devfreq-event.h' line='65' column='1' id='3ea0d50a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='17b93571' visibility='default' filepath='include/linux/devfreq-event.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='17b93571' visibility='default' filepath='include/linux/devfreq-event.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reset' type-id='17b93571' visibility='default' filepath='include/linux/devfreq-event.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_event' type-id='17b93571' visibility='default' filepath='include/linux/devfreq-event.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_event' type-id='ae6a6d9a' visibility='default' filepath='include/linux/devfreq-event.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_event_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/devfreq-event.h' line='47' column='1' id='64705f1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load_count' type-id='7359adad' visibility='default' filepath='include/linux/devfreq-event.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='total_count' type-id='7359adad' visibility='default' filepath='include/linux/devfreq-event.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ef40f18b' const='yes' id='a400949a'/>
+      <pointer-type-def type-id='a400949a' size-in-bits='64' id='dcea1110'/>
+      <qualified-type-def type-id='3ea0d50a' const='yes' id='1ca42ff9'/>
+      <pointer-type-def type-id='1ca42ff9' size-in-bits='64' id='e9774929'/>
+      <pointer-type-def type-id='64705f1a' size-in-bits='64' id='d6184118'/>
+      <pointer-type-def type-id='112f2691' size-in-bits='64' id='88146159'/>
+      <pointer-type-def type-id='cfa1a37d' size-in-bits='64' id='17b93571'/>
+      <pointer-type-def type-id='105b52f0' size-in-bits='64' id='ae6a6d9a'/>
+      <function-decl name='devfreq_event_get_event' mangled-name='devfreq_event_get_event' filepath='drivers/devfreq/devfreq-event.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_event_get_event'>
+        <parameter type-id='88146159' name='edev' filepath='drivers/devfreq/devfreq-event.c' line='160' column='1'/>
+        <parameter type-id='d6184118' name='edata' filepath='drivers/devfreq/devfreq-event.c' line='161' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cfa1a37d'>
+        <parameter type-id='88146159'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='105b52f0'>
+        <parameter type-id='88146159' name='edev'/>
+        <parameter type-id='d6184118' name='edata'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/devfreq/devfreq.c' language='LANG_C89'>
+      <pointer-type-def type-id='6d54709d' size-in-bits='64' id='247297cd'/>
+      <pointer-type-def type-id='5e5241e2' size-in-bits='64' id='10b92604'/>
+      <pointer-type-def type-id='11581816' size-in-bits='64' id='b2610cc8'/>
+      <function-decl name='devfreq_add_device' mangled-name='devfreq_add_device' filepath='drivers/devfreq/devfreq.c' line='609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_add_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='609' column='1'/>
+        <parameter type-id='cba10b6e' name='profile' filepath='drivers/devfreq/devfreq.c' line='610' column='1'/>
+        <parameter type-id='80f4b756' name='governor_name' filepath='drivers/devfreq/devfreq.c' line='611' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/devfreq/devfreq.c' line='612' column='1'/>
+        <return type-id='f66fa7f4'/>
+      </function-decl>
+      <function-decl name='devfreq_suspend_device' mangled-name='devfreq_suspend_device' filepath='drivers/devfreq/devfreq.c' line='887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_suspend_device'>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='887' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_resume_device' mangled-name='devfreq_resume_device' filepath='drivers/devfreq/devfreq.c' line='924' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_resume_device'>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='924' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='update_devfreq' mangled-name='update_devfreq' filepath='drivers/devfreq/devfreq.c' line='336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='update_devfreq'>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='336' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_devfreq_remove_device' mangled-name='devm_devfreq_remove_device' filepath='drivers/devfreq/devfreq.c' line='872' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_remove_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='872' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='872' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_devfreq_register_opp_notifier' mangled-name='devm_devfreq_register_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1568' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_register_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1568' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1569' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_devfreq_add_device' mangled-name='devm_devfreq_add_device' filepath='drivers/devfreq/devfreq.c' line='798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_devfreq_add_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='798' column='1'/>
+        <parameter type-id='cba10b6e' name='profile' filepath='drivers/devfreq/devfreq.c' line='799' column='1'/>
+        <parameter type-id='80f4b756' name='governor_name' filepath='drivers/devfreq/devfreq.c' line='800' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/devfreq/devfreq.c' line='801' column='1'/>
+        <return type-id='f66fa7f4'/>
+      </function-decl>
+      <function-decl name='devfreq_update_status' mangled-name='devfreq_update_status' filepath='drivers/devfreq/devfreq.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_update_status'>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='158' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/devfreq/devfreq.c' line='158' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_unregister_opp_notifier' mangled-name='devfreq_unregister_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_unregister_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1551' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_remove_governor' mangled-name='devfreq_remove_governor' filepath='drivers/devfreq/devfreq.c' line='1066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_remove_governor'>
+        <parameter type-id='247297cd' name='governor' filepath='drivers/devfreq/devfreq.c' line='1066' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_remove_device' mangled-name='devfreq_remove_device' filepath='drivers/devfreq/devfreq.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_remove_device'>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='757' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_register_opp_notifier' mangled-name='devfreq_register_opp_notifier' filepath='drivers/devfreq/devfreq.c' line='1535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_register_opp_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1535' column='1'/>
+        <parameter type-id='f66fa7f4' name='devfreq' filepath='drivers/devfreq/devfreq.c' line='1535' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devfreq_recommended_opp' mangled-name='devfreq_recommended_opp' filepath='drivers/devfreq/devfreq.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_recommended_opp'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/devfreq/devfreq.c' line='1502' column='1'/>
+        <parameter type-id='1d2c2b85' name='freq' filepath='drivers/devfreq/devfreq.c' line='1503' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/devfreq/devfreq.c' line='1504' column='1'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='devfreq_add_governor' mangled-name='devfreq_add_governor' filepath='drivers/devfreq/devfreq.c' line='1001' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_add_governor'>
+        <parameter type-id='247297cd' name='governor' filepath='drivers/devfreq/devfreq.c' line='1001' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='devfreq_governor' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/devfreq/governor.h' line='47' column='1' id='6d54709d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/devfreq/governor.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='drivers/devfreq/governor.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='immutable' type-id='20f5f452' visibility='default' filepath='drivers/devfreq/governor.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_target_freq' type-id='b2610cc8' visibility='default' filepath='drivers/devfreq/governor.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='event_handler' type-id='10b92604' visibility='default' filepath='drivers/devfreq/governor.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f80c018e' size-in-bits='64' id='f66fa7f4'/>
+      <pointer-type-def type-id='c9196d18' size-in-bits='64' id='cba10b6e'/>
+      <function-type size-in-bits='64' id='5e5241e2'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11581816'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <class-decl name='devfreq' size-in-bits='16000' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='148' column='1' id='f80c018e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/devfreq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/devfreq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/devfreq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='profile' type-id='cba10b6e' visibility='default' filepath='include/linux/devfreq.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='governor' type-id='f627870a' visibility='default' filepath='include/linux/devfreq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='governor_name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/devfreq.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/devfreq.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/devfreq.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='previous_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='last_status' type-id='49266711' visibility='default' filepath='include/linux/devfreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='scaling_min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='scaling_max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='stop_polling' type-id='b50a4934' visibility='default' filepath='include/linux/devfreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='suspend_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='resume_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='suspend_count' type-id='49178f86' visibility='default' filepath='include/linux/devfreq.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10272'>
+          <var-decl name='total_trans' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='trans_table' type-id='807869d3' visibility='default' filepath='include/linux/devfreq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='time_in_state' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='last_stat_updated' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='transition_notifier_list' type-id='ffc4a47a' visibility='default' filepath='include/linux/devfreq.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_profile' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='95' column='1' id='c9196d18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initial_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polling_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target' type-id='70283254' visibility='default' filepath='include/linux/devfreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_dev_status' type-id='676fff47' visibility='default' filepath='include/linux/devfreq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_cur_freq' type-id='0e18d3fd' visibility='default' filepath='include/linux/devfreq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='dd787f72' visibility='default' filepath='include/linux/devfreq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='freq_table' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_status' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='51' column='1' id='49266711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='busy_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_frequency' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_notifier_head' size-in-bits='5504' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='74' column='1' id='ffc4a47a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/notifier.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcu' type-id='e4a7867c' visibility='default' filepath='include/linux/notifier.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e5e56b24' size-in-bits='64' id='f627870a'/>
+      <pointer-type-def type-id='2873dcbb' size-in-bits='64' id='676fff47'/>
+      <pointer-type-def type-id='4e3cc2a9' size-in-bits='64' id='0e18d3fd'/>
+      <pointer-type-def type-id='6788fb9a' size-in-bits='64' id='70283254'/>
+      <qualified-type-def type-id='6d54709d' const='yes' id='e5e56b24'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/dma-buf.c' language='LANG_C89'>
+      <class-decl name='dma_buf_export_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='477' column='1' id='4da0249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dma-buf.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-buf.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/linux/dma-buf.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='487' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4da0249b' const='yes' id='27b6d100'/>
+      <pointer-type-def type-id='27b6d100' size-in-bits='64' id='aecb451e'/>
+      <function-decl name='dma_buf_export' mangled-name='dma_buf_export' filepath='drivers/dma-buf/dma-buf.c' line='525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_export'>
+        <parameter type-id='aecb451e' name='exp_info' filepath='drivers/dma-buf/dma-buf.c' line='525' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='dma_buf_detach' mangled-name='dma_buf_detach' filepath='drivers/dma-buf/dma-buf.c' line='744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_detach'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='744' column='1'/>
+        <parameter type-id='e68e04c1' name='attach' filepath='drivers/dma-buf/dma-buf.c' line='744' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_attach' mangled-name='dma_buf_attach' filepath='drivers/dma-buf/dma-buf.c' line='697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_attach'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='697' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/dma-buf/dma-buf.c' line='698' column='1'/>
+        <return type-id='e68e04c1'/>
+      </function-decl>
+      <function-decl name='dma_buf_vunmap' mangled-name='dma_buf_vunmap' filepath='drivers/dma-buf/dma-buf.c' line='1208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_vunmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1208' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/dma-buf/dma-buf.c' line='1208' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_vmap' mangled-name='dma_buf_vmap' filepath='drivers/dma-buf/dma-buf.c' line='1168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_vmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1168' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_buf_unmap_attachment' mangled-name='dma_buf_unmap_attachment' filepath='drivers/dma-buf/dma-buf.c' line='823' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_unmap_attachment'>
+        <parameter type-id='e68e04c1' name='attach' filepath='drivers/dma-buf/dma-buf.c' line='823' column='1'/>
+        <parameter type-id='4adb0e6a' name='sg_table' filepath='drivers/dma-buf/dma-buf.c' line='824' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='825' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_put' mangled-name='dma_buf_put' filepath='drivers/dma-buf/dma-buf.c' line='670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_put'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='670' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_mmap' mangled-name='dma_buf_mmap' filepath='drivers/dma-buf/dma-buf.c' line='1114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_mmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1114' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/dma-buf/dma-buf.c' line='1114' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='drivers/dma-buf/dma-buf.c' line='1115' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_map_attachment' mangled-name='dma_buf_map_attachment' filepath='drivers/dma-buf/dma-buf.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_map_attachment'>
+        <parameter type-id='e68e04c1' name='attach' filepath='drivers/dma-buf/dma-buf.c' line='778' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='779' column='1'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='dma_buf_kunmap' mangled-name='dma_buf_kunmap' filepath='drivers/dma-buf/dma-buf.c' line='1089' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_kunmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1089' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1089' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/dma-buf/dma-buf.c' line='1090' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_buf_kmap' mangled-name='dma_buf_kmap' filepath='drivers/dma-buf/dma-buf.c' line='1071' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_kmap'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1071' column='1'/>
+        <parameter type-id='7359adad' name='page_num' filepath='drivers/dma-buf/dma-buf.c' line='1071' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_buf_get_uuid' mangled-name='dma_buf_get_uuid' filepath='drivers/dma-buf/dma-buf.c' line='1241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get_uuid'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1241' column='1'/>
+        <parameter type-id='f1397309' name='uuid' filepath='drivers/dma-buf/dma-buf.c' line='1241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_get_flags' mangled-name='dma_buf_get_flags' filepath='drivers/dma-buf/dma-buf.c' line='1227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get_flags'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1227' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/dma-buf/dma-buf.c' line='1227' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_get' mangled-name='dma_buf_get' filepath='drivers/dma-buf/dma-buf.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_get'>
+        <parameter type-id='95e97e5e' name='fd' filepath='drivers/dma-buf/dma-buf.c' line='642' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='dma_buf_fd' mangled-name='dma_buf_fd' filepath='drivers/dma-buf/dma-buf.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_fd'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='617' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/dma-buf/dma-buf.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_end_cpu_access_partial' mangled-name='dma_buf_end_cpu_access_partial' filepath='drivers/dma-buf/dma-buf.c' line='1046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_end_cpu_access_partial'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1046' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1047' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='1048' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='1048' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_end_cpu_access' mangled-name='dma_buf_end_cpu_access' filepath='drivers/dma-buf/dma-buf.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_end_cpu_access'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='1032' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='1033' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_begin_cpu_access_partial' mangled-name='dma_buf_begin_cpu_access_partial' filepath='drivers/dma-buf/dma-buf.c' line='996' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_begin_cpu_access_partial'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='996' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='997' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/dma-buf/dma-buf.c' line='998' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/dma-buf/dma-buf.c' line='998' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_buf_begin_cpu_access' mangled-name='dma_buf_begin_cpu_access' filepath='drivers/dma-buf/dma-buf.c' line='974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_buf_begin_cpu_access'>
+        <parameter type-id='5e4f599b' name='dmabuf' filepath='drivers/dma-buf/dma-buf.c' line='974' column='1'/>
+        <parameter type-id='eea6b025' name='direction' filepath='drivers/dma-buf/dma-buf.c' line='975' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='38cc1773' size-in-bits='64' id='c248c11b'/>
+      <pointer-type-def type-id='c201baab' size-in-bits='64' id='5e4f599b'/>
+      <pointer-type-def type-id='f01bc099' size-in-bits='64' id='e68e04c1'/>
+      <pointer-type-def type-id='d06fbf66' size-in-bits='64' id='340cea9c'/>
+      <pointer-type-def type-id='ec55eb74' size-in-bits='64' id='f1397309'/>
+      <class-decl name='dma_buf' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='387' column='1' id='c201baab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/dma-buf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/dma-buf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vmapping_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap_ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-buf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dma-buf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/linux/dma-buf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='include/linux/dma-buf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cb_excl' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='cb_shared' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysfs_entry' type-id='bd60ed15' visibility='default' filepath='include/linux/dma-buf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attachment' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='444' column='1' id='f01bc099'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dma-buf.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/linux/dma-buf.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dir' type-id='eea6b025' visibility='default' filepath='include/linux/dma-buf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dma_map_attrs' type-id='7359adad' visibility='default' filepath='include/linux/dma-buf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sysfs_entry' type-id='39154bd3' visibility='default' filepath='include/linux/dma-buf.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='461' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='72' column='1' id='d06fbf66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='45793a97' visibility='default' filepath='include/linux/dma-resv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dma-resv.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_excl' type-id='28271da3' visibility='default' filepath='include/linux/dma-resv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence' type-id='ed300e23' visibility='default' filepath='include/linux/dma-resv.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3f8b3d98' const='yes' id='38cc1773'/>
+      <class-decl name='dma_buf_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='36' column='1' id='3f8b3d98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cache_sgt_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/dma-buf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach' type-id='b512ba7d' visibility='default' filepath='include/linux/dma-buf.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detach' type-id='f191792a' visibility='default' filepath='include/linux/dma-buf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_dma_buf' type-id='2d7508a9' visibility='default' filepath='include/linux/dma-buf.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_dma_buf' type-id='0b475e59' visibility='default' filepath='include/linux/dma-buf.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='4e7b299a' visibility='default' filepath='include/linux/dma-buf.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='begin_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='begin_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='end_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='end_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mmap' type-id='68074686' visibility='default' filepath='include/linux/dma-buf.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map' type-id='02838dc6' visibility='default' filepath='include/linux/dma-buf.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unmap' type-id='632039f8' visibility='default' filepath='include/linux/dma-buf.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vmap' type-id='a298286a' visibility='default' filepath='include/linux/dma-buf.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vunmap' type-id='eb050ad4' visibility='default' filepath='include/linux/dma-buf.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_uuid' type-id='24dc58c9' visibility='default' filepath='include/linux/dma-buf.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_flags' type-id='97a03e57' visibility='default' filepath='include/linux/dma-buf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='353' 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='406' column='1' id='d5acde18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb' type-id='54c5dd35' visibility='default' filepath='include/linux/dma-buf.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='03d48e96' visibility='default' filepath='include/linux/dma-buf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='8f254b08' visibility='default' filepath='include/linux/dma-buf.h' line='410' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='26832c63' size-in-bits='64' id='39154bd3'/>
+      <pointer-type-def type-id='36721cc5' size-in-bits='64' id='bd60ed15'/>
+      <pointer-type-def type-id='ce8c45a3' size-in-bits='64' id='28271da3'/>
+      <pointer-type-def type-id='7cc6fd83' size-in-bits='64' id='ed300e23'/>
+      <class-decl name='dma_buf_attach_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='454' column='1' id='26832c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='414' column='1' id='36721cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='65' column='1' id='ce8c45a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' visibility='default' filepath='include/linux/dma-fence.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='13d85783' visibility='default' filepath='include/linux/dma-fence.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9d063591' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='context' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seqno' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/dma-fence.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/dma-fence.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-fence.h' line='95' 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='116' column='1' id='54c5dd35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='9c175524' visibility='default' filepath='include/linux/dma-fence.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='59' column='1' id='7cc6fd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-resv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shared_count' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shared_max' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared' type-id='f5432a6f' visibility='default' filepath='include/linux/dma-resv.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9977c731' size-in-bits='64' id='b512ba7d'/>
+      <pointer-type-def type-id='88776799' size-in-bits='64' id='127a97dd'/>
+      <pointer-type-def type-id='c3e60881' size-in-bits='64' id='5299fb35'/>
+      <pointer-type-def type-id='8b9912bb' size-in-bits='64' id='97a03e57'/>
+      <pointer-type-def type-id='440843bd' size-in-bits='64' id='24dc58c9'/>
+      <pointer-type-def type-id='70e959e4' size-in-bits='64' id='68074686'/>
+      <pointer-type-def type-id='efdb04f5' size-in-bits='64' id='2d7508a9'/>
+      <typedef-decl name='__poll_t' type-id='f0981eeb' filepath='include/uapi/linux/types.h' line='52' column='1' id='8f254b08'/>
+      <pointer-type-def type-id='7908d890' size-in-bits='64' id='4e7b299a'/>
+      <pointer-type-def type-id='d299a9b0' size-in-bits='64' id='f191792a'/>
+      <pointer-type-def type-id='45d6b556' size-in-bits='64' id='632039f8'/>
+      <pointer-type-def type-id='9a321b4a' size-in-bits='64' id='eb050ad4'/>
+      <pointer-type-def type-id='7e5de8f5' size-in-bits='64' id='0b475e59'/>
+      <pointer-type-def type-id='a1b495b8' size-in-bits='64' id='a298286a'/>
+      <pointer-type-def type-id='ddfa4afc' size-in-bits='64' id='02838dc6'/>
+      <pointer-type-def type-id='ee0fc87b' size-in-bits='64' id='13d85783'/>
+      <array-type-def dimensions='1' type-id='28271da3' size-in-bits='infinite' id='f5432a6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <typedef-decl name='dma_fence_func_t' type-id='75d065d2' filepath='include/linux/dma-fence.h' line='105' column='1' id='9c175524'/>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1' id='9d063591'>
+        <data-member access='public'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='timestamp' type-id='fbc017ef' visibility='default' filepath='include/linux/dma-fence.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-fence.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='65d79a70' const='yes' id='ee0fc87b'/>
+      <pointer-type-def type-id='18c89148' size-in-bits='64' id='75d065d2'/>
+      <class-decl name='dma_fence_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='125' column='1' id='65d79a70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_64bit_seqno' type-id='b50a4934' visibility='default' filepath='include/linux/dma-fence.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_driver_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_timeline_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_signaling' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='signaled' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='c82424f9' visibility='default' filepath='include/linux/dma-fence.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release' type-id='90d4d75e' visibility='default' filepath='include/linux/dma-fence.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='timeline_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a62a5dcb' size-in-bits='64' id='0c4b82c7'/>
+      <pointer-type-def type-id='0c98f83d' size-in-bits='64' id='c82424f9'/>
+      <pointer-type-def type-id='8cdee791' size-in-bits='64' id='e33a30a5'/>
+      <pointer-type-def type-id='da94e28c' size-in-bits='64' id='90d4d75e'/>
+      <pointer-type-def type-id='9a809cc5' size-in-bits='64' id='0f859ff9'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/dma-fence-array.c' language='LANG_C89'>
+      <class-decl name='dma_fence_array' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/dma-fence-array.h' line='37' column='1' id='8d83bfc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='ce8c45a3' visibility='default' filepath='include/linux/dma-fence-array.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-fence-array.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='num_fences' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-fence-array.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_pending' type-id='49178f86' visibility='default' filepath='include/linux/dma-fence-array.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fences' type-id='be937eab' visibility='default' filepath='include/linux/dma-fence-array.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='work' type-id='9281c70f' visibility='default' filepath='include/linux/dma-fence-array.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='28271da3' size-in-bits='64' id='be937eab'/>
+      <pointer-type-def type-id='8d83bfc9' size-in-bits='64' id='34135071'/>
+      <var-decl name='dma_fence_array_ops' type-id='ee0fc87b' mangled-name='dma_fence_array_ops' visibility='default' filepath='drivers/dma-buf/dma-fence-array.c' line='122' column='1' elf-symbol-id='dma_fence_array_ops'/>
+      <function-decl name='dma_fence_match_context' mangled-name='dma_fence_match_context' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_match_context'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1'/>
+        <parameter type-id='91ce1af9' name='context' filepath='drivers/dma-buf/dma-fence-array.c' line='188' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='dma_fence_array_create' mangled-name='dma_fence_array_create' filepath='drivers/dma-buf/dma-fence-array.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_array_create'>
+        <parameter type-id='95e97e5e' name='num_fences' filepath='drivers/dma-buf/dma-fence-array.c' line='150' column='1'/>
+        <parameter type-id='be937eab' name='fences' filepath='drivers/dma-buf/dma-fence-array.c' line='151' column='1'/>
+        <parameter type-id='91ce1af9' name='context' filepath='drivers/dma-buf/dma-fence-array.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='seqno' filepath='drivers/dma-buf/dma-fence-array.c' line='152' column='1'/>
+        <parameter type-id='b50a4934' name='signal_on_any' filepath='drivers/dma-buf/dma-fence-array.c' line='153' column='1'/>
+        <return type-id='34135071'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/dma-fence.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_dma_fence_emit' type-id='4ca0c298' mangled-name='__tracepoint_dma_fence_emit' visibility='default' filepath='include/trace/events/dma_fence.h' line='37' column='1' elf-symbol-id='__tracepoint_dma_fence_emit'/>
+      <function-decl name='dma_fence_wait_timeout' mangled-name='dma_fence_wait_timeout' filepath='drivers/dma-buf/dma-fence.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_wait_timeout'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='204' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/dma-buf/dma-fence.c' line='204' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/dma-buf/dma-fence.c' line='204' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='dma_fence_release' mangled-name='dma_fence_release' filepath='drivers/dma-buf/dma-fence.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_release'>
+        <parameter type-id='aa29ecab' name='kref' filepath='drivers/dma-buf/dma-fence.c' line='228' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_signal' mangled-name='dma_fence_signal' filepath='drivers/dma-buf/dma-fence.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='169' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_init' mangled-name='dma_fence_init' filepath='drivers/dma-buf/dma-fence.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_init'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='638' column='1'/>
+        <parameter type-id='13d85783' name='ops' filepath='drivers/dma-buf/dma-fence.c' line='638' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='drivers/dma-buf/dma-fence.c' line='639' column='1'/>
+        <parameter type-id='91ce1af9' name='context' filepath='drivers/dma-buf/dma-fence.c' line='639' column='1'/>
+        <parameter type-id='91ce1af9' name='seqno' filepath='drivers/dma-buf/dma-fence.c' line='639' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_add_callback' mangled-name='dma_fence_add_callback' filepath='drivers/dma-buf/dma-fence.c' line='346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_add_callback'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='346' column='1'/>
+        <parameter type-id='a47516e5' name='cb' filepath='drivers/dma-buf/dma-fence.c' line='346' column='1'/>
+        <parameter type-id='9c175524' name='func' filepath='drivers/dma-buf/dma-fence.c' line='347' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_remove_callback' mangled-name='dma_fence_remove_callback' filepath='drivers/dma-buf/dma-fence.c' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_remove_callback'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='420' column='1'/>
+        <parameter type-id='a47516e5' name='cb' filepath='drivers/dma-buf/dma-fence.c' line='420' column='1'/>
+        <return type-id='b50a4934'/>
+      </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='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_enable_sw_signaling'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_default_wait' mangled-name='dma_fence_default_wait' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_default_wait'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/dma-buf/dma-fence.c' line='464' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='dma_fence_signal_locked' mangled-name='dma_fence_signal_locked' filepath='drivers/dma-buf/dma-fence.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_signal_locked'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='129' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_get_status' mangled-name='dma_fence_get_status' filepath='drivers/dma-buf/dma-fence.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_get_status'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='388' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_fence_free' mangled-name='dma_fence_free' filepath='drivers/dma-buf/dma-fence.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_free'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-fence.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_fence_context_alloc' mangled-name='dma_fence_context_alloc' filepath='drivers/dma-buf/dma-fence.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_fence_context_alloc'>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/dma-buf/dma-fence.c' line='106' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <pointer-type-def type-id='54c5dd35' size-in-bits='64' id='a47516e5'/>
+      <pointer-type-def type-id='400fb07b' size-in-bits='64' id='aa29ecab'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/dma-heap.c' language='LANG_C89'>
+      <class-decl name='dma_heap' size-in-bits='1600' is-struct='yes' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='37' column='1' id='060e2e70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cabcb658' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='heap_devt' type-id='8504f260' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='heap_cdev' type-id='22f86351' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='heap_dev' type-id='fa0b179b' visibility='default' filepath='drivers/dma-buf/dma-heap.c' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_heap_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/dma-heap.h' line='23' column='1' id='e87e70f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocate' type-id='404d559d' visibility='default' filepath='include/linux/dma-heap.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_heap_export_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-heap.h' line='38' column='1' id='666ada80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-heap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='cabcb658' visibility='default' filepath='include/linux/dma-heap.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-heap.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='666ada80' const='yes' id='ee9f611d'/>
+      <pointer-type-def type-id='ee9f611d' size-in-bits='64' id='dbe60995'/>
+      <qualified-type-def type-id='e87e70f3' const='yes' id='3651c762'/>
+      <pointer-type-def type-id='3651c762' size-in-bits='64' id='cabcb658'/>
+      <pointer-type-def type-id='9a08a831' size-in-bits='64' id='404d559d'/>
+      <pointer-type-def type-id='060e2e70' size-in-bits='64' id='ea1bdaf6'/>
+      <function-decl name='dma_heap_get_name' mangled-name='dma_heap_get_name' filepath='drivers/dma-buf/dma-heap.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_name'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='290' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='dma_heap_get_drvdata' mangled-name='dma_heap_get_drvdata' filepath='drivers/dma-buf/dma-heap.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_drvdata'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='237' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_heap_get_dev' mangled-name='dma_heap_get_dev' filepath='drivers/dma-buf/dma-heap.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_get_dev'>
+        <parameter type-id='ea1bdaf6' name='heap' filepath='drivers/dma-buf/dma-heap.c' line='277' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='dma_heap_add' mangled-name='dma_heap_add' filepath='drivers/dma-buf/dma-heap.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_heap_add'>
+        <parameter type-id='dbe60995' name='exp_info' filepath='drivers/dma-buf/dma-heap.c' line='296' column='1'/>
+        <return type-id='ea1bdaf6'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9a08a831'>
+        <parameter type-id='ea1bdaf6'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='5e4f599b'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/dma-resv.c' language='LANG_C89'>
+      <class-decl name='ww_class' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/ww_mutex.h' line='22' column='1' id='f0dc3c34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stamp' type-id='f22a8abb' visibility='default' filepath='include/linux/ww_mutex.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='acquire_key' type-id='47479831' visibility='default' filepath='include/linux/ww_mutex.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mutex_key' type-id='47479831' visibility='default' filepath='include/linux/ww_mutex.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='acquire_name' type-id='80f4b756' visibility='default' filepath='include/linux/ww_mutex.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex_name' type-id='80f4b756' visibility='default' filepath='include/linux/ww_mutex.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='is_wait_die' type-id='f0981eeb' visibility='default' filepath='include/linux/ww_mutex.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <var-decl name='reservation_ww_class' type-id='f0dc3c34' mangled-name='reservation_ww_class' visibility='default' filepath='drivers/dma-buf/dma-resv.c' line='49' column='1' elf-symbol-id='reservation_ww_class'/>
+      <function-decl name='dma_resv_init' mangled-name='dma_resv_init' filepath='drivers/dma-buf/dma-resv.c' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_init'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='102' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_fini' mangled-name='dma_resv_fini' filepath='drivers/dma-buf/dma-resv.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_fini'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='117' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_wait_timeout_rcu' mangled-name='dma_resv_wait_timeout_rcu' filepath='drivers/dma-buf/dma-resv.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_wait_timeout_rcu'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='499' column='1'/>
+        <parameter type-id='b50a4934' name='wait_all' filepath='drivers/dma-buf/dma-resv.c' line='500' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/dma-buf/dma-resv.c' line='500' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='drivers/dma-buf/dma-resv.c' line='501' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='dma_resv_test_signaled_rcu' mangled-name='dma_resv_test_signaled_rcu' filepath='drivers/dma-buf/dma-resv.c' line='601' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_test_signaled_rcu'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='601' column='1'/>
+        <parameter type-id='b50a4934' name='test_all' filepath='drivers/dma-buf/dma-resv.c' line='601' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='dma_resv_add_excl_fence' mangled-name='dma_resv_add_excl_fence' filepath='drivers/dma-buf/dma-resv.c' line='271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_add_excl_fence'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='271' column='1'/>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-resv.c' line='271' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_reserve_shared' mangled-name='dma_resv_reserve_shared' filepath='drivers/dma-buf/dma-resv.c' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_reserve_shared'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='148' column='1'/>
+        <parameter type-id='f0981eeb' name='num_fences' filepath='drivers/dma-buf/dma-resv.c' line='148' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_resv_add_shared_fence' mangled-name='dma_resv_add_shared_fence' filepath='drivers/dma-buf/dma-resv.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_add_shared_fence'>
+        <parameter type-id='340cea9c' name='obj' filepath='drivers/dma-buf/dma-resv.c' line='224' column='1'/>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/dma-resv.c' line='224' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_resv_copy_fences' mangled-name='dma_resv_copy_fences' filepath='drivers/dma-buf/dma-resv.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_resv_copy_fences'>
+        <parameter type-id='340cea9c' name='dst' filepath='drivers/dma-buf/dma-resv.c' line='311' column='1'/>
+        <parameter type-id='340cea9c' name='src' filepath='drivers/dma-buf/dma-resv.c' line='311' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma-buf/sync_file.c' language='LANG_C89'>
+      <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='b6352c99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='file' type-id='77e79a4b' 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='16dc656a' 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='72f469ec' 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='b5ab048f' 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='7359adad' 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='28271da3' 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='54c5dd35' visibility='default' filepath='include/linux/sync_file.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b6352c99' size-in-bits='64' id='6a6b0b01'/>
+      <function-decl name='sync_file_get_fence' mangled-name='sync_file_get_fence' filepath='drivers/dma-buf/sync_file.c' line='102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_get_fence'>
+        <parameter type-id='95e97e5e' name='fd' filepath='drivers/dma-buf/sync_file.c' line='102' column='1'/>
+        <return type-id='28271da3'/>
+      </function-decl>
+      <function-decl name='sync_file_create' mangled-name='sync_file_create' filepath='drivers/dma-buf/sync_file.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_file_create'>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/dma-buf/sync_file.c' line='64' column='1'/>
+        <return type-id='6a6b0b01'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma/dmaengine.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7fdcd183' size-in-bits='infinite' id='e5c7d3c7'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cf29c9b3' size-in-bits='infinite' id='55685a92'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='dma_chan' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='254' column='1' id='5e3b10aa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='c60ba652' visibility='default' filepath='include/linux/dmaengine.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='completed_cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='114d14e4' visibility='default' filepath='include/linux/dmaengine.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='local' type-id='f8c8e796' visibility='default' filepath='include/linux/dmaengine.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='client_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='table_count' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='router' type-id='70a92833' visibility='default' filepath='include/linux/dmaengine.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='route_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='272' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_device' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='724' column='1' id='0dcaa1e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chancnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='privatecnt' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channels' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='global_node' type-id='72f469ec' visibility='default' filepath='include/linux/dmaengine.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='filter' type-id='d914dc7c' visibility='default' filepath='include/linux/dmaengine.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_mask' type-id='3fb29acd' visibility='default' filepath='include/linux/dmaengine.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_xor' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='max_pq' type-id='8efea9e5' visibility='default' filepath='include/linux/dmaengine.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='copy_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='xor_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='pq_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fill_align' type-id='ec506a0a' visibility='default' filepath='include/linux/dmaengine.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dmaengine.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='src_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='dst_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='directions' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_burst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='descriptor_reuse' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='residue_granularity' type-id='cad02db3' visibility='default' filepath='include/linux/dmaengine.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='device_alloc_chan_resources' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='device_free_chan_resources' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_prep_dma_memcpy' type-id='16a27d24' visibility='default' filepath='include/linux/dmaengine.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_prep_dma_xor' type-id='d37a2705' visibility='default' filepath='include/linux/dmaengine.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='device_prep_dma_xor_val' type-id='187c2c79' visibility='default' filepath='include/linux/dmaengine.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='device_prep_dma_pq' type-id='2fa81f80' visibility='default' filepath='include/linux/dmaengine.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_prep_dma_pq_val' type-id='35da6582' visibility='default' filepath='include/linux/dmaengine.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='device_prep_dma_memset' type-id='9c36e869' visibility='default' filepath='include/linux/dmaengine.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='device_prep_dma_memset_sg' type-id='81ec80b0' visibility='default' filepath='include/linux/dmaengine.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_prep_dma_interrupt' type-id='37513679' visibility='default' filepath='include/linux/dmaengine.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='device_prep_slave_sg' type-id='3cbeb812' visibility='default' filepath='include/linux/dmaengine.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='device_prep_dma_cyclic' type-id='f166bad0' visibility='default' filepath='include/linux/dmaengine.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='device_prep_interleaved_dma' type-id='3e2efc02' visibility='default' filepath='include/linux/dmaengine.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='device_prep_dma_imm_data' type-id='7be3d1f9' visibility='default' filepath='include/linux/dmaengine.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='device_config' type-id='81aefe59' visibility='default' filepath='include/linux/dmaengine.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='device_pause' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='device_resume' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='device_terminate_all' type-id='8425c356' visibility='default' filepath='include/linux/dmaengine.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='device_synchronize' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='device_tx_status' type-id='e4038107' visibility='default' filepath='include/linux/dmaengine.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='device_issue_pending' type-id='42e84365' visibility='default' filepath='include/linux/dmaengine.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dmaengine.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dmaengine.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dmaengine.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dmaengine.h' line='810' 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='656' column='1' id='d914dc7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='55f53546' visibility='default' filepath='include/linux/dmaengine.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='06cc3383' visibility='default' filepath='include/linux/dmaengine.h' line='659' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_filter_fn' type-id='aa8ac136' filepath='include/linux/dmaengine.h' line='445' column='1' id='55f53546'/>
+      <class-decl name='dma_slave_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='643' column='1' id='848612dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devname' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slave' type-id='80f4b756' visibility='default' filepath='include/linux/dmaengine.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='646' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cap_mask_t' type-id='24d23dab' filepath='include/linux/dmaengine.h' line='215' column='1' id='3fb29acd'/>
+      <enum-decl name='dmaengine_alignment' filepath='include/linux/dmaengine.h' line='626' column='1' id='ec506a0a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='390' column='1' id='cad02db3'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='497' column='1' id='b50ce591'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='04baee86' visibility='default' filepath='include/linux/dmaengine.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chan' type-id='27f3f5d8' visibility='default' filepath='include/linux/dmaengine.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_submit' type-id='fb8c75c5' visibility='default' filepath='include/linux/dmaengine.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_free' type-id='dccdb2b1' visibility='default' filepath='include/linux/dmaengine.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='callback' type-id='ee3f36d4' visibility='default' filepath='include/linux/dmaengine.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='callback_result' type-id='82615040' visibility='default' filepath='include/linux/dmaengine.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='callback_param' type-id='eaa32e2f' visibility='default' filepath='include/linux/dmaengine.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unmap' type-id='e220a5e2' visibility='default' filepath='include/linux/dmaengine.h' line='507' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_cookie_t' type-id='a7832498' filepath='include/linux/dmaengine.h' line='23' column='1' id='6478ea0a'/>
+      <enum-decl name='dma_ctrl_flags' filepath='include/linux/dmaengine.h' line='181' column='1' id='04baee86'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='b7f9d8e6' filepath='include/linux/dmaengine.h' line='447' column='1' id='ee3f36d4'/>
+      <typedef-decl name='dma_async_tx_callback_result' type-id='31316b61' filepath='include/linux/dmaengine.h' line='461' column='1' id='82615040'/>
+      <class-decl name='dmaengine_result' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='456' column='1' id='931aa361'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result' type-id='c2154237' visibility='default' filepath='include/linux/dmaengine.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='residue' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='458' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dmaengine_tx_result' filepath='include/linux/dmaengine.h' line='449' column='1' id='c2154237'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='464' column='1' id='b32b9ce4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='to_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='from_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bidi_cnt' type-id='f9b06939' visibility='default' filepath='include/linux/dmaengine.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/dmaengine.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='addr' type-id='55685a92' visibility='default' filepath='include/linux/dmaengine.h' line='476' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sum_check_flags' filepath='include/linux/dmaengine.h' line='205' column='1' id='a46c8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='76' column='1' id='941ca9e2'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='147' column='1' id='543d1e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dst_start' type-id='cf29c9b3' visibility='default' filepath='include/linux/dmaengine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dir' type-id='941ca9e2' visibility='default' filepath='include/linux/dmaengine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='src_inc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='dst_inc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='src_sgl' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='dst_sgl' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='numf' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frame_size' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sgl' type-id='e5c7d3c7' visibility='default' filepath='include/linux/dmaengine.h' line='157' 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='122' column='1' id='7fdcd183'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_icg' type-id='b59d7dce' visibility='default' filepath='include/linux/dmaengine.h' line='126' 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='356' column='1' id='d356829c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='direction' type-id='941ca9e2' visibility='default' filepath='include/linux/dmaengine.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src_addr' type-id='2522883d' visibility='default' filepath='include/linux/dmaengine.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst_addr' type-id='2522883d' visibility='default' filepath='include/linux/dmaengine.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='src_addr_width' type-id='270e7659' visibility='default' filepath='include/linux/dmaengine.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dst_addr_width' type-id='270e7659' visibility='default' filepath='include/linux/dmaengine.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='src_maxburst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dst_maxburst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='src_port_window_size' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dst_port_window_size' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_fc' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='slave_id' type-id='f0981eeb' visibility='default' filepath='include/linux/dmaengine.h' line='367' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dma_slave_buswidth' filepath='include/linux/dmaengine.h' line='293' column='1' id='270e7659'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='38' column='1' id='02ac9d9d'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='616' column='1' id='66bc63b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='used' type-id='6478ea0a' visibility='default' filepath='include/linux/dmaengine.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='residue' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='619' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_chan_dev' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='282' column='1' id='2765d8de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='27f3f5d8' visibility='default' filepath='include/linux/dmaengine.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/dmaengine.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='dev_id' type-id='95e97e5e' visibility='default' filepath='include/linux/dmaengine.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='idr_ref' type-id='8a47abc3' visibility='default' filepath='include/linux/dmaengine.h' line='286' 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='223' column='1' id='ea186880'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcpy_count' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_transferred' type-id='7359adad' visibility='default' filepath='include/linux/dmaengine.h' line='226' 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='234' column='1' id='bfd10d03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dmaengine.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_free' type-id='680bf43c' visibility='default' filepath='include/linux/dmaengine.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_slave_caps' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/dmaengine.h' line='415' column='1' id='08e15723'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dst_addr_widths' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='directions' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_burst' type-id='19c2251e' visibility='default' filepath='include/linux/dmaengine.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_pause' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='cmd_resume' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='cmd_terminate' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='residue_granularity' type-id='cad02db3' visibility='default' filepath='include/linux/dmaengine.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='descriptor_reuse' type-id='b50a4934' visibility='default' filepath='include/linux/dmaengine.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49178f86' size-in-bits='64' id='8a47abc3'/>
+      <qualified-type-def type-id='3fb29acd' const='yes' id='1b39a1dd'/>
+      <pointer-type-def type-id='1b39a1dd' size-in-bits='64' id='d2b9f7d5'/>
+      <qualified-type-def type-id='848612dc' const='yes' id='de25fc7b'/>
+      <pointer-type-def type-id='de25fc7b' size-in-bits='64' id='06cc3383'/>
+      <qualified-type-def type-id='931aa361' const='yes' id='921fbfdc'/>
+      <pointer-type-def type-id='921fbfdc' size-in-bits='64' id='fdfb3042'/>
+      <pointer-type-def type-id='b50ce591' size-in-bits='64' id='0e3f80d9'/>
+      <pointer-type-def type-id='81e2e960' size-in-bits='64' id='35da6582'/>
+      <pointer-type-def type-id='bbe0df86' size-in-bits='64' id='2fa81f80'/>
+      <pointer-type-def type-id='22b04425' size-in-bits='64' id='187c2c79'/>
+      <pointer-type-def type-id='d42dfd68' size-in-bits='64' id='3e2efc02'/>
+      <pointer-type-def type-id='c9c16460' size-in-bits='64' id='3cbeb812'/>
+      <pointer-type-def type-id='494c865e' size-in-bits='64' id='81ec80b0'/>
+      <pointer-type-def type-id='08dd4249' size-in-bits='64' id='d37a2705'/>
+      <pointer-type-def type-id='e070d395' size-in-bits='64' id='9c36e869'/>
+      <pointer-type-def type-id='1d86628a' size-in-bits='64' id='16a27d24'/>
+      <pointer-type-def type-id='68595236' size-in-bits='64' id='f166bad0'/>
+      <pointer-type-def type-id='13de152d' size-in-bits='64' id='7be3d1f9'/>
+      <pointer-type-def type-id='e4bb0da5' size-in-bits='64' id='37513679'/>
+      <pointer-type-def type-id='5e3b10aa' size-in-bits='64' id='27f3f5d8'/>
+      <pointer-type-def type-id='2765d8de' size-in-bits='64' id='114d14e4'/>
+      <pointer-type-def type-id='ea186880' size-in-bits='64' id='f8c8e796'/>
+      <pointer-type-def type-id='0dcaa1e4' size-in-bits='64' id='c60ba652'/>
+      <pointer-type-def type-id='543d1e64' size-in-bits='64' id='a987c462'/>
+      <pointer-type-def type-id='bfd10d03' size-in-bits='64' id='70a92833'/>
+      <pointer-type-def type-id='08e15723' size-in-bits='64' id='d9f19b23'/>
+      <pointer-type-def type-id='d356829c' size-in-bits='64' id='4f22192a'/>
+      <pointer-type-def type-id='66bc63b4' size-in-bits='64' id='98d7a132'/>
+      <pointer-type-def type-id='b32b9ce4' size-in-bits='64' id='e220a5e2'/>
+      <pointer-type-def type-id='261b7c73' size-in-bits='64' id='e4038107'/>
+      <pointer-type-def type-id='6dd06c9d' size-in-bits='64' id='dccdb2b1'/>
+      <pointer-type-def type-id='04c69dd4' size-in-bits='64' id='8425c356'/>
+      <pointer-type-def type-id='dfde97ed' size-in-bits='64' id='81aefe59'/>
+      <pointer-type-def type-id='a46c8018' size-in-bits='64' id='b0e7dbd3'/>
+      <pointer-type-def type-id='ccee3154' size-in-bits='64' id='aa8ac136'/>
+      <pointer-type-def type-id='d9866c79' size-in-bits='64' id='fb8c75c5'/>
+      <pointer-type-def type-id='b5d4a6d2' size-in-bits='64' id='680bf43c'/>
+      <pointer-type-def type-id='a198c269' size-in-bits='64' id='42e84365'/>
+      <pointer-type-def type-id='1c2e282d' size-in-bits='64' id='31316b61'/>
+      <function-decl name='dma_release_channel' mangled-name='dma_release_channel' filepath='drivers/dma/dmaengine.c' line='780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_release_channel'>
+        <parameter type-id='27f3f5d8' name='chan' filepath='drivers/dma/dmaengine.c' line='780' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_async_device_unregister' mangled-name='dma_async_device_unregister' filepath='drivers/dma/dmaengine.c' line='1111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_device_unregister'>
+        <parameter type-id='c60ba652' name='device' filepath='drivers/dma/dmaengine.c' line='1111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dmaengine_unmap_put' mangled-name='dmaengine_unmap_put' filepath='drivers/dma/dmaengine.c' line='1231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmaengine_unmap_put'>
+        <parameter type-id='e220a5e2' name='unmap' filepath='drivers/dma/dmaengine.c' line='1231' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_request_slave_channel' mangled-name='dma_request_slave_channel' filepath='drivers/dma/dmaengine.c' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_request_slave_channel'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/dma/dmaengine.c' line='742' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/dma/dmaengine.c' line='743' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='dma_request_chan' mangled-name='dma_request_chan' filepath='drivers/dma/dmaengine.c' line='694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_request_chan'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/dma/dmaengine.c' line='694' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/dma/dmaengine.c' line='694' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='dma_get_slave_channel' mangled-name='dma_get_slave_channel' filepath='drivers/dma/dmaengine.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_slave_channel'>
+        <parameter type-id='27f3f5d8' name='chan' filepath='drivers/dma/dmaengine.c' line='577' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='dma_get_slave_caps' mangled-name='dma_get_slave_caps' filepath='drivers/dma/dmaengine.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_slave_caps'>
+        <parameter type-id='27f3f5d8' name='chan' filepath='drivers/dma/dmaengine.c' line='463' column='1'/>
+        <parameter type-id='d9f19b23' name='caps' filepath='drivers/dma/dmaengine.c' line='463' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_get_any_slave_channel' mangled-name='dma_get_any_slave_channel' filepath='drivers/dma/dmaengine.c' line='608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_any_slave_channel'>
+        <parameter type-id='c60ba652' name='device' filepath='drivers/dma/dmaengine.c' line='608' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='dma_async_tx_descriptor_init' mangled-name='dma_async_tx_descriptor_init' filepath='drivers/dma/dmaengine.c' line='1297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_tx_descriptor_init'>
+        <parameter type-id='0e3f80d9' name='tx' filepath='drivers/dma/dmaengine.c' line='1297' column='1'/>
+        <parameter type-id='27f3f5d8' name='chan' filepath='drivers/dma/dmaengine.c' line='1298' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_async_device_register' mangled-name='dma_async_device_register' filepath='drivers/dma/dmaengine.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_async_device_register'>
+        <parameter type-id='c60ba652' name='device' filepath='drivers/dma/dmaengine.c' line='907' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__dma_request_channel' mangled-name='__dma_request_channel' filepath='drivers/dma/dmaengine.c' line='636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dma_request_channel'>
+        <parameter type-id='d2b9f7d5' name='mask' filepath='drivers/dma/dmaengine.c' line='636' column='1'/>
+        <parameter type-id='55f53546' name='fn' filepath='drivers/dma/dmaengine.c' line='637' column='1'/>
+        <parameter type-id='eaa32e2f' name='fn_param' filepath='drivers/dma/dmaengine.c' line='637' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/dmaengine.c' line='638' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='81e2e960'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b0e7dbd3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bbe0df86'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22b04425'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b0e7dbd3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d42dfd68'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='a987c462'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9c16460'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='941ca9e2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='494c865e'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='bf3ef905'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08dd4249'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='e835b5d8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e070d395'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d86628a'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68595236'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='941ca9e2'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13de152d'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4bb0da5'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='0e3f80d9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='261b7c73'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='6478ea0a'/>
+        <parameter type-id='98d7a132'/>
+        <return type-id='02ac9d9d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dd06c9d'>
+        <parameter type-id='0e3f80d9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='04c69dd4'>
+        <parameter type-id='27f3f5d8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfde97ed'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='4f22192a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ccee3154'>
+        <parameter type-id='27f3f5d8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9866c79'>
+        <parameter type-id='0e3f80d9'/>
+        <return type-id='6478ea0a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b5d4a6d2'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a198c269'>
+        <parameter type-id='27f3f5d8' name='chan'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c2e282d'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='fdfb3042'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/dma/of-dma.c' language='LANG_C89'>
+      <class-decl name='of_dma' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/of_dma.h' line='18' column='1' id='e8681069'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='of_dma_controllers' type-id='72f469ec' visibility='default' filepath='include/linux/of_dma.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/of_dma.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_dma_xlate' type-id='04d80927' visibility='default' filepath='include/linux/of_dma.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_dma_route_allocate' type-id='d1aa2b6e' visibility='default' filepath='include/linux/of_dma.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_router' type-id='70a92833' visibility='default' filepath='include/linux/of_dma.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='of_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_dma.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4a6917b' size-in-bits='64' id='04d80927'/>
+      <pointer-type-def type-id='e8681069' size-in-bits='64' id='2f9b8041'/>
+      <pointer-type-def type-id='bf3013ec' size-in-bits='64' id='d1aa2b6e'/>
+      <function-decl name='of_dma_request_slave_channel' mangled-name='of_dma_request_slave_channel' filepath='drivers/dma/of-dma.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_request_slave_channel'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/of-dma.c' line='239' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/dma/of-dma.c' line='240' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='of_dma_simple_xlate' mangled-name='of_dma_simple_xlate' filepath='drivers/dma/of-dma.c' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_simple_xlate'>
+        <parameter type-id='51a94113' name='dma_spec' filepath='drivers/dma/of-dma.c' line='309' column='1'/>
+        <parameter type-id='2f9b8041' name='ofdma' filepath='drivers/dma/of-dma.c' line='310' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='of_dma_controller_register' mangled-name='of_dma_controller_register' filepath='drivers/dma/of-dma.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_controller_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/of-dma.c' line='106' column='1'/>
+        <parameter type-id='04d80927' name='of_dma_xlate' filepath='drivers/dma/of-dma.c' line='107' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/dma/of-dma.c' line='109' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_dma_controller_free' mangled-name='of_dma_controller_free' filepath='drivers/dma/of-dma.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_controller_free'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/dma/of-dma.c' line='141' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e4a6917b'>
+        <parameter type-id='51a94113' name='dma_spec'/>
+        <parameter type-id='2f9b8041' name='ofdma'/>
+        <return type-id='27f3f5d8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf3013ec'>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='2f9b8041'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/extcon/devres.c' language='LANG_C89'>
+      <function-decl name='devm_extcon_register_notifier' mangled-name='devm_extcon_register_notifier' filepath='drivers/extcon/devres.c' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_register_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='172' column='1'/>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/devres.c' line='172' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/devres.c' line='173' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/devres.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_extcon_register_notifier_all' mangled-name='devm_extcon_register_notifier_all' filepath='drivers/extcon/devres.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_register_notifier_all'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='228' column='1'/>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/devres.c' line='228' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/devres.c' line='229' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_extcon_dev_register' mangled-name='devm_extcon_dev_register' filepath='drivers/extcon/devres.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_dev_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='118' column='1'/>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/devres.c' line='118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_extcon_dev_allocate' mangled-name='devm_extcon_dev_allocate' filepath='drivers/extcon/devres.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_extcon_dev_allocate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/devres.c' line='65' column='1'/>
+        <parameter type-id='5b2fd8e8' name='supported_cable' filepath='drivers/extcon/devres.c' line='66' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <pointer-type-def type-id='87a2d33c' size-in-bits='64' id='c0d6fada'/>
+      <class-decl name='extcon_dev' size-in-bits='8960' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.h' line='41' column='1' id='87a2d33c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/extcon/extcon.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supported_cable' type-id='5b2fd8e8' visibility='default' filepath='drivers/extcon/extcon.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutually_exclusive' type-id='aded214c' visibility='default' filepath='drivers/extcon/extcon.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/extcon/extcon.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='nh_all' type-id='96e74f5f' visibility='default' filepath='drivers/extcon/extcon.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='nh' type-id='dc20ab67' visibility='default' filepath='drivers/extcon/extcon.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='drivers/extcon/extcon.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='max_supported' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/extcon/extcon.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='drivers/extcon/extcon.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='extcon_dev_type' type-id='bdae35f4' visibility='default' filepath='drivers/extcon/extcon.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cables' type-id='e07a8e4c' visibility='default' filepath='drivers/extcon/extcon.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='attr_g_muex' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='attrs_muex' type-id='862c676f' visibility='default' filepath='drivers/extcon/extcon.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='d_attrs_muex' type-id='89a2612a' visibility='default' filepath='drivers/extcon/extcon.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='raw_notifier_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='70' column='1' id='96e74f5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='103b4c26' size-in-bits='64' id='e07a8e4c'/>
+      <pointer-type-def type-id='96e74f5f' size-in-bits='64' id='dc20ab67'/>
+      <class-decl name='extcon_cable' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.c' line='200' column='1' id='103b4c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='edev' type-id='c0d6fada' visibility='default' filepath='drivers/extcon/extcon.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cable_index' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_g' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attr_name' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='attr_state' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='attrs' type-id='ff62a050' visibility='default' filepath='drivers/extcon/extcon.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usb_propval' type-id='475a4bff' visibility='default' filepath='drivers/extcon/extcon.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='jack_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='disp_propval' type-id='0b5c2c22' visibility='default' filepath='drivers/extcon/extcon.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='usb_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='chg_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='jack_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='disp_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='0b001c1f' size-in-bits='192' id='ff62a050'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='32' id='0b5e6ab9'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='64' id='0b5c2c22'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='96' id='475a4bff'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <union-decl name='extcon_property_value' size-in-bits='32' visibility='default' filepath='include/linux/extcon.h' line='162' column='1' id='282b2805'>
+        <data-member access='public'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/extcon.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/extcon/extcon.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='0b001c1f' size-in-bits='192' id='ff62a050'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='32' id='0b5e6ab9'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='64' id='0b5c2c22'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='282b2805' size-in-bits='96' id='475a4bff'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='extcon_cable' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.c' line='200' column='1' id='103b4c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='edev' type-id='c0d6fada' visibility='default' filepath='drivers/extcon/extcon.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cable_index' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr_g' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attr_name' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='attr_state' type-id='dbf3947c' visibility='default' filepath='drivers/extcon/extcon.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='attrs' type-id='ff62a050' visibility='default' filepath='drivers/extcon/extcon.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='usb_propval' type-id='475a4bff' visibility='default' filepath='drivers/extcon/extcon.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='jack_propval' type-id='0b5e6ab9' visibility='default' filepath='drivers/extcon/extcon.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='disp_propval' type-id='0b5c2c22' visibility='default' filepath='drivers/extcon/extcon.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='usb_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='chg_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='jack_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='disp_bits' type-id='f066dd3c' visibility='default' filepath='drivers/extcon/extcon.c' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='extcon_property_value' size-in-bits='32' visibility='default' filepath='include/linux/extcon.h' line='162' column='1' id='282b2805'>
+        <data-member access='public'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/extcon.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='103b4c26' size-in-bits='64' id='e07a8e4c'/>
+      <pointer-type-def type-id='282b2805' size-in-bits='64' id='50842338'/>
+      <function-decl name='extcon_get_edev_by_phandle' mangled-name='extcon_get_edev_by_phandle' filepath='drivers/extcon/extcon.c' line='1359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_edev_by_phandle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/extcon/extcon.c' line='1359' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/extcon/extcon.c' line='1359' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <function-decl name='extcon_get_state' mangled-name='extcon_get_state' filepath='drivers/extcon/extcon.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_state'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='489' column='1'/>
+        <parameter type-id='20f5f452' name='id' filepath='drivers/extcon/extcon.c' line='489' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_extcon_dev' mangled-name='extcon_get_extcon_dev' filepath='drivers/extcon/extcon.c' line='867' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_extcon_dev'>
+        <parameter type-id='80f4b756' name='extcon_name' filepath='drivers/extcon/extcon.c' line='867' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <function-decl name='extcon_register_notifier' mangled-name='extcon_register_notifier' filepath='drivers/extcon/extcon.c' line='899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_register_notifier'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='899' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='899' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/extcon.c' line='900' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_find_edev_by_node' mangled-name='extcon_find_edev_by_node' filepath='drivers/extcon/extcon.c' line='1337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_find_edev_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/extcon/extcon.c' line='1337' column='1'/>
+        <return type-id='c0d6fada'/>
+      </function-decl>
+      <function-decl name='extcon_unregister_notifier' mangled-name='extcon_unregister_notifier' filepath='drivers/extcon/extcon.c' line='928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_unregister_notifier'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='928' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='928' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/extcon/extcon.c' line='929' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_set_state_sync' mangled-name='extcon_set_state_sync' filepath='drivers/extcon/extcon.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_state_sync'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <parameter type-id='b50a4934' name='state' filepath='drivers/extcon/extcon.c' line='577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_set_property_capability' mangled-name='extcon_set_property_capability' filepath='drivers/extcon/extcon.c' line='816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_property_capability'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_set_property' mangled-name='extcon_set_property' filepath='drivers/extcon/extcon.c' line='694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_set_property'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='694' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='694' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='695' column='1'/>
+        <parameter type-id='282b2805' name='prop_val' filepath='drivers/extcon/extcon.c' line='696' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_property' mangled-name='extcon_get_property' filepath='drivers/extcon/extcon.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_property'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='615' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/extcon/extcon.c' line='615' column='1'/>
+        <parameter type-id='f0981eeb' name='prop' filepath='drivers/extcon/extcon.c' line='616' column='1'/>
+        <parameter type-id='50842338' name='prop_val' filepath='drivers/extcon/extcon.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='extcon_get_edev_name' mangled-name='extcon_get_edev_name' filepath='drivers/extcon/extcon.c' line='1406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='extcon_get_edev_name'>
+        <parameter type-id='c0d6fada' name='edev' filepath='drivers/extcon/extcon.c' line='1406' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/firmware/arm_scmi/bus.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1024' id='c497958f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='scmi_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='291' column='1' id='35ff1d34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/scmi_protocol.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='fa2519a6' visibility='default' filepath='include/linux/scmi_protocol.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='6219347f' visibility='default' filepath='include/linux/scmi_protocol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id_table' type-id='2d81b115' visibility='default' filepath='include/linux/scmi_protocol.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/scmi_protocol.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_device' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='272' column='1' id='c016a1fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='protocol_id' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/scmi_protocol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='handle' type-id='94f1df82' visibility='default' filepath='include/linux/scmi_protocol.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_handle' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='244' column='1' id='ee54f9d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/scmi_protocol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f2d9c8e' visibility='default' filepath='include/linux/scmi_protocol.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_ops' type-id='d41d707c' visibility='default' filepath='include/linux/scmi_protocol.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clk_ops' type-id='deb758b1' visibility='default' filepath='include/linux/scmi_protocol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='power_ops' type-id='9df94d5e' visibility='default' filepath='include/linux/scmi_protocol.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sensor_ops' type-id='07ed7d97' visibility='default' filepath='include/linux/scmi_protocol.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reset_ops' type-id='bdcbf34c' visibility='default' filepath='include/linux/scmi_protocol.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='perf_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clk_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='power_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sensor_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reset_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/scmi_protocol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_revision_info' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='28' column='1' id='889b9d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major_ver' type-id='1dc6a898' visibility='default' filepath='include/linux/scmi_protocol.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='minor_ver' type-id='1dc6a898' visibility='default' filepath='include/linux/scmi_protocol.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_protocols' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_agents' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='impl_ver' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vendor_id' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='sub_vendor_id' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_perf_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='100' column='1' id='9ea32b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits_set' type-id='215d9248' visibility='default' filepath='include/linux/scmi_protocol.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='limits_get' type-id='6168f65a' visibility='default' filepath='include/linux/scmi_protocol.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='level_set' type-id='136ee384' visibility='default' filepath='include/linux/scmi_protocol.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='level_get' type-id='26b60b43' visibility='default' filepath='include/linux/scmi_protocol.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_domain_id' type-id='613d39f5' visibility='default' filepath='include/linux/scmi_protocol.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='transition_latency_get' type-id='47997eaf' visibility='default' filepath='include/linux/scmi_protocol.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_opps_add' type-id='47997eaf' visibility='default' filepath='include/linux/scmi_protocol.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='freq_set' type-id='f85d5c07' visibility='default' filepath='include/linux/scmi_protocol.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='freq_get' type-id='2ac6d817' visibility='default' filepath='include/linux/scmi_protocol.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='est_power_get' type-id='920227ca' visibility='default' filepath='include/linux/scmi_protocol.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_clk_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='67' column='1' id='970c0c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info_get' type-id='aa9bd9ec' visibility='default' filepath='include/linux/scmi_protocol.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_get' type-id='d7c1813f' visibility='default' filepath='include/linux/scmi_protocol.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_set' type-id='7d95ee32' visibility='default' filepath='include/linux/scmi_protocol.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disable' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_clock_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='38' column='1' id='093b20f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_discrete' type-id='b50a4934' visibility='default' filepath='include/linux/scmi_protocol.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='1d28b625' visibility='default' filepath='include/linux/scmi_protocol.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='1088' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='41' column='1' id='1d28b625'>
+        <data-member access='public'>
+          <var-decl name='list' type-id='fe492253' visibility='default' filepath='include/linux/scmi_protocol.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='range' type-id='099e357b' visibility='default' filepath='include/linux/scmi_protocol.h' line='50' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='1088' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='42' column='1' id='fe492253'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_rates' type-id='95e97e5e' visibility='default' filepath='include/linux/scmi_protocol.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rates' type-id='c497958f' visibility='default' filepath='include/linux/scmi_protocol.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='46' column='1' id='099e357b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_rate' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_rate' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step_size' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_power_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='133' column='1' id='daeb4148'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_domains_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name_get' type-id='d48a05c7' visibility='default' filepath='include/linux/scmi_protocol.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_set' type-id='6bdbc3e1' visibility='default' filepath='include/linux/scmi_protocol.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_get' type-id='48dcc51a' visibility='default' filepath='include/linux/scmi_protocol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_sensor_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='186' column='1' id='6f985b0f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info_get' type-id='822b6136' visibility='default' filepath='include/linux/scmi_protocol.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trip_point_notify' type-id='74bca203' visibility='default' filepath='include/linux/scmi_protocol.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trip_point_config' type-id='204c0f62' visibility='default' filepath='include/linux/scmi_protocol.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reading_get' type-id='d7c1813f' visibility='default' filepath='include/linux/scmi_protocol.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_sensor_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='151' column='1' id='39094ad1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/linux/scmi_protocol.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='scale' type-id='fdbf7a0f' visibility='default' filepath='include/linux/scmi_protocol.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_trip_points' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='include/linux/scmi_protocol.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/scmi_protocol.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_reset_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='212' column='1' id='6e3a91a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_domains_get' type-id='312a095b' visibility='default' filepath='include/linux/scmi_protocol.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name_get' type-id='d48a05c7' visibility='default' filepath='include/linux/scmi_protocol.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='latency_get' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assert' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='deassert' type-id='29a23a5a' visibility='default' filepath='include/linux/scmi_protocol.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/scmi_protocol.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scmi_device_id' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/scmi_protocol.h' line='287' column='1' id='9aefc15c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='protocol_id' type-id='f9b06939' visibility='default' filepath='include/linux/scmi_protocol.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2664d053' size-in-bits='64' id='d48a05c7'/>
+      <qualified-type-def type-id='093b20f9' const='yes' id='331f9762'/>
+      <pointer-type-def type-id='331f9762' size-in-bits='64' id='c2bb2658'/>
+      <pointer-type-def type-id='c9cbe27a' size-in-bits='64' id='aa9bd9ec'/>
+      <qualified-type-def type-id='9aefc15c' const='yes' id='425bcb9d'/>
+      <pointer-type-def type-id='425bcb9d' size-in-bits='64' id='2d81b115'/>
+      <qualified-type-def type-id='ee54f9d4' const='yes' id='970fe03f'/>
+      <pointer-type-def type-id='970fe03f' size-in-bits='64' id='e2fdc10f'/>
+      <qualified-type-def type-id='39094ad1' const='yes' id='ff01e92c'/>
+      <pointer-type-def type-id='ff01e92c' size-in-bits='64' id='7601d472'/>
+      <pointer-type-def type-id='a67f4304' size-in-bits='64' id='822b6136'/>
+      <pointer-type-def type-id='81051a5f' size-in-bits='64' id='312a095b'/>
+      <pointer-type-def type-id='8b0e312b' size-in-bits='64' id='47997eaf'/>
+      <pointer-type-def type-id='f8fe36b0' size-in-bits='64' id='29a23a5a'/>
+      <pointer-type-def type-id='ddc750bf' size-in-bits='64' id='74bca203'/>
+      <pointer-type-def type-id='d9a2db4d' size-in-bits='64' id='6bdbc3e1'/>
+      <pointer-type-def type-id='64d703ca' size-in-bits='64' id='136ee384'/>
+      <pointer-type-def type-id='fc54416e' size-in-bits='64' id='215d9248'/>
+      <pointer-type-def type-id='6dc62d08' size-in-bits='64' id='7d95ee32'/>
+      <pointer-type-def type-id='1e616050' size-in-bits='64' id='204c0f62'/>
+      <pointer-type-def type-id='fce30fc0' size-in-bits='64' id='48dcc51a'/>
+      <pointer-type-def type-id='dc794d6f' size-in-bits='64' id='26b60b43'/>
+      <pointer-type-def type-id='7123c5b0' size-in-bits='64' id='6168f65a'/>
+      <pointer-type-def type-id='c201cf9b' size-in-bits='64' id='d7c1813f'/>
+      <pointer-type-def type-id='0aeff443' size-in-bits='64' id='2ac6d817'/>
+      <pointer-type-def type-id='c9491b60' size-in-bits='64' id='920227ca'/>
+      <pointer-type-def type-id='76871c3b' size-in-bits='64' id='f85d5c07'/>
+      <pointer-type-def type-id='0d3f29fc' size-in-bits='64' id='fa2519a6'/>
+      <pointer-type-def type-id='970c0c79' size-in-bits='64' id='deb758b1'/>
+      <pointer-type-def type-id='c016a1fc' size-in-bits='64' id='260390aa'/>
+      <pointer-type-def type-id='35ff1d34' size-in-bits='64' id='7f2f8862'/>
+      <pointer-type-def type-id='ee54f9d4' size-in-bits='64' id='94f1df82'/>
+      <pointer-type-def type-id='9ea32b06' size-in-bits='64' id='d41d707c'/>
+      <pointer-type-def type-id='daeb4148' size-in-bits='64' id='9df94d5e'/>
+      <pointer-type-def type-id='6e3a91a6' size-in-bits='64' id='bdcbf34c'/>
+      <pointer-type-def type-id='889b9d08' size-in-bits='64' id='3f2d9c8e'/>
+      <pointer-type-def type-id='6f985b0f' size-in-bits='64' id='07ed7d97'/>
+      <pointer-type-def type-id='a35f0003' size-in-bits='64' id='6219347f'/>
+      <function-decl name='scmi_driver_unregister' mangled-name='scmi_driver_unregister' filepath='drivers/firmware/arm_scmi/bus.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmi_driver_unregister'>
+        <parameter type-id='7f2f8862' name='driver' filepath='drivers/firmware/arm_scmi/bus.c' line='119' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scmi_driver_register' mangled-name='scmi_driver_register' filepath='drivers/firmware/arm_scmi/bus.c' line='98' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmi_driver_register'>
+        <parameter type-id='7f2f8862' name='driver' filepath='drivers/firmware/arm_scmi/bus.c' line='98' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/firmware/arm_scmi/bus.c' line='98' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/firmware/arm_scmi/bus.c' line='99' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2664d053'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9cbe27a'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='c2bb2658'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a67f4304'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7601d472'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81051a5f'>
+        <parameter type-id='e2fdc10f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b0e312b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8fe36b0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ddc750bf'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9a2db4d'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64d703ca'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc54416e'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dc62d08'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e616050'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fce30fc0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc794d6f'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7123c5b0'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c201cf9b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0aeff443'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9491b60'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='76871c3b'>
+        <parameter type-id='e2fdc10f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d3f29fc'>
+        <parameter type-id='260390aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a35f0003'>
+        <parameter type-id='260390aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/firmware/efi/efi.c' language='LANG_C89'>
+      <class-decl name='efi' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/efi.h' line='984' column='1' id='f7bdefe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='systab' type-id='7e8eb77b' visibility='default' filepath='include/linux/efi.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='runtime_version' type-id='f0981eeb' visibility='default' filepath='include/linux/efi.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mps' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acpi' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acpi20' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smbios' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='smbios3' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='boot_info' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hcdp' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uga' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fw_vendor' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='runtime' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='config_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='esrt' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='properties_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem_attr_table' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rng_seed' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tpm_log' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tpm_final_log' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mem_reserve' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_time' type-id='b6c6c0b9' visibility='default' filepath='include/linux/efi.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_time' type-id='235cec4d' visibility='default' filepath='include/linux/efi.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_wakeup_time' type-id='ce9ca351' visibility='default' filepath='include/linux/efi.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_wakeup_time' type-id='00aa9c6d' visibility='default' filepath='include/linux/efi.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_variable' type-id='a86f7daa' visibility='default' filepath='include/linux/efi.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='get_next_variable' type-id='038aa726' visibility='default' filepath='include/linux/efi.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_variable' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_variable_nonblocking' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='query_variable_info' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='query_variable_info_nonblocking' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='update_capsule' type-id='9324451e' visibility='default' filepath='include/linux/efi.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='query_capsule_caps' type-id='ef9eae4d' visibility='default' filepath='include/linux/efi.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_next_high_mono_count' type-id='7ea36636' visibility='default' filepath='include/linux/efi.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='reset_system' type-id='bdb2559a' visibility='default' filepath='include/linux/efi.h' line='1018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='set_virtual_address_map' type-id='e48d4733' visibility='default' filepath='include/linux/efi.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memmap' type-id='1dad91d0' visibility='default' filepath='include/linux/efi.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='1021' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_system_table_t' type-id='d894dae3' filepath='include/linux/efi.h' line='778' column='1' id='b8c997be'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='960' is-struct='yes' is-anonymous='yes' naming-typedef-id='b8c997be' visibility='default' filepath='include/linux/efi.h' line='764' column='1' id='d894dae3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fw_vendor' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fw_revision' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='con_in_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='con_in' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='con_out_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='con_out' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stderr_handle' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stderr' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='runtime' type-id='90150c16' visibility='default' filepath='include/linux/efi.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='boottime' type-id='447dc282' visibility='default' filepath='include/linux/efi.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_tables' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tables' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='777' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_table_hdr_t' type-id='ffd4b94d' filepath='include/linux/efi.h' line='80' column='1' id='2285a0d7'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='74' column='1' id='ffd4b94d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='signature' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='revision' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='headersize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='crc32' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_runtime_services_t' type-id='16d09086' filepath='include/linux/efi.h' line='625' column='1' id='50449fbd'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='1088' is-struct='yes' is-anonymous='yes' naming-typedef-id='50449fbd' visibility='default' filepath='include/linux/efi.h' line='609' column='1' id='16d09086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_time' type-id='b6c6c0b9' visibility='default' filepath='include/linux/efi.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_time' type-id='235cec4d' visibility='default' filepath='include/linux/efi.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_wakeup_time' type-id='ce9ca351' visibility='default' filepath='include/linux/efi.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_wakeup_time' type-id='00aa9c6d' visibility='default' filepath='include/linux/efi.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_virtual_address_map' type-id='e48d4733' visibility='default' filepath='include/linux/efi.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='convert_pointer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_variable' type-id='a86f7daa' visibility='default' filepath='include/linux/efi.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_variable' type-id='038aa726' visibility='default' filepath='include/linux/efi.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_variable' type-id='0f427eae' visibility='default' filepath='include/linux/efi.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_next_high_mono_count' type-id='7ea36636' visibility='default' filepath='include/linux/efi.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset_system' type-id='bdb2559a' visibility='default' filepath='include/linux/efi.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='update_capsule' type-id='9324451e' visibility='default' filepath='include/linux/efi.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='query_capsule_caps' type-id='ef9eae4d' visibility='default' filepath='include/linux/efi.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_variable_info' type-id='25269d6f' visibility='default' filepath='include/linux/efi.h' line='624' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_get_time_t' type-id='2e6b81bc' filepath='include/linux/efi.h' line='575' column='1' id='537afa70'/>
+      <typedef-decl name='efi_status_t' type-id='7359adad' filepath='include/linux/efi.h' line='45' column='1' id='95398de2'/>
+      <typedef-decl name='efi_time_t' type-id='5c952537' filepath='include/linux/efi.h' line='199' column='1' id='dffd2b75'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='dffd2b75' visibility='default' filepath='include/linux/efi.h' line='187' column='1' id='5c952537'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='year' type-id='1dc6a898' visibility='default' filepath='include/linux/efi.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='month' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='day' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hour' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='minute' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='second' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nanosecond' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='timezone' type-id='9b7e9486' visibility='default' filepath='include/linux/efi.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='daylight' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_time_cap_t' type-id='4bcfdeda' filepath='include/linux/efi.h' line='205' column='1' id='a4bc3012'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='96' is-struct='yes' is-anonymous='yes' naming-typedef-id='a4bc3012' visibility='default' filepath='include/linux/efi.h' line='201' column='1' id='4bcfdeda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='resolution' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sets_to_zero' type-id='f9b06939' visibility='default' filepath='include/linux/efi.h' line='204' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_set_time_t' type-id='c60add1e' filepath='include/linux/efi.h' line='576' column='1' id='f9110a14'/>
+      <typedef-decl name='efi_get_wakeup_time_t' type-id='39e463ea' filepath='include/linux/efi.h' line='577' column='1' id='50c6d8a2'/>
+      <typedef-decl name='efi_bool_t' type-id='f9b06939' filepath='include/linux/efi.h' line='46' column='1' id='471304a8'/>
+      <typedef-decl name='efi_set_wakeup_time_t' type-id='918f5beb' filepath='include/linux/efi.h' line='579' column='1' id='8d7ff53e'/>
+      <typedef-decl name='efi_set_virtual_address_map_t' type-id='d24eef2f' filepath='include/linux/efi.h' line='590' column='1' id='8bd72250'/>
+      <typedef-decl name='efi_memory_desc_t' type-id='60cb14c6' filepath='include/linux/efi.h' line='131' column='1' id='08f73f9b'/>
+      <class-decl name='__anonymous_struct__5' size-in-bits='320' is-struct='yes' is-anonymous='yes' naming-typedef-id='08f73f9b' visibility='default' filepath='include/linux/efi.h' line='124' column='1' id='60cb14c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attribute' type-id='91ce1af9' visibility='default' filepath='include/linux/efi.h' line='130' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_get_variable_t' type-id='184f0729' filepath='include/linux/efi.h' line='580' column='1' id='6dbdd24d'/>
+      <typedef-decl name='efi_char16_t' type-id='1dc6a898' filepath='include/linux/efi.h' line='47' column='1' id='297bd8d7'/>
+      <typedef-decl name='efi_guid_t' type-id='7ae02c0a' filepath='include/linux/efi.h' line='64' column='1' id='1a7f9ac1'/>
+      <typedef-decl name='efi_get_next_variable_t' type-id='11e91b85' filepath='include/linux/efi.h' line='582' column='1' id='60b9862b'/>
+      <typedef-decl name='efi_set_variable_t' type-id='896801a8' filepath='include/linux/efi.h' line='584' column='1' id='90f79ad1'/>
+      <typedef-decl name='efi_get_next_high_mono_count_t' type-id='16242329' filepath='include/linux/efi.h' line='587' column='1' id='b07b2619'/>
+      <typedef-decl name='efi_reset_system_t' type-id='1e4f4e6d' filepath='include/linux/efi.h' line='588' column='1' id='a343ff61'/>
+      <typedef-decl name='efi_update_capsule_t' type-id='0b50e12e' filepath='include/linux/efi.h' line='598' column='1' id='225a561d'/>
+      <typedef-decl name='efi_capsule_header_t' type-id='b74ee25a' filepath='include/linux/efi.h' line='138' column='1' id='09b56f45'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='224' is-struct='yes' is-anonymous='yes' naming-typedef-id='09b56f45' visibility='default' filepath='include/linux/efi.h' line='133' column='1' id='b74ee25a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='1a7f9ac1' visibility='default' filepath='include/linux/efi.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='headersize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='imagesize' type-id='19c2251e' visibility='default' filepath='include/linux/efi.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_query_capsule_caps_t' type-id='558c7602' filepath='include/linux/efi.h' line='601' column='1' id='0112baf0'/>
+      <typedef-decl name='efi_query_variable_info_t' type-id='23aa5fb5' filepath='include/linux/efi.h' line='594' column='1' id='69175bf8'/>
+      <typedef-decl name='efi_boot_services_t' type-id='934f2dd9' filepath='include/linux/efi.h' line='355' column='1' id='98e51d27'/>
+      <class-decl name='__anonymous_struct__7' size-in-bits='3008' is-struct='yes' is-anonymous='yes' naming-typedef-id='98e51d27' visibility='default' filepath='include/linux/efi.h' line='306' column='1' id='934f2dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='2285a0d7' visibility='default' filepath='include/linux/efi.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='raise_tpl' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='restore_tpl' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocate_pages' type-id='d222d59e' visibility='default' filepath='include/linux/efi.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free_pages' type-id='4826f043' visibility='default' filepath='include/linux/efi.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_memory_map' type-id='f5c4c531' visibility='default' filepath='include/linux/efi.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='allocate_pool' type-id='3fe787fe' visibility='default' filepath='include/linux/efi.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='free_pool' type-id='2e721e19' visibility='default' filepath='include/linux/efi.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='create_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_timer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wait_for_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='signal_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='close_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='check_event' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='install_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='reinstall_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='uninstall_protocol_interface' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='handle_protocol' type-id='cb69985f' visibility='default' filepath='include/linux/efi.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='__reserved' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='register_protocol_notify' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='locate_handle' type-id='b9c037ab' visibility='default' filepath='include/linux/efi.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='locate_device_path' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='install_configuration_table' type-id='031f8a6a' visibility='default' filepath='include/linux/efi.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='load_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='start_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exit' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='unload_image' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='exit_boot_services' type-id='a447b31e' visibility='default' filepath='include/linux/efi.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_next_monotonic_count' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='stall' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_watchdog_timer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='connect_controller' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='disconnect_controller' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='open_protocol' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='close_protocol' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='open_protocol_information' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='protocols_per_handle' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='locate_handle_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='locate_protocol' type-id='1193adac' visibility='default' filepath='include/linux/efi.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='install_multiple_protocol_interfaces' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='uninstall_multiple_protocol_interfaces' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='calculate_crc32' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='copy_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='set_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='create_event_ex' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='efi_physical_addr_t' type-id='91ce1af9' filepath='include/linux/efi.h' line='48' column='1' id='6d42dfa3'/>
+      <typedef-decl name='efi_handle_t' type-id='eaa32e2f' filepath='include/linux/efi.h' line='49' column='1' id='a5e590fa'/>
+      <class-decl name='efi_memory_map' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/efi.h' line='792' column='1' id='1dad91d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_map' type-id='2522883d' visibility='default' filepath='include/linux/efi.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_end' type-id='eaa32e2f' visibility='default' filepath='include/linux/efi.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_map' type-id='95e97e5e' visibility='default' filepath='include/linux/efi.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc_version' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='desc_size' type-id='7359adad' visibility='default' filepath='include/linux/efi.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late' type-id='b50a4934' visibility='default' filepath='include/linux/efi.h' line='799' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='471304a8' size-in-bits='64' id='b8e34fa5'/>
+      <pointer-type-def type-id='98e51d27' size-in-bits='64' id='447dc282'/>
+      <pointer-type-def type-id='09b56f45' size-in-bits='64' id='744dd502'/>
+      <pointer-type-def type-id='744dd502' size-in-bits='64' id='3e868df8'/>
+      <pointer-type-def type-id='297bd8d7' size-in-bits='64' id='dd5869f0'/>
+      <pointer-type-def type-id='b07b2619' size-in-bits='64' id='7ea36636'/>
+      <pointer-type-def type-id='60b9862b' size-in-bits='64' id='038aa726'/>
+      <pointer-type-def type-id='537afa70' size-in-bits='64' id='b6c6c0b9'/>
+      <pointer-type-def type-id='6dbdd24d' size-in-bits='64' id='a86f7daa'/>
+      <pointer-type-def type-id='50c6d8a2' size-in-bits='64' id='ce9ca351'/>
+      <pointer-type-def type-id='1a7f9ac1' size-in-bits='64' id='e4b4d1d6'/>
+      <pointer-type-def type-id='a5e590fa' size-in-bits='64' id='67ed349f'/>
+      <pointer-type-def type-id='08f73f9b' size-in-bits='64' id='ae05b432'/>
+      <pointer-type-def type-id='6d42dfa3' size-in-bits='64' id='e69cd7f6'/>
+      <pointer-type-def type-id='0112baf0' size-in-bits='64' id='ef9eae4d'/>
+      <pointer-type-def type-id='69175bf8' size-in-bits='64' id='25269d6f'/>
+      <pointer-type-def type-id='a343ff61' size-in-bits='64' id='bdb2559a'/>
+      <pointer-type-def type-id='50449fbd' size-in-bits='64' id='90150c16'/>
+      <pointer-type-def type-id='f9110a14' size-in-bits='64' id='235cec4d'/>
+      <pointer-type-def type-id='90f79ad1' size-in-bits='64' id='0f427eae'/>
+      <pointer-type-def type-id='8bd72250' size-in-bits='64' id='e48d4733'/>
+      <pointer-type-def type-id='8d7ff53e' size-in-bits='64' id='00aa9c6d'/>
+      <pointer-type-def type-id='b8c997be' size-in-bits='64' id='7e8eb77b'/>
+      <pointer-type-def type-id='a4bc3012' size-in-bits='64' id='ec8e2237'/>
+      <pointer-type-def type-id='dffd2b75' size-in-bits='64' id='f7369cc6'/>
+      <pointer-type-def type-id='225a561d' size-in-bits='64' id='9324451e'/>
+      <pointer-type-def type-id='960820a8' size-in-bits='64' id='031f8a6a'/>
+      <pointer-type-def type-id='d49fa262' size-in-bits='64' id='1193adac'/>
+      <pointer-type-def type-id='1a8eee07' size-in-bits='64' id='b9c037ab'/>
+      <pointer-type-def type-id='23d4ef1c' size-in-bits='64' id='d222d59e'/>
+      <pointer-type-def type-id='b45977dc' size-in-bits='64' id='3fe787fe'/>
+      <pointer-type-def type-id='ae26b3c3' size-in-bits='64' id='cb69985f'/>
+      <pointer-type-def type-id='6407f6f4' size-in-bits='64' id='a447b31e'/>
+      <pointer-type-def type-id='6a2c97a7' size-in-bits='64' id='4826f043'/>
+      <pointer-type-def type-id='967bf45d' size-in-bits='64' id='f5c4c531'/>
+      <pointer-type-def type-id='bfb08cad' size-in-bits='64' id='2e721e19'/>
+      <var-decl name='efi' type-id='f7bdefe9' mangled-name='efi' visibility='default' filepath='drivers/firmware/efi/efi.c' line='37' column='1' elf-symbol-id='efi'/>
+      <function-type size-in-bits='64' id='39e463ea'>
+        <parameter type-id='b8e34fa5'/>
+        <parameter type-id='b8e34fa5'/>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='558c7602'>
+        <parameter type-id='3e868df8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b50e12e'>
+        <parameter type-id='3e868df8'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='896801a8'>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='184f0729'>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960820a8'>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d49fa262'>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c60add1e'>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e6b81bc'>
+        <parameter type-id='f7369cc6'/>
+        <parameter type-id='ec8e2237'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a8eee07'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='67ed349f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23d4ef1c'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='e69cd7f6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b45977dc'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918f5beb'>
+        <parameter type-id='471304a8'/>
+        <parameter type-id='f7369cc6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae26b3c3'>
+        <parameter type-id='a5e590fa'/>
+        <parameter type-id='e4b4d1d6'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6407f6f4'>
+        <parameter type-id='a5e590fa'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a2c97a7'>
+        <parameter type-id='6d42dfa3'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23aa5fb5'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16242329'>
+        <parameter type-id='f9409001'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11e91b85'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='dd5869f0'/>
+        <parameter type-id='e4b4d1d6'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='967bf45d'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d24eef2f'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='ae05b432'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bfb08cad'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95398de2'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e4f4e6d'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95398de2'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='dd5869f0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <typedef-decl name='guid_t' type-id='8425539a' filepath='include/uapi/linux/uuid.h' line='25' column='1' id='7ae02c0a'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/firmware/efi/libstub/arm-stub.c' language='LANG_C89'>
+      <type-decl name='char' size-in-bits='8' id='a84c031d'/>
+      <type-decl name='int' size-in-bits='32' id='95e97e5e'/>
+      <type-decl name='unsigned long int' size-in-bits='64' id='7359adad'/>
+      <type-decl name='void' id='48b5725f'/>
+      <pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
+      <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+      <pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
+      <pointer-type-def type-id='96ee24a5' size-in-bits='64' id='585e1de9'/>
+      <pointer-type-def type-id='73a3fbc3' size-in-bits='64' id='97c3bf57'/>
+      <pointer-type-def type-id='48b5725f' size-in-bits='64' id='eaa32e2f'/>
+      <function-decl name='strstr' mangled-name='strstr' filepath='include/linux/string.h' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strstr'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='sort' mangled-name='sort' filepath='include/linux/sort.h' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sort'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='585e1de9'/>
+        <parameter type-id='97c3bf57'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='memcpy' filepath='arch/arm64/include/asm/string.h' line='35' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='96ee24a5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73a3fbc3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/firmware/efi/libstub/efi-stub-helper.c' language='LANG_C89'>
+      <function-decl name='strlen' filepath='arch/arm64/include/asm/string.h' line='22' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strncmp' filepath='arch/arm64/include/asm/string.h' line='19' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memcmp' filepath='arch/arm64/include/asm/string.h' line='28' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/firmware/efi/tpm.c' language='LANG_C89'>
+      <var-decl name='efi_tpm_final_log_size' type-id='95e97e5e' mangled-name='efi_tpm_final_log_size' visibility='default' filepath='drivers/firmware/efi/tpm.c' line='16' column='1' elf-symbol-id='efi_tpm_final_log_size'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gnss/core.c' language='LANG_C89'>
+      <class-decl name='gnss_device' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/linux/gnss.h' line='37' column='1' id='a272e179'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/gnss.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cdev' type-id='22f86351' visibility='default' filepath='include/linux/gnss.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/gnss.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='type' type-id='3c695ab8' visibility='default' filepath='include/linux/gnss.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/gnss.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/gnss.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='ops' type-id='b4a76368' visibility='default' filepath='include/linux/gnss.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/gnss.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disconnected' type-id='f0981eeb' visibility='default' filepath='include/linux/gnss.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='read_mutex' type-id='925167dc' visibility='default' filepath='include/linux/gnss.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='read_fifo' type-id='7664edcc' visibility='default' filepath='include/linux/gnss.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='read_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/gnss.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='write_mutex' type-id='925167dc' visibility='default' filepath='include/linux/gnss.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='write_buf' type-id='26a90f95' visibility='default' filepath='include/linux/gnss.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gnss_type' filepath='include/linux/gnss.h' line='21' column='1' id='3c695ab8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='GNSS_TYPE_NMEA' value='0'/>
+        <enumerator name='GNSS_TYPE_SIRF' value='1'/>
+        <enumerator name='GNSS_TYPE_UBX' value='2'/>
+        <enumerator name='GNSS_TYPE_MTK' value='3'/>
+        <enumerator name='GNSS_TYPE_COUNT' value='4'/>
+      </enum-decl>
+      <class-decl name='gnss_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/gnss.h' line='30' column='1' id='9925a3d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='96aaf495' visibility='default' filepath='include/linux/gnss.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='663e4c8c' visibility='default' filepath='include/linux/gnss.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_raw' type-id='fe2cd2b6' visibility='default' filepath='include/linux/gnss.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9925a3d9' const='yes' id='f320cfd2'/>
+      <pointer-type-def type-id='f320cfd2' size-in-bits='64' id='b4a76368'/>
+      <pointer-type-def type-id='a272e179' size-in-bits='64' id='94411a61'/>
+      <pointer-type-def type-id='7aaadab9' size-in-bits='64' id='96aaf495'/>
+      <pointer-type-def type-id='89407a8c' size-in-bits='64' id='fe2cd2b6'/>
+      <pointer-type-def type-id='75d1367a' size-in-bits='64' id='663e4c8c'/>
+      <function-decl name='gnss_allocate_device' mangled-name='gnss_allocate_device' filepath='drivers/gnss/core.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_allocate_device'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/gnss/core.c' line='224' column='1'/>
+        <return type-id='94411a61'/>
+      </function-decl>
+      <function-decl name='gnss_register_device' mangled-name='gnss_register_device' filepath='drivers/gnss/core.c' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_register_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='283' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gnss_put_device' mangled-name='gnss_put_device' filepath='drivers/gnss/core.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_put_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='277' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gnss_insert_raw' mangled-name='gnss_insert_raw' filepath='drivers/gnss/core.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_insert_raw'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='320' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='drivers/gnss/core.c' line='320' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/gnss/core.c' line='321' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gnss_deregister_device' mangled-name='gnss_deregister_device' filepath='drivers/gnss/core.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gnss_deregister_device'>
+        <parameter type-id='94411a61' name='gdev' filepath='drivers/gnss/core.c' line='301' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='7664edcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='df24571d' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='5e6516ee' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='7aaadab9'>
+        <parameter type-id='94411a61'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89407a8c'>
+        <parameter type-id='94411a61'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75d1367a'>
+        <parameter type-id='94411a61'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='df24571d'>
+        <data-member access='public'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='type' type-id='cf536864' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='const_type' type-id='354f7eb9' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr_const' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='e84913bd' size-in-bits='64' id='4209d6b5'/>
+      <class-decl name='__kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='44' column='1' id='bbbc6c1e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='esize' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpio/gpiolib-devres.c' language='LANG_C89'>
+      <function-decl name='devm_gpiod_get_optional' mangled-name='devm_gpiod_get_optional' filepath='drivers/gpio/gpiolib-devres.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='74' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='75' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='76' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpiod_get_index' mangled-name='devm_gpiod_get_index' filepath='drivers/gpio/gpiolib-devres.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get_index'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='93' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='94' column='1'/>
+        <parameter type-id='f0981eeb' name='idx' filepath='drivers/gpio/gpiolib-devres.c' line='95' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='96' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpiod_get' mangled-name='devm_gpiod_get' filepath='drivers/gpio/gpiolib-devres.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiod_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='56' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='57' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='58' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='devm_gpio_request_one' mangled-name='devm_gpio_request_one' filepath='drivers/gpio/gpiolib-devres.c' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_request_one'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='456' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-devres.c' line='456' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='457' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-devres.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_gpio_request' mangled-name='devm_gpio_request' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_request'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-devres.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_gpio_free' mangled-name='devm_gpio_free' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpio_free'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-devres.c' line='489' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_fwnode_get_index_gpiod_from_child' mangled-name='devm_fwnode_get_index_gpiod_from_child' filepath='drivers/gpio/gpiolib-devres.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_fwnode_get_index_gpiod_from_child'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib-devres.c' line='203' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib-devres.c' line='204' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/gpio/gpiolib-devres.c' line='204' column='1'/>
+        <parameter type-id='4a935625' name='child' filepath='drivers/gpio/gpiolib-devres.c' line='205' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib-devres.c' line='206' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-devres.c' line='207' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <enum-decl name='gpiod_flags' filepath='include/linux/gpio/consumer.h' line='48' column='1' id='38d4936d'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpio/gpiolib-legacy.c' language='LANG_C89'>
+      <class-decl name='gpio' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/gpio.h' line='50' column='1' id='84d91c62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/gpio.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='84d91c62' const='yes' id='69df97a3'/>
+      <pointer-type-def type-id='69df97a3' size-in-bits='64' id='33fb8cab'/>
+      <function-decl name='gpio_request_one' mangled-name='gpio_request_one' filepath='drivers/gpio/gpiolib-legacy.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_request_one'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-legacy.c' line='21' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/gpio/gpiolib-legacy.c' line='21' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-legacy.c' line='21' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpio_request' mangled-name='gpio_request' filepath='drivers/gpio/gpiolib-legacy.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_request'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-legacy.c' line='68' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/gpio/gpiolib-legacy.c' line='68' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpio_free_array' mangled-name='gpio_free_array' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_free_array'>
+        <parameter type-id='33fb8cab' name='array' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='drivers/gpio/gpiolib-legacy.c' line='108' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpio_free' mangled-name='gpio_free' filepath='drivers/gpio/gpiolib-legacy.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_free'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib-legacy.c' line='9' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpio/gpiolib-of.c' language='LANG_C89'>
+      <enum-decl name='of_gpio_flags' filepath='include/linux/of_gpio.h' line='26' column='1' id='be0d5cf5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OF_GPIO_ACTIVE_LOW' value='1'/>
+        <enumerator name='OF_GPIO_SINGLE_ENDED' value='2'/>
+        <enumerator name='OF_GPIO_OPEN_DRAIN' value='4'/>
+        <enumerator name='OF_GPIO_TRANSITORY' value='8'/>
+        <enumerator name='OF_GPIO_PULL_UP' value='16'/>
+        <enumerator name='OF_GPIO_PULL_DOWN' value='32'/>
+      </enum-decl>
+      <pointer-type-def type-id='be0d5cf5' size-in-bits='64' id='38fe9344'/>
+      <function-decl name='of_get_named_gpio_flags' mangled-name='of_get_named_gpio_flags' filepath='drivers/gpio/gpiolib-of.c' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_named_gpio_flags'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/gpio/gpiolib-of.c' line='288' column='1'/>
+        <parameter type-id='80f4b756' name='list_name' filepath='drivers/gpio/gpiolib-of.c' line='288' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/gpio/gpiolib-of.c' line='289' column='1'/>
+        <parameter type-id='38fe9344' name='flags' filepath='drivers/gpio/gpiolib-of.c' line='289' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpio/gpiolib.c' language='LANG_C89'>
+      <class-decl name='gpio_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='96' column='1' id='63b74212'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gdev' type-id='fb7dc22d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/gpio/gpiolib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='gpiod_flags' filepath='include/linux/gpio/consumer.h' line='48' column='1' id='38d4936d'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='63b74212' const='yes' id='70bf28f5'/>
+      <pointer-type-def type-id='70bf28f5' size-in-bits='64' id='5bed570d'/>
+      <pointer-type-def type-id='63b74212' size-in-bits='64' id='26760480'/>
+      <pointer-type-def type-id='eacd3fb9' size-in-bits='64' id='7a52b9cd'/>
+      <function-decl name='gpio_to_desc' mangled-name='gpio_to_desc' filepath='drivers/gpio/gpiolib.c' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpio_to_desc'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/gpio/gpiolib.c' line='108' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='gpiochip_add_data_with_key' mangled-name='gpiochip_add_data_with_key' filepath='drivers/gpio/gpiolib.c' line='1267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_add_data_with_key'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='1267' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpio/gpiolib.c' line='1267' column='1'/>
+        <parameter type-id='a57283f9' name='lock_key' filepath='drivers/gpio/gpiolib.c' line='1268' column='1'/>
+        <parameter type-id='a57283f9' name='request_key' filepath='drivers/gpio/gpiolib.c' line='1269' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_add_pin_range' mangled-name='gpiochip_add_pin_range' filepath='drivers/gpio/gpiolib.c' line='2604' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_add_pin_range'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2604' column='1'/>
+        <parameter type-id='80f4b756' name='pinctl_name' filepath='drivers/gpio/gpiolib.c' line='2604' column='1'/>
+        <parameter type-id='f0981eeb' name='gpio_offset' filepath='drivers/gpio/gpiolib.c' line='2605' column='1'/>
+        <parameter type-id='f0981eeb' name='pin_offset' filepath='drivers/gpio/gpiolib.c' line='2605' column='1'/>
+        <parameter type-id='f0981eeb' name='npins' filepath='drivers/gpio/gpiolib.c' line='2606' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_remove' mangled-name='gpiochip_remove' filepath='drivers/gpio/gpiolib.c' line='1496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_remove'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='1496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiochip_lock_as_irq' mangled-name='gpiochip_lock_as_irq' filepath='drivers/gpio/gpiolib.c' line='3875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_lock_as_irq'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='3875' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='3875' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_unlock_as_irq' mangled-name='gpiochip_unlock_as_irq' filepath='drivers/gpio/gpiolib.c' line='3929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_unlock_as_irq'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='3929' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='3929' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_to_irq' mangled-name='gpiod_to_irq' filepath='drivers/gpio/gpiolib.c' line='3839' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_to_irq'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3839' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_to_chip' mangled-name='gpiod_to_chip' filepath='drivers/gpio/gpiolib.c' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_to_chip'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='174' column='1'/>
+        <return type-id='e324928d'/>
+      </function-decl>
+      <function-decl name='gpiod_set_value_cansleep' mangled-name='gpiod_set_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_value_cansleep'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='4157' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='4157' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_set_value' mangled-name='gpiod_set_value' filepath='drivers/gpio/gpiolib.c' line='3739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_value'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3739' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_set_raw_value_cansleep' mangled-name='gpiod_set_raw_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_raw_value_cansleep'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='4139' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='4139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_set_raw_value' mangled-name='gpiod_set_raw_value' filepath='drivers/gpio/gpiolib.c' line='3698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_raw_value'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3698' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3698' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiod_set_debounce' mangled-name='gpiod_set_debounce' filepath='drivers/gpio/gpiolib.c' line='3155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_debounce'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3155' column='1'/>
+        <parameter type-id='f0981eeb' name='debounce' filepath='drivers/gpio/gpiolib.c' line='3155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_set_consumer_name' mangled-name='gpiod_set_consumer_name' filepath='drivers/gpio/gpiolib.c' line='3816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_set_consumer_name'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3816' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpio/gpiolib.c' line='3816' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_is_active_low' mangled-name='gpiod_is_active_low' filepath='drivers/gpio/gpiolib.c' line='3224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_is_active_low'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value_cansleep' mangled-name='gpiod_get_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value_cansleep'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='4059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_value' mangled-name='gpiod_get_value' filepath='drivers/gpio/gpiolib.c' line='3429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_value'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3429' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value_cansleep' mangled-name='gpiod_get_raw_value_cansleep' filepath='drivers/gpio/gpiolib.c' line='4042' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value_cansleep'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='4042' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_raw_value' mangled-name='gpiod_get_raw_value' filepath='drivers/gpio/gpiolib.c' line='3410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_raw_value'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_optional' mangled-name='gpiod_get_optional' filepath='drivers/gpio/gpiolib.c' line='4443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib.c' line='4443' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib.c' line='4444' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib.c' line='4445' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_input' mangled-name='gpiod_direction_input' filepath='drivers/gpio/gpiolib.c' line='2958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_input'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='2958' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_output' mangled-name='gpiod_direction_output' filepath='drivers/gpio/gpiolib.c' line='3082' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_output'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3082' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3082' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get_direction' mangled-name='gpiod_get_direction' filepath='drivers/gpio/gpiolib.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get_direction'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='214' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_get' mangled-name='gpiod_get' filepath='drivers/gpio/gpiolib.c' line='4426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib.c' line='4426' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/gpio/gpiolib.c' line='4426' column='1'/>
+        <parameter type-id='38d4936d' name='flags' filepath='drivers/gpio/gpiolib.c' line='4427' column='1'/>
+        <return type-id='26760480'/>
+      </function-decl>
+      <function-decl name='gpiod_direction_output_raw' mangled-name='gpiod_direction_output_raw' filepath='drivers/gpio/gpiolib.c' line='3063' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_direction_output_raw'>
+        <parameter type-id='26760480' name='desc' filepath='drivers/gpio/gpiolib.c' line='3063' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/gpio/gpiolib.c' line='3063' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiod_cansleep' mangled-name='gpiod_cansleep' filepath='drivers/gpio/gpiolib.c' line='3804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiod_cansleep'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='3804' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_populate_parent_fwspec_fourcell' mangled-name='gpiochip_populate_parent_fwspec_fourcell' filepath='drivers/gpio/gpiolib.c' line='2008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_populate_parent_fwspec_fourcell'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2008' column='1'/>
+        <parameter type-id='2869bb38' name='fwspec' filepath='drivers/gpio/gpiolib.c' line='2009' column='1'/>
+        <parameter type-id='f0981eeb' name='parent_hwirq' filepath='drivers/gpio/gpiolib.c' line='2010' column='1'/>
+        <parameter type-id='f0981eeb' name='parent_type' filepath='drivers/gpio/gpiolib.c' line='2011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiochip_line_is_irq' mangled-name='gpiochip_line_is_irq' filepath='drivers/gpio/gpiolib.c' line='3973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_line_is_irq'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='3973' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='3973' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='gpiochip_get_data' mangled-name='gpiochip_get_data' filepath='drivers/gpio/gpiolib.c' line='1484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_get_data'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='1484' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gpiochip_generic_request' mangled-name='gpiochip_generic_request' filepath='drivers/gpio/gpiolib.c' line='2502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_generic_request'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2502' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='2502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_generic_free' mangled-name='gpiochip_generic_free' filepath='drivers/gpio/gpiolib.c' line='2513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_generic_free'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2513' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='2513' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gpiochip_generic_config' mangled-name='gpiochip_generic_config' filepath='drivers/gpio/gpiolib.c' line='2525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_generic_config'>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='2525' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpio/gpiolib.c' line='2525' column='1'/>
+        <parameter type-id='7359adad' name='config' filepath='drivers/gpio/gpiolib.c' line='2526' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gpiochip_find' mangled-name='gpiochip_find' filepath='drivers/gpio/gpiolib.c' line='1600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gpiochip_find'>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpio/gpiolib.c' line='1600' column='1'/>
+        <parameter type-id='7a52b9cd' name='match' filepath='drivers/gpio/gpiolib.c' line='1601' column='1'/>
+        <return type-id='e324928d'/>
+      </function-decl>
+      <function-decl name='devm_gpiochip_add_data' mangled-name='devm_gpiochip_add_data' filepath='drivers/gpio/gpiolib.c' line='1565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_gpiochip_add_data'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpio/gpiolib.c' line='1565' column='1'/>
+        <parameter type-id='e324928d' name='chip' filepath='drivers/gpio/gpiolib.c' line='1565' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpio/gpiolib.c' line='1566' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='desc_to_gpio' mangled-name='desc_to_gpio' filepath='drivers/gpio/gpiolib.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='desc_to_gpio'>
+        <parameter type-id='5bed570d' name='desc' filepath='drivers/gpio/gpiolib.c' line='163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='eacd3fb9'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='a87c488a' size-in-bits='64' id='2869bb38'/>
+      <class-decl name='irq_fwspec' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='64' column='1' id='a87c488a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param_count' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdomain.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='param' type-id='02fdec64' visibility='default' filepath='include/linux/irqdomain.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_atomic.c' language='LANG_C89'>
+      <function-decl name='drm_atomic_private_obj_init' mangled-name='drm_atomic_private_obj_init' filepath='drivers/gpu/drm/drm_atomic.c' line='722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_private_obj_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='722' column='1'/>
+        <parameter type-id='11c98e9a' name='obj' filepath='drivers/gpu/drm/drm_atomic.c' line='723' column='1'/>
+        <parameter type-id='4ea020ae' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='724' column='1'/>
+        <parameter type-id='515fa1af' name='funcs' filepath='drivers/gpu/drm/drm_atomic.c' line='725' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_private_obj_state' mangled-name='drm_atomic_get_private_obj_state' filepath='drivers/gpu/drm/drm_atomic.c' line='766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_private_obj_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='766' column='1'/>
+        <parameter type-id='11c98e9a' name='obj' filepath='drivers/gpu/drm/drm_atomic.c' line='767' column='1'/>
+        <return type-id='4ea020ae'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_plane_state' mangled-name='drm_atomic_get_plane_state' filepath='drivers/gpu/drm/drm_atomic.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_plane_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='463' column='1'/>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic.c' line='464' column='1'/>
+        <return type-id='d0835005'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_init' mangled-name='drm_atomic_state_init' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='82' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_state_free' mangled-name='__drm_atomic_state_free' filepath='drivers/gpu/drm/drm_atomic.c' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_state_free'>
+        <parameter type-id='aa29ecab' name='ref' filepath='drivers/gpu/drm/drm_atomic.c' line='256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_crtc_state' mangled-name='drm_atomic_get_crtc_state' filepath='drivers/gpu/drm/drm_atomic.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_crtc_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='290' column='1'/>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic.c' line='291' column='1'/>
+        <return type-id='35078cb9'/>
+      </function-decl>
+      <function-decl name='drm_atomic_get_connector_state' mangled-name='drm_atomic_get_connector_state' filepath='drivers/gpu/drm/drm_atomic.c' line='940' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_get_connector_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='940' column='1'/>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic.c' line='941' column='1'/>
+        <return type-id='249ef586'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_default_clear' mangled-name='drm_atomic_state_default_clear' filepath='drivers/gpu/drm/drm_atomic.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_default_clear'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_state_dump' mangled-name='drm_state_dump' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_state_dump'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1'/>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_atomic.c' line='1502' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_default_release' mangled-name='drm_atomic_state_default_release' filepath='drivers/gpu/drm/drm_atomic.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_default_release'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='63' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_crtc_commit_free' mangled-name='__drm_crtc_commit_free' filepath='drivers/gpu/drm/drm_atomic.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_crtc_commit_free'>
+        <parameter type-id='aa29ecab' name='kref' filepath='drivers/gpu/drm/drm_atomic.c' line='45' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_clear' mangled-name='drm_atomic_state_clear' filepath='drivers/gpu/drm/drm_atomic.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_clear'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='237' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_state_alloc' mangled-name='drm_atomic_state_alloc' filepath='drivers/gpu/drm/drm_atomic.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_state_alloc'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic.c' line='118' column='1'/>
+        <return type-id='e3dd029e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_private_obj_fini' mangled-name='drm_atomic_private_obj_fini' filepath='drivers/gpu/drm/drm_atomic.c' line='744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_private_obj_fini'>
+        <parameter type-id='11c98e9a' name='obj' filepath='drivers/gpu/drm/drm_atomic.c' line='744' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_commit' mangled-name='drm_atomic_commit' filepath='drivers/gpu/drm/drm_atomic.c' line='1214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_commit'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic.c' line='1214' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='6d7d60df' size-in-bits='64' id='515fa1af'/>
+      <pointer-type-def type-id='8bb9a8e8' size-in-bits='64' id='e3dd029e'/>
+      <pointer-type-def type-id='f02c18fa' size-in-bits='64' id='4db02c58'/>
+      <pointer-type-def type-id='5ad3f0d0' size-in-bits='64' id='249ef586'/>
+      <pointer-type-def type-id='3f5f978b' size-in-bits='64' id='b64ad7cb'/>
+      <pointer-type-def type-id='ea65fb21' size-in-bits='64' id='35078cb9'/>
+      <pointer-type-def type-id='e96cc76d' size-in-bits='64' id='8898134d'/>
+      <pointer-type-def type-id='60f2213f' size-in-bits='64' id='a6711537'/>
+      <pointer-type-def type-id='a1700eb5' size-in-bits='64' id='d0835005'/>
+      <pointer-type-def type-id='68b6a809' size-in-bits='64' id='7ac48c21'/>
+      <pointer-type-def type-id='cc3a4f0c' size-in-bits='64' id='11c98e9a'/>
+      <pointer-type-def type-id='b281e308' size-in-bits='64' id='4ea020ae'/>
+      <class-decl name='drm_atomic_state' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='316' column='1' id='8bb9a8e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_atomic.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allow_modeset' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='legacy_cursor_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='async_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='duplicated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='planes' type-id='356fd446' visibility='default' filepath='include/drm/drm_atomic.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtcs' type-id='611a28de' visibility='default' filepath='include/drm/drm_atomic.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='connectors' type-id='6d26c72b' visibility='default' filepath='include/drm/drm_atomic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_private_objs' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_objs' type-id='258e7e75' visibility='default' filepath='include/drm/drm_atomic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_atomic.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fake_commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_atomic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='commit_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_atomic.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector' size-in-bits='14208' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1087' column='1' id='f02c18fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_connector.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr' type-id='89a2612a' visibility='default' filepath='include/drm/drm_connector.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_connector.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_connector.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_connector.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='connector_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='connector_type_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='interlace_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='doublescan_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='ycbcr_420_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='registration_state' type-id='0b8fe6b9' visibility='default' filepath='include/drm/drm_connector.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='status' type-id='f7b0e1b4' visibility='default' filepath='include/drm/drm_connector.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='probed_modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='display_info' type-id='228c7c6c' visibility='default' filepath='include/drm/drm_connector.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='funcs' type-id='3fb29739' visibility='default' filepath='include/drm/drm_connector.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='edid_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_connector.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='vrr_capable_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='colorspace_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='path_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='max_bpc_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='polled' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='dpms' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='helper_private' type-id='90133bf8' visibility='default' filepath='include/drm/drm_connector.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cmdline_mode' type-id='458106cb' visibility='default' filepath='include/drm/drm_connector.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='override_edid' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='encoder_ids' type-id='6f7eb9e8' visibility='default' filepath='include/drm/drm_connector.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='eld' type-id='c768f32d' visibility='default' filepath='include/drm/drm_connector.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='latency_present' type-id='86c49187' visibility='default' filepath='include/drm/drm_connector.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='video_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='audio_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='ddc' type-id='b9af02c3' visibility='default' filepath='include/drm/drm_connector.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='null_edid_counter' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='bad_edid_counter' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='edid_corrupt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13448'>
+          <var-decl name='real_edid_checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_connector.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_connector.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='tile_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='has_tile' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='tile_group' type-id='c6c44b9f' visibility='default' filepath='include/drm/drm_connector.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='tile_is_single_monitor' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13832'>
+          <var-decl name='num_h_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13840'>
+          <var-decl name='num_v_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13848'>
+          <var-decl name='tile_h_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13856'>
+          <var-decl name='tile_v_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13872'>
+          <var-decl name='tile_h_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='tile_v_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='free_node' type-id='c5ccfee8' visibility='default' filepath='include/drm/drm_connector.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='hdr_sink_metadata' type-id='b459f8ff' visibility='default' filepath='include/drm/drm_connector.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='panel' type-id='c5491077' visibility='default' filepath='include/drm/drm_connector.h' line='1430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='530' column='1' id='5ad3f0d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_connector.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='best_encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='link_status' type-id='a28dfadd' visibility='default' filepath='include/drm/drm_connector.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_connector.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_connector.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tv' type-id='25b5f0d7' visibility='default' filepath='include/drm/drm_connector.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='self_refresh_aware' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_connector.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hdcp_content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='scaling_mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='content_protection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='colorspace' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='writeback_job' type-id='7b4ee155' visibility='default' filepath='include/drm/drm_connector.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_requested_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='max_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hdr_output_metadata' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='664' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc' size-in-bits='14528' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='879' column='1' id='3f5f978b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_crtc.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_crtc.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_crtc.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_crtc.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_crtc.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='primary' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cursor' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='cursor_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cursor_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='funcs' type-id='7236c5c8' visibility='default' filepath='include/drm/drm_crtc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='gamma_size' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='gamma_store' type-id='8a121f49' visibility='default' filepath='include/drm/drm_crtc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='helper_private' type-id='423f39eb' visibility='default' filepath='include/drm/drm_crtc.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_crtc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_crtc.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='commit_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='commit_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_crtc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='crc' type-id='3bcab18a' visibility='default' filepath='include/drm/drm_crtc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14112'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_crtc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_crtc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='self_refresh_data' type-id='fa013de0' visibility='default' filepath='include/drm/drm_crtc.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_state' size-in-bits='4032' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='100' column='1' id='ea65fb21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='planes_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='mode_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='active_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='connectors_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='zpos_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='color_mgmt_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_vblank' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plane_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connector_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='encoder_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adjusted_mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='mode_blob' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='degamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ctm' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='gamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='target_vblank' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='async_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3816'>
+          <var-decl name='vrr_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='self_refresh_active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_crtc.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_crtc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_crtc.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_device' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/drm/drm_device.h' line='53' column='1' id='e96cc76d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='if_version' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_device.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='1d52bc4d' visibility='default' filepath='include/drm/drm_device.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='primary' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='render' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_device.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='unplugged' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='anon_inode' type-id='7e666abe' visibility='default' filepath='include/drm/drm_device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='struct_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='open_count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='filelist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='filelist_internal' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='clientlist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='clientlist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='irq_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vblank_disable_immediate' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vblank' type-id='04d2f8d2' visibility='default' filepath='include/drm/drm_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vblank_time_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='vbl_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vblank_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='agp' type-id='c137ea76' visibility='default' filepath='include/drm/drm_device.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pdev' type-id='85196e3f' visibility='default' filepath='include/drm/drm_device.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='num_crtcs' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_device.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mode_config' type-id='5052051f' visibility='default' filepath='include/drm/drm_device.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='object_name_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='object_name_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_device.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='vma_offset_manager' type-id='0c6d12d5' visibility='default' filepath='include/drm/drm_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vram_mm' type-id='dbdf0f9e' visibility='default' filepath='include/drm/drm_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='switch_power_state' type-id='40bb3c00' visibility='default' filepath='include/drm/drm_device.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='fb_helper' type-id='147b8c0a' visibility='default' filepath='include/drm/drm_device.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='556' column='1' id='60f2213f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_plane.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_plane.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_plane.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_plane.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_plane.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='format_types' type-id='90421557' visibility='default' filepath='include/drm/drm_plane.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='format_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='format_default' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='modifiers' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_plane.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='modifier_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='old_fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='funcs' type-id='cfd5d066' visibility='default' filepath='include/drm/drm_plane.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_plane.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='type' type-id='5eed3c85' visibility='default' filepath='include/drm/drm_plane.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9824'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='helper_private' type-id='affc31e5' visibility='default' filepath='include/drm/drm_plane.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_plane.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='alpha_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='zpos_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='rotation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='blend_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='color_encoding_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='color_range_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='707' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='47' column='1' id='a1700eb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plane' type-id='a6711537' visibility='default' filepath='include/drm/drm_plane.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_plane.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtc_x' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='crtc_y' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='crtc_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='crtc_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='src_x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='src_y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='src_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alpha' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_plane.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='pixel_blend_mode' type-id='149c6638' visibility='default' filepath='include/drm/drm_plane.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rotation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='normalized_zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='color_encoding' type-id='e57e5f2b' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='color_range' type-id='322e1b47' visibility='default' filepath='include/drm/drm_plane.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_damage_clips' type-id='c4126d52' visibility='default' filepath='include/drm/drm_plane.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='src' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dst' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='visible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_plane.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_plane.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_printer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_print.h' line='72' column='1' id='68b6a809'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='printfn' type-id='ef76b4f1' visibility='default' filepath='include/drm/drm_print.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='puts' type-id='12dffdbb' visibility='default' filepath='include/drm/drm_print.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_print.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/drm/drm_print.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_obj' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='243' column='1' id='cc3a4f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_atomic.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_atomic.h' line='266' 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='289' column='1' id='b281e308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_atomic.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6110f5ec' const='yes' id='6d7d60df'/>
+      <pointer-type-def type-id='45f4b23b' size-in-bits='64' id='6d26c72b'/>
+      <pointer-type-def type-id='b35335c8' size-in-bits='64' id='611a28de'/>
+      <pointer-type-def type-id='a79398e0' size-in-bits='64' id='356fd446'/>
+      <pointer-type-def type-id='99c97f55' size-in-bits='64' id='258e7e75'/>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='16' id='86c49187'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='drm_cmdline_mode' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='968' column='1' id='458106cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_connector.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='refresh_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='bpp_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='xres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rb' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='interlace' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='cvt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='440'>
+          <var-decl name='margins' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rotation_reflection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tv_margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='1076' column='1'/>
+        </data-member>
+      </class-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='3bcab18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='80f4b756' 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='b50a4934' 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='b50a4934' 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='54a031e1' 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='95e97e5e' 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='95e97e5e' 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='b59d7dce' 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='b5ab048f' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_info' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='366' column='1' id='228c7c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpc' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subpixel_order' type-id='a93e6dcd' visibility='default' filepath='include/drm/drm_connector.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='panel_orientation' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='color_formats' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_formats' type-id='aded214c' visibility='default' filepath='include/drm/drm_connector.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_bus_formats' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_tmds_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dvi_dual' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='has_hdmi_infoframe' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='rgb_quant_range_selectable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='edid_hdmi_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cea_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hdmi' type-id='452748b2' visibility='default' filepath='include/drm/drm_connector.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='non_desktop' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='468' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_mode' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/drm_modes.h' line='224' column='1' id='55efd1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_modes.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='4fb62cb0' visibility='default' filepath='include/drm/drm_modes.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vscan' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='width_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='height_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='crtc_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='crtc_hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crtc_hblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='crtc_hblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crtc_hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='crtc_hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crtc_htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='crtc_hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='crtc_vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='crtc_vblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crtc_vblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='crtc_vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc_vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='crtc_vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='private' type-id='7292109c' visibility='default' filepath='include/drm/drm_modes.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='vrefresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hsync' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_modes.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='export_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_mode_config' size-in-bits='9152' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='358' column='1' id='5052051f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connection_mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_mode_config.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_mode_config.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='idr_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tile_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='num_fb' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='connector_list_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_mode_config.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='connector_ida' type-id='46ce60fb' visibility='default' filepath='include/drm/drm_mode_config.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='connector_free_list' type-id='77df194e' visibility='default' filepath='include/drm/drm_mode_config.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='connector_free_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_mode_config.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='num_encoder' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='encoder_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='num_total_plane' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='plane_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_crtc' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='crtc_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='property_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='privobj_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='min_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='min_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='max_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='funcs' type-id='3f50936e' visibility='default' filepath='include/drm/drm_mode_config.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='fb_base' type-id='acc63fdf' visibility='default' filepath='include/drm/drm_mode_config.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='poll_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3720'>
+          <var-decl name='poll_running' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3728'>
+          <var-decl name='delayed_event' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='output_poll_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_mode_config.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='blob_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='property_blob_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='edid_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dpms_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='path_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tile_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='link_status_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='plane_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='prop_src_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='prop_src_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='prop_src_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='prop_src_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prop_crtc_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='prop_crtc_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='prop_crtc_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='prop_crtc_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='prop_fb_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='prop_in_fence_fd' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='prop_out_fence_ptr' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='prop_crtc_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='prop_fb_damage_clips' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='prop_active' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='prop_mode_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='prop_vrr_enabled' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dvi_i_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='dvi_i_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='tv_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='tv_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='tv_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='tv_left_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='tv_right_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='tv_top_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tv_bottom_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='tv_brightness_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='tv_contrast_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='tv_flicker_reduction_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='tv_overscan_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='tv_saturation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tv_hue_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='aspect_ratio_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='degamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='degamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ctm_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='gamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='gamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='suggested_x_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='suggested_y_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='non_desktop_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='panel_orientation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='writeback_fb_id_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='writeback_pixel_formats_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='writeback_out_fence_ptr_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='hdr_output_metadata_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='content_protection_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hdcp_content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='preferred_depth' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='prefer_shadow' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='prefer_shadow_fbdev' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8840'>
+          <var-decl name='quirk_addfb_prefer_xbgr_30bpp' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8848'>
+          <var-decl name='quirk_addfb_prefer_host_byte_order' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8856'>
+          <var-decl name='async_page_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='allow_fb_modifiers' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='normalize_zpos' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='modifiers_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cursor_width' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='cursor_height' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='suspend_state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_mode_config.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='helper_private' type-id='dc79526d' visibility='default' filepath='include/drm/drm_mode_config.h' line='929' 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='350f4182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='8f92235e' 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='8f92235e' 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='c353cb3e' 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='400fb07b' 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='16575f26' visibility='default' filepath='include/drm/drm_mode_object.h' line='60' 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='ae5fc04a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='45793a97' 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='72f469ec' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_object_properties' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='67' column='1' id='970d3828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' 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='53f04f9e' visibility='default' filepath='include/drm/drm_mode_object.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='values' type-id='ed4ceada' visibility='default' filepath='include/drm/drm_mode_object.h' line='102' 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='198' column='1' id='6110f5ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_duplicate_state' type-id='a20ce8b2' visibility='default' filepath='include/drm/drm_atomic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='atomic_destroy_state' type-id='dc18a9b0' visibility='default' filepath='include/drm/drm_atomic.h' line='217' column='1'/>
+        </data-member>
+      </class-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='4ccdd8a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_tv_connector_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='515' column='1' id='25b5f0d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subconnector' type-id='b590704f' visibility='default' filepath='include/drm/drm_connector.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='brightness' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='contrast' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flicker_reduction' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='overscan' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saturation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hue' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_sink_metadata' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='375' column='1' id='b459f8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metadata_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hdmi.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='c778239e' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f508b3a9' size-in-bits='64' id='3fb29739'/>
+      <pointer-type-def type-id='3ab32f02' size-in-bits='64' id='90133bf8'/>
+      <pointer-type-def type-id='a192e032' size-in-bits='64' id='7236c5c8'/>
+      <pointer-type-def type-id='d9de7d63' size-in-bits='64' id='423f39eb'/>
+      <pointer-type-def type-id='bdf845e8' size-in-bits='64' id='cfd5d066'/>
+      <pointer-type-def type-id='5b7f098d' size-in-bits='64' id='affc31e5'/>
+      <pointer-type-def type-id='874fb8c0' size-in-bits='64' id='c137ea76'/>
+      <pointer-type-def type-id='09d6e909' size-in-bits='64' id='3f40b771'/>
+      <pointer-type-def type-id='73303b8d' size-in-bits='64' id='1d52bc4d'/>
+      <pointer-type-def type-id='d12f4a1d' size-in-bits='64' id='74d89ebd'/>
+      <pointer-type-def type-id='55b7e9ac' size-in-bits='64' id='147b8c0a'/>
+      <pointer-type-def type-id='a0eb3346' size-in-bits='64' id='7b332e1c'/>
+      <pointer-type-def type-id='f8a4685d' size-in-bits='64' id='07df1a3d'/>
+      <pointer-type-def type-id='d5cb77a8' size-in-bits='64' id='6c3b3f8e'/>
+      <pointer-type-def type-id='118c2af9' size-in-bits='64' id='d1499e71'/>
+      <pointer-type-def type-id='b9675e9f' size-in-bits='64' id='c5491077'/>
+      <pointer-type-def type-id='64249e24' size-in-bits='64' id='6301fad2'/>
+      <pointer-type-def type-id='811caa36' size-in-bits='64' id='26ea5d4c'/>
+      <pointer-type-def type-id='3dfb1294' size-in-bits='64' id='c4126d52'/>
+      <pointer-type-def type-id='12506762' size-in-bits='64' id='fa013de0'/>
+      <pointer-type-def type-id='edb008f7' size-in-bits='64' id='c6c44b9f'/>
+      <pointer-type-def type-id='e5ebb0e4' size-in-bits='64' id='04d2f8d2'/>
+      <pointer-type-def type-id='1b04dce5' size-in-bits='64' id='0c6d12d5'/>
+      <pointer-type-def type-id='8008efb8' size-in-bits='64' id='dbdf0f9e'/>
+      <pointer-type-def type-id='71f18ea5' size-in-bits='64' id='7b4ee155'/>
+      <enum-decl name='drm_color_encoding' filepath='include/drm/drm_color_mgmt.h' line='54' column='1' id='e57e5f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='61' column='1' id='322e1b47'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='drm_connector_force' filepath='include/drm/drm_connector.h' line='47' column='1' id='e1a0be31'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='drm_connector_registration_state' filepath='include/drm/drm_connector.h' line='95' column='1' id='0b8fe6b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_CONNECTOR_INITIALIZING' value='0'/>
+        <enumerator name='DRM_CONNECTOR_REGISTERED' value='1'/>
+        <enumerator name='DRM_CONNECTOR_UNREGISTERED' value='2'/>
+      </enum-decl>
+      <enum-decl name='drm_connector_status' filepath='include/drm/drm_connector.h' line='60' column='1' id='f7b0e1b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='connector_status_connected' value='1'/>
+        <enumerator name='connector_status_disconnected' value='2'/>
+        <enumerator name='connector_status_unknown' value='3'/>
+      </enum-decl>
+      <enum-decl name='drm_link_status' filepath='include/drm/drm_connector.h' line='224' column='1' id='a28dfadd'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_LINK_STATUS_GOOD' value='0'/>
+        <enumerator name='DRM_LINK_STATUS_BAD' value='1'/>
+      </enum-decl>
+      <enum-decl name='drm_plane_type' filepath='include/drm/drm_plane.h' line='517' column='1' id='5eed3c85'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='hdmi_picture_aspect' filepath='include/linux/hdmi.h' line='95' column='1' id='a30ccd44'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='switch_power_state' filepath='include/drm/drm_device.h' line='33' column='1' id='40bb3c00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_SWITCH_POWER_ON' value='0'/>
+        <enumerator name='DRM_SWITCH_POWER_OFF' value='1'/>
+        <enumerator name='DRM_SWITCH_POWER_CHANGING' value='2'/>
+        <enumerator name='DRM_SWITCH_POWER_DYNAMIC_OFF' value='3'/>
+      </enum-decl>
+      <typedef-decl name='uint16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='108' column='1' id='149c6638'/>
+      <typedef-decl name='uint8_t' type-id='f9b06939' filepath='include/linux/types.h' line='107' column='1' id='b96825af'/>
+      <pointer-type-def type-id='149c6638' size-in-bits='64' id='8a121f49'/>
+      <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='96' id='6f7eb9e8'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='1024' id='c768f32d'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <pointer-type-def type-id='cf8cfd4f' size-in-bits='64' id='12dffdbb'/>
+      <pointer-type-def type-id='c0d6093d' size-in-bits='64' id='ef76b4f1'/>
+      <class-decl name='__drm_connnectors_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='172' column='1' id='45f4b23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='4db02c58' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='182' 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='154' column='1' id='b35335c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_atomic.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_vblank_count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_atomic.h' line='169' 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='149' column='1' id='a79398e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='a6711537' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' 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='293' column='1' id='99c97f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='11c98e9a' visibility='default' filepath='include/drm/drm_atomic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_agp_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='874fb8c0'/>
+      <class-decl name='drm_connector_tv_margins' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='481' column='1' id='a38825b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bottom' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='right' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='500' 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='70' column='1' id='09d6e909'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flip_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='commit_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_atomic.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='abort_completion' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='146' 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='163' column='1' id='73303b8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='30c8e7b1' visibility='default' filepath='include/drm/drm_drv.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='ccba7a85' visibility='default' filepath='include/drm/drm_drv.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='postclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lastclose' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unload' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_vblank_counter' type-id='52dd4de5' visibility='default' filepath='include/drm/drm_drv.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_vblank' type-id='b8905925' visibility='default' filepath='include/drm/drm_drv.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disable_vblank' type-id='5de03572' visibility='default' filepath='include/drm/drm_drv.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_scanout_position' type-id='4e80a34b' visibility='default' filepath='include/drm/drm_drv.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_vblank_timestamp' type-id='93ff0584' visibility='default' filepath='include/drm/drm_drv.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_handler' type-id='3fefe9b7' visibility='default' filepath='include/drm/drm_drv.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_preinstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_postinstall' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_uninstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='master_create' type-id='adc543b9' visibility='default' filepath='include/drm/drm_drv.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='master_destroy' type-id='972f2a14' visibility='default' filepath='include/drm/drm_drv.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_set' type-id='ca39eb80' visibility='default' filepath='include/drm/drm_drv.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='master_drop' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='debugfs_init' type-id='ca55f982' visibility='default' filepath='include/drm/drm_drv.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='gem_free_object' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='gem_free_object_unlocked' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gem_open_object' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_drv.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='gem_close_object' type-id='133b86a1' visibility='default' filepath='include/drm/drm_drv.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='gem_print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_drv.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='gem_create_object' type-id='76ba9b40' visibility='default' filepath='include/drm/drm_drv.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='prime_handle_to_fd' type-id='2579e5b0' visibility='default' filepath='include/drm/drm_drv.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='prime_fd_to_handle' type-id='f9d4c3c6' visibility='default' filepath='include/drm/drm_drv.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='gem_prime_export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_drv.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='gem_prime_import' type-id='b121f651' visibility='default' filepath='include/drm/drm_drv.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gem_prime_pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_drv.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gem_prime_unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gem_prime_get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_drv.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gem_prime_import_sg_table' type-id='38d8fc10' visibility='default' filepath='include/drm/drm_drv.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gem_prime_vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_drv.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gem_prime_vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_drv.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='gem_prime_mmap' type-id='516294a7' visibility='default' filepath='include/drm/drm_drv.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='gem_prime_get_uuid' type-id='0de721e0' visibility='default' filepath='include/drm/drm_drv.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dumb_create' type-id='c95d5016' visibility='default' filepath='include/drm/drm_drv.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dumb_map_offset' type-id='c62ff945' visibility='default' filepath='include/drm/drm_drv.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dumb_destroy' type-id='aca8090e' visibility='default' filepath='include/drm/drm_drv.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gem_vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_drv.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='patchlevel' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='date' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_drv.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ioctls' type-id='2effb43d' visibility='default' filepath='include/drm/drm_drv.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='num_ioctls' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='fops' type-id='61758ee5' visibility='default' filepath='include/drm/drm_drv.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_drv.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='firstopen' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='preclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dma_ioctl' type-id='8ac1c0d9' visibility='default' filepath='include/drm/drm_drv.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dma_quiescent' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='context_dtor' type-id='4a984946' visibility='default' filepath='include/drm/drm_drv.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='dev_priv_size' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='788' 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='99' column='1' id='d12f4a1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_encoder.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_encoder.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_encoder.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_encoder.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encoder_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_encoder.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_encoder.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='possible_clones' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_encoder.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bridge' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_encoder.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='funcs' type-id='1701f1ac' visibility='default' filepath='include/drm/drm_encoder.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper_private' type-id='32162fa7' visibility='default' filepath='include/drm/drm_encoder.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='114' column='1' id='55b7e9ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='0ab6a08c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buffer' type-id='b78e1fbb' visibility='default' filepath='include/drm/drm_fb_helper.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_fb_helper.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='funcs' type-id='b4872443' visibility='default' filepath='include/drm/drm_fb_helper.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fbdev' type-id='9f763fd8' visibility='default' filepath='include/drm/drm_fb_helper.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pseudo_palette' type-id='46fc18d9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='dirty_clip' type-id='ec280828' visibility='default' filepath='include/drm/drm_fb_helper.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dirty_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirty_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_fb_helper.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='kernel_fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_fb_helper.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='delayed_hotplug' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='deferred_setup' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='preferred_bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='188' 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='117' column='1' id='a0eb3346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_framebuffer.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/drm/drm_framebuffer.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='format' type-id='f10b2208' visibility='default' filepath='include/drm/drm_framebuffer.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='8e992c3d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pitches' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offsets' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='modifier' type-id='9c313c2d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='width' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='height' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='hot_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hot_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='filp_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='obj' type-id='a459476c' visibility='default' filepath='include/drm/drm_framebuffer.h' line='213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_hdmi_info' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='186' column='1' id='452748b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scdc' type-id='2c7c7fd8' visibility='default' filepath='include/drm/drm_connector.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='y420_vdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='y420_cmdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='y420_cmdb_map' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_connector.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='y420_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_master' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_auth.h' line='71' column='1' id='f8a4685d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_auth.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_auth.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_auth.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unique_len' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='magic_map' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_auth.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lessor' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_auth.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lessee_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lessee_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lessees' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='leases' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lessee_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_minor' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='69' column='1' id='d5cb77a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_file.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_file.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/drm/drm_file.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='debugfs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='79' 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='118c2af9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ww_ctx' type-id='2c45f76e' 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='b4b06bb8' 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='72f469ec' 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='b50a4934' 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='b50a4934' visibility='default' filepath='include/drm/drm_modeset_lock.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_panel' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='130' column='1' id='b9675e9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drm' type-id='8898134d' visibility='default' filepath='include/drm/drm_panel.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_panel.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_panel.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='funcs' type-id='cda6c21a' visibility='default' filepath='include/drm/drm_panel.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_panel.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nh' type-id='708c2394' visibility='default' filepath='include/drm/drm_panel.h' line='171' 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='40' column='1' id='64249e24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='2aa44dc9' visibility='default' filepath='include/drm/drm_vblank.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sequence' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='4eb3729d' visibility='default' filepath='include/drm/drm_vblank.h' line='76' 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='73' column='1' id='811caa36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_property.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_values' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='values' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_property.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='enum_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='190' 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='209' column='1' id='3dfb1294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head_global' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='head_file' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_property.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_property.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_self_refresh_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='12506762'/>
+      <class-decl name='drm_tile_group' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1576' column='1' id='edb008f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_connector.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='group_data' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_connector.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vblank_crtc' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='89' column='1' id='e5ebb0e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_vblank.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_vblank.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable_timer' type-id='abe41e67' visibility='default' filepath='include/drm/drm_vblank.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/drm/drm_vblank.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time' type-id='fbc017ef' visibility='default' filepath='include/drm/drm_vblank.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/drm/drm_vblank.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='last' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='inmodeset' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='framedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='linedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_vblank.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vblank.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vma_offset_manager' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='59' column='1' id='1b04dce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_addr_space_mm' type-id='0b8ea949' visibility='default' filepath='include/drm/drm_vma_manager.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vram_mm' is-struct='yes' visibility='default' is-declaration-only='yes' id='8008efb8'/>
+      <class-decl name='drm_writeback_job' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='81' column='1' id='71f18ea5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='2944961d' visibility='default' filepath='include/drm/drm_writeback.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepared' type-id='b50a4934' visibility='default' filepath='include/drm/drm_writeback.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_writeback.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_writeback.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='out_fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_writeback.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_writeback.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='142d8eca' const='yes' id='f508b3a9'/>
+      <qualified-type-def type-id='c571b65b' const='yes' id='3ab32f02'/>
+      <qualified-type-def type-id='e019c76b' const='yes' id='a192e032'/>
+      <qualified-type-def type-id='ad4d49e8' const='yes' id='d9de7d63'/>
+      <pointer-type-def type-id='59fa7bb0' size-in-bits='64' id='3f50936e'/>
+      <pointer-type-def type-id='82c5dbd5' size-in-bits='64' id='dc79526d'/>
+      <qualified-type-def type-id='60eff7ff' const='yes' id='bdf845e8'/>
+      <qualified-type-def type-id='7cfcbd14' const='yes' id='5b7f098d'/>
+      <pointer-type-def type-id='0f47abb9' size-in-bits='64' id='54a031e1'/>
+      <pointer-type-def type-id='970d3828' size-in-bits='64' id='c353cb3e'/>
+      <pointer-type-def type-id='328910d8' size-in-bits='64' id='a20ce8b2'/>
+      <array-type-def dimensions='1' type-id='26ea5d4c' size-in-bits='4096' id='53f04f9e'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <enum-decl name='drm_mode_status' filepath='include/drm/drm_modes.h' line='91' column='1' id='4fb62cb0'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='drm_mode_subconnector' filepath='include/uapi/drm/drm_mode.h' line='344' column='1' id='b590704f'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='subpixel_order' filepath='include/drm/drm_connector.h' line='134' column='1' id='a93e6dcd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <typedef-decl name='uint64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='112' column='1' id='9c313c2d'/>
+      <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='4096' id='ed4ceada'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1' id='c778239e'>
+        <data-member access='public'>
+          <var-decl name='hdmi_type1' type-id='4ba022f8' visibility='default' filepath='include/linux/hdmi.h' line='384' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='e0ed16c6' size-in-bits='64' id='dc18a9b0'/>
+      <pointer-type-def type-id='4dd76d14' size-in-bits='64' id='16575f26'/>
+      <class-decl name='drm_client_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='65' column='1' id='0ab6a08c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_client.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_client.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_client.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='67ede465' visibility='default' filepath='include/drm/drm_client.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='file' type-id='9e99ecc1' visibility='default' filepath='include/drm/drm_client.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='modeset_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_client.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='modesets' type-id='8106240b' visibility='default' filepath='include/drm/drm_client.h' line='102' 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='97' column='1' id='ec280828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='y2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='101' 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='674' column='1' id='142d8eca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='d379869f' visibility='default' filepath='include/drm/drm_connector.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detect' type-id='9f1392b3' visibility='default' filepath='include/drm/drm_connector.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_modes' type-id='96846df4' visibility='default' filepath='include/drm/drm_connector.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_property' type-id='9a2977d1' visibility='default' filepath='include/drm/drm_connector.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late_register' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_connector.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='early_unregister' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_duplicate_state' type-id='be89b2b8' visibility='default' filepath='include/drm/drm_connector.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_destroy_state' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_connector.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_set_property' type-id='69fbf2a0' visibility='default' filepath='include/drm/drm_connector.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_get_property' type-id='456e047e' visibility='default' filepath='include/drm/drm_connector.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_print_state' type-id='b01310d2' visibility='default' filepath='include/drm/drm_connector.h' line='956' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_helper_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='837' column='1' id='c571b65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_modes' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect_ctx' type-id='a8bd8fa1' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='ff7f72b4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_encoder' type-id='a4de2233' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_best_encoder' type-id='0b5f3d7c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_check' type-id='2e18356f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_commit' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='prepare_writeback_job' type-id='a92ff885' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_writeback_job' type-id='b781f274' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1050' 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='0f47abb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_frame_counter' type-id='b50a4934' 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='8f92235e' 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='1e6c0b80' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_funcs' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='390' column='1' id='e019c76b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cursor_set' type-id='601c5a9c' visibility='default' filepath='include/drm/drm_crtc.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cursor_set2' type-id='3df34728' visibility='default' filepath='include/drm/drm_crtc.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cursor_move' type-id='7f9fdb63' visibility='default' filepath='include/drm/drm_crtc.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gamma_set' type-id='ceacf83c' visibility='default' filepath='include/drm/drm_crtc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_config' type-id='4fc3b355' visibility='default' filepath='include/drm/drm_crtc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='page_flip' type-id='5ad57c34' visibility='default' filepath='include/drm/drm_crtc.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_flip_target' type-id='ccd6746f' visibility='default' filepath='include/drm/drm_crtc.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_property' type-id='e1038882' visibility='default' filepath='include/drm/drm_crtc.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_duplicate_state' type-id='d664ced0' visibility='default' filepath='include/drm/drm_crtc.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_destroy_state' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_crtc.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_set_property' type-id='102ab76c' visibility='default' filepath='include/drm/drm_crtc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_get_property' type-id='c0240e5c' visibility='default' filepath='include/drm/drm_crtc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='late_register' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='early_unregister' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_crc_source' type-id='ee3b6114' visibility='default' filepath='include/drm/drm_crtc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='verify_crc_source' type-id='31163f5a' visibility='default' filepath='include/drm/drm_crtc.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_crc_sources' type-id='bda384fe' visibility='default' filepath='include/drm/drm_crtc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='atomic_print_state' type-id='1f51f8f7' visibility='default' filepath='include/drm/drm_crtc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_vblank_counter' type-id='1dd1747d' visibility='default' filepath='include/drm/drm_crtc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='enable_vblank' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disable_vblank' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='870' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='61' column='1' id='ad4d49e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='a9a90075' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepare' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='8d681b98' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mode_fixup' type-id='e003b5ce' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='18901036' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set_nofb' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mode_set_base' type-id='9c5c88be' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mode_set_base_atomic' type-id='c368c2fb' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_check' type-id='5ef2f163' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_begin' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_flush' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_enable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='atomic_disable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='451' 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='0b8ea949'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color_adjust' type-id='4bcdfb80' 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='72f469ec' 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='60498a7e' 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='6fe1603d' 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='6fe1603d' 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='dec44472' 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='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='211' 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='89' column='1' id='2aa44dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='completion' type-id='389faaf7' visibility='default' filepath='include/drm/drm_file.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completion_release' type-id='e3fbbc86' visibility='default' filepath='include/drm/drm_file.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event' type-id='5b35aab5' visibility='default' filepath='include/drm/drm_file.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_file.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='file_priv' type-id='9e99ecc1' visibility='default' filepath='include/drm/drm_file.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pending_link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='150' 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='237' column='1' id='60eff7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_plane' type-id='16723420' visibility='default' filepath='include/drm/drm_plane.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_plane' type-id='d58d6a5f' visibility='default' filepath='include/drm/drm_plane.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_property' type-id='8f0815d8' visibility='default' filepath='include/drm/drm_plane.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_duplicate_state' type-id='841501c0' visibility='default' filepath='include/drm/drm_plane.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_destroy_state' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_plane.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_set_property' type-id='49e4df08' visibility='default' filepath='include/drm/drm_plane.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_get_property' type-id='a6945abe' visibility='default' filepath='include/drm/drm_plane.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='late_register' type-id='e1ec3697' visibility='default' filepath='include/drm/drm_plane.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='early_unregister' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_print_state' type-id='86c0ad39' visibility='default' filepath='include/drm/drm_plane.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='format_mod_supported' type-id='4af717b2' visibility='default' filepath='include/drm/drm_plane.h' line='495' column='1'/>
+        </data-member>
+      </class-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='1071' column='1' id='7cfcbd14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_fb' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cleanup_fb' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='atomic_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atomic_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_disable' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_async_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_async_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1253' 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='164' column='1' id='2c7c7fd8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='read_request' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='scrambling' type-id='beea899b' visibility='default' filepath='include/drm/drm_connector.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_static_metadata' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='362' column='1' id='4ba022f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eotf' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='metadata_type' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_fall' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='min_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='367' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='532f030e' size-in-bits='64' id='1701f1ac'/>
+      <pointer-type-def type-id='d4db3637' size-in-bits='64' id='32162fa7'/>
+      <pointer-type-def type-id='2b48c0bb' size-in-bits='64' id='b4872443'/>
+      <pointer-type-def type-id='4ba7baf2' size-in-bits='64' id='f10b2208'/>
+      <pointer-type-def type-id='9ca9fcc5' size-in-bits='64' id='8e992c3d'/>
+      <pointer-type-def type-id='d6de54c5' size-in-bits='64' id='2effb43d'/>
+      <qualified-type-def type-id='b444361f' const='yes' id='59fa7bb0'/>
+      <qualified-type-def type-id='fa206174' const='yes' id='82c5dbd5'/>
+      <pointer-type-def type-id='795e6d94' size-in-bits='64' id='cda6c21a'/>
+      <pointer-type-def type-id='111ab5a4' size-in-bits='64' id='a4e2d046'/>
+      <pointer-type-def type-id='87c471e6' size-in-bits='64' id='8582e5ec'/>
+      <pointer-type-def type-id='2a13094b' size-in-bits='64' id='b78e1fbb'/>
+      <pointer-type-def type-id='272672f5' size-in-bits='64' id='b121f651'/>
+      <pointer-type-def type-id='c33808e6' size-in-bits='64' id='38d8fc10'/>
+      <pointer-type-def type-id='b6b06c66' size-in-bits='64' id='76ba9b40'/>
+      <array-type-def dimensions='1' type-id='abd62a96' size-in-bits='256' id='a459476c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='ae5fc04a' size-in-bits='64' id='b4b06bb8'/>
+      <pointer-type-def type-id='f14fc18d' size-in-bits='64' id='2944961d'/>
+      <pointer-type-def type-id='f546887a' size-in-bits='64' id='9f763fd8'/>
+      <pointer-type-def type-id='c3277f63' size-in-bits='64' id='d9d2e26f'/>
+      <pointer-type-def type-id='c2ddfea1' size-in-bits='64' id='ccba7a85'/>
+      <pointer-type-def type-id='9a54e634' size-in-bits='64' id='f9d4c3c6'/>
+      <pointer-type-def type-id='4f5cd1f6' size-in-bits='64' id='ca39eb80'/>
+      <pointer-type-def type-id='0795c636' size-in-bits='64' id='2579e5b0'/>
+      <pointer-type-def type-id='fbd40bed' size-in-bits='64' id='adc543b9'/>
+      <pointer-type-def type-id='7ac88bec' size-in-bits='64' id='4a984946'/>
+      <pointer-type-def type-id='1a648909' size-in-bits='64' id='b8905925'/>
+      <pointer-type-def type-id='50f15cd5' size-in-bits='64' id='30c8e7b1'/>
+      <pointer-type-def type-id='4e407315' size-in-bits='64' id='8ac1c0d9'/>
+      <pointer-type-def type-id='1c62d4d4' size-in-bits='64' id='c95d5016'/>
+      <pointer-type-def type-id='935923dc' size-in-bits='64' id='aca8090e'/>
+      <pointer-type-def type-id='e374f511' size-in-bits='64' id='c62ff945'/>
+      <pointer-type-def type-id='40877b8a' size-in-bits='64' id='12e23e5c'/>
+      <pointer-type-def type-id='857f27d6' size-in-bits='64' id='8e2012e0'/>
+      <pointer-type-def type-id='6ba772ee' size-in-bits='64' id='0de721e0'/>
+      <pointer-type-def type-id='194ac023' size-in-bits='64' id='516294a7'/>
+      <pointer-type-def type-id='507536a0' size-in-bits='64' id='ca55f982'/>
+      <pointer-type-def type-id='d1d4db8e' size-in-bits='64' id='32774f90'/>
+      <pointer-type-def type-id='6c91f89a' size-in-bits='64' id='93ff0584'/>
+      <pointer-type-def type-id='b8e2b737' size-in-bits='64' id='4e80a34b'/>
+      <pointer-type-def type-id='09818b99' size-in-bits='64' id='52dd4de5'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='56' column='1' id='4eb3729d'>
+        <data-member access='public'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/drm/drm_vblank.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vbl' type-id='bc6bca7e' visibility='default' filepath='include/drm/drm_vblank.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='seq' type-id='3aca1eaa' visibility='default' filepath='include/drm/drm_vblank.h' line='75' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a222e3fe' size-in-bits='64' id='62995e90'/>
+      <pointer-type-def type-id='80b3d6aa' size-in-bits='64' id='157eca44'/>
+      <pointer-type-def type-id='a7bf86ca' size-in-bits='64' id='972f2a14'/>
+      <pointer-type-def type-id='b7290258' size-in-bits='64' id='5de03572'/>
+      <pointer-type-def type-id='2d421ebf' size-in-bits='64' id='9126441b'/>
+      <pointer-type-def type-id='5fa4ba0d' size-in-bits='64' id='133b86a1'/>
+      <pointer-type-def type-id='4111263b' size-in-bits='64' id='06586097'/>
+      <pointer-type-def type-id='97e3fb6c' size-in-bits='64' id='1c51ec16'/>
+      <pointer-type-def type-id='ee780377' size-in-bits='64' id='2edb3e4b'/>
+      <class-decl name='drm_bridge' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='378' column='1' id='87c471e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_bridge.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_bridge.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_bridge.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_bridge.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_bridge.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timings' type-id='10c598f7' visibility='default' filepath='include/drm/drm_bridge.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='funcs' type-id='39e20e4b' visibility='default' filepath='include/drm/drm_bridge.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='driver_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_bridge.h' line='400' 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='117' column='1' id='2a13094b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='cc1804ea' visibility='default' filepath='include/drm/drm_client.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pitch' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gem' type-id='abd62a96' visibility='default' filepath='include/drm/drm_client.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_client.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_client.h' line='146' 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='973' column='1' id='9857a465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='975' 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='994' column='1' id='3aca1eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_ns' type-id='49659421' visibility='default' filepath='include/uapi/drm/drm.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='998' 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='982' column='1' id='bc6bca7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tv_usec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='crtc_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='988' 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='60498a7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color' type-id='7359adad' 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='91ce1af9' 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='91ce1af9' 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='0ee978f1' 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='72f469ec' 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='72f469ec' 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='2a8a6332' 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='2a8a6332' 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='2a8a6332' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='scanned_block' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='172' 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='b444361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_create' type-id='fd8daf85' visibility='default' filepath='include/drm/drm_mode_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_format_info' type-id='f2bb73e9' visibility='default' filepath='include/drm/drm_mode_config.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output_poll_changed' type-id='62995e90' visibility='default' filepath='include/drm/drm_mode_config.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='57ca5882' visibility='default' filepath='include/drm/drm_mode_config.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_check' type-id='d74fad0a' visibility='default' filepath='include/drm/drm_mode_config.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_commit' type-id='69b48bd3' visibility='default' filepath='include/drm/drm_mode_config.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_state_alloc' type-id='27c3122f' visibility='default' filepath='include/drm/drm_mode_config.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_state_clear' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_state_free' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='333' 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='1273' column='1' id='fa206174'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_commit_tail' type-id='75795f13' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1309' 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='147' column='1' id='beea899b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='low_rates' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_writeback_connector' size-in-bits='15744' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='18' column='1' id='f14fc18d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='f02c18fa' visibility='default' filepath='include/drm/drm_writeback.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='encoder' type-id='d12f4a1d' visibility='default' filepath='include/drm/drm_writeback.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='pixel_formats_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_writeback.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='job_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='job_queue' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_writeback.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15392'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_writeback.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_writeback.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_info' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='437' column='1' id='f546887a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fbcon_rotate_hint' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mm_lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='var' type-id='87e42d48' visibility='default' filepath='include/linux/fb.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fix' type-id='1cead55a' visibility='default' filepath='include/linux/fb.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='monspecs' type-id='ee529a90' visibility='default' filepath='include/linux/fb.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queue' type-id='ef9025d0' visibility='default' filepath='include/linux/fb.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='pixmap' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sprite' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='cmap' type-id='be9adbe3' visibility='default' filepath='include/linux/fb.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='modelist' type-id='72f469ec' visibility='default' filepath='include/linux/fb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='mode' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fbops' type-id='33dff390' visibility='default' filepath='include/linux/fb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='class_flag' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='' type-id='145b6d9f' visibility='default' filepath='include/linux/fb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='screen_size' type-id='7359adad' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='pseudo_palette' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='fbcon_par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='apertures' type-id='3dc7db80' visibility='default' filepath='include/linux/fb.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='skip_vt_switch' type-id='b50a4934' visibility='default' filepath='include/linux/fb.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ba3b5f2c' size-in-bits='64' id='bda384fe'/>
+      <pointer-type-def type-id='34401d0d' size-in-bits='64' id='67ede465'/>
+      <qualified-type-def type-id='c20384d9' const='yes' id='532f030e'/>
+      <qualified-type-def type-id='3cdc7e32' const='yes' id='d4db3637'/>
+      <qualified-type-def type-id='1a200140' const='yes' id='2b48c0bb'/>
+      <qualified-type-def type-id='a588cbed' const='yes' id='4ba7baf2'/>
+      <qualified-type-def type-id='eb452ce6' const='yes' id='9ca9fcc5'/>
+      <qualified-type-def type-id='833c0b8c' const='yes' id='d6de54c5'/>
+      <qualified-type-def type-id='3ae2c39f' const='yes' id='795e6d94'/>
+      <pointer-type-def type-id='e184aa4e' size-in-bits='64' id='be89b2b8'/>
+      <pointer-type-def type-id='fe3cfa56' size-in-bits='64' id='d664ced0'/>
+      <pointer-type-def type-id='a843bacf' size-in-bits='64' id='a4de2233'/>
+      <pointer-type-def type-id='79256f62' size-in-bits='64' id='0b5f3d7c'/>
+      <pointer-type-def type-id='9857a465' size-in-bits='64' id='5b35aab5'/>
+      <pointer-type-def type-id='cc4a63b9' size-in-bits='64' id='9e99ecc1'/>
+      <pointer-type-def type-id='3bc524c0' size-in-bits='64' id='abd62a96'/>
+      <pointer-type-def type-id='ef266a3b' size-in-bits='64' id='8106240b'/>
+      <pointer-type-def type-id='58313606' size-in-bits='64' id='841501c0'/>
+      <pointer-type-def type-id='746df737' size-in-bits='64' id='9f1392b3'/>
+      <pointer-type-def type-id='b938ea42' size-in-bits='64' id='ff7f72b4'/>
+      <pointer-type-def type-id='3d84df46' size-in-bits='64' id='8d681b98'/>
+      <pointer-type-def type-id='f1babf06' size-in-bits='64' id='0b8c9d30'/>
+      <pointer-type-def type-id='6d905adc' size-in-bits='64' id='456e047e'/>
+      <pointer-type-def type-id='32d07fab' size-in-bits='64' id='2e18356f'/>
+      <pointer-type-def type-id='f43da4de' size-in-bits='64' id='69fbf2a0'/>
+      <pointer-type-def type-id='eeda2e3d' size-in-bits='64' id='a8bd8fa1'/>
+      <pointer-type-def type-id='97471c35' size-in-bits='64' id='9a2977d1'/>
+      <pointer-type-def type-id='4dedc1bb' size-in-bits='64' id='d379869f'/>
+      <pointer-type-def type-id='699ab992' size-in-bits='64' id='96846df4'/>
+      <pointer-type-def type-id='71fd1591' size-in-bits='64' id='dfd1cc3d'/>
+      <pointer-type-def type-id='172997aa' size-in-bits='64' id='ee3b6114'/>
+      <pointer-type-def type-id='93df1bf0' size-in-bits='64' id='31163f5a'/>
+      <pointer-type-def type-id='68adba6a' size-in-bits='64' id='c0240e5c'/>
+      <pointer-type-def type-id='30f77767' size-in-bits='64' id='5ef2f163'/>
+      <pointer-type-def type-id='c01f4982' size-in-bits='64' id='102ab76c'/>
+      <pointer-type-def type-id='6081969c' size-in-bits='64' id='18901036'/>
+      <pointer-type-def type-id='a6dcac82' size-in-bits='64' id='601c5a9c'/>
+      <pointer-type-def type-id='17f9ad66' size-in-bits='64' id='3df34728'/>
+      <pointer-type-def type-id='615707ca' size-in-bits='64' id='5ad57c34'/>
+      <pointer-type-def type-id='4d41685b' size-in-bits='64' id='ccd6746f'/>
+      <pointer-type-def type-id='b0cde5c7' size-in-bits='64' id='c368c2fb'/>
+      <pointer-type-def type-id='971a52d0' size-in-bits='64' id='e1038882'/>
+      <pointer-type-def type-id='c2f3c8c7' size-in-bits='64' id='7f9fdb63'/>
+      <pointer-type-def type-id='202c5914' size-in-bits='64' id='9c5c88be'/>
+      <pointer-type-def type-id='84730732' size-in-bits='64' id='ceacf83c'/>
+      <pointer-type-def type-id='322dfcc1' size-in-bits='64' id='4fc3b355'/>
+      <pointer-type-def type-id='5f5b9bdb' size-in-bits='64' id='e1ec3697'/>
+      <pointer-type-def type-id='332a260c' size-in-bits='64' id='a6945abe'/>
+      <pointer-type-def type-id='77328cce' size-in-bits='64' id='16723420'/>
+      <pointer-type-def type-id='ef46a2bb' size-in-bits='64' id='d58d6a5f'/>
+      <pointer-type-def type-id='5a678b43' size-in-bits='64' id='4c74ea47'/>
+      <pointer-type-def type-id='c016e2d6' size-in-bits='64' id='49e4df08'/>
+      <pointer-type-def type-id='304ac94e' size-in-bits='64' id='8f0815d8'/>
+      <pointer-type-def type-id='82d08b71' size-in-bits='64' id='a92ff885'/>
+      <pointer-type-def type-id='7f73c08c' size-in-bits='64' id='e003b5ce'/>
+      <pointer-type-def type-id='1c171578' size-in-bits='64' id='4af717b2'/>
+      <pointer-type-def type-id='c78b7721' size-in-bits='64' id='1dd1747d'/>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='320' id='1e6c0b80'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <pointer-type-def type-id='fac43f4c' size-in-bits='64' id='e3fbbc86'/>
+      <pointer-type-def type-id='7dfcb6b6' size-in-bits='64' id='4bcdfb80'/>
+      <pointer-type-def type-id='cecfa2ad' size-in-bits='64' id='a3cb28f1'/>
+      <pointer-type-def type-id='07c62f88' size-in-bits='64' id='6e5d37e2'/>
+      <pointer-type-def type-id='2a02b07c' size-in-bits='64' id='a50616ee'/>
+      <pointer-type-def type-id='52d21874' size-in-bits='64' id='a3c6fb36'/>
+      <pointer-type-def type-id='28678bf9' size-in-bits='64' id='a9a90075'/>
+      <pointer-type-def type-id='ba9f6db4' size-in-bits='64' id='20e4b16e'/>
+      <pointer-type-def type-id='4c7af498' size-in-bits='64' id='d196b9c2'/>
+      <pointer-type-def type-id='6f026338' size-in-bits='64' id='b01310d2'/>
+      <pointer-type-def type-id='792f7033' size-in-bits='64' id='1f51f8f7'/>
+      <pointer-type-def type-id='031e8b8d' size-in-bits='64' id='86c0ad39'/>
+      <pointer-type-def type-id='eaff4dba' size-in-bits='64' id='b781f274'/>
+      <pointer-type-def type-id='d3638b22' size-in-bits='64' id='3dc7db80'/>
+      <class-decl name='drm_encoder_funcs' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_encoder.h' line='40' column='1' id='c20384d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='late_register' type-id='5b7d6a61' visibility='default' filepath='include/drm/drm_encoder.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_unregister' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_helper_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='472' column='1' id='3cdc7e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='0b72aa63' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode_valid' type-id='a3a882dc' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_fixup' type-id='375f8cba' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prepare' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='a6426b1c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_mode_set' type-id='e15f707f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_crtc' type-id='fc630d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detect' type-id='69099556' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_disable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='enable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_check' type-id='21e51c00' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='815' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='77' column='1' id='1a200140'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_probe' type-id='4a5aa6b9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_file' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='158' column='1' id='cc4a63b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authenticated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='universal_planes' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='atomic' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aspect_ratio_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='writeback_connectors' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='is_master' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_file.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/drm/drm_file.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='283696d2' visibility='default' filepath='include/drm/drm_file.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lhead' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_file.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='syncobj_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='syncobj_table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_file.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_file.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fbs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fbs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='blobs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_wait' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_file.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pending_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='event_space' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='event_read_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prime' type-id='1eb5bd59' visibility='default' filepath='include/drm/drm_file.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_info' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='56' column='1' id='a588cbed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fourcc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='depth' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_planes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='' type-id='5ab3bf5b' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='block_w' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_h' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='hsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='has_alpha' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='is_yuv' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='135' 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='42' column='1' id='eb452ce6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy' type-id='dd634c69' visibility='default' filepath='include/drm/drm_framebuffer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create_handle' type-id='541466be' visibility='default' filepath='include/drm/drm_framebuffer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty' type-id='040ef975' visibility='default' filepath='include/drm/drm_framebuffer.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='171' column='1' id='3bc524c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_gem.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='handle_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_gem.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_gem.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_gem.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vma_node' type-id='743d7e52' visibility='default' filepath='include/drm/drm_gem.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_gem.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='name' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_gem.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dma_buf' type-id='5e4f599b' visibility='default' filepath='include/drm/drm_gem.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='import_attach' type-id='e68e04c1' visibility='default' filepath='include/drm/drm_gem.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/drm_gem.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='_resv' type-id='d06fbf66' visibility='default' filepath='include/drm/drm_gem.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='funcs' type-id='3a73453d' visibility='default' filepath='include/drm/drm_gem.h' line='299' 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='145' column='1' id='833c0b8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_ioctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='ad578603' visibility='default' filepath='include/drm/drm_ioctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='e2cefc47' visibility='default' filepath='include/drm/drm_ioctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_ioctl.h' line='149' 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='1129' column='1' id='ef266a3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_crtc.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='11e02f83' visibility='default' filepath='include/drm/drm_crtc.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connectors' type-id='be55f776' visibility='default' filepath='include/drm/drm_crtc.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connectors' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_crtc.h' line='1138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_panel_funcs' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='80' column='1' id='3ae2c39f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_modes' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_timings' type-id='2a614134' visibility='default' filepath='include/drm/drm_panel.h' line='123' 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='be9adbe3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' 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='3f1a6b60' 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='2e5e3725' 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='2e5e3725' 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='2e5e3725' 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='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='287' 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='1cead55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='ac1fa8c0' 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='7359adad' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='d315442e' 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='d315442e' 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='3f1a6b60' 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='7359adad' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='810b4a17' 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='ee529a90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chroma' type-id='1c76a224' 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='c03076ec' 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='c213d3d4' 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='579c7c75' 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='579c7c75' 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='579c7c75' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' visibility='default' filepath='include/linux/fb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gtf' type-id='d315442e' 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='d315442e' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' visibility='default' filepath='include/linux/fb.h' line='90' 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='185' column='1' id='0a45c8ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='8bff8096' visibility='default' filepath='include/linux/fb.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='scan_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='access_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blit_x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='blit_y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='writeio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='readio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='199' 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='87e42d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xres' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='2d123a1f' 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='2d123a1f' 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='2d123a1f' 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='2d123a1f' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3fa29bab' visibility='default' filepath='include/uapi/linux/fb.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='545e9343' size-in-bits='64' id='39e20e4b'/>
+      <pointer-type-def type-id='fdc939a7' size-in-bits='64' id='10c598f7'/>
+      <qualified-type-def type-id='9840934c' const='yes' id='34401d0d'/>
+      <pointer-type-def type-id='d47d86c5' size-in-bits='64' id='f2bb73e9'/>
+      <pointer-type-def type-id='6a65de43' size-in-bits='64' id='27c3122f'/>
+      <pointer-type-def type-id='0ab6a08c' size-in-bits='64' id='cc1804ea'/>
+      <pointer-type-def type-id='228968a1' size-in-bits='64' id='fd8daf85'/>
+      <pointer-type-def type-id='0b8ea949' size-in-bits='64' id='0ee978f1'/>
+      <pointer-type-def type-id='f2dcb698' size-in-bits='64' id='57ca5882'/>
+      <pointer-type-def type-id='88ac6962' size-in-bits='64' id='33dff390'/>
+      <pointer-type-def type-id='e3dece26' size-in-bits='64' id='c03076ec'/>
+      <pointer-type-def type-id='a61b2dc8' size-in-bits='64' id='d74fad0a'/>
+      <pointer-type-def type-id='3d75b067' size-in-bits='64' id='69b48bd3'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='480' column='1' id='145b6d9f'>
+        <data-member access='public'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='482' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='891c6957' size-in-bits='64' id='75795f13'/>
+      <pointer-type-def type-id='d315442e' size-in-bits='64' id='2e5e3725'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='112' id='579c7c75'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='32' id='c213d3d4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='495' column='1' id='d3638b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/fb.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ranges' type-id='f13afa51' visibility='default' filepath='include/linux/fb.h' line='500' 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='24' column='1' id='9840934c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/drm/drm_client.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregister' type-id='18e3d2c7' visibility='default' filepath='include/drm/drm_client.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='restore' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='59' 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='45' column='1' id='1eb5bd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_prime.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dmabufs' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handles' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='49' 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='52' column='1' id='743d7e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_vma_manager.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_files' type-id='dec44472' visibility='default' filepath='include/drm/drm_vma_manager.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='readonly' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vma_manager.h' line='56' 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='2d123a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/fb.h' line='191' 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='1c76a224'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='redx' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/linux/fb.h' line='60' 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='228' column='1' id='88ac6962'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fb.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fb_open' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb_release' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fb_read' type-id='c523819e' visibility='default' filepath='include/linux/fb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb_write' type-id='b90c8c47' visibility='default' filepath='include/linux/fb.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fb_check_var' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fb_set_par' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb_setcolreg' type-id='47150d4e' visibility='default' filepath='include/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fb_setcmap' type-id='6cae92ea' visibility='default' filepath='include/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fb_blank' type-id='264d5ec9' visibility='default' filepath='include/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb_pan_display' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_fillrect' type-id='e6c64d04' visibility='default' filepath='include/linux/fb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb_copyarea' type-id='2fff15e1' visibility='default' filepath='include/linux/fb.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_imageblit' type-id='c72645fa' visibility='default' filepath='include/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fb_cursor' type-id='f03e9a5b' visibility='default' filepath='include/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fb_sync' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fb_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fb_compat_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fb_mmap' type-id='17d72e03' visibility='default' filepath='include/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fb_get_caps' type-id='3e6ac796' visibility='default' filepath='include/linux/fb.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fb_destroy' type-id='37191bbd' visibility='default' filepath='include/linux/fb.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb_debug_enter' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_debug_leave' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='295' 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='765' column='1' id='e3dece26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fb.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refresh' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='xres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='yres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pixclock' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='left_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='right_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='upper_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lower_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vmode' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flag' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='779' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='5e0dec46' const='yes' id='545e9343'/>
+      <qualified-type-def type-id='0c695772' const='yes' id='fdc939a7'/>
+      <pointer-type-def type-id='d45b1fc5' size-in-bits='64' id='3a73453d'/>
+      <pointer-type-def type-id='4db02c58' size-in-bits='64' id='be55f776'/>
+      <pointer-type-def type-id='3a711e5e' size-in-bits='64' id='fc630d30'/>
+      <pointer-type-def type-id='55efd1a3' size-in-bits='64' id='11e02f83'/>
+      <pointer-type-def type-id='28063720' size-in-bits='64' id='e2cefc47'/>
+      <pointer-type-def type-id='20638bb4' size-in-bits='64' id='69099556'/>
+      <enum-decl name='drm_ioctl_flags' filepath='include/drm/drm_ioctl.h' line='80' column='1' id='ad578603'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='4e0e413a' size-in-bits='64' id='a3a882dc'/>
+      <pointer-type-def type-id='874459e5' size-in-bits='64' id='5b7d6a61'/>
+      <pointer-type-def type-id='2b3f252e' size-in-bits='64' id='21e51c00'/>
+      <pointer-type-def type-id='56fa322d' size-in-bits='64' id='4a5aa6b9'/>
+      <pointer-type-def type-id='5c166f04' size-in-bits='64' id='541466be'/>
+      <pointer-type-def type-id='800ed759' size-in-bits='64' id='040ef975'/>
+      <pointer-type-def type-id='449a6017' size-in-bits='64' id='c3a1efbb'/>
+      <pointer-type-def type-id='ecbba9ca' size-in-bits='64' id='2a614134'/>
+      <pointer-type-def type-id='86bc8898' size-in-bits='64' id='375f8cba'/>
+      <typedef-decl name='drm_magic_t' type-id='f0981eeb' filepath='include/uapi/drm/drm.h' line='86' column='1' id='283696d2'/>
+      <union-decl name='__anonymous_union__4' size-in-bits='24' is-anonymous='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1' id='5ab3bf5b'>
+        <data-member access='public'>
+          <var-decl name='cpp' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='char_per_block' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='107' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ec9f1e6a' size-in-bits='64' id='ac9d10e4'/>
+      <pointer-type-def type-id='f3dc294f' size-in-bits='64' id='1da45ab3'/>
+      <pointer-type-def type-id='1d2b3133' size-in-bits='64' id='e15f707f'/>
+      <pointer-type-def type-id='fff725a2' size-in-bits='64' id='a6426b1c'/>
+      <pointer-type-def type-id='0a04ae5f' size-in-bits='64' id='0b72aa63'/>
+      <pointer-type-def type-id='5c6f297d' size-in-bits='64' id='dd634c69'/>
+      <pointer-type-def type-id='e2245803' size-in-bits='64' id='888567bf'/>
+      <array-type-def dimensions='1' type-id='87647851' size-in-bits='infinite' id='f13afa51'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='drm_bridge_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='38' column='1' id='5e0dec46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='901effb6' 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='e1fb15d1' 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='2c8c8c19' 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='ea44fe69' 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='e1fb15d1' 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='e1fb15d1' 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='63662edb' 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='e1fb15d1' 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='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_pre_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_post_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_timings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='342' column='1' id='0c695772'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='setup_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hold_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dual_link' type-id='b50a4934' visibility='default' filepath='include/drm/drm_bridge.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='df20b624' const='yes' id='d45b1fc5'/>
+      <pointer-type-def type-id='6ab964d2' size-in-bits='64' id='c6e1b58c'/>
+      <pointer-type-def type-id='32037540' size-in-bits='64' id='6cae92ea'/>
+      <pointer-type-def type-id='32ea5aae' size-in-bits='64' id='de0565b8'/>
+      <pointer-type-def type-id='20919507' size-in-bits='64' id='f03e9a5b'/>
+      <pointer-type-def type-id='b0471e43' size-in-bits='64' id='5173cfa7'/>
+      <pointer-type-def type-id='f65c27ec' size-in-bits='64' id='20b881b6'/>
+      <pointer-type-def type-id='29599587' size-in-bits='64' id='17d72e03'/>
+      <pointer-type-def type-id='24762397' size-in-bits='64' id='325e877b'/>
+      <pointer-type-def type-id='29c8c1c5' size-in-bits='64' id='264d5ec9'/>
+      <pointer-type-def type-id='c89dc0a4' size-in-bits='64' id='47150d4e'/>
+      <typedef-decl name='drm_ioctl_t' type-id='4e407315' filepath='include/drm/drm_ioctl.h' line='54' column='1' id='28063720'/>
+      <pointer-type-def type-id='de345e44' size-in-bits='64' id='c523819e'/>
+      <pointer-type-def type-id='6c6bf843' size-in-bits='64' id='b90c8c47'/>
+      <pointer-type-def type-id='765a8acb' size-in-bits='64' id='18e3d2c7'/>
+      <pointer-type-def type-id='cfe09901' size-in-bits='64' id='37191bbd'/>
+      <pointer-type-def type-id='ef65541d' size-in-bits='64' id='2fff15e1'/>
+      <pointer-type-def type-id='f036a6aa' size-in-bits='64' id='e6c64d04'/>
+      <pointer-type-def type-id='78de7510' size-in-bits='64' id='c72645fa'/>
+      <pointer-type-def type-id='200520c4' size-in-bits='64' id='3e6ac796'/>
+      <class-decl name='aperture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='497' column='1' id='87647851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='499' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object_funcs' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='47' column='1' id='df20b624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_gem.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close' type-id='133b86a1' visibility='default' filepath='include/drm/drm_gem.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_gem.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_gem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_gem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_gem.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_gem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_gem.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_gem.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='013ba5ed' size-in-bits='64' id='2c8c8c19'/>
+      <pointer-type-def type-id='e8862ab4' size-in-bits='64' id='901effb6'/>
+      <pointer-type-def type-id='ae99f6b5' size-in-bits='64' id='ea44fe69'/>
+      <pointer-type-def type-id='da3b08cd' size-in-bits='64' id='e1fb15d1'/>
+      <pointer-type-def type-id='81d7511f' size-in-bits='64' id='63662edb'/>
+      <pointer-type-def type-id='7775f78a' size-in-bits='64' id='ff30d95c'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_atomic_helper.c' language='LANG_C89'>
+      <class-decl name='dma_fence_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='125' column='1' id='65d79a70'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_64bit_seqno' type-id='b50a4934' visibility='default' filepath='include/linux/dma-fence.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_driver_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_timeline_name' type-id='0c4b82c7' visibility='default' filepath='include/linux/dma-fence.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_signaling' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='signaled' type-id='e33a30a5' visibility='default' filepath='include/linux/dma-fence.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='c82424f9' visibility='default' filepath='include/linux/dma-fence.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='release' type-id='90d4d75e' visibility='default' filepath='include/linux/dma-fence.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='timeline_value_str' type-id='0f859ff9' visibility='default' filepath='include/linux/dma-fence.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1' id='9d063591'>
+        <data-member access='public'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='timestamp' type-id='fbc017ef' visibility='default' filepath='include/linux/dma-fence.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-fence.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='a62a5dcb' size-in-bits='64' id='0c4b82c7'/>
+      <qualified-type-def type-id='65d79a70' const='yes' id='ee0fc87b'/>
+      <pointer-type-def type-id='ee0fc87b' size-in-bits='64' id='13d85783'/>
+      <pointer-type-def type-id='0c98f83d' size-in-bits='64' id='c82424f9'/>
+      <pointer-type-def type-id='8cdee791' size-in-bits='64' id='e33a30a5'/>
+      <pointer-type-def type-id='da94e28c' size-in-bits='64' id='90d4d75e'/>
+      <pointer-type-def type-id='9a809cc5' size-in-bits='64' id='0f859ff9'/>
+      <function-decl name='drm_atomic_helper_check_plane_state' mangled-name='drm_atomic_helper_check_plane_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_check_plane_state'>
+        <parameter type-id='d0835005' name='plane_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='767' column='1'/>
+        <parameter type-id='c9982f26' name='crtc_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='768' column='1'/>
+        <parameter type-id='95e97e5e' name='min_scale' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='769' column='1'/>
+        <parameter type-id='95e97e5e' name='max_scale' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='770' column='1'/>
+        <parameter type-id='b50a4934' name='can_position' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='771' column='1'/>
+        <parameter type-id='b50a4934' name='can_update_disabled' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='772' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='1431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_vblanks'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1431' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1432' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_fences' mangled-name='drm_atomic_helper_wait_for_fences' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_fences'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1384' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1385' column='1'/>
+        <parameter type-id='b50a4934' name='pre_swap' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1386' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_wait_for_dependencies' mangled-name='drm_atomic_helper_wait_for_dependencies' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_wait_for_dependencies'>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2117' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='2828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_update_plane'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2828' column='1'/>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2829' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2830' column='1'/>
+        <parameter type-id='95e97e5e' name='crtc_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2831' column='1'/>
+        <parameter type-id='95e97e5e' name='crtc_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2831' column='1'/>
+        <parameter type-id='f0981eeb' name='crtc_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2832' column='1'/>
+        <parameter type-id='f0981eeb' name='crtc_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2832' column='1'/>
+        <parameter type-id='8f92235e' name='src_x' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2833' column='1'/>
+        <parameter type-id='8f92235e' name='src_y' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2833' column='1'/>
+        <parameter type-id='8f92235e' name='src_w' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2834' column='1'/>
+        <parameter type-id='8f92235e' name='src_h' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2834' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2835' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_update_legacy_modeset_state' mangled-name='drm_atomic_helper_update_legacy_modeset_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_update_legacy_modeset_state'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1107' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1108' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_swap_state' mangled-name='drm_atomic_helper_swap_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_swap_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2697' column='1'/>
+        <parameter type-id='b50a4934' name='stall' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2698' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_suspend' mangled-name='drm_atomic_helper_suspend' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_suspend'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3184' column='1'/>
+        <return type-id='e3dd029e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_duplicate_state' mangled-name='drm_atomic_helper_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_duplicate_state'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3096' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3097' column='1'/>
+        <return type-id='e3dd029e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_shutdown' mangled-name='drm_atomic_helper_shutdown' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3056' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_shutdown'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3056' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_setup_commit' mangled-name='drm_atomic_helper_setup_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2013' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_setup_commit'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2013' column='1'/>
+        <parameter type-id='b50a4934' name='nonblock' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2014' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='2933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_set_config'>
+        <parameter type-id='8106240b' name='set' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2933' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2934' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_resume' mangled-name='drm_atomic_helper_resume' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_resume'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3276' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3277' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_duplicated_state' mangled-name='drm_atomic_helper_commit_duplicated_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_duplicated_state'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3230' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3231' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_prepare_planes' mangled-name='drm_atomic_helper_prepare_planes' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_prepare_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2333' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2334' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='3350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_page_flip'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3350' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3351' column='1'/>
+        <parameter type-id='6301fad2' name='event' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3352' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3353' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='3354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='2885' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_disable_plane'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2885' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2886' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_tail_rpm' mangled-name='drm_atomic_helper_commit_tail_rpm' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_tail_rpm'>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1559' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_disables'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1246' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1247' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_modeset_enables'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1292' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1293' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='2428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2428' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2429' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2430' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='2248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_hw_done'>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2248' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_tail' mangled-name='drm_atomic_helper_commit_tail' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_tail'>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit_cleanup_done' mangled-name='drm_atomic_helper_commit_cleanup_done' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit_cleanup_done'>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2293' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_commit' mangled-name='drm_atomic_helper_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_commit'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1767' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1768' column='1'/>
+        <parameter type-id='b50a4934' name='nonblock' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1769' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_async_commit' mangled-name='drm_atomic_helper_async_commit' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1714' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_async_commit'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1714' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='1715' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='2634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_cleanup_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2634' column='1'/>
+        <parameter type-id='e3dd029e' name='old_state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='2635' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_check' mangled-name='drm_atomic_helper_check' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_check'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='936' column='1'/>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_atomic_helper.c' line='937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='14d2a428' size-in-bits='64' id='c9982f26'/>
+      <function-type size-in-bits='64' id='a62a5dcb'>
+        <parameter type-id='28271da3'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c98f83d'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cdee791'>
+        <parameter type-id='28271da3'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da94e28c'>
+        <parameter type-id='28271da3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a809cc5'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='ea65fb21' const='yes' id='14d2a428'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_atomic_state_helper.c' language='LANG_C89'>
+      <function-decl name='drm_atomic_helper_plane_reset' mangled-name='drm_atomic_helper_plane_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_reset'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='242' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_plane_destroy_state'>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='307' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_duplicate_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='284' column='1'/>
+        <return type-id='d0835005'/>
+      </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_state_helper.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_plane_destroy_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='330' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_crtc_reset' mangled-name='drm_atomic_helper_crtc_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='90' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_duplicate_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='147' column='1'/>
+        <return type-id='35078cb9'/>
+      </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_state_helper.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_duplicate_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='110' column='1'/>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_crtc_destroy_state'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='206' column='1'/>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='207' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_destroy_state'>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_connector_reset' mangled-name='drm_atomic_helper_connector_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_reset'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='369' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_destroy_state'>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='457' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_duplicate_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='433' column='1'/>
+        <return type-id='249ef586'/>
+      </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_state_helper.c' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_connector_destroy_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='480' column='1'/>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='481' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_private_obj_duplicate_state' mangled-name='__drm_atomic_helper_private_obj_duplicate_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_private_obj_duplicate_state'>
+        <parameter type-id='11c98e9a' name='obj' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='496' column='1'/>
+        <parameter type-id='4ea020ae' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='497' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_plane_duplicate_state'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='262' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_crtc_reset' mangled-name='__drm_atomic_helper_crtc_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_crtc_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='73' column='1'/>
+        <parameter type-id='35078cb9' name='crtc_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='74' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_atomic_helper_connector_reset' mangled-name='__drm_atomic_helper_connector_reset' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_reset'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='351' column='1'/>
+        <parameter type-id='249ef586' name='conn_state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </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_state_helper.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_atomic_helper_connector_duplicate_state'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='409' column='1'/>
+        <parameter type-id='249ef586' name='state' filepath='drivers/gpu/drm/drm_atomic_state_helper.c' line='410' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_atomic_uapi.c' language='LANG_C89'>
+      <function-decl name='drm_atomic_set_fence_for_plane' mangled-name='drm_atomic_set_fence_for_plane' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_fence_for_plane'>
+        <parameter type-id='d0835005' name='plane_state' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='269' column='1'/>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_set_mode_for_crtc' mangled-name='drm_atomic_set_mode_for_crtc' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_mode_for_crtc'>
+        <parameter type-id='35078cb9' name='state' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='64' column='1'/>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='65' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_atomic_set_crtc_for_connector' mangled-name='drm_atomic_set_crtc_for_connector' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_set_crtc_for_connector'>
+        <parameter type-id='249ef586' name='conn_state' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='296' column='1'/>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_atomic_uapi.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='fffdaf52' size-in-bits='64' id='745b39e8'/>
+      <qualified-type-def type-id='55efd1a3' const='yes' id='fffdaf52'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_blend.c' language='LANG_C89'>
+      <function-decl name='drm_plane_create_rotation_property' mangled-name='drm_plane_create_rotation_property' filepath='drivers/gpu/drm/drm_blend.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_rotation_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='252' column='1'/>
+        <parameter type-id='f0981eeb' name='rotation' filepath='drivers/gpu/drm/drm_blend.c' line='253' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_rotations' filepath='drivers/gpu/drm/drm_blend.c' line='254' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_blend_mode_property' mangled-name='drm_plane_create_blend_mode_property' filepath='drivers/gpu/drm/drm_blend.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_blend_mode_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='552' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_modes' filepath='drivers/gpu/drm/drm_blend.c' line='553' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_rotation_simplify' mangled-name='drm_rotation_simplify' filepath='drivers/gpu/drm/drm_blend.c' line='305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rotation_simplify'>
+        <parameter type-id='f0981eeb' name='rotation' filepath='drivers/gpu/drm/drm_blend.c' line='305' column='1'/>
+        <parameter type-id='f0981eeb' name='supported_rotations' filepath='drivers/gpu/drm/drm_blend.c' line='306' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_zpos_property' mangled-name='drm_plane_create_zpos_property' filepath='drivers/gpu/drm/drm_blend.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_zpos_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='349' column='1'/>
+        <parameter type-id='f0981eeb' name='zpos' filepath='drivers/gpu/drm/drm_blend.c' line='350' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/gpu/drm/drm_blend.c' line='351' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/gpu/drm/drm_blend.c' line='351' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_zpos_immutable_property' mangled-name='drm_plane_create_zpos_immutable_property' filepath='drivers/gpu/drm/drm_blend.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_zpos_immutable_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='388' column='1'/>
+        <parameter type-id='f0981eeb' name='zpos' filepath='drivers/gpu/drm/drm_blend.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_plane_create_alpha_property' mangled-name='drm_plane_create_alpha_property' filepath='drivers/gpu/drm/drm_blend.c' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_alpha_property'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_blend.c' line='199' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_bridge.c' language='LANG_C89'>
+      <function-decl name='drm_bridge_mode_set' mangled-name='drm_bridge_mode_set' filepath='drivers/gpu/drm/drm_bridge.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_mode_set'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='296' column='1'/>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_bridge.c' line='297' column='1'/>
+        <parameter type-id='745b39e8' name='adjusted_mode' filepath='drivers/gpu/drm/drm_bridge.c' line='298' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_add' mangled-name='drm_bridge_add' filepath='drivers/gpu/drm/drm_bridge.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_add'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='71' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_remove' mangled-name='drm_bridge_remove' filepath='drivers/gpu/drm/drm_bridge.c' line='84' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_remove'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='84' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_drm_find_bridge' mangled-name='of_drm_find_bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_drm_find_bridge'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/gpu/drm/drm_bridge.c' line='475' column='1'/>
+        <return type-id='8582e5ec'/>
+      </function-decl>
+      <function-decl name='drm_bridge_pre_enable' mangled-name='drm_bridge_pre_enable' filepath='drivers/gpu/drm/drm_bridge.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_pre_enable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='321' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_post_disable' mangled-name='drm_bridge_post_disable' filepath='drivers/gpu/drm/drm_bridge.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_post_disable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='272' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_enable' mangled-name='drm_bridge_enable' filepath='drivers/gpu/drm/drm_bridge.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_enable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_disable' mangled-name='drm_bridge_disable' filepath='drivers/gpu/drm/drm_bridge.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_disable'>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_bridge_attach' mangled-name='drm_bridge_attach' filepath='drivers/gpu/drm/drm_bridge.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_bridge_attach'>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_bridge.c' line='114' column='1'/>
+        <parameter type-id='8582e5ec' name='bridge' filepath='drivers/gpu/drm/drm_bridge.c' line='114' column='1'/>
+        <parameter type-id='8582e5ec' name='previous' filepath='drivers/gpu/drm/drm_bridge.c' line='115' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <parameter type-id='7359adad' name='num_pages' filepath='drivers/gpu/drm/drm_cache.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_client.c' language='LANG_C89'>
+      <function-decl name='drm_client_register' mangled-name='drm_client_register' filepath='drivers/gpu/drm/drm_client.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_register'>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client.c' line='125' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_client_init' mangled-name='drm_client_init' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1'/>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client.c' line='78' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_client.c' line='79' column='1'/>
+        <parameter type-id='67ede465' name='funcs' filepath='drivers/gpu/drm/drm_client.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_client_modeset.c' language='LANG_C89'>
+      <function-decl name='drm_client_modeset_commit_force' mangled-name='drm_client_modeset_commit_force' filepath='drivers/gpu/drm/drm_client_modeset.c' line='1035' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_client_modeset_commit_force'>
+        <parameter type-id='cc1804ea' name='client' filepath='drivers/gpu/drm/drm_client_modeset.c' line='1035' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_color_mgmt.c' language='LANG_C89'>
+      <function-decl name='drm_plane_create_color_properties' mangled-name='drm_plane_create_color_properties' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_create_color_properties'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='406' column='1'/>
+        <parameter type-id='19c2251e' name='supported_encodings' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='407' column='1'/>
+        <parameter type-id='19c2251e' name='supported_ranges' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='408' column='1'/>
+        <parameter type-id='e57e5f2b' name='default_encoding' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='409' column='1'/>
+        <parameter type-id='322e1b47' name='default_range' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_crtc_set_gamma_size' mangled-name='drm_mode_crtc_set_gamma_size' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_crtc_set_gamma_size'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='195' column='1'/>
+        <parameter type-id='95e97e5e' name='gamma_size' filepath='drivers/gpu/drm/drm_color_mgmt.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_connector.c' language='LANG_C89'>
+      <class-decl name='drm_connector_list_iter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1599' column='1' id='d1f16456'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conn' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='1602' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d1f16456' size-in-bits='64' id='40a902ec'/>
+      <function-decl name='drm_connector_init' mangled-name='drm_connector_init' filepath='drivers/gpu/drm/drm_connector.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_connector.c' line='195' column='1'/>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='196' column='1'/>
+        <parameter type-id='3fb29739' name='funcs' filepath='drivers/gpu/drm/drm_connector.c' line='197' column='1'/>
+        <parameter type-id='95e97e5e' name='connector_type' filepath='drivers/gpu/drm/drm_connector.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_connector_list_iter_next' mangled-name='drm_connector_list_iter_next' filepath='drivers/gpu/drm/drm_connector.c' line='677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_next'>
+        <parameter type-id='40a902ec' name='iter' filepath='drivers/gpu/drm/drm_connector.c' line='677' column='1'/>
+        <return type-id='4db02c58'/>
+      </function-decl>
+      <function-decl name='drm_connector_list_iter_end' mangled-name='drm_connector_list_iter_end' filepath='drivers/gpu/drm/drm_connector.c' line='716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_end'>
+        <parameter type-id='40a902ec' name='iter' filepath='drivers/gpu/drm/drm_connector.c' line='716' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_update_edid_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='1935' column='1'/>
+        <parameter type-id='776adf76' name='edid' filepath='drivers/gpu/drm/drm_connector.c' line='1936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_create_dp_colorspace_property' mangled-name='drm_mode_create_dp_colorspace_property' filepath='drivers/gpu/drm/drm_connector.c' line='1777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_create_dp_colorspace_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='1777' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_get_connector_status_name' mangled-name='drm_get_connector_status_name' filepath='drivers/gpu/drm/drm_connector.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_connector_status_name'>
+        <parameter type-id='f7b0e1b4' name='status' filepath='drivers/gpu/drm/drm_connector.c' line='592' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='drm_connector_unregister' mangled-name='drm_connector_unregister' filepath='drivers/gpu/drm/drm_connector.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_unregister'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='536' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_register' mangled-name='drm_connector_register' filepath='drivers/gpu/drm/drm_connector.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_register'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='489' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_connector_list_iter_begin' mangled-name='drm_connector_list_iter_begin' filepath='drivers/gpu/drm/drm_connector.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_list_iter_begin'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_connector.c' line='641' column='1'/>
+        <parameter type-id='40a902ec' name='iter' filepath='drivers/gpu/drm/drm_connector.c' line='642' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_has_possible_encoder' mangled-name='drm_connector_has_possible_encoder' filepath='drivers/gpu/drm/drm_connector.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_has_possible_encoder'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='403' column='1'/>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_connector.c' line='404' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_connector_cleanup' mangled-name='drm_connector_cleanup' filepath='drivers/gpu/drm/drm_connector.c' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_cleanup'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='431' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_encoder' mangled-name='drm_connector_attach_encoder' filepath='drivers/gpu/drm/drm_connector.c' line='366' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_encoder'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='366' column='1'/>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_connector.c' line='367' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_edid_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_connector.c' line='344' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='4af8a458' size-in-bits='64' id='776adf76'/>
+      <qualified-type-def type-id='a7fa16d9' const='yes' id='4af8a458'/>
+      <class-decl name='edid' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='285' column='1' id='a7fa16d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_edid.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mfg_id' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='prod_code' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='serial' type-id='19c2251e' visibility='default' filepath='include/drm/drm_edid.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mfg_week' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mfg_year' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='input' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='width_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='height_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='features' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='red_green_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='black_white_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='red_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='red_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='green_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='green_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='blue_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blue_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='white_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='white_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='established_timings' type-id='93a90c7b' visibility='default' filepath='include/drm/drm_edid.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='standard_timings' type-id='521a7abd' visibility='default' filepath='include/drm/drm_edid.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='detailed_timings' type-id='c93659c6' visibility='default' filepath='include/drm/drm_edid.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='extensions' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='322' 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='44' column='1' id='93a90c7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='t2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mfg_rsvd' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='d30cc3b8' size-in-bits='576' id='c93659c6'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='128' id='521a7abd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='detailed_timing' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='165' column='1' id='d30cc3b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixel_clock' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='74e410f1' visibility='default' filepath='include/drm/drm_edid.h' line='170' 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='58' column='1' id='0bb26f49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hsize' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vfreq_aspect' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='167' column='1' id='74e410f1'>
+        <data-member access='public'>
+          <var-decl name='pixel_data' type-id='42c5f701' visibility='default' filepath='include/drm/drm_edid.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='other_data' type-id='4191437e' visibility='default' filepath='include/drm/drm_edid.h' line='169' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_non_pixel' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='140' column='1' id='4191437e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='data' type-id='3b37e17e' visibility='default' filepath='include/drm/drm_edid.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_pixel_timing' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='70' column='1' id='42c5f701'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hactive_hblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='vactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='vactive_vblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_offset_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='hsync_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vsync_offset_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsync_vsync_offset_pulse_width_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='width_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='height_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width_height_mm_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='hborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='misc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='104' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='146' column='1' id='3b37e17e'>
+        <data-member access='public'>
+          <var-decl name='str' type-id='9839ad2e' visibility='default' filepath='include/drm/drm_edid.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='range' type-id='2d6065c1' visibility='default' filepath='include/drm/drm_edid.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='color' type-id='d35b6cc8' visibility='default' filepath='include/drm/drm_edid.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='timings' type-id='0e1e8cdf' visibility='default' filepath='include/drm/drm_edid.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cvt' type-id='e6001147' visibility='default' filepath='include/drm/drm_edid.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='detailed_data_monitor_range' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='94' column='1' id='2d6065c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='max_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='min_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='max_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_clock_mhz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='formula' type-id='58741aa1' visibility='default' filepath='include/drm/drm_edid.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='detailed_data_string' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='90' column='1' id='9839ad2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='097d53a4' visibility='default' filepath='include/drm/drm_edid.h' line='91' 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='122' column='1' id='d35b6cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='white_yx_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='white_x_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='white_y_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='ebccef5f' size-in-bits='96' id='e6001147'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='96' id='0e1e8cdf'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='cvt_timing' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='136' column='1' id='ebccef5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_edid.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='104' id='097d53a4'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__3' size-in-bits='56' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='101' column='1' id='58741aa1'>
+        <data-member access='public'>
+          <var-decl name='gtf2' type-id='3f6be67c' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cvt' type-id='c591dff3' visibility='default' filepath='include/drm/drm_edid.h' line='118' column='1'/>
+        </data-member>
+      </union-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='102' column='1' id='3f6be67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hfreq_start_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='c' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='m' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='k' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='j' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='110' column='1' id='c591dff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='supported_aspects' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='supported_scalings' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='preferred_refresh' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_crtc.c' language='LANG_C89'>
+      <function-decl name='drm_crtc_init_with_planes' mangled-name='drm_crtc_init_with_planes' filepath='drivers/gpu/drm/drm_crtc.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_init_with_planes'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_crtc.c' line='226' column='1'/>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_crtc.c' line='226' column='1'/>
+        <parameter type-id='a6711537' name='primary' filepath='drivers/gpu/drm/drm_crtc.c' line='227' column='1'/>
+        <parameter type-id='a6711537' name='cursor' filepath='drivers/gpu/drm/drm_crtc.c' line='228' column='1'/>
+        <parameter type-id='7236c5c8' name='funcs' filepath='drivers/gpu/drm/drm_crtc.c' line='229' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_crtc.c' line='230' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_crtc_cleanup' mangled-name='drm_crtc_cleanup' filepath='drivers/gpu/drm/drm_crtc.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_cleanup'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_crtc.c' line='316' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_damage_helper.c' language='LANG_C89'>
+      <function-decl name='drm_plane_enable_fb_damage_clips' mangled-name='drm_plane_enable_fb_damage_clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_enable_fb_damage_clips'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_damage_helper.c' line='96' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_atomic_helper_dirtyfb' mangled-name='drm_atomic_helper_dirtyfb' filepath='drivers/gpu/drm/drm_damage_helper.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_atomic_helper_dirtyfb'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_damage_helper.c' line='160' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_damage_helper.c' line='161' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/gpu/drm/drm_damage_helper.c' line='161' column='1'/>
+        <parameter type-id='f0981eeb' name='color' filepath='drivers/gpu/drm/drm_damage_helper.c' line='162' column='1'/>
+        <parameter type-id='254852de' name='clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='162' column='1'/>
+        <parameter type-id='f0981eeb' name='num_clips' filepath='drivers/gpu/drm/drm_damage_helper.c' line='163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='ec280828' size-in-bits='64' id='254852de'/>
+    </abi-instr>
+    <abi-instr 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='43' column='1' id='c645b65c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_debugfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='show' type-id='0131eb61' visibility='default' filepath='include/drm/drm_debugfs.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_debugfs.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_debugfs.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c645b65c' const='yes' id='94847817'/>
+      <pointer-type-def type-id='94847817' size-in-bits='64' id='09894807'/>
+      <function-decl name='drm_debugfs_create_files' mangled-name='drm_debugfs_create_files' filepath='drivers/gpu/drm/drm_debugfs.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_debugfs_create_files'>
+        <parameter type-id='09894807' name='files' filepath='drivers/gpu/drm/drm_debugfs.c' line='176' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/gpu/drm/drm_debugfs.c' line='176' column='1'/>
+        <parameter type-id='27675065' name='root' filepath='drivers/gpu/drm/drm_debugfs.c' line='177' column='1'/>
+        <parameter type-id='6c3b3f8e' name='minor' filepath='drivers/gpu/drm/drm_debugfs.c' line='177' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_dp_helper.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='256' id='ce805d5e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='272' id='ba592c87'>
+        <subrange length='34' type-id='7ff19f0f' id='6a6a7e00'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='16' id='86c49187'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='cec_adapter' size-in-bits='13632' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='178' column='1' id='075e0246'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/cec.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnode' type-id='c2b8d3fa' visibility='default' filepath='include/media/cec.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='rc' type-id='75ae4804' visibility='default' filepath='include/media/cec.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='transmit_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='transmit_queue_sz' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='wait_queue' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='transmitting' type-id='a588c23f' visibility='default' filepath='include/media/cec.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='transmit_in_progress' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='kthread_config' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='config_completion' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='kthread' type-id='f23e2572' visibility='default' filepath='include/media/cec.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='kthread_waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='ops' type-id='4bc4fd45' visibility='default' filepath='include/media/cec.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/cec.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11040'>
+          <var-decl name='available_log_addrs' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11056'>
+          <var-decl name='phys_addr' type-id='1dc6a898' visibility='default' filepath='include/media/cec.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='needs_hpd' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11080'>
+          <var-decl name='is_configuring' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11088'>
+          <var-decl name='is_configured' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11096'>
+          <var-decl name='cec_pin_is_high' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='last_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='monitor_all_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11168'>
+          <var-decl name='monitor_pin_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='follower_cnt' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='cec_follower' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='cec_initiator' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='passthrough' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='log_addrs' type-id='c6954120' visibility='default' filepath='include/media/cec.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='conn_info' type-id='a809e963' visibility='default' filepath='include/media/cec.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12704'>
+          <var-decl name='tx_timeouts' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='notifier' type-id='33ceb73d' visibility='default' filepath='include/media/cec.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='pin' type-id='93901aac' visibility='default' filepath='include/media/cec.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='cec_dir' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='status_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='error_inj_file' type-id='27675065' visibility='default' filepath='include/media/cec.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='phys_addrs' type-id='42c8bff1' visibility='default' filepath='include/media/cec.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/cec.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13344'>
+          <var-decl name='input_phys' type-id='16dc656a' visibility='default' filepath='include/media/cec.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_fence' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-fence.h' line='65' column='1' id='ce8c45a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='cff2d845' visibility='default' filepath='include/linux/dma-fence.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='13d85783' visibility='default' filepath='include/linux/dma-fence.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9d063591' visibility='default' filepath='include/linux/dma-fence.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='context' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seqno' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-fence.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/dma-fence.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/dma-fence.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/dma-fence.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_agp_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='874fb8c0'/>
+      <class-decl name='drm_atomic_state' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='316' column='1' id='8bb9a8e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_atomic.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allow_modeset' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='legacy_cursor_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='async_update' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='duplicated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='planes' type-id='356fd446' visibility='default' filepath='include/drm/drm_atomic.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtcs' type-id='611a28de' visibility='default' filepath='include/drm/drm_atomic.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='connectors' type-id='6d26c72b' visibility='default' filepath='include/drm/drm_atomic.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_private_objs' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_atomic.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_objs' type-id='258e7e75' visibility='default' filepath='include/drm/drm_atomic.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_atomic.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fake_commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_atomic.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='commit_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_atomic.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_helper_funcs' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='837' column='1' id='c571b65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_modes' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect_ctx' type-id='a8bd8fa1' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_valid' type-id='ff7f72b4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='best_encoder' type-id='a4de2233' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_best_encoder' type-id='0b5f3d7c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_check' type-id='2e18356f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_commit' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='prepare_writeback_job' type-id='a92ff885' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_writeback_job' type-id='b781f274' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1050' 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='70' column='1' id='09d6e909'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_atomic.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flip_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cleanup_done' type-id='f9fef04f' visibility='default' filepath='include/drm/drm_atomic.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='commit_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_atomic.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='abort_completion' type-id='b50a4934' visibility='default' filepath='include/drm/drm_atomic.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='61' column='1' id='ad4d49e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='a9a90075' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepare' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='8d681b98' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mode_fixup' type-id='e003b5ce' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='18901036' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode_set_nofb' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mode_set_base' type-id='9c5c88be' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mode_set_base_atomic' type-id='c368c2fb' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='disable' type-id='a50616ee' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_check' type-id='5ef2f163' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_begin' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_flush' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_enable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='atomic_disable' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='451' 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='163' column='1' id='73303b8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='30c8e7b1' visibility='default' filepath='include/drm/drm_drv.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='ccba7a85' visibility='default' filepath='include/drm/drm_drv.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='postclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lastclose' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unload' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_vblank_counter' type-id='52dd4de5' visibility='default' filepath='include/drm/drm_drv.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_vblank' type-id='b8905925' visibility='default' filepath='include/drm/drm_drv.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disable_vblank' type-id='5de03572' visibility='default' filepath='include/drm/drm_drv.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_scanout_position' type-id='4e80a34b' visibility='default' filepath='include/drm/drm_drv.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_vblank_timestamp' type-id='93ff0584' visibility='default' filepath='include/drm/drm_drv.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_handler' type-id='3fefe9b7' visibility='default' filepath='include/drm/drm_drv.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_preinstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_postinstall' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_uninstall' type-id='62995e90' visibility='default' filepath='include/drm/drm_drv.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='master_create' type-id='adc543b9' visibility='default' filepath='include/drm/drm_drv.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='master_destroy' type-id='972f2a14' visibility='default' filepath='include/drm/drm_drv.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_set' type-id='ca39eb80' visibility='default' filepath='include/drm/drm_drv.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='master_drop' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='debugfs_init' type-id='ca55f982' visibility='default' filepath='include/drm/drm_drv.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='gem_free_object' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='gem_free_object_unlocked' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gem_open_object' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_drv.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='gem_close_object' type-id='133b86a1' visibility='default' filepath='include/drm/drm_drv.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='gem_print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_drv.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='gem_create_object' type-id='76ba9b40' visibility='default' filepath='include/drm/drm_drv.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='prime_handle_to_fd' type-id='2579e5b0' visibility='default' filepath='include/drm/drm_drv.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='prime_fd_to_handle' type-id='f9d4c3c6' visibility='default' filepath='include/drm/drm_drv.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='gem_prime_export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_drv.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='gem_prime_import' type-id='b121f651' visibility='default' filepath='include/drm/drm_drv.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='gem_prime_pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_drv.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='gem_prime_unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_drv.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gem_prime_get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_drv.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gem_prime_import_sg_table' type-id='38d8fc10' visibility='default' filepath='include/drm/drm_drv.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='gem_prime_vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_drv.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gem_prime_vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_drv.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='gem_prime_mmap' type-id='516294a7' visibility='default' filepath='include/drm/drm_drv.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='gem_prime_get_uuid' type-id='0de721e0' visibility='default' filepath='include/drm/drm_drv.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dumb_create' type-id='c95d5016' visibility='default' filepath='include/drm/drm_drv.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dumb_map_offset' type-id='c62ff945' visibility='default' filepath='include/drm/drm_drv.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dumb_destroy' type-id='aca8090e' visibility='default' filepath='include/drm/drm_drv.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gem_vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_drv.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='patchlevel' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='date' type-id='26a90f95' visibility='default' filepath='include/drm/drm_drv.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_drv.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ioctls' type-id='2effb43d' visibility='default' filepath='include/drm/drm_drv.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='num_ioctls' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='fops' type-id='61758ee5' visibility='default' filepath='include/drm/drm_drv.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_drv.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='firstopen' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='preclose' type-id='157eca44' visibility='default' filepath='include/drm/drm_drv.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dma_ioctl' type-id='8ac1c0d9' visibility='default' filepath='include/drm/drm_drv.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dma_quiescent' type-id='d9d2e26f' visibility='default' filepath='include/drm/drm_drv.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='context_dtor' type-id='4a984946' visibility='default' filepath='include/drm/drm_drv.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='dev_priv_size' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_drv.h' line='788' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_encoder_helper_funcs' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='472' column='1' id='3cdc7e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='0b72aa63' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode_valid' type-id='a3a882dc' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode_fixup' type-id='375f8cba' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prepare' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_set' type-id='a6426b1c' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_mode_set' type-id='e15f707f' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_crtc' type-id='fc630d30' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detect' type-id='69099556' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_disable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='1da45ab3' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='enable' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_check' type-id='21e51c00' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='815' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='114' column='1' id='55b7e9ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='0ab6a08c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buffer' type-id='b78e1fbb' visibility='default' filepath='include/drm/drm_fb_helper.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_fb_helper.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_fb_helper.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='funcs' type-id='b4872443' visibility='default' filepath='include/drm/drm_fb_helper.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fbdev' type-id='9f763fd8' visibility='default' filepath='include/drm/drm_fb_helper.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pseudo_palette' type-id='46fc18d9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='dirty_clip' type-id='ec280828' visibility='default' filepath='include/drm/drm_fb_helper.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dirty_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirty_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_fb_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_fb_helper.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='kernel_fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_fb_helper.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='delayed_hotplug' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='deferred_setup' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fb_helper.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='preferred_bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_format_info' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='56' column='1' id='a588cbed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fourcc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='depth' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_planes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='' type-id='5ab3bf5b' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='block_w' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_h' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='hsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsub' type-id='f9b06939' visibility='default' filepath='include/drm/drm_fourcc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='has_alpha' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='is_yuv' type-id='b50a4934' visibility='default' filepath='include/drm/drm_fourcc.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='171' column='1' id='3bc524c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_gem.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='handle_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_gem.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_gem.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_gem.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vma_node' type-id='743d7e52' visibility='default' filepath='include/drm/drm_gem.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_gem.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='name' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_gem.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dma_buf' type-id='5e4f599b' visibility='default' filepath='include/drm/drm_gem.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='import_attach' type-id='e68e04c1' visibility='default' filepath='include/drm/drm_gem.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/drm_gem.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='_resv' type-id='d06fbf66' visibility='default' filepath='include/drm/drm_gem.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='funcs' type-id='3a73453d' visibility='default' filepath='include/drm/drm_gem.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_master' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/drm/drm_auth.h' line='71' column='1' id='f8a4685d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_auth.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_auth.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_auth.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unique_len' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='magic_map' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_auth.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lessor' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_auth.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lessee_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_auth.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lessee_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lessees' type-id='72f469ec' visibility='default' filepath='include/drm/drm_auth.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='leases' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lessee_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_auth.h' line='102' 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='1273' column='1' id='fa206174'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_commit_tail' type-id='75795f13' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_panel' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='130' column='1' id='b9675e9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drm' type-id='8898134d' visibility='default' filepath='include/drm/drm_panel.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_panel.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_panel.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='funcs' type-id='cda6c21a' visibility='default' filepath='include/drm/drm_panel.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_panel.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nh' type-id='708c2394' visibility='default' filepath='include/drm/drm_panel.h' line='171' column='1'/>
+        </data-member>
+      </class-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='1071' column='1' id='7cfcbd14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_fb' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cleanup_fb' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='atomic_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atomic_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_disable' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_async_check' type-id='4c74ea47' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_async_update' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_modeset_helper_vtables.h' line='1253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_self_refresh_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='12506762'/>
+      <class-decl name='drm_vma_offset_manager' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='59' column='1' id='1b04dce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_addr_space_mm' type-id='0b8ea949' visibility='default' filepath='include/drm/drm_vma_manager.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vram_mm' is-struct='yes' visibility='default' is-declaration-only='yes' id='8008efb8'/>
+      <class-decl name='drm_writeback_job' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='81' column='1' id='71f18ea5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='2944961d' visibility='default' filepath='include/drm/drm_writeback.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prepared' type-id='b50a4934' visibility='default' filepath='include/drm/drm_writeback.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_writeback.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list_entry' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_writeback.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='out_fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_writeback.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_writeback.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='abd62a96' size-in-bits='256' id='a459476c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26ea5d4c' size-in-bits='4096' id='53f04f9e'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='320' id='1e6c0b80'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='96' id='6f7eb9e8'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9c313c2d' size-in-bits='4096' id='ed4ceada'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='1024' id='c768f32d'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <class-decl name='drm_dp_aux' size-in-bits='12352' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1298' column='1' id='b2983aea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ddc' type-id='ec5384d3' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='hw_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='crc_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='crc_count' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='transfer' type-id='5deab224' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='i2c_nack_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='i2c_defer_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='cec' type-id='507e56d0' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='is_remote' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1323' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_adapter' size-in-bits='9728' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='687' column='1' id='ec5384d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/i2c.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='algo' type-id='e93ce0cc' visibility='default' filepath='include/linux/i2c.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='algo_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock_ops' type-id='16d08491' visibility='default' filepath='include/linux/i2c.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bus_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mux_lock' type-id='dd823037' visibility='default' filepath='include/linux/i2c.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/i2c.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='locked_flags' type-id='7359adad' visibility='default' filepath='include/linux/i2c.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='name' type-id='36d7f119' visibility='default' filepath='include/linux/i2c.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='dev_released' type-id='f9fef04f' visibility='default' filepath='include/linux/i2c.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='userspace_clients_lock' type-id='925167dc' visibility='default' filepath='include/linux/i2c.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='userspace_clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='bus_recovery_info' type-id='f1537b61' visibility='default' filepath='include/linux/i2c.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='quirks' type-id='398e6008' visibility='default' filepath='include/linux/i2c.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='host_notify_domain' type-id='7544e824' visibility='default' filepath='include/linux/i2c.h' line='715' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_algorithm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='526' column='1' id='547b1199'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_xfer' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master_xfer_atomic' type-id='4813c4da' visibility='default' filepath='include/linux/i2c.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='smbus_xfer' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='smbus_xfer_atomic' type-id='99dc8ee7' visibility='default' filepath='include/linux/i2c.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='functionality' type-id='d0ff2b97' visibility='default' filepath='include/linux/i2c.h' line='548' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_msg' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/i2c.h' line='69' column='1' id='56ed3a25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buf' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/i2c.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_lock_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='564' column='1' id='a94a041a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trylock_bus' type-id='3d5afe0d' visibility='default' filepath='include/linux/i2c.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unlock_bus' type-id='6523d744' visibility='default' filepath='include/linux/i2c.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='i2c_smbus_data' size-in-bits='272' visibility='default' filepath='include/uapi/linux/i2c.h' line='135' column='1' id='1a96c066'>
+        <data-member access='public'>
+          <var-decl name='byte' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/i2c.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='word' type-id='d315442e' visibility='default' filepath='include/uapi/linux/i2c.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='block' type-id='ba592c87' visibility='default' filepath='include/uapi/linux/i2c.h' line='138' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='i2c_bus_recovery_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='611' column='1' id='d5526a99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recover_bus' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_scl' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_scl' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_sda' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_sda' type-id='8f19938d' visibility='default' filepath='include/linux/i2c.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_bus_free' type-id='6ae2afd7' visibility='default' filepath='include/linux/i2c.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unprepare_recovery' type-id='8616a4a6' visibility='default' filepath='include/linux/i2c.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scl_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sda_gpiod' type-id='26760480' visibility='default' filepath='include/linux/i2c.h' line='625' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_adapter_quirks' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='654' column='1' id='21fe2d6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='91ce1af9' visibility='default' filepath='include/linux/i2c.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_num_msgs' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_write_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_read_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_comb_1st_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='max_comb_2nd_msg_len' type-id='1dc6a898' visibility='default' filepath='include/linux/i2c.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc' size-in-bits='14528' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='879' column='1' id='3f5f978b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_crtc.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_crtc.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_crtc.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_crtc.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_crtc.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='primary' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cursor' type-id='a6711537' visibility='default' filepath='include/drm/drm_crtc.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='cursor_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cursor_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_crtc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='funcs' type-id='7236c5c8' visibility='default' filepath='include/drm/drm_crtc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='gamma_size' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='gamma_store' type-id='8a121f49' visibility='default' filepath='include/drm/drm_crtc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='helper_private' type-id='423f39eb' visibility='default' filepath='include/drm/drm_crtc.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_crtc.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_crtc.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='commit_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_crtc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='commit_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_crtc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='crc' type-id='3bcab18a' visibility='default' filepath='include/drm/drm_crtc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_crtc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14112'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_crtc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_crtc.h' line='1099' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_crtc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='self_refresh_data' type-id='fa013de0' visibility='default' filepath='include/drm/drm_crtc.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_device' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/drm/drm_device.h' line='53' column='1' id='e96cc76d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy_dev_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='if_version' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_device.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='1d52bc4d' visibility='default' filepath='include/drm/drm_device.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_device.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='primary' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='render' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_device.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_device.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver_features' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='unplugged' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='anon_inode' type-id='7e666abe' visibility='default' filepath='include/drm/drm_device.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unique' type-id='26a90f95' visibility='default' filepath='include/drm/drm_device.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='struct_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='master_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='open_count' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='filelist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='filelist_internal' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='clientlist_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='clientlist' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='irq_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vblank_disable_immediate' type-id='b50a4934' visibility='default' filepath='include/drm/drm_device.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vblank' type-id='04d2f8d2' visibility='default' filepath='include/drm/drm_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vblank_time_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='vbl_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_device.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vblank_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_device.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_device.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='agp' type-id='c137ea76' visibility='default' filepath='include/drm/drm_device.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pdev' type-id='85196e3f' visibility='default' filepath='include/drm/drm_device.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='num_crtcs' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_device.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mode_config' type-id='5052051f' visibility='default' filepath='include/drm/drm_device.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='object_name_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_device.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='object_name_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_device.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='vma_offset_manager' type-id='0c6d12d5' visibility='default' filepath='include/drm/drm_device.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vram_mm' type-id='dbdf0f9e' visibility='default' filepath='include/drm/drm_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='switch_power_state' type-id='40bb3c00' visibility='default' filepath='include/drm/drm_device.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='fb_helper' type-id='147b8c0a' visibility='default' filepath='include/drm/drm_device.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_minor' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='69' column='1' id='d5cb77a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_file.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_file.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/drm/drm_file.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debugfs_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='debugfs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_vblank_crtc' size-in-bits='2880' is-struct='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='89' column='1' id='e5ebb0e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_vblank.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_vblank.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable_timer' type-id='abe41e67' visibility='default' filepath='include/drm/drm_vblank.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/drm/drm_vblank.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time' type-id='fbc017ef' visibility='default' filepath='include/drm/drm_vblank.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/drm/drm_vblank.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='last' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_vblank_count' type-id='19c2251e' visibility='default' filepath='include/drm/drm_vblank.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='inmodeset' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='framedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='linedur_ns' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_vblank.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hwmode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_vblank.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vblank.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_display_mode' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/drm_modes.h' line='224' column='1' id='55efd1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_modes.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='4fb62cb0' visibility='default' filepath='include/drm/drm_modes.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vscan' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_modes.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='width_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='height_mm' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='crtc_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='crtc_hdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crtc_hblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='crtc_hblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crtc_hsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='crtc_hsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crtc_htotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='crtc_hskew' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='crtc_vdisplay' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='crtc_vblank_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='crtc_vblank_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='crtc_vsync_start' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc_vsync_end' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='crtc_vtotal' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='private' type-id='7292109c' visibility='default' filepath='include/drm/drm_modes.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='vrefresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hsync' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_modes.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_modes.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='export_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_modes.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_status' filepath='include/drm/drm_modes.h' line='91' column='1' id='4fb62cb0'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <class-decl name='drm_mode_config' size-in-bits='9152' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_config.h' line='358' column='1' id='5052051f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connection_mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_mode_config.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acquire_ctx' type-id='d1499e71' visibility='default' filepath='include/drm/drm_mode_config.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='idr_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tile_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_mode_config.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='num_fb' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fb_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='connector_list_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_mode_config.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='num_connector' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='connector_ida' type-id='46ce60fb' visibility='default' filepath='include/drm/drm_mode_config.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='connector_free_list' type-id='77df194e' visibility='default' filepath='include/drm/drm_mode_config.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='connector_free_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_mode_config.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='num_encoder' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='encoder_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='num_total_plane' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='plane_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_crtc' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='crtc_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='property_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='privobj_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='min_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='min_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_width' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='max_height' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_mode_config.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='funcs' type-id='3f50936e' visibility='default' filepath='include/drm/drm_mode_config.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='fb_base' type-id='acc63fdf' visibility='default' filepath='include/drm/drm_mode_config.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='poll_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3720'>
+          <var-decl name='poll_running' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3728'>
+          <var-decl name='delayed_event' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='output_poll_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_mode_config.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='blob_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_mode_config.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='property_blob_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mode_config.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='edid_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dpms_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='path_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tile_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='link_status_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='plane_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='prop_src_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='prop_src_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='prop_src_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='prop_src_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prop_crtc_x' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='prop_crtc_y' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='prop_crtc_w' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='prop_crtc_h' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='prop_fb_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='prop_in_fence_fd' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='prop_out_fence_ptr' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='prop_crtc_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='prop_fb_damage_clips' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='prop_active' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='prop_mode_id' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='prop_vrr_enabled' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dvi_i_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='dvi_i_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='tv_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='tv_select_subconnector_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='tv_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='tv_left_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='tv_right_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='tv_top_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tv_bottom_margin_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='tv_brightness_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='tv_contrast_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='tv_flicker_reduction_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='tv_overscan_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='tv_saturation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tv_hue_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='aspect_ratio_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='degamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='degamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ctm_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='gamma_lut_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='gamma_lut_size_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='suggested_x_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='suggested_y_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='non_desktop_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='panel_orientation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='writeback_fb_id_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='writeback_pixel_formats_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='writeback_out_fence_ptr_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='hdr_output_metadata_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='content_protection_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hdcp_content_type_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='preferred_depth' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='prefer_shadow' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='prefer_shadow_fbdev' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8840'>
+          <var-decl name='quirk_addfb_prefer_xbgr_30bpp' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8848'>
+          <var-decl name='quirk_addfb_prefer_host_byte_order' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8856'>
+          <var-decl name='async_page_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='allow_fb_modifiers' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8872'>
+          <var-decl name='normalize_zpos' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mode_config.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='modifiers_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_mode_config.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='cursor_width' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='cursor_height' type-id='8f92235e' visibility='default' filepath='include/drm/drm_mode_config.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='suspend_state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_mode_config.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='helper_private' type-id='dc79526d' visibility='default' filepath='include/drm/drm_mode_config.h' line='929' 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='ae5fc04a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='45793a97' 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='72f469ec' 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='118c2af9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ww_ctx' type-id='2c45f76e' 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='b4b06bb8' 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='72f469ec' 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='b50a4934' 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='b50a4934' 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='b444361f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_create' type-id='fd8daf85' visibility='default' filepath='include/drm/drm_mode_config.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_format_info' type-id='f2bb73e9' visibility='default' filepath='include/drm/drm_mode_config.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='output_poll_changed' type-id='62995e90' visibility='default' filepath='include/drm/drm_mode_config.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mode_valid' type-id='57ca5882' visibility='default' filepath='include/drm/drm_mode_config.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='atomic_check' type-id='d74fad0a' visibility='default' filepath='include/drm/drm_mode_config.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_commit' type-id='69b48bd3' visibility='default' filepath='include/drm/drm_mode_config.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_state_alloc' type-id='27c3122f' visibility='default' filepath='include/drm/drm_mode_config.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_state_clear' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_state_free' type-id='75795f13' visibility='default' filepath='include/drm/drm_mode_config.h' line='333' 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='117' column='1' id='a0eb3346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_framebuffer.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/drm/drm_framebuffer.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='format' type-id='f10b2208' visibility='default' filepath='include/drm/drm_framebuffer.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='8e992c3d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pitches' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='offsets' type-id='49580a63' visibility='default' filepath='include/drm/drm_framebuffer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='modifier' type-id='9c313c2d' visibility='default' filepath='include/drm/drm_framebuffer.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='width' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='height' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_framebuffer.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='hot_x' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hot_y' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_framebuffer.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='filp_head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_framebuffer.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='obj' type-id='a459476c' visibility='default' filepath='include/drm/drm_framebuffer.h' line='213' 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='350f4182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='8f92235e' 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='8f92235e' 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='c353cb3e' 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='400fb07b' 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='16575f26' 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='8256' is-struct='yes' visibility='default' filepath='include/drm/drm_mode_object.h' line='67' column='1' id='970d3828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' 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='53f04f9e' visibility='default' filepath='include/drm/drm_mode_object.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='values' type-id='ed4ceada' 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='73' column='1' id='811caa36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_property.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_values' type-id='8f92235e' visibility='default' filepath='include/drm/drm_property.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='values' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_property.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='enum_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='190' 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='42' column='1' id='eb452ce6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy' type-id='dd634c69' visibility='default' filepath='include/drm/drm_framebuffer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create_handle' type-id='541466be' visibility='default' filepath='include/drm/drm_framebuffer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dirty' type-id='040ef975' visibility='default' filepath='include/drm/drm_framebuffer.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_file' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_file.h' line='158' column='1' id='cc4a63b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='authenticated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='universal_planes' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='atomic' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aspect_ratio_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='writeback_connectors' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='is_master' type-id='b50a4934' visibility='default' filepath='include/drm/drm_file.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='master' type-id='07df1a3d' visibility='default' filepath='include/drm/drm_file.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/drm/drm_file.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='283696d2' visibility='default' filepath='include/drm/drm_file.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lhead' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor' type-id='6c3b3f8e' visibility='default' filepath='include/drm/drm_file.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='object_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='syncobj_idr' type-id='37ce495e' visibility='default' filepath='include/drm/drm_file.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='syncobj_table_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_file.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='filp' type-id='77e79a4b' visibility='default' filepath='include/drm/drm_file.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_file.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fbs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fbs_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='blobs' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_wait' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_file.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pending_event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='event_space' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_file.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='event_read_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_file.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prime' type-id='1eb5bd59' visibility='default' filepath='include/drm/drm_file.h' line='335' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_magic_t' type-id='f0981eeb' filepath='include/uapi/drm/drm.h' line='86' column='1' id='283696d2'/>
+      <class-decl name='drm_prime_file_private' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_prime.h' line='45' column='1' id='1eb5bd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_prime.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dmabufs' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handles' type-id='dec44472' visibility='default' filepath='include/drm/drm_prime.h' line='49' 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='97' column='1' id='ec280828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y1' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='x2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='y2' type-id='8efea9e5' visibility='default' filepath='include/uapi/drm/drm.h' line='101' 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='500' column='1' id='05bdad78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='handles' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pitches' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='offsets' type-id='3fa29bab' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modifier' type-id='ce805d5e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='534' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='switch_power_state' filepath='include/drm/drm_device.h' line='33' column='1' id='40bb3c00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_SWITCH_POWER_ON' value='0'/>
+        <enumerator name='DRM_SWITCH_POWER_OFF' value='1'/>
+        <enumerator name='DRM_SWITCH_POWER_CHANGING' value='2'/>
+        <enumerator name='DRM_SWITCH_POWER_DYNAMIC_OFF' value='3'/>
+      </enum-decl>
+      <class-decl name='drm_plane' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='556' column='1' id='60f2213f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_plane.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_plane.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_plane.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_plane.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_plane.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='format_types' type-id='90421557' visibility='default' filepath='include/drm/drm_plane.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='format_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='format_default' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='modifiers' type-id='5d6479ae' visibility='default' filepath='include/drm/drm_plane.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='modifier_count' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='old_fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='funcs' type-id='cfd5d066' visibility='default' filepath='include/drm/drm_plane.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_plane.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='type' type-id='5eed3c85' visibility='default' filepath='include/drm/drm_plane.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9824'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='helper_private' type-id='affc31e5' visibility='default' filepath='include/drm/drm_plane.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_plane.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='alpha_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='zpos_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='rotation_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='blend_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='color_encoding_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='color_range_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_plane.h' line='707' 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='237' column='1' id='60eff7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_plane' type-id='16723420' visibility='default' filepath='include/drm/drm_plane.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_plane' type-id='d58d6a5f' visibility='default' filepath='include/drm/drm_plane.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_property' type-id='8f0815d8' visibility='default' filepath='include/drm/drm_plane.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='atomic_duplicate_state' type-id='841501c0' visibility='default' filepath='include/drm/drm_plane.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='atomic_destroy_state' type-id='d196b9c2' visibility='default' filepath='include/drm/drm_plane.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_set_property' type-id='49e4df08' visibility='default' filepath='include/drm/drm_plane.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atomic_get_property' type-id='a6945abe' visibility='default' filepath='include/drm/drm_plane.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='late_register' type-id='e1ec3697' visibility='default' filepath='include/drm/drm_plane.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='early_unregister' type-id='20e4b16e' visibility='default' filepath='include/drm/drm_plane.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_print_state' type-id='86c0ad39' visibility='default' filepath='include/drm/drm_plane.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='format_mod_supported' type-id='4af717b2' visibility='default' filepath='include/drm/drm_plane.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_plane_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_plane.h' line='47' column='1' id='a1700eb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plane' type-id='a6711537' visibility='default' filepath='include/drm/drm_plane.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_plane.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_plane.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_plane.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crtc_x' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='crtc_y' type-id='3ff5601b' visibility='default' filepath='include/drm/drm_plane.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='crtc_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='crtc_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='src_x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='src_y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='src_h' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='src_w' type-id='8f92235e' visibility='default' filepath='include/drm/drm_plane.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alpha' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_plane.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='pixel_blend_mode' type-id='149c6638' visibility='default' filepath='include/drm/drm_plane.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rotation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='normalized_zpos' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_plane.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='color_encoding' type-id='e57e5f2b' visibility='default' filepath='include/drm/drm_plane.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='color_range' type-id='322e1b47' visibility='default' filepath='include/drm/drm_plane.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_damage_clips' type-id='c4126d52' visibility='default' filepath='include/drm/drm_plane.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='src' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dst' type-id='4ccdd8a9' visibility='default' filepath='include/drm/drm_plane.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='visible' type-id='b50a4934' visibility='default' filepath='include/drm/drm_plane.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_plane.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_plane.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='108' column='1' id='149c6638'/>
+      <enum-decl name='drm_color_encoding' filepath='include/drm/drm_color_mgmt.h' line='54' column='1' id='e57e5f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='61' column='1' id='322e1b47'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_property_blob' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='209' column='1' id='3dfb1294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_property.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_property.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head_global' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='head_file' type-id='72f469ec' visibility='default' filepath='include/drm/drm_property.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_property.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_property.h' line='215' column='1'/>
+        </data-member>
+      </class-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='4ccdd8a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x1' type-id='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='include/drm/drm_rect.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_printer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_print.h' line='72' column='1' id='68b6a809'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='printfn' type-id='ef76b4f1' visibility='default' filepath='include/drm/drm_print.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='puts' type-id='12dffdbb' visibility='default' filepath='include/drm/drm_print.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_print.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/drm/drm_print.h' line='77' 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='87' column='1' id='150dc81a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fmt' type-id='80f4b756' visibility='default' filepath='include/linux/printk.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='va' type-id='50bcf651' visibility='default' filepath='include/linux/printk.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_plane_type' filepath='include/drm/drm_plane.h' line='517' column='1' id='5eed3c85'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_crtc_funcs' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='390' column='1' id='e019c76b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cursor_set' type-id='601c5a9c' visibility='default' filepath='include/drm/drm_crtc.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cursor_set2' type-id='3df34728' visibility='default' filepath='include/drm/drm_crtc.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cursor_move' type-id='7f9fdb63' visibility='default' filepath='include/drm/drm_crtc.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gamma_set' type-id='ceacf83c' visibility='default' filepath='include/drm/drm_crtc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_config' type-id='4fc3b355' visibility='default' filepath='include/drm/drm_crtc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='page_flip' type-id='5ad57c34' visibility='default' filepath='include/drm/drm_crtc.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_flip_target' type-id='ccd6746f' visibility='default' filepath='include/drm/drm_crtc.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_property' type-id='e1038882' visibility='default' filepath='include/drm/drm_crtc.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_duplicate_state' type-id='d664ced0' visibility='default' filepath='include/drm/drm_crtc.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_destroy_state' type-id='a3c6fb36' visibility='default' filepath='include/drm/drm_crtc.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_set_property' type-id='102ab76c' visibility='default' filepath='include/drm/drm_crtc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_get_property' type-id='c0240e5c' visibility='default' filepath='include/drm/drm_crtc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='late_register' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='early_unregister' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_crc_source' type-id='ee3b6114' visibility='default' filepath='include/drm/drm_crtc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='verify_crc_source' type-id='31163f5a' visibility='default' filepath='include/drm/drm_crtc.h' line='788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_crc_sources' type-id='bda384fe' visibility='default' filepath='include/drm/drm_crtc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='atomic_print_state' type-id='1f51f8f7' visibility='default' filepath='include/drm/drm_crtc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_vblank_counter' type-id='1dd1747d' visibility='default' filepath='include/drm/drm_crtc.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='enable_vblank' type-id='dfd1cc3d' visibility='default' filepath='include/drm/drm_crtc.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='disable_vblank' type-id='a50616ee' visibility='default' filepath='include/drm/drm_crtc.h' line='870' 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='1129' column='1' id='ef266a3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_crtc.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='11e02f83' visibility='default' filepath='include/drm/drm_crtc.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='y' type-id='8f92235e' visibility='default' filepath='include/drm/drm_crtc.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connectors' type-id='be55f776' visibility='default' filepath='include/drm/drm_crtc.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_connectors' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_crtc.h' line='1138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector' size-in-bits='14208' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='1087' column='1' id='f02c18fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kdev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_connector.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attr' type-id='89a2612a' visibility='default' filepath='include/drm/drm_connector.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_connector.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_connector.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_connector.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='connector_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='connector_type_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='interlace_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='doublescan_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='stereo_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='ycbcr_420_allowed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='registration_state' type-id='0b8fe6b9' visibility='default' filepath='include/drm/drm_connector.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='status' type-id='f7b0e1b4' visibility='default' filepath='include/drm/drm_connector.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='probed_modes' type-id='72f469ec' visibility='default' filepath='include/drm/drm_connector.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='display_info' type-id='228c7c6c' visibility='default' filepath='include/drm/drm_connector.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='funcs' type-id='3fb29739' visibility='default' filepath='include/drm/drm_connector.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='edid_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='properties' type-id='970d3828' visibility='default' filepath='include/drm/drm_connector.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scaling_mode_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='vrr_capable_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='colorspace_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='path_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='max_bpc_property' type-id='26ea5d4c' visibility='default' filepath='include/drm/drm_connector.h' line='1249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='polled' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='dpms' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='helper_private' type-id='90133bf8' visibility='default' filepath='include/drm/drm_connector.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cmdline_mode' type-id='458106cb' visibility='default' filepath='include/drm/drm_connector.h' line='1290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='override_edid' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='encoder_ids' type-id='6f7eb9e8' visibility='default' filepath='include/drm/drm_connector.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='eld' type-id='c768f32d' visibility='default' filepath='include/drm/drm_connector.h' line='1313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='latency_present' type-id='86c49187' visibility='default' filepath='include/drm/drm_connector.h' line='1315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='video_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='audio_latency' type-id='e4266c7e' visibility='default' filepath='include/drm/drm_connector.h' line='1325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='ddc' type-id='b9af02c3' visibility='default' filepath='include/drm/drm_connector.h' line='1336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='null_edid_counter' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='bad_edid_counter' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='edid_corrupt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13448'>
+          <var-decl name='real_edid_checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_entry' type-id='27675065' visibility='default' filepath='include/drm/drm_connector.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_connector.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='tile_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='1394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='has_tile' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='tile_group' type-id='c6c44b9f' visibility='default' filepath='include/drm/drm_connector.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='tile_is_single_monitor' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13832'>
+          <var-decl name='num_h_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13840'>
+          <var-decl name='num_v_tile' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13848'>
+          <var-decl name='tile_h_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13856'>
+          <var-decl name='tile_v_loc' type-id='b96825af' visibility='default' filepath='include/drm/drm_connector.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13872'>
+          <var-decl name='tile_h_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='tile_v_size' type-id='149c6638' visibility='default' filepath='include/drm/drm_connector.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='free_node' type-id='c5ccfee8' visibility='default' filepath='include/drm/drm_connector.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='hdr_sink_metadata' type-id='b459f8ff' visibility='default' filepath='include/drm/drm_connector.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='panel' type-id='c5491077' visibility='default' filepath='include/drm/drm_connector.h' line='1430' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_registration_state' filepath='include/drm/drm_connector.h' line='95' column='1' id='0b8fe6b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DRM_CONNECTOR_INITIALIZING' value='0'/>
+        <enumerator name='DRM_CONNECTOR_REGISTERED' value='1'/>
+        <enumerator name='DRM_CONNECTOR_UNREGISTERED' value='2'/>
+      </enum-decl>
+      <enum-decl name='drm_connector_status' filepath='include/drm/drm_connector.h' line='60' column='1' id='f7b0e1b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='960' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='366' column='1' id='228c7c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height_mm' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpc' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subpixel_order' type-id='a93e6dcd' visibility='default' filepath='include/drm/drm_connector.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='panel_orientation' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='color_formats' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_formats' type-id='aded214c' visibility='default' filepath='include/drm/drm_connector.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_bus_formats' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_tmds_clock' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dvi_dual' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='has_hdmi_infoframe' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='rgb_quant_range_selectable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='edid_hdmi_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cea_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hdmi' type-id='452748b2' visibility='default' filepath='include/drm/drm_connector.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='non_desktop' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='468' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='subpixel_order' filepath='include/drm/drm_connector.h' line='134' column='1' id='a93e6dcd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='186' column='1' id='452748b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scdc' type-id='2c7c7fd8' visibility='default' filepath='include/drm/drm_connector.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='y420_vdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='y420_cmdb_modes' type-id='f05e8e77' visibility='default' filepath='include/drm/drm_connector.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='y420_cmdb_map' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_connector.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='y420_dc_modes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='210' 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='164' column='1' id='2c7c7fd8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='read_request' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='scrambling' type-id='beea899b' visibility='default' filepath='include/drm/drm_connector.h' line='176' 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='147' column='1' id='beea899b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='low_rates' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='155' 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='674' column='1' id='142d8eca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpms' type-id='d379869f' visibility='default' filepath='include/drm/drm_connector.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detect' type-id='9f1392b3' visibility='default' filepath='include/drm/drm_connector.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='force' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fill_modes' type-id='96846df4' visibility='default' filepath='include/drm/drm_connector.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_property' type-id='9a2977d1' visibility='default' filepath='include/drm/drm_connector.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='late_register' type-id='0b8c9d30' visibility='default' filepath='include/drm/drm_connector.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='early_unregister' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_connector.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_duplicate_state' type-id='be89b2b8' visibility='default' filepath='include/drm/drm_connector.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_destroy_state' type-id='6e5d37e2' visibility='default' filepath='include/drm/drm_connector.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_set_property' type-id='69fbf2a0' visibility='default' filepath='include/drm/drm_connector.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_get_property' type-id='456e047e' visibility='default' filepath='include/drm/drm_connector.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='atomic_print_state' type-id='b01310d2' visibility='default' filepath='include/drm/drm_connector.h' line='956' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_connector_state' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='530' column='1' id='5ad3f0d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_connector.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_connector.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='best_encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_connector.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='link_status' type-id='a28dfadd' visibility='default' filepath='include/drm/drm_connector.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_connector.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_connector.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tv' type-id='25b5f0d7' visibility='default' filepath='include/drm/drm_connector.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='self_refresh_aware' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='picture_aspect_ratio' type-id='a30ccd44' visibility='default' filepath='include/drm/drm_connector.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hdcp_content_type' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='scaling_mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='content_protection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='colorspace' type-id='19c2251e' visibility='default' filepath='include/drm/drm_connector.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='writeback_job' type-id='7b4ee155' visibility='default' filepath='include/drm/drm_connector.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_requested_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='max_bpc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_connector.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hdr_output_metadata' type-id='c4126d52' visibility='default' filepath='include/drm/drm_connector.h' line='664' 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='99' column='1' id='d12f4a1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_encoder.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_encoder.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='base' type-id='350f4182' visibility='default' filepath='include/drm/drm_encoder.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/drm/drm_encoder.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='encoder_type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_encoder.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_encoder.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='possible_crtcs' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='possible_clones' type-id='8f92235e' visibility='default' filepath='include/drm/drm_encoder.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_encoder.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bridge' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_encoder.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='funcs' type-id='1701f1ac' visibility='default' filepath='include/drm/drm_encoder.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper_private' type-id='32162fa7' visibility='default' filepath='include/drm/drm_encoder.h' line='177' 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='378' column='1' id='87c471e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_bridge.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoder' type-id='74d89ebd' visibility='default' filepath='include/drm/drm_bridge.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='8582e5ec' visibility='default' filepath='include/drm/drm_bridge.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_bridge.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_bridge.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timings' type-id='10c598f7' visibility='default' filepath='include/drm/drm_bridge.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='funcs' type-id='39e20e4b' visibility='default' filepath='include/drm/drm_bridge.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='driver_private' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_bridge.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_timings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='342' column='1' id='0c695772'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_bus_flags' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='setup_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hold_time_ps' type-id='19c2251e' visibility='default' filepath='include/drm/drm_bridge.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dual_link' type-id='b50a4934' visibility='default' filepath='include/drm/drm_bridge.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_bridge_funcs' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_bridge.h' line='38' column='1' id='5e0dec46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='901effb6' 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='e1fb15d1' 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='2c8c8c19' 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='ea44fe69' 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='e1fb15d1' 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='e1fb15d1' 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='63662edb' 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='e1fb15d1' 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='e1fb15d1' visibility='default' filepath='include/drm/drm_bridge.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='atomic_pre_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='atomic_enable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='atomic_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_post_disable' type-id='ff30d95c' visibility='default' filepath='include/drm/drm_bridge.h' line='335' 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='40' column='1' id='c20384d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='late_register' type-id='5b7d6a61' visibility='default' filepath='include/drm/drm_encoder.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_unregister' type-id='ac9d10e4' visibility='default' filepath='include/drm/drm_encoder.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_link_status' filepath='include/drm/drm_connector.h' line='224' column='1' id='a28dfadd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='515' column='1' id='25b5f0d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subconnector' type-id='b590704f' visibility='default' filepath='include/drm/drm_connector.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='brightness' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='contrast' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flicker_reduction' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='overscan' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saturation' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hue' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='524' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_mode_subconnector' filepath='include/uapi/drm/drm_mode.h' line='344' column='1' id='b590704f'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='drm_connector_tv_margins' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='481' column='1' id='a38825b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bottom' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='left' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='right' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='500' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint8_t' type-id='f9b06939' filepath='include/linux/types.h' line='107' column='1' id='b96825af'/>
+      <class-decl name='drm_cmdline_mode' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/drm/drm_connector.h' line='968' column='1' id='458106cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_connector.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='refresh_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='bpp_specified' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='xres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yres' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='bpp' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refresh' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rb' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='interlace' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='cvt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='440'>
+          <var-decl name='margins' type-id='b50a4934' visibility='default' filepath='include/drm/drm_connector.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='force' type-id='e1a0be31' visibility='default' filepath='include/drm/drm_connector.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rotation_reflection' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_connector.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tv_margins' type-id='a38825b1' visibility='default' filepath='include/drm/drm_connector.h' line='1076' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='drm_connector_force' filepath='include/drm/drm_connector.h' line='47' column='1' id='e1a0be31'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1576' column='1' id='edb008f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/drm/drm_connector.h' line='1577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_connector.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_connector.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='group_data' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_connector.h' line='1580' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdr_sink_metadata' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='375' column='1' id='b459f8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metadata_type' type-id='3f1a6b60' visibility='default' filepath='include/linux/hdmi.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='c778239e' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='383' column='1' id='c778239e'>
+        <data-member access='public'>
+          <var-decl name='hdmi_type1' type-id='4ba022f8' visibility='default' filepath='include/linux/hdmi.h' line='384' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hdr_static_metadata' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='362' column='1' id='4ba022f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eotf' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='metadata_type' type-id='8f048e17' visibility='default' filepath='include/linux/hdmi.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_fall' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='min_cll' type-id='d315442e' visibility='default' filepath='include/linux/hdmi.h' line='367' 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='40' column='1' id='64249e24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='2aa44dc9' visibility='default' filepath='include/drm/drm_vblank.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_vblank.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sequence' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_vblank.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='event' type-id='4eb3729d' visibility='default' filepath='include/drm/drm_vblank.h' line='76' 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='89' column='1' id='2aa44dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='completion' type-id='389faaf7' visibility='default' filepath='include/drm/drm_file.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completion_release' type-id='e3fbbc86' visibility='default' filepath='include/drm/drm_file.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event' type-id='5b35aab5' visibility='default' filepath='include/drm/drm_file.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fence' type-id='28271da3' visibility='default' filepath='include/drm/drm_file.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='file_priv' type-id='9e99ecc1' visibility='default' filepath='include/drm/drm_file.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pending_link' type-id='72f469ec' visibility='default' filepath='include/drm/drm_file.h' line='150' 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='973' column='1' id='9857a465'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='975' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/drm/drm_vblank.h' line='56' column='1' id='4eb3729d'>
+        <data-member access='public'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/drm/drm_vblank.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vbl' type-id='bc6bca7e' visibility='default' filepath='include/drm/drm_vblank.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='seq' type-id='3aca1eaa' visibility='default' filepath='include/drm/drm_vblank.h' line='75' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='drm_event_vblank' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm.h' line='982' column='1' id='bc6bca7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tv_sec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tv_usec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='crtc_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm.h' line='988' 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='994' column='1' id='3aca1eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='9857a465' visibility='default' filepath='include/uapi/drm/drm.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user_data' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_ns' type-id='49659421' visibility='default' filepath='include/uapi/drm/drm.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm.h' line='998' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_crtc_state' size-in-bits='4032' is-struct='yes' visibility='default' filepath='include/drm/drm_crtc.h' line='100' column='1' id='ea65fb21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crtc' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_crtc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='planes_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='mode_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='active_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='connectors_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='zpos_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='color_mgmt_changed' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_vblank' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='plane_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connector_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='encoder_mask' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adjusted_mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='mode' type-id='55efd1a3' visibility='default' filepath='include/drm/drm_crtc.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='mode_blob' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='degamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='ctm' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='gamma_lut' type-id='c4126d52' visibility='default' filepath='include/drm/drm_crtc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='target_vblank' type-id='19c2251e' visibility='default' filepath='include/drm/drm_crtc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='async_flip' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3816'>
+          <var-decl name='vrr_enabled' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='self_refresh_active' type-id='b50a4934' visibility='default' filepath='include/drm/drm_crtc.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event' type-id='6301fad2' visibility='default' filepath='include/drm/drm_crtc.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_crtc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_crtc.h' line='375' column='1'/>
+        </data-member>
+      </class-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='3bcab18a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='80f4b756' 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='b50a4934' 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='b50a4934' 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='54a031e1' 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='95e97e5e' 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='95e97e5e' 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='b59d7dce' 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='b5ab048f' 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='0f47abb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_frame_counter' type-id='b50a4934' 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='8f92235e' 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='1e6c0b80' visibility='default' filepath='include/drm/drm_debugfs_crc.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_aux_msg' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1231' column='1' id='04e455f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='request' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='reply' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_aux_cec' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1250' column='1' id='507e56d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unregister_work' type-id='5ad6e0ef' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1371' column='1' id='609c704c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='revision' type-id='002ac4a6' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_lanes' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='capabilities' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_helper.h' line='1375' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8f048e17' size-in-bits='64' id='474e5dcc'/>
+      <pointer-type-def type-id='075e0246' size-in-bits='64' id='b94a2f7c'/>
+      <pointer-type-def type-id='ba3b5f2c' size-in-bits='64' id='bda384fe'/>
+      <qualified-type-def type-id='5e0dec46' const='yes' id='545e9343'/>
+      <pointer-type-def type-id='545e9343' size-in-bits='64' id='39e20e4b'/>
+      <qualified-type-def type-id='0c695772' const='yes' id='fdc939a7'/>
+      <pointer-type-def type-id='fdc939a7' size-in-bits='64' id='10c598f7'/>
+      <qualified-type-def type-id='142d8eca' const='yes' id='f508b3a9'/>
+      <pointer-type-def type-id='f508b3a9' size-in-bits='64' id='3fb29739'/>
+      <qualified-type-def type-id='c571b65b' const='yes' id='3ab32f02'/>
+      <pointer-type-def type-id='3ab32f02' size-in-bits='64' id='90133bf8'/>
+      <qualified-type-def type-id='5ad3f0d0' const='yes' id='9b2db0ab'/>
+      <pointer-type-def type-id='9b2db0ab' size-in-bits='64' id='c9ecdb13'/>
+      <qualified-type-def type-id='e019c76b' const='yes' id='a192e032'/>
+      <pointer-type-def type-id='a192e032' size-in-bits='64' id='7236c5c8'/>
+      <qualified-type-def type-id='ad4d49e8' const='yes' id='d9de7d63'/>
+      <pointer-type-def type-id='d9de7d63' size-in-bits='64' id='423f39eb'/>
+      <qualified-type-def type-id='ea65fb21' const='yes' id='14d2a428'/>
+      <pointer-type-def type-id='14d2a428' size-in-bits='64' id='c9982f26'/>
+      <qualified-type-def type-id='55efd1a3' const='yes' id='fffdaf52'/>
+      <pointer-type-def type-id='fffdaf52' size-in-bits='64' id='745b39e8'/>
+      <qualified-type-def type-id='c20384d9' const='yes' id='532f030e'/>
+      <pointer-type-def type-id='532f030e' size-in-bits='64' id='1701f1ac'/>
+      <qualified-type-def type-id='3cdc7e32' const='yes' id='d4db3637'/>
+      <pointer-type-def type-id='d4db3637' size-in-bits='64' id='32162fa7'/>
+      <qualified-type-def type-id='a588cbed' const='yes' id='4ba7baf2'/>
+      <pointer-type-def type-id='4ba7baf2' size-in-bits='64' id='f10b2208'/>
+      <pointer-type-def type-id='d47d86c5' size-in-bits='64' id='f2bb73e9'/>
+      <qualified-type-def type-id='eb452ce6' const='yes' id='9ca9fcc5'/>
+      <pointer-type-def type-id='9ca9fcc5' size-in-bits='64' id='8e992c3d'/>
+      <qualified-type-def type-id='b444361f' const='yes' id='59fa7bb0'/>
+      <pointer-type-def type-id='59fa7bb0' size-in-bits='64' id='3f50936e'/>
+      <qualified-type-def type-id='fa206174' const='yes' id='82c5dbd5'/>
+      <pointer-type-def type-id='82c5dbd5' size-in-bits='64' id='dc79526d'/>
+      <qualified-type-def type-id='05bdad78' const='yes' id='70dd03cd'/>
+      <pointer-type-def type-id='70dd03cd' size-in-bits='64' id='92ed24a5'/>
+      <qualified-type-def type-id='60eff7ff' const='yes' id='bdf845e8'/>
+      <pointer-type-def type-id='bdf845e8' size-in-bits='64' id='cfd5d066'/>
+      <qualified-type-def type-id='7cfcbd14' const='yes' id='5b7f098d'/>
+      <pointer-type-def type-id='5b7f098d' size-in-bits='64' id='affc31e5'/>
+      <qualified-type-def type-id='a1700eb5' const='yes' id='c7516f02'/>
+      <pointer-type-def type-id='c7516f02' size-in-bits='64' id='ed31fbf8'/>
+      <qualified-type-def type-id='21fe2d6b' const='yes' id='d79644f2'/>
+      <pointer-type-def type-id='d79644f2' size-in-bits='64' id='398e6008'/>
+      <qualified-type-def type-id='547b1199' const='yes' id='9be24bae'/>
+      <pointer-type-def type-id='9be24bae' size-in-bits='64' id='e93ce0cc'/>
+      <qualified-type-def type-id='a94a041a' const='yes' id='00d2c7e1'/>
+      <pointer-type-def type-id='00d2c7e1' size-in-bits='64' id='16d08491'/>
+      <pointer-type-def type-id='ce8c45a3' size-in-bits='64' id='28271da3'/>
+      <pointer-type-def type-id='874fb8c0' size-in-bits='64' id='c137ea76'/>
+      <pointer-type-def type-id='8bb9a8e8' size-in-bits='64' id='e3dd029e'/>
+      <pointer-type-def type-id='6a65de43' size-in-bits='64' id='27c3122f'/>
+      <pointer-type-def type-id='87c471e6' size-in-bits='64' id='8582e5ec'/>
+      <pointer-type-def type-id='ec280828' size-in-bits='64' id='254852de'/>
+      <pointer-type-def type-id='f02c18fa' size-in-bits='64' id='4db02c58'/>
+      <pointer-type-def type-id='4db02c58' size-in-bits='64' id='be55f776'/>
+      <pointer-type-def type-id='5ad3f0d0' size-in-bits='64' id='249ef586'/>
+      <pointer-type-def type-id='e184aa4e' size-in-bits='64' id='be89b2b8'/>
+      <pointer-type-def type-id='3f5f978b' size-in-bits='64' id='b64ad7cb'/>
+      <pointer-type-def type-id='09d6e909' size-in-bits='64' id='3f40b771'/>
+      <pointer-type-def type-id='0f47abb9' size-in-bits='64' id='54a031e1'/>
+      <pointer-type-def type-id='ea65fb21' size-in-bits='64' id='35078cb9'/>
+      <pointer-type-def type-id='fe3cfa56' size-in-bits='64' id='d664ced0'/>
+      <pointer-type-def type-id='e96cc76d' size-in-bits='64' id='8898134d'/>
+      <pointer-type-def type-id='55efd1a3' size-in-bits='64' id='11e02f83'/>
+      <pointer-type-def type-id='b2983aea' size-in-bits='64' id='7c5f8cd8'/>
+      <pointer-type-def type-id='04e455f8' size-in-bits='64' id='c8851b4e'/>
+      <pointer-type-def type-id='609c704c' size-in-bits='64' id='f89c98aa'/>
+      <pointer-type-def type-id='73303b8d' size-in-bits='64' id='1d52bc4d'/>
+      <pointer-type-def type-id='d12f4a1d' size-in-bits='64' id='74d89ebd'/>
+      <pointer-type-def type-id='9857a465' size-in-bits='64' id='5b35aab5'/>
+      <pointer-type-def type-id='55b7e9ac' size-in-bits='64' id='147b8c0a'/>
+      <pointer-type-def type-id='cc4a63b9' size-in-bits='64' id='9e99ecc1'/>
+      <pointer-type-def type-id='a0eb3346' size-in-bits='64' id='7b332e1c'/>
+      <pointer-type-def type-id='228968a1' size-in-bits='64' id='fd8daf85'/>
+      <pointer-type-def type-id='3bc524c0' size-in-bits='64' id='abd62a96'/>
+      <pointer-type-def type-id='f8a4685d' size-in-bits='64' id='07df1a3d'/>
+      <pointer-type-def type-id='d5cb77a8' size-in-bits='64' id='6c3b3f8e'/>
+      <pointer-type-def type-id='ef266a3b' size-in-bits='64' id='8106240b'/>
+      <pointer-type-def type-id='118c2af9' size-in-bits='64' id='d1499e71'/>
+      <pointer-type-def type-id='ae5fc04a' size-in-bits='64' id='b4b06bb8'/>
+      <pointer-type-def type-id='970d3828' size-in-bits='64' id='c353cb3e'/>
+      <pointer-type-def type-id='b9675e9f' size-in-bits='64' id='c5491077'/>
+      <pointer-type-def type-id='64249e24' size-in-bits='64' id='6301fad2'/>
+      <pointer-type-def type-id='60f2213f' size-in-bits='64' id='a6711537'/>
+      <pointer-type-def type-id='a1700eb5' size-in-bits='64' id='d0835005'/>
+      <pointer-type-def type-id='58313606' size-in-bits='64' id='841501c0'/>
+      <pointer-type-def type-id='68b6a809' size-in-bits='64' id='7ac48c21'/>
+      <pointer-type-def type-id='811caa36' size-in-bits='64' id='26ea5d4c'/>
+      <pointer-type-def type-id='3dfb1294' size-in-bits='64' id='c4126d52'/>
+      <pointer-type-def type-id='12506762' size-in-bits='64' id='fa013de0'/>
+      <pointer-type-def type-id='edb008f7' size-in-bits='64' id='c6c44b9f'/>
+      <pointer-type-def type-id='e5ebb0e4' size-in-bits='64' id='04d2f8d2'/>
+      <pointer-type-def type-id='1b04dce5' size-in-bits='64' id='0c6d12d5'/>
+      <pointer-type-def type-id='8008efb8' size-in-bits='64' id='dbdf0f9e'/>
+      <pointer-type-def type-id='71f18ea5' size-in-bits='64' id='7b4ee155'/>
+      <pointer-type-def type-id='746df737' size-in-bits='64' id='9f1392b3'/>
+      <pointer-type-def type-id='013ba5ed' size-in-bits='64' id='2c8c8c19'/>
+      <pointer-type-def type-id='f2dcb698' size-in-bits='64' id='57ca5882'/>
+      <pointer-type-def type-id='ec5384d3' size-in-bits='64' id='b9af02c3'/>
+      <pointer-type-def type-id='d5526a99' size-in-bits='64' id='f1537b61'/>
+      <pointer-type-def type-id='56ed3a25' size-in-bits='64' id='cd44bc95'/>
+      <pointer-type-def type-id='1a96c066' size-in-bits='64' id='a556dccb'/>
+      <pointer-type-def type-id='e8862ab4' size-in-bits='64' id='901effb6'/>
+      <pointer-type-def type-id='f1babf06' size-in-bits='64' id='0b8c9d30'/>
+      <pointer-type-def type-id='6d905adc' size-in-bits='64' id='456e047e'/>
+      <pointer-type-def type-id='f43da4de' size-in-bits='64' id='69fbf2a0'/>
+      <pointer-type-def type-id='97471c35' size-in-bits='64' id='9a2977d1'/>
+      <pointer-type-def type-id='4dedc1bb' size-in-bits='64' id='d379869f'/>
+      <pointer-type-def type-id='699ab992' size-in-bits='64' id='96846df4'/>
+      <pointer-type-def type-id='71fd1591' size-in-bits='64' id='dfd1cc3d'/>
+      <pointer-type-def type-id='172997aa' size-in-bits='64' id='ee3b6114'/>
+      <pointer-type-def type-id='93df1bf0' size-in-bits='64' id='31163f5a'/>
+      <pointer-type-def type-id='68adba6a' size-in-bits='64' id='c0240e5c'/>
+      <pointer-type-def type-id='c01f4982' size-in-bits='64' id='102ab76c'/>
+      <pointer-type-def type-id='a6dcac82' size-in-bits='64' id='601c5a9c'/>
+      <pointer-type-def type-id='17f9ad66' size-in-bits='64' id='3df34728'/>
+      <pointer-type-def type-id='615707ca' size-in-bits='64' id='5ad57c34'/>
+      <pointer-type-def type-id='4d41685b' size-in-bits='64' id='ccd6746f'/>
+      <pointer-type-def type-id='971a52d0' size-in-bits='64' id='e1038882'/>
+      <pointer-type-def type-id='c2f3c8c7' size-in-bits='64' id='7f9fdb63'/>
+      <pointer-type-def type-id='84730732' size-in-bits='64' id='ceacf83c'/>
+      <pointer-type-def type-id='a61b2dc8' size-in-bits='64' id='d74fad0a'/>
+      <pointer-type-def type-id='3d75b067' size-in-bits='64' id='69b48bd3'/>
+      <pointer-type-def type-id='874459e5' size-in-bits='64' id='5b7d6a61'/>
+      <pointer-type-def type-id='5c166f04' size-in-bits='64' id='541466be'/>
+      <pointer-type-def type-id='800ed759' size-in-bits='64' id='040ef975'/>
+      <pointer-type-def type-id='322dfcc1' size-in-bits='64' id='4fc3b355'/>
+      <pointer-type-def type-id='5f5b9bdb' size-in-bits='64' id='e1ec3697'/>
+      <pointer-type-def type-id='332a260c' size-in-bits='64' id='a6945abe'/>
+      <pointer-type-def type-id='77328cce' size-in-bits='64' id='16723420'/>
+      <pointer-type-def type-id='ef46a2bb' size-in-bits='64' id='d58d6a5f'/>
+      <pointer-type-def type-id='c016e2d6' size-in-bits='64' id='49e4df08'/>
+      <pointer-type-def type-id='304ac94e' size-in-bits='64' id='8f0815d8'/>
+      <pointer-type-def type-id='4033dd6b' size-in-bits='64' id='6ae2afd7'/>
+      <pointer-type-def type-id='674bdea8' size-in-bits='64' id='4813c4da'/>
+      <pointer-type-def type-id='86768fbb' size-in-bits='64' id='99dc8ee7'/>
+      <pointer-type-def type-id='5d16c291' size-in-bits='64' id='3d5afe0d'/>
+      <pointer-type-def type-id='ae99f6b5' size-in-bits='64' id='ea44fe69'/>
+      <pointer-type-def type-id='1c171578' size-in-bits='64' id='4af717b2'/>
+      <pointer-type-def type-id='6c1c578a' size-in-bits='64' id='5deab224'/>
+      <pointer-type-def type-id='c78b7721' size-in-bits='64' id='1dd1747d'/>
+      <pointer-type-def type-id='64f1e67b' size-in-bits='64' id='d0ff2b97'/>
+      <pointer-type-def type-id='149c6638' size-in-bits='64' id='8a121f49'/>
+      <pointer-type-def type-id='8f92235e' size-in-bits='64' id='90421557'/>
+      <pointer-type-def type-id='9c313c2d' size-in-bits='64' id='5d6479ae'/>
+      <pointer-type-def type-id='150dc81a' size-in-bits='64' id='3b5c2208'/>
+      <pointer-type-def type-id='2aee9912' size-in-bits='64' id='50bcf651'/>
+      <pointer-type-def type-id='fac43f4c' size-in-bits='64' id='e3fbbc86'/>
+      <pointer-type-def type-id='891c6957' size-in-bits='64' id='75795f13'/>
+      <pointer-type-def type-id='da3b08cd' size-in-bits='64' id='e1fb15d1'/>
+      <pointer-type-def type-id='81d7511f' size-in-bits='64' id='63662edb'/>
+      <pointer-type-def type-id='7775f78a' size-in-bits='64' id='ff30d95c'/>
+      <pointer-type-def type-id='cecfa2ad' size-in-bits='64' id='a3cb28f1'/>
+      <pointer-type-def type-id='07c62f88' size-in-bits='64' id='6e5d37e2'/>
+      <pointer-type-def type-id='2a02b07c' size-in-bits='64' id='a50616ee'/>
+      <pointer-type-def type-id='52d21874' size-in-bits='64' id='a3c6fb36'/>
+      <pointer-type-def type-id='a222e3fe' size-in-bits='64' id='62995e90'/>
+      <pointer-type-def type-id='ec9f1e6a' size-in-bits='64' id='ac9d10e4'/>
+      <pointer-type-def type-id='5c6f297d' size-in-bits='64' id='dd634c69'/>
+      <pointer-type-def type-id='ba9f6db4' size-in-bits='64' id='20e4b16e'/>
+      <pointer-type-def type-id='4c7af498' size-in-bits='64' id='d196b9c2'/>
+      <pointer-type-def type-id='cf8cfd4f' size-in-bits='64' id='12dffdbb'/>
+      <pointer-type-def type-id='6f026338' size-in-bits='64' id='b01310d2'/>
+      <pointer-type-def type-id='792f7033' size-in-bits='64' id='1f51f8f7'/>
+      <pointer-type-def type-id='031e8b8d' size-in-bits='64' id='86c0ad39'/>
+      <pointer-type-def type-id='c0d6093d' size-in-bits='64' id='ef76b4f1'/>
+      <pointer-type-def type-id='d385bfac' size-in-bits='64' id='8616a4a6'/>
+      <pointer-type-def type-id='d6574e69' size-in-bits='64' id='8f19938d'/>
+      <pointer-type-def type-id='9d4721a2' size-in-bits='64' id='6523d744'/>
+      <function-decl name='drm_dp_link_train_clock_recovery_delay' mangled-name='drm_dp_link_train_clock_recovery_delay' filepath='drivers/gpu/drm/drm_dp_helper.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_train_clock_recovery_delay'>
+        <parameter type-id='bbaf3419' name='dpcd' filepath='drivers/gpu/drm/drm_dp_helper.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_train_channel_eq_delay' mangled-name='drm_dp_link_train_channel_eq_delay' filepath='drivers/gpu/drm/drm_dp_helper.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_train_channel_eq_delay'>
+        <parameter type-id='bbaf3419' name='dpcd' filepath='drivers/gpu/drm/drm_dp_helper.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_rate_to_bw_code' mangled-name='drm_dp_link_rate_to_bw_code' filepath='drivers/gpu/drm/drm_dp_helper.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_rate_to_bw_code'>
+        <parameter type-id='95e97e5e' name='link_rate' filepath='drivers/gpu/drm/drm_dp_helper.c' line='153' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_probe' mangled-name='drm_dp_link_probe' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_probe'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_read' mangled-name='drm_dp_dpcd_read' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_read'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpu/drm/drm_dp_helper.c' line='266' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/gpu/drm/drm_dp_helper.c' line='267' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_dp_helper.c' line='267' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_power_up' mangled-name='drm_dp_link_power_up' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_power_up'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='438' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_power_down' mangled-name='drm_dp_link_power_down' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_power_down'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='476' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_link_configure' mangled-name='drm_dp_link_configure' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_link_configure'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1'/>
+        <parameter type-id='f89c98aa' name='link' filepath='drivers/gpu/drm/drm_dp_helper.c' line='507' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_get_adjust_request_voltage' mangled-name='drm_dp_get_adjust_request_voltage' filepath='drivers/gpu/drm/drm_dp_helper.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_get_adjust_request_voltage'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='97' column='1'/>
+        <parameter type-id='95e97e5e' name='lane' filepath='drivers/gpu/drm/drm_dp_helper.c' line='98' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_get_adjust_request_pre_emphasis' mangled-name='drm_dp_get_adjust_request_pre_emphasis' filepath='drivers/gpu/drm/drm_dp_helper.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_get_adjust_request_pre_emphasis'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='110' column='1'/>
+        <parameter type-id='95e97e5e' name='lane' filepath='drivers/gpu/drm/drm_dp_helper.c' line='111' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_write' mangled-name='drm_dp_dpcd_write' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_write'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/gpu/drm/drm_dp_helper.c' line='311' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/gpu/drm/drm_dp_helper.c' line='312' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_dp_helper.c' line='312' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_dp_dpcd_read_link_status' mangled-name='drm_dp_dpcd_read_link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_dpcd_read_link_status'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='331' column='1'/>
+        <parameter type-id='8bff8096' name='status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='332' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_clock_recovery_ok' mangled-name='drm_dp_clock_recovery_ok' filepath='drivers/gpu/drm/drm_dp_helper.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_clock_recovery_ok'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='82' column='1'/>
+        <parameter type-id='95e97e5e' name='lane_count' filepath='drivers/gpu/drm/drm_dp_helper.c' line='83' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_channel_eq_ok' mangled-name='drm_dp_channel_eq_ok' filepath='drivers/gpu/drm/drm_dp_helper.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_channel_eq_ok'>
+        <parameter type-id='bbaf3419' name='link_status' filepath='drivers/gpu/drm/drm_dp_helper.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='lane_count' filepath='drivers/gpu/drm/drm_dp_helper.c' line='63' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_bw_code_to_link_rate' mangled-name='drm_dp_bw_code_to_link_rate' filepath='drivers/gpu/drm/drm_dp_helper.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_bw_code_to_link_rate'>
+        <parameter type-id='f9b06939' name='link_bw' filepath='drivers/gpu/drm/drm_dp_helper.c' line='160' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_aux_unregister' mangled-name='drm_dp_aux_unregister' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_aux_unregister'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1206' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_aux_register' mangled-name='drm_dp_aux_register' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_aux_register'>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_helper.c' line='1174' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f3287987' size-in-bits='64' id='a588c23f'/>
+      <pointer-type-def type-id='1227fbe9' size-in-bits='64' id='3ef2bf11'/>
+      <pointer-type-def type-id='ac0bc8bd' size-in-bits='64' id='33ceb73d'/>
+      <pointer-type-def type-id='fa296b96' size-in-bits='64' id='93901aac'/>
+      <class-decl name='cec_connector_info' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='170' column='1' id='a809e963'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='deb646b2' visibility='default' filepath='include/media/cec.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_devnode' size-in-bits='9024' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='42' column='1' id='c2b8d3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/cec.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cdev' type-id='22f86351' visibility='default' filepath='include/media/cec.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/cec.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8616'>
+          <var-decl name='unregistered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='fhs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_log_addrs' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='355' column='1' id='c6954120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_addr' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cec_version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_log_addrs' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osd_name' type-id='ec17bebb' visibility='default' filepath='include/uapi/linux/cec.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='primary_device_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='log_addr_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='all_device_types' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='features' type-id='c9f5704d' visibility='default' filepath='include/uapi/linux/cec.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d297aced' size-in-bits='64' id='4bc4fd45'/>
+      <function-type size-in-bits='64' id='ba3b5f2c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='78c01427'/>
+        <return type-id='13956559'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d47d86c5'>
+        <parameter type-id='92ed24a5'/>
+        <return type-id='f10b2208'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a65de43'>
+        <parameter type-id='8898134d'/>
+        <return type-id='e3dd029e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e184aa4e'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='249ef586'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe3cfa56'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='35078cb9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='228968a1'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='92ed24a5'/>
+        <return type-id='7b332e1c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58313606'>
+        <parameter type-id='a6711537'/>
+        <return type-id='d0835005'/>
+      </function-type>
+      <function-type size-in-bits='64' id='746df737'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='f7b0e1b4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='013ba5ed'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2dcb698'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8862ab4'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1babf06'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d905adc'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='c9ecdb13'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f43da4de'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97471c35'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4dedc1bb'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='699ab992'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71fd1591'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='172997aa'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93df1bf0'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='78c01427'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68adba6a'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='c9982f26'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c01f4982'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6dcac82'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f9ad66'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='3ff5601b'/>
+        <parameter type-id='3ff5601b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='615707ca'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='6301fad2'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d41685b'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='6301fad2'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='971a52d0'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2f3c8c7'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84730732'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='26d4d46f'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a61b2dc8'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e3dd029e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d75b067'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e3dd029e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='874459e5'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c166f04'>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='800ed759'>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='254852de'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='322dfcc1'>
+        <parameter type-id='8106240b'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f5b9bdb'>
+        <parameter type-id='a6711537'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='332a260c'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='ed31fbf8'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77328cce'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef46a2bb'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d1499e71'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c016e2d6'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='304ac94e'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='26ea5d4c'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4033dd6b'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='674bdea8'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='cd44bc95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86768fbb'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='a84c031d'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a556dccb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d16c291'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae99f6b5'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c171578'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='9c313c2d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c1c578a'>
+        <parameter type-id='7c5f8cd8'/>
+        <parameter type-id='c8851b4e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c78b7721'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64f1e67b'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fac43f4c'>
+        <parameter type-id='389faaf7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='891c6957'>
+        <parameter type-id='e3dd029e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da3b08cd'>
+        <parameter type-id='8582e5ec'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81d7511f'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7775f78a'>
+        <parameter type-id='8582e5ec'/>
+        <parameter type-id='e3dd029e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cecfa2ad'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c62f88'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a02b07c'>
+        <parameter type-id='b64ad7cb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52d21874'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a222e3fe'>
+        <parameter type-id='8898134d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec9f1e6a'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c6f297d'>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba9f6db4'>
+        <parameter type-id='a6711537'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c7af498'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf8cfd4f'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f026338'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='c9ecdb13'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='792f7033'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='c9982f26'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='031e8b8d'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='ed31fbf8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0d6093d'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='3b5c2208'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d385bfac'>
+        <parameter type-id='b9af02c3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6574e69'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d4721a2'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='7a35a8fe' size-in-bits='64' id='75ae4804'/>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='240' id='42c8bff1'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='384' id='c9f5704d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='120' id='ec17bebb'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='cec_data' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='60' column='1' id='f3287987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/media/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msg' type-id='488c1da8' visibility='default' filepath='include/media/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fh' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/media/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='c' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='attempts' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='blocking' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_fh' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='86' column='1' id='1227fbe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/media/cec.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='mode_follower' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='events' type-id='e8d7d286' visibility='default' filepath='include/media/cec.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queued_events' type-id='c24d1a13' visibility='default' filepath='include/media/cec.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='total_queued_events' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='core_events' type-id='379ac606' visibility='default' filepath='include/media/cec.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='msgs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queued_msgs' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac0bc8bd'/>
+      <class-decl name='cec_pin' is-struct='yes' visibility='default' is-declaration-only='yes' id='fa296b96'/>
+      <class-decl name='rc_dev' size-in-bits='20736' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='162' column='1' id='7a35a8fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='managed_alloc' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/media/rc-core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='input_phys' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='input_id' type-id='d99ed569' visibility='default' filepath='include/media/rc-core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='map_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='rc_map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/rc-core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='raw' type-id='696ed472' visibility='default' filepath='include/media/rc-core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/media/rc-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='driver_type' type-id='d4dbe3db' visibility='default' filepath='include/media/rc-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9000'>
+          <var-decl name='encode_wakeup' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='allowed_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='enabled_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='allowed_wakeup_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='wakeup_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='scancode_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='scancode_wakeup_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='scancode_mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='users' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/rc-core.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9568'>
+          <var-decl name='keypressed' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='keyup_jiffies' type-id='7359adad' visibility='default' filepath='include/media/rc-core.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='timer_keyup' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='timer_repeat' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='last_keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='last_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='last_scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='last_toggle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='max_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='rx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='tx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='lirc_dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='lirc_cdev' type-id='22f86351' visibility='default' filepath='include/media/rc-core.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='gap_start' type-id='fbc017ef' visibility='default' filepath='include/media/rc-core.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='gap_duration' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='gap' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19616'>
+          <var-decl name='lirc_fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='lirc_fh' type-id='72f469ec' visibility='default' filepath='include/media/rc-core.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='change_protocol' type-id='a113447f' visibility='default' filepath='include/media/rc-core.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='open' type-id='7c07671a' visibility='default' filepath='include/media/rc-core.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='close' type-id='35513fbd' visibility='default' filepath='include/media/rc-core.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='s_tx_mask' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='s_tx_carrier' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='s_tx_duty_cycle' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='s_rx_carrier_range' type-id='03935b08' visibility='default' filepath='include/media/rc-core.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='tx_ir' type-id='86089bb2' visibility='default' filepath='include/media/rc-core.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='s_idle' type-id='7e6d7408' visibility='default' filepath='include/media/rc-core.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='s_learning_mode' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='s_carrier_report' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='s_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='s_wakeup_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='s_timeout' type-id='efba8d40' visibility='default' filepath='include/media/rc-core.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3c91c090' const='yes' id='d297aced'/>
+      <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/>
+      <union-decl name='__anonymous_union__2' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/media/cec.h' line='172' column='1' id='deb646b2'>
+        <data-member access='public'>
+          <var-decl name='drm' type-id='8c7b18b1' visibility='default' filepath='include/media/cec.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/media/cec.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='512' id='9d2cf33e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6e21d41e' size-in-bits='1536' id='379ac606'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='cec_adap_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='111' column='1' id='3c91c090'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adap_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adap_monitor_all_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='adap_monitor_pin_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adap_log_addr' type-id='7b15200c' visibility='default' filepath='include/media/cec.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap_transmit' type-id='d5951000' visibility='default' filepath='include/media/cec.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='adap_status' type-id='c4365925' visibility='default' filepath='include/media/cec.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='adap_free' type-id='6dbc77f1' visibility='default' filepath='include/media/cec.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='error_inj_show' type-id='025f347e' visibility='default' filepath='include/media/cec.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='error_inj_parse_line' type-id='56c9c562' visibility='default' filepath='include/media/cec.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='received' type-id='6240ec2f' visibility='default' filepath='include/media/cec.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_drm_connector_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='156' column='1' id='8c7b18b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card_no' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='connector_id' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_msg' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='57' column='1' id='488c1da8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='timeout' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reply' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='rx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='tx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='tx_arb_lost_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_nack_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='tx_low_drive_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='tx_error_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='71' 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='59' column='1' id='d99ed569'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='108' column='1' id='9ab3364f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan' type-id='57909d12' visibility='default' filepath='include/media/rc-map.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alloc' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rc_proto' type-id='17862576' visibility='default' filepath='include/media/rc-map.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/rc-map.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-map.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_scancode_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='38' column='1' id='f3a6417e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='320' id='9f18d529'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <enum-decl name='rc_driver_type' filepath='include/media/rc-core.h' line='27' column='1' id='d4dbe3db'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_DRIVER_SCANCODE' value='0'/>
+        <enumerator name='RC_DRIVER_IR_RAW' value='1'/>
+        <enumerator name='RC_DRIVER_IR_RAW_TX' value='2'/>
+      </enum-decl>
+      <enum-decl name='rc_proto' filepath='include/uapi/linux/lirc.h' line='200' column='1' id='17862576'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_PROTO_UNKNOWN' value='0'/>
+        <enumerator name='RC_PROTO_OTHER' value='1'/>
+        <enumerator name='RC_PROTO_RC5' value='2'/>
+        <enumerator name='RC_PROTO_RC5X_20' value='3'/>
+        <enumerator name='RC_PROTO_RC5_SZ' value='4'/>
+        <enumerator name='RC_PROTO_JVC' value='5'/>
+        <enumerator name='RC_PROTO_SONY12' value='6'/>
+        <enumerator name='RC_PROTO_SONY15' value='7'/>
+        <enumerator name='RC_PROTO_SONY20' value='8'/>
+        <enumerator name='RC_PROTO_NEC' value='9'/>
+        <enumerator name='RC_PROTO_NECX' value='10'/>
+        <enumerator name='RC_PROTO_NEC32' value='11'/>
+        <enumerator name='RC_PROTO_SANYO' value='12'/>
+        <enumerator name='RC_PROTO_MCIR2_KBD' value='13'/>
+        <enumerator name='RC_PROTO_MCIR2_MSE' value='14'/>
+        <enumerator name='RC_PROTO_RC6_0' value='15'/>
+        <enumerator name='RC_PROTO_RC6_6A_20' value='16'/>
+        <enumerator name='RC_PROTO_RC6_6A_24' value='17'/>
+        <enumerator name='RC_PROTO_RC6_6A_32' value='18'/>
+        <enumerator name='RC_PROTO_RC6_MCE' value='19'/>
+        <enumerator name='RC_PROTO_SHARP' value='20'/>
+        <enumerator name='RC_PROTO_XMP' value='21'/>
+        <enumerator name='RC_PROTO_CEC' value='22'/>
+        <enumerator name='RC_PROTO_IMON' value='23'/>
+        <enumerator name='RC_PROTO_RCMM12' value='24'/>
+        <enumerator name='RC_PROTO_RCMM24' value='25'/>
+        <enumerator name='RC_PROTO_RCMM32' value='26'/>
+        <enumerator name='RC_PROTO_XBOX_DVD' value='27'/>
+      </enum-decl>
+      <pointer-type-def type-id='2e443c2b' size-in-bits='64' id='74b427eb'/>
+      <pointer-type-def type-id='cd5ad9b0' size-in-bits='64' id='7c07671a'/>
+      <pointer-type-def type-id='05cdb97d' size-in-bits='64' id='0b603cc1'/>
+      <pointer-type-def type-id='51b5f0bf' size-in-bits='64' id='a479b17b'/>
+      <pointer-type-def type-id='6e44244d' size-in-bits='64' id='27b80621'/>
+      <pointer-type-def type-id='ec263c6e' size-in-bits='64' id='03935b08'/>
+      <pointer-type-def type-id='d0615a9b' size-in-bits='64' id='a113447f'/>
+      <pointer-type-def type-id='74912d6e' size-in-bits='64' id='efba8d40'/>
+      <pointer-type-def type-id='a82fc150' size-in-bits='64' id='86089bb2'/>
+      <pointer-type-def type-id='986a13e4' size-in-bits='64' id='696ed472'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1024' id='e8d7d286'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='128' id='c24d1a13'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='25048781' size-in-bits='64' id='35513fbd'/>
+      <pointer-type-def type-id='437aead6' size-in-bits='64' id='7e6d7408'/>
+      <class-decl name='cec_event_entry' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='78' column='1' id='6e21d41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev' type-id='9638c87d' visibility='default' filepath='include/media/cec.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_dev' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='132' column='1' id='2e443c2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uniq' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='d99ed569' visibility='default' filepath='include/linux/input.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='propbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='keybit' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='relbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='absbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mscbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ledbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sndbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='swbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hint_events_per_packet' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='keycodemax' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='keycodesize' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='keycode' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='setkeycode' type-id='bc9b7fcd' visibility='default' filepath='include/linux/input.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='getkeycode' type-id='94ce875a' visibility='default' filepath='include/linux/input.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ff' type-id='4a3a4f46' visibility='default' filepath='include/linux/input.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='poller' type-id='3b8264a8' visibility='default' filepath='include/linux/input.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='repeat_key' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/input.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rep' type-id='e4266c7e' visibility='default' filepath='include/linux/input.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mt' type-id='bf68c5dd' visibility='default' filepath='include/linux/input.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='absinfo' type-id='5c7f23c6' visibility='default' filepath='include/linux/input.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='key' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='led' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='snd' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sw' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='open' type-id='2f59f71f' visibility='default' filepath='include/linux/input.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='close' type-id='b44880ea' visibility='default' filepath='include/linux/input.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='flush' type-id='3cf704a7' visibility='default' filepath='include/linux/input.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='event' type-id='49091f8e' visibility='default' filepath='include/linux/input.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='grab' type-id='bef1b918' visibility='default' filepath='include/linux/input.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/input.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='users' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='going_away' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/input.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='num_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12256'>
+          <var-decl name='max_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='vals' type-id='d09656fd' visibility='default' filepath='include/linux/input.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='devres_managed' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='timestamp' type-id='728c8299' visibility='default' filepath='include/linux/input.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event_ctrl' size-in-bits='36544' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='48' column='1' id='986a13e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kfifo' type-id='56fcb682' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33152'>
+          <var-decl name='last_event' type-id='fbc017ef' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33216'>
+          <var-decl name='dev' type-id='75ae4804' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33280'>
+          <var-decl name='edge_spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33344'>
+          <var-decl name='edge_handle' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='prev_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='this_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='bpf_sample' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='progs' type-id='380c7edc' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34048'>
+          <var-decl name='nec' type-id='9f72ab96' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34176'>
+          <var-decl name='rc5' type-id='9f1c8f9e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='rc6' type-id='ef26ce47' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34496'>
+          <var-decl name='sony' type-id='bec1f309' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34592'>
+          <var-decl name='jvc' type-id='5f32c669' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34752'>
+          <var-decl name='sanyo' type-id='8474b1f2' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34880'>
+          <var-decl name='sharp' type-id='556cd788' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35008'>
+          <var-decl name='mce_kbd' type-id='d7c6758b' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35712'>
+          <var-decl name='xmp' type-id='01edcb75' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36288'>
+          <var-decl name='imon' type-id='099324f9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36448'>
+          <var-decl name='rcmm' type-id='b68be393' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ad20c773' size-in-bits='64' id='6240ec2f'/>
+      <pointer-type-def type-id='617b50f4' size-in-bits='64' id='025f347e'/>
+      <pointer-type-def type-id='e2d03a5d' size-in-bits='64' id='c42cb699'/>
+      <pointer-type-def type-id='e4205152' size-in-bits='64' id='7b15200c'/>
+      <pointer-type-def type-id='835a73a6' size-in-bits='64' id='d5951000'/>
+      <pointer-type-def type-id='ae855994' size-in-bits='64' id='57909d12'/>
+      <pointer-type-def type-id='da9684d0' size-in-bits='64' id='56c9c562'/>
+      <pointer-type-def type-id='4666032d' size-in-bits='64' id='6dbc77f1'/>
+      <pointer-type-def type-id='12e476c1' size-in-bits='64' id='c4365925'/>
+      <class-decl name='cec_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='424' column='1' id='9638c87d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='ea003a68' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='imon_dec' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='127' column='1' id='099324f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_chk' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stick_keyboard' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='299' column='1' id='39486498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='671d516a' visibility='default' filepath='include/media/rc-core.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='duty_cycle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pulse' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='reset' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='carrier_report' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='jvc_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='93' column='1' id='5f32c669'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='old_bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mce_kbd_dec' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='112' column='1' id='d7c6758b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_timeout' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nec_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='67' column='1' id='9f72ab96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_nec_x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='necx_repeat' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc5_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='74' column='1' id='9f1c8f9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_rc5x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc6_dec' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='80' column='1' id='ef26ce47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='91' column='1' id='ae855994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcmm_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='134' column='1' id='b68be393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sanyo_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='101' column='1' id='8474b1f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sharp_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='106' column='1' id='556cd788'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pulse_len' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sony_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='88' column='1' id='bec1f309'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xmp_dec' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='122' column='1' id='01edcb75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='durations' type-id='02fdec64' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32960' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='56fcb682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4dca854a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='55a95556' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bccc4180' size-in-bits='64' id='4a3a4f46'/>
+      <pointer-type-def type-id='a7b3c380' size-in-bits='64' id='5c7f23c6'/>
+      <pointer-type-def type-id='5c32afaa' size-in-bits='64' id='3b8264a8'/>
+      <pointer-type-def type-id='18448baa' size-in-bits='64' id='bef1b918'/>
+      <pointer-type-def type-id='d995db0d' size-in-bits='64' id='bf68c5dd'/>
+      <pointer-type-def type-id='c058e0bd' size-in-bits='64' id='d09656fd'/>
+      <pointer-type-def type-id='7364da7b' size-in-bits='64' id='2f59f71f'/>
+      <pointer-type-def type-id='df042c09' size-in-bits='64' id='bc9b7fcd'/>
+      <pointer-type-def type-id='8e3d9a4b' size-in-bits='64' id='3cf704a7'/>
+      <pointer-type-def type-id='3fdac390' size-in-bits='64' id='94ce875a'/>
+      <pointer-type-def type-id='136c624c' size-in-bits='64' id='49091f8e'/>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='192' id='728c8299'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <pointer-type-def type-id='ce79ab50' size-in-bits='64' id='b44880ea'/>
+      <class-decl name='ff_device' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='543' column='1' id='bccc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upload' type-id='a13b38d7' visibility='default' filepath='include/linux/input.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase' type-id='9589d936' visibility='default' filepath='include/linux/input.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='playback' type-id='feb3b3dd' visibility='default' filepath='include/linux/input.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_gain' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_autocenter' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='bf55f18b' visibility='default' filepath='include/linux/input.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_effects' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='effects' type-id='98b22793' visibility='default' filepath='include/linux/input.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='effect_owners' type-id='5e8a3097' visibility='default' filepath='include/linux/input.h' line='565' 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='90' column='1' id='a7b3c380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fuzz' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flat' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='resolution' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_dev_poller' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c32afaa'/>
+      <class-decl name='input_handle' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='345' column='1' id='18448baa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='74b427eb' visibility='default' filepath='include/linux/input.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='4938abae' visibility='default' filepath='include/linux/input.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='358' 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='43' column='1' id='d995db0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trkid' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='red' type-id='7292109c' visibility='default' filepath='include/linux/input/mt.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='slots' type-id='5ef3b2ba' visibility='default' filepath='include/linux/input/mt.h' line='50' 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='c058e0bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' 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='d315442e' 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='3158a266' visibility='default' filepath='include/linux/input.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='39486498' size-in-bits='32768' id='55a95556'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='4dca854a'>
+        <data-member access='public'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='type' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='const_type' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr_const' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1' id='ea003a68'>
+        <data-member access='public'>
+          <var-decl name='state_change' type-id='14c5637c' visibility='default' filepath='include/uapi/linux/cec.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='lost_msgs' type-id='66c0ec77' visibility='default' filepath='include/uapi/linux/cec.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/cec.h' line='431' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/media/rc-core.h' line='300' column='1' id='671d516a'>
+        <data-member access='public'>
+          <var-decl name='duration' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cec_event_lost_msgs' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='411' column='1' id='66c0ec77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lost_msgs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_state_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='402' column='1' id='14c5637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f28519a1' size-in-bits='64' id='528735d1'/>
+      <pointer-type-def type-id='0c6ad5d3' size-in-bits='64' id='98b22793'/>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='infinite' id='5e8a3097'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='0be82508' size-in-bits='64' id='4938abae'/>
+      <array-type-def dimensions='1' type-id='e0d59f72' size-in-bits='infinite' id='5ef3b2ba'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='83c7cbd3' size-in-bits='64' id='a13b38d7'/>
+      <pointer-type-def type-id='2a0a5404' size-in-bits='64' id='9589d936'/>
+      <pointer-type-def type-id='103ba521' size-in-bits='64' id='feb3b3dd'/>
+      <pointer-type-def type-id='39486498' size-in-bits='64' id='4a06e68e'/>
+      <pointer-type-def type-id='00a1b58f' size-in-bits='64' id='bf55f18b'/>
+      <pointer-type-def type-id='6356717b' size-in-bits='64' id='1e82f767'/>
+      <class-decl name='ff_effect' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='450' column='1' id='0c6ad5d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='trigger' type-id='bd8e6f06' visibility='default' filepath='include/uapi/linux/input.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='replay' type-id='74a8f9e9' visibility='default' filepath='include/uapi/linux/input.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='af36d098' visibility='default' filepath='include/uapi/linux/input.h' line='463' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handler' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='308' column='1' id='0be82508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='37a787dc' visibility='default' filepath='include/linux/input.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='events' type-id='ddacdfe6' visibility='default' filepath='include/linux/input.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='95325033' visibility='default' filepath='include/linux/input.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='match' type-id='ff015e22' visibility='default' filepath='include/linux/input.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='5c6fb334' visibility='default' filepath='include/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='start' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='legacy_minors' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id_table' type-id='cf2e76b1' visibility='default' filepath='include/linux/input.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='330' 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='27' column='1' id='e0d59f72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abs' type-id='b7c7a4a5' visibility='default' filepath='include/linux/input/mt.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='key' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='39486498' const='yes' id='f28519a1'/>
+      <class-decl name='ff_replay' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='306' column='1' id='74a8f9e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='delay' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='308' 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='316' column='1' id='bd8e6f06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='button' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='interval' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c184e101' size-in-bits='64' id='cf2e76b1'/>
+      <pointer-type-def type-id='1086c08a' size-in-bits='64' id='5c6fb334'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='448' id='b7c7a4a5'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <pointer-type-def type-id='29964e7f' size-in-bits='64' id='95325033'/>
+      <pointer-type-def type-id='74bea618' size-in-bits='64' id='ff015e22'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/input.h' line='457' column='1' id='af36d098'>
+        <data-member access='public'>
+          <var-decl name='constant' type-id='777eafbe' visibility='default' filepath='include/uapi/linux/input.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ramp' type-id='83c35232' visibility='default' filepath='include/uapi/linux/input.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='periodic' type-id='106cd915' visibility='default' filepath='include/uapi/linux/input.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='condition' type-id='1c159d57' visibility='default' filepath='include/uapi/linux/input.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rumble' type-id='6e5c8c15' visibility='default' filepath='include/uapi/linux/input.h' line='462' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='ff3151a1' size-in-bits='64' id='3e15391d'/>
+      <pointer-type-def type-id='ff7a347c' size-in-bits='64' id='ddacdfe6'/>
+      <pointer-type-def type-id='d6ad270a' size-in-bits='64' id='37a787dc'/>
+      <class-decl name='ff_constant_effect' size-in-bits='80' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='345' column='1' id='777eafbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='347' 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='401' column='1' id='106cd915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='waveform' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='period' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magnitude' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='offset' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phase' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='custom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_data' type-id='54c34bcf' visibility='default' filepath='include/uapi/linux/input.h' line='411' 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='356' column='1' id='83c35232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='359' 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='422' column='1' id='6e5c8c15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='strong_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1d6edf8e' const='yes' id='c184e101'/>
+      <array-type-def dimensions='1' type-id='84fc83c5' size-in-bits='192' id='1c159d57'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='b55def60' size-in-bits='64' id='54c34bcf'/>
+      <class-decl name='ff_condition_effect' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/input.h' line='372' column='1' id='84fc83c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='right_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='left_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='left_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deadband' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='center' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='380' 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='333' column='1' id='95dfde06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attack_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='attack_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fade_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='fade_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='337' 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='340' column='1' id='1d6edf8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='evbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='keybit' type-id='88b5427c' visibility='default' filepath='include/linux/mod_devicetable.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='relbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='absbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mscbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ledbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sndbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ffbit' type-id='43f0230f' visibility='default' filepath='include/linux/mod_devicetable.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='propbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='768' id='88b5427c'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='64' id='43f871d4'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='128' id='43f0230f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_dp_mst_topology.c' language='LANG_C89'>
+      <class-decl name='dma_buf' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='387' column='1' id='c201baab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/dma-buf.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/dma-buf.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='c248c11b' visibility='default' filepath='include/linux/dma-buf.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/dma-buf.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vmapping_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vmap_ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exp_name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/dma-buf.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/dma-buf.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/dma-buf.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='list_node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/linux/dma-buf.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='include/linux/dma-buf.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cb_excl' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='cb_shared' type-id='d5acde18' visibility='default' filepath='include/linux/dma-buf.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysfs_entry' type-id='bd60ed15' visibility='default' filepath='include/linux/dma-buf.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attachment' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='444' column='1' id='f01bc099'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/dma-buf.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-buf.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/linux/dma-buf.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dir' type-id='eea6b025' visibility='default' filepath='include/linux/dma-buf.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/dma-buf.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dma_map_attrs' type-id='7359adad' visibility='default' filepath='include/linux/dma-buf.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sysfs_entry' type-id='39154bd3' visibility='default' filepath='include/linux/dma-buf.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='461' 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='145' column='1' id='833c0b8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_ioctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='ad578603' visibility='default' filepath='include/drm/drm_ioctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='e2cefc47' visibility='default' filepath='include/drm/drm_ioctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_ioctl.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='ebccef5f' size-in-bits='96' id='e6001147'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d30cc3b8' size-in-bits='576' id='c93659c6'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ecbd5721' size-in-bits='3200' id='014100ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='778f4653' size-in-bits='128' id='e14df1f9'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='96' id='0e1e8cdf'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0bb26f49' size-in-bits='128' id='521a7abd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='104' id='097d53a4'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='120' id='4d823bde'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='2040' id='1bac30d2'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='2048' id='dbaf9da9'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='drm_dp_mst_topology_mgr' size-in-bits='9536' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='449' column='1' id='77db5b7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='cc3a4f0c' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cbs' type-id='44572ce8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_dpcd_transaction_bytes' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='aux' type-id='7c5f8cd8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_payloads' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='conn_base_id' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='down_rep_recv' type-id='86641ab5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3632'>
+          <var-decl name='up_req_recv' type-id='86641ab5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='mst_state' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mst_primary' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='dpcd' type-id='4d823bde' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6776'>
+          <var-decl name='sink_count' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='pbn_div' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='qlock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='tx_msg_downq' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='payload_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='proposed_vcpis' type-id='d08b3eb8' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='payloads' type-id='1a8bc978' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='payload_mask' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='vcpi_mask' type-id='7359adad' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='tx_waitq' type-id='b5ab048f' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='destroy_connector_list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='destroy_connector_lock' type-id='925167dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='destroy_connector_work' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='589' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_private_obj' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_atomic.h' line='243' column='1' id='cc3a4f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/drm/drm_atomic.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='ae5fc04a' visibility='default' filepath='include/drm/drm_atomic.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='funcs' type-id='515fa1af' visibility='default' filepath='include/drm/drm_atomic.h' line='266' 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='289' column='1' id='b281e308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e3dd029e' visibility='default' filepath='include/drm/drm_atomic.h' line='290' 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='811' column='1' id='46d25262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpp' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='handle' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pitch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='d3130597' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='819' 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='149' column='1' id='a79398e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='a6711537' visibility='default' filepath='include/drm/drm_atomic.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='d0835005' visibility='default' filepath='include/drm/drm_atomic.h' line='151' 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='154' column='1' id='b35335c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='b64ad7cb' visibility='default' filepath='include/drm/drm_atomic.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='35078cb9' visibility='default' filepath='include/drm/drm_atomic.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='commit' type-id='3f40b771' visibility='default' filepath='include/drm/drm_atomic.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_vblank_count' type-id='91ce1af9' visibility='default' filepath='include/drm/drm_atomic.h' line='169' 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='172' column='1' id='45f4b23b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='4db02c58' visibility='default' filepath='include/drm/drm_atomic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='249ef586' visibility='default' filepath='include/drm/drm_atomic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='out_fence_ptr' type-id='9f2cce4b' visibility='default' filepath='include/drm/drm_atomic.h' line='182' 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='293' column='1' id='99c97f55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='11c98e9a' visibility='default' filepath='include/drm/drm_atomic.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='old_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='new_state' type-id='4ea020ae' visibility='default' filepath='include/drm/drm_atomic.h' line='295' 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='198' column='1' id='6110f5ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='atomic_duplicate_state' type-id='a20ce8b2' visibility='default' filepath='include/drm/drm_atomic.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='atomic_destroy_state' type-id='dc18a9b0' visibility='default' filepath='include/drm/drm_atomic.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_topology_cbs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='405' column='1' id='8596da29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add_connector' type-id='89bd4f61' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='register_connector' type-id='a3cb28f1' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_connector' type-id='7d8f7dd9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='409' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_port' size-in-bits='13184' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='68' column='1' id='7f985fda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='topology_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='malloc_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='port_num' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='input' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mcs' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ddps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pdt' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='ldps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dpcd_rev' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_sdp_streams' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_sdp_stream_sinks' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='available_pbn' type-id='149c6638' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mstb' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aux' type-id='b2983aea' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='parent' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='vcpi' type-id='e1653094' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='connector' type-id='4db02c58' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='mgr' type-id='88a6d23d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cached_edid' type-id='c91d1bf1' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='has_audio' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_mst_branch' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='132' column='1' id='d710e4d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='topology_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='malloc_kref' type-id='400fb07b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rad' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lct' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_ports' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='msg_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ports' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='port_parent' type-id='c45d1018' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mgr' type-id='88a6d23d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tx_slots' type-id='e14df1f9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='last_seqno' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='link_address_sent' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_tx' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='390' column='1' id='7a5f8aa3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msg' type-id='dbaf9da9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chunk' type-id='6aa9aca0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='cur_offset' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2440'>
+          <var-decl name='cur_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dst' type-id='7bc9d2d9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='seqno' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='path_msg' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2768'>
+          <var-decl name='reply' type-id='2fe1d36e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_reply_body' size-in-bits='3360' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='358' column='1' id='2fe1d36e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reply_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='req_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='u' type-id='6df1f9c2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ack_replies' size-in-bits='3344' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='361' column='1' id='6df1f9c2'>
+        <data-member access='public'>
+          <var-decl name='nak' type-id='61c3f979' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='link_addr' type-id='81bf688e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='port_number' type-id='1cca5a6d' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='path_resources' type-id='bc62b31a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='allocate_payload' type-id='2268ea8f' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='query_payload' type-id='f945f5d0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_dpcd_read_ack' type-id='7b447a04' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_dpcd_write_ack' type-id='fff4a999' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_dpcd_write_nack' type-id='b506183e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_i2c_read_ack' type-id='4629bebf' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_i2c_read_nack' type-id='fbcb62dc' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='remote_i2c_write_ack' type-id='1fb39188' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='376' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='drm_dp_nak_reply' size-in-bits='144' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='180' column='1' id='61c3f979'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='nak_data' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link_address_ack_reply' size-in-bits='3336' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='186' column='1' id='81bf688e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nports' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ports' type-id='014100ec' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_link_addr_reply_port' size-in-bits='200' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='189' column='1' id='ecbd5721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='input_port' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='peer_device_type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ddps' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='legacy_device_plug_status' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dpcd_revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='peer_guid' type-id='0d8415b5' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='num_sdp_streams' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_sdp_stream_sinks' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_port_number_rep' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='320' column='1' id='1cca5a6d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_enum_path_resources_ack_reply' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='313' column='1' id='bc62b31a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='full_payload_bw_number' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='avail_payload_bw_number' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_allocate_payload_ack_reply' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='257' column='1' id='2268ea8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vcpi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='allocated_pbn' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_query_payload_ack_reply' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='335' column='1' id='f945f5d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='allocated_pbn' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_read_ack_reply' size-in-bits='2056' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='203' column='1' id='7b447a04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='num_bytes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes' type-id='1bac30d2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_write_ack_reply' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='209' column='1' id='fff4a999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_dpcd_write_nak_reply' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='213' column='1' id='b506183e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes_written_before_failure' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_read_ack_reply' size-in-bits='2056' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='219' column='1' id='4629bebf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='num_bytes' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bytes' type-id='1bac30d2' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_read_nak_reply' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='225' column='1' id='fbcb62dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='nak_reason' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i2c_nak_transaction' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_remote_i2c_write_ack_reply' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='231' column='1' id='1fb39188'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_number' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='232' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_vcpi' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='38' column='1' id='e1653094'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vcpi' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pbn' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='aligned_pbn' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='edid' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/drm/drm_edid.h' line='285' column='1' id='a7fa16d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_edid.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mfg_id' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='prod_code' type-id='cf114704' visibility='default' filepath='include/drm/drm_edid.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='serial' type-id='19c2251e' visibility='default' filepath='include/drm/drm_edid.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mfg_week' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mfg_year' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='revision' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='input' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='width_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='height_cm' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='features' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='red_green_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='black_white_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='red_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='red_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='green_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='green_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='blue_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blue_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='white_x' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='white_y' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='established_timings' type-id='93a90c7b' visibility='default' filepath='include/drm/drm_edid.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='standard_timings' type-id='521a7abd' visibility='default' filepath='include/drm/drm_edid.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='detailed_timings' type-id='c93659c6' visibility='default' filepath='include/drm/drm_edid.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='extensions' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='checksum' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='322' 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='44' column='1' id='93a90c7b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='t1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='t2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mfg_rsvd' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='47' 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='58' column='1' id='0bb26f49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hsize' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vfreq_aspect' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='60' 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='165' column='1' id='d30cc3b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixel_clock' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='74e410f1' visibility='default' filepath='include/drm/drm_edid.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='167' column='1' id='74e410f1'>
+        <data-member access='public'>
+          <var-decl name='pixel_data' type-id='42c5f701' visibility='default' filepath='include/drm/drm_edid.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='other_data' type-id='4191437e' visibility='default' filepath='include/drm/drm_edid.h' line='169' 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='70' column='1' id='42c5f701'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hactive_hblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='vactive_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vblank_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='vactive_vblank_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_offset_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='hsync_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vsync_offset_pulse_width_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='hsync_vsync_offset_pulse_width_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='width_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='height_mm_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width_height_mm_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='hborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vborder' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='misc' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='86' 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='140' column='1' id='4191437e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pad2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='data' type-id='3b37e17e' visibility='default' filepath='include/drm/drm_edid.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='104' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='146' column='1' id='3b37e17e'>
+        <data-member access='public'>
+          <var-decl name='str' type-id='9839ad2e' visibility='default' filepath='include/drm/drm_edid.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='range' type-id='2d6065c1' visibility='default' filepath='include/drm/drm_edid.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='color' type-id='d35b6cc8' visibility='default' filepath='include/drm/drm_edid.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='timings' type-id='0e1e8cdf' visibility='default' filepath='include/drm/drm_edid.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cvt' type-id='e6001147' visibility='default' filepath='include/drm/drm_edid.h' line='151' 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='90' column='1' id='9839ad2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='097d53a4' visibility='default' filepath='include/drm/drm_edid.h' line='91' 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='94' column='1' id='2d6065c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='max_vfreq' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='min_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='max_hfreq_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_clock_mhz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='formula' type-id='58741aa1' visibility='default' filepath='include/drm/drm_edid.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='56' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='101' column='1' id='58741aa1'>
+        <data-member access='public'>
+          <var-decl name='gtf2' type-id='3f6be67c' visibility='default' filepath='include/drm/drm_edid.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='cvt' type-id='c591dff3' visibility='default' filepath='include/drm/drm_edid.h' line='118' column='1'/>
+        </data-member>
+      </union-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='102' column='1' id='3f6be67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hfreq_start_khz' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='c' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='m' type-id='23119536' visibility='default' filepath='include/drm/drm_edid.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='k' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='j' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/drm/drm_edid.h' line='110' column='1' id='c591dff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data1' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data2' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='supported_aspects' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='supported_scalings' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='preferred_refresh' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='117' 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='122' column='1' id='d35b6cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='white_yx_lo' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='white_x_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='white_y_hi' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gamma' type-id='f9b06939' visibility='default' filepath='include/drm/drm_edid.h' line='126' 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='136' column='1' id='ebccef5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_edid.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_rx' size-in-bits='2608' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='236' column='1' id='86641ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chunk' type-id='6aa9aca0' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='msg' type-id='dbaf9da9' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='curchunk_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2440'>
+          <var-decl name='curchunk_idx' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2448'>
+          <var-decl name='curchunk_hdrlen' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2456'>
+          <var-decl name='curlen' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='have_somt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2472'>
+          <var-decl name='have_eomt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2480'>
+          <var-decl name='initial_hdr' type-id='d10fcb8b' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_sideband_msg_hdr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='168' column='1' id='d10fcb8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lct' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='lcr' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rad' type-id='d2f7b56a' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='broadcast' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='path_msg' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='msg_len' type-id='f9b06939' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='somt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='eomt' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='seqno' type-id='b50a4934' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_dp_payload' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='419' column='1' id='c3b3aa2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='payload_state' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_slot' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vcpi' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_dp_mst_helper.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='45f4b23b' size-in-bits='64' id='6d26c72b'/>
+      <pointer-type-def type-id='b35335c8' size-in-bits='64' id='611a28de'/>
+      <pointer-type-def type-id='a79398e0' size-in-bits='64' id='356fd446'/>
+      <pointer-type-def type-id='99c97f55' size-in-bits='64' id='258e7e75'/>
+      <qualified-type-def type-id='8596da29' const='yes' id='ee15d052'/>
+      <pointer-type-def type-id='ee15d052' size-in-bits='64' id='44572ce8'/>
+      <qualified-type-def type-id='3bc524c0' const='yes' id='e03666d9'/>
+      <pointer-type-def type-id='e03666d9' size-in-bits='64' id='e8a41089'/>
+      <qualified-type-def type-id='833c0b8c' const='yes' id='d6de54c5'/>
+      <pointer-type-def type-id='d6de54c5' size-in-bits='64' id='2effb43d'/>
+      <qualified-type-def type-id='6110f5ec' const='yes' id='6d7d60df'/>
+      <pointer-type-def type-id='6d7d60df' size-in-bits='64' id='515fa1af'/>
+      <pointer-type-def type-id='c201baab' size-in-bits='64' id='5e4f599b'/>
+      <pointer-type-def type-id='111ab5a4' size-in-bits='64' id='a4e2d046'/>
+      <pointer-type-def type-id='f01bc099' size-in-bits='64' id='e68e04c1'/>
+      <pointer-type-def type-id='75ec6dfd' size-in-bits='64' id='89bd4f61'/>
+      <pointer-type-def type-id='d710e4d1' size-in-bits='64' id='7bc9d2d9'/>
+      <pointer-type-def type-id='7f985fda' size-in-bits='64' id='c45d1018'/>
+      <pointer-type-def type-id='77db5b7d' size-in-bits='64' id='88a6d23d'/>
+      <pointer-type-def type-id='c3b3aa2a' size-in-bits='64' id='1a8bc978'/>
+      <pointer-type-def type-id='7a5f8aa3' size-in-bits='64' id='778f4653'/>
+      <pointer-type-def type-id='e1653094' size-in-bits='64' id='9117d942'/>
+      <pointer-type-def type-id='9117d942' size-in-bits='64' id='d08b3eb8'/>
+      <pointer-type-def type-id='272672f5' size-in-bits='64' id='b121f651'/>
+      <pointer-type-def type-id='c33808e6' size-in-bits='64' id='38d8fc10'/>
+      <pointer-type-def type-id='b6b06c66' size-in-bits='64' id='76ba9b40'/>
+      <pointer-type-def type-id='46d25262' size-in-bits='64' id='28cbbf40'/>
+      <pointer-type-def type-id='cc3a4f0c' size-in-bits='64' id='11c98e9a'/>
+      <pointer-type-def type-id='b281e308' size-in-bits='64' id='4ea020ae'/>
+      <pointer-type-def type-id='328910d8' size-in-bits='64' id='a20ce8b2'/>
+      <pointer-type-def type-id='a7fa16d9' size-in-bits='64' id='c91d1bf1'/>
+      <pointer-type-def type-id='c3277f63' size-in-bits='64' id='d9d2e26f'/>
+      <pointer-type-def type-id='c2ddfea1' size-in-bits='64' id='ccba7a85'/>
+      <pointer-type-def type-id='9a54e634' size-in-bits='64' id='f9d4c3c6'/>
+      <pointer-type-def type-id='4f5cd1f6' size-in-bits='64' id='ca39eb80'/>
+      <pointer-type-def type-id='0795c636' size-in-bits='64' id='2579e5b0'/>
+      <pointer-type-def type-id='fbd40bed' size-in-bits='64' id='adc543b9'/>
+      <pointer-type-def type-id='7ac88bec' size-in-bits='64' id='4a984946'/>
+      <pointer-type-def type-id='1a648909' size-in-bits='64' id='b8905925'/>
+      <pointer-type-def type-id='50f15cd5' size-in-bits='64' id='30c8e7b1'/>
+      <pointer-type-def type-id='4e407315' size-in-bits='64' id='8ac1c0d9'/>
+      <pointer-type-def type-id='1c62d4d4' size-in-bits='64' id='c95d5016'/>
+      <pointer-type-def type-id='935923dc' size-in-bits='64' id='aca8090e'/>
+      <pointer-type-def type-id='e374f511' size-in-bits='64' id='c62ff945'/>
+      <pointer-type-def type-id='40877b8a' size-in-bits='64' id='12e23e5c'/>
+      <pointer-type-def type-id='857f27d6' size-in-bits='64' id='8e2012e0'/>
+      <pointer-type-def type-id='6ba772ee' size-in-bits='64' id='0de721e0'/>
+      <pointer-type-def type-id='194ac023' size-in-bits='64' id='516294a7'/>
+      <pointer-type-def type-id='507536a0' size-in-bits='64' id='ca55f982'/>
+      <pointer-type-def type-id='d1d4db8e' size-in-bits='64' id='32774f90'/>
+      <pointer-type-def type-id='6c91f89a' size-in-bits='64' id='93ff0584'/>
+      <pointer-type-def type-id='b8e2b737' size-in-bits='64' id='4e80a34b'/>
+      <pointer-type-def type-id='09818b99' size-in-bits='64' id='52dd4de5'/>
+      <pointer-type-def type-id='ec55eb74' size-in-bits='64' id='f1397309'/>
+      <pointer-type-def type-id='80b3d6aa' size-in-bits='64' id='157eca44'/>
+      <pointer-type-def type-id='a7bf86ca' size-in-bits='64' id='972f2a14'/>
+      <pointer-type-def type-id='b7290258' size-in-bits='64' id='5de03572'/>
+      <pointer-type-def type-id='9a9b3035' size-in-bits='64' id='7d8f7dd9'/>
+      <pointer-type-def type-id='2d421ebf' size-in-bits='64' id='9126441b'/>
+      <pointer-type-def type-id='5fa4ba0d' size-in-bits='64' id='133b86a1'/>
+      <pointer-type-def type-id='4111263b' size-in-bits='64' id='06586097'/>
+      <pointer-type-def type-id='97e3fb6c' size-in-bits='64' id='1c51ec16'/>
+      <pointer-type-def type-id='e0ed16c6' size-in-bits='64' id='dc18a9b0'/>
+      <pointer-type-def type-id='ee780377' size-in-bits='64' id='2edb3e4b'/>
+      <function-decl name='drm_dp_mst_topology_mgr_init' mangled-name='drm_dp_mst_topology_mgr_init' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3957' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_init'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3957' column='1'/>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3958' column='1'/>
+        <parameter type-id='7c5f8cd8' name='aux' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3958' column='1'/>
+        <parameter type-id='95e97e5e' name='max_dpcd_transaction_bytes' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3959' column='1'/>
+        <parameter type-id='95e97e5e' name='max_payloads' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3960' column='1'/>
+        <parameter type-id='95e97e5e' name='conn_base_id' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3960' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_update_payload_part2' mangled-name='drm_dp_update_payload_part2' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_update_payload_part2'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_update_payload_part1' mangled-name='drm_dp_update_payload_part1' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_update_payload_part1'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2401' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_send_power_updown_phy' mangled-name='drm_dp_send_power_updown_phy' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_send_power_updown_phy'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2302' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2303' column='1'/>
+        <parameter type-id='b50a4934' name='power_up' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2303' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_topology_mgr_set_mst' mangled-name='drm_dp_mst_topology_mgr_set_mst' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_set_mst'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1'/>
+        <parameter type-id='b50a4934' name='mst_state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='2695' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_topology_mgr_destroy' mangled-name='drm_dp_mst_topology_mgr_destroy' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='4011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_topology_mgr_destroy'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='4011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_reset_vcpi_slots' mangled-name='drm_dp_mst_reset_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_reset_vcpi_slots'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3427' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_hpd_irq' mangled-name='drm_dp_mst_hpd_irq' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_hpd_irq'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <parameter type-id='8bff8096' name='esi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <parameter type-id='d8e6b335' name='handled' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3044' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_get_edid' mangled-name='drm_dp_mst_get_edid' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_get_edid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3147' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_detect_port' mangled-name='drm_dp_mst_detect_port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_detect_port'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3080' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3081' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3081' column='1'/>
+        <return type-id='f7b0e1b4'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_deallocate_vcpi' mangled-name='drm_dp_mst_deallocate_vcpi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_deallocate_vcpi'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3446' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3447' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dp_mst_allocate_vcpi' mangled-name='drm_dp_mst_allocate_vcpi' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_mst_allocate_vcpi'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3367' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <parameter type-id='95e97e5e' name='slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3368' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_dp_find_vcpi_slots' mangled-name='drm_dp_find_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_find_vcpi_slots'>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3179' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3180' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_calc_pbn_mode' mangled-name='drm_dp_calc_pbn_mode' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_calc_pbn_mode'>
+        <parameter type-id='95e97e5e' name='clock' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1'/>
+        <parameter type-id='95e97e5e' name='bpp' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3556' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_atomic_release_vcpi_slots' mangled-name='drm_dp_atomic_release_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_atomic_release_vcpi_slots'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3326' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3327' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3328' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dp_atomic_find_vcpi_slots' mangled-name='drm_dp_atomic_find_vcpi_slots' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dp_atomic_find_vcpi_slots'>
+        <parameter type-id='e3dd029e' name='state' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3242' column='1'/>
+        <parameter type-id='88a6d23d' name='mgr' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3243' column='1'/>
+        <parameter type-id='c45d1018' name='port' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3244' column='1'/>
+        <parameter type-id='95e97e5e' name='pbn' filepath='drivers/gpu/drm/drm_dp_mst_topology.c' line='3244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='111ab5a4'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='5e4f599b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75ec6dfd'>
+        <parameter type-id='88a6d23d'/>
+        <parameter type-id='c45d1018'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='4db02c58'/>
+      </function-type>
+      <function-type size-in-bits='64' id='272672f5'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c33808e6'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='e68e04c1'/>
+        <parameter type-id='4adb0e6a'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6b06c66'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='abd62a96'/>
+      </function-type>
+      <function-type size-in-bits='64' id='328910d8'>
+        <parameter type-id='11c98e9a'/>
+        <return type-id='4ea020ae'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3277f63'>
+        <parameter type-id='8898134d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2ddfea1'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a54e634'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='90421557'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f5cd1f6'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0795c636'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbd40bed'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='07df1a3d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ac88bec'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a648909'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50f15cd5'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e407315'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='9e99ecc1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c62d4d4'>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='28cbbf40'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='935923dc'>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e374f511'>
+        <parameter type-id='9e99ecc1'/>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='5d6479ae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40877b8a'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='857f27d6'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='9e99ecc1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ba772ee'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='f1397309'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='194ac023'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='507536a0'>
+        <parameter type-id='6c3b3f8e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1d4db8e'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='4adb0e6a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c91f89a'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8e2b737'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='44372936'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09818b99'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80b3d6aa'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='9e99ecc1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7bf86ca'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='07df1a3d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7290258'>
+        <parameter type-id='8898134d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a9b3035'>
+        <parameter type-id='88a6d23d'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d421ebf'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fa4ba0d'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='9e99ecc1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4111263b'>
+        <parameter type-id='abd62a96'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97e3fb6c'>
+        <parameter type-id='7ac48c21'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='e8a41089'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0ed16c6'>
+        <parameter type-id='11c98e9a'/>
+        <parameter type-id='4ea020ae'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee780377'>
+        <parameter type-id='abd62a96'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='fbc017ef' size-in-bits='64' id='44372936'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_drv.c' language='LANG_C89'>
+      <var-decl name='drm_debug' type-id='f0981eeb' mangled-name='drm_debug' visibility='default' filepath='drivers/gpu/drm/drm_drv.c' line='53' column='1' elf-symbol-id='drm_debug'/>
+      <function-decl name='drm_put_dev' mangled-name='drm_put_dev' filepath='drivers/gpu/drm/drm_drv.c' line='439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_put_dev'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='439' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_unregister' mangled-name='drm_dev_unregister' filepath='drivers/gpu/drm/drm_drv.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_unregister'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='1024' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_set_unique' mangled-name='drm_dev_set_unique' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_set_unique'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_drv.c' line='1061' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dev_register' mangled-name='drm_dev_register' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_register'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/gpu/drm/drm_drv.c' line='960' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_dev_put' mangled-name='drm_dev_put' filepath='drivers/gpu/drm/drm_drv.c' line='877' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_put'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_drv.c' line='877' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_alloc' mangled-name='drm_dev_alloc' filepath='drivers/gpu/drm/drm_drv.c' line='819' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_alloc'>
+        <parameter type-id='1d52bc4d' name='driver' filepath='drivers/gpu/drm/drm_drv.c' line='819' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/gpu/drm/drm_drv.c' line='820' column='1'/>
+        <return type-id='8898134d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_edid.c' language='LANG_C89'>
+      <qualified-type-def type-id='a7fa16d9' const='yes' id='4af8a458'/>
+      <pointer-type-def type-id='4af8a458' size-in-bits='64' id='776adf76'/>
+      <pointer-type-def type-id='c3fc04e5' size-in-bits='64' id='e879a339'/>
+      <function-decl name='drm_add_modes_noedid' mangled-name='drm_add_modes_noedid' filepath='drivers/gpu/drm/drm_edid.c' line='4947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_modes_noedid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4947' column='1'/>
+        <parameter type-id='95e97e5e' name='hdisplay' filepath='drivers/gpu/drm/drm_edid.c' line='4948' column='1'/>
+        <parameter type-id='95e97e5e' name='vdisplay' filepath='drivers/gpu/drm/drm_edid.c' line='4948' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_match_cea_mode' mangled-name='drm_match_cea_mode' filepath='drivers/gpu/drm/drm_edid.c' line='3090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_match_cea_mode'>
+        <parameter type-id='745b39e8' name='to_match' filepath='drivers/gpu/drm/drm_edid.c' line='3090' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='drm_get_edid' mangled-name='drm_get_edid' filepath='drivers/gpu/drm/drm_edid.c' line='1779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_edid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='1779' column='1'/>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/gpu/drm/drm_edid.c' line='1780' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_detect_monitor_audio' mangled-name='drm_detect_monitor_audio' filepath='drivers/gpu/drm/drm_edid.c' line='4388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_detect_monitor_audio'>
+        <parameter type-id='c91d1bf1' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4388' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_set_preferred_mode' mangled-name='drm_set_preferred_mode' filepath='drivers/gpu/drm/drm_edid.c' line='4993' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_set_preferred_mode'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4993' column='1'/>
+        <parameter type-id='95e97e5e' name='hpref' filepath='drivers/gpu/drm/drm_edid.c' line='4994' column='1'/>
+        <parameter type-id='95e97e5e' name='vpref' filepath='drivers/gpu/drm/drm_edid.c' line='4994' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_hdmi_avi_infoframe_from_display_mode' mangled-name='drm_hdmi_avi_infoframe_from_display_mode' filepath='drivers/gpu/drm/drm_edid.c' line='5101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdmi_avi_infoframe_from_display_mode'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/gpu/drm/drm_edid.c' line='5101' column='1'/>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='5102' column='1'/>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_edid.c' line='5103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_do_get_edid' mangled-name='drm_do_get_edid' filepath='drivers/gpu/drm/drm_edid.c' line='1661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_do_get_edid'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='1661' column='1'/>
+        <parameter type-id='e879a339' name='get_edid_block' filepath='drivers/gpu/drm/drm_edid.c' line='1662' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_edid.c' line='1664' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_edid_duplicate' mangled-name='drm_edid_duplicate' filepath='drivers/gpu/drm/drm_edid.c' line='1828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_edid_duplicate'>
+        <parameter type-id='776adf76' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='1828' column='1'/>
+        <return type-id='c91d1bf1'/>
+      </function-decl>
+      <function-decl name='drm_detect_hdmi_monitor' mangled-name='drm_detect_hdmi_monitor' filepath='drivers/gpu/drm/drm_edid.c' line='4350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_detect_hdmi_monitor'>
+        <parameter type-id='c91d1bf1' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4350' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_add_edid_modes' mangled-name='drm_add_edid_modes' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_add_edid_modes'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1'/>
+        <parameter type-id='c91d1bf1' name='edid' filepath='drivers/gpu/drm/drm_edid.c' line='4868' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c3fc04e5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='4536ce10' size-in-bits='64' id='19ddc3a6'/>
+      <class-decl name='hdmi_avi_infoframe' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='168' column='1' id='4536ce10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='colorspace' type-id='c86f38e4' visibility='default' filepath='include/linux/hdmi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scan_mode' type-id='aaafc218' visibility='default' filepath='include/linux/hdmi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorimetry' type-id='8df1782c' visibility='default' filepath='include/linux/hdmi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='picture_aspect' type-id='a30ccd44' visibility='default' filepath='include/linux/hdmi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='active_aspect' type-id='90bbc2e6' visibility='default' filepath='include/linux/hdmi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='itc' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='extended_colorimetry' type-id='b8a53560' visibility='default' filepath='include/linux/hdmi.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization_range' type-id='5c444b2c' visibility='default' filepath='include/linux/hdmi.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nups' type-id='a84bbd3b' visibility='default' filepath='include/linux/hdmi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='video_code' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ycc_quantization_range' type-id='569eefca' visibility='default' filepath='include/linux/hdmi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='content_type' type-id='6cedbf81' visibility='default' filepath='include/linux/hdmi.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pixel_repeat' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='top_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='bottom_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='left_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='right_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_active_aspect' filepath='include/linux/hdmi.h' line='104' column='1' id='90bbc2e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_TOP' value='2'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9_TOP' value='3'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_CENTER' value='4'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_PICTURE' value='8'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3' value='9'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9' value='10'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9' value='11'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3_SP_14_9' value='13'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_14_9' value='14'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_4_3' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorimetry' filepath='include/linux/hdmi.h' line='88' column='1' id='8df1782c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORIMETRY_NONE' value='0'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_601' value='1'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_709' value='2'/>
+        <enumerator name='HDMI_COLORIMETRY_EXTENDED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorspace' filepath='include/linux/hdmi.h' line='70' column='1' id='c86f38e4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORSPACE_RGB' value='0'/>
+        <enumerator name='HDMI_COLORSPACE_YUV422' value='1'/>
+        <enumerator name='HDMI_COLORSPACE_YUV444' value='2'/>
+        <enumerator name='HDMI_COLORSPACE_YUV420' value='3'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED4' value='4'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED5' value='5'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED6' value='6'/>
+        <enumerator name='HDMI_COLORSPACE_IDO_DEFINED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_content_type' filepath='include/linux/hdmi.h' line='150' column='1' id='6cedbf81'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GRAPHICS' value='0'/>
+        <enumerator name='HDMI_CONTENT_TYPE_PHOTO' value='1'/>
+        <enumerator name='HDMI_CONTENT_TYPE_CINEMA' value='2'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GAME' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_extended_colorimetry' filepath='include/linux/hdmi.h' line='117' column='1' id='b8a53560'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_601' value='0'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_709' value='1'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_S_YCC_601' value='2'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPYCC_601' value='3'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPRGB' value='4'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM' value='5'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020' value='6'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_RESERVED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_infoframe_type' filepath='include/linux/hdmi.h' line='45' column='1' id='c573b339'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_VENDOR' value='129'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AVI' value='130'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_SPD' value='131'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AUDIO' value='132'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_DRM' value='135'/>
+      </enum-decl>
+      <enum-decl name='hdmi_nups' filepath='include/linux/hdmi.h' line='138' column='1' id='a84bbd3b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_NUPS_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_NUPS_HORIZONTAL' value='1'/>
+        <enumerator name='HDMI_NUPS_VERTICAL' value='2'/>
+        <enumerator name='HDMI_NUPS_BOTH' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_quantization_range' filepath='include/linux/hdmi.h' line='130' column='1' id='5c444b2c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_DEFAULT' value='0'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_LIMITED' value='1'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_FULL' value='2'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_scan_mode' filepath='include/linux/hdmi.h' line='81' column='1' id='aaafc218'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SCAN_MODE_NONE' value='0'/>
+        <enumerator name='HDMI_SCAN_MODE_OVERSCAN' value='1'/>
+        <enumerator name='HDMI_SCAN_MODE_UNDERSCAN' value='2'/>
+        <enumerator name='HDMI_SCAN_MODE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_ycc_quantization_range' filepath='include/linux/hdmi.h' line='145' column='1' id='569eefca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_LIMITED' value='0'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_FULL' value='1'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr 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='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_encoder.c' line='108' column='1'/>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_encoder.c' line='109' column='1'/>
+        <parameter type-id='1701f1ac' name='funcs' filepath='drivers/gpu/drm/drm_encoder.c' line='110' column='1'/>
+        <parameter type-id='95e97e5e' name='encoder_type' filepath='drivers/gpu/drm/drm_encoder.c' line='111' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_encoder.c' line='111' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_encoder_cleanup' mangled-name='drm_encoder_cleanup' filepath='drivers/gpu/drm/drm_encoder.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_encoder_cleanup'>
+        <parameter type-id='74d89ebd' name='encoder' filepath='drivers/gpu/drm/drm_encoder.c' line='159' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_fb_cma_helper.c' language='LANG_C89'>
+      <class-decl name='drm_gem_cma_object' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='20' column='1' id='a9a2d60c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c0' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='paddr' type-id='cf29c9b3' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sgt' type-id='4adb0e6a' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_gem_cma_helper.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a9a2d60c' size-in-bits='64' id='faa9576a'/>
+      <function-decl name='drm_fb_cma_get_gem_obj' mangled-name='drm_fb_cma_get_gem_obj' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_fb_cma_get_gem_obj'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='38' column='1'/>
+        <parameter type-id='f0981eeb' name='plane' filepath='drivers/gpu/drm/drm_fb_cma_helper.c' line='39' column='1'/>
+        <return type-id='faa9576a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_file.c' language='LANG_C89'>
+      <enum-decl name='drm_ioctl_flags' filepath='include/drm/drm_ioctl.h' line='80' column='1' id='ad578603'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='4e407315' filepath='include/drm/drm_ioctl.h' line='54' column='1' id='28063720'/>
+      <pointer-type-def type-id='28063720' size-in-bits='64' id='e2cefc47'/>
+      <pointer-type-def type-id='2aa44dc9' size-in-bits='64' id='16ab0351'/>
+      <function-decl name='drm_send_event_locked' mangled-name='drm_send_event_locked' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_send_event_locked'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1'/>
+        <parameter type-id='16ab0351' name='e' filepath='drivers/gpu/drm/drm_file.c' line='713' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_release' mangled-name='drm_release' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='440' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_read' mangled-name='drm_read' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_read'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='drivers/gpu/drm/drm_file.c' line='489' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/gpu/drm/drm_file.c' line='490' column='1'/>
+        <parameter type-id='b53e8dbb' name='offset' filepath='drivers/gpu/drm/drm_file.c' line='490' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='drm_poll' mangled-name='drm_poll' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_poll'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1'/>
+        <parameter type-id='f0acc909' name='wait' filepath='drivers/gpu/drm/drm_file.c' line='576' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='drm_open' mangled-name='drm_open' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_file.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_event_reserve_init_locked' mangled-name='drm_event_reserve_init_locked' filepath='drivers/gpu/drm/drm_file.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_event_reserve_init_locked'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_file.c' line='614' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_file.c' line='615' column='1'/>
+        <parameter type-id='16ab0351' name='p' filepath='drivers/gpu/drm/drm_file.c' line='616' column='1'/>
+        <parameter type-id='5b35aab5' name='e' filepath='drivers/gpu/drm/drm_file.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='415eecf1' size-in-bits='64' id='f0acc909'/>
+      <class-decl name='poll_table_struct' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/poll.h' line='43' column='1' id='415eecf1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_qproc' type-id='650104ba' visibility='default' filepath='include/linux/poll.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_key' type-id='8f254b08' visibility='default' filepath='include/linux/poll.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_queue_proc' type-id='4aecccbd' filepath='include/linux/poll.h' line='37' column='1' id='650104ba'/>
+      <pointer-type-def type-id='c5392ac1' size-in-bits='64' id='4aecccbd'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_flip_work.c' language='LANG_C89'>
+      <class-decl name='drm_flip_work' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/drm/drm_flip_work.h' line='73' column='1' id='2181e5cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_flip_work.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='12758247' visibility='default' filepath='include/drm/drm_flip_work.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='worker' type-id='ef9025d0' visibility='default' filepath='include/drm/drm_flip_work.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queued' type-id='72f469ec' visibility='default' filepath='include/drm/drm_flip_work.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='commited' type-id='72f469ec' visibility='default' filepath='include/drm/drm_flip_work.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_flip_work.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='drm_flip_func_t' type-id='5c8b296f' filepath='include/drm/drm_flip_work.h' line='52' column='1' id='12758247'/>
+      <pointer-type-def type-id='2181e5cc' size-in-bits='64' id='705eaeca'/>
+      <pointer-type-def type-id='719a30bb' size-in-bits='64' id='5c8b296f'/>
+      <function-decl name='drm_flip_work_queue' mangled-name='drm_flip_work_queue' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_queue'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1'/>
+        <parameter type-id='eaa32e2f' name='val' filepath='drivers/gpu/drm/drm_flip_work.c' line='76' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_init' mangled-name='drm_flip_work_init' filepath='drivers/gpu/drm/drm_flip_work.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_init'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='147' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_flip_work.c' line='148' column='1'/>
+        <parameter type-id='12758247' name='func' filepath='drivers/gpu/drm/drm_flip_work.c' line='148' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_commit' mangled-name='drm_flip_work_commit' filepath='drivers/gpu/drm/drm_flip_work.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_commit'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='101' column='1'/>
+        <parameter type-id='242e3d19' name='wq' filepath='drivers/gpu/drm/drm_flip_work.c' line='102' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_flip_work_cleanup' mangled-name='drm_flip_work_cleanup' filepath='drivers/gpu/drm/drm_flip_work.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_flip_work_cleanup'>
+        <parameter type-id='705eaeca' name='work' filepath='drivers/gpu/drm/drm_flip_work.c' line='166' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='719a30bb'>
+        <parameter type-id='705eaeca' name='work'/>
+        <parameter type-id='eaa32e2f' name='val'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_fourcc.c' language='LANG_C89'>
+      <class-decl name='drm_format_name_buf' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='142' column='1' id='6f36f2ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='str' type-id='16dc656a' visibility='default' filepath='include/drm/drm_fourcc.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6f36f2ec' size-in-bits='64' id='d00fb93a'/>
+      <function-decl name='drm_get_format_name' mangled-name='drm_get_format_name' filepath='drivers/gpu/drm/drm_fourcc.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_format_name'>
+        <parameter type-id='8f92235e' name='format' filepath='drivers/gpu/drm/drm_fourcc.c' line='138' column='1'/>
+        <parameter type-id='d00fb93a' name='buf' filepath='drivers/gpu/drm/drm_fourcc.c' line='138' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='drm_get_format_info' mangled-name='drm_get_format_info' filepath='drivers/gpu/drm/drm_fourcc.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_get_format_info'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_fourcc.c' line='320' column='1'/>
+        <parameter type-id='92ed24a5' name='mode_cmd' filepath='drivers/gpu/drm/drm_fourcc.c' line='321' column='1'/>
+        <return type-id='f10b2208'/>
+      </function-decl>
+      <function-decl name='drm_format_info' mangled-name='drm_format_info' filepath='drivers/gpu/drm/drm_fourcc.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_format_info'>
+        <parameter type-id='19c2251e' name='format' filepath='drivers/gpu/drm/drm_fourcc.c' line='300' column='1'/>
+        <return type-id='f10b2208'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_framebuffer.c' line='724' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='724' column='1'/>
+        <parameter type-id='8e992c3d' name='funcs' filepath='drivers/gpu/drm/drm_framebuffer.c' line='725' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_unregister_private' mangled-name='drm_framebuffer_unregister_private' filepath='drivers/gpu/drm/drm_framebuffer.c' line='791' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_unregister_private'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='791' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_remove' mangled-name='drm_framebuffer_remove' filepath='drivers/gpu/drm/drm_framebuffer.c' line='963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_remove'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_framebuffer.c' line='963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_framebuffer_lookup' mangled-name='drm_framebuffer_lookup' filepath='drivers/gpu/drm/drm_framebuffer.c' line='763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_framebuffer_lookup'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_framebuffer.c' line='763' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_framebuffer.c' line='764' column='1'/>
+        <parameter type-id='8f92235e' name='id' filepath='drivers/gpu/drm/drm_framebuffer.c' line='765' column='1'/>
+        <return type-id='7b332e1c'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_gem.c' language='LANG_C89'>
+      <function-decl name='drm_gem_object_put_unlocked' mangled-name='drm_gem_object_put_unlocked' filepath='drivers/gpu/drm/drm_gem.c' line='1000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_put_unlocked'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='1000' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_lookup' mangled-name='drm_gem_object_lookup' filepath='drivers/gpu/drm/drm_gem.c' line='748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_lookup'>
+        <parameter type-id='9e99ecc1' name='filp' filepath='drivers/gpu/drm/drm_gem.c' line='748' column='1'/>
+        <parameter type-id='19c2251e' name='handle' filepath='drivers/gpu/drm/drm_gem.c' line='748' column='1'/>
+        <return type-id='abd62a96'/>
+      </function-decl>
+      <function-decl name='drm_gem_vm_open' mangled-name='drm_gem_vm_open' filepath='drivers/gpu/drm/drm_gem.c' line='1049' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_vm_open'>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1049' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_vm_close' mangled-name='drm_gem_vm_close' filepath='drivers/gpu/drm/drm_gem.c' line='1064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_vm_close'>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1064' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_put_pages' mangled-name='drm_gem_put_pages' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_put_pages'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_gem.c' line='616' column='1'/>
+        <parameter type-id='b50a4934' name='dirty' filepath='drivers/gpu/drm/drm_gem.c' line='617' column='1'/>
+        <parameter type-id='b50a4934' name='accessed' filepath='drivers/gpu/drm/drm_gem.c' line='617' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_private_object_init' mangled-name='drm_gem_private_object_init' filepath='drivers/gpu/drm/drm_gem.c' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_private_object_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem.c' line='151' column='1'/>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='152' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_gem.c' line='152' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_release' mangled-name='drm_gem_object_release' filepath='drivers/gpu/drm/drm_gem.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_release'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='950' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_put' mangled-name='drm_gem_object_put' filepath='drivers/gpu/drm/drm_gem.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_put'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='1032' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_object_init' mangled-name='drm_gem_object_init' filepath='drivers/gpu/drm/drm_gem.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_object_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem.c' line='124' column='1'/>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='125' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_gem.c' line='125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_mmap_obj' mangled-name='drm_gem_mmap_obj' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_mmap_obj'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1'/>
+        <parameter type-id='7359adad' name='obj_size' filepath='drivers/gpu/drm/drm_gem.c' line='1096' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1097' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_mmap' mangled-name='drm_gem_mmap' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem.c' line='1144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_handle_create' mangled-name='drm_gem_handle_create' filepath='drivers/gpu/drm/drm_gem.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_handle_create'>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_gem.c' line='444' column='1'/>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='445' column='1'/>
+        <parameter type-id='f9409001' name='handlep' filepath='drivers/gpu/drm/drm_gem.c' line='446' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_get_pages' mangled-name='drm_gem_get_pages' filepath='drivers/gpu/drm/drm_gem.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_get_pages'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='553' column='1'/>
+        <return type-id='9f93c9da'/>
+      </function-decl>
+      <function-decl name='drm_gem_free_mmap_offset' mangled-name='drm_gem_free_mmap_offset' filepath='drivers/gpu/drm/drm_gem.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_free_mmap_offset'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_create_mmap_offset' mangled-name='drm_gem_create_mmap_offset' filepath='drivers/gpu/drm/drm_gem.c' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_create_mmap_offset'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem.c' line='515' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_gem_cma_helper.c' language='LANG_C89'>
+      <var-decl name='drm_gem_cma_vm_ops' type-id='92e9b57c' mangled-name='drm_gem_cma_vm_ops' visibility='default' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='263' column='1' elf-symbol-id='drm_gem_cma_vm_ops'/>
+      <function-decl name='drm_gem_cma_prime_vunmap' mangled-name='drm_gem_cma_prime_vunmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_vunmap'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='569' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_vmap' mangled-name='drm_gem_cma_prime_vmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_vmap'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='550' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_mmap' mangled-name='drm_gem_cma_prime_mmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_mmap'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='521' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='522' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_import_sg_table' mangled-name='drm_gem_cma_prime_import_sg_table' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_import_sg_table'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='468' column='1'/>
+        <parameter type-id='e68e04c1' name='attach' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='469' column='1'/>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='470' column='1'/>
+        <return type-id='abd62a96'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_prime_get_sg_table' mangled-name='drm_gem_cma_prime_get_sg_table' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_prime_get_sg_table'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='427' column='1'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_mmap' mangled-name='drm_gem_cma_mmap' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='308' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_free_object' mangled-name='drm_gem_cma_free_object' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_free_object'>
+        <parameter type-id='abd62a96' name='gem_obj' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='176' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_cma_dumb_create_internal' mangled-name='drm_gem_cma_dumb_create_internal' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_cma_dumb_create_internal'>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='211' column='1'/>
+        <parameter type-id='8898134d' name='drm' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='212' column='1'/>
+        <parameter type-id='28cbbf40' name='args' filepath='drivers/gpu/drm/drm_gem_cma_helper.c' line='213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_gem_framebuffer_helper.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='28271da3' size-in-bits='infinite' id='f5432a6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='drm_vma_offset_node' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/drm_vma_manager.h' line='52' column='1' id='743d7e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_lock' type-id='ac16795b' visibility='default' filepath='include/drm/drm_vma_manager.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_node' type-id='60498a7e' visibility='default' filepath='include/drm/drm_vma_manager.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_files' type-id='dec44472' visibility='default' filepath='include/drm/drm_vma_manager.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='readonly' type-id='b50a4934' visibility='default' filepath='include/drm/drm_vma_manager.h' line='56' 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='60498a7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color' type-id='7359adad' 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='91ce1af9' 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='91ce1af9' 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='0ee978f1' 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='72f469ec' 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='72f469ec' 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='2a8a6332' 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='2a8a6332' 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='2a8a6332' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/drm/drm_mm.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocated' type-id='b50a4934' visibility='default' filepath='include/drm/drm_mm.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='scanned_block' type-id='b50a4934' 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='0b8ea949'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='color_adjust' type-id='4bcdfb80' 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='72f469ec' 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='60498a7e' 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='6fe1603d' 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='6fe1603d' 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='dec44472' 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='7359adad' visibility='default' filepath='include/drm/drm_mm.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='36' column='1' id='3f8b3d98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cache_sgt_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/dma-buf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach' type-id='b512ba7d' visibility='default' filepath='include/linux/dma-buf.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='detach' type-id='f191792a' visibility='default' filepath='include/linux/dma-buf.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_dma_buf' type-id='2d7508a9' visibility='default' filepath='include/linux/dma-buf.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_dma_buf' type-id='0b475e59' visibility='default' filepath='include/linux/dma-buf.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='release' type-id='4e7b299a' visibility='default' filepath='include/linux/dma-buf.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='begin_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='begin_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='end_cpu_access' type-id='127a97dd' visibility='default' filepath='include/linux/dma-buf.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='end_cpu_access_partial' type-id='5299fb35' visibility='default' filepath='include/linux/dma-buf.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mmap' type-id='68074686' visibility='default' filepath='include/linux/dma-buf.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='map' type-id='02838dc6' visibility='default' filepath='include/linux/dma-buf.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unmap' type-id='632039f8' visibility='default' filepath='include/linux/dma-buf.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vmap' type-id='a298286a' visibility='default' filepath='include/linux/dma-buf.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vunmap' type-id='eb050ad4' visibility='default' filepath='include/linux/dma-buf.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_uuid' type-id='24dc58c9' visibility='default' filepath='include/linux/dma-buf.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_flags' type-id='97a03e57' visibility='default' filepath='include/linux/dma-buf.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dma-buf.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_buf_attach_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='454' column='1' id='26832c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_counter' type-id='f0981eeb' visibility='default' filepath='include/linux/dma-buf.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='72' column='1' id='d06fbf66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='45793a97' visibility='default' filepath='include/linux/dma-resv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dma-resv.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fence_excl' type-id='28271da3' visibility='default' filepath='include/linux/dma-resv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fence' type-id='ed300e23' visibility='default' filepath='include/linux/dma-resv.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dma_resv_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/dma-resv.h' line='59' column='1' id='7cc6fd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dma-resv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shared_count' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shared_max' type-id='19c2251e' visibility='default' filepath='include/linux/dma-resv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shared' type-id='f5432a6f' visibility='default' filepath='include/linux/dma-resv.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='406' column='1' id='d5acde18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb' type-id='54c5dd35' visibility='default' filepath='include/linux/dma-buf.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='03d48e96' visibility='default' filepath='include/linux/dma-buf.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='8f254b08' visibility='default' filepath='include/linux/dma-buf.h' line='410' 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='116' column='1' id='54c5dd35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/dma-fence.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='9c175524' visibility='default' filepath='include/linux/dma-fence.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dma_fence_func_t' type-id='75d065d2' filepath='include/linux/dma-fence.h' line='105' column='1' id='9c175524'/>
+      <class-decl name='dma_buf_sysfs_entry' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/dma-buf.h' line='414' column='1' id='36721cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/dma-buf.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dmabuf' type-id='5e4f599b' visibility='default' filepath='include/linux/dma-buf.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_gem_object_funcs' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_gem.h' line='47' column='1' id='df20b624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='8e2012e0' visibility='default' filepath='include/drm/drm_gem.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='close' type-id='133b86a1' visibility='default' filepath='include/drm/drm_gem.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='print_info' type-id='1c51ec16' visibility='default' filepath='include/drm/drm_gem.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='export' type-id='a4e2d046' visibility='default' filepath='include/drm/drm_gem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin' type-id='12e23e5c' visibility='default' filepath='include/drm/drm_gem.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unpin' type-id='9126441b' visibility='default' filepath='include/drm/drm_gem.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_sg_table' type-id='32774f90' visibility='default' filepath='include/drm/drm_gem.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vmap' type-id='2edb3e4b' visibility='default' filepath='include/drm/drm_gem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vunmap' type-id='06586097' visibility='default' filepath='include/drm/drm_gem.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/drm/drm_gem.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3f8b3d98' const='yes' id='38cc1773'/>
+      <pointer-type-def type-id='38cc1773' size-in-bits='64' id='c248c11b'/>
+      <qualified-type-def type-id='df20b624' const='yes' id='d45b1fc5'/>
+      <pointer-type-def type-id='d45b1fc5' size-in-bits='64' id='3a73453d'/>
+      <qualified-type-def type-id='60498a7e' const='yes' id='809e8e55'/>
+      <pointer-type-def type-id='809e8e55' size-in-bits='64' id='f89a51ed'/>
+      <pointer-type-def type-id='26832c63' size-in-bits='64' id='39154bd3'/>
+      <pointer-type-def type-id='36721cc5' size-in-bits='64' id='bd60ed15'/>
+      <pointer-type-def type-id='54c5dd35' size-in-bits='64' id='a47516e5'/>
+      <pointer-type-def type-id='d06fbf66' size-in-bits='64' id='340cea9c'/>
+      <pointer-type-def type-id='7cc6fd83' size-in-bits='64' id='ed300e23'/>
+      <pointer-type-def type-id='0b8ea949' size-in-bits='64' id='0ee978f1'/>
+      <pointer-type-def type-id='9977c731' size-in-bits='64' id='b512ba7d'/>
+      <pointer-type-def type-id='88776799' size-in-bits='64' id='127a97dd'/>
+      <pointer-type-def type-id='c3e60881' size-in-bits='64' id='5299fb35'/>
+      <pointer-type-def type-id='8b9912bb' size-in-bits='64' id='97a03e57'/>
+      <pointer-type-def type-id='440843bd' size-in-bits='64' id='24dc58c9'/>
+      <pointer-type-def type-id='70e959e4' size-in-bits='64' id='68074686'/>
+      <pointer-type-def type-id='efdb04f5' size-in-bits='64' id='2d7508a9'/>
+      <pointer-type-def type-id='7dfcb6b6' size-in-bits='64' id='4bcdfb80'/>
+      <pointer-type-def type-id='7908d890' size-in-bits='64' id='4e7b299a'/>
+      <pointer-type-def type-id='d299a9b0' size-in-bits='64' id='f191792a'/>
+      <pointer-type-def type-id='45d6b556' size-in-bits='64' id='632039f8'/>
+      <pointer-type-def type-id='9a321b4a' size-in-bits='64' id='eb050ad4'/>
+      <pointer-type-def type-id='7e5de8f5' size-in-bits='64' id='0b475e59'/>
+      <pointer-type-def type-id='18c89148' size-in-bits='64' id='75d065d2'/>
+      <pointer-type-def type-id='a1b495b8' size-in-bits='64' id='a298286a'/>
+      <pointer-type-def type-id='ddfa4afc' size-in-bits='64' id='02838dc6'/>
+      <function-decl name='drm_gem_fb_prepare_fb' mangled-name='drm_gem_fb_prepare_fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_prepare_fb'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='287' column='1'/>
+        <parameter type-id='d0835005' name='state' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='288' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_get_obj' mangled-name='drm_gem_fb_get_obj' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_get_obj'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='47' column='1'/>
+        <parameter type-id='f0981eeb' name='plane' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='48' column='1'/>
+        <return type-id='abd62a96'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_destroy' mangled-name='drm_gem_fb_destroy' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_destroy'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_create_handle'>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='119' column='1'/>
+        <parameter type-id='9e99ecc1' name='file' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='119' column='1'/>
+        <parameter type-id='807869d3' name='handle' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_fb_create' mangled-name='drm_gem_fb_create' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_fb_create'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1'/>
+        <parameter type-id='9e99ecc1' name='file' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='223' column='1'/>
+        <parameter type-id='92ed24a5' name='mode_cmd' filepath='drivers/gpu/drm/drm_gem_framebuffer_helper.c' line='224' column='1'/>
+        <return type-id='7b332e1c'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9977c731'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='e68e04c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88776799'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3e60881'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b9912bb'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='440843bd'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='f1397309'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70e959e4'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efdb04f5'>
+        <parameter type-id='e68e04c1'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='4adb0e6a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7dfcb6b6'>
+        <parameter type-id='f89a51ed'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='3df9fd28'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7908d890'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d299a9b0'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='e68e04c1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45d6b556'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9a321b4a'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5de8f5'>
+        <parameter type-id='e68e04c1'/>
+        <parameter type-id='4adb0e6a'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18c89148'>
+        <parameter type-id='28271da3'/>
+        <parameter type-id='a47516e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1b495b8'>
+        <parameter type-id='5e4f599b'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ddfa4afc'>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_hdcp.c' language='LANG_C89'>
+      <function-decl name='drm_hdcp_update_content_protection' mangled-name='drm_hdcp_update_content_protection' filepath='drivers/gpu/drm/drm_hdcp.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdcp_update_content_protection'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_hdcp.c' line='443' column='1'/>
+        <parameter type-id='91ce1af9' name='val' filepath='drivers/gpu/drm/drm_hdcp.c' line='444' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_hdcp_check_ksvs_revoked' mangled-name='drm_hdcp_check_ksvs_revoked' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_hdcp_check_ksvs_revoked'>
+        <parameter type-id='8898134d' name='drm_dev' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1'/>
+        <parameter type-id='8bff8096' name='ksvs' filepath='drivers/gpu/drm/drm_hdcp.c' line='284' column='1'/>
+        <parameter type-id='19c2251e' name='ksv_count' filepath='drivers/gpu/drm/drm_hdcp.c' line='285' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_connector_attach_content_protection_property' mangled-name='drm_connector_attach_content_protection_property' filepath='drivers/gpu/drm/drm_hdcp.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_connector_attach_content_protection_property'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_hdcp.c' line='392' column='1'/>
+        <parameter type-id='b50a4934' name='hdcp_content_type' filepath='drivers/gpu/drm/drm_hdcp.c' line='392' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_compat_ioctl'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_ioc32.c' line='979' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/gpu/drm/drm_ioc32.c' line='979' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/gpu/drm/drm_ioc32.c' line='979' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_ioctl.c' language='LANG_C89'>
+      <function-decl name='drm_ioctl_kernel' mangled-name='drm_ioctl_kernel' filepath='drivers/gpu/drm/drm_ioctl.c' line='770' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ioctl_kernel'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/gpu/drm/drm_ioctl.c' line='770' column='1'/>
+        <parameter type-id='e2cefc47' name='func' filepath='drivers/gpu/drm/drm_ioctl.c' line='770' column='1'/>
+        <parameter type-id='eaa32e2f' name='kdata' filepath='drivers/gpu/drm/drm_ioctl.c' line='770' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/gpu/drm/drm_ioctl.c' line='771' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='drm_ioctl' mangled-name='drm_ioctl' filepath='drivers/gpu/drm/drm_ioctl.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_ioctl'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/drm_ioctl.c' line='810' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/gpu/drm/drm_ioctl.c' line='811' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/gpu/drm/drm_ioctl.c' line='811' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_irq.c' language='LANG_C89'>
+      <function-decl name='drm_irq_uninstall' mangled-name='drm_irq_uninstall' filepath='drivers/gpu/drm/drm_irq.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_irq_uninstall'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_irq.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_irq_install' mangled-name='drm_irq_install' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_irq_install'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1'/>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/gpu/drm/drm_irq.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_mipi_dsi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='32' id='931565be'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='mipi_dsi_host' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='106' column='1' id='b048e68e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='093ead14' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_host_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='91' column='1' id='62465d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attach' type-id='43a37dd9' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detach' type-id='43a37dd9' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transfer' type-id='a51b5fb8' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_device' size-in-bits='8000' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='187' column='1' id='a167c9f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='c149fe34' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='lanes' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='format' type-id='fe8650ad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='mode_flags' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='hs_rate' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='lp_rate' type-id='7359adad' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='197' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mipi_dsi_pixel_format' filepath='include/drm/drm_mipi_dsi.h' line='147' column='1' id='fe8650ad'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MIPI_DSI_FMT_RGB888' value='0'/>
+        <enumerator name='MIPI_DSI_FMT_RGB666' value='1'/>
+        <enumerator name='MIPI_DSI_FMT_RGB666_PACKED' value='2'/>
+        <enumerator name='MIPI_DSI_FMT_RGB565' value='3'/>
+      </enum-decl>
+      <class-decl name='mipi_dsi_msg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='38' column='1' id='b98f7775'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='f9b06939' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctrl' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_ms' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_len' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_buf' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_len' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_device_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='165' column='1' id='1c5d084f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='channel' type-id='19c2251e' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node' type-id='9a537bbe' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='302' column='1' id='51d715c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='289e8bdc' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='289e8bdc' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='fea4b945' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mipi_dsi_packet' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='63' column='1' id='7e369584'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header' type-id='931565be' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='payload_length' type-id='b59d7dce' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/drm/drm_mipi_dsi.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1c5d084f' const='yes' id='a51c0f4a'/>
+      <pointer-type-def type-id='a51c0f4a' size-in-bits='64' id='4b2c3420'/>
+      <qualified-type-def type-id='62465d3d' const='yes' id='db1c1b36'/>
+      <pointer-type-def type-id='db1c1b36' size-in-bits='64' id='093ead14'/>
+      <qualified-type-def type-id='b98f7775' const='yes' id='b5b8ebc4'/>
+      <pointer-type-def type-id='b5b8ebc4' size-in-bits='64' id='001b67aa'/>
+      <pointer-type-def type-id='ce6ad852' size-in-bits='64' id='289e8bdc'/>
+      <pointer-type-def type-id='11ecaf45' size-in-bits='64' id='43a37dd9'/>
+      <pointer-type-def type-id='a167c9f6' size-in-bits='64' id='182be7cc'/>
+      <pointer-type-def type-id='51d715c2' size-in-bits='64' id='0588e2f0'/>
+      <pointer-type-def type-id='b048e68e' size-in-bits='64' id='c149fe34'/>
+      <pointer-type-def type-id='7e369584' size-in-bits='64' id='368a0122'/>
+      <pointer-type-def type-id='31b9d99e' size-in-bits='64' id='a51b5fb8'/>
+      <pointer-type-def type-id='a796a301' size-in-bits='64' id='fea4b945'/>
+      <function-decl name='of_find_mipi_dsi_host_by_node' mangled-name='of_find_mipi_dsi_host_by_node' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_mipi_dsi_host_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='261' column='1'/>
+        <return type-id='c149fe34'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_set_maximum_return_packet_size' mangled-name='mipi_dsi_set_maximum_return_packet_size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_set_maximum_return_packet_size'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='534' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='535' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_packet_format_is_long' mangled-name='mipi_dsi_packet_format_is_long' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_packet_format_is_long'>
+        <parameter type-id='f9b06939' name='type' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='407' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_host_unregister' mangled-name='mipi_dsi_host_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_host_unregister'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_host_register' mangled-name='mipi_dsi_host_register' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_host_register'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='280' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_device_register_full' mangled-name='mipi_dsi_device_register_full' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_device_register_full'>
+        <parameter type-id='c149fe34' name='host' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='200' column='1'/>
+        <parameter type-id='4b2c3420' name='info' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='201' column='1'/>
+        <return type-id='182be7cc'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_generic_write' mangled-name='mipi_dsi_generic_write' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_generic_write'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1'/>
+        <parameter type-id='eaa32e2f' name='payload' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='562' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='563' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_generic_read' mangled-name='mipi_dsi_generic_read' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_generic_read'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1'/>
+        <parameter type-id='eaa32e2f' name='params' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='607' column='1'/>
+        <parameter type-id='b59d7dce' name='num_params' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='608' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_driver_unregister' mangled-name='mipi_dsi_driver_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_driver_unregister'>
+        <parameter type-id='0588e2f0' name='drv' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1148' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_driver_register_full' mangled-name='mipi_dsi_driver_register_full' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_driver_register_full'>
+        <parameter type-id='0588e2f0' name='drv' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1125' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1126' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_device_unregister' mangled-name='mipi_dsi_device_unregister' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_device_unregister'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_detach' mangled-name='mipi_dsi_detach' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_detach'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_write_buffer' mangled-name='mipi_dsi_dcs_write_buffer' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_write_buffer'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='651' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='652' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='652' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_set_tear_off' mangled-name='mipi_dsi_dcs_set_tear_off' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_set_tear_off'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='967' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_set_display_brightness' mangled-name='mipi_dsi_dcs_set_display_brightness' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_set_display_brightness'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1053' column='1'/>
+        <parameter type-id='1dc6a898' name='brightness' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='1054' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_dcs_read' mangled-name='mipi_dsi_dcs_read' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_dcs_read'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='734' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='735' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_create_packet' mangled-name='mipi_dsi_create_packet' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_create_packet'>
+        <parameter type-id='368a0122' name='packet' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='440' column='1'/>
+        <parameter type-id='001b67aa' name='msg' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='441' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mipi_dsi_attach' mangled-name='mipi_dsi_attach' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mipi_dsi_attach'>
+        <parameter type-id='182be7cc' name='dsi' filepath='drivers/gpu/drm/drm_mipi_dsi.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ce6ad852'>
+        <parameter type-id='182be7cc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ecaf45'>
+        <parameter type-id='c149fe34'/>
+        <parameter type-id='182be7cc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31b9d99e'>
+        <parameter type-id='c149fe34'/>
+        <parameter type-id='001b67aa'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a796a301'>
+        <parameter type-id='182be7cc'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='24e1ec7e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='0b8ea949' const='yes' id='bbc46580'/>
+      <pointer-type-def type-id='bbc46580' size-in-bits='64' id='402c0a9e'/>
+      <qualified-type-def type-id='0ee978f1' const='yes' id='60f31a4e'/>
+      <pointer-type-def type-id='60498a7e' size-in-bits='64' id='6368b074'/>
+      <qualified-type-def type-id='6368b074' const='yes' id='7c50e73f'/>
+      <function-decl name='drm_mm_takedown' mangled-name='drm_mm_takedown' filepath='drivers/gpu/drm/drm_mm.c' line='937' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_takedown'>
+        <parameter type-id='0ee978f1' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='937' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mm_remove_node' mangled-name='drm_mm_remove_node' filepath='drivers/gpu/drm/drm_mm.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_remove_node'>
+        <parameter type-id='6368b074' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='572' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mm_print' mangled-name='drm_mm_print' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_print'>
+        <parameter type-id='402c0a9e' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1'/>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_mm.c' line='963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_insert_node_in_range'>
+        <parameter type-id='60f31a4e' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='464' column='1'/>
+        <parameter type-id='7c50e73f' name='node' filepath='drivers/gpu/drm/drm_mm.c' line='465' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='466' column='1'/>
+        <parameter type-id='91ce1af9' name='alignment' filepath='drivers/gpu/drm/drm_mm.c' line='466' column='1'/>
+        <parameter type-id='7359adad' name='color' filepath='drivers/gpu/drm/drm_mm.c' line='467' column='1'/>
+        <parameter type-id='91ce1af9' name='range_start' filepath='drivers/gpu/drm/drm_mm.c' line='468' column='1'/>
+        <parameter type-id='91ce1af9' name='range_end' filepath='drivers/gpu/drm/drm_mm.c' line='468' column='1'/>
+        <parameter type-id='24e1ec7e' name='mode' filepath='drivers/gpu/drm/drm_mm.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mm_init' mangled-name='drm_mm_init' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mm_init'>
+        <parameter type-id='0ee978f1' name='mm' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <parameter type-id='91ce1af9' name='start' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/gpu/drm/drm_mm.c' line='907' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='387' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_reset' mangled-name='drm_mode_config_reset' filepath='drivers/gpu/drm/drm_mode_config.c' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_reset'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='179' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_config_cleanup' mangled-name='drm_mode_config_cleanup' filepath='drivers/gpu/drm/drm_mode_config.c' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_config_cleanup'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_config.c' line='434' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_mode_object.c' language='LANG_C89'>
+      <pointer-type-def type-id='350f4182' size-in-bits='64' id='c5417630'/>
+      <function-decl name='drm_mode_object_put' mangled-name='drm_mode_object_put' filepath='drivers/gpu/drm/drm_mode_object.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_put'>
+        <parameter type-id='c5417630' name='obj' filepath='drivers/gpu/drm/drm_mode_object.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_object_property_set_value' mangled-name='drm_object_property_set_value' filepath='drivers/gpu/drm/drm_mode_object.c' line='267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_object_property_set_value'>
+        <parameter type-id='c5417630' name='obj' filepath='drivers/gpu/drm/drm_mode_object.c' line='267' column='1'/>
+        <parameter type-id='26ea5d4c' name='property' filepath='drivers/gpu/drm/drm_mode_object.c' line='268' column='1'/>
+        <parameter type-id='9c313c2d' name='val' filepath='drivers/gpu/drm/drm_mode_object.c' line='268' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_object_attach_property' mangled-name='drm_object_attach_property' filepath='drivers/gpu/drm/drm_mode_object.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_object_attach_property'>
+        <parameter type-id='c5417630' name='obj' filepath='drivers/gpu/drm/drm_mode_object.c' line='228' column='1'/>
+        <parameter type-id='26ea5d4c' name='property' filepath='drivers/gpu/drm/drm_mode_object.c' line='229' column='1'/>
+        <parameter type-id='9c313c2d' name='init_val' filepath='drivers/gpu/drm/drm_mode_object.c' line='230' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_object_get' mangled-name='drm_mode_object_get' filepath='drivers/gpu/drm/drm_mode_object.c' line='209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_get'>
+        <parameter type-id='c5417630' name='obj' filepath='drivers/gpu/drm/drm_mode_object.c' line='209' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_object_find' mangled-name='drm_mode_object_find' filepath='drivers/gpu/drm/drm_mode_object.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_object_find'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_mode_object.c' line='173' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_mode_object.c' line='174' column='1'/>
+        <parameter type-id='8f92235e' name='id' filepath='drivers/gpu/drm/drm_mode_object.c' line='175' column='1'/>
+        <parameter type-id='8f92235e' name='type' filepath='drivers/gpu/drm/drm_mode_object.c' line='175' column='1'/>
+        <return type-id='c5417630'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_modes.c' language='LANG_C89'>
+      <class-decl name='drm_mode_modeinfo' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='231' column='1' id='9d0ae2a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hdisplay' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hsync_start' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hsync_end' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='htotal' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hskew' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vdisplay' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vsync_start' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='vsync_end' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='vtotal' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='vscan' type-id='d315442e' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vrefresh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/drm/drm_mode.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='videomode' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/video/videomode.h' line='18' column='1' id='70ab3bc7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelclock' type-id='7359adad' visibility='default' filepath='include/video/videomode.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hactive' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hfront_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hback_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vactive' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='vfront_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vback_porch' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/video/videomode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flags' type-id='04e8607a' visibility='default' filepath='include/video/videomode.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='display_flags' filepath='include/video/display_timing.h' line='14' column='1' id='04e8607a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DISPLAY_FLAGS_HSYNC_LOW' value='1'/>
+        <enumerator name='DISPLAY_FLAGS_HSYNC_HIGH' value='2'/>
+        <enumerator name='DISPLAY_FLAGS_VSYNC_LOW' value='4'/>
+        <enumerator name='DISPLAY_FLAGS_VSYNC_HIGH' value='8'/>
+        <enumerator name='DISPLAY_FLAGS_DE_LOW' value='16'/>
+        <enumerator name='DISPLAY_FLAGS_DE_HIGH' value='32'/>
+        <enumerator name='DISPLAY_FLAGS_PIXDATA_POSEDGE' value='64'/>
+        <enumerator name='DISPLAY_FLAGS_PIXDATA_NEGEDGE' value='128'/>
+        <enumerator name='DISPLAY_FLAGS_INTERLACED' value='256'/>
+        <enumerator name='DISPLAY_FLAGS_DOUBLESCAN' value='512'/>
+        <enumerator name='DISPLAY_FLAGS_DOUBLECLK' value='1024'/>
+        <enumerator name='DISPLAY_FLAGS_SYNC_POSEDGE' value='2048'/>
+        <enumerator name='DISPLAY_FLAGS_SYNC_NEGEDGE' value='4096'/>
+      </enum-decl>
+      <qualified-type-def type-id='9d0ae2a2' const='yes' id='c2623161'/>
+      <pointer-type-def type-id='c2623161' size-in-bits='64' id='4b939911'/>
+      <qualified-type-def type-id='70ab3bc7' const='yes' id='ceff8680'/>
+      <pointer-type-def type-id='ceff8680' size-in-bits='64' id='8640fd9e'/>
+      <pointer-type-def type-id='70ab3bc7' size-in-bits='64' id='83e7c23f'/>
+      <function-decl name='drm_mode_probed_add' mangled-name='drm_mode_probed_add' filepath='drivers/gpu/drm/drm_modes.c' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_probed_add'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_modes.c' line='107' column='1'/>
+        <parameter type-id='11e02f83' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='108' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_set_crtcinfo' mangled-name='drm_mode_set_crtcinfo' filepath='drivers/gpu/drm/drm_modes.c' line='843' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_set_crtcinfo'>
+        <parameter type-id='11e02f83' name='p' filepath='drivers/gpu/drm/drm_modes.c' line='843' column='1'/>
+        <parameter type-id='95e97e5e' name='adjust_flags' filepath='drivers/gpu/drm/drm_modes.c' line='843' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_convert_umode' mangled-name='drm_mode_convert_umode' filepath='drivers/gpu/drm/drm_modes.c' line='1991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_convert_umode'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='1991' column='1'/>
+        <parameter type-id='11e02f83' name='out' filepath='drivers/gpu/drm/drm_modes.c' line='1992' column='1'/>
+        <parameter type-id='4b939911' name='in' filepath='drivers/gpu/drm/drm_modes.c' line='1993' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_get_drm_display_mode' mangled-name='of_get_drm_display_mode' filepath='drivers/gpu/drm/drm_modes.c' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_drm_display_mode'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/gpu/drm/drm_modes.c' line='707' column='1'/>
+        <parameter type-id='11e02f83' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='708' column='1'/>
+        <parameter type-id='f9409001' name='bus_flags' filepath='drivers/gpu/drm/drm_modes.c' line='708' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/gpu/drm/drm_modes.c' line='709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_display_mode_from_videomode' mangled-name='drm_display_mode_from_videomode' filepath='drivers/gpu/drm/drm_modes.c' line='587' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_display_mode_from_videomode'>
+        <parameter type-id='8640fd9e' name='vm' filepath='drivers/gpu/drm/drm_modes.c' line='587' column='1'/>
+        <parameter type-id='11e02f83' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='588' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_vrefresh' mangled-name='drm_mode_vrefresh' filepath='drivers/gpu/drm/drm_modes.c' line='783' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_vrefresh'>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='783' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_mode_set_name' mangled-name='drm_mode_set_name' filepath='drivers/gpu/drm/drm_modes.c' line='739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_set_name'>
+        <parameter type-id='11e02f83' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_equal' mangled-name='drm_mode_equal' filepath='drivers/gpu/drm/drm_modes.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_equal'>
+        <parameter type-id='745b39e8' name='mode1' filepath='drivers/gpu/drm/drm_modes.c' line='1053' column='1'/>
+        <parameter type-id='745b39e8' name='mode2' filepath='drivers/gpu/drm/drm_modes.c' line='1054' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_mode_duplicate' mangled-name='drm_mode_duplicate' filepath='drivers/gpu/drm/drm_modes.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_duplicate'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='935' column='1'/>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='936' column='1'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+      <function-decl name='drm_mode_destroy' mangled-name='drm_mode_destroy' filepath='drivers/gpu/drm/drm_modes.c' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_destroy'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='89' column='1'/>
+        <parameter type-id='11e02f83' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='89' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_debug_printmodeline' mangled-name='drm_mode_debug_printmodeline' filepath='drivers/gpu/drm/drm_modes.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_debug_printmodeline'>
+        <parameter type-id='745b39e8' name='mode' filepath='drivers/gpu/drm/drm_modes.c' line='54' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_mode_create' mangled-name='drm_mode_create' filepath='drivers/gpu/drm/drm_modes.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_create'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='70' column='1'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+      <function-decl name='drm_mode_copy' mangled-name='drm_mode_copy' filepath='drivers/gpu/drm/drm_modes.c' line='915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_mode_copy'>
+        <parameter type-id='11e02f83' name='dst' filepath='drivers/gpu/drm/drm_modes.c' line='915' column='1'/>
+        <parameter type-id='745b39e8' name='src' filepath='drivers/gpu/drm/drm_modes.c' line='915' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_display_mode_to_videomode' mangled-name='drm_display_mode_to_videomode' filepath='drivers/gpu/drm/drm_modes.c' line='628' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_display_mode_to_videomode'>
+        <parameter type-id='745b39e8' name='dmode' filepath='drivers/gpu/drm/drm_modes.c' line='628' column='1'/>
+        <parameter type-id='83e7c23f' name='vm' filepath='drivers/gpu/drm/drm_modes.c' line='629' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_cvt_mode' mangled-name='drm_cvt_mode' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_cvt_mode'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1'/>
+        <parameter type-id='95e97e5e' name='hdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='140' column='1'/>
+        <parameter type-id='95e97e5e' name='vdisplay' filepath='drivers/gpu/drm/drm_modes.c' line='141' column='1'/>
+        <parameter type-id='95e97e5e' name='vrefresh' filepath='drivers/gpu/drm/drm_modes.c' line='141' column='1'/>
+        <parameter type-id='b50a4934' name='reduced' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <parameter type-id='b50a4934' name='interlaced' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <parameter type-id='b50a4934' name='margins' filepath='drivers/gpu/drm/drm_modes.c' line='142' column='1'/>
+        <return type-id='11e02f83'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_mode_fill_fb_struct'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='79' column='1'/>
+        <parameter type-id='7b332e1c' name='fb' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='80' column='1'/>
+        <parameter type-id='92ed24a5' name='mode_cmd' filepath='drivers/gpu/drm/drm_modeset_helper.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_modeset_lock.c' language='LANG_C89'>
+      <function-decl name='drm_modeset_lock_all' mangled-name='drm_modeset_lock_all' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_all'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='95' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_unlock_all' mangled-name='drm_modeset_unlock_all' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_unlock_all'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock' mangled-name='drm_modeset_lock' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock'>
+        <parameter type-id='b4b06bb8' name='lock' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='338' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='339' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_backoff' mangled-name='drm_modeset_backoff' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_backoff'>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='294' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_drop_locks' mangled-name='drm_modeset_drop_locks' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_drop_locks'>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='226' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock_all_ctx' mangled-name='drm_modeset_lock_all_ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_all_ctx'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='395' column='1'/>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='396' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_modeset_unlock' mangled-name='drm_modeset_unlock' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='368' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_unlock'>
+        <parameter type-id='b4b06bb8' name='lock' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='368' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_lock_init' mangled-name='drm_modeset_lock_init' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_lock_init'>
+        <parameter type-id='b4b06bb8' name='lock' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='313' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_acquire_init' mangled-name='drm_modeset_acquire_init' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_acquire_init'>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='198' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='199' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_modeset_acquire_fini' mangled-name='drm_modeset_acquire_fini' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_modeset_acquire_fini'>
+        <parameter type-id='d1499e71' name='ctx' filepath='drivers/gpu/drm/drm_modeset_lock.c' line='214' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_of.c' language='LANG_C89'>
+      <class-decl name='component_match' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/base/component.c' line='56' column='1' id='37c0f586'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='b59d7dce' visibility='default' filepath='drivers/base/component.c' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='compare' type-id='72dd5196' visibility='default' filepath='drivers/base/component.c' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='37c0f586' size-in-bits='64' id='7d9421ac'/>
+      <pointer-type-def type-id='7d9421ac' size-in-bits='64' id='3630c5f2'/>
+      <function-decl name='drm_of_find_possible_crtcs' mangled-name='drm_of_find_possible_crtcs' filepath='drivers/gpu/drm/drm_of.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_of_find_possible_crtcs'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_of.c' line='62' column='1'/>
+        <parameter type-id='9a537bbe' name='port' filepath='drivers/gpu/drm/drm_of.c' line='63' column='1'/>
+        <return type-id='8f92235e'/>
+      </function-decl>
+      <function-decl name='drm_of_component_match_add' mangled-name='drm_of_component_match_add' filepath='drivers/gpu/drm/drm_of.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_of_component_match_add'>
+        <parameter type-id='fa0b179b' name='master' filepath='drivers/gpu/drm/drm_of.c' line='91' column='1'/>
+        <parameter type-id='3630c5f2' name='matchptr' filepath='drivers/gpu/drm/drm_of.c' line='92' column='1'/>
+        <parameter type-id='92d15ae9' name='compare' filepath='drivers/gpu/drm/drm_of.c' line='93' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/gpu/drm/drm_of.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_panel.c' language='LANG_C89'>
+      <class-decl name='display_timing' is-struct='yes' visibility='default' is-declaration-only='yes' id='fd7f3d28'/>
+      <class-decl name='drm_panel_funcs' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/drm_panel.h' line='80' column='1' id='3ae2c39f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disable' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unprepare' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_modes' type-id='c3a1efbb' visibility='default' filepath='include/drm/drm_panel.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_timings' type-id='2a614134' visibility='default' filepath='include/drm/drm_panel.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6661a698' const='yes' id='5558489b'/>
+      <pointer-type-def type-id='5558489b' size-in-bits='64' id='0afa6ea3'/>
+      <qualified-type-def type-id='3ae2c39f' const='yes' id='795e6d94'/>
+      <pointer-type-def type-id='795e6d94' size-in-bits='64' id='cda6c21a'/>
+      <pointer-type-def type-id='fd7f3d28' size-in-bits='64' id='a569b9de'/>
+      <pointer-type-def type-id='449a6017' size-in-bits='64' id='c3a1efbb'/>
+      <pointer-type-def type-id='ecbba9ca' size-in-bits='64' id='2a614134'/>
+      <function-decl name='drm_panel_init' mangled-name='drm_panel_init' filepath='drivers/gpu/drm/drm_panel.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_init'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='51' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_drm_find_panel' mangled-name='of_drm_find_panel' filepath='drivers/gpu/drm/drm_panel.c' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_drm_find_panel'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/gpu/drm/drm_panel.c' line='248' column='1'/>
+        <return type-id='c5491077'/>
+      </function-decl>
+      <function-decl name='drm_panel_unprepare' mangled-name='drm_panel_unprepare' filepath='drivers/gpu/drm/drm_panel.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_unprepare'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='165' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_remove' mangled-name='drm_panel_remove' filepath='drivers/gpu/drm/drm_panel.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_remove'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='83' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_panel_prepare' mangled-name='drm_panel_prepare' filepath='drivers/gpu/drm/drm_panel.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_prepare'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='145' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_unregister' mangled-name='drm_panel_notifier_unregister' filepath='drivers/gpu/drm/drm_panel.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_unregister'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='277' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/gpu/drm/drm_panel.c' line='278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_register' mangled-name='drm_panel_notifier_register' filepath='drivers/gpu/drm/drm_panel.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_register'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='270' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/gpu/drm/drm_panel.c' line='271' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_notifier_call_chain' mangled-name='drm_panel_notifier_call_chain' filepath='drivers/gpu/drm/drm_panel.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_notifier_call_chain'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='284' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='drivers/gpu/drm/drm_panel.c' line='285' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='drivers/gpu/drm/drm_panel.c' line='285' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_get_modes' mangled-name='drm_panel_get_modes' filepath='drivers/gpu/drm/drm_panel.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_get_modes'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='222' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_enable' mangled-name='drm_panel_enable' filepath='drivers/gpu/drm/drm_panel.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_enable'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_disable' mangled-name='drm_panel_disable' filepath='drivers/gpu/drm/drm_panel.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_disable'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='203' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_detach' mangled-name='drm_panel_detach' filepath='drivers/gpu/drm/drm_panel.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_detach'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_panel_attach' mangled-name='drm_panel_attach' filepath='drivers/gpu/drm/drm_panel.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_attach'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='106' column='1'/>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_panel.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_panel_add' mangled-name='drm_panel_add' filepath='drivers/gpu/drm/drm_panel.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_panel_add'>
+        <parameter type-id='c5491077' name='panel' filepath='drivers/gpu/drm/drm_panel.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='449a6017'>
+        <parameter type-id='c5491077'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecbba9ca'>
+        <parameter type-id='c5491077'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='a569b9de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_plane.c' language='LANG_C89'>
+      <qualified-type-def type-id='8f92235e' const='yes' id='b9930aae'/>
+      <pointer-type-def type-id='b9930aae' size-in-bits='64' id='a6798dcc'/>
+      <qualified-type-def type-id='9c313c2d' const='yes' id='c3b7ba7d'/>
+      <pointer-type-def type-id='c3b7ba7d' size-in-bits='64' id='713a56f5'/>
+      <function-decl name='drm_plane_cleanup' mangled-name='drm_plane_cleanup' filepath='drivers/gpu/drm/drm_plane.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_plane_cleanup'>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_plane.c' line='355' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_universal_plane_init' mangled-name='drm_universal_plane_init' filepath='drivers/gpu/drm/drm_plane.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_universal_plane_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_plane.c' line='173' column='1'/>
+        <parameter type-id='a6711537' name='plane' filepath='drivers/gpu/drm/drm_plane.c' line='173' column='1'/>
+        <parameter type-id='8f92235e' name='possible_crtcs' filepath='drivers/gpu/drm/drm_plane.c' line='174' column='1'/>
+        <parameter type-id='cfd5d066' name='funcs' filepath='drivers/gpu/drm/drm_plane.c' line='175' column='1'/>
+        <parameter type-id='a6798dcc' name='formats' filepath='drivers/gpu/drm/drm_plane.c' line='176' column='1'/>
+        <parameter type-id='f0981eeb' name='format_count' filepath='drivers/gpu/drm/drm_plane.c' line='176' column='1'/>
+        <parameter type-id='713a56f5' name='format_modifiers' filepath='drivers/gpu/drm/drm_plane.c' line='177' column='1'/>
+        <parameter type-id='5eed3c85' name='type' filepath='drivers/gpu/drm/drm_plane.c' line='178' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_plane.c' line='179' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_prime.c' language='LANG_C89'>
+      <function-decl name='drm_prime_sg_to_page_addr_arrays' mangled-name='drm_prime_sg_to_page_addr_arrays' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_sg_to_page_addr_arrays'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_prime.c' line='970' column='1'/>
+        <parameter type-id='e835b5d8' name='addrs' filepath='drivers/gpu/drm/drm_prime.c' line='971' column='1'/>
+        <parameter type-id='95e97e5e' name='max_entries' filepath='drivers/gpu/drm/drm_prime.c' line='971' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_pages_to_sg'>
+        <parameter type-id='9f93c9da' name='pages' filepath='drivers/gpu/drm/drm_prime.c' line='816' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_pages' filepath='drivers/gpu/drm/drm_prime.c' line='816' column='1'/>
+        <return type-id='4adb0e6a'/>
+      </function-decl>
+      <function-decl name='drm_prime_gem_destroy' mangled-name='drm_prime_gem_destroy' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_prime_gem_destroy'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1'/>
+        <parameter type-id='4adb0e6a' name='sg' filepath='drivers/gpu/drm/drm_prime.c' line='1011' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_mmap' mangled-name='drm_gem_prime_mmap' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_mmap'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/drm_prime.c' line='710' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_import' mangled-name='drm_gem_prime_import' filepath='drivers/gpu/drm/drm_prime.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_import'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='950' column='1'/>
+        <parameter type-id='5e4f599b' name='dma_buf' filepath='drivers/gpu/drm/drm_prime.c' line='951' column='1'/>
+        <return type-id='abd62a96'/>
+      </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='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_handle_to_fd'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='422' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='423' column='1'/>
+        <parameter type-id='8f92235e' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='423' column='1'/>
+        <parameter type-id='8f92235e' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='424' column='1'/>
+        <parameter type-id='7292109c' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='425' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_fd_to_handle'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_prime.c' line='291' column='1'/>
+        <parameter type-id='9e99ecc1' name='file_priv' filepath='drivers/gpu/drm/drm_prime.c' line='292' column='1'/>
+        <parameter type-id='95e97e5e' name='prime_fd' filepath='drivers/gpu/drm/drm_prime.c' line='292' column='1'/>
+        <parameter type-id='90421557' name='handle' filepath='drivers/gpu/drm/drm_prime.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_gem_prime_export' mangled-name='drm_gem_prime_export' filepath='drivers/gpu/drm/drm_prime.c' line='848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_gem_prime_export'>
+        <parameter type-id='abd62a96' name='obj' filepath='drivers/gpu/drm/drm_prime.c' line='848' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/gpu/drm/drm_prime.c' line='849' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_print.c' language='LANG_C89'>
+      <function-decl name='drm_dbg' mangled-name='drm_dbg' filepath='drivers/gpu/drm/drm_print.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dbg'>
+        <parameter type-id='f0981eeb' name='category' filepath='drivers/gpu/drm/drm_print.c' line='227' column='1'/>
+        <parameter type-id='80f4b756' name='format' filepath='drivers/gpu/drm/drm_print.c' line='227' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_err' mangled-name='drm_err' filepath='drivers/gpu/drm/drm_print.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_err'>
+        <parameter type-id='80f4b756' name='format' filepath='drivers/gpu/drm/drm_print.c' line='246' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_dbg' mangled-name='drm_dev_dbg' filepath='drivers/gpu/drm/drm_print.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_dbg'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/gpu/drm/drm_print.c' line='203' column='1'/>
+        <parameter type-id='f0981eeb' name='category' filepath='drivers/gpu/drm/drm_print.c' line='203' column='1'/>
+        <parameter type-id='80f4b756' name='format' filepath='drivers/gpu/drm/drm_print.c' line='204' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_dev_printk' mangled-name='drm_dev_printk' filepath='drivers/gpu/drm/drm_print.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_dev_printk'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/gpu/drm/drm_print.c' line='182' column='1'/>
+        <parameter type-id='80f4b756' name='level' filepath='drivers/gpu/drm/drm_print.c' line='182' column='1'/>
+        <parameter type-id='80f4b756' name='format' filepath='drivers/gpu/drm/drm_print.c' line='183' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_printf' mangled-name='drm_printf' filepath='drivers/gpu/drm/drm_print.c' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_printf'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='172' column='1'/>
+        <parameter type-id='80f4b756' name='f' filepath='drivers/gpu/drm/drm_print.c' line='172' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_puts' mangled-name='drm_puts' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_puts'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='drivers/gpu/drm/drm_print.c' line='158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_puts_seq_file' mangled-name='__drm_puts_seq_file' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_puts_seq_file'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='drivers/gpu/drm/drm_print.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_seq_file' mangled-name='__drm_printfn_seq_file' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_seq_file'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_info' mangled-name='__drm_printfn_info' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_info'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__drm_printfn_debug' mangled-name='__drm_printfn_debug' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__drm_printfn_debug'>
+        <parameter type-id='7ac48c21' name='p' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1'/>
+        <parameter type-id='3b5c2208' name='vaf' filepath='drivers/gpu/drm/drm_print.c' line='144' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_probe_helper.c' language='LANG_C89'>
+      <class-decl name='drm_writeback_connector' size-in-bits='15744' is-struct='yes' visibility='default' filepath='include/drm/drm_writeback.h' line='18' column='1' id='f14fc18d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='f02c18fa' visibility='default' filepath='include/drm/drm_writeback.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14208'>
+          <var-decl name='encoder' type-id='d12f4a1d' visibility='default' filepath='include/drm/drm_writeback.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='pixel_formats_blob_ptr' type-id='c4126d52' visibility='default' filepath='include/drm/drm_writeback.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='job_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='job_queue' type-id='72f469ec' visibility='default' filepath='include/drm/drm_writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='fence_context' type-id='f0981eeb' visibility='default' filepath='include/drm/drm_writeback.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15392'>
+          <var-decl name='fence_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/drm_writeback.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='fence_seqno' type-id='7359adad' visibility='default' filepath='include/drm/drm_writeback.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='timeline_name' type-id='16dc656a' visibility='default' filepath='include/drm/drm_writeback.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='544' id='46fc18d9'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='drm_client_dev' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='65' column='1' id='0ab6a08c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='8898134d' visibility='default' filepath='include/drm/drm_client.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_client.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/drm/drm_client.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='funcs' type-id='67ede465' visibility='default' filepath='include/drm/drm_client.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='file' type-id='9e99ecc1' visibility='default' filepath='include/drm/drm_client.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='modeset_mutex' type-id='925167dc' visibility='default' filepath='include/drm/drm_client.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='modesets' type-id='8106240b' visibility='default' filepath='include/drm/drm_client.h' line='102' 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='24' column='1' id='9840934c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/drm/drm_client.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregister' type-id='18e3d2c7' visibility='default' filepath='include/drm/drm_client.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='restore' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hotplug' type-id='c6e1b58c' visibility='default' filepath='include/drm/drm_client.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='24' is-anonymous='yes' visibility='default' filepath='include/drm/drm_fourcc.h' line='72' column='1' id='5ab3bf5b'>
+        <data-member access='public'>
+          <var-decl name='cpp' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='char_per_block' type-id='930ea9f9' visibility='default' filepath='include/drm/drm_fourcc.h' line='107' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='mode_set_atomic' filepath='include/drm/drm_fb_helper.h' line='41' column='1' id='7e90344c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='LEAVE_ATOMIC_MODE_SET' value='0'/>
+        <enumerator name='ENTER_ATOMIC_MODE_SET' value='1'/>
+      </enum-decl>
+      <class-decl name='drm_client_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/drm_client.h' line='117' column='1' id='2a13094b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='cc1804ea' visibility='default' filepath='include/drm/drm_client.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handle' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pitch' type-id='19c2251e' visibility='default' filepath='include/drm/drm_client.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gem' type-id='abd62a96' visibility='default' filepath='include/drm/drm_client.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/drm/drm_client.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb' type-id='7b332e1c' visibility='default' filepath='include/drm/drm_client.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='drm_fb_helper_funcs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/drm/drm_fb_helper.h' line='77' column='1' id='1a200140'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_probe' type-id='4a5aa6b9' visibility='default' filepath='include/drm/drm_fb_helper.h' line='92' 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='63' column='1' id='edc6f434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fb_width' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fb_height' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='surface_width' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='surface_height' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='surface_bpp' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='surface_depth' type-id='19c2251e' visibility='default' filepath='include/drm/drm_fb_helper.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9840934c' const='yes' id='34401d0d'/>
+      <pointer-type-def type-id='34401d0d' size-in-bits='64' id='67ede465'/>
+      <qualified-type-def type-id='1a200140' const='yes' id='2b48c0bb'/>
+      <pointer-type-def type-id='2b48c0bb' size-in-bits='64' id='b4872443'/>
+      <pointer-type-def type-id='2a13094b' size-in-bits='64' id='b78e1fbb'/>
+      <pointer-type-def type-id='0ab6a08c' size-in-bits='64' id='cc1804ea'/>
+      <pointer-type-def type-id='3a711e5e' size-in-bits='64' id='fc630d30'/>
+      <pointer-type-def type-id='a843bacf' size-in-bits='64' id='a4de2233'/>
+      <pointer-type-def type-id='79256f62' size-in-bits='64' id='0b5f3d7c'/>
+      <pointer-type-def type-id='edc6f434' size-in-bits='64' id='ef68bde2'/>
+      <pointer-type-def type-id='f14fc18d' size-in-bits='64' id='2944961d'/>
+      <pointer-type-def type-id='20638bb4' size-in-bits='64' id='69099556'/>
+      <pointer-type-def type-id='b938ea42' size-in-bits='64' id='ff7f72b4'/>
+      <pointer-type-def type-id='3d84df46' size-in-bits='64' id='8d681b98'/>
+      <pointer-type-def type-id='4e0e413a' size-in-bits='64' id='a3a882dc'/>
+      <pointer-type-def type-id='6ab964d2' size-in-bits='64' id='c6e1b58c'/>
+      <pointer-type-def type-id='32d07fab' size-in-bits='64' id='2e18356f'/>
+      <pointer-type-def type-id='eeda2e3d' size-in-bits='64' id='a8bd8fa1'/>
+      <pointer-type-def type-id='30f77767' size-in-bits='64' id='5ef2f163'/>
+      <pointer-type-def type-id='6081969c' size-in-bits='64' id='18901036'/>
+      <pointer-type-def type-id='b0cde5c7' size-in-bits='64' id='c368c2fb'/>
+      <pointer-type-def type-id='202c5914' size-in-bits='64' id='9c5c88be'/>
+      <pointer-type-def type-id='2b3f252e' size-in-bits='64' id='21e51c00'/>
+      <pointer-type-def type-id='56fa322d' size-in-bits='64' id='4a5aa6b9'/>
+      <pointer-type-def type-id='5a678b43' size-in-bits='64' id='4c74ea47'/>
+      <pointer-type-def type-id='82d08b71' size-in-bits='64' id='a92ff885'/>
+      <pointer-type-def type-id='7f73c08c' size-in-bits='64' id='e003b5ce'/>
+      <pointer-type-def type-id='86bc8898' size-in-bits='64' id='375f8cba'/>
+      <pointer-type-def type-id='765a8acb' size-in-bits='64' id='18e3d2c7'/>
+      <pointer-type-def type-id='28678bf9' size-in-bits='64' id='a9a90075'/>
+      <pointer-type-def type-id='f3dc294f' size-in-bits='64' id='1da45ab3'/>
+      <pointer-type-def type-id='1d2b3133' size-in-bits='64' id='e15f707f'/>
+      <pointer-type-def type-id='fff725a2' size-in-bits='64' id='a6426b1c'/>
+      <pointer-type-def type-id='0a04ae5f' size-in-bits='64' id='0b72aa63'/>
+      <pointer-type-def type-id='eaff4dba' size-in-bits='64' id='b781f274'/>
+      <function-decl name='drm_kms_helper_poll_init' mangled-name='drm_kms_helper_poll_init' filepath='drivers/gpu/drm/drm_probe_helper.c' line='727' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='727' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_enable' mangled-name='drm_kms_helper_poll_enable' filepath='drivers/gpu/drm/drm_probe_helper.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_enable'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='223' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_fini' mangled-name='drm_kms_helper_poll_fini' filepath='drivers/gpu/drm/drm_probe_helper.c' line='740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_fini'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='740' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_kms_helper_poll_disable' mangled-name='drm_kms_helper_poll_disable' filepath='drivers/gpu/drm/drm_probe_helper.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_poll_disable'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='700' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_kms_helper_hotplug_event'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='565' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_probe_single_connector_modes'>
+        <parameter type-id='4db02c58' name='connector' filepath='drivers/gpu/drm/drm_probe_helper.c' line='388' column='1'/>
+        <parameter type-id='8f92235e' name='maxX' filepath='drivers/gpu/drm/drm_probe_helper.c' line='389' column='1'/>
+        <parameter type-id='8f92235e' name='maxY' filepath='drivers/gpu/drm/drm_probe_helper.c' line='389' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_helper_hpd_irq_event'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_probe_helper.c' line='773' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='3a711e5e'>
+        <parameter type-id='74d89ebd'/>
+        <return type-id='b64ad7cb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a843bacf'>
+        <parameter type-id='4db02c58'/>
+        <return type-id='74d89ebd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='79256f62'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='74d89ebd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20638bb4'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='4db02c58'/>
+        <return type-id='f7b0e1b4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b938ea42'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d84df46'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e0e413a'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='745b39e8'/>
+        <return type-id='4fb62cb0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ab964d2'>
+        <parameter type-id='cc1804ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32d07fab'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='e3dd029e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeda2e3d'>
+        <parameter type-id='4db02c58'/>
+        <parameter type-id='d1499e71'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30f77767'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='35078cb9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6081969c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0cde5c7'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='7b332e1c'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7e90344c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='202c5914'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7b332e1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b3f252e'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56fa322d'>
+        <parameter type-id='147b8c0a'/>
+        <parameter type-id='ef68bde2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a678b43'>
+        <parameter type-id='a6711537'/>
+        <parameter type-id='d0835005'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82d08b71'>
+        <parameter type-id='2944961d'/>
+        <parameter type-id='7b4ee155'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f73c08c'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86bc8898'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='745b39e8'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='765a8acb'>
+        <parameter type-id='cc1804ea'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28678bf9'>
+        <parameter type-id='b64ad7cb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3dc294f'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='e3dd029e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d2b3133'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='35078cb9'/>
+        <parameter type-id='249ef586'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fff725a2'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='11e02f83'/>
+        <parameter type-id='11e02f83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a04ae5f'>
+        <parameter type-id='74d89ebd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eaff4dba'>
+        <parameter type-id='2944961d'/>
+        <parameter type-id='7b4ee155'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_property.c' language='LANG_C89'>
+      <class-decl name='drm_prop_enum_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/drm_property.h' line='218' column='1' id='56eae4b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/drm/drm_property.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/drm/drm_property.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='56eae4b3' const='yes' id='50af579e'/>
+      <pointer-type-def type-id='50af579e' size-in-bits='64' id='b807105c'/>
+      <function-decl name='drm_property_create_blob' mangled-name='drm_property_create_blob' filepath='drivers/gpu/drm/drm_property.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_blob'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='561' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/gpu/drm/drm_property.c' line='561' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/gpu/drm/drm_property.c' line='562' column='1'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+      <function-decl name='drm_property_create' mangled-name='drm_property_create' filepath='drivers/gpu/drm/drm_property.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='99' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/gpu/drm/drm_property.c' line='100' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_property.c' line='100' column='1'/>
+        <parameter type-id='95e97e5e' name='num_values' filepath='drivers/gpu/drm/drm_property.c' line='101' column='1'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_lookup_blob' mangled-name='drm_property_lookup_blob' filepath='drivers/gpu/drm/drm_property.c' line='656' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_lookup_blob'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='656' column='1'/>
+        <parameter type-id='8f92235e' name='id' filepath='drivers/gpu/drm/drm_property.c' line='657' column='1'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+      <function-decl name='drm_property_create_range' mangled-name='drm_property_create_range' filepath='drivers/gpu/drm/drm_property.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_range'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='280' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/gpu/drm/drm_property.c' line='281' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_property.c' line='281' column='1'/>
+        <parameter type-id='9c313c2d' name='min' filepath='drivers/gpu/drm/drm_property.c' line='282' column='1'/>
+        <parameter type-id='9c313c2d' name='max' filepath='drivers/gpu/drm/drm_property.c' line='282' column='1'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_create_enum' mangled-name='drm_property_create_enum' filepath='drivers/gpu/drm/drm_property.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_enum'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='165' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/gpu/drm/drm_property.c' line='166' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_property.c' line='166' column='1'/>
+        <parameter type-id='b807105c' name='props' filepath='drivers/gpu/drm/drm_property.c' line='167' column='1'/>
+        <parameter type-id='95e97e5e' name='num_values' filepath='drivers/gpu/drm/drm_property.c' line='168' column='1'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_create_bitmask' mangled-name='drm_property_create_bitmask' filepath='drivers/gpu/drm/drm_property.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_create_bitmask'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_property.c' line='213' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/gpu/drm/drm_property.c' line='214' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/gpu/drm/drm_property.c' line='214' column='1'/>
+        <parameter type-id='b807105c' name='props' filepath='drivers/gpu/drm/drm_property.c' line='215' column='1'/>
+        <parameter type-id='95e97e5e' name='num_props' filepath='drivers/gpu/drm/drm_property.c' line='216' column='1'/>
+        <parameter type-id='9c313c2d' name='supported_bits' filepath='drivers/gpu/drm/drm_property.c' line='217' column='1'/>
+        <return type-id='26ea5d4c'/>
+      </function-decl>
+      <function-decl name='drm_property_blob_put' mangled-name='drm_property_blob_put' filepath='drivers/gpu/drm/drm_property.c' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_blob_put'>
+        <parameter type-id='c4126d52' name='blob' filepath='drivers/gpu/drm/drm_property.c' line='606' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_property_blob_get' mangled-name='drm_property_blob_get' filepath='drivers/gpu/drm/drm_property.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_property_blob_get'>
+        <parameter type-id='c4126d52' name='blob' filepath='drivers/gpu/drm/drm_property.c' line='637' column='1'/>
+        <return type-id='c4126d52'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_rect.c' language='LANG_C89'>
+      <qualified-type-def type-id='4ccdd8a9' const='yes' id='6c09ca40'/>
+      <pointer-type-def type-id='6c09ca40' size-in-bits='64' id='7d69a4de'/>
+      <pointer-type-def type-id='4ccdd8a9' size-in-bits='64' id='c91d6c11'/>
+      <function-decl name='drm_rect_intersect' mangled-name='drm_rect_intersect' filepath='drivers/gpu/drm/drm_rect.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_intersect'>
+        <parameter type-id='c91d6c11' name='r1' filepath='drivers/gpu/drm/drm_rect.c' line='44' column='1'/>
+        <parameter type-id='7d69a4de' name='r2' filepath='drivers/gpu/drm/drm_rect.c' line='44' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_rect_calc_vscale' mangled-name='drm_rect_calc_vscale' filepath='drivers/gpu/drm/drm_rect.c' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_calc_vscale'>
+        <parameter type-id='7d69a4de' name='src' filepath='drivers/gpu/drm/drm_rect.c' line='199' column='1'/>
+        <parameter type-id='7d69a4de' name='dst' filepath='drivers/gpu/drm/drm_rect.c' line='200' column='1'/>
+        <parameter type-id='95e97e5e' name='min_vscale' filepath='drivers/gpu/drm/drm_rect.c' line='201' column='1'/>
+        <parameter type-id='95e97e5e' name='max_vscale' filepath='drivers/gpu/drm/drm_rect.c' line='201' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_rect_calc_hscale' mangled-name='drm_rect_calc_hscale' filepath='drivers/gpu/drm/drm_rect.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_rect_calc_hscale'>
+        <parameter type-id='7d69a4de' name='src' filepath='drivers/gpu/drm/drm_rect.c' line='164' column='1'/>
+        <parameter type-id='7d69a4de' name='dst' filepath='drivers/gpu/drm/drm_rect.c' line='165' column='1'/>
+        <parameter type-id='95e97e5e' name='min_hscale' filepath='drivers/gpu/drm/drm_rect.c' line='166' column='1'/>
+        <parameter type-id='95e97e5e' name='max_hscale' filepath='drivers/gpu/drm/drm_rect.c' line='166' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_sysfs.c' language='LANG_C89'>
+      <function-decl name='drm_sysfs_hotplug_event' mangled-name='drm_sysfs_hotplug_event' filepath='drivers/gpu/drm/drm_sysfs.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_sysfs_hotplug_event'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='338' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_class_device_unregister' mangled-name='drm_class_device_unregister' filepath='drivers/gpu/drm/drm_sysfs.c' line='445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='445' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_class_device_register' mangled-name='drm_class_device_register' filepath='drivers/gpu/drm/drm_sysfs.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_class_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/gpu/drm/drm_sysfs.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_vblank.c' language='LANG_C89'>
+      <function-decl name='drm_vblank_init' mangled-name='drm_vblank_init' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vblank_init'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1'/>
+        <parameter type-id='f0981eeb' name='num_crtcs' filepath='drivers/gpu/drm/drm_vblank.c' line='444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_wait_one_vblank' mangled-name='drm_wait_one_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_wait_one_vblank'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='1082' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_get' mangled-name='drm_crtc_vblank_get' filepath='drivers/gpu/drm/drm_vblank.c' line='1030' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_get'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1030' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_put' mangled-name='drm_crtc_vblank_put' filepath='drivers/gpu/drm/drm_vblank.c' line='1065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_put'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1065' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_send_vblank_event' mangled-name='drm_crtc_send_vblank_event' filepath='drivers/gpu/drm/drm_vblank.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_send_vblank_event'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='921' column='1'/>
+        <parameter type-id='6301fad2' name='e' filepath='drivers/gpu/drm/drm_vblank.c' line='922' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_handle_vblank' mangled-name='drm_handle_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_handle_vblank'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='1747' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_crtc_wait_one_vblank' mangled-name='drm_crtc_wait_one_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_wait_one_vblank'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1115' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_reset' mangled-name='drm_crtc_vblank_reset' filepath='drivers/gpu/drm/drm_vblank.c' line='1202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_reset'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1202' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_on' mangled-name='drm_crtc_vblank_on' filepath='drivers/gpu/drm/drm_vblank.c' line='1265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_on'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1265' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_vblank_off' mangled-name='drm_crtc_vblank_off' filepath='drivers/gpu/drm/drm_vblank.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_vblank_off'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_set_max_vblank_count' mangled-name='drm_crtc_set_max_vblank_count' filepath='drivers/gpu/drm/drm_vblank.c' line='1241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_set_max_vblank_count'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1241' column='1'/>
+        <parameter type-id='19c2251e' name='max_vblank_count' filepath='drivers/gpu/drm/drm_vblank.c' line='1242' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_crtc_handle_vblank' mangled-name='drm_crtc_handle_vblank' filepath='drivers/gpu/drm/drm_vblank.c' line='1812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_handle_vblank'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='1812' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drm_crtc_arm_vblank_event' mangled-name='drm_crtc_arm_vblank_event' filepath='drivers/gpu/drm/drm_vblank.c' line='896' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_crtc_arm_vblank_event'>
+        <parameter type-id='b64ad7cb' name='crtc' filepath='drivers/gpu/drm/drm_vblank.c' line='896' column='1'/>
+        <parameter type-id='6301fad2' name='e' filepath='drivers/gpu/drm/drm_vblank.c' line='897' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_calc_vbltimestamp_from_scanoutpos' mangled-name='drm_calc_vbltimestamp_from_scanoutpos' filepath='drivers/gpu/drm/drm_vblank.c' line='596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_calc_vbltimestamp_from_scanoutpos'>
+        <parameter type-id='8898134d' name='dev' filepath='drivers/gpu/drm/drm_vblank.c' line='596' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/gpu/drm/drm_vblank.c' line='597' column='1'/>
+        <parameter type-id='7292109c' name='max_error' filepath='drivers/gpu/drm/drm_vblank.c' line='598' column='1'/>
+        <parameter type-id='44372936' name='vblank_time' filepath='drivers/gpu/drm/drm_vblank.c' line='599' column='1'/>
+        <parameter type-id='b50a4934' name='in_vblank_irq' filepath='drivers/gpu/drm/drm_vblank.c' line='600' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/drm_vma_manager.c' language='LANG_C89'>
+      <pointer-type-def type-id='743d7e52' size-in-bits='64' id='e05b33b0'/>
+      <function-decl name='drm_vma_offset_remove' mangled-name='drm_vma_offset_remove' filepath='drivers/gpu/drm/drm_vma_manager.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_remove'>
+        <parameter type-id='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='229' column='1'/>
+        <parameter type-id='e05b33b0' name='node' filepath='drivers/gpu/drm/drm_vma_manager.c' line='230' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='drm_vma_offset_add' mangled-name='drm_vma_offset_add' filepath='drivers/gpu/drm/drm_vma_manager.c' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_add'>
+        <parameter type-id='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='201' column='1'/>
+        <parameter type-id='e05b33b0' name='node' filepath='drivers/gpu/drm/drm_vma_manager.c' line='202' column='1'/>
+        <parameter type-id='7359adad' name='pages' filepath='drivers/gpu/drm/drm_vma_manager.c' line='202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='85' column='1'/>
+        <parameter type-id='7359adad' name='page_offset' filepath='drivers/gpu/drm/drm_vma_manager.c' line='86' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='drivers/gpu/drm/drm_vma_manager.c' line='86' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='104' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drm_vma_offset_lookup_locked'>
+        <parameter type-id='0c6d12d5' name='mgr' filepath='drivers/gpu/drm/drm_vma_manager.c' line='140' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='drivers/gpu/drm/drm_vma_manager.c' line='141' column='1'/>
+        <parameter type-id='7359adad' name='pages' filepath='drivers/gpu/drm/drm_vma_manager.c' line='142' column='1'/>
+        <return type-id='e05b33b0'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_bo.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3b3611a4' size-in-bits='512' id='e70a051a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ttm_lru_bulk_move' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='523' column='1' id='4f61d355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tt' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vram' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='swap' type-id='e70a051a' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_lru_bulk_move_pos' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='509' column='1' id='3b3611a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4f61d355' size-in-bits='64' id='92bac3a5'/>
+      <function-decl name='ttm_bo_init_mm' mangled-name='ttm_bo_init_mm' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_init_mm'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1588' column='1'/>
+        <parameter type-id='7359adad' name='p_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1589' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_wait' mangled-name='ttm_bo_wait' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_wait'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1817' column='1'/>
+        <parameter type-id='b50a4934' name='interruptible' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1818' column='1'/>
+        <parameter type-id='b50a4934' name='no_wait' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1818' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_validate' mangled-name='ttm_bo_validate' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_validate'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1254' column='1'/>
+        <parameter type-id='1d36520e' name='placement' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1255' column='1'/>
+        <parameter type-id='7c3e509a' name='ctx' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1256' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_put' mangled-name='ttm_bo_put' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_put'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_move_to_lru_tail' mangled-name='ttm_bo_move_to_lru_tail' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_move_to_lru_tail'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='245' column='1'/>
+        <parameter type-id='92bac3a5' name='bulk' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_init' mangled-name='ttm_bo_init' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_init'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1404' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1405' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1406' column='1'/>
+        <parameter type-id='db1f3944' name='type' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1407' column='1'/>
+        <parameter type-id='1d36520e' name='placement' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1408' column='1'/>
+        <parameter type-id='8f92235e' name='page_alignment' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1409' column='1'/>
+        <parameter type-id='b50a4934' name='interruptible' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1410' column='1'/>
+        <parameter type-id='b59d7dce' name='acc_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1411' column='1'/>
+        <parameter type-id='4adb0e6a' name='sg' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1412' column='1'/>
+        <parameter type-id='340cea9c' name='resv' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1413' column='1'/>
+        <parameter type-id='7c7fffd6' name='destroy' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_eviction_valuable' mangled-name='ttm_bo_eviction_valuable' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_eviction_valuable'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='758' column='1'/>
+        <parameter type-id='2e6aa127' name='place' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='759' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ttm_bo_dma_acc_size' mangled-name='ttm_bo_dma_acc_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_dma_acc_size'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1446' column='1'/>
+        <parameter type-id='7359adad' name='bo_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1447' column='1'/>
+        <parameter type-id='f0981eeb' name='struct_size' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1448' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='ttm_bo_device_release' mangled-name='ttm_bo_device_release' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_device_release'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1688' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_device_init' mangled-name='ttm_bo_device_init' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_device_init'>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1732' column='1'/>
+        <parameter type-id='0975b661' name='driver' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1733' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1734' column='1'/>
+        <parameter type-id='b50a4934' name='need_dma32' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='1735' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_bo_del_sub_from_lru' mangled-name='ttm_bo_del_sub_from_lru' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_del_sub_from_lru'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='227' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_add_to_lru' mangled-name='ttm_bo_add_to_lru' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_add_to_lru'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b421eeb7' size-in-bits='64' id='2e6aa127'/>
+      <enum-decl name='ttm_bo_type' filepath='include/drm/ttm/ttm_bo_api.h' line='120' column='1' id='db1f3944'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_type_device' value='0'/>
+        <enumerator name='ttm_bo_type_kernel' value='1'/>
+        <enumerator name='ttm_bo_type_sg' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='0448ebb1' size-in-bits='64' id='723d4d79'/>
+      <pointer-type-def type-id='0abbafb9' size-in-bits='64' id='0975b661'/>
+      <pointer-type-def type-id='46b5bb33' size-in-bits='64' id='9d57e433'/>
+      <pointer-type-def type-id='98f70d4c' size-in-bits='64' id='7c3e509a'/>
+      <pointer-type-def type-id='523f50f8' size-in-bits='64' id='1d36520e'/>
+      <pointer-type-def type-id='4a1729fc' size-in-bits='64' id='7c7fffd6'/>
+      <class-decl name='ttm_bo_device' size-in-bits='15296' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='464' column='1' id='0448ebb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='0975b661' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='man' type-id='9ca36087' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='vma_manager' type-id='1b04dce5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='dev_mapping' type-id='f57039f0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='wq' type-id='5ad6e0ef' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='need_dma32' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='no_retry' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='498' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_driver' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='223' column='1' id='0abbafb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm_tt_create' type-id='450f3d4f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttm_tt_populate' type-id='d2c32f54' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttm_tt_unpopulate' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invalidate_caches' type-id='2ba41982' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init_mem_type' type-id='b63cf0a8' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='eviction_valuable' type-id='67ac9797' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_flags' type-id='c8e0f54d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='move' type-id='152cf9e7' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='verify_access' type-id='3630f867' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='move_notify' type-id='e8cfc5c5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fault_reserve_notify' type-id='9303745f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='swap_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_mem_reserve' type-id='08ab1f27' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='io_mem_free' type-id='2f557b66' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io_mem_pfn' type-id='7758a804' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='access_memory' type-id='cd386183' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='del_from_lru_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='release_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='402' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_buffer_object' size-in-bits='4928' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='172' column='1' id='46b5bb33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c0' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='type' type-id='db1f3944' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='destroy' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='acc_size' type-id='b59d7dce' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='list_kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='mem' type-id='9b9a6957' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='persistent_swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ttm' type-id='c21baddd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='evicted' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='cpu_writers' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='swap' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='moving' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='priority' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='wu_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_operation_ctx' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='273' column='1' id='98f70d4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_wait_gpu' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytes_moved' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_placement' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='101' column='1' id='523f50f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_busy_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3f4ad3b4' const='yes' id='b421eeb7'/>
+      <class-decl name='ttm_mem_reg' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='95' column='1' id='9b9a6957'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_node' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_alignment' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='mem_type' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='placement' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus' type-id='e93aa2cd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_place' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='85' column='1' id='3f4ad3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8bc09183' size-in-bits='64' id='08ab1f27'/>
+      <pointer-type-def type-id='0120f518' size-in-bits='64' id='2ba41982'/>
+      <pointer-type-def type-id='4f2315a6' size-in-bits='64' id='b63cf0a8'/>
+      <pointer-type-def type-id='4b442d83' size-in-bits='64' id='9303745f'/>
+      <pointer-type-def type-id='d2389b23' size-in-bits='64' id='3630f867'/>
+      <pointer-type-def type-id='16cbb69b' size-in-bits='64' id='152cf9e7'/>
+      <pointer-type-def type-id='c66ae1d7' size-in-bits='64' id='cd386183'/>
+      <pointer-type-def type-id='531d31a2' size-in-bits='64' id='d2c32f54'/>
+      <pointer-type-def type-id='92115120' size-in-bits='64' id='567f9176'/>
+      <array-type-def dimensions='1' type-id='992de32b' size-in-bits='11776' id='9ca36087'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <pointer-type-def type-id='57584f2d' size-in-bits='64' id='c21baddd'/>
+      <pointer-type-def type-id='b8713c6b' size-in-bits='64' id='450f3d4f'/>
+      <pointer-type-def type-id='1de2f9c3' size-in-bits='64' id='67ac9797'/>
+      <pointer-type-def type-id='77d04d5a' size-in-bits='64' id='7758a804'/>
+      <pointer-type-def type-id='e6848ac4' size-in-bits='64' id='2f557b66'/>
+      <pointer-type-def type-id='403b94d1' size-in-bits='64' id='c8e0f54d'/>
+      <pointer-type-def type-id='622dc421' size-in-bits='64' id='e8cfc5c5'/>
+      <pointer-type-def type-id='419979fa' size-in-bits='64' id='ec1424fc'/>
+      <class-decl name='ttm_bo_global' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='419' column='1' id='92115120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_glob' type-id='328b60d6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dummy_read_page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bo_count' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bus_placement' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='70' column='1' id='e93aa2cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='is_iomem' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='io_reserved_vm' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reserved_count' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='170' column='1' id='992de32b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='use_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpu_offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='available_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='default_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='0b05c1b5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_reserve_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='use_io_reserve_lru' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='io_reserve_fastpath' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='move' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_tt' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='105' column='1' id='57584f2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='aab7fd14' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caching_state' type-id='06293a2b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='state' type-id='08f5ca1d' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b73c5cbd' size-in-bits='64' id='0b05c1b5'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_tt.h' line='114' column='1' id='08f5ca1d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_bound' value='0'/>
+        <enumerator name='tt_unbound' value='1'/>
+        <enumerator name='tt_unpopulated' value='2'/>
+      </enum-decl>
+      <enum-decl name='ttm_caching_state' filepath='include/drm/ttm/ttm_tt.h' line='45' column='1' id='06293a2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_uncached' value='0'/>
+        <enumerator name='tt_wc' value='1'/>
+        <enumerator name='tt_cached' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='5b7e0fbe' size-in-bits='64' id='aab7fd14'/>
+      <pointer-type-def type-id='a5c68aa0' size-in-bits='64' id='328b60d6'/>
+      <class-decl name='ttm_backend_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='51' column='1' id='5b7e0fbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='7e38d909' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='1b1e5363' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_global' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='66' column='1' id='a5c68aa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bo_glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='swap_queue' type-id='242e3d19' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lower_mem_limit' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='zones' type-id='34da8f73' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_zones' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='zone_kernel' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='zone_dma32' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6ea0ba9a' const='yes' id='b73c5cbd'/>
+      <class-decl name='ttm_mem_type_manager_func' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='54' column='1' id='6ea0ba9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='41c90967' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='takedown' type-id='68c938a9' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_node' type-id='328b0a2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_node' type-id='dd5560fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debug' type-id='2c38adba' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3e65a527' size-in-bits='64' id='1b1e5363'/>
+      <pointer-type-def type-id='06991f7d' size-in-bits='64' id='7e38d909'/>
+      <pointer-type-def type-id='0c6d1911' size-in-bits='64' id='9c074ad9'/>
+      <array-type-def dimensions='1' type-id='9c074ad9' size-in-bits='128' id='34da8f73'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ttm_mem_zone' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c6d1911'/>
+      <pointer-type-def type-id='34ff06bd' size-in-bits='64' id='68c938a9'/>
+      <pointer-type-def type-id='d8d0a883' size-in-bits='64' id='328b0a2f'/>
+      <pointer-type-def type-id='06bec4db' size-in-bits='64' id='41c90967'/>
+      <pointer-type-def type-id='589a9770' size-in-bits='64' id='2c38adba'/>
+      <pointer-type-def type-id='94cecf4a' size-in-bits='64' id='dd5560fc'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_manager.c' language='LANG_C89'>
+      <var-decl name='ttm_bo_manager_func' type-id='b73c5cbd' mangled-name='ttm_bo_manager_func' visibility='default' filepath='drivers/gpu/drm/ttm/ttm_bo_manager.c' line='149' column='1' elf-symbol-id='ttm_bo_manager_func'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_util.c' language='LANG_C89'>
+      <class-decl name='ttm_bo_kmap_obj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='250' column='1' id='6f724070'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='virtual' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bo_kmap_type' type-id='08f5ca1e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bo' type-id='9d57e433' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_bo_api.h' line='253' column='1' id='08f5ca1e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_map_iomap' value='129'/>
+        <enumerator name='ttm_bo_map_vmap' value='2'/>
+        <enumerator name='ttm_bo_map_kmap' value='3'/>
+        <enumerator name='ttm_bo_map_premapped' value='132'/>
+      </enum-decl>
+      <pointer-type-def type-id='6f724070' size-in-bits='64' id='cc6dfde6'/>
+      <function-decl name='ttm_bo_kunmap' mangled-name='ttm_bo_kunmap' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_kunmap'>
+        <parameter type-id='cc6dfde6' name='map' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='650' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_bo_kmap' mangled-name='ttm_bo_kmap' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_kmap'>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='619' column='1'/>
+        <parameter type-id='7359adad' name='start_page' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='620' column='1'/>
+        <parameter type-id='7359adad' name='num_pages' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='620' column='1'/>
+        <parameter type-id='cc6dfde6' name='map' filepath='drivers/gpu/drm/ttm/ttm_bo_util.c' line='621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_bo_vm.c' language='LANG_C89'>
+      <function-decl name='ttm_bo_mmap' mangled-name='ttm_bo_mmap' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_bo_mmap'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='435' column='1'/>
+        <parameter type-id='723d4d79' name='bdev' filepath='drivers/gpu/drm/ttm/ttm_bo_vm.c' line='436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_execbuf_util.c' language='LANG_C89'>
+      <function-decl name='ttm_eu_reserve_buffers' mangled-name='ttm_eu_reserve_buffers' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_reserve_buffers'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='95' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='96' column='1'/>
+        <parameter type-id='b50a4934' name='intr' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='96' column='1'/>
+        <parameter type-id='e84b031a' name='dups' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='97' column='1'/>
+        <parameter type-id='b50a4934' name='del_lru' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_eu_fence_buffer_objects' mangled-name='ttm_eu_fence_buffer_objects' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_fence_buffer_objects'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='185' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='186' column='1'/>
+        <parameter type-id='28271da3' name='fence' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='187' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ttm_eu_backoff_reservation' mangled-name='ttm_eu_backoff_reservation' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_eu_backoff_reservation'>
+        <parameter type-id='c1d02a64' name='ticket' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='56' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/gpu/drm/ttm/ttm_execbuf_util.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/drm/ttm/ttm_tt.c' language='LANG_C89'>
+      <class-decl name='ttm_mem_zone' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c6d1911'/>
+      <array-type-def dimensions='1' type-id='992de32b' size-in-bits='11776' id='9ca36087'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9c074ad9' size-in-bits='128' id='34da8f73'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ttm_tt' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='105' column='1' id='57584f2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='aab7fd14' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caching_state' type-id='06293a2b' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='state' type-id='08f5ca1d' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_device' size-in-bits='15296' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='464' column='1' id='0448ebb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='0975b661' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='man' type-id='9ca36087' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='vma_manager' type-id='1b04dce5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='dev_mapping' type-id='f57039f0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='wq' type-id='5ad6e0ef' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='need_dma32' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15240'>
+          <var-decl name='no_retry' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='498' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_global' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='419' column='1' id='92115120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_glob' type-id='328b60d6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dummy_read_page' type-id='02f11ed4' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='swap_lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bo_count' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='443' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_global' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='66' column='1' id='a5c68aa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bo_glob' type-id='567f9176' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='swap_queue' type-id='242e3d19' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='lower_mem_limit' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='zones' type-id='34da8f73' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_zones' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='zone_kernel' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='zone_dma32' type-id='9c074ad9' visibility='default' filepath='include/drm/ttm/ttm_memory.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bo_driver' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='223' column='1' id='0abbafb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm_tt_create' type-id='450f3d4f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttm_tt_populate' type-id='d2c32f54' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttm_tt_unpopulate' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invalidate_caches' type-id='2ba41982' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='init_mem_type' type-id='b63cf0a8' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='eviction_valuable' type-id='67ac9797' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_flags' type-id='c8e0f54d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='move' type-id='152cf9e7' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='verify_access' type-id='3630f867' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='move_notify' type-id='e8cfc5c5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fault_reserve_notify' type-id='9303745f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='swap_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_mem_reserve' type-id='08ab1f27' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='io_mem_free' type-id='2f557b66' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io_mem_pfn' type-id='7758a804' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='access_memory' type-id='cd386183' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='del_from_lru_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='release_notify' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='402' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_buffer_object' size-in-bits='4928' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='172' column='1' id='46b5bb33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='3bc524c0' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='type' type-id='db1f3944' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='destroy' type-id='7c7fffd6' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='acc_size' type-id='b59d7dce' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='list_kref' type-id='400fb07b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='mem' type-id='9b9a6957' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='persistent_swap_storage' type-id='77e79a4b' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='ttm' type-id='c21baddd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='evicted' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='cpu_writers' type-id='49178f86' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ddestroy' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='swap' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='moving' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='priority' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sg' type-id='4adb0e6a' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='wu_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ttm_bo_type' filepath='include/drm/ttm/ttm_bo_api.h' line='120' column='1' id='db1f3944'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ttm_bo_type_device' value='0'/>
+        <enumerator name='ttm_bo_type_kernel' value='1'/>
+        <enumerator name='ttm_bo_type_sg' value='2'/>
+      </enum-decl>
+      <class-decl name='ttm_mem_reg' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='95' column='1' id='9b9a6957'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mm_node' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_pages' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_alignment' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='mem_type' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='placement' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus' type-id='e93aa2cd' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_bus_placement' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='70' column='1' id='e93aa2cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='is_iomem' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='io_reserved_vm' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reserved_count' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_operation_ctx' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='273' column='1' id='98f70d4c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interruptible' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_wait_gpu' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resv' type-id='340cea9c' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytes_moved' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_api.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='170' column='1' id='992de32b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdev' type-id='723d4d79' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='use_type' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpu_offset' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='9c313c2d' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='available_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='default_caching' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='0b05c1b5' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_reserve_mutex' type-id='925167dc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='use_io_reserve_lru' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='io_reserve_fastpath' type-id='b50a4934' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_reserve_lru' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lru' type-id='a8e1fb22' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='move' type-id='28271da3' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_mem_type_manager_func' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='54' column='1' id='6ea0ba9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='41c90967' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='takedown' type-id='68c938a9' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_node' type-id='328b0a2f' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_node' type-id='dd5560fc' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debug' type-id='2c38adba' visibility='default' filepath='include/drm/ttm/ttm_bo_driver.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_place' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='85' column='1' id='3f4ad3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lpfn' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='8f92235e' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_placement' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='101' column='1' id='523f50f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_busy_placement' type-id='f0981eeb' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_placement' type-id='2e6aa127' visibility='default' filepath='include/drm/ttm/ttm_placement.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ttm_backend_func' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='51' column='1' id='5b7e0fbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='7e38d909' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='1b1e5363' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy' type-id='ec1424fc' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ttm_caching_state' filepath='include/drm/ttm/ttm_tt.h' line='45' column='1' id='06293a2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_uncached' value='0'/>
+        <enumerator name='tt_wc' value='1'/>
+        <enumerator name='tt_cached' value='2'/>
+      </enum-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/drm/ttm/ttm_tt.h' line='114' column='1' id='08f5ca1d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='tt_bound' value='0'/>
+        <enumerator name='tt_unbound' value='1'/>
+        <enumerator name='tt_unpopulated' value='2'/>
+      </enum-decl>
+      <class-decl name='ttm_dma_tt' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='132' column='1' id='a5c79252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttm' type-id='57584f2d' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dma_address' type-id='e835b5d8' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pages_list' type-id='72f469ec' visibility='default' filepath='include/drm/ttm/ttm_tt.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6ea0ba9a' const='yes' id='b73c5cbd'/>
+      <pointer-type-def type-id='b73c5cbd' size-in-bits='64' id='0b05c1b5'/>
+      <qualified-type-def type-id='3f4ad3b4' const='yes' id='b421eeb7'/>
+      <pointer-type-def type-id='b421eeb7' size-in-bits='64' id='2e6aa127'/>
+      <pointer-type-def type-id='8bc09183' size-in-bits='64' id='08ab1f27'/>
+      <pointer-type-def type-id='0120f518' size-in-bits='64' id='2ba41982'/>
+      <pointer-type-def type-id='4f2315a6' size-in-bits='64' id='b63cf0a8'/>
+      <pointer-type-def type-id='4b442d83' size-in-bits='64' id='9303745f'/>
+      <pointer-type-def type-id='d2389b23' size-in-bits='64' id='3630f867'/>
+      <pointer-type-def type-id='16cbb69b' size-in-bits='64' id='152cf9e7'/>
+      <pointer-type-def type-id='c66ae1d7' size-in-bits='64' id='cd386183'/>
+      <pointer-type-def type-id='34ff06bd' size-in-bits='64' id='68c938a9'/>
+      <pointer-type-def type-id='d8d0a883' size-in-bits='64' id='328b0a2f'/>
+      <pointer-type-def type-id='06bec4db' size-in-bits='64' id='41c90967'/>
+      <pointer-type-def type-id='3e65a527' size-in-bits='64' id='1b1e5363'/>
+      <pointer-type-def type-id='06991f7d' size-in-bits='64' id='7e38d909'/>
+      <pointer-type-def type-id='531d31a2' size-in-bits='64' id='d2c32f54'/>
+      <pointer-type-def type-id='5b7e0fbe' size-in-bits='64' id='aab7fd14'/>
+      <pointer-type-def type-id='0448ebb1' size-in-bits='64' id='723d4d79'/>
+      <pointer-type-def type-id='0abbafb9' size-in-bits='64' id='0975b661'/>
+      <pointer-type-def type-id='92115120' size-in-bits='64' id='567f9176'/>
+      <pointer-type-def type-id='46b5bb33' size-in-bits='64' id='9d57e433'/>
+      <pointer-type-def type-id='a5c79252' size-in-bits='64' id='6621f500'/>
+      <pointer-type-def type-id='a5c68aa0' size-in-bits='64' id='328b60d6'/>
+      <pointer-type-def type-id='9b9a6957' size-in-bits='64' id='0c498ebf'/>
+      <pointer-type-def type-id='992de32b' size-in-bits='64' id='8120587b'/>
+      <pointer-type-def type-id='0c6d1911' size-in-bits='64' id='9c074ad9'/>
+      <pointer-type-def type-id='98f70d4c' size-in-bits='64' id='7c3e509a'/>
+      <pointer-type-def type-id='523f50f8' size-in-bits='64' id='1d36520e'/>
+      <pointer-type-def type-id='57584f2d' size-in-bits='64' id='c21baddd'/>
+      <pointer-type-def type-id='b8713c6b' size-in-bits='64' id='450f3d4f'/>
+      <pointer-type-def type-id='1de2f9c3' size-in-bits='64' id='67ac9797'/>
+      <pointer-type-def type-id='77d04d5a' size-in-bits='64' id='7758a804'/>
+      <pointer-type-def type-id='e6848ac4' size-in-bits='64' id='2f557b66'/>
+      <pointer-type-def type-id='4a1729fc' size-in-bits='64' id='7c7fffd6'/>
+      <pointer-type-def type-id='403b94d1' size-in-bits='64' id='c8e0f54d'/>
+      <pointer-type-def type-id='622dc421' size-in-bits='64' id='e8cfc5c5'/>
+      <pointer-type-def type-id='589a9770' size-in-bits='64' id='2c38adba'/>
+      <pointer-type-def type-id='94cecf4a' size-in-bits='64' id='dd5560fc'/>
+      <pointer-type-def type-id='419979fa' size-in-bits='64' id='ec1424fc'/>
+      <function-decl name='ttm_tt_init' mangled-name='ttm_tt_init' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_tt_init'>
+        <parameter type-id='c21baddd' name='ttm' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='238' column='1'/>
+        <parameter type-id='8f92235e' name='page_flags' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_dma_tt_init' mangled-name='ttm_dma_tt_init' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_dma_tt_init'>
+        <parameter type-id='6621f500' name='ttm_dma' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1'/>
+        <parameter type-id='9d57e433' name='bo' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='258' column='1'/>
+        <parameter type-id='8f92235e' name='page_flags' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='259' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ttm_dma_tt_fini' mangled-name='ttm_dma_tt_fini' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ttm_dma_tt_fini'>
+        <parameter type-id='6621f500' name='ttm_dma' filepath='drivers/gpu/drm/ttm/ttm_tt.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8bc09183'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0120f518'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f2315a6'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='8120587b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b442d83'>
+        <parameter type-id='9d57e433'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2389b23'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16cbb69b'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='7c3e509a'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c66ae1d7'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34ff06bd'>
+        <parameter type-id='8120587b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8d0a883'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='2e6aa127'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06bec4db'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e65a527'>
+        <parameter type-id='c21baddd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06991f7d'>
+        <parameter type-id='c21baddd'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='531d31a2'>
+        <parameter type-id='c21baddd'/>
+        <parameter type-id='7c3e509a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8713c6b'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='8f92235e'/>
+        <return type-id='c21baddd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1de2f9c3'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='2e6aa127'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77d04d5a'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6848ac4'>
+        <parameter type-id='723d4d79'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a1729fc'>
+        <parameter type-id='9d57e433'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='403b94d1'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='1d36520e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='622dc421'>
+        <parameter type-id='9d57e433'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='589a9770'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='7ac48c21'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='94cecf4a'>
+        <parameter type-id='8120587b'/>
+        <parameter type-id='0c498ebf'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='419979fa'>
+        <parameter type-id='c21baddd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/gpu/trace/trace_gpu_mem.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_gpu_mem_total' type-id='4ca0c298' mangled-name='__tracepoint_gpu_mem_total' visibility='default' filepath='include/trace/events/gpu_mem.h' line='30' column='1' elf-symbol-id='__tracepoint_gpu_mem_total'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/hwspinlock/hwspinlock_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='38db93a7' size-in-bits='infinite' id='e84e7d83'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='hwspinlock_device' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='54' column='1' id='8712a502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='9138a099' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base_id' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_locks' type-id='95e97e5e' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='e84e7d83' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hwspinlock_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='28' column='1' id='b74ac0d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trylock' type-id='18277869' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unlock' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='relax' type-id='35411736' visibility='default' filepath='drivers/hwspinlock/hwspinlock_internal.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b74ac0d4' const='yes' id='822de089'/>
+      <pointer-type-def type-id='822de089' size-in-bits='64' id='9138a099'/>
+      <pointer-type-def type-id='8712a502' size-in-bits='64' id='b8cd8f00'/>
+      <pointer-type-def type-id='2fedb035' size-in-bits='64' id='18277869'/>
+      <pointer-type-def type-id='3f7e2e74' size-in-bits='64' id='35411736'/>
+      <function-decl name='hwspin_lock_free' mangled-name='hwspin_lock_free' filepath='drivers/hwspinlock/hwspinlock_core.c' line='798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_free'>
+        <parameter type-id='0cb0b26f' name='hwlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_request_specific' mangled-name='hwspin_lock_request_specific' filepath='drivers/hwspinlock/hwspinlock_core.c' line='750' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_request_specific'>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='750' column='1'/>
+        <return type-id='0cb0b26f'/>
+      </function-decl>
+      <function-decl name='__hwspin_unlock' mangled-name='__hwspin_unlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hwspin_unlock'>
+        <parameter type-id='0cb0b26f' name='hwlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/hwspinlock/hwspinlock_core.c' line='265' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_hwspin_lock_get_id' mangled-name='of_hwspin_lock_get_id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_hwspin_lock_get_id'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/hwspinlock/hwspinlock_core.c' line='339' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/hwspinlock/hwspinlock_core.c' line='339' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_hwspin_lock_get_id_byname' mangled-name='of_hwspin_lock_get_id_byname' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_hwspin_lock_get_id_byname'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/hwspinlock/hwspinlock_core.c' line='406' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_unregister' mangled-name='hwspin_lock_unregister' filepath='drivers/hwspinlock/hwspinlock_core.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_unregister'>
+        <parameter type-id='b8cd8f00' name='bank' filepath='drivers/hwspinlock/hwspinlock_core.c' line='534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hwspin_lock_register' mangled-name='hwspin_lock_register' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hwspin_lock_register'>
+        <parameter type-id='b8cd8f00' name='bank' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/hwspinlock/hwspinlock_core.c' line='486' column='1'/>
+        <parameter type-id='9138a099' name='ops' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <parameter type-id='95e97e5e' name='base_id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <parameter type-id='95e97e5e' name='num_locks' filepath='drivers/hwspinlock/hwspinlock_core.c' line='487' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_hwspin_lock_request_specific' mangled-name='devm_hwspin_lock_request_specific' filepath='drivers/hwspinlock/hwspinlock_core.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_hwspin_lock_request_specific'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/hwspinlock/hwspinlock_core.c' line='931' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='drivers/hwspinlock/hwspinlock_core.c' line='932' column='1'/>
+        <return type-id='0cb0b26f'/>
+      </function-decl>
+      <function-decl name='__hwspin_lock_timeout' mangled-name='__hwspin_lock_timeout' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hwspin_lock_timeout'>
+        <parameter type-id='0cb0b26f' name='hwlock' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1'/>
+        <parameter type-id='f0981eeb' name='to' filepath='drivers/hwspinlock/hwspinlock_core.c' line='206' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/hwspinlock/hwspinlock_core.c' line='207' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='drivers/hwspinlock/hwspinlock_core.c' line='207' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2fedb035'>
+        <parameter type-id='0cb0b26f' name='hwlock'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f7e2e74'>
+        <parameter type-id='0cb0b26f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/i2c/i2c-core-base.c' language='LANG_C89'>
+      <class-decl name='i2c_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='253' column='1' id='66237bd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='37ec0ebd' visibility='default' filepath='include/linux/i2c.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='e6e946ad' visibility='default' filepath='include/linux/i2c.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='probe_new' type-id='e6e946ad' visibility='default' filepath='include/linux/i2c.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shutdown' type-id='d839e3f6' visibility='default' filepath='include/linux/i2c.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alert' type-id='e9f334cb' visibility='default' filepath='include/linux/i2c.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='command' type-id='bbfd7f03' visibility='default' filepath='include/linux/i2c.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/i2c.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='id_table' type-id='49e46a4d' visibility='default' filepath='include/linux/i2c.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='detect' type-id='770b2313' visibility='default' filepath='include/linux/i2c.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='address_list' type-id='31347b7a' visibility='default' filepath='include/linux/i2c.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='clients' type-id='72f469ec' visibility='default' filepath='include/linux/i2c.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='disable_i2c_core_irq_mapping' type-id='b50a4934' visibility='default' filepath='include/linux/i2c.h' line='291' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='455' column='1' id='3db54816'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='457' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='i2c_alert_protocol' filepath='include/linux/i2c.h' line='212' column='1' id='113aadc2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='I2C_PROTOCOL_SMBUS_ALERT' value='0'/>
+        <enumerator name='I2C_PROTOCOL_SMBUS_HOST_NOTIFY' value='1'/>
+      </enum-decl>
+      <class-decl name='i2c_board_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='409' column='1' id='f95bfc29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/i2c.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='addr' type-id='8efea9e5' visibility='default' filepath='include/linux/i2c.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/i2c.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/i2c.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/i2c.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/i2c.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='properties' type-id='9e1d140c' visibility='default' filepath='include/linux/i2c.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/i2c.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_resources' type-id='f0981eeb' visibility='default' filepath='include/linux/i2c.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/i2c.h' line='420' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='i2c_timings' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/i2c.h' line='579' column='1' id='24734c8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_freq_hz' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='scl_rise_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scl_fall_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scl_int_delay_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sda_fall_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sda_hold_ns' type-id='19c2251e' visibility='default' filepath='include/linux/i2c.h' line='585' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a9cdb48b' const='yes' id='220a92c2'/>
+      <pointer-type-def type-id='220a92c2' size-in-bits='64' id='7ea54338'/>
+      <qualified-type-def type-id='3db54816' const='yes' id='2174d0b5'/>
+      <pointer-type-def type-id='2174d0b5' size-in-bits='64' id='49e46a4d'/>
+      <qualified-type-def type-id='8efea9e5' const='yes' id='3beb2af4'/>
+      <pointer-type-def type-id='3beb2af4' size-in-bits='64' id='31347b7a'/>
+      <pointer-type-def type-id='f95bfc29' size-in-bits='64' id='fae597a1'/>
+      <pointer-type-def type-id='66237bd2' size-in-bits='64' id='29ffcb70'/>
+      <pointer-type-def type-id='24734c8f' size-in-bits='64' id='d19fb227'/>
+      <pointer-type-def type-id='db4c9bf7' size-in-bits='64' id='9194e9f3'/>
+      <pointer-type-def type-id='42fd5899' size-in-bits='64' id='e6e946ad'/>
+      <pointer-type-def type-id='7fa2fd91' size-in-bits='64' id='37ec0ebd'/>
+      <pointer-type-def type-id='9f57d337' size-in-bits='64' id='770b2313'/>
+      <pointer-type-def type-id='73b9a01f' size-in-bits='64' id='bbfd7f03'/>
+      <pointer-type-def type-id='4322685c' size-in-bits='64' id='d839e3f6'/>
+      <pointer-type-def type-id='7f779b3f' size-in-bits='64' id='e9f334cb'/>
+      <var-decl name='i2c_bus_type' type-id='b31bfc8a' mangled-name='i2c_bus_type' visibility='default' filepath='drivers/i2c/i2c-core-base.c' line='506' column='1' elf-symbol-id='i2c_bus_type'/>
+      <var-decl name='i2c_adapter_type' type-id='bdae35f4' mangled-name='i2c_adapter_type' visibility='default' filepath='drivers/i2c/i2c-core-base.c' line='1185' column='1' elf-symbol-id='i2c_adapter_type'/>
+      <function-decl name='i2c_del_adapter' mangled-name='i2c_del_adapter' filepath='drivers/i2c/i2c-core-base.c' line='1554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_del_adapter'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='1554' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_add_adapter' mangled-name='i2c_add_adapter' filepath='drivers/i2c/i2c-core-base.c' line='1450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_add_adapter'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-base.c' line='1450' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_transfer' mangled-name='i2c_transfer' filepath='drivers/i2c/i2c-core-base.c' line='2037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_transfer'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='2037' column='1'/>
+        <parameter type-id='cd44bc95' name='msgs' filepath='drivers/i2c/i2c-core-base.c' line='2037' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='drivers/i2c/i2c-core-base.c' line='2037' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_del_driver' mangled-name='i2c_del_driver' filepath='drivers/i2c/i2c-core-base.c' line='1750' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_del_driver'>
+        <parameter type-id='29ffcb70' name='driver' filepath='drivers/i2c/i2c-core-base.c' line='1750' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_register_driver' mangled-name='i2c_register_driver' filepath='drivers/i2c/i2c-core-base.c' line='1709' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_register_driver'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/i2c/i2c-core-base.c' line='1709' column='1'/>
+        <parameter type-id='29ffcb70' name='driver' filepath='drivers/i2c/i2c-core-base.c' line='1709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_verify_client' mangled-name='i2c_verify_client' filepath='drivers/i2c/i2c-core-base.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_verify_client'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/i2c/i2c-core-base.c' line='532' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_unregister_device' mangled-name='i2c_unregister_device' filepath='drivers/i2c/i2c-core-base.c' line='852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_unregister_device'>
+        <parameter type-id='3e31633b' name='client' filepath='drivers/i2c/i2c-core-base.c' line='852' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_transfer_buffer_flags' mangled-name='i2c_transfer_buffer_flags' filepath='drivers/i2c/i2c-core-base.c' line='2083' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_transfer_buffer_flags'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-base.c' line='2083' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/i2c/i2c-core-base.c' line='2083' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/i2c/i2c-core-base.c' line='2084' column='1'/>
+        <parameter type-id='1dc6a898' name='flags' filepath='drivers/i2c/i2c-core-base.c' line='2084' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__i2c_transfer' mangled-name='__i2c_transfer' filepath='drivers/i2c/i2c-core-base.c' line='1970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__i2c_transfer'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='1970' column='1'/>
+        <parameter type-id='cd44bc95' name='msgs' filepath='drivers/i2c/i2c-core-base.c' line='1970' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='drivers/i2c/i2c-core-base.c' line='1970' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_recover_bus' mangled-name='i2c_recover_bus' filepath='drivers/i2c/i2c-core-base.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_recover_bus'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='245' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_put_dma_safe_msg_buf' mangled-name='i2c_put_dma_safe_msg_buf' filepath='drivers/i2c/i2c-core-base.c' line='2406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_put_dma_safe_msg_buf'>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/i2c/i2c-core-base.c' line='2406' column='1'/>
+        <parameter type-id='cd44bc95' name='msg' filepath='drivers/i2c/i2c-core-base.c' line='2406' column='1'/>
+        <parameter type-id='b50a4934' name='xferred' filepath='drivers/i2c/i2c-core-base.c' line='2406' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_put_adapter' mangled-name='i2c_put_adapter' filepath='drivers/i2c/i2c-core-base.c' line='2356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_put_adapter'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='2356' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_parse_fw_timings' mangled-name='i2c_parse_fw_timings' filepath='drivers/i2c/i2c-core-base.c' line='1645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_parse_fw_timings'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/i2c/i2c-core-base.c' line='1645' column='1'/>
+        <parameter type-id='d19fb227' name='t' filepath='drivers/i2c/i2c-core-base.c' line='1645' column='1'/>
+        <parameter type-id='b50a4934' name='use_defaults' filepath='drivers/i2c/i2c-core-base.c' line='1645' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='i2c_new_probed_device' mangled-name='i2c_new_probed_device' filepath='drivers/i2c/i2c-core-base.c' line='2295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_probed_device'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='2295' column='1'/>
+        <parameter type-id='fae597a1' name='info' filepath='drivers/i2c/i2c-core-base.c' line='2296' column='1'/>
+        <parameter type-id='31347b7a' name='addr_list' filepath='drivers/i2c/i2c-core-base.c' line='2297' column='1'/>
+        <parameter type-id='9194e9f3' name='probe' filepath='drivers/i2c/i2c-core-base.c' line='2298' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_dummy_device' mangled-name='i2c_new_dummy_device' filepath='drivers/i2c/i2c-core-base.c' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_dummy_device'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-base.c' line='910' column='1'/>
+        <parameter type-id='1dc6a898' name='address' filepath='drivers/i2c/i2c-core-base.c' line='910' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_dummy' mangled-name='i2c_new_dummy' filepath='drivers/i2c/i2c-core-base.c' line='934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_dummy'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-base.c' line='934' column='1'/>
+        <parameter type-id='1dc6a898' name='address' filepath='drivers/i2c/i2c-core-base.c' line='934' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_new_ancillary_device' mangled-name='i2c_new_ancillary_device' filepath='drivers/i2c/i2c-core-base.c' line='1009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_new_ancillary_device'>
+        <parameter type-id='3e31633b' name='client' filepath='drivers/i2c/i2c-core-base.c' line='1009' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/i2c/i2c-core-base.c' line='1010' column='1'/>
+        <parameter type-id='1dc6a898' name='default_addr' filepath='drivers/i2c/i2c-core-base.c' line='1011' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='i2c_get_dma_safe_msg_buf' mangled-name='i2c_get_dma_safe_msg_buf' filepath='drivers/i2c/i2c-core-base.c' line='2378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_get_dma_safe_msg_buf'>
+        <parameter type-id='cd44bc95' name='msg' filepath='drivers/i2c/i2c-core-base.c' line='2378' column='1'/>
+        <parameter type-id='f0981eeb' name='threshold' filepath='drivers/i2c/i2c-core-base.c' line='2378' column='1'/>
+        <return type-id='8bff8096'/>
+      </function-decl>
+      <function-decl name='i2c_get_adapter' mangled-name='i2c_get_adapter' filepath='drivers/i2c/i2c-core-base.c' line='2336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_get_adapter'>
+        <parameter type-id='95e97e5e' name='nr' filepath='drivers/i2c/i2c-core-base.c' line='2336' column='1'/>
+        <return type-id='b9af02c3'/>
+      </function-decl>
+      <function-decl name='i2c_generic_scl_recovery' mangled-name='i2c_generic_scl_recovery' filepath='drivers/i2c/i2c-core-base.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_generic_scl_recovery'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='178' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_for_each_dev' mangled-name='i2c_for_each_dev' filepath='drivers/i2c/i2c-core-base.c' line='1685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_for_each_dev'>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/i2c/i2c-core-base.c' line='1685' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/i2c/i2c-core-base.c' line='1685' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='i2c_add_numbered_adapter' mangled-name='i2c_add_numbered_adapter' filepath='drivers/i2c/i2c-core-base.c' line='1499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_add_numbered_adapter'>
+        <parameter type-id='b9af02c3' name='adap' filepath='drivers/i2c/i2c-core-base.c' line='1499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db4c9bf7'>
+        <parameter type-id='b9af02c3'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42fd5899'>
+        <parameter type-id='3e31633b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fa2fd91'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='49e46a4d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f57d337'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='fae597a1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73b9a01f'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4322685c'>
+        <parameter type-id='3e31633b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f779b3f'>
+        <parameter type-id='3e31633b'/>
+        <parameter type-id='113aadc2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/i2c/i2c-core-of.c' language='LANG_C89'>
+      <function-decl name='of_find_i2c_device_by_node' mangled-name='of_find_i2c_device_by_node' filepath='drivers/i2c/i2c-core-of.c' line='129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_i2c_device_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/i2c/i2c-core-of.c' line='129' column='1'/>
+        <return type-id='3e31633b'/>
+      </function-decl>
+      <function-decl name='of_find_i2c_adapter_by_node' mangled-name='of_find_i2c_adapter_by_node' filepath='drivers/i2c/i2c-core-of.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_i2c_adapter_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/i2c/i2c-core-of.c' line='147' column='1'/>
+        <return type-id='b9af02c3'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/i2c/i2c-core-smbus.c' language='LANG_C89'>
+      <function-decl name='i2c_smbus_xfer' mangled-name='i2c_smbus_xfer' filepath='drivers/i2c/i2c-core-smbus.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_xfer'>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/i2c/i2c-core-smbus.c' line='532' column='1'/>
+        <parameter type-id='1dc6a898' name='addr' filepath='drivers/i2c/i2c-core-smbus.c' line='532' column='1'/>
+        <parameter type-id='8efea9e5' name='flags' filepath='drivers/i2c/i2c-core-smbus.c' line='533' column='1'/>
+        <parameter type-id='a84c031d' name='read_write' filepath='drivers/i2c/i2c-core-smbus.c' line='533' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='534' column='1'/>
+        <parameter type-id='95e97e5e' name='protocol' filepath='drivers/i2c/i2c-core-smbus.c' line='534' column='1'/>
+        <parameter type-id='a556dccb' name='data' filepath='drivers/i2c/i2c-core-smbus.c' line='534' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_word_data' mangled-name='i2c_smbus_write_word_data' filepath='drivers/i2c/i2c-core-smbus.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_word_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='189' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='189' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/i2c/i2c-core-smbus.c' line='190' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_i2c_block_data' mangled-name='i2c_smbus_write_i2c_block_data' filepath='drivers/i2c/i2c-core-smbus.c' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_i2c_block_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='278' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='278' column='1'/>
+        <parameter type-id='f9b06939' name='length' filepath='drivers/i2c/i2c-core-smbus.c' line='279' column='1'/>
+        <parameter type-id='bbaf3419' name='values' filepath='drivers/i2c/i2c-core-smbus.c' line='279' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_byte_data' mangled-name='i2c_smbus_write_byte_data' filepath='drivers/i2c/i2c-core-smbus.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_byte_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='149' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='149' column='1'/>
+        <parameter type-id='f9b06939' name='value' filepath='drivers/i2c/i2c-core-smbus.c' line='150' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_write_byte' mangled-name='i2c_smbus_write_byte' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_write_byte'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1'/>
+        <parameter type-id='f9b06939' name='value' filepath='drivers/i2c/i2c-core-smbus.c' line='113' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_word_data' mangled-name='i2c_smbus_read_word_data' filepath='drivers/i2c/i2c-core-smbus.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_word_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='168' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='168' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_i2c_block_data' mangled-name='i2c_smbus_read_i2c_block_data' filepath='drivers/i2c/i2c-core-smbus.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_i2c_block_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='258' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='258' column='1'/>
+        <parameter type-id='f9b06939' name='length' filepath='drivers/i2c/i2c-core-smbus.c' line='259' column='1'/>
+        <parameter type-id='8bff8096' name='values' filepath='drivers/i2c/i2c-core-smbus.c' line='259' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='i2c_smbus_read_byte_data' mangled-name='i2c_smbus_read_byte_data' filepath='drivers/i2c/i2c-core-smbus.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='i2c_smbus_read_byte_data'>
+        <parameter type-id='7ea54338' name='client' filepath='drivers/i2c/i2c-core-smbus.c' line='128' column='1'/>
+        <parameter type-id='f9b06939' name='command' filepath='drivers/i2c/i2c-core-smbus.c' line='128' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iio/industrialio-buffer.c' language='LANG_C89'>
+      <function-decl name='iio_buffer_init' mangled-name='iio_buffer_init' filepath='drivers/iio/industrialio-buffer.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_buffer_init'>
+        <parameter type-id='aa9ea333' name='buffer' filepath='drivers/iio/industrialio-buffer.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_buffer_put' mangled-name='iio_buffer_put' filepath='drivers/iio/industrialio-buffer.c' line='1455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_buffer_put'>
+        <parameter type-id='aa9ea333' name='buffer' filepath='drivers/iio/industrialio-buffer.c' line='1455' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_push_to_buffers' mangled-name='iio_push_to_buffers' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_push_to_buffers'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iio/industrialio-buffer.c' line='1405' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_device_attach_buffer' mangled-name='iio_device_attach_buffer' filepath='drivers/iio/industrialio-buffer.c' line='1471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_attach_buffer'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-buffer.c' line='1471' column='1'/>
+        <parameter type-id='aa9ea333' name='buffer' filepath='drivers/iio/industrialio-buffer.c' line='1472' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='717ee4f3' size-in-bits='64' id='aa9ea333'/>
+      <pointer-type-def type-id='8c644de4' size-in-bits='64' id='226853d2'/>
+      <class-decl name='iio_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='73' column='1' id='717ee4f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_per_datum' type-id='b59d7dce' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='access' type-id='56670be1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_mask' type-id='3ccc2590' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='demux_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pollq' type-id='b5ab048f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='watermark' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_el_attrs' type-id='aad24a5b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scan_el_dev_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='buffer_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='scan_el_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stufftoread' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='attrs' type-id='cd733e18' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='demux_bounce' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_dev' size-in-bits='11648' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='525' column='1' id='8c644de4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_module' type-id='2730d015' visibility='default' filepath='include/linux/iio/iio.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='modes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='currentmode' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/iio.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='event_interface' type-id='f380f2bb' visibility='default' filepath='include/linux/iio/iio.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='buffer' type-id='aa9ea333' visibility='default' filepath='include/linux/iio/iio.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='scan_bytes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='available_scan_masks' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='masklength' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='active_scan_mask' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='scan_index_timestamp' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='trig' type-id='54e54fbb' visibility='default' filepath='include/linux/iio/iio.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='trig_readonly' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='pollfunc' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='pollfunc_event' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='channels' type-id='f74174a4' visibility='default' filepath='include/linux/iio/iio.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='num_channels' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='channel_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='chan_attr_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/iio.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='info' type-id='62d8a75a' visibility='default' filepath='include/linux/iio/iio.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='clock_id' type-id='a1c3b834' visibility='default' filepath='include/linux/iio/iio.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='info_exist_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='setup_ops' type-id='7597aac3' visibility='default' filepath='include/linux/iio/iio.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='chrdev' type-id='22f86351' visibility='default' filepath='include/linux/iio/iio.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='groups' type-id='db13236f' visibility='default' filepath='include/linux/iio/iio.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='groupcounter' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='debugfs_dentry' type-id='27675065' visibility='default' filepath='include/linux/iio/iio.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='cached_reg_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4af473b' size-in-bits='64' id='aad24a5b'/>
+      <pointer-type-def type-id='cfe4f8a2' size-in-bits='64' id='cd733e18'/>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='448' id='db13236f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='81a7f511' size-in-bits='64' id='56670be1'/>
+      <pointer-type-def type-id='ea04303b' size-in-bits='64' id='7597aac3'/>
+      <pointer-type-def type-id='1f8d2f66' size-in-bits='64' id='f74174a4'/>
+      <pointer-type-def type-id='02793b54' size-in-bits='64' id='62d8a75a'/>
+      <pointer-type-def type-id='a0b3876b' size-in-bits='64' id='f380f2bb'/>
+      <pointer-type-def type-id='5cec8edf' size-in-bits='64' id='9add1da7'/>
+      <pointer-type-def type-id='f060e03b' size-in-bits='64' id='54e54fbb'/>
+      <class-decl name='iio_event_interface' is-struct='yes' visibility='default' is-declaration-only='yes' id='a0b3876b'/>
+      <class-decl name='iio_poll_func' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='30' column='1' id='5cec8edf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='h' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timestamp' type-id='9b7c55ef' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_trigger' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='59' column='1' id='f060e03b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='a233c137' visibility='default' filepath='include/linux/iio/trigger.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iio/trigger.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/trigger.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/trigger.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='alloc_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/iio/trigger.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='subirq_chip' type-id='0f5f7920' visibility='default' filepath='include/linux/iio/trigger.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='subirq_base' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10400'>
+          <var-decl name='subirqs' type-id='76e4cb23' visibility='default' filepath='include/linux/iio/trigger.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='pool' type-id='f066dd3c' visibility='default' filepath='include/linux/iio/trigger.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='pool_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/trigger.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='attached_own_device' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='be65923c' size-in-bits='64' id='cfe4f8a2'/>
+      <qualified-type-def type-id='e59f755e' const='yes' id='81a7f511'/>
+      <qualified-type-def type-id='36e5348a' const='yes' id='ea04303b'/>
+      <qualified-type-def type-id='da58161d' const='yes' id='1f8d2f66'/>
+      <qualified-type-def type-id='49f5fd4d' const='yes' id='02793b54'/>
+      <class-decl name='iio_buffer_access_funcs' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='46' column='1' id='e59f755e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store_to' type-id='3168497d' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_first_n' type-id='268afde6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_available' type-id='6bfc1e31' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_update' type-id='098b33c1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_bytes_per_datum' type-id='07aa12a2' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_length' type-id='e78e2dfb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='enable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='50968132' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modes' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer_setup_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='474' column='1' id='36e5348a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='postenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='predisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='postdisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate_scan_mask' type-id='d2b31715' visibility='default' filepath='include/linux/iio/iio.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_chan_spec' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='236' column='1' id='da58161d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='6dc73e71' visibility='default' filepath='include/linux/iio/iio.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel2' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_index' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='scan_type' type-id='427f8bed' visibility='default' filepath='include/linux/iio/iio.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info_mask_separate' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='info_mask_separate_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info_mask_shared_by_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='info_mask_shared_by_type_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='info_mask_shared_by_dir' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info_mask_shared_by_dir_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info_mask_shared_by_all' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='info_mask_shared_by_all_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_spec' type-id='b1b94ad4' visibility='default' filepath='include/linux/iio/iio.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='num_event_specs' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ext_info' type-id='d67abbdf' visibility='default' filepath='include/linux/iio/iio.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='extend_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='datasheet_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modified' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='indexed' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='output' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='differential' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='393' column='1' id='49f5fd4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_raw' type-id='933bd96c' visibility='default' filepath='include/linux/iio/iio.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_raw_multi' type-id='373a5a49' visibility='default' filepath='include/linux/iio/iio.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_avail' type-id='c967fe0a' visibility='default' filepath='include/linux/iio/iio.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_raw' type-id='ca9b89b2' visibility='default' filepath='include/linux/iio/iio.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_raw_get_fmt' type-id='763c550c' visibility='default' filepath='include/linux/iio/iio.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_event_config' type-id='e6bda83a' visibility='default' filepath='include/linux/iio/iio.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_event_config' type-id='6cf6fae1' visibility='default' filepath='include/linux/iio/iio.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='read_event_value' type-id='7ef1b01a' visibility='default' filepath='include/linux/iio/iio.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_event_value' type-id='fbb36f38' visibility='default' filepath='include/linux/iio/iio.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='validate_trigger' type-id='247cd24c' visibility='default' filepath='include/linux/iio/iio.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='update_scan_mode' type-id='b7f77f1f' visibility='default' filepath='include/linux/iio/iio.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='debugfs_reg_access' type-id='f657670c' visibility='default' filepath='include/linux/iio/iio.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='of_xlate' type-id='d3d1201d' visibility='default' filepath='include/linux/iio/iio.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hwfifo_set_watermark' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hwfifo_flush_to_buffer' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a6222917' const='yes' id='be65923c'/>
+      <pointer-type-def type-id='152c9867' size-in-bits='64' id='a233c137'/>
+      <array-type-def dimensions='1' type-id='a04304a1' size-in-bits='16' id='76e4cb23'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='iio_subirq' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='14' column='1' id='a04304a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/iio/iio.h' line='242' column='1' id='427f8bed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sign' type-id='a84c031d' visibility='default' filepath='include/linux/iio/iio.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='realbits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='storagebits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='shift' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='repeat' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endianness' type-id='b8c1dcff' visibility='default' filepath='include/linux/iio/iio.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1d1afc2f' size-in-bits='64' id='d67abbdf'/>
+      <pointer-type-def type-id='50409e76' size-in-bits='64' id='b1b94ad4'/>
+      <qualified-type-def type-id='df5f1cc8' const='yes' id='152c9867'/>
+      <enum-decl name='iio_chan_type' filepath='include/uapi/linux/iio/types.h' line='14' column='1' id='6dc73e71'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_VOLTAGE' value='0'/>
+        <enumerator name='IIO_CURRENT' value='1'/>
+        <enumerator name='IIO_POWER' value='2'/>
+        <enumerator name='IIO_ACCEL' value='3'/>
+        <enumerator name='IIO_ANGL_VEL' value='4'/>
+        <enumerator name='IIO_MAGN' value='5'/>
+        <enumerator name='IIO_LIGHT' value='6'/>
+        <enumerator name='IIO_INTENSITY' value='7'/>
+        <enumerator name='IIO_PROXIMITY' value='8'/>
+        <enumerator name='IIO_TEMP' value='9'/>
+        <enumerator name='IIO_INCLI' value='10'/>
+        <enumerator name='IIO_ROT' value='11'/>
+        <enumerator name='IIO_ANGL' value='12'/>
+        <enumerator name='IIO_TIMESTAMP' value='13'/>
+        <enumerator name='IIO_CAPACITANCE' value='14'/>
+        <enumerator name='IIO_ALTVOLTAGE' value='15'/>
+        <enumerator name='IIO_CCT' value='16'/>
+        <enumerator name='IIO_PRESSURE' value='17'/>
+        <enumerator name='IIO_HUMIDITYRELATIVE' value='18'/>
+        <enumerator name='IIO_ACTIVITY' value='19'/>
+        <enumerator name='IIO_STEPS' value='20'/>
+        <enumerator name='IIO_ENERGY' value='21'/>
+        <enumerator name='IIO_DISTANCE' value='22'/>
+        <enumerator name='IIO_VELOCITY' value='23'/>
+        <enumerator name='IIO_CONCENTRATION' value='24'/>
+        <enumerator name='IIO_RESISTANCE' value='25'/>
+        <enumerator name='IIO_PH' value='26'/>
+        <enumerator name='IIO_UVINDEX' value='27'/>
+        <enumerator name='IIO_ELECTRICALCONDUCTIVITY' value='28'/>
+        <enumerator name='IIO_COUNT' value='29'/>
+        <enumerator name='IIO_INDEX' value='30'/>
+        <enumerator name='IIO_GRAVITY' value='31'/>
+        <enumerator name='IIO_POSITIONRELATIVE' value='32'/>
+        <enumerator name='IIO_PHASE' value='33'/>
+        <enumerator name='IIO_MASSCONCENTRATION' value='34'/>
+      </enum-decl>
+      <pointer-type-def type-id='0590d37d' size-in-bits='64' id='098b33c1'/>
+      <pointer-type-def type-id='e1a8ec34' size-in-bits='64' id='7c9900c6'/>
+      <pointer-type-def type-id='4d1587e0' size-in-bits='64' id='07aa12a2'/>
+      <pointer-type-def type-id='ecabee4c' size-in-bits='64' id='268afde6'/>
+      <pointer-type-def type-id='56310527' size-in-bits='64' id='e78e2dfb'/>
+      <pointer-type-def type-id='6ae7a739' size-in-bits='64' id='3168497d'/>
+      <pointer-type-def type-id='0943811c' size-in-bits='64' id='adb7e86e'/>
+      <pointer-type-def type-id='85b51308' size-in-bits='64' id='c967fe0a'/>
+      <pointer-type-def type-id='11ed9d28' size-in-bits='64' id='e6bda83a'/>
+      <pointer-type-def type-id='ba66f720' size-in-bits='64' id='7ef1b01a'/>
+      <pointer-type-def type-id='13606a0e' size-in-bits='64' id='fbb36f38'/>
+      <pointer-type-def type-id='6ae427f5' size-in-bits='64' id='6cf6fae1'/>
+      <pointer-type-def type-id='47f058fa' size-in-bits='64' id='933bd96c'/>
+      <pointer-type-def type-id='6cc49e45' size-in-bits='64' id='373a5a49'/>
+      <pointer-type-def type-id='0a831e58' size-in-bits='64' id='ca9b89b2'/>
+      <pointer-type-def type-id='df510f4a' size-in-bits='64' id='763c550c'/>
+      <pointer-type-def type-id='1f79e9b9' size-in-bits='64' id='d3d1201d'/>
+      <pointer-type-def type-id='daa6240b' size-in-bits='64' id='b7f77f1f'/>
+      <pointer-type-def type-id='fba20e52' size-in-bits='64' id='247cd24c'/>
+      <pointer-type-def type-id='bcb69272' size-in-bits='64' id='9778250c'/>
+      <pointer-type-def type-id='1a13292a' size-in-bits='64' id='f657670c'/>
+      <pointer-type-def type-id='f3f76d11' size-in-bits='64' id='d2b31715'/>
+      <pointer-type-def type-id='cda9d9e5' size-in-bits='64' id='6bfc1e31'/>
+      <pointer-type-def type-id='b6577688' size-in-bits='64' id='50968132'/>
+      <class-decl name='iio_trigger_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='32' column='1' id='df5f1cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_trigger_state' type-id='b8aaeb8e' visibility='default' filepath='include/linux/iio/trigger.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_reenable' type-id='b3d5643b' visibility='default' filepath='include/linux/iio/trigger.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='validate_device' type-id='ecbc0920' visibility='default' filepath='include/linux/iio/trigger.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='94e99e8e' const='yes' id='1d1afc2f'/>
+      <qualified-type-def type-id='90b8a0b3' const='yes' id='50409e76'/>
+      <enum-decl name='iio_endian' filepath='include/linux/iio/iio.h' line='27' column='1' id='b8c1dcff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CPU' value='0'/>
+        <enumerator name='IIO_BE' value='1'/>
+        <enumerator name='IIO_LE' value='2'/>
+      </enum-decl>
+      <class-decl name='iio_chan_spec_ext_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='44' column='1' id='94e99e8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shared' type-id='89575fbb' visibility='default' filepath='include/linux/iio/iio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='0c7d3068' visibility='default' filepath='include/linux/iio/iio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='70f0fa74' visibility='default' filepath='include/linux/iio/iio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='e475ab95' visibility='default' filepath='include/linux/iio/iio.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_event_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='164' column='1' id='90b8a0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='064bebb9' visibility='default' filepath='include/linux/iio/iio.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='180bfe06' visibility='default' filepath='include/linux/iio/iio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask_separate' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask_shared_by_type' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask_shared_by_dir' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_shared_by_all' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2b0fb5b7' size-in-bits='64' id='b3d5643b'/>
+      <pointer-type-def type-id='a86c42ee' size-in-bits='64' id='ecbc0920'/>
+      <pointer-type-def type-id='dc03d04c' size-in-bits='64' id='b8aaeb8e'/>
+      <enum-decl name='iio_event_direction' filepath='include/uapi/linux/iio/types.h' line='108' column='1' id='180bfe06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_DIR_EITHER' value='0'/>
+        <enumerator name='IIO_EV_DIR_RISING' value='1'/>
+        <enumerator name='IIO_EV_DIR_FALLING' value='2'/>
+        <enumerator name='IIO_EV_DIR_NONE' value='3'/>
+      </enum-decl>
+      <enum-decl name='iio_event_type' filepath='include/uapi/linux/iio/types.h' line='99' column='1' id='064bebb9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_TYPE_THRESH' value='0'/>
+        <enumerator name='IIO_EV_TYPE_MAG' value='1'/>
+        <enumerator name='IIO_EV_TYPE_ROC' value='2'/>
+        <enumerator name='IIO_EV_TYPE_THRESH_ADAPTIVE' value='3'/>
+        <enumerator name='IIO_EV_TYPE_MAG_ADAPTIVE' value='4'/>
+        <enumerator name='IIO_EV_TYPE_CHANGE' value='5'/>
+      </enum-decl>
+      <enum-decl name='iio_shared_by' filepath='include/linux/iio/iio.h' line='20' column='1' id='89575fbb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_SEPARATE' value='0'/>
+        <enumerator name='IIO_SHARED_BY_TYPE' value='1'/>
+        <enumerator name='IIO_SHARED_BY_DIR' value='2'/>
+        <enumerator name='IIO_SHARED_BY_ALL' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='5344bebe' size-in-bits='64' id='0c7d3068'/>
+      <pointer-type-def type-id='057e4bd2' size-in-bits='64' id='70f0fa74'/>
+      <typedef-decl name='uintptr_t' type-id='7359adad' filepath='include/linux/types.h' line='37' column='1' id='e475ab95'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iio/industrialio-core.c' language='LANG_C89'>
+      <class-decl name='iio_event_interface' is-struct='yes' visibility='default' is-declaration-only='yes' id='a0b3876b'/>
+      <class-decl name='iio_poll_func' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='30' column='1' id='5cec8edf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='h' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='3fefe9b7' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timestamp' type-id='9b7c55ef' visibility='default' filepath='include/linux/iio/trigger_consumer.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_trigger' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='59' column='1' id='f060e03b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='a233c137' visibility='default' filepath='include/linux/iio/trigger.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/iio/trigger.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/trigger.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/trigger.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='alloc_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/trigger.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/iio/trigger.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='subirq_chip' type-id='0f5f7920' visibility='default' filepath='include/linux/iio/trigger.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='subirq_base' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/trigger.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10400'>
+          <var-decl name='subirqs' type-id='76e4cb23' visibility='default' filepath='include/linux/iio/trigger.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='pool' type-id='f066dd3c' visibility='default' filepath='include/linux/iio/trigger.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='pool_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/trigger.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='attached_own_device' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='448' id='db13236f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='iio_dev' size-in-bits='11648' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='525' column='1' id='8c644de4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_module' type-id='2730d015' visibility='default' filepath='include/linux/iio/iio.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='modes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='currentmode' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/iio/iio.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='event_interface' type-id='f380f2bb' visibility='default' filepath='include/linux/iio/iio.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='buffer' type-id='aa9ea333' visibility='default' filepath='include/linux/iio/iio.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='scan_bytes' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='mlock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='available_scan_masks' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='masklength' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='active_scan_mask' type-id='f9b37274' visibility='default' filepath='include/linux/iio/iio.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='scan_index_timestamp' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='trig' type-id='54e54fbb' visibility='default' filepath='include/linux/iio/iio.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='trig_readonly' type-id='b50a4934' visibility='default' filepath='include/linux/iio/iio.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='pollfunc' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='pollfunc_event' type-id='9add1da7' visibility='default' filepath='include/linux/iio/iio.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='channels' type-id='f74174a4' visibility='default' filepath='include/linux/iio/iio.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='num_channels' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='channel_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/iio.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='chan_attr_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/iio.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='info' type-id='62d8a75a' visibility='default' filepath='include/linux/iio/iio.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='clock_id' type-id='a1c3b834' visibility='default' filepath='include/linux/iio/iio.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='info_exist_lock' type-id='925167dc' visibility='default' filepath='include/linux/iio/iio.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='setup_ops' type-id='7597aac3' visibility='default' filepath='include/linux/iio/iio.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='chrdev' type-id='22f86351' visibility='default' filepath='include/linux/iio/iio.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='groups' type-id='db13236f' visibility='default' filepath='include/linux/iio/iio.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='groupcounter' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='debugfs_dentry' type-id='27675065' visibility='default' filepath='include/linux/iio/iio.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='cached_reg_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='568' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='73' column='1' id='717ee4f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes_per_datum' type-id='b59d7dce' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='access' type-id='56670be1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_mask' type-id='3ccc2590' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='demux_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pollq' type-id='b5ab048f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='watermark' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_el_attrs' type-id='aad24a5b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='scan_timestamp' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scan_el_dev_attr_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='buffer_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='scan_el_group' type-id='e4af473b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stufftoread' type-id='b50a4934' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='attrs' type-id='cd733e18' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='demux_bounce' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='buffer_list' type-id='72f469ec' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_buffer_access_funcs' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='46' column='1' id='e59f755e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store_to' type-id='3168497d' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_first_n' type-id='268afde6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_available' type-id='6bfc1e31' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_update' type-id='098b33c1' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_bytes_per_datum' type-id='07aa12a2' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_length' type-id='e78e2dfb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='enable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='disable' type-id='7c9900c6' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='50968132' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='modes' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/buffer_impl.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_chan_spec' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='236' column='1' id='da58161d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='6dc73e71' visibility='default' filepath='include/linux/iio/iio.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel2' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_index' type-id='95e97e5e' visibility='default' filepath='include/linux/iio/iio.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='scan_type' type-id='427f8bed' visibility='default' filepath='include/linux/iio/iio.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info_mask_separate' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='info_mask_separate_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='info_mask_shared_by_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='info_mask_shared_by_type_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='info_mask_shared_by_dir' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info_mask_shared_by_dir_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info_mask_shared_by_all' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='info_mask_shared_by_all_available' type-id='bd54fe1a' visibility='default' filepath='include/linux/iio/iio.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_spec' type-id='b1b94ad4' visibility='default' filepath='include/linux/iio/iio.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='num_event_specs' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ext_info' type-id='d67abbdf' visibility='default' filepath='include/linux/iio/iio.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='extend_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='datasheet_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modified' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='indexed' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='output' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='differential' type-id='f0981eeb' visibility='default' filepath='include/linux/iio/iio.h' line='266' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_chan_type' filepath='include/uapi/linux/iio/types.h' line='14' column='1' id='6dc73e71'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_VOLTAGE' value='0'/>
+        <enumerator name='IIO_CURRENT' value='1'/>
+        <enumerator name='IIO_POWER' value='2'/>
+        <enumerator name='IIO_ACCEL' value='3'/>
+        <enumerator name='IIO_ANGL_VEL' value='4'/>
+        <enumerator name='IIO_MAGN' value='5'/>
+        <enumerator name='IIO_LIGHT' value='6'/>
+        <enumerator name='IIO_INTENSITY' value='7'/>
+        <enumerator name='IIO_PROXIMITY' value='8'/>
+        <enumerator name='IIO_TEMP' value='9'/>
+        <enumerator name='IIO_INCLI' value='10'/>
+        <enumerator name='IIO_ROT' value='11'/>
+        <enumerator name='IIO_ANGL' value='12'/>
+        <enumerator name='IIO_TIMESTAMP' value='13'/>
+        <enumerator name='IIO_CAPACITANCE' value='14'/>
+        <enumerator name='IIO_ALTVOLTAGE' value='15'/>
+        <enumerator name='IIO_CCT' value='16'/>
+        <enumerator name='IIO_PRESSURE' value='17'/>
+        <enumerator name='IIO_HUMIDITYRELATIVE' value='18'/>
+        <enumerator name='IIO_ACTIVITY' value='19'/>
+        <enumerator name='IIO_STEPS' value='20'/>
+        <enumerator name='IIO_ENERGY' value='21'/>
+        <enumerator name='IIO_DISTANCE' value='22'/>
+        <enumerator name='IIO_VELOCITY' value='23'/>
+        <enumerator name='IIO_CONCENTRATION' value='24'/>
+        <enumerator name='IIO_RESISTANCE' value='25'/>
+        <enumerator name='IIO_PH' value='26'/>
+        <enumerator name='IIO_UVINDEX' value='27'/>
+        <enumerator name='IIO_ELECTRICALCONDUCTIVITY' value='28'/>
+        <enumerator name='IIO_COUNT' value='29'/>
+        <enumerator name='IIO_INDEX' value='30'/>
+        <enumerator name='IIO_GRAVITY' value='31'/>
+        <enumerator name='IIO_POSITIONRELATIVE' value='32'/>
+        <enumerator name='IIO_PHASE' value='33'/>
+        <enumerator name='IIO_MASSCONCENTRATION' value='34'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/iio/iio.h' line='242' column='1' id='427f8bed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sign' type-id='a84c031d' visibility='default' filepath='include/linux/iio/iio.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='realbits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='storagebits' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='shift' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='repeat' type-id='f9b06939' visibility='default' filepath='include/linux/iio/iio.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='endianness' type-id='b8c1dcff' visibility='default' filepath='include/linux/iio/iio.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_endian' filepath='include/linux/iio/iio.h' line='27' column='1' id='b8c1dcff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CPU' value='0'/>
+        <enumerator name='IIO_BE' value='1'/>
+        <enumerator name='IIO_LE' value='2'/>
+      </enum-decl>
+      <class-decl name='iio_event_spec' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='164' column='1' id='90b8a0b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='064bebb9' visibility='default' filepath='include/linux/iio/iio.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='180bfe06' visibility='default' filepath='include/linux/iio/iio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask_separate' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask_shared_by_type' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask_shared_by_dir' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mask_shared_by_all' type-id='7359adad' visibility='default' filepath='include/linux/iio/iio.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_event_type' filepath='include/uapi/linux/iio/types.h' line='99' column='1' id='064bebb9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_TYPE_THRESH' value='0'/>
+        <enumerator name='IIO_EV_TYPE_MAG' value='1'/>
+        <enumerator name='IIO_EV_TYPE_ROC' value='2'/>
+        <enumerator name='IIO_EV_TYPE_THRESH_ADAPTIVE' value='3'/>
+        <enumerator name='IIO_EV_TYPE_MAG_ADAPTIVE' value='4'/>
+        <enumerator name='IIO_EV_TYPE_CHANGE' value='5'/>
+      </enum-decl>
+      <enum-decl name='iio_event_direction' filepath='include/uapi/linux/iio/types.h' line='108' column='1' id='180bfe06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_DIR_EITHER' value='0'/>
+        <enumerator name='IIO_EV_DIR_RISING' value='1'/>
+        <enumerator name='IIO_EV_DIR_FALLING' value='2'/>
+        <enumerator name='IIO_EV_DIR_NONE' value='3'/>
+      </enum-decl>
+      <class-decl name='iio_chan_spec_ext_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='44' column='1' id='94e99e8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/iio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shared' type-id='89575fbb' visibility='default' filepath='include/linux/iio/iio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='0c7d3068' visibility='default' filepath='include/linux/iio/iio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='70f0fa74' visibility='default' filepath='include/linux/iio/iio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='e475ab95' visibility='default' filepath='include/linux/iio/iio.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_shared_by' filepath='include/linux/iio/iio.h' line='20' column='1' id='89575fbb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_SEPARATE' value='0'/>
+        <enumerator name='IIO_SHARED_BY_TYPE' value='1'/>
+        <enumerator name='IIO_SHARED_BY_DIR' value='2'/>
+        <enumerator name='IIO_SHARED_BY_ALL' value='3'/>
+      </enum-decl>
+      <typedef-decl name='uintptr_t' type-id='7359adad' filepath='include/linux/types.h' line='37' column='1' id='e475ab95'/>
+      <class-decl name='iio_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='393' column='1' id='49f5fd4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attrs' type-id='8ff9530e' visibility='default' filepath='include/linux/iio/iio.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_raw' type-id='933bd96c' visibility='default' filepath='include/linux/iio/iio.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_raw_multi' type-id='373a5a49' visibility='default' filepath='include/linux/iio/iio.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_avail' type-id='c967fe0a' visibility='default' filepath='include/linux/iio/iio.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_raw' type-id='ca9b89b2' visibility='default' filepath='include/linux/iio/iio.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_raw_get_fmt' type-id='763c550c' visibility='default' filepath='include/linux/iio/iio.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_event_config' type-id='e6bda83a' visibility='default' filepath='include/linux/iio/iio.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_event_config' type-id='6cf6fae1' visibility='default' filepath='include/linux/iio/iio.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='read_event_value' type-id='7ef1b01a' visibility='default' filepath='include/linux/iio/iio.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_event_value' type-id='fbb36f38' visibility='default' filepath='include/linux/iio/iio.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='validate_trigger' type-id='247cd24c' visibility='default' filepath='include/linux/iio/iio.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='update_scan_mode' type-id='b7f77f1f' visibility='default' filepath='include/linux/iio/iio.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='debugfs_reg_access' type-id='f657670c' visibility='default' filepath='include/linux/iio/iio.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='of_xlate' type-id='d3d1201d' visibility='default' filepath='include/linux/iio/iio.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hwfifo_set_watermark' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hwfifo_flush_to_buffer' type-id='9778250c' visibility='default' filepath='include/linux/iio/iio.h' line='460' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_event_info' filepath='include/linux/iio/types.h' line='12' column='1' id='c67c1129'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_EV_INFO_ENABLE' value='0'/>
+        <enumerator name='IIO_EV_INFO_VALUE' value='1'/>
+        <enumerator name='IIO_EV_INFO_HYSTERESIS' value='2'/>
+        <enumerator name='IIO_EV_INFO_PERIOD' value='3'/>
+        <enumerator name='IIO_EV_INFO_HIGH_PASS_FILTER_3DB' value='4'/>
+        <enumerator name='IIO_EV_INFO_LOW_PASS_FILTER_3DB' value='5'/>
+      </enum-decl>
+      <class-decl name='iio_buffer_setup_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iio/iio.h' line='474' column='1' id='36e5348a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='postenable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='predisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='postdisable' type-id='adb7e86e' visibility='default' filepath='include/linux/iio/iio.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='validate_scan_mask' type-id='d2b31715' visibility='default' filepath='include/linux/iio/iio.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cfe4f8a2' size-in-bits='64' id='cd733e18'/>
+      <qualified-type-def type-id='e59f755e' const='yes' id='81a7f511'/>
+      <pointer-type-def type-id='81a7f511' size-in-bits='64' id='56670be1'/>
+      <qualified-type-def type-id='36e5348a' const='yes' id='ea04303b'/>
+      <pointer-type-def type-id='ea04303b' size-in-bits='64' id='7597aac3'/>
+      <qualified-type-def type-id='da58161d' const='yes' id='1f8d2f66'/>
+      <pointer-type-def type-id='1f8d2f66' size-in-bits='64' id='f74174a4'/>
+      <qualified-type-def type-id='94e99e8e' const='yes' id='1d1afc2f'/>
+      <pointer-type-def type-id='1d1afc2f' size-in-bits='64' id='d67abbdf'/>
+      <qualified-type-def type-id='90b8a0b3' const='yes' id='50409e76'/>
+      <pointer-type-def type-id='50409e76' size-in-bits='64' id='b1b94ad4'/>
+      <qualified-type-def type-id='49f5fd4d' const='yes' id='02793b54'/>
+      <pointer-type-def type-id='02793b54' size-in-bits='64' id='62d8a75a'/>
+      <pointer-type-def type-id='6d60f45d' size-in-bits='64' id='a6a0d755'/>
+      <pointer-type-def type-id='717ee4f3' size-in-bits='64' id='aa9ea333'/>
+      <pointer-type-def type-id='8c644de4' size-in-bits='64' id='226853d2'/>
+      <pointer-type-def type-id='a0b3876b' size-in-bits='64' id='f380f2bb'/>
+      <pointer-type-def type-id='5cec8edf' size-in-bits='64' id='9add1da7'/>
+      <pointer-type-def type-id='f060e03b' size-in-bits='64' id='54e54fbb'/>
+      <pointer-type-def type-id='0590d37d' size-in-bits='64' id='098b33c1'/>
+      <pointer-type-def type-id='e1a8ec34' size-in-bits='64' id='7c9900c6'/>
+      <pointer-type-def type-id='4d1587e0' size-in-bits='64' id='07aa12a2'/>
+      <pointer-type-def type-id='ecabee4c' size-in-bits='64' id='268afde6'/>
+      <pointer-type-def type-id='56310527' size-in-bits='64' id='e78e2dfb'/>
+      <pointer-type-def type-id='6ae7a739' size-in-bits='64' id='3168497d'/>
+      <pointer-type-def type-id='0943811c' size-in-bits='64' id='adb7e86e'/>
+      <pointer-type-def type-id='85b51308' size-in-bits='64' id='c967fe0a'/>
+      <pointer-type-def type-id='11ed9d28' size-in-bits='64' id='e6bda83a'/>
+      <pointer-type-def type-id='ba66f720' size-in-bits='64' id='7ef1b01a'/>
+      <pointer-type-def type-id='13606a0e' size-in-bits='64' id='fbb36f38'/>
+      <pointer-type-def type-id='6ae427f5' size-in-bits='64' id='6cf6fae1'/>
+      <pointer-type-def type-id='47f058fa' size-in-bits='64' id='933bd96c'/>
+      <pointer-type-def type-id='6cc49e45' size-in-bits='64' id='373a5a49'/>
+      <pointer-type-def type-id='0a831e58' size-in-bits='64' id='ca9b89b2'/>
+      <pointer-type-def type-id='df510f4a' size-in-bits='64' id='763c550c'/>
+      <pointer-type-def type-id='1f79e9b9' size-in-bits='64' id='d3d1201d'/>
+      <pointer-type-def type-id='daa6240b' size-in-bits='64' id='b7f77f1f'/>
+      <pointer-type-def type-id='fba20e52' size-in-bits='64' id='247cd24c'/>
+      <pointer-type-def type-id='bcb69272' size-in-bits='64' id='9778250c'/>
+      <pointer-type-def type-id='1a13292a' size-in-bits='64' id='f657670c'/>
+      <pointer-type-def type-id='f3f76d11' size-in-bits='64' id='d2b31715'/>
+      <pointer-type-def type-id='cda9d9e5' size-in-bits='64' id='6bfc1e31'/>
+      <pointer-type-def type-id='5344bebe' size-in-bits='64' id='0c7d3068'/>
+      <pointer-type-def type-id='057e4bd2' size-in-bits='64' id='70f0fa74'/>
+      <pointer-type-def type-id='b6577688' size-in-bits='64' id='50968132'/>
+      <function-decl name='iio_device_alloc' mangled-name='iio_device_alloc' filepath='drivers/iio/industrialio-core.c' line='1426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_alloc'>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='drivers/iio/industrialio-core.c' line='1426' column='1'/>
+        <return type-id='226853d2'/>
+      </function-decl>
+      <function-decl name='iio_device_unregister' mangled-name='iio_device_unregister' filepath='drivers/iio/industrialio-core.c' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_unregister'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1716' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_device_free' mangled-name='iio_device_free' filepath='drivers/iio/industrialio-core.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_device_free'>
+        <parameter type-id='226853d2' name='dev' filepath='drivers/iio/industrialio-core.c' line='1470' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_iio_device_alloc' mangled-name='devm_iio_device_alloc' filepath='drivers/iio/industrialio-core.c' line='1507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iio_device_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/industrialio-core.c' line='1507' column='1'/>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='drivers/iio/industrialio-core.c' line='1507' column='1'/>
+        <return type-id='226853d2'/>
+      </function-decl>
+      <function-decl name='__iio_device_register' mangled-name='__iio_device_register' filepath='drivers/iio/industrialio-core.c' line='1643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iio_device_register'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1643' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-core.c' line='1643' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__devm_iio_device_register' mangled-name='__devm_iio_device_register' filepath='drivers/iio/industrialio-core.c' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_iio_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/industrialio-core.c' line='1742' column='1'/>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-core.c' line='1742' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-core.c' line='1743' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
+      <function-type size-in-bits='64' id='0590d37d'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1a8ec34'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d1587e0'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecabee4c'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56310527'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ae7a739'>
+        <parameter type-id='aa9ea333'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0943811c'>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='85b51308'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='a6a0d755'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ed9d28'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba66f720'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='c67c1129'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13606a0e'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='c67c1129'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ae427f5'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='064bebb9'/>
+        <parameter type-id='180bfe06'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47f058fa'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cc49e45'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a831e58'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df510f4a'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f79e9b9'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daa6240b'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f9b37274'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fba20e52'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='54e54fbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bcb69272'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a13292a'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3f76d11'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='f9b37274'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cda9d9e5'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5344bebe'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='e475ab95'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='057e4bd2'>
+        <parameter type-id='226853d2'/>
+        <parameter type-id='e475ab95'/>
+        <parameter type-id='f74174a4'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6577688'>
+        <parameter type-id='aa9ea333'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='bde36be8' size-in-bits='64' id='af02a266'/>
+      <qualified-type-def type-id='fbff4263' const='yes' id='bde36be8'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iio/industrialio-trigger.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a04304a1' size-in-bits='16' id='76e4cb23'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='iio_trigger_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='32' column='1' id='df5f1cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_trigger_state' type-id='b8aaeb8e' visibility='default' filepath='include/linux/iio/trigger.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_reenable' type-id='b3d5643b' visibility='default' filepath='include/linux/iio/trigger.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='validate_device' type-id='ecbc0920' visibility='default' filepath='include/linux/iio/trigger.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iio_subirq' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/linux/iio/trigger.h' line='14' column='1' id='a04304a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/iio/trigger.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='df5f1cc8' const='yes' id='152c9867'/>
+      <pointer-type-def type-id='152c9867' size-in-bits='64' id='a233c137'/>
+      <pointer-type-def type-id='2b0fb5b7' size-in-bits='64' id='b3d5643b'/>
+      <pointer-type-def type-id='a86c42ee' size-in-bits='64' id='ecbc0920'/>
+      <pointer-type-def type-id='dc03d04c' size-in-bits='64' id='b8aaeb8e'/>
+      <function-decl name='iio_triggered_buffer_predisable' mangled-name='iio_triggered_buffer_predisable' filepath='drivers/iio/industrialio-trigger.c' line='768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_triggered_buffer_predisable'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='768' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_triggered_buffer_postenable' mangled-name='iio_triggered_buffer_postenable' filepath='drivers/iio/industrialio-trigger.c' line='761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_triggered_buffer_postenable'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='761' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_trigger_unregister' mangled-name='iio_trigger_unregister' filepath='drivers/iio/industrialio-trigger.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_unregister'>
+        <parameter type-id='54e54fbb' name='trig_info' filepath='drivers/iio/industrialio-trigger.c' line='106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_poll' mangled-name='iio_trigger_poll' filepath='drivers/iio/industrialio-trigger.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_poll'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='162' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_notify_done' mangled-name='iio_trigger_notify_done' filepath='drivers/iio/industrialio-trigger.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_notify_done'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='203' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_free' mangled-name='iio_trigger_free' filepath='drivers/iio/industrialio-trigger.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_free'>
+        <parameter type-id='54e54fbb' name='trig' filepath='drivers/iio/industrialio-trigger.c' line='575' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_trigger_alloc' mangled-name='iio_trigger_alloc' filepath='drivers/iio/industrialio-trigger.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_trigger_alloc'>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iio/industrialio-trigger.c' line='562' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='54e54fbb'/>
+      </function-decl>
+      <function-decl name='iio_pollfunc_store_time' mangled-name='iio_pollfunc_store_time' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_pollfunc_store_time'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='drivers/iio/industrialio-trigger.c' line='315' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='iio_dealloc_pollfunc' mangled-name='iio_dealloc_pollfunc' filepath='drivers/iio/industrialio-trigger.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_dealloc_pollfunc'>
+        <parameter type-id='9add1da7' name='pf' filepath='drivers/iio/industrialio-trigger.c' line='353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_alloc_pollfunc' mangled-name='iio_alloc_pollfunc' filepath='drivers/iio/industrialio-trigger.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_alloc_pollfunc'>
+        <parameter type-id='3fefe9b7' name='h' filepath='drivers/iio/industrialio-trigger.c' line='324' column='1'/>
+        <parameter type-id='3fefe9b7' name='thread' filepath='drivers/iio/industrialio-trigger.c' line='325' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='drivers/iio/industrialio-trigger.c' line='326' column='1'/>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/industrialio-trigger.c' line='327' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iio/industrialio-trigger.c' line='328' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='9add1da7'/>
+      </function-decl>
+      <function-decl name='__iio_trigger_register' mangled-name='__iio_trigger_register' filepath='drivers/iio/industrialio-trigger.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iio_trigger_register'>
+        <parameter type-id='54e54fbb' name='trig_info' filepath='drivers/iio/industrialio-trigger.c' line='66' column='1'/>
+        <parameter type-id='2730d015' name='this_mod' filepath='drivers/iio/industrialio-trigger.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2b0fb5b7'>
+        <parameter type-id='54e54fbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a86c42ee'>
+        <parameter type-id='54e54fbb'/>
+        <parameter type-id='226853d2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc03d04c'>
+        <parameter type-id='54e54fbb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <typedef-decl name='irqreturn_t' type-id='8086ea38' filepath='include/linux/irqreturn.h' line='17' column='1' id='4bdecfd7'/>
+      <enum-decl name='irqreturn' filepath='include/linux/irqreturn.h' line='11' column='1' id='8086ea38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_NONE' value='0'/>
+        <enumerator name='IRQ_HANDLED' value='1'/>
+        <enumerator name='IRQ_WAKE_THREAD' value='2'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iio/inkern.c' language='LANG_C89'>
+      <class-decl name='iio_channel' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/iio/consumer.h' line='23' column='1' id='63a6e12c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indio_dev' type-id='226853d2' visibility='default' filepath='include/linux/iio/consumer.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel' type-id='f74174a4' visibility='default' filepath='include/linux/iio/consumer.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/consumer.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='iio_chan_info_enum' filepath='include/linux/iio/types.h' line='34' column='1' id='cda049ab'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IIO_CHAN_INFO_RAW' value='0'/>
+        <enumerator name='IIO_CHAN_INFO_PROCESSED' value='1'/>
+        <enumerator name='IIO_CHAN_INFO_SCALE' value='2'/>
+        <enumerator name='IIO_CHAN_INFO_OFFSET' value='3'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBSCALE' value='4'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBBIAS' value='5'/>
+        <enumerator name='IIO_CHAN_INFO_PEAK' value='6'/>
+        <enumerator name='IIO_CHAN_INFO_PEAK_SCALE' value='7'/>
+        <enumerator name='IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW' value='8'/>
+        <enumerator name='IIO_CHAN_INFO_AVERAGE_RAW' value='9'/>
+        <enumerator name='IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY' value='10'/>
+        <enumerator name='IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY' value='11'/>
+        <enumerator name='IIO_CHAN_INFO_SAMP_FREQ' value='12'/>
+        <enumerator name='IIO_CHAN_INFO_FREQUENCY' value='13'/>
+        <enumerator name='IIO_CHAN_INFO_PHASE' value='14'/>
+        <enumerator name='IIO_CHAN_INFO_HARDWAREGAIN' value='15'/>
+        <enumerator name='IIO_CHAN_INFO_HYSTERESIS' value='16'/>
+        <enumerator name='IIO_CHAN_INFO_INT_TIME' value='17'/>
+        <enumerator name='IIO_CHAN_INFO_ENABLE' value='18'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBHEIGHT' value='19'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBWEIGHT' value='20'/>
+        <enumerator name='IIO_CHAN_INFO_DEBOUNCE_COUNT' value='21'/>
+        <enumerator name='IIO_CHAN_INFO_DEBOUNCE_TIME' value='22'/>
+        <enumerator name='IIO_CHAN_INFO_CALIBEMISSIVITY' value='23'/>
+        <enumerator name='IIO_CHAN_INFO_OVERSAMPLING_RATIO' value='24'/>
+      </enum-decl>
+      <class-decl name='iio_map' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/iio/machine.h' line='21' column='1' id='a8e1d4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adc_channel_label' type-id='80f4b756' visibility='default' filepath='include/linux/iio/machine.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='consumer_dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/iio/machine.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='consumer_channel' type-id='80f4b756' visibility='default' filepath='include/linux/iio/machine.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumer_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/iio/machine.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='63a6e12c' size-in-bits='64' id='2712709a'/>
+      <pointer-type-def type-id='a8e1d4e9' size-in-bits='64' id='58dde3b1'/>
+      <function-decl name='iio_write_channel_attribute' mangled-name='iio_write_channel_attribute' filepath='drivers/iio/inkern.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_write_channel_attribute'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='95e97e5e' name='val' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='95e97e5e' name='val2' filepath='drivers/iio/inkern.c' line='862' column='1'/>
+        <parameter type-id='cda049ab' name='attribute' filepath='drivers/iio/inkern.c' line='863' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_read_channel_raw' mangled-name='iio_read_channel_raw' filepath='drivers/iio/inkern.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_read_channel_raw'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='552' column='1'/>
+        <parameter type-id='7292109c' name='val' filepath='drivers/iio/inkern.c' line='552' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_read_channel_processed' mangled-name='iio_read_channel_processed' filepath='drivers/iio/inkern.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_read_channel_processed'>
+        <parameter type-id='2712709a' name='chan' filepath='drivers/iio/inkern.c' line='689' column='1'/>
+        <parameter type-id='7292109c' name='val' filepath='drivers/iio/inkern.c' line='689' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_map_array_unregister' mangled-name='iio_map_array_unregister' filepath='drivers/iio/inkern.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_map_array_unregister'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/inkern.c' line='58' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_map_array_register' mangled-name='iio_map_array_register' filepath='drivers/iio/inkern.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_map_array_register'>
+        <parameter type-id='226853d2' name='indio_dev' filepath='drivers/iio/inkern.c' line='27' column='1'/>
+        <parameter type-id='58dde3b1' name='maps' filepath='drivers/iio/inkern.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iio_channel_release' mangled-name='iio_channel_release' filepath='drivers/iio/inkern.c' line='347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_channel_release'>
+        <parameter type-id='2712709a' name='channel' filepath='drivers/iio/inkern.c' line='347' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iio_channel_get' mangled-name='iio_channel_get' filepath='drivers/iio/inkern.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iio_channel_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/inkern.c' line='330' column='1'/>
+        <parameter type-id='80f4b756' name='channel_name' filepath='drivers/iio/inkern.c' line='331' column='1'/>
+        <return type-id='2712709a'/>
+      </function-decl>
+      <function-decl name='devm_iio_channel_get' mangled-name='devm_iio_channel_get' filepath='drivers/iio/inkern.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iio_channel_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iio/inkern.c' line='375' column='1'/>
+        <parameter type-id='80f4b756' name='channel_name' filepath='drivers/iio/inkern.c' line='376' column='1'/>
+        <return type-id='2712709a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/input/ff-core.c' language='LANG_C89'>
+      <function-decl name='input_ff_create' mangled-name='input_ff_create' filepath='drivers/input/ff-core.c' line='305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_create'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/ff-core.c' line='305' column='1'/>
+        <parameter type-id='f0981eeb' name='max_effects' filepath='drivers/input/ff-core.c' line='305' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_ff_destroy' mangled-name='input_ff_destroy' filepath='drivers/input/ff-core.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_destroy'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/ff-core.c' line='365' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/input/ff-memless.c' language='LANG_C89'>
+      <pointer-type-def type-id='33d9b285' size-in-bits='64' id='2d974d69'/>
+      <function-decl name='input_ff_create_memless' mangled-name='input_ff_create_memless' filepath='drivers/input/ff-memless.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_ff_create_memless'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/ff-memless.c' line='510' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/input/ff-memless.c' line='510' column='1'/>
+        <parameter type-id='2d974d69' name='play_effect' filepath='drivers/input/ff-memless.c' line='511' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='33d9b285'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='98b22793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/input/input-mt.c' language='LANG_C89'>
+      <function-decl name='input_mt_sync_frame' mangled-name='input_mt_sync_frame' filepath='drivers/input/input-mt.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_sync_frame'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_mt_report_pointer_emulation' mangled-name='input_mt_report_pointer_emulation' filepath='drivers/input/input-mt.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_report_pointer_emulation'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='195' column='1'/>
+        <parameter type-id='b50a4934' name='use_count' filepath='drivers/input/input-mt.c' line='195' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_mt_report_slot_state' mangled-name='input_mt_report_slot_state' filepath='drivers/input/input-mt.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_report_slot_state'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='134' column='1'/>
+        <parameter type-id='f0981eeb' name='tool_type' filepath='drivers/input/input-mt.c' line='135' column='1'/>
+        <parameter type-id='b50a4934' name='active' filepath='drivers/input/input-mt.c' line='135' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='input_mt_init_slots' mangled-name='input_mt_init_slots' filepath='drivers/input/input-mt.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_init_slots'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='38' column='1'/>
+        <parameter type-id='f0981eeb' name='num_slots' filepath='drivers/input/input-mt.c' line='38' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/input/input-mt.c' line='39' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_mt_get_slot_by_key' mangled-name='input_mt_get_slot_by_key' filepath='drivers/input/input-mt.c' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_get_slot_by_key'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='472' column='1'/>
+        <parameter type-id='95e97e5e' name='key' filepath='drivers/input/input-mt.c' line='472' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_mt_destroy_slots' mangled-name='input_mt_destroy_slots' filepath='drivers/input/input-mt.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_mt_destroy_slots'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input-mt.c' line='110' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/input/input.c' language='LANG_C89'>
+      <class-decl name='input_dev_poller' is-struct='yes' visibility='default' is-declaration-only='yes' id='5c32afaa'/>
+      <array-type-def dimensions='1' type-id='84fc83c5' size-in-bits='192' id='1c159d57'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='infinite' id='5e8a3097'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e0d59f72' size-in-bits='infinite' id='5ef3b2ba'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='448' id='b7c7a4a5'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='768' id='88b5427c'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='64' id='43f871d4'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0791d6c8' size-in-bits='128' id='43f0230f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='192' id='728c8299'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='input_dev' size-in-bits='12864' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='132' column='1' id='2e443c2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uniq' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='d99ed569' visibility='default' filepath='include/linux/input.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='propbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='evbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='keybit' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='relbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='absbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mscbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ledbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sndbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='swbit' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hint_events_per_packet' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='keycodemax' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='keycodesize' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='keycode' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='setkeycode' type-id='bc9b7fcd' visibility='default' filepath='include/linux/input.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='getkeycode' type-id='94ce875a' visibility='default' filepath='include/linux/input.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ff' type-id='4a3a4f46' visibility='default' filepath='include/linux/input.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='poller' type-id='3b8264a8' visibility='default' filepath='include/linux/input.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='repeat_key' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/input.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rep' type-id='e4266c7e' visibility='default' filepath='include/linux/input.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mt' type-id='bf68c5dd' visibility='default' filepath='include/linux/input.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='absinfo' type-id='5c7f23c6' visibility='default' filepath='include/linux/input.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='key' type-id='d2b016f4' visibility='default' filepath='include/linux/input.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='led' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='snd' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sw' type-id='f066dd3c' visibility='default' filepath='include/linux/input.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='open' type-id='2f59f71f' visibility='default' filepath='include/linux/input.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='close' type-id='b44880ea' visibility='default' filepath='include/linux/input.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='flush' type-id='3cf704a7' visibility='default' filepath='include/linux/input.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='event' type-id='49091f8e' visibility='default' filepath='include/linux/input.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='grab' type-id='bef1b918' visibility='default' filepath='include/linux/input.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/input.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='users' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='going_away' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/input.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='num_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12256'>
+          <var-decl name='max_vals' type-id='f0981eeb' visibility='default' filepath='include/linux/input.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='vals' type-id='d09656fd' visibility='default' filepath='include/linux/input.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='devres_managed' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='timestamp' type-id='728c8299' visibility='default' filepath='include/linux/input.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='209' 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='59' column='1' id='d99ed569'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='63' 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='114' column='1' id='1731e728'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/input.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='len' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/input.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='index' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scancode' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/input.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ff_device' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='543' column='1' id='bccc4180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upload' type-id='a13b38d7' visibility='default' filepath='include/linux/input.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase' type-id='9589d936' visibility='default' filepath='include/linux/input.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='playback' type-id='feb3b3dd' visibility='default' filepath='include/linux/input.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_gain' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_autocenter' type-id='1e82f767' visibility='default' filepath='include/linux/input.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='bf55f18b' visibility='default' filepath='include/linux/input.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ffbit' type-id='f05e8e77' visibility='default' filepath='include/linux/input.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/input.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_effects' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='effects' type-id='98b22793' visibility='default' filepath='include/linux/input.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='effect_owners' type-id='5e8a3097' visibility='default' filepath='include/linux/input.h' line='565' 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='450' column='1' id='0c6ad5d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='trigger' type-id='bd8e6f06' visibility='default' filepath='include/uapi/linux/input.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='replay' type-id='74a8f9e9' visibility='default' filepath='include/uapi/linux/input.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='af36d098' visibility='default' filepath='include/uapi/linux/input.h' line='463' 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='316' column='1' id='bd8e6f06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='button' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='interval' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='318' 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='306' column='1' id='74a8f9e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='delay' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='308' 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='457' column='1' id='af36d098'>
+        <data-member access='public'>
+          <var-decl name='constant' type-id='777eafbe' visibility='default' filepath='include/uapi/linux/input.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ramp' type-id='83c35232' visibility='default' filepath='include/uapi/linux/input.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='periodic' type-id='106cd915' visibility='default' filepath='include/uapi/linux/input.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='condition' type-id='1c159d57' visibility='default' filepath='include/uapi/linux/input.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rumble' type-id='6e5c8c15' visibility='default' filepath='include/uapi/linux/input.h' line='462' 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='345' column='1' id='777eafbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='347' 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='333' column='1' id='95dfde06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attack_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='attack_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fade_length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='fade_level' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='337' 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='356' column='1' id='83c35232'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='end_level' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='359' 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='401' column='1' id='106cd915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='waveform' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='period' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='magnitude' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='offset' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phase' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='envelope' type-id='95dfde06' visibility='default' filepath='include/uapi/linux/input.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='custom_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/input.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='custom_data' type-id='54c34bcf' visibility='default' filepath='include/uapi/linux/input.h' line='411' 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='372' column='1' id='84fc83c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='right_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='left_saturation' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='right_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='left_coeff' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deadband' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='center' type-id='b55def60' visibility='default' filepath='include/uapi/linux/input.h' line='380' 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='422' column='1' id='6e5c8c15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='strong_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='weak_magnitude' type-id='d315442e' visibility='default' filepath='include/uapi/linux/input.h' line='424' 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='43' column='1' id='d995db0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trkid' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_slots' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slot' type-id='95e97e5e' visibility='default' filepath='include/linux/input/mt.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='red' type-id='7292109c' visibility='default' filepath='include/linux/input/mt.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='slots' type-id='5ef3b2ba' visibility='default' filepath='include/linux/input/mt.h' line='50' 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='27' column='1' id='e0d59f72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abs' type-id='b7c7a4a5' visibility='default' filepath='include/linux/input/mt.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='frame' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='key' type-id='f0981eeb' visibility='default' filepath='include/linux/input/mt.h' line='30' 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='90' column='1' id='a7b3c380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fuzz' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flat' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='resolution' type-id='3158a266' visibility='default' filepath='include/uapi/linux/input.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handle' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='345' column='1' id='18448baa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='74b427eb' visibility='default' filepath='include/linux/input.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='4938abae' visibility='default' filepath='include/linux/input.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='h_node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='input_handler' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/input.h' line='308' column='1' id='0be82508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/input.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='37a787dc' visibility='default' filepath='include/linux/input.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='events' type-id='ddacdfe6' visibility='default' filepath='include/linux/input.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='95325033' visibility='default' filepath='include/linux/input.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='match' type-id='ff015e22' visibility='default' filepath='include/linux/input.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='5c6fb334' visibility='default' filepath='include/linux/input.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='start' type-id='3e15391d' visibility='default' filepath='include/linux/input.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='legacy_minors' type-id='b50a4934' visibility='default' filepath='include/linux/input.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/input.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/input.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id_table' type-id='cf2e76b1' visibility='default' filepath='include/linux/input.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='h_list' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/input.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/input.h' line='330' 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='c058e0bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' 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='d315442e' 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='3158a266' 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='340' column='1' id='1d6edf8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bustype' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='product' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='version' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='evbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='keybit' type-id='88b5427c' visibility='default' filepath='include/linux/mod_devicetable.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='relbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='absbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mscbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ledbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sndbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ffbit' type-id='43f0230f' visibility='default' filepath='include/linux/mod_devicetable.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='propbit' type-id='43f871d4' visibility='default' filepath='include/linux/mod_devicetable.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b55def60' size-in-bits='64' id='54c34bcf'/>
+      <qualified-type-def type-id='1d6edf8e' const='yes' id='c184e101'/>
+      <pointer-type-def type-id='c184e101' size-in-bits='64' id='cf2e76b1'/>
+      <qualified-type-def type-id='1731e728' const='yes' id='52c69ba9'/>
+      <pointer-type-def type-id='52c69ba9' size-in-bits='64' id='d1a6cf39'/>
+      <qualified-type-def type-id='c058e0bd' const='yes' id='ed1a1b22'/>
+      <pointer-type-def type-id='ed1a1b22' size-in-bits='64' id='48188d98'/>
+      <pointer-type-def type-id='bccc4180' size-in-bits='64' id='4a3a4f46'/>
+      <pointer-type-def type-id='0c6ad5d3' size-in-bits='64' id='98b22793'/>
+      <pointer-type-def type-id='a7b3c380' size-in-bits='64' id='5c7f23c6'/>
+      <pointer-type-def type-id='2e443c2b' size-in-bits='64' id='74b427eb'/>
+      <pointer-type-def type-id='5c32afaa' size-in-bits='64' id='3b8264a8'/>
+      <pointer-type-def type-id='18448baa' size-in-bits='64' id='bef1b918'/>
+      <pointer-type-def type-id='0be82508' size-in-bits='64' id='4938abae'/>
+      <pointer-type-def type-id='1731e728' size-in-bits='64' id='df3f4fce'/>
+      <pointer-type-def type-id='d995db0d' size-in-bits='64' id='bf68c5dd'/>
+      <pointer-type-def type-id='c058e0bd' size-in-bits='64' id='d09656fd'/>
+      <pointer-type-def type-id='7364da7b' size-in-bits='64' id='2f59f71f'/>
+      <pointer-type-def type-id='df042c09' size-in-bits='64' id='bc9b7fcd'/>
+      <pointer-type-def type-id='83c7cbd3' size-in-bits='64' id='a13b38d7'/>
+      <pointer-type-def type-id='8e3d9a4b' size-in-bits='64' id='3cf704a7'/>
+      <pointer-type-def type-id='3fdac390' size-in-bits='64' id='94ce875a'/>
+      <pointer-type-def type-id='2a0a5404' size-in-bits='64' id='9589d936'/>
+      <pointer-type-def type-id='103ba521' size-in-bits='64' id='feb3b3dd'/>
+      <pointer-type-def type-id='136c624c' size-in-bits='64' id='49091f8e'/>
+      <pointer-type-def type-id='1086c08a' size-in-bits='64' id='5c6fb334'/>
+      <pointer-type-def type-id='29964e7f' size-in-bits='64' id='95325033'/>
+      <pointer-type-def type-id='74bea618' size-in-bits='64' id='ff015e22'/>
+      <pointer-type-def type-id='00a1b58f' size-in-bits='64' id='bf55f18b'/>
+      <pointer-type-def type-id='ce79ab50' size-in-bits='64' id='b44880ea'/>
+      <pointer-type-def type-id='6356717b' size-in-bits='64' id='1e82f767'/>
+      <pointer-type-def type-id='ff3151a1' size-in-bits='64' id='3e15391d'/>
+      <pointer-type-def type-id='ff7a347c' size-in-bits='64' id='ddacdfe6'/>
+      <pointer-type-def type-id='d6ad270a' size-in-bits='64' id='37a787dc'/>
+      <function-decl name='input_allocate_device' mangled-name='input_allocate_device' filepath='drivers/input/input.c' line='1812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_allocate_device'>
+        <return type-id='74b427eb'/>
+      </function-decl>
+      <function-decl name='input_unregister_handler' mangled-name='input_unregister_handler' filepath='drivers/input/input.c' line='2319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_handler'>
+        <parameter type-id='4938abae' name='handler' filepath='drivers/input/input.c' line='2319' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_register_handler' mangled-name='input_register_handler' filepath='drivers/input/input.c' line='2289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_handler'>
+        <parameter type-id='4938abae' name='handler' filepath='drivers/input/input.c' line='2289' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_register_handle' mangled-name='input_register_handle' filepath='drivers/input/input.c' line='2380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_handle'>
+        <parameter type-id='bef1b918' name='handle' filepath='drivers/input/input.c' line='2380' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_open_device' mangled-name='input_open_device' filepath='drivers/input/input.c' line='599' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_open_device'>
+        <parameter type-id='bef1b918' name='handle' filepath='drivers/input/input.c' line='599' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_unregister_handle' mangled-name='input_unregister_handle' filepath='drivers/input/input.c' line='2430' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_handle'>
+        <parameter type-id='bef1b918' name='handle' filepath='drivers/input/input.c' line='2430' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_close_device' mangled-name='input_close_device' filepath='drivers/input/input.c' line='670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_close_device'>
+        <parameter type-id='bef1b918' name='handle' filepath='drivers/input/input.c' line='670' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_unregister_device' mangled-name='input_unregister_device' filepath='drivers/input/input.c' line='2262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_unregister_device'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='2262' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_set_capability' mangled-name='input_set_capability' filepath='drivers/input/input.c' line='1979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_set_capability'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='1979' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/input/input.c' line='1979' column='1'/>
+        <parameter type-id='f0981eeb' name='code' filepath='drivers/input/input.c' line='1979' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_set_abs_params' mangled-name='input_set_abs_params' filepath='drivers/input/input.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_set_abs_params'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='504' column='1'/>
+        <parameter type-id='f0981eeb' name='axis' filepath='drivers/input/input.c' line='504' column='1'/>
+        <parameter type-id='95e97e5e' name='min' filepath='drivers/input/input.c' line='505' column='1'/>
+        <parameter type-id='95e97e5e' name='max' filepath='drivers/input/input.c' line='505' column='1'/>
+        <parameter type-id='95e97e5e' name='fuzz' filepath='drivers/input/input.c' line='505' column='1'/>
+        <parameter type-id='95e97e5e' name='flat' filepath='drivers/input/input.c' line='505' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_scancode_to_scalar' mangled-name='input_scancode_to_scalar' filepath='drivers/input/input.c' line='763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_scancode_to_scalar'>
+        <parameter type-id='d1a6cf39' name='ke' filepath='drivers/input/input.c' line='763' column='1'/>
+        <parameter type-id='807869d3' name='scancode' filepath='drivers/input/input.c' line='764' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_register_device' mangled-name='input_register_device' filepath='drivers/input/input.c' line='2155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_register_device'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='2155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='input_free_device' mangled-name='input_free_device' filepath='drivers/input/input.c' line='1917' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_free_device'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='1917' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_event' mangled-name='input_event' filepath='drivers/input/input.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_event'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='433' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='drivers/input/input.c' line='434' column='1'/>
+        <parameter type-id='f0981eeb' name='code' filepath='drivers/input/input.c' line='434' column='1'/>
+        <parameter type-id='95e97e5e' name='value' filepath='drivers/input/input.c' line='434' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='input_alloc_absinfo' mangled-name='input_alloc_absinfo' filepath='drivers/input/input.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='input_alloc_absinfo'>
+        <parameter type-id='74b427eb' name='dev' filepath='drivers/input/input.c' line='486' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_input_allocate_device' mangled-name='devm_input_allocate_device' filepath='drivers/input/input.c' line='1877' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_input_allocate_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/input/input.c' line='1877' column='1'/>
+        <return type-id='74b427eb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7364da7b'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df042c09'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='d1a6cf39'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83c7cbd3'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='98b22793'/>
+        <parameter type-id='98b22793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e3d9a4b'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3fdac390'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='df3f4fce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a0a5404'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='103ba521'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='136c624c'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1086c08a'>
+        <parameter type-id='4938abae'/>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='cf2e76b1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29964e7f'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74bea618'>
+        <parameter type-id='4938abae'/>
+        <parameter type-id='74b427eb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00a1b58f'>
+        <parameter type-id='4a3a4f46'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ce79ab50'>
+        <parameter type-id='74b427eb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6356717b'>
+        <parameter type-id='74b427eb'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff3151a1'>
+        <parameter type-id='bef1b918'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff7a347c'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='48188d98'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6ad270a'>
+        <parameter type-id='bef1b918'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/input/serio/serio.c' language='LANG_C89'>
+      <class-decl name='serio' size-in-bits='10496' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='21' column='1' id='67eab439'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serio.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='phys' type-id='16dc656a' visibility='default' filepath='include/linux/serio.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='firmware_id' type-id='e3204322' visibility='default' filepath='include/linux/serio.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='id' type-id='6119d604' visibility='default' filepath='include/linux/serio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='write' type-id='759d27dc' visibility='default' filepath='include/linux/serio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='open' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='close' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='start' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='stop' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='parent' type-id='95dc69d1' visibility='default' filepath='include/linux/serio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='child_node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/serio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='drv' type-id='1065554a' visibility='default' filepath='include/linux/serio.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='drv_mutex' type-id='925167dc' visibility='default' filepath='include/linux/serio.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serio.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/serio.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='ps2_cmd_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/serio.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serio.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serio_device_id' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='236' column='1' id='6119d604'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='extra' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='id' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='proto' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serio_driver' size-in-bits='2112' is-struct='yes' visibility='default' filepath='include/linux/serio.h' line='70' column='1' id='1dad932c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/serio.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='3e95668f' visibility='default' filepath='include/linux/serio.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='manual_bind' type-id='b50a4934' visibility='default' filepath='include/linux/serio.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_wakeup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='interrupt' type-id='a6d9ffb5' visibility='default' filepath='include/linux/serio.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='3b070d34' visibility='default' filepath='include/linux/serio.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fast_reconnect' type-id='88cd8be5' visibility='default' filepath='include/linux/serio.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disconnect' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3e5cde94' visibility='default' filepath='include/linux/serio.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/serio.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serio.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6119d604' const='yes' id='add714bf'/>
+      <pointer-type-def type-id='add714bf' size-in-bits='64' id='3e95668f'/>
+      <pointer-type-def type-id='09fcb6b1' size-in-bits='64' id='88cd8be5'/>
+      <pointer-type-def type-id='8faf705a' size-in-bits='64' id='3b070d34'/>
+      <pointer-type-def type-id='9da48162' size-in-bits='64' id='759d27dc'/>
+      <pointer-type-def type-id='67eab439' size-in-bits='64' id='95dc69d1'/>
+      <pointer-type-def type-id='1dad932c' size-in-bits='64' id='1065554a'/>
+      <pointer-type-def type-id='5c07a611' size-in-bits='64' id='a6d9ffb5'/>
+      <pointer-type-def type-id='c315836a' size-in-bits='64' id='3e5cde94'/>
+      <function-decl name='serio_unregister_port' mangled-name='serio_unregister_port' filepath='drivers/input/serio/serio.c' line='705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_unregister_port'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='705' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_unregister_driver' mangled-name='serio_unregister_driver' filepath='drivers/input/serio/serio.c' line='853' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_unregister_driver'>
+        <parameter type-id='1065554a' name='drv' filepath='drivers/input/serio/serio.c' line='853' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_reconnect' mangled-name='serio_reconnect' filepath='drivers/input/serio/serio.c' line='685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_reconnect'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='685' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serio_open' mangled-name='serio_open' filepath='drivers/input/serio/serio.c' line='971' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_open'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='971' column='1'/>
+        <parameter type-id='1065554a' name='drv' filepath='drivers/input/serio/serio.c' line='971' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serio_interrupt' mangled-name='serio_interrupt' filepath='drivers/input/serio/serio.c' line='993' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_interrupt'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='993' column='1'/>
+        <parameter type-id='002ac4a6' name='data' filepath='drivers/input/serio/serio.c' line='994' column='1'/>
+        <parameter type-id='f0981eeb' name='dfl' filepath='drivers/input/serio/serio.c' line='994' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='serio_close' mangled-name='serio_close' filepath='drivers/input/serio/serio.c' line='984' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serio_close'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='984' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__serio_register_port' mangled-name='__serio_register_port' filepath='drivers/input/serio/serio.c' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__serio_register_port'>
+        <parameter type-id='95dc69d1' name='serio' filepath='drivers/input/serio/serio.c' line='695' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/input/serio/serio.c' line='695' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__serio_register_driver' mangled-name='__serio_register_driver' filepath='drivers/input/serio/serio.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__serio_register_driver'>
+        <parameter type-id='1065554a' name='drv' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/input/serio/serio.c' line='814' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='09fcb6b1'>
+        <parameter type-id='95dc69d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8faf705a'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='1065554a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9da48162'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c07a611'>
+        <parameter type-id='95dc69d1'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c315836a'>
+        <parameter type-id='95dc69d1' name='serio'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='925167dc' size-in-bits='64' id='e0ea832a'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/interconnect/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='29f471c5' size-in-bits='infinite' id='ebc5312d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='icc_node' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/interconnect-provider.h' line='76' column='1' id='c2e5ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/interconnect-provider.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interconnect-provider.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='links' type-id='c824cd57' visibility='default' filepath='include/linux/interconnect-provider.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_links' type-id='b59d7dce' visibility='default' filepath='include/linux/interconnect-provider.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='provider' type-id='e68dc824' visibility='default' filepath='include/linux/interconnect-provider.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='search_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reverse' type-id='18d76f87' visibility='default' filepath='include/linux/interconnect-provider.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_traversed' type-id='f9b06939' visibility='default' filepath='include/linux/interconnect-provider.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='req_list' type-id='e151255a' visibility='default' filepath='include/linux/interconnect-provider.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_bw' type-id='19c2251e' visibility='default' filepath='include/linux/interconnect-provider.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='peak_bw' type-id='19c2251e' visibility='default' filepath='include/linux/interconnect-provider.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/interconnect-provider.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_provider' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/interconnect-provider.h' line='46' column='1' id='0e59314e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='provider_list' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nodes' type-id='72f469ec' visibility='default' filepath='include/linux/interconnect-provider.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set' type-id='13229469' visibility='default' filepath='include/linux/interconnect-provider.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aggregate' type-id='209ddc8a' visibility='default' filepath='include/linux/interconnect-provider.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pre_aggregate' type-id='17c9b422' visibility='default' filepath='include/linux/interconnect-provider.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='xlate' type-id='baffee98' visibility='default' filepath='include/linux/interconnect-provider.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/interconnect-provider.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/interconnect-provider.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/interconnect-provider.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_path' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/interconnect/internal.h' line='36' column='1' id='9da806d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/interconnect/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_nodes' type-id='b59d7dce' visibility='default' filepath='drivers/interconnect/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reqs' type-id='ebc5312d' visibility='default' filepath='drivers/interconnect/internal.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='icc_req' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/interconnect/internal.h' line='21' column='1' id='29f471c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='req_node' type-id='03a4a074' visibility='default' filepath='drivers/interconnect/internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='node' type-id='18d76f87' visibility='default' filepath='drivers/interconnect/internal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/interconnect/internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='avg_bw' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='peak_bw' type-id='19c2251e' visibility='default' filepath='drivers/interconnect/internal.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c2e5ce3f' size-in-bits='64' id='18d76f87'/>
+      <pointer-type-def type-id='8695633e' size-in-bits='64' id='baffee98'/>
+      <pointer-type-def type-id='18d76f87' size-in-bits='64' id='c824cd57'/>
+      <pointer-type-def type-id='9da806d8' size-in-bits='64' id='b5fdec5e'/>
+      <pointer-type-def type-id='0e59314e' size-in-bits='64' id='e68dc824'/>
+      <pointer-type-def type-id='f3dd5585' size-in-bits='64' id='13229469'/>
+      <pointer-type-def type-id='b32e5b88' size-in-bits='64' id='209ddc8a'/>
+      <pointer-type-def type-id='609e4600' size-in-bits='64' id='17c9b422'/>
+      <function-decl name='of_icc_xlate_onecell' mangled-name='of_icc_xlate_onecell' filepath='drivers/interconnect/core.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_icc_xlate_onecell'>
+        <parameter type-id='51a94113' name='spec' filepath='drivers/interconnect/core.c' line='234' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/interconnect/core.c' line='235' column='1'/>
+        <return type-id='18d76f87'/>
+      </function-decl>
+      <function-decl name='of_icc_get' mangled-name='of_icc_get' filepath='drivers/interconnect/core.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_icc_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/interconnect/core.c' line='294' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/interconnect/core.c' line='294' column='1'/>
+        <return type-id='b5fdec5e'/>
+      </function-decl>
+      <function-decl name='icc_set_tag' mangled-name='icc_set_tag' filepath='drivers/interconnect/core.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_set_tag'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='391' column='1'/>
+        <parameter type-id='19c2251e' name='tag' filepath='drivers/interconnect/core.c' line='391' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_set_bw' mangled-name='icc_set_bw' filepath='drivers/interconnect/core.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_set_bw'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <parameter type-id='19c2251e' name='avg_bw' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <parameter type-id='19c2251e' name='peak_bw' filepath='drivers/interconnect/core.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_put' mangled-name='icc_put' filepath='drivers/interconnect/core.c' line='527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_put'>
+        <parameter type-id='b5fdec5e' name='path' filepath='drivers/interconnect/core.c' line='527' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_provider_del' mangled-name='icc_provider_del' filepath='drivers/interconnect/core.c' line='781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_provider_del'>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='781' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_provider_add' mangled-name='icc_provider_add' filepath='drivers/interconnect/core.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_provider_add'>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='755' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_node_destroy' mangled-name='icc_node_destroy' filepath='drivers/interconnect/core.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_destroy'>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/interconnect/core.c' line='603' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_node_del' mangled-name='icc_node_del' filepath='drivers/interconnect/core.c' line='739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_del'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_node_create' mangled-name='icc_node_create' filepath='drivers/interconnect/core.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_create'>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/interconnect/core.c' line='585' column='1'/>
+        <return type-id='18d76f87'/>
+      </function-decl>
+      <function-decl name='icc_node_add' mangled-name='icc_node_add' filepath='drivers/interconnect/core.c' line='724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_node_add'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='724' column='1'/>
+        <parameter type-id='e68dc824' name='provider' filepath='drivers/interconnect/core.c' line='724' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='icc_link_create' mangled-name='icc_link_create' filepath='drivers/interconnect/core.c' line='634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_link_create'>
+        <parameter type-id='18d76f87' name='node' filepath='drivers/interconnect/core.c' line='634' column='1'/>
+        <parameter type-id='2448a865' name='dst_id' filepath='drivers/interconnect/core.c' line='634' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='icc_get' mangled-name='icc_get' filepath='drivers/interconnect/core.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icc_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <parameter type-id='2448a865' name='src_id' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <parameter type-id='2448a865' name='dst_id' filepath='drivers/interconnect/core.c' line='488' column='1'/>
+        <return type-id='b5fdec5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8695633e'>
+        <parameter type-id='51a94113' name='spec'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='18d76f87'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3dd5585'>
+        <parameter type-id='18d76f87'/>
+        <parameter type-id='18d76f87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b32e5b88'>
+        <parameter type-id='18d76f87'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='609e4600'>
+        <parameter type-id='18d76f87'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iommu/dma-iommu.c' language='LANG_C89'>
+      <function-decl name='iommu_put_dma_cookie' mangled-name='iommu_put_dma_cookie' filepath='drivers/iommu/dma-iommu.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_put_dma_cookie'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/dma-iommu.c' line='130' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_get_dma_cookie' mangled-name='iommu_get_dma_cookie' filepath='drivers/iommu/dma-iommu.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_get_dma_cookie'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/dma-iommu.c' line='78' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_dma_reserve_iova' mangled-name='iommu_dma_reserve_iova' filepath='drivers/iommu/dma-iommu.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_dma_reserve_iova'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/dma-iommu.c' line='360' column='1'/>
+        <parameter type-id='cf29c9b3' name='base' filepath='drivers/iommu/dma-iommu.c' line='360' column='1'/>
+        <parameter type-id='91ce1af9' name='size' filepath='drivers/iommu/dma-iommu.c' line='361' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_dma_get_resv_regions' mangled-name='iommu_dma_get_resv_regions' filepath='drivers/iommu/dma-iommu.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_dma_get_resv_regions'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/dma-iommu.c' line='160' column='1'/>
+        <parameter type-id='e84b031a' name='list' filepath='drivers/iommu/dma-iommu.c' line='160' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iommu/io-pgtable.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='64' id='1872161b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='io_pgtable_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='137' column='1' id='37b2770e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='8f5dd5a0' visibility='default' filepath='include/linux/io-pgtable.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unmap' type-id='7ec53559' visibility='default' filepath='include/linux/io-pgtable.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='iova_to_phys' type-id='92b191e1' visibility='default' filepath='include/linux/io-pgtable.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='io_pgtable_fmt' filepath='include/linux/io-pgtable.h' line='11' column='1' id='28637b68'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ARM_32_LPAE_S1' value='0'/>
+        <enumerator name='ARM_32_LPAE_S2' value='1'/>
+        <enumerator name='ARM_64_LPAE_S1' value='2'/>
+        <enumerator name='ARM_64_LPAE_S2' value='3'/>
+        <enumerator name='ARM_V7S' value='4'/>
+        <enumerator name='ARM_MALI_LPAE' value='5'/>
+        <enumerator name='IO_PGTABLE_NUM_FMTS' value='6'/>
+      </enum-decl>
+      <class-decl name='io_pgtable_cfg' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='64' column='1' id='5470719c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quirks' type-id='7359adad' visibility='default' filepath='include/linux/io-pgtable.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pgsize_bitmap' type-id='7359adad' visibility='default' filepath='include/linux/io-pgtable.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ias' type-id='f0981eeb' visibility='default' filepath='include/linux/io-pgtable.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oas' type-id='f0981eeb' visibility='default' filepath='include/linux/io-pgtable.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='coherent_walk' type-id='b50a4934' visibility='default' filepath='include/linux/io-pgtable.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tlb' type-id='8e043c8f' visibility='default' filepath='include/linux/io-pgtable.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iommu_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/io-pgtable.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='a376e215' visibility='default' filepath='include/linux/io-pgtable.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iommu_flush_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='39' column='1' id='4df659d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tlb_flush_all' type-id='b7f9d8e6' visibility='default' filepath='include/linux/io-pgtable.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tlb_flush_walk' type-id='cbe8ceae' visibility='default' filepath='include/linux/io-pgtable.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tlb_flush_leaf' type-id='cbe8ceae' visibility='default' filepath='include/linux/io-pgtable.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tlb_add_page' type-id='2adcf411' visibility='default' filepath='include/linux/io-pgtable.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='101' column='1' id='a376e215'>
+        <data-member access='public'>
+          <var-decl name='arm_lpae_s1_cfg' type-id='f8050897' visibility='default' filepath='include/linux/io-pgtable.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='arm_lpae_s2_cfg' type-id='53b1ef5a' visibility='default' filepath='include/linux/io-pgtable.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='arm_v7s_cfg' type-id='160960d1' visibility='default' filepath='include/linux/io-pgtable.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='arm_mali_lpae_cfg' type-id='c145f506' visibility='default' filepath='include/linux/io-pgtable.h' line='123' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='102' column='1' id='f8050897'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttbr' type-id='24a375b2' visibility='default' filepath='include/linux/io-pgtable.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mair' type-id='24a375b2' visibility='default' filepath='include/linux/io-pgtable.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='108' column='1' id='53b1ef5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vttbr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vtcr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='113' column='1' id='160960d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ttbr' type-id='1872161b' visibility='default' filepath='include/linux/io-pgtable.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tcr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nmrr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prrr' type-id='19c2251e' visibility='default' filepath='include/linux/io-pgtable.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/io-pgtable.h' line='120' column='1' id='c145f506'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transtab' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memattr' type-id='91ce1af9' visibility='default' filepath='include/linux/io-pgtable.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4df659d8' const='yes' id='9ecaa6bf'/>
+      <pointer-type-def type-id='9ecaa6bf' size-in-bits='64' id='8e043c8f'/>
+      <pointer-type-def type-id='d077537e' size-in-bits='64' id='8f5dd5a0'/>
+      <pointer-type-def type-id='5470719c' size-in-bits='64' id='a6481aea'/>
+      <pointer-type-def type-id='37b2770e' size-in-bits='64' id='bf4bdb64'/>
+      <pointer-type-def type-id='d5568bdd' size-in-bits='64' id='92b191e1'/>
+      <pointer-type-def type-id='d3fc5c05' size-in-bits='64' id='7ec53559'/>
+      <pointer-type-def type-id='e6af544d' size-in-bits='64' id='2adcf411'/>
+      <pointer-type-def type-id='925ea354' size-in-bits='64' id='cbe8ceae'/>
+      <function-decl name='free_io_pgtable_ops' mangled-name='free_io_pgtable_ops' filepath='drivers/iommu/io-pgtable.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_io_pgtable_ops'>
+        <parameter type-id='bf4bdb64' name='ops' filepath='drivers/iommu/io-pgtable.c' line='59' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_io_pgtable_ops' mangled-name='alloc_io_pgtable_ops' filepath='drivers/iommu/io-pgtable.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_io_pgtable_ops'>
+        <parameter type-id='28637b68' name='fmt' filepath='drivers/iommu/io-pgtable.c' line='29' column='1'/>
+        <parameter type-id='a6481aea' name='cfg' filepath='drivers/iommu/io-pgtable.c' line='30' column='1'/>
+        <parameter type-id='eaa32e2f' name='cookie' filepath='drivers/iommu/io-pgtable.c' line='31' column='1'/>
+        <return type-id='bf4bdb64'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d077537e'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5568bdd'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='2522883d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d3fc5c05'>
+        <parameter type-id='bf4bdb64'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c63cc3f'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6af544d'>
+        <parameter type-id='1c63cc3f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='925ea354'>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iommu/iommu-sysfs.c' language='LANG_C89'>
+      <function-decl name='iommu_device_unlink' mangled-name='iommu_device_unlink' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_unlink'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1'/>
+        <parameter type-id='fa0b179b' name='link' filepath='drivers/iommu/iommu-sysfs.c' line='127' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_device_sysfs_remove' mangled-name='iommu_device_sysfs_remove' filepath='drivers/iommu/iommu-sysfs.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_sysfs_remove'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='92' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_device_sysfs_add' mangled-name='iommu_device_sysfs_add' filepath='drivers/iommu/iommu-sysfs.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_sysfs_add'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='54' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/iommu/iommu-sysfs.c' line='55' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='drivers/iommu/iommu-sysfs.c' line='56' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/iommu/iommu-sysfs.c' line='57' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_device_link' mangled-name='iommu_device_link' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_link'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1'/>
+        <parameter type-id='fa0b179b' name='link' filepath='drivers/iommu/iommu-sysfs.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='c67e920d' size-in-bits='64' id='2f00283d'/>
+      <class-decl name='iommu_device' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='323' column='1' id='c67e920d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/iommu.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iommu/iommu.c' language='LANG_C89'>
+      <class-decl name='iommu_device' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/iommu.h' line='323' column='1' id='c67e920d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/iommu.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='f1ac64d0' visibility='default' filepath='include/linux/iommu.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/iommu.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/iommu.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e6c6c6cd' size-in-bits='64' id='92d15ae9'/>
+      <pointer-type-def type-id='c67e920d' size-in-bits='64' id='2f00283d'/>
+      <function-decl name='iommu_group_alloc' mangled-name='iommu_group_alloc' filepath='drivers/iommu/iommu.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_alloc'>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_register_device_fault_handler' mangled-name='iommu_register_device_fault_handler' filepath='drivers/iommu/iommu.c' line='974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_register_device_fault_handler'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='974' column='1'/>
+        <parameter type-id='a84f5b46' name='handler' filepath='drivers/iommu/iommu.c' line='975' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='976' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='report_iommu_fault' mangled-name='report_iommu_fault' filepath='drivers/iommu/iommu.c' line='2155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='report_iommu_fault'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2155' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2155' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2156' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='drivers/iommu/iommu.c' line='2156' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_device_group' mangled-name='pci_device_group' filepath='drivers/iommu/iommu.c' line='1290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_device_group'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1290' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_unregister_device_fault_handler' mangled-name='iommu_unregister_device_fault_handler' filepath='drivers/iommu/iommu.c' line='1019' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_unregister_device_fault_handler'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1019' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_unmap' mangled-name='iommu_unmap' filepath='drivers/iommu/iommu.c' line='2027' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_unmap'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2027' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2028' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='2028' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='iommu_set_fault_handler' mangled-name='iommu_set_fault_handler' filepath='drivers/iommu/iommu.c' line='1611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_set_fault_handler'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1611' column='1'/>
+        <parameter type-id='a01c3626' name='handler' filepath='drivers/iommu/iommu.c' line='1612' column='1'/>
+        <parameter type-id='eaa32e2f' name='token' filepath='drivers/iommu/iommu.c' line='1613' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_report_device_fault' mangled-name='iommu_report_device_fault' filepath='drivers/iommu/iommu.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_report_device_fault'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1059' column='1'/>
+        <parameter type-id='af233abc' name='evt' filepath='drivers/iommu/iommu.c' line='1059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_present' mangled-name='iommu_present' filepath='drivers/iommu/iommu.c' line='1584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_present'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1584' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='iommu_map_sg' mangled-name='iommu_map_sg' filepath='drivers/iommu/iommu.c' line='2096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_map_sg'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2096' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='2096' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/iommu/iommu.c' line='2097' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='drivers/iommu/iommu.c' line='2097' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2097' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='iommu_map' mangled-name='iommu_map' filepath='drivers/iommu/iommu.c' line='1958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_map'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1958' column='1'/>
+        <parameter type-id='7359adad' name='iova' filepath='drivers/iommu/iommu.c' line='1958' column='1'/>
+        <parameter type-id='2522883d' name='paddr' filepath='drivers/iommu/iommu.c' line='1959' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/iommu/iommu.c' line='1959' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='1959' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_iova_to_phys' mangled-name='iommu_iova_to_phys' filepath='drivers/iommu/iommu.c' line='1847' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_iova_to_phys'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1847' column='1'/>
+        <parameter type-id='cf29c9b3' name='iova' filepath='drivers/iommu/iommu.c' line='1847' column='1'/>
+        <return type-id='2522883d'/>
+      </function-decl>
+      <function-decl name='iommu_group_set_name' mangled-name='iommu_group_set_name' filepath='drivers/iommu/iommu.c' line='613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_set_name'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='613' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/iommu/iommu.c' line='613' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_group_set_iommudata' mangled-name='iommu_group_set_iommudata' filepath='drivers/iommu/iommu.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_set_iommudata'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='597' column='1'/>
+        <parameter type-id='eaa32e2f' name='iommu_data' filepath='drivers/iommu/iommu.c' line='597' column='1'/>
+        <parameter type-id='b7f9d8e6' name='release' filepath='drivers/iommu/iommu.c' line='598' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_remove_device' mangled-name='iommu_group_remove_device' filepath='drivers/iommu/iommu.c' line='790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_remove_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='790' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_register_notifier' mangled-name='iommu_group_register_notifier' filepath='drivers/iommu/iommu.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_register_notifier'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='935' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/iommu/iommu.c' line='936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_group_ref_get' mangled-name='iommu_group_ref_get' filepath='drivers/iommu/iommu.c' line='905' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_ref_get'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='905' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_put' mangled-name='iommu_group_put' filepath='drivers/iommu/iommu.c' line='919' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_put'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='919' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_group_get_iommudata' mangled-name='iommu_group_get_iommudata' filepath='drivers/iommu/iommu.c' line='581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get_iommudata'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='581' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='iommu_group_get_for_dev' mangled-name='iommu_group_get_for_dev' filepath='drivers/iommu/iommu.c' line='1377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get_for_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1377' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_get' mangled-name='iommu_group_get' filepath='drivers/iommu/iommu.c' line='887' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='887' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='iommu_group_for_each_dev' mangled-name='iommu_group_for_each_dev' filepath='drivers/iommu/iommu.c' line='866' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_group_for_each_dev'>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='866' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='866' column='1'/>
+        <parameter type-id='92d15ae9' name='fn' filepath='drivers/iommu/iommu.c' line='867' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_get_domain_for_dev' mangled-name='iommu_get_domain_for_dev' filepath='drivers/iommu/iommu.c' line='1735' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_get_domain_for_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1735' column='1'/>
+        <return type-id='bff05edb'/>
+      </function-decl>
+      <function-decl name='iommu_fwspec_free' mangled-name='iommu_fwspec_free' filepath='drivers/iommu/iommu.c' line='2387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_fwspec_free'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2387' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_fwspec_add_ids' mangled-name='iommu_fwspec_add_ids' filepath='drivers/iommu/iommu.c' line='2399' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_fwspec_add_ids'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='2399' column='1'/>
+        <parameter type-id='f9409001' name='ids' filepath='drivers/iommu/iommu.c' line='2399' column='1'/>
+        <parameter type-id='95e97e5e' name='num_ids' filepath='drivers/iommu/iommu.c' line='2399' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_domain_set_attr' mangled-name='iommu_domain_set_attr' filepath='drivers/iommu/iommu.c' line='2213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_set_attr'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2213' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2214' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2214' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_domain_get_attr' mangled-name='iommu_domain_get_attr' filepath='drivers/iommu/iommu.c' line='2185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_get_attr'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='2185' column='1'/>
+        <parameter type-id='e176cc45' name='attr' filepath='drivers/iommu/iommu.c' line='2186' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/iommu/iommu.c' line='2186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_domain_free' mangled-name='iommu_domain_free' filepath='drivers/iommu/iommu.c' line='1648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_free'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1648' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_domain_alloc' mangled-name='iommu_domain_alloc' filepath='drivers/iommu/iommu.c' line='1642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_domain_alloc'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1642' column='1'/>
+        <return type-id='bff05edb'/>
+      </function-decl>
+      <function-decl name='iommu_device_unregister' mangled-name='iommu_device_unregister' filepath='drivers/iommu/iommu.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_unregister'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_device_register' mangled-name='iommu_device_register' filepath='drivers/iommu/iommu.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_device_register'>
+        <parameter type-id='2f00283d' name='iommu' filepath='drivers/iommu/iommu.c' line='138' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_detach_device' mangled-name='iommu_detach_device' filepath='drivers/iommu/iommu.c' line='1713' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_detach_device'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1713' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1713' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iommu_attach_group' mangled-name='iommu_attach_group' filepath='drivers/iommu/iommu.c' line='1794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_attach_group'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1794' column='1'/>
+        <parameter type-id='0b19fc54' name='group' filepath='drivers/iommu/iommu.c' line='1794' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_attach_device' mangled-name='iommu_attach_device' filepath='drivers/iommu/iommu.c' line='1671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_attach_device'>
+        <parameter type-id='bff05edb' name='domain' filepath='drivers/iommu/iommu.c' line='1671' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='iommu_alloc_resv_region' mangled-name='iommu_alloc_resv_region' filepath='drivers/iommu/iommu.c' line='2246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iommu_alloc_resv_region'>
+        <parameter type-id='2522883d' name='start' filepath='drivers/iommu/iommu.c' line='2246' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/iommu/iommu.c' line='2247' column='1'/>
+        <parameter type-id='95e97e5e' name='prot' filepath='drivers/iommu/iommu.c' line='2247' column='1'/>
+        <parameter type-id='256c2037' name='type' filepath='drivers/iommu/iommu.c' line='2248' column='1'/>
+        <return type-id='24b0cc5e'/>
+      </function-decl>
+      <function-decl name='generic_device_group' mangled-name='generic_device_group' filepath='drivers/iommu/iommu.c' line='1280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_device_group'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/iommu/iommu.c' line='1280' column='1'/>
+        <return type-id='0b19fc54'/>
+      </function-decl>
+      <function-decl name='bus_set_iommu' mangled-name='bus_set_iommu' filepath='drivers/iommu/iommu.c' line='1561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bus_set_iommu'>
+        <parameter type-id='5e2671f8' name='bus' filepath='drivers/iommu/iommu.c' line='1561' column='1'/>
+        <parameter type-id='f1ac64d0' name='ops' filepath='drivers/iommu/iommu.c' line='1561' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/iommu/of_iommu.c' language='LANG_C89'>
+      <function-decl name='of_get_dma_window' mangled-name='of_get_dma_window' filepath='drivers/iommu/of_iommu.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_dma_window'>
+        <parameter type-id='9a537bbe' name='dn' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/iommu/of_iommu.c' line='34' column='1'/>
+        <parameter type-id='1d2c2b85' name='busno' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <parameter type-id='e835b5d8' name='addr' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <parameter type-id='78c01427' name='size' filepath='drivers/iommu/of_iommu.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/leds/led-class-flash.c' language='LANG_C89'>
+      <class-decl name='led_classdev_flash' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='65' column='1' id='e6a2c851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='led_cdev' type-id='6e0e17b0' visibility='default' filepath='include/linux/led-class-flash.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ops' type-id='4b90501b' visibility='default' filepath='include/linux/led-class-flash.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='brightness' type-id='d7244bd4' visibility='default' filepath='include/linux/led-class-flash.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='timeout' type-id='d7244bd4' visibility='default' filepath='include/linux/led-class-flash.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/linux/led-class-flash.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_flash_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='33' column='1' id='842b8964'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flash_brightness_set' type-id='8cbb2c12' visibility='default' filepath='include/linux/led-class-flash.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flash_brightness_get' type-id='9630d76f' visibility='default' filepath='include/linux/led-class-flash.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strobe_set' type-id='3a068a46' visibility='default' filepath='include/linux/led-class-flash.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='strobe_get' type-id='80c2f2c9' visibility='default' filepath='include/linux/led-class-flash.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout_set' type-id='8cbb2c12' visibility='default' filepath='include/linux/led-class-flash.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fault_get' type-id='9630d76f' visibility='default' filepath='include/linux/led-class-flash.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_flash_setting' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/led-class-flash.h' line='54' column='1' id='d7244bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='step' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='include/linux/led-class-flash.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='842b8964' const='yes' id='7d1bac73'/>
+      <pointer-type-def type-id='7d1bac73' size-in-bits='64' id='4b90501b'/>
+      <pointer-type-def type-id='a547eaa5' size-in-bits='64' id='80c2f2c9'/>
+      <pointer-type-def type-id='1fc85394' size-in-bits='64' id='3a068a46'/>
+      <pointer-type-def type-id='b21fa5e0' size-in-bits='64' id='8cbb2c12'/>
+      <pointer-type-def type-id='a2e29ca3' size-in-bits='64' id='9630d76f'/>
+      <pointer-type-def type-id='e6a2c851' size-in-bits='64' id='26deddb9'/>
+      <function-decl name='led_classdev_flash_unregister' mangled-name='led_classdev_flash_unregister' filepath='drivers/leds/led-class-flash.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_flash_unregister'>
+        <parameter type-id='26deddb9' name='fled_cdev' filepath='drivers/leds/led-class-flash.c' line='321' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_classdev_flash_register_ext' mangled-name='led_classdev_flash_register_ext' filepath='drivers/leds/led-class-flash.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_flash_register_ext'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/leds/led-class-flash.c' line='285' column='1'/>
+        <parameter type-id='26deddb9' name='fled_cdev' filepath='drivers/leds/led-class-flash.c' line='286' column='1'/>
+        <parameter type-id='eebb8ee8' name='init_data' filepath='drivers/leds/led-class-flash.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='led_classdev' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='58' column='1' id='6e0e17b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_flags' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='brightness_set' type-id='971a91c1' visibility='default' filepath='include/linux/leds.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='brightness_set_blocking' type-id='07e65680' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='brightness_get' type-id='a91f7d05' visibility='default' filepath='include/linux/leds.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blink_set' type-id='adaf1c08' visibility='default' filepath='include/linux/leds.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pattern_set' type-id='e9f2f0c0' visibility='default' filepath='include/linux/leds.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pattern_clear' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/leds.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_trigger' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='blink_delay_on' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blink_delay_off' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blink_timer' type-id='abe41e67' visibility='default' filepath='include/linux/leds.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='new_blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='flash_resume' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_brightness_work' type-id='ef9025d0' visibility='default' filepath='include/linux/leds.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='delayed_set_value' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='trigger_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/leds.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='trigger' type-id='db6d90a1' visibility='default' filepath='include/linux/leds.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='trig_list' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='trigger_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/leds.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='activated' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='led_access' type-id='925167dc' visibility='default' filepath='include/linux/leds.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='a547eaa5'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fc85394'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b21fa5e0'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2e29ca3'>
+        <parameter type-id='26deddb9'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='fbd376ca' size-in-bits='64' id='eebb8ee8'/>
+      <class-decl name='led_init_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='34' column='1' id='fbd376ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/leds.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_label' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='devicename' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devname_mandatory' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='led_brightness' filepath='include/linux/leds.h' line='27' column='1' id='fa598f35'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='f7c7c7f9' size-in-bits='64' id='a91f7d05'/>
+      <pointer-type-def type-id='821e33ee' size-in-bits='64' id='0904d108'/>
+      <pointer-type-def type-id='6a0fd5a6' size-in-bits='64' id='07e65680'/>
+      <pointer-type-def type-id='fcd4ba8e' size-in-bits='64' id='e9f2f0c0'/>
+      <pointer-type-def type-id='4b04075e' size-in-bits='64' id='adaf1c08'/>
+      <pointer-type-def type-id='7bcbad99' size-in-bits='64' id='db6d90a1'/>
+      <pointer-type-def type-id='6dea5f13' size-in-bits='64' id='749654e7'/>
+      <pointer-type-def type-id='a373c61d' size-in-bits='64' id='971a91c1'/>
+      <class-decl name='led_trigger' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='338' column='1' id='7bcbad99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='activate' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deactivate' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leddev_list_lock' type-id='ac16795b' visibility='default' filepath='include/linux/leds.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='led_cdevs' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='next_trig' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/leds/led-class.c' language='LANG_C89'>
+      <class-decl name='led_init_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='34' column='1' id='fbd376ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/leds.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='default_label' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='devicename' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devname_mandatory' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fbd376ca' size-in-bits='64' id='eebb8ee8'/>
+      <function-decl name='led_classdev_register_ext' mangled-name='led_classdev_register_ext' filepath='drivers/leds/led-class.c' line='247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_register_ext'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/leds/led-class.c' line='247' column='1'/>
+        <parameter type-id='bd1c8eb6' name='led_cdev' filepath='drivers/leds/led-class.c' line='248' column='1'/>
+        <parameter type-id='eebb8ee8' name='init_data' filepath='drivers/leds/led-class.c' line='249' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='led_classdev_unregister' mangled-name='led_classdev_unregister' filepath='drivers/leds/led-class.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_classdev_unregister'>
+        <parameter type-id='bd1c8eb6' name='led_cdev' filepath='drivers/leds/led-class.c' line='335' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_led_classdev_register_ext' mangled-name='devm_led_classdev_register_ext' filepath='drivers/leds/led-class.c' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_led_classdev_register_ext'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/leds/led-class.c' line='381' column='1'/>
+        <parameter type-id='bd1c8eb6' name='led_cdev' filepath='drivers/leds/led-class.c' line='382' column='1'/>
+        <parameter type-id='eebb8ee8' name='init_data' filepath='drivers/leds/led-class.c' line='383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='6e0e17b0' size-in-bits='64' id='bd1c8eb6'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/leds/led-core.c' language='LANG_C89'>
+      <function-decl name='led_set_brightness' mangled-name='led_set_brightness' filepath='drivers/leds/led-core.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_set_brightness'>
+        <parameter type-id='bd1c8eb6' name='led_cdev' filepath='drivers/leds/led-core.c' line='241' column='1'/>
+        <parameter type-id='fa598f35' name='brightness' filepath='drivers/leds/led-core.c' line='242' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_get_default_pattern' mangled-name='led_get_default_pattern' filepath='drivers/leds/led-core.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_get_default_pattern'>
+        <parameter type-id='bd1c8eb6' name='led_cdev' filepath='drivers/leds/led-core.c' line='325' column='1'/>
+        <parameter type-id='807869d3' name='size' filepath='drivers/leds/led-core.c' line='325' column='1'/>
+        <return type-id='f9409001'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/leds/led-triggers.c' language='LANG_C89'>
+      <pointer-type-def type-id='db6d90a1' size-in-bits='64' id='f87a8ad1'/>
+      <function-decl name='led_trigger_unregister' mangled-name='led_trigger_unregister' filepath='drivers/leds/led-triggers.c' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_unregister'>
+        <parameter type-id='db6d90a1' name='trig' filepath='drivers/leds/led-triggers.c' line='263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_event' mangled-name='led_trigger_event' filepath='drivers/leds/led-triggers.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_event'>
+        <parameter type-id='db6d90a1' name='trig' filepath='drivers/leds/led-triggers.c' line='317' column='1'/>
+        <parameter type-id='fa598f35' name='brightness' filepath='drivers/leds/led-triggers.c' line='318' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_register_simple' mangled-name='led_trigger_register_simple' filepath='drivers/leds/led-triggers.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_register_simple'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/leds/led-triggers.c' line='373' column='1'/>
+        <parameter type-id='f87a8ad1' name='tp' filepath='drivers/leds/led-triggers.c' line='373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='led_trigger_register' mangled-name='led_trigger_register' filepath='drivers/leds/led-triggers.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_register'>
+        <parameter type-id='db6d90a1' name='trig' filepath='drivers/leds/led-triggers.c' line='226' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='led_trigger_unregister_simple' mangled-name='led_trigger_unregister_simple' filepath='drivers/leds/led-triggers.c' line='397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='led_trigger_unregister_simple'>
+        <parameter type-id='db6d90a1' name='trig' filepath='drivers/leds/led-triggers.c' line='397' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mailbox/mailbox.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='1280' id='4a460309'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='mbox_chan' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='117' column='1' id='cbc88d4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mbox' type-id='fb648468' visibility='default' filepath='include/linux/mailbox_controller.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='txdone_method' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cl' type-id='aeae13b9' visibility='default' filepath='include/linux/mailbox_controller.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_complete' type-id='f9fef04f' visibility='default' filepath='include/linux/mailbox_controller.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='active_req' type-id='eaa32e2f' visibility='default' filepath='include/linux/mailbox_controller.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='msg_count' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='msg_free' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='msg_data' type-id='4a460309' visibility='default' filepath='include/linux/mailbox_controller.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mailbox_controller.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='con_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/mailbox_controller.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mbox_controller' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='74' column='1' id='026a169a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/mailbox_controller.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='962b0f84' visibility='default' filepath='include/linux/mailbox_controller.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chans' type-id='339c87e8' visibility='default' filepath='include/linux/mailbox_controller.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_chans' type-id='95e97e5e' visibility='default' filepath='include/linux/mailbox_controller.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='txdone_irq' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_controller.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='txdone_poll' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_controller.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='txpoll_period' type-id='f0981eeb' visibility='default' filepath='include/linux/mailbox_controller.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_xlate' type-id='8bdb16d5' visibility='default' filepath='include/linux/mailbox_controller.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='poll_hrt' type-id='b6993efc' visibility='default' filepath='include/linux/mailbox_controller.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/mailbox_controller.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mbox_chan_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mailbox_controller.h' line='46' column='1' id='4d1a8c39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='send_data' type-id='9f8ab0a2' visibility='default' filepath='include/linux/mailbox_controller.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush' type-id='cead4188' visibility='default' filepath='include/linux/mailbox_controller.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='startup' type-id='f7bc2858' visibility='default' filepath='include/linux/mailbox_controller.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shutdown' type-id='a9035179' visibility='default' filepath='include/linux/mailbox_controller.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_tx_done' type-id='921a362a' visibility='default' filepath='include/linux/mailbox_controller.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='peek_data' type-id='921a362a' visibility='default' filepath='include/linux/mailbox_controller.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mbox_client' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mailbox_client.h' line='29' column='1' id='3bf7d5b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/mailbox_client.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_block' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_client.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_tout' type-id='7359adad' visibility='default' filepath='include/linux/mailbox_client.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='knows_txdone' type-id='b50a4934' visibility='default' filepath='include/linux/mailbox_client.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_callback' type-id='f0cadde6' visibility='default' filepath='include/linux/mailbox_client.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_prepare' type-id='f0cadde6' visibility='default' filepath='include/linux/mailbox_client.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tx_done' type-id='a16bb3cd' visibility='default' filepath='include/linux/mailbox_client.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4d1a8c39' const='yes' id='24a174c6'/>
+      <pointer-type-def type-id='24a174c6' size-in-bits='64' id='962b0f84'/>
+      <pointer-type-def type-id='5468e006' size-in-bits='64' id='f7bc2858'/>
+      <pointer-type-def type-id='98985516' size-in-bits='64' id='cead4188'/>
+      <pointer-type-def type-id='d4f11968' size-in-bits='64' id='9f8ab0a2'/>
+      <pointer-type-def type-id='cbc88d4a' size-in-bits='64' id='339c87e8'/>
+      <pointer-type-def type-id='b08da511' size-in-bits='64' id='8bdb16d5'/>
+      <pointer-type-def type-id='3bf7d5b1' size-in-bits='64' id='aeae13b9'/>
+      <pointer-type-def type-id='026a169a' size-in-bits='64' id='fb648468'/>
+      <pointer-type-def type-id='f7b53f40' size-in-bits='64' id='921a362a'/>
+      <pointer-type-def type-id='10b63b7d' size-in-bits='64' id='a9035179'/>
+      <pointer-type-def type-id='0410b02c' size-in-bits='64' id='f0cadde6'/>
+      <pointer-type-def type-id='3c5fffe9' size-in-bits='64' id='a16bb3cd'/>
+      <function-decl name='mbox_request_channel' mangled-name='mbox_request_channel' filepath='drivers/mailbox/mailbox.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_request_channel'>
+        <parameter type-id='aeae13b9' name='cl' filepath='drivers/mailbox/mailbox.c' line='331' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/mailbox/mailbox.c' line='331' column='1'/>
+        <return type-id='339c87e8'/>
+      </function-decl>
+      <function-decl name='mbox_send_message' mangled-name='mbox_send_message' filepath='drivers/mailbox/mailbox.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_send_message'>
+        <parameter type-id='339c87e8' name='chan' filepath='drivers/mailbox/mailbox.c' line='250' column='1'/>
+        <parameter type-id='eaa32e2f' name='mssg' filepath='drivers/mailbox/mailbox.c' line='250' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mbox_free_channel' mangled-name='mbox_free_channel' filepath='drivers/mailbox/mailbox.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_free_channel'>
+        <parameter type-id='339c87e8' name='chan' filepath='drivers/mailbox/mailbox.c' line='438' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mbox_request_channel_byname' mangled-name='mbox_request_channel_byname' filepath='drivers/mailbox/mailbox.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_request_channel_byname'>
+        <parameter type-id='aeae13b9' name='cl' filepath='drivers/mailbox/mailbox.c' line='402' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/mailbox/mailbox.c' line='403' column='1'/>
+        <return type-id='339c87e8'/>
+      </function-decl>
+      <function-decl name='mbox_controller_unregister' mangled-name='mbox_controller_unregister' filepath='drivers/mailbox/mailbox.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_controller_unregister'>
+        <parameter type-id='fb648468' name='mbox' filepath='drivers/mailbox/mailbox.c' line='529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mbox_controller_register' mangled-name='mbox_controller_register' filepath='drivers/mailbox/mailbox.c' line='478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_controller_register'>
+        <parameter type-id='fb648468' name='mbox' filepath='drivers/mailbox/mailbox.c' line='478' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mbox_client_txdone' mangled-name='mbox_client_txdone' filepath='drivers/mailbox/mailbox.c' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_client_txdone'>
+        <parameter type-id='339c87e8' name='chan' filepath='drivers/mailbox/mailbox.c' line='191' column='1'/>
+        <parameter type-id='95e97e5e' name='r' filepath='drivers/mailbox/mailbox.c' line='191' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mbox_chan_txdone' mangled-name='mbox_chan_txdone' filepath='drivers/mailbox/mailbox.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_chan_txdone'>
+        <parameter type-id='339c87e8' name='chan' filepath='drivers/mailbox/mailbox.c' line='170' column='1'/>
+        <parameter type-id='95e97e5e' name='r' filepath='drivers/mailbox/mailbox.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mbox_chan_received_data' mangled-name='mbox_chan_received_data' filepath='drivers/mailbox/mailbox.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mbox_chan_received_data'>
+        <parameter type-id='339c87e8' name='chan' filepath='drivers/mailbox/mailbox.c' line='152' column='1'/>
+        <parameter type-id='eaa32e2f' name='mssg' filepath='drivers/mailbox/mailbox.c' line='152' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_mbox_controller_register' mangled-name='devm_mbox_controller_register' filepath='drivers/mailbox/mailbox.c' line='579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_mbox_controller_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/mailbox/mailbox.c' line='579' column='1'/>
+        <parameter type-id='fb648468' name='mbox' filepath='drivers/mailbox/mailbox.c' line='580' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5468e006'>
+        <parameter type-id='339c87e8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98985516'>
+        <parameter type-id='339c87e8'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4f11968'>
+        <parameter type-id='339c87e8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b08da511'>
+        <parameter type-id='fb648468'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='339c87e8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7b53f40'>
+        <parameter type-id='339c87e8'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10b63b7d'>
+        <parameter type-id='339c87e8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0410b02c'>
+        <parameter type-id='aeae13b9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c5fffe9'>
+        <parameter type-id='aeae13b9'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/cec/cec-adap.c' language='LANG_C89'>
+      <pointer-type-def type-id='c6954120' size-in-bits='64' id='ebc04a66'/>
+      <function-decl name='cec_s_phys_addr' mangled-name='cec_s_phys_addr' filepath='drivers/media/cec/cec-adap.c' line='1606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_phys_addr'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1606' column='1'/>
+        <parameter type-id='1dc6a898' name='phys_addr' filepath='drivers/media/cec/cec-adap.c' line='1606' column='1'/>
+        <parameter type-id='b50a4934' name='block' filepath='drivers/media/cec/cec-adap.c' line='1606' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_transmit_done_ts' mangled-name='cec_transmit_done_ts' filepath='drivers/media/cec/cec-adap.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_transmit_done_ts'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='591' column='1'/>
+        <parameter type-id='f9b06939' name='status' filepath='drivers/media/cec/cec-adap.c' line='591' column='1'/>
+        <parameter type-id='f9b06939' name='arb_lost_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='nack_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='low_drive_cnt' filepath='drivers/media/cec/cec-adap.c' line='592' column='1'/>
+        <parameter type-id='f9b06939' name='error_cnt' filepath='drivers/media/cec/cec-adap.c' line='593' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='593' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_transmit_attempt_done_ts' mangled-name='cec_transmit_attempt_done_ts' filepath='drivers/media/cec/cec-adap.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_transmit_attempt_done_ts'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='688' column='1'/>
+        <parameter type-id='f9b06939' name='status' filepath='drivers/media/cec/cec-adap.c' line='689' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_s_phys_addr_from_edid' mangled-name='cec_s_phys_addr_from_edid' filepath='drivers/media/cec/cec-adap.c' line='1617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_phys_addr_from_edid'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1617' column='1'/>
+        <parameter type-id='776adf76' name='edid' filepath='drivers/media/cec/cec-adap.c' line='1618' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_s_log_addrs' mangled-name='cec_s_log_addrs' filepath='drivers/media/cec/cec-adap.c' line='1810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_s_log_addrs'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1810' column='1'/>
+        <parameter type-id='ebc04a66' name='log_addrs' filepath='drivers/media/cec/cec-adap.c' line='1811' column='1'/>
+        <parameter type-id='b50a4934' name='block' filepath='drivers/media/cec/cec-adap.c' line='1811' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cec_received_msg_ts' mangled-name='cec_received_msg_ts' filepath='drivers/media/cec/cec-adap.c' line='1036' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_received_msg_ts'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-adap.c' line='1036' column='1'/>
+        <parameter type-id='ffb3cc6e' name='msg' filepath='drivers/media/cec/cec-adap.c' line='1037' column='1'/>
+        <parameter type-id='fbc017ef' name='ts' filepath='drivers/media/cec/cec-adap.c' line='1037' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='488c1da8' size-in-bits='64' id='ffb3cc6e'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/cec/cec-core.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='384' id='c9f5704d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6e21d41e' size-in-bits='1536' id='379ac606'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='120' id='ec17bebb'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='cec_notifier' is-struct='yes' visibility='default' is-declaration-only='yes' id='ac0bc8bd'/>
+      <class-decl name='cec_pin' is-struct='yes' visibility='default' is-declaration-only='yes' id='fa296b96'/>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1024' id='e8d7d286'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='240' id='42c8bff1'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='128' id='c24d1a13'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='cec_devnode' size-in-bits='9024' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='42' column='1' id='c2b8d3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/cec.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cdev' type-id='22f86351' visibility='default' filepath='include/media/cec.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/cec.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8616'>
+          <var-decl name='unregistered' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='fhs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_data' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='60' column='1' id='f3287987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/media/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msg' type-id='488c1da8' visibility='default' filepath='include/media/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fh' type-id='3ef2bf11' visibility='default' filepath='include/media/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/media/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='c' type-id='f9fef04f' visibility='default' filepath='include/media/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='attempts' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='blocking' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/cec.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_msg' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='57' column='1' id='488c1da8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='timeout' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/cec.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reply' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='rx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='tx_status' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='tx_arb_lost_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_nack_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='tx_low_drive_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='tx_error_cnt' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_fh' size-in-bits='3776' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='86' column='1' id='1227fbe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='xfer_list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap' type-id='b94a2f7c' visibility='default' filepath='include/media/cec.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode_initiator' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='mode_follower' type-id='f9b06939' visibility='default' filepath='include/media/cec.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/cec.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/cec.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='events' type-id='e8d7d286' visibility='default' filepath='include/media/cec.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queued_events' type-id='c24d1a13' visibility='default' filepath='include/media/cec.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='total_queued_events' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='core_events' type-id='379ac606' visibility='default' filepath='include/media/cec.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='msgs' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queued_msgs' type-id='f0981eeb' visibility='default' filepath='include/media/cec.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_entry' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='78' column='1' id='6e21d41e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/cec.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev' type-id='9638c87d' visibility='default' filepath='include/media/cec.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='424' column='1' id='9638c87d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/cec.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='ea003a68' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='428' column='1' id='ea003a68'>
+        <data-member access='public'>
+          <var-decl name='state_change' type-id='14c5637c' visibility='default' filepath='include/uapi/linux/cec.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='lost_msgs' type-id='66c0ec77' visibility='default' filepath='include/uapi/linux/cec.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/cec.h' line='431' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cec_event_state_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='402' column='1' id='14c5637c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_event_lost_msgs' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='411' column='1' id='66c0ec77'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lost_msgs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_adap_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='111' column='1' id='3c91c090'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adap_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adap_monitor_all_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='adap_monitor_pin_enable' type-id='c42cb699' visibility='default' filepath='include/media/cec.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='adap_log_addr' type-id='7b15200c' visibility='default' filepath='include/media/cec.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='adap_transmit' type-id='d5951000' visibility='default' filepath='include/media/cec.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='adap_status' type-id='c4365925' visibility='default' filepath='include/media/cec.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='adap_free' type-id='6dbc77f1' visibility='default' filepath='include/media/cec.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='error_inj_show' type-id='025f347e' visibility='default' filepath='include/media/cec.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='error_inj_parse_line' type-id='56c9c562' visibility='default' filepath='include/media/cec.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='received' type-id='6240ec2f' visibility='default' filepath='include/media/cec.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_log_addrs' size-in-bits='736' is-struct='yes' visibility='default' filepath='include/uapi/linux/cec.h' line='355' column='1' id='c6954120'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_addr' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='log_addr_mask' type-id='d315442e' visibility='default' filepath='include/uapi/linux/cec.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cec_version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_log_addrs' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/cec.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/cec.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osd_name' type-id='ec17bebb' visibility='default' filepath='include/uapi/linux/cec.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='primary_device_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='log_addr_type' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='all_device_types' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/cec.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='features' type-id='c9f5704d' visibility='default' filepath='include/uapi/linux/cec.h' line='368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cec_connector_info' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='170' column='1' id='a809e963'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='deb646b2' visibility='default' filepath='include/media/cec.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/media/cec.h' line='172' column='1' id='deb646b2'>
+        <data-member access='public'>
+          <var-decl name='drm' type-id='8c7b18b1' visibility='default' filepath='include/media/cec.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='9d2cf33e' visibility='default' filepath='include/media/cec.h' line='174' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cec_drm_connector_info' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/cec.h' line='156' column='1' id='8c7b18b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card_no' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='connector_id' type-id='3f1a6b60' visibility='default' filepath='include/media/cec.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f3287987' size-in-bits='64' id='a588c23f'/>
+      <pointer-type-def type-id='1227fbe9' size-in-bits='64' id='3ef2bf11'/>
+      <pointer-type-def type-id='488c1da8' size-in-bits='64' id='ffb3cc6e'/>
+      <pointer-type-def type-id='ac0bc8bd' size-in-bits='64' id='33ceb73d'/>
+      <pointer-type-def type-id='fa296b96' size-in-bits='64' id='93901aac'/>
+      <qualified-type-def type-id='3c91c090' const='yes' id='d297aced'/>
+      <pointer-type-def type-id='d297aced' size-in-bits='64' id='4bc4fd45'/>
+      <pointer-type-def type-id='ad20c773' size-in-bits='64' id='6240ec2f'/>
+      <pointer-type-def type-id='617b50f4' size-in-bits='64' id='025f347e'/>
+      <pointer-type-def type-id='e2d03a5d' size-in-bits='64' id='c42cb699'/>
+      <pointer-type-def type-id='e4205152' size-in-bits='64' id='7b15200c'/>
+      <pointer-type-def type-id='835a73a6' size-in-bits='64' id='d5951000'/>
+      <pointer-type-def type-id='da9684d0' size-in-bits='64' id='56c9c562'/>
+      <pointer-type-def type-id='4666032d' size-in-bits='64' id='6dbc77f1'/>
+      <pointer-type-def type-id='12e476c1' size-in-bits='64' id='c4365925'/>
+      <function-decl name='cec_allocate_adapter' mangled-name='cec_allocate_adapter' filepath='drivers/media/cec/cec-core.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_allocate_adapter'>
+        <parameter type-id='4bc4fd45' name='ops' filepath='drivers/media/cec/cec-core.c' line='253' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='19c2251e' name='caps' filepath='drivers/media/cec/cec-core.c' line='254' column='1'/>
+        <parameter type-id='f9b06939' name='available_las' filepath='drivers/media/cec/cec-core.c' line='255' column='1'/>
+        <return type-id='b94a2f7c'/>
+      </function-decl>
+      <function-decl name='cec_unregister_adapter' mangled-name='cec_unregister_adapter' filepath='drivers/media/cec/cec-core.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_unregister_adapter'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-core.c' line='412' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cec_register_adapter' mangled-name='cec_register_adapter' filepath='drivers/media/cec/cec-core.c' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_register_adapter'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-core.c' line='342' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/media/cec/cec-core.c' line='343' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cec_delete_adapter' mangled-name='cec_delete_adapter' filepath='drivers/media/cec/cec-core.c' line='431' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cec_delete_adapter'>
+        <parameter type-id='b94a2f7c' name='adap' filepath='drivers/media/cec/cec-core.c' line='431' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ad20c773'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='ffb3cc6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='617b50f4'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2d03a5d'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4205152'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='835a73a6'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='ffb3cc6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da9684d0'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4666032d'>
+        <parameter type-id='b94a2f7c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12e476c1'>
+        <parameter type-id='b94a2f7c'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/common/videobuf2/videobuf2-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='fa0b179b' size-in-bits='512' id='f6e5abef'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='85535682' size-in-bits='4096' id='f989fdcc'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='14582e4a' size-in-bits='12288' id='729537cc'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b3ad2c1c' size-in-bits='3072' id='105eff46'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='vb2_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='411' column='1' id='1e4ac06a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_setup' type-id='f4ef52eb' visibility='default' filepath='include/media/videobuf2-core.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_prepare' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_finish' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf_out_validate' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='buf_init' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_prepare' type-id='85280418' visibility='default' filepath='include/media/videobuf2-core.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='buf_finish' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='buf_cleanup' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start_streaming' type-id='15bfa933' visibility='default' filepath='include/media/videobuf2-core.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop_streaming' type-id='d2e04e44' visibility='default' filepath='include/media/videobuf2-core.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buf_queue' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buf_request_complete' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='430' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buffer' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='245' column='1' id='4a078c54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vb2_queue' type-id='a05f1ecd' visibility='default' filepath='include/media/videobuf2-core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_planes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/media/videobuf2-core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='ac429605' visibility='default' filepath='include/media/videobuf2-core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/videobuf2-core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state' type-id='550876cf' visibility='default' filepath='include/media/videobuf2-core.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='synced' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='prepared' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='copied_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='planes' type-id='105eff46' visibility='default' filepath='include/media/videobuf2-core.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='queued_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='done_entry' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vb2_buffer_state' filepath='include/media/videobuf2-core.h' line='219' column='1' id='550876cf'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VB2_BUF_STATE_DEQUEUED' value='0'/>
+        <enumerator name='VB2_BUF_STATE_IN_REQUEST' value='1'/>
+        <enumerator name='VB2_BUF_STATE_PREPARING' value='2'/>
+        <enumerator name='VB2_BUF_STATE_QUEUED' value='3'/>
+        <enumerator name='VB2_BUF_STATE_ACTIVE' value='4'/>
+        <enumerator name='VB2_BUF_STATE_DONE' value='5'/>
+        <enumerator name='VB2_BUF_STATE_ERROR' value='6'/>
+      </enum-decl>
+      <class-decl name='vb2_plane' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='174' column='1' id='b3ad2c1c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dbuf' type-id='5e4f599b' visibility='default' filepath='include/media/videobuf2-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dbuf_mapped' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='min_length' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='m' type-id='07aa0de4' visibility='default' filepath='include/media/videobuf2-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data_offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='181' column='1' id='07aa0de4'>
+        <data-member access='public'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/media/videobuf2-core.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='vb2_mem_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='118' column='1' id='68597e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc' type-id='ba09778f' visibility='default' filepath='include/media/videobuf2-core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='put' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_dmabuf' type-id='de210c7e' visibility='default' filepath='include/media/videobuf2-core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_userptr' type-id='81e32a16' visibility='default' filepath='include/media/videobuf2-core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put_userptr' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prepare' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='finish' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='attach_dmabuf' type-id='5acb9c3c' visibility='default' filepath='include/media/videobuf2-core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='detach_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='map_dmabuf' type-id='b9b212f5' visibility='default' filepath='include/media/videobuf2-core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unmap_dmabuf' type-id='b7f9d8e6' visibility='default' filepath='include/media/videobuf2-core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vaddr' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cookie' type-id='5ad9edb6' visibility='default' filepath='include/media/videobuf2-core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='num_users' type-id='caa804f2' visibility='default' filepath='include/media/videobuf2-core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mmap' type-id='f34c7de4' visibility='default' filepath='include/media/videobuf2-core.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_buf_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='450' column='1' id='71d68b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='verify_planes_array' type-id='c4cd4be2' visibility='default' filepath='include/media/videobuf2-core.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_buffer' type-id='547e4f07' visibility='default' filepath='include/media/videobuf2-core.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fill_user_buffer' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fill_vb2_buffer' type-id='9cbbcc93' visibility='default' filepath='include/media/videobuf2-core.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='copy_timestamp' type-id='35cea26b' visibility='default' filepath='include/media/videobuf2-core.h' line='455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_fileio_data' size-in-bits='12608' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2445' column='1' id='c1670ffd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bufs' type-id='729537cc' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='cur_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12448'>
+          <var-decl name='initial_index' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='q_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12512'>
+          <var-decl name='dq_count' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_once' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='write_immediately' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2455' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_fileio_buf' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2414' column='1' id='14582e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pos' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queued' type-id='f0981eeb' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_threadio_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2781' column='1' id='cca707fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnc' type-id='86e6f91d' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='b50a4934' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2785' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vb2_thread_fnc' type-id='c4cd4be2' filepath='include/media/videobuf2-core.h' line='1035' column='1' id='86e6f91d'/>
+      <qualified-type-def type-id='71d68b50' const='yes' id='4925ee5b'/>
+      <pointer-type-def type-id='4925ee5b' size-in-bits='64' id='97b65be3'/>
+      <qualified-type-def type-id='68597e64' const='yes' id='23cb2797'/>
+      <pointer-type-def type-id='23cb2797' size-in-bits='64' id='15cf8e87'/>
+      <qualified-type-def type-id='1e4ac06a' const='yes' id='1f063fe1'/>
+      <pointer-type-def type-id='1f063fe1' size-in-bits='64' id='a1d66c91'/>
+      <pointer-type-def type-id='fa0b179b' size-in-bits='64' id='50764ba3'/>
+      <pointer-type-def type-id='e4934d54' size-in-bits='64' id='de210c7e'/>
+      <pointer-type-def type-id='299608ee' size-in-bits='64' id='85280418'/>
+      <pointer-type-def type-id='1e6604d7' size-in-bits='64' id='9cbbcc93'/>
+      <pointer-type-def type-id='f9bc47e0' size-in-bits='64' id='c4cd4be2'/>
+      <pointer-type-def type-id='a8a63667' size-in-bits='64' id='15bfa933'/>
+      <pointer-type-def type-id='78b081ff' size-in-bits='64' id='f4ef52eb'/>
+      <pointer-type-def type-id='5329c4da' size-in-bits='64' id='f34c7de4'/>
+      <pointer-type-def type-id='4a078c54' size-in-bits='64' id='85535682'/>
+      <pointer-type-def type-id='c1670ffd' size-in-bits='64' id='372af73d'/>
+      <pointer-type-def type-id='b3ad2c1c' size-in-bits='64' id='5de22dda'/>
+      <pointer-type-def type-id='cca707fb' size-in-bits='64' id='dc2d641b'/>
+      <pointer-type-def type-id='cd68bc93' size-in-bits='64' id='547e4f07'/>
+      <pointer-type-def type-id='7ec379e7' size-in-bits='64' id='35cea26b'/>
+      <pointer-type-def type-id='9097330a' size-in-bits='64' id='d2e04e44'/>
+      <pointer-type-def type-id='f7cd66fa' size-in-bits='64' id='5acb9c3c'/>
+      <pointer-type-def type-id='a2db2d94' size-in-bits='64' id='81e32a16'/>
+      <pointer-type-def type-id='850738b3' size-in-bits='64' id='ba09778f'/>
+      <pointer-type-def type-id='cd5d79f4' size-in-bits='64' id='5ad9edb6'/>
+      <function-decl name='vb2_wait_for_all_buffers' mangled-name='vb2_wait_for_all_buffers' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_wait_for_all_buffers'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1784' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_request_object_is_buffer' mangled-name='vb2_request_object_is_buffer' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1397' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_request_object_is_buffer'>
+        <parameter type-id='347d8ccd' name='obj' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='1397' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='vb2_buffer_done' mangled-name='vb2_buffer_done' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_buffer_done'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1'/>
+        <parameter type-id='550876cf' name='state' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='921' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_queue_error' mangled-name='vb2_queue_error' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2025' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_error'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2025' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_plane_vaddr' mangled-name='vb2_plane_vaddr' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_plane_vaddr'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1'/>
+        <parameter type-id='f0981eeb' name='plane_no' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='902' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vb2_plane_cookie' mangled-name='vb2_plane_cookie' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_plane_cookie'>
+        <parameter type-id='85535682' name='vb' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1'/>
+        <parameter type-id='f0981eeb' name='plane_no' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='912' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vb2_mmap' mangled-name='vb2_mmap' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_mmap'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2158' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/media/common/videobuf2/videobuf2-core.c' line='2158' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <class-decl name='media_request_object' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='269' column='1' id='a5b7e4fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4228340f' visibility='default' filepath='include/media/media-request.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-request.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req' type-id='ac429605' visibility='default' filepath='include/media/media-request.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/media-request.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='e4934d54'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='5e4f599b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='299608ee'>
+        <parameter type-id='85535682'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e6604d7'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='5de22dda'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f9bc47e0'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8a63667'>
+        <parameter type-id='a05f1ecd'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78b081ff'>
+        <parameter type-id='a05f1ecd'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='50764ba3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5329c4da'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd68bc93'>
+        <parameter type-id='85535682'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ec379e7'>
+        <parameter type-id='85535682'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9097330a'>
+        <parameter type-id='a05f1ecd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7cd66fa'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='5e4f599b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2db2d94'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='850738b3'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eea6b025'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd5d79f4'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='08c313b5' size-in-bits='64' id='ac429605'/>
+      <pointer-type-def type-id='a5b7e4fd' size-in-bits='64' id='347d8ccd'/>
+      <pointer-type-def type-id='6b30321d' size-in-bits='64' id='a05f1ecd'/>
+      <class-decl name='media_request' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='62' column='1' id='08c313b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-request.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='debug_str' type-id='665c09d8' visibility='default' filepath='include/media/media-request.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f22f33ac' visibility='default' filepath='include/media/media-request.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='updating_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='access_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='objects' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_incomplete_objects' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/media/media-request.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/media-request.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vb2_queue' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='553' column='1' id='6b30321d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='io_modes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/videobuf2-core.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_attrs' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bidirectional' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='fileio_read_once' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fileio_write_immediately' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='allow_zero_bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='quirk_poll_must_check_waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='supports_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='requires_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='uses_qbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='uses_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/videobuf2-core.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='a1d66c91' visibility='default' filepath='include/media/videobuf2-core.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_ops' type-id='15cf8e87' visibility='default' filepath='include/media/videobuf2-core.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buf_ops' type-id='97b65be3' visibility='default' filepath='include/media/videobuf2-core.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subsystem_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='buf_struct_size' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timestamp_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='gfp_flags' type-id='3eb7c31c' visibility='default' filepath='include/media/videobuf2-core.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_buffers_needed' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='alloc_devs' type-id='f6e5abef' visibility='default' filepath='include/media/videobuf2-core.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mmap_lock' type-id='925167dc' visibility='default' filepath='include/media/videobuf2-core.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dma_dir' type-id='eea6b025' visibility='default' filepath='include/media/videobuf2-core.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bufs' type-id='f989fdcc' visibility='default' filepath='include/media/videobuf2-core.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='queued_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='queued_count' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='owned_by_drv_count' type-id='49178f86' visibility='default' filepath='include/media/videobuf2-core.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='done_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='done_lock' type-id='fb4018a0' visibility='default' filepath='include/media/videobuf2-core.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='done_wq' type-id='b5ab048f' visibility='default' filepath='include/media/videobuf2-core.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='start_streaming_called' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='waiting_in_dqbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_multiplanar' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_output' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='copy_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='last_buffer_dequeued' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='fileio' type-id='372af73d' visibility='default' filepath='include/media/videobuf2-core.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='threadio' type-id='dc2d641b' visibility='default' filepath='include/media/videobuf2-core.h' line='610' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='904f813f' size-in-bits='64' id='4228340f'/>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='216' id='665c09d8'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <qualified-type-def type-id='d2613fd6' const='yes' id='904f813f'/>
+      <enum-decl name='media_request_state' filepath='include/media/media-request.h' line='37' column='1' id='f22f33ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_REQUEST_STATE_IDLE' value='0'/>
+        <enumerator name='MEDIA_REQUEST_STATE_VALIDATING' value='1'/>
+        <enumerator name='MEDIA_REQUEST_STATE_QUEUED' value='2'/>
+        <enumerator name='MEDIA_REQUEST_STATE_COMPLETE' value='3'/>
+        <enumerator name='MEDIA_REQUEST_STATE_CLEANING' value='4'/>
+        <enumerator name='MEDIA_REQUEST_STATE_UPDATING' value='5'/>
+        <enumerator name='NR_OF_MEDIA_REQUEST_STATE' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='e4dc0de6' size-in-bits='64' id='e2929c1c'/>
+      <class-decl name='media_device' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='144' column='1' id='e4dc0de6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/media-device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devnode' type-id='f3496bd3' visibility='default' filepath='include/media/media-device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='model' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='driver_name' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='serial' type-id='36c46961' visibility='default' filepath='include/media/media-device.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_revision' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='topology_version' type-id='91ce1af9' visibility='default' filepath='include/media/media-device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='entity_internal_idx' type-id='46ce60fb' visibility='default' filepath='include/media/media-device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='entity_internal_idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='entities' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='pads' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='entity_notify' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='graph_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pm_count_walk' type-id='32ec86e0' visibility='default' filepath='include/media/media-device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='source_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='enable_source' type-id='c3e03202' visibility='default' filepath='include/media/media-device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='disable_source' type-id='35aeb76e' visibility='default' filepath='include/media/media-device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ops' type-id='306dc166' visibility='default' filepath='include/media/media-device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='req_queue_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='request_id' type-id='49178f86' visibility='default' filepath='include/media/media-device.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_request_object_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='247' column='1' id='d2613fd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='226f205f' visibility='default' filepath='include/media/media-request.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'>
+        <subrange length='40' type-id='7ff19f0f' id='8f80b239'/>
+      </array-type-def>
+      <class-decl name='media_graph' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='88' column='1' id='32ec86e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stack' type-id='4cb10997' visibility='default' filepath='include/media/media-entity.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ent_enum' type-id='4cd55af5' visibility='default' filepath='include/media/media-entity.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='top' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='71fb30e8' size-in-bits='64' id='306dc166'/>
+      <pointer-type-def type-id='5fbbd9b8' size-in-bits='64' id='c3e03202'/>
+      <pointer-type-def type-id='d56a4c4b' size-in-bits='64' id='226f205f'/>
+      <pointer-type-def type-id='41cb24b3' size-in-bits='64' id='f3496bd3'/>
+      <pointer-type-def type-id='cf9a081c' size-in-bits='64' id='35aeb76e'/>
+      <pointer-type-def type-id='38e7219e' size-in-bits='64' id='afb80c18'/>
+      <array-type-def dimensions='1' type-id='3ca3bd83' size-in-bits='2048' id='4cb10997'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='media_devnode' size-in-bits='8960' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='75' column='1' id='41cb24b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='include/media/media-devnode.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fops' type-id='1d91e688' visibility='default' filepath='include/media/media-devnode.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/media-devnode.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='cdev' type-id='22f86351' visibility='default' filepath='include/media/media-devnode.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/media/media-devnode.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/media-devnode.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-devnode.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='release' type-id='baa0730e' visibility='default' filepath='include/media/media-devnode.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='72' column='1' id='4cd55af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmap' type-id='1d2c2b85' visibility='default' filepath='include/media/media-entity.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3d78e975' const='yes' id='71fb30e8'/>
+      <class-decl name='media_device_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='65' column='1' id='3d78e975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link_notify' type-id='c4d81ddd' visibility='default' filepath='include/media/media-device.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req_alloc' type-id='58b0d2ef' visibility='default' filepath='include/media/media-device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_free' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_validate' type-id='82ec1389' visibility='default' filepath='include/media/media-device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_queue' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='89' column='1' id='3ca3bd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link' type-id='e84b031a' visibility='default' filepath='include/media/media-entity.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b72b472' size-in-bits='64' id='1d91e688'/>
+      <pointer-type-def type-id='2ebc1c8c' size-in-bits='64' id='baa0730e'/>
+      <qualified-type-def type-id='f2ce689d' const='yes' id='4b72b472'/>
+      <pointer-type-def type-id='d7de7749' size-in-bits='64' id='c4d81ddd'/>
+      <pointer-type-def type-id='2c3b4d9d' size-in-bits='64' id='82ec1389'/>
+      <pointer-type-def type-id='889856f7' size-in-bits='64' id='19e05b5f'/>
+      <pointer-type-def type-id='3bd753d3' size-in-bits='64' id='58b0d2ef'/>
+      <pointer-type-def type-id='d81a5dde' size-in-bits='64' id='5e611ec0'/>
+      <class-decl name='media_entity' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='289' column='1' id='889856f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/media-entity.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='obj_type' type-id='33f4e443' visibility='default' filepath='include/media/media-entity.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='function' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_pads' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='num_links' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_backlinks' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='internal_idx' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pads' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='94f26cbd' visibility='default' filepath='include/media/media-entity.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pipe' type-id='4ffae8c8' visibility='default' filepath='include/media/media-entity.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='info' type-id='f22bd336' visibility='default' filepath='include/media/media-entity.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_file_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='47' column='1' id='f2ce689d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/media-devnode.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/media-devnode.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/media-devnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/media-devnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_gobj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='57' column='1' id='9fdb75a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-entity.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f7d60a45' size-in-bits='64' id='94f26cbd'/>
+      <enum-decl name='media_entity_type' filepath='include/media/media-entity.h' line='243' column='1' id='33f4e443'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_BASE' value='0'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_VIDEO_DEVICE' value='1'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_V4L2_SUBDEV' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='48b94b91' size-in-bits='64' id='50a51839'/>
+      <pointer-type-def type-id='2783658a' size-in-bits='64' id='4ffae8c8'/>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='311' column='1' id='f22bd336'>
+        <data-member access='public'>
+          <var-decl name='dev' type-id='8334ad45' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='media_pad' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='189' column='1' id='48b94b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sig_type' type-id='ec7f70f4' visibility='default' filepath='include/media/media-entity.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_pipeline' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='104' column='1' id='2783658a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='graph' type-id='32ec86e0' visibility='default' filepath='include/media/media-entity.h' line='106' 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='include/media/media-entity.h' line='312' column='1' id='8334ad45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b13ab8d6' const='yes' id='f7d60a45'/>
+      <class-decl name='media_entity_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='214' column='1' id='b13ab8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_fwnode_pad' type-id='3ab939dc' visibility='default' filepath='include/media/media-entity.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link_setup' type-id='74b6c0a0' visibility='default' filepath='include/media/media-entity.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='link_validate' type-id='5e810368' visibility='default' filepath='include/media/media-entity.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_pad_signal_type' filepath='include/media/media-entity.h' line='171' column='1' id='ec7f70f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PAD_SIGNAL_DEFAULT' value='0'/>
+        <enumerator name='PAD_SIGNAL_ANALOG' value='1'/>
+        <enumerator name='PAD_SIGNAL_DV' value='2'/>
+        <enumerator name='PAD_SIGNAL_AUDIO' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='7add78ea' size-in-bits='64' id='3ab939dc'/>
+      <pointer-type-def type-id='835d6aa6' size-in-bits='64' id='74b6c0a0'/>
+      <pointer-type-def type-id='11c513ae' size-in-bits='64' id='5e810368'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/common/videobuf2/videobuf2-dma-contig.c' language='LANG_C89'>
+      <var-decl name='vb2_dma_contig_memops' type-id='23cb2797' mangled-name='vb2_dma_contig_memops' visibility='default' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='691' column='1' elf-symbol-id='vb2_dma_contig_memops'/>
+      <function-decl name='vb2_dma_contig_set_max_seg_size' mangled-name='vb2_dma_contig_set_max_seg_size' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='734' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_dma_contig_set_max_seg_size'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='734' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='734' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_dma_contig_clear_max_seg_size' mangled-name='vb2_dma_contig_clear_max_seg_size' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='756' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_dma_contig_clear_max_seg_size'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/media/common/videobuf2/videobuf2-dma-contig.c' line='756' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/common/videobuf2/videobuf2-v4l2.c' language='LANG_C89'>
+      <typedef-decl name='poll_table' type-id='415eecf1' filepath='include/linux/poll.h' line='46' column='1' id='f9b2d12e'/>
+      <pointer-type-def type-id='f9b2d12e' size-in-bits='64' id='a54c778f'/>
+      <function-decl name='vb2_streamon' mangled-name='vb2_streamon' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_streamon'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1'/>
+        <parameter type-id='1abf108f' name='type' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='807' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_streamoff' mangled-name='vb2_streamoff' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_streamoff'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1'/>
+        <parameter type-id='1abf108f' name='type' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_reqbufs' mangled-name='vb2_reqbufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_reqbufs'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1'/>
+        <parameter type-id='e4330308' name='req' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_queue_release' mangled-name='vb2_queue_release' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_release'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='874' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_queue_init' mangled-name='vb2_queue_init' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_queue_init'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='834' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_querybuf' mangled-name='vb2_querybuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_querybuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='632' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_qbuf' mangled-name='vb2_qbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_qbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1'/>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='755' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_prepare_buf' mangled-name='vb2_prepare_buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_prepare_buf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1'/>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='680' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='681' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_poll' mangled-name='vb2_poll' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_poll'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='880' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='vb2_ops_wait_prepare' mangled-name='vb2_ops_wait_prepare' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ops_wait_prepare'>
+        <parameter type-id='a05f1ecd' name='vq' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_ops_wait_finish' mangled-name='vb2_ops_wait_finish' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ops_wait_finish'>
+        <parameter type-id='a05f1ecd' name='vq' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1164' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_streamon' mangled-name='vb2_ioctl_streamon' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_streamon'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <parameter type-id='1abf108f' name='i' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1002' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_streamoff' mangled-name='vb2_ioctl_streamoff' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_streamoff'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <parameter type-id='1abf108f' name='i' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1012' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_reqbufs' mangled-name='vb2_ioctl_reqbufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_reqbufs'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='915' column='1'/>
+        <parameter type-id='e4330308' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='916' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_querybuf' mangled-name='vb2_ioctl_querybuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_querybuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='973' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_qbuf' mangled-name='vb2_ioctl_qbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_qbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='982' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_prepare_buf' mangled-name='vb2_ioctl_prepare_buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_prepare_buf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='962' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='963' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_expbuf' mangled-name='vb2_ioctl_expbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_expbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <parameter type-id='5606e640' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1022' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_dqbuf' mangled-name='vb2_ioctl_dqbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_dqbuf'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <parameter type-id='a90d9002' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='992' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_ioctl_create_bufs' mangled-name='vb2_ioctl_create_bufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_ioctl_create_bufs'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='935' column='1'/>
+        <parameter type-id='0bb617a4' name='p' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_create_bufs' mangled-name='vb2_create_bufs' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_create_bufs'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1'/>
+        <parameter type-id='0bb617a4' name='create' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='699' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_fop_release' mangled-name='vb2_fop_release' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1058' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_release'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1058' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_fop_read' mangled-name='vb2_fop_read' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1091' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1092' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1092' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='vb2_fop_poll' mangled-name='vb2_fop_poll' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_poll'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1115' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+      <function-decl name='vb2_fop_mmap' mangled-name='vb2_fop_mmap' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_fop_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='1034' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_expbuf' mangled-name='vb2_expbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_expbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1'/>
+        <parameter type-id='5606e640' name='eb' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='827' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vb2_dqbuf' mangled-name='vb2_dqbuf' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vb2_dqbuf'>
+        <parameter type-id='a05f1ecd' name='q' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <parameter type-id='a90d9002' name='b' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <parameter type-id='b50a4934' name='nonblocking' filepath='drivers/media/common/videobuf2/videobuf2-v4l2.c' line='776' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <enum-decl name='v4l2_buf_type' filepath='include/uapi/linux/videodev2.h' line='141' column='1' id='1abf108f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE' value='1'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT' value='2'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OVERLAY' value='3'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_CAPTURE' value='4'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_OUTPUT' value='5'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_CAPTURE' value='6'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_OUTPUT' value='7'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY' value='8'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE' value='9'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE' value='10'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_CAPTURE' value='11'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_OUTPUT' value='12'/>
+        <enumerator name='V4L2_BUF_TYPE_META_CAPTURE' value='13'/>
+        <enumerator name='V4L2_BUF_TYPE_META_OUTPUT' value='14'/>
+        <enumerator name='V4L2_BUF_TYPE_PRIVATE' value='128'/>
+      </enum-decl>
+      <pointer-type-def type-id='5e2fd874' size-in-bits='64' id='a90d9002'/>
+      <pointer-type-def type-id='20d04fee' size-in-bits='64' id='0bb617a4'/>
+      <pointer-type-def type-id='b201a5c2' size-in-bits='64' id='5606e640'/>
+      <pointer-type-def type-id='879dea4a' size-in-bits='64' id='e4330308'/>
+      <class-decl name='v4l2_buffer' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='995' column='1' id='5e2fd874'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='2a693ac3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='m' type-id='09960b26' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='e0a2553c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_create_buffers' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2412' column='1' id='20d04fee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='0a5711c9' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_exportbuffer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1091' column='1' id='b201a5c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plane' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1097' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_requestbuffers' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='913' column='1' id='879dea4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='352' id='9d263779'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='32' id='439be632'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='timeval' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='16' column='1' id='2a693ac3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' 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='55c6233e' visibility='default' filepath='include/uapi/linux/time.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_format' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2243' column='1' id='0a5711c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='08bd2345' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_timecode' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='856' column='1' id='5f820012'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frames' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='seconds' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='minutes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hours' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='userbits' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='863' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1' id='e0a2553c'>
+        <data-member access='public'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1017' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1007' column='1' id='09960b26'>
+        <data-member access='public'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='planes' type-id='00e8fe5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1011' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__kernel_suseconds_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='41' column='1' id='55c6233e'/>
+      <typedef-decl name='__kernel_time_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='89' column='1' id='f7d92306'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2245' column='1' id='08bd2345'>
+        <data-member access='public'>
+          <var-decl name='pix' type-id='e8f6102b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pix_mp' type-id='dece967b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2247' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='win' type-id='3a0ab346' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vbi' type-id='ae01ca89' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sliced' type-id='a2be7826' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sdr' type-id='a37aff65' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2251' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='meta' type-id='1db7c88b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2253' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8cd967bc' size-in-bits='64' id='00e8fe5a'/>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1600' id='0530f1a6'>
+        <subrange length='200' type-id='7ff19f0f' id='53119c2f'/>
+      </array-type-def>
+      <class-decl name='v4l2_meta_format' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2228' column='1' id='1db7c88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dataformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_pix_format' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='494' column='1' id='e8f6102b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='930baada' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_pix_format_mplane' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2193' column='1' id='dece967b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='plane_fmt' type-id='15b94482' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='num_planes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1448'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='' type-id='29c254d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1464'>
+          <var-decl name='quantization' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='xfer_func' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='reserved' type-id='c20b850f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='951' column='1' id='8cd967bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='m' type-id='9942b293' visibility='default' filepath='include/uapi/linux/videodev2.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='961' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sdr_format' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2217' column='1' id='a37aff65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_format' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2072' column='1' id='a2be7826'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='io_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2080' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vbi_format' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2044' column='1' id='ae01ca89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='samples_per_line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='e5d37c7b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_window' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1143' column='1' id='3a0ab346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='w' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='chromakey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clips' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clipcount' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bitmap' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='global_alpha' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1150' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='64' id='e5d37c7b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='d315442e' size-in-bits='768' id='025daa6d'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='192' id='26f0765c'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='56' id='c20b850f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='v4l2_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='412' column='1' id='3dbd4e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='left' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='top' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='416' 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/videodev2.h' line='954' column='1' id='9942b293'>
+        <data-member access='public'>
+          <var-decl name='mem_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='957' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1' id='930baada'>
+        <data-member access='public'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hsv_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='508' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='8' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1' id='29c254d4'>
+        <data-member access='public'>
+          <var-decl name='ycbcr_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2204' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hsv_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2205' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='aecf225c' size-in-bits='64' id='db634b6a'/>
+      <array-type-def dimensions='1' type-id='69ab6968' size-in-bits='1280' id='15b94482'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='v4l2_clip' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1138' column='1' id='aecf225c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane_pix_format' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2173' column='1' id='69ab6968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='81144473' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2176' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='96' id='81144473'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/mc/mc-device.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3ca3bd83' size-in-bits='2048' id='4cb10997'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='216' id='665c09d8'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='320' id='36c46961'>
+        <subrange length='40' type-id='7ff19f0f' id='8f80b239'/>
+      </array-type-def>
+      <class-decl name='media_device' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='144' column='1' id='e4dc0de6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/media-device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devnode' type-id='f3496bd3' visibility='default' filepath='include/media/media-device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='model' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='driver_name' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='serial' type-id='36c46961' visibility='default' filepath='include/media/media-device.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bus_info' type-id='16dc656a' visibility='default' filepath='include/media/media-device.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_revision' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='topology_version' type-id='91ce1af9' visibility='default' filepath='include/media/media-device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='entity_internal_idx' type-id='46ce60fb' visibility='default' filepath='include/media/media-device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='entity_internal_idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='entities' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='interfaces' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='pads' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='entity_notify' type-id='72f469ec' visibility='default' filepath='include/media/media-device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='graph_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pm_count_walk' type-id='32ec86e0' visibility='default' filepath='include/media/media-device.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='source_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='enable_source' type-id='c3e03202' visibility='default' filepath='include/media/media-device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='disable_source' type-id='35aeb76e' visibility='default' filepath='include/media/media-device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ops' type-id='306dc166' visibility='default' filepath='include/media/media-device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='req_queue_mutex' type-id='925167dc' visibility='default' filepath='include/media/media-device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='request_id' type-id='49178f86' visibility='default' filepath='include/media/media-device.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_devnode' size-in-bits='8960' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='75' column='1' id='41cb24b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='include/media/media-devnode.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fops' type-id='1d91e688' visibility='default' filepath='include/media/media-devnode.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/media-devnode.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='cdev' type-id='22f86351' visibility='default' filepath='include/media/media-devnode.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/media/media-devnode.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/media-devnode.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-devnode.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='release' type-id='baa0730e' visibility='default' filepath='include/media/media-devnode.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_file_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-devnode.h' line='47' column='1' id='f2ce689d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/media-devnode.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/media-devnode.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/media-devnode.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/media-devnode.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/media-devnode.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/media-devnode.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_graph' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='88' column='1' id='32ec86e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stack' type-id='4cb10997' visibility='default' filepath='include/media/media-entity.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ent_enum' type-id='4cd55af5' visibility='default' filepath='include/media/media-entity.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='top' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='89' column='1' id='3ca3bd83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link' type-id='e84b031a' visibility='default' filepath='include/media/media-entity.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='289' column='1' id='889856f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/media-entity.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='obj_type' type-id='33f4e443' visibility='default' filepath='include/media/media-entity.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='function' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_pads' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='num_links' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_backlinks' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='internal_idx' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pads' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='94f26cbd' visibility='default' filepath='include/media/media-entity.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pipe' type-id='4ffae8c8' visibility='default' filepath='include/media/media-entity.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='info' type-id='f22bd336' visibility='default' filepath='include/media/media-entity.h' line='316' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_gobj' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='57' column='1' id='9fdb75a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-entity.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_entity_type' filepath='include/media/media-entity.h' line='243' column='1' id='33f4e443'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_BASE' value='0'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_VIDEO_DEVICE' value='1'/>
+        <enumerator name='MEDIA_ENTITY_TYPE_V4L2_SUBDEV' value='2'/>
+      </enum-decl>
+      <class-decl name='media_pad' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='189' column='1' id='48b94b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/media/media-entity.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sig_type' type-id='ec7f70f4' visibility='default' filepath='include/media/media-entity.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='194' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_pad_signal_type' filepath='include/media/media-entity.h' line='171' column='1' id='ec7f70f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PAD_SIGNAL_DEFAULT' value='0'/>
+        <enumerator name='PAD_SIGNAL_ANALOG' value='1'/>
+        <enumerator name='PAD_SIGNAL_DV' value='2'/>
+        <enumerator name='PAD_SIGNAL_AUDIO' value='3'/>
+      </enum-decl>
+      <class-decl name='media_entity_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='214' column='1' id='b13ab8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_fwnode_pad' type-id='3ab939dc' visibility='default' filepath='include/media/media-entity.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='link_setup' type-id='74b6c0a0' visibility='default' filepath='include/media/media-entity.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='link_validate' type-id='5e810368' visibility='default' filepath='include/media/media-entity.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_link' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='132' column='1' id='876d3bbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='506a0f90' visibility='default' filepath='include/media/media-entity.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='a7b4792d' visibility='default' filepath='include/media/media-entity.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reverse' type-id='b4de78ea' visibility='default' filepath='include/media/media-entity.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/media-entity.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='is_backlink' type-id='b50a4934' visibility='default' filepath='include/media/media-entity.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='135' column='1' id='506a0f90'>
+        <data-member access='public'>
+          <var-decl name='gobj0' type-id='4077272c' visibility='default' filepath='include/media/media-entity.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='source' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='intf' type-id='afe1ccd7' visibility='default' filepath='include/media/media-entity.h' line='138' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='media_interface' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='335' column='1' id='5943f90f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='graph_obj' type-id='9fdb75a6' visibility='default' filepath='include/media/media-entity.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='links' type-id='72f469ec' visibility='default' filepath='include/media/media-entity.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='339' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='140' column='1' id='a7b4792d'>
+        <data-member access='public'>
+          <var-decl name='gobj1' type-id='4077272c' visibility='default' filepath='include/media/media-entity.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sink' type-id='50a51839' visibility='default' filepath='include/media/media-entity.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='entity' type-id='19e05b5f' visibility='default' filepath='include/media/media-entity.h' line='143' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='media_pipeline' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='104' column='1' id='2783658a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming_count' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='graph' type-id='32ec86e0' visibility='default' filepath='include/media/media-entity.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='311' column='1' id='f22bd336'>
+        <data-member access='public'>
+          <var-decl name='dev' type-id='8334ad45' visibility='default' filepath='include/media/media-entity.h' line='315' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/media-entity.h' line='312' column='1' id='8334ad45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='314' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_entity_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='72' column='1' id='4cd55af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmap' type-id='1d2c2b85' visibility='default' filepath='include/media/media-entity.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idx_max' type-id='95e97e5e' visibility='default' filepath='include/media/media-entity.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_device_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-device.h' line='65' column='1' id='3d78e975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link_notify' type-id='c4d81ddd' visibility='default' filepath='include/media/media-device.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req_alloc' type-id='58b0d2ef' visibility='default' filepath='include/media/media-device.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_free' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_validate' type-id='82ec1389' visibility='default' filepath='include/media/media-device.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_queue' type-id='5e611ec0' visibility='default' filepath='include/media/media-device.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_request' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='62' column='1' id='08c313b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/media-request.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='debug_str' type-id='665c09d8' visibility='default' filepath='include/media/media-request.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f22f33ac' visibility='default' filepath='include/media/media-request.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='updating_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='access_count' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='objects' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_incomplete_objects' type-id='f0981eeb' visibility='default' filepath='include/media/media-request.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/media/media-request.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/media-request.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='media_request_state' filepath='include/media/media-request.h' line='37' column='1' id='f22f33ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEDIA_REQUEST_STATE_IDLE' value='0'/>
+        <enumerator name='MEDIA_REQUEST_STATE_VALIDATING' value='1'/>
+        <enumerator name='MEDIA_REQUEST_STATE_QUEUED' value='2'/>
+        <enumerator name='MEDIA_REQUEST_STATE_COMPLETE' value='3'/>
+        <enumerator name='MEDIA_REQUEST_STATE_CLEANING' value='4'/>
+        <enumerator name='MEDIA_REQUEST_STATE_UPDATING' value='5'/>
+        <enumerator name='NR_OF_MEDIA_REQUEST_STATE' value='6'/>
+      </enum-decl>
+      <qualified-type-def type-id='3d78e975' const='yes' id='71fb30e8'/>
+      <pointer-type-def type-id='71fb30e8' size-in-bits='64' id='306dc166'/>
+      <qualified-type-def type-id='b13ab8d6' const='yes' id='f7d60a45'/>
+      <pointer-type-def type-id='f7d60a45' size-in-bits='64' id='94f26cbd'/>
+      <qualified-type-def type-id='f2ce689d' const='yes' id='4b72b472'/>
+      <pointer-type-def type-id='4b72b472' size-in-bits='64' id='1d91e688'/>
+      <qualified-type-def type-id='48b94b91' const='yes' id='d5f12852'/>
+      <pointer-type-def type-id='d5f12852' size-in-bits='64' id='42a2b4e8'/>
+      <pointer-type-def type-id='7add78ea' size-in-bits='64' id='3ab939dc'/>
+      <pointer-type-def type-id='835d6aa6' size-in-bits='64' id='74b6c0a0'/>
+      <pointer-type-def type-id='5fbbd9b8' size-in-bits='64' id='c3e03202'/>
+      <pointer-type-def type-id='11c513ae' size-in-bits='64' id='5e810368'/>
+      <pointer-type-def type-id='d7de7749' size-in-bits='64' id='c4d81ddd'/>
+      <pointer-type-def type-id='2c3b4d9d' size-in-bits='64' id='82ec1389'/>
+      <pointer-type-def type-id='e4dc0de6' size-in-bits='64' id='e2929c1c'/>
+      <pointer-type-def type-id='41cb24b3' size-in-bits='64' id='f3496bd3'/>
+      <pointer-type-def type-id='889856f7' size-in-bits='64' id='19e05b5f'/>
+      <pointer-type-def type-id='9fdb75a6' size-in-bits='64' id='4077272c'/>
+      <pointer-type-def type-id='5943f90f' size-in-bits='64' id='afe1ccd7'/>
+      <pointer-type-def type-id='876d3bbc' size-in-bits='64' id='b4de78ea'/>
+      <pointer-type-def type-id='48b94b91' size-in-bits='64' id='50a51839'/>
+      <pointer-type-def type-id='2783658a' size-in-bits='64' id='4ffae8c8'/>
+      <pointer-type-def type-id='08c313b5' size-in-bits='64' id='ac429605'/>
+      <pointer-type-def type-id='3bd753d3' size-in-bits='64' id='58b0d2ef'/>
+      <pointer-type-def type-id='2ebc1c8c' size-in-bits='64' id='baa0730e'/>
+      <pointer-type-def type-id='cf9a081c' size-in-bits='64' id='35aeb76e'/>
+      <pointer-type-def type-id='d81a5dde' size-in-bits='64' id='5e611ec0'/>
+      <function-decl name='media_device_init' mangled-name='media_device_init' filepath='drivers/media/mc/mc-device.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_init'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_device_unregister_entity' mangled-name='media_device_unregister_entity' filepath='drivers/media/mc/mc-device.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_unregister_entity'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-device.c' line='680' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_device_unregister' mangled-name='media_device_unregister' filepath='drivers/media/mc/mc-device.c' line='800' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_unregister'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='800' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_device_register_entity' mangled-name='media_device_register_entity' filepath='drivers/media/mc/mc-device.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_register_entity'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='615' column='1'/>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-device.c' line='616' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_device_cleanup' mangled-name='media_device_cleanup' filepath='drivers/media/mc/mc-device.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_device_cleanup'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='721' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__media_device_register' mangled-name='__media_device_register' filepath='drivers/media/mc/mc-device.c' line='731' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__media_device_register'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-device.c' line='731' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/media/mc/mc-device.c' line='732' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7add78ea'>
+        <parameter type-id='41b1c13c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='835d6aa6'>
+        <parameter type-id='19e05b5f'/>
+        <parameter type-id='42a2b4e8'/>
+        <parameter type-id='42a2b4e8'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fbbd9b8'>
+        <parameter type-id='19e05b5f'/>
+        <parameter type-id='4ffae8c8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11c513ae'>
+        <parameter type-id='b4de78ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7de7749'>
+        <parameter type-id='b4de78ea'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c3b4d9d'>
+        <parameter type-id='ac429605'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bd753d3'>
+        <parameter type-id='e2929c1c'/>
+        <return type-id='ac429605'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ebc1c8c'>
+        <parameter type-id='f3496bd3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf9a081c'>
+        <parameter type-id='19e05b5f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d81a5dde'>
+        <parameter type-id='ac429605'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/mc/mc-entity.c' language='LANG_C89'>
+      <class-decl name='media_intf_devnode' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/media-entity.h' line='349' column='1' id='0d853221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='intf' type-id='5943f90f' visibility='default' filepath='include/media/media-entity.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='major' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='minor' type-id='19c2251e' visibility='default' filepath='include/media/media-entity.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='32ec86e0' size-in-bits='64' id='375e0126'/>
+      <pointer-type-def type-id='0d853221' size-in-bits='64' id='8114c6c9'/>
+      <function-decl name='__media_entity_setup_link' mangled-name='__media_entity_setup_link' filepath='drivers/media/mc/mc-entity.c' line='825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__media_entity_setup_link'>
+        <parameter type-id='b4de78ea' name='link' filepath='drivers/media/mc/mc-entity.c' line='825' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='825' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_remove_intf_links' mangled-name='media_remove_intf_links' filepath='drivers/media/mc/mc-entity.c' line='1016' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_remove_intf_links'>
+        <parameter type-id='afe1ccd7' name='intf' filepath='drivers/media/mc/mc-entity.c' line='1016' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_start' mangled-name='media_graph_walk_start' filepath='drivers/media/mc/mc-entity.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_start'>
+        <parameter type-id='375e0126' name='graph' filepath='drivers/media/mc/mc-entity.c' line='294' column='1'/>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_next' mangled-name='media_graph_walk_next' filepath='drivers/media/mc/mc-entity.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_next'>
+        <parameter type-id='375e0126' name='graph' filepath='drivers/media/mc/mc-entity.c' line='345' column='1'/>
+        <return type-id='19e05b5f'/>
+      </function-decl>
+      <function-decl name='media_graph_walk_init' mangled-name='media_graph_walk_init' filepath='drivers/media/mc/mc-entity.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_graph_walk_init'>
+        <parameter type-id='375e0126' name='graph' filepath='drivers/media/mc/mc-entity.c' line='278' column='1'/>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-entity.c' line='278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_setup_link' mangled-name='media_entity_setup_link' filepath='drivers/media/mc/mc-entity.c' line='871' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_setup_link'>
+        <parameter type-id='b4de78ea' name='link' filepath='drivers/media/mc/mc-entity.c' line='871' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='871' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_remove_links' mangled-name='media_entity_remove_links' filepath='drivers/media/mc/mc-entity.c' line='787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_remove_links'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='787' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_entity_remote_pad' mangled-name='media_entity_remote_pad' filepath='drivers/media/mc/mc-entity.c' line='900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_remote_pad'>
+        <parameter type-id='42a2b4e8' name='pad' filepath='drivers/media/mc/mc-entity.c' line='900' column='1'/>
+        <return type-id='50a51839'/>
+      </function-decl>
+      <function-decl name='media_entity_pads_init' mangled-name='media_entity_pads_init' filepath='drivers/media/mc/mc-entity.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_pads_init'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='197' column='1'/>
+        <parameter type-id='1dc6a898' name='num_pads' filepath='drivers/media/mc/mc-entity.c' line='197' column='1'/>
+        <parameter type-id='50a51839' name='pads' filepath='drivers/media/mc/mc-entity.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_entity_find_link' mangled-name='media_entity_find_link' filepath='drivers/media/mc/mc-entity.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_entity_find_link'>
+        <parameter type-id='50a51839' name='source' filepath='drivers/media/mc/mc-entity.c' line='884' column='1'/>
+        <parameter type-id='50a51839' name='sink' filepath='drivers/media/mc/mc-entity.c' line='884' column='1'/>
+        <return type-id='b4de78ea'/>
+      </function-decl>
+      <function-decl name='media_devnode_remove' mangled-name='media_devnode_remove' filepath='drivers/media/mc/mc-entity.c' line='954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_devnode_remove'>
+        <parameter type-id='8114c6c9' name='devnode' filepath='drivers/media/mc/mc-entity.c' line='954' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='media_devnode_create' mangled-name='media_devnode_create' filepath='drivers/media/mc/mc-entity.c' line='934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_devnode_create'>
+        <parameter type-id='e2929c1c' name='mdev' filepath='drivers/media/mc/mc-entity.c' line='934' column='1'/>
+        <parameter type-id='19c2251e' name='type' filepath='drivers/media/mc/mc-entity.c' line='935' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='935' column='1'/>
+        <parameter type-id='19c2251e' name='major' filepath='drivers/media/mc/mc-entity.c' line='936' column='1'/>
+        <parameter type-id='19c2251e' name='minor' filepath='drivers/media/mc/mc-entity.c' line='936' column='1'/>
+        <return type-id='8114c6c9'/>
+      </function-decl>
+      <function-decl name='media_create_pad_link' mangled-name='media_create_pad_link' filepath='drivers/media/mc/mc-entity.c' line='659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_create_pad_link'>
+        <parameter type-id='19e05b5f' name='source' filepath='drivers/media/mc/mc-entity.c' line='659' column='1'/>
+        <parameter type-id='1dc6a898' name='source_pad' filepath='drivers/media/mc/mc-entity.c' line='659' column='1'/>
+        <parameter type-id='19e05b5f' name='sink' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <parameter type-id='1dc6a898' name='sink_pad' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='660' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='media_create_intf_link' mangled-name='media_create_intf_link' filepath='drivers/media/mc/mc-entity.c' line='962' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='media_create_intf_link'>
+        <parameter type-id='19e05b5f' name='entity' filepath='drivers/media/mc/mc-entity.c' line='962' column='1'/>
+        <parameter type-id='afe1ccd7' name='intf' filepath='drivers/media/mc/mc-entity.c' line='963' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='drivers/media/mc/mc-entity.c' line='964' column='1'/>
+        <return type-id='b4de78ea'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/rc/lirc_dev.c' language='LANG_C89'>
+      <class-decl name='lirc_scancode' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/lirc.h' line='155' column='1' id='06b530b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/lirc.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/lirc.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rc_proto' type-id='d315442e' visibility='default' filepath='include/uapi/linux/lirc.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='keycode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/lirc.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scancode' type-id='d3130597' visibility='default' filepath='include/uapi/linux/lirc.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='06b530b2' size-in-bits='64' id='612cbc00'/>
+      <function-decl name='ir_lirc_scancode_event' mangled-name='ir_lirc_scancode_event' filepath='drivers/media/rc/lirc_dev.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_lirc_scancode_event'>
+        <parameter type-id='75ae4804' name='dev' filepath='drivers/media/rc/lirc_dev.c' line='120' column='1'/>
+        <parameter type-id='612cbc00' name='lsc' filepath='drivers/media/rc/lirc_dev.c' line='120' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/rc/rc-ir-raw.c' language='LANG_C89'>
+      <class-decl name='ir_raw_handler' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='33' column='1' id='f7b43f0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='protocols' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='decode' type-id='ddcee1af' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='encode' type-id='9bf2f36c' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='raw_register' type-id='7c07671a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='raw_unregister' type-id='7c07671a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_timings_pl' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='272' column='1' id='edbe2ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_pulse' type-id='0d532ec1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msb_first' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_timings_pd' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='250' column='1' id='e5be2360'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bit_space' type-id='0d532ec1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='trailer_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msb_first' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='257' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_timings_manchester' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='200' column='1' id='095cd8ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='leader_pulse' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='leader_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='invert' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trailer_space' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='205' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='095cd8ee' const='yes' id='50f7224d'/>
+      <pointer-type-def type-id='50f7224d' size-in-bits='64' id='dc0b2825'/>
+      <qualified-type-def type-id='e5be2360' const='yes' id='1e0de7fb'/>
+      <pointer-type-def type-id='1e0de7fb' size-in-bits='64' id='20e3ee03'/>
+      <qualified-type-def type-id='edbe2ff8' const='yes' id='160ddb63'/>
+      <pointer-type-def type-id='160ddb63' size-in-bits='64' id='00d033eb'/>
+      <pointer-type-def type-id='3e570d92' size-in-bits='64' id='9bf2f36c'/>
+      <pointer-type-def type-id='e5b46beb' size-in-bits='64' id='ddcee1af'/>
+      <pointer-type-def type-id='4a06e68e' size-in-bits='64' id='2cdd142c'/>
+      <pointer-type-def type-id='f7b43f0c' size-in-bits='64' id='55cfdcaa'/>
+      <function-decl name='ir_raw_handler_unregister' mangled-name='ir_raw_handler_unregister' filepath='drivers/media/rc/rc-ir-raw.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_handler_unregister'>
+        <parameter type-id='55cfdcaa' name='ir_raw_handler' filepath='drivers/media/rc/rc-ir-raw.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ir_raw_handler_register' mangled-name='ir_raw_handler_register' filepath='drivers/media/rc/rc-ir-raw.c' line='692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_handler_register'>
+        <parameter type-id='55cfdcaa' name='ir_raw_handler' filepath='drivers/media/rc/rc-ir-raw.c' line='692' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_gen_pl' mangled-name='ir_raw_gen_pl' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_pl'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='459' column='1'/>
+        <parameter type-id='00d033eb' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='460' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='461' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='461' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_gen_pd' mangled-name='ir_raw_gen_pd' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_pd'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='400' column='1'/>
+        <parameter type-id='20e3ee03' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='401' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='402' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='402' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ir_raw_gen_manchester' mangled-name='ir_raw_gen_manchester' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ir_raw_gen_manchester'>
+        <parameter type-id='2cdd142c' name='ev' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/media/rc/rc-ir-raw.c' line='318' column='1'/>
+        <parameter type-id='dc0b2825' name='timings' filepath='drivers/media/rc/rc-ir-raw.c' line='319' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='drivers/media/rc/rc-ir-raw.c' line='320' column='1'/>
+        <parameter type-id='91ce1af9' name='data' filepath='drivers/media/rc/rc-ir-raw.c' line='320' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='3e570d92'>
+        <parameter type-id='17862576'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='4a06e68e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5b46beb'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='39486498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/rc/rc-main.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8ff9530e' size-in-bits='320' id='9f18d529'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39486498' size-in-bits='32768' id='55a95556'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <class-decl name='rc_map_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='124' column='1' id='cadfefb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/rc-map.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-map.h' line='126' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='108' column='1' id='9ab3364f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan' type-id='57909d12' visibility='default' filepath='include/media/rc-map.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='alloc' type-id='f0981eeb' visibility='default' filepath='include/media/rc-map.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rc_proto' type-id='17862576' visibility='default' filepath='include/media/rc-map.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/rc-map.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-map.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc_map_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-map.h' line='91' column='1' id='ae855994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-map.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rc_proto' filepath='include/uapi/linux/lirc.h' line='200' column='1' id='17862576'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_PROTO_UNKNOWN' value='0'/>
+        <enumerator name='RC_PROTO_OTHER' value='1'/>
+        <enumerator name='RC_PROTO_RC5' value='2'/>
+        <enumerator name='RC_PROTO_RC5X_20' value='3'/>
+        <enumerator name='RC_PROTO_RC5_SZ' value='4'/>
+        <enumerator name='RC_PROTO_JVC' value='5'/>
+        <enumerator name='RC_PROTO_SONY12' value='6'/>
+        <enumerator name='RC_PROTO_SONY15' value='7'/>
+        <enumerator name='RC_PROTO_SONY20' value='8'/>
+        <enumerator name='RC_PROTO_NEC' value='9'/>
+        <enumerator name='RC_PROTO_NECX' value='10'/>
+        <enumerator name='RC_PROTO_NEC32' value='11'/>
+        <enumerator name='RC_PROTO_SANYO' value='12'/>
+        <enumerator name='RC_PROTO_MCIR2_KBD' value='13'/>
+        <enumerator name='RC_PROTO_MCIR2_MSE' value='14'/>
+        <enumerator name='RC_PROTO_RC6_0' value='15'/>
+        <enumerator name='RC_PROTO_RC6_6A_20' value='16'/>
+        <enumerator name='RC_PROTO_RC6_6A_24' value='17'/>
+        <enumerator name='RC_PROTO_RC6_6A_32' value='18'/>
+        <enumerator name='RC_PROTO_RC6_MCE' value='19'/>
+        <enumerator name='RC_PROTO_SHARP' value='20'/>
+        <enumerator name='RC_PROTO_XMP' value='21'/>
+        <enumerator name='RC_PROTO_CEC' value='22'/>
+        <enumerator name='RC_PROTO_IMON' value='23'/>
+        <enumerator name='RC_PROTO_RCMM12' value='24'/>
+        <enumerator name='RC_PROTO_RCMM24' value='25'/>
+        <enumerator name='RC_PROTO_RCMM32' value='26'/>
+        <enumerator name='RC_PROTO_XBOX_DVD' value='27'/>
+      </enum-decl>
+      <class-decl name='rc_dev' size-in-bits='20736' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='162' column='1' id='7a35a8fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='managed_alloc' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='sysfs_groups' type-id='9f18d529' visibility='default' filepath='include/media/rc-core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='input_phys' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='input_id' type-id='d99ed569' visibility='default' filepath='include/media/rc-core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='map_name' type-id='80f4b756' visibility='default' filepath='include/media/rc-core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='rc_map' type-id='9ab3364f' visibility='default' filepath='include/media/rc-core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/media/rc-core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='raw' type-id='696ed472' visibility='default' filepath='include/media/rc-core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/media/rc-core.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='driver_type' type-id='d4dbe3db' visibility='default' filepath='include/media/rc-core.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9000'>
+          <var-decl name='encode_wakeup' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='allowed_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='enabled_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='allowed_wakeup_protocols' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='wakeup_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='scancode_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='scancode_wakeup_filter' type-id='f3a6417e' visibility='default' filepath='include/media/rc-core.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='scancode_mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='users' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/rc-core.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9568'>
+          <var-decl name='keypressed' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='keyup_jiffies' type-id='7359adad' visibility='default' filepath='include/media/rc-core.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='timer_keyup' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='timer_repeat' type-id='abe41e67' visibility='default' filepath='include/media/rc-core.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='last_keycode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='last_protocol' type-id='17862576' visibility='default' filepath='include/media/rc-core.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='last_scancode' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='last_toggle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='min_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='max_timeout' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='rx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='tx_resolution' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='lirc_dev' type-id='66e487eb' visibility='default' filepath='include/media/rc-core.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='lirc_cdev' type-id='22f86351' visibility='default' filepath='include/media/rc-core.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='gap_start' type-id='fbc017ef' visibility='default' filepath='include/media/rc-core.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='gap_duration' type-id='91ce1af9' visibility='default' filepath='include/media/rc-core.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='gap' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19616'>
+          <var-decl name='lirc_fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/rc-core.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='lirc_fh' type-id='72f469ec' visibility='default' filepath='include/media/rc-core.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/media/rc-core.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='change_protocol' type-id='a113447f' visibility='default' filepath='include/media/rc-core.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='open' type-id='7c07671a' visibility='default' filepath='include/media/rc-core.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='close' type-id='35513fbd' visibility='default' filepath='include/media/rc-core.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='s_tx_mask' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='s_tx_carrier' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='s_tx_duty_cycle' type-id='27b80621' visibility='default' filepath='include/media/rc-core.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='s_rx_carrier_range' type-id='03935b08' visibility='default' filepath='include/media/rc-core.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='tx_ir' type-id='86089bb2' visibility='default' filepath='include/media/rc-core.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='s_idle' type-id='7e6d7408' visibility='default' filepath='include/media/rc-core.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='s_learning_mode' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='s_carrier_report' type-id='0b603cc1' visibility='default' filepath='include/media/rc-core.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='s_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='s_wakeup_filter' type-id='a479b17b' visibility='default' filepath='include/media/rc-core.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='s_timeout' type-id='efba8d40' visibility='default' filepath='include/media/rc-core.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ir_raw_event_ctrl' size-in-bits='36544' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='48' column='1' id='986a13e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kfifo' type-id='56fcb682' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33152'>
+          <var-decl name='last_event' type-id='fbc017ef' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33216'>
+          <var-decl name='dev' type-id='75ae4804' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33280'>
+          <var-decl name='edge_spinlock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33344'>
+          <var-decl name='edge_handle' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='prev_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='this_ev' type-id='39486498' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='bpf_sample' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='progs' type-id='380c7edc' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34048'>
+          <var-decl name='nec' type-id='9f72ab96' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34176'>
+          <var-decl name='rc5' type-id='9f1c8f9e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='rc6' type-id='ef26ce47' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34496'>
+          <var-decl name='sony' type-id='bec1f309' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34592'>
+          <var-decl name='jvc' type-id='5f32c669' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34752'>
+          <var-decl name='sanyo' type-id='8474b1f2' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34880'>
+          <var-decl name='sharp' type-id='556cd788' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35008'>
+          <var-decl name='mce_kbd' type-id='d7c6758b' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='35712'>
+          <var-decl name='xmp' type-id='01edcb75' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36288'>
+          <var-decl name='imon' type-id='099324f9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36448'>
+          <var-decl name='rcmm' type-id='b68be393' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32960' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='56fcb682'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4dca854a' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='55a95556' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1' id='4dca854a'>
+        <data-member access='public'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='type' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='const_type' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='4a06e68e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr_const' type-id='528735d1' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='52' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ir_raw_event' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='299' column='1' id='39486498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='671d516a' visibility='default' filepath='include/media/rc-core.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='duty_cycle' type-id='f9b06939' visibility='default' filepath='include/media/rc-core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pulse' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='reset' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='carrier_report' type-id='f0981eeb' visibility='default' filepath='include/media/rc-core.h' line='309' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/media/rc-core.h' line='300' column='1' id='671d516a'>
+        <data-member access='public'>
+          <var-decl name='duration' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='carrier' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nec_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='67' column='1' id='9f72ab96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_nec_x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='necx_repeat' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc5_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='74' column='1' id='9f1c8f9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='is_rc5x' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rc6_dec' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='80' column='1' id='ef26ce47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sony_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='88' column='1' id='bec1f309'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='jvc_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='93' column='1' id='5f32c669'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='old_bits' type-id='1dc6a898' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='toggle' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sanyo_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='101' column='1' id='8474b1f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='91ce1af9' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sharp_dec' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='106' column='1' id='556cd788'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pulse_len' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mce_kbd_dec' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='112' column='1' id='d7c6758b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keylock' type-id='fb4018a0' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_timeout' type-id='abe41e67' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='header' type-id='f9b06939' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='body' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wanted_bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xmp_dec' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='122' column='1' id='01edcb75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='durations' type-id='02fdec64' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='imon_dec' size-in-bits='160' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='127' column='1' id='099324f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_chk' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bits' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stick_keyboard' type-id='b50a4934' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcmm_dec' size-in-bits='96' is-struct='yes' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='134' column='1' id='b68be393'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bits' type-id='19c2251e' visibility='default' filepath='drivers/media/rc/rc-core-priv.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rc_driver_type' filepath='include/media/rc-core.h' line='27' column='1' id='d4dbe3db'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RC_DRIVER_SCANCODE' value='0'/>
+        <enumerator name='RC_DRIVER_IR_RAW' value='1'/>
+        <enumerator name='RC_DRIVER_IR_RAW_TX' value='2'/>
+      </enum-decl>
+      <class-decl name='rc_scancode_filter' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/rc-core.h' line='38' column='1' id='f3a6417e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/media/rc-core.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='39486498' const='yes' id='f28519a1'/>
+      <pointer-type-def type-id='f28519a1' size-in-bits='64' id='528735d1'/>
+      <pointer-type-def type-id='cd5ad9b0' size-in-bits='64' id='7c07671a'/>
+      <pointer-type-def type-id='05cdb97d' size-in-bits='64' id='0b603cc1'/>
+      <pointer-type-def type-id='51b5f0bf' size-in-bits='64' id='a479b17b'/>
+      <pointer-type-def type-id='6e44244d' size-in-bits='64' id='27b80621'/>
+      <pointer-type-def type-id='ec263c6e' size-in-bits='64' id='03935b08'/>
+      <pointer-type-def type-id='d0615a9b' size-in-bits='64' id='a113447f'/>
+      <pointer-type-def type-id='74912d6e' size-in-bits='64' id='efba8d40'/>
+      <pointer-type-def type-id='a82fc150' size-in-bits='64' id='86089bb2'/>
+      <pointer-type-def type-id='39486498' size-in-bits='64' id='4a06e68e'/>
+      <pointer-type-def type-id='986a13e4' size-in-bits='64' id='696ed472'/>
+      <pointer-type-def type-id='7a35a8fe' size-in-bits='64' id='75ae4804'/>
+      <pointer-type-def type-id='cadfefb8' size-in-bits='64' id='31d2664e'/>
+      <pointer-type-def type-id='ae855994' size-in-bits='64' id='57909d12'/>
+      <pointer-type-def type-id='f3a6417e' size-in-bits='64' id='77da1114'/>
+      <pointer-type-def type-id='25048781' size-in-bits='64' id='35513fbd'/>
+      <pointer-type-def type-id='437aead6' size-in-bits='64' id='7e6d7408'/>
+      <function-decl name='rc_map_unregister' mangled-name='rc_map_unregister' filepath='drivers/media/rc/rc-main.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_map_unregister'>
+        <parameter type-id='31d2664e' name='map' filepath='drivers/media/rc/rc-main.c' line='144' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rc_repeat' mangled-name='rc_repeat' filepath='drivers/media/rc/rc-main.c' line='705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_repeat'>
+        <parameter type-id='75ae4804' name='dev' filepath='drivers/media/rc/rc-main.c' line='705' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rc_map_register' mangled-name='rc_map_register' filepath='drivers/media/rc/rc-main.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_map_register'>
+        <parameter type-id='31d2664e' name='map' filepath='drivers/media/rc/rc-main.c' line='135' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rc_keydown' mangled-name='rc_keydown' filepath='drivers/media/rc/rc-main.c' line='812' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rc_keydown'>
+        <parameter type-id='75ae4804' name='dev' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='17862576' name='protocol' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='19c2251e' name='scancode' filepath='drivers/media/rc/rc-main.c' line='812' column='1'/>
+        <parameter type-id='f9b06939' name='toggle' filepath='drivers/media/rc/rc-main.c' line='813' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cd5ad9b0'>
+        <parameter type-id='75ae4804'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cdb97d'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51b5f0bf'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='77da1114'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6e44244d'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec263c6e'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d0615a9b'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74912d6e'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a82fc150'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25048781'>
+        <parameter type-id='75ae4804' name='dev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='437aead6'>
+        <parameter type-id='75ae4804'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-common.c' language='LANG_C89'>
+      <class-decl name='v4l2_format_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-common.h' line='486' column='1' id='c151291a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='format' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-common.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_enc' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mem_planes' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='comp_planes' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bpp' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hdiv' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vdiv' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-common.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='block_w' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='block_h' type-id='931565be' visibility='default' filepath='include/media/v4l2-common.h' line='495' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c151291a' const='yes' id='bccc86df'/>
+      <pointer-type-def type-id='bccc86df' size-in-bits='64' id='2af873af'/>
+      <function-decl name='v4l2_format_info' mangled-name='v4l2_format_info' filepath='drivers/media/v4l2-core/v4l2-common.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_format_info'>
+        <parameter type-id='19c2251e' name='format' filepath='drivers/media/v4l2-core/v4l2-common.c' line='235' column='1'/>
+        <return type-id='2af873af'/>
+      </function-decl>
+      <function-decl name='v4l_bound_align_image' mangled-name='v4l_bound_align_image' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l_bound_align_image'>
+        <parameter type-id='f9409001' name='w' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='wmin' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='wmax' filepath='drivers/media/v4l2-core/v4l2-common.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='walign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='121' column='1'/>
+        <parameter type-id='f9409001' name='h' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='hmin' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='hmax' filepath='drivers/media/v4l2-core/v4l2-common.c' line='122' column='1'/>
+        <parameter type-id='f0981eeb' name='halign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='123' column='1'/>
+        <parameter type-id='f0981eeb' name='salign' filepath='drivers/media/v4l2-core/v4l2-common.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-ctrls.c' language='LANG_C89'>
+      <class-decl name='v4l2_ctrl_config' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='408' column='1' id='f817de22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='def' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='427' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f817de22' const='yes' id='a5b2ff47'/>
+      <pointer-type-def type-id='a5b2ff47' size-in-bits='64' id='45c81897'/>
+      <function-decl name='v4l2_ctrl_handler_init_class' mangled-name='v4l2_ctrl_handler_init_class' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_init_class'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2246' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_of_controls_hint' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2247' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2248' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2248' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_find' mangled-name='v4l2_ctrl_find' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_find'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2385' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2385' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_s_ctrl' mangled-name='v4l2_s_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_s_ctrl'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4210' column='1'/>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4210' column='1'/>
+        <parameter type-id='bcd28457' name='control' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4211' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_g_ctrl' mangled-name='v4l2_g_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_g_ctrl'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3795' column='1'/>
+        <parameter type-id='bcd28457' name='control' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3795' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_subscribe_event' mangled-name='v4l2_ctrl_subscribe_event' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_subscribe_event'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4582' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4583' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_replace' mangled-name='v4l2_ctrl_replace' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_replace'>
+        <parameter type-id='a5c94ccc' name='old' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4547' column='1'/>
+        <parameter type-id='52009e4b' name='new' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4547' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_merge' mangled-name='v4l2_ctrl_merge' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_merge'>
+        <parameter type-id='52009e4b' name='old' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4556' column='1'/>
+        <parameter type-id='a5c94ccc' name='new' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4556' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_subdev_subscribe_event' mangled-name='v4l2_ctrl_subdev_subscribe_event' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_subdev_subscribe_event'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4591' column='1'/>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4591' column='1'/>
+        <parameter type-id='8edac644' name='sub' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4592' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_std_menu' mangled-name='v4l2_ctrl_new_std_menu' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_std_menu'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2738' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2739' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2740' column='1'/>
+        <parameter type-id='f9b06939' name='_max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2740' column='1'/>
+        <parameter type-id='91ce1af9' name='mask' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2740' column='1'/>
+        <parameter type-id='f9b06939' name='_def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2740' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_get_name' mangled-name='v4l2_ctrl_get_name' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_get_name'>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='745' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_std' mangled-name='v4l2_ctrl_new_std' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_std'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2716' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2717' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2718' column='1'/>
+        <parameter type-id='9b7c55ef' name='min' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2718' column='1'/>
+        <parameter type-id='9b7c55ef' name='max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2718' column='1'/>
+        <parameter type-id='91ce1af9' name='step' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2718' column='1'/>
+        <parameter type-id='9b7c55ef' name='def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2718' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_int_menu' mangled-name='v4l2_ctrl_new_int_menu' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_int_menu'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2825' column='1'/>
+        <parameter type-id='1086b623' name='ops' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2826' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2827' column='1'/>
+        <parameter type-id='f9b06939' name='_max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2827' column='1'/>
+        <parameter type-id='f9b06939' name='_def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2827' column='1'/>
+        <parameter type-id='43ae54cf' name='qmenu_int' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2827' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_new_custom' mangled-name='v4l2_ctrl_new_custom' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_new_custom'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2672' column='1'/>
+        <parameter type-id='45c81897' name='cfg' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2673' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2673' column='1'/>
+        <return type-id='4b8b2cf3'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_log_status' mangled-name='v4l2_ctrl_log_status' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_log_status'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4570' column='1'/>
+        <parameter type-id='eaa32e2f' name='fh' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4570' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_handler_setup' mangled-name='v4l2_ctrl_handler_setup' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_setup'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3090' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_handler_free' mangled-name='v4l2_ctrl_handler_free' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_handler_free'>
+        <parameter type-id='2b59fa5e' name='hdl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_g_ctrl' mangled-name='v4l2_ctrl_g_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_g_ctrl'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='3809' column='1'/>
+        <return type-id='a7832498'/>
+      </function-decl>
+      <function-decl name='v4l2_ctrl_cluster' mangled-name='v4l2_ctrl_cluster' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_ctrl_cluster'>
+        <parameter type-id='f0981eeb' name='ncontrols' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2906' column='1'/>
+        <parameter type-id='c517999b' name='controls' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='2906' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__v4l2_ctrl_s_ctrl' mangled-name='__v4l2_ctrl_s_ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__v4l2_ctrl_s_ctrl'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4230' column='1'/>
+        <parameter type-id='a7832498' name='val' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4230' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__v4l2_ctrl_modify_range' mangled-name='__v4l2_ctrl_modify_range' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4453' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__v4l2_ctrl_modify_range'>
+        <parameter type-id='4b8b2cf3' name='ctrl' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4453' column='1'/>
+        <parameter type-id='9b7c55ef' name='min' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4454' column='1'/>
+        <parameter type-id='9b7c55ef' name='max' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4454' column='1'/>
+        <parameter type-id='91ce1af9' name='step' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4454' column='1'/>
+        <parameter type-id='9b7c55ef' name='def' filepath='drivers/media/v4l2-core/v4l2-ctrls.c' line='4454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='d238557f' size-in-bits='64' id='43ae54cf'/>
+      <pointer-type-def type-id='0645931b' size-in-bits='64' id='1086b623'/>
+      <pointer-type-def type-id='d26ed346' size-in-bits='64' id='b076d304'/>
+      <pointer-type-def type-id='cd1fc343' size-in-bits='64' id='52009e4b'/>
+      <pointer-type-def type-id='ef7d00fd' size-in-bits='64' id='d8c85275'/>
+      <enum-decl name='v4l2_ctrl_type' filepath='include/uapi/linux/videodev2.h' line='1718' column='1' id='cf13dc99'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER' value='1'/>
+        <enumerator name='V4L2_CTRL_TYPE_BOOLEAN' value='2'/>
+        <enumerator name='V4L2_CTRL_TYPE_MENU' value='3'/>
+        <enumerator name='V4L2_CTRL_TYPE_BUTTON' value='4'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER64' value='5'/>
+        <enumerator name='V4L2_CTRL_TYPE_CTRL_CLASS' value='6'/>
+        <enumerator name='V4L2_CTRL_TYPE_STRING' value='7'/>
+        <enumerator name='V4L2_CTRL_TYPE_BITMASK' value='8'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER_MENU' value='9'/>
+        <enumerator name='V4L2_CTRL_COMPOUND_TYPES' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U8' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U16' value='257'/>
+        <enumerator name='V4L2_CTRL_TYPE_U32' value='258'/>
+        <enumerator name='V4L2_CTRL_TYPE_AREA' value='262'/>
+      </enum-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='128' id='1c6c0c39'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <union-decl name='v4l2_ctrl_ptr' size-in-bits='64' visibility='default' filepath='include/media/v4l2-ctrls.h' line='62' column='1' id='3f78e6a9'>
+        <data-member access='public'>
+          <var-decl name='p_s32' type-id='9f2cce4b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_s64' type-id='842ac8d6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u8' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u16' type-id='26d4d46f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u32' type-id='f9409001' visibility='default' filepath='include/media/v4l2-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_char' type-id='26a90f95' visibility='default' filepath='include/media/v4l2-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_mpeg2_slice_params' type-id='48bc1523' visibility='default' filepath='include/media/v4l2-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_mpeg2_quantization' type-id='fa7d167b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_fwht_params' type-id='efba361c' visibility='default' filepath='include/media/v4l2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_sps' type-id='b9348c47' visibility='default' filepath='include/media/v4l2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_pps' type-id='91e3ab68' visibility='default' filepath='include/media/v4l2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_scaling_matrix' type-id='f7e7b3e8' visibility='default' filepath='include/media/v4l2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_slice_params' type-id='0541bcde' visibility='default' filepath='include/media/v4l2-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_decode_params' type-id='47cb2abc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_vp8_frame_header' type-id='e26652e6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_sps' type-id='112f0343' visibility='default' filepath='include/media/v4l2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_pps' type-id='f9de3b94' visibility='default' filepath='include/media/v4l2-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_slice_params' type-id='2948bd22' visibility='default' filepath='include/media/v4l2-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/media/v4l2-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_const' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='86' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='d6a7cd6f' size-in-bits='64' id='bcd28457'/>
+      <pointer-type-def type-id='dbc7d793' size-in-bits='64' id='4b8b2cf3'/>
+      <pointer-type-def type-id='4b8b2cf3' size-in-bits='64' id='c517999b'/>
+      <pointer-type-def type-id='d6130048' size-in-bits='64' id='2b59fa5e'/>
+      <pointer-type-def type-id='967c1c06' size-in-bits='64' id='a5c94ccc'/>
+      <pointer-type-def type-id='1251351e' size-in-bits='64' id='8edac644'/>
+      <pointer-type-def type-id='53422e64' size-in-bits='64' id='b7db9582'/>
+      <pointer-type-def type-id='59eccc2f' size-in-bits='64' id='f5438ac7'/>
+      <class-decl name='v4l2_control' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1672' column='1' id='d6a7cd6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='232' column='1' id='dbc7d793'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev_subs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cluster' type-id='c517999b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ncontrols' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_new' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='has_changed' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_auto' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_int' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_string' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_ptr' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_array' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='has_volatiles' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='call_notify' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='manual_mode_value' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='minimum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='maximum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_value' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='elems' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_of_dims' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='b91b9370' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='' type-id='87415f3a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-ctrls.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cur' type-id='b0ee3ba9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='p_new' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='p_cur' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_handler' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='358' column='1' id='d6130048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctrls' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctrl_refs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cached' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buckets' type-id='c34fbd81' visibility='default' filepath='include/media/v4l2-ctrls.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='notify' type-id='7ec3cb1e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='notify_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_of_buckets' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-ctrls.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_is_queued' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='requests' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requests_queued' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/v4l2-ctrls.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2331' column='1' id='967c1c06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='454ee2bf' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timestamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2345' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_subscription' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2351' column='1' id='1251351e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2355' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fh' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/media/v4l2-fh.h' line='42' column='1' id='53422e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vdev' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-fh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-fh.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prio' type-id='8b60a0b9' visibility='default' filepath='include/media/v4l2-fh.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-fh.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subscribe_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-fh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subscribed' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='available' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='navailable' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-fh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-fh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='m2m_ctx' type-id='2c7f1dc4' visibility='default' filepath='include/media/v4l2-fh.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='848' column='1' id='59eccc2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-subdev.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-subdev.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner_v4l2_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='040770fb' visibility='default' filepath='include/media/v4l2-subdev.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='internal_ops' type-id='2553c323' visibility='default' filepath='include/media/v4l2-subdev.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-subdev.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='grp_id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='devnode' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-subdev.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-subdev.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-subdev.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='asd' type-id='707be29c' visibility='default' filepath='include/media/v4l2-subdev.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subdev_notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pdata' type-id='616ec7d2' visibility='default' filepath='include/media/v4l2-subdev.h' line='871' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9b7c55ef' const='yes' id='d238557f'/>
+      <qualified-type-def type-id='205c2e40' const='yes' id='0645931b'/>
+      <qualified-type-def type-id='b154eaef' const='yes' id='d26ed346'/>
+      <qualified-type-def type-id='967c1c06' const='yes' id='cd1fc343'/>
+      <qualified-type-def type-id='1251351e' const='yes' id='ef7d00fd'/>
+      <pointer-type-def type-id='9b7c55ef' size-in-bits='64' id='842ac8d6'/>
+      <pointer-type-def type-id='baab64cf' size-in-bits='64' id='26385187'/>
+      <pointer-type-def type-id='fcc0eea6' size-in-bits='64' id='efba361c'/>
+      <pointer-type-def type-id='4aef34b6' size-in-bits='64' id='47cb2abc'/>
+      <pointer-type-def type-id='ca2e9cda' size-in-bits='64' id='91e3ab68'/>
+      <pointer-type-def type-id='3a58d3ba' size-in-bits='64' id='f7e7b3e8'/>
+      <pointer-type-def type-id='a44a15b8' size-in-bits='64' id='0541bcde'/>
+      <pointer-type-def type-id='26761b9f' size-in-bits='64' id='b9348c47'/>
+      <pointer-type-def type-id='7458c17e' size-in-bits='64' id='f9de3b94'/>
+      <pointer-type-def type-id='e565fd94' size-in-bits='64' id='2948bd22'/>
+      <pointer-type-def type-id='d36a5b23' size-in-bits='64' id='112f0343'/>
+      <pointer-type-def type-id='2633295b' size-in-bits='64' id='fa7d167b'/>
+      <pointer-type-def type-id='276d5663' size-in-bits='64' id='48bc1523'/>
+      <pointer-type-def type-id='ef5bccc0' size-in-bits='64' id='e26652e6'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='160' id='83a5454e'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='10' column='1' id='a9c79a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' 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='bd54fe1a' visibility='default' filepath='include/uapi/linux/time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_area' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='424' column='1' id='baab64cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_fwht_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/fwht-ctrls.h' line='18' column='1' id='fcc0eea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/fwht-ctrls.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_decode_params' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='201' column='1' id='4aef34b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpb' type-id='eefef0c1' visibility='default' filepath='include/media/h264-ctrls.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='num_slices' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3088'>
+          <var-decl name='nal_ref_idc' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_pps' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='94' column='1' id='ca2e9cda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='num_slice_groups_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='num_ref_idx_l0_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_ref_idx_l1_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='weighted_bipred_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='pic_init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pic_init_qs_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='second_chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_scaling_matrix' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='108' column='1' id='3a58d3ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scaling_list_4x4' type-id='9a59aaef' visibility='default' filepath='include/media/h264-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scaling_list_8x8' type-id='a112b67c' visibility='default' filepath='include/media/h264-ctrls.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_slice_params' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='137' column='1' id='a44a15b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first_mb_in_slice' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='redundant_pic_cnt' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_pic_id' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='pic_order_cnt_lsb' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delta_pic_order_cnt_bottom' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='delta_pic_order_cnt0' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_pic_order_cnt1' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pred_weight_table' type-id='864d11b6' visibility='default' filepath='include/media/h264-ctrls.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='dec_ref_pic_marking_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='pic_order_cnt_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='cabac_init_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6536'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6544'>
+          <var-decl name='slice_qs_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6552'>
+          <var-decl name='disable_deblocking_filter_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='slice_alpha_c0_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6568'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6576'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6584'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='slice_group_change_cycle' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='ref_pic_list0' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='ref_pic_list1' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_sps' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='64' column='1' id='26761b9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='profile_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='constraint_set_flags' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='level_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='log2_max_frame_num_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pic_order_cnt_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_num_ref_frames' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='num_ref_frames_in_pic_order_cnt_cycle' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset_for_ref_frame' type-id='29cc01cd' visibility='default' filepath='include/media/h264-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='offset_for_non_ref_pic' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='offset_for_top_to_bottom_field' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='pic_width_in_mbs_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8336'>
+          <var-decl name='pic_height_in_map_units_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_pps' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='104' column='1' id='7458c17e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_extra_slice_header_bits' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='diff_cu_qp_delta_depth' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pps_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pps_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_tile_columns_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_tile_rows_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='column_width_minus1' type-id='26fb03b8' visibility='default' filepath='include/media/hevc-ctrls.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='row_height_minus1' type-id='eaf62816' visibility='default' filepath='include/media/hevc-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='pps_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='pps_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='log2_parallel_merge_level_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='padding' type-id='c213d3d4' visibility='default' filepath='include/media/hevc-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_slice_params' size-in-bits='4224' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='164' column='1' id='e565fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nal_unit_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='nuh_temporal_id_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slice_pic_order_cnt' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='collocated_ref_idx' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='five_minus_max_num_merge_cand' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='slice_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='slice_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='slice_act_y_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='slice_act_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='slice_act_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='slice_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='pic_struct' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='num_active_dpb_entries' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ref_idx_l0' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ref_idx_l1' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_rps_poc_st_curr_before' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='num_rps_poc_st_curr_after' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='num_rps_poc_lt_curr' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='504'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dpb' type-id='41c4bc5d' visibility='default' filepath='include/media/hevc-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='pred_weight_table' type-id='c1b5e872' visibility='default' filepath='include/media/hevc-ctrls.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_sps' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='55' column='1' id='d36a5b23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_width_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pic_height_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='sps_max_dec_pic_buffering_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sps_max_num_reorder_pics' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='sps_max_latency_increase_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='log2_min_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='log2_diff_max_min_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='log2_min_luma_transform_block_size_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='log2_diff_max_min_luma_transform_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_transform_hierarchy_depth_inter' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='max_transform_hierarchy_depth_intra' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_sample_bit_depth_luma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='pcm_sample_bit_depth_chroma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='log2_min_pcm_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='log2_diff_max_min_pcm_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_short_term_ref_pic_sets' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='num_long_term_ref_pics_sps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_quantization' size-in-bits='2080' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='69' column='1' id='2633295b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='load_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='load_chroma_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='load_chroma_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='chroma_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='chroma_non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_slice_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='56' column='1' id='276d5663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='forward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='ecf565e1' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='picture' type-id='c82910ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='quantiser_scale_code' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='103' column='1' id='205c2e40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_volatile_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_type_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='121' column='1' id='b154eaef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='equal' type-id='f456402b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='95625cb2' visibility='default' filepath='include/media/v4l2-ctrls.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='log' type-id='c71b901b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='validate' type-id='f089c08b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_vp8_frame_header' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='81' column='1' id='ef5bccc0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='segment_header' type-id='58370a8e' visibility='default' filepath='include/media/vp8-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lf_header' type-id='e4362873' visibility='default' filepath='include/media/vp8-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quant_header' type-id='b6008b50' visibility='default' filepath='include/media/vp8-ctrls.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='entropy_header' type-id='2b2e1d12' visibility='default' filepath='include/media/vp8-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='coder_state' type-id='e65ce076' visibility='default' filepath='include/media/vp8-ctrls.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='width' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9200'>
+          <var-decl name='height' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='horizontal_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9224'>
+          <var-decl name='vertical_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9232'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9240'>
+          <var-decl name='prob_skip_false' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='prob_intra' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9256'>
+          <var-decl name='prob_last' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9264'>
+          <var-decl name='prob_gf' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9272'>
+          <var-decl name='num_dct_parts' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='first_part_size' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='first_part_header_bits' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='dct_part_sizes' type-id='7f84eb57' visibility='default' filepath='include/media/vp8-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='last_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='golden_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='alt_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='275' column='1' id='b0ee3ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='01e0721b' size-in-bits='64' id='2553c323'/>
+      <pointer-type-def type-id='3a7813d3' size-in-bits='64' id='040770fb'/>
+      <enum-decl name='v4l2_priority' filepath='include/uapi/linux/videodev2.h' line='404' column='1' id='8b60a0b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_PRIORITY_UNSET' value='0'/>
+        <enumerator name='V4L2_PRIORITY_BACKGROUND' value='1'/>
+        <enumerator name='V4L2_PRIORITY_INTERACTIVE' value='2'/>
+        <enumerator name='V4L2_PRIORITY_RECORD' value='3'/>
+        <enumerator name='V4L2_PRIORITY_DEFAULT' value='2'/>
+      </enum-decl>
+      <typedef-decl name='v4l2_ctrl_notify_fnc' type-id='af2775f4' filepath='include/media/v4l2-ctrls.h' line='144' column='1' id='7ec3cb1e'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1' id='87415f3a'>
+        <data-member access='public'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='270' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1' id='b91b9370'>
+        <data-member access='public'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='266' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2333' column='1' id='454ee2bf'>
+        <data-member access='public'>
+          <var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2334' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ctrl' type-id='ecd6d55a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2335' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='frame_sync' type-id='101c7fc2' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2336' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='src_change' type-id='af41d400' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2337' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='motion_det' type-id='f95c1b03' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2338' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='73b95420' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2339' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='7e833f79' size-in-bits='64' id='e1a56841'/>
+      <pointer-type-def type-id='c2e9ee66' size-in-bits='64' id='707be29c'/>
+      <pointer-type-def type-id='c19e9dd9' size-in-bits='64' id='9f3a0131'/>
+      <pointer-type-def type-id='9f3a0131' size-in-bits='64' id='c34fbd81'/>
+      <pointer-type-def type-id='f1828bdc' size-in-bits='64' id='ddfb71fa'/>
+      <pointer-type-def type-id='e1b58b0e' size-in-bits='64' id='2c7f1dc4'/>
+      <pointer-type-def type-id='415476f4' size-in-bits='64' id='616ec7d2'/>
+      <pointer-type-def type-id='a4b3744f' size-in-bits='64' id='798c29b7'/>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='8160' id='29cc01cd'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='160' id='26fb03b8'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='176' id='eaf62816'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='512' id='73b95420'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='768' id='9a59aaef'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='3072' id='a112b67c'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='v4l2_async_notifier' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='129' column='1' id='7e833f79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='17c9f4a9' visibility='default' filepath='include/media/v4l2-async.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-async.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd' type-id='f5438ac7' visibility='default' filepath='include/media/v4l2-async.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-async.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='waiting' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='done' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_subdev' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='79' column='1' id='c2e9ee66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='d03a4ada' visibility='default' filepath='include/media/v4l2-async.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='5c61413a' visibility='default' filepath='include/media/v4l2-async.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ref' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='312' column='1' id='c19e9dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl' type-id='4b8b2cf3' visibility='default' filepath='include/media/v4l2-ctrls.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='helper' type-id='7308495a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='from_other_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='req_done' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='req' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='p_req' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-device.h' line='47' column='1' id='f1828bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-device.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/v4l2-device.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-device.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-device.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16e6f2c6' visibility='default' filepath='include/media/v4l2-device.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notify' type-id='9f5eb43a' visibility='default' filepath='include/media/v4l2-device.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-device.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prio' type-id='281d3096' visibility='default' filepath='include/media/v4l2-device.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/media/v4l2-device.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='release' type-id='8dfbe74f' visibility='default' filepath='include/media/v4l2-device.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_ctrl' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2292' column='1' id='ecd6d55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='de5442d3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2303' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_frame_sync' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2306' column='1' id='101c7fc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_motion_det' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2325' column='1' id='f95c1b03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='region_mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_src_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2312' column='1' id='af41d400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_vsync' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2282' column='1' id='cbe6daf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='field' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_pred_weight_table' size-in-bits='6176' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='120' column='1' id='864d11b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='chroma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='weight_factors' type-id='a4444dc4' visibility='default' filepath='include/media/h264-ctrls.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_pred_weight_table' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='137' column='1' id='c1b5e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_luma_weight_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='luma_offset_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_chroma_weight_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='chroma_offset_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delta_luma_weight_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='luma_offset_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='delta_chroma_weight_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chroma_offset_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding' type-id='c60dc9f2' visibility='default' filepath='include/media/hevc-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1584'>
+          <var-decl name='luma_log2_weight_denom' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1592'>
+          <var-decl name='delta_chroma_log2_weight_denom' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='e1b58b0e'/>
+      <class-decl name='v4l2_mpeg2_picture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='38' column='1' id='c82910ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='picture_coding_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='f_code' type-id='86be53ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='intra_dc_precision' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='picture_structure' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='top_field_first' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_pred_frame_dct' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='concealment_motion_vectors' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='q_scale_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='intra_vlc_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alternate_scan' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='repeat_first_field' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='progressive_frame' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='26' column='1' id='ecf565e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='horizontal_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vertical_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vbv_buffer_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='profile_and_level_indication' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='progressive_sequence' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='chroma_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_platform_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='797' column='1' id='415476f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regulators' type-id='776946b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regulators' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='801' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_coder_state' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='64' column='1' id='e65ce076'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='value' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bit_count' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_header' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='56' column='1' id='2b2e1d12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coeff_probs' type-id='96a07b89' visibility='default' filepath='include/media/vp8-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='y_mode_probs' type-id='c213d3d4' visibility='default' filepath='include/media/vp8-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='uv_mode_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8504'>
+          <var-decl name='mv_probs' type-id='fa0a1f4c' visibility='default' filepath='include/media/vp8-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8808'>
+          <var-decl name='padding' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_loopfilter_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='37' column='1' id='e4362873'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref_frm_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mb_mode_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sharpness_level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_quantization_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='46' column='1' id='b6008b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='y_ac_qi' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='y_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y2_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='y2_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uv_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='uv_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_segment_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='26' column='1' id='58370a8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lf_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='video_device' size-in-bits='12672' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='259' column='1' id='a4b3744f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-dev.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='include/media/v4l2-dev.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pipe' type-id='2783658a' visibility='default' filepath='include/media/v4l2-dev.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='fops' type-id='1e4c840c' visibility='default' filepath='include/media/v4l2-dev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='device_caps' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-dev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/v4l2-dev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='cdev' type-id='3e6eb939' visibility='default' filepath='include/media/v4l2-dev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-dev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='dev_parent' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-dev.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-dev.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='queue' type-id='a05f1ecd' visibility='default' filepath='include/media/v4l2-dev.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='prio' type-id='2fc4734c' visibility='default' filepath='include/media/v4l2-dev.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-dev.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='vfl_type' type-id='24df61b5' visibility='default' filepath='include/media/v4l2-dev.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='vfl_dir' type-id='366ec232' visibility='default' filepath='include/media/v4l2-dev.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='num' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-dev.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-dev.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-dev.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='fh_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-dev.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='dev_debug' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='tvnorms' type-id='692d176e' visibility='default' filepath='include/media/v4l2-dev.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='release' type-id='3007e20a' visibility='default' filepath='include/media/v4l2-dev.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='ioctl_ops' type-id='b94745b1' visibility='default' filepath='include/media/v4l2-dev.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='valid_ioctls' type-id='3461381a' visibility='default' filepath='include/media/v4l2-dev.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-dev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d36f034a' const='yes' id='01e0721b'/>
+      <qualified-type-def type-id='026dac7c' const='yes' id='3a7813d3'/>
+      <pointer-type-def type-id='38cb23df' size-in-bits='64' id='f089c08b'/>
+      <pointer-type-def type-id='5651631f' size-in-bits='64' id='4e4de503'/>
+      <pointer-type-def type-id='596e4a77' size-in-bits='64' id='f456402b'/>
+      <array-type-def dimensions='1' type-id='7a583acc' size-in-bits='3072' id='eefef0c1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a1f34f28' size-in-bits='2048' id='41c4bc5d'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='fee334bf' size-in-bits='64' id='c71b901b'/>
+      <pointer-type-def type-id='dd703408' size-in-bits='64' id='95625cb2'/>
+      <pointer-type-def type-id='d59331c2' size-in-bits='64' id='af2775f4'/>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='128' id='2d85a215'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8af57d41' size-in-bits='256' id='1e28c56f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='32' id='87ce7f1e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='304' id='fa0a1f4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='32' id='86be53ee'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='4' type-id='8f048e17' size-in-bits='8448' id='96a07b89'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'>
+        <subrange length='36' type-id='7ff19f0f' id='ae666bde'/>
+      </array-type-def>
+      <class-decl name='v4l2_h264_dpb_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='189' column='1' id='7a583acc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reference_ts' type-id='d3130597' visibility='default' filepath='include/media/h264-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_dpb_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='129' column='1' id='a1f34f28'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='field_pic' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_order_cnt' type-id='810b4a17' visibility='default' filepath='include/media/hevc-ctrls.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/media/hevc-ctrls.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_prio_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='105' column='1' id='281d3096'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prios' type-id='6ed968f3' visibility='default' filepath='include/media/v4l2-dev.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_internal_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='765' column='1' id='d36f034a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregistered' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='close' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='770' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='727' column='1' id='026dac7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='5317b3cd' visibility='default' filepath='include/media/v4l2-subdev.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tuner' type-id='12d4fd76' visibility='default' filepath='include/media/v4l2-subdev.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='audio' type-id='2d92dd30' visibility='default' filepath='include/media/v4l2-subdev.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='video' type-id='5a7c2847' visibility='default' filepath='include/media/v4l2-subdev.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbi' type-id='cc679d2b' visibility='default' filepath='include/media/v4l2-subdev.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ir' type-id='7bd796c9' visibility='default' filepath='include/media/v4l2-subdev.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sensor' type-id='b2ac7a1e' visibility='default' filepath='include/media/v4l2-subdev.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pad' type-id='475ad931' visibility='default' filepath='include/media/v4l2-subdev.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='20400679' size-in-bits='64' id='17c9f4a9'/>
+      <pointer-type-def type-id='9eb7236e' size-in-bits='64' id='1e4c840c'/>
+      <pointer-type-def type-id='39863601' size-in-bits='64' id='b94745b1'/>
+      <enum-decl name='v4l2_async_match_type' filepath='include/media/v4l2-async.h' line='33' column='1' id='d03a4ada'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_ASYNC_MATCH_CUSTOM' value='0'/>
+        <enumerator name='V4L2_ASYNC_MATCH_DEVNAME' value='1'/>
+        <enumerator name='V4L2_ASYNC_MATCH_I2C' value='2'/>
+        <enumerator name='V4L2_ASYNC_MATCH_FWNODE' value='3'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_direction' filepath='include/media/v4l2-dev.h' line='56' column='1' id='366ec232'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_DIR_RX' value='0'/>
+        <enumerator name='VFL_DIR_TX' value='1'/>
+        <enumerator name='VFL_DIR_M2M' value='2'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_type' filepath='include/media/v4l2-dev.h' line='36' column='1' id='24df61b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_TYPE_GRABBER' value='0'/>
+        <enumerator name='VFL_TYPE_VBI' value='1'/>
+        <enumerator name='VFL_TYPE_RADIO' value='2'/>
+        <enumerator name='VFL_TYPE_SUBDEV' value='3'/>
+        <enumerator name='VFL_TYPE_SDR' value='4'/>
+        <enumerator name='VFL_TYPE_TOUCH' value='5'/>
+        <enumerator name='VFL_TYPE_MAX' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='2e3fb70e' size-in-bits='64' id='776946b4'/>
+      <typedef-decl name='v4l2_std_id' type-id='d3130597' filepath='include/uapi/linux/videodev2.h' line='1219' column='1' id='692d176e'/>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1' id='de5442d3'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2297' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='81' column='1' id='5c61413a'>
+        <data-member access='public'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-async.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-async.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i2c' type-id='02403573' visibility='default' filepath='include/media/v4l2-async.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='custom' type-id='2e3fe03c' visibility='default' filepath='include/media/v4l2-async.h' line='92' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='8a6e72bc' size-in-bits='64' id='7308495a'/>
+      <array-type-def dimensions='1' type-id='c1c411a0' size-in-bits='6144' id='a4444dc4'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='281d3096' size-in-bits='64' id='2fc4734c'/>
+      <pointer-type-def type-id='b6a7cdb3' size-in-bits='64' id='8dfbe74f'/>
+      <pointer-type-def type-id='3516ab98' size-in-bits='64' id='9f5eb43a'/>
+      <pointer-type-def type-id='9d4a3248' size-in-bits='64' id='3007e20a'/>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='128' id='6ed968f3'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='regulator_bulk_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/consumer.h' line='167' column='1' id='2e3fb70e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/consumer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='consumer' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/consumer.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ret' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/consumer.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='8a6e72bc'/>
+      <class-decl name='v4l2_h264_weight_factors' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='113' column='1' id='c1c411a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_weight' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='luma_offset' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chroma_weight' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chroma_offset' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='117' 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/media/v4l2-async.h' line='84' column='1' id='02403573'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adapter_id' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-async.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-async.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='88' column='1' id='2e3fe03c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='5c6f8956' visibility='default' filepath='include/media/v4l2-async.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-async.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ca8c574c' const='yes' id='20400679'/>
+      <qualified-type-def type-id='58b9b3eb' const='yes' id='9eb7236e'/>
+      <qualified-type-def type-id='eb7c81d8' const='yes' id='39863601'/>
+      <pointer-type-def type-id='53ecac3a' size-in-bits='64' id='2d92dd30'/>
+      <pointer-type-def type-id='9d085135' size-in-bits='64' id='5317b3cd'/>
+      <pointer-type-def type-id='bf11af99' size-in-bits='64' id='7bd796c9'/>
+      <pointer-type-def type-id='d48e8481' size-in-bits='64' id='475ad931'/>
+      <pointer-type-def type-id='9f25e800' size-in-bits='64' id='b2ac7a1e'/>
+      <pointer-type-def type-id='dc30ce58' size-in-bits='64' id='12d4fd76'/>
+      <pointer-type-def type-id='f5af9523' size-in-bits='64' id='cc679d2b'/>
+      <pointer-type-def type-id='02233ed7' size-in-bits='64' id='5a7c2847'/>
+      <pointer-type-def type-id='77296733' size-in-bits='64' id='a236743f'/>
+      <pointer-type-def type-id='4bd12e16' size-in-bits='64' id='618f91b8'/>
+      <pointer-type-def type-id='4bda18f8' size-in-bits='64' id='1625ce7a'/>
+      <array-type-def dimensions='1' type-id='b55def60' size-in-bits='512' id='467f4e10'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b55def60' size-in-bits='1024' id='0399400c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='v4l2_async_notifier_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='107' column='1' id='ca8c574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bound' type-id='39e52da2' visibility='default' filepath='include/media/v4l2-async.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='6f077fdd' visibility='default' filepath='include/media/v4l2-async.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unbind' type-id='55d37973' visibility='default' filepath='include/media/v4l2-async.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_file_operations' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='194' column='1' id='58b9b3eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-dev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/v4l2-dev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/v4l2-dev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/v4l2-dev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl32' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/media/v4l2-dev.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/media/v4l2-dev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ioctl_ops' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/media/v4l2-ioctl.h' line='296' column='1' id='eb7c81d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vidioc_querycap' type-id='70be41da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vidioc_enum_fmt_vid_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vidioc_enum_fmt_vid_overlay' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vidioc_enum_fmt_vid_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vidioc_enum_fmt_sdr_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vidioc_enum_fmt_sdr_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vidioc_enum_fmt_meta_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='vidioc_enum_fmt_meta_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vidioc_g_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vidioc_g_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vidioc_g_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vidioc_g_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vidioc_g_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vidioc_g_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vidioc_g_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='vidioc_g_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vidioc_g_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vidioc_g_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vidioc_g_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vidioc_g_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='vidioc_s_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vidioc_s_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='vidioc_s_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='vidioc_s_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='vidioc_s_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vidioc_s_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vidioc_s_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vidioc_s_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vidioc_s_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='vidioc_s_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='vidioc_s_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vidioc_s_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='vidioc_try_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vidioc_try_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vidioc_try_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vidioc_try_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='vidioc_try_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vidioc_try_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='vidioc_try_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='vidioc_try_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='vidioc_try_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='vidioc_try_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vidioc_try_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='vidioc_try_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vidioc_reqbufs' type-id='3b472dd8' visibility='default' filepath='include/media/v4l2-ioctl.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='vidioc_querybuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='vidioc_qbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='vidioc_expbuf' type-id='456a5468' visibility='default' filepath='include/media/v4l2-ioctl.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='vidioc_dqbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='vidioc_create_bufs' type-id='dd40abb0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='vidioc_prepare_buf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='vidioc_overlay' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='vidioc_g_fbuf' type-id='15c573bb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vidioc_s_fbuf' type-id='117460b0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='vidioc_streamon' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='vidioc_streamoff' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='vidioc_g_std' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='vidioc_s_std' type-id='a13d0c2c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='vidioc_querystd' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='vidioc_enum_input' type-id='243d1e96' visibility='default' filepath='include/media/v4l2-ioctl.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='vidioc_g_input' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='vidioc_s_input' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='vidioc_enum_output' type-id='e2f71a2f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='vidioc_g_output' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='vidioc_s_output' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='vidioc_queryctrl' type-id='73892d6d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='vidioc_query_ext_ctrl' type-id='860d0bc4' visibility='default' filepath='include/media/v4l2-ioctl.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='vidioc_g_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='vidioc_s_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='vidioc_g_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='vidioc_s_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='vidioc_try_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='vidioc_querymenu' type-id='81068c97' visibility='default' filepath='include/media/v4l2-ioctl.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='vidioc_enumaudio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='vidioc_g_audio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='vidioc_s_audio' type-id='6a8dfaef' visibility='default' filepath='include/media/v4l2-ioctl.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='vidioc_enumaudout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='vidioc_g_audout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='vidioc_s_audout' type-id='f8e1aa9b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='vidioc_g_modulator' type-id='24213669' visibility='default' filepath='include/media/v4l2-ioctl.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='vidioc_s_modulator' type-id='b79f9e36' visibility='default' filepath='include/media/v4l2-ioctl.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='vidioc_g_pixelaspect' type-id='0a95e709' visibility='default' filepath='include/media/v4l2-ioctl.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='vidioc_g_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='vidioc_s_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='vidioc_g_jpegcomp' type-id='f58cb656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='vidioc_s_jpegcomp' type-id='ba21bbb1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='vidioc_g_enc_index' type-id='cadab7d6' visibility='default' filepath='include/media/v4l2-ioctl.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='vidioc_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='vidioc_try_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='vidioc_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='vidioc_try_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='vidioc_g_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='vidioc_s_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='vidioc_g_tuner' type-id='35b8846a' visibility='default' filepath='include/media/v4l2-ioctl.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='vidioc_s_tuner' type-id='aec87d1d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vidioc_g_frequency' type-id='7398303c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vidioc_s_frequency' type-id='48d231fb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='vidioc_enum_freq_bands' type-id='771ff1ac' visibility='default' filepath='include/media/v4l2-ioctl.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='vidioc_g_sliced_vbi_cap' type-id='5fa1787f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='vidioc_log_status' type-id='962405e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='vidioc_s_hw_freq_seek' type-id='6cbcc6da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='vidioc_enum_framesizes' type-id='9822fe67' visibility='default' filepath='include/media/v4l2-ioctl.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vidioc_enum_frameintervals' type-id='a176c78e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='vidioc_s_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='vidioc_g_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='vidioc_query_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='vidioc_enum_dv_timings' type-id='fbd9657e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='vidioc_dv_timings_cap' type-id='1f370097' visibility='default' filepath='include/media/v4l2-ioctl.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='vidioc_g_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='vidioc_s_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vidioc_subscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='vidioc_unsubscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vidioc_default' type-id='d2188e4c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e3913a59' const='yes' id='53ecac3a'/>
+      <qualified-type-def type-id='b569b18c' const='yes' id='9d085135'/>
+      <qualified-type-def type-id='77a58158' const='yes' id='bf11af99'/>
+      <qualified-type-def type-id='0382928e' const='yes' id='d48e8481'/>
+      <qualified-type-def type-id='6f6b42ed' const='yes' id='9f25e800'/>
+      <qualified-type-def type-id='40eafb47' const='yes' id='dc30ce58'/>
+      <qualified-type-def type-id='729f8f08' const='yes' id='f5af9523'/>
+      <qualified-type-def type-id='6eadcbe0' const='yes' id='02233ed7'/>
+      <pointer-type-def type-id='0b244c64' size-in-bits='64' id='5c6f8956'/>
+      <class-decl name='v4l2_subdev_audio_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='304' column='1' id='e3913a59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_i2s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_core_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='188' column='1' id='b569b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_status' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_io_pin_config' type-id='c52b8c36' visibility='default' filepath='include/media/v4l2-subdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_fw' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_gpio' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='cafb3255' visibility='default' filepath='include/media/v4l2-subdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='compat_ioctl32' type-id='efb4ad67' visibility='default' filepath='include/media/v4l2-subdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_power' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='interrupt_service_routine' type-id='f3f22912' visibility='default' filepath='include/media/v4l2-subdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unsubscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='599' column='1' id='77a58158'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_read' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_write' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='674' column='1' id='0382928e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_cfg' type-id='c1d16b36' visibility='default' filepath='include/media/v4l2-subdev.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enum_mbus_code' type-id='e188da98' visibility='default' filepath='include/media/v4l2-subdev.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enum_frame_size' type-id='94b3d6fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enum_frame_interval' type-id='966724ce' visibility='default' filepath='include/media/v4l2-subdev.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dv_timings_cap' type-id='2af7cc71' visibility='default' filepath='include/media/v4l2-subdev.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enum_dv_timings' type-id='d407a0d4' visibility='default' filepath='include/media/v4l2-subdev.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='link_validate' type-id='f73feb66' visibility='default' filepath='include/media/v4l2-subdev.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_sensor_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='501' column='1' id='6f6b42ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_skip_top_lines' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='g_skip_frames' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_tuner_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='264' column='1' id='40eafb47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standby' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_radio' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_frequency' type-id='8a4f973d' visibility='default' filepath='include/media/v4l2-subdev.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_frequency' type-id='d36d46c6' visibility='default' filepath='include/media/v4l2-subdev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enum_freq_bands' type-id='64144346' visibility='default' filepath='include/media/v4l2-subdev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_tuner' type-id='3ac60b54' visibility='default' filepath='include/media/v4l2-subdev.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_tuner' type-id='3ba48c9f' visibility='default' filepath='include/media/v4l2-subdev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_modulator' type-id='e60f1e27' visibility='default' filepath='include/media/v4l2-subdev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_modulator' type-id='c99780b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_type_addr' type-id='0f2da0bb' visibility='default' filepath='include/media/v4l2-subdev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_config' type-id='f8acd34f' visibility='default' filepath='include/media/v4l2-subdev.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_vbi_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='481' column='1' id='729f8f08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='decode_vbi_line' type-id='c6a521af' visibility='default' filepath='include/media/v4l2-subdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_vbi_data' type-id='03813572' visibility='default' filepath='include/media/v4l2-subdev.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_vbi_data' type-id='a49b3ef9' visibility='default' filepath='include/media/v4l2-subdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_sliced_vbi_cap' type-id='795cf0d1' visibility='default' filepath='include/media/v4l2-subdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_raw_fmt' type-id='740a3d8b' visibility='default' filepath='include/media/v4l2-subdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_video_ops' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='415' column='1' id='6eadcbe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_crystal_freq' type-id='1825e6b5' visibility='default' filepath='include/media/v4l2-subdev.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_std' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_std' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_std_output' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_std_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='querystd' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_tvnorms' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='g_tvnorms_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='g_input_status' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='g_pixelaspect' type-id='44b18db0' visibility='default' filepath='include/media/v4l2-subdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='g_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='g_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='g_mbus_config' type-id='ddaeaa9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='s_mbus_config' type-id='7c61dabd' visibility='default' filepath='include/media/v4l2-subdev.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='s_rx_buffer' type-id='02cea60b' visibility='default' filepath='include/media/v4l2-subdev.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9ed97fed' size-in-bits='64' id='962405e1'/>
+      <pointer-type-def type-id='1601b1ab' size-in-bits='64' id='6a8dfaef'/>
+      <pointer-type-def type-id='24bce3cf' size-in-bits='64' id='f8e1aa9b'/>
+      <pointer-type-def type-id='14617e76' size-in-bits='64' id='117460b0'/>
+      <pointer-type-def type-id='e4960e7f' size-in-bits='64' id='48d231fb'/>
+      <pointer-type-def type-id='3f7bc138' size-in-bits='64' id='6cbcc6da'/>
+      <pointer-type-def type-id='e82a9f1d' size-in-bits='64' id='ba21bbb1'/>
+      <pointer-type-def type-id='ab883904' size-in-bits='64' id='b79f9e36'/>
+      <pointer-type-def type-id='a2b102f9' size-in-bits='64' id='aec87d1d'/>
+      <pointer-type-def type-id='3bb4887b' size-in-bits='64' id='18ff560f'/>
+      <pointer-type-def type-id='7b49a935' size-in-bits='64' id='0a95e709'/>
+      <pointer-type-def type-id='b287e2b2' size-in-bits='64' id='a13d0c2c'/>
+      <pointer-type-def type-id='162c0977' size-in-bits='64' id='6f3b229b'/>
+      <pointer-type-def type-id='9d558819' size-in-bits='64' id='c0a3faf5'/>
+      <pointer-type-def type-id='f155b036' size-in-bits='64' id='e1c70e28'/>
+      <pointer-type-def type-id='13bb6c7c' size-in-bits='64' id='4ecb1656'/>
+      <pointer-type-def type-id='280730d4' size-in-bits='64' id='6e055dae'/>
+      <pointer-type-def type-id='25edcf18' size-in-bits='64' id='70be41da'/>
+      <pointer-type-def type-id='06706e9d' size-in-bits='64' id='10f733f9'/>
+      <pointer-type-def type-id='5178491e' size-in-bits='64' id='dd40abb0'/>
+      <pointer-type-def type-id='4706793b' size-in-bits='64' id='52e63b6f'/>
+      <pointer-type-def type-id='29c6d348' size-in-bits='64' id='ce828302'/>
+      <pointer-type-def type-id='13be673b' size-in-bits='64' id='1f370097'/>
+      <pointer-type-def type-id='30e75f3e' size-in-bits='64' id='d5f67e88'/>
+      <pointer-type-def type-id='7370d1f4' size-in-bits='64' id='cadab7d6'/>
+      <pointer-type-def type-id='8074b8e7' size-in-bits='64' id='7312c953'/>
+      <pointer-type-def type-id='10498fec' size-in-bits='64' id='fbd9657e'/>
+      <pointer-type-def type-id='a2a24eee' size-in-bits='64' id='456a5468'/>
+      <pointer-type-def type-id='28327a10' size-in-bits='64' id='517d0452'/>
+      <pointer-type-def type-id='232e3e4e' size-in-bits='64' id='318389e0'/>
+      <pointer-type-def type-id='302b8c85' size-in-bits='64' id='5797b7e1'/>
+      <pointer-type-def type-id='e64743d7' size-in-bits='64' id='15c573bb'/>
+      <pointer-type-def type-id='e3087f12' size-in-bits='64' id='7398303c'/>
+      <pointer-type-def type-id='dd378762' size-in-bits='64' id='771ff1ac'/>
+      <pointer-type-def type-id='258baccc' size-in-bits='64' id='a176c78e'/>
+      <pointer-type-def type-id='962c09bb' size-in-bits='64' id='9822fe67'/>
+      <pointer-type-def type-id='5895f71c' size-in-bits='64' id='243d1e96'/>
+      <pointer-type-def type-id='c66117cc' size-in-bits='64' id='f58cb656'/>
+      <pointer-type-def type-id='4a1c795d' size-in-bits='64' id='24213669'/>
+      <pointer-type-def type-id='aac69b6b' size-in-bits='64' id='e2f71a2f'/>
+      <pointer-type-def type-id='60d50d6a' size-in-bits='64' id='860d0bc4'/>
+      <pointer-type-def type-id='a73b2f11' size-in-bits='64' id='73892d6d'/>
+      <pointer-type-def type-id='857ecf83' size-in-bits='64' id='81068c97'/>
+      <pointer-type-def type-id='82fca516' size-in-bits='64' id='3b472dd8'/>
+      <pointer-type-def type-id='de826e86' size-in-bits='64' id='a3948f60'/>
+      <pointer-type-def type-id='d5c7d653' size-in-bits='64' id='5fa1787f'/>
+      <pointer-type-def type-id='f16e9b99' size-in-bits='64' id='0e0c1c5d'/>
+      <pointer-type-def type-id='6bb8016c' size-in-bits='64' id='41d02516'/>
+      <pointer-type-def type-id='c49062e0' size-in-bits='64' id='35b8846a'/>
+      <pointer-type-def type-id='17b31231' size-in-bits='64' id='6f077fdd'/>
+      <pointer-type-def type-id='bed27c38' size-in-bits='64' id='39e52da2'/>
+      <pointer-type-def type-id='817d10dc' size-in-bits='64' id='081ebe8e'/>
+      <pointer-type-def type-id='b8dcddba' size-in-bits='64' id='d2188e4c'/>
+      <pointer-type-def type-id='42c66597' size-in-bits='64' id='55d37973'/>
+      <pointer-type-def type-id='822ce289' size-in-bits='64' id='8a4f973d'/>
+      <pointer-type-def type-id='43b517a9' size-in-bits='64' id='7c61dabd'/>
+      <pointer-type-def type-id='3d684a5a' size-in-bits='64' id='c99780b4'/>
+      <pointer-type-def type-id='44ab747b' size-in-bits='64' id='f8acd34f'/>
+      <pointer-type-def type-id='714fe898' size-in-bits='64' id='03813572'/>
+      <pointer-type-def type-id='2966597b' size-in-bits='64' id='3ba48c9f'/>
+      <pointer-type-def type-id='261083fc' size-in-bits='64' id='6d63cad6'/>
+      <pointer-type-def type-id='efa4e33c' size-in-bits='64' id='f73feb66'/>
+      <pointer-type-def type-id='960d41bf' size-in-bits='64' id='0f2da0bb'/>
+      <pointer-type-def type-id='2d6f2c74' size-in-bits='64' id='c52b8c36'/>
+      <pointer-type-def type-id='ad810f54' size-in-bits='64' id='04cc4d9e'/>
+      <pointer-type-def type-id='5ba85b48' size-in-bits='64' id='f3f22912'/>
+      <pointer-type-def type-id='be643611' size-in-bits='64' id='1825e6b5'/>
+      <pointer-type-def type-id='24255cb2' size-in-bits='64' id='f9d7b9fc'/>
+      <pointer-type-def type-id='3d709624' size-in-bits='64' id='1976ccf6'/>
+      <pointer-type-def type-id='20cd6817' size-in-bits='64' id='b530e24b'/>
+      <pointer-type-def type-id='7b74b2c0' size-in-bits='64' id='db3c9452'/>
+      <pointer-type-def type-id='cc85da13' size-in-bits='64' id='f4b0728f'/>
+      <pointer-type-def type-id='8230f98b' size-in-bits='64' id='c6a521af'/>
+      <pointer-type-def type-id='17ae78d2' size-in-bits='64' id='afd7b47c'/>
+      <pointer-type-def type-id='18e34d1d' size-in-bits='64' id='2af7cc71'/>
+      <pointer-type-def type-id='f13a9afc' size-in-bits='64' id='1da53a06'/>
+      <pointer-type-def type-id='c763c2ea' size-in-bits='64' id='d407a0d4'/>
+      <pointer-type-def type-id='52e7eff9' size-in-bits='64' id='ae675015'/>
+      <pointer-type-def type-id='16b2c11e' size-in-bits='64' id='44b18db0'/>
+      <pointer-type-def type-id='354af324' size-in-bits='64' id='d36d46c6'/>
+      <pointer-type-def type-id='21419694' size-in-bits='64' id='64144346'/>
+      <pointer-type-def type-id='78b76b9c' size-in-bits='64' id='ddaeaa9e'/>
+      <pointer-type-def type-id='d2bdcec3' size-in-bits='64' id='e60f1e27'/>
+      <pointer-type-def type-id='0ffa0cdd' size-in-bits='64' id='795cf0d1'/>
+      <pointer-type-def type-id='e3d2455d' size-in-bits='64' id='a49b3ef9'/>
+      <pointer-type-def type-id='1e4a1386' size-in-bits='64' id='b0487488'/>
+      <pointer-type-def type-id='a8ee3f87' size-in-bits='64' id='865e6323'/>
+      <pointer-type-def type-id='1b424123' size-in-bits='64' id='7bd168bf'/>
+      <pointer-type-def type-id='604bba92' size-in-bits='64' id='30f63774'/>
+      <pointer-type-def type-id='122af7a4' size-in-bits='64' id='c1d16b36'/>
+      <pointer-type-def type-id='fea27882' size-in-bits='64' id='3a53e3ec'/>
+      <pointer-type-def type-id='f519d7ec' size-in-bits='64' id='966724ce'/>
+      <pointer-type-def type-id='404f4f30' size-in-bits='64' id='94b3d6fa'/>
+      <pointer-type-def type-id='0fdf477e' size-in-bits='64' id='e188da98'/>
+      <pointer-type-def type-id='fb3ed1d3' size-in-bits='64' id='a56b7267'/>
+      <pointer-type-def type-id='626191ca' size-in-bits='64' id='3ac60b54'/>
+      <pointer-type-def type-id='5cdc243f' size-in-bits='64' id='740a3d8b'/>
+      <pointer-type-def type-id='cfc17f8f' size-in-bits='64' id='02cea60b'/>
+      <pointer-type-def type-id='ea214f7b' size-in-bits='64' id='efb4ad67'/>
+      <pointer-type-def type-id='20a7e419' size-in-bits='64' id='cafb3255'/>
+      <function-type size-in-bits='64' id='52e7eff9'>
+        <parameter type-id='f5438ac7' name='sd'/>
+        <parameter type-id='b7db9582' name='fh'/>
+        <parameter type-id='8edac644' name='sub'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-dev.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='64' id='e5d37c7b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='176' id='b0b8e94f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='d315442e' size-in-bits='768' id='025daa6d'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='96' id='81144473'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='352' id='9d263779'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='512' id='9d2cf33e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='32' id='439be632'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='1024' id='734a963c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='288' id='43885e7a'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1600' id='0530f1a6'>
+        <subrange length='200' type-id='7ff19f0f' id='53119c2f'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='368' id='0ddb15d8'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='384' id='51dffe12'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='56' id='c20b850f'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='128' id='6ed968f3'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='288' id='16e6f2c6'>
+        <subrange length='36' type-id='7ff19f0f' id='ae666bde'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='480' id='59e5814b'>
+        <subrange length='60' type-id='7ff19f0f' id='b114e3c3'/>
+      </array-type-def>
+      <class-decl name='tuner_setup' is-struct='yes' visibility='default' is-declaration-only='yes' id='de57f169'/>
+      <class-decl name='v4l2_ctrl_handler' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='358' column='1' id='d6130048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ctrls' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ctrl_refs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cached' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buckets' type-id='c34fbd81' visibility='default' filepath='include/media/v4l2-ctrls.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='notify' type-id='7ec3cb1e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='notify_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_of_buckets' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-ctrls.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_is_queued' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='requests' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requests_queued' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='req_obj' type-id='a5b7e4fd' visibility='default' filepath='include/media/v4l2-ctrls.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_m2m_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='e1b58b0e'/>
+      <class-decl name='vb2_queue' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/media/videobuf2-core.h' line='553' column='1' id='6b30321d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='io_modes' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/videobuf2-core.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_attrs' type-id='7359adad' visibility='default' filepath='include/media/videobuf2-core.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bidirectional' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='fileio_read_once' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fileio_write_immediately' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='allow_zero_bytesused' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='quirk_poll_must_check_waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='supports_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='requires_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='uses_qbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='uses_requests' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/videobuf2-core.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='a1d66c91' visibility='default' filepath='include/media/videobuf2-core.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_ops' type-id='15cf8e87' visibility='default' filepath='include/media/videobuf2-core.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buf_ops' type-id='97b65be3' visibility='default' filepath='include/media/videobuf2-core.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/videobuf2-core.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subsystem_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='buf_struct_size' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='timestamp_flags' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='gfp_flags' type-id='3eb7c31c' visibility='default' filepath='include/media/videobuf2-core.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_buffers_needed' type-id='19c2251e' visibility='default' filepath='include/media/videobuf2-core.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='alloc_devs' type-id='f6e5abef' visibility='default' filepath='include/media/videobuf2-core.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mmap_lock' type-id='925167dc' visibility='default' filepath='include/media/videobuf2-core.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='memory' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='dma_dir' type-id='eea6b025' visibility='default' filepath='include/media/videobuf2-core.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bufs' type-id='f989fdcc' visibility='default' filepath='include/media/videobuf2-core.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='queued_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='queued_count' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='owned_by_drv_count' type-id='49178f86' visibility='default' filepath='include/media/videobuf2-core.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='done_list' type-id='72f469ec' visibility='default' filepath='include/media/videobuf2-core.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='done_lock' type-id='fb4018a0' visibility='default' filepath='include/media/videobuf2-core.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='done_wq' type-id='b5ab048f' visibility='default' filepath='include/media/videobuf2-core.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='streaming' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='start_streaming_called' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='waiting_for_buffers' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='waiting_in_dqbuf' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_multiplanar' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_output' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='copy_timestamp' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='last_buffer_dequeued' type-id='f0981eeb' visibility='default' filepath='include/media/videobuf2-core.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='fileio' type-id='372af73d' visibility='default' filepath='include/media/videobuf2-core.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='threadio' type-id='dc2d641b' visibility='default' filepath='include/media/videobuf2-core.h' line='610' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='59b5b331' size-in-bits='16384' id='faa42463'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f51d9e86' size-in-bits='384' id='085421f4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='69ab6968' size-in-bits='1280' id='15b94482'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='video_device' size-in-bits='12672' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='259' column='1' id='a4b3744f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-dev.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='include/media/v4l2-dev.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pipe' type-id='2783658a' visibility='default' filepath='include/media/v4l2-dev.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='fops' type-id='1e4c840c' visibility='default' filepath='include/media/v4l2-dev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='device_caps' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-dev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/media/v4l2-dev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='cdev' type-id='3e6eb939' visibility='default' filepath='include/media/v4l2-dev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-dev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='dev_parent' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-dev.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-dev.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='queue' type-id='a05f1ecd' visibility='default' filepath='include/media/v4l2-dev.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='prio' type-id='2fc4734c' visibility='default' filepath='include/media/v4l2-dev.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-dev.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='vfl_type' type-id='24df61b5' visibility='default' filepath='include/media/v4l2-dev.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='vfl_dir' type-id='366ec232' visibility='default' filepath='include/media/v4l2-dev.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='num' type-id='1dc6a898' visibility='default' filepath='include/media/v4l2-dev.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-dev.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11872'>
+          <var-decl name='fh_lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-dev.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='fh_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-dev.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='dev_debug' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-dev.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='tvnorms' type-id='692d176e' visibility='default' filepath='include/media/v4l2-dev.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='release' type-id='3007e20a' visibility='default' filepath='include/media/v4l2-dev.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='ioctl_ops' type-id='b94745b1' visibility='default' filepath='include/media/v4l2-dev.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='valid_ioctls' type-id='3461381a' visibility='default' filepath='include/media/v4l2-dev.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='lock' type-id='e0ea832a' visibility='default' filepath='include/media/v4l2-dev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_file_operations' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='194' column='1' id='58b9b3eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-dev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/media/v4l2-dev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/media/v4l2-dev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/media/v4l2-dev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compat_ioctl32' type-id='fc7daf55' visibility='default' filepath='include/media/v4l2-dev.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/media/v4l2-dev.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/media/v4l2-dev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='open' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='4da4101d' visibility='default' filepath='include/media/v4l2-dev.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-dev.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_device' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-device.h' line='47' column='1' id='f1828bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-device.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mdev' type-id='e2929c1c' visibility='default' filepath='include/media/v4l2-device.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-device.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/media/v4l2-device.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='name' type-id='16e6f2c6' visibility='default' filepath='include/media/v4l2-device.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notify' type-id='9f5eb43a' visibility='default' filepath='include/media/v4l2-device.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-device.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prio' type-id='281d3096' visibility='default' filepath='include/media/v4l2-device.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/media/v4l2-device.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='release' type-id='8dfbe74f' visibility='default' filepath='include/media/v4l2-device.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='848' column='1' id='59eccc2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entity' type-id='889856f7' visibility='default' filepath='include/media/v4l2-subdev.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-subdev.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner_v4l2_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='040770fb' visibility='default' filepath='include/media/v4l2-subdev.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='internal_ops' type-id='2553c323' visibility='default' filepath='include/media/v4l2-subdev.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/media/v4l2-subdev.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='grp_id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='devnode' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-subdev.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/media/v4l2-subdev.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-subdev.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='asd' type-id='707be29c' visibility='default' filepath='include/media/v4l2-subdev.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='subdev_notifier' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-subdev.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='pdata' type-id='616ec7d2' visibility='default' filepath='include/media/v4l2-subdev.h' line='871' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='727' column='1' id='026dac7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='5317b3cd' visibility='default' filepath='include/media/v4l2-subdev.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tuner' type-id='12d4fd76' visibility='default' filepath='include/media/v4l2-subdev.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='audio' type-id='2d92dd30' visibility='default' filepath='include/media/v4l2-subdev.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='video' type-id='5a7c2847' visibility='default' filepath='include/media/v4l2-subdev.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbi' type-id='cc679d2b' visibility='default' filepath='include/media/v4l2-subdev.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ir' type-id='7bd796c9' visibility='default' filepath='include/media/v4l2-subdev.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sensor' type-id='b2ac7a1e' visibility='default' filepath='include/media/v4l2-subdev.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pad' type-id='475ad931' visibility='default' filepath='include/media/v4l2-subdev.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_core_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='188' column='1' id='b569b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='log_status' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_io_pin_config' type-id='c52b8c36' visibility='default' filepath='include/media/v4l2-subdev.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_fw' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_gpio' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='cafb3255' visibility='default' filepath='include/media/v4l2-subdev.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='compat_ioctl32' type-id='efb4ad67' visibility='default' filepath='include/media/v4l2-subdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_power' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='interrupt_service_routine' type-id='f3f22912' visibility='default' filepath='include/media/v4l2-subdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='unsubscribe_event' type-id='ae675015' visibility='default' filepath='include/media/v4l2-subdev.h' line='210' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_io_pin_config' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='132' column='1' id='82096067'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pin' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='function' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='strength' type-id='f9b06939' visibility='default' filepath='include/media/v4l2-subdev.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fh' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/media/v4l2-fh.h' line='42' column='1' id='53422e64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vdev' type-id='798c29b7' visibility='default' filepath='include/media/v4l2-fh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-fh.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prio' type-id='8b60a0b9' visibility='default' filepath='include/media/v4l2-fh.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/media/v4l2-fh.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='subscribe_lock' type-id='925167dc' visibility='default' filepath='include/media/v4l2-fh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subscribed' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='available' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-fh.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='navailable' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-fh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sequence' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-fh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='m2m_ctx' type-id='2c7f1dc4' visibility='default' filepath='include/media/v4l2-fh.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_priority' filepath='include/uapi/linux/videodev2.h' line='404' column='1' id='8b60a0b9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_PRIORITY_UNSET' value='0'/>
+        <enumerator name='V4L2_PRIORITY_BACKGROUND' value='1'/>
+        <enumerator name='V4L2_PRIORITY_INTERACTIVE' value='2'/>
+        <enumerator name='V4L2_PRIORITY_RECORD' value='3'/>
+        <enumerator name='V4L2_PRIORITY_DEFAULT' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_event_subscription' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2351' column='1' id='1251351e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2355' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_tuner_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='264' column='1' id='40eafb47'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='standby' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_radio' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_frequency' type-id='8a4f973d' visibility='default' filepath='include/media/v4l2-subdev.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_frequency' type-id='d36d46c6' visibility='default' filepath='include/media/v4l2-subdev.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enum_freq_bands' type-id='64144346' visibility='default' filepath='include/media/v4l2-subdev.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_tuner' type-id='3ac60b54' visibility='default' filepath='include/media/v4l2-subdev.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_tuner' type-id='3ba48c9f' visibility='default' filepath='include/media/v4l2-subdev.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_modulator' type-id='e60f1e27' visibility='default' filepath='include/media/v4l2-subdev.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_modulator' type-id='c99780b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_type_addr' type-id='0f2da0bb' visibility='default' filepath='include/media/v4l2-subdev.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_config' type-id='f8acd34f' visibility='default' filepath='include/media/v4l2-subdev.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frequency' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1861' column='1' id='a15ecb0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1865' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frequency_band' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1872' column='1' id='400ed05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='modulation' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1880' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_tuner' size-in-bits='672' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1804' column='1' id='fd240b02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='rxsubchans' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='audmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='signal' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='afc' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1815' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_modulator' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1818' column='1' id='7c3a095f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1819' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='txsubchans' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1826' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_priv_tun_config' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-common.h' line='335' column='1' id='52c7f7a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-common.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-common.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_audio_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='304' column='1' id='e3913a59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_i2s_clock_freq' type-id='04cc4d9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='308' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_video_ops' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='415' column='1' id='6eadcbe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_routing' type-id='f9d7b9fc' visibility='default' filepath='include/media/v4l2-subdev.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_crystal_freq' type-id='1825e6b5' visibility='default' filepath='include/media/v4l2-subdev.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_std' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_std' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_std_output' type-id='1976ccf6' visibility='default' filepath='include/media/v4l2-subdev.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_std_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='querystd' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='g_tvnorms' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='g_tvnorms_output' type-id='865e6323' visibility='default' filepath='include/media/v4l2-subdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='g_input_status' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_stream' type-id='6d63cad6' visibility='default' filepath='include/media/v4l2-subdev.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='g_pixelaspect' type-id='44b18db0' visibility='default' filepath='include/media/v4l2-subdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='g_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_frame_interval' type-id='7bd168bf' visibility='default' filepath='include/media/v4l2-subdev.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='g_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='query_dv_timings' type-id='afd7b47c' visibility='default' filepath='include/media/v4l2-subdev.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='g_mbus_config' type-id='ddaeaa9e' visibility='default' filepath='include/media/v4l2-subdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='s_mbus_config' type-id='7c61dabd' visibility='default' filepath='include/media/v4l2-subdev.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='s_rx_buffer' type-id='02cea60b' visibility='default' filepath='include/media/v4l2-subdev.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_std_id' type-id='d3130597' filepath='include/uapi/linux/videodev2.h' line='1219' column='1' id='692d176e'/>
+      <class-decl name='v4l2_fract' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='419' column='1' id='5f37256e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numerator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='denominator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_interval' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='107' column='1' id='e346e6f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='interval' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_dv_timings' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1518' column='1' id='9a25f4b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='d749ec6e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1520' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1520' column='1' id='d749ec6e'>
+        <data-member access='public'>
+          <var-decl name='bt' type-id='ecc13ba0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1522' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_bt_timings' size-in-bits='992' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1395' column='1' id='ecc13ba0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='interlaced' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='polarities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='vfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='il_vfrontporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='il_vsync' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='il_vbackporch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='standards' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='picture_aspect' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cea861_vic' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='616'>
+          <var-decl name='hdmi_vic' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='reserved' type-id='0ddb15d8' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1415' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_config' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/v4l2-mediabus.h' line='99' column='1' id='a0776e3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='e34ed0c3' visibility='default' filepath='include/media/v4l2-mediabus.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-mediabus.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_mbus_type' filepath='include/media/v4l2-mediabus.h' line='83' column='1' id='e34ed0c3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_MBUS_UNKNOWN' value='0'/>
+        <enumerator name='V4L2_MBUS_PARALLEL' value='1'/>
+        <enumerator name='V4L2_MBUS_BT656' value='2'/>
+        <enumerator name='V4L2_MBUS_CSI1' value='3'/>
+        <enumerator name='V4L2_MBUS_CCP2' value='4'/>
+        <enumerator name='V4L2_MBUS_CSI2_DPHY' value='5'/>
+        <enumerator name='V4L2_MBUS_CSI2_CPHY' value='6'/>
+        <enumerator name='V4L2_MBUS_INVALID' value='7'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_vbi_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='481' column='1' id='729f8f08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='decode_vbi_line' type-id='c6a521af' visibility='default' filepath='include/media/v4l2-subdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_vbi_data' type-id='03813572' visibility='default' filepath='include/media/v4l2-subdev.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='g_vbi_data' type-id='a49b3ef9' visibility='default' filepath='include/media/v4l2-subdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='g_sliced_vbi_cap' type-id='795cf0d1' visibility='default' filepath='include/media/v4l2-subdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_raw_fmt' type-id='740a3d8b' visibility='default' filepath='include/media/v4l2-subdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='g_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_sliced_fmt' type-id='b0487488' visibility='default' filepath='include/media/v4l2-subdev.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_decode_vbi_line' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='52' column='1' id='eea20e13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_second_field' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='p' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-subdev.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='line' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2107' column='1' id='6fab59d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='51dffe12' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_cap' size-in-bits='928' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2096' column='1' id='97ed0ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vbi_format' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2044' column='1' id='ae01ca89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='samples_per_line' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='start' type-id='e5d37c7b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='count' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sliced_vbi_format' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2072' column='1' id='a2be7826'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='service_set' type-id='d315442e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='service_lines' type-id='025daa6d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='io_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2080' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='599' column='1' id='77a58158'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_read' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_write' type-id='db3c9452' visibility='default' filepath='include/media/v4l2-subdev.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_g_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_s_parameters' type-id='30f63774' visibility='default' filepath='include/media/v4l2-subdev.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_ir_parameters' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='540' column='1' id='0b2fc110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes_per_data_element' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='562dbe04' visibility='default' filepath='include/media/v4l2-subdev.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='interrupt_enable' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='shutdown' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='modulation' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_pulse_width' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='carrier_freq' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='duty_cycle' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='invert_level' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='invert_carrier_sense' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-subdev.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='noise_filter_min_width' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='carrier_range_lower' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='carrier_range_upper' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-subdev.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resolution' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='561' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_subdev_ir_mode' filepath='include/media/v4l2-subdev.h' line='511' column='1' id='562dbe04'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_SUBDEV_IR_MODE_PULSE_WIDTH' value='0'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_sensor_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='501' column='1' id='6f6b42ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_skip_top_lines' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='g_skip_frames' type-id='b530e24b' visibility='default' filepath='include/media/v4l2-subdev.h' line='503' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='674' column='1' id='0382928e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_cfg' type-id='c1d16b36' visibility='default' filepath='include/media/v4l2-subdev.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='enum_mbus_code' type-id='e188da98' visibility='default' filepath='include/media/v4l2-subdev.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enum_frame_size' type-id='94b3d6fa' visibility='default' filepath='include/media/v4l2-subdev.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enum_frame_interval' type-id='966724ce' visibility='default' filepath='include/media/v4l2-subdev.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_fmt' type-id='3a53e3ec' visibility='default' filepath='include/media/v4l2-subdev.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_selection' type-id='a56b7267' visibility='default' filepath='include/media/v4l2-subdev.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_edid' type-id='1da53a06' visibility='default' filepath='include/media/v4l2-subdev.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dv_timings_cap' type-id='2af7cc71' visibility='default' filepath='include/media/v4l2-subdev.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enum_dv_timings' type-id='d407a0d4' visibility='default' filepath='include/media/v4l2-subdev.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='link_validate' type-id='f73feb66' visibility='default' filepath='include/media/v4l2-subdev.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_frame_desc' type-id='f4b0728f' visibility='default' filepath='include/media/v4l2-subdev.h' line='711' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_pad_config' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='630' column='1' id='d2ffa1e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='try_fmt' type-id='87dd7486' visibility='default' filepath='include/media/v4l2-subdev.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='try_crop' type-id='3dbd4e78' visibility='default' filepath='include/media/v4l2-subdev.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='try_compose' type-id='3dbd4e78' visibility='default' filepath='include/media/v4l2-subdev.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_framefmt' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='30' column='1' id='87dd7486'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ycbcr_enc' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='quantization' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='xfer_func' type-id='d315442e' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='reserved' type-id='b0b8e94f' visibility='default' filepath='include/uapi/linux/v4l2-mediabus.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_rect' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='412' column='1' id='3dbd4e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='left' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='top' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='416' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_mbus_code_enum' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='75' column='1' id='f3aba577'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_size_enum' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='90' column='1' id='b9c125a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_frame_interval_enum' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='123' column='1' id='fb0dbd21'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='interval' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_format' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='48' column='1' id='23f90633'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='format' type-id='87dd7486' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_selection' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='149' column='1' id='f4c2725e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='target' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='r' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/v4l2-subdev.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_edid' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='87' column='1' id='54bf0f36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_block' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blocks' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='edid' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/v4l2-common.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_dv_timings_cap' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1582' column='1' id='cdb274e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='7bbb3c88' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1586' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1586' column='1' id='7bbb3c88'>
+        <data-member access='public'>
+          <var-decl name='bt' type-id='e5bfe593' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_data' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1588' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_bt_timings_cap' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1555' column='1' id='e5bfe593'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_pixelclock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='standards' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1564' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enum_dv_timings' size-in-bits='1184' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1537' column='1' id='b6da1a0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timings' type-id='9a25f4b0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1541' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_frame_desc' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='348' column='1' id='9a759b95'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='085421f4' visibility='default' filepath='include/media/v4l2-subdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_entries' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-subdev.h' line='350' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mbus_frame_desc_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='335' column='1' id='f51d9e86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='97a0eabc' visibility='default' filepath='include/media/v4l2-subdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixelcode' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-subdev.h' line='338' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_mbus_frame_desc_flags' filepath='include/media/v4l2-subdev.h' line='321' column='1' id='97a0eabc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_MBUS_FRAME_DESC_FL_LEN_MAX' value='1'/>
+        <enumerator name='V4L2_MBUS_FRAME_DESC_FL_BLOB' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_subdev_internal_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='765' column='1' id='d36f034a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='a236743f' visibility='default' filepath='include/media/v4l2-subdev.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unregistered' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='close' type-id='618f91b8' visibility='default' filepath='include/media/v4l2-subdev.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='1625ce7a' visibility='default' filepath='include/media/v4l2-subdev.h' line='770' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_fh' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='906' column='1' id='43b269de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vfh' type-id='53422e64' visibility='default' filepath='include/media/v4l2-subdev.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/media/v4l2-subdev.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pad' type-id='288e890e' visibility='default' filepath='include/media/v4l2-subdev.h' line='910' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_subdev' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='79' column='1' id='c2e9ee66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_type' type-id='d03a4ada' visibility='default' filepath='include/media/v4l2-async.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='5c61413a' visibility='default' filepath='include/media/v4l2-async.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_async_match_type' filepath='include/media/v4l2-async.h' line='33' column='1' id='d03a4ada'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_ASYNC_MATCH_CUSTOM' value='0'/>
+        <enumerator name='V4L2_ASYNC_MATCH_DEVNAME' value='1'/>
+        <enumerator name='V4L2_ASYNC_MATCH_I2C' value='2'/>
+        <enumerator name='V4L2_ASYNC_MATCH_FWNODE' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='81' column='1' id='5c61413a'>
+        <data-member access='public'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/media/v4l2-async.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='device_name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-async.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i2c' type-id='02403573' visibility='default' filepath='include/media/v4l2-async.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='custom' type-id='2e3fe03c' visibility='default' filepath='include/media/v4l2-async.h' line='92' 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/media/v4l2-async.h' line='84' column='1' id='02403573'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adapter_id' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-async.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address' type-id='8efea9e5' visibility='default' filepath='include/media/v4l2-async.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-async.h' line='88' column='1' id='2e3fe03c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='5c6f8956' visibility='default' filepath='include/media/v4l2-async.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-async.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_notifier' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='129' column='1' id='7e833f79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='17c9f4a9' visibility='default' filepath='include/media/v4l2-async.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='v4l2_dev' type-id='ddfb71fa' visibility='default' filepath='include/media/v4l2-async.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd' type-id='f5438ac7' visibility='default' filepath='include/media/v4l2-async.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='e1a56841' visibility='default' filepath='include/media/v4l2-async.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='asd_list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='waiting' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='done' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-async.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_async_notifier_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-async.h' line='107' column='1' id='ca8c574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bound' type-id='39e52da2' visibility='default' filepath='include/media/v4l2-async.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='complete' type-id='6f077fdd' visibility='default' filepath='include/media/v4l2-async.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unbind' type-id='55d37973' visibility='default' filepath='include/media/v4l2-async.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subdev_platform_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/v4l2-subdev.h' line='797' column='1' id='415476f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regulators' type-id='776946b4' visibility='default' filepath='include/media/v4l2-subdev.h' line='798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regulators' type-id='95e97e5e' visibility='default' filepath='include/media/v4l2-subdev.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='host_priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-subdev.h' line='801' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_prio_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/v4l2-dev.h' line='105' column='1' id='281d3096'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prios' type-id='6ed968f3' visibility='default' filepath='include/media/v4l2-dev.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vfl_devnode_type' filepath='include/media/v4l2-dev.h' line='36' column='1' id='24df61b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_TYPE_GRABBER' value='0'/>
+        <enumerator name='VFL_TYPE_VBI' value='1'/>
+        <enumerator name='VFL_TYPE_RADIO' value='2'/>
+        <enumerator name='VFL_TYPE_SUBDEV' value='3'/>
+        <enumerator name='VFL_TYPE_SDR' value='4'/>
+        <enumerator name='VFL_TYPE_TOUCH' value='5'/>
+        <enumerator name='VFL_TYPE_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='vfl_devnode_direction' filepath='include/media/v4l2-dev.h' line='56' column='1' id='366ec232'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VFL_DIR_RX' value='0'/>
+        <enumerator name='VFL_DIR_TX' value='1'/>
+        <enumerator name='VFL_DIR_M2M' value='2'/>
+      </enum-decl>
+      <class-decl name='v4l2_ioctl_ops' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/media/v4l2-ioctl.h' line='296' column='1' id='eb7c81d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vidioc_querycap' type-id='70be41da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vidioc_enum_fmt_vid_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vidioc_enum_fmt_vid_overlay' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vidioc_enum_fmt_vid_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vidioc_enum_fmt_sdr_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='vidioc_enum_fmt_sdr_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vidioc_enum_fmt_meta_cap' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='vidioc_enum_fmt_meta_out' type-id='318389e0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vidioc_g_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vidioc_g_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vidioc_g_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vidioc_g_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vidioc_g_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vidioc_g_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='vidioc_g_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='vidioc_g_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='vidioc_g_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vidioc_g_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vidioc_g_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vidioc_g_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vidioc_g_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='vidioc_s_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vidioc_s_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='vidioc_s_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='vidioc_s_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='vidioc_s_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vidioc_s_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vidioc_s_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vidioc_s_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vidioc_s_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vidioc_s_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='vidioc_s_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='vidioc_s_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='vidioc_s_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='vidioc_try_fmt_vid_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='vidioc_try_fmt_vid_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='vidioc_try_fmt_vid_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vidioc_try_fmt_vid_out_overlay' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='vidioc_try_fmt_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='vidioc_try_fmt_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='vidioc_try_fmt_sliced_vbi_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='vidioc_try_fmt_vid_cap_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='vidioc_try_fmt_vid_out_mplane' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='vidioc_try_fmt_sdr_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='vidioc_try_fmt_sdr_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='vidioc_try_fmt_meta_cap' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='vidioc_try_fmt_meta_out' type-id='5797b7e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='vidioc_reqbufs' type-id='3b472dd8' visibility='default' filepath='include/media/v4l2-ioctl.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='vidioc_querybuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='vidioc_qbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='vidioc_expbuf' type-id='456a5468' visibility='default' filepath='include/media/v4l2-ioctl.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='vidioc_dqbuf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='vidioc_create_bufs' type-id='dd40abb0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='vidioc_prepare_buf' type-id='6e055dae' visibility='default' filepath='include/media/v4l2-ioctl.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='vidioc_overlay' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='vidioc_g_fbuf' type-id='15c573bb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='vidioc_s_fbuf' type-id='117460b0' visibility='default' filepath='include/media/v4l2-ioctl.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='vidioc_streamon' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='vidioc_streamoff' type-id='18ff560f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='vidioc_g_std' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='vidioc_s_std' type-id='a13d0c2c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='vidioc_querystd' type-id='0e0c1c5d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='vidioc_enum_input' type-id='243d1e96' visibility='default' filepath='include/media/v4l2-ioctl.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='vidioc_g_input' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='vidioc_s_input' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='vidioc_enum_output' type-id='e2f71a2f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='vidioc_g_output' type-id='c0a3faf5' visibility='default' filepath='include/media/v4l2-ioctl.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='vidioc_s_output' type-id='6f3b229b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='vidioc_queryctrl' type-id='73892d6d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='vidioc_query_ext_ctrl' type-id='860d0bc4' visibility='default' filepath='include/media/v4l2-ioctl.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='vidioc_g_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='vidioc_s_ctrl' type-id='10f733f9' visibility='default' filepath='include/media/v4l2-ioctl.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='vidioc_g_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='vidioc_s_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='vidioc_try_ext_ctrls' type-id='517d0452' visibility='default' filepath='include/media/v4l2-ioctl.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='vidioc_querymenu' type-id='81068c97' visibility='default' filepath='include/media/v4l2-ioctl.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='vidioc_enumaudio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='vidioc_g_audio' type-id='e1c70e28' visibility='default' filepath='include/media/v4l2-ioctl.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='vidioc_s_audio' type-id='6a8dfaef' visibility='default' filepath='include/media/v4l2-ioctl.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='vidioc_enumaudout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='vidioc_g_audout' type-id='4ecb1656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='vidioc_s_audout' type-id='f8e1aa9b' visibility='default' filepath='include/media/v4l2-ioctl.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='vidioc_g_modulator' type-id='24213669' visibility='default' filepath='include/media/v4l2-ioctl.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='vidioc_s_modulator' type-id='b79f9e36' visibility='default' filepath='include/media/v4l2-ioctl.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='vidioc_g_pixelaspect' type-id='0a95e709' visibility='default' filepath='include/media/v4l2-ioctl.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='vidioc_g_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='vidioc_s_selection' type-id='a3948f60' visibility='default' filepath='include/media/v4l2-ioctl.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='vidioc_g_jpegcomp' type-id='f58cb656' visibility='default' filepath='include/media/v4l2-ioctl.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='vidioc_s_jpegcomp' type-id='ba21bbb1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='vidioc_g_enc_index' type-id='cadab7d6' visibility='default' filepath='include/media/v4l2-ioctl.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='vidioc_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='vidioc_try_encoder_cmd' type-id='7312c953' visibility='default' filepath='include/media/v4l2-ioctl.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='vidioc_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='vidioc_try_decoder_cmd' type-id='52e63b6f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='vidioc_g_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='vidioc_s_parm' type-id='41d02516' visibility='default' filepath='include/media/v4l2-ioctl.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='vidioc_g_tuner' type-id='35b8846a' visibility='default' filepath='include/media/v4l2-ioctl.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='vidioc_s_tuner' type-id='aec87d1d' visibility='default' filepath='include/media/v4l2-ioctl.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='vidioc_g_frequency' type-id='7398303c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='vidioc_s_frequency' type-id='48d231fb' visibility='default' filepath='include/media/v4l2-ioctl.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='vidioc_enum_freq_bands' type-id='771ff1ac' visibility='default' filepath='include/media/v4l2-ioctl.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='vidioc_g_sliced_vbi_cap' type-id='5fa1787f' visibility='default' filepath='include/media/v4l2-ioctl.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='vidioc_log_status' type-id='962405e1' visibility='default' filepath='include/media/v4l2-ioctl.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='vidioc_s_hw_freq_seek' type-id='6cbcc6da' visibility='default' filepath='include/media/v4l2-ioctl.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='vidioc_enum_framesizes' type-id='9822fe67' visibility='default' filepath='include/media/v4l2-ioctl.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vidioc_enum_frameintervals' type-id='a176c78e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='vidioc_s_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='vidioc_g_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='vidioc_query_dv_timings' type-id='ce828302' visibility='default' filepath='include/media/v4l2-ioctl.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='vidioc_enum_dv_timings' type-id='fbd9657e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='vidioc_dv_timings_cap' type-id='1f370097' visibility='default' filepath='include/media/v4l2-ioctl.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='vidioc_g_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='vidioc_s_edid' type-id='d5f67e88' visibility='default' filepath='include/media/v4l2-ioctl.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='vidioc_subscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='vidioc_unsubscribe_event' type-id='081ebe8e' visibility='default' filepath='include/media/v4l2-ioctl.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vidioc_default' type-id='d2188e4c' visibility='default' filepath='include/media/v4l2-ioctl.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_capability' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='440' column='1' id='a874cee0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/videodev2.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bus_info' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='device_caps' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_fmtdesc' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='772' column='1' id='4c772628'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='description' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='778' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_format' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2243' column='1' id='0a5711c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='08bd2345' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2254' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2245' column='1' id='08bd2345'>
+        <data-member access='public'>
+          <var-decl name='pix' type-id='e8f6102b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2246' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pix_mp' type-id='dece967b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2247' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='win' type-id='3a0ab346' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2248' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vbi' type-id='ae01ca89' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2249' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sliced' type-id='a2be7826' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2250' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sdr' type-id='a37aff65' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2251' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='meta' type-id='1db7c88b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2252' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2253' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_pix_format' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='494' column='1' id='e8f6102b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='930baada' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='511' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='504' column='1' id='930baada'>
+        <data-member access='public'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hsv_enc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='508' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_pix_format_mplane' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2193' column='1' id='dece967b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='plane_fmt' type-id='15b94482' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='num_planes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1448'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='' type-id='29c254d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1464'>
+          <var-decl name='quantization' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='xfer_func' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='reserved' type-id='c20b850f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_plane_pix_format' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2173' column='1' id='69ab6968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='81144473' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2176' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='8' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2203' column='1' id='29c254d4'>
+        <data-member access='public'>
+          <var-decl name='ycbcr_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2204' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hsv_enc' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2205' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_window' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1143' column='1' id='3a0ab346'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='w' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='chromakey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clips' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clipcount' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bitmap' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='global_alpha' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_clip' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1138' column='1' id='aecf225c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='db634b6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_sdr_format' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2217' column='1' id='a37aff65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2220' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_meta_format' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2228' column='1' id='1db7c88b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dataformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='buffersize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2230' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_requestbuffers' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='913' column='1' id='879dea4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_buffer' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='995' column='1' id='5e2fd874'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='2a693ac3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timecode' type-id='5f820012' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='m' type-id='09960b26' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1014' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='e0a2553c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_timecode' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='856' column='1' id='5f820012'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frames' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='seconds' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='minutes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='hours' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='userbits' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/videodev2.h' line='863' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1007' column='1' id='09960b26'>
+        <data-member access='public'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='planes' type-id='00e8fe5a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1011' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_plane' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='951' column='1' id='8cd967bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytesused' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='m' type-id='9942b293' visibility='default' filepath='include/uapi/linux/videodev2.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='961' 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/videodev2.h' line='954' column='1' id='9942b293'>
+        <data-member access='public'>
+          <var-decl name='mem_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='7359adad' visibility='default' filepath='include/uapi/linux/videodev2.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='957' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1015' column='1' id='e0a2553c'>
+        <data-member access='public'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1017' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_exportbuffer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1091' column='1' id='b201a5c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plane' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1097' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_create_buffers' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2412' column='1' id='20d04fee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memory' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='0a5711c9' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='reserved' type-id='3faaea70' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2418' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_framebuffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1103' column='1' id='e2103cb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fmt' type-id='dbebd65f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1109' column='1' id='dbebd65f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pixelformat' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='field' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bytesperline' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sizeimage' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='priv' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1117' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_buf_type' filepath='include/uapi/linux/videodev2.h' line='141' column='1' id='1abf108f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE' value='1'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT' value='2'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OVERLAY' value='3'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_CAPTURE' value='4'/>
+        <enumerator name='V4L2_BUF_TYPE_VBI_OUTPUT' value='5'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_CAPTURE' value='6'/>
+        <enumerator name='V4L2_BUF_TYPE_SLICED_VBI_OUTPUT' value='7'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_OVERLAY' value='8'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE' value='9'/>
+        <enumerator name='V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE' value='10'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_CAPTURE' value='11'/>
+        <enumerator name='V4L2_BUF_TYPE_SDR_OUTPUT' value='12'/>
+        <enumerator name='V4L2_BUF_TYPE_META_CAPTURE' value='13'/>
+        <enumerator name='V4L2_BUF_TYPE_META_OUTPUT' value='14'/>
+        <enumerator name='V4L2_BUF_TYPE_PRIVATE' value='128'/>
+      </enum-decl>
+      <class-decl name='v4l2_input' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1596' column='1' id='f1bdbe5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audioset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='std' type-id='692d176e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1605' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_output' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1648' column='1' id='97abd73b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audioset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='modulator' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='std' type-id='692d176e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capabilities' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1656' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_queryctrl' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1738' column='1' id='e162c03f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1747' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_query_ext_ctrl' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1751' column='1' id='92bf903a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='minimum' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='maximum' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='step' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='default_value' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='elem_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='elems' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='nr_of_dims' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dims' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reserved' type-id='734a963c' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1764' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_control' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1672' column='1' id='d6a7cd6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1674' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ext_controls' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1693' column='1' id='1a041cb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='3e79fede' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='error_idx' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='request_fd' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserved' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='controls' type-id='264baaf7' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1704' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1694' column='1' id='3e79fede'>
+        <data-member access='public'>
+          <var-decl name='which' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1698' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_ext_control' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1677' column='1' id='99cd308f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved2' type-id='439be632' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='56e9fb5b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1681' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1681' column='1' id='56e9fb5b'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1682' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1683' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1684' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u8' type-id='474e5dcc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1685' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u16' type-id='2e5e3725' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1686' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u32' type-id='cd1b45ab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1687' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1688' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1689' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_area' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='424' column='1' id='baab64cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='426' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_querymenu' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1768' column='1' id='7647d8c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='3cef873b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1775' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1771' column='1' id='3cef873b'>
+        <data-member access='public'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1772' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1773' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_audio' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1918' column='1' id='014e0a24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_audioout' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1933' column='1' id='5b3ea0c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1938' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_selection' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1206' column='1' id='676b848c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='r' type-id='3dbd4e78' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='43885e7a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_jpegcompression' size-in-bits='1120' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='881' column='1' id='da1685e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quality' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='APPn' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='APP_len' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='APP_data' type-id='59e5814b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='COM_len' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='COM_data' type-id='59e5814b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='jpeg_markers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='892' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enc_idx' size-in-bits='16576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1959' column='1' id='e5f6c4d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entries_cap' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='faa42463' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1963' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_enc_idx_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1950' column='1' id='59b5b331'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1955' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_encoder_cmd' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1975' column='1' id='769f1ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='96b0dd6a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1978' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1978' column='1' id='96b0dd6a'>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='f1fdc4dc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1981' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1979' column='1' id='f1fdc4dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1980' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_decoder_cmd' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2011' column='1' id='440818bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ddc566bc' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2014' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2014' column='1' id='ddc566bc'>
+        <data-member access='public'>
+          <var-decl name='stop' type-id='e0122dec' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='start' type-id='98d68d57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='62956517' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2031' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2015' column='1' id='e0122dec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pts' type-id='d3130597' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2016' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2019' column='1' id='98d68d57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='speed' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2026' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='512' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2029' column='1' id='62956517'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='9d2cf33e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2030' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_streamparm' size-in-bits='1632' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2259' column='1' id='2f896428'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='parm' type-id='1ccea1b5' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2265' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='1600' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2261' column='1' id='1ccea1b5'>
+        <data-member access='public'>
+          <var-decl name='capture' type-id='f88a5c22' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2262' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='output' type-id='b573e9f1' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2263' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_data' type-id='0530f1a6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2264' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_captureparm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1156' column='1' id='f88a5c22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capturemode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeperframe' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extendedmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='readbuffers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_outputparm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1169' column='1' id='b573e9f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capability' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='outputmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeperframe' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extendedmode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writebuffers' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reserved' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hw_freq_seek' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1883' column='1' id='a5eead8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tuner' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seek_upward' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wrap_around' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spacing' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rangelow' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rangehigh' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='1891' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmsizeenum' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='810' column='1' id='aba31911'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='8e6aae74' visibility='default' filepath='include/uapi/linux/videodev2.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='820' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='815' column='1' id='8e6aae74'>
+        <data-member access='public'>
+          <var-decl name='discrete' type-id='10186cf6' visibility='default' filepath='include/uapi/linux/videodev2.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='stepwise' type-id='5a62dd2b' visibility='default' filepath='include/uapi/linux/videodev2.h' line='817' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_frmsize_discrete' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='796' column='1' id='10186cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='798' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmsize_stepwise' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='801' column='1' id='5a62dd2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='step_width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='step_height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='807' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_frmivalenum' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='838' column='1' id='7caad7ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pixel_format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='' type-id='cfd72743' visibility='default' filepath='include/uapi/linux/videodev2.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/videodev2.h' line='850' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='845' column='1' id='cfd72743'>
+        <data-member access='public'>
+          <var-decl name='discrete' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='stepwise' type-id='99cd0646' visibility='default' filepath='include/uapi/linux/videodev2.h' line='847' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_frmival_stepwise' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='832' column='1' id='99cd0646'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='5f37256e' visibility='default' filepath='include/uapi/linux/videodev2.h' line='835' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ca8c574c' const='yes' id='20400679'/>
+      <pointer-type-def type-id='20400679' size-in-bits='64' id='17c9f4a9'/>
+      <qualified-type-def type-id='014e0a24' const='yes' id='adff645d'/>
+      <pointer-type-def type-id='adff645d' size-in-bits='64' id='600b2755'/>
+      <qualified-type-def type-id='5b3ea0c8' const='yes' id='2fecddf7'/>
+      <pointer-type-def type-id='2fecddf7' size-in-bits='64' id='4ee142e7'/>
+      <qualified-type-def type-id='1251351e' const='yes' id='ef7d00fd'/>
+      <pointer-type-def type-id='ef7d00fd' size-in-bits='64' id='d8c85275'/>
+      <qualified-type-def type-id='58b9b3eb' const='yes' id='9eb7236e'/>
+      <pointer-type-def type-id='9eb7236e' size-in-bits='64' id='1e4c840c'/>
+      <qualified-type-def type-id='e2103cb1' const='yes' id='8b69ca04'/>
+      <pointer-type-def type-id='8b69ca04' size-in-bits='64' id='a589466a'/>
+      <qualified-type-def type-id='a15ecb0c' const='yes' id='4a35e585'/>
+      <pointer-type-def type-id='4a35e585' size-in-bits='64' id='81d8927d'/>
+      <qualified-type-def type-id='a5eead8f' const='yes' id='63b32204'/>
+      <pointer-type-def type-id='63b32204' size-in-bits='64' id='20fece6a'/>
+      <qualified-type-def type-id='eb7c81d8' const='yes' id='39863601'/>
+      <pointer-type-def type-id='39863601' size-in-bits='64' id='b94745b1'/>
+      <qualified-type-def type-id='da1685e2' const='yes' id='b0e90747'/>
+      <pointer-type-def type-id='b0e90747' size-in-bits='64' id='ebd6b097'/>
+      <qualified-type-def type-id='a0776e3c' const='yes' id='9313318d'/>
+      <pointer-type-def type-id='9313318d' size-in-bits='64' id='2e3729e5'/>
+      <qualified-type-def type-id='7c3a095f' const='yes' id='d97eb63a'/>
+      <pointer-type-def type-id='d97eb63a' size-in-bits='64' id='72789b30'/>
+      <qualified-type-def type-id='52c7f7a2' const='yes' id='bdd1d6eb'/>
+      <pointer-type-def type-id='bdd1d6eb' size-in-bits='64' id='925511d3'/>
+      <qualified-type-def type-id='6fab59d9' const='yes' id='e682e2f0'/>
+      <pointer-type-def type-id='e682e2f0' size-in-bits='64' id='ba0b1d2e'/>
+      <qualified-type-def type-id='e3913a59' const='yes' id='53ecac3a'/>
+      <pointer-type-def type-id='53ecac3a' size-in-bits='64' id='2d92dd30'/>
+      <qualified-type-def type-id='b569b18c' const='yes' id='9d085135'/>
+      <pointer-type-def type-id='9d085135' size-in-bits='64' id='5317b3cd'/>
+      <qualified-type-def type-id='d36f034a' const='yes' id='01e0721b'/>
+      <pointer-type-def type-id='01e0721b' size-in-bits='64' id='2553c323'/>
+      <qualified-type-def type-id='77a58158' const='yes' id='bf11af99'/>
+      <pointer-type-def type-id='bf11af99' size-in-bits='64' id='7bd796c9'/>
+      <qualified-type-def type-id='026dac7c' const='yes' id='3a7813d3'/>
+      <pointer-type-def type-id='3a7813d3' size-in-bits='64' id='040770fb'/>
+      <qualified-type-def type-id='0382928e' const='yes' id='d48e8481'/>
+      <pointer-type-def type-id='d48e8481' size-in-bits='64' id='475ad931'/>
+      <qualified-type-def type-id='6f6b42ed' const='yes' id='9f25e800'/>
+      <pointer-type-def type-id='9f25e800' size-in-bits='64' id='b2ac7a1e'/>
+      <qualified-type-def type-id='40eafb47' const='yes' id='dc30ce58'/>
+      <pointer-type-def type-id='dc30ce58' size-in-bits='64' id='12d4fd76'/>
+      <qualified-type-def type-id='729f8f08' const='yes' id='f5af9523'/>
+      <pointer-type-def type-id='f5af9523' size-in-bits='64' id='cc679d2b'/>
+      <qualified-type-def type-id='6eadcbe0' const='yes' id='02233ed7'/>
+      <pointer-type-def type-id='02233ed7' size-in-bits='64' id='5a7c2847'/>
+      <qualified-type-def type-id='fd240b02' const='yes' id='bd2407df'/>
+      <pointer-type-def type-id='bd2407df' size-in-bits='64' id='b4b886af'/>
+      <pointer-type-def type-id='9ed97fed' size-in-bits='64' id='962405e1'/>
+      <pointer-type-def type-id='1601b1ab' size-in-bits='64' id='6a8dfaef'/>
+      <pointer-type-def type-id='24bce3cf' size-in-bits='64' id='f8e1aa9b'/>
+      <pointer-type-def type-id='14617e76' size-in-bits='64' id='117460b0'/>
+      <pointer-type-def type-id='e4960e7f' size-in-bits='64' id='48d231fb'/>
+      <pointer-type-def type-id='3f7bc138' size-in-bits='64' id='6cbcc6da'/>
+      <pointer-type-def type-id='e82a9f1d' size-in-bits='64' id='ba21bbb1'/>
+      <pointer-type-def type-id='ab883904' size-in-bits='64' id='b79f9e36'/>
+      <pointer-type-def type-id='a2b102f9' size-in-bits='64' id='aec87d1d'/>
+      <pointer-type-def type-id='3bb4887b' size-in-bits='64' id='18ff560f'/>
+      <pointer-type-def type-id='7b49a935' size-in-bits='64' id='0a95e709'/>
+      <pointer-type-def type-id='b287e2b2' size-in-bits='64' id='a13d0c2c'/>
+      <pointer-type-def type-id='162c0977' size-in-bits='64' id='6f3b229b'/>
+      <pointer-type-def type-id='9d558819' size-in-bits='64' id='c0a3faf5'/>
+      <pointer-type-def type-id='f155b036' size-in-bits='64' id='e1c70e28'/>
+      <pointer-type-def type-id='13bb6c7c' size-in-bits='64' id='4ecb1656'/>
+      <pointer-type-def type-id='280730d4' size-in-bits='64' id='6e055dae'/>
+      <pointer-type-def type-id='25edcf18' size-in-bits='64' id='70be41da'/>
+      <pointer-type-def type-id='06706e9d' size-in-bits='64' id='10f733f9'/>
+      <pointer-type-def type-id='5178491e' size-in-bits='64' id='dd40abb0'/>
+      <pointer-type-def type-id='4706793b' size-in-bits='64' id='52e63b6f'/>
+      <pointer-type-def type-id='29c6d348' size-in-bits='64' id='ce828302'/>
+      <pointer-type-def type-id='13be673b' size-in-bits='64' id='1f370097'/>
+      <pointer-type-def type-id='30e75f3e' size-in-bits='64' id='d5f67e88'/>
+      <pointer-type-def type-id='7370d1f4' size-in-bits='64' id='cadab7d6'/>
+      <pointer-type-def type-id='8074b8e7' size-in-bits='64' id='7312c953'/>
+      <pointer-type-def type-id='10498fec' size-in-bits='64' id='fbd9657e'/>
+      <pointer-type-def type-id='a2a24eee' size-in-bits='64' id='456a5468'/>
+      <pointer-type-def type-id='28327a10' size-in-bits='64' id='517d0452'/>
+      <pointer-type-def type-id='232e3e4e' size-in-bits='64' id='318389e0'/>
+      <pointer-type-def type-id='302b8c85' size-in-bits='64' id='5797b7e1'/>
+      <pointer-type-def type-id='e64743d7' size-in-bits='64' id='15c573bb'/>
+      <pointer-type-def type-id='e3087f12' size-in-bits='64' id='7398303c'/>
+      <pointer-type-def type-id='dd378762' size-in-bits='64' id='771ff1ac'/>
+      <pointer-type-def type-id='258baccc' size-in-bits='64' id='a176c78e'/>
+      <pointer-type-def type-id='962c09bb' size-in-bits='64' id='9822fe67'/>
+      <pointer-type-def type-id='5895f71c' size-in-bits='64' id='243d1e96'/>
+      <pointer-type-def type-id='c66117cc' size-in-bits='64' id='f58cb656'/>
+      <pointer-type-def type-id='4a1c795d' size-in-bits='64' id='24213669'/>
+      <pointer-type-def type-id='aac69b6b' size-in-bits='64' id='e2f71a2f'/>
+      <pointer-type-def type-id='60d50d6a' size-in-bits='64' id='860d0bc4'/>
+      <pointer-type-def type-id='a73b2f11' size-in-bits='64' id='73892d6d'/>
+      <pointer-type-def type-id='857ecf83' size-in-bits='64' id='81068c97'/>
+      <pointer-type-def type-id='82fca516' size-in-bits='64' id='3b472dd8'/>
+      <pointer-type-def type-id='de826e86' size-in-bits='64' id='a3948f60'/>
+      <pointer-type-def type-id='d5c7d653' size-in-bits='64' id='5fa1787f'/>
+      <pointer-type-def type-id='f16e9b99' size-in-bits='64' id='0e0c1c5d'/>
+      <pointer-type-def type-id='6bb8016c' size-in-bits='64' id='41d02516'/>
+      <pointer-type-def type-id='c49062e0' size-in-bits='64' id='35b8846a'/>
+      <pointer-type-def type-id='17b31231' size-in-bits='64' id='6f077fdd'/>
+      <pointer-type-def type-id='bed27c38' size-in-bits='64' id='39e52da2'/>
+      <pointer-type-def type-id='817d10dc' size-in-bits='64' id='081ebe8e'/>
+      <pointer-type-def type-id='77296733' size-in-bits='64' id='a236743f'/>
+      <pointer-type-def type-id='822ce289' size-in-bits='64' id='8a4f973d'/>
+      <pointer-type-def type-id='43b517a9' size-in-bits='64' id='7c61dabd'/>
+      <pointer-type-def type-id='3d684a5a' size-in-bits='64' id='c99780b4'/>
+      <pointer-type-def type-id='44ab747b' size-in-bits='64' id='f8acd34f'/>
+      <pointer-type-def type-id='714fe898' size-in-bits='64' id='03813572'/>
+      <pointer-type-def type-id='2966597b' size-in-bits='64' id='3ba48c9f'/>
+      <pointer-type-def type-id='261083fc' size-in-bits='64' id='6d63cad6'/>
+      <pointer-type-def type-id='efa4e33c' size-in-bits='64' id='f73feb66'/>
+      <pointer-type-def type-id='960d41bf' size-in-bits='64' id='0f2da0bb'/>
+      <pointer-type-def type-id='2d6f2c74' size-in-bits='64' id='c52b8c36'/>
+      <pointer-type-def type-id='ad810f54' size-in-bits='64' id='04cc4d9e'/>
+      <pointer-type-def type-id='5ba85b48' size-in-bits='64' id='f3f22912'/>
+      <pointer-type-def type-id='be643611' size-in-bits='64' id='1825e6b5'/>
+      <pointer-type-def type-id='24255cb2' size-in-bits='64' id='f9d7b9fc'/>
+      <pointer-type-def type-id='3d709624' size-in-bits='64' id='1976ccf6'/>
+      <pointer-type-def type-id='20cd6817' size-in-bits='64' id='b530e24b'/>
+      <pointer-type-def type-id='7b74b2c0' size-in-bits='64' id='db3c9452'/>
+      <pointer-type-def type-id='cc85da13' size-in-bits='64' id='f4b0728f'/>
+      <pointer-type-def type-id='8230f98b' size-in-bits='64' id='c6a521af'/>
+      <pointer-type-def type-id='17ae78d2' size-in-bits='64' id='afd7b47c'/>
+      <pointer-type-def type-id='18e34d1d' size-in-bits='64' id='2af7cc71'/>
+      <pointer-type-def type-id='f13a9afc' size-in-bits='64' id='1da53a06'/>
+      <pointer-type-def type-id='c763c2ea' size-in-bits='64' id='d407a0d4'/>
+      <pointer-type-def type-id='52e7eff9' size-in-bits='64' id='ae675015'/>
+      <pointer-type-def type-id='16b2c11e' size-in-bits='64' id='44b18db0'/>
+      <pointer-type-def type-id='354af324' size-in-bits='64' id='d36d46c6'/>
+      <pointer-type-def type-id='21419694' size-in-bits='64' id='64144346'/>
+      <pointer-type-def type-id='78b76b9c' size-in-bits='64' id='ddaeaa9e'/>
+      <pointer-type-def type-id='d2bdcec3' size-in-bits='64' id='e60f1e27'/>
+      <pointer-type-def type-id='0ffa0cdd' size-in-bits='64' id='795cf0d1'/>
+      <pointer-type-def type-id='e3d2455d' size-in-bits='64' id='a49b3ef9'/>
+      <pointer-type-def type-id='1e4a1386' size-in-bits='64' id='b0487488'/>
+      <pointer-type-def type-id='a8ee3f87' size-in-bits='64' id='865e6323'/>
+      <pointer-type-def type-id='4bd12e16' size-in-bits='64' id='618f91b8'/>
+      <pointer-type-def type-id='1b424123' size-in-bits='64' id='7bd168bf'/>
+      <pointer-type-def type-id='604bba92' size-in-bits='64' id='30f63774'/>
+      <pointer-type-def type-id='122af7a4' size-in-bits='64' id='c1d16b36'/>
+      <pointer-type-def type-id='fea27882' size-in-bits='64' id='3a53e3ec'/>
+      <pointer-type-def type-id='f519d7ec' size-in-bits='64' id='966724ce'/>
+      <pointer-type-def type-id='404f4f30' size-in-bits='64' id='94b3d6fa'/>
+      <pointer-type-def type-id='0fdf477e' size-in-bits='64' id='e188da98'/>
+      <pointer-type-def type-id='fb3ed1d3' size-in-bits='64' id='a56b7267'/>
+      <pointer-type-def type-id='626191ca' size-in-bits='64' id='3ac60b54'/>
+      <pointer-type-def type-id='5cdc243f' size-in-bits='64' id='740a3d8b'/>
+      <pointer-type-def type-id='cfc17f8f' size-in-bits='64' id='02cea60b'/>
+      <pointer-type-def type-id='b8dcddba' size-in-bits='64' id='d2188e4c'/>
+      <pointer-type-def type-id='ea214f7b' size-in-bits='64' id='efb4ad67'/>
+      <pointer-type-def type-id='20a7e419' size-in-bits='64' id='cafb3255'/>
+      <pointer-type-def type-id='79a0948f' size-in-bits='64' id='3f9bbdb6'/>
+      <pointer-type-def type-id='de57f169' size-in-bits='64' id='a6265381'/>
+      <pointer-type-def type-id='0b244c64' size-in-bits='64' id='5c6f8956'/>
+      <pointer-type-def type-id='baab64cf' size-in-bits='64' id='26385187'/>
+      <pointer-type-def type-id='7e833f79' size-in-bits='64' id='e1a56841'/>
+      <pointer-type-def type-id='c2e9ee66' size-in-bits='64' id='707be29c'/>
+      <pointer-type-def type-id='014e0a24' size-in-bits='64' id='3c8a5f42'/>
+      <pointer-type-def type-id='5b3ea0c8' size-in-bits='64' id='d2063c9e'/>
+      <pointer-type-def type-id='5e2fd874' size-in-bits='64' id='a90d9002'/>
+      <pointer-type-def type-id='a874cee0' size-in-bits='64' id='d8a61886'/>
+      <pointer-type-def type-id='aecf225c' size-in-bits='64' id='db634b6a'/>
+      <pointer-type-def type-id='d6a7cd6f' size-in-bits='64' id='bcd28457'/>
+      <pointer-type-def type-id='20d04fee' size-in-bits='64' id='0bb617a4'/>
+      <pointer-type-def type-id='d6130048' size-in-bits='64' id='2b59fa5e'/>
+      <pointer-type-def type-id='eea20e13' size-in-bits='64' id='98eca9c3'/>
+      <pointer-type-def type-id='440818bd' size-in-bits='64' id='750dbc1d'/>
+      <pointer-type-def type-id='f1828bdc' size-in-bits='64' id='ddfb71fa'/>
+      <pointer-type-def type-id='9a25f4b0' size-in-bits='64' id='e3ba02e6'/>
+      <pointer-type-def type-id='cdb274e3' size-in-bits='64' id='f60348b3'/>
+      <pointer-type-def type-id='54bf0f36' size-in-bits='64' id='b29a990c'/>
+      <pointer-type-def type-id='e5f6c4d2' size-in-bits='64' id='5fe73d20'/>
+      <pointer-type-def type-id='769f1ed1' size-in-bits='64' id='f79a6dd9'/>
+      <pointer-type-def type-id='b6da1a0e' size-in-bits='64' id='c28fe484'/>
+      <pointer-type-def type-id='1251351e' size-in-bits='64' id='8edac644'/>
+      <pointer-type-def type-id='b201a5c2' size-in-bits='64' id='5606e640'/>
+      <pointer-type-def type-id='99cd308f' size-in-bits='64' id='264baaf7'/>
+      <pointer-type-def type-id='1a041cb4' size-in-bits='64' id='a4cdda22'/>
+      <pointer-type-def type-id='53422e64' size-in-bits='64' id='b7db9582'/>
+      <pointer-type-def type-id='4c772628' size-in-bits='64' id='3c28582e'/>
+      <pointer-type-def type-id='0a5711c9' size-in-bits='64' id='a4ca87c1'/>
+      <pointer-type-def type-id='5f37256e' size-in-bits='64' id='413f0ce4'/>
+      <pointer-type-def type-id='e2103cb1' size-in-bits='64' id='a52f8809'/>
+      <pointer-type-def type-id='a15ecb0c' size-in-bits='64' id='7bc9606a'/>
+      <pointer-type-def type-id='400ed05a' size-in-bits='64' id='0200a298'/>
+      <pointer-type-def type-id='7caad7ca' size-in-bits='64' id='a65dd5e8'/>
+      <pointer-type-def type-id='aba31911' size-in-bits='64' id='99c70b49'/>
+      <pointer-type-def type-id='f1bdbe5e' size-in-bits='64' id='4110d6d4'/>
+      <pointer-type-def type-id='da1685e2' size-in-bits='64' id='0bb81b50'/>
+      <pointer-type-def type-id='e1b58b0e' size-in-bits='64' id='2c7f1dc4'/>
+      <pointer-type-def type-id='a0776e3c' size-in-bits='64' id='8c46546a'/>
+      <pointer-type-def type-id='9a759b95' size-in-bits='64' id='6b4e8585'/>
+      <pointer-type-def type-id='7c3a095f' size-in-bits='64' id='6f262307'/>
+      <pointer-type-def type-id='97abd73b' size-in-bits='64' id='ffc7dc3b'/>
+      <pointer-type-def type-id='8cd967bc' size-in-bits='64' id='00e8fe5a'/>
+      <pointer-type-def type-id='281d3096' size-in-bits='64' id='2fc4734c'/>
+      <pointer-type-def type-id='92bf903a' size-in-bits='64' id='6e39d7a8'/>
+      <pointer-type-def type-id='e162c03f' size-in-bits='64' id='69a3afa7'/>
+      <pointer-type-def type-id='7647d8c9' size-in-bits='64' id='4394e2c1'/>
+      <pointer-type-def type-id='879dea4a' size-in-bits='64' id='e4330308'/>
+      <pointer-type-def type-id='676b848c' size-in-bits='64' id='2f4512ea'/>
+      <pointer-type-def type-id='97ed0ee7' size-in-bits='64' id='13f343ef'/>
+      <pointer-type-def type-id='6fab59d9' size-in-bits='64' id='cc2ef0d1'/>
+      <pointer-type-def type-id='a2be7826' size-in-bits='64' id='2451ca6c'/>
+      <pointer-type-def type-id='692d176e' size-in-bits='64' id='6ab01e59'/>
+      <pointer-type-def type-id='2f896428' size-in-bits='64' id='cd10cf8e'/>
+      <pointer-type-def type-id='59eccc2f' size-in-bits='64' id='f5438ac7'/>
+      <pointer-type-def type-id='43b269de' size-in-bits='64' id='56ec2114'/>
+      <pointer-type-def type-id='23f90633' size-in-bits='64' id='cdea97c3'/>
+      <pointer-type-def type-id='e346e6f3' size-in-bits='64' id='75099793'/>
+      <pointer-type-def type-id='fb0dbd21' size-in-bits='64' id='f93f4e09'/>
+      <pointer-type-def type-id='b9c125a5' size-in-bits='64' id='86f9d4a5'/>
+      <pointer-type-def type-id='82096067' size-in-bits='64' id='67d1ebff'/>
+      <pointer-type-def type-id='0b2fc110' size-in-bits='64' id='fac731d6'/>
+      <pointer-type-def type-id='f3aba577' size-in-bits='64' id='98671e4f'/>
+      <pointer-type-def type-id='d2ffa1e8' size-in-bits='64' id='288e890e'/>
+      <pointer-type-def type-id='415476f4' size-in-bits='64' id='616ec7d2'/>
+      <pointer-type-def type-id='f4c2725e' size-in-bits='64' id='498944b4'/>
+      <pointer-type-def type-id='fd240b02' size-in-bits='64' id='ad168a80'/>
+      <pointer-type-def type-id='ae01ca89' size-in-bits='64' id='aa06f721'/>
+      <pointer-type-def type-id='6b30321d' size-in-bits='64' id='a05f1ecd'/>
+      <pointer-type-def type-id='a4b3744f' size-in-bits='64' id='798c29b7'/>
+      <pointer-type-def type-id='42c66597' size-in-bits='64' id='55d37973'/>
+      <pointer-type-def type-id='b6a7cdb3' size-in-bits='64' id='8dfbe74f'/>
+      <pointer-type-def type-id='4bda18f8' size-in-bits='64' id='1625ce7a'/>
+      <pointer-type-def type-id='3516ab98' size-in-bits='64' id='9f5eb43a'/>
+      <pointer-type-def type-id='9d4a3248' size-in-bits='64' id='3007e20a'/>
+      <function-decl name='video_unregister_device' mangled-name='video_unregister_device' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='1064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_unregister_device'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='1064' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='video_device_release_empty' mangled-name='video_device_release_empty' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_release_empty'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='156' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='video_device_release' mangled-name='video_device_release' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_release'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='150' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='video_device_alloc' mangled-name='video_device_alloc' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_device_alloc'>
+        <return type-id='798c29b7'/>
+      </function-decl>
+      <function-decl name='video_devdata' mangled-name='video_devdata' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_devdata'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='234' column='1'/>
+        <return type-id='798c29b7'/>
+      </function-decl>
+      <function-decl name='v4l2_prio_init' mangled-name='v4l2_prio_init' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_prio_init'>
+        <parameter type-id='2fc4734c' name='global' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__video_register_device' mangled-name='__video_register_device' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='863' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__video_register_device'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='863' column='1'/>
+        <parameter type-id='24df61b5' name='type' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='864' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='865' column='1'/>
+        <parameter type-id='95e97e5e' name='warn_if_nr_in_use' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='865' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/media/v4l2-core/v4l2-dev.c' line='866' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='3f1a6b60' size-in-bits='64' id='cd1b45ab'/>
+      <function-type size-in-bits='64' id='9ed97fed'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1601b1ab'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='600b2755'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24bce3cf'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4ee142e7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14617e76'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a589466a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4960e7f'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='81d8927d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f7bc138'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='20fece6a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e82a9f1d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ebd6b097'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ab883904'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='72789b30'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2b102f9'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b4b886af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bb4887b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='1abf108f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b49a935'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='413f0ce4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b287e2b2'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='692d176e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='162c0977'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d558819'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f155b036'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3c8a5f42'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13bb6c7c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d2063c9e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='280730d4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a90d9002'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25edcf18'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='d8a61886'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06706e9d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='bcd28457'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5178491e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0bb617a4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4706793b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='750dbc1d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29c6d348'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e3ba02e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13be673b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f60348b3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30e75f3e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b29a990c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7370d1f4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5fe73d20'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8074b8e7'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f79a6dd9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10498fec'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='c28fe484'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2a24eee'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='5606e640'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28327a10'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a4cdda22'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='232e3e4e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3c28582e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='302b8c85'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a4ca87c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e64743d7'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a52f8809'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3087f12'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7bc9606a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd378762'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0200a298'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='258baccc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a65dd5e8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='962c09bb'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='99c70b49'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5895f71c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4110d6d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c66117cc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0bb81b50'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a1c795d'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6f262307'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aac69b6b'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ffc7dc3b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='60d50d6a'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6e39d7a8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a73b2f11'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='69a3afa7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='857ecf83'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='4394e2c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82fca516'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e4330308'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de826e86'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2f4512ea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5c7d653'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='13f343ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f16e9b99'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='6ab01e59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bb8016c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cd10cf8e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c49062e0'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='ad168a80'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17b31231'>
+        <parameter type-id='e1a56841'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bed27c38'>
+        <parameter type-id='e1a56841'/>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='817d10dc'>
+        <parameter type-id='b7db9582'/>
+        <parameter type-id='d8c85275'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77296733'>
+        <parameter type-id='f5438ac7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='822ce289'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='81d8927d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43b517a9'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='2e3729e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d684a5a'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='72789b30'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='44ab747b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='925511d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='714fe898'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='ba0b1d2e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2966597b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b4b886af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='261083fc'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efa4e33c'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b4de78ea'/>
+        <parameter type-id='cdea97c3'/>
+        <parameter type-id='cdea97c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='960d41bf'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='a6265381'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d6f2c74'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='67d1ebff'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad810f54'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ba85b48'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be643611'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24255cb2'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d709624'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='692d176e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20cd6817'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b74b2c0'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='3f9bbdb6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cc85da13'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='6b4e8585'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8230f98b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='98eca9c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17ae78d2'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='e3ba02e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18e34d1d'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f60348b3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f13a9afc'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='b29a990c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c763c2ea'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='c28fe484'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16b2c11e'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='413f0ce4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='354af324'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='7bc9606a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21419694'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='0200a298'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78b76b9c'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='8c46546a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2bdcec3'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='6f262307'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ffa0cdd'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='13f343ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3d2455d'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='cc2ef0d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e4a1386'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='2451ca6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8ee3f87'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='6ab01e59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4bd12e16'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='56ec2114'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b424123'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='75099793'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='604bba92'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='fac731d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='122af7a4'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fea27882'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='cdea97c3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f519d7ec'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='f93f4e09'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='404f4f30'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='86f9d4a5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fdf477e'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='98671e4f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb3ed1d3'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='288e890e'/>
+        <parameter type-id='498944b4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='626191ca'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='ad168a80'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5cdc243f'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='aa06f721'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfc17f8f'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8dcddba'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea214f7b'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20a7e419'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b244c64'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42c66597'>
+        <parameter type-id='e1a56841'/>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='707be29c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6a7cdb3'>
+        <parameter type-id='ddfb71fa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4bda18f8'>
+        <parameter type-id='f5438ac7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3516ab98'>
+        <parameter type-id='f5438ac7'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d4a3248'>
+        <parameter type-id='798c29b7' name='vdev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-device.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b55def60' size-in-bits='512' id='467f4e10'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b55def60' size-in-bits='1024' id='0399400c'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='8160' id='29cc01cd'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='128' id='2d85a215'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8af57d41' size-in-bits='256' id='1e28c56f'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8af57d41' size-in-bits='32' id='87ce7f1e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='160' id='26fb03b8'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='176' id='eaf62816'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='304' id='fa0a1f4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='32' id='86be53ee'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='4' type-id='8f048e17' size-in-bits='8448' id='96a07b89'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='512' id='73b95420'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='768' id='9a59aaef'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='3072' id='a112b67c'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='v4l2_ctrl_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='8a6e72bc'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='128' id='1c6c0c39'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7a583acc' size-in-bits='3072' id='eefef0c1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c1c411a0' size-in-bits='6144' id='a4444dc4'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a1f34f28' size-in-bits='2048' id='41c4bc5d'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='v4l2_ctrl_ref' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='312' column='1' id='c19e9dd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl' type-id='4b8b2cf3' visibility='default' filepath='include/media/v4l2-ctrls.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='helper' type-id='7308495a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='from_other_dev' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='req_done' type-id='b50a4934' visibility='default' filepath='include/media/v4l2-ctrls.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='req' type-id='9f3a0131' visibility='default' filepath='include/media/v4l2-ctrls.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='p_req' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='232' column='1' id='dbc7d793'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ev_subs' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-ctrls.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='2b59fa5e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cluster' type-id='c517999b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ncontrols' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_new' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='has_changed' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='is_private' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='is_auto' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='is_int' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_string' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='is_ptr' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_array' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='has_volatiles' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='call_notify' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='manual_mode_value' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-ctrls.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1086b623' visibility='default' filepath='include/media/v4l2-ctrls.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type_ops' type-id='b076d304' visibility='default' filepath='include/media/v4l2-ctrls.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/media/v4l2-ctrls.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='type' type-id='cf13dc99' visibility='default' filepath='include/media/v4l2-ctrls.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='minimum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='maximum' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_value' type-id='9b7c55ef' visibility='default' filepath='include/media/v4l2-ctrls.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='elems' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='elem_size' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dims' type-id='1c6c0c39' visibility='default' filepath='include/media/v4l2-ctrls.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_of_dims' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-ctrls.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='b91b9370' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='' type-id='87415f3a' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/media/v4l2-ctrls.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='cur' type-id='b0ee3ba9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='p_def' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='p_new' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='p_cur' type-id='3f78e6a9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='103' column='1' id='205c2e40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='g_volatile_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='try_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_ctrl' type-id='4e4de503' visibility='default' filepath='include/media/v4l2-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_type_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='121' column='1' id='b154eaef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='equal' type-id='f456402b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='95625cb2' visibility='default' filepath='include/media/v4l2-ctrls.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='log' type-id='c71b901b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='validate' type-id='f089c08b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_slice_params' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='56' column='1' id='276d5663'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='forward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sequence' type-id='ecf565e1' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='picture' type-id='c82910ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='quantiser_scale_code' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_sequence' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='26' column='1' id='ecf565e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='horizontal_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vertical_size' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vbv_buffer_size' type-id='3f1a6b60' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='profile_and_level_indication' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='progressive_sequence' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='chroma_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_mpeg2_picture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='38' column='1' id='c82910ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='picture_coding_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='f_code' type-id='86be53ee' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='intra_dc_precision' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='picture_structure' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='top_field_first' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_pred_frame_dct' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='concealment_motion_vectors' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='q_scale_type' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='intra_vlc_format' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alternate_scan' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='repeat_first_field' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='progressive_frame' type-id='d315442e' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_mpeg2_quantization' size-in-bits='2080' is-struct='yes' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='69' column='1' id='2633295b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='load_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='load_chroma_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='load_chroma_non_intra_quantiser_matrix' type-id='8f048e17' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='chroma_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='chroma_non_intra_quantiser_matrix' type-id='73b95420' visibility='default' filepath='include/media/mpeg2-ctrls.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_fwht_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/fwht-ctrls.h' line='18' column='1' id='fcc0eea6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='backward_ref_ts' type-id='d3130597' visibility='default' filepath='include/media/fwht-ctrls.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='width' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='height' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='colorspace' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='xfer_func' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ycbcr_enc' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization' type-id='3f1a6b60' visibility='default' filepath='include/media/fwht-ctrls.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_sps' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='64' column='1' id='26761b9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='profile_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='constraint_set_flags' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='level_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='log2_max_frame_num_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pic_order_cnt_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_num_ref_frames' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='num_ref_frames_in_pic_order_cnt_cycle' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset_for_ref_frame' type-id='29cc01cd' visibility='default' filepath='include/media/h264-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='offset_for_non_ref_pic' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='offset_for_top_to_bottom_field' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='pic_width_in_mbs_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8336'>
+          <var-decl name='pic_height_in_map_units_minus1' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_pps' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='94' column='1' id='ca2e9cda'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='seq_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='num_slice_groups_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='num_ref_idx_l0_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_ref_idx_l1_default_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='weighted_bipred_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='pic_init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pic_init_qs_minus26' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='second_chroma_qp_index_offset' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_scaling_matrix' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='108' column='1' id='3a58d3ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scaling_list_4x4' type-id='9a59aaef' visibility='default' filepath='include/media/h264-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='scaling_list_8x8' type-id='a112b67c' visibility='default' filepath='include/media/h264-ctrls.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_h264_slice_params' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='137' column='1' id='a44a15b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='header_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='first_mb_in_slice' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='pic_parameter_set_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='redundant_pic_cnt' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idr_pic_id' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='pic_order_cnt_lsb' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delta_pic_order_cnt_bottom' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='delta_pic_order_cnt0' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_pic_order_cnt1' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='pred_weight_table' type-id='864d11b6' visibility='default' filepath='include/media/h264-ctrls.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='dec_ref_pic_marking_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='pic_order_cnt_bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='cabac_init_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6536'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6544'>
+          <var-decl name='slice_qs_delta' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6552'>
+          <var-decl name='disable_deblocking_filter_idc' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='slice_alpha_c0_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6568'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/h264-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6576'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6584'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/h264-ctrls.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='slice_group_change_cycle' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='ref_pic_list0' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='ref_pic_list1' type-id='7e67d89d' visibility='default' filepath='include/media/h264-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_pred_weight_table' size-in-bits='6176' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='120' column='1' id='864d11b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='chroma_log2_weight_denom' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='weight_factors' type-id='a4444dc4' visibility='default' filepath='include/media/h264-ctrls.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_weight_factors' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='113' column='1' id='c1c411a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='luma_weight' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='luma_offset' type-id='467f4e10' visibility='default' filepath='include/media/h264-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chroma_weight' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='chroma_offset' type-id='0399400c' visibility='default' filepath='include/media/h264-ctrls.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='v4l2_ctrl_ptr' size-in-bits='64' visibility='default' filepath='include/media/v4l2-ctrls.h' line='62' column='1' id='3f78e6a9'>
+        <data-member access='public'>
+          <var-decl name='p_s32' type-id='9f2cce4b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_s64' type-id='842ac8d6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u8' type-id='8bff8096' visibility='default' filepath='include/media/v4l2-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u16' type-id='26d4d46f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_u32' type-id='f9409001' visibility='default' filepath='include/media/v4l2-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_char' type-id='26a90f95' visibility='default' filepath='include/media/v4l2-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_mpeg2_slice_params' type-id='48bc1523' visibility='default' filepath='include/media/v4l2-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_mpeg2_quantization' type-id='fa7d167b' visibility='default' filepath='include/media/v4l2-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_fwht_params' type-id='efba361c' visibility='default' filepath='include/media/v4l2-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_sps' type-id='b9348c47' visibility='default' filepath='include/media/v4l2-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_pps' type-id='91e3ab68' visibility='default' filepath='include/media/v4l2-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_scaling_matrix' type-id='f7e7b3e8' visibility='default' filepath='include/media/v4l2-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_slice_params' type-id='0541bcde' visibility='default' filepath='include/media/v4l2-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_h264_decode_params' type-id='47cb2abc' visibility='default' filepath='include/media/v4l2-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_vp8_frame_header' type-id='e26652e6' visibility='default' filepath='include/media/v4l2-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_sps' type-id='112f0343' visibility='default' filepath='include/media/v4l2-ctrls.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_pps' type-id='f9de3b94' visibility='default' filepath='include/media/v4l2-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_hevc_slice_params' type-id='2948bd22' visibility='default' filepath='include/media/v4l2-ctrls.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_area' type-id='26385187' visibility='default' filepath='include/media/v4l2-ctrls.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p_const' type-id='eaa32e2f' visibility='default' filepath='include/media/v4l2-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='86' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_ctrl_h264_decode_params' size-in-bits='3200' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='201' column='1' id='4aef34b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dpb' type-id='eefef0c1' visibility='default' filepath='include/media/h264-ctrls.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='num_slices' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3088'>
+          <var-decl name='nal_ref_idc' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_h264_dpb_entry' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/media/h264-ctrls.h' line='189' column='1' id='7a583acc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reference_ts' type-id='d3130597' visibility='default' filepath='include/media/h264-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frame_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_num' type-id='d315442e' visibility='default' filepath='include/media/h264-ctrls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='top_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bottom_field_order_cnt' type-id='3158a266' visibility='default' filepath='include/media/h264-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/h264-ctrls.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_vp8_frame_header' size-in-bits='9856' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='81' column='1' id='ef5bccc0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='segment_header' type-id='58370a8e' visibility='default' filepath='include/media/vp8-ctrls.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lf_header' type-id='e4362873' visibility='default' filepath='include/media/vp8-ctrls.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quant_header' type-id='b6008b50' visibility='default' filepath='include/media/vp8-ctrls.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='entropy_header' type-id='2b2e1d12' visibility='default' filepath='include/media/vp8-ctrls.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='coder_state' type-id='e65ce076' visibility='default' filepath='include/media/vp8-ctrls.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9184'>
+          <var-decl name='width' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9200'>
+          <var-decl name='height' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='horizontal_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9224'>
+          <var-decl name='vertical_scale' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9232'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9240'>
+          <var-decl name='prob_skip_false' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9248'>
+          <var-decl name='prob_intra' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9256'>
+          <var-decl name='prob_last' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9264'>
+          <var-decl name='prob_gf' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9272'>
+          <var-decl name='num_dct_parts' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='first_part_size' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9312'>
+          <var-decl name='first_part_header_bits' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='dct_part_sizes' type-id='7f84eb57' visibility='default' filepath='include/media/vp8-ctrls.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='last_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='golden_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='alt_frame_ts' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/vp8-ctrls.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_segment_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='26' column='1' id='58370a8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lf_update' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='segment_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_loopfilter_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='37' column='1' id='e4362873'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref_frm_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mb_mode_delta' type-id='87ce7f1e' visibility='default' filepath='include/media/vp8-ctrls.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sharpness_level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/media/vp8-ctrls.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_quantization_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='46' column='1' id='b6008b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='y_ac_qi' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='y_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y2_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='y2_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uv_dc_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='uv_ac_delta' type-id='8af57d41' visibility='default' filepath='include/media/vp8-ctrls.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/media/vp8-ctrls.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_header' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='56' column='1' id='2b2e1d12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coeff_probs' type-id='96a07b89' visibility='default' filepath='include/media/vp8-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='y_mode_probs' type-id='c213d3d4' visibility='default' filepath='include/media/vp8-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='uv_mode_probs' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8504'>
+          <var-decl name='mv_probs' type-id='fa0a1f4c' visibility='default' filepath='include/media/vp8-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8808'>
+          <var-decl name='padding' type-id='c216126b' visibility='default' filepath='include/media/vp8-ctrls.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_vp8_entropy_coder_state' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/media/vp8-ctrls.h' line='64' column='1' id='e65ce076'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='range' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='value' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bit_count' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/vp8-ctrls.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_sps' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='55' column='1' id='d36a5b23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pic_width_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pic_height_in_luma_samples' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bit_depth_luma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bit_depth_chroma_minus8' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='log2_max_pic_order_cnt_lsb_minus4' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='sps_max_dec_pic_buffering_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sps_max_num_reorder_pics' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='sps_max_latency_increase_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='log2_min_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='log2_diff_max_min_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='log2_min_luma_transform_block_size_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='log2_diff_max_min_luma_transform_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_transform_hierarchy_depth_inter' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='max_transform_hierarchy_depth_intra' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_sample_bit_depth_luma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='pcm_sample_bit_depth_chroma_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='log2_min_pcm_luma_coding_block_size_minus3' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='log2_diff_max_min_pcm_luma_coding_block_size' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='num_short_term_ref_pic_sets' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='num_long_term_ref_pics_sps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='chroma_format_idc' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_pps' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='104' column='1' id='7458c17e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_extra_slice_header_bits' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='init_qp_minus26' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='diff_cu_qp_delta_depth' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pps_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pps_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='num_tile_columns_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='num_tile_rows_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='column_width_minus1' type-id='26fb03b8' visibility='default' filepath='include/media/hevc-ctrls.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='row_height_minus1' type-id='eaf62816' visibility='default' filepath='include/media/hevc-ctrls.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='pps_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='pps_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='log2_parallel_merge_level_minus2' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='padding' type-id='c213d3d4' visibility='default' filepath='include/media/hevc-ctrls.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='120' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_ctrl_hevc_slice_params' size-in-bits='4224' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='164' column='1' id='e565fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bit_size' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data_bit_offset' type-id='3f1a6b60' visibility='default' filepath='include/media/hevc-ctrls.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nal_unit_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='nuh_temporal_id_plus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='slice_type' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='colour_plane_id' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='slice_pic_order_cnt' type-id='d315442e' visibility='default' filepath='include/media/hevc-ctrls.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='num_ref_idx_l0_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='num_ref_idx_l1_active_minus1' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='collocated_ref_idx' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='five_minus_max_num_merge_cand' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='slice_qp_delta' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='slice_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='slice_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='slice_act_y_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='slice_act_cb_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='slice_act_cr_qp_offset' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='slice_beta_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='slice_tc_offset_div2' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='pic_struct' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='num_active_dpb_entries' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ref_idx_l0' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ref_idx_l1' type-id='9396cabb' visibility='default' filepath='include/media/hevc-ctrls.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='num_rps_poc_st_curr_before' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='num_rps_poc_st_curr_after' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='num_rps_poc_lt_curr' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='504'>
+          <var-decl name='padding' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dpb' type-id='41c4bc5d' visibility='default' filepath='include/media/hevc-ctrls.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='pred_weight_table' type-id='c1b5e872' visibility='default' filepath='include/media/hevc-ctrls.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='flags' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_dpb_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='129' column='1' id='a1f34f28'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='d3130597' visibility='default' filepath='include/media/hevc-ctrls.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rps' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='field_pic' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pic_order_cnt' type-id='810b4a17' visibility='default' filepath='include/media/hevc-ctrls.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='padding' type-id='0618bc0e' visibility='default' filepath='include/media/hevc-ctrls.h' line='134' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_hevc_pred_weight_table' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/media/hevc-ctrls.h' line='137' column='1' id='c1b5e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_luma_weight_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='luma_offset_l0' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='delta_chroma_weight_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='chroma_offset_l0' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delta_luma_weight_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='luma_offset_l1' type-id='2d85a215' visibility='default' filepath='include/media/hevc-ctrls.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='delta_chroma_weight_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chroma_offset_l1' type-id='1e28c56f' visibility='default' filepath='include/media/hevc-ctrls.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding' type-id='c60dc9f2' visibility='default' filepath='include/media/hevc-ctrls.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1584'>
+          <var-decl name='luma_log2_weight_denom' type-id='8f048e17' visibility='default' filepath='include/media/hevc-ctrls.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1592'>
+          <var-decl name='delta_chroma_log2_weight_denom' type-id='8af57d41' visibility='default' filepath='include/media/hevc-ctrls.h' line='151' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='v4l2_ctrl_type' filepath='include/uapi/linux/videodev2.h' line='1718' column='1' id='cf13dc99'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER' value='1'/>
+        <enumerator name='V4L2_CTRL_TYPE_BOOLEAN' value='2'/>
+        <enumerator name='V4L2_CTRL_TYPE_MENU' value='3'/>
+        <enumerator name='V4L2_CTRL_TYPE_BUTTON' value='4'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER64' value='5'/>
+        <enumerator name='V4L2_CTRL_TYPE_CTRL_CLASS' value='6'/>
+        <enumerator name='V4L2_CTRL_TYPE_STRING' value='7'/>
+        <enumerator name='V4L2_CTRL_TYPE_BITMASK' value='8'/>
+        <enumerator name='V4L2_CTRL_TYPE_INTEGER_MENU' value='9'/>
+        <enumerator name='V4L2_CTRL_COMPOUND_TYPES' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U8' value='256'/>
+        <enumerator name='V4L2_CTRL_TYPE_U16' value='257'/>
+        <enumerator name='V4L2_CTRL_TYPE_U32' value='258'/>
+        <enumerator name='V4L2_CTRL_TYPE_AREA' value='262'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='264' column='1' id='b91b9370'>
+        <data-member access='public'>
+          <var-decl name='step' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='menu_skip_mask' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-ctrls.h' line='266' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='268' column='1' id='87415f3a'>
+        <data-member access='public'>
+          <var-decl name='qmenu' type-id='13956559' visibility='default' filepath='include/media/v4l2-ctrls.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='qmenu_int' type-id='43ae54cf' visibility='default' filepath='include/media/v4l2-ctrls.h' line='270' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/media/v4l2-ctrls.h' line='275' column='1' id='b0ee3ba9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='a7832498' visibility='default' filepath='include/media/v4l2-ctrls.h' line='276' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='v4l2_ctrl_notify_fnc' type-id='af2775f4' filepath='include/media/v4l2-ctrls.h' line='144' column='1' id='7ec3cb1e'/>
+      <class-decl name='media_request_object' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='269' column='1' id='a5b7e4fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4228340f' visibility='default' filepath='include/media/media-request.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/media/media-request.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req' type-id='ac429605' visibility='default' filepath='include/media/media-request.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/media-request.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/media/media-request.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='completed' type-id='b50a4934' visibility='default' filepath='include/media/media-request.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_request_object_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/media/media-request.h' line='247' column='1' id='d2613fd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare' type-id='226f205f' visibility='default' filepath='include/media/media-request.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unprepare' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='afb80c18' visibility='default' filepath='include/media/media-request.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d2613fd6' const='yes' id='904f813f'/>
+      <pointer-type-def type-id='904f813f' size-in-bits='64' id='4228340f'/>
+      <pointer-type-def type-id='d238557f' size-in-bits='64' id='43ae54cf'/>
+      <qualified-type-def type-id='dbc7d793' const='yes' id='01863b98'/>
+      <pointer-type-def type-id='01863b98' size-in-bits='64' id='184ff936'/>
+      <qualified-type-def type-id='205c2e40' const='yes' id='0645931b'/>
+      <pointer-type-def type-id='0645931b' size-in-bits='64' id='1086b623'/>
+      <qualified-type-def type-id='b154eaef' const='yes' id='d26ed346'/>
+      <pointer-type-def type-id='d26ed346' size-in-bits='64' id='b076d304'/>
+      <pointer-type-def type-id='38cb23df' size-in-bits='64' id='f089c08b'/>
+      <pointer-type-def type-id='d56a4c4b' size-in-bits='64' id='226f205f'/>
+      <pointer-type-def type-id='5651631f' size-in-bits='64' id='4e4de503'/>
+      <pointer-type-def type-id='a5b7e4fd' size-in-bits='64' id='347d8ccd'/>
+      <pointer-type-def type-id='9b7c55ef' size-in-bits='64' id='842ac8d6'/>
+      <pointer-type-def type-id='596e4a77' size-in-bits='64' id='f456402b'/>
+      <pointer-type-def type-id='dbc7d793' size-in-bits='64' id='4b8b2cf3'/>
+      <pointer-type-def type-id='4b8b2cf3' size-in-bits='64' id='c517999b'/>
+      <pointer-type-def type-id='fcc0eea6' size-in-bits='64' id='efba361c'/>
+      <pointer-type-def type-id='4aef34b6' size-in-bits='64' id='47cb2abc'/>
+      <pointer-type-def type-id='ca2e9cda' size-in-bits='64' id='91e3ab68'/>
+      <pointer-type-def type-id='3a58d3ba' size-in-bits='64' id='f7e7b3e8'/>
+      <pointer-type-def type-id='a44a15b8' size-in-bits='64' id='0541bcde'/>
+      <pointer-type-def type-id='26761b9f' size-in-bits='64' id='b9348c47'/>
+      <pointer-type-def type-id='8a6e72bc' size-in-bits='64' id='7308495a'/>
+      <pointer-type-def type-id='7458c17e' size-in-bits='64' id='f9de3b94'/>
+      <pointer-type-def type-id='e565fd94' size-in-bits='64' id='2948bd22'/>
+      <pointer-type-def type-id='d36a5b23' size-in-bits='64' id='112f0343'/>
+      <pointer-type-def type-id='2633295b' size-in-bits='64' id='fa7d167b'/>
+      <pointer-type-def type-id='276d5663' size-in-bits='64' id='48bc1523'/>
+      <pointer-type-def type-id='c19e9dd9' size-in-bits='64' id='9f3a0131'/>
+      <pointer-type-def type-id='9f3a0131' size-in-bits='64' id='c34fbd81'/>
+      <pointer-type-def type-id='ef5bccc0' size-in-bits='64' id='e26652e6'/>
+      <pointer-type-def type-id='fee334bf' size-in-bits='64' id='c71b901b'/>
+      <pointer-type-def type-id='dd703408' size-in-bits='64' id='95625cb2'/>
+      <pointer-type-def type-id='38e7219e' size-in-bits='64' id='afb80c18'/>
+      <pointer-type-def type-id='d59331c2' size-in-bits='64' id='af2775f4'/>
+      <function-decl name='v4l2_device_put' mangled-name='v4l2_device_put' filepath='drivers/media/v4l2-core/v4l2-device.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_put'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_unregister_subdev' mangled-name='v4l2_device_unregister_subdev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_unregister_subdev'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-device.c' line='260' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_device_unregister' mangled-name='v4l2_device_unregister' filepath='drivers/media/v4l2-core/v4l2-device.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_unregister'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='88' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_device_register_subdev_nodes' mangled-name='v4l2_device_register_subdev_nodes' filepath='drivers/media/v4l2-core/v4l2-device.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register_subdev_nodes'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='192' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_register_subdev' mangled-name='v4l2_device_register_subdev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='111' column='1'/>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-device.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_register' mangled-name='v4l2_device_register' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1'/>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='17' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_device_disconnect' mangled-name='v4l2_device_disconnect' filepath='drivers/media/v4l2-core/v4l2-device.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_device_disconnect'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-device.c' line='76' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='38cb23df'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d56a4c4b'>
+        <parameter type-id='347d8ccd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5651631f'>
+        <parameter type-id='4b8b2cf3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='596e4a77'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fee334bf'>
+        <parameter type-id='184ff936'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd703408'>
+        <parameter type-id='184ff936'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='3f78e6a9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38e7219e'>
+        <parameter type-id='347d8ccd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d59331c2'>
+        <parameter type-id='4b8b2cf3'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-event.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9ac9cd61' size-in-bits='infinite' id='a892e311'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='v4l2_event' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2331' column='1' id='967c1c06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='454ee2bf' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pending' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timestamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='reserved' type-id='7f84eb57' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2345' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2333' column='1' id='454ee2bf'>
+        <data-member access='public'>
+          <var-decl name='vsync' type-id='cbe6daf0' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2334' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ctrl' type-id='ecd6d55a' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2335' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='frame_sync' type-id='101c7fc2' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2336' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='src_change' type-id='af41d400' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2337' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='motion_det' type-id='f95c1b03' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2338' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='73b95420' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2339' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_event_vsync' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2282' column='1' id='cbe6daf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='field' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_ctrl' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2292' column='1' id='ecd6d55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='de5442d3' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='minimum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maximum' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='step' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='default_value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2303' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2295' column='1' id='de5442d3'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2296' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value64' type-id='49659421' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2297' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='v4l2_event_frame_sync' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2306' column='1' id='101c7fc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2307' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_src_change' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2312' column='1' id='af41d400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='changes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2313' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_event_motion_det' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2325' column='1' id='f95c1b03'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_sequence' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='region_mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/videodev2.h' line='2328' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subscribed_event_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='46' column='1' id='a81e67e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='add' type-id='5c4b80ab' visibility='default' filepath='include/media/v4l2-event.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='del' type-id='d9659030' visibility='default' filepath='include/media/v4l2-event.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replace' type-id='bdf745d1' visibility='default' filepath='include/media/v4l2-event.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='merge' type-id='6780605f' visibility='default' filepath='include/media/v4l2-event.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_subscribed_event' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='70' column='1' id='0c33dc69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/media/v4l2-event.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fh' type-id='b7db9582' visibility='default' filepath='include/media/v4l2-event.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='d66d2cad' visibility='default' filepath='include/media/v4l2-event.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='elems' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='in_use' type-id='f0981eeb' visibility='default' filepath='include/media/v4l2-event.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='events' type-id='a892e311' visibility='default' filepath='include/media/v4l2-event.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='v4l2_kevent' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/media/v4l2-event.h' line='31' column='1' id='9ac9cd61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/media/v4l2-event.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sev' type-id='6ec0fd31' visibility='default' filepath='include/media/v4l2-event.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event' type-id='967c1c06' visibility='default' filepath='include/media/v4l2-event.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ts' type-id='91ce1af9' visibility='default' filepath='include/media/v4l2-event.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='967c1c06' const='yes' id='cd1fc343'/>
+      <pointer-type-def type-id='cd1fc343' size-in-bits='64' id='52009e4b'/>
+      <qualified-type-def type-id='a81e67e2' const='yes' id='de640095'/>
+      <pointer-type-def type-id='de640095' size-in-bits='64' id='d66d2cad'/>
+      <pointer-type-def type-id='782095e7' size-in-bits='64' id='5c4b80ab'/>
+      <pointer-type-def type-id='967c1c06' size-in-bits='64' id='a5c94ccc'/>
+      <pointer-type-def type-id='0c33dc69' size-in-bits='64' id='6ec0fd31'/>
+      <pointer-type-def type-id='2c1be8c3' size-in-bits='64' id='6780605f'/>
+      <pointer-type-def type-id='b95f4e75' size-in-bits='64' id='bdf745d1'/>
+      <pointer-type-def type-id='26c7d506' size-in-bits='64' id='d9659030'/>
+      <function-decl name='v4l2_event_dequeue' mangled-name='v4l2_event_dequeue' filepath='drivers/media/v4l2-core/v4l2-event.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_dequeue'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='56' column='1'/>
+        <parameter type-id='a5c94ccc' name='event' filepath='drivers/media/v4l2-core/v4l2-event.c' line='56' column='1'/>
+        <parameter type-id='95e97e5e' name='nonblocking' filepath='drivers/media/v4l2-core/v4l2-event.c' line='57' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_unsubscribe' mangled-name='v4l2_event_unsubscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_unsubscribe'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='280' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_subscribe' mangled-name='v4l2_event_subscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_subscribe'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='203' column='1'/>
+        <parameter type-id='d8c85275' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='204' column='1'/>
+        <parameter type-id='f0981eeb' name='elems' filepath='drivers/media/v4l2-core/v4l2-event.c' line='204' column='1'/>
+        <parameter type-id='d66d2cad' name='ops' filepath='drivers/media/v4l2-core/v4l2-event.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_subdev_unsubscribe' mangled-name='v4l2_event_subdev_unsubscribe' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_subdev_unsubscribe'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1'/>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='312' column='1'/>
+        <parameter type-id='8edac644' name='sub' filepath='drivers/media/v4l2-core/v4l2-event.c' line='313' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_event_queue_fh' mangled-name='v4l2_event_queue_fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_queue_fh'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1'/>
+        <parameter type-id='52009e4b' name='ev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_event_queue' mangled-name='v4l2_event_queue' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_queue'>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1'/>
+        <parameter type-id='52009e4b' name='ev' filepath='drivers/media/v4l2-core/v4l2-event.c' line='150' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_event_pending' mangled-name='v4l2_event_pending' filepath='drivers/media/v4l2-core/v4l2-event.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_event_pending'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-event.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='782095e7'>
+        <parameter type-id='6ec0fd31'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c1be8c3'>
+        <parameter type-id='52009e4b'/>
+        <parameter type-id='a5c94ccc'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b95f4e75'>
+        <parameter type-id='a5c94ccc'/>
+        <parameter type-id='52009e4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26c7d506'>
+        <parameter type-id='6ec0fd31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-fh.c' language='LANG_C89'>
+      <function-decl name='v4l2_fh_init' mangled-name='v4l2_fh_init' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_init'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1'/>
+        <parameter type-id='798c29b7' name='vdev' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='21' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_release' mangled-name='v4l2_fh_release' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_release'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_open' mangled-name='v4l2_fh_open' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_open'>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='55' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_exit' mangled-name='v4l2_fh_exit' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_exit'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='80' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_del' mangled-name='v4l2_fh_del' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_del'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='69' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_fh_add' mangled-name='v4l2_fh_add' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_fh_add'>
+        <parameter type-id='b7db9582' name='fh' filepath='drivers/media/v4l2-core/v4l2-fh.c' line='44' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-i2c.c' language='LANG_C89'>
+      <function-decl name='v4l2_i2c_subdev_init' mangled-name='v4l2_i2c_subdev_init' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_i2c_subdev_init'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1'/>
+        <parameter type-id='3e31633b' name='client' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='45' column='1'/>
+        <parameter type-id='040770fb' name='ops' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='46' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='v4l2_i2c_new_subdev' mangled-name='v4l2_i2c_new_subdev' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_i2c_new_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='119' column='1'/>
+        <parameter type-id='b9af02c3' name='adapter' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='120' column='1'/>
+        <parameter type-id='80f4b756' name='client_type' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='121' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='122' column='1'/>
+        <parameter type-id='31347b7a' name='probe_addrs' filepath='drivers/media/v4l2-core/v4l2-i2c.c' line='123' column='1'/>
+        <return type-id='f5438ac7'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-ioctl.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='80f4b756' size-in-bits='960' id='35f5fc88'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <var-decl name='v4l2_type_names' type-id='35f5fc88' mangled-name='v4l2_type_names' visibility='default' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='178' column='1' elf-symbol-id='v4l2_type_names'/>
+      <function-decl name='video_ioctl2' mangled-name='video_ioctl2' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='video_ioctl2'>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3160' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3161' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/media/v4l2-core/v4l2-ioctl.c' line='3161' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-spi.c' language='LANG_C89'>
+      <class-decl name='spi_board_info' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='1335' column='1' id='12ab03ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/spi/spi.h' line='1344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='properties' type-id='9e1d140c' visibility='default' filepath='include/linux/spi/spi.h' line='1346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='controller_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='1347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='1348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='1351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bus_num' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='1360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='chip_select' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='mode' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='1366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='1368' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='12ab03ef' size-in-bits='64' id='71dcfea7'/>
+      <function-decl name='v4l2_spi_new_subdev' mangled-name='v4l2_spi_new_subdev' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_spi_new_subdev'>
+        <parameter type-id='ddfb71fa' name='v4l2_dev' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='36' column='1'/>
+        <parameter type-id='f22e4524' name='master' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='37' column='1'/>
+        <parameter type-id='71dcfea7' name='info' filepath='drivers/media/v4l2-core/v4l2-spi.c' line='38' column='1'/>
+        <return type-id='f5438ac7'/>
+      </function-decl>
+      <pointer-type-def type-id='db1b9d9e' size-in-bits='64' id='f22e4524'/>
+      <class-decl name='spi_controller' size-in-bits='13632' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='430' column='1' id='db1b9d9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='bus_num' type-id='9b7e9486' visibility='default' filepath='include/linux/spi/spi.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7632'>
+          <var-decl name='num_chipselect' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='dma_alignment' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode_bits' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='bits_per_word_mask' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='min_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7824'>
+          <var-decl name='devm_allocated' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7832'>
+          <var-decl name='slave' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='max_transfer_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='max_message_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='bus_lock_spinlock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='bus_lock_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='bus_lock_flag' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='setup' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='set_cs_timing' type-id='fd508c3f' visibility='default' filepath='include/linux/spi/spi.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='transfer' type-id='08bd785c' visibility='default' filepath='include/linux/spi/spi.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='cleanup' type-id='c965bc43' visibility='default' filepath='include/linux/spi/spi.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='can_dma' type-id='b7f92ac9' visibility='default' filepath='include/linux/spi/spi.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='queued' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='kworker' type-id='62968721' visibility='default' filepath='include/linux/spi/spi.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='kworker_task' type-id='f23e2572' visibility='default' filepath='include/linux/spi/spi.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='pump_messages' type-id='ac165296' visibility='default' filepath='include/linux/spi/spi.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='cur_msg' type-id='bb7889ed' visibility='default' filepath='include/linux/spi/spi.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='idling' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10120'>
+          <var-decl name='busy' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10128'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10136'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10144'>
+          <var-decl name='auto_runtime_pm' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10152'>
+          <var-decl name='cur_msg_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10160'>
+          <var-decl name='cur_msg_mapped' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='xfer_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/spi/spi.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='max_dma_len' type-id='b59d7dce' visibility='default' filepath='include/linux/spi/spi.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='prepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='transfer_one_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='unprepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='prepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='unprepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='slave_abort' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='set_cs' type-id='54a1bec6' visibility='default' filepath='include/linux/spi/spi.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='transfer_one' type-id='6495fd5b' visibility='default' filepath='include/linux/spi/spi.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='handle_err' type-id='72fa5619' visibility='default' filepath='include/linux/spi/spi.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='mem_ops' type-id='e93ac78c' visibility='default' filepath='include/linux/spi/spi.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cs_gpios' type-id='7292109c' visibility='default' filepath='include/linux/spi/spi.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cs_gpiods' type-id='35c9579e' visibility='default' filepath='include/linux/spi/spi.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='use_gpio_descriptors' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='dma_tx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='dma_rx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='dummy_rx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='dummy_tx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='fw_translate_cs' type-id='aaa6c630' visibility='default' filepath='include/linux/spi/spi.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_statistics' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='56' column='1' id='bf41d149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='messages' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transfers' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='errors' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timedout' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='spi_sync' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='spi_sync_immediate' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='spi_async' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bytes' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bytes_rx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bytes_tx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='transfer_bytes_histo' type-id='96b80745' visibility='default' filepath='include/linux/spi/spi.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='transfers_split_maxsize' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='68e801ee' size-in-bits='64' id='e93ac78c'/>
+      <pointer-type-def type-id='26760480' size-in-bits='64' id='35c9579e'/>
+      <pointer-type-def type-id='d96066b0' size-in-bits='64' id='3de177aa'/>
+      <pointer-type-def type-id='006d72ff' size-in-bits='64' id='6495fd5b'/>
+      <pointer-type-def type-id='4afdce44' size-in-bits='64' id='424a6df6'/>
+      <pointer-type-def type-id='01e1f26e' size-in-bits='64' id='aaa6c630'/>
+      <pointer-type-def type-id='fb73ecde' size-in-bits='64' id='4f312040'/>
+      <pointer-type-def type-id='d06fe862' size-in-bits='64' id='08bd785c'/>
+      <pointer-type-def type-id='4dd90c3d' size-in-bits='64' id='bb7889ed'/>
+      <pointer-type-def type-id='579042ad' size-in-bits='64' id='b7f92ac9'/>
+      <pointer-type-def type-id='50f7c736' size-in-bits='64' id='fc096b90'/>
+      <pointer-type-def type-id='0c71d025' size-in-bits='64' id='72fa5619'/>
+      <pointer-type-def type-id='3243417f' size-in-bits='64' id='c965bc43'/>
+      <pointer-type-def type-id='9ea75344' size-in-bits='64' id='54a1bec6'/>
+      <pointer-type-def type-id='c52ef7cb' size-in-bits='64' id='fd508c3f'/>
+      <class-decl name='spi_message' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='911' column='1' id='4dd90c3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transfers' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='e90f4666' visibility='default' filepath='include/linux/spi/spi.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='complete' type-id='b7f9d8e6' visibility='default' filepath='include/linux/spi/spi.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='frame_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='actual_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='946' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='40c992e3' const='yes' id='68e801ee'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1088' id='96b80745'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='spi_controller_mem_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='252' column='1' id='40c992e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adjust_op_size' type-id='c1205b1f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supports_op' type-id='3d444e9a' visibility='default' filepath='include/linux/spi/spi-mem.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exec_op' type-id='80f1f854' visibility='default' filepath='include/linux/spi/spi-mem.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='149deb03' visibility='default' filepath='include/linux/spi/spi-mem.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dirmap_create' type-id='dfa456d5' visibility='default' filepath='include/linux/spi/spi-mem.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dirmap_destroy' type-id='12e56aa0' visibility='default' filepath='include/linux/spi/spi-mem.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dirmap_read' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dirmap_write' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='263' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='72c0e160' size-in-bits='64' id='e90f4666'/>
+      <class-decl name='spi_device' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='141' column='1' id='72c0e160'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='controller' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='master' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='chip_select' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7656'>
+          <var-decl name='bits_per_word' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7664'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='controller_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='controller_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/spi/spi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='driver_override' type-id='80f4b756' visibility='default' filepath='include/linux/spi/spi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='cs_gpio' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='cs_gpiod' type-id='26760480' visibility='default' filepath='include/linux/spi/spi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='word_delay_usecs' type-id='b96825af' visibility='default' filepath='include/linux/spi/spi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c210187' size-in-bits='64' id='149deb03'/>
+      <pointer-type-def type-id='96fe8392' size-in-bits='64' id='80f1f854'/>
+      <pointer-type-def type-id='e2270bc3' size-in-bits='64' id='c1205b1f'/>
+      <pointer-type-def type-id='78c92961' size-in-bits='64' id='dfa456d5'/>
+      <pointer-type-def type-id='7983eff8' size-in-bits='64' id='3d444e9a'/>
+      <pointer-type-def type-id='5460fbd3' size-in-bits='64' id='79b4ee7f'/>
+      <pointer-type-def type-id='262d57ae' size-in-bits='64' id='12e56aa0'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/media/v4l2-core/v4l2-subdev.c' language='LANG_C89'>
+      <var-decl name='v4l2_subdev_call_wrappers' type-id='3a7813d3' mangled-name='v4l2_subdev_call_wrappers' visibility='default' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='321' column='1' elf-symbol-id='v4l2_subdev_call_wrappers'/>
+      <function-decl name='v4l2_subdev_init' mangled-name='v4l2_subdev_init' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='v4l2_subdev_init'>
+        <parameter type-id='f5438ac7' name='sd' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1'/>
+        <parameter type-id='040770fb' name='ops' filepath='drivers/media/v4l2-core/v4l2-subdev.c' line='777' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mfd/mfd-core.c' language='LANG_C89'>
+      <class-decl name='mfd_cell_acpi_match' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='19' column='1' id='7fe6c639'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pnpid' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='adr' type-id='340461fe' visibility='default' filepath='include/linux/mfd/core.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3a47d82b' const='yes' id='340461fe'/>
+      <qualified-type-def type-id='54cc740b' const='yes' id='dbc3320a'/>
+      <pointer-type-def type-id='dbc3320a' size-in-bits='64' id='1447e860'/>
+      <qualified-type-def type-id='7fe6c639' const='yes' id='7a7796b6'/>
+      <pointer-type-def type-id='7a7796b6' size-in-bits='64' id='66421794'/>
+      <function-decl name='mfd_add_devices' mangled-name='mfd_add_devices' filepath='drivers/mfd/mfd-core.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mfd_add_devices'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/mfd/mfd-core.c' line='292' column='1'/>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/mfd/mfd-core.c' line='292' column='1'/>
+        <parameter type-id='1447e860' name='cells' filepath='drivers/mfd/mfd-core.c' line='293' column='1'/>
+        <parameter type-id='95e97e5e' name='n_devs' filepath='drivers/mfd/mfd-core.c' line='293' column='1'/>
+        <parameter type-id='c9d64c0d' name='mem_base' filepath='drivers/mfd/mfd-core.c' line='294' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/mfd/mfd-core.c' line='295' column='1'/>
+        <parameter type-id='7544e824' name='domain' filepath='drivers/mfd/mfd-core.c' line='295' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mfd_remove_devices' mangled-name='mfd_remove_devices' filepath='drivers/mfd/mfd-core.c' line='348' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mfd_remove_devices'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/mfd/mfd-core.c' line='348' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_mfd_add_devices' mangled-name='devm_mfd_add_devices' filepath='drivers/mfd/mfd-core.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_mfd_add_devices'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/mfd/mfd-core.c' line='369' column='1'/>
+        <parameter type-id='95e97e5e' name='id' filepath='drivers/mfd/mfd-core.c' line='369' column='1'/>
+        <parameter type-id='1447e860' name='cells' filepath='drivers/mfd/mfd-core.c' line='370' column='1'/>
+        <parameter type-id='95e97e5e' name='n_devs' filepath='drivers/mfd/mfd-core.c' line='370' column='1'/>
+        <parameter type-id='c9d64c0d' name='mem_base' filepath='drivers/mfd/mfd-core.c' line='371' column='1'/>
+        <parameter type-id='95e97e5e' name='irq_base' filepath='drivers/mfd/mfd-core.c' line='372' column='1'/>
+        <parameter type-id='7544e824' name='domain' filepath='drivers/mfd/mfd-core.c' line='372' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mfd/syscon.c' language='LANG_C89'>
+      <function-decl name='syscon_node_to_regmap' mangled-name='syscon_node_to_regmap' filepath='drivers/mfd/syscon.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_node_to_regmap'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mfd/syscon.c' line='182' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='syscon_regmap_lookup_by_phandle_args' mangled-name='syscon_regmap_lookup_by_phandle_args' filepath='drivers/mfd/syscon.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_regmap_lookup_by_phandle_args'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mfd/syscon.c' line='228' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/mfd/syscon.c' line='229' column='1'/>
+        <parameter type-id='95e97e5e' name='arg_count' filepath='drivers/mfd/syscon.c' line='230' column='1'/>
+        <parameter type-id='807869d3' name='out_args' filepath='drivers/mfd/syscon.c' line='231' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+      <function-decl name='syscon_regmap_lookup_by_phandle' mangled-name='syscon_regmap_lookup_by_phandle' filepath='drivers/mfd/syscon.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='syscon_regmap_lookup_by_phandle'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mfd/syscon.c' line='207' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/mfd/syscon.c' line='208' column='1'/>
+        <return type-id='29af9a71'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/bus.c' language='LANG_C89'>
+      <class-decl name='mmc_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='drivers/mmc/core/bus.h' line='32' column='1' id='8956d73b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='drivers/mmc/core/bus.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='27bdd081' visibility='default' filepath='drivers/mmc/core/bus.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='81b1af2a' visibility='default' filepath='drivers/mmc/core/bus.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='shutdown' type-id='81b1af2a' visibility='default' filepath='drivers/mmc/core/bus.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d1bbb6dd' size-in-bits='64' id='27bdd081'/>
+      <pointer-type-def type-id='8956d73b' size-in-bits='64' id='a46f3b5b'/>
+      <pointer-type-def type-id='98654b30' size-in-bits='64' id='81b1af2a'/>
+      <function-decl name='mmc_unregister_driver' mangled-name='mmc_unregister_driver' filepath='drivers/mmc/core/bus.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_unregister_driver'>
+        <parameter type-id='a46f3b5b' name='drv' filepath='drivers/mmc/core/bus.c' line='239' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_register_driver' mangled-name='mmc_register_driver' filepath='drivers/mmc/core/bus.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_register_driver'>
+        <parameter type-id='a46f3b5b' name='drv' filepath='drivers/mmc/core/bus.c' line='227' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d1bbb6dd'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98654b30'>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='b0f558fb' size-in-bits='64' id='13d38dcb'/>
+      <class-decl name='mmc_card' size-in-bits='15168' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='247' column='1' id='b0f558fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/card.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/card.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ocr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/card.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='rca' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='quirk_max_rate' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='reenable_cmdq' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='erase_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='pref_erase' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='eg_boundary' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='erase_arg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='erased_byte' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='raw_cid' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='raw_csd' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='raw_scr' type-id='1872161b' visibility='default' filepath='include/linux/mmc/card.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='raw_ssr' type-id='02fdec64' visibility='default' filepath='include/linux/mmc/card.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='cid' type-id='5a0fc813' visibility='default' filepath='include/linux/mmc/card.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='csd' type-id='5e477b59' visibility='default' filepath='include/linux/mmc/card.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='ext_csd' type-id='2561085d' visibility='default' filepath='include/linux/mmc/card.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scr' type-id='5e938df5' visibility='default' filepath='include/linux/mmc/card.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='ssr' type-id='5eba9d65' visibility='default' filepath='include/linux/mmc/card.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='sw_caps' type-id='2a479001' visibility='default' filepath='include/linux/mmc/card.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='sdio_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='sdio_funcs_probed' type-id='49178f86' visibility='default' filepath='include/linux/mmc/card.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cccr' type-id='7f07e508' visibility='default' filepath='include/linux/mmc/card.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11232'>
+          <var-decl name='cis' type-id='4b644cf4' visibility='default' filepath='include/linux/mmc/card.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='sdio_func' type-id='4abea81e' visibility='default' filepath='include/linux/mmc/card.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sdio_single_irq' type-id='c1880945' visibility='default' filepath='include/linux/mmc/card.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/card.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/card.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='sd_bus_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12064'>
+          <var-decl name='mmc_avail_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='drive_strength' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/card.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='part' type-id='67d619b5' visibility='default' filepath='include/linux/mmc/card.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='nr_parts' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14944'>
+          <var-decl name='bouncesz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='include/linux/mmc/card.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cid' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='14' column='1' id='5a0fc813'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='manfid' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='prod_name' type-id='8e100159' visibility='default' filepath='include/linux/mmc/card.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='prv' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='serial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oemid' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='year' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='fwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='month' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_csd' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='26' column='1' id='5e477b59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='structure' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mmca_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cmdclass' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='taac_clks' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='taac_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='r2w_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='read_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capacity' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='read_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='write_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='write_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dsr_imp' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ext_csd' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='46' column='1' id='2561085d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rev' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='erase_group_def' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='rel_sectors' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rel_param' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='enhanced_rpmb_supported' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='part_config' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='cache_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rst_n_function' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_packed_writes' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_packed_reads' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='packed_event_en' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='part_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='generic_cmd6_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off_longtime' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='power_off_notification' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='hs200_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hc_erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hc_erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sec_trim_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sec_erase_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='trim_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='partition_setting_completed' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enhanced_area_offset' type-id='3a47d82b' visibility='default' filepath='include/linux/mmc/card.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enhanced_area_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cache_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hpi_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='hpi' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='hpi_cmd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bkops' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='man_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='auto_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='data_sector_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data_tag_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='boot_ro_lock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='boot_ro_lockable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ffu_capable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='cmdq_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='920'>
+          <var-decl name='cmdq_support' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='cmdq_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fwrev' type-id='d2f7b56a' visibility='default' filepath='include/linux/mmc/card.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='raw_exception_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='raw_partition_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='raw_rpmb_size_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1048'>
+          <var-decl name='raw_erased_mem_count' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='strobe_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='raw_ext_csd_structure' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='raw_card_type' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='raw_driver_strength' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='out_of_int_time' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='raw_pwr_cl_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='raw_pwr_cl_26_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1112'>
+          <var-decl name='raw_pwr_cl_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='raw_pwr_cl_26_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='raw_s_a_timeout' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='raw_hc_erase_gap_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='raw_erase_timeout_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='raw_hc_erase_grp_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='raw_sec_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='raw_sec_erase_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='raw_sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='raw_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='raw_pwr_cl_200_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='raw_pwr_cl_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='raw_pwr_cl_ddr_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='raw_pwr_cl_ddr_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1224'>
+          <var-decl name='raw_pwr_cl_ddr_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='raw_bkops_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1240'>
+          <var-decl name='raw_sectors' type-id='931565be' visibility='default' filepath='include/linux/mmc/card.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1272'>
+          <var-decl name='pre_eol_info' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_life_time_est_typ_a' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='device_life_time_est_typ_b' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='feature_support' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_scr' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='132' column='1' id='5e938df5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sda_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sda_spec3' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sda_spec4' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sda_specx' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bus_widths' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='cmds' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_ssr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='145' column='1' id='5eba9d65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='au' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_switch_caps' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='151' column='1' id='2a479001'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uhs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sd3_bus_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sd3_drv_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd3_curr_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cccr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='193' column='1' id='7f07e508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdio_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sd_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='multi_block' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='low_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wide_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='high_power' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='high_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='disable_cd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cis' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='204' column='1' id='4b644cf4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='blksize' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a7d74313' size-in-bits='64' id='dd575c43'/>
+      <array-type-def dimensions='1' type-id='cc256810' size-in-bits='2688' id='67d619b5'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='4073d265' size-in-bits='64' id='c1880945'/>
+      <array-type-def dimensions='1' type-id='c1880945' size-in-bits='448' id='4abea81e'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <pointer-type-def type-id='d81af048' size-in-bits='64' id='e5932b8e'/>
+      <class-decl name='mmc_host' size-in-bits='14848' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='282' column='1' id='a7d74313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/mmc/host.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class_dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/host.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='13d52ad5' visibility='default' filepath='include/linux/mmc/host.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='pwrseq' type-id='0d786921' visibility='default' filepath='include/linux/mmc/host.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='f_min' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='f_max' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='f_init' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='ocr_avail' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ocr_avail_sdio' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='ocr_avail_sd' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ocr_avail_mmc' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='max_current_330' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='max_current_300' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='max_current_180' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='caps2' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='fixed_drv_type' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8160'>
+          <var-decl name='pm_caps' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='max_seg_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='max_segs' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8240'>
+          <var-decl name='unused' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='max_req_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='max_blk_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='max_blk_count' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='max_busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmc/host.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='ios' type-id='3f80a1ba' visibility='default' filepath='include/linux/mmc/host.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_spi_crc' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='claimed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='bus_dead' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='can_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='doing_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='retune_now' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='retune_paused' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='use_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='retune_crc_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='can_dma_map_merge' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rescan_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rescan_entered' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='need_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hold_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='retune_period' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='retune_timer' type-id='abe41e67' visibility='default' filepath='include/linux/mmc/host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='trigger_card_event' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/host.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/linux/mmc/host.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='claimer' type-id='f1e196e0' visibility='default' filepath='include/linux/mmc/host.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='claim_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='default_ctx' type-id='783f5582' visibility='default' filepath='include/linux/mmc/host.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='detect' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='detect_change' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='slot' type-id='edfd3d7d' visibility='default' filepath='include/linux/mmc/host.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='bus_ops' type-id='5680a8c9' visibility='default' filepath='include/linux/mmc/host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='bus_refs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='sdio_irqs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='sdio_irq_thread' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='sdio_irq_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='sdio_irq_pending' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12320'>
+          <var-decl name='sdio_irq_thread_abort' type-id='49178f86' visibility='default' filepath='include/linux/mmc/host.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='pm_flags' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='led' type-id='db6d90a1' visibility='default' filepath='include/linux/mmc/host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='regulator_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='supply' type-id='39af3b22' visibility='default' filepath='include/linux/mmc/host.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/host.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='ongoing_mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/host.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='actual_clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12832'>
+          <var-decl name='slotno' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='dsr_req' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12896'>
+          <var-decl name='dsr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='cqe_ops' type-id='c3b36a8e' visibility='default' filepath='include/linux/mmc/host.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='cqe_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cqe_qdepth' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13088'>
+          <var-decl name='cqe_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13096'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='ksm' type-id='13fcfe64' visibility='default' filepath='include/linux/mmc/host.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14592'>
+          <var-decl name='hsq_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14720'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='include/linux/mmc/host.h' line='490' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_part' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='230' column='1' id='cc256810'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='part_cfg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mmc/card.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='force_ro' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='area_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_func' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='34' column='1' id='4073d265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='irq_handler' type-id='1d186b8b' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='class' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7664'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='max_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='cur_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='enable_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='tmpbuf' type-id='8bff8096' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_func_tuple' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='24' column='1' id='d81af048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='size' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='278' column='1' id='783f5582'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ios' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='21' column='1' id='3f80a1ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vdd' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power_delay_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bus_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='chip_select' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='power_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bus_width' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timing' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='signal_voltage' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='drv_type' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='enhanced_strobe' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_slot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='250' column='1' id='edfd3d7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cd_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cd_wake_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='273' column='1' id='39af3b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vqmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='04379599' size-in-bits='64' id='5680a8c9'/>
+      <pointer-type-def type-id='7a773bd0' size-in-bits='64' id='c3b36a8e'/>
+      <pointer-type-def type-id='d43d82dd' size-in-bits='64' id='13d52ad5'/>
+      <pointer-type-def type-id='783f5582' size-in-bits='64' id='f1e196e0'/>
+      <pointer-type-def type-id='bed67209' size-in-bits='64' id='0d786921'/>
+      <pointer-type-def type-id='8bb2c7be' size-in-bits='64' id='47f117d4'/>
+      <pointer-type-def type-id='72a9e98a' size-in-bits='64' id='1d186b8b'/>
+      <typedef-decl name='mmc_pm_flag_t' type-id='f0981eeb' filepath='include/linux/mmc/pm.h' line='22' column='1' id='208a5a8d'/>
+      <class-decl name='mmc_pwrseq' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='23' column='1' id='bed67209'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='0fbcba93' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwrseq_node' type-id='72f469ec' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_request' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='147' column='1' id='8bb2c7be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sbc' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='done' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='recovery_notifier' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='cap_cmd_during_tfr' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crypto_ctx' type-id='6a407553' visibility='default' filepath='include/linux/mmc/core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crypto_key_slot' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='424ad5b6' const='yes' id='04379599'/>
+      <qualified-type-def type-id='e726245b' const='yes' id='7a773bd0'/>
+      <qualified-type-def type-id='f2d6d1c0' const='yes' id='d43d82dd'/>
+      <typedef-decl name='sdio_irq_handler_t' type-id='81dd332a' filepath='include/linux/mmc/sdio_func.h' line='19' column='1' id='72a9e98a'/>
+      <class-decl name='mmc_bus_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/mmc/core/core.h' line='20' column='1' id='424ad5b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='remove' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pre_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='runtime_resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alive' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='hw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cache_enabled' type-id='9d11a2ef' visibility='default' filepath='drivers/mmc/core/core.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cqe_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='182' column='1' id='e726245b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cqe_enable' type-id='6847d33d' visibility='default' filepath='include/linux/mmc/host.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cqe_disable' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cqe_request' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cqe_post_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cqe_off' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cqe_wait_for_idle' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cqe_timeout' type-id='885a96c2' visibility='default' filepath='include/linux/mmc/host.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cqe_recovery_start' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cqe_recovery_finish' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_host_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='84' column='1' id='f2d6d1c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='post_req' type-id='d7f8a77a' visibility='default' filepath='include/linux/mmc/host.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='request' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_atomic' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_ios' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_ro' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_cd' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_sdio_irq' type-id='dacbc069' visibility='default' filepath='include/linux/mmc/host.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack_sdio_irq' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_card' type-id='287e3e50' visibility='default' filepath='include/linux/mmc/host.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_signal_voltage_switch' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='card_busy' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='execute_tuning' type-id='ebae9a6c' visibility='default' filepath='include/linux/mmc/host.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='prepare_hs400_tuning' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hs400_prepare_ddr' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hs400_downgrade' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hs400_complete' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hs400_enhanced_strobe' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='select_drive_strength' type-id='981b2780' visibility='default' filepath='include/linux/mmc/host.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_reset' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='card_event' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='multi_io_quirk' type-id='78470542' visibility='default' filepath='include/linux/mmc/host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='21c5156b' size-in-bits='64' id='6a407553'/>
+      <pointer-type-def type-id='c968032b' size-in-bits='64' id='0fbcba93'/>
+      <pointer-type-def type-id='c8e8a836' size-in-bits='64' id='6df3750c'/>
+      <pointer-type-def type-id='69e72089' size-in-bits='64' id='6de64ec1'/>
+      <pointer-type-def type-id='48dbb365' size-in-bits='64' id='41865b69'/>
+      <class-decl name='mmc_command' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='26' column='1' id='c8e8a836'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opcode' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='arg' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resp' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/core.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='retries' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sanitize_busy' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_data' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='117' column='1' id='69e72089'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout_clks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blksz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='blk_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bytes_xfered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sg_len' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/mmc/core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='host_cookie' type-id='a7832498' visibility='default' filepath='include/linux/mmc/core.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b545ce08' const='yes' id='21c5156b'/>
+      <qualified-type-def type-id='e67a5dc2' const='yes' id='c968032b'/>
+      <pointer-type-def type-id='72e932b0' size-in-bits='64' id='78470542'/>
+      <pointer-type-def type-id='9df0e286' size-in-bits='64' id='981b2780'/>
+      <pointer-type-def type-id='8d57fbd1' size-in-bits='64' id='e2d63f85'/>
+      <pointer-type-def type-id='355fab89' size-in-bits='64' id='6847d33d'/>
+      <pointer-type-def type-id='00a425f2' size-in-bits='64' id='13636c34'/>
+      <pointer-type-def type-id='c4f6276e' size-in-bits='64' id='83cb8e80'/>
+      <pointer-type-def type-id='aa7f03f2' size-in-bits='64' id='ebae9a6c'/>
+      <pointer-type-def type-id='77e739eb' size-in-bits='64' id='9d11a2ef'/>
+      <pointer-type-def type-id='6b983020' size-in-bits='64' id='885a96c2'/>
+      <pointer-type-def type-id='7d43ac00' size-in-bits='64' id='fa3ed3a2'/>
+      <pointer-type-def type-id='e3e30c0d' size-in-bits='64' id='dacbc069'/>
+      <pointer-type-def type-id='d72e913e' size-in-bits='64' id='287e3e50'/>
+      <pointer-type-def type-id='82718bfb' size-in-bits='64' id='589bddbf'/>
+      <pointer-type-def type-id='c3d2316f' size-in-bits='64' id='624a8813'/>
+      <pointer-type-def type-id='b7bb7c18' size-in-bits='64' id='d7f8a77a'/>
+      <class-decl name='mmc_pwrseq_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='16' column='1' id='e67a5dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='post_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_off' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/core.c' language='LANG_C89'>
+      <class-decl name='sdio_func' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='34' column='1' id='4073d265'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='irq_handler' type-id='1d186b8b' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='class' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7664'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='max_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='cur_blksize' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='enable_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='tmpbuf' type-id='8bff8096' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_func_tuple' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='24' column='1' id='d81af048'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='code' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='size' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='cc256810' size-in-bits='2688' id='67d619b5'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c1880945' size-in-bits='448' id='4abea81e'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='mmc_host' size-in-bits='14848' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='282' column='1' id='a7d74313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/mmc/host.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='class_dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/host.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='13d52ad5' visibility='default' filepath='include/linux/mmc/host.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='pwrseq' type-id='0d786921' visibility='default' filepath='include/linux/mmc/host.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='f_min' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='f_max' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='f_init' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='ocr_avail' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ocr_avail_sdio' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='ocr_avail_sd' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ocr_avail_mmc' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='max_current_330' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='max_current_300' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='max_current_180' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='caps2' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='fixed_drv_type' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8160'>
+          <var-decl name='pm_caps' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='max_seg_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='max_segs' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8240'>
+          <var-decl name='unused' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='max_req_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='max_blk_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='max_blk_count' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8352'>
+          <var-decl name='max_busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmc/host.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='ios' type-id='3f80a1ba' visibility='default' filepath='include/linux/mmc/host.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_spi_crc' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='claimed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='bus_dead' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='can_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='doing_retune' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='retune_now' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='retune_paused' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='use_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='retune_crc_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='can_dma_map_merge' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rescan_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rescan_entered' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='need_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='hold_retune' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='retune_period' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='retune_timer' type-id='abe41e67' visibility='default' filepath='include/linux/mmc/host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='trigger_card_event' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='card' type-id='13d38dcb' visibility='default' filepath='include/linux/mmc/host.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/linux/mmc/host.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='claimer' type-id='f1e196e0' visibility='default' filepath='include/linux/mmc/host.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='claim_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='default_ctx' type-id='783f5582' visibility='default' filepath='include/linux/mmc/host.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='detect' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='detect_change' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='slot' type-id='edfd3d7d' visibility='default' filepath='include/linux/mmc/host.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='bus_ops' type-id='5680a8c9' visibility='default' filepath='include/linux/mmc/host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='bus_refs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='sdio_irqs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='sdio_irq_thread' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='sdio_irq_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/mmc/host.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='sdio_irq_pending' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12320'>
+          <var-decl name='sdio_irq_thread_abort' type-id='49178f86' visibility='default' filepath='include/linux/mmc/host.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='pm_flags' type-id='208a5a8d' visibility='default' filepath='include/linux/mmc/host.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='led' type-id='db6d90a1' visibility='default' filepath='include/linux/mmc/host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='regulator_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='supply' type-id='39af3b22' visibility='default' filepath='include/linux/mmc/host.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/host.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='ongoing_mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/host.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='actual_clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12832'>
+          <var-decl name='slotno' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='dsr_req' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12896'>
+          <var-decl name='dsr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/host.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='cqe_ops' type-id='c3b36a8e' visibility='default' filepath='include/linux/mmc/host.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='cqe_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='cqe_qdepth' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13088'>
+          <var-decl name='cqe_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13096'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='ksm' type-id='13fcfe64' visibility='default' filepath='include/linux/mmc/host.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14592'>
+          <var-decl name='hsq_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14720'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='include/linux/mmc/host.h' line='490' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_host_ops' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='84' column='1' id='f2d6d1c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='post_req' type-id='d7f8a77a' visibility='default' filepath='include/linux/mmc/host.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='request' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='request_atomic' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_ios' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_ro' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_cd' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enable_sdio_irq' type-id='dacbc069' visibility='default' filepath='include/linux/mmc/host.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack_sdio_irq' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_card' type-id='287e3e50' visibility='default' filepath='include/linux/mmc/host.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_signal_voltage_switch' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='card_busy' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='execute_tuning' type-id='ebae9a6c' visibility='default' filepath='include/linux/mmc/host.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='prepare_hs400_tuning' type-id='13636c34' visibility='default' filepath='include/linux/mmc/host.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='hs400_prepare_ddr' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hs400_downgrade' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hs400_complete' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hs400_enhanced_strobe' type-id='589bddbf' visibility='default' filepath='include/linux/mmc/host.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='select_drive_strength' type-id='981b2780' visibility='default' filepath='include/linux/mmc/host.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hw_reset' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='card_event' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='multi_io_quirk' type-id='78470542' visibility='default' filepath='include/linux/mmc/host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_request' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='147' column='1' id='8bb2c7be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sbc' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/mmc/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='done' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='recovery_notifier' type-id='41865b69' visibility='default' filepath='include/linux/mmc/core.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='cap_cmd_during_tfr' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='crypto_ctx' type-id='6a407553' visibility='default' filepath='include/linux/mmc/core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='crypto_key_slot' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='171' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_command' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='26' column='1' id='c8e8a836'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opcode' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='arg' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resp' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/core.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='retries' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='busy_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sanitize_busy' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='include/linux/mmc/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_data' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mmc/core.h' line='117' column='1' id='69e72089'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout_clks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blksz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='blk_addr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bytes_xfered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='6df3750c' visibility='default' filepath='include/linux/mmc/core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mrq' type-id='47f117d4' visibility='default' filepath='include/linux/mmc/core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sg_len' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/mmc/core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='host_cookie' type-id='a7832498' visibility='default' filepath='include/linux/mmc/core.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ios' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='21' column='1' id='3f80a1ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vdd' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/host.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power_delay_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/host.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bus_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='chip_select' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='power_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bus_width' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timing' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='signal_voltage' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='drv_type' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/host.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='enhanced_strobe' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_card' size-in-bits='15168' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='247' column='1' id='b0f558fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='dd575c43' visibility='default' filepath='include/linux/mmc/card.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mmc/card.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ocr' type-id='19c2251e' visibility='default' filepath='include/linux/mmc/card.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='rca' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='quirk_max_rate' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='reenable_cmdq' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='erase_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='pref_erase' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='eg_boundary' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='erase_arg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='erased_byte' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='raw_cid' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='raw_csd' type-id='1c6c0c39' visibility='default' filepath='include/linux/mmc/card.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='raw_scr' type-id='1872161b' visibility='default' filepath='include/linux/mmc/card.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8288'>
+          <var-decl name='raw_ssr' type-id='02fdec64' visibility='default' filepath='include/linux/mmc/card.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='cid' type-id='5a0fc813' visibility='default' filepath='include/linux/mmc/card.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='csd' type-id='5e477b59' visibility='default' filepath='include/linux/mmc/card.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='ext_csd' type-id='2561085d' visibility='default' filepath='include/linux/mmc/card.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='scr' type-id='5e938df5' visibility='default' filepath='include/linux/mmc/card.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='ssr' type-id='5eba9d65' visibility='default' filepath='include/linux/mmc/card.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='sw_caps' type-id='2a479001' visibility='default' filepath='include/linux/mmc/card.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='sdio_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11104'>
+          <var-decl name='sdio_funcs_probed' type-id='49178f86' visibility='default' filepath='include/linux/mmc/card.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cccr' type-id='7f07e508' visibility='default' filepath='include/linux/mmc/card.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11232'>
+          <var-decl name='cis' type-id='4b644cf4' visibility='default' filepath='include/linux/mmc/card.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='sdio_func' type-id='4abea81e' visibility='default' filepath='include/linux/mmc/card.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sdio_single_irq' type-id='c1880945' visibility='default' filepath='include/linux/mmc/card.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='num_info' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='info' type-id='7d3cd834' visibility='default' filepath='include/linux/mmc/card.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='tuples' type-id='e5932b8e' visibility='default' filepath='include/linux/mmc/card.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='sd_bus_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12064'>
+          <var-decl name='mmc_avail_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='drive_strength' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/linux/mmc/card.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='part' type-id='67d619b5' visibility='default' filepath='include/linux/mmc/card.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='nr_parts' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14944'>
+          <var-decl name='bouncesz' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='include/linux/mmc/card.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15104'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='319' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cid' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='14' column='1' id='5a0fc813'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='manfid' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='prod_name' type-id='8e100159' visibility='default' filepath='include/linux/mmc/card.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='prv' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='serial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='oemid' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='year' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='fwrev' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='month' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_csd' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='26' column='1' id='5e477b59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='structure' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mmca_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cmdclass' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='taac_clks' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='taac_ns' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='c_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='r2w_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='read_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_blkbits' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='capacity' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='read_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='write_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='write_misalign' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dsr_imp' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_ext_csd' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='46' column='1' id='2561085d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rev' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='erase_group_def' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='rel_sectors' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rel_param' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='enhanced_rpmb_supported' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='part_config' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='cache_ctrl' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rst_n_function' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_packed_writes' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_packed_reads' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='packed_event_en' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='part_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='generic_cmd6_time' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off_longtime' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='power_off_notification' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='hs200_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hc_erase_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hc_erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sec_trim_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sec_erase_mult' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='trim_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='partition_setting_completed' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enhanced_area_offset' type-id='3a47d82b' visibility='default' filepath='include/linux/mmc/card.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enhanced_area_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cache_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hpi_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='hpi' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='hpi_cmd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bkops' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='man_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='auto_bkops_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='data_sector_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data_tag_unit_size' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='boot_ro_lock' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='boot_ro_lockable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='ffu_capable' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='cmdq_en' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='920'>
+          <var-decl name='cmdq_support' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='cmdq_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fwrev' type-id='d2f7b56a' visibility='default' filepath='include/linux/mmc/card.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='raw_exception_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='raw_partition_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='raw_rpmb_size_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1048'>
+          <var-decl name='raw_erased_mem_count' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='strobe_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='raw_ext_csd_structure' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='raw_card_type' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='raw_driver_strength' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='out_of_int_time' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='raw_pwr_cl_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='raw_pwr_cl_26_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1112'>
+          <var-decl name='raw_pwr_cl_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='raw_pwr_cl_26_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='raw_s_a_timeout' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='raw_hc_erase_gap_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='raw_erase_timeout_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='raw_hc_erase_grp_size' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='raw_sec_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='raw_sec_erase_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='raw_sec_feature_support' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='raw_trim_mult' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='raw_pwr_cl_200_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='raw_pwr_cl_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='raw_pwr_cl_ddr_52_195' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='raw_pwr_cl_ddr_52_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1224'>
+          <var-decl name='raw_pwr_cl_ddr_200_360' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='raw_bkops_status' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1240'>
+          <var-decl name='raw_sectors' type-id='931565be' visibility='default' filepath='include/linux/mmc/card.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1272'>
+          <var-decl name='pre_eol_info' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='device_life_time_est_typ_a' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='device_life_time_est_typ_b' type-id='f9b06939' visibility='default' filepath='include/linux/mmc/card.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='feature_support' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_scr' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='132' column='1' id='5e938df5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sda_vsn' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sda_spec3' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sda_spec4' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='sda_specx' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bus_widths' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='cmds' type-id='002ac4a6' visibility='default' filepath='include/linux/mmc/card.h' line='140' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_ssr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='145' column='1' id='5eba9d65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='au' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='erase_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='erase_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_switch_caps' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='151' column='1' id='2a479001'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uhs_max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sd3_bus_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sd3_drv_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sd3_curr_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cccr' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='193' column='1' id='7f07e508'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdio_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sd_vsn' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='multi_block' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='low_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wide_bus' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='high_power' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='high_speed' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='disable_cd' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_cis' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='204' column='1' id='4b644cf4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='device' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='blksize' type-id='8efea9e5' visibility='default' filepath='include/linux/mmc/card.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_dtr' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_part' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mmc/card.h' line='230' column='1' id='cc256810'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='part_cfg' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mmc/card.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='force_ro' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/card.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='area_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mmc/card.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/card.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_pwrseq' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='23' column='1' id='bed67209'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='0fbcba93' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwrseq_node' type-id='72f469ec' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_pwrseq_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='16' column='1' id='e67a5dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pre_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='post_power_on' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_off' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reset' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/pwrseq.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mmc_pm_flag_t' type-id='f0981eeb' filepath='include/linux/mmc/pm.h' line='22' column='1' id='208a5a8d'/>
+      <class-decl name='mmc_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='278' column='1' id='783f5582'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mmc/host.h' line='279' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_slot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='250' column='1' id='edfd3d7d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cd_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/mmc/host.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cd_wake_enabled' type-id='b50a4934' visibility='default' filepath='include/linux/mmc/host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/mmc/host.h' line='253' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_bus_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/mmc/core/core.h' line='20' column='1' id='424ad5b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='remove' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='detect' type-id='fa3ed3a2' visibility='default' filepath='drivers/mmc/core/core.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pre_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime_suspend' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='runtime_resume' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alive' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='hw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sw_reset' type-id='e2d63f85' visibility='default' filepath='drivers/mmc/core/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cache_enabled' type-id='9d11a2ef' visibility='default' filepath='drivers/mmc/core/core.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_supply' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='273' column='1' id='39af3b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vqmmc' type-id='850c13f6' visibility='default' filepath='include/linux/mmc/host.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_cqe_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/mmc/host.h' line='182' column='1' id='e726245b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cqe_enable' type-id='6847d33d' visibility='default' filepath='include/linux/mmc/host.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cqe_disable' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cqe_request' type-id='83cb8e80' visibility='default' filepath='include/linux/mmc/host.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cqe_post_req' type-id='624a8813' visibility='default' filepath='include/linux/mmc/host.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cqe_off' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cqe_wait_for_idle' type-id='e2d63f85' visibility='default' filepath='include/linux/mmc/host.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cqe_timeout' type-id='885a96c2' visibility='default' filepath='include/linux/mmc/host.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cqe_recovery_start' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cqe_recovery_finish' type-id='fa3ed3a2' visibility='default' filepath='include/linux/mmc/host.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmc/host.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b545ce08' const='yes' id='21c5156b'/>
+      <pointer-type-def type-id='21c5156b' size-in-bits='64' id='6a407553'/>
+      <qualified-type-def type-id='424ad5b6' const='yes' id='04379599'/>
+      <pointer-type-def type-id='04379599' size-in-bits='64' id='5680a8c9'/>
+      <qualified-type-def type-id='b0f558fb' const='yes' id='a6dc8192'/>
+      <pointer-type-def type-id='a6dc8192' size-in-bits='64' id='652034a8'/>
+      <qualified-type-def type-id='e726245b' const='yes' id='7a773bd0'/>
+      <pointer-type-def type-id='7a773bd0' size-in-bits='64' id='c3b36a8e'/>
+      <qualified-type-def type-id='f2d6d1c0' const='yes' id='d43d82dd'/>
+      <pointer-type-def type-id='d43d82dd' size-in-bits='64' id='13d52ad5'/>
+      <qualified-type-def type-id='e67a5dc2' const='yes' id='c968032b'/>
+      <pointer-type-def type-id='c968032b' size-in-bits='64' id='0fbcba93'/>
+      <pointer-type-def type-id='72e932b0' size-in-bits='64' id='78470542'/>
+      <pointer-type-def type-id='9df0e286' size-in-bits='64' id='981b2780'/>
+      <pointer-type-def type-id='8d57fbd1' size-in-bits='64' id='e2d63f85'/>
+      <pointer-type-def type-id='355fab89' size-in-bits='64' id='6847d33d'/>
+      <pointer-type-def type-id='00a425f2' size-in-bits='64' id='13636c34'/>
+      <pointer-type-def type-id='c4f6276e' size-in-bits='64' id='83cb8e80'/>
+      <pointer-type-def type-id='aa7f03f2' size-in-bits='64' id='ebae9a6c'/>
+      <pointer-type-def type-id='b0f558fb' size-in-bits='64' id='13d38dcb'/>
+      <pointer-type-def type-id='c8e8a836' size-in-bits='64' id='6df3750c'/>
+      <pointer-type-def type-id='783f5582' size-in-bits='64' id='f1e196e0'/>
+      <pointer-type-def type-id='69e72089' size-in-bits='64' id='6de64ec1'/>
+      <pointer-type-def type-id='a7d74313' size-in-bits='64' id='dd575c43'/>
+      <pointer-type-def type-id='3f80a1ba' size-in-bits='64' id='3b590e48'/>
+      <pointer-type-def type-id='bed67209' size-in-bits='64' id='0d786921'/>
+      <pointer-type-def type-id='8bb2c7be' size-in-bits='64' id='47f117d4'/>
+      <pointer-type-def type-id='4073d265' size-in-bits='64' id='c1880945'/>
+      <pointer-type-def type-id='d81af048' size-in-bits='64' id='e5932b8e'/>
+      <pointer-type-def type-id='77e739eb' size-in-bits='64' id='9d11a2ef'/>
+      <pointer-type-def type-id='6b983020' size-in-bits='64' id='885a96c2'/>
+      <pointer-type-def type-id='7d43ac00' size-in-bits='64' id='fa3ed3a2'/>
+      <pointer-type-def type-id='e3e30c0d' size-in-bits='64' id='dacbc069'/>
+      <pointer-type-def type-id='d72e913e' size-in-bits='64' id='287e3e50'/>
+      <pointer-type-def type-id='82718bfb' size-in-bits='64' id='589bddbf'/>
+      <pointer-type-def type-id='c3d2316f' size-in-bits='64' id='624a8813'/>
+      <pointer-type-def type-id='b7bb7c18' size-in-bits='64' id='d7f8a77a'/>
+      <pointer-type-def type-id='48dbb365' size-in-bits='64' id='41865b69'/>
+      <function-decl name='__mmc_claim_host' mangled-name='__mmc_claim_host' filepath='drivers/mmc/core/core.c' line='797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmc_claim_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='797' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='797' column='1'/>
+        <parameter type-id='8a47abc3' name='abort' filepath='drivers/mmc/core/core.c' line='798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_wait_for_req' mangled-name='mmc_wait_for_req' filepath='drivers/mmc/core/core.c' line='620' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_wait_for_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='620' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='620' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_release_host' mangled-name='mmc_release_host' filepath='drivers/mmc/core/core.c' line='845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_release_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='845' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_start_request' mangled-name='mmc_start_request' filepath='drivers/mmc/core/core.c' line='336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_start_request'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='336' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='336' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_request_done' mangled-name='mmc_request_done' filepath='drivers/mmc/core/core.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_request_done'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='139' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_wait_for_cmd' mangled-name='mmc_wait_for_cmd' filepath='drivers/mmc/core/core.c' line='639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_wait_for_cmd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='639' column='1'/>
+        <parameter type-id='6df3750c' name='cmd' filepath='drivers/mmc/core/core.c' line='639' column='1'/>
+        <parameter type-id='95e97e5e' name='retries' filepath='drivers/mmc/core/core.c' line='639' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_set_data_timeout' mangled-name='mmc_set_data_timeout' filepath='drivers/mmc/core/core.c' line='666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_set_data_timeout'>
+        <parameter type-id='6de64ec1' name='data' filepath='drivers/mmc/core/core.c' line='666' column='1'/>
+        <parameter type-id='652034a8' name='card' filepath='drivers/mmc/core/core.c' line='666' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_put_card' mangled-name='mmc_put_card' filepath='drivers/mmc/core/core.c' line='885' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_put_card'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='885' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='885' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_hw_reset' mangled-name='mmc_hw_reset' filepath='drivers/mmc/core/core.c' line='2124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_hw_reset'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='2124' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_get_card' mangled-name='mmc_get_card' filepath='drivers/mmc/core/core.c' line='874' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_get_card'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='874' column='1'/>
+        <parameter type-id='f1e196e0' name='ctx' filepath='drivers/mmc/core/core.c' line='874' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_erase_group_aligned' mangled-name='mmc_erase_group_aligned' filepath='drivers/mmc/core/core.c' line='1977' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_erase_group_aligned'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1977' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='drivers/mmc/core/core.c' line='1977' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/mmc/core/core.c' line='1978' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_erase' mangled-name='mmc_erase' filepath='drivers/mmc/core/core.c' line='1867' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_erase'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1867' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='drivers/mmc/core/core.c' line='1867' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/mmc/core/core.c' line='1867' column='1'/>
+        <parameter type-id='f0981eeb' name='arg' filepath='drivers/mmc/core/core.c' line='1868' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_detect_change' mangled-name='mmc_detect_change' filepath='drivers/mmc/core/core.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_detect_change'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='1502' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='drivers/mmc/core/core.c' line='1502' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_detect_card_removed' mangled-name='mmc_detect_card_removed' filepath='drivers/mmc/core/core.c' line='2247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_detect_card_removed'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='2247' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_start_req' mangled-name='mmc_cqe_start_req' filepath='drivers/mmc/core/core.c' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_start_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='449' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='449' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_request_done' mangled-name='mmc_cqe_request_done' filepath='drivers/mmc/core/core.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_request_done'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='499' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='499' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_recovery' mangled-name='mmc_cqe_recovery' filepath='drivers/mmc/core/core.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_recovery'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='552' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cqe_post_req' mangled-name='mmc_cqe_post_req' filepath='drivers/mmc/core/core.c' line='533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cqe_post_req'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/core.c' line='533' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/core/core.c' line='533' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_can_trim' mangled-name='mmc_can_trim' filepath='drivers/mmc/core/core.c' line='1937' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_trim'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_secure_erase_trim' mangled-name='mmc_can_secure_erase_trim' filepath='drivers/mmc/core/core.c' line='1968' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_secure_erase_trim'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1968' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_sanitize' mangled-name='mmc_can_sanitize' filepath='drivers/mmc/core/core.c' line='1958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_sanitize'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1958' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_erase' mangled-name='mmc_can_erase' filepath='drivers/mmc/core/core.c' line='1928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_erase'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='1928' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_calc_max_discard' mangled-name='mmc_calc_max_discard' filepath='drivers/mmc/core/core.c' line='2066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_calc_max_discard'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/core.c' line='2066' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='72e932b0'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9df0e286'>
+        <parameter type-id='13d38dcb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d57fbd1'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='355fab89'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='00a425f2'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='3b590e48'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4f6276e'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa7f03f2'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77e739eb'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b983020'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d43ac00'>
+        <parameter type-id='dd575c43'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e3e30c0d'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d72e913e'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='13d38dcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82718bfb'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='3b590e48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3d2316f'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b7bb7c18'>
+        <parameter type-id='dd575c43'/>
+        <parameter type-id='47f117d4'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48dbb365'>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/crypto.c' language='LANG_C89'>
+      <class-decl name='mmc_queue_req' size-in-bits='3520' is-struct='yes' visibility='default' filepath='drivers/mmc/core/queue.h' line='64' column='1' id='dfaa0b3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='brq' type-id='1dfc10c6' visibility='default' filepath='drivers/mmc/core/queue.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='drivers/mmc/core/queue.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='drv_op' type-id='84e14886' visibility='default' filepath='drivers/mmc/core/queue.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='drv_op_result' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/core/queue.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='drv_op_data' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/core/queue.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ioc_count' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/core/queue.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/core/queue.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmc_blk_request' size-in-bits='3264' is-struct='yes' visibility='default' filepath='drivers/mmc/core/queue.h' line='40' column='1' id='1dfc10c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mrq' type-id='8bb2c7be' visibility='default' filepath='drivers/mmc/core/queue.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sbc' type-id='c8e8a836' visibility='default' filepath='drivers/mmc/core/queue.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='cmd' type-id='c8e8a836' visibility='default' filepath='drivers/mmc/core/queue.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='stop' type-id='c8e8a836' visibility='default' filepath='drivers/mmc/core/queue.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='data' type-id='69e72089' visibility='default' filepath='drivers/mmc/core/queue.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mmc_drv_op' filepath='drivers/mmc/core/queue.h' line='56' column='1' id='84e14886'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MMC_DRV_OP_IOCTL' value='0'/>
+        <enumerator name='MMC_DRV_OP_IOCTL_RPMB' value='1'/>
+        <enumerator name='MMC_DRV_OP_BOOT_WP' value='2'/>
+        <enumerator name='MMC_DRV_OP_GET_CARD_STATUS' value='3'/>
+        <enumerator name='MMC_DRV_OP_GET_EXT_CSD' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='dfaa0b3f' size-in-bits='64' id='8a025557'/>
+      <function-decl name='mmc_crypto_setup_queue' mangled-name='mmc_crypto_setup_queue' filepath='drivers/mmc/core/crypto.c' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_crypto_setup_queue'>
+        <parameter type-id='e7d2a5fc' name='q' filepath='drivers/mmc/core/crypto.c' line='22' column='1'/>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/crypto.c' line='22' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_crypto_prepare_req' mangled-name='mmc_crypto_prepare_req' filepath='drivers/mmc/core/crypto.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_crypto_prepare_req'>
+        <parameter type-id='8a025557' name='mqrq' filepath='drivers/mmc/core/crypto.c' line='29' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/host.c' language='LANG_C89'>
+      <function-decl name='mmc_alloc_host' mangled-name='mmc_alloc_host' filepath='drivers/mmc/core/host.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_alloc_host'>
+        <parameter type-id='95e97e5e' name='extra' filepath='drivers/mmc/core/host.c' line='443' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/mmc/core/host.c' line='443' column='1'/>
+        <return type-id='dd575c43'/>
+      </function-decl>
+      <function-decl name='mmc_retune_unpause' mangled-name='mmc_retune_unpause' filepath='drivers/mmc/core/host.c' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_unpause'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='127' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_retune_release' mangled-name='mmc_retune_release' filepath='drivers/mmc/core/host.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_release'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='158' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_retune_pause' mangled-name='mmc_retune_pause' filepath='drivers/mmc/core/host.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_retune_pause'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='117' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_remove_host' mangled-name='mmc_remove_host' filepath='drivers/mmc/core/host.c' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_remove_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='540' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_of_parse_voltage' mangled-name='mmc_of_parse_voltage' filepath='drivers/mmc/core/host.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_of_parse_voltage'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/mmc/core/host.c' line='401' column='1'/>
+        <parameter type-id='f9409001' name='mask' filepath='drivers/mmc/core/host.c' line='401' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_of_parse' mangled-name='mmc_of_parse' filepath='drivers/mmc/core/host.c' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_of_parse'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='220' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_free_host' mangled-name='mmc_free_host' filepath='drivers/mmc/core/host.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_free_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='561' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_add_host' mangled-name='mmc_add_host' filepath='drivers/mmc/core/host.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_add_host'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/host.c' line='509' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/mmc_ops.c' language='LANG_C89'>
+      <function-decl name='mmc_get_ext_csd' mangled-name='mmc_get_ext_csd' filepath='drivers/mmc/core/mmc_ops.c' line='356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_get_ext_csd'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='356' column='1'/>
+        <parameter type-id='1f37a7f4' name='new_ext_csd' filepath='drivers/mmc/core/mmc_ops.c' line='356' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_switch' mangled-name='mmc_switch' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_switch'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='set' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='index' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f9b06939' name='value' filepath='drivers/mmc/core/mmc_ops.c' line='603' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout_ms' filepath='drivers/mmc/core/mmc_ops.c' line='604' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_send_tuning' mangled-name='mmc_send_tuning' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_send_tuning'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <parameter type-id='19c2251e' name='opcode' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <parameter type-id='7292109c' name='cmd_error' filepath='drivers/mmc/core/mmc_ops.c' line='611' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_send_status' mangled-name='mmc_send_status' filepath='drivers/mmc/core/mmc_ops.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_send_status'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='78' column='1'/>
+        <parameter type-id='f9409001' name='status' filepath='drivers/mmc/core/mmc_ops.c' line='78' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_run_bkops' mangled-name='mmc_run_bkops' filepath='drivers/mmc/core/mmc_ops.c' line='920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_run_bkops'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_flush_cache' mangled-name='mmc_flush_cache' filepath='drivers/mmc/core/mmc_ops.c' line='958' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_flush_cache'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='958' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cmdq_enable' mangled-name='mmc_cmdq_enable' filepath='drivers/mmc/core/mmc_ops.c' line='990' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cmdq_enable'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='990' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_cmdq_disable' mangled-name='mmc_cmdq_disable' filepath='drivers/mmc/core/mmc_ops.c' line='996' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_cmdq_disable'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='996' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__mmc_send_status' mangled-name='__mmc_send_status' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmc_send_status'>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <parameter type-id='f9409001' name='status' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <parameter type-id='f0981eeb' name='retries' filepath='drivers/mmc/core/mmc_ops.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='8bff8096' size-in-bits='64' id='1f37a7f4'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/regulator.c' language='LANG_C89'>
+      <function-decl name='mmc_regulator_set_vqmmc' mangled-name='mmc_regulator_set_vqmmc' filepath='drivers/mmc/core/regulator.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_set_vqmmc'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='167' column='1'/>
+        <parameter type-id='3b590e48' name='ios' filepath='drivers/mmc/core/regulator.c' line='167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_regulator_set_ocr' mangled-name='mmc_regulator_set_ocr' filepath='drivers/mmc/core/regulator.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_set_ocr'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='106' column='1'/>
+        <parameter type-id='850c13f6' name='supply' filepath='drivers/mmc/core/regulator.c' line='107' column='1'/>
+        <parameter type-id='8efea9e5' name='vdd_bit' filepath='drivers/mmc/core/regulator.c' line='108' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_regulator_get_supply' mangled-name='mmc_regulator_get_supply' filepath='drivers/mmc/core/regulator.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_regulator_get_supply'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/core/regulator.c' line='232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/sd_ops.c' language='LANG_C89'>
+      <function-decl name='mmc_app_cmd' mangled-name='mmc_app_cmd' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_app_cmd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1'/>
+        <parameter type-id='13d38dcb' name='card' filepath='drivers/mmc/core/sd_ops.c' line='21' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/sdio_bus.c' language='LANG_C89'>
+      <class-decl name='sdio_driver' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='73' column='1' id='81d3e1dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id_table' type-id='4054d674' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='probe' type-id='ab1e2186' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='remove' type-id='11124634' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/mmc/sdio_func.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdio_device_id' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='391' column='1' id='d7c619db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='vendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='395' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sdio_irq_handler_t' type-id='81dd332a' filepath='include/linux/mmc/sdio_func.h' line='19' column='1' id='72a9e98a'/>
+      <qualified-type-def type-id='d7c619db' const='yes' id='2f04a816'/>
+      <pointer-type-def type-id='2f04a816' size-in-bits='64' id='4054d674'/>
+      <pointer-type-def type-id='a211528c' size-in-bits='64' id='ab1e2186'/>
+      <pointer-type-def type-id='81d3e1dd' size-in-bits='64' id='710bea3d'/>
+      <pointer-type-def type-id='72a9e98a' size-in-bits='64' id='1d186b8b'/>
+      <pointer-type-def type-id='81dd332a' size-in-bits='64' id='11124634'/>
+      <function-decl name='sdio_unregister_driver' mangled-name='sdio_unregister_driver' filepath='drivers/mmc/core/sdio_bus.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_unregister_driver'>
+        <parameter type-id='710bea3d' name='drv' filepath='drivers/mmc/core/sdio_bus.c' line='258' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_register_driver' mangled-name='sdio_register_driver' filepath='drivers/mmc/core/sdio_bus.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_register_driver'>
+        <parameter type-id='710bea3d' name='drv' filepath='drivers/mmc/core/sdio_bus.c' line='246' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a211528c'>
+        <parameter type-id='c1880945'/>
+        <parameter type-id='4054d674'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='81dd332a'>
+        <parameter type-id='c1880945'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/sdio_io.c' language='LANG_C89'>
+      <function-decl name='sdio_enable_func' mangled-name='sdio_enable_func' filepath='drivers/mmc/core/sdio_io.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_enable_func'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_disable_func' mangled-name='sdio_disable_func' filepath='drivers/mmc/core/sdio_io.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_disable_func'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='110' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_readb' mangled-name='sdio_readb' filepath='drivers/mmc/core/sdio_io.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='380' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='380' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='380' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='sdio_set_block_size' mangled-name='sdio_set_block_size' filepath='drivers/mmc/core/sdio_io.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_set_block_size'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='159' column='1'/>
+        <parameter type-id='f0981eeb' name='blksz' filepath='drivers/mmc/core/sdio_io.c' line='159' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_writew' mangled-name='sdio_writew' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writew'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='1dc6a898' name='b' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='561' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_writesb' mangled-name='sdio_writesb' filepath='drivers/mmc/core/sdio_io.c' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writesb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='519' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='519' column='1'/>
+        <parameter type-id='eaa32e2f' name='src' filepath='drivers/mmc/core/sdio_io.c' line='519' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='520' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_writel' mangled-name='sdio_writel' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writel'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='19c2251e' name='b' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='609' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_writeb' mangled-name='sdio_writeb' filepath='drivers/mmc/core/sdio_io.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_writeb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='412' column='1'/>
+        <parameter type-id='f9b06939' name='b' filepath='drivers/mmc/core/sdio_io.c' line='412' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='412' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='412' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_set_host_pm_flags' mangled-name='sdio_set_host_pm_flags' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_set_host_pm_flags'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1'/>
+        <parameter type-id='208a5a8d' name='flags' filepath='drivers/mmc/core/sdio_io.c' line='721' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_release_host' mangled-name='sdio_release_host' filepath='drivers/mmc/core/sdio_io.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_release_host'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='43' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_readw' mangled-name='sdio_readw' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readw'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='536' column='1'/>
+        <return type-id='1dc6a898'/>
+      </function-decl>
+      <function-decl name='sdio_readsb' mangled-name='sdio_readsb' filepath='drivers/mmc/core/sdio_io.c' line='502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readsb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='502' column='1'/>
+        <parameter type-id='eaa32e2f' name='dst' filepath='drivers/mmc/core/sdio_io.c' line='502' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='502' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_readl' mangled-name='sdio_readl' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_readl'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='584' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='sdio_memcpy_toio' mangled-name='sdio_memcpy_toio' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_memcpy_toio'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='485' column='1'/>
+        <parameter type-id='eaa32e2f' name='src' filepath='drivers/mmc/core/sdio_io.c' line='486' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_memcpy_fromio' mangled-name='sdio_memcpy_fromio' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_memcpy_fromio'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1'/>
+        <parameter type-id='eaa32e2f' name='dst' filepath='drivers/mmc/core/sdio_io.c' line='468' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='469' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/mmc/core/sdio_io.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_get_host_pm_caps' mangled-name='sdio_get_host_pm_caps' filepath='drivers/mmc/core/sdio_io.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_get_host_pm_caps'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='700' column='1'/>
+        <return type-id='208a5a8d'/>
+      </function-decl>
+      <function-decl name='sdio_f0_writeb' mangled-name='sdio_f0_writeb' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_f0_writeb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='002ac4a6' name='b' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='667' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='668' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_f0_readb' mangled-name='sdio_f0_readb' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_f0_readb'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1'/>
+        <parameter type-id='f0981eeb' name='addr' filepath='drivers/mmc/core/sdio_io.c' line='631' column='1'/>
+        <parameter type-id='7292109c' name='err_ret' filepath='drivers/mmc/core/sdio_io.c' line='632' column='1'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+      <function-decl name='sdio_claim_host' mangled-name='sdio_claim_host' filepath='drivers/mmc/core/sdio_io.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_claim_host'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='27' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdio_align_size' mangled-name='sdio_align_size' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_align_size'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1'/>
+        <parameter type-id='f0981eeb' name='sz' filepath='drivers/mmc/core/sdio_io.c' line='233' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/sdio_irq.c' language='LANG_C89'>
+      <function-decl name='sdio_claim_irq' mangled-name='sdio_claim_irq' filepath='drivers/mmc/core/sdio_irq.c' line='299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_claim_irq'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_irq.c' line='299' column='1'/>
+        <parameter type-id='1d186b8b' name='handler' filepath='drivers/mmc/core/sdio_irq.c' line='299' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_release_irq' mangled-name='sdio_release_irq' filepath='drivers/mmc/core/sdio_irq.c' line='342' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_release_irq'>
+        <parameter type-id='c1880945' name='func' filepath='drivers/mmc/core/sdio_irq.c' line='342' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdio_signal_irq' mangled-name='sdio_signal_irq' filepath='drivers/mmc/core/sdio_irq.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdio_signal_irq'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/sdio_irq.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/core/slot-gpio.c' language='LANG_C89'>
+      <function-decl name='mmc_gpiod_request_cd_irq' mangled-name='mmc_gpiod_request_cd_irq' filepath='drivers/mmc/core/slot-gpio.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_cd_irq'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='96' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmc_gpiod_request_cd' mangled-name='mmc_gpiod_request_cd' filepath='drivers/mmc/core/slot-gpio.c' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_cd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='179' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/mmc/core/slot-gpio.c' line='179' column='1'/>
+        <parameter type-id='f0981eeb' name='idx' filepath='drivers/mmc/core/slot-gpio.c' line='180' column='1'/>
+        <parameter type-id='b50a4934' name='override_active_level' filepath='drivers/mmc/core/slot-gpio.c' line='180' column='1'/>
+        <parameter type-id='f0981eeb' name='debounce' filepath='drivers/mmc/core/slot-gpio.c' line='181' column='1'/>
+        <parameter type-id='d8e6b335' name='gpio_invert' filepath='drivers/mmc/core/slot-gpio.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpiod_request_ro' mangled-name='mmc_gpiod_request_ro' filepath='drivers/mmc/core/slot-gpio.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpiod_request_ro'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='226' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/mmc/core/slot-gpio.c' line='226' column='1'/>
+        <parameter type-id='f0981eeb' name='idx' filepath='drivers/mmc/core/slot-gpio.c' line='227' column='1'/>
+        <parameter type-id='f0981eeb' name='debounce' filepath='drivers/mmc/core/slot-gpio.c' line='228' column='1'/>
+        <parameter type-id='d8e6b335' name='gpio_invert' filepath='drivers/mmc/core/slot-gpio.c' line='228' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpio_get_ro' mangled-name='mmc_gpio_get_ro' filepath='drivers/mmc/core/slot-gpio.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpio_get_ro'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_gpio_get_cd' mangled-name='mmc_gpio_get_cd' filepath='drivers/mmc/core/slot-gpio.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_gpio_get_cd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='74' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mmc_can_gpio_cd' mangled-name='mmc_can_gpio_cd' filepath='drivers/mmc/core/slot-gpio.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmc_can_gpio_cd'>
+        <parameter type-id='dd575c43' name='host' filepath='drivers/mmc/core/slot-gpio.c' line='207' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/host/sdhci-pltfm.c' language='LANG_C89'>
+      <class-decl name='sdhci_pltfm_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='15' column='1' id='5864e8c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci-pltfm.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='5864e8c1' const='yes' id='59a625dc'/>
+      <pointer-type-def type-id='59a625dc' size-in-bits='64' id='168dc242'/>
+      <function-decl name='sdhci_pltfm_init' mangled-name='sdhci_pltfm_init' filepath='drivers/mmc/host/sdhci-pltfm.c' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_pltfm_init'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='116' column='1'/>
+        <parameter type-id='168dc242' name='pdata' filepath='drivers/mmc/host/sdhci-pltfm.c' line='117' column='1'/>
+        <parameter type-id='b59d7dce' name='priv_size' filepath='drivers/mmc/host/sdhci-pltfm.c' line='118' column='1'/>
+        <return type-id='2661e0d9'/>
+      </function-decl>
+      <function-decl name='sdhci_pltfm_free' mangled-name='sdhci_pltfm_free' filepath='drivers/mmc/host/sdhci-pltfm.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_pltfm_free'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_get_property' mangled-name='sdhci_get_property' filepath='drivers/mmc/host/sdhci-pltfm.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_get_property'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/mmc/host/sdhci-pltfm.c' line='79' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='cfa9604e' size-in-bits='64' id='4ba2bd6c'/>
+      <pointer-type-def type-id='9d22e201' size-in-bits='64' id='2661e0d9'/>
+      <class-decl name='sdhci_host' size-in-bits='9728' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='374' column='1' id='9d22e201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_name' type-id='80f4b756' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bounce_buffer' type-id='26a90f95' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bounce_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bounce_buffer_size' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmc' type-id='dd575c43' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmc_host_ops' type-id='f2d6d1c0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='led' type-id='6e0e17b0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='led_name' type-id='16dc656a' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5600'>
+          <var-decl name='max_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='timeout_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='clk_mul' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5728'>
+          <var-decl name='pwr' type-id='f9b06939' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5736'>
+          <var-decl name='runtime_suspended' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5744'>
+          <var-decl name='bus_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5752'>
+          <var-decl name='preset_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='pending_reset' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5768'>
+          <var-decl name='irq_wake_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5776'>
+          <var-decl name='v4_mode' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5784'>
+          <var-decl name='always_defer_done' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='mrqs_done' type-id='c2c0ece0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='data_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='deferred_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data_early' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sg_miter' type-id='52378ac1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='adma_table' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='align_buffer' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='adma_table_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='align_buffer_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='adma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='align_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7328'>
+          <var-decl name='alloc_desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='complete_work' type-id='ef9025d0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='data_timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='caps1' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='read_caps' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='ocr_avail_sdio' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='ocr_avail_sd' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='ocr_avail_mmc' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='ocr_mask' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='timing' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='thread_isr' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9056'>
+          <var-decl name='cqe_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='cqe_err_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='buf_ready_int' type-id='b5ab048f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tuning_done' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='tuning_count' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='tuning_mode' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='tuning_err' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='tuning_delay' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='tuning_loop_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='sdma_boundary' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9568'>
+          <var-decl name='adma_table_cnt' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='data_timeout' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='63b6be81' const='yes' id='cfa9604e'/>
+      <class-decl name='sdhci_ops' size-in-bits='1920' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='618' column='1' id='63b6be81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_l' type-id='06b0c85e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_w' type-id='c7990768' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_b' type-id='8715d191' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_l' type-id='b291458e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_w' type-id='c8439540' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_b' type-id='3cf0497b' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_clock' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_power' type-id='71399c6f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='02663b56' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_dma_mask' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable_dma' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_max_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_min_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_timeout_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_max_timeout_count' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_timeout' type-id='3fec7331' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_bus_width' type-id='288e0067' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='platform_send_init_74_clocks' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_ro' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reset' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='platform_execute_tuning' type-id='d846c996' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_uhs_signaling' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hw_reset' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='adma_workaround' type-id='bb4db0f7' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='card_event' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='voltage_switch' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='adma_write_desc' type-id='7a3863fd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='request_done' type-id='d17e9a1d' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dump_vendor_regs' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sg_mapping_iter' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='491' column='1' id='52378ac1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/scatterlist.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/scatterlist.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumed' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='piter' type-id='78e3e1d2' visibility='default' filepath='include/linux/scatterlist.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__offset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='__remaining' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__flags' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='502' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='47f117d4' size-in-bits='128' id='c2c0ece0'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='sg_page_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/scatterlist.h' line='366' column='1' id='78e3e1d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/scatterlist.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sg_pgoffset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='__nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__pg_advance' type-id='95e97e5e' visibility='default' filepath='include/linux/scatterlist.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d3baf253' size-in-bits='64' id='a9d7e307'/>
+      <pointer-type-def type-id='17a0b6f4' size-in-bits='64' id='d846c996'/>
+      <pointer-type-def type-id='a7132e26' size-in-bits='64' id='c7990768'/>
+      <pointer-type-def type-id='256a6e6c' size-in-bits='64' id='06b0c85e'/>
+      <pointer-type-def type-id='9bbd94a4' size-in-bits='64' id='02663b56'/>
+      <pointer-type-def type-id='182265d5' size-in-bits='64' id='8715d191'/>
+      <pointer-type-def type-id='aac6e642' size-in-bits='64' id='601d7eac'/>
+      <pointer-type-def type-id='846120de' size-in-bits='64' id='13daec78'/>
+      <pointer-type-def type-id='859caa73' size-in-bits='64' id='288e0067'/>
+      <pointer-type-def type-id='380397d5' size-in-bits='64' id='3fec7331'/>
+      <pointer-type-def type-id='b3f5a3c1' size-in-bits='64' id='d17e9a1d'/>
+      <pointer-type-def type-id='21f3c22e' size-in-bits='64' id='c8439540'/>
+      <pointer-type-def type-id='afcc3ab3' size-in-bits='64' id='bb4db0f7'/>
+      <pointer-type-def type-id='6b401e7c' size-in-bits='64' id='b291458e'/>
+      <pointer-type-def type-id='173ca462' size-in-bits='64' id='30c362fc'/>
+      <pointer-type-def type-id='7fdfc457' size-in-bits='64' id='3cf0497b'/>
+      <pointer-type-def type-id='17d4a823' size-in-bits='64' id='71399c6f'/>
+      <pointer-type-def type-id='05cc5338' size-in-bits='64' id='98dbb7da'/>
+      <pointer-type-def type-id='4d5c3e51' size-in-bits='64' id='7a3863fd'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/mmc/host/sdhci.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='47f117d4' size-in-bits='128' id='c2c0ece0'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='sdhci_host' size-in-bits='9728' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='374' column='1' id='9d22e201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_name' type-id='80f4b756' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='quirks2' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioaddr' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bounce_buffer' type-id='26a90f95' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bounce_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bounce_buffer_size' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='4ba2bd6c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmc' type-id='dd575c43' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmc_host_ops' type-id='f2d6d1c0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_mask' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='led' type-id='6e0e17b0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='led_name' type-id='16dc656a' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5600'>
+          <var-decl name='max_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='timeout_clk' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='clk_mul' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='clock' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5728'>
+          <var-decl name='pwr' type-id='f9b06939' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5736'>
+          <var-decl name='runtime_suspended' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5744'>
+          <var-decl name='bus_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5752'>
+          <var-decl name='preset_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='pending_reset' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5768'>
+          <var-decl name='irq_wake_enabled' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5776'>
+          <var-decl name='v4_mode' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5784'>
+          <var-decl name='always_defer_done' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='mrqs_done' type-id='c2c0ece0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='data_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='deferred_cmd' type-id='6df3750c' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='data' type-id='6de64ec1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data_early' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sg_miter' type-id='52378ac1' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='blocks' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='sg_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='adma_table' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='align_buffer' type-id='eaa32e2f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='adma_table_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='align_buffer_sz' type-id='b59d7dce' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='adma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='align_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7328'>
+          <var-decl name='alloc_desc_sz' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='complete_wq' type-id='242e3d19' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='complete_work' type-id='ef9025d0' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='data_timer' type-id='abe41e67' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8736'>
+          <var-decl name='caps1' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='read_caps' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8800'>
+          <var-decl name='ocr_avail_sdio' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='ocr_avail_sd' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='ocr_avail_mmc' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='ocr_mask' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='timing' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='thread_isr' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8992'>
+          <var-decl name='ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='cqe_on' type-id='b50a4934' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9056'>
+          <var-decl name='cqe_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='cqe_err_ier' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='buf_ready_int' type-id='b5ab048f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tuning_done' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9376'>
+          <var-decl name='tuning_count' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='tuning_mode' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='tuning_err' type-id='f0981eeb' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='tuning_delay' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='tuning_loop_count' type-id='95e97e5e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='sdma_boundary' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9568'>
+          <var-decl name='adma_table_cnt' type-id='19c2251e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='data_timeout' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='615' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sdhci_ops' size-in-bits='1920' is-struct='yes' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='618' column='1' id='63b6be81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read_l' type-id='06b0c85e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_w' type-id='c7990768' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_b' type-id='8715d191' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write_l' type-id='b291458e' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_w' type-id='c8439540' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_b' type-id='3cf0497b' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_clock' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_power' type-id='71399c6f' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='02663b56' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_dma_mask' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable_dma' type-id='a9d7e307' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_max_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_min_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_timeout_clock' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_max_timeout_count' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_timeout' type-id='3fec7331' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_bus_width' type-id='288e0067' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='platform_send_init_74_clocks' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='get_ro' type-id='601d7eac' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reset' type-id='30c362fc' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='platform_execute_tuning' type-id='d846c996' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_uhs_signaling' type-id='98dbb7da' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hw_reset' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='adma_workaround' type-id='bb4db0f7' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='card_event' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='voltage_switch' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='adma_write_desc' type-id='7a3863fd' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='request_done' type-id='d17e9a1d' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='dump_vendor_regs' type-id='13daec78' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/mmc/host/sdhci.h' line='660' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='63b6be81' const='yes' id='cfa9604e'/>
+      <pointer-type-def type-id='cfa9604e' size-in-bits='64' id='4ba2bd6c'/>
+      <pointer-type-def type-id='d3baf253' size-in-bits='64' id='a9d7e307'/>
+      <pointer-type-def type-id='17a0b6f4' size-in-bits='64' id='d846c996'/>
+      <pointer-type-def type-id='9d22e201' size-in-bits='64' id='2661e0d9'/>
+      <pointer-type-def type-id='a7132e26' size-in-bits='64' id='c7990768'/>
+      <pointer-type-def type-id='256a6e6c' size-in-bits='64' id='06b0c85e'/>
+      <pointer-type-def type-id='9bbd94a4' size-in-bits='64' id='02663b56'/>
+      <pointer-type-def type-id='182265d5' size-in-bits='64' id='8715d191'/>
+      <pointer-type-def type-id='aac6e642' size-in-bits='64' id='601d7eac'/>
+      <pointer-type-def type-id='846120de' size-in-bits='64' id='13daec78'/>
+      <pointer-type-def type-id='859caa73' size-in-bits='64' id='288e0067'/>
+      <pointer-type-def type-id='380397d5' size-in-bits='64' id='3fec7331'/>
+      <pointer-type-def type-id='b3f5a3c1' size-in-bits='64' id='d17e9a1d'/>
+      <pointer-type-def type-id='21f3c22e' size-in-bits='64' id='c8439540'/>
+      <pointer-type-def type-id='afcc3ab3' size-in-bits='64' id='bb4db0f7'/>
+      <pointer-type-def type-id='6b401e7c' size-in-bits='64' id='b291458e'/>
+      <pointer-type-def type-id='173ca462' size-in-bits='64' id='30c362fc'/>
+      <pointer-type-def type-id='7fdfc457' size-in-bits='64' id='3cf0497b'/>
+      <pointer-type-def type-id='17d4a823' size-in-bits='64' id='71399c6f'/>
+      <pointer-type-def type-id='05cc5338' size-in-bits='64' id='98dbb7da'/>
+      <pointer-type-def type-id='4d5c3e51' size-in-bits='64' id='7a3863fd'/>
+      <function-decl name='__sdhci_add_host' mangled-name='__sdhci_add_host' filepath='drivers/mmc/host/sdhci.c' line='4427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sdhci_add_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_setup_host' mangled-name='sdhci_setup_host' filepath='drivers/mmc/host/sdhci.c' line='3875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_setup_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3875' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_set_bus_width' mangled-name='sdhci_set_bus_width' filepath='drivers/mmc/host/sdhci.c' line='1975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_set_bus_width'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='1975' column='1'/>
+        <parameter type-id='95e97e5e' name='width' filepath='drivers/mmc/host/sdhci.c' line='1975' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_runtime_suspend_host' mangled-name='sdhci_runtime_suspend_host' filepath='drivers/mmc/host/sdhci.c' line='3480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_runtime_suspend_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3480' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_runtime_resume_host' mangled-name='sdhci_runtime_resume_host' filepath='drivers/mmc/host/sdhci.c' line='3502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_runtime_resume_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3502' column='1'/>
+        <parameter type-id='95e97e5e' name='soft_reset' filepath='drivers/mmc/host/sdhci.c' line='3502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sdhci_reset' mangled-name='sdhci_reset' filepath='drivers/mmc/host/sdhci.c' line='201' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_reset'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='201' column='1'/>
+        <parameter type-id='f9b06939' name='mask' filepath='drivers/mmc/host/sdhci.c' line='201' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_request_atomic' mangled-name='sdhci_request_atomic' filepath='drivers/mmc/host/sdhci.c' line='1941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_request_atomic'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='1941' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/host/sdhci.c' line='1941' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sdhci_set_timeout' mangled-name='__sdhci_set_timeout' filepath='drivers/mmc/host/sdhci.c' line='998' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sdhci_set_timeout'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='998' column='1'/>
+        <parameter type-id='6df3750c' name='cmd' filepath='drivers/mmc/host/sdhci.c' line='998' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_request' mangled-name='sdhci_request' filepath='drivers/mmc/host/sdhci.c' line='1897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_request'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='1897' column='1'/>
+        <parameter type-id='47f117d4' name='mrq' filepath='drivers/mmc/host/sdhci.c' line='1897' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_remove_host' mangled-name='sdhci_remove_host' filepath='drivers/mmc/host/sdhci.c' line='4516' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_remove_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4516' column='1'/>
+        <parameter type-id='95e97e5e' name='dead' filepath='drivers/mmc/host/sdhci.c' line='4516' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_enable_v4_mode' mangled-name='sdhci_enable_v4_mode' filepath='drivers/mmc/host/sdhci.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_enable_v4_mode'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='141' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_enable_clk' mangled-name='sdhci_enable_clk' filepath='drivers/mmc/host/sdhci.c' line='1720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_enable_clk'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='1720' column='1'/>
+        <parameter type-id='1dc6a898' name='clk' filepath='drivers/mmc/host/sdhci.c' line='1720' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_irq' mangled-name='sdhci_cqe_irq' filepath='drivers/mmc/host/sdhci.c' line='3628' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_irq'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='3628' column='1'/>
+        <parameter type-id='19c2251e' name='intmask' filepath='drivers/mmc/host/sdhci.c' line='3628' column='1'/>
+        <parameter type-id='7292109c' name='cmd_error' filepath='drivers/mmc/host/sdhci.c' line='3628' column='1'/>
+        <parameter type-id='7292109c' name='data_error' filepath='drivers/mmc/host/sdhci.c' line='3629' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_enable' mangled-name='sdhci_cqe_enable' filepath='drivers/mmc/host/sdhci.c' line='3560' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_enable'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='3560' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_cqe_disable' mangled-name='sdhci_cqe_disable' filepath='drivers/mmc/host/sdhci.c' line='3604' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cqe_disable'>
+        <parameter type-id='dd575c43' name='mmc' filepath='drivers/mmc/host/sdhci.c' line='3604' column='1'/>
+        <parameter type-id='b50a4934' name='recovery' filepath='drivers/mmc/host/sdhci.c' line='3604' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_cleanup_host' mangled-name='sdhci_cleanup_host' filepath='drivers/mmc/host/sdhci.c' line='4411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_cleanup_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4411' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sdhci_add_host' mangled-name='sdhci_add_host' filepath='drivers/mmc/host/sdhci.c' line='4495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdhci_add_host'>
+        <parameter type-id='2661e0d9' name='host' filepath='drivers/mmc/host/sdhci.c' line='4495' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d3baf253'>
+        <parameter type-id='2661e0d9' name='host'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17a0b6f4'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7132e26'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1dc6a898'/>
+      </function-type>
+      <function-type size-in-bits='64' id='256a6e6c'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9bbd94a4'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='182265d5'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aac6e642'>
+        <parameter type-id='2661e0d9'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='846120de'>
+        <parameter type-id='2661e0d9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='859caa73'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='380397d5'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='6df3750c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3f5a3c1'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='47f117d4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='21f3c22e'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afcc3ab3'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b401e7c'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='173ca462'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fdfc457'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17d4a823'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cc5338'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d5c3e51'>
+        <parameter type-id='2661e0d9'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='cf29c9b3'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/mii.c' language='LANG_C89'>
+      <class-decl name='mii_if_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/mii.h' line='18' column='1' id='a9918a4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='advertising' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy_id_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reg_num_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/mii.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='full_duplex' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='force_media' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='supports_gmii' type-id='f0981eeb' visibility='default' filepath='include/linux/mii.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/mii.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mdio_read' type-id='b54cfa0f' visibility='default' filepath='include/linux/mii.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mdio_write' type-id='af22e097' visibility='default' filepath='include/linux/mii.h' line='30' 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='96' column='1' id='4e13c9d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supported' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='advertising' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='speed' type-id='d315442e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='duplex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='port' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phy_address' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='transceiver' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='autoneg' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='mdio_support' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='maxtxpkt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='maxrxpkt' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed_hi' type-id='d315442e' visibility='default' filepath='include/uapi/linux/ethtool.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='eth_tp_mdix' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='248'>
+          <var-decl name='eth_tp_mdix_ctrl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ethtool.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lp_advertising' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ethtool.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reserved' type-id='839e8989' visibility='default' filepath='include/uapi/linux/ethtool.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_ioctl_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/mii.h' line='159' column='1' id='535834b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phy_id' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reg_num' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='val_in' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='val_out' type-id='d315442e' visibility='default' filepath='include/uapi/linux/mii.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4e13c9d9' size-in-bits='64' id='d064f511'/>
+      <pointer-type-def type-id='a9918a4d' size-in-bits='64' id='f0150b1d'/>
+      <pointer-type-def type-id='535834b5' size-in-bits='64' id='eb5662e5'/>
+      <pointer-type-def type-id='58725ef3' size-in-bits='64' id='af22e097'/>
+      <function-decl name='mii_nway_restart' mangled-name='mii_nway_restart' filepath='drivers/net/mii.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_nway_restart'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='459' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_link_ok' mangled-name='mii_link_ok' filepath='drivers/net/mii.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_link_ok'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_ethtool_set_link_ksettings' mangled-name='mii_ethtool_set_link_ksettings' filepath='drivers/net/mii.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_set_link_ksettings'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='329' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/mii.c' line='330' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_ethtool_gset' mangled-name='mii_ethtool_gset' filepath='drivers/net/mii.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_gset'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='55' column='1'/>
+        <parameter type-id='d064f511' name='ecmd' filepath='drivers/net/mii.c' line='55' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mii_ethtool_get_link_ksettings' mangled-name='mii_ethtool_get_link_ksettings' filepath='drivers/net/mii.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_ethtool_get_link_ksettings'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='145' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/mii.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mii_check_media' mangled-name='mii_check_media' filepath='drivers/net/mii.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mii_check_media'>
+        <parameter type-id='f0150b1d' name='mii' filepath='drivers/net/mii.c' line='504' column='1'/>
+        <parameter type-id='f0981eeb' name='ok_to_print' filepath='drivers/net/mii.c' line='505' column='1'/>
+        <parameter type-id='f0981eeb' name='init_media' filepath='drivers/net/mii.c' line='506' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='generic_mii_ioctl' mangled-name='generic_mii_ioctl' filepath='drivers/net/mii.c' line='584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_mii_ioctl'>
+        <parameter type-id='f0150b1d' name='mii_if' filepath='drivers/net/mii.c' line='584' column='1'/>
+        <parameter type-id='eb5662e5' name='mii_data' filepath='drivers/net/mii.c' line='585' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/net/mii.c' line='585' column='1'/>
+        <parameter type-id='807869d3' name='duplex_chg_out' filepath='drivers/net/mii.c' line='586' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='58725ef3'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/phy/fixed_phy.c' language='LANG_C89'>
+      <class-decl name='fixed_phy_status' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/phy_fixed.h' line='5' column='1' id='2dc844b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='95e97e5e' visibility='default' filepath='include/linux/phy_fixed.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/phy_fixed.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duplex' type-id='95e97e5e' visibility='default' filepath='include/linux/phy_fixed.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy_fixed.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='asym_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/phy_fixed.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2dc844b4' size-in-bits='64' id='b5745132'/>
+      <function-decl name='fixed_phy_unregister' mangled-name='fixed_phy_unregister' filepath='drivers/net/phy/fixed_phy.c' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fixed_phy_unregister'>
+        <parameter type-id='7efbcaaf' name='phy' filepath='drivers/net/phy/fixed_phy.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fixed_phy_register' mangled-name='fixed_phy_register' filepath='drivers/net/phy/fixed_phy.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fixed_phy_register'>
+        <parameter type-id='f0981eeb' name='irq' filepath='drivers/net/phy/fixed_phy.c' line='316' column='1'/>
+        <parameter type-id='b5745132' name='status' filepath='drivers/net/phy/fixed_phy.c' line='317' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/net/phy/fixed_phy.c' line='318' column='1'/>
+        <return type-id='7efbcaaf'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/phy/mdio_bus.c' language='LANG_C89'>
+      <function-decl name='__mdiobus_register' mangled-name='__mdiobus_register' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mdiobus_register'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/net/phy/mdio_bus.c' line='369' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mdiobus_read' mangled-name='mdiobus_read' filepath='drivers/net/phy/mdio_bus.c' line='633' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_read'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='633' column='1'/>
+        <parameter type-id='95e97e5e' name='addr' filepath='drivers/net/phy/mdio_bus.c' line='633' column='1'/>
+        <parameter type-id='19c2251e' name='regnum' filepath='drivers/net/phy/mdio_bus.c' line='633' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mdiobus_write' mangled-name='mdiobus_write' filepath='drivers/net/phy/mdio_bus.c' line='686' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_write'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='686' column='1'/>
+        <parameter type-id='95e97e5e' name='addr' filepath='drivers/net/phy/mdio_bus.c' line='686' column='1'/>
+        <parameter type-id='19c2251e' name='regnum' filepath='drivers/net/phy/mdio_bus.c' line='686' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/net/phy/mdio_bus.c' line='686' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mdiobus_unregister' mangled-name='mdiobus_unregister' filepath='drivers/net/phy/mdio_bus.c' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_unregister'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='458' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mdiobus_free' mangled-name='mdiobus_free' filepath='drivers/net/phy/mdio_bus.c' line='495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_free'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/mdio_bus.c' line='495' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mdiobus_alloc_size' mangled-name='mdiobus_alloc_size' filepath='drivers/net/phy/mdio_bus.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mdiobus_alloc_size'>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/net/phy/mdio_bus.c' line='146' column='1'/>
+        <return type-id='ff47b24b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/phy/phy-core.c' language='LANG_C89'>
+      <function-decl name='phy_read_mmd' mangled-name='phy_read_mmd' filepath='drivers/net/phy/phy-core.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_read_mmd'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy-core.c' line='410' column='1'/>
+        <parameter type-id='95e97e5e' name='devad' filepath='drivers/net/phy/phy-core.c' line='410' column='1'/>
+        <parameter type-id='19c2251e' name='regnum' filepath='drivers/net/phy/phy-core.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_write_mmd' mangled-name='phy_write_mmd' filepath='drivers/net/phy/phy-core.c' line='471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_write_mmd'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy-core.c' line='471' column='1'/>
+        <parameter type-id='95e97e5e' name='devad' filepath='drivers/net/phy/phy-core.c' line='471' column='1'/>
+        <parameter type-id='19c2251e' name='regnum' filepath='drivers/net/phy/phy-core.c' line='471' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/net/phy/phy-core.c' line='471' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/phy/phy.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='488' id='1de7616e'>
+        <subrange length='61' type-id='7ff19f0f' id='b51728a6'/>
+      </array-type-def>
+      <class-decl name='phylink' is-struct='yes' visibility='default' is-declaration-only='yes' id='7d5dfb1c'/>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1024' id='9e942f0d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='efa21d3b' size-in-bits='2048' id='70a48c94'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='mdio_device' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='26' column='1' id='f3a32dbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/mdio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='bus' type-id='ff47b24b' visibility='default' filepath='include/linux/mdio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/mdio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='bus_match' type-id='2f28f04c' visibility='default' filepath='include/linux/mdio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='device_free' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='device_remove' type-id='a5490056' visibility='default' filepath='include/linux/mdio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='addr' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='reset_gpio' type-id='26760480' visibility='default' filepath='include/linux/mdio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='reset_ctrl' type-id='9f9b8114' visibility='default' filepath='include/linux/mdio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='reset_assert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='reset_deassert_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/mdio.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mii_bus' size-in-bits='12032' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='213' column='1' id='ed5381db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/phy.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='1de7616e' visibility='default' filepath='include/linux/phy.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='22ad5849' visibility='default' filepath='include/linux/phy.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='e10d6bae' visibility='default' filepath='include/linux/phy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='reset' type-id='6edade7b' visibility='default' filepath='include/linux/phy.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mdio_lock' type-id='925167dc' visibility='default' filepath='include/linux/phy.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/phy.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='state' type-id='08f5ca1c' visibility='default' filepath='include/linux/phy.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='mdio_map' type-id='70a48c94' visibility='default' filepath='include/linux/phy.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='phy_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10848'>
+          <var-decl name='phy_ignore_ta_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='irq' type-id='9e942f0d' visibility='default' filepath='include/linux/phy.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='reset_delay_us' type-id='95e97e5e' visibility='default' filepath='include/linux/phy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='reset_gpiod' type-id='26760480' visibility='default' filepath='include/linux/phy.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/linux/phy.h' line='229' column='1' id='08f5ca1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='4160' is-struct='yes' visibility='default' filepath='include/linux/phy.h' line='476' column='1' id='84a0e7ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mdiodrv' type-id='7eda6831' visibility='default' filepath='include/linux/phy.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='phy_id' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/phy.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='phy_id_mask' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='3635993f' visibility='default' filepath='include/linux/phy.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/phy.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_reset' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='config_init' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='probe' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='get_features' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='suspend' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='resume' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='config_aneg' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='aneg_done' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='read_status' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ack_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='config_intr' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='did_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='handle_interrupt' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='remove' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='match_phy_device' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='ts_info' type-id='21cdc373' visibility='default' filepath='include/linux/phy.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hwtstamp' type-id='f2c45924' visibility='default' filepath='include/linux/phy.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='rxtstamp' type-id='bce7b4e2' visibility='default' filepath='include/linux/phy.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='txtstamp' type-id='b8bd68c5' visibility='default' filepath='include/linux/phy.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wol' type-id='47f66a6b' visibility='default' filepath='include/linux/phy.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='get_wol' type-id='887cf9b8' visibility='default' filepath='include/linux/phy.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='link_change_notify' type-id='0634414a' visibility='default' filepath='include/linux/phy.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='read_mmd' type-id='3eb4a20d' visibility='default' filepath='include/linux/phy.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='write_mmd' type-id='4c9695fa' visibility='default' filepath='include/linux/phy.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='read_page' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='write_page' type-id='b1be7154' visibility='default' filepath='include/linux/phy.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='module_info' type-id='930fcda9' visibility='default' filepath='include/linux/phy.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='module_eeprom' type-id='51f1236c' visibility='default' filepath='include/linux/phy.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_sset_count' type-id='aa2748ad' visibility='default' filepath='include/linux/phy.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='get_strings' type-id='0cce9961' visibility='default' filepath='include/linux/phy.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='get_stats' type-id='44fd4636' visibility='default' filepath='include/linux/phy.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='get_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='set_tunable' type-id='1cc860f2' visibility='default' filepath='include/linux/phy.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_loopback' type-id='f727c4d8' visibility='default' filepath='include/linux/phy.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/phy.h' line='642' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mdio_driver_common' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/mdio.h' line='47' column='1' id='7eda6831'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/mdio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mdio.h' line='49' 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='324' column='1' id='0463cbfd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devices_in_package' type-id='19c2251e' visibility='default' filepath='include/linux/phy.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device_ids' type-id='1c6311dd' visibility='default' filepath='include/linux/phy.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_state' filepath='include/linux/phy.h' line='310' column='1' id='d29ba889'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PHY_DOWN' value='0'/>
+        <enumerator name='PHY_READY' value='1'/>
+        <enumerator name='PHY_HALTED' value='2'/>
+        <enumerator name='PHY_UP' value='3'/>
+        <enumerator name='PHY_RUNNING' value='4'/>
+        <enumerator name='PHY_NOLINK' value='5'/>
+      </enum-decl>
+      <typedef-decl name='phy_interface_t' type-id='08f5ca19' filepath='include/linux/phy.h' line='107' column='1' id='d61bf978'/>
+      <enum-decl name='__anonymous_enum__3' is-anonymous='yes' filepath='include/linux/phy.h' line='80' column='1' id='08f5ca19'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_USXGMII' value='23'/>
+        <enumerator name='PHY_INTERFACE_MODE_MAX' value='24'/>
+      </enum-decl>
+      <qualified-type-def type-id='f9b37274' const='yes' id='3635993f'/>
+      <pointer-type-def type-id='89f717fe' size-in-bits='64' id='40c31434'/>
+      <pointer-type-def type-id='07b37f3f' size-in-bits='64' id='6edade7b'/>
+      <pointer-type-def type-id='07dc6635' size-in-bits='64' id='22ad5849'/>
+      <pointer-type-def type-id='c85b8434' size-in-bits='64' id='e10d6bae'/>
+      <pointer-type-def type-id='c657e2b9' size-in-bits='64' id='aa2748ad'/>
+      <pointer-type-def type-id='918531c2' size-in-bits='64' id='51f1236c'/>
+      <pointer-type-def type-id='26a5fedd' size-in-bits='64' id='930fcda9'/>
+      <pointer-type-def type-id='4f200117' size-in-bits='64' id='21cdc373'/>
+      <pointer-type-def type-id='b69cad70' size-in-bits='64' id='1cc860f2'/>
+      <pointer-type-def type-id='43ffd497' size-in-bits='64' id='47f66a6b'/>
+      <pointer-type-def type-id='78ee2032' size-in-bits='64' id='f2c45924'/>
+      <pointer-type-def type-id='c76bfb3a' size-in-bits='64' id='b1be7154'/>
+      <pointer-type-def type-id='501579d1' size-in-bits='64' id='3eb4a20d'/>
+      <pointer-type-def type-id='a5dc8838' size-in-bits='64' id='4c9695fa'/>
+      <pointer-type-def type-id='05cd341e' size-in-bits='64' id='f727c4d8'/>
+      <pointer-type-def type-id='f3a32dbb' size-in-bits='64' id='efa21d3b'/>
+      <pointer-type-def type-id='ed5381db' size-in-bits='64' id='ff47b24b'/>
+      <pointer-type-def type-id='84a0e7ab' size-in-bits='64' id='e812884b'/>
+      <pointer-type-def type-id='7d5dfb1c' size-in-bits='64' id='56f3c6ca'/>
+      <pointer-type-def type-id='8abd4c90' size-in-bits='64' id='bce7b4e2'/>
+      <pointer-type-def type-id='a733634c' size-in-bits='64' id='a5490056'/>
+      <pointer-type-def type-id='6909d288' size-in-bits='64' id='0634414a'/>
+      <pointer-type-def type-id='2bb0168c' size-in-bits='64' id='44fd4636'/>
+      <pointer-type-def type-id='226cc4c6' size-in-bits='64' id='887cf9b8'/>
+      <pointer-type-def type-id='20948739' size-in-bits='64' id='b8bd68c5'/>
+      <pointer-type-def type-id='8999d61c' size-in-bits='64' id='8a09feb6'/>
+      <pointer-type-def type-id='31fdacad' size-in-bits='64' id='0cce9961'/>
+      <function-decl name='phy_stop' mangled-name='phy_stop' filepath='drivers/net/phy/phy.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_stop'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='856' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_start' mangled-name='phy_start' filepath='drivers/net/phy/phy.c' line='890' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_start'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='890' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_print_status' mangled-name='phy_print_status' filepath='drivers/net/phy/phy.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_print_status'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_mii_ioctl' mangled-name='phy_mii_ioctl' filepath='drivers/net/phy/phy.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_mii_ioctl'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='401' column='1'/>
+        <parameter type-id='d494b97c' name='ifr' filepath='drivers/net/phy/phy.c' line='401' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/net/phy/phy.c' line='401' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_set_wol' mangled-name='phy_ethtool_set_wol' filepath='drivers/net/phy/phy.c' line='1195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_set_wol'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='1195' column='1'/>
+        <parameter type-id='fde1bbcb' name='wol' filepath='drivers/net/phy/phy.c' line='1195' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_set_link_ksettings' mangled-name='phy_ethtool_set_link_ksettings' filepath='drivers/net/phy/phy.c' line='1225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_set_link_ksettings'>
+        <parameter type-id='68a2d05b' name='ndev' filepath='drivers/net/phy/phy.c' line='1225' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/phy/phy.c' line='1226' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_ksettings_set' mangled-name='phy_ethtool_ksettings_set' filepath='drivers/net/phy/phy.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_ksettings_set'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='315' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/phy/phy.c' line='316' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_set_eee' mangled-name='phy_ethtool_set_eee' filepath='drivers/net/phy/phy.c' line='1153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_set_eee'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='1153' column='1'/>
+        <parameter type-id='eced47f6' name='data' filepath='drivers/net/phy/phy.c' line='1153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_nway_reset' mangled-name='phy_ethtool_nway_reset' filepath='drivers/net/phy/phy.c' line='1237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_nway_reset'>
+        <parameter type-id='68a2d05b' name='ndev' filepath='drivers/net/phy/phy.c' line='1237' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_ksettings_get' mangled-name='phy_ethtool_ksettings_get' filepath='drivers/net/phy/phy.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_ksettings_get'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='367' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/phy/phy.c' line='368' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_get_link_ksettings' mangled-name='phy_ethtool_get_link_ksettings' filepath='drivers/net/phy/phy.c' line='1211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_get_link_ksettings'>
+        <parameter type-id='68a2d05b' name='ndev' filepath='drivers/net/phy/phy.c' line='1211' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/phy/phy.c' line='1212' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_ethtool_get_eee' mangled-name='phy_ethtool_get_eee' filepath='drivers/net/phy/phy.c' line='1114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_ethtool_get_eee'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy.c' line='1114' column='1'/>
+        <parameter type-id='eced47f6' name='data' filepath='drivers/net/phy/phy.c' line='1114' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='07b37f3f'>
+        <parameter type-id='ff47b24b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07dc6635'>
+        <parameter type-id='ff47b24b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c85b8434'>
+        <parameter type-id='ff47b24b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c657e2b9'>
+        <parameter type-id='7efbcaaf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918531c2'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='02557527'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26a5fedd'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='b1e844c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f200117'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='fa058983'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b69cad70'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='40c31434'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43ffd497'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78ee2032'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='d494b97c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c76bfb3a'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='501579d1'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a5dc8838'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cd341e'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8abd4c90'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a733634c'>
+        <parameter type-id='efa21d3b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6909d288'>
+        <parameter type-id='7efbcaaf' name='phydev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bb0168c'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='226cc4c6'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='fde1bbcb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20948739'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8999d61c'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31fdacad'>
+        <parameter type-id='7efbcaaf'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/phy/phy_device.c' language='LANG_C89'>
+      <function-decl name='genphy_read_status' mangled-name='genphy_read_status' filepath='drivers/net/phy/phy_device.c' line='1854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genphy_read_status'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='1854' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__genphy_config_aneg' mangled-name='__genphy_config_aneg' filepath='drivers/net/phy/phy_device.c' line='1693' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__genphy_config_aneg'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='1693' column='1'/>
+        <parameter type-id='b50a4934' name='changed' filepath='drivers/net/phy/phy_device.c' line='1693' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='genphy_resume' mangled-name='genphy_resume' filepath='drivers/net/phy/phy_device.c' line='2007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genphy_resume'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='2007' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_unregister_fixup_for_uid' mangled-name='phy_unregister_fixup_for_uid' filepath='drivers/net/phy/phy_device.c' line='429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_unregister_fixup_for_uid'>
+        <parameter type-id='19c2251e' name='phy_uid' filepath='drivers/net/phy/phy_device.c' line='429' column='1'/>
+        <parameter type-id='19c2251e' name='phy_uid_mask' filepath='drivers/net/phy/phy_device.c' line='429' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_remove_link_mode' mangled-name='phy_remove_link_mode' filepath='drivers/net/phy/phy_device.c' line='2029' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_remove_link_mode'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='2029' column='1'/>
+        <parameter type-id='19c2251e' name='link_mode' filepath='drivers/net/phy/phy_device.c' line='2029' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_register_fixup_for_uid' mangled-name='phy_register_fixup_for_uid' filepath='drivers/net/phy/phy_device.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_register_fixup_for_uid'>
+        <parameter type-id='19c2251e' name='phy_uid' filepath='drivers/net/phy/phy_device.c' line='380' column='1'/>
+        <parameter type-id='19c2251e' name='phy_uid_mask' filepath='drivers/net/phy/phy_device.c' line='380' column='1'/>
+        <parameter type-id='aa2748ad' name='run' filepath='drivers/net/phy/phy_device.c' line='381' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_find_first' mangled-name='phy_find_first' filepath='drivers/net/phy/phy_device.c' line='903' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_find_first'>
+        <parameter type-id='ff47b24b' name='bus' filepath='drivers/net/phy/phy_device.c' line='903' column='1'/>
+        <return type-id='7efbcaaf'/>
+      </function-decl>
+      <function-decl name='phy_disconnect' mangled-name='phy_disconnect' filepath='drivers/net/phy/phy_device.c' line='1023' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_disconnect'>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='1023' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='phy_connect_direct' mangled-name='phy_connect_direct' filepath='drivers/net/phy/phy_device.c' line='955' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_connect_direct'>
+        <parameter type-id='68a2d05b' name='dev' filepath='drivers/net/phy/phy_device.c' line='955' column='1'/>
+        <parameter type-id='7efbcaaf' name='phydev' filepath='drivers/net/phy/phy_device.c' line='955' column='1'/>
+        <parameter type-id='548eee3a' name='handler' filepath='drivers/net/phy/phy_device.c' line='956' column='1'/>
+        <parameter type-id='d61bf978' name='interface' filepath='drivers/net/phy/phy_device.c' line='957' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_connect' mangled-name='phy_connect' filepath='drivers/net/phy/phy_device.c' line='991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_connect'>
+        <parameter type-id='68a2d05b' name='dev' filepath='drivers/net/phy/phy_device.c' line='991' column='1'/>
+        <parameter type-id='80f4b756' name='bus_id' filepath='drivers/net/phy/phy_device.c' line='991' column='1'/>
+        <parameter type-id='548eee3a' name='handler' filepath='drivers/net/phy/phy_device.c' line='992' column='1'/>
+        <parameter type-id='d61bf978' name='interface' filepath='drivers/net/phy/phy_device.c' line='993' column='1'/>
+        <return type-id='7efbcaaf'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/ppp/ppp_generic.c' language='LANG_C89'>
+      <type-decl name='double' size-in-bits='64' id='a0eb0f08'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1' id='1a99b3b8'>
+        <data-member access='public'>
+          <var-decl name='s' type-id='88d8a388' visibility='default' filepath='include/net/netns/generic.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='baf98fd3' 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='88d8a388'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='f0981eeb' 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='e3d8ce29' visibility='default' filepath='include/net/netns/generic.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ppp_channel' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='33' column='1' id='21893e8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='d65a12b3' visibility='default' filepath='include/linux/ppp_channel.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mtu' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='hdrlen' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ppp' type-id='eaa32e2f' visibility='default' filepath='include/linux/ppp_channel.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='latency' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp_channel.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ppp_channel_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ppp_channel.h' line='25' column='1' id='2134e0b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_xmit' type-id='7c56bbaf' visibility='default' filepath='include/linux/ppp_channel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioctl' type-id='a7844efb' visibility='default' filepath='include/linux/ppp_channel.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compressor' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/ppp-comp.h' line='33' column='1' id='fd122cd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compress_proto' type-id='95e97e5e' visibility='default' filepath='include/linux/ppp-comp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='comp_alloc' type-id='26560df0' visibility='default' filepath='include/linux/ppp-comp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='comp_free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='comp_init' type-id='03237108' visibility='default' filepath='include/linux/ppp-comp.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='comp_reset' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compress' type-id='c35da6ff' visibility='default' filepath='include/linux/ppp-comp.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='comp_stat' type-id='20cd282d' visibility='default' filepath='include/linux/ppp-comp.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='decomp_alloc' type-id='26560df0' visibility='default' filepath='include/linux/ppp-comp.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='decomp_free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='decomp_init' type-id='eef261f7' visibility='default' filepath='include/linux/ppp-comp.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='decomp_reset' type-id='b7f9d8e6' visibility='default' filepath='include/linux/ppp-comp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='decompress' type-id='836fd925' visibility='default' filepath='include/linux/ppp-comp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='incomp' type-id='15f4611e' visibility='default' filepath='include/linux/ppp-comp.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='decomp_stat' type-id='20cd282d' visibility='default' filepath='include/linux/ppp-comp.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/ppp-comp.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='comp_extra' type-id='f0981eeb' visibility='default' filepath='include/linux/ppp-comp.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='compstat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='117' column='1' id='3e92d9e8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unc_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='unc_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='comp_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='comp_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='inc_bytes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='inc_packets' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='in_count' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='bytes_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ratio' type-id='a0eb0f08' visibility='default' filepath='include/uapi/linux/ppp_defs.h' line='129' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fd122cd4' size-in-bits='64' id='a3e624c2'/>
+      <pointer-type-def type-id='3e92d9e8' size-in-bits='64' id='3fc786be'/>
+      <qualified-type-def type-id='2134e0b8' const='yes' id='2994de4b'/>
+      <pointer-type-def type-id='2994de4b' size-in-bits='64' id='d65a12b3'/>
+      <pointer-type-def type-id='fca2ff53' size-in-bits='64' id='7c56bbaf'/>
+      <pointer-type-def type-id='4f40b107' size-in-bits='64' id='a7844efb'/>
+      <pointer-type-def type-id='e9a8dd3e' size-in-bits='64' id='03237108'/>
+      <pointer-type-def type-id='624c84d3' size-in-bits='64' id='eef261f7'/>
+      <pointer-type-def type-id='43e9dd11' size-in-bits='64' id='836fd925'/>
+      <pointer-type-def type-id='3d8098a3' size-in-bits='64' id='c35da6ff'/>
+      <pointer-type-def type-id='21893e8b' size-in-bits='64' id='b8e94b0b'/>
+      <pointer-type-def type-id='2c09b409' size-in-bits='64' id='20cd282d'/>
+      <pointer-type-def type-id='7591d8fc' size-in-bits='64' id='15f4611e'/>
+      <pointer-type-def type-id='ee9a0086' size-in-bits='64' id='26560df0'/>
+      <function-decl name='ppp_register_net_channel' mangled-name='ppp_register_net_channel' filepath='drivers/net/ppp/ppp_generic.c' line='2611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_net_channel'>
+        <parameter type-id='a2bff676' name='net' filepath='drivers/net/ppp/ppp_generic.c' line='2611' column='1'/>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2611' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_unregister_compressor' mangled-name='ppp_unregister_compressor' filepath='drivers/net/ppp/ppp_generic.c' line='2978' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unregister_compressor'>
+        <parameter type-id='a3e624c2' name='cp' filepath='drivers/net/ppp/ppp_generic.c' line='2978' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_unregister_channel' mangled-name='ppp_unregister_channel' filepath='drivers/net/ppp/ppp_generic.c' line='2696' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unregister_channel'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2696' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_unit_number' mangled-name='ppp_unit_number' filepath='drivers/net/ppp/ppp_generic.c' line='2659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_unit_number'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2659' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_register_compressor' mangled-name='ppp_register_compressor' filepath='drivers/net/ppp/ppp_generic.c' line='2956' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_compressor'>
+        <parameter type-id='a3e624c2' name='cp' filepath='drivers/net/ppp/ppp_generic.c' line='2956' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_register_channel' mangled-name='ppp_register_channel' filepath='drivers/net/ppp/ppp_generic.c' line='2605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_register_channel'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2605' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ppp_output_wakeup' mangled-name='ppp_output_wakeup' filepath='drivers/net/ppp/ppp_generic.c' line='2733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_output_wakeup'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2733' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_input_error' mangled-name='ppp_input_error' filepath='drivers/net/ppp/ppp_generic.c' line='2055' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_input_error'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2055' column='1'/>
+        <parameter type-id='95e97e5e' name='code' filepath='drivers/net/ppp/ppp_generic.c' line='2055' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_input' mangled-name='ppp_input' filepath='drivers/net/ppp/ppp_generic.c' line='2016' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_input'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2016' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='drivers/net/ppp/ppp_generic.c' line='2016' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ppp_dev_name' mangled-name='ppp_dev_name' filepath='drivers/net/ppp/ppp_generic.c' line='2676' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_dev_name'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2676' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='ppp_channel_index' mangled-name='ppp_channel_index' filepath='drivers/net/ppp/ppp_generic.c' line='2647' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ppp_channel_index'>
+        <parameter type-id='b8e94b0b' name='chan' filepath='drivers/net/ppp/ppp_generic.c' line='2647' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fca2ff53'>
+        <parameter type-id='b8e94b0b'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f40b107'>
+        <parameter type-id='b8e94b0b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e9a8dd3e'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='624c84d3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43e9dd11'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d8098a3'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c09b409'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3fc786be'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7591d8fc'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee9a0086'>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/ppp/pppox.c' language='LANG_C89'>
+      <class-decl name='pppox_proto' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/if_pppox.h' line='72' column='1' id='6f9bf471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='f4306620' visibility='default' filepath='include/linux/if_pppox.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/if_pppox.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/if_pppox.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6f9bf471' const='yes' id='2f8dd5c2'/>
+      <pointer-type-def type-id='2f8dd5c2' size-in-bits='64' id='c447bc38'/>
+      <pointer-type-def type-id='a45265de' size-in-bits='64' id='f4306620'/>
+      <function-decl name='unregister_pppox_proto' mangled-name='unregister_pppox_proto' filepath='drivers/net/ppp/pppox.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pppox_proto'>
+        <parameter type-id='95e97e5e' name='proto_num' filepath='drivers/net/ppp/pppox.c' line='47' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_pppox_proto' mangled-name='register_pppox_proto' filepath='drivers/net/ppp/pppox.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pppox_proto'>
+        <parameter type-id='95e97e5e' name='proto_num' filepath='drivers/net/ppp/pppox.c' line='37' column='1'/>
+        <parameter type-id='c447bc38' name='pp' filepath='drivers/net/ppp/pppox.c' line='37' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pppox_unbind_sock' mangled-name='pppox_unbind_sock' filepath='drivers/net/ppp/pppox.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_unbind_sock'>
+        <parameter type-id='f772df6d' name='sk' filepath='drivers/net/ppp/pppox.c' line='53' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pppox_ioctl' mangled-name='pppox_ioctl' filepath='drivers/net/ppp/pppox.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/net/ppp/pppox.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pppox_compat_ioctl' mangled-name='pppox_compat_ioctl' filepath='drivers/net/ppp/pppox.c' line='103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pppox_compat_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/net/ppp/pppox.c' line='103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a45265de'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/slip/slhc.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='512' id='b1888bf8'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='slcompress' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/slhc_vj.h' line='143' column='1' id='5accd2c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tstate' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rstate' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tslot_limit' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='rslot_limit' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='xmit_oldest' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='xmit_current' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='recv_current' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='flags' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sls_o_nontcp' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='sls_o_tcp' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sls_o_uncompressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sls_o_compressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sls_o_searches' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='sls_o_misses' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sls_i_uncompressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sls_i_compressed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sls_i_error' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='sls_i_tossed' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sls_i_runt' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='sls_i_badcheck' type-id='93e3c360' visibility='default' filepath='include/net/slhc_vj.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cstate' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/slhc_vj.h' line='128' column='1' id='dd60e4df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cs_this' type-id='b937765d' visibility='default' filepath='include/net/slhc_vj.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/net/slhc_vj.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='15436247' visibility='default' filepath='include/net/slhc_vj.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cs_ip' type-id='1edbefa6' visibility='default' filepath='include/net/slhc_vj.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cs_tcp' type-id='7d506d7a' visibility='default' filepath='include/net/slhc_vj.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cs_ipopt' type-id='b1888bf8' visibility='default' filepath='include/net/slhc_vj.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='cs_tcpopt' type-id='b1888bf8' visibility='default' filepath='include/net/slhc_vj.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='cs_hsize' type-id='95e97e5e' visibility='default' filepath='include/net/slhc_vj.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='byte_t' type-id='8f048e17' filepath='include/net/slhc_vj.h' line='119' column='1' id='b937765d'/>
+      <class-decl name='iphdr' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ip.h' line='86' column='1' id='1edbefa6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ihl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tot_len' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='frag_off' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/ip.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ttl' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='protocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ip.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='check' type-id='7dac1e36' visibility='default' filepath='include/uapi/linux/ip.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/ip.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcphdr' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/tcp.h' line='25' column='1' id='7d506d7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='source' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dest' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='seq' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/tcp.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ack_seq' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/tcp.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='res1' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='doff' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='fin' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='syn' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='rst' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='psh' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='ack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='urg' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='ece' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='cwr' type-id='d315442e' visibility='default' filepath='include/uapi/linux/tcp.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='window' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='check' type-id='7dac1e36' visibility='default' filepath='include/uapi/linux/tcp.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='urg_ptr' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/tcp.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='int32' type-id='3f1a6b60' filepath='include/net/slhc_vj.h' line='120' column='1' id='93e3c360'/>
+      <pointer-type-def type-id='dd60e4df' size-in-bits='64' id='15436247'/>
+      <pointer-type-def type-id='5accd2c2' size-in-bits='64' id='b87ee0a0'/>
+      <pointer-type-def type-id='cf536864' size-in-bits='64' id='ae4d32ca'/>
+      <function-decl name='slhc_compress' mangled-name='slhc_compress' filepath='drivers/net/slip/slhc.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_compress'>
+        <parameter type-id='b87ee0a0' name='comp' filepath='drivers/net/slip/slhc.c' line='227' column='1'/>
+        <parameter type-id='cf536864' name='icp' filepath='drivers/net/slip/slhc.c' line='227' column='1'/>
+        <parameter type-id='95e97e5e' name='isize' filepath='drivers/net/slip/slhc.c' line='227' column='1'/>
+        <parameter type-id='cf536864' name='ocp' filepath='drivers/net/slip/slhc.c' line='228' column='1'/>
+        <parameter type-id='ae4d32ca' name='cpp' filepath='drivers/net/slip/slhc.c' line='228' column='1'/>
+        <parameter type-id='95e97e5e' name='compress_cid' filepath='drivers/net/slip/slhc.c' line='228' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_init' mangled-name='slhc_init' filepath='drivers/net/slip/slhc.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_init'>
+        <parameter type-id='95e97e5e' name='rslots' filepath='drivers/net/slip/slhc.c' line='92' column='1'/>
+        <parameter type-id='95e97e5e' name='tslots' filepath='drivers/net/slip/slhc.c' line='92' column='1'/>
+        <return type-id='b87ee0a0'/>
+      </function-decl>
+      <function-decl name='slhc_uncompress' mangled-name='slhc_uncompress' filepath='drivers/net/slip/slhc.c' line='493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_uncompress'>
+        <parameter type-id='b87ee0a0' name='comp' filepath='drivers/net/slip/slhc.c' line='493' column='1'/>
+        <parameter type-id='cf536864' name='icp' filepath='drivers/net/slip/slhc.c' line='493' column='1'/>
+        <parameter type-id='95e97e5e' name='isize' filepath='drivers/net/slip/slhc.c' line='493' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_remember' mangled-name='slhc_remember' filepath='drivers/net/slip/slhc.c' line='644' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_remember'>
+        <parameter type-id='b87ee0a0' name='comp' filepath='drivers/net/slip/slhc.c' line='644' column='1'/>
+        <parameter type-id='cf536864' name='icp' filepath='drivers/net/slip/slhc.c' line='644' column='1'/>
+        <parameter type-id='95e97e5e' name='isize' filepath='drivers/net/slip/slhc.c' line='644' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_toss' mangled-name='slhc_toss' filepath='drivers/net/slip/slhc.c' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_toss'>
+        <parameter type-id='b87ee0a0' name='comp' filepath='drivers/net/slip/slhc.c' line='695' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='slhc_free' mangled-name='slhc_free' filepath='drivers/net/slip/slhc.c' line='154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='slhc_free'>
+        <parameter type-id='b87ee0a0' name='comp' filepath='drivers/net/slip/slhc.c' line='154' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <typedef-decl name='__sum16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='36' column='1' id='7dac1e36'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/net/usb/usbnet.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='32' id='df785d68'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <class-decl name='ep_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='7eea96b3'/>
+      <class-decl name='usb_tt' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='565' column='1' id='7dda8bf2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hub' type-id='25e60cb2' visibility='default' filepath='include/linux/usb/hcd.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='multi' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='think_time' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/hcd.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/hcd.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clear_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/hcd.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clear_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='579' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wusb_dev' is-struct='yes' visibility='default' is-declaration-only='yes' id='bb4afb30'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='320' id='f06fd798'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='15adb516' size-in-bits='1024' id='cfc91983'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b7481dd4' size-in-bits='infinite' id='26179f78'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8bf48c31' size-in-bits='2048' id='a2aad346'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e4a73b37' size-in-bits='1024' id='3e3c9632'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='723114f6' size-in-bits='2048' id='11a8d8e5'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fc6d031c' size-in-bits='infinite' id='b585dd30'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='usb_interface' size-in-bits='8576' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='233' column='1' id='5b653fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altsetting' type-id='2ac920d2' visibility='default' filepath='include/linux/usb.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cur_altsetting' type-id='2ac920d2' visibility='default' filepath='include/linux/usb.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_altsetting' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='e4a73b37' visibility='default' filepath='include/linux/usb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='condition' type-id='3cabc9fc' visibility='default' filepath='include/linux/usb.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysfs_files_created' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='ep_devs_created' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unregistering' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='needs_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='needs_altsetting0' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='needs_binding' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='resetting_device' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='authorized' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='usb_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='reset_ws' type-id='ef9025d0' visibility='default' filepath='include/linux/usb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='265' 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='83' column='1' id='b7481dd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='6be9d6a7' visibility='default' filepath='include/linux/usb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='endpoint' type-id='15adb516' visibility='default' filepath='include/linux/usb.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='94' 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='385' column='1' id='6be9d6a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bInterfaceNumber' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bAlternateSetting' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumEndpoints' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bInterfaceClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterfaceSubClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bInterfaceProtocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='395' 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='68' column='1' id='325f6f30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='2b1e6e59' visibility='default' filepath='include/linux/usb.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ss_ep_comp' type-id='1f03d7fe' visibility='default' filepath='include/linux/usb.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='ssp_isoc_ep_comp' type-id='a7a7a133' visibility='default' filepath='include/linux/usb.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ep_dev' type-id='7b923743' visibility='default' filepath='include/linux/usb.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='streams' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='79' 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='403' column='1' id='2b1e6e59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bEndpointAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wMaxPacketSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bInterval' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bRefresh' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bSynchAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='415' 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='685' column='1' id='1f03d7fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bMaxBurst' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wBytesPerInterval' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='691' 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='673' column='1' id='a7a7a133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wReseved' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dwBytesPerInterval' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='677' 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='779' column='1' id='d1a7f9af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bFirstInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bInterfaceCount' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bFunctionClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bFunctionSubClass' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionProtocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='iFunction' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='788' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_interface_condition' filepath='include/linux/usb.h' line='97' column='1' id='3cabc9fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='121' column='1' id='391a9024'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_flags' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idVendor' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idProduct' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bcdDevice_lo' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bcdDevice_hi' type-id='d315442e' visibility='default' filepath='include/linux/mod_devicetable.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='bDeviceClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='bDeviceSubClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bDeviceProtocol' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='bInterfaceClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='bInterfaceSubClass' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bInterfaceProtocol' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bInterfaceNumber' type-id='8f048e17' visibility='default' filepath='include/linux/mod_devicetable.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_info' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usbnet' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/usb/usbnet.h' line='29' column='1' id='53f069ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='udev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb/usbnet.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='intf' type-id='8bf48c31' visibility='default' filepath='include/linux/usb/usbnet.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_info' type-id='541453cb' visibility='default' filepath='include/linux/usb/usbnet.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/usbnet.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/usbnet.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/usb/usbnet.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='phy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb/usbnet.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend_count' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='pkt_cnt' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='pkt_err' type-id='002ac4a6' visibility='default' filepath='include/linux/usb/usbnet.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rx_qlen' type-id='8efea9e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='tx_qlen' type-id='8efea9e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='can_dma_sg' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='status' type-id='15adb516' visibility='default' filepath='include/linux/usb/usbnet.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='delay' type-id='abe41e67' visibility='default' filepath='include/linux/usb/usbnet.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='padding_pkt' type-id='80f4b756' visibility='default' filepath='include/linux/usb/usbnet.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='net' type-id='68a2d05b' visibility='default' filepath='include/linux/usb/usbnet.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='msg_enable' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='f06fd798' visibility='default' filepath='include/linux/usb/usbnet.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='xid' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='hard_mtu' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='rx_urb_size' type-id='b59d7dce' visibility='default' filepath='include/linux/usb/usbnet.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mii' type-id='a9918a4d' visibility='default' filepath='include/linux/usb/usbnet.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='rxq' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='txq' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='done' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rxq_pause' type-id='e61c85d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='interrupt' type-id='ab85b8f2' visibility='default' filepath='include/linux/usb/usbnet.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='interrupt_count' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/usbnet.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='interrupt_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb/usbnet.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='deferred' type-id='b3bcc053' visibility='default' filepath='include/linux/usb/usbnet.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='bh' type-id='7a7ea727' visibility='default' filepath='include/linux/usb/usbnet.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='stats64' type-id='90cd86e5' visibility='default' filepath='include/linux/usb/usbnet.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='kevent' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/usbnet.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/usb/usbnet.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='rx_speed' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='tx_speed' type-id='19c2251e' visibility='default' filepath='include/linux/usb/usbnet.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_device' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='647' column='1' id='39b596d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devnum' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='devpath' type-id='ac1fa8c0' visibility='default' filepath='include/linux/usb.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='route' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='901a91cb' visibility='default' filepath='include/linux/usb.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='speed' type-id='4e532009' visibility='default' filepath='include/linux/usb.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_lanes' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_lanes' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tt' type-id='bf95a8f0' visibility='default' filepath='include/linux/usb.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ttport' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='toggle' type-id='0d532ec1' visibility='default' filepath='include/linux/usb.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bus' type-id='3ab7d422' visibility='default' filepath='include/linux/usb.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ep0' type-id='325f6f30' visibility='default' filepath='include/linux/usb.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='descriptor' type-id='582de67c' visibility='default' filepath='include/linux/usb.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='bos' type-id='ea484b4b' visibility='default' filepath='include/linux/usb.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='config' type-id='2ba3cceb' visibility='default' filepath='include/linux/usb.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='actconfig' type-id='2ba3cceb' visibility='default' filepath='include/linux/usb.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='ep_in' type-id='cfc91983' visibility='default' filepath='include/linux/usb.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='ep_out' type-id='cfc91983' visibility='default' filepath='include/linux/usb.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='rawdescriptors' type-id='9b23c9ad' visibility='default' filepath='include/linux/usb.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='bus_mA' type-id='8efea9e5' visibility='default' filepath='include/linux/usb.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11280'>
+          <var-decl name='portnum' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11288'>
+          <var-decl name='level' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11296'>
+          <var-decl name='devaddr' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='can_submit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='persist_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='have_langid' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='authorized' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='authenticated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='wusb' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='usb2_hw_lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='usb2_hw_lpm_besl_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='usb2_hw_lpm_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='usb2_hw_lpm_allowed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='usb3_lpm_u1_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='usb3_lpm_u2_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='string_langid' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='product' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='serial' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='filelist' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='maxchild' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='quirks' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='urbnum' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='active_duration' type-id='7359adad' visibility='default' filepath='include/linux/usb.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='connect_time' type-id='7359adad' visibility='default' filepath='include/linux/usb.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='do_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='reset_resume' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='port_is_suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='wusb_dev' type-id='ca0a9af6' visibility='default' filepath='include/linux/usb.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='slot_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12128'>
+          <var-decl name='removable' type-id='b9886e9f' visibility='default' filepath='include/linux/usb.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='l1_params' type-id='07c4f5ca' visibility='default' filepath='include/linux/usb.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='u1_params' type-id='34bd0a0b' visibility='default' filepath='include/linux/usb.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='u2_params' type-id='34bd0a0b' visibility='default' filepath='include/linux/usb.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='lpm_disable_count' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12512'>
+          <var-decl name='hub_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/usb.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_state' filepath='include/uapi/linux/usb/ch9.h' line='1152' column='1' id='901a91cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1142' column='1' id='4e532009'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_bus' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='435' column='1' id='fa4d7704'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='controller' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysdev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='busnum' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bus_name' type-id='80f4b756' visibility='default' filepath='include/linux/usb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='uses_pio_for_control' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='otg_port' type-id='f9b06939' visibility='default' filepath='include/linux/usb.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='is_b_host' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='b_hnp_enable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='no_stop_on_short' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='no_sg_constraint' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sg_tablesize' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devnum_next' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnum_next_mutex' type-id='925167dc' visibility='default' filepath='include/linux/usb.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='devmap' type-id='d78885c5' visibility='default' filepath='include/linux/usb.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='root_hub' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='hs_companion' type-id='3ab7d422' visibility='default' filepath='include/linux/usb.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bandwidth_allocated' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='bandwidth_int_reqs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bandwidth_isoc_reqs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='resuming_ports' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='483' 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='428' column='1' id='d78885c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devicemap' type-id='f05e8e77' visibility='default' filepath='include/linux/usb.h' line='429' 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='582de67c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' 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='8f048e17' 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='23119536' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='23119536' 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='23119536' 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='23119536' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='640' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='402' column='1' id='40f66efb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='d42add34' visibility='default' filepath='include/linux/usb.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_cap' type-id='95e6deec' visibility='default' filepath='include/linux/usb.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ss_cap' type-id='653a1605' visibility='default' filepath='include/linux/usb.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ssp_cap' type-id='9d8ff465' visibility='default' filepath='include/linux/usb.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_id' type-id='4373df76' visibility='default' filepath='include/linux/usb.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ptm_cap' type-id='9d94f8e4' visibility='default' filepath='include/linux/usb.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='415' 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='840' column='1' id='9bcc816e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='wTotalLength' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bNumDeviceCaps' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='845' 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='891' column='1' id='21767af6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='895' 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='913' column='1' id='c6cecc55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmAttributes' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wSpeedSupported' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bFunctionalitySupport' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bU1devExitLat' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bU2DevExitLat' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='926' 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='951' column='1' id='eaa06085'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bmAttributes' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wFunctionalitySupport' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='wReserved' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bmSublinkSpeedAttr' type-id='df785d68' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='964' 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='936' column='1' id='4f5dfff0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bReserved' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ContainerID' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='941' 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='1076' column='1' id='9c52cc4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDevCapabilityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='1079' 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='380' column='1' id='2df0328b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='372ebfa4' visibility='default' filepath='include/linux/usb.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/usb.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='intf_assoc' type-id='3e3c9632' visibility='default' filepath='include/linux/usb.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='interface' type-id='a2aad346' visibility='default' filepath='include/linux/usb.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='intf_cache' type-id='11a8d8e5' visibility='default' filepath='include/linux/usb.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='extra' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='extralen' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='398' 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='372ebfa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' 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='8f048e17' 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='23119536' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='354' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_interface_cache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='328' column='1' id='dbbc1900'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_altsetting' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='400fb07b' visibility='default' filepath='include/linux/usb.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='altsetting' type-id='26179f78' visibility='default' filepath='include/linux/usb.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_device_removable' filepath='include/linux/usb.h' line='492' column='1' id='b9886e9f'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='518' column='1' id='07c4f5ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='besl' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='528' 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='538' column='1' id='34bd0a0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sel' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='567' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='driver_info' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/usb/usbnet.h' line='103' column='1' id='39a9bc04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/usb/usbnet.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='a4de1198' visibility='default' filepath='include/linux/usb/usbnet.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='e8ad2523' visibility='default' filepath='include/linux/usb/usbnet.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='reset' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='stop' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_connect' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='manage_power' type-id='984ab777' visibility='default' filepath='include/linux/usb/usbnet.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='status' type-id='1483bbe4' visibility='default' filepath='include/linux/usb/usbnet.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_reset' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_fixup' type-id='f98203c0' visibility='default' filepath='include/linux/usb/usbnet.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_fixup' type-id='fb29201e' visibility='default' filepath='include/linux/usb/usbnet.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='recover' type-id='20f9ae8b' visibility='default' filepath='include/linux/usb/usbnet.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='early_init' type-id='3b49ed88' visibility='default' filepath='include/linux/usb/usbnet.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='indication' type-id='a426551e' visibility='default' filepath='include/linux/usb/usbnet.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_rx_mode' type-id='20f9ae8b' visibility='default' filepath='include/linux/usb/usbnet.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='in' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='out' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/usbnet.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='data' type-id='7359adad' visibility='default' filepath='include/linux/usb/usbnet.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/usbnet.h' line='186' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='urb' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1576' column='1' id='b209b4e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/usb.h' line='1578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='unlinked' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hcpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='use_count' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1581' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reject' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='anchor_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='anchor' type-id='bd300bf3' visibility='default' filepath='include/linux/usb.h' line='1588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ep' type-id='15adb516' visibility='default' filepath='include/linux/usb.h' line='1590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='transfer_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='transfer_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='transfer_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb.h' line='1596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb.h' line='1597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_mapped_sgs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='num_sgs' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='transfer_buffer_length' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='1600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='actual_length' type-id='19c2251e' visibility='default' filepath='include/linux/usb.h' line='1601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='setup_packet' type-id='cf536864' visibility='default' filepath='include/linux/usb.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='setup_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start_frame' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='number_of_packets' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interval' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb.h' line='1609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='complete' type-id='4086973b' visibility='default' filepath='include/linux/usb.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iso_frame_desc' type-id='b585dd30' visibility='default' filepath='include/linux/usb.h' line='1617' 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='1375' column='1' id='b3bcc053'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='urb_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/usb.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='suspend_wakeups' type-id='49178f86' visibility='default' filepath='include/linux/usb.h' line='1379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poisoned' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1380' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='usb_complete_t' type-id='79dbccfb' filepath='include/linux/usb.h' line='1391' column='1' id='4086973b'/>
+      <class-decl name='usb_iso_packet_descriptor' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1366' column='1' id='fc6d031c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='actual_length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1370' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='26a90f95' size-in-bits='64' id='9b23c9ad'/>
+      <qualified-type-def type-id='39a9bc04' const='yes' id='6544a7c3'/>
+      <pointer-type-def type-id='6544a7c3' size-in-bits='64' id='541453cb'/>
+      <qualified-type-def type-id='391a9024' const='yes' id='244e59bf'/>
+      <pointer-type-def type-id='244e59bf' size-in-bits='64' id='bc57058f'/>
+      <pointer-type-def type-id='7eea96b3' size-in-bits='64' id='7b923743'/>
+      <pointer-type-def type-id='5e0713ae' size-in-bits='64' id='3b49ed88'/>
+      <pointer-type-def type-id='2d770943' size-in-bits='64' id='984ab777'/>
+      <pointer-type-def type-id='6b532d3e' size-in-bits='64' id='f98203c0'/>
+      <pointer-type-def type-id='53e8ab6e' size-in-bits='64' id='a4de1198'/>
+      <pointer-type-def type-id='ec664304' size-in-bits='64' id='fb29201e'/>
+      <pointer-type-def type-id='b209b4e4' size-in-bits='64' id='ab85b8f2'/>
+      <pointer-type-def type-id='b3bcc053' size-in-bits='64' id='bd300bf3'/>
+      <pointer-type-def type-id='9bcc816e' size-in-bits='64' id='d42add34'/>
+      <pointer-type-def type-id='fa4d7704' size-in-bits='64' id='3ab7d422'/>
+      <pointer-type-def type-id='39b596d4' size-in-bits='64' id='25e60cb2'/>
+      <pointer-type-def type-id='21767af6' size-in-bits='64' id='95e6deec'/>
+      <pointer-type-def type-id='40f66efb' size-in-bits='64' id='ea484b4b'/>
+      <pointer-type-def type-id='2df0328b' size-in-bits='64' id='2ba3cceb'/>
+      <pointer-type-def type-id='325f6f30' size-in-bits='64' id='15adb516'/>
+      <pointer-type-def type-id='b7481dd4' size-in-bits='64' id='2ac920d2'/>
+      <pointer-type-def type-id='5b653fc9' size-in-bits='64' id='8bf48c31'/>
+      <pointer-type-def type-id='d1a7f9af' size-in-bits='64' id='e4a73b37'/>
+      <pointer-type-def type-id='dbbc1900' size-in-bits='64' id='723114f6'/>
+      <pointer-type-def type-id='9c52cc4e' size-in-bits='64' id='9d94f8e4'/>
+      <pointer-type-def type-id='c6cecc55' size-in-bits='64' id='653a1605'/>
+      <pointer-type-def type-id='4f5dfff0' size-in-bits='64' id='4373df76'/>
+      <pointer-type-def type-id='eaa06085' size-in-bits='64' id='9d8ff465'/>
+      <pointer-type-def type-id='7dda8bf2' size-in-bits='64' id='bf95a8f0'/>
+      <pointer-type-def type-id='53f069ac' size-in-bits='64' id='12884b9a'/>
+      <pointer-type-def type-id='d800b1bf' size-in-bits='64' id='79dbccfb'/>
+      <pointer-type-def type-id='a2c297ff' size-in-bits='64' id='20f9ae8b'/>
+      <pointer-type-def type-id='b47ad2f2' size-in-bits='64' id='1483bbe4'/>
+      <pointer-type-def type-id='1c800c47' size-in-bits='64' id='e8ad2523'/>
+      <pointer-type-def type-id='6a162484' size-in-bits='64' id='a426551e'/>
+      <pointer-type-def type-id='bb4afb30' size-in-bits='64' id='ca0a9af6'/>
+      <function-decl name='usbnet_probe' mangled-name='usbnet_probe' filepath='drivers/net/usb/usbnet.c' line='1654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_probe'>
+        <parameter type-id='8bf48c31' name='udev' filepath='drivers/net/usb/usbnet.c' line='1654' column='1'/>
+        <parameter type-id='bc57058f' name='prod' filepath='drivers/net/usb/usbnet.c' line='1654' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_link_change' mangled-name='usbnet_link_change' filepath='drivers/net/usb/usbnet.c' line='1970' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_link_change'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='1970' column='1'/>
+        <parameter type-id='b50a4934' name='link' filepath='drivers/net/usb/usbnet.c' line='1970' column='1'/>
+        <parameter type-id='b50a4934' name='need_reset' filepath='drivers/net/usb/usbnet.c' line='1970' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_get_endpoints' mangled-name='usbnet_get_endpoints' filepath='drivers/net/usb/usbnet.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_endpoints'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='81' column='1'/>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='81' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd_nopm' mangled-name='usbnet_write_cmd_nopm' filepath='drivers/net/usb/usbnet.c' line='2101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd_nopm'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2101' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2101' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2101' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2102' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2102' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2102' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd_async' mangled-name='usbnet_write_cmd_async' filepath='drivers/net/usb/usbnet.c' line='2127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd_async'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2127' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2127' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2127' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2128' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2128' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2128' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2128' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_write_cmd' mangled-name='usbnet_write_cmd' filepath='drivers/net/usb/usbnet.c' line='2071' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_write_cmd'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2071' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2071' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2071' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2072' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2072' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2072' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2072' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_update_max_qlen' mangled-name='usbnet_update_max_qlen' filepath='drivers/net/usb/usbnet.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_update_max_qlen'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_unlink_rx_urbs' mangled-name='usbnet_unlink_rx_urbs' filepath='drivers/net/usb/usbnet.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_unlink_rx_urbs'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='752' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_tx_timeout' mangled-name='usbnet_tx_timeout' filepath='drivers/net/usb/usbnet.c' line='1296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_tx_timeout'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1296' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_suspend' mangled-name='usbnet_suspend' filepath='drivers/net/usb/usbnet.c' line='1860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_suspend'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1860' column='1'/>
+        <parameter type-id='08496218' name='message' filepath='drivers/net/usb/usbnet.c' line='1860' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_stop' mangled-name='usbnet_stop' filepath='drivers/net/usb/usbnet.c' line='799' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_stop'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='799' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_start_xmit' mangled-name='usbnet_start_xmit' filepath='drivers/net/usb/usbnet.c' line='1346' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_start_xmit'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='drivers/net/usb/usbnet.c' line='1346' column='1'/>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1347' column='1'/>
+        <return type-id='6849a88c'/>
+      </function-decl>
+      <function-decl name='usbnet_skb_return' mangled-name='usbnet_skb_return' filepath='drivers/net/usb/usbnet.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_skb_return'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='308' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='drivers/net/usb/usbnet.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_set_msglevel' mangled-name='usbnet_set_msglevel' filepath='drivers/net/usb/usbnet.c' line='1065' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_set_msglevel'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1065' column='1'/>
+        <parameter type-id='19c2251e' name='level' filepath='drivers/net/usb/usbnet.c' line='1065' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_set_link_ksettings' mangled-name='usbnet_set_link_ksettings' filepath='drivers/net/usb/usbnet.c' line='964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_set_link_ksettings'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='964' column='1'/>
+        <parameter type-id='b2c34f11' name='cmd' filepath='drivers/net/usb/usbnet.c' line='965' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_resume' mangled-name='usbnet_resume' filepath='drivers/net/usb/usbnet.c' line='1893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_resume'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_read_cmd_nopm' mangled-name='usbnet_read_cmd_nopm' filepath='drivers/net/usb/usbnet.c' line='2089' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_read_cmd_nopm'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2089' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2089' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2089' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2090' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2090' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2090' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2090' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_read_cmd' mangled-name='usbnet_read_cmd' filepath='drivers/net/usb/usbnet.c' line='2053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_read_cmd'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='2053' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='drivers/net/usb/usbnet.c' line='2053' column='1'/>
+        <parameter type-id='f9b06939' name='reqtype' filepath='drivers/net/usb/usbnet.c' line='2053' column='1'/>
+        <parameter type-id='1dc6a898' name='value' filepath='drivers/net/usb/usbnet.c' line='2054' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='drivers/net/usb/usbnet.c' line='2054' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/net/usb/usbnet.c' line='2054' column='1'/>
+        <parameter type-id='1dc6a898' name='size' filepath='drivers/net/usb/usbnet.c' line='2054' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_drvinfo' mangled-name='usbnet_get_drvinfo' filepath='drivers/net/usb/usbnet.c' line='1045' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_drvinfo'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1045' column='1'/>
+        <parameter type-id='8c4c4029' name='info' filepath='drivers/net/usb/usbnet.c' line='1045' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_get_msglevel' mangled-name='usbnet_get_msglevel' filepath='drivers/net/usb/usbnet.c' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_msglevel'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1057' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='usbnet_nway_reset' mangled-name='usbnet_nway_reset' filepath='drivers/net/usb/usbnet.c' line='1034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_nway_reset'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1034' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_link' mangled-name='usbnet_get_link' filepath='drivers/net/usb/usbnet.c' line='1017' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_link'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='1017' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_link_ksettings' mangled-name='usbnet_get_link_ksettings' filepath='drivers/net/usb/usbnet.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_link_ksettings'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='950' column='1'/>
+        <parameter type-id='70de91e2' name='cmd' filepath='drivers/net/usb/usbnet.c' line='951' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_open' mangled-name='usbnet_open' filepath='drivers/net/usb/usbnet.c' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_open'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='861' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_change_mtu' mangled-name='usbnet_change_mtu' filepath='drivers/net/usb/usbnet.c' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_change_mtu'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='378' column='1'/>
+        <parameter type-id='95e97e5e' name='new_mtu' filepath='drivers/net/usb/usbnet.c' line='378' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usbnet_get_stats64' mangled-name='usbnet_get_stats64' filepath='drivers/net/usb/usbnet.c' line='986' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_get_stats64'>
+        <parameter type-id='68a2d05b' name='net' filepath='drivers/net/usb/usbnet.c' line='986' column='1'/>
+        <parameter type-id='bd3860fe' name='stats' filepath='drivers/net/usb/usbnet.c' line='986' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_disconnect' mangled-name='usbnet_disconnect' filepath='drivers/net/usb/usbnet.c' line='1592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_disconnect'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/net/usb/usbnet.c' line='1592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usbnet_defer_kevent' mangled-name='usbnet_defer_kevent' filepath='drivers/net/usb/usbnet.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usbnet_defer_kevent'>
+        <parameter type-id='12884b9a' name='dev' filepath='drivers/net/usb/usbnet.c' line='454' column='1'/>
+        <parameter type-id='95e97e5e' name='work' filepath='drivers/net/usb/usbnet.c' line='454' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='tasklet_struct' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='592' column='1' id='7a7ea727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='59f1923f' visibility='default' filepath='include/linux/interrupt.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/interrupt.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='08b16374' visibility='default' filepath='include/linux/interrupt.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='598' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='5e0713ae'>
+        <parameter type-id='12884b9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d770943'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b532d3e'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53e8ab6e'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec664304'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='0fbf3cfd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d800b1bf'>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2c297ff'>
+        <parameter type-id='12884b9a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b47ad2f2'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c800c47'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a162484'>
+        <parameter type-id='12884b9a'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='7a7ea727' size-in-bits='64' id='59f1923f'/>
+      <pointer-type-def type-id='5bbf1052' size-in-bits='64' id='08b16374'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/nvdimm/bus.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='256' id='e3dc4fdb'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='nvdimm_bus' size-in-bits='8576' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='19' column='1' id='e9630e15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_desc' type-id='0e23c133' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='probe_active' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='ioctl_active' type-id='49178f86' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='mapping_list' type-id='72f469ec' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='reconfig_mutex' type-id='925167dc' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='badrange' type-id='f5e659a5' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvdimm_bus_descriptor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='82' column='1' id='1b1c4a63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/libnvdimm.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bus_dsm_mask' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_mask' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/libnvdimm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='provider_name' type-id='26a90f95' visibility='default' filepath='include/linux/libnvdimm.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/libnvdimm.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ndctl' type-id='c87493cc' visibility='default' filepath='include/linux/libnvdimm.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flush_probe' type-id='4a00a0f7' visibility='default' filepath='include/linux/libnvdimm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clear_to_send' type-id='40b285e2' visibility='default' filepath='include/linux/libnvdimm.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ndctl_fn' type-id='b4da87d9' filepath='include/linux/libnvdimm.h' line='77' column='1' id='c87493cc'/>
+      <class-decl name='nvdimm' size-in-bits='9344' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='31' column='1' id='a1b485c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='provider_data' type-id='eaa32e2f' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_mask' type-id='7359adad' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='busy' type-id='49178f86' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='num_flush' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='flush_wpq' type-id='c9d64c0d' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='dimm_id' type-id='80f4b756' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='sec' type-id='b2bb7a99' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='40' column='1' id='b2bb7a99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='5f889637' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ext_flags' type-id='7359adad' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overwrite_tmo' type-id='f0981eeb' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overwrite_state' type-id='150efd3f' visibility='default' filepath='drivers/nvdimm/nd-core.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvdimm_security_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='187' column='1' id='6193579c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_flags' type-id='1ac0dc69' visibility='default' filepath='include/linux/libnvdimm.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='freeze' type-id='4f6dfef4' visibility='default' filepath='include/linux/libnvdimm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='change_key' type-id='e63c1e62' visibility='default' filepath='include/linux/libnvdimm.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlock' type-id='b5063f39' visibility='default' filepath='include/linux/libnvdimm.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='b5063f39' visibility='default' filepath='include/linux/libnvdimm.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='erase' type-id='1f78bfb9' visibility='default' filepath='include/linux/libnvdimm.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overwrite' type-id='b5063f39' visibility='default' filepath='include/linux/libnvdimm.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='query_overwrite' type-id='4f6dfef4' visibility='default' filepath='include/linux/libnvdimm.h' line='204' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nvdimm_passphrase_type' filepath='include/linux/libnvdimm.h' line='182' column='1' id='6f383d17'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NVDIMM_USER' value='0'/>
+        <enumerator name='NVDIMM_MASTER' value='1'/>
+      </enum-decl>
+      <class-decl name='nvdimm_key_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='178' column='1' id='61250075'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='e3dc4fdb' visibility='default' filepath='include/linux/libnvdimm.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='badrange' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='22' column='1' id='f5e659a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/libnvdimm.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/libnvdimm.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='61250075' const='yes' id='d8ad531a'/>
+      <pointer-type-def type-id='d8ad531a' size-in-bits='64' id='48d9f490'/>
+      <qualified-type-def type-id='6193579c' const='yes' id='0c1d8f67'/>
+      <pointer-type-def type-id='0c1d8f67' size-in-bits='64' id='5f889637'/>
+      <pointer-type-def type-id='5ca87d9a' size-in-bits='64' id='4f6dfef4'/>
+      <pointer-type-def type-id='1c63824d' size-in-bits='64' id='b5063f39'/>
+      <pointer-type-def type-id='c58b95e0' size-in-bits='64' id='e63c1e62'/>
+      <pointer-type-def type-id='53c2644d' size-in-bits='64' id='1f78bfb9'/>
+      <pointer-type-def type-id='f06f451b' size-in-bits='64' id='4a00a0f7'/>
+      <pointer-type-def type-id='411421c8' size-in-bits='64' id='40b285e2'/>
+      <pointer-type-def type-id='3419e4c5' size-in-bits='64' id='b4da87d9'/>
+      <pointer-type-def type-id='a1b485c4' size-in-bits='64' id='67d012a2'/>
+      <pointer-type-def type-id='e9630e15' size-in-bits='64' id='c7ee6915'/>
+      <pointer-type-def type-id='1b1c4a63' size-in-bits='64' id='0e23c133'/>
+      <pointer-type-def type-id='83ac033d' size-in-bits='64' id='1ac0dc69'/>
+      <function-decl name='nvdimm_bus_register' mangled-name='nvdimm_bus_register' filepath='drivers/nvdimm/bus.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_bus_register'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/nvdimm/bus.c' line='337' column='1'/>
+        <parameter type-id='0e23c133' name='nd_desc' filepath='drivers/nvdimm/bus.c' line='338' column='1'/>
+        <return type-id='c7ee6915'/>
+      </function-decl>
+      <function-decl name='nvdimm_bus_unregister' mangled-name='nvdimm_bus_unregister' filepath='drivers/nvdimm/bus.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_bus_unregister'>
+        <parameter type-id='c7ee6915' name='nvdimm_bus' filepath='drivers/nvdimm/bus.c' line='376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5ca87d9a'>
+        <parameter type-id='67d012a2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c63824d'>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='48d9f490'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c58b95e0'>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='48d9f490'/>
+        <parameter type-id='48d9f490'/>
+        <parameter type-id='6f383d17'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53c2644d'>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='48d9f490'/>
+        <parameter type-id='6f383d17'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f06f451b'>
+        <parameter type-id='0e23c133'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='411421c8'>
+        <parameter type-id='0e23c133'/>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3419e4c5'>
+        <parameter type-id='0e23c133'/>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83ac033d'>
+        <parameter type-id='67d012a2'/>
+        <parameter type-id='6f383d17'/>
+        <return type-id='7359adad'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/nvdimm/region_devs.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='e0cc39f6' size-in-bits='infinite' id='566debc6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='nd_region' size-in-bits='9536' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd.h' line='138' column='1' id='c7bd5f5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvdimm/nd.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ns_ida' type-id='46ce60fb' visibility='default' filepath='drivers/nvdimm/nd.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='btt_ida' type-id='46ce60fb' visibility='default' filepath='drivers/nvdimm/nd.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='pfn_ida' type-id='46ce60fb' visibility='default' filepath='drivers/nvdimm/nd.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='dax_ida' type-id='46ce60fb' visibility='default' filepath='drivers/nvdimm/nd.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/nvdimm/nd.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='ns_seed' type-id='fa0b179b' visibility='default' filepath='drivers/nvdimm/nd.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='btt_seed' type-id='fa0b179b' visibility='default' filepath='drivers/nvdimm/nd.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='pfn_seed' type-id='fa0b179b' visibility='default' filepath='drivers/nvdimm/nd.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='dax_seed' type-id='fa0b179b' visibility='default' filepath='drivers/nvdimm/nd.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='ndr_mappings' type-id='1dc6a898' visibility='default' filepath='drivers/nvdimm/nd.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='ndr_size' type-id='91ce1af9' visibility='default' filepath='drivers/nvdimm/nd.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='ndr_start' type-id='91ce1af9' visibility='default' filepath='drivers/nvdimm/nd.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='num_lanes' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='ro' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='target_node' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='provider_data' type-id='eaa32e2f' visibility='default' filepath='drivers/nvdimm/nd.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='bb_state' type-id='150efd3f' visibility='default' filepath='drivers/nvdimm/nd.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='bb' type-id='cacf0f56' visibility='default' filepath='drivers/nvdimm/nd.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='nd_set' type-id='90e3bb60' visibility='default' filepath='drivers/nvdimm/nd.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='lane' type-id='82683cec' visibility='default' filepath='drivers/nvdimm/nd.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='flush' type-id='e8c1d90e' visibility='default' filepath='drivers/nvdimm/nd.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='mapping' type-id='566debc6' visibility='default' filepath='drivers/nvdimm/nd.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_interleave_set' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='102' column='1' id='f6610cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie1' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie2' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='altcookie' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type_guid' type-id='7ae02c0a' visibility='default' filepath='include/linux/libnvdimm.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='guid_t' type-id='8425539a' filepath='include/uapi/linux/uuid.h' line='25' column='1' id='7ae02c0a'/>
+      <class-decl name='nd_percpu_lane' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd.h' line='103' column='1' id='99f32926'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/nvdimm/nd.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_mapping' size-in-bits='704' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd.h' line='122' column='1' id='e0cc39f6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nvdimm' type-id='67d012a2' visibility='default' filepath='drivers/nvdimm/nd.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='91ce1af9' visibility='default' filepath='drivers/nvdimm/nd.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='drivers/nvdimm/nd.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='position' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='labels' type-id='72f469ec' visibility='default' filepath='drivers/nvdimm/nd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/nvdimm/nd.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ndd' type-id='d2561a8b' visibility='default' filepath='drivers/nvdimm/nd.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvdimm_drvdata' size-in-bits='1152' is-struct='yes' visibility='default' filepath='drivers/nvdimm/nd.h' line='28' column='1' id='6493a25b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/nvdimm/nd.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nslabel_size' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nsarea' type-id='2733af22' visibility='default' filepath='drivers/nvdimm/nd.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/nvdimm/nd.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ns_current' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ns_next' type-id='95e97e5e' visibility='default' filepath='drivers/nvdimm/nd.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dpa' type-id='5218160d' visibility='default' filepath='drivers/nvdimm/nd.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='drivers/nvdimm/nd.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_cmd_get_config_size' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/ndctl.h' line='23' column='1' id='2733af22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ndctl.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='config_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ndctl.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_xfer' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ndctl.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_region_desc' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='121' column='1' id='c4369844'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='res' type-id='c9d64c0d' visibility='default' filepath='include/linux/libnvdimm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mapping' type-id='9ac7bdcc' visibility='default' filepath='include/linux/libnvdimm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_mappings' type-id='1dc6a898' visibility='default' filepath='include/linux/libnvdimm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/libnvdimm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_set' type-id='90e3bb60' visibility='default' filepath='include/linux/libnvdimm.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='provider_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/libnvdimm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_lanes' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='target_node' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/libnvdimm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/libnvdimm.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flush' type-id='e8c1d90e' visibility='default' filepath='include/linux/libnvdimm.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nd_mapping_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/libnvdimm.h' line='113' column='1' id='da878766'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nvdimm' type-id='67d012a2' visibility='default' filepath='include/linux/libnvdimm.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='91ce1af9' visibility='default' filepath='include/linux/libnvdimm.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='position' type-id='95e97e5e' visibility='default' filepath='include/linux/libnvdimm.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b713976c' size-in-bits='64' id='e8c1d90e'/>
+      <pointer-type-def type-id='f6610cc2' size-in-bits='64' id='90e3bb60'/>
+      <pointer-type-def type-id='da878766' size-in-bits='64' id='9ac7bdcc'/>
+      <pointer-type-def type-id='99f32926' size-in-bits='64' id='82683cec'/>
+      <pointer-type-def type-id='c7bd5f5c' size-in-bits='64' id='14dc741a'/>
+      <pointer-type-def type-id='c4369844' size-in-bits='64' id='22ab35e2'/>
+      <pointer-type-def type-id='6493a25b' size-in-bits='64' id='d2561a8b'/>
+      <function-decl name='nvdimm_pmem_region_create' mangled-name='nvdimm_pmem_region_create' filepath='drivers/nvdimm/region_devs.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvdimm_pmem_region_create'>
+        <parameter type-id='c7ee6915' name='nvdimm_bus' filepath='drivers/nvdimm/region_devs.c' line='1053' column='1'/>
+        <parameter type-id='22ab35e2' name='ndr_desc' filepath='drivers/nvdimm/region_devs.c' line='1054' column='1'/>
+        <return type-id='14dc741a'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b713976c'>
+        <parameter type-id='14dc741a'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/nvmem/core.c' language='LANG_C89'>
+      <class-decl name='nvmem_cell' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/nvmem/core.c' line='22' column='1' id='78c7ad97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/nvmem/core.c' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bytes' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_offset' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nbits' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/core.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='drivers/nvmem/core.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nvmem' type-id='8179bc49' visibility='default' filepath='drivers/nvmem/core.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/nvmem/core.c' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvmem_device' size-in-bits='8704' is-struct='yes' visibility='default' filepath='drivers/nvmem/nvmem.h' line='13' column='1' id='77aad2d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/nvmem/nvmem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/nvmem/nvmem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='stride' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='word_size' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='drivers/nvmem/nvmem.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='read_only' type-id='b50a4934' visibility='default' filepath='drivers/nvmem/nvmem.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='type' type-id='0c30c73e' visibility='default' filepath='drivers/nvmem/nvmem.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='eeprom' type-id='d83a2db1' visibility='default' filepath='drivers/nvmem/nvmem.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='base_dev' type-id='fa0b179b' visibility='default' filepath='drivers/nvmem/nvmem.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='cells' type-id='72f469ec' visibility='default' filepath='drivers/nvmem/nvmem.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='reg_read' type-id='b3e77ef6' visibility='default' filepath='drivers/nvmem/nvmem.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='reg_write' type-id='020bf95f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/nvmem/nvmem.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nvmem_type' filepath='include/linux/nvmem-provider.h' line='22' column='1' id='0c30c73e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NVMEM_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='NVMEM_TYPE_EEPROM' value='1'/>
+        <enumerator name='NVMEM_TYPE_OTP' value='2'/>
+        <enumerator name='NVMEM_TYPE_BATTERY_BACKED' value='3'/>
+      </enum-decl>
+      <typedef-decl name='nvmem_reg_read_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='17' column='1' id='b3e77ef6'/>
+      <typedef-decl name='nvmem_reg_write_t' type-id='3ba5153c' filepath='include/linux/nvmem-provider.h' line='19' column='1' id='020bf95f'/>
+      <class-decl name='nvmem_config' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/nvmem-provider.h' line='56' column='1' id='945c0b49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/nvmem-provider.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/nvmem-provider.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/nvmem-provider.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cells' type-id='ac5f2363' visibility='default' filepath='include/linux/nvmem-provider.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ncells' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='type' type-id='0c30c73e' visibility='default' filepath='include/linux/nvmem-provider.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_only' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='root_only' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='no_of_node' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reg_read' type-id='b3e77ef6' visibility='default' filepath='include/linux/nvmem-provider.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reg_write' type-id='020bf95f' visibility='default' filepath='include/linux/nvmem-provider.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='word_size' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stride' type-id='95e97e5e' visibility='default' filepath='include/linux/nvmem-provider.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/nvmem-provider.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat' type-id='b50a4934' visibility='default' filepath='include/linux/nvmem-provider.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='base_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/nvmem-provider.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nvmem_cell_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/nvmem-consumer.h' line='22' column='1' id='cf20ba04'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/nvmem-consumer.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bytes' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/nvmem-consumer.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cf20ba04' const='yes' id='b254b8db'/>
+      <pointer-type-def type-id='b254b8db' size-in-bits='64' id='ac5f2363'/>
+      <qualified-type-def type-id='945c0b49' const='yes' id='a9ae7f74'/>
+      <pointer-type-def type-id='a9ae7f74' size-in-bits='64' id='7bb280fa'/>
+      <pointer-type-def type-id='dfed847a' size-in-bits='64' id='3ba5153c'/>
+      <pointer-type-def type-id='78c7ad97' size-in-bits='64' id='4a4ce85f'/>
+      <pointer-type-def type-id='77aad2d1' size-in-bits='64' id='8179bc49'/>
+      <function-decl name='nvmem_cell_get' mangled-name='nvmem_cell_get' filepath='drivers/nvmem/core.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='834' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='834' column='1'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-decl name='of_nvmem_cell_get' mangled-name='of_nvmem_cell_get' filepath='drivers/nvmem/core.c' line='787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_nvmem_cell_get'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/nvmem/core.c' line='787' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='787' column='1'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-decl name='nvmem_device_write' mangled-name='nvmem_device_write' filepath='drivers/nvmem/core.c' line='1276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_device_write'>
+        <parameter type-id='8179bc49' name='nvmem' filepath='drivers/nvmem/core.c' line='1276' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/nvmem/core.c' line='1277' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='drivers/nvmem/core.c' line='1278' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/nvmem/core.c' line='1278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_device_read' mangled-name='nvmem_device_read' filepath='drivers/nvmem/core.c' line='1248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_device_read'>
+        <parameter type-id='8179bc49' name='nvmem' filepath='drivers/nvmem/core.c' line='1248' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='drivers/nvmem/core.c' line='1249' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='drivers/nvmem/core.c' line='1250' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/nvmem/core.c' line='1250' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_write' mangled-name='nvmem_cell_write' filepath='drivers/nvmem/core.c' line='1077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_write'>
+        <parameter type-id='4a4ce85f' name='cell' filepath='drivers/nvmem/core.c' line='1077' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='drivers/nvmem/core.c' line='1077' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/nvmem/core.c' line='1077' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_read_u32' mangled-name='nvmem_cell_read_u32' filepath='drivers/nvmem/core.c' line='1151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_read_u32'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='1151' column='1'/>
+        <parameter type-id='80f4b756' name='cell_id' filepath='drivers/nvmem/core.c' line='1151' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/nvmem/core.c' line='1151' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_read' mangled-name='nvmem_cell_read' filepath='drivers/nvmem/core.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_read'>
+        <parameter type-id='4a4ce85f' name='cell' filepath='drivers/nvmem/core.c' line='992' column='1'/>
+        <parameter type-id='78c01427' name='len' filepath='drivers/nvmem/core.c' line='992' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='nvmem_cell_put' mangled-name='nvmem_cell_put' filepath='drivers/nvmem/core.c' line='920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nvmem_cell_put'>
+        <parameter type-id='4a4ce85f' name='cell' filepath='drivers/nvmem/core.c' line='920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_nvmem_register' mangled-name='devm_nvmem_register' filepath='drivers/nvmem/core.c' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='514' column='1'/>
+        <parameter type-id='7bb280fa' name='config' filepath='drivers/nvmem/core.c' line='515' column='1'/>
+        <return type-id='8179bc49'/>
+      </function-decl>
+      <function-decl name='devm_nvmem_device_get' mangled-name='devm_nvmem_device_get' filepath='drivers/nvmem/core.c' line='697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_device_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='697' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='697' column='1'/>
+        <return type-id='8179bc49'/>
+      </function-decl>
+      <function-decl name='devm_nvmem_cell_get' mangled-name='devm_nvmem_cell_get' filepath='drivers/nvmem/core.c' line='867' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_nvmem_cell_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/nvmem/core.c' line='867' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/nvmem/core.c' line='867' column='1'/>
+        <return type-id='4a4ce85f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='dfed847a'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='835' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_address_to_resource'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/address.c' line='835' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/address.c' line='835' column='1'/>
+        <parameter type-id='c9d64c0d' name='r' filepath='drivers/of/address.c' line='836' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_iomap' mangled-name='of_iomap' filepath='drivers/of/address.c' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_iomap'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/address.c' line='880' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/address.c' line='880' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_io_request_and_map' mangled-name='of_io_request_and_map' filepath='drivers/of/address.c' line='905' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_io_request_and_map'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/address.c' line='905' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/address.c' line='905' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/address.c' line='906' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_get_address' mangled-name='of_get_address' filepath='drivers/of/address.c' line='740' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_address'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/address.c' line='740' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/address.c' line='740' column='1'/>
+        <parameter type-id='3df9fd28' name='size' filepath='drivers/of/address.c' line='740' column='1'/>
+        <parameter type-id='807869d3' name='flags' filepath='drivers/of/address.c' line='741' column='1'/>
+        <return type-id='90144368'/>
+      </function-decl>
+      <function-decl name='of_dma_is_coherent' mangled-name='of_dma_is_coherent' filepath='drivers/of/address.c' line='1020' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_is_coherent'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/address.c' line='1020' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='of_translate_address' mangled-name='of_translate_address' filepath='drivers/of/address.c' line='679' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_translate_address'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/address.c' line='679' column='1'/>
+        <parameter type-id='90144368' name='in_addr' filepath='drivers/of/address.c' line='679' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <pointer-type-def type-id='398c6fd2' size-in-bits='64' id='90144368'/>
+      <qualified-type-def type-id='78a133c2' const='yes' id='398c6fd2'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/base.c' language='LANG_C89'>
+      <class-decl name='of_phandle_iterator' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/of.h' line='80' column='1' id='514d8c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cells_name' type-id='80f4b756' visibility='default' filepath='include/linux/of.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cell_count' type-id='95e97e5e' visibility='default' filepath='include/linux/of.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='0afa6ea3' visibility='default' filepath='include/linux/of.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list_end' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='phandle_end' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cur' type-id='90144368' visibility='default' filepath='include/linux/of.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cur_count' type-id='8f92235e' visibility='default' filepath='include/linux/of.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='phandle' type-id='6e394fba' visibility='default' filepath='include/linux/of.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='node' type-id='9a537bbe' visibility='default' filepath='include/linux/of.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='78a133c2' const='yes' id='398c6fd2'/>
+      <pointer-type-def type-id='398c6fd2' size-in-bits='64' id='90144368'/>
+      <pointer-type-def type-id='e5ce629e' size-in-bits='64' id='77e5615c'/>
+      <pointer-type-def type-id='514d8c48' size-in-bits='64' id='58cfaa0e'/>
+      <var-decl name='of_root' type-id='9a537bbe' mangled-name='of_root' visibility='default' filepath='drivers/of/base.c' line='36' column='1' elf-symbol-id='of_root'/>
+      <function-decl name='of_get_cpu_node' mangled-name='of_get_cpu_node' filepath='drivers/of/base.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_cpu_node'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='drivers/of/base.c' line='454' column='1'/>
+        <parameter type-id='807869d3' name='thread' filepath='drivers/of/base.c' line='454' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_get_property' mangled-name='of_get_property' filepath='drivers/of/base.c' line='354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_property'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='354' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/base.c' line='354' column='1'/>
+        <parameter type-id='7292109c' name='lenp' filepath='drivers/of/base.c' line='355' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_n_addr_cells' mangled-name='of_n_addr_cells' filepath='drivers/of/base.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_n_addr_cells'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/base.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_find_property' mangled-name='of_find_property' filepath='drivers/of/base.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_property'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='284' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/base.c' line='285' column='1'/>
+        <parameter type-id='7292109c' name='lenp' filepath='drivers/of/base.c' line='286' column='1'/>
+        <return type-id='ddcd89c6'/>
+      </function-decl>
+      <function-decl name='of_get_parent' mangled-name='of_get_parent' filepath='drivers/of/base.c' line='698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_parent'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/base.c' line='698' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_device_is_compatible' mangled-name='of_device_is_compatible' filepath='drivers/of/base.c' line='563' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_compatible'>
+        <parameter type-id='0afa6ea3' name='device' filepath='drivers/of/base.c' line='563' column='1'/>
+        <parameter type-id='80f4b756' name='compat' filepath='drivers/of/base.c' line='564' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_find_matching_node_and_match' mangled-name='of_find_matching_node_and_match' filepath='drivers/of/base.c' line='1174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_matching_node_and_match'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1174' column='1'/>
+        <parameter type-id='e5ce629e' name='matches' filepath='drivers/of/base.c' line='1175' column='1'/>
+        <parameter type-id='77e5615c' name='match' filepath='drivers/of/base.c' line='1176' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_get_child_by_name' mangled-name='of_get_child_by_name' filepath='drivers/of/base.c' line='885' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_child_by_name'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/base.c' line='885' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/base.c' line='886' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_get_next_child' mangled-name='of_get_next_child' filepath='drivers/of/base.c' line='768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_next_child'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/base.c' line='768' column='1'/>
+        <parameter type-id='9a537bbe' name='prev' filepath='drivers/of/base.c' line='769' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_phandle' mangled-name='of_find_node_by_phandle' filepath='drivers/of/base.c' line='1234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_phandle'>
+        <parameter type-id='6e394fba' name='handle' filepath='drivers/of/base.c' line='1234' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_device_is_available' mangled-name='of_device_is_available' filepath='drivers/of/base.c' line='655' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_available'>
+        <parameter type-id='0afa6ea3' name='device' filepath='drivers/of/base.c' line='655' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='of_get_next_available_child' mangled-name='of_get_next_available_child' filepath='drivers/of/base.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_next_available_child'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/base.c' line='789' column='1'/>
+        <parameter type-id='9a537bbe' name='prev' filepath='drivers/of/base.c' line='790' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_match_node' mangled-name='of_match_node' filepath='drivers/of/base.c' line='1148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_match_node'>
+        <parameter type-id='e5ce629e' name='matches' filepath='drivers/of/base.c' line='1148' column='1'/>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/base.c' line='1149' column='1'/>
+        <return type-id='e5ce629e'/>
+      </function-decl>
+      <function-decl name='of_count_phandle_with_args' mangled-name='of_count_phandle_with_args' filepath='drivers/of/base.c' line='1788' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_count_phandle_with_args'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='1788' column='1'/>
+        <parameter type-id='80f4b756' name='list_name' filepath='drivers/of/base.c' line='1788' column='1'/>
+        <parameter type-id='80f4b756' name='cells_name' filepath='drivers/of/base.c' line='1789' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_find_compatible_node' mangled-name='of_find_compatible_node' filepath='drivers/of/base.c' line='1067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_compatible_node'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1067' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/of/base.c' line='1068' column='1'/>
+        <parameter type-id='80f4b756' name='compatible' filepath='drivers/of/base.c' line='1068' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_find_node_opts_by_path' mangled-name='of_find_node_opts_by_path' filepath='drivers/of/base.c' line='951' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_opts_by_path'>
+        <parameter type-id='80f4b756' name='path' filepath='drivers/of/base.c' line='951' column='1'/>
+        <parameter type-id='7d3cd834' name='opts' filepath='drivers/of/base.c' line='951' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_device_is_big_endian' mangled-name='of_device_is_big_endian' filepath='drivers/of/base.c' line='680' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_is_big_endian'>
+        <parameter type-id='0afa6ea3' name='device' filepath='drivers/of/base.c' line='680' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='of_alias_get_id' mangled-name='of_alias_get_id' filepath='drivers/of/base.c' line='2075' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_alias_get_id'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/base.c' line='2075' column='1'/>
+        <parameter type-id='80f4b756' name='stem' filepath='drivers/of/base.c' line='2075' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_modalias_node' mangled-name='of_modalias_node' filepath='drivers/of/base.c' line='1213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_modalias_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/of/base.c' line='1213' column='1'/>
+        <parameter type-id='26a90f95' name='modalias' filepath='drivers/of/base.c' line='1213' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/of/base.c' line='1213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phandle_iterator_init' mangled-name='of_phandle_iterator_init' filepath='drivers/of/base.c' line='1290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phandle_iterator_init'>
+        <parameter type-id='58cfaa0e' name='it' filepath='drivers/of/base.c' line='1290' column='1'/>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='1291' column='1'/>
+        <parameter type-id='80f4b756' name='list_name' filepath='drivers/of/base.c' line='1292' column='1'/>
+        <parameter type-id='80f4b756' name='cells_name' filepath='drivers/of/base.c' line='1293' column='1'/>
+        <parameter type-id='95e97e5e' name='cell_count' filepath='drivers/of/base.c' line='1294' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phandle_iterator_next' mangled-name='of_phandle_iterator_next' filepath='drivers/of/base.c' line='1323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phandle_iterator_next'>
+        <parameter type-id='58cfaa0e' name='it' filepath='drivers/of/base.c' line='1323' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_find_node_with_property' mangled-name='of_find_node_with_property' filepath='drivers/of/base.c' line='1096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_with_property'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1096' column='1'/>
+        <parameter type-id='80f4b756' name='prop_name' filepath='drivers/of/base.c' line='1097' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_name' mangled-name='of_find_node_by_name' filepath='drivers/of/base.c' line='1009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_name'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1009' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/base.c' line='1010' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle' mangled-name='of_parse_phandle' filepath='drivers/of/base.c' line='1482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='1482' column='1'/>
+        <parameter type-id='80f4b756' name='phandle_name' filepath='drivers/of/base.c' line='1483' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/base.c' line='1483' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_machine_is_compatible' mangled-name='of_machine_is_compatible' filepath='drivers/of/base.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_machine_is_compatible'>
+        <parameter type-id='80f4b756' name='compat' filepath='drivers/of/base.c' line='605' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle_with_fixed_args' mangled-name='of_parse_phandle_with_fixed_args' filepath='drivers/of/base.c' line='1762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle_with_fixed_args'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='1762' column='1'/>
+        <parameter type-id='80f4b756' name='list_name' filepath='drivers/of/base.c' line='1763' column='1'/>
+        <parameter type-id='95e97e5e' name='cell_count' filepath='drivers/of/base.c' line='1763' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/base.c' line='1764' column='1'/>
+        <parameter type-id='51a94113' name='out_args' filepath='drivers/of/base.c' line='1764' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_parse_phandle_with_args' mangled-name='of_parse_phandle_with_args' filepath='drivers/of/base.c' line='1530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_parse_phandle_with_args'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='1530' column='1'/>
+        <parameter type-id='80f4b756' name='list_name' filepath='drivers/of/base.c' line='1530' column='1'/>
+        <parameter type-id='80f4b756' name='cells_name' filepath='drivers/of/base.c' line='1531' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/base.c' line='1531' column='1'/>
+        <parameter type-id='51a94113' name='out_args' filepath='drivers/of/base.c' line='1532' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_node_name_eq' mangled-name='of_node_name_eq' filepath='drivers/of/base.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_node_name_eq'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/base.c' line='58' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/base.c' line='58' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='of_n_size_cells' mangled-name='of_n_size_cells' filepath='drivers/of/base.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_n_size_cells'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/base.c' line='122' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_get_compatible_child' mangled-name='of_get_compatible_child' filepath='drivers/of/base.c' line='860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_compatible_child'>
+        <parameter type-id='0afa6ea3' name='parent' filepath='drivers/of/base.c' line='860' column='1'/>
+        <parameter type-id='80f4b756' name='compatible' filepath='drivers/of/base.c' line='861' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_find_node_by_type' mangled-name='of_find_node_by_type' filepath='drivers/of/base.c' line='1037' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_node_by_type'>
+        <parameter type-id='9a537bbe' name='from' filepath='drivers/of/base.c' line='1037' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/of/base.c' line='1038' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/device.c' language='LANG_C89'>
+      <function-decl name='of_dma_configure' mangled-name='of_dma_configure' filepath='drivers/of/device.c' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dma_configure'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/device.c' line='89' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/device.c' line='89' column='1'/>
+        <parameter type-id='b50a4934' name='force_dma' filepath='drivers/of/device.c' line='89' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='e5ce629e' name='matches' filepath='drivers/of/device.c' line='26' column='1'/>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/of/device.c' line='27' column='1'/>
+        <return type-id='e5ce629e'/>
+      </function-decl>
+      <function-decl name='of_device_uevent_modalias' mangled-name='of_device_uevent_modalias' filepath='drivers/of/device.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_uevent_modalias'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/device.c' line='319' column='1'/>
+        <parameter type-id='d9d65b21' name='env' filepath='drivers/of/device.c' line='319' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_device_request_module' mangled-name='of_device_request_module' filepath='drivers/of/device.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_request_module'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/device.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_device_modalias' mangled-name='of_device_modalias' filepath='drivers/of/device.c' line='265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_modalias'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/device.c' line='265' column='1'/>
+        <parameter type-id='26a90f95' name='str' filepath='drivers/of/device.c' line='265' column='1'/>
+        <parameter type-id='79a0948f' name='len' filepath='drivers/of/device.c' line='265' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='of_device_get_match_data' mangled-name='of_device_get_match_data' filepath='drivers/of/device.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_device_get_match_data'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/of/device.c' line='188' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='of_dev_put' mangled-name='of_dev_put' filepath='drivers/of/device.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_dev_put'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/of/device.c' line='49' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/fdt.c' language='LANG_C89'>
+      <pointer-type-def type-id='9a537bbe' size-in-bits='64' id='856b89fc'/>
+      <function-decl name='of_fdt_unflatten_tree' mangled-name='of_fdt_unflatten_tree' filepath='drivers/of/fdt.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_fdt_unflatten_tree'>
+        <parameter type-id='f9b37274' name='blob' filepath='drivers/of/fdt.c' line='448' column='1'/>
+        <parameter type-id='9a537bbe' name='dad' filepath='drivers/of/fdt.c' line='449' column='1'/>
+        <parameter type-id='856b89fc' name='mynodes' filepath='drivers/of/fdt.c' line='450' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/irq.c' language='LANG_C89'>
+      <function-decl name='irq_of_parse_and_map' mangled-name='irq_of_parse_and_map' filepath='drivers/of/irq.c' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_of_parse_and_map'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/irq.c' line='36' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/irq.c' line='36' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='of_irq_parse_one' mangled-name='of_irq_parse_one' filepath='drivers/of/irq.c' line='286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_parse_one'>
+        <parameter type-id='9a537bbe' name='device' filepath='drivers/of/irq.c' line='286' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/irq.c' line='286' column='1'/>
+        <parameter type-id='51a94113' name='out_irq' filepath='drivers/of/irq.c' line='286' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_get' mangled-name='of_irq_get' filepath='drivers/of/irq.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_get'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/irq.c' line='387' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/irq.c' line='387' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_get_byname' mangled-name='of_irq_get_byname' filepath='drivers/of/irq.c' line='414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_get_byname'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/irq.c' line='414' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/of/irq.c' line='414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_to_resource' mangled-name='of_irq_to_resource' filepath='drivers/of/irq.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_to_resource'>
+        <parameter type-id='9a537bbe' name='dev' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <parameter type-id='c9d64c0d' name='r' filepath='drivers/of/irq.c' line='349' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_irq_find_parent' mangled-name='of_irq_find_parent' filepath='drivers/of/irq.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_find_parent'>
+        <parameter type-id='9a537bbe' name='child' filepath='drivers/of/irq.c' line='54' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/of_mdio.c' language='LANG_C89'>
+      <function-decl name='of_mdiobus_register' mangled-name='of_mdiobus_register' filepath='drivers/of/of_mdio.c' line='199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_mdiobus_register'>
+        <parameter type-id='ff47b24b' name='mdio' filepath='drivers/of/of_mdio.c' line='199' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_mdio.c' line='199' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/of_net.c' language='LANG_C89'>
+      <function-decl name='of_get_mac_address' mangled-name='of_get_mac_address' filepath='drivers/of/of_net.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_mac_address'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_net.c' line='97' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/of_reserved_mem.c' language='LANG_C89'>
+      <class-decl name='reserved_mem' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/of_reserved_mem.h' line='10' column='1' id='4fc2605b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/of_reserved_mem.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fdt_node' type-id='7359adad' visibility='default' filepath='include/linux/of_reserved_mem.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phandle' type-id='7359adad' visibility='default' filepath='include/linux/of_reserved_mem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='372c0155' visibility='default' filepath='include/linux/of_reserved_mem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='base' type-id='2522883d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='2522883d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_reserved_mem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='reserved_mem_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/of_reserved_mem.h' line='20' column='1' id='9d0cc828'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device_init' type-id='c3f1f74d' visibility='default' filepath='include/linux/of_reserved_mem.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device_release' type-id='8e91ceac' visibility='default' filepath='include/linux/of_reserved_mem.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9d0cc828' const='yes' id='80cb625d'/>
+      <pointer-type-def type-id='80cb625d' size-in-bits='64' id='372c0155'/>
+      <pointer-type-def type-id='76b325f9' size-in-bits='64' id='c3f1f74d'/>
+      <pointer-type-def type-id='4fc2605b' size-in-bits='64' id='f7f718cb'/>
+      <pointer-type-def type-id='24a92232' size-in-bits='64' id='8e91ceac'/>
+      <function-decl name='of_reserved_mem_lookup' mangled-name='of_reserved_mem_lookup' filepath='drivers/of/of_reserved_mem.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_lookup'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_reserved_mem.c' line='408' column='1'/>
+        <return type-id='f7f718cb'/>
+      </function-decl>
+      <function-decl name='of_reserved_mem_device_release' mangled-name='of_reserved_mem_device_release' filepath='drivers/of/of_reserved_mem.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_device_release'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/of_reserved_mem.c' line='376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='of_reserved_mem_device_init_by_idx' mangled-name='of_reserved_mem_device_init_by_idx' filepath='drivers/of/of_reserved_mem.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reserved_mem_device_init_by_idx'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/of_reserved_mem.c' line='321' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/of_reserved_mem.c' line='322' column='1'/>
+        <parameter type-id='95e97e5e' name='idx' filepath='drivers/of/of_reserved_mem.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='76b325f9'>
+        <parameter type-id='f7f718cb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24a92232'>
+        <parameter type-id='f7f718cb'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/platform.c' language='LANG_C89'>
+      <class-decl name='of_dev_auxdata' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/of_platform.h' line='37' column='1' id='c0d13b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compatible' type-id='26a90f95' visibility='default' filepath='include/linux/of_platform.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phys_addr' type-id='acc63fdf' visibility='default' filepath='include/linux/of_platform.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/of_platform.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/of_platform.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c0d13b05' const='yes' id='1f54f780'/>
+      <pointer-type-def type-id='1f54f780' size-in-bits='64' id='fcc1e09e'/>
+      <function-decl name='of_platform_populate' mangled-name='of_platform_populate' filepath='drivers/of/platform.c' line='468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_populate'>
+        <parameter type-id='9a537bbe' name='root' filepath='drivers/of/platform.c' line='468' column='1'/>
+        <parameter type-id='e5ce629e' name='matches' filepath='drivers/of/platform.c' line='469' column='1'/>
+        <parameter type-id='fcc1e09e' name='lookup' filepath='drivers/of/platform.c' line='470' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/of/platform.c' line='471' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_platform_depopulate' mangled-name='of_platform_depopulate' filepath='drivers/of/platform.c' line='590' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_depopulate'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/of/platform.c' line='590' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_of_platform_populate' mangled-name='devm_of_platform_populate' filepath='drivers/of/platform.c' line='613' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_platform_populate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/of/platform.c' line='613' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_platform_device_create' mangled-name='of_platform_device_create' filepath='drivers/of/platform.c' line='210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_platform_device_create'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/platform.c' line='210' column='1'/>
+        <parameter type-id='80f4b756' name='bus_id' filepath='drivers/of/platform.c' line='211' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/of/platform.c' line='212' column='1'/>
+        <return type-id='db362995'/>
+      </function-decl>
+      <function-decl name='of_find_device_by_node' mangled-name='of_find_device_by_node' filepath='drivers/of/platform.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_device_by_node'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/of/platform.c' line='49' column='1'/>
+        <return type-id='db362995'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/of/property.c' language='LANG_C89'>
+      <class-decl name='of_endpoint' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/of_graph.h' line='23' column='1' id='5821ac64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='f0981eeb' visibility='default' filepath='include/linux/of_graph.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/of_graph.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_node' type-id='0afa6ea3' visibility='default' filepath='include/linux/of_graph.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5821ac64' size-in-bits='64' id='a5eb3c12'/>
+      <function-decl name='of_graph_parse_endpoint' mangled-name='of_graph_parse_endpoint' filepath='drivers/of/property.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_parse_endpoint'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/property.c' line='532' column='1'/>
+        <parameter type-id='a5eb3c12' name='endpoint' filepath='drivers/of/property.c' line='533' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_graph_get_next_endpoint' mangled-name='of_graph_get_next_endpoint' filepath='drivers/of/property.c' line='596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_next_endpoint'>
+        <parameter type-id='0afa6ea3' name='parent' filepath='drivers/of/property.c' line='596' column='1'/>
+        <parameter type-id='9a537bbe' name='prev' filepath='drivers/of/property.c' line='597' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <var-decl name='of_fwnode_ops' type-id='2eb8da02' mangled-name='of_fwnode_ops' visibility='default' filepath='drivers/of/property.c' line='1357' column='1' elf-symbol-id='of_fwnode_ops'/>
+      <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='0afa6ea3' name='np' filepath='drivers/of/property.c' line='277' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='278' column='1'/>
+        <parameter type-id='f9409001' name='out_values' filepath='drivers/of/property.c' line='278' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='279' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='279' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='0afa6ea3' name='np' filepath='drivers/of/property.c' line='316' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='316' column='1'/>
+        <parameter type-id='3df9fd28' name='out_value' filepath='drivers/of/property.c' line='317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_count_elems_of_size' mangled-name='of_property_count_elems_of_size' filepath='drivers/of/property.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_count_elems_of_size'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='44' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='45' column='1'/>
+        <parameter type-id='95e97e5e' name='elem_size' filepath='drivers/of/property.c' line='45' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_u32_index' mangled-name='of_property_read_u32_index' filepath='drivers/of/property.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_u32_index'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='114' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='115' column='1'/>
+        <parameter type-id='19c2251e' name='index' filepath='drivers/of/property.c' line='116' column='1'/>
+        <parameter type-id='f9409001' name='out_value' filepath='drivers/of/property.c' line='116' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_graph_get_remote_port_parent' mangled-name='of_graph_get_remote_port_parent' filepath='drivers/of/property.c' line='733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_remote_port_parent'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/property.c' line='734' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_graph_get_remote_node' mangled-name='of_graph_get_remote_node' filepath='drivers/of/property.c' line='789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_remote_node'>
+        <parameter type-id='0afa6ea3' name='node' filepath='drivers/of/property.c' line='789' column='1'/>
+        <parameter type-id='19c2251e' name='port' filepath='drivers/of/property.c' line='790' column='1'/>
+        <parameter type-id='19c2251e' name='endpoint' filepath='drivers/of/property.c' line='790' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='of_property_read_string' mangled-name='of_property_read_string' filepath='drivers/of/property.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_string'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='394' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='394' column='1'/>
+        <parameter type-id='7d3cd834' name='out_string' filepath='drivers/of/property.c' line='395' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_variable_u8_array' mangled-name='of_property_read_variable_u8_array' filepath='drivers/of/property.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u8_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='184' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='185' column='1'/>
+        <parameter type-id='8bff8096' name='out_values' filepath='drivers/of/property.c' line='185' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='186' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_variable_u64_array' mangled-name='of_property_read_variable_u64_array' filepath='drivers/of/property.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u64_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='351' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='352' column='1'/>
+        <parameter type-id='3df9fd28' name='out_values' filepath='drivers/of/property.c' line='352' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='353' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_variable_u16_array' mangled-name='of_property_read_variable_u16_array' filepath='drivers/of/property.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_variable_u16_array'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='232' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='233' column='1'/>
+        <parameter type-id='26d4d46f' name='out_values' filepath='drivers/of/property.c' line='233' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_min' filepath='drivers/of/property.c' line='234' column='1'/>
+        <parameter type-id='b59d7dce' name='sz_max' filepath='drivers/of/property.c' line='234' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_u64_index' mangled-name='of_property_read_u64_index' filepath='drivers/of/property.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_u64_index'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='146' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='147' column='1'/>
+        <parameter type-id='19c2251e' name='index' filepath='drivers/of/property.c' line='148' column='1'/>
+        <parameter type-id='3df9fd28' name='out_value' filepath='drivers/of/property.c' line='148' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_read_string_helper' mangled-name='of_property_read_string_helper' filepath='drivers/of/property.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_read_string_helper'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='457' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='458' column='1'/>
+        <parameter type-id='7d3cd834' name='out_strs' filepath='drivers/of/property.c' line='458' column='1'/>
+        <parameter type-id='b59d7dce' name='sz' filepath='drivers/of/property.c' line='459' column='1'/>
+        <parameter type-id='95e97e5e' name='skip' filepath='drivers/of/property.c' line='459' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_property_match_string' mangled-name='of_property_match_string' filepath='drivers/of/property.c' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_property_match_string'>
+        <parameter type-id='0afa6ea3' name='np' filepath='drivers/of/property.c' line='418' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='drivers/of/property.c' line='418' column='1'/>
+        <parameter type-id='80f4b756' name='string' filepath='drivers/of/property.c' line='419' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_prop_next_u32' mangled-name='of_prop_next_u32' filepath='drivers/of/property.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_prop_next_u32'>
+        <parameter type-id='ddcd89c6' name='prop' filepath='drivers/of/property.c' line='484' column='1'/>
+        <parameter type-id='90144368' name='cur' filepath='drivers/of/property.c' line='484' column='1'/>
+        <parameter type-id='f9409001' name='pu' filepath='drivers/of/property.c' line='485' column='1'/>
+        <return type-id='90144368'/>
+      </function-decl>
+      <function-decl name='of_prop_next_string' mangled-name='of_prop_next_string' filepath='drivers/of/property.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_prop_next_string'>
+        <parameter type-id='ddcd89c6' name='prop' filepath='drivers/of/property.c' line='507' column='1'/>
+        <parameter type-id='80f4b756' name='cur' filepath='drivers/of/property.c' line='507' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='of_graph_get_endpoint_by_regs' mangled-name='of_graph_get_endpoint_by_regs' filepath='drivers/of/property.c' line='665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_graph_get_endpoint_by_regs'>
+        <parameter type-id='0afa6ea3' name='parent' filepath='drivers/of/property.c' line='666' column='1'/>
+        <parameter type-id='95e97e5e' name='port_reg' filepath='drivers/of/property.c' line='666' column='1'/>
+        <parameter type-id='95e97e5e' name='reg' filepath='drivers/of/property.c' line='666' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/opp/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2040' id='11641789'>
+        <subrange length='255' type-id='7ff19f0f' id='36e7f891'/>
+      </array-type-def>
+      <class-decl name='dev_pm_opp_supply' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='36' column='1' id='c1ac25a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u_volt' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u_volt_min' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u_volt_max' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u_amp' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='opp_table_access' filepath='drivers/opp/opp.h' line='115' column='1' id='943b03b5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='OPP_TABLE_ACCESS_UNKNOWN' value='0'/>
+        <enumerator name='OPP_TABLE_ACCESS_EXCLUSIVE' value='1'/>
+        <enumerator name='OPP_TABLE_ACCESS_SHARED' value='2'/>
+      </enum-decl>
+      <class-decl name='dev_pm_set_opp_data' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='66' column='1' id='d48383c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='old_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_opp' type-id='de175b0d' visibility='default' filepath='include/linux/pm_opp.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regulators' type-id='4e034354' visibility='default' filepath='include/linux/pm_opp.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='regulator_count' type-id='f0981eeb' visibility='default' filepath='include/linux/pm_opp.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/linux/pm_opp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pm_opp.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pm_opp_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pm_opp.h' line='50' column='1' id='de175b0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rate' type-id='7359adad' visibility='default' filepath='include/linux/pm_opp.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplies' type-id='614c5efc' visibility='default' filepath='include/linux/pm_opp.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02e48bc6' size-in-bits='64' id='79c84484'/>
+      <pointer-type-def type-id='c1ac25a6' size-in-bits='64' id='614c5efc'/>
+      <pointer-type-def type-id='d48383c4' size-in-bits='64' id='7727bbf2'/>
+      <pointer-type-def type-id='4b3ae594' size-in-bits='64' id='c1433076'/>
+      <pointer-type-def type-id='e62a60bd' size-in-bits='64' id='ebb60db5'/>
+      <pointer-type-def type-id='850c13f6' size-in-bits='64' id='4e034354'/>
+      <function-decl name='dev_pm_opp_remove' mangled-name='dev_pm_opp_remove' filepath='drivers/opp/core.c' line='1144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_remove'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1144' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='1144' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_opp_count' mangled-name='dev_pm_opp_get_opp_count' filepath='drivers/opp/core.c' line='326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_opp_count'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='326' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put' mangled-name='dev_pm_opp_put' filepath='drivers/opp/core.c' line='1125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='1125' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_find_freq_floor' mangled-name='dev_pm_opp_find_freq_floor' filepath='drivers/opp/core.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_floor'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='534' column='1'/>
+        <parameter type-id='1d2c2b85' name='freq' filepath='drivers/opp/core.c' line='535' column='1'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_find_freq_exact' mangled-name='dev_pm_opp_find_freq_exact' filepath='drivers/opp/core.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_exact'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='369' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='370' column='1'/>
+        <parameter type-id='b50a4934' name='available' filepath='drivers/opp/core.c' line='371' column='1'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_unregister_notifier' mangled-name='dev_pm_opp_unregister_notifier' filepath='drivers/opp/core.c' line='2174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_unregister_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2174' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2175' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_supported_hw' mangled-name='dev_pm_opp_set_supported_hw' filepath='drivers/opp/core.c' line='1433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_supported_hw'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1433' column='1'/>
+        <parameter type-id='aded214c' name='versions' filepath='drivers/opp/core.c' line='1434' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1434' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_regulators' mangled-name='dev_pm_opp_set_regulators' filepath='drivers/opp/core.c' line='1582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_regulators'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1582' column='1'/>
+        <parameter type-id='13956559' name='names' filepath='drivers/opp/core.c' line='1583' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/opp/core.c' line='1584' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_rate' mangled-name='dev_pm_opp_set_rate' filepath='drivers/opp/core.c' line='805' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_rate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='805' column='1'/>
+        <parameter type-id='7359adad' name='target_freq' filepath='drivers/opp/core.c' line='805' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_set_prop_name' mangled-name='dev_pm_opp_set_prop_name' filepath='drivers/opp/core.c' line='1493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_prop_name'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1493' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/opp/core.c' line='1493' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_remove_all_dynamic' mangled-name='dev_pm_opp_remove_all_dynamic' filepath='drivers/opp/core.c' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_remove_all_dynamic'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1204' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_register_notifier' mangled-name='dev_pm_opp_register_notifier' filepath='drivers/opp/core.c' line='2150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_register_notifier'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2150' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/opp/core.c' line='2150' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_supported_hw' mangled-name='dev_pm_opp_put_supported_hw' filepath='drivers/opp/core.c' line='1470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_supported_hw'>
+        <parameter type-id='e62a60bd' name='opp_table' filepath='drivers/opp/core.c' line='1470' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_regulators' mangled-name='dev_pm_opp_put_regulators' filepath='drivers/opp/core.c' line='1652' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_regulators'>
+        <parameter type-id='e62a60bd' name='opp_table' filepath='drivers/opp/core.c' line='1652' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_prop_name' mangled-name='dev_pm_opp_put_prop_name' filepath='drivers/opp/core.c' line='1526' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_prop_name'>
+        <parameter type-id='e62a60bd' name='opp_table' filepath='drivers/opp/core.c' line='1526' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_put_opp_table' mangled-name='dev_pm_opp_put_opp_table' filepath='drivers/opp/core.c' line='1077' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_put_opp_table'>
+        <parameter type-id='e62a60bd' name='opp_table' filepath='drivers/opp/core.c' line='1077' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_voltage' mangled-name='dev_pm_opp_get_voltage' filepath='drivers/opp/core.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_voltage'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='101' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_suspend_opp_freq' mangled-name='dev_pm_opp_get_suspend_opp_freq' filepath='drivers/opp/core.c' line='284' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_suspend_opp_freq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='284' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_opp_table' mangled-name='dev_pm_opp_get_opp_table' filepath='drivers/opp/core.c' line='1032' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_opp_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='1032' column='1'/>
+        <return type-id='e62a60bd'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_max_transition_latency' mangled-name='dev_pm_opp_get_max_transition_latency' filepath='drivers/opp/core.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_max_transition_latency'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='270' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_level' mangled-name='dev_pm_opp_get_level' filepath='drivers/opp/core.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_level'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='137' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_freq' mangled-name='dev_pm_opp_get_freq' filepath='drivers/opp/core.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_freq'>
+        <parameter type-id='02e48bc6' name='opp' filepath='drivers/opp/core.c' line='119' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_find_freq_ceil' mangled-name='dev_pm_opp_find_freq_ceil' filepath='drivers/opp/core.c' line='493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_find_freq_ceil'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='493' column='1'/>
+        <parameter type-id='1d2c2b85' name='freq' filepath='drivers/opp/core.c' line='494' column='1'/>
+        <return type-id='02e48bc6'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_disable' mangled-name='dev_pm_opp_disable' filepath='drivers/opp/core.c' line='2137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_disable'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2137' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='2137' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_add' mangled-name='dev_pm_opp_add' filepath='drivers/opp/core.c' line='2014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_add'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/core.c' line='2014' column='1'/>
+        <parameter type-id='7359adad' name='freq' filepath='drivers/opp/core.c' line='2014' column='1'/>
+        <parameter type-id='7359adad' name='u_volt' filepath='drivers/opp/core.c' line='2014' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b3ae594'>
+        <parameter type-id='7727bbf2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/opp/cpu.c' language='LANG_C89'>
+      <class-decl name='cpufreq_frequency_table' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/cpufreq.h' line='619' column='1' id='f7f17df9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='driver_data' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frequency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpufreq.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f7f17df9' size-in-bits='64' id='3b8b42e1'/>
+      <pointer-type-def type-id='3b8b42e1' size-in-bits='64' id='873a2591'/>
+      <function-decl name='dev_pm_opp_set_sharing_cpus' mangled-name='dev_pm_opp_set_sharing_cpus' filepath='drivers/opp/cpu.c' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_set_sharing_cpus'>
+        <parameter type-id='fa0b179b' name='cpu_dev' filepath='drivers/opp/cpu.c' line='155' column='1'/>
+        <parameter type-id='5f8a1ac4' name='cpumask' filepath='drivers/opp/cpu.c' line='156' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_init_cpufreq_table' mangled-name='dev_pm_opp_init_cpufreq_table' filepath='drivers/opp/cpu.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_init_cpufreq_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/cpu.c' line='43' column='1'/>
+        <parameter type-id='873a2591' name='table' filepath='drivers/opp/cpu.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_get_sharing_cpus' mangled-name='dev_pm_opp_get_sharing_cpus' filepath='drivers/opp/cpu.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_get_sharing_cpus'>
+        <parameter type-id='fa0b179b' name='cpu_dev' filepath='drivers/opp/cpu.c' line='205' column='1'/>
+        <parameter type-id='74bccedd' name='cpumask' filepath='drivers/opp/cpu.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_free_cpufreq_table' mangled-name='dev_pm_opp_free_cpufreq_table' filepath='drivers/opp/cpu.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_free_cpufreq_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/cpu.c' line='96' column='1'/>
+        <parameter type-id='873a2591' name='table' filepath='drivers/opp/cpu.c' line='97' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/opp/of.c' language='LANG_C89'>
+      <function-decl name='dev_pm_opp_of_add_table' mangled-name='dev_pm_opp_of_add_table' filepath='drivers/opp/of.c' line='768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_add_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/of.c' line='768' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_remove_table' mangled-name='dev_pm_opp_of_remove_table' filepath='drivers/opp/of.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_remove_table'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/of.c' line='510' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_register_em' mangled-name='dev_pm_opp_of_register_em' filepath='drivers/opp/of.c' line='1096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_register_em'>
+        <parameter type-id='74bccedd' name='cpus' filepath='drivers/opp/of.c' line='1096' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_get_sharing_cpus' mangled-name='dev_pm_opp_of_get_sharing_cpus' filepath='drivers/opp/of.c' line='918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_get_sharing_cpus'>
+        <parameter type-id='fa0b179b' name='cpu_dev' filepath='drivers/opp/of.c' line='918' column='1'/>
+        <parameter type-id='74bccedd' name='cpumask' filepath='drivers/opp/of.c' line='919' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_get_opp_desc_node' mangled-name='dev_pm_opp_of_get_opp_desc_node' filepath='drivers/opp/of.c' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_get_opp_desc_node'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/opp/of.c' line='36' column='1'/>
+        <return type-id='9a537bbe'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_cpumask_remove_table' mangled-name='dev_pm_opp_of_cpumask_remove_table' filepath='drivers/opp/of.c' line='849' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_cpumask_remove_table'>
+        <parameter type-id='5f8a1ac4' name='cpumask' filepath='drivers/opp/of.c' line='849' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_pm_opp_of_cpumask_add_table' mangled-name='dev_pm_opp_of_cpumask_add_table' filepath='drivers/opp/of.c' line='861' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_pm_opp_of_cpumask_add_table'>
+        <parameter type-id='5f8a1ac4' name='cpumask' filepath='drivers/opp/of.c' line='861' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/access.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='acc63fdf' size-in-bits='384' id='21e79dbc'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <qualified-type-def type-id='5c93f9a7' const='yes' id='b86c4e68'/>
+      <pointer-type-def type-id='b86c4e68' size-in-bits='64' id='947f31e6'/>
+      <function-decl name='pcie_capability_write_word' mangled-name='pcie_capability_write_word' filepath='drivers/pci/access.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_write_word'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/pci/access.c' line='465' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcie_capability_read_word' mangled-name='pcie_capability_read_word' filepath='drivers/pci/access.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_read_word'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <parameter type-id='26d4d46f' name='val' filepath='drivers/pci/access.c' line='402' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcie_capability_read_dword' mangled-name='pcie_capability_read_dword' filepath='drivers/pci/access.c' line='437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_capability_read_dword'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <parameter type-id='95e97e5e' name='pos' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/pci/access.c' line='437' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_word' mangled-name='pci_write_config_word' filepath='drivers/pci/access.c' line='562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_word'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <parameter type-id='1dc6a898' name='val' filepath='drivers/pci/access.c' line='562' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_dword' mangled-name='pci_write_config_dword' filepath='drivers/pci/access.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_dword'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='570' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='570' column='1'/>
+        <parameter type-id='19c2251e' name='val' filepath='drivers/pci/access.c' line='571' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_write_config_byte' mangled-name='pci_write_config_byte' filepath='drivers/pci/access.c' line='554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_write_config_byte'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='554' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='554' column='1'/>
+        <parameter type-id='f9b06939' name='val' filepath='drivers/pci/access.c' line='554' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_read_config_word' mangled-name='pci_read_config_word' filepath='drivers/pci/access.c' line='533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_word'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='533' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='533' column='1'/>
+        <parameter type-id='26d4d46f' name='val' filepath='drivers/pci/access.c' line='533' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_read_config_dword' mangled-name='pci_read_config_dword' filepath='drivers/pci/access.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_dword'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='543' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='543' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/pci/access.c' line='544' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_read_config_byte' mangled-name='pci_read_config_byte' filepath='drivers/pci/access.c' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_read_config_byte'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/access.c' line='523' column='1'/>
+        <parameter type-id='95e97e5e' name='where' filepath='drivers/pci/access.c' line='523' column='1'/>
+        <parameter type-id='8bff8096' name='val' filepath='drivers/pci/access.c' line='523' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/bus.c' language='LANG_C89'>
+      <qualified-type-def type-id='7e8e008e' const='yes' id='d1ae25b5'/>
+      <pointer-type-def type-id='d1ae25b5' size-in-bits='64' id='b425394d'/>
+      <pointer-type-def type-id='f3404a83' size-in-bits='64' id='82fb5c77'/>
+      <function-decl name='pci_walk_bus' mangled-name='pci_walk_bus' filepath='drivers/pci/bus.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_walk_bus'>
+        <parameter type-id='d1feb554' name='top' filepath='drivers/pci/bus.c' line='374' column='1'/>
+        <parameter type-id='82fb5c77' name='cb' filepath='drivers/pci/bus.c' line='374' column='1'/>
+        <parameter type-id='eaa32e2f' name='userdata' filepath='drivers/pci/bus.c' line='375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_bus_add_devices' mangled-name='pci_bus_add_devices' filepath='drivers/pci/bus.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_bus_add_devices'>
+        <parameter type-id='b425394d' name='bus' filepath='drivers/pci/bus.c' line='338' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_request_pci_bus_resources' mangled-name='devm_request_pci_bus_resources' filepath='drivers/pci/bus.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_pci_bus_resources'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/bus.c' line='93' column='1'/>
+        <parameter type-id='e84b031a' name='resources' filepath='drivers/pci/bus.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f3404a83'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/controller/dwc/pcie-designware-host.c' language='LANG_C89'>
+      <function-decl name='dw_pcie_setup_rc' mangled-name='dw_pcie_setup_rc' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='645' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_setup_rc'>
+        <parameter type-id='d91dfd7a' name='pp' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='645' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dw_pcie_msi_init' mangled-name='dw_pcie_msi_init' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_msi_init'>
+        <parameter type-id='d91dfd7a' name='pp' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='294' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dw_pcie_host_init' mangled-name='dw_pcie_host_init' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_host_init'>
+        <parameter type-id='d91dfd7a' name='pp' filepath='drivers/pci/controller/dwc/pcie-designware-host.c' line='319' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='69ba9ebc' size-in-bits='64' id='d91dfd7a'/>
+      <class-decl name='pcie_port' size-in-bits='2304' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='165' column='1' id='69ba9ebc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_bus_nr' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cfg0_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='va_cfg0_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cfg0_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cfg1_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='va_cfg1_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cfg1_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_base' type-id='acc63fdf' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='io_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='io_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mem_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mem_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cfg' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ops' type-id='19739a37' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='msi_irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_domain' type-id='7544e824' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='msi_data' type-id='cf29c9b3' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='msi_page' type-id='02f11ed4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='msi_irq_chip' type-id='8846a616' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_vectors' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='irq_mask' type-id='1c6311dd' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='root_bus' type-id='d1feb554' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='msi_irq_in_use' type-id='f46d9f4d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7a78fb67' size-in-bits='64' id='19739a37'/>
+      <qualified-type-def type-id='0647d262' const='yes' id='7a78fb67'/>
+      <class-decl name='dw_pcie_host_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='152' column='1' id='0647d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rd_own_conf' type-id='91669ea4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wr_own_conf' type-id='01d30b6f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rd_other_conf' type-id='ca79aa7b' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wr_other_conf' type-id='0f78538e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scan_bus' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_num_vectors' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msi_host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9defd450' size-in-bits='64' id='0681bc12'/>
+      <pointer-type-def type-id='fc9c6a93' size-in-bits='64' id='01d30b6f'/>
+      <pointer-type-def type-id='490169aa' size-in-bits='64' id='91669ea4'/>
+      <pointer-type-def type-id='89e11e34' size-in-bits='64' id='0f78538e'/>
+      <pointer-type-def type-id='2ddd86f7' size-in-bits='64' id='ca79aa7b'/>
+      <pointer-type-def type-id='dd8af1a7' size-in-bits='64' id='0603ffcb'/>
+      <function-type size-in-bits='64' id='9defd450'>
+        <parameter type-id='d91dfd7a' name='pp'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd8af1a7'>
+        <parameter type-id='d91dfd7a' name='pp'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/controller/dwc/pcie-designware.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='256' id='1c6311dd'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='384' id='64acd4ce'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='48' id='cf1a4160'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='dw_pcie' size-in-bits='3584' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='244' column='1' id='1f13c53a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dbi_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dbi_base2' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='atu_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_viewport' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='iatu_unroll_enabled' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pp' type-id='69ba9ebc' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='ep' type-id='6d93aa3a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ops' type-id='60824330' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pcie_port' size-in-bits='2304' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='165' column='1' id='69ba9ebc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_bus_nr' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cfg0_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='va_cfg0_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cfg0_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cfg1_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='va_cfg1_base' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cfg1_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_base' type-id='acc63fdf' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='io_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='io_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mem_base' type-id='91ce1af9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mem_bus_addr' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem_size' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cfg' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='io' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mem' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='busn' type-id='c9d64c0d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ops' type-id='19739a37' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='msi_irq' type-id='95e97e5e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_domain' type-id='7544e824' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='msi_domain' type-id='7544e824' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='msi_data' type-id='cf29c9b3' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='msi_page' type-id='02f11ed4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='msi_irq_chip' type-id='8846a616' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='num_vectors' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='irq_mask' type-id='1c6311dd' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='root_bus' type-id='d1feb554' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='msi_irq_in_use' type-id='f46d9f4d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_host_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='152' column='1' id='0647d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rd_own_conf' type-id='91669ea4' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wr_own_conf' type-id='01d30b6f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rd_other_conf' type-id='ca79aa7b' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wr_other_conf' type-id='0f78538e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='scan_bus' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_num_vectors' type-id='0603ffcb' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msi_host_init' type-id='0681bc12' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ep' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='211' column='1' id='6d93aa3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='epc' type-id='108dbc98' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='2beae3fa' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='phys_base' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='addr_size' type-id='b59d7dce' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='page_size' type-id='b59d7dce' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bar_to_atu' type-id='cf1a4160' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='outbound_addr' type-id='ff752d64' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ib_window_map' type-id='1d2c2b85' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ob_window_map' type-id='1d2c2b85' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_ib_windows' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ob_windows' type-id='19c2251e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='msi_mem' type-id='eaa32e2f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='msi_mem_phys' type-id='2522883d' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='msi_cap' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='msix_cap' type-id='f9b06939' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc' size-in-bits='7936' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='96' column='1' id='dc5abf9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci-epc.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='pci_epf' type-id='72f469ec' visibility='default' filepath='include/linux/pci-epc.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='ca58690c' visibility='default' filepath='include/linux/pci-epc.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mem' type-id='409d248a' visibility='default' filepath='include/linux/pci-epc.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='max_functions' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='group' type-id='97aff453' visibility='default' filepath='include/linux/pci-epc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/pci-epc.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='43' column='1' id='f69b84e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_header' type-id='11490396' visibility='default' filepath='include/linux/pci-epc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_bar' type-id='2f3c74d6' visibility='default' filepath='include/linux/pci-epc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clear_bar' type-id='8c67687b' visibility='default' filepath='include/linux/pci-epc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='map_addr' type-id='6e30384b' visibility='default' filepath='include/linux/pci-epc.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unmap_addr' type-id='d21964af' visibility='default' filepath='include/linux/pci-epc.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_msi' type-id='90ba6558' visibility='default' filepath='include/linux/pci-epc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_msi' type-id='517d281c' visibility='default' filepath='include/linux/pci-epc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_msix' type-id='4b11c9a5' visibility='default' filepath='include/linux/pci-epc.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_msix' type-id='517d281c' visibility='default' filepath='include/linux/pci-epc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='raise_irq' type-id='762aacc9' visibility='default' filepath='include/linux/pci-epc.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start' type-id='5bd7ff98' visibility='default' filepath='include/linux/pci-epc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='stop' type-id='b9f28869' visibility='default' filepath='include/linux/pci-epc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_features' type-id='9c05c933' visibility='default' filepath='include/linux/pci-epc.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pci-epc.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epf_header' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/pci-epf.h' line='40' column='1' id='a8a68c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendorid' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='deviceid' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='revid' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='progif_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='subclass_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='baseclass_code' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cache_line_size' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epf.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='subsys_vendor_id' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subsys_id' type-id='1dc6a898' visibility='default' filepath='include/linux/pci-epf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='interrupt_pin' type-id='ca830344' visibility='default' filepath='include/linux/pci-epf.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pci_interrupt_pin' filepath='include/linux/pci.h' line='122' column='1' id='ca830344'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PCI_INTERRUPT_UNKNOWN' value='0'/>
+        <enumerator name='PCI_INTERRUPT_INTA' value='1'/>
+        <enumerator name='PCI_INTERRUPT_INTB' value='2'/>
+        <enumerator name='PCI_INTERRUPT_INTC' value='3'/>
+        <enumerator name='PCI_INTERRUPT_INTD' value='4'/>
+      </enum-decl>
+      <class-decl name='pci_epf_bar' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pci-epf.h' line='97' column='1' id='676dd99b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_addr' type-id='cf29c9b3' visibility='default' filepath='include/linux/pci-epf.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epf.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='barno' type-id='ba7a26c1' visibility='default' filepath='include/linux/pci-epf.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/pci-epf.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pci_barno' filepath='include/linux/pci-epf.h' line='18' column='1' id='ba7a26c1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BAR_0' value='0'/>
+        <enumerator name='BAR_1' value='1'/>
+        <enumerator name='BAR_2' value='2'/>
+        <enumerator name='BAR_3' value='3'/>
+        <enumerator name='BAR_4' value='4'/>
+        <enumerator name='BAR_5' value='5'/>
+      </enum-decl>
+      <enum-decl name='pci_epc_irq_type' filepath='include/linux/pci-epc.h' line='16' column='1' id='94eb9e95'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PCI_EPC_IRQ_UNKNOWN' value='0'/>
+        <enumerator name='PCI_EPC_IRQ_LEGACY' value='1'/>
+        <enumerator name='PCI_EPC_IRQ_MSI' value='2'/>
+        <enumerator name='PCI_EPC_IRQ_MSIX' value='3'/>
+      </enum-decl>
+      <class-decl name='pci_epc_features' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='117' column='1' id='4e25a330'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='linkup_notifier' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='msi_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='msix_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/pci-epc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='reserved_bar' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bar_fixed_64bit' type-id='f9b06939' visibility='default' filepath='include/linux/pci-epc.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bar_fixed_size' type-id='64acd4ce' visibility='default' filepath='include/linux/pci-epc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='align' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_epc_mem' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci-epc.h' line='76' column='1' id='c9ea62cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='phys_base' type-id='2522883d' visibility='default' filepath='include/linux/pci-epc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bitmap' type-id='1d2c2b85' visibility='default' filepath='include/linux/pci-epc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page_size' type-id='b59d7dce' visibility='default' filepath='include/linux/pci-epc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/pci-epc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/pci-epc.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ep_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='204' column='1' id='84390049'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ep_init' type-id='08ed88d1' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raise_irq' type-id='f2ccca1f' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_features' type-id='19d36127' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dw_pcie_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='229' column='1' id='785fcb49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_addr_fixup' type-id='198dd6d9' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_dbi' type-id='139a279e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_dbi' type-id='f87f885a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_dbi2' type-id='139a279e' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_dbi2' type-id='f87f885a' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='link_up' type-id='470be30c' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start_link' type-id='470be30c' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='stop_link' type-id='5c683561' visibility='default' filepath='drivers/pci/controller/dwc/pcie-designware.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='84390049' const='yes' id='aa1e7074'/>
+      <pointer-type-def type-id='aa1e7074' size-in-bits='64' id='2beae3fa'/>
+      <qualified-type-def type-id='0647d262' const='yes' id='7a78fb67'/>
+      <pointer-type-def type-id='7a78fb67' size-in-bits='64' id='19739a37'/>
+      <qualified-type-def type-id='785fcb49' const='yes' id='e9f76e3a'/>
+      <pointer-type-def type-id='e9f76e3a' size-in-bits='64' id='60824330'/>
+      <qualified-type-def type-id='4e25a330' const='yes' id='a50e69e9'/>
+      <pointer-type-def type-id='a50e69e9' size-in-bits='64' id='98b07df9'/>
+      <pointer-type-def type-id='ffd077eb' size-in-bits='64' id='19d36127'/>
+      <pointer-type-def type-id='22bf175f' size-in-bits='64' id='9c05c933'/>
+      <qualified-type-def type-id='f69b84e9' const='yes' id='7ebeca6e'/>
+      <pointer-type-def type-id='7ebeca6e' size-in-bits='64' id='ca58690c'/>
+      <pointer-type-def type-id='1f13c53a' size-in-bits='64' id='8bf55d78'/>
+      <pointer-type-def type-id='6d93aa3a' size-in-bits='64' id='69a866d8'/>
+      <pointer-type-def type-id='f8ec0262' size-in-bits='64' id='470be30c'/>
+      <pointer-type-def type-id='8d04d39b' size-in-bits='64' id='f2ccca1f'/>
+      <pointer-type-def type-id='08cc17f6' size-in-bits='64' id='5bd7ff98'/>
+      <pointer-type-def type-id='ee21f28a' size-in-bits='64' id='517d281c'/>
+      <pointer-type-def type-id='756c36fd' size-in-bits='64' id='762aacc9'/>
+      <pointer-type-def type-id='8c6e144c' size-in-bits='64' id='2f3c74d6'/>
+      <pointer-type-def type-id='5ff29c2c' size-in-bits='64' id='11490396'/>
+      <pointer-type-def type-id='ac107737' size-in-bits='64' id='6e30384b'/>
+      <pointer-type-def type-id='72ec4a41' size-in-bits='64' id='4b11c9a5'/>
+      <pointer-type-def type-id='a47ced76' size-in-bits='64' id='90ba6558'/>
+      <pointer-type-def type-id='9defd450' size-in-bits='64' id='0681bc12'/>
+      <pointer-type-def type-id='fc9c6a93' size-in-bits='64' id='01d30b6f'/>
+      <pointer-type-def type-id='490169aa' size-in-bits='64' id='91669ea4'/>
+      <pointer-type-def type-id='89e11e34' size-in-bits='64' id='0f78538e'/>
+      <pointer-type-def type-id='2ddd86f7' size-in-bits='64' id='ca79aa7b'/>
+      <pointer-type-def type-id='dc5abf9a' size-in-bits='64' id='108dbc98'/>
+      <pointer-type-def type-id='c9ea62cc' size-in-bits='64' id='409d248a'/>
+      <pointer-type-def type-id='676dd99b' size-in-bits='64' id='0f1b379b'/>
+      <pointer-type-def type-id='a8a68c63' size-in-bits='64' id='0ce81823'/>
+      <pointer-type-def type-id='69ba9ebc' size-in-bits='64' id='d91dfd7a'/>
+      <pointer-type-def type-id='2522883d' size-in-bits='64' id='ff752d64'/>
+      <pointer-type-def type-id='d1e608d4' size-in-bits='64' id='139a279e'/>
+      <pointer-type-def type-id='aa1606dd' size-in-bits='64' id='198dd6d9'/>
+      <pointer-type-def type-id='842232f5' size-in-bits='64' id='5c683561'/>
+      <pointer-type-def type-id='47344208' size-in-bits='64' id='f87f885a'/>
+      <pointer-type-def type-id='195ce0ad' size-in-bits='64' id='08ed88d1'/>
+      <pointer-type-def type-id='2bf8974d' size-in-bits='64' id='b9f28869'/>
+      <pointer-type-def type-id='2719d167' size-in-bits='64' id='8c67687b'/>
+      <pointer-type-def type-id='3c21941b' size-in-bits='64' id='d21964af'/>
+      <pointer-type-def type-id='dd8af1a7' size-in-bits='64' id='0603ffcb'/>
+      <function-decl name='dw_pcie_write_dbi' mangled-name='dw_pcie_write_dbi' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_write_dbi'>
+        <parameter type-id='8bf55d78' name='pci' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='153' column='1'/>
+        <parameter type-id='19c2251e' name='reg' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='153' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='153' column='1'/>
+        <parameter type-id='19c2251e' name='val' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='153' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dw_pcie_write' mangled-name='dw_pcie_write' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_write'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='119' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='119' column='1'/>
+        <parameter type-id='19c2251e' name='val' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='119' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_wait_for_link' mangled-name='dw_pcie_wait_for_link' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_wait_for_link'>
+        <parameter type-id='8bf55d78' name='pci' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='446' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_read_dbi' mangled-name='dw_pcie_read_dbi' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_read_dbi'>
+        <parameter type-id='8bf55d78' name='pci' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='137' column='1'/>
+        <parameter type-id='19c2251e' name='reg' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='137' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='137' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='dw_pcie_read' mangled-name='dw_pcie_read' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dw_pcie_read'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='97' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='97' column='1'/>
+        <parameter type-id='f9409001' name='val' filepath='drivers/pci/controller/dwc/pcie-designware.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='f05eea43' size-in-bits='64' id='97aff453'/>
+      <function-type size-in-bits='64' id='ffd077eb'>
+        <parameter type-id='69a866d8'/>
+        <return type-id='98b07df9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22bf175f'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='98b07df9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8ec0262'>
+        <parameter type-id='8bf55d78'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d04d39b'>
+        <parameter type-id='69a866d8'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='94eb9e95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08cc17f6'>
+        <parameter type-id='108dbc98'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee21f28a'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='756c36fd'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='94eb9e95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c6e144c'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0f1b379b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ff29c2c'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0ce81823'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac107737'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='2522883d'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72ec4a41'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a47ced76'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc9c6a93'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='490169aa'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89e11e34'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ddd86f7'>
+        <parameter type-id='d91dfd7a'/>
+        <parameter type-id='d1feb554'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1e608d4'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa1606dd'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='842232f5'>
+        <parameter type-id='8bf55d78'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47344208'>
+        <parameter type-id='8bf55d78'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='195ce0ad'>
+        <parameter type-id='69a866d8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bf8974d'>
+        <parameter type-id='108dbc98'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2719d167'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0f1b379b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c21941b'>
+        <parameter type-id='108dbc98'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='2522883d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='config_group' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='79' column='1' id='f05eea43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cg_item' type-id='79236ccf' visibility='default' filepath='include/linux/configfs.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cg_children' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cg_subsys' type-id='598755ca' visibility='default' filepath='include/linux/configfs.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='default_groups' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='group_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_item' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='40' column='1' id='79236ccf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_name' type-id='26a90f95' visibility='default' filepath='include/linux/configfs.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ci_namebuf' type-id='664ac0b7' visibility='default' filepath='include/linux/configfs.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ci_kref' type-id='400fb07b' visibility='default' filepath='include/linux/configfs.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_parent' type-id='7a29ff27' visibility='default' filepath='include/linux/configfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ci_group' type-id='97aff453' visibility='default' filepath='include/linux/configfs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_type' type-id='596e8e55' visibility='default' filepath='include/linux/configfs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dentry' type-id='27675065' visibility='default' filepath='include/linux/configfs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4bdc1a8c' size-in-bits='64' id='598755ca'/>
+      <class-decl name='configfs_subsystem' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='226' column='1' id='4bdc1a8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='su_group' type-id='f05eea43' visibility='default' filepath='include/linux/configfs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='su_mutex' type-id='925167dc' visibility='default' filepath='include/linux/configfs.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='79236ccf' size-in-bits='64' id='7a29ff27'/>
+      <pointer-type-def type-id='d88ac15d' size-in-bits='64' id='596e8e55'/>
+      <qualified-type-def type-id='d6939bb8' const='yes' id='d88ac15d'/>
+      <class-decl name='config_item_type' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='67' column='1' id='d6939bb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ct_item_ops' type-id='603e39d9' visibility='default' filepath='include/linux/configfs.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ct_group_ops' type-id='e8051adb' visibility='default' filepath='include/linux/configfs.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ct_attrs' type-id='bbec9157' visibility='default' filepath='include/linux/configfs.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ct_bin_attrs' type-id='07234631' visibility='default' filepath='include/linux/configfs.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='32db1b87' size-in-bits='64' id='bbec9157'/>
+      <pointer-type-def type-id='9bdc8381' size-in-bits='64' id='07234631'/>
+      <pointer-type-def type-id='6d5a1dab' size-in-bits='64' id='e8051adb'/>
+      <pointer-type-def type-id='a60315e1' size-in-bits='64' id='603e39d9'/>
+      <class-decl name='configfs_group_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='218' column='1' id='6d5a1dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='make_item' type-id='263d54b5' visibility='default' filepath='include/linux/configfs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='make_group' type-id='45c2a1d1' visibility='default' filepath='include/linux/configfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit_item' type-id='d841f43f' visibility='default' filepath='include/linux/configfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect_notify' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drop_item' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_item_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='212' column='1' id='a60315e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='62924a52' visibility='default' filepath='include/linux/configfs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='allow_link' type-id='dbb91d59' visibility='default' filepath='include/linux/configfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drop_link' type-id='63faaa44' visibility='default' filepath='include/linux/configfs.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5f2e9b8f' size-in-bits='64' id='32db1b87'/>
+      <pointer-type-def type-id='77d12c79' size-in-bits='64' id='9bdc8381'/>
+      <class-decl name='configfs_attribute' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='117' column='1' id='5f2e9b8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ca_name' type-id='80f4b756' visibility='default' filepath='include/linux/configfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ca_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ca_mode' type-id='2594b00f' visibility='default' filepath='include/linux/configfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='03385b06' visibility='default' filepath='include/linux/configfs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='store' type-id='f2e3940a' visibility='default' filepath='include/linux/configfs.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_bin_attribute' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='153' column='1' id='77d12c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_attr' type-id='5f2e9b8f' visibility='default' filepath='include/linux/configfs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/configfs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cb_max_size' type-id='b59d7dce' visibility='default' filepath='include/linux/configfs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='18ab9185' size-in-bits='64' id='45c2a1d1'/>
+      <pointer-type-def type-id='34f1eb39' size-in-bits='64' id='263d54b5'/>
+      <pointer-type-def type-id='72ce0fb3' size-in-bits='64' id='d841f43f'/>
+      <pointer-type-def type-id='8b1bf035' size-in-bits='64' id='dbb91d59'/>
+      <pointer-type-def type-id='0f872816' size-in-bits='64' id='ee7d45c8'/>
+      <pointer-type-def type-id='d724f4d0' size-in-bits='64' id='62924a52'/>
+      <pointer-type-def type-id='e29a2892' size-in-bits='64' id='63faaa44'/>
+      <pointer-type-def type-id='7f00154c' size-in-bits='64' id='03385b06'/>
+      <pointer-type-def type-id='0bb075d8' size-in-bits='64' id='f2e3940a'/>
+      <pointer-type-def type-id='baf016ef' size-in-bits='64' id='8d4ac8c3'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/iov.c' language='LANG_C89'>
+      <function-decl name='pci_vfs_assigned' mangled-name='pci_vfs_assigned' filepath='drivers/pci/iov.c' line='966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_vfs_assigned'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/iov.c' line='966' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_sriov' mangled-name='pci_enable_sriov' filepath='drivers/pci/iov.c' line='918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_sriov'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/iov.c' line='918' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_virtfn' filepath='drivers/pci/iov.c' line='918' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_disable_sriov' mangled-name='pci_disable_sriov' filepath='drivers/pci/iov.c' line='933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_sriov'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/iov.c' line='933' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/irq.c' language='LANG_C89'>
+      <function-decl name='pci_request_irq' mangled-name='pci_request_irq' filepath='drivers/pci/irq.c' line='83' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_irq'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='drivers/pci/irq.c' line='83' column='1'/>
+        <parameter type-id='29591c9a' name='thread_fn' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/pci/irq.c' line='84' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_free_irq' mangled-name='pci_free_irq' filepath='drivers/pci/irq.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_free_irq'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='drivers/pci/irq.c' line='120' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/msi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d87a4b41' size-in-bits='128' id='f7b1166e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='msi_domain_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='292' column='1' id='7df9052a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='adccc7b0' visibility='default' filepath='include/linux/msi.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/msi.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/msi.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='handler_name' type-id='80f4b756' visibility='default' filepath='include/linux/msi.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='300' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_domain_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='258' column='1' id='fef1be32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_hwirq' type-id='e41e7f12' visibility='default' filepath='include/linux/msi.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msi_init' type-id='390f2646' visibility='default' filepath='include/linux/msi.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_free' type-id='f28039ea' visibility='default' filepath='include/linux/msi.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='msi_check' type-id='40825cfb' visibility='default' filepath='include/linux/msi.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msi_prepare' type-id='68c675aa' visibility='default' filepath='include/linux/msi.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='msi_finish' type-id='9d1da97a' visibility='default' filepath='include/linux/msi.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_desc' type-id='b3c70e7a' visibility='default' filepath='include/linux/msi.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='handle_error' type-id='ed647258' visibility='default' filepath='include/linux/msi.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='msi_alloc_info_t' type-id='b3d73007' filepath='include/asm-generic/msi.h' line='29' column='1' id='e36320e9'/>
+      <class-decl name='msi_alloc_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/asm-generic/msi.h' line='22' column='1' id='b3d73007'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='b11825ce' visibility='default' filepath='include/asm-generic/msi.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='88370ce9' visibility='default' filepath='include/asm-generic/msi.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scratchpad' type-id='f7b1166e' visibility='default' filepath='include/asm-generic/msi.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/asm-generic/msi.h' line='25' column='1' id='d87a4b41'>
+        <data-member access='public'>
+          <var-decl name='ul' type-id='7359adad' visibility='default' filepath='include/asm-generic/msi.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/asm-generic/msi.h' line='27' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='msix_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='1453' column='1' id='6d6fcd23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vector' type-id='19c2251e' visibility='default' filepath='include/linux/pci.h' line='1454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='1455' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a1aadc50' size-in-bits='64' id='68c675aa'/>
+      <pointer-type-def type-id='78117ea6' size-in-bits='64' id='ed647258'/>
+      <pointer-type-def type-id='aaa8d90f' size-in-bits='64' id='40825cfb'/>
+      <pointer-type-def type-id='5e584ca4' size-in-bits='64' id='390f2646'/>
+      <pointer-type-def type-id='e36320e9' size-in-bits='64' id='ccf3b302'/>
+      <pointer-type-def type-id='7df9052a' size-in-bits='64' id='a9bcccf8'/>
+      <pointer-type-def type-id='fef1be32' size-in-bits='64' id='adccc7b0'/>
+      <pointer-type-def type-id='6d6fcd23' size-in-bits='64' id='682fb763'/>
+      <pointer-type-def type-id='2381d398' size-in-bits='64' id='e41e7f12'/>
+      <pointer-type-def type-id='ec180093' size-in-bits='64' id='887112a7'/>
+      <pointer-type-def type-id='aefe43a8' size-in-bits='64' id='f28039ea'/>
+      <pointer-type-def type-id='95e62b18' size-in-bits='64' id='9d1da97a'/>
+      <pointer-type-def type-id='0706d6e8' size-in-bits='64' id='b3c70e7a'/>
+      <function-decl name='pci_msi_create_irq_domain' mangled-name='pci_msi_create_irq_domain' filepath='drivers/pci/msi.c' line='1523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_create_irq_domain'>
+        <parameter type-id='4a935625' name='fwnode' filepath='drivers/pci/msi.c' line='1523' column='1'/>
+        <parameter type-id='a9bcccf8' name='info' filepath='drivers/pci/msi.c' line='1524' column='1'/>
+        <parameter type-id='7544e824' name='parent' filepath='drivers/pci/msi.c' line='1525' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='pci_disable_msi' mangled-name='pci_disable_msi' filepath='drivers/pci/msi.c' line='983' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_msi'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='983' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_disable_msix' mangled-name='pci_disable_msix' filepath='drivers/pci/msi.c' line='1070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_msix'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1070' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_msi_vec_count' mangled-name='pci_msi_vec_count' filepath='drivers/pci/msi.c' line='944' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_vec_count'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='944' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_msi_unmask_irq' mangled-name='pci_msi_unmask_irq' filepath='drivers/pci/msi.c' line='262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_unmask_irq'>
+        <parameter type-id='1c475548' name='data' filepath='drivers/pci/msi.c' line='262' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_msi_mask_irq' mangled-name='pci_msi_mask_irq' filepath='drivers/pci/msi.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_msi_mask_irq'>
+        <parameter type-id='1c475548' name='data' filepath='drivers/pci/msi.c' line='252' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_irq_vector' mangled-name='pci_irq_vector' filepath='drivers/pci/msi.c' line='1299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_vector'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1299' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='drivers/pci/msi.c' line='1299' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_irq_get_affinity' mangled-name='pci_irq_get_affinity' filepath='drivers/pci/msi.c' line='1333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_irq_get_affinity'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1333' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='drivers/pci/msi.c' line='1333' column='1'/>
+        <return type-id='5f8a1ac4'/>
+      </function-decl>
+      <function-decl name='pci_free_irq_vectors' mangled-name='pci_free_irq_vectors' filepath='drivers/pci/msi.c' line='1287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_free_irq_vectors'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1287' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_enable_msix_range' mangled-name='pci_enable_msix_range' filepath='drivers/pci/msi.c' line='1205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_msix_range'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1205' column='1'/>
+        <parameter type-id='682fb763' name='entries' filepath='drivers/pci/msi.c' line='1205' column='1'/>
+        <parameter type-id='95e97e5e' name='minvec' filepath='drivers/pci/msi.c' line='1206' column='1'/>
+        <parameter type-id='95e97e5e' name='maxvec' filepath='drivers/pci/msi.c' line='1206' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_msi' mangled-name='pci_enable_msi' filepath='drivers/pci/msi.c' line='1148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_msi'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1148' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_alloc_irq_vectors_affinity' mangled-name='pci_alloc_irq_vectors_affinity' filepath='drivers/pci/msi.c' line='1230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_alloc_irq_vectors_affinity'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/msi.c' line='1230' column='1'/>
+        <parameter type-id='f0981eeb' name='min_vecs' filepath='drivers/pci/msi.c' line='1230' column='1'/>
+        <parameter type-id='f0981eeb' name='max_vecs' filepath='drivers/pci/msi.c' line='1231' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/pci/msi.c' line='1231' column='1'/>
+        <parameter type-id='8a876638' name='affd' filepath='drivers/pci/msi.c' line='1232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='msi_desc_to_pci_sysdata' mangled-name='msi_desc_to_pci_sysdata' filepath='drivers/pci/msi.c' line='1382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msi_desc_to_pci_sysdata'>
+        <parameter type-id='b11825ce' name='desc' filepath='drivers/pci/msi.c' line='1382' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a1aadc50'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78117ea6'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='b11825ce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aaa8d90f'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e584ca4'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='88370ce9'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2381d398'>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='ccf3b302'/>
+        <return type-id='88370ce9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec180093'>
+        <parameter type-id='8a876638'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aefe43a8'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='a9bcccf8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95e62b18'>
+        <parameter type-id='ccf3b302'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0706d6e8'>
+        <parameter type-id='ccf3b302'/>
+        <parameter type-id='b11825ce'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='064acd7a' size-in-bits='64' id='1c475548'/>
+      <pointer-type-def type-id='d2b46ce8' size-in-bits='64' id='b11825ce'/>
+      <class-decl name='irq_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='175' column='1' id='064acd7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='common' type-id='a4a39eba' visibility='default' filepath='include/linux/irq.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/irq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/irq.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent_data' type-id='1c475548' visibility='default' filepath='include/linux/irq.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='85' column='1' id='d2b46ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nvec_used' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='03ba410a' visibility='default' filepath='include/linux/msi.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='affinity' type-id='ef2b6ec8' visibility='default' filepath='include/linux/msi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iommu_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_msi_msg' type-id='aecf9817' visibility='default' filepath='include/linux/msi.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write_msi_msg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='153fff9c' visibility='default' filepath='include/linux/msi.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_msg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='8' column='1' id='03ba410a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address_lo' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address_hi' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bab69d9a' size-in-bits='64' id='ef2b6ec8'/>
+      <pointer-type-def type-id='f1a268ec' size-in-bits='64' id='a4a39eba'/>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='100' column='1' id='153fff9c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='72589d89' visibility='default' filepath='include/linux/msi.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='platform' type-id='2ae2d1e2' visibility='default' filepath='include/linux/msi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fsl_mc' type-id='9930269d' visibility='default' filepath='include/linux/msi.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='inta' type-id='248c6527' visibility='default' filepath='include/linux/msi.h' line='129' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='9d9f3e8b' size-in-bits='64' id='aecf9817'/>
+      <class-decl name='fsl_mc_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='46' column='1' id='9930269d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_affinity_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='293' column='1' id='bab69d9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='1354385d' visibility='default' filepath='include/linux/interrupt.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_common_data' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='145' column='1' id='f1a268ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_desc' type-id='b11825ce' visibility='default' filepath='include/linux/irq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='effective_affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ipi_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_msi_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='37' column='1' id='2ae2d1e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_priv_data' type-id='1f211d93' visibility='default' filepath='include/linux/msi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ti_sci_inta_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='54' column='1' id='248c6527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='102' column='1' id='72589d89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='masked' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='msi_attrib' type-id='2ce04ee0' visibility='default' filepath='include/linux/msi.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='79c40656' visibility='default' filepath='include/linux/msi.h' line='114' 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='include/linux/msi.h' line='104' column='1' id='2ce04ee0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_msix' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='multiple' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='multi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='maskbit' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_64' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_virtual' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='entry_nr' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='default_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5d1d7263' size-in-bits='64' id='1f211d93'/>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='114' column='1' id='79c40656'>
+        <data-member access='public'>
+          <var-decl name='mask_pos' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mask_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='platform_msi_priv_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d1d7263'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/of.c' language='LANG_C89'>
+      <function-decl name='of_irq_parse_and_map_pci' mangled-name='of_irq_parse_and_map_pci' filepath='drivers/pci/of.c' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_irq_parse_and_map_pci'>
+        <parameter type-id='947f31e6' name='dev' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <parameter type-id='f9b06939' name='slot' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <parameter type-id='f9b06939' name='pin' filepath='drivers/pci/of.c' line='469' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_of_pci_get_host_bridge_resources' mangled-name='devm_of_pci_get_host_bridge_resources' filepath='drivers/pci/of.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_pci_get_host_bridge_resources'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/of.c' line='258' column='1'/>
+        <parameter type-id='002ac4a6' name='busno' filepath='drivers/pci/of.c' line='259' column='1'/>
+        <parameter type-id='002ac4a6' name='bus_max' filepath='drivers/pci/of.c' line='259' column='1'/>
+        <parameter type-id='e84b031a' name='resources' filepath='drivers/pci/of.c' line='260' column='1'/>
+        <parameter type-id='9e6a6c02' name='io_base' filepath='drivers/pci/of.c' line='260' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='acc63fdf' size-in-bits='64' id='9e6a6c02'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/pci-driver.c' language='LANG_C89'>
+      <var-decl name='pci_bus_type' type-id='b31bfc8a' mangled-name='pci_bus_type' visibility='default' filepath='drivers/pci/pci-driver.c' line='1655' column='1' elf-symbol-id='pci_bus_type'/>
+      <function-decl name='pci_unregister_driver' mangled-name='pci_unregister_driver' filepath='drivers/pci/pci-driver.c' line='1463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_unregister_driver'>
+        <parameter type-id='85b59624' name='drv' filepath='drivers/pci/pci-driver.c' line='1463' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_match_id' mangled-name='pci_match_id' filepath='drivers/pci/pci-driver.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_match_id'>
+        <parameter type-id='92fc8aa5' name='ids' filepath='drivers/pci/pci-driver.c' line='221' column='1'/>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci-driver.c' line='222' column='1'/>
+        <return type-id='92fc8aa5'/>
+      </function-decl>
+      <function-decl name='pci_dev_put' mangled-name='pci_dev_put' filepath='drivers/pci/pci-driver.c' line='1548' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_dev_put'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci-driver.c' line='1548' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__pci_register_driver' mangled-name='__pci_register_driver' filepath='drivers/pci/pci-driver.c' line='1435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pci_register_driver'>
+        <parameter type-id='85b59624' name='drv' filepath='drivers/pci/pci-driver.c' line='1435' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/pci/pci-driver.c' line='1435' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/pci/pci-driver.c' line='1436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/pci.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ac1c7ae1' size-in-bits='infinite' id='5f7bfbc1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='pci_saved_state' size-in-bits='512' is-struct='yes' visibility='default' filepath='drivers/pci/pci.c' line='1490' column='1' id='bdbf2231'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config_space' type-id='02fdec64' visibility='default' filepath='drivers/pci/pci.c' line='1491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap' type-id='5f7bfbc1' visibility='default' filepath='drivers/pci/pci.c' line='1492' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_cap_saved_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='274' column='1' id='ac1c7ae1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_nr' type-id='1dc6a898' visibility='default' filepath='include/linux/pci.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cap_extended' type-id='b50a4934' visibility='default' filepath='include/linux/pci.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='c165e8b9' visibility='default' filepath='include/linux/pci.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bdbf2231' size-in-bits='64' id='e4acc659'/>
+      <pointer-type-def type-id='e4acc659' size-in-bits='64' id='6efc6709'/>
+      <function-decl name='pci_disable_device' mangled-name='pci_disable_device' filepath='drivers/pci/pci.c' line='1931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_disable_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1931' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_release_region' mangled-name='pci_release_region' filepath='drivers/pci/pci.c' line='3683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_region'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3683' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='3683' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_release_selected_regions' mangled-name='pci_release_selected_regions' filepath='drivers/pci/pci.c' line='3780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_selected_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3780' column='1'/>
+        <parameter type-id='95e97e5e' name='bars' filepath='drivers/pci/pci.c' line='3780' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_find_ext_capability' mangled-name='pci_find_ext_capability' filepath='drivers/pci/pci.c' line='546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_ext_capability'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='546' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='drivers/pci/pci.c' line='546' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_find_capability' mangled-name='pci_find_capability' filepath='drivers/pci/pci.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_capability'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='440' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='drivers/pci/pci.c' line='440' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pcim_enable_device' mangled-name='pcim_enable_device' filepath='drivers/pci/pci.c' line='1811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcim_enable_device'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='1811' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_store_saved_state' mangled-name='pci_store_saved_state' filepath='drivers/pci/pci.c' line='1502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_store_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1502' column='1'/>
+        <return type-id='e4acc659'/>
+      </function-decl>
+      <function-decl name='pci_set_power_state' mangled-name='pci_set_power_state' filepath='drivers/pci/pci.c' line='1098' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_power_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1098' column='1'/>
+        <parameter type-id='49c32219' name='state' filepath='drivers/pci/pci.c' line='1098' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_set_mwi' mangled-name='pci_set_mwi' filepath='drivers/pci/pci.c' line='4247' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_mwi'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4247' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_set_master' mangled-name='pci_set_master' filepath='drivers/pci/pci.c' line='4184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_set_master'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4184' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_select_bars' mangled-name='pci_select_bars' filepath='drivers/pci/pci.c' line='5930' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_select_bars'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='5930' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/pci/pci.c' line='5930' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_save_state' mangled-name='pci_save_state' filepath='drivers/pci/pci.c' line='1345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_save_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1345' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_restore_state' mangled-name='pci_restore_state' filepath='drivers/pci/pci.c' line='1456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_restore_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1456' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_reset_function' mangled-name='pci_reset_function' filepath='drivers/pci/pci.c' line='5085' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_reset_function'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='5085' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_request_selected_regions' mangled-name='pci_request_selected_regions' filepath='drivers/pci/pci.c' line='3816' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_selected_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3816' column='1'/>
+        <parameter type-id='95e97e5e' name='bars' filepath='drivers/pci/pci.c' line='3816' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_request_regions' mangled-name='pci_request_regions' filepath='drivers/pci/pci.c' line='3860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3860' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3860' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_request_region' mangled-name='pci_request_region' filepath='drivers/pci/pci.c' line='3766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_request_region'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3766' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='3766' column='1'/>
+        <parameter type-id='80f4b756' name='res_name' filepath='drivers/pci/pci.c' line='3766' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_release_regions' mangled-name='pci_release_regions' filepath='drivers/pci/pci.c' line='3841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_release_regions'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='3841' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_load_saved_state' mangled-name='pci_load_saved_state' filepath='drivers/pci/pci.c' line='1541' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_load_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1541' column='1'/>
+        <parameter type-id='e4acc659' name='state' filepath='drivers/pci/pci.c' line='1542' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_load_and_free_saved_state' mangled-name='pci_load_and_free_saved_state' filepath='drivers/pci/pci.c' line='1578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_load_and_free_saved_state'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1578' column='1'/>
+        <parameter type-id='6efc6709' name='state' filepath='drivers/pci/pci.c' line='1579' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_ioremap_wc_bar' mangled-name='pci_ioremap_wc_bar' filepath='drivers/pci/pci.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_ioremap_wc_bar'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='184' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='184' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_ioremap_bar' mangled-name='pci_ioremap_bar' filepath='drivers/pci/pci.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_ioremap_bar'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='169' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='drivers/pci/pci.c' line='169' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_intx' mangled-name='pci_intx' filepath='drivers/pci/pci.c' line='4337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_intx'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='4337' column='1'/>
+        <parameter type-id='95e97e5e' name='enable' filepath='drivers/pci/pci.c' line='4337' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_find_pcie_root_port' mangled-name='pci_find_pcie_root_port' filepath='drivers/pci/pci.c' line='696' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_pcie_root_port'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='696' column='1'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+      <function-decl name='pci_find_next_capability' mangled-name='pci_find_next_capability' filepath='drivers/pci/pci.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_next_capability'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <parameter type-id='f9b06939' name='pos' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='drivers/pci/pci.c' line='394' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_wake' mangled-name='pci_enable_wake' filepath='drivers/pci/pci.c' line='2287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_wake'>
+        <parameter type-id='85196e3f' name='pci_dev' filepath='drivers/pci/pci.c' line='2287' column='1'/>
+        <parameter type-id='49c32219' name='state' filepath='drivers/pci/pci.c' line='2287' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/pci/pci.c' line='2287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_device_mem' mangled-name='pci_enable_device_mem' filepath='drivers/pci/pci.c' line='1721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_device_mem'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1721' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_enable_device' mangled-name='pci_enable_device' filepath='drivers/pci/pci.c' line='1738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_enable_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='1738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_device_is_present' mangled-name='pci_device_is_present' filepath='drivers/pci/pci.c' line='6081' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_device_is_present'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pci.c' line='6081' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='pci_d3cold_disable' mangled-name='pci_d3cold_disable' filepath='drivers/pci/pci.c' line='2779' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_d3cold_disable'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='2779' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_common_swizzle' mangled-name='pci_common_swizzle' filepath='drivers/pci/pci.c' line='3660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_common_swizzle'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='3660' column='1'/>
+        <parameter type-id='8bff8096' name='pinp' filepath='drivers/pci/pci.c' line='3660' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='pci_clear_master' mangled-name='pci_clear_master' filepath='drivers/pci/pci.c' line='4195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_clear_master'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4195' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_check_and_unmask_intx' mangled-name='pci_check_and_unmask_intx' filepath='drivers/pci/pci.c' line='4428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_check_and_unmask_intx'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4428' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='pci_check_and_mask_intx' mangled-name='pci_check_and_mask_intx' filepath='drivers/pci/pci.c' line='4414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_check_and_mask_intx'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/pci.c' line='4414' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='infinite' id='c165e8b9'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/pcie/aspm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d0622163' size-in-bits='512' id='fa0d0a7f'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='aspm_latency' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='44' column='1' id='d0622163'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l0s' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='l1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='79' column='1' id='a1d8a938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='up_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dw_cap_ptr' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ctl1' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ctl2' type-id='19c2251e' visibility='default' filepath='drivers/pci/pcie/aspm.c' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='pcie_aspm_enabled' mangled-name='pcie_aspm_enabled' filepath='drivers/pci/pcie/aspm.c' line='1171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_aspm_enabled'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/pci/pcie/aspm.c' line='1171' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/probe.c' language='LANG_C89'>
+      <class-decl name='hotplug_slot_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pci_hotplug.h' line='38' column='1' id='8d2c0dd2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable_slot' type-id='1617c63b' visibility='default' filepath='include/linux/pci_hotplug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_attention_status' type-id='4b81d8e7' visibility='default' filepath='include/linux/pci_hotplug.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hardware_test' type-id='b3f54aba' visibility='default' filepath='include/linux/pci_hotplug.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_power_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_attention_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_latch_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_adapter_status' type-id='db02d786' visibility='default' filepath='include/linux/pci_hotplug.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset_slot' type-id='3801bb42' visibility='default' filepath='include/linux/pci_hotplug.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pci_host_bridge' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/pci.h' line='501' column='1' id='32ed9316'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/pci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='bus' type-id='d1feb554' visibility='default' filepath='include/linux/pci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops' type-id='2058826a' visibility='default' filepath='include/linux/pci.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='sysdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='busnr' type-id='95e97e5e' visibility='default' filepath='include/linux/pci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='windows' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='dma_ranges' type-id='72f469ec' visibility='default' filepath='include/linux/pci.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='swizzle_irq' type-id='af56cb43' visibility='default' filepath='include/linux/pci.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='map_irq' type-id='fa35bf16' visibility='default' filepath='include/linux/pci.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='release_fn' type-id='53955211' visibility='default' filepath='include/linux/pci.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='release_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pci.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='msi' type-id='b9526cc1' visibility='default' filepath='include/linux/pci.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ignore_reset_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_ext_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='native_aer' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='native_pcie_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='native_shpc_hotplug' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='native_pme' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='native_ltr' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='preserve_config' type-id='f0981eeb' visibility='default' filepath='include/linux/pci.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='align_resource' type-id='482ccc39' visibility='default' filepath='include/linux/pci.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/pci.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='private' type-id='c99b5ecd' visibility='default' filepath='include/linux/pci.h' line='533' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8d2c0dd2' const='yes' id='61872327'/>
+      <pointer-type-def type-id='61872327' size-in-bits='64' id='94bc2d77'/>
+      <pointer-type-def type-id='c2603804' size-in-bits='64' id='fa35bf16'/>
+      <pointer-type-def type-id='d9435f47' size-in-bits='64' id='1617c63b'/>
+      <pointer-type-def type-id='b6b1bef0' size-in-bits='64' id='3801bb42'/>
+      <pointer-type-def type-id='9d9db488' size-in-bits='64' id='b3f54aba'/>
+      <pointer-type-def type-id='025c78c3' size-in-bits='64' id='4b81d8e7'/>
+      <pointer-type-def type-id='ad4c5814' size-in-bits='64' id='db02d786'/>
+      <pointer-type-def type-id='c03e8273' size-in-bits='64' id='3c23f0a7'/>
+      <pointer-type-def type-id='da757fbe' size-in-bits='64' id='01170708'/>
+      <pointer-type-def type-id='32ed9316' size-in-bits='64' id='cb0dbc3c'/>
+      <pointer-type-def type-id='08594205' size-in-bits='64' id='482ccc39'/>
+      <pointer-type-def type-id='ff18d40f' size-in-bits='64' id='af56cb43'/>
+      <pointer-type-def type-id='deb48314' size-in-bits='64' id='694b6f36'/>
+      <pointer-type-def type-id='1d8506ad' size-in-bits='64' id='53955211'/>
+      <function-decl name='pcie_bus_configure_settings' mangled-name='pcie_bus_configure_settings' filepath='drivers/pci/probe.c' line='2708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pcie_bus_configure_settings'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='2708' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_unlock_rescan_remove' mangled-name='pci_unlock_rescan_remove' filepath='drivers/pci/probe.c' line='3199' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_unlock_rescan_remove'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pci_scan_root_bus_bridge' mangled-name='pci_scan_root_bus_bridge' filepath='drivers/pci/probe.c' line='3049' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_scan_root_bus_bridge'>
+        <parameter type-id='cb0dbc3c' name='bridge' filepath='drivers/pci/probe.c' line='3049' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pci_scan_child_bus' mangled-name='pci_scan_child_bus' filepath='drivers/pci/probe.c' line='2900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_scan_child_bus'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='2900' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='pci_rescan_bus' mangled-name='pci_rescan_bus' filepath='drivers/pci/probe.c' line='3175' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_rescan_bus'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/probe.c' line='3175' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='pci_lock_rescan_remove' mangled-name='pci_lock_rescan_remove' filepath='drivers/pci/probe.c' line='3193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_lock_rescan_remove'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_pci_alloc_host_bridge' mangled-name='devm_pci_alloc_host_bridge' filepath='drivers/pci/probe.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pci_alloc_host_bridge'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pci/probe.c' line='619' column='1'/>
+        <parameter type-id='b59d7dce' name='priv' filepath='drivers/pci/probe.c' line='620' column='1'/>
+        <return type-id='cb0dbc3c'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c2603804'>
+        <parameter type-id='947f31e6'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9435f47'>
+        <parameter type-id='b47b0d41'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6b1bef0'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d9db488'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='025c78c3'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4c5814'>
+        <parameter type-id='b47b0d41'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c03e8273'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da757fbe'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='b11825ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08594205'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='e153f6de'/>
+        <parameter type-id='acc63fdf'/>
+        <parameter type-id='acc63fdf'/>
+        <parameter type-id='acc63fdf'/>
+        <return type-id='acc63fdf'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff18d40f'>
+        <parameter type-id='85196e3f'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='f9b06939'/>
+      </function-type>
+      <function-type size-in-bits='64' id='deb48314'>
+        <parameter type-id='b9526cc1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d8506ad'>
+        <parameter type-id='cb0dbc3c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/remove.c' language='LANG_C89'>
+      <function-decl name='pci_stop_and_remove_bus_device' mangled-name='pci_stop_and_remove_bus_device' filepath='drivers/pci/remove.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_stop_and_remove_bus_device'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/remove.c' line='114' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/search.c' language='LANG_C89'>
+      <function-decl name='pci_get_slot' mangled-name='pci_get_slot' filepath='drivers/pci/search.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_get_slot'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/search.c' line='189' column='1'/>
+        <parameter type-id='f0981eeb' name='devfn' filepath='drivers/pci/search.c' line='189' column='1'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+      <function-decl name='pci_get_device' mangled-name='pci_get_device' filepath='drivers/pci/search.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_get_device'>
+        <parameter type-id='f0981eeb' name='vendor' filepath='drivers/pci/search.c' line='327' column='1'/>
+        <parameter type-id='f0981eeb' name='device' filepath='drivers/pci/search.c' line='327' column='1'/>
+        <parameter type-id='85196e3f' name='from' filepath='drivers/pci/search.c' line='328' column='1'/>
+        <return type-id='85196e3f'/>
+      </function-decl>
+      <function-decl name='pci_find_bus' mangled-name='pci_find_bus' filepath='drivers/pci/search.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_find_bus'>
+        <parameter type-id='95e97e5e' name='domain' filepath='drivers/pci/search.c' line='135' column='1'/>
+        <parameter type-id='95e97e5e' name='busnr' filepath='drivers/pci/search.c' line='135' column='1'/>
+        <return type-id='d1feb554'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/setup-bus.c' language='LANG_C89'>
+      <function-decl name='pci_assign_unassigned_bus_resources' mangled-name='pci_assign_unassigned_bus_resources' filepath='drivers/pci/setup-bus.c' line='2185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_assign_unassigned_bus_resources'>
+        <parameter type-id='d1feb554' name='bus' filepath='drivers/pci/setup-bus.c' line='2185' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pci/setup-res.c' language='LANG_C89'>
+      <function-decl name='pci_assign_resource' mangled-name='pci_assign_resource' filepath='drivers/pci/setup-res.c' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_assign_resource'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/pci/setup-res.c' line='309' column='1'/>
+        <parameter type-id='95e97e5e' name='resno' filepath='drivers/pci/setup-res.c' line='309' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/phy/phy-core.c' language='LANG_C89'>
+      <class-decl name='regulator' size-in-bits='1088' is-struct='yes' visibility='default' filepath='drivers/regulator/internal.h' line='34' column='1' id='b06eb6f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/regulator/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='bypass' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='device_link' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='uA_load' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable_count' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deferred_disables' type-id='f0981eeb' visibility='default' filepath='drivers/regulator/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='voltage' type-id='06883fa0' visibility='default' filepath='drivers/regulator/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='drivers/regulator/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dev_attr' type-id='dbf3947c' visibility='default' filepath='drivers/regulator/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rdev' type-id='43c38462' visibility='default' filepath='drivers/regulator/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/regulator/internal.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='130' column='1' id='da10e34c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/phy/phy.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops' type-id='5424a63a' visibility='default' filepath='include/linux/phy/phy.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/phy/phy.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='init_count' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='power_count' type-id='95e97e5e' visibility='default' filepath='include/linux/phy/phy.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='attrs' type-id='2bd806af' visibility='default' filepath='include/linux/phy/phy.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='pwr' type-id='850c13f6' visibility='default' filepath='include/linux/phy/phy.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='66' column='1' id='d4f8274f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='power_on' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='power_off' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_mode' type-id='e6dafa73' visibility='default' filepath='include/linux/phy/phy.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='configure' type-id='3f29b13b' visibility='default' filepath='include/linux/phy/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='validate' type-id='dd0d6c38' visibility='default' filepath='include/linux/phy/phy.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='reset' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='calibrate' type-id='83078c32' visibility='default' filepath='include/linux/phy/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release' type-id='64c19e8b' visibility='default' filepath='include/linux/phy/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy/phy.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='phy_configure_opts' size-in-bits='896' visibility='default' filepath='include/linux/phy/phy.h' line='50' column='1' id='2c7a2d9f'>
+        <data-member access='public'>
+          <var-decl name='mipi_dphy' type-id='b277cad4' visibility='default' filepath='include/linux/phy/phy.h' line='51' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='phy_configure_opts_mipi_dphy' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='15' column='1' id='b277cad4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clk_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='clk_post' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clk_pre' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clk_prepare' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk_settle' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='clk_term_en' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clk_trail' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='clk_zero' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_term_en' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='eot' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hs_exit' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hs_prepare' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hs_settle' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='hs_skip' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hs_trail' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='hs_zero' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='init' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='lpx' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ta_get' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='ta_go' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ta_sure' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='hs_clk_rate' type-id='7359adad' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lp_clk_rate' type-id='7359adad' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lanes' type-id='002ac4a6' visibility='default' filepath='include/linux/phy/phy-mipi-dphy.h' line='275' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='phy_mode' filepath='include/linux/phy/phy.h' line='23' column='1' id='79ba09b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_UFS_HS_A' value='12'/>
+        <enumerator name='PHY_MODE_UFS_HS_B' value='13'/>
+        <enumerator name='PHY_MODE_PCIE' value='14'/>
+        <enumerator name='PHY_MODE_ETHERNET' value='15'/>
+        <enumerator name='PHY_MODE_MIPI_DPHY' value='16'/>
+        <enumerator name='PHY_MODE_SATA' value='17'/>
+      </enum-decl>
+      <class-decl name='phy_attrs' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='114' column='1' id='2bd806af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bus_width' type-id='19c2251e' visibility='default' filepath='include/linux/phy/phy.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='79ba09b7' visibility='default' filepath='include/linux/phy/phy.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='phy_provider' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/phy/phy.h' line='149' column='1' id='e3536b30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/phy/phy.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='9a537bbe' visibility='default' filepath='include/linux/phy/phy.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/phy/phy.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/phy/phy.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_xlate' type-id='df697557' visibility='default' filepath='include/linux/phy/phy.h' line='154' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d4f8274f' const='yes' id='fbb00d34'/>
+      <pointer-type-def type-id='fbb00d34' size-in-bits='64' id='5424a63a'/>
+      <pointer-type-def type-id='7fb3af70' size-in-bits='64' id='83078c32'/>
+      <pointer-type-def type-id='3b6188e7' size-in-bits='64' id='e6dafa73'/>
+      <pointer-type-def type-id='a51eeb2e' size-in-bits='64' id='dd0d6c38'/>
+      <pointer-type-def type-id='849373e7' size-in-bits='64' id='3f29b13b'/>
+      <pointer-type-def type-id='da10e34c' size-in-bits='64' id='503ff1ba'/>
+      <pointer-type-def type-id='5efd72bb' size-in-bits='64' id='df697557'/>
+      <pointer-type-def type-id='2c7a2d9f' size-in-bits='64' id='9d3cfa5c'/>
+      <pointer-type-def type-id='e3536b30' size-in-bits='64' id='3608d096'/>
+      <pointer-type-def type-id='b06eb6f0' size-in-bits='64' id='850c13f6'/>
+      <pointer-type-def type-id='1ee07c27' size-in-bits='64' id='64c19e8b'/>
+      <function-decl name='phy_set_mode_ext' mangled-name='phy_set_mode_ext' filepath='drivers/phy/phy-core.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_set_mode_ext'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <parameter type-id='79ba09b7' name='mode' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <parameter type-id='95e97e5e' name='submode' filepath='drivers/phy/phy-core.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_reset' mangled-name='phy_reset' filepath='drivers/phy/phy-core.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_reset'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='376' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_power_on' mangled-name='phy_power_on' filepath='drivers/phy/phy-core.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_power_on'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='290' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_power_off' mangled-name='phy_power_off' filepath='drivers/phy/phy-core.c' line='332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_power_off'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='332' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_pm_runtime_put_sync' mangled-name='phy_pm_runtime_put_sync' filepath='drivers/phy/phy-core.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_pm_runtime_put_sync'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_pm_runtime_get_sync' mangled-name='phy_pm_runtime_get_sync' filepath='drivers/phy/phy-core.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_pm_runtime_get_sync'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='166' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_init' mangled-name='phy_init' filepath='drivers/phy/phy-core.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_init'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_exit' mangled-name='phy_exit' filepath='drivers/phy/phy-core.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_exit'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='261' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='phy_calibrate' mangled-name='phy_calibrate' filepath='drivers/phy/phy-core.c' line='407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='phy_calibrate'>
+        <parameter type-id='503ff1ba' name='phy' filepath='drivers/phy/phy-core.c' line='407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_phy_simple_xlate' mangled-name='of_phy_simple_xlate' filepath='drivers/phy/phy-core.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_phy_simple_xlate'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='619' column='1'/>
+        <parameter type-id='51a94113' name='args' filepath='drivers/phy/phy-core.c' line='620' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='devm_phy_get' mangled-name='devm_phy_get' filepath='drivers/phy/phy-core.c' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_phy_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='710' column='1'/>
+        <parameter type-id='80f4b756' name='string' filepath='drivers/phy/phy-core.c' line='710' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='devm_phy_create' mangled-name='devm_phy_create' filepath='drivers/phy/phy-core.c' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_phy_create'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='910' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/phy/phy-core.c' line='910' column='1'/>
+        <parameter type-id='5424a63a' name='ops' filepath='drivers/phy/phy-core.c' line='911' column='1'/>
+        <return type-id='503ff1ba'/>
+      </function-decl>
+      <function-decl name='__devm_of_phy_provider_register' mangled-name='__devm_of_phy_provider_register' filepath='drivers/phy/phy-core.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_of_phy_provider_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/phy/phy-core.c' line='1041' column='1'/>
+        <parameter type-id='9a537bbe' name='children' filepath='drivers/phy/phy-core.c' line='1042' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/phy/phy-core.c' line='1042' column='1'/>
+        <parameter type-id='df697557' name='of_xlate' filepath='drivers/phy/phy-core.c' line='1043' column='1'/>
+        <return type-id='3608d096'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7fb3af70'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b6188e7'>
+        <parameter type-id='503ff1ba' name='phy'/>
+        <parameter type-id='79ba09b7' name='mode'/>
+        <parameter type-id='95e97e5e' name='submode'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a51eeb2e'>
+        <parameter type-id='503ff1ba'/>
+        <parameter type-id='79ba09b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9d3cfa5c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='849373e7'>
+        <parameter type-id='503ff1ba'/>
+        <parameter type-id='9d3cfa5c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5efd72bb'>
+        <parameter type-id='fa0b179b' name='dev'/>
+        <parameter type-id='51a94113' name='args'/>
+        <return type-id='503ff1ba'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee07c27'>
+        <parameter type-id='503ff1ba'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pinctrl/core.c' language='LANG_C89'>
+      <class-decl name='gpio_device' size-in-bits='9344' is-struct='yes' visibility='default' filepath='drivers/gpio/gpiolib.h' line='44' column='1' id='e32a05ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/gpio/gpiolib.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='chrdev' type-id='22f86351' visibility='default' filepath='drivers/gpio/gpiolib.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='mockdev' type-id='fa0b179b' visibility='default' filepath='drivers/gpio/gpiolib.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/gpio/gpiolib.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='chip' type-id='e324928d' visibility='default' filepath='drivers/gpio/gpiolib.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='descs' type-id='26760480' visibility='default' filepath='drivers/gpio/gpiolib.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='drivers/gpio/gpiolib.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='drivers/gpio/gpiolib.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='drivers/gpio/gpiolib.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='drivers/gpio/gpiolib.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='pin_ranges' type-id='72f469ec' visibility='default' filepath='drivers/gpio/gpiolib.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinmux_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='c20dd28d'/>
+      <class-decl name='pinctrl_dev' size-in-bits='1536' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='42' column='1' id='b5990c25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='d4682107' visibility='default' filepath='drivers/pinctrl/core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_desc_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_group_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_groups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pin_function_tree' type-id='d39738ac' visibility='default' filepath='drivers/pinctrl/core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='num_functions' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gpio_ranges' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='drivers/pinctrl/core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='drivers/pinctrl/core.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='p' type-id='73ea90c5' visibility='default' filepath='drivers/pinctrl/core.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='hog_default' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hog_sleep' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='drivers/pinctrl/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='device_root' type-id='27675065' visibility='default' filepath='drivers/pinctrl/core.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_desc' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='130' column='1' id='25e1863f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pins' type-id='caec04a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pctlops' type-id='0ec7edd9' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmxops' type-id='6780b0ea' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='confops' type-id='ddf6796c' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_custom_params' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='custom_params' type-id='5198b4a4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='custom_conf_items' type-id='67b214d6' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_consumers' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_pin_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='36' column='1' id='8347d13f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='88' column='1' id='ed4a990e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_groups_count' type-id='9b3cc28d' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_group_name' type-id='6fd7b107' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_group_pins' type-id='8aae90f2' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dt_node_to_map' type-id='8679be0f' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dt_free_map' type-id='4a390f11' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_map' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='67' column='1' id='c34e46f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95da6d1c' visibility='default' filepath='include/linux/pinctrl/machine.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ctrl_dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='2789d524' visibility='default' filepath='include/linux/pinctrl/machine.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pinctrl_map_type' filepath='include/linux/pinctrl/machine.h' line='18' column='1' id='95da6d1c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIN_MAP_TYPE_INVALID' value='0'/>
+        <enumerator name='PIN_MAP_TYPE_DUMMY_STATE' value='1'/>
+        <enumerator name='PIN_MAP_TYPE_MUX_GROUP' value='2'/>
+        <enumerator name='PIN_MAP_TYPE_CONFIGS_PIN' value='3'/>
+        <enumerator name='PIN_MAP_TYPE_CONFIGS_GROUP' value='4'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='72' column='1' id='2789d524'>
+        <data-member access='public'>
+          <var-decl name='mux' type-id='ad4dd73d' visibility='default' filepath='include/linux/pinctrl/machine.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='configs' type-id='687781fc' visibility='default' filepath='include/linux/pinctrl/machine.h' line='74' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pinctrl_map_mux' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='33' column='1' id='ad4dd73d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='function' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_map_configs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/machine.h' line='47' column='1' id='687781fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group_or_pin' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/machine.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='configs' type-id='1d2c2b85' visibility='default' filepath='include/linux/pinctrl/machine.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_configs' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/machine.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='38' column='1' id='b488fcb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_generic' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pin_config_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pin_config_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pin_config_group_get' type-id='12d26e9b' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_config_group_set' type-id='d02d53e9' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pin_config_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pin_config_group_dbg_show' type-id='60403ce4' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pin_config_config_dbg_show' type-id='fb17c5d2' visibility='default' filepath='include/linux/pinctrl/pinconf.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinconf_generic_params' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='178' column='1' id='b5cf31bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='property' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param' type-id='b486b770' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='default_value' type-id='19c2251e' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pin_config_param' filepath='include/linux/pinctrl/pinconf-generic.h' line='111' column='1' id='b486b770'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PIN_CONFIG_BIAS_BUS_HOLD' value='0'/>
+        <enumerator name='PIN_CONFIG_BIAS_DISABLE' value='1'/>
+        <enumerator name='PIN_CONFIG_BIAS_HIGH_IMPEDANCE' value='2'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_DOWN' value='3'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_PIN_DEFAULT' value='4'/>
+        <enumerator name='PIN_CONFIG_BIAS_PULL_UP' value='5'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_DRAIN' value='6'/>
+        <enumerator name='PIN_CONFIG_DRIVE_OPEN_SOURCE' value='7'/>
+        <enumerator name='PIN_CONFIG_DRIVE_PUSH_PULL' value='8'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH' value='9'/>
+        <enumerator name='PIN_CONFIG_DRIVE_STRENGTH_UA' value='10'/>
+        <enumerator name='PIN_CONFIG_INPUT_DEBOUNCE' value='11'/>
+        <enumerator name='PIN_CONFIG_INPUT_ENABLE' value='12'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT' value='13'/>
+        <enumerator name='PIN_CONFIG_INPUT_SCHMITT_ENABLE' value='14'/>
+        <enumerator name='PIN_CONFIG_LOW_POWER_MODE' value='15'/>
+        <enumerator name='PIN_CONFIG_OUTPUT_ENABLE' value='16'/>
+        <enumerator name='PIN_CONFIG_OUTPUT' value='17'/>
+        <enumerator name='PIN_CONFIG_POWER_SOURCE' value='18'/>
+        <enumerator name='PIN_CONFIG_SLEEP_HARDWARE_STATE' value='19'/>
+        <enumerator name='PIN_CONFIG_SLEW_RATE' value='20'/>
+        <enumerator name='PIN_CONFIG_SKEW_DELAY' value='21'/>
+        <enumerator name='PIN_CONFIG_PERSIST_STATE' value='22'/>
+        <enumerator name='PIN_CONFIG_END' value='127'/>
+        <enumerator name='PIN_CONFIG_MAX' value='255'/>
+      </enum-decl>
+      <class-decl name='pin_config_item' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='171' column='1' id='6a8fbda3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='param' type-id='2d24e48c' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='display' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='format' type-id='b99c00c9' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_arg' type-id='b50a4934' visibility='default' filepath='include/linux/pinctrl/pinconf-generic.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='77' column='1' id='51195455'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/pinctrl/core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='f418ceb3' visibility='default' filepath='drivers/pinctrl/core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dt_maps' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='users' type-id='400fb07b' visibility='default' filepath='drivers/pinctrl/core.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_state' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/pinctrl/core.h' line='92' column='1' id='f66244c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='settings' type-id='72f469ec' visibility='default' filepath='drivers/pinctrl/core.h' line='95' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pinctrl_gpio_range' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='58' column='1' id='5cb32b9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pin_base' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pins' type-id='5b2fd8e8' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gc' type-id='e324928d' visibility='default' filepath='include/linux/pinctrl/pinctrl.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_chip' size-in-bits='3968' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='344' column='1' id='59f9f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/gpio/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiodev' type-id='fb7dc22d' visibility='default' filepath='include/linux/gpio/driver.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/gpio/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/gpio/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='request' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free' type-id='d2a48436' visibility='default' filepath='include/linux/gpio/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_direction' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='direction_input' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='direction_output' type-id='9d5147b2' visibility='default' filepath='include/linux/gpio/driver.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_multiple' type-id='ea666691' visibility='default' filepath='include/linux/gpio/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set' type-id='7c70f4dd' visibility='default' filepath='include/linux/gpio/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_multiple' type-id='f471a8cc' visibility='default' filepath='include/linux/gpio/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_config' type-id='49728c6d' visibility='default' filepath='include/linux/gpio/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='to_irq' type-id='9f2634eb' visibility='default' filepath='include/linux/gpio/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dbg_show' type-id='2c6d11fe' visibility='default' filepath='include/linux/gpio/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='init_valid_mask' type-id='0084e9cb' visibility='default' filepath='include/linux/gpio/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/gpio/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='ngpio' type-id='1dc6a898' visibility='default' filepath='include/linux/gpio/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='names' type-id='13956559' visibility='default' filepath='include/linux/gpio/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='can_sleep' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='31045126' visibility='default' filepath='include/linux/gpio/driver.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/gpio/driver.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='of_gpio_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='of_xlate' type-id='fdd04afe' visibility='default' filepath='include/linux/gpio/driver.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='458' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gpio_irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/gpio/driver.h' line='29' column='1' id='31045126'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/gpio/driver.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/gpio/driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain_ops' type-id='2c202856' visibility='default' filepath='include/linux/gpio/driver.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/gpio/driver.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_domain' type-id='7544e824' visibility='default' filepath='include/linux/gpio/driver.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='child_to_parent_hwirq' type-id='391871d1' visibility='default' filepath='include/linux/gpio/driver.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='populate_parent_fwspec' type-id='c12d7269' visibility='default' filepath='include/linux/gpio/driver.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child_offset_to_irq' type-id='f5b0f2f2' visibility='default' filepath='include/linux/gpio/driver.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='child_irq_domain_ops' type-id='0926e4bd' visibility='default' filepath='include/linux/gpio/driver.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='default_type' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='lock_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='request_key' type-id='a57283f9' visibility='default' filepath='include/linux/gpio/driver.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='parent_handler' type-id='cdb741d3' visibility='default' filepath='include/linux/gpio/driver.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='parent_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/gpio/driver.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='num_parents' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parents' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='map' type-id='807869d3' visibility='default' filepath='include/linux/gpio/driver.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/gpio/driver.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='init_hw' type-id='26bfaed1' visibility='default' filepath='include/linux/gpio/driver.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='init_valid_mask' type-id='bb3baa4e' visibility='default' filepath='include/linux/gpio/driver.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='valid_mask' type-id='1d2c2b85' visibility='default' filepath='include/linux/gpio/driver.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='first' type-id='f0981eeb' visibility='default' filepath='include/linux/gpio/driver.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/gpio/driver.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/gpio/driver.h' line='257' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7fa63f43' size-in-bits='64' id='6fd7b107'/>
+      <qualified-type-def type-id='fbff4263' const='yes' id='bde36be8'/>
+      <pointer-type-def type-id='bde36be8' size-in-bits='64' id='af02a266'/>
+      <qualified-type-def type-id='6a8fbda3' const='yes' id='16c375b8'/>
+      <pointer-type-def type-id='16c375b8' size-in-bits='64' id='67b214d6'/>
+      <qualified-type-def type-id='b486b770' const='yes' id='2d24e48c'/>
+      <qualified-type-def type-id='b5cf31bb' const='yes' id='ff60ef66'/>
+      <pointer-type-def type-id='ff60ef66' size-in-bits='64' id='5198b4a4'/>
+      <qualified-type-def type-id='b488fcb9' const='yes' id='364c344e'/>
+      <pointer-type-def type-id='364c344e' size-in-bits='64' id='ddf6796c'/>
+      <qualified-type-def type-id='ed4a990e' const='yes' id='eb76a649'/>
+      <pointer-type-def type-id='eb76a649' size-in-bits='64' id='0ec7edd9'/>
+      <qualified-type-def type-id='8347d13f' const='yes' id='56125f66'/>
+      <pointer-type-def type-id='56125f66' size-in-bits='64' id='caec04a4'/>
+      <qualified-type-def type-id='c20dd28d' const='yes' id='1a814584'/>
+      <pointer-type-def type-id='1a814584' size-in-bits='64' id='6780b0ea'/>
+      <pointer-type-def type-id='20f5f452' size-in-bits='64' id='5b2fd8e8'/>
+      <pointer-type-def type-id='5b2fd8e8' size-in-bits='64' id='4e523966'/>
+      <pointer-type-def type-id='59f9f35d' size-in-bits='64' id='e324928d'/>
+      <pointer-type-def type-id='e32a05ed' size-in-bits='64' id='fb7dc22d'/>
+      <pointer-type-def type-id='33c534fd' size-in-bits='64' id='26bfaed1'/>
+      <pointer-type-def type-id='95abac74' size-in-bits='64' id='fdd04afe'/>
+      <pointer-type-def type-id='e19b8aa7' size-in-bits='64' id='9f2634eb'/>
+      <pointer-type-def type-id='40afefd0' size-in-bits='64' id='9d5147b2'/>
+      <pointer-type-def type-id='d35840cd' size-in-bits='64' id='391871d1'/>
+      <pointer-type-def type-id='706f3909' size-in-bits='64' id='49728c6d'/>
+      <pointer-type-def type-id='068d5e4f' size-in-bits='64' id='0084e9cb'/>
+      <pointer-type-def type-id='4cbeea4d' size-in-bits='64' id='ea666691'/>
+      <pointer-type-def type-id='9dcba7d1' size-in-bits='64' id='9b3cc28d'/>
+      <pointer-type-def type-id='ea4ec523' size-in-bits='64' id='8679be0f'/>
+      <pointer-type-def type-id='5a602650' size-in-bits='64' id='8aae90f2'/>
+      <pointer-type-def type-id='eb53191f' size-in-bits='64' id='12d26e9b'/>
+      <pointer-type-def type-id='f56eb14d' size-in-bits='64' id='d02d53e9'/>
+      <pointer-type-def type-id='51195455' size-in-bits='64' id='73ea90c5'/>
+      <pointer-type-def type-id='25e1863f' size-in-bits='64' id='d4682107'/>
+      <pointer-type-def type-id='b5990c25' size-in-bits='64' id='10216dc5'/>
+      <pointer-type-def type-id='5cb32b9b' size-in-bits='64' id='e7faa6fb'/>
+      <pointer-type-def type-id='c34e46f8' size-in-bits='64' id='9638d26e'/>
+      <pointer-type-def type-id='9638d26e' size-in-bits='64' id='bf73010c'/>
+      <pointer-type-def type-id='f66244c3' size-in-bits='64' id='f418ceb3'/>
+      <pointer-type-def type-id='74b5d8d8' size-in-bits='64' id='f5b0f2f2'/>
+      <pointer-type-def type-id='0d702425' size-in-bits='64' id='c12d7269'/>
+      <pointer-type-def type-id='bd08cd5c' size-in-bits='64' id='d2a48436'/>
+      <pointer-type-def type-id='e30804d9' size-in-bits='64' id='7c70f4dd'/>
+      <pointer-type-def type-id='0863015c' size-in-bits='64' id='bb3baa4e'/>
+      <pointer-type-def type-id='8a70282a' size-in-bits='64' id='f471a8cc'/>
+      <pointer-type-def type-id='a9cba835' size-in-bits='64' id='4a390f11'/>
+      <pointer-type-def type-id='df58f5a2' size-in-bits='64' id='60403ce4'/>
+      <pointer-type-def type-id='71fa1210' size-in-bits='64' id='fb17c5d2'/>
+      <pointer-type-def type-id='92920004' size-in-bits='64' id='2c6d11fe'/>
+      <function-decl name='pinctrl_unregister' mangled-name='pinctrl_unregister' filepath='drivers/pinctrl/core.c' line='2145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_unregister'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='2145' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_select_state' mangled-name='pinctrl_select_state' filepath='drivers/pinctrl/core.c' line='1317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_select_state'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1317' column='1'/>
+        <parameter type-id='f418ceb3' name='state' filepath='drivers/pinctrl/core.c' line='1317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_remove_gpio_range' mangled-name='pinctrl_remove_gpio_range' filepath='drivers/pinctrl/core.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_remove_gpio_range'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='508' column='1'/>
+        <parameter type-id='e7faa6fb' name='range' filepath='drivers/pinctrl/core.c' line='509' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_register' mangled-name='pinctrl_register' filepath='drivers/pinctrl/core.c' line='2088' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_register'>
+        <parameter type-id='d4682107' name='pctldesc' filepath='drivers/pinctrl/core.c' line='2088' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='2089' column='1'/>
+        <parameter type-id='eaa32e2f' name='driver_data' filepath='drivers/pinctrl/core.c' line='2089' column='1'/>
+        <return type-id='10216dc5'/>
+      </function-decl>
+      <function-decl name='pinctrl_put' mangled-name='pinctrl_put' filepath='drivers/pinctrl/core.c' line='1193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_put'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1193' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_sleep_state' mangled-name='pinctrl_pm_select_sleep_state' filepath='drivers/pinctrl/core.c' line='1578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_sleep_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1578' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_idle_state' mangled-name='pinctrl_pm_select_idle_state' filepath='drivers/pinctrl/core.c' line='1591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_idle_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1591' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_pm_select_default_state' mangled-name='pinctrl_pm_select_default_state' filepath='drivers/pinctrl/core.c' line='1565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_pm_select_default_state'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1565' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_lookup_state' mangled-name='pinctrl_lookup_state' filepath='drivers/pinctrl/core.c' line='1204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_lookup_state'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1204' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/pinctrl/core.c' line='1205' column='1'/>
+        <return type-id='f418ceb3'/>
+      </function-decl>
+      <function-decl name='pinctrl_gpio_set_config' mangled-name='pinctrl_gpio_set_config' filepath='drivers/pinctrl/core.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_gpio_set_config'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/pinctrl/core.c' line='893' column='1'/>
+        <parameter type-id='7359adad' name='config' filepath='drivers/pinctrl/core.c' line='893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_gpio_direction_output' mangled-name='pinctrl_gpio_direction_output' filepath='drivers/pinctrl/core.c' line='878' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_gpio_direction_output'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/pinctrl/core.c' line='878' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_gpio_direction_input' mangled-name='pinctrl_gpio_direction_input' filepath='drivers/pinctrl/core.c' line='864' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_gpio_direction_input'>
+        <parameter type-id='f0981eeb' name='gpio' filepath='drivers/pinctrl/core.c' line='864' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_get' mangled-name='pinctrl_get' filepath='drivers/pinctrl/core.c' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1113' column='1'/>
+        <return type-id='73ea90c5'/>
+      </function-decl>
+      <function-decl name='pinctrl_force_sleep' mangled-name='pinctrl_force_sleep' filepath='drivers/pinctrl/core.c' line='1487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_force_sleep'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='1487' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_dev_get_drvdata' mangled-name='pinctrl_dev_get_drvdata' filepath='drivers/pinctrl/core.c' line='86' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_dev_get_drvdata'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='86' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pinctrl_add_gpio_range' mangled-name='pinctrl_add_gpio_range' filepath='drivers/pinctrl/core.c' line='402' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_add_gpio_range'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='402' column='1'/>
+        <parameter type-id='e7faa6fb' name='range' filepath='drivers/pinctrl/core.c' line='403' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pin_get_name' mangled-name='pin_get_name' filepath='drivers/pinctrl/core.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pin_get_name'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/core.c' line='166' column='1'/>
+        <parameter type-id='20f5f452' name='pin' filepath='drivers/pinctrl/core.c' line='166' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_register' mangled-name='devm_pinctrl_register' filepath='drivers/pinctrl/core.c' line='2207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='2207' column='1'/>
+        <parameter type-id='d4682107' name='pctldesc' filepath='drivers/pinctrl/core.c' line='2208' column='1'/>
+        <parameter type-id='eaa32e2f' name='driver_data' filepath='drivers/pinctrl/core.c' line='2209' column='1'/>
+        <return type-id='10216dc5'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_put' mangled-name='devm_pinctrl_put' filepath='drivers/pinctrl/core.c' line='1373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_put'>
+        <parameter type-id='73ea90c5' name='p' filepath='drivers/pinctrl/core.c' line='1373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_pinctrl_get' mangled-name='devm_pinctrl_get' filepath='drivers/pinctrl/core.c' line='1338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pinctrl_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pinctrl/core.c' line='1338' column='1'/>
+        <return type-id='73ea90c5'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7fa63f43'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33c534fd'>
+        <parameter type-id='e324928d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95abac74'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='af02a266'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e19b8aa7'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40afefd0'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d35840cd'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='706f3909'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='068d5e4f'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4cbeea4d'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9dcba7d1'>
+        <parameter type-id='10216dc5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea4ec523'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='bf73010c'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a602650'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='4e523966'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb53191f'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f56eb14d'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74b5d8d8'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d702425'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd08cd5c'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e30804d9'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0863015c'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a70282a'>
+        <parameter type-id='e324928d'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9cba835'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='9638d26e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df58f5a2'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71fa1210'>
+        <parameter type-id='10216dc5'/>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92920004'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='e324928d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pinctrl/pinconf-generic.c' language='LANG_C89'>
+      <pointer-type-def type-id='1d2c2b85' size-in-bits='64' id='9b88c47d'/>
+      <function-decl name='pinconf_generic_parse_dt_config' mangled-name='pinconf_generic_parse_dt_config' filepath='drivers/pinctrl/pinconf-generic.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinconf_generic_parse_dt_config'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pinctrl/pinconf-generic.c' line='238' column='1'/>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinconf-generic.c' line='239' column='1'/>
+        <parameter type-id='9b88c47d' name='configs' filepath='drivers/pinctrl/pinconf-generic.c' line='240' column='1'/>
+        <parameter type-id='807869d3' name='nconfigs' filepath='drivers/pinctrl/pinconf-generic.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinconf_generic_dt_node_to_map' mangled-name='pinconf_generic_dt_node_to_map' filepath='drivers/pinctrl/pinconf-generic.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinconf_generic_dt_node_to_map'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinconf-generic.c' line='375' column='1'/>
+        <parameter type-id='9a537bbe' name='np_config' filepath='drivers/pinctrl/pinconf-generic.c' line='376' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinconf-generic.c' line='376' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinconf-generic.c' line='377' column='1'/>
+        <parameter type-id='95da6d1c' name='type' filepath='drivers/pinctrl/pinconf-generic.c' line='377' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pinctrl/pinctrl-utils.c' language='LANG_C89'>
+      <function-decl name='pinctrl_utils_reserve_map' mangled-name='pinctrl_utils_reserve_map' filepath='drivers/pinctrl/pinctrl-utils.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_reserve_map'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='31' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='32' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='32' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='33' column='1'/>
+        <parameter type-id='f0981eeb' name='reserve' filepath='drivers/pinctrl/pinctrl-utils.c' line='33' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_free_map' mangled-name='pinctrl_utils_free_map' filepath='drivers/pinctrl/pinctrl-utils.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_free_map'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='123' column='1'/>
+        <parameter type-id='9638d26e' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='124' column='1'/>
+        <parameter type-id='f0981eeb' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='124' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_add_map_mux' mangled-name='pinctrl_utils_add_map_mux' filepath='drivers/pinctrl/pinctrl-utils.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_add_map_mux'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='56' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='57' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='57' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='58' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='drivers/pinctrl/pinctrl-utils.c' line='58' column='1'/>
+        <parameter type-id='80f4b756' name='function' filepath='drivers/pinctrl/pinctrl-utils.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pinctrl_utils_add_map_configs' mangled-name='pinctrl_utils_add_map_configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='73' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pinctrl_utils_add_map_configs'>
+        <parameter type-id='10216dc5' name='pctldev' filepath='drivers/pinctrl/pinctrl-utils.c' line='73' column='1'/>
+        <parameter type-id='bf73010c' name='map' filepath='drivers/pinctrl/pinctrl-utils.c' line='74' column='1'/>
+        <parameter type-id='807869d3' name='reserved_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='74' column='1'/>
+        <parameter type-id='807869d3' name='num_maps' filepath='drivers/pinctrl/pinctrl-utils.c' line='75' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='drivers/pinctrl/pinctrl-utils.c' line='75' column='1'/>
+        <parameter type-id='1d2c2b85' name='configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='76' column='1'/>
+        <parameter type-id='f0981eeb' name='num_configs' filepath='drivers/pinctrl/pinctrl-utils.c' line='76' column='1'/>
+        <parameter type-id='95da6d1c' name='type' filepath='drivers/pinctrl/pinctrl-utils.c' line='77' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pinctrl/qcom/pinctrl-msm.c' language='LANG_C89'>
+      <class-decl name='mfd_cell' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mfd/core.h' line='29' column='1' id='54cc740b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage_count' type-id='8a47abc3' visibility='default' filepath='include/linux/mfd/core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='disable' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='suspend' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resume' type-id='e05ae2cd' visibility='default' filepath='include/linux/mfd/core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='platform_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mfd/core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pdata_size' type-id='b59d7dce' visibility='default' filepath='include/linux/mfd/core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='properties' type-id='6db3218b' visibility='default' filepath='include/linux/mfd/core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='of_compatible' type-id='80f4b756' visibility='default' filepath='include/linux/mfd/core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='acpi_match' type-id='66421794' visibility='default' filepath='include/linux/mfd/core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_resources' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resources' type-id='e153f6de' visibility='default' filepath='include/linux/mfd/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ignore_resource_conflicts' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='pm_runtime_no_callbacks' type-id='b50a4934' visibility='default' filepath='include/linux/mfd/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent_supplies' type-id='13956559' visibility='default' filepath='include/linux/mfd/core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_parent_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/mfd/core.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='platform_device' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/platform_device.h' line='23' column='1' id='7bb4e525'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='95e97e5e' 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='b50a4934' 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='66e487eb' visibility='default' filepath='include/linux/platform_device.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='platform_dma_mask' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='num_resources' type-id='19c2251e' visibility='default' filepath='include/linux/platform_device.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='resource' type-id='c9d64c0d' visibility='default' filepath='include/linux/platform_device.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='id_entry' type-id='79c2f4f8' visibility='default' filepath='include/linux/platform_device.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/platform_device.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='mfd_cell' type-id='fb02122b' visibility='default' filepath='include/linux/platform_device.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='archdata' type-id='89ee2f2f' visibility='default' filepath='include/linux/platform_device.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/platform_device.h' line='42' 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='582' column='1' id='c4ec4353'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/mod_devicetable.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='584' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pdev_archdata' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/device.h' line='14' column='1' id='89ee2f2f'/>
+      <class-decl name='msm_pinctrl_soc_data' size-in-bits='768' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='119' column='1' id='4c1ad966'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pins' type-id='caec04a4' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='functions' type-id='fbebff4e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nfunctions' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='groups' type-id='7dfd260c' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ngroups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ngpios' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pull_no_keeper' type-id='b50a4934' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tiles' type-id='13956559' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ntiles' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_gpios' type-id='6d60f45d' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wakeirq_map' type-id='3be741ab' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nwakeirq_map' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_function' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='18' column='1' id='77eb4ead'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='groups' type-id='13956559' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ngroups' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_pingroup' size-in-bits='576' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='59' column='1' id='944d6deb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pins' type-id='5b2fd8e8' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='npins' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='funcs' type-id='807869d3' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nfuncs' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ctl_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='intr_cfg_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='intr_status_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='intr_target_reg' type-id='19c2251e' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tile' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='mux_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='pull_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='drv_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='oe_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='in_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='out_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='intr_enable_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='intr_status_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='intr_ack_high' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='intr_target_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='intr_target_kpss_val' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='intr_raw_status_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='intr_polarity_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='intr_detection_bit' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='intr_detection_width' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msm_gpio_wakeirq_map' size-in-bits='64' is-struct='yes' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='101' column='1' id='a90c9006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wakeirq' type-id='f0981eeb' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2448a865' size-in-bits='64' id='6d60f45d'/>
+      <qualified-type-def type-id='77eb4ead' const='yes' id='f13c4c10'/>
+      <pointer-type-def type-id='f13c4c10' size-in-bits='64' id='fbebff4e'/>
+      <qualified-type-def type-id='a90c9006' const='yes' id='1daa2ea3'/>
+      <pointer-type-def type-id='1daa2ea3' size-in-bits='64' id='3be741ab'/>
+      <qualified-type-def type-id='4c1ad966' const='yes' id='178bc70f'/>
+      <pointer-type-def type-id='178bc70f' size-in-bits='64' id='360a7f3f'/>
+      <qualified-type-def type-id='944d6deb' const='yes' id='31b1396e'/>
+      <pointer-type-def type-id='31b1396e' size-in-bits='64' id='7dfd260c'/>
+      <qualified-type-def type-id='c4ec4353' const='yes' id='213c3202'/>
+      <pointer-type-def type-id='213c3202' size-in-bits='64' id='79c2f4f8'/>
+      <pointer-type-def type-id='54cc740b' size-in-bits='64' id='fb02122b'/>
+      <pointer-type-def type-id='7bb4e525' size-in-bits='64' id='db362995'/>
+      <var-decl name='msm_pinctrl_dev_pm_ops' type-id='86af1d10' mangled-name='msm_pinctrl_dev_pm_ops' visibility='default' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1240' column='1' elf-symbol-id='msm_pinctrl_dev_pm_ops'/>
+      <function-decl name='msm_pinctrl_remove' mangled-name='msm_pinctrl_remove' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msm_pinctrl_remove'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1310' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='msm_pinctrl_probe' mangled-name='msm_pinctrl_probe' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msm_pinctrl_probe'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1245' column='1'/>
+        <parameter type-id='360a7f3f' name='soc_data' filepath='drivers/pinctrl/qcom/pinctrl-msm.c' line='1246' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/power/supply/power_supply_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='640' id='4725c728'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='be6833bc' size-in-bits='1280' id='774ff726'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='thermal_attr' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='150' column='1' id='0f035502'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='dbf3947c' visibility='default' filepath='include/linux/thermal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='152' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='94' column='1' id='cf7993c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unbind' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_trips' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_mode' type-id='67f4c28a' visibility='default' filepath='include/linux/thermal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_mode' type-id='dee53645' visibility='default' filepath='include/linux/thermal.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_trip_type' type-id='5e1def9d' visibility='default' filepath='include/linux/thermal.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_trip_temp' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_trip_temp' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_trip_hyst' type-id='01443742' visibility='default' filepath='include/linux/thermal.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_trip_hyst' type-id='9a2b46ca' visibility='default' filepath='include/linux/thermal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_crit_temp' type-id='b09cd03d' visibility='default' filepath='include/linux/thermal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_emul_temp' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='get_trend' type-id='11d0d204' visibility='default' filepath='include/linux/thermal.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='notify' type-id='3fbbdf8e' visibility='default' filepath='include/linux/thermal.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_cooling_device_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='120' column='1' id='ff1a03f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_max_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_cur_state' type-id='ff2d9ea5' visibility='default' filepath='include/linux/thermal.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_cur_state' type-id='4b4c62ab' visibility='default' filepath='include/linux/thermal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_requested_power' type-id='6f31af4c' visibility='default' filepath='include/linux/thermal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state2power' type-id='4692f31c' visibility='default' filepath='include/linux/thermal.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='power2state' type-id='c1eac593' visibility='default' filepath='include/linux/thermal.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='thermal_device_mode' filepath='include/linux/thermal.h' line='62' column='1' id='45492188'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_DEVICE_DISABLED' value='0'/>
+        <enumerator name='THERMAL_DEVICE_ENABLED' value='1'/>
+      </enum-decl>
+      <enum-decl name='thermal_trip_type' filepath='include/linux/thermal.h' line='67' column='1' id='57e8e954'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TRIP_ACTIVE' value='0'/>
+        <enumerator name='THERMAL_TRIP_PASSIVE' value='1'/>
+        <enumerator name='THERMAL_TRIP_HOT' value='2'/>
+        <enumerator name='THERMAL_TRIP_CRITICAL' value='3'/>
+      </enum-decl>
+      <enum-decl name='thermal_trend' filepath='include/linux/thermal.h' line='74' column='1' id='0ca326b7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_TREND_STABLE' value='0'/>
+        <enumerator name='THERMAL_TREND_RAISING' value='1'/>
+        <enumerator name='THERMAL_TREND_DROPPING' value='2'/>
+        <enumerator name='THERMAL_TREND_RAISE_FULL' value='3'/>
+        <enumerator name='THERMAL_TREND_DROP_FULL' value='4'/>
+      </enum-decl>
+      <class-decl name='thermal_zone_params' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='292' column='1' id='d6772b4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='governor_name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='no_hwmon' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_tbps' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tbp' type-id='825b5cd1' visibility='default' filepath='include/linux/thermal.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sustainable_power' type-id='19c2251e' visibility='default' filepath='include/linux/thermal.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='k_po' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='k_pu' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='k_i' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='k_d' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='integral_cutoff' type-id='a7832498' visibility='default' filepath='include/linux/thermal.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='slope' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='offset' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='343' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_bind_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='255' column='1' id='1e0c0ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cdev' type-id='2feec21f' visibility='default' filepath='include/linux/thermal.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='trip_mask' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='binding_limits' type-id='1d2c2b85' visibility='default' filepath='include/linux/thermal.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='match' type-id='911521f6' visibility='default' filepath='include/linux/thermal.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_governor' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='244' column='1' id='2901941b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_to_tz' type-id='50293ce4' visibility='default' filepath='include/linux/thermal.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unbind_from_tz' type-id='7a1ba1ed' visibility='default' filepath='include/linux/thermal.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='336c2e63' visibility='default' filepath='include/linux/thermal.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='governor_list' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='251' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='thermal_notify_event' filepath='include/linux/thermal.h' line='83' column='1' id='b5808f5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='THERMAL_EVENT_UNSPECIFIED' value='0'/>
+        <enumerator name='THERMAL_EVENT_TEMP_SAMPLE' value='1'/>
+        <enumerator name='THERMAL_TRIP_VIOLATED' value='2'/>
+        <enumerator name='THERMAL_TRIP_CHANGED' value='3'/>
+        <enumerator name='THERMAL_DEVICE_DOWN' value='4'/>
+        <enumerator name='THERMAL_DEVICE_UP' value='5'/>
+        <enumerator name='THERMAL_DEVICE_POWER_CAPABILITY_CHANGED' value='6'/>
+        <enumerator name='THERMAL_TABLE_CHANGED' value='7'/>
+      </enum-decl>
+      <class-decl name='power_supply_config' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='224' column='1' id='098cab97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/power_supply.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/power_supply.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/power_supply.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='attr_grp' type-id='c97de1ac' visibility='default' filepath='include/linux/power_supply.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='supplied_to' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_supplicants' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='237' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_resistance_temp_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='350' column='1' id='98e1bfb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='temp' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resistance' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_battery_info' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='366' column='1' id='4b60a147'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='energy_full_design_uwh' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='charge_full_design_uah' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='voltage_min_design_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='voltage_max_design_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='precharge_current_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='charge_term_current_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='constant_charge_current_max_ua' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='constant_charge_voltage_max_uv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='factory_internal_resistance_uohm' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ocv_temp' type-id='4725c728' visibility='default' filepath='include/linux/power_supply.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ocv_table' type-id='774ff726' visibility='default' filepath='include/linux/power_supply.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ocv_table_size' type-id='4725c728' visibility='default' filepath='include/linux/power_supply.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='resist_table' type-id='1fba25e2' visibility='default' filepath='include/linux/power_supply.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='resist_table_size' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='382' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_battery_ocv_table' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='345' column='1' id='3faa6906'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ocv' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capacity' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='098cab97' const='yes' id='e45577b8'/>
+      <pointer-type-def type-id='e45577b8' size-in-bits='64' id='048b3ad6'/>
+      <qualified-type-def type-id='ff1a03f4' const='yes' id='e542e4ad'/>
+      <pointer-type-def type-id='e542e4ad' size-in-bits='64' id='6f4dc085'/>
+      <pointer-type-def type-id='51dca1f7' size-in-bits='64' id='c1eac593'/>
+      <pointer-type-def type-id='9762f152' size-in-bits='64' id='6f31af4c'/>
+      <pointer-type-def type-id='35aa2942' size-in-bits='64' id='4692f31c'/>
+      <pointer-type-def type-id='e7176377' size-in-bits='64' id='4b4c62ab'/>
+      <pointer-type-def type-id='7fd43619' size-in-bits='64' id='ff2d9ea5'/>
+      <pointer-type-def type-id='dc678892' size-in-bits='64' id='50293ce4'/>
+      <pointer-type-def type-id='48d225c1' size-in-bits='64' id='dee53645'/>
+      <pointer-type-def type-id='1d34d2c7' size-in-bits='64' id='336c2e63'/>
+      <pointer-type-def type-id='002a7109' size-in-bits='64' id='b09cd03d'/>
+      <pointer-type-def type-id='abcb190c' size-in-bits='64' id='3fbbdf8e'/>
+      <pointer-type-def type-id='c7253970' size-in-bits='64' id='9a2b46ca'/>
+      <pointer-type-def type-id='38a09a00' size-in-bits='64' id='01443742'/>
+      <pointer-type-def type-id='c505fce2' size-in-bits='64' id='11d0d204'/>
+      <pointer-type-def type-id='24451821' size-in-bits='64' id='5e1def9d'/>
+      <pointer-type-def type-id='a2b185bc' size-in-bits='64' id='911521f6'/>
+      <pointer-type-def type-id='69649a08' size-in-bits='64' id='67f4c28a'/>
+      <pointer-type-def type-id='4b60a147' size-in-bits='64' id='78ba63ff'/>
+      <pointer-type-def type-id='3faa6906' size-in-bits='64' id='be6833bc'/>
+      <pointer-type-def type-id='98e1bfb4' size-in-bits='64' id='1fba25e2'/>
+      <pointer-type-def type-id='0f035502' size-in-bits='64' id='fd801eb0'/>
+      <pointer-type-def type-id='1e0c0ad9' size-in-bits='64' id='825b5cd1'/>
+      <pointer-type-def type-id='45492188' size-in-bits='64' id='1d81d2cf'/>
+      <pointer-type-def type-id='2901941b' size-in-bits='64' id='6def7c4b'/>
+      <pointer-type-def type-id='0ca326b7' size-in-bits='64' id='4983ea36'/>
+      <pointer-type-def type-id='57e8e954' size-in-bits='64' id='478384af'/>
+      <pointer-type-def type-id='cf7993c1' size-in-bits='64' id='1e6fe389'/>
+      <pointer-type-def type-id='d6772b4e' size-in-bits='64' id='e2cbf964'/>
+      <pointer-type-def type-id='e1de5cb1' size-in-bits='64' id='7a1ba1ed'/>
+      <function-decl name='power_supply_changed' mangled-name='power_supply_changed' filepath='drivers/power/supply/power_supply_core.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_changed'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='121' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_power_supply_register' mangled-name='devm_power_supply_register' filepath='drivers/power/supply/power_supply_core.c' line='1326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_power_supply_register'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/power/supply/power_supply_core.c' line='1326' column='1'/>
+        <parameter type-id='cb9cd99f' name='desc' filepath='drivers/power/supply/power_supply_core.c' line='1327' column='1'/>
+        <parameter type-id='048b3ad6' name='cfg' filepath='drivers/power/supply/power_supply_core.c' line='1328' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_unregister' mangled-name='power_supply_unregister' filepath='drivers/power/supply/power_supply_core.c' line='1390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_unregister'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='1390' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_unreg_notifier' mangled-name='power_supply_unreg_notifier' filepath='drivers/power/supply/power_supply_core.c' line='984' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_unreg_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/power/supply/power_supply_core.c' line='984' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_temp2resist_simple' mangled-name='power_supply_temp2resist_simple' filepath='drivers/power/supply/power_supply_core.c' line='815' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_temp2resist_simple'>
+        <parameter type-id='1fba25e2' name='table' filepath='drivers/power/supply/power_supply_core.c' line='815' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='816' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='816' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_set_property' mangled-name='power_supply_set_property' filepath='drivers/power/supply/power_supply_core.c' line='933' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_set_property'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='933' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='934' column='1'/>
+        <parameter type-id='f3abafd4' name='val' filepath='drivers/power/supply/power_supply_core.c' line='935' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_register' mangled-name='power_supply_register' filepath='drivers/power/supply/power_supply_core.c' line='1273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_register'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/power/supply/power_supply_core.c' line='1273' column='1'/>
+        <parameter type-id='cb9cd99f' name='desc' filepath='drivers/power/supply/power_supply_core.c' line='1274' column='1'/>
+        <parameter type-id='048b3ad6' name='cfg' filepath='drivers/power/supply/power_supply_core.c' line='1275' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_reg_notifier' mangled-name='power_supply_reg_notifier' filepath='drivers/power/supply/power_supply_core.c' line='978' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_reg_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/power/supply/power_supply_core.c' line='978' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_put_battery_info' mangled-name='power_supply_put_battery_info' filepath='drivers/power/supply/power_supply_core.c' line='786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_put_battery_info'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='786' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='787' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_put' mangled-name='power_supply_put' filepath='drivers/power/supply/power_supply_core.c' line='480' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_put'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='480' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='power_supply_powers' mangled-name='power_supply_powers' filepath='drivers/power/supply/power_supply_core.c' line='965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_powers'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='965' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/power/supply/power_supply_core.c' line='965' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_ocv2cap_simple' mangled-name='power_supply_ocv2cap_simple' filepath='drivers/power/supply/power_supply_core.c' line='853' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_ocv2cap_simple'>
+        <parameter type-id='be6833bc' name='table' filepath='drivers/power/supply/power_supply_core.c' line='853' column='1'/>
+        <parameter type-id='95e97e5e' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='854' column='1'/>
+        <parameter type-id='95e97e5e' name='ocv' filepath='drivers/power/supply/power_supply_core.c' line='854' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_get_property' mangled-name='power_supply_get_property' filepath='drivers/power/supply/power_supply_core.c' line='919' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_property'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='919' column='1'/>
+        <parameter type-id='5f78aa17' name='psp' filepath='drivers/power/supply/power_supply_core.c' line='920' column='1'/>
+        <parameter type-id='2e53d20f' name='val' filepath='drivers/power/supply/power_supply_core.c' line='921' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_get_drvdata' mangled-name='power_supply_get_drvdata' filepath='drivers/power/supply/power_supply_core.c' line='1406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_drvdata'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='1406' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='power_supply_get_by_name' mangled-name='power_supply_get_by_name' filepath='drivers/power/supply/power_supply_core.c' line='458' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_by_name'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/power/supply/power_supply_core.c' line='458' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <function-decl name='power_supply_get_battery_info' mangled-name='power_supply_get_battery_info' filepath='drivers/power/supply/power_supply_core.c' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_get_battery_info'>
+        <parameter type-id='c0c93c9e' name='psy' filepath='drivers/power/supply/power_supply_core.c' line='643' column='1'/>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='644' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='power_supply_find_ocv2cap_table' mangled-name='power_supply_find_ocv2cap_table' filepath='drivers/power/supply/power_supply_core.c' line='878' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='power_supply_find_ocv2cap_table'>
+        <parameter type-id='78ba63ff' name='info' filepath='drivers/power/supply/power_supply_core.c' line='878' column='1'/>
+        <parameter type-id='95e97e5e' name='temp' filepath='drivers/power/supply/power_supply_core.c' line='879' column='1'/>
+        <parameter type-id='7292109c' name='table_len' filepath='drivers/power/supply/power_supply_core.c' line='879' column='1'/>
+        <return type-id='be6833bc'/>
+      </function-decl>
+      <function-decl name='devm_power_supply_get_by_phandle' mangled-name='devm_power_supply_get_by_phandle' filepath='drivers/power/supply/power_supply_core.c' line='619' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_power_supply_get_by_phandle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/power/supply/power_supply_core.c' line='619' column='1'/>
+        <parameter type-id='80f4b756' name='property' filepath='drivers/power/supply/power_supply_core.c' line='620' column='1'/>
+        <return type-id='c0c93c9e'/>
+      </function-decl>
+      <pointer-type-def type-id='79a9ff6f' size-in-bits='64' id='cb9cd99f'/>
+      <pointer-type-def type-id='2cd7c576' size-in-bits='64' id='f3abafd4'/>
+      <enum-decl name='power_supply_property' filepath='include/linux/power_supply.h' line='102' column='1' id='5f78aa17'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_PROP_STATUS' value='0'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TYPE' value='1'/>
+        <enumerator name='POWER_SUPPLY_PROP_HEALTH' value='2'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRESENT' value='3'/>
+        <enumerator name='POWER_SUPPLY_PROP_ONLINE' value='4'/>
+        <enumerator name='POWER_SUPPLY_PROP_AUTHENTIC' value='5'/>
+        <enumerator name='POWER_SUPPLY_PROP_TECHNOLOGY' value='6'/>
+        <enumerator name='POWER_SUPPLY_PROP_CYCLE_COUNT' value='7'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX' value='8'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN' value='9'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN' value='10'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN' value='11'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_NOW' value='12'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_AVG' value='13'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_OCV' value='14'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_BOOT' value='15'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_MAX' value='16'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_NOW' value='17'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_AVG' value='18'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_BOOT' value='19'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_NOW' value='20'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_AVG' value='21'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN' value='22'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN' value='23'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL' value='24'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY' value='25'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_NOW' value='26'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_AVG' value='27'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_COUNTER' value='28'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT' value='29'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX' value='30'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE' value='31'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX' value='32'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT' value='33'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX' value='34'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD' value='35'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD' value='36'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT' value='37'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT' value='38'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_POWER_LIMIT' value='39'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN' value='40'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN' value='41'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL' value='42'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY' value='43'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_NOW' value='44'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_AVG' value='45'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY' value='46'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN' value='47'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX' value='48'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN' value='49'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_LEVEL' value='50'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP' value='51'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MAX' value='52'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MIN' value='53'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MIN' value='54'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MAX' value='55'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT' value='56'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN' value='57'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX' value='58'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW' value='59'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG' value='60'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_NOW' value='61'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_AVG' value='62'/>
+        <enumerator name='POWER_SUPPLY_PROP_TYPE' value='63'/>
+        <enumerator name='POWER_SUPPLY_PROP_USB_TYPE' value='64'/>
+        <enumerator name='POWER_SUPPLY_PROP_SCOPE' value='65'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRECHARGE_CURRENT' value='66'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT' value='67'/>
+        <enumerator name='POWER_SUPPLY_PROP_CALIBRATE' value='68'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_YEAR' value='69'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_MONTH' value='70'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_DAY' value='71'/>
+        <enumerator name='POWER_SUPPLY_PROP_MODEL_NAME' value='72'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURER' value='73'/>
+        <enumerator name='POWER_SUPPLY_PROP_SERIAL_NUMBER' value='74'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='51dca1f7'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9762f152'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35aa2942'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7176377'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fd43619'>
+        <parameter type-id='2feec21f'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc678892'>
+        <parameter type-id='404b1300'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48d225c1'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='45492188'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d34d2c7'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='002a7109'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abcb190c'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='57e8e954'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7253970'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38a09a00'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c505fce2'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4983ea36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24451821'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='478384af'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2b185bc'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='2feec21f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='69649a08'>
+        <parameter type-id='404b1300'/>
+        <parameter type-id='1d81d2cf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1de5cb1'>
+        <parameter type-id='404b1300'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='98749268' size-in-bits='64' id='c0c93c9e'/>
+      <pointer-type-def type-id='08942f16' size-in-bits='64' id='2e53d20f'/>
+      <class-decl name='power_supply' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='283' column='1' id='98749268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='cb9cd99f' visibility='default' filepath='include/linux/power_supply.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplied_to' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_supplicants' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='supplied_from' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_supplies' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/power_supply.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/power_supply.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/power_supply.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='changed_work' type-id='ef9025d0' visibility='default' filepath='include/linux/power_supply.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='deferred_register_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/power_supply.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='changed_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/power_supply.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='changed' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9448'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9456'>
+          <var-decl name='removing' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='use_cnt' type-id='49178f86' visibility='default' filepath='include/linux/power_supply.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='tzd' type-id='404b1300' visibility='default' filepath='include/linux/power_supply.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='tcd' type-id='2feec21f' visibility='default' filepath='include/linux/power_supply.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='charging_full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='charging_full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='charging_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='charging_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='online_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='online_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='charging_blink_full_solid_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='charging_blink_full_solid_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6d39b2d0' const='yes' id='79a9ff6f'/>
+      <qualified-type-def type-id='08942f16' const='yes' id='2cd7c576'/>
+      <pointer-type-def type-id='82084f52' size-in-bits='64' id='404b1300'/>
+      <union-decl name='power_supply_propval' size-in-bits='64' visibility='default' filepath='include/linux/power_supply.h' line='215' column='1' id='08942f16'>
+        <data-member access='public'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='strval' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='217' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='power_supply_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='241' column='1' id='6d39b2d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='c61c3172' visibility='default' filepath='include/linux/power_supply.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_types' type-id='f26ad218' visibility='default' filepath='include/linux/power_supply.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_usb_types' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='properties' type-id='c0d0f1ae' visibility='default' filepath='include/linux/power_supply.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_properties' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_property' type-id='c793cb80' visibility='default' filepath='include/linux/power_supply.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_property' type-id='7c0fed0f' visibility='default' filepath='include/linux/power_supply.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='property_is_writeable' type-id='4079d8fe' visibility='default' filepath='include/linux/power_supply.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='external_power_changed' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_charged' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='no_thermal' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='use_for_apm' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='280' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='197' column='1' id='82084f52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='trips_attribute_group' type-id='e4af473b' visibility='default' filepath='include/linux/thermal.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='trip_temp_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='trip_type_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='trip_hyst_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='trips' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='trips_disabled' type-id='7359adad' visibility='default' filepath='include/linux/thermal.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='passive_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='polling_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='last_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='emul_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='passive' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='prev_low_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='prev_high_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='forced_passive' type-id='f0981eeb' visibility='default' filepath='include/linux/thermal.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='need_update' type-id='49178f86' visibility='default' filepath='include/linux/thermal.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='ops' type-id='1e6fe389' visibility='default' filepath='include/linux/thermal.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='tzp' type-id='e2cbf964' visibility='default' filepath='include/linux/thermal.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='governor' type-id='6def7c4b' visibility='default' filepath='include/linux/thermal.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='ida' type-id='46ce60fb' visibility='default' filepath='include/linux/thermal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='poll_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/thermal.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='notify_event' type-id='b5808f5e' visibility='default' filepath='include/linux/thermal.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='power_supply_type' filepath='include/linux/power_supply.h' line='182' column='1' id='c61c3172'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_TYPE_BATTERY' value='1'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UPS' value='2'/>
+        <enumerator name='POWER_SUPPLY_TYPE_MAINS' value='3'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB' value='4'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_DCP' value='5'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_CDP' value='6'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_ACA' value='7'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_TYPE_C' value='8'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD' value='9'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD_DRP' value='10'/>
+        <enumerator name='POWER_SUPPLY_TYPE_APPLE_BRICK_ID' value='11'/>
+        <enumerator name='POWER_SUPPLY_TYPE_WIRELESS' value='12'/>
+      </enum-decl>
+      <pointer-type-def type-id='50e956a4' size-in-bits='64' id='4079d8fe'/>
+      <pointer-type-def type-id='6daa74bb' size-in-bits='64' id='7c0fed0f'/>
+      <pointer-type-def type-id='40d98f1e' size-in-bits='64' id='c793cb80'/>
+      <pointer-type-def type-id='5f78aa17' size-in-bits='64' id='c0d0f1ae'/>
+      <pointer-type-def type-id='1f7f0095' size-in-bits='64' id='f26ad218'/>
+      <pointer-type-def type-id='ffbf2003' size-in-bits='64' id='a89a6c47'/>
+      <enum-decl name='power_supply_usb_type' filepath='include/linux/power_supply.h' line='198' column='1' id='1f7f0095'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_SDP' value='1'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_DCP' value='2'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_CDP' value='3'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_ACA' value='4'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_C' value='5'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD' value='6'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_DRP' value='7'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_PPS' value='8'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID' value='9'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/pwm/core.c' language='LANG_C89'>
+      <class-decl name='pwm_chip' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='320' column='1' id='0336f8f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/pwm.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='e26114df' visibility='default' filepath='include/linux/pwm.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='95e97e5e' visibility='default' filepath='include/linux/pwm.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='npwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_xlate' type-id='09a20593' visibility='default' filepath='include/linux/pwm.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_pwm_n_cells' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/pwm.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pwms' type-id='f06adae0' visibility='default' filepath='include/linux/pwm.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='285' column='1' id='a31cf734'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='e09d9aea' visibility='default' filepath='include/linux/pwm.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='capture' type-id='7763914e' visibility='default' filepath='include/linux/pwm.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='apply' type-id='4edf040a' visibility='default' filepath='include/linux/pwm.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_state' type-id='06f3ff9e' visibility='default' filepath='include/linux/pwm.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_output_type_supported' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/pwm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='config' type-id='d13e4d11' visibility='default' filepath='include/linux/pwm.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_polarity' type-id='4b3074a5' visibility='default' filepath='include/linux/pwm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable' type-id='45fc9a43' visibility='default' filepath='include/linux/pwm.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='disable' type-id='e09d9aea' visibility='default' filepath='include/linux/pwm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_device' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='89' column='1' id='a94236e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/pwm.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/pwm.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hwpwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pwm' type-id='f0981eeb' visibility='default' filepath='include/linux/pwm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='00cf0c80' visibility='default' filepath='include/linux/pwm.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/pwm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='args' type-id='5331ada5' visibility='default' filepath='include/linux/pwm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='0dbd43cd' visibility='default' filepath='include/linux/pwm.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pwm_args' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='42' column='1' id='5331ada5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polarity' type-id='c2c81069' visibility='default' filepath='include/linux/pwm.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pwm_polarity' filepath='include/linux/pwm.h' line='24' column='1' id='c2c81069'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PWM_POLARITY_NORMAL' value='0'/>
+        <enumerator name='PWM_POLARITY_INVERSED' value='1'/>
+      </enum-decl>
+      <class-decl name='pwm_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='70' column='1' id='0dbd43cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duty_cycle' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='polarity' type-id='c2c81069' visibility='default' filepath='include/linux/pwm.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='output_type' type-id='5e486969' visibility='default' filepath='include/linux/pwm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/pwm.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pwm_output_type' filepath='include/linux/pwm.h' line='58' column='1' id='5e486969'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PWM_OUTPUT_FIXED' value='1'/>
+        <enumerator name='PWM_OUTPUT_MODULATED' value='2'/>
+      </enum-decl>
+      <class-decl name='pwm_capture' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/pwm.h' line='342' column='1' id='a52958fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='duty_cycle' type-id='91ce1af9' visibility='default' filepath='include/linux/pwm.h' line='344' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a31cf734' const='yes' id='bd36df2f'/>
+      <pointer-type-def type-id='bd36df2f' size-in-bits='64' id='e26114df'/>
+      <qualified-type-def type-id='0dbd43cd' const='yes' id='ca0dbd4a'/>
+      <pointer-type-def type-id='ca0dbd4a' size-in-bits='64' id='73a11e20'/>
+      <pointer-type-def type-id='a8f464b7' size-in-bits='64' id='45fc9a43'/>
+      <pointer-type-def type-id='f45624e0' size-in-bits='64' id='4edf040a'/>
+      <pointer-type-def type-id='8634a879' size-in-bits='64' id='4b3074a5'/>
+      <pointer-type-def type-id='3a5cf22d' size-in-bits='64' id='d13e4d11'/>
+      <pointer-type-def type-id='3ae10cc4' size-in-bits='64' id='7763914e'/>
+      <pointer-type-def type-id='a52958fa' size-in-bits='64' id='d5211638'/>
+      <pointer-type-def type-id='0336f8f2' size-in-bits='64' id='00cf0c80'/>
+      <pointer-type-def type-id='a94236e2' size-in-bits='64' id='f06adae0'/>
+      <pointer-type-def type-id='10c448af' size-in-bits='64' id='09a20593'/>
+      <pointer-type-def type-id='0dbd43cd' size-in-bits='64' id='7ee8ef4d'/>
+      <pointer-type-def type-id='a4666910' size-in-bits='64' id='e09d9aea'/>
+      <pointer-type-def type-id='d24e4794' size-in-bits='64' id='06f3ff9e'/>
+      <function-decl name='pwmchip_remove' mangled-name='pwmchip_remove' filepath='drivers/pwm/core.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwmchip_remove'>
+        <parameter type-id='00cf0c80' name='chip' filepath='drivers/pwm/core.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwmchip_add' mangled-name='pwmchip_add' filepath='drivers/pwm/core.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwmchip_add'>
+        <parameter type-id='00cf0c80' name='chip' filepath='drivers/pwm/core.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwm_set_chip_data' mangled-name='pwm_set_chip_data' filepath='drivers/pwm/core.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_set_chip_data'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='204' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/pwm/core.c' line='204' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pwm_request' mangled-name='pwm_request' filepath='drivers/pwm/core.c' line='378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_request'>
+        <parameter type-id='95e97e5e' name='pwm' filepath='drivers/pwm/core.c' line='378' column='1'/>
+        <parameter type-id='80f4b756' name='label' filepath='drivers/pwm/core.c' line='378' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='pwm_get_chip_data' mangled-name='pwm_get_chip_data' filepath='drivers/pwm/core.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_get_chip_data'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='221' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pwm_free' mangled-name='pwm_free' filepath='drivers/pwm/core.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_free'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='443' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pwm_apply_state' mangled-name='pwm_apply_state' filepath='drivers/pwm/core.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pwm_apply_state'>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='454' column='1'/>
+        <parameter type-id='73a11e20' name='state' filepath='drivers/pwm/core.c' line='454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_pwm_xlate_with_flags' mangled-name='of_pwm_xlate_with_flags' filepath='drivers/pwm/core.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_pwm_xlate_with_flags'>
+        <parameter type-id='00cf0c80' name='pc' filepath='drivers/pwm/core.c' line='124' column='1'/>
+        <parameter type-id='af02a266' name='args' filepath='drivers/pwm/core.c' line='124' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='of_pwm_get' mangled-name='of_pwm_get' filepath='drivers/pwm/core.c' line='678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='678' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pwm/core.c' line='678' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='679' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='devm_pwm_put' mangled-name='devm_pwm_put' filepath='drivers/pwm/core.c' line='1135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pwm_put'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1135' column='1'/>
+        <parameter type-id='f06adae0' name='pwm' filepath='drivers/pwm/core.c' line='1135' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_pwm_get' mangled-name='devm_pwm_get' filepath='drivers/pwm/core.c' line='1025' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1025' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='1025' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-decl name='devm_of_pwm_get' mangled-name='devm_of_pwm_get' filepath='drivers/pwm/core.c' line='1057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_pwm_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/pwm/core.c' line='1057' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/pwm/core.c' line='1057' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/pwm/core.c' line='1058' column='1'/>
+        <return type-id='f06adae0'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a8f464b7'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f45624e0'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='73a11e20'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8634a879'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='c2c81069'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a5cf22d'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ae10cc4'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='d5211638'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10c448af'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='f06adae0'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a4666910'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d24e4794'>
+        <parameter type-id='00cf0c80'/>
+        <parameter type-id='f06adae0'/>
+        <parameter type-id='7ee8ef4d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/regulator/core.c' language='LANG_C89'>
+      <class-decl name='regmap' size-in-bits='4928' is-struct='yes' visibility='default' filepath='drivers/base/regmap/internal.h' line='49' column='1' id='ddf16879'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='ed93e75e' visibility='default' filepath='drivers/base/regmap/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lock' type-id='a4d5c862' visibility='default' filepath='drivers/base/regmap/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unlock' type-id='cf202c75' visibility='default' filepath='drivers/base/regmap/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock_arg' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='alloc_flags' type-id='3eb7c31c' visibility='default' filepath='drivers/base/regmap/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/base/regmap/internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='format' type-id='32ee7e31' visibility='default' filepath='drivers/base/regmap/internal.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bus' type-id='00e96299' visibility='default' filepath='drivers/base/regmap/internal.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_context' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='async' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='async_lock' type-id='fb4018a0' visibility='default' filepath='drivers/base/regmap/internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='async_waitq' type-id='b5ab048f' visibility='default' filepath='drivers/base/regmap/internal.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='async_list' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='async_free' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='async_ret' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='debugfs_disable' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='drivers/base/regmap/internal.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='debugfs_name' type-id='80f4b756' visibility='default' filepath='drivers/base/regmap/internal.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='debugfs_reg_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='debugfs_val_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='debugfs_tot_len' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_off_cache' type-id='72f469ec' visibility='default' filepath='drivers/base/regmap/internal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='cache_lock' type-id='925167dc' visibility='default' filepath='drivers/base/regmap/internal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='max_register' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='writeable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='readable_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='volatile_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='precious_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='writeable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='readable_noinc_reg' type-id='8e565e6d' visibility='default' filepath='drivers/base/regmap/internal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='wr_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='rd_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='volatile_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='precious_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='wr_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rd_noinc_table' type-id='76a7b3fe' visibility='default' filepath='drivers/base/regmap/internal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='reg_read' type-id='4893ffdf' visibility='default' filepath='drivers/base/regmap/internal.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='reg_write' type-id='db7eb22d' visibility='default' filepath='drivers/base/regmap/internal.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='reg_update_bits' type-id='3a0b4ecf' visibility='default' filepath='drivers/base/regmap/internal.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='defer_caching' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='read_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='write_flag_mask' type-id='7359adad' visibility='default' filepath='drivers/base/regmap/internal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='reg_shift' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='reg_stride' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='reg_stride_order' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='cache_ops' type-id='66755d9f' visibility='default' filepath='drivers/base/regmap/internal.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='cache_type' type-id='6e1356fd' visibility='default' filepath='drivers/base/regmap/internal.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='cache_size_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cache_word_size' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='num_reg_defaults' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='num_reg_defaults_raw' type-id='f0981eeb' visibility='default' filepath='drivers/base/regmap/internal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='cache_only' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4200'>
+          <var-decl name='cache_bypass' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4208'>
+          <var-decl name='cache_free' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='reg_defaults' type-id='629ca5cb' visibility='default' filepath='drivers/base/regmap/internal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='reg_defaults_raw' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cache' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cache_dirty' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4424'>
+          <var-decl name='no_sync_defaults' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='patch' type-id='f94cf1ff' visibility='default' filepath='drivers/base/regmap/internal.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='patch_regs' type-id='95e97e5e' visibility='default' filepath='drivers/base/regmap/internal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='use_single_read' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4584'>
+          <var-decl name='use_single_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='can_multi_write' type-id='b50a4934' visibility='default' filepath='drivers/base/regmap/internal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='max_raw_read' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='max_raw_write' type-id='b59d7dce' visibility='default' filepath='drivers/base/regmap/internal.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='range_tree' type-id='dec44472' visibility='default' filepath='drivers/base/regmap/internal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='selector_work_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/base/regmap/internal.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='hwlock' type-id='0cb0b26f' visibility='default' filepath='drivers/base/regmap/internal.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='712d28ed' size-in-bits='320' id='06883fa0'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='regulator_dev' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='451' column='1' id='7dfdcc84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='5629bd41' visibility='default' filepath='include/linux/regulator/driver.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='use_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='open_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bypass_count' type-id='19c2251e' visibility='default' filepath='include/linux/regulator/driver.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='consumer_list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/driver.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='coupling_desc' type-id='3ce445fe' visibility='default' filepath='include/linux/regulator/driver.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/linux/regulator/driver.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mutex' type-id='45793a97' visibility='default' filepath='include/linux/regulator/driver.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mutex_owner' type-id='f23e2572' visibility='default' filepath='include/linux/regulator/driver.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ref_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/regulator/driver.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='constraints' type-id='2fed99fc' visibility='default' filepath='include/linux/regulator/driver.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='supply' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/driver.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='include/linux/regulator/driver.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='disable_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/regulator/driver.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='reg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='include/linux/regulator/driver.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='ena_pin' type-id='6045f216' visibility='default' filepath='include/linux/regulator/driver.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ena_gpio_state' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_switch' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='last_off_jiffy' type-id='7359adad' visibility='default' filepath='include/linux/regulator/driver.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='491' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_desc' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='330' column='1' id='45814d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supply_name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='of_match' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regulators_node' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/driver.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='of_parse_cb' type-id='62e9cc9c' visibility='default' filepath='include/linux/regulator/driver.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='continuous_voltage_range' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='n_voltages' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='n_current_limits' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='b4605ad2' visibility='default' filepath='include/linux/regulator/driver.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='type' type-id='b9a524a4' visibility='default' filepath='include/linux/regulator/driver.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/regulator/driver.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='linear_min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fixed_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='min_dropout_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='linear_ranges' type-id='ae51eb5f' visibility='default' filepath='include/linux/regulator/driver.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='linear_range_selectors' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_linear_ranges' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='volt_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='curr_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/regulator/driver.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vsel_range_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='vsel_range_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vsel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='vsel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vsel_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='csel_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='csel_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='apply_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='apply_bit' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='enable_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='enable_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='enable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='disable_val' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='enable_is_inverted' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/driver.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bypass_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='bypass_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='bypass_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='bypass_val_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='active_discharge_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='active_discharge_off' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='active_discharge_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='active_discharge_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='soft_start_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='soft_start_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='soft_start_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='pull_down_reg' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='pull_down_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='pull_down_val_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='off_on_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='of_map_mode' type-id='17a94daa' visibility='default' filepath='include/linux/regulator/driver.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='397' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_config' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='416' column='1' id='973b98af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/regulator/driver.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init_data' type-id='103dcfdf' visibility='default' filepath='include/linux/regulator/driver.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/driver.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/regulator/driver.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='include/linux/regulator/driver.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ena_gpiod' type-id='26760480' visibility='default' filepath='include/linux/regulator/driver.h' line='423' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_init_data' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='235' column='1' id='435002d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply_regulator' type-id='80f4b756' 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='d0b77cf6' visibility='default' filepath='include/linux/regulator/machine.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='num_consumer_supplies' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='consumer_supplies' type-id='857611a9' visibility='default' filepath='include/linux/regulator/machine.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='regulator_init' type-id='b9b212f5' visibility='default' filepath='include/linux/regulator/machine.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/regulator/machine.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulation_constraints' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/linux/regulator/machine.h' line='138' column='1' id='d0b77cf6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uV_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ilim_uA' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='system_load' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_spread' type-id='f9409001' visibility='default' filepath='include/linux/regulator/machine.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_uV_step' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='valid_modes_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='valid_ops_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='input_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='state_disk' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_mem' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='state_standby' type-id='7fe6815e' visibility='default' filepath='include/linux/regulator/machine.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='initial_state' type-id='e884daa5' visibility='default' filepath='include/linux/regulator/machine.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='initial_mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ramp_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='settling_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='settling_time_up' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='settling_time_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='enable_time' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='active_discharge' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='always_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='boot_on' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='apply_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ramp_disable' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='soft_start' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='pull_down' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='over_current_protection' type-id='f0981eeb' 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='77' column='1' id='7fe6815e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mode' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/machine.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/machine.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='changeable' type-id='b50a4934' visibility='default' filepath='include/linux/regulator/machine.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='suspend_state_t' type-id='95e97e5e' filepath='include/linux/suspend.h' line='35' column='1' id='e884daa5'/>
+      <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='1b8fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' 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='80f4b756' visibility='default' filepath='include/linux/regulator/machine.h' line='208' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_ops' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='145' column='1' id='707f0173'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_voltage' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_voltage' type-id='e83ba222' visibility='default' filepath='include/linux/regulator/driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map_voltage' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_voltage_sel' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_voltage' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_voltage_sel' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_current_limit' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_current_limit' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_input_current_limit' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_over_current_protection' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_active_discharge' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='is_enabled' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_mode' type-id='383e66df' visibility='default' filepath='include/linux/regulator/driver.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_error_flags' type-id='7ef3bbb0' visibility='default' filepath='include/linux/regulator/driver.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='enable_time' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='set_ramp_delay' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_voltage_time' type-id='caa0e368' visibility='default' filepath='include/linux/regulator/driver.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_voltage_time_sel' type-id='ec23f0e2' visibility='default' filepath='include/linux/regulator/driver.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_soft_start' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_status' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_optimum_mode' type-id='f14ddf44' visibility='default' filepath='include/linux/regulator/driver.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='set_load' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='set_bypass' type-id='2b6bf4a3' visibility='default' filepath='include/linux/regulator/driver.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_bypass' type-id='43934166' visibility='default' filepath='include/linux/regulator/driver.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='set_suspend_voltage' type-id='12239021' visibility='default' filepath='include/linux/regulator/driver.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_suspend_enable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_suspend_disable' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_suspend_mode' type-id='bfb02820' visibility='default' filepath='include/linux/regulator/driver.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='resume' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='set_pull_down' type-id='c3db487a' visibility='default' filepath='include/linux/regulator/driver.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/regulator/driver.h' line='224' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='regulator_type' filepath='include/linux/regulator/driver.h' line='230' column='1' id='b9a524a4'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='54' column='1' id='618915a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_sel' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='uV_step' type-id='f0981eeb' visibility='default' filepath='include/linux/regulator/driver.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='coupling_desc' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/driver.h' line='434' column='1' id='3ce445fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='coupled_rdevs' type-id='f4c93d58' visibility='default' filepath='include/linux/regulator/driver.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coupler' type-id='d1347205' visibility='default' filepath='include/linux/regulator/driver.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_resolved' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_coupled' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/driver.h' line='438' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_coupler' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/regulator/coupler.h' line='41' column='1' id='4ceb5ab5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/regulator/coupler.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='detach_regulator' type-id='55a10ce6' visibility='default' filepath='include/linux/regulator/coupler.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='balance_voltage' type-id='08b1f4aa' visibility='default' filepath='include/linux/regulator/coupler.h' line='48' 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='18' column='1' id='712d28ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='drivers/regulator/internal.h' line='20' 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='837' column='1' id='dbf3947c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/device.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='3dcc4acf' visibility='default' filepath='include/linux/device.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='839105d3' visibility='default' filepath='include/linux/device.h' line='841' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_enable_gpio' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/regulator/core.c' line='75' column='1' id='616cdd90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/regulator/core.c' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gpiod' type-id='26760480' visibility='default' filepath='drivers/regulator/core.c' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enable_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='request_count' type-id='19c2251e' visibility='default' filepath='drivers/regulator/core.c' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='regulator_bulk_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/regulator/consumer.h' line='167' column='1' id='2e3fb70e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supply' type-id='80f4b756' visibility='default' filepath='include/linux/regulator/consumer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='consumer' type-id='850c13f6' visibility='default' filepath='include/linux/regulator/consumer.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ret' type-id='95e97e5e' visibility='default' filepath='include/linux/regulator/consumer.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='973b98af' const='yes' id='e937566e'/>
+      <pointer-type-def type-id='e937566e' size-in-bits='64' id='661ccd0c'/>
+      <qualified-type-def type-id='45814d78' const='yes' id='0a26da71'/>
+      <pointer-type-def type-id='0a26da71' size-in-bits='64' id='5629bd41'/>
+      <qualified-type-def type-id='435002d4' const='yes' id='1788182f'/>
+      <pointer-type-def type-id='1788182f' size-in-bits='64' id='103dcfdf'/>
+      <qualified-type-def type-id='618915a2' const='yes' id='6702beaf'/>
+      <pointer-type-def type-id='6702beaf' size-in-bits='64' id='ae51eb5f'/>
+      <qualified-type-def type-id='707f0173' const='yes' id='a06ec50c'/>
+      <pointer-type-def type-id='a06ec50c' size-in-bits='64' id='b4605ad2'/>
+      <pointer-type-def type-id='dbf3947c' size-in-bits='64' id='89a2612a'/>
+      <pointer-type-def type-id='46155a72' size-in-bits='64' id='62e9cc9c'/>
+      <pointer-type-def type-id='4c0e45bc' size-in-bits='64' id='55a10ce6'/>
+      <pointer-type-def type-id='7be36c00' size-in-bits='64' id='08b1f4aa'/>
+      <pointer-type-def type-id='13b1c3f8' size-in-bits='64' id='c3db487a'/>
+      <pointer-type-def type-id='dfce8aa4' size-in-bits='64' id='43934166'/>
+      <pointer-type-def type-id='25e34545' size-in-bits='64' id='12239021'/>
+      <pointer-type-def type-id='387ddca6' size-in-bits='64' id='caa0e368'/>
+      <pointer-type-def type-id='72a2bb90' size-in-bits='64' id='e83ba222'/>
+      <pointer-type-def type-id='2ab93737' size-in-bits='64' id='2b6bf4a3'/>
+      <pointer-type-def type-id='1c9f9836' size-in-bits='64' id='bfb02820'/>
+      <pointer-type-def type-id='0639fb3e' size-in-bits='64' id='7ef3bbb0'/>
+      <pointer-type-def type-id='fdb31210' size-in-bits='64' id='ec23f0e2'/>
+      <pointer-type-def type-id='ddf16879' size-in-bits='64' id='29af9a71'/>
+      <pointer-type-def type-id='d0b77cf6' size-in-bits='64' id='2fed99fc'/>
+      <pointer-type-def type-id='2e3fb70e' size-in-bits='64' id='776946b4'/>
+      <pointer-type-def type-id='973b98af' size-in-bits='64' id='37265457'/>
+      <pointer-type-def type-id='1b8fa461' size-in-bits='64' id='857611a9'/>
+      <pointer-type-def type-id='4ceb5ab5' size-in-bits='64' id='d1347205'/>
+      <pointer-type-def type-id='7dfdcc84' size-in-bits='64' id='43c38462'/>
+      <pointer-type-def type-id='43c38462' size-in-bits='64' id='f4c93d58'/>
+      <pointer-type-def type-id='616cdd90' size-in-bits='64' id='6045f216'/>
+      <pointer-type-def type-id='4bbe36cb' size-in-bits='64' id='3dcc4acf'/>
+      <pointer-type-def type-id='50bd3cc7' size-in-bits='64' id='839105d3'/>
+      <pointer-type-def type-id='c1a2f7eb' size-in-bits='64' id='383e66df'/>
+      <pointer-type-def type-id='a7b38e12' size-in-bits='64' id='f14ddf44'/>
+      <pointer-type-def type-id='32efe300' size-in-bits='64' id='17a94daa'/>
+      <function-decl name='regulator_register' mangled-name='regulator_register' filepath='drivers/regulator/core.c' line='5044' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_register'>
+        <parameter type-id='5629bd41' name='regulator_desc' filepath='drivers/regulator/core.c' line='5044' column='1'/>
+        <parameter type-id='661ccd0c' name='cfg' filepath='drivers/regulator/core.c' line='5045' column='1'/>
+        <return type-id='43c38462'/>
+      </function-decl>
+      <function-decl name='regulator_put' mangled-name='regulator_put' filepath='drivers/regulator/core.c' line='2124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_put'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2124' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_bulk_enable' mangled-name='regulator_bulk_enable' filepath='drivers/regulator/core.c' line='4515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_bulk_enable'>
+        <parameter type-id='95e97e5e' name='num_consumers' filepath='drivers/regulator/core.c' line='4515' column='1'/>
+        <parameter type-id='776946b4' name='consumers' filepath='drivers/regulator/core.c' line='4516' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_bulk_disable' mangled-name='regulator_bulk_disable' filepath='drivers/regulator/core.c' line='4564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_bulk_disable'>
+        <parameter type-id='95e97e5e' name='num_consumers' filepath='drivers/regulator/core.c' line='4564' column='1'/>
+        <parameter type-id='776946b4' name='consumers' filepath='drivers/regulator/core.c' line='4565' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_unregister_notifier' mangled-name='regulator_unregister_notifier' filepath='drivers/regulator/core.c' line='4428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unregister_notifier'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4428' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4429' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_unregister' mangled-name='regulator_unregister' filepath='drivers/regulator/core.c' line='5286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unregister'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='5286' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_lock' mangled-name='regulator_lock' filepath='drivers/regulator/core.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_lock'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_unlock' mangled-name='regulator_unlock' filepath='drivers/regulator/core.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_unlock'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='205' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage_time_sel' mangled-name='regulator_set_voltage_time_sel' filepath='drivers/regulator/core.c' line='3975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage_time_sel'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='3975' column='1'/>
+        <parameter type-id='f0981eeb' name='old_selector' filepath='drivers/regulator/core.c' line='3976' column='1'/>
+        <parameter type-id='f0981eeb' name='new_selector' filepath='drivers/regulator/core.c' line='3977' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_voltage' mangled-name='regulator_set_voltage' filepath='drivers/regulator/core.c' line='3814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='3814' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3814' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3814' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_mode' mangled-name='regulator_set_mode' filepath='drivers/regulator/core.c' line='4200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_mode'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4200' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='drivers/regulator/core.c' line='4200' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_load' mangled-name='regulator_set_load' filepath='drivers/regulator/core.c' line='4334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_load'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4334' column='1'/>
+        <parameter type-id='95e97e5e' name='uA_load' filepath='drivers/regulator/core.c' line='4334' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_set_current_limit' mangled-name='regulator_set_current_limit' filepath='drivers/regulator/core.c' line='4128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_current_limit'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4128' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uA' filepath='drivers/regulator/core.c' line='4129' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uA' filepath='drivers/regulator/core.c' line='4129' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_register_notifier' mangled-name='regulator_register_notifier' filepath='drivers/regulator/core.c' line='4413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_register_notifier'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4413' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/core.c' line='4414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_notifier_call_chain' mangled-name='regulator_notifier_call_chain' filepath='drivers/regulator/core.c' line='4655' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_notifier_call_chain'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='4655' column='1'/>
+        <parameter type-id='7359adad' name='event' filepath='drivers/regulator/core.c' line='4656' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/regulator/core.c' line='4656' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage' mangled-name='regulator_list_voltage' filepath='drivers/regulator/core.c' line='2963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2963' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/core.c' line='2963' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_is_supported_voltage' mangled-name='regulator_is_supported_voltage' filepath='drivers/regulator/core.c' line='3064' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_supported_voltage'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='3064' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/core.c' line='3065' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/core.c' line='3065' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_count_voltages' mangled-name='regulator_count_voltages' filepath='drivers/regulator/core.c' line='2939' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_count_voltages'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2939' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_is_enabled' mangled-name='regulator_is_enabled' filepath='drivers/regulator/core.c' line='2916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_enabled'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2916' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_voltage' mangled-name='regulator_get_voltage' filepath='drivers/regulator/core.c' line='4099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_voltage'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4099' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_optional' mangled-name='regulator_get_optional' filepath='drivers/regulator/core.c' line='2071' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/core.c' line='2071' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='2071' column='1'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+      <function-decl name='regulator_get_mode' mangled-name='regulator_get_mode' filepath='drivers/regulator/core.c' line='4261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_mode'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4261' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='regulator_get_linear_step' mangled-name='regulator_get_linear_step' filepath='drivers/regulator/core.c' line='3047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_linear_step'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='3047' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='regulator_get_drvdata' mangled-name='regulator_get_drvdata' filepath='drivers/regulator/core.c' line='5414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_drvdata'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='5414' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='regulator_get_current_limit' mangled-name='regulator_get_current_limit' filepath='drivers/regulator/core.c' line='4183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_current_limit'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='4183' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get' mangled-name='regulator_get' filepath='drivers/regulator/core.c' line='2018' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/core.c' line='2018' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/core.c' line='2018' column='1'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+      <function-decl name='regulator_force_disable' mangled-name='regulator_force_disable' filepath='drivers/regulator/core.c' line='2759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_force_disable'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2759' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_enable' mangled-name='regulator_enable' filepath='drivers/regulator/core.c' line='2600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_enable'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2600' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable_deferred' mangled-name='regulator_disable_deferred' filepath='drivers/regulator/core.c' line='2840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable_deferred'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2840' column='1'/>
+        <parameter type-id='95e97e5e' name='ms' filepath='drivers/regulator/core.c' line='2840' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable' mangled-name='regulator_disable' filepath='drivers/regulator/core.c' line='2710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/core.c' line='2710' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rdev_get_id' mangled-name='rdev_get_id' filepath='drivers/regulator/core.c' line='5435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rdev_get_id'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='5435' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rdev_get_drvdata' mangled-name='rdev_get_drvdata' filepath='drivers/regulator/core.c' line='5401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rdev_get_drvdata'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/core.c' line='5401' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='46155a72'>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='5629bd41'/>
+        <parameter type-id='37265457'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c0e45bc'>
+        <parameter type-id='d1347205'/>
+        <parameter type-id='43c38462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7be36c00'>
+        <parameter type-id='d1347205'/>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='e884daa5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13b1c3f8'>
+        <parameter type-id='43c38462'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfce8aa4'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25e34545'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='387ddca6'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72a2bb90'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ab93737'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c9f9836'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0639fb3e'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fdb31210'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1a2f7eb'>
+        <parameter type-id='43c38462'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a7b38e12'>
+        <parameter type-id='43c38462'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32efe300'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/regulator/devres.c' language='LANG_C89'>
+      <function-decl name='devm_regulator_bulk_get' mangled-name='devm_regulator_bulk_get' filepath='drivers/regulator/devres.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_bulk_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='145' column='1'/>
+        <parameter type-id='95e97e5e' name='num_consumers' filepath='drivers/regulator/devres.c' line='145' column='1'/>
+        <parameter type-id='776946b4' name='consumers' filepath='drivers/regulator/devres.c' line='146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_regulator_get' mangled-name='devm_regulator_get' filepath='drivers/regulator/devres.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='51' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/devres.c' line='51' column='1'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+      <function-decl name='devm_regulator_register_notifier' mangled-name='devm_regulator_register_notifier' filepath='drivers/regulator/devres.c' line='429' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_register_notifier'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/devres.c' line='429' column='1'/>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/regulator/devres.c' line='430' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_regulator_register' mangled-name='devm_regulator_register' filepath='drivers/regulator/devres.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='184' column='1'/>
+        <parameter type-id='5629bd41' name='regulator_desc' filepath='drivers/regulator/devres.c' line='185' column='1'/>
+        <parameter type-id='661ccd0c' name='config' filepath='drivers/regulator/devres.c' line='186' column='1'/>
+        <return type-id='43c38462'/>
+      </function-decl>
+      <function-decl name='devm_regulator_put' mangled-name='devm_regulator_put' filepath='drivers/regulator/devres.c' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_put'>
+        <parameter type-id='850c13f6' name='regulator' filepath='drivers/regulator/devres.c' line='107' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_regulator_get_optional' mangled-name='devm_regulator_get_optional' filepath='drivers/regulator/devres.c' line='82' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get_optional'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='82' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/devres.c' line='83' column='1'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+      <function-decl name='devm_regulator_get_exclusive' mangled-name='devm_regulator_get_exclusive' filepath='drivers/regulator/devres.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_regulator_get_exclusive'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/devres.c' line='66' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/regulator/devres.c' line='67' column='1'/>
+        <return type-id='850c13f6'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/regulator/helpers.c' language='LANG_C89'>
+      <function-decl name='regulator_set_voltage_sel_regmap' mangled-name='regulator_set_voltage_sel_regmap' filepath='drivers/regulator/helpers.c' line='259' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_set_voltage_sel_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='259' column='1'/>
+        <parameter type-id='f0981eeb' name='sel' filepath='drivers/regulator/helpers.c' line='259' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_map_voltage_linear' mangled-name='regulator_map_voltage_linear' filepath='drivers/regulator/helpers.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_map_voltage_linear'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='359' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/helpers.c' line='360' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/helpers.c' line='360' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_map_voltage_ascend' mangled-name='regulator_map_voltage_ascend' filepath='drivers/regulator/helpers.c' line='328' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_map_voltage_ascend'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='328' column='1'/>
+        <parameter type-id='95e97e5e' name='min_uV' filepath='drivers/regulator/helpers.c' line='329' column='1'/>
+        <parameter type-id='95e97e5e' name='max_uV' filepath='drivers/regulator/helpers.c' line='329' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_table' mangled-name='regulator_list_voltage_table' filepath='drivers/regulator/helpers.c' line='658' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_table'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='658' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='659' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_linear_range' mangled-name='regulator_list_voltage_linear_range' filepath='drivers/regulator/helpers.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_linear_range'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='641' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_list_voltage_linear' mangled-name='regulator_list_voltage_linear' filepath='drivers/regulator/helpers.c' line='538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_list_voltage_linear'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='538' column='1'/>
+        <parameter type-id='f0981eeb' name='selector' filepath='drivers/regulator/helpers.c' line='539' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_is_enabled_regmap' mangled-name='regulator_is_enabled_regmap' filepath='drivers/regulator/helpers.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_is_enabled_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_get_voltage_sel_regmap' mangled-name='regulator_get_voltage_sel_regmap' filepath='drivers/regulator/helpers.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_get_voltage_sel_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='233' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_enable_regmap' mangled-name='regulator_enable_regmap' filepath='drivers/regulator/helpers.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_enable_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulator_disable_regmap' mangled-name='regulator_disable_regmap' filepath='drivers/regulator/helpers.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulator_disable_regmap'>
+        <parameter type-id='43c38462' name='rdev' filepath='drivers/regulator/helpers.c' line='85' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/regulator/of_regulator.c' language='LANG_C89'>
+      <pointer-type-def type-id='435002d4' size-in-bits='64' id='d287fe92'/>
+      <function-decl name='of_get_regulator_init_data' mangled-name='of_get_regulator_init_data' filepath='drivers/regulator/of_regulator.c' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_get_regulator_init_data'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/regulator/of_regulator.c' line='273' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/regulator/of_regulator.c' line='274' column='1'/>
+        <parameter type-id='5629bd41' name='desc' filepath='drivers/regulator/of_regulator.c' line='275' column='1'/>
+        <return type-id='d287fe92'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/remoteproc/remoteproc_core.c' language='LANG_C89'>
+      <class-decl name='rproc' size-in-bits='10304' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='491' column='1' id='40822039'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='domain' type-id='bff05edb' visibility='default' filepath='include/linux/remoteproc.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/remoteproc.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='firmware' type-id='26a90f95' visibility='default' filepath='include/linux/remoteproc.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/remoteproc.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='c79d9b20' visibility='default' filepath='include/linux/remoteproc.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/remoteproc.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='power' type-id='49178f86' visibility='default' filepath='include/linux/remoteproc.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/remoteproc.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/remoteproc.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='dbg_dir' type-id='27675065' visibility='default' filepath='include/linux/remoteproc.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='traces' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='num_traces' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='carveouts' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='mappings' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='bootaddr' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='rvdevs' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='subdevs' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='notifyids' type-id='37ce495e' visibility='default' filepath='include/linux/remoteproc.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='crash_handler' type-id='ef9025d0' visibility='default' filepath='include/linux/remoteproc.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='crash_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/remoteproc.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9760'>
+          <var-decl name='recovery_disabled' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='max_notifyid' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='table_ptr' type-id='954953c8' visibility='default' filepath='include/linux/remoteproc.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='cached_table' type-id='954953c8' visibility='default' filepath='include/linux/remoteproc.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='table_sz' type-id='b59d7dce' visibility='default' filepath='include/linux/remoteproc.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='has_iommu' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10056'>
+          <var-decl name='auto_boot' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10064'>
+          <var-decl name='autonomous' type-id='b50a4934' visibility='default' filepath='include/linux/remoteproc.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='dump_segments' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='nb_vdev' type-id='95e97e5e' visibility='default' filepath='include/linux/remoteproc.h' line='523' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rproc_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='374' column='1' id='fb6b0a12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='64c391d1' visibility='default' filepath='include/linux/remoteproc.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stop' type-id='64c391d1' visibility='default' filepath='include/linux/remoteproc.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attach' type-id='64c391d1' visibility='default' filepath='include/linux/remoteproc.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kick' type-id='c6485e8f' visibility='default' filepath='include/linux/remoteproc.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='da_to_va' type-id='af6d77bb' visibility='default' filepath='include/linux/remoteproc.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parse_fw' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='handle_rsc' type-id='b104e6b0' visibility='default' filepath='include/linux/remoteproc.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='find_loaded_rsc_table' type-id='0d07dca9' visibility='default' filepath='include/linux/remoteproc.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='load' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sanity_check' type-id='39d0366f' visibility='default' filepath='include/linux/remoteproc.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_boot_addr' type-id='e6171aaf' visibility='default' filepath='include/linux/remoteproc.h' line='387' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='72' column='1' id='1fc04c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ver' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num' type-id='19c2251e' visibility='default' filepath='include/linux/remoteproc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='1872161b' visibility='default' filepath='include/linux/remoteproc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='c165e8b9' visibility='default' filepath='include/linux/remoteproc.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rproc_crash_type' filepath='include/linux/remoteproc.h' line='429' column='1' id='25751b8f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RPROC_MMUFAULT' value='0'/>
+        <enumerator name='RPROC_WATCHDOG' value='1'/>
+        <enumerator name='RPROC_FATAL_ERROR' value='2'/>
+      </enum-decl>
+      <class-decl name='rproc_subdev' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='535' column='1' id='835b9b57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prepare' type-id='5afa70dd' visibility='default' filepath='include/linux/remoteproc.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='start' type-id='5afa70dd' visibility='default' filepath='include/linux/remoteproc.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='03676ee7' visibility='default' filepath='include/linux/remoteproc.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unprepare' type-id='2859cc56' visibility='default' filepath='include/linux/remoteproc.h' line='541' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rproc_dump_segment' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/remoteproc.h' line='444' column='1' id='4187a976'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/remoteproc.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='da' type-id='cf29c9b3' visibility='default' filepath='include/linux/remoteproc.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/remoteproc.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/remoteproc.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dump' type-id='90cfc081' visibility='default' filepath='include/linux/remoteproc.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='offset' type-id='69bf7bee' visibility='default' filepath='include/linux/remoteproc.h' line='453' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fb6b0a12' const='yes' id='0e143c35'/>
+      <pointer-type-def type-id='0e143c35' size-in-bits='64' id='48daa4cd'/>
+      <pointer-type-def type-id='99438dcd' size-in-bits='64' id='64c391d1'/>
+      <pointer-type-def type-id='36ccbfa3' size-in-bits='64' id='39d0366f'/>
+      <pointer-type-def type-id='405001ce' size-in-bits='64' id='b104e6b0'/>
+      <pointer-type-def type-id='86607661' size-in-bits='64' id='5afa70dd'/>
+      <pointer-type-def type-id='1fc04c6a' size-in-bits='64' id='954953c8'/>
+      <pointer-type-def type-id='5198bc0d' size-in-bits='64' id='0d07dca9'/>
+      <pointer-type-def type-id='40822039' size-in-bits='64' id='5771c601'/>
+      <pointer-type-def type-id='4187a976' size-in-bits='64' id='9381c60c'/>
+      <pointer-type-def type-id='fb6b0a12' size-in-bits='64' id='c79d9b20'/>
+      <pointer-type-def type-id='835b9b57' size-in-bits='64' id='3591079f'/>
+      <pointer-type-def type-id='0f0c58b3' size-in-bits='64' id='e6171aaf'/>
+      <pointer-type-def type-id='22ddde2b' size-in-bits='64' id='c6485e8f'/>
+      <pointer-type-def type-id='911f5535' size-in-bits='64' id='90cfc081'/>
+      <pointer-type-def type-id='2f07c2f4' size-in-bits='64' id='2859cc56'/>
+      <pointer-type-def type-id='f2c03b9b' size-in-bits='64' id='03676ee7'/>
+      <pointer-type-def type-id='bce0b727' size-in-bits='64' id='af6d77bb'/>
+      <function-decl name='rproc_alloc' mangled-name='rproc_alloc' filepath='drivers/remoteproc/remoteproc_core.c' line='2177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_alloc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/remoteproc/remoteproc_core.c' line='2177' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/remoteproc/remoteproc_core.c' line='2177' column='1'/>
+        <parameter type-id='48daa4cd' name='ops' filepath='drivers/remoteproc/remoteproc_core.c' line='2178' column='1'/>
+        <parameter type-id='80f4b756' name='firmware' filepath='drivers/remoteproc/remoteproc_core.c' line='2179' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/remoteproc/remoteproc_core.c' line='2179' column='1'/>
+        <return type-id='5771c601'/>
+      </function-decl>
+      <function-decl name='rproc_report_crash' mangled-name='rproc_report_crash' filepath='drivers/remoteproc/remoteproc_core.c' line='2392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_report_crash'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2392' column='1'/>
+        <parameter type-id='25751b8f' name='type' filepath='drivers/remoteproc/remoteproc_core.c' line='2392' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_remove_subdev' mangled-name='rproc_remove_subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_remove_subdev'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2358' column='1'/>
+        <parameter type-id='3591079f' name='subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2358' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_get_by_child' mangled-name='rproc_get_by_child' filepath='drivers/remoteproc/remoteproc_core.c' line='2370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_get_by_child'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/remoteproc/remoteproc_core.c' line='2370' column='1'/>
+        <return type-id='5771c601'/>
+      </function-decl>
+      <function-decl name='rproc_free' mangled-name='rproc_free' filepath='drivers/remoteproc/remoteproc_core.c' line='2276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_free'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2276' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_del' mangled-name='rproc_del' filepath='drivers/remoteproc/remoteproc_core.c' line='2313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_del'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2313' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_coredump_add_segment' mangled-name='rproc_coredump_add_segment' filepath='drivers/remoteproc/remoteproc_core.c' line='1634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_coredump_add_segment'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='1634' column='1'/>
+        <parameter type-id='cf29c9b3' name='da' filepath='drivers/remoteproc/remoteproc_core.c' line='1634' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/remoteproc/remoteproc_core.c' line='1634' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_coredump_add_custom_segment' mangled-name='rproc_coredump_add_custom_segment' filepath='drivers/remoteproc/remoteproc_core.c' line='1665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_coredump_add_custom_segment'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='1665' column='1'/>
+        <parameter type-id='cf29c9b3' name='da' filepath='drivers/remoteproc/remoteproc_core.c' line='1666' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/remoteproc/remoteproc_core.c' line='1666' column='1'/>
+        <parameter type-id='90cfc081' name='dumpfn' filepath='drivers/remoteproc/remoteproc_core.c' line='1667' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/remoteproc/remoteproc_core.c' line='1670' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rproc_add_subdev' mangled-name='rproc_add_subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2347' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_add_subdev'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2347' column='1'/>
+        <parameter type-id='3591079f' name='subdev' filepath='drivers/remoteproc/remoteproc_core.c' line='2347' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rproc_add' mangled-name='rproc_add' filepath='drivers/remoteproc/remoteproc_core.c' line='2080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_add'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_core.c' line='2080' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='99438dcd'>
+        <parameter type-id='5771c601'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='36ccbfa3'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='405001ce'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86607661'>
+        <parameter type-id='3591079f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5198bc0d'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='954953c8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f0c58b3'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='fce0537d'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22ddde2b'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='911f5535'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='9381c60c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2f07c2f4'>
+        <parameter type-id='3591079f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2c03b9b'>
+        <parameter type-id='3591079f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bce0b727'>
+        <parameter type-id='5771c601'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/remoteproc/remoteproc_elf_loader.c' language='LANG_C89'>
+      <function-decl name='rproc_elf_get_boot_addr' mangled-name='rproc_elf_get_boot_addr' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rproc_elf_get_boot_addr'>
+        <parameter type-id='5771c601' name='rproc' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1'/>
+        <parameter type-id='fce0537d' name='fw' filepath='drivers/remoteproc/remoteproc_elf_loader.c' line='105' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='40' column='1' id='cdc9541e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcdev' type-id='775147d9' visibility='default' filepath='drivers/reset/core.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/reset/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/reset/core.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='drivers/reset/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='acquired' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='shared' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='array' type-id='b50a4934' visibility='default' filepath='drivers/reset/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='deassert_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='triggered_count' type-id='49178f86' visibility='default' filepath='drivers/reset/core.c' line='49' 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='a5e8d9a1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='cfc6a130' 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='2730d015' 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='72f469ec' 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='72f469ec' 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='fa0b179b' 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='9a537bbe' 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='95e97e5e' 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='81145c38' 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='f0981eeb' 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='ac76d92d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reset' type-id='c637b701' 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='c637b701' 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='c637b701' 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='c637b701' visibility='default' filepath='include/linux/reset-controller.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ac76d92d' const='yes' id='b954583a'/>
+      <pointer-type-def type-id='b954583a' size-in-bits='64' id='cfc6a130'/>
+      <pointer-type-def type-id='137e352e' size-in-bits='64' id='81145c38'/>
+      <pointer-type-def type-id='d0d01815' size-in-bits='64' id='c637b701'/>
+      <pointer-type-def type-id='cdc9541e' size-in-bits='64' id='9f9b8114'/>
+      <pointer-type-def type-id='a5e8d9a1' size-in-bits='64' id='775147d9'/>
+      <function-decl name='__devm_reset_control_get' mangled-name='__devm_reset_control_get' filepath='drivers/reset/core.c' line='781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_reset_control_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/reset/core.c' line='781' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/reset/core.c' line='782' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/reset/core.c' line='782' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='782' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='783' column='1'/>
+        <parameter type-id='b50a4934' name='acquired' filepath='drivers/reset/core.c' line='783' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='reset_control_assert' mangled-name='reset_control_assert' filepath='drivers/reset/core.c' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_assert'>
+        <parameter type-id='9f9b8114' name='rstc' filepath='drivers/reset/core.c' line='341' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='reset_control_deassert' mangled-name='reset_control_deassert' filepath='drivers/reset/core.c' line='400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_deassert'>
+        <parameter type-id='9f9b8114' name='rstc' filepath='drivers/reset/core.c' line='400' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='of_reset_control_array_get' mangled-name='of_reset_control_array_get' filepath='drivers/reset/core.c' line='870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_reset_control_array_get'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/reset/core.c' line='870' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='870' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='870' column='1'/>
+        <parameter type-id='b50a4934' name='acquired' filepath='drivers/reset/core.c' line='871' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='reset_control_put' mangled-name='reset_control_put' filepath='drivers/reset/core.c' line='760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_put'>
+        <parameter type-id='9f9b8114' name='rstc' filepath='drivers/reset/core.c' line='760' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='reset_controller_register' mangled-name='reset_controller_register' filepath='drivers/reset/core.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_controller_register'>
+        <parameter type-id='775147d9' name='rcdev' filepath='drivers/reset/core.c' line='96' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='reset_control_reset' mangled-name='reset_control_reset' filepath='drivers/reset/core.c' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reset_control_reset'>
+        <parameter type-id='9f9b8114' name='rstc' filepath='drivers/reset/core.c' line='289' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__of_reset_control_get' mangled-name='__of_reset_control_get' filepath='drivers/reset/core.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__of_reset_control_get'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/reset/core.c' line='603' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='drivers/reset/core.c' line='604' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/reset/core.c' line='604' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='604' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='605' column='1'/>
+        <parameter type-id='b50a4934' name='acquired' filepath='drivers/reset/core.c' line='605' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-decl name='devm_reset_controller_register' mangled-name='devm_reset_controller_register' filepath='drivers/reset/core.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_reset_controller_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/reset/core.c' line='139' column='1'/>
+        <parameter type-id='775147d9' name='rcdev' filepath='drivers/reset/core.c' line='140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_reset_control_array_get' mangled-name='devm_reset_control_array_get' filepath='drivers/reset/core.c' line='923' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_reset_control_array_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/reset/core.c' line='923' column='1'/>
+        <parameter type-id='b50a4934' name='shared' filepath='drivers/reset/core.c' line='923' column='1'/>
+        <parameter type-id='b50a4934' name='optional' filepath='drivers/reset/core.c' line='923' column='1'/>
+        <return type-id='9f9b8114'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='137e352e'>
+        <parameter type-id='775147d9'/>
+        <parameter type-id='af02a266'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d0d01815'>
+        <parameter type-id='775147d9'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/rpmsg/rpmsg_core.c' language='LANG_C89'>
+      <class-decl name='rpmsg_driver' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='111' column='1' id='234005a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='drv' type-id='fe007c02' visibility='default' filepath='include/linux/rpmsg.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='id_table' type-id='ac456034' visibility='default' filepath='include/linux/rpmsg.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='probe' type-id='f853ae55' visibility='default' filepath='include/linux/rpmsg.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='remove' type-id='170fcd6a' visibility='default' filepath='include/linux/rpmsg.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='callback' type-id='2a873f51' visibility='default' filepath='include/linux/rpmsg.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='signals' type-id='3362870f' visibility='default' filepath='include/linux/rpmsg.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device_id' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='446' column='1' id='40980961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='447' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device' size-in-bits='8064' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='51' column='1' id='aac7cb3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rpmsg.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='id' type-id='40980961' visibility='default' filepath='include/linux/rpmsg.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='driver_override' type-id='26a90f95' visibility='default' filepath='include/linux/rpmsg.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='src' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='dst' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ept' type-id='feb59272' visibility='default' filepath='include/linux/rpmsg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='announce' type-id='b50a4934' visibility='default' filepath='include/linux/rpmsg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='ops' type-id='d884146d' visibility='default' filepath='include/linux/rpmsg.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_endpoint' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='90' column='1' id='f4f25674'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rpdev' type-id='41ebc58b' visibility='default' filepath='include/linux/rpmsg.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='include/linux/rpmsg.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb' type-id='f0966175' visibility='default' filepath='include/linux/rpmsg.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cb_lock' type-id='925167dc' visibility='default' filepath='include/linux/rpmsg.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sig_cb' type-id='646ceeb7' visibility='default' filepath='include/linux/rpmsg.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='addr' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/rpmsg.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ops' type-id='50233074' visibility='default' filepath='include/linux/rpmsg.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rpmsg_rx_cb_t' type-id='2a873f51' filepath='include/linux/rpmsg.h' line='63' column='1' id='f0966175'/>
+      <typedef-decl name='rpmsg_rx_sig_t' type-id='3362870f' filepath='include/linux/rpmsg.h' line='64' column='1' id='646ceeb7'/>
+      <class-decl name='rpmsg_endpoint_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='58' column='1' id='a3285bb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='destroy_ept' type-id='91ea7193' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='send' type-id='17d22855' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sendto' type-id='3339fe1c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='send_offchannel' type-id='96afd393' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trysend' type-id='17d22855' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trysendto' type-id='3339fe1c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trysend_offchannel' type-id='96afd393' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='poll' type-id='00cfc612' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_signals' type-id='ded4959c' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_signals' type-id='edf18c5a' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_device_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='32' column='1' id='f809b7c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create_ept' type-id='90e68757' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='announce_create' type-id='f853ae55' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='announce_destroy' type-id='f853ae55' visibility='default' filepath='drivers/rpmsg/rpmsg_internal.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rpmsg_channel_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rpmsg.h' line='35' column='1' id='e2b27ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/rpmsg.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='src' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dst' type-id='19c2251e' visibility='default' filepath='include/linux/rpmsg.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='40980961' const='yes' id='1f3f0f56'/>
+      <pointer-type-def type-id='1f3f0f56' size-in-bits='64' id='ac456034'/>
+      <qualified-type-def type-id='f809b7c8' const='yes' id='30d151d5'/>
+      <pointer-type-def type-id='30d151d5' size-in-bits='64' id='d884146d'/>
+      <qualified-type-def type-id='a3285bb7' const='yes' id='68dd2616'/>
+      <pointer-type-def type-id='68dd2616' size-in-bits='64' id='50233074'/>
+      <pointer-type-def type-id='db61d4a1' size-in-bits='64' id='f853ae55'/>
+      <pointer-type-def type-id='a97c4265' size-in-bits='64' id='2a873f51'/>
+      <pointer-type-def type-id='2e17690b' size-in-bits='64' id='3362870f'/>
+      <pointer-type-def type-id='fc0b88d2' size-in-bits='64' id='ded4959c'/>
+      <pointer-type-def type-id='eb77f338' size-in-bits='64' id='edf18c5a'/>
+      <pointer-type-def type-id='e7de3d97' size-in-bits='64' id='96afd393'/>
+      <pointer-type-def type-id='0fa325e9' size-in-bits='64' id='17d22855'/>
+      <pointer-type-def type-id='9c7c185a' size-in-bits='64' id='3339fe1c'/>
+      <pointer-type-def type-id='e2b27ed1' size-in-bits='64' id='cc769659'/>
+      <pointer-type-def type-id='aac7cb3b' size-in-bits='64' id='41ebc58b'/>
+      <pointer-type-def type-id='234005a7' size-in-bits='64' id='7331a99f'/>
+      <pointer-type-def type-id='f4f25674' size-in-bits='64' id='feb59272'/>
+      <pointer-type-def type-id='925166cb' size-in-bits='64' id='90e68757'/>
+      <pointer-type-def type-id='bd8642d8' size-in-bits='64' id='00cfc612'/>
+      <pointer-type-def type-id='4aa2ba58' size-in-bits='64' id='170fcd6a'/>
+      <pointer-type-def type-id='d919518f' size-in-bits='64' id='91ea7193'/>
+      <function-decl name='unregister_rpmsg_driver' mangled-name='unregister_rpmsg_driver' filepath='drivers/rpmsg/rpmsg_core.c' line='618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_rpmsg_driver'>
+        <parameter type-id='7331a99f' name='rpdrv' filepath='drivers/rpmsg/rpmsg_core.c' line='618' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rpmsg_unregister_device' mangled-name='rpmsg_unregister_device' filepath='drivers/rpmsg/rpmsg_core.c' line='580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_unregister_device'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/rpmsg/rpmsg_core.c' line='580' column='1'/>
+        <parameter type-id='cc769659' name='chinfo' filepath='drivers/rpmsg/rpmsg_core.c' line='581' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmsg_trysend' mangled-name='rpmsg_trysend' filepath='drivers/rpmsg/rpmsg_core.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_trysend'>
+        <parameter type-id='feb59272' name='ept' filepath='drivers/rpmsg/rpmsg_core.c' line='196' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/rpmsg/rpmsg_core.c' line='196' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/rpmsg/rpmsg_core.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmsg_send' mangled-name='rpmsg_send' filepath='drivers/rpmsg/rpmsg_core.c' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_send'>
+        <parameter type-id='feb59272' name='ept' filepath='drivers/rpmsg/rpmsg_core.c' line='107' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/rpmsg/rpmsg_core.c' line='107' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/rpmsg/rpmsg_core.c' line='107' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rpmsg_register_device' mangled-name='rpmsg_register_device' filepath='drivers/rpmsg/rpmsg_core.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rpmsg_register_device'>
+        <parameter type-id='41ebc58b' name='rpdev' filepath='drivers/rpmsg/rpmsg_core.c' line='556' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__register_rpmsg_driver' mangled-name='__register_rpmsg_driver' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_rpmsg_driver'>
+        <parameter type-id='7331a99f' name='rpdrv' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rpmsg/rpmsg_core.c' line='604' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db61d4a1'>
+        <parameter type-id='41ebc58b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a97c4265'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2e17690b'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc0b88d2'>
+        <parameter type-id='feb59272'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb77f338'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7de3d97'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fa325e9'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c7c185a'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='925166cb'>
+        <parameter type-id='41ebc58b'/>
+        <parameter type-id='f0966175'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e2b27ed1'/>
+        <return type-id='feb59272'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd8642d8'>
+        <parameter type-id='feb59272'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa2ba58'>
+        <parameter type-id='41ebc58b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d919518f'>
+        <parameter type-id='feb59272'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/rtc/class.c' language='LANG_C89'>
+      <function-decl name='devm_rtc_device_register' mangled-name='devm_rtc_device_register' filepath='drivers/rtc/class.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_rtc_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/rtc/class.c' line='401' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/rtc/class.c' line='402' column='1'/>
+        <parameter type-id='b902d9c7' name='ops' filepath='drivers/rtc/class.c' line='403' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rtc/class.c' line='404' column='1'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='devm_rtc_allocate_device' mangled-name='devm_rtc_allocate_device' filepath='drivers/rtc/class.c' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_rtc_allocate_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/rtc/class.c' line='306' column='1'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='__rtc_register_device' mangled-name='__rtc_register_device' filepath='drivers/rtc/class.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rtc_register_device'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/rtc/class.c' line='344' column='1'/>
+        <parameter type-id='5992ae83' name='rtc' filepath='drivers/rtc/class.c' line='344' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='aed6b757' size-in-bits='64' id='b902d9c7'/>
+      <pointer-type-def type-id='89ae06e3' size-in-bits='64' id='5992ae83'/>
+      <class-decl name='rtc_device' size-in-bits='12352' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='103' column='1' id='89ae06e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rtc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/rtc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='b902d9c7' visibility='default' filepath='include/linux/rtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/rtc.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='char_dev' type-id='22f86351' visibility='default' filepath='include/linux/rtc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='irq_data' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='irq_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rtc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='irq_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/rtc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/rtc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='irq_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='max_user_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='timerqueue' type-id='ff3c7f20' visibility='default' filepath='include/linux/rtc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='aie_timer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='uie_rtctimer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pie_timer' type-id='b6993efc' visibility='default' filepath='include/linux/rtc.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='pie_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='irqwork' type-id='ef9025d0' visibility='default' filepath='include/linux/rtc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='uie_unsupported' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='set_offset_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/rtc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11848'>
+          <var-decl name='nvram_old_abi' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='nvram' type-id='c0e2acc9' visibility='default' filepath='include/linux/rtc.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='range_min' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='range_max' type-id='13afd1c1' visibility='default' filepath='include/linux/rtc.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='start_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='offset_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='set_start_time' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/rtc.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fd1fa73c' const='yes' id='aed6b757'/>
+      <class-decl name='rtc_class_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='76' column='1' id='fd1fa73c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ioctl' type-id='05594c99' visibility='default' filepath='include/linux/rtc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc' type-id='103ef621' visibility='default' filepath='include/linux/rtc.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='alarm_irq_enable' type-id='7b683b77' visibility='default' filepath='include/linux/rtc.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_offset' type-id='ab7ca002' visibility='default' filepath='include/linux/rtc.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_offset' type-id='3b25b30a' visibility='default' filepath='include/linux/rtc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/rtc.h' line='87' 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='92' column='1' id='01786452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/rtc.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='fbc017ef' visibility='default' filepath='include/linux/rtc.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='85dc754e' visibility='default' filepath='include/linux/rtc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rtc' type-id='5992ae83' visibility='default' filepath='include/linux/rtc.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='timeu64_t' type-id='d3130597' filepath='include/linux/time64.h' line='9' column='1' id='13afd1c1'/>
+      <pointer-type-def type-id='0506cdd8' size-in-bits='64' id='3b25b30a'/>
+      <pointer-type-def type-id='5abdb7a8' size-in-bits='64' id='ab7ca002'/>
+      <pointer-type-def type-id='2b4e6dbe' size-in-bits='64' id='57d10d30'/>
+      <pointer-type-def type-id='0ad12489' size-in-bits='64' id='d3769ffd'/>
+      <pointer-type-def type-id='415e4835' size-in-bits='64' id='103ef621'/>
+      <pointer-type-def type-id='8edd926b' size-in-bits='64' id='7b683b77'/>
+      <pointer-type-def type-id='23f8b0bd' size-in-bits='64' id='05594c99'/>
+      <pointer-type-def type-id='dad263ec' size-in-bits='64' id='85dc754e'/>
+      <function-type size-in-bits='64' id='dad263ec'>
+        <parameter type-id='5992ae83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/rtc/interface.c' language='LANG_C89'>
+      <function-decl name='rtc_read_time' mangled-name='rtc_read_time' filepath='drivers/rtc/interface.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_read_time'>
+        <parameter type-id='5992ae83' name='rtc' filepath='drivers/rtc/interface.c' line='110' column='1'/>
+        <parameter type-id='2b8e7a42' name='tm' filepath='drivers/rtc/interface.c' line='110' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtc_update_irq' mangled-name='rtc_update_irq' filepath='drivers/rtc/interface.c' line='672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_update_irq'>
+        <parameter type-id='5992ae83' name='rtc' filepath='drivers/rtc/interface.c' line='672' column='1'/>
+        <parameter type-id='7359adad' name='num' filepath='drivers/rtc/interface.c' line='673' column='1'/>
+        <parameter type-id='7359adad' name='events' filepath='drivers/rtc/interface.c' line='673' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtc_class_open' mangled-name='rtc_class_open' filepath='drivers/rtc/interface.c' line='683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_class_open'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/rtc/interface.c' line='683' column='1'/>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='rtc_class_close' mangled-name='rtc_class_close' filepath='drivers/rtc/interface.c' line='703' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_class_close'>
+        <parameter type-id='5992ae83' name='rtc' filepath='drivers/rtc/interface.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='fa8285d4' size-in-bits='64' id='2b8e7a42'/>
+      <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='fa8285d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/rtc/lib.c' language='LANG_C89'>
+      <function-decl name='rtc_year_days' mangled-name='rtc_year_days' filepath='drivers/rtc/lib.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_year_days'>
+        <parameter type-id='f0981eeb' name='day' filepath='drivers/rtc/lib.c' line='39' column='1'/>
+        <parameter type-id='f0981eeb' name='month' filepath='drivers/rtc/lib.c' line='39' column='1'/>
+        <parameter type-id='f0981eeb' name='year' filepath='drivers/rtc/lib.c' line='39' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtc_valid_tm' mangled-name='rtc_valid_tm' filepath='drivers/rtc/lib.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_valid_tm'>
+        <parameter type-id='2b8e7a42' name='tm' filepath='drivers/rtc/lib.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtc_tm_to_time64' mangled-name='rtc_tm_to_time64' filepath='drivers/rtc/lib.c' line='115' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_tm_to_time64'>
+        <parameter type-id='2b8e7a42' name='tm' filepath='drivers/rtc/lib.c' line='115' column='1'/>
+        <return type-id='1afd27ac'/>
+      </function-decl>
+      <function-decl name='rtc_time64_to_tm' mangled-name='rtc_time64_to_tm' filepath='drivers/rtc/lib.c' line='49' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_time64_to_tm'>
+        <parameter type-id='1afd27ac' name='time' filepath='drivers/rtc/lib.c' line='49' column='1'/>
+        <parameter type-id='2b8e7a42' name='tm' filepath='drivers/rtc/lib.c' line='49' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtc_ktime_to_tm' mangled-name='rtc_ktime_to_tm' filepath='drivers/rtc/lib.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtc_ktime_to_tm'>
+        <parameter type-id='fbc017ef' name='kt' filepath='drivers/rtc/lib.c' line='134' column='1'/>
+        <return type-id='fa8285d4'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/hosts.c' language='LANG_C89'>
+      <class-decl name='transport_container' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/transport_class.h' line='56' column='1' id='2af4292a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ac' type-id='52bea74f' visibility='default' filepath='include/linux/transport_class.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='statistics' type-id='8ff9530e' visibility='default' filepath='include/linux/transport_class.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='attribute_container' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/attribute_container.h' line='16' column='1' id='52bea74f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/attribute_container.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='containers' type-id='6160a6ce' visibility='default' filepath='include/linux/attribute_container.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='class' type-id='67aca04f' visibility='default' filepath='include/linux/attribute_container.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='grp' type-id='8ff9530e' visibility='default' filepath='include/linux/attribute_container.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='attrs' type-id='aa9eb300' visibility='default' filepath='include/linux/attribute_container.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='match' type-id='341171ef' visibility='default' filepath='include/linux/attribute_container.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/attribute_container.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uint' type-id='f0981eeb' filepath='include/linux/types.h' line='92' column='1' id='6e160b14'/>
+      <pointer-type-def type-id='52bea74f' size-in-bits='64' id='3257bfe7'/>
+      <pointer-type-def type-id='6831a786' size-in-bits='64' id='3b3fe200'/>
+      <pointer-type-def type-id='1120d7bb' size-in-bits='64' id='341171ef'/>
+      <function-decl name='scsi_host_alloc' mangled-name='scsi_host_alloc' filepath='drivers/scsi/hosts.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_host_alloc'>
+        <parameter type-id='36265581' name='sht' filepath='drivers/scsi/hosts.c' line='374' column='1'/>
+        <parameter type-id='95e97e5e' name='privsize' filepath='drivers/scsi/hosts.c' line='374' column='1'/>
+        <return type-id='a970a64c'/>
+      </function-decl>
+      <function-decl name='scsi_remove_host' mangled-name='scsi_remove_host' filepath='drivers/scsi/hosts.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_remove_host'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/hosts.c' line='163' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_is_host_device' mangled-name='scsi_is_host_device' filepath='drivers/scsi/hosts.c' line='598' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_is_host_device'>
+        <parameter type-id='8df61054' name='dev' filepath='drivers/scsi/hosts.c' line='598' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_host_put' mangled-name='scsi_host_put' filepath='drivers/scsi/hosts.c' line='581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_host_put'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/hosts.c' line='581' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_add_host_with_dma' mangled-name='scsi_add_host_with_dma' filepath='drivers/scsi/hosts.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_add_host_with_dma'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/hosts.c' line='207' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/hosts.c' line='207' column='1'/>
+        <parameter type-id='fa0b179b' name='dma_dev' filepath='drivers/scsi/hosts.c' line='208' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='83cec606' size-in-bits='64' id='a970a64c'/>
+      <pointer-type-def type-id='89a2612a' size-in-bits='64' id='aa9eb300'/>
+      <function-type size-in-bits='64' id='6831a786'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='6e160b14'/>
+        <parameter type-id='6e160b14'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1120d7bb'>
+        <parameter type-id='3257bfe7'/>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='1a0d5389' size-in-bits='64' id='36265581'/>
+      <class-decl name='Scsi_Host' size-in-bits='19328' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='533' column='1' id='83cec606'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__targets' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='starved_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='default_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_host.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host_lock' type-id='cff2d845' visibility='default' filepath='include/scsi/scsi_host.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scan_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_host.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='eh_cmd_q' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ehandler' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_host.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='eh_action' type-id='389faaf7' visibility='default' filepath='include/scsi/scsi_host.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='host_wait' type-id='b5ab048f' visibility='default' filepath='include/scsi/scsi_host.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostt' type-id='36265581' visibility='default' filepath='include/scsi/scsi_host.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='transportt' type-id='498f47da' visibility='default' filepath='include/scsi/scsi_host.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tag_set' type-id='651086d7' visibility='default' filepath='include/scsi/scsi_host.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='host_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='host_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_failed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='host_eh_scheduled' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='host_no' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='eh_deadline' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='last_reset' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='max_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='max_lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='unique_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='max_cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='host_self_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='reverse_ordering' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='tmf_in_progress' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='async_scan' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='eh_noresume' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='use_cmd_list' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='short_inquiry' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_scsi2_lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3440'>
+          <var-decl name='work_q_name' type-id='664ac0b7' visibility='default' filepath='include/scsi/scsi_host.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tmf_work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='prot_capabilities' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='prot_guard_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='base' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='io_port' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='n_io_port' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4040'>
+          <var-decl name='dma_channel' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='shost_state' type-id='e41e14c7' visibility='default' filepath='include/scsi/scsi_host.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='shost_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='shost_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='shost_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_host.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/scsi/scsi_host.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='hostdata' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_host.h' line='710' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_host_template' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='46' column='1' id='1a0d5389'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_host.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='91464e34' visibility='default' filepath='include/scsi/scsi_host.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queuecommand' type-id='5e9804d5' visibility='default' filepath='include/scsi/scsi_host.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='commit_rqs' type-id='fddad99e' visibility='default' filepath='include/scsi/scsi_host.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_abort_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='eh_device_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='eh_target_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_bus_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='eh_host_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slave_alloc' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slave_configure' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='slave_destroy' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='target_alloc' type-id='55bb6559' visibility='default' filepath='include/scsi/scsi_host.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='target_destroy' type-id='36e7f8ac' visibility='default' filepath='include/scsi/scsi_host.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_finished' type-id='07445d6c' visibility='default' filepath='include/scsi/scsi_host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='scan_start' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_host.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='change_queue_depth' type-id='38313007' visibility='default' filepath='include/scsi/scsi_host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_queues' type-id='1a9d259c' visibility='default' filepath='include/scsi/scsi_host.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bios_param' type-id='4c72f20d' visibility='default' filepath='include/scsi/scsi_host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unlock_native_capacity' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='show_info' type-id='b9e33ab0' visibility='default' filepath='include/scsi/scsi_host.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_info' type-id='ff0f7577' visibility='default' filepath='include/scsi/scsi_host.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='eh_timed_out' type-id='7114e104' visibility='default' filepath='include/scsi/scsi_host.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='host_reset' type-id='203d9a9b' visibility='default' filepath='include/scsi/scsi_host.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proc_name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/scsi/scsi_host.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='present' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='tag_alloc_policy' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='track_queue_depth' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='supported_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='emulated' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='skip_settle_delay' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shost_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdev_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sdev_groups' type-id='c97de1ac' visibility='default' filepath='include/scsi/scsi_host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vendor_id' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cmd_pool' type-id='4783492e' visibility='default' filepath='include/scsi/scsi_host.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rpm_autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='497' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='369a41ea' size-in-bits='64' id='91464e34'/>
+      <pointer-type-def type-id='291d9c02' size-in-bits='64' id='7114e104'/>
+      <enum-decl name='scsi_host_state' filepath='include/scsi/scsi_host.h' line='523' column='1' id='e41e14c7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SHOST_CREATED' value='1'/>
+        <enumerator name='SHOST_RUNNING' value='2'/>
+        <enumerator name='SHOST_CANCEL' value='3'/>
+        <enumerator name='SHOST_DEL' value='4'/>
+        <enumerator name='SHOST_RECOVERY' value='5'/>
+        <enumerator name='SHOST_CANCEL_RECOVERY' value='6'/>
+        <enumerator name='SHOST_DEL_RECOVERY' value='7'/>
+      </enum-decl>
+      <pointer-type-def type-id='fb9c833a' size-in-bits='64' id='1a9d259c'/>
+      <pointer-type-def type-id='20affdf3' size-in-bits='64' id='ff0f7577'/>
+      <pointer-type-def type-id='d2f6c36f' size-in-bits='64' id='203d9a9b'/>
+      <pointer-type-def type-id='d15eda11' size-in-bits='64' id='5e9804d5'/>
+      <pointer-type-def type-id='9423c42a' size-in-bits='64' id='07445d6c'/>
+      <pointer-type-def type-id='97ca9b12' size-in-bits='64' id='0786894c'/>
+      <pointer-type-def type-id='53efb49e' size-in-bits='64' id='4fae2c98'/>
+      <pointer-type-def type-id='8ff31849' size-in-bits='64' id='4c72f20d'/>
+      <pointer-type-def type-id='686e5e33' size-in-bits='64' id='38313007'/>
+      <pointer-type-def type-id='ec8e7b62' size-in-bits='64' id='73550cb4'/>
+      <pointer-type-def type-id='af8a50f5' size-in-bits='64' id='55bb6559'/>
+      <pointer-type-def type-id='f680e13e' size-in-bits='64' id='b9e33ab0'/>
+      <pointer-type-def type-id='94982f58' size-in-bits='64' id='4783492e'/>
+      <pointer-type-def type-id='0e15337c' size-in-bits='64' id='498f47da'/>
+      <pointer-type-def type-id='d7413fe5' size-in-bits='64' id='7fc5dc19'/>
+      <pointer-type-def type-id='0457ac44' size-in-bits='64' id='fddad99e'/>
+      <pointer-type-def type-id='9102a0ad' size-in-bits='64' id='38c41fe1'/>
+      <pointer-type-def type-id='ed6fc6ea' size-in-bits='64' id='36e7f8ac'/>
+      <class-decl name='scsi_host_cmd_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='94982f58'/>
+      <class-decl name='scsi_transport_template' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/scsi/scsi_transport.h' line='16' column='1' id='0e15337c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='target_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='user_scan' type-id='3b3fe200' visibility='default' filepath='include/scsi/scsi_transport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='device_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='device_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='target_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='target_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create_work_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_transport.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='eh_strategy_handler' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_transport.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi.c' language='LANG_C89'>
+      <class-decl name='scsi_device_handler' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/scsi/scsi_dh.h' line='48' column='1' id='4e8a6f85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_dh.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_dh.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_dh.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='check_sense' type-id='a263aa4a' visibility='default' filepath='include/scsi/scsi_dh.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attach' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_dh.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='detach' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_dh.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='81d19a12' visibility='default' filepath='include/scsi/scsi_dh.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prep_fn' type-id='04d17276' visibility='default' filepath='include/scsi/scsi_dh.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_params' type-id='b25d7387' visibility='default' filepath='include/scsi/scsi_dh.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rescan' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_dh.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_host_cmd_pool' is-struct='yes' visibility='default' is-declaration-only='yes' id='94982f58'/>
+      <class-decl name='scsi_transport_template' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/scsi/scsi_transport.h' line='16' column='1' id='0e15337c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='target_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='device_attrs' type-id='2af4292a' visibility='default' filepath='include/scsi/scsi_transport.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='user_scan' type-id='3b3fe200' visibility='default' filepath='include/scsi/scsi_transport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='device_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='device_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='target_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='target_private_offset' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_size' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_transport.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create_work_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_transport.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='eh_strategy_handler' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_transport.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='128' id='92a46553'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='scsi_device' size-in-bits='19712' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='102' column='1' id='e07b5dbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='a970a64c' visibility='default' filepath='include/scsi/scsi_device.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='request_queue' type-id='e7d2a5fc' visibility='default' filepath='include/scsi/scsi_device.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='same_target_siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='device_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='device_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_device.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='starved_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='max_queue_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='last_queue_full_depth' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='816'>
+          <var-decl name='last_queue_full_count' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_device.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_queue_full_time' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='queue_ramp_up_period' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='last_queue_ramp_up' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_device.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='manufacturer' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='sector_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1288'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='inq_periph_qual' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='inquiry_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inquiry_len' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='inquiry' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_device.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vendor' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='model' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rev' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_device.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='vpd_pg83' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='vpd_pg80' type-id='2b88fa00' visibility='default' filepath='include/scsi/scsi_device.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='current_tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sdev_target' type-id='4cb5819d' visibility='default' filepath='include/scsi/scsi_device.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sdev_bflags' type-id='ec838379' visibility='default' filepath='include/scsi/scsi_device.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='eh_timeout' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='removable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='changed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='busy' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='lockable' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='locked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='borken' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='disconnect' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='soft_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='wdtr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='ppr' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='tagged_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='simple_tags' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='was_reset' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='expecting_cc_ua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='use_10_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='use_10_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='set_dbd_for_ms' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='no_report_opcodes' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='use_16_for_rw' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='skip_ms_page_8' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='skip_ms_page_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='skip_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='try_vpd_pages' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='use_192_bytes_for_3f' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='no_start_on_add' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='allow_restart' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='manage_start_stop' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='start_stop_pwr_cond' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='no_uld_attach' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='select_no_atn' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fix_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='guess_capacity' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='retry_hwerror' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='last_sector_bug' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_read_disc_info' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='no_read_capacity_16' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='try_rc_10_first' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='security_supported' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_visible' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='wce_default_on' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='no_dif' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='broken_fua' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='unmap_limit_for_ws' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='rpm_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='disk_events_disable_depth' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='supported_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='pending_events' type-id='f066dd3c' visibility='default' filepath='include/scsi/scsi_device.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='max_device_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='iorequest_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='iodone_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='ioerr_cnt' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sdev_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='sdev_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='ew' type-id='53f7ea88' visibility='default' filepath='include/scsi/scsi_device.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='requeue_work' type-id='ef9025d0' visibility='default' filepath='include/scsi/scsi_device.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='handler' type-id='0a0775b5' visibility='default' filepath='include/scsi/scsi_device.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='access_state' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_device.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='state_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_device.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='sdev_state' type-id='7e4b2e83' visibility='default' filepath='include/scsi/scsi_device.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='quiesced_by' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_device.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_device.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='sdev_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='Scsi_Host' size-in-bits='19328' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='533' column='1' id='83cec606'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__targets' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='starved_list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='default_lock' type-id='fb4018a0' visibility='default' filepath='include/scsi/scsi_host.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host_lock' type-id='cff2d845' visibility='default' filepath='include/scsi/scsi_host.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='scan_mutex' type-id='925167dc' visibility='default' filepath='include/scsi/scsi_host.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='eh_cmd_q' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_host.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ehandler' type-id='f23e2572' visibility='default' filepath='include/scsi/scsi_host.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='eh_action' type-id='389faaf7' visibility='default' filepath='include/scsi/scsi_host.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='host_wait' type-id='b5ab048f' visibility='default' filepath='include/scsi/scsi_host.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hostt' type-id='36265581' visibility='default' filepath='include/scsi/scsi_host.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='transportt' type-id='498f47da' visibility='default' filepath='include/scsi/scsi_host.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tag_set' type-id='651086d7' visibility='default' filepath='include/scsi/scsi_host.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='host_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='host_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_host.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='host_failed' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='host_eh_scheduled' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='host_no' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='eh_deadline' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='last_reset' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='max_channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='max_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='max_lun' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='unique_id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='max_cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='host_self_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='reverse_ordering' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='tmf_in_progress' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='async_scan' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='eh_noresume' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='use_cmd_list' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='short_inquiry' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='no_scsi2_lun_in_cdb' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3440'>
+          <var-decl name='work_q_name' type-id='664ac0b7' visibility='default' filepath='include/scsi/scsi_host.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tmf_work_q' type-id='242e3d19' visibility='default' filepath='include/scsi/scsi_host.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='prot_capabilities' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='prot_guard_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='base' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='io_port' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='n_io_port' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4040'>
+          <var-decl name='dma_channel' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='shost_state' type-id='e41e14c7' visibility='default' filepath='include/scsi/scsi_host.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='shost_gendev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='shost_dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_host.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='shost_data' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_host.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/scsi/scsi_host.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='hostdata' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_host.h' line='710' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_host_template' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/scsi/scsi_host.h' line='46' column='1' id='1a0d5389'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/scsi/scsi_host.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='info' type-id='91464e34' visibility='default' filepath='include/scsi/scsi_host.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='73550cb4' visibility='default' filepath='include/scsi/scsi_host.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queuecommand' type-id='5e9804d5' visibility='default' filepath='include/scsi/scsi_host.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='commit_rqs' type-id='fddad99e' visibility='default' filepath='include/scsi/scsi_host.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_abort_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='eh_device_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='eh_target_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_bus_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='eh_host_reset_handler' type-id='0786894c' visibility='default' filepath='include/scsi/scsi_host.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slave_alloc' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='slave_configure' type-id='4fae2c98' visibility='default' filepath='include/scsi/scsi_host.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='slave_destroy' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='target_alloc' type-id='55bb6559' visibility='default' filepath='include/scsi/scsi_host.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='target_destroy' type-id='36e7f8ac' visibility='default' filepath='include/scsi/scsi_host.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_finished' type-id='07445d6c' visibility='default' filepath='include/scsi/scsi_host.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='scan_start' type-id='7fc5dc19' visibility='default' filepath='include/scsi/scsi_host.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='change_queue_depth' type-id='38313007' visibility='default' filepath='include/scsi/scsi_host.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='map_queues' type-id='1a9d259c' visibility='default' filepath='include/scsi/scsi_host.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bios_param' type-id='4c72f20d' visibility='default' filepath='include/scsi/scsi_host.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unlock_native_capacity' type-id='38c41fe1' visibility='default' filepath='include/scsi/scsi_host.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='show_info' type-id='b9e33ab0' visibility='default' filepath='include/scsi/scsi_host.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_info' type-id='ff0f7577' visibility='default' filepath='include/scsi/scsi_host.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='eh_timed_out' type-id='7114e104' visibility='default' filepath='include/scsi/scsi_host.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='host_reset' type-id='203d9a9b' visibility='default' filepath='include/scsi/scsi_host.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='proc_name' type-id='80f4b756' visibility='default' filepath='include/scsi/scsi_host.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/scsi/scsi_host.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='can_queue' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='this_id' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1936'>
+          <var-decl name='sg_prot_tablesize' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_host.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_boundary' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_host.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='cmd_per_lun' type-id='a2185560' visibility='default' filepath='include/scsi/scsi_host.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='present' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_host.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='tag_alloc_policy' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='track_queue_depth' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='supported_mode' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='unchecked_isa_dma' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='emulated' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='skip_settle_delay' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_write_same' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='force_blk_mq' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='max_host_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shost_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdev_attrs' type-id='aa9eb300' visibility='default' filepath='include/scsi/scsi_host.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sdev_groups' type-id='c97de1ac' visibility='default' filepath='include/scsi/scsi_host.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='vendor_id' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_host.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cmd_pool' type-id='4783492e' visibility='default' filepath='include/scsi/scsi_host.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rpm_autosuspend_delay' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_host.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_host.h' line='497' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_cmnd' size-in-bits='3904' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='68' column='1' id='fe7ab802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='req' type-id='dec7ed8d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='device' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='eh_entry' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='abort_work' type-id='5ad6e0ef' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='eh_eflags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='jiffies_at_alloc' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='allowed' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prot_op' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2184'>
+          <var-decl name='prot_type' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2192'>
+          <var-decl name='prot_flags' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sc_data_direction' type-id='eea6b025' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cmnd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sdb' type-id='9f8b0d0f' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='prot_sdb' type-id='8502fa27' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='underflow' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='transfersize' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='request' type-id='3dad1a48' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sense_buffer' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='scsi_done' type-id='466c873d' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='SCp' type-id='fd44f8bd' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='host_scribble' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='tag' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/scsi/scsi_request.h' line='9' column='1' id='dec7ed8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__cmd' type-id='92a46553' visibility='default' filepath='include/scsi/scsi_request.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_request.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_len' type-id='8efea9e5' visibility='default' filepath='include/scsi/scsi_request.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sense_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='resid_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_request.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='retries' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_request.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sense' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_request.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_data_buffer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='36' column='1' id='9f8b0d0f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='c59e4f4c' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_pointer' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='42' column='1' id='fd44f8bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ptr' type-id='26a90f95' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='this_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='bf3ef905' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffers_residual' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dma_handle' type-id='cf29c9b3' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='Status' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='Message' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='have_data_in' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sent_command' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='phase' type-id='e024ff18' visibility='default' filepath='include/scsi/scsi_cmnd.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='scsi_target' size-in-bits='8192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='288' column='1' id='148c2b1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='starget_sdev_user' type-id='eb572b74' visibility='default' filepath='include/scsi/scsi_device.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/scsi/scsi_device.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/scsi/scsi_device.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='reap_ref' type-id='400fb07b' visibility='default' filepath='include/scsi/scsi_device.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='channel' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='single_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='pdt_1f_for_no_lun' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_report_luns' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='expecting_lun_change' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='target_busy' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='target_blocked' type-id='49178f86' visibility='default' filepath='include/scsi/scsi_device.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='can_queue' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='max_target_blocked' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_device.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='scsi_level' type-id='a84c031d' visibility='default' filepath='include/scsi/scsi_device.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='state' type-id='0e1b99c8' visibility='default' filepath='include/scsi/scsi_device.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='hostdata' type-id='eaa32e2f' visibility='default' filepath='include/scsi/scsi_device.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='starget_data' type-id='c99b5ecd' visibility='default' filepath='include/scsi/scsi_device.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_target_state' filepath='include/scsi/scsi_device.h' line='275' column='1' id='0e1b99c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STARGET_CREATED' value='1'/>
+        <enumerator name='STARGET_RUNNING' value='2'/>
+        <enumerator name='STARGET_REMOVE' value='3'/>
+        <enumerator name='STARGET_CREATED_REMOVE' value='4'/>
+        <enumerator name='STARGET_DEL' value='5'/>
+      </enum-decl>
+      <enum-decl name='scsi_host_state' filepath='include/scsi/scsi_host.h' line='523' column='1' id='e41e14c7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SHOST_CREATED' value='1'/>
+        <enumerator name='SHOST_RUNNING' value='2'/>
+        <enumerator name='SHOST_CANCEL' value='3'/>
+        <enumerator name='SHOST_DEL' value='4'/>
+        <enumerator name='SHOST_RECOVERY' value='5'/>
+        <enumerator name='SHOST_CANCEL_RECOVERY' value='6'/>
+        <enumerator name='SHOST_DEL_RECOVERY' value='7'/>
+      </enum-decl>
+      <class-decl name='scsi_vpd' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/scsi/scsi_device.h' line='96' column='1' id='4399e1b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/scsi/scsi_device.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_device.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='data' type-id='5e6516ee' visibility='default' filepath='include/scsi/scsi_device.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blist_flags_t' type-id='d3130597' filepath='include/scsi/scsi_device.h' line='19' column='1' id='ec838379'/>
+      <class-decl name='execute_work' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='174' column='1' id='53f7ea88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='175' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='scsi_device_state' filepath='include/scsi/scsi_device.h' line='37' column='1' id='7e4b2e83'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SDEV_CREATED' value='1'/>
+        <enumerator name='SDEV_RUNNING' value='2'/>
+        <enumerator name='SDEV_CANCEL' value='3'/>
+        <enumerator name='SDEV_DEL' value='4'/>
+        <enumerator name='SDEV_QUIESCE' value='5'/>
+        <enumerator name='SDEV_OFFLINE' value='6'/>
+        <enumerator name='SDEV_TRANSPORT_OFFLINE' value='7'/>
+        <enumerator name='SDEV_BLOCK' value='8'/>
+        <enumerator name='SDEV_CREATED_BLOCK' value='9'/>
+      </enum-decl>
+      <pointer-type-def type-id='83cec606' size-in-bits='64' id='a970a64c'/>
+      <pointer-type-def type-id='369a41ea' size-in-bits='64' id='91464e34'/>
+      <pointer-type-def type-id='89a2612a' size-in-bits='64' id='aa9eb300'/>
+      <pointer-type-def type-id='291d9c02' size-in-bits='64' id='7114e104'/>
+      <pointer-type-def type-id='fb9c833a' size-in-bits='64' id='1a9d259c'/>
+      <pointer-type-def type-id='20affdf3' size-in-bits='64' id='ff0f7577'/>
+      <pointer-type-def type-id='d2f6c36f' size-in-bits='64' id='203d9a9b'/>
+      <pointer-type-def type-id='d15eda11' size-in-bits='64' id='5e9804d5'/>
+      <pointer-type-def type-id='9423c42a' size-in-bits='64' id='07445d6c'/>
+      <pointer-type-def type-id='97ca9b12' size-in-bits='64' id='0786894c'/>
+      <pointer-type-def type-id='53efb49e' size-in-bits='64' id='4fae2c98'/>
+      <pointer-type-def type-id='8ff31849' size-in-bits='64' id='4c72f20d'/>
+      <pointer-type-def type-id='686e5e33' size-in-bits='64' id='38313007'/>
+      <pointer-type-def type-id='ec8e7b62' size-in-bits='64' id='73550cb4'/>
+      <pointer-type-def type-id='af8a50f5' size-in-bits='64' id='55bb6559'/>
+      <pointer-type-def type-id='f680e13e' size-in-bits='64' id='b9e33ab0'/>
+      <pointer-type-def type-id='fe7ab802' size-in-bits='64' id='0b8718c0'/>
+      <pointer-type-def type-id='9f8b0d0f' size-in-bits='64' id='8502fa27'/>
+      <pointer-type-def type-id='e07b5dbe' size-in-bits='64' id='eb572b74'/>
+      <pointer-type-def type-id='4e8a6f85' size-in-bits='64' id='0a0775b5'/>
+      <pointer-type-def type-id='94982f58' size-in-bits='64' id='4783492e'/>
+      <pointer-type-def type-id='1a0d5389' size-in-bits='64' id='36265581'/>
+      <pointer-type-def type-id='148c2b1d' size-in-bits='64' id='4cb5819d'/>
+      <pointer-type-def type-id='0e15337c' size-in-bits='64' id='498f47da'/>
+      <pointer-type-def type-id='4399e1b2' size-in-bits='64' id='2b88fa00'/>
+      <pointer-type-def type-id='d7413fe5' size-in-bits='64' id='7fc5dc19'/>
+      <pointer-type-def type-id='0457ac44' size-in-bits='64' id='fddad99e'/>
+      <pointer-type-def type-id='57109d59' size-in-bits='64' id='466c873d'/>
+      <pointer-type-def type-id='9102a0ad' size-in-bits='64' id='38c41fe1'/>
+      <pointer-type-def type-id='ed6fc6ea' size-in-bits='64' id='36e7f8ac'/>
+      <qualified-type-def type-id='95e97e5e' volatile='yes' id='e024ff18'/>
+      <function-decl name='scsi_device_put' mangled-name='scsi_device_put' filepath='drivers/scsi/scsi.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_device_put'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi.c' line='556' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_device_get' mangled-name='scsi_device_get' filepath='drivers/scsi/scsi.c' line='531' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_device_get'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi.c' line='531' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_change_queue_depth' mangled-name='scsi_change_queue_depth' filepath='drivers/scsi/scsi.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_change_queue_depth'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi.c' line='238' column='1'/>
+        <parameter type-id='95e97e5e' name='depth' filepath='drivers/scsi/scsi.c' line='238' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__scsi_device_lookup_by_target' mangled-name='__scsi_device_lookup_by_target' filepath='drivers/scsi/scsi.c' line='657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_device_lookup_by_target'>
+        <parameter type-id='4cb5819d' name='starget' filepath='drivers/scsi/scsi.c' line='657' column='1'/>
+        <parameter type-id='91ce1af9' name='lun' filepath='drivers/scsi/scsi.c' line='658' column='1'/>
+        <return type-id='eb572b74'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='369a41ea'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='291d9c02'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='0f4f6276'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb9c833a'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20affdf3'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2f6c36f'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d15eda11'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9423c42a'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97ca9b12'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53efb49e'>
+        <parameter type-id='eb572b74'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ff31849'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='686e5e33'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec8e7b62'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af8a50f5'>
+        <parameter type-id='4cb5819d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f680e13e'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='a970a64c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7413fe5'>
+        <parameter type-id='a970a64c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0457ac44'>
+        <parameter type-id='a970a64c'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='57109d59'>
+        <parameter type-id='0b8718c0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9102a0ad'>
+        <parameter type-id='eb572b74' name='sdev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ed6fc6ea'>
+        <parameter type-id='4cb5819d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='d591777b' size-in-bits='64' id='b25d7387'/>
+      <pointer-type-def type-id='08decef0' size-in-bits='64' id='a263aa4a'/>
+      <pointer-type-def type-id='1d3d5bb0' size-in-bits='64' id='81d19a12'/>
+      <pointer-type-def type-id='f7146e24' size-in-bits='64' id='04d17276'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_common.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='64' id='0209ab38'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='scsi_lun' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_proto.h' line='287' column='1' id='a955150b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scsi_lun' type-id='0209ab38' visibility='default' filepath='include/scsi/scsi_proto.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a955150b' size-in-bits='64' id='a9aa3e2b'/>
+      <function-decl name='scsi_sense_desc_find' mangled-name='scsi_sense_desc_find' filepath='drivers/scsi/scsi_common.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_sense_desc_find'>
+        <parameter type-id='bbaf3419' name='sense_buffer' filepath='drivers/scsi/scsi_common.c' line='196' column='1'/>
+        <parameter type-id='95e97e5e' name='sb_len' filepath='drivers/scsi/scsi_common.c' line='196' column='1'/>
+        <parameter type-id='95e97e5e' name='desc_type' filepath='drivers/scsi/scsi_common.c' line='197' column='1'/>
+        <return type-id='bbaf3419'/>
+      </function-decl>
+      <function-decl name='scsi_normalize_sense' mangled-name='scsi_normalize_sense' filepath='drivers/scsi/scsi_common.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_normalize_sense'>
+        <parameter type-id='bbaf3419' name='sense_buffer' filepath='drivers/scsi/scsi_common.c' line='138' column='1'/>
+        <parameter type-id='95e97e5e' name='sb_len' filepath='drivers/scsi/scsi_common.c' line='138' column='1'/>
+        <parameter type-id='991b8213' name='sshdr' filepath='drivers/scsi/scsi_common.c' line='139' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='int_to_scsilun' mangled-name='int_to_scsilun' filepath='drivers/scsi/scsi_common.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='int_to_scsilun'>
+        <parameter type-id='91ce1af9' name='lun' filepath='drivers/scsi/scsi_common.c' line='105' column='1'/>
+        <parameter type-id='a9aa3e2b' name='scsilun' filepath='drivers/scsi/scsi_common.c' line='105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='d6746ce3' size-in-bits='64' id='991b8213'/>
+      <class-decl name='scsi_sense_hdr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_common.h' line='50' column='1' id='d6746ce3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='response_code' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sense_key' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='asc' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ascq' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='byte4' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='byte5' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='byte6' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='additional_length' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_error.c' language='LANG_C89'>
+      <class-decl name='scsi_sense_hdr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/scsi/scsi_common.h' line='50' column='1' id='d6746ce3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='response_code' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sense_key' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='asc' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ascq' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='byte4' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='byte5' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='byte6' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='additional_length' type-id='f9b06939' visibility='default' filepath='include/scsi/scsi_common.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='activate_complete' type-id='1ed1e4cd' filepath='include/scsi/scsi_dh.h' line='47' column='1' id='0b6eba4d'/>
+      <class-decl name='scsi_eh_save' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/scsi/scsi_eh.h' line='32' column='1' id='2ee43d37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_eh.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resid_len' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_eh.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eh_eflags' type-id='95e97e5e' visibility='default' filepath='include/scsi/scsi_eh.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_direction' type-id='eea6b025' visibility='default' filepath='include/scsi/scsi_eh.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='underflow' type-id='f0981eeb' visibility='default' filepath='include/scsi/scsi_eh.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cmd_len' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_eh.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='prot_op' type-id='002ac4a6' visibility='default' filepath='include/scsi/scsi_eh.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmnd' type-id='cf536864' visibility='default' filepath='include/scsi/scsi_eh.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sdb' type-id='9f8b0d0f' visibility='default' filepath='include/scsi/scsi_eh.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='eh_cmnd' type-id='92a46553' visibility='default' filepath='include/scsi/scsi_eh.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sense_sgl' type-id='663acc25' visibility='default' filepath='include/scsi/scsi_eh.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d591777b' size-in-bits='64' id='b25d7387'/>
+      <pointer-type-def type-id='08decef0' size-in-bits='64' id='a263aa4a'/>
+      <pointer-type-def type-id='1d3d5bb0' size-in-bits='64' id='81d19a12'/>
+      <pointer-type-def type-id='2ee43d37' size-in-bits='64' id='075d8b9f'/>
+      <pointer-type-def type-id='d6746ce3' size-in-bits='64' id='991b8213'/>
+      <pointer-type-def type-id='f7146e24' size-in-bits='64' id='04d17276'/>
+      <pointer-type-def type-id='2922fb19' size-in-bits='64' id='1ed1e4cd'/>
+      <function-decl name='scsi_block_when_processing_errors' mangled-name='scsi_block_when_processing_errors' filepath='drivers/scsi/scsi_error.c' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_block_when_processing_errors'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_error.c' line='334' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_report_device_reset' mangled-name='scsi_report_device_reset' filepath='drivers/scsi/scsi_error.c' line='2305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_report_device_reset'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <parameter type-id='95e97e5e' name='channel' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <parameter type-id='95e97e5e' name='target' filepath='drivers/scsi/scsi_error.c' line='2305' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_report_bus_reset' mangled-name='scsi_report_bus_reset' filepath='drivers/scsi/scsi_error.c' line='2272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_report_bus_reset'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_error.c' line='2272' column='1'/>
+        <parameter type-id='95e97e5e' name='channel' filepath='drivers/scsi/scsi_error.c' line='2272' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_eh_restore_cmnd' mangled-name='scsi_eh_restore_cmnd' filepath='drivers/scsi/scsi_error.c' line='1024' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_eh_restore_cmnd'>
+        <parameter type-id='0b8718c0' name='scmd' filepath='drivers/scsi/scsi_error.c' line='1024' column='1'/>
+        <parameter type-id='075d8b9f' name='ses' filepath='drivers/scsi/scsi_error.c' line='1024' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_eh_prep_cmnd' mangled-name='scsi_eh_prep_cmnd' filepath='drivers/scsi/scsi_error.c' line='953' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_eh_prep_cmnd'>
+        <parameter type-id='0b8718c0' name='scmd' filepath='drivers/scsi/scsi_error.c' line='953' column='1'/>
+        <parameter type-id='075d8b9f' name='ses' filepath='drivers/scsi/scsi_error.c' line='953' column='1'/>
+        <parameter type-id='cf536864' name='cmnd' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <parameter type-id='95e97e5e' name='cmnd_size' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <parameter type-id='f0981eeb' name='sense_bytes' filepath='drivers/scsi/scsi_error.c' line='954' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d591777b'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08decef0'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='991b8213'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d3d5bb0'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='0b6eba4d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f7146e24'>
+        <parameter type-id='eb572b74'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='f4e2facd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2922fb19'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_ioctl.c' language='LANG_C89'>
+      <function-decl name='scsi_ioctl_block_when_processing_errors' mangled-name='scsi_ioctl_block_when_processing_errors' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_ioctl_block_when_processing_errors'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/scsi/scsi_ioctl.c' line='280' column='1'/>
+        <parameter type-id='b50a4934' name='ndelay' filepath='drivers/scsi/scsi_ioctl.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_ioctl' mangled-name='scsi_ioctl' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_ioctl'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='drivers/scsi/scsi_ioctl.c' line='202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_lib.c' language='LANG_C89'>
+      <function-decl name='__scsi_execute' mangled-name='__scsi_execute' filepath='drivers/scsi/scsi_lib.c' line='248' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_execute'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_lib.c' line='248' column='1'/>
+        <parameter type-id='354f7eb9' name='cmd' filepath='drivers/scsi/scsi_lib.c' line='248' column='1'/>
+        <parameter type-id='95e97e5e' name='data_direction' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='f0981eeb' name='bufflen' filepath='drivers/scsi/scsi_lib.c' line='249' column='1'/>
+        <parameter type-id='cf536864' name='sense' filepath='drivers/scsi/scsi_lib.c' line='250' column='1'/>
+        <parameter type-id='991b8213' name='sshdr' filepath='drivers/scsi/scsi_lib.c' line='250' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='95e97e5e' name='retries' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='91ce1af9' name='flags' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='3b445e53' name='rq_flags' filepath='drivers/scsi/scsi_lib.c' line='251' column='1'/>
+        <parameter type-id='7292109c' name='resid' filepath='drivers/scsi/scsi_lib.c' line='252' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_unblock_requests' mangled-name='scsi_unblock_requests' filepath='drivers/scsi/scsi_lib.c' line='1991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_unblock_requests'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_lib.c' line='1991' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_test_unit_ready' mangled-name='scsi_test_unit_ready' filepath='drivers/scsi/scsi_lib.c' line='2223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_test_unit_ready'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_lib.c' line='2223' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/scsi/scsi_lib.c' line='2223' column='1'/>
+        <parameter type-id='95e97e5e' name='retries' filepath='drivers/scsi/scsi_lib.c' line='2223' column='1'/>
+        <parameter type-id='991b8213' name='sshdr' filepath='drivers/scsi/scsi_lib.c' line='2224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scsi_block_requests' mangled-name='scsi_block_requests' filepath='drivers/scsi/scsi_lib.c' line='1965' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_block_requests'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_lib.c' line='1965' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_logging.c' language='LANG_C89'>
+      <qualified-type-def type-id='fe7ab802' const='yes' id='0ebf66e5'/>
+      <pointer-type-def type-id='0ebf66e5' size-in-bits='64' id='064ed7dd'/>
+      <qualified-type-def type-id='e07b5dbe' const='yes' id='cf3752f1'/>
+      <pointer-type-def type-id='cf3752f1' size-in-bits='64' id='0f176ec1'/>
+      <qualified-type-def type-id='d6746ce3' const='yes' id='f64a160a'/>
+      <pointer-type-def type-id='f64a160a' size-in-bits='64' id='d6a0d460'/>
+      <function-decl name='sdev_prefix_printk' mangled-name='sdev_prefix_printk' filepath='drivers/scsi/scsi_logging.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sdev_prefix_printk'>
+        <parameter type-id='80f4b756' name='level' filepath='drivers/scsi/scsi_logging.c' line='53' column='1'/>
+        <parameter type-id='0f176ec1' name='sdev' filepath='drivers/scsi/scsi_logging.c' line='53' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/scsi/scsi_logging.c' line='54' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/scsi/scsi_logging.c' line='54' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_print_command' mangled-name='scsi_print_command' filepath='drivers/scsi/scsi_logging.c' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_print_command'>
+        <parameter type-id='0b8718c0' name='cmd' filepath='drivers/scsi/scsi_logging.c' line='177' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scmd_printk' mangled-name='scmd_printk' filepath='drivers/scsi/scsi_logging.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scmd_printk'>
+        <parameter type-id='80f4b756' name='level' filepath='drivers/scsi/scsi_logging.c' line='80' column='1'/>
+        <parameter type-id='064ed7dd' name='scmd' filepath='drivers/scsi/scsi_logging.c' line='80' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='drivers/scsi/scsi_logging.c' line='81' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_print_sense_hdr' mangled-name='scsi_print_sense_hdr' filepath='drivers/scsi/scsi_logging.c' line='362' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_print_sense_hdr'>
+        <parameter type-id='0f176ec1' name='sdev' filepath='drivers/scsi/scsi_logging.c' line='362' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/scsi/scsi_logging.c' line='362' column='1'/>
+        <parameter type-id='d6a0d460' name='sshdr' filepath='drivers/scsi/scsi_logging.c' line='363' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__scsi_print_sense' mangled-name='__scsi_print_sense' filepath='drivers/scsi/scsi_logging.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_print_sense'>
+        <parameter type-id='0f176ec1' name='sdev' filepath='drivers/scsi/scsi_logging.c' line='370' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/scsi/scsi_logging.c' line='370' column='1'/>
+        <parameter type-id='354f7eb9' name='sense_buffer' filepath='drivers/scsi/scsi_logging.c' line='371' column='1'/>
+        <parameter type-id='95e97e5e' name='sense_len' filepath='drivers/scsi/scsi_logging.c' line='371' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_pm.c' language='LANG_C89'>
+      <function-decl name='scsi_autopm_put_device' mangled-name='scsi_autopm_put_device' filepath='drivers/scsi/scsi_pm.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_autopm_put_device'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_pm.c' line='311' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_autopm_get_device' mangled-name='scsi_autopm_get_device' filepath='drivers/scsi/scsi_pm.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_autopm_get_device'>
+        <parameter type-id='eb572b74' name='sdev' filepath='drivers/scsi/scsi_pm.c' line='298' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_scan.c' language='LANG_C89'>
+      <function-decl name='scsi_scan_host' mangled-name='scsi_scan_host' filepath='drivers/scsi/scsi_scan.c' line='1837' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_scan_host'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_scan.c' line='1837' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='scsi_get_host_dev' mangled-name='scsi_get_host_dev' filepath='drivers/scsi/scsi_scan.c' line='1897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_get_host_dev'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_scan.c' line='1897' column='1'/>
+        <return type-id='eb572b74'/>
+      </function-decl>
+      <function-decl name='__scsi_add_device' mangled-name='__scsi_add_device' filepath='drivers/scsi/scsi_scan.c' line='1461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__scsi_add_device'>
+        <parameter type-id='a970a64c' name='shost' filepath='drivers/scsi/scsi_scan.c' line='1461' column='1'/>
+        <parameter type-id='6e160b14' name='channel' filepath='drivers/scsi/scsi_scan.c' line='1461' column='1'/>
+        <parameter type-id='6e160b14' name='id' filepath='drivers/scsi/scsi_scan.c' line='1462' column='1'/>
+        <parameter type-id='91ce1af9' name='lun' filepath='drivers/scsi/scsi_scan.c' line='1462' column='1'/>
+        <parameter type-id='eaa32e2f' name='hostdata' filepath='drivers/scsi/scsi_scan.c' line='1462' column='1'/>
+        <return type-id='eb572b74'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/scsi_sysfs.c' language='LANG_C89'>
+      <function-decl name='scsi_register_interface' mangled-name='scsi_register_interface' filepath='drivers/scsi/scsi_sysfs.c' line='1552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scsi_register_interface'>
+        <parameter type-id='ec167ceb' name='intf' filepath='drivers/scsi/scsi_sysfs.c' line='1552' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/ufs/ufshcd-pltfrm.c' language='LANG_C89'>
+      <class-decl name='ufs_dev_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='13' column='1' id='3c0943b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwm_rx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pwm_tx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hs_rx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hs_tx_gear' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx_lanes' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_lanes' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_pwr_pwm' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tx_pwr_pwm' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_pwr_hs' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_pwr_hs' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hs_rate' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='desired_working_mode' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd-pltfrm.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3c0943b2' size-in-bits='64' id='9c02cf50'/>
+      <function-decl name='ufshcd_pltfrm_init' mangled-name='ufshcd_pltfrm_init' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_init'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='389' column='1'/>
+        <parameter type-id='52ab0d0f' name='vops' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='390' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_suspend' mangled-name='ufshcd_pltfrm_suspend' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='225' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_shutdown' mangled-name='ufshcd_pltfrm_shutdown' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_shutdown'>
+        <parameter type-id='db362995' name='pdev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='264' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_suspend' mangled-name='ufshcd_pltfrm_runtime_suspend' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_suspend'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_resume' mangled-name='ufshcd_pltfrm_runtime_resume' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='250' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_runtime_idle' mangled-name='ufshcd_pltfrm_runtime_idle' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_runtime_idle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='256' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_pltfrm_resume' mangled-name='ufshcd_pltfrm_resume' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_pltfrm_resume'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='238' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_get_pwr_dev_param' mangled-name='ufshcd_get_pwr_dev_param' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_get_pwr_dev_param'>
+        <parameter type-id='9c02cf50' name='pltfrm_param' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='294' column='1'/>
+        <parameter type-id='35f4156d' name='dev_max' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='295' column='1'/>
+        <parameter type-id='35f4156d' name='agreed_pwr' filepath='drivers/scsi/ufs/ufshcd-pltfrm.c' line='296' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='8d2ce43f' size-in-bits='64' id='52ab0d0f'/>
+      <pointer-type-def type-id='4020579d' size-in-bits='64' id='35f4156d'/>
+      <class-decl name='ufs_pa_layer_attr' size-in-bits='224' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='289' column='1' id='4020579d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gear_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gear_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lane_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lane_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwr_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pwr_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_rate' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ee22abe8' const='yes' id='8d2ce43f'/>
+      <class-decl name='ufs_hba_variant_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='333' column='1' id='ee22abe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exit' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_ufs_hci_version' type-id='ae17b581' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk_scale_notify' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_clocks' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_regulators' type-id='e15aece4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hce_enable_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='link_startup_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pwr_change_notify' type-id='571aaf76' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='setup_xfer_req' type-id='a06238fa' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='setup_task_mgmt' type-id='ed89b003' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hibern8_notify' type-id='4ec7a2d9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='apply_dev_quirks' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fixup_dev_quirks' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dbg_register_dump' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='phy_initialization' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_reset' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_scaling_param' type-id='39d771f3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='program_key' type-id='53c91149' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='371' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d1d0945d' size-in-bits='64' id='30b66f41'/>
+      <pointer-type-def type-id='5cf9392d' size-in-bits='64' id='53c91149'/>
+      <pointer-type-def type-id='423ef8f4' size-in-bits='64' id='e5b0996e'/>
+      <pointer-type-def type-id='4c42814c' size-in-bits='64' id='571aaf76'/>
+      <pointer-type-def type-id='9146866a' size-in-bits='64' id='e684e5d4'/>
+      <pointer-type-def type-id='59aa7dba' size-in-bits='64' id='e15aece4'/>
+      <pointer-type-def type-id='3b5e43e5' size-in-bits='64' id='47e17209'/>
+      <pointer-type-def type-id='edae512d' size-in-bits='64' id='ae17b581'/>
+      <pointer-type-def type-id='ac28b246' size-in-bits='64' id='2e320710'/>
+      <pointer-type-def type-id='5415f247' size-in-bits='64' id='39d771f3'/>
+      <pointer-type-def type-id='7d117ac5' size-in-bits='64' id='4ec7a2d9'/>
+      <pointer-type-def type-id='b1c57c88' size-in-bits='64' id='a06238fa'/>
+      <pointer-type-def type-id='d59c0ecf' size-in-bits='64' id='ed89b003'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/scsi/ufs/ufshcd.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='96' id='3015ceb4'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='1024' id='28645bde'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='devfreq_governor' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/devfreq/governor.h' line='47' column='1' id='6d54709d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='drivers/devfreq/governor.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='drivers/devfreq/governor.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='immutable' type-id='20f5f452' visibility='default' filepath='drivers/devfreq/governor.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_target_freq' type-id='b2610cc8' visibility='default' filepath='drivers/devfreq/governor.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='event_handler' type-id='10b92604' visibility='default' filepath='drivers/devfreq/governor.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='fbc017ef' size-in-bits='512' id='3276578a'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='144' id='09617d27'>
+        <subrange length='18' type-id='7ff19f0f' id='489127f2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='4096' id='d1f32e0e'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='448' id='01f8d131'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <class-decl name='ufs_hba' size-in-bits='34048' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='582' column='1' id='bc6d8611'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmio_base' type-id='eaa32e2f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ucdl_base_addr' type-id='84caa74f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='utrdl_base_addr' type-id='1852fc77' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='utmrdl_base_addr' type-id='0c025d55' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='utrdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='utmrdl_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='host' type-id='a970a64c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cmd_queue' type-id='e7d2a5fc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sdev_ufs_device' type-id='eb572b74' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='curr_dev_pwr_mode' type-id='748f6f00' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='uic_link_state' type-id='a1b5abd2' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rpm_lvl' type-id='812ff8cb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='spm_lvl' type-id='812ff8cb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rpm_lvl_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='spm_lvl_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='pm_op_in_progress' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='ahit' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lrb' type-id='6ca6fa6d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='outstanding_tasks' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='outstanding_reqs' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='nutrs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nutmrs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ufs_version' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='vops' type-id='52ab0d0f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='vps' type-id='aec2c278' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sg_entry_size' type-id='b59d7dce' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='is_irq_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dev_ref_clk_freq' type-id='56d5992c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='quirks' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dev_quirks' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='tmf_tag_set' type-id='651086d7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='tmf_queue' type-id='e7d2a5fc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='active_uic_cmd' type-id='cdf785b8' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='uic_cmd_mutex' type-id='925167dc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='uic_async_done' type-id='389faaf7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='ufshcd_state' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='eh_flags' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='intr_mask' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='ee_ctrl_mask' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4016'>
+          <var-decl name='is_powered' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='eh_wq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='eh_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='eeh_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='errors' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='uic_error' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='saved_err' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='saved_uic_err' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='ufs_stats' type-id='e7596927' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='force_reset' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16072'>
+          <var-decl name='force_pmc' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16080'>
+          <var-decl name='silence_err_logs' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='dev_cmd' type-id='19098804' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='last_dme_cmd_tstamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='dev_info' type-id='e3428c48' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='auto_bkops_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='vreg_info' type-id='c9a4cbd1' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='clk_list_head' type-id='72f469ec' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17856'>
+          <var-decl name='wlun_dev_clr_ua' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17888'>
+          <var-decl name='req_abort_count' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='lanes_per_direction' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17952'>
+          <var-decl name='pwr_info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='max_pwr_info' type-id='9b642532' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='clk_gating' type-id='0eeb0815' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20800'>
+          <var-decl name='caps' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='devfreq' type-id='f66fa7f4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20928'>
+          <var-decl name='clk_scaling' type-id='ab4dad02' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22656'>
+          <var-decl name='is_sys_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22688'>
+          <var-decl name='urgent_bkops_lvl' type-id='462d2624' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22720'>
+          <var-decl name='is_urgent_bkops_lvl_checked' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22784'>
+          <var-decl name='clk_scaling_lock' type-id='f19fdb93' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23168'>
+          <var-decl name='desc_size' type-id='b10d66b7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23392'>
+          <var-decl name='scsi_block_reqs_cnt' type-id='49178f86' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23424'>
+          <var-decl name='bsg_dev' type-id='66e487eb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30912'>
+          <var-decl name='bsg_queue' type-id='e7d2a5fc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30976'>
+          <var-decl name='wb_buf_flush_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30984'>
+          <var-decl name='wb_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31040'>
+          <var-decl name='rpm_dev_flush_recheck_work' type-id='5ad6e0ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32128'>
+          <var-decl name='crypto_capabilities' type-id='4721c843' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32192'>
+          <var-decl name='crypto_cap_array' type-id='d43dc76d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32256'>
+          <var-decl name='crypto_cfg_register' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32320'>
+          <var-decl name='ksm' type-id='13fcfe64' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33856'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33920'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33984'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='850' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_transfer_cmd_desc' size-in-bits='8192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='459' column='1' id='f660d147'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command_upiu' type-id='d1f32e0e' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='response_upiu' type-id='d1f32e0e' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='prd_table' type-id='29c3368c' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='462' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_transfer_req_desc' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='492' column='1' id='20f0d8ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='746bbed6' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='command_desc_base_addr_lo' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='command_desc_base_addr_hi' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='response_upiu_length' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='response_upiu_offset' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='prd_table_length' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='prd_table_offset' type-id='23119536' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='507' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_desc_header' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='475' column='1' id='746bbed6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dword_0' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dword_1' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dword_2' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dword_3' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='479' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_task_req_desc' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='513' column='1' id='a73e5d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='746bbed6' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='req_header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='input_param1' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_param2' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='input_param3' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__reserved1' type-id='f41331a9' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rsp_header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='output_param1' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='output_param2' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__reserved2' type-id='3015ceb4' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='528' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_header' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='27' column='1' id='b010cb22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dword_0' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dword_1' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dword_2' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ufs_dev_pwr_mode' filepath='drivers/scsi/ufs/ufs.h' line='477' column='1' id='748f6f00'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_ACTIVE_PWR_MODE' value='1'/>
+        <enumerator name='UFS_SLEEP_PWR_MODE' value='2'/>
+        <enumerator name='UFS_POWERDOWN_PWR_MODE' value='3'/>
+      </enum-decl>
+      <enum-decl name='uic_link_state' filepath='drivers/scsi/ufs/ufshcd.h' line='119' column='1' id='a1b5abd2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UIC_LINK_OFF_STATE' value='0'/>
+        <enumerator name='UIC_LINK_ACTIVE_STATE' value='1'/>
+        <enumerator name='UIC_LINK_HIBERN8_STATE' value='2'/>
+        <enumerator name='UIC_LINK_BROKEN_STATE' value='3'/>
+      </enum-decl>
+      <enum-decl name='ufs_pm_level' filepath='drivers/scsi/ufs/ufshcd.h' line='158' column='1' id='812ff8cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_PM_LVL_0' value='0'/>
+        <enumerator name='UFS_PM_LVL_1' value='1'/>
+        <enumerator name='UFS_PM_LVL_2' value='2'/>
+        <enumerator name='UFS_PM_LVL_3' value='3'/>
+        <enumerator name='UFS_PM_LVL_4' value='4'/>
+        <enumerator name='UFS_PM_LVL_5' value='5'/>
+        <enumerator name='UFS_PM_LVL_MAX' value='6'/>
+      </enum-decl>
+      <class-decl name='ufshcd_lrb' size-in-bits='1216' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='197' column='1' id='93b4100d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utr_descriptor_ptr' type-id='1852fc77' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ucd_req_ptr' type-id='c61ee7a1' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ucd_rsp_ptr' type-id='68e72116' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ucd_prdt_ptr' type-id='696df79c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='utrd_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucd_req_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ucd_rsp_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ucd_prdt_dma_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cmd' type-id='0b8718c0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sense_buffer' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sense_bufflen' type-id='f0981eeb' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='scsi_status' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='command_type' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='task_tag' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lun' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='intr_cmd' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='issue_time_stamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compl_time_stamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='crypto_key_slot' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data_unit_num' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_abort_skip' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_req' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='72' column='1' id='f3866749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='b010cb22' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d67af9b5' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='74' column='1' id='d67af9b5'>
+        <data-member access='public'>
+          <var-decl name='sc' type-id='498490b9' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='qr' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tr' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='uc' type-id='5fc79e81' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='79' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='utp_upiu_cmd' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='61' column='1' id='498490b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp_data_transfer_len' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cdb' type-id='9396cabb' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_query' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='45' column='1' id='5fc79e81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opcode' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='idn' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='index' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='selector' type-id='8f048e17' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved_osf' type-id='84a5c3d4' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='length' type-id='84a5c3d4' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='78a133c2' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved' type-id='f41331a9' visibility='default' filepath='include/uapi/scsi/scsi_bsg_ufs.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='utp_upiu_rsp' size-in-bits='416' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='505' column='1' id='ee504570'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='b010cb22' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='0b42cb04' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='507' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='507' column='1' id='0b42cb04'>
+        <data-member access='public'>
+          <var-decl name='sr' type-id='18119fa5' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='qr' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='509' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='utp_cmd_rsp' size-in-bits='320' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='492' column='1' id='18119fa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='residual_transfer_count' type-id='78a133c2' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='30180d4b' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sense_data_len' type-id='84a5c3d4' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='sense_data' type-id='09617d27' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufshcd_sg_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='441' column='1' id='c372d726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_addr' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upper_addr' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reserved' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='445' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_hba_variant_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='333' column='1' id='ee22abe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exit' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_ufs_hci_version' type-id='ae17b581' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='clk_scale_notify' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='setup_clocks' type-id='47e17209' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup_regulators' type-id='e15aece4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hce_enable_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='link_startup_notify' type-id='e5b0996e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pwr_change_notify' type-id='571aaf76' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='setup_xfer_req' type-id='a06238fa' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='setup_task_mgmt' type-id='ed89b003' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hibern8_notify' type-id='4ec7a2d9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='apply_dev_quirks' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fixup_dev_quirks' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='e684e5d4' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dbg_register_dump' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='phy_initialization' type-id='30b66f41' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='device_reset' type-id='2e320710' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_scaling_param' type-id='39d771f3' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='program_key' type-id='53c91149' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='371' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ufs_notify_change_status' filepath='drivers/scsi/ufs/ufshcd.h' line='284' column='1' id='bbeb954c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PRE_CHANGE' value='0'/>
+        <enumerator name='POST_CHANGE' value='1'/>
+      </enum-decl>
+      <class-decl name='ufs_pa_layer_attr' size-in-bits='224' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='289' column='1' id='4020579d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gear_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gear_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lane_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lane_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pwr_rx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pwr_tx' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_rate' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uic_cmd_dme' filepath='drivers/scsi/ufs/ufshci.h' line='276' column='1' id='47e46889'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UIC_CMD_DME_GET' value='1'/>
+        <enumerator name='UIC_CMD_DME_SET' value='2'/>
+        <enumerator name='UIC_CMD_DME_PEER_GET' value='3'/>
+        <enumerator name='UIC_CMD_DME_PEER_SET' value='4'/>
+        <enumerator name='UIC_CMD_DME_POWERON' value='16'/>
+        <enumerator name='UIC_CMD_DME_POWEROFF' value='17'/>
+        <enumerator name='UIC_CMD_DME_ENABLE' value='18'/>
+        <enumerator name='UIC_CMD_DME_RESET' value='20'/>
+        <enumerator name='UIC_CMD_DME_END_PT_RST' value='21'/>
+        <enumerator name='UIC_CMD_DME_LINK_STARTUP' value='22'/>
+        <enumerator name='UIC_CMD_DME_HIBER_ENTER' value='23'/>
+        <enumerator name='UIC_CMD_DME_HIBER_EXIT' value='24'/>
+        <enumerator name='UIC_CMD_DME_TEST_MODE' value='26'/>
+      </enum-decl>
+      <enum-decl name='ufs_pm_op' filepath='drivers/scsi/ufs/ufshcd.h' line='108' column='1' id='bfc022f4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UFS_RUNTIME_PM' value='0'/>
+        <enumerator name='UFS_SYSTEM_PM' value='1'/>
+        <enumerator name='UFS_SHUTDOWN_PM' value='2'/>
+      </enum-decl>
+      <class-decl name='devfreq_dev_profile' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='95' column='1' id='c9196d18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initial_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='polling_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target' type-id='70283254' visibility='default' filepath='include/linux/devfreq.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_dev_status' type-id='676fff47' visibility='default' filepath='include/linux/devfreq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_cur_freq' type-id='0e18d3fd' visibility='default' filepath='include/linux/devfreq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit' type-id='dd787f72' visibility='default' filepath='include/linux/devfreq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='freq_table' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_dev_status' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='51' column='1' id='49266711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='busy_time' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_frequency' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ufs_crypto_cfg_entry' size-in-bits='1024' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='366' column='1' id='a722d386'>
+        <data-member access='public'>
+          <var-decl name='reg_val' type-id='28645bde' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='335c32d9' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='368' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='1024' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='368' column='1' id='335c32d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crypto_key' type-id='47ba3182' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='data_unit_size' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='crypto_cap_idx' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='reserved_1' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='config_enable' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='reserved_multi_host' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='reserved_2' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='560'>
+          <var-decl name='vsb' type-id='cf114704' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_3' type-id='01f8d131' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_hba_variant_params' size-in-bits='640' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='515' column='1' id='15d562ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='devfreq_profile' type-id='c9196d18' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ondemand_data' type-id='d21d90ad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='hba_enable_delay_us' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='wb_flush_threshold' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='519' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='devfreq_simple_ondemand_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='258' column='1' id='d21d90ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='upthreshold' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='downdifferential' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ufs_ref_clk_freq' filepath='drivers/scsi/ufs/ufs.h' line='415' column='1' id='56d5992c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REF_CLK_FREQ_19_2_MHZ' value='0'/>
+        <enumerator name='REF_CLK_FREQ_26_MHZ' value='1'/>
+        <enumerator name='REF_CLK_FREQ_38_4_MHZ' value='2'/>
+        <enumerator name='REF_CLK_FREQ_52_MHZ' value='3'/>
+        <enumerator name='REF_CLK_FREQ_INVAL' value='-1'/>
+      </enum-decl>
+      <class-decl name='uic_command' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='97' column='1' id='52999e5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='command' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='argument1' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='argument2' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='argument3' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cmd_active' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='result' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_stats' size-in-bits='11072' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='488' column='1' id='e7596927'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_intr_status' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_intr_ts' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hibern8_exit_cnt' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_hibern8_exit_tstamp' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pa_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='tl_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='dme_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='auto_hibern8_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fatal_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='link_startup_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='resume_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='suspend_err' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='dev_reset' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='host_reset' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='task_abort' type-id='19164baf' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='512' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_err_reg_hist' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='460' column='1' id='19164baf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pos' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reg' type-id='1c6311dd' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tstamp' type-id='3276578a' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='463' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_dev_cmd' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='247' column='1' id='19098804'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='e2ef9cb5' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='complete' type-id='389faaf7' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='query' type-id='913c3f48' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='251' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='dev_cmd_type' filepath='drivers/scsi/ufs/ufshcd.h' line='82' column='1' id='e2ef9cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DEV_CMD_TYPE_NOP' value='0'/>
+        <enumerator name='DEV_CMD_TYPE_QUERY' value='1'/>
+      </enum-decl>
+      <class-decl name='ufs_query' size-in-bits='448' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='235' column='1' id='913c3f48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='request' type-id='1f574743' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='descriptor' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='response' type-id='21574a69' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_query_req' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='518' column='1' id='1f574743'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='query_func' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upiu_req' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='520' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_query_res' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='528' column='1' id='21574a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='response' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='upiu_res' type-id='5fc79e81' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='530' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_dev_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='564' column='1' id='e3428c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_power_on_wp_en' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='is_lu_power_on_wp' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_lu_supported' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='wb_dedicated_lu' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wmanufacturerid' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='model' type-id='8bff8096' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wspecversion' type-id='1dc6a898' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='clk_gating_wait_us' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_ext_ufs_feature_sup' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='b_wb_buffer_type' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_wb_alloc_units' type-id='19c2251e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='b_rpm_dev_flush_capable' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='b_presrv_uspc_en' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='581' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_vreg_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='557' column='1' id='c9a4cbd1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vcc' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vccq' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vccq2' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdd_hba' type-id='ae670bfa' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='561' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_vreg' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='548' column='1' id='d6b2bd0c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='850c13f6' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='min_uV' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_uV' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_uA' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufs.h' line='554' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_pwr_mode_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='299' column='1' id='9b642532'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_valid' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_clk_gating' size-in-bits='2368' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='398' column='1' id='0eeb0815'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gate_work' type-id='5ad6e0ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ungate_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='state' type-id='8bfed557' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_ms' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='delay_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='enable_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='is_enabled' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='active_reqs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='clk_gating_workq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='410' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='clk_gating_state' filepath='drivers/scsi/ufs/ufshcd.h' line='375' column='1' id='8bfed557'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CLKS_OFF' value='0'/>
+        <enumerator name='CLKS_ON' value='1'/>
+        <enumerator name='REQ_CLKS_OFF' value='2'/>
+        <enumerator name='REQ_CLKS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='devfreq' size-in-bits='16000' is-struct='yes' visibility='default' filepath='include/linux/devfreq.h' line='148' column='1' id='f80c018e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/devfreq.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/devfreq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/devfreq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='profile' type-id='cba10b6e' visibility='default' filepath='include/linux/devfreq.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='governor' type-id='f627870a' visibility='default' filepath='include/linux/devfreq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='governor_name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/devfreq.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/devfreq.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/devfreq.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='previous_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='last_status' type-id='49266711' visibility='default' filepath='include/linux/devfreq.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/devfreq.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='scaling_min_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='scaling_max_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='stop_polling' type-id='b50a4934' visibility='default' filepath='include/linux/devfreq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='suspend_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='resume_freq' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='suspend_count' type-id='49178f86' visibility='default' filepath='include/linux/devfreq.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10272'>
+          <var-decl name='total_trans' type-id='f0981eeb' visibility='default' filepath='include/linux/devfreq.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='trans_table' type-id='807869d3' visibility='default' filepath='include/linux/devfreq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='time_in_state' type-id='1d2c2b85' visibility='default' filepath='include/linux/devfreq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='last_stat_updated' type-id='7359adad' visibility='default' filepath='include/linux/devfreq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='transition_notifier_list' type-id='ffc4a47a' visibility='default' filepath='include/linux/devfreq.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_clk_scaling' size-in-bits='1728' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='436' column='1' id='ab4dad02'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active_reqs' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tot_busy_t' type-id='7359adad' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='window_start_t' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='busy_start_t' type-id='fbc017ef' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='enable_attr' type-id='dbf3947c' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='saved_pwr_info' type-id='ba896956' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='workq' type-id='242e3d19' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume_work' type-id='ef9025d0' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='is_allowed' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='is_busy_started' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='is_suspended' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='450' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ufs_saved_pwr_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='413' column='1' id='ba896956'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='4020579d' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='is_valid' type-id='b50a4934' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='415' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='bkops_status' filepath='drivers/scsi/ufs/ufs.h' line='393' column='1' id='462d2624'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BKOPS_STATUS_NO_OP' value='0'/>
+        <enumerator name='BKOPS_STATUS_NON_CRITICAL' value='1'/>
+        <enumerator name='BKOPS_STATUS_PERF_IMPACT' value='2'/>
+        <enumerator name='BKOPS_STATUS_CRITICAL' value='3'/>
+        <enumerator name='BKOPS_STATUS_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='ufs_desc_size' size-in-bits='224' is-struct='yes' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='254' column='1' id='b10d66b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pwr_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='geom_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='interc_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='unit_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='conf_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hlth_desc' type-id='95e97e5e' visibility='default' filepath='drivers/scsi/ufs/ufshcd.h' line='261' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ufs_crypto_capabilities' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='327' column='1' id='4721c843'>
+        <data-member access='public'>
+          <var-decl name='reg_val' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='e15f514f' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='329' 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='drivers/scsi/ufs/ufshci.h' line='329' column='1' id='e15f514f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_crypto_cap' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='config_count' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='config_array_ptr' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='333' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='ufs_crypto_cap_entry' size-in-bits='32' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='353' column='1' id='f81b67f4'>
+        <data-member access='public'>
+          <var-decl name='reg_val' type-id='2f162548' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7db2e6af' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='355' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='355' column='1' id='7db2e6af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='algorithm_id' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sdus_mask' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_size' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reserved' type-id='f9b06939' visibility='default' filepath='drivers/scsi/ufs/ufshci.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='desc_idn' filepath='drivers/scsi/ufs/ufs.h' line='186' column='1' id='32c9d5cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='QUERY_DESC_IDN_DEVICE' value='0'/>
+        <enumerator name='QUERY_DESC_IDN_CONFIGURATION' value='1'/>
+        <enumerator name='QUERY_DESC_IDN_UNIT' value='2'/>
+        <enumerator name='QUERY_DESC_IDN_RFU_0' value='3'/>
+        <enumerator name='QUERY_DESC_IDN_INTERCONNECT' value='4'/>
+        <enumerator name='QUERY_DESC_IDN_STRING' value='5'/>
+        <enumerator name='QUERY_DESC_IDN_RFU_1' value='6'/>
+        <enumerator name='QUERY_DESC_IDN_GEOMETRY' value='7'/>
+        <enumerator name='QUERY_DESC_IDN_POWER' value='8'/>
+        <enumerator name='QUERY_DESC_IDN_HEALTH' value='9'/>
+        <enumerator name='QUERY_DESC_IDN_MAX' value='10'/>
+      </enum-decl>
+      <qualified-type-def type-id='6d54709d' const='yes' id='e5e56b24'/>
+      <pointer-type-def type-id='e5e56b24' size-in-bits='64' id='f627870a'/>
+      <qualified-type-def type-id='a722d386' const='yes' id='02ac86a6'/>
+      <pointer-type-def type-id='02ac86a6' size-in-bits='64' id='c197ce64'/>
+      <qualified-type-def type-id='ee22abe8' const='yes' id='8d2ce43f'/>
+      <pointer-type-def type-id='8d2ce43f' size-in-bits='64' id='52ab0d0f'/>
+      <pointer-type-def type-id='f80c018e' size-in-bits='64' id='f66fa7f4'/>
+      <pointer-type-def type-id='c9196d18' size-in-bits='64' id='cba10b6e'/>
+      <pointer-type-def type-id='49266711' size-in-bits='64' id='4f1d3179'/>
+      <pointer-type-def type-id='2873dcbb' size-in-bits='64' id='676fff47'/>
+      <pointer-type-def type-id='4e3cc2a9' size-in-bits='64' id='0e18d3fd'/>
+      <pointer-type-def type-id='6788fb9a' size-in-bits='64' id='70283254'/>
+      <pointer-type-def type-id='d1d0945d' size-in-bits='64' id='30b66f41'/>
+      <pointer-type-def type-id='5cf9392d' size-in-bits='64' id='53c91149'/>
+      <pointer-type-def type-id='423ef8f4' size-in-bits='64' id='e5b0996e'/>
+      <pointer-type-def type-id='4c42814c' size-in-bits='64' id='571aaf76'/>
+      <pointer-type-def type-id='9146866a' size-in-bits='64' id='e684e5d4'/>
+      <pointer-type-def type-id='59aa7dba' size-in-bits='64' id='e15aece4'/>
+      <pointer-type-def type-id='3b5e43e5' size-in-bits='64' id='47e17209'/>
+      <pointer-type-def type-id='edae512d' size-in-bits='64' id='ae17b581'/>
+      <pointer-type-def type-id='f81b67f4' size-in-bits='64' id='d43dc76d'/>
+      <pointer-type-def type-id='bc6d8611' size-in-bits='64' id='442b8d89'/>
+      <pointer-type-def type-id='15d562ba' size-in-bits='64' id='aec2c278'/>
+      <pointer-type-def type-id='4020579d' size-in-bits='64' id='35f4156d'/>
+      <pointer-type-def type-id='d6b2bd0c' size-in-bits='64' id='ae670bfa'/>
+      <pointer-type-def type-id='93b4100d' size-in-bits='64' id='6ca6fa6d'/>
+      <pointer-type-def type-id='c372d726' size-in-bits='64' id='696df79c'/>
+      <pointer-type-def type-id='52999e5a' size-in-bits='64' id='cdf785b8'/>
+      <pointer-type-def type-id='a73e5d15' size-in-bits='64' id='0c025d55'/>
+      <pointer-type-def type-id='f660d147' size-in-bits='64' id='84caa74f'/>
+      <pointer-type-def type-id='20f0d8ff' size-in-bits='64' id='1852fc77'/>
+      <pointer-type-def type-id='f3866749' size-in-bits='64' id='c61ee7a1'/>
+      <pointer-type-def type-id='ee504570' size-in-bits='64' id='68e72116'/>
+      <pointer-type-def type-id='ac28b246' size-in-bits='64' id='2e320710'/>
+      <pointer-type-def type-id='5415f247' size-in-bits='64' id='39d771f3'/>
+      <pointer-type-def type-id='7d117ac5' size-in-bits='64' id='4ec7a2d9'/>
+      <pointer-type-def type-id='b1c57c88' size-in-bits='64' id='a06238fa'/>
+      <pointer-type-def type-id='d59c0ecf' size-in-bits='64' id='ed89b003'/>
+      <function-decl name='ufshcd_dme_set_attr' mangled-name='ufshcd_dme_set_attr' filepath='drivers/scsi/ufs/ufshcd.c' line='3783' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dme_set_attr'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='3783' column='1'/>
+        <parameter type-id='19c2251e' name='attr_sel' filepath='drivers/scsi/ufs/ufshcd.c' line='3783' column='1'/>
+        <parameter type-id='f9b06939' name='attr_set' filepath='drivers/scsi/ufs/ufshcd.c' line='3784' column='1'/>
+        <parameter type-id='19c2251e' name='mib_val' filepath='drivers/scsi/ufs/ufshcd.c' line='3784' column='1'/>
+        <parameter type-id='f9b06939' name='peer' filepath='drivers/scsi/ufs/ufshcd.c' line='3784' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_dme_get_attr' mangled-name='ufshcd_dme_get_attr' filepath='drivers/scsi/ufs/ufshcd.c' line='3827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dme_get_attr'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='3827' column='1'/>
+        <parameter type-id='19c2251e' name='attr_sel' filepath='drivers/scsi/ufs/ufshcd.c' line='3827' column='1'/>
+        <parameter type-id='f9409001' name='mib_val' filepath='drivers/scsi/ufs/ufshcd.c' line='3828' column='1'/>
+        <parameter type-id='f9b06939' name='peer' filepath='drivers/scsi/ufs/ufshcd.c' line='3828' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_remove' mangled-name='ufshcd_remove' filepath='drivers/scsi/ufs/ufshcd.c' line='9173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_remove'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='9173' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ufshcd_uic_hibern8_exit' mangled-name='ufshcd_uic_hibern8_exit' filepath='drivers/scsi/ufs/ufshcd.c' line='4070' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_uic_hibern8_exit'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='4070' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_uic_hibern8_enter' mangled-name='ufshcd_uic_hibern8_enter' filepath='drivers/scsi/ufs/ufshcd.c' line='4046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_uic_hibern8_enter'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='4046' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_read_desc_param' mangled-name='ufshcd_read_desc_param' filepath='drivers/scsi/ufs/ufshcd.c' line='3265' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_read_desc_param'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='3265' column='1'/>
+        <parameter type-id='32c9d5cb' name='desc_id' filepath='drivers/scsi/ufs/ufshcd.c' line='3266' column='1'/>
+        <parameter type-id='95e97e5e' name='desc_index' filepath='drivers/scsi/ufs/ufshcd.c' line='3267' column='1'/>
+        <parameter type-id='f9b06939' name='param_offset' filepath='drivers/scsi/ufs/ufshcd.c' line='3268' column='1'/>
+        <parameter type-id='8bff8096' name='param_read_buf' filepath='drivers/scsi/ufs/ufshcd.c' line='3269' column='1'/>
+        <parameter type-id='f9b06939' name='param_size' filepath='drivers/scsi/ufs/ufshcd.c' line='3270' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ufshcd_get_local_unipro_ver' mangled-name='ufshcd_get_local_unipro_ver' filepath='drivers/scsi/ufs/ufshcd.c' line='918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_get_local_unipro_ver'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='918' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='ufshcd_dump_regs' mangled-name='ufshcd_dump_regs' filepath='drivers/scsi/ufs/ufshcd.c' line='127' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ufshcd_dump_regs'>
+        <parameter type-id='442b8d89' name='hba' filepath='drivers/scsi/ufs/ufshcd.c' line='127' column='1'/>
+        <parameter type-id='b59d7dce' name='offset' filepath='drivers/scsi/ufs/ufshcd.c' line='127' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/scsi/ufs/ufshcd.c' line='127' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='drivers/scsi/ufs/ufshcd.c' line='128' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2873dcbb'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='4f1d3179'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e3cc2a9'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6788fb9a'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d1d0945d'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5cf9392d'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='c197ce64'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='423ef8f4'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c42814c'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bbeb954c'/>
+        <parameter type-id='35f4156d'/>
+        <parameter type-id='35f4156d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9146866a'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='bfc022f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59aa7dba'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b5e43e5'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='edae512d'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac28b246'>
+        <parameter type-id='442b8d89'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5415f247'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='cba10b6e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d117ac5'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='47e46889'/>
+        <parameter type-id='bbeb954c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1c57c88'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d59c0ecf'>
+        <parameter type-id='442b8d89'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/soc/qcom/smem_state.c' language='LANG_C89'>
+      <class-decl name='qcom_smem_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='25' column='1' id='0c2997ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='400fb07b' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='orphan' type-id='b50a4934' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='3419b67d' visibility='default' filepath='drivers/soc/qcom/smem_state.c' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='qcom_smem_state_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/soc/qcom/smem_state.h' line='10' column='1' id='3419b67d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='update_bits' type-id='2e5880fb' visibility='default' filepath='include/linux/soc/qcom/smem_state.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3419b67d' const='yes' id='b121efca'/>
+      <pointer-type-def type-id='b121efca' size-in-bits='64' id='b86c9da0'/>
+      <pointer-type-def type-id='ea5fdc37' size-in-bits='64' id='2e5880fb'/>
+      <pointer-type-def type-id='0c2997ce' size-in-bits='64' id='01df4674'/>
+      <function-decl name='qcom_smem_state_update_bits' mangled-name='qcom_smem_state_update_bits' filepath='drivers/soc/qcom/smem_state.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_update_bits'>
+        <parameter type-id='01df4674' name='state' filepath='drivers/soc/qcom/smem_state.c' line='45' column='1'/>
+        <parameter type-id='19c2251e' name='mask' filepath='drivers/soc/qcom/smem_state.c' line='46' column='1'/>
+        <parameter type-id='19c2251e' name='value' filepath='drivers/soc/qcom/smem_state.c' line='47' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_unregister' mangled-name='qcom_smem_state_unregister' filepath='drivers/soc/qcom/smem_state.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_unregister'>
+        <parameter type-id='01df4674' name='state' filepath='drivers/soc/qcom/smem_state.c' line='188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_register' mangled-name='qcom_smem_state_register' filepath='drivers/soc/qcom/smem_state.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_register'>
+        <parameter type-id='9a537bbe' name='of_node' filepath='drivers/soc/qcom/smem_state.c' line='160' column='1'/>
+        <parameter type-id='b86c9da0' name='ops' filepath='drivers/soc/qcom/smem_state.c' line='161' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/soc/qcom/smem_state.c' line='162' column='1'/>
+        <return type-id='01df4674'/>
+      </function-decl>
+      <function-decl name='qcom_smem_state_get' mangled-name='qcom_smem_state_get' filepath='drivers/soc/qcom/smem_state.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qcom_smem_state_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/soc/qcom/smem_state.c' line='88' column='1'/>
+        <parameter type-id='80f4b756' name='con_id' filepath='drivers/soc/qcom/smem_state.c' line='89' column='1'/>
+        <parameter type-id='807869d3' name='bit' filepath='drivers/soc/qcom/smem_state.c' line='90' column='1'/>
+        <return type-id='01df4674'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ea5fdc37'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/spi/spi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1088' id='96b80745'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='spi_controller' size-in-bits='13632' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='430' column='1' id='db1b9d9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='bus_num' type-id='9b7e9486' visibility='default' filepath='include/linux/spi/spi.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7632'>
+          <var-decl name='num_chipselect' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='dma_alignment' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode_bits' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='bits_per_word_mask' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='min_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7824'>
+          <var-decl name='devm_allocated' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7832'>
+          <var-decl name='slave' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='max_transfer_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='max_message_size' type-id='fc096b90' visibility='default' filepath='include/linux/spi/spi.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='bus_lock_spinlock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='bus_lock_mutex' type-id='925167dc' visibility='default' filepath='include/linux/spi/spi.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='bus_lock_flag' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='setup' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='set_cs_timing' type-id='fd508c3f' visibility='default' filepath='include/linux/spi/spi.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='transfer' type-id='08bd785c' visibility='default' filepath='include/linux/spi/spi.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='cleanup' type-id='c965bc43' visibility='default' filepath='include/linux/spi/spi.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='can_dma' type-id='b7f92ac9' visibility='default' filepath='include/linux/spi/spi.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='queued' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='kworker' type-id='62968721' visibility='default' filepath='include/linux/spi/spi.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='kworker_task' type-id='f23e2572' visibility='default' filepath='include/linux/spi/spi.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='pump_messages' type-id='ac165296' visibility='default' filepath='include/linux/spi/spi.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='cur_msg' type-id='bb7889ed' visibility='default' filepath='include/linux/spi/spi.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='idling' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10120'>
+          <var-decl name='busy' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10128'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10136'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10144'>
+          <var-decl name='auto_runtime_pm' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10152'>
+          <var-decl name='cur_msg_prepared' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10160'>
+          <var-decl name='cur_msg_mapped' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='xfer_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/spi/spi.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='max_dma_len' type-id='b59d7dce' visibility='default' filepath='include/linux/spi/spi.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='prepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='transfer_one_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='unprepare_transfer_hardware' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='prepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='580' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='unprepare_message' type-id='424a6df6' visibility='default' filepath='include/linux/spi/spi.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='slave_abort' type-id='3de177aa' visibility='default' filepath='include/linux/spi/spi.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='set_cs' type-id='54a1bec6' visibility='default' filepath='include/linux/spi/spi.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='transfer_one' type-id='6495fd5b' visibility='default' filepath='include/linux/spi/spi.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='handle_err' type-id='72fa5619' visibility='default' filepath='include/linux/spi/spi.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='mem_ops' type-id='e93ac78c' visibility='default' filepath='include/linux/spi/spi.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='cs_gpios' type-id='7292109c' visibility='default' filepath='include/linux/spi/spi.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='cs_gpiods' type-id='35c9579e' visibility='default' filepath='include/linux/spi/spi.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='use_gpio_descriptors' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='dma_tx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='dma_rx' type-id='27f3f5d8' visibility='default' filepath='include/linux/spi/spi.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='dummy_rx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='dummy_tx' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='fw_translate_cs' type-id='aaa6c630' visibility='default' filepath='include/linux/spi/spi.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_device' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='141' column='1' id='72c0e160'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spi/spi.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='controller' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='master' type-id='f22e4524' visibility='default' filepath='include/linux/spi/spi.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='max_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7648'>
+          <var-decl name='chip_select' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7656'>
+          <var-decl name='bits_per_word' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7664'>
+          <var-decl name='rt' type-id='b50a4934' visibility='default' filepath='include/linux/spi/spi.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='controller_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='controller_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='modalias' type-id='16dc656a' visibility='default' filepath='include/linux/spi/spi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='driver_override' type-id='80f4b756' visibility='default' filepath='include/linux/spi/spi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='cs_gpio' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='cs_gpiod' type-id='26760480' visibility='default' filepath='include/linux/spi/spi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='word_delay_usecs' type-id='b96825af' visibility='default' filepath='include/linux/spi/spi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='statistics' type-id='bf41d149' visibility='default' filepath='include/linux/spi/spi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_statistics' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='56' column='1' id='bf41d149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/spi/spi.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='messages' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='transfers' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='errors' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timedout' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='spi_sync' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='spi_sync_immediate' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='spi_async' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bytes' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bytes_rx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bytes_tx' type-id='3a47d82b' visibility='default' filepath='include/linux/spi/spi.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='transfer_bytes_histo' type-id='96b80745' visibility='default' filepath='include/linux/spi/spi.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='transfers_split_maxsize' type-id='7359adad' visibility='default' filepath='include/linux/spi/spi.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_message' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='911' column='1' id='4dd90c3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transfers' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spi' type-id='e90f4666' visibility='default' filepath='include/linux/spi/spi.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='complete' type-id='b7f9d8e6' visibility='default' filepath='include/linux/spi/spi.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='frame_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='actual_length' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/spi/spi.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='queue' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='state' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='resources' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='946' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_transfer' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='842' column='1' id='9b7f1a95'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/spi/spi.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/spi/spi.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_sg' type-id='c59e4f4c' visibility='default' filepath='include/linux/spi/spi.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_sg' type-id='c59e4f4c' visibility='default' filepath='include/linux/spi/spi.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cs_change' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='tx_nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='rx_nbits' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='bits_per_word' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='word_delay_usecs' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='delay_usecs' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='cs_change_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cs_change_delay_unit' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='word_delay' type-id='1dc6a898' visibility='default' filepath='include/linux/spi/spi.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='effective_speed_hz' type-id='19c2251e' visibility='default' filepath='include/linux/spi/spi.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='transfer_list' type-id='72f469ec' visibility='default' filepath='include/linux/spi/spi.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='878' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_controller_mem_ops' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='252' column='1' id='40c992e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adjust_op_size' type-id='c1205b1f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supports_op' type-id='3d444e9a' visibility='default' filepath='include/linux/spi/spi-mem.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exec_op' type-id='80f1f854' visibility='default' filepath='include/linux/spi/spi-mem.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='149deb03' visibility='default' filepath='include/linux/spi/spi-mem.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dirmap_create' type-id='dfa456d5' visibility='default' filepath='include/linux/spi/spi-mem.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dirmap_destroy' type-id='12e56aa0' visibility='default' filepath='include/linux/spi/spi-mem.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dirmap_read' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dirmap_write' type-id='79b4ee7f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='263' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_mem' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='182' column='1' id='f8eaf96b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spi' type-id='e90f4666' visibility='default' filepath='include/linux/spi/spi-mem.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drvpriv' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/spi/spi-mem.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_mem_op' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='91' column='1' id='8f68aa3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='84f00e1d' visibility='default' filepath='include/linux/spi/spi-mem.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='1550533b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dummy' type-id='f3823a84' visibility='default' filepath='include/linux/spi/spi-mem.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='aaf63164' visibility='default' filepath='include/linux/spi/spi-mem.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='92' column='1' id='84f00e1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='opcode' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='97' column='1' id='1550533b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nbytes' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='103' column='1' id='f3823a84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nbytes' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='105' 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/linux/spi/spi-mem.h' line='108' column='1' id='aaf63164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buswidth' type-id='f9b06939' visibility='default' filepath='include/linux/spi/spi-mem.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dir' type-id='af2d0d95' visibility='default' filepath='include/linux/spi/spi-mem.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nbytes' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi-mem.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='ed606d8b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='spi_mem_data_dir' filepath='include/linux/spi/spi-mem.h' line='64' column='1' id='af2d0d95'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SPI_MEM_NO_DATA' value='0'/>
+        <enumerator name='SPI_MEM_DATA_IN' value='1'/>
+        <enumerator name='SPI_MEM_DATA_OUT' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='112' column='1' id='ed606d8b'>
+        <data-member access='public'>
+          <var-decl name='in' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='out' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='114' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='spi_mem_dirmap_desc' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='163' column='1' id='8df2bc75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem' type-id='33dc3b1b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='bec3f688' visibility='default' filepath='include/linux/spi/spi-mem.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nodirmap' type-id='f0981eeb' visibility='default' filepath='include/linux/spi/spi-mem.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/spi/spi-mem.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_mem_dirmap_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/spi/spi-mem.h' line='140' column='1' id='bec3f688'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='op_tmpl' type-id='8f68aa3b' visibility='default' filepath='include/linux/spi/spi-mem.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='length' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi-mem.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_driver' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/spi/spi.h' line='263' column='1' id='29290a00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id_table' type-id='07695d8b' visibility='default' filepath='include/linux/spi/spi.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='4f312040' visibility='default' filepath='include/linux/spi/spi.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='shutdown' type-id='c965bc43' visibility='default' filepath='include/linux/spi/spi.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/spi/spi.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spi/spi.h' line='270' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spi_device_id' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/mod_devicetable.h' line='492' column='1' id='e2d49ab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/linux/mod_devicetable.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='driver_data' type-id='0791d6c8' visibility='default' filepath='include/linux/mod_devicetable.h' line='494' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='1c210187' size-in-bits='64' id='149deb03'/>
+      <qualified-type-def type-id='40c992e3' const='yes' id='68e801ee'/>
+      <pointer-type-def type-id='68e801ee' size-in-bits='64' id='e93ac78c'/>
+      <qualified-type-def type-id='e2d49ab8' const='yes' id='41588f03'/>
+      <pointer-type-def type-id='41588f03' size-in-bits='64' id='07695d8b'/>
+      <qualified-type-def type-id='8f68aa3b' const='yes' id='2ef05706'/>
+      <pointer-type-def type-id='2ef05706' size-in-bits='64' id='10593a44'/>
+      <pointer-type-def type-id='26760480' size-in-bits='64' id='35c9579e'/>
+      <pointer-type-def type-id='d96066b0' size-in-bits='64' id='3de177aa'/>
+      <pointer-type-def type-id='006d72ff' size-in-bits='64' id='6495fd5b'/>
+      <pointer-type-def type-id='4afdce44' size-in-bits='64' id='424a6df6'/>
+      <pointer-type-def type-id='01e1f26e' size-in-bits='64' id='aaa6c630'/>
+      <pointer-type-def type-id='fb73ecde' size-in-bits='64' id='4f312040'/>
+      <pointer-type-def type-id='d06fe862' size-in-bits='64' id='08bd785c'/>
+      <pointer-type-def type-id='96fe8392' size-in-bits='64' id='80f1f854'/>
+      <pointer-type-def type-id='e2270bc3' size-in-bits='64' id='c1205b1f'/>
+      <pointer-type-def type-id='78c92961' size-in-bits='64' id='dfa456d5'/>
+      <pointer-type-def type-id='db1b9d9e' size-in-bits='64' id='f22e4524'/>
+      <pointer-type-def type-id='72c0e160' size-in-bits='64' id='e90f4666'/>
+      <pointer-type-def type-id='29290a00' size-in-bits='64' id='d9c194a6'/>
+      <pointer-type-def type-id='f8eaf96b' size-in-bits='64' id='33dc3b1b'/>
+      <pointer-type-def type-id='8df2bc75' size-in-bits='64' id='4f4f2d55'/>
+      <pointer-type-def type-id='8f68aa3b' size-in-bits='64' id='1cf47bfb'/>
+      <pointer-type-def type-id='4dd90c3d' size-in-bits='64' id='bb7889ed'/>
+      <pointer-type-def type-id='9b7f1a95' size-in-bits='64' id='7c11f655'/>
+      <pointer-type-def type-id='579042ad' size-in-bits='64' id='b7f92ac9'/>
+      <pointer-type-def type-id='7983eff8' size-in-bits='64' id='3d444e9a'/>
+      <pointer-type-def type-id='50f7c736' size-in-bits='64' id='fc096b90'/>
+      <pointer-type-def type-id='5460fbd3' size-in-bits='64' id='79b4ee7f'/>
+      <pointer-type-def type-id='0c71d025' size-in-bits='64' id='72fa5619'/>
+      <pointer-type-def type-id='3243417f' size-in-bits='64' id='c965bc43'/>
+      <pointer-type-def type-id='9ea75344' size-in-bits='64' id='54a1bec6'/>
+      <pointer-type-def type-id='c52ef7cb' size-in-bits='64' id='fd508c3f'/>
+      <pointer-type-def type-id='262d57ae' size-in-bits='64' id='12e56aa0'/>
+      <var-decl name='spi_bus_type' type-id='b31bfc8a' mangled-name='spi_bus_type' visibility='default' filepath='drivers/spi/spi.c' line='373' column='1' elf-symbol-id='spi_bus_type'/>
+      <function-decl name='spi_register_controller' mangled-name='spi_register_controller' filepath='drivers/spi/spi.c' line='2451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_register_controller'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2451' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_sync' mangled-name='spi_sync' filepath='drivers/spi/spi.c' line='3593' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_sync'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='3593' column='1'/>
+        <parameter type-id='bb7889ed' name='message' filepath='drivers/spi/spi.c' line='3593' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_unregister_device' mangled-name='spi_unregister_device' filepath='drivers/spi/spi.c' line='706' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_unregister_device'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='706' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_unregister_controller' mangled-name='spi_unregister_controller' filepath='drivers/spi/spi.c' line='2649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_unregister_controller'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2649' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_sync_locked' mangled-name='spi_sync_locked' filepath='drivers/spi/spi.c' line='3621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_sync_locked'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='3621' column='1'/>
+        <parameter type-id='bb7889ed' name='message' filepath='drivers/spi/spi.c' line='3621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_finalize_current_message' mangled-name='spi_finalize_current_message' filepath='drivers/spi/spi.c' line='1521' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_finalize_current_message'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1521' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_setup' mangled-name='spi_setup' filepath='drivers/spi/spi.c' line='3118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_setup'>
+        <parameter type-id='e90f4666' name='spi' filepath='drivers/spi/spi.c' line='3118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_get_next_queued_message' mangled-name='spi_get_next_queued_message' filepath='drivers/spi/spi.c' line='1499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_get_next_queued_message'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1499' column='1'/>
+        <return type-id='bb7889ed'/>
+      </function-decl>
+      <function-decl name='spi_finalize_current_transfer' mangled-name='spi_finalize_current_transfer' filepath='drivers/spi/spi.c' line='1264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_finalize_current_transfer'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='1264' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spi_controller_suspend' mangled-name='spi_controller_suspend' filepath='drivers/spi/spi.c' line='2691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_controller_suspend'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2691' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_controller_resume' mangled-name='spi_controller_resume' filepath='drivers/spi/spi.c' line='2707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_controller_resume'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2707' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_busnum_to_master' mangled-name='spi_busnum_to_master' filepath='drivers/spi/spi.c' line='2743' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_busnum_to_master'>
+        <parameter type-id='1dc6a898' name='bus_num' filepath='drivers/spi/spi.c' line='2743' column='1'/>
+        <return type-id='f22e4524'/>
+      </function-decl>
+      <function-decl name='spi_bus_unlock' mangled-name='spi_bus_unlock' filepath='drivers/spi/spi.c' line='3671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_bus_unlock'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='3671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spi_bus_lock' mangled-name='spi_bus_lock' filepath='drivers/spi/spi.c' line='3642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spi_bus_lock'>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='3642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_spi_register_controller' mangled-name='devm_spi_register_controller' filepath='drivers/spi/spi.c' line='2609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_spi_register_controller'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/spi/spi.c' line='2609' column='1'/>
+        <parameter type-id='f22e4524' name='ctlr' filepath='drivers/spi/spi.c' line='2610' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__spi_register_driver' mangled-name='__spi_register_driver' filepath='drivers/spi/spi.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spi_register_driver'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/spi/spi.c' line='440' column='1'/>
+        <parameter type-id='d9c194a6' name='sdrv' filepath='drivers/spi/spi.c' line='440' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__spi_alloc_controller' mangled-name='__spi_alloc_controller' filepath='drivers/spi/spi.c' line='2239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spi_alloc_controller'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/spi/spi.c' line='2239' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/spi/spi.c' line='2240' column='1'/>
+        <parameter type-id='b50a4934' name='slave' filepath='drivers/spi/spi.c' line='2240' column='1'/>
+        <return type-id='f22e4524'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1c210187'>
+        <parameter type-id='33dc3b1b'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d96066b0'>
+        <parameter type-id='f22e4524' name='ctlr'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='006d72ff'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='7c11f655'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4afdce44'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01e1f26e'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb73ecde'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d06fe862'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96fe8392'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='10593a44'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2270bc3'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='1cf47bfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78c92961'>
+        <parameter type-id='4f4f2d55'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='579042ad'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='7c11f655'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7983eff8'>
+        <parameter type-id='33dc3b1b'/>
+        <parameter type-id='10593a44'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50f7c736'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5460fbd3'>
+        <parameter type-id='4f4f2d55'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c71d025'>
+        <parameter type-id='f22e4524'/>
+        <parameter type-id='bb7889ed'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3243417f'>
+        <parameter type-id='e90f4666'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9ea75344'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c52ef7cb'>
+        <parameter type-id='e90f4666'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='262d57ae'>
+        <parameter type-id='4f4f2d55'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/spmi/spmi.c' language='LANG_C89'>
+      <class-decl name='spmi_device' size-in-bits='7616' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='40' column='1' id='a659afcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spmi.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='ctrl' type-id='d5cbf711' visibility='default' filepath='include/linux/spmi.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='usid' type-id='f9b06939' visibility='default' filepath='include/linux/spmi.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spmi_controller' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='81' column='1' id='0d22ecf9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/spmi.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='nr' type-id='f0981eeb' visibility='default' filepath='include/linux/spmi.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='cmd' type-id='a93a5fe1' visibility='default' filepath='include/linux/spmi.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='read_cmd' type-id='e12cb9fe' visibility='default' filepath='include/linux/spmi.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='write_cmd' type-id='4496b625' visibility='default' filepath='include/linux/spmi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spmi.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='spmi_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/spmi.h' line='139' column='1' id='94c01877'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/spmi.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='probe' type-id='ef014987' visibility='default' filepath='include/linux/spmi.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='remove' type-id='f29648fe' visibility='default' filepath='include/linux/spmi.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/spmi.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='02bc074d' size-in-bits='64' id='a93a5fe1'/>
+      <pointer-type-def type-id='6430ea09' size-in-bits='64' id='4496b625'/>
+      <pointer-type-def type-id='6a251384' size-in-bits='64' id='e12cb9fe'/>
+      <pointer-type-def type-id='5df6ba5b' size-in-bits='64' id='ef014987'/>
+      <pointer-type-def type-id='0d22ecf9' size-in-bits='64' id='d5cbf711'/>
+      <pointer-type-def type-id='a659afcb' size-in-bits='64' id='893447fb'/>
+      <pointer-type-def type-id='94c01877' size-in-bits='64' id='34066f8f'/>
+      <pointer-type-def type-id='893b3284' size-in-bits='64' id='f29648fe'/>
+      <function-decl name='spmi_register_zero_write' mangled-name='spmi_register_zero_write' filepath='drivers/spmi/spmi.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_zero_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='221' column='1'/>
+        <parameter type-id='f9b06939' name='data' filepath='drivers/spmi/spmi.c' line='221' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_register_write' mangled-name='spmi_register_write' filepath='drivers/spmi/spmi.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <parameter type-id='f9b06939' name='data' filepath='drivers/spmi/spmi.c' line='203' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_register_read' mangled-name='spmi_register_read' filepath='drivers/spmi/spmi.c' line='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_register_read'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_writel' mangled-name='spmi_ext_register_writel' filepath='drivers/spmi/spmi.c' line='260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_writel'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='1dc6a898' name='addr' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='drivers/spmi/spmi.c' line='260' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='261' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_write' mangled-name='spmi_ext_register_write' filepath='drivers/spmi/spmi.c' line='238' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_write'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='drivers/spmi/spmi.c' line='238' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_readl' mangled-name='spmi_ext_register_readl' filepath='drivers/spmi/spmi.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_readl'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='1dc6a898' name='addr' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='183' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_ext_register_read' mangled-name='spmi_ext_register_read' filepath='drivers/spmi/spmi.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_ext_register_read'>
+        <parameter type-id='893447fb' name='sdev' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='f9b06939' name='addr' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='8bff8096' name='buf' filepath='drivers/spmi/spmi.c' line='161' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/spmi/spmi.c' line='162' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='spmi_controller_remove' mangled-name='spmi_controller_remove' filepath='drivers/spmi/spmi.c' line='546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_remove'>
+        <parameter type-id='d5cbf711' name='ctrl' filepath='drivers/spmi/spmi.c' line='546' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='spmi_controller_alloc' mangled-name='spmi_controller_alloc' filepath='drivers/spmi/spmi.c' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_alloc'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/spmi/spmi.c' line='413' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/spmi/spmi.c' line='414' column='1'/>
+        <return type-id='d5cbf711'/>
+      </function-decl>
+      <function-decl name='spmi_controller_add' mangled-name='spmi_controller_add' filepath='drivers/spmi/spmi.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='spmi_controller_add'>
+        <parameter type-id='d5cbf711' name='ctrl' filepath='drivers/spmi/spmi.c' line='508' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__spmi_driver_register' mangled-name='__spmi_driver_register' filepath='drivers/spmi/spmi.c' line='566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__spmi_driver_register'>
+        <parameter type-id='34066f8f' name='sdrv' filepath='drivers/spmi/spmi.c' line='566' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/spmi/spmi.c' line='566' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='02bc074d'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6430ea09'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a251384'>
+        <parameter type-id='d5cbf711'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5df6ba5b'>
+        <parameter type-id='893447fb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='893b3284'>
+        <parameter type-id='893447fb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/staging/android/ion/ion.c' language='LANG_C89'>
+      <class-decl name='ion_heap_data' size-in-bits='416' is-struct='yes' visibility='default' filepath='include/uapi/linux/ion.h' line='101' column='1' id='e608a5c1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/ion.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='heap_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved0' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reserved1' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved2' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/ion.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ion_buffer' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='38' column='1' id='43ebe0a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='heap' type-id='ac7bd9a2' visibility='default' filepath='include/linux/ion.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private_flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/ion.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv_virt' type-id='eaa32e2f' visibility='default' filepath='include/linux/ion.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/ion.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='kmap_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/ion.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vaddr' type-id='eaa32e2f' visibility='default' filepath='include/linux/ion.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sg_table' type-id='4adb0e6a' visibility='default' filepath='include/linux/ion.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='attachments' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ion_heap' size-in-bits='3264' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='117' column='1' id='c49a08f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='e3a91a7c' visibility='default' filepath='include/linux/ion.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='3616fd96' visibility='default' filepath='include/linux/ion.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ops' type-id='14bad32f' visibility='default' filepath='include/linux/ion.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='buf_ops' type-id='3f8b3d98' visibility='default' filepath='include/linux/ion.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ion.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/linux/ion.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ion.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/ion.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='shrinker' type-id='27cb404f' visibility='default' filepath='include/linux/ion.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='free_list' type-id='72f469ec' visibility='default' filepath='include/linux/ion.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='free_list_size' type-id='b59d7dce' visibility='default' filepath='include/linux/ion.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='free_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/ion.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='waitqueue' type-id='b5ab048f' visibility='default' filepath='include/linux/ion.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/ion.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='num_of_buffers' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_of_alloc_bytes' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='alloc_bytes_wm' type-id='91ce1af9' visibility='default' filepath='include/linux/ion.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='stat_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/ion.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/ion.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ion_heap_type' filepath='include/uapi/linux/ion.h' line='25' column='1' id='3616fd96'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ION_HEAP_TYPE_SYSTEM' value='0'/>
+        <enumerator name='ION_HEAP_TYPE_DMA' value='2'/>
+        <enumerator name='ION_HEAP_TYPE_CUSTOM' value='16'/>
+        <enumerator name='ION_HEAP_TYPE_MAX' value='31'/>
+      </enum-decl>
+      <class-decl name='ion_heap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/ion.h' line='65' column='1' id='6038b637'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocate' type-id='ee920f43' visibility='default' filepath='include/linux/ion.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='62243d87' visibility='default' filepath='include/linux/ion.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shrink' type-id='82b66a0c' visibility='default' filepath='include/linux/ion.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_pool_size' type-id='242fbf2c' visibility='default' filepath='include/linux/ion.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='be9f972f' size-in-bits='64' id='ee920f43'/>
+      <pointer-type-def type-id='2a7fd552' size-in-bits='64' id='82b66a0c'/>
+      <pointer-type-def type-id='43ebe0a8' size-in-bits='64' id='64915dde'/>
+      <pointer-type-def type-id='c49a08f4' size-in-bits='64' id='ac7bd9a2'/>
+      <pointer-type-def type-id='e608a5c1' size-in-bits='64' id='10ff3799'/>
+      <pointer-type-def type-id='6038b637' size-in-bits='64' id='14bad32f'/>
+      <pointer-type-def type-id='2c810892' size-in-bits='64' id='242fbf2c'/>
+      <pointer-type-def type-id='1971ed3b' size-in-bits='64' id='62243d87'/>
+      <function-decl name='ion_query_heaps_kernel' mangled-name='ion_query_heaps_kernel' filepath='drivers/staging/android/ion/ion.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_query_heaps_kernel'>
+        <parameter type-id='10ff3799' name='hdata' filepath='drivers/staging/android/ion/ion.c' line='65' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/staging/android/ion/ion.c' line='65' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='ion_free' mangled-name='ion_free' filepath='drivers/staging/android/ion/ion.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_free'>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ion_device_remove_heap' mangled-name='ion_device_remove_heap' filepath='drivers/staging/android/ion/ion.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_device_remove_heap'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion.c' line='403' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ion_alloc' mangled-name='ion_alloc' filepath='drivers/staging/android/ion/ion.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_alloc'>
+        <parameter type-id='b59d7dce' name='len' filepath='drivers/staging/android/ion/ion.c' line='35' column='1'/>
+        <parameter type-id='f0981eeb' name='heap_id_mask' filepath='drivers/staging/android/ion/ion.c' line='35' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='drivers/staging/android/ion/ion.c' line='36' column='1'/>
+        <return type-id='5e4f599b'/>
+      </function-decl>
+      <function-decl name='__ion_device_add_heap' mangled-name='__ion_device_add_heap' filepath='drivers/staging/android/ion/ion.c' line='314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ion_device_add_heap'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion.c' line='314' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/staging/android/ion/ion.c' line='314' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='be9f972f'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='64915dde'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a7fd552'>
+        <parameter type-id='ac7bd9a2'/>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c810892'>
+        <parameter type-id='ac7bd9a2'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1971ed3b'>
+        <parameter type-id='64915dde'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/staging/android/ion/ion_buffer.c' language='LANG_C89'>
+      <function-decl name='ion_buffer_prep_noncached' mangled-name='ion_buffer_prep_noncached' filepath='drivers/staging/android/ion/ion_buffer.c' line='190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_buffer_prep_noncached'>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_buffer.c' line='190' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ion_buffer_zero' mangled-name='ion_buffer_zero' filepath='drivers/staging/android/ion/ion_buffer.c' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_buffer_zero'>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_buffer.c' line='172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/staging/android/ion/ion_heap.c' language='LANG_C89'>
+      <function-decl name='ion_heap_map_kernel' mangled-name='ion_heap_map_kernel' filepath='drivers/staging/android/ion/ion_heap.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_map_kernel'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion_heap.c' line='125' column='1'/>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_heap.c' line='126' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='ion_heap_map_user' mangled-name='ion_heap_map_user' filepath='drivers/staging/android/ion/ion_heap.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_map_user'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion_heap.c' line='171' column='1'/>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_heap.c' line='171' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='drivers/staging/android/ion/ion_heap.c' line='172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ion_heap_unmap_kernel' mangled-name='ion_heap_unmap_kernel' filepath='drivers/staging/android/ion/ion_heap.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ion_heap_unmap_kernel'>
+        <parameter type-id='ac7bd9a2' name='heap' filepath='drivers/staging/android/ion/ion_heap.c' line='164' column='1'/>
+        <parameter type-id='64915dde' name='buffer' filepath='drivers/staging/android/ion/ion_heap.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/thermal/devfreq_cooling.c' language='LANG_C89'>
+      <class-decl name='devfreq_cooling_power' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/devfreq_cooling.h' line='55' column='1' id='3f6ca798'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_static_power' type-id='a7add4f1' visibility='default' filepath='include/linux/devfreq_cooling.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_dynamic_power' type-id='68fba90f' visibility='default' filepath='include/linux/devfreq_cooling.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_real_power' type-id='d4cfedac' visibility='default' filepath='include/linux/devfreq_cooling.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dyn_power_coeff' type-id='7359adad' visibility='default' filepath='include/linux/devfreq_cooling.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3f6ca798' size-in-bits='64' id='0b660ebe'/>
+      <pointer-type-def type-id='1966792a' size-in-bits='64' id='d4cfedac'/>
+      <pointer-type-def type-id='b264761d' size-in-bits='64' id='a7add4f1'/>
+      <pointer-type-def type-id='ebe674bb' size-in-bits='64' id='68fba90f'/>
+      <function-decl name='of_devfreq_cooling_register_power' mangled-name='of_devfreq_cooling_register_power' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_devfreq_cooling_register_power'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1'/>
+        <parameter type-id='f66fa7f4' name='df' filepath='drivers/thermal/devfreq_cooling.c' line='505' column='1'/>
+        <parameter type-id='0b660ebe' name='dfc_power' filepath='drivers/thermal/devfreq_cooling.c' line='506' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='of_devfreq_cooling_register' mangled-name='of_devfreq_cooling_register' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_devfreq_cooling_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1'/>
+        <parameter type-id='f66fa7f4' name='df' filepath='drivers/thermal/devfreq_cooling.c' line='572' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='devfreq_cooling_unregister' mangled-name='devfreq_cooling_unregister' filepath='drivers/thermal/devfreq_cooling.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devfreq_cooling_unregister'>
+        <parameter type-id='2feec21f' name='cdev' filepath='drivers/thermal/devfreq_cooling.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1966792a'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b264761d'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebe674bb'>
+        <parameter type-id='f66fa7f4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/thermal/of-thermal.c' language='LANG_C89'>
+      <class-decl name='thermal_zone_of_device_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='367' column='1' id='67409b07'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_temp' type-id='bbaaa2c4' visibility='default' filepath='include/linux/thermal.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_trend' type-id='a2abe05f' visibility='default' filepath='include/linux/thermal.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_trips' type-id='ccb77b5b' visibility='default' filepath='include/linux/thermal.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_emul_temp' type-id='dbff155c' visibility='default' filepath='include/linux/thermal.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_trip_temp' type-id='ccb77b5b' visibility='default' filepath='include/linux/thermal.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_trip' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='385' column='1' id='ef6b4e3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hysteresis' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='57e8e954' visibility='default' filepath='include/linux/thermal.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='391' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ef6b4e3a' const='yes' id='35306a57'/>
+      <pointer-type-def type-id='35306a57' size-in-bits='64' id='3837a2c7'/>
+      <qualified-type-def type-id='67409b07' const='yes' id='45f3f04e'/>
+      <pointer-type-def type-id='45f3f04e' size-in-bits='64' id='83036d6c'/>
+      <pointer-type-def type-id='dd42ab12' size-in-bits='64' id='dbff155c'/>
+      <pointer-type-def type-id='12f09262' size-in-bits='64' id='bbaaa2c4'/>
+      <pointer-type-def type-id='0c319a47' size-in-bits='64' id='ccb77b5b'/>
+      <pointer-type-def type-id='3f0a3b53' size-in-bits='64' id='a2abe05f'/>
+      <function-decl name='thermal_zone_of_sensor_unregister' mangled-name='thermal_zone_of_sensor_unregister' filepath='drivers/thermal/of-thermal.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_of_sensor_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='556' column='1'/>
+        <parameter type-id='404b1300' name='tzd' filepath='drivers/thermal/of-thermal.c' line='557' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_of_sensor_register' mangled-name='thermal_zone_of_sensor_register' filepath='drivers/thermal/of-thermal.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_of_sensor_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='95e97e5e' name='sensor_id' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/thermal/of-thermal.c' line='484' column='1'/>
+        <parameter type-id='83036d6c' name='ops' filepath='drivers/thermal/of-thermal.c' line='485' column='1'/>
+        <return type-id='404b1300'/>
+      </function-decl>
+      <function-decl name='of_thermal_is_trip_valid' mangled-name='of_thermal_is_trip_valid' filepath='drivers/thermal/of-thermal.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_is_trip_valid'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/of-thermal.c' line='142' column='1'/>
+        <parameter type-id='95e97e5e' name='trip' filepath='drivers/thermal/of-thermal.c' line='142' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='of_thermal_get_trip_points' mangled-name='of_thermal_get_trip_points' filepath='drivers/thermal/of-thermal.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_get_trip_points'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/of-thermal.c' line='164' column='1'/>
+        <return type-id='3837a2c7'/>
+      </function-decl>
+      <function-decl name='of_thermal_get_ntrips' mangled-name='of_thermal_get_ntrips' filepath='drivers/thermal/of-thermal.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_thermal_get_ntrips'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/of-thermal.c' line='121' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_thermal_zone_of_sensor_unregister' mangled-name='devm_thermal_zone_of_sensor_unregister' filepath='drivers/thermal/of-thermal.c' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_zone_of_sensor_unregister'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='654' column='1'/>
+        <parameter type-id='404b1300' name='tzd' filepath='drivers/thermal/of-thermal.c' line='655' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_thermal_zone_of_sensor_register' mangled-name='devm_thermal_zone_of_sensor_register' filepath='drivers/thermal/of-thermal.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_zone_of_sensor_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/of-thermal.c' line='618' column='1'/>
+        <parameter type-id='95e97e5e' name='sensor_id' filepath='drivers/thermal/of-thermal.c' line='618' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/thermal/of-thermal.c' line='619' column='1'/>
+        <parameter type-id='83036d6c' name='ops' filepath='drivers/thermal/of-thermal.c' line='619' column='1'/>
+        <return type-id='404b1300'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='dd42ab12'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='12f09262'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c319a47'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f0a3b53'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='4983ea36'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/thermal/thermal_core.c' language='LANG_C89'>
+      <function-decl name='thermal_zone_device_register' mangled-name='thermal_zone_device_register' filepath='drivers/thermal/thermal_core.c' line='1236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_register'>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/thermal/thermal_core.c' line='1236' column='1'/>
+        <parameter type-id='95e97e5e' name='trips' filepath='drivers/thermal/thermal_core.c' line='1236' column='1'/>
+        <parameter type-id='95e97e5e' name='mask' filepath='drivers/thermal/thermal_core.c' line='1236' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1237' column='1'/>
+        <parameter type-id='1e6fe389' name='ops' filepath='drivers/thermal/thermal_core.c' line='1237' column='1'/>
+        <parameter type-id='e2cbf964' name='tzp' filepath='drivers/thermal/thermal_core.c' line='1238' column='1'/>
+        <parameter type-id='95e97e5e' name='passive_delay' filepath='drivers/thermal/thermal_core.c' line='1238' column='1'/>
+        <parameter type-id='95e97e5e' name='polling_delay' filepath='drivers/thermal/thermal_core.c' line='1239' column='1'/>
+        <return type-id='404b1300'/>
+      </function-decl>
+      <function-decl name='thermal_cooling_device_unregister' mangled-name='thermal_cooling_device_unregister' filepath='drivers/thermal/thermal_core.c' line='1122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cooling_device_unregister'>
+        <parameter type-id='2feec21f' name='cdev' filepath='drivers/thermal/thermal_core.c' line='1122' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_device_unregister' mangled-name='thermal_zone_device_unregister' filepath='drivers/thermal/thermal_core.c' line='1375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_unregister'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/thermal_core.c' line='1375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_get_zone_by_name' mangled-name='thermal_zone_get_zone_by_name' filepath='drivers/thermal/thermal_core.c' line='1440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_get_zone_by_name'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/thermal/thermal_core.c' line='1440' column='1'/>
+        <return type-id='404b1300'/>
+      </function-decl>
+      <function-decl name='thermal_zone_device_update' mangled-name='thermal_zone_device_update' filepath='drivers/thermal/thermal_core.c' line='475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_device_update'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/thermal_core.c' line='475' column='1'/>
+        <parameter type-id='b5808f5e' name='event' filepath='drivers/thermal/thermal_core.c' line='476' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_of_cooling_device_register' mangled-name='thermal_of_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1048' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_of_cooling_device_register'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/thermal_core.c' line='1048' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/thermal/thermal_core.c' line='1049' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1049' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1050' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='thermal_cooling_device_register' mangled-name='thermal_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1025' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cooling_device_register'>
+        <parameter type-id='80f4b756' name='type' filepath='drivers/thermal/thermal_core.c' line='1025' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1025' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1026' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+      <function-decl name='devm_thermal_of_cooling_device_register' mangled-name='devm_thermal_of_cooling_device_register' filepath='drivers/thermal/thermal_core.c' line='1080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_thermal_of_cooling_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/thermal/thermal_core.c' line='1080' column='1'/>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/thermal/thermal_core.c' line='1081' column='1'/>
+        <parameter type-id='26a90f95' name='type' filepath='drivers/thermal/thermal_core.c' line='1082' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/thermal/thermal_core.c' line='1082' column='1'/>
+        <parameter type-id='6f4dc085' name='ops' filepath='drivers/thermal/thermal_core.c' line='1083' column='1'/>
+        <return type-id='2feec21f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/thermal/thermal_helpers.c' language='LANG_C89'>
+      <function-decl name='thermal_zone_get_temp' mangled-name='thermal_zone_get_temp' filepath='drivers/thermal/thermal_helpers.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_get_temp'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/thermal_helpers.c' line='77' column='1'/>
+        <parameter type-id='7292109c' name='temp' filepath='drivers/thermal/thermal_helpers.c' line='77' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='thermal_cdev_update' mangled-name='thermal_cdev_update' filepath='drivers/thermal/thermal_helpers.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_cdev_update'>
+        <parameter type-id='2feec21f' name='cdev' filepath='drivers/thermal/thermal_helpers.c' line='166' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='thermal_zone_get_slope' mangled-name='thermal_zone_get_slope' filepath='drivers/thermal/thermal_helpers.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='thermal_zone_get_slope'>
+        <parameter type-id='404b1300' name='tz' filepath='drivers/thermal/thermal_helpers.c' line='205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/hvc/hvc_console.c' language='LANG_C89'>
+      <class-decl name='hvc_struct' size-in-bits='4096' is-struct='yes' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='35' column='1' id='79ba66e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='do_wakeup' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='outbuf' type-id='26a90f95' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='outbuf_size' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='n_outbuf' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='vtermno' type-id='8f92235e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ops' type-id='f319e2c5' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='irq_requested' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='data' type-id='95e97e5e' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ws' type-id='a818b7a0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='tty_resize' type-id='ef9025d0' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='next' type-id='72f469ec' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='06b0b498'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_chars' type-id='b925d171' 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='cbcd023c' 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='6d72cd27' 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='38ea827b' 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='4b6c509a' 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='4b6c509a' 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='6cd5b5fc' 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='7d48d834' 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='4b6c509a' visibility='default' filepath='drivers/tty/hvc/hvc_console.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='06b0b498' const='yes' id='09f4a16d'/>
+      <pointer-type-def type-id='09f4a16d' size-in-bits='64' id='f319e2c5'/>
+      <pointer-type-def type-id='79ba66e0' size-in-bits='64' id='352b95f6'/>
+      <pointer-type-def type-id='7f3ed7a2' size-in-bits='64' id='6cd5b5fc'/>
+      <pointer-type-def type-id='a0807697' size-in-bits='64' id='38ea827b'/>
+      <pointer-type-def type-id='4e3458ca' size-in-bits='64' id='7d48d834'/>
+      <pointer-type-def type-id='86933835' size-in-bits='64' id='b925d171'/>
+      <pointer-type-def type-id='de7351ca' size-in-bits='64' id='cbcd023c'/>
+      <pointer-type-def type-id='66781033' size-in-bits='64' id='6d72cd27'/>
+      <pointer-type-def type-id='8cfd5cb8' size-in-bits='64' id='4b6c509a'/>
+      <function-decl name='hvc_remove' mangled-name='hvc_remove' filepath='drivers/tty/hvc/hvc_console.c' line='979' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_remove'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='979' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hvc_poll' mangled-name='hvc_poll' filepath='drivers/tty/hvc/hvc_console.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_poll'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='762' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hvc_kick' mangled-name='hvc_kick' filepath='drivers/tty/hvc/hvc_console.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_kick'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='8f92235e' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <parameter type-id='f319e2c5' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='285' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hvc_alloc' mangled-name='hvc_alloc' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hvc_alloc'>
+        <parameter type-id='8f92235e' name='vtermno' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1'/>
+        <parameter type-id='95e97e5e' name='data' filepath='drivers/tty/hvc/hvc_console.c' line='911' column='1'/>
+        <parameter type-id='f319e2c5' name='ops' filepath='drivers/tty/hvc/hvc_console.c' line='912' column='1'/>
+        <parameter type-id='95e97e5e' name='outbuf_size' filepath='drivers/tty/hvc/hvc_console.c' line='913' column='1'/>
+        <return type-id='352b95f6'/>
+      </function-decl>
+      <function-decl name='__hvc_resize' mangled-name='__hvc_resize' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hvc_resize'>
+        <parameter type-id='352b95f6' name='hp' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1'/>
+        <parameter type-id='a818b7a0' name='ws' filepath='drivers/tty/hvc/hvc_console.c' line='778' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7f3ed7a2'>
+        <parameter type-id='352b95f6' name='hp'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a0807697'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e3458ca'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86933835'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de7351ca'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='66781033'>
+        <parameter type-id='8f92235e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cfd5cb8'>
+        <parameter type-id='352b95f6'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/serdev/core.c' language='LANG_C89'>
+      <class-decl name='serdev_device' size-in-bits='8192' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='41' column='1' id='84bb5b7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serdev.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/serdev.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ctrl' type-id='30a11035' visibility='default' filepath='include/linux/serdev.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='45b5656b' visibility='default' filepath='include/linux/serdev.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='write_comp' type-id='f9fef04f' visibility='default' filepath='include/linux/serdev.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='write_lock' type-id='925167dc' visibility='default' filepath='include/linux/serdev.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serdev_controller' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='103' column='1' id='6c569e75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/serdev.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='nr' type-id='f0981eeb' visibility='default' filepath='include/linux/serdev.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='serdev' type-id='97fbef77' visibility='default' filepath='include/linux/serdev.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='0c0416e5' visibility='default' filepath='include/linux/serdev.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serdev_controller_ops' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='82' column='1' id='06ea3aee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_buf' type-id='31ca1cfa' visibility='default' filepath='include/linux/serdev.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_flush' type-id='a0974a4c' visibility='default' filepath='include/linux/serdev.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write_room' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='a0974a4c' visibility='default' filepath='include/linux/serdev.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_flow_control' type-id='1aec71d5' visibility='default' filepath='include/linux/serdev.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_parity' type-id='eea9f8db' visibility='default' filepath='include/linux/serdev.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_baudrate' type-id='5bc4fd6a' visibility='default' filepath='include/linux/serdev.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wait_until_sent' type-id='802491cf' visibility='default' filepath='include/linux/serdev.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_tiocm' type-id='2deec881' visibility='default' filepath='include/linux/serdev.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_tiocm' type-id='1bdcd289' visibility='default' filepath='include/linux/serdev.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='serdev_parity' filepath='include/linux/serdev.h' line='73' column='1' id='4a8b8edb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SERDEV_PARITY_NONE' value='0'/>
+        <enumerator name='SERDEV_PARITY_EVEN' value='1'/>
+        <enumerator name='SERDEV_PARITY_ODD' value='2'/>
+      </enum-decl>
+      <class-decl name='serdev_device_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/serdev.h' line='27' column='1' id='dc25ec6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='2ff23ad4' visibility='default' filepath='include/linux/serdev.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='e61cb0da' visibility='default' filepath='include/linux/serdev.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='06ea3aee' const='yes' id='b91ab08d'/>
+      <pointer-type-def type-id='b91ab08d' size-in-bits='64' id='0c0416e5'/>
+      <qualified-type-def type-id='dc25ec6c' const='yes' id='57f8d3e3'/>
+      <pointer-type-def type-id='57f8d3e3' size-in-bits='64' id='45b5656b'/>
+      <pointer-type-def type-id='f8cf7305' size-in-bits='64' id='2deec881'/>
+      <pointer-type-def type-id='23a55350' size-in-bits='64' id='31ca1cfa'/>
+      <pointer-type-def type-id='afdad9ef' size-in-bits='64' id='eea9f8db'/>
+      <pointer-type-def type-id='7b29d65d' size-in-bits='64' id='1bdcd289'/>
+      <pointer-type-def type-id='4d6ef9da' size-in-bits='64' id='2ff23ad4'/>
+      <pointer-type-def type-id='6c569e75' size-in-bits='64' id='30a11035'/>
+      <pointer-type-def type-id='84bb5b7f' size-in-bits='64' id='97fbef77'/>
+      <pointer-type-def type-id='8d8b68e8' size-in-bits='64' id='5bc4fd6a'/>
+      <pointer-type-def type-id='ba2a46a2' size-in-bits='64' id='a0974a4c'/>
+      <pointer-type-def type-id='ace9a76b' size-in-bits='64' id='802491cf'/>
+      <pointer-type-def type-id='ef83ffb9' size-in-bits='64' id='1aec71d5'/>
+      <pointer-type-def type-id='35213710' size-in-bits='64' id='e61cb0da'/>
+      <function-decl name='serdev_device_write_wakeup' mangled-name='serdev_device_write_wakeup' filepath='drivers/tty/serdev/core.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_write_wakeup'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='236' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_write' mangled-name='serdev_device_write' filepath='drivers/tty/serdev/core.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_write'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='291' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='drivers/tty/serdev/core.c' line='292' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/tty/serdev/core.c' line='292' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/tty/serdev/core.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serdev_device_wait_until_sent' mangled-name='serdev_device_wait_until_sent' filepath='drivers/tty/serdev/core.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_wait_until_sent'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='396' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='drivers/tty/serdev/core.c' line='396' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_set_flow_control' mangled-name='serdev_device_set_flow_control' filepath='drivers/tty/serdev/core.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_set_flow_control'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='373' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='drivers/tty/serdev/core.c' line='373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serdev_device_set_baudrate' mangled-name='serdev_device_set_baudrate' filepath='drivers/tty/serdev/core.c' line='361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_set_baudrate'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='361' column='1'/>
+        <parameter type-id='f0981eeb' name='speed' filepath='drivers/tty/serdev/core.c' line='361' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='serdev_device_open' mangled-name='serdev_device_open' filepath='drivers/tty/serdev/core.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_open'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='168' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serdev_device_close' mangled-name='serdev_device_close' filepath='drivers/tty/serdev/core.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serdev_device_close'>
+        <parameter type-id='97fbef77' name='serdev' filepath='drivers/tty/serdev/core.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f8cf7305'>
+        <parameter type-id='30a11035'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23a55350'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afdad9ef'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='4a8b8edb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b29d65d'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d6ef9da'>
+        <parameter type-id='97fbef77'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d8b68e8'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba2a46a2'>
+        <parameter type-id='30a11035'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ace9a76b'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef83ffb9'>
+        <parameter type-id='30a11035'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35213710'>
+        <parameter type-id='97fbef77' name='serdev'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/serial/8250/8250_core.c' language='LANG_C89'>
+      <class-decl name='mctrl_gpios' is-struct='yes' visibility='default' is-declaration-only='yes' id='31bf052e'/>
+      <class-decl name='uart_8250_port' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='92' column='1' id='d7d97b09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='b0063b51' visibility='default' filepath='include/linux/serial_8250.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/serial_8250.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/serial_8250.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='capabilities' type-id='19c2251e' visibility='default' filepath='include/linux/serial_8250.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='bugs' type-id='8efea9e5' visibility='default' filepath='include/linux/serial_8250.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4464'>
+          <var-decl name='fifo_bug' type-id='b50a4934' visibility='default' filepath='include/linux/serial_8250.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='tx_loadsz' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_8250.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='acr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4520'>
+          <var-decl name='fcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4528'>
+          <var-decl name='ier' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4536'>
+          <var-decl name='lcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='mcr' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4552'>
+          <var-decl name='mcr_mask' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4560'>
+          <var-decl name='mcr_force' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4568'>
+          <var-decl name='cur_iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='rpm_tx_active' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_8250.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='canary' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4616'>
+          <var-decl name='probe' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='gpios' type-id='967c9384' visibility='default' filepath='include/linux/serial_8250.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='lsr_saved_flags' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4744'>
+          <var-decl name='msr_saved_flags' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_8250.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='dma' type-id='22a9463e' visibility='default' filepath='include/linux/serial_8250.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ops' type-id='37dfab81' visibility='default' filepath='include/linux/serial_8250.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dl_read' type-id='58f84083' visibility='default' filepath='include/linux/serial_8250.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='dl_write' type-id='ce713533' visibility='default' filepath='include/linux/serial_8250.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='em485' type-id='06d9380f' visibility='default' filepath='include/linux/serial_8250.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='overrun_backoff' type-id='5ad6e0ef' visibility='default' filepath='include/linux/serial_8250.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='overrun_backoff_time_ms' type-id='19c2251e' visibility='default' filepath='include/linux/serial_8250.h' line='137' 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='16' column='1' id='aec34ed8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_dma' type-id='58f84083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_dma' type-id='58f84083' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fn' type-id='55f53546' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_param' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_param' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rxconf' type-id='d356829c' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='txconf' type-id='d356829c' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rxchan' type-id='27f3f5d8' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='txchan' type-id='27f3f5d8' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_dma_addr' type-id='2522883d' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tx_dma_addr' type-id='2522883d' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='tx_addr' type-id='cf29c9b3' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rx_cookie' type-id='6478ea0a' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='tx_cookie' type-id='6478ea0a' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rx_buf' type-id='eaa32e2f' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rx_size' type-id='b59d7dce' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='tx_size' type-id='b59d7dce' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='tx_running' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='tx_err' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1872'>
+          <var-decl name='rx_running' type-id='002ac4a6' visibility='default' filepath='drivers/tty/serial/8250/8250.h' line='50' 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='73' column='1' id='ed38bc9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setup_irq' type-id='58f84083' visibility='default' filepath='include/linux/serial_8250.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release_irq' type-id='4d2e08b4' visibility='default' filepath='include/linux/serial_8250.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_8250_em485' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/serial_8250.h' line='78' column='1' id='6f81c9e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_tx_timer' type-id='b6993efc' visibility='default' filepath='include/linux/serial_8250.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop_tx_timer' type-id='b6993efc' visibility='default' filepath='include/linux/serial_8250.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='active_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/serial_8250.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='port' type-id='b26c7631' visibility='default' filepath='include/linux/serial_8250.h' line='82' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='ed38bc9e' const='yes' id='75971b31'/>
+      <pointer-type-def type-id='75971b31' size-in-bits='64' id='37dfab81'/>
+      <pointer-type-def type-id='c3b2916f' size-in-bits='64' id='58f84083'/>
+      <pointer-type-def type-id='31bf052e' size-in-bits='64' id='967c9384'/>
+      <pointer-type-def type-id='aec34ed8' size-in-bits='64' id='22a9463e'/>
+      <pointer-type-def type-id='6f81c9e7' size-in-bits='64' id='06d9380f'/>
+      <pointer-type-def type-id='d7d97b09' size-in-bits='64' id='b26c7631'/>
+      <pointer-type-def type-id='3191191a' size-in-bits='64' id='4d2e08b4'/>
+      <pointer-type-def type-id='20047fcf' size-in-bits='64' id='ce713533'/>
+      <function-decl name='serial8250_register_8250_port' mangled-name='serial8250_register_8250_port' filepath='drivers/tty/serial/8250/8250_core.c' line='973' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_register_8250_port'>
+        <parameter type-id='b26c7631' name='up' filepath='drivers/tty/serial/8250/8250_core.c' line='973' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='serial8250_unregister_port' mangled-name='serial8250_unregister_port' filepath='drivers/tty/serial/8250/8250_core.c' line='1121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_unregister_port'>
+        <parameter type-id='95e97e5e' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='1121' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_resume_port' mangled-name='serial8250_resume_port' filepath='drivers/tty/serial/8250/8250_core.c' line='771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_resume_port'>
+        <parameter type-id='95e97e5e' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='771' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_suspend_port' mangled-name='serial8250_suspend_port' filepath='drivers/tty/serial/8250/8250_core.c' line='748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_suspend_port'>
+        <parameter type-id='95e97e5e' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='748' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='serial8250_get_port' mangled-name='serial8250_get_port' filepath='drivers/tty/serial/8250/8250_core.c' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='serial8250_get_port'>
+        <parameter type-id='95e97e5e' name='line' filepath='drivers/tty/serial/8250/8250_core.c' line='411' column='1'/>
+        <return type-id='b26c7631'/>
+      </function-decl>
+      <class-decl name='uart_port' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='109' column='1' id='b0063b51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serial_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iobase' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='membase' type-id='cf536864' visibility='default' filepath='include/linux/serial_core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_in' type-id='d8385083' visibility='default' filepath='include/linux/serial_core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serial_out' type-id='041f6b76' visibility='default' filepath='include/linux/serial_core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_divisor' type-id='dece2c04' visibility='default' filepath='include/linux/serial_core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_divisor' type-id='a902ee5a' visibility='default' filepath='include/linux/serial_core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='handle_irq' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='handle_break' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rs485_config' type-id='bee2fad0' visibility='default' filepath='include/linux/serial_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iso7816_config' type-id='34aa5735' visibility='default' filepath='include/linux/serial_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irqflags' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='uartclk' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='fifosize' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='x_char' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='regshift' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1496'>
+          <var-decl name='quirks' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='read_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ignore_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='icount' type-id='3f76087c' visibility='default' filepath='include/linux/serial_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysrq' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysrq_ch' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flags' type-id='5d1b117e' visibility='default' filepath='include/linux/serial_core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='status' type-id='9fe5c270' visibility='default' filepath='include/linux/serial_core.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='mctrl' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ops' type-id='7e03a5bb' visibility='default' filepath='include/linux/serial_core.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='custom_divisor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='line' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mapbase' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mapsize' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/serial_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hub6' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='suspended' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='unused' type-id='4d050576' visibility='default' filepath='include/linux/serial_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='attr_group' type-id='aad24a5b' visibility='default' filepath='include/linux/serial_core.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tty_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/serial_core.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rs485' type-id='fc72f170' visibility='default' filepath='include/linux/serial_core.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='iso7816' type-id='5a449113' visibility='default' filepath='include/linux/serial_core.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serial_core.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='c3b2916f'>
+        <parameter type-id='b26c7631' name='up'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3191191a'>
+        <parameter type-id='b26c7631'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20047fcf'>
+        <parameter type-id='b26c7631'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <class-decl name='serial_iso7816' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='140' column='1' id='5a449113'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sc_fi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sc_di' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='149' 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='fc72f170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='131' 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='92' column='1' id='3f76087c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d8b78162' size-in-bits='64' id='b9aa0100'/>
+      <pointer-type-def type-id='f92f0413' size-in-bits='64' id='7e03a5bb'/>
+      <pointer-type-def type-id='03dc20ed' size-in-bits='64' id='45d07221'/>
+      <pointer-type-def type-id='ee6561a9' size-in-bits='64' id='34aa5735'/>
+      <pointer-type-def type-id='e1d0c03e' size-in-bits='64' id='bee2fad0'/>
+      <typedef-decl name='upf_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='106' column='1' id='5d1b117e'/>
+      <typedef-decl name='upstat_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='107' column='1' id='9fe5c270'/>
+      <pointer-type-def type-id='8f17759b' size-in-bits='64' id='533b348b'/>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='16' id='4d050576'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <pointer-type-def type-id='5fa1c03a' size-in-bits='64' id='d8d26684'/>
+      <pointer-type-def type-id='41df3a6f' size-in-bits='64' id='d8385083'/>
+      <pointer-type-def type-id='41c81272' size-in-bits='64' id='dece2c04'/>
+      <pointer-type-def type-id='89397116' size-in-bits='64' id='ed415bf0'/>
+      <pointer-type-def type-id='e6fe4054' size-in-bits='64' id='041f6b76'/>
+      <pointer-type-def type-id='2cebef22' size-in-bits='64' id='92c1d524'/>
+      <pointer-type-def type-id='b1b5c3fe' size-in-bits='64' id='97d53fc8'/>
+      <pointer-type-def type-id='d4c94570' size-in-bits='64' id='898b0c52'/>
+      <pointer-type-def type-id='aa99b0ae' size-in-bits='64' id='c805a6f8'/>
+      <pointer-type-def type-id='3636c828' size-in-bits='64' id='a902ee5a'/>
+      <class-decl name='console' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/console.h' line='145' column='1' id='d8b78162'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' 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='94639d2a' 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='57c9915e' 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='3805964c' 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='953b12f8' 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='304a6cc4' 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='c859c465' 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='a2185560' 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='a2185560' 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='95e97e5e' 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='eaa32e2f' 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='b9aa0100' visibility='default' filepath='include/linux/console.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_state' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='290' column='1' id='8f17759b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='include/linux/serial_core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pm_state' type-id='4e1a3570' visibility='default' filepath='include/linux/serial_core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='xmit' type-id='40d6f574' visibility='default' filepath='include/linux/serial_core.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/serial_core.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='remove_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/serial_core.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='uart_port' type-id='af051c69' visibility='default' filepath='include/linux/serial_core.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='95388a16' const='yes' id='f92f0413'/>
+      <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='40d6f574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='include/linux/circ_buf.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_ops' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='38' column='1' id='95388a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_empty' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='send_xchar' type-id='511c33f4' visibility='default' filepath='include/linux/serial_core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_rx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable_ms' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='break_ctl' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flush_buffer' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='type' type-id='df58a979' visibility='default' filepath='include/linux/serial_core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='release_port' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='request_port' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_port' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='verify_port' type-id='6850d327' visibility='default' filepath='include/linux/serial_core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ioctl' type-id='34fdc91d' visibility='default' filepath='include/linux/serial_core.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='281' column='1' id='4e1a3570'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='0da72d62' size-in-bits='64' id='304a6cc4'/>
+      <pointer-type-def type-id='1b343ea9' size-in-bits='64' id='c859c465'/>
+      <pointer-type-def type-id='92a295b4' size-in-bits='64' id='57c9915e'/>
+      <pointer-type-def type-id='c0f05602' size-in-bits='64' id='3805964c'/>
+      <pointer-type-def type-id='b0063b51' size-in-bits='64' id='af051c69'/>
+      <pointer-type-def type-id='06177fb0' size-in-bits='64' id='94639d2a'/>
+      <pointer-type-def type-id='c14fce5d' size-in-bits='64' id='df58a979'/>
+      <pointer-type-def type-id='2b18e57b' size-in-bits='64' id='6850d327'/>
+      <pointer-type-def type-id='eac2b7d9' size-in-bits='64' id='34fdc91d'/>
+      <pointer-type-def type-id='c463253a' size-in-bits='64' id='511c33f4'/>
+      <pointer-type-def type-id='0834640b' size-in-bits='64' id='c6b7d75f'/>
+    </abi-instr>
+    <abi-instr 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='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsl8250_handle_irq'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/8250/8250_fsl.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/serial/serial_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='160' id='83a5454e'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='8' id='89feb1ec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='16' id='4d050576'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='uart_port' size-in-bits='3840' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='109' column='1' id='b0063b51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/serial_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iobase' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='membase' type-id='cf536864' visibility='default' filepath='include/linux/serial_core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='serial_in' type-id='d8385083' visibility='default' filepath='include/linux/serial_core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serial_out' type-id='041f6b76' visibility='default' filepath='include/linux/serial_core.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_divisor' type-id='dece2c04' visibility='default' filepath='include/linux/serial_core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_divisor' type-id='a902ee5a' visibility='default' filepath='include/linux/serial_core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='handle_irq' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='handle_break' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rs485_config' type-id='bee2fad0' visibility='default' filepath='include/linux/serial_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='iso7816_config' type-id='34aa5735' visibility='default' filepath='include/linux/serial_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irqflags' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='uartclk' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='fifosize' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='x_char' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='regshift' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='iotype' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1496'>
+          <var-decl name='quirks' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='read_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ignore_status_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='icount' type-id='3f76087c' visibility='default' filepath='include/linux/serial_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysrq' type-id='7359adad' visibility='default' filepath='include/linux/serial_core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysrq_ch' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flags' type-id='5d1b117e' visibility='default' filepath='include/linux/serial_core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='status' type-id='9fe5c270' visibility='default' filepath='include/linux/serial_core.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='mctrl' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ops' type-id='7e03a5bb' visibility='default' filepath='include/linux/serial_core.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='custom_divisor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='line' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='minor' type-id='f0981eeb' visibility='default' filepath='include/linux/serial_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='mapbase' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mapsize' type-id='acc63fdf' visibility='default' filepath='include/linux/serial_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/serial_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hub6' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2824'>
+          <var-decl name='suspended' type-id='002ac4a6' visibility='default' filepath='include/linux/serial_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2832'>
+          <var-decl name='unused' type-id='4d050576' visibility='default' filepath='include/linux/serial_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='attr_group' type-id='aad24a5b' visibility='default' filepath='include/linux/serial_core.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tty_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/serial_core.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rs485' type-id='fc72f170' visibility='default' filepath='include/linux/serial_core.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='iso7816' type-id='5a449113' visibility='default' filepath='include/linux/serial_core.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/serial_core.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='262' 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='fc72f170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_iso7816' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/serial.h' line='140' column='1' id='5a449113'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tg' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sc_fi' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sc_di' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='clk' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/serial.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reserved' type-id='83a5454e' visibility='default' filepath='include/uapi/linux/serial.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_state' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='290' column='1' id='8f17759b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='include/linux/serial_core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='pm_state' type-id='4e1a3570' visibility='default' filepath='include/linux/serial_core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='xmit' type-id='40d6f574' visibility='default' filepath='include/linux/serial_core.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/serial_core.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='remove_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/serial_core.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='uart_port' type-id='af051c69' visibility='default' filepath='include/linux/serial_core.h' line='298' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='uart_pm_state' filepath='include/linux/serial_core.h' line='281' column='1' id='4e1a3570'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='40d6f574'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' 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='95e97e5e' 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='95e97e5e' 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='92' column='1' id='3f76087c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cts' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dsr' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rng' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcd' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frame' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parity' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='brk' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buf_overrun' type-id='3f1a6b60' visibility='default' filepath='include/linux/serial_core.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='upf_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='106' column='1' id='5d1b117e'/>
+      <typedef-decl name='upstat_t' type-id='f0981eeb' filepath='include/linux/serial_core.h' line='107' column='1' id='9fe5c270'/>
+      <class-decl name='uart_ops' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='38' column='1' id='95388a16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_empty' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_mctrl' type-id='898b0c52' visibility='default' filepath='include/linux/serial_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_mctrl' type-id='d8d26684' visibility='default' filepath='include/linux/serial_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='stop_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='start_tx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='throttle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='unthrottle' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='send_xchar' type-id='511c33f4' visibility='default' filepath='include/linux/serial_core.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='stop_rx' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enable_ms' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='break_ctl' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='startup' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='shutdown' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flush_buffer' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='97d53fc8' visibility='default' filepath='include/linux/serial_core.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_ldisc' type-id='92c1d524' visibility='default' filepath='include/linux/serial_core.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pm' type-id='c805a6f8' visibility='default' filepath='include/linux/serial_core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='type' type-id='df58a979' visibility='default' filepath='include/linux/serial_core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='release_port' type-id='ed415bf0' visibility='default' filepath='include/linux/serial_core.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='request_port' type-id='45d07221' visibility='default' filepath='include/linux/serial_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='config_port' type-id='c6b7d75f' visibility='default' filepath='include/linux/serial_core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='verify_port' type-id='6850d327' visibility='default' filepath='include/linux/serial_core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='ioctl' type-id='34fdc91d' visibility='default' filepath='include/linux/serial_core.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uart_driver' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/serial_core.h' line='310' column='1' id='89f1cbf8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/serial_core.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/linux/serial_core.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/serial_core.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cons' type-id='b9aa0100' visibility='default' filepath='include/linux/serial_core.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state' type-id='533b348b' visibility='default' filepath='include/linux/serial_core.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tty_driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/serial_core.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/serial_core.h' line='326' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e4af473b' size-in-bits='64' id='aad24a5b'/>
+      <pointer-type-def type-id='c14fce5d' size-in-bits='64' id='df58a979'/>
+      <qualified-type-def type-id='95388a16' const='yes' id='f92f0413'/>
+      <pointer-type-def type-id='f92f0413' size-in-bits='64' id='7e03a5bb'/>
+      <pointer-type-def type-id='03dc20ed' size-in-bits='64' id='45d07221'/>
+      <pointer-type-def type-id='ee6561a9' size-in-bits='64' id='34aa5735'/>
+      <pointer-type-def type-id='e1d0c03e' size-in-bits='64' id='bee2fad0'/>
+      <pointer-type-def type-id='2b18e57b' size-in-bits='64' id='6850d327'/>
+      <pointer-type-def type-id='eac2b7d9' size-in-bits='64' id='34fdc91d'/>
+      <pointer-type-def type-id='5a449113' size-in-bits='64' id='fbc594d3'/>
+      <pointer-type-def type-id='fc72f170' size-in-bits='64' id='48268ca6'/>
+      <pointer-type-def type-id='89f1cbf8' size-in-bits='64' id='04a219de'/>
+      <pointer-type-def type-id='b0063b51' size-in-bits='64' id='af051c69'/>
+      <pointer-type-def type-id='8f17759b' size-in-bits='64' id='533b348b'/>
+      <pointer-type-def type-id='5fa1c03a' size-in-bits='64' id='d8d26684'/>
+      <pointer-type-def type-id='41df3a6f' size-in-bits='64' id='d8385083'/>
+      <pointer-type-def type-id='41c81272' size-in-bits='64' id='dece2c04'/>
+      <pointer-type-def type-id='89397116' size-in-bits='64' id='ed415bf0'/>
+      <pointer-type-def type-id='c463253a' size-in-bits='64' id='511c33f4'/>
+      <pointer-type-def type-id='0834640b' size-in-bits='64' id='c6b7d75f'/>
+      <pointer-type-def type-id='e6fe4054' size-in-bits='64' id='041f6b76'/>
+      <pointer-type-def type-id='2cebef22' size-in-bits='64' id='92c1d524'/>
+      <pointer-type-def type-id='b1b5c3fe' size-in-bits='64' id='97d53fc8'/>
+      <pointer-type-def type-id='d4c94570' size-in-bits='64' id='898b0c52'/>
+      <pointer-type-def type-id='aa99b0ae' size-in-bits='64' id='c805a6f8'/>
+      <pointer-type-def type-id='3636c828' size-in-bits='64' id='a902ee5a'/>
+      <function-decl name='uart_set_options' mangled-name='uart_set_options' filepath='drivers/tty/serial/serial_core.c' line='2074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_set_options'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='2074' column='1'/>
+        <parameter type-id='b9aa0100' name='co' filepath='drivers/tty/serial/serial_core.c' line='2074' column='1'/>
+        <parameter type-id='95e97e5e' name='baud' filepath='drivers/tty/serial/serial_core.c' line='2075' column='1'/>
+        <parameter type-id='95e97e5e' name='parity' filepath='drivers/tty/serial/serial_core.c' line='2075' column='1'/>
+        <parameter type-id='95e97e5e' name='bits' filepath='drivers/tty/serial/serial_core.c' line='2075' column='1'/>
+        <parameter type-id='95e97e5e' name='flow' filepath='drivers/tty/serial/serial_core.c' line='2075' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_add_one_port' mangled-name='uart_add_one_port' filepath='drivers/tty/serial/serial_core.c' line='2805' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_add_one_port'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2805' column='1'/>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='2805' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_write_wakeup' mangled-name='uart_write_wakeup' filepath='drivers/tty/serial/serial_core.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_write_wakeup'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='96' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_update_timeout' mangled-name='uart_update_timeout' filepath='drivers/tty/serial/serial_core.c' line='332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_update_timeout'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='332' column='1'/>
+        <parameter type-id='f0981eeb' name='cflag' filepath='drivers/tty/serial/serial_core.c' line='332' column='1'/>
+        <parameter type-id='f0981eeb' name='baud' filepath='drivers/tty/serial/serial_core.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_unregister_driver' mangled-name='uart_unregister_driver' filepath='drivers/tty/serial/serial_core.c' line='2603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_unregister_driver'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2603' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_suspend_port' mangled-name='uart_suspend_port' filepath='drivers/tty/serial/serial_core.c' line='2167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_suspend_port'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2167' column='1'/>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='2167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_resume_port' mangled-name='uart_resume_port' filepath='drivers/tty/serial/serial_core.c' line='2229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_resume_port'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2229' column='1'/>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='2229' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_remove_one_port' mangled-name='uart_remove_one_port' filepath='drivers/tty/serial/serial_core.c' line='2908' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_remove_one_port'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2908' column='1'/>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='2908' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_register_driver' mangled-name='uart_register_driver' filepath='drivers/tty/serial/serial_core.c' line='2536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_register_driver'>
+        <parameter type-id='04a219de' name='drv' filepath='drivers/tty/serial/serial_core.c' line='2536' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uart_parse_options' mangled-name='uart_parse_options' filepath='drivers/tty/serial/serial_core.c' line='2047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_parse_options'>
+        <parameter type-id='80f4b756' name='options' filepath='drivers/tty/serial/serial_core.c' line='2047' column='1'/>
+        <parameter type-id='7292109c' name='baud' filepath='drivers/tty/serial/serial_core.c' line='2047' column='1'/>
+        <parameter type-id='7292109c' name='parity' filepath='drivers/tty/serial/serial_core.c' line='2047' column='1'/>
+        <parameter type-id='7292109c' name='bits' filepath='drivers/tty/serial/serial_core.c' line='2048' column='1'/>
+        <parameter type-id='7292109c' name='flow' filepath='drivers/tty/serial/serial_core.c' line='2048' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_insert_char' mangled-name='uart_insert_char' filepath='drivers/tty/serial/serial_core.c' line='3083' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_insert_char'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='3083' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/tty/serial/serial_core.c' line='3083' column='1'/>
+        <parameter type-id='f0981eeb' name='overrun' filepath='drivers/tty/serial/serial_core.c' line='3084' column='1'/>
+        <parameter type-id='f0981eeb' name='ch' filepath='drivers/tty/serial/serial_core.c' line='3084' column='1'/>
+        <parameter type-id='f0981eeb' name='flag' filepath='drivers/tty/serial/serial_core.c' line='3084' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_handle_dcd_change' mangled-name='uart_handle_dcd_change' filepath='drivers/tty/serial/serial_core.c' line='3012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_handle_dcd_change'>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='3012' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/tty/serial/serial_core.c' line='3012' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_handle_cts_change' mangled-name='uart_handle_cts_change' filepath='drivers/tty/serial/serial_core.c' line='3047' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_handle_cts_change'>
+        <parameter type-id='af051c69' name='uport' filepath='drivers/tty/serial/serial_core.c' line='3047' column='1'/>
+        <parameter type-id='f0981eeb' name='status' filepath='drivers/tty/serial/serial_core.c' line='3047' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_get_divisor' mangled-name='uart_get_divisor' filepath='drivers/tty/serial/serial_core.c' line='482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_get_divisor'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='482' column='1'/>
+        <parameter type-id='f0981eeb' name='baud' filepath='drivers/tty/serial/serial_core.c' line='482' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='uart_get_baud_rate' mangled-name='uart_get_baud_rate' filepath='drivers/tty/serial/serial_core.c' line='392' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_get_baud_rate'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='392' column='1'/>
+        <parameter type-id='e55856e5' name='termios' filepath='drivers/tty/serial/serial_core.c' line='392' column='1'/>
+        <parameter type-id='e55856e5' name='old' filepath='drivers/tty/serial/serial_core.c' line='393' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='drivers/tty/serial/serial_core.c' line='393' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='drivers/tty/serial/serial_core.c' line='393' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='uart_console_write' mangled-name='uart_console_write' filepath='drivers/tty/serial/serial_core.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_console_write'>
+        <parameter type-id='af051c69' name='port' filepath='drivers/tty/serial/serial_core.c' line='1936' column='1'/>
+        <parameter type-id='80f4b756' name='s' filepath='drivers/tty/serial/serial_core.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='drivers/tty/serial/serial_core.c' line='1937' column='1'/>
+        <parameter type-id='c6b7d75f' name='putchar' filepath='drivers/tty/serial/serial_core.c' line='1938' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='uart_console_device' mangled-name='uart_console_device' filepath='drivers/tty/serial/serial_core.c' line='2617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uart_console_device'>
+        <parameter type-id='b9aa0100' name='co' filepath='drivers/tty/serial/serial_core.c' line='2617' column='1'/>
+        <parameter type-id='7292109c' name='index' filepath='drivers/tty/serial/serial_core.c' line='2617' column='1'/>
+        <return type-id='c2b4b27b'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c14fce5d'>
+        <parameter type-id='af051c69'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03dc20ed'>
+        <parameter type-id='af051c69'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee6561a9'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='fbc594d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1d0c03e'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='48268ca6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b18e57b'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='a72a4e27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eac2b7d9'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fa1c03a'>
+        <parameter type-id='af051c69'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41df3a6f'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41c81272'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='89397116'>
+        <parameter type-id='af051c69'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c463253a'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0834640b'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6fe4054'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cebef22'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1b5c3fe'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='e55856e5'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d4c94570'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa99b0ae'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3636c828'>
+        <parameter type-id='af051c69'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='cc72711f' size-in-bits='64' id='a72a4e27'/>
+      <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='cc72711f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' 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='95e97e5e' 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='f0981eeb' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='8efea9e5' 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='a84c031d' 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='89feb1ec' 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='95e97e5e' 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='8efea9e5' 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='8efea9e5' 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='cf536864' 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='8efea9e5' 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='f0981eeb' 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='7359adad' visibility='default' filepath='include/uapi/linux/serial.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/sysrq.c' language='LANG_C89'>
+      <function-decl name='handle_sysrq' mangled-name='handle_sysrq' filepath='drivers/tty/sysrq.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_sysrq'>
+        <parameter type-id='95e97e5e' name='key' filepath='drivers/tty/sysrq.c' line='589' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_baudrate.c' language='LANG_C89'>
+      <function-decl name='tty_termios_encode_baud_rate' mangled-name='tty_termios_encode_baud_rate' filepath='drivers/tty/tty_baudrate.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_encode_baud_rate'>
+        <parameter type-id='e55856e5' name='termios' filepath='drivers/tty/tty_baudrate.c' line='145' column='1'/>
+        <parameter type-id='6a8e8a14' name='ibaud' filepath='drivers/tty/tty_baudrate.c' line='146' column='1'/>
+        <parameter type-id='6a8e8a14' name='obaud' filepath='drivers/tty/tty_baudrate.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_termios_baud_rate' mangled-name='tty_termios_baud_rate' filepath='drivers/tty/tty_baudrate.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_baud_rate'>
+        <parameter type-id='e55856e5' name='termios' filepath='drivers/tty/tty_baudrate.c' line='61' column='1'/>
+        <return type-id='6a8e8a14'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_buffer.c' language='LANG_C89'>
+      <function-decl name='tty_schedule_flip' mangled-name='tty_schedule_flip' filepath='drivers/tty/tty_buffer.c' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_schedule_flip'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='405' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_insert_flip_string_fixed_flag' mangled-name='tty_insert_flip_string_fixed_flag' filepath='drivers/tty/tty_buffer.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_insert_flip_string_fixed_flag'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='311' column='1'/>
+        <parameter type-id='354f7eb9' name='chars' filepath='drivers/tty/tty_buffer.c' line='312' column='1'/>
+        <parameter type-id='a84c031d' name='flag' filepath='drivers/tty/tty_buffer.c' line='312' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/tty/tty_buffer.c' line='312' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_flip_buffer_push' mangled-name='tty_flip_buffer_push' filepath='drivers/tty/tty_buffer.c' line='557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_flip_buffer_push'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='557' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tty_insert_flip_char' mangled-name='__tty_insert_flip_char' filepath='drivers/tty/tty_buffer.c' line='379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tty_insert_flip_char'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <parameter type-id='002ac4a6' name='ch' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <parameter type-id='a84c031d' name='flag' filepath='drivers/tty/tty_buffer.c' line='379' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_io.c' language='LANG_C89'>
+      <var-decl name='tty_std_termios' type-id='2f8662b5' mangled-name='tty_std_termios' visibility='default' filepath='drivers/tty/tty_io.c' line='121' column='1' elf-symbol-id='tty_std_termios'/>
+      <function-decl name='tty_kref_put' mangled-name='tty_kref_put' filepath='drivers/tty/tty_io.c' line='1485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_kref_put'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='1485' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_wakeup' mangled-name='tty_wakeup' filepath='drivers/tty/tty_io.c' line='527' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_wakeup'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='527' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_vhangup' mangled-name='tty_vhangup' filepath='drivers/tty/tty_io.c' line='694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_vhangup'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='694' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_unregister_driver' mangled-name='tty_unregister_driver' filepath='drivers/tty/tty_io.c' line='3379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_driver'>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_io.c' line='3379' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_unregister_device' mangled-name='tty_unregister_device' filepath='drivers/tty/tty_io.c' line='3190' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_device'>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_io.c' line='3190' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/tty/tty_io.c' line='3190' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_standard_install' mangled-name='tty_standard_install' filepath='drivers/tty/tty_io.c' line='1202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_standard_install'>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_io.c' line='1202' column='1'/>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='1202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_set_operations' mangled-name='tty_set_operations' filepath='drivers/tty/tty_io.c' line='3301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_set_operations'>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_io.c' line='3301' column='1'/>
+        <parameter type-id='f2c18b44' name='op' filepath='drivers/tty/tty_io.c' line='3302' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_register_driver' mangled-name='tty_register_driver' filepath='drivers/tty/tty_io.c' line='3317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_register_driver'>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_io.c' line='3317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_hangup' mangled-name='tty_hangup' filepath='drivers/tty/tty_io.c' line='677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_hangup'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='677' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='stop_tty' mangled-name='stop_tty' filepath='drivers/tty/tty_io.c' line='778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stop_tty'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='778' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='start_tty' mangled-name='start_tty' filepath='drivers/tty/tty_io.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='start_tty'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='810' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='put_tty_driver' mangled-name='put_tty_driver' filepath='drivers/tty/tty_io.c' line='3308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_tty_driver'>
+        <parameter type-id='c2b4b27b' name='d' filepath='drivers/tty/tty_io.c' line='3308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='do_SAK' mangled-name='do_SAK' filepath='drivers/tty/tty_io.c' line='2953' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_SAK'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_io.c' line='2953' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tty_alloc_driver' mangled-name='__tty_alloc_driver' filepath='drivers/tty/tty_io.c' line='3210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tty_alloc_driver'>
+        <parameter type-id='f0981eeb' name='lines' filepath='drivers/tty/tty_io.c' line='3210' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/tty/tty_io.c' line='3210' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='drivers/tty/tty_io.c' line='3211' column='1'/>
+        <return type-id='c2b4b27b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_ioctl.c' language='LANG_C89'>
+      <function-decl name='tty_unthrottle' mangled-name='tty_unthrottle' filepath='drivers/tty/tty_ioctl.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unthrottle'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_ioctl.c' line='134' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='n_tty_ioctl_helper' mangled-name='n_tty_ioctl_helper' filepath='drivers/tty/tty_ioctl.c' line='894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='n_tty_ioctl_helper'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_ioctl.c' line='894' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/tty/tty_ioctl.c' line='894' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/tty/tty_ioctl.c' line='895' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/tty/tty_ioctl.c' line='895' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_termios_copy_hw' mangled-name='tty_termios_copy_hw' filepath='drivers/tty/tty_ioctl.c' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_termios_copy_hw'>
+        <parameter type-id='e55856e5' name='new' filepath='drivers/tty/tty_ioctl.c' line='273' column='1'/>
+        <parameter type-id='e55856e5' name='old' filepath='drivers/tty/tty_ioctl.c' line='273' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_mode_ioctl' mangled-name='tty_mode_ioctl' filepath='drivers/tty/tty_ioctl.c' line='708' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_mode_ioctl'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_ioctl.c' line='708' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='drivers/tty/tty_ioctl.c' line='708' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='drivers/tty/tty_ioctl.c' line='709' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='drivers/tty/tty_ioctl.c' line='709' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_ldisc.c' language='LANG_C89'>
+      <function-decl name='tty_register_ldisc' mangled-name='tty_register_ldisc' filepath='drivers/tty/tty_ldisc.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_register_ldisc'>
+        <parameter type-id='95e97e5e' name='disc' filepath='drivers/tty/tty_ldisc.c' line='61' column='1'/>
+        <parameter type-id='9d632ac5' name='new_ldisc' filepath='drivers/tty/tty_ldisc.c' line='61' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_unregister_ldisc' mangled-name='tty_unregister_ldisc' filepath='drivers/tty/tty_ldisc.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_unregister_ldisc'>
+        <parameter type-id='95e97e5e' name='disc' filepath='drivers/tty/tty_ldisc.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_ldisc_ref' mangled-name='tty_ldisc_ref' filepath='drivers/tty/tty_ldisc.c' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_ldisc_ref'>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_ldisc.c' line='289' column='1'/>
+        <return type-id='e0bbd59c'/>
+      </function-decl>
+      <function-decl name='tty_ldisc_deref' mangled-name='tty_ldisc_deref' filepath='drivers/tty/tty_ldisc.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_ldisc_deref'>
+        <parameter type-id='e0bbd59c' name='ld' filepath='drivers/tty/tty_ldisc.c' line='310' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/tty/tty_port.c' language='LANG_C89'>
+      <function-decl name='tty_port_init' mangled-name='tty_port_init' filepath='drivers/tty/tty_port.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_init'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='61' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_wakeup' mangled-name='tty_port_tty_wakeup' filepath='drivers/tty/tty_port.c' line='386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_wakeup'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='386' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_hangup' mangled-name='tty_port_tty_hangup' filepath='drivers/tty/tty_port.c' line='371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_hangup'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='371' column='1'/>
+        <parameter type-id='b50a4934' name='check_clocal' filepath='drivers/tty/tty_port.c' line='371' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_tty_get' mangled-name='tty_port_tty_get' filepath='drivers/tty/tty_port.c' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_tty_get'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='283' column='1'/>
+        <return type-id='572fbdca'/>
+      </function-decl>
+      <function-decl name='tty_port_register_device' mangled-name='tty_port_register_device' filepath='drivers/tty/tty_port.c' line='108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_register_device'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='108' column='1'/>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_port.c' line='109' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/tty/tty_port.c' line='109' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/tty/tty_port.c' line='110' column='1'/>
+        <return type-id='fa0b179b'/>
+      </function-decl>
+      <function-decl name='tty_port_put' mangled-name='tty_port_put' filepath='drivers/tty/tty_port.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_put'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_open' mangled-name='tty_port_open' filepath='drivers/tty/tty_port.c' line='670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_open'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='670' column='1'/>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_port.c' line='670' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/tty/tty_port.c' line='671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tty_port_link_device' mangled-name='tty_port_link_device' filepath='drivers/tty/tty_port.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_link_device'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='88' column='1'/>
+        <parameter type-id='c2b4b27b' name='driver' filepath='drivers/tty/tty_port.c' line='89' column='1'/>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/tty/tty_port.c' line='89' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_hangup' mangled-name='tty_port_hangup' filepath='drivers/tty/tty_port.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_hangup'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='345' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_destroy' mangled-name='tty_port_destroy' filepath='drivers/tty/tty_port.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_destroy'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tty_port_close' mangled-name='tty_port_close' filepath='drivers/tty/tty_port.c' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tty_port_close'>
+        <parameter type-id='ec77b5b8' name='port' filepath='drivers/tty/tty_port.c' line='631' column='1'/>
+        <parameter type-id='572fbdca' name='tty' filepath='drivers/tty/tty_port.c' line='631' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='drivers/tty/tty_port.c' line='632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/uio/uio.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='c067c68a' size-in-bits='2240' id='1afbfcb5'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='4a82abb2' size-in-bits='1600' id='712dd60d'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='uio_info' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='100' column='1' id='f9c1a8c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uio_dev' type-id='776fd487' visibility='default' filepath='include/linux/uio_driver.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mem' type-id='1afbfcb5' visibility='default' filepath='include/linux/uio_driver.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='port' type-id='712dd60d' visibility='default' filepath='include/linux/uio_driver.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='irq' type-id='bd54fe1a' visibility='default' filepath='include/linux/uio_driver.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='irq_flags' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio_driver.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='handler' type-id='83705195' visibility='default' filepath='include/linux/uio_driver.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='mmap' type-id='011c3e5a' visibility='default' filepath='include/linux/uio_driver.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='open' type-id='71c75804' visibility='default' filepath='include/linux/uio_driver.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='release' type-id='71c75804' visibility='default' filepath='include/linux/uio_driver.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='irqcontrol' type-id='e5635fec' visibility='default' filepath='include/linux/uio_driver.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/uio_driver.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_device' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='70' column='1' id='1fbf855f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/uio_driver.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/uio_driver.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='minor' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7584'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/uio_driver.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/uio_driver.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/uio_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='info' type-id='fb1092f1' visibility='default' filepath='include/linux/uio_driver.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='info_lock' type-id='925167dc' visibility='default' filepath='include/linux/uio_driver.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='map_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/uio_driver.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='portio_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/uio_driver.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/uio_driver.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_mem' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='38' column='1' id='c067c68a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='2522883d' visibility='default' filepath='include/linux/uio_driver.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offs' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/uio_driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='memtype' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='internal_addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio_driver.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map' type-id='722604ad' visibility='default' filepath='include/linux/uio_driver.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_map' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/uio/uio.c' line='42' column='1' id='dd72818d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/uio/uio.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mem' type-id='93b82798' visibility='default' filepath='drivers/uio/uio.c' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_port' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/uio_driver.h' line='60' column='1' id='4a82abb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/uio_driver.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/uio_driver.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='porttype' type-id='95e97e5e' visibility='default' filepath='include/linux/uio_driver.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='portio' type-id='e190fb78' visibility='default' filepath='include/linux/uio_driver.h' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uio_portio' size-in-bits='832' is-struct='yes' visibility='default' filepath='drivers/uio/uio.c' line='125' column='1' id='9c34bcea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='drivers/uio/uio.c' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='port' type-id='c62e6860' visibility='default' filepath='drivers/uio/uio.c' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f347e46a' size-in-bits='64' id='71c75804'/>
+      <pointer-type-def type-id='52c77032' size-in-bits='64' id='e5635fec'/>
+      <pointer-type-def type-id='46c85660' size-in-bits='64' id='011c3e5a'/>
+      <pointer-type-def type-id='707953c1' size-in-bits='64' id='83705195'/>
+      <pointer-type-def type-id='1fbf855f' size-in-bits='64' id='776fd487'/>
+      <pointer-type-def type-id='f9c1a8c9' size-in-bits='64' id='fb1092f1'/>
+      <pointer-type-def type-id='dd72818d' size-in-bits='64' id='722604ad'/>
+      <pointer-type-def type-id='c067c68a' size-in-bits='64' id='93b82798'/>
+      <pointer-type-def type-id='4a82abb2' size-in-bits='64' id='c62e6860'/>
+      <pointer-type-def type-id='9c34bcea' size-in-bits='64' id='e190fb78'/>
+      <function-decl name='__uio_register_device' mangled-name='__uio_register_device' filepath='drivers/uio/uio.c' line='916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__uio_register_device'>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/uio/uio.c' line='916' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/uio/uio.c' line='917' column='1'/>
+        <parameter type-id='fb1092f1' name='info' filepath='drivers/uio/uio.c' line='918' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='uio_unregister_device' mangled-name='uio_unregister_device' filepath='drivers/uio/uio.c' line='1004' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='uio_unregister_device'>
+        <parameter type-id='fb1092f1' name='info' filepath='drivers/uio/uio.c' line='1004' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f347e46a'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52c77032'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46c85660'>
+        <parameter type-id='fb1092f1'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='707953c1'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='fb1092f1'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/common/common.c' language='LANG_C89'>
+      <enum-decl name='usb_otg_state' filepath='include/linux/usb/phy.h' line='44' column='1' id='4c0c8157'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='usb_dr_mode' filepath='include/linux/usb/otg.h' line='118' column='1' id='d291aaf1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DR_MODE_UNKNOWN' value='0'/>
+        <enumerator name='USB_DR_MODE_HOST' value='1'/>
+        <enumerator name='USB_DR_MODE_PERIPHERAL' value='2'/>
+        <enumerator name='USB_DR_MODE_OTG' value='3'/>
+      </enum-decl>
+      <function-decl name='usb_otg_state_string' mangled-name='usb_otg_state_string' filepath='drivers/usb/common/common.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_otg_state_string'>
+        <parameter type-id='4c0c8157' name='state' filepath='drivers/usb/common/common.c' line='37' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='usb_speed_string' mangled-name='usb_speed_string' filepath='drivers/usb/common/common.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_speed_string'>
+        <parameter type-id='4e532009' name='speed' filepath='drivers/usb/common/common.c' line='72' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='usb_get_maximum_speed' mangled-name='usb_get_maximum_speed' filepath='drivers/usb/common/common.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_maximum_speed'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/common/common.c' line='80' column='1'/>
+        <return type-id='4e532009'/>
+      </function-decl>
+      <function-decl name='usb_get_dr_mode' mangled-name='usb_get_dr_mode' filepath='drivers/usb/common/common.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dr_mode'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/common/common.c' line='131' column='1'/>
+        <return type-id='d291aaf1'/>
+      </function-decl>
+      <function-decl name='of_usb_host_tpl_support' mangled-name='of_usb_host_tpl_support' filepath='drivers/usb/common/common.c' line='208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_usb_host_tpl_support'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/usb/common/common.c' line='208' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/common/debug.c' language='LANG_C89'>
+      <function-decl name='usb_decode_ctrl' mangled-name='usb_decode_ctrl' filepath='drivers/usb/common/debug.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_decode_ctrl'>
+        <parameter type-id='26a90f95' name='str' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='8f048e17' name='bRequestType' filepath='drivers/usb/common/debug.c' line='213' column='1'/>
+        <parameter type-id='8f048e17' name='bRequest' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wValue' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wIndex' filepath='drivers/usb/common/debug.c' line='214' column='1'/>
+        <parameter type-id='d315442e' name='wLength' filepath='drivers/usb/common/debug.c' line='215' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/driver.c' language='LANG_C89'>
+      <class-decl name='usb_driver' size-in-bits='2688' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1204' column='1' id='1ab3428c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='a324decb' visibility='default' filepath='include/linux/usb.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disconnect' type-id='b6566954' visibility='default' filepath='include/linux/usb.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unlocked_ioctl' type-id='52006477' visibility='default' filepath='include/linux/usb.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='31eb8cc0' visibility='default' filepath='include/linux/usb.h' line='1215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reset_resume' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pre_reset' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='post_reset' type-id='46d1c941' visibility='default' filepath='include/linux/usb.h' line='1220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_table' type-id='bc57058f' visibility='default' filepath='include/linux/usb.h' line='1222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/usb.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dynids' type-id='cb08bae1' visibility='default' filepath='include/linux/usb.h' line='1225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='drvwrap' type-id='33780378' visibility='default' filepath='include/linux/usb.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='no_dynamic_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='supports_autosuspend' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='disable_hub_initiated_lpm' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='soft_unbind' type-id='f0981eeb' visibility='default' filepath='include/linux/usb.h' line='1230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb.h' line='1235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_dynids' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1111' column='1' id='cb08bae1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb.h' line='1113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usbdrv_wrap' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1133' column='1' id='33780378'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='for_devices' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1135' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b2a0d9d' size-in-bits='64' id='46d1c941'/>
+      <pointer-type-def type-id='84e4381f' size-in-bits='64' id='a324decb'/>
+      <pointer-type-def type-id='284cd8d6' size-in-bits='64' id='31eb8cc0'/>
+      <pointer-type-def type-id='25c33493' size-in-bits='64' id='52006477'/>
+      <pointer-type-def type-id='1ab3428c' size-in-bits='64' id='46ae908a'/>
+      <pointer-type-def type-id='cb08bae1' size-in-bits='64' id='32c73a29'/>
+      <pointer-type-def type-id='3434ed92' size-in-bits='64' id='b6566954'/>
+      <function-decl name='usb_deregister' mangled-name='usb_deregister' filepath='drivers/usb/core/driver.c' line='997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_deregister'>
+        <parameter type-id='46ae908a' name='driver' filepath='drivers/usb/core/driver.c' line='997' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_register_driver' mangled-name='usb_register_driver' filepath='drivers/usb/core/driver.c' line='943' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_register_driver'>
+        <parameter type-id='46ae908a' name='new_driver' filepath='drivers/usb/core/driver.c' line='943' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/usb/core/driver.c' line='943' column='1'/>
+        <parameter type-id='80f4b756' name='mod_name' filepath='drivers/usb/core/driver.c' line='944' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_driver_release_interface' mangled-name='usb_driver_release_interface' filepath='drivers/usb/core/driver.c' line='578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_driver_release_interface'>
+        <parameter type-id='46ae908a' name='driver' filepath='drivers/usb/core/driver.c' line='578' column='1'/>
+        <parameter type-id='8bf48c31' name='iface' filepath='drivers/usb/core/driver.c' line='579' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_driver_claim_interface' mangled-name='usb_driver_claim_interface' filepath='drivers/usb/core/driver.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_driver_claim_interface'>
+        <parameter type-id='46ae908a' name='driver' filepath='drivers/usb/core/driver.c' line='504' column='1'/>
+        <parameter type-id='8bf48c31' name='iface' filepath='drivers/usb/core/driver.c' line='505' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='drivers/usb/core/driver.c' line='505' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface_no_resume' mangled-name='usb_autopm_get_interface_no_resume' filepath='drivers/usb/core/driver.c' line='1763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface_no_resume'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1763' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface_no_suspend' mangled-name='usb_autopm_put_interface_no_suspend' filepath='drivers/usb/core/driver.c' line='1677' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface_no_suspend'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1677' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_store_new_id' mangled-name='usb_store_new_id' filepath='drivers/usb/core/driver.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_store_new_id'>
+        <parameter type-id='32c73a29' name='dynids' filepath='drivers/usb/core/driver.c' line='42' column='1'/>
+        <parameter type-id='bc57058f' name='id_table' filepath='drivers/usb/core/driver.c' line='43' column='1'/>
+        <parameter type-id='00c7b870' name='driver' filepath='drivers/usb/core/driver.c' line='44' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='drivers/usb/core/driver.c' line='45' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='drivers/usb/core/driver.c' line='45' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='usb_show_dynids' mangled-name='usb_show_dynids' filepath='drivers/usb/core/driver.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_show_dynids'>
+        <parameter type-id='32c73a29' name='dynids' filepath='drivers/usb/core/driver.c' line='114' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/usb/core/driver.c' line='114' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='usb_match_one_id' mangled-name='usb_match_one_id' filepath='drivers/usb/core/driver.c' line='678' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_match_one_id'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/driver.c' line='678' column='1'/>
+        <parameter type-id='bc57058f' name='id' filepath='drivers/usb/core/driver.c' line='679' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_match_id' mangled-name='usb_match_id' filepath='drivers/usb/core/driver.c' line='771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_match_id'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/driver.c' line='771' column='1'/>
+        <parameter type-id='bc57058f' name='id' filepath='drivers/usb/core/driver.c' line='772' column='1'/>
+        <return type-id='bc57058f'/>
+      </function-decl>
+      <function-decl name='usb_enable_autosuspend' mangled-name='usb_enable_autosuspend' filepath='drivers/usb/core/driver.c' line='1529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_enable_autosuspend'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/driver.c' line='1529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface_async' mangled-name='usb_autopm_put_interface_async' filepath='drivers/usb/core/driver.c' line='1655' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface_async'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1655' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_put_interface' mangled-name='usb_autopm_put_interface' filepath='drivers/usb/core/driver.c' line='1627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_put_interface'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1627' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface_async' mangled-name='usb_autopm_get_interface_async' filepath='drivers/usb/core/driver.c' line='1738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface_async'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_autopm_get_interface' mangled-name='usb_autopm_get_interface' filepath='drivers/usb/core/driver.c' line='1705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_autopm_get_interface'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/driver.c' line='1705' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b2a0d9d'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84e4381f'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='bc57058f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='284cd8d6'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='08496218'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25c33493'>
+        <parameter type-id='8bf48c31'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3434ed92'>
+        <parameter type-id='8bf48c31'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/hcd-pci.c' language='LANG_C89'>
+      <var-decl name='usb_hcd_pci_pm_ops' type-id='86af1d10' mangled-name='usb_hcd_pci_pm_ops' visibility='default' filepath='drivers/usb/core/hcd-pci.c' line='602' column='1' elf-symbol-id='usb_hcd_pci_pm_ops'/>
+      <function-decl name='usb_hcd_pci_shutdown' mangled-name='usb_hcd_pci_shutdown' filepath='drivers/usb/core/hcd-pci.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_shutdown'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/usb/core/hcd-pci.c' line='353' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_pci_remove' mangled-name='usb_hcd_pci_remove' filepath='drivers/usb/core/hcd-pci.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_remove'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/usb/core/hcd-pci.c' line='310' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_pci_probe' mangled-name='usb_hcd_pci_probe' filepath='drivers/usb/core/hcd-pci.c' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_pci_probe'>
+        <parameter type-id='85196e3f' name='dev' filepath='drivers/usb/core/hcd-pci.c' line='172' column='1'/>
+        <parameter type-id='92fc8aa5' name='id' filepath='drivers/usb/core/hcd-pci.c' line='172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/hcd.c' language='LANG_C89'>
+      <class-decl name='extcon_dev' size-in-bits='8960' is-struct='yes' visibility='default' filepath='drivers/extcon/extcon.h' line='41' column='1' id='87a2d33c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='drivers/extcon/extcon.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supported_cable' type-id='5b2fd8e8' visibility='default' filepath='drivers/extcon/extcon.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutually_exclusive' type-id='aded214c' visibility='default' filepath='drivers/extcon/extcon.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/extcon/extcon.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='nh_all' type-id='96e74f5f' visibility='default' filepath='drivers/extcon/extcon.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='nh' type-id='dc20ab67' visibility='default' filepath='drivers/extcon/extcon.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='drivers/extcon/extcon.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='max_supported' type-id='95e97e5e' visibility='default' filepath='drivers/extcon/extcon.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7968'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='drivers/extcon/extcon.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='drivers/extcon/extcon.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='extcon_dev_type' type-id='bdae35f4' visibility='default' filepath='drivers/extcon/extcon.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cables' type-id='e07a8e4c' visibility='default' filepath='drivers/extcon/extcon.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='attr_g_muex' type-id='e4af473b' visibility='default' filepath='drivers/extcon/extcon.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='attrs_muex' type-id='862c676f' visibility='default' filepath='drivers/extcon/extcon.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='d_attrs_muex' type-id='89a2612a' visibility='default' filepath='drivers/extcon/extcon.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget' size-in-bits='8896' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='408' column='1' id='54f638e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/gadget.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='udc' type-id='d872b366' visibility='default' filepath='include/linux/usb/gadget.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='1d94d806' visibility='default' filepath='include/linux/usb/gadget.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ep0' type-id='63a08bf7' visibility='default' filepath='include/linux/usb/gadget.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='state' type-id='901a91cb' visibility='default' filepath='include/linux/usb/gadget.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/gadget.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='isoch_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='out_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='in_epnum' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='mA' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='otg_caps' type-id='451a0588' visibility='default' filepath='include/linux/usb/gadget.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_otg' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_a_peripheral' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='b_hnp_enable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='a_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='a_alt_hnp_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='hnp_polling_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='host_request_flag' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='quirk_ep_out_aligned_size' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='quirk_altset_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='quirk_stall_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='quirk_zlp_not_supp' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='quirk_avoids_skb_reserve' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='is_selfpowered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='connected' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='lpm_capable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='448' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy_roothub' is-struct='yes' visibility='default' is-declaration-only='yes' id='ceda742d'/>
+      <array-type-def dimensions='1' type-id='ab33c616' size-in-bits='256' id='9d8055ec'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='usb_hcd' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='83' column='1' id='392af4e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='fa4d7704' visibility='default' filepath='include/linux/usb/hcd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/usb/hcd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='speed' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='irq_descr' type-id='6653bb13' visibility='default' filepath='include/linux/usb/hcd.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rh_timer' type-id='abe41e67' visibility='default' filepath='include/linux/usb/hcd.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='status_urb' type-id='ab85b8f2' visibility='default' filepath='include/linux/usb/hcd.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='wakeup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='died_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/hcd.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='driver' type-id='5aa12c86' visibility='default' filepath='include/linux/usb/hcd.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/hcd.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='phy_roothub' type-id='7befabdd' visibility='default' filepath='include/linux/usb/hcd.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/usb/hcd.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dev_policy' type-id='7e6e640d' visibility='default' filepath='include/linux/usb/hcd.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rh_registered' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='rh_pollable' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='msix_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='msi_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skip_phy_initialization' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='uses_new_polling' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='wireless' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='has_tt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='amd_resume_bug' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='can_do_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='tpl_support' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='cant_recv_wakeups' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='regs' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/hcd.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='rsrc_start' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='rsrc_len' type-id='acc63fdf' visibility='default' filepath='include/linux/usb/hcd.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='power_budget' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/hcd.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='high_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='low_prio_bh' type-id='63972aea' visibility='default' filepath='include/linux/usb/hcd.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='address0_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='bandwidth_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/hcd.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='shared_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='primary_hcd' type-id='fc4f83c1' visibility='default' filepath='include/linux/usb/hcd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='pool' type-id='9d8055ec' visibility='default' filepath='include/linux/usb/hcd.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='localmem_pool' type-id='75b9415a' visibility='default' filepath='include/linux/usb/hcd.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='hcd_priv' type-id='c99b5ecd' visibility='default' filepath='include/linux/usb/hcd.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hc_driver' size-in-bits='3264' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='256' column='1' id='519497e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product_desc' type-id='80f4b756' visibility='default' filepath='include/linux/usb/hcd.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hcd_priv_size' type-id='b59d7dce' visibility='default' filepath='include/linux/usb/hcd.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq' type-id='a4e9cbb0' visibility='default' filepath='include/linux/usb/hcd.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/hcd.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reset' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='start' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pci_suspend' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pci_resume' type-id='f49825dc' visibility='default' filepath='include/linux/usb/hcd.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='2638ad78' visibility='default' filepath='include/linux/usb/hcd.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_frame_number' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='urb_enqueue' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='urb_dequeue' type-id='909b5775' visibility='default' filepath='include/linux/usb/hcd.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_urb_for_dma' type-id='26f734e7' visibility='default' filepath='include/linux/usb/hcd.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='unmap_urb_for_dma' type-id='da12244f' visibility='default' filepath='include/linux/usb/hcd.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='endpoint_disable' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='endpoint_reset' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hub_status_data' type-id='34083223' visibility='default' filepath='include/linux/usb/hcd.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hub_control' type-id='82a5e0a9' visibility='default' filepath='include/linux/usb/hcd.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bus_suspend' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bus_resume' type-id='3d4f6569' visibility='default' filepath='include/linux/usb/hcd.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_port_reset' type-id='52f4f223' visibility='default' filepath='include/linux/usb/hcd.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_resuming_ports' type-id='3e34b3ae' visibility='default' filepath='include/linux/usb/hcd.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='relinquish_port' type-id='0d7f0367' visibility='default' filepath='include/linux/usb/hcd.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='port_handed_over' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='clear_tt_buffer_complete' type-id='e1007da7' visibility='default' filepath='include/linux/usb/hcd.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='alloc_dev' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='free_dev' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='alloc_streams' type-id='c1729c2a' visibility='default' filepath='include/linux/usb/hcd.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='free_streams' type-id='473afbc8' visibility='default' filepath='include/linux/usb/hcd.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='add_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='drop_endpoint' type-id='2c3372f7' visibility='default' filepath='include/linux/usb/hcd.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='check_bandwidth' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='reset_bandwidth' type-id='b48dadb7' visibility='default' filepath='include/linux/usb/hcd.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='address_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='enable_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='update_hub_device' type-id='cf0b24c2' visibility='default' filepath='include/linux/usb/hcd.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reset_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='update_device' type-id='530cb308' visibility='default' filepath='include/linux/usb/hcd.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_usb2_hw_lpm' type-id='8ceda7f7' visibility='default' filepath='include/linux/usb/hcd.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='enable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='disable_usb3_lpm_timeout' type-id='280dcd9f' visibility='default' filepath='include/linux/usb/hcd.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='find_raw_port_number' type-id='ef2f6230' visibility='default' filepath='include/linux/usb/hcd.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='port_power' type-id='57938551' visibility='default' filepath='include/linux/usb/hcd.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='android_vendor_data1' type-id='24a375b2' visibility='default' filepath='include/linux/usb/hcd.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/hcd.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb3_link_state' filepath='include/uapi/linux/usb/ch9.h' line='1177' column='1' id='cee9c4f2'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2880' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='89' column='1' id='f7de2149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/phy.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='type' type-id='d95f4827' visibility='default' filepath='include/linux/usb/phy.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_event' type-id='278dd9ca' visibility='default' filepath='include/linux/usb/phy.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='otg' type-id='22be78e8' visibility='default' filepath='include/linux/usb/phy.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='io_dev' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/phy.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='io_ops' type-id='aae1a0f1' visibility='default' filepath='include/linux/usb/phy.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/phy.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='edev' type-id='c0d6fada' visibility='default' filepath='include/linux/usb/phy.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='id_edev' type-id='c0d6fada' visibility='default' filepath='include/linux/usb/phy.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vbus_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='type_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/usb/phy.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='chg_type' type-id='eba182c8' visibility='default' filepath='include/linux/usb/phy.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='chg_state' type-id='6d659af5' visibility='default' filepath='include/linux/usb/phy.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='chg_cur' type-id='c1a2a792' visibility='default' filepath='include/linux/usb/phy.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='chg_work' type-id='ef9025d0' visibility='default' filepath='include/linux/usb/phy.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='notifier' type-id='dbd58f6e' visibility='default' filepath='include/linux/usb/phy.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='port_status' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2064'>
+          <var-decl name='port_change' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/phy.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/phy.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='init' type-id='dd6ccf15' visibility='default' filepath='include/linux/usb/phy.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shutdown' type-id='6cd1df94' visibility='default' filepath='include/linux/usb/phy.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='set_vbus' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='set_power' type-id='2d642297' visibility='default' filepath='include/linux/usb/phy.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='set_suspend' type-id='fc1fbe7c' visibility='default' filepath='include/linux/usb/phy.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='set_wakeup' type-id='523228f0' visibility='default' filepath='include/linux/usb/phy.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='notify_connect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='notify_disconnect' type-id='2f4077f3' visibility='default' filepath='include/linux/usb/phy.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='charger_detect' type-id='c4884d33' visibility='default' filepath='include/linux/usb/phy.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/phy.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_phy_type' filepath='include/linux/usb/phy.h' line='37' column='1' id='d95f4827'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='28' column='1' id='278dd9ca'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='768' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='17' column='1' id='6e3d524a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_a' type-id='f9b06939' visibility='default' filepath='include/linux/usb/otg.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='phy' type-id='503ff1ba' visibility='default' filepath='include/linux/usb/otg.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_phy' type-id='ca9354d1' visibility='default' filepath='include/linux/usb/otg.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='host' type-id='3ab7d422' visibility='default' filepath='include/linux/usb/otg.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gadget' type-id='49a58c0c' visibility='default' filepath='include/linux/usb/otg.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='4c0c8157' visibility='default' filepath='include/linux/usb/otg.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_host' type-id='40b8ad2b' visibility='default' filepath='include/linux/usb/otg.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_peripheral' type-id='ba1d878d' visibility='default' filepath='include/linux/usb/otg.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vbus' type-id='c1ee9321' visibility='default' filepath='include/linux/usb/otg.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='start_srp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='start_hnp' type-id='988d1520' visibility='default' filepath='include/linux/usb/otg.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/otg.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_phy_io_ops' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/phy.h' line='73' column='1' id='b6b55329'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='90c0e85c' visibility='default' filepath='include/linux/usb/phy.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='a52d0b9b' visibility='default' filepath='include/linux/usb/phy.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_charger_type' filepath='include/uapi/linux/usb/charger.h' line='16' column='1' id='eba182c8'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='6d659af5'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='78' column='1' id='c1a2a792'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dcp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dcp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cdp_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='cdp_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_min' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='aca_max' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/phy.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='usb_dev_authorize_policy' filepath='include/linux/usb/hcd.h' line='77' column='1' id='7e6e640d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_NONE' value='0'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_ALL' value='1'/>
+        <enumerator name='USB_DEVICE_AUTHORIZE_INTERNAL' value='2'/>
+      </enum-decl>
+      <class-decl name='giveback_urb_bh' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/hcd.h' line='69' column='1' id='63972aea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='running' type-id='b50a4934' visibility='default' filepath='include/linux/usb/hcd.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/hcd.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/usb/hcd.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bh' type-id='7a7ea727' visibility='default' filepath='include/linux/usb/hcd.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='completing_ep' type-id='15adb516' visibility='default' filepath='include/linux/usb/hcd.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='519497e3' const='yes' id='8f118d08'/>
+      <pointer-type-def type-id='8f118d08' size-in-bits='64' id='5aa12c86'/>
+      <pointer-type-def type-id='b7022237' size-in-bits='64' id='c4884d33'/>
+      <pointer-type-def type-id='87a2d33c' size-in-bits='64' id='c0d6fada'/>
+      <pointer-type-def type-id='84096265' size-in-bits='64' id='3d4f6569'/>
+      <pointer-type-def type-id='7f416417' size-in-bits='64' id='34083223'/>
+      <pointer-type-def type-id='e86b7946' size-in-bits='64' id='ef2f6230'/>
+      <pointer-type-def type-id='2457cbe5' size-in-bits='64' id='57938551'/>
+      <pointer-type-def type-id='b0922992' size-in-bits='64' id='f49825dc'/>
+      <pointer-type-def type-id='0b4fb7b5' size-in-bits='64' id='82a5e0a9'/>
+      <pointer-type-def type-id='285e362f' size-in-bits='64' id='52f4f223'/>
+      <pointer-type-def type-id='3e298e69' size-in-bits='64' id='909b5775'/>
+      <pointer-type-def type-id='58c82a2b' size-in-bits='64' id='26f734e7'/>
+      <pointer-type-def type-id='f8b5874e' size-in-bits='64' id='530cb308'/>
+      <pointer-type-def type-id='a24a51b3' size-in-bits='64' id='280dcd9f'/>
+      <pointer-type-def type-id='e09dbee3' size-in-bits='64' id='8ceda7f7'/>
+      <pointer-type-def type-id='a8fc2a93' size-in-bits='64' id='2c3372f7'/>
+      <pointer-type-def type-id='96a19766' size-in-bits='64' id='473afbc8'/>
+      <pointer-type-def type-id='84ec62b0' size-in-bits='64' id='c1729c2a'/>
+      <pointer-type-def type-id='98789900' size-in-bits='64' id='cf0b24c2'/>
+      <pointer-type-def type-id='db1d8e86' size-in-bits='64' id='988d1520'/>
+      <pointer-type-def type-id='d2460aa5' size-in-bits='64' id='c1ee9321'/>
+      <pointer-type-def type-id='82014c8f' size-in-bits='64' id='40b8ad2b'/>
+      <pointer-type-def type-id='d9609309' size-in-bits='64' id='ba1d878d'/>
+      <pointer-type-def type-id='fa93dbe1' size-in-bits='64' id='dd6ccf15'/>
+      <pointer-type-def type-id='9502627f' size-in-bits='64' id='2f4077f3'/>
+      <pointer-type-def type-id='9b07d522' size-in-bits='64' id='fc1fbe7c'/>
+      <pointer-type-def type-id='5c3855b6' size-in-bits='64' id='523228f0'/>
+      <pointer-type-def type-id='3e0660a2' size-in-bits='64' id='90c0e85c'/>
+      <pointer-type-def type-id='277480c7' size-in-bits='64' id='a52d0b9b'/>
+      <pointer-type-def type-id='154f1323' size-in-bits='64' id='2d642297'/>
+      <pointer-type-def type-id='3a0b2d1e' size-in-bits='64' id='a4e9cbb0'/>
+      <pointer-type-def type-id='78932bbc' size-in-bits='64' id='3e34b3ae'/>
+      <pointer-type-def type-id='54f638e6' size-in-bits='64' id='49a58c0c'/>
+      <pointer-type-def type-id='392af4e9' size-in-bits='64' id='fc4f83c1'/>
+      <pointer-type-def type-id='15adb516' size-in-bits='64' id='5c744d74'/>
+      <pointer-type-def type-id='6e3d524a' size-in-bits='64' id='22be78e8'/>
+      <pointer-type-def type-id='f7de2149' size-in-bits='64' id='ca9354d1'/>
+      <pointer-type-def type-id='b6b55329' size-in-bits='64' id='aae1a0f1'/>
+      <pointer-type-def type-id='ceda742d' size-in-bits='64' id='7befabdd'/>
+      <pointer-type-def type-id='54b8f32e' size-in-bits='64' id='2638ad78'/>
+      <pointer-type-def type-id='3870c7c3' size-in-bits='64' id='0d7f0367'/>
+      <pointer-type-def type-id='c51e5ffb' size-in-bits='64' id='da12244f'/>
+      <pointer-type-def type-id='6cef7733' size-in-bits='64' id='b48dadb7'/>
+      <pointer-type-def type-id='f4bdc973' size-in-bits='64' id='e1007da7'/>
+      <pointer-type-def type-id='f65a797a' size-in-bits='64' id='6cd1df94'/>
+      <function-decl name='usb_hcd_map_urb_for_dma' mangled-name='usb_hcd_map_urb_for_dma' filepath='drivers/usb/core/hcd.c' line='1404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_map_urb_for_dma'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1404' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1404' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/hcd.c' line='1405' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <var-decl name='usb_hcds_loaded' type-id='7359adad' mangled-name='usb_hcds_loaded' visibility='default' filepath='drivers/usb/core/hcd.c' line='80' column='1' elf-symbol-id='usb_hcds_loaded'/>
+      <function-decl name='usb_put_hcd' mangled-name='usb_put_hcd' filepath='drivers/usb/core/hcd.c' line='2560' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_hcd'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2560' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_remove_hcd' mangled-name='usb_remove_hcd' filepath='drivers/usb/core/hcd.c' line='2848' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_remove_hcd'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2848' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_unmap_urb_for_dma' mangled-name='usb_hcd_unmap_urb_for_dma' filepath='drivers/usb/core/hcd.c' line='1357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unmap_urb_for_dma'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1357' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1357' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_unlink_urb_from_ep'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1242' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1242' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_resume_root_hub' mangled-name='usb_hcd_resume_root_hub' filepath='drivers/usb/core/hcd.c' line='2257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_resume_root_hub'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2257' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_poll_rh_status' mangled-name='usb_hcd_poll_rh_status' filepath='drivers/usb/core/hcd.c' line='752' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_poll_rh_status'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='752' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_giveback_urb' mangled-name='usb_hcd_giveback_urb' filepath='drivers/usb/core/hcd.c' line='1716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_giveback_urb'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1716' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1716' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='drivers/usb/core/hcd.c' line='1716' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hcd_platform_shutdown' mangled-name='usb_hcd_platform_shutdown' filepath='drivers/usb/core/hcd.c' line='2916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_platform_shutdown'>
+        <parameter type-id='db362995' name='dev' filepath='drivers/usb/core/hcd.c' line='2916' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='1151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_link_urb_to_ep'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1151' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1151' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_hcd_is_primary_hcd' mangled-name='usb_hcd_is_primary_hcd' filepath='drivers/usb/core/hcd.c' line='2567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_is_primary_hcd'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2567' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_hcd_check_unlink_urb' mangled-name='usb_hcd_check_unlink_urb' filepath='drivers/usb/core/hcd.c' line='1209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hcd_check_unlink_urb'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='1209' column='1'/>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/hcd.c' line='1209' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='drivers/usb/core/hcd.c' line='1210' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_hc_died' mangled-name='usb_hc_died' filepath='drivers/usb/core/hcd.c' line='2367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hc_died'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2367' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_free_streams' mangled-name='usb_free_streams' filepath='drivers/usb/core/hcd.c' line='2061' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_streams'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/hcd.c' line='2061' column='1'/>
+        <parameter type-id='5c744d74' name='eps' filepath='drivers/usb/core/hcd.c' line='2062' column='1'/>
+        <parameter type-id='f0981eeb' name='num_eps' filepath='drivers/usb/core/hcd.c' line='2062' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/hcd.c' line='2063' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_create_hcd' mangled-name='usb_create_hcd' filepath='drivers/usb/core/hcd.c' line='2518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_create_hcd'>
+        <parameter type-id='5aa12c86' name='driver' filepath='drivers/usb/core/hcd.c' line='2518' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/core/hcd.c' line='2519' column='1'/>
+        <parameter type-id='80f4b756' name='bus_name' filepath='drivers/usb/core/hcd.c' line='2519' column='1'/>
+        <return type-id='fc4f83c1'/>
+      </function-decl>
+      <function-decl name='usb_calc_bus_time' mangled-name='usb_calc_bus_time' filepath='drivers/usb/core/hcd.c' line='1092' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_calc_bus_time'>
+        <parameter type-id='95e97e5e' name='speed' filepath='drivers/usb/core/hcd.c' line='1092' column='1'/>
+        <parameter type-id='95e97e5e' name='is_input' filepath='drivers/usb/core/hcd.c' line='1092' column='1'/>
+        <parameter type-id='95e97e5e' name='isoc' filepath='drivers/usb/core/hcd.c' line='1092' column='1'/>
+        <parameter type-id='95e97e5e' name='bytecount' filepath='drivers/usb/core/hcd.c' line='1092' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='usb_alloc_streams' mangled-name='usb_alloc_streams' filepath='drivers/usb/core/hcd.c' line='2011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_streams'>
+        <parameter type-id='8bf48c31' name='interface' filepath='drivers/usb/core/hcd.c' line='2011' column='1'/>
+        <parameter type-id='5c744d74' name='eps' filepath='drivers/usb/core/hcd.c' line='2012' column='1'/>
+        <parameter type-id='f0981eeb' name='num_eps' filepath='drivers/usb/core/hcd.c' line='2012' column='1'/>
+        <parameter type-id='f0981eeb' name='num_streams' filepath='drivers/usb/core/hcd.c' line='2013' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/hcd.c' line='2013' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_add_hcd' mangled-name='usb_add_hcd' filepath='drivers/usb/core/hcd.c' line='2641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_hcd'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/core/hcd.c' line='2641' column='1'/>
+        <parameter type-id='f0981eeb' name='irqnum' filepath='drivers/usb/core/hcd.c' line='2642' column='1'/>
+        <parameter type-id='7359adad' name='irqflags' filepath='drivers/usb/core/hcd.c' line='2642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-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='dbd58f6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='54286388' size-in-bits='64' id='1d94d806'/>
+      <pointer-type-def type-id='2bf33030' size-in-bits='64' id='ab33c616'/>
+      <function-type size-in-bits='64' id='b7022237'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='eba182c8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84096265'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f416417'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e86b7946'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2457cbe5'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0922992'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b4fb7b5'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='285e362f'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e298e69'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='58c82a2b'>
+        <parameter type-id='fc4f83c1' name='hcd'/>
+        <parameter type-id='ab85b8f2' name='urb'/>
+        <parameter type-id='3eb7c31c' name='mem_flags'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8b5874e'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a24a51b3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='cee9c4f2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e09dbee3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a8fc2a93'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='15adb516'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96a19766'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84ec62b0'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='5c744d74'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98789900'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <parameter type-id='bf95a8f0'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='db1d8e86'>
+        <parameter type-id='22be78e8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d2460aa5'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82014c8f'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='3ab7d422'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9609309'>
+        <parameter type-id='22be78e8'/>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa93dbe1'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9502627f'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='4e532009'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b07d522'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c3855b6'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e0660a2'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='277480c7'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='154f1323'>
+        <parameter type-id='ca9354d1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a0b2d1e'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78932bbc'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54b8f32e'>
+        <parameter type-id='fc4f83c1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3870c7c3'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c51e5ffb'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6cef7733'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='25e60cb2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f4bdc973'>
+        <parameter type-id='fc4f83c1'/>
+        <parameter type-id='15adb516'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f65a797a'>
+        <parameter type-id='ca9354d1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='171b0f6c' size-in-bits='64' id='75b9415a'/>
+      <pointer-type-def type-id='8005701f' size-in-bits='64' id='63a08bf7'/>
+      <pointer-type-def type-id='e994232a' size-in-bits='64' id='451a0588'/>
+      <pointer-type-def type-id='1ee0d0f0' size-in-bits='64' id='d872b366'/>
+      <class-decl name='dma_pool' size-in-bits='832' is-struct='yes' visibility='default' filepath='mm/dmapool.c' line='42' column='1' id='2bf33030'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='mm/dmapool.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='mm/dmapool.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocation' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='boundary' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='mm/dmapool.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pools' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gen_pool' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/genalloc.h' line='58' column='1' id='171b0f6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/genalloc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chunks' type-id='72f469ec' visibility='default' filepath='include/linux/genalloc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_alloc_order' type-id='95e97e5e' visibility='default' filepath='include/linux/genalloc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='algo' type-id='00278b91' visibility='default' filepath='include/linux/genalloc.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genalloc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/genalloc.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='227' column='1' id='8005701f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='ea2a1f7d' visibility='default' filepath='include/linux/usb/gadget.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='caps' type-id='14d94f61' visibility='default' filepath='include/linux/usb/gadget.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='claimed' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxpacket_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mult' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='maxburst' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='address' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='desc' type-id='428819c0' visibility='default' filepath='include/linux/usb/gadget.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='comp_desc' type-id='c6228d99' visibility='default' filepath='include/linux/usb/gadget.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_otg_caps' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='55' column='1' id='e994232a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='otg_rev' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/otg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hnp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='srp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_udc' size-in-bits='7808' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='36' column='1' id='1ee0d0f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9762ede1' 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='49a58c0c' 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='66e487eb' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='vbus' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='83cac475' const='yes' id='54286388'/>
+      <class-decl name='usb_ep_caps' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='167' column='1' id='14d94f61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_control' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='type_iso' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='type_bulk' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='type_int' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dir_in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dir_out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='173' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='314' column='1' id='83cac475'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_frame' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wakeup' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_selfpowered' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vbus_session' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbus_draw' type-id='86ec8614' visibility='default' filepath='include/linux/usb/gadget.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pullup' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='11f75c44' visibility='default' filepath='include/linux/usb/gadget.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_config_params' type-id='b90a2617' visibility='default' filepath='include/linux/usb/gadget.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udc_start' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udc_stop' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='udc_set_speed' type-id='20950ec7' visibility='default' filepath='include/linux/usb/gadget.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='match_ep' type-id='9f35b348' visibility='default' filepath='include/linux/usb/gadget.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='336' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e03e976a' size-in-bits='64' id='428819c0'/>
+      <pointer-type-def type-id='090a4485' size-in-bits='64' id='ea2a1f7d'/>
+      <pointer-type-def type-id='1ac45f89' size-in-bits='64' id='c6228d99'/>
+      <typedef-decl name='genpool_algo_t' type-id='f54ae583' filepath='include/linux/genalloc.h' line='48' column='1' id='00278b91'/>
+      <pointer-type-def type-id='b718d3f9' size-in-bits='64' id='9762ede1'/>
+      <class-decl name='usb_gadget_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='691' column='1' id='b718d3f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='function' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='54a734c8' visibility='default' filepath='include/linux/usb/gadget.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disconnect' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='resume' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb/gadget.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='udc_name' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_existing_only' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='709' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='2b1e6e59' const='yes' id='e03e976a'/>
+      <qualified-type-def type-id='e094094c' const='yes' id='090a4485'/>
+      <qualified-type-def type-id='1f03d7fe' const='yes' id='1ac45f89'/>
+      <pointer-type-def type-id='90e882dc' size-in-bits='64' id='42262596'/>
+      <pointer-type-def type-id='b845c559' size-in-bits='64' id='2b8a73bd'/>
+      <pointer-type-def type-id='5f4720b2' size-in-bits='64' id='86ec8614'/>
+      <pointer-type-def type-id='3ba00442' size-in-bits='64' id='11f75c44'/>
+      <pointer-type-def type-id='e7d8509c' size-in-bits='64' id='3e610606'/>
+      <pointer-type-def type-id='713ac427' size-in-bits='64' id='f54ae583'/>
+      <pointer-type-def type-id='8684c7e6' size-in-bits='64' id='9f35b348'/>
+      <pointer-type-def type-id='f089a11b' size-in-bits='64' id='20950ec7'/>
+      <pointer-type-def type-id='f5213d9b' size-in-bits='64' id='b90a2617'/>
+      <class-decl name='usb_ep_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='135' column='1' id='e094094c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='4426dbe0' visibility='default' filepath='include/linux/usb/gadget.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dispose' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_request' type-id='37593c93' visibility='default' filepath='include/linux/usb/gadget.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='free_request' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queue' type-id='bbe8d894' visibility='default' filepath='include/linux/usb/gadget.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='487818e7' visibility='default' filepath='include/linux/usb/gadget.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_halt' type-id='807f0070' visibility='default' filepath='include/linux/usb/gadget.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_wedge' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_status' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fifo_flush' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c70cf626' size-in-bits='64' id='54a734c8'/>
+      <pointer-type-def type-id='d6bdcb4d' size-in-bits='64' id='a915fb99'/>
+      <pointer-type-def type-id='72e0b98d' size-in-bits='64' id='99f649a9'/>
+      <pointer-type-def type-id='c112c396' size-in-bits='64' id='4426dbe0'/>
+      <pointer-type-def type-id='5f81edee' size-in-bits='64' id='807f0070'/>
+      <pointer-type-def type-id='23420063' size-in-bits='64' id='487818e7'/>
+      <pointer-type-def type-id='f1c2900a' size-in-bits='64' id='bbe8d894'/>
+      <pointer-type-def type-id='cd4cfe6f' size-in-bits='64' id='37593c93'/>
+      <pointer-type-def type-id='e72900f8' size-in-bits='64' id='b1c1788a'/>
+      <pointer-type-def type-id='192c003a' size-in-bits='64' id='2dfafd2c'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/hub.c' language='LANG_C89'>
+      <function-decl name='usb_reset_device' mangled-name='usb_reset_device' filepath='drivers/usb/core/hub.c' line='5940' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_device'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/hub.c' line='5940' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_wakeup_notification' mangled-name='usb_wakeup_notification' filepath='drivers/usb/core/hub.c' line='695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_wakeup_notification'>
+        <parameter type-id='25e60cb2' name='hdev' filepath='drivers/usb/core/hub.c' line='695' column='1'/>
+        <parameter type-id='f0981eeb' name='portnum' filepath='drivers/usb/core/hub.c' line='696' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_set_device_state' mangled-name='usb_set_device_state' filepath='drivers/usb/core/hub.c' line='2042' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_set_device_state'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/hub.c' line='2042' column='1'/>
+        <parameter type-id='901a91cb' name='new_state' filepath='drivers/usb/core/hub.c' line='2043' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_root_hub_lost_power' mangled-name='usb_root_hub_lost_power' filepath='drivers/usb/core/hub.c' line='3828' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_root_hub_lost_power'>
+        <parameter type-id='25e60cb2' name='rhdev' filepath='drivers/usb/core/hub.c' line='3828' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_hub_find_child' mangled-name='usb_hub_find_child' filepath='drivers/usb/core/hub.c' line='6078' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_hub_find_child'>
+        <parameter type-id='25e60cb2' name='hdev' filepath='drivers/usb/core/hub.c' line='6078' column='1'/>
+        <parameter type-id='95e97e5e' name='port1' filepath='drivers/usb/core/hub.c' line='6079' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/message.c' language='LANG_C89'>
+      <class-decl name='usb_cdc_parsed_header' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/usb/cdc.h' line='26' column='1' id='10a51b66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usb_cdc_union_desc' type-id='b7f056d4' visibility='default' filepath='include/linux/usb/cdc.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usb_cdc_header_desc' type-id='015a0234' visibility='default' filepath='include/linux/usb/cdc.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_cdc_call_mgmt_descriptor' type-id='93edac17' visibility='default' filepath='include/linux/usb/cdc.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='usb_cdc_acm_descriptor' type-id='6f7e8184' visibility='default' filepath='include/linux/usb/cdc.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='usb_cdc_country_functional_desc' type-id='1654068f' visibility='default' filepath='include/linux/usb/cdc.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='usb_cdc_network_terminal_desc' type-id='b6bc3316' visibility='default' filepath='include/linux/usb/cdc.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='usb_cdc_ether_desc' type-id='a9c8654f' visibility='default' filepath='include/linux/usb/cdc.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usb_cdc_dmm_desc' type-id='0c1984e5' visibility='default' filepath='include/linux/usb/cdc.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='usb_cdc_mdlm_desc' type-id='94bfb8eb' visibility='default' filepath='include/linux/usb/cdc.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='usb_cdc_mdlm_detail_desc' type-id='8b42c33d' visibility='default' filepath='include/linux/usb/cdc.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='usb_cdc_obex_desc' type-id='4875dd9d' visibility='default' filepath='include/linux/usb/cdc.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='usb_cdc_ncm_desc' type-id='7041aa49' visibility='default' filepath='include/linux/usb/cdc.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='usb_cdc_mbim_desc' type-id='31efb644' visibility='default' filepath='include/linux/usb/cdc.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='usb_cdc_mbim_extended_desc' type-id='6253b388' visibility='default' filepath='include/linux/usb/cdc.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='phonet_magic_present' type-id='b50a4934' visibility='default' filepath='include/linux/usb/cdc.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_union_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='101' column='1' id='d37cd54e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bMasterInterface0' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bSlaveInterface0' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_header_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='63' column='1' id='d285082e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdCDC' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_call_mgmt_descriptor' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='72' column='1' id='42b001af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDataInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_acm_descriptor' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='85' column='1' id='f0029b4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bmCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_country_functional_desc' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='112' column='1' id='62e0e7f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='iCountryCodeRelDate' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='wCountyCode0' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_network_terminal_desc' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='123' column='1' id='19834fe0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bEntityId' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iName' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bChannelIndex' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bPhysicalInterface' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_ether_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='135' column='1' id='0e5b8ca7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='iMACAddress' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bmEthernetStatistics' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wMaxSegmentSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='wNumberMCFilters' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bNumberPowerFilters' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_dmm_desc' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='148' column='1' id='5e084b85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bFunctionLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubtype' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='d315442e' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='wMaxCommand' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='153' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mdlm_desc' size-in-bits='168' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='157' column='1' id='9d7259bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bGUID' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mdlm_detail_desc' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='167' column='1' id='31e0f35d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bGuidDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bDetailData' type-id='167619f6' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_obex_desc' size-in-bits='40' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='178' column='1' id='8ebff3ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_ncm_desc' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='187' column='1' id='bdcf5751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdNcmVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bmNetworkCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mbim_desc' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='197' column='1' id='0570fd5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdMBIMVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='wMaxControlMessage' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='bNumberFilters' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bMaxFilterSize' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='wMaxSegmentSize' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='bmNetworkCapabilities' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_cdc_mbim_extended_desc' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='211' column='1' id='3093472a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bDescriptorSubType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='bcdMBIMExtendedVersion' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bMaxOutstandingCommandMessages' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='wMTU' type-id='23119536' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_sg_request' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/usb.h' line='1885' column='1' id='f14efa5e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/usb.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='include/linux/usb.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pipe' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='entries' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='urbs' type-id='db81fc08' visibility='default' filepath='include/linux/usb.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='complete' type-id='f9fef04f' visibility='default' filepath='include/linux/usb.h' line='1902' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ab85b8f2' size-in-bits='64' id='db81fc08'/>
+      <pointer-type-def type-id='f0029b4e' size-in-bits='64' id='6f7e8184'/>
+      <pointer-type-def type-id='42b001af' size-in-bits='64' id='93edac17'/>
+      <pointer-type-def type-id='62e0e7f7' size-in-bits='64' id='1654068f'/>
+      <pointer-type-def type-id='5e084b85' size-in-bits='64' id='0c1984e5'/>
+      <pointer-type-def type-id='0e5b8ca7' size-in-bits='64' id='a9c8654f'/>
+      <pointer-type-def type-id='d285082e' size-in-bits='64' id='015a0234'/>
+      <pointer-type-def type-id='0570fd5e' size-in-bits='64' id='31efb644'/>
+      <pointer-type-def type-id='3093472a' size-in-bits='64' id='6253b388'/>
+      <pointer-type-def type-id='9d7259bb' size-in-bits='64' id='94bfb8eb'/>
+      <pointer-type-def type-id='31e0f35d' size-in-bits='64' id='8b42c33d'/>
+      <pointer-type-def type-id='bdcf5751' size-in-bits='64' id='7041aa49'/>
+      <pointer-type-def type-id='19834fe0' size-in-bits='64' id='b6bc3316'/>
+      <pointer-type-def type-id='8ebff3ed' size-in-bits='64' id='4875dd9d'/>
+      <pointer-type-def type-id='10a51b66' size-in-bits='64' id='16f45b2c'/>
+      <pointer-type-def type-id='d37cd54e' size-in-bits='64' id='b7f056d4'/>
+      <pointer-type-def type-id='f14efa5e' size-in-bits='64' id='56f81414'/>
+      <function-decl name='usb_control_msg' mangled-name='usb_control_msg' filepath='drivers/usb/core/message.c' line='135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_control_msg'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='135' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/usb/core/message.c' line='135' column='1'/>
+        <parameter type-id='8f048e17' name='request' filepath='drivers/usb/core/message.c' line='135' column='1'/>
+        <parameter type-id='8f048e17' name='requesttype' filepath='drivers/usb/core/message.c' line='136' column='1'/>
+        <parameter type-id='d315442e' name='value' filepath='drivers/usb/core/message.c' line='136' column='1'/>
+        <parameter type-id='d315442e' name='index' filepath='drivers/usb/core/message.c' line='136' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/core/message.c' line='136' column='1'/>
+        <parameter type-id='d315442e' name='size' filepath='drivers/usb/core/message.c' line='137' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/usb/core/message.c' line='137' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cdc_parse_cdc_header' mangled-name='cdc_parse_cdc_header' filepath='drivers/usb/core/message.c' line='2143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdc_parse_cdc_header'>
+        <parameter type-id='16f45b2c' name='hdr' filepath='drivers/usb/core/message.c' line='2143' column='1'/>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/message.c' line='2144' column='1'/>
+        <parameter type-id='8bff8096' name='buffer' filepath='drivers/usb/core/message.c' line='2145' column='1'/>
+        <parameter type-id='95e97e5e' name='buflen' filepath='drivers/usb/core/message.c' line='2146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_set_interface' mangled-name='usb_set_interface' filepath='drivers/usb/core/message.c' line='1384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_set_interface'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1384' column='1'/>
+        <parameter type-id='95e97e5e' name='interface' filepath='drivers/usb/core/message.c' line='1384' column='1'/>
+        <parameter type-id='95e97e5e' name='alternate' filepath='drivers/usb/core/message.c' line='1384' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_clear_halt' mangled-name='usb_clear_halt' filepath='drivers/usb/core/message.c' line='1066' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_clear_halt'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1066' column='1'/>
+        <parameter type-id='95e97e5e' name='pipe' filepath='drivers/usb/core/message.c' line='1066' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_string' mangled-name='usb_string' filepath='drivers/usb/core/message.c' line='829' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_string'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='829' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='drivers/usb/core/message.c' line='829' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='drivers/usb/core/message.c' line='829' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/usb/core/message.c' line='829' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_reset_configuration' mangled-name='usb_reset_configuration' filepath='drivers/usb/core/message.c' line='1547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_configuration'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1547' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_sg_wait' mangled-name='usb_sg_wait' filepath='drivers/usb/core/message.c' line='515' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_wait'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='515' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_sg_cancel' mangled-name='usb_sg_cancel' filepath='drivers/usb/core/message.c' line='585' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_cancel'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='585' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_sg_init' mangled-name='usb_sg_init' filepath='drivers/usb/core/message.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_sg_init'>
+        <parameter type-id='56f81414' name='io' filepath='drivers/usb/core/message.c' line='367' column='1'/>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='367' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='f0981eeb' name='period' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/usb/core/message.c' line='368' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <parameter type-id='b59d7dce' name='length' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/message.c' line='369' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_reset_endpoint' mangled-name='usb_reset_endpoint' filepath='drivers/usb/core/message.c' line='1176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_reset_endpoint'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/message.c' line='1176' column='1'/>
+        <parameter type-id='f0981eeb' name='epaddr' filepath='drivers/usb/core/message.c' line='1176' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_bulk_msg' mangled-name='usb_bulk_msg' filepath='drivers/usb/core/message.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_bulk_msg'>
+        <parameter type-id='25e60cb2' name='usb_dev' filepath='drivers/usb/core/message.c' line='229' column='1'/>
+        <parameter type-id='f0981eeb' name='pipe' filepath='drivers/usb/core/message.c' line='229' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='7292109c' name='actual_length' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='timeout' filepath='drivers/usb/core/message.c' line='230' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/notify.c' language='LANG_C89'>
+      <function-decl name='usb_unregister_notify' mangled-name='usb_unregister_notify' filepath='drivers/usb/core/notify.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unregister_notify'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/usb/core/notify.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_register_notify' mangled-name='usb_register_notify' filepath='drivers/usb/core/notify.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_register_notify'>
+        <parameter type-id='d504f73d' name='nb' filepath='drivers/usb/core/notify.c' line='29' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/urb.c' language='LANG_C89'>
+      <function-decl name='usb_submit_urb' mangled-name='usb_submit_urb' filepath='drivers/usb/core/urb.c' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_submit_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='352' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/urb.c' line='352' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_kill_urb' mangled-name='usb_kill_urb' filepath='drivers/usb/core/urb.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_kill_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='688' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_free_urb' mangled-name='usb_free_urb' filepath='drivers/usb/core/urb.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='93' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_anchor_urb' mangled-name='usb_anchor_urb' filepath='drivers/usb/core/urb.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_anchor_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='126' column='1'/>
+        <parameter type-id='bd300bf3' name='anchor' filepath='drivers/usb/core/urb.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_get_from_anchor' mangled-name='usb_get_from_anchor' filepath='drivers/usb/core/urb.c' line='955' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_from_anchor'>
+        <parameter type-id='bd300bf3' name='anchor' filepath='drivers/usb/core/urb.c' line='955' column='1'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+      <function-decl name='usb_scuttle_anchored_urbs' mangled-name='usb_scuttle_anchored_urbs' filepath='drivers/usb/core/urb.c' line='982' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_scuttle_anchored_urbs'>
+        <parameter type-id='bd300bf3' name='anchor' filepath='drivers/usb/core/urb.c' line='982' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unanchor_urb' mangled-name='usb_unanchor_urb' filepath='drivers/usb/core/urb.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unanchor_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='164' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_wait_anchor_empty_timeout' mangled-name='usb_wait_anchor_empty_timeout' filepath='drivers/usb/core/urb.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_wait_anchor_empty_timeout'>
+        <parameter type-id='bd300bf3' name='anchor' filepath='drivers/usb/core/urb.c' line='936' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout' filepath='drivers/usb/core/urb.c' line='937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_unpoison_urb' mangled-name='usb_unpoison_urb' filepath='drivers/usb/core/urb.c' line='744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unpoison_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='744' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_unlink_urb' mangled-name='usb_unlink_urb' filepath='drivers/usb/core/urb.c' line='649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_unlink_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='649' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_poison_urb' mangled-name='usb_poison_urb' filepath='drivers/usb/core/urb.c' line='729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_poison_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='729' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_kill_anchored_urbs' mangled-name='usb_kill_anchored_urbs' filepath='drivers/usb/core/urb.c' line='785' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_kill_anchored_urbs'>
+        <parameter type-id='bd300bf3' name='anchor' filepath='drivers/usb/core/urb.c' line='785' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_get_urb' mangled-name='usb_get_urb' filepath='drivers/usb/core/urb.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_urb'>
+        <parameter type-id='ab85b8f2' name='urb' filepath='drivers/usb/core/urb.c' line='110' column='1'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+      <function-decl name='usb_alloc_urb' mangled-name='usb_alloc_urb' filepath='drivers/usb/core/urb.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_urb'>
+        <parameter type-id='95e97e5e' name='iso_packets' filepath='drivers/usb/core/urb.c' line='70' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/urb.c' line='70' column='1'/>
+        <return type-id='ab85b8f2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/core/usb.c' language='LANG_C89'>
+      <qualified-type-def type-id='39b596d4' const='yes' id='0e085d99'/>
+      <pointer-type-def type-id='0e085d99' size-in-bits='64' id='ca2b80c9'/>
+      <qualified-type-def type-id='5b653fc9' const='yes' id='4e9f87c2'/>
+      <pointer-type-def type-id='4e9f87c2' size-in-bits='64' id='ad22f238'/>
+      <pointer-type-def type-id='2b1e6e59' size-in-bits='64' id='a07d0491'/>
+      <pointer-type-def type-id='a07d0491' size-in-bits='64' id='5fce7261'/>
+      <function-decl name='usb_put_intf' mangled-name='usb_put_intf' filepath='drivers/usb/core/usb.c' line='757' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_intf'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/usb.c' line='757' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_put_dev' mangled-name='usb_put_dev' filepath='drivers/usb/core/usb.c' line='722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_dev'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='722' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_lock_device_for_reset' mangled-name='usb_lock_device_for_reset' filepath='drivers/usb/core/usb.c' line='794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_lock_device_for_reset'>
+        <parameter type-id='25e60cb2' name='udev' filepath='drivers/usb/core/usb.c' line='794' column='1'/>
+        <parameter type-id='ad22f238' name='iface' filepath='drivers/usb/core/usb.c' line='795' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ifnum_to_if' mangled-name='usb_ifnum_to_if' filepath='drivers/usb/core/usb.c' line='273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ifnum_to_if'>
+        <parameter type-id='ca2b80c9' name='dev' filepath='drivers/usb/core/usb.c' line='273' column='1'/>
+        <parameter type-id='f0981eeb' name='ifnum' filepath='drivers/usb/core/usb.c' line='274' column='1'/>
+        <return type-id='8bf48c31'/>
+      </function-decl>
+      <function-decl name='usb_get_intf' mangled-name='usb_get_intf' filepath='drivers/usb/core/usb.c' line='741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_intf'>
+        <parameter type-id='8bf48c31' name='intf' filepath='drivers/usb/core/usb.c' line='741' column='1'/>
+        <return type-id='8bf48c31'/>
+      </function-decl>
+      <function-decl name='usb_get_dev' mangled-name='usb_get_dev' filepath='drivers/usb/core/usb.c' line='707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_dev'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='707' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_get_current_frame_number' mangled-name='usb_get_current_frame_number' filepath='drivers/usb/core/usb.c' line='841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_get_current_frame_number'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='841' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_free_coherent' mangled-name='usb_free_coherent' filepath='drivers/usb/core/usb.c' line='925' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_coherent'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='925' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/usb/core/usb.c' line='925' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='drivers/usb/core/usb.c' line='925' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma' filepath='drivers/usb/core/usb.c' line='926' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_find_common_endpoints' mangled-name='usb_find_common_endpoints' filepath='drivers/usb/core/usb.c' line='136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_find_common_endpoints'>
+        <parameter type-id='2ac920d2' name='alt' filepath='drivers/usb/core/usb.c' line='136' column='1'/>
+        <parameter type-id='5fce7261' name='bulk_in' filepath='drivers/usb/core/usb.c' line='137' column='1'/>
+        <parameter type-id='5fce7261' name='bulk_out' filepath='drivers/usb/core/usb.c' line='138' column='1'/>
+        <parameter type-id='5fce7261' name='int_in' filepath='drivers/usb/core/usb.c' line='139' column='1'/>
+        <parameter type-id='5fce7261' name='int_out' filepath='drivers/usb/core/usb.c' line='140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_disabled' mangled-name='usb_disabled' filepath='drivers/usb/core/usb.c' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_disabled'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_alloc_dev' mangled-name='usb_alloc_dev' filepath='drivers/usb/core/usb.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_dev'>
+        <parameter type-id='25e60cb2' name='parent' filepath='drivers/usb/core/usb.c' line='575' column='1'/>
+        <parameter type-id='3ab7d422' name='bus' filepath='drivers/usb/core/usb.c' line='576' column='1'/>
+        <parameter type-id='f0981eeb' name='port1' filepath='drivers/usb/core/usb.c' line='576' column='1'/>
+        <return type-id='25e60cb2'/>
+      </function-decl>
+      <function-decl name='usb_alloc_coherent' mangled-name='usb_alloc_coherent' filepath='drivers/usb/core/usb.c' line='905' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_alloc_coherent'>
+        <parameter type-id='25e60cb2' name='dev' filepath='drivers/usb/core/usb.c' line='905' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/usb/core/usb.c' line='905' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='drivers/usb/core/usb.c' line='905' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='drivers/usb/core/usb.c' line='906' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__usb_get_extra_descriptor' mangled-name='__usb_get_extra_descriptor' filepath='drivers/usb/core/usb.c' line='853' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__usb_get_extra_descriptor'>
+        <parameter type-id='26a90f95' name='buffer' filepath='drivers/usb/core/usb.c' line='853' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='drivers/usb/core/usb.c' line='853' column='1'/>
+        <parameter type-id='002ac4a6' name='type' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <parameter type-id='63e171df' name='ptr' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <parameter type-id='b59d7dce' name='minsize' filepath='drivers/usb/core/usb.c' line='854' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/composite.c' language='LANG_C89'>
+      <function-decl name='usb_string_id' mangled-name='usb_string_id' filepath='drivers/usb/gadget/composite.c' line='1244' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_string_id'>
+        <parameter type-id='2a895c01' name='cdev' filepath='drivers/usb/gadget/composite.c' line='1244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_interface_id' mangled-name='usb_interface_id' filepath='drivers/usb/gadget/composite.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_interface_id'>
+        <parameter type-id='ee27b7c6' name='config' filepath='drivers/usb/gadget/composite.c' line='465' column='1'/>
+        <parameter type-id='e5411c2c' name='function' filepath='drivers/usb/gadget/composite.c' line='466' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gstrings_attach' mangled-name='usb_gstrings_attach' filepath='drivers/usb/gadget/composite.c' line='1357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gstrings_attach'>
+        <parameter type-id='2a895c01' name='cdev' filepath='drivers/usb/gadget/composite.c' line='1357' column='1'/>
+        <parameter type-id='fa0eba8f' name='sp' filepath='drivers/usb/gadget/composite.c' line='1358' column='1'/>
+        <parameter type-id='f0981eeb' name='n_strings' filepath='drivers/usb/gadget/composite.c' line='1358' column='1'/>
+        <return type-id='3b7e997b'/>
+      </function-decl>
+      <function-decl name='usb_composite_setup_continue' mangled-name='usb_composite_setup_continue' filepath='drivers/usb/gadget/composite.c' line='2469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_composite_setup_continue'>
+        <parameter type-id='2a895c01' name='cdev' filepath='drivers/usb/gadget/composite.c' line='2469' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_add_function' mangled-name='usb_add_function' filepath='drivers/usb/gadget/composite.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_function'>
+        <parameter type-id='ee27b7c6' name='config' filepath='drivers/usb/gadget/composite.c' line='300' column='1'/>
+        <parameter type-id='e5411c2c' name='function' filepath='drivers/usb/gadget/composite.c' line='301' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='config_ep_by_speed' mangled-name='config_ep_by_speed' filepath='drivers/usb/gadget/composite.c' line='278' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_ep_by_speed'>
+        <parameter type-id='49a58c0c' name='g' filepath='drivers/usb/gadget/composite.c' line='278' column='1'/>
+        <parameter type-id='e5411c2c' name='f' filepath='drivers/usb/gadget/composite.c' line='279' column='1'/>
+        <parameter type-id='63a08bf7' name='_ep' filepath='drivers/usb/gadget/composite.c' line='280' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='e9546509' size-in-bits='64' id='2a895c01'/>
+      <pointer-type-def type-id='85c151d0' size-in-bits='64' id='ee27b7c6'/>
+      <pointer-type-def type-id='d6a54726' size-in-bits='64' id='e5411c2c'/>
+      <pointer-type-def type-id='9a9cf0bf' size-in-bits='64' id='fa0eba8f'/>
+      <pointer-type-def type-id='2bc124cb' size-in-bits='64' id='3b7e997b'/>
+      <class-decl name='usb_composite_dev' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='478' column='1' id='e9546509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gadget' type-id='49a58c0c' visibility='default' filepath='include/linux/usb/composite.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='os_desc_req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qw_sign' type-id='497ff6fb' visibility='default' filepath='include/linux/usb/composite.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='b_vendor_code' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='os_desc_config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_os_string' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='desc' type-id='582de67c' visibility='default' filepath='include/linux/usb/composite.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='configs' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='gstrings' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='c64e62ba' visibility='default' filepath='include/linux/usb/composite.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='next_string_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='def_manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='deactivations' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='delayed_status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/composite.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setup_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='os_desc_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='516' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_configuration' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='302' column='1' id='85c151d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='descriptors' type-id='1993c682' visibility='default' filepath='include/linux/usb/composite.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='b7daa1eb' visibility='default' filepath='include/linux/usb/composite.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='04b7616c' visibility='default' filepath='include/linux/usb/composite.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bConfigurationValue' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='iConfiguration' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='bmAttributes' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='MaxPower' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/composite.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cdev' type-id='2a895c01' visibility='default' filepath='include/linux/usb/composite.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='functions' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_interface_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='superspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='highspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='fullspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='superspeed_plus' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interface' type-id='9c207f89' visibility='default' filepath='include/linux/usb/composite.h' line='334' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='191' column='1' id='d6a54726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssp_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='os_desc_table' type-id='fed2517b' visibility='default' filepath='include/linux/usb/composite.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='os_desc_n' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bind' type-id='3b615603' visibility='default' filepath='include/linux/usb/composite.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unbind' type-id='d44ba07c' visibility='default' filepath='include/linux/usb/composite.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='free_func' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_alt' type-id='addd4a1a' visibility='default' filepath='include/linux/usb/composite.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_alt' type-id='01481038' visibility='default' filepath='include/linux/usb/composite.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='disable' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='setup' type-id='b9adeaf4' visibility='default' filepath='include/linux/usb/composite.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_match' type-id='dc59a00f' visibility='default' filepath='include/linux/usb/composite.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='suspend' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_status' type-id='58d59612' visibility='default' filepath='include/linux/usb/composite.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='func_suspend' type-id='dcad5492' visibility='default' filepath='include/linux/usb/composite.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='endpoints' type-id='f066dd3c' visibility='default' filepath='include/linux/usb/composite.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='fi' type-id='2abcd7ef' visibility='default' filepath='include/linux/usb/composite.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind_deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='769' column='1' id='2bc124cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='771' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b365417' size-in-bits='64' id='9a9cf0bf'/>
+      <class-decl name='usb_gadget_strings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='782' column='1' id='4b365417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='language' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/gadget.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='3b7e997b' visibility='default' filepath='include/linux/usb/gadget.h' line='784' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9e6bb89c' size-in-bits='64' id='1993c682'/>
+      <pointer-type-def type-id='1a56399f' size-in-bits='64' id='2abcd7ef'/>
+      <pointer-type-def type-id='f154f192' size-in-bits='64' id='04b7616c'/>
+      <pointer-type-def type-id='7c02f62f' size-in-bits='64' id='3b615603'/>
+      <pointer-type-def type-id='0965e7f8' size-in-bits='64' id='58d59612'/>
+      <pointer-type-def type-id='6d86a332' size-in-bits='64' id='b9adeaf4'/>
+      <pointer-type-def type-id='3ec9b040' size-in-bits='64' id='dcad5492'/>
+      <pointer-type-def type-id='6c6f1c36' size-in-bits='64' id='01481038'/>
+      <pointer-type-def type-id='476ef610' size-in-bits='64' id='addd4a1a'/>
+      <pointer-type-def type-id='16eae85b' size-in-bits='64' id='dc59a00f'/>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='112' id='497ff6fb'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <pointer-type-def type-id='692fa8cc' size-in-bits='64' id='c64e62ba'/>
+      <pointer-type-def type-id='5948074d' size-in-bits='64' id='f363a725'/>
+      <array-type-def dimensions='1' type-id='e5411c2c' size-in-bits='1024' id='9c207f89'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <pointer-type-def type-id='ee0eb9bb' size-in-bits='64' id='fed2517b'/>
+      <pointer-type-def type-id='43806adf' size-in-bits='64' id='1a494567'/>
+      <pointer-type-def type-id='faebaea7' size-in-bits='64' id='b7daa1eb'/>
+      <pointer-type-def type-id='b86ce2e2' size-in-bits='64' id='d44ba07c'/>
+      <pointer-type-def type-id='d7b840f9' size-in-bits='64' id='0da78fa5'/>
+      <class-decl name='usb_composite_driver' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='388' column='1' id='692fa8cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='b5c13ec7' visibility='default' filepath='include/linux/usb/composite.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/composite.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='needs_serial' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unbind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gadget_driver' type-id='b718d3f9' visibility='default' filepath='include/linux/usb/composite.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='113' column='1' id='ee0eb9bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='if_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='os_desc' type-id='5260af22' visibility='default' filepath='include/linux/usb/composite.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_request' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='98' column='1' id='43806adf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb/gadget.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb/gadget.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_mapped_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='zero' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='short_not_ok' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='frame_number' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='actual' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5352365e' size-in-bits='64' id='9e6bb89c'/>
+      <qualified-type-def type-id='364ef168' const='yes' id='1a56399f'/>
+      <pointer-type-def type-id='4cd738bd' size-in-bits='64' id='5948074d'/>
+      <class-decl name='usb_descriptor_header' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='280' column='1' id='4cd738bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_instance' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='589' column='1' id='364ef168'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='f05eea43' visibility='default' filepath='include/linux/usb/composite.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cfs_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fd' type-id='f666bcc1' visibility='default' filepath='include/linux/usb/composite.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='f' type-id='e5411c2c' visibility='default' filepath='include/linux/usb/composite.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_inst_name' type-id='f0f4c2cd' visibility='default' filepath='include/linux/usb/composite.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='free_func_inst' type-id='f16bd93b' visibility='default' filepath='include/linux/usb/composite.h' line='596' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4cd738bd' const='yes' id='5352365e'/>
+      <pointer-type-def type-id='d4f1de57' size-in-bits='64' id='b5c13ec7'/>
+      <pointer-type-def type-id='9a22e8f5' size-in-bits='64' id='ced7d449'/>
+      <pointer-type-def type-id='e5af4d64' size-in-bits='64' id='5260af22'/>
+      <pointer-type-def type-id='90df3e0a' size-in-bits='64' id='b2a3307c'/>
+      <class-decl name='usb_os_desc' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='93' column='1' id='e5af4d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ext_compat_id' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_prop' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ext_prop_len' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ext_prop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opts_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/composite.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='group' type-id='f05eea43' visibility='default' filepath='include/linux/usb/composite.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='582de67c' const='yes' id='d4f1de57'/>
+      <pointer-type-def type-id='306fcd19' size-in-bits='64' id='f0f4c2cd'/>
+      <pointer-type-def type-id='38df0539' size-in-bits='64' id='f666bcc1'/>
+      <pointer-type-def type-id='b297b72f' size-in-bits='64' id='f16bd93b'/>
+      <class-decl name='usb_function_driver' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='581' column='1' id='38df0539'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc_inst' type-id='20644ce5' visibility='default' filepath='include/linux/usb/composite.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc_func' type-id='ae795a50' visibility='default' filepath='include/linux/usb/composite.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a6d40256' size-in-bits='64' id='ae795a50'/>
+      <pointer-type-def type-id='54544021' size-in-bits='64' id='20644ce5'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/config.c' language='LANG_C89'>
+      <class-decl name='usb_udc' size-in-bits='7808' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='36' column='1' id='1ee0d0f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='9762ede1' 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='49a58c0c' 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='66e487eb' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='vbus' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/udc/core.c' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='112' id='497ff6fb'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e5411c2c' size-in-bits='1024' id='9c207f89'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='usb_function' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='191' column='1' id='d6a54726'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hs_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ss_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssp_descriptors' type-id='f363a725' visibility='default' filepath='include/linux/usb/composite.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='os_desc_table' type-id='fed2517b' visibility='default' filepath='include/linux/usb/composite.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='os_desc_n' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bind' type-id='3b615603' visibility='default' filepath='include/linux/usb/composite.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unbind' type-id='d44ba07c' visibility='default' filepath='include/linux/usb/composite.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='free_func' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_alt' type-id='addd4a1a' visibility='default' filepath='include/linux/usb/composite.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_alt' type-id='01481038' visibility='default' filepath='include/linux/usb/composite.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='disable' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='setup' type-id='b9adeaf4' visibility='default' filepath='include/linux/usb/composite.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='req_match' type-id='dc59a00f' visibility='default' filepath='include/linux/usb/composite.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='suspend' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='resume' type-id='0da78fa5' visibility='default' filepath='include/linux/usb/composite.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='get_status' type-id='58d59612' visibility='default' filepath='include/linux/usb/composite.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='func_suspend' type-id='dcad5492' visibility='default' filepath='include/linux/usb/composite.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='endpoints' type-id='f066dd3c' visibility='default' filepath='include/linux/usb/composite.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='fi' type-id='2abcd7ef' visibility='default' filepath='include/linux/usb/composite.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind_deactivated' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_strings' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='782' column='1' id='4b365417'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='language' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/gadget.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='3b7e997b' visibility='default' filepath='include/linux/usb/gadget.h' line='784' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_string' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='769' column='1' id='2bc124cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='771' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_descriptor_header' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='280' column='1' id='4cd738bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bLength' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bDescriptorType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='282' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_configuration' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='302' column='1' id='85c151d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='label' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='descriptors' type-id='1993c682' visibility='default' filepath='include/linux/usb/composite.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='b7daa1eb' visibility='default' filepath='include/linux/usb/composite.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='04b7616c' visibility='default' filepath='include/linux/usb/composite.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bConfigurationValue' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='iConfiguration' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='bmAttributes' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='MaxPower' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/composite.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cdev' type-id='2a895c01' visibility='default' filepath='include/linux/usb/composite.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='functions' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_interface_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='superspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='highspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='fullspeed' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='superspeed_plus' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interface' type-id='9c207f89' visibility='default' filepath='include/linux/usb/composite.h' line='334' 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='fd7e7994'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bRequestType' type-id='8f048e17' 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='8f048e17' 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='23119536' 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='23119536' 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='23119536' visibility='default' filepath='include/uapi/linux/usb/ch9.h' line='218' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_composite_dev' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='478' column='1' id='e9546509'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gadget' type-id='49a58c0c' visibility='default' filepath='include/linux/usb/composite.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='os_desc_req' type-id='1a494567' visibility='default' filepath='include/linux/usb/composite.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='qw_sign' type-id='497ff6fb' visibility='default' filepath='include/linux/usb/composite.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='b_vendor_code' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='os_desc_config' type-id='ee27b7c6' visibility='default' filepath='include/linux/usb/composite.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_os_string' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='desc' type-id='582de67c' visibility='default' filepath='include/linux/usb/composite.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='configs' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='gstrings' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='driver' type-id='c64e62ba' visibility='default' filepath='include/linux/usb/composite.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='next_string_id' type-id='f9b06939' visibility='default' filepath='include/linux/usb/composite.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='def_manufacturer' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='deactivations' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='delayed_status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/usb/composite.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='setup_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='os_desc_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='516' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='314' column='1' id='83cac475'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get_frame' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wakeup' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_selfpowered' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vbus_session' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vbus_draw' type-id='86ec8614' visibility='default' filepath='include/linux/usb/gadget.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pullup' type-id='2b8a73bd' visibility='default' filepath='include/linux/usb/gadget.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='11f75c44' visibility='default' filepath='include/linux/usb/gadget.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_config_params' type-id='b90a2617' visibility='default' filepath='include/linux/usb/gadget.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='udc_start' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udc_stop' type-id='42262596' visibility='default' filepath='include/linux/usb/gadget.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='udc_set_speed' type-id='20950ec7' visibility='default' filepath='include/linux/usb/gadget.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='match_ep' type-id='9f35b348' visibility='default' filepath='include/linux/usb/gadget.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='336' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_dcd_config_params' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='296' column='1' id='5c44a483'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bU1devExitLat' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='bU2DevExitLat' type-id='23119536' visibility='default' filepath='include/linux/usb/gadget.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='besl_baseline' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='besl_deep' type-id='8f048e17' visibility='default' filepath='include/linux/usb/gadget.h' line='302' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_gadget_driver' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='691' column='1' id='b718d3f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='function' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/gadget.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bind' type-id='3e610606' visibility='default' filepath='include/linux/usb/gadget.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unbind' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='54a734c8' visibility='default' filepath='include/linux/usb/gadget.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='disconnect' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='suspend' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='resume' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='reset' type-id='a915fb99' visibility='default' filepath='include/linux/usb/gadget.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/usb/gadget.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='udc_name' type-id='26a90f95' visibility='default' filepath='include/linux/usb/gadget.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pending' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match_existing_only' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='709' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='227' column='1' id='8005701f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/gadget.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='ea2a1f7d' visibility='default' filepath='include/linux/usb/gadget.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='caps' type-id='14d94f61' visibility='default' filepath='include/linux/usb/gadget.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='claimed' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='enabled' type-id='b50a4934' visibility='default' filepath='include/linux/usb/gadget.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='maxpacket' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxpacket_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_streams' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mult' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='maxburst' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='address' type-id='f9b06939' visibility='default' filepath='include/linux/usb/gadget.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='desc' type-id='428819c0' visibility='default' filepath='include/linux/usb/gadget.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='comp_desc' type-id='c6228d99' visibility='default' filepath='include/linux/usb/gadget.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='245' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_ep_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='135' column='1' id='e094094c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='4426dbe0' visibility='default' filepath='include/linux/usb/gadget.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dispose' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alloc_request' type-id='37593c93' visibility='default' filepath='include/linux/usb/gadget.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='free_request' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='queue' type-id='bbe8d894' visibility='default' filepath='include/linux/usb/gadget.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dequeue' type-id='487818e7' visibility='default' filepath='include/linux/usb/gadget.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_halt' type-id='807f0070' visibility='default' filepath='include/linux/usb/gadget.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_wedge' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_status' type-id='99f649a9' visibility='default' filepath='include/linux/usb/gadget.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fifo_flush' type-id='b1c1788a' visibility='default' filepath='include/linux/usb/gadget.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='155' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_request' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/usb/gadget.h' line='98' column='1' id='43806adf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/linux/usb/gadget.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/usb/gadget.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_mapped_sgs' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_id' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_interrupt' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='zero' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='short_not_ok' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='dma_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='2dfafd2c' visibility='default' filepath='include/linux/usb/gadget.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='context' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/gadget.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/gadget.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='frame_number' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/gadget.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='actual' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/gadget.h' line='123' 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='167' column='1' id='14d94f61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_control' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='type_iso' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='type_bulk' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='type_int' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dir_in' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dir_out' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/gadget.h' line='173' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_otg_caps' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/usb/otg.h' line='55' column='1' id='e994232a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='otg_rev' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/otg.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='hnp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='srp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='adp_support' type-id='b50a4934' visibility='default' filepath='include/linux/usb/otg.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_composite_driver' size-in-bits='2816' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='388' column='1' id='692fa8cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='b5c13ec7' visibility='default' filepath='include/linux/usb/composite.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strings' type-id='fa0eba8f' visibility='default' filepath='include/linux/usb/composite.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_speed' type-id='4e532009' visibility='default' filepath='include/linux/usb/composite.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='needs_serial' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/composite.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='unbind' type-id='ced7d449' visibility='default' filepath='include/linux/usb/composite.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='disconnect' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='suspend' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='resume' type-id='b2a3307c' visibility='default' filepath='include/linux/usb/composite.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gadget_driver' type-id='b718d3f9' visibility='default' filepath='include/linux/usb/composite.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc_table' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='113' column='1' id='ee0eb9bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='if_id' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='os_desc' type-id='5260af22' visibility='default' filepath='include/linux/usb/composite.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_os_desc' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='93' column='1' id='e5af4d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ext_compat_id' type-id='26a90f95' visibility='default' filepath='include/linux/usb/composite.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ext_prop' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ext_prop_len' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ext_prop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/composite.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opts_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/usb/composite.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='group' type-id='f05eea43' visibility='default' filepath='include/linux/usb/composite.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_instance' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='589' column='1' id='364ef168'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='group' type-id='f05eea43' visibility='default' filepath='include/linux/usb/composite.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cfs_list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fd' type-id='f666bcc1' visibility='default' filepath='include/linux/usb/composite.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='f' type-id='e5411c2c' visibility='default' filepath='include/linux/usb/composite.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='set_inst_name' type-id='f0f4c2cd' visibility='default' filepath='include/linux/usb/composite.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='free_func_inst' type-id='f16bd93b' visibility='default' filepath='include/linux/usb/composite.h' line='596' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_function_driver' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/composite.h' line='581' column='1' id='38df0539'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/usb/composite.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/usb/composite.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/usb/composite.h' line='584' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='alloc_inst' type-id='20644ce5' visibility='default' filepath='include/linux/usb/composite.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc_func' type-id='ae795a50' visibility='default' filepath='include/linux/usb/composite.h' line='586' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fd7e7994' const='yes' id='946203ef'/>
+      <pointer-type-def type-id='946203ef' size-in-bits='64' id='5b4bef1f'/>
+      <qualified-type-def type-id='4cd738bd' const='yes' id='5352365e'/>
+      <pointer-type-def type-id='5352365e' size-in-bits='64' id='9e6bb89c'/>
+      <pointer-type-def type-id='9e6bb89c' size-in-bits='64' id='1993c682'/>
+      <qualified-type-def type-id='582de67c' const='yes' id='d4f1de57'/>
+      <pointer-type-def type-id='d4f1de57' size-in-bits='64' id='b5c13ec7'/>
+      <qualified-type-def type-id='2b1e6e59' const='yes' id='e03e976a'/>
+      <pointer-type-def type-id='e03e976a' size-in-bits='64' id='428819c0'/>
+      <qualified-type-def type-id='e094094c' const='yes' id='090a4485'/>
+      <pointer-type-def type-id='090a4485' size-in-bits='64' id='ea2a1f7d'/>
+      <qualified-type-def type-id='364ef168' const='yes' id='1a56399f'/>
+      <pointer-type-def type-id='1a56399f' size-in-bits='64' id='2abcd7ef'/>
+      <qualified-type-def type-id='83cac475' const='yes' id='54286388'/>
+      <pointer-type-def type-id='54286388' size-in-bits='64' id='1d94d806'/>
+      <qualified-type-def type-id='1f03d7fe' const='yes' id='1ac45f89'/>
+      <pointer-type-def type-id='1ac45f89' size-in-bits='64' id='c6228d99'/>
+      <pointer-type-def type-id='9a22e8f5' size-in-bits='64' id='ced7d449'/>
+      <pointer-type-def type-id='f154f192' size-in-bits='64' id='04b7616c'/>
+      <pointer-type-def type-id='7c02f62f' size-in-bits='64' id='3b615603'/>
+      <pointer-type-def type-id='72e0b98d' size-in-bits='64' id='99f649a9'/>
+      <pointer-type-def type-id='c112c396' size-in-bits='64' id='4426dbe0'/>
+      <pointer-type-def type-id='5f81edee' size-in-bits='64' id='807f0070'/>
+      <pointer-type-def type-id='23420063' size-in-bits='64' id='487818e7'/>
+      <pointer-type-def type-id='f1c2900a' size-in-bits='64' id='bbe8d894'/>
+      <pointer-type-def type-id='0965e7f8' size-in-bits='64' id='58d59612'/>
+      <pointer-type-def type-id='6d86a332' size-in-bits='64' id='b9adeaf4'/>
+      <pointer-type-def type-id='3ec9b040' size-in-bits='64' id='dcad5492'/>
+      <pointer-type-def type-id='6c6f1c36' size-in-bits='64' id='01481038'/>
+      <pointer-type-def type-id='476ef610' size-in-bits='64' id='addd4a1a'/>
+      <pointer-type-def type-id='306fcd19' size-in-bits='64' id='f0f4c2cd'/>
+      <pointer-type-def type-id='90e882dc' size-in-bits='64' id='42262596'/>
+      <pointer-type-def type-id='c70cf626' size-in-bits='64' id='54a734c8'/>
+      <pointer-type-def type-id='b845c559' size-in-bits='64' id='2b8a73bd'/>
+      <pointer-type-def type-id='5f4720b2' size-in-bits='64' id='86ec8614'/>
+      <pointer-type-def type-id='3ba00442' size-in-bits='64' id='11f75c44'/>
+      <pointer-type-def type-id='e7d8509c' size-in-bits='64' id='3e610606'/>
+      <pointer-type-def type-id='16eae85b' size-in-bits='64' id='dc59a00f'/>
+      <pointer-type-def type-id='e9546509' size-in-bits='64' id='2a895c01'/>
+      <pointer-type-def type-id='692fa8cc' size-in-bits='64' id='c64e62ba'/>
+      <pointer-type-def type-id='85c151d0' size-in-bits='64' id='ee27b7c6'/>
+      <pointer-type-def type-id='5c44a483' size-in-bits='64' id='c23646a3'/>
+      <pointer-type-def type-id='4cd738bd' size-in-bits='64' id='5948074d'/>
+      <pointer-type-def type-id='5948074d' size-in-bits='64' id='f363a725'/>
+      <pointer-type-def type-id='8005701f' size-in-bits='64' id='63a08bf7'/>
+      <pointer-type-def type-id='8684c7e6' size-in-bits='64' id='9f35b348'/>
+      <pointer-type-def type-id='d6a54726' size-in-bits='64' id='e5411c2c'/>
+      <pointer-type-def type-id='a6d40256' size-in-bits='64' id='ae795a50'/>
+      <pointer-type-def type-id='38df0539' size-in-bits='64' id='f666bcc1'/>
+      <pointer-type-def type-id='364ef168' size-in-bits='64' id='6614aa5e'/>
+      <pointer-type-def type-id='54544021' size-in-bits='64' id='20644ce5'/>
+      <pointer-type-def type-id='b718d3f9' size-in-bits='64' id='9762ede1'/>
+      <pointer-type-def type-id='4b365417' size-in-bits='64' id='9a9cf0bf'/>
+      <pointer-type-def type-id='9a9cf0bf' size-in-bits='64' id='fa0eba8f'/>
+      <pointer-type-def type-id='e5af4d64' size-in-bits='64' id='5260af22'/>
+      <pointer-type-def type-id='ee0eb9bb' size-in-bits='64' id='fed2517b'/>
+      <pointer-type-def type-id='e994232a' size-in-bits='64' id='451a0588'/>
+      <pointer-type-def type-id='43806adf' size-in-bits='64' id='1a494567'/>
+      <pointer-type-def type-id='cd4cfe6f' size-in-bits='64' id='37593c93'/>
+      <pointer-type-def type-id='1f03d7fe' size-in-bits='64' id='dd810384'/>
+      <pointer-type-def type-id='2bc124cb' size-in-bits='64' id='3b7e997b'/>
+      <pointer-type-def type-id='1ee0d0f0' size-in-bits='64' id='d872b366'/>
+      <pointer-type-def type-id='90df3e0a' size-in-bits='64' id='b2a3307c'/>
+      <pointer-type-def type-id='faebaea7' size-in-bits='64' id='b7daa1eb'/>
+      <pointer-type-def type-id='b86ce2e2' size-in-bits='64' id='d44ba07c'/>
+      <pointer-type-def type-id='e72900f8' size-in-bits='64' id='b1c1788a'/>
+      <pointer-type-def type-id='192c003a' size-in-bits='64' id='2dfafd2c'/>
+      <pointer-type-def type-id='d7b840f9' size-in-bits='64' id='0da78fa5'/>
+      <pointer-type-def type-id='b297b72f' size-in-bits='64' id='f16bd93b'/>
+      <pointer-type-def type-id='d6bdcb4d' size-in-bits='64' id='a915fb99'/>
+      <pointer-type-def type-id='f089a11b' size-in-bits='64' id='20950ec7'/>
+      <pointer-type-def type-id='f5213d9b' size-in-bits='64' id='b90a2617'/>
+      <function-decl name='usb_free_all_descriptors' mangled-name='usb_free_all_descriptors' filepath='drivers/usb/gadget/config.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_free_all_descriptors'>
+        <parameter type-id='e5411c2c' name='f' filepath='drivers/usb/gadget/config.c' line='202' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_copy_descriptors' mangled-name='usb_copy_descriptors' filepath='drivers/usb/gadget/config.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_copy_descriptors'>
+        <parameter type-id='f363a725' name='src' filepath='drivers/usb/gadget/config.c' line='122' column='1'/>
+        <return type-id='f363a725'/>
+      </function-decl>
+      <function-decl name='usb_assign_descriptors' mangled-name='usb_assign_descriptors' filepath='drivers/usb/gadget/config.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_assign_descriptors'>
+        <parameter type-id='e5411c2c' name='f' filepath='drivers/usb/gadget/config.c' line='159' column='1'/>
+        <parameter type-id='f363a725' name='fs' filepath='drivers/usb/gadget/config.c' line='160' column='1'/>
+        <parameter type-id='f363a725' name='hs' filepath='drivers/usb/gadget/config.c' line='161' column='1'/>
+        <parameter type-id='f363a725' name='ss' filepath='drivers/usb/gadget/config.c' line='162' column='1'/>
+        <parameter type-id='f363a725' name='ssp' filepath='drivers/usb/gadget/config.c' line='163' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9a22e8f5'>
+        <parameter type-id='2a895c01'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f154f192'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c02f62f'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72e0b98d'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c112c396'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='428819c0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f81edee'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23420063'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f1c2900a'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0965e7f8'>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d86a332'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ec9b040'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c6f1c36'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='476ef610'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='306fcd19'>
+        <parameter type-id='6614aa5e'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90e882dc'>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c70cf626'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='5b4bef1f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b845c559'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f4720b2'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ba00442'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7d8509c'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='9762ede1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16eae85b'>
+        <parameter type-id='e5411c2c'/>
+        <parameter type-id='5b4bef1f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8684c7e6'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='a07d0491'/>
+        <parameter type-id='dd810384'/>
+        <return type-id='63a08bf7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6d40256'>
+        <parameter type-id='6614aa5e'/>
+        <return type-id='e5411c2c'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54544021'>
+        <return type-id='6614aa5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd4cfe6f'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='1a494567'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90df3e0a'>
+        <parameter type-id='2a895c01'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='faebaea7'>
+        <parameter type-id='ee27b7c6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b86ce2e2'>
+        <parameter type-id='ee27b7c6'/>
+        <parameter type-id='e5411c2c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e72900f8'>
+        <parameter type-id='63a08bf7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='192c003a'>
+        <parameter type-id='63a08bf7'/>
+        <parameter type-id='1a494567'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7b840f9'>
+        <parameter type-id='e5411c2c' name='f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b297b72f'>
+        <parameter type-id='6614aa5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6bdcb4d'>
+        <parameter type-id='49a58c0c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f089a11b'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='4e532009'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5213d9b'>
+        <parameter type-id='49a58c0c'/>
+        <parameter type-id='c23646a3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/configfs.c' language='LANG_C89'>
+      <pointer-type-def type-id='5260af22' size-in-bits='64' id='b6338998'/>
+      <function-decl name='usb_os_desc_prepare_interf_dir' mangled-name='usb_os_desc_prepare_interf_dir' filepath='drivers/usb/gadget/configfs.c' line='1229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_os_desc_prepare_interf_dir'>
+        <parameter type-id='97aff453' name='parent' filepath='drivers/usb/gadget/configfs.c' line='1230' column='1'/>
+        <parameter type-id='95e97e5e' name='n_interf' filepath='drivers/usb/gadget/configfs.c' line='1231' column='1'/>
+        <parameter type-id='b6338998' name='desc' filepath='drivers/usb/gadget/configfs.c' line='1232' column='1'/>
+        <parameter type-id='9b23c9ad' name='names' filepath='drivers/usb/gadget/configfs.c' line='1233' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='drivers/usb/gadget/configfs.c' line='1234' column='1'/>
+        <return type-id='97aff453'/>
+      </function-decl>
+      <function-decl name='unregister_gadget_item' mangled-name='unregister_gadget_item' filepath='drivers/usb/gadget/configfs.c' line='1881' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_gadget_item'>
+        <parameter type-id='7a29ff27' name='item' filepath='drivers/usb/gadget/configfs.c' line='1881' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/epautoconf.c' language='LANG_C89'>
+      <function-decl name='usb_ep_autoconfig' mangled-name='usb_ep_autoconfig' filepath='drivers/usb/gadget/epautoconf.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_autoconfig'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/epautoconf.c' line='150' column='1'/>
+        <parameter type-id='a07d0491' name='desc' filepath='drivers/usb/gadget/epautoconf.c' line='151' column='1'/>
+        <return type-id='63a08bf7'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/function/u_serial.c' language='LANG_C89'>
+      <class-decl name='gserial' size-in-bits='2176' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='34' column='1' id='11f6cc62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='d6a54726' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ioport' type-id='c10e36d3' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='in' type-id='63a08bf7' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='out' type-id='63a08bf7' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='port_line_coding' type-id='d4a32434' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='connect' type-id='cad718c1' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='disconnect' type-id='cad718c1' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='send_break' type-id='4980d45f' visibility='default' filepath='drivers/usb/gadget/function/u_serial.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gs_port' size-in-bits='5568' is-struct='yes' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='99' column='1' id='4788f063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='7e1e521a' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='port_lock' type-id='fb4018a0' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='port_usb' type-id='3921c1a0' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='openclose' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3144'>
+          <var-decl name='port_num' type-id='f9b06939' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='read_pool' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='read_started' type-id='95e97e5e' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='read_allocated' type-id='95e97e5e' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='read_queue' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='n_read' type-id='f0981eeb' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='push' type-id='5ad6e0ef' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='write_pool' type-id='72f469ec' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='write_started' type-id='95e97e5e' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='write_allocated' type-id='95e97e5e' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='port_write_buf' type-id='7664edcc' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='drain_wait' type-id='b5ab048f' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='write_busy' type-id='b50a4934' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='close_wait' type-id='b5ab048f' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='port_line_coding' type-id='d4a32434' visibility='default' filepath='drivers/usb/gadget/function/u_serial.c' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='7664edcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='df24571d' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buf' type-id='5e6516ee' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1' id='df24571d'>
+        <data-member access='public'>
+          <var-decl name='kfifo' type-id='bbbc6c1e' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='type' type-id='cf536864' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='const_type' type-id='354f7eb9' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rectype' type-id='4209d6b5' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ptr_const' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='83' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='usb_cdc_line_coding' size-in-bits='56' is-struct='yes' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='257' column='1' id='d4a32434'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dwDTERate' type-id='2f162548' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bCharFormat' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bParityType' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='bDataBits' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/usb/cdc.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e84913bd' size-in-bits='64' id='4209d6b5'/>
+      <pointer-type-def type-id='4788f063' size-in-bits='64' id='c10e36d3'/>
+      <pointer-type-def type-id='11f6cc62' size-in-bits='64' id='3921c1a0'/>
+      <pointer-type-def type-id='8b226e8b' size-in-bits='64' id='4980d45f'/>
+      <pointer-type-def type-id='b086bddd' size-in-bits='64' id='cad718c1'/>
+      <function-decl name='gserial_alloc_line' mangled-name='gserial_alloc_line' filepath='drivers/usb/gadget/function/u_serial.c' line='1211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_alloc_line'>
+        <parameter type-id='cf536864' name='line_num' filepath='drivers/usb/gadget/function/u_serial.c' line='1211' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gserial_disconnect' mangled-name='gserial_disconnect' filepath='drivers/usb/gadget/function/u_serial.c' line='1355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_disconnect'>
+        <parameter type-id='3921c1a0' name='gser' filepath='drivers/usb/gadget/function/u_serial.c' line='1355' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gserial_connect' mangled-name='gserial_connect' filepath='drivers/usb/gadget/function/u_serial.c' line='1279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_connect'>
+        <parameter type-id='3921c1a0' name='gser' filepath='drivers/usb/gadget/function/u_serial.c' line='1279' column='1'/>
+        <parameter type-id='f9b06939' name='port_num' filepath='drivers/usb/gadget/function/u_serial.c' line='1279' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gserial_free_line' mangled-name='gserial_free_line' filepath='drivers/usb/gadget/function/u_serial.c' line='1192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gserial_free_line'>
+        <parameter type-id='002ac4a6' name='port_num' filepath='drivers/usb/gadget/function/u_serial.c' line='1192' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gs_alloc_req' mangled-name='gs_alloc_req' filepath='drivers/usb/gadget/function/u_serial.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gs_alloc_req'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/function/u_serial.c' line='159' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='drivers/usb/gadget/function/u_serial.c' line='159' column='1'/>
+        <parameter type-id='3eb7c31c' name='kmalloc_flags' filepath='drivers/usb/gadget/function/u_serial.c' line='159' column='1'/>
+        <return type-id='1a494567'/>
+      </function-decl>
+      <function-decl name='gs_free_req' mangled-name='gs_free_req' filepath='drivers/usb/gadget/function/u_serial.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gs_free_req'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/function/u_serial.c' line='183' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/function/u_serial.c' line='183' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8b226e8b'>
+        <parameter type-id='3921c1a0'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b086bddd'>
+        <parameter type-id='3921c1a0' name='gser'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/functions.c' language='LANG_C89'>
+      <function-decl name='usb_put_function_instance' mangled-name='usb_put_function_instance' filepath='drivers/usb/gadget/functions.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_put_function_instance'>
+        <parameter type-id='6614aa5e' name='fi' filepath='drivers/usb/gadget/functions.c' line='69' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_function_unregister' mangled-name='usb_function_unregister' filepath='drivers/usb/gadget/functions.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_function_unregister'>
+        <parameter type-id='f666bcc1' name='fd' filepath='drivers/usb/gadget/functions.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_function_register' mangled-name='usb_function_register' filepath='drivers/usb/gadget/functions.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_function_register'>
+        <parameter type-id='f666bcc1' name='newf' filepath='drivers/usb/gadget/functions.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/gadget/udc/core.c' language='LANG_C89'>
+      <function-decl name='usb_gadget_giveback_request' mangled-name='usb_gadget_giveback_request' filepath='drivers/usb/gadget/udc/core.c' line='899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_giveback_request'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='899' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='900' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_unmap_request_by_dev' mangled-name='usb_gadget_unmap_request_by_dev' filepath='drivers/usb/gadget/udc/core.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_unmap_request_by_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/gadget/udc/core.c' line='862' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='863' column='1'/>
+        <parameter type-id='95e97e5e' name='is_in' filepath='drivers/usb/gadget/udc/core.c' line='863' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_map_request_by_dev' mangled-name='usb_gadget_map_request_by_dev' filepath='drivers/usb/gadget/udc/core.c' line='814' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_map_request_by_dev'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/gadget/udc/core.c' line='814' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='815' column='1'/>
+        <parameter type-id='95e97e5e' name='is_in' filepath='drivers/usb/gadget/udc/core.c' line='815' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='62' column='1'/>
+        <parameter type-id='f0981eeb' name='maxpacket_limit' filepath='drivers/usb/gadget/udc/core.c' line='63' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_gadget_udc_reset' mangled-name='usb_gadget_udc_reset' filepath='drivers/usb/gadget/udc/core.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_udc_reset'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1059' column='1'/>
+        <parameter type-id='9762ede1' name='driver' filepath='drivers/usb/gadget/udc/core.c' line='1060' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_del_gadget_udc' mangled-name='usb_del_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_del_gadget_udc'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1317' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_queue' mangled-name='usb_ep_queue' filepath='drivers/usb/gadget/udc/core.c' line='271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_queue'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='271' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='272' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_flags' filepath='drivers/usb/gadget/udc/core.c' line='272' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_draw' mangled-name='usb_gadget_vbus_draw' filepath='drivers/usb/gadget/udc/core.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_draw'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='607' column='1'/>
+        <parameter type-id='f0981eeb' name='mA' filepath='drivers/usb/gadget/udc/core.c' line='607' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_alloc_request' mangled-name='usb_ep_alloc_request' filepath='drivers/usb/gadget/udc/core.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_alloc_request'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='173' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_flags' filepath='drivers/usb/gadget/udc/core.c' line='174' column='1'/>
+        <return type-id='1a494567'/>
+      </function-decl>
+      <function-decl name='usb_ep_free_request' mangled-name='usb_ep_free_request' filepath='drivers/usb/gadget/udc/core.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_free_request'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='195' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_dequeue' mangled-name='usb_ep_dequeue' filepath='drivers/usb/gadget/udc/core.c' line='307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_dequeue'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='307' column='1'/>
+        <parameter type-id='1a494567' name='req' filepath='drivers/usb/gadget/udc/core.c' line='307' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_wakeup' mangled-name='usb_gadget_wakeup' filepath='drivers/usb/gadget/udc/core.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_wakeup'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_disconnect' mangled-name='usb_gadget_vbus_disconnect' filepath='drivers/usb/gadget/udc/core.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_disconnect'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='638' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_vbus_connect' mangled-name='usb_gadget_vbus_connect' filepath='drivers/usb/gadget/udc/core.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_vbus_connect'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_gadget_set_state' mangled-name='usb_gadget_set_state' filepath='drivers/usb/gadget/udc/core.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_gadget_set_state'>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1012' column='1'/>
+        <parameter type-id='901a91cb' name='state' filepath='drivers/usb/gadget/udc/core.c' line='1013' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_set_wedge' mangled-name='usb_ep_set_wedge' filepath='drivers/usb/gadget/udc/core.c' line='390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_wedge'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='390' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_set_halt' mangled-name='usb_ep_set_halt' filepath='drivers/usb/gadget/udc/core.c' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_set_halt'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='341' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_fifo_flush' mangled-name='usb_ep_fifo_flush' filepath='drivers/usb/gadget/udc/core.c' line='448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_fifo_flush'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='448' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_ep_enable' mangled-name='usb_ep_enable' filepath='drivers/usb/gadget/udc/core.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_enable'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_disable' mangled-name='usb_ep_disable' filepath='drivers/usb/gadget/udc/core.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_disable'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='139' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_ep_clear_halt' mangled-name='usb_ep_clear_halt' filepath='drivers/usb/gadget/udc/core.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_ep_clear_halt'>
+        <parameter type-id='63a08bf7' name='ep' filepath='drivers/usb/gadget/udc/core.c' line='367' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_add_gadget_udc' mangled-name='usb_add_gadget_udc' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_gadget_udc'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1'/>
+        <parameter type-id='49a58c0c' name='gadget' filepath='drivers/usb/gadget/udc/core.c' line='1286' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/host/ehci-hcd.c' language='LANG_C89'>
+      <class-decl name='ehci_driver_overrides' size-in-bits='192' is-struct='yes' visibility='default' filepath='drivers/usb/host/ehci.h' line='873' column='1' id='f0985961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='extra_priv_size' type-id='b59d7dce' visibility='default' filepath='drivers/usb/host/ehci.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reset' type-id='3d4f6569' visibility='default' filepath='drivers/usb/host/ehci.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='port_power' type-id='57938551' visibility='default' filepath='drivers/usb/host/ehci.h' line='876' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f0985961' const='yes' id='7aaba742'/>
+      <pointer-type-def type-id='7aaba742' size-in-bits='64' id='843888b8'/>
+      <pointer-type-def type-id='519497e3' size-in-bits='64' id='c07d5ba3'/>
+      <function-decl name='ehci_suspend' mangled-name='ehci_suspend' filepath='drivers/usb/host/ehci-hcd.c' line='1106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ehci_suspend'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/host/ehci-hcd.c' line='1106' column='1'/>
+        <parameter type-id='b50a4934' name='do_wakeup' filepath='drivers/usb/host/ehci-hcd.c' line='1106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ehci_resume' mangled-name='ehci_resume' filepath='drivers/usb/host/ehci-hcd.c' line='1140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ehci_resume'>
+        <parameter type-id='fc4f83c1' name='hcd' filepath='drivers/usb/host/ehci-hcd.c' line='1140' column='1'/>
+        <parameter type-id='b50a4934' name='force_reset' filepath='drivers/usb/host/ehci-hcd.c' line='1140' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ehci_init_driver' mangled-name='ehci_init_driver' filepath='drivers/usb/host/ehci-hcd.c' line='1259' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ehci_init_driver'>
+        <parameter type-id='c07d5ba3' name='drv' filepath='drivers/usb/host/ehci-hcd.c' line='1259' column='1'/>
+        <parameter type-id='843888b8' name='over' filepath='drivers/usb/host/ehci-hcd.c' line='1260' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/host/pci-quirks.c' language='LANG_C89'>
+      <function-decl name='usb_enable_intel_xhci_ports' mangled-name='usb_enable_intel_xhci_ports' filepath='drivers/usb/host/pci-quirks.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_enable_intel_xhci_ports'>
+        <parameter type-id='85196e3f' name='xhci_pdev' filepath='drivers/usb/host/pci-quirks.c' line='1041' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_disable_xhci_ports' mangled-name='usb_disable_xhci_ports' filepath='drivers/usb/host/pci-quirks.c' line='1126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_disable_xhci_ports'>
+        <parameter type-id='85196e3f' name='xhci_pdev' filepath='drivers/usb/host/pci-quirks.c' line='1126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_asmedia_modifyflowcontrol' mangled-name='usb_asmedia_modifyflowcontrol' filepath='drivers/usb/host/pci-quirks.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_asmedia_modifyflowcontrol'>
+        <parameter type-id='85196e3f' name='pdev' filepath='drivers/usb/host/pci-quirks.c' line='484' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_enable' mangled-name='usb_amd_quirk_pll_enable' filepath='drivers/usb/host/pci-quirks.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_enable'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_disable' mangled-name='usb_amd_quirk_pll_disable' filepath='drivers/usb/host/pci-quirks.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_disable'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_amd_quirk_pll_check' mangled-name='usb_amd_quirk_pll_check' filepath='drivers/usb/host/pci-quirks.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_quirk_pll_check'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='usb_amd_pt_check_port' mangled-name='usb_amd_pt_check_port' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_pt_check_port'>
+        <parameter type-id='fa0b179b' name='device' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1'/>
+        <parameter type-id='95e97e5e' name='port' filepath='drivers/usb/host/pci-quirks.c' line='547' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='usb_amd_prefetch_quirk' mangled-name='usb_amd_prefetch_quirk' filepath='drivers/usb/host/pci-quirks.c' line='312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_prefetch_quirk'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='usb_amd_dev_put' mangled-name='usb_amd_dev_put' filepath='drivers/usb/host/pci-quirks.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_amd_dev_put'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sb800_prefetch' mangled-name='sb800_prefetch' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb800_prefetch'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1'/>
+        <parameter type-id='95e97e5e' name='on' filepath='drivers/usb/host/pci-quirks.c' line='191' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/phy/of.c' language='LANG_C89'>
+      <enum-decl name='usb_phy_interface' filepath='include/linux/usb/phy.h' line='19' column='1' id='46b5771e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UNKNOWN' value='0'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UTMI' value='1'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_UTMIW' value='2'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_ULPI' value='3'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_SERIAL' value='4'/>
+        <enumerator name='USBPHY_INTERFACE_MODE_HSIC' value='5'/>
+      </enum-decl>
+      <function-decl name='of_usb_get_phy_mode' mangled-name='of_usb_get_phy_mode' filepath='drivers/usb/phy/of.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_usb_get_phy_mode'>
+        <parameter type-id='9a537bbe' name='np' filepath='drivers/usb/phy/of.c' line='28' column='1'/>
+        <return type-id='46b5771e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/phy/phy.c' language='LANG_C89'>
+      <function-decl name='usb_remove_phy' mangled-name='usb_remove_phy' filepath='drivers/usb/phy/phy.c' line='692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_remove_phy'>
+        <parameter type-id='ca9354d1' name='x' filepath='drivers/usb/phy/phy.c' line='692' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_phy_set_charger_state' mangled-name='usb_phy_set_charger_state' filepath='drivers/usb/phy/phy.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_set_charger_state'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='268' column='1'/>
+        <parameter type-id='6d659af5' name='state' filepath='drivers/usb/phy/phy.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_phy_set_charger_current' mangled-name='usb_phy_set_charger_current' filepath='drivers/usb/phy/phy.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_set_charger_current'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='182' column='1'/>
+        <parameter type-id='f0981eeb' name='mA' filepath='drivers/usb/phy/phy.c' line='182' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_phy_get_charger_current' mangled-name='usb_phy_get_charger_current' filepath='drivers/usb/phy/phy.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_phy_get_charger_current'>
+        <parameter type-id='ca9354d1' name='usb_phy' filepath='drivers/usb/phy/phy.c' line='231' column='1'/>
+        <parameter type-id='807869d3' name='min' filepath='drivers/usb/phy/phy.c' line='232' column='1'/>
+        <parameter type-id='807869d3' name='max' filepath='drivers/usb/phy/phy.c' line='232' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_add_phy_dev' mangled-name='usb_add_phy_dev' filepath='drivers/usb/phy/phy.c' line='661' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_add_phy_dev'>
+        <parameter type-id='ca9354d1' name='x' filepath='drivers/usb/phy/phy.c' line='661' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_usb_get_phy_by_phandle' mangled-name='devm_usb_get_phy_by_phandle' filepath='drivers/usb/phy/phy.c' line='545' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_usb_get_phy_by_phandle'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/phy/phy.c' line='545' column='1'/>
+        <parameter type-id='80f4b756' name='phandle' filepath='drivers/usb/phy/phy.c' line='546' column='1'/>
+        <parameter type-id='f9b06939' name='index' filepath='drivers/usb/phy/phy.c' line='546' column='1'/>
+        <return type-id='ca9354d1'/>
+      </function-decl>
+      <function-decl name='devm_usb_get_phy' mangled-name='devm_usb_get_phy' filepath='drivers/usb/phy/phy.c' line='415' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_usb_get_phy'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/phy/phy.c' line='415' column='1'/>
+        <parameter type-id='d95f4827' name='type' filepath='drivers/usb/phy/phy.c' line='415' column='1'/>
+        <return type-id='ca9354d1'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/roles/class.c' language='LANG_C89'>
+      <enum-decl name='usb_role' filepath='include/linux/usb/role.h' line='10' column='1' id='c675b073'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='USB_ROLE_NONE' value='0'/>
+        <enumerator name='USB_ROLE_HOST' value='1'/>
+        <enumerator name='USB_ROLE_DEVICE' value='2'/>
+      </enum-decl>
+      <typedef-decl name='usb_role_switch_set_t' type-id='91d6713d' filepath='include/linux/usb/role.h' line='16' column='1' id='265b58a4'/>
+      <typedef-decl name='usb_role_switch_get_t' type-id='be8d9c5e' filepath='include/linux/usb/role.h' line='17' column='1' id='3341a400'/>
+      <class-decl name='usb_role_switch_desc' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb/role.h' line='35' column='1' id='6d84fe29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/role.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usb2_port' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb3_port' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='udc' type-id='fa0b179b' visibility='default' filepath='include/linux/usb/role.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set' type-id='265b58a4' visibility='default' filepath='include/linux/usb/role.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get' type-id='3341a400' visibility='default' filepath='include/linux/usb/role.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='allow_userspace_control' type-id='b50a4934' visibility='default' filepath='include/linux/usb/role.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6d84fe29' const='yes' id='40fcf9ec'/>
+      <pointer-type-def type-id='40fcf9ec' size-in-bits='64' id='143d32b2'/>
+      <pointer-type-def type-id='c598cb04' size-in-bits='64' id='be8d9c5e'/>
+      <pointer-type-def type-id='53f72e39' size-in-bits='64' id='91d6713d'/>
+      <function-decl name='usb_role_switch_register' mangled-name='usb_role_switch_register' filepath='drivers/usb/roles/class.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_register'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/roles/class.c' line='285' column='1'/>
+        <parameter type-id='143d32b2' name='desc' filepath='drivers/usb/roles/class.c' line='286' column='1'/>
+        <return type-id='3e3cd44f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_set_role' mangled-name='usb_role_switch_set_role' filepath='drivers/usb/roles/class.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_set_role'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='42' column='1'/>
+        <parameter type-id='c675b073' name='role' filepath='drivers/usb/roles/class.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_get' mangled-name='usb_role_switch_get' filepath='drivers/usb/roles/class.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_get'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/roles/class.c' line='125' column='1'/>
+        <return type-id='3e3cd44f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_unregister' mangled-name='usb_role_switch_unregister' filepath='drivers/usb/roles/class.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_unregister'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_put' mangled-name='usb_role_switch_put' filepath='drivers/usb/roles/class.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_put'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='169' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='usb_role_switch_get_role' mangled-name='usb_role_switch_get_role' filepath='drivers/usb/roles/class.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usb_role_switch_get_role'>
+        <parameter type-id='3e3cd44f' name='sw' filepath='drivers/usb/roles/class.c' line='68' column='1'/>
+        <return type-id='c675b073'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c598cb04'>
+        <parameter type-id='fa0b179b'/>
+        <return type-id='c675b073'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53f72e39'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='c675b073'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='3b2a0df7' size-in-bits='64' id='3e3cd44f'/>
+      <class-decl name='usb_role_switch' size-in-bits='8192' is-struct='yes' visibility='default' filepath='drivers/usb/roles/class.c' line='19' column='1' id='3b2a0df7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/roles/class.c' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/usb/roles/class.c' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='role' type-id='c675b073' visibility='default' filepath='drivers/usb/roles/class.c' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='usb2_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='usb3_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='udc' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='set' type-id='265b58a4' visibility='default' filepath='drivers/usb/roles/class.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='get' type-id='3341a400' visibility='default' filepath='drivers/usb/roles/class.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='allow_userspace_control' type-id='b50a4934' visibility='default' filepath='drivers/usb/roles/class.c' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/typec/bus.c' language='LANG_C89'>
+      <qualified-type-def type-id='17a13961' const='yes' id='2974aa72'/>
+      <pointer-type-def type-id='2974aa72' size-in-bits='64' id='9aa82888'/>
+      <pointer-type-def type-id='02913b69' size-in-bits='64' id='4da04a79'/>
+      <function-decl name='typec_match_altmode' mangled-name='typec_match_altmode' filepath='drivers/usb/typec/bus.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_match_altmode'>
+        <parameter type-id='4da04a79' name='altmodes' filepath='drivers/usb/typec/bus.c' line='270' column='1'/>
+        <parameter type-id='b59d7dce' name='n' filepath='drivers/usb/typec/bus.c' line='271' column='1'/>
+        <parameter type-id='1dc6a898' name='svid' filepath='drivers/usb/typec/bus.c' line='271' column='1'/>
+        <parameter type-id='f9b06939' name='mode' filepath='drivers/usb/typec/bus.c' line='271' column='1'/>
+        <return type-id='02913b69'/>
+      </function-decl>
+      <function-decl name='typec_altmode_vdm' mangled-name='typec_altmode_vdm' filepath='drivers/usb/typec/bus.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_vdm'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='169' column='1'/>
+        <parameter type-id='51bb592e' name='header' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <parameter type-id='aded214c' name='vdo' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='drivers/usb/typec/bus.c' line='170' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_altmode_notify' mangled-name='typec_altmode_notify' filepath='drivers/usb/typec/bus.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_notify'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='51' column='1'/>
+        <parameter type-id='7359adad' name='conf' filepath='drivers/usb/typec/bus.c' line='52' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/usb/typec/bus.c' line='52' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_altmode_get_partner' mangled-name='typec_altmode_get_partner' filepath='drivers/usb/typec/bus.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_get_partner'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='193' column='1'/>
+        <return type-id='9aa82888'/>
+      </function-decl>
+      <function-decl name='typec_altmode_attention' mangled-name='typec_altmode_attention' filepath='drivers/usb/typec/bus.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_attention'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/bus.c' line='149' column='1'/>
+        <parameter type-id='19c2251e' name='vdo' filepath='drivers/usb/typec/bus.c' line='149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='typec_altmode' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='24' column='1' id='17a13961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='ops' type-id='536df0d1' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='17a13961' size-in-bits='64' id='02913b69'/>
+      <pointer-type-def type-id='bbe452a1' size-in-bits='64' id='536df0d1'/>
+      <qualified-type-def type-id='62ec705a' const='yes' id='bbe452a1'/>
+      <class-decl name='typec_altmode_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='58' column='1' id='62ec705a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enter' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attention' type-id='2227a3ab' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdm' type-id='cc114ffc' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notify' type-id='822493cb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='activate' type-id='d65efcf0' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='db2d72d5' size-in-bits='64' id='f9431329'/>
+      <pointer-type-def type-id='1f31ad12' size-in-bits='64' id='cc114ffc'/>
+      <pointer-type-def type-id='e6fedf36' size-in-bits='64' id='d65efcf0'/>
+      <pointer-type-def type-id='42a0ecc7' size-in-bits='64' id='822493cb'/>
+      <pointer-type-def type-id='345f1a5f' size-in-bits='64' id='2227a3ab'/>
+      <function-type size-in-bits='64' id='1f31ad12'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='51bb592e' name='header'/>
+        <parameter type-id='aded214c' name='vdo'/>
+        <parameter type-id='95e97e5e' name='count'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='42a0ecc7'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='7359adad' name='conf'/>
+        <parameter type-id='eaa32e2f' name='data'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='345f1a5f'>
+        <parameter type-id='02913b69' name='adev'/>
+        <parameter type-id='19c2251e' name='vdo'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/typec/class.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='357a6a78' size-in-bits='96' alignment-in-bits='32' id='ee8e0be0'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='typec_port' size-in-bits='8512' is-struct='yes' visibility='default' filepath='drivers/usb/typec/class.c' line='42' column='1' id='1b0b5250'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/class.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/class.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='mode_ids' type-id='46ce60fb' visibility='default' filepath='drivers/usb/typec/class.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='prefer_role' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/class.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='data_role' type-id='e453a0cb' visibility='default' filepath='drivers/usb/typec/class.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='pwr_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/class.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7776'>
+          <var-decl name='vconn_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/class.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='pwr_opmode' type-id='44ea1984' visibility='default' filepath='drivers/usb/typec/class.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7840'>
+          <var-decl name='port_type' type-id='0a19b04e' visibility='default' filepath='drivers/usb/typec/class.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='port_type_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/class.c' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='orientation' type-id='131b0a9c' visibility='default' filepath='drivers/usb/typec/class.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='sw' type-id='5d33005f' visibility='default' filepath='drivers/usb/typec/class.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='mux' type-id='374b228b' visibility='default' filepath='drivers/usb/typec/class.c' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='cap' type-id='287e28ea' visibility='default' filepath='drivers/usb/typec/class.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='ops' type-id='ebbbab1e' visibility='default' filepath='drivers/usb/typec/class.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/usb/typec/class.c' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_data_role' filepath='include/linux/usb/typec.h' line='42' column='1' id='e453a0cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_DEVICE' value='0'/>
+        <enumerator name='TYPEC_HOST' value='1'/>
+      </enum-decl>
+      <enum-decl name='typec_role' filepath='include/linux/usb/typec.h' line='47' column='1' id='ad61830a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_SINK' value='0'/>
+        <enumerator name='TYPEC_SOURCE' value='1'/>
+      </enum-decl>
+      <enum-decl name='typec_pwr_opmode' filepath='include/linux/usb/typec.h' line='52' column='1' id='44ea1984'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PWR_MODE_USB' value='0'/>
+        <enumerator name='TYPEC_PWR_MODE_1_5A' value='1'/>
+        <enumerator name='TYPEC_PWR_MODE_3_0A' value='2'/>
+        <enumerator name='TYPEC_PWR_MODE_PD' value='3'/>
+      </enum-decl>
+      <enum-decl name='typec_port_type' filepath='include/linux/usb/typec.h' line='22' column='1' id='0a19b04e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PORT_SRC' value='0'/>
+        <enumerator name='TYPEC_PORT_SNK' value='1'/>
+        <enumerator name='TYPEC_PORT_DRP' value='2'/>
+      </enum-decl>
+      <enum-decl name='typec_orientation' filepath='include/linux/usb/typec.h' line='67' column='1' id='131b0a9c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_ORIENTATION_NONE' value='0'/>
+        <enumerator name='TYPEC_ORIENTATION_NORMAL' value='1'/>
+        <enumerator name='TYPEC_ORIENTATION_REVERSE' value='2'/>
+      </enum-decl>
+      <class-decl name='typec_switch' size-in-bits='7552' is-struct='yes' visibility='default' filepath='drivers/usb/typec/bus.h' line='40' column='1' id='eca93177'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/bus.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='set' type-id='d08a3e2d' visibility='default' filepath='drivers/usb/typec/bus.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='typec_switch_set_fn_t' type-id='a16f8ee4' filepath='include/linux/usb/typec_mux.h' line='13' column='1' id='d08a3e2d'/>
+      <class-decl name='typec_mux' size-in-bits='7552' is-struct='yes' visibility='default' filepath='drivers/usb/typec/bus.h' line='45' column='1' id='20494abb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/bus.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='set' type-id='43788717' visibility='default' filepath='drivers/usb/typec/bus.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='typec_mux_set_fn_t' type-id='2be74e8a' filepath='include/linux/usb/typec_mux.h' line='32' column='1' id='43788717'/>
+      <class-decl name='typec_capability' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='206' column='1' id='1f2b9a61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='0a19b04e' visibility='default' filepath='include/linux/usb/typec.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='data' type-id='89aae82e' visibility='default' filepath='include/linux/usb/typec.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='revision' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='pd_revision' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='prefer_role' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accessory' type-id='ee8e0be0' visibility='default' filepath='include/linux/usb/typec.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sw' type-id='5d33005f' visibility='default' filepath='include/linux/usb/typec.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mux' type-id='374b228b' visibility='default' filepath='include/linux/usb/typec.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/typec.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/usb/typec.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ops' type-id='ebbbab1e' visibility='default' filepath='include/linux/usb/typec.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_port_data' filepath='include/linux/usb/typec.h' line='28' column='1' id='89aae82e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_PORT_DFP' value='0'/>
+        <enumerator name='TYPEC_PORT_UFP' value='1'/>
+        <enumerator name='TYPEC_PORT_DRD' value='2'/>
+      </enum-decl>
+      <enum-decl name='typec_accessory' filepath='include/linux/usb/typec.h' line='59' column='1' id='357a6a78'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_ACCESSORY_NONE' value='0'/>
+        <enumerator name='TYPEC_ACCESSORY_AUDIO' value='1'/>
+        <enumerator name='TYPEC_ACCESSORY_DEBUG' value='2'/>
+      </enum-decl>
+      <class-decl name='typec_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='180' column='1' id='d3860975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='try_role' type-id='d7a90e3b' visibility='default' filepath='include/linux/usb/typec.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dr_set' type-id='55ebe352' visibility='default' filepath='include/linux/usb/typec.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pr_set' type-id='331e3ac7' visibility='default' filepath='include/linux/usb/typec.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vconn_set' type-id='331e3ac7' visibility='default' filepath='include/linux/usb/typec.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='port_type_set' type-id='6507da23' visibility='default' filepath='include/linux/usb/typec.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_partner' size-in-bits='7872' is-struct='yes' visibility='default' filepath='drivers/usb/typec/class.c' line='33' column='1' id='7940281b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/typec/class.c' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usb_pd' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/class.c' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='identity' type-id='09dbca85' visibility='default' filepath='drivers/usb/typec/class.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='accessory' type-id='357a6a78' visibility='default' filepath='drivers/usb/typec/class.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='mode_ids' type-id='46ce60fb' visibility='default' filepath='drivers/usb/typec/class.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='drivers/usb/typec/class.c' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_pd_identity' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='84' column='1' id='57bfbe05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id_header' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cert_stat' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='product' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode' size-in-bits='7808' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='24' column='1' id='17a13961'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='desc' type-id='26a90f95' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='ops' type-id='536df0d1' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode_ops' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='58' column='1' id='62ec705a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enter' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit' type-id='f9431329' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attention' type-id='2227a3ab' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vdm' type-id='cc114ffc' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notify' type-id='822493cb' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='activate' type-id='d65efcf0' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/usb/typec_altmode.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_partner_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='166' column='1' id='3ad5d94d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usb_pd' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/typec.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accessory' type-id='357a6a78' visibility='default' filepath='include/linux/usb/typec.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='identity' type-id='09dbca85' visibility='default' filepath='include/linux/usb/typec.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='typec_altmode_desc' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/usb/typec.h' line='103' column='1' id='968d5b5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svid' type-id='1dc6a898' visibility='default' filepath='include/linux/usb/typec.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/usb/typec.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vdo' type-id='19c2251e' visibility='default' filepath='include/linux/usb/typec.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='roles' type-id='89aae82e' visibility='default' filepath='include/linux/usb/typec.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='968d5b5b' const='yes' id='4cf04ec2'/>
+      <pointer-type-def type-id='4cf04ec2' size-in-bits='64' id='064c3738'/>
+      <qualified-type-def type-id='62ec705a' const='yes' id='bbe452a1'/>
+      <pointer-type-def type-id='bbe452a1' size-in-bits='64' id='536df0d1'/>
+      <qualified-type-def type-id='1f2b9a61' const='yes' id='67d8ed84'/>
+      <pointer-type-def type-id='67d8ed84' size-in-bits='64' id='287e28ea'/>
+      <qualified-type-def type-id='d3860975' const='yes' id='105c9300'/>
+      <pointer-type-def type-id='105c9300' size-in-bits='64' id='ebbbab1e'/>
+      <pointer-type-def type-id='db2d72d5' size-in-bits='64' id='f9431329'/>
+      <pointer-type-def type-id='1f31ad12' size-in-bits='64' id='cc114ffc'/>
+      <pointer-type-def type-id='e6fedf36' size-in-bits='64' id='d65efcf0'/>
+      <pointer-type-def type-id='42a0ecc7' size-in-bits='64' id='822493cb'/>
+      <pointer-type-def type-id='da263080' size-in-bits='64' id='2be74e8a'/>
+      <pointer-type-def type-id='b1e1f550' size-in-bits='64' id='55ebe352'/>
+      <pointer-type-def type-id='bca3f647' size-in-bits='64' id='6507da23'/>
+      <pointer-type-def type-id='0a7e93ab' size-in-bits='64' id='331e3ac7'/>
+      <pointer-type-def type-id='4e214e97' size-in-bits='64' id='d7a90e3b'/>
+      <pointer-type-def type-id='8a7e9d52' size-in-bits='64' id='a16f8ee4'/>
+      <pointer-type-def type-id='17a13961' size-in-bits='64' id='02913b69'/>
+      <pointer-type-def type-id='20494abb' size-in-bits='64' id='374b228b'/>
+      <pointer-type-def type-id='7940281b' size-in-bits='64' id='33ca4bbb'/>
+      <pointer-type-def type-id='3ad5d94d' size-in-bits='64' id='a5263fbd'/>
+      <pointer-type-def type-id='1b0b5250' size-in-bits='64' id='b977ca56'/>
+      <pointer-type-def type-id='eca93177' size-in-bits='64' id='5d33005f'/>
+      <pointer-type-def type-id='57bfbe05' size-in-bits='64' id='09dbca85'/>
+      <pointer-type-def type-id='345f1a5f' size-in-bits='64' id='2227a3ab'/>
+      <function-decl name='typec_register_port' mangled-name='typec_register_port' filepath='drivers/usb/typec/class.c' line='1549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_register_port'>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/usb/typec/class.c' line='1549' column='1'/>
+        <parameter type-id='287e28ea' name='cap' filepath='drivers/usb/typec/class.c' line='1550' column='1'/>
+        <return type-id='b977ca56'/>
+      </function-decl>
+      <function-decl name='typec_unregister_port' mangled-name='typec_unregister_port' filepath='drivers/usb/typec/class.c' line='1651' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_port'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1651' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_unregister_partner' mangled-name='typec_unregister_partner' filepath='drivers/usb/typec/class.c' line='698' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_partner'>
+        <parameter type-id='33ca4bbb' name='partner' filepath='drivers/usb/typec/class.c' line='698' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_unregister_altmode' mangled-name='typec_unregister_altmode' filepath='drivers/usb/typec/class.c' line='554' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_unregister_altmode'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/class.c' line='554' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_vconn_role' mangled-name='typec_set_vconn_role' filepath='drivers/usb/typec/class.c' line='1348' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_vconn_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1348' column='1'/>
+        <parameter type-id='ad61830a' name='role' filepath='drivers/usb/typec/class.c' line='1348' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_pwr_role' mangled-name='typec_set_pwr_role' filepath='drivers/usb/typec/class.c' line='1329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_pwr_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1329' column='1'/>
+        <parameter type-id='ad61830a' name='role' filepath='drivers/usb/typec/class.c' line='1329' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_pwr_opmode' mangled-name='typec_set_pwr_opmode' filepath='drivers/usb/typec/class.c' line='1374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_pwr_opmode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1374' column='1'/>
+        <parameter type-id='44ea1984' name='opmode' filepath='drivers/usb/typec/class.c' line='1375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_set_orientation' mangled-name='typec_set_orientation' filepath='drivers/usb/typec/class.c' line='1454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_orientation'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1454' column='1'/>
+        <parameter type-id='131b0a9c' name='orientation' filepath='drivers/usb/typec/class.c' line='1455' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_set_mode' mangled-name='typec_set_mode' filepath='drivers/usb/typec/class.c' line='1491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_mode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1491' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='drivers/usb/typec/class.c' line='1491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_set_data_role' mangled-name='typec_set_data_role' filepath='drivers/usb/typec/class.c' line='1311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_set_data_role'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1311' column='1'/>
+        <parameter type-id='e453a0cb' name='role' filepath='drivers/usb/typec/class.c' line='1311' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_register_partner' mangled-name='typec_register_partner' filepath='drivers/usb/typec/class.c' line='653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_register_partner'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='653' column='1'/>
+        <parameter type-id='a5263fbd' name='desc' filepath='drivers/usb/typec/class.c' line='654' column='1'/>
+        <return type-id='33ca4bbb'/>
+      </function-decl>
+      <function-decl name='typec_port_register_altmode' mangled-name='typec_port_register_altmode' filepath='drivers/usb/typec/class.c' line='1520' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_port_register_altmode'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1520' column='1'/>
+        <parameter type-id='064c3738' name='desc' filepath='drivers/usb/typec/class.c' line='1521' column='1'/>
+        <return type-id='02913b69'/>
+      </function-decl>
+      <function-decl name='typec_altmode_update_active' mangled-name='typec_altmode_update_active' filepath='drivers/usb/typec/class.c' line='285' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_altmode_update_active'>
+        <parameter type-id='02913b69' name='adev' filepath='drivers/usb/typec/class.c' line='285' column='1'/>
+        <parameter type-id='b50a4934' name='active' filepath='drivers/usb/typec/class.c' line='285' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='typec_partner_set_identity' mangled-name='typec_partner_set_identity' filepath='drivers/usb/typec/class.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_partner_set_identity'>
+        <parameter type-id='33ca4bbb' name='partner' filepath='drivers/usb/typec/class.c' line='614' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_partner_register_altmode' mangled-name='typec_partner_register_altmode' filepath='drivers/usb/typec/class.c' line='637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_partner_register_altmode'>
+        <parameter type-id='33ca4bbb' name='partner' filepath='drivers/usb/typec/class.c' line='637' column='1'/>
+        <parameter type-id='064c3738' name='desc' filepath='drivers/usb/typec/class.c' line='638' column='1'/>
+        <return type-id='02913b69'/>
+      </function-decl>
+      <function-decl name='typec_get_drvdata' mangled-name='typec_get_drvdata' filepath='drivers/usb/typec/class.c' line='1503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_get_drvdata'>
+        <parameter type-id='b977ca56' name='port' filepath='drivers/usb/typec/class.c' line='1503' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='typec_find_power_role' mangled-name='typec_find_power_role' filepath='drivers/usb/typec/class.c' line='1423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_find_power_role'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/usb/typec/class.c' line='1423' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_find_port_power_role' mangled-name='typec_find_port_power_role' filepath='drivers/usb/typec/class.c' line='1408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_find_port_power_role'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/usb/typec/class.c' line='1408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='typec_find_port_data_role' mangled-name='typec_find_port_data_role' filepath='drivers/usb/typec/class.c' line='1437' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='typec_find_port_data_role'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/usb/typec/class.c' line='1437' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db2d72d5'>
+        <parameter type-id='02913b69'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6fedf36'>
+        <parameter type-id='02913b69'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da263080'>
+        <parameter type-id='374b228b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1e1f550'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='e453a0cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bca3f647'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='0a19b04e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a7e93ab'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='ad61830a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e214e97'>
+        <parameter type-id='b977ca56'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a7e9d52'>
+        <parameter type-id='5d33005f'/>
+        <parameter type-id='131b0a9c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/usb/typec/tcpm/tcpm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='224' id='e369592a'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <class-decl name='thermal_cooling_device' size-in-bits='8576' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='134' column='1' id='3ae87f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='np' type-id='9a537bbe' visibility='default' filepath='include/linux/thermal.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='stats' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='ops' type-id='6f4dc085' visibility='default' filepath='include/linux/thermal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='updated' type-id='b50a4934' visibility='default' filepath='include/linux/thermal.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thermal_zone_device' size-in-bits='10816' is-struct='yes' visibility='default' filepath='include/linux/thermal.h' line='197' column='1' id='82084f52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='664ac0b7' visibility='default' filepath='include/linux/thermal.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='66e487eb' visibility='default' filepath='include/linux/thermal.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='trips_attribute_group' type-id='e4af473b' visibility='default' filepath='include/linux/thermal.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='trip_temp_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='trip_type_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='trip_hyst_attrs' type-id='fd801eb0' visibility='default' filepath='include/linux/thermal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='devdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='trips' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='trips_disabled' type-id='7359adad' visibility='default' filepath='include/linux/thermal.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='passive_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='polling_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8480'>
+          <var-decl name='last_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='emul_temperature' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='passive' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='prev_low_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='prev_high_trip' type-id='95e97e5e' visibility='default' filepath='include/linux/thermal.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='forced_passive' type-id='f0981eeb' visibility='default' filepath='include/linux/thermal.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8672'>
+          <var-decl name='need_update' type-id='49178f86' visibility='default' filepath='include/linux/thermal.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='ops' type-id='1e6fe389' visibility='default' filepath='include/linux/thermal.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='tzp' type-id='e2cbf964' visibility='default' filepath='include/linux/thermal.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='governor' type-id='6def7c4b' visibility='default' filepath='include/linux/thermal.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='governor_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/thermal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='thermal_instances' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='ida' type-id='46ce60fb' visibility='default' filepath='include/linux/thermal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/thermal.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/thermal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='poll_queue' type-id='5ad6e0ef' visibility='default' filepath='include/linux/thermal.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='notify_event' type-id='b5808f5e' visibility='default' filepath='include/linux/thermal.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/thermal.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='usb_role_switch' size-in-bits='8192' is-struct='yes' visibility='default' filepath='drivers/usb/roles/class.c' line='19' column='1' id='3b2a0df7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='drivers/usb/roles/class.c' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/usb/roles/class.c' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='role' type-id='c675b073' visibility='default' filepath='drivers/usb/roles/class.c' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='usb2_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='usb3_port' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='udc' type-id='fa0b179b' visibility='default' filepath='drivers/usb/roles/class.c' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='set' type-id='265b58a4' visibility='default' filepath='drivers/usb/roles/class.c' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='get' type-id='3341a400' visibility='default' filepath='drivers/usb/roles/class.c' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='allow_userspace_control' type-id='b50a4934' visibility='default' filepath='drivers/usb/roles/class.c' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='02913b69' size-in-bits='6144' id='6fcbfa84'>
+        <subrange length='96' type-id='7ff19f0f' id='1df62250'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='968d5b5b' size-in-bits='9216' id='589abf66'>
+        <subrange length='96' type-id='7ff19f0f' id='1df62250'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='256' id='42c6815a'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='224' id='1c69cda2'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8bff8096' size-in-bits='65536' id='bad1511f'>
+        <subrange length='1024' type-id='7ff19f0f' id='c60446f8'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='208' id='50390288'>
+        <subrange length='26' type-id='7ff19f0f' id='41d81c65'/>
+      </array-type-def>
+      <class-decl name='tcpm_port' size-in-bits='97472' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='209' column='1' id='902061bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='typec_caps' type-id='1f2b9a61' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='typec_port' type-id='b977ca56' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='tcpc' type-id='15b1f129' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='role_sw' type-id='3e3cd44f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vconn_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='pwr_role' type-id='ad61830a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='data_role' type-id='e453a0cb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='pwr_opmode' type-id='44ea1984' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='partner_ident' type-id='57bfbe05' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='partner_desc' type-id='3ad5d94d' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='partner' type-id='33ca4bbb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='cc_req' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='cc1' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='cc2' type-id='c2d135ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='polarity' type-id='551eebc9' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attached' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1800'>
+          <var-decl name='connected' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='port_type' type-id='0a19b04e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vbus_present' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='vbus_never_low' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1872'>
+          <var-decl name='vbus_source' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1880'>
+          <var-decl name='vbus_charge' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='send_discover' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1896'>
+          <var-decl name='op_vsafe5v' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='try_role' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='try_snk_count' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='try_src_count' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='queued_message' type-id='1d843e9c' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='enter_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='prev_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='delayed_state' type-id='c698cee4' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='delayed_runtime' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='delay_ms' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='pd_event_lock' type-id='fb4018a0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='pd_events' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='event_work' type-id='ef9025d0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='state_machine' type-id='5ad6e0ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='vdm_state_machine' type-id='5ad6e0ef' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='state_machine_running' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='tx_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='tx_status' type-id='a2f9e316' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='swap_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='swap_pending' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5576'>
+          <var-decl name='non_pd_role_swap' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='swap_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='swap_status' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5920'>
+          <var-decl name='negotiated_rev' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='message_id' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='caps_count' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='hard_reset_count' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='pd_capable' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6056'>
+          <var-decl name='explicit_contract' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='rx_msgid' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sink_request' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='source_caps' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6368'>
+          <var-decl name='nr_source_caps' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sink_caps' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='nr_sink_caps' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='src_pdo' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6880'>
+          <var-decl name='nr_src_pdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='snk_pdo' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='nr_snk_pdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='snk_vdo' type-id='5867ed7f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='nr_snk_vdo' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7392'>
+          <var-decl name='operating_snk_mw' type-id='f0981eeb' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='update_sink_caps' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7456'>
+          <var-decl name='req_current_limit' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='req_supply_voltage' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7520'>
+          <var-decl name='current_limit' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='supply_voltage' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='psy' type-id='c0c93c9e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='psy_desc' type-id='6d39b2d0' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='usb_type' type-id='1f7f0095' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8544'>
+          <var-decl name='bist_request' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='vdm_state' type-id='da4a4188' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='vdm_retries' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='vdo_data' type-id='1c69cda2' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='vdo_count' type-id='f9b06939' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='vdo_retry' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='pps_data' type-id='4ff0f7bc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='pps_complete' type-id='f9fef04f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='pps_pending' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='pps_status' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='mode_data' type-id='1d816e22' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19136'>
+          <var-decl name='partner_altmode' type-id='6fcbfa84' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25280'>
+          <var-decl name='port_altmode' type-id='6fcbfa84' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31424'>
+          <var-decl name='max_wait' type-id='7359adad' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31488'>
+          <var-decl name='self_powered' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31552'>
+          <var-decl name='dentry' type-id='27675065' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31616'>
+          <var-decl name='logbuffer_lock' type-id='925167dc' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31872'>
+          <var-decl name='logbuffer_head' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31904'>
+          <var-decl name='logbuffer_tail' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31936'>
+          <var-decl name='logbuffer' type-id='bad1511f' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='348' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcpc_dev' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/usb/tcpm.h' line='123' column='1' id='3a8363f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='4682930f' visibility='default' filepath='include/linux/usb/tcpm.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/usb/tcpm.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_vbus' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_current_limit' type-id='f581f1cf' visibility='default' filepath='include/linux/usb/tcpm.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_cc' type-id='8a62cb71' visibility='default' filepath='include/linux/usb/tcpm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_cc' type-id='fac661b7' visibility='default' filepath='include/linux/usb/tcpm.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_polarity' type-id='0123907b' visibility='default' filepath='include/linux/usb/tcpm.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_vconn' type-id='7f6ac72a' visibility='default' filepath='include/linux/usb/tcpm.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_vbus' type-id='7a202df3' visibility='default' filepath='include/linux/usb/tcpm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_current_limit' type-id='f24f1c45' visibility='default' filepath='include/linux/usb/tcpm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_pd_rx' type-id='7f6ac72a' visibility='default' filepath='include/linux/usb/tcpm.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_roles' type-id='8ca76d9f' visibility='default' filepath='include/linux/usb/tcpm.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='start_toggling' type-id='926bf87a' visibility='default' filepath='include/linux/usb/tcpm.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='try_role' type-id='e5015ca6' visibility='default' filepath='include/linux/usb/tcpm.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pd_transmit' type-id='cc0a6f53' visibility='default' filepath='include/linux/usb/tcpm.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcpc_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/usb/tcpm.h' line='67' column='1' id='a63ee284'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_pdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_src_pdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='snk_pdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_snk_pdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='snk_vdo' type-id='aded214c' visibility='default' filepath='include/linux/usb/tcpm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_snk_vdo' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='operating_snk_mw' type-id='f0981eeb' visibility='default' filepath='include/linux/usb/tcpm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type' type-id='0a19b04e' visibility='default' filepath='include/linux/usb/tcpm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data' type-id='89aae82e' visibility='default' filepath='include/linux/usb/tcpm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='default_role' type-id='ad61830a' visibility='default' filepath='include/linux/usb/tcpm.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='try_role_hw' type-id='b50a4934' visibility='default' filepath='include/linux/usb/tcpm.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='488'>
+          <var-decl name='self_powered' type-id='b50a4934' visibility='default' filepath='include/linux/usb/tcpm.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='alt_modes' type-id='064c3738' visibility='default' filepath='include/linux/usb/tcpm.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='typec_cc_status' filepath='include/linux/usb/tcpm.h' line='13' column='1' id='c2d135ef'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_CC_OPEN' value='0'/>
+        <enumerator name='TYPEC_CC_RA' value='1'/>
+        <enumerator name='TYPEC_CC_RD' value='2'/>
+        <enumerator name='TYPEC_CC_RP_DEF' value='3'/>
+        <enumerator name='TYPEC_CC_RP_1_5' value='4'/>
+        <enumerator name='TYPEC_CC_RP_3_0' value='5'/>
+      </enum-decl>
+      <enum-decl name='typec_cc_polarity' filepath='include/linux/usb/tcpm.h' line='22' column='1' id='551eebc9'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TYPEC_POLARITY_CC1' value='0'/>
+        <enumerator name='TYPEC_POLARITY_CC2' value='1'/>
+      </enum-decl>
+      <enum-decl name='tcpm_transmit_type' filepath='include/linux/usb/tcpm.h' line='38' column='1' id='c2132904'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCPC_TX_SOP' value='0'/>
+        <enumerator name='TCPC_TX_SOP_PRIME' value='1'/>
+        <enumerator name='TCPC_TX_SOP_PRIME_PRIME' value='2'/>
+        <enumerator name='TCPC_TX_SOP_DEBUG_PRIME' value='3'/>
+        <enumerator name='TCPC_TX_SOP_DEBUG_PRIME_PRIME' value='4'/>
+        <enumerator name='TCPC_TX_HARD_RESET' value='5'/>
+        <enumerator name='TCPC_TX_CABLE_RESET' value='6'/>
+        <enumerator name='TCPC_TX_BIST_MODE_2' value='7'/>
+      </enum-decl>
+      <class-decl name='pd_message' size-in-bits='240' is-struct='yes' visibility='default' filepath='include/linux/usb/pd.h' line='194' column='1' id='144ab5f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='23119536' visibility='default' filepath='include/linux/usb/pd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='' type-id='7ea82a00' visibility='default' filepath='include/linux/usb/pd.h' line='196' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='224' is-anonymous='yes' visibility='default' filepath='include/linux/usb/pd.h' line='196' column='1' id='7ea82a00'>
+        <data-member access='public'>
+          <var-decl name='payload' type-id='e369592a' visibility='default' filepath='include/linux/usb/pd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ext_msg' type-id='9d90420f' visibility='default' filepath='include/linux/usb/pd.h' line='198' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='pd_chunked_ext_message_data' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/usb/pd.h' line='183' column='1' id='9d90420f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='23119536' visibility='default' filepath='include/linux/usb/pd.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='50390288' visibility='default' filepath='include/linux/usb/pd.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pd_msg_request' filepath='drivers/usb/typec/tcpm/tcpm.c' line='153' column='1' id='1d843e9c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PD_MSG_NONE' value='0'/>
+        <enumerator name='PD_MSG_CTRL_REJECT' value='1'/>
+        <enumerator name='PD_MSG_CTRL_WAIT' value='2'/>
+        <enumerator name='PD_MSG_CTRL_NOT_SUPP' value='3'/>
+        <enumerator name='PD_MSG_DATA_SINK_CAP' value='4'/>
+        <enumerator name='PD_MSG_DATA_SOURCE_CAP' value='5'/>
+      </enum-decl>
+      <enum-decl name='tcpm_state' filepath='drivers/usb/typec/tcpm/tcpm.c' line='134' column='1' id='c698cee4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='INVALID_STATE' value='0'/>
+        <enumerator name='TOGGLING' value='1'/>
+        <enumerator name='SRC_UNATTACHED' value='2'/>
+        <enumerator name='SRC_ATTACH_WAIT' value='3'/>
+        <enumerator name='SRC_ATTACHED' value='4'/>
+        <enumerator name='SRC_STARTUP' value='5'/>
+        <enumerator name='SRC_SEND_CAPABILITIES' value='6'/>
+        <enumerator name='SRC_SEND_CAPABILITIES_TIMEOUT' value='7'/>
+        <enumerator name='SRC_NEGOTIATE_CAPABILITIES' value='8'/>
+        <enumerator name='SRC_TRANSITION_SUPPLY' value='9'/>
+        <enumerator name='SRC_READY' value='10'/>
+        <enumerator name='SRC_WAIT_NEW_CAPABILITIES' value='11'/>
+        <enumerator name='SNK_UNATTACHED' value='12'/>
+        <enumerator name='SNK_ATTACH_WAIT' value='13'/>
+        <enumerator name='SNK_DEBOUNCED' value='14'/>
+        <enumerator name='SNK_ATTACHED' value='15'/>
+        <enumerator name='SNK_STARTUP' value='16'/>
+        <enumerator name='SNK_DISCOVERY' value='17'/>
+        <enumerator name='SNK_DISCOVERY_DEBOUNCE' value='18'/>
+        <enumerator name='SNK_DISCOVERY_DEBOUNCE_DONE' value='19'/>
+        <enumerator name='SNK_WAIT_CAPABILITIES' value='20'/>
+        <enumerator name='SNK_NEGOTIATE_CAPABILITIES' value='21'/>
+        <enumerator name='SNK_NEGOTIATE_PPS_CAPABILITIES' value='22'/>
+        <enumerator name='SNK_TRANSITION_SINK' value='23'/>
+        <enumerator name='SNK_TRANSITION_SINK_VBUS' value='24'/>
+        <enumerator name='SNK_READY' value='25'/>
+        <enumerator name='ACC_UNATTACHED' value='26'/>
+        <enumerator name='DEBUG_ACC_ATTACHED' value='27'/>
+        <enumerator name='AUDIO_ACC_ATTACHED' value='28'/>
+        <enumerator name='AUDIO_ACC_DEBOUNCE' value='29'/>
+        <enumerator name='HARD_RESET_SEND' value='30'/>
+        <enumerator name='HARD_RESET_START' value='31'/>
+        <enumerator name='SRC_HARD_RESET_VBUS_OFF' value='32'/>
+        <enumerator name='SRC_HARD_RESET_VBUS_ON' value='33'/>
+        <enumerator name='SNK_HARD_RESET_SINK_OFF' value='34'/>
+        <enumerator name='SNK_HARD_RESET_WAIT_VBUS' value='35'/>
+        <enumerator name='SNK_HARD_RESET_SINK_ON' value='36'/>
+        <enumerator name='SOFT_RESET' value='37'/>
+        <enumerator name='SOFT_RESET_SEND' value='38'/>
+        <enumerator name='DR_SWAP_ACCEPT' value='39'/>
+        <enumerator name='DR_SWAP_SEND' value='40'/>
+        <enumerator name='DR_SWAP_SEND_TIMEOUT' value='41'/>
+        <enumerator name='DR_SWAP_CANCEL' value='42'/>
+        <enumerator name='DR_SWAP_CHANGE_DR' value='43'/>
+        <enumerator name='PR_SWAP_ACCEPT' value='44'/>
+        <enumerator name='PR_SWAP_SEND' value='45'/>
+        <enumerator name='PR_SWAP_SEND_TIMEOUT' value='46'/>
+        <enumerator name='PR_SWAP_CANCEL' value='47'/>
+        <enumerator name='PR_SWAP_START' value='48'/>
+        <enumerator name='PR_SWAP_SRC_SNK_TRANSITION_OFF' value='49'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SOURCE_OFF' value='50'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SOURCE_OFF_CC_DEBOUNCED' value='51'/>
+        <enumerator name='PR_SWAP_SRC_SNK_SINK_ON' value='52'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SINK_OFF' value='53'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SOURCE_ON' value='54'/>
+        <enumerator name='PR_SWAP_SNK_SRC_SOURCE_ON_VBUS_RAMPED_UP' value='55'/>
+        <enumerator name='VCONN_SWAP_ACCEPT' value='56'/>
+        <enumerator name='VCONN_SWAP_SEND' value='57'/>
+        <enumerator name='VCONN_SWAP_SEND_TIMEOUT' value='58'/>
+        <enumerator name='VCONN_SWAP_CANCEL' value='59'/>
+        <enumerator name='VCONN_SWAP_START' value='60'/>
+        <enumerator name='VCONN_SWAP_WAIT_FOR_VCONN' value='61'/>
+        <enumerator name='VCONN_SWAP_TURN_ON_VCONN' value='62'/>
+        <enumerator name='VCONN_SWAP_TURN_OFF_VCONN' value='63'/>
+        <enumerator name='SNK_TRY' value='64'/>
+        <enumerator name='SNK_TRY_WAIT' value='65'/>
+        <enumerator name='SNK_TRY_WAIT_DEBOUNCE' value='66'/>
+        <enumerator name='SNK_TRY_WAIT_DEBOUNCE_CHECK_VBUS' value='67'/>
+        <enumerator name='SRC_TRYWAIT' value='68'/>
+        <enumerator name='SRC_TRYWAIT_DEBOUNCE' value='69'/>
+        <enumerator name='SRC_TRYWAIT_UNATTACHED' value='70'/>
+        <enumerator name='SRC_TRY' value='71'/>
+        <enumerator name='SRC_TRY_WAIT' value='72'/>
+        <enumerator name='SRC_TRY_DEBOUNCE' value='73'/>
+        <enumerator name='SNK_TRYWAIT' value='74'/>
+        <enumerator name='SNK_TRYWAIT_DEBOUNCE' value='75'/>
+        <enumerator name='SNK_TRYWAIT_VBUS' value='76'/>
+        <enumerator name='BIST_RX' value='77'/>
+        <enumerator name='GET_STATUS_SEND' value='78'/>
+        <enumerator name='GET_STATUS_SEND_TIMEOUT' value='79'/>
+        <enumerator name='GET_PPS_STATUS_SEND' value='80'/>
+        <enumerator name='GET_PPS_STATUS_SEND_TIMEOUT' value='81'/>
+        <enumerator name='ERROR_RECOVERY' value='82'/>
+        <enumerator name='PORT_RESET' value='83'/>
+        <enumerator name='PORT_RESET_WAIT_OFF' value='84'/>
+      </enum-decl>
+      <enum-decl name='tcpm_transmit_status' filepath='include/linux/usb/tcpm.h' line='32' column='1' id='a2f9e316'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCPC_TX_SUCCESS' value='0'/>
+        <enumerator name='TCPC_TX_DISCARDED' value='1'/>
+        <enumerator name='TCPC_TX_FAILED' value='2'/>
+      </enum-decl>
+      <union-decl name='power_supply_propval' size-in-bits='64' visibility='default' filepath='include/linux/power_supply.h' line='215' column='1' id='08942f16'>
+        <data-member access='public'>
+          <var-decl name='intval' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='strval' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='217' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='power_supply' size-in-bits='10368' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='283' column='1' id='98749268'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc' type-id='cb9cd99f' visibility='default' filepath='include/linux/power_supply.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='supplied_to' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_supplicants' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='supplied_from' type-id='9b23c9ad' visibility='default' filepath='include/linux/power_supply.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_supplies' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/linux/power_supply.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/power_supply.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/power_supply.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='changed_work' type-id='ef9025d0' visibility='default' filepath='include/linux/power_supply.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='deferred_register_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/power_supply.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='changed_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/power_supply.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9440'>
+          <var-decl name='changed' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9448'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9456'>
+          <var-decl name='removing' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='use_cnt' type-id='49178f86' visibility='default' filepath='include/linux/power_supply.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='tzd' type-id='404b1300' visibility='default' filepath='include/linux/power_supply.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='tcd' type-id='2feec21f' visibility='default' filepath='include/linux/power_supply.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='charging_full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='charging_full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='charging_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='charging_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='full_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='full_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='online_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='online_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='charging_blink_full_solid_trig' type-id='db6d90a1' visibility='default' filepath='include/linux/power_supply.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='charging_blink_full_solid_trig_name' type-id='26a90f95' visibility='default' filepath='include/linux/power_supply.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='323' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='power_supply_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/power_supply.h' line='241' column='1' id='6d39b2d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/power_supply.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='c61c3172' visibility='default' filepath='include/linux/power_supply.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usb_types' type-id='f26ad218' visibility='default' filepath='include/linux/power_supply.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_usb_types' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='properties' type-id='c0d0f1ae' visibility='default' filepath='include/linux/power_supply.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_properties' type-id='b59d7dce' visibility='default' filepath='include/linux/power_supply.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_property' type-id='c793cb80' visibility='default' filepath='include/linux/power_supply.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_property' type-id='7c0fed0f' visibility='default' filepath='include/linux/power_supply.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='property_is_writeable' type-id='4079d8fe' visibility='default' filepath='include/linux/power_supply.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='external_power_changed' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_charged' type-id='a89a6c47' visibility='default' filepath='include/linux/power_supply.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='no_thermal' type-id='b50a4934' visibility='default' filepath='include/linux/power_supply.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='use_for_apm' type-id='95e97e5e' visibility='default' filepath='include/linux/power_supply.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/power_supply.h' line='280' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='power_supply_type' filepath='include/linux/power_supply.h' line='182' column='1' id='c61c3172'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_TYPE_BATTERY' value='1'/>
+        <enumerator name='POWER_SUPPLY_TYPE_UPS' value='2'/>
+        <enumerator name='POWER_SUPPLY_TYPE_MAINS' value='3'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB' value='4'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_DCP' value='5'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_CDP' value='6'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_ACA' value='7'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_TYPE_C' value='8'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD' value='9'/>
+        <enumerator name='POWER_SUPPLY_TYPE_USB_PD_DRP' value='10'/>
+        <enumerator name='POWER_SUPPLY_TYPE_APPLE_BRICK_ID' value='11'/>
+        <enumerator name='POWER_SUPPLY_TYPE_WIRELESS' value='12'/>
+      </enum-decl>
+      <enum-decl name='power_supply_usb_type' filepath='include/linux/power_supply.h' line='198' column='1' id='1f7f0095'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_UNKNOWN' value='0'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_SDP' value='1'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_DCP' value='2'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_CDP' value='3'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_ACA' value='4'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_C' value='5'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD' value='6'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_DRP' value='7'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_PD_PPS' value='8'/>
+        <enumerator name='POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID' value='9'/>
+      </enum-decl>
+      <enum-decl name='power_supply_property' filepath='include/linux/power_supply.h' line='102' column='1' id='5f78aa17'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='POWER_SUPPLY_PROP_STATUS' value='0'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TYPE' value='1'/>
+        <enumerator name='POWER_SUPPLY_PROP_HEALTH' value='2'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRESENT' value='3'/>
+        <enumerator name='POWER_SUPPLY_PROP_ONLINE' value='4'/>
+        <enumerator name='POWER_SUPPLY_PROP_AUTHENTIC' value='5'/>
+        <enumerator name='POWER_SUPPLY_PROP_TECHNOLOGY' value='6'/>
+        <enumerator name='POWER_SUPPLY_PROP_CYCLE_COUNT' value='7'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX' value='8'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN' value='9'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN' value='10'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN' value='11'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_NOW' value='12'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_AVG' value='13'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_OCV' value='14'/>
+        <enumerator name='POWER_SUPPLY_PROP_VOLTAGE_BOOT' value='15'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_MAX' value='16'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_NOW' value='17'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_AVG' value='18'/>
+        <enumerator name='POWER_SUPPLY_PROP_CURRENT_BOOT' value='19'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_NOW' value='20'/>
+        <enumerator name='POWER_SUPPLY_PROP_POWER_AVG' value='21'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN' value='22'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY_DESIGN' value='23'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_FULL' value='24'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_EMPTY' value='25'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_NOW' value='26'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_AVG' value='27'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_COUNTER' value='28'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT' value='29'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX' value='30'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE' value='31'/>
+        <enumerator name='POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE_MAX' value='32'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT' value='33'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_LIMIT_MAX' value='34'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_START_THRESHOLD' value='35'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_CONTROL_END_THRESHOLD' value='36'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT' value='37'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_VOLTAGE_LIMIT' value='38'/>
+        <enumerator name='POWER_SUPPLY_PROP_INPUT_POWER_LIMIT' value='39'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN' value='40'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY_DESIGN' value='41'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_FULL' value='42'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_EMPTY' value='43'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_NOW' value='44'/>
+        <enumerator name='POWER_SUPPLY_PROP_ENERGY_AVG' value='45'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY' value='46'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN' value='47'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX' value='48'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN' value='49'/>
+        <enumerator name='POWER_SUPPLY_PROP_CAPACITY_LEVEL' value='50'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP' value='51'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MAX' value='52'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_MIN' value='53'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MIN' value='54'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_ALERT_MAX' value='55'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT' value='56'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MIN' value='57'/>
+        <enumerator name='POWER_SUPPLY_PROP_TEMP_AMBIENT_ALERT_MAX' value='58'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW' value='59'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG' value='60'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_NOW' value='61'/>
+        <enumerator name='POWER_SUPPLY_PROP_TIME_TO_FULL_AVG' value='62'/>
+        <enumerator name='POWER_SUPPLY_PROP_TYPE' value='63'/>
+        <enumerator name='POWER_SUPPLY_PROP_USB_TYPE' value='64'/>
+        <enumerator name='POWER_SUPPLY_PROP_SCOPE' value='65'/>
+        <enumerator name='POWER_SUPPLY_PROP_PRECHARGE_CURRENT' value='66'/>
+        <enumerator name='POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT' value='67'/>
+        <enumerator name='POWER_SUPPLY_PROP_CALIBRATE' value='68'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_YEAR' value='69'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_MONTH' value='70'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURE_DAY' value='71'/>
+        <enumerator name='POWER_SUPPLY_PROP_MODEL_NAME' value='72'/>
+        <enumerator name='POWER_SUPPLY_PROP_MANUFACTURER' value='73'/>
+        <enumerator name='POWER_SUPPLY_PROP_SERIAL_NUMBER' value='74'/>
+      </enum-decl>
+      <class-decl name='led_trigger' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='338' column='1' id='7bcbad99'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='activate' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deactivate' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leddev_list_lock' type-id='ac16795b' visibility='default' filepath='include/linux/leds.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='led_cdevs' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='next_trig' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='led_classdev' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='58' column='1' id='6e0e17b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_brightness' type-id='fa598f35' visibility='default' filepath='include/linux/leds.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='work_flags' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='brightness_set' type-id='971a91c1' visibility='default' filepath='include/linux/leds.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='brightness_set_blocking' type-id='07e65680' visibility='default' filepath='include/linux/leds.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='brightness_get' type-id='a91f7d05' visibility='default' filepath='include/linux/leds.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='blink_set' type-id='adaf1c08' visibility='default' filepath='include/linux/leds.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pattern_set' type-id='e9f2f0c0' visibility='default' filepath='include/linux/leds.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pattern_clear' type-id='0904d108' visibility='default' filepath='include/linux/leds.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/leds.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/leds.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='default_trigger' type-id='80f4b756' visibility='default' filepath='include/linux/leds.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='blink_delay_on' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blink_delay_off' type-id='7359adad' visibility='default' filepath='include/linux/leds.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='blink_timer' type-id='abe41e67' visibility='default' filepath='include/linux/leds.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='new_blink_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='flash_resume' type-id='749654e7' visibility='default' filepath='include/linux/leds.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='set_brightness_work' type-id='ef9025d0' visibility='default' filepath='include/linux/leds.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='delayed_set_value' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='trigger_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/leds.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='trigger' type-id='db6d90a1' visibility='default' filepath='include/linux/leds.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='trig_list' type-id='72f469ec' visibility='default' filepath='include/linux/leds.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='trigger_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/leds.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='activated' type-id='b50a4934' visibility='default' filepath='include/linux/leds.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='led_access' type-id='925167dc' visibility='default' filepath='include/linux/leds.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='led_brightness' filepath='include/linux/leds.h' line='27' column='1' id='fa598f35'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_pattern' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/leds.h' line='574' column='1' id='de7f2597'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delta_t' type-id='19c2251e' visibility='default' filepath='include/linux/leds.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/leds.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vdm_states' filepath='drivers/usb/typec/tcpm/tcpm.c' line='142' column='1' id='da4a4188'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDM_STATE_ERR_BUSY' value='-3'/>
+        <enumerator name='VDM_STATE_ERR_SEND' value='-2'/>
+        <enumerator name='VDM_STATE_ERR_TMOUT' value='-1'/>
+        <enumerator name='VDM_STATE_DONE' value='0'/>
+        <enumerator name='VDM_STATE_READY' value='1'/>
+        <enumerator name='VDM_STATE_BUSY' value='2'/>
+        <enumerator name='VDM_STATE_WAIT_RSP_BUSY' value='3'/>
+      </enum-decl>
+      <class-decl name='pd_pps_data' size-in-bits='288' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='196' column='1' id='4ff0f7bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='req_min_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='req_max_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_curr' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='req_max_curr' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_out_volt' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='req_op_curr' type-id='19c2251e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='supported' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='active' type-id='b50a4934' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='206' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pd_mode_data' size-in-bits='9568' is-struct='yes' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='176' column='1' id='1d816e22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svid_index' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nsvids' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='svids' type-id='42c6815a' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='altmodes' type-id='95e97e5e' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='altmode_desc' type-id='589abf66' visibility='default' filepath='drivers/usb/typec/tcpm/tcpm.c' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='144ab5f9' const='yes' id='d9c5862c'/>
+      <pointer-type-def type-id='d9c5862c' size-in-bits='64' id='d7f1fb72'/>
+      <qualified-type-def type-id='6d39b2d0' const='yes' id='79a9ff6f'/>
+      <pointer-type-def type-id='79a9ff6f' size-in-bits='64' id='cb9cd99f'/>
+      <qualified-type-def type-id='08942f16' const='yes' id='2cd7c576'/>
+      <pointer-type-def type-id='2cd7c576' size-in-bits='64' id='f3abafd4'/>
+      <qualified-type-def type-id='a63ee284' const='yes' id='1843063f'/>
+      <pointer-type-def type-id='1843063f' size-in-bits='64' id='4682930f'/>
+      <pointer-type-def type-id='f7c7c7f9' size-in-bits='64' id='a91f7d05'/>
+      <pointer-type-def type-id='821e33ee' size-in-bits='64' id='0904d108'/>
+      <pointer-type-def type-id='6a0fd5a6' size-in-bits='64' id='07e65680'/>
+      <pointer-type-def type-id='fcd4ba8e' size-in-bits='64' id='e9f2f0c0'/>
+      <pointer-type-def type-id='4b04075e' size-in-bits='64' id='adaf1c08'/>
+      <pointer-type-def type-id='50e956a4' size-in-bits='64' id='4079d8fe'/>
+      <pointer-type-def type-id='6daa74bb' size-in-bits='64' id='7c0fed0f'/>
+      <pointer-type-def type-id='40d98f1e' size-in-bits='64' id='c793cb80'/>
+      <pointer-type-def type-id='cb593833' size-in-bits='64' id='f581f1cf'/>
+      <pointer-type-def type-id='e1106ed7' size-in-bits='64' id='cc0a6f53'/>
+      <pointer-type-def type-id='e1d380a7' size-in-bits='64' id='0123907b'/>
+      <pointer-type-def type-id='198938b5' size-in-bits='64' id='8a62cb71'/>
+      <pointer-type-def type-id='aeac61b0' size-in-bits='64' id='926bf87a'/>
+      <pointer-type-def type-id='e073b6fc' size-in-bits='64' id='e5015ca6'/>
+      <pointer-type-def type-id='1fbc513b' size-in-bits='64' id='fac661b7'/>
+      <pointer-type-def type-id='daf63770' size-in-bits='64' id='7f6ac72a'/>
+      <pointer-type-def type-id='a08a663b' size-in-bits='64' id='8ca76d9f'/>
+      <pointer-type-def type-id='7adec5ff' size-in-bits='64' id='7a202df3'/>
+      <pointer-type-def type-id='e6814f11' size-in-bits='64' id='f24f1c45'/>
+      <pointer-type-def type-id='6e0e17b0' size-in-bits='64' id='bd1c8eb6'/>
+      <pointer-type-def type-id='de7f2597' size-in-bits='64' id='e98ceb7f'/>
+      <pointer-type-def type-id='7bcbad99' size-in-bits='64' id='db6d90a1'/>
+      <pointer-type-def type-id='98749268' size-in-bits='64' id='c0c93c9e'/>
+      <pointer-type-def type-id='5f78aa17' size-in-bits='64' id='c0d0f1ae'/>
+      <pointer-type-def type-id='08942f16' size-in-bits='64' id='2e53d20f'/>
+      <pointer-type-def type-id='1f7f0095' size-in-bits='64' id='f26ad218'/>
+      <pointer-type-def type-id='3a8363f1' size-in-bits='64' id='15b1f129'/>
+      <pointer-type-def type-id='902061bb' size-in-bits='64' id='426e425b'/>
+      <pointer-type-def type-id='3ae87f87' size-in-bits='64' id='2feec21f'/>
+      <pointer-type-def type-id='82084f52' size-in-bits='64' id='404b1300'/>
+      <pointer-type-def type-id='c2d135ef' size-in-bits='64' id='741cc96e'/>
+      <pointer-type-def type-id='3b2a0df7' size-in-bits='64' id='3e3cd44f'/>
+      <pointer-type-def type-id='6dea5f13' size-in-bits='64' id='749654e7'/>
+      <pointer-type-def type-id='a373c61d' size-in-bits='64' id='971a91c1'/>
+      <pointer-type-def type-id='ffbf2003' size-in-bits='64' id='a89a6c47'/>
+      <function-decl name='tcpm_register_port' mangled-name='tcpm_register_port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_register_port'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4771' column='1'/>
+        <parameter type-id='15b1f129' name='tcpc' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4771' column='1'/>
+        <return type-id='426e425b'/>
+      </function-decl>
+      <function-decl name='tcpm_vbus_change' mangled-name='tcpm_vbus_change' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3996' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_vbus_change'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3996' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_unregister_port' mangled-name='tcpm_unregister_port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4882' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_unregister_port'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4882' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_tcpc_reset' mangled-name='tcpm_tcpc_reset' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4407' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_tcpc_reset'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4407' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_transmit_complete' mangled-name='tcpm_pd_transmit_complete' filepath='drivers/usb/typec/tcpm/tcpm.c' line='659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_transmit_complete'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='659' column='1'/>
+        <parameter type-id='a2f9e316' name='status' filepath='drivers/usb/typec/tcpm/tcpm.c' line='660' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_receive' mangled-name='tcpm_pd_receive' filepath='drivers/usb/typec/tcpm/tcpm.c' line='2014' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_receive'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='2014' column='1'/>
+        <parameter type-id='d7f1fb72' name='msg' filepath='drivers/usb/typec/tcpm/tcpm.c' line='2014' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_pd_hard_reset' mangled-name='tcpm_pd_hard_reset' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4005' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_pd_hard_reset'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='4005' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tcpm_cc_change' mangled-name='tcpm_cc_change' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3987' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcpm_cc_change'>
+        <parameter type-id='426e425b' name='port' filepath='drivers/usb/typec/tcpm/tcpm.c' line='3987' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f7c7c7f9'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='fa598f35'/>
+      </function-type>
+      <function-type size-in-bits='64' id='821e33ee'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6a0fd5a6'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fcd4ba8e'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='e98ceb7f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b04075e'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50e956a4'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6daa74bb'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <parameter type-id='f3abafd4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40d98f1e'>
+        <parameter type-id='c0c93c9e'/>
+        <parameter type-id='5f78aa17'/>
+        <parameter type-id='2e53d20f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb593833'>
+        <parameter type-id='15b1f129'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1106ed7'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='c2132904'/>
+        <parameter type-id='d7f1fb72'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1d380a7'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='551eebc9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='198938b5'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='c2d135ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aeac61b0'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='0a19b04e'/>
+        <parameter type-id='c2d135ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e073b6fc'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1fbc513b'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='741cc96e'/>
+        <parameter type-id='741cc96e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='daf63770'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a08a663b'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='ad61830a'/>
+        <parameter type-id='e453a0cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7adec5ff'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6814f11'>
+        <parameter type-id='15b1f129'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dea5f13'>
+        <parameter type-id='bd1c8eb6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a373c61d'>
+        <parameter type-id='bd1c8eb6'/>
+        <parameter type-id='fa598f35'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffbf2003'>
+        <parameter type-id='c0c93c9e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/video/backlight/backlight.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='112' id='579c7c75'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='87647851' size-in-bits='infinite' id='f13afa51'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='256' id='6e32320a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='backlight_device' size-in-bits='8960' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='97' column='1' id='a858ced9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='props' type-id='8802968a' visibility='default' filepath='include/linux/backlight.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='update_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/backlight.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ops' type-id='a3d6b1c0' visibility='default' filepath='include/linux/backlight.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_notif' type-id='9b08f7cd' visibility='default' filepath='include/linux/backlight.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/backlight.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/backlight.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='fb_bl_on' type-id='6e32320a' visibility='default' filepath='include/linux/backlight.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='backlight_properties' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='74' column='1' id='8802968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_brightness' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='power' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fb_blank' type-id='95e97e5e' visibility='default' filepath='include/linux/backlight.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='e7dc2d8e' visibility='default' filepath='include/linux/backlight.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='state' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scale' type-id='15b3610c' visibility='default' filepath='include/linux/backlight.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='backlight_type' filepath='include/linux/backlight.h' line='37' column='1' id='e7dc2d8e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_RAW' value='1'/>
+        <enumerator name='BACKLIGHT_PLATFORM' value='2'/>
+        <enumerator name='BACKLIGHT_FIRMWARE' value='3'/>
+        <enumerator name='BACKLIGHT_TYPE_MAX' value='4'/>
+      </enum-decl>
+      <enum-decl name='backlight_scale' filepath='include/linux/backlight.h' line='49' column='1' id='15b3610c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BACKLIGHT_SCALE_UNKNOWN' value='0'/>
+        <enumerator name='BACKLIGHT_SCALE_LINEAR' value='1'/>
+        <enumerator name='BACKLIGHT_SCALE_NON_LINEAR' value='2'/>
+      </enum-decl>
+      <class-decl name='backlight_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/backlight.h' line='58' column='1' id='69a7508d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='options' type-id='f0981eeb' visibility='default' filepath='include/linux/backlight.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='update_status' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_brightness' type-id='53f7c7e3' visibility='default' filepath='include/linux/backlight.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='check_fb' type-id='317f203e' visibility='default' filepath='include/linux/backlight.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fb_info' size-in-bits='6272' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='437' column='1' id='f546887a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fb.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fbcon_rotate_hint' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mm_lock' type-id='925167dc' visibility='default' filepath='include/linux/fb.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='var' type-id='87e42d48' visibility='default' filepath='include/linux/fb.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fix' type-id='1cead55a' visibility='default' filepath='include/linux/fb.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='monspecs' type-id='ee529a90' visibility='default' filepath='include/linux/fb.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='queue' type-id='ef9025d0' visibility='default' filepath='include/linux/fb.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='pixmap' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sprite' type-id='0a45c8ef' visibility='default' filepath='include/linux/fb.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='cmap' type-id='be9adbe3' visibility='default' filepath='include/linux/fb.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='modelist' type-id='72f469ec' visibility='default' filepath='include/linux/fb.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='mode' type-id='c03076ec' visibility='default' filepath='include/linux/fb.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fbops' type-id='33dff390' visibility='default' filepath='include/linux/fb.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='device' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/fb.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='class_flag' type-id='95e97e5e' visibility='default' filepath='include/linux/fb.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='' type-id='145b6d9f' visibility='default' filepath='include/linux/fb.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='screen_size' type-id='7359adad' visibility='default' filepath='include/linux/fb.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='pseudo_palette' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='state' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='fbcon_par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='par' type-id='eaa32e2f' visibility='default' filepath='include/linux/fb.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='apertures' type-id='3dc7db80' visibility='default' filepath='include/linux/fb.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='skip_vt_switch' type-id='b50a4934' visibility='default' filepath='include/linux/fb.h' line='503' 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='87e42d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xres' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='2d123a1f' 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='2d123a1f' 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='2d123a1f' 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='2d123a1f' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3fa29bab' 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='2d123a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='1cead55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='ac1fa8c0' 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='7359adad' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='d315442e' 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='d315442e' 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='3f1a6b60' 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='7359adad' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='810b4a17' 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='ee529a90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chroma' type-id='1c76a224' 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='c03076ec' 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='c213d3d4' 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='579c7c75' 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='579c7c75' 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='579c7c75' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' 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='d315442e' visibility='default' filepath='include/linux/fb.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gtf' type-id='d315442e' 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='d315442e' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='1c76a224'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='redx' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='765' column='1' id='e3dece26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fb.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refresh' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='xres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='yres' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pixclock' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='left_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='right_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='upper_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lower_margin' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='vsync_len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vmode' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flag' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='779' 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='185' column='1' id='0a45c8ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='8bff8096' visibility='default' filepath='include/linux/fb.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='offset' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='scan_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='access_align' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='blit_x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='blit_y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='writeio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='readio' type-id='888567bf' visibility='default' filepath='include/linux/fb.h' line='199' 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='be9adbe3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' 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='3f1a6b60' 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='2e5e3725' 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='2e5e3725' 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='2e5e3725' 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='2e5e3725' visibility='default' filepath='include/uapi/linux/fb.h' line='287' 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='228' column='1' id='88ac6962'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fb.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fb_open' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fb_release' type-id='5173cfa7' visibility='default' filepath='include/linux/fb.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fb_read' type-id='c523819e' visibility='default' filepath='include/linux/fb.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fb_write' type-id='b90c8c47' visibility='default' filepath='include/linux/fb.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fb_check_var' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fb_set_par' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fb_setcolreg' type-id='47150d4e' visibility='default' filepath='include/linux/fb.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fb_setcmap' type-id='6cae92ea' visibility='default' filepath='include/linux/fb.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fb_blank' type-id='264d5ec9' visibility='default' filepath='include/linux/fb.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fb_pan_display' type-id='325e877b' visibility='default' filepath='include/linux/fb.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fb_fillrect' type-id='e6c64d04' visibility='default' filepath='include/linux/fb.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fb_copyarea' type-id='2fff15e1' visibility='default' filepath='include/linux/fb.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fb_imageblit' type-id='c72645fa' visibility='default' filepath='include/linux/fb.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fb_cursor' type-id='f03e9a5b' visibility='default' filepath='include/linux/fb.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fb_sync' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fb_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fb_compat_ioctl' type-id='20b881b6' visibility='default' filepath='include/linux/fb.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fb_mmap' type-id='17d72e03' visibility='default' filepath='include/linux/fb.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fb_get_caps' type-id='3e6ac796' visibility='default' filepath='include/linux/fb.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fb_destroy' type-id='37191bbd' visibility='default' filepath='include/linux/fb.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fb_debug_enter' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fb_debug_leave' type-id='de0565b8' visibility='default' filepath='include/linux/fb.h' line='295' 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='76f58541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3345b082'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='c4601f87'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dx' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='8f048e17' 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='80f4b756' 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='be9adbe3' 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='cc3fe760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set' type-id='d315442e' 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='d315442e' 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='d315442e' 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='80f4b756' 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='fc4b98cd' 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='c4601f87' 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='fc4b98cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='d315442e' 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='d315442e' 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='144' column='1' id='cc1cf303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='y' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/fb.h' line='148' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fb.h' line='480' column='1' id='145b6d9f'>
+        <data-member access='public'>
+          <var-decl name='screen_base' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='screen_buffer' type-id='26a90f95' visibility='default' filepath='include/linux/fb.h' line='482' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='apertures_struct' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/fb.h' line='495' column='1' id='d3638b22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/fb.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ranges' type-id='f13afa51' visibility='default' filepath='include/linux/fb.h' line='500' 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='497' column='1' id='87647851'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='acc63fdf' visibility='default' filepath='include/linux/fb.h' line='499' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d315442e' size-in-bits='64' id='2e5e3725'/>
+      <pointer-type-def type-id='d3638b22' size-in-bits='64' id='3dc7db80'/>
+      <pointer-type-def type-id='a858ced9' size-in-bits='64' id='7a76d041'/>
+      <qualified-type-def type-id='69a7508d' const='yes' id='4b349f6a'/>
+      <pointer-type-def type-id='4b349f6a' size-in-bits='64' id='a3d6b1c0'/>
+      <qualified-type-def type-id='8802968a' const='yes' id='28b68df7'/>
+      <pointer-type-def type-id='28b68df7' size-in-bits='64' id='f46152e7'/>
+      <qualified-type-def type-id='3345b082' const='yes' id='9c20d241'/>
+      <pointer-type-def type-id='9c20d241' size-in-bits='64' id='32ab3e71'/>
+      <qualified-type-def type-id='76f58541' const='yes' id='7bfbb42a'/>
+      <pointer-type-def type-id='7bfbb42a' size-in-bits='64' id='2d3c5c00'/>
+      <qualified-type-def type-id='c4601f87' const='yes' id='7bacac96'/>
+      <pointer-type-def type-id='7bacac96' size-in-bits='64' id='6cd3ebf4'/>
+      <pointer-type-def type-id='cc1cf303' size-in-bits='64' id='85e33ca3'/>
+      <pointer-type-def type-id='be9adbe3' size-in-bits='64' id='2080bed3'/>
+      <pointer-type-def type-id='cc3fe760' size-in-bits='64' id='670156c6'/>
+      <pointer-type-def type-id='f546887a' size-in-bits='64' id='9f763fd8'/>
+      <pointer-type-def type-id='88ac6962' size-in-bits='64' id='33dff390'/>
+      <pointer-type-def type-id='87e42d48' size-in-bits='64' id='dd75e72e'/>
+      <pointer-type-def type-id='e3dece26' size-in-bits='64' id='c03076ec'/>
+      <pointer-type-def type-id='fb246cd7' size-in-bits='64' id='53f7c7e3'/>
+      <pointer-type-def type-id='47a16dfc' size-in-bits='64' id='317f203e'/>
+      <pointer-type-def type-id='32037540' size-in-bits='64' id='6cae92ea'/>
+      <pointer-type-def type-id='32ea5aae' size-in-bits='64' id='de0565b8'/>
+      <pointer-type-def type-id='20919507' size-in-bits='64' id='f03e9a5b'/>
+      <pointer-type-def type-id='b0471e43' size-in-bits='64' id='5173cfa7'/>
+      <pointer-type-def type-id='f65c27ec' size-in-bits='64' id='20b881b6'/>
+      <pointer-type-def type-id='29599587' size-in-bits='64' id='17d72e03'/>
+      <pointer-type-def type-id='24762397' size-in-bits='64' id='325e877b'/>
+      <pointer-type-def type-id='29c8c1c5' size-in-bits='64' id='264d5ec9'/>
+      <pointer-type-def type-id='c89dc0a4' size-in-bits='64' id='47150d4e'/>
+      <pointer-type-def type-id='de345e44' size-in-bits='64' id='c523819e'/>
+      <pointer-type-def type-id='6c6bf843' size-in-bits='64' id='b90c8c47'/>
+      <pointer-type-def type-id='cfe09901' size-in-bits='64' id='37191bbd'/>
+      <pointer-type-def type-id='ef65541d' size-in-bits='64' id='2fff15e1'/>
+      <pointer-type-def type-id='f036a6aa' size-in-bits='64' id='e6c64d04'/>
+      <pointer-type-def type-id='78de7510' size-in-bits='64' id='c72645fa'/>
+      <pointer-type-def type-id='200520c4' size-in-bits='64' id='3e6ac796'/>
+      <pointer-type-def type-id='e2245803' size-in-bits='64' id='888567bf'/>
+      <function-decl name='backlight_device_register' mangled-name='backlight_device_register' filepath='drivers/video/backlight/backlight.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_register'>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/video/backlight/backlight.c' line='351' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='a3d6b1c0' name='ops' filepath='drivers/video/backlight/backlight.c' line='352' column='1'/>
+        <parameter type-id='f46152e7' name='props' filepath='drivers/video/backlight/backlight.c' line='353' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-decl name='of_find_backlight_by_node' mangled-name='of_find_backlight_by_node' filepath='drivers/video/backlight/backlight.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='of_find_backlight_by_node'>
+        <parameter type-id='9a537bbe' name='node' filepath='drivers/video/backlight/backlight.c' line='592' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-decl name='devm_backlight_device_register' mangled-name='devm_backlight_device_register' filepath='drivers/video/backlight/backlight.c' line='529' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_backlight_device_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/video/backlight/backlight.c' line='529' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/video/backlight/backlight.c' line='530' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='drivers/video/backlight/backlight.c' line='530' column='1'/>
+        <parameter type-id='eaa32e2f' name='devdata' filepath='drivers/video/backlight/backlight.c' line='530' column='1'/>
+        <parameter type-id='a3d6b1c0' name='ops' filepath='drivers/video/backlight/backlight.c' line='531' column='1'/>
+        <parameter type-id='f46152e7' name='props' filepath='drivers/video/backlight/backlight.c' line='532' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-decl name='backlight_device_unregister' mangled-name='backlight_device_unregister' filepath='drivers/video/backlight/backlight.c' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_unregister'>
+        <parameter type-id='7a76d041' name='bd' filepath='drivers/video/backlight/backlight.c' line='441' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='backlight_device_set_brightness' mangled-name='backlight_device_set_brightness' filepath='drivers/video/backlight/backlight.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_set_brightness'>
+        <parameter type-id='7a76d041' name='bd' filepath='drivers/video/backlight/backlight.c' line='180' column='1'/>
+        <parameter type-id='7359adad' name='brightness' filepath='drivers/video/backlight/backlight.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='backlight_device_get_by_type' mangled-name='backlight_device_get_by_type' filepath='drivers/video/backlight/backlight.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='backlight_device_get_by_type'>
+        <parameter type-id='e7dc2d8e' name='type' filepath='drivers/video/backlight/backlight.c' line='417' column='1'/>
+        <return type-id='7a76d041'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fb246cd7'>
+        <parameter type-id='7a76d041'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47a16dfc'>
+        <parameter type-id='7a76d041'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32037540'>
+        <parameter type-id='2080bed3'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ea5aae'>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20919507'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='670156c6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0471e43'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f65c27ec'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29599587'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24762397'>
+        <parameter type-id='dd75e72e'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29c8c1c5'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c89dc0a4'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de345e44'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c6bf843'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfe09901'>
+        <parameter type-id='9f763fd8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ef65541d'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='32ab3e71'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f036a6aa'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='2d3c5c00'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78de7510'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='6cd3ebf4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='200520c4'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='85e33ca3'/>
+        <parameter type-id='dd75e72e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2245803'>
+        <parameter type-id='9f763fd8'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/video/fbdev/core/fb_cmdline.c' language='LANG_C89'>
+      <var-decl name='fb_mode_option' type-id='80f4b756' mangled-name='fb_mode_option' visibility='default' filepath='drivers/video/fbdev/core/fb_cmdline.c' line='23' column='1' elf-symbol-id='fb_mode_option'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/video/hdmi.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7567d0f8' size-in-bits='96' id='b7bcaa67'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <union-decl name='hdmi_infoframe' size-in-bits='544' visibility='default' filepath='include/linux/hdmi.h' line='418' column='1' id='da92e008'>
+        <data-member access='public'>
+          <var-decl name='any' type-id='13c06ba8' visibility='default' filepath='include/linux/hdmi.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='avi' type-id='4536ce10' visibility='default' filepath='include/linux/hdmi.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='spd' type-id='9729258f' visibility='default' filepath='include/linux/hdmi.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vendor' type-id='12153196' visibility='default' filepath='include/linux/hdmi.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='audio' type-id='b4a1ba48' visibility='default' filepath='include/linux/hdmi.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='drm' type-id='9ebab137' visibility='default' filepath='include/linux/hdmi.h' line='424' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='hdmi_any_infoframe' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='64' column='1' id='13c06ba8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_infoframe_type' filepath='include/linux/hdmi.h' line='45' column='1' id='c573b339'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_VENDOR' value='129'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AVI' value='130'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_SPD' value='131'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_AUDIO' value='132'/>
+        <enumerator name='HDMI_INFOFRAME_TYPE_DRM' value='135'/>
+      </enum-decl>
+      <class-decl name='hdmi_avi_infoframe' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='168' column='1' id='4536ce10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='colorspace' type-id='c86f38e4' visibility='default' filepath='include/linux/hdmi.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='scan_mode' type-id='aaafc218' visibility='default' filepath='include/linux/hdmi.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='colorimetry' type-id='8df1782c' visibility='default' filepath='include/linux/hdmi.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='picture_aspect' type-id='a30ccd44' visibility='default' filepath='include/linux/hdmi.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='active_aspect' type-id='90bbc2e6' visibility='default' filepath='include/linux/hdmi.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='itc' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='extended_colorimetry' type-id='b8a53560' visibility='default' filepath='include/linux/hdmi.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='quantization_range' type-id='5c444b2c' visibility='default' filepath='include/linux/hdmi.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nups' type-id='a84bbd3b' visibility='default' filepath='include/linux/hdmi.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='video_code' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ycc_quantization_range' type-id='569eefca' visibility='default' filepath='include/linux/hdmi.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='content_type' type-id='6cedbf81' visibility='default' filepath='include/linux/hdmi.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pixel_repeat' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='top_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='bottom_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='left_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='right_bar' type-id='8efea9e5' visibility='default' filepath='include/linux/hdmi.h' line='188' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_colorspace' filepath='include/linux/hdmi.h' line='70' column='1' id='c86f38e4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORSPACE_RGB' value='0'/>
+        <enumerator name='HDMI_COLORSPACE_YUV422' value='1'/>
+        <enumerator name='HDMI_COLORSPACE_YUV444' value='2'/>
+        <enumerator name='HDMI_COLORSPACE_YUV420' value='3'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED4' value='4'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED5' value='5'/>
+        <enumerator name='HDMI_COLORSPACE_RESERVED6' value='6'/>
+        <enumerator name='HDMI_COLORSPACE_IDO_DEFINED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_scan_mode' filepath='include/linux/hdmi.h' line='81' column='1' id='aaafc218'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SCAN_MODE_NONE' value='0'/>
+        <enumerator name='HDMI_SCAN_MODE_OVERSCAN' value='1'/>
+        <enumerator name='HDMI_SCAN_MODE_UNDERSCAN' value='2'/>
+        <enumerator name='HDMI_SCAN_MODE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_colorimetry' filepath='include/linux/hdmi.h' line='88' column='1' id='8df1782c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_COLORIMETRY_NONE' value='0'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_601' value='1'/>
+        <enumerator name='HDMI_COLORIMETRY_ITU_709' value='2'/>
+        <enumerator name='HDMI_COLORIMETRY_EXTENDED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_picture_aspect' filepath='include/linux/hdmi.h' line='95' column='1' id='a30ccd44'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='hdmi_active_aspect' filepath='include/linux/hdmi.h' line='104' column='1' id='90bbc2e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_TOP' value='2'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9_TOP' value='3'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_CENTER' value='4'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_PICTURE' value='8'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3' value='9'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9' value='10'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_14_9' value='11'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_4_3_SP_14_9' value='13'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_14_9' value='14'/>
+        <enumerator name='HDMI_ACTIVE_ASPECT_16_9_SP_4_3' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_extended_colorimetry' filepath='include/linux/hdmi.h' line='117' column='1' id='b8a53560'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_601' value='0'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_XV_YCC_709' value='1'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_S_YCC_601' value='2'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPYCC_601' value='3'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_OPRGB' value='4'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020_CONST_LUM' value='5'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_BT2020' value='6'/>
+        <enumerator name='HDMI_EXTENDED_COLORIMETRY_RESERVED' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_quantization_range' filepath='include/linux/hdmi.h' line='130' column='1' id='5c444b2c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_DEFAULT' value='0'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_LIMITED' value='1'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_FULL' value='2'/>
+        <enumerator name='HDMI_QUANTIZATION_RANGE_RESERVED' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_nups' filepath='include/linux/hdmi.h' line='138' column='1' id='a84bbd3b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_NUPS_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_NUPS_HORIZONTAL' value='1'/>
+        <enumerator name='HDMI_NUPS_VERTICAL' value='2'/>
+        <enumerator name='HDMI_NUPS_BOTH' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_ycc_quantization_range' filepath='include/linux/hdmi.h' line='145' column='1' id='569eefca'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_LIMITED' value='0'/>
+        <enumerator name='HDMI_YCC_QUANTIZATION_RANGE_FULL' value='1'/>
+      </enum-decl>
+      <enum-decl name='hdmi_content_type' filepath='include/linux/hdmi.h' line='150' column='1' id='6cedbf81'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GRAPHICS' value='0'/>
+        <enumerator name='HDMI_CONTENT_TYPE_PHOTO' value='1'/>
+        <enumerator name='HDMI_CONTENT_TYPE_CINEMA' value='2'/>
+        <enumerator name='HDMI_CONTENT_TYPE_GAME' value='3'/>
+      </enum-decl>
+      <class-decl name='hdmi_spd_infoframe' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='240' column='1' id='9729258f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='vendor' type-id='8e100159' visibility='default' filepath='include/linux/hdmi.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='product' type-id='ac1fa8c0' visibility='default' filepath='include/linux/hdmi.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sdi' type-id='163c5ead' visibility='default' filepath='include/linux/hdmi.h' line='246' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_spd_sdi' filepath='include/linux/hdmi.h' line='223' column='1' id='163c5ead'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_SPD_SDI_UNKNOWN' value='0'/>
+        <enumerator name='HDMI_SPD_SDI_DSTB' value='1'/>
+        <enumerator name='HDMI_SPD_SDI_DVDP' value='2'/>
+        <enumerator name='HDMI_SPD_SDI_DVHS' value='3'/>
+        <enumerator name='HDMI_SPD_SDI_HDDVR' value='4'/>
+        <enumerator name='HDMI_SPD_SDI_DVC' value='5'/>
+        <enumerator name='HDMI_SPD_SDI_DSC' value='6'/>
+        <enumerator name='HDMI_SPD_SDI_VCD' value='7'/>
+        <enumerator name='HDMI_SPD_SDI_GAME' value='8'/>
+        <enumerator name='HDMI_SPD_SDI_PC' value='9'/>
+        <enumerator name='HDMI_SPD_SDI_BD' value='10'/>
+        <enumerator name='HDMI_SPD_SDI_SACD' value='11'/>
+        <enumerator name='HDMI_SPD_SDI_HDDVD' value='12'/>
+        <enumerator name='HDMI_SPD_SDI_PMP' value='13'/>
+      </enum-decl>
+      <union-decl name='hdmi_vendor_any_infoframe' size-in-bits='192' visibility='default' filepath='include/linux/hdmi.h' line='395' column='1' id='12153196'>
+        <data-member access='public'>
+          <var-decl name='any' type-id='3fda67d9' visibility='default' filepath='include/linux/hdmi.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hdmi' type-id='4db10e5c' visibility='default' filepath='include/linux/hdmi.h' line='402' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='396' column='1' id='3fda67d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='oui' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='400' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hdmi_vendor_infoframe' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='351' column='1' id='4db10e5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='oui' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vic' type-id='f9b06939' visibility='default' filepath='include/linux/hdmi.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s3d_struct' type-id='7c6e6e72' visibility='default' filepath='include/linux/hdmi.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s3d_ext_data' type-id='f0981eeb' visibility='default' filepath='include/linux/hdmi.h' line='358' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_3d_structure' filepath='include/linux/hdmi.h' line='338' column='1' id='7c6e6e72'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_3D_STRUCTURE_INVALID' value='-1'/>
+        <enumerator name='HDMI_3D_STRUCTURE_FRAME_PACKING' value='0'/>
+        <enumerator name='HDMI_3D_STRUCTURE_FIELD_ALTERNATIVE' value='1'/>
+        <enumerator name='HDMI_3D_STRUCTURE_LINE_ALTERNATIVE' value='2'/>
+        <enumerator name='HDMI_3D_STRUCTURE_SIDE_BY_SIDE_FULL' value='3'/>
+        <enumerator name='HDMI_3D_STRUCTURE_L_DEPTH' value='4'/>
+        <enumerator name='HDMI_3D_STRUCTURE_L_DEPTH_GFX_GFX_DEPTH' value='5'/>
+        <enumerator name='HDMI_3D_STRUCTURE_TOP_AND_BOTTOM' value='6'/>
+        <enumerator name='HDMI_3D_STRUCTURE_SIDE_BY_SIDE_HALF' value='8'/>
+      </enum-decl>
+      <class-decl name='hdmi_audio_infoframe' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='316' column='1' id='b4a1ba48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='channels' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='coding_type' type-id='3fe6d7c3' visibility='default' filepath='include/linux/hdmi.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_size' type-id='73deb9e6' visibility='default' filepath='include/linux/hdmi.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sample_frequency' type-id='75c2c977' visibility='default' filepath='include/linux/hdmi.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='coding_type_ext' type-id='795120af' visibility='default' filepath='include/linux/hdmi.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='channel_allocation' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='level_shift_value' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='downmix_inhibit' type-id='b50a4934' visibility='default' filepath='include/linux/hdmi.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_audio_coding_type' filepath='include/linux/hdmi.h' line='257' column='1' id='3fe6d7c3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_PCM' value='1'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_AC3' value='2'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MPEG1' value='3'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MP3' value='4'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MPEG2' value='5'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_AAC_LC' value='6'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DTS' value='7'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_ATRAC' value='8'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DSD' value='9'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EAC3' value='10'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DTS_HD' value='11'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_MLP' value='12'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_DST' value='13'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_WMA_PRO' value='14'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_CXT' value='15'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_sample_size' filepath='include/linux/hdmi.h' line='276' column='1' id='73deb9e6'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_16' value='1'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_20' value='2'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_SIZE_24' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_sample_frequency' filepath='include/linux/hdmi.h' line='283' column='1' id='75c2c977'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_STREAM' value='0'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_32000' value='1'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_44100' value='2'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_48000' value='3'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_88200' value='4'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_96000' value='5'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_176400' value='6'/>
+        <enumerator name='HDMI_AUDIO_SAMPLE_FREQUENCY_192000' value='7'/>
+      </enum-decl>
+      <enum-decl name='hdmi_audio_coding_type_ext' filepath='include/linux/hdmi.h' line='294' column='1' id='795120af'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_CT' value='0'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC' value='1'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_HE_AAC_V2' value='2'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG_SURROUND' value='3'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC' value='4'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_V2' value='5'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC' value='6'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_DRA' value='7'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_HE_AAC_SURROUND' value='8'/>
+        <enumerator name='HDMI_AUDIO_CODING_TYPE_EXT_MPEG4_AAC_LC_SURROUND' value='10'/>
+      </enum-decl>
+      <class-decl name='hdmi_drm_infoframe' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/hdmi.h' line='192' column='1' id='9ebab137'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='c573b339' visibility='default' filepath='include/linux/hdmi.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='version' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='length' type-id='002ac4a6' visibility='default' filepath='include/linux/hdmi.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eotf' type-id='7b330cb5' visibility='default' filepath='include/linux/hdmi.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metadata_type' type-id='46a5cd93' visibility='default' filepath='include/linux/hdmi.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='display_primaries' type-id='b7bcaa67' visibility='default' filepath='include/linux/hdmi.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='white_point' type-id='7567d0f8' visibility='default' filepath='include/linux/hdmi.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_display_mastering_luminance' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='min_display_mastering_luminance' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_cll' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='max_fall' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='hdmi_eotf' filepath='include/linux/hdmi.h' line='161' column='1' id='7b330cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_EOTF_TRADITIONAL_GAMMA_SDR' value='0'/>
+        <enumerator name='HDMI_EOTF_TRADITIONAL_GAMMA_HDR' value='1'/>
+        <enumerator name='HDMI_EOTF_SMPTE_ST2084' value='2'/>
+        <enumerator name='HDMI_EOTF_BT_2100_HLG' value='3'/>
+      </enum-decl>
+      <enum-decl name='hdmi_metadata_type' filepath='include/linux/hdmi.h' line='157' column='1' id='46a5cd93'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='HDMI_STATIC_METADATA_TYPE1' value='0'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/hdmi.h' line='198' column='1' id='7567d0f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='y' type-id='1dc6a898' visibility='default' filepath='include/linux/hdmi.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b4a1ba48' size-in-bits='64' id='309bd9ee'/>
+      <pointer-type-def type-id='4536ce10' size-in-bits='64' id='19ddc3a6'/>
+      <pointer-type-def type-id='da92e008' size-in-bits='64' id='885b5549'/>
+      <function-decl name='hdmi_infoframe_pack' mangled-name='hdmi_infoframe_pack' filepath='drivers/video/hdmi.c' line='948' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_infoframe_pack'>
+        <parameter type-id='885b5549' name='frame' filepath='drivers/video/hdmi.c' line='948' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='949' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='949' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='hdmi_avi_infoframe_pack' mangled-name='hdmi_avi_infoframe_pack' filepath='drivers/video/hdmi.c' line='204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_avi_infoframe_pack'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/video/hdmi.c' line='204' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='205' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='205' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='hdmi_avi_infoframe_init' mangled-name='hdmi_avi_infoframe_init' filepath='drivers/video/hdmi.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_avi_infoframe_init'>
+        <parameter type-id='19ddc3a6' name='frame' filepath='drivers/video/hdmi.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hdmi_audio_infoframe_pack' mangled-name='hdmi_audio_infoframe_pack' filepath='drivers/video/hdmi.c' line='469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_audio_infoframe_pack'>
+        <parameter type-id='309bd9ee' name='frame' filepath='drivers/video/hdmi.c' line='469' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='drivers/video/hdmi.c' line='470' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='drivers/video/hdmi.c' line='470' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='hdmi_audio_infoframe_init' mangled-name='hdmi_audio_infoframe_init' filepath='drivers/video/hdmi.c' line='353' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hdmi_audio_infoframe_init'>
+        <parameter type-id='309bd9ee' name='frame' filepath='drivers/video/hdmi.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/virtio/virtio.c' language='LANG_C89'>
+      <class-decl name='virtio_driver' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/virtio.h' line='165' column='1' id='f8d99df1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver' type-id='fe007c02' visibility='default' filepath='include/linux/virtio.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='id_table' type-id='3049673c' visibility='default' filepath='include/linux/virtio.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='feature_table' type-id='5b2fd8e8' visibility='default' filepath='include/linux/virtio.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='feature_table_size' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='feature_table_legacy' type-id='5b2fd8e8' visibility='default' filepath='include/linux/virtio.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='feature_table_size_legacy' type-id='f0981eeb' visibility='default' filepath='include/linux/virtio.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='validate' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='probe' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='scan' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remove' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='config_changed' type-id='33d93b18' visibility='default' filepath='include/linux/virtio.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='freeze' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='restore' type-id='b89d0409' visibility='default' filepath='include/linux/virtio.h' line='179' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a23921c9' const='yes' id='e98a103e'/>
+      <pointer-type-def type-id='e98a103e' size-in-bits='64' id='b8574f7c'/>
+      <qualified-type-def type-id='7462f12f' const='yes' id='106d717e'/>
+      <pointer-type-def type-id='106d717e' size-in-bits='64' id='3049673c'/>
+      <pointer-type-def type-id='f8d99df1' size-in-bits='64' id='f350dc99'/>
+      <function-decl name='unregister_virtio_driver' mangled-name='unregister_virtio_driver' filepath='drivers/virtio/virtio.c' line='314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_virtio_driver'>
+        <parameter type-id='f350dc99' name='driver' filepath='drivers/virtio/virtio.c' line='314' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_device_restore' mangled-name='virtio_device_restore' filepath='drivers/virtio/virtio.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_device_restore'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='396' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_device_freeze' mangled-name='virtio_device_freeze' filepath='drivers/virtio/virtio.c' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_device_freeze'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='381' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_config_changed' mangled-name='virtio_config_changed' filepath='drivers/virtio/virtio.c' line='134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_config_changed'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='134' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_check_driver_offered_feature' mangled-name='virtio_check_driver_offered_feature' filepath='drivers/virtio/virtio.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_check_driver_offered_feature'>
+        <parameter type-id='b8574f7c' name='vdev' filepath='drivers/virtio/virtio.c' line='104' column='1'/>
+        <parameter type-id='f0981eeb' name='fbit' filepath='drivers/virtio/virtio.c' line='105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_virtio_device' mangled-name='unregister_virtio_device' filepath='drivers/virtio/virtio.c' line='371' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_virtio_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='371' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_virtio_driver' mangled-name='register_virtio_driver' filepath='drivers/virtio/virtio.c' line='305' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_virtio_driver'>
+        <parameter type-id='f350dc99' name='driver' filepath='drivers/virtio/virtio.c' line='305' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_virtio_device' mangled-name='register_virtio_device' filepath='drivers/virtio/virtio.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_virtio_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio.c' line='329' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/virtio/virtio_ring.c' language='LANG_C89'>
+      <pointer-type-def type-id='bf3ef905' size-in-bits='64' id='3f2244fd'/>
+      <pointer-type-def type-id='1697786f' size-in-bits='64' id='3098d84b'/>
+      <function-decl name='virtqueue_is_broken' mangled-name='virtqueue_is_broken' filepath='drivers/virtio/virtio_ring.c' line='2261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_is_broken'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2261' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_buf_ctx' mangled-name='virtqueue_get_buf_ctx' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_buf_ctx'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1'/>
+        <parameter type-id='807869d3' name='len' filepath='drivers/virtio/virtio_ring.c' line='1894' column='1'/>
+        <parameter type-id='63e171df' name='ctx' filepath='drivers/virtio/virtio_ring.c' line='1895' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb' mangled-name='virtqueue_enable_cb' filepath='drivers/virtio/virtio_ring.c' line='1983' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1983' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='vring_transport_features' mangled-name='vring_transport_features' filepath='drivers/virtio/virtio_ring.c' line='2219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_transport_features'>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2219' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vring_new_virtqueue' mangled-name='vring_new_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_new_virtqueue'>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/virtio/virtio_ring.c' line='2159' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='2160' column='1'/>
+        <parameter type-id='f0981eeb' name='vring_align' filepath='drivers/virtio/virtio_ring.c' line='2161' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2162' column='1'/>
+        <parameter type-id='b50a4934' name='weak_barriers' filepath='drivers/virtio/virtio_ring.c' line='2163' column='1'/>
+        <parameter type-id='b50a4934' name='context' filepath='drivers/virtio/virtio_ring.c' line='2164' column='1'/>
+        <parameter type-id='eaa32e2f' name='pages' filepath='drivers/virtio/virtio_ring.c' line='2165' column='1'/>
+        <parameter type-id='3098d84b' name='notify' filepath='drivers/virtio/virtio_ring.c' line='2166' column='1'/>
+        <parameter type-id='c881e0a0' name='callback' filepath='drivers/virtio/virtio_ring.c' line='2167' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/virtio/virtio_ring.c' line='2168' column='1'/>
+        <return type-id='91d0de51'/>
+      </function-decl>
+      <function-decl name='vring_interrupt' mangled-name='vring_interrupt' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_interrupt'>
+        <parameter type-id='95e97e5e' name='irq' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1'/>
+        <parameter type-id='eaa32e2f' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2035' column='1'/>
+        <return type-id='4bdecfd7'/>
+      </function-decl>
+      <function-decl name='vring_del_virtqueue' mangled-name='vring_del_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_del_virtqueue'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2181' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vring_create_virtqueue' mangled-name='vring_create_virtqueue' filepath='drivers/virtio/virtio_ring.c' line='2134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vring_create_virtqueue'>
+        <parameter type-id='f0981eeb' name='index' filepath='drivers/virtio/virtio_ring.c' line='2135' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='2136' column='1'/>
+        <parameter type-id='f0981eeb' name='vring_align' filepath='drivers/virtio/virtio_ring.c' line='2137' column='1'/>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='2138' column='1'/>
+        <parameter type-id='b50a4934' name='weak_barriers' filepath='drivers/virtio/virtio_ring.c' line='2139' column='1'/>
+        <parameter type-id='b50a4934' name='may_reduce_num' filepath='drivers/virtio/virtio_ring.c' line='2140' column='1'/>
+        <parameter type-id='b50a4934' name='context' filepath='drivers/virtio/virtio_ring.c' line='2141' column='1'/>
+        <parameter type-id='3098d84b' name='notify' filepath='drivers/virtio/virtio_ring.c' line='2142' column='1'/>
+        <parameter type-id='c881e0a0' name='callback' filepath='drivers/virtio/virtio_ring.c' line='2143' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='drivers/virtio/virtio_ring.c' line='2144' column='1'/>
+        <return type-id='91d0de51'/>
+      </function-decl>
+      <function-decl name='virtqueue_poll' mangled-name='virtqueue_poll' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_poll'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1'/>
+        <parameter type-id='f0981eeb' name='last_used_idx' filepath='drivers/virtio/virtio_ring.c' line='1959' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_notify' mangled-name='virtqueue_notify' filepath='drivers/virtio/virtio_ring.c' line='1841' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_notify'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1841' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_kick_prepare' mangled-name='virtqueue_kick_prepare' filepath='drivers/virtio/virtio_ring.c' line='1824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_kick_prepare'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1824' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_kick' mangled-name='virtqueue_kick' filepath='drivers/virtio/virtio_ring.c' line='1869' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_kick'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1869' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_vring_size' mangled-name='virtqueue_get_vring_size' filepath='drivers/virtio/virtio_ring.c' line='2252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_vring_size'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2252' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_used_addr' mangled-name='virtqueue_get_used_addr' filepath='drivers/virtio/virtio_ring.c' line='2313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_used_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2313' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_desc_addr' mangled-name='virtqueue_get_desc_addr' filepath='drivers/virtio/virtio_ring.c' line='2286' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_desc_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2286' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_buf' mangled-name='virtqueue_get_buf' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_buf'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1'/>
+        <parameter type-id='807869d3' name='len' filepath='drivers/virtio/virtio_ring.c' line='1904' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_get_avail_addr' mangled-name='virtqueue_get_avail_addr' filepath='drivers/virtio/virtio_ring.c' line='2299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_get_avail_addr'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2299' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb_prepare' mangled-name='virtqueue_enable_cb_prepare' filepath='drivers/virtio/virtio_ring.c' line='1941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb_prepare'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1941' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='virtqueue_enable_cb_delayed' mangled-name='virtqueue_enable_cb_delayed' filepath='drivers/virtio/virtio_ring.c' line='2004' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_enable_cb_delayed'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2004' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtqueue_disable_cb' mangled-name='virtqueue_disable_cb' filepath='drivers/virtio/virtio_ring.c' line='1918' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_disable_cb'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1918' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtqueue_detach_unused_buf' mangled-name='virtqueue_detach_unused_buf' filepath='drivers/virtio/virtio_ring.c' line='2021' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_detach_unused_buf'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='2021' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_sgs' mangled-name='virtqueue_add_sgs' filepath='drivers/virtio/virtio_ring.c' line='1724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_sgs'>
+        <parameter type-id='91d0de51' name='_vq' filepath='drivers/virtio/virtio_ring.c' line='1724' column='1'/>
+        <parameter type-id='3f2244fd' name='sgs' filepath='drivers/virtio/virtio_ring.c' line='1725' column='1'/>
+        <parameter type-id='f0981eeb' name='out_sgs' filepath='drivers/virtio/virtio_ring.c' line='1726' column='1'/>
+        <parameter type-id='f0981eeb' name='in_sgs' filepath='drivers/virtio/virtio_ring.c' line='1727' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1728' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1729' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_outbuf' mangled-name='virtqueue_add_outbuf' filepath='drivers/virtio/virtio_ring.c' line='1758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_outbuf'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1758' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1759' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1759' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1760' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1761' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_inbuf_ctx' mangled-name='virtqueue_add_inbuf_ctx' filepath='drivers/virtio/virtio_ring.c' line='1803' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_inbuf_ctx'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1803' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1804' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1804' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1805' column='1'/>
+        <parameter type-id='eaa32e2f' name='ctx' filepath='drivers/virtio/virtio_ring.c' line='1806' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1807' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtqueue_add_inbuf' mangled-name='virtqueue_add_inbuf' filepath='drivers/virtio/virtio_ring.c' line='1780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtqueue_add_inbuf'>
+        <parameter type-id='91d0de51' name='vq' filepath='drivers/virtio/virtio_ring.c' line='1780' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='drivers/virtio/virtio_ring.c' line='1781' column='1'/>
+        <parameter type-id='f0981eeb' name='num' filepath='drivers/virtio/virtio_ring.c' line='1781' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='drivers/virtio/virtio_ring.c' line='1782' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='drivers/virtio/virtio_ring.c' line='1783' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_max_dma_size' mangled-name='virtio_max_dma_size' filepath='drivers/virtio/virtio_ring.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_max_dma_size'>
+        <parameter type-id='5dbfcbb1' name='vdev' filepath='drivers/virtio/virtio_ring.c' line='261' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='virtio_break_device' mangled-name='virtio_break_device' filepath='drivers/virtio/virtio_ring.c' line='2273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_break_device'>
+        <parameter type-id='5dbfcbb1' name='dev' filepath='drivers/virtio/virtio_ring.c' line='2273' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1697786f'>
+        <parameter type-id='91d0de51' name='_vq'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='drivers/watchdog/watchdog_core.c' language='LANG_C89'>
+      <class-decl name='watchdog_core_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='1d334f81'/>
+      <class-decl name='watchdog_governor' is-struct='yes' visibility='default' is-declaration-only='yes' id='b07b6d69'/>
+      <class-decl name='watchdog_device' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/watchdog.h' line='94' column='1' id='b370f5a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/watchdog.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='fa0b179b' visibility='default' filepath='include/linux/watchdog.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='c97de1ac' visibility='default' filepath='include/linux/watchdog.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='9800391a' visibility='default' filepath='include/linux/watchdog.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='7365a3da' visibility='default' filepath='include/linux/watchdog.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gov' type-id='22358840' visibility='default' filepath='include/linux/watchdog.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bootstatus' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pretimeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='min_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_hw_heartbeat_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_hw_heartbeat_ms' type-id='f0981eeb' visibility='default' filepath='include/linux/watchdog.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reboot_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/watchdog.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='restart_nb' type-id='9b08f7cd' visibility='default' filepath='include/linux/watchdog.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/watchdog.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wd_data' type-id='daa81219' visibility='default' filepath='include/linux/watchdog.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='status' type-id='7359adad' visibility='default' filepath='include/linux/watchdog.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='deferred' type-id='72f469ec' visibility='default' filepath='include/linux/watchdog.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='watchdog_info' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/uapi/linux/watchdog.h' line='18' column='1' id='5da1665b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='options' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/watchdog.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='firmware_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/watchdog.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='identity' type-id='7e67d89d' visibility='default' filepath='include/uapi/linux/watchdog.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='watchdog_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/watchdog.h' line='43' column='1' id='27dec419'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/watchdog.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stop' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ping' type-id='26989ff9' visibility='default' filepath='include/linux/watchdog.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='status' type-id='d601a214' visibility='default' filepath='include/linux/watchdog.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_timeout' type-id='b535be93' visibility='default' filepath='include/linux/watchdog.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_pretimeout' type-id='b535be93' visibility='default' filepath='include/linux/watchdog.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_timeleft' type-id='d601a214' visibility='default' filepath='include/linux/watchdog.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='restart' type-id='8899c21b' visibility='default' filepath='include/linux/watchdog.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='07da4e39' visibility='default' filepath='include/linux/watchdog.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='b07b6d69' const='yes' id='359a7eea'/>
+      <pointer-type-def type-id='359a7eea' size-in-bits='64' id='22358840'/>
+      <qualified-type-def type-id='5da1665b' const='yes' id='45257a94'/>
+      <pointer-type-def type-id='45257a94' size-in-bits='64' id='9800391a'/>
+      <qualified-type-def type-id='27dec419' const='yes' id='d8e81cd4'/>
+      <pointer-type-def type-id='d8e81cd4' size-in-bits='64' id='7365a3da'/>
+      <pointer-type-def type-id='066f541d' size-in-bits='64' id='26989ff9'/>
+      <pointer-type-def type-id='78d147c7' size-in-bits='64' id='b535be93'/>
+      <pointer-type-def type-id='102202df' size-in-bits='64' id='8899c21b'/>
+      <pointer-type-def type-id='b4a1f53d' size-in-bits='64' id='07da4e39'/>
+      <pointer-type-def type-id='62d1e232' size-in-bits='64' id='d601a214'/>
+      <pointer-type-def type-id='1d334f81' size-in-bits='64' id='daa81219'/>
+      <pointer-type-def type-id='b370f5a5' size-in-bits='64' id='7bf5a5e5'/>
+      <function-decl name='watchdog_unregister_device' mangled-name='watchdog_unregister_device' filepath='drivers/watchdog/watchdog_core.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_unregister_device'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='343' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='watchdog_set_restart_priority' mangled-name='watchdog_set_restart_priority' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_set_restart_priority'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='priority' filepath='drivers/watchdog/watchdog_core.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='watchdog_register_device' mangled-name='watchdog_register_device' filepath='drivers/watchdog/watchdog_core.c' line='297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_register_device'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='watchdog_init_timeout' mangled-name='watchdog_init_timeout' filepath='drivers/watchdog/watchdog_core.c' line='110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='watchdog_init_timeout'>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='timeout_parm' filepath='drivers/watchdog/watchdog_core.c' line='111' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/watchdog/watchdog_core.c' line='111' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_watchdog_register_device' mangled-name='devm_watchdog_register_device' filepath='drivers/watchdog/watchdog_core.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_watchdog_register_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='drivers/watchdog/watchdog_core.c' line='369' column='1'/>
+        <parameter type-id='7bf5a5e5' name='wdd' filepath='drivers/watchdog/watchdog_core.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='066f541d'>
+        <parameter type-id='7bf5a5e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78d147c7'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='102202df'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4a1f53d'>
+        <parameter type-id='7bf5a5e5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62d1e232'>
+        <parameter type-id='7bf5a5e5'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/anon_inodes.c' language='LANG_C89'>
+      <function-decl name='anon_inode_getfile' mangled-name='anon_inode_getfile' filepath='fs/anon_inodes.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='anon_inode_getfile'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/anon_inodes.c' line='143' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/anon_inodes.c' line='144' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='fs/anon_inodes.c' line='145' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/anon_inodes.c' line='145' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='anon_inode_getfd' mangled-name='anon_inode_getfd' filepath='fs/anon_inodes.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='anon_inode_getfd'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/anon_inodes.c' line='197' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/anon_inodes.c' line='197' column='1'/>
+        <parameter type-id='eaa32e2f' name='priv' filepath='fs/anon_inodes.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/anon_inodes.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/attr.c' language='LANG_C89'>
+      <qualified-type-def type-id='a9ef191f' const='yes' id='66bd4388'/>
+      <pointer-type-def type-id='66bd4388' size-in-bits='64' id='5df17806'/>
+      <function-decl name='setattr_prepare' mangled-name='setattr_prepare' filepath='fs/attr.c' line='61' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setattr_prepare'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/attr.c' line='61' column='1'/>
+        <parameter type-id='ab7bbd67' name='attr' filepath='fs/attr.c' line='61' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='setattr_copy' mangled-name='setattr_copy' filepath='fs/attr.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setattr_copy'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/attr.c' line='178' column='1'/>
+        <parameter type-id='5df17806' name='attr' filepath='fs/attr.c' line='178' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='iattr' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='226' column='1' id='a9ef191f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ia_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ia_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ia_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ia_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a9ef191f' size-in-bits='64' id='ab7bbd67'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/bad_inode.c' language='LANG_C89'>
+      <function-decl name='make_bad_inode' mangled-name='make_bad_inode' filepath='fs/bad_inode.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='make_bad_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='is_bad_inode' mangled-name='is_bad_inode' filepath='fs/bad_inode.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_bad_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='224' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='iget_failed' mangled-name='iget_failed' filepath='fs/bad_inode.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget_failed'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/bad_inode.c' line='237' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/block_dev.c' language='LANG_C89'>
+      <function-decl name='blkdev_get' mangled-name='blkdev_get' filepath='fs/block_dev.c' line='1699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_get'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1699' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='fs/block_dev.c' line='1699' column='1'/>
+        <parameter type-id='eaa32e2f' name='holder' filepath='fs/block_dev.c' line='1699' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='set_blocksize' mangled-name='set_blocksize' filepath='fs/block_dev.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_blocksize'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='122' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='fs/block_dev.c' line='122' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blkdev_put' mangled-name='blkdev_put' filepath='fs/block_dev.c' line='1905' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_put'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1905' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='fs/block_dev.c' line='1905' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='blkdev_get_by_path' mangled-name='blkdev_get_by_path' filepath='fs/block_dev.c' line='1766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_get_by_path'>
+        <parameter type-id='80f4b756' name='path' filepath='fs/block_dev.c' line='1766' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='fs/block_dev.c' line='1766' column='1'/>
+        <parameter type-id='eaa32e2f' name='holder' filepath='fs/block_dev.c' line='1767' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='sync_blockdev' mangled-name='sync_blockdev' filepath='fs/block_dev.c' line='503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_blockdev'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='503' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sb_set_blocksize' mangled-name='sb_set_blocksize' filepath='fs/block_dev.c' line='144' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb_set_blocksize'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/block_dev.c' line='144' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='fs/block_dev.c' line='144' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sb_min_blocksize' mangled-name='sb_min_blocksize' filepath='fs/block_dev.c' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sb_min_blocksize'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/block_dev.c' line='157' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='fs/block_dev.c' line='157' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='revalidate_disk' mangled-name='revalidate_disk' filepath='fs/block_dev.c' line='1451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='revalidate_disk'>
+        <parameter type-id='33c599da' name='disk' filepath='fs/block_dev.c' line='1451' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='invalidate_bdev' mangled-name='invalidate_bdev' filepath='fs/block_dev.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_bdev'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='92' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fsync_bdev' mangled-name='fsync_bdev' filepath='fs/block_dev.c' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fsync_bdev'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='514' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='check_disk_change' mangled-name='check_disk_change' filepath='fs/block_dev.c' line='1487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='check_disk_change'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1487' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blkdev_get_by_dev' mangled-name='blkdev_get_by_dev' filepath='fs/block_dev.c' line='1811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blkdev_get_by_dev'>
+        <parameter type-id='8504f260' name='dev' filepath='fs/block_dev.c' line='1811' column='1'/>
+        <parameter type-id='2665334e' name='mode' filepath='fs/block_dev.c' line='1811' column='1'/>
+        <parameter type-id='eaa32e2f' name='holder' filepath='fs/block_dev.c' line='1811' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='bdput' mangled-name='bdput' filepath='fs/block_dev.c' line='963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdput'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bdgrab' mangled-name='bdgrab' filepath='fs/block_dev.c' line='944' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bdgrab'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='944' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+      <function-decl name='bd_unlink_disk_holder' mangled-name='bd_unlink_disk_holder' filepath='fs/block_dev.c' line='1372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bd_unlink_disk_holder'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1372' column='1'/>
+        <parameter type-id='33c599da' name='disk' filepath='fs/block_dev.c' line='1372' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bd_link_disk_holder' mangled-name='bd_link_disk_holder' filepath='fs/block_dev.c' line='1307' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bd_link_disk_holder'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/block_dev.c' line='1307' column='1'/>
+        <parameter type-id='33c599da' name='disk' filepath='fs/block_dev.c' line='1307' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='I_BDEV' mangled-name='I_BDEV' filepath='fs/block_dev.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='I_BDEV'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/block_dev.c' line='52' column='1'/>
+        <return type-id='b88dd945'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/buffer.c' language='LANG_C89'>
+      <class-decl name='buffer_head' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/buffer_head.h' line='63' column='1' id='4943c066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b_state' type-id='7359adad' visibility='default' filepath='include/linux/buffer_head.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='b_this_page' type-id='c485c22c' visibility='default' filepath='include/linux/buffer_head.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='b_page' type-id='02f11ed4' visibility='default' filepath='include/linux/buffer_head.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_blocknr' type-id='a42536cd' visibility='default' filepath='include/linux/buffer_head.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='b_size' type-id='b59d7dce' visibility='default' filepath='include/linux/buffer_head.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_data' type-id='26a90f95' visibility='default' filepath='include/linux/buffer_head.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='b_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/buffer_head.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_end_io' type-id='7874b245' visibility='default' filepath='include/linux/buffer_head.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='b_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/buffer_head.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_assoc_buffers' type-id='72f469ec' visibility='default' filepath='include/linux/buffer_head.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='b_assoc_map' type-id='f57039f0' visibility='default' filepath='include/linux/buffer_head.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='b_count' type-id='49178f86' visibility='default' filepath='include/linux/buffer_head.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bh_end_io_t' type-id='e1740daa' filepath='include/linux/buffer_head.h' line='52' column='1' id='6797a3ea'/>
+      <typedef-decl name='get_block_t' type-id='45550f94' filepath='include/linux/fs.h' line='92' column='1' id='4316c9c9'/>
+      <enum-decl name='writeback_sync_modes' filepath='include/linux/writeback.h' line='41' column='1' id='cf92d981'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='WB_SYNC_NONE' value='0'/>
+        <enumerator name='WB_SYNC_ALL' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='6797a3ea' size-in-bits='64' id='7874b245'/>
+      <pointer-type-def type-id='4943c066' size-in-bits='64' id='c485c22c'/>
+      <pointer-type-def type-id='c485c22c' size-in-bits='64' id='64906f72'/>
+      <pointer-type-def type-id='4316c9c9' size-in-bits='64' id='05ca8778'/>
+      <function-decl name='__lock_buffer' mangled-name='__lock_buffer' filepath='fs/buffer.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__lock_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='65' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unlock_buffer' mangled-name='unlock_buffer' filepath='fs/buffer.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='71' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='touch_buffer' mangled-name='touch_buffer' filepath='fs/buffer.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='touch_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='58' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sync_mapping_buffers' mangled-name='sync_mapping_buffers' filepath='fs/buffer.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_mapping_buffers'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='517' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sync_dirty_buffer' mangled-name='sync_dirty_buffer' filepath='fs/buffer.c' line='3182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_dirty_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3182' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sync_dirty_buffer' mangled-name='__sync_dirty_buffer' filepath='fs/buffer.c' line='3153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sync_dirty_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3153' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='submit_bh' mangled-name='submit_bh' filepath='fs/buffer.c' line='3074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='submit_bh'>
+        <parameter type-id='95e97e5e' name='op' filepath='fs/buffer.c' line='3074' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3074' column='1'/>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3074' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mark_buffer_dirty' mangled-name='mark_buffer_dirty' filepath='fs/buffer.c' line='1087' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mark_buffer_dirty'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='1087' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ll_rw_block' mangled-name='ll_rw_block' filepath='fs/buffer.c' line='3106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ll_rw_block'>
+        <parameter type-id='95e97e5e' name='op' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flags' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='fs/buffer.c' line='3106' column='1'/>
+        <parameter type-id='64906f72' name='bhs' filepath='fs/buffer.c' line='3106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='end_buffer_read_sync' mangled-name='end_buffer_read_sync' filepath='fs/buffer.c' line='163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='end_buffer_read_sync'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='163' column='1'/>
+        <parameter type-id='95e97e5e' name='uptodate' filepath='fs/buffer.c' line='163' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='invalidate_inode_buffers' mangled-name='invalidate_inode_buffers' filepath='fs/buffer.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_inode_buffers'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/buffer.c' line='762' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_write_end' mangled-name='generic_write_end' filepath='fs/buffer.c' line='2137' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_write_end'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/buffer.c' line='2137' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2137' column='1'/>
+        <parameter type-id='69bf7bee' name='pos' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='f0981eeb' name='copied' filepath='fs/buffer.c' line='2138' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2139' column='1'/>
+        <parameter type-id='eaa32e2f' name='fsdata' filepath='fs/buffer.c' line='2139' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_cont_expand_simple' mangled-name='generic_cont_expand_simple' filepath='fs/buffer.c' line='2318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_cont_expand_simple'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/buffer.c' line='2318' column='1'/>
+        <parameter type-id='69bf7bee' name='size' filepath='fs/buffer.c' line='2318' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_block_bmap' mangled-name='generic_block_bmap' filepath='fs/buffer.c' line='2954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_block_bmap'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2954' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='2954' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2955' column='1'/>
+        <return type-id='a42536cd'/>
+      </function-decl>
+      <function-decl name='free_buffer_head' mangled-name='free_buffer_head' filepath='fs/buffer.c' line='3364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_buffer_head'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='3364' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='create_empty_buffers' mangled-name='create_empty_buffers' filepath='fs/buffer.c' line='1525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='create_empty_buffers'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='1525' column='1'/>
+        <parameter type-id='7359adad' name='blocksize' filepath='fs/buffer.c' line='1526' column='1'/>
+        <parameter type-id='7359adad' name='b_state' filepath='fs/buffer.c' line='1526' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_page_buffers' mangled-name='alloc_page_buffers' filepath='fs/buffer.c' line='815' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_page_buffers'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='815' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='fs/buffer.c' line='815' column='1'/>
+        <parameter type-id='b50a4934' name='retry' filepath='fs/buffer.c' line='816' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='cont_write_begin' mangled-name='cont_write_begin' filepath='fs/buffer.c' line='2418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cont_write_begin'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/buffer.c' line='2418' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/buffer.c' line='2418' column='1'/>
+        <parameter type-id='69bf7bee' name='pos' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/buffer.c' line='2419' column='1'/>
+        <parameter type-id='9f93c9da' name='pagep' filepath='fs/buffer.c' line='2420' column='1'/>
+        <parameter type-id='63e171df' name='fsdata' filepath='fs/buffer.c' line='2420' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2421' column='1'/>
+        <parameter type-id='b53e8dbb' name='bytes' filepath='fs/buffer.c' line='2421' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='block_write_full_page' mangled-name='block_write_full_page' filepath='fs/buffer.c' line='2921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='block_write_full_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2921' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/buffer.c' line='2921' column='1'/>
+        <parameter type-id='c2c60445' name='wbc' filepath='fs/buffer.c' line='2922' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='block_is_partially_uptodate' mangled-name='block_is_partially_uptodate' filepath='fs/buffer.c' line='2183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='block_is_partially_uptodate'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/buffer.c' line='2183' column='1'/>
+        <parameter type-id='7359adad' name='from' filepath='fs/buffer.c' line='2183' column='1'/>
+        <parameter type-id='7359adad' name='count' filepath='fs/buffer.c' line='2184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__wait_on_buffer' mangled-name='__wait_on_buffer' filepath='fs/buffer.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wait_on_buffer'>
+        <parameter type-id='c485c22c' name='bh' filepath='fs/buffer.c' line='118' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__getblk_gfp' mangled-name='__getblk_gfp' filepath='fs/buffer.c' line='1316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__getblk_gfp'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1316' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1316' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1317' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='fs/buffer.c' line='1317' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='__find_get_block' mangled-name='__find_get_block' filepath='fs/buffer.c' line='1291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__find_get_block'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1291' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1291' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1291' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-decl name='__brelse' mangled-name='__brelse' filepath='fs/buffer.c' line='1140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__brelse'>
+        <parameter type-id='c485c22c' name='buf' filepath='fs/buffer.c' line='1140' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__breadahead' mangled-name='__breadahead' filepath='fs/buffer.c' line='1331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__breadahead'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1331' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1331' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bread_gfp' mangled-name='__bread_gfp' filepath='fs/buffer.c' line='1365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bread_gfp'>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/buffer.c' line='1365' column='1'/>
+        <parameter type-id='a42536cd' name='block' filepath='fs/buffer.c' line='1365' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='fs/buffer.c' line='1366' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='fs/buffer.c' line='1366' column='1'/>
+        <return type-id='c485c22c'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='45550f94'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='c485c22c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1740daa'>
+        <parameter type-id='c485c22c'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='705711f5' size-in-bits='64' id='c2c60445'/>
+      <class-decl name='writeback_control' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='51' column='1' id='705711f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_to_write' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages_skipped' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='range_start' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='range_end' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sync_mode' type-id='cf92d981' visibility='default' filepath='include/linux/writeback.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='for_kupdate' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='for_background' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='tagged_writepages' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='for_reclaim' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='range_cyclic' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='for_sync' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_cgroup_owner' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='punt_to_cgroup' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wb' type-id='f885ca7d' visibility='default' filepath='include/linux/writeback.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='include/linux/writeback.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wb_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='wb_lcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wb_tcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wb_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wb_lcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wb_tcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/char_dev.c' language='LANG_C89'>
+      <pointer-type-def type-id='8504f260' size-in-bits='64' id='33f86a47'/>
+      <function-decl name='cdev_device_add' mangled-name='cdev_device_add' filepath='fs/char_dev.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_add'>
+        <parameter type-id='3e6eb939' name='cdev' filepath='fs/char_dev.c' line='534' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='fs/char_dev.c' line='534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_chrdev_region' mangled-name='unregister_chrdev_region' filepath='fs/char_dev.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_chrdev_region'>
+        <parameter type-id='8504f260' name='from' filepath='fs/char_dev.c' line='311' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='311' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_chrdev_region' mangled-name='register_chrdev_region' filepath='fs/char_dev.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_chrdev_region'>
+        <parameter type-id='8504f260' name='from' filepath='fs/char_dev.c' line='200' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='200' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='200' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cdev_init' mangled-name='cdev_init' filepath='fs/char_dev.c' line='648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_init'>
+        <parameter type-id='3e6eb939' name='cdev' filepath='fs/char_dev.c' line='648' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/char_dev.c' line='648' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_device_del' mangled-name='cdev_device_del' filepath='fs/char_dev.c' line='568' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_device_del'>
+        <parameter type-id='3e6eb939' name='cdev' filepath='fs/char_dev.c' line='568' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='fs/char_dev.c' line='568' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_del' mangled-name='cdev_del' filepath='fs/char_dev.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_del'>
+        <parameter type-id='3e6eb939' name='p' filepath='fs/char_dev.c' line='591' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cdev_alloc' mangled-name='cdev_alloc' filepath='fs/char_dev.c' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_alloc'>
+        <return type-id='3e6eb939'/>
+      </function-decl>
+      <function-decl name='cdev_add' mangled-name='cdev_add' filepath='fs/char_dev.c' line='479' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cdev_add'>
+        <parameter type-id='3e6eb939' name='p' filepath='fs/char_dev.c' line='479' column='1'/>
+        <parameter type-id='8504f260' name='dev' filepath='fs/char_dev.c' line='479' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='479' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='alloc_chrdev_region' mangled-name='alloc_chrdev_region' filepath='fs/char_dev.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_chrdev_region'>
+        <parameter type-id='33f86a47' name='dev' filepath='fs/char_dev.c' line='236' column='1'/>
+        <parameter type-id='f0981eeb' name='baseminor' filepath='fs/char_dev.c' line='236' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='236' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='237' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__unregister_chrdev' mangled-name='__unregister_chrdev' filepath='fs/char_dev.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__unregister_chrdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='fs/char_dev.c' line='335' column='1'/>
+        <parameter type-id='f0981eeb' name='baseminor' filepath='fs/char_dev.c' line='335' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='336' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='336' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__register_chrdev' mangled-name='__register_chrdev' filepath='fs/char_dev.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_chrdev'>
+        <parameter type-id='f0981eeb' name='major' filepath='fs/char_dev.c' line='268' column='1'/>
+        <parameter type-id='f0981eeb' name='baseminor' filepath='fs/char_dev.c' line='268' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='fs/char_dev.c' line='269' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/char_dev.c' line='269' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/char_dev.c' line='270' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/configfs/item.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='160' id='664ac0b7'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <class-decl name='config_item' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='40' column='1' id='79236ccf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ci_name' type-id='26a90f95' visibility='default' filepath='include/linux/configfs.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ci_namebuf' type-id='664ac0b7' visibility='default' filepath='include/linux/configfs.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ci_kref' type-id='400fb07b' visibility='default' filepath='include/linux/configfs.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ci_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ci_parent' type-id='7a29ff27' visibility='default' filepath='include/linux/configfs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ci_group' type-id='97aff453' visibility='default' filepath='include/linux/configfs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ci_type' type-id='596e8e55' visibility='default' filepath='include/linux/configfs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ci_dentry' type-id='27675065' visibility='default' filepath='include/linux/configfs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_group' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='79' column='1' id='f05eea43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cg_item' type-id='79236ccf' visibility='default' filepath='include/linux/configfs.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cg_children' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cg_subsys' type-id='598755ca' visibility='default' filepath='include/linux/configfs.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='default_groups' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='group_entry' type-id='72f469ec' visibility='default' filepath='include/linux/configfs.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_subsystem' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='226' column='1' id='4bdc1a8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='su_group' type-id='f05eea43' visibility='default' filepath='include/linux/configfs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='su_mutex' type-id='925167dc' visibility='default' filepath='include/linux/configfs.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='config_item_type' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='67' column='1' id='d6939bb8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ct_item_ops' type-id='603e39d9' visibility='default' filepath='include/linux/configfs.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ct_group_ops' type-id='e8051adb' visibility='default' filepath='include/linux/configfs.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ct_attrs' type-id='bbec9157' visibility='default' filepath='include/linux/configfs.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ct_bin_attrs' type-id='07234631' visibility='default' filepath='include/linux/configfs.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_item_operations' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='212' column='1' id='a60315e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='62924a52' visibility='default' filepath='include/linux/configfs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='allow_link' type-id='dbb91d59' visibility='default' filepath='include/linux/configfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drop_link' type-id='63faaa44' visibility='default' filepath='include/linux/configfs.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_group_operations' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='218' column='1' id='6d5a1dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='make_item' type-id='263d54b5' visibility='default' filepath='include/linux/configfs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='make_group' type-id='45c2a1d1' visibility='default' filepath='include/linux/configfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit_item' type-id='d841f43f' visibility='default' filepath='include/linux/configfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect_notify' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='drop_item' type-id='ee7d45c8' visibility='default' filepath='include/linux/configfs.h' line='223' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_attribute' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='117' column='1' id='5f2e9b8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ca_name' type-id='80f4b756' visibility='default' filepath='include/linux/configfs.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ca_owner' type-id='2730d015' visibility='default' filepath='include/linux/configfs.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ca_mode' type-id='2594b00f' visibility='default' filepath='include/linux/configfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='show' type-id='03385b06' visibility='default' filepath='include/linux/configfs.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='store' type-id='f2e3940a' visibility='default' filepath='include/linux/configfs.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='configfs_bin_attribute' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/configfs.h' line='153' column='1' id='77d12c79'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cb_attr' type-id='5f2e9b8f' visibility='default' filepath='include/linux/configfs.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/configfs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cb_max_size' type-id='b59d7dce' visibility='default' filepath='include/linux/configfs.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write' type-id='8d4ac8c3' visibility='default' filepath='include/linux/configfs.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f05eea43' size-in-bits='64' id='97aff453'/>
+      <pointer-type-def type-id='18ab9185' size-in-bits='64' id='45c2a1d1'/>
+      <pointer-type-def type-id='79236ccf' size-in-bits='64' id='7a29ff27'/>
+      <pointer-type-def type-id='34f1eb39' size-in-bits='64' id='263d54b5'/>
+      <pointer-type-def type-id='5f2e9b8f' size-in-bits='64' id='32db1b87'/>
+      <pointer-type-def type-id='32db1b87' size-in-bits='64' id='bbec9157'/>
+      <pointer-type-def type-id='77d12c79' size-in-bits='64' id='9bdc8381'/>
+      <pointer-type-def type-id='9bdc8381' size-in-bits='64' id='07234631'/>
+      <pointer-type-def type-id='6d5a1dab' size-in-bits='64' id='e8051adb'/>
+      <pointer-type-def type-id='a60315e1' size-in-bits='64' id='603e39d9'/>
+      <pointer-type-def type-id='4bdc1a8c' size-in-bits='64' id='598755ca'/>
+      <qualified-type-def type-id='d6939bb8' const='yes' id='d88ac15d'/>
+      <pointer-type-def type-id='d88ac15d' size-in-bits='64' id='596e8e55'/>
+      <pointer-type-def type-id='72ce0fb3' size-in-bits='64' id='d841f43f'/>
+      <pointer-type-def type-id='8b1bf035' size-in-bits='64' id='dbb91d59'/>
+      <pointer-type-def type-id='7f00154c' size-in-bits='64' id='03385b06'/>
+      <pointer-type-def type-id='0bb075d8' size-in-bits='64' id='f2e3940a'/>
+      <pointer-type-def type-id='baf016ef' size-in-bits='64' id='8d4ac8c3'/>
+      <pointer-type-def type-id='0f872816' size-in-bits='64' id='ee7d45c8'/>
+      <pointer-type-def type-id='d724f4d0' size-in-bits='64' id='62924a52'/>
+      <pointer-type-def type-id='e29a2892' size-in-bits='64' id='63faaa44'/>
+      <function-decl name='config_item_put' mangled-name='config_item_put' filepath='fs/configfs/item.c' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_item_put'>
+        <parameter type-id='7a29ff27' name='item' filepath='fs/configfs/item.c' line='148' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='config_group_init_type_name' mangled-name='config_group_init_type_name' filepath='fs/configfs/item.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='config_group_init_type_name'>
+        <parameter type-id='97aff453' name='group' filepath='fs/configfs/item.c' line='94' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/configfs/item.c' line='94' column='1'/>
+        <parameter type-id='596e8e55' name='type' filepath='fs/configfs/item.c' line='95' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='18ab9185'>
+        <parameter type-id='97aff453'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='97aff453'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34f1eb39'>
+        <parameter type-id='97aff453'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='7a29ff27'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72ce0fb3'>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b1bf035'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f00154c'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0bb075d8'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='baf016ef'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f872816'>
+        <parameter type-id='97aff453'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d724f4d0'>
+        <parameter type-id='7a29ff27' name='item'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e29a2892'>
+        <parameter type-id='7a29ff27'/>
+        <parameter type-id='7a29ff27'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/dcache.c' language='LANG_C89'>
+      <function-decl name='d_splice_alias' mangled-name='d_splice_alias' filepath='fs/dcache.c' line='3000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_splice_alias'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='3000' column='1'/>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='3000' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='dput' mangled-name='dput' filepath='fs/dcache.c' line='840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dput'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='840' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_instantiate' mangled-name='d_instantiate' filepath='fs/dcache.c' line='1950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_instantiate'>
+        <parameter type-id='27675065' name='entry' filepath='fs/dcache.c' line='1950' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='1950' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_make_root' mangled-name='d_make_root' filepath='fs/dcache.c' line='1984' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_make_root'>
+        <parameter type-id='7e666abe' name='root_inode' filepath='fs/dcache.c' line='1984' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_find_alias' mangled-name='d_find_alias' filepath='fs/dcache.c' line='1006' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_find_alias'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='1006' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_move' mangled-name='d_move' filepath='fs/dcache.c' line='2893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_move'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='2893' column='1'/>
+        <parameter type-id='27675065' name='target' filepath='fs/dcache.c' line='2893' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_obtain_alias' mangled-name='d_obtain_alias' filepath='fs/dcache.c' line='2090' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_obtain_alias'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2090' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='d_drop' mangled-name='d_drop' filepath='fs/dcache.c' line='504' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_drop'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='504' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='d_add_ci' mangled-name='d_add_ci' filepath='fs/dcache.c' line='2133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='d_add_ci'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/dcache.c' line='2133' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/dcache.c' line='2133' column='1'/>
+        <parameter type-id='b316d9a3' name='name' filepath='fs/dcache.c' line='2134' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <pointer-type-def type-id='02244303' size-in-bits='64' id='b316d9a3'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/debugfs/file.c' language='LANG_C89'>
+      <class-decl name='debugfs_regset32' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/debugfs.h' line='34' column='1' id='f01e85cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='ec73f122' visibility='default' filepath='include/linux/debugfs.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nregs' type-id='95e97e5e' visibility='default' filepath='include/linux/debugfs.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/debugfs.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='debugfs_reg32' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/debugfs.h' line='29' column='1' id='8b6b6ef7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/debugfs.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='7359adad' visibility='default' filepath='include/linux/debugfs.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8b6b6ef7' const='yes' id='f0f807bc'/>
+      <pointer-type-def type-id='f0f807bc' size-in-bits='64' id='ec73f122'/>
+      <pointer-type-def type-id='f01e85cf' size-in-bits='64' id='62fa2ea7'/>
+      <function-decl name='debugfs_create_x32' mangled-name='debugfs_create_x32' filepath='fs/debugfs/file.c' line='716' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_x32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='716' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='716' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='717' column='1'/>
+        <parameter type-id='f9409001' name='value' filepath='fs/debugfs/file.c' line='717' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_attr_read' mangled-name='debugfs_attr_read' filepath='fs/debugfs/file.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_attr_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/debugfs/file.c' line='365' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/debugfs/file.c' line='365' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/debugfs/file.c' line='366' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/debugfs/file.c' line='366' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='debugfs_attr_write' mangled-name='debugfs_attr_write' filepath='fs/debugfs/file.c' line='380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_attr_write'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/debugfs/file.c' line='380' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='fs/debugfs/file.c' line='380' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/debugfs/file.c' line='381' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/debugfs/file.c' line='381' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='debugfs_create_u64' mangled-name='debugfs_create_u64' filepath='fs/debugfs/file.c' line='586' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_u64'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='586' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='586' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='587' column='1'/>
+        <parameter type-id='3df9fd28' name='value' filepath='fs/debugfs/file.c' line='587' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_u32' mangled-name='debugfs_create_u32' filepath='fs/debugfs/file.c' line='540' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_u32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='540' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='540' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='541' column='1'/>
+        <parameter type-id='f9409001' name='value' filepath='fs/debugfs/file.c' line='541' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_size_t' mangled-name='debugfs_create_size_t' filepath='fs/debugfs/file.c' line='768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_size_t'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='768' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='768' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='769' column='1'/>
+        <parameter type-id='78c01427' name='value' filepath='fs/debugfs/file.c' line='769' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_regset32' mangled-name='debugfs_create_regset32' filepath='fs/debugfs/file.c' line='1146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_regset32'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='1146' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='1146' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='1147' column='1'/>
+        <parameter type-id='62fa2ea7' name='regset' filepath='fs/debugfs/file.c' line='1148' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_bool' mangled-name='debugfs_create_bool' filepath='fs/debugfs/file.c' line='901' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_bool'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/file.c' line='901' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/file.c' line='901' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/file.c' line='902' column='1'/>
+        <parameter type-id='d8e6b335' name='value' filepath='fs/debugfs/file.c' line='902' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/debugfs/inode.c' language='LANG_C89'>
+      <function-decl name='debugfs_remove_recursive' mangled-name='debugfs_remove_recursive' filepath='fs/debugfs/inode.c' line='758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove_recursive'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/debugfs/inode.c' line='758' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='debugfs_create_dir' mangled-name='debugfs_create_dir' filepath='fs/debugfs/inode.c' line='550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_dir'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/inode.c' line='550' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/inode.c' line='550' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_remove' mangled-name='debugfs_remove' filepath='fs/debugfs/inode.c' line='728' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_remove'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/debugfs/inode.c' line='728' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='debugfs_initialized' mangled-name='debugfs_initialized' filepath='fs/debugfs/inode.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_initialized'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='debugfs_create_symlink' mangled-name='debugfs_create_symlink' filepath='fs/debugfs/inode.c' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_symlink'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/inode.c' line='643' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/inode.c' line='643' column='1'/>
+        <parameter type-id='80f4b756' name='target' filepath='fs/debugfs/inode.c' line='644' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_file_unsafe' mangled-name='debugfs_create_file_unsafe' filepath='fs/debugfs/inode.c' line='478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_file_unsafe'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/inode.c' line='478' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/inode.c' line='478' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/inode.c' line='479' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/debugfs/inode.c' line='479' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/debugfs/inode.c' line='480' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='debugfs_create_file' mangled-name='debugfs_create_file' filepath='fs/debugfs/inode.c' line='439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='debugfs_create_file'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/debugfs/inode.c' line='439' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/debugfs/inode.c' line='439' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='fs/debugfs/inode.c' line='440' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/debugfs/inode.c' line='440' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='fs/debugfs/inode.c' line='441' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/direct-io.c' language='LANG_C89'>
+      <typedef-decl name='dio_iodone_t' type-id='7702511a' filepath='include/linux/fs.h' line='94' column='1' id='4904ecea'/>
+      <typedef-decl name='dio_submit_t' type-id='6d229cce' filepath='include/linux/fs.h' line='3258' column='1' id='27d499b2'/>
+      <pointer-type-def type-id='4904ecea' size-in-bits='64' id='f0934dcb'/>
+      <pointer-type-def type-id='27d499b2' size-in-bits='64' id='13e0bcaf'/>
+      <function-decl name='__blockdev_direct_IO' mangled-name='__blockdev_direct_IO' filepath='fs/direct-io.c' line='1408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__blockdev_direct_IO'>
+        <parameter type-id='80f25feb' name='iocb' filepath='fs/direct-io.c' line='1408' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/direct-io.c' line='1408' column='1'/>
+        <parameter type-id='b88dd945' name='bdev' filepath='fs/direct-io.c' line='1409' column='1'/>
+        <parameter type-id='4fa10f9e' name='iter' filepath='fs/direct-io.c' line='1409' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/direct-io.c' line='1410' column='1'/>
+        <parameter type-id='f0934dcb' name='end_io' filepath='fs/direct-io.c' line='1411' column='1'/>
+        <parameter type-id='13e0bcaf' name='submit_io' filepath='fs/direct-io.c' line='1411' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/direct-io.c' line='1412' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7702511a'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d229cce'>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='f2b4d088' size-in-bits='64' id='4fa10f9e'/>
+      <pointer-type-def type-id='da62d64b' size-in-bits='64' id='80f25feb'/>
+      <class-decl name='kiocb' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='326' column='1' id='da62d64b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ki_filp' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ki_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ki_complete' type-id='9b28bd76' visibility='default' filepath='include/linux/fs.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ki_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ki_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='ki_ioprio' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ki_cookie' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='338' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d647b094' size-in-bits='64' id='9b28bd76'/>
+      <function-type size-in-bits='64' id='d647b094'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/exec.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='77e79a4b' size-in-bits='4096' id='d2c516bd'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </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='ff35cfe1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_fds' type-id='f0981eeb' 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='229806b3' 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='1d2c2b85' 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='1d2c2b85' 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='1d2c2b85' 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='e3d8ce29' visibility='default' filepath='include/linux/fdtable.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='80f4b756' const='yes' id='b99c00c9'/>
+      <pointer-type-def type-id='b99c00c9' size-in-bits='64' id='13956559'/>
+      <pointer-type-def type-id='ff35cfe1' size-in-bits='64' id='02b857a9'/>
+      <pointer-type-def type-id='77e79a4b' size-in-bits='64' id='229806b3'/>
+      <function-decl name='__get_task_comm' mangled-name='__get_task_comm' filepath='fs/exec.c' line='1254' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__get_task_comm'>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/exec.c' line='1254' column='1'/>
+        <parameter type-id='b59d7dce' name='buf_size' filepath='fs/exec.c' line='1254' column='1'/>
+        <parameter type-id='f23e2572' name='tsk' filepath='fs/exec.c' line='1254' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='prepare_binprm' mangled-name='prepare_binprm' filepath='fs/exec.c' line='1603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_binprm'>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='1603' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='search_binary_handler' mangled-name='search_binary_handler' filepath='fs/exec.c' line='1667' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='search_binary_handler'>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='1667' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='would_dump' mangled-name='would_dump' filepath='fs/exec.c' line='1341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='would_dump'>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='1341' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/exec.c' line='1341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_binfmt' mangled-name='unregister_binfmt' filepath='fs/exec.c' line='94' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_binfmt'>
+        <parameter type-id='7cc59444' name='fmt' filepath='fs/exec.c' line='94' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remove_arg_zero' mangled-name='remove_arg_zero' filepath='fs/exec.c' line='1627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_arg_zero'>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='1627' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='open_exec' mangled-name='open_exec' filepath='fs/exec.c' line='883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='open_exec'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/exec.c' line='883' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='copy_strings_kernel' mangled-name='copy_strings_kernel' filepath='fs/exec.c' line='595' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='copy_strings_kernel'>
+        <parameter type-id='95e97e5e' name='argc' filepath='fs/exec.c' line='595' column='1'/>
+        <parameter type-id='13956559' name='__argv' filepath='fs/exec.c' line='595' column='1'/>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='596' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bprm_change_interp' mangled-name='bprm_change_interp' filepath='fs/exec.c' line='1467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bprm_change_interp'>
+        <parameter type-id='80f4b756' name='interp' filepath='fs/exec.c' line='1467' column='1'/>
+        <parameter type-id='8912440a' name='bprm' filepath='fs/exec.c' line='1467' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__register_binfmt' mangled-name='__register_binfmt' filepath='fs/exec.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__register_binfmt'>
+        <parameter type-id='7cc59444' name='fmt' filepath='fs/exec.c' line='81' column='1'/>
+        <parameter type-id='95e97e5e' name='insert' filepath='fs/exec.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='2376c3ec' size-in-bits='64' id='8912440a'/>
+      <class-decl name='linux_binprm' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='17' column='1' id='2376c3ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/binfmts.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vma_pages' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/binfmts.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='p' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='argmin' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='called_set_creds' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='cap_elevated' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='secureexec' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='called_exec_mmap' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='recursion_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cred' type-id='10cfb911' visibility='default' filepath='include/linux/binfmts.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unsafe' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='per_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='argc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='envc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='interp' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interp_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='interp_data' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='loader' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='exec' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rlim_stack' type-id='60dcbf6c' visibility='default' filepath='include/linux/binfmts.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='buf' type-id='d1617432' visibility='default' filepath='include/linux/binfmts.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2048' id='d1617432'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <pointer-type-def type-id='6739dd09' size-in-bits='64' id='10cfb911'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/fcntl.c' language='LANG_C89'>
+      <pointer-type-def type-id='5bb9c75d' size-in-bits='64' id='dc750055'/>
+      <function-decl name='kill_fasync' mangled-name='kill_fasync' filepath='fs/fcntl.c' line='1017' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_fasync'>
+        <parameter type-id='dc750055' name='fp' filepath='fs/fcntl.c' line='1017' column='1'/>
+        <parameter type-id='95e97e5e' name='sig' filepath='fs/fcntl.c' line='1017' column='1'/>
+        <parameter type-id='95e97e5e' name='band' filepath='fs/fcntl.c' line='1017' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='fasync_helper' mangled-name='fasync_helper' filepath='fs/fcntl.c' line='980' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fasync_helper'>
+        <parameter type-id='95e97e5e' name='fd' filepath='fs/fcntl.c' line='980' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/fcntl.c' line='980' column='1'/>
+        <parameter type-id='95e97e5e' name='on' filepath='fs/fcntl.c' line='980' column='1'/>
+        <parameter type-id='dc750055' name='fapp' filepath='fs/fcntl.c' line='980' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/file.c' language='LANG_C89'>
+      <pointer-type-def type-id='8b73b897' size-in-bits='64' id='d092647b'/>
+      <function-decl name='__close_fd' mangled-name='__close_fd' filepath='fs/file.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__close_fd'>
+        <parameter type-id='16c53416' name='files' filepath='fs/file.c' line='621' column='1'/>
+        <parameter type-id='f0981eeb' name='fd' filepath='fs/file.c' line='621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='f0981eeb' name='fd' filepath='fs/file.c' line='557' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iterate_fd' mangled-name='iterate_fd' filepath='fs/file.c' line='1000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iterate_fd'>
+        <parameter type-id='16c53416' name='files' filepath='fs/file.c' line='1000' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='fs/file.c' line='1000' column='1'/>
+        <parameter type-id='d092647b' name='f' filepath='fs/file.c' line='1001' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='fs/file.c' line='1002' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='f0981eeb' name='flags' filepath='fs/file.c' line='543' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='fget' mangled-name='fget' filepath='fs/file.c' line='741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fget'>
+        <parameter type-id='f0981eeb' name='fd' filepath='fs/file.c' line='741' column='1'/>
+        <return type-id='77e79a4b'/>
+      </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='f0981eeb' name='fd' filepath='fs/file.c' line='611' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/file.c' line='611' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8b73b897'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/file_table.c' language='LANG_C89'>
+      <function-decl name='fput' mangled-name='fput' filepath='fs/file_table.c' line='356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fput'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/file_table.c' line='356' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/filesystems.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='128' id='8d43b1f5'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <class-decl name='fs_parameter_spec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='47' column='1' id='077208d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs_parser.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='type' type-id='ef73e3d4' visibility='default' filepath='include/linux/fs_parser.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs_parser.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_parameter_type' filepath='include/linux/fs_parser.h' line='23' column='1' id='ef73e3d4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__fs_param_wasnt_defined' value='0'/>
+        <enumerator name='fs_param_is_flag' value='1'/>
+        <enumerator name='fs_param_is_bool' value='2'/>
+        <enumerator name='fs_param_is_u32' value='3'/>
+        <enumerator name='fs_param_is_u32_octal' value='4'/>
+        <enumerator name='fs_param_is_u32_hex' value='5'/>
+        <enumerator name='fs_param_is_s32' value='6'/>
+        <enumerator name='fs_param_is_u64' value='7'/>
+        <enumerator name='fs_param_is_enum' value='8'/>
+        <enumerator name='fs_param_is_string' value='9'/>
+        <enumerator name='fs_param_is_blob' value='10'/>
+        <enumerator name='fs_param_is_blockdev' value='11'/>
+        <enumerator name='fs_param_is_path' value='12'/>
+        <enumerator name='fs_param_is_fd' value='13'/>
+        <enumerator name='nr__fs_parameter_type' value='14'/>
+      </enum-decl>
+      <class-decl name='fs_parameter_enum' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='58' column='1' id='1a71e14e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='name' type-id='f01a039e' visibility='default' filepath='include/linux/fs_parser.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='value' type-id='f9b06939' visibility='default' filepath='include/linux/fs_parser.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1a71e14e' const='yes' id='e76b9b35'/>
+      <pointer-type-def type-id='e76b9b35' size-in-bits='64' id='6d6531cd'/>
+      <qualified-type-def type-id='077208d0' const='yes' id='a6f56593'/>
+      <pointer-type-def type-id='a6f56593' size-in-bits='64' id='8d4f223b'/>
+      <function-decl name='register_filesystem' mangled-name='register_filesystem' filepath='fs/filesystems.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_filesystem'>
+        <parameter type-id='21e53d44' name='fs' filepath='fs/filesystems.c' line='72' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_filesystem' mangled-name='unregister_filesystem' filepath='fs/filesystems.c' line='107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_filesystem'>
+        <parameter type-id='21e53d44' name='fs' filepath='fs/filesystems.c' line='107' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/fs-writeback.c' language='LANG_C89'>
+      <function-decl name='__mark_inode_dirty' mangled-name='__mark_inode_dirty' filepath='fs/fs-writeback.c' line='2231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mark_inode_dirty'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/fs-writeback.c' line='2231' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/fs-writeback.c' line='2231' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='write_inode_now' mangled-name='write_inode_now' filepath='fs/fs-writeback.c' line='2558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='write_inode_now'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/fs-writeback.c' line='2558' column='1'/>
+        <parameter type-id='95e97e5e' name='sync' filepath='fs/fs-writeback.c' line='2558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/fs_context.c' language='LANG_C89'>
+      <function-decl name='logfc' mangled-name='logfc' filepath='fs/fs_context.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='logfc'>
+        <parameter type-id='5760dcb0' name='fc' filepath='fs/fs_context.c' line='388' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='fs/fs_context.c' line='388' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='8d0295a2' size-in-bits='64' id='5760dcb0'/>
+      <class-decl name='fs_context' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='86' column='1' id='8d0295a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='7536fa28' visibility='default' filepath='include/linux/fs_context.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapi_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs_context.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fs_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs_context.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fs_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sget_key' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='root' type-id='27675065' visibility='default' filepath='include/linux/fs_context.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs_context.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/fs_context.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs_context.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='log' type-id='d1a78aeb' visibility='default' filepath='include/linux/fs_context.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sb_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sb_flags_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='s_iflags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lsm_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='purpose' type-id='4171a6be' visibility='default' filepath='include/linux/fs_context.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='phase' type-id='de54989f' visibility='default' filepath='include/linux/fs_context.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='need_free' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='global' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='4b1c1612' size-in-bits='64' id='7536fa28'/>
+      <enum-decl name='fs_context_phase' filepath='include/linux/fs_context.h' line='38' column='1' id='de54989f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_CREATE_PARAMS' value='0'/>
+        <enumerator name='FS_CONTEXT_CREATING' value='1'/>
+        <enumerator name='FS_CONTEXT_AWAITING_MOUNT' value='2'/>
+        <enumerator name='FS_CONTEXT_AWAITING_RECONF' value='3'/>
+        <enumerator name='FS_CONTEXT_RECONF_PARAMS' value='4'/>
+        <enumerator name='FS_CONTEXT_RECONFIGURING' value='5'/>
+        <enumerator name='FS_CONTEXT_FAILED' value='6'/>
+      </enum-decl>
+      <enum-decl name='fs_context_purpose' filepath='include/linux/fs_context.h' line='29' column='1' id='4171a6be'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_FOR_MOUNT' value='0'/>
+        <enumerator name='FS_CONTEXT_FOR_SUBMOUNT' value='1'/>
+        <enumerator name='FS_CONTEXT_FOR_RECONFIGURE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='fb4c7dfb' size-in-bits='64' id='d1a78aeb'/>
+      <class-decl name='fc_log' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='177' column='1' id='fb4c7dfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/fs_context.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='head' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='tail' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='need_free' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs_context.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='460b55b1' visibility='default' filepath='include/linux/fs_context.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d2bd1e05' const='yes' id='4b1c1612'/>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='512' id='460b55b1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='fs_context_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='110' column='1' id='d2bd1e05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='18811e61' visibility='default' filepath='include/linux/fs_context.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dup' type-id='0177caaf' visibility='default' filepath='include/linux/fs_context.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parse_param' type-id='7af12c47' visibility='default' filepath='include/linux/fs_context.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parse_monolithic' type-id='33c348f4' visibility='default' filepath='include/linux/fs_context.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_tree' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reconfigure' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='135a5d4b' size-in-bits='64' id='0177caaf'/>
+      <pointer-type-def type-id='c44bfbeb' size-in-bits='64' id='7af12c47'/>
+      <pointer-type-def type-id='91015ee2' size-in-bits='64' id='33c348f4'/>
+      <pointer-type-def type-id='41f25325' size-in-bits='64' id='18811e61'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/fs_types.c' language='LANG_C89'>
+      <function-decl name='fs_ftype_to_dtype' mangled-name='fs_ftype_to_dtype' filepath='fs/fs_types.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fs_ftype_to_dtype'>
+        <parameter type-id='f0981eeb' name='filetype' filepath='fs/fs_types.c' line='37' column='1'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/inode.c' language='LANG_C89'>
+      <typedef-decl name='ino_t' type-id='4e22818f' filepath='include/linux/types.h' line='17' column='1' id='2aa75eef'/>
+      <typedef-decl name='__kernel_ino_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='20' column='1' id='4e22818f'/>
+      <pointer-type-def type-id='805f2c4a' size-in-bits='64' id='1b7a05dc'/>
+      <function-decl name='get_next_ino' mangled-name='get_next_ino' filepath='fs/inode.c' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_next_ino'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='iunique' mangled-name='iunique' filepath='fs/inode.c' line='1273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iunique'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1273' column='1'/>
+        <parameter type-id='2aa75eef' name='max_reserved' filepath='fs/inode.c' line='1273' column='1'/>
+        <return type-id='2aa75eef'/>
+      </function-decl>
+      <function-decl name='iput' mangled-name='iput' filepath='fs/inode.c' line='1584' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iput'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='1584' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='new_inode' mangled-name='new_inode' filepath='fs/inode.c' line='951' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='new_inode'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='951' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='current_time' mangled-name='current_time' filepath='fs/inode.c' line='2228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='current_time'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='2228' column='1'/>
+        <return type-id='40a816ad'/>
+      </function-decl>
+      <function-decl name='igrab' mangled-name='igrab' filepath='fs/inode.c' line='1296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='igrab'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='1296' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='clear_inode' mangled-name='clear_inode' filepath='fs/inode.c' line='522' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clear_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='522' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__insert_inode_hash' mangled-name='__insert_inode_hash' filepath='fs/inode.c' line='494' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__insert_inode_hash'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='494' column='1'/>
+        <parameter type-id='7359adad' name='hashval' filepath='fs/inode.c' line='494' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unlock_new_inode' mangled-name='unlock_new_inode' filepath='fs/inode.c' line='992' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_new_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='992' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_nlink' mangled-name='set_nlink' filepath='fs/inode.c' line='335' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_nlink'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='335' column='1'/>
+        <parameter type-id='f0981eeb' name='nlink' filepath='fs/inode.c' line='335' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inode_nohighmem' mangled-name='inode_nohighmem' filepath='fs/inode.c' line='2157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_nohighmem'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='2157' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inode_init_once' mangled-name='inode_init_once' filepath='fs/inode.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inode_init_once'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='389' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='init_special_inode' mangled-name='init_special_inode' filepath='fs/inode.c' line='2033' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_special_inode'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='2033' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/inode.c' line='2033' column='1'/>
+        <parameter type-id='8504f260' name='rdev' filepath='fs/inode.c' line='2033' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inc_nlink' mangled-name='inc_nlink' filepath='fs/inode.c' line='357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inc_nlink'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='357' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ilookup' mangled-name='ilookup' filepath='fs/inode.c' line='1387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ilookup'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1387' column='1'/>
+        <parameter type-id='7359adad' name='ino' filepath='fs/inode.c' line='1387' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='ihold' mangled-name='ihold' filepath='fs/inode.c' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ihold'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='420' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='iget_locked' mangled-name='iget_locked' filepath='fs/inode.c' line='1174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget_locked'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1174' column='1'/>
+        <parameter type-id='7359adad' name='ino' filepath='fs/inode.c' line='1174' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='iget5_locked' mangled-name='iget5_locked' filepath='fs/inode.c' line='1141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iget5_locked'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/inode.c' line='1141' column='1'/>
+        <parameter type-id='7359adad' name='hashval' filepath='fs/inode.c' line='1141' column='1'/>
+        <parameter type-id='1b7a05dc' name='test' filepath='fs/inode.c' line='1142' column='1'/>
+        <parameter type-id='1b7a05dc' name='set' filepath='fs/inode.c' line='1143' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/inode.c' line='1143' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='drop_nlink' mangled-name='drop_nlink' filepath='fs/inode.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drop_nlink'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='301' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='clear_nlink' mangled-name='clear_nlink' filepath='fs/inode.c' line='318' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clear_nlink'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='318' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bmap' mangled-name='bmap' filepath='fs/inode.c' line='1618' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bmap'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='1618' column='1'/>
+        <parameter type-id='5c39fc92' name='block' filepath='fs/inode.c' line='1618' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__remove_inode_hash' mangled-name='__remove_inode_hash' filepath='fs/inode.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__remove_inode_hash'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/inode.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='805f2c4a'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='a42536cd' size-in-bits='64' id='5c39fc92'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/kernfs/dir.c' language='LANG_C89'>
+      <class-decl name='simple_xattrs' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='70' column='1' id='00ed5110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/linux/xattr.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xattr.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='kernfs_put' mangled-name='kernfs_put' filepath='fs/kernfs/dir.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_put'>
+        <parameter type-id='150efd3f' name='kn' filepath='fs/kernfs/dir.c' line='506' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernfs_find_and_get_ns' mangled-name='kernfs_find_and_get_ns' filepath='fs/kernfs/dir.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_find_and_get_ns'>
+        <parameter type-id='150efd3f' name='parent' filepath='fs/kernfs/dir.c' line='906' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/kernfs/dir.c' line='907' column='1'/>
+        <parameter type-id='eaa32e2f' name='ns' filepath='fs/kernfs/dir.c' line='907' column='1'/>
+        <return type-id='150efd3f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/kernfs/file.c' language='LANG_C89'>
+      <function-decl name='kernfs_notify' mangled-name='kernfs_notify' filepath='fs/kernfs/file.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernfs_notify'>
+        <parameter type-id='150efd3f' name='kn' filepath='fs/kernfs/file.c' line='931' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/libfs.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='256' id='5d4602e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='tree_descr' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='3437' column='1' id='3f4c2b2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='3437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='3437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='3437' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pseudo_fs_context' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/pseudo_fs.h' line='6' column='1' id='01ded187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='f7c6dcac' visibility='default' filepath='include/linux/pseudo_fs.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/pseudo_fs.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dops' type-id='1ee57353' visibility='default' filepath='include/linux/pseudo_fs.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='magic' type-id='7359adad' visibility='default' filepath='include/linux/pseudo_fs.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='3f4c2b2f' const='yes' id='dc1327b2'/>
+      <pointer-type-def type-id='dc1327b2' size-in-bits='64' id='0a275448'/>
+      <pointer-type-def type-id='5049bff3' size-in-bits='64' id='14a7c87f'/>
+      <pointer-type-def type-id='cba59087' size-in-bits='64' id='0fb09eeb'/>
+      <pointer-type-def type-id='92892da6' size-in-bits='64' id='dffc7428'/>
+      <pointer-type-def type-id='01ded187' size-in-bits='64' id='79f85ebf'/>
+      <pointer-type-def type-id='549da823' size-in-bits='64' id='3d2f862b'/>
+      <function-decl name='simple_attr_open' mangled-name='simple_attr_open' filepath='fs/libfs.c' line='820' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='820' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='820' column='1'/>
+        <parameter type-id='dffc7428' name='get' filepath='fs/libfs.c' line='821' column='1'/>
+        <parameter type-id='0fb09eeb' name='set' filepath='fs/libfs.c' line='821' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='fs/libfs.c' line='822' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='alloc_anon_inode' mangled-name='alloc_anon_inode' filepath='fs/libfs.c' line='1147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_anon_inode'>
+        <parameter type-id='42c8f564' name='s' filepath='fs/libfs.c' line='1147' column='1'/>
+        <return type-id='7e666abe'/>
+      </function-decl>
+      <function-decl name='simple_fill_super' mangled-name='simple_fill_super' filepath='fs/libfs.c' line='534' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_fill_super'>
+        <parameter type-id='42c8f564' name='s' filepath='fs/libfs.c' line='534' column='1'/>
+        <parameter type-id='7359adad' name='magic' filepath='fs/libfs.c' line='534' column='1'/>
+        <parameter type-id='0a275448' name='files' filepath='fs/libfs.c' line='535' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_write_to_buffer' mangled-name='simple_write_to_buffer' filepath='fs/libfs.c' line='682' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_write_to_buffer'>
+        <parameter type-id='eaa32e2f' name='to' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='b59d7dce' name='available' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='682' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='fs/libfs.c' line='683' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/libfs.c' line='683' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_statfs' mangled-name='simple_statfs' filepath='fs/libfs.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_statfs'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/libfs.c' line='39' column='1'/>
+        <parameter type-id='087d687b' name='buf' filepath='fs/libfs.c' line='39' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_release_fs' mangled-name='simple_release_fs' filepath='fs/libfs.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_release_fs'>
+        <parameter type-id='3d2f862b' name='mount' filepath='fs/libfs.c' line='621' column='1'/>
+        <parameter type-id='7292109c' name='count' filepath='fs/libfs.c' line='621' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='simple_read_from_buffer' mangled-name='simple_read_from_buffer' filepath='fs/libfs.c' line='647' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_read_from_buffer'>
+        <parameter type-id='eaa32e2f' name='to' filepath='fs/libfs.c' line='647' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/libfs.c' line='647' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='647' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='fs/libfs.c' line='648' column='1'/>
+        <parameter type-id='b59d7dce' name='available' filepath='fs/libfs.c' line='648' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_pin_fs' mangled-name='simple_pin_fs' filepath='fs/libfs.c' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_pin_fs'>
+        <parameter type-id='21e53d44' name='type' filepath='fs/libfs.c' line='600' column='1'/>
+        <parameter type-id='3d2f862b' name='mount' filepath='fs/libfs.c' line='600' column='1'/>
+        <parameter type-id='7292109c' name='count' filepath='fs/libfs.c' line='600' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_open' mangled-name='simple_open' filepath='fs/libfs.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='315' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='315' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_get_link' mangled-name='simple_get_link' filepath='fs/libfs.c' line='1208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_get_link'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/libfs.c' line='1208' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='1208' column='1'/>
+        <parameter type-id='26cad514' name='done' filepath='fs/libfs.c' line='1209' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='generic_read_dir' mangled-name='generic_read_dir' filepath='fs/libfs.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_read_dir'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='b59d7dce' name='siz' filepath='fs/libfs.c' line='223' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='223' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_attr_write' mangled-name='simple_attr_write' filepath='fs/libfs.c' line='888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_write'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='888' column='1'/>
+        <parameter type-id='80f4b756' name='buf' filepath='fs/libfs.c' line='888' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/libfs.c' line='889' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='889' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='simple_attr_release' mangled-name='simple_attr_release' filepath='fs/libfs.c' line='842' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/libfs.c' line='842' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='842' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_attr_read' mangled-name='simple_attr_read' filepath='fs/libfs.c' line='850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_attr_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='850' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/libfs.c' line='850' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/libfs.c' line='851' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='851' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='memory_read_from_buffer' mangled-name='memory_read_from_buffer' filepath='fs/libfs.c' line='717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memory_read_from_buffer'>
+        <parameter type-id='eaa32e2f' name='to' filepath='fs/libfs.c' line='717' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='fs/libfs.c' line='717' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/libfs.c' line='717' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='fs/libfs.c' line='718' column='1'/>
+        <parameter type-id='b59d7dce' name='available' filepath='fs/libfs.c' line='718' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='init_pseudo' mangled-name='init_pseudo' filepath='fs/libfs.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_pseudo'>
+        <parameter type-id='5760dcb0' name='fc' filepath='fs/libfs.c' line='298' column='1'/>
+        <parameter type-id='7359adad' name='magic' filepath='fs/libfs.c' line='299' column='1'/>
+        <return type-id='79f85ebf'/>
+      </function-decl>
+      <function-decl name='generic_file_fsync' mangled-name='generic_file_fsync' filepath='fs/libfs.c' line='1041' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_fsync'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='fs/libfs.c' line='1041' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/libfs.c' line='1042' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_fh_to_parent' mangled-name='generic_fh_to_parent' filepath='fs/libfs.c' line='967' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fh_to_parent'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/libfs.c' line='967' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='967' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='968' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='968' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='968' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='generic_fh_to_dentry' mangled-name='generic_fh_to_dentry' filepath='fs/libfs.c' line='934' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fh_to_dentry'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/libfs.c' line='934' column='1'/>
+        <parameter type-id='f7d748c2' name='fid' filepath='fs/libfs.c' line='934' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_len' filepath='fs/libfs.c' line='935' column='1'/>
+        <parameter type-id='95e97e5e' name='fh_type' filepath='fs/libfs.c' line='935' column='1'/>
+        <parameter type-id='14a7c87f' name='get_inode' filepath='fs/libfs.c' line='935' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <pointer-type-def type-id='f1fbc58e' size-in-bits='64' id='26cad514'/>
+      <pointer-type-def type-id='2437c5c4' size-in-bits='64' id='f7d748c2'/>
+      <function-type size-in-bits='64' id='5049bff3'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='7e666abe'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cba59087'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92892da6'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='ff1c7c9b' size-in-bits='64' id='087d687b'/>
+      <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='f1fbc58e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='b7f9d8e6' 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='eaa32e2f' visibility='default' filepath='include/linux/delayed_call.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fid' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='113' column='1' id='2437c5c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='0394b7eb' visibility='default' filepath='include/linux/exportfs.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kstatfs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/statfs.h' line='8' column='1' id='ff1c7c9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='f_bsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f_bfree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_bavail' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_files' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_ffree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_fsid' type-id='ac895711' visibility='default' filepath='include/linux/statfs.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_namelen' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_frsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='f_flags' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='f_spare' type-id='5d4602e8' visibility='default' filepath='include/linux/statfs.h' line='20' 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='0394b7eb'>
+        <data-member access='public'>
+          <var-decl name='i32' type-id='273ef6eb' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udf' type-id='2d08566e' visibility='default' filepath='include/linux/exportfs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='d5016f6f' visibility='default' filepath='include/linux/exportfs.h' line='129' column='1'/>
+        </data-member>
+      </union-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='2d08566e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='block' type-id='19c2251e' 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='1dc6a898' 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='1dc6a898' 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='19c2251e' 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='19c2251e' 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='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='127' column='1'/>
+        </data-member>
+      </class-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='273ef6eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' 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='19c2251e' 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='19c2251e' 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='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/mpage.c' language='LANG_C89'>
+      <function-decl name='mpage_readpages' mangled-name='mpage_readpages' filepath='fs/mpage.c' line='421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_readpages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/mpage.c' line='421' column='1'/>
+        <parameter type-id='e84b031a' name='pages' filepath='fs/mpage.c' line='421' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_pages' filepath='fs/mpage.c' line='422' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/mpage.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mpage_writepages' mangled-name='mpage_writepages' filepath='fs/mpage.c' line='748' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_writepages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='fs/mpage.c' line='748' column='1'/>
+        <parameter type-id='c2c60445' name='wbc' filepath='fs/mpage.c' line='749' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/mpage.c' line='749' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mpage_readpage' mangled-name='mpage_readpage' filepath='fs/mpage.c' line='454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mpage_readpage'>
+        <parameter type-id='02f11ed4' name='page' filepath='fs/mpage.c' line='454' column='1'/>
+        <parameter type-id='05ca8778' name='get_block' filepath='fs/mpage.c' line='454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/namei.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='05438640' size-in-bits='infinite' id='a51f6b3c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='posix_acl_entry' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='18' column='1' id='05438640'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='e_tag' type-id='a2185560' visibility='default' filepath='include/linux/posix_acl.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='e_perm' type-id='8efea9e5' visibility='default' filepath='include/linux/posix_acl.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='21c0164a' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/posix_acl.h' line='21' column='1' id='21c0164a'>
+        <data-member access='public'>
+          <var-decl name='e_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/posix_acl.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='e_gid' type-id='094d8048' visibility='default' filepath='include/linux/posix_acl.h' line='23' column='1'/>
+        </data-member>
+      </union-decl>
+      <function-decl name='page_get_link' mangled-name='page_get_link' filepath='fs/namei.c' line='4851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_get_link'>
+        <parameter type-id='27675065' name='dentry' filepath='fs/namei.c' line='4851' column='1'/>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/namei.c' line='4851' column='1'/>
+        <parameter type-id='26cad514' name='callback' filepath='fs/namei.c' line='4852' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='lookup_one_len' mangled-name='lookup_one_len' filepath='fs/namei.c' line='2605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lookup_one_len'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2605' column='1'/>
+        <parameter type-id='27675065' name='base' filepath='fs/namei.c' line='2605' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='fs/namei.c' line='2605' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='kern_path' mangled-name='kern_path' filepath='fs/namei.c' line='2507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_path'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2507' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/namei.c' line='2507' column='1'/>
+        <parameter type-id='bcfe6314' name='path' filepath='fs/namei.c' line='2507' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='full_name_hash' mangled-name='full_name_hash' filepath='fs/namei.c' line='2013' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='full_name_hash'>
+        <parameter type-id='eaa32e2f' name='salt' filepath='fs/namei.c' line='2013' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/namei.c' line='2013' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='fs/namei.c' line='2013' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <pointer-type-def type-id='b5382ece' size-in-bits='64' id='bcfe6314'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/namespace.c' language='LANG_C89'>
+      <function-decl name='kern_unmount' mangled-name='kern_unmount' filepath='fs/namespace.c' line='3824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_unmount'>
+        <parameter type-id='549da823' name='mnt' filepath='fs/namespace.c' line='3824' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kern_mount' mangled-name='kern_mount' filepath='fs/namespace.c' line='3809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kern_mount'>
+        <parameter type-id='21e53d44' name='type' filepath='fs/namespace.c' line='3809' column='1'/>
+        <return type-id='549da823'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/nls/nls_base.c' language='LANG_C89'>
+      <typedef-decl name='wchar_t' type-id='1dc6a898' filepath='include/linux/nls.h' line='19' column='1' id='928221d2'/>
+      <enum-decl name='utf16_endian' filepath='include/linux/nls.h' line='41' column='1' id='11d12470'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='UTF16_HOST_ENDIAN' value='0'/>
+        <enumerator name='UTF16_LITTLE_ENDIAN' value='1'/>
+        <enumerator name='UTF16_BIG_ENDIAN' value='2'/>
+      </enum-decl>
+      <class-decl name='nls_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/nls.h' line='25' column='1' id='5a3379ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='charset' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alias' type-id='80f4b756' visibility='default' filepath='include/linux/nls.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uni2char' type-id='66ebcd54' visibility='default' filepath='include/linux/nls.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='char2uni' type-id='5201f65c' visibility='default' filepath='include/linux/nls.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='charset2lower' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='charset2upper' type-id='354f7eb9' visibility='default' filepath='include/linux/nls.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/nls.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='b084f8bb' visibility='default' filepath='include/linux/nls.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='928221d2' const='yes' id='effb3702'/>
+      <pointer-type-def type-id='effb3702' size-in-bits='64' id='f077d3f8'/>
+      <pointer-type-def type-id='4e9708ea' size-in-bits='64' id='5201f65c'/>
+      <pointer-type-def type-id='cb341b9a' size-in-bits='64' id='66ebcd54'/>
+      <pointer-type-def type-id='5a3379ab' size-in-bits='64' id='b084f8bb'/>
+      <pointer-type-def type-id='928221d2' size-in-bits='64' id='323d93c1'/>
+      <function-decl name='utf16s_to_utf8s' mangled-name='utf16s_to_utf8s' filepath='fs/nls/nls_base.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utf16s_to_utf8s'>
+        <parameter type-id='f077d3f8' name='pwcs' filepath='fs/nls/nls_base.c' line='186' column='1'/>
+        <parameter type-id='95e97e5e' name='inlen' filepath='fs/nls/nls_base.c' line='186' column='1'/>
+        <parameter type-id='11d12470' name='endian' filepath='fs/nls/nls_base.c' line='186' column='1'/>
+        <parameter type-id='8bff8096' name='s' filepath='fs/nls/nls_base.c' line='187' column='1'/>
+        <parameter type-id='95e97e5e' name='maxout' filepath='fs/nls/nls_base.c' line='187' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='utf8s_to_utf16s' mangled-name='utf8s_to_utf16s' filepath='fs/nls/nls_base.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='utf8s_to_utf16s'>
+        <parameter type-id='bbaf3419' name='s' filepath='fs/nls/nls_base.c' line='132' column='1'/>
+        <parameter type-id='95e97e5e' name='inlen' filepath='fs/nls/nls_base.c' line='132' column='1'/>
+        <parameter type-id='11d12470' name='endian' filepath='fs/nls/nls_base.c' line='132' column='1'/>
+        <parameter type-id='323d93c1' name='pwcs' filepath='fs/nls/nls_base.c' line='133' column='1'/>
+        <parameter type-id='95e97e5e' name='maxout' filepath='fs/nls/nls_base.c' line='133' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unload_nls' mangled-name='unload_nls' filepath='fs/nls/nls_base.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unload_nls'>
+        <parameter type-id='b084f8bb' name='nls' filepath='fs/nls/nls_base.c' line='296' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='load_nls_default' mangled-name='load_nls_default' filepath='fs/nls/nls_base.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='load_nls_default'>
+        <return type-id='b084f8bb'/>
+      </function-decl>
+      <function-decl name='load_nls' mangled-name='load_nls' filepath='fs/nls/nls_base.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='load_nls'>
+        <parameter type-id='26a90f95' name='charset' filepath='fs/nls/nls_base.c' line='291' column='1'/>
+        <return type-id='b084f8bb'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4e9708ea'>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='323d93c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb341b9a'>
+        <parameter type-id='928221d2'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/open.c' language='LANG_C89'>
+      <typedef-decl name='__kernel_fsid_t' type-id='b55219f8' filepath='include/uapi/asm-generic/posix_types.h' line='81' column='1' id='ac895711'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac895711' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='79' column='1' id='b55219f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='e4266c7e' visibility='default' filepath='include/uapi/asm-generic/posix_types.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1' id='9114ebb7'>
+        <data-member access='public'>
+          <var-decl name='obj' type-id='c66f5ec5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='destroy_next' type-id='994d9d61' visibility='default' filepath='include/linux/fsnotify_backend.h' line='302' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='fsnotify_connp_t' type-id='994d9d61' filepath='include/linux/fsnotify_backend.h' line='284' column='1' id='dc5fa7f0'/>
+      <pointer-type-def type-id='dc5fa7f0' size-in-bits='64' id='c66f5ec5'/>
+      <function-decl name='stream_open' mangled-name='stream_open' filepath='fs/open.c' line='1273' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stream_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/open.c' line='1273' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1273' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nonseekable_open' mangled-name='nonseekable_open' filepath='fs/open.c' line='1255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nonseekable_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/open.c' line='1255' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1255' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='generic_file_open' mangled-name='generic_file_open' filepath='fs/open.c' line='1240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_open'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/open.c' line='1240' column='1'/>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1240' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='filp_open_block' mangled-name='filp_open_block' filepath='fs/open.c' line='1068' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filp_open_block'>
+        <parameter type-id='80f4b756' name='filename' filepath='fs/open.c' line='1068' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/open.c' line='1068' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/open.c' line='1068' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-decl name='filp_close' mangled-name='filp_close' filepath='fs/open.c' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filp_close'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='1180' column='1'/>
+        <parameter type-id='bc5666d5' name='id' filepath='fs/open.c' line='1180' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='file_path' mangled-name='file_path' filepath='fs/open.c' line='895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='file_path'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/open.c' line='895' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/open.c' line='895' column='1'/>
+        <parameter type-id='95e97e5e' name='buflen' filepath='fs/open.c' line='895' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='dentry_open' mangled-name='dentry_open' filepath='fs/open.c' line='913' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dentry_open'>
+        <parameter type-id='a77efac3' name='path' filepath='fs/open.c' line='913' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/open.c' line='913' column='1'/>
+        <parameter type-id='bc33861a' name='cred' filepath='fs/open.c' line='914' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <pointer-type-def type-id='5251a03b' size-in-bits='64' id='a77efac3'/>
+      <typedef-decl name='fl_owner_t' type-id='eaa32e2f' filepath='include/linux/fs.h' line='1057' column='1' id='bc5666d5'/>
+      <qualified-type-def type-id='b5382ece' const='yes' id='5251a03b'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/pipe.c' language='LANG_C89'>
+      <function-decl name='pipe_unlock' mangled-name='pipe_unlock' filepath='fs/pipe.c' line='90' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_unlock'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/pipe.c' line='90' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pipe_lock' mangled-name='pipe_lock' filepath='fs/pipe.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pipe_lock'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/pipe.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/posix_acl.c' language='LANG_C89'>
+      <var-decl name='posix_acl_access_xattr_handler' type-id='e4f938dc' mangled-name='posix_acl_access_xattr_handler' visibility='default' filepath='fs/posix_acl.c' line='904' column='1' elf-symbol-id='posix_acl_access_xattr_handler'/>
+      <var-decl name='posix_acl_default_xattr_handler' type-id='e4f938dc' mangled-name='posix_acl_default_xattr_handler' visibility='default' filepath='fs/posix_acl.c' line='913' column='1' elf-symbol-id='posix_acl_default_xattr_handler'/>
+      <function-decl name='posix_acl_from_xattr' mangled-name='posix_acl_from_xattr' filepath='fs/posix_acl.c' line='725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='posix_acl_from_xattr'>
+        <parameter type-id='c0ced320' name='user_ns' filepath='fs/posix_acl.c' line='725' column='1'/>
+        <parameter type-id='eaa32e2f' name='value' filepath='fs/posix_acl.c' line='726' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='fs/posix_acl.c' line='726' column='1'/>
+        <return type-id='2871909b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='44' column='1' id='1371a02f'>
+        <data-member access='public'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='fs/proc/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='single_show' type-id='0131eb61' visibility='default' filepath='fs/proc/internal.h' line='46' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='proc_write_t' type-id='f71f3e00' filepath='include/linux/proc_fs.h' line='17' column='1' id='7c2b18ab'/>
+      <typedef-decl name='nlink_t' type-id='19c2251e' filepath='include/linux/types.h' line='20' column='1' id='6fa67d85'/>
+      <pointer-type-def type-id='56b34f46' size-in-bits='64' id='f71f3e00'/>
+      <function-decl name='proc_create_single_data' mangled-name='proc_create_single_data' filepath='fs/proc/generic.c' line='635' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_single_data'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='635' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='635' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='636' column='1'/>
+        <parameter type-id='0131eb61' name='show' filepath='fs/proc/generic.c' line='637' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='637' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='proc_create_seq_private' mangled-name='proc_create_seq_private' filepath='fs/proc/generic.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_seq_private'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='605' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='605' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='606' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/proc/generic.c' line='606' column='1'/>
+        <parameter type-id='f0981eeb' name='state_size' filepath='fs/proc/generic.c' line='607' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='607' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='proc_mkdir' mangled-name='proc_mkdir' filepath='fs/proc/generic.c' line='513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_mkdir'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='513' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='514' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='proc_create' mangled-name='proc_create' filepath='fs/proc/generic.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='572' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='572' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='573' column='1'/>
+        <parameter type-id='61758ee5' name='proc_fops' filepath='fs/proc/generic.c' line='574' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='remove_proc_entry' mangled-name='remove_proc_entry' filepath='fs/proc/generic.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_proc_entry'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='674' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='674' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='proc_remove' mangled-name='proc_remove' filepath='fs/proc/generic.c' line='762' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_remove'>
+        <parameter type-id='d077e928' name='de' filepath='fs/proc/generic.c' line='762' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='proc_mkdir_data' mangled-name='proc_mkdir_data' filepath='fs/proc/generic.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_mkdir_data'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='499' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='499' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='500' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='500' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='proc_create_data' mangled-name='proc_create_data' filepath='fs/proc/generic.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_data'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/generic.c' line='556' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/generic.c' line='556' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/generic.c' line='557' column='1'/>
+        <parameter type-id='61758ee5' name='proc_fops' filepath='fs/proc/generic.c' line='558' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/generic.c' line='558' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='PDE_DATA' mangled-name='PDE_DATA' filepath='fs/proc/generic.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='PDE_DATA'>
+        <parameter type-id='c5a4eb7f' name='inode' filepath='fs/proc/generic.c' line='769' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='45cc51cf' size-in-bits='64' id='c5a4eb7f'/>
+      <function-type size-in-bits='64' id='56b34f46'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <qualified-type-def type-id='fe070fe8' const='yes' id='45cc51cf'/>
+    </abi-instr>
+    <abi-instr 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='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_net_single'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/proc_net.c' line='178' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/proc_net.c' line='178' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/proc_net.c' line='179' column='1'/>
+        <parameter type-id='0131eb61' name='show' filepath='fs/proc/proc_net.c' line='180' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/proc_net.c' line='180' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+      <function-decl name='proc_create_net_data' mangled-name='proc_create_net_data' filepath='fs/proc/proc_net.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_create_net_data'>
+        <parameter type-id='80f4b756' name='name' filepath='fs/proc/proc_net.c' line='85' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='fs/proc/proc_net.c' line='85' column='1'/>
+        <parameter type-id='d077e928' name='parent' filepath='fs/proc/proc_net.c' line='86' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/proc/proc_net.c' line='86' column='1'/>
+        <parameter type-id='f0981eeb' name='state_size' filepath='fs/proc/proc_net.c' line='87' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/proc/proc_net.c' line='87' column='1'/>
+        <return type-id='d077e928'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/proc/proc_sysctl.c' language='LANG_C89'>
+      <function-decl name='register_sysctl_table' mangled-name='register_sysctl_table' filepath='fs/proc/proc_sysctl.c' line='1605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_sysctl_table'>
+        <parameter type-id='631dc3c1' name='table' filepath='fs/proc/proc_sysctl.c' line='1605' column='1'/>
+        <return type-id='11b101bb'/>
+      </function-decl>
+      <function-decl name='unregister_sysctl_table' mangled-name='unregister_sysctl_table' filepath='fs/proc/proc_sysctl.c' line='1673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_sysctl_table'>
+        <parameter type-id='11b101bb' name='header' filepath='fs/proc/proc_sysctl.c' line='1673' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/read_write.c' language='LANG_C89'>
+      <var-decl name='generic_ro_fops' type-id='b8ae588d' mangled-name='generic_ro_fops' visibility='default' filepath='fs/read_write.c' line='28' column='1' elf-symbol-id='generic_ro_fops'/>
+      <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='77e79a4b' name='file' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='230' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='230' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='vfs_llseek' mangled-name='vfs_llseek' filepath='fs/read_write.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='291' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='291' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='291' column='1'/>
+        <return type-id='69bf7bee'/>
+      </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='77e79a4b' name='file' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='224' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='224' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='no_seek_end_llseek' mangled-name='no_seek_end_llseek' filepath='fs/read_write.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='no_seek_end_llseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/read_write.c' line='181' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='181' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='181' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <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='77e79a4b' name='file' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='144' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='144' column='1'/>
+        <return type-id='69bf7bee'/>
+      </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='77e79a4b' name='file' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/read_write.c' line='236' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/read_write.c' line='236' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/seq_file.c' language='LANG_C89'>
+      <function-decl name='seq_open' mangled-name='seq_open' filepath='fs/seq_file.c' line='54' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_open'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='54' column='1'/>
+        <parameter type-id='943a1b48' name='op' filepath='fs/seq_file.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_printf' mangled-name='seq_printf' filepath='fs/seq_file.c' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_printf'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='416' column='1'/>
+        <parameter type-id='80f4b756' name='f' filepath='fs/seq_file.c' line='416' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_lseek' mangled-name='seq_lseek' filepath='fs/seq_file.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_lseek'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='313' column='1'/>
+        <parameter type-id='69bf7bee' name='offset' filepath='fs/seq_file.c' line='313' column='1'/>
+        <parameter type-id='95e97e5e' name='whence' filepath='fs/seq_file.c' line='313' column='1'/>
+        <return type-id='69bf7bee'/>
+      </function-decl>
+      <function-decl name='single_release' mangled-name='single_release' filepath='fs/seq_file.c' line='608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/seq_file.c' line='608' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='608' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='single_open' mangled-name='single_open' filepath='fs/seq_file.c' line='569' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='single_open'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='569' column='1'/>
+        <parameter type-id='0131eb61' name='show' filepath='fs/seq_file.c' line='569' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/seq_file.c' line='570' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_write' mangled-name='seq_write' filepath='fs/seq_file.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_write'>
+        <parameter type-id='f8dc9def' name='seq' filepath='fs/seq_file.c' line='826' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/seq_file.c' line='826' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/seq_file.c' line='826' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_vprintf' mangled-name='seq_vprintf' filepath='fs/seq_file.c' line='401' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_vprintf'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='401' column='1'/>
+        <parameter type-id='80f4b756' name='f' filepath='fs/seq_file.c' line='401' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='fs/seq_file.c' line='401' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_release_private' mangled-name='seq_release_private' filepath='fs/seq_file.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_release_private'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/seq_file.c' line='617' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='617' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_release' mangled-name='seq_release' filepath='fs/seq_file.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_release'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/seq_file.c' line='360' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='360' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='seq_read' mangled-name='seq_read' filepath='fs/seq_file.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_read'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='156' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='fs/seq_file.c' line='156' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='fs/seq_file.c' line='156' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/seq_file.c' line='156' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='seq_puts' mangled-name='seq_puts' filepath='fs/seq_file.c' line='669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_puts'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='669' column='1'/>
+        <parameter type-id='80f4b756' name='s' filepath='fs/seq_file.c' line='669' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_putc' mangled-name='seq_putc' filepath='fs/seq_file.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_putc'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='660' column='1'/>
+        <parameter type-id='a84c031d' name='c' filepath='fs/seq_file.c' line='660' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_open_private' mangled-name='seq_open_private' filepath='fs/seq_file.c' line='653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_open_private'>
+        <parameter type-id='77e79a4b' name='filp' filepath='fs/seq_file.c' line='653' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/seq_file.c' line='653' column='1'/>
+        <parameter type-id='95e97e5e' name='psize' filepath='fs/seq_file.c' line='654' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__seq_open_private' mangled-name='__seq_open_private' filepath='fs/seq_file.c' line='627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__seq_open_private'>
+        <parameter type-id='77e79a4b' name='f' filepath='fs/seq_file.c' line='627' column='1'/>
+        <parameter type-id='943a1b48' name='ops' filepath='fs/seq_file.c' line='627' column='1'/>
+        <parameter type-id='95e97e5e' name='psize' filepath='fs/seq_file.c' line='628' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='seq_hex_dump' mangled-name='seq_hex_dump' filepath='fs/seq_file.c' line='860' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_hex_dump'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='860' column='1'/>
+        <parameter type-id='80f4b756' name='prefix_str' filepath='fs/seq_file.c' line='860' column='1'/>
+        <parameter type-id='95e97e5e' name='prefix_type' filepath='fs/seq_file.c' line='860' column='1'/>
+        <parameter type-id='95e97e5e' name='rowsize' filepath='fs/seq_file.c' line='861' column='1'/>
+        <parameter type-id='95e97e5e' name='groupsize' filepath='fs/seq_file.c' line='861' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='fs/seq_file.c' line='861' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/seq_file.c' line='861' column='1'/>
+        <parameter type-id='b50a4934' name='ascii' filepath='fs/seq_file.c' line='862' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='seq_file_path' mangled-name='seq_file_path' filepath='fs/seq_file.c' line='495' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='seq_file_path'>
+        <parameter type-id='f8dc9def' name='m' filepath='fs/seq_file.c' line='495' column='1'/>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/seq_file.c' line='495' column='1'/>
+        <parameter type-id='80f4b756' name='esc' filepath='fs/seq_file.c' line='495' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='41838567'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='total_len' type-id='b59d7dce' 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='f0981eeb' 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='f0981eeb' 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='1851a81a' 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='69bf7bee' 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='b53e8dbb' 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='b59d7dce' 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='b50a4934' 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='1851a81a'>
+        <data-member access='public'>
+          <var-decl name='userptr' type-id='eaa32e2f' visibility='default' filepath='include/linux/splice.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/splice.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/splice.h' line='39' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='splice_actor' type-id='69c72ccd' filepath='include/linux/splice.h' line='65' column='1' id='99adf786'/>
+      <pointer-type-def type-id='99adf786' size-in-bits='64' id='05903717'/>
+      <pointer-type-def type-id='41838567' size-in-bits='64' id='f5bc338f'/>
+      <function-decl name='__splice_from_pipe' mangled-name='__splice_from_pipe' filepath='fs/splice.c' line='614' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__splice_from_pipe'>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/splice.c' line='614' column='1'/>
+        <parameter type-id='f5bc338f' name='sd' filepath='fs/splice.c' line='614' column='1'/>
+        <parameter type-id='05903717' name='actor' filepath='fs/splice.c' line='615' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='generic_file_splice_read' mangled-name='generic_file_splice_read' filepath='fs/splice.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_splice_read'>
+        <parameter type-id='77e79a4b' name='in' filepath='fs/splice.c' line='295' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='fs/splice.c' line='295' column='1'/>
+        <parameter type-id='15d29710' name='pipe' filepath='fs/splice.c' line='296' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='fs/splice.c' line='296' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='fs/splice.c' line='297' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='69c72ccd'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <parameter type-id='f5bc338f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/stat.c' language='LANG_C89'>
+      <function-decl name='generic_fillattr' mangled-name='generic_fillattr' filepath='fs/stat.c' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_fillattr'>
+        <parameter type-id='7e666abe' name='inode' filepath='fs/stat.c' line='33' column='1'/>
+        <parameter type-id='0e87f9be' name='stat' filepath='fs/stat.c' line='33' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/>
+      <class-decl name='kstat' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/stat.h' line='24' column='1' id='5f5c9d88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result_mask' type-id='19c2251e' 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='2594b00f' 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='f0981eeb' 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='8f92235e' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rdev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/stat.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/stat.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/stat.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mtime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ctime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='btime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/super.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='512' id='460b55b1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='audit_names' is-struct='yes' visibility='default' is-declaration-only='yes' id='90177497'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='infinite' id='0904d1cc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='256' id='20b279f0'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <union-decl name='fscrypt_policy' visibility='default' is-declaration-only='yes' id='61227238'/>
+      <class-decl name='fs_context_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='110' column='1' id='d2bd1e05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free' type-id='18811e61' visibility='default' filepath='include/linux/fs_context.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dup' type-id='0177caaf' visibility='default' filepath='include/linux/fs_context.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parse_param' type-id='7af12c47' visibility='default' filepath='include/linux/fs_context.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parse_monolithic' type-id='33c348f4' visibility='default' filepath='include/linux/fs_context.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_tree' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reconfigure' type-id='57f0383a' visibility='default' filepath='include/linux/fs_context.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='64' column='1' id='f3f97f82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='7f8e7476' visibility='default' filepath='include/linux/fs_context.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='f7274614' visibility='default' filepath='include/linux/fs_context.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/linux/fs_context.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dirfd' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_context.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_value_type' filepath='include/linux/fs_context.h' line='51' column='1' id='7f8e7476'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='fs_value_is_undefined' value='0'/>
+        <enumerator name='fs_value_is_flag' value='1'/>
+        <enumerator name='fs_value_is_string' value='2'/>
+        <enumerator name='fs_value_is_blob' value='3'/>
+        <enumerator name='fs_value_is_filename' value='4'/>
+        <enumerator name='fs_value_is_filename_empty' value='5'/>
+        <enumerator name='fs_value_is_file' value='6'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs_context.h' line='67' column='1' id='f7274614'>
+        <data-member access='public'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/fs_context.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='blob' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='name' type-id='e9d22a06' visibility='default' filepath='include/linux/fs_context.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs_context.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='filename' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2604' column='1' id='63fc6210'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uptr' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aname' type-id='5acb442f' visibility='default' filepath='include/linux/fs.h' line='2608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iname' type-id='0904d1cc' visibility='default' filepath='include/linux/fs.h' line='2609' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fc_log' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='177' column='1' id='fb4c7dfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/fs_context.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='head' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='tail' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='need_free' type-id='f9b06939' visibility='default' filepath='include/linux/fs_context.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs_context.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buffer' type-id='460b55b1' visibility='default' filepath='include/linux/fs_context.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='fs_context_purpose' filepath='include/linux/fs_context.h' line='29' column='1' id='4171a6be'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_FOR_MOUNT' value='0'/>
+        <enumerator name='FS_CONTEXT_FOR_SUBMOUNT' value='1'/>
+        <enumerator name='FS_CONTEXT_FOR_RECONFIGURE' value='2'/>
+      </enum-decl>
+      <enum-decl name='fs_context_phase' filepath='include/linux/fs_context.h' line='38' column='1' id='de54989f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FS_CONTEXT_CREATE_PARAMS' value='0'/>
+        <enumerator name='FS_CONTEXT_CREATING' value='1'/>
+        <enumerator name='FS_CONTEXT_AWAITING_MOUNT' value='2'/>
+        <enumerator name='FS_CONTEXT_AWAITING_RECONF' value='3'/>
+        <enumerator name='FS_CONTEXT_RECONF_PARAMS' value='4'/>
+        <enumerator name='FS_CONTEXT_RECONFIGURING' value='5'/>
+        <enumerator name='FS_CONTEXT_FAILED' value='6'/>
+      </enum-decl>
+      <pointer-type-def type-id='90177497' size-in-bits='64' id='5acb442f'/>
+      <qualified-type-def type-id='d2bd1e05' const='yes' id='4b1c1612'/>
+      <pointer-type-def type-id='4b1c1612' size-in-bits='64' id='7536fa28'/>
+      <qualified-type-def type-id='61227238' const='yes' id='268fa5d8'/>
+      <pointer-type-def type-id='268fa5d8' size-in-bits='64' id='a6223bf6'/>
+      <pointer-type-def type-id='4b7af74a' size-in-bits='64' id='c0135c9c'/>
+      <pointer-type-def type-id='fb4c7dfb' size-in-bits='64' id='d1a78aeb'/>
+      <pointer-type-def type-id='63fc6210' size-in-bits='64' id='e9d22a06'/>
+      <pointer-type-def type-id='f3f97f82' size-in-bits='64' id='75615bf0'/>
+      <pointer-type-def type-id='135a5d4b' size-in-bits='64' id='0177caaf'/>
+      <pointer-type-def type-id='c44bfbeb' size-in-bits='64' id='7af12c47'/>
+      <pointer-type-def type-id='91015ee2' size-in-bits='64' id='33c348f4'/>
+      <pointer-type-def type-id='7a6178ff' size-in-bits='64' id='c60354f3'/>
+      <pointer-type-def type-id='4f0fdafb' size-in-bits='64' id='ef75df1f'/>
+      <pointer-type-def type-id='845f3205' size-in-bits='64' id='30341fa1'/>
+      <pointer-type-def type-id='eca62f39' size-in-bits='64' id='e18b930d'/>
+      <pointer-type-def type-id='e7d2a5fc' size-in-bits='64' id='c69b0fe2'/>
+      <pointer-type-def type-id='e74568be' size-in-bits='64' id='deb31178'/>
+      <pointer-type-def type-id='3e80a1bc' size-in-bits='64' id='3b2da7a6'/>
+      <pointer-type-def type-id='41f25325' size-in-bits='64' id='18811e61'/>
+      <pointer-type-def type-id='64604191' size-in-bits='64' id='c95d966d'/>
+      <pointer-type-def type-id='a96e8cde' size-in-bits='64' id='b0ddaf40'/>
+      <function-decl name='mount_bdev' mangled-name='mount_bdev' filepath='fs/super.c' line='1363' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mount_bdev'>
+        <parameter type-id='21e53d44' name='fs_type' filepath='fs/super.c' line='1363' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='fs/super.c' line='1364' column='1'/>
+        <parameter type-id='80f4b756' name='dev_name' filepath='fs/super.c' line='1364' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='fs/super.c' line='1364' column='1'/>
+        <parameter type-id='e18b930d' name='fill_super' filepath='fs/super.c' line='1365' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='kill_litter_super' mangled-name='kill_litter_super' filepath='fs/super.c' line='1113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_litter_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1113' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kill_block_super' mangled-name='kill_block_super' filepath='fs/super.c' line='1438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_block_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1438' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kill_anon_super' mangled-name='kill_anon_super' filepath='fs/super.c' line='1105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_anon_super'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/super.c' line='1105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_tree_single' mangled-name='get_tree_single' filepath='fs/super.c' line='1225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_tree_single'>
+        <parameter type-id='5760dcb0' name='fc' filepath='fs/super.c' line='1225' column='1'/>
+        <parameter type-id='30341fa1' name='fill_super' filepath='fs/super.c' line='1226' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_tree_bdev' mangled-name='get_tree_bdev' filepath='fs/super.c' line='1277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_tree_bdev'>
+        <parameter type-id='5760dcb0' name='fc' filepath='fs/super.c' line='1277' column='1'/>
+        <parameter type-id='30341fa1' name='fill_super' filepath='fs/super.c' line='1278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b7af74a'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='a6223bf6'/>
+      </function-type>
+      <function-type size-in-bits='64' id='135a5d4b'>
+        <parameter type-id='5760dcb0'/>
+        <parameter type-id='5760dcb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c44bfbeb'>
+        <parameter type-id='5760dcb0'/>
+        <parameter type-id='75615bf0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91015ee2'>
+        <parameter type-id='5760dcb0'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a6178ff'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f0fdafb'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='845f3205'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='5760dcb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eca62f39'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e74568be'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e80a1bc'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='41f25325'>
+        <parameter type-id='5760dcb0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64604191'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a96e8cde'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='c69b0fe2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/sync.c' language='LANG_C89'>
+      <function-decl name='sync_filesystem' mangled-name='sync_filesystem' filepath='fs/sync.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sync_filesystem'>
+        <parameter type-id='42c8f564' name='sb' filepath='fs/sync.c' line='48' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vfs_fsync' mangled-name='vfs_fsync' filepath='fs/sync.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfs_fsync'>
+        <parameter type-id='77e79a4b' name='file' filepath='fs/sync.c' line='211' column='1'/>
+        <parameter type-id='95e97e5e' name='datasync' filepath='fs/sync.c' line='211' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/sysfs/file.c' language='LANG_C89'>
+      <qualified-type-def type-id='a6222917' const='yes' id='be65923c'/>
+      <pointer-type-def type-id='be65923c' size-in-bits='64' id='cfe4f8a2'/>
+      <qualified-type-def type-id='cfe4f8a2' const='yes' id='cb71e1ad'/>
+      <pointer-type-def type-id='cb71e1ad' size-in-bits='64' id='cb460785'/>
+      <qualified-type-def type-id='d83a2db1' const='yes' id='dbce337a'/>
+      <pointer-type-def type-id='dbce337a' size-in-bits='64' id='559ac6f0'/>
+      <function-decl name='sysfs_create_file_ns' mangled-name='sysfs_create_file_ns' filepath='fs/sysfs/file.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_file_ns'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='322' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='322' column='1'/>
+        <parameter type-id='eaa32e2f' name='ns' filepath='fs/sysfs/file.c' line='323' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_create_bin_file' mangled-name='sysfs_create_bin_file' filepath='fs/sysfs/file.c' line='536' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_bin_file'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='536' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='fs/sysfs/file.c' line='537' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_notify' mangled-name='sysfs_notify' filepath='fs/sysfs/file.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_notify'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='173' column='1'/>
+        <parameter type-id='80f4b756' name='dir' filepath='fs/sysfs/file.c' line='173' column='1'/>
+        <parameter type-id='80f4b756' name='attr' filepath='fs/sysfs/file.c' line='173' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_files' mangled-name='sysfs_remove_files' filepath='fs/sysfs/file.c' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_files'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='497' column='1'/>
+        <parameter type-id='cb460785' name='ptr' filepath='fs/sysfs/file.c' line='497' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_file_ns' mangled-name='sysfs_remove_file_ns' filepath='fs/sysfs/file.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_file_ns'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='465' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='465' column='1'/>
+        <parameter type-id='eaa32e2f' name='ns' filepath='fs/sysfs/file.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_file_from_group' mangled-name='sysfs_remove_file_from_group' filepath='fs/sysfs/file.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_file_from_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='512' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='513' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='fs/sysfs/file.c' line='513' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_bin_file' mangled-name='sysfs_remove_bin_file' filepath='fs/sysfs/file.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_bin_file'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='556' column='1'/>
+        <parameter type-id='559ac6f0' name='attr' filepath='fs/sysfs/file.c' line='557' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_files' mangled-name='sysfs_create_files' filepath='fs/sysfs/file.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_files'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='338' column='1'/>
+        <parameter type-id='cb460785' name='ptr' filepath='fs/sysfs/file.c' line='338' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_add_file_to_group' mangled-name='sysfs_add_file_to_group' filepath='fs/sysfs/file.c' line='358' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_add_file_to_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/file.c' line='358' column='1'/>
+        <parameter type-id='cfe4f8a2' name='attr' filepath='fs/sysfs/file.c' line='359' column='1'/>
+        <parameter type-id='80f4b756' name='group' filepath='fs/sysfs/file.c' line='359' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/sysfs/group.c' language='LANG_C89'>
+      <function-decl name='sysfs_remove_group' mangled-name='sysfs_remove_group' filepath='fs/sysfs/group.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='269' column='1'/>
+        <parameter type-id='8ff9530e' name='grp' filepath='fs/sysfs/group.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_groups' mangled-name='sysfs_create_groups' filepath='fs/sysfs/group.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_groups'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='211' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='fs/sysfs/group.c' line='212' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sysfs_remove_groups' mangled-name='sysfs_remove_groups' filepath='fs/sysfs/group.c' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_groups'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='304' column='1'/>
+        <parameter type-id='c97de1ac' name='groups' filepath='fs/sysfs/group.c' line='305' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_group' mangled-name='sysfs_create_group' filepath='fs/sysfs/group.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_group'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='171' column='1'/>
+        <parameter type-id='8ff9530e' name='grp' filepath='fs/sysfs/group.c' line='172' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__compat_only_sysfs_link_entry_to_kobj' mangled-name='__compat_only_sysfs_link_entry_to_kobj' filepath='fs/sysfs/group.c' line='424' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__compat_only_sysfs_link_entry_to_kobj'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/group.c' line='424' column='1'/>
+        <parameter type-id='d30bdc51' name='target_kobj' filepath='fs/sysfs/group.c' line='425' column='1'/>
+        <parameter type-id='80f4b756' name='target_name' filepath='fs/sysfs/group.c' line='426' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='fs/sysfs/symlink.c' language='LANG_C89'>
+      <function-decl name='sysfs_remove_link' mangled-name='sysfs_remove_link' filepath='fs/sysfs/symlink.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_remove_link'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/symlink.c' line='143' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/sysfs/symlink.c' line='143' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sysfs_create_link' mangled-name='sysfs_create_link' filepath='fs/sysfs/symlink.c' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_create_link'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='fs/sysfs/symlink.c' line='89' column='1'/>
+        <parameter type-id='d30bdc51' name='target' filepath='fs/sysfs/symlink.c' line='89' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='fs/sysfs/symlink.c' line='90' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='init/init_task.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='84a5c3d4' size-in-bits='128' id='7f112b69'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='78a133c2' size-in-bits='128' id='30180d4b'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='96' id='3fa05d14'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='infinite' id='d5016f6f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='128' id='8a7b7524'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='128' id='9396cabb'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='infinite' id='167619f6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='256' id='b6b7435e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='32768' id='61cd76ae'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='49178f86' size-in-bits='288' id='32e5d672'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='162c1c01' size-in-bits='256' id='68694f49'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='2048' id='2e646d82'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26a90f95' size-in-bits='192' id='461c9ed2'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='16384' id='41bf80f3'>
+        <subrange length='2048' type-id='7ff19f0f' id='e5323efb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='256' id='16dc656a'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='384' id='36d7f119'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='448' id='6093ff7c'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='48' id='4a008bc3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='infinite' id='e84913bd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='anon_vma' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/rmap.h' line='29' column='1' id='14f332cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/rmap.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='include/linux/rmap.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='degree' type-id='f0981eeb' visibility='default' filepath='include/linux/rmap.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='parent' type-id='a8f86cda' visibility='default' filepath='include/linux/rmap.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/rmap.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='assoc_array_ptr' is-struct='yes' visibility='default' is-declaration-only='yes' id='3249e303'/>
+      <class-decl name='bdi_writeback' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='131' column='1' id='ac0aeb1d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_old_flush' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='b_dirty' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='b_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='b_more_io' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='b_dirty_time' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='aca5b9e5' visibility='default' filepath='include/linux/backing-dev-defs.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='congested' type-id='d97a04ce' visibility='default' filepath='include/linux/backing-dev-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='bw_time_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dirtied_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='written_stamp' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='avg_write_bandwidth' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='balanced_dirty_ratelimit' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dirty_exceeded' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='start_all_reason' type-id='c1602c7a' visibility='default' filepath='include/linux/backing-dev-defs.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='work_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='dirty_sleep' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='bdi_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/backing-dev-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='memcg_completions' type-id='587caff2' visibility='default' filepath='include/linux/backing-dev-defs.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='memcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='blkcg_css' type-id='cfff5953' visibility='default' filepath='include/linux/backing-dev-defs.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='memcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='blkcg_node' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='' type-id='93944b10' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/filter.h' line='540' column='1' id='facd5338'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pages' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='jited' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='jit_requested' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='gpl_compatible' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='cb_access' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dst_needed' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='blinded' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='is_func' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='kprobe_override' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='has_callchain_buf' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='enforce_expected_attach_type' type-id='1dc6a898' visibility='default' filepath='include/linux/filter.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='b80df76a' visibility='default' filepath='include/linux/filter.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='expected_attach_type' type-id='67ce11ed' visibility='default' filepath='include/linux/filter.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='jited_len' type-id='19c2251e' visibility='default' filepath='include/linux/filter.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tag' type-id='d2f7b56a' visibility='default' filepath='include/linux/filter.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aux' type-id='1e6beae1' visibility='default' filepath='include/linux/filter.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='orig_prog' type-id='e93ad915' visibility='default' filepath='include/linux/filter.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bpf_func' type-id='531a7450' visibility='default' filepath='include/linux/filter.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='fe772793' visibility='default' filepath='include/linux/filter.h' line='562' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bucket_table' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/rhashtable.h' line='76' column='1' id='984972f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_rnd' type-id='19c2251e' visibility='default' filepath='include/linux/rhashtable.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='walkers' type-id='72f469ec' visibility='default' filepath='include/linux/rhashtable.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/rhashtable.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='future_tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dep_map' type-id='d34a605e' visibility='default' filepath='include/linux/rhashtable.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buckets' type-id='7c792e5e' visibility='default' filepath='include/linux/rhashtable.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='can_dev_rcv_lists' is-struct='yes' visibility='default' is-declaration-only='yes' id='e82476af'/>
+      <class-decl name='can_pkg_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='036e1e80'/>
+      <class-decl name='can_rcv_lists_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='8c8c8763'/>
+      <class-decl name='cdev' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/cdev.h' line='14' column='1' id='22f86351'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/cdev.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cdev.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='61758ee5' visibility='default' filepath='include/linux/cdev.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/cdev.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/cdev.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/cdev.h' line='20' 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='24' column='1' id='772a4ddf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/dst.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='6d30564f' visibility='default' filepath='include/net/dst.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_metrics' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm' type-id='328dda6e' visibility='default' filepath='include/net/dst.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='input' type-id='d2e00785' visibility='default' filepath='include/net/dst.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='output' type-id='0023218e' visibility='default' filepath='include/net/dst.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='obsolete' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='header_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='trailer_len' type-id='8efea9e5' visibility='default' filepath='include/net/dst.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__refcnt' type-id='49178f86' visibility='default' filepath='include/net/dst.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='__use' type-id='95e97e5e' visibility='default' filepath='include/net/dst.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/dst.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/dst.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/dst.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='error' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='__pad' type-id='a2185560' visibility='default' filepath='include/net/dst.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='tclassid' type-id='3f1a6b60' visibility='default' filepath='include/net/dst.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='export_operations' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='193' column='1' id='1a0c5572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encode_fh' type-id='2cdfbf0a' visibility='default' filepath='include/linux/exportfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fh_to_dentry' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fh_to_parent' type-id='9b9ccb86' visibility='default' filepath='include/linux/exportfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_name' type-id='cb0ca137' visibility='default' filepath='include/linux/exportfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_parent' type-id='36ed3b9a' visibility='default' filepath='include/linux/exportfs.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='commit_metadata' type-id='28ba4492' visibility='default' filepath='include/linux/exportfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_uuid' type-id='547aa7d2' visibility='default' filepath='include/linux/exportfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='map_blocks' type-id='35d085ce' visibility='default' filepath='include/linux/exportfs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='commit_blocks' type-id='30144f27' visibility='default' filepath='include/linux/exportfs.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_info' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='141' column='1' id='faaac7a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib6_table' type-id='7156b317' visibility='default' filepath='include/net/ip6_fib.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib6_next' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib6_node' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='faf198da' visibility='default' filepath='include/net/ip6_fib.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fib6_nsiblings' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fib6_ref' type-id='64615833' visibility='default' filepath='include/net/ip6_fib.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib6_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip6_fib.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib6_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fib6_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib6_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib6_prefsrc' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib6_metric' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='fib6_protocol' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='fib6_type' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='should_flush' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='dst_nocount' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='dst_nopolicy' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dst_host' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='fib6_destroying' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/net/ip6_fib.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip6_fib.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fib6_nh' type-id='7be723ef' visibility='default' filepath='include/net/ip6_fib.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_table' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='360' column='1' id='7147e7ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb6_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip6_fib.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb6_id' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb6_lock' type-id='fb4018a0' visibility='default' filepath='include/net/ip6_fib.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tb6_root' type-id='9f30e4ad' visibility='default' filepath='include/net/ip6_fib.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tb6_peers' type-id='27ebfa24' visibility='default' filepath='include/net/ip6_fib.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/ip6_fib.h' line='367' 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='29' column='1' id='ef45f062'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/fib_notifier.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/fib_notifier.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_seq_read' type-id='3a0c781f' visibility='default' filepath='include/net/fib_notifier.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fib_dump' type-id='9def3eca' visibility='default' filepath='include/net/fib_notifier.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_notifier.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_notifier.h' line='35' column='1'/>
+        </data-member>
+      </class-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='e079fe29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' 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='72f469ec' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='f0981eeb' 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='33356d2c' 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='9c26ea89' visibility='default' filepath='include/net/fib_rules.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match' type-id='9ce2e6e7' visibility='default' filepath='include/net/fib_rules.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='configure' type-id='41323fc2' visibility='default' filepath='include/net/fib_rules.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='delete' type-id='42bc911b' visibility='default' filepath='include/net/fib_rules.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compare' type-id='98a3b427' visibility='default' filepath='include/net/fib_rules.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fill' type-id='72fd300e' visibility='default' filepath='include/net/fib_rules.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nlmsg_payload' type-id='b3002d4b' visibility='default' filepath='include/net/fib_rules.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flush_cache' type-id='28375890' visibility='default' filepath='include/net/fib_rules.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nlgroup' type-id='95e97e5e' visibility='default' filepath='include/net/fib_rules.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/fib_rules.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rules_list' type-id='72f469ec' visibility='default' filepath='include/net/fib_rules.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/fib_rules.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fro_net' type-id='a2bff676' visibility='default' filepath='include/net/fib_rules.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/fib_rules.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_table' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='234' column='1' id='a2b406b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tb_hlist' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tb_num_default' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tb_data' type-id='1d2c2b85' visibility='default' filepath='include/net/ip_fib.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__data' type-id='c99b5ecd' visibility='default' filepath='include/net/ip_fib.h' line='240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_context' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fs_context.h' line='86' column='1' id='8d0295a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='7536fa28' visibility='default' filepath='include/linux/fs_context.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapi_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs_context.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fs_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs_context.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fs_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sget_key' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='root' type-id='27675065' visibility='default' filepath='include/linux/fs_context.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs_context.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='net_ns' type-id='a2bff676' visibility='default' filepath='include/linux/fs_context.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs_context.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='log' type-id='d1a78aeb' visibility='default' filepath='include/linux/fs_context.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/linux/fs_context.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs_context.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='sb_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sb_flags_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='s_iflags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lsm_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs_context.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='purpose' type-id='4171a6be' visibility='default' filepath='include/linux/fs_context.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='phase' type-id='de54989f' visibility='default' filepath='include/linux/fs_context.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='need_free' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='global' type-id='b50a4934' visibility='default' filepath='include/linux/fs_context.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_parameter_description' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs_parser.h' line='64' column='1' id='8a2a988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='8d43b1f5' visibility='default' filepath='include/linux/fs_parser.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='specs' type-id='8d4f223b' visibility='default' filepath='include/linux/fs_parser.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='enums' type-id='6d6531cd' visibility='default' filepath='include/linux/fs_parser.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fscrypt_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='9441bb37'/>
+      <class-decl name='fscrypt_operations' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/fscrypt.h' line='58' column='1' id='fa21a7e9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_prefix' type-id='80f4b756' visibility='default' filepath='include/linux/fscrypt.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_context' type-id='c60354f3' visibility='default' filepath='include/linux/fscrypt.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_context' type-id='ef75df1f' visibility='default' filepath='include/linux/fscrypt.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get_dummy_policy' type-id='c0135c9c' visibility='default' filepath='include/linux/fscrypt.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='empty_dir' type-id='deb31178' visibility='default' filepath='include/linux/fscrypt.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='max_namelen' type-id='f0981eeb' visibility='default' filepath='include/linux/fscrypt.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='has_stable_inodes' type-id='3b2da7a6' visibility='default' filepath='include/linux/fscrypt.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_ino_and_lblk_bits' type-id='c95d966d' visibility='default' filepath='include/linux/fscrypt.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_num_devices' type-id='d2f4c704' visibility='default' filepath='include/linux/fscrypt.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_devices' type-id='b0ddaf40' visibility='default' filepath='include/linux/fscrypt.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fscrypt.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_oem_data1' type-id='20b279f0' visibility='default' filepath='include/linux/fscrypt.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsnotify_mark_connector' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fsnotify_backend.h' line='292' column='1' id='aadc8ce9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fsnotify_backend.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/fsnotify_backend.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fsid' type-id='ac895711' visibility='default' filepath='include/linux/fsnotify_backend.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='9114ebb7' visibility='default' filepath='include/linux/fsnotify_backend.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/fsnotify_backend.h' line='304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsverity_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='43489bca'/>
+      <class-decl name='fsverity_operations' is-struct='yes' visibility='default' is-declaration-only='yes' id='5f0d764c'/>
+      <class-decl name='gendisk' size-in-bits='11264' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='191' column='1' id='4f60ffbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='first_minor' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='minors' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='disk_name' type-id='16dc656a' visibility='default' filepath='include/linux/genhd.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devnode' type-id='b160f6ba' visibility='default' filepath='include/linux/genhd.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/genhd.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='part_tbl' type-id='af836b25' visibility='default' filepath='include/linux/genhd.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='part0' type-id='2473bc1f' visibility='default' filepath='include/linux/genhd.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='fops' type-id='6829b047' visibility='default' filepath='include/linux/genhd.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/genhd.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genhd.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='lookup_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/genhd.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='slave_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='random' type-id='22aa3c54' visibility='default' filepath='include/linux/genhd.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='sync_io' type-id='49178f86' visibility='default' filepath='include/linux/genhd.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='ev' type-id='26f00576' visibility='default' filepath='include/linux/genhd.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='bb' type-id='5760652c' visibility='default' filepath='include/linux/genhd.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='lockdep_map' type-id='d34a605e' visibility='default' filepath='include/linux/genhd.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='235' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hd_struct' size-in-bits='9408' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='109' column='1' id='2473bc1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_sect' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_sects' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nr_sects_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/genhd.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='alignment_offset' type-id='a42536cd' visibility='default' filepath='include/linux/genhd.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/genhd.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__dev' type-id='66e487eb' visibility='default' filepath='include/linux/genhd.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='holder_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/genhd.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='policy' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='partno' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='info' type-id='d4f2b9b2' visibility='default' filepath='include/linux/genhd.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='stamp' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='dkstats' type-id='70f1634e' visibility='default' filepath='include/linux/genhd.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='ref' type-id='818799b4' visibility='default' filepath='include/linux/genhd.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_work' type-id='7c0b9fdb' visibility='default' filepath='include/linux/genhd.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/genhd.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_hashinfo' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='124' column='1' id='3482ac54'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ehash' type-id='77011cbc' visibility='default' filepath='include/net/inet_hashtables.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ehash_locks' type-id='cff2d845' visibility='default' filepath='include/net/inet_hashtables.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ehash_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ehash_locks_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind_bucket_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_hashtables.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bhash' type-id='fd53db64' visibility='default' filepath='include/net/inet_hashtables.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bhash_size' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='lhash2_mask' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lhash2' type-id='e0087b68' visibility='default' filepath='include/net/inet_hashtables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='listening_hash' type-id='e3638da9' visibility='default' filepath='include/net/inet_hashtables.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_peer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/inetpeer.h' line='61' column='1' id='27ebfa24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/inetpeer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/inetpeer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total' type-id='95e97e5e' visibility='default' filepath='include/net/inetpeer.h' line='64' 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='124' column='1' id='4816a146'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='00c4cbac' visibility='default' filepath='include/net/ip.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/net/ip.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='4fa91678' visibility='default' filepath='include/net/ip.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv4_devconf' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='17' column='1' id='c2c09950'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='eaa32e2f' visibility='default' filepath='include/linux/inetdevice.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='9e942f0d' visibility='default' filepath='include/linux/inetdevice.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='state' type-id='f066dd3c' visibility='default' filepath='include/linux/inetdevice.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_devconf' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='13' column='1' id='55e8af82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forwarding' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mtu6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='accept_ra' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='accept_redirects' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='autoconf' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dad_transmits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rtr_solicits' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtr_solicit_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='rtr_solicit_max_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rtr_solicit_delay' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='force_mld_version' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mldv1_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mldv2_unsolicited_report_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='use_tempaddr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='temp_valid_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='temp_prefered_lft' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='regen_max_retry' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_desync_factor' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_addresses' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='accept_ra_defrtr' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='accept_ra_min_hop_limit' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='accept_ra_pinfo' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='ignore_routes_with_linkdown' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='accept_ra_rtr_pref' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rtr_probe_interval' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='accept_ra_rt_info_min_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='accept_ra_rt_info_max_plen' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='accept_ra_rt_table' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='proxy_ndp' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='accept_source_route' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='accept_ra_from_local' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='optimistic_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='use_optimistic' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='disable_ipv6' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='drop_unicast_in_l2_multicast' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='accept_dad' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='force_tllao' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ndisc_notify' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='suppress_frag_ndisc' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='accept_ra_mtu' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='drop_unsolicited_na' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stable_secret' type-id='b2fc06b3' visibility='default' filepath='include/linux/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='use_oif_addrs_only' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='keep_addr_on_down' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='seg6_enabled' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='enhanced_dad' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='addr_gen_mode' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='disable_policy' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='ndisc_tclass' type-id='3158a266' visibility='default' filepath='include/linux/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/linux/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ipv6.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_iattrs' size-in-bits='640' is-struct='yes' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='21' column='1' id='7b5435ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_uid' type-id='d80b72e6' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_gid' type-id='094d8048' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_atime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_mtime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_ctime' type-id='40a816ad' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='xattrs' type-id='00ed5110' visibility='default' filepath='fs/kernfs/kernfs-internal.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_open_node' size-in-bits='384' is-struct='yes' visibility='default' filepath='fs/kernfs/file.c' line='34' column='1' id='cc9b8e48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='fs/kernfs/file.c' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='fs/kernfs/file.c' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='poll' type-id='b5ab048f' visibility='default' filepath='fs/kernfs/file.c' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='files' type-id='72f469ec' visibility='default' filepath='fs/kernfs/file.c' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_type' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='64' column='1' id='71e87d49'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/key-type.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='def_datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vet_description' type-id='70487b28' visibility='default' filepath='include/linux/key-type.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preparse' type-id='320c9cb0' visibility='default' filepath='include/linux/key-type.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='free_preparse' type-id='54d7d559' visibility='default' filepath='include/linux/key-type.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='instantiate' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='update' type-id='ab4f7fd7' visibility='default' filepath='include/linux/key-type.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='match_preparse' type-id='0954c675' visibility='default' filepath='include/linux/key-type.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='match_free' type-id='87f6a50e' visibility='default' filepath='include/linux/key-type.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='revoke' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='destroy' type-id='b36896a7' visibility='default' filepath='include/linux/key-type.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='describe' type-id='f68ddecc' visibility='default' filepath='include/linux/key-type.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='read' type-id='a9cc7986' visibility='default' filepath='include/linux/key-type.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key' type-id='99147724' visibility='default' filepath='include/linux/key-type.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lookup_restriction' type-id='7c4a6c91' visibility='default' filepath='include/linux/key-type.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='asym_query' type-id='b6633a3c' visibility='default' filepath='include/linux/key-type.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='asym_eds_op' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='asym_verify_signature' type-id='824beef7' visibility='default' filepath='include/linux/key-type.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/key-type.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/key-type.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/key-type.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock_class' type-id='47479831' visibility='default' filepath='include/linux/key-type.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_user' size-in-bits='704' is-struct='yes' visibility='default' filepath='security/keys/internal.h' line='53' column='1' id='696d238e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='security/keys/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cons_lock' type-id='925167dc' visibility='default' filepath='security/keys/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='security/keys/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='security/keys/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nkeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nikeys' type-id='49178f86' visibility='default' filepath='security/keys/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='security/keys/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='qnkeys' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='qnbytes' type-id='95e97e5e' visibility='default' filepath='security/keys/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kioctx_table' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d0f15d4'/>
+      <class-decl name='kmem_cache' size-in-bits='3712' is-struct='yes' visibility='default' filepath='include/linux/slub_def.h' line='82' column='1' id='a3119fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_slab' type-id='75f3cc0b' visibility='default' filepath='include/linux/slub_def.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f7fe96cb' visibility='default' filepath='include/linux/slub_def.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_partial' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='object_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='offset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='cpu_partial' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='oo' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min' type-id='dfc42026' visibility='default' filepath='include/linux/slub_def.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='allocflags' type-id='3eb7c31c' visibility='default' filepath='include/linux/slub_def.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/slub_def.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctor' type-id='b7f9d8e6' visibility='default' filepath='include/linux/slub_def.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='align' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='red_left_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/slub_def.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/slub_def.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/slub_def.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='kobj_remove_work' type-id='ef9025d0' visibility='default' filepath='include/linux/slub_def.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memcg_params' type-id='f36112b4' visibility='default' filepath='include/linux/slub_def.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='max_attr_size' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='memcg_kset' type-id='89b70200' visibility='default' filepath='include/linux/slub_def.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='random' type-id='7359adad' visibility='default' filepath='include/linux/slub_def.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='random_seq' type-id='807869d3' visibility='default' filepath='include/linux/slub_def.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/slub_def.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='node' type-id='425436e6' visibility='default' filepath='include/linux/slub_def.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kstatfs' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/statfs.h' line='8' column='1' id='ff1c7c9b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_type' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='f_bsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f_bfree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_bavail' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_files' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_ffree' type-id='91ce1af9' visibility='default' filepath='include/linux/statfs.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_fsid' type-id='ac895711' visibility='default' filepath='include/linux/statfs.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_namelen' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_frsize' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='f_flags' type-id='bd54fe1a' visibility='default' filepath='include/linux/statfs.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='f_spare' type-id='5d4602e8' visibility='default' filepath='include/linux/statfs.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='linux_binfmt' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='102' column='1' id='47d6e76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lh' type-id='72f469ec' visibility='default' filepath='include/linux/binfmts.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/binfmts.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='load_binary' type-id='c5c535b4' visibility='default' filepath='include/linux/binfmts.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_shlib' type-id='4da4101d' visibility='default' filepath='include/linux/binfmts.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='core_dump' type-id='be2c124b' visibility='default' filepath='include/linux/binfmts.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_coredump' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mmu_notifier_mm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mmu_notifier.h' line='56' column='1' id='770fc578'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/linux/mmu_notifier.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmu_notifier.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_notes_attrs' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1660' column='1' id='96b6b914'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dir' type-id='d30bdc51' visibility='default' filepath='kernel/module.c' line='1661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notes' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='attrs' type-id='7cfae8e1' visibility='default' filepath='kernel/module.c' line='1663' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module_param_attrs' is-struct='yes' visibility='default' is-declaration-only='yes' id='9e045430'/>
+      <class-decl name='module_sect_attrs' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1547' column='1' id='b43b0dce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='grp' type-id='e4af473b' visibility='default' filepath='kernel/module.c' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nsections' type-id='f0981eeb' visibility='default' filepath='kernel/module.c' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='attrs' type-id='ae08da59' visibility='default' filepath='kernel/module.c' line='1550' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mtd_info' is-struct='yes' visibility='default' is-declaration-only='yes' id='25dc4075'/>
+      <class-decl name='neighbour' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='137' column='1' id='da0e76a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3c330066' visibility='default' filepath='include/net/neighbour.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tbl' type-id='6bbe39a7' visibility='default' filepath='include/net/neighbour.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='parms' type-id='affe0fe2' visibility='default' filepath='include/net/neighbour.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirmed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='updated' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/neighbour.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='arp_queue_len_bytes' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='arp_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='used' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='probes' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='nud_state' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='dead' type-id='8f048e17' visibility='default' filepath='include/net/neighbour.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='ha_lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/neighbour.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ha' type-id='fc872715' visibility='default' filepath='include/net/neighbour.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hh' type-id='0db936dc' visibility='default' filepath='include/net/neighbour.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ops' type-id='66fa472a' visibility='default' filepath='include/net/neighbour.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='primary_key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='166' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_device' size-in-bits='19456' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='1823' column='1' id='5a9929eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/netdevice.h' line='1824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='1825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ifalias' type-id='d81cf24c' visibility='default' filepath='include/linux/netdevice.h' line='1826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mem_end' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mem_start' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='base_addr' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1834' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='napi_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='unreg_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='close_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ptype_all' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ptype_specific' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='adj_list' type-id='19245258' visibility='default' filepath='include/linux/netdevice.h' line='1854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='hw_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wanted_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='vlan_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='hw_enc_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='mpls_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gso_partial_features' type-id='f9f4b16f' visibility='default' filepath='include/linux/netdevice.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='group' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='1865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='stats' type-id='a3566137' visibility='default' filepath='include/linux/netdevice.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='rx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_dropped' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='rx_nohandler' type-id='f22a8abb' visibility='default' filepath='include/linux/netdevice.h' line='1871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='carrier_up_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='carrier_down_count' type-id='49178f86' visibility='default' filepath='include/linux/netdevice.h' line='1875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='wireless_handlers' type-id='3e2bb973' visibility='default' filepath='include/linux/netdevice.h' line='1878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='wireless_data' type-id='e40f7bda' visibility='default' filepath='include/linux/netdevice.h' line='1879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='netdev_ops' type-id='a84ec761' visibility='default' filepath='include/linux/netdevice.h' line='1881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ethtool_ops' type-id='bdf901f8' visibility='default' filepath='include/linux/netdevice.h' line='1882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ndisc_ops' type-id='a2e418a6' visibility='default' filepath='include/linux/netdevice.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='header_ops' type-id='2d747e78' visibility='default' filepath='include/linux/netdevice.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='priv_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='gflags' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4368'>
+          <var-decl name='padded' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='operstate' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='link_mode' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='if_port' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4408'>
+          <var-decl name='dma' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4448'>
+          <var-decl name='min_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1918' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='max_mtu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4512'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4528'>
+          <var-decl name='hard_header_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='min_header_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4560'>
+          <var-decl name='needed_headroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4576'>
+          <var-decl name='needed_tailroom' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4592'>
+          <var-decl name='perm_addr' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4848'>
+          <var-decl name='addr_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4856'>
+          <var-decl name='addr_len' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='upper_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4872'>
+          <var-decl name='lower_level' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4880'>
+          <var-decl name='neigh_priv_len' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='dev_id' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4912'>
+          <var-decl name='dev_port' type-id='8efea9e5' visibility='default' filepath='include/linux/netdevice.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='addr_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4960'>
+          <var-decl name='name_assign_type' type-id='002ac4a6' visibility='default' filepath='include/linux/netdevice.h' line='1937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4968'>
+          <var-decl name='uc_promisc' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='uc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='mc' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='dev_addrs' type-id='44a1ec32' visibility='default' filepath='include/linux/netdevice.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='queues_kset' type-id='89b70200' visibility='default' filepath='include/linux/netdevice.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='promiscuity' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='allmulti' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tipc_ptr' type-id='eeaf504d' visibility='default' filepath='include/linux/netdevice.h' line='1959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip_ptr' type-id='fc6f14a9' visibility='default' filepath='include/linux/netdevice.h' line='1964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='ip6_ptr' type-id='f026b16b' visibility='default' filepath='include/linux/netdevice.h' line='1968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='ieee80211_ptr' type-id='63c7e8e1' visibility='default' filepath='include/linux/netdevice.h' line='1972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='ieee802154_ptr' type-id='165146ad' visibility='default' filepath='include/linux/netdevice.h' line='1973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='dev_addr' type-id='cf536864' visibility='default' filepath='include/linux/netdevice.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='_rx' type-id='31094274' visibility='default' filepath='include/linux/netdevice.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='real_num_rx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='xdp_prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/netdevice.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='gro_flush_timeout' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='rx_handler' type-id='da1cb816' visibility='default' filepath='include/linux/netdevice.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='rx_handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='miniq_ingress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='ingress_queue' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='nf_hooks_ingress' type-id='39a43b40' visibility='default' filepath='include/linux/netdevice.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='broadcast' type-id='fc872715' visibility='default' filepath='include/linux/netdevice.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='rx_cpu_rmap' type-id='52baee64' visibility='default' filepath='include/linux/netdevice.h' line='2003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='index_hlist' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='2005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='_tx' type-id='35b28c4f' visibility='default' filepath='include/linux/netdevice.h' line='2010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='real_num_tx_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='qdisc' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='2013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='qdisc_hash' type-id='ccfd385f' visibility='default' filepath='include/linux/netdevice.h' line='2015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='tx_queue_len' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='tx_global_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/netdevice.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='watchdog_timeo' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='xps_cpus_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='xps_rxqs_map' type-id='bf237056' visibility='default' filepath='include/linux/netdevice.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='miniq_egress' type-id='b70f37f7' visibility='default' filepath='include/linux/netdevice.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='watchdog_timer' type-id='abe41e67' visibility='default' filepath='include/linux/netdevice.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='pcpu_refcnt' type-id='7292109c' visibility='default' filepath='include/linux/netdevice.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='todo_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='link_watch_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg_state' type-id='08f5ca17' visibility='default' filepath='include/linux/netdevice.h' line='2043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9480'>
+          <var-decl name='dismantle' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rtnl_link_state' type-id='08f5ca18' visibility='default' filepath='include/linux/netdevice.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='needs_free_netdev' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='priv_destructor' type-id='548eee3a' visibility='default' filepath='include/linux/netdevice.h' line='2053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='nd_net' type-id='c9df1e6c' visibility='default' filepath='include/linux/netdevice.h' line='2059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='ml_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='2062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='ml_priv_type' type-id='9c6bf017' visibility='default' filepath='include/linux/netdevice.h' line='2063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='' type-id='ca29cb68' visibility='default' filepath='include/linux/netdevice.h' line='2065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/netdevice.h' line='2078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='sysfs_groups' type-id='db1b7234' visibility='default' filepath='include/linux/netdevice.h' line='2079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17600'>
+          <var-decl name='sysfs_rx_queue_group' type-id='8ff9530e' visibility='default' filepath='include/linux/netdevice.h' line='2080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17664'>
+          <var-decl name='rtnl_link_ops' type-id='999c8d90' visibility='default' filepath='include/linux/netdevice.h' line='2082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17760'>
+          <var-decl name='gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='2088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17776'>
+          <var-decl name='num_tc' type-id='9b7e9486' visibility='default' filepath='include/linux/netdevice.h' line='2093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17792'>
+          <var-decl name='tc_to_txq' type-id='b5839634' visibility='default' filepath='include/linux/netdevice.h' line='2094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='prio_tc_map' type-id='0d8415b5' visibility='default' filepath='include/linux/netdevice.h' line='2095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='phydev' type-id='7efbcaaf' visibility='default' filepath='include/linux/netdevice.h' line='2103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='sfp_bus' type-id='6daf6abd' visibility='default' filepath='include/linux/netdevice.h' line='2104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_tx_busylock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_running_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='qdisc_xmit_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='addr_list_lock_key' type-id='47479831' visibility='default' filepath='include/linux/netdevice.h' line='2108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='proto_down' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='wol_enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='2110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18880'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='net_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/generic.h' line='28' column='1' id='8e5f5512'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1a99b3b8' visibility='default' filepath='include/net/netns/generic.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='75' column='1' id='a27aef61'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='117abbea' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event_notifier' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='161' column='1' id='602fd1a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fcn' type-id='c8fa3070' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_entries' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='101' column='1' id='85c08b52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_hook_entries' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hooks' type-id='84607bca' visibility='default' filepath='include/linux/netfilter.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_logger' is-struct='yes' visibility='default' is-declaration-only='yes' id='01c546da'/>
+      <class-decl name='nf_queue_handler' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='27' column='1' id='b77325d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='outfn' type-id='c2147f48' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nf_hook_drop' type-id='9b92b29b' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nfs4_lock_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='a558a366'/>
+      <class-decl name='nlm_lockowner' is-struct='yes' visibility='default' is-declaration-only='yes' id='92afe5f3'/>
+      <class-decl name='poll_table_struct' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/poll.h' line='43' column='1' id='415eecf1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_qproc' type-id='650104ba' visibility='default' filepath='include/linux/poll.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_key' type-id='8f254b08' visibility='default' filepath='include/linux/poll.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_acl' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/posix_acl.h' line='27' column='1' id='605b61bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a_refcount' type-id='64615833' visibility='default' filepath='include/linux/posix_acl.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='a_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/posix_acl.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='a_count' type-id='f0981eeb' visibility='default' filepath='include/linux/posix_acl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='a_entries' type-id='a51f6b3c' visibility='default' filepath='include/linux/posix_acl.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='proc_dir_entry' size-in-bits='1408' is-struct='yes' visibility='default' filepath='fs/proc/internal.h' line='30' column='1' id='fe4ffa7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_use' type-id='49178f86' visibility='default' filepath='fs/proc/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='fs/proc/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_openers' type-id='72f469ec' visibility='default' filepath='fs/proc/internal.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_unload_lock' type-id='fb4018a0' visibility='default' filepath='fs/proc/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_unload_completion' type-id='389faaf7' visibility='default' filepath='fs/proc/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc_iops' type-id='de2c232c' visibility='default' filepath='fs/proc/internal.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='proc_fops' type-id='61758ee5' visibility='default' filepath='fs/proc/internal.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proc_dops' type-id='1ee57353' visibility='default' filepath='fs/proc/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='1371a02f' visibility='default' filepath='fs/proc/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='7c2b18ab' visibility='default' filepath='fs/proc/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='fs/proc/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='state_size' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='low_ino' type-id='f0981eeb' visibility='default' filepath='fs/proc/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nlink' type-id='6fa67d85' visibility='default' filepath='fs/proc/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='fs/proc/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='fs/proc/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='fs/proc/internal.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='parent' type-id='d077e928' visibility='default' filepath='fs/proc/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='subdir' type-id='dec44472' visibility='default' filepath='fs/proc/internal.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='subdir_node' type-id='2a8a6332' visibility='default' filepath='fs/proc/internal.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='fs/proc/internal.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='fs/proc/internal.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='namelen' type-id='f9b06939' visibility='default' filepath='fs/proc/internal.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='inline_name' type-id='e84913bd' visibility='default' filepath='fs/proc/internal.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='prot_inuse' size-in-bits='2048' is-struct='yes' visibility='default' filepath='net/core/sock.c' line='3263' column='1' id='ac763c5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='93e41790' visibility='default' filepath='net/core/sock.c' line='3264' 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='185' column='1' id='384b6d84'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/ip6_fib.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='from' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt6i_dst' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rt6i_src' type-id='d7f36d8e' visibility='default' filepath='include/net/ip6_fib.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rt6i_gateway' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rt6i_idev' type-id='f026b16b' visibility='default' filepath='include/net/ip6_fib.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rt6i_flags' type-id='19c2251e' visibility='default' filepath='include/net/ip6_fib.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rt6i_uncached' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rt6i_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/ip6_fib.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rt6i_nfheader_len' type-id='8efea9e5' visibility='default' filepath='include/net/ip6_fib.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='202' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rt6_statistics' size-in-bits='224' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='338' column='1' id='aa112583'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fib_route_nodes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fib_rt_entries' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fib_rt_cache' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_discarded_routes' type-id='3f1a6b60' visibility='default' filepath='include/net/ip6_fib.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fib_rt_alloc' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fib_rt_uncache' type-id='49178f86' visibility='default' filepath='include/net/ip6_fib.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seg6_pernet_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='990cce78'/>
+      <class-decl name='sock' size-in-bits='6720' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='326' column='1' id='a240f41d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__sk_common' type-id='5999c5f7' visibility='default' filepath='include/net/sock.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sk_lock' type-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sk_drops' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sk_rcvlowat' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sk_error_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sk_rx_skb_cache' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sk_receive_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sk_backlog' type-id='6a96185e' visibility='default' filepath='include/net/sock.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sk_forward_alloc' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sk_ll_usec' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sk_napi_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sk_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sk_filter' type-id='90956edc' visibility='default' filepath='include/net/sock.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='' type-id='a29f8367' visibility='default' filepath='include/net/sock.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sk_policy' type-id='eb61ae4b' visibility='default' filepath='include/net/sock.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sk_rx_dst' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sk_dst_cache' type-id='141b6427' visibility='default' filepath='include/net/sock.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sk_omem_alloc' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sk_sndbuf' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sk_wmem_queued' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sk_wmem_alloc' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sk_tsq_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='' type-id='fc714247' visibility='default' filepath='include/net/sock.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sk_tx_skb_cache' type-id='0fbf3cfd' 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_write_queue' type-id='e61c85d0' visibility='default' filepath='include/net/sock.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sk_peek_off' type-id='3158a266' visibility='default' filepath='include/net/sock.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sk_write_pending' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sk_dst_pending_confirm' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sk_pacing_status' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sk_sndtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sk_timer' type-id='abe41e67' visibility='default' filepath='include/net/sock.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sk_priority' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sk_mark' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sk_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sk_max_pacing_rate' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sk_frag' type-id='06c0432f' visibility='default' filepath='include/net/sock.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sk_route_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sk_route_nocaps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sk_route_forced_caps' type-id='f9f4b16f' visibility='default' filepath='include/net/sock.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sk_gso_type' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sk_gso_max_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sk_allocation' type-id='3eb7c31c' visibility='default' filepath='include/net/sock.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4320'>
+          <var-decl name='sk_txhash' type-id='3f1a6b60' visibility='default' filepath='include/net/sock.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='__sk_flags_offset' type-id='c764d637' visibility='default' filepath='include/net/sock.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk_padding' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sk_kern_sock' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sk_no_check_tx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='sk_no_check_rx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='sk_userlocks' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sk_protocol' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sk_type' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sk_gso_max_segs' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4400'>
+          <var-decl name='sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sk_lingertime' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sk_prot_creator' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sk_callback_lock' type-id='ac16795b' visibility='default' filepath='include/net/sock.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='sk_err' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4640'>
+          <var-decl name='sk_err_soft' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='sk_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='sk_max_ack_backlog' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='sk_uid' type-id='d80b72e6' visibility='default' filepath='include/net/sock.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='sk_peer_pid' type-id='b94e5398' visibility='default' filepath='include/net/sock.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sk_peer_cred' type-id='bc33861a' visibility='default' filepath='include/net/sock.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='sk_rcvtimeo' type-id='bd54fe1a' visibility='default' filepath='include/net/sock.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='sk_stamp' type-id='fbc017ef' visibility='default' filepath='include/net/sock.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='sk_tsflags' type-id='1dc6a898' visibility='default' filepath='include/net/sock.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5072'>
+          <var-decl name='sk_shutdown' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5088'>
+          <var-decl name='sk_tskey' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='sk_zckey' type-id='49178f86' visibility='default' filepath='include/net/sock.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5152'>
+          <var-decl name='sk_clockid' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk_txtime_deadline_mode' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sk_txtime_report_errors' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sk_txtime_unused' type-id='f9b06939' visibility='default' filepath='include/net/sock.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='sk_socket' type-id='13103032' visibility='default' filepath='include/net/sock.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sk_user_data' type-id='eaa32e2f' visibility='default' filepath='include/net/sock.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sk_security' type-id='eaa32e2f' 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_cgrp_data' type-id='8544f103' visibility='default' filepath='include/net/sock.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='sk_memcg' type-id='223696fb' visibility='default' filepath='include/net/sock.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='sk_state_change' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='sk_data_ready' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sk_write_space' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sk_error_report' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='sk_backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='sk_destruct' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='sk_reuseport_cb' type-id='1d22b7e5' visibility='default' filepath='include/net/sock.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='sk_bpf_storage' type-id='f3f553e2' visibility='default' filepath='include/net/sock.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sk_rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='' type-id='b3414a3c' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='android_oem_data1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='536' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key_mod' size-in-bits='192' is-struct='yes' visibility='default' filepath='kernel/jump_label.c' line='510' column='1' id='5081ed08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='kernel/jump_label.c' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='kernel/jump_label.c' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='kernel/jump_label.c' line='513' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='swap_info_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='3eb82749'/>
+      <class-decl name='taskstats' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/uapi/linux/taskstats.h' line='41' column='1' id='3a97b64f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='d315442e' 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='3f1a6b60' 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='8f048e17' 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='8f048e17' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='16dc656a' 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='8f048e17' 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='c216126b' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' visibility='default' filepath='include/uapi/linux/taskstats.h' line='170' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_congestion_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1038' column='1' id='54718f09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/tcp.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssthresh' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cong_avoid' type-id='ece3af1e' visibility='default' filepath='include/net/tcp.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_state' type-id='f5feb7a4' visibility='default' filepath='include/net/tcp.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cwnd_event' type-id='bfacbc7a' visibility='default' filepath='include/net/tcp.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='in_ack_event' type-id='815f64bf' visibility='default' filepath='include/net/tcp.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='undo_cwnd' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pkts_acked' type-id='bffb5883' visibility='default' filepath='include/net/tcp.h' line='1061' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_tso_segs' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='sndbuf_expand' type-id='8af06487' visibility='default' filepath='include/net/tcp.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cong_control' type-id='636d3a20' visibility='default' filepath='include/net/tcp.h' line='1069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_info' type-id='14ca5c08' visibility='default' filepath='include/net/tcp.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/tcp.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/tcp.h' line='1075' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_fastopen_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='1676' column='1' id='f77d4717'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='5b02a6fc' visibility='default' filepath='include/net/tcp.h' line='1677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/tcp.h' line='1679' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_eval_map' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/tracepoint.h' line='27' column='1' id='49b910cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='eval_string' type-id='80f4b756' visibility='default' filepath='include/linux/tracepoint.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='eval_value' type-id='7359adad' visibility='default' filepath='include/linux/tracepoint.h' line='30' 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='254' column='1' id='fd48a6e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='class' type-id='3570c570' visibility='default' filepath='include/linux/trace_events.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='7d3eb798' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event' type-id='78b26ac9' visibility='default' filepath='include/linux/trace_events.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='print_fmt' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='perf_refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perf_events' type-id='030d0b18' visibility='default' filepath='include/linux/trace_events.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prog_array' type-id='380c7edc' visibility='default' filepath='include/linux/trace_events.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='perf_perm' type-id='7fa32aba' visibility='default' filepath='include/linux/trace_events.h' line='283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_audit_buf' is-struct='yes' visibility='default' is-declaration-only='yes' id='9127cd0e'/>
+      <class-decl name='tty_struct' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='290' column='1' id='4c8d9cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/tty.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ldisc_sem' type-id='d3aa38f0' visibility='default' filepath='include/linux/tty.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ldisc' type-id='e0bbd59c' visibility='default' filepath='include/linux/tty.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='atomic_write_lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='legacy_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='throttle_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='termios_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/tty.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='winsize_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ctrl_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='flow_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='termios_locked' type-id='2f8662b5' visibility='default' filepath='include/linux/tty.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='termiox' type-id='684d860d' visibility='default' filepath='include/linux/tty.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/tty.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='session' type-id='b94e5398' visibility='default' filepath='include/linux/tty.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='winsize' type-id='a818b7a0' visibility='default' filepath='include/linux/tty.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33'>
+          <var-decl name='flow_stopped' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='hw_stopped' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ctrl_status' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='packet' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='unused_ctrl' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='receive_room' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='flow_change' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='link' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/tty.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='write_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='read_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='hangup_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='disc_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='tty_files' type-id='72f469ec' visibility='default' filepath='include/linux/tty.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='closing' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='write_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='write_cnt' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='SAK_work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='port' type-id='ec77b5b8' visibility='default' filepath='include/linux/tty.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='352' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uevent_sock' is-struct='yes' visibility='default' is-declaration-only='yes' id='0c7ab04d'/>
+      <class-decl name='unicode_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='a24978a1'/>
+      <class-decl name='uprobe' is-struct='yes' visibility='default' is-declaration-only='yes' id='b7e0fed2'/>
+      <class-decl name='userfaultfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='526b1662'/>
+      <class-decl name='vfsmount' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/mount.h' line='69' column='1' id='19e88833'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt_root' type-id='27675065' visibility='default' filepath='include/linux/mount.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mnt_sb' type-id='42c8f564' visibility='default' filepath='include/linux/mount.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mnt_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/mount.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mount.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='workqueue_struct' size-in-bits='2560' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='243' column='1' id='a5159c01'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwqs' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='kernel/workqueue.c' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_pwqs_to_flush' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='first_flusher' type-id='ec037527' visibility='default' filepath='kernel/workqueue.c' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flusher_queue' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flusher_overflow' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='maydays' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescuer' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_drainers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='saved_max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='unbound_attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='dfl_pwq' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='wq_dev' type-id='5cebc26e' visibility='default' filepath='kernel/workqueue.c' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='name' type-id='6653bb13' visibility='default' filepath='kernel/workqueue.c' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cpu_pwqs' type-id='a7a31b92' visibility='default' filepath='kernel/workqueue.c' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='numa_pwq_tbl' type-id='55b5dc02' visibility='default' filepath='kernel/workqueue.c' line='284' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='writeback_control' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='51' column='1' id='705711f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_to_write' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages_skipped' type-id='bd54fe1a' visibility='default' filepath='include/linux/writeback.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='range_start' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='range_end' type-id='69bf7bee' visibility='default' filepath='include/linux/writeback.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sync_mode' type-id='cf92d981' visibility='default' filepath='include/linux/writeback.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='for_kupdate' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='for_background' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='tagged_writepages' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='for_reclaim' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='range_cyclic' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='for_sync' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='no_cgroup_owner' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='punt_to_cgroup' type-id='f0981eeb' visibility='default' filepath='include/linux/writeback.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wb' type-id='f885ca7d' visibility='default' filepath='include/linux/writeback.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='include/linux/writeback.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wb_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='wb_lcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wb_tcand_id' type-id='95e97e5e' visibility='default' filepath='include/linux/writeback.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wb_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='wb_lcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wb_tcand_bytes' type-id='b59d7dce' visibility='default' filepath='include/linux/writeback.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xattr_handler' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/xattr.h' line='28' column='1' id='2d3dd5e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prefix' type-id='80f4b756' visibility='default' filepath='include/linux/xattr.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/xattr.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='439be051' visibility='default' filepath='include/linux/xattr.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='get' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set' type-id='d5f76b20' visibility='default' filepath='include/linux/xattr.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xol_area' is-struct='yes' visibility='default' is-declaration-only='yes' id='c39df2b8'/>
+      <class-decl name='xt_table' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='223' column='1' id='469df90e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='b6316a7f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='table_init' type-id='e83d6bbe' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='639bec1b' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='30e60925' size-in-bits='832' id='e521ce61'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd561d05' size-in-bits='192' id='59bd9302'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='47841236' size-in-bits='256' id='bb2d0d4e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='192' id='fc293b5f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e666abe' size-in-bits='192' id='e6ff92fb'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='64' id='e4266c7e'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='96' id='e024279b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='288' id='e415235d'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a21c4412' size-in-bits='16384' id='02d77f24'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='64' id='5fd0d2fb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='094d8048' size-in-bits='infinite' id='da6e2919'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='1664' id='5e747b58'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f6507b0a' size-in-bits='infinite' id='b969bd7a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='47479831' id='9c02e2a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b0690d78' size-in-bits='1728' id='83ae09a1'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='192' id='d82cf371'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39a43b40' size-in-bits='320' id='94310593'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ce848ab1' size-in-bits='2880' id='a09ef5a6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b94e5398' size-in-bits='256' id='3449295e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e878d564' size-in-bits='1344' id='55d1e02d'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2a8a6332' size-in-bits='384' id='d46544fa'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='60dcbf6c' size-in-bits='2048' id='80f344e1'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <type-decl name='signed char' size-in-bits='8' id='28577a57'/>
+      <array-type-def dimensions='1' type-id='8dee6d89' size-in-bits='192' id='2f7565c6'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='56798c81' size-in-bits='2304' id='01115b96'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='2368' id='2b89ba50'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='16' id='cf114704'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='24' id='930ea9f9'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d71093' size-in-bits='480' id='df6d2206'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='256' id='fc872715'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='320' id='67c1c82c'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='448' id='27cbf0c8'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='64' id='0d532ec1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='192' id='0d5c291d'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='7680' id='1868bbfa'>
+        <subrange length='120' type-id='7ff19f0f' id='1ec4f032'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1024' id='d2baa450'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1792' id='8bbc0f7f'>
+        <subrange length='28' type-id='7ff19f0f' id='3db583d7'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='1856' id='4fbdefa2'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='128' id='f05e8e77'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2944' id='d964a553'>
+        <subrange length='46' type-id='7ff19f0f' id='8b86bc1b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='256' id='f46d9f4d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='384' id='f0691bd3'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='576' id='307ac9b4'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='infinite' id='c99b5ecd'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='256' id='209ef23f'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9b61d1a6' size-in-bits='384' id='bd1ec77b'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <union-decl name='kernfs_node_id' size-in-bits='64' visibility='default' filepath='include/linux/kernfs.h' line='109' column='1' id='3dfef700'>
+        <data-member access='public'>
+          <var-decl name='' type-id='9d3d640f' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='120' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='7296' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1' id='993073b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmap' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mm_rb' type-id='dec44472' visibility='default' filepath='include/linux/mm_types.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vmacache_seqnum' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/mm_types.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mmap_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mmap_legacy_base' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task_size' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='highest_vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pgd' type-id='2e97ceaf' visibility='default' filepath='include/linux/mm_types.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='membarrier_state' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mm_users' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mm_count' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pgtables_bytes' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='map_count' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='page_table_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/mm_types.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mmlist' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hiwater_rss' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='hiwater_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='total_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='locked_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='pinned_vm' type-id='28ee064c' visibility='default' filepath='include/linux/mm_types.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='data_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='exec_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='stack_vm' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='def_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='arg_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='start_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='end_code' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='start_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='end_data' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='start_brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='brk' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='start_stack' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='arg_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='arg_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='env_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='env_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='saved_auxv' type-id='d964a553' visibility='default' filepath='include/linux/mm_types.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rss_stat' type-id='2235a2cb' visibility='default' filepath='include/linux/mm_types.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='binfmt' type-id='7cc59444' visibility='default' filepath='include/linux/mm_types.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='context' type-id='0eb9c3fd' visibility='default' filepath='include/linux/mm_types.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='core_state' type-id='90ad83aa' visibility='default' filepath='include/linux/mm_types.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='ioctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='ioctx_table' type-id='122191b2' visibility='default' filepath='include/linux/mm_types.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/mm_types.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='exe_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='mmu_notifier_mm' type-id='cc546a3e' visibility='default' filepath='include/linux/mm_types.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='tlb_flush_pending' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='uprobes_state' type-id='6308a819' visibility='default' filepath='include/linux/mm_types.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='async_put_work' type-id='ef9025d0' visibility='default' filepath='include/linux/mm_types.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='544' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='key_payload' size-in-bits='256' visibility='default' filepath='include/linux/key.h' line='111' column='1' id='2888d74a'>
+        <data-member access='public'>
+          <var-decl name='rcu_data0' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='209ef23f' visibility='default' filepath='include/linux/key.h' line='113' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='pgprot_t' type-id='051883a9' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='2e2dcbd3'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='2e2dcbd3' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1' id='051883a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgprot' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pteval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='14' column='1' id='e044eb0d'/>
+      <union-decl name='__anonymous_union__' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1' id='cc072175'>
+        <data-member access='public'>
+          <var-decl name='shared' type-id='0c408f16' visibility='default' filepath='include/linux/mm_types.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='anon_name' type-id='80f4b756' visibility='default' filepath='include/linux/mm_types.h' line='333' column='1'/>
+        </data-member>
+      </union-decl>
+      <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='329' column='1' id='0c408f16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb_subtree_last' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='331' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_operations_struct' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='549' column='1' id='19795245'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='170cc62f' visibility='default' filepath='include/linux/mm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='split' type-id='6910c028' visibility='default' filepath='include/linux/mm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mremap' type-id='6e731d78' visibility='default' filepath='include/linux/mm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fault' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='huge_fault' type-id='5e15576d' visibility='default' filepath='include/linux/mm.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='map_pages' type-id='8f17d05e' visibility='default' filepath='include/linux/mm.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pagesize' type-id='1a17e40d' visibility='default' filepath='include/linux/mm.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='page_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pfn_mkwrite' type-id='bb28da1c' visibility='default' filepath='include/linux/mm.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='access' type-id='6850e780' visibility='default' filepath='include/linux/mm.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='name' type-id='e803acd0' visibility='default' filepath='include/linux/mm.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='find_special_page' type-id='d9e60bb2' visibility='default' filepath='include/linux/mm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='614' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='vm_fault_t' type-id='f0981eeb' filepath='include/linux/mm_types.h' line='668' column='1' id='e9265215'/>
+      <class-decl name='vm_fault' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='495' column='1' id='807afe73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/mm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/mm.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmd' type-id='6d5994d5' visibility='default' filepath='include/linux/mm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pud' type-id='af00e73d' visibility='default' filepath='include/linux/mm.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='orig_pte' type-id='4b2795fc' visibility='default' filepath='include/linux/mm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cow_page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/mm.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='pte' type-id='e8d572d7' visibility='default' filepath='include/linux/mm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ptl' type-id='cff2d845' visibility='default' filepath='include/linux/mm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prealloc_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='vma_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vma_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_vendor_data2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm.h' line='534' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmd_t' type-id='ed9a87e0' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1' id='9ecf9226'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='9ecf9226' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1' id='ed9a87e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmd' type-id='cb5c7c0f' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pmdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='15' column='1' id='cb5c7c0f'/>
+      <typedef-decl name='pud_t' type-id='735a5a3d' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='ac9f3c7e'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac9f3c7e' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1' id='735a5a3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='12aa8ce4' visibility='default' filepath='include/asm-generic/pgtable-nop4d-hack.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgd_t' type-id='59473550' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='12aa8ce4'/>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='12aa8ce4' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1' id='59473550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgd' type-id='df6d7e75' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgdval_t' type-id='91ce1af9' filepath='arch/arm64/include/asm/pgtable-types.h' line='17' column='1' id='df6d7e75'/>
+      <typedef-decl name='pte_t' type-id='d7f0cb3c' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1' id='4b2795fc'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='4b2795fc' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1' id='d7f0cb3c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pte' type-id='e044eb0d' visibility='default' filepath='arch/arm64/include/asm/pgtable-types.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1' id='aa291214'>
+        <data-member access='public'>
+          <var-decl name='' type-id='9228d425' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='4877c7ec' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7d00e4f0' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='1c2d6ac7' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='ce8e16a4' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='b32fec8c' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='754ab6d5' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/mm_types.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='80' column='1' id='9228d425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lru' type-id='72f469ec' 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='f57039f0' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='address_space' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='458' column='1' id='0fd82dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='host' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_pages' type-id='d39738ac' visibility='default' filepath='include/linux/fs.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/fs.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_mmap_writable' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_mmap' type-id='6fe1603d' visibility='default' filepath='include/linux/fs.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mmap_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nrpages' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nrexceptional' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='writeback_index' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='a_ops' type-id='7311f672' visibility='default' filepath='include/linux/fs.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='private_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='482' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inode' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='651' column='1' id='fe070fe8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='i_opflags' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_default_acl' type-id='2871909b' visibility='default' filepath='include/linux/fs.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='i_op' type-id='de2c232c' visibility='default' filepath='include/linux/fs.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='i_sb' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='i_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='i_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='i_ino' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='' type-id='3ee18b51' visibility='default' filepath='include/linux/fs.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='i_rdev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='i_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='i_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='i_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='i_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='i_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='i_bytes' type-id='8efea9e5' visibility='default' filepath='include/linux/fs.h' line='690' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='i_blkbits' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1144'>
+          <var-decl name='i_write_hint' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='i_blocks' type-id='17345459' visibility='default' filepath='include/linux/fs.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='i_state' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='i_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dirtied_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dirtied_time_when' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='i_hash' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='i_io_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='i_wb' type-id='f885ca7d' visibility='default' filepath='include/linux/fs.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='i_wb_frn_winner' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='i_wb_frn_avg_time' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2160'>
+          <var-decl name='i_wb_frn_history' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='i_lru' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='i_sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='i_wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='' type-id='cbd4a95b' visibility='default' filepath='include/linux/fs.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='i_version' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='i_sequence' type-id='28ee064c' visibility='default' filepath='include/linux/fs.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='i_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='i_dio_count' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='i_writecount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='i_readcount' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='' type-id='67f3b119' visibility='default' filepath='include/linux/fs.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='i_flctx' type-id='731257ff' visibility='default' filepath='include/linux/fs.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='i_data' type-id='0fd82dc2' visibility='default' filepath='include/linux/fs.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='i_devices' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='' type-id='d1afa4fe' visibility='default' filepath='include/linux/fs.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='i_generation' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4896'>
+          <var-decl name='i_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='i_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='i_crypt_info' type-id='1ea8c5af' visibility='default' filepath='include/linux/fs.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='i_verity_info' type-id='ba18e248' visibility='default' filepath='include/linux/fs.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='i_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='764' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='umode_t' type-id='8efea9e5' filepath='include/linux/types.h' line='19' column='1' id='2594b00f'/>
+      <typedef-decl name='kgid_t' type-id='bac1227a' filepath='include/linux/uidgid.h' line='28' column='1' id='094d8048'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='094d8048' visibility='default' filepath='include/linux/uidgid.h' line='26' column='1' id='bac1227a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='2bb2b96f' visibility='default' filepath='include/linux/uidgid.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gid_t' type-id='b4413cee' filepath='include/linux/types.h' line='33' column='1' id='2bb2b96f'/>
+      <typedef-decl name='__kernel_gid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='50' column='1' id='b4413cee'/>
+      <class-decl name='inode_operations' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1932' column='1' id='5f5aa1ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='02f90a61' visibility='default' filepath='include/linux/fs.h' line='1933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get_link' type-id='76ae8e1d' visibility='default' filepath='include/linux/fs.h' line='1934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='permission' type-id='f4f91b99' visibility='default' filepath='include/linux/fs.h' line='1935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_acl' type-id='7f30b822' visibility='default' filepath='include/linux/fs.h' line='1936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readlink' type-id='a57bd028' visibility='default' filepath='include/linux/fs.h' line='1938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='c9cd0e09' visibility='default' filepath='include/linux/fs.h' line='1940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='link' type-id='4b872e00' visibility='default' filepath='include/linux/fs.h' line='1941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlink' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='symlink' type-id='234843b5' visibility='default' filepath='include/linux/fs.h' line='1943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mkdir' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rmdir' type-id='7f5be7f6' visibility='default' filepath='include/linux/fs.h' line='1945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mknod' type-id='f9e0c0e5' visibility='default' filepath='include/linux/fs.h' line='1946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rename' type-id='7733ef81' visibility='default' filepath='include/linux/fs.h' line='1947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='setattr' type-id='c237e829' visibility='default' filepath='include/linux/fs.h' line='1949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='getattr' type-id='0b787edf' visibility='default' filepath='include/linux/fs.h' line='1950' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='listxattr' type-id='3494e4bb' visibility='default' filepath='include/linux/fs.h' line='1951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fiemap' type-id='0508acce' visibility='default' filepath='include/linux/fs.h' line='1952' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='update_time' type-id='64ecf6a5' visibility='default' filepath='include/linux/fs.h' line='1954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='atomic_open' type-id='d3807eb0' visibility='default' filepath='include/linux/fs.h' line='1955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tmpfile' type-id='98c2d938' visibility='default' filepath='include/linux/fs.h' line='1958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_acl' type-id='820976ef' visibility='default' filepath='include/linux/fs.h' line='1959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1964' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='90' column='1' id='d6ebca75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dcache.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='d_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/dcache.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_parent' type-id='27675065' visibility='default' filepath='include/linux/dcache.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_name' type-id='02244303' visibility='default' filepath='include/linux/dcache.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_inode' type-id='7e666abe' visibility='default' filepath='include/linux/dcache.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_iname' type-id='fc872715' visibility='default' filepath='include/linux/dcache.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_lockref' type-id='60efdfd3' visibility='default' filepath='include/linux/dcache.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_op' type-id='1ee57353' visibility='default' filepath='include/linux/dcache.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_sb' type-id='42c8f564' visibility='default' filepath='include/linux/dcache.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_time' type-id='7359adad' visibility='default' filepath='include/linux/dcache.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='d_fsdata' type-id='eaa32e2f' visibility='default' filepath='include/linux/dcache.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='ba311a3a' visibility='default' filepath='include/linux/dcache.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='d_child' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='d_subdirs' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='d_u' type-id='ba0a0e48' visibility='default' filepath='include/linux/dcache.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='124' 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='8db0df1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d09d4bab' 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='e89ddc13' 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='48' column='1' id='02244303'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c047989c' visibility='default' filepath='include/linux/dcache.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/linux/dcache.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='49' column='1' id='c047989c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a2c0764' visibility='default' filepath='include/linux/dcache.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hash_len' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='53' 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/dcache.h' line='50' column='1' id='7a2c0764'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/dcache.h' line='51' 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='60efdfd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d9c71193' visibility='default' filepath='include/linux/lockref.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='26' column='1' id='d9c71193'>
+        <data-member access='public'>
+          <var-decl name='lock_count' type-id='d3130597' visibility='default' filepath='include/linux/lockref.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a58bf78' visibility='default' filepath='include/linux/lockref.h' line='30' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/lockref.h' line='30' column='1' id='7a58bf78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='95e97e5e' visibility='default' filepath='include/linux/lockref.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dentry_operations' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/dcache.h' line='139' column='1' id='e4992400'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_weak_revalidate' type-id='30ab2c05' visibility='default' filepath='include/linux/dcache.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_hash' type-id='65cea51e' visibility='default' filepath='include/linux/dcache.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_compare' type-id='fb86b772' visibility='default' filepath='include/linux/dcache.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_delete' type-id='a50c1d00' visibility='default' filepath='include/linux/dcache.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_init' type-id='6241aa4f' visibility='default' filepath='include/linux/dcache.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_release' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_prune' type-id='f42e15b8' visibility='default' filepath='include/linux/dcache.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_iput' type-id='40363cbb' visibility='default' filepath='include/linux/dcache.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_dname' type-id='84618a95' visibility='default' filepath='include/linux/dcache.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_automount' type-id='da81d789' visibility='default' filepath='include/linux/dcache.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_manage' type-id='6eededc8' visibility='default' filepath='include/linux/dcache.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_real' type-id='3cce524c' visibility='default' filepath='include/linux/dcache.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_canonical_path' type-id='8581ac2b' visibility='default' filepath='include/linux/dcache.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/dcache.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='path' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/path.h' line='8' column='1' id='b5382ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mnt' type-id='549da823' 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='27675065' visibility='default' filepath='include/linux/path.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='super_block' size-in-bits='12800' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1473' column='1' id='bc39a8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='s_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='1475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='s_blocksize_bits' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='s_blocksize' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='s_maxbytes' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s_type' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='1479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s_op' type-id='f7c6dcac' visibility='default' filepath='include/linux/fs.h' line='1480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dq_op' type-id='85741a2a' visibility='default' filepath='include/linux/fs.h' line='1481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='s_qcop' type-id='2cb49514' visibility='default' filepath='include/linux/fs.h' line='1482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_export_op' type-id='ab932c45' visibility='default' filepath='include/linux/fs.h' line='1483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='s_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='s_iflags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='s_magic' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='s_root' type-id='27675065' visibility='default' filepath='include/linux/fs.h' line='1487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='s_umount' type-id='f19fdb93' visibility='default' filepath='include/linux/fs.h' line='1488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='s_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='s_active' type-id='49178f86' visibility='default' filepath='include/linux/fs.h' line='1490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='s_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='s_xattr' type-id='cb49d4b8' visibility='default' filepath='include/linux/fs.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='s_cop' type-id='8d31a8d6' visibility='default' filepath='include/linux/fs.h' line='1496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='s_master_keys' type-id='204a4632' visibility='default' filepath='include/linux/fs.h' line='1497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='s_vop' type-id='e3008443' visibility='default' filepath='include/linux/fs.h' line='1500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='s_encoding' type-id='72835629' visibility='default' filepath='include/linux/fs.h' line='1503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='s_encoding_flags' type-id='d315442e' visibility='default' filepath='include/linux/fs.h' line='1504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='s_roots' type-id='def98e71' visibility='default' filepath='include/linux/fs.h' line='1506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='s_mounts' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='s_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='1508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='s_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='1509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='s_mtd' type-id='58ed56f5' visibility='default' filepath='include/linux/fs.h' line='1510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='s_instances' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='s_quota_types' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='s_dquot' type-id='c26e4ad8' visibility='default' filepath='include/linux/fs.h' line='1513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='s_writers' type-id='fb476a2b' visibility='default' filepath='include/linux/fs.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='s_fs_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='s_time_gran' type-id='19c2251e' visibility='default' filepath='include/linux/fs.h' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='s_time_min' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='s_time_max' type-id='1afd27ac' visibility='default' filepath='include/linux/fs.h' line='1528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='s_fsnotify_mask' type-id='3f1a6b60' visibility='default' filepath='include/linux/fs.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='s_fsnotify_marks' type-id='994d9d61' visibility='default' filepath='include/linux/fs.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='s_id' type-id='16dc656a' visibility='default' filepath='include/linux/fs.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='s_uuid' type-id='ec55eb74' visibility='default' filepath='include/linux/fs.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='s_max_links' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8864'>
+          <var-decl name='s_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='s_vfs_rename_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='s_subtype' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='s_d_op' type-id='1ee57353' visibility='default' filepath='include/linux/fs.h' line='1552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='cleancache_poolid' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='s_shrink' type-id='27cb404f' visibility='default' filepath='include/linux/fs.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='s_remove_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9920'>
+          <var-decl name='s_fsnotify_inode_refs' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='s_readonly_remount' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='s_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='s_dio_done_wq' type-id='242e3d19' visibility='default' filepath='include/linux/fs.h' line='1574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='s_pins' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='1575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='s_user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/fs.h' line='1582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='s_dentry_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='s_inode_lru' type-id='c653aac7' visibility='default' filepath='include/linux/fs.h' line='1590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/fs.h' line='1592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='s_sync_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='1594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='s_stack_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='s_inode_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='s_inodes' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='s_inode_wblist_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_inodes_wb' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1611' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='dev_t' type-id='8f336000' filepath='include/linux/types.h' line='16' column='1' id='8504f260'/>
+      <typedef-decl name='__kernel_dev_t' type-id='19c2251e' filepath='include/linux/types.h' line='13' column='1' id='8f336000'/>
+      <typedef-decl name='loff_t' type-id='537a730e' filepath='include/linux/types.h' line='46' column='1' id='69bf7bee'/>
+      <typedef-decl name='__kernel_loff_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='88' column='1' id='537a730e'/>
+      <class-decl name='file_system_type' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2299' column='1' id='2f5a60be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/fs.h' line='2300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fs_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='2301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_fs_context' type-id='57f0383a' visibility='default' filepath='include/linux/fs.h' line='2308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parameters' type-id='a2fb6348' visibility='default' filepath='include/linux/fs.h' line='2309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mount' type-id='d9394db1' visibility='default' filepath='include/linux/fs.h' line='2310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='kill_sb' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='2313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='next' type-id='21e53d44' visibility='default' filepath='include/linux/fs.h' line='2314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fs_supers' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='2315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_umount_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_vfs_rename_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='s_writers_key' type-id='9c02e2a6' visibility='default' filepath='include/linux/fs.h' line='2320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_lock_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='i_mutex_dir_key' type-id='47479831' visibility='default' filepath='include/linux/fs.h' line='2324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2329' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='module' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='349' column='1' id='29476915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='327e04c6' visibility='default' filepath='include/linux/module.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mkobj' type-id='7bd9942c' visibility='default' filepath='include/linux/module.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='modinfo_attrs' type-id='063da268' visibility='default' filepath='include/linux/module.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='version' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='srcversion' type-id='80f4b756' visibility='default' filepath='include/linux/module.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='holders_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='cfi_check' type-id='d7c6106c' visibility='default' filepath='include/linux/module.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='param_lock' type-id='925167dc' visibility='default' filepath='include/linux/module.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='kp' type-id='a7c6e908' visibility='default' filepath='include/linux/module.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='num_kp' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='num_gpl_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='gpl_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='gpl_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='using_gplonly_symbols' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2696'>
+          <var-decl name='sig_ok' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='async_probe_requested' type-id='b50a4934' visibility='default' filepath='include/linux/module.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='gpl_future_syms' type-id='fcd64690' visibility='default' filepath='include/linux/module.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='gpl_future_crcs' type-id='e0a2e3a6' visibility='default' filepath='include/linux/module.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='num_gpl_future_syms' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='num_exentries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='extable' type-id='7f0eb64c' visibility='default' filepath='include/linux/module.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='init' type-id='1db260e5' visibility='default' filepath='include/linux/module.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='core_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='init_layout' type-id='68b3d9a8' visibility='default' filepath='include/linux/module.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='arch' type-id='ea05c185' visibility='default' filepath='include/linux/module.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='taints' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='num_bugs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='bug_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='bug_table' type-id='c250b0e4' visibility='default' filepath='include/linux/module.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='kallsyms' type-id='209d601e' visibility='default' filepath='include/linux/module.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='core_kallsyms' type-id='6a003ee8' visibility='default' filepath='include/linux/module.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='sect_attrs' type-id='3f4455c4' visibility='default' filepath='include/linux/module.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='notes_attrs' type-id='f0cb8b62' visibility='default' filepath='include/linux/module.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='args' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='percpu' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='percpu_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='num_tracepoints' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tracepoints_ptrs' type-id='700727c0' visibility='default' filepath='include/linux/module.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='num_srcu_structs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='srcu_struct_ptrs' type-id='57933490' visibility='default' filepath='include/linux/module.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='num_bpf_raw_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='bpf_raw_events' type-id='1f7f0216' visibility='default' filepath='include/linux/module.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='jump_entries' type-id='7a35228c' visibility='default' filepath='include/linux/module.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='num_jump_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='num_trace_bprintk_fmt' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='trace_bprintk_fmt_start' type-id='7d3cd834' visibility='default' filepath='include/linux/module.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='trace_events' type-id='109cc752' visibility='default' filepath='include/linux/module.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='num_trace_events' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='trace_evals' type-id='69881700' visibility='default' filepath='include/linux/module.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='num_trace_evals' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='source_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='target_list' type-id='72f469ec' visibility='default' filepath='include/linux/module.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='exit' type-id='953b12f8' visibility='default' filepath='include/linux/module.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/linux/module.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ei_funcs' type-id='7f79f20e' visibility='default' filepath='include/linux/module.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='num_ei_funcs' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/module.h' line='522' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='module_state' filepath='include/linux/module.h' line='297' column='1' id='327e04c6'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1024' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='44' column='1' id='7bd9942c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/module.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='drivers_dir' type-id='d30bdc51' visibility='default' filepath='include/linux/module.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mp' type-id='ad9e36e6' visibility='default' filepath='include/linux/module.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='kobj_completion' type-id='389faaf7' visibility='default' filepath='include/linux/module.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobject' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='66' column='1' id='b6ab8849'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kobject.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent' type-id='d30bdc51' visibility='default' filepath='include/linux/kobject.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='kset' type-id='89b70200' visibility='default' filepath='include/linux/kobject.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ktype' type-id='c48b394e' visibility='default' filepath='include/linux/kobject.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sd' type-id='150efd3f' visibility='default' filepath='include/linux/kobject.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/kobject.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_initialized' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='state_in_sysfs' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='state_add_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='state_remove_uevent_sent' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='uevent_suppress' type-id='f0981eeb' visibility='default' filepath='include/linux/kobject.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kset' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='204' column='1' id='8cf069a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kobject.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/kobject.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/kobject.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='uevent_ops' type-id='86462700' visibility='default' filepath='include/linux/kobject.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='213' 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='168' column='1' id='9f6abc71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='2a3ad845' visibility='default' filepath='include/linux/kobject.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='1ea91ded' visibility='default' filepath='include/linux/kobject.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='uevent' type-id='9125ffcd' visibility='default' filepath='include/linux/kobject.h' line='171' 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='160' column='1' id='a5179659'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='argv' type-id='461c9ed2' visibility='default' filepath='include/linux/kobject.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='envp' type-id='2e646d82' visibility='default' filepath='include/linux/kobject.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='envp_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='buf' type-id='41bf80f3' visibility='default' filepath='include/linux/kobject.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18656'>
+          <var-decl name='buflen' type-id='95e97e5e' visibility='default' filepath='include/linux/kobject.h' line='165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kobj_type' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/kobject.h' line='145' column='1' id='1a08fab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='release' type-id='aa377a8c' visibility='default' filepath='include/linux/kobject.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sysfs_ops' type-id='ebd313ed' visibility='default' filepath='include/linux/kobject.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='default_attrs' type-id='862c676f' visibility='default' filepath='include/linux/kobject.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='default_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/kobject.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='child_ns_type' type-id='10f0a819' visibility='default' filepath='include/linux/kobject.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='namespace' type-id='9c1150bc' visibility='default' filepath='include/linux/kobject.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_ownership' type-id='96b6fff2' visibility='default' filepath='include/linux/kobject.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kobject.h' line='157' 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='223' column='1' id='e7826ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show' type-id='434e45fe' visibility='default' filepath='include/linux/sysfs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='store' type-id='855e70d2' visibility='default' filepath='include/linux/sysfs.h' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ssize_t' type-id='b6b3ebaf' filepath='include/linux/types.h' line='60' column='1' id='79a0948f'/>
+      <typedef-decl name='__kernel_ssize_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='73' column='1' id='b6b3ebaf'/>
+      <class-decl name='attribute' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/sysfs.h' line='30' column='1' id='a6222917'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='2594b00f' visibility='default' filepath='include/linux/sysfs.h' line='32' 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='e4af473b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='f69fcfe1' 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='cc3e2efb' 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='862c676f' 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='87d62959' 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='d83a2db1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' 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='b59d7dce' 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='eaa32e2f' 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='afa767ca' 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='afa767ca' 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='a02c170c' visibility='default' filepath='include/linux/sysfs.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='962' column='1' id='b4b8adeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='f_u' type-id='8c8e2781' visibility='default' filepath='include/linux/fs.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='f_path' type-id='b5382ece' visibility='default' filepath='include/linux/fs.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='f_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f_op' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='f_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='f_write_hint' type-id='0d20c3dd' visibility='default' filepath='include/linux/fs.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='f_count' type-id='f22a8abb' visibility='default' filepath='include/linux/fs.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='f_mode' type-id='2665334e' visibility='default' filepath='include/linux/fs.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='f_pos_lock' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='f_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='f_owner' type-id='6b640edd' visibility='default' filepath='include/linux/fs.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='f_cred' type-id='bc33861a' visibility='default' filepath='include/linux/fs.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='f_ra' type-id='b31f003f' visibility='default' filepath='include/linux/fs.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='f_version' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='f_security' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='f_ep_links' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='f_tfile_llink' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='f_mapping' type-id='f57039f0' visibility='default' filepath='include/linux/fs.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='f_wb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='f_sb_err' type-id='1da55f79' visibility='default' filepath='include/linux/fs.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_oem_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1004' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='963' column='1' id='8c8e2781'>
+        <data-member access='public'>
+          <var-decl name='fu_llist' type-id='c5ccfee8' visibility='default' filepath='include/linux/fs.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fu_rcuhead' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='965' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='file_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1885' column='1' id='7dffcde2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/fs.h' line='1886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='llseek' type-id='07ebb4cd' visibility='default' filepath='include/linux/fs.h' line='1887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='4d8f5625' visibility='default' filepath='include/linux/fs.h' line='1888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='5f29549c' visibility='default' filepath='include/linux/fs.h' line='1889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='read_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_iter' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='1891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='iopoll' type-id='6c4618be' visibility='default' filepath='include/linux/fs.h' line='1892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iterate' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iterate_shared' type-id='42beb73a' visibility='default' filepath='include/linux/fs.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='poll' type-id='4d01ede7' visibility='default' filepath='include/linux/fs.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unlocked_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='compat_ioctl' type-id='fc7daf55' visibility='default' filepath='include/linux/fs.h' line='1897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mmap' type-id='8ea2626c' visibility='default' filepath='include/linux/fs.h' line='1898' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap_supported_flags' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='open' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flush' type-id='5ddef2dd' visibility='default' filepath='include/linux/fs.h' line='1901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='47800058' visibility='default' filepath='include/linux/fs.h' line='1902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fsync' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fasync' type-id='b94ac371' visibility='default' filepath='include/linux/fs.h' line='1904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sendpage' type-id='40da47a8' visibility='default' filepath='include/linux/fs.h' line='1906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='get_unmapped_area' type-id='d44a8cec' visibility='default' filepath='include/linux/fs.h' line='1907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='check_flags' type-id='7f416e10' visibility='default' filepath='include/linux/fs.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='flock' type-id='12f0ff82' visibility='default' filepath='include/linux/fs.h' line='1909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='splice_write' type-id='b22f4610' visibility='default' filepath='include/linux/fs.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='splice_read' type-id='72cd68b0' visibility='default' filepath='include/linux/fs.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setlease' type-id='87e3d3e2' visibility='default' filepath='include/linux/fs.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='fallocate' type-id='a53e2328' visibility='default' filepath='include/linux/fs.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='show_fdinfo' type-id='eda08098' visibility='default' filepath='include/linux/fs.h' line='1915' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='copy_file_range' type-id='d0882d6b' visibility='default' filepath='include/linux/fs.h' line='1919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='remap_file_range' type-id='c1de1086' visibility='default' filepath='include/linux/fs.h' line='1921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='fadvise' type-id='31cc9254' visibility='default' filepath='include/linux/fs.h' line='1924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1929' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kiocb' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='326' column='1' id='da62d64b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ki_filp' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ki_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ki_complete' type-id='9b28bd76' visibility='default' filepath='include/linux/fs.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ki_flags' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='ki_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='ki_ioprio' type-id='1dc6a898' visibility='default' filepath='include/linux/fs.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ki_cookie' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='338' 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='30' column='1' id='f2b4d088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f0981eeb' visibility='default' filepath='include/linux/uio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_offset' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9b26deed' visibility='default' filepath='include/linux/uio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='a8aafb60' visibility='default' filepath='include/linux/uio.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='39' column='1' id='9b26deed'>
+        <data-member access='public'>
+          <var-decl name='iov' type-id='2c556848' visibility='default' filepath='include/linux/uio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kvec' type-id='5199c30d' visibility='default' filepath='include/linux/uio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bvec' type-id='15c9a01b' visibility='default' filepath='include/linux/uio.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pipe' type-id='15d29710' visibility='default' filepath='include/linux/uio.h' line='43' 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='0f042891'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' 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='9e19ad6e' 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='16' column='1' id='cd5915d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iov_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/uio.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='iov_len' type-id='b59d7dce' visibility='default' filepath='include/linux/uio.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_vec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='18' column='1' id='40af3608'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bv_page' type-id='02f11ed4' visibility='default' filepath='include/linux/bvec.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bv_len' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bv_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='21' 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='1373' column='1' id='70c545cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fa_lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fa_fd' type-id='95e97e5e' 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='fa_next' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fa_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fa_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='1379' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rwlock_t' type-id='d7ab0a14' filepath='include/linux/rwlock_types.h' line='20' column='1' id='ac16795b'/>
+      <class-decl name='__anonymous_struct__11' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='ac16795b' visibility='default' filepath='include/linux/rwlock_types.h' line='11' column='1' id='d7ab0a14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='fed2d8ee' visibility='default' filepath='include/linux/rwlock_types.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_rwlock_t' type-id='319e0e18' filepath='include/asm-generic/qrwlock_types.h' line='27' column='1' id='fed2d8ee'/>
+      <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='319e0e18'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='54d74023' 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='641c41d1' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='14' column='1' id='54d74023'>
+        <data-member access='public'>
+          <var-decl name='cnts' type-id='49178f86' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='f29807b6' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qrwlock_types.h' line='16' column='1' id='f29807b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wlocked' type-id='f9b06939' 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='930ea9f9' 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='a490b814'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' 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='f0981eeb' 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='f0981eeb' 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='edef9855' 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='f0981eeb' 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='7359adad' 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='256' is-struct='yes' visibility='default' filepath='include/linux/pipe_fs_i.h' line='75' column='1' id='ed6c59ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='confirm' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='941a57ca' visibility='default' filepath='include/linux/pipe_fs_i.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='steal' type-id='254733eb' visibility='default' filepath='include/linux/pipe_fs_i.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='c2ab7955' visibility='default' filepath='include/linux/pipe_fs_i.h' line='104' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_struct' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/sched/user.h' line='14' column='1' id='ddd7cbfe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__count' type-id='64615833' visibility='default' filepath='include/linux/sched/user.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='processes' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sigpending' type-id='49178f86' visibility='default' filepath='include/linux/sched/user.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='epoll_watches' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='locked_shm' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unix_inflight' type-id='7359adad' visibility='default' filepath='include/linux/sched/user.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pipe_bufs' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uidhash_node' type-id='03a4a074' visibility='default' filepath='include/linux/sched/user.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched/user.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='locked_vm' type-id='f22a8abb' visibility='default' filepath='include/linux/sched/user.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ratelimit' type-id='8b829a50' visibility='default' filepath='include/linux/sched/user.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/user.h' line='45' 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='8b829a50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/ratelimit.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='45' column='1' id='a8aafb60'>
+        <data-member access='public'>
+          <var-decl name='nr_segs' type-id='7359adad' visibility='default' filepath='include/linux/uio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='1570e040' visibility='default' filepath='include/linux/uio.h' line='47' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uio.h' line='47' column='1' id='1570e040'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/uio.h' line='49' 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='1831' column='1' id='d5476b80'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='actor' type-id='262124ef' visibility='default' filepath='include/linux/fs.h' line='1832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1833' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='filldir_t' type-id='78efe913' filepath='include/linux/fs.h' line='1828' column='1' id='262124ef'/>
+      <typedef-decl name='__poll_t' type-id='f0981eeb' filepath='include/uapi/linux/types.h' line='52' column='1' id='8f254b08'/>
+      <typedef-decl name='fl_owner_t' type-id='eaa32e2f' filepath='include/linux/fs.h' line='1057' column='1' id='bc5666d5'/>
+      <class-decl name='file_lock' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1117' column='1' id='23c73eb3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_blocker' type-id='0343ce83' visibility='default' filepath='include/linux/fs.h' line='1118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fl_link' type-id='03a4a074' visibility='default' filepath='include/linux/fs.h' line='1120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fl_blocked_requests' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fl_blocked_member' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fl_owner' type-id='bc5666d5' visibility='default' filepath='include/linux/fs.h' line='1127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fl_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='fl_type' type-id='002ac4a6' visibility='default' filepath='include/linux/fs.h' line='1129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fl_pid' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fl_link_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fl_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fl_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='1133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fl_start' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fl_end' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='1135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fl_fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/fs.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fl_break_time' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fl_downgrade_time' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='1140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fl_ops' type-id='dc4077ef' visibility='default' filepath='include/linux/fs.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fl_lmops' type-id='a548fbc8' visibility='default' filepath='include/linux/fs.h' line='1143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='fl_u' type-id='ff03d60a' visibility='default' filepath='include/linux/fs.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_reserved1' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='file_lock_operations' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1061' column='1' id='1958bd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fl_copy_lock' type-id='7b9768f0' visibility='default' filepath='include/linux/fs.h' line='1062' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl_release_private' type-id='c9e2bc02' visibility='default' filepath='include/linux/fs.h' line='1063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1066' 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='1069' column='1' id='970ecd31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lm_get_owner' type-id='d6e9f1fa' visibility='default' filepath='include/linux/fs.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lm_put_owner' type-id='9615a2e0' visibility='default' filepath='include/linux/fs.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lm_notify' type-id='c9e2bc02' visibility='default' filepath='include/linux/fs.h' line='1072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lm_grant' type-id='bdada41a' visibility='default' filepath='include/linux/fs.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lm_break' type-id='5fb34715' visibility='default' filepath='include/linux/fs.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lm_change' type-id='4817356d' visibility='default' filepath='include/linux/fs.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lm_setup' type-id='628f3294' visibility='default' filepath='include/linux/fs.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='1079' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1144' column='1' id='ff03d60a'>
+        <data-member access='public'>
+          <var-decl name='nfs_fl' type-id='17bacae5' visibility='default' filepath='include/linux/fs.h' line='1145' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nfs4_fl' type-id='b811a3f5' visibility='default' filepath='include/linux/fs.h' line='1146' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='afs' type-id='ee4b5026' visibility='default' filepath='include/linux/fs.h' line='1151' column='1'/>
+        </data-member>
+      </union-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='17bacae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='19c2251e' 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='982f8df3' 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='72f469ec' 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='b811a3f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='a6f0152c' visibility='default' filepath='include/linux/nfs_fs_i.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='1147' column='1' id='ee4b5026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='link' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='debug_id' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1150' 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='f3415517'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='26a90f95' 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='b59d7dce' 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='b59d7dce' 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='b59d7dce' 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='b59d7dce' 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='69bf7bee' 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='69bf7bee' 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='91ce1af9' 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='925167dc' 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='943a1b48' 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='95e97e5e' 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='5d92c9e0' 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='eaa32e2f' visibility='default' filepath='include/linux/seq_file.h' line='29' 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='c4b04493'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='a46b05a0' 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='6ba28d1c' 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='b6ba26fa' 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='0131eb61' visibility='default' filepath='include/linux/seq_file.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='rw_hint' filepath='include/linux/fs.h' line='302' column='1' id='0d20c3dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <typedef-decl name='fmode_t' type-id='f0981eeb' filepath='include/linux/types.h' line='155' column='1' id='2665334e'/>
+      <class-decl name='fown_struct' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='931' column='1' id='6b640edd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/linux/fs.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/linux/fs.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pid_type' type-id='ce78cf46' visibility='default' filepath='include/linux/fs.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='signum' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='936' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pid_type' filepath='include/linux/pid.h' line='9' column='1' id='ce78cf46'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <typedef-decl name='kernel_cap_t' type-id='923128a5' filepath='include/linux/capability.h' line='26' column='1' id='7496b151'/>
+      <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='923128a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='839e8989' visibility='default' filepath='include/linux/capability.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_serial_t' type-id='3ff5601b' filepath='include/linux/key.h' line='28' column='1' id='c84025ab'/>
+      <typedef-decl name='int32_t' type-id='a7832498' filepath='include/linux/types.h' line='103' column='1' id='3ff5601b'/>
+      <union-decl name='__anonymous_union__9' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='175' column='1' id='1a65b0a7'>
+        <data-member access='public'>
+          <var-decl name='graveyard_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='serial_node' type-id='2a8a6332' visibility='default' filepath='include/linux/key.h' line='177' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rw_semaphore' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rwsem.h' line='36' column='1' id='f19fdb93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='f22a8abb' visibility='default' filepath='include/linux/rwsem.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='osq' type-id='0c3105cd' visibility='default' filepath='include/linux/rwsem.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rwsem.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/rwsem.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/rwsem.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='182' column='1' id='21f0eb77'>
+        <data-member access='public'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='revoked_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='time64_t' type-id='49659421' filepath='include/linux/time64.h' line='8' column='1' id='1afd27ac'/>
+      <typedef-decl name='key_perm_t' type-id='8f92235e' filepath='include/linux/key.h' line='31' column='1' id='296adac1'/>
+      <typedef-decl name='uint32_t' type-id='19c2251e' filepath='include/linux/types.h' line='109' column='1' id='8f92235e'/>
+      <union-decl name='__anonymous_union__11' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='219' column='1' id='51bb2fb5'>
+        <data-member access='public'>
+          <var-decl name='index_key' type-id='16ab8749' visibility='default' filepath='include/linux/key.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5b740cc8' visibility='default' filepath='include/linux/key.h' line='221' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='keyring_index_key' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='91' column='1' id='16ab8749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='465ca58e' visibility='default' filepath='include/linux/key.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='80f4b756' visibility='default' filepath='include/linux/key.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='94' column='1' id='465ca58e'>
+        <data-member access='public'>
+          <var-decl name='' type-id='6a74abcf' visibility='default' filepath='include/linux/key.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='x' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='104' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='95' column='1' id='6a74abcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='desc_len' type-id='1dc6a898' visibility='default' filepath='include/linux/key.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='4a008bc3' visibility='default' filepath='include/linux/key.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_tag' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='85' column='1' id='3173bc57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/key.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='removed' type-id='b50a4934' visibility='default' filepath='include/linux/key.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='221' column='1' id='5b740cc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len_desc' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='domain_tag' type-id='fce14c5f' visibility='default' filepath='include/linux/key.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key.h' line='226' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='234' column='1' id='d5d77d48'>
+        <data-member access='public'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='607bacb1' visibility='default' filepath='include/linux/key.h' line='236' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/key.h' line='236' column='1' id='607bacb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name_link' type-id='72f469ec' visibility='default' filepath='include/linux/key.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keys' type-id='b58d1e12' visibility='default' filepath='include/linux/key.h' line='239' 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='22' column='1' id='b58d1e12'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='815cf0d3' visibility='default' filepath='include/linux/assoc_array.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_leaves_on_tree' type-id='7359adad' visibility='default' filepath='include/linux/assoc_array.h' line='24' 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='153' column='1' id='fe81ecb9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check' type-id='f87a5fab' visibility='default' filepath='include/linux/key.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/key.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='keytype' type-id='d0a699d1' visibility='default' filepath='include/linux/key.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='key_restrict_link_func_t' type-id='a5786cbb' filepath='include/linux/key.h' line='148' column='1' id='f87a5fab'/>
+      <class-decl name='uid_gid_map' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='24' column='1' id='f179bf1b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_extents' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='c3ec14d0' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='512' is-anonymous='yes' visibility='default' filepath='include/linux/user_namespace.h' line='26' column='1' id='c3ec14d0'>
+        <data-member access='public'>
+          <var-decl name='extent' type-id='df6d2206' visibility='default' filepath='include/linux/user_namespace.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='e873af3e' visibility='default' filepath='include/linux/user_namespace.h' line='28' 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='18' column='1' id='a9d71093'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lower_first' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='include/linux/user_namespace.h' line='21' 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='28' column='1' id='e873af3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forward' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reverse' type-id='9b105293' visibility='default' filepath='include/linux/user_namespace.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='work_struct' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='103' column='1' id='ef9025d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='f22a8abb' visibility='default' filepath='include/linux/workqueue.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/workqueue.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='72666d3f' visibility='default' filepath='include/linux/workqueue.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='work_func_t' type-id='939280af' filepath='include/linux/workqueue.h' line='22' column='1' id='72666d3f'/>
+      <class-decl name='ctl_table_set' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='169' column='1' id='3fc3d262'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_seen' type-id='35e8c658' visibility='default' filepath='include/linux/sysctl.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dir' type-id='7c7d6006' visibility='default' filepath='include/linux/sysctl.h' line='171' 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='163' column='1' id='7c7d6006'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='header' type-id='ed51618b' visibility='default' filepath='include/linux/sysctl.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='root' type-id='dec44472' visibility='default' filepath='include/linux/sysctl.h' line='166' 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='143' column='1' id='ed51618b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='201d54e5' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unregistering' type-id='389faaf7' visibility='default' filepath='include/linux/sysctl.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctl_table_arg' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='root' type-id='2993adbc' visibility='default' filepath='include/linux/sysctl.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set' type-id='42988600' visibility='default' filepath='include/linux/sysctl.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1c66bddc' visibility='default' filepath='include/linux/sysctl.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='node' type-id='a586bbcf' visibility='default' filepath='include/linux/sysctl.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='inodes' type-id='e151255a' visibility='default' filepath='include/linux/sysctl.h' line='160' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/sysctl.h' line='145' column='1' id='201d54e5'>
+        <data-member access='public'>
+          <var-decl name='' type-id='1acab550' visibility='default' filepath='include/linux/sysctl.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sysctl.h' line='152' 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='146' column='1' id='1acab550'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctl_table' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nreg' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='150' 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='123' column='1' id='91a515f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='procname' type-id='80f4b756' visibility='default' filepath='include/linux/sysctl.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='maxlen' type-id='95e97e5e' visibility='default' filepath='include/linux/sysctl.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/sysctl.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='child' type-id='631dc3c1' visibility='default' filepath='include/linux/sysctl.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_handler' type-id='66032958' visibility='default' filepath='include/linux/sysctl.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='4dec003b' visibility='default' filepath='include/linux/sysctl.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra1' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='extra2' type-id='eaa32e2f' visibility='default' filepath='include/linux/sysctl.h' line='133' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='proc_handler' type-id='99803d40' filepath='include/linux/sysctl.h' line='47' column='1' id='8cf4128f'/>
+      <class-decl name='ctl_table_poll' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/sysctl.h' line='105' column='1' id='d39c42ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='49178f86' visibility='default' filepath='include/linux/sysctl.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/sysctl.h' line='107' 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='174' column='1' id='d83969a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='default_set' type-id='3fc3d262' visibility='default' filepath='include/linux/sysctl.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='lookup' type-id='50abd760' visibility='default' filepath='include/linux/sysctl.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='set_ownership' type-id='47727520' visibility='default' filepath='include/linux/sysctl.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='permissions' type-id='7bada959' visibility='default' filepath='include/linux/sysctl.h' line='180' 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='136' column='1' id='beafd747'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/sysctl.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='header' type-id='11b101bb' visibility='default' filepath='include/linux/sysctl.h' line='138' 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='25' column='1' id='781993c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ngroups' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='da6e2919' visibility='default' filepath='include/linux/cred.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/cred.h' line='149' column='1' id='0a97cc35'>
+        <data-member access='public'>
+          <var-decl name='non_rcu' type-id='95e97e5e' visibility='default' filepath='include/linux/cred.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/cred.h' line='151' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='file_ra_state' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='942' column='1' id='b31f003f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='async_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ra_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mmap_miss' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prev_pos' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='950' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='errseq_t' type-id='19c2251e' filepath='include/linux/errseq.h' line='8' column='1' id='1da55f79'/>
+      <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='ff771233'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='52127d59' 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='d4ae3f3f' 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='0cfacb48' 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='8734cf20' 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='0cfacb48' 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='b7f9d8e6' 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='52127d59'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1088' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='132' column='1' id='29d79af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='include/linux/kernfs.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/kernfs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rb' type-id='2a8a6332' visibility='default' filepath='include/linux/kernfs.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ns' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hash' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='de6f7c53' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='id' type-id='3dfef700' visibility='default' filepath='include/linux/kernfs.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/linux/kernfs.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/linux/kernfs.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='iattr' type-id='1f4b5d14' visibility='default' filepath='include/linux/kernfs.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='164' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='151' column='1' id='de6f7c53'>
+        <data-member access='public'>
+          <var-decl name='dir' type-id='4303ca40' visibility='default' filepath='include/linux/kernfs.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='symlink' type-id='c8685ef0' visibility='default' filepath='include/linux/kernfs.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='attr' type-id='9e04468e' visibility='default' filepath='include/linux/kernfs.h' line='154' 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='85' column='1' id='4303ca40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subdirs' type-id='7359adad' visibility='default' filepath='include/linux/kernfs.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children' type-id='dec44472' visibility='default' filepath='include/linux/kernfs.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='root' type-id='e18defdb' visibility='default' filepath='include/linux/kernfs.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_root' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='191' column='1' id='471fc91b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kernfs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ino_idr' type-id='37ce495e' visibility='default' filepath='include/linux/kernfs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='next_generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='syscall_ops' type-id='fefa8c5f' visibility='default' filepath='include/linux/kernfs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='supers' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deactivate_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/kernfs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='207' 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='37ce495e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idr_rt' type-id='d39738ac' 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='f0981eeb' 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='f0981eeb' visibility='default' filepath='include/linux/idr.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xarray' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='292' column='1' id='d39738ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/xarray.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='xa_flags' type-id='3eb7c31c' visibility='default' filepath='include/linux/xarray.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='xa_head' type-id='eaa32e2f' visibility='default' filepath='include/linux/xarray.h' line='296' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_syscall_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='174' column='1' id='91f5bcb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='show_options' type-id='efd5496b' visibility='default' filepath='include/linux/kernfs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mkdir' type-id='58d10a98' visibility='default' filepath='include/linux/kernfs.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rmdir' type-id='0b56752f' visibility='default' filepath='include/linux/kernfs.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rename' type-id='aea90108' visibility='default' filepath='include/linux/kernfs.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='show_path' type-id='26692209' visibility='default' filepath='include/linux/kernfs.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='188' 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='97' column='1' id='c8685ef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='target_kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='98' 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='101' column='1' id='9e04468e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='d37373f6' visibility='default' filepath='include/linux/kernfs.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='open' type-id='627d9f9e' visibility='default' filepath='include/linux/kernfs.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/kernfs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify_next' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='232' column='1' id='ae89b201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/kernfs.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/kernfs.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/kernfs.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/kernfs.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/kernfs.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/kernfs.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/kernfs.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/kernfs.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='mmap' type-id='f9e738c5' visibility='default' filepath='include/linux/kernfs.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernfs_open_file' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/kernfs.h' line='210' column='1' id='60fb5bfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/kernfs.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/kernfs.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_file' type-id='f8dc9def' visibility='default' filepath='include/linux/kernfs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/kernfs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/kernfs.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc_mutex' type-id='925167dc' visibility='default' filepath='include/linux/kernfs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event' type-id='95e97e5e' visibility='default' filepath='include/linux/kernfs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/kernfs.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='prealloc_buf' type-id='26a90f95' visibility='default' filepath='include/linux/kernfs.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='atomic_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/kernfs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mmapped' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='released' type-id='b50a4934' visibility='default' filepath='include/linux/kernfs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/kernfs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/kernfs.h' line='229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/kernfs.h' line='110' column='1' id='9d3d640f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='generation' type-id='19c2251e' visibility='default' filepath='include/linux/kernfs.h' line='118' 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='52' column='1' id='8f90cd2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/module.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='9a6e3348' visibility='default' filepath='include/linux/module.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='96948294' visibility='default' filepath='include/linux/module.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='setup' type-id='537ed613' visibility='default' filepath='include/linux/module.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='test' type-id='fe3af88b' visibility='default' filepath='include/linux/module.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='d6f1846c' visibility='default' filepath='include/linux/module.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kernel_symbol' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/export.h' line='87' column='1' id='9493d3c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='include/linux/export.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='namespace' type-id='80f4b756' visibility='default' filepath='include/linux/export.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cfi_check_fn' type-id='64115f6c' filepath='include/linux/cfi.h' line='15' column='1' id='d7c6106c'/>
+      <typedef-decl name='uint64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='112' column='1' id='9c313c2d'/>
+      <class-decl name='kernel_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/moduleparam.h' line='69' column='1' id='ca10d3ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/moduleparam.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/moduleparam.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='perm' type-id='d5c0a628' visibility='default' filepath='include/linux/moduleparam.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='level' type-id='fdbf7a0f' visibility='default' filepath='include/linux/moduleparam.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/moduleparam.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='cbb4664d' visibility='default' filepath='include/linux/moduleparam.h' line='76' 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='47' column='1' id='1740bab9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set' type-id='388a7f2a' visibility='default' filepath='include/linux/moduleparam.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get' type-id='d1c62993' visibility='default' filepath='include/linux/moduleparam.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='b7f9d8e6' visibility='default' filepath='include/linux/moduleparam.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s8' type-id='8af57d41' filepath='include/asm-generic/int-ll64.h' line='16' column='1' id='fdbf7a0f'/>
+      <typedef-decl name='__s8' type-id='28577a57' filepath='include/uapi/asm-generic/int-ll64.h' line='20' column='1' id='8af57d41'/>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/moduleparam.h' line='76' column='1' id='cbb4664d'>
+        <data-member access='public'>
+          <var-decl name='arg' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='str' type-id='db4b7928' visibility='default' filepath='include/linux/moduleparam.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='arr' type-id='ffa2ea6a' visibility='default' filepath='include/linux/moduleparam.h' line='79' 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='86' column='1' id='744e4af5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='maxlen' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='string' type-id='26a90f95' visibility='default' filepath='include/linux/moduleparam.h' line='88' 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='92' column='1' id='3b156a69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='elemsize' type-id='f0981eeb' visibility='default' filepath='include/linux/moduleparam.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num' type-id='807869d3' visibility='default' filepath='include/linux/moduleparam.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ops' type-id='99beed66' visibility='default' filepath='include/linux/moduleparam.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='elem' type-id='eaa32e2f' visibility='default' filepath='include/linux/moduleparam.h' line='98' 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='da1095b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='insn' type-id='95e97e5e' 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='95e97e5e' 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='309' column='1' id='68b3d9a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='eaa32e2f' visibility='default' filepath='include/linux/module.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='text_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ro_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ro_after_init_size' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mtn' type-id='3351dce1' visibility='default' filepath='include/linux/module.h' line='322' 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='304' column='1' id='3351dce1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mod' type-id='2730d015' visibility='default' filepath='include/linux/module.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='dc9cc7c7' visibility='default' filepath='include/linux/module.h' line='306' 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='dc9cc7c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='d46544fa' visibility='default' filepath='include/linux/rbtree_latch.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_arch_specific' size-in-bits='256' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='19' column='1' id='ea05c185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='core' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='init' type-id='1615ea0e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ftrace_trampoline' type-id='72ece9e2' visibility='default' filepath='arch/arm64/include/asm/module.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_plt_sec' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='13' column='1' id='1615ea0e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='plt_shndx' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='plt_num_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plt_max_entries' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/module.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='plt_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/module.h' line='41' column='1' id='2519c394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='adrp' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='add' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='br' type-id='2f162548' visibility='default' filepath='arch/arm64/include/asm/module.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='31' column='1' id='2f162548'/>
+      <class-decl name='bug_entry' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/asm-generic/bug.h' line='24' column='1' id='93630c4e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bug_addr_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='file_disp' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/bug.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='line' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='8efea9e5' visibility='default' filepath='include/asm-generic/bug.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mod_kallsyms' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='333' column='1' id='6a003ee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symtab' type-id='7d71a706' visibility='default' filepath='include/linux/module.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_symtab' type-id='f0981eeb' visibility='default' filepath='include/linux/module.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='strtab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='typetab' type-id='26a90f95' visibility='default' filepath='include/linux/module.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Sym' type-id='30bf9720' filepath='include/uapi/linux/elf.h' line='199' column='1' id='7cdfe313'/>
+      <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='30bf9720'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='st_name' type-id='e57120d4' 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='002ac4a6' 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='002ac4a6' 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='101a70d5' 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='e14340cf' 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='c87c44e4' visibility='default' filepath='include/uapi/linux/elf.h' line='198' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Elf64_Word' type-id='3f1a6b60' filepath='include/uapi/linux/elf.h' line='21' column='1' id='e57120d4'/>
+      <typedef-decl name='Elf64_Half' type-id='d315442e' filepath='include/uapi/linux/elf.h' line='17' column='1' id='101a70d5'/>
+      <typedef-decl name='Elf64_Addr' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='16' column='1' id='e14340cf'/>
+      <typedef-decl name='Elf64_Xword' type-id='d3130597' filepath='include/uapi/linux/elf.h' line='22' column='1' id='c87c44e4'/>
+      <typedef-decl name='tracepoint_ptr_t' type-id='d2d812d1' filepath='include/linux/tracepoint-defs.h' line='41' column='1' id='e431ac27'/>
+      <class-decl name='tracepoint' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='30' column='1' id='4ca0c298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' 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='00205383' visibility='default' filepath='include/linux/tracepoint-defs.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='regfunc' type-id='1db260e5' visibility='default' filepath='include/linux/tracepoint-defs.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unregfunc' type-id='953b12f8' visibility='default' filepath='include/linux/tracepoint-defs.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='funcs' type-id='484b400f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='static_key' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='87' column='1' id='00205383'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='49178f86' visibility='default' filepath='include/linux/jump_label.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='7792d5a2' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/jump_label.h' line='102' column='1' id='7792d5a2'>
+        <data-member access='public'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/jump_label.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='entries' type-id='7a35228c' visibility='default' filepath='include/linux/jump_label.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='next' type-id='c77a71ce' visibility='default' filepath='include/linux/jump_label.h' line='105' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='jump_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='122' column='1' id='ca0c09a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='code' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='target' type-id='a7832498' visibility='default' filepath='include/linux/jump_label.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='bd54fe1a' visibility='default' filepath='include/linux/jump_label.h' line='125' 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='3132e187'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='eaa32e2f' 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='eaa32e2f' 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='95e97e5e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_struct' size-in-bits='5184' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='64' column='1' id='e4a7867c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='01115b96' visibility='default' filepath='include/linux/srcutree.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='level' type-id='2f7565c6' visibility='default' filepath='include/linux/srcutree.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='srcu_cb_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='srcu_gp_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='srcu_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/srcutree.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='srcu_gp_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='srcu_last_gp_end' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sda' type-id='2a5ff2f1' visibility='default' filepath='include/linux/srcutree.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='srcu_barrier_seq' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='srcu_barrier_mutex' type-id='925167dc' visibility='default' filepath='include/linux/srcutree.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='srcu_barrier_completion' type-id='f9fef04f' visibility='default' filepath='include/linux/srcutree.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='srcu_barrier_cpu_cnt' type-id='49178f86' visibility='default' filepath='include/linux/srcutree.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/srcutree.h' line='84' 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='48' column='1' id='56798c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcu_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='srcu_data_have_cbs' type-id='f46d9f4d' visibility='default' filepath='include/linux/srcutree.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='srcu_parent' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='grplo' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='grphi' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='srcu_data' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/srcutree.h' line='24' column='1' id='1207cfa9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcu_lock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='srcu_unlock_count' type-id='f05e8e77' visibility='default' filepath='include/linux/srcutree.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/srcutree.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srcu_cblist' type-id='541c023a' visibility='default' filepath='include/linux/srcutree.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='srcu_gp_seq_needed' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='srcu_gp_seq_needed_exp' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='srcu_cblist_invoking' type-id='b50a4934' visibility='default' filepath='include/linux/srcutree.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='delay_work' type-id='abe41e67' visibility='default' filepath='include/linux/srcutree.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/srcutree.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='srcu_barrier_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/srcutree.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='mynode' type-id='8dee6d89' visibility='default' filepath='include/linux/srcutree.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='grpmask' type-id='7359adad' visibility='default' filepath='include/linux/srcutree.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/srcutree.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='ssp' type-id='f7d7131a' visibility='default' filepath='include/linux/srcutree.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_segcblist' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/rcu_segcblist.h' line='67' column='1' id='541c023a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='69c138b1' visibility='default' filepath='include/linux/rcu_segcblist.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tails' type-id='68694f49' visibility='default' filepath='include/linux/rcu_segcblist.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='gp_seq' type-id='f46d9f4d' visibility='default' filepath='include/linux/rcu_segcblist.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='len' type-id='f22a8abb' visibility='default' filepath='include/linux/rcu_segcblist.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='len_lazy' type-id='bd54fe1a' visibility='default' filepath='include/linux/rcu_segcblist.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enabled' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='712'>
+          <var-decl name='offloaded' type-id='f9b06939' visibility='default' filepath='include/linux/rcu_segcblist.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timer_list' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/timer.h' line='12' column='1' id='abe41e67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='03a4a074' visibility='default' filepath='include/linux/timer.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/linux/timer.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='function' type-id='9582ad9a' visibility='default' filepath='include/linux/timer.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/linux/timer.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/timer.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='delayed_work' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='118' column='1' id='5ad6e0ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/workqueue.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/workqueue.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_raw_event_map' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/tracepoint-defs.h' line='44' column='1' id='72790540'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/tracepoint-defs.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bpf_func' type-id='eaa32e2f' visibility='default' filepath='include/linux/tracepoint-defs.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_args' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='writable_size' type-id='19c2251e' visibility='default' filepath='include/linux/tracepoint-defs.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='error_injection_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/asm-generic/error-injection.h' line='14' column='1' id='e6a2a878'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='7359adad' visibility='default' filepath='include/asm-generic/error-injection.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='etype' type-id='95e97e5e' visibility='default' filepath='include/asm-generic/error-injection.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lock_class_key' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='459' column='1' id='47479831'/>
+      <class-decl name='super_operations' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='2016' column='1' id='874691ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alloc_inode' type-id='e8c4dba4' visibility='default' filepath='include/linux/fs.h' line='2017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroy_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dirty_inode' type-id='5f5506f6' visibility='default' filepath='include/linux/fs.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_inode' type-id='fd780be6' visibility='default' filepath='include/linux/fs.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='drop_inode' type-id='28ba4492' visibility='default' filepath='include/linux/fs.h' line='2023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='evict_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put_super' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_fs' type-id='dcab5203' visibility='default' filepath='include/linux/fs.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='freeze_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thaw_super' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unfreeze_fs' type-id='d2f4c704' visibility='default' filepath='include/linux/fs.h' line='2030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='statfs' type-id='35646c79' visibility='default' filepath='include/linux/fs.h' line='2031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='remount_fs' type-id='552c8f87' visibility='default' filepath='include/linux/fs.h' line='2032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='umount_begin' type-id='1ff54a45' visibility='default' filepath='include/linux/fs.h' line='2033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='show_options' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='show_devname' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='show_path' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='show_stats' type-id='c94f6b13' visibility='default' filepath='include/linux/fs.h' line='2038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='quota_read' type-id='e295c77c' visibility='default' filepath='include/linux/fs.h' line='2040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='quota_write' type-id='a9b95107' visibility='default' filepath='include/linux/fs.h' line='2041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_dquots' type-id='ae02292a' visibility='default' filepath='include/linux/fs.h' line='2042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bdev_try_to_free_page' type-id='ea44f8d2' visibility='default' filepath='include/linux/fs.h' line='2044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_cached_objects' type-id='c4facf61' visibility='default' filepath='include/linux/fs.h' line='2047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='2053' 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='691a06da'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dq_hash' type-id='03a4a074' 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='72f469ec' 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='72f469ec' 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='72f469ec' 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='925167dc' 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='fb4018a0' 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='49178f86' 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='42c8f564' 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='72028e1c' 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='69bf7bee' 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='7359adad' 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='bd17a943' 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='72028e1c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='4579c4c7' 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='9ff1dafd' visibility='default' filepath='include/linux/quota.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/quota.h' line='69' column='1' id='4579c4c7'>
+        <data-member access='public'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/quota.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/quota.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='projid' type-id='b7cdd2f8' visibility='default' filepath='include/linux/quota.h' line='72' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='kprojid_t' type-id='393e7ae8' filepath='include/linux/projid.h' line='24' column='1' id='b7cdd2f8'/>
+      <class-decl name='__anonymous_struct__21' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='b7cdd2f8' visibility='default' filepath='include/linux/projid.h' line='22' column='1' id='393e7ae8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='6ab42ed1' visibility='default' filepath='include/linux/projid.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='projid_t' type-id='70734f24' filepath='include/linux/projid.h' line='20' column='1' id='6ab42ed1'/>
+      <enum-decl name='quota_type' filepath='include/linux/quota.h' line='54' column='1' id='9ff1dafd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='bd17a943'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqb_bhardlimit' type-id='33341965' 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='33341965' 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='33341965' 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='33341965' 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='33341965' 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='33341965' 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='33341965' 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='1afd27ac' 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='1afd27ac' visibility='default' filepath='include/linux/quota.h' line='214' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='qsize_t' type-id='1eb56b1e' filepath='include/linux/quota.h' line='66' column='1' id='33341965'/>
+      <class-decl name='shrink_control' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/shrinker.h' line='12' column='1' id='dee16bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gfp_mask' type-id='3eb7c31c' 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='95e97e5e' 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='7359adad' 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='7359adad' 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='223696fb' visibility='default' filepath='include/linux/shrinker.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dquot_operations' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='325' column='1' id='0584e65d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='write_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='alloc_dquot' type-id='324070f9' visibility='default' filepath='include/linux/quota.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destroy_dquot' type-id='dbc22931' visibility='default' filepath='include/linux/quota.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acquire_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release_dquot' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mark_dirty' type-id='24c1e1dc' visibility='default' filepath='include/linux/quota.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_info' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_reserved_space' type-id='15543b10' visibility='default' filepath='include/linux/quota.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_projid' type-id='c23b3cbc' visibility='default' filepath='include/linux/quota.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_inode_usage' type-id='6b7539fb' visibility='default' filepath='include/linux/quota.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='get_next_id' type-id='70b08f83' visibility='default' filepath='include/linux/quota.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='343' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quotactl_ops' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='434' column='1' id='8ce4ff83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quota_on' type-id='de6b64d0' visibility='default' filepath='include/linux/quota.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='quota_off' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='quota_enable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='quota_disable' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='quota_sync' type-id='dcab5203' visibility='default' filepath='include/linux/quota.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_info' type-id='4e326e06' visibility='default' filepath='include/linux/quota.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_nextdqblk' type-id='483e8c3a' visibility='default' filepath='include/linux/quota.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_dqblk' type-id='9e27a8d4' visibility='default' filepath='include/linux/quota.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='get_state' type-id='eb638046' visibility='default' filepath='include/linux/quota.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rm_xquota' type-id='7aa5a21e' visibility='default' filepath='include/linux/quota.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='449' 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='421' column='1' id='9dbdc7de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='i_fieldmask' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='i_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='i_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='i_ino_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='i_rt_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='i_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='i_ino_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='i_rt_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='430' 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='349' column='1' id='aef83a98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='d_fieldmask' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='d_spc_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='d_spc_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='d_ino_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='d_ino_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='d_space' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='d_ino_count' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='d_ino_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='d_spc_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='d_ino_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='d_spc_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='d_rt_spc_hardlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='d_rt_spc_softlimit' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='d_rt_space' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='d_rt_spc_timer' type-id='9b7c55ef' visibility='default' filepath='include/linux/quota.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='d_rt_spc_warns' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='366' 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='415' column='1' id='f6be3c23'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_incoredqs' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='s_state' type-id='55d1e02d' visibility='default' filepath='include/linux/quota.h' line='417' 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='401' column='1' id='e878d564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ino_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rt_spc_timelimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ino_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rt_spc_warnlimit' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ino' type-id='3a47d82b' visibility='default' filepath='include/linux/quota.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blocks' type-id='17345459' visibility='default' filepath='include/linux/quota.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nextents' type-id='17345459' visibility='default' filepath='include/linux/quota.h' line='412' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='blkcnt_t' type-id='91ce1af9' filepath='include/linux/types.h' line='131' column='1' id='17345459'/>
+      <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='def98e71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='d09d4bab' visibility='default' filepath='include/linux/list_bl.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='491' column='1' id='1b893cc5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bd_dev' type-id='8504f260' visibility='default' filepath='include/linux/fs.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bd_openers' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bd_inode' type-id='7e666abe' visibility='default' filepath='include/linux/fs.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bd_super' type-id='42c8f564' visibility='default' filepath='include/linux/fs.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bd_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bd_claiming' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bd_holder' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bd_holders' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='bd_write_holder' type-id='b50a4934' visibility='default' filepath='include/linux/fs.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bd_holder_disks' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bd_contains' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bd_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='bd_partno' type-id='f9b06939' visibility='default' filepath='include/linux/fs.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bd_part' type-id='84dc82b7' visibility='default' filepath='include/linux/fs.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bd_part_count' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='bd_invalidated' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bd_disk' type-id='33c599da' visibility='default' filepath='include/linux/fs.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bd_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/fs.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bd_bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/fs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bd_list' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bd_private' type-id='7359adad' visibility='default' filepath='include/linux/fs.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='bd_fsfreeze_count' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='bd_fsfreeze_mutex' type-id='925167dc' visibility='default' filepath='include/linux/fs.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='531' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_info' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='527' column='1' id='c26e4ad8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/quota.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dqio_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/quota.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='files' type-id='e6ff92fb' visibility='default' filepath='include/linux/quota.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='info' type-id='83ae09a1' visibility='default' filepath='include/linux/quota.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ops' type-id='59bd9302' visibility='default' filepath='include/linux/quota.h' line='532' 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='b0690d78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dqi_format' type-id='eb9a3ab6' 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='95e97e5e' 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='72f469ec' 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='7359adad' 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='f0981eeb' 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='f0981eeb' 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='33341965' 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='33341965' 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='eaa32e2f' 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='452' column='1' id='c2be49b0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qf_fmt_id' type-id='95e97e5e' visibility='default' filepath='include/linux/quota.h' line='453' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='qf_ops' type-id='bd561d05' visibility='default' filepath='include/linux/quota.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qf_owner' type-id='2730d015' visibility='default' filepath='include/linux/quota.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='qf_next' type-id='eb9a3ab6' visibility='default' filepath='include/linux/quota.h' line='456' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='quota_format_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/quota.h' line='310' column='1' id='87cad984'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_quota_file' type-id='dcab5203' 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='dcab5203' 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='dcab5203' 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='dcab5203' 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='24c1e1dc' 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='24c1e1dc' 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='24c1e1dc' 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='70b08f83' visibility='default' filepath='include/linux/quota.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/quota.h' line='321' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sb_writers' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1467' column='1' id='fb476a2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frozen' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='1468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_unfrozen' type-id='b5ab048f' visibility='default' filepath='include/linux/fs.h' line='1469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rw_sem' type-id='a09ef5a6' visibility='default' filepath='include/linux/fs.h' line='1470' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='percpu_rw_semaphore' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/percpu-rwsem.h' line='12' column='1' id='ce848ab1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rss' type-id='638a7d75' visibility='default' filepath='include/linux/percpu-rwsem.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read_count' type-id='807869d3' visibility='default' filepath='include/linux/percpu-rwsem.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rw_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/percpu-rwsem.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='writer' type-id='71598d38' visibility='default' filepath='include/linux/percpu-rwsem.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='readers_block' type-id='95e97e5e' visibility='default' filepath='include/linux/percpu-rwsem.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_sync' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/rcu_sync.h' line='17' column='1' id='638a7d75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gp_state' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gp_count' type-id='95e97e5e' visibility='default' filepath='include/linux/rcu_sync.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gp_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/rcu_sync.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cb_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/rcu_sync.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcuwait' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/rcuwait.h' line='15' column='1' id='71598d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/rcuwait.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uuid_t' type-id='8425539a' filepath='include/linux/uuid.h' line='18' column='1' id='ec55eb74'/>
+      <class-decl name='__anonymous_struct__22' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='ec55eb74' visibility='default' filepath='include/linux/uuid.h' line='16' column='1' id='8425539a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='9396cabb' visibility='default' filepath='include/linux/uuid.h' line='17' 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='27cb404f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count_objects' type-id='cd2cc9e1' 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='cd2cc9e1' 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='bd54fe1a' 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='95e97e5e' 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='f0981eeb' 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='72f469ec' 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='95e97e5e' 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='5403cb36' 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='c653aac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='a6d2fa52' 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='72f469ec' 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='95e97e5e' 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='b50a4934' 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='dc49d474'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='ff0d68dc' 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='153e161b' 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='bd54fe1a' 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='ff0d68dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='bd54fe1a' 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='5a3e162b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' 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='b969bd7a' visibility='default' filepath='include/linux/list_lru.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='108' column='1' id='ba311a3a'>
+        <data-member access='public'>
+          <var-decl name='d_lru' type-id='72f469ec' visibility='default' filepath='include/linux/dcache.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_wait' type-id='03d48e96' visibility='default' filepath='include/linux/dcache.h' line='110' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dcache.h' line='117' column='1' id='ba0a0e48'>
+        <data-member access='public'>
+          <var-decl name='d_alias' type-id='03a4a074' visibility='default' filepath='include/linux/dcache.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_in_lookup_hash' type-id='8db0df1b' visibility='default' filepath='include/linux/dcache.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/dcache.h' line='120' column='1'/>
+        </data-member>
+      </union-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='f1fbc58e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='b7f9d8e6' 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='eaa32e2f' visibility='default' filepath='include/linux/delayed_call.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='iattr' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='226' column='1' id='a9ef191f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ia_valid' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ia_mode' type-id='2594b00f' visibility='default' filepath='include/linux/fs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ia_uid' type-id='d80b72e6' visibility='default' filepath='include/linux/fs.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ia_gid' type-id='094d8048' visibility='default' filepath='include/linux/fs.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ia_size' type-id='69bf7bee' visibility='default' filepath='include/linux/fs.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ia_atime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ia_mtime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ia_ctime' type-id='40a816ad' visibility='default' filepath='include/linux/fs.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ia_file' type-id='77e79a4b' visibility='default' filepath='include/linux/fs.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timespec64' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/time64.h' line='13' column='1' id='40a816ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='1afd27ac' visibility='default' filepath='include/linux/time64.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/time64.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='kstat' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/stat.h' line='24' column='1' id='5f5c9d88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='result_mask' type-id='19c2251e' 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='2594b00f' 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='f0981eeb' 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='8f92235e' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rdev' type-id='8504f260' visibility='default' filepath='include/linux/stat.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/stat.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/stat.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='69bf7bee' visibility='default' filepath='include/linux/stat.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='atime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mtime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ctime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='btime' type-id='40a816ad' visibility='default' filepath='include/linux/stat.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='blocks' type-id='91ce1af9' visibility='default' filepath='include/linux/stat.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fiemap_extent_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1807' column='1' id='8ffe5745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fi_extents_mapped' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fi_extents_max' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='1810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fi_extents_start' type-id='d92598ce' visibility='default' filepath='include/linux/fs.h' line='1811' 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='eab08458'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fe_logical' type-id='d3130597' 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='d3130597' 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='d3130597' 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='8a7b7524' 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='3f1a6b60' 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='3fa05d14' visibility='default' filepath='include/uapi/linux/fiemap.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='680' column='1' id='3ee18b51'>
+        <data-member access='public'>
+          <var-decl name='i_nlink' type-id='20f5f452' visibility='default' filepath='include/linux/fs.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__i_nlink' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='682' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='719' column='1' id='cbd4a95b'>
+        <data-member access='public'>
+          <var-decl name='i_dentry' type-id='e151255a' visibility='default' filepath='include/linux/fs.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/fs.h' line='721' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__25' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='731' column='1' id='67f3b119'>
+        <data-member access='public'>
+          <var-decl name='i_fop' type-id='61758ee5' visibility='default' filepath='include/linux/fs.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='free_inode' type-id='4f3d95df' visibility='default' filepath='include/linux/fs.h' line='733' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='file_lock_context' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='1159' column='1' id='fb0c2987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flc_flock' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flc_posix' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flc_lease' type-id='72f469ec' visibility='default' filepath='include/linux/fs.h' line='1163' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='738' column='1' id='d1afa4fe'>
+        <data-member access='public'>
+          <var-decl name='i_pipe' type-id='15d29710' visibility='default' filepath='include/linux/fs.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_bdev' type-id='b88dd945' visibility='default' filepath='include/linux/fs.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_cdev' type-id='3e6eb939' visibility='default' filepath='include/linux/fs.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_link' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='i_dir_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/fs.h' line='743' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='address_space_operations' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/fs.h' line='370' column='1' id='66fa8ce5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='writepage' type-id='8b8bc11e' visibility='default' filepath='include/linux/fs.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='readpage' type-id='ab57fa9e' visibility='default' filepath='include/linux/fs.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='writepages' type-id='01ffd89c' visibility='default' filepath='include/linux/fs.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_page_dirty' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='readpages' type-id='230dd919' visibility='default' filepath='include/linux/fs.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='write_begin' type-id='4eb95ade' visibility='default' filepath='include/linux/fs.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='write_end' type-id='e6da64f6' visibility='default' filepath='include/linux/fs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bmap' type-id='aecbf18b' visibility='default' filepath='include/linux/fs.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='invalidatepage' type-id='d8db14d1' visibility='default' filepath='include/linux/fs.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='releasepage' type-id='919b335b' visibility='default' filepath='include/linux/fs.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='freepage' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='direct_IO' type-id='227e209d' visibility='default' filepath='include/linux/fs.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migratepage' type-id='10451dea' visibility='default' filepath='include/linux/fs.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='isolate_page' type-id='a8faf36f' visibility='default' filepath='include/linux/fs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='putback_page' type-id='2f974a69' visibility='default' filepath='include/linux/fs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='launder_page' type-id='1654d99a' visibility='default' filepath='include/linux/fs.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='is_partially_uptodate' type-id='800c67c2' visibility='default' filepath='include/linux/fs.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='is_dirty_writeback' type-id='6af64a09' visibility='default' filepath='include/linux/fs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='error_remove_page' type-id='2c5f769d' visibility='default' filepath='include/linux/fs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='swap_activate' type-id='2eb7248e' visibility='default' filepath='include/linux/fs.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='swap_deactivate' type-id='88909596' visibility='default' filepath='include/linux/fs.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/fs.h' line='422' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sector_t' type-id='91ce1af9' filepath='include/linux/types.h' line='130' column='1' id='a42536cd'/>
+      <enum-decl name='migrate_mode' filepath='include/linux/migrate_mode.h' line='15' column='1' id='157252dd'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='f0981eeb' filepath='include/linux/mmzone.h' line='322' column='1' id='9c5c646e'/>
+      <class-decl name='__anonymous_struct__23' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='98' column='1' id='4877c7ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dma_addr' type-id='f05e8e77' visibility='default' filepath='include/linux/mm_types.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='105' column='1' id='7d00e4f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c06bf9dd' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/mm_types.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='freelist' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='77c8e02e' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='106' column='1' id='c06bf9dd'>
+        <data-member access='public'>
+          <var-decl name='slab_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='5e3b2ede' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='108' column='1' id='5e3b2ede'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pobjects' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='122' column='1' id='77c8e02e'>
+        <data-member access='public'>
+          <var-decl name='s_mem' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='counters' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='26dfc30c' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__26' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='125' column='1' id='26dfc30c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='inuse' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='objects' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__27' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='132' column='1' id='1c2d6ac7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='compound_head' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compound_dtor' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='compound_order' type-id='002ac4a6' visibility='default' filepath='include/linux/mm_types.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='compound_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__28' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='140' column='1' id='ce8e16a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_compound_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_compound_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='deferred_list' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__29' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='146' column='1' id='b32fec8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pt_pad_1' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmd_huge_pte' type-id='c28b9700' visibility='default' filepath='include/linux/mm_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_pt_pad_2' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='787e8237' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ptl' type-id='fb4018a0' visibility='default' filepath='include/linux/mm_types.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pgtable_t' type-id='02f11ed4' filepath='arch/arm64/include/asm/page.h' line='31' column='1' id='c28b9700'/>
+      <union-decl name='__anonymous_union__29' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='150' column='1' id='787e8237'>
+        <data-member access='public'>
+          <var-decl name='pt_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pt_frag_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='152' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__30' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='160' column='1' id='754ab6d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pgmap' type-id='b1a5e68a' visibility='default' filepath='include/linux/mm_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_device_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dev_pagemap' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='107' column='1' id='8e586c5c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='altmap' type-id='62d0a96c' visibility='default' filepath='include/linux/memremap.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='res' type-id='5218160d' visibility='default' filepath='include/linux/memremap.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ref' type-id='60219102' visibility='default' filepath='include/linux/memremap.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='internal_ref' type-id='818799b4' visibility='default' filepath='include/linux/memremap.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='include/linux/memremap.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='type' type-id='cc7210fc' visibility='default' filepath='include/linux/memremap.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/memremap.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ops' type-id='55917c32' visibility='default' filepath='include/linux/memremap.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmem_altmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='18' column='1' id='62d0a96c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end_pfn' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reserve' type-id='9cbd1c16' visibility='default' filepath='include/linux/memremap.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='free' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='align' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='7359adad' visibility='default' filepath='include/linux/memremap.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='resource' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/ioport.h' line='21' column='1' id='5218160d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='end' type-id='acc63fdf' visibility='default' filepath='include/linux/ioport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/ioport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='desc' type-id='7359adad' visibility='default' filepath='include/linux/ioport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sibling' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='child' type-id='c9d64c0d' visibility='default' filepath='include/linux/ioport.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/ioport.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='resource_size_t' type-id='2522883d' filepath='include/linux/types.h' line='163' column='1' id='acc63fdf'/>
+      <typedef-decl name='phys_addr_t' type-id='91ce1af9' filepath='include/linux/types.h' line='158' column='1' id='2522883d'/>
+      <class-decl name='percpu_ref' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/percpu-refcount.h' line='95' column='1' id='818799b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/percpu-refcount.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='percpu_count_ptr' type-id='7359adad' visibility='default' filepath='include/linux/percpu-refcount.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='confirm_switch' type-id='903b12fe' visibility='default' filepath='include/linux/percpu-refcount.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='force_atomic' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='allow_reinit' type-id='b50a4934' visibility='default' filepath='include/linux/percpu-refcount.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/percpu-refcount.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='percpu_ref_func_t' type-id='96650caf' filepath='include/linux/percpu-refcount.h' line='60' column='1' id='ed7b7f6b'/>
+      <enum-decl name='memory_type' filepath='include/linux/memremap.h' line='59' column='1' id='cc7210fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MEMORY_DEVICE_PRIVATE' value='1'/>
+        <enumerator name='MEMORY_DEVICE_FS_DAX' value='2'/>
+        <enumerator name='MEMORY_DEVICE_DEVDAX' value='3'/>
+        <enumerator name='MEMORY_DEVICE_PCI_P2PDMA' value='4'/>
+      </enum-decl>
+      <class-decl name='dev_pagemap_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/memremap.h' line='67' column='1' id='c553aabf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_free' type-id='2f974a69' visibility='default' filepath='include/linux/memremap.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kill' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cleanup' type-id='b90b068f' visibility='default' filepath='include/linux/memremap.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='migrate_to_ram' type-id='bb28da1c' visibility='default' filepath='include/linux/memremap.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1' id='f47d5752'>
+        <data-member access='public'>
+          <var-decl name='_mapcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='page_type' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/mm_types.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='units' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types.h' line='196' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='page_entry_size' filepath='include/linux/mm.h' line='538' column='1' id='5555b4b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='PE_SIZE_PTE' value='0'/>
+        <enumerator name='PE_SIZE_PMD' value='1'/>
+        <enumerator name='PE_SIZE_PUD' value='2'/>
+      </enum-decl>
+      <class-decl name='vm_userfaultfd_ctx' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='280' column='1' id='fdd6214e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d25db30' visibility='default' filepath='include/linux/mm_types.h' line='281' 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='60' column='1' id='2235a2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='b6b7435e' visibility='default' filepath='include/linux/mm_types_task.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_context_t' type-id='7319f51c' filepath='arch/arm64/include/asm/mmu.h' line='23' column='1' id='0eb9c3fd'/>
+      <class-decl name='__anonymous_struct__31' size-in-bits='192' is-struct='yes' is-anonymous='yes' naming-typedef-id='0eb9c3fd' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='19' column='1' id='7319f51c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='28ee064c' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vdso' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/mmu.h' line='22' 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='378' column='1' id='0e1f7cac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_threads' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dumper' type-id='f3d147c3' visibility='default' filepath='include/linux/mm_types.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='startup' type-id='f9fef04f' visibility='default' filepath='include/linux/mm_types.h' line='381' 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='373' column='1' id='f3d147c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/mm_types.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='740b5503' visibility='default' filepath='include/linux/mm_types.h' line='375' 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='101' column='1' id='6308a819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xol_area' type-id='3d15880e' visibility='default' filepath='include/linux/uprobes.h' line='102' 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='7436aa2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' 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='95e97e5e' 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='7292109c' 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='a06a810d' 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='870ef624'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tcp_statistics' type-id='19a26ee3' 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='30897c4e' 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='016811bc' 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='d1440a9f' 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='d1440a9f' 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='c085a9fb' 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='0296b670' 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='d077e928' 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='d1440a9f' 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='d1440a9f' 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='30897c4e' 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='1a16368f' 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='bf0465ec' 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='f43a2d4c' 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='92' column='1' id='e1f906a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='d2baa450' visibility='default' filepath='include/net/snmp.h' line='93' 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='51' column='1' id='f52a1ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='2b89ba50' visibility='default' filepath='include/net/snmp.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='syncp' type-id='e4d85780' visibility='default' filepath='include/net/snmp.h' line='54' 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='e4d85780'/>
+      <class-decl name='linux_mib' size-in-bits='7680' is-struct='yes' visibility='default' filepath='include/net/snmp.h' line='104' column='1' id='e222a326'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='1868bbfa' visibility='default' filepath='include/net/snmp.h' line='105' 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='98' column='1' id='89e527b7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='307ac9b4' visibility='default' filepath='include/net/snmp.h' line='99' 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='59' column='1' id='bd4dc4cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='8bbc0f7f' visibility='default' filepath='include/net/snmp.h' line='60' 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='64' column='1' id='b4bfe052'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='65' 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='71' column='1' id='c7afdfb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='f0691bd3' visibility='default' filepath='include/net/snmp.h' line='72' 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='81' column='1' id='1f91fd06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='82' 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='110' column='1' id='7f2c5e96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='4fbdefa2' visibility='default' filepath='include/net/snmp.h' line='111' 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='49d7aa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sklist_lock' type-id='925167dc' 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='e151255a' 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='6e306fde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl_max_dgram_qlen' type-id='95e97e5e' 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='11b101bb' visibility='default' filepath='include/net/netns/unix.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nexthop' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/nexthop.h' line='11' column='1' id='03364088'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/net/netns/nexthop.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='devhash' type-id='030d0b18' visibility='default' filepath='include/net/netns/nexthop.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/nexthop.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_id_allocated' type-id='19c2251e' visibility='default' filepath='include/net/netns/nexthop.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv4' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/ipv4.h' line='44' column='1' id='dba1641f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='forw_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipv4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm4_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv4.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='devconf_all' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='devconf_dflt' type-id='e963f446' visibility='default' filepath='include/net/netns/ipv4.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ra_chain' type-id='00c4cbac' visibility='default' filepath='include/net/netns/ipv4.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ra_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/ipv4.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv4.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='fib_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='fib_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fib_main' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='fib_default' type-id='107630a5' visibility='default' filepath='include/net/netns/ipv4.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_has_custom_local_routes' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv4.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='fib_offload_disabled' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fibnl' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv4.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv4.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='tcp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv4.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv4.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='iptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='iptable_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='iptable_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='arptable_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='iptable_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='nat_table' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv4.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sysctl_icmp_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='sysctl_icmp_echo_ignore_broadcasts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sysctl_icmp_ignore_bogus_error_responses' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='sysctl_icmp_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_icmp_ratemask' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='sysctl_icmp_errors_use_inbound_ifaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='ip_local_ports' type-id='93d4ab27' visibility='default' filepath='include/net/netns/ipv4.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_tcp_ecn' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sysctl_tcp_ecn_fallback' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='sysctl_ip_default_ttl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sysctl_ip_no_pmtu_disc' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='sysctl_ip_fwd_use_pmtu' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sysctl_ip_fwd_update_priority' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='sysctl_ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='sysctl_ip_dynaddr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='sysctl_ip_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sysctl_tcp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2656'>
+          <var-decl name='sysctl_udp_early_demux' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='sysctl_fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='sysctl_tcp_fwmark_accept' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='sysctl_tcp_mtu_probing' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='sysctl_tcp_mtu_probe_floor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='sysctl_tcp_base_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='sysctl_tcp_min_snd_mss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='sysctl_tcp_probe_threshold' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='sysctl_tcp_probe_interval' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv4.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_tcp_keepalive_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_tcp_keepalive_probes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_tcp_keepalive_intvl' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_tcp_syn_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_tcp_synack_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='sysctl_tcp_syncookies' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='sysctl_tcp_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3168'>
+          <var-decl name='sysctl_tcp_retries1' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='sysctl_tcp_retries2' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='sysctl_tcp_orphan_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='sysctl_tcp_fin_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3296'>
+          <var-decl name='sysctl_tcp_notsent_lowat' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='sysctl_tcp_tw_reuse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3360'>
+          <var-decl name='sysctl_tcp_sack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='sysctl_tcp_window_scaling' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3424'>
+          <var-decl name='sysctl_tcp_timestamps' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='sysctl_tcp_early_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='sysctl_tcp_recovery' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='sysctl_tcp_thin_linear_timeouts' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='sysctl_tcp_slow_start_after_idle' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='sysctl_tcp_retrans_collapse' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='sysctl_tcp_stdurg' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='sysctl_tcp_rfc1337' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3680'>
+          <var-decl name='sysctl_tcp_abort_on_overflow' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='sysctl_tcp_fack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3744'>
+          <var-decl name='sysctl_tcp_max_reordering' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='sysctl_tcp_dsack' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='sysctl_tcp_app_win' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='sysctl_tcp_adv_win_scale' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3872'>
+          <var-decl name='sysctl_tcp_frto' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='sysctl_tcp_nometrics_save' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3936'>
+          <var-decl name='sysctl_tcp_moderate_rcvbuf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctl_tcp_tso_win_divisor' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='sysctl_tcp_workaround_signed_windows' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='sysctl_tcp_limit_output_bytes' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4064'>
+          <var-decl name='sysctl_tcp_challenge_ack_limit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='sysctl_tcp_min_tso_segs' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='sysctl_tcp_min_rtt_wlen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='sysctl_tcp_autocorking' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='sysctl_tcp_invalid_ratelimit' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='sysctl_tcp_pacing_ss_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='sysctl_tcp_pacing_ca_ratio' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='sysctl_tcp_wmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='sysctl_tcp_rmem' type-id='e024279b' visibility='default' filepath='include/net/netns/ipv4.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sysctl_tcp_comp_sack_nr' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='sysctl_tcp_comp_sack_delay_ns' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tcp_death_row' type-id='af2c6a56' visibility='default' filepath='include/net/netns/ipv4.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='sysctl_max_syn_backlog' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5664'>
+          <var-decl name='sysctl_tcp_fastopen' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='tcp_congestion_control' type-id='b3ef56ee' visibility='default' filepath='include/net/netns/ipv4.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='tcp_fastopen_ctx' type-id='104fa32f' visibility='default' filepath='include/net/netns/ipv4.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tcp_fastopen_ctx_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv4.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='sysctl_tcp_fastopen_blackhole_timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tfo_active_disable_times' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tfo_active_disable_stamp' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv4.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='sysctl_udp_wmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='sysctl_udp_rmem_min' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='sysctl_igmp_max_memberships' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='sysctl_igmp_max_msf' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='sysctl_igmp_llm_reports' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='sysctl_igmp_qrv' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='ping_group_range' type-id='89d35c53' visibility='default' filepath='include/net/netns/ipv4.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='sysctl_local_reserved_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='sysctl_local_unbindable_ports' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv4.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='sysctl_ip_prot_sock' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='fib_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='ipmr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv4.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv4.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='rt_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='ip_id_key' type-id='7799da43' visibility='default' filepath='include/net/netns/ipv4.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/ipv4.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fqdir' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='9' column='1' id='84dbb257'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='high_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='low_thresh' type-id='bd54fe1a' visibility='default' filepath='include/net/inet_frag.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_dist' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='f' type-id='f6c3a7a5' visibility='default' filepath='include/net/inet_frag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/inet_frag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/net/inet_frag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rhashtable' type-id='9e095f93' visibility='default' filepath='include/net/inet_frag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='mem' type-id='f22a8abb' visibility='default' filepath='include/net/inet_frag.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/net/inet_frag.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frags' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='98' column='1' id='e56bc2e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_frag.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='constructor' type-id='82a6d477' visibility='default' filepath='include/net/inet_frag.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destructor' type-id='7e20177b' visibility='default' filepath='include/net/inet_frag.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frag_expire' type-id='9582ad9a' visibility='default' filepath='include/net/inet_frag.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frags_cachep' type-id='f3b4aca8' visibility='default' filepath='include/net/inet_frag.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='frags_cache_name' type-id='80f4b756' visibility='default' filepath='include/net/inet_frag.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rhash_params' type-id='e4c11782' visibility='default' filepath='include/net/inet_frag.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='completion' type-id='f9fef04f' visibility='default' filepath='include/net/inet_frag.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_frag_queue' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='77' column='1' id='b5a731bc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='f68e0adc' visibility='default' filepath='include/net/inet_frag.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key' type-id='41d7e522' visibility='default' filepath='include/net/inet_frag.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_frag.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_frag.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/inet_frag.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rb_fragments' type-id='dec44472' visibility='default' filepath='include/net/inet_frag.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fragments_tail' type-id='0fbf3cfd' visibility='default' filepath='include/net/inet_frag.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='last_run_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/inet_frag.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='stamp' type-id='fbc017ef' visibility='default' filepath='include/net/inet_frag.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='meat' type-id='95e97e5e' visibility='default' filepath='include/net/inet_frag.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/net/inet_frag.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1296'>
+          <var-decl name='max_size' type-id='1dc6a898' visibility='default' filepath='include/net/inet_frag.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/inet_frag.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/inet_frag.h' line='95' 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='f68e0adc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3cc8739a' visibility='default' filepath='include/linux/rhashtable-types.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__31' size-in-bits='352' is-anonymous='yes' visibility='default' filepath='include/net/inet_frag.h' line='79' column='1' id='41d7e522'>
+        <data-member access='public'>
+          <var-decl name='v4' type-id='c3a8bbbc' visibility='default' filepath='include/net/inet_frag.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='v6' type-id='c67e16a2' visibility='default' filepath='include/net/inet_frag.h' line='81' 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='41' column='1' id='c3a8bbbc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='user' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='vif' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/net/inet_frag.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protocol' type-id='1dc6a898' visibility='default' filepath='include/net/inet_frag.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be32' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='32' column='1' id='78a133c2'/>
+      <typedef-decl name='__be16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='30' column='1' id='84a5c3d4'/>
+      <class-decl name='frag_v6_compare_key' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/inet_frag.h' line='50' column='1' id='c67e16a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/inet_frag.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/inet_frag.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='id' type-id='78a133c2' visibility='default' filepath='include/net/inet_frag.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iif' type-id='19c2251e' visibility='default' filepath='include/net/inet_frag.h' line='55' 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='f6ed712a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in6_u' type-id='0efc37b8' visibility='default' filepath='include/uapi/linux/in6.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__32' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/in6.h' line='34' column='1' id='0efc37b8'>
+        <data-member access='public'>
+          <var-decl name='u6_addr8' type-id='9396cabb' visibility='default' filepath='include/uapi/linux/in6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u6_addr16' type-id='7f112b69' visibility='default' filepath='include/uapi/linux/in6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='u6_addr32' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/in6.h' line='38' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='sk_buff' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='691' column='1' id='ae8bfcdd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='da6f1b1a' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='a6d66544' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='b24a5a7e' visibility='default' filepath='include/linux/skbuff.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cb' type-id='36d7f119' visibility='default' filepath='include/linux/skbuff.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='271a40b8' visibility='default' filepath='include/linux/skbuff.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='_nfct' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mac_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='hdr_len' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_mapping' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='__cloned_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cloned' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='nohdr' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fclone' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='peeked' type-id='8f048e17' 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='head_frag' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='pfmemalloc' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1016'>
+          <var-decl name='active_extensions' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='headers_start' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='__pkt_type_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pkt_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='ignore_df' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='nf_trace' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='ip_summed' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ooo_okay' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l4_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sw_hash' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='wifi_acked_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='wifi_acked' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='no_fcs' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='encapsulation' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='encap_hdr_csum' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='csum_valid' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='__pkt_vlan_present_offset' type-id='167619f6' visibility='default' filepath='include/linux/skbuff.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vlan_present' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='csum_complete_sw' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='csum_level' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='csum_not_inet' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='dst_pending_confirm' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='ndisc_nodetype' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipvs_property' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='inner_protocol_type' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='remcsum_offload' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='tc_skip_classify' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='tc_at_ingress' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='redirected' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='827' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='from_ingress' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='tc_index' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='' type-id='b4fc55b7' visibility='default' filepath='include/linux/skbuff.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='priority' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='skb_iif' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='hash' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vlan_proto' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='848' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='vlan_tci' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='' type-id='8c3ee840' visibility='default' filepath='include/linux/skbuff.h' line='851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='secmark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='' type-id='9c81e675' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='' type-id='b97daab4' visibility='default' filepath='include/linux/skbuff.h' line='865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='inner_transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='inner_network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1392'>
+          <var-decl name='inner_mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='872' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1424'>
+          <var-decl name='transport_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='network_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1456'>
+          <var-decl name='mac_header' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='headers_end' type-id='d5016f6f' visibility='default' filepath='include/linux/skbuff.h' line='880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tail' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='end' type-id='5c1abc34' visibility='default' filepath='include/linux/skbuff.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='head' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='cf536864' visibility='default' filepath='include/linux/skbuff.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='truesize' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='users' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extensions' type-id='374692c7' visibility='default' filepath='include/linux/skbuff.h' line='896' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__33' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='692' column='1' id='da6f1b1a'>
+        <data-member access='public'>
+          <var-decl name='' type-id='fe3b99ac' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rbnode' type-id='2a8a6332' visibility='default' filepath='include/linux/skbuff.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='708' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__32' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='693' column='1' id='fe3b99ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='1285aa79' visibility='default' filepath='include/linux/skbuff.h' line='698' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__34' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='698' column='1' id='1285aa79'>
+        <data-member access='public'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/skbuff.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dev_scratch' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='704' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__35' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='711' column='1' id='a6d66544'>
+        <data-member access='public'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/skbuff.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip_defrag_offset' type-id='95e97e5e' visibility='default' filepath='include/linux/skbuff.h' line='713' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__36' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='716' column='1' id='b24a5a7e'>
+        <data-member access='public'>
+          <var-decl name='tstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skb_mstamp_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/skbuff.h' line='718' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__37' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='728' column='1' id='271a40b8'>
+        <data-member access='public'>
+          <var-decl name='' type-id='710cec71' visibility='default' filepath='include/linux/skbuff.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp_tsorted_anchor' type-id='72f469ec' visibility='default' filepath='include/linux/skbuff.h' line='733' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__33' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='729' column='1' id='710cec71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_skb_refdst' type-id='7359adad' visibility='default' filepath='include/linux/skbuff.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destructor' type-id='0ef96694' visibility='default' filepath='include/linux/skbuff.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__38' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='838' column='1' id='b4fc55b7'>
+        <data-member access='public'>
+          <var-decl name='csum' type-id='fbd88bba' visibility='default' filepath='include/linux/skbuff.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='358587ec' visibility='default' filepath='include/linux/skbuff.h' line='840' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__wsum' type-id='3f1a6b60' filepath='include/uapi/linux/types.h' line='37' column='1' id='fbd88bba'/>
+      <class-decl name='__anonymous_struct__34' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='840' column='1' id='358587ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='csum_start' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='csum_offset' type-id='d315442e' visibility='default' filepath='include/linux/skbuff.h' line='842' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__39' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='851' column='1' id='8c3ee840'>
+        <data-member access='public'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='852' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sender_cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/skbuff.h' line='853' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__40' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='860' column='1' id='9c81e675'>
+        <data-member access='public'>
+          <var-decl name='mark' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved_tailroom' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='862' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__41' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/skbuff.h' line='865' column='1' id='b97daab4'>
+        <data-member access='public'>
+          <var-decl name='inner_protocol' type-id='84a5c3d4' visibility='default' filepath='include/linux/skbuff.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='inner_ipproto' type-id='8f048e17' visibility='default' filepath='include/linux/skbuff.h' line='867' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_buff_data_t' type-id='f0981eeb' filepath='include/linux/skbuff.h' line='608' column='1' id='5c1abc34'/>
+      <class-decl name='skb_ext' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='4137' column='1' id='a8c69bdf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/skbuff.h' line='4138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='cf114704' visibility='default' filepath='include/linux/skbuff.h' line='4139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='chunks' type-id='f9b06939' visibility='default' filepath='include/linux/skbuff.h' line='4140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/skbuff.h' line='4141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='56' column='1' id='e4c11782'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nelem_hint' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='key_len' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='head_offset' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_size' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_size' type-id='1dc6a898' visibility='default' filepath='include/linux/rhashtable-types.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='automatic_shrinking' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hashfn' type-id='07fa0d18' visibility='default' filepath='include/linux/rhashtable-types.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='obj_hashfn' type-id='365fa902' visibility='default' filepath='include/linux/rhashtable-types.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='obj_cmpfn' type-id='a8e15d8c' visibility='default' filepath='include/linux/rhashtable-types.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rht_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='38' column='1' id='07fa0d18'/>
+      <typedef-decl name='rht_obj_hashfn_t' type-id='bc00c03b' filepath='include/linux/rhashtable-types.h' line='39' column='1' id='365fa902'/>
+      <typedef-decl name='rht_obj_cmpfn_t' type-id='d8c458ae' filepath='include/linux/rhashtable-types.h' line='40' column='1' id='a8e15d8c'/>
+      <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='9f7fd760'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ht' type-id='e6726ce3' 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='eaa32e2f' visibility='default' filepath='include/linux/rhashtable-types.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rhashtable' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/rhashtable-types.h' line='81' column='1' id='9e095f93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tbl' type-id='35e7a722' visibility='default' filepath='include/linux/rhashtable-types.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_elems' type-id='f0981eeb' visibility='default' filepath='include/linux/rhashtable-types.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='p' type-id='e4c11782' visibility='default' filepath='include/linux/rhashtable-types.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rhlist' type-id='b50a4934' visibility='default' filepath='include/linux/rhashtable-types.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='run_work' type-id='ef9025d0' visibility='default' filepath='include/linux/rhashtable-types.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/rhashtable-types.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rhashtable-types.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nelems' type-id='49178f86' visibility='default' filepath='include/linux/rhashtable-types.h' line='90' 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='22' column='1' id='93d4ab27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='e4266c7e' visibility='default' filepath='include/net/netns/ipv4.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv4.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='seqlock_t' type-id='c87ee7e4' filepath='include/linux/seqlock.h' line='414' column='1' id='e6cd5ecf'/>
+      <class-decl name='__anonymous_struct__35' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='e6cd5ecf' visibility='default' filepath='include/linux/seqlock.h' line='411' column='1' id='c87ee7e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqcount' type-id='3a74ff0b' visibility='default' filepath='include/linux/seqlock.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/seqlock.h' line='413' 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='35' column='1' id='af2c6a56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tw_count' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv4.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/netns/ipv4.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sysctl_max_tw_buckets' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv4.h' line='39' 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='28' column='1' id='89d35c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/ipv4.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='range' type-id='5fd0d2fb' visibility='default' filepath='include/net/netns/ipv4.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='siphash_key_t' type-id='a1908dcc' filepath='include/linux/siphash.h' line='22' column='1' id='7799da43'/>
+      <class-decl name='__anonymous_struct__36' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='7799da43' visibility='default' filepath='include/linux/siphash.h' line='20' column='1' id='a1908dcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='24a375b2' visibility='default' filepath='include/linux/siphash.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_ipv6' size-in-bits='6144' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='57' column='1' id='dda16745'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysctl' type-id='6c13064a' visibility='default' filepath='include/net/netns/ipv6.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='devconf_all' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='devconf_dflt' type-id='ca399350' visibility='default' filepath='include/net/netns/ipv6.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='peers' type-id='01d310c2' visibility='default' filepath='include/net/netns/ipv6.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ip6table_filter' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ip6table_mangle' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ip6table_raw' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ip6table_security' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ip6table_nat' type-id='95610bd4' visibility='default' filepath='include/net/netns/ipv6.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='fib6_null_entry' type-id='fe454a75' visibility='default' filepath='include/net/netns/ipv6.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ip6_null_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rt6_stats' type-id='aca8a113' visibility='default' filepath='include/net/netns/ipv6.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ip6_fib_timer' type-id='abe41e67' visibility='default' filepath='include/net/netns/ipv6.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fib_table_hash' type-id='030d0b18' visibility='default' filepath='include/net/netns/ipv6.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='fib6_main_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='fib6_walkers' type-id='72f469ec' visibility='default' filepath='include/net/netns/ipv6.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='ip6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/ipv6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='fib6_walker_lock' type-id='ac16795b' visibility='default' filepath='include/net/netns/ipv6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='fib6_gc_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4704'>
+          <var-decl name='ip6_rt_gc_expire' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='ip6_rt_last_gc' type-id='7359adad' visibility='default' filepath='include/net/netns/ipv6.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='fib6_rules_require_fldissect' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='fib6_has_custom_rules' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ip6_prohibit_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='ip6_blk_hole_entry' type-id='6ceb7782' visibility='default' filepath='include/net/netns/ipv6.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='fib6_local_tbl' type-id='7156b317' visibility='default' filepath='include/net/netns/ipv6.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='fib6_rules_ops' type-id='a68064b1' visibility='default' filepath='include/net/netns/ipv6.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='icmp_sk' type-id='d0d57cc5' visibility='default' filepath='include/net/netns/ipv6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='ndisc_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='tcp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='igmp_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='mc_autojoin_sk' type-id='f772df6d' visibility='default' filepath='include/net/netns/ipv6.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='dev_addr_genid' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5472'>
+          <var-decl name='fib6_sernum' type-id='49178f86' visibility='default' filepath='include/net/netns/ipv6.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='seg6_data' type-id='15b8a3be' visibility='default' filepath='include/net/netns/ipv6.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='ip6mr_notifier_ops' type-id='74f101b0' visibility='default' filepath='include/net/netns/ipv6.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='ipmr_seq' type-id='f0981eeb' visibility='default' filepath='include/net/netns/ipv6.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='ip6addrlbl_table' type-id='a03c964b' visibility='default' filepath='include/net/netns/ipv6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/ipv6.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_sysctl_ipv6' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='16' column='1' id='6c13064a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='route_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmp_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xfrm6_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='bindv6only' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flush_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ip6_rt_max_size' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='ip6_rt_gc_min_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ip6_rt_gc_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ip6_rt_gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip6_rt_gc_elasticity' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='ip6_rt_mtu_expires' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ip6_rt_min_advmss' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='multipath_hash_policy' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flowlabel_consistency' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='auto_flowlabels' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='icmpv6_time' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='icmpv6_echo_ignore_all' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='icmpv6_echo_ignore_multicast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='icmpv6_echo_ignore_anycast' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='icmpv6_ratemask' type-id='f46d9f4d' visibility='default' filepath='include/net/netns/ipv6.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='icmpv6_ratemask_ptr' type-id='1d2c2b85' visibility='default' filepath='include/net/netns/ipv6.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='anycast_src_echo_reply' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ip_nonlocal_bind' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='fwmark_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='idgen_retries' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='idgen_delay' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='flowlabel_state_ranges' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flowlabel_reflect' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='max_dst_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='max_hbh_opts_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='max_dst_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_hbh_opts_len' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='seg6_flowlabel' type-id='95e97e5e' visibility='default' filepath='include/net/netns/ipv6.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='skip_notify_on_dev_down' type-id='b50a4934' visibility='default' filepath='include/net/netns/ipv6.h' line='54' 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='32358857'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8efea9e5' 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='f0981eeb' 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='79efa3b3' 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='d7c38177' 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='34c443b7' 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='34c443b7' 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='9917918c' 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='d6965222' 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='ce828d9f' 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='3ce3447a' 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='0ef96694' 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='79b8da5c' 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='9f403612' 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='0023218e' 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='950eceb8' 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='7e5b15cf' 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='f3b4aca8' 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='b92c8d0d' 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='b92c8d0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='9b7c55ef' 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='72f469ec' 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='9f2cce4b' visibility='default' filepath='include/linux/percpu_counter.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__37' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='111' column='1' id='a03c964b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/netns/ipv6.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/ipv6.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/netns/ipv6.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/net/netns/netfilter.h' line='12' column='1' id='0a6298e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_netfilter' type-id='d077e928' visibility='default' filepath='include/net/netns/netfilter.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='queue_handler' type-id='67f12fe3' visibility='default' filepath='include/net/netns/netfilter.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nf_loggers' type-id='e521ce61' visibility='default' filepath='include/net/netns/netfilter.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nf_log_dir_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/netfilter.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hooks_ipv4' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hooks_ipv6' type-id='94310593' visibility='default' filepath='include/net/netns/netfilter.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hooks_arp' type-id='d82cf371' visibility='default' filepath='include/net/netns/netfilter.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='defrag_ipv4' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1864'>
+          <var-decl name='defrag_ipv6' type-id='b50a4934' visibility='default' filepath='include/net/netns/netfilter.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/netfilter.h' line='39' 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='288fe7b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tables' type-id='5e747b58' 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='b50a4934' 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='b50a4934' 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='3328' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='95' column='1' id='2a831eeb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/net/netns/conntrack.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='expect_count' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ecache_dwork' type-id='5ad6e0ef' visibility='default' filepath='include/net/netns/conntrack.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ecache_dwork_pending' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='auto_assign_helper_warned' type-id='b50a4934' visibility='default' filepath='include/net/netns/conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='sysctl_header' type-id='11b101bb' visibility='default' filepath='include/net/netns/conntrack.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='sysctl_log_invalid' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='sysctl_events' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sysctl_acct' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='sysctl_auto_assign_helper' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctl_tstamp' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='sysctl_checksum' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pcpu_lists' type-id='b2bcb5d9' visibility='default' filepath='include/net/netns/conntrack.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stat' type-id='e46089fd' visibility='default' filepath='include/net/netns/conntrack.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nf_conntrack_event_cb' type-id='2db792b9' visibility='default' filepath='include/net/netns/conntrack.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nf_expect_event_cb' type-id='bb6de7e1' visibility='default' filepath='include/net/netns/conntrack.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='nf_ct_proto' type-id='7f3015f3' visibility='default' filepath='include/net/netns/conntrack.h' line='117' 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='89' column='1' id='4ec43a31'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/conntrack.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='unconfirmed' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dying' type-id='af86905d' visibility='default' filepath='include/net/netns/conntrack.h' line='92' 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='af86905d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='6cf6468f' 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='5bd248e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='6cf6468f' 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='2cb135bf' 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='8' column='1' id='be50a64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='found' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='invalid' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='insert' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='insert_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='early_drop' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='error' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expect_new' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='expect_create' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='expect_delete' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='search_restart' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ip_net' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='72' column='1' id='7f3015f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='generic' type-id='80487c53' visibility='default' filepath='include/net/netns/conntrack.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tcp' type-id='a2e01929' visibility='default' filepath='include/net/netns/conntrack.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='udp' type-id='328aff41' visibility='default' filepath='include/net/netns/conntrack.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='icmp' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='icmpv6' type-id='8cc9c55b' visibility='default' filepath='include/net/netns/conntrack.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dccp' type-id='ddb2f0ec' visibility='default' filepath='include/net/netns/conntrack.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='sctp' type-id='c91839d0' visibility='default' filepath='include/net/netns/conntrack.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='gre' type-id='ef266e4a' visibility='default' filepath='include/net/netns/conntrack.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_generic_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='21' column='1' id='80487c53'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_tcp_net' size-in-bits='544' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='25' column='1' id='a2e01929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='27cbf0c8' visibility='default' filepath='include/net/netns/conntrack.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tcp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='tcp_be_liberal' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tcp_max_retrans' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_udp_net' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='38' column='1' id='328aff41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_icmp_net' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='42' column='1' id='8cc9c55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/net/netns/conntrack.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_dccp_net' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='47' column='1' id='ddb2f0ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dccp_loose' type-id='95e97e5e' visibility='default' filepath='include/net/netns/conntrack.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dccp_timeout' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_sctp_net' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='54' column='1' id='c91839d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timeouts' type-id='67c1c82c' visibility='default' filepath='include/net/netns/conntrack.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_gre_net' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netns/conntrack.h' line='66' column='1' id='ef266e4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='keymap_list' type-id='72f469ec' visibility='default' filepath='include/net/netns/conntrack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeouts' type-id='0d532ec1' visibility='default' filepath='include/net/netns/conntrack.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_nf_frag' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netns/ipv6.h' line='121' column='1' id='ebd39a5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fqdir' type-id='943ad75f' visibility='default' filepath='include/net/netns/ipv6.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sk_buff_head' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/skbuff.h' line='291' column='1' id='e61c85d0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='0fbf3cfd' visibility='default' filepath='include/linux/skbuff.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='qlen' type-id='3f1a6b60' visibility='default' filepath='include/linux/skbuff.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/skbuff.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xfrm' size-in-bits='7168' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='33' column='1' id='3d2d291b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_all' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state_bydst' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state_bysrc' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state_byspi' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='state_num' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='state_hash_work' type-id='ef9025d0' 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_all' type-id='72f469ec' 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_byidx' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='policy_idx_hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='policy_inexact' type-id='fc293b5f' visibility='default' filepath='include/net/netns/xfrm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='policy_bydst' type-id='bd1ec77b' visibility='default' filepath='include/net/netns/xfrm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='policy_count' type-id='0d5c291d' visibility='default' filepath='include/net/netns/xfrm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='policy_hash_work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='policy_hthresh' type-id='52aaaba4' visibility='default' filepath='include/net/netns/xfrm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='inexact_bins' type-id='72f469ec' visibility='default' filepath='include/net/netns/xfrm.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='nlsk' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='nlsk_stash' type-id='f772df6d' visibility='default' filepath='include/net/netns/xfrm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sysctl_aevent_etime' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2976'>
+          <var-decl name='sysctl_aevent_rseqth' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='sysctl_larval_drop' type-id='95e97e5e' visibility='default' filepath='include/net/netns/xfrm.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='sysctl_acq_expires' type-id='19c2251e' visibility='default' filepath='include/net/netns/xfrm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sysctl_hdr' type-id='11b101bb' visibility='default' filepath='include/net/netns/xfrm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='xfrm4_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='xfrm6_dst_ops' type-id='32358857' visibility='default' filepath='include/net/netns/xfrm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='xfrm_state_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='xfrm_state_hash_generation' type-id='e14c3b11' visibility='default' filepath='include/net/netns/xfrm.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='xfrm_policy_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/xfrm.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='xfrm_cfg_mutex' type-id='925167dc' visibility='default' filepath='include/net/netns/xfrm.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/xfrm.h' line='82' 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='15' column='1' id='9b61d1a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='030d0b18' visibility='default' filepath='include/net/netns/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hmask' type-id='f0981eeb' visibility='default' filepath='include/net/netns/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='sbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='dbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='sbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_hthresh' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/netns/xfrm.h' line='24' column='1' id='52aaaba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/net/netns/xfrm.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/net/netns/xfrm.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='rbits4' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='lbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='rbits6' type-id='f9b06939' visibility='default' filepath='include/net/netns/xfrm.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_can' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/net/netns/can.h' line='16' column='1' id='8f9898ce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pde_version' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pde_stats' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pde_reset_stats' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pde_rcvlist_all' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pde_rcvlist_fil' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pde_rcvlist_inv' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pde_rcvlist_sff' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pde_rcvlist_eff' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pde_rcvlist_err' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bcmproc_dir' type-id='d077e928' visibility='default' filepath='include/net/netns/can.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_alldev_list' type-id='d180faa7' visibility='default' filepath='include/net/netns/can.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcvlists_lock' type-id='fb4018a0' visibility='default' filepath='include/net/netns/can.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stattimer' type-id='abe41e67' visibility='default' filepath='include/net/netns/can.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pkg_stats' type-id='daf2ec26' visibility='default' filepath='include/net/netns/can.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rcv_lists_stats' type-id='8981c393' visibility='default' filepath='include/net/netns/can.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cgw_list' type-id='e151255a' visibility='default' filepath='include/net/netns/can.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netns/can.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netns_xdp' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netns/xdp.h' line='8' column='1' id='a2b0ef48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/netns/xdp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='e151255a' visibility='default' filepath='include/net/netns/xdp.h' line='10' 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='39' column='1' id='47841236'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='expires' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='incr' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='thread_group_cputimer' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='67' column='1' id='9480bb51'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime_atomic' type-id='4b60fba4' visibility='default' filepath='include/linux/sched/signal.h' line='68' 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='48' column='1' id='4b60fba4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='28ee064c' visibility='default' filepath='include/linux/sched/signal.h' line='51' 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='60dcbf6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rlim_cur' type-id='447da2ae' 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='447da2ae' visibility='default' filepath='include/uapi/linux/resource.h' line='45' 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='49' column='1' id='a21c4412'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa' type-id='fe391c48' visibility='default' filepath='include/linux/signal_types.h' line='50' 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='35' column='1' id='fe391c48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sa_handler' type-id='8cdd9566' visibility='default' filepath='include/linux/signal_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sa_flags' type-id='7359adad' visibility='default' filepath='include/linux/signal_types.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sa_restorer' type-id='81564178' visibility='default' filepath='include/linux/signal_types.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sa_mask' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__sighandler_t' type-id='a38aafde' filepath='include/uapi/asm-generic/signal-defs.h' line='19' column='1' id='8cdd9566'/>
+      <typedef-decl name='__signalfn_t' type-id='f712e2b7' filepath='include/uapi/asm-generic/signal-defs.h' line='18' column='1' id='3b5c61ad'/>
+      <typedef-decl name='__sigrestore_t' type-id='5d3a884e' filepath='include/uapi/asm-generic/signal-defs.h' line='22' column='1' id='81564178'/>
+      <typedef-decl name='__restorefn_t' type-id='ee076206' filepath='include/uapi/asm-generic/signal-defs.h' line='21' column='1' id='830ee0a7'/>
+      <class-decl name='io_cq' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='73' column='1' id='db04abd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/iocontext.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ioc' type-id='d042cfad' visibility='default' filepath='include/linux/iocontext.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='df248743' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='eb20ccf0' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/iocontext.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__42' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='83' column='1' id='df248743'>
+        <data-member access='public'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/iocontext.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__rcu_icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/iocontext.h' line='85' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__43' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/iocontext.h' line='87' column='1' id='eb20ccf0'>
+        <data-member access='public'>
+          <var-decl name='ioc_node' type-id='03a4a074' visibility='default' filepath='include/linux/iocontext.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='__rcu_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/iocontext.h' line='89' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='compat_robust_list' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/compat.h' line='374' column='1' id='bd51dd4a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='375' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='compat_uptr_t' type-id='19c2251e' filepath='include/asm-generic/compat.h' line='22' column='1' id='782d78af'/>
+      <typedef-decl name='compat_long_t' type-id='a7832498' filepath='include/asm-generic/compat.h' line='18' column='1' id='abb906de'/>
+      <enum-decl name='uprobe_task_state' filepath='include/linux/uprobes.h' line='51' column='1' id='5d1a5bc7'>
+        <underlying-type type-id='9cac1fee'/>
+        <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__45' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1' id='f5a928fc'>
+        <data-member access='public'>
+          <var-decl name='' type-id='2b31becf' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='46982a3f' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__38' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='65' column='1' id='2b31becf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autask' type-id='79aea64f' visibility='default' filepath='include/linux/uprobes.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='67' 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='21' column='1' id='79aea64f'/>
+      <class-decl name='__anonymous_struct__39' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/uprobes.h' line='70' column='1' id='46982a3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dup_xol_work' type-id='e3d8ce29' visibility='default' filepath='include/linux/uprobes.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dup_xol_addr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='return_instance' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/uprobes.h' line='83' column='1' id='c0342c43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stack' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_ret_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chained' type-id='b50a4934' visibility='default' filepath='include/linux/uprobes.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7cdfe313' size-in-bits='64' id='7d71a706'/>
+      <pointer-type-def type-id='830ee0a7' size-in-bits='64' id='5d3a884e'/>
+      <pointer-type-def type-id='3b5c61ad' size-in-bits='64' id='a38aafde'/>
+      <pointer-type-def type-id='0fd82dc2' size-in-bits='64' id='f57039f0'/>
+      <pointer-type-def type-id='14f332cc' size-in-bits='64' id='a8f86cda'/>
+      <pointer-type-def type-id='3249e303' size-in-bits='64' id='815cf0d3'/>
+      <pointer-type-def type-id='f22a8abb' size-in-bits='64' id='5403cb36'/>
+      <pointer-type-def type-id='a6222917' size-in-bits='64' id='0b001c1f'/>
+      <pointer-type-def type-id='0b001c1f' size-in-bits='64' id='862c676f'/>
+      <pointer-type-def type-id='ac0aeb1d' size-in-bits='64' id='f885ca7d'/>
+      <pointer-type-def type-id='d83a2db1' size-in-bits='64' id='c0e2acc9'/>
+      <pointer-type-def type-id='c0e2acc9' size-in-bits='64' id='87d62959'/>
+      <pointer-type-def type-id='1b893cc5' size-in-bits='64' id='b88dd945'/>
+      <pointer-type-def type-id='b50a4934' size-in-bits='64' id='d8e6b335'/>
+      <pointer-type-def type-id='facd5338' size-in-bits='64' id='bdcee7ae'/>
+      <pointer-type-def type-id='72790540' size-in-bits='64' id='1f7f0216'/>
+      <pointer-type-def type-id='984972f4' size-in-bits='64' id='35e7a722'/>
+      <pointer-type-def type-id='93630c4e' size-in-bits='64' id='c250b0e4'/>
+      <pointer-type-def type-id='69c138b1' size-in-bits='64' id='162c1c01'/>
+      <pointer-type-def type-id='e82476af' size-in-bits='64' id='d180faa7'/>
+      <pointer-type-def type-id='036e1e80' size-in-bits='64' id='daf2ec26'/>
+      <pointer-type-def type-id='8c8c8763' size-in-bits='64' id='8981c393'/>
+      <pointer-type-def type-id='22f86351' size-in-bits='64' id='3e6eb939'/>
+      <pointer-type-def type-id='473764d9' size-in-bits='64' id='84618a95'/>
+      <qualified-type-def type-id='66fa8ce5' const='yes' id='38ce7f2c'/>
+      <pointer-type-def type-id='38ce7f2c' size-in-bits='64' id='7311f672'/>
+      <qualified-type-def type-id='e4af473b' const='yes' id='e88d0150'/>
+      <pointer-type-def type-id='e88d0150' size-in-bits='64' id='8ff9530e'/>
+      <pointer-type-def type-id='8ff9530e' size-in-bits='64' id='c97de1ac'/>
+      <qualified-type-def type-id='40af3608' const='yes' id='e70f1c73'/>
+      <pointer-type-def type-id='e70f1c73' size-in-bits='64' id='15c9a01b'/>
+      <pointer-type-def type-id='933e0e21' size-in-bits='64' id='76ae8e1d'/>
+      <pointer-type-def type-id='ebb550f0' size-in-bits='64' id='84ba3262'/>
+      <qualified-type-def type-id='84ba3262' const='yes' id='1ea91ded'/>
+      <pointer-type-def type-id='6dbd849e' size-in-bits='64' id='e803acd0'/>
+      <pointer-type-def type-id='80f4b756' size-in-bits='64' id='7d3cd834'/>
+      <qualified-type-def type-id='d6ebca75' const='yes' id='893302ec'/>
+      <pointer-type-def type-id='893302ec' size-in-bits='64' id='c14d5db2'/>
+      <qualified-type-def type-id='e4992400' const='yes' id='1d22df6b'/>
+      <pointer-type-def type-id='1d22df6b' size-in-bits='64' id='1ee57353'/>
+      <qualified-type-def type-id='c553aabf' const='yes' id='7c8b7a6c'/>
+      <pointer-type-def type-id='7c8b7a6c' size-in-bits='64' id='55917c32'/>
+      <qualified-type-def type-id='0584e65d' const='yes' id='47d6ff44'/>
+      <pointer-type-def type-id='47d6ff44' size-in-bits='64' id='85741a2a'/>
+      <qualified-type-def type-id='772a4ddf' const='yes' id='ff1ab2e4'/>
+      <pointer-type-def type-id='ff1ab2e4' size-in-bits='64' id='65077a4a'/>
+      <qualified-type-def type-id='1a0c5572' const='yes' id='3cea21ed'/>
+      <pointer-type-def type-id='3cea21ed' size-in-bits='64' id='ab932c45'/>
+      <qualified-type-def type-id='b4b8adeb' const='yes' id='09ffba8a'/>
+      <pointer-type-def type-id='09ffba8a' size-in-bits='64' id='5d92c9e0'/>
+      <qualified-type-def type-id='1958bd2a' const='yes' id='0b88199f'/>
+      <pointer-type-def type-id='0b88199f' size-in-bits='64' id='dc4077ef'/>
+      <qualified-type-def type-id='7dffcde2' const='yes' id='b8ae588d'/>
+      <pointer-type-def type-id='b8ae588d' size-in-bits='64' id='61758ee5'/>
+      <qualified-type-def type-id='8a2a988b' const='yes' id='dc743cb2'/>
+      <pointer-type-def type-id='dc743cb2' size-in-bits='64' id='a2fb6348'/>
+      <qualified-type-def type-id='fa21a7e9' const='yes' id='de5211b8'/>
+      <pointer-type-def type-id='de5211b8' size-in-bits='64' id='8d31a8d6'/>
+      <qualified-type-def type-id='5f0d764c' const='yes' id='0c45e0bb'/>
+      <pointer-type-def type-id='0c45e0bb' size-in-bits='64' id='e3008443'/>
+      <qualified-type-def type-id='fe070fe8' const='yes' id='45cc51cf'/>
+      <pointer-type-def type-id='45cc51cf' size-in-bits='64' id='c5a4eb7f'/>
+      <qualified-type-def type-id='5f5aa1ff' const='yes' id='c8e0fb8e'/>
+      <pointer-type-def type-id='c8e0fb8e' size-in-bits='64' id='de2c232c'/>
+      <qualified-type-def type-id='0f042891' const='yes' id='fb4943b2'/>
+      <pointer-type-def type-id='fb4943b2' size-in-bits='64' id='2c556848'/>
+      <qualified-type-def type-id='ca10d3ca' const='yes' id='77e48e1b'/>
+      <pointer-type-def type-id='77e48e1b' size-in-bits='64' id='edcbd723'/>
+      <qualified-type-def type-id='1740bab9' const='yes' id='95d0d4e8'/>
+      <pointer-type-def type-id='95d0d4e8' size-in-bits='64' id='99beed66'/>
+      <qualified-type-def type-id='9493d3c9' const='yes' id='d03af91a'/>
+      <pointer-type-def type-id='d03af91a' size-in-bits='64' id='fcd64690'/>
+      <qualified-type-def type-id='ae89b201' const='yes' id='499c8dd8'/>
+      <pointer-type-def type-id='499c8dd8' size-in-bits='64' id='d37373f6'/>
+      <qualified-type-def type-id='2888d74a' const='yes' id='7893b96a'/>
+      <pointer-type-def type-id='7893b96a' size-in-bits='64' id='108c9fc0'/>
+      <qualified-type-def type-id='71e87d49' const='yes' id='47f81694'/>
+      <pointer-type-def type-id='47f81694' size-in-bits='64' id='098bcd1a'/>
+      <qualified-type-def type-id='ff771233' const='yes' id='a4a37730'/>
+      <pointer-type-def type-id='a4a37730' size-in-bits='64' id='47547dee'/>
+      <pointer-type-def type-id='10e36dc5' size-in-bits='64' id='10f0a819'/>
+      <qualified-type-def type-id='3b156a69' const='yes' id='d8801604'/>
+      <pointer-type-def type-id='d8801604' size-in-bits='64' id='ffa2ea6a'/>
+      <qualified-type-def type-id='744e4af5' const='yes' id='ef40fb12'/>
+      <pointer-type-def type-id='ef40fb12' size-in-bits='64' id='db4b7928'/>
+      <qualified-type-def type-id='9f6abc71' const='yes' id='b2d59d2a'/>
+      <pointer-type-def type-id='b2d59d2a' size-in-bits='64' id='86462700'/>
+      <qualified-type-def type-id='cd5915d8' const='yes' id='ccd48cf5'/>
+      <pointer-type-def type-id='ccd48cf5' size-in-bits='64' id='5199c30d'/>
+      <qualified-type-def type-id='970ecd31' const='yes' id='4bf19232'/>
+      <pointer-type-def type-id='4bf19232' size-in-bits='64' id='a548fbc8'/>
+      <qualified-type-def type-id='01c546da' const='yes' id='f1415d4d'/>
+      <pointer-type-def type-id='f1415d4d' size-in-bits='64' id='30e60925'/>
+      <qualified-type-def type-id='b77325d2' const='yes' id='2d144a5b'/>
+      <pointer-type-def type-id='2d144a5b' size-in-bits='64' id='67f12fe3'/>
+      <qualified-type-def type-id='b5382ece' const='yes' id='5251a03b'/>
+      <pointer-type-def type-id='5251a03b' size-in-bits='64' id='a77efac3'/>
+      <qualified-type-def type-id='ed6c59ba' const='yes' id='2153cf5d'/>
+      <pointer-type-def type-id='2153cf5d' size-in-bits='64' id='edef9855'/>
+      <qualified-type-def type-id='02244303' const='yes' id='82c73a4e'/>
+      <pointer-type-def type-id='82c73a4e' size-in-bits='64' id='43a0eb6c'/>
+      <qualified-type-def type-id='87cad984' const='yes' id='3ae4e62d'/>
+      <pointer-type-def type-id='3ae4e62d' size-in-bits='64' id='bd561d05'/>
+      <qualified-type-def type-id='8ce4ff83' const='yes' id='051f9336'/>
+      <pointer-type-def type-id='051f9336' size-in-bits='64' id='2cb49514'/>
+      <qualified-type-def type-id='a7832498' const='yes' id='5e3feda8'/>
+      <pointer-type-def type-id='5e3feda8' size-in-bits='64' id='e0a2e3a6'/>
+      <qualified-type-def type-id='c4b04493' const='yes' id='b64da4b2'/>
+      <pointer-type-def type-id='b64da4b2' size-in-bits='64' id='943a1b48'/>
+      <qualified-type-def type-id='874691ab' const='yes' id='ecd54c0e'/>
+      <pointer-type-def type-id='ecd54c0e' size-in-bits='64' id='f7c6dcac'/>
+      <qualified-type-def type-id='e7826ffa' const='yes' id='0f840455'/>
+      <pointer-type-def type-id='0f840455' size-in-bits='64' id='ebd313ed'/>
+      <qualified-type-def type-id='54718f09' const='yes' id='c408da30'/>
+      <pointer-type-def type-id='c408da30' size-in-bits='64' id='b3ef56ee'/>
+      <qualified-type-def type-id='1dc6a898' const='yes' id='d5c0a628'/>
+      <qualified-type-def type-id='002ac4a6' const='yes' id='ea86de29'/>
+      <pointer-type-def type-id='ea86de29' size-in-bits='64' id='354f7eb9'/>
+      <qualified-type-def type-id='f0981eeb' const='yes' id='20f5f452'/>
+      <qualified-type-def type-id='7359adad' const='yes' id='9cbd1c16'/>
+      <qualified-type-def type-id='19795245' const='yes' id='92e9b57c'/>
+      <pointer-type-def type-id='92e9b57c' size-in-bits='64' id='9be87662'/>
+      <qualified-type-def type-id='2d3dd5e3' const='yes' id='e4f938dc'/>
+      <pointer-type-def type-id='e4f938dc' size-in-bits='64' id='6a54ab42'/>
+      <pointer-type-def type-id='6a54ab42' size-in-bits='64' id='cb49d4b8'/>
+      <pointer-type-def type-id='0e1f7cac' size-in-bits='64' id='90ad83aa'/>
+      <pointer-type-def type-id='f3d147c3' size-in-bits='64' id='740b5503'/>
+      <pointer-type-def type-id='4ec43a31' size-in-bits='64' id='b2bcb5d9'/>
+      <pointer-type-def type-id='7c7d6006' size-in-bits='64' id='1c66bddc'/>
+      <pointer-type-def type-id='beafd747' size-in-bits='64' id='a586bbcf'/>
+      <pointer-type-def type-id='91a515f9' size-in-bits='64' id='631dc3c1'/>
+      <pointer-type-def type-id='ed51618b' size-in-bits='64' id='11b101bb'/>
+      <pointer-type-def type-id='d39c42ab' size-in-bits='64' id='4dec003b'/>
+      <pointer-type-def type-id='d83969a6' size-in-bits='64' id='2993adbc'/>
+      <pointer-type-def type-id='3fc3d262' size-in-bits='64' id='42988600'/>
+      <pointer-type-def type-id='7552fc26' size-in-bits='64' id='50abd760'/>
+      <pointer-type-def type-id='f1fbc58e' size-in-bits='64' id='26cad514'/>
+      <pointer-type-def type-id='d6ebca75' size-in-bits='64' id='27675065'/>
+      <pointer-type-def type-id='277029da' size-in-bits='64' id='3cce524c'/>
+      <pointer-type-def type-id='fbe9020d' size-in-bits='64' id='d9394db1'/>
+      <pointer-type-def type-id='2bdce7cd' size-in-bits='64' id='02f90a61'/>
+      <pointer-type-def type-id='8e586c5c' size-in-bits='64' id='b1a5e68a'/>
+      <pointer-type-def type-id='d5476b80' size-in-bits='64' id='b80a6036'/>
+      <pointer-type-def type-id='691a06da' size-in-bits='64' id='e9a4c848'/>
+      <pointer-type-def type-id='13edfabd' size-in-bits='64' id='324070f9'/>
+      <pointer-type-def type-id='e9a4c848' size-in-bits='64' id='30677246'/>
+      <pointer-type-def type-id='5a9e3f68' size-in-bits='64' id='ae02292a'/>
+      <pointer-type-def type-id='772a4ddf' size-in-bits='64' id='141b6427'/>
+      <pointer-type-def type-id='c21690c0' size-in-bits='64' id='3ce3447a'/>
+      <pointer-type-def type-id='7f4a5e53' size-in-bits='64' id='d7c38177'/>
+      <pointer-type-def type-id='32358857' size-in-bits='64' id='6d30564f'/>
+      <pointer-type-def type-id='e6a2a878' size-in-bits='64' id='7f79f20e'/>
+      <pointer-type-def type-id='da1095b6' size-in-bits='64' id='7f0eb64c'/>
+      <pointer-type-def type-id='70c545cd' size-in-bits='64' id='5bb9c75d'/>
+      <pointer-type-def type-id='faaac7a5' size-in-bits='64' id='fe454a75'/>
+      <pointer-type-def type-id='7147e7ff' size-in-bits='64' id='7156b317'/>
+      <pointer-type-def type-id='ef45f062' size-in-bits='64' id='74f101b0'/>
+      <pointer-type-def type-id='e079fe29' size-in-bits='64' id='a68064b1'/>
+      <pointer-type-def type-id='a2b406b5' size-in-bits='64' id='107630a5'/>
+      <pointer-type-def type-id='eab08458' size-in-bits='64' id='d92598ce'/>
+      <pointer-type-def type-id='8ffe5745' size-in-bits='64' id='890caaa5'/>
+      <pointer-type-def type-id='b4b8adeb' size-in-bits='64' id='77e79a4b'/>
+      <pointer-type-def type-id='23c73eb3' size-in-bits='64' id='0343ce83'/>
+      <pointer-type-def type-id='0343ce83' size-in-bits='64' id='ccbe540b'/>
+      <pointer-type-def type-id='fb0c2987' size-in-bits='64' id='731257ff'/>
+      <pointer-type-def type-id='2f5a60be' size-in-bits='64' id='21e53d44'/>
+      <pointer-type-def type-id='84dbb257' size-in-bits='64' id='943ad75f'/>
+      <pointer-type-def type-id='8d0295a2' size-in-bits='64' id='5760dcb0'/>
+      <pointer-type-def type-id='9441bb37' size-in-bits='64' id='1ea8c5af'/>
+      <pointer-type-def type-id='aadc8ce9' size-in-bits='64' id='994d9d61'/>
+      <pointer-type-def type-id='43489bca' size-in-bits='64' id='ba18e248'/>
+      <pointer-type-def type-id='4f60ffbc' size-in-bits='64' id='33c599da'/>
+      <pointer-type-def type-id='781993c9' size-in-bits='64' id='383471a1'/>
+      <pointer-type-def type-id='2473bc1f' size-in-bits='64' id='84dc82b7'/>
+      <pointer-type-def type-id='8db0df1b' size-in-bits='64' id='d09d4bab'/>
+      <pointer-type-def type-id='d09d4bab' size-in-bits='64' id='e89ddc13'/>
+      <pointer-type-def type-id='e151255a' size-in-bits='64' id='030d0b18'/>
+      <pointer-type-def type-id='5bd248e7' size-in-bits='64' id='6cf6468f'/>
+      <pointer-type-def type-id='6cf6468f' size-in-bits='64' id='2cb135bf'/>
+      <pointer-type-def type-id='a9ef191f' size-in-bits='64' id='ab7bbd67'/>
+      <pointer-type-def type-id='bd4dc4cb' size-in-bits='64' id='c085a9fb'/>
+      <pointer-type-def type-id='b4bfe052' size-in-bits='64' id='0296b670'/>
+      <pointer-type-def type-id='c7afdfb7' size-in-bits='64' id='1a16368f'/>
+      <pointer-type-def type-id='1f91fd06' size-in-bits='64' id='bf0465ec'/>
+      <pointer-type-def type-id='b5a731bc' size-in-bits='64' id='93762a0a'/>
+      <pointer-type-def type-id='e56bc2e5' size-in-bits='64' id='f6c3a7a5'/>
+      <pointer-type-def type-id='3482ac54' size-in-bits='64' id='d7a1e3c2'/>
+      <pointer-type-def type-id='27ebfa24' size-in-bits='64' id='01d310c2'/>
+      <pointer-type-def type-id='fe070fe8' size-in-bits='64' id='7e666abe'/>
+      <pointer-type-def type-id='96bb51fa' size-in-bits='64' id='e8c4dba4'/>
+      <pointer-type-def type-id='276427e1' size-in-bits='64' id='1db260e5'/>
+      <pointer-type-def type-id='8d077d91' size-in-bits='64' id='2c5f769d'/>
+      <pointer-type-def type-id='0f1de308' size-in-bits='64' id='10451dea'/>
+      <pointer-type-def type-id='ffad938a' size-in-bits='64' id='01ffd89c'/>
+      <pointer-type-def type-id='05cd795f' size-in-bits='64' id='d1c62993'/>
+      <pointer-type-def type-id='e625eab0' size-in-bits='64' id='388a7f2a'/>
+      <pointer-type-def type-id='8b7bbbae' size-in-bits='64' id='a50c1d00'/>
+      <pointer-type-def type-id='b11be48c' size-in-bits='64' id='65cea51e'/>
+      <pointer-type-def type-id='75985c10' size-in-bits='64' id='fb86b772'/>
+      <pointer-type-def type-id='f29c5fbb' size-in-bits='64' id='0b787edf'/>
+      <pointer-type-def type-id='935b1156' size-in-bits='64' id='6eededc8'/>
+      <pointer-type-def type-id='d99ae68d' size-in-bits='64' id='7bada959'/>
+      <pointer-type-def type-id='647d371e' size-in-bits='64' id='35e8c658'/>
+      <pointer-type-def type-id='eb0f802b' size-in-bits='64' id='6241aa4f'/>
+      <pointer-type-def type-id='904e13de' size-in-bits='64' id='a57bd028'/>
+      <pointer-type-def type-id='fb8e936d' size-in-bits='64' id='c237e829'/>
+      <pointer-type-def type-id='dfe7e6ee' size-in-bits='64' id='4b872e00'/>
+      <pointer-type-def type-id='ea863425' size-in-bits='64' id='35646c79'/>
+      <pointer-type-def type-id='c3384bd1' size-in-bits='64' id='30ab2c05'/>
+      <pointer-type-def type-id='70084cf7' size-in-bits='64' id='78efe913'/>
+      <pointer-type-def type-id='d87d8242' size-in-bits='64' id='24c1e1dc'/>
+      <pointer-type-def type-id='923a53bf' size-in-bits='64' id='79efa3b3'/>
+      <pointer-type-def type-id='37d25cd5' size-in-bits='64' id='230dd919'/>
+      <pointer-type-def type-id='cd1955fc' size-in-bits='64' id='4eb95ade'/>
+      <pointer-type-def type-id='da73ead4' size-in-bits='64' id='e6da64f6'/>
+      <pointer-type-def type-id='19ebf718' size-in-bits='64' id='42beb73a'/>
+      <pointer-type-def type-id='56cb7858' size-in-bits='64' id='12f0ff82'/>
+      <pointer-type-def type-id='cdead692' size-in-bits='64' id='a02c170c'/>
+      <pointer-type-def type-id='c1f57de8' size-in-bits='64' id='87e3d3e2'/>
+      <pointer-type-def type-id='d9f53f44' size-in-bits='64' id='ab57fa9e'/>
+      <pointer-type-def type-id='1b99a1f1' size-in-bits='64' id='5ddef2dd'/>
+      <pointer-type-def type-id='e0d0028a' size-in-bits='64' id='31cc9254'/>
+      <pointer-type-def type-id='6bd699b2' size-in-bits='64' id='8ea2626c'/>
+      <pointer-type-def type-id='b0623418' size-in-bits='64' id='bdada41a'/>
+      <pointer-type-def type-id='d67e1739' size-in-bits='64' id='4817356d'/>
+      <pointer-type-def type-id='cb6487f8' size-in-bits='64' id='57f0383a'/>
+      <pointer-type-def type-id='cd313b90' size-in-bits='64' id='28ba4492'/>
+      <pointer-type-def type-id='09c8759c' size-in-bits='64' id='7f5be7f6'/>
+      <pointer-type-def type-id='a04cd5a9' size-in-bits='64' id='234843b5'/>
+      <pointer-type-def type-id='7e8ddfae' size-in-bits='64' id='d3807eb0'/>
+      <pointer-type-def type-id='f2fea3d5' size-in-bits='64' id='7733ef81'/>
+      <pointer-type-def type-id='453343e6' size-in-bits='64' id='98c2d938'/>
+      <pointer-type-def type-id='f3601a85' size-in-bits='64' id='c9cd0e09'/>
+      <pointer-type-def type-id='270f5881' size-in-bits='64' id='f9e0c0e5'/>
+      <pointer-type-def type-id='79d185ec' size-in-bits='64' id='0508acce'/>
+      <pointer-type-def type-id='b073751e' size-in-bits='64' id='47800058'/>
+      <pointer-type-def type-id='cfe842dd' size-in-bits='64' id='f4f91b99'/>
+      <pointer-type-def type-id='a92634ba' size-in-bits='64' id='c23b3cbc'/>
+      <pointer-type-def type-id='bdd382a3' size-in-bits='64' id='820976ef'/>
+      <pointer-type-def type-id='27e3f547' size-in-bits='64' id='6b7539fb'/>
+      <pointer-type-def type-id='c3b65e91' size-in-bits='64' id='64ecf6a5'/>
+      <pointer-type-def type-id='b36b391c' size-in-bits='64' id='fd780be6'/>
+      <pointer-type-def type-id='9b634486' size-in-bits='64' id='7f416e10'/>
+      <pointer-type-def type-id='3e7a7dc5' size-in-bits='64' id='b94ac371'/>
+      <pointer-type-def type-id='a71373a3' size-in-bits='64' id='0b56752f'/>
+      <pointer-type-def type-id='e1ee975e' size-in-bits='64' id='58d10a98'/>
+      <pointer-type-def type-id='8e42c936' size-in-bits='64' id='aea90108'/>
+      <pointer-type-def type-id='8bcde2dc' size-in-bits='64' id='964d2eb6'/>
+      <pointer-type-def type-id='054882f1' size-in-bits='64' id='f9e738c5'/>
+      <pointer-type-def type-id='f8cb692f' size-in-bits='64' id='a5786cbb'/>
+      <pointer-type-def type-id='92cdf314' size-in-bits='64' id='6c4618be'/>
+      <pointer-type-def type-id='93be8120' size-in-bits='64' id='a42969fa'/>
+      <qualified-type-def type-id='a42969fa' const='yes' id='2a3ad845'/>
+      <pointer-type-def type-id='6ee62c60' size-in-bits='64' id='795bbc42'/>
+      <qualified-type-def type-id='795bbc42' const='yes' id='9125ffcd'/>
+      <pointer-type-def type-id='e32cf39f' size-in-bits='64' id='fe3af88b'/>
+      <pointer-type-def type-id='fc8b497c' size-in-bits='64' id='0023218e'/>
+      <pointer-type-def type-id='869f5d80' size-in-bits='64' id='1654d99a'/>
+      <pointer-type-def type-id='dc2316e7' size-in-bits='64' id='919b335b'/>
+      <pointer-type-def type-id='31e7d828' size-in-bits='64' id='800c67c2'/>
+      <pointer-type-def type-id='a804e84c' size-in-bits='64' id='8b8bc11e'/>
+      <pointer-type-def type-id='cea824ff' size-in-bits='64' id='254733eb'/>
+      <pointer-type-def type-id='b4bb7eac' size-in-bits='64' id='d8c458ae'/>
+      <pointer-type-def type-id='b16db39f' size-in-bits='64' id='c94f6b13'/>
+      <pointer-type-def type-id='774cf1e5' size-in-bits='64' id='26692209'/>
+      <pointer-type-def type-id='c655c7b7' size-in-bits='64' id='efd5496b'/>
+      <pointer-type-def type-id='cf9ec29d' size-in-bits='64' id='0131eb61'/>
+      <pointer-type-def type-id='c604b3e2' size-in-bits='64' id='d2f4c704'/>
+      <pointer-type-def type-id='eeeb3192' size-in-bits='64' id='9e27a8d4'/>
+      <pointer-type-def type-id='3b1012d7' size-in-bits='64' id='dcab5203'/>
+      <pointer-type-def type-id='4f21665b' size-in-bits='64' id='552c8f87'/>
+      <pointer-type-def type-id='e85fe596' size-in-bits='64' id='de6b64d0'/>
+      <pointer-type-def type-id='b992836c' size-in-bits='64' id='4e326e06'/>
+      <pointer-type-def type-id='e6f3a13f' size-in-bits='64' id='70b08f83'/>
+      <pointer-type-def type-id='cda9f6b0' size-in-bits='64' id='483e8c3a'/>
+      <pointer-type-def type-id='26f907b0' size-in-bits='64' id='ea44f8d2'/>
+      <pointer-type-def type-id='0e61b6d4' size-in-bits='64' id='eb638046'/>
+      <pointer-type-def type-id='56a7b834' size-in-bits='64' id='7aa5a21e'/>
+      <pointer-type-def type-id='c95d9034' size-in-bits='64' id='2eb7248e'/>
+      <pointer-type-def type-id='80d02f4e' size-in-bits='64' id='6e731d78'/>
+      <pointer-type-def type-id='262a563e' size-in-bits='64' id='6910c028'/>
+      <pointer-type-def type-id='3b03705e' size-in-bits='64' id='6850e780'/>
+      <pointer-type-def type-id='db04abd6' size-in-bits='64' id='7c6e0e0c'/>
+      <pointer-type-def type-id='f2b4d088' size-in-bits='64' id='4fa10f9e'/>
+      <pointer-type-def type-id='be50a64d' size-in-bits='64' id='e46089fd'/>
+      <pointer-type-def type-id='4816a146' size-in-bits='64' id='00c4cbac'/>
+      <pointer-type-def type-id='f52a1ce8' size-in-bits='64' id='30897c4e'/>
+      <pointer-type-def type-id='c2c09950' size-in-bits='64' id='e963f446'/>
+      <pointer-type-def type-id='55e8af82' size-in-bits='64' id='ca399350'/>
+      <pointer-type-def type-id='ca0c09a6' size-in-bits='64' id='7a35228c'/>
+      <pointer-type-def type-id='ca10d3ca' size-in-bits='64' id='a7c6e908'/>
+      <pointer-type-def type-id='7b5435ce' size-in-bits='64' id='1f4b5d14'/>
+      <pointer-type-def type-id='29d79af7' size-in-bits='64' id='150efd3f'/>
+      <pointer-type-def type-id='60fb5bfa' size-in-bits='64' id='8212a608'/>
+      <pointer-type-def type-id='cc9b8e48' size-in-bits='64' id='627d9f9e'/>
+      <pointer-type-def type-id='471fc91b' size-in-bits='64' id='e18defdb'/>
+      <pointer-type-def type-id='91f5bcb7' size-in-bits='64' id='fefa8c5f'/>
+      <pointer-type-def type-id='fe81ecb9' size-in-bits='64' id='92daca01'/>
+      <pointer-type-def type-id='3173bc57' size-in-bits='64' id='fce14c5f'/>
+      <pointer-type-def type-id='71e87d49' size-in-bits='64' id='d0a699d1'/>
+      <pointer-type-def type-id='696d238e' size-in-bits='64' id='23704f74'/>
+      <pointer-type-def type-id='094d8048' size-in-bits='64' id='acd96ee1'/>
+      <pointer-type-def type-id='da62d64b' size-in-bits='64' id='80f25feb'/>
+      <pointer-type-def type-id='5d0f15d4' size-in-bits='64' id='122191b2'/>
+      <pointer-type-def type-id='a3119fea' size-in-bits='64' id='f3b4aca8'/>
+      <pointer-type-def type-id='1a08fab8' size-in-bits='64' id='c48b394e'/>
+      <pointer-type-def type-id='a5179659' size-in-bits='64' id='d9d65b21'/>
+      <pointer-type-def type-id='b6ab8849' size-in-bits='64' id='d30bdc51'/>
+      <pointer-type-def type-id='b7cdd2f8' size-in-bits='64' id='c858233f'/>
+      <pointer-type-def type-id='72028e1c' size-in-bits='64' id='cc8d835a'/>
+      <pointer-type-def type-id='8cf069a2' size-in-bits='64' id='89b70200'/>
+      <pointer-type-def type-id='5f5c9d88' size-in-bits='64' id='0e87f9be'/>
+      <pointer-type-def type-id='ff1c7c9b' size-in-bits='64' id='087d687b'/>
+      <pointer-type-def type-id='d80b72e6' size-in-bits='64' id='2168a3eb'/>
+      <pointer-type-def type-id='47d6e76e' size-in-bits='64' id='7cc59444'/>
+      <pointer-type-def type-id='e222a326' size-in-bits='64' id='016811bc'/>
+      <pointer-type-def type-id='7f2c5e96' size-in-bits='64' id='f43a2d4c'/>
+      <pointer-type-def type-id='5a3e162b' size-in-bits='64' id='153e161b'/>
+      <pointer-type-def type-id='dc49d474' size-in-bits='64' id='a6d2fa52'/>
+      <pointer-type-def type-id='ff0d68dc' size-in-bits='64' id='f6507b0a'/>
+      <pointer-type-def type-id='69bf7bee' size-in-bits='64' id='b53e8dbb'/>
+      <pointer-type-def type-id='0cf2912e' size-in-bits='64' id='a53e2328'/>
+      <pointer-type-def type-id='9386c3d1' size-in-bits='64' id='fc7daf55'/>
+      <pointer-type-def type-id='7f8cc66d' size-in-bits='64' id='c4facf61'/>
+      <pointer-type-def type-id='770fc578' size-in-bits='64' id='cc546a3e'/>
+      <pointer-type-def type-id='6a003ee8' size-in-bits='64' id='209d601e'/>
+      <pointer-type-def type-id='29476915' size-in-bits='64' id='2730d015'/>
+      <pointer-type-def type-id='8f90cd2a' size-in-bits='64' id='063da268'/>
+      <pointer-type-def type-id='7bd9942c' size-in-bits='64' id='47ed147a'/>
+      <pointer-type-def type-id='96b6b914' size-in-bits='64' id='f0cb8b62'/>
+      <pointer-type-def type-id='9e045430' size-in-bits='64' id='ad9e36e6'/>
+      <pointer-type-def type-id='b43b0dce' size-in-bits='64' id='3f4455c4'/>
+      <pointer-type-def type-id='25dc4075' size-in-bits='64' id='58ed56f5'/>
+      <pointer-type-def type-id='da0e76a0' size-in-bits='64' id='3c330066'/>
+      <pointer-type-def type-id='37688d8e' size-in-bits='64' id='950eceb8'/>
+      <pointer-type-def type-id='5a9929eb' size-in-bits='64' id='68a2d05b'/>
+      <pointer-type-def type-id='8e5f5512' size-in-bits='64' id='871fd930'/>
+      <pointer-type-def type-id='a27aef61' size-in-bits='64' id='2db792b9'/>
+      <pointer-type-def type-id='602fd1a9' size-in-bits='64' id='bb6de7e1'/>
+      <pointer-type-def type-id='85c08b52' size-in-bits='64' id='39a43b40'/>
+      <pointer-type-def type-id='a558a366' size-in-bits='64' id='a6f0152c'/>
+      <pointer-type-def type-id='92afe5f3' size-in-bits='64' id='982f8df3'/>
+      <pointer-type-def type-id='e17bc528' size-in-bits='64' id='d9e60bb2'/>
+      <pointer-type-def type-id='02f11ed4' size-in-bits='64' id='9f93c9da'/>
+      <pointer-type-def type-id='b5382ece' size-in-bits='64' id='bcfe6314'/>
+      <pointer-type-def type-id='818799b4' size-in-bits='64' id='60219102'/>
+      <pointer-type-def type-id='ed7b7f6b' size-in-bits='64' id='903b12fe'/>
+      <pointer-type-def type-id='12aa8ce4' size-in-bits='64' id='2e97ceaf'/>
+      <pointer-type-def type-id='a490b814' size-in-bits='64' id='e15f3242'/>
+      <pointer-type-def type-id='2519c394' size-in-bits='64' id='72ece9e2'/>
+      <pointer-type-def type-id='9ecf9226' size-in-bits='64' id='6d5994d5'/>
+      <pointer-type-def type-id='415eecf1' size-in-bits='64' id='f0acc909'/>
+      <pointer-type-def type-id='605b61bb' size-in-bits='64' id='2871909b'/>
+      <pointer-type-def type-id='a2802dd0' size-in-bits='64' id='7f30b822'/>
+      <pointer-type-def type-id='fe4ffa7a' size-in-bits='64' id='d077e928'/>
+      <pointer-type-def type-id='8cf4128f' size-in-bits='64' id='66032958'/>
+      <pointer-type-def type-id='ac763c5d' size-in-bits='64' id='a06a810d'/>
+      <pointer-type-def type-id='4b2795fc' size-in-bits='64' id='e8d572d7'/>
+      <pointer-type-def type-id='ac9f3c7e' size-in-bits='64' id='af00e73d'/>
+      <pointer-type-def type-id='aef83a98' size-in-bits='64' id='39341f7e'/>
+      <pointer-type-def type-id='9dbdc7de' size-in-bits='64' id='66b0cee4'/>
+      <pointer-type-def type-id='f6be3c23' size-in-bits='64' id='6dcf57f3'/>
+      <pointer-type-def type-id='33341965' size-in-bits='64' id='0892f7dc'/>
+      <pointer-type-def type-id='e29df76e' size-in-bits='64' id='15543b10'/>
+      <pointer-type-def type-id='02244303' size-in-bits='64' id='b316d9a3'/>
+      <pointer-type-def type-id='c2be49b0' size-in-bits='64' id='eb9a3ab6'/>
+      <pointer-type-def type-id='5218160d' size-in-bits='64' id='c9d64c0d'/>
+      <pointer-type-def type-id='c0342c43' size-in-bits='64' id='d38eb863'/>
+      <pointer-type-def type-id='f68e0adc' size-in-bits='64' id='3cc8739a'/>
+      <pointer-type-def type-id='9e095f93' size-in-bits='64' id='e6726ce3'/>
+      <pointer-type-def type-id='9f7fd760' size-in-bits='64' id='2facc7e6'/>
+      <pointer-type-def type-id='384b6d84' size-in-bits='64' id='6ceb7782'/>
+      <pointer-type-def type-id='aa112583' size-in-bits='64' id='aca8a113'/>
+      <pointer-type-def type-id='a7832498' size-in-bits='64' id='9f2cce4b'/>
+      <pointer-type-def type-id='a42536cd' size-in-bits='64' id='5c39fc92'/>
+      <pointer-type-def type-id='990cce78' size-in-bits='64' id='15b8a3be'/>
+      <pointer-type-def type-id='f3415517' size-in-bits='64' id='f8dc9def'/>
+      <pointer-type-def type-id='dee16bbe' size-in-bits='64' id='cb1156c4'/>
+      <pointer-type-def type-id='27cb404f' size-in-bits='64' id='4be14597'/>
+      <pointer-type-def type-id='b59d7dce' size-in-bits='64' id='78c01427'/>
+      <pointer-type-def type-id='ae8bfcdd' size-in-bits='64' id='0fbf3cfd'/>
+      <pointer-type-def type-id='a8c69bdf' size-in-bits='64' id='374692c7'/>
+      <pointer-type-def type-id='a240f41d' size-in-bits='64' id='f772df6d'/>
+      <pointer-type-def type-id='f772df6d' size-in-bits='64' id='d0d57cc5'/>
+      <pointer-type-def type-id='fb4018a0' size-in-bits='64' id='cff2d845'/>
+      <pointer-type-def type-id='1207cfa9' size-in-bits='64' id='2a5ff2f1'/>
+      <pointer-type-def type-id='56798c81' size-in-bits='64' id='8dee6d89'/>
+      <pointer-type-def type-id='e4a7867c' size-in-bits='64' id='f7d7131a'/>
+      <pointer-type-def type-id='f7d7131a' size-in-bits='64' id='57933490'/>
+      <pointer-type-def type-id='5081ed08' size-in-bits='64' id='c77a71ce'/>
+      <pointer-type-def type-id='bc39a8be' size-in-bits='64' id='42c8f564'/>
+      <pointer-type-def type-id='3eb82749' size-in-bits='64' id='11e11a61'/>
+      <pointer-type-def type-id='3a97b64f' size-in-bits='64' id='2c927837'/>
+      <pointer-type-def type-id='f77d4717' size-in-bits='64' id='104fa32f'/>
+      <pointer-type-def type-id='e1f906a3' size-in-bits='64' id='19a26ee3'/>
+      <pointer-type-def type-id='abe41e67' size-in-bits='64' id='9248e67f'/>
+      <pointer-type-def type-id='40a816ad' size-in-bits='64' id='4151733d'/>
+      <pointer-type-def type-id='49b910cc' size-in-bits='64' id='0f81ed2a'/>
+      <pointer-type-def type-id='0f81ed2a' size-in-bits='64' id='69881700'/>
+      <pointer-type-def type-id='fd48a6e6' size-in-bits='64' id='23d6768c'/>
+      <pointer-type-def type-id='23d6768c' size-in-bits='64' id='109cc752'/>
+      <pointer-type-def type-id='4ca0c298' size-in-bits='64' id='08e531de'/>
+      <qualified-type-def type-id='08e531de' const='yes' id='d2d812d1'/>
+      <pointer-type-def type-id='3132e187' size-in-bits='64' id='484b400f'/>
+      <pointer-type-def type-id='e431ac27' size-in-bits='64' id='700727c0'/>
+      <pointer-type-def type-id='9127cd0e' size-in-bits='64' id='868c74f4'/>
+      <pointer-type-def type-id='4c8d9cac' size-in-bits='64' id='572fbdca'/>
+      <pointer-type-def type-id='1c0d3c63' size-in-bits='64' id='4d01ede7'/>
+      <pointer-type-def type-id='1a4194ca' size-in-bits='64' id='b347e5ac'/>
+      <pointer-type-def type-id='3273164b' size-in-bits='64' id='d4ae3f3f'/>
+      <pointer-type-def type-id='77784eb9' size-in-bits='64' id='5fb34715'/>
+      <pointer-type-def type-id='f037e1bb' size-in-bits='64' id='a8faf36f'/>
+      <pointer-type-def type-id='5e80f131' size-in-bits='64' id='c2ab7955'/>
+      <pointer-type-def type-id='bc5c36f0' size-in-bits='64' id='d6e9f1fa'/>
+      <pointer-type-def type-id='ff95f77c' size-in-bits='64' id='c1de1086'/>
+      <pointer-type-def type-id='56731789' size-in-bits='64' id='07ebb4cd'/>
+      <pointer-type-def type-id='51edb62f' size-in-bits='64' id='aecbf18b'/>
+      <pointer-type-def type-id='ebaa0f87' size-in-bits='64' id='3494e4bb'/>
+      <pointer-type-def type-id='100ce309' size-in-bits='64' id='4d8f5625'/>
+      <pointer-type-def type-id='0caa7082' size-in-bits='64' id='5f29549c'/>
+      <pointer-type-def type-id='e7e14410' size-in-bits='64' id='afa767ca'/>
+      <pointer-type-def type-id='e9855576' size-in-bits='64' id='72cd68b0'/>
+      <pointer-type-def type-id='ebe8eb0e' size-in-bits='64' id='40da47a8'/>
+      <pointer-type-def type-id='309ed22f' size-in-bits='64' id='d0882d6b'/>
+      <pointer-type-def type-id='beb5fff3' size-in-bits='64' id='17b1add7'/>
+      <pointer-type-def type-id='357e5279' size-in-bits='64' id='227e209d'/>
+      <pointer-type-def type-id='d5b6f34c' size-in-bits='64' id='434e45fe'/>
+      <pointer-type-def type-id='be97e3d8' size-in-bits='64' id='855e70d2'/>
+      <pointer-type-def type-id='18188cce' size-in-bits='64' id='9a6e3348'/>
+      <pointer-type-def type-id='78199102' size-in-bits='64' id='96948294'/>
+      <pointer-type-def type-id='8c180526' size-in-bits='64' id='b22f4610'/>
+      <pointer-type-def type-id='d802bf72' size-in-bits='64' id='e295c77c'/>
+      <pointer-type-def type-id='fec629e3' size-in-bits='64' id='a9b95107'/>
+      <pointer-type-def type-id='243799e7' size-in-bits='64' id='bc00c03b'/>
+      <pointer-type-def type-id='5ea5a07d' size-in-bits='64' id='f69fcfe1'/>
+      <pointer-type-def type-id='449f791f' size-in-bits='64' id='cc3e2efb'/>
+      <pointer-type-def type-id='ecbaa04a' size-in-bits='64' id='bb28da1c'/>
+      <pointer-type-def type-id='af6e35e9' size-in-bits='64' id='5e15576d'/>
+      <pointer-type-def type-id='b5975902' size-in-bits='64' id='9917918c'/>
+      <pointer-type-def type-id='89e527b7' size-in-bits='64' id='d1440a9f'/>
+      <pointer-type-def type-id='0c7ab04d' size-in-bits='64' id='5224788d'/>
+      <pointer-type-def type-id='a9d71093' size-in-bits='64' id='9b105293'/>
+      <pointer-type-def type-id='a24978a1' size-in-bits='64' id='72835629'/>
+      <pointer-type-def type-id='002ac4a6' size-in-bits='64' id='cf536864'/>
+      <pointer-type-def type-id='6d22a61b' size-in-bits='64' id='34c443b7'/>
+      <pointer-type-def type-id='f0981eeb' size-in-bits='64' id='807869d3'/>
+      <pointer-type-def type-id='0fae1622' size-in-bits='64' id='d44a8cec'/>
+      <pointer-type-def type-id='8f9ed095' size-in-bits='64' id='cd2cc9e1'/>
+      <pointer-type-def type-id='08616ba1' size-in-bits='64' id='1a17e40d'/>
+      <pointer-type-def type-id='7359adad' size-in-bits='64' id='1d2c2b85'/>
+      <pointer-type-def type-id='b7e0fed2' size-in-bits='64' id='57376310'/>
+      <pointer-type-def type-id='ddd7cbfe' size-in-bits='64' id='273a7d34'/>
+      <pointer-type-def type-id='526b1662' size-in-bits='64' id='9d25db30'/>
+      <pointer-type-def type-id='19e88833' size-in-bits='64' id='549da823'/>
+      <pointer-type-def type-id='a38d6c05' size-in-bits='64' id='da81d789'/>
+      <pointer-type-def type-id='807afe73' size-in-bits='64' id='d02f4143'/>
+      <pointer-type-def type-id='ee076206' size-in-bits='64' id='953b12f8'/>
+      <pointer-type-def type-id='a66ce823' size-in-bits='64' id='7e5b15cf'/>
+      <pointer-type-def type-id='97db9237' size-in-bits='64' id='8581ac2b'/>
+      <pointer-type-def type-id='6d41ed4e' size-in-bits='64' id='47727520'/>
+      <pointer-type-def type-id='d843c93e' size-in-bits='64' id='f42e15b8'/>
+      <pointer-type-def type-id='37f6d957' size-in-bits='64' id='40363cbb'/>
+      <pointer-type-def type-id='a9732c0b' size-in-bits='64' id='b90b068f'/>
+      <pointer-type-def type-id='cbbffc65' size-in-bits='64' id='dbc22931'/>
+      <pointer-type-def type-id='b98b24d0' size-in-bits='64' id='d6965222'/>
+      <pointer-type-def type-id='56958353' size-in-bits='64' id='ce828d9f'/>
+      <pointer-type-def type-id='165b46a0' size-in-bits='64' id='9f403612'/>
+      <pointer-type-def type-id='4c671f3a' size-in-bits='64' id='79b8da5c'/>
+      <pointer-type-def type-id='a9cc575c' size-in-bits='64' id='88909596'/>
+      <pointer-type-def type-id='1c254730' size-in-bits='64' id='c9e2bc02'/>
+      <pointer-type-def type-id='08bcc9e6' size-in-bits='64' id='7b9768f0'/>
+      <pointer-type-def type-id='2ca9725a' size-in-bits='64' id='628f3294'/>
+      <pointer-type-def type-id='b6c1136f' size-in-bits='64' id='7e20177b'/>
+      <pointer-type-def type-id='54b1caeb' size-in-bits='64' id='82a6d477'/>
+      <pointer-type-def type-id='6c0e4a93' size-in-bits='64' id='4f3d95df'/>
+      <pointer-type-def type-id='ebcc73dc' size-in-bits='64' id='5f5506f6'/>
+      <pointer-type-def type-id='c96d591d' size-in-bits='64' id='f1825e09'/>
+      <pointer-type-def type-id='d647b094' size-in-bits='64' id='9b28bd76'/>
+      <pointer-type-def type-id='10587c0a' size-in-bits='64' id='aa377a8c'/>
+      <pointer-type-def type-id='257e5168' size-in-bits='64' id='96b6fff2'/>
+      <pointer-type-def type-id='5985c13a' size-in-bits='64' id='d6f1846c'/>
+      <pointer-type-def type-id='7a42d02f' size-in-bits='64' id='537ed613'/>
+      <pointer-type-def type-id='e9ef9215' size-in-bits='64' id='2f974a69'/>
+      <pointer-type-def type-id='74e7a035' size-in-bits='64' id='6af64a09'/>
+      <pointer-type-def type-id='0cf765ad' size-in-bits='64' id='d8db14d1'/>
+      <pointer-type-def type-id='c611b7c0' size-in-bits='64' id='941a57ca'/>
+      <pointer-type-def type-id='d6e6975e' size-in-bits='64' id='eda08098'/>
+      <pointer-type-def type-id='127ce78a' size-in-bits='64' id='6ba28d1c'/>
+      <pointer-type-def type-id='1646f19a' size-in-bits='64' id='0ef96694'/>
+      <pointer-type-def type-id='18fcefa9' size-in-bits='64' id='1ff54a45'/>
+      <pointer-type-def type-id='8029c9e0' size-in-bits='64' id='9582ad9a'/>
+      <pointer-type-def type-id='70a927ce' size-in-bits='64' id='9615a2e0'/>
+      <pointer-type-def type-id='cdd056d2' size-in-bits='64' id='64115f6c'/>
+      <pointer-type-def type-id='e74bcc7b' size-in-bits='64' id='170cc62f'/>
+      <pointer-type-def type-id='1650bf24' size-in-bits='64' id='8f17d05e'/>
+      <pointer-type-def type-id='c5c76c9c' size-in-bits='64' id='b7f9d8e6'/>
+      <pointer-type-def type-id='4827f223' size-in-bits='64' id='939280af'/>
+      <pointer-type-def type-id='afb1917e' size-in-bits='64' id='0cfacb48'/>
+      <pointer-type-def type-id='e0c79ce2' size-in-bits='64' id='9c1150bc'/>
+      <pointer-type-def type-id='943685e6' size-in-bits='64' id='a46b05a0'/>
+      <pointer-type-def type-id='749378a8' size-in-bits='64' id='b6ba26fa'/>
+      <pointer-type-def type-id='c0e5af96' size-in-bits='64' id='8734cf20'/>
+      <pointer-type-def type-id='eaa32e2f' size-in-bits='64' id='63e171df'/>
+      <pointer-type-def type-id='b5ab048f' size-in-bits='64' id='03d48e96'/>
+      <pointer-type-def type-id='ef9025d0' size-in-bits='64' id='83c1bde6'/>
+      <pointer-type-def type-id='a5159c01' size-in-bits='64' id='242e3d19'/>
+      <pointer-type-def type-id='705711f5' size-in-bits='64' id='c2c60445'/>
+      <pointer-type-def type-id='c39df2b8' size-in-bits='64' id='3d15880e'/>
+      <pointer-type-def type-id='469df90e' size-in-bits='64' id='95610bd4'/>
+      <var-decl name='init_task' type-id='bc3f1924' mangled-name='init_task' visibility='default' filepath='init/init_task.c' line='58' column='1' elf-symbol-id='init_task'/>
+      <function-type size-in-bits='64' id='473764d9'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='933e0e21'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='26cad514'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebb550f0'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6dbd849e'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='80f4b756'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10e36dc5'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='47547dee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7552fc26'>
+        <parameter type-id='2993adbc'/>
+        <return type-id='42988600'/>
+      </function-type>
+      <function-type size-in-bits='64' id='277029da'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='c5a4eb7f'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbe9020d'>
+        <parameter type-id='21e53d44'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2bdce7cd'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='13edfabd'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='e9a4c848'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a9e3f68'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='30677246'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c21690c0'>
+        <parameter type-id='141b6427'/>
+        <return type-id='141b6427'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f4a5e53'>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='3f1a6b60'/>
+        <return type-id='141b6427'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96bb51fa'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='7e666abe'/>
+      </function-type>
+      <function-type size-in-bits='64' id='276427e1'>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d077d91'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f1de308'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='157252dd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ffad938a'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='05cd795f'>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='edcbd723'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e625eab0'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='edcbd723'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b7bbbae'>
+        <parameter type-id='c14d5db2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b11be48c'>
+        <parameter type-id='c14d5db2'/>
+        <parameter type-id='b316d9a3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75985c10'>
+        <parameter type-id='c14d5db2'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='43a0eb6c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f29c5fbb'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='0e87f9be'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='935b1156'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99803d40'>
+        <parameter type-id='631dc3c1'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='78c01427'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d99ae68d'>
+        <parameter type-id='11b101bb'/>
+        <parameter type-id='631dc3c1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='647d371e'>
+        <parameter type-id='42988600'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb0f802b'>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='904e13de'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fb8e936d'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfe7e6ee'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea863425'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='087d687b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3384bd1'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70084cf7'>
+        <parameter type-id='b80a6036'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87d8242'>
+        <parameter type-id='e9a4c848'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='923a53bf'>
+        <parameter type-id='6d30564f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37d25cd5'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd1955fc'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='9f93c9da'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da73ead4'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19ebf718'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b80a6036'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56cb7858'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0343ce83'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdead692'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1f57de8'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='ccbe540b'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9f53f44'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b99a1f1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0d0028a'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bd699b2'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0623418'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d67e1739'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cb6487f8'>
+        <parameter type-id='5760dcb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cd313b90'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='09c8759c'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a04cd5a9'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e8ddfae'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2fea3d5'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='453343e6'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f3601a85'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='270f5881'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='2594b00f'/>
+        <parameter type-id='8504f260'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='79d185ec'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='890caaa5'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b073751e'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfe842dd'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a92634ba'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='c858233f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bdd382a3'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='2871909b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27e3f547'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='0892f7dc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c3b65e91'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='4151733d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b36b391c'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b634486'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e7a7dc5'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a71373a3'>
+        <parameter type-id='150efd3f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1ee975e'>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='2594b00f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e42c936'>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8bcde2dc'>
+        <parameter type-id='8212a608'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='054882f1'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8cb692f'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='098bcd1a'/>
+        <parameter type-id='108c9fc0'/>
+        <parameter type-id='204a4632'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92cdf314'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93be8120'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ee62c60'>
+        <parameter type-id='89b70200'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='d9d65b21'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e32cf39f'>
+        <parameter type-id='2730d015'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc8b497c'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='869f5d80'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc2316e7'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31e7d828'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a804e84c'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='c2c60445'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cea824ff'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b4bb7eac'>
+        <parameter type-id='2facc7e6'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b16db39f'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='774cf1e5'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='150efd3f'/>
+        <parameter type-id='e18defdb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c655c7b7'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='e18defdb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf9ec29d'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c604b3e2'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeeb3192'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='72028e1c'/>
+        <parameter type-id='39341f7e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b1012d7'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4f21665b'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e85fe596'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='a77efac3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b992836c'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='66b0cee4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e6f3a13f'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cc8d835a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cda9f6b0'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cc8d835a'/>
+        <parameter type-id='39341f7e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26f907b0'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='3eb7c31c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0e61b6d4'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='6dcf57f3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56a7b834'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c95d9034'>
+        <parameter type-id='11e11a61'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='5c39fc92'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='80d02f4e'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='262a563e'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b03705e'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0cf2912e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9386c3d1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f8cc66d'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='cb1156c4'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37688d8e'>
+        <parameter type-id='65077a4a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='3c330066'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e17bc528'>
+        <parameter type-id='2ae08426'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='02f11ed4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2802dd0'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2871909b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e29df76e'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='0892f7dc'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c0d3c63'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a4194ca'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3273164b'>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77784eb9'>
+        <parameter type-id='0343ce83'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f037e1bb'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='9c5c646e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e80f131'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc5c36f0'>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='bc5666d5'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff95f77c'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56731789'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51edb62f'>
+        <parameter type-id='f57039f0'/>
+        <parameter type-id='a42536cd'/>
+        <return type-id='a42536cd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebaa0f87'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='100ce309'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0caa7082'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7e14410'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e9855576'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebe8eb0e'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='309ed22f'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='beb5fff3'>
+        <parameter type-id='8212a608'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='357e5279'>
+        <parameter type-id='80f25feb'/>
+        <parameter type-id='4fa10f9e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5b6f34c'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='be97e3d8'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18188cce'>
+        <parameter type-id='063da268'/>
+        <parameter type-id='47ed147a'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='78199102'>
+        <parameter type-id='063da268'/>
+        <parameter type-id='47ed147a'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c180526'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d802bf72'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fec629e3'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='243799e7'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ea5a07d'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='0b001c1f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2594b00f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='449f791f'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='c0e2acc9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='2594b00f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecbaa04a'>
+        <parameter type-id='d02f4143'/>
+        <return type-id='e9265215'/>
+      </function-type>
+      <function-type size-in-bits='64' id='af6e35e9'>
+        <parameter type-id='d02f4143'/>
+        <parameter type-id='5555b4b4'/>
+        <return type-id='e9265215'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b5975902'>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='f9409001'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d22a61b'>
+        <parameter type-id='65077a4a'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0fae1622'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8f9ed095'>
+        <parameter type-id='4be14597'/>
+        <parameter type-id='cb1156c4'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08616ba1'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a38d6c05'>
+        <parameter type-id='bcfe6314'/>
+        <return type-id='549da823'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee076206'>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a66ce823'>
+        <parameter type-id='65077a4a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97db9237'>
+        <parameter type-id='a77efac3'/>
+        <parameter type-id='bcfe6314'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d41ed4e'>
+        <parameter type-id='11b101bb'/>
+        <parameter type-id='631dc3c1'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d843c93e'>
+        <parameter type-id='27675065'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='37f6d957'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9732c0b'>
+        <parameter type-id='b1a5e68a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cbbffc65'>
+        <parameter type-id='e9a4c848'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b98b24d0'>
+        <parameter type-id='141b6427'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='56958353'>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='165b46a0'>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c671f3a'>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9cc575c'>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c254730'>
+        <parameter type-id='0343ce83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08bcc9e6'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='0343ce83'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ca9725a'>
+        <parameter type-id='0343ce83'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b6c1136f'>
+        <parameter type-id='93762a0a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54b1caeb'>
+        <parameter type-id='93762a0a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6c0e4a93'>
+        <parameter type-id='7e666abe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebcc73dc'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f712e2b7'>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c96d591d'>
+        <parameter type-id='8212a608'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10587c0a'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='257e5168'>
+        <parameter type-id='d30bdc51'/>
+        <parameter type-id='2168a3eb'/>
+        <parameter type-id='acd96ee1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5985c13a'>
+        <parameter type-id='2730d015'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a42d02f'>
+        <parameter type-id='2730d015'/>
+        <parameter type-id='80f4b756'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e9ef9215'>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74e7a035'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='d8e6b335'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0cf765ad'>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96650caf'>
+        <parameter type-id='60219102'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c611b7c0'>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='e15f3242'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d6e6975e'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='127ce78a'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1646f19a'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18fcefa9'>
+        <parameter type-id='42c8f564'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8029c9e0'>
+        <parameter type-id='9248e67f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a927ce'>
+        <parameter type-id='bc5666d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdd056d2'>
+        <parameter type-id='9c313c2d'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e74bcc7b'>
+        <parameter type-id='2ae08426'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1650bf24'>
+        <parameter type-id='d02f4143'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c5c76c9c'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4827f223'>
+        <parameter type-id='83c1bde6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='afb1917e'>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0c79ce2'>
+        <parameter type-id='d30bdc51'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='943685e6'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='749378a8'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0e5af96'>
+        <parameter type-id='f772df6d'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='init/main.c' language='LANG_C89'>
+      <type-decl name='bool' size-in-bits='8' id='c894953d'/>
+      <type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/>
+      <enum-decl name='system_states' filepath='include/linux/kernel.h' line='569' column='1' id='2ead22b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SYSTEM_BOOTING' value='0'/>
+        <enumerator name='SYSTEM_SCHEDULING' value='1'/>
+        <enumerator name='SYSTEM_RUNNING' value='2'/>
+        <enumerator name='SYSTEM_HALT' value='3'/>
+        <enumerator name='SYSTEM_POWER_OFF' value='4'/>
+        <enumerator name='SYSTEM_RESTART' value='5'/>
+        <enumerator name='SYSTEM_SUSPEND' value='6'/>
+      </enum-decl>
+      <typedef-decl name='bool' type-id='c894953d' filepath='include/linux/types.h' line='30' column='1' id='b50a4934'/>
+      <var-decl name='loops_per_jiffy' type-id='7359adad' mangled-name='loops_per_jiffy' visibility='default' filepath='init/main.c' line='225' column='1' elf-symbol-id='loops_per_jiffy'/>
+      <var-decl name='system_state' type-id='2ead22b4' mangled-name='system_state' visibility='default' filepath='init/main.c' line='123' column='1' elf-symbol-id='system_state'/>
+      <var-decl name='static_key_initialized' type-id='b50a4934' mangled-name='static_key_initialized' visibility='default' filepath='init/main.c' line='163' column='1' elf-symbol-id='static_key_initialized'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='init/version.c' language='LANG_C89'>
+      <type-decl name='__ARRAY_SIZE_TYPE__' size-in-bits='64' id='7ff19f0f'/>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='64' id='839e8989'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e2609cc' size-in-bits='4096' id='98f84070'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='128' id='ac1fa8c0'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='520' id='5ddd38d2'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='64' id='8e100159'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='audit_context' is-struct='yes' visibility='default' is-declaration-only='yes' id='82d9d5d4'/>
+      <class-decl name='backing_dev_info' size-in-bits='9600' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='192' column='1' id='c0badb3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bdi_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ra_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_pages' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='congested_fn' type-id='84127e50' visibility='default' filepath='include/linux/backing-dev-defs.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='congested_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/backing-dev-defs.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='400fb07b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='capabilities' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='min_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_ratio' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='max_prop_frac' type-id='f0981eeb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tot_write_bandwidth' type-id='f22a8abb' visibility='default' filepath='include/linux/backing-dev-defs.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wb' type-id='ac0aeb1d' visibility='default' filepath='include/linux/backing-dev-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='wb_list' type-id='72f469ec' visibility='default' filepath='include/linux/backing-dev-defs.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cgwb_tree' type-id='d39738ac' visibility='default' filepath='include/linux/backing-dev-defs.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='cgwb_congested_tree' type-id='dec44472' visibility='default' filepath='include/linux/backing-dev-defs.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='cgwb_release_mutex' type-id='925167dc' visibility='default' filepath='include/linux/backing-dev-defs.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='wb_switch_rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/backing-dev-defs.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='wb_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/backing-dev-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='dev_name' type-id='59daf3ef' visibility='default' filepath='include/linux/backing-dev-defs.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='owner' type-id='fa0b179b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='laptop_mode_wb_timer' type-id='abe41e67' visibility='default' filepath='include/linux/backing-dev-defs.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='debug_dir' type-id='27675065' visibility='default' filepath='include/linux/backing-dev-defs.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/backing-dev-defs.h' line='237' 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='576' column='1' id='096280be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='fb55efa1' visibility='default' filepath='include/linux/bio.h' line='578' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_plug' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1181' column='1' id='718a7cd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rq_count' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='1184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='multiple_queues' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='1185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='capture_control' is-struct='yes' visibility='default' is-declaration-only='yes' id='978e8e27'/>
+      <class-decl name='cfs_rq' size-in-bits='3072' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='499' column='1' id='feeb4c2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='kernel/sched/sched.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idle_h_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exec_clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='min_vruntime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='tasks_timeline' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='curr' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='last' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='skip' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_spread_over' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='removed' type-id='dbb6a82c' visibility='default' filepath='kernel/sched/sched.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tg_load_avg_contrib' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='propagate' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='prop_runnable_sum' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='h_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='last_h_load_update' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='h_load_next' type-id='ff2b3d10' visibility='default' filepath='kernel/sched/sched.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='rq' type-id='6ed6b432' visibility='default' filepath='kernel/sched/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='on_list' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='tg' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='573' 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='866' column='1' id='e54806c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/cgroup.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/cgroup.h' line='868' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cgroup.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/cgroup.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='root_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup.h' line='871' 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='378' column='1' id='1b9c6d35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='bd51dd4a' visibility='default' filepath='include/linux/compat.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='futex_offset' type-id='abb906de' visibility='default' filepath='include/linux/compat.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list_op_pending' type-id='782d78af' visibility='default' filepath='include/linux/compat.h' line='381' 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='f9fef04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='done' type-id='f0981eeb' 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='b5ab048f' visibility='default' filepath='include/linux/completion.h' line='28' 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='111' column='1' id='6739dd09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='49178f86' visibility='default' filepath='include/linux/cred.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='suid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='euid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='egid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsuid' type-id='d80b72e6' visibility='default' filepath='include/linux/cred.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fsgid' type-id='094d8048' visibility='default' filepath='include/linux/cred.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='securebits' type-id='f0981eeb' visibility='default' filepath='include/linux/cred.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cap_inheritable' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cap_permitted' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cap_effective' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cap_bset' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cap_ambient' type-id='7496b151' visibility='default' filepath='include/linux/cred.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='jit_keyring' type-id='002ac4a6' visibility='default' filepath='include/linux/cred.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='session_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='process_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='thread_keyring' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='request_key_auth' type-id='204a4632' visibility='default' filepath='include/linux/cred.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/cred.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='user' type-id='273a7d34' visibility='default' filepath='include/linux/cred.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/cred.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_info' type-id='383471a1' visibility='default' filepath='include/linux/cred.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='' type-id='0a97cc35' visibility='default' filepath='include/linux/cred.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='css_set' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='191' column='1' id='afbeac63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/cgroup-defs.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dom_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dfl_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nr_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mg_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dying_tasks' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='task_iters' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='e_cset_node' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='threaded_csets' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='threaded_csets_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='include/linux/cgroup-defs.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='cgrp_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='mg_preload_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='mg_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='mg_src_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='mg_dst_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='mg_dst_cset' type-id='85d57723' visibility='default' filepath='include/linux/cgroup-defs.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='dead' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/cgroup-defs.h' line='277' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='files_struct' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/fdtable.h' line='48' column='1' id='bccdf330'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/fdtable.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='resize_in_progress' type-id='b50a4934' visibility='default' filepath='include/linux/fdtable.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resize_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/fdtable.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fdt' type-id='02b857a9' visibility='default' filepath='include/linux/fdtable.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fdtab' type-id='ff35cfe1' visibility='default' filepath='include/linux/fdtable.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='file_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fdtable.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='next_fd' type-id='f0981eeb' visibility='default' filepath='include/linux/fdtable.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='close_on_exec_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='open_fds_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='full_fds_bits_init' type-id='f066dd3c' visibility='default' filepath='include/linux/fdtable.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='fd_array' type-id='d2c516bd' visibility='default' filepath='include/linux/fdtable.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fs_struct' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/fs_struct.h' line='9' column='1' id='7dc87302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/fs_struct.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/fs_struct.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='umask' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='in_exec' type-id='95e97e5e' visibility='default' filepath='include/linux/fs_struct.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='root' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pwd' type-id='b5382ece' visibility='default' filepath='include/linux/fs_struct.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='futex_pi_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='62bd013f'/>
+      <class-decl name='io_context' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/iocontext.h' line='99' column='1' id='d002899d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/iocontext.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_ref' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_tasks' type-id='49178f86' visibility='default' filepath='include/linux/iocontext.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/iocontext.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/iocontext.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_batch_requests' type-id='95e97e5e' visibility='default' filepath='include/linux/iocontext.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='last_waited' type-id='7359adad' visibility='default' filepath='include/linux/iocontext.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='icq_tree' type-id='d39738ac' visibility='default' filepath='include/linux/iocontext.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='icq_hint' type-id='7c6e0e0c' visibility='default' filepath='include/linux/iocontext.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='icq_list' type-id='e151255a' visibility='default' filepath='include/linux/iocontext.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/iocontext.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipc_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='dd74f3ed'/>
+      <class-decl name='key' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/linux/key.h' line='172' column='1' id='128d0ac4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/key.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='serial' type-id='c84025ab' visibility='default' filepath='include/linux/key.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='1a65b0a7' visibility='default' filepath='include/linux/key.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sem' type-id='f19fdb93' visibility='default' filepath='include/linux/key.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user' type-id='23704f74' visibility='default' filepath='include/linux/key.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/key.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='21f0eb77' visibility='default' filepath='include/linux/key.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_used_at' type-id='1afd27ac' visibility='default' filepath='include/linux/key.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/key.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='gid' type-id='094d8048' visibility='default' filepath='include/linux/key.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='perm' type-id='296adac1' visibility='default' filepath='include/linux/key.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='quotalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1008'>
+          <var-decl name='datalen' type-id='8efea9e5' visibility='default' filepath='include/linux/key.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='state' type-id='a2185560' visibility='default' filepath='include/linux/key.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/key.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='' type-id='51bb2fb5' visibility='default' filepath='include/linux/key.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='' type-id='d5d77d48' visibility='default' filepath='include/linux/key.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='restrict_link' type-id='92daca01' visibility='default' filepath='include/linux/key.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup' size-in-bits='23040' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='208' column='1' id='11c8601b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/memcontrol.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='id' type-id='18f7b101' visibility='default' filepath='include/linux/memcontrol.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='memory' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='swap' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='memsw' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tcpmem' type-id='635c3685' visibility='default' filepath='include/linux/memcontrol.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='high' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='high_work' type-id='ef9025d0' visibility='default' filepath='include/linux/memcontrol.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='soft_limit' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='vmpressure' type-id='d6294af7' visibility='default' filepath='include/linux/memcontrol.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='use_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8008'>
+          <var-decl name='oom_group' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8016'>
+          <var-decl name='oom_lock' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8032'>
+          <var-decl name='under_oom' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='swappiness' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='oom_kill_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8128'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='events_local_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9280'>
+          <var-decl name='swap_events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/memcontrol.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='thresholds_lock' type-id='925167dc' visibility='default' filepath='include/linux/memcontrol.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='memsw_thresholds' type-id='a38368d4' visibility='default' filepath='include/linux/memcontrol.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='oom_notify' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='move_charge_at_immigrate' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='move_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='move_lock_flags' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='_pad1_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='moving_account' type-id='49178f86' visibility='default' filepath='include/linux/memcontrol.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='move_lock_task' type-id='f23e2572' visibility='default' filepath='include/linux/memcontrol.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='vmstats_local' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='vmstats_percpu' type-id='a0d3a64b' visibility='default' filepath='include/linux/memcontrol.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='4f5a0c96' visibility='default' filepath='include/linux/memcontrol.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='vmstats' type-id='9dc2293d' visibility='default' filepath='include/linux/memcontrol.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13696'>
+          <var-decl name='vmevents' type-id='525b50d2' visibility='default' filepath='include/linux/memcontrol.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='memory_events' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='memory_events_local' type-id='76b91d35' visibility='default' filepath='include/linux/memcontrol.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='socket_pressure' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='tcpmem_active' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19360'>
+          <var-decl name='tcpmem_pressure' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='kmemcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19424'>
+          <var-decl name='kmem_state' type-id='def0995c' visibility='default' filepath='include/linux/memcontrol.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='kmem_caches' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='last_scanned_node' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='cgwb_domain' type-id='960bf1fd' visibility='default' filepath='include/linux/memcontrol.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='cgwb_frn' type-id='f53c5bdb' visibility='default' filepath='include/linux/memcontrol.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/memcontrol.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22272'>
+          <var-decl name='event_list_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/memcontrol.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22336'>
+          <var-decl name='deferred_split_queue' type-id='d619c1c5' visibility='default' filepath='include/linux/memcontrol.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22592'>
+          <var-decl name='nodeinfo' type-id='687d975e' visibility='default' filepath='include/linux/memcontrol.h' line='337' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mm_struct' size-in-bits='7296' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='385' column='1' id='311626f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='993073b4' visibility='default' filepath='include/linux/mm_types.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='cpu_bitmap' type-id='c99b5ecd' visibility='default' filepath='include/linux/mm_types.h' line='551' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mnt_namespace' is-struct='yes' visibility='default' is-declaration-only='yes' id='de031042'/>
+      <class-decl name='nameidata' is-struct='yes' visibility='default' is-declaration-only='yes' id='0319fc05'/>
+      <class-decl name='net' size-in-bits='34816' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='54' column='1' id='bd965180'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='passive' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/net/net_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rules_mod_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dev_unreg_count' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_base_seq' type-id='f0981eeb' visibility='default' filepath='include/net/net_namespace.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/net_namespace.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nsid_lock' type-id='fb4018a0' visibility='default' filepath='include/net/net_namespace.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fnhe_genid' type-id='49178f86' visibility='default' filepath='include/net/net_namespace.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='exit_list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cleanup_list' type-id='c5ccfee8' visibility='default' filepath='include/net/net_namespace.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='key_domain' type-id='fce14c5f' visibility='default' filepath='include/net/net_namespace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/net/net_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/net/net_namespace.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='netns_ids' type-id='37ce495e' visibility='default' filepath='include/net/net_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/net/net_namespace.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dev_base_head' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='proc_net' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='proc_net_stat' type-id='d077e928' visibility='default' filepath='include/net/net_namespace.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='sysctls' type-id='3fc3d262' visibility='default' filepath='include/net/net_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rtnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='genl_sock' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='uevent_sock' type-id='5224788d' visibility='default' filepath='include/net/net_namespace.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='dev_name_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dev_index_head' type-id='030d0b18' visibility='default' filepath='include/net/net_namespace.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='hash_mix' type-id='19c2251e' visibility='default' filepath='include/net/net_namespace.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='loopback_dev' type-id='68a2d05b' visibility='default' filepath='include/net/net_namespace.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rules_ops' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='core' type-id='7436aa2b' visibility='default' filepath='include/net/net_namespace.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='mib' type-id='870ef624' visibility='default' filepath='include/net/net_namespace.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='packet' type-id='49d7aa74' visibility='default' filepath='include/net/net_namespace.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='unx' type-id='6e306fde' visibility='default' filepath='include/net/net_namespace.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nexthop' type-id='03364088' visibility='default' filepath='include/net/net_namespace.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='ipv4' type-id='dba1641f' visibility='default' filepath='include/net/net_namespace.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='ipv6' type-id='dda16745' visibility='default' filepath='include/net/net_namespace.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17920'>
+          <var-decl name='nf' type-id='0a6298e0' visibility='default' filepath='include/net/net_namespace.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19904'>
+          <var-decl name='xt' type-id='288fe7b8' visibility='default' filepath='include/net/net_namespace.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='ct' type-id='2a831eeb' visibility='default' filepath='include/net/net_namespace.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='nf_frag' type-id='ebd39a5d' visibility='default' filepath='include/net/net_namespace.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='nf_frag_frags_hdr' type-id='11b101bb' visibility='default' filepath='include/net/net_namespace.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='nfnl' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='nfnl_stash' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25216'>
+          <var-decl name='wext_nlevents' type-id='e61c85d0' visibility='default' filepath='include/net/net_namespace.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25408'>
+          <var-decl name='gen' type-id='871fd930' visibility='default' filepath='include/net/net_namespace.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25472'>
+          <var-decl name='flow_dissector_prog' type-id='bdcee7ae' visibility='default' filepath='include/net/net_namespace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25600'>
+          <var-decl name='xfrm' type-id='3d2d291b' visibility='default' filepath='include/net/net_namespace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32768'>
+          <var-decl name='can' type-id='8f9898ce' visibility='default' filepath='include/net/net_namespace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34304'>
+          <var-decl name='xdp' type-id='a2b0ef48' visibility='default' filepath='include/net/net_namespace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='34624'>
+          <var-decl name='diag_nlsk' type-id='f772df6d' visibility='default' filepath='include/net/net_namespace.h' line='183' 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='a25ce1be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' 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='aa291214' visibility='default' filepath='include/linux/mm_types.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='f47d5752' visibility='default' filepath='include/linux/mm_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='_refcount' type-id='49178f86' visibility='default' filepath='include/linux/mm_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mem_cgroup' type-id='223696fb' visibility='default' filepath='include/linux/mm_types.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='575' column='1' id='7263c471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sibling_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='2a8a6332' visibility='default' filepath='include/linux/perf_event.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='group_index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='migrate_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hlist_entry' type-id='03a4a074' visibility='default' filepath='include/linux/perf_event.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='active_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_siblings' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='event_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='group_caps' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='group_leader' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='pmu_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='state' type-id='31fdb95a' visibility='default' filepath='include/linux/perf_event.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='attach_state' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='child_count' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='total_time_enabled' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='total_time_running' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tstamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='shadow_ctx_time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='attr' type-id='e57536d9' visibility='default' filepath='include/linux/perf_event.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2704'>
+          <var-decl name='id_header_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2720'>
+          <var-decl name='read_size' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='hw' type-id='b594b0c9' visibility='default' filepath='include/linux/perf_event.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='refcount' type-id='f22a8abb' visibility='default' filepath='include/linux/perf_event.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='child_total_time_enabled' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='child_total_time_running' type-id='28ee064c' visibility='default' filepath='include/linux/perf_event.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='child_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='child_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='parent' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5024'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='owner_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='mmap_mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='rb' type-id='8462bc54' visibility='default' filepath='include/linux/perf_event.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='rcu_batches' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='rcu_pending' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/perf_event.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/linux/perf_event.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='pending_wakeup' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='pending_kill' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pending_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='pending' type-id='9281c70f' visibility='default' filepath='include/linux/perf_event.h' line='686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='event_limit' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='addr_filters' type-id='54885433' visibility='default' filepath='include/linux/perf_event.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='addr_filter_ranges' type-id='200ffa89' visibility='default' filepath='include/linux/perf_event.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='aux_event' type-id='2bf16f59' visibility='default' filepath='include/linux/perf_event.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='destroy' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/perf_event.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='clock' type-id='0e70db3e' visibility='default' filepath='include/linux/perf_event.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='overflow_handler_context' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='orig_overflow_handler' type-id='20a2e4e6' visibility='default' filepath='include/linux/perf_event.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/perf_event.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='tp_event' type-id='23d6768c' visibility='default' filepath='include/linux/perf_event.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/perf_event.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='sb_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='728' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_event_context' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='743' column='1' id='9d67acd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pmu' type-id='0906f5b9' visibility='default' filepath='include/linux/perf_event.h' line='744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/perf_event.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='active_ctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='757' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinned_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flexible_groups' type-id='3643bc2a' visibility='default' filepath='include/linux/perf_event.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pinned_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='flexible_active' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='is_active' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='nr_stat' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rotate_disable' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rotate_necessary' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/perf_event.h' line='776' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='parent_ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='parent_gen' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='generation' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pin_count' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='task_ctx_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/perf_event.h' line='797' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pid_namespace' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/linux/pid_namespace.h' line='24' column='1' id='0252e252'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' 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='37ce495e' 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='e3d8ce29' 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='f0981eeb' 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='f23e2572' 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='f3b4aca8' 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='f0981eeb' 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='b816e1d0' 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='549da823' 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='27675065' 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='27675065' 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='c0ced320' 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='b1d4934a' 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='ef9025d0' visibility='default' filepath='include/linux/pid_namespace.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='pid_gid' type-id='094d8048' visibility='default' filepath='include/linux/pid_namespace.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='hide_pid' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='reboot' type-id='95e97e5e' visibility='default' filepath='include/linux/pid_namespace.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/pid_namespace.h' line='47' 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='bed94322'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' 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='b5ab048f' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='f0981eeb' 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='02f11ed4' 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='5bb9c75d' 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='5bb9c75d' 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='e15f3242' 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='273a7d34' visibility='default' filepath='include/linux/pipe_fs_i.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pollfd' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='36' column='1' id='b440e872'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='events' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='revents' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/poll.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rcu_node' is-struct='yes' visibility='default' is-declaration-only='yes' id='67b24a02'/>
+      <class-decl name='reclaim_state' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/swap.h' line='131' column='1' id='b9b792e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reclaimed_slab' type-id='7359adad' visibility='default' filepath='include/linux/swap.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_queue' size-in-bits='16832' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='405' column='1' id='caf652c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_merge' type-id='3dad1a48' visibility='default' filepath='include/linux/blkdev.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator' type-id='07d0a3e7' visibility='default' filepath='include/linux/blkdev.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stats' type-id='a0408c5a' visibility='default' filepath='include/linux/blkdev.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rq_qos' type-id='c3a28778' visibility='default' filepath='include/linux/blkdev.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='make_request_fn' type-id='8f01ad5c' visibility='default' filepath='include/linux/blkdev.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dma_drain_needed' type-id='1b19faa1' visibility='default' filepath='include/linux/blkdev.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mq_ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blkdev.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='queue_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queue_hw_ctx' type-id='3e195537' visibility='default' filepath='include/linux/blkdev.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/blkdev.h' line='427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='queuedata' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='queue_flags' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pm_only' type-id='49178f86' visibility='default' filepath='include/linux/blkdev.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='bounce_gfp' type-id='3eb7c31c' visibility='default' filepath='include/linux/blkdev.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='kobj' type-id='b6ab8849' 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='mq_kobj' type-id='d30bdc51' visibility='default' filepath='include/linux/blkdev.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/blkdev.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rpm_status' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='nr_pending' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_requests' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_drain_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dma_drain_buffer' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='dma_pad_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='dma_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='include/linux/blkdev.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='rq_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='poll_nsec' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='poll_cb' type-id='1f98c663' visibility='default' filepath='include/linux/blkdev.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='poll_stat' type-id='8574e02e' visibility='default' filepath='include/linux/blkdev.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/linux/blkdev.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='timeout_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='icq_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='blkcg_pols' type-id='f066dd3c' visibility='default' filepath='include/linux/blkdev.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='root_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blkdev.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='blkg_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='limits' type-id='f0966d3d' visibility='default' filepath='include/linux/blkdev.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='required_elevator_features' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9696'>
+          <var-decl name='sg_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='sg_reserved_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9760'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blkdev.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9856'>
+          <var-decl name='requeue_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='requeue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='requeue_work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/blkdev.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='sysfs_dir_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='unused_hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='unused_hctx_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blkdev.h' line='564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11808'>
+          <var-decl name='mq_freeze_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='bsg_dev' type-id='6a3af55b' visibility='default' filepath='include/linux/blkdev.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='td' type-id='b0d49e67' visibility='default' filepath='include/linux/blkdev.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blkdev.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='mq_freeze_wq' type-id='b5ab048f' visibility='default' filepath='include/linux/blkdev.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='mq_freeze_lock' type-id='925167dc' visibility='default' filepath='include/linux/blkdev.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='q_usage_counter' type-id='818799b4' visibility='default' filepath='include/linux/blkdev.h' line='583' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='tag_set' type-id='cc26d15f' visibility='default' filepath='include/linux/blkdev.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='tag_set_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='bio_split' type-id='dfa886b2' visibility='default' filepath='include/linux/blkdev.h' line='587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='rqos_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blkdev.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='mq_sysfs_init_done' type-id='b50a4934' visibility='default' filepath='include/linux/blkdev.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15808'>
+          <var-decl name='cmd_size' type-id='b59d7dce' visibility='default' filepath='include/linux/blkdev.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15872'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blkdev.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='write_hints' type-id='64af1365' visibility='default' filepath='include/linux/blkdev.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16768'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='607' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='robust_list_head' is-struct='yes' visibility='default' is-declaration-only='yes' id='999b38a0'/>
+      <class-decl name='rt_mutex_waiter' size-in-bits='640' is-struct='yes' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='27' column='1' id='afb04a62'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree_entry' type-id='2a8a6332' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pi_tree_entry' type-id='2a8a6332' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='3992a90f' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='kernel/locking/rtmutex_common.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_class' size-in-bits='1664' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='1737' column='1' id='74191d27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='162b4cce' visibility='default' filepath='kernel/sched/sched.h' line='1738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uclamp_enabled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='enqueue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1744' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dequeue_task' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='yield_task' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='yield_to_task' type-id='c4b7e554' visibility='default' filepath='kernel/sched/sched.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='check_preempt_curr' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pick_next_task' type-id='2a7b00f2' visibility='default' filepath='kernel/sched/sched.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_prev_task' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_next_task' type-id='f13b7179' visibility='default' filepath='kernel/sched/sched.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='balance' type-id='5346c726' visibility='default' filepath='kernel/sched/sched.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='select_task_rq' type-id='c3408547' visibility='default' filepath='kernel/sched/sched.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='migrate_task_rq' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='task_woken' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_cpus_allowed' type-id='54777a92' visibility='default' filepath='kernel/sched/sched.h' line='1775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_online' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_offline' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='task_tick' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='task_fork' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='task_dead' type-id='1c9e19fb' visibility='default' filepath='kernel/sched/sched.h' line='1784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='switched_from' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='switched_to' type-id='604374c8' visibility='default' filepath='kernel/sched/sched.h' line='1792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='prio_changed' type-id='7bca30b7' visibility='default' filepath='kernel/sched/sched.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='get_rr_interval' type-id='c79c9f4c' visibility='default' filepath='kernel/sched/sched.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='update_curr' type-id='d846ae3b' visibility='default' filepath='kernel/sched/sched.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='task_change_group' type-id='9d640202' visibility='default' filepath='kernel/sched/sched.h' line='1805' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='seccomp_filter' is-struct='yes' visibility='default' is-declaration-only='yes' id='e290c28c'/>
+      <class-decl name='sighand_struct' size-in-bits='16640' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='21' column='1' id='317e3dc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siglock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched/signal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='signalfd_wqh' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action' type-id='02d77f24' visibility='default' filepath='include/linux/sched/signal.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='signal_struct' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/linux/sched/signal.h' line='83' column='1' id='9a4619bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sigcnt' type-id='64615833' visibility='default' filepath='include/linux/sched/signal.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='live' type-id='49178f86' visibility='default' filepath='include/linux/sched/signal.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_threads' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='thread_head' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='wait_chldexit' type-id='b5ab048f' visibility='default' filepath='include/linux/sched/signal.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='curr_target' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shared_pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched/signal.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='multiprocess' type-id='e151255a' visibility='default' filepath='include/linux/sched/signal.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='group_exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='notify_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='group_exit_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched/signal.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='group_stop_count' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='has_child_subreaper' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='posix_timer_id' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='posix_timers' type-id='72f469ec' visibility='default' filepath='include/linux/sched/signal.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='real_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched/signal.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='it_real_incr' type-id='fbc017ef' visibility='default' filepath='include/linux/sched/signal.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='it' type-id='bb2d0d4e' visibility='default' filepath='include/linux/sched/signal.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cputimer' type-id='9480bb51' visibility='default' filepath='include/linux/sched/signal.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched/signal.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pids' type-id='3449295e' visibility='default' filepath='include/linux/sched/signal.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='tty_old_pgrp' type-id='b94e5398' visibility='default' filepath='include/linux/sched/signal.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='leader' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/signal.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/sched/signal.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='stats_lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/sched/signal.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cutime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='cstime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cgtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched/signal.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='cnvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='cnivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='cmin_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='cmaj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='inblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='oublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='cinblock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='coublock' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='maxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='cmaxrss' type-id='7359adad' visibility='default' filepath='include/linux/sched/signal.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched/signal.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sum_sched_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/signal.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='rlim' type-id='80f344e1' visibility='default' filepath='include/linux/sched/signal.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='stats' type-id='2c927837' visibility='default' filepath='include/linux/sched/signal.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='audit_tty' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/signal.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='tty_audit_buf' type-id='868c74f4' visibility='default' filepath='include/linux/sched/signal.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='oom_flag_origin' type-id='b50a4934' visibility='default' filepath='include/linux/sched/signal.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7696'>
+          <var-decl name='oom_score_adj' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7712'>
+          <var-decl name='oom_score_adj_min' type-id='a2185560' visibility='default' filepath='include/linux/sched/signal.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='oom_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched/signal.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='cred_guard_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched/signal.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='exec_update_lock' type-id='f19fdb93' visibility='default' filepath='include/linux/sched/signal.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/signal.h' line='242' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_group' size-in-bits='4096' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='358' column='1' id='2d863538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='kernel/sched/sched.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='se' type-id='eb11624e' visibility='default' filepath='kernel/sched/sched.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='cfs_rq' type-id='d6e32957' visibility='default' filepath='kernel/sched/sched.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='shares' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='load_avg' type-id='f22a8abb' visibility='default' filepath='kernel/sched/sched.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='parent' type-id='3c32f9de' visibility='default' filepath='kernel/sched/sched.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='siblings' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='cfs_bandwidth' type-id='68e4a3af' visibility='default' filepath='kernel/sched/sched.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='uclamp_pct' type-id='0d532ec1' visibility='default' filepath='kernel/sched/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='kernel/sched/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='latency_sensitive' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='412' 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='95' column='1' id='fdf3707c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/linux/user_namespace.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ns' type-id='c0ced320' visibility='default' filepath='include/linux/user_namespace.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ucount' type-id='32e5d672' visibility='default' filepath='include/linux/user_namespace.h' line='100' 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='61' column='1' id='98f6607e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='5d1a5bc7' visibility='default' filepath='include/linux/uprobes.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='f5a928fc' visibility='default' filepath='include/linux/uprobes.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active_uprobe' type-id='57376310' visibility='default' filepath='include/linux/uprobes.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xol_vaddr' type-id='7359adad' visibility='default' filepath='include/linux/uprobes.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='return_instances' type-id='d38eb863' visibility='default' filepath='include/linux/uprobes.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/uprobes.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='user_namespace' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/linux/user_namespace.h' line='56' column='1' id='8c178e22'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='gid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='projid_map' type-id='f179bf1b' visibility='default' filepath='include/linux/user_namespace.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/user_namespace.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='parent' type-id='c0ced320' visibility='default' filepath='include/linux/user_namespace.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/user_namespace.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='owner' type-id='d80b72e6' visibility='default' filepath='include/linux/user_namespace.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='group' type-id='094d8048' visibility='default' filepath='include/linux/user_namespace.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/user_namespace.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/user_namespace.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='keyring_name_list' type-id='72f469ec' visibility='default' filepath='include/linux/user_namespace.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='user_keyring_register' type-id='204a4632' visibility='default' filepath='include/linux/user_namespace.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='keyring_sem' type-id='f19fdb93' visibility='default' filepath='include/linux/user_namespace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/user_namespace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='set' type-id='3fc3d262' visibility='default' filepath='include/linux/user_namespace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='sysctls' type-id='11b101bb' visibility='default' filepath='include/linux/user_namespace.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/user_namespace.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='ucount_max' type-id='e415235d' visibility='default' filepath='include/linux/user_namespace.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/user_namespace.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vm_area_struct' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/mm_types.h' line='294' column='1' id='62c85860'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vm_start' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vm_end' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vm_next' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vm_prev' type-id='2ae08426' visibility='default' filepath='include/linux/mm_types.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='vm_rb' type-id='2a8a6332' visibility='default' filepath='include/linux/mm_types.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rb_subtree_gap' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vm_mm' type-id='df4b7819' visibility='default' filepath='include/linux/mm_types.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='vm_page_prot' type-id='2e2dcbd3' visibility='default' filepath='include/linux/mm_types.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='vm_flags' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='cc072175' visibility='default' filepath='include/linux/mm_types.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='anon_vma_chain' type-id='72f469ec' visibility='default' filepath='include/linux/mm_types.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='anon_vma' type-id='a8f86cda' visibility='default' filepath='include/linux/mm_types.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vm_ops' type-id='9be87662' visibility='default' filepath='include/linux/mm_types.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='vm_pgoff' type-id='7359adad' visibility='default' filepath='include/linux/mm_types.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='vm_file' type-id='77e79a4b' visibility='default' filepath='include/linux/mm_types.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='vm_private_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/mm_types.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='swap_readahead_info' type-id='f22a8abb' visibility='default' filepath='include/linux/mm_types.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='vm_userfaultfd_ctx' type-id='fdd6214e' visibility='default' filepath='include/linux/mm_types.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='android_vendor_data1' type-id='91ce1af9' visibility='default' filepath='include/linux/mm_types.h' line='370' 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='41' column='1' id='5f2f8da4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='d295dab2' visibility='default' filepath='include/linux/vmalloc.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/vmalloc.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pages' type-id='9f93c9da' visibility='default' filepath='include/linux/vmalloc.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_pages' type-id='f0981eeb' visibility='default' filepath='include/linux/vmalloc.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='phys_addr' type-id='2522883d' visibility='default' filepath='include/linux/vmalloc.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='caller' type-id='eaa32e2f' visibility='default' filepath='include/linux/vmalloc.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='256' id='fc3a8480'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='03a4a074' size-in-bits='512' id='3f6e320a'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1851ab9f' size-in-bits='4096' id='cb01bf4b'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='128' id='2020bac4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <type-decl name='long int' size-in-bits='64' id='bd54fe1a'/>
+      <type-decl name='long long int' size-in-bits='64' id='1eb56b1e'/>
+      <type-decl name='long long unsigned int' size-in-bits='64' id='3a47d82b'/>
+      <array-type-def dimensions='1' type-id='2bf16f59' size-in-bits='1024' id='18b1b6ec'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b9419dc5' size-in-bits='128' id='c7e7059f'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e710f78e' size-in-bits='576' id='0e685653'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <type-decl name='short int' size-in-bits='16' id='a2185560'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='128' id='24a375b2'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='192' id='20a130cf'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0888126c' size-in-bits='64' id='c6e3c250'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <type-decl name='unsigned __int128' size-in-bits='128' id='4f340252'/>
+      <type-decl name='unsigned char' size-in-bits='8' id='002ac4a6'/>
+      <type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='64' id='f066dd3c'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <type-decl name='unsigned short int' size-in-bits='16' id='8efea9e5'/>
+      <array-type-def dimensions='1' type-id='120c01b5' size-in-bits='128' id='9a69aeec'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2ae08426' size-in-bits='256' id='ae25b7bc'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='uts_namespace' size-in-bits='3520' is-struct='yes' visibility='default' filepath='include/linux/utsname.h' line='24' column='1' id='44f52e9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/utsname.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='ee2746d3' visibility='default' filepath='include/linux/utsname.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='user_ns' type-id='c0ced320' visibility='default' filepath='include/linux/utsname.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ucounts' type-id='b1d4934a' visibility='default' filepath='include/linux/utsname.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='ns' type-id='99f367f2' visibility='default' filepath='include/linux/utsname.h' line='29' 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='19' column='1' id='400fb07b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='include/linux/kref.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='refcount_t' type-id='637cfeaf' filepath='include/linux/refcount.h' line='21' column='1' id='64615833'/>
+      <class-decl name='refcount_struct' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/refcount.h' line='19' column='1' id='637cfeaf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refs' type-id='49178f86' visibility='default' filepath='include/linux/refcount.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_t' type-id='79faeff3' filepath='include/linux/types.h' line='173' column='1' id='49178f86'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='49178f86' visibility='default' filepath='include/linux/types.h' line='171' column='1' id='79faeff3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='95e97e5e' visibility='default' filepath='include/linux/types.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='ee2746d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sysname' type-id='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' 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='5ddd38d2' visibility='default' filepath='include/uapi/linux/utsname.h' line='31' 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='99f367f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stashed' type-id='f22a8abb' 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='4598bd2d' 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='f0981eeb' visibility='default' filepath='include/linux/ns_common.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='atomic_long_t' type-id='28ee064c' filepath='include/asm-generic/atomic-long.h' line='12' column='1' id='f22a8abb'/>
+      <typedef-decl name='atomic64_t' type-id='4efbf2c5' filepath='include/linux/types.h' line='178' column='1' id='28ee064c'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='28ee064c' visibility='default' filepath='include/linux/types.h' line='176' column='1' id='4efbf2c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='counter' type-id='9b7c55ef' visibility='default' filepath='include/linux/types.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='s64' type-id='49659421' filepath='include/asm-generic/int-ll64.h' line='22' column='1' id='9b7c55ef'/>
+      <typedef-decl name='__s64' type-id='1eb56b1e' filepath='include/uapi/asm-generic/int-ll64.h' line='30' column='1' id='49659421'/>
+      <class-decl name='proc_ns_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/proc_ns.h' line='16' column='1' id='2ba71bf0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real_ns_name' type-id='80f4b756' visibility='default' filepath='include/linux/proc_ns.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/proc_ns.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get' type-id='3e644294' visibility='default' filepath='include/linux/proc_ns.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='put' type-id='277e3361' visibility='default' filepath='include/linux/proc_ns.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='install' type-id='d23fe9bd' visibility='default' filepath='include/linux/proc_ns.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='6fa26802' visibility='default' filepath='include/linux/proc_ns.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_parent' type-id='e0677422' visibility='default' filepath='include/linux/proc_ns.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_struct' size-in-bits='30208' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='636' column='1' id='bc3f1924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='thread_info' type-id='575a2c7a' visibility='default' filepath='include/linux/sched.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='5efddaac' visibility='default' filepath='include/linux/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='stack' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='usage' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ptrace' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_entry' type-id='c5ccfee8' visibility='default' filepath='include/linux/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='on_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='wakee_flips' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wakee_flip_decay_ts' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='last_wakee' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='recent_used_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='wake_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='678' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='on_rq' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='static_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='normal_prio' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rt_priority' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sched_class' type-id='162b4cce' visibility='default' filepath='include/linux/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='se' type-id='2561fcb2' visibility='default' filepath='include/linux/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='rt' type-id='29843697' visibility='default' filepath='include/linux/sched.h' line='689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='sched_task_group' type-id='3c32f9de' visibility='default' filepath='include/linux/sched.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='dl' type-id='2d494b2d' visibility='default' filepath='include/linux/sched.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='uclamp_req' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='uclamp' type-id='c6e3c250' visibility='default' filepath='include/linux/sched.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='preempt_notifiers' type-id='e151255a' visibility='default' filepath='include/linux/sched.h' line='710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='policy' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8416'>
+          <var-decl name='nr_cpus_allowed' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='cpus_ptr' type-id='af4bd535' visibility='default' filepath='include/linux/sched.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='cpus_mask' type-id='90bc6bed' visibility='default' filepath='include/linux/sched.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='rcu_read_lock_nesting' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8608'>
+          <var-decl name='rcu_read_unlock_special' type-id='a324790e' visibility='default' filepath='include/linux/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='rcu_node_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='rcu_blocked_node' type-id='d5d06540' visibility='default' filepath='include/linux/sched.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8832'>
+          <var-decl name='rcu_tasks_nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='rcu_tasks_holdout' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8904'>
+          <var-decl name='rcu_tasks_idx' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8928'>
+          <var-decl name='rcu_tasks_idle_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='rcu_tasks_holdout_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='sched_info' type-id='59ddd03d' visibility='default' filepath='include/linux/sched.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9344'>
+          <var-decl name='tasks' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='pushable_tasks' type-id='e3a91a7c' visibility='default' filepath='include/linux/sched.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9792'>
+          <var-decl name='pushable_dl_tasks' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='active_mm' type-id='df4b7819' visibility='default' filepath='include/linux/sched.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='vmacache' type-id='4f79f8f3' visibility='default' filepath='include/linux/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='rss_stat' type-id='dfedb05a' visibility='default' filepath='include/linux/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10592'>
+          <var-decl name='exit_state' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='exit_code' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='exit_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pdeath_signal' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='jobctl' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='personality' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='763' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sched_reset_on_fork' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sched_contributes_to_load' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='sched_migrated' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='sched_remote_wakeup' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='sched_psi_wake_requeue' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in_execve' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='in_iowait' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='in_user_fault' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='no_cgroup_migration' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='frozen' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='use_memdelay' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='atomic_flags' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='restart_block' type-id='45e819d6' visibility='default' filepath='include/linux/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='pid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11424'>
+          <var-decl name='tgid' type-id='587f89d2' visibility='default' filepath='include/linux/sched.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='stack_canary' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='real_parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='parent' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='group_leader' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='ptraced' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='ptrace_entry' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='thread_pid' type-id='b94e5398' visibility='default' filepath='include/linux/sched.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='pid_links' type-id='3f6e320a' visibility='default' filepath='include/linux/sched.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='thread_group' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='thread_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='vfork_done' type-id='389faaf7' visibility='default' filepath='include/linux/sched.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='set_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='clear_child_tid' type-id='7292109c' visibility='default' filepath='include/linux/sched.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13312'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='gtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='time_in_state' type-id='3df9fd28' visibility='default' filepath='include/linux/sched.h' line='863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='max_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/sched.h' line='866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='nvcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='875' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13824'>
+          <var-decl name='nivcsw' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='876' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13888'>
+          <var-decl name='start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='real_start_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14016'>
+          <var-decl name='min_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14080'>
+          <var-decl name='maj_flt' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14144'>
+          <var-decl name='posix_cputimers' type-id='1069de27' visibility='default' filepath='include/linux/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='ptracer_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='real_cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='897' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='cred' type-id='bc33861a' visibility='default' filepath='include/linux/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='cached_requested_key' type-id='204a4632' visibility='default' filepath='include/linux/sched.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='comm' type-id='ac1fa8c0' visibility='default' filepath='include/linux/sched.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15168'>
+          <var-decl name='nameidata' type-id='26452515' visibility='default' filepath='include/linux/sched.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15232'>
+          <var-decl name='fs' type-id='08890290' visibility='default' filepath='include/linux/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15296'>
+          <var-decl name='files' type-id='16c53416' visibility='default' filepath='include/linux/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15360'>
+          <var-decl name='nsproxy' type-id='dc5ce118' visibility='default' filepath='include/linux/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15424'>
+          <var-decl name='signal' type-id='a91cd5f7' visibility='default' filepath='include/linux/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15488'>
+          <var-decl name='sighand' type-id='32cc1711' visibility='default' filepath='include/linux/sched.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15552'>
+          <var-decl name='blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15616'>
+          <var-decl name='real_blocked' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15680'>
+          <var-decl name='saved_sigmask' type-id='daf33c64' visibility='default' filepath='include/linux/sched.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15744'>
+          <var-decl name='pending' type-id='7b5c012d' visibility='default' filepath='include/linux/sched.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15936'>
+          <var-decl name='sas_ss_sp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16000'>
+          <var-decl name='sas_ss_size' type-id='b59d7dce' visibility='default' filepath='include/linux/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16064'>
+          <var-decl name='sas_ss_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='task_works' type-id='69c138b1' visibility='default' filepath='include/linux/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16192'>
+          <var-decl name='audit_context' type-id='a9f319d2' visibility='default' filepath='include/linux/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16256'>
+          <var-decl name='loginuid' type-id='d80b72e6' visibility='default' filepath='include/linux/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16288'>
+          <var-decl name='sessionid' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16320'>
+          <var-decl name='seccomp' type-id='298af459' visibility='default' filepath='include/linux/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16448'>
+          <var-decl name='parent_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16512'>
+          <var-decl name='self_exec_id' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16576'>
+          <var-decl name='alloc_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/sched.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16608'>
+          <var-decl name='pi_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16640'>
+          <var-decl name='wake_q' type-id='69970be2' visibility='default' filepath='include/linux/sched.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16704'>
+          <var-decl name='pi_waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16832'>
+          <var-decl name='pi_top_task' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16896'>
+          <var-decl name='pi_blocked_on' type-id='54d4ed50' visibility='default' filepath='include/linux/sched.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16960'>
+          <var-decl name='journal_info' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17024'>
+          <var-decl name='bio_list' type-id='ee802604' visibility='default' filepath='include/linux/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17088'>
+          <var-decl name='plug' type-id='39944481' visibility='default' filepath='include/linux/sched.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17152'>
+          <var-decl name='reclaim_state' type-id='c78f98c0' visibility='default' filepath='include/linux/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='backing_dev_info' type-id='ef4fae1b' visibility='default' filepath='include/linux/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17280'>
+          <var-decl name='io_context' type-id='d042cfad' visibility='default' filepath='include/linux/sched.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17344'>
+          <var-decl name='capture_control' type-id='f886696f' visibility='default' filepath='include/linux/sched.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17408'>
+          <var-decl name='ptrace_message' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='last_siginfo' type-id='3638c201' visibility='default' filepath='include/linux/sched.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17536'>
+          <var-decl name='ioac' type-id='ca075c7f' visibility='default' filepath='include/linux/sched.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18048'>
+          <var-decl name='psi_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18112'>
+          <var-decl name='acct_rss_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18176'>
+          <var-decl name='acct_vm_mem1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='acct_timexpd' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='mems_allowed' type-id='6a7d16bb' visibility='default' filepath='include/linux/sched.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18368'>
+          <var-decl name='mems_allowed_seq' type-id='e14c3b11' visibility='default' filepath='include/linux/sched.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18400'>
+          <var-decl name='cpuset_mem_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='cpuset_slab_spread_rotor' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18496'>
+          <var-decl name='cgroups' type-id='85d57723' visibility='default' filepath='include/linux/sched.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18560'>
+          <var-decl name='cg_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='robust_list' type-id='c44b3996' visibility='default' filepath='include/linux/sched.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='compat_robust_list' type-id='917bb1c5' visibility='default' filepath='include/linux/sched.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='pi_state_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='pi_state_cache' type-id='0bbc9f87' visibility='default' filepath='include/linux/sched.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='futex_exit_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='futex_state' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='perf_event_ctxp' type-id='c7e7059f' visibility='default' filepath='include/linux/sched.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='perf_event_mutex' type-id='925167dc' visibility='default' filepath='include/linux/sched.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='perf_event_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='tlb_ubc' type-id='a3d9f566' visibility='default' filepath='include/linux/sched.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='' type-id='b45135d0' visibility='default' filepath='include/linux/sched.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='splice_pipe' type-id='15d29710' visibility='default' filepath='include/linux/sched.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='task_frag' type-id='06c0432f' visibility='default' filepath='include/linux/sched.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_dirtied' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='nr_dirtied_pause' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='dirty_paused_when' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='default_timer_slack_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='trace' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='trace_recursion' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='1226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='memcg_in_oom' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='memcg_oom_gfp_mask' type-id='3eb7c31c' visibility='default' filepath='include/linux/sched.h' line='1253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20640'>
+          <var-decl name='memcg_oom_order' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='memcg_nr_pages_over_high' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='1257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_memcg' type-id='223696fb' visibility='default' filepath='include/linux/sched.h' line='1260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20800'>
+          <var-decl name='throttle_queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/sched.h' line='1264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20864'>
+          <var-decl name='utask' type-id='9d2cef34' visibility='default' filepath='include/linux/sched.h' line='1268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20928'>
+          <var-decl name='pagefault_disabled' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='1277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='oom_reaper_list' type-id='f23e2572' visibility='default' filepath='include/linux/sched.h' line='1279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='stack_vm_area' type-id='d295dab2' visibility='default' filepath='include/linux/sched.h' line='1282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='stack_refcount' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21184'>
+          <var-decl name='security' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched.h' line='1293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21248'>
+          <var-decl name='android_vendor_data1' type-id='24a375b2' visibility='default' filepath='include/linux/sched.h' line='1301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='android_oem_data1' type-id='20a130cf' visibility='default' filepath='include/linux/sched.h' line='1302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21568'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21632'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21696'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21760'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21824'>
+          <var-decl name='android_kabi_reserved5' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21888'>
+          <var-decl name='android_kabi_reserved6' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21952'>
+          <var-decl name='android_kabi_reserved7' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='android_kabi_reserved8' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='1311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22144'>
+          <var-decl name='thread' type-id='0c8a83c7' visibility='default' filepath='include/linux/sched.h' line='1320' 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='26' column='1' id='575a2c7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr_limit' type-id='f079b4db' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ttbr0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9a29bfd9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='shadow_call_stack' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mm_segment_t' type-id='7359adad' filepath='arch/arm64/include/asm/thread_info.h' line='21' column='1' id='f079b4db'/>
+      <typedef-decl name='u64' type-id='d3130597' filepath='include/asm-generic/int-ll64.h' line='23' column='1' id='91ce1af9'/>
+      <typedef-decl name='__u64' type-id='3a47d82b' filepath='include/uapi/asm-generic/int-ll64.h' line='31' column='1' id='d3130597'/>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='32' column='1' id='9a29bfd9'>
+        <data-member access='public'>
+          <var-decl name='preempt_count' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='preempt' type-id='45bb8abd' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='42' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='34' column='1' id='45bb8abd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='need_resched' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/thread_info.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u32' type-id='3f1a6b60' filepath='include/asm-generic/int-ll64.h' line='21' column='1' id='19c2251e'/>
+      <typedef-decl name='__u32' type-id='f0981eeb' filepath='include/uapi/asm-generic/int-ll64.h' line='27' column='1' id='3f1a6b60'/>
+      <class-decl name='llist_node' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/llist.h' line='58' column='1' id='c5ccfee8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_entity' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='446' column='1' id='2561fcb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='load' type-id='ad979632' visibility='default' filepath='include/linux/sched.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='run_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='group_node' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='on_rq' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='exec_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vruntime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='prev_sum_exec_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='statistics' type-id='4ebe02b2' visibility='default' filepath='include/linux/sched.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/linux/sched.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='parent' type-id='ff2b3d10' visibility='default' filepath='include/linux/sched.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='cfs_rq' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='my_q' type-id='a6892387' visibility='default' filepath='include/linux/sched.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='avg' type-id='629c8d83' visibility='default' filepath='include/linux/sched.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='485' 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='322' column='1' id='ad979632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='weight' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='inv_weight' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='rcu_special' size-in-bits='32' visibility='default' filepath='include/linux/sched.h' line='615' column='1' id='a324790e'>
+        <data-member access='public'>
+          <var-decl name='b' type-id='4edee319' visibility='default' filepath='include/linux/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='s' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='622' 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='24' column='1' id='2a8a6332'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__rb_parent_color' type-id='7359adad' visibility='default' filepath='include/linux/rbtree.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_right' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rb_left' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='27' 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='181' column='1' id='72f469ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prev' type-id='e84b031a' visibility='default' filepath='include/linux/types.h' line='182' 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='410' column='1' id='4ebe02b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='wait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iowait_count' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iowait_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sleep_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sleep_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sum_sleep_runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='block_start' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='block_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='exec_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='slice_max' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_migrations_cold' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_failed_migrations_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nr_failed_migrations_running' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_failed_migrations_hot' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nr_forced_migrations' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nr_wakeups' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nr_wakeups_sync' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='nr_wakeups_migrate' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='nr_wakeups_local' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='nr_wakeups_remote' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='nr_wakeups_affine' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='nr_wakeups_affine_attempts' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='nr_wakeups_passive' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='nr_wakeups_idle' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_avg' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='398' column='1' id='629c8d83'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='last_update_time' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runnable_load_sum' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='util_sum' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='period_contrib' type-id='19c2251e' visibility='default' filepath='include/linux/sched.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runnable_load_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='util_est' type-id='594488ba' visibility='default' filepath='include/linux/sched.h' line='407' 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='349' column='1' id='594488ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enqueued' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ewma' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_rt_entity' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='488' column='1' id='29843697'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='run_list' type-id='72f469ec' visibility='default' filepath='include/linux/sched.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_stamp' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_slice' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='on_rq' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='on_list' type-id='8efea9e5' visibility='default' filepath='include/linux/sched.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='back' type-id='9eead88f' visibility='default' filepath='include/linux/sched.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='508' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_dl_entity' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='511' column='1' id='2d494b2d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/sched.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dl_runtime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dl_deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_period' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dl_bw' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dl_density' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='runtime' type-id='9b7c55ef' visibility='default' filepath='include/linux/sched.h' line='530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='deadline' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl_throttled' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='dl_boosted' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='dl_yielded' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='dl_non_contending' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='dl_overrun' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='562' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dl_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='inactive_timer' type-id='b6993efc' visibility='default' filepath='include/linux/sched.h' line='577' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hrtimer' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/hrtimer.h' line='118' column='1' id='b6993efc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/hrtimer.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_softexpires' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='function' type-id='ca9b3bbf' visibility='default' filepath='include/linux/hrtimer.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='base' type-id='730f4667' visibility='default' filepath='include/linux/hrtimer.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_rel' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_soft' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='is_hard' type-id='f9b06939' visibility='default' filepath='include/linux/hrtimer.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/hrtimer.h' line='128' 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='fe3acb42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='2a8a6332' 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='fbc017ef' visibility='default' filepath='include/linux/timerqueue.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='ktime_t' type-id='9b7c55ef' filepath='include/linux/ktime.h' line='28' column='1' id='fbc017ef'/>
+      <enum-decl name='hrtimer_restart' filepath='include/linux/hrtimer.h' line='65' column='1' id='7313b0ab'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='161' column='1' id='1851ab9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_base' type-id='75e9503b' visibility='default' filepath='include/linux/hrtimer.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clockid' type-id='a1c3b834' visibility='default' filepath='include/linux/hrtimer.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq' type-id='e14c3b11' visibility='default' filepath='include/linux/hrtimer.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='running' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='active' type-id='ff3c7f20' visibility='default' filepath='include/linux/hrtimer.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_time' type-id='7a6c9108' visibility='default' filepath='include/linux/hrtimer.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='offset' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='169' 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='216' column='1' id='8d24b00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/hrtimer.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='active_bases' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hres_active' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='in_hrtirq' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='hang_detected' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='softirq_activated' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_events' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_retries' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='nr_hangs' type-id='8efea9e5' visibility='default' filepath='include/linux/hrtimer.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_hang_time' type-id='f0981eeb' visibility='default' filepath='include/linux/hrtimer.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='softirq_expires_next' type-id='fbc017ef' visibility='default' filepath='include/linux/hrtimer.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='softirq_next_timer' type-id='08c8d0fa' visibility='default' filepath='include/linux/hrtimer.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='clock_base' type-id='cb01bf4b' visibility='default' filepath='include/linux/hrtimer.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='raw_spinlock_t' type-id='f106d0e5' filepath='include/linux/spinlock_types.h' line='29' column='1' id='f5c90b3f'/>
+      <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='f106d0e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='raw_lock' type-id='641c41d1' visibility='default' filepath='include/linux/spinlock_types.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='arch_spinlock_t' type-id='c167abfb' filepath='include/asm-generic/qspinlock_types.h' line='52' column='1' id='641c41d1'/>
+      <class-decl name='qspinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='22' column='1' id='c167abfb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='16e927d3' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='23' column='1' id='16e927d3'>
+        <data-member access='public'>
+          <var-decl name='val' type-id='49178f86' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='e56340ee' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='33729b5d' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='32' column='1' id='e56340ee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='pending' type-id='f9b06939' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u8' type-id='8f048e17' filepath='include/asm-generic/int-ll64.h' line='17' column='1' id='f9b06939'/>
+      <typedef-decl name='__u8' type-id='002ac4a6' filepath='include/uapi/asm-generic/int-ll64.h' line='21' column='1' id='8f048e17'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='36' column='1' id='33729b5d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='locked_pending' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tail' type-id='1dc6a898' visibility='default' filepath='include/asm-generic/qspinlock_types.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u16' type-id='d315442e' filepath='include/asm-generic/int-ll64.h' line='19' column='1' id='1dc6a898'/>
+      <typedef-decl name='__u16' type-id='8efea9e5' filepath='include/uapi/asm-generic/int-ll64.h' line='24' column='1' id='d315442e'/>
+      <typedef-decl name='clockid_t' type-id='7eb128d4' filepath='include/linux/types.h' line='27' column='1' id='a1c3b834'/>
+      <typedef-decl name='__kernel_clockid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='93' column='1' id='7eb128d4'/>
+      <typedef-decl name='seqcount_t' type-id='3a74ff0b' filepath='include/linux/seqlock.h' line='53' column='1' id='e14c3b11'/>
+      <class-decl name='seqcount' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/seqlock.h' line='48' column='1' id='3a74ff0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sequence' type-id='f0981eeb' visibility='default' filepath='include/linux/seqlock.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='timerqueue_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timerqueue.h' line='14' column='1' id='ff3c7f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='6fe1603d' visibility='default' filepath='include/linux/timerqueue.h' line='15' 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='125' column='1' id='6fe1603d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_root' type-id='dec44472' visibility='default' filepath='include/linux/rbtree.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rb_leftmost' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='127' 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='31' column='1' id='dec44472'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='e6532500' visibility='default' filepath='include/linux/rbtree.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_se' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/sched.h' line='607' column='1' id='0888126c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='bucket_id' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='user_defined' type-id='f0981eeb' visibility='default' filepath='include/linux/sched.h' line='611' 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='185' column='1' id='e151255a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='186' 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='189' column='1' id='03a4a074'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='08cbad52' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pprev' type-id='50a213e8' visibility='default' filepath='include/linux/types.h' line='190' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_t' type-id='1354385d' filepath='include/linux/cpumask.h' line='17' column='1' id='90bc6bed'/>
+      <class-decl name='cpumask' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1' id='1354385d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/cpumask.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='616' column='1' id='4edee319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blocked' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='need_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='exp_hint' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='deferred_qs' type-id='f9b06939' visibility='default' filepath='include/linux/sched.h' line='620' 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='287' column='1' id='59ddd03d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcount' type-id='7359adad' visibility='default' filepath='include/linux/sched.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='run_delay' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_arrival' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_queued' type-id='3a47d82b' visibility='default' filepath='include/linux/sched.h' line='303' 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='83' column='1' id='e3a91a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prio' type-id='95e97e5e' visibility='default' filepath='include/linux/plist.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prio_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='86' 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='4f79f8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seqnum' type-id='91ce1af9' 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='ae25b7bc' 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='54' column='1' id='dfedb05a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='95e97e5e' visibility='default' filepath='include/linux/mm_types_task.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='2020bac4' visibility='default' filepath='include/linux/mm_types_task.h' line='56' 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='45e819d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fn' type-id='d5b25e9c' 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='7f825f2d' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='27' column='1' id='7f825f2d'>
+        <data-member access='public'>
+          <var-decl name='futex' type-id='71f149c6' visibility='default' filepath='include/linux/restart_block.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nanosleep' type-id='5047547d' visibility='default' filepath='include/linux/restart_block.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='poll' type-id='98bfe848' visibility='default' filepath='include/linux/restart_block.h' line='54' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='29' column='1' id='71f149c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uaddr' type-id='f9409001' 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='19c2251e' 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='19c2251e' 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='19c2251e' 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='91ce1af9' 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='f9409001' visibility='default' filepath='include/linux/restart_block.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='38' column='1' id='5047547d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clockid' type-id='a1c3b834' 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='58918b27' 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='95408dfc' 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='91ce1af9' 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='58918b27'>
+        <underlying-type type-id='9cac1fee'/>
+        <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__3' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='41' column='1' id='95408dfc'>
+        <data-member access='public'>
+          <var-decl name='rmtp' type-id='59229509' visibility='default' filepath='include/linux/restart_block.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='compat_rmtp' type-id='e69c040e' visibility='default' filepath='include/linux/restart_block.h' line='43' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__kernel_timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time_types.h' line='7' column='1' id='5c155a71'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='3d9e85cc' visibility='default' filepath='include/uapi/linux/time_types.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tv_nsec' type-id='1eb56b1e' visibility='default' filepath='include/uapi/linux/time_types.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_time64_t' type-id='1eb56b1e' filepath='include/uapi/asm-generic/posix_types.h' line='90' column='1' id='3d9e85cc'/>
+      <class-decl name='old_timespec32' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/vdso/time32.h' line='7' column='1' id='f4b65c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='5d60da55' visibility='default' filepath='include/vdso/time32.h' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tv_nsec' type-id='a7832498' visibility='default' filepath='include/vdso/time32.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='old_time32_t' type-id='a7832498' filepath='include/vdso/time32.h' line='5' column='1' id='5d60da55'/>
+      <typedef-decl name='s32' type-id='3158a266' filepath='include/asm-generic/int-ll64.h' line='20' column='1' id='a7832498'/>
+      <typedef-decl name='__s32' type-id='95e97e5e' filepath='include/uapi/asm-generic/int-ll64.h' line='26' column='1' id='3158a266'/>
+      <class-decl name='__anonymous_struct__8' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/restart_block.h' line='48' column='1' id='98bfe848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ufds' type-id='3ac36db0' 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='95e97e5e' 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='95e97e5e' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/restart_block.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='pid_t' type-id='63eb2bf2' filepath='include/linux/types.h' line='22' column='1' id='587f89d2'/>
+      <typedef-decl name='__kernel_pid_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='28' column='1' id='63eb2bf2'/>
+      <class-decl name='pid' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/pid.h' line='59' column='1' id='d10e968a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='64615833' visibility='default' filepath='include/linux/pid.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='level' type-id='f0981eeb' visibility='default' filepath='include/linux/pid.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tasks' type-id='fc3a8480' visibility='default' filepath='include/linux/pid.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='wait_pidfd' type-id='b5ab048f' visibility='default' filepath='include/linux/pid.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/pid.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numbers' type-id='9a69aeec' visibility='default' filepath='include/linux/pid.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_head_t' type-id='cff07063' filepath='include/linux/wait.h' line='38' column='1' id='b5ab048f'/>
+      <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='cff07063'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='72f469ec' visibility='default' filepath='include/linux/wait.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='spinlock_t' type-id='53fb272e' filepath='include/linux/spinlock_types.h' line='73' column='1' id='fb4018a0'/>
+      <class-decl name='spinlock' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/spinlock_types.h' line='61' column='1' id='53fb272e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='1076cffc' 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='1076cffc'>
+        <data-member access='public'>
+          <var-decl name='rlock' type-id='f106d0e5' visibility='default' filepath='include/linux/spinlock_types.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='callback_head' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/types.h' line='219' column='1' id='e3d8ce29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='69c138b1' visibility='default' filepath='include/linux/types.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='func' type-id='eb839374' visibility='default' filepath='include/linux/types.h' line='221' 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='54' column='1' id='120c01b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='include/linux/pid.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ns' type-id='b816e1d0' visibility='default' filepath='include/linux/pid.h' line='56' 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='244' column='1' id='9c7bf560'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/sched.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimers' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='122' column='1' id='1069de27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bases' type-id='0e685653' visibility='default' filepath='include/linux/posix-timers.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='timers_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='expiry_active' type-id='f0981eeb' visibility='default' filepath='include/linux/posix-timers.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='posix_cputimer_base' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/posix-timers.h' line='107' column='1' id='e710f78e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nextevt' type-id='91ce1af9' visibility='default' filepath='include/linux/posix-timers.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tqhead' type-id='ff3c7f20' visibility='default' filepath='include/linux/posix-timers.h' line='109' 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='b82b9d3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' 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='9d5923ed' 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='76ccea8d' 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='d60f4f10' 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='b816e1d0' 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='a2bff676' 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='f774a955' visibility='default' filepath='include/linux/nsproxy.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='sigset_t' type-id='e6ea37b8' filepath='include/uapi/asm-generic/signal.h' line='92' column='1' id='daf33c64'/>
+      <class-decl name='__anonymous_struct__9' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='daf33c64' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='90' column='1' id='e6ea37b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sig' type-id='f066dd3c' visibility='default' filepath='include/uapi/asm-generic/signal.h' line='91' 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='30' column='1' id='7b5c012d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/signal_types.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='signal' type-id='daf33c64' visibility='default' filepath='include/linux/signal_types.h' line='32' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='size_t' type-id='9e19ad6e' filepath='include/linux/types.h' line='55' column='1' id='b59d7dce'/>
+      <typedef-decl name='__kernel_size_t' type-id='447da2ae' filepath='include/uapi/asm-generic/posix_types.h' line='72' column='1' id='9e19ad6e'/>
+      <typedef-decl name='__kernel_ulong_t' type-id='7359adad' filepath='include/uapi/asm-generic/posix_types.h' line='16' column='1' id='447da2ae'/>
+      <typedef-decl name='kuid_t' type-id='e8b29774' filepath='include/linux/uidgid.h' line='23' column='1' id='d80b72e6'/>
+      <class-decl name='__anonymous_struct__10' size-in-bits='32' is-struct='yes' is-anonymous='yes' naming-typedef-id='d80b72e6' visibility='default' filepath='include/linux/uidgid.h' line='21' column='1' id='e8b29774'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='354978ed' visibility='default' filepath='include/linux/uidgid.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='uid_t' type-id='70734f24' filepath='include/linux/types.h' line='32' column='1' id='354978ed'/>
+      <typedef-decl name='__kernel_uid32_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/posix_types.h' line='49' column='1' id='70734f24'/>
+      <class-decl name='seccomp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/seccomp.h' line='30' column='1' id='298af459'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='95e97e5e' visibility='default' filepath='include/linux/seccomp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='filter_count' type-id='49178f86' visibility='default' filepath='include/linux/seccomp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter' type-id='2a128f5a' visibility='default' filepath='include/linux/seccomp.h' line='33' 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='632' column='1' id='69970be2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='b16791f0' visibility='default' filepath='include/linux/sched.h' line='633' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kernel_siginfo_t' type-id='38ef7882' filepath='include/linux/signal_types.h' line='14' column='1' id='22ec9634'/>
+      <class-decl name='kernel_siginfo' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/signal_types.h' line='12' column='1' id='38ef7882'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='c60b207d' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1' id='c60b207d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='si_signo' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='si_errno' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='si_code' type-id='95e97e5e' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sifields' type-id='a60646cb' visibility='default' filepath='include/linux/signal_types.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__sifields' size-in-bits='256' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='32' column='1' id='a60646cb'>
+        <data-member access='public'>
+          <var-decl name='_kill' type-id='35888a92' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_timer' type-id='11b42bf5' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_rt' type-id='90a6a0a3' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigchld' type-id='5b8a7161' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigfault' type-id='b47416ba' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigpoll' type-id='88c21632' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_sigsys' type-id='07fe0781' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='108' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='34' column='1' id='35888a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='40' column='1' id='11b42bf5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_tid' type-id='c28acba6' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_overrun' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_sys_private' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_timer_t' type-id='95e97e5e' filepath='include/uapi/asm-generic/posix_types.h' line='92' column='1' id='c28acba6'/>
+      <typedef-decl name='sigval_t' type-id='a094b870' filepath='include/uapi/asm-generic/siginfo.h' line='11' column='1' id='95506cfb'/>
+      <union-decl name='sigval' size-in-bits='64' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='8' column='1' id='a094b870'>
+        <data-member access='public'>
+          <var-decl name='sival_int' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sival_ptr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='10' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='48' column='1' id='90a6a0a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_sigval' type-id='95506cfb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='55' column='1' id='5b8a7161'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_pid' type-id='63eb2bf2' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='_uid' type-id='70734f24' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_status' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_utime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_stime' type-id='880ebc01' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_clock_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='91' column='1' id='880ebc01'/>
+      <typedef-decl name='__kernel_long_t' type-id='bd54fe1a' filepath='include/uapi/asm-generic/posix_types.h' line='15' column='1' id='6a11bd61'/>
+      <class-decl name='__anonymous_struct__16' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='64' column='1' id='b47416ba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_addr' type-id='eaa32e2f' 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='' type-id='c4e140b8' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='77' column='1' id='c4e140b8'>
+        <data-member access='public'>
+          <var-decl name='_addr_lsb' type-id='a2185560' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_addr_bnd' type-id='ea0e6645' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='_addr_pkey' type-id='8a41173c' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='93' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__17' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='84' column='1' id='ea0e6645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_bnd' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_lower' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='_upper' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__18' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='90' column='1' id='8a41173c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_dummy_pkey' type-id='8e100159' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_pkey' type-id='3f1a6b60' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='98' column='1' id='88c21632'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_band' type-id='bd54fe1a' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_fd' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='100' 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/uapi/asm-generic/siginfo.h' line='104' column='1' id='07fe0781'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_call_addr' type-id='eaa32e2f' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_syscall' type-id='95e97e5e' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='_arch' type-id='f0981eeb' visibility='default' filepath='include/uapi/asm-generic/siginfo.h' line='107' 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='ca075c7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rchar' type-id='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' 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='91ce1af9' visibility='default' filepath='include/linux/task_io_accounting.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nodemask_t' type-id='24d23dab' filepath='include/linux/nodemask.h' line='98' column='1' id='6a7d16bb'/>
+      <class-decl name='__anonymous_struct__21' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='6a7d16bb' visibility='default' filepath='include/linux/nodemask.h' line='98' column='1' id='24d23dab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='f066dd3c' visibility='default' filepath='include/linux/nodemask.h' line='98' 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='925167dc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='f22a8abb' 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='fb4018a0' 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='0c3105cd' 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='72f469ec' visibility='default' filepath='include/linux/mutex.h' line='59' 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='0c3105cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tail' type-id='49178f86' visibility='default' filepath='include/linux/osq_lock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tlbflush_unmap_batch' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='76' column='1' id='a3d9f566'/>
+      <union-decl name='__anonymous_union__6' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/sched.h' line='1158' column='1' id='b45135d0'>
+        <data-member access='public'>
+          <var-decl name='rcu_users' type-id='64615833' visibility='default' filepath='include/linux/sched.h' line='1159' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched.h' line='1160' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='page_frag' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm_types_task.h' line='64' column='1' id='06c0432f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/mm_types_task.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/linux/mm_types_task.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gfp_t' type-id='f0981eeb' filepath='include/linux/types.h' line='153' column='1' id='3eb7c31c'/>
+      <class-decl name='thread_struct' size-in-bits='7808' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='127' column='1' id='0c8a83c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_context' type-id='6a577ca5' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uw' type-id='3bb05d08' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='fpsimd_cpu' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='sve_state' type-id='eaa32e2f' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='sve_vl' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='sve_vl_onexec' type-id='f0981eeb' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='fault_address' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='fault_code' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='debug' type-id='2f821a8d' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='147' 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='111' column='1' id='6a577ca5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x19' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='x20' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='x21' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='x22' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='x23' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='x24' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='x25' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='x26' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='x27' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='x28' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sp' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pc' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='4352' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='135' column='1' id='3bb05d08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tp2_value' type-id='7359adad' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fpsimd_state' type-id='3cb82f3a' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='138' 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='82' column='1' id='3cb82f3a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vregs' type-id='98f84070' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='fpsr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='fpcr' type-id='3f1a6b60' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='__reserved' type-id='839e8989' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__uint128_t' type-id='4f340252' filepath='init/version.c' line='27' column='1' id='7e2609cc'/>
+      <class-decl name='debug_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='98' column='1' id='2f821a8d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended_step' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wps_disabled' type-id='95e97e5e' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hbp_break' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='hbp_watch' type-id='18b1b6ec' visibility='default' filepath='arch/arm64/include/asm/processor.h' line='107' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5c155a71' size-in-bits='64' id='59229509'/>
+      <pointer-type-def type-id='82d9d5d4' size-in-bits='64' id='a9f319d2'/>
+      <pointer-type-def type-id='c0badb3b' size-in-bits='64' id='ef4fae1b'/>
+      <pointer-type-def type-id='096280be' size-in-bits='64' id='ee802604'/>
+      <pointer-type-def type-id='718a7cd9' size-in-bits='64' id='39944481'/>
+      <pointer-type-def type-id='e3d8ce29' size-in-bits='64' id='69c138b1'/>
+      <pointer-type-def type-id='978e8e27' size-in-bits='64' id='f886696f'/>
+      <pointer-type-def type-id='feeb4c2f' size-in-bits='64' id='a6892387'/>
+      <pointer-type-def type-id='e54806c5' size-in-bits='64' id='f774a955'/>
+      <pointer-type-def type-id='1b9c6d35' size-in-bits='64' id='917bb1c5'/>
+      <pointer-type-def type-id='f9fef04f' size-in-bits='64' id='389faaf7'/>
+      <qualified-type-def type-id='90bc6bed' const='yes' id='2cd82b3d'/>
+      <pointer-type-def type-id='2cd82b3d' size-in-bits='64' id='af4bd535'/>
+      <qualified-type-def type-id='6739dd09' const='yes' id='bca91994'/>
+      <pointer-type-def type-id='bca91994' size-in-bits='64' id='bc33861a'/>
+      <qualified-type-def type-id='2ba71bf0' const='yes' id='4e267e15'/>
+      <pointer-type-def type-id='4e267e15' size-in-bits='64' id='4598bd2d'/>
+      <qualified-type-def type-id='74191d27' const='yes' id='60263890'/>
+      <pointer-type-def type-id='60263890' size-in-bits='64' id='162b4cce'/>
+      <pointer-type-def type-id='afbeac63' size-in-bits='64' id='85d57723'/>
+      <pointer-type-def type-id='9280516b' size-in-bits='64' id='ca9b3bbf'/>
+      <pointer-type-def type-id='bccdf330' size-in-bits='64' id='16c53416'/>
+      <pointer-type-def type-id='7dc87302' size-in-bits='64' id='08890290'/>
+      <pointer-type-def type-id='62bd013f' size-in-bits='64' id='0bbc9f87'/>
+      <pointer-type-def type-id='03a4a074' size-in-bits='64' id='08cbad52'/>
+      <pointer-type-def type-id='08cbad52' size-in-bits='64' id='50a213e8'/>
+      <pointer-type-def type-id='b6993efc' size-in-bits='64' id='08c8d0fa'/>
+      <pointer-type-def type-id='1851ab9f' size-in-bits='64' id='730f4667'/>
+      <pointer-type-def type-id='8d24b00b' size-in-bits='64' id='75e9503b'/>
+      <pointer-type-def type-id='d0d650b9' size-in-bits='64' id='d23fe9bd'/>
+      <pointer-type-def type-id='95e97e5e' size-in-bits='64' id='7292109c'/>
+      <pointer-type-def type-id='d002899d' size-in-bits='64' id='d042cfad'/>
+      <pointer-type-def type-id='dd74f3ed' size-in-bits='64' id='76ccea8d'/>
+      <pointer-type-def type-id='22ec9634' size-in-bits='64' id='3638c201'/>
+      <pointer-type-def type-id='128d0ac4' size-in-bits='64' id='204a4632'/>
+      <pointer-type-def type-id='72f469ec' size-in-bits='64' id='e84b031a'/>
+      <pointer-type-def type-id='c5ccfee8' size-in-bits='64' id='023b769e'/>
+      <pointer-type-def type-id='b68c3fba' size-in-bits='64' id='d5b25e9c'/>
+      <pointer-type-def type-id='11c8601b' size-in-bits='64' id='223696fb'/>
+      <pointer-type-def type-id='311626f1' size-in-bits='64' id='df4b7819'/>
+      <pointer-type-def type-id='de031042' size-in-bits='64' id='d60f4f10'/>
+      <pointer-type-def type-id='0319fc05' size-in-bits='64' id='26452515'/>
+      <pointer-type-def type-id='bd965180' size-in-bits='64' id='a2bff676'/>
+      <pointer-type-def type-id='99f367f2' size-in-bits='64' id='37a6b980'/>
+      <pointer-type-def type-id='b0f27198' size-in-bits='64' id='e0677422'/>
+      <pointer-type-def type-id='32f8fd62' size-in-bits='64' id='3e644294'/>
+      <pointer-type-def type-id='b82b9d3a' size-in-bits='64' id='dc5ce118'/>
+      <pointer-type-def type-id='f4b65c68' size-in-bits='64' id='e69c040e'/>
+      <pointer-type-def type-id='a25ce1be' size-in-bits='64' id='02f11ed4'/>
+      <pointer-type-def type-id='7263c471' size-in-bits='64' id='2bf16f59'/>
+      <pointer-type-def type-id='9d67acd5' size-in-bits='64' id='b9419dc5'/>
+      <pointer-type-def type-id='d10e968a' size-in-bits='64' id='b94e5398'/>
+      <pointer-type-def type-id='0252e252' size-in-bits='64' id='b816e1d0'/>
+      <pointer-type-def type-id='bed94322' size-in-bits='64' id='15d29710'/>
+      <pointer-type-def type-id='b440e872' size-in-bits='64' id='3ac36db0'/>
+      <pointer-type-def type-id='2a8a6332' size-in-bits='64' id='e6532500'/>
+      <pointer-type-def type-id='67b24a02' size-in-bits='64' id='d5d06540'/>
+      <pointer-type-def type-id='b9b792e2' size-in-bits='64' id='c78f98c0'/>
+      <pointer-type-def type-id='caf652c6' size-in-bits='64' id='e7d2a5fc'/>
+      <pointer-type-def type-id='45e819d6' size-in-bits='64' id='07af3c3c'/>
+      <pointer-type-def type-id='999b38a0' size-in-bits='64' id='c44b3996'/>
+      <pointer-type-def type-id='afb04a62' size-in-bits='64' id='54d4ed50'/>
+      <pointer-type-def type-id='2561fcb2' size-in-bits='64' id='ff2b3d10'/>
+      <pointer-type-def type-id='29843697' size-in-bits='64' id='9eead88f'/>
+      <pointer-type-def type-id='e290c28c' size-in-bits='64' id='2a128f5a'/>
+      <pointer-type-def type-id='317e3dc9' size-in-bits='64' id='32cc1711'/>
+      <pointer-type-def type-id='9a4619bf' size-in-bits='64' id='a91cd5f7'/>
+      <pointer-type-def type-id='2d863538' size-in-bits='64' id='3c32f9de'/>
+      <pointer-type-def type-id='bc3f1924' size-in-bits='64' id='f23e2572'/>
+      <pointer-type-def type-id='68d3e576' size-in-bits='64' id='7a6c9108'/>
+      <pointer-type-def type-id='19c2251e' size-in-bits='64' id='f9409001'/>
+      <pointer-type-def type-id='91ce1af9' size-in-bits='64' id='3df9fd28'/>
+      <pointer-type-def type-id='fdf3707c' size-in-bits='64' id='b1d4934a'/>
+      <pointer-type-def type-id='98f6607e' size-in-bits='64' id='9d2cef34'/>
+      <pointer-type-def type-id='8c178e22' size-in-bits='64' id='c0ced320'/>
+      <pointer-type-def type-id='61062930' size-in-bits='64' id='6fa26802'/>
+      <pointer-type-def type-id='44f52e9d' size-in-bits='64' id='9d5923ed'/>
+      <pointer-type-def type-id='62c85860' size-in-bits='64' id='2ae08426'/>
+      <pointer-type-def type-id='5f2f8da4' size-in-bits='64' id='d295dab2'/>
+      <pointer-type-def type-id='34135eb2' size-in-bits='64' id='eb839374'/>
+      <pointer-type-def type-id='107219ed' size-in-bits='64' id='277e3361'/>
+      <qualified-type-def type-id='bd54fe1a' volatile='yes' id='5efddaac'/>
+      <pointer-type-def type-id='69970be2' size-in-bits='64' id='b16791f0'/>
+      <var-decl name='init_uts_ns' type-id='44f52e9d' mangled-name='init_uts_ns' visibility='default' filepath='init/version.c' line='27' column='1' elf-symbol-id='init_uts_ns'/>
+      <function-type size-in-bits='64' id='9280516b'>
+        <parameter type-id='08c8d0fa'/>
+        <return type-id='7313b0ab'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d0d650b9'>
+        <parameter type-id='dc5ce118'/>
+        <parameter type-id='37a6b980'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b68c3fba'>
+        <parameter type-id='07af3c3c'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b0f27198'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='37a6b980'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32f8fd62'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='37a6b980'/>
+      </function-type>
+      <function-type size-in-bits='64' id='68d3e576'>
+        <return type-id='fbc017ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='61062930'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='c0ced320'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34135eb2'>
+        <parameter type-id='69c138b1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='107219ed'>
+        <parameter type-id='37a6b980'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/async.c' language='LANG_C89'>
+      <typedef-decl name='async_cookie_t' type-id='91ce1af9' filepath='include/linux/async.h' line='16' column='1' id='a7465fe4'/>
+      <typedef-decl name='async_func_t' type-id='56ccc407' filepath='include/linux/async.h' line='17' column='1' id='5c19cb0c'/>
+      <pointer-type-def type-id='8800ed53' size-in-bits='64' id='56ccc407'/>
+      <function-decl name='async_schedule_node' mangled-name='async_schedule_node' filepath='kernel/async.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='async_schedule_node'>
+        <parameter type-id='5c19cb0c' name='func' filepath='kernel/async.c' line='231' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/async.c' line='231' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='kernel/async.c' line='231' column='1'/>
+        <return type-id='a7465fe4'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8800ed53'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='a7465fe4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/bpf/core.c' language='LANG_C89'>
+      <var-decl name='bpf_stats_enabled_key' type-id='237c0d27' mangled-name='bpf_stats_enabled_key' visibility='default' filepath='kernel/bpf/core.c' line='2161' column='1' elf-symbol-id='bpf_stats_enabled_key'/>
+      <var-decl name='__tracepoint_xdp_exception' type-id='4ca0c298' mangled-name='__tracepoint_xdp_exception' visibility='default' filepath='include/trace/events/xdp.h' line='28' column='1' elf-symbol-id='__tracepoint_xdp_exception'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/bpf/syscall.c' language='LANG_C89'>
+      <function-decl name='bpf_prog_sub' mangled-name='bpf_prog_sub' filepath='kernel/bpf/syscall.c' line='1472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_sub'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/bpf/syscall.c' line='1472' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='kernel/bpf/syscall.c' line='1472' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_prog_put' mangled-name='bpf_prog_put' filepath='kernel/bpf/syscall.c' line='1364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_put'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/bpf/syscall.c' line='1364' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_prog_add' mangled-name='bpf_prog_add' filepath='kernel/bpf/syscall.c' line='1462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_add'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/bpf/syscall.c' line='1462' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='kernel/bpf/syscall.c' line='1462' column='1'/>
+        <return type-id='bdcee7ae'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/capability.c' language='LANG_C89'>
+      <function-decl name='ns_capable' mangled-name='ns_capable' filepath='kernel/capability.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_capable'>
+        <parameter type-id='c0ced320' name='ns' filepath='kernel/capability.c' line='394' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='kernel/capability.c' line='394' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='capable' mangled-name='capable' filepath='kernel/capability.c' line='447' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='capable'>
+        <parameter type-id='95e97e5e' name='cap' filepath='kernel/capability.c' line='447' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/cfi.c' language='LANG_C89'>
+      <function-decl name='__cfi_slowpath' mangled-name='__cfi_slowpath' filepath='kernel/cfi.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfi_slowpath'>
+        <parameter type-id='9c313c2d' name='id' filepath='kernel/cfi.c' line='296' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='kernel/cfi.c' line='296' column='1'/>
+        <parameter type-id='eaa32e2f' name='diag' filepath='kernel/cfi.c' line='296' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ubsan_handle_cfi_check_fail_abort' mangled-name='__ubsan_handle_cfi_check_fail_abort' filepath='kernel/cfi.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ubsan_handle_cfi_check_fail_abort'>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/cfi.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='kernel/cfi.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='vtable' filepath='kernel/cfi.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/compat.c' language='LANG_C89'>
+      <function-decl name='compat_alloc_user_space' mangled-name='compat_alloc_user_space' filepath='kernel/compat.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='compat_alloc_user_space'>
+        <parameter type-id='7359adad' name='len' filepath='kernel/compat.c' line='365' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/cpu.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9cbd1c16' size-in-bits='64' id='afe549fd'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='9cbd1c16' size-in-bits='4160' id='f959706c'>
+        <subrange length='65' type-id='7ff19f0f' id='b50e2e4a'/>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <enum-decl name='cpuhp_state' filepath='include/linux/cpuhotplug.h' line='25' column='1' id='245a0e38'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_PADATA_DEAD' value='35'/>
+        <enumerator name='CPUHP_WORKQUEUE_PREP' value='36'/>
+        <enumerator name='CPUHP_POWER_NUMA_PREPARE' value='37'/>
+        <enumerator name='CPUHP_HRTIMERS_PREPARE' value='38'/>
+        <enumerator name='CPUHP_PROFILE_PREPARE' value='39'/>
+        <enumerator name='CPUHP_X2APIC_PREPARE' value='40'/>
+        <enumerator name='CPUHP_SMPCFD_PREPARE' value='41'/>
+        <enumerator name='CPUHP_RELAY_PREPARE' value='42'/>
+        <enumerator name='CPUHP_SLAB_PREPARE' value='43'/>
+        <enumerator name='CPUHP_MD_RAID5_PREPARE' value='44'/>
+        <enumerator name='CPUHP_RCUTREE_PREP' value='45'/>
+        <enumerator name='CPUHP_CPUIDLE_COUPLED_PREPARE' value='46'/>
+        <enumerator name='CPUHP_POWERPC_PMAC_PREPARE' value='47'/>
+        <enumerator name='CPUHP_POWERPC_MMU_CTX_PREPARE' value='48'/>
+        <enumerator name='CPUHP_XEN_PREPARE' value='49'/>
+        <enumerator name='CPUHP_XEN_EVTCHN_PREPARE' value='50'/>
+        <enumerator name='CPUHP_ARM_SHMOBILE_SCU_PREPARE' value='51'/>
+        <enumerator name='CPUHP_SH_SH3X_PREPARE' value='52'/>
+        <enumerator name='CPUHP_NET_FLOW_PREPARE' value='53'/>
+        <enumerator name='CPUHP_TOPOLOGY_PREPARE' value='54'/>
+        <enumerator name='CPUHP_NET_IUCV_PREPARE' value='55'/>
+        <enumerator name='CPUHP_ARM_BL_PREPARE' value='56'/>
+        <enumerator name='CPUHP_TRACE_RB_PREPARE' value='57'/>
+        <enumerator name='CPUHP_MM_ZS_PREPARE' value='58'/>
+        <enumerator name='CPUHP_MM_ZSWP_MEM_PREPARE' value='59'/>
+        <enumerator name='CPUHP_MM_ZSWP_POOL_PREPARE' value='60'/>
+        <enumerator name='CPUHP_KVM_PPC_BOOK3S_PREPARE' value='61'/>
+        <enumerator name='CPUHP_ZCOMP_PREPARE' value='62'/>
+        <enumerator name='CPUHP_TIMERS_PREPARE' value='63'/>
+        <enumerator name='CPUHP_MIPS_SOC_PREPARE' value='64'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN' value='65'/>
+        <enumerator name='CPUHP_BP_PREPARE_DYN_END' value='85'/>
+        <enumerator name='CPUHP_BRINGUP_CPU' value='86'/>
+        <enumerator name='CPUHP_AP_IDLE_DEAD' value='87'/>
+        <enumerator name='CPUHP_AP_OFFLINE' value='88'/>
+        <enumerator name='CPUHP_AP_SCHED_STARTING' value='89'/>
+        <enumerator name='CPUHP_AP_RCUTREE_DYING' value='90'/>
+        <enumerator name='CPUHP_AP_IRQ_GIC_STARTING' value='91'/>
+        <enumerator name='CPUHP_AP_IRQ_HIP04_STARTING' value='92'/>
+        <enumerator name='CPUHP_AP_IRQ_ARMADA_XP_STARTING' value='93'/>
+        <enumerator name='CPUHP_AP_IRQ_BCM2836_STARTING' value='94'/>
+        <enumerator name='CPUHP_AP_IRQ_MIPS_GIC_STARTING' value='95'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_COHERENCY' value='96'/>
+        <enumerator name='CPUHP_AP_MICROCODE_LOADER' value='97'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING' value='98'/>
+        <enumerator name='CPUHP_AP_PERF_X86_STARTING' value='99'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_IBS_STARTING' value='100'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_STARTING' value='101'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_STARTING' value='102'/>
+        <enumerator name='CPUHP_AP_PERF_XTENSA_STARTING' value='103'/>
+        <enumerator name='CPUHP_AP_MIPS_OP_LOONGSON3_STARTING' value='104'/>
+        <enumerator name='CPUHP_AP_ARM_SDEI_STARTING' value='105'/>
+        <enumerator name='CPUHP_AP_ARM_VFP_STARTING' value='106'/>
+        <enumerator name='CPUHP_AP_ARM64_DEBUG_MONITORS_STARTING' value='107'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HW_BREAKPOINT_STARTING' value='108'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_ACPI_STARTING' value='109'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_STARTING' value='110'/>
+        <enumerator name='CPUHP_AP_ARM_L2X0_STARTING' value='111'/>
+        <enumerator name='CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING' value='112'/>
+        <enumerator name='CPUHP_AP_ARM_ARCH_TIMER_STARTING' value='113'/>
+        <enumerator name='CPUHP_AP_ARM_GLOBAL_TIMER_STARTING' value='114'/>
+        <enumerator name='CPUHP_AP_JCORE_TIMER_STARTING' value='115'/>
+        <enumerator name='CPUHP_AP_ARM_TWD_STARTING' value='116'/>
+        <enumerator name='CPUHP_AP_QCOM_TIMER_STARTING' value='117'/>
+        <enumerator name='CPUHP_AP_TEGRA_TIMER_STARTING' value='118'/>
+        <enumerator name='CPUHP_AP_ARMADA_TIMER_STARTING' value='119'/>
+        <enumerator name='CPUHP_AP_MARCO_TIMER_STARTING' value='120'/>
+        <enumerator name='CPUHP_AP_MIPS_GIC_TIMER_STARTING' value='121'/>
+        <enumerator name='CPUHP_AP_ARC_TIMER_STARTING' value='122'/>
+        <enumerator name='CPUHP_AP_RISCV_TIMER_STARTING' value='123'/>
+        <enumerator name='CPUHP_AP_CSKY_TIMER_STARTING' value='124'/>
+        <enumerator name='CPUHP_AP_KVM_STARTING' value='125'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING' value='126'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_VGIC_STARTING' value='127'/>
+        <enumerator name='CPUHP_AP_KVM_ARM_TIMER_STARTING' value='128'/>
+        <enumerator name='CPUHP_AP_DUMMY_TIMER_STARTING' value='129'/>
+        <enumerator name='CPUHP_AP_ARM_XEN_STARTING' value='130'/>
+        <enumerator name='CPUHP_AP_ARM_CORESIGHT_STARTING' value='131'/>
+        <enumerator name='CPUHP_AP_ARM64_ISNDEP_STARTING' value='132'/>
+        <enumerator name='CPUHP_AP_SMPCFD_DYING' value='133'/>
+        <enumerator name='CPUHP_AP_X86_TBOOT_DYING' value='134'/>
+        <enumerator name='CPUHP_AP_ARM_CACHE_B15_RAC_DYING' value='135'/>
+        <enumerator name='CPUHP_AP_ONLINE' value='136'/>
+        <enumerator name='CPUHP_TEARDOWN_CPU' value='137'/>
+        <enumerator name='CPUHP_AP_ONLINE_IDLE' value='138'/>
+        <enumerator name='CPUHP_AP_SMPBOOT_THREADS' value='139'/>
+        <enumerator name='CPUHP_AP_X86_VDSO_VMA_ONLINE' value='140'/>
+        <enumerator name='CPUHP_AP_IRQ_AFFINITY_ONLINE' value='141'/>
+        <enumerator name='CPUHP_AP_ARM_MVEBU_SYNC_CLOCKS' value='142'/>
+        <enumerator name='CPUHP_AP_X86_INTEL_EPB_ONLINE' value='143'/>
+        <enumerator name='CPUHP_AP_PERF_ONLINE' value='144'/>
+        <enumerator name='CPUHP_AP_PERF_X86_ONLINE' value='145'/>
+        <enumerator name='CPUHP_AP_PERF_X86_UNCORE_ONLINE' value='146'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_UNCORE_ONLINE' value='147'/>
+        <enumerator name='CPUHP_AP_PERF_X86_AMD_POWER_ONLINE' value='148'/>
+        <enumerator name='CPUHP_AP_PERF_X86_RAPL_ONLINE' value='149'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CQM_ONLINE' value='150'/>
+        <enumerator name='CPUHP_AP_PERF_X86_CSTATE_ONLINE' value='151'/>
+        <enumerator name='CPUHP_AP_PERF_S390_CF_ONLINE' value='152'/>
+        <enumerator name='CPUHP_AP_PERF_S390_SF_ONLINE' value='153'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCI_ONLINE' value='154'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CCN_ONLINE' value='155'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_DDRC_ONLINE' value='156'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_HHA_ONLINE' value='157'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_HISI_L3_ONLINE' value='158'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_L2X0_ONLINE' value='159'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L2_ONLINE' value='160'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_QCOM_L3_ONLINE' value='161'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_APM_XGENE_ONLINE' value='162'/>
+        <enumerator name='CPUHP_AP_PERF_ARM_CAVIUM_TX2_UNCORE_ONLINE' value='163'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_NEST_IMC_ONLINE' value='164'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_CORE_IMC_ONLINE' value='165'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_THREAD_IMC_ONLINE' value='166'/>
+        <enumerator name='CPUHP_AP_PERF_POWERPC_TRACE_IMC_ONLINE' value='167'/>
+        <enumerator name='CPUHP_AP_WATCHDOG_ONLINE' value='168'/>
+        <enumerator name='CPUHP_AP_WORKQUEUE_ONLINE' value='169'/>
+        <enumerator name='CPUHP_AP_RCUTREE_ONLINE' value='170'/>
+        <enumerator name='CPUHP_AP_BASE_CACHEINFO_ONLINE' value='171'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN' value='172'/>
+        <enumerator name='CPUHP_AP_ONLINE_DYN_END' value='202'/>
+        <enumerator name='CPUHP_AP_X86_HPET_ONLINE' value='203'/>
+        <enumerator name='CPUHP_AP_X86_KVM_CLK_ONLINE' value='204'/>
+        <enumerator name='CPUHP_AP_ACTIVE' value='205'/>
+        <enumerator name='CPUHP_ANDROID_RESERVED_1' value='206'/>
+        <enumerator name='CPUHP_ANDROID_RESERVED_2' value='207'/>
+        <enumerator name='CPUHP_ANDROID_RESERVED_3' value='208'/>
+        <enumerator name='CPUHP_ANDROID_RESERVED_4' value='209'/>
+        <enumerator name='CPUHP_ONLINE' value='210'/>
+      </enum-decl>
+      <pointer-type-def type-id='db7d07ef' size-in-bits='64' id='f02a5e83'/>
+      <var-decl name='cpu_bit_bitmap' type-id='f959706c' mangled-name='cpu_bit_bitmap' visibility='default' filepath='kernel/cpu.c' line='2359' column='1' elf-symbol-id='cpu_bit_bitmap'/>
+      <var-decl name='cpu_all_bits' type-id='afe549fd' mangled-name='cpu_all_bits' visibility='default' filepath='kernel/cpu.c' line='2370' column='1' elf-symbol-id='cpu_all_bits'/>
+      <var-decl name='cpuhp_tasks_frozen' type-id='b50a4934' mangled-name='cpuhp_tasks_frozen' visibility='default' filepath='kernel/cpu.c' line='265' column='1' elf-symbol-id='cpuhp_tasks_frozen'/>
+      <var-decl name='__cpu_possible_mask' type-id='1354385d' mangled-name='__cpu_possible_mask' visibility='default' filepath='kernel/cpu.c' line='2377' column='1' elf-symbol-id='__cpu_possible_mask'/>
+      <var-decl name='__cpu_online_mask' type-id='1354385d' mangled-name='__cpu_online_mask' visibility='default' filepath='kernel/cpu.c' line='2381' column='1' elf-symbol-id='__cpu_online_mask'/>
+      <var-decl name='__cpu_present_mask' type-id='1354385d' mangled-name='__cpu_present_mask' visibility='default' filepath='kernel/cpu.c' line='2384' column='1' elf-symbol-id='__cpu_present_mask'/>
+      <var-decl name='__cpu_active_mask' type-id='1354385d' mangled-name='__cpu_active_mask' visibility='default' filepath='kernel/cpu.c' line='2387' column='1' elf-symbol-id='__cpu_active_mask'/>
+      <var-decl name='__num_online_cpus' type-id='49178f86' mangled-name='__num_online_cpus' visibility='default' filepath='kernel/cpu.c' line='2390' column='1' elf-symbol-id='__num_online_cpus'/>
+      <function-decl name='__cpuhp_setup_state' mangled-name='__cpuhp_setup_state' filepath='kernel/cpu.c' line='1883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_setup_state'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1883' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1884' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1884' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1885' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1886' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1887' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpus_read_lock' mangled-name='cpus_read_lock' filepath='kernel/cpu.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpus_read_unlock' mangled-name='cpus_read_unlock' filepath='kernel/cpu.c' line='304' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpus_read_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__cpuhp_remove_state' mangled-name='__cpuhp_remove_state' filepath='kernel/cpu.c' line='1985' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_remove_state'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1985' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1985' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpu_up' mangled-name='cpu_up' filepath='kernel/cpu.c' line='1275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_up'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/cpu.c' line='1275' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpu_down' mangled-name='cpu_down' filepath='kernel/cpu.c' line='1122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_down'>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/cpu.c' line='1122' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_remove_instance' mangled-name='__cpuhp_state_remove_instance' filepath='kernel/cpu.c' line='1899' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_remove_instance'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1899' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1900' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1900' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_state_add_instance' mangled-name='__cpuhp_state_add_instance' filepath='kernel/cpu.c' line='1795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_state_add_instance'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1795' column='1'/>
+        <parameter type-id='08cbad52' name='node' filepath='kernel/cpu.c' line='1795' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1796' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__cpuhp_setup_state_cpuslocked' mangled-name='__cpuhp_setup_state_cpuslocked' filepath='kernel/cpu.c' line='1824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cpuhp_setup_state_cpuslocked'>
+        <parameter type-id='245a0e38' name='state' filepath='kernel/cpu.c' line='1824' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/cpu.c' line='1825' column='1'/>
+        <parameter type-id='b50a4934' name='invoke' filepath='kernel/cpu.c' line='1825' column='1'/>
+        <parameter type-id='f02a5e83' name='startup' filepath='kernel/cpu.c' line='1826' column='1'/>
+        <parameter type-id='f02a5e83' name='teardown' filepath='kernel/cpu.c' line='1827' column='1'/>
+        <parameter type-id='b50a4934' name='multi_instance' filepath='kernel/cpu.c' line='1828' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='db7d07ef'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/cpu_pm.c' language='LANG_C89'>
+      <function-decl name='cpu_pm_unregister_notifier' mangled-name='cpu_pm_unregister_notifier' filepath='kernel/cpu_pm.c' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_pm_unregister_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/cpu_pm.c' line='60' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpu_pm_register_notifier' mangled-name='cpu_pm_register_notifier' filepath='kernel/cpu_pm.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpu_pm_register_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/cpu_pm.c' line='45' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/cred.c' language='LANG_C89'>
+      <function-decl name='prepare_kernel_cred' mangled-name='prepare_kernel_cred' filepath='kernel/cred.c' line='681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_kernel_cred'>
+        <parameter type-id='f23e2572' name='daemon' filepath='kernel/cred.c' line='681' column='1'/>
+        <return type-id='10cfb911'/>
+      </function-decl>
+      <function-decl name='__put_cred' mangled-name='__put_cred' filepath='kernel/cred.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_cred'>
+        <parameter type-id='10cfb911' name='cred' filepath='kernel/cred.c' line='132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/dma/contiguous.c' language='LANG_C89'>
+      <var-decl name='dma_contiguous_default_area' type-id='6f67b38a' mangled-name='dma_contiguous_default_area' visibility='default' filepath='kernel/dma/contiguous.c' line='33' column='1' elf-symbol-id='dma_contiguous_default_area'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/dma/direct.c' language='LANG_C89'>
+      <function-decl name='dma_direct_unmap_sg' mangled-name='dma_direct_unmap_sg' filepath='kernel/dma/direct.c' line='316' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_unmap_sg'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='316' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='316' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='317' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='317' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='317' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_unmap_page' mangled-name='dma_direct_unmap_page' filepath='kernel/dma/direct.c' line='303' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_unmap_page'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='303' column='1'/>
+        <parameter type-id='cf29c9b3' name='addr' filepath='kernel/dma/direct.c' line='303' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='304' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='304' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='304' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_single_for_device' mangled-name='dma_direct_sync_single_for_device' filepath='kernel/dma/direct.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_single_for_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='229' column='1'/>
+        <parameter type-id='cf29c9b3' name='addr' filepath='kernel/dma/direct.c' line='230' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='230' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='230' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_single_for_cpu' mangled-name='dma_direct_sync_single_for_cpu' filepath='kernel/dma/direct.c' line='266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_single_for_cpu'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='266' column='1'/>
+        <parameter type-id='cf29c9b3' name='addr' filepath='kernel/dma/direct.c' line='267' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='267' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='267' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_sg_for_device' mangled-name='dma_direct_sync_sg_for_device' filepath='kernel/dma/direct.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_sg_for_device'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='242' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_sync_sg_for_cpu' mangled-name='dma_direct_sync_sg_for_cpu' filepath='kernel/dma/direct.c' line='281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_sync_sg_for_cpu'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='281' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='282' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_sg' mangled-name='dma_direct_map_sg' filepath='kernel/dma/direct.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_sg'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='355' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='kernel/dma/direct.c' line='355' column='1'/>
+        <parameter type-id='95e97e5e' name='nents' filepath='kernel/dma/direct.c' line='355' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='356' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='356' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_page' mangled-name='dma_direct_map_page' filepath='kernel/dma/direct.c' line='336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_page'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='336' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='kernel/dma/direct.c' line='336' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='kernel/dma/direct.c' line='337' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='337' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='337' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='338' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+      <function-decl name='dma_direct_map_resource' mangled-name='dma_direct_map_resource' filepath='kernel/dma/direct.c' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_direct_map_resource'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/direct.c' line='377' column='1'/>
+        <parameter type-id='2522883d' name='paddr' filepath='kernel/dma/direct.c' line='377' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <parameter type-id='eea6b025' name='dir' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/direct.c' line='378' column='1'/>
+        <return type-id='cf29c9b3'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/dma/mapping.c' language='LANG_C89'>
+      <function-decl name='dmam_free_coherent' mangled-name='dmam_free_coherent' filepath='kernel/dma/mapping.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_free_coherent'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='kernel/dma/mapping.c' line='57' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_handle' filepath='kernel/dma/mapping.c' line='58' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_free_attrs' mangled-name='dma_free_attrs' filepath='kernel/dma/mapping.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_free_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='325' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='325' column='1'/>
+        <parameter type-id='eaa32e2f' name='cpu_addr' filepath='kernel/dma/mapping.c' line='325' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_handle' filepath='kernel/dma/mapping.c' line='326' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='326' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dmam_alloc_attrs' mangled-name='dmam_alloc_attrs' filepath='kernel/dma/mapping.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_alloc_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='e835b5d8' name='dma_handle' filepath='kernel/dma/mapping.c' line='81' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='kernel/dma/mapping.c' line='82' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='82' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='dma_set_mask' mangled-name='dma_set_mask' filepath='kernel/dma/mapping.c' line='370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_set_mask'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='370' column='1'/>
+        <parameter type-id='91ce1af9' name='mask' filepath='kernel/dma/mapping.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_set_coherent_mask' mangled-name='dma_set_coherent_mask' filepath='kernel/dma/mapping.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_set_coherent_mask'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='388' column='1'/>
+        <parameter type-id='91ce1af9' name='mask' filepath='kernel/dma/mapping.c' line='388' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_mmap_attrs' mangled-name='dma_mmap_attrs' filepath='kernel/dma/mapping.c' line='263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_mmap_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='263' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='kernel/dma/mapping.c' line='263' column='1'/>
+        <parameter type-id='eaa32e2f' name='cpu_addr' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_addr' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='264' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='265' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_max_mapping_size' mangled-name='dma_max_mapping_size' filepath='kernel/dma/mapping.c' line='419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_max_mapping_size'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='419' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='dma_get_sgtable_attrs' mangled-name='dma_get_sgtable_attrs' filepath='kernel/dma/mapping.c' line='151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_sgtable_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='151' column='1'/>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='kernel/dma/mapping.c' line='151' column='1'/>
+        <parameter type-id='eaa32e2f' name='cpu_addr' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma_addr' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='152' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='153' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dma_get_merge_boundary' mangled-name='dma_get_merge_boundary' filepath='kernel/dma/mapping.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_get_merge_boundary'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='433' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='dma_alloc_attrs' mangled-name='dma_alloc_attrs' filepath='kernel/dma/mapping.c' line='299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_alloc_attrs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/dma/mapping.c' line='299' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/dma/mapping.c' line='299' column='1'/>
+        <parameter type-id='e835b5d8' name='dma_handle' filepath='kernel/dma/mapping.c' line='299' column='1'/>
+        <parameter type-id='3eb7c31c' name='flag' filepath='kernel/dma/mapping.c' line='300' column='1'/>
+        <parameter type-id='7359adad' name='attrs' filepath='kernel/dma/mapping.c' line='300' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='140' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='swiotlb_max_segment'>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/events/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='7584' id='e1f95b49'>
+        <subrange length='948' type-id='7ff19f0f' id='9d8fc450'/>
+      </array-type-def>
+      <class-decl name='perf_event_mmap_page' size-in-bits='8704' is-struct='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='474' column='1' id='a752caf1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='compat_version' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lock' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='index' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='49659421' visibility='default' filepath='include/uapi/linux/perf_event.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_enabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_running' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='' type-id='9aa86c15' visibility='default' filepath='include/uapi/linux/perf_event.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pmc_width' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='time_shift' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='time_mult' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='time_zero' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='__reserved' type-id='e1f95b49' visibility='default' filepath='include/uapi/linux/perf_event.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='data_head' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8256'>
+          <var-decl name='data_tail' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8320'>
+          <var-decl name='data_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='data_size' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='aux_head' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8512'>
+          <var-decl name='aux_tail' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='aux_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='aux_size' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='629' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='518' column='1' id='9aa86c15'>
+        <data-member access='public'>
+          <var-decl name='capabilities' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7179013d' visibility='default' filepath='include/uapi/linux/perf_event.h' line='520' 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='520' column='1' id='7179013d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_bit0' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='cap_bit0_is_deprecated' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='cap_user_rdpmc' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='cap_user_time' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='cap_user_time_zero' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='cap_____res' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e57536d9' size-in-bits='64' id='20862e61'/>
+      <pointer-type-def type-id='a752caf1' size-in-bits='64' id='4b860c99'/>
+      <function-decl name='perf_event_release_kernel' mangled-name='perf_event_release_kernel' filepath='kernel/events/core.c' line='4688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_release_kernel'>
+        <parameter type-id='2bf16f59' name='event' filepath='kernel/events/core.c' line='4688' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='perf_event_create_kernel_counter' mangled-name='perf_event_create_kernel_counter' filepath='kernel/events/core.c' line='11393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_create_kernel_counter'>
+        <parameter type-id='20862e61' name='attr' filepath='kernel/events/core.c' line='11393' column='1'/>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/events/core.c' line='11393' column='1'/>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/events/core.c' line='11394' column='1'/>
+        <parameter type-id='20a2e4e6' name='overflow_handler' filepath='kernel/events/core.c' line='11395' column='1'/>
+        <parameter type-id='eaa32e2f' name='context' filepath='kernel/events/core.c' line='11396' column='1'/>
+        <return type-id='2bf16f59'/>
+      </function-decl>
+      <function-decl name='perf_event_disable' mangled-name='perf_event_disable' filepath='kernel/events/core.c' line='2281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_disable'>
+        <parameter type-id='2bf16f59' name='event' filepath='kernel/events/core.c' line='2281' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='perf_event_enable' mangled-name='perf_event_enable' filepath='kernel/events/core.c' line='2826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_enable'>
+        <parameter type-id='2bf16f59' name='event' filepath='kernel/events/core.c' line='2826' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='perf_event_read_value' mangled-name='perf_event_read_value' filepath='kernel/events/core.c' line='4838' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_event_read_value'>
+        <parameter type-id='2bf16f59' name='event' filepath='kernel/events/core.c' line='4838' column='1'/>
+        <parameter type-id='3df9fd28' name='enabled' filepath='kernel/events/core.c' line='4838' column='1'/>
+        <parameter type-id='3df9fd28' name='running' filepath='kernel/events/core.c' line='4838' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='perf_trace_run_bpf_submit' mangled-name='perf_trace_run_bpf_submit' filepath='kernel/events/core.c' line='8733' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_run_bpf_submit'>
+        <parameter type-id='eaa32e2f' name='raw_data' filepath='kernel/events/core.c' line='8733' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/events/core.c' line='8733' column='1'/>
+        <parameter type-id='95e97e5e' name='rctx' filepath='kernel/events/core.c' line='8733' column='1'/>
+        <parameter type-id='23d6768c' name='call' filepath='kernel/events/core.c' line='8734' column='1'/>
+        <parameter type-id='91ce1af9' name='count' filepath='kernel/events/core.c' line='8734' column='1'/>
+        <parameter type-id='4616a179' name='regs' filepath='kernel/events/core.c' line='8735' column='1'/>
+        <parameter type-id='030d0b18' name='head' filepath='kernel/events/core.c' line='8735' column='1'/>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/events/core.c' line='8736' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='0d029111' size-in-bits='64' id='4616a179'/>
+      <class-decl name='pt_regs' size-in-bits='2560' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='160' column='1' id='0d029111'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dcc4b447' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='orig_x0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='syscallno' type-id='a7832498' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='unused2' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='orig_addr_limit' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='pmr_save' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='stackframe' type-id='24a375b2' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='2176' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1' id='dcc4b447'>
+        <data-member access='public'>
+          <var-decl name='user_regs' type-id='cedec667' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='de6df8b1' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' 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='75' column='1' id='cedec667'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='cb6b7280' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='2176' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1' id='de6df8b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='2f7ab612' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='1984' id='cb6b7280'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1984' id='2f7ab612'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/exit.c' language='LANG_C89'>
+      <function-decl name='do_exit' mangled-name='do_exit' filepath='kernel/exit.c' line='715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_exit'>
+        <parameter type-id='bd54fe1a' name='code' filepath='kernel/exit.c' line='715' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='complete_and_exit' mangled-name='complete_and_exit' filepath='kernel/exit.c' line='868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='complete_and_exit'>
+        <parameter type-id='389faaf7' name='comp' filepath='kernel/exit.c' line='868' column='1'/>
+        <parameter type-id='bd54fe1a' name='code' filepath='kernel/exit.c' line='868' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/fork.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d3130597' size-in-bits='1984' id='cb6b7280'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='2048' id='d1617432'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='1984' id='2f7ab612'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <class-decl name='linux_binprm' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/binfmts.h' line='17' column='1' id='2376c3ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vma' type-id='2ae08426' visibility='default' filepath='include/linux/binfmts.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vma_pages' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mm' type-id='df4b7819' visibility='default' filepath='include/linux/binfmts.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='p' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='argmin' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='called_set_creds' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='cap_elevated' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='secureexec' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='called_exec_mmap' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='recursion_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cred' type-id='10cfb911' visibility='default' filepath='include/linux/binfmts.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='unsafe' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='per_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='argc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='envc' type-id='95e97e5e' visibility='default' filepath='include/linux/binfmts.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='interp' type-id='80f4b756' visibility='default' filepath='include/linux/binfmts.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='interp_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='interp_data' type-id='f0981eeb' visibility='default' filepath='include/linux/binfmts.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='loader' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='exec' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rlim_stack' type-id='60dcbf6c' visibility='default' filepath='include/linux/binfmts.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='buf' type-id='d1617432' visibility='default' filepath='include/linux/binfmts.h' line='73' 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='88' column='1' id='3288a0f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='siginfo' type-id='ffa0418a' visibility='default' filepath='include/linux/binfmts.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='regs' type-id='4616a179' visibility='default' filepath='include/linux/binfmts.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/binfmts.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='limit' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mm_flags' type-id='7359adad' visibility='default' filepath='include/linux/binfmts.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='written' type-id='69bf7bee' visibility='default' filepath='include/linux/binfmts.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pos' type-id='69bf7bee' visibility='default' filepath='include/linux/binfmts.h' line='95' 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='160' column='1' id='0d029111'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dcc4b447' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='orig_x0' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='syscallno' type-id='a7832498' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='unused2' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='orig_addr_limit' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='pmr_save' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='stackframe' type-id='24a375b2' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='2176' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='161' column='1' id='dcc4b447'>
+        <data-member access='public'>
+          <var-decl name='user_regs' type-id='cedec667' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='de6df8b1' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' 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='75' column='1' id='cedec667'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='cb6b7280' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='d3130597' visibility='default' filepath='arch/arm64/include/uapi/asm/ptrace.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='2176' is-struct='yes' is-anonymous='yes' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='163' column='1' id='de6df8b1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='regs' type-id='2f7ab612' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sp' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pc' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='pstate' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/ptrace.h' line='167' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='22ec9634' const='yes' id='d98856a4'/>
+      <pointer-type-def type-id='d98856a4' size-in-bits='64' id='ffa0418a'/>
+      <pointer-type-def type-id='3288a0f7' size-in-bits='64' id='581abdef'/>
+      <pointer-type-def type-id='6739dd09' size-in-bits='64' id='10cfb911'/>
+      <pointer-type-def type-id='28cb132f' size-in-bits='64' id='be2c124b'/>
+      <pointer-type-def type-id='d07af849' size-in-bits='64' id='4da4101d'/>
+      <pointer-type-def type-id='17f2d2f2' size-in-bits='64' id='c5c535b4'/>
+      <pointer-type-def type-id='2376c3ec' size-in-bits='64' id='8912440a'/>
+      <pointer-type-def type-id='0d029111' size-in-bits='64' id='4616a179'/>
+      <function-decl name='__mmdrop' mangled-name='__mmdrop' filepath='kernel/fork.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mmdrop'>
+        <parameter type-id='df4b7819' name='mm' filepath='kernel/fork.c' line='689' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__put_task_struct' mangled-name='__put_task_struct' filepath='kernel/fork.c' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_task_struct'>
+        <parameter type-id='f23e2572' name='tsk' filepath='kernel/fork.c' line='738' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mmput' mangled-name='mmput' filepath='kernel/fork.c' line='1106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mmput'>
+        <parameter type-id='df4b7819' name='mm' filepath='kernel/fork.c' line='1106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_task_mm' mangled-name='get_task_mm' filepath='kernel/fork.c' line='1213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_task_mm'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/fork.c' line='1213' column='1'/>
+        <return type-id='df4b7819'/>
+      </function-decl>
+      <function-decl name='get_task_exe_file' mangled-name='get_task_exe_file' filepath='kernel/fork.c' line='1188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_task_exe_file'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/fork.c' line='1188' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='28cb132f'>
+        <parameter type-id='581abdef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d07af849'>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f2d2f2'>
+        <parameter type-id='8912440a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/freezer.c' language='LANG_C89'>
+      <var-decl name='system_freezing_cnt' type-id='49178f86' mangled-name='system_freezing_cnt' visibility='default' filepath='kernel/freezer.c' line='16' column='1' elf-symbol-id='system_freezing_cnt'/>
+      <function-decl name='__refrigerator' mangled-name='__refrigerator' filepath='kernel/freezer.c' line='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__refrigerator'>
+        <parameter type-id='b50a4934' name='check_kthr_stop' filepath='kernel/freezer.c' line='56' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='set_freezable' mangled-name='set_freezable' filepath='kernel/freezer.c' line='161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_freezable'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='freezing_slow_path' mangled-name='freezing_slow_path' filepath='kernel/freezer.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freezing_slow_path'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/freezer.c' line='37' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/groups.c' language='LANG_C89'>
+      <function-decl name='in_group_p' mangled-name='in_group_p' filepath='kernel/groups.c' line='219' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in_group_p'>
+        <parameter type-id='094d8048' name='grp' filepath='kernel/groups.c' line='219' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='in_egroup_p' mangled-name='in_egroup_p' filepath='kernel/groups.c' line='231' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in_egroup_p'>
+        <parameter type-id='094d8048' name='grp' filepath='kernel/groups.c' line='231' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/iomem.c' language='LANG_C89'>
+      <function-decl name='memremap' mangled-name='memremap' filepath='kernel/iomem.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memremap'>
+        <parameter type-id='acc63fdf' name='offset' filepath='kernel/iomem.c' line='71' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/iomem.c' line='71' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/iomem.c' line='71' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='memunmap' mangled-name='memunmap' filepath='kernel/iomem.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memunmap'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='kernel/iomem.c' line='122' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_memremap' mangled-name='devm_memremap' filepath='kernel/iomem.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_memremap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/iomem.c' line='139' column='1'/>
+        <parameter type-id='acc63fdf' name='offset' filepath='kernel/iomem.c' line='139' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='kernel/iomem.c' line='140' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/iomem.c' line='140' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/chip.c' language='LANG_C89'>
+      <class-decl name='platform_msi_priv_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='5d1d7263'/>
+      <union-decl name='__anonymous_union__' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='100' column='1' id='153fff9c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='72589d89' visibility='default' filepath='include/linux/msi.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='platform' type-id='2ae2d1e2' visibility='default' filepath='include/linux/msi.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fsl_mc' type-id='9930269d' visibility='default' filepath='include/linux/msi.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='inta' type-id='248c6527' visibility='default' filepath='include/linux/msi.h' line='129' 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/msi.h' line='102' column='1' id='72589d89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='masked' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='msi_attrib' type-id='2ce04ee0' visibility='default' filepath='include/linux/msi.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='' type-id='79c40656' visibility='default' filepath='include/linux/msi.h' line='114' 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='include/linux/msi.h' line='104' column='1' id='2ce04ee0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_msix' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='multiple' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='multi_cap' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='maskbit' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_64' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_virtual' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='entry_nr' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='default_irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='112' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/msi.h' line='114' column='1' id='79c40656'>
+        <data-member access='public'>
+          <var-decl name='mask_pos' type-id='f9b06939' visibility='default' filepath='include/linux/msi.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mask_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='116' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='platform_msi_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='37' column='1' id='2ae2d1e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_priv_data' type-id='1f211d93' visibility='default' filepath='include/linux/msi.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fsl_mc_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='46' column='1' id='9930269d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msi_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='47' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ti_sci_inta_msi_desc' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='54' column='1' id='248c6527'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_index' type-id='1dc6a898' visibility='default' filepath='include/linux/msi.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bab69d9a' size-in-bits='64' id='ef2b6ec8'/>
+      <pointer-type-def type-id='5d1d7263' size-in-bits='64' id='1f211d93'/>
+      <pointer-type-def type-id='9d9f3e8b' size-in-bits='64' id='aecf9817'/>
+      <function-decl name='irq_modify_status' mangled-name='irq_modify_status' filepath='kernel/irq/chip.c' line='1139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_modify_status'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='1139' column='1'/>
+        <parameter type-id='7359adad' name='clr' filepath='kernel/irq/chip.c' line='1139' column='1'/>
+        <parameter type-id='7359adad' name='set' filepath='kernel/irq/chip.c' line='1139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_set_irq_type' mangled-name='irq_set_irq_type' filepath='kernel/irq/chip.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irq_type'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='69' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='kernel/irq/chip.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_handler_data' mangled-name='irq_set_handler_data' filepath='kernel/irq/chip.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_handler_data'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='91' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/irq/chip.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_chip_data' mangled-name='irq_set_chip_data' filepath='kernel/irq/chip.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chip_data'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='146' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/irq/chip.c' line='146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_chip_and_handler_name' mangled-name='irq_set_chip_and_handler_name' filepath='kernel/irq/chip.c' line='1131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chip_and_handler_name'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='1131' column='1'/>
+        <parameter type-id='8846a616' name='chip' filepath='kernel/irq/chip.c' line='1131' column='1'/>
+        <parameter type-id='cdb741d3' name='handle' filepath='kernel/irq/chip.c' line='1132' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/irq/chip.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_set_chained_handler_and_data' mangled-name='irq_set_chained_handler_and_data' filepath='kernel/irq/chip.c' line='1114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_chained_handler_and_data'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='1114' column='1'/>
+        <parameter type-id='cdb741d3' name='handle' filepath='kernel/irq/chip.c' line='1114' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/irq/chip.c' line='1115' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_get_irq_data' mangled-name='irq_get_irq_data' filepath='kernel/irq/chip.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_get_irq_data'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='159' column='1'/>
+        <return type-id='1c475548'/>
+      </function-decl>
+      <function-decl name='irq_chip_unmask_parent' mangled-name='irq_chip_unmask_parent' filepath='kernel/irq/chip.c' line='1456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_unmask_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1456' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_wake_parent' mangled-name='irq_chip_set_wake_parent' filepath='kernel/irq/chip.c' line='1549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_wake_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1549' column='1'/>
+        <parameter type-id='f0981eeb' name='on' filepath='kernel/irq/chip.c' line='1549' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_vcpu_affinity_parent' mangled-name='irq_chip_set_vcpu_affinity_parent' filepath='kernel/irq/chip.c' line='1533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_vcpu_affinity_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1533' column='1'/>
+        <parameter type-id='eaa32e2f' name='vcpu_info' filepath='kernel/irq/chip.c' line='1533' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_type_parent' mangled-name='irq_chip_set_type_parent' filepath='kernel/irq/chip.c' line='1500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_type_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1500' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='kernel/irq/chip.c' line='1500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_parent_state' mangled-name='irq_chip_set_parent_state' filepath='kernel/irq/chip.c' line='1354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_parent_state'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1354' column='1'/>
+        <parameter type-id='0187da1b' name='which' filepath='kernel/irq/chip.c' line='1355' column='1'/>
+        <parameter type-id='b50a4934' name='val' filepath='kernel/irq/chip.c' line='1356' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_set_affinity_parent' mangled-name='irq_chip_set_affinity_parent' filepath='kernel/irq/chip.c' line='1482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_set_affinity_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1482' column='1'/>
+        <parameter type-id='5f8a1ac4' name='dest' filepath='kernel/irq/chip.c' line='1483' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='kernel/irq/chip.c' line='1483' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_retrigger_hierarchy' mangled-name='irq_chip_retrigger_hierarchy' filepath='kernel/irq/chip.c' line='1518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_retrigger_hierarchy'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1518' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_mask_parent' mangled-name='irq_chip_mask_parent' filepath='kernel/irq/chip.c' line='1434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_mask_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1434' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_get_parent_state' mangled-name='irq_chip_get_parent_state' filepath='kernel/irq/chip.c' line='1376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_get_parent_state'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1376' column='1'/>
+        <parameter type-id='0187da1b' name='which' filepath='kernel/irq/chip.c' line='1377' column='1'/>
+        <parameter type-id='d8e6b335' name='state' filepath='kernel/irq/chip.c' line='1378' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_chip_eoi_parent' mangled-name='irq_chip_eoi_parent' filepath='kernel/irq/chip.c' line='1467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_eoi_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1467' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_enable_parent' mangled-name='irq_chip_enable_parent' filepath='kernel/irq/chip.c' line='1394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_enable_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1394' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_disable_parent' mangled-name='irq_chip_disable_parent' filepath='kernel/irq/chip.c' line='1409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_disable_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1409' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_chip_ack_parent' mangled-name='irq_chip_ack_parent' filepath='kernel/irq/chip.c' line='1423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_chip_ack_parent'>
+        <parameter type-id='1c475548' name='data' filepath='kernel/irq/chip.c' line='1423' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_simple_irq' mangled-name='handle_simple_irq' filepath='kernel/irq/chip.c' line='556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_simple_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='556' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_nested_irq' mangled-name='handle_nested_irq' filepath='kernel/irq/chip.c' line='462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_nested_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/chip.c' line='462' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_level_irq' mangled-name='handle_level_irq' filepath='kernel/irq/chip.c' line='648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_level_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='648' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_fasteoi_irq' mangled-name='handle_fasteoi_irq' filepath='kernel/irq/chip.c' line='717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_fasteoi_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='717' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='handle_edge_irq' mangled-name='handle_edge_irq' filepath='kernel/irq/chip.c' line='804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_edge_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/chip.c' line='804' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='irqchip_irq_state' filepath='include/linux/interrupt.h' line='463' column='1' id='0187da1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQCHIP_STATE_PENDING' value='0'/>
+        <enumerator name='IRQCHIP_STATE_ACTIVE' value='1'/>
+        <enumerator name='IRQCHIP_STATE_MASKED' value='2'/>
+        <enumerator name='IRQCHIP_STATE_LINE_LEVEL' value='3'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='9d9f3e8b'>
+        <parameter type-id='b11825ce'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='911b5feb' size-in-bits='64' id='76c7d88b'/>
+      <class-decl name='irq_desc' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/irqdesc.h' line='56' column='1' id='911b5feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq_common_data' type-id='f1a268ec' visibility='default' filepath='include/linux/irqdesc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_data' type-id='064acd7a' 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='kstat_irqs' type-id='807869d3' 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='handle_irq' type-id='cdb741d3' visibility='default' filepath='include/linux/irqdesc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='action' type-id='ba361e53' visibility='default' filepath='include/linux/irqdesc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='status_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='core_internal_state__do_not_mess_with_it' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='wake_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tot_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_count' type-id='f0981eeb' 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='last_unhandled' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irqs_unhandled' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='threads_handled' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='threads_handled_last' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='lock' type-id='f5c90b3f' 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_enabled' type-id='74bccedd' 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='percpu_affinity' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='affinity_hint' type-id='5f8a1ac4' 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='affinity_notify' type-id='7ca8e198' visibility='default' filepath='include/linux/irqdesc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='threads_oneshot' type-id='7359adad' 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='threads_active' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wait_for_threads' type-id='b5ab048f' visibility='default' filepath='include/linux/irqdesc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_actions' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='no_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cond_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='force_resume_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/irqdesc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/irqdesc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/irqdesc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='request_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdesc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='parent_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/irqdesc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdesc.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='58f5058a' size-in-bits='64' id='7ca8e198'/>
+      <pointer-type-def type-id='754d1c63' size-in-bits='64' id='ba361e53'/>
+      <class-decl name='irq_affinity_notify' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='255' column='1' id='58f5058a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/interrupt.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/interrupt.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='notify' type-id='c1d52f61' visibility='default' filepath='include/linux/interrupt.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='16575f26' visibility='default' filepath='include/linux/interrupt.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irqaction' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='110' column='1' id='754d1c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='percpu_dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='include/linux/interrupt.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='secondary' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='thread_flags' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='thread_mask' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interrupt.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/interrupt.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='426a0da5' size-in-bits='64' id='c1d52f61'/>
+    </abi-instr>
+    <abi-instr 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='fa0b179b' name='dev' filepath='kernel/irq/devres.c' line='51' column='1'/>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/devres.c' line='51' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='kernel/irq/devres.c' line='52' column='1'/>
+        <parameter type-id='29591c9a' name='thread_fn' filepath='kernel/irq/devres.c' line='52' column='1'/>
+        <parameter type-id='7359adad' name='irqflags' filepath='kernel/irq/devres.c' line='53' column='1'/>
+        <parameter type-id='80f4b756' name='devname' filepath='kernel/irq/devres.c' line='53' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/devres.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_request_any_context_irq' mangled-name='devm_request_any_context_irq' filepath='kernel/irq/devres.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_request_any_context_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/irq/devres.c' line='99' column='1'/>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/devres.c' line='99' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='kernel/irq/devres.c' line='100' column='1'/>
+        <parameter type-id='7359adad' name='irqflags' filepath='kernel/irq/devres.c' line='100' column='1'/>
+        <parameter type-id='80f4b756' name='devname' filepath='kernel/irq/devres.c' line='101' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/devres.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_free_irq' mangled-name='devm_free_irq' filepath='kernel/irq/devres.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_free_irq'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/irq/devres.c' line='139' column='1'/>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/devres.c' line='139' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/devres.c' line='139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/generic-chip.c' language='LANG_C89'>
+      <var-decl name='irq_generic_chip_ops' type-id='0926e4bd' mangled-name='irq_generic_chip_ops' visibility='default' filepath='kernel/irq/generic-chip.c' line='447' column='1' elf-symbol-id='irq_generic_chip_ops'/>
+      <function-decl name='irq_setup_alt_chip' mangled-name='irq_setup_alt_chip' filepath='kernel/irq/generic-chip.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_setup_alt_chip'>
+        <parameter type-id='1c475548' name='d' filepath='kernel/irq/generic-chip.c' line='511' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='kernel/irq/generic-chip.c' line='511' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_get_domain_generic_chip' mangled-name='irq_get_domain_generic_chip' filepath='kernel/irq/generic-chip.c' line='359' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_get_domain_generic_chip'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/generic-chip.c' line='359' column='1'/>
+        <parameter type-id='f0981eeb' name='hw_irq' filepath='kernel/irq/generic-chip.c' line='359' column='1'/>
+        <return type-id='e53d7a90'/>
+      </function-decl>
+      <function-decl name='irq_gc_mask_set_bit' mangled-name='irq_gc_mask_set_bit' filepath='kernel/irq/generic-chip.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_gc_mask_set_bit'>
+        <parameter type-id='1c475548' name='d' filepath='kernel/irq/generic-chip.c' line='55' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_gc_mask_clr_bit' mangled-name='irq_gc_mask_clr_bit' filepath='kernel/irq/generic-chip.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_gc_mask_clr_bit'>
+        <parameter type-id='1c475548' name='d' filepath='kernel/irq/generic-chip.c' line='75' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_gc_ack_set_bit' mangled-name='irq_gc_ack_set_bit' filepath='kernel/irq/generic-chip.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_gc_ack_set_bit'>
+        <parameter type-id='1c475548' name='d' filepath='kernel/irq/generic-chip.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__irq_alloc_domain_generic_chips' mangled-name='__irq_alloc_domain_generic_chips' filepath='kernel/irq/generic-chip.c' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__irq_alloc_domain_generic_chips'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/generic-chip.c' line='282' column='1'/>
+        <parameter type-id='95e97e5e' name='irqs_per_chip' filepath='kernel/irq/generic-chip.c' line='282' column='1'/>
+        <parameter type-id='95e97e5e' name='num_ct' filepath='kernel/irq/generic-chip.c' line='283' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/irq/generic-chip.c' line='283' column='1'/>
+        <parameter type-id='cdb741d3' name='handler' filepath='kernel/irq/generic-chip.c' line='284' column='1'/>
+        <parameter type-id='f0981eeb' name='clr' filepath='kernel/irq/generic-chip.c' line='285' column='1'/>
+        <parameter type-id='f0981eeb' name='set' filepath='kernel/irq/generic-chip.c' line='285' column='1'/>
+        <parameter type-id='7a1ec3b1' name='gcflags' filepath='kernel/irq/generic-chip.c' line='286' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/handle.c' language='LANG_C89'>
+      <function-decl name='handle_bad_irq' mangled-name='handle_bad_irq' filepath='kernel/irq/handle.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='handle_bad_irq'>
+        <parameter type-id='76c7d88b' name='desc' filepath='kernel/irq/handle.c' line='31' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/irqdesc.c' language='LANG_C89'>
+      <class-decl name='msi_desc' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='85' column='1' id='d2b46ce8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/msi.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nvec_used' type-id='f0981eeb' visibility='default' filepath='include/linux/msi.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/msi.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='msg' type-id='03ba410a' visibility='default' filepath='include/linux/msi.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='affinity' type-id='ef2b6ec8' visibility='default' filepath='include/linux/msi.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='iommu_cookie' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='write_msi_msg' type-id='aecf9817' visibility='default' filepath='include/linux/msi.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='write_msi_msg_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/msi.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='' type-id='153fff9c' visibility='default' filepath='include/linux/msi.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msi_msg' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/linux/msi.h' line='8' column='1' id='03ba410a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address_lo' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='address_hi' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='19c2251e' visibility='default' filepath='include/linux/msi.h' line='11' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='e53d7a90' size-in-bits='infinite' id='a5527824'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='62778ae5' size-in-bits='infinite' id='7290550d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='512' id='02fdec64'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='infinite' id='c764d637'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='irq_desc' size-in-bits='3584' is-struct='yes' visibility='default' filepath='include/linux/irqdesc.h' line='56' column='1' id='911b5feb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq_common_data' type-id='f1a268ec' visibility='default' filepath='include/linux/irqdesc.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_data' type-id='064acd7a' 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='kstat_irqs' type-id='807869d3' 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='handle_irq' type-id='cdb741d3' visibility='default' filepath='include/linux/irqdesc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='action' type-id='ba361e53' visibility='default' filepath='include/linux/irqdesc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='status_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='core_internal_state__do_not_mess_with_it' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='wake_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tot_count' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_count' type-id='f0981eeb' 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='last_unhandled' type-id='7359adad' visibility='default' filepath='include/linux/irqdesc.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irqs_unhandled' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='threads_handled' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='threads_handled_last' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='lock' type-id='f5c90b3f' 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_enabled' type-id='74bccedd' 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='percpu_affinity' type-id='5f8a1ac4' visibility='default' filepath='include/linux/irqdesc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='affinity_hint' type-id='5f8a1ac4' 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='affinity_notify' type-id='7ca8e198' visibility='default' filepath='include/linux/irqdesc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='threads_oneshot' type-id='7359adad' 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='threads_active' type-id='49178f86' visibility='default' filepath='include/linux/irqdesc.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='wait_for_threads' type-id='b5ab048f' visibility='default' filepath='include/linux/irqdesc.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='nr_actions' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2016'>
+          <var-decl name='no_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='cond_suspend_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='force_resume_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/irqdesc.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/irqdesc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/irqdesc.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/irqdesc.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='request_mutex' type-id='925167dc' visibility='default' filepath='include/linux/irqdesc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='parent_irq' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdesc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/irqdesc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irqdesc.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_common_data' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='145' column='1' id='f1a268ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state_use_accessors' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handler_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msi_desc' type-id='b11825ce' visibility='default' filepath='include/linux/irq.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='effective_affinity' type-id='b16b461b' visibility='default' filepath='include/linux/irq.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ipi_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_data' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='175' column='1' id='064acd7a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hwirq' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='common' type-id='a4a39eba' visibility='default' filepath='include/linux/irq.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chip' type-id='8846a616' visibility='default' filepath='include/linux/irq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/irq.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='parent_data' type-id='1c475548' visibility='default' filepath='include/linux/irq.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chip_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='482' column='1' id='0f5f7920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent_device' type-id='fa0b179b' visibility='default' filepath='include/linux/irq.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/irq.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='irq_startup' type-id='1cb2627d' visibility='default' filepath='include/linux/irq.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='irq_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='irq_enable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='irq_disable' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='irq_mask_ack' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='irq_unmask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='irq_eoi' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='irq_set_affinity' type-id='d72a0292' visibility='default' filepath='include/linux/irq.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='irq_retrigger' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='irq_set_type' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='irq_set_wake' type-id='f3bd9244' visibility='default' filepath='include/linux/irq.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='irq_bus_lock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='irq_bus_sync_unlock' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='irq_cpu_online' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='irq_cpu_offline' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='irq_suspend' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='irq_resume' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='irq_pm_shutdown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='irq_calc_mask' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='irq_print_chip' type-id='9438aa05' visibility='default' filepath='include/linux/irq.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='irq_request_resources' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='irq_release_resources' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='irq_compose_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='irq_write_msi_msg' type-id='3a3e6b6c' visibility='default' filepath='include/linux/irq.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='irq_get_irqchip_state' type-id='f12b668c' visibility='default' filepath='include/linux/irq.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='irq_set_irqchip_state' type-id='ecf8d02d' visibility='default' filepath='include/linux/irq.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='irq_set_vcpu_affinity' type-id='cb5b8228' visibility='default' filepath='include/linux/irq.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='ipi_send_single' type-id='19c5fc2b' visibility='default' filepath='include/linux/irq.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ipi_send_mask' type-id='eb0bccd8' visibility='default' filepath='include/linux/irq.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='irq_nmi_setup' type-id='ed9f97a6' visibility='default' filepath='include/linux/irq.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='irq_nmi_teardown' type-id='185ccd91' visibility='default' filepath='include/linux/irq.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='531' 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='105' column='1' id='0926e4bd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='match' type-id='f1c95c76' visibility='default' filepath='include/linux/irqdomain.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='select' type-id='e1759090' visibility='default' filepath='include/linux/irqdomain.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='8a2b0cc8' visibility='default' filepath='include/linux/irqdomain.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unmap' type-id='8b74557f' visibility='default' filepath='include/linux/irqdomain.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='xlate' type-id='7881e15c' visibility='default' filepath='include/linux/irqdomain.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='alloc' type-id='0871ecbc' visibility='default' filepath='include/linux/irqdomain.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='free' type-id='644a4b55' visibility='default' filepath='include/linux/irqdomain.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='activate' type-id='7ad47ca2' visibility='default' filepath='include/linux/irqdomain.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='deactivate' type-id='0b8fca52' visibility='default' filepath='include/linux/irqdomain.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='translate' type-id='bbe45043' visibility='default' filepath='include/linux/irqdomain.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_domain_bus_token' filepath='include/linux/irqdomain.h' line='77' column='1' id='385b8018'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DOMAIN_BUS_ANY' value='0'/>
+        <enumerator name='DOMAIN_BUS_WIRED' value='1'/>
+        <enumerator name='DOMAIN_BUS_GENERIC_MSI' value='2'/>
+        <enumerator name='DOMAIN_BUS_PCI_MSI' value='3'/>
+        <enumerator name='DOMAIN_BUS_PLATFORM_MSI' value='4'/>
+        <enumerator name='DOMAIN_BUS_NEXUS' value='5'/>
+        <enumerator name='DOMAIN_BUS_IPI' value='6'/>
+        <enumerator name='DOMAIN_BUS_FSL_MC_MSI' value='7'/>
+        <enumerator name='DOMAIN_BUS_TI_SCI_INTA_MSI' value='8'/>
+        <enumerator name='DOMAIN_BUS_WAKEUP' value='9'/>
+      </enum-decl>
+      <class-decl name='irq_fwspec' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/irqdomain.h' line='64' column='1' id='a87c488a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fwnode' type-id='4a935625' visibility='default' filepath='include/linux/irqdomain.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='param_count' type-id='95e97e5e' visibility='default' filepath='include/linux/irqdomain.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='param' type-id='02fdec64' visibility='default' filepath='include/linux/irqdomain.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_hw_number_t' type-id='7359adad' filepath='include/linux/types.h' line='169' column='1' id='88370ce9'/>
+      <class-decl name='irq_domain_chip_generic' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='1081' column='1' id='f100815b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_per_chip' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_chips' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='irq_flags_to_clear' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='irq_flags_to_set' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='gc_flags' type-id='7a1ec3b1' visibility='default' filepath='include/linux/irq.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='gc' type-id='a5527824' visibility='default' filepath='include/linux/irq.h' line='1087' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='irq_gc_flags' filepath='include/linux/irq.h' line='1064' column='1' id='7a1ec3b1'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1031' column='1' id='bb06f572'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/irq.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg_base' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reg_readl' type-id='99577235' visibility='default' filepath='include/linux/irq.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg_writel' type-id='f34cc61f' visibility='default' filepath='include/linux/irq.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspend' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resume' type-id='bf17d761' visibility='default' filepath='include/linux/irq.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='irq_base' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='irq_cnt' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mask_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='type_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='polarity_cache' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='wake_enabled' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_active' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='num_ct' type-id='f0981eeb' visibility='default' filepath='include/linux/irq.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/irq.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='installed' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='unused' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='domain' type-id='7544e824' visibility='default' filepath='include/linux/irq.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/irq.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='chip_types' type-id='7290550d' visibility='default' filepath='include/linux/irq.h' line='1051' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_chip_type' size-in-bits='2944' is-struct='yes' visibility='default' filepath='include/linux/irq.h' line='989' column='1' id='62778ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='0f5f7920' visibility='default' filepath='include/linux/irq.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='regs' type-id='6194fd9a' visibility='default' filepath='include/linux/irq.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='handler' type-id='cdb741d3' visibility='default' filepath='include/linux/irq.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='mask_cache_priv' type-id='19c2251e' visibility='default' filepath='include/linux/irq.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mask_cache' type-id='f9409001' visibility='default' filepath='include/linux/irq.h' line='995' 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='966' column='1' id='6194fd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='disable' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ack' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='eoi' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='polarity' type-id='7359adad' visibility='default' filepath='include/linux/irq.h' line='973' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_flow_handler_t' type-id='8937f3c2' filepath='include/linux/irqhandler.h' line='12' column='1' id='cdb741d3'/>
+      <enum-decl name='irqchip_irq_state' filepath='include/linux/interrupt.h' line='463' column='1' id='0187da1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQCHIP_STATE_PENDING' value='0'/>
+        <enumerator name='IRQCHIP_STATE_ACTIVE' value='1'/>
+        <enumerator name='IRQCHIP_STATE_MASKED' value='2'/>
+        <enumerator name='IRQCHIP_STATE_LINE_LEVEL' value='3'/>
+      </enum-decl>
+      <class-decl name='irqaction' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='110' column='1' id='754d1c63'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='percpu_dev_id' type-id='eaa32e2f' visibility='default' filepath='include/linux/interrupt.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='29591c9a' visibility='default' filepath='include/linux/interrupt.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='thread' type-id='f23e2572' visibility='default' filepath='include/linux/interrupt.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='secondary' type-id='ba361e53' visibility='default' filepath='include/linux/interrupt.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='thread_flags' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='thread_mask' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/interrupt.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dir' type-id='d077e928' visibility='default' filepath='include/linux/interrupt.h' line='123' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='irq_handler_t' type-id='3fefe9b7' filepath='include/linux/interrupt.h' line='92' column='1' id='29591c9a'/>
+      <typedef-decl name='irqreturn_t' type-id='8086ea38' filepath='include/linux/irqreturn.h' line='17' column='1' id='4bdecfd7'/>
+      <enum-decl name='irqreturn' filepath='include/linux/irqreturn.h' line='11' column='1' id='8086ea38'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IRQ_NONE' value='0'/>
+        <enumerator name='IRQ_HANDLED' value='1'/>
+        <enumerator name='IRQ_WAKE_THREAD' value='2'/>
+      </enum-decl>
+      <class-decl name='irq_affinity_notify' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='255' column='1' id='58f5058a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irq' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/interrupt.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/interrupt.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='notify' type-id='c1d52f61' visibility='default' filepath='include/linux/interrupt.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='release' type-id='16575f26' visibility='default' filepath='include/linux/interrupt.h' line='260' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='irq_affinity_desc' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/interrupt.h' line='293' column='1' id='bab69d9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='1354385d' visibility='default' filepath='include/linux/interrupt.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_managed' type-id='f0981eeb' visibility='default' filepath='include/linux/interrupt.h' line='295' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='bab69d9a' const='yes' id='cc519b49'/>
+      <pointer-type-def type-id='cc519b49' size-in-bits='64' id='07779cd9'/>
+      <qualified-type-def type-id='0926e4bd' const='yes' id='a4974438'/>
+      <pointer-type-def type-id='a4974438' size-in-bits='64' id='2c202856'/>
+      <pointer-type-def type-id='4852a8ec' size-in-bits='64' id='ed9f97a6'/>
+      <pointer-type-def type-id='f5c32c38' size-in-bits='64' id='d72a0292'/>
+      <pointer-type-def type-id='97f95e6a' size-in-bits='64' id='f12b668c'/>
+      <pointer-type-def type-id='2cabe151' size-in-bits='64' id='ecf8d02d'/>
+      <pointer-type-def type-id='91265862' size-in-bits='64' id='f3bd9244'/>
+      <pointer-type-def type-id='20f1cebe' size-in-bits='64' id='cb5b8228'/>
+      <pointer-type-def type-id='8ab70c7a' size-in-bits='64' id='7881e15c'/>
+      <pointer-type-def type-id='3de312fc' size-in-bits='64' id='f1c95c76'/>
+      <pointer-type-def type-id='dea13b10' size-in-bits='64' id='7ad47ca2'/>
+      <pointer-type-def type-id='a5eadeee' size-in-bits='64' id='e1759090'/>
+      <pointer-type-def type-id='a2ef4917' size-in-bits='64' id='bbe45043'/>
+      <pointer-type-def type-id='7e765fce' size-in-bits='64' id='8a2b0cc8'/>
+      <pointer-type-def type-id='1d6846fa' size-in-bits='64' id='0871ecbc'/>
+      <pointer-type-def type-id='58f5058a' size-in-bits='64' id='7ca8e198'/>
+      <pointer-type-def type-id='0f5f7920' size-in-bits='64' id='8846a616'/>
+      <pointer-type-def type-id='bb06f572' size-in-bits='64' id='e53d7a90'/>
+      <pointer-type-def type-id='f1a268ec' size-in-bits='64' id='a4a39eba'/>
+      <pointer-type-def type-id='064acd7a' size-in-bits='64' id='1c475548'/>
+      <pointer-type-def type-id='911b5feb' size-in-bits='64' id='76c7d88b'/>
+      <pointer-type-def type-id='f100815b' size-in-bits='64' id='8e62d7cb'/>
+      <pointer-type-def type-id='a87c488a' size-in-bits='64' id='2869bb38'/>
+      <pointer-type-def type-id='754d1c63' size-in-bits='64' id='ba361e53'/>
+      <pointer-type-def type-id='400fb07b' size-in-bits='64' id='aa29ecab'/>
+      <pointer-type-def type-id='d2b46ce8' size-in-bits='64' id='b11825ce'/>
+      <pointer-type-def type-id='03ba410a' size-in-bits='64' id='7f6ae768'/>
+      <pointer-type-def type-id='19f1c953' size-in-bits='64' id='3fefe9b7'/>
+      <pointer-type-def type-id='7addb8a1' size-in-bits='64' id='1cb2627d'/>
+      <pointer-type-def type-id='426a0da5' size-in-bits='64' id='c1d52f61'/>
+      <pointer-type-def type-id='75685cad' size-in-bits='64' id='bf17d761'/>
+      <pointer-type-def type-id='3b7ef195' size-in-bits='64' id='185ccd91'/>
+      <pointer-type-def type-id='9cad7816' size-in-bits='64' id='eb0bccd8'/>
+      <pointer-type-def type-id='16ebfbba' size-in-bits='64' id='3a3e6b6c'/>
+      <pointer-type-def type-id='9e497d29' size-in-bits='64' id='9438aa05'/>
+      <pointer-type-def type-id='e7c67bff' size-in-bits='64' id='19c5fc2b'/>
+      <pointer-type-def type-id='da4d9050' size-in-bits='64' id='8937f3c2'/>
+      <pointer-type-def type-id='71099d68' size-in-bits='64' id='0b8fca52'/>
+      <pointer-type-def type-id='eb940a3b' size-in-bits='64' id='8b74557f'/>
+      <pointer-type-def type-id='267816c1' size-in-bits='64' id='644a4b55'/>
+      <pointer-type-def type-id='4dd76d14' size-in-bits='64' id='16575f26'/>
+      <pointer-type-def type-id='4b8eb833' size-in-bits='64' id='f34cc61f'/>
+      <var-decl name='nr_irqs' type-id='95e97e5e' mangled-name='nr_irqs' visibility='default' filepath='kernel/irq/irqdesc.c' line='130' column='1' elf-symbol-id='nr_irqs'/>
+      <function-decl name='irq_to_desc' mangled-name='irq_to_desc' filepath='kernel/irq/irqdesc.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_to_desc'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/irqdesc.c' line='351' column='1'/>
+        <return type-id='76c7d88b'/>
+      </function-decl>
+      <function-decl name='generic_handle_irq' mangled-name='generic_handle_irq' filepath='kernel/irq/irqdesc.c' line='638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_handle_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/irqdesc.c' line='638' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__irq_alloc_descs' mangled-name='__irq_alloc_descs' filepath='kernel/irq/irqdesc.c' line='766' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__irq_alloc_descs'>
+        <parameter type-id='95e97e5e' name='irq' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='f0981eeb' name='from' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='f0981eeb' name='cnt' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='kernel/irq/irqdesc.c' line='766' column='1'/>
+        <parameter type-id='2730d015' name='owner' filepath='kernel/irq/irqdesc.c' line='767' column='1'/>
+        <parameter type-id='07779cd9' name='affinity' filepath='kernel/irq/irqdesc.c' line='767' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4852a8ec'>
+        <parameter type-id='1c475548'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5c32c38'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='5f8a1ac4'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97f95e6a'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='0187da1b'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cabe151'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='0187da1b'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91265862'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20f1cebe'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ab70c7a'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='aded214c'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3de312fc'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='9a537bbe'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dea13b10'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a5eadeee'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='385b8018'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2ef4917'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='2869bb38'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e765fce'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='88370ce9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1d6846fa'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19f1c953'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='4bdecfd7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7addb8a1'>
+        <parameter type-id='1c475548'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='426a0da5'>
+        <parameter type-id='7ca8e198'/>
+        <parameter type-id='af4bd535'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75685cad'>
+        <parameter type-id='e53d7a90'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b7ef195'>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9cad7816'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='16ebfbba'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='7f6ae768'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e497d29'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e7c67bff'>
+        <parameter type-id='1c475548'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da4d9050'>
+        <parameter type-id='76c7d88b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='71099d68'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='1c475548'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb940a3b'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='267816c1'>
+        <parameter type-id='7544e824'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4dd76d14'>
+        <parameter type-id='aa29ecab'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4b8eb833'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/irqdomain.c' language='LANG_C89'>
+      <pointer-type-def type-id='88370ce9' size-in-bits='64' id='ebc26324'/>
+      <function-decl name='__irq_domain_add' mangled-name='__irq_domain_add' filepath='kernel/irq/irqdomain.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__irq_domain_add'>
+        <parameter type-id='4a935625' name='fwnode' filepath='kernel/irq/irqdomain.c' line='130' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/irq/irqdomain.c' line='130' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq_max' filepath='kernel/irq/irqdomain.c' line='131' column='1'/>
+        <parameter type-id='95e97e5e' name='direct_max' filepath='kernel/irq/irqdomain.c' line='131' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='132' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='133' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_domain_remove' mangled-name='irq_domain_remove' filepath='kernel/irq/irqdomain.c' line='243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_remove'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_find_mapping' mangled-name='irq_find_mapping' filepath='kernel/irq/irqdomain.c' line='897' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_find_mapping'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='897' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq' filepath='kernel/irq/irqdomain.c' line='898' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_domain_set_info' mangled-name='irq_domain_set_info' filepath='kernel/irq/irqdomain.c' line='1226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_info'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1226' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1226' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq' filepath='kernel/irq/irqdomain.c' line='1227' column='1'/>
+        <parameter type-id='8846a616' name='chip' filepath='kernel/irq/irqdomain.c' line='1227' column='1'/>
+        <parameter type-id='eaa32e2f' name='chip_data' filepath='kernel/irq/irqdomain.c' line='1228' column='1'/>
+        <parameter type-id='cdb741d3' name='handler' filepath='kernel/irq/irqdomain.c' line='1228' column='1'/>
+        <parameter type-id='eaa32e2f' name='handler_data' filepath='kernel/irq/irqdomain.c' line='1229' column='1'/>
+        <parameter type-id='80f4b756' name='handler_name' filepath='kernel/irq/irqdomain.c' line='1229' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_find_matching_fwspec' mangled-name='irq_find_matching_fwspec' filepath='kernel/irq/irqdomain.c' line='385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_find_matching_fwspec'>
+        <parameter type-id='2869bb38' name='fwspec' filepath='kernel/irq/irqdomain.c' line='385' column='1'/>
+        <parameter type-id='385b8018' name='bus_token' filepath='kernel/irq/irqdomain.c' line='386' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_twocell' mangled-name='irq_domain_xlate_twocell' filepath='kernel/irq/irqdomain.c' line='950' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_twocell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='950' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='950' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='951' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='951' column='1'/>
+        <parameter type-id='ebc26324' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='952' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='952' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_onetwocell' mangled-name='irq_domain_xlate_onetwocell' filepath='kernel/irq/irqdomain.c' line='972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onetwocell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='972' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='973' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='974' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='974' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='975' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='975' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_xlate_onecell' mangled-name='irq_domain_xlate_onecell' filepath='kernel/irq/irqdomain.c' line='931' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_xlate_onecell'>
+        <parameter type-id='7544e824' name='d' filepath='kernel/irq/irqdomain.c' line='931' column='1'/>
+        <parameter type-id='9a537bbe' name='ctrlr' filepath='kernel/irq/irqdomain.c' line='931' column='1'/>
+        <parameter type-id='aded214c' name='intspec' filepath='kernel/irq/irqdomain.c' line='932' column='1'/>
+        <parameter type-id='f0981eeb' name='intsize' filepath='kernel/irq/irqdomain.c' line='932' column='1'/>
+        <parameter type-id='1d2c2b85' name='out_hwirq' filepath='kernel/irq/irqdomain.c' line='933' column='1'/>
+        <parameter type-id='807869d3' name='out_type' filepath='kernel/irq/irqdomain.c' line='933' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_update_bus_token' mangled-name='irq_domain_update_bus_token' filepath='kernel/irq/irqdomain.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_update_bus_token'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='269' column='1'/>
+        <parameter type-id='385b8018' name='bus_token' filepath='kernel/irq/irqdomain.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_set_hwirq_and_chip' mangled-name='irq_domain_set_hwirq_and_chip' filepath='kernel/irq/irqdomain.c' line='1198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_set_hwirq_and_chip'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1198' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1198' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq' filepath='kernel/irq/irqdomain.c' line='1199' column='1'/>
+        <parameter type-id='8846a616' name='chip' filepath='kernel/irq/irqdomain.c' line='1199' column='1'/>
+        <parameter type-id='eaa32e2f' name='chip_data' filepath='kernel/irq/irqdomain.c' line='1200' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_get_irq_data' mangled-name='irq_domain_get_irq_data' filepath='kernel/irq/irqdomain.c' line='1176' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_get_irq_data'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1176' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1177' column='1'/>
+        <return type-id='1c475548'/>
+      </function-decl>
+      <function-decl name='irq_domain_free_irqs_parent' mangled-name='irq_domain_free_irqs_parent' filepath='kernel/irq/irqdomain.c' line='1609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_parent'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1609' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1610' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1610' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_free_irqs_common' mangled-name='irq_domain_free_irqs_common' filepath='kernel/irq/irqdomain.c' line='1255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_free_irqs_common'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1255' column='1'/>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='1255' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_domain_create_hierarchy' mangled-name='irq_domain_create_hierarchy' filepath='kernel/irq/irqdomain.c' line='1053' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_create_hierarchy'>
+        <parameter type-id='7544e824' name='parent' filepath='kernel/irq/irqdomain.c' line='1053' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/irq/irqdomain.c' line='1054' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='kernel/irq/irqdomain.c' line='1055' column='1'/>
+        <parameter type-id='4a935625' name='fwnode' filepath='kernel/irq/irqdomain.c' line='1056' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='1057' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='1058' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_domain_alloc_irqs_parent' mangled-name='irq_domain_alloc_irqs_parent' filepath='kernel/irq/irqdomain.c' line='1589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_alloc_irqs_parent'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='1589' column='1'/>
+        <parameter type-id='f0981eeb' name='irq_base' filepath='kernel/irq/irqdomain.c' line='1590' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_irqs' filepath='kernel/irq/irqdomain.c' line='1590' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='kernel/irq/irqdomain.c' line='1591' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_domain_add_simple' mangled-name='irq_domain_add_simple' filepath='kernel/irq/irqdomain.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_domain_add_simple'>
+        <parameter type-id='9a537bbe' name='of_node' filepath='kernel/irq/irqdomain.c' line='319' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='kernel/irq/irqdomain.c' line='320' column='1'/>
+        <parameter type-id='f0981eeb' name='first_irq' filepath='kernel/irq/irqdomain.c' line='321' column='1'/>
+        <parameter type-id='2c202856' name='ops' filepath='kernel/irq/irqdomain.c' line='322' column='1'/>
+        <parameter type-id='eaa32e2f' name='host_data' filepath='kernel/irq/irqdomain.c' line='323' column='1'/>
+        <return type-id='7544e824'/>
+      </function-decl>
+      <function-decl name='irq_dispose_mapping' mangled-name='irq_dispose_mapping' filepath='kernel/irq/irqdomain.c' line='871' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_dispose_mapping'>
+        <parameter type-id='f0981eeb' name='virq' filepath='kernel/irq/irqdomain.c' line='871' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='irq_create_of_mapping' mangled-name='irq_create_of_mapping' filepath='kernel/irq/irqdomain.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_of_mapping'>
+        <parameter type-id='51a94113' name='irq_data' filepath='kernel/irq/irqdomain.c' line='856' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_create_fwspec_mapping' mangled-name='irq_create_fwspec_mapping' filepath='kernel/irq/irqdomain.c' line='765' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_fwspec_mapping'>
+        <parameter type-id='2869bb38' name='fwspec' filepath='kernel/irq/irqdomain.c' line='765' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='irq_create_mapping_affinity' mangled-name='irq_create_mapping_affinity' filepath='kernel/irq/irqdomain.c' line='652' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_create_mapping_affinity'>
+        <parameter type-id='7544e824' name='domain' filepath='kernel/irq/irqdomain.c' line='652' column='1'/>
+        <parameter type-id='88370ce9' name='hwirq' filepath='kernel/irq/irqdomain.c' line='653' column='1'/>
+        <parameter type-id='07779cd9' name='affinity' filepath='kernel/irq/irqdomain.c' line='654' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq/manage.c' language='LANG_C89'>
+      <function-decl name='enable_percpu_irq' mangled-name='enable_percpu_irq' filepath='kernel/irq/manage.c' line='2230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='enable_percpu_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2230' column='1'/>
+        <parameter type-id='f0981eeb' name='type' filepath='kernel/irq/manage.c' line='2230' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='disable_percpu_irq' mangled-name='disable_percpu_irq' filepath='kernel/irq/manage.c' line='2294' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_percpu_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2294' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__request_percpu_irq' mangled-name='__request_percpu_irq' filepath='kernel/irq/manage.c' line='2456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_percpu_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2456' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='kernel/irq/manage.c' line='2456' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/irq/manage.c' line='2457' column='1'/>
+        <parameter type-id='80f4b756' name='devname' filepath='kernel/irq/manage.c' line='2457' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/manage.c' line='2458' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='enable_irq' mangled-name='enable_irq' filepath='kernel/irq/manage.c' line='669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='enable_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='669' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='free_percpu_irq' mangled-name='free_percpu_irq' filepath='kernel/irq/manage.c' line='2386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_percpu_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2386' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/manage.c' line='2386' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='request_threaded_irq' mangled-name='request_threaded_irq' filepath='kernel/irq/manage.c' line='2008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_threaded_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2008' column='1'/>
+        <parameter type-id='29591c9a' name='handler' filepath='kernel/irq/manage.c' line='2008' column='1'/>
+        <parameter type-id='29591c9a' name='thread_fn' filepath='kernel/irq/manage.c' line='2009' column='1'/>
+        <parameter type-id='7359adad' name='irqflags' filepath='kernel/irq/manage.c' line='2009' column='1'/>
+        <parameter type-id='80f4b756' name='devname' filepath='kernel/irq/manage.c' line='2010' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/manage.c' line='2010' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='free_irq' mangled-name='free_irq' filepath='kernel/irq/manage.c' line='1888' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='1888' column='1'/>
+        <parameter type-id='eaa32e2f' name='dev_id' filepath='kernel/irq/manage.c' line='1888' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </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='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='98' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='setup_irq' mangled-name='setup_irq' filepath='kernel/irq/manage.c' line='1695' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='setup_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='1695' column='1'/>
+        <parameter type-id='ba361e53' name='act' filepath='kernel/irq/manage.c' line='1695' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_parent' mangled-name='irq_set_parent' filepath='kernel/irq/manage.c' line='849' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_parent'>
+        <parameter type-id='95e97e5e' name='irq' filepath='kernel/irq/manage.c' line='849' column='1'/>
+        <parameter type-id='95e97e5e' name='parent_irq' filepath='kernel/irq/manage.c' line='849' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_irqchip_state' mangled-name='irq_set_irqchip_state' filepath='kernel/irq/manage.c' line='2721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irqchip_state'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='2721' column='1'/>
+        <parameter type-id='0187da1b' name='which' filepath='kernel/irq/manage.c' line='2721' column='1'/>
+        <parameter type-id='b50a4934' name='val' filepath='kernel/irq/manage.c' line='2722' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_irq_wake' mangled-name='irq_set_irq_wake' filepath='kernel/irq/manage.c' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_irq_wake'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='726' column='1'/>
+        <parameter type-id='f0981eeb' name='on' filepath='kernel/irq/manage.c' line='726' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_affinity_notifier' mangled-name='irq_set_affinity_notifier' filepath='kernel/irq/manage.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_affinity_notifier'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='403' column='1'/>
+        <parameter type-id='7ca8e198' name='notify' filepath='kernel/irq/manage.c' line='403' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='irq_set_affinity_hint' mangled-name='irq_set_affinity_hint' filepath='kernel/irq/manage.c' line='350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_set_affinity_hint'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='350' column='1'/>
+        <parameter type-id='5f8a1ac4' name='m' filepath='kernel/irq/manage.c' line='350' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='disable_irq_nosync' mangled-name='disable_irq_nosync' filepath='kernel/irq/manage.c' line='564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_irq_nosync'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='564' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='disable_irq' mangled-name='disable_irq' filepath='kernel/irq/manage.c' line='582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='disable_irq'>
+        <parameter type-id='f0981eeb' name='irq' filepath='kernel/irq/manage.c' line='582' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/irq_work.c' language='LANG_C89'>
+      <function-decl name='irq_work_queue' mangled-name='irq_work_queue' filepath='kernel/irq_work.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_work_queue'>
+        <parameter type-id='44bef697' name='work' filepath='kernel/irq_work.c' line='75' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='irq_work_sync' mangled-name='irq_work_sync' filepath='kernel/irq_work.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='irq_work_sync'>
+        <parameter type-id='44bef697' name='work' filepath='kernel/irq_work.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='9281c70f' size-in-bits='64' id='44bef697'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/jump_label.c' language='LANG_C89'>
+      <pointer-type-def type-id='00205383' size-in-bits='64' id='f8840c23'/>
+      <function-decl name='static_key_slow_inc' mangled-name='static_key_slow_inc' filepath='kernel/jump_label.c' line='156' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='static_key_slow_inc'>
+        <parameter type-id='f8840c23' name='key' filepath='kernel/jump_label.c' line='156' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='static_key_slow_dec' mangled-name='static_key_slow_dec' filepath='kernel/jump_label.c' line='267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='static_key_slow_dec'>
+        <parameter type-id='f8840c23' name='key' filepath='kernel/jump_label.c' line='267' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/kallsyms.c' language='LANG_C89'>
+      <function-decl name='sprint_symbol' mangled-name='sprint_symbol' filepath='kernel/kallsyms.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sprint_symbol'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/kallsyms.c' line='435' column='1'/>
+        <parameter type-id='7359adad' name='address' filepath='kernel/kallsyms.c' line='435' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='b50a4934' name='wait' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/kmod.c' line='125' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/ksysfs.c' language='LANG_C89'>
+      <var-decl name='kernel_kobj' type-id='d30bdc51' mangled-name='kernel_kobj' visibility='default' filepath='kernel/ksysfs.c' line='208' column='1' elf-symbol-id='kernel_kobj'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/kthread.c' language='LANG_C89'>
+      <class-decl name='kthread_worker' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='89' column='1' id='62968721'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/kthread.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/kthread.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='delayed_work_list' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='task' type-id='f23e2572' visibility='default' filepath='include/linux/kthread.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='current_work' type-id='401eb95c' visibility='default' filepath='include/linux/kthread.h' line='95' 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='98' column='1' id='ac165296'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/kthread.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='a785c7fd' visibility='default' filepath='include/linux/kthread.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='worker' type-id='c41f4539' visibility='default' filepath='include/linux/kthread.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='canceling' type-id='95e97e5e' visibility='default' filepath='include/linux/kthread.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='kthread_work_func_t' type-id='2a5d0ea1' filepath='include/linux/kthread.h' line='82' column='1' id='a785c7fd'/>
+      <class-decl name='kthread_delayed_work' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/kthread.h' line='106' column='1' id='8fb867c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ac165296' visibility='default' filepath='include/linux/kthread.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/linux/kthread.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9efbfb11' size-in-bits='64' id='b9b212f5'/>
+      <pointer-type-def type-id='8fb867c9' size-in-bits='64' id='d56697f1'/>
+      <pointer-type-def type-id='ac165296' size-in-bits='64' id='401eb95c'/>
+      <pointer-type-def type-id='62968721' size-in-bits='64' id='c41f4539'/>
+      <pointer-type-def type-id='47479831' size-in-bits='64' id='a57283f9'/>
+      <pointer-type-def type-id='38d1cb6d' size-in-bits='64' id='2a5d0ea1'/>
+      <function-decl name='kthread_create_on_node' mangled-name='kthread_create_on_node' filepath='kernel/kthread.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_on_node'>
+        <parameter type-id='b9b212f5' name='threadfn' filepath='kernel/kthread.c' line='412' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/kthread.c' line='413' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='kernel/kthread.c' line='413' column='1'/>
+        <parameter type-id='80f4b756' name='namefmt' filepath='kernel/kthread.c' line='414' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='kthread_park' mangled-name='kthread_park' filepath='kernel/kthread.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_park'>
+        <parameter type-id='f23e2572' name='k' filepath='kernel/kthread.c' line='561' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_unpark' mangled-name='kthread_unpark' filepath='kernel/kthread.c' line='530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_unpark'>
+        <parameter type-id='f23e2572' name='k' filepath='kernel/kthread.c' line='530' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_stop' mangled-name='kthread_stop' filepath='kernel/kthread.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_stop'>
+        <parameter type-id='f23e2572' name='k' filepath='kernel/kthread.c' line='605' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_worker_fn' mangled-name='kthread_worker_fn' filepath='kernel/kthread.c' line='691' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_worker_fn'>
+        <parameter type-id='eaa32e2f' name='worker_ptr' filepath='kernel/kthread.c' line='691' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kthread_should_stop' mangled-name='kthread_should_stop' filepath='kernel/kthread.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_should_stop'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_should_park' mangled-name='kthread_should_park' filepath='kernel/kthread.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_should_park'>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_queue_work' mangled-name='kthread_queue_work' filepath='kernel/kthread.c' line='876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_queue_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='876' column='1'/>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='877' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_queue_delayed_work' mangled-name='kthread_queue_delayed_work' filepath='kernel/kthread.c' line='974' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_queue_delayed_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='974' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='975' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='976' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_parkme' mangled-name='kthread_parkme' filepath='kernel/kthread.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_parkme'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_mod_delayed_work' mangled-name='kthread_mod_delayed_work' filepath='kernel/kthread.c' line='1121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_mod_delayed_work'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1121' column='1'/>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='1122' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/kthread.c' line='1123' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_freezable_should_stop' mangled-name='kthread_freezable_should_stop' filepath='kernel/kthread.c' line='158' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_freezable_should_stop'>
+        <parameter type-id='d8e6b335' name='was_frozen' filepath='kernel/kthread.c' line='158' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_flush_worker' mangled-name='kthread_flush_worker' filepath='kernel/kthread.c' line='1249' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_flush_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1249' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_flush_work' mangled-name='kthread_flush_work' filepath='kernel/kthread.c' line='1012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_flush_work'>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='1012' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_destroy_worker' mangled-name='kthread_destroy_worker' filepath='kernel/kthread.c' line='1269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_destroy_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='1269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_delayed_work_timer_fn' mangled-name='kthread_delayed_work_timer_fn' filepath='kernel/kthread.c' line='900' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_delayed_work_timer_fn'>
+        <parameter type-id='9248e67f' name='t' filepath='kernel/kthread.c' line='900' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kthread_create_worker' mangled-name='kthread_create_worker' filepath='kernel/kthread.c' line='784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_create_worker'>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/kthread.c' line='784' column='1'/>
+        <parameter type-id='80f4b756' name='namefmt' filepath='kernel/kthread.c' line='784' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='c41f4539'/>
+      </function-decl>
+      <function-decl name='kthread_cancel_work_sync' mangled-name='kthread_cancel_work_sync' filepath='kernel/kthread.c' line='1221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_cancel_work_sync'>
+        <parameter type-id='401eb95c' name='work' filepath='kernel/kthread.c' line='1221' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_cancel_delayed_work_sync' mangled-name='kthread_cancel_delayed_work_sync' filepath='kernel/kthread.c' line='1236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_cancel_delayed_work_sync'>
+        <parameter type-id='d56697f1' name='dwork' filepath='kernel/kthread.c' line='1236' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='kthread_bind' mangled-name='kthread_bind' filepath='kernel/kthread.c' line='463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kthread_bind'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/kthread.c' line='463' column='1'/>
+        <parameter type-id='f0981eeb' name='cpu' filepath='kernel/kthread.c' line='463' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kthread_init_worker' mangled-name='__kthread_init_worker' filepath='kernel/kthread.c' line='664' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kthread_init_worker'>
+        <parameter type-id='c41f4539' name='worker' filepath='kernel/kthread.c' line='664' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/kthread.c' line='665' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/kthread.c' line='666' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9efbfb11'>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38d1cb6d'>
+        <parameter type-id='401eb95c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/locking/mutex.c' language='LANG_C89'>
+      <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='45793a97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='925167dc' 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='c1d02a64' 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='2c45f76e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='task' type-id='f23e2572' 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='7359adad' 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='f0981eeb' 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='8efea9e5' 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='8efea9e5' visibility='default' filepath='include/linux/ww_mutex.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='mutex_trylock_recursive_enum' filepath='include/linux/mutex.h' line='192' column='1' id='9a6ea243'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MUTEX_TRYLOCK_FAILED' value='0'/>
+        <enumerator name='MUTEX_TRYLOCK_SUCCESS' value='1'/>
+        <enumerator name='MUTEX_TRYLOCK_RECURSIVE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='925167dc' size-in-bits='64' id='e0ea832a'/>
+      <pointer-type-def type-id='2c45f76e' size-in-bits='64' id='c1d02a64'/>
+      <pointer-type-def type-id='45793a97' size-in-bits='64' id='7533ba6f'/>
+      <function-decl name='mutex_lock' mangled-name='mutex_lock' filepath='kernel/locking/mutex.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mutex_unlock' mangled-name='mutex_unlock' filepath='kernel/locking/mutex.c' line='746' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_unlock'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='746' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ww_mutex_unlock' mangled-name='ww_mutex_unlock' filepath='kernel/locking/mutex.c' line='767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_unlock'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='767' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock_interruptible' mangled-name='ww_mutex_lock_interruptible' filepath='kernel/locking/mutex.c' line='1454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock_interruptible'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='1454' column='1'/>
+        <parameter type-id='c1d02a64' name='ctx' filepath='kernel/locking/mutex.c' line='1454' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ww_mutex_lock' mangled-name='ww_mutex_lock' filepath='kernel/locking/mutex.c' line='1439' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ww_mutex_lock'>
+        <parameter type-id='7533ba6f' name='lock' filepath='kernel/locking/mutex.c' line='1439' column='1'/>
+        <parameter type-id='c1d02a64' name='ctx' filepath='kernel/locking/mutex.c' line='1439' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mutex_trylock_recursive' mangled-name='mutex_trylock_recursive' filepath='kernel/locking/mutex.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_trylock_recursive'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='92' column='1'/>
+        <return type-id='9a6ea243'/>
+      </function-decl>
+      <function-decl name='mutex_trylock' mangled-name='mutex_trylock' filepath='kernel/locking/mutex.c' line='1421' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_trylock'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='1421' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mutex_lock_interruptible' mangled-name='mutex_lock_interruptible' filepath='kernel/locking/mutex.c' line='1317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_lock_interruptible'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='1317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='mutex_is_locked' mangled-name='mutex_is_locked' filepath='kernel/locking/mutex.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mutex_is_locked'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='85' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__mutex_init' mangled-name='__mutex_init' filepath='kernel/locking/mutex.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__mutex_init'>
+        <parameter type-id='e0ea832a' name='lock' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/locking/mutex.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/locking/rtmutex.c' language='LANG_C89'>
+      <class-decl name='rt_mutex' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/rtmutex.h' line='30' column='1' id='dd823037'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/rtmutex.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waiters' type-id='6fe1603d' visibility='default' filepath='include/linux/rtmutex.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='owner' type-id='f23e2572' visibility='default' filepath='include/linux/rtmutex.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dd823037' size-in-bits='64' id='3992a90f'/>
+      <function-decl name='rt_mutex_trylock' mangled-name='rt_mutex_trylock' filepath='kernel/locking/rtmutex.c' line='1581' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rt_mutex_trylock'>
+        <parameter type-id='3992a90f' name='lock' filepath='kernel/locking/rtmutex.c' line='1581' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/locking/rwsem.c' language='LANG_C89'>
+      <pointer-type-def type-id='f19fdb93' size-in-bits='64' id='9b58df93'/>
+      <function-decl name='down_read' mangled-name='down_read' filepath='kernel/locking/rwsem.c' line='1526' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_read'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1526' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='up_write' mangled-name='up_write' filepath='kernel/locking/rwsem.c' line='1632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up_write'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__init_rwsem' mangled-name='__init_rwsem' filepath='kernel/locking/rwsem.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__init_rwsem'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='327' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/locking/rwsem.c' line='327' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/locking/rwsem.c' line='328' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='up_read' mangled-name='up_read' filepath='kernel/locking/rwsem.c' line='1622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up_read'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1622' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='downgrade_write' mangled-name='downgrade_write' filepath='kernel/locking/rwsem.c' line='1643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='downgrade_write'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1643' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='down_write' mangled-name='down_write' filepath='kernel/locking/rwsem.c' line='1579' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_write'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1579' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='down_read_trylock' mangled-name='down_read_trylock' filepath='kernel/locking/rwsem.c' line='1566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_read_trylock'>
+        <parameter type-id='9b58df93' name='sem' filepath='kernel/locking/rwsem.c' line='1566' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/locking/semaphore.c' language='LANG_C89'>
+      <class-decl name='semaphore' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/semaphore.h' line='15' column='1' id='011244e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/semaphore.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/linux/semaphore.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_list' type-id='72f469ec' visibility='default' filepath='include/linux/semaphore.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='011244e5' size-in-bits='64' id='a965a5b5'/>
+      <function-decl name='up' mangled-name='up' filepath='kernel/locking/semaphore.c' line='178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='up'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='178' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='down_trylock' mangled-name='down_trylock' filepath='kernel/locking/semaphore.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_trylock'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='130' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down_timeout' mangled-name='down_timeout' filepath='kernel/locking/semaphore.c' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_timeout'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='155' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/locking/semaphore.c' line='155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down_interruptible' mangled-name='down_interruptible' filepath='kernel/locking/semaphore.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down_interruptible'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='75' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='down' mangled-name='down' filepath='kernel/locking/semaphore.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='down'>
+        <parameter type-id='a965a5b5' name='sem' filepath='kernel/locking/semaphore.c' line='53' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/locking/spinlock.c' language='LANG_C89'>
+      <pointer-type-def type-id='f5c90b3f' size-in-bits='64' id='704982b4'/>
+      <pointer-type-def type-id='ac16795b' size-in-bits='64' id='6a6de1b0'/>
+      <function-decl name='_raw_spin_lock' mangled-name='_raw_spin_lock' filepath='kernel/locking/spinlock.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock' mangled-name='_raw_spin_unlock' filepath='kernel/locking/spinlock.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='181' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irqsave' mangled-name='_raw_spin_lock_irqsave' filepath='kernel/locking/spinlock.c' line='157' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irqsave'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='157' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irqrestore' mangled-name='_raw_spin_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irqrestore'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='189' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/locking/spinlock.c' line='189' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock' mangled-name='_raw_read_unlock' filepath='kernel/locking/spinlock.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='253' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock' mangled-name='_raw_write_lock' filepath='kernel/locking/spinlock.c' line='293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='293' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock' mangled-name='_raw_write_unlock' filepath='kernel/locking/spinlock.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='325' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_irq' mangled-name='_raw_spin_lock_irq' filepath='kernel/locking/spinlock.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_irq'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_irq' mangled-name='_raw_spin_unlock_irq' filepath='kernel/locking/spinlock.c' line='197' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_irq'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='197' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_trylock' mangled-name='_raw_spin_trylock' filepath='kernel/locking/spinlock.c' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_trylock'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='133' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_irqrestore' mangled-name='_raw_write_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='333' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_irqrestore'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='333' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/locking/spinlock.c' line='333' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_irq' mangled-name='_raw_write_unlock_irq' filepath='kernel/locking/spinlock.c' line='341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_unlock_bh' mangled-name='_raw_write_unlock_bh' filepath='kernel/locking/spinlock.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_unlock_bh'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='349' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_irqsave' mangled-name='_raw_write_lock_irqsave' filepath='kernel/locking/spinlock.c' line='301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_irqsave'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='301' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_irq' mangled-name='_raw_write_lock_irq' filepath='kernel/locking/spinlock.c' line='309' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='309' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_write_lock_bh' mangled-name='_raw_write_lock_bh' filepath='kernel/locking/spinlock.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_write_lock_bh'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='317' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_unlock_bh' mangled-name='_raw_spin_unlock_bh' filepath='kernel/locking/spinlock.c' line='205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_unlock_bh'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='205' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_spin_trylock_bh' mangled-name='_raw_spin_trylock_bh' filepath='kernel/locking/spinlock.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_trylock_bh'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='141' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_raw_spin_lock_bh' mangled-name='_raw_spin_lock_bh' filepath='kernel/locking/spinlock.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_spin_lock_bh'>
+        <parameter type-id='704982b4' name='lock' filepath='kernel/locking/spinlock.c' line='173' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_irqrestore' mangled-name='_raw_read_unlock_irqrestore' filepath='kernel/locking/spinlock.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_irqrestore'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='261' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/locking/spinlock.c' line='261' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_irq' mangled-name='_raw_read_unlock_irq' filepath='kernel/locking/spinlock.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_unlock_bh' mangled-name='_raw_read_unlock_bh' filepath='kernel/locking/spinlock.c' line='277' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_unlock_bh'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='277' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_irqsave' mangled-name='_raw_read_lock_irqsave' filepath='kernel/locking/spinlock.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_irqsave'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='229' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_irq' mangled-name='_raw_read_lock_irq' filepath='kernel/locking/spinlock.c' line='237' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_irq'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='237' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock_bh' mangled-name='_raw_read_lock_bh' filepath='kernel/locking/spinlock.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock_bh'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='245' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='_raw_read_lock' mangled-name='_raw_read_lock' filepath='kernel/locking/spinlock.c' line='221' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_raw_read_lock'>
+        <parameter type-id='6a6de1b0' name='lock' filepath='kernel/locking/spinlock.c' line='221' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/module.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d83a2db1' size-in-bits='infinite' id='7cfae8e1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='def413c9' size-in-bits='infinite' id='ae08da59'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='module_sect_attr' size-in-bits='512' is-struct='yes' visibility='default' filepath='kernel/module.c' line='1542' column='1' id='def413c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='battr' type-id='d83a2db1' visibility='default' filepath='kernel/module.c' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='address' type-id='7359adad' visibility='default' filepath='kernel/module.c' line='1544' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='modversion_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/module.h' line='36' column='1' id='68a2869e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='crc' type-id='7359adad' visibility='default' filepath='include/linux/module.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='6093ff7c' visibility='default' filepath='include/linux/module.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9493d3c9' size-in-bits='64' id='eefd7061'/>
+      <pointer-type-def type-id='68a2869e' size-in-bits='64' id='3a498c74'/>
+      <pointer-type-def type-id='d2d812d1' size-in-bits='64' id='e525e121'/>
+      <function-decl name='try_module_get' mangled-name='try_module_get' filepath='kernel/module.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='try_module_get'>
+        <parameter type-id='2730d015' name='module' filepath='kernel/module.c' line='1132' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='module_put' mangled-name='module_put' filepath='kernel/module.c' line='1151' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='module_put'>
+        <parameter type-id='2730d015' name='module' filepath='kernel/module.c' line='1151' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='module_layout' mangled-name='module_layout' filepath='kernel/module.c' line='4745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='module_layout'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/module.c' line='4745' column='1'/>
+        <parameter type-id='3a498c74' name='ver' filepath='kernel/module.c' line='4746' column='1'/>
+        <parameter type-id='a7c6e908' name='kp' filepath='kernel/module.c' line='4747' column='1'/>
+        <parameter type-id='eefd7061' name='ks' filepath='kernel/module.c' line='4748' column='1'/>
+        <parameter type-id='e525e121' name='tp' filepath='kernel/module.c' line='4749' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__module_get' mangled-name='__module_get' filepath='kernel/module.c' line='1121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__module_get'>
+        <parameter type-id='2730d015' name='module' filepath='kernel/module.c' line='1121' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/notifier.c' language='LANG_C89'>
+      <class-decl name='srcu_notifier_head' size-in-bits='5504' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='74' column='1' id='ffc4a47a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/notifier.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcu' type-id='e4a7867c' visibility='default' filepath='include/linux/notifier.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blocking_notifier_head' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='65' column='1' id='708c2394'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rwsem' type-id='f19fdb93' visibility='default' filepath='include/linux/notifier.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='67' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='raw_notifier_head' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='70' column='1' id='96e74f5f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dbd58f6e' size-in-bits='64' id='02162584'/>
+      <pointer-type-def type-id='708c2394' size-in-bits='64' id='282b7312'/>
+      <pointer-type-def type-id='96e74f5f' size-in-bits='64' id='dc20ab67'/>
+      <pointer-type-def type-id='ffc4a47a' size-in-bits='64' id='b2cb1838'/>
+      <function-decl name='srcu_init_notifier_head' mangled-name='srcu_init_notifier_head' filepath='kernel/notifier.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_init_notifier_head'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='528' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='atomic_notifier_chain_register' mangled-name='atomic_notifier_chain_register' filepath='kernel/notifier.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_chain_register'>
+        <parameter type-id='02162584' name='nh' filepath='kernel/notifier.c' line='126' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='127' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blocking_notifier_chain_register' mangled-name='blocking_notifier_chain_register' filepath='kernel/notifier.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_chain_register'>
+        <parameter type-id='282b7312' name='nh' filepath='kernel/notifier.c' line='218' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='219' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blocking_notifier_chain_unregister' mangled-name='blocking_notifier_chain_unregister' filepath='kernel/notifier.c' line='271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_chain_unregister'>
+        <parameter type-id='282b7312' name='nh' filepath='kernel/notifier.c' line='271' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='272' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='atomic_notifier_chain_unregister' mangled-name='atomic_notifier_chain_unregister' filepath='kernel/notifier.c' line='148' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_chain_unregister'>
+        <parameter type-id='02162584' name='nh' filepath='kernel/notifier.c' line='148' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='149' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='atomic_notifier_call_chain' mangled-name='atomic_notifier_call_chain' filepath='kernel/notifier.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='atomic_notifier_call_chain'>
+        <parameter type-id='02162584' name='nh' filepath='kernel/notifier.c' line='195' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='196' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_chain_unregister' mangled-name='srcu_notifier_chain_unregister' filepath='kernel/notifier.c' line='456' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_chain_unregister'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='456' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_chain_register' mangled-name='srcu_notifier_chain_register' filepath='kernel/notifier.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_chain_register'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='426' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='427' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='srcu_notifier_call_chain' mangled-name='srcu_notifier_call_chain' filepath='kernel/notifier.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='srcu_notifier_call_chain'>
+        <parameter type-id='b2cb1838' name='nh' filepath='kernel/notifier.c' line='509' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='510' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='510' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_die_notifier' mangled-name='register_die_notifier' filepath='kernel/notifier.c' line='558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_die_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/notifier.c' line='558' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='raw_notifier_chain_unregister' mangled-name='raw_notifier_chain_unregister' filepath='kernel/notifier.c' line='369' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_chain_unregister'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='369' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='370' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='raw_notifier_chain_register' mangled-name='raw_notifier_chain_register' filepath='kernel/notifier.c' line='352' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_chain_register'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='352' column='1'/>
+        <parameter type-id='d504f73d' name='n' filepath='kernel/notifier.c' line='353' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='raw_notifier_call_chain' mangled-name='raw_notifier_call_chain' filepath='kernel/notifier.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='raw_notifier_call_chain'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='403' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='404' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='404' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='blocking_notifier_call_chain' mangled-name='blocking_notifier_call_chain' filepath='kernel/notifier.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='blocking_notifier_call_chain'>
+        <parameter type-id='282b7312' name='nh' filepath='kernel/notifier.c' line='330' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='331' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='331' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__raw_notifier_call_chain' mangled-name='__raw_notifier_call_chain' filepath='kernel/notifier.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_notifier_call_chain'>
+        <parameter type-id='dc20ab67' name='nh' filepath='kernel/notifier.c' line='395' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/notifier.c' line='396' column='1'/>
+        <parameter type-id='eaa32e2f' name='v' filepath='kernel/notifier.c' line='396' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_to_call' filepath='kernel/notifier.c' line='397' column='1'/>
+        <parameter type-id='7292109c' name='nr_calls' filepath='kernel/notifier.c' line='397' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/panic.c' language='LANG_C89'>
+      <type-decl name='variadic parameter type' id='2c1145c5'/>
+      <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='dbd58f6e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='d504f73d' visibility='default' filepath='include/linux/notifier.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='notifier_block' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/notifier.h' line='54' column='1' id='9b08f7cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='notifier_call' type-id='0ec8c658' 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='d504f73d' 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='95e97e5e' visibility='default' filepath='include/linux/notifier.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='notifier_fn_t' type-id='38a7cb79' filepath='include/linux/notifier.h' line='51' column='1' id='0ec8c658'/>
+      <pointer-type-def type-id='294be38d' size-in-bits='64' id='38a7cb79'/>
+      <pointer-type-def type-id='9b08f7cd' size-in-bits='64' id='d504f73d'/>
+      <var-decl name='panic_timeout' type-id='95e97e5e' mangled-name='panic_timeout' visibility='default' filepath='kernel/panic.c' line='48' column='1' elf-symbol-id='panic_timeout'/>
+      <var-decl name='panic_notifier_list' type-id='dbd58f6e' mangled-name='panic_notifier_list' visibility='default' filepath='kernel/panic.c' line='59' column='1' elf-symbol-id='panic_notifier_list'/>
+      <function-decl name='panic' mangled-name='panic' filepath='kernel/panic.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='panic'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/panic.c' line='167' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__warn_printk' mangled-name='__warn_printk' filepath='kernel/panic.c' line='621' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__warn_printk'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/panic.c' line='621' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__stack_chk_fail' mangled-name='__stack_chk_fail' filepath='kernel/panic.c' line='665' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__stack_chk_fail'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='294be38d'>
+        <parameter type-id='d504f73d'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/params.c' language='LANG_C89'>
+      <var-decl name='param_ops_byte' type-id='95d0d4e8' mangled-name='param_ops_byte' visibility='default' filepath='kernel/params.c' line='236' column='1' elf-symbol-id='param_ops_byte'/>
+      <var-decl name='param_ops_ushort' type-id='95d0d4e8' mangled-name='param_ops_ushort' visibility='default' filepath='kernel/params.c' line='238' column='1' elf-symbol-id='param_ops_ushort'/>
+      <var-decl name='param_ops_int' type-id='95d0d4e8' mangled-name='param_ops_int' visibility='default' filepath='kernel/params.c' line='239' column='1' elf-symbol-id='param_ops_int'/>
+      <var-decl name='param_ops_uint' type-id='95d0d4e8' mangled-name='param_ops_uint' visibility='default' filepath='kernel/params.c' line='240' column='1' elf-symbol-id='param_ops_uint'/>
+      <var-decl name='param_ops_long' type-id='95d0d4e8' mangled-name='param_ops_long' visibility='default' filepath='kernel/params.c' line='241' column='1' elf-symbol-id='param_ops_long'/>
+      <var-decl name='param_ops_ulong' type-id='95d0d4e8' mangled-name='param_ops_ulong' visibility='default' filepath='kernel/params.c' line='242' column='1' elf-symbol-id='param_ops_ulong'/>
+      <var-decl name='param_ops_ullong' type-id='95d0d4e8' mangled-name='param_ops_ullong' visibility='default' filepath='kernel/params.c' line='243' column='1' elf-symbol-id='param_ops_ullong'/>
+      <var-decl name='param_ops_charp' type-id='95d0d4e8' mangled-name='param_ops_charp' visibility='default' filepath='kernel/params.c' line='280' column='1' elf-symbol-id='param_ops_charp'/>
+      <var-decl name='param_ops_bool' type-id='95d0d4e8' mangled-name='param_ops_bool' visibility='default' filepath='kernel/params.c' line='305' column='1' elf-symbol-id='param_ops_bool'/>
+      <var-decl name='param_ops_bint' type-id='95d0d4e8' mangled-name='param_ops_bint' visibility='default' filepath='kernel/params.c' line='386' column='1' elf-symbol-id='param_ops_bint'/>
+      <var-decl name='param_array_ops' type-id='95d0d4e8' mangled-name='param_array_ops' visibility='default' filepath='kernel/params.c' line='484' column='1' elf-symbol-id='param_array_ops'/>
+      <var-decl name='param_ops_string' type-id='95d0d4e8' mangled-name='param_ops_string' visibility='default' filepath='kernel/params.c' line='512' column='1' elf-symbol-id='param_ops_string'/>
+      <function-decl name='param_set_int' mangled-name='param_set_int' filepath='kernel/params.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_int'>
+        <parameter type-id='80f4b756' name='val' filepath='kernel/params.c' line='239' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_set_copystring' mangled-name='param_set_copystring' filepath='kernel/params.c' line='491' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_copystring'>
+        <parameter type-id='80f4b756' name='val' filepath='kernel/params.c' line='491' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_set_bool' mangled-name='param_set_bool' filepath='kernel/params.c' line='288' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_set_bool'>
+        <parameter type-id='80f4b756' name='val' filepath='kernel/params.c' line='288' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='288' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_get_string' mangled-name='param_get_string' filepath='kernel/params.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_get_string'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/params.c' line='505' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='505' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='param_get_int' mangled-name='param_get_int' filepath='kernel/params.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='param_get_int'>
+        <parameter type-id='26a90f95' name='buffer' filepath='kernel/params.c' line='239' column='1'/>
+        <parameter type-id='edcbd723' name='kp' filepath='kernel/params.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_param_unlock' mangled-name='kernel_param_unlock' filepath='kernel/params.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_param_unlock'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/params.c' line='588' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kernel_param_lock' mangled-name='kernel_param_lock' filepath='kernel/params.c' line='583' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_param_lock'>
+        <parameter type-id='2730d015' name='mod' filepath='kernel/params.c' line='583' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/pid.c' language='LANG_C89'>
+      <function-decl name='put_pid' mangled-name='put_pid' filepath='kernel/pid.c' line='104' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_pid'>
+        <parameter type-id='b94e5398' name='pid' filepath='kernel/pid.c' line='104' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pid_task' mangled-name='pid_task' filepath='kernel/pid.c' line='330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pid_task'>
+        <parameter type-id='b94e5398' name='pid' filepath='kernel/pid.c' line='330' column='1'/>
+        <parameter type-id='ce78cf46' name='type' filepath='kernel/pid.c' line='330' column='1'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='__task_pid_nr_ns' mangled-name='__task_pid_nr_ns' filepath='kernel/pid.c' line='427' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__task_pid_nr_ns'>
+        <parameter type-id='f23e2572' name='task' filepath='kernel/pid.c' line='427' column='1'/>
+        <parameter type-id='ce78cf46' name='type' filepath='kernel/pid.c' line='427' column='1'/>
+        <parameter type-id='b816e1d0' name='ns' filepath='kernel/pid.c' line='428' column='1'/>
+        <return type-id='587f89d2'/>
+      </function-decl>
+      <function-decl name='get_pid_task' mangled-name='get_pid_task' filepath='kernel/pid.c' line='383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_pid_task'>
+        <parameter type-id='b94e5398' name='pid' filepath='kernel/pid.c' line='383' column='1'/>
+        <parameter type-id='ce78cf46' name='type' filepath='kernel/pid.c' line='383' column='1'/>
+        <return type-id='f23e2572'/>
+      </function-decl>
+      <function-decl name='find_vpid' mangled-name='find_vpid' filepath='kernel/pid.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_vpid'>
+        <parameter type-id='95e97e5e' name='nr' filepath='kernel/pid.c' line='268' column='1'/>
+        <return type-id='b94e5398'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/power/main.c' language='LANG_C89'>
+      <function-decl name='unregister_pm_notifier' mangled-name='unregister_pm_notifier' filepath='kernel/power/main.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pm_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/power/main.c' line='77' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_pm_notifier' mangled-name='register_pm_notifier' filepath='kernel/power/main.c' line='71' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pm_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/power/main.c' line='71' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/power/qos.c' language='LANG_C89'>
+      <class-decl name='pm_qos_request' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='43' column='1' id='cd6fc142'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pm_qos_class' type-id='95e97e5e' visibility='default' filepath='include/linux/pm_qos.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/linux/pm_qos.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='freq_qos_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='96' column='1' id='da4cc8f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1df5cca8' visibility='default' filepath='include/linux/pm_qos.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pnode' type-id='e3a91a7c' visibility='default' filepath='include/linux/pm_qos.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='qos' type-id='1351457a' visibility='default' filepath='include/linux/pm_qos.h' line='99' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='freq_qos_req_type' filepath='include/linux/pm_qos.h' line='84' column='1' id='1df5cca8'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='FREQ_QOS_MIN' value='1'/>
+        <enumerator name='FREQ_QOS_MAX' value='2'/>
+      </enum-decl>
+      <class-decl name='freq_constraints' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/linux/pm_qos.h' line='89' column='1' id='7ca99f8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_freq' type-id='4ad5b81b' visibility='default' filepath='include/linux/pm_qos.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_freq_notifiers' type-id='708c2394' visibility='default' filepath='include/linux/pm_qos.h' line='93' 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='66' column='1' id='4ad5b81b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='57b0eed2' visibility='default' filepath='include/linux/pm_qos.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='default_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='no_constraint_value' type-id='a7832498' visibility='default' filepath='include/linux/pm_qos.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='1389f6b6' visibility='default' filepath='include/linux/pm_qos.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='notifiers' type-id='282b7312' visibility='default' filepath='include/linux/pm_qos.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='pm_qos_type' filepath='include/linux/pm_qos.h' line='54' column='1' id='1389f6b6'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='7ca99f8c' size-in-bits='64' id='1351457a'/>
+      <pointer-type-def type-id='da4cc8f3' size-in-bits='64' id='3fdf7ca3'/>
+      <pointer-type-def type-id='cd6fc142' size-in-bits='64' id='221c3010'/>
+      <function-decl name='pm_qos_update_request' mangled-name='pm_qos_update_request' filepath='kernel/power/qos.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_update_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='417' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='kernel/power/qos.c' line='418' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_request_active' mangled-name='pm_qos_request_active' filepath='kernel/power/qos.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_request_active'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='344' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_qos_remove_request' mangled-name='pm_qos_remove_request' filepath='kernel/power/qos.c' line='470' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_remove_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='470' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_remove_notifier' mangled-name='pm_qos_remove_notifier' filepath='kernel/power/qos.c' line='519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_remove_notifier'>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='519' column='1'/>
+        <parameter type-id='d504f73d' name='notifier' filepath='kernel/power/qos.c' line='519' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='pm_qos_add_request' mangled-name='pm_qos_add_request' filepath='kernel/power/qos.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_add_request'>
+        <parameter type-id='221c3010' name='req' filepath='kernel/power/qos.c' line='389' column='1'/>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='390' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='kernel/power/qos.c' line='390' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pm_qos_add_notifier' mangled-name='pm_qos_add_notifier' filepath='kernel/power/qos.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pm_qos_add_notifier'>
+        <parameter type-id='95e97e5e' name='pm_qos_class' filepath='kernel/power/qos.c' line='499' column='1'/>
+        <parameter type-id='d504f73d' name='notifier' filepath='kernel/power/qos.c' line='499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_update_request' mangled-name='freq_qos_update_request' filepath='kernel/power/qos.c' line='791' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_update_request'>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='791' column='1'/>
+        <parameter type-id='a7832498' name='new_value' filepath='kernel/power/qos.c' line='791' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_remove_request' mangled-name='freq_qos_remove_request' filepath='kernel/power/qos.c' line='817' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_remove_request'>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='817' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='freq_qos_add_request' mangled-name='freq_qos_add_request' filepath='kernel/power/qos.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_qos_add_request'>
+        <parameter type-id='1351457a' name='qos' filepath='kernel/power/qos.c' line='755' column='1'/>
+        <parameter type-id='3fdf7ca3' name='req' filepath='kernel/power/qos.c' line='756' column='1'/>
+        <parameter type-id='1df5cca8' name='type' filepath='kernel/power/qos.c' line='757' column='1'/>
+        <parameter type-id='a7832498' name='value' filepath='kernel/power/qos.c' line='757' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/power/suspend.c' language='LANG_C89'>
+      <var-decl name='pm_suspend_global_flags' type-id='f0981eeb' mangled-name='pm_suspend_global_flags' visibility='default' filepath='kernel/power/suspend.c' line='55' column='1' elf-symbol-id='pm_suspend_global_flags'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/printk/printk.c' language='LANG_C89'>
+      <class-decl name='console' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/console.h' line='145' column='1' id='d8b78162'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' 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='94639d2a' 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='57c9915e' 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='3805964c' 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='953b12f8' 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='304a6cc4' 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='c859c465' 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='a2185560' 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='a2185560' 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='95e97e5e' 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='eaa32e2f' 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='b9aa0100' visibility='default' filepath='include/linux/console.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='va_list' type-id='7f896fb4' filepath='prebuilts-master/clang/host/linux-x86/clang-r416183b/lib64/clang/12.0.5/include/stdarg.h' line='14' column='1' id='2aee9912'/>
+      <typedef-decl name='__builtin_va_list' type-id='5f919c1f' filepath='kernel/printk/printk.c' line='1646' column='1' id='7f896fb4'/>
+      <class-decl name='__va_list' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1' id='5f919c1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__stack' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__gr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__vr_top' type-id='eaa32e2f' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='__gr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='__vr_offs' type-id='95e97e5e' visibility='default' filepath='kernel/printk/printk.c' line='1646' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d8b78162' size-in-bits='64' id='b9aa0100'/>
+      <pointer-type-def type-id='0da72d62' size-in-bits='64' id='304a6cc4'/>
+      <pointer-type-def type-id='1b343ea9' size-in-bits='64' id='c859c465'/>
+      <pointer-type-def type-id='92a295b4' size-in-bits='64' id='57c9915e'/>
+      <pointer-type-def type-id='c0f05602' size-in-bits='64' id='3805964c'/>
+      <pointer-type-def type-id='06177fb0' size-in-bits='64' id='94639d2a'/>
+      <var-decl name='console_printk' type-id='2020bac4' mangled-name='console_printk' visibility='default' filepath='kernel/printk/printk.c' line='63' column='1' elf-symbol-id='console_printk'/>
+      <var-decl name='ignore_console_lock_warning' type-id='49178f86' mangled-name='ignore_console_lock_warning' visibility='default' filepath='kernel/printk/printk.c' line='71' column='1' elf-symbol-id='ignore_console_lock_warning'/>
+      <var-decl name='console_suspend_enabled' type-id='b50a4934' mangled-name='console_suspend_enabled' visibility='default' filepath='kernel/printk/printk.c' line='2258' column='1' elf-symbol-id='console_suspend_enabled'/>
+      <function-decl name='console_unlock' mangled-name='console_unlock' filepath='kernel/printk/printk.c' line='2405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_console' mangled-name='register_console' filepath='kernel/printk/printk.c' line='2686' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_console'>
+        <parameter type-id='b9aa0100' name='newcon' filepath='kernel/printk/printk.c' line='2686' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <var-decl name='oops_in_progress' type-id='95e97e5e' mangled-name='oops_in_progress' visibility='default' filepath='kernel/printk/printk.c' line='78' column='1' elf-symbol-id='oops_in_progress'/>
+      <function-decl name='printk' mangled-name='printk' filepath='kernel/printk/printk.c' line='2078' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printk'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/printk/printk.c' line='2078' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='console_trylock' mangled-name='console_trylock' filepath='kernel/printk/printk.c' line='2343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_trylock'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vprintk' mangled-name='vprintk' filepath='kernel/printk/printk.c' line='2034' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vprintk'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/printk/printk.c' line='2034' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='kernel/printk/printk.c' line='2034' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_console' mangled-name='unregister_console' filepath='kernel/printk/printk.c' line='2852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_console'>
+        <parameter type-id='b9aa0100' name='console' filepath='kernel/printk/printk.c' line='2852' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='printk_timed_ratelimit' mangled-name='printk_timed_ratelimit' filepath='kernel/printk/printk.c' line='3074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='printk_timed_ratelimit'>
+        <parameter type-id='1d2c2b85' name='caller_jiffies' filepath='kernel/printk/printk.c' line='3074' column='1'/>
+        <parameter type-id='f0981eeb' name='interval_msecs' filepath='kernel/printk/printk.c' line='3075' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='is_console_locked' mangled-name='is_console_locked' filepath='kernel/printk/printk.c' line='2357' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='is_console_locked'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='console_stop' mangled-name='console_stop' filepath='kernel/printk/printk.c' line='2639' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_stop'>
+        <parameter type-id='b9aa0100' name='console' filepath='kernel/printk/printk.c' line='2639' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='console_lock' mangled-name='console_lock' filepath='kernel/printk/printk.c' line='2323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='console_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__printk_ratelimit' mangled-name='__printk_ratelimit' filepath='kernel/printk/printk.c' line='3059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__printk_ratelimit'>
+        <parameter type-id='80f4b756' name='func' filepath='kernel/printk/printk.c' line='3059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0da72d62'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1b343ea9'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92a295b4'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c0f05602'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='c2b4b27b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06177fb0'>
+        <parameter type-id='b9aa0100'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/rcu/srcutree.c' language='LANG_C89'>
+      <function-decl name='cleanup_srcu_struct' mangled-name='cleanup_srcu_struct' filepath='kernel/rcu/srcutree.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cleanup_srcu_struct'>
+        <parameter type-id='f7d7131a' name='ssp' filepath='kernel/rcu/srcutree.c' line='373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='synchronize_srcu' mangled-name='synchronize_srcu' filepath='kernel/rcu/srcutree.c' line='998' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_srcu'>
+        <parameter type-id='f7d7131a' name='ssp' filepath='kernel/rcu/srcutree.c' line='998' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='init_srcu_struct' mangled-name='init_srcu_struct' filepath='kernel/rcu/srcutree.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_srcu_struct'>
+        <parameter type-id='f7d7131a' name='ssp' filepath='kernel/rcu/srcutree.c' line='213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/rcu/tree.c' language='LANG_C89'>
+      <typedef-decl name='rcu_callback_t' type-id='eb839374' filepath='include/linux/types.h' line='225' column='1' id='4edd56e3'/>
+      <function-decl name='rcu_barrier' mangled-name='rcu_barrier' filepath='kernel/rcu/tree.c' line='2893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rcu_barrier'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__rcu_read_unlock' mangled-name='__rcu_read_unlock' filepath='kernel/rcu/tree_plugin.h' line='372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='synchronize_rcu' mangled-name='synchronize_rcu' filepath='kernel/rcu/tree.c' line='2734' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_rcu'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='call_rcu' mangled-name='call_rcu' filepath='kernel/rcu/tree.c' line='2657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_rcu'>
+        <parameter type-id='69c138b1' name='head' filepath='kernel/rcu/tree.c' line='2657' column='1'/>
+        <parameter type-id='4edd56e3' name='func' filepath='kernel/rcu/tree.c' line='2657' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kfree_call_rcu' mangled-name='kfree_call_rcu' filepath='kernel/rcu/tree.c' line='2670' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_call_rcu'>
+        <parameter type-id='69c138b1' name='head' filepath='kernel/rcu/tree.c' line='2670' column='1'/>
+        <parameter type-id='4edd56e3' name='func' filepath='kernel/rcu/tree.c' line='2670' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__rcu_read_lock' mangled-name='__rcu_read_lock' filepath='kernel/rcu/tree_plugin.h' line='356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rcu_read_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/reboot.c' language='LANG_C89'>
+      <enum-decl name='reboot_mode' filepath='include/linux/reboot.h' line='16' column='1' id='fdb20761'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='REBOOT_UNDEFINED' value='-1'/>
+        <enumerator name='REBOOT_COLD' value='0'/>
+        <enumerator name='REBOOT_WARM' value='1'/>
+        <enumerator name='REBOOT_HARD' value='2'/>
+        <enumerator name='REBOOT_SOFT' value='3'/>
+        <enumerator name='REBOOT_GPIO' value='4'/>
+      </enum-decl>
+      <var-decl name='reboot_mode' type-id='fdb20761' mangled-name='reboot_mode' visibility='default' filepath='kernel/reboot.c' line='34' column='1' elf-symbol-id='reboot_mode'/>
+      <function-decl name='kernel_power_off' mangled-name='kernel_power_off' filepath='kernel/reboot.c' line='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_power_off'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_restart_handler' mangled-name='unregister_restart_handler' filepath='kernel/reboot.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_restart_handler'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='198' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_reboot_notifier' mangled-name='unregister_reboot_notifier' filepath='kernel/reboot.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_reboot_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_restart_handler' mangled-name='register_restart_handler' filepath='kernel/reboot.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_restart_handler'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='183' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_reboot_notifier' mangled-name='register_reboot_notifier' filepath='kernel/reboot.c' line='91' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_reboot_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='kernel/reboot.c' line='91' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='orderly_poweroff' mangled-name='orderly_poweroff' filepath='kernel/reboot.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='orderly_poweroff'>
+        <parameter type-id='b50a4934' name='force' filepath='kernel/reboot.c' line='496' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/resource.c' language='LANG_C89'>
+      <var-decl name='iomem_resource' type-id='5218160d' mangled-name='iomem_resource' visibility='default' filepath='kernel/resource.c' line='38' column='1' elf-symbol-id='iomem_resource'/>
+      <function-decl name='__request_region' mangled-name='__request_region' filepath='kernel/resource.c' line='1123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__request_region'>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1123' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1124' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1124' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/resource.c' line='1125' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='kernel/resource.c' line='1125' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='__release_region' mangled-name='__release_region' filepath='kernel/resource.c' line='1196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__release_region'>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1196' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1196' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1197' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__devm_request_region' mangled-name='__devm_request_region' filepath='kernel/resource.c' line='1451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_request_region'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/resource.c' line='1451' column='1'/>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1451' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1452' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1452' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/resource.c' line='1452' column='1'/>
+        <return type-id='c9d64c0d'/>
+      </function-decl>
+      <function-decl name='__devm_release_region' mangled-name='__devm_release_region' filepath='kernel/resource.c' line='1476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__devm_release_region'>
+        <parameter type-id='fa0b179b' name='dev' filepath='kernel/resource.c' line='1476' column='1'/>
+        <parameter type-id='c9d64c0d' name='parent' filepath='kernel/resource.c' line='1476' column='1'/>
+        <parameter type-id='acc63fdf' name='start' filepath='kernel/resource.c' line='1477' column='1'/>
+        <parameter type-id='acc63fdf' name='n' filepath='kernel/resource.c' line='1477' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='389faaf7' name='x' filepath='kernel/sched/completion.c' line='28' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_timeout' mangled-name='wait_for_completion_timeout' filepath='kernel/sched/completion.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='153' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='153' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_killable_timeout' mangled-name='wait_for_completion_killable_timeout' filepath='kernel/sched/completion.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_killable_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='261' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='262' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </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='389faaf7' name='x' filepath='kernel/sched/completion.c' line='239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_io_timeout' mangled-name='wait_for_completion_io_timeout' filepath='kernel/sched/completion.c' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_io_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='187' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='187' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_interruptible_timeout' mangled-name='wait_for_completion_interruptible_timeout' filepath='kernel/sched/completion.c' line='223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_interruptible_timeout'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='223' column='1'/>
+        <parameter type-id='7359adad' name='timeout' filepath='kernel/sched/completion.c' line='224' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='wait_for_completion_interruptible' mangled-name='wait_for_completion_interruptible' filepath='kernel/sched/completion.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_for_completion_interruptible'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='389faaf7' name='x' filepath='kernel/sched/completion.c' line='134' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='try_wait_for_completion' mangled-name='try_wait_for_completion' filepath='kernel/sched/completion.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='try_wait_for_completion'>
+        <parameter type-id='389faaf7' name='x' filepath='kernel/sched/completion.c' line='280' column='1'/>
+        <return type-id='b50a4934'/>
+      </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='389faaf7' name='x' filepath='kernel/sched/completion.c' line='313' column='1'/>
+        <return type-id='b50a4934'/>
+      </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='389faaf7' name='x' filepath='kernel/sched/completion.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sched/core.c' language='LANG_C89'>
+      <class-decl name='cpu_stop_done' is-struct='yes' visibility='default' is-declaration-only='yes' id='64c36f53'/>
+      <class-decl name='cpuidle_device_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='25ee3a49'/>
+      <class-decl name='cpuidle_driver_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='cf6b9835'/>
+      <class-decl name='cpuidle_state_kobj' is-struct='yes' visibility='default' is-declaration-only='yes' id='22d74cfc'/>
+      <array-type-def dimensions='1' type-id='97aa083d' size-in-bits='7680' id='d91bb67a'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='103da70a' size-in-bits='640' id='7b1498fd'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2e1b0751' size-in-bits='4480' id='b25dce46'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7623477' size-in-bits='13056' id='f88f3d38'>
+        <subrange length='102' type-id='7ff19f0f' id='8590b11a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='12800' id='6f53db1b'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ab0c2f56' size-in-bits='320' id='ec2b1499'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='30847fcd' size-in-bits='768' id='cf2a9adf'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='kernel_stat' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/kernel_stat.h' line='38' column='1' id='153750ef'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='irqs_sum' type-id='7359adad' visibility='default' filepath='include/linux/kernel_stat.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='softirqs' type-id='67c1c82c' visibility='default' filepath='include/linux/kernel_stat.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rq' size-in-bits='25600' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='871' column='1' id='d5ee6a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='879' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_blocked_load_update_tick' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='has_blocked_load' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nohz_tick_stopped' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nohz_flags' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nr_load_updates' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_switches' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='uclamp' type-id='cf2a9adf' visibility='default' filepath='kernel/sched/sched.h' line='900' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='uclamp_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='901' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cfs' type-id='feeb4c2f' visibility='default' filepath='kernel/sched/sched.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='rt' type-id='e648d771' visibility='default' filepath='kernel/sched/sched.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18240'>
+          <var-decl name='dl' type-id='53d038df' visibility='default' filepath='kernel/sched/sched.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='leaf_cfs_rq_list' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='tmp_alone_branch' type-id='e84b031a' visibility='default' filepath='kernel/sched/sched.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19264'>
+          <var-decl name='nr_uninterruptible' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19328'>
+          <var-decl name='curr' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19392'>
+          <var-decl name='idle' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='stop' type-id='f23e2572' visibility='default' filepath='kernel/sched/sched.h' line='925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19520'>
+          <var-decl name='next_balance' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19584'>
+          <var-decl name='prev_mm' type-id='df4b7819' visibility='default' filepath='kernel/sched/sched.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19648'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19712'>
+          <var-decl name='clock' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19968'>
+          <var-decl name='clock_task' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='clock_pelt' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='lost_idle_time' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20160'>
+          <var-decl name='nr_iowait' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20192'>
+          <var-decl name='membarrier_state' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='rd' type-id='c13bca88' visibility='default' filepath='kernel/sched/sched.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='sd' type-id='e9d32201' visibility='default' filepath='kernel/sched/sched.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='cpu_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20416'>
+          <var-decl name='cpu_capacity_orig' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20480'>
+          <var-decl name='balance_callback' type-id='69c138b1' visibility='default' filepath='kernel/sched/sched.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='idle_balance' type-id='002ac4a6' visibility='default' filepath='kernel/sched/sched.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='misfit_task_load' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20672'>
+          <var-decl name='active_balance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20704'>
+          <var-decl name='push_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20736'>
+          <var-decl name='active_balance_work' type-id='8eb07132' visibility='default' filepath='kernel/sched/sched.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21056'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21088'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21120'>
+          <var-decl name='cfs_tasks' type-id='72f469ec' visibility='default' filepath='kernel/sched/sched.h' line='964' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21504'>
+          <var-decl name='avg_rt' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22016'>
+          <var-decl name='avg_dl' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22528'>
+          <var-decl name='avg_irq' type-id='629c8d83' visibility='default' filepath='kernel/sched/sched.h' line='969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23040'>
+          <var-decl name='idle_stamp' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23104'>
+          <var-decl name='avg_idle' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23168'>
+          <var-decl name='max_idle_balance_cost' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23232'>
+          <var-decl name='prev_irq_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23296'>
+          <var-decl name='prev_steal_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23360'>
+          <var-decl name='calc_load_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23424'>
+          <var-decl name='calc_load_active' type-id='bd54fe1a' visibility='default' filepath='kernel/sched/sched.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23488'>
+          <var-decl name='hrtick_csd_pending' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='hrtick_csd' type-id='223a68bd' visibility='default' filepath='kernel/sched/sched.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23808'>
+          <var-decl name='hrtick_timer' type-id='b6993efc' visibility='default' filepath='kernel/sched/sched.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='hrtick_time' type-id='fbc017ef' visibility='default' filepath='kernel/sched/sched.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24448'>
+          <var-decl name='rq_sched_info' type-id='59ddd03d' visibility='default' filepath='kernel/sched/sched.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24704'>
+          <var-decl name='rq_cpu_time' type-id='3a47d82b' visibility='default' filepath='kernel/sched/sched.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24768'>
+          <var-decl name='yld_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24800'>
+          <var-decl name='sched_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24832'>
+          <var-decl name='sched_goidle' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24864'>
+          <var-decl name='ttwu_count' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='ttwu_local' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24960'>
+          <var-decl name='wake_list' type-id='77df194e' visibility='default' filepath='kernel/sched/sched.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25024'>
+          <var-decl name='idle_state' type-id='2e3e746d' visibility='default' filepath='kernel/sched/sched.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25152'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25216'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25280'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='1031' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_rq' size-in-bits='384' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='856' column='1' id='30847fcd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bucket' type-id='ec2b1499' visibility='default' filepath='kernel/sched/sched.h' line='858' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uclamp_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='829' column='1' id='ab0c2f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='tasks' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='831' 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='535' column='1' id='dbb6a82c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='load_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='util_avg' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='runnable_sum' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='540' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfs_bandwidth' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='334' column='1' id='68e4a3af'/>
+      <class-decl name='rt_rq' size-in-bits='13632' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='600' column='1' id='e648d771'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='active' type-id='3ac6deac' visibility='default' filepath='kernel/sched/sched.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='rt_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12960'>
+          <var-decl name='rr_nr_running' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='highest_prio' type-id='8f548118' visibility='default' filepath='kernel/sched/sched.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='rt_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='rt_nr_total' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13248'>
+          <var-decl name='pushable_tasks' type-id='57b0eed2' visibility='default' filepath='kernel/sched/sched.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13376'>
+          <var-decl name='rt_queued' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13408'>
+          <var-decl name='rt_throttled' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13440'>
+          <var-decl name='rt_time' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='rt_runtime' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='rt_runtime_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='625' 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='237' column='1' id='3ac6deac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bitmap' type-id='f05e8e77' visibility='default' filepath='kernel/sched/sched.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='queue' type-id='6f53db1b' visibility='default' filepath='kernel/sched/sched.h' line='239' 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='605' column='1' id='8f548118'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='next' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='608' 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='79' column='1' id='57b0eed2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_list' type-id='72f469ec' visibility='default' filepath='include/linux/plist.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='dl_rq' size-in-bits='832' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='641' column='1' id='53d038df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dl_nr_running' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='earliest_dl' type-id='8c6b5470' visibility='default' filepath='kernel/sched/sched.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dl_nr_migratory' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='overloaded' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pushable_dl_tasks_root' type-id='6fe1603d' visibility='default' filepath='kernel/sched/sched.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='running_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='this_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extra_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bw_ratio' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='694' 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='654' column='1' id='8c6b5470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='curr' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='656' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='root_domain' size-in-bits='14976' is-struct='yes' visibility='default' filepath='kernel/sched/sched.h' line='747' column='1' id='9cdca91a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rto_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='span' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='online' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='overload' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='overutilized' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dlo_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dlo_count' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dl_bw' type-id='51a92649' visibility='default' filepath='kernel/sched/sched.h' line='770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='cpudl' type-id='a9cef929' visibility='default' filepath='kernel/sched/sched.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rto_push_work' type-id='9281c70f' visibility='default' filepath='kernel/sched/sched.h' line='777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rto_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='rto_loop' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='780' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rto_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='rto_loop_next' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rto_loop_start' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rto_mask' type-id='b16b461b' visibility='default' filepath='kernel/sched/sched.h' line='790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='cpupri' type-id='afe3b3de' visibility='default' filepath='kernel/sched/sched.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14464'>
+          <var-decl name='max_cpu_capacity' type-id='12dbc6b5' visibility='default' filepath='kernel/sched/sched.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14656'>
+          <var-decl name='pd' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14720'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14784'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14848'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14912'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='805' 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='282' column='1' id='51a92649'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_bw' type-id='91ce1af9' visibility='default' filepath='kernel/sched/sched.h' line='285' 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='a9cef929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' 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='95e97e5e' 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='b16b461b' 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='9bf95e81' 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='4dc01f59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dl' type-id='91ce1af9' 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='95e97e5e' 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='95e97e5e' 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='afe3b3de'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pri_to_cpu' type-id='f88f3d38' 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='7292109c' 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='a7623477'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='49178f86' 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='b16b461b' 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='729' column='1' id='12dbc6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='kernel/sched/sched.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='val' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='732' 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='723' column='1' id='f2e22af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='em_pd' type-id='ce714046' visibility='default' filepath='kernel/sched/sched.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next' type-id='30f9749f' visibility='default' filepath='kernel/sched/sched.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/sched/sched.h' line='726' 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='f8d03d40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='table' type-id='57c51e1c' 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='95e97e5e' 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='c99b5ecd' 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='44399e16'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frequency' type-id='7359adad' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/energy_model.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_domain' size-in-bits='2432' is-struct='yes' visibility='default' filepath='include/linux/sched/topology.h' line='72' column='1' id='1706cf19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='child' type-id='e9d32201' visibility='default' filepath='include/linux/sched/topology.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='groups' type-id='f3dcd492' visibility='default' filepath='include/linux/sched/topology.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_interval' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='busy_factor' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='imbalance_pct' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_nice_tries' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nohz_idle' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='last_balance' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='balance_interval' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='nr_balance_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='max_newidle_lb_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='next_decay_max_lb_cost' type-id='7359adad' visibility='default' filepath='include/linux/sched/topology.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='avg_scan_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='lb_count' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='lb_failed' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='lb_balanced' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lb_imbalance' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lb_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='lb_hot_gained' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='lb_nobusyg' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='lb_nobusyq' type-id='0955670c' visibility='default' filepath='include/linux/sched/topology.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='alb_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='alb_failed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='alb_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='sbe_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sbe_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='sbe_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sbf_count' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='sbf_balanced' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sbf_pushed' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ttwu_wake_remote' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='ttwu_move_affine' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='ttwu_move_balance' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/sched/topology.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='52c6c1a9' visibility='default' filepath='include/linux/sched/topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='shared' type-id='774b23cf' visibility='default' filepath='include/linux/sched/topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='span_weight' type-id='f0981eeb' visibility='default' filepath='include/linux/sched/topology.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/topology.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='span' type-id='c99b5ecd' visibility='default' filepath='include/linux/sched/topology.h' line='150' 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='1432' column='1' id='8b6491f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='f3dcd492' visibility='default' filepath='kernel/sched/sched.h' line='1433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='group_weight' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sgc' type-id='29a48d3d' visibility='default' filepath='kernel/sched/sched.h' line='1437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='asym_prefer_cpu' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1447' 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='1413' column='1' id='ea3de64d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='kernel/sched/sched.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_capacity' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next_update' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='imbalance' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/sched/sched.h' line='1426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cpumask' type-id='c99b5ecd' visibility='default' filepath='kernel/sched/sched.h' line='1429' 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='132' column='1' id='52c6c1a9'>
+        <data-member access='public'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/linux/sched/topology.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/sched/topology.h' line='134' 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='66' column='1' id='ccc53977'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ref' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_busy_cpus' type-id='49178f86' visibility='default' filepath='include/linux/sched/topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='has_idle_cores' type-id='95e97e5e' visibility='default' filepath='include/linux/sched/topology.h' line='69' 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='8eb07132'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='87dfefa3' 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='eaa32e2f' 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='d589c913' 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='b9b212f5' filepath='include/linux/stop_machine.h' line='20' column='1' id='87dfefa3'/>
+      <typedef-decl name='call_single_data_t' type-id='bb75ea85' filepath='include/linux/smp.h' line='26' column='1' id='223a68bd'/>
+      <class-decl name='cpuidle_state' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='45' column='1' id='97aa083d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/linux/cpuidle.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='desc' type-id='16dc656a' visibility='default' filepath='include/linux/cpuidle.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='exit_latency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='power_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='target_residency' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='disabled' type-id='b50a4934' visibility='default' filepath='include/linux/cpuidle.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='enter' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enter_dead' type-id='0ba194b9' visibility='default' filepath='include/linux/cpuidle.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='enter_s2idle' type-id='738b5bc2' visibility='default' filepath='include/linux/cpuidle.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_device' size-in-bits='5696' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='84' column='1' id='14ba1df2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='enabled' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='use_deepest_state' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='poll_time_limit' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next_hrtimer' type-id='fbc017ef' visibility='default' filepath='include/linux/cpuidle.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='last_state_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_residency' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='poll_limit_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/cpuidle.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='states_usage' type-id='b25dce46' visibility='default' filepath='include/linux/cpuidle.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='kobjs' type-id='7b1498fd' visibility='default' filepath='include/linux/cpuidle.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='kobj_driver' type-id='a49b2975' visibility='default' filepath='include/linux/cpuidle.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='kobj_dev' type-id='d4f9dda1' visibility='default' filepath='include/linux/cpuidle.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/linux/cpuidle.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/cpuidle.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_state_usage' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='33' column='1' id='2e1b0751'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disable' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='usage' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='above' type-id='3a47d82b' 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='below' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='s2idle_usage' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='s2idle_time' type-id='3a47d82b' visibility='default' filepath='include/linux/cpuidle.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cpuidle_driver' size-in-bits='8128' is-struct='yes' visibility='default' filepath='include/linux/cpuidle.h' line='116' column='1' id='9488f766'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cpuidle.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/cpuidle.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bctimer' type-id='f0981eeb' visibility='default' filepath='include/linux/cpuidle.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='states' type-id='d91bb67a' visibility='default' filepath='include/linux/cpuidle.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='state_count' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7904'>
+          <var-decl name='safe_state_index' type-id='95e97e5e' visibility='default' filepath='include/linux/cpuidle.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='cpumask' type-id='74bccedd' visibility='default' filepath='include/linux/cpuidle.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8000'>
+          <var-decl name='governor' type-id='80f4b756' visibility='default' filepath='include/linux/cpuidle.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/cpuidle.h' line='134' 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='1156' column='1' id='16588ac8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='kernel/sched/sched.h' line='1157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cookie' type-id='3cb90f9b' visibility='default' filepath='kernel/sched/sched.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='clock_update_flags' type-id='f0981eeb' visibility='default' filepath='kernel/sched/sched.h' line='1165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pin_cookie' is-struct='yes' visibility='default' filepath='include/linux/lockdep.h' line='485' column='1' id='3cb90f9b'/>
+      <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='0897719a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sched_priority' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/sched/types.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sched_attr' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/sched/types.h' line='100' column='1' id='6a32253a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sched_policy' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sched_flags' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sched_nice' type-id='3158a266' visibility='default' filepath='include/uapi/linux/sched/types.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sched_priority' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sched_runtime' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sched_deadline' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sched_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/sched/types.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sched_util_min' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sched_util_max' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/sched/types.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_entry_t' type-id='504855b3' filepath='include/linux/wait.h' line='14' column='1' id='fe794aa9'/>
+      <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='504855b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' 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='eaa32e2f' 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='67119c17' 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='72f469ec' visibility='default' filepath='include/linux/wait.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='wait_queue_func_t' type-id='3e643710' filepath='include/linux/wait.h' line='16' column='1' id='67119c17'/>
+      <pointer-type-def type-id='a6892387' size-in-bits='64' id='d6e32957'/>
+      <qualified-type-def type-id='1354385d' const='yes' id='6b2a4486'/>
+      <pointer-type-def type-id='6b2a4486' size-in-bits='64' id='5f8a1ac4'/>
+      <qualified-type-def type-id='6a32253a' const='yes' id='9a07743b'/>
+      <pointer-type-def type-id='9a07743b' size-in-bits='64' id='8abbb6c3'/>
+      <qualified-type-def type-id='0897719a' const='yes' id='c4a7b189'/>
+      <pointer-type-def type-id='c4a7b189' size-in-bits='64' id='36fca399'/>
+      <pointer-type-def type-id='64c36f53' size-in-bits='64' id='d589c913'/>
+      <pointer-type-def type-id='4dc01f59' size-in-bits='64' id='9bf95e81'/>
+      <pointer-type-def type-id='14ba1df2' size-in-bits='64' id='1b0e1d00'/>
+      <pointer-type-def type-id='25ee3a49' size-in-bits='64' id='d4f9dda1'/>
+      <pointer-type-def type-id='9488f766' size-in-bits='64' id='809cdefc'/>
+      <pointer-type-def type-id='cf6b9835' size-in-bits='64' id='a49b2975'/>
+      <pointer-type-def type-id='97aa083d' size-in-bits='64' id='2e3e746d'/>
+      <pointer-type-def type-id='22d74cfc' size-in-bits='64' id='103da70a'/>
+      <pointer-type-def type-id='1354385d' size-in-bits='64' id='74bccedd'/>
+      <pointer-type-def type-id='44399e16' size-in-bits='64' id='57c51e1c'/>
+      <pointer-type-def type-id='f8d03d40' size-in-bits='64' id='ce714046'/>
+      <pointer-type-def type-id='2d2d4460' size-in-bits='64' id='738b5bc2'/>
+      <pointer-type-def type-id='0174792d' size-in-bits='64' id='0ba194b9'/>
+      <pointer-type-def type-id='2fa2db94' size-in-bits='64' id='5346c726'/>
+      <pointer-type-def type-id='5dcc12a3' size-in-bits='64' id='c3408547'/>
+      <pointer-type-def type-id='3cab519e' size-in-bits='64' id='3e643710'/>
+      <pointer-type-def type-id='f2e22af7' size-in-bits='64' id='30f9749f'/>
+      <pointer-type-def type-id='9cdca91a' size-in-bits='64' id='c13bca88'/>
+      <pointer-type-def type-id='d5ee6a94' size-in-bits='64' id='6ed6b432'/>
+      <pointer-type-def type-id='16588ac8' size-in-bits='64' id='d0163a5e'/>
+      <pointer-type-def type-id='1706cf19' size-in-bits='64' id='e9d32201'/>
+      <pointer-type-def type-id='ccc53977' size-in-bits='64' id='774b23cf'/>
+      <pointer-type-def type-id='ff2b3d10' size-in-bits='64' id='eb11624e'/>
+      <pointer-type-def type-id='8b6491f4' size-in-bits='64' id='f3dcd492'/>
+      <pointer-type-def type-id='ea3de64d' size-in-bits='64' id='29a48d3d'/>
+      <pointer-type-def type-id='158e8b98' size-in-bits='64' id='2a7b00f2'/>
+      <pointer-type-def type-id='5753d902' size-in-bits='64' id='c4b7e554'/>
+      <pointer-type-def type-id='45660d72' size-in-bits='64' id='c79c9f4c'/>
+      <pointer-type-def type-id='82e3e1cf' size-in-bits='64' id='d846ae3b'/>
+      <pointer-type-def type-id='47d2043e' size-in-bits='64' id='604374c8'/>
+      <pointer-type-def type-id='f67639d3' size-in-bits='64' id='7bca30b7'/>
+      <pointer-type-def type-id='f83bf2cd' size-in-bits='64' id='f13b7179'/>
+      <pointer-type-def type-id='24bb49a8' size-in-bits='64' id='54777a92'/>
+      <pointer-type-def type-id='ca7f7878' size-in-bits='64' id='9d640202'/>
+      <pointer-type-def type-id='504855b3' size-in-bits='64' id='db9d03e3'/>
+      <pointer-type-def type-id='fe794aa9' size-in-bits='64' id='ba9aa326'/>
+      <var-decl name='kstat' type-id='153750ef' mangled-name='kstat' visibility='default' filepath='kernel/sched/core.c' line='3738' column='1' elf-symbol-id='kstat'/>
+      <function-decl name='set_cpus_allowed_ptr' mangled-name='set_cpus_allowed_ptr' filepath='kernel/sched/core.c' line='1904' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_cpus_allowed_ptr'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='1904' column='1'/>
+        <parameter type-id='5f8a1ac4' name='new_mask' filepath='kernel/sched/core.c' line='1904' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='preempt_schedule_notrace' mangled-name='preempt_schedule_notrace' filepath='kernel/sched/core.c' line='4496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule_notrace'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='schedule' mangled-name='schedule' filepath='kernel/sched/core.c' line='4364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='set_user_nice' mangled-name='set_user_nice' filepath='kernel/sched/core.c' line='4722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_user_nice'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='4722' column='1'/>
+        <parameter type-id='bd54fe1a' name='nice' filepath='kernel/sched/core.c' line='4722' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='preempt_schedule' mangled-name='preempt_schedule' filepath='kernel/sched/core.c' line='4468' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='preempt_schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wake_up_process' mangled-name='wake_up_process' filepath='kernel/sched/core.c' line='2876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wake_up_process'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='2876' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_show_task' mangled-name='sched_show_task' filepath='kernel/sched/core.c' line='6138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_show_task'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='6138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler_nocheck' mangled-name='sched_setscheduler_nocheck' filepath='kernel/sched/core.c' line='5299' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setscheduler_nocheck'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='5299' column='1'/>
+        <parameter type-id='95e97e5e' name='policy' filepath='kernel/sched/core.c' line='5299' column='1'/>
+        <parameter type-id='36fca399' name='param' filepath='kernel/sched/core.c' line='5300' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setscheduler' mangled-name='sched_setscheduler' filepath='kernel/sched/core.c' line='5267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setscheduler'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='5267' column='1'/>
+        <parameter type-id='95e97e5e' name='policy' filepath='kernel/sched/core.c' line='5267' column='1'/>
+        <parameter type-id='36fca399' name='param' filepath='kernel/sched/core.c' line='5268' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sched_setattr' mangled-name='sched_setattr' filepath='kernel/sched/core.c' line='5274' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_setattr'>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/sched/core.c' line='5274' column='1'/>
+        <parameter type-id='8abbb6c3' name='attr' filepath='kernel/sched/core.c' line='5274' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='io_schedule' mangled-name='io_schedule' filepath='kernel/sched/core.c' line='6003' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='io_schedule'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='default_wake_function' mangled-name='default_wake_function' filepath='kernel/sched/core.c' line='4562' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='default_wake_function'>
+        <parameter type-id='ba9aa326' name='curr' filepath='kernel/sched/core.c' line='4562' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/core.c' line='4562' column='1'/>
+        <parameter type-id='95e97e5e' name='wake_flags' filepath='kernel/sched/core.c' line='4562' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/core.c' line='4563' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2d2d4460'>
+        <parameter type-id='1b0e1d00'/>
+        <parameter type-id='809cdefc'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0174792d'>
+        <parameter type-id='1b0e1d00'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2fa2db94'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='d0163a5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5dcc12a3'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3cab519e'>
+        <parameter type-id='db9d03e3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='158e8b98'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='d0163a5e'/>
+        <return type-id='f23e2572'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5753d902'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='45660d72'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82e3e1cf'>
+        <parameter type-id='6ed6b432'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47d2043e'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f67639d3'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f83bf2cd'>
+        <parameter type-id='6ed6b432'/>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24bb49a8'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='5f8a1ac4'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca7f7878'>
+        <parameter type-id='f23e2572'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sched/cpufreq.c' language='LANG_C89'>
+      <class-decl name='update_util_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/sched/cpufreq.h' line='17' column='1' id='f24c165e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='func' type-id='2cd87b91' visibility='default' filepath='include/linux/sched/cpufreq.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f24c165e' size-in-bits='64' id='f681f934'/>
+      <pointer-type-def type-id='9b3d9f4d' size-in-bits='64' id='2cd87b91'/>
+      <function-decl name='cpufreq_remove_update_util_hook' mangled-name='cpufreq_remove_update_util_hook' filepath='kernel/sched/cpufreq.c' line='57' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_remove_update_util_hook'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/sched/cpufreq.c' line='57' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cpufreq_add_update_util_hook' mangled-name='cpufreq_add_update_util_hook' filepath='kernel/sched/cpufreq.c' line='32' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpufreq_add_update_util_hook'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/sched/cpufreq.c' line='32' column='1'/>
+        <parameter type-id='f681f934' name='data' filepath='kernel/sched/cpufreq.c' line='32' column='1'/>
+        <parameter type-id='2cd87b91' name='func' filepath='kernel/sched/cpufreq.c' line='33' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='9b3d9f4d'>
+        <parameter type-id='f681f934'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sched/wait.c' language='LANG_C89'>
+      <pointer-type-def type-id='cff07063' size-in-bits='64' id='3f8b2ed3'/>
+      <function-decl name='add_wait_queue' mangled-name='add_wait_queue' filepath='kernel/sched/wait.c' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_wait_queue'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='18' column='1'/>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='18' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remove_wait_queue' mangled-name='remove_wait_queue' filepath='kernel/sched/wait.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remove_wait_queue'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='40' column='1'/>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='40' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__wake_up' mangled-name='__wake_up' filepath='kernel/sched/wait.c' line='139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wake_up'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='139' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='139' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_exclusive' filepath='kernel/sched/wait.c' line='140' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/wait.c' line='140' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='prepare_to_wait' mangled-name='prepare_to_wait' filepath='kernel/sched/wait.c' line='229' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='229' column='1'/>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='229' column='1'/>
+        <parameter type-id='95e97e5e' name='state' filepath='kernel/sched/wait.c' line='229' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='finish_wait' mangled-name='finish_wait' filepath='kernel/sched/wait.c' line='356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='finish_wait'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='356' column='1'/>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='356' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='prepare_to_wait_event' mangled-name='prepare_to_wait_event' filepath='kernel/sched/wait.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prepare_to_wait_event'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='270' column='1'/>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='270' column='1'/>
+        <parameter type-id='95e97e5e' name='state' filepath='kernel/sched/wait.c' line='270' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='woken_wake_function' mangled-name='woken_wake_function' filepath='kernel/sched/wait.c' line='443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='woken_wake_function'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='443' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='443' column='1'/>
+        <parameter type-id='95e97e5e' name='sync' filepath='kernel/sched/wait.c' line='443' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/wait.c' line='443' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wait_woken' mangled-name='wait_woken' filepath='kernel/sched/wait.c' line='418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wait_woken'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='418' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='418' column='1'/>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/sched/wait.c' line='418' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='init_wait_entry' mangled-name='init_wait_entry' filepath='kernel/sched/wait.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_wait_entry'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='261' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='kernel/sched/wait.c' line='261' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='autoremove_wake_function' mangled-name='autoremove_wake_function' filepath='kernel/sched/wait.c' line='382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='autoremove_wake_function'>
+        <parameter type-id='db9d03e3' name='wq_entry' filepath='kernel/sched/wait.c' line='382' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='382' column='1'/>
+        <parameter type-id='95e97e5e' name='sync' filepath='kernel/sched/wait.c' line='382' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='kernel/sched/wait.c' line='382' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='do_wait_intr' mangled-name='do_wait_intr' filepath='kernel/sched/wait.c' line='313' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='do_wait_intr'>
+        <parameter type-id='03d48e96' name='wq' filepath='kernel/sched/wait.c' line='313' column='1'/>
+        <parameter type-id='ba9aa326' name='wait' filepath='kernel/sched/wait.c' line='313' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__wake_up_locked' mangled-name='__wake_up_locked' filepath='kernel/sched/wait.c' line='149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__wake_up_locked'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='149' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait.c' line='149' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='kernel/sched/wait.c' line='149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__init_waitqueue_head' mangled-name='__init_waitqueue_head' filepath='kernel/sched/wait.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__init_waitqueue_head'>
+        <parameter type-id='3f8b2ed3' name='wq_head' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/sched/wait.c' line='9' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sched/wait_bit.c' language='LANG_C89'>
+      <typedef-decl name='wait_bit_action_f' type-id='7f43b3fb' filepath='include/linux/wait_bit.h' line='24' column='1' id='d04e3bd9'/>
+      <class-decl name='wait_bit_key' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/wait_bit.h' line='10' column='1' id='2aa6fa74'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='eaa32e2f' visibility='default' filepath='include/linux/wait_bit.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit_nr' type-id='95e97e5e' visibility='default' filepath='include/linux/wait_bit.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/linux/wait_bit.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d04e3bd9' size-in-bits='64' id='50c74428'/>
+      <pointer-type-def type-id='2aa6fa74' size-in-bits='64' id='307d4a12'/>
+      <function-decl name='wake_up_bit' mangled-name='wake_up_bit' filepath='kernel/sched/wait_bit.c' line='147' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wake_up_bit'>
+        <parameter type-id='eaa32e2f' name='word' filepath='kernel/sched/wait_bit.c' line='147' column='1'/>
+        <parameter type-id='95e97e5e' name='bit' filepath='kernel/sched/wait_bit.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='out_of_line_wait_on_bit_lock' mangled-name='out_of_line_wait_on_bit_lock' filepath='kernel/sched/wait_bit.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='out_of_line_wait_on_bit_lock'>
+        <parameter type-id='eaa32e2f' name='word' filepath='kernel/sched/wait_bit.c' line='111' column='1'/>
+        <parameter type-id='95e97e5e' name='bit' filepath='kernel/sched/wait_bit.c' line='111' column='1'/>
+        <parameter type-id='50c74428' name='action' filepath='kernel/sched/wait_bit.c' line='112' column='1'/>
+        <parameter type-id='f0981eeb' name='mode' filepath='kernel/sched/wait_bit.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bit_wait' mangled-name='bit_wait' filepath='kernel/sched/wait_bit.c' line='196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bit_wait'>
+        <parameter type-id='307d4a12' name='word' filepath='kernel/sched/wait_bit.c' line='196' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='kernel/sched/wait_bit.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='7f43b3fb'>
+        <parameter type-id='307d4a12'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/signal.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='80' id='811c9338'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='192' id='26f0765c'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='32' id='c213d3d4'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='28ee064c' size-in-bits='320' id='39e531ac'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='896' id='80b13f9b'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2048' id='99d12d7b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='2432' id='9dc2293d'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='4672' id='525b50d2'>
+        <subrange length='73' type-id='7ff19f0f' id='1ee2a653'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='448' id='76b91d35'>
+        <subrange length='7' type-id='7ff19f0f' id='16fc326e'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='infinite' id='a922812c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='40af3608' size-in-bits='infinite' id='7289e834'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a3274c4b' size-in-bits='5120' id='8574e02e'>
+        <subrange length='16' type-id='7ff19f0f' id='848d0938'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f8f80b0' size-in-bits='320' id='39e1fe03'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3213e875' size-in-bits='320' id='f5665670'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='531c24d0' size-in-bits='128' id='dcd9fb4c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='380c7edc' size-in-bits='1472' id='47645c1d'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f67e137c' size-in-bits='infinite' id='3f814540'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fb7c6451' size-in-bits='152' id='8f04ba62'>
+        <subrange length='19' type-id='7ff19f0f' id='448ee30f'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cfff5953' size-in-bits='384' id='7975e215'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='176' id='aa4fa8f1'>
+        <subrange length='22' type-id='7ff19f0f' id='41cf2209'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='296' id='12e4ade3'>
+        <subrange length='37' type-id='7ff19f0f' id='aa6426fb'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='32768' id='d16c6df4'>
+        <subrange length='4096' type-id='7ff19f0f' id='bc1b5ddc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='512' id='59daf3ef'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='badblocks' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/badblocks.h' line='27' column='1' id='cacf0f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/badblocks.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='unacked_exist' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shift' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='page' type-id='3df9fd28' visibility='default' filepath='include/linux/badblocks.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='changed' type-id='95e97e5e' visibility='default' filepath='include/linux/badblocks.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='lock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/badblocks.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sector' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='a42536cd' visibility='default' filepath='include/linux/badblocks.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_crypt_ctx' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk-crypto.h' line='71' column='1' id='b545ce08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bc_key' type-id='9baaf905' visibility='default' filepath='include/linux/blk-crypto.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bc_dun' type-id='20b279f0' visibility='default' filepath='include/linux/blk-crypto.h' line='73' 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='20' column='1' id='1d120221'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flush_queue_delayed' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='flush_pending_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='flush_running_idx' type-id='f0981eeb' visibility='default' filepath='block/blk.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='rq_status' type-id='f4e2facd' visibility='default' filepath='block/blk.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flush_pending_since' type-id='7359adad' visibility='default' filepath='block/blk.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_queue' type-id='e4f16420' visibility='default' filepath='block/blk.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flush_data_in_flight' type-id='72f469ec' visibility='default' filepath='block/blk.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flush_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='orig_rq' type-id='3dad1a48' visibility='default' filepath='block/blk.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='key' type-id='47479831' visibility='default' filepath='block/blk.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mq_flush_lock' type-id='fb4018a0' visibility='default' filepath='block/blk.h' line='36' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_keyslot_manager' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/linux/keyslot-manager.h' line='52' column='1' id='13fcfe64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ksm_ll_ops' type-id='85385c54' visibility='default' filepath='include/linux/keyslot-manager.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_dun_bytes_supported' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto_modes_supported' type-id='49580a63' visibility='default' filepath='include/linux/keyslot-manager.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/keyslot-manager.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_slots' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='lock' type-id='f19fdb93' visibility='default' filepath='include/linux/keyslot-manager.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='idle_slots_wait_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/keyslot-manager.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='idle_slots' type-id='72f469ec' visibility='default' filepath='include/linux/keyslot-manager.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='idle_slots_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/keyslot-manager.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='slot_hashtable' type-id='030d0b18' visibility='default' filepath='include/linux/keyslot-manager.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='log_slot_ht_size' type-id='f0981eeb' visibility='default' filepath='include/linux/keyslot-manager.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='slots' type-id='5b559658' visibility='default' filepath='include/linux/keyslot-manager.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_ksm_keyslot' size-in-bits='448' is-struct='yes' visibility='default' filepath='block/keyslot-manager.c' line='39' column='1' id='479d017a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slot_refs' type-id='49178f86' visibility='default' filepath='block/keyslot-manager.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='idle_slot_node' type-id='72f469ec' visibility='default' filepath='block/keyslot-manager.c' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='block/keyslot-manager.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key' type-id='9baaf905' visibility='default' filepath='block/keyslot-manager.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ksm' type-id='bf8a20d2' visibility='default' filepath='block/keyslot-manager.c' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_alloc_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='afd9eb4a'/>
+      <class-decl name='blk_mq_ctx' size-in-bits='2048' is-struct='yes' visibility='default' filepath='block/blk-mq.h' line='18' column='1' id='cde99b39'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='e9e9d685' visibility='default' filepath='block/blk-mq.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='block/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='index_hw' type-id='ff2536e2' visibility='default' filepath='block/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hctxs' type-id='56ac7648' visibility='default' filepath='block/blk-mq.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rq_dispatched' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rq_merged' type-id='7359adad' visibility='default' filepath='block/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rq_completed' type-id='f05e8e77' visibility='default' filepath='block/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='block/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ctxs' type-id='ceead144' visibility='default' filepath='block/blk-mq.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='block/blk-mq.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_debugfs_attr' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-mq-debugfs.h' line='9' column='1' id='d53ee986'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='block/blk-mq-debugfs.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='block/blk-mq-debugfs.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='5694e921' visibility='default' filepath='block/blk-mq-debugfs.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='9682fd8c' visibility='default' filepath='block/blk-mq-debugfs.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq_ops' type-id='943a1b48' visibility='default' filepath='block/blk-mq-debugfs.h' line='15' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_hw_ctx' size-in-bits='5120' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='15' column='1' id='e063028f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='87322991' 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='5ad6e0ef' visibility='default' filepath='include/linux/blk-mq.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/blk-mq.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='next_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='next_cpu_batch' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='sched_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='queue' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blk-mq.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fq' type-id='e118aff9' visibility='default' filepath='include/linux/blk-mq.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='ctx_map' type-id='6e051ed1' visibility='default' filepath='include/linux/blk-mq.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dispatch_from' type-id='9a335021' visibility='default' filepath='include/linux/blk-mq.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='dispatch_busy' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='type' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2352'>
+          <var-decl name='nr_ctx' type-id='8efea9e5' visibility='default' filepath='include/linux/blk-mq.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='ctxs' type-id='c9c70151' visibility='default' filepath='include/linux/blk-mq.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dispatch_wait_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-mq.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='dispatch_wait' type-id='fe794aa9' visibility='default' filepath='include/linux/blk-mq.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='wait_index' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_tags' type-id='0461ecf5' visibility='default' filepath='include/linux/blk-mq.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='queued' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='run' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='dispatched' type-id='346bc576' visibility='default' filepath='include/linux/blk-mq.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='numa_node' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='queue_num' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='nr_active' type-id='49178f86' visibility='default' filepath='include/linux/blk-mq.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='cpuhp_dead' type-id='03a4a074' visibility='default' filepath='include/linux/blk-mq.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/blk-mq.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='poll_considered' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='poll_invoked' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='poll_success' type-id='7359adad' visibility='default' filepath='include/linux/blk-mq.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='sched_debugfs_dir' type-id='27675065' visibility='default' filepath='include/linux/blk-mq.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='hctx_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='srcu' type-id='6abca080' visibility='default' filepath='include/linux/blk-mq.h' line='76' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_ops' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='146' column='1' id='b785b938'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_rq' type-id='cf544519' visibility='default' filepath='include/linux/blk-mq.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='commit_rqs' type-id='10b13b44' visibility='default' filepath='include/linux/blk-mq.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='get_budget' type-id='9712eb54' visibility='default' filepath='include/linux/blk-mq.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='put_budget' type-id='247cb56b' visibility='default' filepath='include/linux/blk-mq.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timeout' type-id='23816d7d' visibility='default' filepath='include/linux/blk-mq.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='969a6bcd' visibility='default' filepath='include/linux/blk-mq.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='complete' type-id='681aaa17' visibility='default' filepath='include/linux/blk-mq.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='init_hctx' type-id='e1f2504c' visibility='default' filepath='include/linux/blk-mq.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='exit_hctx' type-id='1fb247c2' visibility='default' filepath='include/linux/blk-mq.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='init_request' type-id='57e65d80' visibility='default' filepath='include/linux/blk-mq.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exit_request' type-id='9a2e43a6' visibility='default' filepath='include/linux/blk-mq.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='initialize_rq_fn' type-id='bbf015cd' visibility='default' filepath='include/linux/blk-mq.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cleanup_rq' type-id='ac8cd584' visibility='default' filepath='include/linux/blk-mq.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='busy' type-id='65c718a5' visibility='default' filepath='include/linux/blk-mq.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='map_queues' type-id='06a241cf' visibility='default' filepath='include/linux/blk-mq.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='show_rq' type-id='05a372cf' visibility='default' filepath='include/linux/blk-mq.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_mq_tag_set' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk-mq.h' line='93' column='1' id='651086d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='map' type-id='ffbe012f' visibility='default' filepath='include/linux/blk-mq.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_maps' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e1962c5d' visibility='default' filepath='include/linux/blk-mq.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nr_hw_queues' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='queue_depth' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reserved_tags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='cmd_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='numa_node' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-mq.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blk-mq.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk-mq.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tags' type-id='c527e30d' visibility='default' filepath='include/linux/blk-mq.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tag_list_lock' type-id='925167dc' visibility='default' filepath='include/linux/blk-mq.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tag_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-mq.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blk_queue_stats' is-struct='yes' visibility='default' is-declaration-only='yes' id='99d089ec'/>
+      <class-decl name='blk_stat_callback' size-in-bits='1088' is-struct='yes' visibility='default' filepath='block/blk-stat.h' line='19' column='1' id='be8f4983'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='block/blk-stat.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='block/blk-stat.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cpu_stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bucket_fn' type-id='484cd9e5' visibility='default' filepath='block/blk-stat.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='buckets' type-id='f0981eeb' visibility='default' filepath='block/blk-stat.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stat' type-id='253d2bfb' visibility='default' filepath='block/blk-stat.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timer_fn' type-id='454b8f82' visibility='default' filepath='block/blk-stat.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='block/blk-stat.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='block/blk-stat.h' line='62' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_cgroup_storage_map' is-struct='yes' visibility='default' is-declaration-only='yes' id='0ad68707'/>
+      <class-decl name='cgroup_taskset' is-struct='yes' visibility='default' is-declaration-only='yes' id='19596889'/>
+      <class-decl name='disk_events' size-in-bits='1792' is-struct='yes' visibility='default' filepath='block/genhd.c' line='1622' column='1' id='ec1aac50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='block/genhd.c' line='1623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='disk' type-id='33c599da' visibility='default' filepath='block/genhd.c' line='1624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='block/genhd.c' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='block_mutex' type-id='925167dc' visibility='default' filepath='block/genhd.c' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='block' type-id='95e97e5e' visibility='default' filepath='block/genhd.c' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='pending' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='clearing' type-id='f0981eeb' visibility='default' filepath='block/genhd.c' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='poll_msecs' type-id='bd54fe1a' visibility='default' filepath='block/genhd.c' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='dwork' type-id='5ad6e0ef' visibility='default' filepath='block/genhd.c' line='1633' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='event_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1344' column='1' id='5ff1273a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='efd0fdec' visibility='default' filepath='kernel/trace/trace.h' line='1345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='filter_string' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='1346' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='eventfd_ctx' is-struct='yes' visibility='default' is-declaration-only='yes' id='77dc8383'/>
+      <class-decl name='hd_geometry' is-struct='yes' visibility='default' is-declaration-only='yes' id='28e89e7e'/>
+      <class-decl name='pr_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='b45c773c'/>
+      <class-decl name='ring_buffer' size-in-bits='1920' is-struct='yes' visibility='default' filepath='kernel/events/internal.h' line='13' column='1' id='6efee8be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcount' type-id='64615833' visibility='default' filepath='kernel/events/internal.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='kernel/events/internal.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_pages' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overwrite' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='paused' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='poll' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='head' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nest' type-id='f0981eeb' visibility='default' filepath='kernel/events/internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='events' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wakeup' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='lost' type-id='dd91f264' visibility='default' filepath='kernel/events/internal.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='watermark' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='aux_watermark' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='event_lock' type-id='fb4018a0' visibility='default' filepath='kernel/events/internal.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='event_list' type-id='72f469ec' visibility='default' filepath='kernel/events/internal.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mmap_locked' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mmap_user' type-id='273a7d34' visibility='default' filepath='kernel/events/internal.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='aux_head' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='aux_nest' type-id='f0981eeb' visibility='default' filepath='kernel/events/internal.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='aux_wakeup' type-id='bd54fe1a' visibility='default' filepath='kernel/events/internal.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='aux_pgoff' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='aux_nr_pages' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='aux_overwrite' type-id='95e97e5e' visibility='default' filepath='kernel/events/internal.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='aux_mmap_count' type-id='49178f86' visibility='default' filepath='kernel/events/internal.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='aux_mmap_locked' type-id='7359adad' visibility='default' filepath='kernel/events/internal.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='kernel/events/internal.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='aux_refcount' type-id='64615833' visibility='default' filepath='kernel/events/internal.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='aux_pages' type-id='63e171df' visibility='default' filepath='kernel/events/internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='aux_priv' type-id='eaa32e2f' visibility='default' filepath='kernel/events/internal.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='user_page' type-id='4b860c99' visibility='default' filepath='kernel/events/internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='data_pages' type-id='baf98fd3' visibility='default' filepath='kernel/events/internal.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ring_buffer_iter' is-struct='yes' visibility='default' is-declaration-only='yes' id='563595d9'/>
+      <class-decl name='rq_qos' size-in-bits='320' is-struct='yes' visibility='default' filepath='block/blk-rq-qos.h' line='27' column='1' id='e0a68fea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='4a3f5a61' 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='q' type-id='e7d2a5fc' 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='id' type-id='51cb492d' 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='next' type-id='c3a28778' 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='debugfs_dir' type-id='27675065' visibility='default' filepath='block/blk-rq-qos.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='serial_icounter_struct' is-struct='yes' visibility='default' is-declaration-only='yes' id='8816ddc1'/>
+      <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='cc72711f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' 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='95e97e5e' 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='f0981eeb' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='8efea9e5' 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='a84c031d' 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='89feb1ec' 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='95e97e5e' 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='8efea9e5' 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='8efea9e5' 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='cf536864' 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='8efea9e5' 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='f0981eeb' 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='7359adad' visibility='default' filepath='include/uapi/linux/serial.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='throtl_data' is-struct='yes' visibility='default' is-declaration-only='yes' id='87b18d2f'/>
+      <class-decl name='timer_rand_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='f308a7ce'/>
+      <class-decl name='trace_array' size-in-bits='2368' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='247' column='1' id='e27b4e90'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='kernel/trace/trace.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trace_buffer' type-id='72093c11' visibility='default' filepath='kernel/trace/trace.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filtered_pids' type-id='1f6324ad' visibility='default' filepath='kernel/trace/trace.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_lock' type-id='641c41d1' visibility='default' filepath='kernel/trace/trace.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='buffer_disabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stop_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='clock_id' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_topts' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clear_trace' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='buffer_percent' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='n_err_log_entries' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='current_trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='trace_flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='trace_flags_index' type-id='fc872715' visibility='default' filepath='kernel/trace/trace.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/trace/trace.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start_lock' type-id='f5c90b3f' visibility='default' filepath='kernel/trace/trace.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='err_log' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='options' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='percpu_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_dir' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='topts' type-id='e9037327' visibility='default' filepath='kernel/trace/trace.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='systems' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='trace_marker_file' type-id='3d4ca6d2' visibility='default' filepath='kernel/trace/trace.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='tracing_cpumask' type-id='b16b461b' visibility='default' filepath='kernel/trace/trace.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='trace_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='time_stamp_abs_ref' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hist_vars' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='trace_buffer' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='177' column='1' id='72093c11'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer' type-id='8462bc54' visibility='default' filepath='kernel/trace/trace.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='17642359' visibility='default' filepath='kernel/trace/trace.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_start' type-id='91ce1af9' visibility='default' filepath='kernel/trace/trace.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tracer' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='468' column='1' id='fd1f8b7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='469' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='reset' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='start' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='472' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='stop' type-id='578c706b' visibility='default' filepath='kernel/trace/trace.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='update_thresh' type-id='30b9fb16' visibility='default' filepath='kernel/trace/trace.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pipe_open' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='476' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pipe_close' type-id='29bf40b4' visibility='default' filepath='kernel/trace/trace.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='read' type-id='43a53075' visibility='default' filepath='kernel/trace/trace.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='splice_read' type-id='0d8953a0' visibility='default' filepath='kernel/trace/trace.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='print_header' type-id='0f294852' visibility='default' filepath='kernel/trace/trace.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='print_line' type-id='cfbdf512' visibility='default' filepath='kernel/trace/trace.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_flag' type-id='d01e1ab3' visibility='default' filepath='kernel/trace/trace.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='flag_changed' type-id='e3e70e04' visibility='default' filepath='kernel/trace/trace.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='next' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='print_max' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='allow_instances' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='noboot' type-id='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='509' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='1354385d' size-in-bits='64' id='db98c084'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='39ec6fe5' size-in-bits='9152' id='be1ad65f'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='84dc82b7' size-in-bits='infinite' id='f7aeb09b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='4096' id='53b70d6c'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='infinite' id='1fdc7fa6'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='2944' id='a835e1f5'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='512' id='a8e1fb22'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='640' id='e4e01aff'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='72f469ec' size-in-bits='768' id='e4e6d6c4'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='dd91f264' size-in-bits='128' id='efa46f39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2048' id='52f6d451'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='2432' id='4f05d88f'>
+        <subrange length='38' type-id='7ff19f0f' id='aa4ccdac'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='192' id='5d34b9c7'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='97851996' size-in-bits='infinite' id='687d975e'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='e0324306' size-in-bits='1664' id='d1982c82'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ad98c82f' size-in-bits='infinite' id='31f1649b'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aac38d0b' size-in-bits='1280' id='f53c5bdb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1280' id='aca5b9e5'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b92c8d0d' size-in-bits='1600' id='68a92070'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c25adaa0' size-in-bits='infinite' id='6b9809bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='112' id='a2b7d295'>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='256' id='c8478d3d'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='736' id='bd44dad8'>
+        <subrange length='23' type-id='7ff19f0f' id='fdd0f594'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='19c2251e' size-in-bits='384' id='4e00dfcd'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='160' id='586ea944'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='192' id='5867ed7f'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='91ce1af9' size-in-bits='640' id='a4295685'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='320' id='64af1365'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='512' id='47ba3182'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='96' id='0955670c'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='192' id='3461381a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='aa6663dd'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='960' id='625e8699'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='4672' id='6bd30ceb'>
+        <subrange length='73' type-id='7ff19f0f' id='1ee2a653'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='128' id='24ae0315'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='be9189df' size-in-bits='39936' id='83aedf28'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='459f31a7' size-in-bits='512' id='9509a9de'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='caf9c470' size-in-bits='512' id='c2eeb70e'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='cgroup_subsys_state' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='134' column='1' id='7f3df443'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/cgroup-defs.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='sibling' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='rstat_css_node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='serial_nr' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='online_cnt' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='destroy_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='destroy_rwork' type-id='7c0b9fdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='parent' type-id='cfff5953' visibility='default' filepath='include/linux/cgroup-defs.h' line='181' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup' size-in-bits='18624' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='352' column='1' id='ab9643dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='self' type-id='7f3df443' visibility='default' filepath='include/linux/cgroup-defs.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='level' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='max_depth' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='nr_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='nr_dying_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='nr_populated_csets' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2464'>
+          <var-decl name='nr_populated_domain_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nr_populated_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='nr_threaded_children' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='procs_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='events_file' type-id='37a4ee40' visibility='default' filepath='include/linux/cgroup-defs.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3792'>
+          <var-decl name='subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3808'>
+          <var-decl name='old_subtree_control' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3824'>
+          <var-decl name='old_subtree_ss_mask' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='subsys' type-id='7975e215' visibility='default' filepath='include/linux/cgroup-defs.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='cset_links' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='436' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='e_csets' type-id='e4e6d6c4' visibility='default' filepath='include/linux/cgroup-defs.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='old_dom_cgrp' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='rstat_cpu' type-id='d8e759a7' visibility='default' filepath='include/linux/cgroup-defs.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='rstat_css_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='pending_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='463' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='prev_cputime' type-id='9c7bf560' visibility='default' filepath='include/linux/cgroup-defs.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='pidlists' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='470' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='pidlist_mutex' type-id='925167dc' visibility='default' filepath='include/linux/cgroup-defs.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='offline_waitq' type-id='b5ab048f' visibility='default' filepath='include/linux/cgroup-defs.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='release_agent_work' type-id='ef9025d0' visibility='default' filepath='include/linux/cgroup-defs.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='psi' type-id='12878ab3' visibility='default' filepath='include/linux/cgroup-defs.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='bpf' type-id='b80e3996' visibility='default' filepath='include/linux/cgroup-defs.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18432'>
+          <var-decl name='congestion_count' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18464'>
+          <var-decl name='freezer' type-id='ad50988b' visibility='default' filepath='include/linux/cgroup-defs.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18592'>
+          <var-decl name='ancestor_ids' type-id='1fdc7fa6' visibility='default' filepath='include/linux/cgroup-defs.h' line='492' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_file' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='120' column='1' id='37a4ee40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kn' type-id='150efd3f' visibility='default' filepath='include/linux/cgroup-defs.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='notified_at' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_timer' type-id='abe41e67' visibility='default' filepath='include/linux/cgroup-defs.h' line='124' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_root' size-in-bits='52480' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='500' column='1' id='66f1e832'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kf_root' type-id='e18defdb' visibility='default' filepath='include/linux/cgroup-defs.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subsys_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hierarchy_id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cgrp' type-id='ab9643dd' visibility='default' filepath='include/linux/cgroup-defs.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18752'>
+          <var-decl name='cgrp_ancestor_id_storage' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18784'>
+          <var-decl name='nr_cgrps' type-id='49178f86' visibility='default' filepath='include/linux/cgroup-defs.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18816'>
+          <var-decl name='root_list' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18944'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19008'>
+          <var-decl name='cgroup_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19200'>
+          <var-decl name='release_agent_path' type-id='d16c6df4' visibility='default' filepath='include/linux/cgroup-defs.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='51968'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='531' 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='304' column='1' id='a73d96cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bsync' type-id='e4d85780' visibility='default' filepath='include/linux/cgroup-defs.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_bstat' type-id='cfd8587e' visibility='default' filepath='include/linux/cgroup-defs.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='updated_children' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='updated_next' type-id='46ff135d' visibility='default' filepath='include/linux/cgroup-defs.h' line='330' 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='280' column='1' id='cfd8587e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cputime' type-id='ad6873f4' visibility='default' filepath='include/linux/cgroup-defs.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='task_cputime' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/sched/types.h' line='17' column='1' id='ad6873f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='utime' type-id='91ce1af9' visibility='default' filepath='include/linux/sched/types.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sum_exec_runtime' type-id='3a47d82b' visibility='default' filepath='include/linux/sched/types.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='psi_group' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/psi_types.h' line='128' column='1' id='12878ab3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='avgs_lock' type-id='925167dc' 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='9dc40234' 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='64af1365' 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='91ce1af9' 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='91ce1af9' 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='5ad6e0ef' visibility='default' filepath='include/linux/psi_types.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='total' type-id='a4295685' visibility='default' filepath='include/linux/psi_types.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='avg' type-id='625e8699' visibility='default' filepath='include/linux/psi_types.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='poll_task' type-id='f23e2572' visibility='default' filepath='include/linux/psi_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='poll_timer' type-id='abe41e67' visibility='default' filepath='include/linux/psi_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='poll_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/psi_types.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='poll_wakeup' type-id='49178f86' visibility='default' filepath='include/linux/psi_types.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='trigger_lock' type-id='925167dc' visibility='default' filepath='include/linux/psi_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/psi_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='nr_triggers' type-id='586ea944' visibility='default' filepath='include/linux/psi_types.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4768'>
+          <var-decl name='poll_states' type-id='19c2251e' visibility='default' filepath='include/linux/psi_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='poll_min_period' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='polling_total' type-id='64af1365' visibility='default' filepath='include/linux/psi_types.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='polling_next_update' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='polling_until' type-id='91ce1af9' visibility='default' filepath='include/linux/psi_types.h' line='165' 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='956e764e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='e14c3b11' 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='0955670c' 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='19c2251e' 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='5867ed7f' 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='91ce1af9' 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='4e00dfcd' visibility='default' filepath='include/linux/psi_types.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_bpf' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='62' column='1' id='b80e3996'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='effective' type-id='47645c1d' visibility='default' filepath='include/linux/bpf-cgroup.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='progs' type-id='a835e1f5' visibility='default' filepath='include/linux/bpf-cgroup.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='flags' type-id='bd44dad8' visibility='default' filepath='include/linux/bpf-cgroup.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='inactive' type-id='380c7edc' visibility='default' filepath='include/linux/bpf-cgroup.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/bpf-cgroup.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bpf-cgroup.h' line='81' 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='525' column='1' id='c75c7b06'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='items' type-id='3f814540' visibility='default' filepath='include/linux/bpf.h' line='527' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bpf_prog_array_item' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bpf.h' line='520' column='1' id='f67e137c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/bpf.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cgroup_storage' type-id='dcd9fb4c' visibility='default' filepath='include/linux/bpf.h' line='522' 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='42' column='1' id='15881542'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='dad3eb71' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='map' type-id='b6a33eaf' visibility='default' filepath='include/linux/bpf-cgroup.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key' type-id='d8d7111e' visibility='default' filepath='include/linux/bpf-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/bpf-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='2a8a6332' visibility='default' filepath='include/linux/bpf-cgroup.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='43' column='1' id='dad3eb71'>
+        <data-member access='public'>
+          <var-decl name='buf' type-id='b1253746' visibility='default' filepath='include/linux/bpf-cgroup.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='percpu_buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/bpf-cgroup.h' line='45' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='bpf_storage_buffer' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/bpf-cgroup.h' line='37' column='1' id='0ef5c7e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/bpf-cgroup.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/linux/bpf-cgroup.h' line='39' 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='79' column='1' id='d8d7111e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cgroup_inode_id' type-id='d3130597' visibility='default' filepath='include/uapi/linux/bpf.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='attach_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/bpf.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cgroup_freezer_state' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='333' column='1' id='ad50988b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freeze' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e_freeze' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_frozen_descendants' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nr_frozen_tasks' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='349' 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='630' column='1' id='1d115fd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css_alloc' type-id='a87691ee' visibility='default' filepath='include/linux/cgroup-defs.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='css_online' type-id='8bdbbb63' visibility='default' filepath='include/linux/cgroup-defs.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='css_offline' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='css_released' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='css_free' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='css_reset' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='css_rstat_flush' type-id='fe17c379' visibility='default' filepath='include/linux/cgroup-defs.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='css_extra_stat_show' type-id='f22a42d7' visibility='default' filepath='include/linux/cgroup-defs.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='can_attach' type-id='354bcec3' visibility='default' filepath='include/linux/cgroup-defs.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cancel_attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='attach' type-id='6484073c' visibility='default' filepath='include/linux/cgroup-defs.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='post_attach' type-id='953b12f8' visibility='default' filepath='include/linux/cgroup-defs.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='can_fork' type-id='2c2624ea' visibility='default' filepath='include/linux/cgroup-defs.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cancel_fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='fork' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='exit' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='1c9e19fb' visibility='default' filepath='include/linux/cgroup-defs.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bind' type-id='f65daff2' visibility='default' filepath='include/linux/cgroup-defs.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='early_init' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='implicit_on_dfl' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='threaded' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='warned_broken_hierarchy' type-id='b50a4934' visibility='default' filepath='include/linux/cgroup-defs.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/cgroup-defs.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='legacy_name' type-id='80f4b756' visibility='default' filepath='include/linux/cgroup-defs.h' line='699' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='root' type-id='aede2cf0' visibility='default' filepath='include/linux/cgroup-defs.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='css_idr' type-id='37ce495e' visibility='default' filepath='include/linux/cgroup-defs.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='cfts' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='711' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='dfl_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='legacy_cftypes' type-id='03054cfa' visibility='default' filepath='include/linux/cgroup-defs.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='depends_on' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='727' 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='541' column='1' id='ea2ebeac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/linux/cgroup-defs.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private' type-id='7359adad' visibility='default' filepath='include/linux/cgroup-defs.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_len' type-id='b59d7dce' visibility='default' filepath='include/linux/cgroup-defs.h' line='554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='file_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/cgroup-defs.h' line='565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ss' type-id='dc91d125' visibility='default' filepath='include/linux/cgroup-defs.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/linux/cgroup-defs.h' line='572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='kf_ops' type-id='1f2a8949' visibility='default' filepath='include/linux/cgroup-defs.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='open' type-id='964d2eb6' visibility='default' filepath='include/linux/cgroup-defs.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='release' type-id='f1825e09' visibility='default' filepath='include/linux/cgroup-defs.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='read_u64' type-id='ad13fd93' visibility='default' filepath='include/linux/cgroup-defs.h' line='582' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='read_s64' type-id='ae18a37d' visibility='default' filepath='include/linux/cgroup-defs.h' line='586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='seq_show' type-id='0131eb61' visibility='default' filepath='include/linux/cgroup-defs.h' line='589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_start' type-id='a46b05a0' visibility='default' filepath='include/linux/cgroup-defs.h' line='592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='seq_next' type-id='b6ba26fa' visibility='default' filepath='include/linux/cgroup-defs.h' line='593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='seq_stop' type-id='6ba28d1c' visibility='default' filepath='include/linux/cgroup-defs.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='write_u64' type-id='3e9fac96' visibility='default' filepath='include/linux/cgroup-defs.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='write_s64' type-id='2b0348f0' visibility='default' filepath='include/linux/cgroup-defs.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='write' type-id='17b1add7' visibility='default' filepath='include/linux/cgroup-defs.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='poll' type-id='b347e5ac' visibility='default' filepath='include/linux/cgroup-defs.h' line='618' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='poll_queue_proc' type-id='4aecccbd' filepath='include/linux/poll.h' line='37' column='1' id='650104ba'/>
+      <class-decl name='rcu_work' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/workqueue.h' line='130' column='1' id='7c0b9fdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/workqueue.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/workqueue.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='include/linux/workqueue.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_driver' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='306' column='1' id='9b27c78b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty_driver.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cdevs' type-id='5b4d58e9' visibility='default' filepath='include/linux/tty_driver.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_driver.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/tty_driver.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='name_base' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='major' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='minor_start' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_driver.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_driver.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='subtype' type-id='a2185560' visibility='default' filepath='include/linux/tty_driver.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='init_termios' type-id='2f8662b5' visibility='default' filepath='include/linux/tty_driver.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty_driver.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='proc_entry' type-id='d077e928' visibility='default' filepath='include/linux/tty_driver.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='other' type-id='c2b4b27b' visibility='default' filepath='include/linux/tty_driver.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ttys' type-id='2027e7a0' visibility='default' filepath='include/linux/tty_driver.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ports' type-id='d272d4d6' visibility='default' filepath='include/linux/tty_driver.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='termios' type-id='d910a7dd' visibility='default' filepath='include/linux/tty_driver.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='driver_state' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty_driver.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='ops' type-id='f2c18b44' visibility='default' filepath='include/linux/tty_driver.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tty_drivers' type-id='72f469ec' visibility='default' filepath='include/linux/tty_driver.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='340' 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='2f8662b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='c_iflag' type-id='241ce6f8' 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='241ce6f8' 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='241ce6f8' 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='241ce6f8' 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='fb7c6451' 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='8f04ba62' 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='6a8e8a14' 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='6a8e8a14' visibility='default' filepath='include/uapi/asm-generic/termbits.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='tcflag_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='9' column='1' id='241ce6f8'/>
+      <typedef-decl name='cc_t' type-id='002ac4a6' filepath='include/uapi/asm-generic/termbits.h' line='7' column='1' id='fb7c6451'/>
+      <typedef-decl name='speed_t' type-id='f0981eeb' filepath='include/uapi/asm-generic/termbits.h' line='8' column='1' id='6a8e8a14'/>
+      <class-decl name='tty_port' size-in-bits='3008' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='233' column='1' id='7e1e521a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buf' type-id='6b1bde38' visibility='default' filepath='include/linux/tty.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='itty' type-id='572fbdca' visibility='default' filepath='include/linux/tty.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='ops' type-id='103756a0' visibility='default' filepath='include/linux/tty.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='client_ops' type-id='8cd9dbc0' visibility='default' filepath='include/linux/tty.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/tty.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='blocked_open' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='delta_msr_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/tty.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='iflags' type-id='7359adad' visibility='default' filepath='include/linux/tty.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='console' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='low_latency' type-id='002ac4a6' visibility='default' filepath='include/linux/tty.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='buf_mutex' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='xmit_buf' type-id='cf536864' visibility='default' filepath='include/linux/tty.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='close_delay' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='closing_wait' type-id='f0981eeb' visibility='default' filepath='include/linux/tty.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='drain_delay' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2848'>
+          <var-decl name='kref' type-id='400fb07b' visibility='default' filepath='include/linux/tty.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='client_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/tty.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_bufhead' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='86' column='1' id='6b1bde38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='include/linux/tty.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/linux/tty.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priority' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sentinel' type-id='2f351d1f' visibility='default' filepath='include/linux/tty.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='free' type-id='77df194e' visibility='default' filepath='include/linux/tty.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mem_used' type-id='49178f86' visibility='default' filepath='include/linux/tty.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mem_limit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tail' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='95' 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='59' column='1' id='2f351d1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='053892cc' visibility='default' filepath='include/linux/tty.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='commit' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='read' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='c99b5ecd' visibility='default' filepath='include/linux/tty.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/tty.h' line='60' column='1' id='053892cc'>
+        <data-member access='public'>
+          <var-decl name='next' type-id='a150e667' visibility='default' filepath='include/linux/tty.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='free' type-id='c5ccfee8' visibility='default' filepath='include/linux/tty.h' line='62' 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='54' column='1' id='77df194e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='first' type-id='023b769e' visibility='default' filepath='include/linux/llist.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_port_operations' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/tty.h' line='206' column='1' id='7778009d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='carrier_raised' type-id='5626e636' visibility='default' filepath='include/linux/tty.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtr_rts' type-id='21b6f944' visibility='default' filepath='include/linux/tty.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='shutdown' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='activate' type-id='62d26ff9' visibility='default' filepath='include/linux/tty.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='destruct' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty.h' line='223' 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='226' column='1' id='2a8ca227'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='receive_buf' type-id='1a7b1e1d' visibility='default' filepath='include/linux/tty.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write_wakeup' type-id='7e5b379d' visibility='default' filepath='include/linux/tty.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_operations' size-in-bits='2304' is-struct='yes' visibility='default' filepath='include/linux/tty_driver.h' line='255' column='1' id='b8553c6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup' type-id='dd354844' visibility='default' filepath='include/linux/tty_driver.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='install' type-id='b8fa1170' visibility='default' filepath='include/linux/tty_driver.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='remove' type-id='8127e1dd' visibility='default' filepath='include/linux/tty_driver.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='574ff926' visibility='default' filepath='include/linux/tty_driver.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='35f07b8f' visibility='default' filepath='include/linux/tty_driver.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='shutdown' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cleanup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='74005b57' visibility='default' filepath='include/linux/tty_driver.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='put_char' type-id='20a1c8e7' visibility='default' filepath='include/linux/tty_driver.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flush_chars' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='write_room' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chars_in_buffer' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ioctl' type-id='18d7129a' visibility='default' filepath='include/linux/tty_driver.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_ioctl' type-id='0b8da5f6' visibility='default' filepath='include/linux/tty_driver.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_driver.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='throttle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='unthrottle' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='stop' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='start' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hangup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='break_ctl' type-id='61019833' visibility='default' filepath='include/linux/tty_driver.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_ldisc' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_driver.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='wait_until_sent' type-id='bc0ca82e' visibility='default' filepath='include/linux/tty_driver.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='send_xchar' type-id='f3d2e9a7' visibility='default' filepath='include/linux/tty_driver.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='tiocmget' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_driver.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='tiocmset' type-id='24725b0c' visibility='default' filepath='include/linux/tty_driver.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='resize' type-id='20174b1f' visibility='default' filepath='include/linux/tty_driver.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_termiox' type-id='ebf0489c' visibility='default' filepath='include/linux/tty_driver.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_icount' type-id='9cc1e100' visibility='default' filepath='include/linux/tty_driver.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='get_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='set_serial' type-id='dc2036b2' visibility='default' filepath='include/linux/tty_driver.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='show_fdinfo' type-id='25c6126f' visibility='default' filepath='include/linux/tty_driver.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='proc_show' type-id='0131eb61' visibility='default' filepath='include/linux/tty_driver.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_driver.h' line='303' 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='a818b7a0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ws_row' type-id='8efea9e5' 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='8efea9e5' 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='8efea9e5' 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='8efea9e5' 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='b855e40d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x_hflag' type-id='d315442e' 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='d315442e' 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='811c9338' 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='d315442e' 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='134' column='1' id='d3aa38f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f22a8abb' visibility='default' filepath='include/linux/tty_ldisc.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wait_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/tty_ldisc.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait_readers' type-id='f0981eeb' visibility='default' filepath='include/linux/tty_ldisc.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='write_wait' type-id='72f469ec' visibility='default' filepath='include/linux/tty_ldisc.h' line='139' 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='219' column='1' id='f87db0b6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='9d632ac5' visibility='default' filepath='include/linux/tty_ldisc.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tty' type-id='572fbdca' visibility='default' filepath='include/linux/tty_ldisc.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tty_ldisc_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/linux/tty_ldisc.h' line='176' column='1' id='053f72e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/tty_ldisc.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='close' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='flush_buffer' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='read' type-id='ac9bc941' visibility='default' filepath='include/linux/tty_ldisc.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='write' type-id='01db3d7c' visibility='default' filepath='include/linux/tty_ldisc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_ioctl' type-id='1f6f58f4' visibility='default' filepath='include/linux/tty_ldisc.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_termios' type-id='1779e61d' visibility='default' filepath='include/linux/tty_ldisc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='poll' type-id='9fe65c08' visibility='default' filepath='include/linux/tty_ldisc.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='hangup' type-id='84d8e9b4' visibility='default' filepath='include/linux/tty_ldisc.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='receive_buf' type-id='71f0211c' visibility='default' filepath='include/linux/tty_ldisc.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='write_wakeup' type-id='1ee0b597' visibility='default' filepath='include/linux/tty_ldisc.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dcd_change' type-id='aef0224d' visibility='default' filepath='include/linux/tty_ldisc.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='receive_buf2' type-id='c6e84913' visibility='default' filepath='include/linux/tty_ldisc.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/tty_ldisc.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='refcount' type-id='95e97e5e' visibility='default' filepath='include/linux/tty_ldisc.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_ldisc.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/tty_ldisc.h' line='216' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='146' column='1' id='f3e87129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_next' type-id='fb55efa1' visibility='default' filepath='include/linux/blk_types.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_disk' type-id='33c599da' visibility='default' filepath='include/linux/blk_types.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_opf' type-id='f0981eeb' visibility='default' filepath='include/linux/blk_types.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='bi_flags' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='bi_ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bi_write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='bi_status' type-id='f4e2facd' visibility='default' filepath='include/linux/blk_types.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='bi_partno' type-id='f9b06939' visibility='default' filepath='include/linux/blk_types.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bi_iter' type-id='9e0198d8' visibility='default' filepath='include/linux/blk_types.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__bi_remaining' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='bi_end_io' type-id='8213bb9f' visibility='default' filepath='include/linux/blk_types.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='bi_private' type-id='eaa32e2f' visibility='default' filepath='include/linux/blk_types.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bi_blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk_types.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bi_issue' type-id='a9b0f4f1' visibility='default' filepath='include/linux/blk_types.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bi_iocost_cost' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='bi_crypt_context' type-id='9d1360ce' visibility='default' filepath='include/linux/blk_types.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='bi_skip_dm_default_key' type-id='b50a4934' visibility='default' filepath='include/linux/blk_types.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='bi_vcnt' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='bi_max_vecs' type-id='8efea9e5' visibility='default' filepath='include/linux/blk_types.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='__bi_cnt' type-id='49178f86' visibility='default' filepath='include/linux/blk_types.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bi_io_vec' type-id='cddcb53e' visibility='default' filepath='include/linux/blk_types.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bi_pool' type-id='38b1e3a0' visibility='default' filepath='include/linux/blk_types.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='bi_inline_vecs' type-id='7289e834' visibility='default' filepath='include/linux/blk_types.h' line='214' 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='166' column='1' id='a8d380d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/genhd.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/linux/genhd.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='last_lookup' type-id='84dc82b7' visibility='default' filepath='include/linux/genhd.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='part' type-id='f7aeb09b' visibility='default' filepath='include/linux/genhd.h' line='170' 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='104' column='1' id='a388c264'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uuid' type-id='12e4ade3' visibility='default' filepath='include/linux/genhd.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='volname' type-id='47ba3182' visibility='default' filepath='include/linux/genhd.h' line='106' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='disk_stats' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/genhd.h' line='87' column='1' id='acfd9368'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nsecs' type-id='20a130cf' visibility='default' filepath='include/linux/genhd.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sectors' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ios' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='merges' type-id='3461381a' visibility='default' filepath='include/linux/genhd.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='io_ticks' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='time_in_queue' type-id='7359adad' visibility='default' filepath='include/linux/genhd.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='in_flight' type-id='efa46f39' visibility='default' filepath='include/linux/genhd.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='local_t' type-id='de878dd6' filepath='include/asm-generic/local.h' line='25' column='1' id='dd91f264'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='dd91f264' visibility='default' filepath='include/asm-generic/local.h' line='22' column='1' id='de878dd6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='f22a8abb' visibility='default' filepath='include/asm-generic/local.h' line='24' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='block_device_operations' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='1744' column='1' id='dbd58b50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='2207988a' visibility='default' filepath='include/linux/blkdev.h' line='1745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='156433b6' visibility='default' filepath='include/linux/blkdev.h' line='1746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rw_page' type-id='55f833ce' visibility='default' filepath='include/linux/blkdev.h' line='1747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='compat_ioctl' type-id='6ed32e60' visibility='default' filepath='include/linux/blkdev.h' line='1749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='check_events' type-id='4bf65d9d' visibility='default' filepath='include/linux/blkdev.h' line='1750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='media_changed' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='unlock_native_capacity' type-id='dabeff1b' visibility='default' filepath='include/linux/blkdev.h' line='1754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='revalidate_disk' type-id='f220106e' visibility='default' filepath='include/linux/blkdev.h' line='1755' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='getgeo' type-id='68a88aaa' visibility='default' filepath='include/linux/blkdev.h' line='1756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='swap_slot_free_notify' type-id='c4cac78c' visibility='default' filepath='include/linux/blkdev.h' line='1758' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='report_zones' type-id='8eee5b07' visibility='default' filepath='include/linux/blkdev.h' line='1759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/blkdev.h' line='1761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pr_ops' type-id='08d45f21' visibility='default' filepath='include/linux/blkdev.h' line='1762' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='1764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='1765' 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='70' column='1' id='18f7b101'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/memcontrol.h' line='72' 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='635c3685'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='usage' type-id='f22a8abb' 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='7359adad' 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='7359adad' 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='7359adad' 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='ea7fad85' 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='7359adad' 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='f22a8abb' 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='f22a8abb' 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='7359adad' 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='f22a8abb' 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='f22a8abb' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/page_counter.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vmpressure' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/linux/vmpressure.h' line='13' column='1' id='d6294af7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scanned' type-id='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='fb4018a0' 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='72f469ec' 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='925167dc' 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='ef9025d0' 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='159' column='1' id='a38368d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='primary' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='spare' type-id='4ec56f94' visibility='default' filepath='include/linux/memcontrol.h' line='167' 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='150' column='1' id='413be38e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='current_threshold' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='31f1649b' visibility='default' filepath='include/linux/memcontrol.h' line='156' 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='144' column='1' id='ad98c82f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='eventfd' type-id='71f2e203' visibility='default' filepath='include/linux/memcontrol.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='threshold' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_padding' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='177' column='1' id='4f5a0c96'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/memcontrol.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_vmstats_percpu' size-in-bits='7360' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='88' column='1' id='6aac043b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat' type-id='4f05d88f' visibility='default' filepath='include/linux/memcontrol.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='events' type-id='6bd30ceb' visibility='default' filepath='include/linux/memcontrol.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='nr_page_events' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='targets' type-id='3461381a' visibility='default' filepath='include/linux/memcontrol.h' line='92' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='memcg_kmem_state' filepath='include/linux/memcontrol.h' line='170' column='1' id='def0995c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1088' is-struct='yes' visibility='default' filepath='include/linux/writeback.h' line='129' column='1' id='960bf1fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/writeback.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='completions' type-id='7dc82ec2' visibility='default' filepath='include/linux/writeback.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_timer' type-id='abe41e67' visibility='default' filepath='include/linux/writeback.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_time' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dirty_limit_tstamp' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dirty_limit' type-id='7359adad' visibility='default' filepath='include/linux/writeback.h' line='164' 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='7dc82ec2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' 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='f0981eeb' 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='e14c3b11' visibility='default' filepath='include/linux/flex_proportions.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cgwb_frn' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='195' column='1' id='aac38d0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bdi_id' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='memcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/memcontrol.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='at' type-id='91ce1af9' visibility='default' filepath='include/linux/memcontrol.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='9eb3e00b' visibility='default' filepath='include/linux/memcontrol.h' line='199' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wb_completion' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='72' column='1' id='9eb3e00b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cnt' type-id='49178f86' visibility='default' filepath='include/linux/backing-dev-defs.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='waitq' type-id='03d48e96' visibility='default' filepath='include/linux/backing-dev-defs.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='deferred_split' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='695' column='1' id='d619c1c5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='split_queue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='split_queue' type-id='72f469ec' visibility='default' filepath='include/linux/mmzone.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='split_queue_len' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='698' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mem_cgroup_per_node' size-in-bits='6336' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='117' column='1' id='2e6f3990'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/memcontrol.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='lruvec_stat_local' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='lruvec_stat_cpu' type-id='208b18ef' visibility='default' filepath='include/linux/memcontrol.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='lruvec_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/memcontrol.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='lru_zone_size' type-id='aa6663dd' visibility='default' filepath='include/linux/memcontrol.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='iter' type-id='d1982c82' visibility='default' filepath='include/linux/memcontrol.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='shrinker_map' type-id='09f6e9a4' visibility='default' filepath='include/linux/memcontrol.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='tree_node' type-id='2a8a6332' visibility='default' filepath='include/linux/memcontrol.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='usage_in_excess' type-id='7359adad' visibility='default' filepath='include/linux/memcontrol.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='on_tree' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6216'>
+          <var-decl name='congested' type-id='b50a4934' visibility='default' filepath='include/linux/memcontrol.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='include/linux/memcontrol.h' line='140' 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='302' column='1' id='9e8c0698'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lists' type-id='e4e01aff' visibility='default' filepath='include/linux/mmzone.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='reclaim_stat' type-id='1f1f4d8e' visibility='default' filepath='include/linux/mmzone.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='inactive_age' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='refaults' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='310' 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='289' column='1' id='1f1f4d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recent_rotated' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recent_scanned' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='299' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pglist_data' size-in-bits='46080' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='711' column='1' id='54406315'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node_zones' type-id='83aedf28' visibility='default' filepath='include/linux/mmzone.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39936'>
+          <var-decl name='node_zonelists' type-id='9509a9de' visibility='default' filepath='include/linux/mmzone.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40448'>
+          <var-decl name='nr_zones' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40480'>
+          <var-decl name='node_size_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40512'>
+          <var-decl name='node_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40576'>
+          <var-decl name='node_present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40640'>
+          <var-decl name='node_spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40704'>
+          <var-decl name='node_id' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40768'>
+          <var-decl name='kswapd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40960'>
+          <var-decl name='pfmemalloc_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='742' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41152'>
+          <var-decl name='kswapd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41216'>
+          <var-decl name='kswapd_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41248'>
+          <var-decl name='kswapd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41280'>
+          <var-decl name='kswapd_failures' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41312'>
+          <var-decl name='kcompactd_max_order' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='751' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41344'>
+          <var-decl name='kcompactd_classzone_idx' type-id='d278ff03' visibility='default' filepath='include/linux/mmzone.h' line='752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41408'>
+          <var-decl name='kcompactd_wait' type-id='b5ab048f' visibility='default' filepath='include/linux/mmzone.h' line='753' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41600'>
+          <var-decl name='kcompactd' type-id='f23e2572' visibility='default' filepath='include/linux/mmzone.h' line='754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41664'>
+          <var-decl name='totalreserve_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='760' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='41984'>
+          <var-decl name='lru_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42048'>
+          <var-decl name='deferred_split_queue' type-id='d619c1c5' visibility='default' filepath='include/linux/mmzone.h' line='783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='42304'>
+          <var-decl name='lruvec' type-id='9e8c0698' visibility='default' filepath='include/linux/mmzone.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43392'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='per_cpu_nodestats' type-id='36700cde' visibility='default' filepath='include/linux/mmzone.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='vm_stat' type-id='99d12d7b' visibility='default' filepath='include/linux/mmzone.h' line='795' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone' size-in-bits='13312' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='421' column='1' id='be9189df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_watermark' type-id='3461381a' visibility='default' filepath='include/linux/mmzone.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watermark_boost' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_reserved_highatomic' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lowmem_reserve' type-id='5d34b9c7' visibility='default' filepath='include/linux/mmzone.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='zone_pgdat' type-id='c876a7a5' visibility='default' filepath='include/linux/mmzone.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pageset' type-id='16cfe92b' visibility='default' filepath='include/linux/mmzone.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='cma_alloc' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='zone_start_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='managed_pages' type-id='f22a8abb' visibility='default' filepath='include/linux/mmzone.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='spanned_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='present_pages' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/mmzone.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nr_isolate_pageblock' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='span_seqlock' type-id='e6cd5ecf' visibility='default' filepath='include/linux/mmzone.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='initialized' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='_pad1_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='free_area' type-id='be1ad65f' visibility='default' filepath='include/linux/mmzone.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/mmzone.h' line='529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='_pad2_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='percpu_drift_mark' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='539' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='compact_cached_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='compact_cached_migrate_pfn' type-id='f05e8e77' visibility='default' filepath='include/linux/mmzone.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='compact_init_migrate_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11584'>
+          <var-decl name='compact_init_free_pfn' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='compact_considered' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11680'>
+          <var-decl name='compact_defer_shift' type-id='f0981eeb' visibility='default' filepath='include/linux/mmzone.h' line='557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='compact_order_failed' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='558' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11744'>
+          <var-decl name='compact_blockskip_flush' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11752'>
+          <var-decl name='contiguous' type-id='b50a4934' visibility='default' filepath='include/linux/mmzone.h' line='566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='_pad3_' type-id='6041cd25' visibility='default' filepath='include/linux/mmzone.h' line='568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='vm_stat' type-id='80b13f9b' visibility='default' filepath='include/linux/mmzone.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='vm_numa_stat' type-id='a922812c' visibility='default' filepath='include/linux/mmzone.h' line='571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/mmzone.h' line='576' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pageset' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='345' column='1' id='23a849db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcp' type-id='3572f41a' visibility='default' filepath='include/linux/mmzone.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='648'>
+          <var-decl name='vm_stat_diff' type-id='a2b7d295' visibility='default' filepath='include/linux/mmzone.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='per_cpu_pages' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='336' column='1' id='3572f41a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='high' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='batch' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lists' type-id='a8e1fb22' visibility='default' filepath='include/linux/mmzone.h' line='342' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='zone_padding' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='171' column='1' id='6041cd25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='e84913bd' visibility='default' filepath='include/linux/mmzone.h' line='172' 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='101' column='1' id='39ec6fe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='free_list' type-id='e4e6d6c4' visibility='default' filepath='include/linux/mmzone.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_free' type-id='7359adad' visibility='default' filepath='include/linux/mmzone.h' line='103' 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='685' column='1' id='459f31a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_zonerefs' type-id='c2eeb70e' visibility='default' filepath='include/linux/mmzone.h' line='686' 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='666' column='1' id='caf9c470'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='zone' type-id='0a0aff97' visibility='default' filepath='include/linux/mmzone.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='zone_idx' type-id='95e97e5e' visibility='default' filepath='include/linux/mmzone.h' line='668' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='zone_type' filepath='include/linux/mmzone.h' line='364' column='1' id='d278ff03'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='264' is-struct='yes' visibility='default' filepath='include/linux/mmzone.h' line='357' column='1' id='d84ae668'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stat_threshold' type-id='fdbf7a0f' visibility='default' filepath='include/linux/mmzone.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='vm_node_stat_diff' type-id='c8478d3d' visibility='default' filepath='include/linux/mmzone.h' line='359' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lruvec_stat' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/memcontrol.h' line='101' column='1' id='f8009817'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='52f6d451' visibility='default' filepath='include/linux/memcontrol.h' line='102' 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='95' column='1' id='e0324306'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='position' type-id='223696fb' visibility='default' filepath='include/linux/memcontrol.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='generation' type-id='f0981eeb' visibility='default' filepath='include/linux/memcontrol.h' line='98' 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='109' column='1' id='366e0ade'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/memcontrol.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='map' type-id='c99b5ecd' visibility='default' filepath='include/linux/memcontrol.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='report_zones_cb' type-id='785bacaf' filepath='include/linux/blkdev.h' line='363' column='1' id='313c6196'/>
+      <class-decl name='blk_zone' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='103' column='1' id='c46c1f27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wp' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='cond' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='non_seq' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='reset' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='resv' type-id='c213d3d4' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capacity' type-id='d3130597' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reserved' type-id='26f0765c' visibility='default' filepath='include/uapi/linux/blkzoned.h' line='113' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request' size-in-bits='2496' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='134' column='1' id='ceee71ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blkdev.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mq_ctx' type-id='9a335021' visibility='default' filepath='include/linux/blkdev.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mq_hctx' type-id='a47d3467' visibility='default' filepath='include/linux/blkdev.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cmd_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rq_flags' type-id='3b445e53' visibility='default' filepath='include/linux/blkdev.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='internal_tag' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='__data_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='__sector' type-id='a42536cd' visibility='default' filepath='include/linux/blkdev.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='bio' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='biotail' type-id='fb55efa1' visibility='default' filepath='include/linux/blkdev.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='queuelist' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='' type-id='2f76bc4b' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='df8866ad' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='' type-id='7fc3d482' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rq_disk' type-id='33c599da' visibility='default' filepath='include/linux/blkdev.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='part' type-id='84dc82b7' visibility='default' filepath='include/linux/blkdev.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='alloc_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='io_start_time_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='stats_sectors' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='nr_phys_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='crypt_ctx' type-id='9d1360ce' visibility='default' filepath='include/linux/blkdev.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='crypt_keyslot' type-id='5b559658' visibility='default' filepath='include/linux/blkdev.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='write_hint' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1808'>
+          <var-decl name='ioprio' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='extra_len' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='state' type-id='4df77f20' visibility='default' filepath='include/linux/blkdev.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='ref' type-id='64615833' visibility='default' filepath='include/linux/blkdev.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='deadline' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='' type-id='097c5bdb' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='end_io_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='255' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='req_flags_t' type-id='3f1a6b60' filepath='include/linux/blkdev.h' line='68' column='1' id='3b445e53'/>
+      <union-decl name='__anonymous_union__5' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='161' column='1' id='2f76bc4b'>
+        <data-member access='public'>
+          <var-decl name='hash' type-id='03a4a074' visibility='default' filepath='include/linux/blkdev.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ipi_list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='163' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='171' column='1' id='df8866ad'>
+        <data-member access='public'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/blkdev.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='special_vec' type-id='40af3608' visibility='default' filepath='include/linux/blkdev.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='completion_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/blkdev.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='error_count' type-id='95e97e5e' visibility='default' filepath='include/linux/blkdev.h' line='175' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='184' column='1' id='7fc3d482'>
+        <data-member access='public'>
+          <var-decl name='elv' type-id='6d001302' visibility='default' filepath='include/linux/blkdev.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='flush' type-id='5596717b' visibility='default' filepath='include/linux/blkdev.h' line='194' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='185' column='1' id='6d001302'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq' type-id='7c6e0e0c' visibility='default' filepath='include/linux/blkdev.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='24ae0315' visibility='default' filepath='include/linux/blkdev.h' line='187' 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/linux/blkdev.h' line='190' column='1' id='5596717b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/blkdev.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saved_end_io' type-id='5afdaa66' visibility='default' filepath='include/linux/blkdev.h' line='193' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='rq_end_io_fn' type-id='06c207bd' filepath='include/linux/blkdev.h' line='64' column='1' id='537d88b1'/>
+      <typedef-decl name='blk_status_t' type-id='f9b06939' filepath='include/linux/blk_types.h' line='31' column='1' id='f4e2facd'/>
+      <enum-decl name='mq_rq_state' filepath='include/linux/blkdev.h' line='122' column='1' id='4df77f20'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MQ_RQ_IDLE' value='0'/>
+        <enumerator name='MQ_RQ_IN_FLIGHT' value='1'/>
+        <enumerator name='MQ_RQ_COMPLETE' value='2'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='256' is-anonymous='yes' visibility='default' filepath='include/linux/blkdev.h' line='244' column='1' id='097c5bdb'>
+        <data-member access='public'>
+          <var-decl name='csd' type-id='bb75ea85' visibility='default' filepath='include/linux/blkdev.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fifo_time' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='246' column='1'/>
+        </data-member>
+      </union-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='bb75ea85'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llist' type-id='c5ccfee8' 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='89714567' 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='eaa32e2f' 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='f0981eeb' visibility='default' filepath='include/linux/smp.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='smp_call_func_t' type-id='b7f9d8e6' filepath='include/linux/smp.h' line='17' column='1' id='89714567'/>
+      <class-decl name='elevator_queue' size-in-bits='5312' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='110' column='1' id='fc87d78f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='4a89adae' visibility='default' filepath='include/linux/elevator.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='elevator_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/elevator.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kobj' type-id='b6ab8849' visibility='default' filepath='include/linux/elevator.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='sysfs_lock' type-id='925167dc' visibility='default' filepath='include/linux/elevator.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='registered' type-id='f0981eeb' visibility='default' filepath='include/linux/elevator.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='hash' type-id='53b70d6c' visibility='default' filepath='include/linux/elevator.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_type' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='72' column='1' id='2731de48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icq_cache' type-id='f3b4aca8' visibility='default' filepath='include/linux/elevator.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='386fe521' visibility='default' filepath='include/linux/elevator.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='icq_size' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='icq_align' type-id='b59d7dce' visibility='default' filepath='include/linux/elevator.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='elevator_attrs' type-id='177a4437' visibility='default' filepath='include/linux/elevator.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='elevator_name' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='elevator_alias' type-id='80f4b756' visibility='default' filepath='include/linux/elevator.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='elevator_features' type-id='20f5f452' visibility='default' filepath='include/linux/elevator.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='elevator_owner' type-id='2730d015' visibility='default' filepath='include/linux/elevator.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='queue_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hctx_debugfs_attrs' type-id='e649198d' visibility='default' filepath='include/linux/elevator.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='icq_cache_name' type-id='aa4fa8f1' visibility='default' filepath='include/linux/elevator.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/elevator.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='elevator_mq_ops' size-in-bits='1664' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='30' column='1' id='386fe521'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='init_sched' type-id='c2889977' visibility='default' filepath='include/linux/elevator.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='exit_sched' type-id='89340c26' visibility='default' filepath='include/linux/elevator.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init_hctx' type-id='a2abb549' visibility='default' filepath='include/linux/elevator.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='exit_hctx' type-id='66288ae4' visibility='default' filepath='include/linux/elevator.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='depth_updated' type-id='a75080c6' visibility='default' filepath='include/linux/elevator.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allow_merge' type-id='1734c68b' visibility='default' filepath='include/linux/elevator.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='bio_merge' type-id='3ed0c5ec' visibility='default' filepath='include/linux/elevator.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='request_merge' type-id='f72cc247' visibility='default' filepath='include/linux/elevator.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='request_merged' type-id='b615a053' visibility='default' filepath='include/linux/elevator.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='requests_merged' type-id='40f624e9' visibility='default' filepath='include/linux/elevator.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='limit_depth' type-id='e46f66f3' visibility='default' filepath='include/linux/elevator.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='prepare_request' type-id='639b44d1' visibility='default' filepath='include/linux/elevator.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='finish_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='insert_requests' type-id='60c9df2c' visibility='default' filepath='include/linux/elevator.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='dispatch_request' type-id='a66a8231' visibility='default' filepath='include/linux/elevator.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='has_work' type-id='6ca30b05' visibility='default' filepath='include/linux/elevator.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='completed_request' type-id='300d6413' visibility='default' filepath='include/linux/elevator.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='requeue_request' type-id='bbf015cd' visibility='default' filepath='include/linux/elevator.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='former_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='next_request' type-id='27bb8677' visibility='default' filepath='include/linux/elevator.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='init_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='exit_icq' type-id='fedb17fd' visibility='default' filepath='include/linux/elevator.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/elevator.h' line='58' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='elv_merge' filepath='include/linux/elevator.h' line='20' column='1' id='6bb0a326'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <class-decl name='elv_fs_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/elevator.h' line='63' column='1' id='aaa166ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='attr' type-id='a6222917' visibility='default' filepath='include/linux/elevator.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='show' type-id='a2178c8a' visibility='default' filepath='include/linux/elevator.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='store' type-id='1854489e' visibility='default' filepath='include/linux/elevator.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='make_request_fn' type-id='f8561c55' filepath='include/linux/blkdev.h' line='299' column='1' id='99cd4891'/>
+      <typedef-decl name='blk_qc_t' type-id='f0981eeb' filepath='include/linux/blk_types.h' line='465' column='1' id='041bc907'/>
+      <typedef-decl name='dma_drain_needed_fn' type-id='59bb6212' filepath='include/linux/blkdev.h' line='302' column='1' id='0128515a'/>
+      <typedef-decl name='congested_fn' type-id='dd42ab12' filepath='include/linux/backing-dev-defs.h' line='37' column='1' id='6e3695a3'/>
+      <class-decl name='bdi_writeback_congested' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='99' column='1' id='87886298'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/backing-dev-defs.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/backing-dev-defs.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__bdi' type-id='ef4fae1b' visibility='default' filepath='include/linux/backing-dev-defs.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_id' type-id='95e97e5e' visibility='default' filepath='include/linux/backing-dev-defs.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/linux/backing-dev-defs.h' line='108' 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='587caff2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='events' type-id='b92c8d0d' 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='f0981eeb' 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='f5c90b3f' 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='52' column='1' id='c1602c7a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_FOREIGN_FLUSH' value='8'/>
+        <enumerator name='WB_REASON_MAX' value='9'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__11' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='include/linux/backing-dev-defs.h' line='182' column='1' id='93944b10'>
+        <data-member access='public'>
+          <var-decl name='release_work' type-id='ef9025d0' visibility='default' filepath='include/linux/backing-dev-defs.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/backing-dev-defs.h' line='184' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='blk_rq_stat' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='491' column='1' id='a3274c4b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mean' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nr_samples' type-id='19c2251e' visibility='default' filepath='include/linux/blk_types.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='batch' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg_gq' size-in-bits='6208' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='108' column='1' id='9467b853'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='q' type-id='e7d2a5fc' visibility='default' filepath='include/linux/blk-cgroup.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='q_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='blkcg_node' type-id='03a4a074' visibility='default' filepath='include/linux/blk-cgroup.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='wb_congested' type-id='d97a04ce' visibility='default' filepath='include/linux/blk-cgroup.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='parent' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='include/linux/blk-cgroup.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='online' type-id='b50a4934' visibility='default' filepath='include/linux/blk-cgroup.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stat_bytes' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='stat_ios' type-id='247d0323' visibility='default' filepath='include/linux/blk-cgroup.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='pd' type-id='f5665670' visibility='default' filepath='include/linux/blk-cgroup.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='async_bio_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='async_bios' type-id='096280be' visibility='default' filepath='include/linux/blk-cgroup.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='async_bio_work' type-id='ef9025d0' visibility='default' filepath='include/linux/blk-cgroup.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='use_delay' type-id='49178f86' visibility='default' filepath='include/linux/blk-cgroup.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='delay_nsec' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='delay_start' type-id='28ee064c' visibility='default' filepath='include/linux/blk-cgroup.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='last_delay' type-id='91ce1af9' visibility='default' filepath='include/linux/blk-cgroup.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='last_use' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/blk-cgroup.h' line='145' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='blkcg' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/blk-cgroup.h' line='47' column='1' id='19b26952'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='css' type-id='7f3df443' visibility='default' filepath='include/linux/blk-cgroup.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/blk-cgroup.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='blkg_tree' type-id='d39738ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='blkg_hint' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='blkg_list' type-id='e151255a' visibility='default' filepath='include/linux/blk-cgroup.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='cpd' type-id='39e1fe03' visibility='default' filepath='include/linux/blk-cgroup.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='all_blkcgs_node' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='cgwb_list' type-id='72f469ec' visibility='default' filepath='include/linux/blk-cgroup.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='cgwb_refcnt' type-id='64615833' visibility='default' filepath='include/linux/blk-cgroup.h' line='60' 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='101' column='1' id='11fd1392'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkcg' type-id='11bff950' visibility='default' filepath='include/linux/blk-cgroup.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='104' 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='68' column='1' id='247d0323'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu_cnt' type-id='68a92070' visibility='default' filepath='include/linux/blk-cgroup.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='aux_cnt' type-id='39e531ac' visibility='default' filepath='include/linux/blk-cgroup.h' line='70' 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='88' column='1' id='55eaf925'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='blkg' type-id='1146dea3' visibility='default' filepath='include/linux/blk-cgroup.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='plid' type-id='95e97e5e' visibility='default' filepath='include/linux/blk-cgroup.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='queue_limits' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/linux/blkdev.h' line='329' column='1' id='f0966d3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bounce_pfn' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seg_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='virt_boundary_mask' type-id='7359adad' visibility='default' filepath='include/linux/blkdev.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_hw_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='max_dev_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='chunk_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='max_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_segment_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='physical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='logical_block_size' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='alignment_offset' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='io_min' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='io_opt' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='max_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='max_hw_discard_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='max_write_same_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='max_write_zeroes_sectors' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='discard_granularity' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='discard_alignment' type-id='f0981eeb' visibility='default' filepath='include/linux/blkdev.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_integrity_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_discard_segments' type-id='8efea9e5' visibility='default' filepath='include/linux/blkdev.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='752'>
+          <var-decl name='misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='760'>
+          <var-decl name='discard_misaligned' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='raid_partial_stripes_expensive' type-id='002ac4a6' visibility='default' filepath='include/linux/blkdev.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='zoned' type-id='a48b5528' visibility='default' filepath='include/linux/blkdev.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/blkdev.h' line='360' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='blk_zoned_model' filepath='include/linux/blkdev.h' line='323' column='1' id='a48b5528'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='BLK_ZONED_NONE' value='0'/>
+        <enumerator name='BLK_ZONED_HA' value='1'/>
+        <enumerator name='BLK_ZONED_HM' value='2'/>
+      </enum-decl>
+      <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='6a3af55b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='class_dev' type-id='fa0b179b' 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='95e97e5e' 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='e7d2a5fc' 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='1a0da7f7' 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='ebd46aa4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='check_proto' type-id='22aed5fd' 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='b31b5e29' 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='f45f2842' 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='bbf015cd' 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='73142703'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='guard' type-id='3158a266' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='d3130597' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='d3130597' 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='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3158a266' 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='3158a266' 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='d3130597' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/bsg.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='bio_set' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/bio.h' line='704' column='1' id='dfa886b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bio_slab' type-id='f3b4aca8' visibility='default' filepath='include/linux/bio.h' line='705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='front_pad' type-id='f0981eeb' visibility='default' filepath='include/linux/bio.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bio_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='bvec_pool' type-id='2745fad8' visibility='default' filepath='include/linux/bio.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rescue_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/bio.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rescue_list' type-id='096280be' visibility='default' filepath='include/linux/bio.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rescue_work' type-id='ef9025d0' visibility='default' filepath='include/linux/bio.h' line='721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='rescue_workqueue' type-id='242e3d19' visibility='default' filepath='include/linux/bio.h' line='722' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/bio.h' line='727' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_t' type-id='5932767e' filepath='include/linux/mempool.h' line='26' column='1' id='2745fad8'/>
+      <class-decl name='mempool_s' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/mempool.h' line='16' column='1' id='5932767e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' 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='95e97e5e' 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='95e97e5e' 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='63e171df' 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='eaa32e2f' 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='8bf6d789' 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='a4c19f22' 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='b5ab048f' visibility='default' filepath='include/linux/mempool.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='mempool_alloc_t' type-id='6f7f4c91' filepath='include/linux/mempool.h' line='13' column='1' id='94d117ca'/>
+      <typedef-decl name='mempool_free_t' type-id='c039af2e' filepath='include/linux/mempool.h' line='14' column='1' id='27f2e0d9'/>
+      <class-decl name='bvec_iter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/bvec.h' line='24' column='1' id='9e0198d8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bi_sector' type-id='a42536cd' visibility='default' filepath='include/linux/bvec.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bi_size' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='bi_idx' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bi_bvec_done' type-id='f0981eeb' visibility='default' filepath='include/linux/bvec.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bio_end_io_t' type-id='98617d6e' filepath='include/linux/blk_types.h' line='21' column='1' id='2ec4b2ae'/>
+      <class-decl name='bio_issue' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/blk_types.h' line='114' column='1' id='a9b0f4f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='91ce1af9' visibility='default' filepath='include/linux/blk_types.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__12' is-anonymous='yes' visibility='default' filepath='include/linux/blk_types.h' line='186' column='1' id='2a125a28'/>
+      <class-decl name='pmu' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='255' column='1' id='e205b6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/perf_event.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/linux/perf_event.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attr_groups' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='attr_update' type-id='c97de1ac' visibility='default' filepath='include/linux/perf_event.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/perf_event.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='capabilities' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pmu_disable_count' type-id='7292109c' visibility='default' filepath='include/linux/perf_event.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='pmu_cpu_context' type-id='090503c3' visibility='default' filepath='include/linux/perf_event.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='exclusive_cnt' type-id='49178f86' visibility='default' filepath='include/linux/perf_event.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='task_ctx_nr' type-id='95e97e5e' 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='hrtimer_interval_ms' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='nr_addr_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pmu_enable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pmu_disable' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_init' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_mapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='event_unmapped' type-id='eddb9394' visibility='default' filepath='include/linux/perf_event.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='add' type-id='afc38bc6' visibility='default' filepath='include/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='del' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='start' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='stop' type-id='6c534e17' visibility='default' filepath='include/linux/perf_event.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='read' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='start_txn' type-id='f865774a' visibility='default' filepath='include/linux/perf_event.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='commit_txn' type-id='0cd76695' visibility='default' filepath='include/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='cancel_txn' type-id='dae07608' visibility='default' filepath='include/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='event_idx' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sched_task' type-id='54df184d' visibility='default' filepath='include/linux/perf_event.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='task_ctx_size' type-id='b59d7dce' visibility='default' filepath='include/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='setup_aux' type-id='e91cc304' visibility='default' filepath='include/linux/perf_event.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='free_aux' type-id='b7f9d8e6' visibility='default' filepath='include/linux/perf_event.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='addr_filters_validate' type-id='6668d13a' visibility='default' filepath='include/linux/perf_event.h' line='434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='addr_filters_sync' type-id='aed2baa8' visibility='default' filepath='include/linux/perf_event.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='aux_output_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='filter_match' type-id='8d78edef' visibility='default' filepath='include/linux/perf_event.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='check_period' type-id='36f91979' visibility='default' filepath='include/linux/perf_event.h' line='469' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='perf_cpu_context' size-in-bits='3136' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='809' column='1' id='4448fdd3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx' type-id='9d67acd5' visibility='default' filepath='include/linux/perf_event.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='task_ctx' type-id='b9419dc5' visibility='default' filepath='include/linux/perf_event.h' line='811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='active_oncpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='exclusive' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='hrtimer_lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hrtimer_interval' type-id='fbc017ef' visibility='default' filepath='include/linux/perf_event.h' line='817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='hrtimer_active' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='sched_cb_entry' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sched_cb_usage' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='online' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='828' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='perf_event_state' filepath='include/linux/perf_event.h' line='520' column='1' id='31fdb95a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2b04c975' filepath='include/asm-generic/local64.h' line='26' column='1' id='7da7300e'/>
+      <class-decl name='__anonymous_struct__5' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='7da7300e' visibility='default' filepath='include/asm-generic/local64.h' line='24' column='1' id='2b04c975'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='a' type-id='dd91f264' visibility='default' filepath='include/asm-generic/local64.h' line='25' 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='e57536d9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' 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='3f1a6b60' 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='d3130597' 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='de6d2b01' 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='d3130597' 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='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='inherit' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='pinned' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='exclusive' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='exclude_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='exclude_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='exclude_hv' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='exclude_idle' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mmap' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='comm' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='inherit_stat' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='enable_on_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='task' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='watermark' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='precise_ip' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17'>
+          <var-decl name='mmap_data' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='sample_id_all' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='exclude_host' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='exclude_guest' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='exclude_callchain_kernel' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='exclude_callchain_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='mmap2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='comm_exec' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25'>
+          <var-decl name='use_clockid' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='context_switch' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='write_backward' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28'>
+          <var-decl name='namespaces' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='ksymbol' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='30'>
+          <var-decl name='bpf_event' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='aux_output' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='__reserved_1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='' type-id='051df3c3' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='bp_type' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='' type-id='3089c176' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='' type-id='38c76117' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_sample_type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sample_regs_user' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_stack_user' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='clockid' type-id='3158a266' visibility='default' filepath='include/uapi/linux/perf_event.h' line='411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='sample_regs_intr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='aux_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='sample_max_stack' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='880'>
+          <var-decl name='__reserved_2' type-id='d315442e' visibility='default' filepath='include/uapi/linux/perf_event.h' line='427' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='327' column='1' id='de6d2b01'>
+        <data-member access='public'>
+          <var-decl name='sample_period' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sample_freq' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='329' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__14' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='380' column='1' id='051df3c3'>
+        <data-member access='public'>
+          <var-decl name='wakeup_events' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='wakeup_watermark' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/perf_event.h' line='382' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__15' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='386' column='1' id='3089c176'>
+        <data-member access='public'>
+          <var-decl name='bp_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kprobe_func' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='uprobe_path' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='config1' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='390' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='392' column='1' id='38c76117'>
+        <data-member access='public'>
+          <var-decl name='bp_len' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='kprobe_addr' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='probe_offset' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='config2' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='396' 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='122' column='1' id='b594b0c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='47a85f98' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='target' type-id='f23e2572' visibility='default' filepath='include/linux/perf_event.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='addr_filters' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='addr_filters_gen' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='prev_count' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sample_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='period_left' type-id='7da7300e' visibility='default' filepath='include/linux/perf_event.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='interrupts_seq' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='interrupts' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='freq_time_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='freq_count_stamp' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='227' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='768' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='124' column='1' id='47a85f98'>
+        <data-member access='public'>
+          <var-decl name='' type-id='e816fcaa' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='35e31cc2' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='17578164' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='f9c5ea3e' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='c0044425' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7a56104f' visibility='default' filepath='include/linux/perf_event.h' line='160' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='768' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='125' column='1' id='e816fcaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='last_tag' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='config_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='event_base' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='event_base_rdpmc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='last_cpu' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='extra_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='branch_reg' type-id='a80839c0' visibility='default' filepath='include/linux/perf_event.h' line='136' 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='112' column='1' id='a80839c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='config' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='alloc' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='95e97e5e' visibility='default' filepath='include/linux/perf_event.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='576' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='138' column='1' id='35e31cc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hrtimer' type-id='b6993efc' visibility='default' filepath='include/linux/perf_event.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='141' column='1' id='17578164'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='128' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='145' column='1' id='f9c5ea3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pwr_acc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ptsc' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='150' column='1' id='c0044425'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='b61f34eb' visibility='default' filepath='include/linux/perf_event.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bp_list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='157' 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='21' column='1' id='b61f34eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='address' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger' type-id='91ce1af9' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ctrl' type-id='2633d065' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='24' 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='13' column='1' id='2633d065'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__reserved' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27'>
+          <var-decl name='type' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='29'>
+          <var-decl name='privilege' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='31'>
+          <var-decl name='enabled' type-id='19c2251e' visibility='default' filepath='arch/arm64/include/asm/hw_breakpoint.h' line='18' 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/perf_event.h' line='160' column='1' id='7a56104f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iommu_bank' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='iommu_cntr' type-id='f9b06939' visibility='default' filepath='include/linux/perf_event.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='padding' type-id='1dc6a898' visibility='default' filepath='include/linux/perf_event.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='conf' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='conf1' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='165' 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='9281c70f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='7359adad' 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='c5ccfee8' 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='f48b73f6' 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='506' column='1' id='54885433'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/perf_event.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='f5c90b3f' visibility='default' filepath='include/linux/perf_event.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nr_file_filters' type-id='f0981eeb' visibility='default' filepath='include/linux/perf_event.h' line='509' 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='512' column='1' id='3490ee41'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='size' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='514' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='perf_overflow_handler_t' type-id='a8564695' filepath='include/linux/perf_event.h' line='532' column='1' id='20a2e4e6'/>
+      <class-decl name='perf_sample_data' size-in-bits='4096' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='936' column='1' id='2b3d4ba2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw' type-id='f4a67529' visibility='default' filepath='include/linux/perf_event.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='br_stack' type-id='070ae8d2' visibility='default' filepath='include/linux/perf_event.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='period' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='weight' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txn' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data_src' type-id='2be3cc53' visibility='default' filepath='include/linux/perf_event.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ip' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tid_entry' type-id='0e48f9a5' visibility='default' filepath='include/linux/perf_event.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream_id' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cpu_entry' type-id='3851c7bb' visibility='default' filepath='include/linux/perf_event.h' line='965' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='callchain' type-id='cd3a82e3' visibility='default' filepath='include/linux/perf_event.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='regs_user' type-id='85b37ab4' visibility='default' filepath='include/linux/perf_event.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='regs_user_copy' type-id='0d029111' visibility='default' filepath='include/linux/perf_event.h' line='973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='regs_intr' type-id='85b37ab4' visibility='default' filepath='include/linux/perf_event.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='stack_user_size' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='phys_addr' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='978' 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='88' column='1' id='40ea9ac1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frag' type-id='a5007ad0' visibility='default' filepath='include/linux/perf_event.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='90' 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='78' column='1' id='a5007ad0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='9bc43e27' visibility='default' filepath='include/linux/perf_event.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='copy' type-id='b468b440' visibility='default' filepath='include/linux/perf_event.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/perf_event.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='79' column='1' id='9bc43e27'>
+        <data-member access='public'>
+          <var-decl name='next' type-id='2aa2e156' visibility='default' filepath='include/linux/perf_event.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='pad' type-id='7359adad' visibility='default' filepath='include/linux/perf_event.h' line='81' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='perf_copy_f' type-id='a056c492' filepath='include/linux/perf_event.h' line='75' column='1' id='b468b440'/>
+      <class-decl name='perf_branch_stack' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/perf_event.h' line='102' column='1' id='524b1234'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='d3130597' visibility='default' filepath='include/linux/perf_event.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='entries' type-id='6b9809bc' visibility='default' filepath='include/linux/perf_event.h' line='104' 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='1170' column='1' id='c25adaa0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='from' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='to' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mispred' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='predicted' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='in_tx' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='abort' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='cycles' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='type' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reserved' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1179' 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='1050' column='1' id='2be3cc53'>
+        <data-member access='public'>
+          <var-decl name='val' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='579bdebd' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1052' column='1' id='579bdebd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mem_op' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='mem_lvl' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='mem_snoop' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mem_lock' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26'>
+          <var-decl name='mem_dtlb' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='33'>
+          <var-decl name='mem_lvl_num' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1058' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='37'>
+          <var-decl name='mem_remote' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38'>
+          <var-decl name='mem_snoopx' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mem_rsvd' type-id='d3130597' visibility='default' filepath='include/uapi/linux/perf_event.h' line='1061' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='955' column='1' id='0e48f9a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tid' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='957' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/perf_event.h' line='962' column='1' id='3851c7bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cpu' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='19c2251e' visibility='default' filepath='include/linux/perf_event.h' line='964' 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='62' column='1' id='16650a93'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr' type-id='d3130597' visibility='default' filepath='include/linux/perf_event.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ip' type-id='52cd3f2c' visibility='default' filepath='include/linux/perf_event.h' line='64' 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='85b37ab4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='abi' type-id='d3130597' 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='4616a179' visibility='default' filepath='include/linux/perf_regs.h' line='9' 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='190' column='1' id='a2689372'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='system' type-id='80f4b756' visibility='default' filepath='include/linux/trace_events.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='perf_probe' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reg' type-id='50ec573b' visibility='default' filepath='include/linux/trace_events.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='define_fields' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_fields' type-id='17898fce' visibility='default' filepath='include/linux/trace_events.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fields' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='raw_init' type-id='9a5ed472' visibility='default' filepath='include/linux/trace_events.h' line='201' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='trace_reg' filepath='include/linux/trace_events.h' line='170' column='1' id='7fa6eeb8'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <union-decl name='__anonymous_union__19' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/trace_events.h' line='257' column='1' id='7d3eb798'>
+        <data-member access='public'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/linux/trace_events.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tp' type-id='08e531de' visibility='default' filepath='include/linux/trace_events.h' line='260' column='1'/>
+        </data-member>
+      </union-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='78b26ac9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='03a4a074' 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='72f469ec' 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='95e97e5e' 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='d6d37d27' 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='195ea87f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trace' type-id='8e7f627c' 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='8e7f627c' 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='8e7f627c' 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='8e7f627c' visibility='default' filepath='include/linux/trace_events.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='trace_print_func' type-id='ff826f29' filepath='include/linux/trace_events.h' line='114' column='1' id='8e7f627c'/>
+      <enum-decl name='print_line_t' filepath='include/linux/trace_events.h' line='135' column='1' id='b1a0a119'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='60588bb1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tr' type-id='898c1076' 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='0a18715a' 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='573a5ee9' 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='eaa32e2f' 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='95e97e5e' 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='925167dc' 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='93407a41' 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='7359adad' 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='c5078f42' 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='b16b461b' 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='b50a4934' 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='c5078f42' 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='aa4b1eb5' 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='7359adad' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='91ce1af9' 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='69bf7bee' 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='bd54fe1a' 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='c5078f42'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='d16c6df4' 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='857188d6' 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='95e97e5e' 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='857188d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' 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='b59d7dce' 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='b59d7dce' 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='69bf7bee' visibility='default' filepath='include/linux/seq_buf.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='cpumask_var_t' type-id='db98c084' filepath='include/linux/cpumask.h' line='751' column='1' id='b16b461b'/>
+      <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='1986ca65'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8efea9e5' 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='002ac4a6' 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='002ac4a6' 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='95e97e5e' 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='733' column='1' id='3643bc2a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tree' type-id='dec44472' visibility='default' filepath='include/linux/perf_event.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='index' type-id='91ce1af9' visibility='default' filepath='include/linux/perf_event.h' line='735' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='cacf0f56' size-in-bits='64' id='5760652c'/>
+      <pointer-type-def type-id='87886298' size-in-bits='64' id='d97a04ce'/>
+      <pointer-type-def type-id='f3e87129' size-in-bits='64' id='fb55efa1'/>
+      <pointer-type-def type-id='b545ce08' size-in-bits='64' id='9d1360ce'/>
+      <pointer-type-def type-id='2ec4b2ae' size-in-bits='64' id='8213bb9f'/>
+      <pointer-type-def type-id='dfa886b2' size-in-bits='64' id='38b1e3a0'/>
+      <pointer-type-def type-id='40af3608' size-in-bits='64' id='cddcb53e'/>
+      <pointer-type-def type-id='1d120221' size-in-bits='64' id='e118aff9'/>
+      <pointer-type-def type-id='13fcfe64' size-in-bits='64' id='bf8a20d2'/>
+      <pointer-type-def type-id='479d017a' size-in-bits='64' id='5b559658'/>
+      <pointer-type-def type-id='afd9eb4a' size-in-bits='64' id='3620a178'/>
+      <pointer-type-def type-id='cde99b39' size-in-bits='64' id='9a335021'/>
+      <pointer-type-def type-id='e063028f' size-in-bits='64' id='a47d3467'/>
+      <pointer-type-def type-id='a47d3467' size-in-bits='64' id='3e195537'/>
+      <pointer-type-def type-id='651086d7' size-in-bits='64' id='cc26d15f'/>
+      <pointer-type-def type-id='99d089ec' size-in-bits='64' id='a0408c5a'/>
+      <pointer-type-def type-id='be8f4983' size-in-bits='64' id='1f98c663'/>
+      <pointer-type-def type-id='c46c1f27' size-in-bits='64' id='60a257ef'/>
+      <pointer-type-def type-id='19b26952' size-in-bits='64' id='11bff950'/>
+      <pointer-type-def type-id='9467b853' size-in-bits='64' id='1146dea3'/>
+      <pointer-type-def type-id='11fd1392' size-in-bits='64' id='0f8f80b0'/>
+      <pointer-type-def type-id='55eaf925' size-in-bits='64' id='3213e875'/>
+      <pointer-type-def type-id='15881542' size-in-bits='64' id='531c24d0'/>
+      <pointer-type-def type-id='0ad68707' size-in-bits='64' id='b6a33eaf'/>
+      <pointer-type-def type-id='c75c7b06' size-in-bits='64' id='380c7edc'/>
+      <pointer-type-def type-id='0ef5c7e0' size-in-bits='64' id='b1253746'/>
+      <pointer-type-def type-id='3e6eb939' size-in-bits='64' id='5b4d58e9'/>
+      <pointer-type-def type-id='ea2ebeac' size-in-bits='64' id='03054cfa'/>
+      <pointer-type-def type-id='ab9643dd' size-in-bits='64' id='46ff135d'/>
+      <pointer-type-def type-id='66f1e832' size-in-bits='64' id='aede2cf0'/>
+      <pointer-type-def type-id='a73d96cf' size-in-bits='64' id='d8e759a7'/>
+      <pointer-type-def type-id='1d115fd5' size-in-bits='64' id='dc91d125'/>
+      <pointer-type-def type-id='7f3df443' size-in-bits='64' id='cfff5953'/>
+      <pointer-type-def type-id='5332c7dc' size-in-bits='64' id='a87691ee'/>
+      <pointer-type-def type-id='19596889' size-in-bits='64' id='8cffa561'/>
+      <pointer-type-def type-id='24c24978' size-in-bits='64' id='b160f6ba'/>
+      <pointer-type-def type-id='6e3695a3' size-in-bits='64' id='84127e50'/>
+      <qualified-type-def type-id='d53ee986' const='yes' id='9bf7ec75'/>
+      <pointer-type-def type-id='9bf7ec75' size-in-bits='64' id='e649198d'/>
+      <qualified-type-def type-id='b785b938' const='yes' id='c3619065'/>
+      <pointer-type-def type-id='c3619065' size-in-bits='64' id='e1962c5d'/>
+      <qualified-type-def type-id='dbd58b50' const='yes' id='425496d7'/>
+      <pointer-type-def type-id='425496d7' size-in-bits='64' id='6829b047'/>
+      <qualified-type-def type-id='ebd46aa4' const='yes' id='e4664ea7'/>
+      <pointer-type-def type-id='e4664ea7' size-in-bits='64' id='1a0da7f7'/>
+      <qualified-type-def type-id='b45c773c' const='yes' id='8ef65cd1'/>
+      <pointer-type-def type-id='8ef65cd1' size-in-bits='64' id='08d45f21'/>
+      <qualified-type-def type-id='b8553c6b' const='yes' id='559d6206'/>
+      <pointer-type-def type-id='559d6206' size-in-bits='64' id='f2c18b44'/>
+      <qualified-type-def type-id='2a8ca227' const='yes' id='cf470d6a'/>
+      <pointer-type-def type-id='cf470d6a' size-in-bits='64' id='8cd9dbc0'/>
+      <qualified-type-def type-id='7778009d' const='yes' id='6e03f2ca'/>
+      <pointer-type-def type-id='6e03f2ca' size-in-bits='64' id='103756a0'/>
+      <pointer-type-def type-id='ec1aac50' size-in-bits='64' id='26f00576'/>
+      <pointer-type-def type-id='a8d380d5' size-in-bits='64' id='af836b25'/>
+      <pointer-type-def type-id='acfd9368' size-in-bits='64' id='70f1634e'/>
+      <pointer-type-def type-id='0128515a' size-in-bits='64' id='1b19faa1'/>
+      <pointer-type-def type-id='fc87d78f' size-in-bits='64' id='07d0a3e7'/>
+      <pointer-type-def type-id='2731de48' size-in-bits='64' id='4a89adae'/>
+      <pointer-type-def type-id='aaa166ff' size-in-bits='64' id='177a4437'/>
+      <pointer-type-def type-id='a43a9295' size-in-bits='64' id='ff826f29'/>
+      <pointer-type-def type-id='5ff1273a' size-in-bits='64' id='26461068'/>
+      <pointer-type-def type-id='77dc8383' size-in-bits='64' id='71f2e203'/>
+      <pointer-type-def type-id='28e89e7e' size-in-bits='64' id='10a7f6b4'/>
+      <pointer-type-def type-id='203c1d4d' size-in-bits='64' id='a2abb549'/>
+      <pointer-type-def type-id='b1517543' size-in-bits='64' id='785bacaf'/>
+      <pointer-type-def type-id='9e22fc50' size-in-bits='64' id='68a88aaa'/>
+      <pointer-type-def type-id='0afc6f78' size-in-bits='64' id='2207988a'/>
+      <pointer-type-def type-id='806a4586' size-in-bits='64' id='6ed32e60'/>
+      <pointer-type-def type-id='1ee59844' size-in-bits='64' id='55f833ce'/>
+      <pointer-type-def type-id='749ee287' size-in-bits='64' id='8bdbbb63'/>
+      <pointer-type-def type-id='969fc316' size-in-bits='64' id='2b0348f0'/>
+      <pointer-type-def type-id='2cfafd1c' size-in-bits='64' id='3e9fac96'/>
+      <pointer-type-def type-id='28d1931f' size-in-bits='64' id='354bcec3'/>
+      <pointer-type-def type-id='4ed460e4' size-in-bits='64' id='f220106e'/>
+      <pointer-type-def type-id='603a76bb' size-in-bits='64' id='8eee5b07'/>
+      <pointer-type-def type-id='ed4be5c0' size-in-bits='64' id='6668d13a'/>
+      <pointer-type-def type-id='9b94c22b' size-in-bits='64' id='8d78edef'/>
+      <pointer-type-def type-id='87732674' size-in-bits='64' id='afc38bc6'/>
+      <pointer-type-def type-id='6ad7a215' size-in-bits='64' id='36f91979'/>
+      <pointer-type-def type-id='6d544aa1' size-in-bits='64' id='0cd76695'/>
+      <pointer-type-def type-id='a21db860' size-in-bits='64' id='f45f2842'/>
+      <pointer-type-def type-id='4e83077d' size-in-bits='64' id='b31b5e29'/>
+      <pointer-type-def type-id='62855293' size-in-bits='64' id='c2889977'/>
+      <pointer-type-def type-id='081f19f3' size-in-bits='64' id='f72cc247'/>
+      <pointer-type-def type-id='b52da57b' size-in-bits='64' id='f22a42d7'/>
+      <pointer-type-def type-id='0f83e831' size-in-bits='64' id='22aed5fd'/>
+      <pointer-type-def type-id='595c4720' size-in-bits='64' id='2c2624ea'/>
+      <pointer-type-def type-id='abe3ca10' size-in-bits='64' id='9a5ed472'/>
+      <pointer-type-def type-id='287b404f' size-in-bits='64' id='50ec573b'/>
+      <pointer-type-def type-id='ca8c1528' size-in-bits='64' id='7fa32aba'/>
+      <pointer-type-def type-id='439a4d86' size-in-bits='64' id='b8fa1170'/>
+      <pointer-type-def type-id='c443a9fc' size-in-bits='64' id='5626e636'/>
+      <pointer-type-def type-id='266b9741' size-in-bits='64' id='1a7b1e1d'/>
+      <pointer-type-def type-id='4aaf059d' size-in-bits='64' id='62d26ff9'/>
+      <pointer-type-def type-id='0f590202' size-in-bits='64' id='84d8e9b4'/>
+      <pointer-type-def type-id='86ee0347' size-in-bits='64' id='c6e84913'/>
+      <pointer-type-def type-id='1e330b13' size-in-bits='64' id='74005b57'/>
+      <pointer-type-def type-id='1621811c' size-in-bits='64' id='574ff926'/>
+      <pointer-type-def type-id='b99a3102' size-in-bits='64' id='1f6f58f4'/>
+      <pointer-type-def type-id='39fc1af7' size-in-bits='64' id='61019833'/>
+      <pointer-type-def type-id='53878b76' size-in-bits='64' id='9cc1e100'/>
+      <pointer-type-def type-id='f139a2f0' size-in-bits='64' id='dc2036b2'/>
+      <pointer-type-def type-id='e03cf6d2' size-in-bits='64' id='ebf0489c'/>
+      <pointer-type-def type-id='c6077113' size-in-bits='64' id='20a1c8e7'/>
+      <pointer-type-def type-id='3e33342a' size-in-bits='64' id='24725b0c'/>
+      <pointer-type-def type-id='31975058' size-in-bits='64' id='18d7129a'/>
+      <pointer-type-def type-id='a721b4ab' size-in-bits='64' id='20174b1f'/>
+      <pointer-type-def type-id='9281c70f' size-in-bits='64' id='44bef697'/>
+      <pointer-type-def type-id='38ef7882' size-in-bits='64' id='0effb5d0'/>
+      <pointer-type-def type-id='ae89b201' size-in-bits='64' id='1f2a8949'/>
+      <pointer-type-def type-id='2f8662b5' size-in-bits='64' id='e55856e5'/>
+      <pointer-type-def type-id='e55856e5' size-in-bits='64' id='d910a7dd'/>
+      <pointer-type-def type-id='08694484' size-in-bits='64' id='17898fce'/>
+      <pointer-type-def type-id='b8a3dbd4' size-in-bits='64' id='0b8da5f6'/>
+      <pointer-type-def type-id='f8009817' size-in-bits='64' id='208b18ef'/>
+      <pointer-type-def type-id='99cd4891' size-in-bits='64' id='8f01ad5c'/>
+      <pointer-type-def type-id='2e6f3990' size-in-bits='64' id='97851996'/>
+      <pointer-type-def type-id='413be38e' size-in-bits='64' id='4ec56f94'/>
+      <pointer-type-def type-id='366e0ade' size-in-bits='64' id='09f6e9a4'/>
+      <pointer-type-def type-id='6aac043b' size-in-bits='64' id='a0d3a64b'/>
+      <pointer-type-def type-id='94d117ca' size-in-bits='64' id='8bf6d789'/>
+      <pointer-type-def type-id='27f2e0d9' size-in-bits='64' id='a4c19f22'/>
+      <pointer-type-def type-id='635c3685' size-in-bits='64' id='ea7fad85'/>
+      <pointer-type-def type-id='a388c264' size-in-bits='64' id='d4f2b9b2'/>
+      <pointer-type-def type-id='d84ae668' size-in-bits='64' id='36700cde'/>
+      <pointer-type-def type-id='23a849db' size-in-bits='64' id='16cfe92b'/>
+      <pointer-type-def type-id='3490ee41' size-in-bits='64' id='200ffa89'/>
+      <pointer-type-def type-id='524b1234' size-in-bits='64' id='070ae8d2'/>
+      <pointer-type-def type-id='16650a93' size-in-bits='64' id='cd3a82e3'/>
+      <pointer-type-def type-id='4448fdd3' size-in-bits='64' id='090503c3'/>
+      <pointer-type-def type-id='a5007ad0' size-in-bits='64' id='2aa2e156'/>
+      <pointer-type-def type-id='40ea9ac1' size-in-bits='64' id='f4a67529'/>
+      <pointer-type-def type-id='2b3d4ba2' size-in-bits='64' id='bd83ae50'/>
+      <pointer-type-def type-id='54406315' size-in-bits='64' id='c876a7a5'/>
+      <pointer-type-def type-id='e205b6f1' size-in-bits='64' id='0906f5b9'/>
+      <pointer-type-def type-id='956e764e' size-in-bits='64' id='9dc40234'/>
+      <pointer-type-def type-id='ceee71ca' size-in-bits='64' id='3dad1a48'/>
+      <pointer-type-def type-id='b715cae5' size-in-bits='64' id='a66a8231'/>
+      <pointer-type-def type-id='f111d4f3' size-in-bits='64' id='27bb8677'/>
+      <pointer-type-def type-id='3dad1a48' size-in-bits='64' id='79808846'/>
+      <pointer-type-def type-id='6efee8be' size-in-bits='64' id='8462bc54'/>
+      <pointer-type-def type-id='563595d9' size-in-bits='64' id='3d1f4971'/>
+      <pointer-type-def type-id='3d1f4971' size-in-bits='64' id='93407a41'/>
+      <pointer-type-def type-id='537d88b1' size-in-bits='64' id='5afdaa66'/>
+      <pointer-type-def type-id='e0a68fea' size-in-bits='64' id='c3a28778'/>
+      <pointer-type-def type-id='8816ddc1' size-in-bits='64' id='f1c1e0f9'/>
+      <pointer-type-def type-id='cc72711f' size-in-bits='64' id='a72a4e27'/>
+      <pointer-type-def type-id='73142703' size-in-bits='64' id='8b175043'/>
+      <pointer-type-def type-id='daf33c64' size-in-bits='64' id='9e80f729'/>
+      <pointer-type-def type-id='b855e40d' size-in-bits='64' id='684d860d'/>
+      <pointer-type-def type-id='87b18d2f' size-in-bits='64' id='b0d49e67'/>
+      <pointer-type-def type-id='f308a7ce' size-in-bits='64' id='22aa3c54'/>
+      <pointer-type-def type-id='e27b4e90' size-in-bits='64' id='898c1076'/>
+      <pointer-type-def type-id='72093c11' size-in-bits='64' id='573a5ee9'/>
+      <pointer-type-def type-id='1986ca65' size-in-bits='64' id='aa4b1eb5'/>
+      <pointer-type-def type-id='78b26ac9' size-in-bits='64' id='fb7d87a1'/>
+      <pointer-type-def type-id='a2689372' size-in-bits='64' id='3570c570'/>
+      <pointer-type-def type-id='195ea87f' size-in-bits='64' id='d6d37d27'/>
+      <pointer-type-def type-id='60588bb1' size-in-bits='64' id='18881289'/>
+      <pointer-type-def type-id='fd1f8b7c' size-in-bits='64' id='0a18715a'/>
+      <pointer-type-def type-id='2f351d1f' size-in-bits='64' id='a150e667'/>
+      <pointer-type-def type-id='9b27c78b' size-in-bits='64' id='c2b4b27b'/>
+      <pointer-type-def type-id='f87db0b6' size-in-bits='64' id='e0bbd59c'/>
+      <pointer-type-def type-id='053f72e5' size-in-bits='64' id='9d632ac5'/>
+      <pointer-type-def type-id='7e1e521a' size-in-bits='64' id='ec77b5b8'/>
+      <pointer-type-def type-id='ec77b5b8' size-in-bits='64' id='d272d4d6'/>
+      <pointer-type-def type-id='9728e02a' size-in-bits='64' id='dd354844'/>
+      <pointer-type-def type-id='572fbdca' size-in-bits='64' id='2027e7a0'/>
+      <pointer-type-def type-id='39ed8dbe' size-in-bits='64' id='9fe65c08'/>
+      <pointer-type-def type-id='c2be64d1' size-in-bits='64' id='6ca30b05'/>
+      <pointer-type-def type-id='8b28624a' size-in-bits='64' id='3ed0c5ec'/>
+      <pointer-type-def type-id='b911101f' size-in-bits='64' id='1734c68b'/>
+      <pointer-type-def type-id='59145b91' size-in-bits='64' id='ae18a37d'/>
+      <pointer-type-def type-id='30247438' size-in-bits='64' id='a2178c8a'/>
+      <pointer-type-def type-id='54c5fdf4' size-in-bits='64' id='1854489e'/>
+      <pointer-type-def type-id='9babdafa' size-in-bits='64' id='01db3d7c'/>
+      <pointer-type-def type-id='1f060985' size-in-bits='64' id='ac9bc941'/>
+      <pointer-type-def type-id='8804cbe4' size-in-bits='64' id='0e70db3e'/>
+      <pointer-type-def type-id='90c1df7f' size-in-bits='64' id='ad13fd93'/>
+      <pointer-type-def type-id='ad4a13f9' size-in-bits='64' id='4bf65d9d'/>
+      <pointer-type-def type-id='4851ce38' size-in-bits='64' id='a056c492'/>
+      <pointer-type-def type-id='4e7ef9a4' size-in-bits='64' id='a75080c6'/>
+      <pointer-type-def type-id='607834f2' size-in-bits='64' id='60c9df2c'/>
+      <pointer-type-def type-id='4f1e6b9a' size-in-bits='64' id='66288ae4'/>
+      <pointer-type-def type-id='5d58e1d2' size-in-bits='64' id='c4cac78c'/>
+      <pointer-type-def type-id='07c30a78' size-in-bits='64' id='f65daff2'/>
+      <pointer-type-def type-id='d71978c5' size-in-bits='64' id='fe17c379'/>
+      <pointer-type-def type-id='03d219e2' size-in-bits='64' id='6484073c'/>
+      <pointer-type-def type-id='ff15393c' size-in-bits='64' id='89340c26'/>
+      <pointer-type-def type-id='c5392ac1' size-in-bits='64' id='4aecccbd'/>
+      <pointer-type-def type-id='3683b7e7' size-in-bits='64' id='dabeff1b'/>
+      <pointer-type-def type-id='bc51cf2c' size-in-bits='64' id='156433b6'/>
+      <pointer-type-def type-id='8eeb5a69' size-in-bits='64' id='fedb17fd'/>
+      <pointer-type-def type-id='8e9eec3c' size-in-bits='64' id='f48b73f6'/>
+      <pointer-type-def type-id='a79c760e' size-in-bits='64' id='aed2baa8'/>
+      <pointer-type-def type-id='078589a3' size-in-bits='64' id='6c534e17'/>
+      <pointer-type-def type-id='e589860a' size-in-bits='64' id='eddb9394'/>
+      <pointer-type-def type-id='7a592779' size-in-bits='64' id='a8564695'/>
+      <pointer-type-def type-id='d725da49' size-in-bits='64' id='54df184d'/>
+      <pointer-type-def type-id='2a275b06' size-in-bits='64' id='dae07608'/>
+      <pointer-type-def type-id='88d4f840' size-in-bits='64' id='f865774a'/>
+      <pointer-type-def type-id='45e743e9' size-in-bits='64' id='bbf015cd'/>
+      <pointer-type-def type-id='90d2ca45' size-in-bits='64' id='639b44d1'/>
+      <pointer-type-def type-id='820ec76f' size-in-bits='64' id='300d6413'/>
+      <pointer-type-def type-id='1ee46c97' size-in-bits='64' id='b615a053'/>
+      <pointer-type-def type-id='2572f485' size-in-bits='64' id='40f624e9'/>
+      <pointer-type-def type-id='1c0f29cf' size-in-bits='64' id='1c9e19fb'/>
+      <pointer-type-def type-id='ac104281' size-in-bits='64' id='8127e1dd'/>
+      <pointer-type-def type-id='d7741e39' size-in-bits='64' id='7e5b379d'/>
+      <pointer-type-def type-id='74edcdba' size-in-bits='64' id='21b6f944'/>
+      <pointer-type-def type-id='9f5ca0a3' size-in-bits='64' id='1ee0b597'/>
+      <pointer-type-def type-id='46af63cb' size-in-bits='64' id='f3d2e9a7'/>
+      <pointer-type-def type-id='da22736a' size-in-bits='64' id='71f0211c'/>
+      <pointer-type-def type-id='2914f7c3' size-in-bits='64' id='35f07b8f'/>
+      <pointer-type-def type-id='c83cb72c' size-in-bits='64' id='bc0ca82e'/>
+      <pointer-type-def type-id='ecd721d1' size-in-bits='64' id='1779e61d'/>
+      <pointer-type-def type-id='117b6b23' size-in-bits='64' id='25c6126f'/>
+      <pointer-type-def type-id='3f9037c9' size-in-bits='64' id='aef0224d'/>
+      <pointer-type-def type-id='07c93537' size-in-bits='64' id='e46f66f3'/>
+      <pointer-type-def type-id='f9617b12' size-in-bits='64' id='e91cc304'/>
+      <pointer-type-def type-id='a818b7a0' size-in-bits='64' id='7fa79446'/>
+      <pointer-type-def type-id='be9189df' size-in-bits='64' id='0a0aff97'/>
+      <function-decl name='sigprocmask' mangled-name='sigprocmask' filepath='kernel/signal.c' line='2928' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sigprocmask'>
+        <parameter type-id='95e97e5e' name='how' filepath='kernel/signal.c' line='2928' column='1'/>
+        <parameter type-id='9e80f729' name='set' filepath='kernel/signal.c' line='2928' column='1'/>
+        <parameter type-id='9e80f729' name='oldset' filepath='kernel/signal.c' line='2928' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dequeue_signal' mangled-name='dequeue_signal' filepath='kernel/signal.c' line='629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dequeue_signal'>
+        <parameter type-id='f23e2572' name='tsk' filepath='kernel/signal.c' line='629' column='1'/>
+        <parameter type-id='9e80f729' name='mask' filepath='kernel/signal.c' line='629' column='1'/>
+        <parameter type-id='3638c201' name='info' filepath='kernel/signal.c' line='629' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='send_sig_info' mangled-name='send_sig_info' filepath='kernel/signal.c' line='1602' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='send_sig_info'>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='1602' column='1'/>
+        <parameter type-id='0effb5d0' name='info' filepath='kernel/signal.c' line='1602' column='1'/>
+        <parameter type-id='f23e2572' name='p' filepath='kernel/signal.c' line='1602' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kill_pid' mangled-name='kill_pid' filepath='kernel/signal.c' line='1798' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kill_pid'>
+        <parameter type-id='b94e5398' name='pid' filepath='kernel/signal.c' line='1798' column='1'/>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='1798' column='1'/>
+        <parameter type-id='95e97e5e' name='priv' filepath='kernel/signal.c' line='1798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_sigaction' mangled-name='kernel_sigaction' filepath='kernel/signal.c' line='3927' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_sigaction'>
+        <parameter type-id='95e97e5e' name='sig' filepath='kernel/signal.c' line='3927' column='1'/>
+        <parameter type-id='8cdd9566' name='action' filepath='kernel/signal.c' line='3927' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_signals' mangled-name='flush_signals' filepath='kernel/signal.c' line='476' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_signals'>
+        <parameter type-id='f23e2572' name='t' filepath='kernel/signal.c' line='476' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='94dd3300' size-in-bits='64' id='cfbdf512'/>
+      <function-type size-in-bits='64' id='5332c7dc'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='cfff5953'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24c24978'>
+        <parameter type-id='33c599da'/>
+        <parameter type-id='c484cc9e'/>
+        <return type-id='26a90f95'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a43a9295'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='fb7d87a1'/>
+        <return type-id='b1a0a119'/>
+      </function-type>
+      <function-type size-in-bits='64' id='203c1d4d'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b1517543'>
+        <parameter type-id='60a257ef'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9e22fc50'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='10a7f6b4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0afc6f78'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='806a4586'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='2665334e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee59844'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='749ee287'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='969fc316'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <parameter type-id='9b7c55ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2cfafd1c'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28d1931f'>
+        <parameter type-id='8cffa561'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4ed460e4'>
+        <parameter type-id='33c599da'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='603a76bb'>
+        <parameter type-id='33c599da'/>
+        <parameter type-id='a42536cd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='313c6196'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ed4be5c0'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b94c22b'>
+        <parameter type-id='2bf16f59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='87732674'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ad7a215'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d544aa1'>
+        <parameter type-id='0906f5b9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59bb6212'>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a21db860'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='8b175043'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e83077d'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='8b175043'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62855293'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='4a89adae'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='081f19f3'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='79808846'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b52da57b'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='cfff5953'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f83e831'>
+        <parameter type-id='8b175043'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='595c4720'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abe3ca10'>
+        <parameter type-id='23d6768c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='287b404f'>
+        <parameter type-id='23d6768c'/>
+        <parameter type-id='7fa6eeb8'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca8c1528'>
+        <parameter type-id='23d6768c'/>
+        <parameter type-id='2bf16f59'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='439a4d86'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='572fbdca'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c443a9fc'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='266b9741'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aaf059d'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='572fbdca'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f590202'>
+        <parameter type-id='572fbdca'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86ee0347'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e330b13'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1621811c'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b99a3102'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='39fc1af7'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='53878b76'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f1c1e0f9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f139a2f0'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='a72a4e27'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e03cf6d2'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='684d860d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6077113'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='002ac4a6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3e33342a'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='31975058'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a721b4ab'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='7fa79446'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08694484'>
+        <parameter type-id='23d6768c'/>
+        <return type-id='e84b031a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8a3dbd4'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b715cae5'>
+        <parameter type-id='a47d3467'/>
+        <return type-id='3dad1a48'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f111d4f3'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='3dad1a48'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9728e02a'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='572fbdca'/>
+      </function-type>
+      <function-type size-in-bits='64' id='39ed8dbe'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8561c55'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='041bc907'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b28624a'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='fb55efa1'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b911101f'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='59145b91'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <return type-id='9b7c55ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='30247438'>
+        <parameter type-id='07d0a3e7'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54c5fdf4'>
+        <parameter type-id='07d0a3e7'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9babdafa'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f060985'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='cf536864'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8804cbe4'>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90c1df7f'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='03054cfa'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4a13f9'>
+        <parameter type-id='33c599da'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4851ce38'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98617d6e'>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='607834f2'>
+        <parameter type-id='a47d3467'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d58e1d2'>
+        <parameter type-id='b88dd945'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c30a78'>
+        <parameter type-id='cfff5953'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d71978c5'>
+        <parameter type-id='cfff5953'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='03d219e2'>
+        <parameter type-id='8cffa561'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff15393c'>
+        <parameter type-id='07d0a3e7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c5392ac1'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='03d48e96'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3683b7e7'>
+        <parameter type-id='33c599da'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc51cf2c'>
+        <parameter type-id='33c599da'/>
+        <parameter type-id='2665334e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8eeb5a69'>
+        <parameter type-id='7c6e0e0c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e9eec3c'>
+        <parameter type-id='44bef697'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a79c760e'>
+        <parameter type-id='2bf16f59'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='078589a3'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e589860a'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='df4b7819'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a592779'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='bd83ae50'/>
+        <parameter type-id='4616a179'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d725da49'>
+        <parameter type-id='b9419dc5'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a275b06'>
+        <parameter type-id='0906f5b9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88d4f840'>
+        <parameter type-id='0906f5b9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='90d2ca45'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='fb55efa1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06c207bd'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='f4e2facd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='820ec76f'>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ee46c97'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='6bb0a326'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2572f485'>
+        <parameter type-id='e7d2a5fc'/>
+        <parameter type-id='3dad1a48'/>
+        <parameter type-id='3dad1a48'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1c0f29cf'>
+        <parameter type-id='f23e2572'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ac104281'>
+        <parameter type-id='c2b4b27b'/>
+        <parameter type-id='572fbdca'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7741e39'>
+        <parameter type-id='ec77b5b8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74edcdba'>
+        <parameter type-id='ec77b5b8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f5ca0a3'>
+        <parameter type-id='572fbdca'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='46af63cb'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='a84c031d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da22736a'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='354f7eb9'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2914f7c3'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c83cb72c'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ecd721d1'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='e55856e5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='117b6b23'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3f9037c9'>
+        <parameter type-id='572fbdca'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07c93537'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3620a178'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c039af2e'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f9617b12'>
+        <parameter type-id='2bf16f59'/>
+        <parameter type-id='63e171df'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f7f4c91'>
+        <parameter type-id='3eb7c31c'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='eaa32e2f'/>
+      </function-type>
+      <pointer-type-def type-id='8d6f7724' size-in-bits='64' id='30b9fb16'/>
+      <pointer-type-def type-id='e5117942' size-in-bits='64' id='e3e70e04'/>
+      <pointer-type-def type-id='ca83d937' size-in-bits='64' id='d01e1ab3'/>
+      <pointer-type-def type-id='adff6731' size-in-bits='64' id='17642359'/>
+      <pointer-type-def type-id='155948e4' size-in-bits='64' id='3d4ca6d2'/>
+      <pointer-type-def type-id='882c3f1f' size-in-bits='64' id='e9037327'/>
+      <pointer-type-def type-id='b17e4f4d' size-in-bits='64' id='1f6324ad'/>
+      <pointer-type-def type-id='e32a3610' size-in-bits='64' id='aef13606'/>
+      <pointer-type-def type-id='e5fd9491' size-in-bits='64' id='43a53075'/>
+      <pointer-type-def type-id='02b70d8e' size-in-bits='64' id='0d8953a0'/>
+      <pointer-type-def type-id='3dbb7e50' size-in-bits='64' id='0f294852'/>
+      <pointer-type-def type-id='c64b743f' size-in-bits='64' id='578c706b'/>
+      <pointer-type-def type-id='b44140ca' size-in-bits='64' id='29bf40b4'/>
+      <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='adff6731'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='49178f86' 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='eaa32e2f' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='91ce1af9' 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='587f89d2' 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='d80b72e6' 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='ac1fa8c0' 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='b50a4934' visibility='default' filepath='kernel/trace/trace.h' line='168' 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='375' column='1' id='155948e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event_call' type-id='23d6768c' visibility='default' filepath='include/linux/trace_events.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='include/linux/trace_events.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='include/linux/trace_events.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='system' type-id='f4f46ed0' visibility='default' filepath='include/linux/trace_events.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='402' 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='882c3f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tracer' type-id='0a18715a' 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='2473b64b' visibility='default' filepath='kernel/trace/trace.h' line='189' 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='b17e4f4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid_max' type-id='95e97e5e' 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='1d2c2b85' 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='431' column='1' id='e32a3610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opts' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='434' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='56d268db' size-in-bits='64' id='2473b64b'/>
+      <pointer-type-def type-id='10143522' size-in-bits='64' id='f4f46ed0'/>
+      <pointer-type-def type-id='f20168e6' size-in-bits='64' id='a0260edc'/>
+      <class-decl name='trace_option_dentry' size-in-bits='256' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='441' column='1' id='56d268db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='445' 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='1356' column='1' id='10143522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subsystem' type-id='841939f3' visibility='default' filepath='kernel/trace/trace.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='1359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='1360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1362' 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='422' column='1' id='f20168e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='424' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ba400603' size-in-bits='64' id='841939f3'/>
+      <class-decl name='event_subsystem' size-in-bits='320' is-struct='yes' visibility='default' filepath='kernel/trace/trace.h' line='1349' column='1' id='ba400603'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='1351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='kernel/trace/trace.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1353' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/smp.c' language='LANG_C89'>
+      <var-decl name='nr_cpu_ids' type-id='f0981eeb' mangled-name='nr_cpu_ids' visibility='default' filepath='kernel/smp.c' line='568' column='1' elf-symbol-id='nr_cpu_ids'/>
+      <function-decl name='on_each_cpu' mangled-name='on_each_cpu' filepath='kernel/smp.c' line='611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='on_each_cpu'>
+        <parameter type-id='b7f9d8e6' name='func' filepath='kernel/smp.c' line='611' column='1'/>
+        <parameter type-id='eaa32e2f' name='info' filepath='kernel/smp.c' line='611' column='1'/>
+        <parameter type-id='95e97e5e' name='wait' filepath='kernel/smp.c' line='611' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='smp_call_function_single' mangled-name='smp_call_function_single' filepath='kernel/smp.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smp_call_function_single'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/smp.c' line='269' column='1'/>
+        <parameter type-id='89714567' name='func' filepath='kernel/smp.c' line='269' column='1'/>
+        <parameter type-id='eaa32e2f' name='info' filepath='kernel/smp.c' line='269' column='1'/>
+        <parameter type-id='95e97e5e' name='wait' filepath='kernel/smp.c' line='270' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='smp_call_function' mangled-name='smp_call_function' filepath='kernel/smp.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smp_call_function'>
+        <parameter type-id='89714567' name='func' filepath='kernel/smp.c' line='506' column='1'/>
+        <parameter type-id='eaa32e2f' name='info' filepath='kernel/smp.c' line='506' column='1'/>
+        <parameter type-id='95e97e5e' name='wait' filepath='kernel/smp.c' line='506' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/smpboot.c' language='LANG_C89'>
+      <class-decl name='smp_hotplug_thread' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/smpboot.h' line='31' column='1' id='889a8a64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='store' type-id='afd4c988' visibility='default' filepath='include/linux/smpboot.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/smpboot.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='thread_should_run' type-id='f02a5e83' visibility='default' filepath='include/linux/smpboot.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='thread_fn' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='create' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='setup' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='cleanup' type-id='5c86fa1f' visibility='default' filepath='include/linux/smpboot.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='park' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='unpark' type-id='4a84e7de' visibility='default' filepath='include/linux/smpboot.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='selfparking' type-id='b50a4934' visibility='default' filepath='include/linux/smpboot.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='thread_comm' type-id='80f4b756' visibility='default' filepath='include/linux/smpboot.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='889a8a64' size-in-bits='64' id='150fd0b2'/>
+      <pointer-type-def type-id='f23e2572' size-in-bits='64' id='afd4c988'/>
+      <pointer-type-def type-id='e69c1394' size-in-bits='64' id='4a84e7de'/>
+      <pointer-type-def type-id='32ca6abb' size-in-bits='64' id='5c86fa1f'/>
+      <function-decl name='smpboot_register_percpu_thread' mangled-name='smpboot_register_percpu_thread' filepath='kernel/smpboot.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='smpboot_register_percpu_thread'>
+        <parameter type-id='150fd0b2' name='plug_thread' filepath='kernel/smpboot.c' line='290' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e69c1394'>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='32ca6abb'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='592' column='1' id='7a7ea727'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='59f1923f' visibility='default' filepath='include/linux/interrupt.h' line='594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='49178f86' visibility='default' filepath='include/linux/interrupt.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='08b16374' visibility='default' filepath='include/linux/interrupt.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='7359adad' visibility='default' filepath='include/linux/interrupt.h' line='598' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7a7ea727' size-in-bits='64' id='59f1923f'/>
+      <pointer-type-def type-id='5bbf1052' size-in-bits='64' id='08b16374'/>
+      <function-decl name='tasklet_kill' mangled-name='tasklet_kill' filepath='kernel/softirq.c' line='560' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_kill'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='560' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tasklet_init' mangled-name='tasklet_init' filepath='kernel/softirq.c' line='549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tasklet_init'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='549' column='1'/>
+        <parameter type-id='08b16374' name='func' filepath='kernel/softirq.c' line='550' column='1'/>
+        <parameter type-id='7359adad' name='data' filepath='kernel/softirq.c' line='550' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tasklet_schedule' mangled-name='__tasklet_schedule' filepath='kernel/softirq.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_schedule'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='487' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__tasklet_hi_schedule' mangled-name='__tasklet_hi_schedule' filepath='kernel/softirq.c' line='494' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__tasklet_hi_schedule'>
+        <parameter type-id='59f1923f' name='t' filepath='kernel/softirq.c' line='494' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='7359adad' name='ip' filepath='kernel/softirq.c' line='166' column='1'/>
+        <parameter type-id='f0981eeb' name='cnt' filepath='kernel/softirq.c' line='166' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5bbf1052'>
+        <parameter type-id='7359adad'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/stacktrace.c' language='LANG_C89'>
+      <pointer-type-def type-id='9cbd1c16' size-in-bits='64' id='f9b37274'/>
+      <function-decl name='stack_trace_print' mangled-name='stack_trace_print' filepath='kernel/stacktrace.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='stack_trace_print'>
+        <parameter type-id='f9b37274' name='entries' filepath='kernel/stacktrace.c' line='23' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_entries' filepath='kernel/stacktrace.c' line='23' column='1'/>
+        <parameter type-id='95e97e5e' name='spaces' filepath='kernel/stacktrace.c' line='24' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sys.c' language='LANG_C89'>
+      <var-decl name='overflowuid' type-id='95e97e5e' mangled-name='overflowuid' visibility='default' filepath='kernel/sys.c' line='137' column='1' elf-symbol-id='overflowuid'/>
+      <var-decl name='overflowgid' type-id='95e97e5e' mangled-name='overflowgid' visibility='default' filepath='kernel/sys.c' line='138' column='1' elf-symbol-id='overflowgid'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/sysctl.c' language='LANG_C89'>
+      <function-decl name='proc_dointvec' mangled-name='proc_dointvec' filepath='kernel/sysctl.c' line='2594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proc_dointvec'>
+        <parameter type-id='631dc3c1' name='table' filepath='kernel/sysctl.c' line='2594' column='1'/>
+        <parameter type-id='95e97e5e' name='write' filepath='kernel/sysctl.c' line='2594' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='kernel/sysctl.c' line='2595' column='1'/>
+        <parameter type-id='78c01427' name='lenp' filepath='kernel/sysctl.c' line='2595' column='1'/>
+        <parameter type-id='b53e8dbb' name='ppos' filepath='kernel/sysctl.c' line='2595' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/alarmtimer.c' language='LANG_C89'>
+      <class-decl name='rtc_device' size-in-bits='12352' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='103' column='1' id='89ae06e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/linux/rtc.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/rtc.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='ops' type-id='b902d9c7' visibility='default' filepath='include/linux/rtc.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='ops_lock' type-id='925167dc' visibility='default' filepath='include/linux/rtc.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7936'>
+          <var-decl name='char_dev' type-id='22f86351' visibility='default' filepath='include/linux/rtc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='irq_data' type-id='7359adad' visibility='default' filepath='include/linux/rtc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='irq_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/rtc.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9216'>
+          <var-decl name='irq_queue' type-id='b5ab048f' visibility='default' filepath='include/linux/rtc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='async_queue' type-id='5bb9c75d' visibility='default' filepath='include/linux/rtc.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='irq_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9504'>
+          <var-decl name='max_user_freq' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9536'>
+          <var-decl name='timerqueue' type-id='ff3c7f20' visibility='default' filepath='include/linux/rtc.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='aie_timer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='uie_rtctimer' type-id='01786452' visibility='default' filepath='include/linux/rtc.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='pie_timer' type-id='b6993efc' visibility='default' filepath='include/linux/rtc.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='pie_enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='irqwork' type-id='ef9025d0' visibility='default' filepath='include/linux/rtc.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11712'>
+          <var-decl name='uie_unsupported' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='set_offset_nsec' type-id='bd54fe1a' visibility='default' filepath='include/linux/rtc.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11848'>
+          <var-decl name='nvram_old_abi' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='nvram' type-id='c0e2acc9' visibility='default' filepath='include/linux/rtc.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='range_min' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='range_max' type-id='13afd1c1' visibility='default' filepath='include/linux/rtc.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='start_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='offset_secs' type-id='1afd27ac' visibility='default' filepath='include/linux/rtc.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='set_start_time' type-id='b50a4934' visibility='default' filepath='include/linux/rtc.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/rtc.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='rtc_class_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/linux/rtc.h' line='76' column='1' id='fd1fa73c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ioctl' type-id='05594c99' visibility='default' filepath='include/linux/rtc.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_time' type-id='57d10d30' visibility='default' filepath='include/linux/rtc.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='read_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_alarm' type-id='d3769ffd' visibility='default' filepath='include/linux/rtc.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='proc' type-id='103ef621' visibility='default' filepath='include/linux/rtc.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='alarm_irq_enable' type-id='7b683b77' visibility='default' filepath='include/linux/rtc.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='read_offset' type-id='ab7ca002' visibility='default' filepath='include/linux/rtc.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='set_offset' type-id='3b25b30a' visibility='default' filepath='include/linux/rtc.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/rtc.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='fa8285d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' 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='95e97e5e' visibility='default' filepath='include/uapi/linux/rtc.h' line='30' 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='e05187bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='002ac4a6' 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='002ac4a6' 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='fa8285d4' 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='92' column='1' id='01786452'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/rtc.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='period' type-id='fbc017ef' visibility='default' filepath='include/linux/rtc.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='func' type-id='85dc754e' visibility='default' filepath='include/linux/rtc.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rtc' type-id='5992ae83' visibility='default' filepath='include/linux/rtc.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/linux/rtc.h' line='97' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='timeu64_t' type-id='d3130597' filepath='include/linux/time64.h' line='9' column='1' id='13afd1c1'/>
+      <class-decl name='alarm' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/alarmtimer.h' line='42' column='1' id='f6b32752'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='node' type-id='fe3acb42' visibility='default' filepath='include/linux/alarmtimer.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='timer' type-id='b6993efc' visibility='default' filepath='include/linux/alarmtimer.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='function' type-id='7432d5be' visibility='default' filepath='include/linux/alarmtimer.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='type' type-id='6b8d4b77' visibility='default' filepath='include/linux/alarmtimer.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='state' type-id='95e97e5e' visibility='default' filepath='include/linux/alarmtimer.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/alarmtimer.h' line='48' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='alarmtimer_restart' filepath='include/linux/alarmtimer.h' line='23' column='1' id='c3082d06'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ALARMTIMER_NORESTART' value='0'/>
+        <enumerator name='ALARMTIMER_RESTART' value='1'/>
+      </enum-decl>
+      <enum-decl name='alarmtimer_type' filepath='include/linux/alarmtimer.h' line='11' column='1' id='6b8d4b77'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='ALARM_REALTIME' value='0'/>
+        <enumerator name='ALARM_BOOTTIME' value='1'/>
+        <enumerator name='ALARM_NUMTYPE' value='2'/>
+        <enumerator name='ALARM_REALTIME_FREEZER' value='3'/>
+        <enumerator name='ALARM_BOOTTIME_FREEZER' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='f6b32752' size-in-bits='64' id='be65fdd0'/>
+      <qualified-type-def type-id='f6b32752' const='yes' id='dba44491'/>
+      <pointer-type-def type-id='dba44491' size-in-bits='64' id='7e983261'/>
+      <qualified-type-def type-id='fd1fa73c' const='yes' id='aed6b757'/>
+      <pointer-type-def type-id='aed6b757' size-in-bits='64' id='b902d9c7'/>
+      <pointer-type-def type-id='63df6bcc' size-in-bits='64' id='7432d5be'/>
+      <pointer-type-def type-id='0506cdd8' size-in-bits='64' id='3b25b30a'/>
+      <pointer-type-def type-id='5abdb7a8' size-in-bits='64' id='ab7ca002'/>
+      <pointer-type-def type-id='2b4e6dbe' size-in-bits='64' id='57d10d30'/>
+      <pointer-type-def type-id='0ad12489' size-in-bits='64' id='d3769ffd'/>
+      <pointer-type-def type-id='415e4835' size-in-bits='64' id='103ef621'/>
+      <pointer-type-def type-id='8edd926b' size-in-bits='64' id='7b683b77'/>
+      <pointer-type-def type-id='23f8b0bd' size-in-bits='64' id='05594c99'/>
+      <pointer-type-def type-id='bd54fe1a' size-in-bits='64' id='3ccc2590'/>
+      <pointer-type-def type-id='89ae06e3' size-in-bits='64' id='5992ae83'/>
+      <pointer-type-def type-id='fa8285d4' size-in-bits='64' id='2b8e7a42'/>
+      <pointer-type-def type-id='e05187bf' size-in-bits='64' id='6d120807'/>
+      <pointer-type-def type-id='dad263ec' size-in-bits='64' id='85dc754e'/>
+      <function-decl name='alarmtimer_get_rtcdev' mangled-name='alarmtimer_get_rtcdev' filepath='kernel/time/alarmtimer.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarmtimer_get_rtcdev'>
+        <return type-id='5992ae83'/>
+      </function-decl>
+      <function-decl name='alarm_start_relative' mangled-name='alarm_start_relative' filepath='kernel/time/alarmtimer.c' line='385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_start_relative'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='385' column='1'/>
+        <parameter type-id='fbc017ef' name='start' filepath='kernel/time/alarmtimer.c' line='385' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_start' mangled-name='alarm_start' filepath='kernel/time/alarmtimer.c' line='365' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_start'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='365' column='1'/>
+        <parameter type-id='fbc017ef' name='start' filepath='kernel/time/alarmtimer.c' line='365' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_init' mangled-name='alarm_init' filepath='kernel/time/alarmtimer.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_init'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='351' column='1'/>
+        <parameter type-id='6b8d4b77' name='type' filepath='kernel/time/alarmtimer.c' line='351' column='1'/>
+        <parameter type-id='7432d5be' name='function' filepath='kernel/time/alarmtimer.c' line='352' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alarm_forward' mangled-name='alarm_forward' filepath='kernel/time/alarmtimer.c' line='450' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_forward'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='450' column='1'/>
+        <parameter type-id='fbc017ef' name='now' filepath='kernel/time/alarmtimer.c' line='450' column='1'/>
+        <parameter type-id='fbc017ef' name='interval' filepath='kernel/time/alarmtimer.c' line='450' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='alarm_expires_remaining' mangled-name='alarm_expires_remaining' filepath='kernel/time/alarmtimer.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_expires_remaining'>
+        <parameter type-id='7e983261' name='alarm' filepath='kernel/time/alarmtimer.c' line='234' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='alarm_cancel' mangled-name='alarm_cancel' filepath='kernel/time/alarmtimer.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alarm_cancel'>
+        <parameter type-id='be65fdd0' name='alarm' filepath='kernel/time/alarmtimer.c' line='438' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='63df6bcc'>
+        <parameter type-id='be65fdd0'/>
+        <parameter type-id='fbc017ef'/>
+        <return type-id='c3082d06'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0506cdd8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5abdb7a8'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='3ccc2590'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b4e6dbe'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='2b8e7a42'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ad12489'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='6d120807'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='415e4835'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8edd926b'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23f8b0bd'>
+        <parameter type-id='fa0b179b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/clockevents.c' language='LANG_C89'>
+      <class-decl name='clock_event_device' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/linux/clockchips.h' line='100' column='1' id='13964735'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event_handler' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_next_event' type-id='1bff60d1' visibility='default' filepath='include/linux/clockchips.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_next_ktime' type-id='a4477ecf' visibility='default' filepath='include/linux/clockchips.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_event' type-id='fbc017ef' visibility='default' filepath='include/linux/clockchips.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_delta_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clockchips.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clockchips.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state_use_accessors' type-id='3d8b7ef7' visibility='default' filepath='include/linux/clockchips.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='f0981eeb' visibility='default' filepath='include/linux/clockchips.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='retries' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_state_periodic' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_state_oneshot' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='set_state_oneshot_stopped' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='set_state_shutdown' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tick_resume' type-id='d6a989c3' visibility='default' filepath='include/linux/clockchips.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='broadcast' type-id='5858ec15' visibility='default' filepath='include/linux/clockchips.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='suspend' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='resume' type-id='7106dab8' visibility='default' filepath='include/linux/clockchips.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='max_delta_ticks' type-id='7359adad' visibility='default' filepath='include/linux/clockchips.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clockchips.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='irq' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='bound_on' type-id='95e97e5e' visibility='default' filepath='include/linux/clockchips.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cpumask' type-id='5f8a1ac4' visibility='default' filepath='include/linux/clockchips.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clockchips.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clockchips.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='clock_event_state' filepath='include/linux/clockchips.h' line='35' column='1' id='3d8b7ef7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CLOCK_EVT_STATE_DETACHED' value='0'/>
+        <enumerator name='CLOCK_EVT_STATE_SHUTDOWN' value='1'/>
+        <enumerator name='CLOCK_EVT_STATE_PERIODIC' value='2'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT' value='3'/>
+        <enumerator name='CLOCK_EVT_STATE_ONESHOT_STOPPED' value='4'/>
+      </enum-decl>
+      <pointer-type-def type-id='13964735' size-in-bits='64' id='aff725d5'/>
+      <pointer-type-def type-id='c740a74f' size-in-bits='64' id='d6a989c3'/>
+      <pointer-type-def type-id='632cd7c3' size-in-bits='64' id='a4477ecf'/>
+      <pointer-type-def type-id='242d8ed5' size-in-bits='64' id='1bff60d1'/>
+      <pointer-type-def type-id='64588176' size-in-bits='64' id='7106dab8'/>
+      <pointer-type-def type-id='075176f9' size-in-bits='64' id='5858ec15'/>
+      <function-decl name='clockevents_config_and_register' mangled-name='clockevents_config_and_register' filepath='kernel/time/clockevents.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clockevents_config_and_register'>
+        <parameter type-id='aff725d5' name='dev' filepath='kernel/time/clockevents.c' line='505' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='kernel/time/clockevents.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='min_delta' filepath='kernel/time/clockevents.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='max_delta' filepath='kernel/time/clockevents.c' line='507' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/clocksource.c' language='LANG_C89'>
+      <function-decl name='clocks_calc_mult_shift' mangled-name='clocks_calc_mult_shift' filepath='kernel/time/clocksource.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='clocks_calc_mult_shift'>
+        <parameter type-id='f9409001' name='mult' filepath='kernel/time/clocksource.c' line='45' column='1'/>
+        <parameter type-id='f9409001' name='shift' filepath='kernel/time/clocksource.c' line='45' column='1'/>
+        <parameter type-id='19c2251e' name='from' filepath='kernel/time/clocksource.c' line='45' column='1'/>
+        <parameter type-id='19c2251e' name='to' filepath='kernel/time/clocksource.c' line='45' column='1'/>
+        <parameter type-id='19c2251e' name='maxsec' filepath='kernel/time/clocksource.c' line='45' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__clocksource_register_scale' mangled-name='__clocksource_register_scale' filepath='kernel/time/clocksource.c' line='966' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__clocksource_register_scale'>
+        <parameter type-id='4dfe71de' name='cs' filepath='kernel/time/clocksource.c' line='966' column='1'/>
+        <parameter type-id='19c2251e' name='scale' filepath='kernel/time/clocksource.c' line='966' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='kernel/time/clocksource.c' line='966' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='90d08a78' size-in-bits='64' id='4dfe71de'/>
+      <class-decl name='clocksource' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/clocksource.h' line='82' column='1' id='90d08a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='34fd0229' visibility='default' filepath='include/linux/clocksource.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_idle_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='maxadj' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='archdata' type-id='e596acfa' visibility='default' filepath='include/linux/clocksource.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clocksource.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clocksource.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clocksource.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable' type-id='b4ade13a' visibility='default' filepath='include/linux/clocksource.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clocksource.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resume' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mark_unstable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tick_stable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clocksource.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_clocksource_data' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='7' column='1' id='e596acfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_mode' type-id='5c3b1f01' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='27fe31c0' size-in-bits='64' id='b4ade13a'/>
+      <pointer-type-def type-id='4993d1b5' size-in-bits='64' id='34fd0229'/>
+      <pointer-type-def type-id='a628efab' size-in-bits='64' id='1f93431f'/>
+      <enum-decl name='vdso_clock_mode' filepath='include/vdso/clocksource.h' line='11' column='1' id='5c3b1f01'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDSO_CLOCKMODE_NONE' value='0'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER' value='1'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT' value='2'/>
+        <enumerator name='VDSO_CLOCKMODE_MAX' value='3'/>
+        <enumerator name='VDSO_CLOCKMODE_TIMENS' value='2147483647'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr 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='88326653'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_HARD' value='8'/>
+        <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'/>
+        <enumerator name='HRTIMER_MODE_ABS_HARD' value='8'/>
+        <enumerator name='HRTIMER_MODE_REL_HARD' value='9'/>
+        <enumerator name='HRTIMER_MODE_ABS_PINNED_HARD' value='10'/>
+        <enumerator name='HRTIMER_MODE_REL_PINNED_HARD' value='11'/>
+      </enum-decl>
+      <qualified-type-def type-id='b6993efc' const='yes' id='545b687b'/>
+      <pointer-type-def type-id='545b687b' size-in-bits='64' id='1ce53783'/>
+      <qualified-type-def type-id='88326653' const='yes' id='9bedc94f'/>
+      <qualified-type-def type-id='fbc017ef' const='yes' id='ddb8523f'/>
+      <function-decl name='hrtimer_init' mangled-name='hrtimer_init' filepath='kernel/time/hrtimer.c' line='1488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_init'>
+        <parameter type-id='08c8d0fa' name='timer' filepath='kernel/time/hrtimer.c' line='1488' column='1'/>
+        <parameter type-id='a1c3b834' name='clock_id' filepath='kernel/time/hrtimer.c' line='1488' column='1'/>
+        <parameter type-id='88326653' name='mode' filepath='kernel/time/hrtimer.c' line='1489' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hrtimer_try_to_cancel' mangled-name='hrtimer_try_to_cancel' filepath='kernel/time/hrtimer.c' line='1215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_try_to_cancel'>
+        <parameter type-id='08c8d0fa' name='timer' filepath='kernel/time/hrtimer.c' line='1215' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hrtimer_start_range_ns' mangled-name='hrtimer_start_range_ns' filepath='kernel/time/hrtimer.c' line='1179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_start_range_ns'>
+        <parameter type-id='08c8d0fa' name='timer' filepath='kernel/time/hrtimer.c' line='1179' column='1'/>
+        <parameter type-id='fbc017ef' name='tim' filepath='kernel/time/hrtimer.c' line='1179' column='1'/>
+        <parameter type-id='91ce1af9' name='delta_ns' filepath='kernel/time/hrtimer.c' line='1180' column='1'/>
+        <parameter type-id='9bedc94f' name='mode' filepath='kernel/time/hrtimer.c' line='1180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hrtimer_active' mangled-name='hrtimer_active' filepath='kernel/time/hrtimer.c' line='1503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_active'>
+        <parameter type-id='1ce53783' name='timer' filepath='kernel/time/hrtimer.c' line='1503' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ktime_add_safe' mangled-name='ktime_add_safe' filepath='kernel/time/hrtimer.c' line='323' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_add_safe'>
+        <parameter type-id='ddb8523f' name='lhs' filepath='kernel/time/hrtimer.c' line='323' column='1'/>
+        <parameter type-id='ddb8523f' name='rhs' filepath='kernel/time/hrtimer.c' line='323' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='hrtimer_forward' mangled-name='hrtimer_forward' filepath='kernel/time/hrtimer.c' line='936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_forward'>
+        <parameter type-id='08c8d0fa' name='timer' filepath='kernel/time/hrtimer.c' line='936' column='1'/>
+        <parameter type-id='fbc017ef' name='now' filepath='kernel/time/hrtimer.c' line='936' column='1'/>
+        <parameter type-id='fbc017ef' name='interval' filepath='kernel/time/hrtimer.c' line='936' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='hrtimer_cancel' mangled-name='hrtimer_cancel' filepath='kernel/time/hrtimer.c' line='1337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hrtimer_cancel'>
+        <parameter type-id='08c8d0fa' name='timer' filepath='kernel/time/hrtimer.c' line='1337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hrtimer_get_remaining' mangled-name='__hrtimer_get_remaining' filepath='kernel/time/hrtimer.c' line='1356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hrtimer_get_remaining'>
+        <parameter type-id='1ce53783' name='timer' filepath='kernel/time/hrtimer.c' line='1356' column='1'/>
+        <parameter type-id='b50a4934' name='adjust' filepath='kernel/time/hrtimer.c' line='1356' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/sched_clock.c' language='LANG_C89'>
+      <function-decl name='sched_clock' mangled-name='sched_clock' filepath='kernel/time/sched_clock.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sched_clock'>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/tick-sched.c' language='LANG_C89'>
+      <function-decl name='get_cpu_idle_time_us' mangled-name='get_cpu_idle_time_us' filepath='kernel/time/tick-sched.c' line='566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_cpu_idle_time_us'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/time/tick-sched.c' line='566' column='1'/>
+        <parameter type-id='3df9fd28' name='last_update_time' filepath='kernel/time/tick-sched.c' line='566' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/time.c' language='LANG_C89'>
+      <class-decl name='timezone' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='21' column='1' id='6751193a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tz_minuteswest' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/time.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tz_dsttime' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/time.h' line='23' 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='2a693ac3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' 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='55c6233e' visibility='default' filepath='include/uapi/linux/time.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__kernel_time_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='89' column='1' id='f7d92306'/>
+      <typedef-decl name='__kernel_suseconds_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='41' column='1' id='55c6233e'/>
+      <class-decl name='timespec' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/time.h' line='10' column='1' id='a9c79a1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tv_sec' type-id='f7d92306' 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='bd54fe1a' visibility='default' filepath='include/uapi/linux/time.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9b7c55ef' const='yes' id='d238557f'/>
+      <qualified-type-def type-id='40a816ad' const='yes' id='5487ffdc'/>
+      <pointer-type-def type-id='5487ffdc' size-in-bits='64' id='0817f042'/>
+      <var-decl name='sys_tz' type-id='6751193a' mangled-name='sys_tz' visibility='default' filepath='kernel/time/time.c' line='50' column='1' elf-symbol-id='sys_tz'/>
+      <function-decl name='timespec64_to_jiffies' mangled-name='timespec64_to_jiffies' filepath='kernel/time/time.c' line='650' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timespec64_to_jiffies'>
+        <parameter type-id='0817f042' name='value' filepath='kernel/time/time.c' line='650' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='set_normalized_timespec64' mangled-name='set_normalized_timespec64' filepath='kernel/time/time.c' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_normalized_timespec64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/time.c' line='523' column='1'/>
+        <parameter type-id='1afd27ac' name='sec' filepath='kernel/time/time.c' line='523' column='1'/>
+        <parameter type-id='9b7c55ef' name='nsec' filepath='kernel/time/time.c' line='523' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='nsecs_to_jiffies' mangled-name='nsecs_to_jiffies' filepath='kernel/time/time.c' line='845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nsecs_to_jiffies'>
+        <parameter type-id='91ce1af9' name='n' filepath='kernel/time/time.c' line='845' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='ns_to_timeval' mangled-name='ns_to_timeval' filepath='kernel/time/time.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timeval'>
+        <parameter type-id='d238557f' name='nsec' filepath='kernel/time/time.c' line='485' column='1'/>
+        <return type-id='2a693ac3'/>
+      </function-decl>
+      <function-decl name='ns_to_timespec64' mangled-name='ns_to_timespec64' filepath='kernel/time/time.c' line='551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timespec64'>
+        <parameter type-id='d238557f' name='nsec' filepath='kernel/time/time.c' line='551' column='1'/>
+        <return type-id='40a816ad'/>
+      </function-decl>
+      <function-decl name='ns_to_timespec' mangled-name='ns_to_timespec' filepath='kernel/time/time.c' line='460' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ns_to_timespec'>
+        <parameter type-id='d238557f' name='nsec' filepath='kernel/time/time.c' line='460' column='1'/>
+        <return type-id='a9c79a1f'/>
+      </function-decl>
+      <function-decl name='mktime64' mangled-name='mktime64' filepath='kernel/time/time.c' line='433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mktime64'>
+        <parameter type-id='20f5f452' name='year0' filepath='kernel/time/time.c' line='433' column='1'/>
+        <parameter type-id='20f5f452' name='mon0' filepath='kernel/time/time.c' line='433' column='1'/>
+        <parameter type-id='20f5f452' name='day' filepath='kernel/time/time.c' line='434' column='1'/>
+        <parameter type-id='20f5f452' name='hour' filepath='kernel/time/time.c' line='434' column='1'/>
+        <parameter type-id='20f5f452' name='min' filepath='kernel/time/time.c' line='435' column='1'/>
+        <parameter type-id='20f5f452' name='sec' filepath='kernel/time/time.c' line='435' column='1'/>
+        <return type-id='1afd27ac'/>
+      </function-decl>
+      <function-decl name='jiffies_to_usecs' mangled-name='jiffies_to_usecs' filepath='kernel/time/time.c' line='393' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_to_usecs'>
+        <parameter type-id='9cbd1c16' name='j' filepath='kernel/time/time.c' line='393' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='jiffies_to_msecs' mangled-name='jiffies_to_msecs' filepath='kernel/time/time.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_to_msecs'>
+        <parameter type-id='9cbd1c16' name='j' filepath='kernel/time/time.c' line='376' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='jiffies_64_to_clock_t' mangled-name='jiffies_64_to_clock_t' filepath='kernel/time/time.c' line='742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='jiffies_64_to_clock_t'>
+        <parameter type-id='91ce1af9' name='x' filepath='kernel/time/time.c' line='742' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='__usecs_to_jiffies' mangled-name='__usecs_to_jiffies' filepath='kernel/time/time.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__usecs_to_jiffies'>
+        <parameter type-id='20f5f452' name='u' filepath='kernel/time/time.c' line='605' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='__msecs_to_jiffies' mangled-name='__msecs_to_jiffies' filepath='kernel/time/time.c' line='594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__msecs_to_jiffies'>
+        <parameter type-id='20f5f452' name='m' filepath='kernel/time/time.c' line='594' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/timeconv.c' language='LANG_C89'>
+      <class-decl name='tm' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/time.h' line='49' column='1' id='dddf6ca2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tm_sec' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tm_min' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tm_hour' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tm_mday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tm_mon' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tm_year' type-id='bd54fe1a' visibility='default' filepath='include/linux/time.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tm_wday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tm_yday' type-id='95e97e5e' visibility='default' filepath='include/linux/time.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='dddf6ca2' size-in-bits='64' id='d915a820'/>
+      <function-decl name='time64_to_tm' mangled-name='time64_to_tm' filepath='kernel/time/timeconv.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='time64_to_tm'>
+        <parameter type-id='1afd27ac' name='totalsecs' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <parameter type-id='d915a820' name='result' filepath='kernel/time/timeconv.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/timecounter.c' language='LANG_C89'>
+      <class-decl name='timecounter' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/timecounter.h' line='55' column='1' id='5a81cef0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cc' type-id='51a502f8' visibility='default' filepath='include/linux/timecounter.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cycle_last' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nsec' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='frac' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cyclecounter' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/timecounter.h' line='30' column='1' id='1d7ba247'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='57309e07' visibility='default' filepath='include/linux/timecounter.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/timecounter.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/timecounter.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/timecounter.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1d7ba247' const='yes' id='6ad2ac02'/>
+      <pointer-type-def type-id='6ad2ac02' size-in-bits='64' id='51a502f8'/>
+      <pointer-type-def type-id='5a81cef0' size-in-bits='64' id='b548a676'/>
+      <pointer-type-def type-id='6fca7363' size-in-bits='64' id='57309e07'/>
+      <function-decl name='timecounter_read' mangled-name='timecounter_read' filepath='kernel/time/timecounter.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timecounter_read'>
+        <parameter type-id='b548a676' name='tc' filepath='kernel/time/timecounter.c' line='52' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='timecounter_init' mangled-name='timecounter_init' filepath='kernel/time/timecounter.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='timecounter_init'>
+        <parameter type-id='b548a676' name='tc' filepath='kernel/time/timecounter.c' line='8' column='1'/>
+        <parameter type-id='51a502f8' name='cc' filepath='kernel/time/timecounter.c' line='9' column='1'/>
+        <parameter type-id='91ce1af9' name='start_tstamp' filepath='kernel/time/timecounter.c' line='10' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='6fca7363'>
+        <parameter type-id='51a502f8'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='73bb584e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <class-decl name='system_counterval_t' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='262' column='1' id='2a0f1e3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/timekeeping.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cs' type-id='4dfe71de' visibility='default' filepath='include/linux/timekeeping.h' line='264' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='clocksource' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/linux/clocksource.h' line='82' column='1' id='90d08a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='34fd0229' visibility='default' filepath='include/linux/clocksource.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mult' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='shift' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_idle_ns' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='maxadj' type-id='19c2251e' visibility='default' filepath='include/linux/clocksource.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='archdata' type-id='e596acfa' visibility='default' filepath='include/linux/clocksource.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='max_cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/clocksource.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/clocksource.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/clocksource.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rating' type-id='95e97e5e' visibility='default' filepath='include/linux/clocksource.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='enable' type-id='b4ade13a' visibility='default' filepath='include/linux/clocksource.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='disable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/clocksource.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='suspend' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='resume' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='mark_unstable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tick_stable' type-id='1f93431f' visibility='default' filepath='include/linux/clocksource.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/clocksource.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='arch_clocksource_data' size-in-bits='32' is-struct='yes' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='7' column='1' id='e596acfa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='clock_mode' type-id='5c3b1f01' visibility='default' filepath='arch/arm64/include/asm/clocksource.h' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='vdso_clock_mode' filepath='include/vdso/clocksource.h' line='11' column='1' id='5c3b1f01'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='VDSO_CLOCKMODE_NONE' value='0'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER' value='1'/>
+        <enumerator name='VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT' value='2'/>
+        <enumerator name='VDSO_CLOCKMODE_MAX' value='3'/>
+        <enumerator name='VDSO_CLOCKMODE_TIMENS' value='2147483647'/>
+      </enum-decl>
+      <class-decl name='system_time_snapshot' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='234' column='1' id='6d06c6cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cycles' type-id='91ce1af9' visibility='default' filepath='include/linux/timekeeping.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='real' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='raw' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='clock_was_set_seq' type-id='f0981eeb' visibility='default' filepath='include/linux/timekeeping.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='cs_was_changed_seq' type-id='f9b06939' visibility='default' filepath='include/linux/timekeeping.h' line='239' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='system_device_crosststamp' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/timekeeping.h' line='249' column='1' id='61fea883'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='device' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sys_realtime' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sys_monoraw' type-id='fbc017ef' visibility='default' filepath='include/linux/timekeeping.h' line='252' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='90d08a78' size-in-bits='64' id='4dfe71de'/>
+      <pointer-type-def type-id='27fe31c0' size-in-bits='64' id='b4ade13a'/>
+      <pointer-type-def type-id='c40caf76' size-in-bits='64' id='d5d36d38'/>
+      <pointer-type-def type-id='fbc017ef' size-in-bits='64' id='44372936'/>
+      <pointer-type-def type-id='2a0f1e3d' size-in-bits='64' id='2a14aacd'/>
+      <pointer-type-def type-id='61fea883' size-in-bits='64' id='587b4de3'/>
+      <pointer-type-def type-id='6d06c6cd' size-in-bits='64' id='9e33b18d'/>
+      <pointer-type-def type-id='4993d1b5' size-in-bits='64' id='34fd0229'/>
+      <pointer-type-def type-id='a628efab' size-in-bits='64' id='1f93431f'/>
+      <function-decl name='ktime_get_real_ts64' mangled-name='ktime_get_real_ts64' filepath='kernel/time/timekeeping.c' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_real_ts64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/timekeeping.c' line='726' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_with_offset' mangled-name='ktime_get_with_offset' filepath='kernel/time/timekeeping.c' line='790' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_with_offset'>
+        <parameter type-id='73bb584e' name='offs' filepath='kernel/time/timekeeping.c' line='790' column='1'/>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='ktime_get_ts64' mangled-name='ktime_get_ts64' filepath='kernel/time/timekeeping.c' line='880' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_ts64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/timekeeping.c' line='880' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_real_seconds' mangled-name='ktime_get_real_seconds' filepath='kernel/time/timekeeping.c' line='932' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_real_seconds'>
+        <return type-id='1afd27ac'/>
+      </function-decl>
+      <function-decl name='ktime_get_raw_ts64' mangled-name='ktime_get_raw_ts64' filepath='kernel/time/timekeeping.c' line='1417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_raw_ts64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/timekeeping.c' line='1417' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ktime_get_raw' mangled-name='ktime_get_raw' filepath='kernel/time/timekeeping.c' line='854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_raw'>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='ktime_get_mono_fast_ns' mangled-name='ktime_get_mono_fast_ns' filepath='kernel/time/timekeeping.c' line='472' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_mono_fast_ns'>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='ktime_get_boot_fast_ns' mangled-name='ktime_get_boot_fast_ns' filepath='kernel/time/timekeeping.c' line='505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get_boot_fast_ns'>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='ktime_get' mangled-name='ktime_get' filepath='kernel/time/timekeeping.c' line='747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ktime_get'>
+        <return type-id='fbc017ef'/>
+      </function-decl>
+      <function-decl name='getboottime64' mangled-name='getboottime64' filepath='kernel/time/timekeeping.c' line='2149' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='getboottime64'>
+        <parameter type-id='4151733d' name='ts' filepath='kernel/time/timekeeping.c' line='2149' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_device_system_crosststamp' mangled-name='get_device_system_crosststamp' filepath='kernel/time/timekeeping.c' line='1116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_device_system_crosststamp'>
+        <parameter type-id='d5d36d38' name='get_time_fn' filepath='kernel/time/timekeeping.c' line='1116' column='1'/>
+        <parameter type-id='eaa32e2f' name='ctx' filepath='kernel/time/timekeeping.c' line='1120' column='1'/>
+        <parameter type-id='9e33b18d' name='history_begin' filepath='kernel/time/timekeeping.c' line='1121' column='1'/>
+        <parameter type-id='587b4de3' name='xtstamp' filepath='kernel/time/timekeeping.c' line='1122' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='27fe31c0'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c40caf76'>
+        <parameter type-id='44372936'/>
+        <parameter type-id='2a14aacd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4993d1b5'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a628efab'>
+        <parameter type-id='4dfe71de'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/time/timer.c' language='LANG_C89'>
+      <var-decl name='jiffies_64' type-id='91ce1af9' mangled-name='jiffies_64' visibility='default' filepath='kernel/time/timer.c' line='59' column='1' elf-symbol-id='jiffies_64'/>
+      <function-decl name='schedule_timeout' mangled-name='schedule_timeout' filepath='kernel/time/timer.c' line='1870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout'>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/time/timer.c' line='1870' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='usleep_range' mangled-name='usleep_range' filepath='kernel/time/timer.c' line='2093' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='usleep_range'>
+        <parameter type-id='7359adad' name='min' filepath='kernel/time/timer.c' line='2093' column='1'/>
+        <parameter type-id='7359adad' name='max' filepath='kernel/time/timer.c' line='2093' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='add_timer_on' mangled-name='add_timer_on' filepath='kernel/time/timer.c' line='1159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_timer_on'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='1159' column='1'/>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/time/timer.c' line='1159' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='del_timer' mangled-name='del_timer' filepath='kernel/time/timer.c' line='1202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='1202' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='init_timer_key' mangled-name='init_timer_key' filepath='kernel/time/timer.c' line='809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_timer_key'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='809' column='1'/>
+        <parameter type-id='9582ad9a' name='func' filepath='kernel/time/timer.c' line='810' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/time/timer.c' line='810' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/time/timer.c' line='811' column='1'/>
+        <parameter type-id='a57283f9' name='key' filepath='kernel/time/timer.c' line='811' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='schedule_timeout_uninterruptible' mangled-name='schedule_timeout_uninterruptible' filepath='kernel/time/timer.c' line='1940' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout_uninterruptible'>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/time/timer.c' line='1940' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='schedule_timeout_interruptible' mangled-name='schedule_timeout_interruptible' filepath='kernel/time/timer.c' line='1926' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='schedule_timeout_interruptible'>
+        <parameter type-id='bd54fe1a' name='timeout' filepath='kernel/time/timer.c' line='1926' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='round_jiffies_up' mangled-name='round_jiffies_up' filepath='kernel/time/timer.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies_up'>
+        <parameter type-id='7359adad' name='j' filepath='kernel/time/timer.c' line='455' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='round_jiffies_relative' mangled-name='round_jiffies_relative' filepath='kernel/time/timer.c' line='405' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies_relative'>
+        <parameter type-id='7359adad' name='j' filepath='kernel/time/timer.c' line='405' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='round_jiffies' mangled-name='round_jiffies' filepath='kernel/time/timer.c' line='384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='round_jiffies'>
+        <parameter type-id='7359adad' name='j' filepath='kernel/time/timer.c' line='384' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='msleep_interruptible' mangled-name='msleep_interruptible' filepath='kernel/time/timer.c' line='2071' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msleep_interruptible'>
+        <parameter type-id='f0981eeb' name='msecs' filepath='kernel/time/timer.c' line='2071' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='msleep' mangled-name='msleep' filepath='kernel/time/timer.c' line='2057' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='msleep'>
+        <parameter type-id='f0981eeb' name='msecs' filepath='kernel/time/timer.c' line='2057' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mod_timer' mangled-name='mod_timer' filepath='kernel/time/timer.c' line='1110' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_timer'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='1110' column='1'/>
+        <parameter type-id='7359adad' name='expires' filepath='kernel/time/timer.c' line='1110' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='del_timer_sync' mangled-name='del_timer_sync' filepath='kernel/time/timer.c' line='1356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='del_timer_sync'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='1356' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='add_timer' mangled-name='add_timer' filepath='kernel/time/timer.c' line='1145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_timer'>
+        <parameter type-id='9248e67f' name='timer' filepath='kernel/time/timer.c' line='1145' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/trace/bpf_trace.c' language='LANG_C89'>
+      <function-decl name='bpf_trace_run1' mangled-name='bpf_trace_run1' filepath='kernel/trace/bpf_trace.c' line='1375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run1'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1375' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1375' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run2' mangled-name='bpf_trace_run2' filepath='kernel/trace/bpf_trace.c' line='1376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run2'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1376' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run3' mangled-name='bpf_trace_run3' filepath='kernel/trace/bpf_trace.c' line='1377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run3'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1377' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run4' mangled-name='bpf_trace_run4' filepath='kernel/trace/bpf_trace.c' line='1378' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run4'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1378' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run5' mangled-name='bpf_trace_run5' filepath='kernel/trace/bpf_trace.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run5'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1379' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run9' mangled-name='bpf_trace_run9' filepath='kernel/trace/bpf_trace.c' line='1383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run9'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1383' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run8' mangled-name='bpf_trace_run8' filepath='kernel/trace/bpf_trace.c' line='1382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run8'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1382' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run7' mangled-name='bpf_trace_run7' filepath='kernel/trace/bpf_trace.c' line='1381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run7'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1381' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run6' mangled-name='bpf_trace_run6' filepath='kernel/trace/bpf_trace.c' line='1380' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run6'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1380' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run12' mangled-name='bpf_trace_run12' filepath='kernel/trace/bpf_trace.c' line='1386' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run12'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <parameter type-id='91ce1af9' name='arg11' filepath='kernel/trace/bpf_trace.c' line='1386' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run11' mangled-name='bpf_trace_run11' filepath='kernel/trace/bpf_trace.c' line='1385' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run11'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <parameter type-id='91ce1af9' name='arg10' filepath='kernel/trace/bpf_trace.c' line='1385' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_trace_run10' mangled-name='bpf_trace_run10' filepath='kernel/trace/bpf_trace.c' line='1384' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_trace_run10'>
+        <parameter type-id='bdcee7ae' name='prog' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg0' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg1' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg2' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg3' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg4' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg5' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg6' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg7' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg8' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <parameter type-id='91ce1af9' name='arg9' filepath='kernel/trace/bpf_trace.c' line='1384' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/trace/power-traces.c' language='LANG_C89'>
+      <var-decl name='__tracepoint_clock_set_rate' type-id='4ca0c298' mangled-name='__tracepoint_clock_set_rate' visibility='default' filepath='include/trace/events/power.h' line='322' column='1' elf-symbol-id='__tracepoint_clock_set_rate'/>
+    </abi-instr>
+    <abi-instr 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='da952956'/>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='infinite' id='c165e8b9'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </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='207' column='1' id='933375ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='8462bc54' visibility='default' filepath='include/linux/trace_events.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event' type-id='3275e929' visibility='default' filepath='include/linux/trace_events.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace_file' type-id='3d4ca6d2' visibility='default' filepath='include/linux/trace_events.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='eaa32e2f' visibility='default' filepath='include/linux/trace_events.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pc' type-id='95e97e5e' visibility='default' filepath='include/linux/trace_events.h' line='213' 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='a7242c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_len' type-id='19c2251e' visibility='default' filepath='include/linux/ring_buffer.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='time_delta' type-id='19c2251e' 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='c165e8b9' 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='375' column='1' id='155948e4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='event_call' type-id='23d6768c' visibility='default' filepath='include/linux/trace_events.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='include/linux/trace_events.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dir' type-id='27675065' visibility='default' filepath='include/linux/trace_events.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='include/linux/trace_events.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='system' type-id='f4f46ed0' visibility='default' filepath='include/linux/trace_events.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='triggers' type-id='72f469ec' visibility='default' filepath='include/linux/trace_events.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/trace_events.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tm_ref' type-id='49178f86' visibility='default' filepath='include/linux/trace_events.h' line='402' 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='adff6731'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='disabled' type-id='49178f86' 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='eaa32e2f' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='7359adad' 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='91ce1af9' 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='587f89d2' 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='d80b72e6' 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='ac1fa8c0' 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='b50a4934' 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='b17e4f4d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pid_max' type-id='95e97e5e' 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='1d2c2b85' 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='431' column='1' id='e32a3610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opts' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='trace' type-id='0a18715a' visibility='default' filepath='kernel/trace/trace.h' line='434' 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='422' column='1' id='f20168e6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bit' type-id='19c2251e' visibility='default' filepath='kernel/trace/trace.h' line='424' 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='882c3f1f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tracer' type-id='0a18715a' 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='2473b64b' 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='441' column='1' id='56d268db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='a0260edc' visibility='default' filepath='kernel/trace/trace.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='aef13606' visibility='default' filepath='kernel/trace/trace.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='445' 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='1356' column='1' id='10143522'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subsystem' type-id='841939f3' visibility='default' filepath='kernel/trace/trace.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tr' type-id='898c1076' visibility='default' filepath='kernel/trace/trace.h' line='1359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='entry' type-id='27675065' visibility='default' filepath='kernel/trace/trace.h' line='1360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nr_events' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1362' 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='1349' column='1' id='ba400603'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/trace/trace.h' line='1350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='kernel/trace/trace.h' line='1351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='filter' type-id='26461068' visibility='default' filepath='kernel/trace/trace.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='kernel/trace/trace.h' line='1353' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='94dd3300' size-in-bits='64' id='cfbdf512'/>
+      <pointer-type-def type-id='ba400603' size-in-bits='64' id='841939f3'/>
+      <pointer-type-def type-id='8d6f7724' size-in-bits='64' id='30b9fb16'/>
+      <pointer-type-def type-id='e5117942' size-in-bits='64' id='e3e70e04'/>
+      <pointer-type-def type-id='ca83d937' size-in-bits='64' id='d01e1ab3'/>
+      <pointer-type-def type-id='da952956' size-in-bits='64' id='efd0fdec'/>
+      <pointer-type-def type-id='a7242c81' size-in-bits='64' id='3275e929'/>
+      <pointer-type-def type-id='adff6731' size-in-bits='64' id='17642359'/>
+      <pointer-type-def type-id='933375ec' size-in-bits='64' id='9f548f9a'/>
+      <pointer-type-def type-id='155948e4' size-in-bits='64' id='3d4ca6d2'/>
+      <pointer-type-def type-id='56d268db' size-in-bits='64' id='2473b64b'/>
+      <pointer-type-def type-id='882c3f1f' size-in-bits='64' id='e9037327'/>
+      <pointer-type-def type-id='b17e4f4d' size-in-bits='64' id='1f6324ad'/>
+      <pointer-type-def type-id='c5078f42' size-in-bits='64' id='fc932690'/>
+      <pointer-type-def type-id='10143522' size-in-bits='64' id='f4f46ed0'/>
+      <pointer-type-def type-id='e32a3610' size-in-bits='64' id='aef13606'/>
+      <pointer-type-def type-id='f20168e6' size-in-bits='64' id='a0260edc'/>
+      <pointer-type-def type-id='e5fd9491' size-in-bits='64' id='43a53075'/>
+      <pointer-type-def type-id='02b70d8e' size-in-bits='64' id='0d8953a0'/>
+      <pointer-type-def type-id='3dbb7e50' size-in-bits='64' id='0f294852'/>
+      <pointer-type-def type-id='c64b743f' size-in-bits='64' id='578c706b'/>
+      <pointer-type-def type-id='b44140ca' size-in-bits='64' id='29bf40b4'/>
+      <function-decl name='trace_event_buffer_commit' mangled-name='trace_event_buffer_commit' filepath='kernel/trace/trace.c' line='2598' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_commit'>
+        <parameter type-id='9f548f9a' name='fbuffer' filepath='kernel/trace/trace.c' line='2598' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='tracing_off' mangled-name='tracing_off' filepath='kernel/trace/trace.c' line='1263' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tracing_off'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_handle_return' mangled-name='trace_handle_return' filepath='kernel/trace/trace.c' line='2341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_handle_return'>
+        <parameter type-id='fc932690' name='s' filepath='kernel/trace/trace.c' line='2341' column='1'/>
+        <return type-id='b1a0a119'/>
+      </function-decl>
+      <function-decl name='__trace_puts' mangled-name='__trace_puts' filepath='kernel/trace/trace.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__trace_puts'>
+        <parameter type-id='7359adad' name='ip' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/trace/trace.c' line='834' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='94dd3300'>
+        <parameter type-id='18881289'/>
+        <return type-id='b1a0a119'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8d6f7724'>
+        <parameter type-id='898c1076'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5117942'>
+        <parameter type-id='898c1076'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca83d937'>
+        <parameter type-id='898c1076'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5fd9491'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02b70d8e'>
+        <parameter type-id='18881289'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3dbb7e50'>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c64b743f'>
+        <parameter type-id='898c1076'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b44140ca'>
+        <parameter type-id='18881289'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/trace/trace_event_perf.c' language='LANG_C89'>
+      <pointer-type-def type-id='4616a179' size-in-bits='64' id='a89ff5a9'/>
+      <function-decl name='perf_trace_buf_alloc' mangled-name='perf_trace_buf_alloc' filepath='kernel/trace/trace_event_perf.c' line='395' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='perf_trace_buf_alloc'>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/trace/trace_event_perf.c' line='395' column='1'/>
+        <parameter type-id='a89ff5a9' name='regs' filepath='kernel/trace/trace_event_perf.c' line='395' column='1'/>
+        <parameter type-id='7292109c' name='rctxp' filepath='kernel/trace/trace_event_perf.c' line='395' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/trace/trace_events.c' language='LANG_C89'>
+      <function-decl name='trace_event_ignore_this_pid' mangled-name='trace_event_ignore_this_pid' filepath='kernel/trace/trace_events.c' line='230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_ignore_this_pid'>
+        <parameter type-id='3d4ca6d2' name='trace_file' filepath='kernel/trace/trace_events.c' line='230' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='trace_define_field' mangled-name='trace_define_field' filepath='kernel/trace/trace_events.c' line='132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_define_field'>
+        <parameter type-id='23d6768c' name='call' filepath='kernel/trace/trace_events.c' line='132' column='1'/>
+        <parameter type-id='80f4b756' name='type' filepath='kernel/trace/trace_events.c' line='132' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='kernel/trace/trace_events.c' line='133' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='kernel/trace/trace_events.c' line='133' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='kernel/trace/trace_events.c' line='133' column='1'/>
+        <parameter type-id='95e97e5e' name='is_signed' filepath='kernel/trace/trace_events.c' line='133' column='1'/>
+        <parameter type-id='95e97e5e' name='filter_type' filepath='kernel/trace/trace_events.c' line='134' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_set_clr_event' mangled-name='trace_set_clr_event' filepath='kernel/trace/trace_events.c' line='844' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_set_clr_event'>
+        <parameter type-id='80f4b756' name='system' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <parameter type-id='80f4b756' name='event' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <parameter type-id='95e97e5e' name='set' filepath='kernel/trace/trace_events.c' line='844' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_event_reg' mangled-name='trace_event_reg' filepath='kernel/trace/trace_events.c' line='280' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_reg'>
+        <parameter type-id='23d6768c' name='call' filepath='kernel/trace/trace_events.c' line='280' column='1'/>
+        <parameter type-id='7fa6eeb8' name='type' filepath='kernel/trace/trace_events.c' line='281' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/trace/trace_events.c' line='281' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_event_raw_init' mangled-name='trace_event_raw_init' filepath='kernel/trace/trace_events.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_raw_init'>
+        <parameter type-id='23d6768c' name='call' filepath='kernel/trace/trace_events.c' line='218' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_event_buffer_reserve' mangled-name='trace_event_buffer_reserve' filepath='kernel/trace/trace_events.c' line='246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_event_buffer_reserve'>
+        <parameter type-id='9f548f9a' name='fbuffer' filepath='kernel/trace/trace_events.c' line='246' column='1'/>
+        <parameter type-id='3d4ca6d2' name='trace_file' filepath='kernel/trace/trace_events.c' line='247' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='kernel/trace/trace_events.c' line='248' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='430' column='1' id='21b4096c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='56' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='event_triggers_call'>
+        <parameter type-id='3d4ca6d2' name='file' filepath='kernel/trace/trace_events_trigger.c' line='56' column='1'/>
+        <parameter type-id='eaa32e2f' name='rec' filepath='kernel/trace/trace_events_trigger.c' line='56' column='1'/>
+        <parameter type-id='3275e929' name='event' filepath='kernel/trace/trace_events_trigger.c' line='57' column='1'/>
+        <return type-id='21b4096c'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='69f06cc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='7359adad' 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='80f4b756' visibility='default' filepath='include/linux/tracepoint-defs.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='69f06cc6' const='yes' id='99fda9f5'/>
+      <pointer-type-def type-id='99fda9f5' size-in-bits='64' id='49526a0d'/>
+      <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='fc932690' name='p' filepath='kernel/trace/trace_output.c' line='103' column='1'/>
+        <parameter type-id='7359adad' name='val' filepath='kernel/trace/trace_output.c' line='103' column='1'/>
+        <parameter type-id='49526a0d' name='symbol_array' filepath='kernel/trace/trace_output.c' line='104' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='trace_print_array_seq' mangled-name='trace_print_array_seq' filepath='kernel/trace/trace_output.c' line='233' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_array_seq'>
+        <parameter type-id='fc932690' name='p' filepath='kernel/trace/trace_output.c' line='233' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='kernel/trace/trace_output.c' line='233' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='kernel/trace/trace_output.c' line='233' column='1'/>
+        <parameter type-id='b59d7dce' name='el_size' filepath='kernel/trace/trace_output.c' line='234' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='trace_print_flags_seq' mangled-name='trace_print_flags_seq' filepath='kernel/trace/trace_output.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_flags_seq'>
+        <parameter type-id='fc932690' name='p' filepath='kernel/trace/trace_output.c' line='65' column='1'/>
+        <parameter type-id='80f4b756' name='delim' filepath='kernel/trace/trace_output.c' line='65' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='kernel/trace/trace_output.c' line='66' column='1'/>
+        <parameter type-id='49526a0d' name='flag_array' filepath='kernel/trace/trace_output.c' line='67' column='1'/>
+        <return type-id='80f4b756'/>
+      </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='18881289' name='iter' filepath='kernel/trace/trace_output.c' line='277' column='1'/>
+        <parameter type-id='fb7d87a1' name='trace_event' filepath='kernel/trace/trace_output.c' line='278' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='trace_print_hex_seq' mangled-name='trace_print_hex_seq' filepath='kernel/trace/trace_output.c' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_print_hex_seq'>
+        <parameter type-id='fc932690' name='p' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='354f7eb9' name='buf' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='95e97e5e' name='buf_len' filepath='kernel/trace/trace_output.c' line='217' column='1'/>
+        <parameter type-id='b50a4934' name='concatenate' filepath='kernel/trace/trace_output.c' line='218' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='trace_output_call' mangled-name='trace_output_call' filepath='kernel/trace/trace_output.c' line='311' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_output_call'>
+        <parameter type-id='18881289' name='iter' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter type-id='26a90f95' name='name' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter type-id='26a90f95' name='fmt' filepath='kernel/trace/trace_output.c' line='311' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/trace/trace_printk.c' language='LANG_C89'>
+      <function-decl name='__trace_bprintk' mangled-name='__trace_bprintk' filepath='kernel/trace/trace_printk.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__trace_bprintk'>
+        <parameter type-id='7359adad' name='ip' filepath='kernel/trace/trace_printk.c' line='200' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/trace/trace_printk.c' line='200' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='fc932690' name='s' filepath='kernel/trace/trace_seq.c' line='84' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/trace/trace_seq.c' line='84' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='trace_seq_putc' mangled-name='trace_seq_putc' filepath='kernel/trace/trace_seq.c' line='236' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='trace_seq_putc'>
+        <parameter type-id='fc932690' name='s' filepath='kernel/trace/trace_seq.c' line='236' column='1'/>
+        <parameter type-id='002ac4a6' name='c' filepath='kernel/trace/trace_seq.c' line='236' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/tracepoint.c' language='LANG_C89'>
+      <function-decl name='tracepoint_probe_register' mangled-name='tracepoint_probe_register' filepath='kernel/tracepoint.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tracepoint_probe_register'>
+        <parameter type-id='08e531de' name='tp' filepath='kernel/tracepoint.c' line='408' column='1'/>
+        <parameter type-id='eaa32e2f' name='probe' filepath='kernel/tracepoint.c' line='408' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='kernel/tracepoint.c' line='408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/user.c' language='LANG_C89'>
+      <var-decl name='init_user_ns' type-id='8c178e22' mangled-name='init_user_ns' visibility='default' filepath='kernel/user.c' line='27' column='1' elf-symbol-id='init_user_ns'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/watchdog.c' language='LANG_C89'>
+      <function-decl name='touch_softlockup_watchdog' mangled-name='touch_softlockup_watchdog' filepath='kernel/watchdog.c' line='282' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='touch_softlockup_watchdog'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='kernel/workqueue.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='192' id='6653bb13'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='480' id='73c97830'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7a31b92' size-in-bits='infinite' id='55b5dc02'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='wq_flusher' size-in-bits='448' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='231' column='1' id='c8eb0f4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='f9fef04f' visibility='default' filepath='kernel/workqueue.c' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker' size-in-bits='1216' is-struct='yes' visibility='default' filepath='kernel/workqueue_internal.h' line='24' column='1' id='146df21f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='d331b3a2' 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='83c1bde6' 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='72666d3f' 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='a7a31b92' 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='72f469ec' 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='f23e2572' 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='1ce8c5e4' 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='72f469ec' 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='7359adad' 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='f0981eeb' 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='95e97e5e' 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='sleeping' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue_internal.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='desc' type-id='6653bb13' visibility='default' filepath='kernel/workqueue_internal.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rescue_wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue_internal.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='last_func' type-id='72666d3f' visibility='default' filepath='kernel/workqueue_internal.h' line='59' 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='d331b3a2'>
+        <data-member access='public'>
+          <var-decl name='entry' type-id='72f469ec' visibility='default' filepath='kernel/workqueue_internal.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hentry' type-id='03a4a074' 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='204' column='1' id='b0355154'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pool' type-id='1ce8c5e4' visibility='default' filepath='kernel/workqueue.c' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='work_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flush_color' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='nr_in_flight' type-id='73c97830' visibility='default' filepath='kernel/workqueue.c' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nr_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_active' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='delayed_works' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pwqs_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_node' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='unbound_release_work' type-id='ef9025d0' visibility='default' filepath='kernel/workqueue.c' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='225' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='worker_pool' size-in-bits='7168' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='152' column='1' id='19ea21fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='kernel/workqueue.c' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cpu' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='node' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='kernel/workqueue.c' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='watchdog_ts' type-id='7359adad' visibility='default' filepath='kernel/workqueue.c' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='worklist' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nr_workers' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='nr_idle' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idle_list' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='idle_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mayday_timer' type-id='abe41e67' visibility='default' filepath='kernel/workqueue.c' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='busy_hash' type-id='53b70d6c' visibility='default' filepath='kernel/workqueue.c' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='manager' type-id='50a159c7' visibility='default' filepath='kernel/workqueue.c' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='workers' type-id='72f469ec' visibility='default' filepath='kernel/workqueue.c' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='detach_completion' type-id='389faaf7' visibility='default' filepath='kernel/workqueue.c' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='worker_ida' type-id='46ce60fb' visibility='default' filepath='kernel/workqueue.c' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='attrs' type-id='cfd15e7e' visibility='default' filepath='kernel/workqueue.c' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='hash_node' type-id='03a4a074' visibility='default' filepath='kernel/workqueue.c' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='refcnt' type-id='95e97e5e' visibility='default' filepath='kernel/workqueue.c' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='nr_running' type-id='49178f86' visibility='default' filepath='kernel/workqueue.c' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='kernel/workqueue.c' line='195' 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='244' column='1' id='46ce60fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xa' type-id='d39738ac' visibility='default' filepath='include/linux/idr.h' line='245' 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='143' column='1' id='2fe6f208'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nice' type-id='95e97e5e' visibility='default' filepath='include/linux/workqueue.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cpumask' type-id='b16b461b' visibility='default' filepath='include/linux/workqueue.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='no_numa' type-id='b50a4934' visibility='default' filepath='include/linux/workqueue.h' line='161' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wq_device' size-in-bits='7552' is-struct='yes' visibility='default' filepath='kernel/workqueue.c' line='5372' column='1' id='a88ecfc8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wq' type-id='242e3d19' visibility='default' filepath='kernel/workqueue.c' line='5373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='kernel/workqueue.c' line='5374' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5ad6e0ef' size-in-bits='64' id='1a7ee447'/>
+      <pointer-type-def type-id='b0355154' size-in-bits='64' id='a7a31b92'/>
+      <pointer-type-def type-id='146df21f' size-in-bits='64' id='50a159c7'/>
+      <pointer-type-def type-id='19ea21fe' size-in-bits='64' id='1ce8c5e4'/>
+      <pointer-type-def type-id='2fe6f208' size-in-bits='64' id='cfd15e7e'/>
+      <pointer-type-def type-id='a88ecfc8' size-in-bits='64' id='5cebc26e'/>
+      <pointer-type-def type-id='c8eb0f4f' size-in-bits='64' id='ec037527'/>
+      <function-decl name='alloc_workqueue' mangled-name='alloc_workqueue' filepath='kernel/workqueue.c' line='4257' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_workqueue'>
+        <parameter type-id='80f4b756' name='fmt' filepath='kernel/workqueue.c' line='4257' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='kernel/workqueue.c' line='4258' column='1'/>
+        <parameter type-id='95e97e5e' name='max_active' filepath='kernel/workqueue.c' line='4259' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='242e3d19'/>
+      </function-decl>
+      <var-decl name='system_wq' type-id='242e3d19' mangled-name='system_wq' visibility='default' filepath='kernel/workqueue.c' line='346' column='1' elf-symbol-id='system_wq'/>
+      <var-decl name='system_highpri_wq' type-id='242e3d19' mangled-name='system_highpri_wq' visibility='default' filepath='kernel/workqueue.c' line='348' column='1' elf-symbol-id='system_highpri_wq'/>
+      <var-decl name='system_long_wq' type-id='242e3d19' mangled-name='system_long_wq' visibility='default' filepath='kernel/workqueue.c' line='350' column='1' elf-symbol-id='system_long_wq'/>
+      <var-decl name='system_unbound_wq' type-id='242e3d19' mangled-name='system_unbound_wq' visibility='default' filepath='kernel/workqueue.c' line='352' column='1' elf-symbol-id='system_unbound_wq'/>
+      <var-decl name='system_freezable_wq' type-id='242e3d19' mangled-name='system_freezable_wq' visibility='default' filepath='kernel/workqueue.c' line='354' column='1' elf-symbol-id='system_freezable_wq'/>
+      <var-decl name='system_power_efficient_wq' type-id='242e3d19' mangled-name='system_power_efficient_wq' visibility='default' filepath='kernel/workqueue.c' line='356' column='1' elf-symbol-id='system_power_efficient_wq'/>
+      <function-decl name='destroy_workqueue' mangled-name='destroy_workqueue' filepath='kernel/workqueue.c' line='4360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='destroy_workqueue'>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='4360' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='flush_workqueue' mangled-name='flush_workqueue' filepath='kernel/workqueue.c' line='2786' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_workqueue'>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='2786' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='work_busy' mangled-name='work_busy' filepath='kernel/workqueue.c' line='4565' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='work_busy'>
+        <parameter type-id='83c1bde6' name='work' filepath='kernel/workqueue.c' line='4565' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='queue_work_on' mangled-name='queue_work_on' filepath='kernel/workqueue.c' line='1528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_work_on'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/workqueue.c' line='1528' column='1'/>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='1528' column='1'/>
+        <parameter type-id='83c1bde6' name='work' filepath='kernel/workqueue.c' line='1529' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='queue_delayed_work_on' mangled-name='queue_delayed_work_on' filepath='kernel/workqueue.c' line='1684' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='queue_delayed_work_on'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/workqueue.c' line='1684' column='1'/>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='1684' column='1'/>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='1685' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/workqueue.c' line='1685' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='mod_delayed_work_on' mangled-name='mod_delayed_work_on' filepath='kernel/workqueue.c' line='1722' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_delayed_work_on'>
+        <parameter type-id='95e97e5e' name='cpu' filepath='kernel/workqueue.c' line='1722' column='1'/>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='1722' column='1'/>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='1723' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='kernel/workqueue.c' line='1723' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='flush_work' mangled-name='flush_work' filepath='kernel/workqueue.c' line='3083' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_work'>
+        <parameter type-id='83c1bde6' name='work' filepath='kernel/workqueue.c' line='3083' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='flush_delayed_work' mangled-name='flush_delayed_work' filepath='kernel/workqueue.c' line='3203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='flush_delayed_work'>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='3203' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='drain_workqueue' mangled-name='drain_workqueue' filepath='kernel/workqueue.c' line='2948' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='drain_workqueue'>
+        <parameter type-id='242e3d19' name='wq' filepath='kernel/workqueue.c' line='2948' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='delayed_work_timer_fn' mangled-name='delayed_work_timer_fn' filepath='kernel/workqueue.c' line='1630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='delayed_work_timer_fn'>
+        <parameter type-id='9248e67f' name='t' filepath='kernel/workqueue.c' line='1630' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='current_work' mangled-name='current_work' filepath='kernel/workqueue.c' line='4489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='current_work'>
+        <return type-id='83c1bde6'/>
+      </function-decl>
+      <function-decl name='cancel_work_sync' mangled-name='cancel_work_sync' filepath='kernel/workqueue.c' line='3185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_work_sync'>
+        <parameter type-id='83c1bde6' name='work' filepath='kernel/workqueue.c' line='3185' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work_sync' mangled-name='cancel_delayed_work_sync' filepath='kernel/workqueue.c' line='3281' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work_sync'>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='3281' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cancel_delayed_work' mangled-name='cancel_delayed_work' filepath='kernel/workqueue.c' line='3266' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cancel_delayed_work'>
+        <parameter type-id='1a7ee447' name='dwork' filepath='kernel/workqueue.c' line='3266' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/bcd.c' language='LANG_C89'>
+      <function-decl name='_bin2bcd' mangled-name='_bin2bcd' filepath='lib/bcd.c' line='11' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_bin2bcd'>
+        <parameter type-id='f0981eeb' name='val' filepath='lib/bcd.c' line='11' column='1'/>
+        <return type-id='002ac4a6'/>
+      </function-decl>
+      <function-decl name='_bcd2bin' mangled-name='_bcd2bin' filepath='lib/bcd.c' line='5' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_bcd2bin'>
+        <parameter type-id='002ac4a6' name='val' filepath='lib/bcd.c' line='5' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/bitmap.c' language='LANG_C89'>
+      <function-decl name='__bitmap_parse' mangled-name='__bitmap_parse' filepath='lib/bitmap.c' line='376' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_parse'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/bitmap.c' line='376' column='1'/>
+        <parameter type-id='f0981eeb' name='buflen' filepath='lib/bitmap.c' line='376' column='1'/>
+        <parameter type-id='95e97e5e' name='is_user' filepath='lib/bitmap.c' line='377' column='1'/>
+        <parameter type-id='1d2c2b85' name='maskp' filepath='lib/bitmap.c' line='377' column='1'/>
+        <parameter type-id='95e97e5e' name='nmaskbits' filepath='lib/bitmap.c' line='378' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_parselist' mangled-name='bitmap_parselist' filepath='lib/bitmap.c' line='642' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_parselist'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/bitmap.c' line='642' column='1'/>
+        <parameter type-id='1d2c2b85' name='maskp' filepath='lib/bitmap.c' line='642' column='1'/>
+        <parameter type-id='95e97e5e' name='nmaskbits' filepath='lib/bitmap.c' line='642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_find_next_zero_area_off' mangled-name='bitmap_find_next_zero_area_off' filepath='lib/bitmap.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_find_next_zero_area_off'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/bitmap.c' line='325' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/bitmap.c' line='326' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='lib/bitmap.c' line='327' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='lib/bitmap.c' line='328' column='1'/>
+        <parameter type-id='7359adad' name='align_mask' filepath='lib/bitmap.c' line='329' column='1'/>
+        <parameter type-id='7359adad' name='align_offset' filepath='lib/bitmap.c' line='330' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='__bitmap_set' mangled-name='__bitmap_set' filepath='lib/bitmap.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_set'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/bitmap.c' line='270' column='1'/>
+        <parameter type-id='f0981eeb' name='start' filepath='lib/bitmap.c' line='270' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/bitmap.c' line='270' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bitmap_zalloc' mangled-name='bitmap_zalloc' filepath='lib/bitmap.c' line='1178' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_zalloc'>
+        <parameter type-id='f0981eeb' name='nbits' filepath='lib/bitmap.c' line='1178' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='lib/bitmap.c' line='1178' column='1'/>
+        <return type-id='1d2c2b85'/>
+      </function-decl>
+      <function-decl name='bitmap_print_to_pagebuf' mangled-name='bitmap_print_to_pagebuf' filepath='lib/bitmap.c' line='490' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_print_to_pagebuf'>
+        <parameter type-id='b50a4934' name='list' filepath='lib/bitmap.c' line='490' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/bitmap.c' line='490' column='1'/>
+        <parameter type-id='f9b37274' name='maskp' filepath='lib/bitmap.c' line='490' column='1'/>
+        <parameter type-id='95e97e5e' name='nmaskbits' filepath='lib/bitmap.c' line='491' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bitmap_free' mangled-name='bitmap_free' filepath='lib/bitmap.c' line='1184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bitmap_free'>
+        <parameter type-id='f9b37274' name='bitmap' filepath='lib/bitmap.c' line='1184' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bitmap_weight' mangled-name='__bitmap_weight' filepath='lib/bitmap.c' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_weight'>
+        <parameter type-id='f9b37274' name='bitmap' filepath='lib/bitmap.c' line='255' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='255' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__bitmap_subset' mangled-name='__bitmap_subset' filepath='lib/bitmap.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_subset'>
+        <parameter type-id='f9b37274' name='bitmap1' filepath='lib/bitmap.c' line='240' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap2' filepath='lib/bitmap.c' line='241' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='241' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__bitmap_or' mangled-name='__bitmap_or' filepath='lib/bitmap.c' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_or'>
+        <parameter type-id='1d2c2b85' name='dst' filepath='lib/bitmap.c' line='187' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap1' filepath='lib/bitmap.c' line='187' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap2' filepath='lib/bitmap.c' line='188' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bitmap_clear' mangled-name='__bitmap_clear' filepath='lib/bitmap.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_clear'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/bitmap.c' line='291' column='1'/>
+        <parameter type-id='f0981eeb' name='start' filepath='lib/bitmap.c' line='291' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/bitmap.c' line='291' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__bitmap_andnot' mangled-name='__bitmap_andnot' filepath='lib/bitmap.c' line='209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__bitmap_andnot'>
+        <parameter type-id='1d2c2b85' name='dst' filepath='lib/bitmap.c' line='209' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap1' filepath='lib/bitmap.c' line='209' column='1'/>
+        <parameter type-id='f9b37274' name='bitmap2' filepath='lib/bitmap.c' line='210' column='1'/>
+        <parameter type-id='f0981eeb' name='bits' filepath='lib/bitmap.c' line='210' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/bsearch.c' language='LANG_C89'>
+      <function-decl name='bsearch' mangled-name='bsearch' filepath='lib/bsearch.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bsearch'>
+        <parameter type-id='eaa32e2f' name='key' filepath='lib/bsearch.c' line='31' column='1'/>
+        <parameter type-id='eaa32e2f' name='base' filepath='lib/bsearch.c' line='31' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='lib/bsearch.c' line='31' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/bsearch.c' line='31' column='1'/>
+        <parameter type-id='585e1de9' name='cmp' filepath='lib/bsearch.c' line='32' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/checksum.c' language='LANG_C89'>
+      <typedef-decl name='__sum16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='36' column='1' id='7dac1e36'/>
+      <function-decl name='ip_compute_csum' mangled-name='ip_compute_csum' filepath='lib/checksum.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_compute_csum'>
+        <parameter type-id='eaa32e2f' name='buff' filepath='lib/checksum.c' line='142' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/checksum.c' line='142' column='1'/>
+        <return type-id='7dac1e36'/>
+      </function-decl>
+      <function-decl name='csum_tcpudp_nofold' mangled-name='csum_tcpudp_nofold' filepath='lib/checksum.c' line='189' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_tcpudp_nofold'>
+        <parameter type-id='78a133c2' name='saddr' filepath='lib/checksum.c' line='189' column='1'/>
+        <parameter type-id='78a133c2' name='daddr' filepath='lib/checksum.c' line='189' column='1'/>
+        <parameter type-id='3f1a6b60' name='len' filepath='lib/checksum.c' line='190' column='1'/>
+        <parameter type-id='8f048e17' name='proto' filepath='lib/checksum.c' line='190' column='1'/>
+        <parameter type-id='fbd88bba' name='sum' filepath='lib/checksum.c' line='190' column='1'/>
+        <return type-id='fbd88bba'/>
+      </function-decl>
+      <function-decl name='csum_partial' mangled-name='csum_partial' filepath='lib/checksum.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_partial'>
+        <parameter type-id='eaa32e2f' name='buff' filepath='lib/checksum.c' line='125' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/checksum.c' line='125' column='1'/>
+        <parameter type-id='fbd88bba' name='wsum' filepath='lib/checksum.c' line='125' column='1'/>
+        <return type-id='fbd88bba'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/cmdline.c' language='LANG_C89'>
+      <function-decl name='get_option' mangled-name='get_option' filepath='lib/cmdline.c' line='50' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_option'>
+        <parameter type-id='9b23c9ad' name='str' filepath='lib/cmdline.c' line='50' column='1'/>
+        <parameter type-id='7292109c' name='pint' filepath='lib/cmdline.c' line='50' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memparse' mangled-name='memparse' filepath='lib/cmdline.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memparse'>
+        <parameter type-id='80f4b756' name='ptr' filepath='lib/cmdline.c' line='125' column='1'/>
+        <parameter type-id='9b23c9ad' name='retptr' filepath='lib/cmdline.c' line='125' column='1'/>
+        <return type-id='3a47d82b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/cpumask.c' language='LANG_C89'>
+      <function-decl name='cpumask_next' mangled-name='cpumask_next' filepath='lib/cpumask.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next'>
+        <parameter type-id='95e97e5e' name='n' filepath='lib/cpumask.c' line='17' column='1'/>
+        <parameter type-id='5f8a1ac4' name='srcp' filepath='lib/cpumask.c' line='17' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cpumask_next_wrap' mangled-name='cpumask_next_wrap' filepath='lib/cpumask.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next_wrap'>
+        <parameter type-id='95e97e5e' name='n' filepath='lib/cpumask.c' line='77' column='1'/>
+        <parameter type-id='5f8a1ac4' name='mask' filepath='lib/cpumask.c' line='77' column='1'/>
+        <parameter type-id='95e97e5e' name='start' filepath='lib/cpumask.c' line='77' column='1'/>
+        <parameter type-id='b50a4934' name='wrap' filepath='lib/cpumask.c' line='77' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cpumask_next_and' mangled-name='cpumask_next_and' filepath='lib/cpumask.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpumask_next_and'>
+        <parameter type-id='95e97e5e' name='n' filepath='lib/cpumask.c' line='34' column='1'/>
+        <parameter type-id='5f8a1ac4' name='src1p' filepath='lib/cpumask.c' line='34' column='1'/>
+        <parameter type-id='5f8a1ac4' name='src2p' filepath='lib/cpumask.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crc-ccitt.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d5c0a628' size-in-bits='4096' id='765f36d9'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <var-decl name='crc_ccitt_table' type-id='765f36d9' mangled-name='crc_ccitt_table' visibility='default' filepath='lib/crc-ccitt.c' line='16' column='1' elf-symbol-id='crc_ccitt_table'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crc16.c' language='LANG_C89'>
+      <function-decl name='crc16' mangled-name='crc16' filepath='lib/crc16.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc16'>
+        <parameter type-id='1dc6a898' name='crc' filepath='lib/crc16.c' line='55' column='1'/>
+        <parameter type-id='bbaf3419' name='buffer' filepath='lib/crc16.c' line='55' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/crc16.c' line='55' column='1'/>
+        <return type-id='1dc6a898'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crc32.c' language='LANG_C89'>
+      <function-decl name='crc32_be' mangled-name='crc32_be' filepath='lib/crc32.c' line='340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc32_be'>
+        <parameter type-id='19c2251e' name='crc' filepath='lib/crc32.c' line='340' column='1'/>
+        <parameter type-id='354f7eb9' name='p' filepath='lib/crc32.c' line='340' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/crc32.c' line='340' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crc8.c' language='LANG_C89'>
+      <function-decl name='crc8_populate_msb' mangled-name='crc8_populate_msb' filepath='lib/crc8.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc8_populate_msb'>
+        <parameter type-id='8bff8096' name='table' filepath='lib/crc8.c' line='29' column='1'/>
+        <parameter type-id='f9b06939' name='polynomial' filepath='lib/crc8.c' line='29' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='crc8' mangled-name='crc8' filepath='lib/crc8.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='crc8'>
+        <parameter type-id='bbaf3419' name='table' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='8bff8096' name='pdata' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='b59d7dce' name='nbytes' filepath='lib/crc8.c' line='74' column='1'/>
+        <parameter type-id='f9b06939' name='crc' filepath='lib/crc8.c' line='74' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crypto/aes.c' language='LANG_C89'>
+      <qualified-type-def type-id='b5b9216e' const='yes' id='09f052f7'/>
+      <pointer-type-def type-id='09f052f7' size-in-bits='64' id='825271e7'/>
+      <function-decl name='aes_encrypt' mangled-name='aes_encrypt' filepath='lib/crypto/aes.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='aes_encrypt'>
+        <parameter type-id='825271e7' name='ctx' filepath='lib/crypto/aes.c' line='258' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='lib/crypto/aes.c' line='258' column='1'/>
+        <parameter type-id='bbaf3419' name='in' filepath='lib/crypto/aes.c' line='258' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='aes_expandkey' mangled-name='aes_expandkey' filepath='lib/crypto/aes.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='aes_expandkey'>
+        <parameter type-id='21370cb4' name='ctx' filepath='lib/crypto/aes.c' line='185' column='1'/>
+        <parameter type-id='bbaf3419' name='in_key' filepath='lib/crypto/aes.c' line='185' column='1'/>
+        <parameter type-id='f0981eeb' name='key_len' filepath='lib/crypto/aes.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/crypto/arc4.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='8192' id='ee5ba316'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='arc4_ctx' size-in-bits='8256' is-struct='yes' visibility='default' filepath='include/crypto/arc4.h' line='15' column='1' id='f5dcfad3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='S' type-id='ee5ba316' visibility='default' filepath='include/crypto/arc4.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8192'>
+          <var-decl name='x' type-id='19c2251e' visibility='default' filepath='include/crypto/arc4.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8224'>
+          <var-decl name='y' type-id='19c2251e' visibility='default' filepath='include/crypto/arc4.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='f5dcfad3' size-in-bits='64' id='980c37b3'/>
+      <function-decl name='arc4_setkey' mangled-name='arc4_setkey' filepath='lib/crypto/arc4.c' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arc4_setkey'>
+        <parameter type-id='980c37b3' name='ctx' filepath='lib/crypto/arc4.c' line='13' column='1'/>
+        <parameter type-id='bbaf3419' name='in_key' filepath='lib/crypto/arc4.c' line='13' column='1'/>
+        <parameter type-id='f0981eeb' name='key_len' filepath='lib/crypto/arc4.c' line='13' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='arc4_crypt' mangled-name='arc4_crypt' filepath='lib/crypto/arc4.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='arc4_crypt'>
+        <parameter type-id='980c37b3' name='ctx' filepath='lib/crypto/arc4.c' line='37' column='1'/>
+        <parameter type-id='8bff8096' name='out' filepath='lib/crypto/arc4.c' line='37' column='1'/>
+        <parameter type-id='bbaf3419' name='in' filepath='lib/crypto/arc4.c' line='37' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/crypto/arc4.c' line='37' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/ctype.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='2048' id='9941c99e'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <var-decl name='_ctype' type-id='9941c99e' mangled-name='_ctype' visibility='default' filepath='lib/ctype.c' line='12' column='1' elf-symbol-id='_ctype'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/dec_and_lock.c' language='LANG_C89'>
+      <function-decl name='_atomic_dec_and_lock' mangled-name='_atomic_dec_and_lock' filepath='lib/dec_and_lock.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_atomic_dec_and_lock'>
+        <parameter type-id='8a47abc3' name='atomic' filepath='lib/dec_and_lock.c' line='21' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='lib/dec_and_lock.c' line='21' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/devres.c' language='LANG_C89'>
+      <qualified-type-def type-id='5218160d' const='yes' id='20b17040'/>
+      <pointer-type-def type-id='20b17040' size-in-bits='64' id='e153f6de'/>
+      <pointer-type-def type-id='acc63fdf' size-in-bits='64' id='9e6a6c02'/>
+      <function-decl name='devm_of_iomap' mangled-name='devm_of_iomap' filepath='lib/devres.c' line='215' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_of_iomap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='9a537bbe' name='node' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='lib/devres.c' line='215' column='1'/>
+        <parameter type-id='9e6a6c02' name='size' filepath='lib/devres.c' line='216' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_ioremap_resource' mangled-name='devm_ioremap_resource' filepath='lib/devres.c' line='153' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_resource'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='153' column='1'/>
+        <parameter type-id='e153f6de' name='res' filepath='lib/devres.c' line='154' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_ioremap' mangled-name='devm_ioremap' filepath='lib/devres.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='68' column='1'/>
+        <parameter type-id='acc63fdf' name='offset' filepath='lib/devres.c' line='68' column='1'/>
+        <parameter type-id='acc63fdf' name='size' filepath='lib/devres.c' line='69' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_iounmap' mangled-name='devm_iounmap' filepath='lib/devres.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_iounmap'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='128' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='lib/devres.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='devm_ioremap_wc' mangled-name='devm_ioremap_wc' filepath='lib/devres.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_wc'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='114' column='1'/>
+        <parameter type-id='acc63fdf' name='offset' filepath='lib/devres.c' line='114' column='1'/>
+        <parameter type-id='acc63fdf' name='size' filepath='lib/devres.c' line='115' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='devm_ioremap_nocache' mangled-name='devm_ioremap_nocache' filepath='lib/devres.c' line='99' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_ioremap_nocache'>
+        <parameter type-id='fa0b179b' name='dev' filepath='lib/devres.c' line='99' column='1'/>
+        <parameter type-id='acc63fdf' name='offset' filepath='lib/devres.c' line='99' column='1'/>
+        <parameter type-id='acc63fdf' name='size' filepath='lib/devres.c' line='100' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/dump_stack.c' language='LANG_C89'>
+      <function-decl name='dump_stack' mangled-name='dump_stack' filepath='lib/dump_stack.c' line='88' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_stack'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/dynamic_debug.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d315442e' size-in-bits='32' id='810b4a17'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='128' id='3fa29bab'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f22a8abb' size-in-bits='384' id='72bb5580'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='bpf_sk_storage' is-struct='yes' visibility='default' is-declaration-only='yes' id='36313ee4'/>
+      <class-decl name='prefix_info' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/addrconf.h' line='29' column='1' id='a7502152'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='length' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prefix_len' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reserved' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='autoconf' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='onlink' type-id='8f048e17' visibility='default' filepath='include/net/addrconf.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='valid' type-id='78a133c2' visibility='default' filepath='include/net/addrconf.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prefered' type-id='78a133c2' visibility='default' filepath='include/net/addrconf.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='reserved2' type-id='78a133c2' visibility='default' filepath='include/net/addrconf.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prefix' type-id='f6ed712a' visibility='default' filepath='include/net/addrconf.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='raw_hashinfo' size-in-bits='16448' is-struct='yes' visibility='default' filepath='include/net/raw.h' line='35' column='1' id='51ee3086'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/raw.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ht' type-id='a7c26c7b' visibility='default' filepath='include/net/raw.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_reuseport' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/sock_reuseport.h' line='13' column='1' id='ff751355'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/sock_reuseport.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='num_socks' type-id='1dc6a898' visibility='default' filepath='include/net/sock_reuseport.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='synq_overflow_ts' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reuseport_id' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind_inany' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='has_conns' type-id='f0981eeb' visibility='default' filepath='include/net/sock_reuseport.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/net/sock_reuseport.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socks' type-id='5be9db8d' visibility='default' filepath='include/net/sock_reuseport.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='udp_table' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='71' column='1' id='9a516b13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash2' type-id='9cc41107' visibility='default' filepath='include/net/udp.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='log' type-id='f0981eeb' visibility='default' filepath='include/net/udp.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy' size-in-bits='6656' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='499' column='1' id='ccf6c819'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xp_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='byidx' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/xfrm.h' line='505' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='pos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='genid' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='priority' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='index' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='selector' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='walk' type-id='e8e96050' visibility='default' filepath='include/net/xfrm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='polq' type-id='d15e38d5' visibility='default' filepath='include/net/xfrm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='bydst_reinsert' type-id='b50a4934' visibility='default' filepath='include/net/xfrm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3208'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3216'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3224'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='xfrm_nr' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3248'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='xfrm_vec' type-id='41cc9498' visibility='default' filepath='include/net/xfrm.h' line='527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='bydst_inexact_list' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/xfrm.h' line='529' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_state' size-in-bits='5824' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='147' column='1' id='cb961c68'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='xs_net' type-id='c9df1e6c' visibility='default' filepath='include/net/xfrm.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='fc320d58' visibility='default' filepath='include/net/xfrm.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bysrc' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='byspi' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/xfrm.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/xfrm.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sel' type-id='8eb3b1fe' visibility='default' filepath='include/net/xfrm.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='if_id' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='tfcpad' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='genid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='km' type-id='12872440' visibility='default' filepath='include/net/xfrm.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='props' type-id='35535e57' visibility='default' filepath='include/net/xfrm.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='lft' type-id='4ca5f2ad' visibility='default' filepath='include/net/xfrm.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='aalg' type-id='255e0487' visibility='default' filepath='include/net/xfrm.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='ealg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='calg' type-id='1663a26e' visibility='default' filepath='include/net/xfrm.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='aead' type-id='c56b5ee4' visibility='default' filepath='include/net/xfrm.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='geniv' type-id='80f4b756' visibility='default' filepath='include/net/xfrm.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='encap' type-id='47541e34' visibility='default' filepath='include/net/xfrm.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='coaddr' type-id='47a1c9f4' visibility='default' filepath='include/net/xfrm.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='tunnel' type-id='328dda6e' visibility='default' filepath='include/net/xfrm.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='tunnel_users' type-id='49178f86' visibility='default' filepath='include/net/xfrm.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3040'>
+          <var-decl name='replay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='replay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='preplay' type-id='c59d261e' visibility='default' filepath='include/net/xfrm.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='preplay_esn' type-id='71411b0f' visibility='default' filepath='include/net/xfrm.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='repl' type-id='400b9143' visibility='default' filepath='include/net/xfrm.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='xflags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3488'>
+          <var-decl name='replay_maxage' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='replay_maxdiff' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='rtimer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='stats' type-id='c1960caa' visibility='default' filepath='include/net/xfrm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='curlft' type-id='29d519c9' visibility='default' filepath='include/net/xfrm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='mtimer' type-id='b6993efc' visibility='default' filepath='include/net/xfrm.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='xso' type-id='f5284c72' visibility='default' filepath='include/net/xfrm.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='saved_tmo' type-id='bd54fe1a' visibility='default' filepath='include/net/xfrm.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='lastused' type-id='1afd27ac' visibility='default' filepath='include/net/xfrm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='xfrag' type-id='06c0432f' visibility='default' filepath='include/net/xfrm.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='type' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='inner_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5528'>
+          <var-decl name='inner_mode_iaf' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5552'>
+          <var-decl name='outer_mode' type-id='fdc52c40' visibility='default' filepath='include/net/xfrm.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='type_offload' type-id='2f8b61b4' visibility='default' filepath='include/net/xfrm.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='security' type-id='b07c2494' visibility='default' filepath='include/net/xfrm.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/net/xfrm.h' line='259' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='416' id='77ba73f2'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='aa79f31a' size-in-bits='960' id='1d16a23c'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='infinite' id='29c3368c'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='ae4d1761' size-in-bits='128' id='eb61ae4b'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='_ddebug' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/dynamic_debug.h' line='14' column='1' id='a88f76f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='modname' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='function' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='filename' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='format' type-id='80f4b756' visibility='default' filepath='include/linux/dynamic_debug.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lineno' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_debug.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/dynamic_debug.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key' type-id='0efd7880' visibility='default' filepath='include/linux/dynamic_debug.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/dynamic_debug.h' line='42' column='1' id='0efd7880'>
+        <data-member access='public'>
+          <var-decl name='dd_key_true' type-id='49a0ad34' visibility='default' filepath='include/linux/dynamic_debug.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dd_key_false' type-id='237c0d27' visibility='default' filepath='include/linux/dynamic_debug.h' line='44' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nd_opt_hdr' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/ndisc.h' line='105' column='1' id='c966252c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_type' type-id='8f048e17' visibility='default' filepath='include/net/ndisc.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='nd_opt_len' type-id='8f048e17' visibility='default' filepath='include/net/ndisc.h' line='107' 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='111' column='1' id='5919d6b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nd_opt_array' type-id='1d16a23c' visibility='default' filepath='include/net/ndisc.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nd_opts_ri' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='nd_opts_ri_end' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nd_useropts' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='nd_useropts_end' type-id='aa79f31a' visibility='default' filepath='include/net/ndisc.h' line='118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='neigh_table' size-in-bits='4544' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='200' column='1' id='aebe1cff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='entry_size' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='key_len' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='protocol' type-id='84a5c3d4' visibility='default' filepath='include/net/neighbour.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash' type-id='f60e04ee' visibility='default' filepath='include/net/neighbour.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='key_eq' type-id='8fbb31d1' visibility='default' filepath='include/net/neighbour.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='constructor' type-id='8eff9c66' visibility='default' filepath='include/net/neighbour.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pconstructor' type-id='9264da33' visibility='default' filepath='include/net/neighbour.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pdestructor' type-id='5c4c6144' visibility='default' filepath='include/net/neighbour.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='proxy_redo' type-id='0ef96694' visibility='default' filepath='include/net/neighbour.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_multicast' type-id='b9b212f5' visibility='default' filepath='include/net/neighbour.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='allow_add' type-id='6ade418d' visibility='default' filepath='include/net/neighbour.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='26a90f95' visibility='default' filepath='include/net/neighbour.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parms' type-id='1429eee4' visibility='default' filepath='include/net/neighbour.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='parms_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='gc_interval' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='gc_thresh1' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='gc_thresh2' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='gc_thresh3' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='last_flush' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='gc_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/neighbour.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='proxy_timer' type-id='abe41e67' visibility='default' filepath='include/net/neighbour.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='proxy_queue' type-id='e61c85d0' visibility='default' filepath='include/net/neighbour.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4000'>
+          <var-decl name='gc_entries' type-id='49178f86' visibility='default' filepath='include/net/neighbour.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='gc_list' type-id='72f469ec' visibility='default' filepath='include/net/neighbour.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='lock' type-id='ac16795b' visibility='default' filepath='include/net/neighbour.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='last_rand' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='stats' type-id='3a0389d8' visibility='default' filepath='include/net/neighbour.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='nht' type-id='0d378d14' visibility='default' filepath='include/net/neighbour.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='phash_buckets' type-id='62c51a1d' visibility='default' filepath='include/net/neighbour.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/neighbour.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='pneigh_entry' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/neighbour.h' line='177' column='1' id='fff56995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='12f283a5' visibility='default' filepath='include/net/neighbour.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='net' type-id='c9df1e6c' visibility='default' filepath='include/net/neighbour.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/neighbour.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/neighbour.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/neighbour.h' line='183' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sock_common' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='149' column='1' id='5999c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='f126afef' visibility='default' filepath='include/net/sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='5d6a1e78' visibility='default' filepath='include/net/sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='d1c6b54d' visibility='default' filepath='include/net/sock.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skc_family' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='skc_state' type-id='75a392dc' visibility='default' filepath='include/net/sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_reuse' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='skc_reuseport' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='skc_ipv6only' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='skc_net_refcnt' type-id='002ac4a6' visibility='default' filepath='include/net/sock.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='skc_bound_dev_if' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='9e20c58f' visibility='default' filepath='include/net/sock.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='skc_prot' type-id='d2524501' visibility='default' filepath='include/net/sock.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='skc_net' type-id='c9df1e6c' visibility='default' filepath='include/net/sock.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='skc_v6_daddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='skc_v6_rcv_saddr' type-id='f6ed712a' visibility='default' filepath='include/net/sock.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='skc_cookie' type-id='28ee064c' visibility='default' filepath='include/net/sock.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='' type-id='56935795' visibility='default' filepath='include/net/sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='skc_dontcopy_begin' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='38f5bda8' visibility='default' filepath='include/net/sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='skc_tx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='skc_rx_queue_mapping' type-id='8efea9e5' visibility='default' filepath='include/net/sock.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='' type-id='9e121764' visibility='default' filepath='include/net/sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='skc_refcnt' type-id='64615833' visibility='default' filepath='include/net/sock.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='skc_dontcopy_end' type-id='1fdc7fa6' visibility='default' filepath='include/net/sock.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='5547e6b1' visibility='default' filepath='include/net/sock.h' line='228' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='153' column='1' id='f126afef'>
+        <data-member access='public'>
+          <var-decl name='skc_addrpair' type-id='d17a6eed' visibility='default' filepath='include/net/sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='7eabe5fc' visibility='default' filepath='include/net/sock.h' line='155' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__addrpair' type-id='d3130597' filepath='include/net/sock.h' line='117' column='1' id='d17a6eed'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='155' column='1' id='7eabe5fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_daddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='skc_rcv_saddr' type-id='78a133c2' visibility='default' filepath='include/net/sock.h' line='157' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='160' column='1' id='5d6a1e78'>
+        <data-member access='public'>
+          <var-decl name='skc_hash' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_u16hashes' type-id='810b4a17' visibility='default' filepath='include/net/sock.h' line='162' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='165' column='1' id='d1c6b54d'>
+        <data-member access='public'>
+          <var-decl name='skc_portpair' type-id='e7c2a649' visibility='default' filepath='include/net/sock.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='a414c3c0' visibility='default' filepath='include/net/sock.h' line='167' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='__portpair' type-id='3f1a6b60' filepath='include/net/sock.h' line='116' column='1' id='e7c2a649'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='167' column='1' id='a414c3c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='skc_dport' type-id='84a5c3d4' visibility='default' filepath='include/net/sock.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='skc_num' type-id='d315442e' visibility='default' filepath='include/net/sock.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='180' column='1' id='9e20c58f'>
+        <data-member access='public'>
+          <var-decl name='skc_bind_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='182' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='proto' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/net/sock.h' line='1099' column='1' id='7203ee09'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='close' type-id='09f3a86b' visibility='default' filepath='include/net/sock.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pre_connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='connect' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='disconnect' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='accept' type-id='67adf9a9' visibility='default' filepath='include/net/sock.h' line='1110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ioctl' type-id='08113f0a' visibility='default' filepath='include/net/sock.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='init' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='destroy' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='shutdown' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='keepalive' type-id='e937debf' visibility='default' filepath='include/net/sock.h' line='1124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/sock.h' line='1126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/sock.h' line='1130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compat_ioctl' type-id='20da830b' visibility='default' filepath='include/net/sock.h' line='1134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='sendmsg' type-id='1df08751' visibility='default' filepath='include/net/sock.h' line='1137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='recvmsg' type-id='74e71fae' visibility='default' filepath='include/net/sock.h' line='1139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sendpage' type-id='65399e23' visibility='default' filepath='include/net/sock.h' line='1142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bind' type-id='c25ed103' visibility='default' filepath='include/net/sock.h' line='1144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='backlog_rcv' type-id='a0f5247f' visibility='default' filepath='include/net/sock.h' line='1147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='release_cb' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hash' type-id='55530c47' visibility='default' filepath='include/net/sock.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='unhash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rehash' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_port' type-id='078de3a3' visibility='default' filepath='include/net/sock.h' line='1156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='inuse_idx' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stream_memory_free' type-id='bf751261' visibility='default' filepath='include/net/sock.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stream_memory_read' type-id='3d4d3aba' visibility='default' filepath='include/net/sock.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='enter_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_memory_pressure' type-id='841969d0' visibility='default' filepath='include/net/sock.h' line='1167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='memory_allocated' type-id='5403cb36' visibility='default' filepath='include/net/sock.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sockets_allocated' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='memory_pressure' type-id='1d2c2b85' visibility='default' filepath='include/net/sock.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sysctl_mem' type-id='3ccc2590' visibility='default' filepath='include/net/sock.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sysctl_wmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sysctl_rmem' type-id='7292109c' visibility='default' filepath='include/net/sock.h' line='1180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sysctl_wmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2336'>
+          <var-decl name='sysctl_rmem_offset' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='max_header' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='1184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='no_autobind' type-id='b50a4934' visibility='default' filepath='include/net/sock.h' line='1185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/sock.h' line='1187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='slab_flags' type-id='f7fe96cb' visibility='default' filepath='include/net/sock.h' line='1189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='useroffset' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/net/sock.h' line='1191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='orphan_count' type-id='84c6078d' visibility='default' filepath='include/net/sock.h' line='1193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='rsk_prot' type-id='db994912' visibility='default' filepath='include/net/sock.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='twsk_prot' type-id='d68ad8b5' visibility='default' filepath='include/net/sock.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='h' type-id='adf5bf47' visibility='default' filepath='include/net/sock.h' line='1203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/sock.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/net/sock.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='include/net/sock.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='diag_destroy' type-id='95208a5e' visibility='default' filepath='include/net/sock.h' line='1213' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='msghdr' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/linux/socket.h' line='49' column='1' id='ab94745c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='msg_name' type-id='eaa32e2f' visibility='default' filepath='include/linux/socket.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='msg_namelen' type-id='95e97e5e' visibility='default' filepath='include/linux/socket.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='msg_iter' type-id='f2b4d088' visibility='default' filepath='include/linux/socket.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='msg_control' type-id='eaa32e2f' visibility='default' filepath='include/linux/socket.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='msg_controllen' type-id='9e19ad6e' visibility='default' filepath='include/linux/socket.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='msg_flags' type-id='f0981eeb' visibility='default' filepath='include/linux/socket.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='msg_iocb' type-id='80f25feb' visibility='default' filepath='include/linux/socket.h' line='56' 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='27' column='1' id='ad499564'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/request_sock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='slab' type-id='f3b4aca8' visibility='default' filepath='include/net/request_sock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='slab_name' type-id='26a90f95' visibility='default' filepath='include/net/request_sock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rtx_syn_ack' type-id='cd05c94e' visibility='default' filepath='include/net/request_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='send_ack' type-id='d3d20d73' visibility='default' filepath='include/net/request_sock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='send_reset' type-id='c9214b77' visibility='default' filepath='include/net/request_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='destructor' type-id='b249945a' visibility='default' filepath='include/net/request_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='syn_ack_timeout' type-id='29e425c9' visibility='default' filepath='include/net/request_sock.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='46' column='1' id='1c03d197'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__req_common' type-id='5999c5f7' visibility='default' filepath='include/net/request_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dl_next' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mss' type-id='1dc6a898' visibility='default' filepath='include/net/request_sock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='num_retrans' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie_ts' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='num_timeout' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='ts_recent' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rsk_timer' type-id='abe41e67' visibility='default' filepath='include/net/request_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='rsk_ops' type-id='e7c1a985' visibility='default' filepath='include/net/request_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/net/request_sock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='saved_syn' type-id='f9409001' visibility='default' filepath='include/net/request_sock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='secid' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='peer_secid' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='65' 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='14' column='1' id='b8765d15'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='twsk_slab' type-id='f3b4aca8' visibility='default' filepath='include/net/timewait_sock.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='twsk_slab_name' type-id='26a90f95' visibility='default' filepath='include/net/timewait_sock.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='twsk_obj_size' type-id='f0981eeb' visibility='default' filepath='include/net/timewait_sock.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='twsk_unique' type-id='1d8e5a11' visibility='default' filepath='include/net/timewait_sock.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='twsk_destructor' type-id='841969d0' visibility='default' filepath='include/net/timewait_sock.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__16' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='1198' column='1' id='adf5bf47'>
+        <data-member access='public'>
+          <var-decl name='hashinfo' type-id='d7a1e3c2' visibility='default' filepath='include/net/sock.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp_table' type-id='115daa23' visibility='default' filepath='include/net/sock.h' line='1200' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw_hash' type-id='eb2c56dc' visibility='default' filepath='include/net/sock.h' line='1201' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='smc_hash' type-id='aa8162a3' visibility='default' filepath='include/net/sock.h' line='1202' column='1'/>
+        </data-member>
+      </union-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='adb1d973'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='ac16795b' 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='e151255a' visibility='default' filepath='include/net/smc.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__17' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='199' column='1' id='56935795'>
+        <data-member access='public'>
+          <var-decl name='skc_flags' type-id='7359adad' visibility='default' filepath='include/net/sock.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_listener' type-id='f772df6d' visibility='default' filepath='include/net/sock.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_dr' type-id='b7ab21fc' visibility='default' filepath='include/net/sock.h' line='202' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__18' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='211' column='1' id='38f5bda8'>
+        <data-member access='public'>
+          <var-decl name='skc_node' type-id='03a4a074' visibility='default' filepath='include/net/sock.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_nulls_node' type-id='5bd248e7' visibility='default' filepath='include/net/sock.h' line='213' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__19' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='219' column='1' id='9e121764'>
+        <data-member access='public'>
+          <var-decl name='skc_incoming_cpu' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_rcv_wnd' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_rcv_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='222' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='228' column='1' id='5547e6b1'>
+        <data-member access='public'>
+          <var-decl name='skc_rxhash' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_window_clamp' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='skc_tw_snd_nxt' type-id='19c2251e' visibility='default' filepath='include/net/sock.h' line='231' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='socket_lock_t' type-id='a865a4bb' filepath='include/net/sock.h' line='110' column='1' id='40d8a3da'/>
+      <class-decl name='__anonymous_struct__4' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='40d8a3da' visibility='default' filepath='include/net/sock.h' line='97' column='1' id='a865a4bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='slock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='owned' type-id='95e97e5e' visibility='default' filepath='include/net/sock.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='wq' type-id='b5ab048f' visibility='default' filepath='include/net/sock.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__5' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='380' column='1' id='6a96185e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rmem_alloc' type-id='49178f86' 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='95e97e5e' 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='0fbf3cfd' 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='0fbf3cfd' 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='568' column='1' id='dbc9a936'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/linux/filter.h' line='569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/filter.h' line='570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='prog' type-id='bdcee7ae' visibility='default' filepath='include/linux/filter.h' line='571' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='397' column='1' id='a29f8367'>
+        <data-member access='public'>
+          <var-decl name='sk_wq' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sk_wq_raw' type-id='99f34ac1' visibility='default' filepath='include/net/sock.h' line='399' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='socket_wq' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='96' column='1' id='8bd06fd9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wait' type-id='b5ab048f' visibility='default' filepath='include/linux/net.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fasync_list' type-id='5bb9c75d' visibility='default' filepath='include/linux/net.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/linux/net.h' line='101' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='lwtunnel_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/lwtunnel.h' line='25' column='1' id='44644afc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='headroom' type-id='d315442e' visibility='default' filepath='include/net/lwtunnel.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='refcnt' type-id='49178f86' visibility='default' filepath='include/net/lwtunnel.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='orig_output' type-id='0023218e' visibility='default' filepath='include/net/lwtunnel.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='orig_input' type-id='d2e00785' visibility='default' filepath='include/net/lwtunnel.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/lwtunnel.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data' type-id='167619f6' visibility='default' filepath='include/net/lwtunnel.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__24' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='413' column='1' id='fc714247'>
+        <data-member access='public'>
+          <var-decl name='sk_send_head' type-id='0fbf3cfd' visibility='default' filepath='include/net/sock.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp_rtx_queue' type-id='dec44472' visibility='default' filepath='include/net/sock.h' line='415' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='socket_state' type-id='08f5ca1b' filepath='include/uapi/linux/net.h' line='54' column='1' id='ee2ecafb'/>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/uapi/linux/net.h' line='48' column='1' id='08f5ca1b'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2112' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='137' column='1' id='4e0399c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='release' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connect' type-id='be6c7be7' visibility='default' filepath='include/linux/net.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='socketpair' type-id='be3a232b' visibility='default' filepath='include/linux/net.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='accept' type-id='2136470b' visibility='default' filepath='include/linux/net.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='getname' type-id='c9664af8' visibility='default' filepath='include/linux/net.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='poll' type-id='e93ad56e' visibility='default' filepath='include/linux/net.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_ioctl' type-id='82a9a11e' visibility='default' filepath='include/linux/net.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='gettstamp' type-id='d78dd406' visibility='default' filepath='include/linux/net.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='listen' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='shutdown' type-id='6dfd92af' visibility='default' filepath='include/linux/net.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='compat_setsockopt' type-id='82ffa5a0' visibility='default' filepath='include/linux/net.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='compat_getsockopt' type-id='a9c0cdab' visibility='default' filepath='include/linux/net.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='sendmsg' type-id='f38728c0' visibility='default' filepath='include/linux/net.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='recvmsg' type-id='93abc02f' visibility='default' filepath='include/linux/net.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mmap' type-id='3eef3bc7' visibility='default' filepath='include/linux/net.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='sendpage' type-id='42b02383' visibility='default' filepath='include/linux/net.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='splice_read' type-id='21641a6b' visibility='default' filepath='include/linux/net.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='set_peek_off' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='peek_len' type-id='27936440' visibility='default' filepath='include/linux/net.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='read_sock' type-id='8755cc63' visibility='default' filepath='include/linux/net.h' line='200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sendpage_locked' type-id='65399e23' visibility='default' filepath='include/linux/net.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='sendmsg_locked' type-id='1df08751' visibility='default' filepath='include/linux/net.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='set_rcvlowat' type-id='95208a5e' visibility='default' filepath='include/linux/net.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/net.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='read_descriptor_t' type-id='bad61846' filepath='include/linux/fs.h' line='365' column='1' id='2d58d013'/>
+      <class-decl name='__anonymous_struct__6' size-in-bits='256' is-struct='yes' is-anonymous='yes' naming-typedef-id='2d58d013' visibility='default' filepath='include/linux/fs.h' line='357' column='1' id='bad61846'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='written' type-id='b59d7dce' visibility='default' filepath='include/linux/fs.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='b59d7dce' visibility='default' filepath='include/linux/fs.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='arg' type-id='8dda450b' visibility='default' filepath='include/linux/fs.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/linux/fs.h' line='364' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__26' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/fs.h' line='360' column='1' id='8dda450b'>
+        <data-member access='public'>
+          <var-decl name='buf' type-id='26a90f95' visibility='default' filepath='include/linux/fs.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/fs.h' line='362' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='sk_read_actor_t' type-id='0c197ddf' filepath='include/linux/net.h' line='134' column='1' id='514d4e0e'/>
+      <class-decl name='sock_cgroup_data' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='797' column='1' id='8544f103'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='de05b94c' visibility='default' filepath='include/linux/cgroup-defs.h' line='798' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__27' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/cgroup-defs.h' line='798' column='1' id='de05b94c'>
+        <data-member access='public'>
+          <var-decl name='' type-id='16b0d6e5' visibility='default' filepath='include/linux/cgroup-defs.h' line='800' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/cgroup-defs.h' line='818' 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/cgroup-defs.h' line='800' column='1' id='16b0d6e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_data' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='no_refcnt' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='unused' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='padding' type-id='f9b06939' visibility='default' filepath='include/linux/cgroup-defs.h' line='804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='prioidx' type-id='1dc6a898' visibility='default' filepath='include/linux/cgroup-defs.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='classid' type-id='19c2251e' visibility='default' filepath='include/linux/cgroup-defs.h' line='806' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__28' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='526' column='1' id='b3414a3c'>
+        <data-member access='public'>
+          <var-decl name='sk_peer_lock' type-id='fb4018a0' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='156952c4' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='2a125a28' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__8' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/sock.h' line='526' column='1' id='156952c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/sock.h' line='526' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__30' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ip.h' line='127' column='1' id='4fa91678'>
+        <data-member access='public'>
+          <var-decl name='destructor' type-id='841969d0' visibility='default' filepath='include/net/ip.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='saved_sk' type-id='f772df6d' visibility='default' filepath='include/net/ip.h' line='129' column='1'/>
+        </data-member>
+      </union-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='94b5478d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' 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='95e97e5e' 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='95e97e5e' 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='19c2251e' 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='19c2251e' 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='19c2251e' 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='19c2251e' 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='f9b06939' 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='f9b06939' 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='f9b06939' 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='f9b06939' 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='19c2251e' 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='0899c7ad' 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='87447c2d' 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='a2bff676' 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='64615833' 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='19c2251e' 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='95e97e5e' 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='95e97e5e' 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='ac1fa8c0' 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='ac1fa8c0' 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='c76a5484' 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='c27f07e7' 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='c27f07e7' 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='e3d8ce29' visibility='default' filepath='include/net/fib_rules.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <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='c76a5484'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d80b72e6' 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='d80b72e6' 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='c27f07e7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='d315442e' 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='d315442e' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='40' 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='18f5da66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lookup_ptr' type-id='eaa32e2f' 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='eaa32e2f' 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='eaa32e2f' 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='87447c2d' 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='19c2251e' 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='95e97e5e' 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='284260b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/fib_rules.h' line='30' 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='65' column='1' id='b2fc06b3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='initialized' type-id='b50a4934' visibility='default' filepath='include/linux/ipv6.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='secret' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='67' 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='115' column='1' id='59a2e4aa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='allocs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='destroys' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_grows' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='res_failed' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='lookups' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hits' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcv_probes_mcast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rcv_probes_ucast' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periodic_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='forced_gc_runs' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='unres_discards' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='table_fulls' type-id='7359adad' visibility='default' filepath='include/net/neighbour.h' line='132' 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='192' column='1' id='1f305e7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash_buckets' type-id='104977a4' visibility='default' filepath='include/net/neighbour.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hash_shift' type-id='f0981eeb' visibility='default' filepath='include/net/neighbour.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hash_rnd' type-id='3fa29bab' visibility='default' filepath='include/net/neighbour.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/neighbour.h' line='196' 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='169' column='1' id='06dfa6bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/net/neighbour.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='solicit' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='error_report' type-id='8e78f753' visibility='default' filepath='include/net/neighbour.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='connected_output' type-id='a57789c2' visibility='default' filepath='include/net/neighbour.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifmcaddr6' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='114' column='1' id='cc23d6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idev' type-id='f026b16b' visibility='default' filepath='include/net/if_inet6.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='d1ca3a89' visibility='default' filepath='include/net/if_inet6.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mca_sources' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mca_tomb' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mca_sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='mca_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mca_sfcount' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mca_timer' type-id='abe41e67' visibility='default' filepath='include/net/if_inet6.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='mca_flags' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='mca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='mca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='mca_lock' type-id='fb4018a0' visibility='default' filepath='include/net/if_inet6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='mca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='129' 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='99' column='1' id='b83c8287'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sf_next' type-id='60f4096f' visibility='default' filepath='include/net/if_inet6.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sf_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sf_count' type-id='f05e8e77' visibility='default' filepath='include/net/if_inet6.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sf_gsresp' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sf_oldin' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='sf_crcount' type-id='002ac4a6' visibility='default' filepath='include/net/if_inet6.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ifacaddr6' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='140' column='1' id='1883cd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aca_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='aca_rt' type-id='fe454a75' visibility='default' filepath='include/net/if_inet6.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='aca_next' type-id='034d7ded' visibility='default' filepath='include/net/if_inet6.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aca_addr_lst' type-id='03a4a074' visibility='default' filepath='include/net/if_inet6.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='aca_users' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aca_refcnt' type-id='64615833' visibility='default' filepath='include/net/if_inet6.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='aca_cstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='aca_tstamp' type-id='7359adad' visibility='default' filepath='include/net/if_inet6.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='149' 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='156' column='1' id='0e97f526'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='proc_dir_entry' type-id='d077e928' visibility='default' filepath='include/net/if_inet6.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ipv6' type-id='30897c4e' visibility='default' filepath='include/net/if_inet6.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='icmpv6dev' type-id='6551bd60' visibility='default' filepath='include/net/if_inet6.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='icmpv6msgdev' type-id='793f0d19' visibility='default' filepath='include/net/if_inet6.h' line='160' 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='75' column='1' id='1b8801b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='72bb5580' visibility='default' filepath='include/net/snmp.h' line='76' 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='85' column='1' id='e4ca98d1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mibs' type-id='61cd76ae' visibility='default' filepath='include/net/snmp.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a88f76f1' size-in-bits='64' id='7c67ab39'/>
+      <pointer-type-def type-id='36313ee4' size-in-bits='64' id='f3f553e2'/>
+      <qualified-type-def type-id='5919d6b5' const='yes' id='3d647412'/>
+      <pointer-type-def type-id='3d647412' size-in-bits='64' id='dd22f428'/>
+      <qualified-type-def type-id='06dfa6bb' const='yes' id='e4083e44'/>
+      <pointer-type-def type-id='e4083e44' size-in-bits='64' id='66fa472a'/>
+      <qualified-type-def type-id='a7502152' const='yes' id='9df06605'/>
+      <pointer-type-def type-id='9df06605' size-in-bits='64' id='d070dbfd'/>
+      <qualified-type-def type-id='4e0399c2' const='yes' id='a87d8ed1'/>
+      <pointer-type-def type-id='a87d8ed1' size-in-bits='64' id='38a81521'/>
+      <qualified-type-def type-id='1c03d197' const='yes' id='aa2a8a9e'/>
+      <pointer-type-def type-id='aa2a8a9e' size-in-bits='64' id='94f8595c'/>
+      <qualified-type-def type-id='ad499564' const='yes' id='9954f7ad'/>
+      <pointer-type-def type-id='9954f7ad' size-in-bits='64' id='e7c1a985'/>
+      <qualified-type-def type-id='a240f41d' const='yes' id='17644e8c'/>
+      <pointer-type-def type-id='17644e8c' size-in-bits='64' id='78e7cf52'/>
+      <pointer-type-def type-id='18f5da66' size-in-bits='64' id='e6f0ce4c'/>
+      <pointer-type-def type-id='94b5478d' size-in-bits='64' id='87447c2d'/>
+      <pointer-type-def type-id='284260b8' size-in-bits='64' id='cba1f2de'/>
+      <pointer-type-def type-id='1b8801b2' size-in-bits='64' id='6551bd60'/>
+      <pointer-type-def type-id='e4ca98d1' size-in-bits='64' id='793f0d19'/>
+      <pointer-type-def type-id='1883cd3d' size-in-bits='64' id='034d7ded'/>
+      <pointer-type-def type-id='cc23d6f1' size-in-bits='64' id='d1ca3a89'/>
+      <pointer-type-def type-id='f6ed712a' size-in-bits='64' id='ed512028'/>
+      <pointer-type-def type-id='af2c6a56' size-in-bits='64' id='b7ab21fc'/>
+      <pointer-type-def type-id='5931aad5' size-in-bits='64' id='58505a39'/>
+      <pointer-type-def type-id='5fffc559' size-in-bits='64' id='beb4f24d'/>
+      <pointer-type-def type-id='d328415c' size-in-bits='64' id='cd05c94e'/>
+      <pointer-type-def type-id='df587ad7' size-in-bits='64' id='42bc911b'/>
+      <pointer-type-def type-id='0477141b' size-in-bits='64' id='98a3b427'/>
+      <pointer-type-def type-id='a72f8b53' size-in-bits='64' id='9ce2e6e7'/>
+      <pointer-type-def type-id='648adb0a' size-in-bits='64' id='33356d2c'/>
+      <pointer-type-def type-id='fe695434' size-in-bits='64' id='72fd300e'/>
+      <pointer-type-def type-id='7a3aa0c8' size-in-bits='64' id='41323fc2'/>
+      <pointer-type-def type-id='47308153' size-in-bits='64' id='3eef3bc7'/>
+      <pointer-type-def type-id='4eb067f4' size-in-bits='64' id='8eff9c66'/>
+      <pointer-type-def type-id='38a112d0' size-in-bits='64' id='a57789c2'/>
+      <pointer-type-def type-id='a39e0090' size-in-bits='64' id='9def3eca'/>
+      <pointer-type-def type-id='f18c6e1f' size-in-bits='64' id='9264da33'/>
+      <pointer-type-def type-id='86a0b663' size-in-bits='64' id='0c197ddf'/>
+      <pointer-type-def type-id='918604f1' size-in-bits='64' id='d2e00785'/>
+      <pointer-type-def type-id='3c813efb' size-in-bits='64' id='55530c47'/>
+      <pointer-type-def type-id='ca0a6184' size-in-bits='64' id='95208a5e'/>
+      <pointer-type-def type-id='1f17d624' size-in-bits='64' id='e0fadd76'/>
+      <pointer-type-def type-id='bcdeebc9' size-in-bits='64' id='bc1bf185'/>
+      <pointer-type-def type-id='ec50bf48' size-in-bits='64' id='08113f0a'/>
+      <pointer-type-def type-id='476a87f5' size-in-bits='64' id='1df08751'/>
+      <pointer-type-def type-id='ce67f06c' size-in-bits='64' id='74e71fae'/>
+      <pointer-type-def type-id='6858ea97' size-in-bits='64' id='65399e23'/>
+      <pointer-type-def type-id='0f40f777' size-in-bits='64' id='8755cc63'/>
+      <pointer-type-def type-id='0be333ab' size-in-bits='64' id='a0f5247f'/>
+      <pointer-type-def type-id='e8300215' size-in-bits='64' id='1d8e5a11'/>
+      <pointer-type-def type-id='eb19b127' size-in-bits='64' id='c25ed103'/>
+      <pointer-type-def type-id='6f52f27f' size-in-bits='64' id='20da830b'/>
+      <pointer-type-def type-id='4d6fc4c7' size-in-bits='64' id='078de3a3'/>
+      <pointer-type-def type-id='b86ed83e' size-in-bits='64' id='27936440'/>
+      <pointer-type-def type-id='88b7b5d3' size-in-bits='64' id='6dfd92af'/>
+      <pointer-type-def type-id='202f00af' size-in-bits='64' id='a9c0cdab'/>
+      <pointer-type-def type-id='708a4426' size-in-bits='64' id='82ffa5a0'/>
+      <pointer-type-def type-id='5dc99a0e' size-in-bits='64' id='f38728c0'/>
+      <pointer-type-def type-id='cce3f5a3' size-in-bits='64' id='93abc02f'/>
+      <pointer-type-def type-id='a6ad86be' size-in-bits='64' id='c9664af8'/>
+      <pointer-type-def type-id='3a5c2153' size-in-bits='64' id='be6c7be7'/>
+      <pointer-type-def type-id='abc85e8f' size-in-bits='64' id='be3a232b'/>
+      <pointer-type-def type-id='9d9592f7' size-in-bits='64' id='2136470b'/>
+      <pointer-type-def type-id='bf6a2c5c' size-in-bits='64' id='82a9a11e'/>
+      <pointer-type-def type-id='d11dd9c4' size-in-bits='64' id='d78dd406'/>
+      <pointer-type-def type-id='18da11bd' size-in-bits='64' id='c1655339'/>
+      <pointer-type-def type-id='b83c8287' size-in-bits='64' id='60f4096f'/>
+      <pointer-type-def type-id='44644afc' size-in-bits='64' id='d19f4fca'/>
+      <pointer-type-def type-id='ab94745c' size-in-bits='64' id='6b9b777a'/>
+      <pointer-type-def type-id='c966252c' size-in-bits='64' id='aa79f31a'/>
+      <pointer-type-def type-id='5919d6b5' size-in-bits='64' id='1bf68965'/>
+      <pointer-type-def type-id='1f305e7e' size-in-bits='64' id='0d378d14'/>
+      <pointer-type-def type-id='59a2e4aa' size-in-bits='64' id='3a0389d8'/>
+      <pointer-type-def type-id='aebe1cff' size-in-bits='64' id='6bbe39a7'/>
+      <pointer-type-def type-id='3c330066' size-in-bits='64' id='104977a4'/>
+      <pointer-type-def type-id='b92c8d0d' size-in-bits='64' id='84c6078d'/>
+      <pointer-type-def type-id='fff56995' size-in-bits='64' id='12f283a5'/>
+      <pointer-type-def type-id='12f283a5' size-in-bits='64' id='62c51a1d'/>
+      <pointer-type-def type-id='7203ee09' size-in-bits='64' id='d2524501'/>
+      <pointer-type-def type-id='51ee3086' size-in-bits='64' id='eb2c56dc'/>
+      <pointer-type-def type-id='2d58d013' size-in-bits='64' id='267580ce'/>
+      <pointer-type-def type-id='1c03d197' size-in-bits='64' id='94c948ef'/>
+      <pointer-type-def type-id='ad499564' size-in-bits='64' id='db994912'/>
+      <pointer-type-def type-id='dbc9a936' size-in-bits='64' id='90956edc'/>
+      <pointer-type-def type-id='adb1d973' size-in-bits='64' id='aa8162a3'/>
+      <pointer-type-def type-id='aec72305' size-in-bits='64' id='67adf9a9'/>
+      <pointer-type-def type-id='ff751355' size-in-bits='64' id='1d22b7e5'/>
+      <pointer-type-def type-id='5221b18a' size-in-bits='64' id='5c0abad8'/>
+      <pointer-type-def type-id='8bd06fd9' size-in-bits='64' id='99f34ac1'/>
+      <pointer-type-def type-id='b8765d15' size-in-bits='64' id='d68ad8b5'/>
+      <pointer-type-def type-id='c9a7d694' size-in-bits='64' id='e93ad56e'/>
+      <pointer-type-def type-id='b9c5fbfc' size-in-bits='64' id='f60e04ee'/>
+      <pointer-type-def type-id='8e2d4615' size-in-bits='64' id='8fbb31d1'/>
+      <pointer-type-def type-id='7c9213d1' size-in-bits='64' id='6ade418d'/>
+      <pointer-type-def type-id='7e5ce7a8' size-in-bits='64' id='3d4d3aba'/>
+      <pointer-type-def type-id='7ad36775' size-in-bits='64' id='bf751261'/>
+      <pointer-type-def type-id='40b5eec5' size-in-bits='64' id='9c26ea89'/>
+      <pointer-type-def type-id='3ad2f92f' size-in-bits='64' id='b3002d4b'/>
+      <pointer-type-def type-id='c87333bf' size-in-bits='64' id='21641a6b'/>
+      <pointer-type-def type-id='217933b7' size-in-bits='64' id='42b02383'/>
+      <pointer-type-def type-id='8bff8096' size-in-bits='64' id='1f37a7f4'/>
+      <pointer-type-def type-id='9a516b13' size-in-bits='64' id='115daa23'/>
+      <pointer-type-def type-id='02138eb3' size-in-bits='64' id='3a0c781f'/>
+      <pointer-type-def type-id='c2e47616' size-in-bits='64' id='0feea528'/>
+      <pointer-type-def type-id='4d3ea3f3' size-in-bits='64' id='b78e9a0f'/>
+      <pointer-type-def type-id='557c51cd' size-in-bits='64' id='29e425c9'/>
+      <pointer-type-def type-id='33ca674b' size-in-bits='64' id='c9214b77'/>
+      <pointer-type-def type-id='a41f849f' size-in-bits='64' id='d3d20d73'/>
+      <pointer-type-def type-id='d8579536' size-in-bits='64' id='28375890'/>
+      <pointer-type-def type-id='6415147f' size-in-bits='64' id='8e78f753'/>
+      <pointer-type-def type-id='99690429' size-in-bits='64' id='1cebc84d'/>
+      <pointer-type-def type-id='d66ae2ca' size-in-bits='64' id='5c4c6144'/>
+      <pointer-type-def type-id='22814d90' size-in-bits='64' id='b249945a'/>
+      <pointer-type-def type-id='8b66a21e' size-in-bits='64' id='841969d0'/>
+      <pointer-type-def type-id='9263c6b3' size-in-bits='64' id='e937debf'/>
+      <pointer-type-def type-id='4e62b18f' size-in-bits='64' id='09f3a86b'/>
+      <qualified-type-def type-id='002ac4a6' volatile='yes' id='75a392dc'/>
+      <pointer-type-def type-id='ccf6c819' size-in-bits='64' id='ae4d1761'/>
+      <pointer-type-def type-id='cb961c68' size-in-bits='64' id='328dda6e'/>
+      <function-decl name='__dynamic_pr_debug' mangled-name='__dynamic_pr_debug' filepath='lib/dynamic_debug.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dynamic_pr_debug'>
+        <parameter type-id='7c67ab39' name='descriptor' filepath='lib/dynamic_debug.c' line='552' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/dynamic_debug.c' line='552' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dynamic_netdev_dbg' mangled-name='__dynamic_netdev_dbg' filepath='lib/dynamic_debug.c' line='603' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dynamic_netdev_dbg'>
+        <parameter type-id='7c67ab39' name='descriptor' filepath='lib/dynamic_debug.c' line='603' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='lib/dynamic_debug.c' line='604' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/dynamic_debug.c' line='604' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dynamic_dev_dbg' mangled-name='__dynamic_dev_dbg' filepath='lib/dynamic_debug.c' line='572' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dynamic_dev_dbg'>
+        <parameter type-id='7c67ab39' name='descriptor' filepath='lib/dynamic_debug.c' line='572' column='1'/>
+        <parameter type-id='8df61054' name='dev' filepath='lib/dynamic_debug.c' line='573' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/dynamic_debug.c' line='573' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='static_key_true' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='346' column='1' id='49a0ad34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='5931aad5'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='aa79f31a'/>
+        <parameter type-id='1bf68965'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5fffc559'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='3c330066'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='1f37a7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d328415c'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='94c948ef'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df587ad7'>
+        <parameter type-id='87447c2d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0477141b'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='cba1f2de'/>
+        <parameter type-id='30864cdc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a72f8b53'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='b1fd62ba'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='648adb0a'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='b1fd62ba'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e6f0ce4c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe695434'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cba1f2de'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7a3aa0c8'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cba1f2de'/>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47308153'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4eb067f4'>
+        <parameter type-id='3c330066'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38a112d0'>
+        <parameter type-id='3c330066'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a39e0090'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='d504f73d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f18c6e1f'>
+        <parameter type-id='12f283a5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='86a0b663'>
+        <parameter type-id='267580ce'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='918604f1'>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3c813efb'>
+        <parameter type-id='f772df6d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca0a6184'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f17d624'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bcdeebc9'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ec50bf48'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='476a87f5'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ce67f06c'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6858ea97'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0f40f777'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='267580ce'/>
+        <parameter type-id='514d4e0e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0be333ab'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8300215'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb19b127'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f52f27f'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d6fc4c7'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='8efea9e5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b86ed83e'>
+        <parameter type-id='13103032'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88b7b5d3'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='202f00af'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='708a4426'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5dc99a0e'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cce3f5a3'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6ad86be'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3a5c2153'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='5c0abad8'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='abc85e8f'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='13103032'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9d9592f7'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf6a2c5c'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d11dd9c4'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18da11bd'>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aec72305'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='f772df6d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9a7d694'>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='f0acc909'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b9c5fbfc'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='cd1b45ab'/>
+        <return type-id='3f1a6b60'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e2d4615'>
+        <parameter type-id='b5fb9c17'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7c9213d1'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e5ce7a8'>
+        <parameter type-id='78e7cf52'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ad36775'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='40b5eec5'>
+        <parameter type-id='87447c2d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='e6f0ce4c'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ad2f92f'>
+        <parameter type-id='87447c2d'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c87333bf'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='b53e8dbb'/>
+        <parameter type-id='15d29710'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='217933b7'>
+        <parameter type-id='13103032'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02138eb3'>
+        <parameter type-id='a2bff676'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c2e47616'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='3c330066'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='dd22f428'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4d3ea3f3'>
+        <parameter type-id='2ce52478'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='557c51cd'>
+        <parameter type-id='94f8595c'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33ca674b'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a41f849f'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='94c948ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8579536'>
+        <parameter type-id='a68064b1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6415147f'>
+        <parameter type-id='3c330066'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='99690429'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='d070dbfd'/>
+        <parameter type-id='f026b16b'/>
+        <parameter type-id='ed512028'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='3f1a6b60'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d66ae2ca'>
+        <parameter type-id='12f283a5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='22814d90'>
+        <parameter type-id='94c948ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8b66a21e'>
+        <parameter type-id='f772df6d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9263c6b3'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e62b18f'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='bd54fe1a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='2117397c' size-in-bits='64' id='b1fd62ba'/>
+      <class-decl name='flowi' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='174' column='1' id='2117397c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='e9bb6246' visibility='default' filepath='include/net/flow.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='704' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='175' column='1' id='e9bb6246'>
+        <data-member access='public'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip4' type-id='5f8f2c58' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip6' type-id='618f2f7e' visibility='default' filepath='include/net/flow.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dn' type-id='83eba552' visibility='default' filepath='include/net/flow.h' line='179' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='flowi4' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='70' column='1' id='5f8f2c58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='88' 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='133' column='1' id='618f2f7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flowlabel' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='156' column='1'/>
+        </data-member>
+      </class-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='184ee240'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flowic_oif' type-id='95e97e5e' 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='95e97e5e' 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='3f1a6b60' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flowic_uid' type-id='d80b72e6' visibility='default' filepath='include/net/flow.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flowic_tun_key' type-id='46ff7b8b' visibility='default' filepath='include/net/flow.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flowic_multipath_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='43' 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='159' column='1' id='83eba552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='saddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='169' 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='46ff7b8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tun_id' type-id='0899c7ad' visibility='default' filepath='include/net/flow.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='flowi_uli' size-in-bits='32' visibility='default' filepath='include/net/flow.h' line='46' column='1' id='76355708'>
+        <data-member access='public'>
+          <var-decl name='ports' type-id='1a8a9bd4' visibility='default' filepath='include/net/flow.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='icmpt' type-id='217fb848' visibility='default' filepath='include/net/flow.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dnports' type-id='b1169d60' visibility='default' filepath='include/net/flow.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gre_key' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mht' type-id='97a0d733' visibility='default' filepath='include/net/flow.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='47' column='1' id='1a8a9bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='57' column='1' id='b1169d60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='52' column='1' id='217fb848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='65' column='1' id='97a0d733'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/fdt.c' language='LANG_C89'>
+      <function-decl name='memmove' filepath='arch/arm64/include/asm/string.h' line='39' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/fdt_ro.c' language='LANG_C89'>
+      <function-decl name='memchr' filepath='arch/arm64/include/asm/string.h' line='31' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='strrchr' filepath='arch/arm64/include/asm/string.h' line='10' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strnlen' filepath='arch/arm64/include/asm/string.h' line='25' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/fdt_rw.c' language='LANG_C89'>
+      <function-decl name='memset' filepath='arch/arm64/include/asm/string.h' line='43' column='1' visibility='default' binding='global' size-in-bits='64'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/find_bit.c' language='LANG_C89'>
+      <function-decl name='find_next_zero_bit' mangled-name='find_next_zero_bit' filepath='lib/find_bit.c' line='76' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_next_zero_bit'>
+        <parameter type-id='f9b37274' name='addr' filepath='lib/find_bit.c' line='76' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/find_bit.c' line='76' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='lib/find_bit.c' line='77' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='find_next_bit' mangled-name='find_next_bit' filepath='lib/find_bit.c' line='67' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_next_bit'>
+        <parameter type-id='f9b37274' name='addr' filepath='lib/find_bit.c' line='67' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/find_bit.c' line='67' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='lib/find_bit.c' line='68' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='find_last_bit' mangled-name='find_last_bit' filepath='lib/find_bit.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_last_bit'>
+        <parameter type-id='f9b37274' name='addr' filepath='lib/find_bit.c' line='131' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/find_bit.c' line='131' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/genalloc.c' language='LANG_C89'>
+      <class-decl name='gen_pool' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/genalloc.h' line='58' column='1' id='171b0f6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/linux/genalloc.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chunks' type-id='72f469ec' visibility='default' filepath='include/linux/genalloc.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_alloc_order' type-id='95e97e5e' visibility='default' filepath='include/linux/genalloc.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='algo' type-id='00278b91' visibility='default' filepath='include/linux/genalloc.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/genalloc.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/linux/genalloc.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='genpool_algo_t' type-id='f54ae583' filepath='include/linux/genalloc.h' line='48' column='1' id='00278b91'/>
+      <pointer-type-def type-id='171b0f6c' size-in-bits='64' id='75b9415a'/>
+      <pointer-type-def type-id='713ac427' size-in-bits='64' id='f54ae583'/>
+      <function-decl name='gen_pool_create' mangled-name='gen_pool_create' filepath='lib/genalloc.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_create'>
+        <parameter type-id='95e97e5e' name='min_alloc_order' filepath='lib/genalloc.c' line='152' column='1'/>
+        <parameter type-id='95e97e5e' name='nid' filepath='lib/genalloc.c' line='152' column='1'/>
+        <return type-id='75b9415a'/>
+      </function-decl>
+      <function-decl name='gen_pool_add_owner' mangled-name='gen_pool_add_owner' filepath='lib/genalloc.c' line='183' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_add_owner'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='183' column='1'/>
+        <parameter type-id='7359adad' name='virt' filepath='lib/genalloc.c' line='183' column='1'/>
+        <parameter type-id='2522883d' name='phys' filepath='lib/genalloc.c' line='183' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='184' column='1'/>
+        <parameter type-id='95e97e5e' name='nid' filepath='lib/genalloc.c' line='184' column='1'/>
+        <parameter type-id='eaa32e2f' name='owner' filepath='lib/genalloc.c' line='184' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gen_pool_set_algo' mangled-name='gen_pool_set_algo' filepath='lib/genalloc.c' line='620' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_set_algo'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='620' column='1'/>
+        <parameter type-id='00278b91' name='algo' filepath='lib/genalloc.c' line='620' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='620' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gen_pool_destroy' mangled-name='gen_pool_destroy' filepath='lib/genalloc.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_destroy'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='241' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gen_pool_virt_to_phys' mangled-name='gen_pool_virt_to_phys' filepath='lib/genalloc.c' line='216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_virt_to_phys'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='216' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='lib/genalloc.c' line='216' column='1'/>
+        <return type-id='2522883d'/>
+      </function-decl>
+      <function-decl name='gen_pool_alloc_algo_owner' mangled-name='gen_pool_alloc_algo_owner' filepath='lib/genalloc.c' line='276' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_alloc_algo_owner'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='276' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='276' column='1'/>
+        <parameter type-id='00278b91' name='algo' filepath='lib/genalloc.c' line='277' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='277' column='1'/>
+        <parameter type-id='63e171df' name='owner' filepath='lib/genalloc.c' line='277' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='gen_pool_free_owner' mangled-name='gen_pool_free_owner' filepath='lib/genalloc.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_free_owner'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='486' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='lib/genalloc.c' line='486' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='486' column='1'/>
+        <parameter type-id='63e171df' name='owner' filepath='lib/genalloc.c' line='487' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='gen_pool_size' mangled-name='gen_pool_size' filepath='lib/genalloc.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_size'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='597' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='gen_pool_fixed_alloc' mangled-name='gen_pool_fixed_alloc' filepath='lib/genalloc.c' line='689' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_fixed_alloc'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/genalloc.c' line='689' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/genalloc.c' line='689' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='lib/genalloc.c' line='690' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='lib/genalloc.c' line='690' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='690' column='1'/>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='691' column='1'/>
+        <parameter type-id='7359adad' name='start_addr' filepath='lib/genalloc.c' line='691' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='gen_pool_dma_zalloc_align' mangled-name='gen_pool_dma_zalloc_align' filepath='lib/genalloc.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_dma_zalloc_align'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='465' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='465' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='466' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='466' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gen_pool_dma_alloc_align' mangled-name='gen_pool_dma_alloc_align' filepath='lib/genalloc.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_dma_alloc_align'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='394' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/genalloc.c' line='394' column='1'/>
+        <parameter type-id='e835b5d8' name='dma' filepath='lib/genalloc.c' line='395' column='1'/>
+        <parameter type-id='95e97e5e' name='align' filepath='lib/genalloc.c' line='395' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='gen_pool_best_fit' mangled-name='gen_pool_best_fit' filepath='lib/genalloc.c' line='747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_best_fit'>
+        <parameter type-id='1d2c2b85' name='map' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/genalloc.c' line='747' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='f0981eeb' name='nr' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/genalloc.c' line='748' column='1'/>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='749' column='1'/>
+        <parameter type-id='7359adad' name='start_addr' filepath='lib/genalloc.c' line='749' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='gen_pool_avail' mangled-name='gen_pool_avail' filepath='lib/genalloc.c' line='578' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gen_pool_avail'>
+        <parameter type-id='75b9415a' name='pool' filepath='lib/genalloc.c' line='578' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='713ac427'>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='75b9415a'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='7359adad'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/hexdump.c' language='LANG_C89'>
+      <function-decl name='hex_dump_to_buffer' mangled-name='hex_dump_to_buffer' filepath='lib/hexdump.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex_dump_to_buffer'>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/hexdump.c' line='105' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/hexdump.c' line='105' column='1'/>
+        <parameter type-id='95e97e5e' name='rowsize' filepath='lib/hexdump.c' line='105' column='1'/>
+        <parameter type-id='95e97e5e' name='groupsize' filepath='lib/hexdump.c' line='105' column='1'/>
+        <parameter type-id='26a90f95' name='linebuf' filepath='lib/hexdump.c' line='106' column='1'/>
+        <parameter type-id='b59d7dce' name='linebuflen' filepath='lib/hexdump.c' line='106' column='1'/>
+        <parameter type-id='b50a4934' name='ascii' filepath='lib/hexdump.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='print_hex_dump' mangled-name='print_hex_dump' filepath='lib/hexdump.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='print_hex_dump'>
+        <parameter type-id='80f4b756' name='level' filepath='lib/hexdump.c' line='239' column='1'/>
+        <parameter type-id='80f4b756' name='prefix_str' filepath='lib/hexdump.c' line='239' column='1'/>
+        <parameter type-id='95e97e5e' name='prefix_type' filepath='lib/hexdump.c' line='239' column='1'/>
+        <parameter type-id='95e97e5e' name='rowsize' filepath='lib/hexdump.c' line='240' column='1'/>
+        <parameter type-id='95e97e5e' name='groupsize' filepath='lib/hexdump.c' line='240' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/hexdump.c' line='241' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/hexdump.c' line='241' column='1'/>
+        <parameter type-id='b50a4934' name='ascii' filepath='lib/hexdump.c' line='241' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hex_to_bin' mangled-name='hex_to_bin' filepath='lib/hexdump.c' line='25' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex_to_bin'>
+        <parameter type-id='a84c031d' name='ch' filepath='lib/hexdump.c' line='25' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hex2bin' mangled-name='hex2bin' filepath='lib/hexdump.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hex2bin'>
+        <parameter type-id='8bff8096' name='dst' filepath='lib/hexdump.c' line='44' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/hexdump.c' line='44' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/hexdump.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bin2hex' mangled-name='bin2hex' filepath='lib/hexdump.c' line='65' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bin2hex'>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/hexdump.c' line='65' column='1'/>
+        <parameter type-id='eaa32e2f' name='src' filepath='lib/hexdump.c' line='65' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/hexdump.c' line='65' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/hweight.c' language='LANG_C89'>
+      <function-decl name='__sw_hweight8' mangled-name='__sw_hweight8' filepath='lib/hweight.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight8'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='39' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__sw_hweight64' mangled-name='__sw_hweight64' filepath='lib/hweight.c' line='47' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight64'>
+        <parameter type-id='d3130597' name='w' filepath='lib/hweight.c' line='47' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='__sw_hweight32' mangled-name='__sw_hweight32' filepath='lib/hweight.c' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight32'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='13' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__sw_hweight16' mangled-name='__sw_hweight16' filepath='lib/hweight.c' line='30' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sw_hweight16'>
+        <parameter type-id='f0981eeb' name='w' filepath='lib/hweight.c' line='30' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/idr.c' language='LANG_C89'>
+      <qualified-type-def type-id='37ce495e' const='yes' id='1e6236d9'/>
+      <pointer-type-def type-id='1e6236d9' size-in-bits='64' id='c79c8089'/>
+      <pointer-type-def type-id='46ce60fb' size-in-bits='64' id='a9e764bb'/>
+      <pointer-type-def type-id='37ce495e' size-in-bits='64' id='301185b4'/>
+      <pointer-type-def type-id='8852d0d2' size-in-bits='64' id='f4f5b664'/>
+      <function-decl name='idr_alloc' mangled-name='idr_alloc' filepath='lib/idr.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='79' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='lib/idr.c' line='79' column='1'/>
+        <parameter type-id='95e97e5e' name='start' filepath='lib/idr.c' line='79' column='1'/>
+        <parameter type-id='95e97e5e' name='end' filepath='lib/idr.c' line='79' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/idr.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ida_alloc_range' mangled-name='ida_alloc_range' filepath='lib/idr.c' line='379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_alloc_range'>
+        <parameter type-id='a9e764bb' name='ida' filepath='lib/idr.c' line='379' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='lib/idr.c' line='379' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='lib/idr.c' line='379' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/idr.c' line='380' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ida_free' mangled-name='ida_free' filepath='lib/idr.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_free'>
+        <parameter type-id='a9e764bb' name='ida' filepath='lib/idr.c' line='485' column='1'/>
+        <parameter type-id='f0981eeb' name='id' filepath='lib/idr.c' line='485' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ida_destroy' mangled-name='ida_destroy' filepath='lib/idr.c' line='537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ida_destroy'>
+        <parameter type-id='a9e764bb' name='ida' filepath='lib/idr.c' line='537' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='idr_alloc_cyclic' mangled-name='idr_alloc_cyclic' filepath='lib/idr.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc_cyclic'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='117' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='lib/idr.c' line='117' column='1'/>
+        <parameter type-id='95e97e5e' name='start' filepath='lib/idr.c' line='117' column='1'/>
+        <parameter type-id='95e97e5e' name='end' filepath='lib/idr.c' line='117' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/idr.c' line='117' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_replace' mangled-name='idr_replace' filepath='lib/idr.c' line='290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_replace'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='290' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='lib/idr.c' line='290' column='1'/>
+        <parameter type-id='7359adad' name='id' filepath='lib/idr.c' line='290' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='idr_for_each' mangled-name='idr_for_each' filepath='lib/idr.c' line='195' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_for_each'>
+        <parameter type-id='c79c8089' name='idr' filepath='lib/idr.c' line='195' column='1'/>
+        <parameter type-id='f4f5b664' name='fn' filepath='lib/idr.c' line='196' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/idr.c' line='196' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_alloc_u32' mangled-name='idr_alloc_u32' filepath='lib/idr.c' line='33' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_alloc_u32'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='33' column='1'/>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='lib/idr.c' line='33' column='1'/>
+        <parameter type-id='f9409001' name='nextid' filepath='lib/idr.c' line='33' column='1'/>
+        <parameter type-id='7359adad' name='max' filepath='lib/idr.c' line='34' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/idr.c' line='34' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='idr_remove' mangled-name='idr_remove' filepath='lib/idr.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_remove'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='152' column='1'/>
+        <parameter type-id='7359adad' name='id' filepath='lib/idr.c' line='152' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='idr_get_next' mangled-name='idr_get_next' filepath='lib/idr.c' line='264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_get_next'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/idr.c' line='264' column='1'/>
+        <parameter type-id='7292109c' name='nextid' filepath='lib/idr.c' line='264' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='idr_find' mangled-name='idr_find' filepath='lib/idr.c' line='172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_find'>
+        <parameter type-id='c79c8089' name='idr' filepath='lib/idr.c' line='172' column='1'/>
+        <parameter type-id='7359adad' name='id' filepath='lib/idr.c' line='172' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8852d0d2'>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/iomap_copy.c' language='LANG_C89'>
+      <function-decl name='__iowrite32_copy' mangled-name='__iowrite32_copy' filepath='lib/iomap_copy.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__iowrite32_copy'>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/iomap_copy.c' line='19' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/iomap_copy.c' line='20' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/iomap_copy.c' line='21' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ioread32_copy' mangled-name='__ioread32_copy' filepath='lib/iomap_copy.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ioread32_copy'>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/iomap_copy.c' line='42' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/iov_iter.c' language='LANG_C89'>
+      <pointer-type-def type-id='0f042891' size-in-bits='64' id='cc4b1be9'/>
+      <pointer-type-def type-id='cc4b1be9' size-in-bits='64' id='5d3cb3f9'/>
+      <function-decl name='_copy_from_iter_full' mangled-name='_copy_from_iter_full' filepath='lib/iov_iter.c' line='759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_from_iter_full'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='lib/iov_iter.c' line='759' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/iov_iter.c' line='759' column='1'/>
+        <parameter type-id='4fa10f9e' name='i' filepath='lib/iov_iter.c' line='759' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='_copy_to_iter' mangled-name='_copy_to_iter' filepath='lib/iov_iter.c' line='605' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_to_iter'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='lib/iov_iter.c' line='605' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/iov_iter.c' line='605' column='1'/>
+        <parameter type-id='4fa10f9e' name='i' filepath='lib/iov_iter.c' line='605' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='_copy_from_iter' mangled-name='_copy_from_iter' filepath='lib/iov_iter.c' line='739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_copy_from_iter'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='lib/iov_iter.c' line='739' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/iov_iter.c' line='739' column='1'/>
+        <parameter type-id='4fa10f9e' name='i' filepath='lib/iov_iter.c' line='739' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='iov_iter_init' mangled-name='iov_iter_init' filepath='lib/iov_iter.c' line='436' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='iov_iter_init'>
+        <parameter type-id='4fa10f9e' name='i' filepath='lib/iov_iter.c' line='436' column='1'/>
+        <parameter type-id='f0981eeb' name='direction' filepath='lib/iov_iter.c' line='436' column='1'/>
+        <parameter type-id='2c556848' name='iov' filepath='lib/iov_iter.c' line='437' column='1'/>
+        <parameter type-id='7359adad' name='nr_segs' filepath='lib/iov_iter.c' line='437' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/iov_iter.c' line='438' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='import_iovec' mangled-name='import_iovec' filepath='lib/iov_iter.c' line='1647' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='import_iovec'>
+        <parameter type-id='95e97e5e' name='type' filepath='lib/iov_iter.c' line='1647' column='1'/>
+        <parameter type-id='2c556848' name='uvector' filepath='lib/iov_iter.c' line='1647' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_segs' filepath='lib/iov_iter.c' line='1648' column='1'/>
+        <parameter type-id='f0981eeb' name='fast_segs' filepath='lib/iov_iter.c' line='1648' column='1'/>
+        <parameter type-id='5d3cb3f9' name='iov' filepath='lib/iov_iter.c' line='1649' column='1'/>
+        <parameter type-id='4fa10f9e' name='i' filepath='lib/iov_iter.c' line='1649' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/kasprintf.c' language='LANG_C89'>
+      <function-decl name='kasprintf' mangled-name='kasprintf' filepath='lib/kasprintf.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kasprintf'>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/kasprintf.c' line='53' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/kasprintf.c' line='53' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='kvasprintf' mangled-name='kvasprintf' filepath='lib/kasprintf.c' line='15' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvasprintf'>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/kasprintf.c' line='15' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/kasprintf.c' line='15' column='1'/>
+        <parameter type-id='2aee9912' name='ap' filepath='lib/kasprintf.c' line='15' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/kfifo.c' language='LANG_C89'>
+      <class-decl name='__kfifo' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/kfifo.h' line='44' column='1' id='bbbc6c1e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='in' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='out' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='esize' type-id='f0981eeb' visibility='default' filepath='include/linux/kfifo.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/kfifo.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='bbbc6c1e' size-in-bits='64' id='f3207f74'/>
+      <function-decl name='__kfifo_to_user_r' mangled-name='__kfifo_to_user_r' filepath='lib/kfifo.c' line='523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_to_user_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='523' column='1'/>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/kfifo.c' line='523' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='524' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='524' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='524' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_to_user' mangled-name='__kfifo_to_user' filepath='lib/kfifo.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_to_user'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='270' column='1'/>
+        <parameter type-id='eaa32e2f' name='to' filepath='lib/kfifo.c' line='270' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='271' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='271' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_out' mangled-name='__kfifo_out' filepath='lib/kfifo.c' line='166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_out'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='166' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='167' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='167' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_init' mangled-name='__kfifo_init' filepath='lib/kfifo.c' line='66' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_init'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='66' column='1'/>
+        <parameter type-id='eaa32e2f' name='buffer' filepath='lib/kfifo.c' line='66' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='lib/kfifo.c' line='67' column='1'/>
+        <parameter type-id='b59d7dce' name='esize' filepath='lib/kfifo.c' line='67' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_in' mangled-name='__kfifo_in' filepath='lib/kfifo.c' line='113' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_in'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='113' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/kfifo.c' line='114' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='lib/kfifo.c' line='114' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='__kfifo_from_user_r' mangled-name='__kfifo_from_user_r' filepath='lib/kfifo.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_from_user_r'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='499' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='lib/kfifo.c' line='499' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='lib/kfifo.c' line='500' column='1'/>
+        <parameter type-id='807869d3' name='copied' filepath='lib/kfifo.c' line='500' column='1'/>
+        <parameter type-id='b59d7dce' name='recsize' filepath='lib/kfifo.c' line='500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__kfifo_free' mangled-name='__kfifo_free' filepath='lib/kfifo.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_free'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='55' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__kfifo_alloc' mangled-name='__kfifo_alloc' filepath='lib/kfifo.c' line='24' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kfifo_alloc'>
+        <parameter type-id='f3207f74' name='fifo' filepath='lib/kfifo.c' line='24' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='lib/kfifo.c' line='24' column='1'/>
+        <parameter type-id='b59d7dce' name='esize' filepath='lib/kfifo.c' line='25' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/kfifo.c' line='25' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/kobject.c' language='LANG_C89'>
+      <function-decl name='kobject_put' mangled-name='kobject_put' filepath='lib/kobject.c' line='749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_put'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='749' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_init' mangled-name='kobject_init' filepath='lib/kobject.c' line='349' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_init'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='349' column='1'/>
+        <parameter type-id='c48b394e' name='ktype' filepath='lib/kobject.c' line='349' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_add' mangled-name='kobject_add' filepath='lib/kobject.c' line='426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_add'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='426' column='1'/>
+        <parameter type-id='d30bdc51' name='parent' filepath='lib/kobject.c' line='426' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/kobject.c' line='427' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_del' mangled-name='kobject_del' filepath='lib/kobject.c' line='631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_del'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='631' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kset_create_and_add' mangled-name='kset_create_and_add' filepath='lib/kobject.c' line='1008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kset_create_and_add'>
+        <parameter type-id='80f4b756' name='name' filepath='lib/kobject.c' line='1008' column='1'/>
+        <parameter type-id='86462700' name='uevent_ops' filepath='lib/kobject.c' line='1009' column='1'/>
+        <parameter type-id='d30bdc51' name='parent_kobj' filepath='lib/kobject.c' line='1010' column='1'/>
+        <return type-id='89b70200'/>
+      </function-decl>
+      <function-decl name='kobject_init_and_add' mangled-name='kobject_init_and_add' filepath='lib/kobject.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_init_and_add'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='464' column='1'/>
+        <parameter type-id='c48b394e' name='ktype' filepath='lib/kobject.c' line='464' column='1'/>
+        <parameter type-id='d30bdc51' name='parent' filepath='lib/kobject.c' line='465' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/kobject.c' line='465' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_get' mangled-name='kobject_get' filepath='lib/kobject.c' line='648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_get'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='648' column='1'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+      <function-decl name='kobject_create_and_add' mangled-name='kobject_create_and_add' filepath='lib/kobject.c' line='808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_create_and_add'>
+        <parameter type-id='80f4b756' name='name' filepath='lib/kobject.c' line='808' column='1'/>
+        <parameter type-id='d30bdc51' name='parent' filepath='lib/kobject.c' line='808' column='1'/>
+        <return type-id='d30bdc51'/>
+      </function-decl>
+      <function-decl name='kset_unregister' mangled-name='kset_unregister' filepath='lib/kobject.c' line='893' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kset_unregister'>
+        <parameter type-id='89b70200' name='k' filepath='lib/kobject.c' line='893' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kobject_get_path' mangled-name='kobject_get_path' filepath='lib/kobject.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_get_path'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject.c' line='171' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/kobject.c' line='171' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/kobject_uevent.c' language='LANG_C89'>
+      <enum-decl name='kobject_action' filepath='include/linux/kobject.h' line='54' column='1' id='7d635811'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='add_uevent_var' mangled-name='add_uevent_var' filepath='lib/kobject_uevent.c' line='654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_uevent_var'>
+        <parameter type-id='d9d65b21' name='env' filepath='lib/kobject_uevent.c' line='654' column='1'/>
+        <parameter type-id='80f4b756' name='format' filepath='lib/kobject_uevent.c' line='654' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_uevent_env' mangled-name='kobject_uevent_env' filepath='lib/kobject_uevent.c' line='457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent_env'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject_uevent.c' line='457' column='1'/>
+        <parameter type-id='7d635811' name='action' filepath='lib/kobject_uevent.c' line='457' column='1'/>
+        <parameter type-id='9b23c9ad' name='envp_ext' filepath='lib/kobject_uevent.c' line='458' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kobject_uevent' mangled-name='kobject_uevent' filepath='lib/kobject_uevent.c' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kobject_uevent'>
+        <parameter type-id='d30bdc51' name='kobj' filepath='lib/kobject_uevent.c' line='640' column='1'/>
+        <parameter type-id='7d635811' name='action' filepath='lib/kobject_uevent.c' line='640' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/kstrtox.c' language='LANG_C89'>
+      <pointer-type-def type-id='1eb56b1e' size-in-bits='64' id='8b97c2dc'/>
+      <pointer-type-def type-id='3a47d82b' size-in-bits='64' id='c0190993'/>
+      <pointer-type-def type-id='fdbf7a0f' size-in-bits='64' id='01b75fec'/>
+      <pointer-type-def type-id='1dc6a898' size-in-bits='64' id='26d4d46f'/>
+      <function-decl name='kstrtobool' mangled-name='kstrtobool' filepath='lib/kstrtox.c' line='339' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtobool'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='339' column='1'/>
+        <parameter type-id='d8e6b335' name='res' filepath='lib/kstrtox.c' line='339' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoint' mangled-name='kstrtoint' filepath='lib/kstrtox.c' line='255' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoint'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='255' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='255' column='1'/>
+        <parameter type-id='7292109c' name='res' filepath='lib/kstrtox.c' line='255' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoint_from_user' mangled-name='kstrtoint_from_user' filepath='lib/kstrtox.c' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoint_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='413' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='413' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='413' column='1'/>
+        <parameter type-id='7292109c' name='res' filepath='lib/kstrtox.c' line='413' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoll' mangled-name='kstrtoll' filepath='lib/kstrtox.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoll'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='152' column='1'/>
+        <parameter type-id='8b97c2dc' name='res' filepath='lib/kstrtox.c' line='152' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtouint' mangled-name='kstrtouint' filepath='lib/kstrtox.c' line='224' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtouint'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='224' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='224' column='1'/>
+        <parameter type-id='807869d3' name='res' filepath='lib/kstrtox.c' line='224' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoull_from_user' mangled-name='kstrtoull_from_user' filepath='lib/kstrtox.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoull_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='408' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='408' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='408' column='1'/>
+        <parameter type-id='c0190993' name='res' filepath='lib/kstrtox.c' line='408' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoull' mangled-name='kstrtoull' filepath='lib/kstrtox.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoull'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='128' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='128' column='1'/>
+        <parameter type-id='c0190993' name='res' filepath='lib/kstrtox.c' line='128' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtoul_from_user' mangled-name='kstrtoul_from_user' filepath='lib/kstrtox.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtoul_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <parameter type-id='1d2c2b85' name='res' filepath='lib/kstrtox.c' line='410' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtouint_from_user' mangled-name='kstrtouint_from_user' filepath='lib/kstrtox.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtouint_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='412' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='412' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='412' column='1'/>
+        <parameter type-id='807869d3' name='res' filepath='lib/kstrtox.c' line='412' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou8_from_user' mangled-name='kstrtou8_from_user' filepath='lib/kstrtox.c' line='416' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou8_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='416' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='416' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='416' column='1'/>
+        <parameter type-id='8bff8096' name='res' filepath='lib/kstrtox.c' line='416' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou8' mangled-name='kstrtou8' filepath='lib/kstrtox.c' line='300' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou8'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='300' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='300' column='1'/>
+        <parameter type-id='8bff8096' name='res' filepath='lib/kstrtox.c' line='300' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou16_from_user' mangled-name='kstrtou16_from_user' filepath='lib/kstrtox.c' line='414' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou16_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='414' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='414' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='414' column='1'/>
+        <parameter type-id='26d4d46f' name='res' filepath='lib/kstrtox.c' line='414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtou16' mangled-name='kstrtou16' filepath='lib/kstrtox.c' line='270' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtou16'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='270' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='270' column='1'/>
+        <parameter type-id='26d4d46f' name='res' filepath='lib/kstrtox.c' line='270' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtos8_from_user' mangled-name='kstrtos8_from_user' filepath='lib/kstrtox.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtos8_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='417' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='417' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='417' column='1'/>
+        <parameter type-id='01b75fec' name='res' filepath='lib/kstrtox.c' line='417' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtos8' mangled-name='kstrtos8' filepath='lib/kstrtox.c' line='315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtos8'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='315' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/kstrtox.c' line='315' column='1'/>
+        <parameter type-id='01b75fec' name='res' filepath='lib/kstrtox.c' line='315' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrtobool_from_user' mangled-name='kstrtobool_from_user' filepath='lib/kstrtox.c' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrtobool_from_user'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/kstrtox.c' line='381' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/kstrtox.c' line='381' column='1'/>
+        <parameter type-id='d8e6b335' name='res' filepath='lib/kstrtox.c' line='381' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/list_debug.c' language='LANG_C89'>
+      <function-decl name='__list_add_valid' mangled-name='__list_add_valid' filepath='lib/list_debug.c' line='20' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__list_add_valid'>
+        <parameter type-id='e84b031a' name='new' filepath='lib/list_debug.c' line='20' column='1'/>
+        <parameter type-id='e84b031a' name='prev' filepath='lib/list_debug.c' line='20' column='1'/>
+        <parameter type-id='e84b031a' name='next' filepath='lib/list_debug.c' line='21' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__list_del_entry_valid' mangled-name='__list_del_entry_valid' filepath='lib/list_debug.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__list_del_entry_valid'>
+        <parameter type-id='e84b031a' name='entry' filepath='lib/list_debug.c' line='38' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/list_sort.c' language='LANG_C89'>
+      <pointer-type-def type-id='8857030d' size-in-bits='64' id='120d5729'/>
+      <function-decl name='list_sort' mangled-name='list_sort' filepath='lib/list_sort.c' line='188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='list_sort'>
+        <parameter type-id='eaa32e2f' name='priv' filepath='lib/list_sort.c' line='188' column='1'/>
+        <parameter type-id='e84b031a' name='head' filepath='lib/list_sort.c' line='188' column='1'/>
+        <parameter type-id='120d5729' name='cmp' filepath='lib/list_sort.c' line='189' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8857030d'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='e84b031a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/llist.c' language='LANG_C89'>
+      <pointer-type-def type-id='77df194e' size-in-bits='64' id='b0222d74'/>
+      <function-decl name='llist_add_batch' mangled-name='llist_add_batch' filepath='lib/llist.c' line='26' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='llist_add_batch'>
+        <parameter type-id='023b769e' name='new_first' filepath='lib/llist.c' line='26' column='1'/>
+        <parameter type-id='023b769e' name='new_last' filepath='lib/llist.c' line='26' column='1'/>
+        <parameter type-id='b0222d74' name='head' filepath='lib/llist.c' line='27' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/lockref.c' language='LANG_C89'>
+      <pointer-type-def type-id='60efdfd3' size-in-bits='64' id='5bfdb453'/>
+      <function-decl name='lockref_get' mangled-name='lockref_get' filepath='lib/lockref.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lockref_get'>
+        <parameter type-id='5bfdb453' name='lockref' filepath='lib/lockref.c' line='44' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/lz4/lz4_decompress.c' language='LANG_C89'>
+      <function-decl name='LZ4_decompress_safe_partial' mangled-name='LZ4_decompress_safe_partial' filepath='lib/lz4/lz4_decompress.c' line='462' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='LZ4_decompress_safe_partial'>
+        <parameter type-id='80f4b756' name='src' filepath='lib/lz4/lz4_decompress.c' line='462' column='1'/>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/lz4/lz4_decompress.c' line='462' column='1'/>
+        <parameter type-id='95e97e5e' name='compressedSize' filepath='lib/lz4/lz4_decompress.c' line='463' column='1'/>
+        <parameter type-id='95e97e5e' name='targetOutputSize' filepath='lib/lz4/lz4_decompress.c' line='463' column='1'/>
+        <parameter type-id='95e97e5e' name='dstCapacity' filepath='lib/lz4/lz4_decompress.c' line='463' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/lzo/lzo1x_compress.c' language='LANG_C89'>
+      <function-decl name='lzorle1x_1_compress' mangled-name='lzorle1x_1_compress' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzorle1x_1_compress'>
+        <parameter type-id='354f7eb9' name='in' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1'/>
+        <parameter type-id='b59d7dce' name='in_len' filepath='lib/lzo/lzo1x_compress.c' line='388' column='1'/>
+        <parameter type-id='cf536864' name='out' filepath='lib/lzo/lzo1x_compress.c' line='389' column='1'/>
+        <parameter type-id='78c01427' name='out_len' filepath='lib/lzo/lzo1x_compress.c' line='389' column='1'/>
+        <parameter type-id='eaa32e2f' name='wrkmem' filepath='lib/lzo/lzo1x_compress.c' line='390' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='lzo1x_1_compress' mangled-name='lzo1x_1_compress' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzo1x_1_compress'>
+        <parameter type-id='354f7eb9' name='in' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1'/>
+        <parameter type-id='b59d7dce' name='in_len' filepath='lib/lzo/lzo1x_compress.c' line='381' column='1'/>
+        <parameter type-id='cf536864' name='out' filepath='lib/lzo/lzo1x_compress.c' line='382' column='1'/>
+        <parameter type-id='78c01427' name='out_len' filepath='lib/lzo/lzo1x_compress.c' line='382' column='1'/>
+        <parameter type-id='eaa32e2f' name='wrkmem' filepath='lib/lzo/lzo1x_compress.c' line='383' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/lzo/lzo1x_decompress_safe.c' language='LANG_C89'>
+      <function-decl name='lzo1x_decompress_safe' mangled-name='lzo1x_decompress_safe' filepath='lib/lzo/lzo1x_decompress_safe.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lzo1x_decompress_safe'>
+        <parameter type-id='354f7eb9' name='in' filepath='lib/lzo/lzo1x_decompress_safe.c' line='39' column='1'/>
+        <parameter type-id='b59d7dce' name='in_len' filepath='lib/lzo/lzo1x_decompress_safe.c' line='39' column='1'/>
+        <parameter type-id='cf536864' name='out' filepath='lib/lzo/lzo1x_decompress_safe.c' line='40' column='1'/>
+        <parameter type-id='78c01427' name='out_len' filepath='lib/lzo/lzo1x_decompress_safe.c' line='40' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/math/gcd.c' language='LANG_C89'>
+      <function-decl name='gcd' mangled-name='gcd' filepath='lib/math/gcd.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gcd'>
+        <parameter type-id='7359adad' name='a' filepath='lib/math/gcd.c' line='23' column='1'/>
+        <parameter type-id='7359adad' name='b' filepath='lib/math/gcd.c' line='23' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/math/int_pow.c' language='LANG_C89'>
+      <function-decl name='int_pow' mangled-name='int_pow' filepath='lib/math/int_pow.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='int_pow'>
+        <parameter type-id='91ce1af9' name='base' filepath='lib/math/int_pow.c' line='19' column='1'/>
+        <parameter type-id='f0981eeb' name='exp' filepath='lib/math/int_pow.c' line='19' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/math/rational.c' language='LANG_C89'>
+      <function-decl name='rational_best_approximation' mangled-name='rational_best_approximation' filepath='lib/math/rational.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rational_best_approximation'>
+        <parameter type-id='7359adad' name='given_numerator' filepath='lib/math/rational.c' line='32' column='1'/>
+        <parameter type-id='7359adad' name='given_denominator' filepath='lib/math/rational.c' line='32' column='1'/>
+        <parameter type-id='7359adad' name='max_numerator' filepath='lib/math/rational.c' line='33' column='1'/>
+        <parameter type-id='7359adad' name='max_denominator' filepath='lib/math/rational.c' line='33' column='1'/>
+        <parameter type-id='1d2c2b85' name='best_numerator' filepath='lib/math/rational.c' line='34' column='1'/>
+        <parameter type-id='1d2c2b85' name='best_denominator' filepath='lib/math/rational.c' line='34' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/memweight.c' language='LANG_C89'>
+      <function-decl name='memweight' mangled-name='memweight' filepath='lib/memweight.c' line='11' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memweight'>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='lib/memweight.c' line='11' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/memweight.c' line='11' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/net_utils.c' language='LANG_C89'>
+      <function-decl name='mac_pton' mangled-name='mac_pton' filepath='lib/net_utils.c' line='7' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mac_pton'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/net_utils.c' line='7' column='1'/>
+        <parameter type-id='8bff8096' name='mac' filepath='lib/net_utils.c' line='7' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/nlattr.c' language='LANG_C89'>
+      <function-decl name='nla_strlcpy' mangled-name='nla_strlcpy' filepath='lib/nlattr.c' line='516' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_strlcpy'>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/nlattr.c' line='516' column='1'/>
+        <parameter type-id='0f2a7ce5' name='nla' filepath='lib/nlattr.c' line='516' column='1'/>
+        <parameter type-id='b59d7dce' name='dstsize' filepath='lib/nlattr.c' line='516' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='nla_put_nohdr' mangled-name='nla_put_nohdr' filepath='lib/nlattr.c' line='876' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put_nohdr'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='lib/nlattr.c' line='876' column='1'/>
+        <parameter type-id='95e97e5e' name='attrlen' filepath='lib/nlattr.c' line='876' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/nlattr.c' line='876' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_put_64bit' mangled-name='nla_put_64bit' filepath='lib/nlattr.c' line='850' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put_64bit'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='lib/nlattr.c' line='850' column='1'/>
+        <parameter type-id='95e97e5e' name='attrtype' filepath='lib/nlattr.c' line='850' column='1'/>
+        <parameter type-id='95e97e5e' name='attrlen' filepath='lib/nlattr.c' line='850' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/nlattr.c' line='851' column='1'/>
+        <parameter type-id='95e97e5e' name='padattr' filepath='lib/nlattr.c' line='851' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_put' mangled-name='nla_put' filepath='lib/nlattr.c' line='829' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_put'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='lib/nlattr.c' line='829' column='1'/>
+        <parameter type-id='95e97e5e' name='attrtype' filepath='lib/nlattr.c' line='829' column='1'/>
+        <parameter type-id='95e97e5e' name='attrlen' filepath='lib/nlattr.c' line='829' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='lib/nlattr.c' line='829' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nla_memcpy' mangled-name='nla_memcpy' filepath='lib/nlattr.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nla_memcpy'>
+        <parameter type-id='eaa32e2f' name='dest' filepath='lib/nlattr.c' line='570' column='1'/>
+        <parameter type-id='0f2a7ce5' name='src' filepath='lib/nlattr.c' line='570' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='lib/nlattr.c' line='570' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__nla_parse' mangled-name='__nla_parse' filepath='lib/nlattr.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__nla_parse'>
+        <parameter type-id='30864cdc' name='tb' filepath='lib/nlattr.c' line='473' column='1'/>
+        <parameter type-id='95e97e5e' name='maxtype' filepath='lib/nlattr.c' line='473' column='1'/>
+        <parameter type-id='0f2a7ce5' name='head' filepath='lib/nlattr.c' line='474' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/nlattr.c' line='474' column='1'/>
+        <parameter type-id='109cdb66' name='policy' filepath='lib/nlattr.c' line='475' column='1'/>
+        <parameter type-id='f0981eeb' name='validate' filepath='lib/nlattr.c' line='475' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='lib/nlattr.c' line='476' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/once.c' language='LANG_C89'>
+      <class-decl name='static_key_true' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/jump_label.h' line='346' column='1' id='49a0ad34'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='00205383' visibility='default' filepath='include/linux/jump_label.h' line='347' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='49a0ad34' size-in-bits='64' id='ac6963b2'/>
+      <function-decl name='__do_once_start' mangled-name='__do_once_start' filepath='lib/once.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__do_once_start'>
+        <parameter type-id='d8e6b335' name='done' filepath='lib/once.c' line='37' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='lib/once.c' line='37' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__do_once_done' mangled-name='__do_once_done' filepath='lib/once.c' line='55' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__do_once_done'>
+        <parameter type-id='d8e6b335' name='done' filepath='lib/once.c' line='55' column='1'/>
+        <parameter type-id='ac6963b2' name='once_key' filepath='lib/once.c' line='55' column='1'/>
+        <parameter type-id='1d2c2b85' name='flags' filepath='lib/once.c' line='56' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/parser.c' language='LANG_C89'>
+      <class-decl name='match_token' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/parser.h' line='14' column='1' id='4fb0e160'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='95e97e5e' visibility='default' filepath='include/linux/parser.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='80f4b756' visibility='default' filepath='include/linux/parser.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='substring_t' type-id='52365588' filepath='include/linux/parser.h' line='28' column='1' id='9aadee6c'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='128' is-struct='yes' is-anonymous='yes' naming-typedef-id='9aadee6c' visibility='default' filepath='include/linux/parser.h' line='25' column='1' id='52365588'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='from' type-id='26a90f95' visibility='default' filepath='include/linux/parser.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='to' type-id='26a90f95' visibility='default' filepath='include/linux/parser.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='4fb0e160' const='yes' id='ff7ec25b'/>
+      <pointer-type-def type-id='ff7ec25b' size-in-bits='64' id='a58c17e3'/>
+      <qualified-type-def type-id='9aadee6c' const='yes' id='69fa32fc'/>
+      <pointer-type-def type-id='69fa32fc' size-in-bits='64' id='aade06e2'/>
+      <pointer-type-def type-id='9aadee6c' size-in-bits='64' id='4d03589b'/>
+      <function-decl name='match_token' mangled-name='match_token' filepath='lib/parser.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_token'>
+        <parameter type-id='26a90f95' name='s' filepath='lib/parser.c' line='105' column='1'/>
+        <parameter type-id='a58c17e3' name='table' filepath='lib/parser.c' line='105' column='1'/>
+        <parameter type-id='4d03589b' name='args' filepath='lib/parser.c' line='105' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='match_strdup' mangled-name='match_strdup' filepath='lib/parser.c' line='320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_strdup'>
+        <parameter type-id='aade06e2' name='s' filepath='lib/parser.c' line='320' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='match_octal' mangled-name='match_octal' filepath='lib/parser.c' line='217' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_octal'>
+        <parameter type-id='4d03589b' name='s' filepath='lib/parser.c' line='217' column='1'/>
+        <parameter type-id='7292109c' name='result' filepath='lib/parser.c' line='217' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='match_int' mangled-name='match_int' filepath='lib/parser.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_int'>
+        <parameter type-id='4d03589b' name='s' filepath='lib/parser.c' line='185' column='1'/>
+        <parameter type-id='7292109c' name='result' filepath='lib/parser.c' line='185' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/pci_iomap.c' language='LANG_C89'>
+      <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='85196e3f' name='dev' filepath='lib/pci_iomap.c' line='28' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='lib/pci_iomap.c' line='29' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='lib/pci_iomap.c' line='30' column='1'/>
+        <parameter type-id='7359adad' name='maxlen' filepath='lib/pci_iomap.c' line='31' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='pci_iomap' mangled-name='pci_iomap' filepath='lib/pci_iomap.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pci_iomap'>
+        <parameter type-id='85196e3f' name='dev' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <parameter type-id='95e97e5e' name='bar' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <parameter type-id='7359adad' name='maxlen' filepath='lib/pci_iomap.c' line='111' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/percpu-refcount.c' language='LANG_C89'>
+      <function-decl name='percpu_ref_switch_to_percpu' mangled-name='percpu_ref_switch_to_percpu' filepath='lib/percpu-refcount.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_switch_to_percpu'>
+        <parameter type-id='60219102' name='ref' filepath='lib/percpu-refcount.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='percpu_ref_switch_to_atomic_sync' mangled-name='percpu_ref_switch_to_atomic_sync' filepath='lib/percpu-refcount.c' line='283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_switch_to_atomic_sync'>
+        <parameter type-id='60219102' name='ref' filepath='lib/percpu-refcount.c' line='283' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='percpu_ref_init' mangled-name='percpu_ref_init' filepath='lib/percpu-refcount.c' line='60' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_init'>
+        <parameter type-id='60219102' name='ref' filepath='lib/percpu-refcount.c' line='60' column='1'/>
+        <parameter type-id='903b12fe' name='release' filepath='lib/percpu-refcount.c' line='60' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='lib/percpu-refcount.c' line='61' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/percpu-refcount.c' line='61' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='percpu_ref_exit' mangled-name='percpu_ref_exit' filepath='lib/percpu-refcount.c' line='105' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='percpu_ref_exit'>
+        <parameter type-id='60219102' name='ref' filepath='lib/percpu-refcount.c' line='105' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/radix-tree.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='7359adad' size-in-bits='192' id='aa5bd681'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='4096' id='56f066f9'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <class-decl name='radix_tree_iter' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/radix-tree.h' line='94' column='1' id='c7ead0f9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='next_index' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tags' type-id='7359adad' visibility='default' filepath='include/linux/radix-tree.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='node' type-id='83f45767' visibility='default' filepath='include/linux/radix-tree.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xa_node' size-in-bits='4608' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='1087' column='1' id='9a218d2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1088' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='offset' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='nr_values' type-id='002ac4a6' visibility='default' filepath='include/linux/xarray.h' line='1091' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='parent' type-id='83f45767' visibility='default' filepath='include/linux/xarray.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='array' type-id='60075f2a' visibility='default' filepath='include/linux/xarray.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='' type-id='2db4cfe9' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='slots' type-id='56f066f9' visibility='default' filepath='include/linux/xarray.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='' type-id='65594137' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1094' column='1' id='2db4cfe9'>
+        <data-member access='public'>
+          <var-decl name='private_list' type-id='72f469ec' visibility='default' filepath='include/linux/xarray.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/linux/xarray.h' line='1096' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/linux/xarray.h' line='1099' column='1' id='65594137'>
+        <data-member access='public'>
+          <var-decl name='tags' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1100' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='marks' type-id='aa5bd681' visibility='default' filepath='include/linux/xarray.h' line='1101' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='d39738ac' const='yes' id='9bc083a1'/>
+      <pointer-type-def type-id='9bc083a1' size-in-bits='64' id='bb0f13d1'/>
+      <pointer-type-def type-id='c7ead0f9' size-in-bits='64' id='0cbbabe1'/>
+      <pointer-type-def type-id='9a218d2f' size-in-bits='64' id='83f45767'/>
+      <pointer-type-def type-id='d39738ac' size-in-bits='64' id='60075f2a'/>
+      <function-decl name='radix_tree_next_chunk' mangled-name='radix_tree_next_chunk' filepath='lib/radix-tree.c' line='1163' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_next_chunk'>
+        <parameter type-id='bb0f13d1' name='root' filepath='lib/radix-tree.c' line='1163' column='1'/>
+        <parameter type-id='0cbbabe1' name='iter' filepath='lib/radix-tree.c' line='1164' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='lib/radix-tree.c' line='1164' column='1'/>
+        <return type-id='63e171df'/>
+      </function-decl>
+      <function-decl name='radix_tree_insert' mangled-name='radix_tree_insert' filepath='lib/radix-tree.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_insert'>
+        <parameter type-id='60075f2a' name='root' filepath='lib/radix-tree.c' line='712' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/radix-tree.c' line='712' column='1'/>
+        <parameter type-id='eaa32e2f' name='item' filepath='lib/radix-tree.c' line='713' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='radix_tree_lookup' mangled-name='radix_tree_lookup' filepath='lib/radix-tree.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_lookup'>
+        <parameter type-id='bb0f13d1' name='root' filepath='lib/radix-tree.c' line='826' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/radix-tree.c' line='826' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='idr_destroy' mangled-name='idr_destroy' filepath='lib/radix-tree.c' line='1568' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_destroy'>
+        <parameter type-id='301185b4' name='idr' filepath='lib/radix-tree.c' line='1568' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='radix_tree_gang_lookup' mangled-name='radix_tree_gang_lookup' filepath='lib/radix-tree.c' line='1271' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_gang_lookup'>
+        <parameter type-id='bb0f13d1' name='root' filepath='lib/radix-tree.c' line='1271' column='1'/>
+        <parameter type-id='63e171df' name='results' filepath='lib/radix-tree.c' line='1271' column='1'/>
+        <parameter type-id='7359adad' name='first_index' filepath='lib/radix-tree.c' line='1272' column='1'/>
+        <parameter type-id='f0981eeb' name='max_items' filepath='lib/radix-tree.c' line='1272' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='radix_tree_preload' mangled-name='radix_tree_preload' filepath='lib/radix-tree.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_preload'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/radix-tree.c' line='374' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='radix_tree_maybe_preload' mangled-name='radix_tree_maybe_preload' filepath='lib/radix-tree.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_maybe_preload'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/radix-tree.c' line='387' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='radix_tree_iter_delete' mangled-name='radix_tree_iter_delete' filepath='lib/radix-tree.c' line='1403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_iter_delete'>
+        <parameter type-id='60075f2a' name='root' filepath='lib/radix-tree.c' line='1403' column='1'/>
+        <parameter type-id='0cbbabe1' name='iter' filepath='lib/radix-tree.c' line='1404' column='1'/>
+        <parameter type-id='63e171df' name='slot' filepath='lib/radix-tree.c' line='1404' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='radix_tree_delete' mangled-name='radix_tree_delete' filepath='lib/radix-tree.c' line='1454' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='radix_tree_delete'>
+        <parameter type-id='60075f2a' name='root' filepath='lib/radix-tree.c' line='1454' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/radix-tree.c' line='1454' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='idr_preload' mangled-name='idr_preload' filepath='lib/radix-tree.c' line='1478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='idr_preload'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/radix-tree.c' line='1478' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/random32.c' language='LANG_C89'>
+      <function-decl name='prandom_u32' mangled-name='prandom_u32' filepath='lib/random32.c' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='prandom_u32'>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/ratelimit.c' language='LANG_C89'>
+      <pointer-type-def type-id='8b829a50' size-in-bits='64' id='ccb97366'/>
+      <function-decl name='___ratelimit' mangled-name='___ratelimit' filepath='lib/ratelimit.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='___ratelimit'>
+        <parameter type-id='ccb97366' name='rs' filepath='lib/ratelimit.c' line='27' column='1'/>
+        <parameter type-id='80f4b756' name='func' filepath='lib/ratelimit.c' line='27' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/rbtree.c' language='LANG_C89'>
+      <qualified-type-def type-id='2a8a6332' const='yes' id='8552664d'/>
+      <pointer-type-def type-id='8552664d' size-in-bits='64' id='47b73425'/>
+      <qualified-type-def type-id='dec44472' const='yes' id='f213bd85'/>
+      <pointer-type-def type-id='f213bd85' size-in-bits='64' id='c4139a7d'/>
+      <pointer-type-def type-id='dec44472' size-in-bits='64' id='c5bcc2c0'/>
+      <function-decl name='rb_erase' mangled-name='rb_erase' filepath='lib/rbtree.c' line='440' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_erase'>
+        <parameter type-id='e6532500' name='node' filepath='lib/rbtree.c' line='440' column='1'/>
+        <parameter type-id='c5bcc2c0' name='root' filepath='lib/rbtree.c' line='440' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_insert_color' mangled-name='rb_insert_color' filepath='lib/rbtree.c' line='434' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_insert_color'>
+        <parameter type-id='e6532500' name='node' filepath='lib/rbtree.c' line='434' column='1'/>
+        <parameter type-id='c5bcc2c0' name='root' filepath='lib/rbtree.c' line='434' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_replace_node' mangled-name='rb_replace_node' filepath='lib/rbtree.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_replace_node'>
+        <parameter type-id='e6532500' name='victim' filepath='lib/rbtree.c' line='553' column='1'/>
+        <parameter type-id='e6532500' name='new' filepath='lib/rbtree.c' line='553' column='1'/>
+        <parameter type-id='c5bcc2c0' name='root' filepath='lib/rbtree.c' line='554' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rb_prev' mangled-name='rb_prev' filepath='lib/rbtree.c' line='524' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_prev'>
+        <parameter type-id='47b73425' name='node' filepath='lib/rbtree.c' line='524' column='1'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='rb_next' mangled-name='rb_next' filepath='lib/rbtree.c' line='492' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_next'>
+        <parameter type-id='47b73425' name='node' filepath='lib/rbtree.c' line='492' column='1'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='rb_last' mangled-name='rb_last' filepath='lib/rbtree.c' line='479' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_last'>
+        <parameter type-id='c4139a7d' name='root' filepath='lib/rbtree.c' line='479' column='1'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+      <function-decl name='rb_first' mangled-name='rb_first' filepath='lib/rbtree.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rb_first'>
+        <parameter type-id='c4139a7d' name='root' filepath='lib/rbtree.c' line='466' column='1'/>
+        <return type-id='e6532500'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/refcount.c' language='LANG_C89'>
+      <pointer-type-def type-id='64615833' size-in-bits='64' id='35a0b4f8'/>
+      <function-decl name='refcount_inc_not_zero_checked' mangled-name='refcount_inc_not_zero_checked' filepath='lib/refcount.c' line='121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_not_zero_checked'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='121' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='refcount_inc_checked' mangled-name='refcount_inc_checked' filepath='lib/refcount.c' line='154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_inc_checked'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='154' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='refcount_dec_checked' mangled-name='refcount_dec_checked' filepath='lib/refcount.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_checked'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='234' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='refcount_dec_not_one' mangled-name='refcount_dec_not_one' filepath='lib/refcount.c' line='275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_not_one'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='275' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_lock' mangled-name='refcount_dec_and_lock' filepath='lib/refcount.c' line='345' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_lock'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='345' column='1'/>
+        <parameter type-id='cff2d845' name='lock' filepath='lib/refcount.c' line='345' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_test_checked' mangled-name='refcount_dec_and_test_checked' filepath='lib/refcount.c' line='218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_test_checked'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='218' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='refcount_dec_and_mutex_lock' mangled-name='refcount_dec_and_mutex_lock' filepath='lib/refcount.c' line='314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='refcount_dec_and_mutex_lock'>
+        <parameter type-id='35a0b4f8' name='r' filepath='lib/refcount.c' line='314' column='1'/>
+        <parameter type-id='e0ea832a' name='lock' filepath='lib/refcount.c' line='314' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/rhashtable.c' language='LANG_C89'>
+      <qualified-type-def type-id='984972f4' const='yes' id='3944ca69'/>
+      <pointer-type-def type-id='3944ca69' size-in-bits='64' id='6a4a6779'/>
+      <qualified-type-def type-id='e4c11782' const='yes' id='83967635'/>
+      <pointer-type-def type-id='83967635' size-in-bits='64' id='44dbf2cd'/>
+      <pointer-type-def type-id='0f8b1896' size-in-bits='64' id='33f7eff4'/>
+      <function-decl name='rhashtable_init' mangled-name='rhashtable_init' filepath='lib/rhashtable.c' line='1008' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_init'>
+        <parameter type-id='e6726ce3' name='ht' filepath='lib/rhashtable.c' line='1008' column='1'/>
+        <parameter type-id='44dbf2cd' name='params' filepath='lib/rhashtable.c' line='1009' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rht_bucket_nested' mangled-name='rht_bucket_nested' filepath='lib/rhashtable.c' line='1196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rht_bucket_nested'>
+        <parameter type-id='6a4a6779' name='tbl' filepath='lib/rhashtable.c' line='1196' column='1'/>
+        <parameter type-id='f0981eeb' name='hash' filepath='lib/rhashtable.c' line='1197' column='1'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <function-decl name='__rht_bucket_nested' mangled-name='__rht_bucket_nested' filepath='lib/rhashtable.c' line='1167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__rht_bucket_nested'>
+        <parameter type-id='6a4a6779' name='tbl' filepath='lib/rhashtable.c' line='1167' column='1'/>
+        <parameter type-id='f0981eeb' name='hash' filepath='lib/rhashtable.c' line='1168' column='1'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <function-decl name='rht_bucket_nested_insert' mangled-name='rht_bucket_nested_insert' filepath='lib/rhashtable.c' line='1207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rht_bucket_nested_insert'>
+        <parameter type-id='e6726ce3' name='ht' filepath='lib/rhashtable.c' line='1207' column='1'/>
+        <parameter type-id='35e7a722' name='tbl' filepath='lib/rhashtable.c' line='1208' column='1'/>
+        <parameter type-id='f0981eeb' name='hash' filepath='lib/rhashtable.c' line='1209' column='1'/>
+        <return type-id='33f7eff4'/>
+      </function-decl>
+      <function-decl name='rhashtable_insert_slow' mangled-name='rhashtable_insert_slow' filepath='lib/rhashtable.c' line='622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_insert_slow'>
+        <parameter type-id='e6726ce3' name='ht' filepath='lib/rhashtable.c' line='622' column='1'/>
+        <parameter type-id='eaa32e2f' name='key' filepath='lib/rhashtable.c' line='622' column='1'/>
+        <parameter type-id='3cc8739a' name='obj' filepath='lib/rhashtable.c' line='623' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='rhashtable_destroy' mangled-name='rhashtable_destroy' filepath='lib/rhashtable.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rhashtable_destroy'>
+        <parameter type-id='e6726ce3' name='ht' filepath='lib/rhashtable.c' line='1161' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='491' column='1' id='52378ac1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page' type-id='02f11ed4' visibility='default' filepath='include/linux/scatterlist.h' line='493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/linux/scatterlist.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='consumed' type-id='b59d7dce' visibility='default' filepath='include/linux/scatterlist.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='piter' type-id='78e3e1d2' visibility='default' filepath='include/linux/scatterlist.h' line='497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='__offset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='__remaining' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='__flags' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='502' 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='366' column='1' id='78e3e1d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sg' type-id='bf3ef905' visibility='default' filepath='include/linux/scatterlist.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sg_pgoffset' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='__nents' type-id='f0981eeb' visibility='default' filepath='include/linux/scatterlist.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__pg_advance' type-id='95e97e5e' visibility='default' filepath='include/linux/scatterlist.h' line='372' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='off_t' type-id='8dda407a' filepath='include/linux/types.h' line='21' column='1' id='ad707ada'/>
+      <typedef-decl name='__kernel_off_t' type-id='6a11bd61' filepath='include/uapi/asm-generic/posix_types.h' line='87' column='1' id='8dda407a'/>
+      <pointer-type-def type-id='52378ac1' size-in-bits='64' id='a462f2f9'/>
+      <pointer-type-def type-id='78e3e1d2' size-in-bits='64' id='06f723f0'/>
+      <function-decl name='sg_alloc_table' mangled-name='sg_alloc_table' filepath='lib/scatterlist.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table'>
+        <parameter type-id='4adb0e6a' name='table' filepath='lib/scatterlist.c' line='355' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='355' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/scatterlist.c' line='355' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_miter_next' mangled-name='sg_miter_next' filepath='lib/scatterlist.c' line='763' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_next'>
+        <parameter type-id='a462f2f9' name='miter' filepath='lib/scatterlist.c' line='763' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sg_miter_stop' mangled-name='sg_miter_stop' filepath='lib/scatterlist.c' line='800' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_stop'>
+        <parameter type-id='a462f2f9' name='miter' filepath='lib/scatterlist.c' line='800' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_pcopy_to_buffer' mangled-name='sg_pcopy_to_buffer' filepath='lib/scatterlist.c' line='939' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_pcopy_to_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='939' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='939' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <parameter type-id='ad707ada' name='skip' filepath='lib/scatterlist.c' line='940' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_miter_skip' mangled-name='sg_miter_skip' filepath='lib/scatterlist.c' line='726' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_skip'>
+        <parameter type-id='a462f2f9' name='miter' filepath='lib/scatterlist.c' line='726' column='1'/>
+        <parameter type-id='ad707ada' name='offset' filepath='lib/scatterlist.c' line='726' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='sg_pcopy_from_buffer' mangled-name='sg_pcopy_from_buffer' filepath='lib/scatterlist.c' line='921' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_pcopy_from_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='921' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='921' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <parameter type-id='ad707ada' name='skip' filepath='lib/scatterlist.c' line='922' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_next' mangled-name='sg_next' filepath='lib/scatterlist.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_next'>
+        <parameter type-id='bf3ef905' name='sg' filepath='lib/scatterlist.c' line='23' column='1'/>
+        <return type-id='bf3ef905'/>
+      </function-decl>
+      <function-decl name='sg_nents_for_len' mangled-name='sg_nents_for_len' filepath='lib/scatterlist.c' line='68' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents_for_len'>
+        <parameter type-id='bf3ef905' name='sg' filepath='lib/scatterlist.c' line='68' column='1'/>
+        <parameter type-id='91ce1af9' name='len' filepath='lib/scatterlist.c' line='68' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_nents' mangled-name='sg_nents' filepath='lib/scatterlist.c' line='45' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_nents'>
+        <parameter type-id='bf3ef905' name='sg' filepath='lib/scatterlist.c' line='45' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sg_miter_start' mangled-name='sg_miter_start' filepath='lib/scatterlist.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_miter_start'>
+        <parameter type-id='a462f2f9' name='miter' filepath='lib/scatterlist.c' line='674' column='1'/>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='674' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='675' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='lib/scatterlist.c' line='675' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_init_table' mangled-name='sg_init_table' filepath='lib/scatterlist.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_table'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='124' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='124' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_init_one' mangled-name='sg_init_one' filepath='lib/scatterlist.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_init_one'>
+        <parameter type-id='bf3ef905' name='sg' filepath='lib/scatterlist.c' line='138' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='138' column='1'/>
+        <parameter type-id='f0981eeb' name='buflen' filepath='lib/scatterlist.c' line='138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_free_table' mangled-name='sg_free_table' filepath='lib/scatterlist.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_free_table'>
+        <parameter type-id='4adb0e6a' name='table' filepath='lib/scatterlist.c' line='239' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sg_copy_to_buffer' mangled-name='sg_copy_to_buffer' filepath='lib/scatterlist.c' line='903' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_to_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='903' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='903' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='904' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='904' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_copy_from_buffer' mangled-name='sg_copy_from_buffer' filepath='lib/scatterlist.c' line='886' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_copy_from_buffer'>
+        <parameter type-id='bf3ef905' name='sgl' filepath='lib/scatterlist.c' line='886' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='886' column='1'/>
+        <parameter type-id='eaa32e2f' name='buf' filepath='lib/scatterlist.c' line='887' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='lib/scatterlist.c' line='887' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='sg_alloc_table_from_pages' mangled-name='sg_alloc_table_from_pages' filepath='lib/scatterlist.c' line='464' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sg_alloc_table_from_pages'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='lib/scatterlist.c' line='464' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='lib/scatterlist.c' line='464' column='1'/>
+        <parameter type-id='f0981eeb' name='n_pages' filepath='lib/scatterlist.c' line='465' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='lib/scatterlist.c' line='465' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/scatterlist.c' line='466' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/scatterlist.c' line='466' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sg_alloc_table_from_pages' mangled-name='__sg_alloc_table_from_pages' filepath='lib/scatterlist.c' line='389' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_alloc_table_from_pages'>
+        <parameter type-id='4adb0e6a' name='sgt' filepath='lib/scatterlist.c' line='389' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='lib/scatterlist.c' line='389' column='1'/>
+        <parameter type-id='f0981eeb' name='n_pages' filepath='lib/scatterlist.c' line='390' column='1'/>
+        <parameter type-id='f0981eeb' name='offset' filepath='lib/scatterlist.c' line='390' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='lib/scatterlist.c' line='391' column='1'/>
+        <parameter type-id='f0981eeb' name='max_segment' filepath='lib/scatterlist.c' line='391' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='lib/scatterlist.c' line='392' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sg_page_iter_start' mangled-name='__sg_page_iter_start' filepath='lib/scatterlist.c' line='600' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_page_iter_start'>
+        <parameter type-id='06f723f0' name='piter' filepath='lib/scatterlist.c' line='600' column='1'/>
+        <parameter type-id='bf3ef905' name='sglist' filepath='lib/scatterlist.c' line='601' column='1'/>
+        <parameter type-id='f0981eeb' name='nents' filepath='lib/scatterlist.c' line='601' column='1'/>
+        <parameter type-id='7359adad' name='pgoffset' filepath='lib/scatterlist.c' line='602' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__sg_page_iter_next' mangled-name='__sg_page_iter_next' filepath='lib/scatterlist.c' line='617' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sg_page_iter_next'>
+        <parameter type-id='06f723f0' name='piter' filepath='lib/scatterlist.c' line='617' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/string.c' language='LANG_C89'>
+      <function-decl name='strsep' mangled-name='strsep' filepath='lib/string.c' line='659' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strsep'>
+        <parameter type-id='9b23c9ad' name='s' filepath='lib/string.c' line='659' column='1'/>
+        <parameter type-id='80f4b756' name='ct' filepath='lib/string.c' line='659' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strcasecmp' mangled-name='strcasecmp' filepath='lib/string.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcasecmp'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='69' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bcmp' mangled-name='bcmp' filepath='lib/string.c' line='929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bcmp'>
+        <parameter type-id='eaa32e2f' name='a' filepath='lib/string.c' line='929' column='1'/>
+        <parameter type-id='eaa32e2f' name='b' filepath='lib/string.c' line='929' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='929' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='memchr_inv' mangled-name='memchr_inv' filepath='lib/string.c' line='1054' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memchr_inv'>
+        <parameter type-id='eaa32e2f' name='start' filepath='lib/string.c' line='1054' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='lib/string.c' line='1054' column='1'/>
+        <parameter type-id='b59d7dce' name='bytes' filepath='lib/string.c' line='1054' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='strlcat' mangled-name='strlcat' filepath='lib/string.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='355' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='355' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='355' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strim' mangled-name='strim' filepath='lib/string.c' line='524' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strim'>
+        <parameter type-id='26a90f95' name='s' filepath='lib/string.c' line='524' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='sysfs_streq' mangled-name='sysfs_streq' filepath='lib/string.c' line='686' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sysfs_streq'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='686' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='686' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='strscpy' mangled-name='strscpy' filepath='lib/string.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strscpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='180' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='180' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='180' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='strreplace' mangled-name='strreplace' filepath='lib/string.c' line='1108' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strreplace'>
+        <parameter type-id='26a90f95' name='s' filepath='lib/string.c' line='1108' column='1'/>
+        <parameter type-id='a84c031d' name='old' filepath='lib/string.c' line='1108' column='1'/>
+        <parameter type-id='a84c031d' name='new' filepath='lib/string.c' line='1108' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strpbrk' mangled-name='strpbrk' filepath='lib/string.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strpbrk'>
+        <parameter type-id='80f4b756' name='cs' filepath='lib/string.c' line='632' column='1'/>
+        <parameter type-id='80f4b756' name='ct' filepath='lib/string.c' line='632' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strnstr' mangled-name='strnstr' filepath='lib/string.c' line='993' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strnstr'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='993' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='993' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='993' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncpy' mangled-name='strncpy' filepath='lib/string.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='114' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='114' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='114' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strnchr' mangled-name='strnchr' filepath='lib/string.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strnchr'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/string.c' line='489' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='489' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='lib/string.c' line='489' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncat' mangled-name='strncat' filepath='lib/string.c' line='329' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='329' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='329' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='329' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strncasecmp' mangled-name='strncasecmp' filepath='lib/string.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncasecmp'>
+        <parameter type-id='80f4b756' name='s1' filepath='lib/string.c' line='43' column='1'/>
+        <parameter type-id='80f4b756' name='s2' filepath='lib/string.c' line='43' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='lib/string.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='strlcpy' mangled-name='strlcpy' filepath='lib/string.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strlcpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='141' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='141' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/string.c' line='141' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strcspn' mangled-name='strcspn' filepath='lib/string.c' line='608' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcspn'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/string.c' line='608' column='1'/>
+        <parameter type-id='80f4b756' name='reject' filepath='lib/string.c' line='608' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='strcpy' mangled-name='strcpy' filepath='lib/string.c' line='89' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcpy'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='89' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='89' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strchrnul' mangled-name='strchrnul' filepath='lib/string.c' line='452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strchrnul'>
+        <parameter type-id='80f4b756' name='s' filepath='lib/string.c' line='452' column='1'/>
+        <parameter type-id='95e97e5e' name='c' filepath='lib/string.c' line='452' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='strcat' mangled-name='strcat' filepath='lib/string.c' line='306' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strcat'>
+        <parameter type-id='26a90f95' name='dest' filepath='lib/string.c' line='306' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/string.c' line='306' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='skip_spaces' mangled-name='skip_spaces' filepath='lib/string.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skip_spaces'>
+        <parameter type-id='80f4b756' name='str' filepath='lib/string.c' line='508' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='memset64' mangled-name='memset64' filepath='lib/string.c' line='830' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memset64'>
+        <parameter type-id='5d6479ae' name='s' filepath='lib/string.c' line='830' column='1'/>
+        <parameter type-id='9c313c2d' name='v' filepath='lib/string.c' line='830' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='830' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='memset32' mangled-name='memset32' filepath='lib/string.c' line='808' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memset32'>
+        <parameter type-id='90421557' name='s' filepath='lib/string.c' line='808' column='1'/>
+        <parameter type-id='8f92235e' name='v' filepath='lib/string.c' line='808' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='lib/string.c' line='808' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='match_string' mangled-name='match_string' filepath='lib/string.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='match_string'>
+        <parameter type-id='13956559' name='array' filepath='lib/string.c' line='712' column='1'/>
+        <parameter type-id='b59d7dce' name='n' filepath='lib/string.c' line='712' column='1'/>
+        <parameter type-id='80f4b756' name='string' filepath='lib/string.c' line='712' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sysfs_match_string' mangled-name='__sysfs_match_string' filepath='lib/string.c' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sysfs_match_string'>
+        <parameter type-id='13956559' name='array' filepath='lib/string.c' line='738' column='1'/>
+        <parameter type-id='b59d7dce' name='n' filepath='lib/string.c' line='738' column='1'/>
+        <parameter type-id='80f4b756' name='str' filepath='lib/string.c' line='738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='62b4b863'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STRING_UNITS_10' value='0'/>
+        <enumerator name='STRING_UNITS_2' value='1'/>
+      </enum-decl>
+      <qualified-type-def type-id='62b4b863' const='yes' id='5a685f5f'/>
+      <function-decl name='string_get_size' mangled-name='string_get_size' filepath='lib/string_helpers.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='string_get_size'>
+        <parameter type-id='91ce1af9' name='size' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='91ce1af9' name='blk_size' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='5a685f5f' name='units' filepath='lib/string_helpers.c' line='34' column='1'/>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/string_helpers.c' line='35' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='lib/string_helpers.c' line='35' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='string_unescape' mangled-name='string_unescape' filepath='lib/string_helpers.c' line='268' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='string_unescape'>
+        <parameter type-id='26a90f95' name='src' filepath='lib/string_helpers.c' line='268' column='1'/>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/string_helpers.c' line='268' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/string_helpers.c' line='268' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='lib/string_helpers.c' line='268' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kstrdup_quotable_cmdline' mangled-name='kstrdup_quotable_cmdline' filepath='lib/string_helpers.c' line='597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup_quotable_cmdline'>
+        <parameter type-id='f23e2572' name='task' filepath='lib/string_helpers.c' line='597' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/string_helpers.c' line='597' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/strncpy_from_user.c' language='LANG_C89'>
+      <function-decl name='strncpy_from_user' mangled-name='strncpy_from_user' filepath='lib/strncpy_from_user.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='strncpy_from_user'>
+        <parameter type-id='26a90f95' name='dst' filepath='lib/strncpy_from_user.c' line='97' column='1'/>
+        <parameter type-id='80f4b756' name='src' filepath='lib/strncpy_from_user.c' line='97' column='1'/>
+        <parameter type-id='bd54fe1a' name='count' filepath='lib/strncpy_from_user.c' line='97' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/uuid.c' language='LANG_C89'>
+      <qualified-type-def type-id='ec55eb74' const='yes' id='21109a44'/>
+      <var-decl name='uuid_null' type-id='21109a44' mangled-name='uuid_null' visibility='default' filepath='lib/uuid.c' line='18' column='1' elf-symbol-id='uuid_null'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/vsprintf.c' language='LANG_C89'>
+      <function-decl name='snprintf' mangled-name='snprintf' filepath='lib/vsprintf.c' line='2720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2720' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2720' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2720' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='simple_strtoul' mangled-name='simple_strtoul' filepath='lib/vsprintf.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_strtoul'>
+        <parameter type-id='80f4b756' name='cp' filepath='lib/vsprintf.c' line='100' column='1'/>
+        <parameter type-id='9b23c9ad' name='endp' filepath='lib/vsprintf.c' line='100' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/vsprintf.c' line='100' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='simple_strtol' mangled-name='simple_strtol' filepath='lib/vsprintf.c' line='114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='simple_strtol'>
+        <parameter type-id='80f4b756' name='cp' filepath='lib/vsprintf.c' line='114' column='1'/>
+        <parameter type-id='9b23c9ad' name='endp' filepath='lib/vsprintf.c' line='114' column='1'/>
+        <parameter type-id='f0981eeb' name='base' filepath='lib/vsprintf.c' line='114' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='sscanf' mangled-name='sscanf' filepath='lib/vsprintf.c' line='3482' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sscanf'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/vsprintf.c' line='3482' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='3482' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vsnprintf' mangled-name='vsnprintf' filepath='lib/vsprintf.c' line='2523' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsnprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2523' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2523' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2523' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='2523' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sprintf' mangled-name='sprintf' filepath='lib/vsprintf.c' line='2789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2789' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2789' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='scnprintf' mangled-name='scnprintf' filepath='lib/vsprintf.c' line='2744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='scnprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2744' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2744' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2744' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vsscanf' mangled-name='vsscanf' filepath='lib/vsprintf.c' line='3207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsscanf'>
+        <parameter type-id='80f4b756' name='buf' filepath='lib/vsprintf.c' line='3207' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='3207' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='3207' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vsprintf' mangled-name='vsprintf' filepath='lib/vsprintf.c' line='2771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2771' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2771' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='2771' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vscnprintf' mangled-name='vscnprintf' filepath='lib/vsprintf.c' line='2692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vscnprintf'>
+        <parameter type-id='26a90f95' name='buf' filepath='lib/vsprintf.c' line='2692' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='lib/vsprintf.c' line='2692' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='lib/vsprintf.c' line='2692' column='1'/>
+        <parameter type-id='2aee9912' name='args' filepath='lib/vsprintf.c' line='2692' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/xarray.c' language='LANG_C89'>
+      <class-decl name='xa_limit' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/xarray.h' line='236' column='1' id='5066733a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='19c2251e' visibility='default' filepath='include/linux/xarray.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='min' type-id='19c2251e' visibility='default' filepath='include/linux/xarray.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-decl name='__xa_alloc' mangled-name='__xa_alloc' filepath='lib/xarray.c' line='1804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__xa_alloc'>
+        <parameter type-id='60075f2a' name='xa' filepath='lib/xarray.c' line='1804' column='1'/>
+        <parameter type-id='f9409001' name='id' filepath='lib/xarray.c' line='1804' column='1'/>
+        <parameter type-id='eaa32e2f' name='entry' filepath='lib/xarray.c' line='1804' column='1'/>
+        <parameter type-id='5066733a' name='limit' filepath='lib/xarray.c' line='1805' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='lib/xarray.c' line='1805' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xa_erase' mangled-name='xa_erase' filepath='lib/xarray.c' line='1505' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xa_erase'>
+        <parameter type-id='60075f2a' name='xa' filepath='lib/xarray.c' line='1505' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/xarray.c' line='1505' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='xa_load' mangled-name='xa_load' filepath='lib/xarray.c' line='1448' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xa_load'>
+        <parameter type-id='60075f2a' name='xa' filepath='lib/xarray.c' line='1448' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='lib/xarray.c' line='1448' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/zlib_deflate/deflate.c' language='LANG_C89'>
+      <function-decl name='zlib_deflateReset' mangled-name='zlib_deflateReset' filepath='lib/zlib_deflate/deflate.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateReset'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_deflate/deflate.c' line='254' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflate' mangled-name='zlib_deflate' filepath='lib/zlib_deflate/deflate.c' line='327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflate'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_deflate/deflate.c' line='328' column='1'/>
+        <parameter type-id='95e97e5e' name='flush' filepath='lib/zlib_deflate/deflate.c' line='329' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflateInit2' mangled-name='zlib_deflateInit2' filepath='lib/zlib_deflate/deflate.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateInit2'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_deflate/deflate.c' line='168' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='lib/zlib_deflate/deflate.c' line='169' column='1'/>
+        <parameter type-id='95e97e5e' name='method' filepath='lib/zlib_deflate/deflate.c' line='170' column='1'/>
+        <parameter type-id='95e97e5e' name='windowBits' filepath='lib/zlib_deflate/deflate.c' line='171' column='1'/>
+        <parameter type-id='95e97e5e' name='memLevel' filepath='lib/zlib_deflate/deflate.c' line='172' column='1'/>
+        <parameter type-id='95e97e5e' name='strategy' filepath='lib/zlib_deflate/deflate.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflateEnd' mangled-name='zlib_deflateEnd' filepath='lib/zlib_deflate/deflate.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflateEnd'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_deflate/deflate.c' line='466' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_deflate_workspacesize' mangled-name='zlib_deflate_workspacesize' filepath='lib/zlib_deflate/deflate.c' line='1123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_deflate_workspacesize'>
+        <parameter type-id='95e97e5e' name='windowBits' filepath='lib/zlib_deflate/deflate.c' line='1123' column='1'/>
+        <parameter type-id='95e97e5e' name='memLevel' filepath='lib/zlib_deflate/deflate.c' line='1123' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <typedef-decl name='z_streamp' type-id='369435a4' filepath='include/linux/zlib.h' line='103' column='1' id='fb4f8c25'/>
+      <pointer-type-def type-id='59efae17' size-in-bits='64' id='369435a4'/>
+      <typedef-decl name='z_stream' type-id='d19a2f20' filepath='include/linux/zlib.h' line='101' column='1' id='59efae17'/>
+      <class-decl name='z_stream_s' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/zlib.h' line='84' column='1' id='d19a2f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next_in' type-id='7211f874' visibility='default' filepath='include/linux/zlib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='avail_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_out' type-id='00abfc0f' visibility='default' filepath='include/linux/zlib.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='avail_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='msg' type-id='26a90f95' visibility='default' filepath='include/linux/zlib.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='3a49ee4c' visibility='default' filepath='include/linux/zlib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='workspace' type-id='eaa32e2f' visibility='default' filepath='include/linux/zlib.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data_type' type-id='95e97e5e' visibility='default' filepath='include/linux/zlib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='adler' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reserved' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='efb9ba06' size-in-bits='64' id='00abfc0f'/>
+      <pointer-type-def type-id='41903e16' size-in-bits='64' id='7211f874'/>
+      <pointer-type-def type-id='221461a6' size-in-bits='64' id='3a49ee4c'/>
+      <typedef-decl name='uLong' type-id='7359adad' filepath='include/linux/zconf.h' line='54' column='1' id='5bbcce85'/>
+      <class-decl name='internal_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='221461a6'/>
+      <qualified-type-def type-id='efb9ba06' const='yes' id='41903e16'/>
+      <typedef-decl name='Byte' type-id='002ac4a6' filepath='include/linux/zconf.h' line='52' column='1' id='efb9ba06'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='lib/zlib_inflate/inflate.c' language='LANG_C89'>
+      <class-decl name='internal_state' is-struct='yes' visibility='default' is-declaration-only='yes' id='221461a6'/>
+      <typedef-decl name='z_streamp' type-id='369435a4' filepath='include/linux/zlib.h' line='103' column='1' id='fb4f8c25'/>
+      <typedef-decl name='z_stream' type-id='d19a2f20' filepath='include/linux/zlib.h' line='101' column='1' id='59efae17'/>
+      <class-decl name='z_stream_s' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/zlib.h' line='84' column='1' id='d19a2f20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next_in' type-id='7211f874' visibility='default' filepath='include/linux/zlib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='avail_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='total_in' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next_out' type-id='00abfc0f' visibility='default' filepath='include/linux/zlib.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='avail_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_out' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='msg' type-id='26a90f95' visibility='default' filepath='include/linux/zlib.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='state' type-id='3a49ee4c' visibility='default' filepath='include/linux/zlib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='workspace' type-id='eaa32e2f' visibility='default' filepath='include/linux/zlib.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='data_type' type-id='95e97e5e' visibility='default' filepath='include/linux/zlib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='adler' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='reserved' type-id='5bbcce85' visibility='default' filepath='include/linux/zlib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='Byte' type-id='002ac4a6' filepath='include/linux/zconf.h' line='52' column='1' id='efb9ba06'/>
+      <typedef-decl name='uLong' type-id='7359adad' filepath='include/linux/zconf.h' line='54' column='1' id='5bbcce85'/>
+      <pointer-type-def type-id='efb9ba06' size-in-bits='64' id='00abfc0f'/>
+      <qualified-type-def type-id='efb9ba06' const='yes' id='41903e16'/>
+      <pointer-type-def type-id='41903e16' size-in-bits='64' id='7211f874'/>
+      <pointer-type-def type-id='221461a6' size-in-bits='64' id='3a49ee4c'/>
+      <pointer-type-def type-id='59efae17' size-in-bits='64' id='369435a4'/>
+      <function-decl name='zlib_inflate' mangled-name='zlib_inflate' filepath='lib/zlib_inflate/inflate.c' line='317' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflate'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_inflate/inflate.c' line='317' column='1'/>
+        <parameter type-id='95e97e5e' name='flush' filepath='lib/zlib_inflate/inflate.c' line='317' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflate_workspacesize' mangled-name='zlib_inflate_workspacesize' filepath='lib/zlib_inflate/inflate.c' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflate_workspacesize'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateReset' mangled-name='zlib_inflateReset' filepath='lib/zlib_inflate/inflate.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateReset'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_inflate/inflate.c' line='23' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateInit2' mangled-name='zlib_inflateInit2' filepath='lib/zlib_inflate/inflate.c' line='48' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateInit2'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_inflate/inflate.c' line='48' column='1'/>
+        <parameter type-id='95e97e5e' name='windowBits' filepath='lib/zlib_inflate/inflate.c' line='48' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateEnd' mangled-name='zlib_inflateEnd' filepath='lib/zlib_inflate/inflate.c' line='754' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateEnd'>
+        <parameter type-id='fb4f8c25' name='strm' filepath='lib/zlib_inflate/inflate.c' line='754' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='zlib_inflateIncomp' mangled-name='zlib_inflateIncomp' filepath='lib/zlib_inflate/inflate.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='zlib_inflateIncomp'>
+        <parameter type-id='369435a4' name='z' filepath='lib/zlib_inflate/inflate.c' line='769' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/balloon_compaction.c' language='LANG_C89'>
+      <class-decl name='balloon_dev_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/balloon_compaction.h' line='54' column='1' id='a9849e75'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='isolated_pages' type-id='7359adad' visibility='default' filepath='include/linux/balloon_compaction.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pages_lock' type-id='fb4018a0' visibility='default' filepath='include/linux/balloon_compaction.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pages' type-id='72f469ec' visibility='default' filepath='include/linux/balloon_compaction.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='migratepage' type-id='6100aa9b' visibility='default' filepath='include/linux/balloon_compaction.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='inode' type-id='7e666abe' visibility='default' filepath='include/linux/balloon_compaction.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a9849e75' size-in-bits='64' id='c0f00785'/>
+      <pointer-type-def type-id='e5ceda9f' size-in-bits='64' id='6100aa9b'/>
+      <var-decl name='balloon_aops' type-id='38ce7f2c' mangled-name='balloon_aops' visibility='default' filepath='mm/balloon_compaction.c' line='253' column='1' elf-symbol-id='balloon_aops'/>
+      <function-decl name='balloon_page_enqueue' mangled-name='balloon_page_enqueue' filepath='mm/balloon_compaction.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='balloon_page_enqueue'>
+        <parameter type-id='c0f00785' name='b_dev_info' filepath='mm/balloon_compaction.c' line='146' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/balloon_compaction.c' line='147' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='balloon_page_dequeue' mangled-name='balloon_page_dequeue' filepath='mm/balloon_compaction.c' line='177' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='balloon_page_dequeue'>
+        <parameter type-id='c0f00785' name='b_dev_info' filepath='mm/balloon_compaction.c' line='177' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='balloon_page_alloc' mangled-name='balloon_page_alloc' filepath='mm/balloon_compaction.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='balloon_page_alloc'>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='e5ceda9f'>
+        <parameter type-id='c0f00785'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='02f11ed4'/>
+        <parameter type-id='157252dd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/cma.c' language='LANG_C89'>
+      <qualified-type-def type-id='6110442c' const='yes' id='4b11cd33'/>
+      <pointer-type-def type-id='4b11cd33' size-in-bits='64' id='4605de5b'/>
+      <qualified-type-def type-id='a25ce1be' const='yes' id='3d71d2d7'/>
+      <pointer-type-def type-id='3d71d2d7' size-in-bits='64' id='b72f2447'/>
+      <pointer-type-def type-id='135de8a2' size-in-bits='64' id='0b3f2e4c'/>
+      <function-decl name='cma_alloc' mangled-name='cma_alloc' filepath='mm/cma.c' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_alloc'>
+        <parameter type-id='6f67b38a' name='cma' filepath='mm/cma.c' line='411' column='1'/>
+        <parameter type-id='b59d7dce' name='count' filepath='mm/cma.c' line='411' column='1'/>
+        <parameter type-id='f0981eeb' name='align' filepath='mm/cma.c' line='411' column='1'/>
+        <parameter type-id='b50a4934' name='no_warn' filepath='mm/cma.c' line='412' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='cma_release' mangled-name='cma_release' filepath='mm/cma.c' line='508' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_release'>
+        <parameter type-id='6f67b38a' name='cma' filepath='mm/cma.c' line='508' column='1'/>
+        <parameter type-id='b72f2447' name='pages' filepath='mm/cma.c' line='508' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/cma.c' line='508' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cma_get_name' mangled-name='cma_get_name' filepath='mm/cma.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_get_name'>
+        <parameter type-id='4605de5b' name='cma' filepath='mm/cma.c' line='53' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='cma_for_each_area' mangled-name='cma_for_each_area' filepath='mm/cma.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cma_for_each_area'>
+        <parameter type-id='0b3f2e4c' name='it' filepath='mm/cma.c' line='532' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='mm/cma.c' line='532' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='135de8a2'>
+        <parameter type-id='6f67b38a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/compaction.c' language='LANG_C89'>
+      <function-decl name='__SetPageMovable' mangled-name='__SetPageMovable' filepath='mm/compaction.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__SetPageMovable'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/compaction.c' line='112' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/compaction.c' line='112' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__ClearPageMovable' mangled-name='__ClearPageMovable' filepath='mm/compaction.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ClearPageMovable'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/compaction.c' line='120' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/debug.c' language='LANG_C89'>
+      <function-decl name='dump_page' mangled-name='dump_page' filepath='mm/debug.c' line='111' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dump_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/debug.c' line='111' column='1'/>
+        <parameter type-id='80f4b756' name='reason' filepath='mm/debug.c' line='111' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/dmapool.c' language='LANG_C89'>
+      <class-decl name='dma_pool' size-in-bits='832' is-struct='yes' visibility='default' filepath='mm/dmapool.c' line='42' column='1' id='2bf33030'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='page_list' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='mm/dmapool.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='mm/dmapool.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='allocation' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='boundary' type-id='b59d7dce' visibility='default' filepath='mm/dmapool.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='mm/dmapool.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='pools' type-id='72f469ec' visibility='default' filepath='mm/dmapool.c' line='50' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2bf33030' size-in-bits='64' id='ab33c616'/>
+      <function-decl name='dmam_pool_create' mangled-name='dmam_pool_create' filepath='mm/dmapool.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dmam_pool_create'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/dmapool.c' line='506' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='mm/dmapool.c' line='506' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/dmapool.c' line='507' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/dmapool.c' line='507' column='1'/>
+        <parameter type-id='b59d7dce' name='allocation' filepath='mm/dmapool.c' line='507' column='1'/>
+        <return type-id='ab33c616'/>
+      </function-decl>
+      <function-decl name='dma_pool_create' mangled-name='dma_pool_create' filepath='mm/dmapool.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_create'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/dmapool.c' line='130' column='1'/>
+        <parameter type-id='fa0b179b' name='dev' filepath='mm/dmapool.c' line='130' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/dmapool.c' line='131' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/dmapool.c' line='131' column='1'/>
+        <parameter type-id='b59d7dce' name='boundary' filepath='mm/dmapool.c' line='131' column='1'/>
+        <return type-id='ab33c616'/>
+      </function-decl>
+      <function-decl name='dma_pool_destroy' mangled-name='dma_pool_destroy' filepath='mm/dmapool.c' line='269' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_destroy'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='269' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_pool_free' mangled-name='dma_pool_free' filepath='mm/dmapool.c' line='410' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_free'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='410' column='1'/>
+        <parameter type-id='eaa32e2f' name='vaddr' filepath='mm/dmapool.c' line='410' column='1'/>
+        <parameter type-id='cf29c9b3' name='dma' filepath='mm/dmapool.c' line='410' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dma_pool_alloc' mangled-name='dma_pool_alloc' filepath='mm/dmapool.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dma_pool_alloc'>
+        <parameter type-id='ab33c616' name='pool' filepath='mm/dmapool.c' line='319' column='1'/>
+        <parameter type-id='3eb7c31c' name='mem_flags' filepath='mm/dmapool.c' line='319' column='1'/>
+        <parameter type-id='e835b5d8' name='handle' filepath='mm/dmapool.c' line='320' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/filemap.c' language='LANG_C89'>
+      <pointer-type-def type-id='89af975c' size-in-bits='64' id='83ac4446'/>
+      <function-decl name='pagecache_get_page' mangled-name='pagecache_get_page' filepath='mm/filemap.c' line='1648' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pagecache_get_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='1648' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='mm/filemap.c' line='1648' column='1'/>
+        <parameter type-id='95e97e5e' name='fgp_flags' filepath='mm/filemap.c' line='1649' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/filemap.c' line='1649' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='unlock_page' mangled-name='unlock_page' filepath='mm/filemap.c' line='1330' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unlock_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/filemap.c' line='1330' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='read_cache_page_gfp' mangled-name='read_cache_page_gfp' filepath='mm/filemap.c' line='2919' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='read_cache_page_gfp'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='2919' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='mm/filemap.c' line='2920' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/filemap.c' line='2921' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='add_to_page_cache_lru' mangled-name='add_to_page_cache_lru' filepath='mm/filemap.c' line='955' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='add_to_page_cache_lru'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/filemap.c' line='955' column='1'/>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='955' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='mm/filemap.c' line='956' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/filemap.c' line='956' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='read_cache_page' mangled-name='read_cache_page' filepath='mm/filemap.c' line='2896' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='read_cache_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='2896' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='mm/filemap.c' line='2897' column='1'/>
+        <parameter type-id='83ac4446' name='filler' filepath='mm/filemap.c' line='2898' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='mm/filemap.c' line='2899' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='page_endio' mangled-name='page_endio' filepath='mm/filemap.c' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_endio'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/filemap.c' line='1370' column='1'/>
+        <parameter type-id='b50a4934' name='is_write' filepath='mm/filemap.c' line='1370' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='mm/filemap.c' line='1370' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_file_write_iter' mangled-name='generic_file_write_iter' filepath='mm/filemap.c' line='3463' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_write_iter'>
+        <parameter type-id='80f25feb' name='iocb' filepath='mm/filemap.c' line='3463' column='1'/>
+        <parameter type-id='4fa10f9e' name='from' filepath='mm/filemap.c' line='3463' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='generic_file_read_iter' mangled-name='generic_file_read_iter' filepath='mm/filemap.c' line='2293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_read_iter'>
+        <parameter type-id='80f25feb' name='iocb' filepath='mm/filemap.c' line='2293' column='1'/>
+        <parameter type-id='4fa10f9e' name='iter' filepath='mm/filemap.c' line='2293' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='generic_file_mmap' mangled-name='generic_file_mmap' filepath='mm/filemap.c' line='2724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_file_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='mm/filemap.c' line='2724' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/filemap.c' line='2724' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='filemap_fdatawrite_range' mangled-name='filemap_fdatawrite_range' filepath='mm/filemap.c' line='438' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filemap_fdatawrite_range'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='438' column='1'/>
+        <parameter type-id='69bf7bee' name='start' filepath='mm/filemap.c' line='438' column='1'/>
+        <parameter type-id='69bf7bee' name='end' filepath='mm/filemap.c' line='439' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='filemap_fdatawait_range' mangled-name='filemap_fdatawait_range' filepath='mm/filemap.c' line='550' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='filemap_fdatawait_range'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/filemap.c' line='550' column='1'/>
+        <parameter type-id='69bf7bee' name='start_byte' filepath='mm/filemap.c' line='550' column='1'/>
+        <parameter type-id='69bf7bee' name='end_byte' filepath='mm/filemap.c' line='551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__lock_page' mangled-name='__lock_page' filepath='mm/filemap.c' line='1398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__lock_page'>
+        <parameter type-id='02f11ed4' name='__page' filepath='mm/filemap.c' line='1398' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='89af975c'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='02f11ed4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/frame_vector.c' language='LANG_C89'>
+      <class-decl name='frame_vector' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/mm.h' line='1658' column='1' id='df80a1e0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nr_allocated' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='1659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_frames' type-id='f0981eeb' visibility='default' filepath='include/linux/mm.h' line='1660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='got_ref' type-id='b50a4934' visibility='default' filepath='include/linux/mm.h' line='1661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='is_pfns' type-id='b50a4934' visibility='default' filepath='include/linux/mm.h' line='1662' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ptrs' type-id='baf98fd3' visibility='default' filepath='include/linux/mm.h' line='1663' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='df80a1e0' size-in-bits='64' id='d9fbdc06'/>
+      <function-decl name='put_vaddr_frames' mangled-name='put_vaddr_frames' filepath='mm/frame_vector.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_vaddr_frames'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='123' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_vaddr_frames' mangled-name='get_vaddr_frames' filepath='mm/frame_vector.c' line='34' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_vaddr_frames'>
+        <parameter type-id='7359adad' name='start' filepath='mm/frame_vector.c' line='34' column='1'/>
+        <parameter type-id='f0981eeb' name='nr_frames' filepath='mm/frame_vector.c' line='34' column='1'/>
+        <parameter type-id='f0981eeb' name='gup_flags' filepath='mm/frame_vector.c' line='35' column='1'/>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='35' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='frame_vector_to_pfns' mangled-name='frame_vector_to_pfns' filepath='mm/frame_vector.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_to_pfns'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='frame_vector_to_pages' mangled-name='frame_vector_to_pages' filepath='mm/frame_vector.c' line='154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_to_pages'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='154' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='frame_vector_destroy' mangled-name='frame_vector_destroy' filepath='mm/frame_vector.c' line='235' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_destroy'>
+        <parameter type-id='d9fbdc06' name='vec' filepath='mm/frame_vector.c' line='235' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='frame_vector_create' mangled-name='frame_vector_create' filepath='mm/frame_vector.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='frame_vector_create'>
+        <parameter type-id='f0981eeb' name='nr_frames' filepath='mm/frame_vector.c' line='203' column='1'/>
+        <return type-id='d9fbdc06'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/gup.c' language='LANG_C89'>
+      <pointer-type-def type-id='2ae08426' size-in-bits='64' id='8b6fdee4'/>
+      <function-decl name='get_user_pages_fast' mangled-name='get_user_pages_fast' filepath='mm/gup.c' line='2443' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages_fast'>
+        <parameter type-id='7359adad' name='start' filepath='mm/gup.c' line='2443' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_pages' filepath='mm/gup.c' line='2443' column='1'/>
+        <parameter type-id='f0981eeb' name='gup_flags' filepath='mm/gup.c' line='2444' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/gup.c' line='2444' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='get_user_pages_remote' mangled-name='get_user_pages_remote' filepath='mm/gup.c' line='1194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages_remote'>
+        <parameter type-id='f23e2572' name='tsk' filepath='mm/gup.c' line='1194' column='1'/>
+        <parameter type-id='df4b7819' name='mm' filepath='mm/gup.c' line='1194' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='mm/gup.c' line='1195' column='1'/>
+        <parameter type-id='7359adad' name='nr_pages' filepath='mm/gup.c' line='1195' column='1'/>
+        <parameter type-id='f0981eeb' name='gup_flags' filepath='mm/gup.c' line='1196' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/gup.c' line='1196' column='1'/>
+        <parameter type-id='8b6fdee4' name='vmas' filepath='mm/gup.c' line='1197' column='1'/>
+        <parameter type-id='7292109c' name='locked' filepath='mm/gup.c' line='1197' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='get_user_pages' mangled-name='get_user_pages' filepath='mm/gup.c' line='1652' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_user_pages'>
+        <parameter type-id='7359adad' name='start' filepath='mm/gup.c' line='1652' column='1'/>
+        <parameter type-id='7359adad' name='nr_pages' filepath='mm/gup.c' line='1652' column='1'/>
+        <parameter type-id='f0981eeb' name='gup_flags' filepath='mm/gup.c' line='1653' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/gup.c' line='1653' column='1'/>
+        <parameter type-id='8b6fdee4' name='vmas' filepath='mm/gup.c' line='1654' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/memblock.c' language='LANG_C89'>
+      <var-decl name='contig_page_data' type-id='54406315' mangled-name='contig_page_data' visibility='default' filepath='mm/memblock.c' line='99' column='1' elf-symbol-id='contig_page_data'/>
+      <function-decl name='memblock_free' mangled-name='memblock_free' filepath='mm/memblock.c' line='781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memblock_free'>
+        <parameter type-id='2522883d' name='base' filepath='mm/memblock.c' line='781' column='1'/>
+        <parameter type-id='2522883d' name='size' filepath='mm/memblock.c' line='781' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/memory.c' language='LANG_C89'>
+      <typedef-decl name='pfn_t' type-id='8444d1f8' filepath='include/linux/pfn.h' line='15' column='1' id='abe59ef3'/>
+      <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' naming-typedef-id='abe59ef3' visibility='default' filepath='include/linux/pfn.h' line='13' column='1' id='8444d1f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='val' type-id='91ce1af9' visibility='default' filepath='include/linux/pfn.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='69bf7bee' const='yes' id='bf352dfe'/>
+      <function-decl name='mm_trace_rss_stat' mangled-name='mm_trace_rss_stat' filepath='mm/memory.c' line='164' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mm_trace_rss_stat'>
+        <parameter type-id='df4b7819' name='mm' filepath='mm/memory.c' line='164' column='1'/>
+        <parameter type-id='95e97e5e' name='member' filepath='mm/memory.c' line='164' column='1'/>
+        <parameter type-id='bd54fe1a' name='count' filepath='mm/memory.c' line='164' column='1'/>
+        <parameter type-id='bd54fe1a' name='value' filepath='mm/memory.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='remap_pfn_range' mangled-name='remap_pfn_range' filepath='mm/memory.c' line='1938' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remap_pfn_range'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1938' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1938' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1939' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='mm/memory.c' line='1939' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/memory.c' line='1939' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vmf_insert_pfn_prot' mangled-name='vmf_insert_pfn_prot' filepath='mm/memory.c' line='1694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_pfn_prot'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1694' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1694' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1695' column='1'/>
+        <parameter type-id='2e2dcbd3' name='pgprot' filepath='mm/memory.c' line='1695' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_pfn' mangled-name='vmf_insert_pfn' filepath='mm/memory.c' line='1742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_pfn'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1742' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1742' column='1'/>
+        <parameter type-id='7359adad' name='pfn' filepath='mm/memory.c' line='1743' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vmf_insert_mixed' mangled-name='vmf_insert_mixed' filepath='mm/memory.c' line='1809' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmf_insert_mixed'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1809' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1809' column='1'/>
+        <parameter type-id='abe59ef3' name='pfn' filepath='mm/memory.c' line='1810' column='1'/>
+        <return type-id='e9265215'/>
+      </function-decl>
+      <function-decl name='vm_map_pages' mangled-name='vm_map_pages' filepath='mm/memory.c' line='1596' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_map_pages'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1596' column='1'/>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/memory.c' line='1596' column='1'/>
+        <parameter type-id='7359adad' name='num' filepath='mm/memory.c' line='1597' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vm_iomap_memory' mangled-name='vm_iomap_memory' filepath='mm/memory.c' line='2012' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_iomap_memory'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='2012' column='1'/>
+        <parameter type-id='2522883d' name='start' filepath='mm/memory.c' line='2012' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='mm/memory.c' line='2012' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='vm_insert_page' mangled-name='vm_insert_page' filepath='mm/memory.c' line='1526' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_insert_page'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/memory.c' line='1526' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/memory.c' line='1526' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/memory.c' line='1527' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unmap_mapping_range' mangled-name='unmap_mapping_range' filepath='mm/memory.c' line='2854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unmap_mapping_range'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/memory.c' line='2854' column='1'/>
+        <parameter type-id='bf352dfe' name='holebegin' filepath='mm/memory.c' line='2855' column='1'/>
+        <parameter type-id='bf352dfe' name='holelen' filepath='mm/memory.c' line='2855' column='1'/>
+        <parameter type-id='95e97e5e' name='even_cows' filepath='mm/memory.c' line='2855' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/mempool.c' language='LANG_C89'>
+      <pointer-type-def type-id='2745fad8' size-in-bits='64' id='78713e8f'/>
+      <function-decl name='mempool_kmalloc' mangled-name='mempool_kmalloc' filepath='mm/mempool.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_kmalloc'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='528' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='528' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='mempool_kfree' mangled-name='mempool_kfree' filepath='mm/mempool.c' line='535' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_kfree'>
+        <parameter type-id='eaa32e2f' name='element' filepath='mm/mempool.c' line='535' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='535' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_free_slab' mangled-name='mempool_free_slab' filepath='mm/mempool.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_free_slab'>
+        <parameter type-id='eaa32e2f' name='element' filepath='mm/mempool.c' line='517' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='517' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_free' mangled-name='mempool_free' filepath='mm/mempool.c' line='452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_free'>
+        <parameter type-id='eaa32e2f' name='element' filepath='mm/mempool.c' line='452' column='1'/>
+        <parameter type-id='78713e8f' name='pool' filepath='mm/mempool.c' line='452' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_destroy' mangled-name='mempool_destroy' filepath='mm/mempool.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_destroy'>
+        <parameter type-id='78713e8f' name='pool' filepath='mm/mempool.c' line='170' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mempool_create_node' mangled-name='mempool_create_node' filepath='mm/mempool.c' line='261' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_create_node'>
+        <parameter type-id='95e97e5e' name='min_nr' filepath='mm/mempool.c' line='261' column='1'/>
+        <parameter type-id='8bf6d789' name='alloc_fn' filepath='mm/mempool.c' line='261' column='1'/>
+        <parameter type-id='a4c19f22' name='free_fn' filepath='mm/mempool.c' line='262' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='262' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='263' column='1'/>
+        <parameter type-id='95e97e5e' name='node_id' filepath='mm/mempool.c' line='263' column='1'/>
+        <return type-id='78713e8f'/>
+      </function-decl>
+      <function-decl name='mempool_create' mangled-name='mempool_create' filepath='mm/mempool.c' line='253' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_create'>
+        <parameter type-id='95e97e5e' name='min_nr' filepath='mm/mempool.c' line='253' column='1'/>
+        <parameter type-id='8bf6d789' name='alloc_fn' filepath='mm/mempool.c' line='253' column='1'/>
+        <parameter type-id='a4c19f22' name='free_fn' filepath='mm/mempool.c' line='254' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='254' column='1'/>
+        <return type-id='78713e8f'/>
+      </function-decl>
+      <function-decl name='mempool_alloc_slab' mangled-name='mempool_alloc_slab' filepath='mm/mempool.c' line='509' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_alloc_slab'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='509' column='1'/>
+        <parameter type-id='eaa32e2f' name='pool_data' filepath='mm/mempool.c' line='509' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='mempool_alloc' mangled-name='mempool_alloc' filepath='mm/mempool.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mempool_alloc'>
+        <parameter type-id='78713e8f' name='pool' filepath='mm/mempool.c' line='375' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/mempool.c' line='375' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/migrate.c' language='LANG_C89'>
+      <function-decl name='buffer_migrate_page' mangled-name='buffer_migrate_page' filepath='mm/migrate.c' line='827' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='buffer_migrate_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/migrate.c' line='827' column='1'/>
+        <parameter type-id='02f11ed4' name='newpage' filepath='mm/migrate.c' line='828' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/migrate.c' line='828' column='1'/>
+        <parameter type-id='157252dd' name='mode' filepath='mm/migrate.c' line='828' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/mmap.c' language='LANG_C89'>
+      <function-decl name='get_unmapped_area' mangled-name='get_unmapped_area' filepath='mm/mmap.c' line='2202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_unmapped_area'>
+        <parameter type-id='77e79a4b' name='file' filepath='mm/mmap.c' line='2202' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/mmap.c' line='2202' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='mm/mmap.c' line='2202' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='mm/mmap.c' line='2203' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='mm/mmap.c' line='2203' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='vm_get_page_prot' mangled-name='vm_get_page_prot' filepath='mm/mmap.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_get_page_prot'>
+        <parameter type-id='7359adad' name='vm_flags' filepath='mm/mmap.c' line='106' column='1'/>
+        <return type-id='2e2dcbd3'/>
+      </function-decl>
+      <function-decl name='find_vma' mangled-name='find_vma' filepath='mm/mmap.c' line='2246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_vma'>
+        <parameter type-id='df4b7819' name='mm' filepath='mm/mmap.c' line='2246' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/mmap.c' line='2246' column='1'/>
+        <return type-id='2ae08426'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='2549' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_page_dirty'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page-writeback.c' line='2549' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='set_page_dirty_lock' mangled-name='set_page_dirty_lock' filepath='mm/page-writeback.c' line='2592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='set_page_dirty_lock'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page-writeback.c' line='2592' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/page_alloc.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='447da2ae' size-in-bits='192' id='d371d064'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </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='3c95971e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='uptime' type-id='6a11bd61' 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='d371d064' 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='447da2ae' 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='447da2ae' 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='447da2ae' 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='447da2ae' 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='447da2ae' 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='447da2ae' 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='d315442e' 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='d315442e' 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='447da2ae' 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='447da2ae' 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='3f1a6b60' 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='e84913bd' visibility='default' filepath='include/uapi/linux/sysinfo.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='6a7d16bb' size-in-bits='64' id='f461c050'/>
+      <pointer-type-def type-id='3c95971e' size-in-bits='64' id='0f561784'/>
+      <var-decl name='_totalram_pages' type-id='f22a8abb' mangled-name='_totalram_pages' visibility='default' filepath='mm/page_alloc.c' line='132' column='1' elf-symbol-id='_totalram_pages'/>
+      <function-decl name='__alloc_pages_nodemask' mangled-name='__alloc_pages_nodemask' filepath='mm/page_alloc.c' line='4824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_pages_nodemask'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='95e97e5e' name='preferred_nid' filepath='mm/page_alloc.c' line='4824' column='1'/>
+        <parameter type-id='f461c050' name='nodemask' filepath='mm/page_alloc.c' line='4825' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='__free_pages' mangled-name='__free_pages' filepath='mm/page_alloc.c' line='4920' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__free_pages'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page_alloc.c' line='4920' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4920' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_pages_exact' mangled-name='alloc_pages_exact' filepath='mm/page_alloc.c' line='5080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_pages_exact'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/page_alloc.c' line='5080' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='5080' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='si_mem_available' mangled-name='si_mem_available' filepath='mm/page_alloc.c' line='5204' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_mem_available'>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='split_page' mangled-name='split_page' filepath='mm/page_alloc.c' line='3188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='split_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page_alloc.c' line='3188' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='3188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='si_meminfo' mangled-name='si_meminfo' filepath='mm/page_alloc.c' line='5250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='si_meminfo'>
+        <parameter type-id='0f561784' name='val' filepath='mm/page_alloc.c' line='5250' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='get_zeroed_page' mangled-name='get_zeroed_page' filepath='mm/page_alloc.c' line='4906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='get_zeroed_page'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='4906' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='free_pages_exact' mangled-name='free_pages_exact' filepath='mm/page_alloc.c' line='5126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_pages_exact'>
+        <parameter type-id='eaa32e2f' name='virt' filepath='mm/page_alloc.c' line='5126' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/page_alloc.c' line='5126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='free_pages' mangled-name='free_pages' filepath='mm/page_alloc.c' line='4927' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_pages'>
+        <parameter type-id='7359adad' name='addr' filepath='mm/page_alloc.c' line='4927' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4927' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='adjust_managed_page_count' mangled-name='adjust_managed_page_count' filepath='mm/page_alloc.c' line='7594' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='adjust_managed_page_count'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/page_alloc.c' line='7594' column='1'/>
+        <parameter type-id='bd54fe1a' name='count' filepath='mm/page_alloc.c' line='7594' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__get_free_pages' mangled-name='__get_free_pages' filepath='mm/page_alloc.c' line='4895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__get_free_pages'>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/page_alloc.c' line='4895' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/page_alloc.c' line='4895' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/percpu.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='7359adad' size-in-bits='2048' id='bc3af5fa'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <var-decl name='__per_cpu_offset' type-id='bc3af5fa' mangled-name='__per_cpu_offset' visibility='default' filepath='mm/percpu.c' line='2946' column='1' elf-symbol-id='__per_cpu_offset'/>
+      <function-decl name='free_percpu' mangled-name='free_percpu' filepath='mm/percpu.c' line='1955' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_percpu'>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='mm/percpu.c' line='1955' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__alloc_percpu' mangled-name='__alloc_percpu' filepath='mm/percpu.c' line='1794' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_percpu'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/percpu.c' line='1794' column='1'/>
+        <parameter type-id='b59d7dce' name='align' filepath='mm/percpu.c' line='1794' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/shmem.c' language='LANG_C89'>
+      <function-decl name='shmem_read_mapping_page_gfp' mangled-name='shmem_read_mapping_page_gfp' filepath='mm/shmem.c' line='4170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_read_mapping_page_gfp'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/shmem.c' line='4170' column='1'/>
+        <parameter type-id='7359adad' name='index' filepath='mm/shmem.c' line='4171' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/shmem.c' line='4171' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='shmem_truncate_range' mangled-name='shmem_truncate_range' filepath='mm/shmem.c' line='990' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_truncate_range'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/shmem.c' line='990' column='1'/>
+        <parameter type-id='69bf7bee' name='lstart' filepath='mm/shmem.c' line='990' column='1'/>
+        <parameter type-id='69bf7bee' name='lend' filepath='mm/shmem.c' line='990' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='shmem_file_setup' mangled-name='shmem_file_setup' filepath='mm/shmem.c' line='4102' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='shmem_file_setup'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/shmem.c' line='4102' column='1'/>
+        <parameter type-id='69bf7bee' name='size' filepath='mm/shmem.c' line='4102' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='mm/shmem.c' line='4102' column='1'/>
+        <return type-id='77e79a4b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/slab_common.c' language='LANG_C89'>
+      <array-type-def dimensions='2' type-id='f3b4aca8' size-in-bits='1792' id='5a527497'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+        <subrange length='14' type-id='7ff19f0f' id='48882d96'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f3b4aca8' size-in-bits='infinite' id='c66d33bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='42c7aae7' size-in-bits='64' id='425436e6'>
+        <subrange length='1' type-id='7ff19f0f' id='52f813b4'/>
+      </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='8696da2b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freelist' type-id='63e171df' 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='7359adad' 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='02f11ed4' 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='02f11ed4' visibility='default' filepath='include/linux/slub_def.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='slab_flags_t' type-id='f0981eeb' filepath='include/linux/types.h' line='154' column='1' id='f7fe96cb'/>
+      <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='dfc42026'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='x' type-id='f0981eeb' 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='1280' is-struct='yes' visibility='default' filepath='mm/slab.h' line='73' column='1' id='f36112b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='root_cache' type-id='f3b4aca8' visibility='default' filepath='mm/slab.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='8305e8d4' visibility='default' filepath='mm/slab.h' line='75' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='1216' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='75' column='1' id='8305e8d4'>
+        <data-member access='public'>
+          <var-decl name='' type-id='22e2627b' visibility='default' filepath='mm/slab.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='b5fecf67' visibility='default' filepath='mm/slab.h' line='82' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='384' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='76' column='1' id='22e2627b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg_caches' type-id='2c8ce02f' visibility='default' filepath='mm/slab.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='__root_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dying' type-id='b50a4934' visibility='default' filepath='mm/slab.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='memcg_cache_array' size-in-bits='128' is-struct='yes' visibility='default' filepath='mm/slab.h' line='35' column='1' id='dbef6377'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entries' type-id='c66d33bc' visibility='default' filepath='mm/slab.h' line='37' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='1216' is-struct='yes' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='82' column='1' id='b5fecf67'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='memcg' type-id='223696fb' visibility='default' filepath='mm/slab.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='children_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='kmem_caches_node' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='refcnt' type-id='818799b4' visibility='default' filepath='mm/slab.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='work_fn' type-id='8a4f2b79' visibility='default' filepath='mm/slab.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='' type-id='436b4ed4' visibility='default' filepath='mm/slab.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='384' is-anonymous='yes' visibility='default' filepath='mm/slab.h' line='89' column='1' id='436b4ed4'>
+        <data-member access='public'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='mm/slab.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='work' type-id='ef9025d0' visibility='default' filepath='mm/slab.h' line='91' 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='598' column='1' id='edac1e8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list_lock' type-id='fb4018a0' visibility='default' filepath='mm/slab.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nr_partial' type-id='7359adad' visibility='default' filepath='mm/slab.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='partial' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nr_slabs' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='total_objects' type-id='f22a8abb' visibility='default' filepath='mm/slab.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='full' type-id='72f469ec' visibility='default' filepath='mm/slab.h' line='622' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8696da2b' size-in-bits='64' id='75f3cc0b'/>
+      <pointer-type-def type-id='edac1e8f' size-in-bits='64' id='42c7aae7'/>
+      <pointer-type-def type-id='dbef6377' size-in-bits='64' id='2c8ce02f'/>
+      <pointer-type-def type-id='ad0ff4ed' size-in-bits='64' id='8a4f2b79'/>
+      <var-decl name='kmalloc_caches' type-id='5a527497' mangled-name='kmalloc_caches' visibility='default' filepath='mm/slab_common.c' line='1116' column='1' elf-symbol-id='kmalloc_caches'/>
+      <function-decl name='kmalloc_order_trace' mangled-name='kmalloc_order_trace' filepath='mm/slab_common.c' line='1356' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmalloc_order_trace'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slab_common.c' line='1356' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slab_common.c' line='1356' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/slab_common.c' line='1356' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_destroy' mangled-name='kmem_cache_destroy' filepath='mm/slab_common.c' line='941' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_destroy'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slab_common.c' line='941' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='krealloc' mangled-name='krealloc' filepath='mm/slab_common.c' line='1732' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='krealloc'>
+        <parameter type-id='eaa32e2f' name='p' filepath='mm/slab_common.c' line='1732' column='1'/>
+        <parameter type-id='b59d7dce' name='new_size' filepath='mm/slab_common.c' line='1732' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slab_common.c' line='1732' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kzfree' mangled-name='kzfree' filepath='mm/slab_common.c' line='1760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kzfree'>
+        <parameter type-id='eaa32e2f' name='p' filepath='mm/slab_common.c' line='1760' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ksize' mangled-name='ksize' filepath='mm/slab_common.c' line='1787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ksize'>
+        <parameter type-id='eaa32e2f' name='objp' filepath='mm/slab_common.c' line='1787' column='1'/>
+        <return type-id='b59d7dce'/>
+      </function-decl>
+      <function-decl name='kmem_cache_create' mangled-name='kmem_cache_create' filepath='mm/slab_common.c' line='561' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_create'>
+        <parameter type-id='80f4b756' name='name' filepath='mm/slab_common.c' line='561' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='mm/slab_common.c' line='561' column='1'/>
+        <parameter type-id='f0981eeb' name='align' filepath='mm/slab_common.c' line='561' column='1'/>
+        <parameter type-id='f7fe96cb' name='flags' filepath='mm/slab_common.c' line='562' column='1'/>
+        <parameter type-id='b7f9d8e6' name='ctor' filepath='mm/slab_common.c' line='562' column='1'/>
+        <return type-id='f3b4aca8'/>
+      </function-decl>
+      <function-decl name='kmalloc_order' mangled-name='kmalloc_order' filepath='mm/slab_common.c' line='1336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmalloc_order'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slab_common.c' line='1336' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slab_common.c' line='1336' column='1'/>
+        <parameter type-id='f0981eeb' name='order' filepath='mm/slab_common.c' line='1336' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ad0ff4ed'>
+        <parameter type-id='f3b4aca8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/slub.c' language='LANG_C89'>
+      <function-decl name='__kmalloc' mangled-name='__kmalloc' filepath='mm/slub.c' line='3896' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__kmalloc'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3896' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slub.c' line='3896' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kfree' mangled-name='kfree' filepath='mm/slub.c' line='4050' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree'>
+        <parameter type-id='eaa32e2f' name='x' filepath='mm/slub.c' line='4050' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc_trace' mangled-name='kmem_cache_alloc_trace' filepath='mm/slub.c' line='2852' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc_trace'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='2852' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfpflags' filepath='mm/slub.c' line='2852' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='2852' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_free' mangled-name='kmem_cache_free' filepath='mm/slub.c' line='3091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_free'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='3091' column='1'/>
+        <parameter type-id='eaa32e2f' name='x' filepath='mm/slub.c' line='3091' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc' mangled-name='kmem_cache_alloc' filepath='mm/slub.c' line='2840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='2840' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfpflags' filepath='mm/slub.c' line='2840' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kmem_cache_alloc_bulk' mangled-name='kmem_cache_alloc_bulk' filepath='mm/slub.c' line='3218' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_alloc_bulk'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='3218' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/slub.c' line='3218' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3218' column='1'/>
+        <parameter type-id='63e171df' name='p' filepath='mm/slub.c' line='3219' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kmem_cache_free_bulk' mangled-name='kmem_cache_free_bulk' filepath='mm/slub.c' line='3200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmem_cache_free_bulk'>
+        <parameter type-id='f3b4aca8' name='s' filepath='mm/slub.c' line='3200' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/slub.c' line='3200' column='1'/>
+        <parameter type-id='63e171df' name='p' filepath='mm/slub.c' line='3200' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/swap.c' language='LANG_C89'>
+      <function-decl name='__put_page' mangled-name='__put_page' filepath='mm/swap.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_page'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/swap.c' line='100' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='mark_page_accessed' mangled-name='mark_page_accessed' filepath='mm/swap.c' line='373' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mark_page_accessed'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/swap.c' line='373' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='release_pages' mangled-name='release_pages' filepath='mm/swap.c' line='760' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_pages'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/swap.c' line='760' column='1'/>
+        <parameter type-id='95e97e5e' name='nr' filepath='mm/swap.c' line='760' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='put_pages_list' mangled-name='put_pages_list' filepath='mm/swap.c' line='126' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='put_pages_list'>
+        <parameter type-id='e84b031a' name='pages' filepath='mm/swap.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/swapfile.c' language='LANG_C89'>
+      <var-decl name='nr_swap_pages' type-id='f22a8abb' mangled-name='nr_swap_pages' visibility='default' filepath='mm/swapfile.c' line='55' column='1' elf-symbol-id='nr_swap_pages'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/truncate.c' language='LANG_C89'>
+      <class-decl name='iomap' is-struct='yes' visibility='default' is-declaration-only='yes' id='3b326cb5'/>
+      <class-decl name='fid' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/exportfs.h' line='113' column='1' id='2437c5c4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='0394b7eb' 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='0394b7eb'>
+        <data-member access='public'>
+          <var-decl name='i32' type-id='273ef6eb' visibility='default' filepath='include/linux/exportfs.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udf' type-id='2d08566e' visibility='default' filepath='include/linux/exportfs.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='raw' type-id='d5016f6f' 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='273ef6eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ino' type-id='19c2251e' 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='19c2251e' 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='19c2251e' 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='19c2251e' 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='2d08566e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='block' type-id='19c2251e' 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='1dc6a898' 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='1dc6a898' 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='19c2251e' 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='19c2251e' 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='19c2251e' visibility='default' filepath='include/linux/exportfs.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3f1a6b60' size-in-bits='64' id='cd1b45ab'/>
+      <pointer-type-def type-id='39d64410' size-in-bits='64' id='36ed3b9a'/>
+      <pointer-type-def type-id='5d64147c' size-in-bits='64' id='9b9ccb86'/>
+      <pointer-type-def type-id='2437c5c4' size-in-bits='64' id='f7d748c2'/>
+      <pointer-type-def type-id='e2da4ade' size-in-bits='64' id='d5f76b20'/>
+      <pointer-type-def type-id='96658a93' size-in-bits='64' id='cb0ca137'/>
+      <pointer-type-def type-id='91de15a8' size-in-bits='64' id='2cdfbf0a'/>
+      <pointer-type-def type-id='91b0693b' size-in-bits='64' id='30144f27'/>
+      <pointer-type-def type-id='a48b0884' size-in-bits='64' id='35d085ce'/>
+      <pointer-type-def type-id='657fbd80' size-in-bits='64' id='547aa7d2'/>
+      <pointer-type-def type-id='3b326cb5' size-in-bits='64' id='07751825'/>
+      <pointer-type-def type-id='916c4095' size-in-bits='64' id='439be051'/>
+      <function-decl name='invalidate_mapping_pages' mangled-name='invalidate_mapping_pages' filepath='mm/truncate.c' line='543' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='invalidate_mapping_pages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='543' column='1'/>
+        <parameter type-id='7359adad' name='start' filepath='mm/truncate.c' line='544' column='1'/>
+        <parameter type-id='7359adad' name='end' filepath='mm/truncate.c' line='544' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='truncate_setsize' mangled-name='truncate_setsize' filepath='mm/truncate.c' line='830' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_setsize'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/truncate.c' line='830' column='1'/>
+        <parameter type-id='69bf7bee' name='newsize' filepath='mm/truncate.c' line='830' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='truncate_pagecache' mangled-name='truncate_pagecache' filepath='mm/truncate.c' line='797' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_pagecache'>
+        <parameter type-id='7e666abe' name='inode' filepath='mm/truncate.c' line='797' column='1'/>
+        <parameter type-id='69bf7bee' name='newsize' filepath='mm/truncate.c' line='797' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='truncate_inode_pages_final' mangled-name='truncate_inode_pages_final' filepath='mm/truncate.c' line='486' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_inode_pages_final'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='486' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='truncate_inode_pages' mangled-name='truncate_inode_pages' filepath='mm/truncate.c' line='471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='truncate_inode_pages'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='471' column='1'/>
+        <parameter type-id='69bf7bee' name='lstart' filepath='mm/truncate.c' line='471' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_error_remove_page' mangled-name='generic_error_remove_page' filepath='mm/truncate.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_error_remove_page'>
+        <parameter type-id='f57039f0' name='mapping' filepath='mm/truncate.c' line='232' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/truncate.c' line='232' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='39d64410'>
+        <parameter type-id='27675065'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5d64147c'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='f7d748c2'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='27675065'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e2da4ade'>
+        <parameter type-id='6a54ab42'/>
+        <parameter type-id='27675065'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='96658a93'>
+        <parameter type-id='27675065'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='27675065'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91de15a8'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='cd1b45ab'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='7e666abe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='91b0693b'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='07751825'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='ab7bbd67'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a48b0884'>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='07751825'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='657fbd80'>
+        <parameter type-id='42c8f564'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='916c4095'>
+        <parameter type-id='27675065'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='256' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__check_object_size'>
+        <parameter type-id='eaa32e2f' name='ptr' filepath='mm/usercopy.c' line='256' column='1'/>
+        <parameter type-id='7359adad' name='n' filepath='mm/usercopy.c' line='256' column='1'/>
+        <parameter type-id='b50a4934' name='to_user' filepath='mm/usercopy.c' line='256' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/util.c' language='LANG_C89'>
+      <function-decl name='kstrdup' mangled-name='kstrdup' filepath='mm/util.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup'>
+        <parameter type-id='80f4b756' name='s' filepath='mm/util.c' line='51' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='51' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='vmemdup_user' mangled-name='vmemdup_user' filepath='mm/util.c' line='194' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmemdup_user'>
+        <parameter type-id='eaa32e2f' name='src' filepath='mm/util.c' line='194' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='mm/util.c' line='194' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kvmalloc_node' mangled-name='kvmalloc_node' filepath='mm/util.c' line='538' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvmalloc_node'>
+        <parameter type-id='b59d7dce' name='size' filepath='mm/util.c' line='538' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='mm/util.c' line='538' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='mm/util.c' line='538' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vm_mmap' mangled-name='vm_mmap' filepath='mm/util.c' line='506' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='mm/util.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='addr' filepath='mm/util.c' line='506' column='1'/>
+        <parameter type-id='7359adad' name='len' filepath='mm/util.c' line='507' column='1'/>
+        <parameter type-id='7359adad' name='prot' filepath='mm/util.c' line='507' column='1'/>
+        <parameter type-id='7359adad' name='flag' filepath='mm/util.c' line='508' column='1'/>
+        <parameter type-id='7359adad' name='offset' filepath='mm/util.c' line='508' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='page_mapping' mangled-name='page_mapping' filepath='mm/util.c' line='666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='page_mapping'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/util.c' line='666' column='1'/>
+        <return type-id='f57039f0'/>
+      </function-decl>
+      <function-decl name='memdup_user' mangled-name='memdup_user' filepath='mm/util.c' line='168' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='memdup_user'>
+        <parameter type-id='eaa32e2f' name='src' filepath='mm/util.c' line='168' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='mm/util.c' line='168' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kvfree' mangled-name='kvfree' filepath='mm/util.c' line='588' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kvfree'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/util.c' line='588' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kstrndup' mangled-name='kstrndup' filepath='mm/util.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrndup'>
+        <parameter type-id='80f4b756' name='s' filepath='mm/util.c' line='96' column='1'/>
+        <parameter type-id='b59d7dce' name='max' filepath='mm/util.c' line='96' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='96' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='kstrdup_const' mangled-name='kstrdup_const' filepath='mm/util.c' line='77' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kstrdup_const'>
+        <parameter type-id='80f4b756' name='s' filepath='mm/util.c' line='77' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='77' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='kmemdup_nul' mangled-name='kmemdup_nul' filepath='mm/util.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmemdup_nul'>
+        <parameter type-id='80f4b756' name='s' filepath='mm/util.c' line='143' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='mm/util.c' line='143' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='143' column='1'/>
+        <return type-id='26a90f95'/>
+      </function-decl>
+      <function-decl name='kmemdup' mangled-name='kmemdup' filepath='mm/util.c' line='123' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kmemdup'>
+        <parameter type-id='eaa32e2f' name='src' filepath='mm/util.c' line='123' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='mm/util.c' line='123' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='mm/util.c' line='123' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='kfree_const' mangled-name='kfree_const' filepath='mm/util.c' line='37' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_const'>
+        <parameter type-id='eaa32e2f' name='x' filepath='mm/util.c' line='37' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/vmalloc.c' language='LANG_C89'>
+      <function-decl name='vmalloc_to_page' mangled-name='vmalloc_to_page' filepath='mm/vmalloc.c' line='272' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc_to_page'>
+        <parameter type-id='eaa32e2f' name='vmalloc_addr' filepath='mm/vmalloc.c' line='272' column='1'/>
+        <return type-id='02f11ed4'/>
+      </function-decl>
+      <function-decl name='vfree' mangled-name='vfree' filepath='mm/vmalloc.c' line='2327' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vfree'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/vmalloc.c' line='2327' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vzalloc' mangled-name='vzalloc' filepath='mm/vmalloc.c' line='2611' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vzalloc'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2611' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vunmap' mangled-name='vunmap' filepath='mm/vmalloc.c' line='2351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vunmap'>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/vmalloc.c' line='2351' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vmap' mangled-name='vmap' filepath='mm/vmalloc.c' line='2372' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmap'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/vmalloc.c' line='2372' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='2372' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='mm/vmalloc.c' line='2373' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2373' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vmalloc_user' mangled-name='vmalloc_user' filepath='mm/vmalloc.c' line='2627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc_user'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2627' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vmalloc' mangled-name='vmalloc' filepath='mm/vmalloc.c' line='2591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vmalloc'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2591' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='vm_unmap_ram' mangled-name='vm_unmap_ram' filepath='mm/vmalloc.c' line='1739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_unmap_ram'>
+        <parameter type-id='eaa32e2f' name='mem' filepath='mm/vmalloc.c' line='1739' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='1739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vm_unmap_aliases' mangled-name='vm_unmap_aliases' filepath='mm/vmalloc.c' line='1725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_unmap_aliases'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vm_map_ram' mangled-name='vm_map_ram' filepath='mm/vmalloc.c' line='1780' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vm_map_ram'>
+        <parameter type-id='9f93c9da' name='pages' filepath='mm/vmalloc.c' line='1780' column='1'/>
+        <parameter type-id='f0981eeb' name='count' filepath='mm/vmalloc.c' line='1780' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='mm/vmalloc.c' line='1780' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='1780' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='unregister_vmap_purge_notifier' mangled-name='unregister_vmap_purge_notifier' filepath='mm/vmalloc.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_vmap_purge_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='mm/vmalloc.c' line='1161' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='remap_vmalloc_range' mangled-name='remap_vmalloc_range' filepath='mm/vmalloc.c' line='3055' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='remap_vmalloc_range'>
+        <parameter type-id='2ae08426' name='vma' filepath='mm/vmalloc.c' line='3055' column='1'/>
+        <parameter type-id='eaa32e2f' name='addr' filepath='mm/vmalloc.c' line='3055' column='1'/>
+        <parameter type-id='7359adad' name='pgoff' filepath='mm/vmalloc.c' line='3056' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_vmap_purge_notifier' mangled-name='register_vmap_purge_notifier' filepath='mm/vmalloc.c' line='1155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_vmap_purge_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='mm/vmalloc.c' line='1155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__vmalloc' mangled-name='__vmalloc' filepath='mm/vmalloc.c' line='2558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__vmalloc'>
+        <parameter type-id='7359adad' name='size' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <parameter type-id='2e2dcbd3' name='prot' filepath='mm/vmalloc.c' line='2558' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/vmscan.c' language='LANG_C89'>
+      <function-decl name='unregister_shrinker' mangled-name='unregister_shrinker' filepath='mm/vmscan.c' line='449' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_shrinker'>
+        <parameter type-id='4be14597' name='shrinker' filepath='mm/vmscan.c' line='449' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_shrinker' mangled-name='register_shrinker' filepath='mm/vmscan.c' line='435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_shrinker'>
+        <parameter type-id='4be14597' name='shrinker' filepath='mm/vmscan.c' line='435' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='mm/vmstat.c' language='LANG_C89'>
+      <class-decl name='vm_event_state' size-in-bits='4672' is-struct='yes' visibility='default' filepath='include/linux/vmstat.h' line='45' column='1' id='8c8f5291'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='event' type-id='6bd30ceb' visibility='default' filepath='include/linux/vmstat.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='node_stat_item' filepath='include/linux/mmzone.h' line='215' column='1' id='93f9c3d3'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NR_LRU_BASE' value='0'/>
+        <enumerator name='NR_INACTIVE_ANON' value='0'/>
+        <enumerator name='NR_ACTIVE_ANON' value='1'/>
+        <enumerator name='NR_INACTIVE_FILE' value='2'/>
+        <enumerator name='NR_ACTIVE_FILE' value='3'/>
+        <enumerator name='NR_UNEVICTABLE' value='4'/>
+        <enumerator name='NR_SLAB_RECLAIMABLE' value='5'/>
+        <enumerator name='NR_SLAB_UNRECLAIMABLE' value='6'/>
+        <enumerator name='NR_ISOLATED_ANON' value='7'/>
+        <enumerator name='NR_ISOLATED_FILE' value='8'/>
+        <enumerator name='WORKINGSET_NODES' value='9'/>
+        <enumerator name='WORKINGSET_REFAULT' value='10'/>
+        <enumerator name='WORKINGSET_ACTIVATE' value='11'/>
+        <enumerator name='WORKINGSET_RESTORE' value='12'/>
+        <enumerator name='WORKINGSET_NODERECLAIM' value='13'/>
+        <enumerator name='NR_ANON_MAPPED' value='14'/>
+        <enumerator name='NR_FILE_MAPPED' value='15'/>
+        <enumerator name='NR_FILE_PAGES' value='16'/>
+        <enumerator name='NR_FILE_DIRTY' value='17'/>
+        <enumerator name='NR_WRITEBACK' value='18'/>
+        <enumerator name='NR_WRITEBACK_TEMP' value='19'/>
+        <enumerator name='NR_SHMEM' value='20'/>
+        <enumerator name='NR_SHMEM_THPS' value='21'/>
+        <enumerator name='NR_SHMEM_PMDMAPPED' value='22'/>
+        <enumerator name='NR_FILE_THPS' value='23'/>
+        <enumerator name='NR_FILE_PMDMAPPED' value='24'/>
+        <enumerator name='NR_ANON_THPS' value='25'/>
+        <enumerator name='NR_UNSTABLE_NFS' value='26'/>
+        <enumerator name='NR_VMSCAN_WRITE' value='27'/>
+        <enumerator name='NR_VMSCAN_IMMEDIATE' value='28'/>
+        <enumerator name='NR_DIRTIED' value='29'/>
+        <enumerator name='NR_WRITTEN' value='30'/>
+        <enumerator name='NR_KERNEL_MISC_RECLAIMABLE' value='31'/>
+        <enumerator name='NR_VM_NODE_STAT_ITEMS' value='32'/>
+      </enum-decl>
+      <enum-decl name='zone_stat_item' filepath='include/linux/mmzone.h' line='193' column='1' id='a1f2d9a1'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NR_FREE_PAGES' value='0'/>
+        <enumerator name='NR_ZONE_LRU_BASE' value='1'/>
+        <enumerator name='NR_ZONE_INACTIVE_ANON' value='1'/>
+        <enumerator name='NR_ZONE_ACTIVE_ANON' value='2'/>
+        <enumerator name='NR_ZONE_INACTIVE_FILE' value='3'/>
+        <enumerator name='NR_ZONE_ACTIVE_FILE' value='4'/>
+        <enumerator name='NR_ZONE_UNEVICTABLE' value='5'/>
+        <enumerator name='NR_ZONE_WRITE_PENDING' value='6'/>
+        <enumerator name='NR_MLOCK' value='7'/>
+        <enumerator name='NR_PAGETABLE' value='8'/>
+        <enumerator name='NR_KERNEL_STACK_KB' value='9'/>
+        <enumerator name='NR_KERNEL_SCS_BYTES' value='10'/>
+        <enumerator name='NR_BOUNCE' value='11'/>
+        <enumerator name='NR_ZSPAGES' value='12'/>
+        <enumerator name='NR_FREE_CMA_PAGES' value='13'/>
+        <enumerator name='NR_VM_ZONE_STAT_ITEMS' value='14'/>
+      </enum-decl>
+      <var-decl name='vm_event_states' type-id='8c8f5291' mangled-name='vm_event_states' visibility='default' filepath='mm/vmstat.c' line='108' column='1' elf-symbol-id='vm_event_states'/>
+      <var-decl name='vm_node_stat' type-id='99d12d7b' mangled-name='vm_node_stat' visibility='default' filepath='mm/vmstat.c' line='165' column='1' elf-symbol-id='vm_node_stat'/>
+      <function-decl name='mod_node_page_state' mangled-name='mod_node_page_state' filepath='mm/vmstat.c' line='575' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='mod_node_page_state'>
+        <parameter type-id='c876a7a5' name='pgdat' filepath='mm/vmstat.c' line='575' column='1'/>
+        <parameter type-id='93f9c3d3' name='item' filepath='mm/vmstat.c' line='575' column='1'/>
+        <parameter type-id='bd54fe1a' name='delta' filepath='mm/vmstat.c' line='576' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inc_zone_page_state' mangled-name='inc_zone_page_state' filepath='mm/vmstat.c' line='525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inc_zone_page_state'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/vmstat.c' line='525' column='1'/>
+        <parameter type-id='a1f2d9a1' name='item' filepath='mm/vmstat.c' line='525' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dec_zone_page_state' mangled-name='dec_zone_page_state' filepath='mm/vmstat.c' line='531' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dec_zone_page_state'>
+        <parameter type-id='02f11ed4' name='page' filepath='mm/vmstat.c' line='531' column='1'/>
+        <parameter type-id='a1f2d9a1' name='item' filepath='mm/vmstat.c' line='531' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='all_vm_events' mangled-name='all_vm_events' filepath='mm/vmstat.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='all_vm_events'>
+        <parameter type-id='1d2c2b85' name='ret' filepath='mm/vmstat.c' line='131' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/bluetooth/hci_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='80' id='979253d9'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1920' id='51e647b2'>
+        <subrange length='240' type-id='7ff19f0f' id='065c4623'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='1984' id='51d2bffa'>
+        <subrange length='248' type-id='7ff19f0f' id='c670fc1b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='248' id='be65fec6'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='8f048e17' size-in-bits='192' id='7f89db3f'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f048e17' size-in-bits='5376' id='2731130d'>
+        <subrange length='672' type-id='7ff19f0f' id='f11ba364'/>
+      </array-type-def>
+      <class-decl name='rfkill' size-in-bits='10432' is-struct='yes' visibility='default' filepath='net/rfkill/core.c' line='37' column='1' id='6b60ef45'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/rfkill/core.c' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='6bac1cb5' visibility='default' filepath='net/rfkill/core.c' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='net/rfkill/core.c' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idx' type-id='19c2251e' visibility='default' filepath='net/rfkill/core.c' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='persistent' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='polling_paused' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='184'>
+          <var-decl name='suspended' type-id='b50a4934' visibility='default' filepath='net/rfkill/core.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='6a6a70e7' visibility='default' filepath='net/rfkill/core.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='net/rfkill/core.c' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='led_trigger' type-id='7bcbad99' visibility='default' filepath='net/rfkill/core.c' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ledtrigname' type-id='80f4b756' visibility='default' filepath='net/rfkill/core.c' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='net/rfkill/core.c' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8448'>
+          <var-decl name='node' type-id='72f469ec' visibility='default' filepath='net/rfkill/core.c' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8576'>
+          <var-decl name='poll_work' type-id='5ad6e0ef' visibility='default' filepath='net/rfkill/core.c' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9664'>
+          <var-decl name='uevent_work' type-id='ef9025d0' visibility='default' filepath='net/rfkill/core.c' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='sync_work' type-id='ef9025d0' visibility='default' filepath='net/rfkill/core.c' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='name' type-id='e84913bd' visibility='default' filepath='net/rfkill/core.c' line='65' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='248' id='23e37060'>
+        <subrange length='31' type-id='7ff19f0f' id='ae5e1d19'/>
+      </array-type-def>
+      <class-decl name='hci_dev' size-in-bits='40384' is-struct='yes' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='216' column='1' id='c4e92edf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='8e100159' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='id' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='bus' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='dev_type' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='bdaddr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='592'>
+          <var-decl name='setup_addr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='public_addr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='random_addr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='static_addr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='adv_addr_type' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='792'>
+          <var-decl name='dev_name' type-id='51d2bffa' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2776'>
+          <var-decl name='short_name' type-id='979253d9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2856'>
+          <var-decl name='eir' type-id='51e647b2' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4784'>
+          <var-decl name='appearance' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='dev_class' type-id='c216126b' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4824'>
+          <var-decl name='major_class' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4832'>
+          <var-decl name='minor_class' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4840'>
+          <var-decl name='max_page' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4848'>
+          <var-decl name='features' type-id='7f89db3f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5040'>
+          <var-decl name='le_features' type-id='0209ab38' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5104'>
+          <var-decl name='le_white_list_size' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5112'>
+          <var-decl name='le_resolv_list_size' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='le_num_of_adv_sets' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5128'>
+          <var-decl name='le_states' type-id='0209ab38' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5192'>
+          <var-decl name='commands' type-id='73b95420' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5704'>
+          <var-decl name='hci_ver' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5712'>
+          <var-decl name='hci_rev' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5728'>
+          <var-decl name='lmp_ver' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5744'>
+          <var-decl name='manufacturer' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='lmp_subver' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5776'>
+          <var-decl name='voice_setting' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5792'>
+          <var-decl name='num_iac' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5800'>
+          <var-decl name='stored_max_keys' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5808'>
+          <var-decl name='stored_num_keys' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5816'>
+          <var-decl name='io_capability' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='inq_tx_power' type-id='8af57d41' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5840'>
+          <var-decl name='page_scan_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='page_scan_window' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5872'>
+          <var-decl name='page_scan_type' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5880'>
+          <var-decl name='le_adv_channel_map' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='le_adv_min_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5904'>
+          <var-decl name='le_adv_max_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5920'>
+          <var-decl name='le_scan_type' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5936'>
+          <var-decl name='le_scan_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='le_scan_window' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5968'>
+          <var-decl name='le_conn_min_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5984'>
+          <var-decl name='le_conn_max_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6000'>
+          <var-decl name='le_conn_latency' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='le_supv_timeout' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6032'>
+          <var-decl name='le_def_tx_len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6048'>
+          <var-decl name='le_def_tx_time' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6064'>
+          <var-decl name='le_max_tx_len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='le_max_tx_time' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6096'>
+          <var-decl name='le_max_rx_len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6112'>
+          <var-decl name='le_max_rx_time' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6128'>
+          <var-decl name='le_max_key_size' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6136'>
+          <var-decl name='le_min_key_size' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='discov_interleaved_timeout' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6160'>
+          <var-decl name='conn_info_min_age' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6176'>
+          <var-decl name='conn_info_max_age' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6192'>
+          <var-decl name='auth_payload_timeout' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='min_enc_key_size' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6216'>
+          <var-decl name='ssp_debug_mode' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6224'>
+          <var-decl name='hw_error_code' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6240'>
+          <var-decl name='clock' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='devid_source' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6288'>
+          <var-decl name='devid_vendor' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6304'>
+          <var-decl name='devid_product' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6320'>
+          <var-decl name='devid_version' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='pkt_type' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6352'>
+          <var-decl name='esco_type' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6368'>
+          <var-decl name='link_policy' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6384'>
+          <var-decl name='link_mode' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='idle_timeout' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6432'>
+          <var-decl name='sniff_min_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6448'>
+          <var-decl name='sniff_max_interval' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='amp_status' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6496'>
+          <var-decl name='amp_total_bw' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='amp_max_bw' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6560'>
+          <var-decl name='amp_min_latency' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='amp_max_pdu' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6624'>
+          <var-decl name='amp_type' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6640'>
+          <var-decl name='amp_pal_cap' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='amp_assoc_size' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6688'>
+          <var-decl name='amp_max_flush_to' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='amp_be_flush_to' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6752'>
+          <var-decl name='loc_assoc' type-id='36e902a9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='312' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12192'>
+          <var-decl name='flow_ctl_mode' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='auto_accept_delay' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='quirks' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='cmd_cnt' type-id='49178f86' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12384'>
+          <var-decl name='acl_cnt' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='sco_cnt' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12448'>
+          <var-decl name='le_cnt' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12480'>
+          <var-decl name='acl_mtu' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12512'>
+          <var-decl name='sco_mtu' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12544'>
+          <var-decl name='le_mtu' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12576'>
+          <var-decl name='acl_pkts' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12608'>
+          <var-decl name='sco_pkts' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12640'>
+          <var-decl name='le_pkts' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12672'>
+          <var-decl name='block_len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12688'>
+          <var-decl name='block_mtu' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12704'>
+          <var-decl name='num_blocks' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12720'>
+          <var-decl name='block_cnt' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12736'>
+          <var-decl name='acl_last_tx' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12800'>
+          <var-decl name='sco_last_tx' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12864'>
+          <var-decl name='le_last_tx' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12928'>
+          <var-decl name='le_tx_def_phys' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12936'>
+          <var-decl name='le_rx_def_phys' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12992'>
+          <var-decl name='workqueue' type-id='242e3d19' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13056'>
+          <var-decl name='req_workqueue' type-id='242e3d19' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='power_on' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='power_off' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14592'>
+          <var-decl name='error_reset' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14976'>
+          <var-decl name='discov_timeout' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15040'>
+          <var-decl name='discov_off' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16128'>
+          <var-decl name='service_cache' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='cmd_timer' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18304'>
+          <var-decl name='rx_work' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18688'>
+          <var-decl name='cmd_work' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19072'>
+          <var-decl name='tx_work' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19456'>
+          <var-decl name='discov_update' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19840'>
+          <var-decl name='bg_scan_update' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20224'>
+          <var-decl name='scan_update' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='connectable_update' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20992'>
+          <var-decl name='discoverable_update' type-id='ef9025d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21376'>
+          <var-decl name='le_scan_disable' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22464'>
+          <var-decl name='le_scan_restart' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23552'>
+          <var-decl name='rx_q' type-id='e61c85d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23744'>
+          <var-decl name='raw_q' type-id='e61c85d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23936'>
+          <var-decl name='cmd_q' type-id='e61c85d0' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24128'>
+          <var-decl name='sent_cmd' type-id='0fbf3cfd' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24192'>
+          <var-decl name='req_lock' type-id='925167dc' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24448'>
+          <var-decl name='req_wait_q' type-id='b5ab048f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24640'>
+          <var-decl name='req_status' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24672'>
+          <var-decl name='req_result' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24704'>
+          <var-decl name='req_skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='380' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24768'>
+          <var-decl name='smp_data' type-id='eaa32e2f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24832'>
+          <var-decl name='smp_bredr_data' type-id='eaa32e2f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24896'>
+          <var-decl name='discovery' type-id='f98a45fb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='25984'>
+          <var-decl name='conn_hash' type-id='f39496ab' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26304'>
+          <var-decl name='mgmt_pending' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='388' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26432'>
+          <var-decl name='blacklist' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26560'>
+          <var-decl name='whitelist' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26688'>
+          <var-decl name='uuids' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26816'>
+          <var-decl name='link_keys' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='26944'>
+          <var-decl name='long_term_keys' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27072'>
+          <var-decl name='identity_resolving_keys' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27200'>
+          <var-decl name='remote_oob_data' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27328'>
+          <var-decl name='le_white_list' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27456'>
+          <var-decl name='le_resolv_list' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27584'>
+          <var-decl name='le_conn_params' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27712'>
+          <var-decl name='pend_le_conns' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27840'>
+          <var-decl name='pend_le_reports' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='27968'>
+          <var-decl name='stat' type-id='2f3316f3' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28288'>
+          <var-decl name='promisc' type-id='49178f86' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28352'>
+          <var-decl name='hw_info' type-id='80f4b756' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28416'>
+          <var-decl name='fw_info' type-id='80f4b756' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28480'>
+          <var-decl name='debugfs' type-id='27675065' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='28544'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36032'>
+          <var-decl name='rfkill' type-id='c5b94c75' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36096'>
+          <var-decl name='dev_flags' type-id='f066dd3c' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36160'>
+          <var-decl name='adv_tx_power' type-id='8af57d41' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36168'>
+          <var-decl name='adv_data' type-id='be65fec6' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36416'>
+          <var-decl name='adv_data_len' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36424'>
+          <var-decl name='scan_rsp_data' type-id='be65fec6' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36672'>
+          <var-decl name='scan_rsp_data_len' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36736'>
+          <var-decl name='adv_instances' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36864'>
+          <var-decl name='adv_instance_cnt' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36896'>
+          <var-decl name='cur_adv_instance' type-id='8f048e17' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36912'>
+          <var-decl name='adv_instance_timeout' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='36928'>
+          <var-decl name='adv_instance_expire' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38016'>
+          <var-decl name='irk' type-id='9396cabb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38144'>
+          <var-decl name='rpa_timeout' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='38208'>
+          <var-decl name='rpa_expired' type-id='5ad6e0ef' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39296'>
+          <var-decl name='rpa' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39360'>
+          <var-decl name='open' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39424'>
+          <var-decl name='close' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39488'>
+          <var-decl name='flush' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39552'>
+          <var-decl name='setup' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39616'>
+          <var-decl name='shutdown' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39680'>
+          <var-decl name='send' type-id='9e036c13' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39744'>
+          <var-decl name='notify' type-id='ba77b4f4' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39808'>
+          <var-decl name='hw_error' type-id='c0a08bbe' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39872'>
+          <var-decl name='post_init' type-id='65ee7b03' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='39936'>
+          <var-decl name='set_diag' type-id='100f2106' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40000'>
+          <var-decl name='set_bdaddr' type-id='156888c8' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40064'>
+          <var-decl name='cmd_timeout' type-id='d634cc76' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40128'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40192'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40256'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40320'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='453' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='bdaddr_t' type-id='535be081' filepath='include/net/bluetooth/bluetooth.h' line='196' column='1' id='c2840192'/>
+      <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' naming-typedef-id='c2840192' visibility='default' filepath='include/net/bluetooth/bluetooth.h' line='194' column='1' id='535be081'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='b' type-id='c60dc9f2' visibility='default' filepath='include/net/bluetooth/bluetooth.h' line='195' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='amp_assoc' size-in-bits='5440' is-struct='yes' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='206' column='1' id='36e902a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='offset' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rem_len' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='len_so_far' type-id='d315442e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data' type-id='2731130d' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='211' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='discovery_state' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='63' column='1' id='f98a45fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='state' type-id='08f5ca1f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='unknown' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resolve' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='timestamp' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='last_adv_addr' type-id='c2840192' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='last_adv_addr_type' type-id='f9b06939' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='last_adv_rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='last_adv_flags' type-id='19c2251e' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='last_adv_data' type-id='23e37060' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='824'>
+          <var-decl name='last_adv_data_len' type-id='f9b06939' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='report_invalid_rssi' type-id='b50a4934' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='result_filtering' type-id='b50a4934' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='848'>
+          <var-decl name='limited' type-id='b50a4934' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='856'>
+          <var-decl name='rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='uuid_count' type-id='1dc6a898' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='uuids' type-id='e5ee094d' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='scan_duration' type-id='7359adad' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='89' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='__anonymous_enum__' is-anonymous='yes' filepath='include/net/bluetooth/hci_core.h' line='65' column='1' id='08f5ca1f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='DISCOVERY_STOPPED' value='0'/>
+        <enumerator name='DISCOVERY_STARTING' value='1'/>
+        <enumerator name='DISCOVERY_FINDING' value='2'/>
+        <enumerator name='DISCOVERY_RESOLVING' value='3'/>
+        <enumerator name='DISCOVERY_STOPPING' value='4'/>
+      </enum-decl>
+      <class-decl name='hci_conn_hash' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='92' column='1' id='f39496ab'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acl_num' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='amp_num' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sco_num' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='le_num' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='le_num_slave' type-id='f0981eeb' visibility='default' filepath='include/net/bluetooth/hci_core.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='hci_dev_stats' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='95' column='1' id='2f3316f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='err_rx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='err_tx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cmd_tx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='evt_rx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acl_tx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='acl_rx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sco_tx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='sco_rx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='byte_rx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='byte_tx' type-id='3f1a6b60' visibility='default' filepath='include/net/bluetooth/hci_sock.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c2840192' const='yes' id='89990402'/>
+      <pointer-type-def type-id='89990402' size-in-bits='64' id='c3e18af8'/>
+      <pointer-type-def type-id='c4e92edf' size-in-bits='64' id='9ad862e7'/>
+      <pointer-type-def type-id='d7322b1f' size-in-bits='64' id='65ee7b03'/>
+      <pointer-type-def type-id='61a50456' size-in-bits='64' id='156888c8'/>
+      <pointer-type-def type-id='73adb477' size-in-bits='64' id='9e036c13'/>
+      <pointer-type-def type-id='bd4974e4' size-in-bits='64' id='100f2106'/>
+      <pointer-type-def type-id='6b60ef45' size-in-bits='64' id='c5b94c75'/>
+      <pointer-type-def type-id='0d8415b5' size-in-bits='64' id='e5ee094d'/>
+      <pointer-type-def type-id='cfd6c72c' size-in-bits='64' id='d634cc76'/>
+      <pointer-type-def type-id='1ca1bfac' size-in-bits='64' id='c0a08bbe'/>
+      <pointer-type-def type-id='6071dd22' size-in-bits='64' id='ba77b4f4'/>
+      <function-decl name='hci_alloc_dev' mangled-name='hci_alloc_dev' filepath='net/bluetooth/hci_core.c' line='3191' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hci_alloc_dev'>
+        <return type-id='9ad862e7'/>
+      </function-decl>
+      <function-decl name='hci_unregister_dev' mangled-name='hci_unregister_dev' filepath='net/bluetooth/hci_core.c' line='3400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hci_unregister_dev'>
+        <parameter type-id='9ad862e7' name='hdev' filepath='net/bluetooth/hci_core.c' line='3400' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='hci_register_dev' mangled-name='hci_register_dev' filepath='net/bluetooth/hci_core.c' line='3295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hci_register_dev'>
+        <parameter type-id='9ad862e7' name='hdev' filepath='net/bluetooth/hci_core.c' line='3295' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hci_recv_frame' mangled-name='hci_recv_frame' filepath='net/bluetooth/hci_core.c' line='3502' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hci_recv_frame'>
+        <parameter type-id='9ad862e7' name='hdev' filepath='net/bluetooth/hci_core.c' line='3502' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/bluetooth/hci_core.c' line='3502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='hci_free_dev' mangled-name='hci_free_dev' filepath='net/bluetooth/hci_core.c' line='3287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='hci_free_dev'>
+        <parameter type-id='9ad862e7' name='hdev' filepath='net/bluetooth/hci_core.c' line='3287' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='5433b7f7' size-in-bits='64' id='6a6a70e7'/>
+      <enum-decl name='rfkill_type' filepath='include/uapi/linux/rfkill.h' line='43' column='1' id='6bac1cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RFKILL_TYPE_ALL' value='0'/>
+        <enumerator name='RFKILL_TYPE_WLAN' value='1'/>
+        <enumerator name='RFKILL_TYPE_BLUETOOTH' value='2'/>
+        <enumerator name='RFKILL_TYPE_UWB' value='3'/>
+        <enumerator name='RFKILL_TYPE_WIMAX' value='4'/>
+        <enumerator name='RFKILL_TYPE_WWAN' value='5'/>
+        <enumerator name='RFKILL_TYPE_GPS' value='6'/>
+        <enumerator name='RFKILL_TYPE_FM' value='7'/>
+        <enumerator name='RFKILL_TYPE_NFC' value='8'/>
+        <enumerator name='NUM_RFKILL_TYPES' value='9'/>
+      </enum-decl>
+      <function-type size-in-bits='64' id='d7322b1f'>
+        <parameter type-id='9ad862e7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='61a50456'>
+        <parameter type-id='9ad862e7'/>
+        <parameter type-id='c3e18af8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73adb477'>
+        <parameter type-id='9ad862e7'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bd4974e4'>
+        <parameter type-id='9ad862e7'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfd6c72c'>
+        <parameter type-id='9ad862e7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ca1bfac'>
+        <parameter type-id='9ad862e7'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6071dd22'>
+        <parameter type-id='9ad862e7'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <qualified-type-def type-id='1e4ae69e' const='yes' id='5433b7f7'/>
+      <class-decl name='rfkill_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rfkill.h' line='61' column='1' id='1e4ae69e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_block' type-id='f08d4e50' visibility='default' filepath='include/linux/rfkill.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b69e3ec6' size-in-bits='64' id='f08d4e50'/>
+      <pointer-type-def type-id='182ef894' size-in-bits='64' id='d78909c6'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/bluetooth/lib.c' language='LANG_C89'>
+      <function-decl name='bt_err' mangled-name='bt_err' filepath='net/bluetooth/lib.c' line='170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bt_err'>
+        <parameter type-id='80f4b756' name='format' filepath='net/bluetooth/lib.c' line='170' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/datagram.c' language='LANG_C89'>
+      <function-decl name='skb_copy_datagram_iter' mangled-name='skb_copy_datagram_iter' filepath='net/core/datagram.c' line='533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_datagram_iter'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/datagram.c' line='533' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/datagram.c' line='533' column='1'/>
+        <parameter type-id='4fa10f9e' name='to' filepath='net/core/datagram.c' line='534' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/datagram.c' line='534' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <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='f772df6d' name='sk' filepath='net/core/datagram.c' line='317' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='net/core/datagram.c' line='317' column='1'/>
+        <parameter type-id='95e97e5e' name='noblock' filepath='net/core/datagram.c' line='318' column='1'/>
+        <parameter type-id='7292109c' name='err' filepath='net/core/datagram.c' line='318' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </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='f772df6d' name='sk' filepath='net/core/datagram.c' line='327' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/datagram.c' line='327' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='datagram_poll' mangled-name='datagram_poll' filepath='net/core/datagram.c' line='776' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='datagram_poll'>
+        <parameter type-id='77e79a4b' name='file' filepath='net/core/datagram.c' line='776' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/datagram.c' line='776' column='1'/>
+        <parameter type-id='a54c778f' name='wait' filepath='net/core/datagram.c' line='777' column='1'/>
+        <return type-id='8f254b08'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/dev.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bb08c7e1' size-in-bits='infinite' id='f443352a'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='ip_mc_list' is-struct='yes' visibility='default' is-declaration-only='yes' id='c2a59aaa'/>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='2048' id='13faf778'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <class-decl name='in_ifaddr' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/linux/inetdevice.h' line='137' column='1' id='b95a5ed3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hash' type-id='03a4a074' 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='3a639063' 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='fc6f14a9' 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='e3d8ce29' 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='78a133c2' 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='78a133c2' 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='78a133c2' 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='3f1a6b60' 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='78a133c2' 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='002ac4a6' 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='002ac4a6' 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='3f1a6b60' 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='ac1fa8c0' 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='3f1a6b60' 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='3f1a6b60' 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='7359adad' 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='7359adad' visibility='default' filepath='include/linux/inetdevice.h' line='156' column='1'/>
+        </data-member>
+      </class-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='28' column='1' id='bb08c7e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dist' type-id='1dc6a898' visibility='default' filepath='include/linux/cpu_rmap.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='softnet_data' size-in-bits='5632' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='3063' column='1' id='035aa62d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='3064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='process_queue' type-id='e61c85d0' visibility='default' filepath='include/linux/netdevice.h' line='3065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='processed' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='time_squeeze' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='received_rps' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rps_ipi_list' type-id='80c9c0cd' visibility='default' filepath='include/linux/netdevice.h' line='3072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='flow_limit' type-id='4c83bbe7' visibility='default' filepath='include/linux/netdevice.h' line='3075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='output_queue' type-id='ee406209' visibility='default' filepath='include/linux/netdevice.h' line='3077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='output_queue_tailp' type-id='325a7d19' visibility='default' filepath='include/linux/netdevice.h' line='3078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='completion_queue' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netdevice.h' line='3079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='xmit' type-id='75fc4829' visibility='default' filepath='include/linux/netdevice.h' line='3087' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='input_queue_head' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='csd' type-id='223a68bd' visibility='default' filepath='include/linux/netdevice.h' line='3095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='rps_ipi_next' type-id='80c9c0cd' visibility='default' filepath='include/linux/netdevice.h' line='3096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='cpu' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='input_queue_tail' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dropped' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='input_pkt_queue' type-id='e61c85d0' visibility='default' filepath='include/linux/netdevice.h' line='3101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='backlog' type-id='291e3bb5' visibility='default' filepath='include/linux/netdevice.h' line='3102' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sd_flow_limit' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='3049' column='1' id='7ba771af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='3050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_buckets' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='history_head' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='3052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='history' type-id='13faf778' visibility='default' filepath='include/linux/netdevice.h' line='3053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='buckets' type-id='29c3368c' visibility='default' filepath='include/linux/netdevice.h' line='3054' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/netdevice.h' line='3084' column='1' id='75fc4829'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recursion' type-id='1dc6a898' visibility='default' filepath='include/linux/netdevice.h' line='3085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='more' type-id='f9b06939' visibility='default' filepath='include/linux/netdevice.h' line='3086' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='gro_result_t' type-id='3facc5aa' filepath='include/linux/netdevice.h' line='382' column='1' id='dc1b1685'/>
+      <enum-decl name='gro_result' filepath='include/linux/netdevice.h' line='374' column='1' id='3facc5aa'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='skb_free_reason' filepath='include/linux/netdevice.h' line='3663' column='1' id='1f17c6b4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SKB_REASON_CONSUMED' value='0'/>
+        <enumerator name='SKB_REASON_DROPPED' value='1'/>
+      </enum-decl>
+      <class-decl name='packet_type' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='2431' column='1' id='164a08b2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='84a5c3d4' visibility='default' filepath='include/linux/netdevice.h' line='2432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ignore_outgoing' type-id='b50a4934' visibility='default' filepath='include/linux/netdevice.h' line='2433' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='2434' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='func' type-id='29242f3e' visibility='default' filepath='include/linux/netdevice.h' line='2435' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list_func' type-id='af0e0afc' visibility='default' filepath='include/linux/netdevice.h' line='2439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id_match' type-id='ca97eb2a' visibility='default' filepath='include/linux/netdevice.h' line='2442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='af_packet_priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netdevice.h' line='2444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='2445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2449' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='2450' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='b95a5ed3' size-in-bits='64' id='3a639063'/>
+      <pointer-type-def type-id='3a60b114' size-in-bits='64' id='29242f3e'/>
+      <pointer-type-def type-id='c2a59aaa' size-in-bits='64' id='26479c18'/>
+      <pointer-type-def type-id='26479c18' size-in-bits='64' id='74bae2b6'/>
+      <pointer-type-def type-id='164a08b2' size-in-bits='64' id='1c079e60'/>
+      <pointer-type-def type-id='7ba771af' size-in-bits='64' id='4c83bbe7'/>
+      <pointer-type-def type-id='035aa62d' size-in-bits='64' id='80c9c0cd'/>
+      <pointer-type-def type-id='e91cb1f0' size-in-bits='64' id='ca97eb2a'/>
+      <pointer-type-def type-id='950dfd7a' size-in-bits='64' id='af0e0afc'/>
+      <function-decl name='netif_set_real_num_tx_queues' mangled-name='netif_set_real_num_tx_queues' filepath='net/core/dev.c' line='2577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_tx_queues'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='2577' column='1'/>
+        <parameter type-id='f0981eeb' name='txq' filepath='net/core/dev.c' line='2577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </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='2627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_set_real_num_rx_queues'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='2627' column='1'/>
+        <parameter type-id='f0981eeb' name='rxq' filepath='net/core/dev.c' line='2627' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_rx_handler_unregister' mangled-name='netdev_rx_handler_unregister' filepath='net/core/dev.c' line='4697' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_unregister'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='4697' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_napi_add' mangled-name='netif_napi_add' filepath='net/core/dev.c' line='6264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_add'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='6264' column='1'/>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='6264' column='1'/>
+        <parameter type-id='f07d90b4' name='poll' filepath='net/core/dev.c' line='6265' column='1'/>
+        <parameter type-id='95e97e5e' name='weight' filepath='net/core/dev.c' line='6265' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_unlink' mangled-name='netdev_upper_dev_unlink' filepath='net/core/dev.c' line='7435' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_unlink'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='7435' column='1'/>
+        <parameter type-id='68a2d05b' name='upper_dev' filepath='net/core/dev.c' line='7436' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_lower_state_changed' mangled-name='netdev_lower_state_changed' filepath='net/core/dev.c' line='7668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_lower_state_changed'>
+        <parameter type-id='68a2d05b' name='lower_dev' filepath='net/core/dev.c' line='7668' column='1'/>
+        <parameter type-id='eaa32e2f' name='lower_state_info' filepath='net/core/dev.c' line='7669' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_netdevice' mangled-name='register_netdevice' filepath='net/core/dev.c' line='9080' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9080' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_queue' mangled-name='unregister_netdevice_queue' filepath='net/core/dev.c' line='9747' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_queue'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9747' column='1'/>
+        <parameter type-id='e84b031a' name='head' filepath='net/core/dev.c' line='9747' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <var-decl name='softnet_data' type-id='035aa62d' mangled-name='softnet_data' visibility='default' filepath='net/core/dev.c' line='278' column='1' elf-symbol-id='softnet_data'/>
+      <var-decl name='rps_needed' type-id='237c0d27' mangled-name='rps_needed' visibility='default' filepath='net/core/dev.c' line='3908' column='1' elf-symbol-id='rps_needed'/>
+      <function-decl name='register_netdevice_notifier' mangled-name='register_netdevice_notifier' filepath='net/core/dev.c' line='1557' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdevice_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/dev.c' line='1557' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_get_by_index' mangled-name='dev_get_by_index' filepath='net/core/dev.c' line='784' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='784' column='1'/>
+        <parameter type-id='95e97e5e' name='ifindex' filepath='net/core/dev.c' line='784' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='netdev_warn' mangled-name='netdev_warn' filepath='net/core/dev.c' line='10134' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_warn'>
+        <parameter type-id='2ce52478' name='dev' filepath='net/core/dev.c' line='10134' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='net/core/dev.c' line='10134' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_netdev_mqs' mangled-name='alloc_netdev_mqs' filepath='net/core/dev.c' line='9567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_netdev_mqs'>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='net/core/dev.c' line='9567' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='9567' column='1'/>
+        <parameter type-id='002ac4a6' name='name_assign_type' filepath='net/core/dev.c' line='9568' column='1'/>
+        <parameter type-id='548eee3a' name='setup' filepath='net/core/dev.c' line='9569' column='1'/>
+        <parameter type-id='f0981eeb' name='txqs' filepath='net/core/dev.c' line='9570' column='1'/>
+        <parameter type-id='f0981eeb' name='rxqs' filepath='net/core/dev.c' line='9570' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='free_netdev' mangled-name='free_netdev' filepath='net/core/dev.c' line='9683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='free_netdev'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9683' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__skb_gso_segment' mangled-name='__skb_gso_segment' filepath='net/core/dev.c' line='3003' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_gso_segment'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3003' column='1'/>
+        <parameter type-id='f9f4b16f' name='features' filepath='net/core/dev.c' line='3004' column='1'/>
+        <parameter type-id='b50a4934' name='tx_path' filepath='net/core/dev.c' line='3004' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='napi_disable' mangled-name='napi_disable' filepath='net/core/dev.c' line='6290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_disable'>
+        <parameter type-id='c50361c5' name='n' filepath='net/core/dev.c' line='6290' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_napi_del' mangled-name='netif_napi_del' filepath='net/core/dev.c' line='6320' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_napi_del'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='6320' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_checksum_help' mangled-name='skb_checksum_help' filepath='net/core/dev.c' line='2842' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_checksum_help'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2842' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='napi_gro_receive' mangled-name='napi_gro_receive' filepath='net/core/dev.c' line='5672' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_gro_receive'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='5672' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='5672' column='1'/>
+        <return type-id='dc1b1685'/>
+      </function-decl>
+      <function-decl name='napi_complete_done' mangled-name='napi_complete_done' filepath='net/core/dev.c' line='6007' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_complete_done'>
+        <parameter type-id='c50361c5' name='n' filepath='net/core/dev.c' line='6007' column='1'/>
+        <parameter type-id='95e97e5e' name='work_done' filepath='net/core/dev.c' line='6007' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='napi_schedule_prep' mangled-name='napi_schedule_prep' filepath='net/core/dev.c' line='5964' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_schedule_prep'>
+        <parameter type-id='c50361c5' name='n' filepath='net/core/dev.c' line='5964' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__napi_schedule' mangled-name='__napi_schedule' filepath='net/core/dev.c' line='5945' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_schedule'>
+        <parameter type-id='c50361c5' name='n' filepath='net/core/dev.c' line='5945' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_get_by_name' mangled-name='dev_get_by_name' filepath='net/core/dev.c' line='710' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_name'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='710' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='710' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='dev_get_by_index_rcu' mangled-name='dev_get_by_index_rcu' filepath='net/core/dev.c' line='759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_index_rcu'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='759' column='1'/>
+        <parameter type-id='95e97e5e' name='ifindex' filepath='net/core/dev.c' line='759' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='netif_receive_skb' mangled-name='netif_receive_skb' filepath='net/core/dev.c' line='5214' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_receive_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='5214' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netif_tx_wake_queue' mangled-name='netif_tx_wake_queue' filepath='net/core/dev.c' line='2704' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_wake_queue'>
+        <parameter type-id='35b28c4f' name='dev_queue' filepath='net/core/dev.c' line='2704' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_info' mangled-name='netdev_info' filepath='net/core/dev.c' line='10136' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_info'>
+        <parameter type-id='2ce52478' name='dev' filepath='net/core/dev.c' line='10136' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='net/core/dev.c' line='10136' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_rx' mangled-name='netif_rx' filepath='net/core/dev.c' line='4465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='4465' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_set_mac_address' mangled-name='dev_set_mac_address' filepath='net/core/dev.c' line='8166' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_mac_address'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='8166' column='1'/>
+        <parameter type-id='5c0abad8' name='sa' filepath='net/core/dev.c' line='8166' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='8167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__dev_get_by_name' mangled-name='__dev_get_by_name' filepath='net/core/dev.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_get_by_name'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='660' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='660' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_notifier' mangled-name='unregister_netdevice_notifier' filepath='net/core/dev.c' line='1627' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/dev.c' line='1627' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__dev_kfree_skb_any' mangled-name='__dev_kfree_skb_any' filepath='net/core/dev.c' line='2739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_kfree_skb_any'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2739' column='1'/>
+        <parameter type-id='1f17c6b4' name='reason' filepath='net/core/dev.c' line='2739' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_hash_del' mangled-name='napi_hash_del' filepath='net/core/dev.c' line='6222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_hash_del'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='6222' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='netdev_err' mangled-name='netdev_err' filepath='net/core/dev.c' line='10133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_err'>
+        <parameter type-id='2ce52478' name='dev' filepath='net/core/dev.c' line='10133' column='1'/>
+        <parameter type-id='80f4b756' name='fmt' filepath='net/core/dev.c' line='10133' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_rx_ni' mangled-name='netif_rx_ni' filepath='net/core/dev.c' line='4478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_rx_ni'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='4478' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_netdevice_many' mangled-name='unregister_netdevice_many' filepath='net/core/dev.c' line='9768' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdevice_many'>
+        <parameter type-id='e84b031a' name='head' filepath='net/core/dev.c' line='9768' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_printk' mangled-name='netdev_printk' filepath='net/core/dev.c' line='10096' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_printk'>
+        <parameter type-id='80f4b756' name='level' filepath='net/core/dev.c' line='10096' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='net/core/dev.c' line='10096' column='1'/>
+        <parameter type-id='80f4b756' name='format' filepath='net/core/dev.c' line='10097' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_device_detach' mangled-name='netif_device_detach' filepath='net/core/dev.c' line='2755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_detach'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='2755' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_device_attach' mangled-name='netif_device_attach' filepath='net/core/dev.c' line='2770' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_device_attach'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='2770' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_schedule_queue' mangled-name='netif_schedule_queue' filepath='net/core/dev.c' line='2692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_schedule_queue'>
+        <parameter type-id='35b28c4f' name='txq' filepath='net/core/dev.c' line='2692' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_get_by_name_rcu' mangled-name='dev_get_by_name_rcu' filepath='net/core/dev.c' line='685' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_by_name_rcu'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='685' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='685' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <function-decl name='unregister_netdev' mangled-name='unregister_netdev' filepath='net/core/dev.c' line='9792' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netdev'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9792' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='synchronize_net' mangled-name='synchronize_net' filepath='net/core/dev.c' line='9724' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='synchronize_net'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_netdev' mangled-name='register_netdev' filepath='net/core/dev.c' line='9298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netdev'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9298' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='passthru_features_check' mangled-name='passthru_features_check' filepath='net/core/dev.c' line='3120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='passthru_features_check'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3120' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='3121' column='1'/>
+        <parameter type-id='f9f4b16f' name='features' filepath='net/core/dev.c' line='3122' column='1'/>
+        <return type-id='f9f4b16f'/>
+      </function-decl>
+      <function-decl name='netif_tx_stop_all_queues' mangled-name='netif_tx_stop_all_queues' filepath='net/core/dev.c' line='9026' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_tx_stop_all_queues'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9026' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_stacked_transfer_operstate' mangled-name='netif_stacked_transfer_operstate' filepath='net/core/dev.c' line='8923' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_stacked_transfer_operstate'>
+        <parameter type-id='2ce52478' name='rootdev' filepath='net/core/dev.c' line='8923' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='8924' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_pick_tx' mangled-name='netdev_pick_tx' filepath='net/core/dev.c' line='3630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_pick_tx'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='3630' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3630' column='1'/>
+        <parameter type-id='68a2d05b' name='sb_dev' filepath='net/core/dev.c' line='3631' column='1'/>
+        <return type-id='1dc6a898'/>
+      </function-decl>
+      <function-decl name='netdev_upper_dev_link' mangled-name='netdev_upper_dev_link' filepath='net/core/dev.c' line='7394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_upper_dev_link'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='7394' column='1'/>
+        <parameter type-id='68a2d05b' name='upper_dev' filepath='net/core/dev.c' line='7395' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7396' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_rx_handler_register' mangled-name='netdev_rx_handler_register' filepath='net/core/dev.c' line='4671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_rx_handler_register'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='4671' column='1'/>
+        <parameter type-id='da1cb816' name='rx_handler' filepath='net/core/dev.c' line='4672' column='1'/>
+        <parameter type-id='eaa32e2f' name='rx_handler_data' filepath='net/core/dev.c' line='4673' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_notify_peers' mangled-name='netdev_notify_peers' filepath='net/core/dev.c' line='1290' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_notify_peers'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='1290' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netdev_master_upper_dev_link' mangled-name='netdev_master_upper_dev_link' filepath='net/core/dev.c' line='7417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_master_upper_dev_link'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='7417' column='1'/>
+        <parameter type-id='68a2d05b' name='upper_dev' filepath='net/core/dev.c' line='7418' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_priv' filepath='net/core/dev.c' line='7419' column='1'/>
+        <parameter type-id='eaa32e2f' name='upper_info' filepath='net/core/dev.c' line='7419' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='7420' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_increment_features' mangled-name='netdev_increment_features' filepath='net/core/dev.c' line='9999' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_increment_features'>
+        <parameter type-id='f9f4b16f' name='all' filepath='net/core/dev.c' line='9999' column='1'/>
+        <parameter type-id='f9f4b16f' name='one' filepath='net/core/dev.c' line='10000' column='1'/>
+        <parameter type-id='f9f4b16f' name='mask' filepath='net/core/dev.c' line='10000' column='1'/>
+        <return type-id='f9f4b16f'/>
+      </function-decl>
+      <function-decl name='netdev_change_features' mangled-name='netdev_change_features' filepath='net/core/dev.c' line='8907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_change_features'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='8907' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='napi_gro_flush' mangled-name='napi_gro_flush' filepath='net/core/dev.c' line='5383' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_gro_flush'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/dev.c' line='5383' column='1'/>
+        <parameter type-id='b50a4934' name='flush_old' filepath='net/core/dev.c' line='5383' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='init_dummy_netdev' mangled-name='init_dummy_netdev' filepath='net/core/dev.c' line='9251' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='init_dummy_netdev'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9251' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_set_mtu' mangled-name='dev_set_mtu' filepath='net/core/dev.c' line='8081' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_set_mtu'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='8081' column='1'/>
+        <parameter type-id='95e97e5e' name='new_mtu' filepath='net/core/dev.c' line='8081' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_remove_pack' mangled-name='dev_remove_pack' filepath='net/core/dev.c' line='387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_remove_pack'>
+        <parameter type-id='1c079e60' name='pt' filepath='net/core/dev.c' line='387' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_queue_xmit' mangled-name='dev_queue_xmit' filepath='net/core/dev.c' line='3820' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_queue_xmit'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='3820' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_open' mangled-name='dev_open' filepath='net/core/dev.c' line='1355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_open'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='1355' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/core/dev.c' line='1355' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_get_stats' mangled-name='dev_get_stats' filepath='net/core/dev.c' line='9499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_get_stats'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='9499' column='1'/>
+        <parameter type-id='bd3860fe' name='storage' filepath='net/core/dev.c' line='9500' column='1'/>
+        <return type-id='bd3860fe'/>
+      </function-decl>
+      <function-decl name='dev_close' mangled-name='dev_close' filepath='net/core/dev.c' line='1455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_close'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='1455' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_alloc_name' mangled-name='dev_alloc_name' filepath='net/core/dev.c' line='1059' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_alloc_name'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='1059' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='net/core/dev.c' line='1059' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_add_pack' mangled-name='dev_add_pack' filepath='net/core/dev.c' line='332' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_add_pack'>
+        <parameter type-id='1c079e60' name='pt' filepath='net/core/dev.c' line='332' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='call_netdevice_notifiers' mangled-name='call_netdevice_notifiers' filepath='net/core/dev.c' line='1694' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='call_netdevice_notifiers'>
+        <parameter type-id='7359adad' name='val' filepath='net/core/dev.c' line='1694' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='1694' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__netif_set_xps_queue' mangled-name='__netif_set_xps_queue' filepath='net/core/dev.c' line='2243' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netif_set_xps_queue'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/dev.c' line='2243' column='1'/>
+        <parameter type-id='f9b37274' name='mask' filepath='net/core/dev.c' line='2243' column='1'/>
+        <parameter type-id='1dc6a898' name='index' filepath='net/core/dev.c' line='2244' column='1'/>
+        <parameter type-id='b50a4934' name='is_rxqs_map' filepath='net/core/dev.c' line='2244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__dev_kfree_skb_irq' mangled-name='__dev_kfree_skb_irq' filepath='net/core/dev.c' line='2717' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_kfree_skb_irq'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/dev.c' line='2717' column='1'/>
+        <parameter type-id='1f17c6b4' name='reason' filepath='net/core/dev.c' line='2717' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__dev_get_by_index' mangled-name='__dev_get_by_index' filepath='net/core/dev.c' line='735' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__dev_get_by_index'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/dev.c' line='735' column='1'/>
+        <parameter type-id='95e97e5e' name='ifindex' filepath='net/core/dev.c' line='735' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+      <class-decl name='napi_struct' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='322' column='1' id='291e3bb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gro_bitmask' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='f07d90b4' visibility='default' filepath='include/linux/netdevice.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gro_hash' type-id='91671be8' visibility='default' filepath='include/linux/netdevice.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netdevice.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='rx_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rx_count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='timer' type-id='b6993efc' visibility='default' filepath='include/linux/netdevice.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='napi_hash_node' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='351' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='3a60b114'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e91cb1f0'>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='f772df6d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='950dfd7a'>
+        <parameter type-id='e84b031a'/>
+        <parameter type-id='1c079e60'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='016b3662' size-in-bits='64' id='f07d90b4'/>
+      <pointer-type-def type-id='291e3bb5' size-in-bits='64' id='c50361c5'/>
+      <array-type-def dimensions='1' type-id='b9535066' size-in-bits='1536' id='91671be8'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='gro_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='308' column='1' id='b9535066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='310' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/dev_addr_lists.c' language='LANG_C89'>
+      <pointer-type-def type-id='44a1ec32' size-in-bits='64' id='9ed060a0'/>
+      <function-decl name='dev_uc_unsync' mangled-name='dev_uc_unsync' filepath='net/core/dev_addr_lists.c' line='688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_unsync'>
+        <parameter type-id='68a2d05b' name='to' filepath='net/core/dev_addr_lists.c' line='688' column='1'/>
+        <parameter type-id='68a2d05b' name='from' filepath='net/core/dev_addr_lists.c' line='688' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__hw_addr_unsync' mangled-name='__hw_addr_unsync' filepath='net/core/dev_addr_lists.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_unsync'>
+        <parameter type-id='9ed060a0' name='to_list' filepath='net/core/dev_addr_lists.c' line='211' column='1'/>
+        <parameter type-id='9ed060a0' name='from_list' filepath='net/core/dev_addr_lists.c' line='212' column='1'/>
+        <parameter type-id='95e97e5e' name='addr_len' filepath='net/core/dev_addr_lists.c' line='213' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_uc_sync_multiple' mangled-name='dev_uc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='663' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_uc_sync_multiple'>
+        <parameter type-id='68a2d05b' name='to' filepath='net/core/dev_addr_lists.c' line='663' column='1'/>
+        <parameter type-id='68a2d05b' name='from' filepath='net/core/dev_addr_lists.c' line='663' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dev_mc_unsync' mangled-name='dev_mc_unsync' filepath='net/core/dev_addr_lists.c' line='909' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_unsync'>
+        <parameter type-id='68a2d05b' name='to' filepath='net/core/dev_addr_lists.c' line='909' column='1'/>
+        <parameter type-id='68a2d05b' name='from' filepath='net/core/dev_addr_lists.c' line='909' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='dev_mc_sync_multiple' mangled-name='dev_mc_sync_multiple' filepath='net/core/dev_addr_lists.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dev_mc_sync_multiple'>
+        <parameter type-id='68a2d05b' name='to' filepath='net/core/dev_addr_lists.c' line='884' column='1'/>
+        <parameter type-id='68a2d05b' name='from' filepath='net/core/dev_addr_lists.c' line='884' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hw_addr_sync' mangled-name='__hw_addr_sync' filepath='net/core/dev_addr_lists.c' line='192' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_sync'>
+        <parameter type-id='9ed060a0' name='to_list' filepath='net/core/dev_addr_lists.c' line='192' column='1'/>
+        <parameter type-id='9ed060a0' name='from_list' filepath='net/core/dev_addr_lists.c' line='193' column='1'/>
+        <parameter type-id='95e97e5e' name='addr_len' filepath='net/core/dev_addr_lists.c' line='194' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__hw_addr_init' mangled-name='__hw_addr_init' filepath='net/core/dev_addr_lists.c' line='417' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__hw_addr_init'>
+        <parameter type-id='9ed060a0' name='list' filepath='net/core/dev_addr_lists.c' line='417' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/dst.c' language='LANG_C89'>
+      <function-decl name='dst_release' mangled-name='dst_release' filepath='net/core/dst.c' line='169' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dst_release'>
+        <parameter type-id='141b6427' name='dst' filepath='net/core/dst.c' line='169' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/ethtool.c' language='LANG_C89'>
+      <class-decl name='xsk_queue' is-struct='yes' visibility='default' is-declaration-only='yes' id='7f424251'/>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='infinite' id='09b35382'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='xdp_umem_page' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='26' column='1' id='8ea64c8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='eaa32e2f' visibility='default' filepath='include/net/xdp_sock.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dma' type-id='cf29c9b3' visibility='default' filepath='include/net/xdp_sock.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xdp_umem_fq_reuse' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/xdp_sock.h' line='31' column='1' id='c06daf3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nentries' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='length' type-id='19c2251e' visibility='default' filepath='include/net/xdp_sock.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handles' type-id='09b35382' visibility='default' filepath='include/net/xdp_sock.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c06daf3b' size-in-bits='64' id='b925f68b'/>
+      <pointer-type-def type-id='8ea64c8e' size-in-bits='64' id='48e57944'/>
+      <pointer-type-def type-id='7f424251' size-in-bits='64' id='9fa25a99'/>
+      <function-decl name='__ethtool_get_link_ksettings' mangled-name='__ethtool_get_link_ksettings' filepath='net/core/ethtool.c' line='545' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ethtool_get_link_ksettings'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/ethtool.c' line='545' column='1'/>
+        <parameter type-id='70de91e2' name='link_ksettings' filepath='net/core/ethtool.c' line='546' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_ts_info' mangled-name='ethtool_op_get_ts_info' filepath='net/core/ethtool.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_ts_info'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/ethtool.c' line='42' column='1'/>
+        <parameter type-id='fa058983' name='info' filepath='net/core/ethtool.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ethtool_op_get_link' mangled-name='ethtool_op_get_link' filepath='net/core/ethtool.c' line='36' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ethtool_op_get_link'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/ethtool.c' line='36' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/filter.c' language='LANG_C89'>
+      <class-decl name='xdp_buff' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xdp.h' line='66' column='1' id='175944cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='eaa32e2f' 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='eaa32e2f' 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='eaa32e2f' 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='eaa32e2f' 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='7359adad' 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='8e35a44c' visibility='default' filepath='include/net/xdp.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='175944cd' size-in-bits='64' id='38ed603d'/>
+      <pointer-type-def type-id='eb0d6f26' size-in-bits='64' id='8e35a44c'/>
+      <function-decl name='bpf_warn_invalid_xdp_action' mangled-name='bpf_warn_invalid_xdp_action' filepath='net/core/filter.c' line='6913' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_warn_invalid_xdp_action'>
+        <parameter type-id='19c2251e' name='act' filepath='net/core/filter.c' line='6913' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='bpf_prog_destroy' mangled-name='bpf_prog_destroy' filepath='net/core/filter.c' line='1426' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_destroy'>
+        <parameter type-id='bdcee7ae' name='fp' filepath='net/core/filter.c' line='1426' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_do_flush_map' mangled-name='xdp_do_flush_map' filepath='net/core/filter.c' line='3546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_flush_map'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_do_redirect' mangled-name='xdp_do_redirect' filepath='net/core/filter.c' line='3631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_do_redirect'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/filter.c' line='3631' column='1'/>
+        <parameter type-id='38ed603d' name='xdp' filepath='net/core/filter.c' line='3631' column='1'/>
+        <parameter type-id='bdcee7ae' name='xdp_prog' filepath='net/core/filter.c' line='3632' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='bpf_prog_create' mangled-name='bpf_prog_create' filepath='net/core/filter.c' line='1338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='bpf_prog_create'>
+        <parameter type-id='50b674cc' name='pfp' filepath='net/core/filter.c' line='1338' column='1'/>
+        <parameter type-id='e93ad915' name='fprog' filepath='net/core/filter.c' line='1338' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/flow_dissector.c' language='LANG_C89'>
+      <class-decl name='nf_conntrack_helper' is-struct='yes' visibility='default' is-declaration-only='yes' id='c54a70ec'/>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='256' id='639bec1b'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='deb3203d' size-in-bits='infinite' id='c094d415'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='702d8a24' size-in-bits='320' id='80542108'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='80b664d7' size-in-bits='896' id='379a2915'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f59a8358' size-in-bits='infinite' id='720e3ec4'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='40' id='8f1320db'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='892641a4' size-in-bits='16' id='a212abfb'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='160' id='4d5a4f46'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='432' id='b48ea880'>
+        <subrange length='27' type-id='7ff19f0f' id='fddb82f0'/>
+      </array-type-def>
+      <class-decl name='flow_dissector' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/flow_dissector.h' line='269' column='1' id='379be6ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='used_keys' type-id='f0981eeb' visibility='default' filepath='include/net/flow_dissector.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='b48ea880' visibility='default' filepath='include/net/flow_dissector.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_conntrack_proto' size-in-bits='512' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='34' column='1' id='1f42e327'>
+        <data-member access='public'>
+          <var-decl name='dccp' type-id='f0e59128' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sctp' type-id='6bb7a9ad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp' type-id='3ffb049e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp' type-id='21861431' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gre' type-id='0b2cc27e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tmpl_padto' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='41' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xt_table_info' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='248' column='1' id='68a72cd7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='250' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='number' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='initial_entries' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stacksize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='jumpstack' type-id='30e664af' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='entries' type-id='5e6516ee' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='267' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='96' column='1' id='21fca59c'>
+        <data-member access='public'>
+          <var-decl name='nh_info' type-id='e55edb2e' visibility='default' filepath='include/net/nexthop.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nh_grp' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='98' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='nh_info' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='49' column='1' id='3f017308'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_hash' type-id='03a4a074' visibility='default' filepath='include/net/nexthop.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_parent' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='reject_nh' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='757a0dbc' visibility='default' filepath='include/net/nexthop.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__7' size-in-bits='832' is-anonymous='yes' visibility='default' filepath='include/net/nexthop.h' line='56' column='1' id='757a0dbc'>
+        <data-member access='public'>
+          <var-decl name='fib_nhc' type-id='e1f89457' visibility='default' filepath='include/net/nexthop.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fib_nh' type-id='deb3203d' visibility='default' filepath='include/net/nexthop.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='fib6_nh' type-id='979d5bbb' visibility='default' filepath='include/net/nexthop.h' line='59' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fib_nh' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='103' column='1' id='deb3203d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip_fib.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='nh_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='nh_parent' type-id='09dcd1bf' visibility='default' filepath='include/net/ip_fib.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nh_saddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nh_saddr_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_info' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='131' column='1' id='85bdf127'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fib_hash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fib_lhash' type-id='03a4a074' visibility='default' filepath='include/net/ip_fib.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip_fib.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fib_net' type-id='a2bff676' visibility='default' filepath='include/net/ip_fib.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fib_treeref' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='fib_clntref' type-id='64615833' visibility='default' filepath='include/net/ip_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='fib_flags' type-id='f0981eeb' visibility='default' filepath='include/net/ip_fib.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='fib_dead' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='552'>
+          <var-decl name='fib_protocol' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='560'>
+          <var-decl name='fib_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='568'>
+          <var-decl name='fib_type' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fib_prefsrc' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='fib_tb_id' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='fib_priority' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='fib_metrics' type-id='8eff91b0' visibility='default' filepath='include/net/ip_fib.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fib_nhs' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='fib_nh_is_v6' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='808'>
+          <var-decl name='nh_updated' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/ip_fib.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='fib_nh' type-id='c094d415' visibility='default' filepath='include/net/ip_fib.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='72' column='1' id='6ed3e587'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spare' type-id='c5ff416f' visibility='default' filepath='include/net/nexthop.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_nh' type-id='1dc6a898' visibility='default' filepath='include/net/nexthop.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mpath' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='has_v4' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_entries' type-id='720e3ec4' visibility='default' filepath='include/net/nexthop.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nh_grp_entry' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='63' column='1' id='f59a8358'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='weight' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='upper_bound' type-id='49178f86' visibility='default' filepath='include/net/nexthop.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nh_parent' type-id='f32120a7' visibility='default' filepath='include/net/nexthop.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='69' column='1' id='d3056556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='portid' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conn' size-in-bits='2240' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='60' column='1' id='cf9b45ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ct_general' type-id='d9fc42c3' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tuplehash' type-id='379a2915' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='status' type-id='7359adad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cpu' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ct_net' type-id='c9df1e6c' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nat_bysource' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='__nfct_init_offset' type-id='cdd897ad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='master' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='mark' type-id='9586cc7b' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='secmark' type-id='9586cc7b' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ext' type-id='3ba63619' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='proto' type-id='1f42e327' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='android_oem_data1' type-id='91ce1af9' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='114' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='26' column='1' id='d9fc42c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use' type-id='49178f86' visibility='default' filepath='include/linux/netfilter/nf_conntrack_common.h' line='27' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_tuple_hash' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='119' column='1' id='80b664d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hnnode' type-id='5bd248e7' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tuple' type-id='9805d802' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='121' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_tuple' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='37' column='1' id='9805d802'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='bd087e00' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst' type-id='ac5824ad' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_man' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='29' column='1' id='bd087e00'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='l3num' type-id='ea2e3595' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_inet_addr' size-in-bits='128' visibility='default' filepath='include/uapi/linux/netfilter.h' line='68' column='1' id='8c17f46b'>
+        <data-member access='public'>
+          <var-decl name='all' type-id='3fa29bab' visibility='default' filepath='include/uapi/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='in' type-id='34f03654' visibility='default' filepath='include/uapi/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='in6' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='in_addr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/in.h' line='85' column='1' id='34f03654'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='s_addr' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/in.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='nf_conntrack_man_proto' size-in-bits='16' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='20' column='1' id='cfd75634'>
+        <data-member access='public'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='icmp' type-id='05cd0c57' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='41' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='24' column='1' id='6a7a7fe9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='port' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='25' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='30' column='1' id='05cd0c57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='31' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='39' column='1' id='29e36f6d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='40' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int16_t' type-id='1dc6a898' filepath='include/linux/types.h' line='100' column='1' id='ea2e3595'/>
+      <class-decl name='__anonymous_struct__7' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='41' column='1' id='ac5824ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='3dee4294' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='protonum' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='dir' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='71' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__10' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='43' column='1' id='3dee4294'>
+        <data-member access='public'>
+          <var-decl name='all' type-id='84a5c3d4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tcp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='udp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='icmp' type-id='40dd2ad6' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dccp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sctp' type-id='6a7a7fe9' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gre' type-id='29e36f6d' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='64' 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/net/netfilter/nf_conntrack_tuple.h' line='53' column='1' id='40dd2ad6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='92' column='1' id='cdd897ad'/>
+      <typedef-decl name='u_int32_t' type-id='19c2251e' filepath='include/linux/types.h' line='102' column='1' id='9586cc7b'/>
+      <class-decl name='nf_ct_ext' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='45' column='1' id='f54c6661'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='offset' type-id='8f1320db' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/net/netfilter/nf_conntrack_extend.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_dccp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='30' column='1' id='f0e59128'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='role' type-id='a212abfb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='state' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='last_pkt' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_dir' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='handshake_seq' type-id='f1f7b9a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_dccp.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ct_sctp' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='8' column='1' id='6bb7a9ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='e8eb3890' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='vtag' type-id='f41331a9' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='last_dir' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_sctp.h' line='13' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sctp_conntrack' filepath='include/uapi/linux/netfilter/nf_conntrack_sctp.h' line='8' column='1' id='e8eb3890'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SCTP_CONNTRACK_NONE' value='0'/>
+        <enumerator name='SCTP_CONNTRACK_CLOSED' value='1'/>
+        <enumerator name='SCTP_CONNTRACK_COOKIE_WAIT' value='2'/>
+        <enumerator name='SCTP_CONNTRACK_COOKIE_ECHOED' value='3'/>
+        <enumerator name='SCTP_CONNTRACK_ESTABLISHED' value='4'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_SENT' value='5'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_RECD' value='6'/>
+        <enumerator name='SCTP_CONNTRACK_SHUTDOWN_ACK_SENT' value='7'/>
+        <enumerator name='SCTP_CONNTRACK_HEARTBEAT_SENT' value='8'/>
+        <enumerator name='SCTP_CONNTRACK_HEARTBEAT_ACKED' value='9'/>
+        <enumerator name='SCTP_CONNTRACK_MAX' value='10'/>
+      </enum-decl>
+      <class-decl name='ip_ct_tcp' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='17' column='1' id='3ffb049e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seen' type-id='80542108' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='state' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='last_dir' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='retrans' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='last_index' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='last_seq' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='last_ack' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='last_end' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='last_win' type-id='ea2e3595' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='last_wscale' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='last_flags' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_ct_tcp_state' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='8' column='1' id='702d8a24'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='td_end' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='td_maxend' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='td_maxwin' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='td_maxack' type-id='9586cc7b' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='td_scale' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='flags' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/nf_conntrack_tcp.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_udp' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='29' column='1' id='21861431'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_ts' type-id='7359adad' visibility='default' filepath='include/net/netfilter/nf_conntrack.h' line='30' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_ct_gre' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='8' column='1' id='0b2cc27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/nf_conntrack_proto_gre.h' line='10' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_exp_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='155' column='1' id='2c98045e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exp' type-id='b7982cd5' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='portid' type-id='19c2251e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/net/netfilter/nf_conntrack_ecache.h' line='158' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_expect' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='18' column='1' id='c2dc4615'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lnode' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hnode' type-id='03a4a074' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tuple' type-id='9805d802' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mask' type-id='97e29523' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='expectfn' type-id='6c8c82c7' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='helper' type-id='a1a282ea' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='master' type-id='8c493d8a' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='timeout' type-id='abe41e67' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='use' type-id='64615833' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='class' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='saved_addr' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='saved_proto' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dir' type-id='bbbf8507' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/netfilter/nf_conntrack_expect.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_conntrack_tuple_mask' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='75' column='1' id='97e29523'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='90eb4133' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='79' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='76' column='1' id='90eb4133'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u3' type-id='8c17f46b' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='u' type-id='cfd75634' visibility='default' filepath='include/net/netfilter/nf_conntrack_tuple.h' line='78' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ip_conntrack_dir' filepath='include/uapi/linux/netfilter/nf_conntrack_tuple_common.h' line='11' column='1' id='bbbf8507'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IP_CT_DIR_ORIGINAL' value='0'/>
+        <enumerator name='IP_CT_DIR_REPLY' value='1'/>
+        <enumerator name='IP_CT_DIR_MAX' value='2'/>
+      </enum-decl>
+      <qualified-type-def type-id='bd965180' const='yes' id='e8726a27'/>
+      <pointer-type-def type-id='e8726a27' size-in-bits='64' id='f91cf277'/>
+      <pointer-type-def type-id='85bdf127' size-in-bits='64' id='09dcd1bf'/>
+      <pointer-type-def type-id='379be6ec' size-in-bits='64' id='0b8ca8fa'/>
+      <pointer-type-def type-id='ad974870' size-in-bits='64' id='117abbea'/>
+      <pointer-type-def type-id='27ca88ce' size-in-bits='64' id='c8fa3070'/>
+      <pointer-type-def type-id='cf9b45ac' size-in-bits='64' id='8c493d8a'/>
+      <pointer-type-def type-id='c2dc4615' size-in-bits='64' id='b7982cd5'/>
+      <pointer-type-def type-id='c54a70ec' size-in-bits='64' id='a1a282ea'/>
+      <pointer-type-def type-id='d3056556' size-in-bits='64' id='bccf9b1c'/>
+      <pointer-type-def type-id='f54c6661' size-in-bits='64' id='3ba63619'/>
+      <pointer-type-def type-id='2c98045e' size-in-bits='64' id='16990944'/>
+      <pointer-type-def type-id='6ed3e587' size-in-bits='64' id='c5ff416f'/>
+      <pointer-type-def type-id='3f017308' size-in-bits='64' id='e55edb2e'/>
+      <pointer-type-def type-id='75c2ad3b' size-in-bits='64' id='6c8c82c7'/>
+      <pointer-type-def type-id='63e171df' size-in-bits='64' id='30e664af'/>
+      <pointer-type-def type-id='68a72cd7' size-in-bits='64' id='b6316a7f'/>
+      <var-decl name='flow_keys_basic_dissector' type-id='379be6ec' mangled-name='flow_keys_basic_dissector' visibility='default' filepath='net/core/flow_dissector.c' line='1770' column='1' elf-symbol-id='flow_keys_basic_dissector'/>
+      <function-decl name='__skb_get_hash' mangled-name='__skb_get_hash' filepath='net/core/flow_dissector.c' line='1582' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_get_hash'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/flow_dissector.c' line='1582' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__skb_flow_dissect' mangled-name='__skb_flow_dissect' filepath='net/core/flow_dissector.c' line='895' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_flow_dissect'>
+        <parameter type-id='f91cf277' name='net' filepath='net/core/flow_dissector.c' line='895' column='1'/>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/flow_dissector.c' line='896' column='1'/>
+        <parameter type-id='0b8ca8fa' name='flow_dissector' filepath='net/core/flow_dissector.c' line='897' column='1'/>
+        <parameter type-id='eaa32e2f' name='target_container' filepath='net/core/flow_dissector.c' line='898' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/core/flow_dissector.c' line='899' column='1'/>
+        <parameter type-id='84a5c3d4' name='proto' filepath='net/core/flow_dissector.c' line='899' column='1'/>
+        <parameter type-id='95e97e5e' name='nhoff' filepath='net/core/flow_dissector.c' line='899' column='1'/>
+        <parameter type-id='95e97e5e' name='hlen' filepath='net/core/flow_dissector.c' line='899' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='net/core/flow_dissector.c' line='900' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ad974870'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='bccf9b1c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27ca88ce'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='16990944'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75c2ad3b'>
+        <parameter type-id='8c493d8a'/>
+        <parameter type-id='b7982cd5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <typedef-decl name='u_int64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='113' column='1' id='f1f7b9a4'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/gro_cells.c' language='LANG_C89'>
+      <class-decl name='gro_cells' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/gro_cells.h' line='11' column='1' id='5b4eef8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cells' type-id='69646708' visibility='default' filepath='include/net/gro_cells.h' line='12' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='gro_cell' size-in-bits='3584' is-struct='yes' visibility='default' filepath='net/core/gro_cells.c' line='7' column='1' id='001ff55a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='napi_skbs' type-id='e61c85d0' visibility='default' filepath='net/core/gro_cells.c' line='8' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='napi' type-id='291e3bb5' visibility='default' filepath='net/core/gro_cells.c' line='9' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='001ff55a' size-in-bits='64' id='69646708'/>
+      <pointer-type-def type-id='5b4eef8b' size-in-bits='64' id='2c36d3bb'/>
+      <function-decl name='gro_cells_receive' mangled-name='gro_cells_receive' filepath='net/core/gro_cells.c' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_receive'>
+        <parameter type-id='2c36d3bb' name='gcells' filepath='net/core/gro_cells.c' line='12' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/gro_cells.c' line='12' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gro_cells_init' mangled-name='gro_cells_init' filepath='net/core/gro_cells.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_init'>
+        <parameter type-id='2c36d3bb' name='gcells' filepath='net/core/gro_cells.c' line='69' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/gro_cells.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gro_cells_destroy' mangled-name='gro_cells_destroy' filepath='net/core/gro_cells.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gro_cells_destroy'>
+        <parameter type-id='2c36d3bb' name='gcells' filepath='net/core/gro_cells.c' line='92' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/neighbour.c' language='LANG_C89'>
+      <function-decl name='neigh_destroy' mangled-name='neigh_destroy' filepath='net/core/neighbour.c' line='834' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='neigh_destroy'>
+        <parameter type-id='3c330066' name='neigh' filepath='net/core/neighbour.c' line='834' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/net_namespace.c' language='LANG_C89'>
+      <class-decl name='pernet_operations' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/net_namespace.h' line='357' column='1' id='68f5a646'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/net_namespace.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='e83d6bbe' visibility='default' filepath='include/net/net_namespace.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pre_exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='exit' type-id='9b92b29b' visibility='default' filepath='include/net/net_namespace.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='exit_batch' type-id='29f83363' visibility='default' filepath='include/net/net_namespace.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='id' type-id='807869d3' visibility='default' filepath='include/net/net_namespace.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/net_namespace.h' line='386' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0790750c' size-in-bits='64' id='e83d6bbe'/>
+      <pointer-type-def type-id='68f5a646' size-in-bits='64' id='d6907f4c'/>
+      <pointer-type-def type-id='c7e57ee7' size-in-bits='64' id='29f83363'/>
+      <pointer-type-def type-id='6ddd203f' size-in-bits='64' id='9b92b29b'/>
+      <var-decl name='net_namespace_list' type-id='72f469ec' mangled-name='net_namespace_list' visibility='default' filepath='net/core/net_namespace.c' line='35' column='1' elf-symbol-id='net_namespace_list'/>
+      <var-decl name='init_net' type-id='bd965180' mangled-name='init_net' visibility='default' filepath='net/core/net_namespace.c' line='46' column='1' elf-symbol-id='init_net'/>
+      <function-decl name='__put_net' mangled-name='__put_net' filepath='net/core/net_namespace.c' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__put_net'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/net_namespace.c' line='643' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_pernet_subsys' mangled-name='register_pernet_subsys' filepath='net/core/net_namespace.c' line='1264' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pernet_subsys'>
+        <parameter type-id='d6907f4c' name='ops' filepath='net/core/net_namespace.c' line='1264' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_pernet_device' mangled-name='register_pernet_device' filepath='net/core/net_namespace.c' line='1310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_pernet_device'>
+        <parameter type-id='d6907f4c' name='ops' filepath='net/core/net_namespace.c' line='1310' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_pernet_device' mangled-name='unregister_pernet_device' filepath='net/core/net_namespace.c' line='1331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pernet_device'>
+        <parameter type-id='d6907f4c' name='ops' filepath='net/core/net_namespace.c' line='1331' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_pernet_subsys' mangled-name='unregister_pernet_subsys' filepath='net/core/net_namespace.c' line='1283' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_pernet_subsys'>
+        <parameter type-id='d6907f4c' name='ops' filepath='net/core/net_namespace.c' line='1283' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0790750c'>
+        <parameter type-id='a2bff676'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7e57ee7'>
+        <parameter type-id='e84b031a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6ddd203f'>
+        <parameter type-id='a2bff676' name='net'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/netevent.c' language='LANG_C89'>
+      <function-decl name='unregister_netevent_notifier' mangled-name='unregister_netevent_notifier' filepath='net/core/netevent.c' line='44' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_netevent_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/netevent.c' line='44' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_netevent_notifier' mangled-name='register_netevent_notifier' filepath='net/core/netevent.c' line='28' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_netevent_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/core/netevent.c' line='28' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/rtnetlink.c' language='LANG_C89'>
+      <typedef-decl name='rtnl_doit_func' type-id='1b2282db' filepath='include/net/rtnetlink.h' line='8' column='1' id='ad8f197c'/>
+      <typedef-decl name='rtnl_dumpit_func' type-id='32a663ca' filepath='include/net/rtnetlink.h' line='10' column='1' id='5b4c0375'/>
+      <pointer-type-def type-id='f3fa895f' size-in-bits='64' id='1b2282db'/>
+      <pointer-type-def type-id='6696ef79' size-in-bits='64' id='959ab461'/>
+      <function-decl name='rtnl_link_unregister' mangled-name='rtnl_link_unregister' filepath='net/core/rtnetlink.c' line='478' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_unregister'>
+        <parameter type-id='959ab461' name='ops' filepath='net/core/rtnetlink.c' line='478' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_lock' mangled-name='rtnl_lock' filepath='net/core/rtnetlink.c' line='70' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_lock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_link_register' mangled-name='rtnl_link_register' filepath='net/core/rtnetlink.c' line='396' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_link_register'>
+        <parameter type-id='959ab461' name='ops' filepath='net/core/rtnetlink.c' line='396' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister_all' mangled-name='rtnl_unregister_all' filepath='net/core/rtnetlink.c' line='319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister_all'>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='319' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_unregister' mangled-name='rtnl_unregister' filepath='net/core/rtnetlink.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unregister'>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='287' column='1'/>
+        <parameter type-id='95e97e5e' name='msgtype' filepath='net/core/rtnetlink.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_unlock' mangled-name='rtnl_unlock' filepath='net/core/rtnetlink.c' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_unlock'>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rtnl_trylock' mangled-name='rtnl_trylock' filepath='net/core/rtnetlink.c' line='116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_trylock'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_register_module' mangled-name='rtnl_register_module' filepath='net/core/rtnetlink.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_register_module'>
+        <parameter type-id='2730d015' name='owner' filepath='net/core/rtnetlink.c' line='241' column='1'/>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='95e97e5e' name='msgtype' filepath='net/core/rtnetlink.c' line='242' column='1'/>
+        <parameter type-id='ad8f197c' name='doit' filepath='net/core/rtnetlink.c' line='243' column='1'/>
+        <parameter type-id='5b4c0375' name='dumpit' filepath='net/core/rtnetlink.c' line='243' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='net/core/rtnetlink.c' line='244' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rtnl_is_locked' mangled-name='rtnl_is_locked' filepath='net/core/rtnetlink.c' line='122' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rtnl_is_locked'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='f3fa895f'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c2074578'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/skbuff.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b9535066' size-in-bits='1536' id='91671be8'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='napi_struct' size-in-bits='3392' is-struct='yes' visibility='default' filepath='include/linux/netdevice.h' line='322' column='1' id='291e3bb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='weight' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gro_bitmask' type-id='7359adad' visibility='default' filepath='include/linux/netdevice.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='f07d90b4' visibility='default' filepath='include/linux/netdevice.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netdevice.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='gro_hash' type-id='91671be8' visibility='default' filepath='include/linux/netdevice.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/linux/netdevice.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='rx_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='rx_count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='timer' type-id='b6993efc' visibility='default' filepath='include/linux/netdevice.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='dev_list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='napi_hash_node' type-id='03a4a074' visibility='default' filepath='include/linux/netdevice.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='napi_id' type-id='f0981eeb' visibility='default' filepath='include/linux/netdevice.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/linux/netdevice.h' line='351' 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='308' column='1' id='b9535066'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netdevice.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/linux/netdevice.h' line='310' 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='418' column='1' id='c148e595'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hwtstamp' type-id='fbc017ef' visibility='default' filepath='include/linux/skbuff.h' line='419' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='016b3662' size-in-bits='64' id='f07d90b4'/>
+      <pointer-type-def type-id='291e3bb5' size-in-bits='64' id='c50361c5'/>
+      <pointer-type-def type-id='e61c85d0' size-in-bits='64' id='03c386c6'/>
+      <pointer-type-def type-id='c148e595' size-in-bits='64' id='68197365'/>
+      <function-decl name='__alloc_skb' mangled-name='__alloc_skb' filepath='net/core/skbuff.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__alloc_skb'>
+        <parameter type-id='f0981eeb' name='size' filepath='net/core/skbuff.c' line='182' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='182' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/skbuff.c' line='183' column='1'/>
+        <parameter type-id='95e97e5e' name='node' filepath='net/core/skbuff.c' line='183' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='kfree_skb' mangled-name='kfree_skb' filepath='net/core/skbuff.c' line='701' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='701' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_queue_tail' mangled-name='skb_queue_tail' filepath='net/core/skbuff.c' line='3160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_tail'>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3160' column='1'/>
+        <parameter type-id='0fbf3cfd' name='newsk' filepath='net/core/skbuff.c' line='3160' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pskb_expand_head' mangled-name='pskb_expand_head' filepath='net/core/skbuff.c' line='1623' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pskb_expand_head'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1623' column='1'/>
+        <parameter type-id='95e97e5e' name='nhead' filepath='net/core/skbuff.c' line='1623' column='1'/>
+        <parameter type-id='95e97e5e' name='ntail' filepath='net/core/skbuff.c' line='1623' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1624' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_dequeue' mangled-name='skb_dequeue' filepath='net/core/skbuff.c' line='3054' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_dequeue'>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3054' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_queue_head' mangled-name='skb_queue_head' filepath='net/core/skbuff.c' line='3139' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_head'>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3139' column='1'/>
+        <parameter type-id='0fbf3cfd' name='newsk' filepath='net/core/skbuff.c' line='3139' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='consume_skb' mangled-name='consume_skb' filepath='net/core/skbuff.c' line='843' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='consume_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='843' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_copy' mangled-name='skb_copy' filepath='net/core/skbuff.c' line='1520' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/skbuff.c' line='1520' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1520' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_queue_purge' mangled-name='skb_queue_purge' filepath='net/core/skbuff.c' line='3094' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_queue_purge'>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3094' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_clone' mangled-name='skb_clone' filepath='net/core/skbuff.c' line='1441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_clone'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1441' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1441' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_copy_bits' mangled-name='skb_copy_bits' filepath='net/core/skbuff.c' line='2205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_bits'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/skbuff.c' line='2205' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='2205' column='1'/>
+        <parameter type-id='eaa32e2f' name='to' filepath='net/core/skbuff.c' line='2205' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='2205' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_cow_data' mangled-name='skb_cow_data' filepath='net/core/skbuff.c' line='4445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_cow_data'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4445' column='1'/>
+        <parameter type-id='95e97e5e' name='tailbits' filepath='net/core/skbuff.c' line='4445' column='1'/>
+        <parameter type-id='a10cc675' name='trailer' filepath='net/core/skbuff.c' line='4445' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_scrub_packet' mangled-name='skb_scrub_packet' filepath='net/core/skbuff.c' line='5258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_scrub_packet'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='5258' column='1'/>
+        <parameter type-id='b50a4934' name='xnet' filepath='net/core/skbuff.c' line='5258' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='___pskb_trim' mangled-name='___pskb_trim' filepath='net/core/skbuff.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='___pskb_trim'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1936' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__pskb_pull_tail' mangled-name='__pskb_pull_tail' filepath='net/core/skbuff.c' line='2067' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pskb_pull_tail'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2067' column='1'/>
+        <parameter type-id='95e97e5e' name='delta' filepath='net/core/skbuff.c' line='2067' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='skb_pull_rcsum' mangled-name='skb_pull_rcsum' filepath='net/core/skbuff.c' line='3649' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_pull_rcsum'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='3649' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='3649' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='__netdev_alloc_skb' mangled-name='__netdev_alloc_skb' filepath='net/core/skbuff.c' line='425' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netdev_alloc_skb'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/skbuff.c' line='425' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='425' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='426' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__pskb_copy_fclone' mangled-name='__pskb_copy_fclone' filepath='net/core/skbuff.c' line='1559' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__pskb_copy_fclone'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1559' column='1'/>
+        <parameter type-id='95e97e5e' name='headroom' filepath='net/core/skbuff.c' line='1559' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1560' column='1'/>
+        <parameter type-id='b50a4934' name='fclone' filepath='net/core/skbuff.c' line='1560' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__napi_alloc_skb' mangled-name='__napi_alloc_skb' filepath='net/core/skbuff.c' line='501' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__napi_alloc_skb'>
+        <parameter type-id='c50361c5' name='napi' filepath='net/core/skbuff.c' line='501' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='501' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='502' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_copy_expand' mangled-name='skb_copy_expand' filepath='net/core/skbuff.c' line='1749' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_copy_expand'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/skbuff.c' line='1749' column='1'/>
+        <parameter type-id='95e97e5e' name='newheadroom' filepath='net/core/skbuff.c' line='1750' column='1'/>
+        <parameter type-id='95e97e5e' name='newtailroom' filepath='net/core/skbuff.c' line='1750' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='1751' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='alloc_skb_with_frags' mangled-name='alloc_skb_with_frags' filepath='net/core/skbuff.c' line='5789' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_skb_with_frags'>
+        <parameter type-id='7359adad' name='header_len' filepath='net/core/skbuff.c' line='5789' column='1'/>
+        <parameter type-id='7359adad' name='data_len' filepath='net/core/skbuff.c' line='5790' column='1'/>
+        <parameter type-id='95e97e5e' name='max_page_order' filepath='net/core/skbuff.c' line='5791' column='1'/>
+        <parameter type-id='7292109c' name='errcode' filepath='net/core/skbuff.c' line='5792' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp_mask' filepath='net/core/skbuff.c' line='5793' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_unlink' mangled-name='skb_unlink' filepath='net/core/skbuff.c' line='3180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_unlink'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='3180' column='1'/>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_tstamp_tx' mangled-name='skb_tstamp_tx' filepath='net/core/skbuff.c' line='4761' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_tstamp_tx'>
+        <parameter type-id='0fbf3cfd' name='orig_skb' filepath='net/core/skbuff.c' line='4761' column='1'/>
+        <parameter type-id='68197365' name='hwtstamps' filepath='net/core/skbuff.c' line='4762' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_trim' mangled-name='skb_trim' filepath='net/core/skbuff.c' line='1926' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_trim'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1926' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1926' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec_nomark' mangled-name='skb_to_sgvec_nomark' filepath='net/core/skbuff.c' line='4419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec_nomark'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4419' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='net/core/skbuff.c' line='4419' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='4420' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='4420' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_to_sgvec' mangled-name='skb_to_sgvec' filepath='net/core/skbuff.c' line='4387' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_to_sgvec'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <parameter type-id='bf3ef905' name='sg' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='4387' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_store_bits' mangled-name='skb_store_bits' filepath='net/core/skbuff.c' line='2567' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_store_bits'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='eaa32e2f' name='from' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='2567' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_realloc_headroom' mangled-name='skb_realloc_headroom' filepath='net/core/skbuff.c' line='1712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_realloc_headroom'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1712' column='1'/>
+        <parameter type-id='f0981eeb' name='headroom' filepath='net/core/skbuff.c' line='1712' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_put' mangled-name='skb_put' filepath='net/core/skbuff.c' line='1870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_put'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1870' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1870' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='skb_push' mangled-name='skb_push' filepath='net/core/skbuff.c' line='1891' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_push'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1891' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1891' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='skb_pull' mangled-name='skb_pull' filepath='net/core/skbuff.c' line='1911' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_pull'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1911' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='1911' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='skb_partial_csum_set' mangled-name='skb_partial_csum_set' filepath='net/core/skbuff.c' line='4807' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_partial_csum_set'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='4807' column='1'/>
+        <parameter type-id='1dc6a898' name='start' filepath='net/core/skbuff.c' line='4807' column='1'/>
+        <parameter type-id='1dc6a898' name='off' filepath='net/core/skbuff.c' line='4807' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='skb_ensure_writable' mangled-name='skb_ensure_writable' filepath='net/core/skbuff.c' line='5489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_ensure_writable'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='5489' column='1'/>
+        <parameter type-id='95e97e5e' name='write_len' filepath='net/core/skbuff.c' line='5489' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_dequeue_tail' mangled-name='skb_dequeue_tail' filepath='net/core/skbuff.c' line='3074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_dequeue_tail'>
+        <parameter type-id='03c386c6' name='list' filepath='net/core/skbuff.c' line='3074' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_coalesce_rx_frag' mangled-name='skb_coalesce_rx_frag' filepath='net/core/skbuff.c' line='563' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_coalesce_rx_frag'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='net/core/skbuff.c' line='563' column='1'/>
+        <parameter type-id='f0981eeb' name='truesize' filepath='net/core/skbuff.c' line='564' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_checksum' mangled-name='skb_checksum' filepath='net/core/skbuff.c' line='2729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_checksum'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/core/skbuff.c' line='2729' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='2729' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/skbuff.c' line='2730' column='1'/>
+        <parameter type-id='fbd88bba' name='csum' filepath='net/core/skbuff.c' line='2730' column='1'/>
+        <return type-id='fbd88bba'/>
+      </function-decl>
+      <function-decl name='skb_append_pagefrags' mangled-name='skb_append_pagefrags' filepath='net/core/skbuff.c' line='3620' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_append_pagefrags'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='3620' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='net/core/skbuff.c' line='3620' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/skbuff.c' line='3621' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/core/skbuff.c' line='3621' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='skb_add_rx_frag' mangled-name='skb_add_rx_frag' filepath='net/core/skbuff.c' line='553' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_add_rx_frag'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='553' column='1'/>
+        <parameter type-id='95e97e5e' name='i' filepath='net/core/skbuff.c' line='553' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='net/core/skbuff.c' line='553' column='1'/>
+        <parameter type-id='95e97e5e' name='off' filepath='net/core/skbuff.c' line='553' column='1'/>
+        <parameter type-id='95e97e5e' name='size' filepath='net/core/skbuff.c' line='554' column='1'/>
+        <parameter type-id='f0981eeb' name='truesize' filepath='net/core/skbuff.c' line='554' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='pskb_trim_rcsum_slow' mangled-name='pskb_trim_rcsum_slow' filepath='net/core/skbuff.c' line='2023' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='pskb_trim_rcsum_slow'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='2023' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/core/skbuff.c' line='2023' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netdev_alloc_frag' mangled-name='netdev_alloc_frag' filepath='net/core/skbuff.c' line='394' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netdev_alloc_frag'>
+        <parameter type-id='f0981eeb' name='fragsz' filepath='net/core/skbuff.c' line='394' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='napi_consume_skb' mangled-name='napi_consume_skb' filepath='net/core/skbuff.c' line='906' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='napi_consume_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='906' column='1'/>
+        <parameter type-id='95e97e5e' name='budget' filepath='net/core/skbuff.c' line='906' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='kfree_skb_list' mangled-name='kfree_skb_list' filepath='net/core/skbuff.c' line='712' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kfree_skb_list'>
+        <parameter type-id='0fbf3cfd' name='segs' filepath='net/core/skbuff.c' line='712' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='build_skb' mangled-name='build_skb' filepath='net/core/skbuff.c' line='325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='build_skb'>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/core/skbuff.c' line='325' column='1'/>
+        <parameter type-id='f0981eeb' name='frag_size' filepath='net/core/skbuff.c' line='325' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__skb_pad' mangled-name='__skb_pad' filepath='net/core/skbuff.c' line='1803' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_pad'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <parameter type-id='95e97e5e' name='pad' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <parameter type-id='b50a4934' name='free_on_error' filepath='net/core/skbuff.c' line='1803' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__skb_ext_put' mangled-name='__skb_ext_put' filepath='net/core/skbuff.c' line='6246' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__skb_ext_put'>
+        <parameter type-id='374692c7' name='ext' filepath='net/core/skbuff.c' line='6246' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='016b3662'>
+        <parameter type-id='c50361c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/sock.c' language='LANG_C89'>
+      <class-decl name='nexthop' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/nexthop.h' line='80' column='1' id='b754514f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rb_node' type-id='2a8a6332' visibility='default' filepath='include/net/nexthop.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fi_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='f6i_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='grp_list' type-id='72f469ec' visibility='default' filepath='include/net/nexthop.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/nexthop.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/net/nexthop.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='protocol' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='nh_flags' type-id='f9b06939' visibility='default' filepath='include/net/nexthop.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='is_group' type-id='b50a4934' visibility='default' filepath='include/net/nexthop.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/nexthop.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/nexthop.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='' type-id='21fca59c' visibility='default' filepath='include/net/nexthop.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='uncached_list' size-in-bits='192' is-struct='yes' visibility='default' filepath='net/ipv4/route.c' line='1524' column='1' id='6b1203e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='net/ipv4/route.c' line='1525' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='net/ipv4/route.c' line='1526' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='979d5bbb' size-in-bits='infinite' id='7be723ef'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='42b16dba' size-in-bits='4096' id='e3638da9'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='2048' id='93e41790'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7799da43' size-in-bits='256' id='5b02a6fc'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f772df6d' size-in-bits='infinite' id='5be9db8d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <union-decl name='tcp_cc_info' visibility='default' is-declaration-only='yes' id='83c3a083'/>
+      <array-type-def dimensions='1' type-id='a30f25c8' size-in-bits='3072' id='41cc9498'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='inet_ehash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='38' column='1' id='08400b46'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='39' 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='101' column='1' id='082b64be'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='103' 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='112' column='1' id='42b16dba'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/inet_hashtables.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/net/inet_hashtables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='ba169a6c' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__13' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='115' column='1' id='ba169a6c'>
+        <data-member access='public'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nulls_head' type-id='af86905d' visibility='default' filepath='include/net/inet_hashtables.h' line='117' column='1'/>
+        </data-member>
+      </union-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='0084df72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='v' type-id='3f1a6b60' 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='3f1a6b60' 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='8eb3b1fe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' 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='c210d497' 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='84a5c3d4' 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='84a5c3d4' 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='84a5c3d4' 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='84a5c3d4' 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='d315442e' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='95e97e5e' 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='70734f24' visibility='default' filepath='include/uapi/linux/xfrm.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='xfrm_address_t' type-id='eba8a6fd' filepath='include/uapi/linux/xfrm.h' line='19' column='1' id='c210d497'/>
+      <union-decl name='__anonymous_union__19' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/uapi/linux/xfrm.h' line='15' column='1' id='eba8a6fd'>
+        <data-member access='public'>
+          <var-decl name='a4' type-id='78a133c2' visibility='default' filepath='include/uapi/linux/xfrm.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='a6' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/xfrm.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='in6' type-id='f6ed712a' 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='4ca5f2ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='soft_byte_limit' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='29d519c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bytes' type-id='d3130597' 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='d3130597' 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='d3130597' 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='d3130597' 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='482' column='1' id='e8e96050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' visibility='default' filepath='include/net/xfrm.h' line='483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dead' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='484' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_policy_queue' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='493' column='1' id='d15e38d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hold_queue' type-id='e61c85d0' visibility='default' filepath='include/net/xfrm.h' line='494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hold_timer' type-id='abe41e67' visibility='default' filepath='include/net/xfrm.h' line='495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/xfrm.h' line='496' 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='cddfb84e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ctx_doi' type-id='8f048e17' 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='8f048e17' 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='d315442e' 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='3f1a6b60' 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='e84913bd' 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='445' column='1' id='a30f25c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='d07aeeaa' visibility='default' filepath='include/net/xfrm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='encap_family' type-id='8efea9e5' visibility='default' filepath='include/net/xfrm.h' line='457' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='optional' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='408'>
+          <var-decl name='allalgs' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='471' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='aalgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ealgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='475' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='calgos' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='476' 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='d07aeeaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='daddr' type-id='c210d497' 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='78a133c2' 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='8f048e17' visibility='default' filepath='include/uapi/linux/xfrm.h' line='28' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__20' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='149' column='1' id='fc320d58'>
+        <data-member access='public'>
+          <var-decl name='gclist' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bydst' type-id='03a4a074' visibility='default' filepath='include/net/xfrm.h' line='151' column='1'/>
+        </data-member>
+      </union-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='12872440'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='all' type-id='72f469ec' 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='f9b06939' 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='f9b06939' 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='f9b06939' 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='19c2251e' 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='14a0013e' 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='b4a65d38'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='c210d497' 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='c210d497' 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='d315442e' 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='8f048e17' 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='8f048e17' 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='171' column='1' id='35535e57'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='replay_window' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aalgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='ealgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='calgo' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='family' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='saddr' type-id='c210d497' visibility='default' filepath='include/net/xfrm.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='header_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='trailer_len' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='extra_flags' type-id='19c2251e' visibility='default' filepath='include/net/xfrm.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='smark' type-id='0084df72' visibility='default' filepath='include/net/xfrm.h' line='182' 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='faa1424f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='f0981eeb' 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='e84913bd' 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='4da03818'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='e84913bd' 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='307587ae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='alg_name' type-id='59daf3ef' 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='f0981eeb' 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='f0981eeb' 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='e84913bd' 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='f9cce85e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap_type' type-id='d315442e' 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='84a5c3d4' 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='84a5c3d4' 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='c210d497' 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='c59d261e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='oseq' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='b3f5c5f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bmp_len' type-id='f0981eeb' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' 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='d5016f6f' 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='296' column='1' id='9a401bb0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='advance' type-id='7e17c1b8' visibility='default' filepath='include/net/xfrm.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='check' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='recheck' type-id='796b13b7' visibility='default' filepath='include/net/xfrm.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='notify' type-id='b2edd032' visibility='default' filepath='include/net/xfrm.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='overflow' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='305' 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='c1960caa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='replay_window' type-id='3f1a6b60' 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='3f1a6b60' 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='3f1a6b60' visibility='default' filepath='include/uapi/linux/xfrm.h' line='125' 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='f5284c72'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='68a2d05b' 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='7359adad' 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='f0981eeb' 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='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_type' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='390' column='1' id='972f40bf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' 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='2730d015' 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='f9b06939' 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='f9b06939' 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='0642cb3c' 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='d507826b' 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='5e185d4c' 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='5e185d4c' 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='ae9790c6' 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='d236d29d' visibility='default' filepath='include/net/xfrm.h' line='406' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_mode' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='135' column='1' id='fdc52c40'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='encap' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='138' 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='412' column='1' id='faf1ab29'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/xfrm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='encap' type-id='a81671bb' visibility='default' filepath='include/net/xfrm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_tail' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xmit' type-id='231269da' visibility='default' filepath='include/net/xfrm.h' line='418' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tcp_ca_event' filepath='include/net/tcp.h' line='976' column='1' id='5f51e977'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1008' column='1' id='cd7d3c9d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pkts_acked' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rtt_us' type-id='a7832498' visibility='default' filepath='include/net/tcp.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in_flight' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1011' 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='1022' column='1' id='a084c932'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prior_mstamp' type-id='91ce1af9' visibility='default' filepath='include/net/tcp.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='prior_delivered' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='delivered' type-id='a7832498' visibility='default' filepath='include/net/tcp.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='interval_us' type-id='bd54fe1a' visibility='default' filepath='include/net/tcp.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='snd_interval_us' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='rcv_interval_us' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rtt_us' type-id='bd54fe1a' visibility='default' filepath='include/net/tcp.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='losses' type-id='95e97e5e' visibility='default' filepath='include/net/tcp.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='acked_sacked' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='prior_in_flight' type-id='19c2251e' visibility='default' filepath='include/net/tcp.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='is_app_limited' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='424'>
+          <var-decl name='is_retrans' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='432'>
+          <var-decl name='is_ack_delayed' type-id='b50a4934' visibility='default' filepath='include/net/tcp.h' line='1035' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_node' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='73' column='1' id='9f30e4ad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='parent' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='left' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='right' type-id='f7b83e6d' visibility='default' filepath='include/net/ip6_fib.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='leaf' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fn_bit' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='fn_flags' type-id='d315442e' visibility='default' filepath='include/net/ip6_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fn_sernum' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rr_ptr' type-id='fe454a75' visibility='default' filepath='include/net/ip6_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip6_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/ip6_fib.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip6_fib.h' line='151' column='1' id='faf198da'>
+        <data-member access='public'>
+          <var-decl name='fib6_siblings' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nh_list' type-id='72f469ec' visibility='default' filepath='include/net/ip6_fib.h' line='153' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='dst_metrics' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/dst.h' line='82' column='1' id='e51de182'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='metrics' type-id='46fc18d9' visibility='default' filepath='include/net/dst.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/dst.h' line='84' 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='107' column='1' id='d7f36d8e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/ip6_fib.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='plen' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='109' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib6_nh' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/net/ip6_fib.h' line='130' column='1' id='979d5bbb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nh_common' type-id='e1f89457' visibility='default' filepath='include/net/ip6_fib.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='last_probe' type-id='7359adad' visibility='default' filepath='include/net/ip6_fib.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rt6i_pcpu' type-id='1ead5d78' visibility='default' filepath='include/net/ip6_fib.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rt6i_exception_bucket' type-id='cc9f99b2' visibility='default' filepath='include/net/ip6_fib.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_common' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='80' column='1' id='e1f89457'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nhc_dev' type-id='68a2d05b' visibility='default' filepath='include/net/ip_fib.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nhc_oif' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='nhc_scope' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='nhc_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhc_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/ip_fib.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='nhc_flags' type-id='002ac4a6' visibility='default' filepath='include/net/ip_fib.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='nhc_lwtstate' type-id='d19f4fca' visibility='default' filepath='include/net/ip_fib.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nhc_gw' type-id='37def4b7' visibility='default' filepath='include/net/ip_fib.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nhc_weight' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='nhc_upper_bound' type-id='49178f86' visibility='default' filepath='include/net/ip_fib.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nhc_pcpu_rth_output' type-id='0f830eef' visibility='default' filepath='include/net/ip_fib.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nhc_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='nhc_exceptions' type-id='09c59e98' visibility='default' filepath='include/net/ip_fib.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/ip_fib.h' line='89' column='1' id='37def4b7'>
+        <data-member access='public'>
+          <var-decl name='ipv4' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ipv6' type-id='f6ed712a' visibility='default' filepath='include/net/ip_fib.h' line='91' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='rtable' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/route.h' line='49' column='1' id='6aebc4a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dst' type-id='772a4ddf' visibility='default' filepath='include/net/route.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='rt_genid' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='rt_flags' type-id='f0981eeb' visibility='default' filepath='include/net/route.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='rt_type' type-id='d315442e' visibility='default' filepath='include/net/route.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='rt_is_input' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='rt_uses_gateway' type-id='8f048e17' visibility='default' filepath='include/net/route.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='rt_iif' type-id='95e97e5e' visibility='default' filepath='include/net/route.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rt_gw_family' type-id='f9b06939' visibility='default' filepath='include/net/route.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='' type-id='77077303' visibility='default' filepath='include/net/route.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rt_mtu_locked' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='rt_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/route.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='rt_uncached' type-id='72f469ec' visibility='default' filepath='include/net/route.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rt_uncached_list' type-id='e9bf5d35' visibility='default' filepath='include/net/route.h' line='72' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__23' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/route.h' line='62' column='1' id='77077303'>
+        <data-member access='public'>
+          <var-decl name='rt_gw4' type-id='78a133c2' visibility='default' filepath='include/net/route.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rt_gw6' type-id='f6ed712a' visibility='default' filepath='include/net/route.h' line='64' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='fnhe_hash_bucket' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='72' column='1' id='ba046e9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fib_nh_exception' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/ip_fib.h' line='58' column='1' id='e92f1a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fnhe_next' type-id='aa804387' visibility='default' filepath='include/net/ip_fib.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fnhe_genid' type-id='95e97e5e' visibility='default' filepath='include/net/ip_fib.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='fnhe_daddr' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fnhe_pmtu' type-id='19c2251e' visibility='default' filepath='include/net/ip_fib.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fnhe_mtu_locked' type-id='b50a4934' visibility='default' filepath='include/net/ip_fib.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fnhe_gw' type-id='78a133c2' visibility='default' filepath='include/net/ip_fib.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fnhe_expires' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fnhe_rth_input' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='fnhe_rth_output' type-id='c8f5869f' visibility='default' filepath='include/net/ip_fib.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fnhe_stamp' type-id='7359adad' visibility='default' filepath='include/net/ip_fib.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ip_fib.h' line='69' 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='114' column='1' id='db281924'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chain' type-id='e151255a' visibility='default' filepath='include/net/ip6_fib.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='depth' type-id='95e97e5e' visibility='default' filepath='include/net/ip6_fib.h' line='116' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cd7d3c9d' const='yes' id='67a1c23c'/>
+      <pointer-type-def type-id='67a1c23c' size-in-bits='64' id='39a488a2'/>
+      <qualified-type-def type-id='2117397c' const='yes' id='7d20a6e7'/>
+      <pointer-type-def type-id='7d20a6e7' size-in-bits='64' id='c76694b7'/>
+      <qualified-type-def type-id='a084c932' const='yes' id='5420d2f9'/>
+      <pointer-type-def type-id='5420d2f9' size-in-bits='64' id='42abe229'/>
+      <qualified-type-def type-id='9a401bb0' const='yes' id='3d6abfbb'/>
+      <pointer-type-def type-id='3d6abfbb' size-in-bits='64' id='400b9143'/>
+      <qualified-type-def type-id='972f40bf' const='yes' id='9819baf4'/>
+      <pointer-type-def type-id='9819baf4' size-in-bits='64' id='4e812b7a'/>
+      <qualified-type-def type-id='faf1ab29' const='yes' id='9d07f7d6'/>
+      <pointer-type-def type-id='9d07f7d6' size-in-bits='64' id='2f8b61b4'/>
+      <pointer-type-def type-id='e51de182' size-in-bits='64' id='8eff91b0'/>
+      <pointer-type-def type-id='9f30e4ad' size-in-bits='64' id='f7b83e6d'/>
+      <pointer-type-def type-id='e92f1a2f' size-in-bits='64' id='aa804387'/>
+      <pointer-type-def type-id='ba046e9a' size-in-bits='64' id='09c59e98'/>
+      <pointer-type-def type-id='082b64be' size-in-bits='64' id='fd53db64'/>
+      <pointer-type-def type-id='08400b46' size-in-bits='64' id='77011cbc'/>
+      <pointer-type-def type-id='42b16dba' size-in-bits='64' id='e0087b68'/>
+      <pointer-type-def type-id='1b8c67aa' size-in-bits='64' id='0642cb3c'/>
+      <pointer-type-def type-id='389d1e82' size-in-bits='64' id='5e185d4c'/>
+      <pointer-type-def type-id='0286989c' size-in-bits='64' id='ae9790c6'/>
+      <pointer-type-def type-id='65fbb133' size-in-bits='64' id='796b13b7'/>
+      <pointer-type-def type-id='08abca50' size-in-bits='64' id='231269da'/>
+      <pointer-type-def type-id='06b4cb39' size-in-bits='64' id='d236d29d'/>
+      <pointer-type-def type-id='b754514f' size-in-bits='64' id='f32120a7'/>
+      <pointer-type-def type-id='06c0432f' size-in-bits='64' id='a8d434b7'/>
+      <pointer-type-def type-id='db281924' size-in-bits='64' id='cc9f99b2'/>
+      <pointer-type-def type-id='6ceb7782' size-in-bits='64' id='1ead5d78'/>
+      <pointer-type-def type-id='6aebc4a7' size-in-bits='64' id='c8f5869f'/>
+      <pointer-type-def type-id='c8f5869f' size-in-bits='64' id='0f830eef'/>
+      <pointer-type-def type-id='83c3a083' size-in-bits='64' id='2cbe71ce'/>
+      <pointer-type-def type-id='fe1697ae' size-in-bits='64' id='14ca5c08'/>
+      <pointer-type-def type-id='50acc06b' size-in-bits='64' id='8af06487'/>
+      <pointer-type-def type-id='6b1203e5' size-in-bits='64' id='e9bf5d35'/>
+      <pointer-type-def type-id='c9315117' size-in-bits='64' id='bffb5883'/>
+      <pointer-type-def type-id='aa95bc9e' size-in-bits='64' id='636d3a20'/>
+      <pointer-type-def type-id='84f0d8f8' size-in-bits='64' id='bfacbc7a'/>
+      <pointer-type-def type-id='fa7c8a73' size-in-bits='64' id='815f64bf'/>
+      <pointer-type-def type-id='77618c14' size-in-bits='64' id='ece3af1e'/>
+      <pointer-type-def type-id='7e2beda2' size-in-bits='64' id='f5feb7a4'/>
+      <pointer-type-def type-id='8edc59cf' size-in-bits='64' id='d507826b'/>
+      <pointer-type-def type-id='751b0878' size-in-bits='64' id='b2edd032'/>
+      <pointer-type-def type-id='bf7aaec7' size-in-bits='64' id='a81671bb'/>
+      <pointer-type-def type-id='f85fb8c6' size-in-bits='64' id='7e17c1b8'/>
+      <pointer-type-def type-id='b4a65d38' size-in-bits='64' id='14a0013e'/>
+      <pointer-type-def type-id='c210d497' size-in-bits='64' id='47a1c9f4'/>
+      <pointer-type-def type-id='4da03818' size-in-bits='64' id='1663a26e'/>
+      <pointer-type-def type-id='307587ae' size-in-bits='64' id='c56b5ee4'/>
+      <pointer-type-def type-id='faa1424f' size-in-bits='64' id='255e0487'/>
+      <pointer-type-def type-id='f9cce85e' size-in-bits='64' id='47541e34'/>
+      <pointer-type-def type-id='b3f5c5f7' size-in-bits='64' id='71411b0f'/>
+      <pointer-type-def type-id='cddfb84e' size-in-bits='64' id='b07c2494'/>
+      <function-decl name='lock_sock_nested' mangled-name='lock_sock_nested' filepath='net/core/sock.c' line='2975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='lock_sock_nested'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2975' column='1'/>
+        <parameter type-id='95e97e5e' name='subclass' filepath='net/core/sock.c' line='2975' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='release_sock' mangled-name='release_sock' filepath='net/core/sock.c' line='2991' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='release_sock'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2991' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sk_alloc' mangled-name='sk_alloc' filepath='net/core/sock.c' line='1671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_alloc'>
+        <parameter type-id='a2bff676' name='net' filepath='net/core/sock.c' line='1671' column='1'/>
+        <parameter type-id='95e97e5e' name='family' filepath='net/core/sock.c' line='1671' column='1'/>
+        <parameter type-id='3eb7c31c' name='priority' filepath='net/core/sock.c' line='1671' column='1'/>
+        <parameter type-id='d2524501' name='prot' filepath='net/core/sock.c' line='1672' column='1'/>
+        <parameter type-id='95e97e5e' name='kern' filepath='net/core/sock.c' line='1672' column='1'/>
+        <return type-id='f772df6d'/>
+      </function-decl>
+      <function-decl name='sock_init_data' mangled-name='sock_init_data' filepath='net/core/sock.c' line='2892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_init_data'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2892' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2892' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='skb_page_frag_refill' mangled-name='skb_page_frag_refill' filepath='net/core/sock.c' line='2377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_page_frag_refill'>
+        <parameter type-id='f0981eeb' name='sz' filepath='net/core/sock.c' line='2377' column='1'/>
+        <parameter type-id='a8d434b7' name='pfrag' filepath='net/core/sock.c' line='2377' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/core/sock.c' line='2377' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='proto_unregister' mangled-name='proto_unregister' filepath='net/core/sock.c' line='3484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_unregister'>
+        <parameter type-id='d2524501' name='prot' filepath='net/core/sock.c' line='3484' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__sk_receive_skb' mangled-name='__sk_receive_skb' filepath='net/core/sock.c' line='499' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sk_receive_skb'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='499' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='499' column='1'/>
+        <parameter type-id='2448a865' name='nested' filepath='net/core/sock.c' line='500' column='1'/>
+        <parameter type-id='f0981eeb' name='trim_cap' filepath='net/core/sock.c' line='500' column='1'/>
+        <parameter type-id='b50a4934' name='refcounted' filepath='net/core/sock.c' line='500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='proto_register' mangled-name='proto_register' filepath='net/core/sock.c' line='3420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='proto_register'>
+        <parameter type-id='d2524501' name='prot' filepath='net/core/sock.c' line='3420' column='1'/>
+        <parameter type-id='95e97e5e' name='alloc_slab' filepath='net/core/sock.c' line='3420' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_sendpage' mangled-name='sock_no_sendpage' filepath='net/core/sock.c' line='2772' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_sendpage'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2772' column='1'/>
+        <parameter type-id='02f11ed4' name='page' filepath='net/core/sock.c' line='2772' column='1'/>
+        <parameter type-id='95e97e5e' name='offset' filepath='net/core/sock.c' line='2772' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/core/sock.c' line='2772' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2772' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='sock_wmalloc' mangled-name='sock_wmalloc' filepath='net/core/sock.c' line='2107' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_wmalloc'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2107' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='net/core/sock.c' line='2107' column='1'/>
+        <parameter type-id='95e97e5e' name='force' filepath='net/core/sock.c' line='2107' column='1'/>
+        <parameter type-id='3eb7c31c' name='priority' filepath='net/core/sock.c' line='2108' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='sock_wfree' mangled-name='sock_wfree' filepath='net/core/sock.c' line='1972' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_wfree'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='1972' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_queue_rcv_skb' mangled-name='sock_queue_rcv_skb' filepath='net/core/sock.c' line='487' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_queue_rcv_skb'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='487' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='487' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_socketpair' mangled-name='sock_no_socketpair' filepath='net/core/sock.c' line='2673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_socketpair'>
+        <parameter type-id='13103032' name='sock1' filepath='net/core/sock.c' line='2673' column='1'/>
+        <parameter type-id='13103032' name='sock2' filepath='net/core/sock.c' line='2673' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_shutdown' mangled-name='sock_no_shutdown' filepath='net/core/sock.c' line='2705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_shutdown'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2705' column='1'/>
+        <parameter type-id='95e97e5e' name='how' filepath='net/core/sock.c' line='2705' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_setsockopt' mangled-name='sock_no_setsockopt' filepath='net/core/sock.c' line='2711' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_setsockopt'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2711' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2711' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2711' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2712' column='1'/>
+        <parameter type-id='f0981eeb' name='optlen' filepath='net/core/sock.c' line='2712' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_sendmsg' mangled-name='sock_no_sendmsg' filepath='net/core/sock.c' line='2725' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_sendmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2725' column='1'/>
+        <parameter type-id='6b9b777a' name='m' filepath='net/core/sock.c' line='2725' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/core/sock.c' line='2725' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_recvmsg' mangled-name='sock_no_recvmsg' filepath='net/core/sock.c' line='2737' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_recvmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2737' column='1'/>
+        <parameter type-id='6b9b777a' name='m' filepath='net/core/sock.c' line='2737' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/core/sock.c' line='2737' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_mmap' mangled-name='sock_no_mmap' filepath='net/core/sock.c' line='2744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_mmap'>
+        <parameter type-id='77e79a4b' name='file' filepath='net/core/sock.c' line='2744' column='1'/>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2744' column='1'/>
+        <parameter type-id='2ae08426' name='vma' filepath='net/core/sock.c' line='2744' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_listen' mangled-name='sock_no_listen' filepath='net/core/sock.c' line='2699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_listen'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2699' column='1'/>
+        <parameter type-id='95e97e5e' name='backlog' filepath='net/core/sock.c' line='2699' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_ioctl' mangled-name='sock_no_ioctl' filepath='net/core/sock.c' line='2693' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_ioctl'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2693' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='net/core/sock.c' line='2693' column='1'/>
+        <parameter type-id='7359adad' name='arg' filepath='net/core/sock.c' line='2693' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_getsockopt' mangled-name='sock_no_getsockopt' filepath='net/core/sock.c' line='2718' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getsockopt'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2718' column='1'/>
+        <parameter type-id='95e97e5e' name='level' filepath='net/core/sock.c' line='2718' column='1'/>
+        <parameter type-id='95e97e5e' name='optname' filepath='net/core/sock.c' line='2718' column='1'/>
+        <parameter type-id='26a90f95' name='optval' filepath='net/core/sock.c' line='2719' column='1'/>
+        <parameter type-id='7292109c' name='optlen' filepath='net/core/sock.c' line='2719' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_getname' mangled-name='sock_no_getname' filepath='net/core/sock.c' line='2686' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_getname'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2686' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2686' column='1'/>
+        <parameter type-id='95e97e5e' name='peer' filepath='net/core/sock.c' line='2687' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_connect' mangled-name='sock_no_connect' filepath='net/core/sock.c' line='2666' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_connect'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2666' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2666' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2667' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2667' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_bind' mangled-name='sock_no_bind' filepath='net/core/sock.c' line='2660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_bind'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2660' column='1'/>
+        <parameter type-id='5c0abad8' name='saddr' filepath='net/core/sock.c' line='2660' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/core/sock.c' line='2660' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_no_accept' mangled-name='sock_no_accept' filepath='net/core/sock.c' line='2679' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_no_accept'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='2679' column='1'/>
+        <parameter type-id='13103032' name='newsock' filepath='net/core/sock.c' line='2679' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/core/sock.c' line='2679' column='1'/>
+        <parameter type-id='b50a4934' name='kern' filepath='net/core/sock.c' line='2680' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_i_ino' mangled-name='sock_i_ino' filepath='net/core/sock.c' line='2093' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_i_ino'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2093' column='1'/>
+        <return type-id='7359adad'/>
+      </function-decl>
+      <function-decl name='sock_gettstamp' mangled-name='sock_gettstamp' filepath='net/core/sock.c' line='3046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_gettstamp'>
+        <parameter type-id='13103032' name='sock' filepath='net/core/sock.c' line='3046' column='1'/>
+        <parameter type-id='eaa32e2f' name='userstamp' filepath='net/core/sock.c' line='3046' column='1'/>
+        <parameter type-id='b50a4934' name='timeval' filepath='net/core/sock.c' line='3047' column='1'/>
+        <parameter type-id='b50a4934' name='time32' filepath='net/core/sock.c' line='3047' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_efree' mangled-name='sock_efree' filepath='net/core/sock.c' line='2076' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_efree'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='2076' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_alloc_send_skb' mangled-name='sock_alloc_send_skb' filepath='net/core/sock.c' line='2275' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_alloc_send_skb'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2275' column='1'/>
+        <parameter type-id='7359adad' name='size' filepath='net/core/sock.c' line='2275' column='1'/>
+        <parameter type-id='95e97e5e' name='noblock' filepath='net/core/sock.c' line='2276' column='1'/>
+        <parameter type-id='7292109c' name='errcode' filepath='net/core/sock.c' line='2276' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='skb_set_owner_w' mangled-name='skb_set_owner_w' filepath='net/core/sock.c' line='2006' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='skb_set_owner_w'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/sock.c' line='2006' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='2006' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sk_setup_caps' mangled-name='sk_setup_caps' filepath='net/core/sock.c' line='1942' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_setup_caps'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='1942' column='1'/>
+        <parameter type-id='141b6427' name='dst' filepath='net/core/sock.c' line='1942' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sk_free' mangled-name='sk_free' filepath='net/core/sock.c' line='1774' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sk_free'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock.c' line='1774' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='1b8c67aa'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='389d1e82'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0286989c'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c76694b7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='65fbb133'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08abca50'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f9f4b16f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06b4cb39'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='1f37a7f4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe1697ae'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='7292109c'/>
+        <parameter type-id='2cbe71ce'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='50acc06b'>
+        <parameter type-id='f772df6d'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9315117'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='39a488a2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa95bc9e'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='42abe229'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84f0d8f8'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='5f51e977'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa7c8a73'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77618c14'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e2beda2'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8edc59cf'>
+        <parameter type-id='328dda6e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='751b0878'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf7aaec7'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f85fb8c6'>
+        <parameter type-id='328dda6e'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/sock_diag.c' language='LANG_C89'>
+      <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='caff6eaa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='8f048e17' 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='7710808a' 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='48faa79b' 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='7710808a' visibility='default' filepath='include/linux/sock_diag.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='caff6eaa' const='yes' id='68eec231'/>
+      <pointer-type-def type-id='68eec231' size-in-bits='64' id='4adb9081'/>
+      <pointer-type-def type-id='26e0d4f0' size-in-bits='64' id='7710808a'/>
+      <pointer-type-def type-id='5f92413f' size-in-bits='64' id='48faa79b'/>
+      <function-decl name='sock_diag_unregister' mangled-name='sock_diag_unregister' filepath='net/core/sock_diag.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_unregister'>
+        <parameter type-id='4adb9081' name='hnld' filepath='net/core/sock_diag.c' line='198' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_diag_save_cookie' mangled-name='sock_diag_save_cookie' filepath='net/core/sock_diag.c' line='51' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_save_cookie'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock_diag.c' line='51' column='1'/>
+        <parameter type-id='cd1b45ab' name='cookie' filepath='net/core/sock_diag.c' line='51' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_diag_register' mangled-name='sock_diag_register' filepath='net/core/sock_diag.c' line='180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_register'>
+        <parameter type-id='4adb9081' name='hndl' filepath='net/core/sock_diag.c' line='180' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_diag_destroy' mangled-name='sock_diag_destroy' filepath='net/core/sock_diag.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_diag_destroy'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/core/sock_diag.c' line='296' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='net/core/sock_diag.c' line='296' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='26e0d4f0'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='c2074578'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5f92413f'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='f772df6d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/core/utils.c' language='LANG_C89'>
+      <pointer-type-def type-id='7dac1e36' size-in-bits='64' id='91b10e59'/>
+      <function-decl name='net_ratelimit' mangled-name='net_ratelimit' filepath='net/core/utils.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='net_ratelimit'>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_proto_csum_replace4' mangled-name='inet_proto_csum_replace4' filepath='net/core/utils.c' line='425' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_proto_csum_replace4'>
+        <parameter type-id='91b10e59' name='sum' filepath='net/core/utils.c' line='425' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/core/utils.c' line='425' column='1'/>
+        <parameter type-id='78a133c2' name='from' filepath='net/core/utils.c' line='426' column='1'/>
+        <parameter type-id='78a133c2' name='to' filepath='net/core/utils.c' line='426' column='1'/>
+        <parameter type-id='b50a4934' name='pseudohdr' filepath='net/core/utils.c' line='426' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='in6_pton' mangled-name='in6_pton' filepath='net/core/utils.c' line='184' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in6_pton'>
+        <parameter type-id='80f4b756' name='src' filepath='net/core/utils.c' line='184' column='1'/>
+        <parameter type-id='95e97e5e' name='srclen' filepath='net/core/utils.c' line='184' column='1'/>
+        <parameter type-id='8bff8096' name='dst' filepath='net/core/utils.c' line='185' column='1'/>
+        <parameter type-id='95e97e5e' name='delim' filepath='net/core/utils.c' line='186' column='1'/>
+        <parameter type-id='7d3cd834' name='end' filepath='net/core/utils.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='in4_pton' mangled-name='in4_pton' filepath='net/core/utils.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in4_pton'>
+        <parameter type-id='80f4b756' name='src' filepath='net/core/utils.c' line='118' column='1'/>
+        <parameter type-id='95e97e5e' name='srclen' filepath='net/core/utils.c' line='118' column='1'/>
+        <parameter type-id='8bff8096' name='dst' filepath='net/core/utils.c' line='119' column='1'/>
+        <parameter type-id='95e97e5e' name='delim' filepath='net/core/utils.c' line='120' column='1'/>
+        <parameter type-id='7d3cd834' name='end' filepath='net/core/utils.c' line='120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='8abc4a7f'>
+        <underlying-type type-id='9cac1fee'/>
+        <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_reg' mangled-name='xdp_rxq_info_reg' filepath='net/core/xdp.c' line='187' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg'>
+        <parameter type-id='8e35a44c' name='xdp_rxq' filepath='net/core/xdp.c' line='187' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/core/xdp.c' line='188' column='1'/>
+        <parameter type-id='19c2251e' name='queue_index' filepath='net/core/xdp.c' line='188' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xdp_rxq_info_unreg' mangled-name='xdp_rxq_info_unreg' filepath='net/core/xdp.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_unreg'>
+        <parameter type-id='8e35a44c' name='xdp_rxq' filepath='net/core/xdp.c' line='162' column='1'/>
+        <return type-id='48b5725f'/>
+      </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='289' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_rxq_info_reg_mem_model'>
+        <parameter type-id='8e35a44c' name='xdp_rxq' filepath='net/core/xdp.c' line='289' column='1'/>
+        <parameter type-id='8abc4a7f' name='type' filepath='net/core/xdp.c' line='290' column='1'/>
+        <parameter type-id='eaa32e2f' name='allocator' filepath='net/core/xdp.c' line='290' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame_rx_napi' mangled-name='xdp_return_frame_rx_napi' filepath='net/core/xdp.c' line='409' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame_rx_napi'>
+        <parameter type-id='cb1c5129' name='xdpf' filepath='net/core/xdp.c' line='409' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_return_frame' mangled-name='xdp_return_frame' filepath='net/core/xdp.c' line='403' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_return_frame'>
+        <parameter type-id='cb1c5129' name='xdpf' filepath='net/core/xdp.c' line='403' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xdp_convert_zc_to_xdp_frame' mangled-name='xdp_convert_zc_to_xdp_frame' filepath='net/core/xdp.c' line='467' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xdp_convert_zc_to_xdp_frame'>
+        <parameter type-id='38ed603d' name='xdp' filepath='net/core/xdp.c' line='467' column='1'/>
+        <return type-id='cb1c5129'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_type_trans'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ethernet/eth.c' line='155' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='155' column='1'/>
+        <return type-id='84a5c3d4'/>
+      </function-decl>
+      <function-decl name='ether_setup' mangled-name='ether_setup' filepath='net/ethernet/eth.c' line='377' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ether_setup'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='377' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='eth_validate_addr' mangled-name='eth_validate_addr' filepath='net/ethernet/eth.c' line='354' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_validate_addr'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='354' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_prepare_mac_addr_change' mangled-name='eth_prepare_mac_addr_change' filepath='net/ethernet/eth.c' line='291' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_prepare_mac_addr_change'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='291' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_platform_get_mac_address' mangled-name='eth_platform_get_mac_address' filepath='net/ethernet/eth.c' line='551' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_platform_get_mac_address'>
+        <parameter type-id='fa0b179b' name='dev' filepath='net/ethernet/eth.c' line='551' column='1'/>
+        <parameter type-id='8bff8096' name='mac_addr' filepath='net/ethernet/eth.c' line='551' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_mac_addr' mangled-name='eth_mac_addr' filepath='net/ethernet/eth.c' line='326' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_mac_addr'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='326' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='326' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='eth_commit_mac_addr_change' mangled-name='eth_commit_mac_addr_change' filepath='net/ethernet/eth.c' line='308' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='eth_commit_mac_addr_change'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ethernet/eth.c' line='308' column='1'/>
+        <parameter type-id='eaa32e2f' name='p' filepath='net/ethernet/eth.c' line='308' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='alloc_etherdev_mqs' mangled-name='alloc_etherdev_mqs' filepath='net/ethernet/eth.c' line='411' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='alloc_etherdev_mqs'>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='net/ethernet/eth.c' line='411' column='1'/>
+        <parameter type-id='f0981eeb' name='txqs' filepath='net/ethernet/eth.c' line='411' column='1'/>
+        <parameter type-id='f0981eeb' name='rxqs' filepath='net/ethernet/eth.c' line='412' column='1'/>
+        <return type-id='68a2d05b'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/arp.c' language='LANG_C89'>
+      <var-decl name='arp_tbl' type-id='aebe1cff' mangled-name='arp_tbl' visibility='default' filepath='net/ipv4/arp.c' line='152' column='1' elf-symbol-id='arp_tbl'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/devinet.c' language='LANG_C89'>
+      <function-decl name='inet_select_addr' mangled-name='inet_select_addr' filepath='net/ipv4/devinet.c' line='1301' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_select_addr'>
+        <parameter type-id='2ce52478' name='dev' filepath='net/ipv4/devinet.c' line='1301' column='1'/>
+        <parameter type-id='78a133c2' name='dst' filepath='net/ipv4/devinet.c' line='1301' column='1'/>
+        <parameter type-id='95e97e5e' name='scope' filepath='net/ipv4/devinet.c' line='1301' column='1'/>
+        <return type-id='78a133c2'/>
+      </function-decl>
+      <function-decl name='unregister_inetaddr_notifier' mangled-name='unregister_inetaddr_notifier' filepath='net/ipv4/devinet.c' line='1457' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_inetaddr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv4/devinet.c' line='1457' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_inetaddr_notifier' mangled-name='register_inetaddr_notifier' filepath='net/ipv4/devinet.c' line='1451' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_inetaddr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv4/devinet.c' line='1451' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/fib_frontend.c' language='LANG_C89'>
+      <function-decl name='inet_dev_addr_type' mangled-name='inet_dev_addr_type' filepath='net/ipv4/fib_frontend.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_dev_addr_type'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/fib_frontend.c' line='258' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='net/ipv4/fib_frontend.c' line='258' column='1'/>
+        <parameter type-id='78a133c2' name='addr' filepath='net/ipv4/fib_frontend.c' line='259' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/gre_demux.c' language='LANG_C89'>
+      <class-decl name='gre_protocol' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/gre.h' line='27' column='1' id='e9928c10'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/gre.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='err_handler' type-id='e4b24123' visibility='default' filepath='include/net/gre.h' line='29' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e9928c10' const='yes' id='b053b689'/>
+      <pointer-type-def type-id='b053b689' size-in-bits='64' id='36c88299'/>
+      <pointer-type-def type-id='4157d9cf' size-in-bits='64' id='e4b24123'/>
+      <function-decl name='gre_del_protocol' mangled-name='gre_del_protocol' filepath='net/ipv4/gre_demux.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gre_del_protocol'>
+        <parameter type-id='36c88299' name='proto' filepath='net/ipv4/gre_demux.c' line='41' column='1'/>
+        <parameter type-id='f9b06939' name='version' filepath='net/ipv4/gre_demux.c' line='41' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='gre_add_protocol' mangled-name='gre_add_protocol' filepath='net/ipv4/gre_demux.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='gre_add_protocol'>
+        <parameter type-id='36c88299' name='proto' filepath='net/ipv4/gre_demux.c' line='31' column='1'/>
+        <parameter type-id='f9b06939' name='version' filepath='net/ipv4/gre_demux.c' line='31' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4157d9cf'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/inet_diag.c' language='LANG_C89'>
+      <class-decl name='ip_mc_socklist' is-struct='yes' visibility='default' is-declaration-only='yes' id='42cd489a'/>
+      <array-type-def dimensions='1' type-id='f6ed712a' size-in-bits='infinite' id='0fdf6c82'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='91ce1af9' size-in-bits='832' id='08a4cc8e'>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <class-decl name='inet_connection_sock' size-in-bits='12032' is-struct='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='92' column='1' id='2a0babad'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icsk_inet' type-id='cec16d30' visibility='default' filepath='include/net/inet_connection_sock.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8384'>
+          <var-decl name='icsk_accept_queue' type-id='a6c77117' visibility='default' filepath='include/net/inet_connection_sock.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9024'>
+          <var-decl name='icsk_bind_hash' type-id='d535b874' visibility='default' filepath='include/net/inet_connection_sock.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9088'>
+          <var-decl name='icsk_timeout' type-id='7359adad' visibility='default' filepath='include/net/inet_connection_sock.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9152'>
+          <var-decl name='icsk_retransmit_timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_connection_sock.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9600'>
+          <var-decl name='icsk_delack_timer' type-id='abe41e67' visibility='default' filepath='include/net/inet_connection_sock.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='icsk_rto' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10080'>
+          <var-decl name='icsk_pmtu_cookie' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='icsk_ca_ops' type-id='b3ef56ee' visibility='default' filepath='include/net/inet_connection_sock.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='icsk_af_ops' type-id='d23c2125' visibility='default' filepath='include/net/inet_connection_sock.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='icsk_ulp_ops' type-id='c23fc09a' visibility='default' filepath='include/net/inet_connection_sock.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='icsk_ulp_data' type-id='eaa32e2f' visibility='default' filepath='include/net/inet_connection_sock.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10368'>
+          <var-decl name='icsk_clean_acked' type-id='815f64bf' visibility='default' filepath='include/net/inet_connection_sock.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='icsk_listen_portaddr_node' type-id='03a4a074' visibility='default' filepath='include/net/inet_connection_sock.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='icsk_sync_mss' type-id='de90632b' visibility='default' filepath='include/net/inet_connection_sock.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icsk_ca_state' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='icsk_ca_setsockopt' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='icsk_ca_dst_locked' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10632'>
+          <var-decl name='icsk_retransmits' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10640'>
+          <var-decl name='icsk_pending' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10648'>
+          <var-decl name='icsk_backoff' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10656'>
+          <var-decl name='icsk_syn_retries' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10664'>
+          <var-decl name='icsk_probes_out' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10672'>
+          <var-decl name='icsk_ext_hdr_len' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='icsk_ack' type-id='a2193a7c' visibility='default' filepath='include/net/inet_connection_sock.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='icsk_mtup' type-id='5e0338e2' visibility='default' filepath='include/net/inet_connection_sock.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11040'>
+          <var-decl name='icsk_probes_tstamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='icsk_user_timeout' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/inet_connection_sock.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='icsk_ca_priv' type-id='08a4cc8e' visibility='default' filepath='include/net/inet_connection_sock.h' line='146' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_sock' size-in-bits='8384' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='195' column='1' id='cec16d30'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk' type-id='a240f41d' visibility='default' filepath='include/net/inet_sock.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='pinet6' type-id='6d320b83' visibility='default' filepath='include/net/inet_sock.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='inet_saddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6816'>
+          <var-decl name='uc_ttl' type-id='b55def60' visibility='default' filepath='include/net/inet_sock.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6832'>
+          <var-decl name='cmsg_flags' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='inet_sport' type-id='84a5c3d4' visibility='default' filepath='include/net/inet_sock.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6864'>
+          <var-decl name='inet_id' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='inet_opt' type-id='70119ea2' visibility='default' filepath='include/net/inet_sock.h' line='213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='rx_dst_ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7008'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7016'>
+          <var-decl name='min_ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7024'>
+          <var-decl name='mc_ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7032'>
+          <var-decl name='pmtudisc' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recverr' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_icsk' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='freebind' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='hdrincl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='mc_loop' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='transparent' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='mc_all' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='nodefrag' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bind_address_no_port' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='defer_connect' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7056'>
+          <var-decl name='rcv_tos' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7064'>
+          <var-decl name='convert_csum' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7072'>
+          <var-decl name='uc_index' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='mc_index' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7136'>
+          <var-decl name='mc_addr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='236' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='mc_list' type-id='b49efd08' visibility='default' filepath='include/net/inet_sock.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='cork' type-id='da785a0b' visibility='default' filepath='include/net/inet_sock.h' line='238' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_pinfo' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='218' column='1' id='bcad3f73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/linux/ipv6.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sticky_pktinfo' type-id='91b426fc' visibility='default' filepath='include/linux/ipv6.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr_cache' type-id='fea9c20b' visibility='default' filepath='include/linux/ipv6.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flow_label' type-id='78a133c2' visibility='default' filepath='include/linux/ipv6.h' line='226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='frag_size' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__unused_1' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='hop_limit' type-id='b55def60' visibility='default' filepath='include/linux/ipv6.h' line='238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mc_loop' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='__unused_2' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='248' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='mcast_hops' type-id='b55def60' visibility='default' filepath='include/linux/ipv6.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='ucast_oif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mcast_oif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='rxopt' type-id='23d43bd5' visibility='default' filepath='include/linux/ipv6.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recverr' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='sndflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='repflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='pmtudisc' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='padding' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='srcprefs' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='dontfrag' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='autoflowlabel' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='autoflowlabel_set' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='mc_all' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='rtalert_isolate' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='min_hopcount' type-id='8f048e17' visibility='default' filepath='include/linux/ipv6.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='584'>
+          <var-decl name='tclass' type-id='8f048e17' visibility='default' filepath='include/linux/ipv6.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rcv_flowinfo' type-id='78a133c2' visibility='default' filepath='include/linux/ipv6.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dst_cookie' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='rx_dst_cookie' type-id='3f1a6b60' visibility='default' filepath='include/linux/ipv6.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ipv6_mc_list' type-id='3d802c7c' visibility='default' filepath='include/linux/ipv6.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='ipv6_ac_list' type-id='0d2afef8' visibility='default' filepath='include/linux/ipv6.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ipv6_fl_list' type-id='3a14a5ee' visibility='default' filepath='include/linux/ipv6.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/linux/ipv6.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pktoptions' type-id='0fbf3cfd' visibility='default' filepath='include/linux/ipv6.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='rxpmtu' type-id='0fbf3cfd' visibility='default' filepath='include/linux/ipv6.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cork' type-id='79e3d9fd' visibility='default' filepath='include/linux/ipv6.h' line='306' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='in6_pktinfo' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='21' column='1' id='91b426fc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipi6_addr' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/ipv6.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ipi6_ifindex' type-id='95e97e5e' visibility='default' filepath='include/uapi/linux/ipv6.h' line='23' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__21' size-in-bits='16' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='255' column='1' id='23d43bd5'>
+        <data-member access='public'>
+          <var-decl name='bits' type-id='9ebd5abd' visibility='default' filepath='include/linux/ipv6.h' line='273' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='all' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='274' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ipv6.h' line='256' column='1' id='9ebd5abd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='srcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='osrcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='rxinfo' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='rxoinfo' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='rxhlim' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='rxohlim' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='hopopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='ohopopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dstopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='odstopts' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='rxflow' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='rxtclass' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='rxpmtu' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='rxorigdstaddr' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='recvfragsize' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_mc_socklist' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='89' column='1' id='8f725b86'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sfmode' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='3d802c7c' visibility='default' filepath='include/net/if_inet6.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='sflock' type-id='ac16795b' visibility='default' filepath='include/net/if_inet6.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sflist' type-id='b25391b7' visibility='default' filepath='include/net/if_inet6.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/if_inet6.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_sf_socklist' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='78' column='1' id='3df0f7af'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sl_max' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sl_count' type-id='f0981eeb' visibility='default' filepath='include/net/if_inet6.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sl_addr' type-id='0fdf6c82' visibility='default' filepath='include/net/if_inet6.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_ac_socklist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/if_inet6.h' line='134' column='1' id='dcf61f1a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='acl_addr' type-id='f6ed712a' visibility='default' filepath='include/net/if_inet6.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='acl_ifindex' type-id='95e97e5e' visibility='default' filepath='include/net/if_inet6.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='acl_next' type-id='0d2afef8' visibility='default' filepath='include/net/if_inet6.h' line='137' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_fl_socklist' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='337' column='1' id='05198978'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='3a14a5ee' visibility='default' filepath='include/net/ipv6.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fl' type-id='e90fa847' visibility='default' filepath='include/net/ipv6.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='340' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6_flowlabel' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='312' column='1' id='55fcdb4f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='next' type-id='e90fa847' visibility='default' filepath='include/net/ipv6.h' line='313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='label' type-id='78a133c2' visibility='default' filepath='include/net/ipv6.h' line='314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='users' type-id='49178f86' visibility='default' filepath='include/net/ipv6.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='f6ed712a' visibility='default' filepath='include/net/ipv6.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/net/ipv6.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='linger' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='share' type-id='f9b06939' visibility='default' filepath='include/net/ipv6.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='f3980da2' visibility='default' filepath='include/net/ipv6.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lastuse' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='expires' type-id='7359adad' visibility='default' filepath='include/net/ipv6.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='fl_net' type-id='a2bff676' visibility='default' filepath='include/net/ipv6.h' line='327' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_txoptions' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/ipv6.h' line='287' column='1' id='03e12711'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='refcnt' type-id='64615833' visibility='default' filepath='include/net/ipv6.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tot_len' type-id='95e97e5e' visibility='default' filepath='include/net/ipv6.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt_flen' type-id='d315442e' visibility='default' filepath='include/net/ipv6.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='opt_nflen' type-id='d315442e' visibility='default' filepath='include/net/ipv6.h' line='295' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hopopt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst0opt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='srcrt' type-id='40629354' visibility='default' filepath='include/net/ipv6.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dst1opt' type-id='edff578b' visibility='default' filepath='include/net/ipv6.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/ipv6.h' line='301' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_opt_hdr' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='61' column='1' id='5510bbdb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nexthdr' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hdrlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ipv6_rt_hdr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/ipv6.h' line='48' column='1' id='0eae882e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nexthdr' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='hdrlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='segments_left' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/ipv6.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__22' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/ipv6.h' line='321' column='1' id='f3980da2'>
+        <data-member access='public'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/net/ipv6.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='uid' type-id='d80b72e6' visibility='default' filepath='include/net/ipv6.h' line='323' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='inet6_cork' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='204' column='1' id='79e3d9fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='opt' type-id='d4145729' visibility='default' filepath='include/linux/ipv6.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hop_limit' type-id='f9b06939' visibility='default' filepath='include/linux/ipv6.h' line='206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='tclass' type-id='f9b06939' visibility='default' filepath='include/linux/ipv6.h' line='207' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_options_rcu' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='58' column='1' id='0786b8b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/inet_sock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='opt' type-id='fa35cea9' visibility='default' filepath='include/net/inet_sock.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip_options' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='39' column='1' id='fa35cea9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='faddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nexthop' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='optlen' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='srr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='ts' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_strictroute' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='srr_is_hit' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='is_changed' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='rr_needaddr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='ts_needtime' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='ts_needaddr' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='router_alert' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='cipso' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='__pad2' type-id='002ac4a6' visibility='default' filepath='include/net/inet_sock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='__data' type-id='5e6516ee' visibility='default' filepath='include/net/inet_sock.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_cork_full' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='166' column='1' id='da785a0b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='base' type-id='c466cd59' visibility='default' filepath='include/net/inet_sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fl' type-id='2117397c' visibility='default' filepath='include/net/inet_sock.h' line='168' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_cork' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/inet_sock.h' line='150' column='1' id='c466cd59'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/net/inet_sock.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='addr' type-id='78a133c2' visibility='default' filepath='include/net/inet_sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='opt' type-id='57b94931' visibility='default' filepath='include/net/inet_sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fragsize' type-id='f0981eeb' visibility='default' filepath='include/net/inet_sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='length' type-id='95e97e5e' visibility='default' filepath='include/net/inet_sock.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dst' type-id='141b6427' visibility='default' filepath='include/net/inet_sock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_flags' type-id='f9b06939' visibility='default' filepath='include/net/inet_sock.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='ttl' type-id='8f048e17' visibility='default' filepath='include/net/inet_sock.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='tos' type-id='b55def60' visibility='default' filepath='include/net/inet_sock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='priority' type-id='a84c031d' visibility='default' filepath='include/net/inet_sock.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='gso_size' type-id='d315442e' visibility='default' filepath='include/net/inet_sock.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='transmit_time' type-id='91ce1af9' visibility='default' filepath='include/net/inet_sock.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='mark' type-id='19c2251e' visibility='default' filepath='include/net/inet_sock.h' line='163' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='request_sock_queue' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='166' column='1' id='a6c77117'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rskq_lock' type-id='fb4018a0' visibility='default' filepath='include/net/request_sock.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rskq_defer_accept' type-id='f9b06939' visibility='default' filepath='include/net/request_sock.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='synflood_warned' type-id='19c2251e' visibility='default' filepath='include/net/request_sock.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='qlen' type-id='49178f86' visibility='default' filepath='include/net/request_sock.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='young' type-id='49178f86' visibility='default' filepath='include/net/request_sock.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rskq_accept_head' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rskq_accept_tail' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fastopenq' type-id='a5c461a3' visibility='default' filepath='include/net/request_sock.h' line='176' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='fastopen_queue' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/request_sock.h' line='146' column='1' id='a5c461a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rskq_rst_head' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rskq_rst_tail' type-id='94c948ef' visibility='default' filepath='include/net/request_sock.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/request_sock.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='qlen' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_qlen' type-id='95e97e5e' visibility='default' filepath='include/net/request_sock.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ctx' type-id='104fa32f' visibility='default' filepath='include/net/request_sock.h' line='156' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_bind_bucket' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/inet_hashtables.h' line='76' column='1' id='1251126e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ib_net' type-id='c9df1e6c' visibility='default' filepath='include/net/inet_hashtables.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='l3mdev' type-id='95e97e5e' visibility='default' filepath='include/net/inet_hashtables.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='port' type-id='8efea9e5' visibility='default' filepath='include/net/inet_hashtables.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='fastreuse' type-id='28577a57' visibility='default' filepath='include/net/inet_hashtables.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='fastreuseport' type-id='28577a57' visibility='default' filepath='include/net/inet_hashtables.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fastuid' type-id='d80b72e6' visibility='default' filepath='include/net/inet_hashtables.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fast_v6_rcv_saddr' type-id='f6ed712a' visibility='default' filepath='include/net/inet_hashtables.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='fast_rcv_saddr' type-id='78a133c2' visibility='default' filepath='include/net/inet_hashtables.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fast_sk_family' type-id='8efea9e5' visibility='default' filepath='include/net/inet_hashtables.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='fast_ipv6_only' type-id='b50a4934' visibility='default' filepath='include/net/inet_hashtables.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='node' type-id='03a4a074' visibility='default' filepath='include/net/inet_hashtables.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='owners' type-id='e151255a' visibility='default' filepath='include/net/inet_hashtables.h' line='90' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_connection_sock_af_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='34' column='1' id='d334c4a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='queue_xmit' type-id='52980ce4' visibility='default' filepath='include/net/inet_connection_sock.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='send_check' type-id='765eef68' visibility='default' filepath='include/net/inet_connection_sock.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rebuild_header' type-id='55530c47' visibility='default' filepath='include/net/inet_connection_sock.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk_rx_dst_set' type-id='b087f139' visibility='default' filepath='include/net/inet_connection_sock.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='conn_request' type-id='a0f5247f' visibility='default' filepath='include/net/inet_connection_sock.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='syn_recv_sock' type-id='8aa28e29' visibility='default' filepath='include/net/inet_connection_sock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='net_header_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='net_frag_header_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sockaddr_len' type-id='1dc6a898' visibility='default' filepath='include/net/inet_connection_sock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/inet_connection_sock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/inet_connection_sock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_setsockopt' type-id='bc1bf185' visibility='default' filepath='include/net/inet_connection_sock.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_getsockopt' type-id='e0fadd76' visibility='default' filepath='include/net/inet_connection_sock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='addr2sockaddr' type-id='d9587521' visibility='default' filepath='include/net/inet_connection_sock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mtu_reduced' type-id='841969d0' visibility='default' filepath='include/net/inet_connection_sock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/inet_connection_sock.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcp_ulp_ops' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/tcp.h' line='2150' column='1' id='fccb029f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/tcp.h' line='2151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='init' type-id='55530c47' visibility='default' filepath='include/net/tcp.h' line='2154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='update' type-id='58220cf1' visibility='default' filepath='include/net/tcp.h' line='2156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='841969d0' visibility='default' filepath='include/net/tcp.h' line='2159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_info' type-id='684afc90' visibility='default' filepath='include/net/tcp.h' line='2161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get_info_size' type-id='08a11828' visibility='default' filepath='include/net/tcp.h' line='2162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/tcp.h' line='2164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/tcp.h' line='2165' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='118' column='1' id='a2193a7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pending' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='quick' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pingpong' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='blocked' type-id='8f048e17' visibility='default' filepath='include/net/inet_connection_sock.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ato' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='timeout' type-id='7359adad' visibility='default' filepath='include/net/inet_connection_sock.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lrcvtime' type-id='3f1a6b60' visibility='default' filepath='include/net/inet_connection_sock.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='last_seg_size' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='rcv_mss' type-id='d315442e' visibility='default' filepath='include/net/inet_connection_sock.h' line='127' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='160' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/inet_connection_sock.h' line='129' column='1' id='5e0338e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enabled' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='search_high' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='search_low' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='probe_size' type-id='95e97e5e' visibility='default' filepath='include/net/inet_connection_sock.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='probe_timestamp' type-id='19c2251e' visibility='default' filepath='include/net/inet_connection_sock.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_req_v2' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='38' column='1' id='98bb2d81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sdiag_family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sdiag_protocol' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_ext' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='pad' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idiag_states' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='b73cf3f5' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_sockid' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='14' column='1' id='b73cf3f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idiag_sport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_dport' type-id='84a5c3d4' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idiag_src' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='idiag_dst' type-id='30180d4b' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='idiag_if' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='idiag_cookie' type-id='839e8989' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='20' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_handler' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/linux/inet_diag.h' line='10' column='1' id='a8966aec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dump' type-id='ccda370f' visibility='default' filepath='include/linux/inet_diag.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump_one' type-id='1ae236b0' visibility='default' filepath='include/linux/inet_diag.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idiag_get_info' type-id='3e22b2b6' visibility='default' filepath='include/linux/inet_diag.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='idiag_get_aux' type-id='98dc4446' visibility='default' filepath='include/linux/inet_diag.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='idiag_get_aux_size' type-id='5db8f742' visibility='default' filepath='include/linux/inet_diag.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='destroy' type-id='6d1cf440' visibility='default' filepath='include/linux/inet_diag.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='idiag_type' type-id='d315442e' visibility='default' filepath='include/linux/inet_diag.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='idiag_info_size' type-id='d315442e' visibility='default' filepath='include/linux/inet_diag.h' line='35' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='inet_diag_msg' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='113' column='1' id='1bead3e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idiag_family' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='idiag_state' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='idiag_timer' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='idiag_retrans' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='b73cf3f5' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='idiag_expires' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='idiag_rqueue' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='idiag_wqueue' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='idiag_uid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='idiag_inode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/inet_diag.h' line='125' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f6ed712a' const='yes' id='ce076883'/>
+      <pointer-type-def type-id='ce076883' size-in-bits='64' id='fea9c20b'/>
+      <qualified-type-def type-id='d334c4a2' const='yes' id='1ec1e54d'/>
+      <pointer-type-def type-id='1ec1e54d' size-in-bits='64' id='d23c2125'/>
+      <qualified-type-def type-id='a8966aec' const='yes' id='00dd00af'/>
+      <pointer-type-def type-id='00dd00af' size-in-bits='64' id='e0e7d15f'/>
+      <qualified-type-def type-id='98bb2d81' const='yes' id='b1eae038'/>
+      <pointer-type-def type-id='b1eae038' size-in-bits='64' id='26bebc56'/>
+      <qualified-type-def type-id='fccb029f' const='yes' id='cb9a8514'/>
+      <pointer-type-def type-id='cb9a8514' size-in-bits='64' id='c23fc09a'/>
+      <pointer-type-def type-id='1251126e' size-in-bits='64' id='d535b874'/>
+      <pointer-type-def type-id='2a0babad' size-in-bits='64' id='774fc7fd'/>
+      <pointer-type-def type-id='1bead3e1' size-in-bits='64' id='36b74cb9'/>
+      <pointer-type-def type-id='4041f6de' size-in-bits='64' id='684afc90'/>
+      <pointer-type-def type-id='15d70b96' size-in-bits='64' id='6d1cf440'/>
+      <pointer-type-def type-id='72c03956' size-in-bits='64' id='1ae236b0'/>
+      <pointer-type-def type-id='ba5db8ea' size-in-bits='64' id='52980ce4'/>
+      <pointer-type-def type-id='457c9dbc' size-in-bits='64' id='98dc4446'/>
+      <pointer-type-def type-id='55fcdb4f' size-in-bits='64' id='e90fa847'/>
+      <pointer-type-def type-id='3df0f7af' size-in-bits='64' id='b25391b7'/>
+      <pointer-type-def type-id='42cd489a' size-in-bits='64' id='b49efd08'/>
+      <pointer-type-def type-id='fa35cea9' size-in-bits='64' id='57b94931'/>
+      <pointer-type-def type-id='0786b8b4' size-in-bits='64' id='70119ea2'/>
+      <pointer-type-def type-id='dcf61f1a' size-in-bits='64' id='0d2afef8'/>
+      <pointer-type-def type-id='05198978' size-in-bits='64' id='3a14a5ee'/>
+      <pointer-type-def type-id='8f725b86' size-in-bits='64' id='3d802c7c'/>
+      <pointer-type-def type-id='5510bbdb' size-in-bits='64' id='edff578b'/>
+      <pointer-type-def type-id='bcad3f73' size-in-bits='64' id='6d320b83'/>
+      <pointer-type-def type-id='0eae882e' size-in-bits='64' id='40629354'/>
+      <pointer-type-def type-id='03e12711' size-in-bits='64' id='d4145729'/>
+      <pointer-type-def type-id='34dda955' size-in-bits='64' id='8aa28e29'/>
+      <pointer-type-def type-id='f6898056' size-in-bits='64' id='08a11828'/>
+      <pointer-type-def type-id='62313820' size-in-bits='64' id='5db8f742'/>
+      <pointer-type-def type-id='d23b37cf' size-in-bits='64' id='de90632b'/>
+      <pointer-type-def type-id='c42215fb' size-in-bits='64' id='ccda370f'/>
+      <pointer-type-def type-id='1945ad2d' size-in-bits='64' id='b087f139'/>
+      <pointer-type-def type-id='15df0404' size-in-bits='64' id='3e22b2b6'/>
+      <pointer-type-def type-id='14059615' size-in-bits='64' id='58220cf1'/>
+      <pointer-type-def type-id='f69f6d0e' size-in-bits='64' id='765eef68'/>
+      <pointer-type-def type-id='dae66efd' size-in-bits='64' id='d9587521'/>
+      <function-decl name='inet_sk_diag_fill' mangled-name='inet_sk_diag_fill' filepath='net/ipv4/inet_diag.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_sk_diag_fill'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv4/inet_diag.c' line='173' column='1'/>
+        <parameter type-id='774fc7fd' name='icsk' filepath='net/ipv4/inet_diag.c' line='173' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/inet_diag.c' line='174' column='1'/>
+        <parameter type-id='26bebc56' name='req' filepath='net/ipv4/inet_diag.c' line='174' column='1'/>
+        <parameter type-id='c0ced320' name='user_ns' filepath='net/ipv4/inet_diag.c' line='175' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/ipv4/inet_diag.c' line='176' column='1'/>
+        <parameter type-id='19c2251e' name='seq' filepath='net/ipv4/inet_diag.c' line='176' column='1'/>
+        <parameter type-id='1dc6a898' name='nlmsg_flags' filepath='net/ipv4/inet_diag.c' line='176' column='1'/>
+        <parameter type-id='390fbe8f' name='unlh' filepath='net/ipv4/inet_diag.c' line='177' column='1'/>
+        <parameter type-id='b50a4934' name='net_admin' filepath='net/ipv4/inet_diag.c' line='178' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_diag_unregister' mangled-name='inet_diag_unregister' filepath='net/ipv4/inet_diag.c' line='1259' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_unregister'>
+        <parameter type-id='e0e7d15f' name='h' filepath='net/ipv4/inet_diag.c' line='1259' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='inet_diag_register' mangled-name='inet_diag_register' filepath='net/ipv4/inet_diag.c' line='1239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_register'>
+        <parameter type-id='e0e7d15f' name='h' filepath='net/ipv4/inet_diag.c' line='1239' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='inet_diag_bc_sk' mangled-name='inet_diag_bc_sk' filepath='net/ipv4/inet_diag.c' line='671' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='inet_diag_bc_sk'>
+        <parameter type-id='0f2a7ce5' name='bc' filepath='net/ipv4/inet_diag.c' line='671' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv4/inet_diag.c' line='671' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4041f6de'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15d70b96'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='26bebc56'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='72c03956'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='390fbe8f'/>
+        <parameter type-id='26bebc56'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba5db8ea'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='b1fd62ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='457c9dbc'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34dda955'>
+        <parameter type-id='78e7cf52'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='94c948ef'/>
+        <parameter type-id='141b6427'/>
+        <parameter type-id='94c948ef'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='f772df6d'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f6898056'>
+        <parameter type-id='78e7cf52'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='62313820'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d23b37cf'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c42215fb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='26bebc56'/>
+        <parameter type-id='6fcaf91e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1945ad2d'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='11f4a000'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15df0404'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='36b74cb9'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14059615'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='d2524501'/>
+        <parameter type-id='841969d0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f69f6d0e'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dae66efd'>
+        <parameter type-id='f772df6d'/>
+        <parameter type-id='5c0abad8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/ip_output.c' language='LANG_C89'>
+      <function-decl name='ip_send_check' mangled-name='ip_send_check' filepath='net/ipv4/ip_output.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_send_check'>
+        <parameter type-id='53be694c' name='iph' filepath='net/ipv4/ip_output.c' line='92' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip_local_out' mangled-name='ip_local_out' filepath='net/ipv4/ip_output.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_local_out'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/ip_output.c' line='120' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv4/ip_output.c' line='120' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/ip_output.c' line='120' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='1edbefa6' size-in-bits='64' id='53be694c'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/raw.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='e151255a' size-in-bits='16384' id='a7c26c7b'>
+        <subrange length='256' type-id='7ff19f0f' id='36e5b9fa'/>
+      </array-type-def>
+      <class-decl name='udp_hslot' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/udp.h' line='57' column='1' id='fa07ab8f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='e151255a' visibility='default' filepath='include/net/udp.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='95e97e5e' visibility='default' filepath='include/net/udp.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/net/udp.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='fa07ab8f' size-in-bits='64' id='9cc41107'/>
+      <var-decl name='raw_v4_hashinfo' type-id='51ee3086' mangled-name='raw_v4_hashinfo' visibility='default' filepath='net/ipv4/raw.c' line='88' column='1' elf-symbol-id='raw_v4_hashinfo'/>
+      <function-decl name='__raw_v4_lookup' mangled-name='__raw_v4_lookup' filepath='net/ipv4/raw.c' line='120' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_v4_lookup'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/raw.c' line='120' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv4/raw.c' line='120' column='1'/>
+        <parameter type-id='8efea9e5' name='num' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='78a133c2' name='raddr' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='78a133c2' name='laddr' filepath='net/ipv4/raw.c' line='121' column='1'/>
+        <parameter type-id='95e97e5e' name='dif' filepath='net/ipv4/raw.c' line='122' column='1'/>
+        <parameter type-id='95e97e5e' name='sdif' filepath='net/ipv4/raw.c' line='122' column='1'/>
+        <return type-id='f772df6d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/route.c' language='LANG_C89'>
+      <pointer-type-def type-id='5f8f2c58' size-in-bits='64' id='a198549e'/>
+      <pointer-type-def type-id='1edbefa6' size-in-bits='64' id='53be694c'/>
+      <function-decl name='ip_route_output_flow' mangled-name='ip_route_output_flow' filepath='net/ipv4/route.c' line='2745' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip_route_output_flow'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/route.c' line='2745' column='1'/>
+        <parameter type-id='a198549e' name='flp4' filepath='net/ipv4/route.c' line='2745' column='1'/>
+        <parameter type-id='78e7cf52' name='sk' filepath='net/ipv4/route.c' line='2746' column='1'/>
+        <return type-id='c8f5869f'/>
+      </function-decl>
+      <function-decl name='__ip_select_ident' mangled-name='__ip_select_ident' filepath='net/ipv4/route.c' line='514' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ip_select_ident'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/route.c' line='514' column='1'/>
+        <parameter type-id='53be694c' name='iph' filepath='net/ipv4/route.c' line='514' column='1'/>
+        <parameter type-id='95e97e5e' name='segs' filepath='net/ipv4/route.c' line='514' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ipv4_update_pmtu' mangled-name='ipv4_update_pmtu' filepath='net/ipv4/route.c' line='1082' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv4_update_pmtu'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/route.c' line='1082' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/route.c' line='1082' column='1'/>
+        <parameter type-id='19c2251e' name='mtu' filepath='net/ipv4/route.c' line='1082' column='1'/>
+        <parameter type-id='95e97e5e' name='oif' filepath='net/ipv4/route.c' line='1083' column='1'/>
+        <parameter type-id='f9b06939' name='protocol' filepath='net/ipv4/route.c' line='1083' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ipv4_redirect' mangled-name='ipv4_redirect' filepath='net/ipv4/route.c' line='1172' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv4_redirect'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/route.c' line='1172' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv4/route.c' line='1172' column='1'/>
+        <parameter type-id='95e97e5e' name='oif' filepath='net/ipv4/route.c' line='1173' column='1'/>
+        <parameter type-id='f9b06939' name='protocol' filepath='net/ipv4/route.c' line='1173' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/tunnel4.c' language='LANG_C89'>
+      <class-decl name='xfrm_tunnel' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1418' column='1' id='3c05ad89'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='err_handler' type-id='5cacf26c' visibility='default' filepath='include/net/xfrm.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='next' type-id='f68cfba1' visibility='default' filepath='include/net/xfrm.h' line='1422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1423' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='ef4bec92' size-in-bits='64' id='5cacf26c'/>
+      <pointer-type-def type-id='3c05ad89' size-in-bits='64' id='f68cfba1'/>
+      <function-decl name='xfrm4_tunnel_deregister' mangled-name='xfrm4_tunnel_deregister' filepath='net/ipv4/tunnel4.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_tunnel_deregister'>
+        <parameter type-id='f68cfba1' name='handler' filepath='net/ipv4/tunnel4.c' line='63' column='1'/>
+        <parameter type-id='8efea9e5' name='family' filepath='net/ipv4/tunnel4.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm4_tunnel_register' mangled-name='xfrm4_tunnel_register' filepath='net/ipv4/tunnel4.c' line='31' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_tunnel_register'>
+        <parameter type-id='f68cfba1' name='handler' filepath='net/ipv4/tunnel4.c' line='31' column='1'/>
+        <parameter type-id='8efea9e5' name='family' filepath='net/ipv4/tunnel4.c' line='31' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='ef4bec92'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/xfrm4_input.c' language='LANG_C89'>
+      <function-decl name='xfrm4_rcv' mangled-name='xfrm4_rcv' filepath='net/ipv4/xfrm4_input.c' line='173' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_rcv'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv4/xfrm4_input.c' line='173' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv4/xfrm4_protocol.c' language='LANG_C89'>
+      <class-decl name='xfrm4_protocol' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1396' column='1' id='bf8af843'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='input_handler' type-id='ec71052e' visibility='default' filepath='include/net/xfrm.h' line='1398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_handler' type-id='0aeca82c' visibility='default' filepath='include/net/xfrm.h' line='1400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='err_handler' type-id='5cacf26c' visibility='default' filepath='include/net/xfrm.h' line='1401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='next' type-id='5a0e9b53' visibility='default' filepath='include/net/xfrm.h' line='1403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1404' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0b1ae172' size-in-bits='64' id='0aeca82c'/>
+      <pointer-type-def type-id='1e37318c' size-in-bits='64' id='ec71052e'/>
+      <pointer-type-def type-id='bf8af843' size-in-bits='64' id='5a0e9b53'/>
+      <function-decl name='xfrm4_protocol_deregister' mangled-name='xfrm4_protocol_deregister' filepath='net/ipv4/xfrm4_protocol.c' line='258' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_protocol_deregister'>
+        <parameter type-id='5a0e9b53' name='handler' filepath='net/ipv4/xfrm4_protocol.c' line='258' column='1'/>
+        <parameter type-id='002ac4a6' name='protocol' filepath='net/ipv4/xfrm4_protocol.c' line='259' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm4_protocol_register' mangled-name='xfrm4_protocol_register' filepath='net/ipv4/xfrm4_protocol.c' line='211' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm4_protocol_register'>
+        <parameter type-id='5a0e9b53' name='handler' filepath='net/ipv4/xfrm4_protocol.c' line='211' column='1'/>
+        <parameter type-id='002ac4a6' name='protocol' filepath='net/ipv4/xfrm4_protocol.c' line='212' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='0b1ae172'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1e37318c'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='78a133c2'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/addrconf.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='19c2251e' size-in-bits='1024' id='6dcfc3c6'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='wpan_phy' size-in-bits='9472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='176' column='1' id='0a042b05'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg802154.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='current_channel' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='current_page' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='supported' type-id='7b03c2a4' visibility='default' filepath='include/net/cfg802154.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='transmit_power' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='cca' type-id='51a1cee7' visibility='default' filepath='include/net/cfg802154.h' line='197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='perm_extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='cca_ed_level' type-id='a7832498' visibility='default' filepath='include/net/cfg802154.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='symbol_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='lifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='sifs_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg802154.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg802154.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9408'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg802154.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9472'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg802154.h' line='217' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wpan_phy_supported' size-in-bits='1472' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='134' column='1' id='7b03c2a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='6dcfc3c6' visibility='default' filepath='include/net/cfg802154.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='cca_modes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='cca_opts' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='iftypes' type-id='19c2251e' visibility='default' filepath='include/net/cfg802154.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='lbt' type-id='c78c6f33' visibility='default' filepath='include/net/cfg802154.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='min_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='max_minbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='min_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_maxbe' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='min_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='max_csma_backoffs' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='min_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1208'>
+          <var-decl name='max_frame_retries' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg802154.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='tx_powers_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='cca_ed_levels_size' type-id='b59d7dce' visibility='default' filepath='include/net/cfg802154.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='tx_powers' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cca_ed_levels' type-id='e0a2e3a6' visibility='default' filepath='include/net/cfg802154.h' line='142' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl802154_supported_bool_states' filepath='include/net/nl802154.h' line='274' column='1' id='c78c6f33'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_FALSE' value='0'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_TRUE' value='1'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_INVALD' value='2'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_BOTH' value='3'/>
+        <enumerator name='__NL802154_SUPPORTED_BOOL_AFTER_LAST' value='4'/>
+        <enumerator name='NL802154_SUPPORTED_BOOL_MAX' value='3'/>
+      </enum-decl>
+      <class-decl name='wpan_phy_cca' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='145' column='1' id='51a1cee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='59ec32df' visibility='default' filepath='include/net/cfg802154.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='opt' type-id='ef15418f' visibility='default' filepath='include/net/cfg802154.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl802154_cca_modes' filepath='include/net/nl802154.h' line='235' column='1' id='59ec32df'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='__NL802154_CCA_INVALID' value='0'/>
+        <enumerator name='NL802154_CCA_ENERGY' value='1'/>
+        <enumerator name='NL802154_CCA_CARRIER' value='2'/>
+        <enumerator name='NL802154_CCA_ENERGY_CARRIER' value='3'/>
+        <enumerator name='NL802154_CCA_ALOHA' value='4'/>
+        <enumerator name='NL802154_CCA_UWB_SHR' value='5'/>
+        <enumerator name='NL802154_CCA_UWB_MULTIPLEXED' value='6'/>
+        <enumerator name='__NL802154_CCA_ATTR_AFTER_LAST' value='7'/>
+        <enumerator name='NL802154_CCA_ATTR_MAX' value='6'/>
+      </enum-decl>
+      <enum-decl name='nl802154_cca_opts' filepath='include/net/nl802154.h' line='255' column='1' id='ef15418f'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_AND' value='0'/>
+        <enumerator name='NL802154_CCA_OPT_ENERGY_CARRIER_OR' value='1'/>
+        <enumerator name='__NL802154_CCA_OPT_ATTR_AFTER_LAST' value='2'/>
+        <enumerator name='NL802154_CCA_OPT_ATTR_MAX' value='1'/>
+      </enum-decl>
+      <class-decl name='wpan_dev_header_ops' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='315' column='1' id='95fcbc94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='create' type-id='5afbd3c3' visibility='default' filepath='include/net/cfg802154.h' line='320' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee802154_addr' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg802154.h' line='230' column='1' id='57d8dd3d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/net/cfg802154.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='pan_id' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='25cb4d60' visibility='default' filepath='include/net/cfg802154.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg802154.h' line='233' column='1' id='25cb4d60'>
+        <data-member access='public'>
+          <var-decl name='short_addr' type-id='23119536' visibility='default' filepath='include/net/cfg802154.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='extended_addr' type-id='a30e8d1f' visibility='default' filepath='include/net/cfg802154.h' line='235' column='1'/>
+        </data-member>
+      </union-decl>
+      <qualified-type-def type-id='57d8dd3d' const='yes' id='d37aa9fa'/>
+      <pointer-type-def type-id='d37aa9fa' size-in-bits='64' id='ba195270'/>
+      <qualified-type-def type-id='95fcbc94' const='yes' id='ff37489f'/>
+      <pointer-type-def type-id='ff37489f' size-in-bits='64' id='790774ef'/>
+      <pointer-type-def type-id='bb1a67f7' size-in-bits='64' id='5afbd3c3'/>
+      <pointer-type-def type-id='0a042b05' size-in-bits='64' id='82398c35'/>
+      <function-decl name='ipv6_dev_get_saddr' mangled-name='ipv6_dev_get_saddr' filepath='net/ipv6/addrconf.c' line='1744' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_dev_get_saddr'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/addrconf.c' line='1744' column='1'/>
+        <parameter type-id='2ce52478' name='dst_dev' filepath='net/ipv6/addrconf.c' line='1744' column='1'/>
+        <parameter type-id='fea9c20b' name='daddr' filepath='net/ipv6/addrconf.c' line='1745' column='1'/>
+        <parameter type-id='f0981eeb' name='prefs' filepath='net/ipv6/addrconf.c' line='1745' column='1'/>
+        <parameter type-id='ed512028' name='saddr' filepath='net/ipv6/addrconf.c' line='1746' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipv6_chk_addr' mangled-name='ipv6_chk_addr' filepath='net/ipv6/addrconf.c' line='1890' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_chk_addr'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/addrconf.c' line='1890' column='1'/>
+        <parameter type-id='fea9c20b' name='addr' filepath='net/ipv6/addrconf.c' line='1890' column='1'/>
+        <parameter type-id='2ce52478' name='dev' filepath='net/ipv6/addrconf.c' line='1891' column='1'/>
+        <parameter type-id='95e97e5e' name='strict' filepath='net/ipv6/addrconf.c' line='1891' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='addrconf_prefix_rcv_add_addr' mangled-name='addrconf_prefix_rcv_add_addr' filepath='net/ipv6/addrconf.c' line='2580' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='addrconf_prefix_rcv_add_addr'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/addrconf.c' line='2580' column='1'/>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/ipv6/addrconf.c' line='2580' column='1'/>
+        <parameter type-id='d070dbfd' name='pinfo' filepath='net/ipv6/addrconf.c' line='2581' column='1'/>
+        <parameter type-id='f026b16b' name='in6_dev' filepath='net/ipv6/addrconf.c' line='2582' column='1'/>
+        <parameter type-id='fea9c20b' name='addr' filepath='net/ipv6/addrconf.c' line='2583' column='1'/>
+        <parameter type-id='95e97e5e' name='addr_type' filepath='net/ipv6/addrconf.c' line='2583' column='1'/>
+        <parameter type-id='19c2251e' name='addr_flags' filepath='net/ipv6/addrconf.c' line='2584' column='1'/>
+        <parameter type-id='b50a4934' name='sllao' filepath='net/ipv6/addrconf.c' line='2584' column='1'/>
+        <parameter type-id='b50a4934' name='tokenized' filepath='net/ipv6/addrconf.c' line='2584' column='1'/>
+        <parameter type-id='3f1a6b60' name='valid_lft' filepath='net/ipv6/addrconf.c' line='2585' column='1'/>
+        <parameter type-id='19c2251e' name='prefered_lft' filepath='net/ipv6/addrconf.c' line='2585' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='bb1a67f7'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ba195270'/>
+        <parameter type-id='ba195270'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/addrconf_core.c' language='LANG_C89'>
+      <function-decl name='in6_dev_finish_destroy' mangled-name='in6_dev_finish_destroy' filepath='net/ipv6/addrconf_core.c' line='239' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='in6_dev_finish_destroy'>
+        <parameter type-id='f026b16b' name='idev' filepath='net/ipv6/addrconf_core.c' line='239' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='unregister_inet6addr_notifier' mangled-name='unregister_inet6addr_notifier' filepath='net/ipv6/addrconf_core.c' line='101' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_inet6addr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv6/addrconf_core.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='register_inet6addr_notifier' mangled-name='register_inet6addr_notifier' filepath='net/ipv6/addrconf_core.c' line='95' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_inet6addr_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/ipv6/addrconf_core.c' line='95' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__ipv6_addr_type' mangled-name='__ipv6_addr_type' filepath='net/ipv6/addrconf_core.c' line='38' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ipv6_addr_type'>
+        <parameter type-id='fea9c20b' name='addr' filepath='net/ipv6/addrconf_core.c' line='38' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/exthdrs_core.c' language='LANG_C89'>
+      <pointer-type-def type-id='84a5c3d4' size-in-bits='64' id='769cf345'/>
+      <function-decl name='ipv6_skip_exthdr' mangled-name='ipv6_skip_exthdr' filepath='net/ipv6/exthdrs_core.c' line='72' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_skip_exthdr'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/ipv6/exthdrs_core.c' line='72' column='1'/>
+        <parameter type-id='95e97e5e' name='start' filepath='net/ipv6/exthdrs_core.c' line='72' column='1'/>
+        <parameter type-id='8bff8096' name='nexthdrp' filepath='net/ipv6/exthdrs_core.c' line='72' column='1'/>
+        <parameter type-id='769cf345' name='frag_offp' filepath='net/ipv6/exthdrs_core.c' line='73' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipv6_find_hdr' mangled-name='ipv6_find_hdr' filepath='net/ipv6/exthdrs_core.c' line='186' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_find_hdr'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/ipv6/exthdrs_core.c' line='186' column='1'/>
+        <parameter type-id='807869d3' name='offset' filepath='net/ipv6/exthdrs_core.c' line='186' column='1'/>
+        <parameter type-id='95e97e5e' name='target' filepath='net/ipv6/exthdrs_core.c' line='187' column='1'/>
+        <parameter type-id='e9e550dd' name='fragoff' filepath='net/ipv6/exthdrs_core.c' line='187' column='1'/>
+        <parameter type-id='7292109c' name='flags' filepath='net/ipv6/exthdrs_core.c' line='187' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipv6_ext_hdr' mangled-name='ipv6_ext_hdr' filepath='net/ipv6/exthdrs_core.c' line='13' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_ext_hdr'>
+        <parameter type-id='f9b06939' name='nexthdr' filepath='net/ipv6/exthdrs_core.c' line='13' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <pointer-type-def type-id='8efea9e5' size-in-bits='64' id='e9e550dd'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/icmp.c' language='LANG_C89'>
+      <class-decl name='inet6_skb_parm' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/ipv6.h' line='124' column='1' id='c4d0818f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iif' type-id='95e97e5e' visibility='default' filepath='include/linux/ipv6.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ra' type-id='84a5c3d4' visibility='default' filepath='include/linux/ipv6.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dst0' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='srcrt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='dst1' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='lastopt' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='nhoff' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dsthao' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='frag_max_size' type-id='d315442e' visibility='default' filepath='include/linux/ipv6.h' line='136' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c4d0818f' const='yes' id='ef3b2b52'/>
+      <pointer-type-def type-id='ef3b2b52' size-in-bits='64' id='12256de8'/>
+      <function-decl name='icmp6_send' mangled-name='icmp6_send' filepath='net/ipv6/icmp.c' line='428' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='icmp6_send'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/icmp.c' line='428' column='1'/>
+        <parameter type-id='f9b06939' name='type' filepath='net/ipv6/icmp.c' line='428' column='1'/>
+        <parameter type-id='f9b06939' name='code' filepath='net/ipv6/icmp.c' line='428' column='1'/>
+        <parameter type-id='3f1a6b60' name='info' filepath='net/ipv6/icmp.c' line='428' column='1'/>
+        <parameter type-id='fea9c20b' name='force_saddr' filepath='net/ipv6/icmp.c' line='429' column='1'/>
+        <parameter type-id='12256de8' name='parm' filepath='net/ipv6/icmp.c' line='430' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/ip6_checksum.c' language='LANG_C89'>
+      <function-decl name='csum_ipv6_magic' mangled-name='csum_ipv6_magic' filepath='net/ipv6/ip6_checksum.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='csum_ipv6_magic'>
+        <parameter type-id='fea9c20b' name='saddr' filepath='net/ipv6/ip6_checksum.c' line='8' column='1'/>
+        <parameter type-id='fea9c20b' name='daddr' filepath='net/ipv6/ip6_checksum.c' line='9' column='1'/>
+        <parameter type-id='3f1a6b60' name='len' filepath='net/ipv6/ip6_checksum.c' line='10' column='1'/>
+        <parameter type-id='8f048e17' name='proto' filepath='net/ipv6/ip6_checksum.c' line='10' column='1'/>
+        <parameter type-id='fbd88bba' name='csum' filepath='net/ipv6/ip6_checksum.c' line='10' column='1'/>
+        <return type-id='7dac1e36'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/ndisc.c' language='LANG_C89'>
+      <var-decl name='nd_tbl' type-id='aebe1cff' mangled-name='nd_tbl' visibility='default' filepath='net/ipv6/ndisc.c' line='109' column='1' elf-symbol-id='nd_tbl'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/netfilter/ip6_tables.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='5c902035' size-in-bits='infinite' id='897aa90d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='ip6t_replace' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='219' column='1' id='fdaf7365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='valid_hooks' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='225' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_entries' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='231' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='hook_entry' type-id='4d5a4f46' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='234' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='underflow' type-id='4d5a4f46' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='num_counters' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='counters' type-id='14e4adab' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='entries' type-id='897aa90d' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_counters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='110' column='1' id='f3def31b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcnt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bcnt' type-id='d3130597' visibility='default' filepath='include/uapi/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6t_entry' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='110' column='1' id='5c902035'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ipv6' type-id='3c253edc' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='nfcache' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='target_offset' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='next_offset' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='comefrom' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='counters' type-id='f3def31b' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='elems' type-id='5e6516ee' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='128' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ip6t_ip6' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='64' column='1' id='3c253edc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dst' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='smsk' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dmsk' type-id='f6ed712a' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='iniface' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='outiface' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='iniface_mask' type-id='92a46553' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='outiface_mask' type-id='92a46553' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='proto' type-id='d315442e' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='tos' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1048'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='invflags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/netfilter_ipv6/ip6_tables.h' line='87' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='fdaf7365' const='yes' id='3390cea8'/>
+      <pointer-type-def type-id='3390cea8' size-in-bits='64' id='aef516a6'/>
+      <pointer-type-def type-id='f3def31b' size-in-bits='64' id='14e4adab'/>
+      <pointer-type-def type-id='95610bd4' size-in-bits='64' id='25c5e0da'/>
+      <function-decl name='ip6t_do_table' mangled-name='ip6t_do_table' filepath='net/ipv6/netfilter/ip6_tables.c' line='250' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_do_table'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/netfilter/ip6_tables.c' line='250' column='1'/>
+        <parameter type-id='309a5a26' name='state' filepath='net/ipv6/netfilter/ip6_tables.c' line='251' column='1'/>
+        <parameter type-id='95610bd4' name='table' filepath='net/ipv6/netfilter/ip6_tables.c' line='252' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ip6t_unregister_table' mangled-name='ip6t_unregister_table' filepath='net/ipv6/netfilter/ip6_tables.c' line='1813' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_unregister_table'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/netfilter/ip6_tables.c' line='1813' column='1'/>
+        <parameter type-id='95610bd4' name='table' filepath='net/ipv6/netfilter/ip6_tables.c' line='1813' column='1'/>
+        <parameter type-id='27db53a1' name='ops' filepath='net/ipv6/netfilter/ip6_tables.c' line='1814' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip6t_register_table' mangled-name='ip6t_register_table' filepath='net/ipv6/netfilter/ip6_tables.c' line='1767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_register_table'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/netfilter/ip6_tables.c' line='1767' column='1'/>
+        <parameter type-id='e52e19bf' name='table' filepath='net/ipv6/netfilter/ip6_tables.c' line='1767' column='1'/>
+        <parameter type-id='aef516a6' name='repl' filepath='net/ipv6/netfilter/ip6_tables.c' line='1768' column='1'/>
+        <parameter type-id='27db53a1' name='ops' filepath='net/ipv6/netfilter/ip6_tables.c' line='1769' column='1'/>
+        <parameter type-id='25c5e0da' name='res' filepath='net/ipv6/netfilter/ip6_tables.c' line='1770' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ip6t_alloc_initial_table' mangled-name='ip6t_alloc_initial_table' filepath='net/ipv6/netfilter/ip6_tables.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6t_alloc_initial_table'>
+        <parameter type-id='e52e19bf' name='info' filepath='net/ipv6/netfilter/ip6_tables.c' line='40' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <pointer-type-def type-id='af1e6651' size-in-bits='64' id='27db53a1'/>
+      <pointer-type-def type-id='3a8ead28' size-in-bits='64' id='309a5a26'/>
+      <pointer-type-def type-id='3d24528f' size-in-bits='64' id='e52e19bf'/>
+      <qualified-type-def type-id='63d6992a' const='yes' id='af1e6651'/>
+      <qualified-type-def type-id='89d4ce3f' const='yes' id='3a8ead28'/>
+      <qualified-type-def type-id='469df90e' const='yes' id='3d24528f'/>
+      <class-decl name='nf_hook_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='80' column='1' id='63d6992a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hooknum' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='67' column='1' id='89d4ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='out' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='okfn' type-id='0023218e' visibility='default' filepath='include/linux/netfilter.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/output_core.c' language='LANG_C89'>
+      <function-decl name='ip6_find_1stfragopt' mangled-name='ip6_find_1stfragopt' filepath='net/ipv6/output_core.c' line='64' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_find_1stfragopt'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/output_core.c' line='64' column='1'/>
+        <parameter type-id='1f37a7f4' name='nexthdr' filepath='net/ipv6/output_core.c' line='64' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ip6_local_out' mangled-name='ip6_local_out' filepath='net/ipv6/output_core.c' line='155' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_local_out'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/output_core.c' line='155' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv6/output_core.c' line='155' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/output_core.c' line='155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipv6_select_ident' mangled-name='ipv6_select_ident' filepath='net/ipv6/output_core.c' line='53' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipv6_select_ident'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/output_core.c' line='53' column='1'/>
+        <parameter type-id='fea9c20b' name='daddr' filepath='net/ipv6/output_core.c' line='54' column='1'/>
+        <parameter type-id='fea9c20b' name='saddr' filepath='net/ipv6/output_core.c' line='55' column='1'/>
+        <return type-id='78a133c2'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/raw.c' language='LANG_C89'>
+      <var-decl name='raw_v6_hashinfo' type-id='51ee3086' mangled-name='raw_v6_hashinfo' visibility='default' filepath='net/ipv6/raw.c' line='64' column='1' elf-symbol-id='raw_v6_hashinfo'/>
+      <function-decl name='__raw_v6_lookup' mangled-name='__raw_v6_lookup' filepath='net/ipv6/raw.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__raw_v6_lookup'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/raw.c' line='69' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/ipv6/raw.c' line='69' column='1'/>
+        <parameter type-id='8efea9e5' name='num' filepath='net/ipv6/raw.c' line='70' column='1'/>
+        <parameter type-id='fea9c20b' name='loc_addr' filepath='net/ipv6/raw.c' line='70' column='1'/>
+        <parameter type-id='fea9c20b' name='rmt_addr' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='dif' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <parameter type-id='95e97e5e' name='sdif' filepath='net/ipv6/raw.c' line='71' column='1'/>
+        <return type-id='f772df6d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/route.c' language='LANG_C89'>
+      <pointer-type-def type-id='618f2f7e' size-in-bits='64' id='a99cde64'/>
+      <function-decl name='ip6_route_output_flags' mangled-name='ip6_route_output_flags' filepath='net/ipv6/route.c' line='2530' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_route_output_flags'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/route.c' line='2530' column='1'/>
+        <parameter type-id='78e7cf52' name='sk' filepath='net/ipv6/route.c' line='2531' column='1'/>
+        <parameter type-id='a99cde64' name='fl6' filepath='net/ipv6/route.c' line='2532' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/ipv6/route.c' line='2533' column='1'/>
+        <return type-id='141b6427'/>
+      </function-decl>
+      <function-decl name='rt6_lookup' mangled-name='rt6_lookup' filepath='net/ipv6/route.c' line='1279' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rt6_lookup'>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/route.c' line='1279' column='1'/>
+        <parameter type-id='fea9c20b' name='daddr' filepath='net/ipv6/route.c' line='1279' column='1'/>
+        <parameter type-id='fea9c20b' name='saddr' filepath='net/ipv6/route.c' line='1280' column='1'/>
+        <parameter type-id='95e97e5e' name='oif' filepath='net/ipv6/route.c' line='1280' column='1'/>
+        <parameter type-id='11f4a000' name='skb' filepath='net/ipv6/route.c' line='1281' column='1'/>
+        <parameter type-id='95e97e5e' name='strict' filepath='net/ipv6/route.c' line='1281' column='1'/>
+        <return type-id='6ceb7782'/>
+      </function-decl>
+      <function-decl name='ip6_update_pmtu' mangled-name='ip6_update_pmtu' filepath='net/ipv6/route.c' line='2824' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_update_pmtu'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/route.c' line='2824' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/route.c' line='2824' column='1'/>
+        <parameter type-id='78a133c2' name='mtu' filepath='net/ipv6/route.c' line='2824' column='1'/>
+        <parameter type-id='95e97e5e' name='oif' filepath='net/ipv6/route.c' line='2825' column='1'/>
+        <parameter type-id='19c2251e' name='mark' filepath='net/ipv6/route.c' line='2825' column='1'/>
+        <parameter type-id='d80b72e6' name='uid' filepath='net/ipv6/route.c' line='2825' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ip6_redirect' mangled-name='ip6_redirect' filepath='net/ipv6/route.c' line='3039' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ip6_redirect'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/route.c' line='3039' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/ipv6/route.c' line='3039' column='1'/>
+        <parameter type-id='95e97e5e' name='oif' filepath='net/ipv6/route.c' line='3039' column='1'/>
+        <parameter type-id='19c2251e' name='mark' filepath='net/ipv6/route.c' line='3039' column='1'/>
+        <parameter type-id='d80b72e6' name='uid' filepath='net/ipv6/route.c' line='3040' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/xfrm6_input.c' language='LANG_C89'>
+      <function-decl name='xfrm6_rcv' mangled-name='xfrm6_rcv' filepath='net/ipv6/xfrm6_input.c' line='79' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_rcv'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/xfrm6_input.c' line='79' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/xfrm6_output.c' language='LANG_C89'>
+      <function-decl name='xfrm6_find_1stfragopt' mangled-name='xfrm6_find_1stfragopt' filepath='net/ipv6/xfrm6_output.c' line='19' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_find_1stfragopt'>
+        <parameter type-id='328dda6e' name='x' filepath='net/ipv6/xfrm6_output.c' line='19' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/ipv6/xfrm6_output.c' line='19' column='1'/>
+        <parameter type-id='1f37a7f4' name='prevhdr' filepath='net/ipv6/xfrm6_output.c' line='20' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/ipv6/xfrm6_protocol.c' language='LANG_C89'>
+      <class-decl name='xfrm6_protocol' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1407' column='1' id='bcc93c81'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='handler' type-id='d2e00785' visibility='default' filepath='include/net/xfrm.h' line='1408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cb_handler' type-id='0aeca82c' visibility='default' filepath='include/net/xfrm.h' line='1409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='err_handler' type-id='a6ecc207' visibility='default' filepath='include/net/xfrm.h' line='1410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='next' type-id='679c2b79' visibility='default' filepath='include/net/xfrm.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/net/xfrm.h' line='1414' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='c4d0818f' size-in-bits='64' id='cd91b317'/>
+      <pointer-type-def type-id='2a75d4cb' size-in-bits='64' id='a6ecc207'/>
+      <pointer-type-def type-id='bcc93c81' size-in-bits='64' id='679c2b79'/>
+      <function-decl name='xfrm6_protocol_deregister' mangled-name='xfrm6_protocol_deregister' filepath='net/ipv6/xfrm6_protocol.c' line='232' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_protocol_deregister'>
+        <parameter type-id='679c2b79' name='handler' filepath='net/ipv6/xfrm6_protocol.c' line='232' column='1'/>
+        <parameter type-id='002ac4a6' name='protocol' filepath='net/ipv6/xfrm6_protocol.c' line='233' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm6_protocol_register' mangled-name='xfrm6_protocol_register' filepath='net/ipv6/xfrm6_protocol.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm6_protocol_register'>
+        <parameter type-id='679c2b79' name='handler' filepath='net/ipv6/xfrm6_protocol.c' line='185' column='1'/>
+        <parameter type-id='002ac4a6' name='protocol' filepath='net/ipv6/xfrm6_protocol.c' line='186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='2a75d4cb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='cd91b317'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='78a133c2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/l2tp/l2tp_core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='b96825af' size-in-bits='infinite' id='048fe7bc'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='l2tp_session' size-in-bits='2624' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='71' column='1' id='9726f99c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dead' type-id='bd54fe1a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tunnel' type-id='2d83a1b8' visibility='default' filepath='net/l2tp/l2tp_core.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='session_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='peer_session_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='peer_cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='peer_cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='l2specific_type' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='hdr_len' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='nr' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ns' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reorder_q' type-id='e61c85d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='nr_max' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='nr_window_size' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='nr_oos' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='nr_oos_count' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='nr_oos_count_max' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hlist' type-id='03a4a074' visibility='default' filepath='net/l2tp/l2tp_core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='ref_count' type-id='64615833' visibility='default' filepath='net/l2tp/l2tp_core.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='ifname' type-id='ac1fa8c0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recv_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='send_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='lns_mode' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='reorder_timeout' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='reorder_skip' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='pwtype' type-id='748fba12' visibility='default' filepath='net/l2tp/l2tp_core.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='stats' type-id='33e678c3' visibility='default' filepath='net/l2tp/l2tp_core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='global_hlist' type-id='03a4a074' visibility='default' filepath='net/l2tp/l2tp_core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='build_header' type-id='837076a2' visibility='default' filepath='net/l2tp/l2tp_core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='recv_skb' type-id='7d671c0a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='session_close' type-id='901b6973' visibility='default' filepath='net/l2tp/l2tp_core.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='show' type-id='6ba28d1c' visibility='default' filepath='net/l2tp/l2tp_core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='priv' type-id='048fe7bc' visibility='default' filepath='net/l2tp/l2tp_core.h' line='119' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='l2tp_tunnel' size-in-bits='3136' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='144' column='1' id='0a3ca20a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dead' type-id='7359adad' visibility='default' filepath='net/l2tp/l2tp_core.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='net/l2tp/l2tp_core.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hlist_lock' type-id='ac16795b' visibility='default' filepath='net/l2tp/l2tp_core.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='acpt_newsess' type-id='b50a4934' visibility='default' filepath='net/l2tp/l2tp_core.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='session_hlist' type-id='ccfd385f' visibility='default' filepath='net/l2tp/l2tp_core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tunnel_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='peer_tunnel_id' type-id='19c2251e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='version' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='name' type-id='664ac0b7' visibility='default' filepath='net/l2tp/l2tp_core.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='encap' type-id='eab21901' visibility='default' filepath='net/l2tp/l2tp_core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='stats' type-id='33e678c3' visibility='default' filepath='net/l2tp/l2tp_core.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/l2tp/l2tp_core.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='l2tp_net' type-id='a2bff676' visibility='default' filepath='net/l2tp/l2tp_core.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ref_count' type-id='64615833' visibility='default' filepath='net/l2tp/l2tp_core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='old_sk_destruct' type-id='841969d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='172' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='sock' type-id='f772df6d' visibility='default' filepath='net/l2tp/l2tp_core.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fd' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='174' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='del_work' type-id='ef9025d0' visibility='default' filepath='net/l2tp/l2tp_core.h' line='177' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='l2tp_encap_type' filepath='include/uapi/linux/l2tp.h' line='167' column='1' id='eab21901'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='L2TP_ENCAPTYPE_UDP' value='0'/>
+        <enumerator name='L2TP_ENCAPTYPE_IP' value='1'/>
+      </enum-decl>
+      <class-decl name='l2tp_stats' size-in-bits='576' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='33' column='1' id='33e678c3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tx_bytes' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_errors' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rx_bytes' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rx_seq_discards' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rx_oos_packets' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rx_errors' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_cookie_discards' type-id='f22a8abb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='l2tp_pwtype' filepath='include/uapi/linux/l2tp.h' line='152' column='1' id='748fba12'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='L2TP_PWTYPE_NONE' value='0'/>
+        <enumerator name='L2TP_PWTYPE_ETH_VLAN' value='4'/>
+        <enumerator name='L2TP_PWTYPE_ETH' value='5'/>
+        <enumerator name='L2TP_PWTYPE_PPP' value='7'/>
+        <enumerator name='L2TP_PWTYPE_PPP_AC' value='8'/>
+        <enumerator name='L2TP_PWTYPE_IP' value='11'/>
+        <enumerator name='__L2TP_PWTYPE_MAX' value='12'/>
+      </enum-decl>
+      <class-decl name='l2tp_tunnel_cfg' size-in-bits='320' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='125' column='1' id='c5b77cb3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='encap' type-id='eab21901' visibility='default' filepath='net/l2tp/l2tp_core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='local_ip' type-id='34f03654' visibility='default' filepath='net/l2tp/l2tp_core.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='peer_ip' type-id='34f03654' visibility='default' filepath='net/l2tp/l2tp_core.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='local_ip6' type-id='ed512028' visibility='default' filepath='net/l2tp/l2tp_core.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='peer_ip6' type-id='ed512028' visibility='default' filepath='net/l2tp/l2tp_core.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='local_udp_port' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='peer_udp_port' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_udp_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='udp6_zero_tx_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='udp6_zero_rx_checksums' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='l2tp_session_cfg' size-in-bits='448' is-struct='yes' visibility='default' filepath='net/l2tp/l2tp_core.h' line='50' column='1' id='68f8e66d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pw_type' type-id='748fba12' visibility='default' filepath='net/l2tp/l2tp_core.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='recv_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='send_seq' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='lns_mode' type-id='f0981eeb' visibility='default' filepath='net/l2tp/l2tp_core.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='debug' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='l2specific_type' type-id='1dc6a898' visibility='default' filepath='net/l2tp/l2tp_core.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='peer_cookie' type-id='d2f7b56a' visibility='default' filepath='net/l2tp/l2tp_core.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='peer_cookie_len' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='reorder_timeout' type-id='95e97e5e' visibility='default' filepath='net/l2tp/l2tp_core.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ifname' type-id='26a90f95' visibility='default' filepath='net/l2tp/l2tp_core.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='368f1cf0' size-in-bits='64' id='837076a2'/>
+      <pointer-type-def type-id='9726f99c' size-in-bits='64' id='d35aee0a'/>
+      <pointer-type-def type-id='68f8e66d' size-in-bits='64' id='0357a19d'/>
+      <pointer-type-def type-id='0a3ca20a' size-in-bits='64' id='2d83a1b8'/>
+      <pointer-type-def type-id='2d83a1b8' size-in-bits='64' id='383758d6'/>
+      <pointer-type-def type-id='c5b77cb3' size-in-bits='64' id='88850643'/>
+      <pointer-type-def type-id='70a034c7' size-in-bits='64' id='901b6973'/>
+      <pointer-type-def type-id='679f0c08' size-in-bits='64' id='7d671c0a'/>
+      <function-decl name='l2tp_xmit_skb' mangled-name='l2tp_xmit_skb' filepath='net/l2tp/l2tp_core.c' line='1058' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_xmit_skb'>
+        <parameter type-id='d35aee0a' name='session' filepath='net/l2tp/l2tp_core.c' line='1058' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/l2tp/l2tp_core.c' line='1058' column='1'/>
+        <parameter type-id='95e97e5e' name='hdr_len' filepath='net/l2tp/l2tp_core.c' line='1058' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_udp_encap_recv' mangled-name='l2tp_udp_encap_recv' filepath='net/l2tp/l2tp_core.c' line='912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_udp_encap_recv'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/l2tp/l2tp_core.c' line='912' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/l2tp/l2tp_core.c' line='912' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_register' mangled-name='l2tp_tunnel_register' filepath='net/l2tp/l2tp_core.c' line='1475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_register'>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='1475' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/l2tp/l2tp_core.c' line='1475' column='1'/>
+        <parameter type-id='88850643' name='cfg' filepath='net/l2tp/l2tp_core.c' line='1476' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get_session' mangled-name='l2tp_tunnel_get_session' filepath='net/l2tp/l2tp_core.c' line='202' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get_session'>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='202' column='1'/>
+        <parameter type-id='19c2251e' name='session_id' filepath='net/l2tp/l2tp_core.c' line='203' column='1'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get_nth' mangled-name='l2tp_tunnel_get_nth' filepath='net/l2tp/l2tp_core.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get_nth'>
+        <parameter type-id='f91cf277' name='net' filepath='net/l2tp/l2tp_core.c' line='182' column='1'/>
+        <parameter type-id='95e97e5e' name='nth' filepath='net/l2tp/l2tp_core.c' line='182' column='1'/>
+        <return type-id='2d83a1b8'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_get' mangled-name='l2tp_tunnel_get' filepath='net/l2tp/l2tp_core.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_get'>
+        <parameter type-id='f91cf277' name='net' filepath='net/l2tp/l2tp_core.c' line='162' column='1'/>
+        <parameter type-id='19c2251e' name='tunnel_id' filepath='net/l2tp/l2tp_core.c' line='162' column='1'/>
+        <return type-id='2d83a1b8'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_free' mangled-name='l2tp_tunnel_free' filepath='net/l2tp/l2tp_core.c' line='154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_free'>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='154' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_delete' mangled-name='l2tp_tunnel_delete' filepath='net/l2tp/l2tp_core.c' line='1555' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_delete'>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='1555' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_tunnel_create' mangled-name='l2tp_tunnel_create' filepath='net/l2tp/l2tp_core.c' line='1406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_tunnel_create'>
+        <parameter type-id='a2bff676' name='net' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='95e97e5e' name='fd' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='95e97e5e' name='version' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='19c2251e' name='tunnel_id' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='19c2251e' name='peer_tunnel_id' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='88850643' name='cfg' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <parameter type-id='383758d6' name='tunnelp' filepath='net/l2tp/l2tp_core.c' line='1406' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_set_header_len' mangled-name='l2tp_session_set_header_len' filepath='net/l2tp/l2tp_core.c' line='1631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_set_header_len'>
+        <parameter type-id='d35aee0a' name='session' filepath='net/l2tp/l2tp_core.c' line='1631' column='1'/>
+        <parameter type-id='95e97e5e' name='version' filepath='net/l2tp/l2tp_core.c' line='1631' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_session_register' mangled-name='l2tp_session_register' filepath='net/l2tp/l2tp_core.c' line='296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_register'>
+        <parameter type-id='d35aee0a' name='session' filepath='net/l2tp/l2tp_core.c' line='296' column='1'/>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='297' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_get_nth' mangled-name='l2tp_session_get_nth' filepath='net/l2tp/l2tp_core.c' line='245' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_get_nth'>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='245' column='1'/>
+        <parameter type-id='95e97e5e' name='nth' filepath='net/l2tp/l2tp_core.c' line='245' column='1'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-decl name='l2tp_session_free' mangled-name='l2tp_session_free' filepath='net/l2tp/l2tp_core.c' line='1566' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_free'>
+        <parameter type-id='d35aee0a' name='session' filepath='net/l2tp/l2tp_core.c' line='1566' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='l2tp_session_delete' mangled-name='l2tp_session_delete' filepath='net/l2tp/l2tp_core.c' line='1612' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_delete'>
+        <parameter type-id='d35aee0a' name='session' filepath='net/l2tp/l2tp_core.c' line='1612' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='l2tp_session_create' mangled-name='l2tp_session_create' filepath='net/l2tp/l2tp_core.c' line='1647' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='l2tp_session_create'>
+        <parameter type-id='95e97e5e' name='priv_size' filepath='net/l2tp/l2tp_core.c' line='1647' column='1'/>
+        <parameter type-id='2d83a1b8' name='tunnel' filepath='net/l2tp/l2tp_core.c' line='1647' column='1'/>
+        <parameter type-id='19c2251e' name='session_id' filepath='net/l2tp/l2tp_core.c' line='1647' column='1'/>
+        <parameter type-id='19c2251e' name='peer_session_id' filepath='net/l2tp/l2tp_core.c' line='1647' column='1'/>
+        <parameter type-id='0357a19d' name='cfg' filepath='net/l2tp/l2tp_core.c' line='1647' column='1'/>
+        <return type-id='d35aee0a'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='368f1cf0'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='70a034c7'>
+        <parameter type-id='d35aee0a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='679f0c08'>
+        <parameter type-id='d35aee0a'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/agg-rx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_stop_rx_ba_session' mangled-name='ieee80211_stop_rx_ba_session' filepath='net/mac80211/agg-rx.c' line='125' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_rx_ba_session'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-rx.c' line='125' column='1'/>
+        <parameter type-id='1dc6a898' name='ba_rx_bitmap' filepath='net/mac80211/agg-rx.c' line='125' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/agg-rx.c' line='126' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_manage_rx_ba_offl' mangled-name='ieee80211_manage_rx_ba_offl' filepath='net/mac80211/agg-rx.c' line='511' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_manage_rx_ba_offl'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-rx.c' line='511' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/agg-rx.c' line='512' column='1'/>
+        <parameter type-id='f0981eeb' name='tid' filepath='net/mac80211/agg-rx.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b4ae7345' size-in-bits='64' id='3a1577c5'/>
+      <class-decl name='ieee80211_vif' size-in-bits='3264' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1617' column='1' id='b4ae7345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='86505f90' visibility='default' filepath='include/net/mac80211.h' line='1618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_conf' type-id='0f8e82db' visibility='default' filepath='include/net/mac80211.h' line='1619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2864'>
+          <var-decl name='p2p' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2872'>
+          <var-decl name='csa_active' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mu_mimo_owner' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2888'>
+          <var-decl name='cab_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2896'>
+          <var-decl name='hw_queue' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='txq' type-id='cde83d0f' visibility='default' filepath='include/net/mac80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='chanctx_conf' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='probe_req_reg' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='1638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='txqs_stopped' type-id='4ad33d9d' visibility='default' filepath='include/net/mac80211.h' line='1640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1645' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='32' id='4ad33d9d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ieee80211_bss_conf' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='609' column='1' id='0f8e82db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_color' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='htc_trig_based_pkt_ext' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='multi_sta_back_32bit' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='uora_exists' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='uora_ocw_range' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='frame_time_rts_th' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='he_support' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='twt_requester' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='assoc' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ibss_joined' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='ibss_creator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_cts_prot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='use_short_preamble' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='use_short_slot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='enable_beacon' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='beacon_int' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assoc_capability' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync_device_ts' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sync_dtim_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='beacon_rate' type-id='4343d470' visibility='default' filepath='include/net/mac80211.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/mac80211.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_operation_mode' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='cqm_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cqm_rssi_hyst' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='cqm_rssi_low' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cqm_rssi_high' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mu_group' type-id='082b33cf' visibility='default' filepath='include/net/mac80211.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='arp_addr_list' type-id='30180d4b' visibility='default' filepath='include/net/mac80211.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arp_addr_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='qos' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1512'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1520'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1528'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/mac80211.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='hidden_ssid' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='txpower' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='txpower_type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='p2p_noa_attr' type-id='8ed5c74b' visibility='default' filepath='include/net/mac80211.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2384'>
+          <var-decl name='allow_p2p_go_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_idle_period' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2416'>
+          <var-decl name='protected_keep_alive' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2424'>
+          <var-decl name='ftm_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ftmr_params' type-id='d203221f' visibility='default' filepath='include/net/mac80211.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nontransmitted' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2504'>
+          <var-decl name='transmitter_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2552'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='ema_ap' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2576'>
+          <var-decl name='profile_periodicity' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2584'>
+          <var-decl name='he_operation' type-id='ae6fa461' visibility='default' filepath='include/net/mac80211.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/mac80211.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9dcec05c' size-in-bits='64' id='9a58f9aa'/>
+      <pointer-type-def type-id='fa01d8f7' size-in-bits='64' id='cde83d0f'/>
+      <class-decl name='ieee80211_chanctx_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='226' column='1' id='9dcec05c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_chains_static' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='rx_chains_dynamic' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_obss_pd' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='259' column='1' id='198fcd88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='min_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_operation' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1640' column='1' id='ae6fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='he_oper_params' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='he_mcs_nss_set' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='optional' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mu_group_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='472' column='1' id='082b33cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/net/mac80211.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='474' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_attr' size-in-bits='432' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1243' column='1' id='8ed5c74b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='oppps_ctwindow' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='350eac09' visibility='default' filepath='include/linux/ieee80211.h' line='1246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2068' column='1' id='fa01d8f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='2069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ac' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2075' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tx_power_setting' filepath='include/uapi/linux/nl80211.h' line='4678' column='1' id='d46e3e96'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='a4a20ee7' size-in-bits='64' id='d203221f'/>
+      <class-decl name='ieee80211_ftm_responder_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='485' column='1' id='a4a20ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='489' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='46ac9319' size-in-bits='416' id='350eac09'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <pointer-type-def type-id='9188aa82' size-in-bits='64' id='f27bb1b0'/>
+      <class-decl name='ieee80211_p2p_noa_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1236' column='1' id='46ac9319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='duration' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='interval' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='start_time' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1983' column='1' id='9188aa82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supp_rates' type-id='1c6c0c39' visibility='default' filepath='include/net/mac80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/mac80211.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/mac80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/mac80211.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='wme' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='rx_nss' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bandwidth' type-id='99b24396' visibility='default' filepath='include/net/mac80211.h' line='1995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rates' type-id='88f13db8' visibility='default' filepath='include/net/mac80211.h' line='1997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tdls' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='tdls_initiator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mfp' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_amsdu_subframes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='max_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='support_p2p_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='max_rc_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='max_tid_amsdu_len' type-id='42c6815a' visibility='default' filepath='include/net/mac80211.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='txpwr' type-id='b18b35b8' visibility='default' filepath='include/net/mac80211.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='txq' type-id='c4105027' visibility='default' filepath='include/net/mac80211.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2029' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1931' column='1' id='b18b35b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='1933' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_smps_mode' filepath='include/net/mac80211.h' line='1466' column='1' id='5e2794d2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_SMPS_AUTOMATIC' value='0'/>
+        <enumerator name='IEEE80211_SMPS_OFF' value='1'/>
+        <enumerator name='IEEE80211_SMPS_STATIC' value='2'/>
+        <enumerator name='IEEE80211_SMPS_DYNAMIC' value='3'/>
+        <enumerator name='IEEE80211_SMPS_NUM_MODES' value='4'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_sta_rx_bandwidth' filepath='include/net/mac80211.h' line='1893' column='1' id='99b24396'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_RX_BW_20' value='0'/>
+        <enumerator name='IEEE80211_STA_RX_BW_40' value='1'/>
+        <enumerator name='IEEE80211_STA_RX_BW_80' value='2'/>
+        <enumerator name='IEEE80211_STA_RX_BW_160' value='3'/>
+      </enum-decl>
+      <pointer-type-def type-id='05fba71a' size-in-bits='64' id='88f13db8'/>
+      <array-type-def dimensions='1' type-id='cde83d0f' size-in-bits='1088' id='c4105027'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <class-decl name='ieee80211_sta_rates' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1907' column='1' id='05fba71a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/mac80211.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate' type-id='b7cdf388' visibility='default' filepath='include/net/mac80211.h' line='1915' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='53a31c26' size-in-bits='192' id='b7cdf388'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='__anonymous_struct__1' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1909' column='1' id='53a31c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count_cts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1914' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/agg-tx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_stop_tx_ba_cb_irqsafe' mangled-name='ieee80211_stop_tx_ba_cb_irqsafe' filepath='net/mac80211/agg-tx.c' line='907' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_tx_ba_cb_irqsafe'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-tx.c' line='907' column='1'/>
+        <parameter type-id='bbaf3419' name='ra' filepath='net/mac80211/agg-tx.c' line='908' column='1'/>
+        <parameter type-id='1dc6a898' name='tid' filepath='net/mac80211/agg-tx.c' line='908' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_start_tx_ba_cb_irqsafe' mangled-name='ieee80211_start_tx_ba_cb_irqsafe' filepath='net/mac80211/agg-tx.c' line='793' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_start_tx_ba_cb_irqsafe'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/agg-tx.c' line='793' column='1'/>
+        <parameter type-id='bbaf3419' name='ra' filepath='net/mac80211/agg-tx.c' line='794' column='1'/>
+        <parameter type-id='1dc6a898' name='tid' filepath='net/mac80211/agg-tx.c' line='794' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/cfg.c' language='LANG_C89'>
+      <function-decl name='ieee80211_csa_finish' mangled-name='ieee80211_csa_finish' filepath='net/mac80211/cfg.c' line='3054' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_finish'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/cfg.c' line='3054' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/chan.c' language='LANG_C89'>
+      <pointer-type-def type-id='fb1ffc17' size-in-bits='64' id='41e149d3'/>
+      <function-decl name='ieee80211_iter_chan_contexts_atomic' mangled-name='ieee80211_iter_chan_contexts_atomic' filepath='net/mac80211/chan.c' line='1781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iter_chan_contexts_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/chan.c' line='1782' column='1'/>
+        <parameter type-id='41e149d3' name='iter' filepath='net/mac80211/chan.c' line='1783' column='1'/>
+        <parameter type-id='eaa32e2f' name='iter_data' filepath='net/mac80211/chan.c' line='1786' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fb1ffc17'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='3d75a1cd' size-in-bits='64' id='1905517d'/>
+      <class-decl name='ieee80211_hw' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2481' column='1' id='3d75a1cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='conf' type-id='09b6f516' visibility='default' filepath='include/net/mac80211.h' line='2482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/mac80211.h' line='2483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate_control_algorithm' type-id='80f4b756' visibility='default' filepath='include/net/mac80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/net/mac80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='f066dd3c' visibility='default' filepath='include/net/mac80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='extra_tx_headroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='extra_beacon_tailroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vif_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='sta_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='chanctx_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='txq_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='queues' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='max_listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='max_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='2495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='max_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='max_report_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='max_rate_tries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='max_tx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='max_tx_fragments' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='offchannel_tx_hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='radiotap_mcs_details' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='radiotap_vht_details' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='radiotap_timestamp' type-id='cbf4d865' visibility='default' filepath='include/net/mac80211.h' line='2508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='netdev_features' type-id='f9f4b16f' visibility='default' filepath='include/net/mac80211.h' line='2509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1352'>
+          <var-decl name='uapsd_max_sp_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='n_cipher_schemes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cipher_schemes' type-id='0faa7e32' visibility='default' filepath='include/net/mac80211.h' line='2513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_nan_de_entries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='tx_sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='weight_multiplier' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='max_mtu' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='2519' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1510' column='1' id='09b6f516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='power_level' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dynamic_ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='ps_dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='long_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='short_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1523' 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/mac80211.h' line='2505' column='1' id='cbf4d865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='units_pos' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='2507' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='0637b06c' size-in-bits='64' id='0faa7e32'/>
+      <qualified-type-def type-id='68ce81a7' const='yes' id='0637b06c'/>
+      <class-decl name='ieee80211_cipher_scheme' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1838' column='1' id='68ce81a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iftype' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hdr_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pn_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pn_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='key_idx_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='key_idx_mask' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='key_idx_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mic_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1847' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/main.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='53a31c26' size-in-bits='192' id='b7cdf388'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b50a4934' size-in-bits='32' id='4ad33d9d'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bbaf3419' size-in-bits='256' id='a9f93891'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='46ac9319' size-in-bits='416' id='350eac09'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='cde83d0f' size-in-bits='1088' id='c4105027'>
+        <subrange length='17' type-id='7ff19f0f' id='888ad0ed'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b59d7dce' size-in-bits='256' id='314f9837'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='ieee80211_hw' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2481' column='1' id='3d75a1cd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='conf' type-id='09b6f516' visibility='default' filepath='include/net/mac80211.h' line='2482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/mac80211.h' line='2483' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate_control_algorithm' type-id='80f4b756' visibility='default' filepath='include/net/mac80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/net/mac80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='flags' type-id='f066dd3c' visibility='default' filepath='include/net/mac80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='extra_tx_headroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='extra_beacon_tailroom' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='vif_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='sta_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='chanctx_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='txq_data_size' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='queues' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='max_listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='max_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='2495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1064'>
+          <var-decl name='max_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1072'>
+          <var-decl name='max_report_rates' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1080'>
+          <var-decl name='max_rate_tries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1104'>
+          <var-decl name='max_tx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='max_tx_fragments' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1128'>
+          <var-decl name='offchannel_tx_hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2502' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1136'>
+          <var-decl name='radiotap_mcs_details' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2503' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='radiotap_vht_details' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2504' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='radiotap_timestamp' type-id='cbf4d865' visibility='default' filepath='include/net/mac80211.h' line='2508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='netdev_features' type-id='f9f4b16f' visibility='default' filepath='include/net/mac80211.h' line='2509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1352'>
+          <var-decl name='uapsd_max_sp_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='n_cipher_schemes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cipher_schemes' type-id='0faa7e32' visibility='default' filepath='include/net/mac80211.h' line='2513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='max_nan_de_entries' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='tx_sk_pacing_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1488'>
+          <var-decl name='weight_multiplier' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='max_mtu' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='2519' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1510' column='1' id='09b6f516'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='power_level' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dynamic_ps_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='1512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='listen_interval' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='ps_dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='long_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='short_frame_max_tx_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1523' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_smps_mode' filepath='include/net/mac80211.h' line='1466' column='1' id='5e2794d2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_SMPS_AUTOMATIC' value='0'/>
+        <enumerator name='IEEE80211_SMPS_OFF' value='1'/>
+        <enumerator name='IEEE80211_SMPS_STATIC' value='2'/>
+        <enumerator name='IEEE80211_SMPS_DYNAMIC' value='3'/>
+        <enumerator name='IEEE80211_SMPS_NUM_MODES' value='4'/>
+      </enum-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='2505' column='1' id='cbf4d865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='units_pos' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='2506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='2507' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_cipher_scheme' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1838' column='1' id='68ce81a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iftype' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='hdr_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='pn_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pn_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='key_idx_off' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='key_idx_mask' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='key_idx_shift' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mic_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1847' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ops' size-in-bits='6592' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='3770' column='1' id='686b8abc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='f333b0ad' visibility='default' filepath='include/net/mac80211.h' line='3771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3774' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='stop' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='3775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='suspend' type-id='64be16ce' visibility='default' filepath='include/net/mac80211.h' line='3777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='resume' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3778' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='set_wakeup' type-id='b735b9d5' visibility='default' filepath='include/net/mac80211.h' line='3779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='add_interface' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3781' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='change_interface' type-id='bddccc89' visibility='default' filepath='include/net/mac80211.h' line='3783' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove_interface' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='config' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_info_changed' type-id='0efb02f1' visibility='default' filepath='include/net/mac80211.h' line='3789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='start_ap' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stop_ap' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='prepare_multicast' type-id='a6d679d3' visibility='default' filepath='include/net/mac80211.h' line='3797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='configure_filter' type-id='08e5e0c8' visibility='default' filepath='include/net/mac80211.h' line='3799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='config_iface_filter' type-id='d49fb76c' visibility='default' filepath='include/net/mac80211.h' line='3803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_tim' type-id='3e699d2b' visibility='default' filepath='include/net/mac80211.h' line='3807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_key' type-id='a0c22185' visibility='default' filepath='include/net/mac80211.h' line='3809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='update_tkip_key' type-id='a41843a9' visibility='default' filepath='include/net/mac80211.h' line='3812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='set_rekey_data' type-id='285dfd8f' visibility='default' filepath='include/net/mac80211.h' line='3817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='set_default_unicast_key' type-id='cc8dd693' visibility='default' filepath='include/net/mac80211.h' line='3820' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='hw_scan' type-id='8944911f' visibility='default' filepath='include/net/mac80211.h' line='3822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='cancel_hw_scan' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3824' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='sched_scan_start' type-id='333f7dcb' visibility='default' filepath='include/net/mac80211.h' line='3826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='sched_scan_stop' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='sw_scan_start' type-id='80b2002c' visibility='default' filepath='include/net/mac80211.h' line='3832' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='sw_scan_complete' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3835' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='get_stats' type-id='885e570d' visibility='default' filepath='include/net/mac80211.h' line='3837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='get_key_seq' type-id='a486176f' visibility='default' filepath='include/net/mac80211.h' line='3839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='set_frag_threshold' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='set_rts_threshold' type-id='a17a9b96' visibility='default' filepath='include/net/mac80211.h' line='3843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='sta_add' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='sta_remove' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='sta_notify' type-id='6aed11b9' visibility='default' filepath='include/net/mac80211.h' line='3854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='sta_set_txpwr' type-id='47abf612' visibility='default' filepath='include/net/mac80211.h' line='3856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sta_state' type-id='ccb4b446' visibility='default' filepath='include/net/mac80211.h' line='3859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='sta_pre_rcu_remove' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='3863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='sta_rc_update' type-id='f261f678' visibility='default' filepath='include/net/mac80211.h' line='3866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='sta_rate_tbl_update' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='3870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='sta_statistics' type-id='bd8d3954' visibility='default' filepath='include/net/mac80211.h' line='3873' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='conf_tx' type-id='1d9ce797' visibility='default' filepath='include/net/mac80211.h' line='3877' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='get_tsf' type-id='4c58212a' visibility='default' filepath='include/net/mac80211.h' line='3880' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_tsf' type-id='62a26160' visibility='default' filepath='include/net/mac80211.h' line='3881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='offset_tsf' type-id='df80a246' visibility='default' filepath='include/net/mac80211.h' line='3883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='reset_tsf' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='tx_last_beacon' type-id='230ee907' visibility='default' filepath='include/net/mac80211.h' line='3886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ampdu_action' type-id='6488c982' visibility='default' filepath='include/net/mac80211.h' line='3916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='get_survey' type-id='89841ba1' visibility='default' filepath='include/net/mac80211.h' line='3919' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='rfkill_poll' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='3921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='set_coverage_class' type-id='a22252ab' visibility='default' filepath='include/net/mac80211.h' line='3922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='flush' type-id='74819aa6' visibility='default' filepath='include/net/mac80211.h' line='3930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='channel_switch' type-id='5fce9027' visibility='default' filepath='include/net/mac80211.h' line='3932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='set_antenna' type-id='49d216dd' visibility='default' filepath='include/net/mac80211.h' line='3935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='get_antenna' type-id='5045387f' visibility='default' filepath='include/net/mac80211.h' line='3936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='remain_on_channel' type-id='37497cfd' visibility='default' filepath='include/net/mac80211.h' line='3938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='cancel_remain_on_channel' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='3943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='set_ringparam' type-id='49d216dd' visibility='default' filepath='include/net/mac80211.h' line='3945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='get_ringparam' type-id='9511263c' visibility='default' filepath='include/net/mac80211.h' line='3946' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='tx_frames_pending' type-id='d32f401d' visibility='default' filepath='include/net/mac80211.h' line='3948' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='set_bitrate_mask' type-id='b5d1fe23' visibility='default' filepath='include/net/mac80211.h' line='3949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='event_callback' type-id='96a99dd2' visibility='default' filepath='include/net/mac80211.h' line='3951' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='allow_buffered_frames' type-id='e4575f22' visibility='default' filepath='include/net/mac80211.h' line='3955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='release_buffered_frames' type-id='e4575f22' visibility='default' filepath='include/net/mac80211.h' line='3960' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='get_et_sset_count' type-id='72b3df9e' visibility='default' filepath='include/net/mac80211.h' line='3966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='get_et_stats' type-id='dca42ce8' visibility='default' filepath='include/net/mac80211.h' line='3968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='get_et_strings' type-id='c3cc3c4e' visibility='default' filepath='include/net/mac80211.h' line='3971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mgd_prepare_tx' type-id='1c6d0c4d' visibility='default' filepath='include/net/mac80211.h' line='3975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='mgd_protect_tdls_discover' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='3979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='add_chanctx' type-id='8fa2f562' visibility='default' filepath='include/net/mac80211.h' line='3982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='remove_chanctx' type-id='f04be99f' visibility='default' filepath='include/net/mac80211.h' line='3984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='change_chanctx' type-id='8595687e' visibility='default' filepath='include/net/mac80211.h' line='3986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='assign_vif_chanctx' type-id='969740e2' visibility='default' filepath='include/net/mac80211.h' line='3989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='unassign_vif_chanctx' type-id='3bd13fe7' visibility='default' filepath='include/net/mac80211.h' line='3992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='switch_vif_chanctx' type-id='5f071c93' visibility='default' filepath='include/net/mac80211.h' line='3995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='reconfig_complete' type-id='065f4ac6' visibility='default' filepath='include/net/mac80211.h' line='4000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='ipv6_addr_change' type-id='d50707ae' visibility='default' filepath='include/net/mac80211.h' line='4004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='channel_switch_beacon' type-id='add8debb' visibility='default' filepath='include/net/mac80211.h' line='4008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='pre_channel_switch' type-id='c7bc5836' visibility='default' filepath='include/net/mac80211.h' line='4011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='post_channel_switch' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='abort_channel_switch' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='4017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='channel_switch_rx_beacon' type-id='5fce9027' visibility='default' filepath='include/net/mac80211.h' line='4019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='join_ibss' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='leave_ibss' type-id='13137614' visibility='default' filepath='include/net/mac80211.h' line='4024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='get_expected_throughput' type-id='4c6dab52' visibility='default' filepath='include/net/mac80211.h' line='4025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='get_txpower' type-id='830f4cee' visibility='default' filepath='include/net/mac80211.h' line='4027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='tdls_channel_switch' type-id='27dc45b4' visibility='default' filepath='include/net/mac80211.h' line='4030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='tdls_cancel_channel_switch' type-id='8a57bbf1' visibility='default' filepath='include/net/mac80211.h' line='4035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='tdls_recv_channel_switch' type-id='bfaf027a' visibility='default' filepath='include/net/mac80211.h' line='4038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='wake_tx_queue' type-id='5ee1d5b2' visibility='default' filepath='include/net/mac80211.h' line='4042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='sync_rx_queues' type-id='b6c3d24c' visibility='default' filepath='include/net/mac80211.h' line='4044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='start_nan' type-id='d8175730' visibility='default' filepath='include/net/mac80211.h' line='4046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='stop_nan' type-id='d251af87' visibility='default' filepath='include/net/mac80211.h' line='4049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='nan_change_conf' type-id='cf93231f' visibility='default' filepath='include/net/mac80211.h' line='4051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='add_nan_func' type-id='2cd242d5' visibility='default' filepath='include/net/mac80211.h' line='4054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='del_nan_func' type-id='c69188a0' visibility='default' filepath='include/net/mac80211.h' line='4057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='can_aggregate_in_amsdu' type-id='7ceee79d' visibility='default' filepath='include/net/mac80211.h' line='4060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='get_ftm_responder_stats' type-id='0891de36' visibility='default' filepath='include/net/mac80211.h' line='4063' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='start_pmsr' type-id='62f61ae0' visibility='default' filepath='include/net/mac80211.h' line='4066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='abort_pmsr' type-id='fdeb8c83' visibility='default' filepath='include/net/mac80211.h' line='4068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='4071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='4072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='4073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='4074' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tx_control' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2051' column='1' id='14120a32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1983' column='1' id='9188aa82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supp_rates' type-id='1c6c0c39' visibility='default' filepath='include/net/mac80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/mac80211.h' line='1987' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/mac80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/mac80211.h' line='1989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='max_rx_aggregation_subframes' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='wme' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='984'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1000'>
+          <var-decl name='rx_nss' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='bandwidth' type-id='99b24396' visibility='default' filepath='include/net/mac80211.h' line='1995' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='smps_mode' type-id='5e2794d2' visibility='default' filepath='include/net/mac80211.h' line='1996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='rates' type-id='88f13db8' visibility='default' filepath='include/net/mac80211.h' line='1997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='tdls' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1160'>
+          <var-decl name='tdls_initiator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1168'>
+          <var-decl name='mfp' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1176'>
+          <var-decl name='max_amsdu_subframes' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='max_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2018' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1200'>
+          <var-decl name='support_p2p_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='2019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='max_rc_amsdu_len' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1232'>
+          <var-decl name='max_tid_amsdu_len' type-id='42c6815a' visibility='default' filepath='include/net/mac80211.h' line='2021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='txpwr' type-id='b18b35b8' visibility='default' filepath='include/net/mac80211.h' line='2022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='txq' type-id='c4105027' visibility='default' filepath='include/net/mac80211.h' line='2024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='2026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2029' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_sta_rx_bandwidth' filepath='include/net/mac80211.h' line='1893' column='1' id='99b24396'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_RX_BW_20' value='0'/>
+        <enumerator name='IEEE80211_STA_RX_BW_40' value='1'/>
+        <enumerator name='IEEE80211_STA_RX_BW_80' value='2'/>
+        <enumerator name='IEEE80211_STA_RX_BW_160' value='3'/>
+      </enum-decl>
+      <class-decl name='ieee80211_sta_rates' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1907' column='1' id='05fba71a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/mac80211.h' line='1908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate' type-id='b7cdf388' visibility='default' filepath='include/net/mac80211.h' line='1915' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1909' column='1' id='53a31c26'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='count_cts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1913' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1914' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1931' column='1' id='b18b35b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' visibility='default' filepath='include/net/mac80211.h' line='1932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='1933' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_txq' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2068' column='1' id='fa01d8f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='2069' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ac' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2072' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='2075' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_vif' size-in-bits='3264' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1617' column='1' id='b4ae7345'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='86505f90' visibility='default' filepath='include/net/mac80211.h' line='1618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_conf' type-id='0f8e82db' visibility='default' filepath='include/net/mac80211.h' line='1619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2864'>
+          <var-decl name='p2p' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2872'>
+          <var-decl name='csa_active' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='mu_mimo_owner' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2888'>
+          <var-decl name='cab_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1625' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2896'>
+          <var-decl name='hw_queue' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='txq' type-id='cde83d0f' visibility='default' filepath='include/net/mac80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='chanctx_conf' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='driver_flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='probe_req_reg' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='1638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='txqs_stopped' type-id='4ad33d9d' visibility='default' filepath='include/net/mac80211.h' line='1640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1645' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_bss_conf' size-in-bits='2752' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='609' column='1' id='0f8e82db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss_color' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='htc_trig_based_pkt_ext' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='multi_sta_back_32bit' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='uora_exists' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='uora_ocw_range' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='frame_time_rts_th' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='he_support' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='twt_requester' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='assoc' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ibss_joined' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='ibss_creator' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='use_cts_prot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='use_short_preamble' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='use_short_slot' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='216'>
+          <var-decl name='enable_beacon' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='beacon_int' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assoc_capability' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='sync_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='sync_device_ts' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sync_dtim_count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='635' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='beacon_rate' type-id='4343d470' visibility='default' filepath='include/net/mac80211.h' line='637' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/mac80211.h' line='638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_operation_mode' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='cqm_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='cqm_rssi_hyst' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='cqm_rssi_low' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cqm_rssi_high' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='mu_group' type-id='082b33cf' visibility='default' filepath='include/net/mac80211.h' line='645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='arp_addr_list' type-id='30180d4b' visibility='default' filepath='include/net/mac80211.h' line='646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='arp_addr_cnt' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1504'>
+          <var-decl name='qos' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1512'>
+          <var-decl name='idle' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1520'>
+          <var-decl name='ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1528'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/mac80211.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='hidden_ssid' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1888'>
+          <var-decl name='txpower' type-id='95e97e5e' visibility='default' filepath='include/net/mac80211.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='txpower_type' type-id='d46e3e96' visibility='default' filepath='include/net/mac80211.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='p2p_noa_attr' type-id='8ed5c74b' visibility='default' filepath='include/net/mac80211.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2384'>
+          <var-decl name='allow_p2p_go_ps' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2400'>
+          <var-decl name='max_idle_period' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2416'>
+          <var-decl name='protected_keep_alive' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2424'>
+          <var-decl name='ftm_responder' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='ftmr_params' type-id='d203221f' visibility='default' filepath='include/net/mac80211.h' line='661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='nontransmitted' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2504'>
+          <var-decl name='transmitter_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2552'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='665' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2568'>
+          <var-decl name='ema_ap' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2576'>
+          <var-decl name='profile_periodicity' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2584'>
+          <var-decl name='he_operation' type-id='ae6fa461' visibility='default' filepath='include/net/mac80211.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/mac80211.h' line='670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='672' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mu_group_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='472' column='1' id='082b33cf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/net/mac80211.h' line='473' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='474' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_attr' size-in-bits='432' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1243' column='1' id='8ed5c74b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='oppps_ctwindow' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='desc' type-id='350eac09' visibility='default' filepath='include/linux/ieee80211.h' line='1246' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_p2p_noa_desc' size-in-bits='104' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1236' column='1' id='46ac9319'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='duration' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='interval' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='start_time' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1240' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ftm_responder_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='485' column='1' id='a4a20ee7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='489' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_operation' size-in-bits='48' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1640' column='1' id='ae6fa461'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='he_oper_params' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='he_mcs_nss_set' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='optional' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1644' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_chanctx_conf' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='226' column='1' id='9dcec05c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='min_def' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rx_chains_static' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='rx_chains_dynamic' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='radar_enabled' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='drv_priv' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='234' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='set_key_cmd' filepath='include/net/mac80211.h' line='1859' column='1' id='4c14bbdf'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SET_KEY' value='0'/>
+        <enumerator name='DISABLE_KEY' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_key_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1764' column='1' id='12b6a8d6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_pn' type-id='28ee064c' visibility='default' filepath='include/net/mac80211.h' line='1765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='icv_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='iv_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='hw_key_idx' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='keyidx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='keylen' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='key' type-id='29c3368c' visibility='default' filepath='include/net/mac80211.h' line='1773' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_scan_request' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2542' column='1' id='e827ee6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='80d7b69d' visibility='default' filepath='include/net/mac80211.h' line='2543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='req' type-id='6834abc3' visibility='default' filepath='include/net/mac80211.h' line='2546' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_scan_ies' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1094' column='1' id='80d7b69d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='a9f93891' visibility='default' filepath='include/net/mac80211.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='len' type-id='314f9837' visibility='default' filepath='include/net/mac80211.h' line='1096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='common_ies' type-id='bbaf3419' visibility='default' filepath='include/net/mac80211.h' line='1097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='common_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/mac80211.h' line='1098' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_low_level_stats' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='185' column='1' id='835416bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dot11ACKFailureCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dot11RTSFailureCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dot11FCSErrorCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='188' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dot11RTSSuccessCount' type-id='f0981eeb' visibility='default' filepath='include/net/mac80211.h' line='189' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_key_seq' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1795' column='1' id='27ba2d9f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='eb542e10' visibility='default' filepath='include/net/mac80211.h' line='1796' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='160' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1796' column='1' id='eb542e10'>
+        <data-member access='public'>
+          <var-decl name='tkip' type-id='5a0ae575' visibility='default' filepath='include/net/mac80211.h' line='1800' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ccmp' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1803' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='aes_cmac' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='aes_gmac' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gcmp' type-id='71c656e5' visibility='default' filepath='include/net/mac80211.h' line='1812' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='hw' type-id='ea135534' visibility='default' filepath='include/net/mac80211.h' line='1816' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1797' column='1' id='5a0ae575'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iv32' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iv16' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1799' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1801' column='1' id='71c656e5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pn' type-id='cf1a4160' visibility='default' filepath='include/net/mac80211.h' line='1802' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' size-in-bits='136' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1813' column='1' id='ea135534'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='seq' type-id='0d8415b5' visibility='default' filepath='include/net/mac80211.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='seq_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1815' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='sta_notify_cmd' filepath='include/net/mac80211.h' line='2041' column='1' id='2c2fe365'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='STA_NOTIFY_SLEEP' value='0'/>
+        <enumerator name='STA_NOTIFY_AWAKE' value='1'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_sta_state' filepath='include/net/mac80211.h' line='1873' column='1' id='59cd43cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_STA_NOTEXIST' value='0'/>
+        <enumerator name='IEEE80211_STA_NONE' value='1'/>
+        <enumerator name='IEEE80211_STA_AUTH' value='2'/>
+        <enumerator name='IEEE80211_STA_ASSOC' value='3'/>
+        <enumerator name='IEEE80211_STA_AUTHORIZED' value='4'/>
+      </enum-decl>
+      <class-decl name='ieee80211_tx_queue_params' size-in-bits='112' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='174' column='1' id='b26908c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='txop' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='cw_min' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cw_max' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='aifs' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='acm' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='179' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='uapsd' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='mu_edca' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='mu_edca_param_rec' type-id='59362a78' visibility='default' filepath='include/net/mac80211.h' line='182' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_mu_edca_param_ac_rec' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1665' column='1' id='59362a78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aifsn' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='ecw_min_max' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='mu_edca_timer' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1668' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ampdu_params' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='3153' column='1' id='adc74f98'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='1498f653' visibility='default' filepath='include/net/mac80211.h' line='3154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='3155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='ssn' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='buf_size' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='amsdu' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='3159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='3160' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_ampdu_mlme_action' filepath='include/net/mac80211.h' line='3126' column='1' id='1498f653'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_AMPDU_RX_START' value='0'/>
+        <enumerator name='IEEE80211_AMPDU_RX_STOP' value='1'/>
+        <enumerator name='IEEE80211_AMPDU_TX_START' value='2'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_CONT' value='3'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_FLUSH' value='4'/>
+        <enumerator name='IEEE80211_AMPDU_TX_STOP_FLUSH_CONT' value='5'/>
+        <enumerator name='IEEE80211_AMPDU_TX_OPERATIONAL' value='6'/>
+      </enum-decl>
+      <class-decl name='ieee80211_channel_switch' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1546' column='1' id='3e5b2db8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device_timestamp' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='block_tx' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/mac80211.h' line='1550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1552' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_roc_type' filepath='include/net/mac80211.h' line='3208' column='1' id='b72e5cc4'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_ROC_TYPE_NORMAL' value='0'/>
+        <enumerator name='IEEE80211_ROC_TYPE_MGMT_TX' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_event' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='455' column='1' id='f08a13f8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='703e082c' visibility='default' filepath='include/net/mac80211.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='u' type-id='2a1a3e21' visibility='default' filepath='include/net/mac80211.h' line='461' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_event_type' filepath='include/net/mac80211.h' line='372' column='1' id='703e082c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RSSI_EVENT' value='0'/>
+        <enumerator name='MLME_EVENT' value='1'/>
+        <enumerator name='BAR_RX_EVENT' value='2'/>
+        <enumerator name='BA_FRAME_TIMEOUT' value='3'/>
+      </enum-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='457' column='1' id='2a1a3e21'>
+        <data-member access='public'>
+          <var-decl name='rssi' type-id='1569e170' visibility='default' filepath='include/net/mac80211.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mlme' type-id='46d0b18c' visibility='default' filepath='include/net/mac80211.h' line='459' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ba' type-id='0da711ca' visibility='default' filepath='include/net/mac80211.h' line='460' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='ieee80211_rssi_event' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='393' column='1' id='1569e170'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='2ff52c3e' visibility='default' filepath='include/net/mac80211.h' line='394' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_rssi_event_data' filepath='include/net/mac80211.h' line='384' column='1' id='2ff52c3e'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RSSI_EVENT_HIGH' value='0'/>
+        <enumerator name='RSSI_EVENT_LOW' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_mlme_event' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='429' column='1' id='46d0b18c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='919b8752' visibility='default' filepath='include/net/mac80211.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='status' type-id='0503712c' visibility='default' filepath='include/net/mac80211.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reason' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='432' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_mlme_event_data' filepath='include/net/mac80211.h' line='404' column='1' id='919b8752'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='AUTH_EVENT' value='0'/>
+        <enumerator name='ASSOC_EVENT' value='1'/>
+        <enumerator name='DEAUTH_RX_EVENT' value='2'/>
+        <enumerator name='DEAUTH_TX_EVENT' value='3'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_mlme_event_status' filepath='include/net/mac80211.h' line='417' column='1' id='0503712c'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='MLME_SUCCESS' value='0'/>
+        <enumerator name='MLME_DENIED' value='1'/>
+        <enumerator name='MLME_TIMEOUT' value='2'/>
+      </enum-decl>
+      <class-decl name='ieee80211_ba_event' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='441' column='1' id='0da711ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tid' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ssn' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='444' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_frame_release_type' filepath='include/net/mac80211.h' line='3169' column='1' id='2d72d269'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_FRAME_RELEASE_PSPOLL' value='0'/>
+        <enumerator name='IEEE80211_FRAME_RELEASE_UAPSD' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_vif_chanctx_switch' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='268' column='1' id='1693dce0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='old_ctx' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='new_ctx' type-id='9a58f9aa' visibility='default' filepath='include/net/mac80211.h' line='271' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_chanctx_switch_mode' filepath='include/net/mac80211.h' line='251' column='1' id='6d6a8077'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='CHANCTX_SWMODE_REASSIGN_VIF' value='0'/>
+        <enumerator name='CHANCTX_SWMODE_SWAP_CONTEXTS' value='1'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_reconfig_type' filepath='include/net/mac80211.h' line='3224' column='1' id='1ca6ddb7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_RECONFIG_TYPE_RESTART' value='0'/>
+        <enumerator name='IEEE80211_RECONFIG_TYPE_SUSPEND' value='1'/>
+      </enum-decl>
+      <class-decl name='ieee80211_tdls_ch_sw_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='2562' column='1' id='7a2960eb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sta' type-id='f27bb1b0' visibility='default' filepath='include/net/mac80211.h' line='2563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='0953fbfe' visibility='default' filepath='include/net/mac80211.h' line='2564' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='2565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='status' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timestamp' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='switch_time' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='switch_timeout' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='2569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tmpl_skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/mac80211.h' line='2570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ch_sw_tm_ie' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='2571' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='f3945544' const='yes' id='d51a347b'/>
+      <pointer-type-def type-id='d51a347b' size-in-bits='64' id='c9405b83'/>
+      <qualified-type-def type-id='68ce81a7' const='yes' id='0637b06c'/>
+      <pointer-type-def type-id='0637b06c' size-in-bits='64' id='0faa7e32'/>
+      <qualified-type-def type-id='f08a13f8' const='yes' id='da9606ef'/>
+      <pointer-type-def type-id='da9606ef' size-in-bits='64' id='df2ca81f'/>
+      <qualified-type-def type-id='686b8abc' const='yes' id='6ffc942b'/>
+      <pointer-type-def type-id='6ffc942b' size-in-bits='64' id='4b9cfd93'/>
+      <qualified-type-def type-id='b26908c7' const='yes' id='385cd4fc'/>
+      <pointer-type-def type-id='385cd4fc' size-in-bits='64' id='90230ce2'/>
+      <pointer-type-def type-id='adc74f98' size-in-bits='64' id='545d8e6e'/>
+      <pointer-type-def type-id='0f8e82db' size-in-bits='64' id='1ffaca3b'/>
+      <pointer-type-def type-id='9dcec05c' size-in-bits='64' id='9a58f9aa'/>
+      <pointer-type-def type-id='3e5b2db8' size-in-bits='64' id='0822e26e'/>
+      <pointer-type-def type-id='a4a20ee7' size-in-bits='64' id='d203221f'/>
+      <pointer-type-def type-id='3d75a1cd' size-in-bits='64' id='1905517d'/>
+      <pointer-type-def type-id='12b6a8d6' size-in-bits='64' id='43c1ffec'/>
+      <pointer-type-def type-id='27ba2d9f' size-in-bits='64' id='6b7f94b7'/>
+      <pointer-type-def type-id='835416bb' size-in-bits='64' id='5ee25cfb'/>
+      <pointer-type-def type-id='80d7b69d' size-in-bits='64' id='4f46520d'/>
+      <pointer-type-def type-id='e827ee6f' size-in-bits='64' id='49908b87'/>
+      <pointer-type-def type-id='9188aa82' size-in-bits='64' id='f27bb1b0'/>
+      <pointer-type-def type-id='05fba71a' size-in-bits='64' id='88f13db8'/>
+      <pointer-type-def type-id='7a2960eb' size-in-bits='64' id='6a6bb60b'/>
+      <pointer-type-def type-id='14120a32' size-in-bits='64' id='70e99510'/>
+      <pointer-type-def type-id='fa01d8f7' size-in-bits='64' id='cde83d0f'/>
+      <pointer-type-def type-id='b4ae7345' size-in-bits='64' id='3a1577c5'/>
+      <pointer-type-def type-id='1693dce0' size-in-bits='64' id='5ea19606'/>
+      <pointer-type-def type-id='7107744b' size-in-bits='64' id='230ee907'/>
+      <pointer-type-def type-id='944e9b5c' size-in-bits='64' id='64be16ce'/>
+      <pointer-type-def type-id='8236d2f1' size-in-bits='64' id='a0c22185'/>
+      <pointer-type-def type-id='f2908740' size-in-bits='64' id='8fa2f562'/>
+      <pointer-type-def type-id='8163cba1' size-in-bits='64' id='885e570d'/>
+      <pointer-type-def type-id='f05ececf' size-in-bits='64' id='3e699d2b'/>
+      <pointer-type-def type-id='531211f3' size-in-bits='64' id='d251af87'/>
+      <pointer-type-def type-id='2c87adcc' size-in-bits='64' id='0891de36'/>
+      <pointer-type-def type-id='f8076de6' size-in-bits='64' id='d8175730'/>
+      <pointer-type-def type-id='7d88aceb' size-in-bits='64' id='cf93231f'/>
+      <pointer-type-def type-id='602864f6' size-in-bits='64' id='62f61ae0'/>
+      <pointer-type-def type-id='d7ec658f' size-in-bits='64' id='333f7dcb'/>
+      <pointer-type-def type-id='88007fe7' size-in-bits='64' id='b5d1fe23'/>
+      <pointer-type-def type-id='171d2db1' size-in-bits='64' id='2cd242d5'/>
+      <pointer-type-def type-id='ff64924d' size-in-bits='64' id='bddccc89'/>
+      <pointer-type-def type-id='2c28f1e0' size-in-bits='64' id='6488c982'/>
+      <pointer-type-def type-id='3d5ddc48' size-in-bits='64' id='969740e2'/>
+      <pointer-type-def type-id='d98a9fd9' size-in-bits='64' id='37497cfd'/>
+      <pointer-type-def type-id='07b9565c' size-in-bits='64' id='c7bc5836'/>
+      <pointer-type-def type-id='3eb76b2b' size-in-bits='64' id='8944911f'/>
+      <pointer-type-def type-id='19891358' size-in-bits='64' id='47abf612'/>
+      <pointer-type-def type-id='117ec4b4' size-in-bits='64' id='ccb4b446'/>
+      <pointer-type-def type-id='5a6783ba' size-in-bits='64' id='27dc45b4'/>
+      <pointer-type-def type-id='882f71bc' size-in-bits='64' id='72b3df9e'/>
+      <pointer-type-def type-id='77b752d4' size-in-bits='64' id='830f4cee'/>
+      <pointer-type-def type-id='3ac4d0fb' size-in-bits='64' id='1d9ce797'/>
+      <pointer-type-def type-id='b61634d7' size-in-bits='64' id='5f071c93'/>
+      <pointer-type-def type-id='6f975fc5' size-in-bits='64' id='89841ba1'/>
+      <pointer-type-def type-id='c1b980bc' size-in-bits='64' id='a17a9b96'/>
+      <pointer-type-def type-id='15fb9d09' size-in-bits='64' id='49d216dd'/>
+      <pointer-type-def type-id='400ae043' size-in-bits='64' id='5045387f'/>
+      <pointer-type-def type-id='e8f55bb1' size-in-bits='64' id='d32f401d'/>
+      <pointer-type-def type-id='7ff9b331' size-in-bits='64' id='7ceee79d'/>
+      <pointer-type-def type-id='83200b90' size-in-bits='64' id='4c6dab52'/>
+      <pointer-type-def type-id='fce05b30' size-in-bits='64' id='4c58212a'/>
+      <pointer-type-def type-id='ae337b27' size-in-bits='64' id='a6d679d3'/>
+      <pointer-type-def type-id='27cc9612' size-in-bits='64' id='b6c3d24c'/>
+      <pointer-type-def type-id='f159f1b4' size-in-bits='64' id='065f4ac6'/>
+      <pointer-type-def type-id='c1fb2203' size-in-bits='64' id='f04be99f'/>
+      <pointer-type-def type-id='06b296c4' size-in-bits='64' id='8595687e'/>
+      <pointer-type-def type-id='dfab805b' size-in-bits='64' id='a486176f'/>
+      <pointer-type-def type-id='a1494618' size-in-bits='64' id='e4575f22'/>
+      <pointer-type-def type-id='ad4fc2f9' size-in-bits='64' id='f333b0ad'/>
+      <pointer-type-def type-id='f0418540' size-in-bits='64' id='5ee1d5b2'/>
+      <pointer-type-def type-id='4a332832' size-in-bits='64' id='13137614'/>
+      <pointer-type-def type-id='bf9132e7' size-in-bits='64' id='add8debb'/>
+      <pointer-type-def type-id='dd77c0eb' size-in-bits='64' id='285dfd8f'/>
+      <pointer-type-def type-id='20d6ba97' size-in-bits='64' id='fdeb8c83'/>
+      <pointer-type-def type-id='2b1fdd50' size-in-bits='64' id='96a99dd2'/>
+      <pointer-type-def type-id='900eb96a' size-in-bits='64' id='80b2002c'/>
+      <pointer-type-def type-id='b69ec80d' size-in-bits='64' id='6aed11b9'/>
+      <pointer-type-def type-id='430b9b5e' size-in-bits='64' id='dca42ce8'/>
+      <pointer-type-def type-id='d33c76ed' size-in-bits='64' id='0efb02f1'/>
+      <pointer-type-def type-id='94fb86a3' size-in-bits='64' id='3bd13fe7'/>
+      <pointer-type-def type-id='6fd909cb' size-in-bits='64' id='5fce9027'/>
+      <pointer-type-def type-id='25e76c45' size-in-bits='64' id='a41843a9'/>
+      <pointer-type-def type-id='d87f449d' size-in-bits='64' id='8a57bbf1'/>
+      <pointer-type-def type-id='d23ecc82' size-in-bits='64' id='bd8d3954'/>
+      <pointer-type-def type-id='5182ec9e' size-in-bits='64' id='f261f678'/>
+      <pointer-type-def type-id='b3cab718' size-in-bits='64' id='bfaf027a'/>
+      <pointer-type-def type-id='b8bd1d94' size-in-bits='64' id='d50707ae'/>
+      <pointer-type-def type-id='170653e7' size-in-bits='64' id='cc8dd693'/>
+      <pointer-type-def type-id='085f950c' size-in-bits='64' id='df80a246'/>
+      <pointer-type-def type-id='76916f79' size-in-bits='64' id='1c6d0c4d'/>
+      <pointer-type-def type-id='0a3bbc4c' size-in-bits='64' id='74819aa6'/>
+      <pointer-type-def type-id='7310e2e4' size-in-bits='64' id='c3cc3c4e'/>
+      <pointer-type-def type-id='f0c7f006' size-in-bits='64' id='62a26160'/>
+      <pointer-type-def type-id='6d55644e' size-in-bits='64' id='c69188a0'/>
+      <pointer-type-def type-id='9297809a' size-in-bits='64' id='d49fb76c'/>
+      <pointer-type-def type-id='6b5fe1c9' size-in-bits='64' id='b735b9d5'/>
+      <pointer-type-def type-id='a0886c67' size-in-bits='64' id='a22252ab'/>
+      <pointer-type-def type-id='fd931742' size-in-bits='64' id='9511263c'/>
+      <pointer-type-def type-id='2c15778e' size-in-bits='64' id='08e5e0c8'/>
+      <function-decl name='ieee80211_alloc_hw_nm' mangled-name='ieee80211_alloc_hw_nm' filepath='net/mac80211/main.c' line='507' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_alloc_hw_nm'>
+        <parameter type-id='b59d7dce' name='priv_data_len' filepath='net/mac80211/main.c' line='507' column='1'/>
+        <parameter type-id='4b9cfd93' name='ops' filepath='net/mac80211/main.c' line='508' column='1'/>
+        <parameter type-id='80f4b756' name='requested_name' filepath='net/mac80211/main.c' line='509' column='1'/>
+        <return type-id='1905517d'/>
+      </function-decl>
+      <function-decl name='ieee80211_unregister_hw' mangled-name='ieee80211_unregister_hw' filepath='net/mac80211/main.c' line='1325' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_unregister_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='1325' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_restart_hw' mangled-name='ieee80211_restart_hw' filepath='net/mac80211/main.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_restart_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='292' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_register_hw' mangled-name='ieee80211_register_hw' filepath='net/mac80211/main.c' line='862' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_register_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='862' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_free_hw' mangled-name='ieee80211_free_hw' filepath='net/mac80211/main.c' line='1381' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_free_hw'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/main.c' line='1381' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='e07d69c8' size-in-bits='64' id='0953fbfe'/>
+      <class-decl name='cfg80211_nan_func' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3026' column='1' id='f3945544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f796e63e' visibility='default' filepath='include/net/cfg80211.h' line='3027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='service_id' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='publish_type' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='close_range' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='publish_bcast' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='subscribe_active' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='followup_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='followup_reqid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='followup_dest' type-id='6d8d26fb' visibility='default' filepath='include/net/cfg80211.h' line='3035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ttl' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serv_spec_info' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='serv_spec_info_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='srf_include' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='srf_bf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='srf_bf_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='srf_bf_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='srf_macs' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='3043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srf_num_macs' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='3044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_tx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='num_rx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='instance_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3052' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_scan_request' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1977' column='1' id='6834abc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='duration_mandatory' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rates' type-id='1c6c0c39' visibility='default' filepath='include/net/cfg80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wdev' type-id='63c7e8e1' visibility='default' filepath='include/net/cfg80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='1997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='info' type-id='b1493ece' visibility='default' filepath='include/net/cfg80211.h' line='1999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='notified' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2006' column='1'/>
+        </data-member>
+      </class-decl>
+      <function-type size-in-bits='64' id='7107744b'>
+        <parameter type-id='1905517d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='944e9b5c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9d025b00'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8236d2f1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='4c14bbdf'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='43c1ffec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f2908740'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8163cba1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='5ee25cfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f05ececf'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='531211f3'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c87adcc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f7cfb49a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8076de6'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d458dfce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d88aceb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d458dfce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='602864f6'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d7ec658f'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9e4995c7'/>
+        <parameter type-id='4f46520d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='88007fe7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='d74690fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='171d2db1'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='c9405b83'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff64924d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c28f1e0'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='545d8e6e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3d5ddc48'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d98a9fd9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='ec00acfb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b72e5cc4'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='07b9565c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0822e26e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3eb76b2b'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='49908b87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19891358'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='117ec4b4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='59cd43cb'/>
+        <parameter type-id='59cd43cb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a6783ba'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0953fbfe'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='882f71bc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='77b752d4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ac4d0fb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='90230ce2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b61634d7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='5ea19606'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6d6a8077'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f975fc5'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6f439e9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1b980bc'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15fb9d09'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='400ae043'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8f55bb1'>
+        <parameter type-id='1905517d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7ff9b331'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='83200b90'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='19c2251e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fce05b30'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ae337b27'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9ed060a0'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='27cc9612'>
+        <parameter type-id='1905517d'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f159f1b4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='1ca6ddb7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c1fb2203'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06b296c4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9a58f9aa'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dfab805b'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='43c1ffec'/>
+        <parameter type-id='6b7f94b7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1494618'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2d72d269'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ad4fc2f9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='70e99510'/>
+        <parameter type-id='0fbf3cfd'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0418540'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='cde83d0f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4a332832'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bf9132e7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dd77c0eb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6f33eada'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='20d6ba97'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b1fdd50'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='df2ca81f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='900eb96a'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b69ec80d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='2c2fe365'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='430b9b5e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='33e1dfe4'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d33c76ed'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1ffaca3b'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='94fb86a3'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9a58f9aa'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6fd909cb'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='0822e26e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25e76c45'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='43c1ffec'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='26d4d46f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87f449d'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d23ecc82'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5182ec9e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f27bb1b0'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3cab718'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='6a6bb60b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8bd1d94'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f026b16b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='170653e7'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='085f950c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='9b7c55ef'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='76916f79'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a3bbc4c'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7310e2e4'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='8bff8096'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0c7f006'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6d55644e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9297809a'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='3a1577c5'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6b5fe1c9'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a0886c67'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='9b7e9486'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fd931742'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c15778e'>
+        <parameter type-id='1905517d'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='4f719aac' size-in-bits='64' id='f7cfb49a'/>
+      <pointer-type-def type-id='f569a53c' size-in-bits='64' id='6f33eada'/>
+      <pointer-type-def type-id='7fec8d58' size-in-bits='64' id='d458dfce'/>
+      <pointer-type-def type-id='fef37f13' size-in-bits='64' id='ee7e85c3'/>
+      <pointer-type-def type-id='fe64f3b4' size-in-bits='64' id='6951bca2'/>
+      <class-decl name='cfg80211_scan_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1942' column='1' id='b1493ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan_start_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tsf_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1945' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d168fd05' size-in-bits='64' id='d74690fd'/>
+      <enum-decl name='nl80211_nan_function_type' filepath='include/uapi/linux/nl80211.h' line='5915' column='1' id='f796e63e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <pointer-type-def type-id='214ce930' size-in-bits='64' id='7af1dc96'/>
+      <pointer-type-def type-id='8cd7231c' size-in-bits='64' id='6f439e9a'/>
+      <class-decl name='cfg80211_ftm_responder_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3122' column='1' id='4f719aac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='success_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='partial_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='failed_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='non_asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='total_duration_ms' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unknown_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reschedule_requests_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_of_window_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3132' 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='2869' column='1' id='f569a53c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kck' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replay_ctr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' 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='2969' column='1' id='7fec8d58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_pref' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2971' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_func_filter' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2992' column='1' id='fef37f13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3305' column='1' id='fe64f3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='3307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_peers' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nl_portid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='3316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peers' type-id='42a2e39d' visibility='default' filepath='include/net/cfg80211.h' line='3318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_info' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1513' column='1' id='214ce930'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connected_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='inactive_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='assoc_at' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='llid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='plid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='signal_avg' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chain_signal_avg' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='txrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='rxrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_retries' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_failed' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='rx_dropped_misc' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bss_param' type-id='ca45acc3' visibility='default' filepath='include/net/cfg80211.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sta_flags' type-id='8d118865' visibility='default' filepath='include/net/cfg80211.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='assoc_req_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='assoc_req_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='beacon_loss_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='t_offset' type-id='9b7c55ef' visibility='default' filepath='include/net/cfg80211.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='peer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nonpeer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='expected_throughput' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rx_beacon' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_beacon_signal_avg' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='connected_to_gate' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pertid' type-id='718fbcad' visibility='default' filepath='include/net/cfg80211.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='avg_ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='rx_mpdu_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fcs_err_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='airtime_link_metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1570' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='survey_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='838' column='1' id='8cd7231c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_ext_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='time_tx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='time_scan' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_bss_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='noise' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='848' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='febb0cbe' const='yes' id='d168fd05'/>
+      <array-type-def dimensions='1' type-id='167153b5' size-in-bits='infinite' id='42a2e39d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <pointer-type-def type-id='af09339d' size-in-bits='64' id='718fbcad'/>
+      <class-decl name='cfg80211_bitrate_mask' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='971' column='1' id='febb0cbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control' type-id='b7cdf389' visibility='default' filepath='include/net/cfg80211.h' line='977' 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='3015' column='1' id='8d118865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3017' 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='1351' column='1' id='5ece574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mcs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='legacy' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nss' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bw' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='he_gi' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='he_dcm' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='he_ru_alloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='n_bonded_ch' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1360' 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='1388' column='1' id='ca45acc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1391' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mesh_power_mode' filepath='include/uapi/linux/nl80211.h' line='3964' column='1' id='8fbf0816'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <array-type-def dimensions='1' type-id='5b11c736' size-in-bits='1152' id='b7cdf389'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='cfg80211_pmsr_request_peer' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3282' column='1' id='167153b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='3284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ftm' type-id='b60e74e3' visibility='default' filepath='include/net/cfg80211.h' line='3286' 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='1436' column='1' id='af09339d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_msdu_retries' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_msdu_failed' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txq_stats' type-id='14305947' visibility='default' filepath='include/net/cfg80211.h' line='1442' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_ftm_request_peer' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3262' column='1' id='b60e74e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preamble' type-id='62746bd7' visibility='default' filepath='include/net/cfg80211.h' line='3263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='burst_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='requested' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_bursts_exp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ftmr_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3272' 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='1410' column='1' id='14305947'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backlog_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drops' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ecn_marks' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overlimit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overmemory' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collisions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1422' 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='972' column='1' id='5b11c736'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ht_mcs' type-id='097504df' visibility='default' filepath='include/net/cfg80211.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vht_mcs' type-id='c24d1a13' visibility='default' filepath='include/net/cfg80211.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gi' type-id='4170ee5e' visibility='default' filepath='include/net/cfg80211.h' line='976' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_preamble' filepath='include/uapi/linux/nl80211.h' line='6163' column='1' id='62746bd7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_PREAMBLE_LEGACY' value='0'/>
+        <enumerator name='NL80211_PREAMBLE_HT' value='1'/>
+        <enumerator name='NL80211_PREAMBLE_VHT' value='2'/>
+        <enumerator name='NL80211_PREAMBLE_DMG' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_txrate_gi' filepath='include/uapi/linux/nl80211.h' line='4573' column='1' id='4170ee5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/mlme.c' language='LANG_C89'>
+      <function-decl name='ieee80211_ap_probereq_get' mangled-name='ieee80211_ap_probereq_get' filepath='net/mac80211/mlme.c' line='2616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_ap_probereq_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/mlme.c' line='2616' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2617' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_cqm_rssi_notify' mangled-name='ieee80211_cqm_rssi_notify' filepath='net/mac80211/mlme.c' line='5675' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_cqm_rssi_notify'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='5675' column='1'/>
+        <parameter type-id='b8189423' name='rssi_event' filepath='net/mac80211/mlme.c' line='5676' column='1'/>
+        <parameter type-id='a7832498' name='rssi_level' filepath='net/mac80211/mlme.c' line='5677' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/mlme.c' line='5678' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_cqm_beacon_loss_notify' mangled-name='ieee80211_cqm_beacon_loss_notify' filepath='net/mac80211/mlme.c' line='5688' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_cqm_beacon_loss_notify'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='5688' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/mlme.c' line='5688' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_connection_loss' mangled-name='ieee80211_connection_loss' filepath='net/mac80211/mlme.c' line='2755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_connection_loss'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2755' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_chswitch_done' mangled-name='ieee80211_chswitch_done' filepath='net/mac80211/mlme.c' line='1230' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_chswitch_done'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='1230' column='1'/>
+        <parameter type-id='b50a4934' name='success' filepath='net/mac80211/mlme.c' line='1230' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_loss' mangled-name='ieee80211_beacon_loss' filepath='net/mac80211/mlme.c' line='2743' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_loss'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/mlme.c' line='2743' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='nl80211_cqm_rssi_threshold_event' filepath='include/uapi/linux/nl80211.h' line='4665' column='1' id='b8189423'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW' value='0'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH' value='1'/>
+        <enumerator name='NL80211_CQM_RSSI_BEACON_LOSS_EVENT' value='2'/>
+      </enum-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/offchannel.c' language='LANG_C89'>
+      <function-decl name='ieee80211_remain_on_channel_expired' mangled-name='ieee80211_remain_on_channel_expired' filepath='net/mac80211/offchannel.c' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_remain_on_channel_expired'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/offchannel.c' line='497' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_ready_on_channel' mangled-name='ieee80211_ready_on_channel' filepath='net/mac80211/offchannel.c' line='298' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_ready_on_channel'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/offchannel.c' line='298' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/rate.c' language='LANG_C89'>
+      <pointer-type-def type-id='c94cc2cb' size-in-bits='64' id='0f82eceb'/>
+      <function-decl name='ieee80211_get_tx_rates' mangled-name='ieee80211_get_tx_rates' filepath='net/mac80211/rate.c' line='840' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_tx_rates'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/rate.c' line='840' column='1'/>
+        <parameter type-id='f27bb1b0' name='sta' filepath='net/mac80211/rate.c' line='841' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rate.c' line='842' column='1'/>
+        <parameter type-id='0f82eceb' name='dest' filepath='net/mac80211/rate.c' line='843' column='1'/>
+        <parameter type-id='95e97e5e' name='max_rates' filepath='net/mac80211/rate.c' line='844' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <class-decl name='ieee80211_tx_rate' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='933' column='1' id='c94cc2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='936' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/rx.c' language='LANG_C89'>
+      <function-decl name='ieee80211_rx_napi' mangled-name='ieee80211_rx_napi' filepath='net/mac80211/rx.c' line='4631' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_rx_napi'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/rx.c' line='4631' column='1'/>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/rx.c' line='4631' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rx.c' line='4632' column='1'/>
+        <parameter type-id='c50361c5' name='napi' filepath='net/mac80211/rx.c' line='4632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_sta_ps_transition' mangled-name='ieee80211_sta_ps_transition' filepath='net/mac80211/rx.c' line='1626' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sta_ps_transition'>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/rx.c' line='1626' column='1'/>
+        <parameter type-id='b50a4934' name='start' filepath='net/mac80211/rx.c' line='1626' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_rx_irqsafe' mangled-name='ieee80211_rx_irqsafe' filepath='net/mac80211/rx.c' line='4758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_rx_irqsafe'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/rx.c' line='4758' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/rx.c' line='4758' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/scan.c' language='LANG_C89'>
+      <function-decl name='ieee80211_sched_scan_stopped' mangled-name='ieee80211_sched_scan_stopped' filepath='net/mac80211/scan.c' line='1379' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sched_scan_stopped'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='1379' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_sched_scan_results' mangled-name='ieee80211_sched_scan_results' filepath='net/mac80211/scan.c' line='1341' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sched_scan_results'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='1341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_scan_completed' mangled-name='ieee80211_scan_completed' filepath='net/mac80211/scan.c' line='465' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_scan_completed'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/scan.c' line='465' column='1'/>
+        <parameter type-id='40cd17b4' name='info' filepath='net/mac80211/scan.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='b1493ece' size-in-bits='64' id='40cd17b4'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/sta_info.c' language='LANG_C89'>
+      <function-decl name='ieee80211_sta_register_airtime' mangled-name='ieee80211_sta_register_airtime' filepath='net/mac80211/sta_info.c' line='1892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_sta_register_airtime'>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/sta_info.c' line='1892' column='1'/>
+        <parameter type-id='f9b06939' name='tid' filepath='net/mac80211/sta_info.c' line='1892' column='1'/>
+        <parameter type-id='19c2251e' name='tx_airtime' filepath='net/mac80211/sta_info.c' line='1893' column='1'/>
+        <parameter type-id='19c2251e' name='rx_airtime' filepath='net/mac80211/sta_info.c' line='1893' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_find_sta_by_ifaddr' mangled-name='ieee80211_find_sta_by_ifaddr' filepath='net/mac80211/sta_info.c' line='1242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_find_sta_by_ifaddr'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/sta_info.c' line='1242' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1243' column='1'/>
+        <parameter type-id='bbaf3419' name='localaddr' filepath='net/mac80211/sta_info.c' line='1244' column='1'/>
+        <return type-id='f27bb1b0'/>
+      </function-decl>
+      <function-decl name='ieee80211_find_sta' mangled-name='ieee80211_find_sta' filepath='net/mac80211/sta_info.c' line='1267' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_find_sta'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/sta_info.c' line='1267' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/mac80211/sta_info.c' line='1268' column='1'/>
+        <return type-id='f27bb1b0'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/status.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='c94cc2cb' size-in-bits='96' id='bd01d8eb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='192' id='20b03b60'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='eaa32e2f' size-in-bits='320' id='e4a26562'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <class-decl name='ieee80211_tx_info' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='1006' column='1' id='221c4941'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='band' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='hw_queue' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='ack_frame_id' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='8e7917c8' visibility='default' filepath='include/net/mac80211.h' line='1015' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='320' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1015' column='1' id='8e7917c8'>
+        <data-member access='public'>
+          <var-decl name='control' type-id='e261a812' visibility='default' filepath='include/net/mac80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ack' type-id='992e24f3' visibility='default' filepath='include/net/mac80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='status' type-id='908cb35a' visibility='default' filepath='include/net/mac80211.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='' type-id='cc5c15dd' visibility='default' filepath='include/net/mac80211.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='driver_data' type-id='e4a26562' visibility='default' filepath='include/net/mac80211.h' line='1062' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1016' column='1' id='e261a812'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='780d16e3' visibility='default' filepath='include/net/mac80211.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vif' type-id='3a1577c5' visibility='default' filepath='include/net/mac80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_key' type-id='43c1ffec' visibility='default' filepath='include/net/mac80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/mac80211.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='enqueue_time' type-id='989b7c52' visibility='default' filepath='include/net/mac80211.h' line='1036' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1017' column='1' id='780d16e3'>
+        <data-member access='public'>
+          <var-decl name='' type-id='d4e4741c' visibility='default' filepath='include/net/mac80211.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='jiffies' type-id='7359adad' visibility='default' filepath='include/net/mac80211.h' line='1030' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='112' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1019' column='1' id='d4e4741c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1020' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rts_cts_rate_idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_rts' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='use_cts_prot' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='short_preamble' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='skip_table' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1026' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tx_rate' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='933' column='1' id='c94cc2cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idx' type-id='fdbf7a0f' visibility='default' filepath='include/net/mac80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='count' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='flags' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='936' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='codel_time_t' type-id='19c2251e' filepath='include/net/codel.h' line='62' column='1' id='989b7c52'/>
+      <class-decl name='__anonymous_struct__2' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1038' column='1' id='992e24f3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/mac80211.h' line='1039' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1041' column='1' id='908cb35a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ack_signal' type-id='a7832498' visibility='default' filepath='include/net/mac80211.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ampdu_ack_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='ampdu_len' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='antenna' type-id='f9b06939' visibility='default' filepath='include/net/mac80211.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='tx_time' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='is_valid_ack_signal' type-id='b50a4934' visibility='default' filepath='include/net/mac80211.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='status_driver_data' type-id='24ae0315' visibility='default' filepath='include/net/mac80211.h' line='1049' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='320' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/mac80211.h' line='1051' column='1' id='cc5c15dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='driver_rates' type-id='bd01d8eb' visibility='default' filepath='include/net/mac80211.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pad' type-id='931565be' visibility='default' filepath='include/net/mac80211.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rate_driver_data' type-id='20b03b60' visibility='default' filepath='include/net/mac80211.h' line='1056' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='221c4941' size-in-bits='64' id='16734b39'/>
+      <function-decl name='ieee80211_tx_status' mangled-name='ieee80211_tx_status' filepath='net/mac80211/status.c' line='1068' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_status'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='1068' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/status.c' line='1068' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_tx_status_irqsafe' mangled-name='ieee80211_tx_status_irqsafe' filepath='net/mac80211/status.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_status_irqsafe'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='21' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/status.c' line='22' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_tx_rate_update' mangled-name='ieee80211_tx_rate_update' filepath='net/mac80211/status.c' line='1161' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_rate_update'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='1161' column='1'/>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/status.c' line='1162' column='1'/>
+        <parameter type-id='16734b39' name='info' filepath='net/mac80211/status.c' line='1163' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_report_low_ack' mangled-name='ieee80211_report_low_ack' filepath='net/mac80211/status.c' line='1180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_report_low_ack'>
+        <parameter type-id='f27bb1b0' name='pubsta' filepath='net/mac80211/status.c' line='1180' column='1'/>
+        <parameter type-id='19c2251e' name='num_packets' filepath='net/mac80211/status.c' line='1180' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_free_txskb' mangled-name='ieee80211_free_txskb' filepath='net/mac80211/status.c' line='1188' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_free_txskb'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/status.c' line='1188' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/mac80211/status.c' line='1188' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/tdls.c' language='LANG_C89'>
+      <function-decl name='ieee80211_tdls_oper_request' mangled-name='ieee80211_tdls_oper_request' filepath='net/mac80211/tdls.c' line='1442' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tdls_oper_request'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tdls.c' line='1442' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/mac80211/tdls.c' line='1442' column='1'/>
+        <parameter type-id='ee1b00fc' name='oper' filepath='net/mac80211/tdls.c' line='1443' column='1'/>
+        <parameter type-id='1dc6a898' name='reason_code' filepath='net/mac80211/tdls.c' line='1444' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/mac80211/tdls.c' line='1444' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <enum-decl name='nl80211_tdls_operation' filepath='include/uapi/linux/nl80211.h' line='5243' column='1' id='ee1b00fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/tx.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='1dc6a898' size-in-bits='32' id='c666b845'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='ieee80211_mutable_offsets' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/mac80211.h' line='4678' column='1' id='7db7e025'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tim_offset' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='4679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tim_length' type-id='1dc6a898' visibility='default' filepath='include/net/mac80211.h' line='4680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='csa_counter_offs' type-id='c666b845' visibility='default' filepath='include/net/mac80211.h' line='4682' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7db7e025' size-in-bits='64' id='080a0935'/>
+      <function-decl name='__ieee80211_schedule_txq' mangled-name='__ieee80211_schedule_txq' filepath='net/mac80211/tx.c' line='3771' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__ieee80211_schedule_txq'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3771' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3772' column='1'/>
+        <parameter type-id='b50a4934' name='force' filepath='net/mac80211/tx.c' line='3773' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_schedule_start' mangled-name='ieee80211_txq_schedule_start' filepath='net/mac80211/tx.c' line='3854' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_schedule_start'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3854' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3854' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_may_transmit' mangled-name='ieee80211_txq_may_transmit' filepath='net/mac80211/tx.c' line='3804' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_may_transmit'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3804' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3805' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ieee80211_tx_dequeue' mangled-name='ieee80211_tx_dequeue' filepath='net/mac80211/tx.c' line='3576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_tx_dequeue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3576' column='1'/>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/tx.c' line='3577' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_pspoll_get' mangled-name='ieee80211_pspoll_get' filepath='net/mac80211/tx.c' line='4755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_pspoll_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4755' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4756' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_proberesp_get' mangled-name='ieee80211_proberesp_get' filepath='net/mac80211/tx.c' line='4721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_proberesp_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4721' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4722' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_probereq_get' mangled-name='ieee80211_probereq_get' filepath='net/mac80211/tx.c' line='4851' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_probereq_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4851' column='1'/>
+        <parameter type-id='bbaf3419' name='src_addr' filepath='net/mac80211/tx.c' line='4852' column='1'/>
+        <parameter type-id='bbaf3419' name='ssid' filepath='net/mac80211/tx.c' line='4853' column='1'/>
+        <parameter type-id='b59d7dce' name='ssid_len' filepath='net/mac80211/tx.c' line='4853' column='1'/>
+        <parameter type-id='b59d7dce' name='tailroom' filepath='net/mac80211/tx.c' line='4854' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_nullfunc_get' mangled-name='ieee80211_nullfunc_get' filepath='net/mac80211/tx.c' line='4792' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_nullfunc_get'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4792' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4793' column='1'/>
+        <parameter type-id='b50a4934' name='qos_ok' filepath='net/mac80211/tx.c' line='4794' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_next_txq' mangled-name='ieee80211_next_txq' filepath='net/mac80211/tx.c' line='3729' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_next_txq'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='3729' column='1'/>
+        <parameter type-id='f9b06939' name='ac' filepath='net/mac80211/tx.c' line='3729' column='1'/>
+        <return type-id='cde83d0f'/>
+      </function-decl>
+      <function-decl name='ieee80211_csa_update_counter' mangled-name='ieee80211_csa_update_counter' filepath='net/mac80211/tx.c' line='4382' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_update_counter'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4382' column='1'/>
+        <return type-id='f9b06939'/>
+      </function-decl>
+      <function-decl name='ieee80211_csa_is_complete' mangled-name='ieee80211_csa_is_complete' filepath='net/mac80211/tx.c' line='4433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_csa_is_complete'>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4433' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_get_tim' mangled-name='ieee80211_beacon_get_tim' filepath='net/mac80211/tx.c' line='4681' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_get_tim'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4681' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4682' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_offset' filepath='net/mac80211/tx.c' line='4683' column='1'/>
+        <parameter type-id='26d4d46f' name='tim_length' filepath='net/mac80211/tx.c' line='4683' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='ieee80211_beacon_get_template' mangled-name='ieee80211_beacon_get_template' filepath='net/mac80211/tx.c' line='4673' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_beacon_get_template'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/tx.c' line='4673' column='1'/>
+        <parameter type-id='3a1577c5' name='vif' filepath='net/mac80211/tx.c' line='4674' column='1'/>
+        <parameter type-id='080a0935' name='offs' filepath='net/mac80211/tx.c' line='4675' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/mac80211/util.c' language='LANG_C89'>
+      <pointer-type-def type-id='10bb70af' size-in-bits='64' id='9d7b1183'/>
+      <pointer-type-def type-id='aa02e5c5' size-in-bits='64' id='4e5f84b1'/>
+      <function-decl name='ieee80211_queue_work' mangled-name='ieee80211_queue_work' filepath='net/mac80211/util.c' line='870' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_queue_work'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='870' column='1'/>
+        <parameter type-id='83c1bde6' name='work' filepath='net/mac80211/util.c' line='870' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wiphy_to_ieee80211_hw' mangled-name='wiphy_to_ieee80211_hw' filepath='net/mac80211/util.c' line='39' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_to_ieee80211_hw'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/mac80211/util.c' line='39' column='1'/>
+        <return type-id='1905517d'/>
+      </function-decl>
+      <function-decl name='ieee80211_wake_queues' mangled-name='ieee80211_wake_queues' filepath='net/mac80211/util.c' line='634' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_wake_queues'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='634' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_wake_queue' mangled-name='ieee80211_wake_queue' filepath='net/mac80211/util.c' line='445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_wake_queue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='445' column='1'/>
+        <parameter type-id='95e97e5e' name='queue' filepath='net/mac80211/util.c' line='445' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_txq_get_depth' mangled-name='ieee80211_txq_get_depth' filepath='net/mac80211/util.c' line='4055' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_txq_get_depth'>
+        <parameter type-id='cde83d0f' name='txq' filepath='net/mac80211/util.c' line='4055' column='1'/>
+        <parameter type-id='1d2c2b85' name='frame_cnt' filepath='net/mac80211/util.c' line='4056' column='1'/>
+        <parameter type-id='1d2c2b85' name='byte_cnt' filepath='net/mac80211/util.c' line='4057' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_stop_queues' mangled-name='ieee80211_stop_queues' filepath='net/mac80211/util.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_queues'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_stop_queue' mangled-name='ieee80211_stop_queue' filepath='net/mac80211/util.c' line='512' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_stop_queue'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='512' column='1'/>
+        <parameter type-id='95e97e5e' name='queue' filepath='net/mac80211/util.c' line='512' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_radar_detected' mangled-name='ieee80211_radar_detected' filepath='net/mac80211/util.c' line='3445' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radar_detected'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='3445' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_queue_delayed_work' mangled-name='ieee80211_queue_delayed_work' filepath='net/mac80211/util.c' line='881' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_queue_delayed_work'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='881' column='1'/>
+        <parameter type-id='1a7ee447' name='dwork' filepath='net/mac80211/util.c' line='882' column='1'/>
+        <parameter type-id='7359adad' name='delay' filepath='net/mac80211/util.c' line='883' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_stations_atomic' mangled-name='ieee80211_iterate_stations_atomic' filepath='net/mac80211/util.c' line='810' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_stations_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='810' column='1'/>
+        <parameter type-id='9d7b1183' name='iterator' filepath='net/mac80211/util.c' line='811' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='813' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_interfaces' mangled-name='ieee80211_iterate_interfaces' filepath='net/mac80211/util.c' line='751' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_interfaces'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='752' column='1'/>
+        <parameter type-id='19c2251e' name='iter_flags' filepath='net/mac80211/util.c' line='752' column='1'/>
+        <parameter type-id='4e5f84b1' name='iterator' filepath='net/mac80211/util.c' line='753' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='755' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='ieee80211_iterate_active_interfaces_atomic' mangled-name='ieee80211_iterate_active_interfaces_atomic' filepath='net/mac80211/util.c' line='765' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_iterate_active_interfaces_atomic'>
+        <parameter type-id='1905517d' name='hw' filepath='net/mac80211/util.c' line='766' column='1'/>
+        <parameter type-id='19c2251e' name='iter_flags' filepath='net/mac80211/util.c' line='766' column='1'/>
+        <parameter type-id='4e5f84b1' name='iterator' filepath='net/mac80211/util.c' line='767' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='net/mac80211/util.c' line='769' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='10bb70af'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f27bb1b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aa02e5c5'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='3a1577c5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netfilter/core.c' language='LANG_C89'>
+      <class-decl name='nf_queue_entry' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='12' column='1' id='a73b7dc2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='skb' type-id='0fbf3cfd' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hook_index' type-id='f0981eeb' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='state' type-id='89d4ce3f' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_queue.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='nf_hook_ops' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='80' column='1' id='63d6992a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='hooknum' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='priority' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='63d6992a' const='yes' id='af1e6651'/>
+      <pointer-type-def type-id='af1e6651' size-in-bits='64' id='27db53a1'/>
+      <pointer-type-def type-id='33f50c8e' size-in-bits='64' id='c2147f48'/>
+      <pointer-type-def type-id='d9fc42c3' size-in-bits='64' id='96b07343'/>
+      <pointer-type-def type-id='a73b7dc2' size-in-bits='64' id='ef706860'/>
+      <function-decl name='nf_register_net_hooks' mangled-name='nf_register_net_hooks' filepath='net/netfilter/core.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_register_net_hooks'>
+        <parameter type-id='a2bff676' name='net' filepath='net/netfilter/core.c' line='473' column='1'/>
+        <parameter type-id='27db53a1' name='reg' filepath='net/netfilter/core.c' line='473' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='net/netfilter/core.c' line='474' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='nf_conntrack_destroy' mangled-name='nf_conntrack_destroy' filepath='net/netfilter/core.c' line='573' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_conntrack_destroy'>
+        <parameter type-id='96b07343' name='nfct' filepath='net/netfilter/core.c' line='573' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='nf_unregister_net_hooks' mangled-name='nf_unregister_net_hooks' filepath='net/netfilter/core.c' line='493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_unregister_net_hooks'>
+        <parameter type-id='a2bff676' name='net' filepath='net/netfilter/core.c' line='493' column='1'/>
+        <parameter type-id='27db53a1' name='reg' filepath='net/netfilter/core.c' line='493' column='1'/>
+        <parameter type-id='f0981eeb' name='hookcount' filepath='net/netfilter/core.c' line='494' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='33f50c8e'>
+        <parameter type-id='ef706860'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netfilter/nf_conntrack_core.c' language='LANG_C89'>
+      <class-decl name='nf_conntrack_zone' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='16' column='1' id='bf11b8f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='1dc6a898' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='dir' type-id='f9b06939' visibility='default' filepath='include/linux/netfilter/nf_conntrack_zones_common.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9805d802' const='yes' id='90e5636b'/>
+      <pointer-type-def type-id='90e5636b' size-in-bits='64' id='5a1b3f53'/>
+      <qualified-type-def type-id='bf11b8f2' const='yes' id='8c09cc61'/>
+      <pointer-type-def type-id='8c09cc61' size-in-bits='64' id='be6c9a11'/>
+      <pointer-type-def type-id='9805d802' size-in-bits='64' id='66d2e8f0'/>
+      <pointer-type-def type-id='80b664d7' size-in-bits='64' id='60eba7df'/>
+      <function-decl name='nf_ct_invert_tuple' mangled-name='nf_ct_invert_tuple' filepath='net/netfilter/nf_conntrack_core.c' line='406' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_invert_tuple'>
+        <parameter type-id='66d2e8f0' name='inverse' filepath='net/netfilter/nf_conntrack_core.c' line='406' column='1'/>
+        <parameter type-id='5a1b3f53' name='orig' filepath='net/netfilter/nf_conntrack_core.c' line='407' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='nf_ct_get_tuplepr' mangled-name='nf_ct_get_tuplepr' filepath='net/netfilter/nf_conntrack_core.c' line='390' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_get_tuplepr'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/netfilter/nf_conntrack_core.c' line='390' column='1'/>
+        <parameter type-id='f0981eeb' name='nhoff' filepath='net/netfilter/nf_conntrack_core.c' line='390' column='1'/>
+        <parameter type-id='ea2e3595' name='l3num' filepath='net/netfilter/nf_conntrack_core.c' line='391' column='1'/>
+        <parameter type-id='a2bff676' name='net' filepath='net/netfilter/nf_conntrack_core.c' line='392' column='1'/>
+        <parameter type-id='66d2e8f0' name='tuple' filepath='net/netfilter/nf_conntrack_core.c' line='392' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='nf_conntrack_find_get' mangled-name='nf_conntrack_find_get' filepath='net/netfilter/nf_conntrack_core.c' line='801' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_conntrack_find_get'>
+        <parameter type-id='a2bff676' name='net' filepath='net/netfilter/nf_conntrack_core.c' line='801' column='1'/>
+        <parameter type-id='be6c9a11' name='zone' filepath='net/netfilter/nf_conntrack_core.c' line='801' column='1'/>
+        <parameter type-id='5a1b3f53' name='tuple' filepath='net/netfilter/nf_conntrack_core.c' line='802' column='1'/>
+        <return type-id='60eba7df'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netfilter/nf_conntrack_proto.c' language='LANG_C89'>
+      <class-decl name='nf_conntrack_l4proto' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='20' column='1' id='0af737ca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='l4proto' type-id='892641a4' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='allow_clash' type-id='b50a4934' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='nlattr_size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='can_early_drop' type-id='72720131' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='to_nlattr' type-id='e1690fff' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='from_nlattr' type-id='871d04db' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tuple_to_nlattr' type-id='97a14109' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='nlattr_tuple_size' type-id='0838a534' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='nlattr_to_tuple' type-id='71cd3841' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nla_policy' type-id='109cdb66' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ctnl_timeout' type-id='96c35bb4' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='print_conntrack' type-id='cfb1203d' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='256' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='48' column='1' id='96c35bb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nlattr_to_obj' type-id='3de28d43' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='obj_to_nlattr' type-id='a6ebc0f9' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='obj_size' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='nlattr_max' type-id='1dc6a898' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='nla_policy' type-id='109cdb66' visibility='default' filepath='include/net/netfilter/nf_conntrack_l4proto.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='cf9b45ac' const='yes' id='49b990e7'/>
+      <pointer-type-def type-id='49b990e7' size-in-bits='64' id='dc1ef2b7'/>
+      <qualified-type-def type-id='0af737ca' const='yes' id='3b79f40f'/>
+      <pointer-type-def type-id='3b79f40f' size-in-bits='64' id='c5fb563f'/>
+      <pointer-type-def type-id='21872e57' size-in-bits='64' id='3de28d43'/>
+      <pointer-type-def type-id='c4f5a87f' size-in-bits='64' id='871d04db'/>
+      <pointer-type-def type-id='c7c5fb95' size-in-bits='64' id='71cd3841'/>
+      <pointer-type-def type-id='14a454b5' size-in-bits='64' id='97a14109'/>
+      <pointer-type-def type-id='ca492abb' size-in-bits='64' id='e1690fff'/>
+      <pointer-type-def type-id='75489b85' size-in-bits='64' id='a6ebc0f9'/>
+      <pointer-type-def type-id='55274865' size-in-bits='64' id='72720131'/>
+      <pointer-type-def type-id='d5408851' size-in-bits='64' id='cfb1203d'/>
+      <function-decl name='nf_ct_l4proto_find' mangled-name='nf_ct_l4proto_find' filepath='net/netfilter/nf_conntrack_proto.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='nf_ct_l4proto_find'>
+        <parameter type-id='f9b06939' name='l4proto' filepath='net/netfilter/nf_conntrack_proto.c' line='97' column='1'/>
+        <return type-id='c5fb563f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='21872e57'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c4f5a87f'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7c5fb95'>
+        <parameter type-id='30864cdc'/>
+        <parameter type-id='66d2e8f0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14a454b5'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='5a1b3f53'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ca492abb'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='75489b85'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='55274865'>
+        <parameter type-id='dc1ef2b7'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d5408851'>
+        <parameter type-id='f8dc9def'/>
+        <parameter type-id='8c493d8a'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netfilter/x_tables.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='9b45d938' size-in-bits='232' id='cff94a5f'>
+        <subrange length='29' type-id='7ff19f0f' id='01b8f6fa'/>
+      </array-type-def>
+      <class-decl name='xt_target' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='182' column='1' id='60289ffb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='target' type-id='73cc7ee4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='ef16e31e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='6307fc3e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='targetsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='219' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_action_param' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='30' column='1' id='edb04712'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='' type-id='3db026b2' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='71be3d11' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='state' type-id='309a5a26' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='fragoff' type-id='95e97e5e' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='thoff' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hotdrop' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='41' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__8' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='31' column='1' id='3db026b2'>
+        <data-member access='public'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='33' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xt_match' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='142' column='1' id='9399d16b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='cff94a5f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='revision' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='match' type-id='78abc667' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='checkentry' type-id='f6865b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='destroy' type-id='f0385e42' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='compat_from_user' type-id='debb4ee8' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='compat_to_user' type-id='585e1de9' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='me' type-id='2730d015' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='matchsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='usersize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compatsize' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='hooks' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='proto' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='family' type-id='8efea9e5' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_mtchk_param' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='92' column='1' id='b30ae843'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entryinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hook_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='nft_compat' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='100' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_mtdtor_param' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='107' column='1' id='7ad52504'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='match' type-id='1ecd1044' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='111' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__9' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='35' column='1' id='71be3d11'>
+        <data-member access='public'>
+          <var-decl name='matchinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='36' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xt_tgchk_param' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='123' column='1' id='fa0eab7f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='table' type-id='80f4b756' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='entryinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hook_mask' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='nft_compat' type-id='b50a4934' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='131' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xt_tgdtor_param' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='135' column='1' id='6cd62070'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='target' type-id='b7f14b36' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='targinfo' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='family' type-id='892641a4' visibility='default' filepath='include/linux/netfilter/x_tables.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='edb04712' const='yes' id='70660701'/>
+      <pointer-type-def type-id='70660701' size-in-bits='64' id='1b9d48b1'/>
+      <qualified-type-def type-id='9399d16b' const='yes' id='1beae906'/>
+      <pointer-type-def type-id='1beae906' size-in-bits='64' id='1ecd1044'/>
+      <qualified-type-def type-id='b30ae843' const='yes' id='7be051de'/>
+      <pointer-type-def type-id='7be051de' size-in-bits='64' id='f621031c'/>
+      <qualified-type-def type-id='7ad52504' const='yes' id='2d4ad53b'/>
+      <pointer-type-def type-id='2d4ad53b' size-in-bits='64' id='5dcd69c3'/>
+      <qualified-type-def type-id='469df90e' const='yes' id='3d24528f'/>
+      <pointer-type-def type-id='3d24528f' size-in-bits='64' id='e52e19bf'/>
+      <qualified-type-def type-id='60289ffb' const='yes' id='79fae198'/>
+      <pointer-type-def type-id='79fae198' size-in-bits='64' id='b7f14b36'/>
+      <qualified-type-def type-id='fa0eab7f' const='yes' id='19952db6'/>
+      <pointer-type-def type-id='19952db6' size-in-bits='64' id='e1d6cc94'/>
+      <qualified-type-def type-id='6cd62070' const='yes' id='38e0f6d3'/>
+      <pointer-type-def type-id='38e0f6d3' size-in-bits='64' id='8324c9fb'/>
+      <pointer-type-def type-id='156670bc' size-in-bits='64' id='f6865b36'/>
+      <pointer-type-def type-id='eeef65e4' size-in-bits='64' id='ef16e31e'/>
+      <pointer-type-def type-id='63d6992a' size-in-bits='64' id='f7d53868'/>
+      <pointer-type-def type-id='11ce232b' size-in-bits='64' id='78abc667'/>
+      <pointer-type-def type-id='4446be8a' size-in-bits='64' id='73cc7ee4'/>
+      <pointer-type-def type-id='26b6dfe0' size-in-bits='64' id='f0385e42'/>
+      <pointer-type-def type-id='29ca5ed4' size-in-bits='64' id='6307fc3e'/>
+      <pointer-type-def type-id='c039af2e' size-in-bits='64' id='debb4ee8'/>
+      <pointer-type-def type-id='edb04712' size-in-bits='64' id='64ed5260'/>
+      <pointer-type-def type-id='9399d16b' size-in-bits='64' id='e25f5feb'/>
+      <pointer-type-def type-id='60289ffb' size-in-bits='64' id='49ac960b'/>
+      <var-decl name='xt_tee_enabled' type-id='00205383' mangled-name='xt_tee_enabled' visibility='default' filepath='net/netfilter/x_tables.c' line='1287' column='1' elf-symbol-id='xt_tee_enabled'/>
+      <function-decl name='xt_unregister_targets' mangled-name='xt_unregister_targets' filepath='net/netfilter/x_tables.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_targets'>
+        <parameter type-id='49ac960b' name='target' filepath='net/netfilter/x_tables.c' line='112' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='net/netfilter/x_tables.c' line='112' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_unregister_target' mangled-name='xt_unregister_target' filepath='net/netfilter/x_tables.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_target'>
+        <parameter type-id='49ac960b' name='target' filepath='net/netfilter/x_tables.c' line='81' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_unregister_matches' mangled-name='xt_unregister_matches' filepath='net/netfilter/x_tables.c' line='162' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_matches'>
+        <parameter type-id='e25f5feb' name='match' filepath='net/netfilter/x_tables.c' line='162' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='net/netfilter/x_tables.c' line='162' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_unregister_match' mangled-name='xt_unregister_match' filepath='net/netfilter/x_tables.c' line='131' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_unregister_match'>
+        <parameter type-id='e25f5feb' name='match' filepath='net/netfilter/x_tables.c' line='131' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xt_register_targets' mangled-name='xt_register_targets' filepath='net/netfilter/x_tables.c' line='92' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_targets'>
+        <parameter type-id='49ac960b' name='target' filepath='net/netfilter/x_tables.c' line='92' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='net/netfilter/x_tables.c' line='92' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xt_register_target' mangled-name='xt_register_target' filepath='net/netfilter/x_tables.c' line='69' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_target'>
+        <parameter type-id='49ac960b' name='target' filepath='net/netfilter/x_tables.c' line='69' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xt_register_matches' mangled-name='xt_register_matches' filepath='net/netfilter/x_tables.c' line='142' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_matches'>
+        <parameter type-id='e25f5feb' name='match' filepath='net/netfilter/x_tables.c' line='142' column='1'/>
+        <parameter type-id='f0981eeb' name='n' filepath='net/netfilter/x_tables.c' line='142' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xt_register_match' mangled-name='xt_register_match' filepath='net/netfilter/x_tables.c' line='119' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_register_match'>
+        <parameter type-id='e25f5feb' name='match' filepath='net/netfilter/x_tables.c' line='119' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xt_hook_ops_alloc' mangled-name='xt_hook_ops_alloc' filepath='net/netfilter/x_tables.c' line='1692' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xt_hook_ops_alloc'>
+        <parameter type-id='e52e19bf' name='table' filepath='net/netfilter/x_tables.c' line='1692' column='1'/>
+        <parameter type-id='c8f8b049' name='fn' filepath='net/netfilter/x_tables.c' line='1692' column='1'/>
+        <return type-id='f7d53868'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='156670bc'>
+        <parameter type-id='f621031c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eeef65e4'>
+        <parameter type-id='e1d6cc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='11ce232b'>
+        <parameter type-id='11f4a000'/>
+        <parameter type-id='64ed5260'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4446be8a'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='1b9d48b1'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='26b6dfe0'>
+        <parameter type-id='5dcd69c3'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='29ca5ed4'>
+        <parameter type-id='8324c9fb'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netlink/af_netlink.c' language='LANG_C89'>
+      <class-decl name='netlink_kernel_cfg' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='44' column='1' id='f7a1d399'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='groups' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/linux/netlink.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='input' type-id='0ef96694' visibility='default' filepath='include/linux/netlink.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cb_mutex' type-id='e0ea832a' visibility='default' filepath='include/linux/netlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bind' type-id='e77f5b05' visibility='default' filepath='include/linux/netlink.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unbind' type-id='493b1d22' visibility='default' filepath='include/linux/netlink.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='compare' type-id='bfc146e4' visibility='default' filepath='include/linux/netlink.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='netlink_dump_control' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netlink.h' line='214' column='1' id='21ec1a55'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dump' type-id='32a663ca' visibility='default' filepath='include/linux/netlink.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/linux/netlink.h' line='217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/netlink.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/linux/netlink.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='min_dump_alloc' type-id='1dc6a898' visibility='default' filepath='include/linux/netlink.h' line='220' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='339a9d49' size-in-bits='64' id='e77f5b05'/>
+      <pointer-type-def type-id='21ec1a55' size-in-bits='64' id='6984e365'/>
+      <pointer-type-def type-id='f7a1d399' size-in-bits='64' id='8438f281'/>
+      <pointer-type-def type-id='64a9bab2' size-in-bits='64' id='bfc146e4'/>
+      <pointer-type-def type-id='5ae55c68' size-in-bits='64' id='493b1d22'/>
+      <function-decl name='netlink_unicast' mangled-name='netlink_unicast' filepath='net/netlink/af_netlink.c' line='1319' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_unicast'>
+        <parameter type-id='f772df6d' name='ssk' filepath='net/netlink/af_netlink.c' line='1319' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='1319' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/netlink/af_netlink.c' line='1320' column='1'/>
+        <parameter type-id='95e97e5e' name='nonblock' filepath='net/netlink/af_netlink.c' line='1320' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_has_listeners' mangled-name='netlink_has_listeners' filepath='net/netlink/af_netlink.c' line='1355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_has_listeners'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/netlink/af_netlink.c' line='1355' column='1'/>
+        <parameter type-id='f0981eeb' name='group' filepath='net/netlink/af_netlink.c' line='1355' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__netlink_kernel_create' mangled-name='__netlink_kernel_create' filepath='net/netlink/af_netlink.c' line='2039' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netlink_kernel_create'>
+        <parameter type-id='a2bff676' name='net' filepath='net/netlink/af_netlink.c' line='2039' column='1'/>
+        <parameter type-id='95e97e5e' name='unit' filepath='net/netlink/af_netlink.c' line='2039' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='net/netlink/af_netlink.c' line='2039' column='1'/>
+        <parameter type-id='8438f281' name='cfg' filepath='net/netlink/af_netlink.c' line='2040' column='1'/>
+        <return type-id='f772df6d'/>
+      </function-decl>
+      <function-decl name='netlink_kernel_release' mangled-name='netlink_kernel_release' filepath='net/netlink/af_netlink.c' line='2114' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_kernel_release'>
+        <parameter type-id='f772df6d' name='sk' filepath='net/netlink/af_netlink.c' line='2114' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netlink_capable' mangled-name='netlink_capable' filepath='net/netlink/af_netlink.c' line='892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_capable'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/netlink/af_netlink.c' line='892' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='net/netlink/af_netlink.c' line='892' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='netlink_net_capable' mangled-name='netlink_net_capable' filepath='net/netlink/af_netlink.c' line='908' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_net_capable'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/netlink/af_netlink.c' line='908' column='1'/>
+        <parameter type-id='95e97e5e' name='cap' filepath='net/netlink/af_netlink.c' line='908' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='__netlink_dump_start' mangled-name='__netlink_dump_start' filepath='net/netlink/af_netlink.c' line='2312' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__netlink_dump_start'>
+        <parameter type-id='f772df6d' name='ssk' filepath='net/netlink/af_netlink.c' line='2312' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='2312' column='1'/>
+        <parameter type-id='390fbe8f' name='nlh' filepath='net/netlink/af_netlink.c' line='2313' column='1'/>
+        <parameter type-id='6984e365' name='control' filepath='net/netlink/af_netlink.c' line='2314' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_unregister_notifier' mangled-name='netlink_unregister_notifier' filepath='net/netlink/af_netlink.c' line='2674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_unregister_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/netlink/af_netlink.c' line='2674' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_register_notifier' mangled-name='netlink_register_notifier' filepath='net/netlink/af_netlink.c' line='2668' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_register_notifier'>
+        <parameter type-id='d504f73d' name='nb' filepath='net/netlink/af_netlink.c' line='2668' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='netlink_broadcast' mangled-name='netlink_broadcast' filepath='net/netlink/af_netlink.c' line='1539' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netlink_broadcast'>
+        <parameter type-id='f772df6d' name='ssk' filepath='net/netlink/af_netlink.c' line='1539' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='1539' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/netlink/af_netlink.c' line='1539' column='1'/>
+        <parameter type-id='19c2251e' name='group' filepath='net/netlink/af_netlink.c' line='1540' column='1'/>
+        <parameter type-id='3eb7c31c' name='allocation' filepath='net/netlink/af_netlink.c' line='1540' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__nlmsg_put' mangled-name='__nlmsg_put' filepath='net/netlink/af_netlink.c' line='2179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__nlmsg_put'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <parameter type-id='19c2251e' name='seq' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/netlink/af_netlink.c' line='2179' column='1'/>
+        <return type-id='c2074578'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='339a9d49'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='64a9bab2'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='f772df6d'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ae55c68'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/netlink/genetlink.c' language='LANG_C89'>
+      <class-decl name='genl_family' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='47' column='1' id='278d8d7c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/net/genetlink.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='hdrsize' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='netnsok' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='parallel_ops' type-id='b50a4934' visibility='default' filepath='include/net/genetlink.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/genetlink.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pre_doit' type-id='a45ad774' visibility='default' filepath='include/net/genetlink.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='post_doit' type-id='14ba77ef' visibility='default' filepath='include/net/genetlink.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='attrbuf' type-id='30864cdc' visibility='default' filepath='include/net/genetlink.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ops' type-id='8ba26d85' visibility='default' filepath='include/net/genetlink.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mcgrps' type-id='f4bc933f' visibility='default' filepath='include/net/genetlink.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_ops' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='n_mcgrps' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mcgrp_offset' type-id='f0981eeb' visibility='default' filepath='include/net/genetlink.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/net/genetlink.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/genetlink.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='135' column='1' id='83b59630'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='doit' type-id='8f8224f6' visibility='default' filepath='include/net/genetlink.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='start' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dumpit' type-id='32a663ca' visibility='default' filepath='include/net/genetlink.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='done' type-id='eca40b6e' visibility='default' filepath='include/net/genetlink.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cmd' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='internal_flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='280'>
+          <var-decl name='validate' type-id='f9b06939' visibility='default' filepath='include/net/genetlink.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/genetlink.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='87' column='1' id='fbcd72c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='snd_seq' type-id='19c2251e' visibility='default' filepath='include/net/genetlink.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='snd_portid' type-id='19c2251e' visibility='default' filepath='include/net/genetlink.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='nlhdr' type-id='c2074578' visibility='default' filepath='include/net/genetlink.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='genlhdr' type-id='db93e57c' visibility='default' filepath='include/net/genetlink.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='userhdr' type-id='eaa32e2f' visibility='default' filepath='include/net/genetlink.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='attrs' type-id='30864cdc' visibility='default' filepath='include/net/genetlink.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/genetlink.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='user_ptr' type-id='24ae0315' visibility='default' filepath='include/net/genetlink.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='extack' type-id='5799dc94' visibility='default' filepath='include/net/genetlink.h' line='96' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genlmsghdr' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/linux/genetlink.h' line='13' column='1' id='8fadaaa6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/genetlink.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='version' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/genetlink.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='reserved' type-id='d315442e' visibility='default' filepath='include/uapi/linux/genetlink.h' line='16' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='genl_multicast_group' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/genetlink.h' line='16' column='1' id='486f930e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/net/genetlink.h' line='17' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='278d8d7c' const='yes' id='c35ca4f3'/>
+      <pointer-type-def type-id='c35ca4f3' size-in-bits='64' id='63d7819b'/>
+      <qualified-type-def type-id='486f930e' const='yes' id='0aade30f'/>
+      <pointer-type-def type-id='0aade30f' size-in-bits='64' id='f4bc933f'/>
+      <qualified-type-def type-id='83b59630' const='yes' id='f67ba3ad'/>
+      <pointer-type-def type-id='f67ba3ad' size-in-bits='64' id='8ba26d85'/>
+      <pointer-type-def type-id='278d8d7c' size-in-bits='64' id='8f6b937a'/>
+      <pointer-type-def type-id='fbcd72c8' size-in-bits='64' id='31b542ce'/>
+      <pointer-type-def type-id='8fadaaa6' size-in-bits='64' id='db93e57c'/>
+      <pointer-type-def type-id='94bbdcaa' size-in-bits='64' id='a45ad774'/>
+      <pointer-type-def type-id='7b76bae4' size-in-bits='64' id='8f8224f6'/>
+      <pointer-type-def type-id='e1834a73' size-in-bits='64' id='14ba77ef'/>
+      <function-decl name='genl_register_family' mangled-name='genl_register_family' filepath='net/netlink/genetlink.c' line='322' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_register_family'>
+        <parameter type-id='8f6b937a' name='family' filepath='net/netlink/genetlink.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='genl_unregister_family' mangled-name='genl_unregister_family' filepath='net/netlink/genetlink.c' line='404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_unregister_family'>
+        <parameter type-id='63d7819b' name='family' filepath='net/netlink/genetlink.c' line='404' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='genlmsg_put' mangled-name='genlmsg_put' filepath='net/netlink/genetlink.c' line='441' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genlmsg_put'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/genetlink.c' line='441' column='1'/>
+        <parameter type-id='19c2251e' name='portid' filepath='net/netlink/genetlink.c' line='441' column='1'/>
+        <parameter type-id='19c2251e' name='seq' filepath='net/netlink/genetlink.c' line='441' column='1'/>
+        <parameter type-id='63d7819b' name='family' filepath='net/netlink/genetlink.c' line='442' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/netlink/genetlink.c' line='442' column='1'/>
+        <parameter type-id='f9b06939' name='cmd' filepath='net/netlink/genetlink.c' line='442' column='1'/>
+        <return type-id='eaa32e2f'/>
+      </function-decl>
+      <function-decl name='genl_notify' mangled-name='genl_notify' filepath='net/netlink/genetlink.c' line='1109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='genl_notify'>
+        <parameter type-id='63d7819b' name='family' filepath='net/netlink/genetlink.c' line='1109' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/netlink/genetlink.c' line='1109' column='1'/>
+        <parameter type-id='31b542ce' name='info' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <parameter type-id='19c2251e' name='group' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <parameter type-id='3eb7c31c' name='flags' filepath='net/netlink/genetlink.c' line='1110' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='94bbdcaa'>
+        <parameter type-id='8ba26d85'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7b76bae4'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e1834a73'>
+        <parameter type-id='8ba26d85'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='31b542ce'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/rfkill/core.c' language='LANG_C89'>
+      <enum-decl name='rfkill_type' filepath='include/uapi/linux/rfkill.h' line='43' column='1' id='6bac1cb5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='RFKILL_TYPE_ALL' value='0'/>
+        <enumerator name='RFKILL_TYPE_WLAN' value='1'/>
+        <enumerator name='RFKILL_TYPE_BLUETOOTH' value='2'/>
+        <enumerator name='RFKILL_TYPE_UWB' value='3'/>
+        <enumerator name='RFKILL_TYPE_WIMAX' value='4'/>
+        <enumerator name='RFKILL_TYPE_WWAN' value='5'/>
+        <enumerator name='RFKILL_TYPE_GPS' value='6'/>
+        <enumerator name='RFKILL_TYPE_FM' value='7'/>
+        <enumerator name='RFKILL_TYPE_NFC' value='8'/>
+        <enumerator name='NUM_RFKILL_TYPES' value='9'/>
+      </enum-decl>
+      <class-decl name='rfkill_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/rfkill.h' line='61' column='1' id='1e4ae69e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='poll' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='query' type-id='d78909c6' visibility='default' filepath='include/linux/rfkill.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_block' type-id='f08d4e50' visibility='default' filepath='include/linux/rfkill.h' line='64' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='1e4ae69e' const='yes' id='5433b7f7'/>
+      <pointer-type-def type-id='5433b7f7' size-in-bits='64' id='6a6a70e7'/>
+      <qualified-type-def type-id='6bac1cb5' const='yes' id='c3f0f7d9'/>
+      <pointer-type-def type-id='b69e3ec6' size-in-bits='64' id='f08d4e50'/>
+      <pointer-type-def type-id='182ef894' size-in-bits='64' id='d78909c6'/>
+      <function-decl name='rfkill_register' mangled-name='rfkill_register' filepath='net/rfkill/core.c' line='1005' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_register'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='1005' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='rfkill_unregister' mangled-name='rfkill_unregister' filepath='net/rfkill/core.c' line='1075' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_unregister'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='1075' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_set_states' mangled-name='rfkill_set_states' filepath='net/rfkill/core.c' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_set_states'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='606' column='1'/>
+        <parameter type-id='b50a4934' name='sw' filepath='net/rfkill/core.c' line='606' column='1'/>
+        <parameter type-id='b50a4934' name='hw' filepath='net/rfkill/core.c' line='606' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_init_sw_state' mangled-name='rfkill_init_sw_state' filepath='net/rfkill/core.c' line='592' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_init_sw_state'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='592' column='1'/>
+        <parameter type-id='b50a4934' name='blocked' filepath='net/rfkill/core.c' line='592' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_find_type' mangled-name='rfkill_find_type' filepath='net/rfkill/core.c' line='653' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_find_type'>
+        <parameter type-id='80f4b756' name='name' filepath='net/rfkill/core.c' line='653' column='1'/>
+        <return type-id='6bac1cb5'/>
+      </function-decl>
+      <function-decl name='rfkill_destroy' mangled-name='rfkill_destroy' filepath='net/rfkill/core.c' line='1099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_destroy'>
+        <parameter type-id='c5b94c75' name='rfkill' filepath='net/rfkill/core.c' line='1099' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='rfkill_alloc' mangled-name='rfkill_alloc' filepath='net/rfkill/core.c' line='922' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='rfkill_alloc'>
+        <parameter type-id='80f4b756' name='name' filepath='net/rfkill/core.c' line='922' column='1'/>
+        <parameter type-id='fa0b179b' name='parent' filepath='net/rfkill/core.c' line='923' column='1'/>
+        <parameter type-id='c3f0f7d9' name='type' filepath='net/rfkill/core.c' line='924' column='1'/>
+        <parameter type-id='6a6a70e7' name='ops' filepath='net/rfkill/core.c' line='925' column='1'/>
+        <parameter type-id='eaa32e2f' name='ops_data' filepath='net/rfkill/core.c' line='926' column='1'/>
+        <return type-id='c5b94c75'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='b69e3ec6'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='182ef894'>
+        <parameter type-id='c5b94c75'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/sched/act_api.c' language='LANG_C89'>
+      <function-decl name='tcf_action_exec' mangled-name='tcf_action_exec' filepath='net/sched/act_api.c' line='641' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_action_exec'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/sched/act_api.c' line='641' column='1'/>
+        <parameter type-id='981420b7' name='actions' filepath='net/sched/act_api.c' line='641' column='1'/>
+        <parameter type-id='95e97e5e' name='nr_actions' filepath='net/sched/act_api.c' line='642' column='1'/>
+        <parameter type-id='e638cd0c' name='res' filepath='net/sched/act_api.c' line='642' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='3f646ae7' size-in-bits='64' id='981420b7'/>
+      <pointer-type-def type-id='8e5ae04f' size-in-bits='64' id='3f646ae7'/>
+      <class-decl name='tc_action' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='23' column='1' id='8e5ae04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='bdbd4b03' visibility='default' filepath='include/net/act_api.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='order' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idrinfo' type-id='5eeecdaa' visibility='default' filepath='include/net/act_api.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcfa_index' type-id='19c2251e' visibility='default' filepath='include/net/act_api.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tcfa_refcnt' type-id='64615833' visibility='default' filepath='include/net/act_api.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tcfa_bindcnt' type-id='49178f86' visibility='default' filepath='include/net/act_api.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tcfa_action' type-id='95e97e5e' visibility='default' filepath='include/net/act_api.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tcfa_tm' type-id='195c8601' visibility='default' filepath='include/net/act_api.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcfa_bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tcfa_bstats_hw' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tcfa_qstats' type-id='a212a715' visibility='default' filepath='include/net/act_api.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tcfa_rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/act_api.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tcfa_lock' type-id='fb4018a0' visibility='default' filepath='include/net/act_api.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='cpu_bstats_hw' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/act_api.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='act_cookie' type-id='6fcb14d7' visibility='default' filepath='include/net/act_api.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='goto_chain' type-id='45305972' visibility='default' filepath='include/net/act_api.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_t' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='135' column='1' id='195c8601'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='install' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lastuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='firstuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='7e5d36fb' size-in-bits='64' id='bdbd4b03'/>
+      <pointer-type-def type-id='8eedee6f' size-in-bits='64' id='6fcb14d7'/>
+      <pointer-type-def type-id='8182ca8c' size-in-bits='64' id='5eeecdaa'/>
+      <class-decl name='tc_cookie' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='683' column='1' id='8eedee6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='8bff8096' visibility='default' filepath='include/net/pkt_cls.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/net/pkt_cls.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/pkt_cls.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_idrinfo' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='15' column='1' id='8182ca8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/act_api.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action_idr' type-id='37ce495e' visibility='default' filepath='include/net/act_api.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/act_api.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='6e5d2bdc' const='yes' id='7e5d36fb'/>
+      <class-decl name='tc_action_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='84' column='1' id='6e5d2bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/act_api.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/act_api.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='618a2054' visibility='default' filepath='include/net/act_api.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/act_api.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/act_api.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='act' type-id='8e7e5b0b' visibility='default' filepath='include/net/act_api.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dump' type-id='14aa811d' visibility='default' filepath='include/net/act_api.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3107ecae' visibility='default' filepath='include/net/act_api.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lookup' type-id='adec6207' visibility='default' filepath='include/net/act_api.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='31425e3a' visibility='default' filepath='include/net/act_api.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='8a8c0471' visibility='default' filepath='include/net/act_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stats_update' type-id='4e77e8d6' visibility='default' filepath='include/net/act_api.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_fill_size' type-id='342e75b6' visibility='default' filepath='include/net/act_api.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_dev' type-id='a3b5aa5f' visibility='default' filepath='include/net/act_api.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_psample_group' type-id='8421b09d' visibility='default' filepath='include/net/act_api.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tca_id' filepath='include/uapi/linux/pkt_cls.h' line='88' column='1' id='618a2054'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCA_ID_UNSPEC' value='0'/>
+        <enumerator name='TCA_ID_POLICE' value='1'/>
+        <enumerator name='TCA_ID_GACT' value='5'/>
+        <enumerator name='TCA_ID_IPT' value='6'/>
+        <enumerator name='TCA_ID_PEDIT' value='7'/>
+        <enumerator name='TCA_ID_MIRRED' value='8'/>
+        <enumerator name='TCA_ID_NAT' value='9'/>
+        <enumerator name='TCA_ID_XT' value='10'/>
+        <enumerator name='TCA_ID_SKBEDIT' value='11'/>
+        <enumerator name='TCA_ID_VLAN' value='12'/>
+        <enumerator name='TCA_ID_BPF' value='13'/>
+        <enumerator name='TCA_ID_CONNMARK' value='14'/>
+        <enumerator name='TCA_ID_SKBMOD' value='15'/>
+        <enumerator name='TCA_ID_CSUM' value='16'/>
+        <enumerator name='TCA_ID_TUNNEL_KEY' value='17'/>
+        <enumerator name='TCA_ID_SIMP' value='22'/>
+        <enumerator name='TCA_ID_IFE' value='25'/>
+        <enumerator name='TCA_ID_SAMPLE' value='26'/>
+        <enumerator name='TCA_ID_CTINFO' value='27'/>
+        <enumerator name='TCA_ID_MPLS' value='28'/>
+        <enumerator name='TCA_ID_CT' value='29'/>
+        <enumerator name='__TCA_ID_MAX' value='255'/>
+      </enum-decl>
+      <pointer-type-def type-id='218d3568' size-in-bits='64' id='31425e3a'/>
+      <pointer-type-def type-id='2ed857dd' size-in-bits='64' id='8a8c0471'/>
+      <pointer-type-def type-id='1302297b' size-in-bits='64' id='adec6207'/>
+      <pointer-type-def type-id='7be84b87' size-in-bits='64' id='8e7e5b0b'/>
+      <pointer-type-def type-id='b2ea0ff9' size-in-bits='64' id='14aa811d'/>
+      <pointer-type-def type-id='eb99238b' size-in-bits='64' id='a3b5aa5f'/>
+      <pointer-type-def type-id='f51d2b61' size-in-bits='64' id='8421b09d'/>
+      <pointer-type-def type-id='ead01d34' size-in-bits='64' id='342e75b6'/>
+      <pointer-type-def type-id='082d8e2c' size-in-bits='64' id='3107ecae'/>
+      <pointer-type-def type-id='9b4ee41c' size-in-bits='64' id='4e77e8d6'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/sched/cls_api.c' language='LANG_C89'>
+      <class-decl name='tcf_exts' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='189' column='1' id='6e2b0753'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/net/pkt_cls.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nr_actions' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='actions' type-id='981420b7' visibility='default' filepath='include/net/pkt_cls.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/pkt_cls.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='action' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='police' type-id='95e97e5e' visibility='default' filepath='include/net/pkt_cls.h' line='200' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_action' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='23' column='1' id='8e5ae04f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ops' type-id='bdbd4b03' visibility='default' filepath='include/net/act_api.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='order' type-id='3f1a6b60' visibility='default' filepath='include/net/act_api.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='idrinfo' type-id='5eeecdaa' visibility='default' filepath='include/net/act_api.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcfa_index' type-id='19c2251e' visibility='default' filepath='include/net/act_api.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tcfa_refcnt' type-id='64615833' visibility='default' filepath='include/net/act_api.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tcfa_bindcnt' type-id='49178f86' visibility='default' filepath='include/net/act_api.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tcfa_action' type-id='95e97e5e' visibility='default' filepath='include/net/act_api.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tcfa_tm' type-id='195c8601' visibility='default' filepath='include/net/act_api.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='tcfa_bstats' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tcfa_bstats_hw' type-id='1f9b1a31' visibility='default' filepath='include/net/act_api.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='tcfa_qstats' type-id='a212a715' visibility='default' filepath='include/net/act_api.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='tcfa_rate_est' type-id='8c1bb0b4' visibility='default' filepath='include/net/act_api.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='tcfa_lock' type-id='fb4018a0' visibility='default' filepath='include/net/act_api.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cpu_bstats' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='cpu_bstats_hw' type-id='b3542b31' visibility='default' filepath='include/net/act_api.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='cpu_qstats' type-id='338303f5' visibility='default' filepath='include/net/act_api.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='act_cookie' type-id='6fcb14d7' visibility='default' filepath='include/net/act_api.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='goto_chain' type-id='45305972' visibility='default' filepath='include/net/act_api.h' line='43' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_action_ops' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='84' column='1' id='6e5d2bdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='72f469ec' visibility='default' filepath='include/net/act_api.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kind' type-id='ac1fa8c0' visibility='default' filepath='include/net/act_api.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='618a2054' visibility='default' filepath='include/net/act_api.h' line='87' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='size' type-id='b59d7dce' visibility='default' filepath='include/net/act_api.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/net/act_api.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='act' type-id='8e7e5b0b' visibility='default' filepath='include/net/act_api.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dump' type-id='14aa811d' visibility='default' filepath='include/net/act_api.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='cleanup' type-id='3107ecae' visibility='default' filepath='include/net/act_api.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='lookup' type-id='adec6207' visibility='default' filepath='include/net/act_api.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='31425e3a' visibility='default' filepath='include/net/act_api.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='walk' type-id='8a8c0471' visibility='default' filepath='include/net/act_api.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stats_update' type-id='4e77e8d6' visibility='default' filepath='include/net/act_api.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='get_fill_size' type-id='342e75b6' visibility='default' filepath='include/net/act_api.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='get_dev' type-id='a3b5aa5f' visibility='default' filepath='include/net/act_api.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='get_psample_group' type-id='8421b09d' visibility='default' filepath='include/net/act_api.h' line='108' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='tca_id' filepath='include/uapi/linux/pkt_cls.h' line='88' column='1' id='618a2054'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='TCA_ID_UNSPEC' value='0'/>
+        <enumerator name='TCA_ID_POLICE' value='1'/>
+        <enumerator name='TCA_ID_GACT' value='5'/>
+        <enumerator name='TCA_ID_IPT' value='6'/>
+        <enumerator name='TCA_ID_PEDIT' value='7'/>
+        <enumerator name='TCA_ID_MIRRED' value='8'/>
+        <enumerator name='TCA_ID_NAT' value='9'/>
+        <enumerator name='TCA_ID_XT' value='10'/>
+        <enumerator name='TCA_ID_SKBEDIT' value='11'/>
+        <enumerator name='TCA_ID_VLAN' value='12'/>
+        <enumerator name='TCA_ID_BPF' value='13'/>
+        <enumerator name='TCA_ID_CONNMARK' value='14'/>
+        <enumerator name='TCA_ID_SKBMOD' value='15'/>
+        <enumerator name='TCA_ID_CSUM' value='16'/>
+        <enumerator name='TCA_ID_TUNNEL_KEY' value='17'/>
+        <enumerator name='TCA_ID_SIMP' value='22'/>
+        <enumerator name='TCA_ID_IFE' value='25'/>
+        <enumerator name='TCA_ID_SAMPLE' value='26'/>
+        <enumerator name='TCA_ID_CTINFO' value='27'/>
+        <enumerator name='TCA_ID_MPLS' value='28'/>
+        <enumerator name='TCA_ID_CT' value='29'/>
+        <enumerator name='__TCA_ID_MAX' value='255'/>
+      </enum-decl>
+      <typedef-decl name='tc_action_priv_destructor' type-id='b7f9d8e6' filepath='include/net/act_api.h' line='82' column='1' id='a2874d8a'/>
+      <class-decl name='psample_group' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/psample.h' line='8' column='1' id='b845c891'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/psample.h' line='9' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/psample.h' line='10' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='group_num' type-id='19c2251e' visibility='default' filepath='include/net/psample.h' line='11' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='refcount' type-id='19c2251e' visibility='default' filepath='include/net/psample.h' line='12' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='seq' type-id='19c2251e' visibility='default' filepath='include/net/psample.h' line='13' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/psample.h' line='14' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_idrinfo' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/act_api.h' line='15' column='1' id='8182ca8c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/net/act_api.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='action_idr' type-id='37ce495e' visibility='default' filepath='include/net/act_api.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/net/act_api.h' line='18' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tcf_t' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='135' column='1' id='195c8601'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='install' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='lastuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='expires' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='firstuse' type-id='d3130597' visibility='default' filepath='include/uapi/linux/pkt_cls.h' line='139' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='tc_cookie' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/pkt_cls.h' line='683' column='1' id='8eedee6f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data' type-id='8bff8096' visibility='default' filepath='include/net/pkt_cls.h' line='684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/net/pkt_cls.h' line='685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rcu' type-id='e3d8ce29' visibility='default' filepath='include/net/pkt_cls.h' line='686' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8e5ae04f' const='yes' id='7f2104b8'/>
+      <pointer-type-def type-id='7f2104b8' size-in-bits='64' id='b2fa31d6'/>
+      <qualified-type-def type-id='6e5d2bdc' const='yes' id='7e5d36fb'/>
+      <pointer-type-def type-id='7e5d36fb' size-in-bits='64' id='bdbd4b03'/>
+      <pointer-type-def type-id='218d3568' size-in-bits='64' id='31425e3a'/>
+      <pointer-type-def type-id='2ed857dd' size-in-bits='64' id='8a8c0471'/>
+      <pointer-type-def type-id='1302297b' size-in-bits='64' id='adec6207'/>
+      <pointer-type-def type-id='7be84b87' size-in-bits='64' id='8e7e5b0b'/>
+      <pointer-type-def type-id='b2ea0ff9' size-in-bits='64' id='14aa811d'/>
+      <pointer-type-def type-id='eb99238b' size-in-bits='64' id='a3b5aa5f'/>
+      <pointer-type-def type-id='b845c891' size-in-bits='64' id='c9042c89'/>
+      <pointer-type-def type-id='f51d2b61' size-in-bits='64' id='8421b09d'/>
+      <pointer-type-def type-id='7c0b9fdb' size-in-bits='64' id='b325c82b'/>
+      <pointer-type-def type-id='8e5ae04f' size-in-bits='64' id='3f646ae7'/>
+      <pointer-type-def type-id='3f646ae7' size-in-bits='64' id='981420b7'/>
+      <pointer-type-def type-id='a2874d8a' size-in-bits='64' id='a53db4f5'/>
+      <pointer-type-def type-id='8eedee6f' size-in-bits='64' id='6fcb14d7'/>
+      <pointer-type-def type-id='6e2b0753' size-in-bits='64' id='6c257353'/>
+      <pointer-type-def type-id='8182ca8c' size-in-bits='64' id='5eeecdaa'/>
+      <pointer-type-def type-id='bd4e4ac8' size-in-bits='64' id='84c1f5fe'/>
+      <pointer-type-def type-id='ead01d34' size-in-bits='64' id='342e75b6'/>
+      <pointer-type-def type-id='082d8e2c' size-in-bits='64' id='3107ecae'/>
+      <pointer-type-def type-id='9b4ee41c' size-in-bits='64' id='4e77e8d6'/>
+      <function-decl name='unregister_tcf_proto_ops' mangled-name='unregister_tcf_proto_ops' filepath='net/sched/cls_api.c' line='179' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_tcf_proto_ops'>
+        <parameter type-id='84c1f5fe' name='ops' filepath='net/sched/cls_api.c' line='179' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_queue_work' mangled-name='tcf_queue_work' filepath='net/sched/cls_api.c' line='203' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_queue_work'>
+        <parameter type-id='b325c82b' name='rwork' filepath='net/sched/cls_api.c' line='203' column='1'/>
+        <parameter type-id='72666d3f' name='func' filepath='net/sched/cls_api.c' line='203' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='tcf_exts_validate' mangled-name='tcf_exts_validate' filepath='net/sched/cls_api.c' line='3009' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_validate'>
+        <parameter type-id='a2bff676' name='net' filepath='net/sched/cls_api.c' line='3009' column='1'/>
+        <parameter type-id='6dca061b' name='tp' filepath='net/sched/cls_api.c' line='3009' column='1'/>
+        <parameter type-id='30864cdc' name='tb' filepath='net/sched/cls_api.c' line='3009' column='1'/>
+        <parameter type-id='6fcaf91e' name='rate_tlv' filepath='net/sched/cls_api.c' line='3010' column='1'/>
+        <parameter type-id='6c257353' name='exts' filepath='net/sched/cls_api.c' line='3010' column='1'/>
+        <parameter type-id='b50a4934' name='ovr' filepath='net/sched/cls_api.c' line='3010' column='1'/>
+        <parameter type-id='b50a4934' name='rtnl_held' filepath='net/sched/cls_api.c' line='3011' column='1'/>
+        <parameter type-id='5799dc94' name='extack' filepath='net/sched/cls_api.c' line='3011' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_dump_stats' mangled-name='tcf_exts_dump_stats' filepath='net/sched/cls_api.c' line='3116' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_dump_stats'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/sched/cls_api.c' line='3116' column='1'/>
+        <parameter type-id='6c257353' name='exts' filepath='net/sched/cls_api.c' line='3116' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_dump' mangled-name='tcf_exts_dump' filepath='net/sched/cls_api.c' line='3075' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_dump'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/sched/cls_api.c' line='3075' column='1'/>
+        <parameter type-id='6c257353' name='exts' filepath='net/sched/cls_api.c' line='3075' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='tcf_exts_destroy' mangled-name='tcf_exts_destroy' filepath='net/sched/cls_api.c' line='2997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='tcf_exts_destroy'>
+        <parameter type-id='6c257353' name='exts' filepath='net/sched/cls_api.c' line='2997' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_tcf_proto_ops' mangled-name='register_tcf_proto_ops' filepath='net/sched/cls_api.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_tcf_proto_ops'>
+        <parameter type-id='84c1f5fe' name='ops' filepath='net/sched/cls_api.c' line='159' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='218d3568'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='6fcaf91e'/>
+        <parameter type-id='981420b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='6dca061b'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2ed857dd'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='07b9ee34'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='bdbd4b03'/>
+        <parameter type-id='5799dc94'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1302297b'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='981420b7'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7be84b87'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='e638cd0c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2ea0ff9'>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='3f646ae7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb99238b'>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='a53db4f5'/>
+        <return type-id='68a2d05b'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f51d2b61'>
+        <parameter type-id='b2fa31d6'/>
+        <parameter type-id='a53db4f5'/>
+        <return type-id='c9042c89'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ead01d34'>
+        <parameter type-id='b2fa31d6'/>
+        <return type-id='b59d7dce'/>
+      </function-type>
+      <function-type size-in-bits='64' id='082d8e2c'>
+        <parameter type-id='3f646ae7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9b4ee41c'>
+        <parameter type-id='3f646ae7'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='91ce1af9'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr 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='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_on'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/sched/sch_generic.c' line='518' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='qdisc_reset' mangled-name='qdisc_reset' filepath='net/sched/sch_generic.c' line='954' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='qdisc_reset'>
+        <parameter type-id='ee406209' name='qdisc' filepath='net/sched/sch_generic.c' line='954' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='netif_carrier_off' mangled-name='netif_carrier_off' filepath='net/sched/sch_generic.c' line='537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='netif_carrier_off'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/sched/sch_generic.c' line='537' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/socket.c' language='LANG_C89'>
+      <class-decl name='libipw_device' is-struct='yes' visibility='default' is-declaration-only='yes' id='9c91a761'/>
+      <array-type-def dimensions='1' type-id='aa80c027' size-in-bits='256' id='c73a16a3'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7a1bc3c2' size-in-bits='infinite' id='84607bca'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b151a3a8' size-in-bits='64' id='4a744ea1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='b151a3a8' size-in-bits='384' id='2d507faf'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='net_proto_family' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='217' column='1' id='89303496'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='95e97e5e' visibility='default' filepath='include/linux/net.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='create' type-id='d128cc8f' visibility='default' filepath='include/linux/net.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/linux/net.h' line='221' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='iw_handler' type-id='2c8ff697' filepath='include/net/iw_handler.h' line='315' column='1' id='bcc5cab3'/>
+      <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='e90b3b44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='d315442e' 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='d315442e' 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='902' column='1' id='ed626d0d'>
+        <data-member access='public'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='essid' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='nwid' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='909' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='freq' type-id='bc1ac22c' visibility='default' filepath='include/uapi/linux/wireless.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sens' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bitrate' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='txpower' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='rts' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='frag' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='retry' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='encoding' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='power' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='qual' type-id='aa80c027' visibility='default' filepath='include/uapi/linux/wireless.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ap_addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/wireless.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='addr' type-id='5221b18a' visibility='default' filepath='include/uapi/linux/wireless.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='param' type-id='b024252b' visibility='default' filepath='include/uapi/linux/wireless.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data' type-id='db4e746c' visibility='default' filepath='include/uapi/linux/wireless.h' line='930' 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='691' column='1' id='db4e746c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pointer' type-id='eaa32e2f' visibility='default' filepath='include/uapi/linux/wireless.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='length' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='694' 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='680' column='1' id='b024252b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='value' type-id='3158a266' visibility='default' filepath='include/uapi/linux/wireless.h' line='681' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fixed' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='682' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='disabled' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='flags' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='684' 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='706' column='1' id='bc1ac22c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='m' type-id='3158a266' visibility='default' filepath='include/uapi/linux/wireless.h' line='707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='e' type-id='b55def60' visibility='default' filepath='include/uapi/linux/wireless.h' line='708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='i' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='flags' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='710' 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='716' column='1' id='aa80c027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='qual' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='level' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='noise' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='720' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='updated' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/wireless.h' line='721' 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='1063' column='1' id='0c842ad9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='1064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1065' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='get_args' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/linux/wireless.h' line='1067' 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='881' column='1' id='1c8cc2fd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='d315442e' visibility='default' filepath='include/uapi/linux/wireless.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='qual' type-id='aa80c027' visibility='default' filepath='include/uapi/linux/wireless.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='discard' type-id='832938ed' visibility='default' filepath='include/uapi/linux/wireless.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='miss' type-id='6a2a3473' visibility='default' filepath='include/uapi/linux/wireless.h' line='888' 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='731' column='1' id='832938ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='nwid' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='code' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fragment' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='retries' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='misc' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='736' 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='743' column='1' id='6a2a3473'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='beacon' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/wireless.h' line='744' 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='f8292115'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='spy_number' type-id='95e97e5e' 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='2d507faf' 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='c73a16a3' 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='aa80c027' 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='aa80c027' 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='4a744ea1' visibility='default' filepath='include/net/iw_handler.h' line='404' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_char' type-id='002ac4a6' filepath='include/linux/types.h' line='84' column='1' id='b151a3a8'/>
+      <class-decl name='nf_hook_entry' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='91' column='1' id='7a1bc3c2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='c8f8b049' visibility='default' filepath='include/linux/netfilter.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/linux/netfilter.h' line='93' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='nf_hookfn' type-id='272e7e29' filepath='include/linux/netfilter.h' line='77' column='1' id='0331c4d6'/>
+      <class-decl name='nf_hook_state' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/netfilter.h' line='67' column='1' id='89d4ce3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hook' type-id='f0981eeb' visibility='default' filepath='include/linux/netfilter.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pf' type-id='892641a4' visibility='default' filepath='include/linux/netfilter.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='in' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='out' type-id='68a2d05b' visibility='default' filepath='include/linux/netfilter.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/netfilter.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='net' type-id='a2bff676' visibility='default' filepath='include/linux/netfilter.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='okfn' type-id='0023218e' visibility='default' filepath='include/linux/netfilter.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='u_int8_t' type-id='f9b06939' filepath='include/linux/types.h' line='98' column='1' id='892641a4'/>
+      <qualified-type-def type-id='bcc5cab3' const='yes' id='208298e3'/>
+      <pointer-type-def type-id='208298e3' size-in-bits='64' id='f696846b'/>
+      <qualified-type-def type-id='0c842ad9' const='yes' id='afa36b70'/>
+      <pointer-type-def type-id='afa36b70' size-in-bits='64' id='d841feae'/>
+      <qualified-type-def type-id='89303496' const='yes' id='7f9fdab3'/>
+      <pointer-type-def type-id='7f9fdab3' size-in-bits='64' id='81a51edb'/>
+      <qualified-type-def type-id='89d4ce3f' const='yes' id='3a8ead28'/>
+      <pointer-type-def type-id='3a8ead28' size-in-bits='64' id='309a5a26'/>
+      <pointer-type-def type-id='c7873973' size-in-bits='64' id='d128cc8f'/>
+      <pointer-type-def type-id='97488913' size-in-bits='64' id='2c8ff697'/>
+      <pointer-type-def type-id='e90b3b44' size-in-bits='64' id='4780e252'/>
+      <pointer-type-def type-id='f8292115' size-in-bits='64' id='96efb615'/>
+      <pointer-type-def type-id='1c8cc2fd' size-in-bits='64' id='003642fd'/>
+      <pointer-type-def type-id='cfdbff8a' size-in-bits='64' id='55e2a83c'/>
+      <pointer-type-def type-id='ed626d0d' size-in-bits='64' id='00e2a7ce'/>
+      <pointer-type-def type-id='cd5915d8' size-in-bits='64' id='9c68341e'/>
+      <pointer-type-def type-id='9c91a761' size-in-bits='64' id='29244949'/>
+      <pointer-type-def type-id='0331c4d6' size-in-bits='64' id='c8f8b049'/>
+      <pointer-type-def type-id='13103032' size-in-bits='64' id='1a7bb5c8'/>
+      <function-decl name='sock_unregister' mangled-name='sock_unregister' filepath='net/socket.c' line='2975' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_unregister'>
+        <parameter type-id='95e97e5e' name='family' filepath='net/socket.c' line='2975' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_register' mangled-name='sock_register' filepath='net/socket.c' line='2938' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_register'>
+        <parameter type-id='81a51edb' name='ops' filepath='net/socket.c' line='2938' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='sock_release' mangled-name='sock_release' filepath='net/socket.c' line='609' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_release'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='609' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='sock_create_kern' mangled-name='sock_create_kern' filepath='net/socket.c' line='1475' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='sock_create_kern'>
+        <parameter type-id='a2bff676' name='net' filepath='net/socket.c' line='1475' column='1'/>
+        <parameter type-id='95e97e5e' name='family' filepath='net/socket.c' line='1475' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='net/socket.c' line='1475' column='1'/>
+        <parameter type-id='95e97e5e' name='protocol' filepath='net/socket.c' line='1475' column='1'/>
+        <parameter type-id='1a7bb5c8' name='res' filepath='net/socket.c' line='1475' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_sendmsg' mangled-name='kernel_sendmsg' filepath='net/socket.c' line='674' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_sendmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='674' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='674' column='1'/>
+        <parameter type-id='9c68341e' name='vec' filepath='net/socket.c' line='675' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='net/socket.c' line='675' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/socket.c' line='675' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_recvmsg' mangled-name='kernel_recvmsg' filepath='net/socket.c' line='910' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_recvmsg'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='910' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='910' column='1'/>
+        <parameter type-id='9c68341e' name='vec' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='b59d7dce' name='num' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='net/socket.c' line='911' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/socket.c' line='911' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_getsockname' mangled-name='kernel_getsockname' filepath='net/socket.c' line='3654' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_getsockname'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='3654' column='1'/>
+        <parameter type-id='5c0abad8' name='addr' filepath='net/socket.c' line='3654' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='kernel_connect' mangled-name='kernel_connect' filepath='net/socket.c' line='3638' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='kernel_connect'>
+        <parameter type-id='13103032' name='sock' filepath='net/socket.c' line='3638' column='1'/>
+        <parameter type-id='5c0abad8' name='addr' filepath='net/socket.c' line='3638' column='1'/>
+        <parameter type-id='95e97e5e' name='addrlen' filepath='net/socket.c' line='3638' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/socket.c' line='3639' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='__sock_tx_timestamp' mangled-name='__sock_tx_timestamp' filepath='net/socket.c' line='615' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_tx_timestamp'>
+        <parameter type-id='d315442e' name='tsflags' filepath='net/socket.c' line='615' column='1'/>
+        <parameter type-id='474e5dcc' name='tx_flags' filepath='net/socket.c' line='615' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__sock_recv_ts_and_drops' mangled-name='__sock_recv_ts_and_drops' filepath='net/socket.c' line='857' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__sock_recv_ts_and_drops'>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/socket.c' line='857' column='1'/>
+        <parameter type-id='f772df6d' name='sk' filepath='net/socket.c' line='857' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/socket.c' line='858' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='c7873973'>
+        <parameter type-id='a2bff676'/>
+        <parameter type-id='13103032'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97488913'>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='4780e252'/>
+        <parameter type-id='00e2a7ce'/>
+        <parameter type-id='26a90f95'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cfdbff8a'>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='003642fd'/>
+      </function-type>
+      <function-type size-in-bits='64' id='272e7e29'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='309a5a26'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/sysctl_net.c' language='LANG_C89'>
+      <function-decl name='register_net_sysctl' mangled-name='register_net_sysctl' filepath='net/sysctl_net.c' line='118' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_net_sysctl'>
+        <parameter type-id='a2bff676' name='net' filepath='net/sysctl_net.c' line='118' column='1'/>
+        <parameter type-id='80f4b756' name='path' filepath='net/sysctl_net.c' line='119' column='1'/>
+        <parameter type-id='631dc3c1' name='table' filepath='net/sysctl_net.c' line='119' column='1'/>
+        <return type-id='11b101bb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/vmw_vsock/af_vsock.c' language='LANG_C89'>
+      <class-decl name='vsock_transport' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='102' column='1' id='7a801157'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/net/af_vsock.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='init' type-id='3c29ea97' visibility='default' filepath='include/net/af_vsock.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='destruct' type-id='ef2258e1' visibility='default' filepath='include/net/af_vsock.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='release' type-id='ef2258e1' visibility='default' filepath='include/net/af_vsock.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='cancel_pkt' type-id='19880752' visibility='default' filepath='include/net/af_vsock.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='connect' type-id='19880752' visibility='default' filepath='include/net/af_vsock.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dgram_bind' type-id='99dd37d7' visibility='default' filepath='include/net/af_vsock.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dgram_dequeue' type-id='842e09cd' visibility='default' filepath='include/net/af_vsock.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dgram_enqueue' type-id='353a4421' visibility='default' filepath='include/net/af_vsock.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dgram_allow' type-id='a8a77b69' visibility='default' filepath='include/net/af_vsock.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='stream_dequeue' type-id='99dd2b5e' visibility='default' filepath='include/net/af_vsock.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='stream_enqueue' type-id='42dad747' visibility='default' filepath='include/net/af_vsock.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream_has_data' type-id='1db22091' visibility='default' filepath='include/net/af_vsock.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stream_has_space' type-id='1db22091' visibility='default' filepath='include/net/af_vsock.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='stream_rcvhiwat' type-id='84a80557' visibility='default' filepath='include/net/af_vsock.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='stream_is_active' type-id='e4dceff4' visibility='default' filepath='include/net/af_vsock.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='stream_allow' type-id='a8a77b69' visibility='default' filepath='include/net/af_vsock.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='notify_poll_in' type-id='7b5a288b' visibility='default' filepath='include/net/af_vsock.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='notify_poll_out' type-id='7b5a288b' visibility='default' filepath='include/net/af_vsock.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='notify_recv_init' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='notify_recv_pre_block' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='notify_recv_pre_dequeue' type-id='bebbea3f' visibility='default' filepath='include/net/af_vsock.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='notify_recv_post_dequeue' type-id='2ba71990' visibility='default' filepath='include/net/af_vsock.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='notify_send_init' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='notify_send_pre_block' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='notify_send_pre_enqueue' type-id='bfa7bda0' visibility='default' filepath='include/net/af_vsock.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='notify_send_post_enqueue' type-id='61ae4386' visibility='default' filepath='include/net/af_vsock.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='notify_buffer_size' type-id='1ee1b664' visibility='default' filepath='include/net/af_vsock.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='shutdown' type-id='f4617859' visibility='default' filepath='include/net/af_vsock.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='get_local_cid' type-id='d91eb3a5' visibility='default' filepath='include/net/af_vsock.h' line='162' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_sock' size-in-bits='11520' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='27' column='1' id='f0c6a3fa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sk' type-id='a240f41d' visibility='default' filepath='include/net/af_vsock.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='transport' type-id='c6c5bd96' visibility='default' filepath='include/net/af_vsock.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='local_addr' type-id='d15eade2' visibility='default' filepath='include/net/af_vsock.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='remote_addr' type-id='d15eade2' visibility='default' filepath='include/net/af_vsock.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='bound_table' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='connected_table' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7296'>
+          <var-decl name='trusted' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7304'>
+          <var-decl name='cached_peer_allow_dgram' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7328'>
+          <var-decl name='cached_peer' type-id='19c2251e' visibility='default' filepath='include/net/af_vsock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7360'>
+          <var-decl name='owner' type-id='bc33861a' visibility='default' filepath='include/net/af_vsock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7424'>
+          <var-decl name='connect_timeout' type-id='bd54fe1a' visibility='default' filepath='include/net/af_vsock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7488'>
+          <var-decl name='listener' type-id='f772df6d' visibility='default' filepath='include/net/af_vsock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='pending_links' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='accept_queue' type-id='72f469ec' visibility='default' filepath='include/net/af_vsock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='rejected' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7872'>
+          <var-decl name='connect_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8960'>
+          <var-decl name='pending_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='close_work' type-id='5ad6e0ef' visibility='default' filepath='include/net/af_vsock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11136'>
+          <var-decl name='close_work_scheduled' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11168'>
+          <var-decl name='peer_shutdown' type-id='19c2251e' visibility='default' filepath='include/net/af_vsock.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11200'>
+          <var-decl name='sent_request' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11208'>
+          <var-decl name='ignore_connecting_rst' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='buffer_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11328'>
+          <var-decl name='buffer_min_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='buffer_max_size' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='trans' type-id='eaa32e2f' visibility='default' filepath='include/net/af_vsock.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sockaddr_vm' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='144' column='1' id='d15eade2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='svm_family' type-id='93d679c6' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='svm_reserved1' type-id='8efea9e5' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='svm_port' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='svm_cid' type-id='f0981eeb' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='svm_zero' type-id='09001d3c' visibility='default' filepath='include/uapi/linux/vm_sockets.h' line='149' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_transport_recv_notify_data' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='83' column='1' id='5e9a41e1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data1' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data2' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='notify_on_block' type-id='b50a4934' visibility='default' filepath='include/net/af_vsock.h' line='86' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='vsock_transport_send_notify_data' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/af_vsock.h' line='89' column='1' id='19810f43'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='data1' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data2' type-id='91ce1af9' visibility='default' filepath='include/net/af_vsock.h' line='91' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='7a801157' const='yes' id='757da1f8'/>
+      <pointer-type-def type-id='757da1f8' size-in-bits='64' id='c6c5bd96'/>
+      <pointer-type-def type-id='24e53f78' size-in-bits='64' id='19880752'/>
+      <pointer-type-def type-id='17dad7c5' size-in-bits='64' id='f4617859'/>
+      <pointer-type-def type-id='b8e69071' size-in-bits='64' id='842e09cd'/>
+      <pointer-type-def type-id='f58c1a1b' size-in-bits='64' id='99dd37d7'/>
+      <pointer-type-def type-id='dc8bbdd5' size-in-bits='64' id='353a4421'/>
+      <pointer-type-def type-id='ebf8e47f' size-in-bits='64' id='7b5a288b'/>
+      <pointer-type-def type-id='0b5c3086' size-in-bits='64' id='2ba71990'/>
+      <pointer-type-def type-id='4c1698f3' size-in-bits='64' id='bebbea3f'/>
+      <pointer-type-def type-id='4aa6929c' size-in-bits='64' id='61ae4386'/>
+      <pointer-type-def type-id='01bd77f3' size-in-bits='64' id='3c29ea97'/>
+      <pointer-type-def type-id='aecc739e' size-in-bits='64' id='bfa7bda0'/>
+      <pointer-type-def type-id='d15eade2' size-in-bits='64' id='b6a6ca60'/>
+      <pointer-type-def type-id='d865022d' size-in-bits='64' id='a8a77b69'/>
+      <pointer-type-def type-id='6acd3f8a' size-in-bits='64' id='e4dceff4'/>
+      <pointer-type-def type-id='841ff6b5' size-in-bits='64' id='1db22091'/>
+      <pointer-type-def type-id='8e71aea3' size-in-bits='64' id='42dad747'/>
+      <pointer-type-def type-id='de28612c' size-in-bits='64' id='99dd2b5e'/>
+      <pointer-type-def type-id='c6c057c3' size-in-bits='64' id='84a80557'/>
+      <pointer-type-def type-id='418a6dbd' size-in-bits='64' id='ef2258e1'/>
+      <pointer-type-def type-id='8e3bf7d2' size-in-bits='64' id='1ee1b664'/>
+      <pointer-type-def type-id='f0c6a3fa' size-in-bits='64' id='ecb0ce18'/>
+      <pointer-type-def type-id='5e9a41e1' size-in-bits='64' id='c777e389'/>
+      <pointer-type-def type-id='19810f43' size-in-bits='64' id='6f074813'/>
+      <function-decl name='vsock_core_unregister' mangled-name='vsock_core_unregister' filepath='net/vmw_vsock/af_vsock.c' line='2196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_core_unregister'>
+        <parameter type-id='c6c5bd96' name='t' filepath='net/vmw_vsock/af_vsock.c' line='2196' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vsock_for_each_connected_socket' mangled-name='vsock_for_each_connected_socket' filepath='net/vmw_vsock/af_vsock.c' line='334' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_for_each_connected_socket'>
+        <parameter type-id='841969d0' name='fn' filepath='net/vmw_vsock/af_vsock.c' line='334' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='vsock_core_register' mangled-name='vsock_core_register' filepath='net/vmw_vsock/af_vsock.c' line='2150' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='vsock_core_register'>
+        <parameter type-id='c6c5bd96' name='t' filepath='net/vmw_vsock/af_vsock.c' line='2150' column='1'/>
+        <parameter type-id='95e97e5e' name='features' filepath='net/vmw_vsock/af_vsock.c' line='2150' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='24e53f78'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17dad7c5'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b8e69071'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f58c1a1b'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b6a6ca60'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dc8bbdd5'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b6a6ca60'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebf8e47f'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='d8e6b335'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b5c3086'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='c777e389'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c1698f3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='c777e389'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4aa6929c'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='79a0948f'/>
+        <parameter type-id='6f074813'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='01bd77f3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aecc739e'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6f074813'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d865022d'>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6acd3f8a'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='841ff6b5'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='9b7c55ef'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e71aea3'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='de28612c'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='6b9b777a'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c6c057c3'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='91ce1af9'/>
+      </function-type>
+      <function-type size-in-bits='64' id='418a6dbd'>
+        <parameter type-id='ecb0ce18'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8e3bf7d2'>
+        <parameter type-id='ecb0ce18'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='32' id='09001d3c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/vmw_vsock/virtio_transport_common.c' language='LANG_C89'>
+      <class-decl name='virtio_transport' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/linux/virtio_vsock.h' line='65' column='1' id='22bb2e78'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='transport' type-id='7a801157' visibility='default' filepath='include/linux/virtio_vsock.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='send_pkt' type-id='8c4ea251' visibility='default' filepath='include/linux/virtio_vsock.h' line='70' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_vsock_pkt' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/linux/virtio_vsock.h' line='42' column='1' id='5ebf3387'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hdr' type-id='c96be70a' visibility='default' filepath='include/linux/virtio_vsock.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/linux/virtio_vsock.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='vsk' type-id='ecb0ce18' visibility='default' filepath='include/linux/virtio_vsock.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='buf' type-id='eaa32e2f' visibility='default' filepath='include/linux/virtio_vsock.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buf_len' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='len' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off' type-id='19c2251e' visibility='default' filepath='include/linux/virtio_vsock.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='reply' type-id='b50a4934' visibility='default' filepath='include/linux/virtio_vsock.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='virtio_vsock_hdr' size-in-bits='352' is-struct='yes' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='53' column='1' id='c96be70a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='src_cid' type-id='a30e8d1f' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dst_cid' type-id='a30e8d1f' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_port' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='23119536' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='op' type-id='23119536' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='buf_alloc' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fwd_cnt' type-id='2f162548' visibility='default' filepath='include/uapi/linux/virtio_vsock.h' line='63' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='45af6e9d' size-in-bits='64' id='8c4ea251'/>
+      <pointer-type-def type-id='22bb2e78' size-in-bits='64' id='2bfa174e'/>
+      <pointer-type-def type-id='5ebf3387' size-in-bits='64' id='ac22ee2f'/>
+      <function-decl name='virtio_transport_recv_pkt' mangled-name='virtio_transport_recv_pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='1046' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_recv_pkt'>
+        <parameter type-id='2bfa174e' name='t' filepath='net/vmw_vsock/virtio_transport_common.c' line='1046' column='1'/>
+        <parameter type-id='ac22ee2f' name='pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='1047' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_rcvhiwat' mangled-name='virtio_transport_stream_rcvhiwat' filepath='net/vmw_vsock/virtio_transport_common.c' line='546' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_rcvhiwat'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='546' column='1'/>
+        <return type-id='91ce1af9'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_is_active' mangled-name='virtio_transport_stream_is_active' filepath='net/vmw_vsock/virtio_transport_common.c' line='552' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_is_active'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='552' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_has_space' mangled-name='virtio_transport_stream_has_space' filepath='net/vmw_vsock/virtio_transport_common.c' line='400' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_has_space'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='400' column='1'/>
+        <return type-id='9b7c55ef'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_has_data' mangled-name='virtio_transport_stream_has_data' filepath='net/vmw_vsock/virtio_transport_common.c' line='375' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_has_data'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='375' column='1'/>
+        <return type-id='9b7c55ef'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_enqueue' mangled-name='virtio_transport_stream_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='616' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='616' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='617' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='618' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_dequeue' mangled-name='virtio_transport_stream_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='355' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='356' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='357' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/vmw_vsock/virtio_transport_common.c' line='357' column='1'/>
+        <return type-id='79a0948f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_stream_allow' mangled-name='virtio_transport_stream_allow' filepath='net/vmw_vsock/virtio_transport_common.c' line='558' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_stream_allow'>
+        <parameter type-id='19c2251e' name='cid' filepath='net/vmw_vsock/virtio_transport_common.c' line='558' column='1'/>
+        <parameter type-id='19c2251e' name='port' filepath='net/vmw_vsock/virtio_transport_common.c' line='558' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_shutdown' mangled-name='virtio_transport_shutdown' filepath='net/vmw_vsock/virtio_transport_common.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_shutdown'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='589' column='1'/>
+        <parameter type-id='95e97e5e' name='mode' filepath='net/vmw_vsock/virtio_transport_common.c' line='589' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_release' mangled-name='virtio_transport_release' filepath='net/vmw_vsock/virtio_transport_common.c' line='783' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_release'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='783' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_pre_enqueue' mangled-name='virtio_transport_notify_send_pre_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='532' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_pre_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='532' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='533' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_pre_block' mangled-name='virtio_transport_notify_send_pre_block' filepath='net/vmw_vsock/virtio_transport_common.c' line='525' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_pre_block'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='525' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='526' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_post_enqueue' mangled-name='virtio_transport_notify_send_post_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='539' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_post_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='539' column='1'/>
+        <parameter type-id='79a0948f' name='written' filepath='net/vmw_vsock/virtio_transport_common.c' line='540' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='540' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_send_init' mangled-name='virtio_transport_notify_send_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='518' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_send_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='518' column='1'/>
+        <parameter type-id='6f074813' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='519' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_pre_dequeue' mangled-name='virtio_transport_notify_recv_pre_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='503' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_pre_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='503' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='504' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='504' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_pre_block' mangled-name='virtio_transport_notify_recv_pre_block' filepath='net/vmw_vsock/virtio_transport_common.c' line='496' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_pre_block'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='496' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='497' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='497' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_post_dequeue' mangled-name='virtio_transport_notify_recv_post_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_post_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='510' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='511' column='1'/>
+        <parameter type-id='79a0948f' name='copied' filepath='net/vmw_vsock/virtio_transport_common.c' line='511' column='1'/>
+        <parameter type-id='b50a4934' name='data_read' filepath='net/vmw_vsock/virtio_transport_common.c' line='511' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='512' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_recv_init' mangled-name='virtio_transport_notify_recv_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='489' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_recv_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='489' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='490' column='1'/>
+        <parameter type-id='c777e389' name='data' filepath='net/vmw_vsock/virtio_transport_common.c' line='490' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_poll_out' mangled-name='virtio_transport_notify_poll_out' filepath='net/vmw_vsock/virtio_transport_common.c' line='473' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_poll_out'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='473' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='474' column='1'/>
+        <parameter type-id='d8e6b335' name='space_avail_now' filepath='net/vmw_vsock/virtio_transport_common.c' line='475' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_poll_in' mangled-name='virtio_transport_notify_poll_in' filepath='net/vmw_vsock/virtio_transport_common.c' line='459' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_poll_in'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='459' column='1'/>
+        <parameter type-id='b59d7dce' name='target' filepath='net/vmw_vsock/virtio_transport_common.c' line='460' column='1'/>
+        <parameter type-id='d8e6b335' name='data_ready_now' filepath='net/vmw_vsock/virtio_transport_common.c' line='461' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_notify_buffer_size' mangled-name='virtio_transport_notify_buffer_size' filepath='net/vmw_vsock/virtio_transport_common.c' line='444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_notify_buffer_size'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='444' column='1'/>
+        <parameter type-id='3df9fd28' name='val' filepath='net/vmw_vsock/virtio_transport_common.c' line='444' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_free_pkt' mangled-name='virtio_transport_free_pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='1132' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_free_pkt'>
+        <parameter type-id='ac22ee2f' name='pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_do_socket_init' mangled-name='virtio_transport_do_socket_init' filepath='net/vmw_vsock/virtio_transport_common.c' line='413' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_do_socket_init'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='413' column='1'/>
+        <parameter type-id='ecb0ce18' name='psk' filepath='net/vmw_vsock/virtio_transport_common.c' line='414' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_enqueue' mangled-name='virtio_transport_dgram_enqueue' filepath='net/vmw_vsock/virtio_transport_common.c' line='606' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_enqueue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='606' column='1'/>
+        <parameter type-id='b6a6ca60' name='remote_addr' filepath='net/vmw_vsock/virtio_transport_common.c' line='607' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='608' column='1'/>
+        <parameter type-id='b59d7dce' name='dgram_len' filepath='net/vmw_vsock/virtio_transport_common.c' line='609' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_dequeue' mangled-name='virtio_transport_dgram_dequeue' filepath='net/vmw_vsock/virtio_transport_common.c' line='367' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_dequeue'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='367' column='1'/>
+        <parameter type-id='6b9b777a' name='msg' filepath='net/vmw_vsock/virtio_transport_common.c' line='368' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/vmw_vsock/virtio_transport_common.c' line='369' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/vmw_vsock/virtio_transport_common.c' line='369' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_bind' mangled-name='virtio_transport_dgram_bind' filepath='net/vmw_vsock/virtio_transport_common.c' line='564' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_bind'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='564' column='1'/>
+        <parameter type-id='b6a6ca60' name='addr' filepath='net/vmw_vsock/virtio_transport_common.c' line='565' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='virtio_transport_dgram_allow' mangled-name='virtio_transport_dgram_allow' filepath='net/vmw_vsock/virtio_transport_common.c' line='571' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_dgram_allow'>
+        <parameter type-id='19c2251e' name='cid' filepath='net/vmw_vsock/virtio_transport_common.c' line='571' column='1'/>
+        <parameter type-id='19c2251e' name='port' filepath='net/vmw_vsock/virtio_transport_common.c' line='571' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='virtio_transport_destruct' mangled-name='virtio_transport_destruct' filepath='net/vmw_vsock/virtio_transport_common.c' line='632' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_destruct'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='632' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_deliver_tap_pkt' mangled-name='virtio_transport_deliver_tap_pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_deliver_tap_pkt'>
+        <parameter type-id='ac22ee2f' name='pkt' filepath='net/vmw_vsock/virtio_transport_common.c' line='165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='virtio_transport_connect' mangled-name='virtio_transport_connect' filepath='net/vmw_vsock/virtio_transport_common.c' line='577' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='virtio_transport_connect'>
+        <parameter type-id='ecb0ce18' name='vsk' filepath='net/vmw_vsock/virtio_transport_common.c' line='577' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='45af6e9d'>
+        <parameter type-id='ac22ee2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/chan.c' language='LANG_C89'>
+      <enum-decl name='nl80211_channel_type' filepath='include/uapi/linux/nl80211.h' line='4240' column='1' id='9e446de7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CHAN_NO_HT' value='0'/>
+        <enumerator name='NL80211_CHAN_HT20' value='1'/>
+        <enumerator name='NL80211_CHAN_HT40MINUS' value='2'/>
+        <enumerator name='NL80211_CHAN_HT40PLUS' value='3'/>
+      </enum-decl>
+      <function-decl name='cfg80211_chandef_valid' mangled-name='cfg80211_chandef_valid' filepath='net/wireless/chan.c' line='143' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_chandef_valid'>
+        <parameter type-id='af471177' name='chandef' filepath='net/wireless/chan.c' line='143' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cfg80211_chandef_create' mangled-name='cfg80211_chandef_create' filepath='net/wireless/chan.c' line='22' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_chandef_create'>
+        <parameter type-id='0953fbfe' name='chandef' filepath='net/wireless/chan.c' line='22' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/chan.c' line='23' column='1'/>
+        <parameter type-id='9e446de7' name='chan_type' filepath='net/wireless/chan.c' line='24' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <pointer-type-def type-id='482f2f27' size-in-bits='64' id='af471177'/>
+      <qualified-type-def type-id='e07d69c8' const='yes' id='482f2f27'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='5b11c736' size-in-bits='1152' id='b7cdf389'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c0e72c08' size-in-bits='336' id='113a8bef'>
+        <subrange length='21' type-id='7ff19f0f' id='01cc7eb2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='0f438714' size-in-bits='128' id='62f1ceae'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='167153b5' size-in-bits='infinite' id='42a2e39d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='24' id='4df9d64a'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <class-decl name='cfg80211_conn' size-in-bits='3392' is-struct='yes' visibility='default' filepath='net/wireless/sme.c' line='31' column='1' id='43420c6a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='1291defd' visibility='default' filepath='net/wireless/sme.c' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='state' type-id='08f5ca1a' visibility='default' filepath='net/wireless/sme.c' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3104'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3152'>
+          <var-decl name='prev_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/sme.c' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='net/wireless/sme.c' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='net/wireless/sme.c' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='auto_auth' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3336'>
+          <var-decl name='prev_bssid_valid' type-id='b50a4934' visibility='default' filepath='net/wireless/sme.c' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='ec00acfb' size-in-bits='infinite' id='14cad687'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a9d5f761' size-in-bits='infinite' id='9195bab1'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3cad9e1a' size-in-bits='256' id='641ce2e8'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='86d70780' size-in-bits='256' id='00286dfe'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='45947737' size-in-bits='1024' id='248874df'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6d8d26fb' size-in-bits='infinite' id='a099b86f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='128' id='68c8d0cb'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a7832498' size-in-bits='infinite' id='a4bfb48f'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='fdbf7a0f' size-in-bits='32' id='da004b74'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='80' id='097504df'>
+        <subrange length='10' type-id='7ff19f0f' id='487da03a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='88' id='4d77ae82'>
+        <subrange length='11' type-id='7ff19f0f' id='847bc017'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f9b06939' size-in-bits='200' id='5030b3c3'>
+        <subrange length='25' type-id='7ff19f0f' id='41d5ddce'/>
+      </array-type-def>
+      <array-type-def dimensions='2' type-id='f9b06939' size-in-bits='416' id='b726c152'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+        <subrange length='13' type-id='7ff19f0f' id='487fded1'/>
+      </array-type-def>
+      <class-decl name='wiphy' size-in-bits='11264' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4611' column='1' id='68523a94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='perm_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='4616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='addresses' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='4618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mgmt_stypes' type-id='0cda9080' visibility='default' filepath='include/net/cfg80211.h' line='4620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='iface_combinations' type-id='fa32a449' visibility='default' filepath='include/net/cfg80211.h' line='4622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='n_iface_combinations' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='software_iftypes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4624' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='n_addresses' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='interface_modes' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='max_acl_mac_addrs' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulatory_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='features' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ext_features' type-id='8f1320db' visibility='default' filepath='include/net/cfg80211.h' line='4634' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ap_sme_capa' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='signal_type' type-id='b8524648' visibility='default' filepath='include/net/cfg80211.h' line='4638' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bss_priv_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='max_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='680'>
+          <var-decl name='max_sched_scan_reqs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='max_sched_scan_ssids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4643' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='max_match_sets' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='max_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4645' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='720'>
+          <var-decl name='max_sched_scan_ie_len' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4646' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_sched_scan_plans' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4647' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='max_sched_scan_plan_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4648' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='max_sched_scan_plan_iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='n_cipher_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='cipher_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='akm_suites' type-id='aded214c' visibility='default' filepath='include/net/cfg80211.h' line='4655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='retry_short' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4657' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1096'>
+          <var-decl name='retry_long' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4658' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='frag_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4659' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='rts_threshold' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4660' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='coverage_class' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4661' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1192'>
+          <var-decl name='fw_version' type-id='16dc656a' visibility='default' filepath='include/net/cfg80211.h' line='4663' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='hw_version' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4664' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='wowlan' type-id='78a34b70' visibility='default' filepath='include/net/cfg80211.h' line='4667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='wowlan_config' type-id='9d025b00' visibility='default' filepath='include/net/cfg80211.h' line='4668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='max_remain_on_channel_duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1680'>
+          <var-decl name='max_num_pmkids' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='available_antennas_tx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='available_antennas_rx' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='probe_resp_offload' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4683' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='iftype_ext_capab' type-id='3ca25343' visibility='default' filepath='include/net/cfg80211.h' line='4688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='num_iftype_ext_capab' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='privid' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='4696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='bands' type-id='641ce2e8' visibility='default' filepath='include/net/cfg80211.h' line='4698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='reg_notifier' type-id='39ee8359' visibility='default' filepath='include/net/cfg80211.h' line='4701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='regd' type-id='4e819401' visibility='default' filepath='include/net/cfg80211.h' line='4706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/net/cfg80211.h' line='4710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10048'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='debugfsdir' type-id='27675065' visibility='default' filepath='include/net/cfg80211.h' line='4716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10176'>
+          <var-decl name='ht_capa_mod_mask' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='4718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10240'>
+          <var-decl name='vht_capa_mod_mask' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='4719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10304'>
+          <var-decl name='wdev_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='4721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10432'>
+          <var-decl name='_net' type-id='c9df1e6c' visibility='default' filepath='include/net/cfg80211.h' line='4724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10496'>
+          <var-decl name='coalesce' type-id='9ef499bf' visibility='default' filepath='include/net/cfg80211.h' line='4730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10560'>
+          <var-decl name='vendor_commands' type-id='41e3f782' visibility='default' filepath='include/net/cfg80211.h' line='4732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10624'>
+          <var-decl name='vendor_events' type-id='b188cc4f' visibility='default' filepath='include/net/cfg80211.h' line='4733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10688'>
+          <var-decl name='n_vendor_commands' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10720'>
+          <var-decl name='n_vendor_events' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10752'>
+          <var-decl name='max_ap_assoc_sta' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10768'>
+          <var-decl name='max_num_csa_counters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10776'>
+          <var-decl name='max_adj_channel_rssi_comp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10784'>
+          <var-decl name='bss_select_support' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10816'>
+          <var-decl name='nan_supported_bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10848'>
+          <var-decl name='txq_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10880'>
+          <var-decl name='txq_memory_limit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10912'>
+          <var-decl name='txq_quantum' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='support_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4749' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='support_only_he_mbssid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='pmsr_capa' type-id='5abfac26' visibility='default' filepath='include/net/cfg80211.h' line='4752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11072'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11264'>
+          <var-decl name='priv' type-id='e84913bd' visibility='default' filepath='include/net/cfg80211.h' line='4756' 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='948' column='1' id='6d8d26fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='949' 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='4222' column='1' id='21301fc9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4223' 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='4164' column='1' id='1179f27e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='limits' type-id='2fde6795' visibility='default' filepath='include/net/cfg80211.h' line='4169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_different_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_interfaces' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='n_limits' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4187' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='beacon_int_infra_match' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='radar_detect_widths' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='radar_detect_regions' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='beacon_int_min_gcd' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4219' 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='4100' column='1' id='e47a5a92'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='types' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='4102' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_signal_type' filepath='include/net/cfg80211.h' line='2164' column='1' id='b8524648'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='4278' column='1' id='5bbd300b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_nd_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tcp' type-id='b3ebc0a8' visibility='default' filepath='include/net/cfg80211.h' line='4285' 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='4255' column='1' id='557bca33'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tok' type-id='6a8cbf59' visibility='default' filepath='include/net/cfg80211.h' line='4256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='data_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='data_interval_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='wake_payload_max' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='4260' 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='4915' column='1' id='0dd56ffa'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bufsize' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4916' 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='2763' column='1' id='80126e32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='any' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='disconnect' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='magic_pkt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='gtk_rekey_failure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='eap_identity_req' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='four_way_handshake' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='rfkill_release' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2766' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tcp' type-id='e0c1c1b8' visibility='default' filepath='include/net/cfg80211.h' line='2768' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2769' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='nd_config' type-id='9e4995c7' visibility='default' filepath='include/net/cfg80211.h' line='2770' 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='2704' column='1' id='76959226'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pattern' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2707' 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='2729' column='1' id='1752769a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sock' type-id='13103032' visibility='default' filepath='include/net/cfg80211.h' line='2730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='src' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dst' type-id='78a133c2' visibility='default' filepath='include/net/cfg80211.h' line='2731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='src_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='dst_port' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dst_mac' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='payload_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2734' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='payload' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='payload_seq' type-id='d5a1b375' visibility='default' filepath='include/net/cfg80211.h' line='2736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='data_interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wake_len' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wake_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='wake_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tokens_size' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='payload_tok' type-id='2868c21b' visibility='default' filepath='include/net/cfg80211.h' line='2742' column='1'/>
+        </data-member>
+      </class-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='4893' column='1' id='d5a1b375'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4894' 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='4904' column='1' id='2868c21b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='len' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='token_stream' type-id='167619f6' visibility='default' filepath='include/uapi/linux/nl80211.h' line='4906' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_sched_scan_request' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2118' column='1' id='12a2e88f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reqid' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='2120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='match_sets' type-id='ea00c914' visibility='default' filepath='include/net/cfg80211.h' line='2127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='n_match_sets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='min_rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='scan_plans' type-id='302e9391' visibility='default' filepath='include/net/cfg80211.h' line='2131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='n_scan_plans' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='relative_rssi_set' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='840'>
+          <var-decl name='relative_rssi' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rssi_adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='2142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='dev' type-id='68a2d05b' visibility='default' filepath='include/net/cfg80211.h' line='2143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='2144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='report_results' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='owner_nlportid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='nl_owner_dead' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2154' 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='1928' column='1' id='0c960fcf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='e3dc4fdb' visibility='default' filepath='include/net/cfg80211.h' line='1929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1930' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_scan_width' filepath='include/uapi/linux/nl80211.h' line='4307' column='1' id='95d46034'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2036' column='1' id='7430554e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='2037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='rssi_thold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='per_band_rssi_thold' type-id='68c8d0cb' visibility='default' filepath='include/net/cfg80211.h' line='2040' 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='2052' column='1' id='391881a9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='interval' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iterations' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2054' 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='2063' column='1' id='5da08e25'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2064' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='delta' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='2065' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_band' filepath='include/uapi/linux/nl80211.h' line='4588' column='1' id='3eaa0294'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_BAND_2GHZ' value='0'/>
+        <enumerator name='NL80211_BAND_5GHZ' value='1'/>
+        <enumerator name='NL80211_BAND_60GHZ' value='2'/>
+        <enumerator name='NL80211_BAND_6GHZ' value='3'/>
+        <enumerator name='NUM_NL80211_BANDS' value='4'/>
+      </enum-decl>
+      <enum-decl name='nl80211_iftype' filepath='include/uapi/linux/nl80211.h' line='2933' column='1' id='86505f90'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='273' column='1' id='1540019b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='params' type-id='248874df' visibility='default' filepath='net/wireless/core.h' line='274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data' type-id='b726c152' visibility='default' filepath='net/wireless/core.h' line='275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='def' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='276' 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='596' column='1' id='45947737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='seq' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='key_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='seq_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='cipher' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mode' type-id='30430d28' visibility='default' filepath='include/net/cfg80211.h' line='602' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_key_mode' filepath='include/uapi/linux/nl80211.h' line='4262' column='1' id='30430d28'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEY_RX_TX' value='0'/>
+        <enumerator name='NL80211_KEY_NO_TX' value='1'/>
+        <enumerator name='NL80211_KEY_SET_TX' value='2'/>
+      </enum-decl>
+      <enum-decl name='ieee80211_bss_type' filepath='include/net/cfg80211.h' line='208' column='1' id='cb952348'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1664' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='152' column='1' id='2baffd9a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hidden_list' type-id='72f469ec' visibility='default' filepath='net/wireless/core.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='rbn' type-id='2a8a6332' visibility='default' filepath='net/wireless/core.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ts_boottime' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ts' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='refcount' type-id='7359adad' visibility='default' filepath='net/wireless/core.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hold' type-id='49178f86' visibility='default' filepath='net/wireless/core.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='net/wireless/core.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='net/wireless/core.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pub' type-id='5f145050' visibility='default' filepath='net/wireless/core.h' line='174' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_bss' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2252' column='1' id='5f145050'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2254' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2256' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='beacon_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proberesp_ies' type-id='f344e815' visibility='default' filepath='include/net/cfg80211.h' line='2258' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hidden_beacon_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='transmitted_bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='nontrans_list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='2262' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='688'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='696'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='728'>
+          <var-decl name='bssid_index' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2273' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='max_bssid_indicator' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='priv' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2278' 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='149' column='1' id='839b249b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='center_freq' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='freq_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='hw_value' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='max_antenna_gain' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='max_reg_power' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='beacon_found' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='orig_flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='159' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='orig_mag' type-id='95e97e5e' 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='orig_mpwr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='dfs_state' type-id='996e1634' 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='7359adad' 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='f0981eeb' 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='5746' column='1' id='996e1634'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2209' column='1' id='7eedb398'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='callback_head' type-id='e3d8ce29' visibility='default' filepath='include/net/cfg80211.h' line='2211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='from_beacon' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='232'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/net/cfg80211.h' line='2214' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_chan_def' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='618' column='1' id='e07d69c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='width' type-id='e043cccc' visibility='default' filepath='include/net/cfg80211.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='center_freq1' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='center_freq2' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='622' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='freq1_offset' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='624' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_chan_width' filepath='include/uapi/linux/nl80211.h' line='4287' column='1' id='e043cccc'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='ieee80211_edmg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='388' column='1' id='d87e6929'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bw_config' type-id='51403231' visibility='default' filepath='include/net/cfg80211.h' line='390' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='ieee80211_edmg_bw_config' filepath='include/net/cfg80211.h' line='360' column='1' id='51403231'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_4' value='4'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_5' value='5'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_6' value='6'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_7' value='7'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_8' value='8'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_9' value='9'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_10' value='10'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_11' value='11'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_12' value='12'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_13' value='13'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_14' value='14'/>
+        <enumerator name='IEEE80211_EDMG_BW_CONFIG_15' value='15'/>
+      </enum-decl>
+      <class-decl name='cfg80211_cqm_config' size-in-bits='96' is-struct='yes' visibility='default' filepath='net/wireless/core.h' line='290' column='1' id='2e77eb82'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rssi_hyst' type-id='19c2251e' visibility='default' filepath='net/wireless/core.h' line='291' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='last_rssi_event_value' type-id='a7832498' visibility='default' filepath='net/wireless/core.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rssi_thresholds' type-id='95e97e5e' visibility='default' filepath='net/wireless/core.h' line='293' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='rssi_thresholds' type-id='a4bfb48f' visibility='default' filepath='net/wireless/core.h' line='294' 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='4394' column='1' id='378a6c5a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iftype' type-id='86505f90' visibility='default' filepath='include/net/cfg80211.h' line='4395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='extended_capabilities' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='extended_capabilities_mask' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='4397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='extended_capabilities_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4398' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_supported_band' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='416' column='1' id='f7e1259c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bitrates' type-id='4343d470' visibility='default' filepath='include/net/cfg80211.h' line='418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='band' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='n_channels' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='n_bitrates' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ht_cap' type-id='a041735c' visibility='default' filepath='include/net/cfg80211.h' line='422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='vht_cap' type-id='c994e9c8' visibility='default' filepath='include/net/cfg80211.h' line='423' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='edmg_cap' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='424' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='n_iftype_data' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='iftype_data' type-id='e76a43c4' visibility='default' filepath='include/net/cfg80211.h' line='426' 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='ce30b5d2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' 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='1dc6a898' 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='1dc6a898' 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='1dc6a898' 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='277' column='1' id='a041735c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ampdu_factor' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ampdu_density' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/net/cfg80211.h' line='282' 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='1285' column='1' id='835fe4c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mask' type-id='097504df' visibility='default' filepath='include/linux/ieee80211.h' line='1286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='tx_params' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='reserved' type-id='930ea9f9' visibility='default' filepath='include/linux/ieee80211.h' line='1289' 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='295' column='1' id='c994e9c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_supported' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cap' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vht_mcs' type-id='830056b5' visibility='default' filepath='include/net/cfg80211.h' line='298' 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='1492' column='1' id='830056b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='rx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tx_mcs_map' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_highest' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1496' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sband_iftype_data' size-in-bits='480' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='333' column='1' id='1ffb3281'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='types_mask' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='he_cap' type-id='0056bfcb' visibility='default' filepath='include/net/cfg80211.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='he_6ghz_capa' type-id='192864a5' visibility='default' filepath='include/net/cfg80211.h' line='336' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_sta_he_cap' size-in-bits='440' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='314' column='1' id='0056bfcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='has_he' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='he_cap_elem' type-id='4dffc3f2' visibility='default' filepath='include/net/cfg80211.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='he_mcs_nss_supp' type-id='b1f4f4c7' visibility='default' filepath='include/net/cfg80211.h' line='317' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='240'>
+          <var-decl name='ppe_thres' type-id='5030b3c3' visibility='default' filepath='include/net/cfg80211.h' line='318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_cap_elem' size-in-bits='136' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1578' column='1' id='4dffc3f2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac_cap_info' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1579' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='phy_cap_info' type-id='4d77ae82' visibility='default' filepath='include/linux/ieee80211.h' line='1580' 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='1625' column='1' id='b1f4f4c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tx_mcs_80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='rx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1628' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='tx_mcs_160' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1629' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='tx_mcs_80p80' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1631' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_he_6ghz_capa' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3160' column='1' id='192864a5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capa' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='3162' 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='8c70c365'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' 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='95e97e5e' 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='790cc131' 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='b833d4ac' 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='4df9d64a' 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='5a85c988' 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='b50a4934' 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='b50a4934' 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='e0964c8a' 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='72f469ec' 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='3643' column='1' id='790cc131'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='3852' column='1' id='b833d4ac'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='3828' column='1' id='5a85c988'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='e0964c8a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='5c28f25e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='callback_head' type-id='e3d8ce29' 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='19c2251e' 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='4df9d64a' 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='5a85c988' 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='9195bab1' 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='a9d5f761'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='freq_range' type-id='a81053d4' 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='736b3d64' 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='8eec5cae' 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='19c2251e' 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='19c2251e' 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='b50a4934' 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='a81053d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='start_freq_khz' type-id='19c2251e' 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='19c2251e' 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='19c2251e' 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='736b3d64'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_antenna_gain' type-id='19c2251e' 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='19c2251e' 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='8eec5cae'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='client' type-id='00286dfe' 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='00286dfe' 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='86d70780'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cw_min' type-id='1dc6a898' 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='1dc6a898' 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='1dc6a898' 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='f9b06939' visibility='default' filepath='include/net/regulatory.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ht_cap' size-in-bits='208' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1319' column='1' id='16e7829f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='ampdu_params_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='mcs' type-id='835fe4c6' visibility='default' filepath='include/linux/ieee80211.h' line='1324' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='extended_ht_cap_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1326' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='168'>
+          <var-decl name='tx_BF_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1327' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='antenna_selection_info' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1328' 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='1535' column='1' id='2eec6999'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vht_cap_info' type-id='2f162548' visibility='default' filepath='include/linux/ieee80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='supp_mcs' type-id='830056b5' visibility='default' filepath='include/linux/ieee80211.h' line='1537' 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='4298' column='1' id='7124a2a6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max_delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pattern_max_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pattern_min_len' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_pkt_offset' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='4304' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='wiphy_vendor_command' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4369' column='1' id='fc206ed1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='e223f110' visibility='default' filepath='include/net/cfg80211.h' line='4370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='doit' type-id='a9032da3' visibility='default' filepath='include/net/cfg80211.h' line='4372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dumpit' type-id='dcf81beb' visibility='default' filepath='include/net/cfg80211.h' line='4374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='policy' type-id='109cdb66' visibility='default' filepath='include/net/cfg80211.h' line='4377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='maxattr' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4380' 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='5816' column='1' id='e223f110'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='vendor_id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5817' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subcmd' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='5818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_capabilities' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='4419' column='1' id='e9bb2749'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_peers' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='4420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='randomize_mac_addr' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ftm' type-id='0de9002c' visibility='default' filepath='include/net/cfg80211.h' line='4434' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='4424' column='1' id='0de9002c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preambles' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4425' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bandwidths' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='4426' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bursts_exponent' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='4427' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='max_ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4428' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4429' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='non_asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='4433' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ops' size-in-bits='7232' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3695' column='1' id='8035b730'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspend' type-id='48b6113f' visibility='default' filepath='include/net/cfg80211.h' line='3696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resume' type-id='518c633a' 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='set_wakeup' type-id='dea9803a' visibility='default' filepath='include/net/cfg80211.h' line='3698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='add_virtual_intf' type-id='d0299fd8' visibility='default' filepath='include/net/cfg80211.h' line='3700' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='del_virtual_intf' type-id='242a426a' visibility='default' filepath='include/net/cfg80211.h' line='3705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_virtual_intf' type-id='9e135c1b' visibility='default' filepath='include/net/cfg80211.h' line='3707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='add_key' type-id='ad666b67' visibility='default' filepath='include/net/cfg80211.h' line='3712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='get_key' type-id='a9103ada' visibility='default' filepath='include/net/cfg80211.h' line='3715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='del_key' type-id='5bb4e7cf' visibility='default' filepath='include/net/cfg80211.h' line='3719' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_default_key' type-id='3e5d8250' visibility='default' filepath='include/net/cfg80211.h' line='3721' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_default_mgmt_key' type-id='a1fc1aec' visibility='default' filepath='include/net/cfg80211.h' line='3724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='start_ap' type-id='c64be45e' visibility='default' filepath='include/net/cfg80211.h' line='3728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='change_beacon' type-id='2ae5992c' visibility='default' filepath='include/net/cfg80211.h' line='3730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='stop_ap' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='add_station' type-id='cf6c6fcb' visibility='default' filepath='include/net/cfg80211.h' line='3735' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='del_station' type-id='ce1d0c65' visibility='default' filepath='include/net/cfg80211.h' line='3738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='change_station' type-id='cf6c6fcb' visibility='default' filepath='include/net/cfg80211.h' line='3740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='get_station' type-id='8ae117f3' visibility='default' filepath='include/net/cfg80211.h' line='3743' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dump_station' type-id='ecbadb29' visibility='default' filepath='include/net/cfg80211.h' line='3745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='add_mpath' type-id='117ab738' visibility='default' filepath='include/net/cfg80211.h' line='3748' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='del_mpath' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3750' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='change_mpath' type-id='117ab738' visibility='default' filepath='include/net/cfg80211.h' line='3752' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='get_mpath' type-id='b916eba5' visibility='default' filepath='include/net/cfg80211.h' line='3754' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='dump_mpath' type-id='add0c1a4' visibility='default' filepath='include/net/cfg80211.h' line='3756' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='get_mpp' type-id='b916eba5' visibility='default' filepath='include/net/cfg80211.h' line='3759' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='dump_mpp' type-id='add0c1a4' visibility='default' filepath='include/net/cfg80211.h' line='3761' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='get_mesh_config' type-id='f1dac4d6' visibility='default' filepath='include/net/cfg80211.h' line='3764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='update_mesh_config' type-id='39979680' visibility='default' filepath='include/net/cfg80211.h' line='3767' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='join_mesh' type-id='840c4ecb' visibility='default' filepath='include/net/cfg80211.h' line='3770' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='leave_mesh' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3773' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='join_ocb' type-id='8afbb034' visibility='default' filepath='include/net/cfg80211.h' line='3775' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='leave_ocb' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3777' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='change_bss' type-id='b7589fb3' visibility='default' filepath='include/net/cfg80211.h' line='3779' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='set_txq_params' type-id='626eee7d' visibility='default' filepath='include/net/cfg80211.h' line='3782' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='libertas_set_mesh_channel' type-id='1ad767ce' visibility='default' filepath='include/net/cfg80211.h' line='3785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='set_monitor_channel' type-id='40a250d9' visibility='default' filepath='include/net/cfg80211.h' line='3789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='scan' type-id='f6d3f940' visibility='default' filepath='include/net/cfg80211.h' line='3792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='abort_scan' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='auth' type-id='7bc524a3' visibility='default' filepath='include/net/cfg80211.h' line='3796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='assoc' type-id='683d81d8' visibility='default' filepath='include/net/cfg80211.h' line='3798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='deauth' type-id='cdbc24fe' visibility='default' filepath='include/net/cfg80211.h' line='3800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='disassoc' type-id='6430463c' visibility='default' filepath='include/net/cfg80211.h' line='3802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='connect' type-id='b074b5d4' visibility='default' filepath='include/net/cfg80211.h' line='3805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='update_connect_params' type-id='bcf952e3' visibility='default' filepath='include/net/cfg80211.h' line='3807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='disconnect' type-id='bb2acc29' visibility='default' filepath='include/net/cfg80211.h' line='3811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='join_ibss' type-id='ead2af37' visibility='default' filepath='include/net/cfg80211.h' line='3814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='leave_ibss' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='set_mcast_rate' type-id='c5fb4eb9' visibility='default' filepath='include/net/cfg80211.h' line='3818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='set_wiphy_params' type-id='bba0f341' visibility='default' filepath='include/net/cfg80211.h' line='3821' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='set_tx_power' type-id='fffcbb90' visibility='default' filepath='include/net/cfg80211.h' line='3823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='get_tx_power' type-id='030fbe7b' visibility='default' filepath='include/net/cfg80211.h' line='3825' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='set_wds_peer' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3828' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='rfkill_poll' type-id='03a67bbf' visibility='default' filepath='include/net/cfg80211.h' line='3831' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='set_bitrate_mask' type-id='95464a70' visibility='default' filepath='include/net/cfg80211.h' line='3841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='dump_survey' type-id='95a1c330' visibility='default' filepath='include/net/cfg80211.h' line='3846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='set_pmksa' type-id='e227fe73' visibility='default' filepath='include/net/cfg80211.h' line='3849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='del_pmksa' type-id='e227fe73' visibility='default' filepath='include/net/cfg80211.h' line='3851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='flush_pmksa' type-id='85316748' visibility='default' filepath='include/net/cfg80211.h' line='3853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='remain_on_channel' type-id='e4776627' visibility='default' filepath='include/net/cfg80211.h' line='3855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='cancel_remain_on_channel' type-id='6a7c3ba2' visibility='default' filepath='include/net/cfg80211.h' line='3860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='mgmt_tx' type-id='654eb68b' visibility='default' filepath='include/net/cfg80211.h' line='3864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='mgmt_tx_cancel_wait' type-id='6a7c3ba2' visibility='default' filepath='include/net/cfg80211.h' line='3867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='set_power_mgmt' type-id='00ca7240' visibility='default' filepath='include/net/cfg80211.h' line='3871' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='set_cqm_rssi_config' type-id='d170fd68' visibility='default' filepath='include/net/cfg80211.h' line='3874' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='set_cqm_rssi_range_config' type-id='841c4b1a' visibility='default' filepath='include/net/cfg80211.h' line='3878' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='set_cqm_txe_config' type-id='e279af7d' visibility='default' filepath='include/net/cfg80211.h' line='3882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='mgmt_frame_register' type-id='585d0267' visibility='default' filepath='include/net/cfg80211.h' line='3886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='set_antenna' type-id='5e89e128' visibility='default' filepath='include/net/cfg80211.h' line='3890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='get_antenna' type-id='22c1973a' visibility='default' filepath='include/net/cfg80211.h' line='3891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='sched_scan_start' type-id='672436e6' visibility='default' filepath='include/net/cfg80211.h' line='3893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4480'>
+          <var-decl name='sched_scan_stop' type-id='f7f7a1c4' visibility='default' filepath='include/net/cfg80211.h' line='3896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='set_rekey_data' type-id='f76a2553' visibility='default' filepath='include/net/cfg80211.h' line='3899' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4608'>
+          <var-decl name='tdls_mgmt' type-id='d6ca98e4' visibility='default' filepath='include/net/cfg80211.h' line='3902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='tdls_oper' type-id='7f8a52ed' visibility='default' filepath='include/net/cfg80211.h' line='3906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4736'>
+          <var-decl name='probe_client' type-id='3c511dc5' visibility='default' filepath='include/net/cfg80211.h' line='3909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='set_noack_map' type-id='bb2acc29' visibility='default' filepath='include/net/cfg80211.h' line='3912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4864'>
+          <var-decl name='get_channel' type-id='68dd3d29' visibility='default' filepath='include/net/cfg80211.h' line='3916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='start_p2p_device' type-id='242a426a' visibility='default' filepath='include/net/cfg80211.h' line='3920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4992'>
+          <var-decl name='stop_p2p_device' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='set_mac_acl' type-id='79cba4ed' visibility='default' filepath='include/net/cfg80211.h' line='3925' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5120'>
+          <var-decl name='start_radar_detection' type-id='ded841a6' visibility='default' filepath='include/net/cfg80211.h' line='3928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='end_cac' type-id='df4195e7' visibility='default' filepath='include/net/cfg80211.h' line='3932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='update_ft_ies' type-id='1ca6081e' visibility='default' filepath='include/net/cfg80211.h' line='3934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='crit_proto_start' type-id='8e9877b2' visibility='default' filepath='include/net/cfg80211.h' line='3936' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='crit_proto_stop' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5440'>
+          <var-decl name='set_coalesce' type-id='ee39fcb4' visibility='default' filepath='include/net/cfg80211.h' line='3942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='channel_switch' type-id='314252f6' visibility='default' filepath='include/net/cfg80211.h' line='3945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='set_qos_map' type-id='ef4b69cb' visibility='default' filepath='include/net/cfg80211.h' line='3949' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='set_ap_chanwidth' type-id='ca02ba37' visibility='default' filepath='include/net/cfg80211.h' line='3953' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='add_tx_ts' type-id='83206c41' visibility='default' filepath='include/net/cfg80211.h' line='3956' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='del_tx_ts' type-id='99da26e4' visibility='default' filepath='include/net/cfg80211.h' line='3959' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='tdls_channel_switch' type-id='5228b15b' visibility='default' filepath='include/net/cfg80211.h' line='3962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5888'>
+          <var-decl name='tdls_cancel_channel_switch' type-id='6bc8bd61' visibility='default' filepath='include/net/cfg80211.h' line='3966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='start_nan' type-id='e0e35961' visibility='default' filepath='include/net/cfg80211.h' line='3969' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6016'>
+          <var-decl name='stop_nan' type-id='c62f28a1' visibility='default' filepath='include/net/cfg80211.h' line='3971' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='add_nan_func' type-id='e045e355' visibility='default' filepath='include/net/cfg80211.h' line='3972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='del_nan_func' type-id='8baf5297' visibility='default' filepath='include/net/cfg80211.h' line='3974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='nan_change_conf' type-id='f61682c8' visibility='default' filepath='include/net/cfg80211.h' line='3976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6272'>
+          <var-decl name='set_multicast_to_unicast' type-id='5c035afd' visibility='default' filepath='include/net/cfg80211.h' line='3981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6336'>
+          <var-decl name='get_txq_stats' type-id='7e6add04' visibility='default' filepath='include/net/cfg80211.h' line='3985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6400'>
+          <var-decl name='set_pmk' type-id='6d8f49c3' visibility='default' filepath='include/net/cfg80211.h' line='3989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6464'>
+          <var-decl name='del_pmk' type-id='e8733840' visibility='default' filepath='include/net/cfg80211.h' line='3991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6528'>
+          <var-decl name='external_auth' type-id='9b201d8c' visibility='default' filepath='include/net/cfg80211.h' line='3993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='tx_control_port' type-id='f08a54cd' visibility='default' filepath='include/net/cfg80211.h' line='3996' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='get_ftm_responder_stats' type-id='91ddac9f' visibility='default' filepath='include/net/cfg80211.h' line='4002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='start_pmsr' type-id='b002e605' visibility='default' filepath='include/net/cfg80211.h' line='4006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='abort_pmsr' type-id='24f4d4de' visibility='default' filepath='include/net/cfg80211.h' line='4008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='update_owe_info' type-id='3f98a2ff' visibility='default' filepath='include/net/cfg80211.h' line='4010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='probe_mesh_link' type-id='15a711af' visibility='default' filepath='include/net/cfg80211.h' line='4012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6976'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4015' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7040'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7104'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7168'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='4018' 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='574' column='1' id='d1abd80d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='575' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_4addr' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='576' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='macaddr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='577' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='vht_mumimo_groups' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='578' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='vht_mumimo_follow_addr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='579' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_ap_settings' size-in-bits='4352' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1025' column='1' id='7f421823'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='beacon' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='beacon_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='dtim_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='hidden_ssid' type-id='fba6f1ff' visibility='default' filepath='include/net/cfg80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='1034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2528'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='smps_mode' type-id='7f4af420' visibility='default' filepath='include/net/cfg80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2592'>
+          <var-decl name='inactivity_timeout' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='p2p_ctwindow' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2632'>
+          <var-decl name='p2p_opp_ps' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='acl' type-id='bfda7a08' visibility='default' filepath='include/net/cfg80211.h' line='1041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2784'>
+          <var-decl name='beacon_rate' type-id='febb0cbe' visibility='default' filepath='include/net/cfg80211.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='ht_cap' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='vht_cap' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='he_cap' type-id='0bf1fd35' visibility='default' filepath='include/net/cfg80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='ht_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4168'>
+          <var-decl name='vht_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4176'>
+          <var-decl name='twt_responder' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='he_obss_pd' type-id='198fcd88' visibility='default' filepath='include/net/cfg80211.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1053' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_beacon_data' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='927' column='1' id='e61c5935'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='head' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tail' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='beacon_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='929' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='proberesp_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='assocresp_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='probe_resp' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='lci' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='civicloc' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ftm_responder' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='head_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tail_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='beacon_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='proberesp_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='939' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='assocresp_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='940' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='probe_resp_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='lci_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='942' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='civicloc_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='945' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_hidden_ssid' filepath='include/uapi/linux/nl80211.h' line='5186' column='1' id='fba6f1ff'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='880' column='1' id='f81bbd3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='wpa_versions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='881' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='cipher_group' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='882' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ciphers_pairwise' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ciphers_pairwise' type-id='586ea944' visibility='default' filepath='include/net/cfg80211.h' line='884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='n_akm_suites' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='885' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='akm_suites' type-id='1872161b' visibility='default' filepath='include/net/cfg80211.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='control_port_ethertype' type-id='84a5c3d4' visibility='default' filepath='include/net/cfg80211.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='control_port_no_encrypt' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='891' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='892' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='psk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='sae_pwd' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sae_pwd_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='897' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_auth_type' filepath='include/uapi/linux/nl80211.h' line='4427' column='1' id='f7dadf06'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='5696' column='1' id='7f4af420'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='960' column='1' id='88cc1885'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='acl_policy' type-id='79c93734' visibility='default' filepath='include/net/cfg80211.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='n_acl_entries' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='962' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mac_addrs' type-id='a099b86f' visibility='default' filepath='include/net/cfg80211.h' line='965' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_acl_policy' filepath='include/uapi/linux/nl80211.h' line='5681' column='1' id='79c93734'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='971' column='1' id='febb0cbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control' type-id='b7cdf389' visibility='default' filepath='include/net/cfg80211.h' line='977' 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='972' column='1' id='5b11c736'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='legacy' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='973' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ht_mcs' type-id='097504df' visibility='default' filepath='include/net/cfg80211.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='vht_mcs' type-id='c24d1a13' visibility='default' filepath='include/net/cfg80211.h' line='975' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='gi' type-id='4170ee5e' visibility='default' filepath='include/net/cfg80211.h' line='976' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_txrate_gi' filepath='include/uapi/linux/nl80211.h' line='4573' column='1' id='4170ee5e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='ieee80211_he_obss_pd' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='259' column='1' id='198fcd88'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='enable' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='260' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='min_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='max_offset' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='262' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_parameters' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1193' column='1' id='9367a320'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported_rates' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='vlan' type-id='68a2d05b' visibility='default' filepath='include/net/cfg80211.h' line='1195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sta_flags_mask' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='sta_flags_set' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sta_modify_mask' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='listen_interval' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='aid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1199' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='peer_aid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1200' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='supported_rates_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='plink_action' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ht_capa' type-id='81f1a1a8' visibility='default' filepath='include/net/cfg80211.h' line='1204' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='vht_capa' type-id='fffb07a4' visibility='default' filepath='include/net/cfg80211.h' line='1205' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='uapsd_queues' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1206' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='max_sp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1207' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='capability' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='ext_capab' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ext_capab_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1211' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='supported_channels' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1212' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='supported_channels_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1213' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='supported_oper_classes' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='supported_oper_classes_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1215' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='904'>
+          <var-decl name='opmode_notif' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='opmode_notif_used' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1217' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='support_p2p_ps' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='he_capa' type-id='0bf1fd35' visibility='default' filepath='include/net/cfg80211.h' line='1219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='he_capa_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1040'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='txpwr' type-id='88bcb7a7' visibility='default' filepath='include/net/cfg80211.h' line='1222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='he_6ghz_capa' type-id='c692f2ae' visibility='default' filepath='include/net/cfg80211.h' line='1223' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1225' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mesh_power_mode' filepath='include/uapi/linux/nl80211.h' line='3964' column='1' id='8fbf0816'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='sta_txpwr' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1144' column='1' id='88bcb7a7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='9b7e9486' 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='type' type-id='d46e3e96' visibility='default' filepath='include/net/cfg80211.h' line='1146' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tx_power_setting' filepath='include/uapi/linux/nl80211.h' line='4678' column='1' id='d46e3e96'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='station_del_parameters' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1238' column='1' id='d8d4804a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mac' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subtype' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='station_info' size-in-bits='1792' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1513' column='1' id='214ce930'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='connected_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='inactive_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='assoc_at' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_bytes' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='llid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='plid' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='plink_state' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='signal_avg' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1526' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1527' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='chain_signal_avg' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='1528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='txrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='rxrate' type-id='5ece574c' visibility='default' filepath='include/net/cfg80211.h' line='1531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='rx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='tx_retries' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1534' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_failed' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1535' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='rx_dropped_misc' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1536' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='bss_param' type-id='ca45acc3' visibility='default' filepath='include/net/cfg80211.h' line='1537' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sta_flags' type-id='8d118865' visibility='default' filepath='include/net/cfg80211.h' line='1538' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='assoc_req_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='assoc_req_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='beacon_loss_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='t_offset' type-id='9b7c55ef' visibility='default' filepath='include/net/cfg80211.h' line='1546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='local_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='peer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='nonpeer_pm' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='expected_throughput' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='tx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rx_duration' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1554' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='rx_beacon' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1555' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='rx_beacon_signal_avg' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1480'>
+          <var-decl name='connected_to_gate' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1557' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='pertid' type-id='718fbcad' visibility='default' filepath='include/net/cfg80211.h' line='1559' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1560' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1608'>
+          <var-decl name='avg_ack_signal' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1561' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1616'>
+          <var-decl name='airtime_weight' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1563' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='rx_mpdu_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1565' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='fcs_err_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1566' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='airtime_link_metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1570' 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='1351' column='1' id='5ece574c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mcs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='legacy' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='nss' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='bw' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='he_gi' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='he_dcm' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='he_ru_alloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='n_bonded_ch' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1360' 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='1388' column='1' id='ca45acc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1391' 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='3015' column='1' id='8d118865'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mask' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='set' type-id='3f1a6b60' visibility='default' filepath='include/uapi/linux/nl80211.h' line='3017' 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='1436' column='1' id='af09339d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1437' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='rx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1438' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tx_msdu' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tx_msdu_retries' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tx_msdu_failed' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='txq_stats' type-id='14305947' visibility='default' filepath='include/net/cfg80211.h' line='1442' 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='1410' column='1' id='14305947'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1411' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='backlog_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='backlog_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='drops' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1415' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='ecn_marks' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='overlimit' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1417' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overmemory' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1418' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='collisions' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tx_bytes' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_packets' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='max_flows' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1422' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mpath_info' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1667' column='1' id='1cac2bf4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1668' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='frame_qlen' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='sn' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1670' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='metric' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='exptime' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='discovery_timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='discovery_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1674' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='200'>
+          <var-decl name='flags' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1675' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='hop_count' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='path_change_count' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='generation' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1679' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_config' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1787' column='1' id='50718ec3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dot11MeshRetryTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1788' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='dot11MeshConfirmTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1789' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='dot11MeshHoldingTimeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1790' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='dot11MeshMaxPeerLinks' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1791' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dot11MeshMaxRetries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1792' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='dot11MeshTTL' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1793' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='element_ttl' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='auto_open_plinks' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='dot11MeshNbrOffsetMaxNeighbor' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1796' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dot11MeshHWMPmaxPREQretries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1797' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='path_refresh_time' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='min_discovery_timeout' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1799' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='dot11MeshHWMPactivePathTimeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1800' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dot11MeshHWMPpreqMinInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1801' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dot11MeshHWMPperrMinInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='dot11MeshHWMPnetDiameterTraversalTime' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='dot11MeshHWMPRootMode' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1804' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='dot11MeshConnectedToMeshGate' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dot11MeshHWMPRannInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1806' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='dot11MeshGateAnnouncementProtocol' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='dot11MeshForwarding' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rssi_threshold' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='1809' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ht_opmode' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='dot11MeshHWMPactivePathToRootTimeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1811' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dot11MeshHWMProotInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='dot11MeshHWMPconfirmationInterval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1813' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='power_mode' type-id='8fbf0816' visibility='default' filepath='include/net/cfg80211.h' line='1814' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dot11MeshAwakeWindowDuration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='plink_timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1816' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1818' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='mesh_setup' size-in-bits='1920' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1848' column='1' id='d5e39a52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1849' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='mesh_id' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mesh_id_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1851' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='sync_method' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1852' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='path_sel_proto' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='path_metric' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='auth_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1855' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1856' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='is_authenticated' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1858' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='is_secure' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='472'>
+          <var-decl name='user_mpm' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1860' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='dtim_period' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='496'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1862' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/cfg80211.h' line='1863' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='beacon_rate' type-id='febb0cbe' visibility='default' filepath='include/net/cfg80211.h' line='1865' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1824'>
+          <var-decl name='userspace_handles_dfs' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1866' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1832'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1869' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ocb_setup' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1878' column='1' id='8a88d915'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1879' 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='1702' column='1' id='5603c5c0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='use_cts_prot' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='use_short_preamble' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='use_short_slot_time' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1705' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='basic_rates' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='basic_rates_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1707' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='ap_isolate' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1708' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ht_opmode' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1709' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='p2p_ctwindow' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1710' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='296'>
+          <var-decl name='p2p_opp_ps' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='1710' 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='1892' column='1' id='f16b7aee'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ac' type-id='3ee1f5af' visibility='default' filepath='include/net/cfg80211.h' line='1893' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='txop' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1894' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='cwmin' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1895' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='cwmax' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1896' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='aifs' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1897' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_ac' filepath='include/uapi/linux/nl80211.h' line='4216' column='1' id='3ee1f5af'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='1152' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1977' column='1' id='6834abc3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssids' type-id='a1fa7fb7' visibility='default' filepath='include/net/cfg80211.h' line='1978' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ssids' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='1979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='n_channels' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='1981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='1982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='1983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='duration' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='1984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='duration_mandatory' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1985' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='1986' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='rates' type-id='1c6c0c39' visibility='default' filepath='include/net/cfg80211.h' line='1988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wdev' type-id='63c7e8e1' visibility='default' filepath='include/net/cfg80211.h' line='1990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='624'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='wiphy' type-id='666fb412' visibility='default' filepath='include/net/cfg80211.h' line='1997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='scan_start' type-id='7359adad' visibility='default' filepath='include/net/cfg80211.h' line='1998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='info' type-id='b1493ece' visibility='default' filepath='include/net/cfg80211.h' line='1999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='notified' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1032'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2001' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='channels' type-id='14cad687' visibility='default' filepath='include/net/cfg80211.h' line='2006' 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='1942' column='1' id='b1493ece'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='scan_start_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='tsf_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='1944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='aborted' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1945' 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='2327' column='1' id='5668e288'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2331' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_data' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='auth_data_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2335' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_assoc_request' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2388' column='1' id='63cd0279'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2389' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='use_mfp' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1360'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='fils_kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='fils_kek_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='fils_nonces' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2402' 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='2418' column='1' id='93d4232f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2421' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2422' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2423' 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='2439' column='1' id='1b35ffb5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='2440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='reason_code' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='208'>
+          <var-decl name='local_state_change' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2444' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_params' size-in-bits='3072' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2584' column='1' id='1291defd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2585' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='channel_hint' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2586' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2587' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bssid_hint' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2588' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2589' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2590' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='auth_type' type-id='f7dadf06' visibility='default' filepath='include/net/cfg80211.h' line='2591' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2592' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2593' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2594' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='mfp' type-id='dfb2486c' visibility='default' filepath='include/net/cfg80211.h' line='2595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='crypto' type-id='f81bbd3b' visibility='default' filepath='include/net/cfg80211.h' line='2596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='key' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='key_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1544'>
+          <var-decl name='key_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='flags' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='bg_scan_period' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2600' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1840'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='vht_capa' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='vht_capa_mask' type-id='2eec6999' visibility='default' filepath='include/net/cfg80211.h' line='2604' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='pbss' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2605' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='bss_select' type-id='d24a933d' visibility='default' filepath='include/net/cfg80211.h' line='2606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='prev_bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='fils_erp_username' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='fils_erp_username_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='fils_erp_realm' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fils_erp_realm_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='fils_erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='fils_erp_rrk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='fils_erp_rrk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='want_1x' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2912'>
+          <var-decl name='edmg' type-id='d87e6929' visibility='default' filepath='include/net/cfg80211.h' line='2616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2618' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_mfp' filepath='include/uapi/linux/nl80211.h' line='4464' column='1' id='dfb2486c'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2513' column='1' id='d24a933d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='behaviour' type-id='10fd9108' visibility='default' filepath='include/net/cfg80211.h' line='2514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='param' type-id='0532d6f6' visibility='default' filepath='include/net/cfg80211.h' line='2518' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_bss_select_attr' filepath='include/uapi/linux/nl80211.h' line='5895' column='1' id='10fd9108'>
+        <underlying-type type-id='9cac1fee'/>
+        <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__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/net/cfg80211.h' line='2515' column='1' id='0532d6f6'>
+        <data-member access='public'>
+          <var-decl name='band_pref' type-id='3eaa0294' visibility='default' filepath='include/net/cfg80211.h' line='2516' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='adjust' type-id='5da08e25' visibility='default' filepath='include/net/cfg80211.h' line='2517' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='cfg80211_ibss_params' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='2483' column='1' id='0bac05a4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='2486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ssid_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='ie_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='464'>
+          <var-decl name='beacon_interval' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='basic_rates' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='2490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='channel_fixed' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='520'>
+          <var-decl name='privacy' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='528'>
+          <var-decl name='control_port' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2493' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='536'>
+          <var-decl name='control_port_over_nl80211' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2494' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='userspace_handles_dfs' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2495' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mcast_rate' type-id='2020bac4' visibility='default' filepath='include/net/cfg80211.h' line='2496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='ht_capa' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2497' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='912'>
+          <var-decl name='ht_capa_mask' type-id='16e7829f' visibility='default' filepath='include/net/cfg80211.h' line='2498' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='wep_keys' type-id='706d79ff' visibility='default' filepath='include/net/cfg80211.h' line='2499' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='wep_tx_key' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2500' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2502' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='survey_info' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='838' column='1' id='8cd7231c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='839' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='time' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='840' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='time_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='time_ext_busy' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='842' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='time_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='843' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='time_tx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='time_scan' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='845' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='time_bss_rx' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='846' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='847' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='noise' type-id='fdbf7a0f' visibility='default' filepath='include/net/cfg80211.h' line='848' 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='2683' column='1' id='938cf680'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2684' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2685' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2686' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2687' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2688' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ssid_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2689' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='cache_id' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2690' 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='2903' column='1' id='b52f43dd'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='offchan' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='wait' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='2906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='buf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='no_cck' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2909' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='264'>
+          <var-decl name='dont_wait_for_ack' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='2910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='n_csa_offsets' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='csa_offsets' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='2912' 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='2869' column='1' id='f569a53c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kck' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='replay_ctr' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2870' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_tdls_operation' filepath='include/uapi/linux/nl80211.h' line='5243' column='1' id='ee1b00fc'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2882' column='1' id='6038e38f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='md' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='2883' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2884' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='2885' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_crit_proto_id' filepath='include/uapi/linux/nl80211.h' line='5773' column='1' id='2981c44a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2797' column='1' id='6ef02a2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='rules' type-id='9c46a2bf' visibility='default' filepath='include/net/cfg80211.h' line='2798' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_rules' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2799' 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='2783' column='1' id='b370f027'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='delay' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2784' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='condition' type-id='a1c2ea1e' visibility='default' filepath='include/net/cfg80211.h' line='2785' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='patterns' type-id='1ed3660c' visibility='default' filepath='include/net/cfg80211.h' line='2786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_patterns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='2787' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_coalesce_condition' filepath='include/uapi/linux/nl80211.h' line='5014' column='1' id='a1c2ea1e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2880' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='1072' column='1' id='7f4edaa7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='1073' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='beacon_csa' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1074' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='counter_offsets_beacon' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='1075' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='counter_offsets_presp' type-id='80455526' visibility='default' filepath='include/net/cfg80211.h' line='1076' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='n_counter_offsets_beacon' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1568'>
+          <var-decl name='n_counter_offsets_presp' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='beacon_after' type-id='e61c5935' visibility='default' filepath='include/net/cfg80211.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='radar_required' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2760'>
+          <var-decl name='block_tx' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2768'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='1084' 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='2953' column='1' id='762d0cdc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_des' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2954' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dscp_exception' type-id='113a8bef' visibility='default' filepath='include/net/cfg80211.h' line='2955' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='344'>
+          <var-decl name='up' type-id='62f1ceae' visibility='default' filepath='include/net/cfg80211.h' line='2956' 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='2921' column='1' id='c0e72c08'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dscp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='up' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2923' 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='2932' column='1' id='0f438714'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='low' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='high' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2934' 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='2969' column='1' id='7fec8d58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='master_pref' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2970' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='bands' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2971' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_nan_func' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3026' column='1' id='f3945544'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='f796e63e' visibility='default' filepath='include/net/cfg80211.h' line='3027' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='service_id' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3028' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='publish_type' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='88'>
+          <var-decl name='close_range' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='publish_bcast' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='subscribe_active' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='followup_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='followup_reqid' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3034' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='followup_dest' type-id='6d8d26fb' visibility='default' filepath='include/net/cfg80211.h' line='3035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ttl' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='serv_spec_info' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3037' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='serv_spec_info_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3038' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='328'>
+          <var-decl name='srf_include' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='3039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='srf_bf' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='srf_bf_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3041' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='456'>
+          <var-decl name='srf_bf_idx' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3042' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='srf_macs' type-id='01b378ab' visibility='default' filepath='include/net/cfg80211.h' line='3043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='srf_num_macs' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='3044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='tx_filters' type-id='ee7e85c3' visibility='default' filepath='include/net/cfg80211.h' line='3046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='num_tx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='num_rx_filters' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='instance_id' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3049' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3050' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3052' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_nan_function_type' filepath='include/uapi/linux/nl80211.h' line='5915' column='1' id='f796e63e'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='2992' column='1' id='fef37f13'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filter' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='2993' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2994' 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='3065' column='1' id='1316fd07'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='aa' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pmk_len' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk_r0_name' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3069' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_external_auth_params' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3092' column='1' id='5e0fcaa5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='93b938a2' visibility='default' filepath='include/net/cfg80211.h' line='3093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ssid' type-id='0c960fcf' visibility='default' filepath='include/net/cfg80211.h' line='3095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='key_mgmt_suite' type-id='f0981eeb' visibility='default' filepath='include/net/cfg80211.h' line='3096' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='status' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3097' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3098' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_external_auth_action' filepath='include/uapi/linux/nl80211.h' line='6079' column='1' id='93b938a2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_START' value='0'/>
+        <enumerator name='NL80211_EXTERNAL_AUTH_ABORT' value='1'/>
+      </enum-decl>
+      <class-decl name='cfg80211_ftm_responder_stats' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3122' column='1' id='4f719aac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='filled' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='success_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='partial_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='failed_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='non_asap_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='total_duration_ms' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='unknown_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='reschedule_requests_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='out_of_window_triggers_num' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3132' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3305' column='1' id='fe64f3b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cookie' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='3306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='drv_data' type-id='eaa32e2f' visibility='default' filepath='include/net/cfg80211.h' line='3307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='n_peers' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='nl_portid' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='timeout' type-id='19c2251e' visibility='default' filepath='include/net/cfg80211.h' line='3311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='mac_addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3313' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='mac_addr_mask' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3314' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/net/cfg80211.h' line='3316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='peers' type-id='42a2e39d' visibility='default' filepath='include/net/cfg80211.h' line='3318' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_request_peer' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3282' column='1' id='167153b5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='addr' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='chandef' type-id='e07d69c8' visibility='default' filepath='include/net/cfg80211.h' line='3284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='report_ap_tsf' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='ftm' type-id='b60e74e3' visibility='default' filepath='include/net/cfg80211.h' line='3286' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_pmsr_ftm_request_peer' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3262' column='1' id='b60e74e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='preamble' type-id='62746bd7' visibility='default' filepath='include/net/cfg80211.h' line='3263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='burst_period' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3264' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='requested' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3265' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='asap' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3266' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='request_lci' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='request_civicloc' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='56'>
+          <var-decl name='num_bursts_exp' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='burst_duration' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='ftms_per_burst' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='ftmr_retries' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='3272' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_preamble' filepath='include/uapi/linux/nl80211.h' line='6163' column='1' id='62746bd7'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_PREAMBLE_LEGACY' value='0'/>
+        <enumerator name='NL80211_PREAMBLE_HT' value='1'/>
+        <enumerator name='NL80211_PREAMBLE_VHT' value='2'/>
+        <enumerator name='NL80211_PREAMBLE_DMG' value='3'/>
+      </enum-decl>
+      <class-decl name='cfg80211_update_owe_info' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='3340' column='1' id='aabc6610'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='peer' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='3341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='status' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='3342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='3343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='3344' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='5603c5c0' size-in-bits='64' id='fa1cae16'/>
+      <pointer-type-def type-id='7f421823' size-in-bits='64' id='083811d3'/>
+      <pointer-type-def type-id='63cd0279' size-in-bits='64' id='21a99b81'/>
+      <pointer-type-def type-id='5668e288' size-in-bits='64' id='e2254eee'/>
+      <pointer-type-def type-id='e61c5935' size-in-bits='64' id='37ce53f5'/>
+      <pointer-type-def type-id='5f145050' size-in-bits='64' id='bda81d86'/>
+      <pointer-type-def type-id='1540019b' size-in-bits='64' id='561a36db'/>
+      <pointer-type-def type-id='e07d69c8' size-in-bits='64' id='0953fbfe'/>
+      <pointer-type-def type-id='6ef02a2f' size-in-bits='64' id='1a548a87'/>
+      <pointer-type-def type-id='b370f027' size-in-bits='64' id='9c46a2bf'/>
+      <pointer-type-def type-id='43420c6a' size-in-bits='64' id='6dbc8e18'/>
+      <pointer-type-def type-id='1291defd' size-in-bits='64' id='a39f64ad'/>
+      <pointer-type-def type-id='2e77eb82' size-in-bits='64' id='ee527710'/>
+      <pointer-type-def type-id='7f4edaa7' size-in-bits='64' id='56c1976f'/>
+      <pointer-type-def type-id='93d4232f' size-in-bits='64' id='85e47e07'/>
+      <pointer-type-def type-id='1b35ffb5' size-in-bits='64' id='c24b1225'/>
+      <pointer-type-def type-id='5e0fcaa5' size-in-bits='64' id='2b041d55'/>
+      <pointer-type-def type-id='4f719aac' size-in-bits='64' id='f7cfb49a'/>
+      <pointer-type-def type-id='f569a53c' size-in-bits='64' id='6f33eada'/>
+      <pointer-type-def type-id='0bac05a4' size-in-bits='64' id='6bfee0f2'/>
+      <pointer-type-def type-id='2baffd9a' size-in-bits='64' id='1819dec8'/>
+      <pointer-type-def type-id='7430554e' size-in-bits='64' id='ea00c914'/>
+      <pointer-type-def type-id='b52f43dd' size-in-bits='64' id='10794d1d'/>
+      <pointer-type-def type-id='7fec8d58' size-in-bits='64' id='d458dfce'/>
+      <pointer-type-def type-id='f3945544' size-in-bits='64' id='c3524532'/>
+      <pointer-type-def type-id='fef37f13' size-in-bits='64' id='ee7e85c3'/>
+      <pointer-type-def type-id='76959226' size-in-bits='64' id='1ed3660c'/>
+      <pointer-type-def type-id='938cf680' size-in-bits='64' id='e7e4a8d6'/>
+      <pointer-type-def type-id='fe64f3b4' size-in-bits='64' id='6951bca2'/>
+      <pointer-type-def type-id='762d0cdc' size-in-bits='64' id='794da86a'/>
+      <pointer-type-def type-id='6834abc3' size-in-bits='64' id='a9e8b173'/>
+      <pointer-type-def type-id='391881a9' size-in-bits='64' id='302e9391'/>
+      <pointer-type-def type-id='12a2e88f' size-in-bits='64' id='9e4995c7'/>
+      <pointer-type-def type-id='0c960fcf' size-in-bits='64' id='a1fa7fb7'/>
+      <pointer-type-def type-id='af09339d' size-in-bits='64' id='718fbcad'/>
+      <pointer-type-def type-id='14305947' size-in-bits='64' id='c65b576f'/>
+      <pointer-type-def type-id='6038e38f' size-in-bits='64' id='22428037'/>
+      <pointer-type-def type-id='aabc6610' size-in-bits='64' id='37104a66'/>
+      <pointer-type-def type-id='80126e32' size-in-bits='64' id='9d025b00'/>
+      <pointer-type-def type-id='1752769a' size-in-bits='64' id='e0c1c1b8'/>
+      <qualified-type-def type-id='84a5c3d4' const='yes' id='4590ffe4'/>
+      <qualified-type-def type-id='88cc1885' const='yes' id='369202f2'/>
+      <pointer-type-def type-id='369202f2' size-in-bits='64' id='bfda7a08'/>
+      <qualified-type-def type-id='febb0cbe' const='yes' id='d168fd05'/>
+      <pointer-type-def type-id='d168fd05' size-in-bits='64' id='d74690fd'/>
+      <qualified-type-def type-id='7eedb398' const='yes' id='5e2a189d'/>
+      <pointer-type-def type-id='5e2a189d' size-in-bits='64' id='f344e815'/>
+      <qualified-type-def type-id='8035b730' const='yes' id='bacfb75d'/>
+      <pointer-type-def type-id='bacfb75d' size-in-bits='64' id='8bfdd055'/>
+      <qualified-type-def type-id='1316fd07' const='yes' id='4f01e87c'/>
+      <pointer-type-def type-id='4f01e87c' size-in-bits='64' id='b600bf62'/>
+      <qualified-type-def type-id='e9bb2749' const='yes' id='a0ef5328'/>
+      <pointer-type-def type-id='a0ef5328' size-in-bits='64' id='5abfac26'/>
+      <qualified-type-def type-id='192864a5' const='yes' id='2b772770'/>
+      <pointer-type-def type-id='2b772770' size-in-bits='64' id='c692f2ae'/>
+      <qualified-type-def type-id='4dffc3f2' const='yes' id='c812633d'/>
+      <pointer-type-def type-id='c812633d' size-in-bits='64' id='0bf1fd35'/>
+      <qualified-type-def type-id='16e7829f' const='yes' id='269d8092'/>
+      <pointer-type-def type-id='269d8092' size-in-bits='64' id='81f1a1a8'/>
+      <qualified-type-def type-id='1179f27e' const='yes' id='29c8dc19'/>
+      <pointer-type-def type-id='29c8dc19' size-in-bits='64' id='fa32a449'/>
+      <qualified-type-def type-id='e47a5a92' const='yes' id='06f84b1d'/>
+      <pointer-type-def type-id='06f84b1d' size-in-bits='64' id='2fde6795'/>
+      <qualified-type-def type-id='5c28f25e' const='yes' id='5960e0b1'/>
+      <pointer-type-def type-id='5960e0b1' size-in-bits='64' id='4e819401'/>
+      <qualified-type-def type-id='1ffb3281' const='yes' id='36c71786'/>
+      <pointer-type-def type-id='36c71786' size-in-bits='64' id='e76a43c4'/>
+      <qualified-type-def type-id='21301fc9' const='yes' id='64b77daa'/>
+      <pointer-type-def type-id='64b77daa' size-in-bits='64' id='0cda9080'/>
+      <qualified-type-def type-id='2eec6999' const='yes' id='46f53066'/>
+      <pointer-type-def type-id='46f53066' size-in-bits='64' id='fffb07a4'/>
+      <qualified-type-def type-id='50718ec3' const='yes' id='3666ea54'/>
+      <pointer-type-def type-id='3666ea54' size-in-bits='64' id='2203245a'/>
+      <qualified-type-def type-id='d5e39a52' const='yes' id='be356197'/>
+      <pointer-type-def type-id='be356197' size-in-bits='64' id='2b08dc87'/>
+      <qualified-type-def type-id='e223f110' const='yes' id='af3cafff'/>
+      <pointer-type-def type-id='af3cafff' size-in-bits='64' id='b188cc4f'/>
+      <qualified-type-def type-id='0dd56ffa' const='yes' id='ed477ec9'/>
+      <pointer-type-def type-id='ed477ec9' size-in-bits='64' id='6a8cbf59'/>
+      <qualified-type-def type-id='7124a2a6' const='yes' id='7253d28f'/>
+      <pointer-type-def type-id='7253d28f' size-in-bits='64' id='9ef499bf'/>
+      <qualified-type-def type-id='378a6c5a' const='yes' id='703a35bb'/>
+      <pointer-type-def type-id='703a35bb' size-in-bits='64' id='3ca25343'/>
+      <qualified-type-def type-id='fc206ed1' const='yes' id='2ffd639c'/>
+      <pointer-type-def type-id='2ffd639c' size-in-bits='64' id='41e3f782'/>
+      <qualified-type-def type-id='5bbd300b' const='yes' id='93286cfa'/>
+      <pointer-type-def type-id='93286cfa' size-in-bits='64' id='78a34b70'/>
+      <qualified-type-def type-id='557bca33' const='yes' id='bd4a4592'/>
+      <pointer-type-def type-id='bd4a4592' size-in-bits='64' id='b3ebc0a8'/>
+      <pointer-type-def type-id='839b249b' size-in-bits='64' id='ec00acfb'/>
+      <pointer-type-def type-id='ce30b5d2' size-in-bits='64' id='4343d470'/>
+      <pointer-type-def type-id='f7e1259c' size-in-bits='64' id='3cad9e1a'/>
+      <pointer-type-def type-id='f16b7aee' size-in-bits='64' id='bf642844'/>
+      <pointer-type-def type-id='045f8e20' size-in-bits='64' id='518c633a'/>
+      <pointer-type-def type-id='49390c3d' size-in-bits='64' id='40a250d9'/>
+      <pointer-type-def type-id='06206c42' size-in-bits='64' id='ee39fcb4'/>
+      <pointer-type-def type-id='a1a8fac6' size-in-bits='64' id='f6d3f940'/>
+      <pointer-type-def type-id='f856d933' size-in-bits='64' id='48b6113f'/>
+      <pointer-type-def type-id='7f72358e' size-in-bits='64' id='85316748'/>
+      <pointer-type-def type-id='2449db3f' size-in-bits='64' id='b7589fb3'/>
+      <pointer-type-def type-id='55a23884' size-in-bits='64' id='c64be45e'/>
+      <pointer-type-def type-id='73c05c56' size-in-bits='64' id='683d81d8'/>
+      <pointer-type-def type-id='fe3510af' size-in-bits='64' id='7bc524a3'/>
+      <pointer-type-def type-id='a23fc232' size-in-bits='64' id='2ae5992c'/>
+      <pointer-type-def type-id='6952013b' size-in-bits='64' id='ca02ba37'/>
+      <pointer-type-def type-id='a965b0cc' size-in-bits='64' id='ded841a6'/>
+      <pointer-type-def type-id='0b70b14a' size-in-bits='64' id='b074b5d4'/>
+      <pointer-type-def type-id='63671fdf' size-in-bits='64' id='bcf952e3'/>
+      <pointer-type-def type-id='a6905674' size-in-bits='64' id='314252f6'/>
+      <pointer-type-def type-id='1774d144' size-in-bits='64' id='cdbc24fe'/>
+      <pointer-type-def type-id='8a324762' size-in-bits='64' id='6430463c'/>
+      <pointer-type-def type-id='2a27335a' size-in-bits='64' id='9b201d8c'/>
+      <pointer-type-def type-id='5ec38983' size-in-bits='64' id='91ddac9f'/>
+      <pointer-type-def type-id='3bf25607' size-in-bits='64' id='f76a2553'/>
+      <pointer-type-def type-id='0c844afb' size-in-bits='64' id='ead2af37'/>
+      <pointer-type-def type-id='84e91ca7' size-in-bits='64' id='e227fe73'/>
+      <pointer-type-def type-id='54e57e1f' size-in-bits='64' id='ef4b69cb'/>
+      <pointer-type-def type-id='befdd9ec' size-in-bits='64' id='672436e6'/>
+      <pointer-type-def type-id='5c1db944' size-in-bits='64' id='1ca6081e'/>
+      <pointer-type-def type-id='cdf04663' size-in-bits='64' id='3f98a2ff'/>
+      <pointer-type-def type-id='374012d9' size-in-bits='64' id='5c035afd'/>
+      <pointer-type-def type-id='981172e9' size-in-bits='64' id='79cba4ed'/>
+      <pointer-type-def type-id='452785d7' size-in-bits='64' id='6d8f49c3'/>
+      <pointer-type-def type-id='e0deacaf' size-in-bits='64' id='840c4ecb'/>
+      <pointer-type-def type-id='43a70966' size-in-bits='64' id='e8733840'/>
+      <pointer-type-def type-id='f34eff46' size-in-bits='64' id='95464a70'/>
+      <pointer-type-def type-id='c64b03de' size-in-bits='64' id='117ab738'/>
+      <pointer-type-def type-id='24cf4f51' size-in-bits='64' id='7f8a52ed'/>
+      <pointer-type-def type-id='7fb22747' size-in-bits='64' id='8ae117f3'/>
+      <pointer-type-def type-id='95374427' size-in-bits='64' id='cf6c6fcb'/>
+      <pointer-type-def type-id='e99c1aa3' size-in-bits='64' id='15a711af'/>
+      <pointer-type-def type-id='51511031' size-in-bits='64' id='f08a54cd'/>
+      <pointer-type-def type-id='fbc27f3f' size-in-bits='64' id='5228b15b'/>
+      <pointer-type-def type-id='5e4b012a' size-in-bits='64' id='d6ca98e4'/>
+      <pointer-type-def type-id='da761e39' size-in-bits='64' id='3c511dc5'/>
+      <pointer-type-def type-id='a178e3ef' size-in-bits='64' id='9e135c1b'/>
+      <pointer-type-def type-id='b2f05574' size-in-bits='64' id='1ad767ce'/>
+      <pointer-type-def type-id='c9f6ac19' size-in-bits='64' id='626eee7d'/>
+      <pointer-type-def type-id='4965c54d' size-in-bits='64' id='c5fb4eb9'/>
+      <pointer-type-def type-id='762f5ca6' size-in-bits='64' id='95a1c330'/>
+      <pointer-type-def type-id='2d19d67d' size-in-bits='64' id='ecbadb29'/>
+      <pointer-type-def type-id='a581a2f2' size-in-bits='64' id='add0c1a4'/>
+      <pointer-type-def type-id='5141aef4' size-in-bits='64' id='f1dac4d6'/>
+      <pointer-type-def type-id='8c3a8dc2' size-in-bits='64' id='8afbb034'/>
+      <pointer-type-def type-id='14ed8641' size-in-bits='64' id='ce1d0c65'/>
+      <pointer-type-def type-id='6bf2c0de' size-in-bits='64' id='00ca7240'/>
+      <pointer-type-def type-id='0ce7c350' size-in-bits='64' id='841c4b1a'/>
+      <pointer-type-def type-id='3722f046' size-in-bits='64' id='d170fd68'/>
+      <pointer-type-def type-id='25b5e9dd' size-in-bits='64' id='bb2acc29'/>
+      <pointer-type-def type-id='0d7f26ee' size-in-bits='64' id='39979680'/>
+      <pointer-type-def type-id='92ff6821' size-in-bits='64' id='e279af7d'/>
+      <pointer-type-def type-id='b92daa92' size-in-bits='64' id='f7f7a1c4'/>
+      <pointer-type-def type-id='69de0232' size-in-bits='64' id='a1fc1aec'/>
+      <pointer-type-def type-id='6e68576a' size-in-bits='64' id='99da26e4'/>
+      <pointer-type-def type-id='ba9b6355' size-in-bits='64' id='83206c41'/>
+      <pointer-type-def type-id='cf67db5b' size-in-bits='64' id='5bb4e7cf'/>
+      <pointer-type-def type-id='3ab04ceb' size-in-bits='64' id='ad666b67'/>
+      <pointer-type-def type-id='c31e2430' size-in-bits='64' id='a9103ada'/>
+      <pointer-type-def type-id='7d422fee' size-in-bits='64' id='3e5d8250'/>
+      <pointer-type-def type-id='7110e319' size-in-bits='64' id='b916eba5'/>
+      <pointer-type-def type-id='efe2b85d' size-in-bits='64' id='bba0f341'/>
+      <pointer-type-def type-id='43bd95de' size-in-bits='64' id='5e89e128'/>
+      <pointer-type-def type-id='1ea25720' size-in-bits='64' id='22c1973a'/>
+      <pointer-type-def type-id='f0a4e670' size-in-bits='64' id='242a426a'/>
+      <pointer-type-def type-id='02ca2c2d' size-in-bits='64' id='68dd3d29'/>
+      <pointer-type-def type-id='8cd8691f' size-in-bits='64' id='654eb68b'/>
+      <pointer-type-def type-id='0147ecbd' size-in-bits='64' id='e0e35961'/>
+      <pointer-type-def type-id='bc2226be' size-in-bits='64' id='f61682c8'/>
+      <pointer-type-def type-id='e8048149' size-in-bits='64' id='e045e355'/>
+      <pointer-type-def type-id='e5140819' size-in-bits='64' id='b002e605'/>
+      <pointer-type-def type-id='08a81c4a' size-in-bits='64' id='7e6add04'/>
+      <pointer-type-def type-id='d8ec75b8' size-in-bits='64' id='8e9877b2'/>
+      <pointer-type-def type-id='9c0f0a76' size-in-bits='64' id='fffcbb90'/>
+      <pointer-type-def type-id='140658d3' size-in-bits='64' id='e4776627'/>
+      <pointer-type-def type-id='35048757' size-in-bits='64' id='030fbe7b'/>
+      <pointer-type-def type-id='d91d4c07' size-in-bits='64' id='dcf81beb'/>
+      <pointer-type-def type-id='48be0748' size-in-bits='64' id='6a7c3ba2'/>
+      <pointer-type-def type-id='c756879f' size-in-bits='64' id='a9032da3'/>
+      <pointer-type-def type-id='45947737' size-in-bits='64' id='706d79ff'/>
+      <pointer-type-def type-id='6d8d26fb' size-in-bits='64' id='01b378ab'/>
+      <pointer-type-def type-id='50718ec3' size-in-bits='64' id='fce83a73'/>
+      <pointer-type-def type-id='1cac2bf4' size-in-bits='64' id='9362acb2'/>
+      <pointer-type-def type-id='8a88d915' size-in-bits='64' id='c0c26d75'/>
+      <pointer-type-def type-id='8c70c365' size-in-bits='64' id='1a09a595'/>
+      <pointer-type-def type-id='d8d4804a' size-in-bits='64' id='7f7dc508'/>
+      <pointer-type-def type-id='214ce930' size-in-bits='64' id='7af1dc96'/>
+      <pointer-type-def type-id='9367a320' size-in-bits='64' id='5b19f7e6'/>
+      <pointer-type-def type-id='8cd7231c' size-in-bits='64' id='6f439e9a'/>
+      <pointer-type-def type-id='d1abd80d' size-in-bits='64' id='835ace8d'/>
+      <pointer-type-def type-id='a2365ade' size-in-bits='64' id='f1df8cf8'/>
+      <pointer-type-def type-id='17f99cdb' size-in-bits='64' id='03a67bbf'/>
+      <pointer-type-def type-id='e357eac3' size-in-bits='64' id='df4195e7'/>
+      <pointer-type-def type-id='9007252d' size-in-bits='64' id='6bc8bd61'/>
+      <pointer-type-def type-id='10781bfd' size-in-bits='64' id='39ee8359'/>
+      <pointer-type-def type-id='23e15d68' size-in-bits='64' id='dea9803a'/>
+      <pointer-type-def type-id='2591da2d' size-in-bits='64' id='c62f28a1'/>
+      <pointer-type-def type-id='db426f5c' size-in-bits='64' id='24f4d4de'/>
+      <pointer-type-def type-id='4e932973' size-in-bits='64' id='585d0267'/>
+      <pointer-type-def type-id='49354cf3' size-in-bits='64' id='8baf5297'/>
+      <pointer-type-def type-id='68523a94' size-in-bits='64' id='666fb412'/>
+      <pointer-type-def type-id='3b132996' size-in-bits='64' id='d0299fd8'/>
+      <function-decl name='wiphy_new_nm' mangled-name='wiphy_new_nm' filepath='net/wireless/core.c' line='398' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_new_nm'>
+        <parameter type-id='8bfdd055' name='ops' filepath='net/wireless/core.c' line='398' column='1'/>
+        <parameter type-id='95e97e5e' name='sizeof_priv' filepath='net/wireless/core.c' line='398' column='1'/>
+        <parameter type-id='80f4b756' name='requested_name' filepath='net/wireless/core.c' line='399' column='1'/>
+        <return type-id='666fb412'/>
+      </function-decl>
+      <function-decl name='wiphy_unregister' mangled-name='wiphy_unregister' filepath='net/wireless/core.c' line='997' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_unregister'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='997' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='wiphy_register' mangled-name='wiphy_register' filepath='net/wireless/core.c' line='646' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_register'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='646' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='wiphy_free' mangled-name='wiphy_free' filepath='net/wireless/core.c' line='1069' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_free'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='1069' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_unregister_wdev' mangled-name='cfg80211_unregister_wdev' filepath='net/wireless/core.c' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_unregister_wdev'>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/core.c' line='1129' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_stop_iface' mangled-name='cfg80211_stop_iface' filepath='net/wireless/core.c' line='1220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_stop_iface'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/core.c' line='1220' column='1'/>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/core.c' line='1220' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/core.c' line='1221' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='045f8e20'>
+        <parameter type-id='666fb412'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49390c3d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='06206c42'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='1a548a87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a1a8fac6'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='a9e8b173'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f856d933'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='9d025b00'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7f72358e'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2449db3f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='fa1cae16'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='55a23884'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='083811d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='73c05c56'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='21a99b81'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fe3510af'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='e2254eee'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a23fc232'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='37ce53f5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6952013b'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a965b0cc'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='0953fbfe'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b70b14a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a39f64ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='63671fdf'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a39f64ad'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a6905674'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='56c1976f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1774d144'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='85e47e07'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a324762'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='c24b1225'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2a27335a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='2b041d55'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5ec38983'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f7cfb49a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3bf25607'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='6f33eada'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0c844afb'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='6bfee0f2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84e91ca7'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='e7e4a8d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='54e57e1f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='794da86a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='befdd9ec'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='9e4995c7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5c1db944'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='22428037'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cdf04663'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='37104a66'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='374012d9'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='4ab96a04'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='981172e9'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bfda7a08'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='452785d7'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b600bf62'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e0deacaf'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='2203245a'/>
+        <parameter type-id='2b08dc87'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43a70966'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f34eff46'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='d74690fd'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c64b03de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='24cf4f51'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='ee1b00fc'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7fb22747'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='95374427'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='5b19f7e6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e99c1aa3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51511031'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='4590ffe4'/>
+        <parameter type-id='4ab96a04'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fbc27f3f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5e4b012a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da761e39'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a178e3ef'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='835ace8d'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2f05574'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='ec00acfb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9f6ac19'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bf642844'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4965c54d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='762f5ca6'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='6f439e9a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d19d67d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='7af1dc96'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a581a2f2'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='9362acb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5141aef4'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='fce83a73'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8c3a8dc2'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='c0c26d75'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='14ed8641'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='7f7dc508'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6bf2c0de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ce7c350'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a7832498'/>
+        <parameter type-id='a7832498'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3722f046'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='a7832498'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='25b5e9dd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d7f26ee'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='2203245a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='92ff6821'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b92daa92'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='69de0232'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6e68576a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ba9b6355'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='cf67db5b'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ab04ceb'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='706d79ff'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c31e2430'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='bbaf3419'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='f1df8cf8'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d422fee'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='f9b06939'/>
+        <parameter type-id='b50a4934'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7110e319'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='8bff8096'/>
+        <parameter type-id='9362acb2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='efe2b85d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='43bd95de'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='19c2251e'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1ea25720'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='f9409001'/>
+        <parameter type-id='f9409001'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f0a4e670'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02ca2c2d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='0953fbfe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8cd8691f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='10794d1d'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0147ecbd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='d458dfce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bc2226be'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='d458dfce'/>
+        <parameter type-id='19c2251e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e8048149'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='c3524532'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5140819'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='08a81c4a'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='c65b576f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8ec75b8'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='2981c44a'/>
+        <parameter type-id='1dc6a898'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c0f0a76'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='d46e3e96'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='140658d3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='ec00acfb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='3df9fd28'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='35048757'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='7292109c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d91d4c07'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='0fbf3cfd'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='48be0748'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c756879f'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a2365ade'>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='706d79ff'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='17f99cdb'>
+        <parameter type-id='666fb412'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e357eac3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9007252d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='68a2d05b'/>
+        <parameter type-id='bbaf3419'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10781bfd'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='1a09a595'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='23e15d68'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2591da2d'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='db426f5c'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='6951bca2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4e932973'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='1dc6a898'/>
+        <parameter type-id='b50a4934'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49354cf3'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='63c7e8e1'/>
+        <parameter type-id='91ce1af9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3b132996'>
+        <parameter type-id='666fb412'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='002ac4a6'/>
+        <parameter type-id='86505f90'/>
+        <parameter type-id='835ace8d'/>
+        <return type-id='63c7e8e1'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/ibss.c' language='LANG_C89'>
+      <function-decl name='cfg80211_ibss_joined' mangled-name='cfg80211_ibss_joined' filepath='net/wireless/ibss.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ibss_joined'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/ibss.c' line='59' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/ibss.c' line='59' column='1'/>
+        <parameter type-id='ec00acfb' name='channel' filepath='net/wireless/ibss.c' line='60' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/ibss.c' line='60' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/mlme.c' language='LANG_C89'>
+      <enum-decl name='nl80211_key_type' filepath='include/uapi/linux/nl80211.h' line='4450' column='1' id='fa66a097'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_KEYTYPE_GROUP' value='0'/>
+        <enumerator name='NL80211_KEYTYPE_PAIRWISE' value='1'/>
+        <enumerator name='NL80211_KEYTYPE_PEERKEY' value='2'/>
+        <enumerator name='NUM_NL80211_KEYTYPES' value='3'/>
+      </enum-decl>
+      <enum-decl name='nl80211_radar_event' filepath='include/uapi/linux/nl80211.h' line='5726' column='1' id='e237215a'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_RADAR_DETECTED' value='0'/>
+        <enumerator name='NL80211_RADAR_CAC_FINISHED' value='1'/>
+        <enumerator name='NL80211_RADAR_CAC_ABORTED' value='2'/>
+        <enumerator name='NL80211_RADAR_NOP_FINISHED' value='3'/>
+        <enumerator name='NL80211_RADAR_PRE_CAC_EXPIRED' value='4'/>
+        <enumerator name='NL80211_RADAR_CAC_STARTED' value='5'/>
+      </enum-decl>
+      <qualified-type-def type-id='e07d69c8' const='yes' id='482f2f27'/>
+      <pointer-type-def type-id='482f2f27' size-in-bits='64' id='af471177'/>
+      <function-decl name='cfg80211_tx_mlme_mgmt' mangled-name='cfg80211_tx_mlme_mgmt' filepath='net/wireless/mlme.c' line='174' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_tx_mlme_mgmt'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='174' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_mlme_mgmt' mangled-name='cfg80211_rx_mlme_mgmt' filepath='net/wireless/mlme.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_mlme_mgmt'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='112' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_mgmt' mangled-name='cfg80211_rx_mgmt' filepath='net/wireless/mlme.c' line='699' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_mgmt'>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='95e97e5e' name='freq' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='95e97e5e' name='sig_dbm' filepath='net/wireless/mlme.c' line='699' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <parameter type-id='19c2251e' name='flags' filepath='net/wireless/mlme.c' line='700' column='1'/>
+        <return type-id='b50a4934'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_assoc_resp' mangled-name='cfg80211_rx_assoc_resp' filepath='net/wireless/mlme.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_assoc_resp'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='23' column='1'/>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/mlme.c' line='23' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='95e97e5e' name='uapsd_queues' filepath='net/wireless/mlme.c' line='24' column='1'/>
+        <parameter type-id='bbaf3419' name='req_ies' filepath='net/wireless/mlme.c' line='25' column='1'/>
+        <parameter type-id='b59d7dce' name='req_ies_len' filepath='net/wireless/mlme.c' line='25' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_radar_event' mangled-name='cfg80211_radar_event' filepath='net/wireless/mlme.c' line='845' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_radar_event'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/mlme.c' line='845' column='1'/>
+        <parameter type-id='0953fbfe' name='chandef' filepath='net/wireless/mlme.c' line='846' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/mlme.c' line='847' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_michael_mic_failure' mangled-name='cfg80211_michael_mic_failure' filepath='net/wireless/mlme.c' line='193' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_michael_mic_failure'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='193' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/mlme.c' line='193' column='1'/>
+        <parameter type-id='fa66a097' name='key_type' filepath='net/wireless/mlme.c' line='194' column='1'/>
+        <parameter type-id='95e97e5e' name='key_id' filepath='net/wireless/mlme.c' line='194' column='1'/>
+        <parameter type-id='bbaf3419' name='tsc' filepath='net/wireless/mlme.c' line='195' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/mlme.c' line='195' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_cac_event' mangled-name='cfg80211_cac_event' filepath='net/wireless/mlme.c' line='868' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_cac_event'>
+        <parameter type-id='68a2d05b' name='netdev' filepath='net/wireless/mlme.c' line='868' column='1'/>
+        <parameter type-id='af471177' name='chandef' filepath='net/wireless/mlme.c' line='869' column='1'/>
+        <parameter type-id='e237215a' name='event' filepath='net/wireless/mlme.c' line='870' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/mlme.c' line='870' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_auth_timeout' mangled-name='cfg80211_auth_timeout' filepath='net/wireless/mlme.c' line='133' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_auth_timeout'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='133' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/mlme.c' line='133' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_assoc_timeout' mangled-name='cfg80211_assoc_timeout' filepath='net/wireless/mlme.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_assoc_timeout'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/mlme.c' line='146' column='1'/>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/mlme.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/nl80211.c' language='LANG_C89'>
+      <class-decl name='cfg80211_ft_event_params' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='7273' column='1' id='cc4b6920'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='7275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='target_ap' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ric_ies' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='7277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ric_ies_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='7278' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_cqm_rssi_threshold_event' filepath='include/uapi/linux/nl80211.h' line='4665' column='1' id='b8189423'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_LOW' value='0'/>
+        <enumerator name='NL80211_CQM_RSSI_THRESHOLD_EVENT_HIGH' value='1'/>
+        <enumerator name='NL80211_CQM_RSSI_BEACON_LOSS_EVENT' value='2'/>
+      </enum-decl>
+      <enum-decl name='nl80211_commands' filepath='include/uapi/linux/nl80211.h' line='1107' column='1' id='187e1e49'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_CMD_UNSPEC' value='0'/>
+        <enumerator name='NL80211_CMD_GET_WIPHY' value='1'/>
+        <enumerator name='NL80211_CMD_SET_WIPHY' value='2'/>
+        <enumerator name='NL80211_CMD_NEW_WIPHY' value='3'/>
+        <enumerator name='NL80211_CMD_DEL_WIPHY' value='4'/>
+        <enumerator name='NL80211_CMD_GET_INTERFACE' value='5'/>
+        <enumerator name='NL80211_CMD_SET_INTERFACE' value='6'/>
+        <enumerator name='NL80211_CMD_NEW_INTERFACE' value='7'/>
+        <enumerator name='NL80211_CMD_DEL_INTERFACE' value='8'/>
+        <enumerator name='NL80211_CMD_GET_KEY' value='9'/>
+        <enumerator name='NL80211_CMD_SET_KEY' value='10'/>
+        <enumerator name='NL80211_CMD_NEW_KEY' value='11'/>
+        <enumerator name='NL80211_CMD_DEL_KEY' value='12'/>
+        <enumerator name='NL80211_CMD_GET_BEACON' value='13'/>
+        <enumerator name='NL80211_CMD_SET_BEACON' value='14'/>
+        <enumerator name='NL80211_CMD_START_AP' value='15'/>
+        <enumerator name='NL80211_CMD_NEW_BEACON' value='15'/>
+        <enumerator name='NL80211_CMD_STOP_AP' value='16'/>
+        <enumerator name='NL80211_CMD_DEL_BEACON' value='16'/>
+        <enumerator name='NL80211_CMD_GET_STATION' value='17'/>
+        <enumerator name='NL80211_CMD_SET_STATION' value='18'/>
+        <enumerator name='NL80211_CMD_NEW_STATION' value='19'/>
+        <enumerator name='NL80211_CMD_DEL_STATION' value='20'/>
+        <enumerator name='NL80211_CMD_GET_MPATH' value='21'/>
+        <enumerator name='NL80211_CMD_SET_MPATH' value='22'/>
+        <enumerator name='NL80211_CMD_NEW_MPATH' value='23'/>
+        <enumerator name='NL80211_CMD_DEL_MPATH' value='24'/>
+        <enumerator name='NL80211_CMD_SET_BSS' value='25'/>
+        <enumerator name='NL80211_CMD_SET_REG' value='26'/>
+        <enumerator name='NL80211_CMD_REQ_SET_REG' value='27'/>
+        <enumerator name='NL80211_CMD_GET_MESH_CONFIG' value='28'/>
+        <enumerator name='NL80211_CMD_SET_MESH_CONFIG' value='29'/>
+        <enumerator name='NL80211_CMD_SET_MGMT_EXTRA_IE' value='30'/>
+        <enumerator name='NL80211_CMD_GET_REG' value='31'/>
+        <enumerator name='NL80211_CMD_GET_SCAN' value='32'/>
+        <enumerator name='NL80211_CMD_TRIGGER_SCAN' value='33'/>
+        <enumerator name='NL80211_CMD_NEW_SCAN_RESULTS' value='34'/>
+        <enumerator name='NL80211_CMD_SCAN_ABORTED' value='35'/>
+        <enumerator name='NL80211_CMD_REG_CHANGE' value='36'/>
+        <enumerator name='NL80211_CMD_AUTHENTICATE' value='37'/>
+        <enumerator name='NL80211_CMD_ASSOCIATE' value='38'/>
+        <enumerator name='NL80211_CMD_DEAUTHENTICATE' value='39'/>
+        <enumerator name='NL80211_CMD_DISASSOCIATE' value='40'/>
+        <enumerator name='NL80211_CMD_MICHAEL_MIC_FAILURE' value='41'/>
+        <enumerator name='NL80211_CMD_REG_BEACON_HINT' value='42'/>
+        <enumerator name='NL80211_CMD_JOIN_IBSS' value='43'/>
+        <enumerator name='NL80211_CMD_LEAVE_IBSS' value='44'/>
+        <enumerator name='NL80211_CMD_TESTMODE' value='45'/>
+        <enumerator name='NL80211_CMD_CONNECT' value='46'/>
+        <enumerator name='NL80211_CMD_ROAM' value='47'/>
+        <enumerator name='NL80211_CMD_DISCONNECT' value='48'/>
+        <enumerator name='NL80211_CMD_SET_WIPHY_NETNS' value='49'/>
+        <enumerator name='NL80211_CMD_GET_SURVEY' value='50'/>
+        <enumerator name='NL80211_CMD_NEW_SURVEY_RESULTS' value='51'/>
+        <enumerator name='NL80211_CMD_SET_PMKSA' value='52'/>
+        <enumerator name='NL80211_CMD_DEL_PMKSA' value='53'/>
+        <enumerator name='NL80211_CMD_FLUSH_PMKSA' value='54'/>
+        <enumerator name='NL80211_CMD_REMAIN_ON_CHANNEL' value='55'/>
+        <enumerator name='NL80211_CMD_CANCEL_REMAIN_ON_CHANNEL' value='56'/>
+        <enumerator name='NL80211_CMD_SET_TX_BITRATE_MASK' value='57'/>
+        <enumerator name='NL80211_CMD_REGISTER_FRAME' value='58'/>
+        <enumerator name='NL80211_CMD_REGISTER_ACTION' value='58'/>
+        <enumerator name='NL80211_CMD_FRAME' value='59'/>
+        <enumerator name='NL80211_CMD_ACTION' value='59'/>
+        <enumerator name='NL80211_CMD_FRAME_TX_STATUS' value='60'/>
+        <enumerator name='NL80211_CMD_ACTION_TX_STATUS' value='60'/>
+        <enumerator name='NL80211_CMD_SET_POWER_SAVE' value='61'/>
+        <enumerator name='NL80211_CMD_GET_POWER_SAVE' value='62'/>
+        <enumerator name='NL80211_CMD_SET_CQM' value='63'/>
+        <enumerator name='NL80211_CMD_NOTIFY_CQM' value='64'/>
+        <enumerator name='NL80211_CMD_SET_CHANNEL' value='65'/>
+        <enumerator name='NL80211_CMD_SET_WDS_PEER' value='66'/>
+        <enumerator name='NL80211_CMD_FRAME_WAIT_CANCEL' value='67'/>
+        <enumerator name='NL80211_CMD_JOIN_MESH' value='68'/>
+        <enumerator name='NL80211_CMD_LEAVE_MESH' value='69'/>
+        <enumerator name='NL80211_CMD_UNPROT_DEAUTHENTICATE' value='70'/>
+        <enumerator name='NL80211_CMD_UNPROT_DISASSOCIATE' value='71'/>
+        <enumerator name='NL80211_CMD_NEW_PEER_CANDIDATE' value='72'/>
+        <enumerator name='NL80211_CMD_GET_WOWLAN' value='73'/>
+        <enumerator name='NL80211_CMD_SET_WOWLAN' value='74'/>
+        <enumerator name='NL80211_CMD_START_SCHED_SCAN' value='75'/>
+        <enumerator name='NL80211_CMD_STOP_SCHED_SCAN' value='76'/>
+        <enumerator name='NL80211_CMD_SCHED_SCAN_RESULTS' value='77'/>
+        <enumerator name='NL80211_CMD_SCHED_SCAN_STOPPED' value='78'/>
+        <enumerator name='NL80211_CMD_SET_REKEY_OFFLOAD' value='79'/>
+        <enumerator name='NL80211_CMD_PMKSA_CANDIDATE' value='80'/>
+        <enumerator name='NL80211_CMD_TDLS_OPER' value='81'/>
+        <enumerator name='NL80211_CMD_TDLS_MGMT' value='82'/>
+        <enumerator name='NL80211_CMD_UNEXPECTED_FRAME' value='83'/>
+        <enumerator name='NL80211_CMD_PROBE_CLIENT' value='84'/>
+        <enumerator name='NL80211_CMD_REGISTER_BEACONS' value='85'/>
+        <enumerator name='NL80211_CMD_UNEXPECTED_4ADDR_FRAME' value='86'/>
+        <enumerator name='NL80211_CMD_SET_NOACK_MAP' value='87'/>
+        <enumerator name='NL80211_CMD_CH_SWITCH_NOTIFY' value='88'/>
+        <enumerator name='NL80211_CMD_START_P2P_DEVICE' value='89'/>
+        <enumerator name='NL80211_CMD_STOP_P2P_DEVICE' value='90'/>
+        <enumerator name='NL80211_CMD_CONN_FAILED' value='91'/>
+        <enumerator name='NL80211_CMD_SET_MCAST_RATE' value='92'/>
+        <enumerator name='NL80211_CMD_SET_MAC_ACL' value='93'/>
+        <enumerator name='NL80211_CMD_RADAR_DETECT' value='94'/>
+        <enumerator name='NL80211_CMD_GET_PROTOCOL_FEATURES' value='95'/>
+        <enumerator name='NL80211_CMD_UPDATE_FT_IES' value='96'/>
+        <enumerator name='NL80211_CMD_FT_EVENT' value='97'/>
+        <enumerator name='NL80211_CMD_CRIT_PROTOCOL_START' value='98'/>
+        <enumerator name='NL80211_CMD_CRIT_PROTOCOL_STOP' value='99'/>
+        <enumerator name='NL80211_CMD_GET_COALESCE' value='100'/>
+        <enumerator name='NL80211_CMD_SET_COALESCE' value='101'/>
+        <enumerator name='NL80211_CMD_CHANNEL_SWITCH' value='102'/>
+        <enumerator name='NL80211_CMD_VENDOR' value='103'/>
+        <enumerator name='NL80211_CMD_SET_QOS_MAP' value='104'/>
+        <enumerator name='NL80211_CMD_ADD_TX_TS' value='105'/>
+        <enumerator name='NL80211_CMD_DEL_TX_TS' value='106'/>
+        <enumerator name='NL80211_CMD_GET_MPP' value='107'/>
+        <enumerator name='NL80211_CMD_JOIN_OCB' value='108'/>
+        <enumerator name='NL80211_CMD_LEAVE_OCB' value='109'/>
+        <enumerator name='NL80211_CMD_CH_SWITCH_STARTED_NOTIFY' value='110'/>
+        <enumerator name='NL80211_CMD_TDLS_CHANNEL_SWITCH' value='111'/>
+        <enumerator name='NL80211_CMD_TDLS_CANCEL_CHANNEL_SWITCH' value='112'/>
+        <enumerator name='NL80211_CMD_WIPHY_REG_CHANGE' value='113'/>
+        <enumerator name='NL80211_CMD_ABORT_SCAN' value='114'/>
+        <enumerator name='NL80211_CMD_START_NAN' value='115'/>
+        <enumerator name='NL80211_CMD_STOP_NAN' value='116'/>
+        <enumerator name='NL80211_CMD_ADD_NAN_FUNCTION' value='117'/>
+        <enumerator name='NL80211_CMD_DEL_NAN_FUNCTION' value='118'/>
+        <enumerator name='NL80211_CMD_CHANGE_NAN_CONFIG' value='119'/>
+        <enumerator name='NL80211_CMD_NAN_MATCH' value='120'/>
+        <enumerator name='NL80211_CMD_SET_MULTICAST_TO_UNICAST' value='121'/>
+        <enumerator name='NL80211_CMD_UPDATE_CONNECT_PARAMS' value='122'/>
+        <enumerator name='NL80211_CMD_SET_PMK' value='123'/>
+        <enumerator name='NL80211_CMD_DEL_PMK' value='124'/>
+        <enumerator name='NL80211_CMD_PORT_AUTHORIZED' value='125'/>
+        <enumerator name='NL80211_CMD_RELOAD_REGDB' value='126'/>
+        <enumerator name='NL80211_CMD_EXTERNAL_AUTH' value='127'/>
+        <enumerator name='NL80211_CMD_STA_OPMODE_CHANGED' value='128'/>
+        <enumerator name='NL80211_CMD_CONTROL_PORT_FRAME' value='129'/>
+        <enumerator name='NL80211_CMD_GET_FTM_RESPONDER_STATS' value='130'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_START' value='131'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_RESULT' value='132'/>
+        <enumerator name='NL80211_CMD_PEER_MEASUREMENT_COMPLETE' value='133'/>
+        <enumerator name='NL80211_CMD_NOTIFY_RADAR' value='134'/>
+        <enumerator name='NL80211_CMD_UPDATE_OWE_INFO' value='135'/>
+        <enumerator name='NL80211_CMD_PROBE_MESH_LINK' value='136'/>
+        <enumerator name='__NL80211_CMD_AFTER_LAST' value='137'/>
+        <enumerator name='NL80211_CMD_MAX' value='136'/>
+      </enum-decl>
+      <enum-decl name='nl80211_attrs' filepath='include/uapi/linux/nl80211.h' line='2383' column='1' id='320b0ded'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='NL80211_ATTR_UNSPEC' value='0'/>
+        <enumerator name='NL80211_ATTR_WIPHY' value='1'/>
+        <enumerator name='NL80211_ATTR_WIPHY_NAME' value='2'/>
+        <enumerator name='NL80211_ATTR_IFINDEX' value='3'/>
+        <enumerator name='NL80211_ATTR_IFNAME' value='4'/>
+        <enumerator name='NL80211_ATTR_IFTYPE' value='5'/>
+        <enumerator name='NL80211_ATTR_MAC' value='6'/>
+        <enumerator name='NL80211_ATTR_KEY_DATA' value='7'/>
+        <enumerator name='NL80211_ATTR_KEY_IDX' value='8'/>
+        <enumerator name='NL80211_ATTR_KEY_CIPHER' value='9'/>
+        <enumerator name='NL80211_ATTR_KEY_SEQ' value='10'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT' value='11'/>
+        <enumerator name='NL80211_ATTR_BEACON_INTERVAL' value='12'/>
+        <enumerator name='NL80211_ATTR_DTIM_PERIOD' value='13'/>
+        <enumerator name='NL80211_ATTR_BEACON_HEAD' value='14'/>
+        <enumerator name='NL80211_ATTR_BEACON_TAIL' value='15'/>
+        <enumerator name='NL80211_ATTR_STA_AID' value='16'/>
+        <enumerator name='NL80211_ATTR_STA_FLAGS' value='17'/>
+        <enumerator name='NL80211_ATTR_STA_LISTEN_INTERVAL' value='18'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_RATES' value='19'/>
+        <enumerator name='NL80211_ATTR_STA_VLAN' value='20'/>
+        <enumerator name='NL80211_ATTR_STA_INFO' value='21'/>
+        <enumerator name='NL80211_ATTR_WIPHY_BANDS' value='22'/>
+        <enumerator name='NL80211_ATTR_MNTR_FLAGS' value='23'/>
+        <enumerator name='NL80211_ATTR_MESH_ID' value='24'/>
+        <enumerator name='NL80211_ATTR_STA_PLINK_ACTION' value='25'/>
+        <enumerator name='NL80211_ATTR_MPATH_NEXT_HOP' value='26'/>
+        <enumerator name='NL80211_ATTR_MPATH_INFO' value='27'/>
+        <enumerator name='NL80211_ATTR_BSS_CTS_PROT' value='28'/>
+        <enumerator name='NL80211_ATTR_BSS_SHORT_PREAMBLE' value='29'/>
+        <enumerator name='NL80211_ATTR_BSS_SHORT_SLOT_TIME' value='30'/>
+        <enumerator name='NL80211_ATTR_HT_CAPABILITY' value='31'/>
+        <enumerator name='NL80211_ATTR_SUPPORTED_IFTYPES' value='32'/>
+        <enumerator name='NL80211_ATTR_REG_ALPHA2' value='33'/>
+        <enumerator name='NL80211_ATTR_REG_RULES' value='34'/>
+        <enumerator name='NL80211_ATTR_MESH_CONFIG' value='35'/>
+        <enumerator name='NL80211_ATTR_BSS_BASIC_RATES' value='36'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TXQ_PARAMS' value='37'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FREQ' value='38'/>
+        <enumerator name='NL80211_ATTR_WIPHY_CHANNEL_TYPE' value='39'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT_MGMT' value='40'/>
+        <enumerator name='NL80211_ATTR_MGMT_SUBTYPE' value='41'/>
+        <enumerator name='NL80211_ATTR_IE' value='42'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCAN_SSIDS' value='43'/>
+        <enumerator name='NL80211_ATTR_SCAN_FREQUENCIES' value='44'/>
+        <enumerator name='NL80211_ATTR_SCAN_SSIDS' value='45'/>
+        <enumerator name='NL80211_ATTR_GENERATION' value='46'/>
+        <enumerator name='NL80211_ATTR_BSS' value='47'/>
+        <enumerator name='NL80211_ATTR_REG_INITIATOR' value='48'/>
+        <enumerator name='NL80211_ATTR_REG_TYPE' value='49'/>
+        <enumerator name='NL80211_ATTR_SUPPORTED_COMMANDS' value='50'/>
+        <enumerator name='NL80211_ATTR_FRAME' value='51'/>
+        <enumerator name='NL80211_ATTR_SSID' value='52'/>
+        <enumerator name='NL80211_ATTR_AUTH_TYPE' value='53'/>
+        <enumerator name='NL80211_ATTR_REASON_CODE' value='54'/>
+        <enumerator name='NL80211_ATTR_KEY_TYPE' value='55'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_IE_LEN' value='56'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITES' value='57'/>
+        <enumerator name='NL80211_ATTR_FREQ_BEFORE' value='58'/>
+        <enumerator name='NL80211_ATTR_FREQ_AFTER' value='59'/>
+        <enumerator name='NL80211_ATTR_FREQ_FIXED' value='60'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RETRY_SHORT' value='61'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RETRY_LONG' value='62'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FRAG_THRESHOLD' value='63'/>
+        <enumerator name='NL80211_ATTR_WIPHY_RTS_THRESHOLD' value='64'/>
+        <enumerator name='NL80211_ATTR_TIMED_OUT' value='65'/>
+        <enumerator name='NL80211_ATTR_USE_MFP' value='66'/>
+        <enumerator name='NL80211_ATTR_STA_FLAGS2' value='67'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT' value='68'/>
+        <enumerator name='NL80211_ATTR_TESTDATA' value='69'/>
+        <enumerator name='NL80211_ATTR_PRIVACY' value='70'/>
+        <enumerator name='NL80211_ATTR_DISCONNECTED_BY_AP' value='71'/>
+        <enumerator name='NL80211_ATTR_STATUS_CODE' value='72'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITES_PAIRWISE' value='73'/>
+        <enumerator name='NL80211_ATTR_CIPHER_SUITE_GROUP' value='74'/>
+        <enumerator name='NL80211_ATTR_WPA_VERSIONS' value='75'/>
+        <enumerator name='NL80211_ATTR_AKM_SUITES' value='76'/>
+        <enumerator name='NL80211_ATTR_REQ_IE' value='77'/>
+        <enumerator name='NL80211_ATTR_RESP_IE' value='78'/>
+        <enumerator name='NL80211_ATTR_PREV_BSSID' value='79'/>
+        <enumerator name='NL80211_ATTR_KEY' value='80'/>
+        <enumerator name='NL80211_ATTR_KEYS' value='81'/>
+        <enumerator name='NL80211_ATTR_PID' value='82'/>
+        <enumerator name='NL80211_ATTR_4ADDR' value='83'/>
+        <enumerator name='NL80211_ATTR_SURVEY_INFO' value='84'/>
+        <enumerator name='NL80211_ATTR_PMKID' value='85'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_PMKIDS' value='86'/>
+        <enumerator name='NL80211_ATTR_DURATION' value='87'/>
+        <enumerator name='NL80211_ATTR_COOKIE' value='88'/>
+        <enumerator name='NL80211_ATTR_WIPHY_COVERAGE_CLASS' value='89'/>
+        <enumerator name='NL80211_ATTR_TX_RATES' value='90'/>
+        <enumerator name='NL80211_ATTR_FRAME_MATCH' value='91'/>
+        <enumerator name='NL80211_ATTR_ACK' value='92'/>
+        <enumerator name='NL80211_ATTR_PS_STATE' value='93'/>
+        <enumerator name='NL80211_ATTR_CQM' value='94'/>
+        <enumerator name='NL80211_ATTR_LOCAL_STATE_CHANGE' value='95'/>
+        <enumerator name='NL80211_ATTR_AP_ISOLATE' value='96'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TX_POWER_SETTING' value='97'/>
+        <enumerator name='NL80211_ATTR_WIPHY_TX_POWER_LEVEL' value='98'/>
+        <enumerator name='NL80211_ATTR_TX_FRAME_TYPES' value='99'/>
+        <enumerator name='NL80211_ATTR_RX_FRAME_TYPES' value='100'/>
+        <enumerator name='NL80211_ATTR_FRAME_TYPE' value='101'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_ETHERTYPE' value='102'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT' value='103'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_IBSS_RSN' value='104'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_TX' value='105'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_RX' value='106'/>
+        <enumerator name='NL80211_ATTR_MCAST_RATE' value='107'/>
+        <enumerator name='NL80211_ATTR_OFFCHANNEL_TX_OK' value='108'/>
+        <enumerator name='NL80211_ATTR_BSS_HT_OPMODE' value='109'/>
+        <enumerator name='NL80211_ATTR_KEY_DEFAULT_TYPES' value='110'/>
+        <enumerator name='NL80211_ATTR_MAX_REMAIN_ON_CHANNEL_DURATION' value='111'/>
+        <enumerator name='NL80211_ATTR_MESH_SETUP' value='112'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_AVAIL_TX' value='113'/>
+        <enumerator name='NL80211_ATTR_WIPHY_ANTENNA_AVAIL_RX' value='114'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_MESH_AUTH' value='115'/>
+        <enumerator name='NL80211_ATTR_STA_PLINK_STATE' value='116'/>
+        <enumerator name='NL80211_ATTR_WOWLAN_TRIGGERS' value='117'/>
+        <enumerator name='NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED' value='118'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_INTERVAL' value='119'/>
+        <enumerator name='NL80211_ATTR_INTERFACE_COMBINATIONS' value='120'/>
+        <enumerator name='NL80211_ATTR_SOFTWARE_IFTYPES' value='121'/>
+        <enumerator name='NL80211_ATTR_REKEY_DATA' value='122'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCHED_SCAN_SSIDS' value='123'/>
+        <enumerator name='NL80211_ATTR_MAX_SCHED_SCAN_IE_LEN' value='124'/>
+        <enumerator name='NL80211_ATTR_SCAN_SUPP_RATES' value='125'/>
+        <enumerator name='NL80211_ATTR_HIDDEN_SSID' value='126'/>
+        <enumerator name='NL80211_ATTR_IE_PROBE_RESP' value='127'/>
+        <enumerator name='NL80211_ATTR_IE_ASSOC_RESP' value='128'/>
+        <enumerator name='NL80211_ATTR_STA_WME' value='129'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_AP_UAPSD' value='130'/>
+        <enumerator name='NL80211_ATTR_ROAM_SUPPORT' value='131'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MATCH' value='132'/>
+        <enumerator name='NL80211_ATTR_MAX_MATCH_SETS' value='133'/>
+        <enumerator name='NL80211_ATTR_PMKSA_CANDIDATE' value='134'/>
+        <enumerator name='NL80211_ATTR_TX_NO_CCK_RATE' value='135'/>
+        <enumerator name='NL80211_ATTR_TDLS_ACTION' value='136'/>
+        <enumerator name='NL80211_ATTR_TDLS_DIALOG_TOKEN' value='137'/>
+        <enumerator name='NL80211_ATTR_TDLS_OPERATION' value='138'/>
+        <enumerator name='NL80211_ATTR_TDLS_SUPPORT' value='139'/>
+        <enumerator name='NL80211_ATTR_TDLS_EXTERNAL_SETUP' value='140'/>
+        <enumerator name='NL80211_ATTR_DEVICE_AP_SME' value='141'/>
+        <enumerator name='NL80211_ATTR_DONT_WAIT_FOR_ACK' value='142'/>
+        <enumerator name='NL80211_ATTR_FEATURE_FLAGS' value='143'/>
+        <enumerator name='NL80211_ATTR_PROBE_RESP_OFFLOAD' value='144'/>
+        <enumerator name='NL80211_ATTR_PROBE_RESP' value='145'/>
+        <enumerator name='NL80211_ATTR_DFS_REGION' value='146'/>
+        <enumerator name='NL80211_ATTR_DISABLE_HT' value='147'/>
+        <enumerator name='NL80211_ATTR_HT_CAPABILITY_MASK' value='148'/>
+        <enumerator name='NL80211_ATTR_NOACK_MAP' value='149'/>
+        <enumerator name='NL80211_ATTR_INACTIVITY_TIMEOUT' value='150'/>
+        <enumerator name='NL80211_ATTR_RX_SIGNAL_DBM' value='151'/>
+        <enumerator name='NL80211_ATTR_BG_SCAN_PERIOD' value='152'/>
+        <enumerator name='NL80211_ATTR_WDEV' value='153'/>
+        <enumerator name='NL80211_ATTR_USER_REG_HINT_TYPE' value='154'/>
+        <enumerator name='NL80211_ATTR_CONN_FAILED_REASON' value='155'/>
+        <enumerator name='NL80211_ATTR_AUTH_DATA' value='156'/>
+        <enumerator name='NL80211_ATTR_VHT_CAPABILITY' value='157'/>
+        <enumerator name='NL80211_ATTR_SCAN_FLAGS' value='158'/>
+        <enumerator name='NL80211_ATTR_CHANNEL_WIDTH' value='159'/>
+        <enumerator name='NL80211_ATTR_CENTER_FREQ1' value='160'/>
+        <enumerator name='NL80211_ATTR_CENTER_FREQ2' value='161'/>
+        <enumerator name='NL80211_ATTR_P2P_CTWINDOW' value='162'/>
+        <enumerator name='NL80211_ATTR_P2P_OPPPS' value='163'/>
+        <enumerator name='NL80211_ATTR_LOCAL_MESH_POWER_MODE' value='164'/>
+        <enumerator name='NL80211_ATTR_ACL_POLICY' value='165'/>
+        <enumerator name='NL80211_ATTR_MAC_ADDRS' value='166'/>
+        <enumerator name='NL80211_ATTR_MAC_ACL_MAX' value='167'/>
+        <enumerator name='NL80211_ATTR_RADAR_EVENT' value='168'/>
+        <enumerator name='NL80211_ATTR_EXT_CAPA' value='169'/>
+        <enumerator name='NL80211_ATTR_EXT_CAPA_MASK' value='170'/>
+        <enumerator name='NL80211_ATTR_STA_CAPABILITY' value='171'/>
+        <enumerator name='NL80211_ATTR_STA_EXT_CAPABILITY' value='172'/>
+        <enumerator name='NL80211_ATTR_PROTOCOL_FEATURES' value='173'/>
+        <enumerator name='NL80211_ATTR_SPLIT_WIPHY_DUMP' value='174'/>
+        <enumerator name='NL80211_ATTR_DISABLE_VHT' value='175'/>
+        <enumerator name='NL80211_ATTR_VHT_CAPABILITY_MASK' value='176'/>
+        <enumerator name='NL80211_ATTR_MDID' value='177'/>
+        <enumerator name='NL80211_ATTR_IE_RIC' value='178'/>
+        <enumerator name='NL80211_ATTR_CRIT_PROT_ID' value='179'/>
+        <enumerator name='NL80211_ATTR_MAX_CRIT_PROT_DURATION' value='180'/>
+        <enumerator name='NL80211_ATTR_PEER_AID' value='181'/>
+        <enumerator name='NL80211_ATTR_COALESCE_RULE' value='182'/>
+        <enumerator name='NL80211_ATTR_CH_SWITCH_COUNT' value='183'/>
+        <enumerator name='NL80211_ATTR_CH_SWITCH_BLOCK_TX' value='184'/>
+        <enumerator name='NL80211_ATTR_CSA_IES' value='185'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFF_BEACON' value='186'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFF_PRESP' value='187'/>
+        <enumerator name='NL80211_ATTR_RXMGMT_FLAGS' value='188'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_CHANNELS' value='189'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES' value='190'/>
+        <enumerator name='NL80211_ATTR_HANDLE_DFS' value='191'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_5_MHZ' value='192'/>
+        <enumerator name='NL80211_ATTR_SUPPORT_10_MHZ' value='193'/>
+        <enumerator name='NL80211_ATTR_OPMODE_NOTIF' value='194'/>
+        <enumerator name='NL80211_ATTR_VENDOR_ID' value='195'/>
+        <enumerator name='NL80211_ATTR_VENDOR_SUBCMD' value='196'/>
+        <enumerator name='NL80211_ATTR_VENDOR_DATA' value='197'/>
+        <enumerator name='NL80211_ATTR_VENDOR_EVENTS' value='198'/>
+        <enumerator name='NL80211_ATTR_QOS_MAP' value='199'/>
+        <enumerator name='NL80211_ATTR_MAC_HINT' value='200'/>
+        <enumerator name='NL80211_ATTR_WIPHY_FREQ_HINT' value='201'/>
+        <enumerator name='NL80211_ATTR_MAX_AP_ASSOC_STA' value='202'/>
+        <enumerator name='NL80211_ATTR_TDLS_PEER_CAPABILITY' value='203'/>
+        <enumerator name='NL80211_ATTR_SOCKET_OWNER' value='204'/>
+        <enumerator name='NL80211_ATTR_CSA_C_OFFSETS_TX' value='205'/>
+        <enumerator name='NL80211_ATTR_MAX_CSA_COUNTERS' value='206'/>
+        <enumerator name='NL80211_ATTR_TDLS_INITIATOR' value='207'/>
+        <enumerator name='NL80211_ATTR_USE_RRM' value='208'/>
+        <enumerator name='NL80211_ATTR_WIPHY_DYN_ACK' value='209'/>
+        <enumerator name='NL80211_ATTR_TSID' value='210'/>
+        <enumerator name='NL80211_ATTR_USER_PRIO' value='211'/>
+        <enumerator name='NL80211_ATTR_ADMITTED_TIME' value='212'/>
+        <enumerator name='NL80211_ATTR_SMPS_MODE' value='213'/>
+        <enumerator name='NL80211_ATTR_OPER_CLASS' value='214'/>
+        <enumerator name='NL80211_ATTR_MAC_MASK' value='215'/>
+        <enumerator name='NL80211_ATTR_WIPHY_SELF_MANAGED_REG' value='216'/>
+        <enumerator name='NL80211_ATTR_EXT_FEATURES' value='217'/>
+        <enumerator name='NL80211_ATTR_SURVEY_RADIO_STATS' value='218'/>
+        <enumerator name='NL80211_ATTR_NETNS_FD' value='219'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_DELAY' value='220'/>
+        <enumerator name='NL80211_ATTR_REG_INDOOR' value='221'/>
+        <enumerator name='NL80211_ATTR_MAX_NUM_SCHED_SCAN_PLANS' value='222'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_PLAN_INTERVAL' value='223'/>
+        <enumerator name='NL80211_ATTR_MAX_SCAN_PLAN_ITERATIONS' value='224'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_PLANS' value='225'/>
+        <enumerator name='NL80211_ATTR_PBSS' value='226'/>
+        <enumerator name='NL80211_ATTR_BSS_SELECT' value='227'/>
+        <enumerator name='NL80211_ATTR_STA_SUPPORT_P2P_PS' value='228'/>
+        <enumerator name='NL80211_ATTR_PAD' value='229'/>
+        <enumerator name='NL80211_ATTR_IFTYPE_EXT_CAPA' value='230'/>
+        <enumerator name='NL80211_ATTR_MU_MIMO_GROUP_DATA' value='231'/>
+        <enumerator name='NL80211_ATTR_MU_MIMO_FOLLOW_MAC_ADDR' value='232'/>
+        <enumerator name='NL80211_ATTR_SCAN_START_TIME_TSF' value='233'/>
+        <enumerator name='NL80211_ATTR_SCAN_START_TIME_TSF_BSSID' value='234'/>
+        <enumerator name='NL80211_ATTR_MEASUREMENT_DURATION' value='235'/>
+        <enumerator name='NL80211_ATTR_MEASUREMENT_DURATION_MANDATORY' value='236'/>
+        <enumerator name='NL80211_ATTR_MESH_PEER_AID' value='237'/>
+        <enumerator name='NL80211_ATTR_NAN_MASTER_PREF' value='238'/>
+        <enumerator name='NL80211_ATTR_BANDS' value='239'/>
+        <enumerator name='NL80211_ATTR_NAN_FUNC' value='240'/>
+        <enumerator name='NL80211_ATTR_NAN_MATCH' value='241'/>
+        <enumerator name='NL80211_ATTR_FILS_KEK' value='242'/>
+        <enumerator name='NL80211_ATTR_FILS_NONCES' value='243'/>
+        <enumerator name='NL80211_ATTR_MULTICAST_TO_UNICAST_ENABLED' value='244'/>
+        <enumerator name='NL80211_ATTR_BSSID' value='245'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_RELATIVE_RSSI' value='246'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_RSSI_ADJUST' value='247'/>
+        <enumerator name='NL80211_ATTR_TIMEOUT_REASON' value='248'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_USERNAME' value='249'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_REALM' value='250'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_NEXT_SEQ_NUM' value='251'/>
+        <enumerator name='NL80211_ATTR_FILS_ERP_RRK' value='252'/>
+        <enumerator name='NL80211_ATTR_FILS_CACHE_ID' value='253'/>
+        <enumerator name='NL80211_ATTR_PMK' value='254'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MULTI' value='255'/>
+        <enumerator name='NL80211_ATTR_SCHED_SCAN_MAX_REQS' value='256'/>
+        <enumerator name='NL80211_ATTR_WANT_1X_4WAY_HS' value='257'/>
+        <enumerator name='NL80211_ATTR_PMKR0_NAME' value='258'/>
+        <enumerator name='NL80211_ATTR_PORT_AUTHORIZED' value='259'/>
+        <enumerator name='NL80211_ATTR_EXTERNAL_AUTH_ACTION' value='260'/>
+        <enumerator name='NL80211_ATTR_EXTERNAL_AUTH_SUPPORT' value='261'/>
+        <enumerator name='NL80211_ATTR_NSS' value='262'/>
+        <enumerator name='NL80211_ATTR_ACK_SIGNAL' value='263'/>
+        <enumerator name='NL80211_ATTR_CONTROL_PORT_OVER_NL80211' value='264'/>
+        <enumerator name='NL80211_ATTR_TXQ_STATS' value='265'/>
+        <enumerator name='NL80211_ATTR_TXQ_LIMIT' value='266'/>
+        <enumerator name='NL80211_ATTR_TXQ_MEMORY_LIMIT' value='267'/>
+        <enumerator name='NL80211_ATTR_TXQ_QUANTUM' value='268'/>
+        <enumerator name='NL80211_ATTR_HE_CAPABILITY' value='269'/>
+        <enumerator name='NL80211_ATTR_FTM_RESPONDER' value='270'/>
+        <enumerator name='NL80211_ATTR_FTM_RESPONDER_STATS' value='271'/>
+        <enumerator name='NL80211_ATTR_TIMEOUT' value='272'/>
+        <enumerator name='NL80211_ATTR_PEER_MEASUREMENTS' value='273'/>
+        <enumerator name='NL80211_ATTR_AIRTIME_WEIGHT' value='274'/>
+        <enumerator name='NL80211_ATTR_STA_TX_POWER_SETTING' value='275'/>
+        <enumerator name='NL80211_ATTR_STA_TX_POWER' value='276'/>
+        <enumerator name='NL80211_ATTR_SAE_PASSWORD' value='277'/>
+        <enumerator name='NL80211_ATTR_TWT_RESPONDER' value='278'/>
+        <enumerator name='NL80211_ATTR_HE_OBSS_PD' value='279'/>
+        <enumerator name='NL80211_ATTR_WIPHY_EDMG_CHANNELS' value='280'/>
+        <enumerator name='NL80211_ATTR_WIPHY_EDMG_BW_CONFIG' value='281'/>
+        <enumerator name='NL80211_ATTR_HE_6GHZ_CAPABILITY' value='282'/>
+        <enumerator name='__NL80211_ATTR_AFTER_LAST' value='283'/>
+        <enumerator name='NUM_NL80211_ATTR' value='283'/>
+        <enumerator name='NL80211_ATTR_MAX' value='282'/>
+      </enum-decl>
+      <pointer-type-def type-id='cc4b6920' size-in-bits='64' id='76db5996'/>
+      <function-decl name='cfg80211_vendor_cmd_reply' mangled-name='cfg80211_vendor_cmd_reply' filepath='net/wireless/nl80211.c' line='13225' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_vendor_cmd_reply'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/nl80211.c' line='13225' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cfg80211_tdls_oper_request' mangled-name='cfg80211_tdls_oper_request' filepath='net/wireless/nl80211.c' line='16719' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_tdls_oper_request'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16719' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16719' column='1'/>
+        <parameter type-id='ee1b00fc' name='oper' filepath='net/wireless/nl80211.c' line='16720' column='1'/>
+        <parameter type-id='1dc6a898' name='reason_code' filepath='net/wireless/nl80211.c' line='16721' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16721' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_rx_unprot_mlme_mgmt' mangled-name='cfg80211_rx_unprot_mlme_mgmt' filepath='net/wireless/nl80211.c' line='15180' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_rx_unprot_mlme_mgmt'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='15180' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15180' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15181' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_remain_on_channel_expired' mangled-name='cfg80211_remain_on_channel_expired' filepath='net/wireless/nl80211.c' line='15657' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_remain_on_channel_expired'>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/nl80211.c' line='15657' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15657' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15658' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15659' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ready_on_channel' mangled-name='cfg80211_ready_on_channel' filepath='net/wireless/nl80211.c' line='15643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ready_on_channel'>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/nl80211.c' line='15643' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15643' column='1'/>
+        <parameter type-id='ec00acfb' name='chan' filepath='net/wireless/nl80211.c' line='15644' column='1'/>
+        <parameter type-id='f0981eeb' name='duration' filepath='net/wireless/nl80211.c' line='15645' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15645' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_pmksa_candidate_notify' mangled-name='cfg80211_pmksa_candidate_notify' filepath='net/wireless/nl80211.c' line='16262' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_pmksa_candidate_notify'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16262' column='1'/>
+        <parameter type-id='95e97e5e' name='index' filepath='net/wireless/nl80211.c' line='16262' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16263' column='1'/>
+        <parameter type-id='b50a4934' name='preauth' filepath='net/wireless/nl80211.c' line='16263' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16263' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_new_sta' mangled-name='cfg80211_new_sta' filepath='net/wireless/nl80211.c' line='15683' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_new_sta'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='15683' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15683' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15684' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15684' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_mgmt_tx_status' mangled-name='cfg80211_mgmt_tx_status' filepath='net/wireless/nl80211.c' line='15891' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_mgmt_tx_status'>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <parameter type-id='91ce1af9' name='cookie' filepath='net/wireless/nl80211.c' line='15891' column='1'/>
+        <parameter type-id='bbaf3419' name='buf' filepath='net/wireless/nl80211.c' line='15892' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/nl80211.c' line='15892' column='1'/>
+        <parameter type-id='b50a4934' name='ack' filepath='net/wireless/nl80211.c' line='15892' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15892' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_gtk_rekey_notify' mangled-name='cfg80211_gtk_rekey_notify' filepath='net/wireless/nl80211.c' line='16205' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_gtk_rekey_notify'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16205' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/nl80211.c' line='16205' column='1'/>
+        <parameter type-id='bbaf3419' name='replay_ctr' filepath='net/wireless/nl80211.c' line='16206' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16206' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ft_event' mangled-name='cfg80211_ft_event' filepath='net/wireless/nl80211.c' line='16825' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ft_event'>
+        <parameter type-id='68a2d05b' name='netdev' filepath='net/wireless/nl80211.c' line='16825' column='1'/>
+        <parameter type-id='76db5996' name='ft_event' filepath='net/wireless/nl80211.c' line='16826' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_external_auth_request' mangled-name='cfg80211_external_auth_request' filepath='net/wireless/nl80211.c' line='16937' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_external_auth_request'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16937' column='1'/>
+        <parameter type-id='2b041d55' name='params' filepath='net/wireless/nl80211.c' line='16938' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16939' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='cfg80211_del_sta_sinfo' mangled-name='cfg80211_del_sta_sinfo' filepath='net/wireless/nl80211.c' line='15707' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_del_sta_sinfo'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='15707' column='1'/>
+        <parameter type-id='bbaf3419' name='mac_addr' filepath='net/wireless/nl80211.c' line='15707' column='1'/>
+        <parameter type-id='7af1dc96' name='sinfo' filepath='net/wireless/nl80211.c' line='15708' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='15708' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_cqm_rssi_notify' mangled-name='cfg80211_cqm_rssi_notify' filepath='net/wireless/nl80211.c' line='16050' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_cqm_rssi_notify'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16050' column='1'/>
+        <parameter type-id='b8189423' name='rssi_event' filepath='net/wireless/nl80211.c' line='16051' column='1'/>
+        <parameter type-id='a7832498' name='rssi_level' filepath='net/wireless/nl80211.c' line='16052' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16052' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_cqm_pktloss_notify' mangled-name='cfg80211_cqm_pktloss_notify' filepath='net/wireless/nl80211.c' line='16121' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_cqm_pktloss_notify'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16121' column='1'/>
+        <parameter type-id='bbaf3419' name='peer' filepath='net/wireless/nl80211.c' line='16122' column='1'/>
+        <parameter type-id='19c2251e' name='num_packets' filepath='net/wireless/nl80211.c' line='16122' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='16122' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_ch_switch_notify' mangled-name='cfg80211_ch_switch_notify' filepath='net/wireless/nl80211.c' line='16314' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_ch_switch_notify'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/nl80211.c' line='16314' column='1'/>
+        <parameter type-id='0953fbfe' name='chandef' filepath='net/wireless/nl80211.c' line='16315' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__cfg80211_send_event_skb' mangled-name='__cfg80211_send_event_skb' filepath='net/wireless/nl80211.c' line='9751' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_send_event_skb'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/nl80211.c' line='9751' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9751' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='__cfg80211_alloc_reply_skb' mangled-name='__cfg80211_alloc_reply_skb' filepath='net/wireless/nl80211.c' line='13208' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_alloc_reply_skb'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/nl80211.c' line='13208' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='13209' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='13210' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='13211' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+      <function-decl name='__cfg80211_alloc_event_skb' mangled-name='__cfg80211_alloc_event_skb' filepath='net/wireless/nl80211.c' line='9718' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__cfg80211_alloc_event_skb'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/nl80211.c' line='9718' column='1'/>
+        <parameter type-id='63c7e8e1' name='wdev' filepath='net/wireless/nl80211.c' line='9719' column='1'/>
+        <parameter type-id='187e1e49' name='cmd' filepath='net/wireless/nl80211.c' line='9720' column='1'/>
+        <parameter type-id='320b0ded' name='attr' filepath='net/wireless/nl80211.c' line='9721' column='1'/>
+        <parameter type-id='f0981eeb' name='portid' filepath='net/wireless/nl80211.c' line='9722' column='1'/>
+        <parameter type-id='95e97e5e' name='vendor_event_idx' filepath='net/wireless/nl80211.c' line='9723' column='1'/>
+        <parameter type-id='95e97e5e' name='approxlen' filepath='net/wireless/nl80211.c' line='9724' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/nl80211.c' line='9724' column='1'/>
+        <return type-id='0fbf3cfd'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/of.c' language='LANG_C89'>
+      <function-decl name='wiphy_read_of_freq_limits' mangled-name='wiphy_read_of_freq_limits' filepath='net/wireless/of.c' line='74' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_read_of_freq_limits'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/of.c' line='74' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/radiotap.c' language='LANG_C89'>
+      <class-decl name='ieee80211_radiotap_iterator' size-in-bits='704' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5266' column='1' id='61a98bcb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='_rtheader' type-id='e331b872' visibility='default' filepath='include/net/cfg80211.h' line='5267' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='_vns' type-id='9e168ad9' visibility='default' filepath='include/net/cfg80211.h' line='5268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='current_namespace' type-id='69268009' visibility='default' filepath='include/net/cfg80211.h' line='5269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='_arg' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='_next_ns_data' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='_next_bitmap' type-id='3e77f659' visibility='default' filepath='include/net/cfg80211.h' line='5272' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='this_arg' type-id='cf536864' visibility='default' filepath='include/net/cfg80211.h' line='5274' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='this_arg_index' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5275' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='this_arg_size' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='is_radiotap_ns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5278' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='_max_length' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='_arg_index' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='_bitmap_shifter' type-id='8f92235e' visibility='default' filepath='include/net/cfg80211.h' line='5282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='_reset_on_ext' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5283' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_header' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='26' column='1' id='683e4294'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='it_version' type-id='b96825af' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='it_pad' type-id='b96825af' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='it_len' type-id='23119536' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='it_present' type-id='2f162548' visibility='default' filepath='include/net/ieee80211_radiotap.h' line='45' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_vendor_namespaces' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5232' column='1' id='d50056ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='ns' type-id='69268009' visibility='default' filepath='include/net/cfg80211.h' line='5233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_ns' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5234' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_radiotap_namespace' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5225' column='1' id='e4b6e484'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='align_size' type-id='71ff2c88' visibility='default' filepath='include/net/cfg80211.h' line='5226' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='n_bits' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='5227' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='oui' type-id='8f92235e' visibility='default' filepath='include/net/cfg80211.h' line='5228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subns' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5229' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='radiotap_align_size' size-in-bits='8' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='5221' column='1' id='e9063f35'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='align' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='size' type-id='b96825af' visibility='default' filepath='include/net/cfg80211.h' line='5222' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2f162548' size-in-bits='64' id='3e77f659'/>
+      <qualified-type-def type-id='e4b6e484' const='yes' id='c6cde959'/>
+      <pointer-type-def type-id='c6cde959' size-in-bits='64' id='69268009'/>
+      <qualified-type-def type-id='d50056ec' const='yes' id='3dc3b549'/>
+      <pointer-type-def type-id='3dc3b549' size-in-bits='64' id='9e168ad9'/>
+      <qualified-type-def type-id='e9063f35' const='yes' id='18341672'/>
+      <pointer-type-def type-id='18341672' size-in-bits='64' id='71ff2c88'/>
+      <pointer-type-def type-id='683e4294' size-in-bits='64' id='e331b872'/>
+      <pointer-type-def type-id='61a98bcb' size-in-bits='64' id='db736e3b'/>
+      <function-decl name='ieee80211_radiotap_iterator_next' mangled-name='ieee80211_radiotap_iterator_next' filepath='net/wireless/radiotap.c' line='212' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radiotap_iterator_next'>
+        <parameter type-id='db736e3b' name='iterator' filepath='net/wireless/radiotap.c' line='213' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_radiotap_iterator_init' mangled-name='ieee80211_radiotap_iterator_init' filepath='net/wireless/radiotap.c' line='96' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_radiotap_iterator_init'>
+        <parameter type-id='db736e3b' name='iterator' filepath='net/wireless/radiotap.c' line='97' column='1'/>
+        <parameter type-id='e331b872' name='radiotap_header' filepath='net/wireless/radiotap.c' line='98' column='1'/>
+        <parameter type-id='95e97e5e' name='max_length' filepath='net/wireless/radiotap.c' line='99' column='1'/>
+        <parameter type-id='9e168ad9' name='vns' filepath='net/wireless/radiotap.c' line='99' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/reg.c' language='LANG_C89'>
+      <qualified-type-def type-id='a9d5f761' const='yes' id='d5bf2678'/>
+      <pointer-type-def type-id='d5bf2678' size-in-bits='64' id='cde95316'/>
+      <pointer-type-def type-id='5c28f25e' size-in-bits='64' id='c24e05b4'/>
+      <function-decl name='wiphy_apply_custom_regulatory' mangled-name='wiphy_apply_custom_regulatory' filepath='net/wireless/reg.c' line='2340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wiphy_apply_custom_regulatory'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='2340' column='1'/>
+        <parameter type-id='4e819401' name='regd' filepath='net/wireless/reg.c' line='2341' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='regulatory_set_wiphy_regd' mangled-name='regulatory_set_wiphy_regd' filepath='net/wireless/reg.c' line='3742' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulatory_set_wiphy_regd'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='3742' column='1'/>
+        <parameter type-id='c24e05b4' name='rd' filepath='net/wireless/reg.c' line='3743' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='regulatory_hint' mangled-name='regulatory_hint' filepath='net/wireless/reg.c' line='3011' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='regulatory_hint'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='3011' column='1'/>
+        <parameter type-id='80f4b756' name='alpha2' filepath='net/wireless/reg.c' line='3011' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='reg_initiator_name' mangled-name='reg_initiator_name' filepath='net/wireless/reg.c' line='1636' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='reg_initiator_name'>
+        <parameter type-id='790cc131' name='initiator' filepath='net/wireless/reg.c' line='1636' column='1'/>
+        <return type-id='80f4b756'/>
+      </function-decl>
+      <function-decl name='freq_reg_info' mangled-name='freq_reg_info' filepath='net/wireless/reg.c' line='1629' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='freq_reg_info'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/reg.c' line='1629' column='1'/>
+        <parameter type-id='19c2251e' name='center_freq' filepath='net/wireless/reg.c' line='1630' column='1'/>
+        <return type-id='cde95316'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr 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='2190' column='1' id='616d6efe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chan' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='2191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='scan_width' type-id='95d46034' visibility='default' filepath='include/net/cfg80211.h' line='2192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='signal' type-id='a7832498' visibility='default' filepath='include/net/cfg80211.h' line='2193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='boottime_ns' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='parent_tsf' type-id='91ce1af9' visibility='default' filepath='include/net/cfg80211.h' line='2195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='parent_bssid' type-id='cf1a4160' visibility='default' filepath='include/net/cfg80211.h' line='2196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='304'>
+          <var-decl name='chains' type-id='f9b06939' visibility='default' filepath='include/net/cfg80211.h' line='2197' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='312'>
+          <var-decl name='chain_signal' type-id='da004b74' visibility='default' filepath='include/net/cfg80211.h' line='2198' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_mgmt' size-in-bits='400' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='901' column='1' id='1aa7b3b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='frame_control' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='902' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='duration' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='903' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='da' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='sa' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='176'>
+          <var-decl name='seq_ctrl' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='u' type-id='3e125f89' visibility='default' filepath='include/linux/ieee80211.h' line='1062' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='208' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='908' column='1' id='3e125f89'>
+        <data-member access='public'>
+          <var-decl name='auth' type-id='8566e136' visibility='default' filepath='include/linux/ieee80211.h' line='915' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='deauth' type-id='4c024fcc' visibility='default' filepath='include/linux/ieee80211.h' line='918' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='assoc_req' type-id='cf904dca' visibility='default' filepath='include/linux/ieee80211.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='assoc_resp' type-id='316274c6' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reassoc_resp' type-id='316274c6' visibility='default' filepath='include/linux/ieee80211.h' line='931' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reassoc_req' type-id='41112f2f' visibility='default' filepath='include/linux/ieee80211.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='disassoc' type-id='4c024fcc' visibility='default' filepath='include/linux/ieee80211.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='beacon' type-id='00017149' visibility='default' filepath='include/linux/ieee80211.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='probe_req' type-id='f2111995' visibility='default' filepath='include/linux/ieee80211.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='probe_resp' type-id='00017149' visibility='default' filepath='include/linux/ieee80211.h' line='961' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='action' type-id='2af48f0d' visibility='default' filepath='include/linux/ieee80211.h' line='1061' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='909' column='1' id='8566e136'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='auth_alg' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='910' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='auth_transaction' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='status_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='914' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='916' column='1' id='4c024fcc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='917' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='919' column='1' id='cf904dca'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='920' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='listen_interval' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='923' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__3' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='925' column='1' id='316274c6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='927' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='aid' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='930' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__4' size-in-bits='80' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='932' column='1' id='41112f2f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='933' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='listen_interval' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='934' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='current_ap' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='935' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='937' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__6' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='942' column='1' id='00017149'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timestamp' type-id='a30e8d1f' visibility='default' filepath='include/linux/ieee80211.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='beacon_int' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='944' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='capab_info' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='948' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__7' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='950' column='1' id='f2111995'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='952' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__9' size-in-bits='208' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='962' column='1' id='2af48f0d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='category' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='963' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='u' type-id='333375e9' visibility='default' filepath='include/linux/ieee80211.h' line='1060' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='200' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='964' column='1' id='333375e9'>
+        <data-member access='public'>
+          <var-decl name='wme_action' type-id='9a7a1ecf' visibility='default' filepath='include/linux/ieee80211.h' line='970' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='chan_switch' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='974' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ext_chan_switch' type-id='307ae286' visibility='default' filepath='include/linux/ieee80211.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='measurement' type-id='5d1c28f0' visibility='default' filepath='include/linux/ieee80211.h' line='986' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='addba_req' type-id='1601e9d5' visibility='default' filepath='include/linux/ieee80211.h' line='995' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='addba_resp' type-id='27fc2f14' visibility='default' filepath='include/linux/ieee80211.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='delba' type-id='c049ac97' visibility='default' filepath='include/linux/ieee80211.h' line='1007' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='self_prot' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='1011' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mesh_action' type-id='936c74b9' visibility='default' filepath='include/linux/ieee80211.h' line='1015' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='sa_query' type-id='e82df61b' visibility='default' filepath='include/linux/ieee80211.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ht_smps' type-id='73405c6c' visibility='default' filepath='include/linux/ieee80211.h' line='1023' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ht_notify_cw' type-id='2da5a4fb' visibility='default' filepath='include/linux/ieee80211.h' line='1027' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tdls_discover_resp' type-id='37075bb2' visibility='default' filepath='include/linux/ieee80211.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vht_opmode_notif' type-id='5a443366' visibility='default' filepath='include/linux/ieee80211.h' line='1037' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vht_group_notif' type-id='c9995313' visibility='default' filepath='include/linux/ieee80211.h' line='1042' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='tpc_report' type-id='20ea48a2' visibility='default' filepath='include/linux/ieee80211.h' line='1049' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ftm' type-id='8fa1a00c' visibility='default' filepath='include/linux/ieee80211.h' line='1059' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__10' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='965' column='1' id='9a7a1ecf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='966' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='967' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='968' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='969' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__11' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='971' column='1' id='936c74b9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='972' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='973' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__12' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='975' column='1' id='307ae286'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='976' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='data' type-id='59019c69' visibility='default' filepath='include/linux/ieee80211.h' line='977' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='978' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_ext_chansw_ie' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='738' column='1' id='59019c69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='new_operating_class' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='new_ch_num' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='741' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='count' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='742' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__13' size-in-bits='56' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='980' column='1' id='5d1c28f0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='981' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='982' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='element_id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='983' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='length' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='984' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='msr_elem' type-id='1981efe5' visibility='default' filepath='include/linux/ieee80211.h' line='985' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_msrment_ie' size-in-bits='24' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='715' column='1' id='1981efe5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='type' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='718' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='request' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='719' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__14' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='987' column='1' id='1601e9d5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='988' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='989' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='capab' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='990' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='timeout' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='991' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='start_seq_num' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='992' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='994' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__15' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='996' column='1' id='27fc2f14'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='997' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='998' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='status' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='999' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='capab' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1000' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='timeout' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1001' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__16' size-in-bits='40' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1003' column='1' id='c049ac97'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='params' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='reason_code' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1006' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__19' size-in-bits='24' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1016' column='1' id='e82df61b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='trans_id' type-id='cf114704' visibility='default' filepath='include/linux/ieee80211.h' line='1018' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__20' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1020' column='1' id='73405c6c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='smps_control' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1022' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__21' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1024' column='1' id='2da5a4fb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='chanwidth' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1026' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__22' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1028' column='1' id='37075bb2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1029' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='capability' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1032' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__23' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1034' column='1' id='5a443366'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1035' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='operating_mode' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1036' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__24' size-in-bits='200' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1038' column='1' id='c9995313'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='membership' type-id='d2f7b56a' visibility='default' filepath='include/linux/ieee80211.h' line='1040' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='position' type-id='0d8415b5' visibility='default' filepath='include/linux/ieee80211.h' line='1041' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__25' size-in-bits='48' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1043' column='1' id='20ea48a2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1044' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='tpc_elem_id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1046' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tpc_elem_length' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1047' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='tpc' type-id='8b43e65f' visibility='default' filepath='include/linux/ieee80211.h' line='1048' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='ieee80211_tpc_report_ie' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='888' column='1' id='8b43e65f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tx_power' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='link_margin' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='890' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__26' size-in-bits='152' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/linux/ieee80211.h' line='1050' column='1' id='8fa1a00c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='action_code' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='dialog_token' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='follow_up' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='tod' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1054' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='72'>
+          <var-decl name='toa' type-id='cf1a4160' visibility='default' filepath='include/linux/ieee80211.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='tod_error' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='toa_error' type-id='23119536' visibility='default' filepath='include/linux/ieee80211.h' line='1057' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='152'>
+          <var-decl name='variable' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='1058' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='cfg80211_bss_frame_type' filepath='include/net/cfg80211.h' line='5890' column='1' id='b556f108'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <enum-decl name='ieee80211_privacy' filepath='include/net/cfg80211.h' line='223' column='1' id='d2b455cb'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='IEEE80211_PRIVACY_ON' value='0'/>
+        <enumerator name='IEEE80211_PRIVACY_OFF' value='1'/>
+        <enumerator name='IEEE80211_PRIVACY_ANY' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='616d6efe' size-in-bits='64' id='6ff43814'/>
+      <pointer-type-def type-id='b1493ece' size-in-bits='64' id='40cd17b4'/>
+      <pointer-type-def type-id='1aa7b3b9' size-in-bits='64' id='57a568d1'/>
+      <function-decl name='cfg80211_put_bss' mangled-name='cfg80211_put_bss' filepath='net/wireless/scan.c' line='1947' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_put_bss'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1947' column='1'/>
+        <parameter type-id='bda81d86' name='pub' filepath='net/wireless/scan.c' line='1947' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_unlink_bss' mangled-name='cfg80211_unlink_bss' filepath='net/wireless/scan.c' line='1963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_unlink_bss'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1963' column='1'/>
+        <parameter type-id='bda81d86' name='pub' filepath='net/wireless/scan.c' line='1963' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_sched_scan_stopped' mangled-name='cfg80211_sched_scan_stopped' filepath='net/wireless/scan.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_sched_scan_stopped'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='660' column='1'/>
+        <parameter type-id='91ce1af9' name='reqid' filepath='net/wireless/scan.c' line='660' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_sched_scan_results' mangled-name='cfg80211_sched_scan_results' filepath='net/wireless/scan.c' line='630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_sched_scan_results'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='630' column='1'/>
+        <parameter type-id='91ce1af9' name='reqid' filepath='net/wireless/scan.c' line='630' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_scan_done' mangled-name='cfg80211_scan_done' filepath='net/wireless/scan.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_scan_done'>
+        <parameter type-id='a9e8b173' name='request' filepath='net/wireless/scan.c' line='528' column='1'/>
+        <parameter type-id='40cd17b4' name='info' filepath='net/wireless/scan.c' line='529' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_inform_bss_frame_data' mangled-name='cfg80211_inform_bss_frame_data' filepath='net/wireless/scan.c' line='1881' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_inform_bss_frame_data'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1881' column='1'/>
+        <parameter type-id='6ff43814' name='data' filepath='net/wireless/scan.c' line='1882' column='1'/>
+        <parameter type-id='57a568d1' name='mgmt' filepath='net/wireless/scan.c' line='1883' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='net/wireless/scan.c' line='1883' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/scan.c' line='1884' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_inform_bss_data' mangled-name='cfg80211_inform_bss_data' filepath='net/wireless/scan.c' line='1662' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_inform_bss_data'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='1662' column='1'/>
+        <parameter type-id='6ff43814' name='data' filepath='net/wireless/scan.c' line='1663' column='1'/>
+        <parameter type-id='b556f108' name='ftype' filepath='net/wireless/scan.c' line='1664' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/scan.c' line='1665' column='1'/>
+        <parameter type-id='91ce1af9' name='tsf' filepath='net/wireless/scan.c' line='1665' column='1'/>
+        <parameter type-id='1dc6a898' name='capability' filepath='net/wireless/scan.c' line='1665' column='1'/>
+        <parameter type-id='1dc6a898' name='beacon_interval' filepath='net/wireless/scan.c' line='1666' column='1'/>
+        <parameter type-id='bbaf3419' name='ie' filepath='net/wireless/scan.c' line='1666' column='1'/>
+        <parameter type-id='b59d7dce' name='ielen' filepath='net/wireless/scan.c' line='1666' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/scan.c' line='1667' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_get_bss' mangled-name='cfg80211_get_bss' filepath='net/wireless/scan.c' line='916' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_get_bss'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/scan.c' line='916' column='1'/>
+        <parameter type-id='ec00acfb' name='channel' filepath='net/wireless/scan.c' line='917' column='1'/>
+        <parameter type-id='bbaf3419' name='bssid' filepath='net/wireless/scan.c' line='918' column='1'/>
+        <parameter type-id='bbaf3419' name='ssid' filepath='net/wireless/scan.c' line='919' column='1'/>
+        <parameter type-id='b59d7dce' name='ssid_len' filepath='net/wireless/scan.c' line='919' column='1'/>
+        <parameter type-id='cb952348' name='bss_type' filepath='net/wireless/scan.c' line='920' column='1'/>
+        <parameter type-id='d2b455cb' name='privacy' filepath='net/wireless/scan.c' line='921' column='1'/>
+        <return type-id='bda81d86'/>
+      </function-decl>
+      <function-decl name='cfg80211_find_vendor_elem' mangled-name='cfg80211_find_vendor_elem' filepath='net/wireless/scan.c' line='736' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_find_vendor_elem'>
+        <parameter type-id='f0981eeb' name='oui' filepath='net/wireless/scan.c' line='736' column='1'/>
+        <parameter type-id='95e97e5e' name='oui_type' filepath='net/wireless/scan.c' line='736' column='1'/>
+        <parameter type-id='bbaf3419' name='ies' filepath='net/wireless/scan.c' line='737' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/wireless/scan.c' line='738' column='1'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <function-decl name='cfg80211_find_elem_match' mangled-name='cfg80211_find_elem_match' filepath='net/wireless/scan.c' line='720' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_find_elem_match'>
+        <parameter type-id='f9b06939' name='eid' filepath='net/wireless/scan.c' line='720' column='1'/>
+        <parameter type-id='bbaf3419' name='ies' filepath='net/wireless/scan.c' line='720' column='1'/>
+        <parameter type-id='f0981eeb' name='len' filepath='net/wireless/scan.c' line='720' column='1'/>
+        <parameter type-id='bbaf3419' name='match' filepath='net/wireless/scan.c' line='721' column='1'/>
+        <parameter type-id='f0981eeb' name='match_len' filepath='net/wireless/scan.c' line='721' column='1'/>
+        <parameter type-id='f0981eeb' name='match_offset' filepath='net/wireless/scan.c' line='722' column='1'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <pointer-type-def type-id='e8ce2004' size-in-bits='64' id='aa7ca86a'/>
+      <qualified-type-def type-id='251eca3f' const='yes' id='e8ce2004'/>
+      <class-decl name='element' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3449' column='1' id='251eca3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='datalen' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='3452' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr 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='08f5ca1a'>
+        <underlying-type type-id='9cac1fee'/>
+        <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>
+      <class-decl name='cfg80211_roam_info' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='6726' column='1' id='883d1dc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channel' type-id='ec00acfb' visibility='default' filepath='include/net/cfg80211.h' line='6727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='6728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6731' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resp_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6732' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resp_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6733' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fils' type-id='73962ae2' visibility='default' filepath='include/net/cfg80211.h' line='6734' 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='6527' column='1' id='73962ae2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kek' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6528' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='kek_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6529' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='update_erp_next_seq_num' type-id='b50a4934' visibility='default' filepath='include/net/cfg80211.h' line='6530' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='erp_next_seq_num' type-id='1dc6a898' visibility='default' filepath='include/net/cfg80211.h' line='6531' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pmk' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6532' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='pmk_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6533' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='pmkid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6534' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='cfg80211_connect_resp_params' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/net/cfg80211.h' line='6566' column='1' id='77e8064c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/net/cfg80211.h' line='6567' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='bssid' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6568' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bss' type-id='bda81d86' visibility='default' filepath='include/net/cfg80211.h' line='6569' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='req_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6570' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='req_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6571' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='resp_ie' type-id='bbaf3419' visibility='default' filepath='include/net/cfg80211.h' line='6572' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='resp_ie_len' type-id='b59d7dce' visibility='default' filepath='include/net/cfg80211.h' line='6573' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='fils' type-id='73962ae2' visibility='default' filepath='include/net/cfg80211.h' line='6574' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='timeout_reason' type-id='e4422617' visibility='default' filepath='include/net/cfg80211.h' line='6575' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='nl80211_timeout_reason' filepath='include/uapi/linux/nl80211.h' line='5586' column='1' id='e4422617'>
+        <underlying-type type-id='9cac1fee'/>
+        <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='77e8064c' size-in-bits='64' id='b1d9990a'/>
+      <pointer-type-def type-id='883d1dc6' size-in-bits='64' id='e88825dc'/>
+      <function-decl name='cfg80211_roamed' mangled-name='cfg80211_roamed' filepath='net/wireless/sme.c' line='956' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_roamed'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/sme.c' line='956' column='1'/>
+        <parameter type-id='e88825dc' name='info' filepath='net/wireless/sme.c' line='956' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='957' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_disconnected' mangled-name='cfg80211_disconnected' filepath='net/wireless/sme.c' line='1130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_disconnected'>
+        <parameter type-id='68a2d05b' name='dev' filepath='net/wireless/sme.c' line='1130' column='1'/>
+        <parameter type-id='1dc6a898' name='reason' filepath='net/wireless/sme.c' line='1130' column='1'/>
+        <parameter type-id='bbaf3419' name='ie' filepath='net/wireless/sme.c' line='1131' column='1'/>
+        <parameter type-id='b59d7dce' name='ie_len' filepath='net/wireless/sme.c' line='1131' column='1'/>
+        <parameter type-id='b50a4934' name='locally_generated' filepath='net/wireless/sme.c' line='1132' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='1132' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <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='68a2d05b' name='dev' filepath='net/wireless/sme.c' line='788' column='1'/>
+        <parameter type-id='b1d9990a' name='params' filepath='net/wireless/sme.c' line='789' column='1'/>
+        <parameter type-id='3eb7c31c' name='gfp' filepath='net/wireless/sme.c' line='790' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/wireless/util.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='ea86de29' size-in-bits='48' id='51f2d827'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <class-decl name='element' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/linux/ieee80211.h' line='3449' column='1' id='251eca3f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='datalen' type-id='f9b06939' visibility='default' filepath='include/linux/ieee80211.h' line='3451' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='data' type-id='29c3368c' visibility='default' filepath='include/linux/ieee80211.h' line='3452' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='251eca3f' const='yes' id='e8ce2004'/>
+      <pointer-type-def type-id='e8ce2004' size-in-bits='64' id='aa7ca86a'/>
+      <pointer-type-def type-id='1c00b436' size-in-bits='64' id='f61f0f6c'/>
+      <pointer-type-def type-id='5ece574c' size-in-bits='64' id='185e765a'/>
+      <var-decl name='rfc1042_header' type-id='51f2d827' mangled-name='rfc1042_header' visibility='default' filepath='net/wireless/util.c' line='2026' column='1' elf-symbol-id='rfc1042_header'/>
+      <var-decl name='bridge_tunnel_header' type-id='51f2d827' mangled-name='bridge_tunnel_header' visibility='default' filepath='net/wireless/util.c' line='2031' column='1' elf-symbol-id='bridge_tunnel_header'/>
+      <function-decl name='ieee80211_hdrlen' mangled-name='ieee80211_hdrlen' filepath='net/wireless/util.c' line='420' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_hdrlen'>
+        <parameter type-id='23119536' name='fc' filepath='net/wireless/util.c' line='420' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ieee80211_get_hdrlen_from_skb' mangled-name='ieee80211_get_hdrlen_from_skb' filepath='net/wireless/util.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_hdrlen_from_skb'>
+        <parameter type-id='11f4a000' name='skb' filepath='net/wireless/util.c' line='461' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='ieee80211_get_channel_khz' mangled-name='ieee80211_get_channel_khz' filepath='net/wireless/util.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_get_channel_khz'>
+        <parameter type-id='666fb412' name='wiphy' filepath='net/wireless/util.c' line='138' column='1'/>
+        <parameter type-id='19c2251e' name='freq' filepath='net/wireless/util.c' line='139' column='1'/>
+        <return type-id='ec00acfb'/>
+      </function-decl>
+      <function-decl name='ieee80211_freq_khz_to_channel' mangled-name='ieee80211_freq_khz_to_channel' filepath='net/wireless/util.c' line='112' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_freq_khz_to_channel'>
+        <parameter type-id='19c2251e' name='freq' filepath='net/wireless/util.c' line='112' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_data_to_8023_exthdr' mangled-name='ieee80211_data_to_8023_exthdr' filepath='net/wireless/util.c' line='497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_data_to_8023_exthdr'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='497' column='1'/>
+        <parameter type-id='f61f0f6c' name='ehdr' filepath='net/wireless/util.c' line='497' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/util.c' line='498' column='1'/>
+        <parameter type-id='86505f90' name='iftype' filepath='net/wireless/util.c' line='498' column='1'/>
+        <parameter type-id='f9b06939' name='data_offset' filepath='net/wireless/util.c' line='499' column='1'/>
+        <parameter type-id='b50a4934' name='is_amsdu' filepath='net/wireless/util.c' line='499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ieee80211_channel_to_freq_khz' mangled-name='ieee80211_channel_to_freq_khz' filepath='net/wireless/util.c' line='75' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_channel_to_freq_khz'>
+        <parameter type-id='95e97e5e' name='chan' filepath='net/wireless/util.c' line='75' column='1'/>
+        <parameter type-id='3eaa0294' name='band' filepath='net/wireless/util.c' line='75' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+      <function-decl name='ieee80211_bss_get_elem' mangled-name='ieee80211_bss_get_elem' filepath='net/wireless/util.c' line='865' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_bss_get_elem'>
+        <parameter type-id='bda81d86' name='bss' filepath='net/wireless/util.c' line='865' column='1'/>
+        <parameter type-id='f9b06939' name='id' filepath='net/wireless/util.c' line='865' column='1'/>
+        <return type-id='aa7ca86a'/>
+      </function-decl>
+      <function-decl name='ieee80211_amsdu_to_8023s' mangled-name='ieee80211_amsdu_to_8023s' filepath='net/wireless/util.c' line='700' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ieee80211_amsdu_to_8023s'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='700' column='1'/>
+        <parameter type-id='03c386c6' name='list' filepath='net/wireless/util.c' line='700' column='1'/>
+        <parameter type-id='bbaf3419' name='addr' filepath='net/wireless/util.c' line='701' column='1'/>
+        <parameter type-id='86505f90' name='iftype' filepath='net/wireless/util.c' line='701' column='1'/>
+        <parameter type-id='20f5f452' name='extra_headroom' filepath='net/wireless/util.c' line='702' column='1'/>
+        <parameter type-id='bbaf3419' name='check_da' filepath='net/wireless/util.c' line='703' column='1'/>
+        <parameter type-id='bbaf3419' name='check_sa' filepath='net/wireless/util.c' line='703' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='cfg80211_classify8021d' mangled-name='cfg80211_classify8021d' filepath='net/wireless/util.c' line='787' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_classify8021d'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/wireless/util.c' line='787' column='1'/>
+        <parameter type-id='794da86a' name='qos_map' filepath='net/wireless/util.c' line='788' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='cfg80211_calculate_bitrate' mangled-name='cfg80211_calculate_bitrate' filepath='net/wireless/util.c' line='1355' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cfg80211_calculate_bitrate'>
+        <parameter type-id='185e765a' name='rate' filepath='net/wireless/util.c' line='1355' column='1'/>
+        <return type-id='19c2251e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_algo.c' language='LANG_C89'>
+      <class-decl name='xfrm_algo_desc' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1381' column='1' id='e8649a20'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compat' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='available' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='1384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='pfkey_supported' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='1385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='uinfo' type-id='2169229a' visibility='default' filepath='include/net/xfrm.h' line='1391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='desc' type-id='731caba6' visibility='default' filepath='include/net/xfrm.h' line='1392' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/net/xfrm.h' line='1386' column='1' id='2169229a'>
+        <data-member access='public'>
+          <var-decl name='aead' type-id='71694cb7' visibility='default' filepath='include/net/xfrm.h' line='1387' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='auth' type-id='8408b0cc' visibility='default' filepath='include/net/xfrm.h' line='1388' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='encr' type-id='9dbf2e50' visibility='default' filepath='include/net/xfrm.h' line='1389' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='comp' type-id='b9ac86db' visibility='default' filepath='include/net/xfrm.h' line='1390' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='xfrm_algo_aead_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1361' column='1' id='71694cb7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='geniv' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='icv_truncbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1363' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_auth_info' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1366' column='1' id='8408b0cc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='icv_truncbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='icv_fullbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1368' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_encr_info' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1371' column='1' id='9dbf2e50'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='geniv' type-id='26a90f95' visibility='default' filepath='include/net/xfrm.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='blockbits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='defkeybits' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1374' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='xfrm_algo_comp_info' size-in-bits='16' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='1377' column='1' id='b9ac86db'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='threshold' type-id='1dc6a898' visibility='default' filepath='include/net/xfrm.h' line='1378' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='sadb_alg' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='142' column='1' id='731caba6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sadb_alg_id' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='sadb_alg_ivlen' type-id='8f048e17' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sadb_alg_minbits' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sadb_alg_maxbits' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='48'>
+          <var-decl name='sadb_alg_reserved' type-id='d315442e' visibility='default' filepath='include/uapi/linux/pfkeyv2.h' line='147' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e8649a20' size-in-bits='64' id='dc64b956'/>
+      <function-decl name='xfrm_aalg_get_byname' mangled-name='xfrm_aalg_get_byname' filepath='net/xfrm/xfrm_algo.c' line='705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_aalg_get_byname'>
+        <parameter type-id='80f4b756' name='name' filepath='net/xfrm/xfrm_algo.c' line='705' column='1'/>
+        <parameter type-id='95e97e5e' name='probe' filepath='net/xfrm/xfrm_algo.c' line='705' column='1'/>
+        <return type-id='dc64b956'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_input.c' language='LANG_C89'>
+      <function-decl name='xfrm_input' mangled-name='xfrm_input' filepath='net/xfrm/xfrm_input.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_input'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_input.c' line='455' column='1'/>
+        <parameter type-id='95e97e5e' name='nexthdr' filepath='net/xfrm/xfrm_input.c' line='455' column='1'/>
+        <parameter type-id='78a133c2' name='spi' filepath='net/xfrm/xfrm_input.c' line='455' column='1'/>
+        <parameter type-id='95e97e5e' name='encap_type' filepath='net/xfrm/xfrm_input.c' line='455' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm_input_resume' mangled-name='xfrm_input_resume' filepath='net/xfrm/xfrm_input.c' line='753' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_input_resume'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_input.c' line='753' column='1'/>
+        <parameter type-id='95e97e5e' name='nexthdr' filepath='net/xfrm/xfrm_input.c' line='753' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_ipcomp.c' language='LANG_C89'>
+      <function-decl name='ipcomp_output' mangled-name='ipcomp_output' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_output'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_ipcomp.c' line='167' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipcomp_input' mangled-name='ipcomp_input' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_input'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1'/>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_ipcomp.c' line='106' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipcomp_init_state' mangled-name='ipcomp_init_state' filepath='net/xfrm/xfrm_ipcomp.c' line='337' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_init_state'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='ipcomp_destroy' mangled-name='ipcomp_destroy' filepath='net/xfrm/xfrm_ipcomp.c' line='324' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='ipcomp_destroy'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_ipcomp.c' line='324' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_output.c' language='LANG_C89'>
+      <function-decl name='xfrm_output_resume' mangled-name='xfrm_output_resume' filepath='net/xfrm/xfrm_output.c' line='500' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_output_resume'>
+        <parameter type-id='0fbf3cfd' name='skb' filepath='net/xfrm/xfrm_output.c' line='500' column='1'/>
+        <parameter type-id='95e97e5e' name='err' filepath='net/xfrm/xfrm_output.c' line='500' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_policy.c' language='LANG_C89'>
+      <function-decl name='xfrm_lookup' mangled-name='xfrm_lookup' filepath='net/xfrm/xfrm_policy.c' line='3170' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_lookup'>
+        <parameter type-id='a2bff676' name='net' filepath='net/xfrm/xfrm_policy.c' line='3170' column='1'/>
+        <parameter type-id='141b6427' name='dst_orig' filepath='net/xfrm/xfrm_policy.c' line='3170' column='1'/>
+        <parameter type-id='c76694b7' name='fl' filepath='net/xfrm/xfrm_policy.c' line='3171' column='1'/>
+        <parameter type-id='78e7cf52' name='sk' filepath='net/xfrm/xfrm_policy.c' line='3171' column='1'/>
+        <parameter type-id='95e97e5e' name='flags' filepath='net/xfrm/xfrm_policy.c' line='3172' column='1'/>
+        <return type-id='141b6427'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='net/xfrm/xfrm_state.c' language='LANG_C89'>
+      <class-decl name='xfrm_state_afinfo' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/net/xfrm.h' line='348' column='1' id='ed84f24e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='family' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='proto' type-id='f9b06939' visibility='default' filepath='include/net/xfrm.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='type_offload_esp' type-id='2f8b61b4' visibility='default' filepath='include/net/xfrm.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type_esp' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='type_ipip' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='type_ipip6' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='type_comp' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='type_ah' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='type_routing' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type_dstopts' type-id='4e812b7a' visibility='default' filepath='include/net/xfrm.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='output' type-id='0023218e' visibility='default' filepath='include/net/xfrm.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='output_finish' type-id='a0f5247f' visibility='default' filepath='include/net/xfrm.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='extract_input' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='extract_output' type-id='5e185d4c' visibility='default' filepath='include/net/xfrm.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='transport_finish' type-id='0aeca82c' visibility='default' filepath='include/net/xfrm.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='local_error' type-id='e4b24123' visibility='default' filepath='include/net/xfrm.h' line='370' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='c210d497' const='yes' id='586f31a7'/>
+      <pointer-type-def type-id='586f31a7' size-in-bits='64' id='c40b00f7'/>
+      <pointer-type-def type-id='ed84f24e' size-in-bits='64' id='1ec7f524'/>
+      <function-decl name='__xfrm_state_destroy' mangled-name='__xfrm_state_destroy' filepath='net/xfrm/xfrm_state.c' line='640' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__xfrm_state_destroy'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_state.c' line='640' column='1'/>
+        <parameter type-id='b50a4934' name='sync' filepath='net/xfrm/xfrm_state.c' line='640' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm_unregister_type' mangled-name='xfrm_unregister_type' filepath='net/xfrm/xfrm_state.c' line='227' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_unregister_type'>
+        <parameter type-id='4e812b7a' name='type' filepath='net/xfrm/xfrm_state.c' line='227' column='1'/>
+        <parameter type-id='8efea9e5' name='family' filepath='net/xfrm/xfrm_state.c' line='227' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm_register_type' mangled-name='xfrm_register_type' filepath='net/xfrm/xfrm_state.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_register_type'>
+        <parameter type-id='4e812b7a' name='type' filepath='net/xfrm/xfrm_state.c' line='181' column='1'/>
+        <parameter type-id='8efea9e5' name='family' filepath='net/xfrm/xfrm_state.c' line='181' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='xfrm_state_afinfo_get_rcu' mangled-name='xfrm_state_afinfo_get_rcu' filepath='net/xfrm/xfrm_state.c' line='2477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_afinfo_get_rcu'>
+        <parameter type-id='f0981eeb' name='family' filepath='net/xfrm/xfrm_state.c' line='2477' column='1'/>
+        <return type-id='1ec7f524'/>
+      </function-decl>
+      <function-decl name='xfrm_state_lookup' mangled-name='xfrm_state_lookup' filepath='net/xfrm/xfrm_state.c' line='1759' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_lookup'>
+        <parameter type-id='a2bff676' name='net' filepath='net/xfrm/xfrm_state.c' line='1759' column='1'/>
+        <parameter type-id='19c2251e' name='mark' filepath='net/xfrm/xfrm_state.c' line='1759' column='1'/>
+        <parameter type-id='c40b00f7' name='daddr' filepath='net/xfrm/xfrm_state.c' line='1759' column='1'/>
+        <parameter type-id='78a133c2' name='spi' filepath='net/xfrm/xfrm_state.c' line='1759' column='1'/>
+        <parameter type-id='f9b06939' name='proto' filepath='net/xfrm/xfrm_state.c' line='1760' column='1'/>
+        <parameter type-id='8efea9e5' name='family' filepath='net/xfrm/xfrm_state.c' line='1760' column='1'/>
+        <return type-id='328dda6e'/>
+      </function-decl>
+      <function-decl name='xfrm_state_insert' mangled-name='xfrm_state_insert' filepath='net/xfrm/xfrm_state.c' line='1293' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_insert'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_state.c' line='1293' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='xfrm_state_alloc' mangled-name='xfrm_state_alloc' filepath='net/xfrm/xfrm_state.c' line='610' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_state_alloc'>
+        <parameter type-id='a2bff676' name='net' filepath='net/xfrm/xfrm_state.c' line='610' column='1'/>
+        <return type-id='328dda6e'/>
+      </function-decl>
+      <function-decl name='xfrm_init_state' mangled-name='xfrm_init_state' filepath='net/xfrm/xfrm_state.c' line='2637' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='xfrm_init_state'>
+        <parameter type-id='328dda6e' name='x' filepath='net/xfrm/xfrm_state.c' line='2637' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/inode.c' language='LANG_C89'>
+      <function-decl name='securityfs_remove' mangled-name='securityfs_remove' filepath='security/inode.c' line='295' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_remove'>
+        <parameter type-id='27675065' name='dentry' filepath='security/inode.c' line='295' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='securityfs_create_file' mangled-name='securityfs_create_file' filepath='security/inode.c' line='200' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_create_file'>
+        <parameter type-id='80f4b756' name='name' filepath='security/inode.c' line='200' column='1'/>
+        <parameter type-id='2594b00f' name='mode' filepath='security/inode.c' line='200' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='security/inode.c' line='201' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='security/inode.c' line='201' column='1'/>
+        <parameter type-id='61758ee5' name='fops' filepath='security/inode.c' line='202' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+      <function-decl name='securityfs_create_dir' mangled-name='securityfs_create_dir' filepath='security/inode.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='securityfs_create_dir'>
+        <parameter type-id='80f4b756' name='name' filepath='security/inode.c' line='228' column='1'/>
+        <parameter type-id='27675065' name='parent' filepath='security/inode.c' line='228' column='1'/>
+        <return type-id='27675065'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/keys/key.c' language='LANG_C89'>
+      <class-decl name='key_preparsed_payload' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='32' column='1' id='dc409042'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='description' type-id='26a90f95' visibility='default' filepath='include/linux/key-type.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='payload' type-id='2888d74a' visibility='default' filepath='include/linux/key-type.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='datalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='quotalen' type-id='b59d7dce' visibility='default' filepath='include/linux/key-type.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='expiry' type-id='1afd27ac' visibility='default' filepath='include/linux/key-type.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='key_match_data' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/linux/key-type.h' line='46' column='1' id='a7db2a27'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cmp' type-id='a829f496' visibility='default' filepath='include/linux/key-type.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='raw_data' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='preparsed' type-id='eaa32e2f' visibility='default' filepath='include/linux/key-type.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='lookup_type' type-id='f0981eeb' visibility='default' filepath='include/linux/key-type.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='request_key_actor_t' type-id='a4946104' filepath='include/linux/key-type.h' line='41' column='1' id='99147724'/>
+      <class-decl name='kernel_pkey_params' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/linux/keyctl.h' line='29' column='1' id='e8d98129'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='204a4632' visibility='default' filepath='include/linux/keyctl.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='encoding' type-id='80f4b756' visibility='default' filepath='include/linux/keyctl.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hash_algo' type-id='80f4b756' visibility='default' filepath='include/linux/keyctl.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='26a90f95' visibility='default' filepath='include/linux/keyctl.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='in_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='' type-id='05c0f8b7' visibility='default' filepath='include/linux/keyctl.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='op' type-id='eec170ff' visibility='default' filepath='include/linux/keyctl.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='32' is-anonymous='yes' visibility='default' filepath='include/linux/keyctl.h' line='35' column='1' id='05c0f8b7'>
+        <data-member access='public'>
+          <var-decl name='out_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='in2_len' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='37' column='1'/>
+        </data-member>
+      </union-decl>
+      <enum-decl name='kernel_pkey_operation' filepath='include/linux/keyctl.h' line='22' column='1' id='eec170ff'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='kernel_pkey_encrypt' value='0'/>
+        <enumerator name='kernel_pkey_decrypt' value='1'/>
+        <enumerator name='kernel_pkey_sign' value='2'/>
+        <enumerator name='kernel_pkey_verify' value='3'/>
+      </enum-decl>
+      <class-decl name='kernel_pkey_query' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/linux/keyctl.h' line='13' column='1' id='8f138471'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='supported_ops' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='14' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='key_size' type-id='3f1a6b60' visibility='default' filepath='include/linux/keyctl.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_data_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='80'>
+          <var-decl name='max_sig_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_enc_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='max_dec_size' type-id='d315442e' visibility='default' filepath='include/linux/keyctl.h' line='19' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='e8d98129' const='yes' id='cc458304'/>
+      <pointer-type-def type-id='cc458304' size-in-bits='64' id='bf6d816a'/>
+      <qualified-type-def type-id='128d0ac4' const='yes' id='fc8e93cb'/>
+      <pointer-type-def type-id='fc8e93cb' size-in-bits='64' id='7572cb33'/>
+      <qualified-type-def type-id='a7db2a27' const='yes' id='ec05f10e'/>
+      <pointer-type-def type-id='ec05f10e' size-in-bits='64' id='b15a9bac'/>
+      <pointer-type-def type-id='5113b296' size-in-bits='64' id='70487b28'/>
+      <pointer-type-def type-id='690d3bc2' size-in-bits='64' id='b6633a3c'/>
+      <pointer-type-def type-id='1a55bf13' size-in-bits='64' id='824beef7'/>
+      <pointer-type-def type-id='b3bf9ca3' size-in-bits='64' id='ab4f7fd7'/>
+      <pointer-type-def type-id='b2a9667a' size-in-bits='64' id='a4946104'/>
+      <pointer-type-def type-id='d442aa81' size-in-bits='64' id='0954c675'/>
+      <pointer-type-def type-id='47a8f7d6' size-in-bits='64' id='320c9cb0'/>
+      <pointer-type-def type-id='e8d98129' size-in-bits='64' id='5dbae9d1'/>
+      <pointer-type-def type-id='8f138471' size-in-bits='64' id='0fda5689'/>
+      <pointer-type-def type-id='a7db2a27' size-in-bits='64' id='d9863f2f'/>
+      <pointer-type-def type-id='dc409042' size-in-bits='64' id='4eae5cb0'/>
+      <pointer-type-def type-id='c7da7875' size-in-bits='64' id='7c4a6c91'/>
+      <pointer-type-def type-id='4c16d0cc' size-in-bits='64' id='a9cc7986'/>
+      <pointer-type-def type-id='ab7568f4' size-in-bits='64' id='a829f496'/>
+      <pointer-type-def type-id='8422a42a' size-in-bits='64' id='f68ddecc'/>
+      <pointer-type-def type-id='fae72313' size-in-bits='64' id='b36896a7'/>
+      <pointer-type-def type-id='0ef969d4' size-in-bits='64' id='87f6a50e'/>
+      <pointer-type-def type-id='a9237415' size-in-bits='64' id='54d7d559'/>
+      <function-decl name='key_put' mangled-name='key_put' filepath='security/keys/key.c' line='643' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_put'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='643' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='key_invalidate' mangled-name='key_invalidate' filepath='security/keys/key.c' line='1074' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_invalidate'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='1074' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='register_key_type' mangled-name='register_key_type' filepath='security/keys/key.c' line='1129' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='register_key_type'>
+        <parameter type-id='d0a699d1' name='ktype' filepath='security/keys/key.c' line='1129' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='unregister_key_type' mangled-name='unregister_key_type' filepath='security/keys/key.c' line='1165' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='unregister_key_type'>
+        <parameter type-id='d0a699d1' name='ktype' filepath='security/keys/key.c' line='1165' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='key_revoke' mangled-name='key_revoke' filepath='security/keys/key.c' line='1040' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_revoke'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='1040' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='generic_key_instantiate' mangled-name='generic_key_instantiate' filepath='security/keys/key.c' line='1099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='generic_key_instantiate'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/key.c' line='1099' column='1'/>
+        <parameter type-id='4eae5cb0' name='prep' filepath='security/keys/key.c' line='1099' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5113b296'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='690d3bc2'>
+        <parameter type-id='bf6d816a'/>
+        <parameter type-id='0fda5689'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1a55bf13'>
+        <parameter type-id='5dbae9d1'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b3bf9ca3'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b2a9667a'>
+        <parameter type-id='204a4632'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d442aa81'>
+        <parameter type-id='d9863f2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='47a8f7d6'>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c7da7875'>
+        <parameter type-id='80f4b756'/>
+        <return type-id='92daca01'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c16d0cc'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ab7568f4'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='b15a9bac'/>
+        <return type-id='b50a4934'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8422a42a'>
+        <parameter type-id='7572cb33'/>
+        <parameter type-id='f8dc9def'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fae72313'>
+        <parameter type-id='204a4632' name='key'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ef969d4'>
+        <parameter type-id='d9863f2f'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9237415'>
+        <parameter type-id='4eae5cb0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/keys/keyring.c' language='LANG_C89'>
+      <function-decl name='keyring_alloc' mangled-name='keyring_alloc' filepath='security/keys/keyring.c' line='517' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='keyring_alloc'>
+        <parameter type-id='80f4b756' name='description' filepath='security/keys/keyring.c' line='517' column='1'/>
+        <parameter type-id='d80b72e6' name='uid' filepath='security/keys/keyring.c' line='517' column='1'/>
+        <parameter type-id='094d8048' name='gid' filepath='security/keys/keyring.c' line='517' column='1'/>
+        <parameter type-id='bc33861a' name='cred' filepath='security/keys/keyring.c' line='518' column='1'/>
+        <parameter type-id='296adac1' name='perm' filepath='security/keys/keyring.c' line='518' column='1'/>
+        <parameter type-id='7359adad' name='flags' filepath='security/keys/keyring.c' line='519' column='1'/>
+        <parameter type-id='92daca01' name='restrict_link' filepath='security/keys/keyring.c' line='520' column='1'/>
+        <parameter type-id='204a4632' name='dest' filepath='security/keys/keyring.c' line='521' column='1'/>
+        <return type-id='204a4632'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/keys/permission.c' language='LANG_C89'>
+      <function-decl name='key_validate' mangled-name='key_validate' filepath='security/keys/permission.c' line='85' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='key_validate'>
+        <parameter type-id='7572cb33' name='key' filepath='security/keys/permission.c' line='85' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/keys/request_key.c' language='LANG_C89'>
+      <function-decl name='request_key_tag' mangled-name='request_key_tag' filepath='security/keys/request_key.c' line='690' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='request_key_tag'>
+        <parameter type-id='d0a699d1' name='type' filepath='security/keys/request_key.c' line='690' column='1'/>
+        <parameter type-id='80f4b756' name='description' filepath='security/keys/request_key.c' line='691' column='1'/>
+        <parameter type-id='fce14c5f' name='domain_tag' filepath='security/keys/request_key.c' line='692' column='1'/>
+        <parameter type-id='80f4b756' name='callout_info' filepath='security/keys/request_key.c' line='693' column='1'/>
+        <return type-id='204a4632'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/keys/user_defined.c' language='LANG_C89'>
+      <function-decl name='user_revoke' mangled-name='user_revoke' filepath='security/keys/user_defined.c' line='128' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_revoke'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/user_defined.c' line='128' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='user_read' mangled-name='user_read' filepath='security/keys/user_defined.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_read'>
+        <parameter type-id='7572cb33' name='key' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <parameter type-id='26a90f95' name='buffer' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <parameter type-id='b59d7dce' name='buflen' filepath='security/keys/user_defined.c' line='171' column='1'/>
+        <return type-id='bd54fe1a'/>
+      </function-decl>
+      <function-decl name='user_destroy' mangled-name='user_destroy' filepath='security/keys/user_defined.c' line='146' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='user_destroy'>
+        <parameter type-id='204a4632' name='key' filepath='security/keys/user_defined.c' line='146' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='security/security.c' language='LANG_C89'>
+      <class-decl name='socket' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/linux/net.h' line='114' column='1' id='ee14fd94'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='ee2ecafb' visibility='default' filepath='include/linux/net.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='a2185560' visibility='default' filepath='include/linux/net.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='include/linux/net.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='file' type-id='77e79a4b' visibility='default' filepath='include/linux/net.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='sk' type-id='f772df6d' visibility='default' filepath='include/linux/net.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ops' type-id='38a81521' visibility='default' filepath='include/linux/net.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='wq' type-id='8bd06fd9' visibility='default' filepath='include/linux/net.h' line='125' 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='174' column='1' id='2117397c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='u' type-id='e9bb6246' visibility='default' filepath='include/net/flow.h' line='180' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='704' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='175' column='1' id='e9bb6246'>
+        <data-member access='public'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip4' type-id='5f8f2c58' visibility='default' filepath='include/net/flow.h' line='177' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ip6' type-id='618f2f7e' visibility='default' filepath='include/net/flow.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dn' type-id='83eba552' visibility='default' filepath='include/net/flow.h' line='179' 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='184ee240'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flowic_oif' type-id='95e97e5e' 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='95e97e5e' 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='3f1a6b60' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='8f048e17' 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='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='flowic_uid' type-id='d80b72e6' visibility='default' filepath='include/net/flow.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flowic_tun_key' type-id='46ff7b8b' visibility='default' filepath='include/net/flow.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='flowic_multipath_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='43' 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='46ff7b8b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tun_id' type-id='0899c7ad' visibility='default' filepath='include/net/flow.h' line='26' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__be64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='34' column='1' id='0899c7ad'/>
+      <class-decl name='flowi4' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/net/flow.h' line='70' column='1' id='5f8f2c58'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='saddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='daddr' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='88' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='flowi_uli' size-in-bits='32' visibility='default' filepath='include/net/flow.h' line='46' column='1' id='76355708'>
+        <data-member access='public'>
+          <var-decl name='ports' type-id='1a8a9bd4' visibility='default' filepath='include/net/flow.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='icmpt' type-id='217fb848' visibility='default' filepath='include/net/flow.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='dnports' type-id='b1169d60' visibility='default' filepath='include/net/flow.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='spi' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='gre_key' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='mht' type-id='97a0d733' visibility='default' filepath='include/net/flow.h' line='67' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='47' column='1' id='1a8a9bd4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='84a5c3d4' visibility='default' filepath='include/net/flow.h' line='49' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='16' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='52' column='1' id='217fb848'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='code' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='57' column='1' id='b1169d60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='sport' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='59' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le16' type-id='d315442e' filepath='include/uapi/linux/types.h' line='29' column='1' id='23119536'/>
+      <class-decl name='__anonymous_struct__3' size-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/net/flow.h' line='65' column='1' id='97a0d733'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='8f048e17' visibility='default' filepath='include/net/flow.h' line='66' 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='133' column='1' id='618f2f7e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='saddr' type-id='f6ed712a' visibility='default' filepath='include/net/flow.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='flowlabel' type-id='78a133c2' visibility='default' filepath='include/net/flow.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mp_hash' type-id='3f1a6b60' visibility='default' filepath='include/net/flow.h' line='156' 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='159' column='1' id='83eba552'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='__fl_common' type-id='184ee240' visibility='default' filepath='include/net/flow.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='daddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='336'>
+          <var-decl name='saddr' type-id='23119536' visibility='default' filepath='include/net/flow.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='uli' type-id='76355708' visibility='default' filepath='include/net/flow.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2117397c' size-in-bits='64' id='b1fd62ba'/>
+      <pointer-type-def type-id='ee14fd94' size-in-bits='64' id='13103032'/>
+      <function-decl name='security_sock_graft' mangled-name='security_sock_graft' filepath='security/security.c' line='2103' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='security_sock_graft'>
+        <parameter type-id='f772df6d' name='sk' filepath='security/security.c' line='2103' column='1'/>
+        <parameter type-id='13103032' name='parent' filepath='security/security.c' line='2103' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='security_sk_classify_flow' mangled-name='security_sk_classify_flow' filepath='security/security.c' line='2091' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='security_sk_classify_flow'>
+        <parameter type-id='f772df6d' name='sk' filepath='security/security.c' line='2091' column='1'/>
+        <parameter type-id='b1fd62ba' name='fl' filepath='security/security.c' line='2091' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/compress_offload.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3158a266' size-in-bits='480' id='33e9f3ff'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='3f1a6b60' size-in-bits='480' id='dd2f9695'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c16c976f' size-in-bits='89088' id='cac20798'>
+        <subrange length='32' type-id='7ff19f0f' id='ae5bde82'/>
+      </array-type-def>
+      <class-decl name='snd_compr_stream' size-in-bits='1536' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='68' column='1' id='009f0185'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/compress_driver.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='runtime' type-id='eb83bf5b' visibility='default' filepath='include/sound/compress_driver.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='dc1e097e' visibility='default' filepath='include/sound/compress_driver.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='error_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/compress_driver.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='direction' type-id='0e72fd0d' visibility='default' filepath='include/sound/compress_driver.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='metadata_set' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1384'>
+          <var-decl name='next_track' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1392'>
+          <var-decl name='partial_drain' type-id='b50a4934' visibility='default' filepath='include/sound/compress_driver.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='80' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_ops' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='106' column='1' id='33d73f3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='be315f37' visibility='default' filepath='include/sound/compress_driver.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='free' type-id='be315f37' visibility='default' filepath='include/sound/compress_driver.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='f259b60b' visibility='default' filepath='include/sound/compress_driver.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='85e4ab0f' visibility='default' filepath='include/sound/compress_driver.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='a50a69f6' visibility='default' filepath='include/sound/compress_driver.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='a50a69f6' visibility='default' filepath='include/sound/compress_driver.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='59f5b0ce' visibility='default' filepath='include/sound/compress_driver.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='81b5cbc0' visibility='default' filepath='include/sound/compress_driver.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='copy' type-id='97cb4c9a' visibility='default' filepath='include/sound/compress_driver.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='mmap' type-id='7970d34a' visibility='default' filepath='include/sound/compress_driver.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='ack' type-id='956abcd0' visibility='default' filepath='include/sound/compress_driver.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='get_caps' type-id='67659502' visibility='default' filepath='include/sound/compress_driver.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get_codec_caps' type-id='cd058347' visibility='default' filepath='include/sound/compress_driver.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='130' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_params' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='51' column='1' id='508a0a73'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='c51dce37' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='codec' type-id='97e76825' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='no_wake_mode' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='54' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compressed_buffer' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='40' column='1' id='c51dce37'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='42' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_codec' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='390' column='1' id='97e76825'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='ch_in' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='392' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ch_out' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='393' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='sample_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_control' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='profile' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='level' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ch_mode' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='format' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='align' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='options' type-id='c998b5fb' visibility='default' filepath='include/uapi/sound/compress_params.h' line='402' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='reserved' type-id='3fa05d14' visibility='default' filepath='include/uapi/sound/compress_params.h' line='403' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='snd_codec_options' size-in-bits='512' visibility='default' filepath='include/uapi/sound/compress_params.h' line='320' column='1' id='c998b5fb'>
+        <data-member access='public'>
+          <var-decl name='wma' type-id='fef670ff' visibility='default' filepath='include/uapi/sound/compress_params.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='vorbis' type-id='36942ad7' visibility='default' filepath='include/uapi/sound/compress_params.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='real' type-id='325f40b8' visibility='default' filepath='include/uapi/sound/compress_params.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='flac' type-id='8a9c9202' visibility='default' filepath='include/uapi/sound/compress_params.h' line='324' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='generic' type-id='4afe6201' visibility='default' filepath='include/uapi/sound/compress_params.h' line='325' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_enc_wma' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='242' column='1' id='fef670ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='super_block_align' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_vorbis' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='267' column='1' id='36942ad7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quality' type-id='3158a266' visibility='default' filepath='include/uapi/sound/compress_params.h' line='268' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='managed' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='269' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max_bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='270' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='min_bit_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='271' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='downmix' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='272' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_real' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='285' column='1' id='325f40b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='quant_bits' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='start_region' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_regions' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='288' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_flac' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='310' column='1' id='8a9c9202'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='311' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='gain' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='312' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_enc_generic' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='315' column='1' id='4afe6201'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bw' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='316' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='reserved' type-id='33e9f3ff' visibility='default' filepath='include/uapi/sound/compress_params.h' line='317' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_metadata' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='142' column='1' id='92ee9b60'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='key' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='7f84eb57' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='144' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_tstamp' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='68' column='1' id='32b4223a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='byte_offset' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='copied_total' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='pcm_io_frames' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sampling_rate' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_caps' size-in-bits='1568' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='102' column='1' id='c2835ff8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='num_codecs' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='direction' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='min_fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='max_fragment_size' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='min_fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='max_fragments' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='codecs' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='reserved' type-id='9d263779' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='110' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_codec_caps' size-in-bits='89152' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='119' column='1' id='5cbc594f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='codec' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='num_descriptors' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='descriptor' type-id='cac20798' visibility='default' filepath='include/uapi/sound/compress_offload.h' line='122' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_codec_desc' size-in-bits='2784' is-struct='yes' visibility='default' filepath='include/uapi/sound/compress_params.h' line='351' column='1' id='c16c976f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='max_ch' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='sample_rates' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_params.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1056'>
+          <var-decl name='num_sample_rates' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bit_rate' type-id='734a963c' visibility='default' filepath='include/uapi/sound/compress_params.h' line='355' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='num_bitrates' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='356' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2144'>
+          <var-decl name='rate_control' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='profiles' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2208'>
+          <var-decl name='modes' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='formats' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2272'>
+          <var-decl name='min_buffer' type-id='3f1a6b60' visibility='default' filepath='include/uapi/sound/compress_params.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='reserved' type-id='dd2f9695' visibility='default' filepath='include/uapi/sound/compress_params.h' line='362' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr_runtime' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='39' column='1' id='e2a795cb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='33158de9' visibility='default' filepath='include/sound/compress_driver.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dma_buffer_p' type-id='a02b8cd2' visibility='default' filepath='include/sound/compress_driver.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='buffer' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='buffer_size' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='fragment_size' type-id='19c2251e' visibility='default' filepath='include/sound/compress_driver.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='fragments' type-id='19c2251e' visibility='default' filepath='include/sound/compress_driver.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='total_bytes_available' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='total_bytes_transferred' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/compress_driver.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='52' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_compr' size-in-bits='8832' is-struct='yes' visibility='default' filepath='include/sound/compress_driver.h' line='144' column='1' id='a9559bf8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/compress_driver.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/compress_driver.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7552'>
+          <var-decl name='ops' type-id='06ca680b' visibility='default' filepath='include/sound/compress_driver.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7616'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/compress_driver.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7680'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/compress_driver.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7744'>
+          <var-decl name='direction' type-id='f0981eeb' visibility='default' filepath='include/sound/compress_driver.h' line='150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7808'>
+          <var-decl name='lock' type-id='925167dc' visibility='default' filepath='include/sound/compress_driver.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8064'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/compress_driver.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8096'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/compress_driver.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8640'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/compress_driver.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8704'>
+          <var-decl name='proc_info_entry' type-id='b9608bfc' visibility='default' filepath='include/sound/compress_driver.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/compress_driver.h' line='159' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_compr_direction' filepath='include/uapi/sound/compress_offload.h' line='86' column='1' id='0e72fd0d'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_COMPRESS_PLAYBACK' value='0'/>
+        <enumerator name='SND_COMPRESS_CAPTURE' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='538e531b' size-in-bits='64' id='be315f37'/>
+      <pointer-type-def type-id='97776d30' size-in-bits='64' id='97cb4c9a'/>
+      <pointer-type-def type-id='2b2b01a4' size-in-bits='64' id='59f5b0ce'/>
+      <pointer-type-def type-id='7506f11b' size-in-bits='64' id='85e4ab0f'/>
+      <pointer-type-def type-id='18f5dff0' size-in-bits='64' id='67659502'/>
+      <pointer-type-def type-id='0ac430cb' size-in-bits='64' id='cd058347'/>
+      <pointer-type-def type-id='0a77e414' size-in-bits='64' id='a50a69f6'/>
+      <pointer-type-def type-id='34684d4f' size-in-bits='64' id='f259b60b'/>
+      <pointer-type-def type-id='984b9756' size-in-bits='64' id='81b5cbc0'/>
+      <pointer-type-def type-id='6f351a96' size-in-bits='64' id='956abcd0'/>
+      <pointer-type-def type-id='82469568' size-in-bits='64' id='7970d34a'/>
+      <pointer-type-def type-id='97e76825' size-in-bits='64' id='99baf115'/>
+      <pointer-type-def type-id='a9559bf8' size-in-bits='64' id='dc1e097e'/>
+      <pointer-type-def type-id='c2835ff8' size-in-bits='64' id='7924d17e'/>
+      <pointer-type-def type-id='5cbc594f' size-in-bits='64' id='cd012107'/>
+      <pointer-type-def type-id='92ee9b60' size-in-bits='64' id='58dc55d6'/>
+      <pointer-type-def type-id='33d73f3b' size-in-bits='64' id='06ca680b'/>
+      <pointer-type-def type-id='508a0a73' size-in-bits='64' id='15dfbd93'/>
+      <pointer-type-def type-id='e2a795cb' size-in-bits='64' id='eb83bf5b'/>
+      <pointer-type-def type-id='009f0185' size-in-bits='64' id='b7c1d7d5'/>
+      <pointer-type-def type-id='32b4223a' size-in-bits='64' id='c1873808'/>
+      <function-decl name='snd_compr_stop_error' mangled-name='snd_compr_stop_error' filepath='sound/core/compress_offload.c' line='758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_compr_stop_error'>
+        <parameter type-id='b7c1d7d5' name='stream' filepath='sound/core/compress_offload.c' line='758' column='1'/>
+        <parameter type-id='33158de9' name='state' filepath='sound/core/compress_offload.c' line='759' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='538e531b'>
+        <parameter type-id='b7c1d7d5'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='97776d30'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2b2b01a4'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7506f11b'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='99baf115'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18f5dff0'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='7924d17e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ac430cb'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='cd012107'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0a77e414'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='58dc55d6'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34684d4f'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='15dfbd93'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='984b9756'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='c1873808'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f351a96'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='b59d7dce'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='82469568'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <pointer-type-def type-id='5ef8814f' size-in-bits='64' id='52704eb7'/>
+      <pointer-type-def type-id='c5addfb4' size-in-bits='64' id='a02b8cd2'/>
+      <pointer-type-def type-id='48ad5fc6' size-in-bits='64' id='b9608bfc'/>
+      <typedef-decl name='snd_pcm_state_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='306' column='1' id='33158de9'/>
+      <class-decl name='snd_card' size-in-bits='20672' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='84' column='1' id='5ef8814f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='driver' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='shortname' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='longname' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_descr' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='mixername' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='components' type-id='e3204322' visibility='default' filepath='include/sound/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='private_free' type-id='fde42bf2' visibility='default' filepath='include/sound/core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ctl_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='last_numid' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='controls_rwsem' type-id='f19fdb93' visibility='default' filepath='include/sound/core.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='ctl_files_rwlock' type-id='ac16795b' visibility='default' filepath='include/sound/core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='controls_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11488'>
+          <var-decl name='user_ctl_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='controls' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='ctl_files' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='proc_root_link' type-id='d077e928' visibility='default' filepath='include/sound/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='files_list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_f_ops' type-id='df5f3f5d' visibility='default' filepath='include/sound/core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12128'>
+          <var-decl name='shutdown' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='release_completion' type-id='389faaf7' visibility='default' filepath='include/sound/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='card_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='dev_groups' type-id='db1b7234' visibility='default' filepath='include/sound/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/sound/core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='remove_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='power_state' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='power_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_dma_buffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='51' column='1' id='c5addfb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='724d481c' visibility='default' filepath='include/sound/memalloc.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='area' type-id='cf536864' visibility='default' filepath='include/sound/memalloc.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='addr' type-id='cf29c9b3' visibility='default' filepath='include/sound/memalloc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bytes' type-id='b59d7dce' visibility='default' filepath='include/sound/memalloc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/memalloc.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='63' column='1' id='48ad5fc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/info.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/sound/info.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='bd54fe1a' visibility='default' filepath='include/sound/info.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='content' type-id='8efea9e5' visibility='default' filepath='include/sound/info.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c' type-id='74c3182a' visibility='default' filepath='include/sound/info.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='b9608bfc' visibility='default' filepath='include/sound/info.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/info.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/info.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_free' type-id='93226281' visibility='default' filepath='include/sound/info.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='p' type-id='d077e928' visibility='default' filepath='include/sound/info.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='925167dc' visibility='default' filepath='include/sound/info.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/info.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='640' id='aa5ff375'>
+        <subrange length='80' type-id='7ff19f0f' id='b4129fbd'/>
+      </array-type-def>
+      <class-decl name='snd_dma_device' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='19' column='1' id='724d481c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/sound/memalloc.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/memalloc.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='30b9286d' size-in-bits='64' id='df5f3f5d'/>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='68' column='1' id='74c3182a'>
+        <data-member access='public'>
+          <var-decl name='text' type-id='cf87b76c' visibility='default' filepath='include/sound/info.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ops' type-id='d9cfece5' visibility='default' filepath='include/sound/info.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <pointer-type-def type-id='593d8168' size-in-bits='64' id='fde42bf2'/>
+      <pointer-type-def type-id='8754454d' size-in-bits='64' id='93226281'/>
+      <class-decl name='snd_info_entry_text' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='30' column='1' id='cf87b76c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_shutdown_f_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='30b9286d'/>
+      <pointer-type-def type-id='f9b9a795' size-in-bits='64' id='d9cfece5'/>
+      <class-decl name='snd_info_entry_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='37' column='1' id='f9b9a795'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='1aa763a8' visibility='default' filepath='include/sound/info.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='113423d8' visibility='default' filepath='include/sound/info.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='b9922d07' visibility='default' filepath='include/sound/info.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='6047a55c' visibility='default' filepath='include/sound/info.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llseek' type-id='882bc4d4' visibility='default' filepath='include/sound/info.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='305a7ffa' visibility='default' filepath='include/sound/info.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='3d52c694' visibility='default' filepath='include/sound/info.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='e118a96a' visibility='default' filepath='include/sound/info.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/info.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='28026fe4' size-in-bits='64' id='f695e0b6'/>
+      <pointer-type-def type-id='a249930e' size-in-bits='64' id='113423d8'/>
+      <pointer-type-def type-id='38cfc416' size-in-bits='64' id='1aa763a8'/>
+      <pointer-type-def type-id='3ba7892a' size-in-bits='64' id='3d52c694'/>
+      <pointer-type-def type-id='fc14a418' size-in-bits='64' id='e118a96a'/>
+      <pointer-type-def type-id='643f05a0' size-in-bits='64' id='305a7ffa'/>
+      <pointer-type-def type-id='19b22092' size-in-bits='64' id='882bc4d4'/>
+      <pointer-type-def type-id='5a067f4b' size-in-bits='64' id='b9922d07'/>
+      <pointer-type-def type-id='ee9d520a' size-in-bits='64' id='6047a55c'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/control.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='bd54fe1a' size-in-bits='8192' id='e1c8dbe3'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='1eb56b1e' size-in-bits='4096' id='1fd26250'>
+        <subrange length='64' type-id='7ff19f0f' id='b10be967'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='9cd807f4' size-in-bits='infinite' id='bfd02128'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='896' id='b604cb74'>
+        <subrange length='112' type-id='7ff19f0f' id='17c6c021'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='1024' id='6f10c3ff'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='1176' id='00bc0376'>
+        <subrange length='147' type-id='7ff19f0f' id='351fcdaf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='192' id='25108e54'>
+        <subrange length='24' type-id='7ff19f0f' id='fdd3342b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='352' id='4ff588ae'>
+        <subrange length='44' type-id='7ff19f0f' id='cf8ba455'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='32' id='09001d3c'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='4096' id='b6d05418'>
+        <subrange length='512' type-id='7ff19f0f' id='c11630dd'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='448' id='de076c27'>
+        <subrange length='56' type-id='7ff19f0f' id='f8137894'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='f0981eeb' size-in-bits='4096' id='ee4e68c4'>
+        <subrange length='128' type-id='7ff19f0f' id='1eb1687a'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='64' id='3f30d495'>
+        <subrange length='4' type-id='7ff19f0f' id='16fe7105'/>
+      </array-type-def>
+      <class-decl name='snd_ctl_elem_id' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='885' column='1' id='abbbeccc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='numid' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='886' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='iface' type-id='4143fc17' visibility='default' filepath='include/uapi/sound/asound.h' line='887' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='888' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='subdevice' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='889' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='4ff588ae' visibility='default' filepath='include/uapi/sound/asound.h' line='890' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='891' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_ctl_elem_iface_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='849' column='1' id='4143fc17'/>
+      <class-decl name='snd_kcontrol' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='54' column='1' id='8755a6ff'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/sound/control.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='info' type-id='e79cb28f' visibility='default' filepath='include/sound/control.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='get' type-id='5553210f' visibility='default' filepath='include/sound/control.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='put' type-id='e149b058' visibility='default' filepath='include/sound/control.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='tlv' type-id='e3dd1f94' visibility='default' filepath='include/sound/control.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='private_value' type-id='7359adad' visibility='default' filepath='include/sound/control.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/control.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='private_free' type-id='56fe8aea' visibility='default' filepath='include/sound/control.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='vd' type-id='bfd02128' visibility='default' filepath='include/sound/control.h' line='68' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_kcontrol_info_t' type-id='fa75c86d' filepath='include/sound/control.h' line='17' column='1' id='180e16b0'/>
+      <class-decl name='snd_ctl_elem_info' size-in-bits='2176' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='903' column='1' id='897bd6f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/uapi/sound/asound.h' line='904' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='type' type-id='e31355f5' visibility='default' filepath='include/uapi/sound/asound.h' line='905' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='906' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='907' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='owner' type-id='63eb2bf2' visibility='default' filepath='include/uapi/sound/asound.h' line='908' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='value' type-id='43c56b1a' visibility='default' filepath='include/uapi/sound/asound.h' line='928' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='dimen' type-id='2ec5efad' visibility='default' filepath='include/uapi/sound/asound.h' line='932' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='reserved' type-id='de076c27' visibility='default' filepath='include/uapi/sound/asound.h' line='933' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_ctl_elem_type_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='839' column='1' id='e31355f5'/>
+      <union-decl name='__anonymous_union__' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='909' column='1' id='43c56b1a'>
+        <data-member access='public'>
+          <var-decl name='integer' type-id='44a4bb5b' visibility='default' filepath='include/uapi/sound/asound.h' line='914' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='integer64' type-id='5dc1bcd5' visibility='default' filepath='include/uapi/sound/asound.h' line='919' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='enumerated' type-id='895fb397' visibility='default' filepath='include/uapi/sound/asound.h' line='926' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='reserved' type-id='6f10c3ff' visibility='default' filepath='include/uapi/sound/asound.h' line='927' 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/uapi/sound/asound.h' line='910' column='1' id='44a4bb5b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='911' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='912' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='bd54fe1a' visibility='default' filepath='include/uapi/sound/asound.h' line='913' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__1' size-in-bits='192' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='915' column='1' id='5dc1bcd5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='916' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='max' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='917' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='step' type-id='1eb56b1e' visibility='default' filepath='include/uapi/sound/asound.h' line='918' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__2' size-in-bits='704' is-struct='yes' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='920' column='1' id='895fb397'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='items' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='921' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='item' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='922' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='59daf3ef' visibility='default' filepath='include/uapi/sound/asound.h' line='923' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='names_ptr' type-id='d3130597' visibility='default' filepath='include/uapi/sound/asound.h' line='924' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='names_length' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='925' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='929' column='1' id='2ec5efad'>
+        <data-member access='public'>
+          <var-decl name='d' type-id='3f30d495' visibility='default' filepath='include/uapi/sound/asound.h' line='930' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='d_ptr' type-id='e9e550dd' visibility='default' filepath='include/uapi/sound/asound.h' line='931' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='snd_kcontrol_get_t' type-id='84147814' filepath='include/sound/control.h' line='18' column='1' id='73fb632a'/>
+      <class-decl name='snd_ctl_elem_value' size-in-bits='9792' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='936' column='1' id='42736e36'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='abbbeccc' visibility='default' filepath='include/uapi/sound/asound.h' line='937' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='indirect' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='938' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='value' type-id='8e5ed252' visibility='default' filepath='include/uapi/sound/asound.h' line='957' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8768'>
+          <var-decl name='tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='958' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8896'>
+          <var-decl name='reserved' type-id='b604cb74' visibility='default' filepath='include/uapi/sound/asound.h' line='959' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' size-in-bits='8192' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='939' column='1' id='8e5ed252'>
+        <data-member access='public'>
+          <var-decl name='integer' type-id='5f6c3e36' visibility='default' filepath='include/uapi/sound/asound.h' line='943' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='integer64' type-id='c74bfd7b' visibility='default' filepath='include/uapi/sound/asound.h' line='947' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='enumerated' type-id='3abbbc5e' visibility='default' filepath='include/uapi/sound/asound.h' line='951' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='bytes' type-id='ee13cef3' visibility='default' filepath='include/uapi/sound/asound.h' line='955' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='iec958' type-id='22a78e66' visibility='default' filepath='include/uapi/sound/asound.h' line='956' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='8192' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='940' column='1' id='5f6c3e36'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='e1c8dbe3' visibility='default' filepath='include/uapi/sound/asound.h' line='941' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value_ptr' type-id='3ccc2590' visibility='default' filepath='include/uapi/sound/asound.h' line='942' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__4' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='944' column='1' id='c74bfd7b'>
+        <data-member access='public'>
+          <var-decl name='value' type-id='1fd26250' visibility='default' filepath='include/uapi/sound/asound.h' line='945' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value_ptr' type-id='8b97c2dc' visibility='default' filepath='include/uapi/sound/asound.h' line='946' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__5' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='948' column='1' id='3abbbc5e'>
+        <data-member access='public'>
+          <var-decl name='item' type-id='ee4e68c4' visibility='default' filepath='include/uapi/sound/asound.h' line='949' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='item_ptr' type-id='807869d3' visibility='default' filepath='include/uapi/sound/asound.h' line='950' column='1'/>
+        </data-member>
+      </union-decl>
+      <union-decl name='__anonymous_union__6' size-in-bits='4096' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='952' column='1' id='ee13cef3'>
+        <data-member access='public'>
+          <var-decl name='data' type-id='b6d05418' visibility='default' filepath='include/uapi/sound/asound.h' line='953' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='data_ptr' type-id='cf536864' visibility='default' filepath='include/uapi/sound/asound.h' line='954' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_aes_iec958' size-in-bits='1408' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='57' column='1' id='22a78e66'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='status' type-id='25108e54' visibility='default' filepath='include/uapi/sound/asound.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='subcode' type-id='00bc0376' visibility='default' filepath='include/uapi/sound/asound.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1368'>
+          <var-decl name='pad' type-id='002ac4a6' visibility='default' filepath='include/uapi/sound/asound.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1376'>
+          <var-decl name='dig_subframe' type-id='09001d3c' visibility='default' filepath='include/uapi/sound/asound.h' line='61' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_kcontrol_put_t' type-id='84147814' filepath='include/sound/control.h' line='19' column='1' id='db992ec7'/>
+      <union-decl name='__anonymous_union__7' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='include/sound/control.h' line='61' column='1' id='e3dd1f94'>
+        <data-member access='public'>
+          <var-decl name='c' type-id='bf7b4ec3' visibility='default' filepath='include/sound/control.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='p' type-id='5b2fd8e8' visibility='default' filepath='include/sound/control.h' line='63' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='snd_kcontrol_tlv_rw_t' type-id='54d4fbda' filepath='include/sound/control.h' line='20' column='1' id='ba5ca324'/>
+      <class-decl name='snd_kcontrol_volatile' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='49' column='1' id='9cd807f4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='owner' type-id='ed27ccc9' visibility='default' filepath='include/sound/control.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='51' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_ctl_file' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='89' column='1' id='7c055541'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/control.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/control.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='preferred_subdevice' type-id='e4266c7e' visibility='default' filepath='include/sound/control.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='change_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/control.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='read_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/control.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/sound/control.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='subscribed' type-id='95e97e5e' visibility='default' filepath='include/sound/control.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='events' type-id='72f469ec' visibility='default' filepath='include/sound/control.h' line='98' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_kcontrol_new' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/control.h' line='31' column='1' id='9a46627e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='iface' type-id='4143fc17' visibility='default' filepath='include/sound/control.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='device' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='subdevice' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='354f7eb9' visibility='default' filepath='include/sound/control.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='access' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/control.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='info' type-id='e79cb28f' visibility='default' filepath='include/sound/control.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='get' type-id='5553210f' visibility='default' filepath='include/sound/control.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='put' type-id='e149b058' visibility='default' filepath='include/sound/control.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='tlv' type-id='e3dd1f94' visibility='default' filepath='include/sound/control.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_value' type-id='7359adad' visibility='default' filepath='include/sound/control.h' line='46' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9a46627e' const='yes' id='c69a48a7'/>
+      <pointer-type-def type-id='c69a48a7' size-in-bits='64' id='31e035f7'/>
+      <pointer-type-def type-id='abbbeccc' size-in-bits='64' id='eaeee79a'/>
+      <pointer-type-def type-id='897bd6f1' size-in-bits='64' id='0e291009'/>
+      <pointer-type-def type-id='42736e36' size-in-bits='64' id='144a5d4c'/>
+      <pointer-type-def type-id='7c055541' size-in-bits='64' id='ed27ccc9'/>
+      <pointer-type-def type-id='8755a6ff' size-in-bits='64' id='7a5054b7'/>
+      <pointer-type-def type-id='73fb632a' size-in-bits='64' id='5553210f'/>
+      <pointer-type-def type-id='180e16b0' size-in-bits='64' id='e79cb28f'/>
+      <pointer-type-def type-id='db992ec7' size-in-bits='64' id='e149b058'/>
+      <pointer-type-def type-id='ba5ca324' size-in-bits='64' id='bf7b4ec3'/>
+      <pointer-type-def type-id='8efea9e5' size-in-bits='64' id='e9e550dd'/>
+      <pointer-type-def type-id='4baf5c00' size-in-bits='64' id='56fe8aea'/>
+      <function-decl name='snd_ctl_remove_id' mangled-name='snd_ctl_remove_id' filepath='sound/core/control.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_remove_id'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='488' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='488' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_find_id' mangled-name='snd_ctl_find_id' filepath='sound/core/control.c' line='664' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_find_id'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='664' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='665' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_remove' mangled-name='snd_ctl_remove' filepath='sound/core/control.c' line='461' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_remove'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='461' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='461' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_notify' mangled-name='snd_ctl_notify' filepath='sound/core/control.c' line='141' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_notify'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='141' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='sound/core/control.c' line='141' column='1'/>
+        <parameter type-id='eaeee79a' name='id' filepath='sound/core/control.c' line='142' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_ctl_new1' mangled-name='snd_ctl_new1' filepath='sound/core/control.c' line='228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_new1'>
+        <parameter type-id='31e035f7' name='ncontrol' filepath='sound/core/control.c' line='228' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/control.c' line='229' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_enum_info' mangled-name='snd_ctl_enum_info' filepath='sound/core/control.c' line='1936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_enum_info'>
+        <parameter type-id='0e291009' name='info' filepath='sound/core/control.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='channels' filepath='sound/core/control.c' line='1936' column='1'/>
+        <parameter type-id='f0981eeb' name='items' filepath='sound/core/control.c' line='1937' column='1'/>
+        <parameter type-id='13956559' name='names' filepath='sound/core/control.c' line='1937' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_boolean_stereo_info' mangled-name='snd_ctl_boolean_stereo_info' filepath='sound/core/control.c' line='1912' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_boolean_stereo_info'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='1912' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/core/control.c' line='1913' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_boolean_mono_info' mangled-name='snd_ctl_boolean_mono_info' filepath='sound/core/control.c' line='1892' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_boolean_mono_info'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='1892' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/core/control.c' line='1893' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_add' mangled-name='snd_ctl_add' filepath='sound/core/control.c' line='422' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_add'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/control.c' line='422' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/control.c' line='422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='54d4fbda'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fa75c86d'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='0e291009'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='84147814'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='144a5d4c'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4baf5c00'>
+        <parameter type-id='7a5054b7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/device.c' language='LANG_C89'>
+      <enum-decl name='snd_device_type' filepath='include/sound/core.h' line='38' column='1' id='43cb465b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SNDRV_DEV_LOWLEVEL' value='0'/>
+        <enumerator name='SNDRV_DEV_INFO' value='1'/>
+        <enumerator name='SNDRV_DEV_BUS' value='2'/>
+        <enumerator name='SNDRV_DEV_CODEC' value='3'/>
+        <enumerator name='SNDRV_DEV_PCM' value='4'/>
+        <enumerator name='SNDRV_DEV_COMPRESS' value='5'/>
+        <enumerator name='SNDRV_DEV_RAWMIDI' value='6'/>
+        <enumerator name='SNDRV_DEV_TIMER' value='7'/>
+        <enumerator name='SNDRV_DEV_SEQUENCER' value='8'/>
+        <enumerator name='SNDRV_DEV_HWDEP' value='9'/>
+        <enumerator name='SNDRV_DEV_JACK' value='10'/>
+        <enumerator name='SNDRV_DEV_CONTROL' value='11'/>
+      </enum-decl>
+      <class-decl name='snd_device_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='61' column='1' id='8a1bdab0'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_free' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev_register' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev_disconnect' type-id='e23829bd' visibility='default' filepath='include/sound/core.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_device' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='69' column='1' id='ced794e3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/core.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='state' type-id='9c857434' visibility='default' filepath='include/sound/core.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='type' type-id='43cb465b' visibility='default' filepath='include/sound/core.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='device_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='ops' type-id='f6020a16' visibility='default' filepath='include/sound/core.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_device_state' filepath='include/sound/core.h' line='53' column='1' id='9c857434'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SNDRV_DEV_BUILD' value='0'/>
+        <enumerator name='SNDRV_DEV_REGISTERED' value='1'/>
+        <enumerator name='SNDRV_DEV_DISCONNECTED' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='4b6b0e29' size-in-bits='64' id='e23829bd'/>
+      <pointer-type-def type-id='ced794e3' size-in-bits='64' id='5c745bb3'/>
+      <pointer-type-def type-id='8a1bdab0' size-in-bits='64' id='f6020a16'/>
+      <function-decl name='snd_device_new' mangled-name='snd_device_new' filepath='sound/core/device.c' line='29' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/device.c' line='29' column='1'/>
+        <parameter type-id='43cb465b' name='type' filepath='sound/core/device.c' line='29' column='1'/>
+        <parameter type-id='eaa32e2f' name='device_data' filepath='sound/core/device.c' line='30' column='1'/>
+        <parameter type-id='f6020a16' name='ops' filepath='sound/core/device.c' line='30' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_device_free' mangled-name='snd_device_free' filepath='sound/core/device.c' line='130' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_free'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/device.c' line='130' column='1'/>
+        <parameter type-id='eaa32e2f' name='device_data' filepath='sound/core/device.c' line='130' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_device_disconnect' mangled-name='snd_device_disconnect' filepath='sound/core/device.c' line='106' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_device_disconnect'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/device.c' line='106' column='1'/>
+        <parameter type-id='eaa32e2f' name='device_data' filepath='sound/core/device.c' line='106' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='4b6b0e29'>
+        <parameter type-id='5c745bb3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/hwdep.c' language='LANG_C89'>
+      <class-decl name='snd_hwdep' size-in-bits='10176' is-struct='yes' visibility='default' filepath='include/sound/hwdep.h' line='42' column='1' id='31b13f91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/hwdep.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/hwdep.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='id' type-id='16dc656a' visibility='default' filepath='include/sound/hwdep.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/hwdep.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1120'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='ops' type-id='5cb0616a' visibility='default' filepath='include/sound/hwdep.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/sound/hwdep.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/hwdep.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='private_free' type-id='1a240138' visibility='default' filepath='include/sound/hwdep.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/hwdep.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9728'>
+          <var-decl name='open_mutex' type-id='925167dc' visibility='default' filepath='include/sound/hwdep.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9984'>
+          <var-decl name='used' type-id='95e97e5e' visibility='default' filepath='include/sound/hwdep.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10016'>
+          <var-decl name='dsp_loaded' type-id='f0981eeb' visibility='default' filepath='include/sound/hwdep.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='exclusive' type-id='f0981eeb' visibility='default' filepath='include/sound/hwdep.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10112'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/hwdep.h' line='66' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_ops' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/hwdep.h' line='17' column='1' id='5cb0616a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='llseek' type-id='4998c99f' visibility='default' filepath='include/sound/hwdep.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='read' type-id='8aa9d34a' visibility='default' filepath='include/sound/hwdep.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='write' type-id='5732f87b' visibility='default' filepath='include/sound/hwdep.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='open' type-id='51119d2d' visibility='default' filepath='include/sound/hwdep.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='release' type-id='51119d2d' visibility='default' filepath='include/sound/hwdep.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='377be647' visibility='default' filepath='include/sound/hwdep.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='8fb9d791' visibility='default' filepath='include/sound/hwdep.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ioctl_compat' type-id='8fb9d791' visibility='default' filepath='include/sound/hwdep.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='mmap' type-id='80eb3fbc' visibility='default' filepath='include/sound/hwdep.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='dsp_status' type-id='8cc78bbc' visibility='default' filepath='include/sound/hwdep.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='dsp_load' type-id='0ab14abf' visibility='default' filepath='include/sound/hwdep.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/hwdep.h' line='39' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_dsp_status' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='129' column='1' id='7ac013b4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='version' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='fc872715' visibility='default' filepath='include/uapi/sound/asound.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='num_dsps' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dsp_loaded' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='chip_ready' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='reserved' type-id='92a46553' visibility='default' filepath='include/uapi/sound/asound.h' line='135' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_hwdep_dsp_image' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='138' column='1' id='4410ddbf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='b1888bf8' visibility='default' filepath='include/uapi/sound/asound.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='image' type-id='cf536864' visibility='default' filepath='include/uapi/sound/asound.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='length' type-id='b59d7dce' visibility='default' filepath='include/uapi/sound/asound.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='driver_data' type-id='7359adad' visibility='default' filepath='include/uapi/sound/asound.h' line='143' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d7cfbbe1' size-in-bits='64' id='51119d2d'/>
+      <pointer-type-def type-id='98ef1b95' size-in-bits='64' id='8fb9d791'/>
+      <pointer-type-def type-id='1432736a' size-in-bits='64' id='80eb3fbc'/>
+      <pointer-type-def type-id='c9365c7b' size-in-bits='64' id='0ab14abf'/>
+      <pointer-type-def type-id='2d274c62' size-in-bits='64' id='8cc78bbc'/>
+      <pointer-type-def type-id='c89340f8' size-in-bits='64' id='8aa9d34a'/>
+      <pointer-type-def type-id='0b57727f' size-in-bits='64' id='5732f87b'/>
+      <pointer-type-def type-id='bfa69bfb' size-in-bits='64' id='4998c99f'/>
+      <pointer-type-def type-id='31b13f91' size-in-bits='64' id='2567e379'/>
+      <pointer-type-def type-id='2567e379' size-in-bits='64' id='358adba9'/>
+      <pointer-type-def type-id='4410ddbf' size-in-bits='64' id='9ba8bea7'/>
+      <pointer-type-def type-id='7ac013b4' size-in-bits='64' id='67acad02'/>
+      <pointer-type-def type-id='93301493' size-in-bits='64' id='377be647'/>
+      <pointer-type-def type-id='e4574076' size-in-bits='64' id='1a240138'/>
+      <function-decl name='snd_hwdep_new' mangled-name='snd_hwdep_new' filepath='sound/core/hwdep.c' line='351' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_hwdep_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='26a90f95' name='id' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='95e97e5e' name='device' filepath='sound/core/hwdep.c' line='351' column='1'/>
+        <parameter type-id='358adba9' name='rhwdep' filepath='sound/core/hwdep.c' line='352' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d7cfbbe1'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98ef1b95'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1432736a'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c9365c7b'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='9ba8bea7'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2d274c62'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='67acad02'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c89340f8'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0b57727f'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='bd54fe1a'/>
+        <parameter type-id='b53e8dbb'/>
+        <return type-id='bd54fe1a'/>
+      </function-type>
+      <function-type size-in-bits='64' id='bfa69bfb'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='1eb56b1e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='1eb56b1e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93301493'>
+        <parameter type-id='2567e379'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e4574076'>
+        <parameter type-id='2567e379'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/info.c' language='LANG_C89'>
+      <function-decl name='snd_info_free_entry' mangled-name='snd_info_free_entry' filepath='sound/core/info.c' line='769' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_free_entry'>
+        <parameter type-id='b9608bfc' name='entry' filepath='sound/core/info.c' line='769' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_info_register' mangled-name='snd_info_register' filepath='sound/core/info.c' line='843' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_register'>
+        <parameter type-id='b9608bfc' name='entry' filepath='sound/core/info.c' line='843' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_info_get_line' mangled-name='snd_info_get_line' filepath='sound/core/info.c' line='607' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_get_line'>
+        <parameter type-id='00aa6a0e' name='buffer' filepath='sound/core/info.c' line='607' column='1'/>
+        <parameter type-id='26a90f95' name='line' filepath='sound/core/info.c' line='607' column='1'/>
+        <parameter type-id='95e97e5e' name='len' filepath='sound/core/info.c' line='607' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_info_create_module_entry' mangled-name='snd_info_create_module_entry' filepath='sound/core/info.c' line='721' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_create_module_entry'>
+        <parameter type-id='2730d015' name='module' filepath='sound/core/info.c' line='721' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='722' column='1'/>
+        <parameter type-id='b9608bfc' name='parent' filepath='sound/core/info.c' line='723' column='1'/>
+        <return type-id='b9608bfc'/>
+      </function-decl>
+      <function-decl name='snd_info_create_card_entry' mangled-name='snd_info_create_card_entry' filepath='sound/core/info.c' line='741' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_info_create_card_entry'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/info.c' line='741' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='742' column='1'/>
+        <parameter type-id='b9608bfc' name='parent' filepath='sound/core/info.c' line='743' column='1'/>
+        <return type-id='b9608bfc'/>
+      </function-decl>
+      <function-decl name='snd_card_rw_proc_new' mangled-name='snd_card_rw_proc_new' filepath='sound/core/info.c' line='875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_rw_proc_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/info.c' line='875' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/core/info.c' line='875' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/info.c' line='876' column='1'/>
+        <parameter type-id='f695e0b6' name='read' filepath='sound/core/info.c' line='877' column='1'/>
+        <parameter type-id='f695e0b6' name='write' filepath='sound/core/info.c' line='879' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='982f66c8' size-in-bits='64' id='00aa6a0e'/>
+      <class-decl name='snd_info_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='16' column='1' id='982f66c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/sound/info.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stop' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/init.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='640' id='aa5ff375'>
+        <subrange length='80' type-id='7ff19f0f' id='b4129fbd'/>
+      </array-type-def>
+      <class-decl name='snd_shutdown_f_ops' is-struct='yes' visibility='default' is-declaration-only='yes' id='30b9286d'/>
+      <class-decl name='snd_card' size-in-bits='20672' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='84' column='1' id='5ef8814f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='driver' type-id='ac1fa8c0' visibility='default' filepath='include/sound/core.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='shortname' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='longname' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='irq_descr' type-id='16dc656a' visibility='default' filepath='include/sound/core.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='mixername' type-id='aa5ff375' visibility='default' filepath='include/sound/core.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='components' type-id='e3204322' visibility='default' filepath='include/sound/core.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3136'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/core.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/core.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3264'>
+          <var-decl name='private_free' type-id='fde42bf2' visibility='default' filepath='include/sound/core.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='devices' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='ctl_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10944'>
+          <var-decl name='last_numid' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11008'>
+          <var-decl name='controls_rwsem' type-id='f19fdb93' visibility='default' filepath='include/sound/core.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11392'>
+          <var-decl name='ctl_files_rwlock' type-id='ac16795b' visibility='default' filepath='include/sound/core.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11456'>
+          <var-decl name='controls_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11488'>
+          <var-decl name='user_ctl_count' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='108' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11520'>
+          <var-decl name='controls' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11648'>
+          <var-decl name='ctl_files' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11776'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/core.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11840'>
+          <var-decl name='proc_root_link' type-id='d077e928' visibility='default' filepath='include/sound/core.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11904'>
+          <var-decl name='files_list' type-id='72f469ec' visibility='default' filepath='include/sound/core.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='s_f_ops' type-id='df5f3f5d' visibility='default' filepath='include/sound/core.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='files_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/core.h' line='118' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12128'>
+          <var-decl name='shutdown' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='release_completion' type-id='389faaf7' visibility='default' filepath='include/sound/core.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/core.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='card_dev' type-id='66e487eb' visibility='default' filepath='include/sound/core.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19776'>
+          <var-decl name='dev_groups' type-id='db1b7234' visibility='default' filepath='include/sound/core.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20032'>
+          <var-decl name='registered' type-id='b50a4934' visibility='default' filepath='include/sound/core.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20096'>
+          <var-decl name='remove_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20288'>
+          <var-decl name='power_state' type-id='f0981eeb' visibility='default' filepath='include/sound/core.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20352'>
+          <var-decl name='power_sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/core.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/sound/core.h' line='138' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry' size-in-bits='1280' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='63' column='1' id='48ad5fc6'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/info.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mode' type-id='2594b00f' visibility='default' filepath='include/sound/info.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='bd54fe1a' visibility='default' filepath='include/sound/info.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='content' type-id='8efea9e5' visibility='default' filepath='include/sound/info.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='c' type-id='74c3182a' visibility='default' filepath='include/sound/info.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='parent' type-id='b9608bfc' visibility='default' filepath='include/sound/info.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/info.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/info.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='private_free' type-id='93226281' visibility='default' filepath='include/sound/info.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='p' type-id='d077e928' visibility='default' filepath='include/sound/info.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='925167dc' visibility='default' filepath='include/sound/info.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='children' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/info.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/info.h' line='81' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='128' is-anonymous='yes' visibility='default' filepath='include/sound/info.h' line='68' column='1' id='74c3182a'>
+        <data-member access='public'>
+          <var-decl name='text' type-id='cf87b76c' visibility='default' filepath='include/sound/info.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='ops' type-id='d9cfece5' visibility='default' filepath='include/sound/info.h' line='70' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_info_entry_text' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='30' column='1' id='cf87b76c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='read' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='write' type-id='f695e0b6' visibility='default' filepath='include/sound/info.h' line='33' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_buffer' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='16' column='1' id='982f66c8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='buffer' type-id='26a90f95' visibility='default' filepath='include/sound/info.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='curr' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='size' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='len' type-id='f0981eeb' visibility='default' filepath='include/sound/info.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='stop' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='error' type-id='95e97e5e' visibility='default' filepath='include/sound/info.h' line='22' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_info_entry_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/info.h' line='37' column='1' id='f9b9a795'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='1aa763a8' visibility='default' filepath='include/sound/info.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='release' type-id='113423d8' visibility='default' filepath='include/sound/info.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='read' type-id='b9922d07' visibility='default' filepath='include/sound/info.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='write' type-id='6047a55c' visibility='default' filepath='include/sound/info.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='llseek' type-id='882bc4d4' visibility='default' filepath='include/sound/info.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='poll' type-id='305a7ffa' visibility='default' filepath='include/sound/info.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ioctl' type-id='3d52c694' visibility='default' filepath='include/sound/info.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='mmap' type-id='e118a96a' visibility='default' filepath='include/sound/info.h' line='56' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/info.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='a249930e' size-in-bits='64' id='113423d8'/>
+      <pointer-type-def type-id='38cfc416' size-in-bits='64' id='1aa763a8'/>
+      <pointer-type-def type-id='3ba7892a' size-in-bits='64' id='3d52c694'/>
+      <pointer-type-def type-id='fc14a418' size-in-bits='64' id='e118a96a'/>
+      <pointer-type-def type-id='5ef8814f' size-in-bits='64' id='52704eb7'/>
+      <pointer-type-def type-id='52704eb7' size-in-bits='64' id='63cbc127'/>
+      <pointer-type-def type-id='982f66c8' size-in-bits='64' id='00aa6a0e'/>
+      <pointer-type-def type-id='48ad5fc6' size-in-bits='64' id='b9608bfc'/>
+      <pointer-type-def type-id='f9b9a795' size-in-bits='64' id='d9cfece5'/>
+      <pointer-type-def type-id='30b9286d' size-in-bits='64' id='df5f3f5d'/>
+      <pointer-type-def type-id='643f05a0' size-in-bits='64' id='305a7ffa'/>
+      <pointer-type-def type-id='19b22092' size-in-bits='64' id='882bc4d4'/>
+      <pointer-type-def type-id='5a067f4b' size-in-bits='64' id='b9922d07'/>
+      <pointer-type-def type-id='ee9d520a' size-in-bits='64' id='6047a55c'/>
+      <pointer-type-def type-id='593d8168' size-in-bits='64' id='fde42bf2'/>
+      <pointer-type-def type-id='8754454d' size-in-bits='64' id='93226281'/>
+      <pointer-type-def type-id='28026fe4' size-in-bits='64' id='f695e0b6'/>
+      <function-decl name='snd_card_new' mangled-name='snd_card_new' filepath='sound/core/init.c' line='160' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_new'>
+        <parameter type-id='fa0b179b' name='parent' filepath='sound/core/init.c' line='160' column='1'/>
+        <parameter type-id='95e97e5e' name='idx' filepath='sound/core/init.c' line='160' column='1'/>
+        <parameter type-id='80f4b756' name='xid' filepath='sound/core/init.c' line='160' column='1'/>
+        <parameter type-id='2730d015' name='module' filepath='sound/core/init.c' line='161' column='1'/>
+        <parameter type-id='95e97e5e' name='extra_size' filepath='sound/core/init.c' line='161' column='1'/>
+        <parameter type-id='63cbc127' name='card_ret' filepath='sound/core/init.c' line='162' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_component_add' mangled-name='snd_component_add' filepath='sound/core/init.c' line='884' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_component_add'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/init.c' line='884' column='1'/>
+        <parameter type-id='80f4b756' name='component' filepath='sound/core/init.c' line='884' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_card_register' mangled-name='snd_card_register' filepath='sound/core/init.c' line='738' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_register'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/init.c' line='738' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_card_disconnect' mangled-name='snd_card_disconnect' filepath='sound/core/init.c' line='374' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_disconnect'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/init.c' line='374' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_card_free' mangled-name='snd_card_free' filepath='sound/core/init.c' line='513' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_card_free'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/init.c' line='513' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='a249930e'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='38cfc416'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='8efea9e5'/>
+        <parameter type-id='63e171df'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3ba7892a'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fc14a418'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7e666abe'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='643f05a0'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='a54c778f'/>
+        <return type-id='8f254b08'/>
+      </function-type>
+      <function-type size-in-bits='64' id='19b22092'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='69bf7bee'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='69bf7bee'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5a067f4b'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='26a90f95'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee9d520a'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='77e79a4b'/>
+        <parameter type-id='80f4b756'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='69bf7bee'/>
+        <return type-id='79a0948f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='593d8168'>
+        <parameter type-id='52704eb7'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8754454d'>
+        <parameter type-id='b9608bfc'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='28026fe4'>
+        <parameter type-id='b9608bfc'/>
+        <parameter type-id='00aa6a0e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/jack.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='800' id='04f09ed4'>
+        <subrange length='100' type-id='7ff19f0f' id='4196563c'/>
+      </array-type-def>
+      <class-decl name='snd_jack' size-in-bits='1600' is-struct='yes' visibility='default' filepath='include/sound/jack.h' line='60' column='1' id='c4d4ddea'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kctl_list' type-id='72f469ec' visibility='default' filepath='include/sound/jack.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/jack.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='id' type-id='80f4b756' visibility='default' filepath='include/sound/jack.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='input_dev' type-id='74b427eb' visibility='default' filepath='include/sound/jack.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='registered' type-id='95e97e5e' visibility='default' filepath='include/sound/jack.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/sound/jack.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='name' type-id='04f09ed4' visibility='default' filepath='include/sound/jack.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1184'>
+          <var-decl name='key' type-id='0d5c291d' visibility='default' filepath='include/sound/jack.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/jack.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='private_free' type-id='5a798ea9' visibility='default' filepath='include/sound/jack.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/jack.h' line='74' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_jack_types' filepath='include/sound/jack.h' line='38' column='1' id='7851d449'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_JACK_HEADPHONE' value='1'/>
+        <enumerator name='SND_JACK_MICROPHONE' value='2'/>
+        <enumerator name='SND_JACK_HEADSET' value='3'/>
+        <enumerator name='SND_JACK_LINEOUT' value='4'/>
+        <enumerator name='SND_JACK_MECHANICAL' value='8'/>
+        <enumerator name='SND_JACK_VIDEOOUT' value='16'/>
+        <enumerator name='SND_JACK_AVOUT' value='20'/>
+        <enumerator name='SND_JACK_LINEIN' value='32'/>
+        <enumerator name='SND_JACK_BTN_0' value='16384'/>
+        <enumerator name='SND_JACK_BTN_1' value='8192'/>
+        <enumerator name='SND_JACK_BTN_2' value='4096'/>
+        <enumerator name='SND_JACK_BTN_3' value='2048'/>
+        <enumerator name='SND_JACK_BTN_4' value='1024'/>
+        <enumerator name='SND_JACK_BTN_5' value='512'/>
+      </enum-decl>
+      <pointer-type-def type-id='c4d4ddea' size-in-bits='64' id='0f5a7eb8'/>
+      <pointer-type-def type-id='0f5a7eb8' size-in-bits='64' id='bd753fd6'/>
+      <pointer-type-def type-id='fe091efd' size-in-bits='64' id='5a798ea9'/>
+      <function-decl name='snd_jack_new' mangled-name='snd_jack_new' filepath='sound/core/jack.c' line='198' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/jack.c' line='198' column='1'/>
+        <parameter type-id='bd753fd6' name='jjack' filepath='sound/core/jack.c' line='199' column='1'/>
+        <parameter type-id='b50a4934' name='initial_kctl' filepath='sound/core/jack.c' line='199' column='1'/>
+        <parameter type-id='b50a4934' name='phantom_jack' filepath='sound/core/jack.c' line='199' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_jack_set_key' mangled-name='snd_jack_set_key' filepath='sound/core/jack.c' line='321' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_set_key'>
+        <parameter type-id='0f5a7eb8' name='jack' filepath='sound/core/jack.c' line='321' column='1'/>
+        <parameter type-id='7851d449' name='type' filepath='sound/core/jack.c' line='321' column='1'/>
+        <parameter type-id='95e97e5e' name='keytype' filepath='sound/core/jack.c' line='322' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_jack_report' mangled-name='snd_jack_report' filepath='sound/core/jack.c' line='344' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_jack_report'>
+        <parameter type-id='0f5a7eb8' name='jack' filepath='sound/core/jack.c' line='344' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='sound/core/jack.c' line='344' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='fe091efd'>
+        <parameter type-id='0f5a7eb8'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/memalloc.c' language='LANG_C89'>
+      <function-decl name='snd_dma_free_pages' mangled-name='snd_dma_free_pages' filepath='sound/core/memalloc.c' line='213' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dma_free_pages'>
+        <parameter type-id='a02b8cd2' name='dmab' filepath='sound/core/memalloc.c' line='213' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_dma_alloc_pages' mangled-name='snd_dma_alloc_pages' filepath='sound/core/memalloc.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dma_alloc_pages'>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/memalloc.c' line='117' column='1'/>
+        <parameter type-id='fa0b179b' name='device' filepath='sound/core/memalloc.c' line='117' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/memalloc.c' line='117' column='1'/>
+        <parameter type-id='a02b8cd2' name='dmab' filepath='sound/core/memalloc.c' line='118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/misc.c' language='LANG_C89'>
+      <class-decl name='snd_pci_quirk' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/core.h' line='397' column='1' id='8288ae2e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='subvendor' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='subdevice' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='399' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='subdevice_mask' type-id='8efea9e5' visibility='default' filepath='include/sound/core.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='value' type-id='95e97e5e' visibility='default' filepath='include/sound/core.h' line='401' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8288ae2e' const='yes' id='720a6415'/>
+      <pointer-type-def type-id='720a6415' size-in-bits='64' id='c55bcf2d'/>
+      <function-decl name='snd_pci_quirk_lookup' mangled-name='snd_pci_quirk_lookup' filepath='sound/core/misc.c' line='138' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pci_quirk_lookup'>
+        <parameter type-id='85196e3f' name='pci' filepath='sound/core/misc.c' line='138' column='1'/>
+        <parameter type-id='c55bcf2d' name='list' filepath='sound/core/misc.c' line='138' column='1'/>
+        <return type-id='c55bcf2d'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='d6b43ca8' size-in-bits='1152' id='9625c091'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d6b43ca8' size-in-bits='864' id='3871823f'>
+        <subrange length='9' type-id='7ff19f0f' id='12e4273c'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e480899' size-in-bits='768' id='2acd76fe'>
+        <subrange length='3' type-id='7ff19f0f' id='56f209d2'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='7e480899' size-in-bits='1280' id='66c7c544'>
+        <subrange length='5' type-id='7ff19f0f' id='53010e10'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='5d633b6b' size-in-bits='15744' id='5e28cc39'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8efea9e5' size-in-bits='128' id='ff13edc1'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <class-decl name='snd_pcm' size-in-bits='17856' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='505' column='1' id='76f8f8bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/pcm.h' line='506' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='507' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='device' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='508' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='info_flags' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='509' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dev_class' type-id='8efea9e5' visibility='default' filepath='include/sound/pcm.h' line='510' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='272'>
+          <var-decl name='dev_subclass' type-id='8efea9e5' visibility='default' filepath='include/sound/pcm.h' line='511' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/pcm.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/pcm.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='streams' type-id='5e28cc39' visibility='default' filepath='include/sound/pcm.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17216'>
+          <var-decl name='open_mutex' type-id='925167dc' visibility='default' filepath='include/sound/pcm.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17472'>
+          <var-decl name='open_wait' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17664'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17728'>
+          <var-decl name='private_free' type-id='182096ce' visibility='default' filepath='include/sound/pcm.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17792'>
+          <var-decl name='internal' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17800'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='17808'>
+          <var-decl name='no_device_suspend' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='521' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_str' size-in-bits='7872' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='484' column='1' id='5d633b6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='substream_count' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='substream_opened' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='substream' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/pcm.h' line='496' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='chmap_kctl' type-id='7a5054b7' visibility='default' filepath='include/sound/pcm.h' line='501' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dev' type-id='66e487eb' visibility='default' filepath='include/sound/pcm.h' line='502' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_substream' size-in-bits='3968' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='438' column='1' id='362eec9e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='439' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pstr' type-id='e5ffb4bb' visibility='default' filepath='include/sound/pcm.h' line='440' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='441' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='number' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='442' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='name' type-id='16dc656a' visibility='default' filepath='include/sound/pcm.h' line='443' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='444' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='latency_pm_qos_req' type-id='cd6fc142' visibility='default' filepath='include/sound/pcm.h' line='445' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='buffer_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='446' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='dma_buffer' type-id='c5addfb4' visibility='default' filepath='include/sound/pcm.h' line='447' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='dma_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='448' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/pcm.h' line='450' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/pcm.h' line='452' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='timer' type-id='6ee1a870' visibility='default' filepath='include/sound/pcm.h' line='454' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='timer_running' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='455' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='wait_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/pcm.h' line='456' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='next' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='458' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='link_list' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='460' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='self_group' type-id='5e60e97f' visibility='default' filepath='include/sound/pcm.h' line='461' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='group' type-id='8042a887' visibility='default' filepath='include/sound/pcm.h' line='462' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='ref_count' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='464' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3616'>
+          <var-decl name='mmap_count' type-id='49178f86' visibility='default' filepath='include/sound/pcm.h' line='465' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='f_flags' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='466' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3712'>
+          <var-decl name='pcm_release' type-id='897d1b6d' visibility='default' filepath='include/sound/pcm.h' line='467' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='pid' type-id='b94e5398' visibility='default' filepath='include/sound/pcm.h' line='468' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='proc_root' type-id='b9608bfc' visibility='default' filepath='include/sound/pcm.h' line='474' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='hw_opened' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='477' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='hw_no_buffer' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='478' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_dma_buffer' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='51' column='1' id='c5addfb4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='724d481c' visibility='default' filepath='include/sound/memalloc.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='area' type-id='cf536864' visibility='default' filepath='include/sound/memalloc.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='addr' type-id='cf29c9b3' visibility='default' filepath='include/sound/memalloc.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='bytes' type-id='b59d7dce' visibility='default' filepath='include/sound/memalloc.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/memalloc.h' line='56' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_dma_device' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/memalloc.h' line='19' column='1' id='724d481c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='include/sound/memalloc.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/memalloc.h' line='21' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_ops' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='52' column='1' id='73803d48'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='open' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='close' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='ioctl' type-id='b47996f0' visibility='default' filepath='include/sound/pcm.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/pcm.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/pcm.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='e17d6b77' visibility='default' filepath='include/sound/pcm.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_time_info' type-id='e915c45c' visibility='default' filepath='include/sound/pcm.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fill_silence' type-id='4dbb0953' visibility='default' filepath='include/sound/pcm.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='copy_user' type-id='7e4306d7' visibility='default' filepath='include/sound/pcm.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='copy_kernel' type-id='7e4306d7' visibility='default' filepath='include/sound/pcm.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='page' type-id='df9eab8a' visibility='default' filepath='include/sound/pcm.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mmap' type-id='3d7033ef' visibility='default' filepath='include/sound/pcm.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='ack' type-id='ab756384' visibility='default' filepath='include/sound/pcm.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_params' size-in-bits='4864' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='396' column='1' id='6c57d4a8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='masks' type-id='2acd76fe' visibility='default' filepath='include/uapi/sound/asound.h' line='398' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='mres' type-id='66c7c544' visibility='default' filepath='include/uapi/sound/asound.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='intervals' type-id='9625c091' visibility='default' filepath='include/uapi/sound/asound.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3232'>
+          <var-decl name='ires' type-id='3871823f' visibility='default' filepath='include/uapi/sound/asound.h' line='403' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='rmask' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4128'>
+          <var-decl name='cmask' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='406' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4192'>
+          <var-decl name='msbits' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='407' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='rate_num' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4256'>
+          <var-decl name='rate_den' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='fifo_size' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='410' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='reserved' type-id='b1888bf8' visibility='default' filepath='include/uapi/sound/asound.h' line='411' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_mask' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='392' column='1' id='7e480899'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bits' type-id='7f84eb57' visibility='default' filepath='include/uapi/sound/asound.h' line='393' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_interval' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='382' column='1' id='d6b43ca8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='max' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='383' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='openmin' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='openmax' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='integer' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='386' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='empty' type-id='f0981eeb' visibility='default' filepath='include/uapi/sound/asound.h' line='387' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_uframes_t' type-id='7359adad' filepath='include/uapi/sound/asound.h' line='159' column='1' id='df412e35'/>
+      <class-decl name='snd_pcm_audio_tstamp_config' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='294' column='1' id='cf2e67bb'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type_requested' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='296' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='report_delay' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='297' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_audio_tstamp_report' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='311' column='1' id='7cd8db07'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='valid' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='315' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='actual_type' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='accuracy_report' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='accuracy' type-id='19c2251e' visibility='default' filepath='include/sound/pcm.h' line='322' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_runtime' size-in-bits='6080' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='342' column='1' id='bc78c060'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='trigger_master' type-id='06b2cd14' visibility='default' filepath='include/sound/pcm.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='trigger_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/sound/pcm.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger_tstamp_latched' type-id='b50a4934' visibility='default' filepath='include/sound/pcm.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='overrange' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='avail_max' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='hw_ptr_base' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_ptr_interrupt' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='hw_ptr_jiffies' type-id='7359adad' visibility='default' filepath='include/sound/pcm.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='hw_ptr_buffer_jiffies' type-id='7359adad' visibility='default' filepath='include/sound/pcm.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='delay' type-id='721b74e7' visibility='default' filepath='include/sound/pcm.h' line='353' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='hw_ptr_wrap' type-id='91ce1af9' visibility='default' filepath='include/sound/pcm.h' line='354' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='access' type-id='6459083c' visibility='default' filepath='include/sound/pcm.h' line='357' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='format' type-id='67fa9bd5' visibility='default' filepath='include/sound/pcm.h' line='358' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subformat' type-id='2bc87435' visibility='default' filepath='include/sound/pcm.h' line='359' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='360' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='361' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='period_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='362' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='periods' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='buffer_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='364' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='min_align' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='365' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='byte_align' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='366' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='frame_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='367' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='368' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1312'>
+          <var-decl name='rate_num' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='rate_den' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='no_period_wakeup' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='tstamp_mode' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='period_step' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='start_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='377' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='stop_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='378' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='silence_threshold' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='379' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='silence_size' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='381' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='boundary' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='382' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='silence_start' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='384' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='silence_filled' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='385' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='sync' type-id='85b4e5de' visibility='default' filepath='include/sound/pcm.h' line='387' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='status' type-id='25b56694' visibility='default' filepath='include/sound/pcm.h' line='390' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='control' type-id='87a69661' visibility='default' filepath='include/sound/pcm.h' line='391' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='twake' type-id='df412e35' visibility='default' filepath='include/sound/pcm.h' line='394' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='sleep' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='395' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='tsleep' type-id='b5ab048f' visibility='default' filepath='include/sound/pcm.h' line='396' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='fasync' type-id='5bb9c75d' visibility='default' filepath='include/sound/pcm.h' line='397' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='400' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='private_free' type-id='c61a7923' visibility='default' filepath='include/sound/pcm.h' line='401' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='hw' type-id='eacd353c' visibility='default' filepath='include/sound/pcm.h' line='404' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='hw_constraints' type-id='82c7680e' visibility='default' filepath='include/sound/pcm.h' line='405' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='timer_resolution' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='408' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='tstamp_type' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='409' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5568'>
+          <var-decl name='dma_area' type-id='cf536864' visibility='default' filepath='include/sound/pcm.h' line='412' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5632'>
+          <var-decl name='dma_addr' type-id='cf29c9b3' visibility='default' filepath='include/sound/pcm.h' line='413' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5696'>
+          <var-decl name='dma_bytes' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='414' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5760'>
+          <var-decl name='dma_buffer_p' type-id='a02b8cd2' visibility='default' filepath='include/sound/pcm.h' line='416' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5824'>
+          <var-decl name='audio_tstamp_config' type-id='cf2e67bb' visibility='default' filepath='include/sound/pcm.h' line='419' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5856'>
+          <var-decl name='audio_tstamp_report' type-id='7cd8db07' visibility='default' filepath='include/sound/pcm.h' line='420' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='driver_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/sound/pcm.h' line='421' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='snd_pcm_sync_id' size-in-bits='128' visibility='default' filepath='include/uapi/sound/asound.h' line='324' column='1' id='85b4e5de'>
+        <data-member access='public'>
+          <var-decl name='id' type-id='92a46553' visibility='default' filepath='include/uapi/sound/asound.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='id16' type-id='ff13edc1' visibility='default' filepath='include/uapi/sound/asound.h' line='326' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='id32' type-id='49580a63' visibility='default' filepath='include/uapi/sound/asound.h' line='327' column='1'/>
+        </data-member>
+      </union-decl>
+      <typedef-decl name='snd_pcm_sframes_t' type-id='bd54fe1a' filepath='include/uapi/sound/asound.h' line='160' column='1' id='721b74e7'/>
+      <typedef-decl name='snd_pcm_access_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='184' column='1' id='6459083c'/>
+      <typedef-decl name='snd_pcm_format_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='192' column='1' id='67fa9bd5'/>
+      <typedef-decl name='snd_pcm_subformat_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='275' column='1' id='2bc87435'/>
+      <class-decl name='snd_pcm_mmap_status' size-in-bits='448' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='477' column='1' id='6ae96bbe'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='state' type-id='33158de9' visibility='default' filepath='include/uapi/sound/asound.h' line='478' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pad1' type-id='95e97e5e' visibility='default' filepath='include/uapi/sound/asound.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='hw_ptr' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='suspended_state' type-id='33158de9' visibility='default' filepath='include/uapi/sound/asound.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='audio_tstamp' type-id='a9c79a1f' visibility='default' filepath='include/uapi/sound/asound.h' line='483' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_state_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='306' column='1' id='33158de9'/>
+      <class-decl name='snd_pcm_mmap_control' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/uapi/sound/asound.h' line='486' column='1' id='3a3e1b69'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='appl_ptr' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='avail_min' type-id='df412e35' visibility='default' filepath='include/uapi/sound/asound.h' line='488' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hardware' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='31' column='1' id='eacd353c'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='info' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/pcm.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='buffer_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='period_bytes_min' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='period_bytes_max' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='periods_min' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='42' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='periods_max' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='fifo_size' type-id='b59d7dce' visibility='default' filepath='include/sound/pcm.h' line='44' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_constraints' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='236' column='1' id='82c7680e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='masks' type-id='2acd76fe' visibility='default' filepath='include/sound/pcm.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='intervals' type-id='9625c091' visibility='default' filepath='include/sound/pcm.h' line='239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='rules_num' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='rules_all' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='rules' type-id='3cc81bea' visibility='default' filepath='include/sound/pcm.h' line='243' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_hw_rule' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='227' column='1' id='015799ac'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='cond' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='228' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='var' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='229' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='deps' type-id='2020bac4' visibility='default' filepath='include/sound/pcm.h' line='230' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='func' type-id='58d3b2a5' visibility='default' filepath='include/sound/pcm.h' line='232' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='233' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_hw_rule_func_t' type-id='657a5cf1' filepath='include/sound/pcm.h' line='224' column='1' id='58d3b2a5'/>
+      <class-decl name='snd_pcm_group' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='429' column='1' id='5e60e97f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/pcm.h' line='430' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/pcm.h' line='431' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='substreams' type-id='72f469ec' visibility='default' filepath='include/sound/pcm.h' line='432' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='refs' type-id='64615833' visibility='default' filepath='include/sound/pcm.h' line='433' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='73803d48' const='yes' id='71bae7c7'/>
+      <pointer-type-def type-id='71bae7c7' size-in-bits='64' id='f63b1a17'/>
+      <pointer-type-def type-id='5ec4fc8d' size-in-bits='64' id='657a5cf1'/>
+      <pointer-type-def type-id='7d4ff292' size-in-bits='64' id='ab756384'/>
+      <pointer-type-def type-id='49a390c7' size-in-bits='64' id='898a0783'/>
+      <pointer-type-def type-id='289e9467' size-in-bits='64' id='4dbb0953'/>
+      <pointer-type-def type-id='0d01392b' size-in-bits='64' id='7e4306d7'/>
+      <pointer-type-def type-id='f8f2633f' size-in-bits='64' id='2b3f1c33'/>
+      <pointer-type-def type-id='d843d992' size-in-bits='64' id='e915c45c'/>
+      <pointer-type-def type-id='5786af66' size-in-bits='64' id='b47996f0'/>
+      <pointer-type-def type-id='024a8f8b' size-in-bits='64' id='3d7033ef'/>
+      <pointer-type-def type-id='93db4230' size-in-bits='64' id='df9eab8a'/>
+      <pointer-type-def type-id='c5addfb4' size-in-bits='64' id='a02b8cd2'/>
+      <pointer-type-def type-id='76f8f8bb' size-in-bits='64' id='4c9f335b'/>
+      <pointer-type-def type-id='4c9f335b' size-in-bits='64' id='0f9dfae3'/>
+      <pointer-type-def type-id='cf2e67bb' size-in-bits='64' id='fbaba52b'/>
+      <pointer-type-def type-id='7cd8db07' size-in-bits='64' id='730ae11f'/>
+      <pointer-type-def type-id='5e60e97f' size-in-bits='64' id='8042a887'/>
+      <pointer-type-def type-id='6c57d4a8' size-in-bits='64' id='363a995e'/>
+      <pointer-type-def type-id='015799ac' size-in-bits='64' id='3cc81bea'/>
+      <pointer-type-def type-id='3a3e1b69' size-in-bits='64' id='87a69661'/>
+      <pointer-type-def type-id='6ae96bbe' size-in-bits='64' id='25b56694'/>
+      <pointer-type-def type-id='bc78c060' size-in-bits='64' id='17a05af6'/>
+      <pointer-type-def type-id='5d633b6b' size-in-bits='64' id='e5ffb4bb'/>
+      <pointer-type-def type-id='362eec9e' size-in-bits='64' id='06b2cd14'/>
+      <pointer-type-def type-id='a9c79a1f' size-in-bits='64' id='3d83ba87'/>
+      <pointer-type-def type-id='747e7623' size-in-bits='64' id='e17d6b77'/>
+      <pointer-type-def type-id='9f77c6d4' size-in-bits='64' id='182096ce'/>
+      <pointer-type-def type-id='2c85e41f' size-in-bits='64' id='c61a7923'/>
+      <pointer-type-def type-id='130ae6d1' size-in-bits='64' id='897d1b6d'/>
+      <function-decl name='snd_pcm_new' mangled-name='snd_pcm_new' filepath='sound/core/pcm.c' line='773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_new'>
+        <parameter type-id='52704eb7' name='card' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='95e97e5e' name='device' filepath='sound/core/pcm.c' line='773' column='1'/>
+        <parameter type-id='95e97e5e' name='playback_count' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <parameter type-id='95e97e5e' name='capture_count' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <parameter type-id='0f9dfae3' name='rpcm' filepath='sound/core/pcm.c' line='774' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='5ec4fc8d'>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='3cc81bea'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7d4ff292'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='49a390c7'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='289e9467'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0d01392b'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f8f2633f'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d843d992'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='3d83ba87'/>
+        <parameter type-id='3d83ba87'/>
+        <parameter type-id='fbaba52b'/>
+        <parameter type-id='730ae11f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='5786af66'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='024a8f8b'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='2ae08426'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='93db4230'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='02f11ed4'/>
+      </function-type>
+      <function-type size-in-bits='64' id='747e7623'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='df412e35'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9f77c6d4'>
+        <parameter type-id='4c9f335b'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='2c85e41f'>
+        <parameter type-id='17a05af6'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='130ae6d1'>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <pointer-type-def type-id='73595e52' size-in-bits='64' id='6ee1a870'/>
+      <class-decl name='snd_timer' size-in-bits='3648' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='60' column='1' id='73595e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tmr_class' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/timer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/timer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tmr_device' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tmr_subdevice' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/timer.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/timer.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='running' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='sticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/timer.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_free' type-id='4a508205' visibility='default' filepath='include/sound/timer.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hw' type-id='bb41d987' visibility='default' filepath='include/sound/timer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/timer.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='open_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='active_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='task_queue' type-id='7a7ea727' visibility='default' filepath='include/sound/timer.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='num_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/timer.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_timer_hardware' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='41' column='1' id='bb41d987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resolution' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='resolution_min' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resolution_max' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='open' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='close' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='c_resolution' type-id='3c60c5fb' visibility='default' filepath='include/sound/timer.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_period' type-id='af229338' visibility='default' filepath='include/sound/timer.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='precise_resolution' type-id='cc036b58' visibility='default' filepath='include/sound/timer.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/timer.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='66412cc1' size-in-bits='64' id='4a508205'/>
+      <pointer-type-def type-id='8826ec36' size-in-bits='64' id='563fdf98'/>
+      <pointer-type-def type-id='51ca9086' size-in-bits='64' id='cc036b58'/>
+      <pointer-type-def type-id='34c6e216' size-in-bits='64' id='af229338'/>
+      <pointer-type-def type-id='ee28e0c7' size-in-bits='64' id='3c60c5fb'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_dmaengine.c' language='LANG_C89'>
+      <qualified-type-def type-id='6c57d4a8' const='yes' id='4db19167'/>
+      <pointer-type-def type-id='4db19167' size-in-bits='64' id='9b87bc37'/>
+      <qualified-type-def type-id='362eec9e' const='yes' id='ee10f079'/>
+      <pointer-type-def type-id='ee10f079' size-in-bits='64' id='17aa52a9'/>
+      <function-decl name='snd_hwparams_to_dma_slave_config' mangled-name='snd_hwparams_to_dma_slave_config' filepath='sound/core/pcm_dmaengine.c' line='52' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_hwparams_to_dma_slave_config'>
+        <parameter type-id='17aa52a9' name='substream' filepath='sound/core/pcm_dmaengine.c' line='52' column='1'/>
+        <parameter type-id='9b87bc37' name='params' filepath='sound/core/pcm_dmaengine.c' line='53' column='1'/>
+        <parameter type-id='4f22192a' name='slave_config' filepath='sound/core/pcm_dmaengine.c' line='54' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_trigger' mangled-name='snd_dmaengine_pcm_trigger' filepath='sound/core/pcm_dmaengine.c' line='182' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_trigger'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='182' column='1'/>
+        <parameter type-id='95e97e5e' name='cmd' filepath='sound/core/pcm_dmaengine.c' line='182' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_pointer_no_residue' mangled-name='snd_dmaengine_pcm_pointer_no_residue' filepath='sound/core/pcm_dmaengine.c' line='226' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_pointer_no_residue'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='226' column='1'/>
+        <return type-id='df412e35'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_pointer' mangled-name='snd_dmaengine_pcm_pointer' filepath='sound/core/pcm_dmaengine.c' line='240' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_pointer'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='240' column='1'/>
+        <return type-id='df412e35'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_open_request_chan' mangled-name='snd_dmaengine_pcm_open_request_chan' filepath='sound/core/pcm_dmaengine.c' line='331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_open_request_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='331' column='1'/>
+        <parameter type-id='55f53546' name='filter_fn' filepath='sound/core/pcm_dmaengine.c' line='332' column='1'/>
+        <parameter type-id='eaa32e2f' name='filter_data' filepath='sound/core/pcm_dmaengine.c' line='332' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_open' mangled-name='snd_dmaengine_pcm_open' filepath='sound/core/pcm_dmaengine.c' line='292' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_open'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='292' column='1'/>
+        <parameter type-id='27f3f5d8' name='chan' filepath='sound/core/pcm_dmaengine.c' line='293' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_get_chan' mangled-name='snd_dmaengine_pcm_get_chan' filepath='sound/core/pcm_dmaengine.c' line='35' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_get_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='35' column='1'/>
+        <return type-id='27f3f5d8'/>
+      </function-decl>
+      <function-decl name='snd_dmaengine_pcm_close_release_chan' mangled-name='snd_dmaengine_pcm_close_release_chan' filepath='sound/core/pcm_dmaengine.c' line='360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_close_release_chan'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_dmaengine.c' line='360' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_drm_eld.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_hw_constraint_eld' mangled-name='snd_pcm_hw_constraint_eld' filepath='sound/core/pcm_drm_eld.c' line='80' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_eld'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_drm_eld.c' line='80' column='1'/>
+        <parameter type-id='eaa32e2f' name='eld' filepath='sound/core/pcm_drm_eld.c' line='80' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_iec958.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_create_iec958_consumer_hw_params' mangled-name='snd_pcm_create_iec958_consumer_hw_params' filepath='sound/core/pcm_iec958.c' line='117' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_create_iec958_consumer_hw_params'>
+        <parameter type-id='363a995e' name='params' filepath='sound/core/pcm_iec958.c' line='117' column='1'/>
+        <parameter type-id='8bff8096' name='cs' filepath='sound/core/pcm_iec958.c' line='118' column='1'/>
+        <parameter type-id='b59d7dce' name='len' filepath='sound/core/pcm_iec958.c' line='118' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_lib.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='3b0abfc6' size-in-bits='768' id='93f82aba'>
+        <subrange length='6' type-id='7ff19f0f' id='52fa524b'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='002ac4a6' size-in-bits='120' id='92ab2118'>
+        <subrange length='15' type-id='7ff19f0f' id='8484ba73'/>
+      </array-type-def>
+      <class-decl name='snd_pcm_chmap_elem' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='1362' column='1' id='09098b3b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='channels' type-id='002ac4a6' visibility='default' filepath='include/sound/pcm.h' line='1363' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='map' type-id='92ab2118' visibility='default' filepath='include/sound/pcm.h' line='1364' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='snd_pcm_hw_param_t' type-id='95e97e5e' filepath='include/uapi/sound/asound.h' line='346' column='1' id='6b55ba25'/>
+      <typedef-decl name='u_int64_t' type-id='91ce1af9' filepath='include/linux/types.h' line='113' column='1' id='f1f7b9a4'/>
+      <class-decl name='snd_pcm_hw_constraint_list' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='278' column='1' id='f5f6e55e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='5b2fd8e8' visibility='default' filepath='include/sound/pcm.h' line='279' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='count' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='280' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='281' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_pcm_chmap' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/pcm.h' line='1368' column='1' id='e8a73faf'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/pcm.h' line='1369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream' type-id='95e97e5e' visibility='default' filepath='include/sound/pcm.h' line='1370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='kctl' type-id='7a5054b7' visibility='default' filepath='include/sound/pcm.h' line='1371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='chmap' type-id='ddec2084' visibility='default' filepath='include/sound/pcm.h' line='1372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='max_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='1373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='channel_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/pcm.h' line='1374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/pcm.h' line='1375' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='d6b43ca8' const='yes' id='81795b61'/>
+      <pointer-type-def type-id='81795b61' size-in-bits='64' id='1d0ab711'/>
+      <qualified-type-def type-id='09098b3b' const='yes' id='3b0abfc6'/>
+      <pointer-type-def type-id='3b0abfc6' size-in-bits='64' id='ddec2084'/>
+      <qualified-type-def type-id='f5f6e55e' const='yes' id='fa3724eb'/>
+      <pointer-type-def type-id='fa3724eb' size-in-bits='64' id='a5cedbd3'/>
+      <pointer-type-def type-id='d6b43ca8' size-in-bits='64' id='732e15ce'/>
+      <pointer-type-def type-id='e8a73faf' size-in-bits='64' id='70ff05c7'/>
+      <pointer-type-def type-id='70ff05c7' size-in-bits='64' id='ce765417'/>
+      <var-decl name='snd_pcm_std_chmaps' type-id='93f82aba' mangled-name='snd_pcm_std_chmaps' visibility='default' filepath='sound/core/pcm_lib.c' line='2258' column='1' elf-symbol-id='snd_pcm_std_chmaps'/>
+      <var-decl name='snd_pcm_alt_chmaps' type-id='93f82aba' mangled-name='snd_pcm_alt_chmaps' visibility='default' filepath='sound/core/pcm_lib.c' line='2280' column='1' elf-symbol-id='snd_pcm_alt_chmaps'/>
+      <function-decl name='snd_pcm_period_elapsed' mangled-name='snd_pcm_period_elapsed' filepath='sound/core/pcm_lib.c' line='1781' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_period_elapsed'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_lib.c' line='1781' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_interval_refine' mangled-name='snd_interval_refine' filepath='sound/core/pcm_lib.c' line='570' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_interval_refine'>
+        <parameter type-id='732e15ce' name='i' filepath='sound/core/pcm_lib.c' line='570' column='1'/>
+        <parameter type-id='1d0ab711' name='v' filepath='sound/core/pcm_lib.c' line='570' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_rule_add' mangled-name='snd_pcm_hw_rule_add' filepath='sound/core/pcm_lib.c' line='1109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_rule_add'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1109' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1109' column='1'/>
+        <parameter type-id='95e97e5e' name='var' filepath='sound/core/pcm_lib.c' line='1110' column='1'/>
+        <parameter type-id='58d3b2a5' name='func' filepath='sound/core/pcm_lib.c' line='1111' column='1'/>
+        <parameter type-id='eaa32e2f' name='private' filepath='sound/core/pcm_lib.c' line='1111' column='1'/>
+        <parameter type-id='95e97e5e' name='dep' filepath='sound/core/pcm_lib.c' line='1112' column='1'/>
+        <parameter is-variadic='yes'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_set_sync' mangled-name='snd_pcm_set_sync' filepath='sound/core/pcm_lib.c' line='488' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_set_sync'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_lib.c' line='488' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_set_ops' mangled-name='snd_pcm_set_ops' filepath='sound/core/pcm_lib.c' line='471' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_set_ops'>
+        <parameter type-id='4c9f335b' name='pcm' filepath='sound/core/pcm_lib.c' line='471' column='1'/>
+        <parameter type-id='95e97e5e' name='direction' filepath='sound/core/pcm_lib.c' line='471' column='1'/>
+        <parameter type-id='f63b1a17' name='ops' filepath='sound/core/pcm_lib.c' line='472' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_ioctl' mangled-name='snd_pcm_lib_ioctl' filepath='sound/core/pcm_lib.c' line='1755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_ioctl'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_lib.c' line='1755' column='1'/>
+        <parameter type-id='f0981eeb' name='cmd' filepath='sound/core/pcm_lib.c' line='1756' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='sound/core/pcm_lib.c' line='1756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_step' mangled-name='snd_pcm_hw_constraint_step' filepath='sound/core/pcm_lib.c' line='1433' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_step'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1433' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1434' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1435' column='1'/>
+        <parameter type-id='7359adad' name='step' filepath='sound/core/pcm_lib.c' line='1436' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_msbits' mangled-name='snd_pcm_hw_constraint_msbits' filepath='sound/core/pcm_lib.c' line='1404' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_msbits'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1404' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1405' column='1'/>
+        <parameter type-id='f0981eeb' name='width' filepath='sound/core/pcm_lib.c' line='1406' column='1'/>
+        <parameter type-id='f0981eeb' name='msbits' filepath='sound/core/pcm_lib.c' line='1407' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_minmax' mangled-name='snd_pcm_hw_constraint_minmax' filepath='sound/core/pcm_lib.c' line='1228' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_minmax'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1228' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1228' column='1'/>
+        <parameter type-id='f0981eeb' name='min' filepath='sound/core/pcm_lib.c' line='1229' column='1'/>
+        <parameter type-id='f0981eeb' name='max' filepath='sound/core/pcm_lib.c' line='1229' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_mask64' mangled-name='snd_pcm_hw_constraint_mask64' filepath='sound/core/pcm_lib.c' line='1185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_mask64'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1185' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1185' column='1'/>
+        <parameter type-id='f1f7b9a4' name='mask' filepath='sound/core/pcm_lib.c' line='1186' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_list' mangled-name='snd_pcm_hw_constraint_list' filepath='sound/core/pcm_lib.c' line='1260' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_list'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1260' column='1'/>
+        <parameter type-id='f0981eeb' name='cond' filepath='sound/core/pcm_lib.c' line='1261' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1262' column='1'/>
+        <parameter type-id='a5cedbd3' name='l' filepath='sound/core/pcm_lib.c' line='1263' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_hw_constraint_integer' mangled-name='snd_pcm_hw_constraint_integer' filepath='sound/core/pcm_lib.c' line='1209' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_hw_constraint_integer'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_lib.c' line='1209' column='1'/>
+        <parameter type-id='6b55ba25' name='var' filepath='sound/core/pcm_lib.c' line='1209' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_add_chmap_ctls' mangled-name='snd_pcm_add_chmap_ctls' filepath='sound/core/pcm_lib.c' line='2418' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_add_chmap_ctls'>
+        <parameter type-id='4c9f335b' name='pcm' filepath='sound/core/pcm_lib.c' line='2418' column='1'/>
+        <parameter type-id='95e97e5e' name='stream' filepath='sound/core/pcm_lib.c' line='2418' column='1'/>
+        <parameter type-id='ddec2084' name='chmap' filepath='sound/core/pcm_lib.c' line='2419' column='1'/>
+        <parameter type-id='95e97e5e' name='max_channels' filepath='sound/core/pcm_lib.c' line='2420' column='1'/>
+        <parameter type-id='7359adad' name='private_value' filepath='sound/core/pcm_lib.c' line='2421' column='1'/>
+        <parameter type-id='ce765417' name='info_ret' filepath='sound/core/pcm_lib.c' line='2422' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_memory.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_lib_preallocate_pages_for_all' mangled-name='snd_pcm_lib_preallocate_pages_for_all' filepath='sound/core/pcm_memory.c' line='241' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_pages_for_all'>
+        <parameter type-id='4c9f335b' name='pcm' filepath='sound/core/pcm_memory.c' line='241' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/pcm_memory.c' line='242' column='1'/>
+        <parameter type-id='eaa32e2f' name='data' filepath='sound/core/pcm_memory.c' line='242' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/pcm_memory.c' line='243' column='1'/>
+        <parameter type-id='b59d7dce' name='max' filepath='sound/core/pcm_memory.c' line='243' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_preallocate_pages' mangled-name='snd_pcm_lib_preallocate_pages' filepath='sound/core/pcm_memory.c' line='220' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='220' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/core/pcm_memory.c' line='221' column='1'/>
+        <parameter type-id='fa0b179b' name='data' filepath='sound/core/pcm_memory.c' line='221' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/pcm_memory.c' line='222' column='1'/>
+        <parameter type-id='b59d7dce' name='max' filepath='sound/core/pcm_memory.c' line='222' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_preallocate_free_for_all' mangled-name='snd_pcm_lib_preallocate_free_for_all' filepath='sound/core/pcm_memory.c' line='87' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_preallocate_free_for_all'>
+        <parameter type-id='4c9f335b' name='pcm' filepath='sound/core/pcm_memory.c' line='87' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_malloc_pages' mangled-name='snd_pcm_lib_malloc_pages' filepath='sound/core/pcm_memory.c' line='287' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_malloc_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='287' column='1'/>
+        <parameter type-id='b59d7dce' name='size' filepath='sound/core/pcm_memory.c' line='287' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_free_pages' mangled-name='snd_pcm_lib_free_pages' filepath='sound/core/pcm_memory.c' line='338' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_free_pages'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_memory.c' line='338' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_misc.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_rate_to_rate_bit' mangled-name='snd_pcm_rate_to_rate_bit' filepath='sound/core/pcm_misc.c' line='510' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_to_rate_bit'>
+        <parameter type-id='f0981eeb' name='rate' filepath='sound/core/pcm_misc.c' line='510' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_pcm_rate_range_to_bits' mangled-name='snd_pcm_rate_range_to_bits' filepath='sound/core/pcm_misc.c' line='589' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_range_to_bits'>
+        <parameter type-id='f0981eeb' name='rate_min' filepath='sound/core/pcm_misc.c' line='589' column='1'/>
+        <parameter type-id='f0981eeb' name='rate_max' filepath='sound/core/pcm_misc.c' line='590' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_pcm_rate_bit_to_rate' mangled-name='snd_pcm_rate_bit_to_rate' filepath='sound/core/pcm_misc.c' line='528' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_rate_bit_to_rate'>
+        <parameter type-id='f0981eeb' name='rate_bit' filepath='sound/core/pcm_misc.c' line='528' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_pcm_limit_hw_rates' mangled-name='snd_pcm_limit_hw_rates' filepath='sound/core/pcm_misc.c' line='484' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_limit_hw_rates'>
+        <parameter type-id='17a05af6' name='runtime' filepath='sound/core/pcm_misc.c' line='484' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_format_width' mangled-name='snd_pcm_format_width' filepath='sound/core/pcm_misc.c' line='343' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_format_width'>
+        <parameter type-id='67fa9bd5' name='format' filepath='sound/core/pcm_misc.c' line='343' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_format_physical_width' mangled-name='snd_pcm_format_physical_width' filepath='sound/core/pcm_misc.c' line='361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_format_physical_width'>
+        <parameter type-id='67fa9bd5' name='format' filepath='sound/core/pcm_misc.c' line='361' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/pcm_native.c' language='LANG_C89'>
+      <function-decl name='snd_pcm_stop' mangled-name='snd_pcm_stop' filepath='sound/core/pcm_native.c' line='1331' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_stop'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_native.c' line='1331' column='1'/>
+        <parameter type-id='33158de9' name='state' filepath='sound/core/pcm_native.c' line='1331' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_pcm_lib_default_mmap' mangled-name='snd_pcm_lib_default_mmap' filepath='sound/core/pcm_native.c' line='3419' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_pcm_lib_default_mmap'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/core/pcm_native.c' line='3419' column='1'/>
+        <parameter type-id='2ae08426' name='area' filepath='sound/core/pcm_native.c' line='3420' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/timer.c' language='LANG_C89'>
+      <class-decl name='snd_timer' size-in-bits='3648' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='60' column='1' id='73595e52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='tmr_class' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='include/sound/timer.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='module' type-id='2730d015' visibility='default' filepath='include/sound/timer.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='tmr_device' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='tmr_subdevice' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='id' type-id='59daf3ef' visibility='default' filepath='include/sound/timer.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='name' type-id='aa5ff375' visibility='default' filepath='include/sound/timer.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1440'>
+          <var-decl name='running' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='sticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='private_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/timer.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='private_free' type-id='4a508205' visibility='default' filepath='include/sound/timer.h' line='72' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='hw' type-id='bb41d987' visibility='default' filepath='include/sound/timer.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='include/sound/timer.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='device_list' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='75' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='open_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='active_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='ack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='sack_list_head' type-id='72f469ec' visibility='default' filepath='include/sound/timer.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='task_queue' type-id='7a7ea727' visibility='default' filepath='include/sound/timer.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='max_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3552'>
+          <var-decl name='num_instances' type-id='95e97e5e' visibility='default' filepath='include/sound/timer.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/timer.h' line='84' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_timer_hardware' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/sound/timer.h' line='41' column='1' id='bb41d987'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='flags' type-id='f0981eeb' visibility='default' filepath='include/sound/timer.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='resolution' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='resolution_min' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='resolution_max' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='ticks' type-id='7359adad' visibility='default' filepath='include/sound/timer.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='open' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='close' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='c_resolution' type-id='3c60c5fb' visibility='default' filepath='include/sound/timer.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='start' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='stop' type-id='563fdf98' visibility='default' filepath='include/sound/timer.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_period' type-id='af229338' visibility='default' filepath='include/sound/timer.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='precise_resolution' type-id='cc036b58' visibility='default' filepath='include/sound/timer.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/timer.h' line='57' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='8826ec36' size-in-bits='64' id='563fdf98'/>
+      <pointer-type-def type-id='51ca9086' size-in-bits='64' id='cc036b58'/>
+      <pointer-type-def type-id='34c6e216' size-in-bits='64' id='af229338'/>
+      <pointer-type-def type-id='73595e52' size-in-bits='64' id='6ee1a870'/>
+      <pointer-type-def type-id='ee28e0c7' size-in-bits='64' id='3c60c5fb'/>
+      <pointer-type-def type-id='66412cc1' size-in-bits='64' id='4a508205'/>
+      <function-decl name='snd_timer_interrupt' mangled-name='snd_timer_interrupt' filepath='sound/core/timer.c' line='811' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_timer_interrupt'>
+        <parameter type-id='6ee1a870' name='timer' filepath='sound/core/timer.c' line='811' column='1'/>
+        <parameter type-id='7359adad' name='ticks_left' filepath='sound/core/timer.c' line='811' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='8826ec36'>
+        <parameter type-id='6ee1a870'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='51ca9086'>
+        <parameter type-id='6ee1a870'/>
+        <parameter type-id='1d2c2b85'/>
+        <parameter type-id='1d2c2b85'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34c6e216'>
+        <parameter type-id='6ee1a870'/>
+        <parameter type-id='7359adad'/>
+        <parameter type-id='7359adad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ee28e0c7'>
+        <parameter type-id='6ee1a870'/>
+        <return type-id='7359adad'/>
+      </function-type>
+      <function-type size-in-bits='64' id='66412cc1'>
+        <parameter type-id='6ee1a870'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/core/vmaster.c' language='LANG_C89'>
+      <pointer-type-def type-id='cc7d2869' size-in-bits='64' id='be4e3fad'/>
+      <function-decl name='snd_ctl_sync_vmaster' mangled-name='snd_ctl_sync_vmaster' filepath='sound/core/vmaster.c' line='466' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_sync_vmaster'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/vmaster.c' line='466' column='1'/>
+        <parameter type-id='b50a4934' name='hook_only' filepath='sound/core/vmaster.c' line='466' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_ctl_make_virtual_master' mangled-name='snd_ctl_make_virtual_master' filepath='sound/core/vmaster.c' line='391' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_make_virtual_master'>
+        <parameter type-id='26a90f95' name='name' filepath='sound/core/vmaster.c' line='391' column='1'/>
+        <parameter type-id='5b2fd8e8' name='tlv' filepath='sound/core/vmaster.c' line='392' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_ctl_apply_vmaster_slaves' mangled-name='snd_ctl_apply_vmaster_slaves' filepath='sound/core/vmaster.c' line='498' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_apply_vmaster_slaves'>
+        <parameter type-id='7a5054b7' name='kctl' filepath='sound/core/vmaster.c' line='498' column='1'/>
+        <parameter type-id='be4e3fad' name='func' filepath='sound/core/vmaster.c' line='499' column='1'/>
+        <parameter type-id='eaa32e2f' name='arg' filepath='sound/core/vmaster.c' line='502' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_ctl_add_vmaster_hook' mangled-name='snd_ctl_add_vmaster_hook' filepath='sound/core/vmaster.c' line='446' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_ctl_add_vmaster_hook'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/core/vmaster.c' line='446' column='1'/>
+        <parameter type-id='1ed1e4cd' name='hook' filepath='sound/core/vmaster.c' line='447' column='1'/>
+        <parameter type-id='eaa32e2f' name='private_data' filepath='sound/core/vmaster.c' line='448' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='_snd_ctl_add_slave' mangled-name='_snd_ctl_add_slave' filepath='sound/core/vmaster.c' line='252' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_snd_ctl_add_slave'>
+        <parameter type-id='7a5054b7' name='master' filepath='sound/core/vmaster.c' line='252' column='1'/>
+        <parameter type-id='7a5054b7' name='slave' filepath='sound/core/vmaster.c' line='252' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='sound/core/vmaster.c' line='253' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='cc7d2869'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-component.c' language='LANG_C89'>
+      <function-decl name='snd_soc_component_set_sysclk' mangled-name='snd_soc_component_set_sysclk' filepath='sound/soc/soc-component.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_set_sysclk'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='21' column='1'/>
+        <parameter type-id='95e97e5e' name='clk_id' filepath='sound/soc/soc-component.c' line='22' column='1'/>
+        <parameter type-id='95e97e5e' name='source' filepath='sound/soc/soc-component.c' line='22' column='1'/>
+        <parameter type-id='f0981eeb' name='freq' filepath='sound/soc/soc-component.c' line='22' column='1'/>
+        <parameter type-id='95e97e5e' name='dir' filepath='sound/soc/soc-component.c' line='23' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_set_pll' mangled-name='snd_soc_component_set_pll' filepath='sound/soc/soc-component.c' line='43' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_set_pll'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='43' column='1'/>
+        <parameter type-id='95e97e5e' name='pll_id' filepath='sound/soc/soc-component.c' line='43' column='1'/>
+        <parameter type-id='95e97e5e' name='source' filepath='sound/soc/soc-component.c' line='44' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_in' filepath='sound/soc/soc-component.c' line='44' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_out' filepath='sound/soc/soc-component.c' line='45' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_force_enable_pin' mangled-name='snd_soc_component_force_enable_pin' filepath='sound/soc/soc-component.c' line='234' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_force_enable_pin'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='234' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-component.c' line='235' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_disable_pin' mangled-name='snd_soc_component_disable_pin' filepath='sound/soc/soc-component.c' line='124' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_disable_pin'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-component.c' line='124' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-component.c' line='125' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='9ba86a44' size-in-bits='64' id='807b7702'/>
+      <class-decl name='snd_soc_component' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='108' column='1' id='9ba86a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-component.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-component.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='card_aux_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='card_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='f030c2b8' visibility='default' filepath='include/sound/soc-component.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dai_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_dai' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='include/sound/soc-component.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='val_bytes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc-component.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc-component.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/sound/soc-component.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='debugfs_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_context' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='665' column='1' id='95201ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idle_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dapm.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dapm.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-dapm.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='target_bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='path_sink_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='path_source_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='debugfs_dapm' type-id='27675065' visibility='default' filepath='include/sound/soc-dapm.h' line='683' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='215ec542' size-in-bits='64' id='f030c2b8'/>
+      <pointer-type-def type-id='9917f524' size-in-bits='64' id='48cf6abe'/>
+      <pointer-type-def type-id='29ad938b' size-in-bits='64' id='3059cd0b'/>
+      <class-decl name='snd_soc_card' size-in-bits='6976' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1001' column='1' id='29ad938b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='long_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dmi_longname' type-id='aa5ff375' visibility='default' filepath='include/sound/soc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='topology_shortname' type-id='16dc656a' visibility='default' filepath='include/sound/soc.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='snd_card' type-id='52704eb7' visibility='default' filepath='include/sound/soc.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/sound/soc.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pcm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pcm_subclass' type-id='8a661f2b' visibility='default' filepath='include/sound/soc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='dpcm_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/soc.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='instantiated' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2120'>
+          <var-decl name='topology_shortname_created' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='late_probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='remove' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='suspend_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='suspend_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='resume_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='resume_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_bias_level' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_bias_level_post' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='add_dai_link' type-id='1391f54a' visibility='default' filepath='include/sound/soc.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='remove_dai_link' type-id='e3fceddb' visibility='default' filepath='include/sound/soc.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_links' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='dai_link_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='rtd_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='num_rtd' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='codec_conf' type-id='f10279fe' visibility='default' filepath='include/sound/soc.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='num_configs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='aux_dev' type-id='8ace4add' visibility='default' filepath='include/sound/soc.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='num_aux_devs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='aux_comp_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='num_controls' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='num_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='num_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='of_dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='num_of_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='of_dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='num_of_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='fully_routed' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='disable_route_checks' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='component_dev_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='widgets' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='paths' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dapm_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='dapm_dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc.h' line='1101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dapm_stats' type-id='fef29e19' visibility='default' filepath='include/sound/soc.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='update' type-id='33146de3' visibility='default' filepath='include/sound/soc.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='debugfs_card_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='deferred_resume_work' type-id='ef9025d0' visibility='default' filepath='include/sound/soc.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='pop_time' type-id='19c2251e' visibility='default' filepath='include/sound/soc.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='drvdata' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1118' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_wcache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='660' column='1' id='27dc472b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dapm.h' line='661' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9f6de273' const='yes' id='215ec542'/>
+      <enum-decl name='snd_soc_bias_level' filepath='include/sound/soc.h' line='389' column='1' id='f078c744'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_BIAS_OFF' value='0'/>
+        <enumerator name='SND_SOC_BIAS_STANDBY' value='1'/>
+        <enumerator name='SND_SOC_BIAS_PREPARE' value='2'/>
+        <enumerator name='SND_SOC_BIAS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='snd_soc_component_driver' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='32' column='1' id='9f6de273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc-component.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_controls' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc-component.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_dapm_widgets' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc-component.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_dapm_routes' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove' type-id='f88ed793' visibility='default' filepath='include/sound/soc-component.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='suspend' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resume' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='7bb6ff35' visibility='default' filepath='include/sound/soc-component.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='726f2cf6' visibility='default' filepath='include/sound/soc-component.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pcm_new' type-id='1ad47772' visibility='default' filepath='include/sound/soc-component.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pcm_free' type-id='182096ce' visibility='default' filepath='include/sound/soc-component.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_sysclk' type-id='ff554aed' visibility='default' filepath='include/sound/soc-component.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_pll' type-id='bd4604a4' visibility='default' filepath='include/sound/soc-component.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_jack' type-id='997f6223' visibility='default' filepath='include/sound/soc-component.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='of_xlate_dai_name' type-id='93cd7c85' visibility='default' filepath='include/sound/soc-component.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='of_xlate_dai_id' type-id='71f7eca5' visibility='default' filepath='include/sound/soc-component.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_notifier' type-id='f596d48e' visibility='default' filepath='include/sound/soc-component.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stream_event' type-id='4d6d9805' visibility='default' filepath='include/sound/soc-component.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_bias_level' type-id='ab3c35df' visibility='default' filepath='include/sound/soc-component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/soc-component.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='compr_ops' type-id='9b98229a' visibility='default' filepath='include/sound/soc-component.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module_get_upon_open' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='idle_bias_on' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='use_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='endianness' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='non_legacy_dai_naming' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ignore_machine' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='topology_name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc-component.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='use_dai_pcm_id' type-id='b50a4934' visibility='default' filepath='include/sound/soc-component.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='be_pcm_base' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='693' column='1' id='fef29e19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='path_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='neighbour_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='696' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='e0f88742' size-in-bits='64' id='8f3d28b8'/>
+      <pointer-type-def type-id='e0d04bd9' size-in-bits='64' id='dae78f89'/>
+      <enum-decl name='snd_soc_pcm_subclass' filepath='include/sound/soc.h' line='419' column='1' id='8a661f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_PCM_CLASS_PCM' value='0'/>
+        <enumerator name='SND_SOC_PCM_CLASS_BE' value='1'/>
+      </enum-decl>
+      <pointer-type-def type-id='f82a46c1' size-in-bits='64' id='edcb70dd'/>
+      <pointer-type-def type-id='18620c48' size-in-bits='64' id='1391f54a'/>
+      <pointer-type-def type-id='fcf647be' size-in-bits='64' id='4a944438'/>
+      <pointer-type-def type-id='5183f61d' size-in-bits='64' id='8ace4add'/>
+      <pointer-type-def type-id='7082c248' size-in-bits='64' id='f10279fe'/>
+      <pointer-type-def type-id='5c18a8e2' size-in-bits='64' id='af5a73b0'/>
+      <pointer-type-def type-id='b6a3f4d3' size-in-bits='64' id='33146de3'/>
+      <pointer-type-def type-id='f780d556' size-in-bits='64' id='810606ec'/>
+      <pointer-type-def type-id='883b3327' size-in-bits='64' id='e3fceddb'/>
+      <class-decl name='snd_soc_aux_dev' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='989' column='1' id='5183f61d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlc' type-id='ed5b2002' visibility='default' filepath='include/sound/soc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc.h' line='997' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_codec_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='974' column='1' id='7082c248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='986' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='769' column='1' id='5c18a8e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_cpus' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='codecs' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='platforms' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_platforms' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='params' type-id='b0772ded' visibility='default' filepath='include/sound/soc.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_params' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dai_fmt' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='trigger' type-id='16449c76' visibility='default' filepath='include/sound/soc.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='1ad47772' visibility='default' filepath='include/sound/soc.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='d33d33c6' visibility='default' filepath='include/sound/soc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compr_ops' type-id='33ec9b0e' visibility='default' filepath='include/sound/soc.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='playback_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='capture_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='ignore_suspend' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_pcm' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='dynamic' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_host_mode' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='dpcm_capture' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='dpcm_playback' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='dpcm_merged_format' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='dpcm_merged_chan' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='dpcm_merged_rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='ignore_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='872' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_update' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='649' column='1' id='b6a3f4d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-dapm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='val' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reg2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='val2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='has_second_set' type-id='b50a4934' visibility='default' filepath='include/sound/soc-dapm.h' line='657' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_widget' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='594' column='1' id='f780d556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='68bb1ec5' visibility='default' filepath='include/sound/soc-dapm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sname' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm' type-id='70d004a5' visibility='default' filepath='include/sound/soc-dapm.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dapm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulator' type-id='850c13f6' visibility='default' filepath='include/sound/soc-dapm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinctrl' type-id='73ea90c5' visibility='default' filepath='include/sound/soc-dapm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='on_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='active' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='connected' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='new' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='force' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='ignore_suspend' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='new_power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='power_checked' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_supply' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_ep' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subseq' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='power_check' type-id='3fccea10' visibility='default' filepath='include/sound/soc-dapm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/sound/soc-dapm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event' type-id='af92413d' visibility='default' filepath='include/sound/soc-dapm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_kcontrols' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kcontrol_news' type-id='31e035f7' visibility='default' filepath='include/sound/soc-dapm.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='kcontrols' type-id='29753327' visibility='default' filepath='include/sound/soc-dapm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='edges' type-id='e4f16420' visibility='default' filepath='include/sound/soc-dapm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='power_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='endpoints' type-id='e4266c7e' visibility='default' filepath='include/sound/soc-dapm.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/sound/soc-dapm.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='646' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='9625db14' size-in-bits='64' id='9b98229a'/>
+      <qualified-type-def type-id='4a91f65b' const='yes' id='e0f88742'/>
+      <qualified-type-def type-id='f780d556' const='yes' id='e0d04bd9'/>
+      <pointer-type-def type-id='0ed9f201' size-in-bits='64' id='71f7eca5'/>
+      <pointer-type-def type-id='ebf04e7b' size-in-bits='64' id='ab3c35df'/>
+      <pointer-type-def type-id='483ecac1' size-in-bits='64' id='4d6d9805'/>
+      <pointer-type-def type-id='a9bd2db1' size-in-bits='64' id='ff554aed'/>
+      <pointer-type-def type-id='9c43712a' size-in-bits='64' id='bd4604a4'/>
+      <pointer-type-def type-id='a4f8cee1' size-in-bits='64' id='93cd7c85'/>
+      <pointer-type-def type-id='8ca90cbf' size-in-bits='64' id='997f6223'/>
+      <pointer-type-def type-id='dca78e2c' size-in-bits='64' id='726f2cf6'/>
+      <pointer-type-def type-id='10865770' size-in-bits='64' id='1ad47772'/>
+      <pointer-type-def type-id='d8484ecd' size-in-bits='64' id='59a76ce1'/>
+      <pointer-type-def type-id='0971a711' size-in-bits='64' id='7bb6ff35'/>
+      <pointer-type-def type-id='b43302df' size-in-bits='64' id='f88ed793'/>
+      <pointer-type-def type-id='139c5a2c' size-in-bits='64' id='f596d48e'/>
+      <class-decl name='snd_soc_dai_link_component' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='763' column='1' id='ed5b2002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='766' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_route' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='550' column='1' id='4a91f65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sink' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='connected' type-id='4b433675' visibility='default' filepath='include/sound/soc-dapm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='559' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='64' column='1' id='01edcafc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='5210afb2' visibility='default' filepath='include/sound/soc-topology.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='76e6e22f' visibility='default' filepath='include/sound/soc-topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='d80bfbd6' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-topology.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='33d73f3b' const='yes' id='9625db14'/>
+      <pointer-type-def type-id='abf99950' size-in-bits='64' id='33ec9b0e'/>
+      <pointer-type-def type-id='b276f0c8' size-in-bits='64' id='d33d33c6'/>
+      <pointer-type-def type-id='8dc7c255' size-in-bits='64' id='b0772ded'/>
+      <enum-decl name='snd_soc_dapm_type' filepath='include/sound/soc-dapm.h' line='495' column='1' id='68bb1ec5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='snd_soc_dapm_input' value='0'/>
+        <enumerator name='snd_soc_dapm_output' value='1'/>
+        <enumerator name='snd_soc_dapm_mux' value='2'/>
+        <enumerator name='snd_soc_dapm_demux' value='3'/>
+        <enumerator name='snd_soc_dapm_mixer' value='4'/>
+        <enumerator name='snd_soc_dapm_mixer_named_ctl' value='5'/>
+        <enumerator name='snd_soc_dapm_pga' value='6'/>
+        <enumerator name='snd_soc_dapm_out_drv' value='7'/>
+        <enumerator name='snd_soc_dapm_adc' value='8'/>
+        <enumerator name='snd_soc_dapm_dac' value='9'/>
+        <enumerator name='snd_soc_dapm_micbias' value='10'/>
+        <enumerator name='snd_soc_dapm_mic' value='11'/>
+        <enumerator name='snd_soc_dapm_hp' value='12'/>
+        <enumerator name='snd_soc_dapm_spk' value='13'/>
+        <enumerator name='snd_soc_dapm_line' value='14'/>
+        <enumerator name='snd_soc_dapm_switch' value='15'/>
+        <enumerator name='snd_soc_dapm_vmid' value='16'/>
+        <enumerator name='snd_soc_dapm_pre' value='17'/>
+        <enumerator name='snd_soc_dapm_post' value='18'/>
+        <enumerator name='snd_soc_dapm_supply' value='19'/>
+        <enumerator name='snd_soc_dapm_pinctrl' value='20'/>
+        <enumerator name='snd_soc_dapm_regulator_supply' value='21'/>
+        <enumerator name='snd_soc_dapm_clock_supply' value='22'/>
+        <enumerator name='snd_soc_dapm_aif_in' value='23'/>
+        <enumerator name='snd_soc_dapm_aif_out' value='24'/>
+        <enumerator name='snd_soc_dapm_siggen' value='25'/>
+        <enumerator name='snd_soc_dapm_sink' value='26'/>
+        <enumerator name='snd_soc_dapm_dai_in' value='27'/>
+        <enumerator name='snd_soc_dapm_dai_out' value='28'/>
+        <enumerator name='snd_soc_dapm_dai_link' value='29'/>
+        <enumerator name='snd_soc_dapm_kcontrol' value='30'/>
+        <enumerator name='snd_soc_dapm_buffer' value='31'/>
+        <enumerator name='snd_soc_dapm_scheduler' value='32'/>
+        <enumerator name='snd_soc_dapm_effect' value='33'/>
+        <enumerator name='snd_soc_dapm_src' value='34'/>
+        <enumerator name='snd_soc_dapm_asrc' value='35'/>
+        <enumerator name='snd_soc_dapm_encoder' value='36'/>
+        <enumerator name='snd_soc_dapm_decoder' value='37'/>
+        <enumerator name='SND_SOC_DAPM_TYPE_COUNT' value='38'/>
+      </enum-decl>
+      <pointer-type-def type-id='6634c3c6' size-in-bits='64' id='3fccea10'/>
+      <pointer-type-def type-id='34c8e7e1' size-in-bits='64' id='af92413d'/>
+      <pointer-type-def type-id='7a5054b7' size-in-bits='64' id='29753327'/>
+      <pointer-type-def type-id='ed5b2002' size-in-bits='64' id='4120e250'/>
+      <pointer-type-def type-id='95201ae5' size-in-bits='64' id='70d004a5'/>
+      <array-type-def dimensions='1' type-id='b615ca5b' size-in-bits='64' alignment-in-bits='32' id='16449c76'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <qualified-type-def type-id='9c97c2f7' const='yes' id='abf99950'/>
+      <qualified-type-def type-id='40fc482f' const='yes' id='b276f0c8'/>
+      <qualified-type-def type-id='e85be380' const='yes' id='8dc7c255'/>
+      <enum-decl name='snd_soc_dobj_type' filepath='include/sound/soc-topology.h' line='38' column='1' id='5210afb2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DOBJ_NONE' value='0'/>
+        <enumerator name='SND_SOC_DOBJ_MIXER' value='1'/>
+        <enumerator name='SND_SOC_DOBJ_BYTES' value='2'/>
+        <enumerator name='SND_SOC_DOBJ_ENUM' value='3'/>
+        <enumerator name='SND_SOC_DOBJ_GRAPH' value='4'/>
+        <enumerator name='SND_SOC_DOBJ_WIDGET' value='5'/>
+        <enumerator name='SND_SOC_DOBJ_DAI_LINK' value='6'/>
+        <enumerator name='SND_SOC_DOBJ_PCM' value='7'/>
+        <enumerator name='SND_SOC_DOBJ_CODEC_LINK' value='8'/>
+        <enumerator name='SND_SOC_DOBJ_BACKEND_LINK' value='9'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_trigger' filepath='include/sound/soc-dpcm.h' line='58' column='1' id='b615ca5b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_PRE' value='0'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_POST' value='1'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_BESPOKE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='e5cda869' size-in-bits='64' id='4b433675'/>
+      <pointer-type-def type-id='c2ddf2d7' size-in-bits='64' id='76e6e22f'/>
+      <union-decl name='__anonymous_union__3' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1' id='d80bfbd6'>
+        <data-member access='public'>
+          <var-decl name='control' type-id='8a84fb32' visibility='default' filepath='include/sound/soc-topology.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='widget' type-id='ca569b91' visibility='default' filepath='include/sound/soc-topology.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_compr_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='744' column='1' id='9c97c2f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='4b0aea04' visibility='default' filepath='include/sound/soc.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='748' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_control' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='52' column='1' id='8a84fb32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-topology.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtexts' type-id='9b23c9ad' visibility='default' filepath='include/sound/soc-topology.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dvalues' type-id='1d2c2b85' visibility='default' filepath='include/sound/soc-topology.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_widget' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='59' column='1' id='ca569b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol_type' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='735' column='1' id='40fc482f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='897d1b6d' visibility='default' filepath='include/sound/soc.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/soc.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/soc.h' line='741' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_stream' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='722' column='1' id='e85be380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sig_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aif_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='111' column='1' id='c2ddf2d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control_load' type-id='6b4579c4' visibility='default' filepath='include/sound/soc-topology.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dapm_route_load' type-id='7ad49bc5' visibility='default' filepath='include/sound/soc-topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_route_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='widget_load' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='widget_ready' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='widget_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dai_load' type-id='47fc8c26' visibility='default' filepath='include/sound/soc-topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dai_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_load' type-id='5b44b629' visibility='default' filepath='include/sound/soc-topology.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vendor_load' type-id='1f42ef53' visibility='default' filepath='include/sound/soc-topology.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vendor_unload' type-id='ff06646a' visibility='default' filepath='include/sound/soc-topology.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='complete' type-id='f88ed793' visibility='default' filepath='include/sound/soc-topology.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='manifest' type-id='502bd26a' visibility='default' filepath='include/sound/soc-topology.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='io_ops' type-id='745ce067' visibility='default' filepath='include/sound/soc-topology.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='io_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bytes_ext_ops' type-id='a62d5bd8' visibility='default' filepath='include/sound/soc-topology.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bytes_ext_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='597bfbe2' size-in-bits='64' id='a62d5bd8'/>
+      <pointer-type-def type-id='319b3a77' size-in-bits='64' id='745ce067'/>
+      <pointer-type-def type-id='8a322362' size-in-bits='64' id='6b4579c4'/>
+      <pointer-type-def type-id='b9d8dce4' size-in-bits='64' id='47fc8c26'/>
+      <pointer-type-def type-id='3098b525' size-in-bits='64' id='5b44b629'/>
+      <pointer-type-def type-id='956881f1' size-in-bits='64' id='7ad49bc5'/>
+      <pointer-type-def type-id='02f1c4a9' size-in-bits='64' id='b4fb1c55'/>
+      <pointer-type-def type-id='98408d8f' size-in-bits='64' id='1f42ef53'/>
+      <pointer-type-def type-id='c21a2b60' size-in-bits='64' id='502bd26a'/>
+      <pointer-type-def type-id='c37d868d' size-in-bits='64' id='6332a661'/>
+      <pointer-type-def type-id='df961c58' size-in-bits='64' id='ff06646a'/>
+      <pointer-type-def type-id='da3c754a' size-in-bits='64' id='4b0aea04'/>
+      <qualified-type-def type-id='3e689ce7' const='yes' id='597bfbe2'/>
+      <qualified-type-def type-id='ad974450' const='yes' id='319b3a77'/>
+      <class-decl name='snd_soc_tplg_bytes_ext_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='90' column='1' id='3e689ce7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='f0dd4a3b' visibility='default' filepath='include/sound/soc-topology.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='f517dc88' visibility='default' filepath='include/sound/soc-topology.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_kcontrol_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='79' column='1' id='ad974450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='a54793a9' visibility='default' filepath='include/sound/soc-topology.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='643400ce' size-in-bits='64' id='f517dc88'/>
+      <pointer-type-def type-id='fa75c86d' size-in-bits='64' id='a54793a9'/>
+      <pointer-type-def type-id='84147814' size-in-bits='64' id='8336f92e'/>
+      <pointer-type-def type-id='eb5d5777' size-in-bits='64' id='f0dd4a3b'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-compress.c' language='LANG_C89'>
+      <function-decl name='snd_soc_new_compress' mangled-name='snd_soc_new_compress' filepath='sound/soc/soc-compress.c' line='856' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_new_compress'>
+        <parameter type-id='95316552' name='rtd' filepath='sound/soc/soc-compress.c' line='856' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-compress.c' line='856' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='00e3a6d4' size-in-bits='64' id='95316552'/>
+      <class-decl name='snd_soc_pcm_runtime' size-in-bits='14016' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1149' column='1' id='00e3a6d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='73803d48' visibility='default' filepath='include/sound/soc.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='params_select' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dpcm' type-id='39f07796' visibility='default' filepath='include/sound/soc.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/soc.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='compr' type-id='dc1e097e' visibility='default' filepath='include/sound/soc.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='codec_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='cpu_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='codec_dais' type-id='8f157e69' visibility='default' filepath='include/sound/soc.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='delayed_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_dpcm_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='component_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_registered' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='pop_wait' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fe_compr' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1185' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='2d7051f1' size-in-bits='64' id='1c936db9'/>
+      <pointer-type-def type-id='1c936db9' size-in-bits='64' id='8f157e69'/>
+      <array-type-def dimensions='1' type-id='c1c63dde' size-in-bits='10752' id='39f07796'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <class-decl name='snd_soc_dai' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='319' column='1' id='2d7051f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dai.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='763d26a2' visibility='default' filepath='include/sound/soc-dai.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capture_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='playback_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probed' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='playback_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capture_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='playback_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capture_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dai.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dai.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dpcm_runtime' size-in-bits='5376' is-struct='yes' visibility='default' filepath='include/sound/soc-dpcm.h' line='91' column='1' id='c1c63dde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='be_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/soc-dpcm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_params' type-id='6c57d4a8' visibility='default' filepath='include/sound/soc-dpcm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='runtime_update' type-id='3708cdec' visibility='default' filepath='include/sound/soc-dpcm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='state' type-id='792c8cde' visibility='default' filepath='include/sound/soc-dpcm.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='trigger_pending' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_state' filepath='include/sound/soc-dpcm.h' line='38' column='1' id='792c8cde'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_STATE_NEW' value='0'/>
+        <enumerator name='SND_SOC_DPCM_STATE_OPEN' value='1'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_PARAMS' value='2'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PREPARE' value='3'/>
+        <enumerator name='SND_SOC_DPCM_STATE_START' value='4'/>
+        <enumerator name='SND_SOC_DPCM_STATE_STOP' value='5'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PAUSED' value='6'/>
+        <enumerator name='SND_SOC_DPCM_STATE_SUSPEND' value='7'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_FREE' value='8'/>
+        <enumerator name='SND_SOC_DPCM_STATE_CLOSE' value='9'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_update' filepath='include/sound/soc-dpcm.h' line='21' column='1' id='3708cdec'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_NO' value='0'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_BE' value='1'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_FE' value='2'/>
+      </enum-decl>
+      <pointer-type-def type-id='a1599794' size-in-bits='64' id='763d26a2'/>
+      <class-decl name='snd_soc_dai_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='279' column='1' id='a1599794'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dai.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='probe' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='remove' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resume' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compress_new' type-id='da6639f9' visibility='default' filepath='include/sound/soc-dai.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pcm_new' type-id='6c0c7302' visibility='default' filepath='include/sound/soc-dai.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ops' type-id='777e33bd' visibility='default' filepath='include/sound/soc-dai.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cops' type-id='c9d35a9c' visibility='default' filepath='include/sound/soc-dai.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='capture' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='playback' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='bus_control' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='da194c5e' size-in-bits='64' id='c9d35a9c'/>
+      <pointer-type-def type-id='87538745' size-in-bits='64' id='777e33bd'/>
+      <pointer-type-def type-id='8892a831' size-in-bits='64' id='a2515c25'/>
+      <pointer-type-def type-id='52c5253d' size-in-bits='64' id='da6639f9'/>
+      <pointer-type-def type-id='ea48a448' size-in-bits='64' id='6c0c7302'/>
+      <qualified-type-def type-id='d6a931df' const='yes' id='da194c5e'/>
+      <qualified-type-def type-id='b1fadf8a' const='yes' id='87538745'/>
+      <class-decl name='snd_soc_cdai_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='245' column='1' id='d6a931df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='64548faf' visibility='default' filepath='include/sound/soc-dai.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='1b64445b' visibility='default' filepath='include/sound/soc-dai.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='5b6d9de6' visibility='default' filepath='include/sound/soc-dai.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='6ca57870' visibility='default' filepath='include/sound/soc-dai.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack' type-id='6620a240' visibility='default' filepath='include/sound/soc-dai.h' line='265' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='173' column='1' id='b1fadf8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_sysclk' type-id='fd437b0d' visibility='default' filepath='include/sound/soc-dai.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_pll' type-id='6cd85f13' visibility='default' filepath='include/sound/soc-dai.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_clkdiv' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_bclk_ratio' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_fmt' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xlate_tdm_slot_mask' type-id='4f8fb1b3' visibility='default' filepath='include/sound/soc-dai.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_tdm_slot' type-id='af3f6c83' visibility='default' filepath='include/sound/soc-dai.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_channel_map' type-id='f98f7769' visibility='default' filepath='include/sound/soc-dai.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_channel_map' type-id='37bbabb5' visibility='default' filepath='include/sound/soc-dai.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_tristate' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_sdw_stream' type-id='1dd33160' visibility='default' filepath='include/sound/soc-dai.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='digital_mute' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mute_stream' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='startup' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='shutdown' type-id='c7f8de51' visibility='default' filepath='include/sound/soc-dai.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_params' type-id='2e127687' visibility='default' filepath='include/sound/soc-dai.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hw_free' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prepare' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bespoke_trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='delay' type-id='2610fb79' visibility='default' filepath='include/sound/soc-dai.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='d26d2ca4' size-in-bits='64' id='5b6d9de6'/>
+      <pointer-type-def type-id='7e019027' size-in-bits='64' id='1b64445b'/>
+      <pointer-type-def type-id='6f527014' size-in-bits='64' id='b8430c5e'/>
+      <pointer-type-def type-id='dcda8403' size-in-bits='64' id='64548faf'/>
+      <pointer-type-def type-id='aaad2fce' size-in-bits='64' id='6ca57870'/>
+      <pointer-type-def type-id='f5362227' size-in-bits='64' id='ff70ae33'/>
+      <pointer-type-def type-id='201ffa8e' size-in-bits='64' id='6620a240'/>
+      <pointer-type-def type-id='d9bbe8ab' size-in-bits='64' id='939046d7'/>
+      <pointer-type-def type-id='1f765c33' size-in-bits='64' id='2e127687'/>
+      <pointer-type-def type-id='1f79c412' size-in-bits='64' id='ebda04fc'/>
+      <pointer-type-def type-id='15bee3b2' size-in-bits='64' id='432e0bcc'/>
+      <pointer-type-def type-id='33f6a667' size-in-bits='64' id='b346094b'/>
+      <pointer-type-def type-id='a9c862bf' size-in-bits='64' id='6cd85f13'/>
+      <pointer-type-def type-id='1cd99dc1' size-in-bits='64' id='fd437b0d'/>
+      <pointer-type-def type-id='868d8193' size-in-bits='64' id='40bc7c47'/>
+      <pointer-type-def type-id='294a6b21' size-in-bits='64' id='37bbabb5'/>
+      <pointer-type-def type-id='34f7ad3d' size-in-bits='64' id='f98f7769'/>
+      <pointer-type-def type-id='1126278f' size-in-bits='64' id='af3f6c83'/>
+      <pointer-type-def type-id='ff87f3a6' size-in-bits='64' id='1dd33160'/>
+      <pointer-type-def type-id='d87e539f' size-in-bits='64' id='4f8fb1b3'/>
+      <pointer-type-def type-id='4c8ce8c5' size-in-bits='64' id='2610fb79'/>
+      <pointer-type-def type-id='9eea6bb5' size-in-bits='64' id='c7f8de51'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-core.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='640' id='77d1242b'>
+        <subrange length='20' type-id='7ff19f0f' id='fdca39cf'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='2f162548' size-in-bits='256' id='e389acd5'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a84c031d' size-in-bits='352' id='36cef6bd'>
+        <subrange length='44' type-id='7ff19f0f' id='cf8ba455'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='c1c63dde' size-in-bits='10752' id='39f07796'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='b615ca5b' size-in-bits='64' alignment-in-bits='32' id='16449c76'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='826dc1a3' size-in-bits='7680' id='63c0e8df'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='a305d6c9' size-in-bits='4608' id='0036534d'>
+        <subrange length='8' type-id='7ff19f0f' id='56e0c0b1'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='d49652d3' size-in-bits='1664' id='57144ac1'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8a4504f5' size-in-bits='infinite' id='591a7f7d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='08cf731d' size-in-bits='infinite' id='e9564905'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='79a1b937' size-in-bits='infinite' id='ebaaecd3'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='26236645' size-in-bits='infinite' id='3ecd3c6d'>
+        <subrange length='infinite' type-id='7ff19f0f' id='031f2035'/>
+      </array-type-def>
+      <class-decl name='snd_soc_card' size-in-bits='6976' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1001' column='1' id='29ad938b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1002' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='long_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1003' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='driver_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='1004' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dmi_longname' type-id='aa5ff375' visibility='default' filepath='include/sound/soc.h' line='1005' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='topology_shortname' type-id='16dc656a' visibility='default' filepath='include/sound/soc.h' line='1006' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1008' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='snd_card' type-id='52704eb7' visibility='default' filepath='include/sound/soc.h' line='1009' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='owner' type-id='2730d015' visibility='default' filepath='include/sound/soc.h' line='1010' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1012' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1013' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='pcm_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='1016' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2048'>
+          <var-decl name='pcm_subclass' type-id='8a661f2b' visibility='default' filepath='include/sound/soc.h' line='1017' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2080'>
+          <var-decl name='dpcm_lock' type-id='fb4018a0' visibility='default' filepath='include/sound/soc.h' line='1019' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='instantiated' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1021' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2120'>
+          <var-decl name='topology_shortname_created' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1022' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1024' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='late_probe' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1025' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='remove' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1026' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='suspend_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1030' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='suspend_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1031' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='resume_pre' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1032' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2560'>
+          <var-decl name='resume_post' type-id='edcb70dd' visibility='default' filepath='include/sound/soc.h' line='1033' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2624'>
+          <var-decl name='set_bias_level' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1036' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2688'>
+          <var-decl name='set_bias_level_post' type-id='4a944438' visibility='default' filepath='include/sound/soc.h' line='1039' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2752'>
+          <var-decl name='add_dai_link' type-id='1391f54a' visibility='default' filepath='include/sound/soc.h' line='1043' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2816'>
+          <var-decl name='remove_dai_link' type-id='e3fceddb' visibility='default' filepath='include/sound/soc.h' line='1045' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2880'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1048' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2944'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1051' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3008'>
+          <var-decl name='num_links' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1052' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3072'>
+          <var-decl name='dai_link_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1053' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3200'>
+          <var-decl name='rtd_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1055' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3328'>
+          <var-decl name='num_rtd' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1056' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3392'>
+          <var-decl name='codec_conf' type-id='f10279fe' visibility='default' filepath='include/sound/soc.h' line='1059' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3456'>
+          <var-decl name='num_configs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1060' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3520'>
+          <var-decl name='aux_dev' type-id='8ace4add' visibility='default' filepath='include/sound/soc.h' line='1066' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3584'>
+          <var-decl name='num_aux_devs' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1067' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3648'>
+          <var-decl name='aux_comp_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1068' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3776'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc.h' line='1070' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3840'>
+          <var-decl name='num_controls' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1071' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3904'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1077' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3968'>
+          <var-decl name='num_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1078' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4032'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1079' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4096'>
+          <var-decl name='num_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1080' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4160'>
+          <var-decl name='of_dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc.h' line='1081' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4224'>
+          <var-decl name='num_of_dapm_widgets' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1082' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='of_dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc.h' line='1083' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4352'>
+          <var-decl name='num_of_dapm_routes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1084' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4384'>
+          <var-decl name='fully_routed' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1085' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4392'>
+          <var-decl name='disable_route_checks' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='1086' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4416'>
+          <var-decl name='component_dev_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1089' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4544'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1090' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4672'>
+          <var-decl name='widgets' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1092' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4800'>
+          <var-decl name='paths' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1093' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4928'>
+          <var-decl name='dapm_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1094' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5056'>
+          <var-decl name='dapm_dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1095' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5184'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1098' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc.h' line='1101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5952'>
+          <var-decl name='dapm_stats' type-id='fef29e19' visibility='default' filepath='include/sound/soc.h' line='1102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6080'>
+          <var-decl name='update' type-id='33146de3' visibility='default' filepath='include/sound/soc.h' line='1103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6144'>
+          <var-decl name='debugfs_card_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6208'>
+          <var-decl name='deferred_resume_work' type-id='ef9025d0' visibility='default' filepath='include/sound/soc.h' line='1109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6592'>
+          <var-decl name='pop_time' type-id='19c2251e' visibility='default' filepath='include/sound/soc.h' line='1111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6656'>
+          <var-decl name='drvdata' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='1113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6720'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6784'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6848'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6912'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1118' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_pcm_subclass' filepath='include/sound/soc.h' line='419' column='1' id='8a661f2b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_PCM_CLASS_PCM' value='0'/>
+        <enumerator name='SND_SOC_PCM_CLASS_BE' value='1'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dapm_context' size-in-bits='640' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='665' column='1' id='95201ae5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='666' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='idle_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='667' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='669' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dapm.h' line='671' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dapm.h' line='672' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-dapm.h' line='673' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='target_bias_level' type-id='f078c744' visibility='default' filepath='include/sound/soc-dapm.h' line='676' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='677' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='path_sink_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='679' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='path_source_cache' type-id='27dc472b' visibility='default' filepath='include/sound/soc-dapm.h' line='680' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='debugfs_dapm' type-id='27675065' visibility='default' filepath='include/sound/soc-dapm.h' line='683' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_bias_level' filepath='include/sound/soc.h' line='389' column='1' id='f078c744'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_BIAS_OFF' value='0'/>
+        <enumerator name='SND_SOC_BIAS_STANDBY' value='1'/>
+        <enumerator name='SND_SOC_BIAS_PREPARE' value='2'/>
+        <enumerator name='SND_SOC_BIAS_ON' value='3'/>
+      </enum-decl>
+      <class-decl name='snd_soc_component' size-in-bits='2368' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='108' column='1' id='9ba86a44'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='110' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-component.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc-component.h' line='113' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='suspended' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='117' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='119' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='card_aux_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='card_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='121' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='driver' type-id='f030c2b8' visibility='default' filepath='include/sound/soc-component.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='dai_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_dai' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='regmap' type-id='29af9a71' visibility='default' filepath='include/sound/soc-component.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='val_bytes' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='io_mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc-component.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='dobj_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-component.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='dapm' type-id='95201ae5' visibility='default' filepath='include/sound/soc-component.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='146' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='debugfs_root' type-id='27675065' visibility='default' filepath='include/sound/soc-component.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='debugfs_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='150' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_component_driver' size-in-bits='1984' is-struct='yes' visibility='default' filepath='include/sound/soc-component.h' line='32' column='1' id='9f6de273'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='controls' type-id='31e035f7' visibility='default' filepath='include/sound/soc-component.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='num_controls' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_widgets' type-id='dae78f89' visibility='default' filepath='include/sound/soc-component.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='num_dapm_widgets' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm_routes' type-id='8f3d28b8' visibility='default' filepath='include/sound/soc-component.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='num_dapm_routes' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='probe' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='remove' type-id='f88ed793' visibility='default' filepath='include/sound/soc-component.h' line='44' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='suspend' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='resume' type-id='48cf6abe' visibility='default' filepath='include/sound/soc-component.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='read' type-id='7bb6ff35' visibility='default' filepath='include/sound/soc-component.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='write' type-id='726f2cf6' visibility='default' filepath='include/sound/soc-component.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='pcm_new' type-id='1ad47772' visibility='default' filepath='include/sound/soc-component.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='pcm_free' type-id='182096ce' visibility='default' filepath='include/sound/soc-component.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='set_sysclk' type-id='ff554aed' visibility='default' filepath='include/sound/soc-component.h' line='58' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='set_pll' type-id='bd4604a4' visibility='default' filepath='include/sound/soc-component.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='set_jack' type-id='997f6223' visibility='default' filepath='include/sound/soc-component.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='of_xlate_dai_name' type-id='93cd7c85' visibility='default' filepath='include/sound/soc-component.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='of_xlate_dai_id' type-id='71f7eca5' visibility='default' filepath='include/sound/soc-component.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='seq_notifier' type-id='f596d48e' visibility='default' filepath='include/sound/soc-component.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='stream_event' type-id='4d6d9805' visibility='default' filepath='include/sound/soc-component.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='set_bias_level' type-id='ab3c35df' visibility='default' filepath='include/sound/soc-component.h' line='74' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='ops' type-id='f63b1a17' visibility='default' filepath='include/sound/soc-component.h' line='77' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='compr_ops' type-id='9b98229a' visibility='default' filepath='include/sound/soc-component.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1600'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1632'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='module_get_upon_open' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='idle_bias_on' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='suspend_bias_off' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='use_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='endianness' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='non_legacy_dai_naming' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-component.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ignore_machine' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='topology_name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc-component.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc-component.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='use_dai_pcm_id' type-id='b50a4934' visibility='default' filepath='include/sound/soc-component.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='be_pcm_base' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-component.h' line='105' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_widget' size-in-bits='2560' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='594' column='1' id='f780d556'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='68bb1ec5' visibility='default' filepath='include/sound/soc-dapm.h' line='595' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='596' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='sname' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='597' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='598' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dapm' type-id='70d004a5' visibility='default' filepath='include/sound/soc-dapm.h' line='599' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='priv' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dapm.h' line='601' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='regulator' type-id='850c13f6' visibility='default' filepath='include/sound/soc-dapm.h' line='602' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='pinctrl' type-id='73ea90c5' visibility='default' filepath='include/sound/soc-dapm.h' line='603' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='606' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='shift' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='607' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='608' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='on_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='609' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='off_val' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dapm.h' line='610' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='611' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='active' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='612' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='connected' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='613' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='new' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='614' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4'>
+          <var-decl name='force' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='615' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5'>
+          <var-decl name='ignore_suspend' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='616' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='6'>
+          <var-decl name='new_power' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='617' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7'>
+          <var-decl name='power_checked' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='618' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='is_supply' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='619' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='is_ep' type-id='002ac4a6' visibility='default' filepath='include/sound/soc-dapm.h' line='620' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='subseq' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='621' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='power_check' type-id='3fccea10' visibility='default' filepath='include/sound/soc-dapm.h' line='623' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='event_flags' type-id='8efea9e5' visibility='default' filepath='include/sound/soc-dapm.h' line='626' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event' type-id='af92413d' visibility='default' filepath='include/sound/soc-dapm.h' line='627' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='num_kcontrols' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='630' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='kcontrol_news' type-id='31e035f7' visibility='default' filepath='include/sound/soc-dapm.h' line='631' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='kcontrols' type-id='29753327' visibility='default' filepath='include/sound/soc-dapm.h' line='632' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='633' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='edges' type-id='e4f16420' visibility='default' filepath='include/sound/soc-dapm.h' line='636' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='work_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='639' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2112'>
+          <var-decl name='power_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='640' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='dirty' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dapm.h' line='641' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='endpoints' type-id='e4266c7e' visibility='default' filepath='include/sound/soc-dapm.h' line='642' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='clk' type-id='7d0bc0eb' visibility='default' filepath='include/sound/soc-dapm.h' line='644' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='646' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dapm_type' filepath='include/sound/soc-dapm.h' line='495' column='1' id='68bb1ec5'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='snd_soc_dapm_input' value='0'/>
+        <enumerator name='snd_soc_dapm_output' value='1'/>
+        <enumerator name='snd_soc_dapm_mux' value='2'/>
+        <enumerator name='snd_soc_dapm_demux' value='3'/>
+        <enumerator name='snd_soc_dapm_mixer' value='4'/>
+        <enumerator name='snd_soc_dapm_mixer_named_ctl' value='5'/>
+        <enumerator name='snd_soc_dapm_pga' value='6'/>
+        <enumerator name='snd_soc_dapm_out_drv' value='7'/>
+        <enumerator name='snd_soc_dapm_adc' value='8'/>
+        <enumerator name='snd_soc_dapm_dac' value='9'/>
+        <enumerator name='snd_soc_dapm_micbias' value='10'/>
+        <enumerator name='snd_soc_dapm_mic' value='11'/>
+        <enumerator name='snd_soc_dapm_hp' value='12'/>
+        <enumerator name='snd_soc_dapm_spk' value='13'/>
+        <enumerator name='snd_soc_dapm_line' value='14'/>
+        <enumerator name='snd_soc_dapm_switch' value='15'/>
+        <enumerator name='snd_soc_dapm_vmid' value='16'/>
+        <enumerator name='snd_soc_dapm_pre' value='17'/>
+        <enumerator name='snd_soc_dapm_post' value='18'/>
+        <enumerator name='snd_soc_dapm_supply' value='19'/>
+        <enumerator name='snd_soc_dapm_pinctrl' value='20'/>
+        <enumerator name='snd_soc_dapm_regulator_supply' value='21'/>
+        <enumerator name='snd_soc_dapm_clock_supply' value='22'/>
+        <enumerator name='snd_soc_dapm_aif_in' value='23'/>
+        <enumerator name='snd_soc_dapm_aif_out' value='24'/>
+        <enumerator name='snd_soc_dapm_siggen' value='25'/>
+        <enumerator name='snd_soc_dapm_sink' value='26'/>
+        <enumerator name='snd_soc_dapm_dai_in' value='27'/>
+        <enumerator name='snd_soc_dapm_dai_out' value='28'/>
+        <enumerator name='snd_soc_dapm_dai_link' value='29'/>
+        <enumerator name='snd_soc_dapm_kcontrol' value='30'/>
+        <enumerator name='snd_soc_dapm_buffer' value='31'/>
+        <enumerator name='snd_soc_dapm_scheduler' value='32'/>
+        <enumerator name='snd_soc_dapm_effect' value='33'/>
+        <enumerator name='snd_soc_dapm_src' value='34'/>
+        <enumerator name='snd_soc_dapm_asrc' value='35'/>
+        <enumerator name='snd_soc_dapm_encoder' value='36'/>
+        <enumerator name='snd_soc_dapm_decoder' value='37'/>
+        <enumerator name='SND_SOC_DAPM_TYPE_COUNT' value='38'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dobj' size-in-bits='512' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='64' column='1' id='01edcafc'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='5210afb2' visibility='default' filepath='include/sound/soc-topology.h' line='65' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='index' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-topology.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='76e6e22f' visibility='default' filepath='include/sound/soc-topology.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='' type-id='d80bfbd6' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='private' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-topology.h' line='73' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dobj_type' filepath='include/sound/soc-topology.h' line='38' column='1' id='5210afb2'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DOBJ_NONE' value='0'/>
+        <enumerator name='SND_SOC_DOBJ_MIXER' value='1'/>
+        <enumerator name='SND_SOC_DOBJ_BYTES' value='2'/>
+        <enumerator name='SND_SOC_DOBJ_ENUM' value='3'/>
+        <enumerator name='SND_SOC_DOBJ_GRAPH' value='4'/>
+        <enumerator name='SND_SOC_DOBJ_WIDGET' value='5'/>
+        <enumerator name='SND_SOC_DOBJ_DAI_LINK' value='6'/>
+        <enumerator name='SND_SOC_DOBJ_PCM' value='7'/>
+        <enumerator name='SND_SOC_DOBJ_CODEC_LINK' value='8'/>
+        <enumerator name='SND_SOC_DOBJ_BACKEND_LINK' value='9'/>
+      </enum-decl>
+      <class-decl name='snd_soc_tplg_ops' size-in-bits='1216' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='111' column='1' id='c2ddf2d7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='control_load' type-id='6b4579c4' visibility='default' filepath='include/sound/soc-topology.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dapm_route_load' type-id='7ad49bc5' visibility='default' filepath='include/sound/soc-topology.h' line='120' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dapm_route_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='122' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='widget_load' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='widget_ready' type-id='b4fb1c55' visibility='default' filepath='include/sound/soc-topology.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='widget_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='dai_load' type-id='47fc8c26' visibility='default' filepath='include/sound/soc-topology.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='dai_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='link_load' type-id='5b44b629' visibility='default' filepath='include/sound/soc-topology.h' line='144' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='link_unload' type-id='6332a661' visibility='default' filepath='include/sound/soc-topology.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='vendor_load' type-id='1f42ef53' visibility='default' filepath='include/sound/soc-topology.h' line='151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='vendor_unload' type-id='ff06646a' visibility='default' filepath='include/sound/soc-topology.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='complete' type-id='f88ed793' visibility='default' filepath='include/sound/soc-topology.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='manifest' type-id='502bd26a' visibility='default' filepath='include/sound/soc-topology.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='io_ops' type-id='745ce067' visibility='default' filepath='include/sound/soc-topology.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='io_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='bytes_ext_ops' type-id='a62d5bd8' visibility='default' filepath='include/sound/soc-topology.h' line='168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='bytes_ext_ops_count' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-topology.h' line='169' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ctl_hdr' size-in-bits='1632' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='284' column='1' id='d3581737'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='285' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='286' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='access' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='ops' type-id='e189081e' visibility='default' filepath='include/uapi/sound/asoc.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='tlv' type-id='4d52b2c7' visibility='default' filepath='include/uapi/sound/asoc.h' line='290' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_io_ops' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='275' column='1' id='e189081e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='get' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='276' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='put' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='277' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='info' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='278' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_ctl_tlv' size-in-bits='1088' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='251' column='1' id='4d52b2c7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='252' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='' type-id='9329c56a' visibility='default' filepath='include/uapi/sound/asoc.h' line='254' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__' size-in-bits='1024' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='254' column='1' id='9329c56a'>
+        <data-member access='public'>
+          <var-decl name='data' type-id='28645bde' visibility='default' filepath='include/uapi/sound/asoc.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='scale' type-id='e82b6f56' visibility='default' filepath='include/uapi/sound/asoc.h' line='256' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_tlv_dbscale' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='245' column='1' id='e82b6f56'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='step' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='247' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='mute' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='248' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_route' size-in-bits='768' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='550' column='1' id='4a91f65b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='sink' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='551' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='control' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='552' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='source' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dapm.h' line='553' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='connected' type-id='4b433675' visibility='default' filepath='include/sound/soc-dapm.h' line='556' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dapm.h' line='559' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_dapm_widget' size-in-bits='1056' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='478' column='1' id='b1e3bc3e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='479' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='480' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='481' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='sname' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='482' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='reg' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='484' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='shift' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='485' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='486' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='subseq' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='487' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='invert' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='488' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='ignore_suspend' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='489' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='event_flags' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='490' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='976'>
+          <var-decl name='event_type' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='491' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='num_kcontrols' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='492' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='493' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_private' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='234' column='1' id='372c32b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='' type-id='0aa36f77' visibility='default' filepath='include/uapi/sound/asoc.h' line='236' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__1' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='236' column='1' id='0aa36f77'>
+        <data-member access='public'>
+          <var-decl name='data' type-id='e84913bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='237' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='array' type-id='591a7f7d' visibility='default' filepath='include/uapi/sound/asoc.h' line='238' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_vendor_array' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='218' column='1' id='8a4504f5'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='219' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='num_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='221' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='' type-id='4a9a99f8' visibility='default' filepath='include/uapi/sound/asoc.h' line='222' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__2' is-anonymous='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='222' column='1' id='4a9a99f8'>
+        <data-member access='public'>
+          <var-decl name='uuid' type-id='ebaaecd3' visibility='default' filepath='include/uapi/sound/asoc.h' line='223' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='value' type-id='3ecd3c6d' visibility='default' filepath='include/uapi/sound/asoc.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='string' type-id='e9564905' visibility='default' filepath='include/uapi/sound/asoc.h' line='225' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_tplg_vendor_uuid_elem' size-in-bits='160' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='201' column='1' id='79a1b937'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='202' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='uuid' type-id='ac1fa8c0' visibility='default' filepath='include/uapi/sound/asoc.h' line='203' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_vendor_value_elem' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='207' column='1' id='26236645'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='208' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='value' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='209' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_vendor_string_elem' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='213' column='1' id='08cf731d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='token' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='214' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='string' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='215' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_driver' size-in-bits='2048' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='279' column='1' id='a1599794'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='281' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='282' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='base' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='283' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc-dai.h' line='284' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='probe' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='287' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='remove' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='288' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='suspend' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='289' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='resume' type-id='a2515c25' visibility='default' filepath='include/sound/soc-dai.h' line='290' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compress_new' type-id='da6639f9' visibility='default' filepath='include/sound/soc-dai.h' line='292' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='pcm_new' type-id='6c0c7302' visibility='default' filepath='include/sound/soc-dai.h' line='294' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='ops' type-id='777e33bd' visibility='default' filepath='include/sound/soc-dai.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='cops' type-id='c9d35a9c' visibility='default' filepath='include/sound/soc-dai.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='capture' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='playback' type-id='e85be380' visibility='default' filepath='include/sound/soc-dai.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='3'>
+          <var-decl name='bus_control' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1952'>
+          <var-decl name='probe_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='remove_order' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai' size-in-bits='1024' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='319' column='1' id='2d7051f1'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc-dai.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dai.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc-dai.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='driver' type-id='763d26a2' visibility='default' filepath='include/sound/soc-dai.h' line='325' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='capture_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='328' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='playback_active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='329' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='probed' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='330' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='active' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='332' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='playback_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='capture_widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dai.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='playback_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='capture_dma_data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc-dai.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='sample_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='component' type-id='807b7702' visibility='default' filepath='include/sound/soc-dai.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='tx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='rx_mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-dai.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dai.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_runtime' size-in-bits='14016' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1149' column='1' id='00e3a6d4'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='1150' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='1151' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_link' type-id='af5a73b0' visibility='default' filepath='include/sound/soc.h' line='1152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ops' type-id='73803d48' visibility='default' filepath='include/sound/soc.h' line='1153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='params_select' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='dpcm' type-id='39f07796' visibility='default' filepath='include/sound/soc.h' line='1158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11968'>
+          <var-decl name='pmdown_time' type-id='bd54fe1a' visibility='default' filepath='include/sound/soc.h' line='1160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12032'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='include/sound/soc.h' line='1163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12096'>
+          <var-decl name='compr' type-id='dc1e097e' visibility='default' filepath='include/sound/soc.h' line='1164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12160'>
+          <var-decl name='codec_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1165' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12224'>
+          <var-decl name='cpu_dai' type-id='1c936db9' visibility='default' filepath='include/sound/soc.h' line='1166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12288'>
+          <var-decl name='codec_dais' type-id='8f157e69' visibility='default' filepath='include/sound/soc.h' line='1168' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12352'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1169' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12416'>
+          <var-decl name='delayed_work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='1171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13504'>
+          <var-decl name='debugfs_dpcm_root' type-id='27675065' visibility='default' filepath='include/sound/soc.h' line='1173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13568'>
+          <var-decl name='num' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13632'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1177' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13760'>
+          <var-decl name='component_list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='1178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_registered' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1181' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='pop_wait' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='fe_compr' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13952'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1185' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link' size-in-bits='1728' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='769' column='1' id='5c18a8e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='771' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='772' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='cpus' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='786' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='num_cpus' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='787' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='codecs' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='794' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='num_codecs' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='795' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='platforms' type-id='4120e250' visibility='default' filepath='include/sound/soc.h' line='802' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='num_platforms' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='803' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='id' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='805' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='params' type-id='b0772ded' visibility='default' filepath='include/sound/soc.h' line='807' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='num_params' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='808' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='dai_fmt' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='810' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='trigger' type-id='16449c76' visibility='default' filepath='include/sound/soc.h' line='812' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='init' type-id='1ad47772' visibility='default' filepath='include/sound/soc.h' line='815' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='be_hw_params_fixup' type-id='59a76ce1' visibility='default' filepath='include/sound/soc.h' line='818' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='ops' type-id='d33d33c6' visibility='default' filepath='include/sound/soc.h' line='822' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='compr_ops' type-id='33ec9b0e' visibility='default' filepath='include/sound/soc.h' line='823' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='nonatomic' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='826' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='8'>
+          <var-decl name='playback_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='829' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='9'>
+          <var-decl name='capture_only' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='830' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='10'>
+          <var-decl name='ignore_suspend' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='833' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='11'>
+          <var-decl name='symmetric_rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='836' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='12'>
+          <var-decl name='symmetric_channels' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='837' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13'>
+          <var-decl name='symmetric_samplebits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='838' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='14'>
+          <var-decl name='no_pcm' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='841' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='15'>
+          <var-decl name='dynamic' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='844' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='16'>
+          <var-decl name='no_host_mode' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='850' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='18'>
+          <var-decl name='dpcm_capture' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='853' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='19'>
+          <var-decl name='dpcm_playback' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='854' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='20'>
+          <var-decl name='dpcm_merged_format' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='857' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='21'>
+          <var-decl name='dpcm_merged_chan' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='859' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='22'>
+          <var-decl name='dpcm_merged_rate' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='861' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='23'>
+          <var-decl name='ignore_pmdown_time' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='864' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24'>
+          <var-decl name='ignore' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='867' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='869' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='870' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='872' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dai_link_component' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='763' column='1' id='ed5b2002'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='764' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='765' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dai_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='766' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_pcm_stream' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='722' column='1' id='e85be380'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='723' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='724' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='725' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='726' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='727' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='channels_min' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='728' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='729' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='sig_bits' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='730' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='aif_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='731' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_trigger' filepath='include/sound/soc-dpcm.h' line='58' column='1' id='b615ca5b'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_PRE' value='0'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_POST' value='1'/>
+        <enumerator name='SND_SOC_DPCM_TRIGGER_BESPOKE' value='2'/>
+      </enum-decl>
+      <class-decl name='snd_soc_ops' size-in-bits='384' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='735' column='1' id='40fc482f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='736' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='897d1b6d' visibility='default' filepath='include/sound/soc.h' line='737' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='hw_params' type-id='2b3f1c33' visibility='default' filepath='include/sound/soc.h' line='738' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='hw_free' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='739' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare' type-id='ab756384' visibility='default' filepath='include/sound/soc.h' line='740' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='trigger' type-id='898a0783' visibility='default' filepath='include/sound/soc.h' line='741' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_compr_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='744' column='1' id='9c97c2f7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='745' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='4b0aea04' visibility='default' filepath='include/sound/soc.h' line='746' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='747' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='trigger' type-id='be315f37' visibility='default' filepath='include/sound/soc.h' line='748' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dpcm_runtime' size-in-bits='5376' is-struct='yes' visibility='default' filepath='include/sound/soc-dpcm.h' line='91' column='1' id='c1c63dde'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='be_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fe_clients' type-id='72f469ec' visibility='default' filepath='include/sound/soc-dpcm.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='users' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='runtime' type-id='17a05af6' visibility='default' filepath='include/sound/soc-dpcm.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='hw_params' type-id='6c57d4a8' visibility='default' filepath='include/sound/soc-dpcm.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5248'>
+          <var-decl name='runtime_update' type-id='3708cdec' visibility='default' filepath='include/sound/soc-dpcm.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5280'>
+          <var-decl name='state' type-id='792c8cde' visibility='default' filepath='include/sound/soc-dpcm.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5312'>
+          <var-decl name='trigger_pending' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dpcm.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <enum-decl name='snd_soc_dpcm_update' filepath='include/sound/soc-dpcm.h' line='21' column='1' id='3708cdec'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_NO' value='0'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_BE' value='1'/>
+        <enumerator name='SND_SOC_DPCM_UPDATE_FE' value='2'/>
+      </enum-decl>
+      <enum-decl name='snd_soc_dpcm_state' filepath='include/sound/soc-dpcm.h' line='38' column='1' id='792c8cde'>
+        <underlying-type type-id='9cac1fee'/>
+        <enumerator name='SND_SOC_DPCM_STATE_NEW' value='0'/>
+        <enumerator name='SND_SOC_DPCM_STATE_OPEN' value='1'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_PARAMS' value='2'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PREPARE' value='3'/>
+        <enumerator name='SND_SOC_DPCM_STATE_START' value='4'/>
+        <enumerator name='SND_SOC_DPCM_STATE_STOP' value='5'/>
+        <enumerator name='SND_SOC_DPCM_STATE_PAUSED' value='6'/>
+        <enumerator name='SND_SOC_DPCM_STATE_SUSPEND' value='7'/>
+        <enumerator name='SND_SOC_DPCM_STATE_HW_FREE' value='8'/>
+        <enumerator name='SND_SOC_DPCM_STATE_CLOSE' value='9'/>
+      </enum-decl>
+      <class-decl name='snd_soc_dai_ops' size-in-bits='1344' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='173' column='1' id='b1fadf8a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='set_sysclk' type-id='fd437b0d' visibility='default' filepath='include/sound/soc-dai.h' line='178' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='set_pll' type-id='6cd85f13' visibility='default' filepath='include/sound/soc-dai.h' line='180' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_clkdiv' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='set_bclk_ratio' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_fmt' type-id='40bc7c47' visibility='default' filepath='include/sound/soc-dai.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='xlate_tdm_slot_mask' type-id='4f8fb1b3' visibility='default' filepath='include/sound/soc-dai.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='set_tdm_slot' type-id='af3f6c83' visibility='default' filepath='include/sound/soc-dai.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='set_channel_map' type-id='f98f7769' visibility='default' filepath='include/sound/soc-dai.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='get_channel_map' type-id='37bbabb5' visibility='default' filepath='include/sound/soc-dai.h' line='198' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='set_tristate' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='201' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='set_sdw_stream' type-id='1dd33160' visibility='default' filepath='include/sound/soc-dai.h' line='203' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='digital_mute' type-id='432e0bcc' visibility='default' filepath='include/sound/soc-dai.h' line='209' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='mute_stream' type-id='b346094b' visibility='default' filepath='include/sound/soc-dai.h' line='210' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='startup' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='216' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='shutdown' type-id='c7f8de51' visibility='default' filepath='include/sound/soc-dai.h' line='218' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='hw_params' type-id='2e127687' visibility='default' filepath='include/sound/soc-dai.h' line='220' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='hw_free' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='222' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='prepare' type-id='ebda04fc' visibility='default' filepath='include/sound/soc-dai.h' line='224' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='233' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='bespoke_trigger' type-id='939046d7' visibility='default' filepath='include/sound/soc-dai.h' line='235' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='delay' type-id='2610fb79' visibility='default' filepath='include/sound/soc-dai.h' line='241' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_cdai_ops' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/soc-dai.h' line='245' column='1' id='d6a931df'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='startup' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='249' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='shutdown' type-id='ff70ae33' visibility='default' filepath='include/sound/soc-dai.h' line='251' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='set_params' type-id='64548faf' visibility='default' filepath='include/sound/soc-dai.h' line='253' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='get_params' type-id='1b64445b' visibility='default' filepath='include/sound/soc-dai.h' line='255' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='set_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='257' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='get_metadata' type-id='b8430c5e' visibility='default' filepath='include/sound/soc-dai.h' line='259' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='trigger' type-id='5b6d9de6' visibility='default' filepath='include/sound/soc-dai.h' line='261' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pointer' type-id='6ca57870' visibility='default' filepath='include/sound/soc-dai.h' line='263' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='ack' type-id='6620a240' visibility='default' filepath='include/sound/soc-dai.h' line='265' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_pcm' size-in-bits='7296' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='511' column='1' id='6d009fe7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='512' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pcm_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='513' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='dai_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='514' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='pcm_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='515' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dai_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='516' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='playback' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='517' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='capture' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='518' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='compress' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='519' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='stream' type-id='0036534d' visibility='default' filepath='include/uapi/sound/asoc.h' line='520' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5504'>
+          <var-decl name='num_streams' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='521' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5536'>
+          <var-decl name='caps' type-id='57144ac1' visibility='default' filepath='include/uapi/sound/asoc.h' line='522' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7200'>
+          <var-decl name='flag_mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='523' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7232'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='524' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='7264'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='525' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_stream' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='317' column='1' id='a305d6c9'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='318' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='319' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='format' type-id='a30e8d1f' visibility='default' filepath='include/uapi/sound/asoc.h' line='320' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='321' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='period_bytes' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='322' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='buffer_bytes' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='323' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='324' column='1'/>
+        </data-member>
+      </class-decl>
+      <typedef-decl name='__le64' type-id='d3130597' filepath='include/uapi/linux/types.h' line='33' column='1' id='a30e8d1f'/>
+      <class-decl name='snd_soc_tplg_stream_caps' size-in-bits='832' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='296' column='1' id='d49652d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='297' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='298' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='formats' type-id='a30e8d1f' visibility='default' filepath='include/uapi/sound/asoc.h' line='299' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rates' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='300' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rate_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='301' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rate_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='302' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='channels_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='303' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='channels_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='304' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='periods_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='305' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='periods_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='306' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='period_size_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='307' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='period_size_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='308' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='buffer_size_min' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='309' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='buffer_size_max' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='310' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='sig_bits' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='311' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_link_config' size-in-bits='13248' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='539' column='1' id='a79c02b8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='540' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='541' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='542' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='stream_name' type-id='36cef6bd' visibility='default' filepath='include/uapi/sound/asoc.h' line='543' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='stream' type-id='0036534d' visibility='default' filepath='include/uapi/sound/asoc.h' line='544' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5376'>
+          <var-decl name='num_streams' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='545' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='5408'>
+          <var-decl name='hw_config' type-id='63c0e8df' visibility='default' filepath='include/uapi/sound/asoc.h' line='546' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13088'>
+          <var-decl name='num_hw_configs' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='547' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13120'>
+          <var-decl name='default_hw_config_id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='548' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13152'>
+          <var-decl name='flag_mask' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='549' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13184'>
+          <var-decl name='flags' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='550' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='13216'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='551' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_hw_config' size-in-bits='960' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='332' column='1' id='826dc1a3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='333' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='id' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='334' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='fmt' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='335' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='clock_gated' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='336' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='104'>
+          <var-decl name='invert_bclk' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='337' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='112'>
+          <var-decl name='invert_fsync' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='338' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='120'>
+          <var-decl name='bclk_master' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='339' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='fsync_master' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='340' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='136'>
+          <var-decl name='mclk_direction' type-id='8f048e17' visibility='default' filepath='include/uapi/sound/asoc.h' line='341' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='144'>
+          <var-decl name='reserved' type-id='23119536' visibility='default' filepath='include/uapi/sound/asoc.h' line='342' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='mclk_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='343' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='bclk_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='344' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fsync_rate' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='345' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='tdm_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='346' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='tdm_slot_width' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='347' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='tx_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='348' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='rx_slots' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='349' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='tx_channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='350' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='tx_chanmap' type-id='e389acd5' visibility='default' filepath='include/uapi/sound/asoc.h' line='351' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='rx_channels' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='352' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='rx_chanmap' type-id='e389acd5' visibility='default' filepath='include/uapi/sound/asoc.h' line='353' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_hdr' size-in-bits='288' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='188' column='1' id='a2f068ed'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='magic' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='189' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='abi' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='190' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='version' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='191' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='192' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='193' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='vendor_type' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='194' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='payload_size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='195' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='index' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='196' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='count' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='197' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_manifest' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/uapi/sound/asoc.h' line='368' column='1' id='913f3538'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='size' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='369' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='control_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='370' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='widget_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='371' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='graph_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='372' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='373' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='dai_link_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='374' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='dai_elems' type-id='2f162548' visibility='default' filepath='include/uapi/sound/asoc.h' line='375' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='reserved' type-id='77d1242b' visibility='default' filepath='include/uapi/sound/asoc.h' line='376' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='priv' type-id='372c32b8' visibility='default' filepath='include/uapi/sound/asoc.h' line='377' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_kcontrol_ops' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='79' column='1' id='ad974450'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='81' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='8336f92e' visibility='default' filepath='include/sound/soc-topology.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='info' type-id='a54793a9' visibility='default' filepath='include/sound/soc-topology.h' line='85' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_tplg_bytes_ext_ops' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='90' column='1' id='3e689ce7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='id' type-id='19c2251e' visibility='default' filepath='include/sound/soc-topology.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='get' type-id='f0dd4a3b' visibility='default' filepath='include/sound/soc-topology.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='put' type-id='f517dc88' visibility='default' filepath='include/sound/soc-topology.h' line='94' column='1'/>
+        </data-member>
+      </class-decl>
+      <union-decl name='__anonymous_union__3' size-in-bits='192' is-anonymous='yes' visibility='default' filepath='include/sound/soc-topology.h' line='69' column='1' id='d80bfbd6'>
+        <data-member access='public'>
+          <var-decl name='control' type-id='8a84fb32' visibility='default' filepath='include/sound/soc-topology.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public'>
+          <var-decl name='widget' type-id='ca569b91' visibility='default' filepath='include/sound/soc-topology.h' line='71' column='1'/>
+        </data-member>
+      </union-decl>
+      <class-decl name='snd_soc_dobj_control' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='52' column='1' id='8a84fb32'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-topology.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dtexts' type-id='9b23c9ad' visibility='default' filepath='include/sound/soc-topology.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='dvalues' type-id='1d2c2b85' visibility='default' filepath='include/sound/soc-topology.h' line='55' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dobj_widget' size-in-bits='32' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='59' column='1' id='ca569b91'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol_type' type-id='f0981eeb' visibility='default' filepath='include/sound/soc-topology.h' line='60' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_jack' size-in-bits='1152' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='711' column='1' id='4d855bce'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='include/sound/soc.h' line='712' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='jack' type-id='0f5a7eb8' visibility='default' filepath='include/sound/soc.h' line='713' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='card' type-id='3059cd0b' visibility='default' filepath='include/sound/soc.h' line='714' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='pins' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='715' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='status' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='716' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='notifier' type-id='708c2394' visibility='default' filepath='include/sound/soc.h' line='717' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='jack_zones' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='718' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_wcache' size-in-bits='64' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='660' column='1' id='27dc472b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='widget' type-id='810606ec' visibility='default' filepath='include/sound/soc-dapm.h' line='661' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_codec_conf' size-in-bits='192' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='974' column='1' id='7082c248'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dev_name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='979' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='of_node' type-id='9a537bbe' visibility='default' filepath='include/sound/soc.h' line='980' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name_prefix' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='986' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_aux_dev' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='989' column='1' id='5183f61d'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='dlc' type-id='ed5b2002' visibility='default' filepath='include/sound/soc.h' line='994' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='init' type-id='48cf6abe' visibility='default' filepath='include/sound/soc.h' line='997' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_stats' size-in-bits='96' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='693' column='1' id='fef29e19'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='power_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='path_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='neighbour_checks' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='696' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_dapm_update' size-in-bits='320' is-struct='yes' visibility='default' filepath='include/sound/soc-dapm.h' line='649' column='1' id='b6a3f4d3'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='kcontrol' type-id='7a5054b7' visibility='default' filepath='include/sound/soc-dapm.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='652' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='val' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='653' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='reg2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='654' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='655' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='val2' type-id='95e97e5e' visibility='default' filepath='include/sound/soc-dapm.h' line='656' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='has_second_set' type-id='b50a4934' visibility='default' filepath='include/sound/soc-dapm.h' line='657' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='33d73f3b' const='yes' id='9625db14'/>
+      <pointer-type-def type-id='9625db14' size-in-bits='64' id='9b98229a'/>
+      <qualified-type-def type-id='d6a931df' const='yes' id='da194c5e'/>
+      <pointer-type-def type-id='da194c5e' size-in-bits='64' id='c9d35a9c'/>
+      <qualified-type-def type-id='9f6de273' const='yes' id='215ec542'/>
+      <pointer-type-def type-id='215ec542' size-in-bits='64' id='f030c2b8'/>
+      <qualified-type-def type-id='9c97c2f7' const='yes' id='abf99950'/>
+      <pointer-type-def type-id='abf99950' size-in-bits='64' id='33ec9b0e'/>
+      <qualified-type-def type-id='ed5b2002' const='yes' id='b60126bf'/>
+      <pointer-type-def type-id='b60126bf' size-in-bits='64' id='18cfbc8f'/>
+      <qualified-type-def type-id='b1fadf8a' const='yes' id='87538745'/>
+      <pointer-type-def type-id='87538745' size-in-bits='64' id='777e33bd'/>
+      <qualified-type-def type-id='4a91f65b' const='yes' id='e0f88742'/>
+      <pointer-type-def type-id='e0f88742' size-in-bits='64' id='8f3d28b8'/>
+      <qualified-type-def type-id='f780d556' const='yes' id='e0d04bd9'/>
+      <pointer-type-def type-id='e0d04bd9' size-in-bits='64' id='dae78f89'/>
+      <qualified-type-def type-id='40fc482f' const='yes' id='b276f0c8'/>
+      <pointer-type-def type-id='b276f0c8' size-in-bits='64' id='d33d33c6'/>
+      <qualified-type-def type-id='e85be380' const='yes' id='8dc7c255'/>
+      <pointer-type-def type-id='8dc7c255' size-in-bits='64' id='b0772ded'/>
+      <qualified-type-def type-id='3e689ce7' const='yes' id='597bfbe2'/>
+      <pointer-type-def type-id='597bfbe2' size-in-bits='64' id='a62d5bd8'/>
+      <qualified-type-def type-id='ad974450' const='yes' id='319b3a77'/>
+      <pointer-type-def type-id='319b3a77' size-in-bits='64' id='745ce067'/>
+      <pointer-type-def type-id='d26d2ca4' size-in-bits='64' id='5b6d9de6'/>
+      <pointer-type-def type-id='7e019027' size-in-bits='64' id='1b64445b'/>
+      <pointer-type-def type-id='6f527014' size-in-bits='64' id='b8430c5e'/>
+      <pointer-type-def type-id='dcda8403' size-in-bits='64' id='64548faf'/>
+      <pointer-type-def type-id='aaad2fce' size-in-bits='64' id='6ca57870'/>
+      <pointer-type-def type-id='f5362227' size-in-bits='64' id='ff70ae33'/>
+      <pointer-type-def type-id='201ffa8e' size-in-bits='64' id='6620a240'/>
+      <pointer-type-def type-id='643400ce' size-in-bits='64' id='f517dc88'/>
+      <pointer-type-def type-id='fa75c86d' size-in-bits='64' id='a54793a9'/>
+      <pointer-type-def type-id='84147814' size-in-bits='64' id='8336f92e'/>
+      <pointer-type-def type-id='eb5d5777' size-in-bits='64' id='f0dd4a3b'/>
+      <pointer-type-def type-id='d9bbe8ab' size-in-bits='64' id='939046d7'/>
+      <pointer-type-def type-id='1f765c33' size-in-bits='64' id='2e127687'/>
+      <pointer-type-def type-id='1f79c412' size-in-bits='64' id='ebda04fc'/>
+      <pointer-type-def type-id='f82a46c1' size-in-bits='64' id='edcb70dd'/>
+      <pointer-type-def type-id='18620c48' size-in-bits='64' id='1391f54a'/>
+      <pointer-type-def type-id='fcf647be' size-in-bits='64' id='4a944438'/>
+      <pointer-type-def type-id='9917f524' size-in-bits='64' id='48cf6abe'/>
+      <pointer-type-def type-id='0ed9f201' size-in-bits='64' id='71f7eca5'/>
+      <pointer-type-def type-id='ebf04e7b' size-in-bits='64' id='ab3c35df'/>
+      <pointer-type-def type-id='483ecac1' size-in-bits='64' id='4d6d9805'/>
+      <pointer-type-def type-id='a9bd2db1' size-in-bits='64' id='ff554aed'/>
+      <pointer-type-def type-id='9c43712a' size-in-bits='64' id='bd4604a4'/>
+      <pointer-type-def type-id='8a322362' size-in-bits='64' id='6b4579c4'/>
+      <pointer-type-def type-id='b9d8dce4' size-in-bits='64' id='47fc8c26'/>
+      <pointer-type-def type-id='3098b525' size-in-bits='64' id='5b44b629'/>
+      <pointer-type-def type-id='956881f1' size-in-bits='64' id='7ad49bc5'/>
+      <pointer-type-def type-id='02f1c4a9' size-in-bits='64' id='b4fb1c55'/>
+      <pointer-type-def type-id='98408d8f' size-in-bits='64' id='1f42ef53'/>
+      <pointer-type-def type-id='c21a2b60' size-in-bits='64' id='502bd26a'/>
+      <pointer-type-def type-id='a4f8cee1' size-in-bits='64' id='93cd7c85'/>
+      <pointer-type-def type-id='c37d868d' size-in-bits='64' id='6332a661'/>
+      <pointer-type-def type-id='8ca90cbf' size-in-bits='64' id='997f6223'/>
+      <pointer-type-def type-id='df961c58' size-in-bits='64' id='ff06646a'/>
+      <pointer-type-def type-id='dca78e2c' size-in-bits='64' id='726f2cf6'/>
+      <pointer-type-def type-id='8892a831' size-in-bits='64' id='a2515c25'/>
+      <pointer-type-def type-id='15bee3b2' size-in-bits='64' id='432e0bcc'/>
+      <pointer-type-def type-id='33f6a667' size-in-bits='64' id='b346094b'/>
+      <pointer-type-def type-id='a9c862bf' size-in-bits='64' id='6cd85f13'/>
+      <pointer-type-def type-id='1cd99dc1' size-in-bits='64' id='fd437b0d'/>
+      <pointer-type-def type-id='868d8193' size-in-bits='64' id='40bc7c47'/>
+      <pointer-type-def type-id='294a6b21' size-in-bits='64' id='37bbabb5'/>
+      <pointer-type-def type-id='34f7ad3d' size-in-bits='64' id='f98f7769'/>
+      <pointer-type-def type-id='1126278f' size-in-bits='64' id='af3f6c83'/>
+      <pointer-type-def type-id='ff87f3a6' size-in-bits='64' id='1dd33160'/>
+      <pointer-type-def type-id='6634c3c6' size-in-bits='64' id='3fccea10'/>
+      <pointer-type-def type-id='34c8e7e1' size-in-bits='64' id='af92413d'/>
+      <pointer-type-def type-id='e5cda869' size-in-bits='64' id='4b433675'/>
+      <pointer-type-def type-id='10865770' size-in-bits='64' id='1ad47772'/>
+      <pointer-type-def type-id='52c5253d' size-in-bits='64' id='da6639f9'/>
+      <pointer-type-def type-id='d8484ecd' size-in-bits='64' id='59a76ce1'/>
+      <pointer-type-def type-id='ea48a448' size-in-bits='64' id='6c0c7302'/>
+      <pointer-type-def type-id='d87e539f' size-in-bits='64' id='4f8fb1b3'/>
+      <pointer-type-def type-id='7a5054b7' size-in-bits='64' id='29753327'/>
+      <pointer-type-def type-id='9a46627e' size-in-bits='64' id='2753ede4'/>
+      <pointer-type-def type-id='5183f61d' size-in-bits='64' id='8ace4add'/>
+      <pointer-type-def type-id='29ad938b' size-in-bits='64' id='3059cd0b'/>
+      <pointer-type-def type-id='7082c248' size-in-bits='64' id='f10279fe'/>
+      <pointer-type-def type-id='9ba86a44' size-in-bits='64' id='807b7702'/>
+      <pointer-type-def type-id='2d7051f1' size-in-bits='64' id='1c936db9'/>
+      <pointer-type-def type-id='1c936db9' size-in-bits='64' id='8f157e69'/>
+      <pointer-type-def type-id='a1599794' size-in-bits='64' id='763d26a2'/>
+      <pointer-type-def type-id='5c18a8e2' size-in-bits='64' id='af5a73b0'/>
+      <pointer-type-def type-id='ed5b2002' size-in-bits='64' id='4120e250'/>
+      <pointer-type-def type-id='95201ae5' size-in-bits='64' id='70d004a5'/>
+      <pointer-type-def type-id='4a91f65b' size-in-bits='64' id='66add68b'/>
+      <pointer-type-def type-id='b6a3f4d3' size-in-bits='64' id='33146de3'/>
+      <pointer-type-def type-id='f780d556' size-in-bits='64' id='810606ec'/>
+      <pointer-type-def type-id='01edcafc' size-in-bits='64' id='3c2163ba'/>
+      <pointer-type-def type-id='4d855bce' size-in-bits='64' id='12a060a4'/>
+      <pointer-type-def type-id='00e3a6d4' size-in-bits='64' id='95316552'/>
+      <pointer-type-def type-id='d3581737' size-in-bits='64' id='25b0d1cf'/>
+      <pointer-type-def type-id='b1e3bc3e' size-in-bits='64' id='32ca7384'/>
+      <pointer-type-def type-id='a2f068ed' size-in-bits='64' id='0081e2ad'/>
+      <pointer-type-def type-id='a79c02b8' size-in-bits='64' id='8665c98e'/>
+      <pointer-type-def type-id='913f3538' size-in-bits='64' id='2a24760e'/>
+      <pointer-type-def type-id='c2ddf2d7' size-in-bits='64' id='76e6e22f'/>
+      <pointer-type-def type-id='6d009fe7' size-in-bits='64' id='cee845ff'/>
+      <pointer-type-def type-id='4c8ce8c5' size-in-bits='64' id='2610fb79'/>
+      <pointer-type-def type-id='0971a711' size-in-bits='64' id='7bb6ff35'/>
+      <pointer-type-def type-id='da3c754a' size-in-bits='64' id='4b0aea04'/>
+      <pointer-type-def type-id='9eea6bb5' size-in-bits='64' id='c7f8de51'/>
+      <pointer-type-def type-id='883b3327' size-in-bits='64' id='e3fceddb'/>
+      <pointer-type-def type-id='b43302df' size-in-bits='64' id='f88ed793'/>
+      <pointer-type-def type-id='139c5a2c' size-in-bits='64' id='f596d48e'/>
+      <var-decl name='snd_soc_pm_ops' type-id='86af1d10' mangled-name='snd_soc_pm_ops' visibility='default' filepath='sound/soc/soc-core.c' line='2231' column='1' elf-symbol-id='snd_soc_pm_ops'/>
+      <function-decl name='snd_soc_register_card' mangled-name='snd_soc_register_card' filepath='sound/soc/soc-core.c' line='2423' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_register_card'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2423' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_unregister_card' mangled-name='snd_soc_unregister_card' filepath='sound/soc/soc-core.c' line='2477' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_unregister_card'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2477' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_find_dai' mangled-name='snd_soc_find_dai' filepath='sound/soc/soc-core.c' line='795' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_find_dai'>
+        <parameter type-id='18cfbc8f' name='dlc' filepath='sound/soc/soc-core.c' line='796' column='1'/>
+        <return type-id='1c936db9'/>
+      </function-decl>
+      <function-decl name='snd_soc_add_component_controls' mangled-name='snd_soc_add_component_controls' filepath='sound/soc/soc-core.c' line='2340' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_add_component_controls'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2340' column='1'/>
+        <parameter type-id='31e035f7' name='controls' filepath='sound/soc/soc-core.c' line='2341' column='1'/>
+        <parameter type-id='f0981eeb' name='num_controls' filepath='sound/soc/soc-core.c' line='2341' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_unregister_component' mangled-name='snd_soc_unregister_component' filepath='sound/soc/soc-core.c' line='2929' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_unregister_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2929' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_rtdcom_lookup' mangled-name='snd_soc_rtdcom_lookup' filepath='sound/soc/soc-core.c' line='310' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_rtdcom_lookup'>
+        <parameter type-id='95316552' name='rtd' filepath='sound/soc/soc-core.c' line='310' column='1'/>
+        <parameter type-id='80f4b756' name='driver_name' filepath='sound/soc/soc-core.c' line='311' column='1'/>
+        <return type-id='807b7702'/>
+      </function-decl>
+      <function-decl name='snd_soc_register_component' mangled-name='snd_soc_register_component' filepath='sound/soc/soc-core.c' line='2883' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_register_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2883' column='1'/>
+        <parameter type-id='f030c2b8' name='component_driver' filepath='sound/soc/soc-core.c' line='2884' column='1'/>
+        <parameter type-id='763d26a2' name='dai_drv' filepath='sound/soc/soc-core.c' line='2885' column='1'/>
+        <parameter type-id='95e97e5e' name='num_dai' filepath='sound/soc/soc-core.c' line='2886' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_put_dai_link_codecs' mangled-name='snd_soc_of_put_dai_link_codecs' filepath='sound/soc/soc-core.c' line='3469' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_put_dai_link_codecs'>
+        <parameter type-id='af5a73b0' name='dai_link' filepath='sound/soc/soc-core.c' line='3469' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_tdm_slot' mangled-name='snd_soc_of_parse_tdm_slot' filepath='sound/soc/soc-core.c' line='3099' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_tdm_slot'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3099' column='1'/>
+        <parameter type-id='807869d3' name='tx_mask' filepath='sound/soc/soc-core.c' line='3100' column='1'/>
+        <parameter type-id='807869d3' name='rx_mask' filepath='sound/soc/soc-core.c' line='3101' column='1'/>
+        <parameter type-id='807869d3' name='slots' filepath='sound/soc/soc-core.c' line='3102' column='1'/>
+        <parameter type-id='807869d3' name='slot_width' filepath='sound/soc/soc-core.c' line='3103' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_node_prefix' mangled-name='snd_soc_of_parse_node_prefix' filepath='sound/soc/soc-core.c' line='3135' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_node_prefix'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3135' column='1'/>
+        <parameter type-id='f10279fe' name='codec_conf' filepath='sound/soc/soc-core.c' line='3136' column='1'/>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3137' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3138' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_daifmt' mangled-name='snd_soc_of_parse_daifmt' filepath='sound/soc/soc-core.c' line='3210' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_daifmt'>
+        <parameter type-id='9a537bbe' name='np' filepath='sound/soc/soc-core.c' line='3210' column='1'/>
+        <parameter type-id='80f4b756' name='prefix' filepath='sound/soc/soc-core.c' line='3211' column='1'/>
+        <parameter type-id='856b89fc' name='bitclkmaster' filepath='sound/soc/soc-core.c' line='3212' column='1'/>
+        <parameter type-id='856b89fc' name='framemaster' filepath='sound/soc/soc-core.c' line='3213' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_card_name' mangled-name='snd_soc_of_parse_card_name' filepath='sound/soc/soc-core.c' line='2963' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_card_name'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='2963' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='2964' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_audio_simple_widgets' mangled-name='snd_soc_of_parse_audio_simple_widgets' filepath='sound/soc/soc-core.c' line='3000' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_audio_simple_widgets'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='3000' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3001' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_parse_audio_routing' mangled-name='snd_soc_of_parse_audio_routing' filepath='sound/soc/soc-core.c' line='3154' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_parse_audio_routing'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='3154' column='1'/>
+        <parameter type-id='80f4b756' name='propname' filepath='sound/soc/soc-core.c' line='3155' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_get_dai_name' mangled-name='snd_soc_of_get_dai_name' filepath='sound/soc/soc-core.c' line='3444' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_get_dai_name'>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3444' column='1'/>
+        <parameter type-id='7d3cd834' name='dai_name' filepath='sound/soc/soc-core.c' line='3445' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_of_get_dai_link_codecs' mangled-name='snd_soc_of_get_dai_link_codecs' filepath='sound/soc/soc-core.c' line='3497' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_of_get_dai_link_codecs'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='3497' column='1'/>
+        <parameter type-id='9a537bbe' name='of_node' filepath='sound/soc/soc-core.c' line='3498' column='1'/>
+        <parameter type-id='af5a73b0' name='dai_link' filepath='sound/soc/soc-core.c' line='3499' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_lookup_component' mangled-name='snd_soc_lookup_component' filepath='sound/soc/soc-core.c' line='2936' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_lookup_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-core.c' line='2936' column='1'/>
+        <parameter type-id='80f4b756' name='driver_name' filepath='sound/soc/soc-core.c' line='2937' column='1'/>
+        <return type-id='807b7702'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_multi_ext' mangled-name='snd_soc_info_multi_ext' filepath='sound/soc/soc-core.c' line='3364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_multi_ext'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-core.c' line='3364' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-core.c' line='3365' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_pcm_runtime' mangled-name='snd_soc_get_pcm_runtime' filepath='sound/soc/soc-core.c' line='412' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_pcm_runtime'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-core.c' line='412' column='1'/>
+        <parameter type-id='80f4b756' name='dai_link' filepath='sound/soc/soc-core.c' line='413' column='1'/>
+        <return type-id='95316552'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_init_regmap' mangled-name='snd_soc_component_init_regmap' filepath='sound/soc/soc-core.c' line='2739' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_init_regmap'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2739' column='1'/>
+        <parameter type-id='29af9a71' name='regmap' filepath='sound/soc/soc-core.c' line='2740' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_exit_regmap' mangled-name='snd_soc_component_exit_regmap' filepath='sound/soc/soc-core.c' line='2758' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_exit_regmap'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-core.c' line='2758' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_card_get_kcontrol' mangled-name='snd_soc_card_get_kcontrol' filepath='sound/soc/soc-core.c' line='2315' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_card_get_kcontrol'>
+        <parameter type-id='3059cd0b' name='soc_card' filepath='sound/soc/soc-core.c' line='2315' column='1'/>
+        <parameter type-id='80f4b756' name='name' filepath='sound/soc/soc-core.c' line='2316' column='1'/>
+        <return type-id='7a5054b7'/>
+      </function-decl>
+      <function-decl name='snd_soc_add_card_controls' mangled-name='snd_soc_add_card_controls' filepath='sound/soc/soc-core.c' line='2360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_add_card_controls'>
+        <parameter type-id='3059cd0b' name='soc_card' filepath='sound/soc/soc-core.c' line='2360' column='1'/>
+        <parameter type-id='31e035f7' name='controls' filepath='sound/soc/soc-core.c' line='2361' column='1'/>
+        <parameter type-id='95e97e5e' name='num_controls' filepath='sound/soc/soc-core.c' line='2361' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='d26d2ca4'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='7e019027'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='99baf115'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6f527014'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='58dc55d6'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dcda8403'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='15dfbd93'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='aaad2fce'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='c1873808'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f5362227'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='201ffa8e'>
+        <parameter type-id='b7c1d7d5'/>
+        <parameter type-id='b59d7dce'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='643400ce'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='5b2fd8e8'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='eb5d5777'>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d9bbe8ab'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f765c33'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1f79c412'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='f82a46c1'>
+        <parameter type-id='3059cd0b' name='card'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='18620c48'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='af5a73b0'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='fcf647be'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='70d004a5'/>
+        <parameter type-id='f078c744'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9917f524'>
+        <parameter type-id='807b7702'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0ed9f201'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='9a537bbe'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ebf04e7b'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f078c744'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='483ecac1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9bd2db1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9c43712a'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8a322362'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2753ede4'/>
+        <parameter type-id='25b0d1cf'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b9d8dce4'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='763d26a2'/>
+        <parameter type-id='cee845ff'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='3098b525'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='af5a73b0'/>
+        <parameter type-id='8665c98e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='956881f1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='66add68b'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='02f1c4a9'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='32ca7384'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='98408d8f'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='0081e2ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c21a2b60'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='2a24760e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a4f8cee1'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='51a94113'/>
+        <parameter type-id='7d3cd834'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='c37d868d'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='3c2163ba'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8ca90cbf'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='12a060a4'/>
+        <parameter type-id='eaa32e2f'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='df961c58'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='0081e2ad'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='dca78e2c'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='8892a831'>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='15bee3b2'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='33f6a667'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='a9c862bf'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1cd99dc1'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='868d8193'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='294a6b21'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34f7ad3d'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='1126278f'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='95e97e5e'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ff87f3a6'>
+        <parameter type-id='1c936db9'/>
+        <parameter type-id='eaa32e2f'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='6634c3c6'>
+        <parameter type-id='810606ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='34c8e7e1'>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='7a5054b7'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='e5cda869'>
+        <parameter type-id='810606ec'/>
+        <parameter type-id='810606ec'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='10865770'>
+        <parameter type-id='95316552'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='52c5253d'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d8484ecd'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='363a995e'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='ea48a448'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='d87e539f'>
+        <parameter type-id='f0981eeb'/>
+        <parameter type-id='807869d3'/>
+        <parameter type-id='807869d3'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <function-type size-in-bits='64' id='4c8ce8c5'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='721b74e7'/>
+      </function-type>
+      <function-type size-in-bits='64' id='0971a711'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='f0981eeb'/>
+        <return type-id='f0981eeb'/>
+      </function-type>
+      <function-type size-in-bits='64' id='da3c754a'>
+        <parameter type-id='b7c1d7d5'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='9eea6bb5'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='1c936db9'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='883b3327'>
+        <parameter type-id='3059cd0b'/>
+        <parameter type-id='af5a73b0'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='b43302df'>
+        <parameter type-id='807b7702'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='139c5a2c'>
+        <parameter type-id='807b7702'/>
+        <parameter type-id='68bb1ec5'/>
+        <parameter type-id='95e97e5e'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-dai.c' language='LANG_C89'>
+      <function-decl name='snd_soc_dai_set_tdm_slot' mangled-name='snd_soc_dai_set_tdm_slot' filepath='sound/soc/soc-dai.c' line='152' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_tdm_slot'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='152' column='1'/>
+        <parameter type-id='f0981eeb' name='tx_mask' filepath='sound/soc/soc-dai.c' line='153' column='1'/>
+        <parameter type-id='f0981eeb' name='rx_mask' filepath='sound/soc/soc-dai.c' line='153' column='1'/>
+        <parameter type-id='95e97e5e' name='slots' filepath='sound/soc/soc-dai.c' line='154' column='1'/>
+        <parameter type-id='95e97e5e' name='slot_width' filepath='sound/soc/soc-dai.c' line='154' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_sysclk' mangled-name='snd_soc_dai_set_sysclk' filepath='sound/soc/soc-dai.c' line='21' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_sysclk'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='21' column='1'/>
+        <parameter type-id='95e97e5e' name='clk_id' filepath='sound/soc/soc-dai.c' line='21' column='1'/>
+        <parameter type-id='f0981eeb' name='freq' filepath='sound/soc/soc-dai.c' line='22' column='1'/>
+        <parameter type-id='95e97e5e' name='dir' filepath='sound/soc/soc-dai.c' line='22' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_pll' mangled-name='snd_soc_dai_set_pll' filepath='sound/soc/soc-dai.c' line='62' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_pll'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='pll_id' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='95e97e5e' name='source' filepath='sound/soc/soc-dai.c' line='62' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_in' filepath='sound/soc/soc-dai.c' line='63' column='1'/>
+        <parameter type-id='f0981eeb' name='freq_out' filepath='sound/soc/soc-dai.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_fmt' mangled-name='snd_soc_dai_set_fmt' filepath='sound/soc/soc-dai.c' line='97' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_fmt'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='97' column='1'/>
+        <parameter type-id='f0981eeb' name='fmt' filepath='sound/soc/soc-dai.c' line='97' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_clkdiv' mangled-name='snd_soc_dai_set_clkdiv' filepath='sound/soc/soc-dai.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_clkdiv'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='42' column='1'/>
+        <parameter type-id='95e97e5e' name='div_id' filepath='sound/soc/soc-dai.c' line='43' column='1'/>
+        <parameter type-id='95e97e5e' name='div' filepath='sound/soc/soc-dai.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_channel_map' mangled-name='snd_soc_dai_set_channel_map' filepath='sound/soc/soc-dai.c' line='185' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_channel_map'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='185' column='1'/>
+        <parameter type-id='f0981eeb' name='tx_num' filepath='sound/soc/soc-dai.c' line='186' column='1'/>
+        <parameter type-id='807869d3' name='tx_slot' filepath='sound/soc/soc-dai.c' line='186' column='1'/>
+        <parameter type-id='f0981eeb' name='rx_num' filepath='sound/soc/soc-dai.c' line='187' column='1'/>
+        <parameter type-id='807869d3' name='rx_slot' filepath='sound/soc/soc-dai.c' line='187' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_set_bclk_ratio' mangled-name='snd_soc_dai_set_bclk_ratio' filepath='sound/soc/soc-dai.c' line='81' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_set_bclk_ratio'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='81' column='1'/>
+        <parameter type-id='f0981eeb' name='ratio' filepath='sound/soc/soc-dai.c' line='81' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dai_get_channel_map' mangled-name='snd_soc_dai_get_channel_map' filepath='sound/soc/soc-dai.c' line='207' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dai_get_channel_map'>
+        <parameter type-id='1c936db9' name='dai' filepath='sound/soc/soc-dai.c' line='207' column='1'/>
+        <parameter type-id='807869d3' name='tx_num' filepath='sound/soc/soc-dai.c' line='208' column='1'/>
+        <parameter type-id='807869d3' name='tx_slot' filepath='sound/soc/soc-dai.c' line='208' column='1'/>
+        <parameter type-id='807869d3' name='rx_num' filepath='sound/soc/soc-dai.c' line='209' column='1'/>
+        <parameter type-id='807869d3' name='rx_slot' filepath='sound/soc/soc-dai.c' line='209' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-dapm.c' language='LANG_C89'>
+      <class-decl name='soc_enum' size-in-bits='896' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='1237' column='1' id='044208ec'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='reg' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='1238' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='shift_l' type-id='002ac4a6' visibility='default' filepath='include/sound/soc.h' line='1239' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='40'>
+          <var-decl name='shift_r' type-id='002ac4a6' visibility='default' filepath='include/sound/soc.h' line='1240' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='items' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1241' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='mask' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1242' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='texts' type-id='13956559' visibility='default' filepath='include/sound/soc.h' line='1243' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='values' type-id='5b2fd8e8' visibility='default' filepath='include/sound/soc.h' line='1244' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='autodisable' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='1245' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='dobj' type-id='01edcafc' visibility='default' filepath='include/sound/soc.h' line='1246' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='832'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='include/sound/soc.h' line='1248' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='8755a6ff' const='yes' id='bae39662'/>
+      <pointer-type-def type-id='bae39662' size-in-bits='64' id='7c459358'/>
+      <pointer-type-def type-id='044208ec' size-in-bits='64' id='acf1578a'/>
+      <function-decl name='snd_soc_dapm_sync' mangled-name='snd_soc_dapm_sync' filepath='sound/soc/soc-dapm.c' line='2622' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_sync'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='2622' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_controls' mangled-name='snd_soc_dapm_new_controls' filepath='sound/soc/soc-dapm.c' line='3796' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_controls'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3796' column='1'/>
+        <parameter type-id='dae78f89' name='widget' filepath='sound/soc/soc-dapm.c' line='3797' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-dapm.c' line='3798' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_add_routes' mangled-name='snd_soc_dapm_add_routes' filepath='sound/soc/soc-dapm.c' line='3088' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_add_routes'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3088' column='1'/>
+        <parameter type-id='8f3d28b8' name='route' filepath='sound/soc/soc-dapm.c' line='3089' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-dapm.c' line='3089' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_widgets' mangled-name='snd_soc_dapm_new_widgets' filepath='sound/soc/soc-dapm.c' line='3223' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_widgets'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-dapm.c' line='3223' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_weak_routes' mangled-name='snd_soc_dapm_weak_routes' filepath='sound/soc/soc-dapm.c' line='3196' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_weak_routes'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3196' column='1'/>
+        <parameter type-id='8f3d28b8' name='route' filepath='sound/soc/soc-dapm.c' line='3197' column='1'/>
+        <parameter type-id='95e97e5e' name='num' filepath='sound/soc/soc-dapm.c' line='3197' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_volsw' mangled-name='snd_soc_dapm_put_volsw' filepath='sound/soc/soc-dapm.c' line='3360' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3360' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3361' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_pin_switch' mangled-name='snd_soc_dapm_put_pin_switch' filepath='sound/soc/soc-dapm.c' line='3597' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3597' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3598' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_put_enum_double' mangled-name='snd_soc_dapm_put_enum_double' filepath='sound/soc/soc-dapm.c' line='3493' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_put_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3493' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3494' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_new_control' mangled-name='snd_soc_dapm_new_control' filepath='sound/soc/soc-dapm.c' line='3773' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_new_control'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='3773' column='1'/>
+        <parameter type-id='dae78f89' name='widget' filepath='sound/soc/soc-dapm.c' line='3774' column='1'/>
+        <return type-id='810606ec'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_mux_update_power' mangled-name='snd_soc_dapm_mux_update_power' filepath='sound/soc/soc-dapm.c' line='2296' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_mux_update_power'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='2296' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='95e97e5e' name='mux' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='acf1578a' name='e' filepath='sound/soc/soc-dapm.c' line='2297' column='1'/>
+        <parameter type-id='33146de3' name='update' filepath='sound/soc/soc-dapm.c' line='2298' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_mixer_update_power' mangled-name='snd_soc_dapm_mixer_update_power' filepath='sound/soc/soc-dapm.c' line='2361' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_mixer_update_power'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='2361' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='2362' column='1'/>
+        <parameter type-id='95e97e5e' name='connect' filepath='sound/soc/soc-dapm.c' line='2362' column='1'/>
+        <parameter type-id='33146de3' name='update' filepath='sound/soc/soc-dapm.c' line='2363' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_kcontrol_widget' mangled-name='snd_soc_dapm_kcontrol_widget' filepath='sound/soc/soc-dapm.c' line='576' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_kcontrol_widget'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='577' column='1'/>
+        <return type-id='810606ec'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_kcontrol_dapm' mangled-name='snd_soc_dapm_kcontrol_dapm' filepath='sound/soc/soc-dapm.c' line='591' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_kcontrol_dapm'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='592' column='1'/>
+        <return type-id='70d004a5'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_info_pin_switch' mangled-name='snd_soc_dapm_info_pin_switch' filepath='sound/soc/soc-dapm.c' line='3556' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_info_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3556' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-dapm.c' line='3557' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_ignore_suspend' mangled-name='snd_soc_dapm_ignore_suspend' filepath='sound/soc/soc-dapm.c' line='4728' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_ignore_suspend'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4728' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4729' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_volsw' mangled-name='snd_soc_dapm_get_volsw' filepath='sound/soc/soc-dapm.c' line='3297' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3297' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3298' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_pin_switch' mangled-name='snd_soc_dapm_get_pin_switch' filepath='sound/soc/soc-dapm.c' line='3574' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_pin_switch'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3574' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3575' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_pin_status' mangled-name='snd_soc_dapm_get_pin_status' filepath='sound/soc/soc-dapm.c' line='4705' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_pin_status'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4705' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4706' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_get_enum_double' mangled-name='snd_soc_dapm_get_enum_double' filepath='sound/soc/soc-dapm.c' line='3452' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_get_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='3452' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-dapm.c' line='3453' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_force_enable_pin' mangled-name='snd_soc_dapm_force_enable_pin' filepath='sound/soc/soc-dapm.c' line='4586' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_force_enable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4586' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4587' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_enable_pin' mangled-name='snd_soc_dapm_enable_pin' filepath='sound/soc/soc-dapm.c' line='4519' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_enable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4519' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4519' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_dapm_disable_pin' mangled-name='snd_soc_dapm_disable_pin' filepath='sound/soc/soc-dapm.c' line='4630' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_dapm_disable_pin'>
+        <parameter type-id='70d004a5' name='dapm' filepath='sound/soc/soc-dapm.c' line='4630' column='1'/>
+        <parameter type-id='80f4b756' name='pin' filepath='sound/soc/soc-dapm.c' line='4631' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dapm_regulator_event' mangled-name='dapm_regulator_event' filepath='sound/soc/soc-dapm.c' line='1336' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_regulator_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-dapm.c' line='1336' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='1337' column='1'/>
+        <parameter type-id='95e97e5e' name='event' filepath='sound/soc/soc-dapm.c' line='1337' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dapm_pinctrl_event' mangled-name='dapm_pinctrl_event' filepath='sound/soc/soc-dapm.c' line='1370' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_pinctrl_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-dapm.c' line='1370' column='1'/>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='1371' column='1'/>
+        <parameter type-id='95e97e5e' name='event' filepath='sound/soc/soc-dapm.c' line='1371' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='dapm_kcontrol_get_value' mangled-name='dapm_kcontrol_get_value' filepath='sound/soc/soc-dapm.c' line='533' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='dapm_kcontrol_get_value'>
+        <parameter type-id='7c459358' name='kcontrol' filepath='sound/soc/soc-dapm.c' line='533' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-devres.c' language='LANG_C89'>
+      <class-decl name='snd_dmaengine_pcm_config' size-in-bits='576' is-struct='yes' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='126' column='1' id='a1eb8a6b'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='prepare_slave_config' type-id='487dad0e' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='compat_request_channel' type-id='8eba4549' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='process' type-id='7e4306d7' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='compat_filter_fn' type-id='55f53546' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='dma_dev' type-id='fa0b179b' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='chan_names' type-id='35e20666' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pcm_hardware' type-id='d661a615' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='prealloc_buffer_size' type-id='f0981eeb' visibility='default' filepath='include/sound/dmaengine_pcm.h' line='141' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='a1eb8a6b' const='yes' id='7bd1ccce'/>
+      <pointer-type-def type-id='7bd1ccce' size-in-bits='64' id='cf458aec'/>
+      <pointer-type-def type-id='de10cebd' size-in-bits='64' id='8eba4549'/>
+      <pointer-type-def type-id='186b315c' size-in-bits='64' id='487dad0e'/>
+      <function-decl name='devm_snd_soc_register_component' mangled-name='devm_snd_soc_register_component' filepath='sound/soc/soc-devres.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_soc_register_component'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-devres.c' line='27' column='1'/>
+        <parameter type-id='f030c2b8' name='cmpnt_drv' filepath='sound/soc/soc-devres.c' line='28' column='1'/>
+        <parameter type-id='763d26a2' name='dai_drv' filepath='sound/soc/soc-devres.c' line='29' column='1'/>
+        <parameter type-id='95e97e5e' name='num_dai' filepath='sound/soc/soc-devres.c' line='29' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_snd_soc_register_card' mangled-name='devm_snd_soc_register_card' filepath='sound/soc/soc-devres.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_soc_register_card'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-devres.c' line='63' column='1'/>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-devres.c' line='63' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='devm_snd_dmaengine_pcm_register' mangled-name='devm_snd_dmaengine_pcm_register' filepath='sound/soc/soc-devres.c' line='100' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='devm_snd_dmaengine_pcm_register'>
+        <parameter type-id='fa0b179b' name='dev' filepath='sound/soc/soc-devres.c' line='100' column='1'/>
+        <parameter type-id='cf458aec' name='config' filepath='sound/soc/soc-devres.c' line='101' column='1'/>
+        <parameter type-id='f0981eeb' name='flags' filepath='sound/soc/soc-devres.c' line='101' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <pointer-type-def type-id='4b09229d' size-in-bits='64' id='d661a615'/>
+      <function-type size-in-bits='64' id='de10cebd'>
+        <parameter type-id='95316552'/>
+        <parameter type-id='06b2cd14'/>
+        <return type-id='27f3f5d8'/>
+      </function-type>
+      <function-type size-in-bits='64' id='186b315c'>
+        <parameter type-id='06b2cd14'/>
+        <parameter type-id='363a995e'/>
+        <parameter type-id='4f22192a'/>
+        <return type-id='95e97e5e'/>
+      </function-type>
+      <qualified-type-def type-id='eacd353c' const='yes' id='4b09229d'/>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-generic-dmaengine-pcm.c' language='LANG_C89'>
+      <function-decl name='snd_dmaengine_pcm_prepare_slave_config' mangled-name='snd_dmaengine_pcm_prepare_slave_config' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='58' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_dmaengine_pcm_prepare_slave_config'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='58' column='1'/>
+        <parameter type-id='363a995e' name='params' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='59' column='1'/>
+        <parameter type-id='4f22192a' name='slave_config' filepath='sound/soc/soc-generic-dmaengine-pcm.c' line='59' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-io.c' language='LANG_C89'>
+      <function-decl name='snd_soc_component_update_bits' mangled-name='snd_soc_component_update_bits' filepath='sound/soc/soc-io.c' line='109' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_update_bits'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='109' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='sound/soc/soc-io.c' line='110' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='sound/soc/soc-io.c' line='110' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_read' mangled-name='snd_soc_component_read' filepath='sound/soc/soc-io.c' line='23' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_read'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='23' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='24' column='1'/>
+        <parameter type-id='807869d3' name='val' filepath='sound/soc/soc-io.c' line='24' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_write' mangled-name='snd_soc_component_write' filepath='sound/soc/soc-io.c' line='63' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_write'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='63' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='64' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='sound/soc/soc-io.c' line='64' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_update_bits_async' mangled-name='snd_soc_component_update_bits_async' filepath='sound/soc/soc-io.c' line='145' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_update_bits_async'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='145' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <parameter type-id='f0981eeb' name='mask' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <parameter type-id='f0981eeb' name='val' filepath='sound/soc/soc-io.c' line='146' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_read32' mangled-name='snd_soc_component_read32' filepath='sound/soc/soc-io.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_read32'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='41' column='1'/>
+        <parameter type-id='f0981eeb' name='reg' filepath='sound/soc/soc-io.c' line='42' column='1'/>
+        <return type-id='f0981eeb'/>
+      </function-decl>
+      <function-decl name='snd_soc_component_async_complete' mangled-name='snd_soc_component_async_complete' filepath='sound/soc/soc-io.c' line='171' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_component_async_complete'>
+        <parameter type-id='807b7702' name='component' filepath='sound/soc/soc-io.c' line='171' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-jack.c' language='LANG_C89'>
+      <class-decl name='snd_soc_jack_pin' size-in-bits='256' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='648' column='1' id='ad7e730a'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='include/sound/soc.h' line='649' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pin' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='650' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='mask' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='651' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='invert' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='652' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_soc_jack_gpio' size-in-bits='1856' is-struct='yes' visibility='default' filepath='include/sound/soc.h' line='690' column='1' id='773e8ab8'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='gpio' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='691' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='idx' type-id='f0981eeb' visibility='default' filepath='include/sound/soc.h' line='692' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='gpiod_dev' type-id='fa0b179b' visibility='default' filepath='include/sound/soc.h' line='693' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='name' type-id='80f4b756' visibility='default' filepath='include/sound/soc.h' line='694' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='report' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='695' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='invert' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='696' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='debounce_time' type-id='95e97e5e' visibility='default' filepath='include/sound/soc.h' line='697' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='wake' type-id='b50a4934' visibility='default' filepath='include/sound/soc.h' line='698' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='jack' type-id='12a060a4' visibility='default' filepath='include/sound/soc.h' line='701' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='work' type-id='5ad6e0ef' visibility='default' filepath='include/sound/soc.h' line='702' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1472'>
+          <var-decl name='pm_notifier' type-id='9b08f7cd' visibility='default' filepath='include/sound/soc.h' line='703' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='desc' type-id='26760480' visibility='default' filepath='include/sound/soc.h' line='704' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='data' type-id='eaa32e2f' visibility='default' filepath='include/sound/soc.h' line='706' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='jack_status_check' type-id='b9b212f5' visibility='default' filepath='include/sound/soc.h' line='708' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='773e8ab8' size-in-bits='64' id='3c269e0e'/>
+      <pointer-type-def type-id='ad7e730a' size-in-bits='64' id='fcd78288'/>
+      <function-decl name='snd_soc_card_jack_new' mangled-name='snd_soc_card_jack_new' filepath='sound/soc/soc-jack.c' line='41' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_card_jack_new'>
+        <parameter type-id='3059cd0b' name='card' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='80f4b756' name='id' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='95e97e5e' name='type' filepath='sound/soc/soc-jack.c' line='41' column='1'/>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='42' column='1'/>
+        <parameter type-id='fcd78288' name='pins' filepath='sound/soc/soc-jack.c' line='42' column='1'/>
+        <parameter type-id='f0981eeb' name='num_pins' filepath='sound/soc/soc-jack.c' line='43' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_jack_report' mangled-name='snd_soc_jack_report' filepath='sound/soc/soc-jack.c' line='78' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_jack_report'>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='status' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <parameter type-id='95e97e5e' name='mask' filepath='sound/soc/soc-jack.c' line='78' column='1'/>
+        <return type-id='48b5725f'/>
+      </function-decl>
+      <function-decl name='snd_soc_jack_add_gpios' mangled-name='snd_soc_jack_add_gpios' filepath='sound/soc/soc-jack.c' line='350' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_jack_add_gpios'>
+        <parameter type-id='12a060a4' name='jack' filepath='sound/soc/soc-jack.c' line='350' column='1'/>
+        <parameter type-id='95e97e5e' name='count' filepath='sound/soc/soc-jack.c' line='350' column='1'/>
+        <parameter type-id='3c269e0e' name='gpios' filepath='sound/soc/soc-jack.c' line='351' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-ops.c' language='LANG_C89'>
+      <function-decl name='snd_soc_put_xr_sx' mangled-name='snd_soc_put_xr_sx' filepath='sound/soc/soc-ops.c' line='875' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='875' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='876' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw_sx' mangled-name='snd_soc_put_volsw_sx' filepath='sound/soc/soc-ops.c' line='408' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='408' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='409' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw_range' mangled-name='snd_soc_put_volsw_range' filepath='sound/soc/soc-ops.c' line='485' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='485' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='486' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_volsw' mangled-name='snd_soc_put_volsw' filepath='sound/soc/soc-ops.c' line='302' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='302' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='303' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_put_enum_double' mangled-name='snd_soc_put_enum_double' filepath='sound/soc/soc-ops.c' line='93' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_put_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='93' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='94' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_xr_sx' mangled-name='snd_soc_info_xr_sx' filepath='sound/soc/soc-ops.c' line='799' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='799' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='800' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw_sx' mangled-name='snd_soc_info_volsw_sx' filepath='sound/soc/soc-ops.c' line='216' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='216' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='217' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw_range' mangled-name='snd_soc_info_volsw_range' filepath='sound/soc/soc-ops.c' line='455' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='455' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='456' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_volsw' mangled-name='snd_soc_info_volsw' filepath='sound/soc/soc-ops.c' line='181' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='181' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='182' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_info_enum_double' mangled-name='snd_soc_info_enum_double' filepath='sound/soc/soc-ops.c' line='40' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_info_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='40' column='1'/>
+        <parameter type-id='0e291009' name='uinfo' filepath='sound/soc/soc-ops.c' line='41' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_xr_sx' mangled-name='snd_soc_get_xr_sx' filepath='sound/soc/soc-ops.c' line='826' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_xr_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='826' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='827' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw_sx' mangled-name='snd_soc_get_volsw_sx' filepath='sound/soc/soc-ops.c' line='364' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw_sx'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='364' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='365' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw_range' mangled-name='snd_soc_get_volsw_range' filepath='sound/soc/soc-ops.c' line='537' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw_range'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='537' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='538' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_volsw' mangled-name='snd_soc_get_volsw' filepath='sound/soc/soc-ops.c' line='242' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_volsw'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='242' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='243' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_get_enum_double' mangled-name='snd_soc_get_enum_double' filepath='sound/soc/soc-ops.c' line='59' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_get_enum_double'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='59' column='1'/>
+        <parameter type-id='144a5d4c' name='ucontrol' filepath='sound/soc/soc-ops.c' line='60' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_bytes_tlv_callback' mangled-name='snd_soc_bytes_tlv_callback' filepath='sound/soc/soc-ops.c' line='767' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_bytes_tlv_callback'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='767' column='1'/>
+        <parameter type-id='95e97e5e' name='op_flag' filepath='sound/soc/soc-ops.c' line='767' column='1'/>
+        <parameter type-id='f0981eeb' name='size' filepath='sound/soc/soc-ops.c' line='768' column='1'/>
+        <parameter type-id='807869d3' name='tlv' filepath='sound/soc/soc-ops.c' line='768' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_bytes_info_ext' mangled-name='snd_soc_bytes_info_ext' filepath='sound/soc/soc-ops.c' line='755' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_bytes_info_ext'>
+        <parameter type-id='7a5054b7' name='kcontrol' filepath='sound/soc/soc-ops.c' line='755' column='1'/>
+        <parameter type-id='0e291009' name='ucontrol' filepath='sound/soc/soc-ops.c' line='756' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-pcm.c' language='LANG_C89'>
+      <qualified-type-def type-id='eacd353c' const='yes' id='4b09229d'/>
+      <pointer-type-def type-id='4b09229d' size-in-bits='64' id='d661a615'/>
+      <function-decl name='snd_soc_set_runtime_hwparams' mangled-name='snd_soc_set_runtime_hwparams' filepath='sound/soc/soc-pcm.c' line='159' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_set_runtime_hwparams'>
+        <parameter type-id='06b2cd14' name='substream' filepath='sound/soc/soc-pcm.c' line='159' column='1'/>
+        <parameter type-id='d661a615' name='hw' filepath='sound/soc/soc-pcm.c' line='160' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-topology.c' language='LANG_C89'>
+      <class-decl name='snd_soc_tplg_widget_events' size-in-bits='128' is-struct='yes' visibility='default' filepath='include/sound/soc-topology.h' line='101' column='1' id='9cec1ba7'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='type' type-id='1dc6a898' visibility='default' filepath='include/sound/soc-topology.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='event_handler' type-id='af92413d' visibility='default' filepath='include/sound/soc-topology.h' line='103' column='1'/>
+        </data-member>
+      </class-decl>
+      <qualified-type-def type-id='9cec1ba7' const='yes' id='1a35d82e'/>
+      <pointer-type-def type-id='1a35d82e' size-in-bits='64' id='46c30e4c'/>
+      <function-decl name='snd_soc_tplg_component_remove' mangled-name='snd_soc_tplg_component_remove' filepath='sound/soc/soc-topology.c' line='2778' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_component_remove'>
+        <parameter type-id='807b7702' name='comp' filepath='sound/soc/soc-topology.c' line='2778' column='1'/>
+        <parameter type-id='19c2251e' name='index' filepath='sound/soc/soc-topology.c' line='2778' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_tplg_widget_bind_event' mangled-name='snd_soc_tplg_widget_bind_event' filepath='sound/soc/soc-topology.c' line='660' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_widget_bind_event'>
+        <parameter type-id='810606ec' name='w' filepath='sound/soc/soc-topology.c' line='660' column='1'/>
+        <parameter type-id='46c30e4c' name='events' filepath='sound/soc/soc-topology.c' line='661' column='1'/>
+        <parameter type-id='95e97e5e' name='num_events' filepath='sound/soc/soc-topology.c' line='662' column='1'/>
+        <parameter type-id='1dc6a898' name='event_type' filepath='sound/soc/soc-topology.c' line='662' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+      <function-decl name='snd_soc_tplg_component_load' mangled-name='snd_soc_tplg_component_load' filepath='sound/soc/soc-topology.c' line='2715' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_tplg_component_load'>
+        <parameter type-id='807b7702' name='comp' filepath='sound/soc/soc-topology.c' line='2715' column='1'/>
+        <parameter type-id='76e6e22f' name='ops' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <parameter type-id='fce0537d' name='fw' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <parameter type-id='19c2251e' name='id' filepath='sound/soc/soc-topology.c' line='2716' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/soc/soc-utils.c' language='LANG_C89'>
+      <function-decl name='snd_soc_params_to_bclk' mangled-name='snd_soc_params_to_bclk' filepath='sound/soc/soc-utils.c' line='42' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_soc_params_to_bclk'>
+        <parameter type-id='363a995e' name='params' filepath='sound/soc/soc-utils.c' line='42' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/usb/card.c' language='LANG_C89'>
+      <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='1536' id='70cd8d02'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='dc7e95e2' size-in-bits='23808' id='d6500b03'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='6ad85953' size-in-bits='18816' id='d6640cfa'>
+        <subrange length='12' type-id='7ff19f0f' id='84827bdc'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='bfbf7968' size-in-bits='4096' id='ab779f6c'>
+        <subrange length='2' type-id='7ff19f0f' id='52efc4ef'/>
+      </array-type-def>
+      <array-type-def dimensions='1' type-id='8f92235e' size-in-bits='1536' id='fe4ded8f'>
+        <subrange length='48' type-id='7ff19f0f' id='8f6d2a81'/>
+      </array-type-def>
+      <class-decl name='snd_usb_substream' size-in-bits='2048' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='122' column='1' id='bfbf7968'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='stream' type-id='d24a1720' visibility='default' filepath='sound/usb/card.h' line='123' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='sound/usb/card.h' line='124' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_substream' type-id='06b2cd14' visibility='default' filepath='sound/usb/card.h' line='125' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='direction' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='126' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='interface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='127' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='endpoint' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='128' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='cur_audiofmt' type-id='1102bd14' visibility='default' filepath='sound/usb/card.h' line='129' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='str_pd' type-id='ec0e067e' visibility='default' filepath='sound/usb/card.h' line='130' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='pcm_format' type-id='67fa9bd5' visibility='default' filepath='sound/usb/card.h' line='131' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='132' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='channels_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='133' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='cur_rate' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='134' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='period_bytes' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='135' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='period_frames' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='136' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='buffer_periods' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='137' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='altset_idx' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='138' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='txfr_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='139' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='tx_length_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='140' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='736'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='141' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='pkt_offset_adj' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='142' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='800'>
+          <var-decl name='stream_offset_adj' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='143' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='running' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='145' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='864'>
+          <var-decl name='hwptr_done' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='147' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='896'>
+          <var-decl name='transfer_done' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='148' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='frame_limit' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='149' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='ep_num' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='152' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='data_endpoint' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='153' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='sync_endpoint' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='154' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='155' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='need_setup_ep' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='156' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1224'>
+          <var-decl name='need_setup_fmt' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='157' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1248'>
+          <var-decl name='speed' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='158' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1280'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='160' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='num_formats' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='161' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='fmt_list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='162' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='rate_list' type-id='f5f6e55e' visibility='default' filepath='sound/usb/card.h' line='163' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='sound/usb/card.h' line='164' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='last_frame_number' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='166' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='last_delay' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='167' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1760'>
+          <var-decl name='dsd_dop' type-id='50842758' visibility='default' filepath='sound/usb/card.h' line='173' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='trigger_tstamp_pending_update' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='175' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='media_ctl' type-id='74d5ef65' visibility='default' filepath='sound/usb/card.h' line='176' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1984'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='178' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_stream' size-in-bits='4416' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='181' column='1' id='3921bd52'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='d86551c2' visibility='default' filepath='sound/usb/card.h' line='182' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pcm' type-id='4c9f335b' visibility='default' filepath='sound/usb/card.h' line='183' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='pcm_index' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='184' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='160'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='185' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='substream' type-id='ab779f6c' visibility='default' filepath='sound/usb/card.h' line='186' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='4288'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='187' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_audio' size-in-bits='2560' is-struct='yes' visibility='default' filepath='sound/usb/usbaudio.h' line='24' column='1' id='f4c3b244'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='dev' type-id='25e60cb2' visibility='default' filepath='sound/usb/usbaudio.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='card' type-id='52704eb7' visibility='default' filepath='sound/usb/usbaudio.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='pm_intf' type-id='8bf48c31' visibility='default' filepath='sound/usb/usbaudio.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='usb_id' type-id='19c2251e' visibility='default' filepath='sound/usb/usbaudio.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='mutex' type-id='925167dc' visibility='default' filepath='sound/usb/usbaudio.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='system_suspend' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='608'>
+          <var-decl name='active' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='shutdown' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='672'>
+          <var-decl name='usage_count' type-id='49178f86' visibility='default' filepath='sound/usb/usbaudio.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='shutdown_wait' type-id='b5ab048f' visibility='default' filepath='sound/usb/usbaudio.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='txfr_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='tx_length_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2'>
+          <var-decl name='setup_fmt_after_resume_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/usbaudio.h' line='38' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='928'>
+          <var-decl name='num_interfaces' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='39' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='960'>
+          <var-decl name='num_suspended_intf' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='40' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='992'>
+          <var-decl name='sample_rate_read_error' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='41' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1024'>
+          <var-decl name='badd_profile' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='43' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='pcm_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='45' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='ep_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1344'>
+          <var-decl name='pcm_devs' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1408'>
+          <var-decl name='midi_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='mixer_list' type-id='72f469ec' visibility='default' filepath='sound/usb/usbaudio.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='setup' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='53' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1696'>
+          <var-decl name='autoclock' type-id='b50a4934' visibility='default' filepath='sound/usb/usbaudio.h' line='54' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1704'>
+          <var-decl name='keep_iface' type-id='b50a4934' visibility='default' filepath='sound/usb/usbaudio.h' line='55' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1728'>
+          <var-decl name='ctrl_intf' type-id='2ac920d2' visibility='default' filepath='sound/usb/usbaudio.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1792'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='sound/usb/usbaudio.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ctl_intf_media_devnode' type-id='8114c6c9' visibility='default' filepath='sound/usb/usbaudio.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1920'>
+          <var-decl name='dev_lock' type-id='925167dc' visibility='default' filepath='sound/usb/usbaudio.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2176'>
+          <var-decl name='card_num' type-id='95e97e5e' visibility='default' filepath='sound/usb/usbaudio.h' line='63' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2240'>
+          <var-decl name='disconnect_cb' type-id='9272847f' visibility='default' filepath='sound/usb/usbaudio.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2304'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='sound/usb/usbaudio.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2368'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='sound/usb/usbaudio.h' line='67' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2432'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='sound/usb/usbaudio.h' line='68' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='2496'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='sound/usb/usbaudio.h' line='69' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='audioformat' size-in-bits='832' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='14' column='1' id='3abbb22e'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='15' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='formats' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='16' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='channels' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='17' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='224'>
+          <var-decl name='fmt_type' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='18' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='fmt_bits' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='19' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='frame_size' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='20' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='21' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='352'>
+          <var-decl name='altsetting' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='22' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='360'>
+          <var-decl name='altset_idx' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='23' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='368'>
+          <var-decl name='attributes' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='24' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='376'>
+          <var-decl name='endpoint' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='25' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='ep_attr' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='26' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='392'>
+          <var-decl name='datainterval' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='27' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='400'>
+          <var-decl name='protocol' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='28' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='416'>
+          <var-decl name='maxpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='rates' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='480'>
+          <var-decl name='rate_min' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='rate_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='544'>
+          <var-decl name='nr_rates' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='rate_table' type-id='807869d3' visibility='default' filepath='sound/usb/card.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='640'>
+          <var-decl name='clock' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='34' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='704'>
+          <var-decl name='chmap' type-id='a149768b' visibility='default' filepath='sound/usb/card.h' line='35' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='768'>
+          <var-decl name='dsd_dop' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='36' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='776'>
+          <var-decl name='dsd_bitrev' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='37' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='784'>
+          <var-decl name='dsd_raw' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='38' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_power_domain' size-in-bits='96' is-struct='yes' visibility='default' filepath='sound/usb/power.h' line='5' column='1' id='f709b458'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='pd_id' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='6' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='pd_d1d0_rec' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='7' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='pd_d2d0_rec' type-id='95e97e5e' visibility='default' filepath='sound/usb/power.h' line='8' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_endpoint' size-in-bits='44800' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='56' column='1' id='ae79630f'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='chip' type-id='d86551c2' visibility='default' filepath='sound/usb/card.h' line='57' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='use_count' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='59' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='96'>
+          <var-decl name='ep_num' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='60' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='type' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='61' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='flags' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='62' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='prepare_data_urb' type-id='5ae15890' visibility='default' filepath='sound/usb/card.h' line='64' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='retire_data_urb' type-id='5ae15890' visibility='default' filepath='sound/usb/card.h' line='66' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='384'>
+          <var-decl name='data_subs' type-id='6b1642ae' visibility='default' filepath='sound/usb/card.h' line='69' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='448'>
+          <var-decl name='sync_master' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='70' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='512'>
+          <var-decl name='sync_slave' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='71' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='576'>
+          <var-decl name='urb' type-id='d6500b03' visibility='default' filepath='sound/usb/card.h' line='73' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='24384'>
+          <var-decl name='next_packet' type-id='d6640cfa' visibility='default' filepath='sound/usb/card.h' line='78' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43200'>
+          <var-decl name='next_packet_read_pos' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43232'>
+          <var-decl name='next_packet_write_pos' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='79' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43264'>
+          <var-decl name='ready_playback_urbs' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='80' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43392'>
+          <var-decl name='nurbs' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='82' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43456'>
+          <var-decl name='active_mask' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='83' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43520'>
+          <var-decl name='unlink_mask' type-id='7359adad' visibility='default' filepath='sound/usb/card.h' line='84' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43584'>
+          <var-decl name='syncbuf' type-id='26a90f95' visibility='default' filepath='sound/usb/card.h' line='85' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43648'>
+          <var-decl name='sync_dma' type-id='cf29c9b3' visibility='default' filepath='sound/usb/card.h' line='86' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43712'>
+          <var-decl name='pipe' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='88' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43744'>
+          <var-decl name='freqn' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='89' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43776'>
+          <var-decl name='freqm' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='90' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43808'>
+          <var-decl name='freqshift' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='91' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43840'>
+          <var-decl name='freqmax' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='92' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43872'>
+          <var-decl name='phase' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='93' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43904'>
+          <var-decl name='maxpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='94' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43936'>
+          <var-decl name='maxframesize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='95' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='43968'>
+          <var-decl name='max_urb_frames' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='96' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44000'>
+          <var-decl name='curpacksize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='97' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44032'>
+          <var-decl name='curframesize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='98' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44064'>
+          <var-decl name='syncmaxsize' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='99' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='fill_max' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='100' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1'>
+          <var-decl name='tenor_fb_quirk' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='101' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44128'>
+          <var-decl name='datainterval' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='102' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44160'>
+          <var-decl name='syncinterval' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='103' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44192'>
+          <var-decl name='silence_value' type-id='002ac4a6' visibility='default' filepath='sound/usb/card.h' line='104' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44224'>
+          <var-decl name='stride' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='105' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44256'>
+          <var-decl name='iface' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44288'>
+          <var-decl name='altsetting' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='106' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44320'>
+          <var-decl name='skip_packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='107' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44352'>
+          <var-decl name='is_implicit_feedback' type-id='b50a4934' visibility='default' filepath='sound/usb/card.h' line='109' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44384'>
+          <var-decl name='lock' type-id='fb4018a0' visibility='default' filepath='sound/usb/card.h' line='111' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44416'>
+          <var-decl name='list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='112' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44544'>
+          <var-decl name='android_kabi_reserved1' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='114' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44608'>
+          <var-decl name='android_kabi_reserved2' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='115' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44672'>
+          <var-decl name='android_kabi_reserved3' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='116' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='44736'>
+          <var-decl name='android_kabi_reserved4' type-id='91ce1af9' visibility='default' filepath='sound/usb/card.h' line='117' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_urb_ctx' size-in-bits='1984' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='45' column='1' id='dc7e95e2'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='urb' type-id='ab85b8f2' visibility='default' filepath='sound/usb/card.h' line='46' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='buffer_size' type-id='f0981eeb' visibility='default' filepath='sound/usb/card.h' line='47' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='128'>
+          <var-decl name='subs' type-id='6b1642ae' visibility='default' filepath='sound/usb/card.h' line='48' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='192'>
+          <var-decl name='ep' type-id='d59ce2e7' visibility='default' filepath='sound/usb/card.h' line='49' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='256'>
+          <var-decl name='index' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='50' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='288'>
+          <var-decl name='packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='51' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='320'>
+          <var-decl name='packet_size' type-id='70cd8d02' visibility='default' filepath='sound/usb/card.h' line='52' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1856'>
+          <var-decl name='ready_list' type-id='72f469ec' visibility='default' filepath='sound/usb/card.h' line='53' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='snd_usb_packet_info' size-in-bits='1568' is-struct='yes' visibility='default' filepath='sound/usb/card.h' line='75' column='1' id='6ad85953'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='packet_size' type-id='fe4ded8f' visibility='default' filepath='sound/usb/card.h' line='76' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1536'>
+          <var-decl name='packets' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='77' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='__anonymous_struct__' size-in-bits='96' is-struct='yes' is-anonymous='yes' visibility='default' filepath='sound/usb/card.h' line='169' column='1' id='50842758'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='marker' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='170' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='32'>
+          <var-decl name='channel' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='171' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='byte_idx' type-id='95e97e5e' visibility='default' filepath='sound/usb/card.h' line='172' column='1'/>
+        </data-member>
+      </class-decl>
+      <class-decl name='media_ctl' size-in-bits='3968' is-struct='yes' visibility='default' filepath='sound/usb/media.h' line='28' column='1' id='b8cdc165'>
+        <data-member access='public' layout-offset-in-bits='0'>
+          <var-decl name='media_dev' type-id='e2929c1c' visibility='default' filepath='sound/usb/media.h' line='29' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='64'>
+          <var-decl name='media_entity' type-id='889856f7' visibility='default' filepath='sound/usb/media.h' line='30' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1088'>
+          <var-decl name='intf_devnode' type-id='8114c6c9' visibility='default' filepath='sound/usb/media.h' line='31' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1152'>
+          <var-decl name='intf_link' type-id='b4de78ea' visibility='default' filepath='sound/usb/media.h' line='32' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1216'>
+          <var-decl name='media_pad' type-id='48b94b91' visibility='default' filepath='sound/usb/media.h' line='33' column='1'/>
+        </data-member>
+        <data-member access='public' layout-offset-in-bits='1664'>
+          <var-decl name='media_pipe' type-id='2783658a' visibility='default' filepath='sound/usb/media.h' line='34' column='1'/>
+        </data-member>
+      </class-decl>
+      <pointer-type-def type-id='3abbb22e' size-in-bits='64' id='1102bd14'/>
+      <pointer-type-def type-id='b8cdc165' size-in-bits='64' id='74d5ef65'/>
+      <pointer-type-def type-id='09098b3b' size-in-bits='64' id='a149768b'/>
+      <pointer-type-def type-id='f4c3b244' size-in-bits='64' id='d86551c2'/>
+      <pointer-type-def type-id='d86551c2' size-in-bits='64' id='8f7ff038'/>
+      <pointer-type-def type-id='ae79630f' size-in-bits='64' id='d59ce2e7'/>
+      <pointer-type-def type-id='f709b458' size-in-bits='64' id='ec0e067e'/>
+      <pointer-type-def type-id='3921bd52' size-in-bits='64' id='d24a1720'/>
+      <pointer-type-def type-id='bfbf7968' size-in-bits='64' id='6b1642ae'/>
+      <pointer-type-def type-id='895d5e13' size-in-bits='64' id='9272847f'/>
+      <pointer-type-def type-id='74f4b006' size-in-bits='64' id='5ae15890'/>
+      <function-decl name='find_snd_usb_substream' mangled-name='find_snd_usb_substream' filepath='sound/usb/card.c' line='222' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='find_snd_usb_substream'>
+        <parameter type-id='f0981eeb' name='card_num' filepath='sound/usb/card.c' line='222' column='1'/>
+        <parameter type-id='f0981eeb' name='pcm_idx' filepath='sound/usb/card.c' line='223' column='1'/>
+        <parameter type-id='f0981eeb' name='direction' filepath='sound/usb/card.c' line='223' column='1'/>
+        <parameter type-id='8f7ff038' name='uchip' filepath='sound/usb/card.c' line='224' column='1'/>
+        <parameter type-id='9272847f' name='disconnect_cb' filepath='sound/usb/card.c' line='224' column='1'/>
+        <return type-id='6b1642ae'/>
+      </function-decl>
+      <function-type size-in-bits='64' id='895d5e13'>
+        <parameter type-id='d86551c2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+      <function-type size-in-bits='64' id='74f4b006'>
+        <parameter type-id='6b1642ae'/>
+        <parameter type-id='ab85b8f2'/>
+        <return type-id='48b5725f'/>
+      </function-type>
+    </abi-instr>
+    <abi-instr address-size='64' path='sound/usb/pcm.c' language='LANG_C89'>
+      <function-decl name='snd_usb_enable_audio_stream' mangled-name='snd_usb_enable_audio_stream' filepath='sound/usb/pcm.c' line='669' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='snd_usb_enable_audio_stream'>
+        <parameter type-id='6b1642ae' name='subs' filepath='sound/usb/pcm.c' line='669' column='1'/>
+        <parameter type-id='95e97e5e' name='datainterval' filepath='sound/usb/pcm.c' line='670' column='1'/>
+        <parameter type-id='b50a4934' name='enable' filepath='sound/usb/pcm.c' line='670' column='1'/>
+        <return type-id='95e97e5e'/>
+      </function-decl>
+    </abi-instr>
+  </abi-corpus>
+</abi-corpus-group>
+
+<!--
+     libabigail: abidw: 2.0.0SOONG BUILD NUMBER PLACEHOLDER
+     built with: clang: Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee)
+-->
diff --git a/android/abi_gki_aarch64_db845c b/android/abi_gki_aarch64_db845c
new file mode 100644
index 0000000..b6f1ee1
--- /dev/null
+++ b/android/abi_gki_aarch64_db845c
@@ -0,0 +1,1434 @@
+[abi_symbol_list]
+# commonly used symbols
+  add_uevent_var
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run4
+  bpf_trace_run5
+  bus_register
+  bus_unregister
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  __cfi_slowpath
+  __check_object_size
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_prepare
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_fixed_rate_ops
+  clk_get
+  clk_get_rate
+  clk_hw_get_parent
+  clk_hw_get_rate
+  clk_hw_register
+  clk_hw_unregister
+  clk_prepare
+  clk_put
+  clk_round_rate
+  clk_set_rate
+  clk_sync_state
+  clk_unprepare
+  complete
+  complete_all
+  completion_done
+  __const_udelay
+  consume_skb
+  _copy_from_iter_full
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  crc32_le
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_u32
+  debugfs_create_x32
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_get_regmap
+  device_for_each_child
+  device_init_wakeup
+  device_property_read_u32_array
+  device_register
+  device_set_wakeup_capable
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_get
+  devm_clk_hw_register
+  devm_gpiod_get
+  devm_gpiod_get_optional
+  devm_ioremap
+  devm_ioremap_resource
+  devm_ioremap_wc
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_memremap
+  devm_of_clk_add_hw_provider
+  __devm_of_phy_provider_register
+  devm_of_platform_populate
+  devm_phy_create
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  devm_regmap_field_alloc
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_register
+  devm_request_threaded_irq
+  __devm_reset_control_get
+  devm_reset_controller_register
+  devm_watchdog_register_device
+  _dev_notice
+  dev_pm_domain_attach_by_name
+  dev_pm_domain_detach
+  dev_pm_genpd_set_performance_state
+  dev_pm_opp_add
+  dev_pm_opp_get_level
+  dev_pm_opp_get_opp_count
+  dev_set_name
+  _dev_warn
+  disable_irq
+  divider_get_val
+  divider_recalc_rate
+  divider_round_rate_parent
+  dma_alloc_attrs
+  dma_buf_export
+  dma_direct_map_page
+  dma_direct_map_sg
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_free_attrs
+  dmam_alloc_attrs
+  dma_release_channel
+  dma_request_chan
+  dma_set_coherent_mask
+  dma_set_mask
+  do_SAK
+  driver_register
+  driver_unregister
+  drm_add_edid_modes
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_update_edid_property
+  drm_dev_printk
+  drm_err
+  drm_hdmi_avi_infoframe_from_display_mode
+  drm_helper_probe_single_connector_modes
+  drm_mode_vrefresh
+  enable_irq
+  eth_validate_addr
+  event_triggers_call
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_workqueue
+  free_irq
+  __free_pages
+  generic_handle_irq
+  generic_mii_ioctl
+  get_device
+  get_random_bytes
+  gpiochip_add_data_with_key
+  gpiochip_add_pin_range
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_remove
+  gpiod_set_value_cansleep
+  handle_level_irq
+  handle_nested_irq
+  hdmi_audio_infoframe_init
+  i2c_add_adapter
+  i2c_del_adapter
+  idr_alloc
+  idr_alloc_cyclic
+  idr_destroy
+  idr_find
+  idr_get_next
+  idr_remove
+  ieee80211_get_channel_khz
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  iommu_present
+  __ioread32_copy
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  irq_chip_mask_parent
+  irq_chip_set_type_parent
+  irq_chip_unmask_parent
+  __irq_domain_add
+  irq_domain_free_irqs_common
+  irq_domain_remove
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_find_matching_fwspec
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_irq_wake
+  irq_to_desc
+  jiffies
+  jiffies_to_usecs
+  kfree
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmemdup
+  kstrdup
+  kthread_create_on_node
+  ktime_get
+  ktime_get_mono_fast_ns
+  __list_add_valid
+  __list_del_entry_valid
+  mbox_client_txdone
+  mbox_free_channel
+  mbox_request_channel
+  mbox_send_message
+  memcpy
+  __memcpy_fromio
+  memmove
+  memremap
+  memset
+  memstart_addr
+  mii_ethtool_gset
+  mii_nway_restart
+  misc_deregister
+  misc_register
+  mod_timer
+  module_layout
+  __msecs_to_jiffies
+  msleep
+  msm_pinctrl_probe
+  msm_pinctrl_remove
+  __mutex_init
+  mutex_lock
+  mutex_unlock
+  napi_complete_done
+  napi_disable
+  __napi_schedule
+  napi_schedule_prep
+  __netdev_alloc_skb
+  netdev_info
+  netdev_warn
+  netif_napi_add
+  netif_napi_del
+  nvmem_cell_get
+  nvmem_cell_put
+  nvmem_cell_read
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_hw_provider
+  of_clk_del_provider
+  of_clk_hw_onecell_get
+  of_clk_hw_simple_get
+  of_clk_set_defaults
+  of_device_get_match_data
+  of_device_is_compatible
+  of_device_uevent_modalias
+  of_find_device_by_node
+  of_find_property
+  of_fwnode_ops
+  of_genpd_add_provider_onecell
+  of_genpd_del_provider
+  of_get_child_by_name
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_graph_get_remote_node
+  of_iomap
+  of_irq_find_parent
+  of_match_device
+  of_match_node
+  of_parse_phandle
+  of_parse_phandle_with_fixed_args
+  of_phy_simple_xlate
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_reserved_mem_lookup
+  param_ops_bool
+  param_ops_uint
+  __pci_register_driver
+  pci_unregister_driver
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pinconf_generic_dt_node_to_map
+  pinctrl_dev_get_drvdata
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_utils_free_map
+  platform_bus_type
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_resource
+  platform_get_resource_byname
+  pm_genpd_add_subdomain
+  pm_genpd_init
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  pskb_expand_head
+  put_device
+  __put_task_struct
+  qcom_smem_state_register
+  qcom_smem_state_unregister
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  register_reboot_notifier
+  __register_rpmsg_driver
+  register_shrinker
+  regmap_bulk_read
+  regmap_bulk_write
+  regmap_field_read
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_bulk_enable
+  regulator_disable
+  regulator_enable
+  regulator_set_load
+  regulator_set_voltage
+  release_firmware
+  remap_pfn_range
+  request_firmware
+  request_firmware_into_buf
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  reset_control_reset
+  rpmsg_register_device
+  rpmsg_send
+  rpmsg_unregister_device
+  rproc_add
+  rproc_add_subdev
+  rproc_alloc
+  rproc_del
+  rproc_free
+  rproc_remove_subdev
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  sg_free_table
+  sg_init_table
+  sg_next
+  simple_read_from_buffer
+  single_open
+  single_release
+  skb_clone
+  skb_dequeue
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_purge
+  skb_queue_tail
+  skb_trim
+  snprintf
+  sort
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncpy
+  __sw_hweight32
+  __sw_hweight64
+  synchronize_irq
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  system_wq
+  thermal_cooling_device_unregister
+  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
+  trace_raw_output_prep
+  trace_seq_printf
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  uart_add_one_port
+  uart_get_baud_rate
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __ubsan_handle_cfi_check_fail_abort
+  __udelay
+  unregister_reboot_notifier
+  unregister_rpmsg_driver
+  usb_deregister
+  usb_disabled
+  usbnet_disconnect
+  usbnet_get_endpoints
+  usbnet_get_msglevel
+  usbnet_get_stats64
+  usbnet_link_change
+  usbnet_nway_reset
+  usbnet_open
+  usbnet_probe
+  usbnet_read_cmd
+  usbnet_read_cmd_nopm
+  usbnet_resume
+  usbnet_set_msglevel
+  usbnet_skb_return
+  usbnet_start_xmit
+  usbnet_stop
+  usbnet_suspend
+  usbnet_tx_timeout
+  usbnet_update_max_qlen
+  usbnet_write_cmd
+  usbnet_write_cmd_async
+  usbnet_write_cmd_nopm
+  usb_register_driver
+  usleep_range
+  vmap
+  vunmap
+  wait_for_completion_timeout
+  __wake_up
+  wake_up_process
+  __warn_printk
+  watchdog_init_timeout
+
+# required by apr.ko
+  rpmsg_trysend
+
+# required by arm_smmu.ko
+  alloc_io_pgtable_ops
+  amba_bustype
+  bus_set_iommu
+  device_link_add
+  device_match_fwnode
+  devm_free_irq
+  driver_find_device
+  free_io_pgtable_ops
+  generic_device_group
+  iommu_alloc_resv_region
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_group_get_for_dev
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_put_dma_cookie
+  of_dma_is_coherent
+  param_ops_int
+  pci_bus_type
+  pci_device_group
+
+# required by asix.ko
+  eth_mac_addr
+  eth_platform_get_mac_address
+  genphy_resume
+  mdiobus_alloc_size
+  mdiobus_free
+  __mdiobus_register
+  mdiobus_unregister
+  mii_check_media
+  mii_link_ok
+  netdev_err
+  phy_connect
+  phy_disconnect
+  phy_ethtool_get_link_ksettings
+  phy_ethtool_nway_reset
+  phy_ethtool_set_link_ksettings
+  phy_mii_ioctl
+  phy_print_status
+  phy_start
+  phy_stop
+  skb_copy_expand
+  usbnet_change_mtu
+  usbnet_get_drvinfo
+  usbnet_get_link
+  usbnet_get_link_ksettings
+  usbnet_set_link_ksettings
+  usbnet_unlink_rx_urbs
+
+# required by ath.ko
+  freq_reg_info
+  reg_initiator_name
+  wiphy_apply_custom_regulatory
+
+# required by ath10k_core.ko
+  bcmp
+  cancel_delayed_work
+  cfg80211_calculate_bitrate
+  cfg80211_find_elem_match
+  cfg80211_find_vendor_elem
+  cfg80211_get_bss
+  cfg80211_put_bss
+  device_get_mac_address
+  device_set_wakeup_enable
+  firmware_request_nowarn
+  idr_for_each
+  ieee80211_alloc_hw_nm
+  ieee80211_beacon_get_template
+  ieee80211_beacon_get_tim
+  ieee80211_beacon_loss
+  ieee80211_bss_get_elem
+  ieee80211_channel_to_freq_khz
+  ieee80211_connection_loss
+  ieee80211_csa_finish
+  ieee80211_csa_is_complete
+  ieee80211_csa_update_counter
+  ieee80211_find_sta
+  ieee80211_find_sta_by_ifaddr
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_hdrlen
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_iterate_stations_atomic
+  ieee80211_iter_chan_contexts_atomic
+  ieee80211_manage_rx_ba_offl
+  ieee80211_next_txq
+  ieee80211_proberesp_get
+  ieee80211_queue_delayed_work
+  ieee80211_queue_work
+  ieee80211_radar_detected
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_report_low_ack
+  ieee80211_restart_hw
+  ieee80211_rx_napi
+  ieee80211_scan_completed
+  __ieee80211_schedule_txq
+  ieee80211_sta_register_airtime
+  ieee80211_stop_queue
+  ieee80211_stop_queues
+  ieee80211_tdls_oper_request
+  ieee80211_tx_dequeue
+  ieee80211_txq_get_depth
+  ieee80211_txq_may_transmit
+  ieee80211_txq_schedule_start
+  ieee80211_tx_rate_update
+  ieee80211_tx_status
+  ieee80211_tx_status_irqsafe
+  ieee80211_unregister_hw
+  ieee80211_wake_queue
+  ieee80211_wake_queues
+  init_dummy_netdev
+  __kfifo_alloc
+  __kfifo_free
+  __local_bh_enable_ip
+  param_ops_ulong
+  regulatory_hint
+  rfc1042_header
+  skb_copy
+  skb_realloc_headroom
+  strlcat
+  strscpy
+  __sw_hweight16
+  __sw_hweight8
+  synchronize_net
+  sysfs_create_link
+  sysfs_remove_link
+  thermal_cooling_device_register
+  wiphy_read_of_freq_limits
+  wiphy_to_ieee80211_hw
+
+# required by ath10k_pci.ko
+  dma_direct_sync_single_for_cpu
+  pci_clear_master
+  pci_disable_device
+  pci_disable_msi
+  pcie_capability_read_word
+  pcie_capability_write_word
+  pci_enable_device
+  pci_enable_msi
+  pci_iomap
+  pci_read_config_dword
+  pci_release_region
+  pci_request_region
+  pci_set_master
+  pci_write_config_dword
+
+# required by ath10k_snoc.ko
+  devm_regulator_get_optional
+  kernel_connect
+
+# required by ax88179_178a.ko
+  ethtool_op_get_link
+  mii_ethtool_get_link_ksettings
+  mii_ethtool_set_link_ksettings
+  netif_carrier_on
+
+# required by clk-qcom.ko
+  __clk_determine_rate
+  __clk_get_name
+  clk_hw_get_flags
+  clk_hw_get_name
+  clk_hw_get_num_parents
+  clk_hw_get_parent_by_index
+  clk_hw_round_rate
+  __clk_is_enabled
+  __clk_mux_determine_rate_closest
+  divider_ro_round_rate_parent
+  of_find_node_opts_by_path
+  of_prop_next_u32
+  pm_genpd_remove_subdomain
+
+# required by clk-rpmh.ko
+  clk_hw_is_prepared
+
+# required by clk-scmi.ko
+  clk_hw_set_rate_range
+  scmi_driver_register
+  scmi_driver_unregister
+
+# required by cqhci.ko
+  devm_blk_ksm_init
+  dmam_free_coherent
+  mmc_cqe_request_done
+
+# required by deferred-free-helper.ko
+  freezing_slow_path
+  __refrigerator
+  system_freezing_cnt
+
+# required by extcon-usb-gpio.ko
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  extcon_set_state_sync
+  gpiod_get_value_cansleep
+  gpiod_set_debounce
+  gpiod_to_irq
+  system_power_efficient_wq
+
+# required by fastrpc.ko
+  dma_buf_attach
+  dma_buf_detach
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_map_attachment
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_get_sgtable_attrs
+  dma_mmap_attrs
+  find_vma
+  wait_for_completion_interruptible
+
+# required by i2c-qcom-geni.ko
+  i2c_get_dma_safe_msg_buf
+  i2c_put_dma_safe_msg_buf
+  of_machine_is_compatible
+
+# required by i2c-qup.ko
+  __usecs_to_jiffies
+
+# required by lt9611.ko
+  __devm_regmap_init_i2c
+  dev_printk
+  drm_bridge_add
+  drm_bridge_remove
+  drm_do_get_edid
+  i2c_del_driver
+  i2c_register_driver
+  mipi_dsi_attach
+  mipi_dsi_detach
+  mipi_dsi_device_register_full
+  mipi_dsi_device_unregister
+  of_find_mipi_dsi_host_by_node
+  regmap_multi_reg_write
+
+# required by msm.ko
+  __bitmap_andnot
+  __bitmap_weight
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run6
+  bpf_trace_run8
+  clk_get_parent
+  clk_hw_register_divider
+  clk_hw_register_fixed_factor
+  clk_hw_register_mux
+  clk_hw_unregister_divider
+  clk_hw_unregister_fixed_factor
+  clk_hw_unregister_mux
+  clk_set_parent
+  clk_unregister
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_unbind_all
+  _ctype
+  debugfs_create_bool
+  debugfs_create_u64
+  del_timer
+  devfreq_recommended_opp
+  devfreq_resume_device
+  devfreq_suspend_device
+  device_find_child
+  devm_clk_register
+  devm_devfreq_add_device
+  devm_ioremap_nocache
+  devm_regulator_get_exclusive
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_exact
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_put
+  dev_pm_opp_set_supported_hw
+  dma_buf_vunmap
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_signal
+  dma_fence_wait_timeout
+  dma_resv_add_excl_fence
+  dma_resv_add_shared_fence
+  dma_resv_reserve_shared
+  dma_resv_wait_timeout_rcu
+  drm_atomic_get_private_obj_state
+  drm_atomic_helper_check
+  drm_atomic_helper_check_plane_state
+  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_crtc_destroy_state
+  drm_atomic_helper_crtc_destroy_state
+  __drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_duplicate_state
+  __drm_atomic_helper_crtc_reset
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_dirtyfb
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_page_flip
+  __drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_destroy_state
+  __drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  __drm_atomic_helper_private_obj_duplicate_state
+  drm_atomic_helper_resume
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_suspend
+  drm_atomic_helper_update_plane
+  drm_atomic_private_obj_fini
+  drm_atomic_private_obj_init
+  __drm_atomic_state_free
+  drm_bridge_attach
+  drm_calc_vbltimestamp_from_scanoutpos
+  drm_compat_ioctl
+  drm_connector_has_possible_encoder
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_set_max_vblank_count
+  drm_crtc_vblank_get
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_crtc_vblank_put
+  drm_crtc_vblank_reset
+  drm_dbg
+  drm_debug
+  drm_debugfs_create_files
+  drm_detect_hdmi_monitor
+  drm_dev_alloc
+  drm_dev_dbg
+  drm_dev_put
+  drm_dev_register
+  drm_dev_unregister
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_bw_code_to_link_rate
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_dp_get_adjust_request_pre_emphasis
+  drm_dp_get_adjust_request_voltage
+  drm_dp_link_configure
+  drm_dp_link_power_down
+  drm_dp_link_power_up
+  drm_dp_link_probe
+  drm_dp_link_rate_to_bw_code
+  drm_dp_link_train_channel_eq_delay
+  drm_dp_link_train_clock_recovery_delay
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_flip_work_cleanup
+  drm_flip_work_commit
+  drm_flip_work_init
+  drm_flip_work_queue
+  drm_format_info
+  drm_framebuffer_init
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_fb_get_obj
+  drm_gem_fb_prepare_fb
+  drm_gem_free_mmap_offset
+  drm_gem_get_pages
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put
+  drm_gem_object_put_unlocked
+  drm_gem_object_release
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_private_object_init
+  drm_gem_put_pages
+  drm_gem_vm_close
+  drm_gem_vm_open
+  drm_get_edid
+  drm_get_format_info
+  drm_get_format_name
+  drm_handle_vblank
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_ioctl
+  drm_irq_install
+  drm_irq_uninstall
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  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_debug_printmodeline
+  drm_mode_destroy
+  drm_mode_duplicate
+  drm_mode_object_find
+  drm_mode_object_put
+  drm_modeset_lock
+  drm_modeset_lock_all
+  drm_modeset_lock_init
+  drm_modeset_unlock
+  drm_modeset_unlock_all
+  drm_object_attach_property
+  drm_of_component_match_add
+  drm_open
+  drm_panel_attach
+  drm_panel_detach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_prepare
+  drm_panel_unprepare
+  drm_plane_cleanup
+  drm_plane_create_rotation_property
+  drm_plane_create_zpos_property
+  drm_plane_enable_fb_damage_clips
+  drm_poll
+  drm_prime_gem_destroy
+  drm_prime_pages_to_sg
+  drm_prime_sg_to_page_addr_arrays
+  drm_printf
+  __drm_printfn_info
+  __drm_printfn_seq_file
+  drm_property_create_range
+  drm_puts
+  __drm_puts_seq_file
+  drm_read
+  drm_rect_calc_hscale
+  drm_rect_calc_vscale
+  drm_rect_intersect
+  drm_release
+  drm_rotation_simplify
+  drm_state_dump
+  drm_universal_plane_init
+  drm_vblank_init
+  fd_install
+  fput
+  generic_file_llseek
+  get_pid_task
+  get_unused_fd_flags
+  gpiod_direction_input
+  gpiod_direction_output
+  gpiod_get_value
+  gpiod_set_consumer_name
+  gpiod_set_value
+  hdmi_audio_infoframe_pack
+  hdmi_infoframe_pack
+  hrtimer_init
+  hrtimer_start_range_ns
+  i2c_transfer
+  icc_put
+  icc_set_bw
+  invalidate_mapping_pages
+  iommu_attach_device
+  iommu_detach_device
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_map_sg
+  iommu_set_fault_handler
+  iommu_unmap
+  irq_domain_xlate_onecell
+  kasprintf
+  kstrdup_quotable_cmdline
+  kstrtouint_from_user
+  kthread_destroy_worker
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_worker_fn
+  ktime_get_real_ts64
+  kvfree
+  kvmalloc_node
+  llist_add_batch
+  memparse
+  memunmap
+  mipi_dsi_create_packet
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  mipi_dsi_packet_format_is_long
+  mutex_is_locked
+  mutex_lock_interruptible
+  mutex_trylock_recursive
+  no_llseek
+  nsecs_to_jiffies
+  ns_to_timespec
+  of_device_is_available
+  of_dma_configure
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_find_matching_node_and_match
+  of_get_compatible_child
+  of_graph_get_endpoint_by_regs
+  of_graph_get_next_endpoint
+  of_graph_get_remote_port_parent
+  of_graph_parse_endpoint
+  of_icc_get
+  param_ops_charp
+  pid_task
+  pm_runtime_get_if_in_use
+  put_pid
+  put_unused_fd
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_write_lock
+  _raw_write_unlock
+  register_vmap_purge_notifier
+  regulator_get
+  regulator_put
+  request_firmware_direct
+  reservation_ww_class
+  round_jiffies_up
+  schedule_timeout_interruptible
+  shmem_truncate_range
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_open
+  sscanf
+  strstr
+  sync_file_create
+  sync_file_get_fence
+  timespec64_to_jiffies
+  unmap_mapping_range
+  unregister_shrinker
+  unregister_vmap_purge_notifier
+  vmf_insert_mixed
+  vm_get_page_prot
+  vscnprintf
+  vsnprintf
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+
+# required by msm_serial.ko
+  iomem_resource
+  __release_region
+  __request_region
+  tty_termios_baud_rate
+  tty_termios_encode_baud_rate
+
+# required by nvmem_qfprom.ko
+  devm_nvmem_register
+
+# required by ohci-hcd.ko
+  debugfs_remove
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  flush_work
+  free_pages
+  gen_pool_dma_alloc_align
+  gen_pool_dma_zalloc_align
+  gen_pool_free_owner
+  get_zeroed_page
+  _raw_spin_lock_irq
+  _raw_spin_unlock_irq
+  sb800_prefetch
+  schedule_timeout_uninterruptible
+  usb_amd_dev_put
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_calc_bus_time
+  usb_debug_root
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcds_loaded
+  usb_hcd_unlink_urb_from_ep
+  usb_root_hub_lost_power
+
+# required by ohci-pci.ko
+  pci_dev_put
+  pci_get_slot
+  pci_match_id
+  usb_amd_prefetch_quirk
+  usb_amd_quirk_pll_check
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+
+# required by ohci-platform.ko
+  device_wakeup_enable
+  devm_reset_control_array_get
+  of_clk_get
+  usb_add_hcd
+  usb_create_hcd
+  usb_hcd_platform_shutdown
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by page_pool.ko
+  __alloc_pages_nodemask
+  contig_page_data
+  mod_node_page_state
+
+# required by phy-qcom-qmp.ko
+  of_clk_get_by_name
+  __of_reset_control_get
+
+# required by phy-qcom-qusb2.ko
+  devm_clk_get_optional
+  devm_nvmem_cell_get
+
+# required by phy-qcom-usb-hs.ko
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  extcon_register_notifier
+  extcon_unregister_notifier
+
+# required by pinctrl-sdm845.ko
+  msm_pinctrl_dev_pm_ops
+
+# required by pinctrl-spmi-gpio.ko
+  device_get_match_data
+  gpiochip_populate_parent_fwspec_fourcell
+  irq_chip_ack_parent
+  irq_chip_set_wake_parent
+
+# required by pinctrl-spmi-mpp.ko
+  platform_irq_count
+
+# required by pm8941-pwrkey.ko
+  devm_input_allocate_device
+  input_event
+  input_register_device
+  input_set_capability
+
+# required by qcom-apcs-ipc-mailbox.ko
+  devm_mbox_controller_register
+
+# required by qcom-cpufreq-hw.ko
+  arch_set_freq_scale
+  cpufreq_cpu_get_raw
+  cpufreq_freq_attr_scaling_available_freqs
+  cpufreq_freq_attr_scaling_boost_freqs
+  cpufreq_generic_frequency_table_verify
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  cpumask_next
+  __cpu_possible_mask
+  dev_pm_opp_of_register_em
+  dev_pm_opp_remove_all_dynamic
+  dev_pm_opp_set_sharing_cpus
+  get_cpu_device
+  nr_cpu_ids
+  of_get_cpu_node
+  of_parse_phandle_with_args
+
+# required by qcom-pdc.ko
+  irq_chip_disable_parent
+  irq_chip_enable_parent
+  irq_chip_eoi_parent
+  irq_chip_get_parent_state
+  irq_chip_retrigger_hierarchy
+  irq_chip_set_affinity_parent
+  irq_chip_set_parent_state
+  irq_chip_set_vcpu_affinity_parent
+  irq_domain_alloc_irqs_parent
+  irq_domain_create_hierarchy
+  irq_domain_set_hwirq_and_chip
+  irq_domain_update_bus_token
+
+# required by qcom-rpmh-regulator.ko
+  of_get_regulator_init_data
+  of_node_name_eq
+  regulator_list_voltage_linear_range
+
+# required by qcom-scm-64.ko
+  __arm_smccc_smc
+
+# required by qcom-spmi-pmic.ko
+  __spmi_driver_register
+
+# required by qcom-wdt.ko
+  platform_get_irq_optional
+
+# required by qcom_aoss.ko
+  devm_thermal_of_cooling_device_register
+  pm_genpd_remove
+
+# required by qcom_common.ko
+  rproc_coredump_add_segment
+
+# required by qcom_geni_serial.ko
+  console_stop
+  device_create_file
+  handle_sysrq
+  kstrtoint
+  oops_in_progress
+  _raw_spin_trylock
+  tty_insert_flip_string_fixed_flag
+  uart_console_device
+  uart_console_write
+  uart_parse_options
+  uart_set_options
+
+# required by qcom_glink_native.ko
+  of_irq_get
+
+# required by qcom_hwspinlock.ko
+  hwspin_lock_register
+  hwspin_lock_unregister
+  regmap_field_update_bits_base
+
+# required by qcom_q6v5.ko
+  qcom_smem_state_get
+  qcom_smem_state_update_bits
+  rproc_report_crash
+
+# required by qcom_q6v5_mss.ko
+  rproc_coredump_add_custom_segment
+
+# required by qcom_q6v5_wcss.ko
+  rproc_elf_get_boot_addr
+
+# required by qcom_rpmh.ko
+  bitmap_find_next_zero_area_off
+  __bitmap_set
+
+# required by qcom_smd.ko
+  __memcpy_toio
+
+# required by qcom_spmi-regulator.ko
+  regulator_disable_regmap
+  regulator_enable_regmap
+  regulator_is_enabled_regmap
+  smp_call_function_single
+
+# required by qcom_sysmon.ko
+  of_irq_get_byname
+  rproc_get_by_child
+  try_wait_for_completion
+
+# required by qcom_tsens.ko
+  devm_thermal_zone_of_sensor_register
+  thermal_zone_get_slope
+
+# required by qmi_helpers.ko
+  init_net
+  kernel_getsockname
+  kernel_recvmsg
+  kernel_sendmsg
+  sock_create_kern
+  sock_release
+
+# required by qnoc-sdm845.ko
+  icc_link_create
+  icc_node_add
+  icc_node_create
+  icc_node_del
+  icc_node_destroy
+  icc_provider_add
+  icc_provider_del
+  of_icc_xlate_onecell
+
+# required by qrtr-smd.ko
+  __pskb_pull_tail
+
+# required by qrtr-tun.ko
+  _copy_to_iter
+
+# required by qrtr.ko
+  __alloc_skb
+  datagram_poll
+  idr_alloc_u32
+  lock_sock_nested
+  netlink_capable
+  __nla_parse
+  proto_register
+  proto_unregister
+  radix_tree_delete
+  radix_tree_insert
+  radix_tree_lookup
+  _raw_write_lock_bh
+  _raw_write_unlock_bh
+  refcount_dec_and_mutex_lock
+  refcount_dec_checked
+  release_sock
+  rtnl_is_locked
+  rtnl_register_module
+  rtnl_unregister
+  sk_alloc
+  skb_copy_bits
+  skb_copy_datagram_iter
+  skb_free_datagram
+  __skb_pad
+  skb_recv_datagram
+  skb_set_owner_w
+  sk_free
+  sock_alloc_send_skb
+  sock_gettstamp
+  sock_init_data
+  sock_no_accept
+  sock_no_getsockopt
+  sock_no_listen
+  sock_no_mmap
+  sock_no_sendpage
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  sock_register
+  sock_unregister
+
+# required by reboot-mode.ko
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  kfree_const
+  kstrdup_const
+  strncmp
+
+# required by regmap-spmi.ko
+  __devm_regmap_init
+  __regmap_init
+  spmi_ext_register_read
+  spmi_ext_register_readl
+  spmi_ext_register_write
+  spmi_ext_register_writel
+  spmi_register_read
+  spmi_register_write
+  spmi_register_zero_write
+
+# required by rmtfs_mem.ko
+  alloc_chrdev_region
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __class_register
+  class_unregister
+  device_initialize
+  unregister_chrdev_region
+
+# required by rtc-pm8xxx.ko
+  devm_request_any_context_irq
+  devm_rtc_device_register
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+
+# required by sdhci-msm.ko
+  mmc_of_parse
+  mmc_send_tuning
+  regulator_is_supported_voltage
+  __sdhci_add_host
+  sdhci_add_host
+  sdhci_cleanup_host
+  sdhci_cqe_disable
+  sdhci_cqe_enable
+  sdhci_cqe_irq
+  sdhci_enable_clk
+  sdhci_get_property
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_remove_host
+  sdhci_reset
+  sdhci_set_bus_width
+  __sdhci_set_timeout
+  sdhci_setup_host
+
+# required by smem.ko
+  hwspin_lock_free
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  __hwspin_unlock
+  of_hwspin_lock_get_id
+
+# required by snd-soc-hdmi-codec.ko
+  devm_snd_soc_register_component
+  snd_ctl_add
+  snd_ctl_new1
+  snd_pcm_add_chmap_ctls
+  snd_pcm_create_iec958_consumer_hw_params
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_eld
+  snd_soc_dapm_add_routes
+  snd_soc_jack_report
+
+# required by socinfo.ko
+  add_device_randomness
+  soc_device_register
+  soc_device_unregister
+
+# required by spmi-pmic-arb.ko
+  handle_edge_irq
+  irq_domain_set_info
+  spmi_controller_add
+  spmi_controller_alloc
+  spmi_controller_remove
+
+# required by system_heap.ko
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_heap_add
+  dma_heap_get_dev
+  dma_heap_get_name
+  preempt_schedule
+  sg_alloc_table
+  __sg_page_iter_next
+  __sg_page_iter_start
+  vfree
+  vmalloc
+
+# required by ufs_qcom.ko
+  devm_phy_get
+  phy_exit
+  phy_init
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  ufshcd_dme_get_attr
+  ufshcd_dme_set_attr
+  ufshcd_dump_regs
+  ufshcd_get_local_unipro_ver
+  ufshcd_get_pwr_dev_param
+  ufshcd_pltfrm_init
+  ufshcd_pltfrm_resume
+  ufshcd_pltfrm_runtime_idle
+  ufshcd_pltfrm_runtime_resume
+  ufshcd_pltfrm_runtime_suspend
+  ufshcd_pltfrm_shutdown
+  ufshcd_pltfrm_suspend
+  ufshcd_remove
+  ufshcd_uic_hibern8_enter
+  ufshcd_uic_hibern8_exit
+
+# required by ulpi.ko
+  of_device_modalias
+  of_device_request_module
+  __request_module
diff --git a/android/abi_gki_aarch64_exynos b/android/abi_gki_aarch64_exynos
new file mode 100644
index 0000000..752a85f
--- /dev/null
+++ b/android/abi_gki_aarch64_exynos
@@ -0,0 +1,1310 @@
+[abi_symbol_list]
+  add_timer
+  add_timer_on
+  add_uevent_var
+  adjust_managed_page_count
+  alarm_cancel
+  alarm_init
+  alarm_start
+  alloc_chrdev_region
+  alloc_etherdev_mqs
+  alloc_netdev_mqs
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_workqueue
+  amba_driver_register
+  amba_driver_unregister
+  anon_inode_getfd
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arch_set_freq_scale
+  arch_setup_dma_ops
+  arm64_const_caps_ready
+  __arm_smccc_hvc
+  __arm_smccc_smc
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  backlight_device_unregister
+  _bcd2bin
+  bcmp
+  _bin2bcd
+  __bitmap_clear
+  __bitmap_parse
+  bitmap_parselist
+  __bitmap_set
+  __bitmap_weight
+  blkdev_get_by_dev
+  blkdev_get_by_path
+  blkdev_put
+  blk_lookup_devt
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  bpf_trace_run9
+  build_skb
+  bus_register
+  bus_register_notifier
+  bus_set_iommu
+  bus_unregister
+  bus_unregister_notifier
+  cache_line_size
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  cdev_add
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  __class_register
+  class_unregister
+  clear_page
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_get_all
+  clk_bulk_prepare
+  clk_bulk_put_all
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_get
+  __clk_get_hw
+  __clk_get_name
+  clk_get_rate
+  clk_hw_get_name
+  clk_hw_get_parent
+  clk_hw_register_divider
+  clk_hw_register_gate
+  clk_hw_register_mux
+  clk_hw_unregister_divider
+  clk_hw_unregister_gate
+  clk_hw_unregister_mux
+  __clk_is_enabled
+  clk_prepare
+  clk_put
+  clk_register
+  clk_register_clkdev
+  clk_register_fixed_factor
+  clk_register_fixed_rate
+  clk_register_gate
+  clk_set_parent
+  clk_set_rate
+  clk_unprepare
+  __close_fd
+  cma_alloc
+  cma_get_name
+  cma_release
+  compat_alloc_user_space
+  complete
+  complete_all
+  complete_and_exit
+  completion_done
+  config_ep_by_speed
+  console_lock
+  console_trylock
+  console_unlock
+  __const_udelay
+  consume_skb
+  __cpu_active_mask
+  cpu_all_bits
+  cpu_bit_bitmap
+  cpu_down
+  cpufreq_cpu_get
+  cpufreq_cpu_get_raw
+  cpufreq_cpu_put
+  cpufreq_driver_resolve_freq
+  cpufreq_freq_transition_begin
+  cpufreq_freq_transition_end
+  cpufreq_frequency_table_verify
+  cpufreq_generic_attr
+  cpufreq_quick_get
+  cpufreq_register_driver
+  cpufreq_table_index_unsorted
+  __cpuhp_setup_state
+  __cpuhp_setup_state_cpuslocked
+  cpuhp_tasks_frozen
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpumask_next_and
+  cpu_number
+  __cpu_online_mask
+  cpu_pm_register_notifier
+  __cpu_possible_mask
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_subsys
+  cpu_topology
+  cpu_up
+  crypto_alloc_shash
+  crypto_destroy_tfm
+  crypto_shash_final
+  crypto_shash_update
+  dapm_pinctrl_event
+  dapm_regulator_event
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  _dev_crit
+  dev_driver_string
+  _dev_emerg
+  _dev_err
+  devfreq_add_device
+  devfreq_add_governor
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_remove_device
+  devfreq_unregister_opp_notifier
+  devfreq_update_status
+  dev_fwnode
+  dev_get_regmap
+  dev_get_stats
+  device_add
+  device_connection_find_match
+  device_create
+  device_create_bin_file
+  device_create_file
+  device_destroy
+  device_find_child
+  device_for_each_child
+  device_get_dma_attr
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_link_del
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_string
+  device_property_read_string_array
+  device_property_read_u32_array
+  device_property_read_u8_array
+  device_register
+  device_remove_file
+  device_show_bool
+  device_show_int
+  device_store_bool
+  device_store_int
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_backlight_device_register
+  devm_clk_get
+  devm_extcon_register_notifier
+  devm_free_irq
+  devm_gpiochip_add_data
+  devm_gpiod_get_optional
+  devm_gpio_request_one
+  devm_iio_device_alloc
+  devm_ioremap
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_kstrdup
+  __devm_of_phy_provider_register
+  devm_phy_create
+  devm_phy_get
+  devm_pinctrl_get
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_register
+  __devm_request_region
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_rtc_device_register
+  devm_snd_dmaengine_pcm_register
+  devm_snd_soc_register_card
+  devm_snd_soc_register_component
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  _dev_notice
+  dev_pm_opp_add
+  dev_pm_opp_disable
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_freq
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_regulators
+  dev_printk
+  devres_add
+  devres_alloc_node
+  devres_free
+  dev_set_mac_address
+  dev_set_name
+  _dev_warn
+  disable_irq
+  disable_irq_nosync
+  dma_alloc_attrs
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_get_flags
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_direct_map_page
+  dma_direct_map_resource
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dmaengine_unmap_put
+  dma_fence_add_callback
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_get_slave_caps
+  dma_get_slave_channel
+  dmam_alloc_attrs
+  dma_mmap_attrs
+  dma_release_channel
+  dma_request_chan
+  dma_request_slave_channel
+  dma_set_coherent_mask
+  dma_set_mask
+  do_SAK
+  down
+  downgrade_write
+  down_read
+  down_trylock
+  down_write
+  driver_find
+  driver_find_device
+  driver_register
+  driver_unregister
+  dump_stack
+  dw_pcie_host_init
+  dw_pcie_msi_init
+  dw_pcie_read
+  dw_pcie_setup_rc
+  dw_pcie_write
+  enable_irq
+  end_buffer_read_sync
+  eth_mac_addr
+  ethtool_op_get_link
+  eth_type_trans
+  eth_validate_addr
+  event_triggers_call
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  fb_mode_option
+  fd_install
+  fget
+  find_next_bit
+  find_next_zero_bit
+  find_vma
+  finish_wait
+  firmware_request_nowarn
+  flush_dcache_page
+  flush_delayed_work
+  flush_work
+  flush_workqueue
+  fput
+  frame_vector_create
+  frame_vector_destroy
+  frame_vector_to_pages
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  freezing_slow_path
+  freq_qos_add_request
+  freq_qos_update_request
+  fwnode_property_present
+  fwnode_property_read_u16_array
+  generic_handle_irq
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_create
+  gen_pool_destroy
+  gen_pool_free_owner
+  __getblk_gfp
+  get_cpu_device
+  get_device
+  __get_free_pages
+  get_random_bytes
+  __get_task_comm
+  get_task_exe_file
+  get_task_mm
+  get_unused_fd_flags
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  get_vaddr_frames
+  get_zeroed_page
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_lock_as_irq
+  gpiochip_unlock_as_irq
+  gpiod_direction_input
+  gpiod_direction_output_raw
+  gpiod_get_raw_value
+  gpiod_get_raw_value_cansleep
+  gpiod_set_raw_value
+  gpiod_set_value_cansleep
+  gpiod_to_irq
+  gpio_free
+  gpio_request
+  gpio_request_one
+  gpio_to_desc
+  gs_alloc_req
+  gserial_alloc_line
+  gserial_connect
+  gserial_disconnect
+  gserial_free_line
+  gs_free_req
+  handle_edge_irq
+  handle_level_irq
+  handle_nested_irq
+  handle_sysrq
+  hex_to_bin
+  hrtimer_active
+  hrtimer_cancel
+  hrtimer_forward
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+  hwrng_register
+  hwrng_unregister
+  i2c_adapter_type
+  i2c_add_numbered_adapter
+  i2c_bus_type
+  i2c_del_adapter
+  i2c_del_driver
+  i2c_for_each_dev
+  i2c_get_adapter
+  i2c_new_dummy
+  i2c_put_adapter
+  i2c_register_driver
+  i2c_smbus_read_byte_data
+  i2c_smbus_read_i2c_block_data
+  i2c_smbus_read_word_data
+  i2c_smbus_write_byte_data
+  i2c_smbus_write_i2c_block_data
+  i2c_smbus_write_word_data
+  i2c_smbus_xfer
+  i2c_transfer
+  i2c_transfer_buffer_flags
+  i2c_unregister_device
+  i2c_verify_client
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  ignore_console_lock_warning
+  iio_channel_get
+  iio_channel_release
+  __iio_device_register
+  iio_device_unregister
+  iio_read_channel_processed
+  in4_pton
+  in6_pton
+  init_dummy_netdev
+  __init_rwsem
+  init_task
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_destroy_slots
+  input_mt_init_slots
+  input_mt_report_slot_state
+  input_register_device
+  input_set_abs_params
+  input_set_capability
+  input_unregister_device
+  iomem_resource
+  iommu_attach_group
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_reserve_iova
+  iommu_domain_alloc
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_alloc
+  iommu_group_for_each_dev
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_group_set_name
+  iommu_iova_to_phys
+  iommu_map
+  iommu_map_sg
+  iommu_put_dma_cookie
+  iommu_register_device_fault_handler
+  iommu_report_device_fault
+  iommu_unmap
+  iommu_unregister_device_fault_handler
+  ion_alloc
+  ion_buffer_prep_noncached
+  __ion_device_add_heap
+  ion_device_remove_heap
+  ion_heap_map_user
+  ion_query_heaps_kernel
+  __ioread32_copy
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  __irq_alloc_descs
+  __irq_domain_add
+  irq_domain_remove
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_affinity_hint
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_handler_data
+  irq_set_irq_wake
+  irq_to_desc
+  is_console_locked
+  jiffies
+  jiffies_64
+  jiffies_64_to_clock_t
+  jiffies_to_msecs
+  jiffies_to_usecs
+  kasprintf
+  kernel_kobj
+  kern_path
+  __kfifo_alloc
+  __kfifo_free
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_call_rcu
+  kfree_const
+  kimage_vaddr
+  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_create_and_add
+  kobject_init_and_add
+  kobject_put
+  kobject_uevent
+  kobject_uevent_env
+  krealloc
+  kstat
+  kstrdup
+  kstrndup
+  kstrtobool
+  kstrtoint
+  kstrtoint_from_user
+  kstrtou8
+  kstrtoull
+  kthread_bind
+  kthread_cancel_work_sync
+  kthread_create_on_node
+  kthread_create_worker
+  kthread_destroy_worker
+  kthread_flush_worker
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_should_stop
+  kthread_stop
+  kthread_worker_fn
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_raw_ts64
+  ktime_get_real_ts64
+  ktime_get_with_offset
+  kvasprintf
+  kvfree
+  kvmalloc_node
+  kzfree
+  __list_add_valid
+  __list_del_entry_valid
+  __lock_buffer
+  loops_per_jiffy
+  match_string
+  media_create_intf_link
+  media_create_pad_link
+  media_device_register_entity
+  media_device_unregister_entity
+  media_devnode_create
+  media_devnode_remove
+  media_entity_pads_init
+  media_entity_remove_links
+  media_remove_intf_links
+  memchr
+  memcpy
+  __memcpy_fromio
+  __memcpy_toio
+  memdup_user
+  memset
+  __memset_io
+  mfd_add_devices
+  mfd_remove_devices
+  misc_deregister
+  misc_register
+  mmc_add_host
+  mmc_alloc_host
+  mmc_can_gpio_cd
+  mmc_detect_change
+  mmc_free_host
+  mmc_gpio_get_cd
+  mmc_gpio_get_ro
+  mmc_of_parse
+  mmc_regulator_get_supply
+  mmc_regulator_set_ocr
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  mmc_wait_for_req
+  __mmdrop
+  mmput
+  mm_trace_rss_stat
+  mod_delayed_work_on
+  mod_timer
+  __module_get
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  __napi_alloc_skb
+  napi_complete_done
+  napi_gro_flush
+  napi_gro_receive
+  __napi_schedule
+  napi_schedule_prep
+  __netdev_alloc_skb
+  netif_carrier_off
+  netif_carrier_on
+  netif_napi_add
+  netif_receive_skb
+  netif_rx
+  netif_tx_wake_queue
+  no_llseek
+  noop_llseek
+  nr_cpu_ids
+  nr_irqs
+  nsecs_to_jiffies
+  ns_to_timespec
+  ns_to_timeval
+  __num_online_cpus
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_hw_provider
+  of_clk_add_provider
+  of_clk_del_provider
+  of_clk_get
+  of_clk_get_parent_count
+  of_clk_hw_onecell_get
+  of_clk_src_onecell_get
+  of_count_phandle_with_args
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_compatible
+  of_dma_controller_free
+  of_dma_controller_register
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_matching_node_and_match
+  of_find_node_by_name
+  of_find_node_by_type
+  of_find_node_opts_by_path
+  of_find_property
+  of_genpd_add_provider_simple
+  of_get_child_by_name
+  of_get_dma_window
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_get_regulator_init_data
+  of_iomap
+  of_match_device
+  of_match_node
+  of_node_name_eq
+  of_parse_phandle
+  of_phandle_iterator_init
+  of_phandle_iterator_next
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_prop_next_string
+  of_prop_next_u32
+  of_pwm_xlate_with_flags
+  of_reserved_mem_device_init_by_idx
+  of_reserved_mem_device_release
+  of_reserved_mem_lookup
+  of_reset_control_array_get
+  of_root
+  of_usb_get_phy_mode
+  oops_in_progress
+  panic
+  panic_notifier_list
+  param_ops_bool
+  param_ops_byte
+  param_ops_int
+  param_ops_long
+  param_ops_uint
+  param_ops_ulong
+  pci_find_bus
+  pci_get_device
+  pci_load_saved_state
+  pcim_enable_device
+  pci_read_config_dword
+  __pci_register_driver
+  pci_rescan_bus
+  pci_restore_state
+  pci_save_state
+  pci_set_master
+  pci_store_saved_state
+  pci_unregister_driver
+  pci_write_config_dword
+  __per_cpu_offset
+  perf_event_create_kernel_counter
+  perf_event_disable
+  perf_event_enable
+  perf_event_read_value
+  perf_event_release_kernel
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  phy_calibrate
+  phy_exit
+  phy_init
+  phy_power_off
+  phy_power_on
+  phy_reset
+  phy_set_mode_ext
+  pinctrl_add_gpio_range
+  pinctrl_dev_get_drvdata
+  pinctrl_force_sleep
+  pinctrl_get
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_put
+  pinctrl_remove_gpio_range
+  pinctrl_select_state
+  platform_bus_type
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_irq_byname_optional
+  platform_get_resource
+  platform_get_resource_byname
+  __platform_register_drivers
+  pm_genpd_init
+  pm_power_off
+  pm_qos_remove_request
+  pm_qos_update_request
+  __pm_relax
+  pm_relax
+  pm_runtime_allow
+  pm_runtime_barrier
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  pm_runtime_get_if_in_use
+  __pm_runtime_idle
+  pm_runtime_irq_safe
+  pm_runtime_no_callbacks
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_stay_awake
+  pm_wakeup_dev_event
+  pm_wakeup_ws_event
+  power_supply_changed
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_put
+  power_supply_register
+  power_supply_unregister
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  proc_create_seq_private
+  __put_cred
+  put_device
+  __put_page
+  __put_task_struct
+  put_tty_driver
+  put_unused_fd
+  put_vaddr_frames
+  pwmchip_add
+  pwmchip_remove
+  pwm_get_chip_data
+  pwm_set_chip_data
+  queue_delayed_work_on
+  queue_work_on
+  __raw_notifier_call_chain
+  raw_notifier_call_chain
+  raw_notifier_chain_register
+  raw_notifier_chain_unregister
+  _raw_read_lock
+  _raw_read_lock_irqsave
+  _raw_read_unlock
+  _raw_read_unlock_irqrestore
+  _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_irqsave
+  _raw_write_unlock_irqrestore
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  rdev_get_id
+  reboot_mode
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  __refrigerator
+  regcache_cache_only
+  regcache_drop_region
+  regcache_mark_dirty
+  regcache_sync
+  __register_chrdev
+  register_chrdev_region
+  register_console
+  register_die_notifier
+  register_netdev
+  register_pm_notifier
+  register_reboot_notifier
+  register_restart_handler
+  register_shrinker
+  register_syscore_ops
+  regmap_async_complete
+  regmap_bulk_read
+  regmap_multi_reg_write
+  regmap_multi_reg_write_bypassed
+  regmap_raw_read
+  regmap_raw_write
+  regmap_raw_write_async
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_bulk_enable
+  regulator_disable
+  regulator_enable
+  regulator_force_disable
+  regulator_get
+  regulator_get_optional
+  regulator_is_enabled
+  regulator_list_voltage_linear
+  regulator_map_voltage_linear
+  regulator_put
+  release_firmware
+  release_pages
+  __release_region
+  remap_pfn_range
+  remap_vmalloc_range
+  remove_proc_entry
+  request_firmware
+  request_firmware_direct
+  request_firmware_nowait
+  __request_module
+  __request_region
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  reset_control_put
+  reset_control_reset
+  return_address
+  rps_needed
+  rtc_class_close
+  rtc_class_open
+  rtc_read_time
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+  rtnl_lock
+  rtnl_unlock
+  sched_clock
+  sched_setscheduler
+  sched_setscheduler_nocheck
+  sched_show_task
+  schedule
+  schedule_timeout
+  scnprintf
+  scsi_block_when_processing_errors
+  scsi_device_get
+  __scsi_device_lookup_by_target
+  __scsi_execute
+  scsi_print_sense_hdr
+  sdev_prefix_printk
+  sdio_signal_irq
+  seq_lseek
+  seq_printf
+  seq_read
+  set_cpus_allowed_ptr
+  set_normalized_timespec64
+  set_page_dirty_lock
+  sg_alloc_table
+  sg_alloc_table_from_pages
+  sg_copy_to_buffer
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_nents_for_len
+  sg_next
+  simple_open
+  simple_read_from_buffer
+  simple_strtol
+  simple_strtoul
+  single_open
+  single_release
+  skb_copy_expand
+  skb_dequeue
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_queue_purge
+  skb_queue_tail
+  skb_realloc_headroom
+  skb_trim
+  smpboot_register_percpu_thread
+  smp_call_function
+  smp_call_function_single
+  snd_compr_stop_error
+  snd_ctl_boolean_mono_info
+  snd_ctl_notify
+  snd_device_free
+  snd_dma_alloc_pages
+  snd_dmaengine_pcm_prepare_slave_config
+  snd_dma_free_pages
+  snd_hwdep_new
+  snd_pcm_format_physical_width
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_list
+  snd_pcm_lib_free_pages
+  snd_pcm_lib_ioctl
+  snd_pcm_lib_malloc_pages
+  snd_pcm_lib_preallocate_free_for_all
+  snd_pcm_lib_preallocate_pages
+  snd_pcm_period_elapsed
+  snd_pcm_rate_range_to_bits
+  snd_soc_add_component_controls
+  snd_soc_bytes_info_ext
+  snd_soc_bytes_tlv_callback
+  snd_soc_card_get_kcontrol
+  snd_soc_component_async_complete
+  snd_soc_component_disable_pin
+  snd_soc_component_force_enable_pin
+  snd_soc_component_init_regmap
+  snd_soc_component_read
+  snd_soc_component_set_pll
+  snd_soc_component_set_sysclk
+  snd_soc_component_update_bits
+  snd_soc_component_update_bits_async
+  snd_soc_component_write
+  snd_soc_dai_set_bclk_ratio
+  snd_soc_dai_set_channel_map
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_pin_status
+  snd_soc_dapm_get_pin_switch
+  snd_soc_dapm_get_volsw
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_info_pin_switch
+  snd_soc_dapm_new_control
+  snd_soc_dapm_new_controls
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_pin_switch
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_dapm_weak_routes
+  snd_soc_find_dai
+  snd_soc_get_enum_double
+  snd_soc_get_pcm_runtime
+  snd_soc_get_volsw
+  snd_soc_get_volsw_range
+  snd_soc_get_xr_sx
+  snd_soc_info_enum_double
+  snd_soc_info_volsw
+  snd_soc_info_volsw_range
+  snd_soc_info_volsw_sx
+  snd_soc_info_xr_sx
+  snd_soc_new_compress
+  snd_soc_of_get_dai_link_codecs
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_daifmt
+  snd_soc_of_put_dai_link_codecs
+  snd_soc_params_to_bclk
+  snd_soc_pm_ops
+  snd_soc_put_enum_double
+  snd_soc_put_volsw
+  snd_soc_put_volsw_range
+  snd_soc_put_xr_sx
+  snd_soc_register_card
+  snd_soc_register_component
+  snd_soc_set_runtime_hwparams
+  snd_soc_tplg_component_load
+  snd_soc_tplg_component_remove
+  snd_soc_tplg_widget_bind_event
+  snd_soc_unregister_card
+  snd_soc_unregister_component
+  snprintf
+  soc_device_register
+  sort
+  __spi_alloc_controller
+  spi_controller_resume
+  spi_controller_suspend
+  spi_finalize_current_message
+  spi_register_controller
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  spi_unregister_controller
+  split_page
+  sprintf
+  sprint_symbol
+  srcu_init_notifier_head
+  srcu_notifier_call_chain
+  srcu_notifier_chain_register
+  srcu_notifier_chain_unregister
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  static_key_initialized
+  static_key_slow_dec
+  static_key_slow_inc
+  strcat
+  strchr
+  strchrnul
+  strcmp
+  strcpy
+  strcspn
+  stream_open
+  strlcat
+  strlcpy
+  strlen
+  strncat
+  strncmp
+  strncpy
+  strnlen
+  strpbrk
+  strsep
+  strstr
+  submit_bh
+  subsys_system_register
+  __sw_hweight32
+  __sw_hweight64
+  __sync_dirty_buffer
+  sync_file_create
+  sync_file_get_fence
+  synchronize_irq
+  synchronize_rcu
+  syscon_regmap_lookup_by_phandle
+  sysfs_add_file_to_group
+  sysfs_create_file_ns
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_file_ns
+  sysfs_remove_group
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_highpri_wq
+  system_state
+  system_unbound_wq
+  system_wq
+  sys_tz
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  time64_to_tm
+  _totalram_pages
+  touch_softlockup_watchdog
+  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
+  __trace_puts
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __tty_alloc_driver
+  tty_flip_buffer_push
+  tty_hangup
+  tty_insert_flip_string_fixed_flag
+  tty_kref_put
+  tty_port_destroy
+  tty_port_init
+  tty_port_register_device
+  tty_port_tty_get
+  tty_register_driver
+  tty_set_operations
+  tty_std_termios
+  tty_unregister_device
+  tty_unregister_driver
+  tty_wakeup
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_unregister_partner
+  typec_unregister_port
+  uart_add_one_port
+  uart_console_write
+  uart_get_baud_rate
+  uart_parse_options
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_set_options
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __udelay
+  unmap_mapping_range
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_netdev
+  unregister_pm_notifier
+  unregister_reboot_notifier
+  unregister_restart_handler
+  unregister_shrinker
+  up
+  update_devfreq
+  up_read
+  up_write
+  usb_add_function
+  usb_add_gadget_udc
+  usb_assign_descriptors
+  usb_copy_descriptors
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_dequeue
+  usb_ep_disable
+  usb_ep_enable
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_halt
+  usb_ep_set_maxpacket_limit
+  usb_free_all_descriptors
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+  usb_gadget_udc_reset
+  usb_gadget_unmap_request_by_dev
+  usb_gadget_vbus_connect
+  usb_gadget_vbus_disconnect
+  usb_get_dr_mode
+  usb_get_maximum_speed
+  usb_gstrings_attach
+  usb_hub_find_child
+  usb_interface_id
+  usb_os_desc_prepare_interf_dir
+  usb_otg_state_string
+  usb_put_function_instance
+  usb_register_notify
+  usb_speed_string
+  usb_string_id
+  usb_unregister_notify
+  __usecs_to_jiffies
+  usleep_range
+  v4l2_ctrl_handler_free
+  v4l2_ctrl_handler_init_class
+  v4l2_ctrl_handler_setup
+  v4l2_ctrl_log_status
+  v4l2_ctrl_new_custom
+  v4l2_ctrl_new_std
+  v4l2_ctrl_new_std_menu
+  v4l2_device_register
+  v4l2_device_register_subdev
+  v4l2_device_register_subdev_nodes
+  v4l2_device_unregister
+  v4l2_device_unregister_subdev
+  v4l2_event_pending
+  v4l2_fh_add
+  v4l2_fh_del
+  v4l2_fh_exit
+  v4l2_fh_init
+  v4l2_subdev_call_wrappers
+  v4l2_subdev_init
+  v4l_bound_align_image
+  vabits_actual
+  vb2_buffer_done
+  vb2_create_bufs
+  vb2_dqbuf
+  vb2_expbuf
+  vb2_mmap
+  vb2_ops_wait_finish
+  vb2_ops_wait_prepare
+  vb2_plane_cookie
+  vb2_plane_vaddr
+  vb2_poll
+  vb2_prepare_buf
+  vb2_qbuf
+  vb2_querybuf
+  vb2_queue_init
+  vb2_queue_release
+  vb2_reqbufs
+  vb2_request_object_is_buffer
+  vb2_streamoff
+  vb2_streamon
+  vb2_wait_for_all_buffers
+  vfree
+  video_devdata
+  video_device_alloc
+  video_device_release
+  video_ioctl2
+  __video_register_device
+  video_unregister_device
+  vmalloc
+  vmalloc_to_page
+  vmalloc_user
+  vmap
+  vmf_insert_pfn_prot
+  vm_get_page_prot
+  vm_iomap_memory
+  vm_map_pages
+  vsnprintf
+  vunmap
+  vzalloc
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_killable
+  wait_for_completion_timeout
+  __wait_on_buffer
+  __wake_up
+  wake_up_process
+  wakeup_source_add
+  wakeup_source_create
+  wakeup_source_destroy
+  wakeup_source_register
+  wakeup_source_unregister
+  __warn_printk
+  watchdog_init_timeout
+  watchdog_register_device
+  watchdog_set_restart_priority
+  watchdog_unregister_device
+  work_busy
diff --git a/android/abi_gki_aarch64_hikey960 b/android/abi_gki_aarch64_hikey960
new file mode 100644
index 0000000..029038e
--- /dev/null
+++ b/android/abi_gki_aarch64_hikey960
@@ -0,0 +1,1206 @@
+[abi_symbol_list]
+# commonly used symbols
+  alloc_chrdev_region
+  __alloc_disk_node
+  __alloc_pages_nodemask
+  alloc_workqueue
+  amba_driver_register
+  amba_driver_unregister
+  amba_release_regions
+  amba_request_regions
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  blk_cleanup_queue
+  blk_execute_rq
+  blk_execute_rq_nowait
+  blk_get_queue
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  blk_mq_end_request
+  blk_mq_free_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  blk_mq_requeue_request
+  blk_mq_start_request
+  blk_mq_tagset_busy_iter
+  blk_mq_tagset_wait_completed_request
+  blk_mq_unquiesce_queue
+  blk_put_queue
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_logical_block_size
+  blk_queue_max_discard_sectors
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_write_cache
+  blk_rq_map_sg
+  bpf_trace_run3
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  clk_disable
+  clk_enable
+  clk_get
+  clk_get_rate
+  clk_prepare
+  clk_put
+  clk_set_rate
+  clk_unprepare
+  cma_alloc
+  cma_get_name
+  cma_release
+  complete
+  __const_udelay
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpu_number
+  __cpu_online_mask
+  debugfs_attr_read
+  debugfs_attr_write
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_file_unsafe
+  debugfs_remove
+  debugfs_remove_recursive
+  default_llseek
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  device_add_disk
+  device_create_file
+  device_get_match_data
+  device_initialize
+  device_init_wakeup
+  device_remove_file
+  _dev_info
+  devm_clk_get
+  devm_gpiod_get
+  devm_gpiod_get_optional
+  devm_ioremap
+  devm_ioremap_resource
+  devm_kfree
+  devm_kmalloc
+  devm_pinctrl_get
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_register
+  devm_request_threaded_irq
+  __devm_reset_control_get
+  devm_thermal_zone_of_sensor_register
+  dev_pm_opp_get_opp_count
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  dev_set_name
+  _dev_warn
+  disable_irq
+  dma_alloc_attrs
+  dma_buf_export
+  dma_direct_map_page
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_free_attrs
+  dma_heap_add
+  dma_heap_get_name
+  dmam_alloc_attrs
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  dma_release_channel
+  dma_request_slave_channel
+  dma_set_coherent_mask
+  dma_set_mask
+  down_read
+  down_write
+  driver_unregister
+  drm_atomic_helper_connector_destroy_state
+  drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_reset
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_list_iter_begin
+  drm_connector_list_iter_end
+  drm_connector_list_iter_next
+  drm_connector_unregister
+  drm_err
+  drm_helper_probe_single_connector_modes
+  drm_mode_copy
+  drm_mode_vrefresh
+  enable_irq
+  event_triggers_call
+  find_next_bit
+  find_next_zero_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  free_irq
+  __free_pages
+  free_pages
+  generic_file_llseek
+  get_device
+  __get_free_pages
+  get_zeroed_page
+  gpiod_set_value_cansleep
+  gpio_to_desc
+  i2c_del_driver
+  i2c_register_driver
+  i2c_transfer
+  ida_alloc_range
+  ida_free
+  ieee80211_channel_to_freq_khz
+  ieee80211_connection_loss
+  ieee80211_find_sta
+  ieee80211_get_hdrlen_from_skb
+  ieee80211_queue_delayed_work
+  ieee80211_stop_rx_ba_session
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  __ioremap
+  iounmap
+  irq_get_irq_data
+  irq_of_parse_and_map
+  irq_set_irq_wake
+  jiffies
+  kfree
+  kfree_const
+  kfree_skb
+  kimage_vaddr
+  __kmalloc
+  kmalloc_caches
+  kmalloc_order_trace
+  kmem_cache_alloc_trace
+  kmemdup
+  kstrtoint
+  kstrtoul_from_user
+  kstrtoull
+  kthread_create_on_node
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_with_offset
+  __list_add_valid
+  __list_del_entry_valid
+  memcpy
+  memdup_user
+  memmove
+  memset
+  memstart_addr
+  mmc_add_host
+  mmc_alloc_host
+  mmc_detect_change
+  mmc_free_host
+  mmc_gpiod_request_cd
+  mmc_gpiod_request_ro
+  mmc_gpio_get_cd
+  mmc_gpio_get_ro
+  mmc_hw_reset
+  mmc_of_parse
+  mmc_regulator_get_supply
+  mmc_regulator_set_ocr
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  mmc_send_tuning
+  mod_timer
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_unlock
+  no_llseek
+  nonseekable_open
+  of_alias_get_id
+  of_clk_get
+  of_device_get_match_data
+  of_device_is_compatible
+  of_find_compatible_node
+  of_find_property
+  of_get_child_by_name
+  of_get_named_gpio_flags
+  of_get_property
+  of_graph_get_remote_node
+  of_graph_parse_endpoint
+  of_iomap
+  of_match_device
+  of_match_node
+  of_parse_phandle
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_variable_u32_array
+  param_ops_bool
+  param_ops_charp
+  param_ops_int
+  param_ops_uint
+  __pci_register_driver
+  pci_unregister_driver
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_select_state
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  pm_suspend_global_flags
+  pm_wakeup_dev_event
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  put_device
+  put_disk
+  __put_task_struct
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  register_shrinker
+  regmap_raw_read
+  regmap_raw_write
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_disable
+  regulator_enable
+  regulator_enable_regmap
+  regulator_get_optional
+  regulator_get_voltage_sel_regmap
+  regulator_list_voltage_table
+  regulator_put
+  regulator_set_voltage
+  regulator_set_voltage_sel_regmap
+  release_firmware
+  remap_pfn_range
+  request_firmware
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  schedule
+  schedule_timeout
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_puts
+  seq_read
+  set_disk_ro
+  sg_alloc_table
+  sg_free_table
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_next
+  simple_attr_open
+  simple_attr_release
+  simple_open
+  simple_read_from_buffer
+  single_open
+  single_release
+  skb_pull
+  skb_queue_tail
+  snprintf
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  sprintf
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strlcpy
+  strncmp
+  strncpy
+  strnlen
+  __sw_hweight32
+  __sw_hweight64
+  synchronize_irq
+  synchronize_rcu
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  system_wq
+  tasklet_init
+  __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
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __ubsan_handle_cfi_check_fail_abort
+  unregister_chrdev_region
+  up_read
+  up_write
+  usb_disabled
+  __usecs_to_jiffies
+  usleep_range
+  vfree
+  vmalloc
+  vmap
+  vunmap
+  wait_for_completion_timeout
+  __wake_up
+  wake_up_process
+  __warn_printk
+
+# required by adv7511.ko
+  cec_allocate_adapter
+  cec_delete_adapter
+  cec_received_msg_ts
+  cec_register_adapter
+  cec_s_phys_addr
+  cec_s_phys_addr_from_edid
+  cec_transmit_attempt_done_ts
+  cec_transmit_done_ts
+  cec_unregister_adapter
+  devm_regulator_bulk_get
+  drm_add_edid_modes
+  drm_bridge_add
+  drm_bridge_remove
+  drm_connector_update_edid_property
+  drm_detect_hdmi_monitor
+  drm_do_get_edid
+  drm_kms_helper_hotplug_event
+  hdmi_avi_infoframe_init
+  hdmi_avi_infoframe_pack
+  i2c_new_ancillary_device
+  i2c_unregister_device
+  mipi_dsi_attach
+  mipi_dsi_detach
+  mipi_dsi_device_register_full
+  mipi_dsi_device_unregister
+  mipi_dsi_driver_register_full
+  mipi_dsi_driver_unregister
+  of_find_mipi_dsi_host_by_node
+  platform_device_register_full
+  regcache_mark_dirty
+  regcache_sync
+  regmap_bulk_write
+  regmap_register_patch
+  regulator_bulk_disable
+  regulator_bulk_enable
+
+# required by ambakmi.ko
+  serio_interrupt
+  serio_reconnect
+  __serio_register_port
+  serio_unregister_port
+
+# required by armmmci.ko
+  clk_round_rate
+
+# required by clk-hi655x.ko
+  devm_clk_hw_register
+  devm_of_clk_add_hw_provider
+  of_clk_hw_simple_get
+
+# required by cma_heap.ko
+  dma_contiguous_default_area
+  dma_heap_get_drvdata
+  sg_alloc_table_from_pages
+
+# required by cn.ko
+  __alloc_skb
+  init_net
+  netlink_broadcast
+  netlink_has_listeners
+  __netlink_kernel_create
+  netlink_kernel_release
+  netlink_unicast
+  __nlmsg_put
+  proc_create_single_data
+  remove_proc_entry
+
+# required by cpufreq-dt.ko
+  arch_set_freq_scale
+  cpufreq_enable_boost_support
+  cpufreq_freq_attr_scaling_available_freqs
+  cpufreq_freq_attr_scaling_boost_freqs
+  cpufreq_generic_frequency_table_verify
+  cpufreq_generic_get
+  cpufreq_generic_suspend
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  dev_pm_opp_free_cpufreq_table
+  dev_pm_opp_get_max_transition_latency
+  dev_pm_opp_get_sharing_cpus
+  dev_pm_opp_get_suspend_opp_freq
+  dev_pm_opp_init_cpufreq_table
+  dev_pm_opp_of_cpumask_add_table
+  dev_pm_opp_of_cpumask_remove_table
+  dev_pm_opp_of_get_sharing_cpus
+  dev_pm_opp_of_register_em
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_rate
+  dev_pm_opp_set_regulators
+  dev_pm_opp_set_sharing_cpus
+  get_cpu_device
+  policy_has_boost_freq
+
+# required by deferred-free-helper.ko
+  freezing_slow_path
+  __refrigerator
+  sched_setscheduler
+  system_freezing_cnt
+
+# required by dw_mmc.ko
+  debugfs_create_u32
+  debugfs_create_x32
+  device_property_present
+  device_property_read_string_array
+  device_property_read_u32_array
+  mmc_can_gpio_cd
+  sdio_signal_irq
+
+# required by hi3660-i2s.ko
+  devm_snd_dmaengine_pcm_register
+  pinctrl_put
+  snd_dmaengine_pcm_prepare_slave_config
+  snd_soc_register_component
+  snd_soc_unregister_component
+
+# required by hi3660-mailbox.ko
+  devm_mbox_controller_register
+
+# required by hi6421-pmic-core.ko
+  devm_mfd_add_devices
+
+# required by hi6421v530-regulator.ko
+  regulator_disable_regmap
+  regulator_is_enabled_regmap
+  regulator_map_voltage_ascend
+
+# required by hi655x-pmic.ko
+  devm_gpio_request_one
+  gpiod_to_irq
+  mfd_add_devices
+  mfd_remove_devices
+  regmap_add_irq_chip
+  regmap_del_irq_chip
+  regmap_irq_get_domain
+
+# required by hi655x-regulator.ko
+  regulator_list_voltage_linear
+
+# required by hisi_hikey_usb.ko
+  dev_fwnode
+  usb_role_switch_get
+  usb_role_switch_get_role
+  usb_role_switch_put
+  usb_role_switch_register
+  usb_role_switch_set_role
+  usb_role_switch_unregister
+
+# required by hisi_powerkey.ko
+  devm_input_allocate_device
+  devm_request_any_context_irq
+  input_event
+  input_register_device
+  input_set_capability
+  platform_get_irq_byname
+
+# required by hisi_thermal.ko
+  _dev_crit
+  of_thermal_get_ntrips
+  of_thermal_get_trip_points
+  thermal_zone_device_update
+
+# required by hwmon.ko
+  __class_register
+  class_unregister
+  device_register
+  device_unregister
+  kstrtoll
+  strcpy
+  strlen
+  strpbrk
+
+# required by i2c-designware-core.ko
+  i2c_add_numbered_adapter
+  i2c_generic_scl_recovery
+  i2c_recover_bus
+
+# required by i2c-designware-platform.ko
+  devm_clk_get_optional
+  i2c_del_adapter
+  i2c_parse_fw_timings
+
+# required by i2c-dev.ko
+  bus_register_notifier
+  bus_unregister_notifier
+  device_for_each_child
+  i2c_adapter_type
+  i2c_bus_type
+  i2c_for_each_dev
+  i2c_get_adapter
+  i2c_put_adapter
+  i2c_smbus_xfer
+  i2c_transfer_buffer_flags
+  i2c_verify_client
+  register_chrdev_region
+
+# required by ion_cma_heap.ko
+  cma_for_each_area
+  ion_buffer_prep_noncached
+  __ion_device_add_heap
+  ion_device_remove_heap
+
+# required by k3dma.ko
+  devm_free_irq
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_get_slave_channel
+  dmam_pool_create
+  of_dma_controller_free
+  of_dma_controller_register
+  tasklet_kill
+
+# required by kirin-drm.ko
+  component_bind_all
+  component_master_add_with_match
+  component_master_del
+  component_unbind_all
+  drm_atomic_get_crtc_state
+  drm_atomic_helper_check
+  drm_atomic_helper_commit
+  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_update_plane
+  drm_compat_ioctl
+  drm_connector_register
+  drm_crtc_arm_vblank_event
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_get
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_dev_unregister
+  drm_fb_cma_get_gem_obj
+  drm_gem_cma_dumb_create_internal
+  drm_gem_cma_free_object
+  drm_gem_cma_mmap
+  drm_gem_cma_prime_get_sg_table
+  drm_gem_cma_prime_import_sg_table
+  drm_gem_cma_prime_mmap
+  drm_gem_cma_prime_vmap
+  drm_gem_cma_prime_vunmap
+  drm_gem_cma_vm_ops
+  drm_gem_fb_create
+  drm_gem_prime_export
+  drm_gem_prime_fd_to_handle
+  drm_gem_prime_handle_to_fd
+  drm_gem_prime_import
+  drm_ioctl
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_mode_config_reset
+  drm_of_component_match_add
+  drm_open
+  drm_plane_cleanup
+  drm_poll
+  drm_read
+  drm_release
+  drm_universal_plane_init
+  drm_vblank_init
+  noop_llseek
+
+# required by kirin-dsi.ko
+  component_add
+  component_del
+  drm_bridge_attach
+  drm_dbg
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_of_find_possible_crtcs
+  drm_panel_attach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_prepare
+  drm_panel_unprepare
+  drm_sysfs_hotplug_event
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_graph_get_next_endpoint
+  of_graph_get_remote_port_parent
+
+# required by mali_kbase.ko
+  anon_inode_getfd
+  __bitmap_weight
+  cache_line_size
+  clear_page
+  __close_fd
+  debugfs_create_bool
+  debugfs_create_size_t
+  devfreq_add_device
+  devfreq_cooling_unregister
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_remove_device
+  devfreq_resume_device
+  devfreq_suspend_device
+  devfreq_unregister_opp_notifier
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_get
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_fence_add_callback
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  down
+  downgrade_write
+  down_trylock
+  dump_stack
+  fd_install
+  find_vma
+  fput
+  get_unused_fd_flags
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  hrtimer_cancel
+  hrtimer_init
+  hrtimer_start_range_ns
+  iomem_resource
+  kimage_voffset
+  kstrdup
+  kstrndup
+  kstrtobool_from_user
+  kstrtouint
+  kthread_should_stop
+  kthread_stop
+  ktime_add_safe
+  ktime_get_raw_ts64
+  misc_deregister
+  misc_register
+  __mmdrop
+  mm_trace_rss_stat
+  msleep_interruptible
+  of_devfreq_cooling_register_power
+  of_find_device_by_node
+  of_get_next_available_child
+  of_property_read_u64
+  __put_page
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  __release_region
+  remap_vmalloc_range
+  __request_region
+  seq_open
+  seq_putc
+  seq_release
+  seq_write
+  set_page_dirty_lock
+  simple_attr_read
+  simple_attr_write
+  sync_file_create
+  sync_file_get_fence
+  sysfs_create_group
+  sysfs_remove_group
+  sysfs_streq
+  thermal_zone_get_temp
+  thermal_zone_get_zone_by_name
+  _totalram_pages
+  unmap_mapping_range
+  unregister_shrinker
+  up
+  vabits_actual
+  vmalloc_user
+  vmf_insert_pfn
+  vm_mmap
+  vzalloc
+
+# required by mmc_block.ko
+  blk_get_request
+  __blk_mq_end_request
+  blk_mq_run_hw_queues
+  blk_put_request
+  blk_queue_bounce_limit
+  blk_queue_can_use_dma_map_merging
+  blk_queue_max_segment_size
+  blk_queue_rq_timeout
+  blk_update_request
+  bus_register
+  bus_unregister
+  check_disk_change
+  dma_get_merge_boundary
+  mmc_app_cmd
+  mmc_calc_max_discard
+  mmc_can_erase
+  mmc_can_sanitize
+  mmc_can_secure_erase_trim
+  mmc_can_trim
+  __mmc_claim_host
+  mmc_cmdq_disable
+  mmc_cmdq_enable
+  mmc_cqe_post_req
+  mmc_cqe_recovery
+  mmc_cqe_start_req
+  mmc_crypto_prepare_req
+  mmc_crypto_setup_queue
+  mmc_detect_card_removed
+  mmc_erase
+  mmc_erase_group_aligned
+  mmc_flush_cache
+  mmc_get_card
+  mmc_get_ext_csd
+  mmc_put_card
+  mmc_register_driver
+  mmc_release_host
+  mmc_retune_pause
+  mmc_retune_release
+  mmc_retune_unpause
+  mmc_run_bkops
+  __mmc_send_status
+  mmc_send_status
+  mmc_set_data_timeout
+  mmc_start_request
+  mmc_switch
+  mmc_unregister_driver
+  mmc_wait_for_cmd
+  mmc_wait_for_req
+  register_blkdev
+  sg_init_one
+  simple_strtoul
+  string_get_size
+  unregister_blkdev
+
+# required by mmc_spi.ko
+  mmc_gpiod_request_cd_irq
+  spi_bus_lock
+  spi_bus_unlock
+  spi_sync_locked
+
+# required by nvme-core.ko
+  add_uevent_var
+  blk_freeze_queue_start
+  blk_mq_alloc_request
+  blk_mq_alloc_request_hctx
+  blk_mq_delay_kick_requeue_list
+  blk_mq_freeze_queue
+  blk_mq_freeze_queue_wait
+  blk_mq_freeze_queue_wait_timeout
+  blk_mq_request_completed
+  blk_mq_unfreeze_queue
+  blk_mq_unique_tag
+  blk_poll
+  blk_queue_chunk_sectors
+  blk_queue_flag_test_and_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_max_discard_segments
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_virt_boundary
+  blk_rq_map_kern
+  blk_rq_map_user
+  blk_rq_unmap_user
+  blk_set_queue_dying
+  blk_status_to_errno
+  blk_sync_queue
+  bpf_trace_run1
+  bpf_trace_run2
+  cleanup_srcu_struct
+  completion_done
+  device_add
+  device_del
+  device_remove_file_self
+  dev_pm_qos_expose_latency_tolerance
+  dev_pm_qos_hide_latency_tolerance
+  dev_pm_qos_update_user_latency_tolerance
+  ida_destroy
+  __init_rwsem
+  init_srcu_struct
+  kasprintf
+  kobject_uevent_env
+  list_sort
+  memchr_inv
+  param_ops_byte
+  param_ops_ulong
+  queue_delayed_work_on
+  refcount_inc_not_zero_checked
+  revalidate_disk
+  synchronize_srcu
+  sysfs_create_link
+  sysfs_remove_link
+  trace_print_symbols_seq
+  trace_seq_putc
+  uuid_null
+
+# required by nvme.ko
+  async_schedule_node
+  blk_mq_map_queues
+  blk_mq_pci_map_queues
+  blk_mq_tag_to_rq
+  blk_mq_update_nr_hw_queues
+  __cpu_possible_mask
+  device_release_driver
+  dma_max_mapping_size
+  __do_once_done
+  __do_once_start
+  mempool_alloc
+  mempool_create_node
+  mempool_destroy
+  mempool_free
+  mempool_kfree
+  mempool_kmalloc
+  param_get_int
+  param_set_int
+  pci_alloc_irq_vectors_affinity
+  pci_device_is_present
+  pci_disable_device
+  pcie_aspm_enabled
+  pci_enable_device_mem
+  pci_free_irq
+  pci_free_irq_vectors
+  pci_irq_vector
+  pci_load_saved_state
+  pci_read_config_word
+  pci_release_selected_regions
+  pci_request_irq
+  pci_request_selected_regions
+  pci_restore_state
+  pci_save_state
+  pci_select_bars
+  pci_set_master
+  sysfs_remove_file_from_group
+  wait_for_completion_io_timeout
+
+# required by of_mmc_spi.ko
+  mmc_of_parse_voltage
+
+# required by ohci-hcd.ko
+  device_set_wakeup_capable
+  gen_pool_dma_alloc_align
+  gen_pool_dma_zalloc_align
+  gen_pool_free_owner
+  sb800_prefetch
+  schedule_timeout_uninterruptible
+  usb_amd_dev_put
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_calc_bus_time
+  usb_debug_root
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hc_died
+  usb_hcd_link_urb_to_ep
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcds_loaded
+  usb_hcd_unlink_urb_from_ep
+  usb_root_hub_lost_power
+
+# required by ohci-pci.ko
+  pci_dev_put
+  pci_get_slot
+  pci_match_id
+  usb_amd_prefetch_quirk
+  usb_amd_quirk_pll_check
+  usb_hcd_pci_pm_ops
+  usb_hcd_pci_probe
+  usb_hcd_pci_remove
+  usb_hcd_pci_shutdown
+
+# required by ohci-platform.ko
+  device_wakeup_enable
+  devm_reset_control_array_get
+  usb_add_hcd
+  usb_create_hcd
+  usb_hcd_platform_shutdown
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by page_pool.ko
+  contig_page_data
+  mod_node_page_state
+
+# required by phy-hi3660-usb3.ko
+  __devm_of_phy_provider_register
+  devm_phy_create
+  of_phy_simple_xlate
+
+# required by reboot-mode.ko
+  kstrdup_const
+  register_reboot_notifier
+  unregister_reboot_notifier
+
+# required by rfkill-gpio.ko
+  device_property_read_string
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_find_type
+  rfkill_register
+  rfkill_unregister
+
+# required by rtc-efi.ko
+  devm_rtc_device_register
+  efi
+  __platform_driver_probe
+  rtc_valid_tm
+  rtc_year_days
+
+# required by snd-soc-hdmi-codec.ko
+  devm_snd_soc_register_component
+  hdmi_audio_infoframe_init
+  snd_ctl_add
+  snd_ctl_new1
+  snd_pcm_add_chmap_ctls
+  snd_pcm_create_iec958_consumer_hw_params
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_eld
+  snd_soc_dapm_add_routes
+  snd_soc_jack_report
+
+# required by snd-soc-simple-card-utils.ko
+  devm_get_clk_from_child
+  devm_kasprintf
+  devm_kvasprintf
+  snd_soc_card_jack_new
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_get_pin_switch
+  snd_soc_dapm_info_pin_switch
+  snd_soc_dapm_put_pin_switch
+  snd_soc_jack_add_gpios
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_audio_simple_widgets
+  snd_soc_of_parse_card_name
+  snd_soc_of_parse_daifmt
+
+# required by snd-soc-simple-card.ko
+  devm_snd_soc_register_card
+  of_device_is_available
+  of_get_next_child
+  of_get_parent
+  of_parse_phandle_with_args
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_node_prefix
+  snd_soc_of_parse_tdm_slot
+  snd_soc_pm_ops
+
+# required by spi-pl022.ko
+  devm_gpio_request
+  devm_spi_register_controller
+  dma_request_chan
+  __dma_request_channel
+  gpiod_direction_output_raw
+  gpiod_set_raw_value
+  loops_per_jiffy
+  pinctrl_pm_select_idle_state
+  __spi_alloc_controller
+  spi_controller_resume
+  spi_controller_suspend
+  spi_finalize_current_message
+  spi_get_next_queued_message
+  __udelay
+
+# required by spidev.ko
+  device_create
+  device_destroy
+  __register_chrdev
+  stream_open
+  __unregister_chrdev
+
+# required by system_heap.ko
+  dma_heap_get_dev
+  __sg_page_iter_next
+  __sg_page_iter_start
+
+# required by tcpci.ko
+  device_get_named_child_node
+  tcpm_cc_change
+  tcpm_pd_hard_reset
+  tcpm_pd_receive
+  tcpm_pd_transmit_complete
+  tcpm_register_port
+  tcpm_tcpc_reset
+  tcpm_unregister_port
+  tcpm_vbus_change
+
+# required by tcpci_rt1711h.ko
+  i2c_smbus_read_word_data
+
+# required by wl18xx.ko
+  __cfg80211_alloc_event_skb
+  __cfg80211_send_event_skb
+  get_random_bytes
+  ieee80211_radar_detected
+  kstrtou8_from_user
+  nla_put
+
+# required by wlcore.ko
+  bcmp
+  cfg80211_find_elem_match
+  cfg80211_find_vendor_elem
+  complete_all
+  consume_skb
+  device_create_bin_file
+  device_remove_bin_file
+  dev_pm_clear_wake_irq
+  dev_pm_set_dedicated_wake_irq
+  disable_irq_nosync
+  get_random_u32
+  ieee80211_alloc_hw_nm
+  ieee80211_ap_probereq_get
+  ieee80211_beacon_get_tim
+  ieee80211_chswitch_done
+  ieee80211_cqm_beacon_loss_notify
+  ieee80211_cqm_rssi_notify
+  ieee80211_csa_finish
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_freq_khz_to_channel
+  ieee80211_hdrlen
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_iterate_interfaces
+  ieee80211_nullfunc_get
+  ieee80211_probereq_get
+  ieee80211_proberesp_get
+  ieee80211_pspoll_get
+  ieee80211_queue_work
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_report_low_ack
+  ieee80211_restart_hw
+  ieee80211_rx_napi
+  ieee80211_scan_completed
+  ieee80211_sched_scan_results
+  ieee80211_sched_scan_stopped
+  ieee80211_sta_ps_transition
+  ieee80211_stop_queue
+  ieee80211_stop_queues
+  ieee80211_tx_status
+  ieee80211_unregister_hw
+  ieee80211_wake_queue
+  ieee80211_wake_queues
+  jiffies_to_msecs
+  jiffies_to_usecs
+  __local_bh_enable_ip
+  mutex_lock_interruptible
+  __netdev_alloc_skb
+  __nla_parse
+  no_seek_end_llseek
+  request_firmware_nowait
+  rfc1042_header
+  skb_dequeue
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_trim
+  vscnprintf
+  wait_for_completion
+  wiphy_to_ieee80211_hw
+
+# required by wlcore_sdio.ko
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  print_hex_dump
+  sdio_claim_host
+  sdio_disable_func
+  sdio_enable_func
+  sdio_f0_readb
+  sdio_f0_writeb
+  sdio_get_host_pm_caps
+  sdio_memcpy_fromio
+  sdio_memcpy_toio
+  sdio_readsb
+  sdio_register_driver
+  sdio_release_host
+  sdio_set_block_size
+  sdio_set_host_pm_flags
+  sdio_unregister_driver
+  sdio_writesb
diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom
new file mode 100644
index 0000000..ef1d098
--- /dev/null
+++ b/android/abi_gki_aarch64_qcom
@@ -0,0 +1,2412 @@
+[abi_symbol_list]
+  add_device_randomness
+  add_timer
+  add_timer_on
+  add_uevent_var
+  add_wait_queue
+  adjust_managed_page_count
+  alarm_cancel
+  alarm_init
+  alarm_start_relative
+  alloc_chrdev_region
+  __alloc_disk_node
+  alarmtimer_get_rtcdev
+  alloc_etherdev_mqs
+  alloc_io_pgtable_ops
+  alloc_netdev_mqs
+  alloc_pages_exact
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_skb_with_frags
+  alloc_workqueue
+  amba_bustype
+  arch_bpf_jit_check_func
+  __arch_clear_user
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  autoremove_wake_function
+  backlight_device_get_by_type
+  backlight_device_register
+  backlight_device_set_brightness
+  backlight_device_unregister
+  bin2hex
+  __bitmap_clear
+  bitmap_find_next_zero_area_off
+  bitmap_free
+  bitmap_parselist
+  bitmap_print_to_pagebuf
+  __bitmap_set
+  __bitmap_subset
+  bitmap_zalloc
+  blk_cleanup_queue
+  blk_execute_rq
+  blk_execute_rq_nowait
+  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_can_use_dma_map_merging
+  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_discard_segments
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_max_segment_size
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_rq_timeout
+  blk_queue_update_dma_alignment
+  blk_queue_write_cache
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_rq_map_user
+  blk_rq_map_user_iov
+  blk_rq_unmap_user
+  blk_status_to_errno
+  blk_update_request
+  blk_verify_command
+  blocking_notifier_call_chain
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_prog_add
+  bpf_prog_put
+  bpf_prog_sub
+  bpf_stats_enabled_key
+  bpf_trace_run10
+  bpf_trace_run11
+  bpf_trace_run12
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  bpf_trace_run5
+  bpf_trace_run6
+  bpf_trace_run7
+  bpf_trace_run8
+  bpf_warn_invalid_xdp_action
+  bprm_change_interp
+  build_skb
+  bus_find_device
+  bus_for_each_dev
+  bus_register
+  bus_set_iommu
+  bus_unregister
+  call_netdevice_notifiers
+  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_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  cfg80211_calculate_bitrate
+  cfg80211_chandef_create
+  cfg80211_ch_switch_notify
+  cfg80211_connect_done
+  cfg80211_del_sta_sinfo
+  cfg80211_disconnected
+  cfg80211_ft_event
+  cfg80211_get_bss
+  cfg80211_gtk_rekey_notify
+  cfg80211_inform_bss_data
+  cfg80211_inform_bss_frame_data
+  cfg80211_mgmt_tx_status
+  cfg80211_michael_mic_failure
+  cfg80211_new_sta
+  cfg80211_pmksa_candidate_notify
+  cfg80211_put_bss
+  cfg80211_ready_on_channel
+  cfg80211_remain_on_channel_expired
+  cfg80211_roamed
+  cfg80211_rx_mgmt
+  cfg80211_rx_unprot_mlme_mgmt
+  cfg80211_scan_done
+  cfg80211_sched_scan_results
+  __cfg80211_send_event_skb
+  cfg80211_tdls_oper_request
+  cfg80211_unlink_bss
+  cfg80211_vendor_cmd_reply
+  check_disk_change
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  class_interface_unregister
+  __class_register
+  class_unregister
+  cleanup_srcu_struct
+  clear_inode
+  clear_page
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_get_all
+  clk_bulk_prepare
+  clk_bulk_put_all
+  clk_bulk_unprepare
+  __clk_determine_rate
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_fixed_rate_ops
+  clk_get
+  __clk_get_hw
+  __clk_get_name
+  clk_get_parent
+  clk_get_rate
+  clk_get_sys
+  clk_hw_get_flags
+  clk_hw_get_name
+  clk_hw_get_num_parents
+  clk_hw_get_parent
+  clk_hw_get_parent_by_index
+  clk_hw_get_rate
+  clk_hw_is_enabled
+  clk_hw_is_prepared
+  clk_hw_round_rate
+  __clk_is_enabled
+  __clk_mux_determine_rate_closest
+  clk_prepare
+  clk_put
+  clk_register
+  clk_round_rate
+  clk_set_parent
+  clk_set_rate
+  clk_sync_state
+  clk_unprepare
+  __close_fd
+  cma_alloc
+  cma_get_name
+  cma_release
+  compat_alloc_user_space
+  complete
+  complete_all
+  complete_and_exit
+  completion_done
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_match_add_release
+  component_unbind_all
+  config_ep_by_speed
+  config_group_init_type_name
+  config_item_put
+  console_stop
+  console_suspend_enabled
+  __const_udelay
+  consume_skb
+  contig_page_data
+  _copy_from_iter_full
+  copy_page
+  copy_strings_kernel
+  _copy_to_iter
+  cpu_bit_bitmap
+  cpu_down
+  cpufreq_cpu_get
+  cpufreq_cpu_put
+  cpufreq_generic_attr
+  cpufreq_quick_get_max
+  cpufreq_register_driver
+  cpufreq_register_notifier
+  cpufreq_unregister_driver
+  cpufreq_unregister_notifier
+  cpufreq_update_policy
+  __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
+  cpu_pm_register_notifier
+  cpu_pm_unregister_notifier
+  __cpu_possible_mask
+  __cpu_present_mask
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_subsys
+  cpu_topology
+  cpu_up
+  crc32_le
+  crc8
+  crc8_populate_msb
+  crypto_ablkcipher_type
+  crypto_aead_encrypt
+  crypto_aead_setauthsize
+  crypto_aead_setkey
+  crypto_alloc_aead
+  crypto_alloc_base
+  crypto_alloc_shash
+  crypto_alloc_skcipher
+  crypto_dequeue_request
+  crypto_destroy_tfm
+  crypto_enqueue_request
+  crypto_init_queue
+  crypto_register_alg
+  crypto_register_rngs
+  crypto_shash_final
+  crypto_shash_setkey
+  crypto_shash_update
+  crypto_skcipher_decrypt
+  crypto_skcipher_encrypt
+  crypto_unregister_alg
+  crypto_unregister_rngs
+  csum_ipv6_magic
+  csum_partial
+  csum_tcpudp_nofold
+  _ctype
+  current_time
+  datagram_poll
+  d_drop
+  default_llseek
+  default_wake_function
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer
+  del_timer_sync
+  dentry_open
+  dequeue_signal
+  desc_to_gpio
+  destroy_workqueue
+  dev_add_pack
+  dev_alloc_name
+  dev_close
+  _dev_crit
+  dev_driver_string
+  _dev_emerg
+  _dev_err
+  devfreq_add_device
+  devfreq_add_governor
+  devfreq_cooling_unregister
+  devfreq_remove_device
+  devfreq_remove_governor
+  devfreq_resume_device
+  devfreq_suspend_device
+  dev_fwnode
+  __dev_get_by_index
+  dev_get_by_index
+  dev_get_by_index_rcu
+  dev_get_by_name
+  dev_get_regmap
+  dev_get_stats
+  device_add
+  device_add_disk
+  device_connection_find_match
+  device_create
+  device_create_file
+  device_create_with_groups
+  device_del
+  device_destroy
+  device_find_child
+  device_for_each_child
+  device_get_child_node_count
+  device_get_match_data
+  device_get_next_child_node
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_link_del
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_string
+  device_property_read_u32_array
+  device_property_read_u8_array
+  device_register
+  device_remove_file
+  device_set_wakeup_capable
+  device_show_int
+  device_store_int
+  device_unregister
+  device_wakeup_disable
+  device_wakeup_enable
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_backlight_device_register
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_bulk_get_optional
+  devm_clk_get
+  devm_clk_get_optional
+  devm_clk_hw_register
+  devm_clk_put
+  devm_clk_register
+  dev_mc_sync_multiple
+  dev_mc_unsync
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  devm_extcon_register_notifier
+  devm_free_irq
+  devm_fwnode_get_index_gpiod_from_child
+  devm_gpiod_get_index
+  devm_gpiod_get_optional
+  devm_gpio_request_one
+  devm_iio_channel_get
+  devm_iio_device_alloc
+  __devm_iio_device_register
+  devm_input_allocate_device
+  devm_ioremap
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_ioremap_wc
+  devm_iounmap
+  devm_kasprintf
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_kstrdup
+  devm_led_classdev_register_ext
+  devm_nvmem_cell_get
+  devm_nvmem_device_get
+  devm_nvmem_register
+  devm_of_clk_add_hw_provider
+  devm_of_pci_get_host_bridge_resources
+  __devm_of_phy_provider_register
+  devm_of_platform_populate
+  devm_of_pwm_get
+  devm_pci_alloc_host_bridge
+  devm_phy_create
+  devm_phy_get
+  devm_pinctrl_get
+  devm_pinctrl_put
+  devm_pinctrl_register
+  devm_platform_ioremap_resource
+  devm_power_supply_get_by_phandle
+  devm_power_supply_register
+  devm_pwm_put
+  devm_regmap_add_irq_chip
+  devm_regmap_del_irq_chip
+  devm_regmap_field_alloc
+  __devm_regmap_init
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_bulk_get
+  devm_regulator_get
+  devm_regulator_get_optional
+  devm_regulator_put
+  devm_regulator_register
+  devm_regulator_register_notifier
+  devm_request_any_context_irq
+  devm_request_pci_bus_resources
+  __devm_request_region
+  devm_request_threaded_irq
+  devm_reset_control_array_get
+  __devm_reset_control_get
+  devm_reset_controller_register
+  devm_rtc_allocate_device
+  devm_rtc_device_register
+  devm_snd_soc_register_card
+  devm_thermal_zone_of_sensor_register
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  _dev_notice
+  dev_open
+  dev_pm_domain_attach
+  dev_pm_domain_detach
+  dev_pm_opp_add
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_find_freq_exact
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_get_opp_count
+  dev_pm_opp_get_opp_table
+  dev_pm_opp_get_voltage
+  dev_pm_opp_put
+  dev_pm_opp_put_opp_table
+  dev_pm_opp_register_notifier
+  dev_pm_opp_remove
+  dev_pm_opp_unregister_notifier
+  dev_printk
+  dev_pm_qos_add_request
+  dev_pm_qos_remove_request
+  dev_pm_qos_update_request
+  dev_queue_xmit
+  dev_remove_pack
+  devres_add
+  devres_destroy
+  devres_free
+  devres_release
+  dev_set_mac_address
+  dev_set_mtu
+  dev_set_name
+  dev_uc_sync_multiple
+  dev_uc_unsync
+  _dev_warn
+  d_instantiate
+  disable_irq
+  disable_irq_nosync
+  disable_percpu_irq
+  divider_get_val
+  divider_recalc_rate
+  divider_ro_round_rate_parent
+  divider_round_rate_parent
+  dma_alloc_attrs
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_begin_cpu_access_partial
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_end_cpu_access_partial
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_get_flags
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_direct_map_page
+  dma_direct_map_resource
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_direct_unmap_sg
+  dma_fence_add_callback
+  dma_fence_array_create
+  dma_fence_array_ops
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_enable_sw_signaling
+  dma_fence_get_status
+  dma_fence_init
+  dma_fence_match_context
+  dma_fence_release
+  dma_fence_remove_callback
+  dma_fence_signal
+  dma_fence_signal_locked
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_get_merge_boundary
+  dma_get_sgtable_attrs
+  dma_get_slave_channel
+  dma_max_mapping_size
+  dma_mmap_attrs
+  dma_pool_alloc
+  dma_pool_create
+  dma_pool_destroy
+  dma_pool_free
+  dma_release_channel
+  dma_request_slave_channel
+  dma_resv_add_excl_fence
+  dma_resv_add_shared_fence
+  dma_resv_copy_fences
+  dma_resv_fini
+  dma_resv_init
+  dma_resv_reserve_shared
+  dma_resv_test_signaled_rcu
+  dma_resv_wait_timeout_rcu
+  dma_set_coherent_mask
+  dma_set_mask
+  dmam_alloc_attrs
+  do_exit
+  do_wait_intr
+  down
+  down_read
+  down_write
+  dput
+  drain_workqueue
+  driver_find_device
+  driver_register
+  driver_unregister
+  drm_add_edid_modes
+  drm_add_modes_noedid
+  drm_atomic_commit
+  drm_atomic_get_connector_state
+  drm_atomic_get_crtc_state
+  drm_atomic_get_plane_state
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_duplicated_state
+  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_destroy_state
+  __drm_atomic_helper_connector_duplicate_state
+  drm_atomic_helper_connector_duplicate_state
+  __drm_atomic_helper_connector_reset
+  drm_atomic_helper_connector_reset
+  __drm_atomic_helper_crtc_destroy_state
+  drm_atomic_helper_crtc_destroy_state
+  __drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_duplicate_state
+  drm_atomic_helper_crtc_reset
+  drm_atomic_helper_dirtyfb
+  drm_atomic_helper_disable_plane
+  drm_atomic_helper_duplicate_state
+  drm_atomic_helper_page_flip
+  drm_atomic_helper_plane_destroy_state
+  __drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_prepare_planes
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_swap_state
+  drm_atomic_helper_update_legacy_modeset_state
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_fences
+  drm_atomic_helper_wait_for_vblanks
+  drm_atomic_set_crtc_for_connector
+  drm_atomic_set_fence_for_plane
+  drm_atomic_set_mode_for_crtc
+  drm_atomic_state_alloc
+  drm_atomic_state_clear
+  drm_atomic_state_default_clear
+  drm_atomic_state_default_release
+  __drm_atomic_state_free
+  drm_atomic_state_init
+  drm_bridge_attach
+  drm_bridge_disable
+  drm_bridge_enable
+  drm_bridge_mode_set
+  drm_bridge_post_disable
+  drm_bridge_pre_enable
+  drm_class_device_register
+  drm_class_device_unregister
+  drm_clflush_pages
+  drm_client_init
+  drm_client_modeset_commit_force
+  drm_client_register
+  drm_compat_ioctl
+  drm_connector_attach_edid_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_list_iter_begin
+  drm_connector_list_iter_end
+  drm_connector_list_iter_next
+  drm_connector_register
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_crtc_vblank_reset
+  drm_crtc_wait_one_vblank
+  drm_cvt_mode
+  drm_dbg
+  drm_debug
+  drm_detect_hdmi_monitor
+  drm_detect_monitor_audio
+  drm_dev_alloc
+  drm_dev_dbg
+  drm_dev_printk
+  drm_dev_put
+  drm_dev_register
+  drm_dev_set_unique
+  drm_dev_unregister
+  drm_do_get_edid
+  drm_dp_atomic_find_vcpi_slots
+  drm_dp_atomic_release_vcpi_slots
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_bw_code_to_link_rate
+  drm_dp_calc_pbn_mode
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_dp_find_vcpi_slots
+  drm_dp_get_adjust_request_pre_emphasis
+  drm_dp_get_adjust_request_voltage
+  drm_dp_link_configure
+  drm_dp_link_power_down
+  drm_dp_link_power_up
+  drm_dp_link_probe
+  drm_dp_link_rate_to_bw_code
+  drm_dp_link_train_channel_eq_delay
+  drm_dp_link_train_clock_recovery_delay
+  drm_dp_mst_allocate_vcpi
+  drm_dp_mst_deallocate_vcpi
+  drm_dp_mst_detect_port
+  drm_dp_mst_get_edid
+  drm_dp_mst_hpd_irq
+  drm_dp_mst_reset_vcpi_slots
+  drm_dp_mst_topology_mgr_destroy
+  drm_dp_mst_topology_mgr_init
+  drm_dp_mst_topology_mgr_set_mst
+  drm_dp_send_power_updown_phy
+  drm_dp_update_payload_part1
+  drm_dp_update_payload_part2
+  drm_edid_duplicate
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_err
+  drm_event_reserve_init_locked
+  drm_format_info
+  drm_framebuffer_init
+  drm_framebuffer_lookup
+  drm_framebuffer_remove
+  drm_framebuffer_unregister_private
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create_handle
+  drm_gem_fb_destroy
+  drm_gem_fb_get_obj
+  drm_gem_free_mmap_offset
+  drm_gem_get_pages
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  drm_gem_object_lookup
+  drm_gem_object_put
+  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_mmap
+  drm_gem_private_object_init
+  drm_gem_put_pages
+  drm_gem_vm_close
+  drm_gem_vm_open
+  drm_get_connector_status_name
+  drm_get_edid
+  drm_get_format_info
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_helper_probe_single_connector_modes
+  drm_ioctl
+  drm_irq_install
+  drm_irq_uninstall
+  drm_kms_helper_hotplug_event
+  drm_kms_helper_poll_disable
+  drm_kms_helper_poll_enable
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_match_cea_mode
+  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_convert_umode
+  drm_mode_copy
+  drm_mode_create
+  drm_mode_create_dp_colorspace_property
+  drm_mode_debug_printmodeline
+  drm_mode_duplicate
+  drm_mode_equal
+  drm_mode_object_find
+  drm_mode_object_get
+  drm_mode_object_put
+  drm_mode_probed_add
+  drm_modeset_acquire_fini
+  drm_modeset_acquire_init
+  drm_modeset_backoff
+  drm_mode_set_crtcinfo
+  drm_modeset_drop_locks
+  drm_modeset_lock
+  drm_modeset_lock_all
+  drm_modeset_lock_all_ctx
+  drm_mode_set_name
+  drm_modeset_unlock_all
+  drm_mode_vrefresh
+  drm_object_attach_property
+  drm_object_property_set_value
+  drm_of_component_match_add
+  drm_open
+  drm_panel_add
+  drm_panel_init
+  drm_panel_notifier_call_chain
+  drm_panel_notifier_register
+  drm_panel_notifier_unregister
+  drm_panel_remove
+  drm_plane_cleanup
+  drm_plane_create_rotation_property
+  drm_poll
+  drm_prime_gem_destroy
+  drm_prime_pages_to_sg
+  drm_printf
+  __drm_printfn_debug
+  drm_property_blob_get
+  drm_property_blob_put
+  drm_property_create
+  drm_property_create_bitmask
+  drm_property_create_blob
+  drm_property_create_enum
+  drm_property_create_range
+  drm_property_lookup_blob
+  drm_put_dev
+  drm_read
+  drm_release
+  drm_rotation_simplify
+  drm_send_event_locked
+  drm_set_preferred_mode
+  drm_universal_plane_init
+  drm_vblank_init
+  drm_vma_offset_add
+  drm_vma_offset_lookup_locked
+  drm_vma_offset_manager_destroy
+  drm_vma_offset_manager_init
+  drm_vma_offset_remove
+  drop_nlink
+  drm_wait_one_vblank
+  dump_stack
+  enable_irq
+  enable_percpu_irq
+  eth_commit_mac_addr_change
+  ether_setup
+  eth_mac_addr
+  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
+  extcon_find_edev_by_node
+  extcon_get_edev_by_phandle
+  extcon_get_edev_name
+  extcon_get_extcon_dev
+  extcon_get_property
+  extcon_get_state
+  extcon_register_notifier
+  extcon_set_property
+  extcon_set_property_capability
+  extcon_set_state_sync
+  extcon_unregister_notifier
+  fasync_helper
+  fd_install
+  file_path
+  find_last_bit
+  find_next_bit
+  find_next_zero_bit
+  find_snd_usb_substream
+  find_vma
+  finish_wait
+  firmware_request_nowarn
+  flow_keys_basic_dissector
+  flush_dcache_page
+  flush_delayed_work
+  flush_work
+  flush_workqueue
+  fput
+  frame_vector_create
+  frame_vector_destroy
+  frame_vector_to_pages
+  frame_vector_to_pfns
+  free_io_pgtable_ops
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  free_pages_exact
+  free_percpu
+  free_percpu_irq
+  freezing_slow_path
+  freq_qos_add_request
+  freq_qos_remove_request
+  freq_qos_update_request
+  fsl8250_handle_irq
+  fwnode_connection_find_match
+  fwnode_get_parent
+  fwnode_handle_put
+  fwnode_property_present
+  fwnode_property_read_string
+  fwnode_property_read_u16_array
+  fwnode_property_read_u32_array
+  gcd
+  generic_device_group
+  generic_file_llseek
+  generic_handle_irq
+  genlmsg_put
+  genl_register_family
+  genl_unregister_family
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_avail
+  gen_pool_create
+  gen_pool_destroy
+  gen_pool_free_owner
+  gen_pool_size
+  getboottime64
+  get_cpu_device
+  get_device
+  __get_free_pages
+  get_next_ino
+  get_option
+  get_random_bytes
+  get_random_u32
+  __get_task_comm
+  get_tree_single
+  get_unmapped_area
+  get_unused_fd_flags
+  get_user_pages
+  get_vaddr_frames
+  get_zeroed_page
+  gnss_allocate_device
+  gnss_deregister_device
+  gnss_insert_raw
+  gnss_put_device
+  gnss_register_device
+  gpiochip_add_data_with_key
+  gpiochip_add_pin_range
+  gpiochip_generic_free
+  gpiochip_generic_request
+  gpiochip_get_data
+  gpiochip_remove
+  gpiod_cansleep
+  gpiod_direction_input
+  gpiod_direction_output
+  gpiod_direction_output_raw
+  gpiod_get_optional
+  gpiod_get_raw_value
+  gpiod_get_raw_value_cansleep
+  gpiod_get_value
+  gpiod_get_value_cansleep
+  gpiod_is_active_low
+  gpiod_set_debounce
+  gpiod_set_raw_value
+  gpiod_set_raw_value_cansleep
+  gpiod_set_value
+  gpiod_set_value_cansleep
+  gpiod_to_irq
+  gpio_free
+  gpio_free_array
+  gpio_request
+  gpio_request_one
+  gpio_to_desc
+  gro_cells_destroy
+  gro_cells_init
+  gro_cells_receive
+  handle_edge_irq
+  handle_level_irq
+  handle_nested_irq
+  handle_simple_irq
+  hex2bin
+  hex_dump_to_buffer
+  hex_to_bin
+  hrtimer_active
+  hrtimer_cancel
+  hrtimer_forward
+  __hrtimer_get_remaining
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  hwrng_register
+  hwrng_unregister
+  hwspin_lock_free
+  hwspin_lock_register
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  hwspin_lock_unregister
+  __hwspin_unlock
+  i2c_add_adapter
+  i2c_del_adapter
+  i2c_del_driver
+  i2c_get_dma_safe_msg_buf
+  i2c_put_dma_safe_msg_buf
+  i2c_register_driver
+  i2c_transfer
+  i2c_transfer_buffer_flags
+  icc_get
+  icc_link_create
+  icc_node_add
+  icc_node_create
+  icc_node_del
+  icc_node_destroy
+  icc_provider_add
+  icc_provider_del
+  icc_put
+  icc_set_bw
+  icc_set_tag
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  idr_alloc
+  idr_alloc_cyclic
+  idr_destroy
+  idr_find
+  idr_for_each
+  idr_get_next
+  idr_preload
+  idr_remove
+  idr_replace
+  ieee80211_hdrlen
+  iio_channel_get
+  iio_channel_release
+  iio_read_channel_processed
+  import_iovec
+  in_egroup_p
+  init_dummy_netdev
+  init_net
+  __init_rwsem
+  init_timer_key
+  init_uts_ns
+  init_wait_entry
+  __init_waitqueue_head
+  input_alloc_absinfo
+  input_allocate_device
+  input_close_device
+  input_event
+  input_ff_create
+  input_ff_destroy
+  input_free_device
+  input_mt_init_slots
+  input_mt_report_pointer_emulation
+  input_mt_report_slot_state
+  input_open_device
+  input_register_device
+  input_register_handle
+  input_register_handler
+  input_set_abs_params
+  input_set_capability
+  input_unregister_device
+  input_unregister_handle
+  input_unregister_handler
+  invalidate_mapping_pages
+  iomem_resource
+  iommu_alloc_resv_region
+  iommu_attach_device
+  iommu_detach_device
+  iommu_device_register
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_domain_get_attr
+  iommu_domain_set_attr
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_map
+  iommu_map_sg
+  iommu_present
+  iommu_put_dma_cookie
+  iommu_set_fault_handler
+  iommu_unmap
+  ion_alloc
+  ion_buffer_zero
+  __ion_device_add_heap
+  ion_free
+  ion_heap_map_kernel
+  ion_heap_map_user
+  ion_heap_unmap_kernel
+  __ioremap
+  iounmap
+  __iowrite32_copy
+  ip_compute_csum
+  iput
+  __ipv6_addr_type
+  ipv6_ext_hdr
+  ipv6_skip_exthdr
+  irq_chip_ack_parent
+  irq_chip_mask_parent
+  irq_chip_set_type_parent
+  irq_chip_set_wake_parent
+  irq_chip_unmask_parent
+  irq_create_fwspec_mapping
+  irq_dispose_mapping
+  __irq_domain_add
+  irq_domain_alloc_irqs_parent
+  irq_domain_create_hierarchy
+  irq_domain_free_irqs_common
+  irq_domain_free_irqs_parent
+  irq_domain_get_irq_data
+  irq_domain_remove
+  irq_domain_set_hwirq_and_chip
+  irq_domain_set_info
+  irq_domain_xlate_onecell
+  irq_domain_xlate_twocell
+  irq_find_mapping
+  irq_find_matching_fwspec
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_affinity_hint
+  irq_set_affinity_notifier
+  irq_set_chained_handler_and_data
+  irq_set_chip_and_handler_name
+  irq_set_chip_data
+  irq_set_irqchip_state
+  irq_set_irq_type
+  irq_set_irq_wake
+  irq_set_parent
+  irq_to_desc
+  iterate_fd
+  jiffies
+  jiffies_to_msecs
+  jiffies_to_usecs
+  kasprintf
+  kernel_connect
+  kernel_getsockname
+  kernel_kobj
+  kernel_recvmsg
+  kernel_sendmsg
+  kernel_sigaction
+  kernfs_find_and_get_ns
+  kernfs_notify
+  kernfs_put
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_skb
+  kfree_skb_list
+  kill_fasync
+  kill_litter_super
+  kimage_vaddr
+  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
+  kmemdup_nul
+  kobject_create_and_add
+  kobject_del
+  kobject_init_and_add
+  kobject_put
+  kobject_uevent
+  kobject_uevent_env
+  krealloc
+  kset_create_and_add
+  kset_unregister
+  ksize
+  kstrdup
+  kstrndup
+  kstrtobool
+  kstrtoint
+  kstrtoint_from_user
+  kstrtoll
+  kstrtos8
+  kstrtos8_from_user
+  kstrtou16
+  kstrtou16_from_user
+  kstrtou8
+  kstrtou8_from_user
+  kstrtouint
+  kstrtouint_from_user
+  kstrtoul_from_user
+  kstrtoull
+  kthread_bind
+  kthread_cancel_delayed_work_sync
+  kthread_cancel_work_sync
+  kthread_create_on_node
+  kthread_create_worker
+  kthread_delayed_work_timer_fn
+  kthread_destroy_worker
+  kthread_flush_work
+  kthread_flush_worker
+  __kthread_init_worker
+  kthread_mod_delayed_work
+  kthread_park
+  kthread_parkme
+  kthread_queue_delayed_work
+  kthread_queue_work
+  kthread_should_park
+  kthread_should_stop
+  kthread_stop
+  kthread_unpark
+  kthread_worker_fn
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  ktime_get_ts64
+  ktime_get_with_offset
+  kvfree
+  kvmalloc_node
+  kzfree
+  led_classdev_flash_register_ext
+  led_classdev_flash_unregister
+  led_classdev_register_ext
+  led_classdev_unregister
+  led_trigger_event
+  led_trigger_register_simple
+  led_trigger_unregister_simple
+  list_sort
+  llist_add_batch
+  __local_bh_enable_ip
+  lockref_get
+  lock_sock_nested
+  lookup_one_len
+  mac_pton
+  mark_page_accessed
+  match_string
+  mbox_chan_received_data
+  mbox_chan_txdone
+  mbox_client_txdone
+  mbox_controller_register
+  mbox_controller_unregister
+  mbox_free_channel
+  mbox_request_channel
+  mbox_send_message
+  media_create_pad_link
+  media_device_cleanup
+  media_device_init
+  __media_device_register
+  media_device_unregister
+  media_entity_pads_init
+  memchr
+  memcmp
+  memcpy
+  __memcpy_fromio
+  __memcpy_toio
+  memdup_user
+  memmove
+  memparse
+  memremap
+  memset
+  __memset_io
+  memweight
+  mipi_dsi_create_packet
+  mipi_dsi_dcs_set_display_brightness
+  mipi_dsi_dcs_set_tear_off
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  misc_deregister
+  misc_register
+  mmc_of_parse
+  mmc_send_tuning
+  mod_delayed_work_on
+  mod_node_page_state
+  mod_timer
+  __module_get
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  msleep_interruptible
+  msm_pinctrl_probe
+  msm_pinctrl_remove
+  __mutex_init
+  mutex_is_locked
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  __napi_alloc_skb
+  napi_complete_done
+  napi_consume_skb
+  napi_disable
+  napi_gro_flush
+  napi_gro_receive
+  napi_hash_del
+  __napi_schedule
+  napi_schedule_prep
+  __ndelay
+  __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_pick_tx
+  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_broadcast
+  netlink_capable
+  __netlink_dump_start
+  __netlink_kernel_create
+  netlink_kernel_release
+  netlink_unicast
+  net_ratelimit
+  nf_conntrack_destroy
+  nla_memcpy
+  __nla_parse
+  nla_put_64bit
+  nla_put
+  __nlmsg_put
+  no_llseek
+  nonseekable_open
+  noop_llseek
+  nr_cpu_ids
+  nr_swap_pages
+  ns_capable
+  nsecs_to_jiffies
+  ns_to_timespec64
+  ns_to_timespec
+  __num_online_cpus
+  nvmem_cell_get
+  nvmem_cell_put
+  nvmem_cell_read
+  nvmem_cell_read_u32
+  nvmem_cell_write
+  nvmem_device_read
+  nvmem_device_write
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_add_provider
+  of_clk_del_provider
+  of_clk_get
+  of_clk_get_by_name
+  of_clk_get_from_provider
+  of_clk_get_parent_count
+  of_clk_get_parent_name
+  of_clk_src_onecell_get
+  of_clk_src_simple_get
+  of_count_phandle_with_args
+  of_devfreq_cooling_register
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_big_endian
+  of_device_is_compatible
+  of_device_modalias
+  of_device_uevent_modalias
+  of_dma_configure
+  of_dma_controller_free
+  of_dma_controller_register
+  of_dma_is_coherent
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_matching_node_and_match
+  of_find_node_by_name
+  of_find_node_by_phandle
+  of_find_node_opts_by_path
+  of_find_node_with_property
+  of_find_property
+  of_fwnode_ops
+  of_genpd_add_provider_onecell
+  of_genpd_add_provider_simple
+  of_genpd_del_provider
+  of_get_address
+  of_get_child_by_name
+  of_get_cpu_node
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_parent
+  of_get_property
+  of_get_regulator_init_data
+  of_graph_get_next_endpoint
+  of_graph_get_remote_node
+  of_graph_get_remote_port_parent
+  of_graph_parse_endpoint
+  of_hwspin_lock_get_id
+  of_icc_get
+  of_icc_xlate_onecell
+  of_iomap
+  of_irq_find_parent
+  of_irq_get
+  of_irq_get_byname
+  of_irq_parse_and_map_pci
+  of_irq_parse_one
+  of_machine_is_compatible
+  of_match_device
+  of_match_node
+  of_modalias_node
+  of_n_addr_cells
+  of_node_name_eq
+  of_n_size_cells
+  of_parse_phandle
+  of_parse_phandle_with_args
+  of_phandle_iterator_init
+  of_phandle_iterator_next
+  of_phy_simple_xlate
+  of_platform_depopulate
+  of_platform_device_create
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_string_helper
+  of_property_read_u32_index
+  of_property_read_u64
+  of_property_read_variable_u16_array
+  of_property_read_variable_u32_array
+  of_property_read_variable_u8_array
+  of_prop_next_string
+  of_prop_next_u32
+  of_reserved_mem_device_init_by_idx
+  of_reserved_mem_device_release
+  of_reserved_mem_lookup
+  of_reset_control_array_get
+  of_thermal_get_ntrips
+  of_thermal_get_trip_points
+  of_thermal_is_trip_valid
+  of_translate_address
+  of_usb_get_phy_mode
+  of_usb_host_tpl_support
+  oops_in_progress
+  open_exec
+  panic
+  panic_notifier_list
+  panic_timeout
+  param_array_ops
+  param_get_int
+  param_get_string
+  param_ops_bool
+  param_ops_byte
+  param_ops_charp
+  param_ops_int
+  param_ops_long
+  param_ops_string
+  param_ops_uint
+  param_ops_ullong
+  param_ops_ulong
+  param_set_bool
+  param_set_copystring
+  param_set_int
+  passthru_features_check
+  pci_alloc_irq_vectors_affinity
+  pci_assign_resource
+  pci_assign_unassigned_bus_resources
+  pci_bus_add_devices
+  pci_bus_type
+  pci_clear_master
+  pci_common_swizzle
+  pci_d3cold_disable
+  pci_device_group
+  pci_disable_device
+  pci_disable_msi
+  pcie_capability_read_word
+  pci_enable_device
+  pci_find_capability
+  pci_find_ext_capability
+  pci_find_next_capability
+  pci_find_pcie_root_port
+  pci_free_irq_vectors
+  pci_get_device
+  pci_iomap
+  pci_iomap_range
+  pci_irq_get_affinity
+  pci_irq_vector
+  pci_load_and_free_saved_state
+  pci_load_saved_state
+  pcim_enable_device
+  pci_msi_create_irq_domain
+  pci_msi_mask_irq
+  pci_msi_unmask_irq
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_read_config_word
+  __pci_register_driver
+  pci_release_region
+  pci_release_selected_regions
+  pci_request_region
+  pci_request_selected_regions
+  pci_restore_state
+  pci_save_state
+  pci_scan_root_bus_bridge
+  pci_set_master
+  pci_set_mwi
+  pci_set_power_state
+  pci_store_saved_state
+  pci_unregister_driver
+  pci_walk_bus
+  pci_write_config_dword
+  pci_write_config_word
+  PDE_DATA
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  phy_calibrate
+  phy_exit
+  phy_init
+  phy_pm_runtime_get_sync
+  phy_pm_runtime_put_sync
+  phy_power_off
+  phy_power_on
+  phy_set_mode_ext
+  pinconf_generic_dt_node_to_map
+  pinctrl_dev_get_drvdata
+  pinctrl_lookup_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  pinctrl_select_state
+  pinctrl_utils_free_map
+  pipe_lock
+  pipe_unlock
+  platform_bus_type
+  platform_device_add
+  platform_device_add_data
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_probe
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_irq_byname_optional
+  platform_get_resource
+  platform_get_resource_byname
+  platform_irq_count
+  pm_generic_resume
+  pm_generic_runtime_resume
+  pm_generic_runtime_suspend
+  pm_generic_suspend
+  pm_genpd_add_subdomain
+  pm_genpd_init
+  pm_genpd_remove
+  pm_genpd_remove_subdomain
+  pm_power_off
+  pm_qos_add_notifier
+  pm_qos_add_request
+  pm_qos_remove_notifier
+  pm_qos_remove_request
+  pm_qos_request_active
+  pm_qos_update_request
+  __pm_relax
+  pm_relax
+  pm_runtime_allow
+  pm_runtime_barrier
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  pm_runtime_no_callbacks
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_stay_awake
+  pm_system_wakeup
+  pm_wakeup_dev_event
+  pm_wakeup_ws_event
+  power_supply_changed
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_put
+  power_supply_reg_notifier
+  power_supply_set_property
+  power_supply_unreg_notifier
+  prandom_u32
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_binprm
+  prepare_to_wait
+  prepare_to_wait_event
+  printk
+  proc_create
+  proc_create_data
+  proc_create_net_single
+  proc_dointvec
+  proc_mkdir
+  proc_remove
+  proc_mkdir_data
+  proto_register
+  proto_unregister
+  pskb_expand_head
+  __pskb_pull_tail
+  ___pskb_trim
+  __put_cred
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  put_unused_fd
+  put_vaddr_frames
+  pwm_apply_state
+  pwmchip_add
+  pwmchip_remove
+  qcom_smem_state_get
+  qcom_smem_state_register
+  qcom_smem_state_unregister
+  qcom_smem_state_update_bits
+  qdisc_reset
+  queue_delayed_work_on
+  queue_work_on
+  radix_tree_iter_delete
+  radix_tree_maybe_preload
+  radix_tree_next_chunk
+  ___ratelimit
+  rational_best_approximation
+  raw_notifier_call_chain
+  raw_notifier_chain_register
+  raw_notifier_chain_unregister
+  _raw_read_lock
+  _raw_read_lock_bh
+  _raw_read_lock_irq
+  _raw_read_lock_irqsave
+  _raw_read_unlock
+  _raw_read_unlock_bh
+  _raw_read_unlock_irq
+  _raw_read_unlock_irqrestore
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_trylock
+  _raw_spin_trylock_bh
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  _raw_write_lock
+  _raw_write_lock_bh
+  _raw_write_lock_irq
+  _raw_write_lock_irqsave
+  _raw_write_unlock
+  _raw_write_unlock_bh
+  _raw_write_unlock_irq
+  _raw_write_unlock_irqrestore
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_last
+  rb_next
+  rb_prev
+  __rcu_read_lock
+  __rcu_read_unlock
+  rdev_get_drvdata
+  reboot_mode
+  refcount_dec_and_lock
+  refcount_dec_and_test_checked
+  refcount_dec_checked
+  refcount_dec_not_one
+  refcount_inc_checked
+  refcount_inc_not_zero_checked
+  __refrigerator
+  regcache_cache_only
+  regcache_mark_dirty
+  regcache_sync
+  regcache_sync_region
+  __register_binfmt
+  register_blkdev
+  __register_chrdev
+  register_chrdev_region
+  register_inet6addr_notifier
+  register_inetaddr_notifier
+  register_netdev
+  register_netdevice
+  register_netdevice_notifier
+  register_netevent_notifier
+  register_pernet_subsys
+  register_pm_notifier
+  register_reboot_notifier
+  register_restart_handler
+  register_shrinker
+  register_syscore_ops
+  register_sysctl_table
+  regmap_bulk_read
+  regmap_bulk_write
+  regmap_field_read
+  regmap_field_update_bits_base
+  __regmap_init
+  regmap_irq_get_virq
+  regmap_raw_read
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_bulk_disable
+  regulator_count_voltages
+  regulator_disable
+  regulator_disable_deferred
+  regulator_enable
+  regulator_get
+  regulator_get_current_limit
+  regulator_get_drvdata
+  regulator_get_mode
+  regulator_get_voltage
+  regulator_is_enabled
+  regulator_is_supported_voltage
+  regulator_list_voltage
+  regulator_list_voltage_linear
+  regulator_lock
+  regulator_notifier_call_chain
+  regulator_put
+  regulator_register
+  regulator_register_notifier
+  regulator_set_current_limit
+  regulator_set_load
+  regulator_set_mode
+  regulator_set_voltage
+  regulator_unlock
+  regulator_unregister
+  regulator_unregister_notifier
+  regulatory_set_wiphy_regd
+  release_firmware
+  __release_region
+  release_sock
+  remap_pfn_range
+  remap_vmalloc_range
+  remove_arg_zero
+  remove_proc_entry
+  remove_wait_queue
+  report_iommu_fault
+  request_firmware
+  request_firmware_into_buf
+  request_firmware_nowait
+  __request_module
+  __request_percpu_irq
+  __request_region
+  request_threaded_irq
+  reservation_ww_class
+  reset_control_assert
+  reset_control_deassert
+  reset_control_put
+  reset_control_reset
+  revalidate_disk
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_init_sw_state
+  rfkill_register
+  rfkill_unregister
+  round_jiffies
+  rtc_class_close
+  rtc_class_open
+  rtc_read_time
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+  rtc_valid_tm
+  rtnl_is_locked
+  rtnl_link_register
+  rtnl_link_unregister
+  rtnl_lock
+  rtnl_register_module
+  rtnl_trylock
+  rtnl_unlock
+  rtnl_unregister
+  rtnl_unregister_all
+  save_stack_trace
+  save_stack_trace_tsk
+  sched_clock
+  sched_setattr
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  schedule_timeout_interruptible
+  schedule_timeout_uninterruptible
+  scnprintf
+  scsi_add_host_with_dma
+  scsi_autopm_get_device
+  scsi_autopm_put_device
+  scsi_block_when_processing_errors
+  scsi_command_size_tbl
+  scsi_device_get
+  scsi_device_put
+  scsi_eh_prep_cmnd
+  scsi_eh_restore_cmnd
+  scsi_get_host_dev
+  scsi_host_alloc
+  scsi_host_put
+  scsi_ioctl
+  scsi_ioctl_block_when_processing_errors
+  scsi_is_host_device
+  scsi_normalize_sense
+  __scsi_print_sense
+  scsi_register_interface
+  scsi_remove_host
+  scsi_report_bus_reset
+  scsi_report_device_reset
+  scsi_scan_host
+  scsi_sense_desc_find
+  sdev_prefix_printk
+  search_binary_handler
+  security_sock_graft
+  sdhci_add_host
+  sdhci_enable_clk
+  sdhci_get_property
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_remove_host
+  sdhci_reset
+  sdhci_set_bus_width
+  send_sig_info
+  seq_hex_dump
+  seq_lseek
+  seq_open
+  seq_printf
+  seq_putc
+  seq_puts
+  seq_read
+  seq_release
+  seq_vprintf
+  seq_write
+  serdev_device_close
+  serdev_device_open
+  serdev_device_set_baudrate
+  serdev_device_set_flow_control
+  serdev_device_wait_until_sent
+  serdev_device_write
+  serdev_device_write_wakeup
+  serial8250_get_port
+  serial8250_register_8250_port
+  serial8250_resume_port
+  serial8250_suspend_port
+  serial8250_unregister_port
+  set_cpus_allowed_ptr
+  set_disk_ro
+  set_freezable
+  set_normalized_timespec64
+  set_page_dirty
+  set_page_dirty_lock
+  set_user_nice
+  sg_alloc_table
+  __sg_alloc_table_from_pages
+  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_skip
+  sg_miter_start
+  sg_miter_stop
+  sg_nents
+  sg_nents_for_len
+  sg_next
+  __sg_page_iter_next
+  __sg_page_iter_start
+  sg_pcopy_from_buffer
+  sg_pcopy_to_buffer
+  sg_scsi_ioctl
+  shmem_file_setup
+  shmem_read_mapping_page_gfp
+  shmem_truncate_range
+  sigprocmask
+  si_mem_available
+  si_meminfo
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_fill_super
+  simple_open
+  simple_pin_fs
+  simple_read_from_buffer
+  simple_release_fs
+  simple_statfs
+  simple_strtoul
+  simple_write_to_buffer
+  single_open
+  single_release
+  sk_alloc
+  skb_add_rx_frag
+  skb_append_pagefrags
+  skb_checksum
+  skb_clone
+  skb_coalesce_rx_frag
+  skb_copy
+  skb_copy_bits
+  skb_copy_datagram_iter
+  skb_copy_expand
+  skb_dequeue
+  __skb_flow_dissect
+  skb_free_datagram
+  __skb_get_hash
+  __skb_gso_segment
+  __skb_pad
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_pull
+  skb_push
+  skb_put
+  skb_queue_head
+  skb_queue_purge
+  skb_queue_tail
+  skb_recv_datagram
+  skb_set_owner_w
+  skb_store_bits
+  skb_to_sgvec
+  skb_trim
+  skb_tstamp_tx
+  sk_free
+  skip_spaces
+  smp_call_function
+  smp_call_function_single
+  snd_ctl_add
+  snd_ctl_boolean_mono_info
+  snd_ctl_enum_info
+  snd_ctl_new1
+  snd_ctl_notify
+  snd_ctl_remove
+  snd_info_create_card_entry
+  snd_info_create_module_entry
+  snd_info_free_entry
+  snd_info_register
+  snd_jack_set_key
+  snd_pcm_add_chmap_ctls
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_list
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_hw_constraint_step
+  snd_pcm_lib_ioctl
+  snd_pcm_period_elapsed
+  snd_pcm_std_chmaps
+  snd_pcm_stop
+  snd_soc_add_component_controls
+  snd_soc_bytes_tlv_callback
+  snd_soc_card_get_kcontrol
+  snd_soc_card_jack_new
+  snd_soc_component_exit_regmap
+  snd_soc_component_init_regmap
+  snd_soc_component_read32
+  snd_soc_component_update_bits
+  snd_soc_component_write
+  snd_soc_dai_get_channel_map
+  snd_soc_dai_set_channel_map
+  snd_soc_dai_set_fmt
+  snd_soc_dai_set_sysclk
+  snd_soc_dai_set_tdm_slot
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_force_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_volsw
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_kcontrol_widget
+  snd_soc_dapm_mixer_update_power
+  snd_soc_dapm_mux_update_power
+  snd_soc_dapm_new_controls
+  snd_soc_dapm_new_widgets
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_get_enum_double
+  snd_soc_get_volsw
+  snd_soc_get_volsw_sx
+  snd_soc_info_enum_double
+  snd_soc_info_multi_ext
+  snd_soc_info_volsw
+  snd_soc_info_volsw_sx
+  snd_soc_jack_report
+  snd_soc_lookup_component
+  snd_soc_new_compress
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_card_name
+  snd_soc_pm_ops
+  snd_soc_put_enum_double
+  snd_soc_put_volsw
+  snd_soc_put_volsw_sx
+  snd_soc_register_component
+  snd_soc_rtdcom_lookup
+  snd_soc_unregister_card
+  snd_soc_unregister_component
+  snd_timer_interrupt
+  snd_usb_enable_audio_stream
+  snprintf
+  soc_device_register
+  soc_device_unregister
+  sock_alloc_send_skb
+  sock_create_kern
+  sock_diag_register
+  sock_diag_save_cookie
+  sock_diag_unregister
+  sock_efree
+  sock_gettstamp
+  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_release
+  __sock_tx_timestamp
+  sock_unregister
+  softnet_data
+  sort
+  __spi_alloc_controller
+  spi_register_controller
+  __spi_register_driver
+  spi_setup
+  spi_sync
+  spi_unregister_controller
+  __splice_from_pipe
+  split_page
+  spmi_controller_add
+  spmi_controller_alloc
+  spmi_controller_remove
+  __spmi_driver_register
+  spmi_ext_register_read
+  spmi_ext_register_readl
+  spmi_ext_register_write
+  spmi_ext_register_writel
+  spmi_register_read
+  spmi_register_write
+  spmi_register_zero_write
+  sprintf
+  sprint_symbol
+  srcu_init_notifier_head
+  srcu_notifier_call_chain
+  srcu_notifier_chain_register
+  srcu_notifier_chain_unregister
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  stack_trace_print
+  strcasecmp
+  strchr
+  strchrnul
+  strcmp
+  strcpy
+  strcspn
+  strim
+  string_get_size
+  string_unescape
+  strlcat
+  strlcpy
+  strlen
+  strncasecmp
+  strnchr
+  strncmp
+  strncpy
+  strnlen
+  strnstr
+  strpbrk
+  strrchr
+  strreplace
+  strscpy
+  strsep
+  strstr
+  __sw_hweight32
+  __sw_hweight64
+  __sw_hweight8
+  swiotlb_max_segment
+  sync_file_create
+  sync_file_get_fence
+  synchronize_hardirq
+  synchronize_irq
+  synchronize_net
+  synchronize_rcu
+  syscon_node_to_regmap
+  syscon_regmap_lookup_by_phandle
+  sysfs_create_bin_file
+  sysfs_create_file_ns
+  sysfs_create_files
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_bin_file
+  sysfs_remove_file_ns
+  sysfs_remove_files
+  sysfs_remove_group
+  sysfs_remove_groups
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_long_wq
+  system_power_efficient_wq
+  system_state
+  system_unbound_wq
+  system_wq
+  sys_tz
+  __tasklet_hi_schedule
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  __task_pid_nr_ns
+  thermal_cdev_update
+  thermal_cooling_device_unregister
+  thermal_of_cooling_device_register
+  thermal_zone_device_register
+  thermal_zone_device_update
+  thermal_zone_get_temp
+  thermal_zone_get_zone_by_name
+  thermal_zone_of_sensor_register
+  thermal_zone_of_sensor_unregister
+  timer_unstable_counter_workaround
+  timespec64_to_jiffies
+  _totalram_pages
+  __trace_bprintk
+  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_array_seq
+  trace_print_hex_seq
+  trace_raw_output_prep
+  trace_seq_printf
+  tracing_off
+  try_module_get
+  try_wait_for_completion
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  tty_insert_flip_string_fixed_flag
+  typec_altmode_attention
+  typec_altmode_get_partner
+  typec_altmode_notify
+  typec_altmode_update_active
+  typec_altmode_vdm
+  typec_get_drvdata
+  typec_partner_register_altmode
+  typec_port_register_altmode
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_mode
+  typec_set_orientation
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_set_vconn_role
+  typec_unregister_altmode
+  typec_unregister_partner
+  typec_unregister_port
+  uart_add_one_port
+  uart_console_device
+  uart_console_write
+  uart_get_baud_rate
+  uart_insert_char
+  uart_parse_options
+  uart_register_driver
+  uart_remove_one_port
+  uart_resume_port
+  uart_set_options
+  uart_suspend_port
+  uart_unregister_driver
+  uart_update_timeout
+  uart_write_wakeup
+  __udelay
+  __uio_register_device
+  uio_unregister_device
+  unlock_page
+  unmap_mapping_range
+  unregister_binfmt
+  unregister_blkdev
+  __unregister_chrdev
+  unregister_chrdev_region
+  unregister_gadget_item
+  unregister_inet6addr_notifier
+  unregister_inetaddr_notifier
+  unregister_netdev
+  unregister_netdevice_many
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_netevent_notifier
+  unregister_pernet_subsys
+  unregister_pm_notifier
+  unregister_reboot_notifier
+  unregister_shrinker
+  unregister_syscore_ops
+  unregister_sysctl_table
+  up
+  update_devfreq
+  up_read
+  up_write
+  usb_add_gadget_udc
+  usb_add_phy_dev
+  usb_alloc_coherent
+  usb_alloc_dev
+  usb_alloc_urb
+  usb_amd_dev_put
+  usb_amd_pt_check_port
+  usb_amd_quirk_pll_check
+  usb_amd_quirk_pll_disable
+  usb_amd_quirk_pll_enable
+  usb_asmedia_modifyflowcontrol
+  usb_assign_descriptors
+  usb_autopm_get_interface
+  usb_autopm_get_interface_no_resume
+  usb_autopm_put_interface
+  usb_autopm_put_interface_no_suspend
+  usb_bulk_msg
+  usb_clear_halt
+  usb_composite_setup_continue
+  usb_control_msg
+  usb_debug_root
+  usb_decode_ctrl
+  usb_del_gadget_udc
+  usb_deregister
+  usb_disabled
+  usb_disable_xhci_ports
+  usb_driver_claim_interface
+  usb_driver_release_interface
+  usb_enable_autosuspend
+  usb_enable_intel_xhci_ports
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_clear_halt
+  usb_ep_dequeue
+  usb_ep_disable
+  usb_ep_enable
+  usb_ep_fifo_flush
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_halt
+  usb_ep_set_maxpacket_limit
+  usb_ep_set_wedge
+  usb_find_common_endpoints
+  usb_free_all_descriptors
+  usb_free_coherent
+  usb_free_urb
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+  usb_gadget_udc_reset
+  usb_gadget_unmap_request_by_dev
+  usb_gadget_vbus_connect
+  usb_gadget_vbus_disconnect
+  usb_gadget_vbus_draw
+  usb_gadget_wakeup
+  usb_get_current_frame_number
+  usb_get_dev
+  usb_get_dr_mode
+  usb_get_intf
+  usb_get_maximum_speed
+  usb_get_urb
+  usb_gstrings_attach
+  usb_ifnum_to_if
+  usb_interface_id
+  usb_kill_urb
+  usb_lock_device_for_reset
+  usb_match_one_id
+  usb_os_desc_prepare_interf_dir
+  usb_poison_urb
+  usb_put_dev
+  usb_put_function_instance
+  usb_put_intf
+  usb_register_driver
+  usb_register_notify
+  usb_remove_phy
+  usb_reset_device
+  usb_reset_endpoint
+  usb_root_hub_lost_power
+  usb_set_device_state
+  usb_set_interface
+  usb_sg_cancel
+  usb_sg_init
+  usb_sg_wait
+  usb_speed_string
+  usb_string
+  usb_string_id
+  usb_submit_urb
+  usb_unlink_urb
+  usb_unregister_notify
+  usb_wakeup_notification
+  __usecs_to_jiffies
+  usleep_range
+  v4l2_ctrl_find
+  v4l2_ctrl_g_ctrl
+  v4l2_ctrl_get_name
+  v4l2_ctrl_handler_free
+  v4l2_ctrl_handler_init_class
+  v4l2_ctrl_handler_setup
+  v4l2_ctrl_merge
+  __v4l2_ctrl_modify_range
+  v4l2_ctrl_new_custom
+  v4l2_ctrl_new_std
+  v4l2_ctrl_new_std_menu
+  v4l2_ctrl_replace
+  __v4l2_ctrl_s_ctrl
+  v4l2_ctrl_subscribe_event
+  v4l2_device_disconnect
+  v4l2_device_put
+  v4l2_device_register
+  v4l2_device_register_subdev
+  v4l2_device_register_subdev_nodes
+  v4l2_device_unregister
+  v4l2_device_unregister_subdev
+  v4l2_event_dequeue
+  v4l2_event_pending
+  v4l2_event_queue
+  v4l2_event_queue_fh
+  v4l2_event_subscribe
+  v4l2_event_unsubscribe
+  v4l2_fh_add
+  v4l2_fh_del
+  v4l2_fh_exit
+  v4l2_fh_init
+  v4l2_fh_open
+  v4l2_fh_release
+  v4l2_format_info
+  v4l2_prio_init
+  v4l2_s_ctrl
+  v4l2_subdev_call_wrappers
+  v4l2_subdev_init
+  v4l2_type_names
+  vabits_actual
+  vb2_buffer_done
+  vb2_create_bufs
+  vb2_dqbuf
+  vb2_expbuf
+  vb2_fop_mmap
+  vb2_fop_poll
+  vb2_fop_read
+  vb2_fop_release
+  vb2_ioctl_create_bufs
+  vb2_ioctl_dqbuf
+  vb2_ioctl_expbuf
+  vb2_ioctl_prepare_buf
+  vb2_ioctl_qbuf
+  vb2_ioctl_querybuf
+  vb2_ioctl_reqbufs
+  vb2_ioctl_streamoff
+  vb2_ioctl_streamon
+  vb2_mmap
+  vb2_ops_wait_finish
+  vb2_ops_wait_prepare
+  vb2_plane_vaddr
+  vb2_poll
+  vb2_qbuf
+  vb2_querybuf
+  vb2_queue_error
+  vb2_queue_init
+  vb2_queue_release
+  vb2_reqbufs
+  vb2_streamoff
+  vb2_streamon
+  vfree
+  vfs_fsync
+  video_devdata
+  video_device_alloc
+  video_device_release
+  video_device_release_empty
+  video_ioctl2
+  __video_register_device
+  video_unregister_device
+  vmalloc
+  vmalloc_to_page
+  vmalloc_user
+  vmap
+  vmf_insert_mixed
+  vmf_insert_pfn
+  vm_get_page_prot
+  vm_insert_page
+  vm_iomap_memory
+  vprintk
+  vscnprintf
+  vsnprintf
+  vunmap
+  vzalloc
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_killable
+  wait_for_completion_timeout
+  wait_woken
+  __wake_up
+  wake_up_process
+  wakeup_source_register
+  wakeup_source_unregister
+  __warn_printk
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+  woken_wake_function
+  work_busy
+  would_dump
+  ww_mutex_lock
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+  xdp_convert_zc_to_xdp_frame
+  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
diff --git a/android/abi_gki_aarch64_sunxi b/android/abi_gki_aarch64_sunxi
new file mode 100644
index 0000000..de28e51
--- /dev/null
+++ b/android/abi_gki_aarch64_sunxi
@@ -0,0 +1,290 @@
+[abi_symbol_list]
+# commonly used symbols
+  pinctrl_get
+  pinctrl_gpio_set_config
+  of_find_node_by_type
+  kmalloc_order
+  down_interruptible
+  dev_pm_set_wake_irq
+
+# required by ccu-sunxi-ng.ko
+  clk_notifier_register
+  of_clk_hw_register
+  reset_controller_register
+
+# required by sunxi_pinctrl.ko
+  handle_fasteoi_irq
+
+# required by sunxi_uart.ko
+  uart_get_divisor
+  uart_handle_cts_change
+  uart_handle_dcd_change
+  unregister_console
+
+# required by timer-sunxi.ko
+  clockevents_config_and_register
+  __clocksource_register_scale
+  setup_irq
+
+# required by dump_reg.ko
+  class_create_file_ns
+  class_remove_file_ns
+
+# required by sunxi_nand.ko
+  rq_flush_dcache_pages
+
+# required by sunxi_iommu.ko
+  iommu_group_register_notifier
+  iommu_group_alloc
+
+# required by uas.ko
+  int_to_scsilun
+  scmd_printk
+  scsi_block_requests
+  scsi_change_queue_depth
+  scsi_print_command
+  scsi_unblock_requests
+  usb_alloc_streams
+  usb_free_streams
+  usb_kill_anchored_urbs
+  usb_unanchor_urb
+  usb_wait_anchor_empty_timeout
+
+# required by ums-realtek.ko
+  usb_bulk_msg
+
+# required by ums-sddr09.ko
+  usb_reset_configuration
+
+# required by clk-ddr.ko
+  devm_of_iomap
+
+# required by sunxi-dmc.ko
+  devm_devfreq_register_opp_notifier
+
+# required by irq-sunxi-8i-nmi.ko
+  irq_domain_xlate_onetwocell
+  of_io_request_and_map
+
+# required by tee.ko optee.ko
+  gen_pool_best_fit
+  gen_pool_set_algo
+  gen_pool_virt_to_phys
+  dump_page
+
+# required by sunxi_nsi.ko
+  device_remove_groups
+
+# required by sunxi-ce.ko
+  crypto_register_aead
+  crypto_register_ahash
+  crypto_register_rng
+  crypto_unregister_ahash
+  crypto_unregister_rng
+
+# required by required by audio*.ko :
+  __devm_release_region
+  snd_dmaengine_pcm_close_release_chan
+  snd_dmaengine_pcm_get_chan
+  snd_dmaengine_pcm_open_request_chan
+  snd_dmaengine_pcm_pointer
+  snd_dmaengine_pcm_trigger
+  snd_hwparams_to_dma_slave_config
+  snd_soc_add_card_controls
+  snd_soc_dai_set_clkdiv
+  snd_soc_dai_set_pll
+  snd_soc_register_card
+
+# required by xr829.ko
+  bridge_tunnel_header
+  cfg80211_assoc_timeout
+  cfg80211_auth_timeout
+  cfg80211_classify8021d
+  cfg80211_cqm_pktloss_notify
+  cfg80211_rx_assoc_resp
+  cfg80211_rx_mlme_mgmt
+  cfg80211_sched_scan_stopped
+  cfg80211_tx_mlme_mgmt
+  crc32_be
+  __dev_kfree_skb_irq
+  __hw_addr_init
+  __hw_addr_sync
+  __hw_addr_unsync
+  ieee80211_amsdu_to_8023s
+  ieee80211_bss_get_elem
+  ieee80211_data_to_8023_exthdr
+  ieee80211_radiotap_iterator_init
+  ieee80211_radiotap_iterator_next
+  kernel_param_lock
+  kernel_param_unlock
+  round_jiffies_relative
+  sdio_align_size
+  __sw_hweight16
+
+# required by arc4.ko
+  arc4_crypt
+  arc4_setkey
+  crypto_register_skcipher
+  crypto_unregister_skcipher
+  skcipher_walk_done
+  skcipher_walk_virt
+
+# required by vin_v4l2.ko
+  v4l2_i2c_subdev_init
+  media_entity_find_link
+  media_entity_remote_pad
+  __media_entity_setup_link
+  media_entity_setup_link
+  media_graph_walk_init
+  media_graph_walk_next
+  media_graph_walk_start
+  spi_busnum_to_master
+  spi_unregister_device
+  v4l2_ctrl_cluster
+  v4l2_ctrl_new_int_menu
+  v4l2_ctrl_subdev_subscribe_event
+  v4l2_event_subdev_unsubscribe
+  v4l2_g_ctrl
+  v4l2_i2c_new_subdev
+  v4l2_spi_new_subdev
+  v4l_bound_align_image
+  vb2_plane_cookie
+  vb2_dma_contig_set_max_seg_size
+  vb2_dma_contig_clear_max_seg_size
+  vb2_dma_contig_memops
+
+# required by init-input.ko
+  of_find_i2c_device_by_node
+
+# required by ntfs.ko
+  block_is_partially_uptodate
+  buffer_migrate_page
+  create_empty_buffers
+  d_add_ci
+  d_obtain_alias
+  generic_error_remove_page
+  generic_file_open
+  ihold
+  load_nls_default
+  __lock_page
+  make_bad_inode
+  truncate_inode_pages_final
+  __vmalloc
+  io_schedule
+  is_bad_inode
+  end_buffer_read_sync
+
+# required by squashfs.ko
+  get_tree_bdev
+  iget_locked
+  ll_rw_block
+  logfc
+  zlib_inflate
+  zlib_inflateEnd
+  zlib_inflateInit2
+  zlib_inflate_workspacesize
+
+# required by cpufreq_ondemand.ko
+  cpufreq_dbs_governor_init
+  cpufreq_dbs_governor_exit
+  cpufreq_dbs_governor_start
+  cpufreq_dbs_governor_stop
+  cpufreq_dbs_governor_limits
+  store_sampling_rate
+  gov_update_cpu_data
+  dbs_update
+  get_cpu_idle_time_us
+
+# required by disp.ko
+  memblock_free
+
+#required by ehci-sunxi.ko
+  ehci_init_driver
+  ehci_resume
+  ehci_suspend
+
+# required by irq-sun8i-nmi.ko
+  __irq_alloc_domain_generic_chips
+  irq_gc_ack_set_bit
+  irq_gc_mask_clr_bit
+  irq_gc_mask_set_bit
+  irq_generic_chip_ops
+  irq_get_domain_generic_chip
+  irq_setup_alt_chip
+
+# required by lan78xx.ko
+  __bitmap_or
+  fixed_phy_register
+  fixed_phy_unregister
+  __genphy_config_aneg
+  genphy_read_status
+  irq_create_mapping_affinity
+  irq_domain_add_simple
+  mdiobus_read
+  mdiobus_write
+  of_mdiobus_register
+  phy_connect_direct
+  phy_ethtool_get_eee
+  phy_ethtool_ksettings_get
+  phy_ethtool_ksettings_set
+  phy_ethtool_set_eee
+  phy_ethtool_set_wol
+  phy_find_first
+  phy_read_mmd
+  phy_register_fixup_for_uid
+  phy_remove_link_mode
+  phy_unregister_fixup_for_uid
+  phy_write_mmd
+  usb_scuttle_anchored_urbs
+
+# required by pinctrl-sunxi.ko
+  gpiochip_generic_config
+  irq_create_mapping_affinity
+  pinctrl_gpio_direction_input
+  pinctrl_gpio_direction_output
+
+# required by rtc-sunxi-ccu.ko
+  clk_unregister_fixed_factor
+  clk_unregister_fixed_rate
+  clk_unregister_gate
+
+# required by smsc75xx.ko and smsc95xx.ko
+  crc16
+  of_get_mac_address
+  usbnet_defer_kevent
+
+# required by snd-soc-sunxi.ko
+  snd_dmaengine_pcm_open
+  snd_dmaengine_pcm_pointer_no_residue
+
+# required by sun50i-cpufreq-nvmem.ko
+  dev_pm_opp_of_get_opp_desc_node
+  dev_pm_opp_put_prop_name
+  dev_pm_opp_put_supported_hw
+  dev_pm_opp_set_prop_name
+
+# required by sun6i-dma.ko
+  dma_get_any_slave_channel
+
+# required by sunxi-keyboard.ko
+  iio_map_array_register
+  iio_map_array_unregister
+
+# required by sunxi_rfkill.ko
+  rfkill_set_states
+
+# required by aic8800_bsp.ko
+  skb_dequeue_tail
+  wait_for_completion_killable_timeout
+
+# required by aic8800_fbrv.ko
+  cfg80211_cac_event
+  cfg80211_chandef_valid
+  cfg80211_external_auth_request
+  cfg80211_radar_event
+  cfg80211_stop_iface
+
+# required by sunxi_drm_heap.ko
+  xa_erase
+  __xa_alloc
+  xa_load
diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc
new file mode 100644
index 0000000..394770d
--- /dev/null
+++ b/android/abi_gki_aarch64_unisoc
@@ -0,0 +1,2737 @@
+[abi_symbol_list]
+# commonly used symbols
+  add_timer
+  add_uevent_var
+  add_wait_queue
+  add_to_page_cache_lru
+  addrconf_prefix_rcv_add_addr
+  aes_encrypt
+  aes_expandkey
+  alloc_anon_inode
+  alloc_chrdev_region
+  alloc_netdev_mqs
+  alloc_pages_exact
+  __alloc_pages_nodemask
+  __alloc_percpu
+  __alloc_skb
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_in_user
+  __arch_copy_to_user
+  arch_timer_read_counter
+  arm64_const_caps_ready
+  arp_tbl
+  atomic_notifier_call_chain
+  atomic_notifier_chain_register
+  atomic_notifier_chain_unregister
+  bdget_disk
+  bdput
+  bio_add_page
+  bio_alloc_bioset
+  bio_associate_blkg
+  bio_endio
+  bio_put
+  bit_wait
+  blk_alloc_queue
+  blk_finish_plug
+  blk_start_plug
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_make_request
+  blk_queue_max_discard_sectors
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_mq_complete_request
+  __blk_mq_end_request
+  blk_mq_requeue_request
+  blk_mq_run_hw_queues
+  blk_update_request
+  blocking_notifier_chain_register
+  blocking_notifier_chain_unregister
+  bpf_trace_run1
+  bpf_trace_run2
+  bpf_trace_run3
+  bpf_trace_run4
+  __breadahead
+  bus_register
+  bus_set_iommu
+  bus_unregister
+  __close_fd
+  __ClearPageMovable
+  call_rcu
+  cancel_delayed_work
+  cancel_delayed_work_sync
+  cancel_work_sync
+  cdev_add
+  cdev_del
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  class_find_device
+  clear_nlink
+  clear_inode
+  clk_bulk_disable
+  clk_bulk_enable
+  clk_bulk_prepare
+  clk_bulk_unprepare
+  clk_disable
+  clk_enable
+  clk_fixed_factor_ops
+  clk_get_rate
+  clk_prepare
+  clk_put
+  clk_set_parent
+  clk_set_rate
+  clk_unprepare
+  clocks_calc_mult_shift
+  clockevents_config_and_register
+  __clocksource_register_scale
+  cma_alloc
+  cma_for_each_area
+  cma_get_name
+  cma_release
+  compat_alloc_user_space
+  complete
+  complete_all
+  complete_and_exit
+  config_ep_by_speed
+  config_group_init_type_name
+  contig_page_data
+  console_lock
+  console_unlock
+  __const_udelay
+  cpu_have_feature
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpufreq_add_update_util_hook
+  cpufreq_quick_get_max
+  cpufreq_remove_update_util_hook
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  crypto_alloc_base
+  crypto_ahash_digest
+  crypto_ahash_setkey
+  crypto_alloc_ahash
+  crypto_destroy_tfm
+  crypto_has_alg
+  crypto_inc
+  __crypto_memneq
+  crypto_register_aead
+  crypto_register_shash
+  crypto_register_shashes
+  crypto_unregister_aead
+  crypto_unregister_shash
+  crypto_unregister_shashes
+  __crypto_xor
+  csum_ipv6_magic
+  csum_partial
+  __dynamic_netdev_dbg
+  d_make_root
+  d_splice_alias
+  debugfs_create_bool
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_create_regset32
+  debugfs_create_u32
+  debugfs_create_x32
+  debugfs_initialized
+  debugfs_remove
+  debugfs_remove_recursive
+  debugfs_create_symlink
+  dec_zone_page_state
+  default_llseek
+  delayed_work_timer_fn
+  del_timer
+  del_timer_sync
+  destroy_workqueue
+  dev_driver_string
+  _dev_err
+  dev_fwnode
+  dev_get_by_name
+  dev_get_regmap
+  dev_open
+  device_add
+  device_connection_find_match
+  device_create
+  device_create_file
+  device_destroy
+  device_initialize
+  device_init_wakeup
+  device_link_add
+  device_match_fwnode
+  device_match_name
+  device_property_present
+  device_property_read_string
+  device_property_read_u32_array
+  device_register
+  device_remove_file
+  device_set_wakeup_capable
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_add_action
+  devm_backlight_device_register
+  devm_clk_bulk_get
+  devm_clk_bulk_get_all
+  devm_clk_get
+  devm_clk_get_optional
+  devm_free_irq
+  devm_gpiochip_add_data
+  devm_gpiod_get
+  devm_gpio_free
+  devm_gpio_request
+  devm_hwspin_lock_request_specific
+  __devm_iio_device_register
+  devm_ioremap_nocache
+  devm_ioremap_resource
+  devm_kfree
+  devm_kmalloc
+  devm_kmemdup
+  devm_mfd_add_devices
+  devm_nvmem_register
+  devm_of_platform_populate
+  devm_pinctrl_get
+  devm_pinctrl_put
+  devm_power_supply_register
+  __devm_regmap_init
+  __devm_regmap_init_i2c
+  __devm_regmap_init_mmio_clk
+  devm_regulator_get
+  devm_regulator_register
+  devm_request_threaded_irq
+  devm_spi_register_controller
+  devm_usb_get_phy
+  devm_usb_get_phy_by_phandle
+  dev_queue_xmit
+  dev_set_name
+  _dev_warn
+  disable_irq
+  disable_irq_nosync
+  dma_alloc_attrs
+  dma_direct_map_page
+  dma_direct_sync_single_for_cpu
+  dma_direct_sync_single_for_device
+  dma_direct_unmap_page
+  dma_fence_release
+  dma_fence_wait_timeout
+  dma_free_attrs
+  dma_heap_add
+  dma_heap_get_dev
+  dma_heap_get_name
+  dma_max_mapping_size
+  dma_set_mask
+  down
+  dput
+  driver_register
+  driver_unregister
+  drm_atomic_helper_plane_destroy_state
+  drm_atomic_helper_plane_duplicate_state
+  drm_atomic_helper_plane_reset
+  drm_atomic_helper_setup_commit
+  drm_compat_ioctl
+  drm_dbg
+  drm_dev_alloc
+  drm_dev_put
+  drm_dev_register
+  drm_err
+  drm_ioctl
+  drm_ioctl_kernel
+  drm_mm_init
+  drm_mm_insert_node_in_range
+  drm_mm_remove_node
+  drm_mm_takedown
+  drm_mode_config_cleanup
+  drm_mode_config_init
+  drm_open
+  drm_plane_create_color_properties
+  drm_poll
+  drm_read
+  drm_release
+  dst_release
+  dump_stack
+  enable_irq
+  ether_setup
+  eth_type_trans
+  eth_platform_get_mac_address
+  event_triggers_call
+  extcon_find_edev_by_node
+  extcon_get_edev_by_phandle
+  extcon_get_state
+  fb_mode_option
+  __find_get_block
+  find_next_bit
+  finish_wait
+  flush_work
+  flush_workqueue
+  fpsimd_context_busy
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages_exact
+  free_percpu
+  freezing_slow_path
+  fs_bio_set
+  fs_ftype_to_dtype
+  fsync_bdev
+  fwnode_property_present
+  fwnode_property_read_string
+  gen_pool_avail
+  gen_pool_fixed_alloc
+  generic_end_io_acct
+  generic_file_llseek
+  generic_handle_irq
+  generic_mii_ioctl
+  generic_read_dir
+  generic_ro_fops
+  generic_start_io_acct
+  genl_register_family
+  genl_unregister_family
+  gen_pool_add_owner
+  gen_pool_alloc_algo_owner
+  gen_pool_create
+  gen_pool_free_owner
+  genphy_resume
+  get_cpu_device
+  __get_free_pages
+  get_governor_parent_kobj
+  get_random_bytes
+  gov_attr_set_get
+  gov_attr_set_init
+  gov_attr_set_put
+  governor_sysfs_ops
+  gpiochip_get_data
+  gpiochip_line_is_irq
+  gpiod_direction_input
+  gpiod_direction_output_raw
+  gpiod_get
+  gpiod_get_raw_value
+  gpiod_set_raw_value
+  gpiod_set_raw_value_cansleep
+  gpiod_to_chip
+  gpiod_to_irq
+  gpio_free
+  gpio_request
+  gpio_to_desc
+  handle_bad_irq
+  handle_edge_irq
+  handle_level_irq
+  have_governor_per_policy
+  i2c_del_driver
+  i2c_register_driver
+  i2c_smbus_read_byte_data
+  i2c_smbus_read_word_data
+  i2c_smbus_write_byte_data
+  i2c_transfer_buffer_flags
+  icmp6_send
+  ida_alloc_range
+  ida_destroy
+  ida_free
+  idr_alloc
+  idr_destroy
+  idr_find
+  idr_for_each
+  idr_remove
+  ieee80211_channel_to_freq_khz
+  ieee80211_freq_khz_to_channel
+  ieee80211_get_channel_khz
+  iget_failed
+  iget5_locked
+  ignore_console_lock_warning
+  igrab
+  inet_proto_csum_replace4
+  init_net
+  __init_rwsem
+  init_timer_key
+  init_user_ns
+  init_wait_entry
+  init_pseudo
+  init_special_inode
+  __init_waitqueue_head
+  inc_zone_page_state
+  inode_init_once
+  inode_nohighmem
+  input_alloc_absinfo
+  input_allocate_device
+  input_event
+  input_free_device
+  input_mt_get_slot_by_key
+  input_mt_sync_frame
+  input_register_device
+  iommu_alloc_resv_region
+  iommu_attach_device
+  iommu_detach_device
+  iommu_device_link
+  iommu_device_register
+  iommu_device_sysfs_add
+  iommu_device_sysfs_remove
+  iommu_device_unlink
+  iommu_device_unregister
+  iommu_dma_get_resv_regions
+  iommu_domain_alloc
+  iommu_domain_free
+  iommu_domain_get_attr
+  iommu_domain_set_attr
+  iommu_fwspec_add_ids
+  iommu_fwspec_free
+  iommu_get_dma_cookie
+  iommu_get_domain_for_dev
+  iommu_group_alloc
+  iommu_group_get
+  iommu_group_get_for_dev
+  iommu_group_get_iommudata
+  iommu_group_put
+  iommu_group_ref_get
+  iommu_group_remove_device
+  iommu_group_set_iommudata
+  iommu_map
+  iommu_map_sg
+  iommu_present
+  iommu_put_dma_cookie
+  iommu_set_fault_handler
+  iommu_unmap
+  ion_buffer_prep_noncached
+  ion_device_remove_heap
+  __ioremap
+  iounmap
+  iput
+  ip6_find_1stfragopt
+  ip6t_alloc_initial_table
+  ip6t_do_table
+  ip6t_register_table
+  ip6t_unregister_table
+  ipv6_select_ident
+  ip_route_output_flow
+  ipv4_redirect
+  ipv4_update_pmtu
+  ipv6_skip_exthdr
+  ir_lirc_scancode_event
+  ir_raw_gen_manchester
+  ir_raw_gen_pd
+  ir_raw_handler_register
+  ir_raw_handler_unregister
+  ir_raw_gen_pl
+  irq_find_mapping
+  irq_get_irq_data
+  irq_modify_status
+  irq_of_parse_and_map
+  irq_set_irq_type
+  irq_set_irq_wake
+  irq_work_sync
+  is_console_locked
+  jiffies
+  jiffies_to_msecs
+  kern_mount
+  kern_unmount
+  kernel_kobj
+  kasprintf
+  kernel_neon_begin
+  kernel_neon_end
+  __kfifo_alloc
+  __kfifo_free
+  __kfifo_in
+  __kfifo_out
+  kfree
+  kfree_skb
+  kill_anon_super
+  kimage_vaddr
+  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_create_and_add
+  kobject_uevent_env
+  kstrndup
+  kstrtou16
+  kstrtobool
+  kstrtoint
+  kstrtoll
+  kstrtouint
+  kstrtoull
+  kthread_create_on_node
+  kthread_flush_worker
+  kthread_should_stop
+  kthread_stop
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  kzfree
+  LZ4_decompress_safe_partial
+  lzo1x_decompress_safe
+  lzorle1x_1_compress
+  lzo1x_1_compress
+  __list_add_valid
+  __list_del_entry_valid
+  __mdiobus_register
+  mdiobus_alloc_size
+  mdiobus_free
+  mdiobus_unregister
+  memcpy
+  __memcpy_fromio
+  memmove
+  memory_read_from_buffer
+  memparse
+  memset
+  memset64
+  mii_ethtool_get_link_ksettings
+  mii_ethtool_set_link_ksettings
+  mii_check_media
+  mii_ethtool_gset
+  mii_nway_restart
+  mii_link_ok
+  misc_deregister
+  misc_register
+  mod_node_page_state
+  mod_timer
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  nd_tbl
+  neigh_destroy
+  __netdev_alloc_skb
+  __num_online_cpus
+  netif_carrier_off
+  netif_carrier_on
+  netif_rx_ni
+  netif_tx_wake_queue
+  nf_conntrack_destroy
+  nf_conntrack_find_get
+  nf_ct_get_tuplepr
+  nf_ct_invert_tuple
+  nf_ct_l4proto_find
+  nf_register_net_hooks
+  nf_unregister_net_hooks
+  noop_llseek
+  nr_cpu_ids
+  nvmem_cell_get
+  nvmem_cell_put
+  nvmem_cell_read
+  of_address_to_resource
+  of_alias_get_id
+  of_clk_get
+  of_clk_get_parent_count
+  of_count_phandle_with_args
+  of_device_get_match_data
+  of_device_is_available
+  of_device_is_compatible
+  of_dev_put
+  of_find_compatible_node
+  of_find_device_by_node
+  of_find_node_by_name
+  of_find_property
+  of_get_child_by_name
+  of_get_named_gpio_flags
+  of_get_next_available_child
+  of_get_next_child
+  of_get_property
+  of_get_regulator_init_data
+  of_graph_get_remote_node
+  of_irq_get
+  of_match_node
+  of_nvmem_cell_get
+  of_parse_phandle
+  of_parse_phandle_with_args
+  of_parse_phandle_with_fixed_args
+  of_platform_depopulate
+  of_platform_populate
+  of_property_count_elems_of_size
+  of_property_match_string
+  of_property_read_string
+  of_property_read_u32_index
+  of_property_read_u64
+  of_property_read_u64_index
+  of_property_read_variable_u32_array
+  of_prop_next_string
+  oops_in_progress
+  out_of_line_wait_on_bit_lock
+  overflowgid
+  overflowuid
+  panic
+  page_endio
+  page_get_link
+  page_mapping
+  pagecache_get_page
+  param_ops_charp
+  param_ops_uint
+  param_ops_ushort
+  __pci_register_driver
+  pci_set_master
+  pci_unregister_driver
+  PDE_DATA
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  pfn_valid
+  phy_connect
+  phy_disconnect
+  phy_ethtool_get_link_ksettings
+  phy_ethtool_nway_reset
+  phy_ethtool_set_link_ksettings
+  phy_mii_ioctl
+  phy_print_status
+  phy_start
+  phy_stop
+  pinctrl_lookup_state
+  pinctrl_select_state
+  pinctrl_pm_select_default_state
+  pinctrl_pm_select_sleep_state
+  platform_bus_type
+  platform_device_add
+  platform_device_add_properties
+  platform_device_add_resources
+  platform_device_alloc
+  platform_device_put
+  platform_device_register
+  platform_device_register_full
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_irq_byname
+  platform_get_resource
+  platform_get_resource_byname
+  pm_get_active_wakeup_sources
+  pm_power_off
+  __pm_relax
+  pm_runtime_allow
+  __pm_runtime_disable
+  pm_runtime_enable
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  __pm_runtime_idle
+  __pm_runtime_resume
+  pm_runtime_set_autosuspend_delay
+  __pm_runtime_set_status
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  __pm_stay_awake
+  pm_wakeup_ws_event
+  posix_acl_access_xattr_handler
+  posix_acl_default_xattr_handler
+  posix_acl_from_xattr
+  power_supply_changed
+  power_supply_get_battery_info
+  power_supply_get_by_name
+  power_supply_get_drvdata
+  power_supply_get_property
+  power_supply_powers
+  power_supply_put
+  power_supply_reg_notifier
+  power_supply_unreg_notifier
+  ppp_input
+  ppp_register_compressor
+  ppp_unregister_compressor
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  proc_create
+  proc_create_data
+  proc_create_seq_private
+  proc_mkdir
+  __pskb_copy_fclone
+  pskb_expand_head
+  put_device
+  put_pages_list
+  put_tty_driver
+  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_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  _raw_write_lock
+  _raw_write_unlock
+  __rcu_read_lock
+  __rcu_read_unlock
+  radix_tree_preload
+  radix_tree_delete
+  radix_tree_gang_lookup
+  radix_tree_insert
+  radix_tree_lookup
+  rc_map_unregister
+  rc_repeat
+  rc_keydown
+  rc_map_register
+  rdev_get_drvdata
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  __refrigerator
+  __register_chrdev
+  read_cache_page
+  read_cache_page_gfp
+  register_filesystem
+  register_pernet_subsys
+  register_pm_notifier
+  regmap_exit
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  regulator_disable
+  regulator_disable_regmap
+  regulator_enable
+  regulator_enable_regmap
+  regulator_get_voltage_sel_regmap
+  regulator_is_enabled_regmap
+  regulator_list_voltage_linear
+  regulator_map_voltage_linear
+  regulator_set_voltage_sel_regmap
+  release_firmware
+  __regmap_init_i2c
+  remap_pfn_range
+  remove_proc_entry
+  remove_wait_queue
+  __request_module
+  request_threaded_irq
+  reset_control_assert
+  reset_control_deassert
+  revalidate_disk
+  rfkill_alloc
+  rfkill_destroy
+  rfkill_init_sw_state
+  rfkill_register
+  rfkill_unregister
+  __SetPageMovable
+  sched_clock
+  sched_setscheduler
+  schedule
+  schedule_timeout
+  schedule_timeout_interruptible
+  scnprintf
+  seq_lseek
+  seq_printf
+  seq_putc
+  seq_puts
+  seq_read
+  set_nlink
+  set_normalized_timespec64
+  set_page_dirty
+  set_user_nice
+  sg_init_table
+  sg_miter_next
+  sg_miter_start
+  sg_miter_stop
+  sg_nents
+  sg_next
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  simple_get_link
+  simple_read_from_buffer
+  simple_strtol
+  simple_write_to_buffer
+  single_open
+  single_release
+  __skb_ext_put
+  skb_clone
+  skb_copy
+  skb_copy_expand
+  skb_cow_data
+  skb_ensure_writable
+  skb_push
+  skb_put
+  skb_realloc_headroom
+  skb_to_sgvec_nomark
+  skb_trim
+  skcipher_walk_aead_decrypt
+  skcipher_walk_aead_encrypt
+  skcipher_walk_done
+  skcipher_walk_virt
+  sk_free
+  softnet_data
+  snd_info_create_card_entry
+  snd_info_free_entry
+  snd_info_get_line
+  snd_info_register
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_lib_ioctl
+  snd_pcm_period_elapsed
+  snd_soc_add_component_controls
+  snd_soc_dapm_disable_pin
+  snd_soc_dapm_enable_pin
+  snd_soc_dapm_ignore_suspend
+  snd_soc_dapm_kcontrol_dapm
+  snd_soc_dapm_put_enum_double
+  snd_soc_dapm_put_volsw
+  snd_soc_dapm_sync
+  snd_soc_info_enum_double
+  snd_soc_info_volsw
+  snd_soc_pm_ops
+  snd_soc_register_component
+  snd_soc_unregister_component
+  snprintf
+  __spi_alloc_controller
+  spi_setup
+  sprintf
+  sscanf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcasecmp
+  strcat
+  strchr
+  strcmp
+  strcpy
+  strlcat
+  strlcpy
+  strlen
+  strncasecmp
+  strncmp
+  strncpy
+  strncpy_from_user
+  strnlen
+  strnstr
+  strstr
+  __sw_hweight32
+  __sw_hweight64
+  submit_bio
+  sync_filesystem
+  synchronize_irq
+  syscon_regmap_lookup_by_phandle
+  syscon_regmap_lookup_by_phandle_args
+  sysfs_create_bin_file
+  sysfs_create_file_ns
+  sysfs_create_group
+  sysfs_create_groups
+  sysfs_create_link
+  __sysfs_match_string
+  sysfs_notify
+  sysfs_remove_bin_file
+  sysfs_remove_file_ns
+  sysfs_remove_group
+  sysfs_remove_groups
+  sysfs_remove_link
+  sysfs_streq
+  system_freezable_wq
+  system_freezing_cnt
+  system_unbound_wq
+  system_wq
+  sys_tz
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+  thermal_zone_get_zone_by_name
+  timer_of_init
+  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
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __tty_alloc_driver
+  tty_flip_buffer_push
+  __tty_insert_flip_char
+  tty_insert_flip_string_fixed_flag
+  tty_kref_put
+  tty_port_close
+  tty_port_destroy
+  tty_port_hangup
+  tty_port_init
+  tty_port_link_device
+  tty_port_open
+  tty_port_register_device
+  tty_port_tty_get
+  tty_port_tty_wakeup
+  tty_register_driver
+  tty_set_operations
+  tty_standard_install
+  tty_std_termios
+  tty_termios_baud_rate
+  tty_unregister_device
+  tty_unregister_driver
+  tty_vhangup
+  __ubsan_handle_cfi_check_fail_abort
+  __udelay
+  __unregister_chrdev
+  unlock_new_inode
+  unlock_page
+  unregister_filesystem
+  unregister_chrdev_region
+  unregister_pernet_subsys
+  up
+  usb_add_gadget_udc
+  usb_alloc_coherent
+  usb_alloc_urb
+  usb_autopm_get_interface
+  usb_autopm_get_interface_no_resume
+  usb_autopm_put_interface
+  usb_control_msg
+  usb_del_gadget_udc
+  usb_deregister
+  usb_ep_alloc_request
+  usb_ep_autoconfig
+  usb_ep_dequeue
+  usb_ep_enable
+  usb_ep_free_request
+  usb_ep_queue
+  usb_ep_set_maxpacket_limit
+  usb_find_common_endpoints
+  usb_free_coherent
+  usb_free_urb
+  usb_function_register
+  usb_function_unregister
+  usb_gadget_giveback_request
+  usb_gadget_udc_reset
+  usb_get_dr_mode
+  usb_get_intf
+  usb_hcd_is_primary_hcd
+  usb_interface_id
+  usb_kill_urb
+  usb_phy_get_charger_current
+  usb_phy_set_charger_current
+  usb_put_function_instance
+  usb_put_intf
+  usb_register_driver
+  usb_submit_urb
+  usbnet_change_mtu
+  usbnet_disconnect
+  usbnet_get_endpoints
+  usbnet_get_drvinfo
+  usbnet_get_link
+  usbnet_get_link_ksettings
+  usbnet_get_msglevel
+  usbnet_get_stats64
+  usbnet_link_change
+  usbnet_nway_reset
+  usbnet_open
+  usbnet_probe
+  usbnet_read_cmd
+  usbnet_read_cmd_nopm
+  usbnet_resume
+  usbnet_set_link_ksettings
+  usbnet_set_msglevel
+  usbnet_skb_return
+  usbnet_start_xmit
+  usbnet_stop
+  usbnet_suspend
+  usbnet_tx_timeout
+  usbnet_unlink_rx_urbs
+  usbnet_update_max_qlen
+  usbnet_write_cmd
+  usbnet_write_cmd_async
+  usbnet_write_cmd_nopm
+  usleep_range
+  vabits_actual
+  vfree
+  vmalloc
+  vmalloc_to_page
+  vm_map_ram
+  vm_unmap_aliases
+  vm_unmap_ram
+  vm_iomap_memory
+  vsnprintf
+  vunmap
+  wait_for_completion
+  wait_for_completion_interruptible
+  wait_for_completion_interruptible_timeout
+  wait_for_completion_timeout
+  __wake_up
+  __wake_up_locked
+  wake_up_bit
+  wake_up_process
+  wakeup_source_add
+  wakeup_source_create
+  wakeup_source_destroy
+  wakeup_source_register
+  wakeup_source_remove
+  wakeup_source_unregister
+  __warn_printk
+  xfrm4_protocol_deregister
+  xfrm4_protocol_register
+  xfrm4_rcv
+  xfrm_aalg_get_byname
+  xfrm_input
+  xfrm_input_resume
+  xfrm_output_resume
+  xfrm_register_type
+  __xfrm_state_destroy
+  xfrm_state_afinfo_get_rcu
+  xfrm_state_lookup
+  xfrm_unregister_type
+  xt_register_match
+  xt_register_matches
+  xt_register_target
+  xt_register_targets
+  xt_unregister_match
+  xt_unregister_matches
+  xt_unregister_target
+  xt_unregister_targets
+
+# required by blk-mq-virtio.ko
+  blk_mq_map_queues
+
+# required by cdc-acm.ko
+  capable
+  cdc_parse_cdc_header
+  default_wake_function
+  refcount_inc_not_zero_checked
+  tty_port_put
+  tty_port_tty_hangup
+  usb_anchor_urb
+  usb_autopm_get_interface_async
+  usb_autopm_put_interface_async
+  usb_clear_halt
+  usb_driver_claim_interface
+  usb_driver_release_interface
+  usb_get_from_anchor
+  usb_ifnum_to_if
+
+# required by charger-manager.ko
+  alarm_cancel
+  alarm_expires_remaining
+  alarm_forward
+  alarm_init
+  alarm_start
+  alarmtimer_get_rtcdev
+  devm_kasprintf
+  ns_to_timespec64
+  orderly_poweroff
+  power_supply_set_property
+  regulator_force_disable
+  regulator_set_current_limit
+  thermal_zone_get_temp
+
+# required by clk-sprd.ko
+  clk_hw_get_num_parents
+  clk_hw_get_parent
+  clk_hw_is_enabled
+  __clk_mux_determine_rate
+  devm_clk_hw_register
+  devm_of_clk_add_hw_provider
+  divider_get_val
+  divider_recalc_rate
+  divider_round_rate_parent
+  of_clk_hw_onecell_get
+
+# required by cpufreq_userspace.ko
+  __cpufreq_driver_target
+  cpufreq_register_governor
+  cpufreq_unregister_governor
+
+# required by dwc3-haps.ko
+  pcim_enable_device
+
+# required by dwc3-of-simple.ko
+  clk_bulk_get_all
+  clk_bulk_put_all
+  of_reset_control_array_get
+  reset_control_put
+  reset_control_reset
+
+# required by dwc3-qcom.ko
+  devm_extcon_register_notifier
+  devm_reset_control_array_get
+
+# required by dwc3.ko
+  extcon_register_notifier
+  extcon_unregister_notifier
+  usb_gadget_map_request_by_dev
+  usb_gadget_set_state
+
+# required by exfat.ko
+  __blockdev_direct_IO
+  block_write_full_page
+  __bread_gfp
+  __brelse
+  cont_write_begin
+  current_time
+  d_find_alias
+  d_instantiate
+  d_move
+  drop_nlink
+  filemap_fdatawait_range
+  filemap_fdatawrite_range
+  full_name_hash
+  gen_pool_virt_to_phys
+  generic_block_bmap
+  generic_cont_expand_simple
+  generic_fh_to_dentry
+  generic_fh_to_parent
+  generic_file_fsync
+  generic_file_mmap
+  generic_file_read_iter
+  generic_file_splice_read
+  generic_file_write_iter
+  generic_fillattr
+  generic_write_end
+  __getblk_gfp
+  ilookup
+  in6_dev_finish_destroy
+  inc_nlink
+  in_group_p
+  __insert_inode_hash
+  invalidate_inode_buffers
+  iunique
+  kill_block_super
+  kvfree
+  kvmalloc_node
+  load_nls
+  __lock_buffer
+  __lock_page
+  new_inode
+  mark_buffer_dirty
+  __mark_inode_dirty
+  match_int
+  match_octal
+  match_strdup
+  match_token
+  mktime64
+  mount_bdev
+  mpage_readpage
+  mpage_readpages
+  mpage_writepages
+  __remove_inode_hash
+  setattr_copy
+  setattr_prepare
+  sb_min_blocksize
+  sb_set_blocksize
+  strscpy
+  sync_blockdev
+  sync_dirty_buffer
+  sync_mapping_buffers
+  time64_to_tm
+  touch_buffer
+  trace_print_symbols_seq
+  truncate_inode_pages
+  truncate_pagecache
+  truncate_setsize
+  unload_nls
+  unlock_buffer
+  utf16s_to_utf8s
+  utf8s_to_utf16s
+  write_inode_now
+
+# required by fan53555.ko
+  regulator_set_voltage_time_sel
+
+# required by focaltech_ats.ko
+  devm_input_allocate_device
+  devm_regulator_put
+  i2c_new_probed_device
+  i2c_transfer
+  input_mt_init_slots
+  input_mt_report_slot_state
+  input_set_abs_params
+  input_set_capability
+  kobject_put
+  of_find_i2c_adapter_by_node
+  of_property_read_variable_u8_array
+  request_firmware_nowait
+
+# required by gpio-eic-sprd.ko
+  gpiochip_find
+
+# required by gpio-pmic-eic-sprd.ko
+  handle_nested_irq
+
+# required by gpio-sprd.ko
+  __platform_driver_probe
+
+# required by i2c-sprd.ko
+  i2c_add_numbered_adapter
+  i2c_del_adapter
+
+# required by img_mem.ko
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_cpu
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  idr_get_next
+  sg_alloc_table
+  sg_alloc_table_from_pages
+  sg_free_table
+  vsprintf
+
+# required by ims_bridge.ko
+  in4_pton
+  in6_pton
+  inet_select_addr
+  ip6_local_out
+  ip6_route_output_flags
+  ip_local_out
+  ipv6_dev_get_saddr
+  mempool_alloc
+  mempool_alloc_slab
+  mempool_create
+  mempool_destroy
+  mempool_free
+  mempool_free_slab
+  nf_ct_get_tuplepr
+  nf_ct_invert_tuple
+  param_ops_int
+  prandom_u32
+  proc_create_net_data
+  __pskb_pull_tail
+  skb_checksum_help
+  rcu_barrier
+  strim
+  xfrm_lookup
+  completion_done
+
+# required by kfifo_buf.ko
+  devres_add
+  devres_alloc_node
+  devres_free
+  devres_release
+  iio_buffer_init
+  iio_buffer_put
+  __kfifo_to_user
+
+# required by leds-sc27xx-bltc.ko
+  devm_led_classdev_register_ext
+
+# required by mali_gondul.ko
+  anon_inode_getfd
+  __bitmap_weight
+  clear_page
+  devfreq_add_device
+  devfreq_remove_device
+  devfreq_resume_device
+  devfreq_suspend_device
+  dev_pm_opp_disable
+  dev_pm_opp_find_freq_floor
+  dev_pm_opp_put_regulators
+  dev_pm_opp_set_regulators
+  dma_fence_get_status
+  dma_fence_remove_callback
+  downgrade_write
+  down_trylock
+  get_user_pages
+  get_user_pages_fast
+  get_user_pages_remote
+  hrtimer_active
+  hrtimer_forward
+  iomem_resource
+  kstrtobool_from_user
+  memstart_addr
+  __mmdrop
+  nonseekable_open
+  of_property_read_variable_u64_array
+  param_ops_byte
+  rb_erase
+  rb_first
+  rb_insert_color
+  rb_next
+  rb_prev
+  rb_replace_node
+  regulator_get_optional
+  __release_region
+  remap_vmalloc_range
+  __request_region
+  reservation_ww_class
+  seq_open
+  __seq_open_private
+  seq_release_private
+  seq_write
+  set_page_dirty_lock
+  strcspn
+  system_highpri_wq
+  tracepoint_probe_register
+  __tracepoint_android_vh_psci_tos_resident_on
+  __tracepoint_android_vh_psci_cpu_suspend
+  __tracepoint_clock_set_rate
+  trace_print_flags_seq
+  vmalloc_user
+  ww_mutex_lock
+  ww_mutex_unlock
+
+# required by microarray_fp.ko
+  cdev_alloc
+
+# required by mmc_hsq.ko
+  mmc_cqe_request_done
+  mmc_send_tuning
+
+# required by musb_hdrc.ko
+  device_wakeup_enable
+  dev_printk
+  flush_delayed_work
+  flush_dcache_page
+  param_ops_bool
+  usb_add_hcd
+  usb_create_hcd
+  usb_ep_set_halt
+  usb_hcd_check_unlink_urb
+  usb_hcd_giveback_urb
+  usb_hcd_link_urb_to_ep
+  usb_hcd_map_urb_for_dma
+  usb_hcd_poll_rh_status
+  usb_hcd_resume_root_hub
+  usb_hcd_unlink_urb_from_ep
+  usb_hcd_unmap_urb_for_dma
+  usb_otg_state_string
+  usb_put_hcd
+  usb_remove_hcd
+
+# required by musb_sprd.ko
+  usb_ep_disable
+  usb_speed_string
+
+# required by nu1619_wireless_charger.ko
+  regmap_bulk_read
+
+# required by pcie-sprd.ko
+  device_get_next_child_node
+  devm_gpiod_get_index
+  devm_ioremap
+  dw_pcie_host_init
+  dw_pcie_msi_init
+  dw_pcie_read_dbi
+  dw_pcie_setup_rc
+  dw_pcie_wait_for_link
+  dw_pcie_write_dbi
+  fwnode_handle_put
+  gpiod_get_value
+  of_fwnode_ops
+  msi_desc_to_pci_sysdata
+  pci_assign_unassigned_bus_resources
+  pci_bus_add_devices
+  pci_check_and_mask_intx
+  pci_check_and_unmask_intx
+  pci_clear_master
+  pcie_bus_configure_settings
+  pci_enable_msi
+  pci_intx
+  pci_ioremap_bar
+  pci_ioremap_wc_bar
+  pci_lock_rescan_remove
+  pci_reset_function
+  pci_scan_child_bus
+  pci_stop_and_remove_bus_device
+  pci_unlock_rescan_remove
+  sdio_claim_irq
+  sdio_f0_readb
+  sdio_f0_writeb
+  sdio_get_host_pm_caps
+  sdio_readw
+  sdio_release_irq
+  sdio_set_host_pm_flags
+  sdio_writew
+
+# required by phy-sprd-sharkl3.ko
+  usb_add_phy_dev
+  usb_phy_set_charger_state
+  usb_remove_phy
+
+# required by pinctrl-sprd.ko
+  devm_platform_ioremap_resource
+  of_property_read_string_helper
+  pinconf_generic_parse_dt_config
+  pinctrl_dev_get_drvdata
+  pinctrl_register
+  pinctrl_unregister
+  pinctrl_utils_add_map_configs
+  pinctrl_utils_add_map_mux
+  pinctrl_utils_free_map
+  pinctrl_utils_reserve_map
+  pin_get_name
+
+# required by pvrsrvkm.ko
+  autoremove_wake_function
+  bpf_trace_run6
+  bpf_trace_run7
+  bpf_trace_run8
+  cache_line_size
+  devfreq_cooling_unregister
+  devfreq_recommended_opp
+  devfreq_register_opp_notifier
+  devfreq_unregister_opp_notifier
+  devm_devfreq_add_device
+  devm_devfreq_remove_device
+  dev_pm_opp_add
+  dev_pm_opp_find_freq_ceil
+  dev_pm_opp_get_freq
+  dev_pm_opp_get_opp_count
+  dev_pm_opp_get_voltage
+  dev_pm_opp_of_add_table
+  dev_pm_opp_of_register_em
+  dev_pm_opp_of_remove_table
+  dev_pm_opp_put
+  dma_buf_attach
+  dma_buf_begin_cpu_access
+  dma_buf_detach
+  dma_buf_end_cpu_access
+  dma_buf_export
+  dma_buf_fd
+  dma_buf_get
+  dma_buf_kmap
+  dma_buf_kunmap
+  dma_buf_map_attachment
+  dma_buf_mmap
+  dma_buf_put
+  dma_buf_unmap_attachment
+  dma_buf_vmap
+  dma_buf_vunmap
+  dma_fence_add_callback
+  dma_fence_array_ops
+  dma_fence_context_alloc
+  dma_fence_default_wait
+  dma_fence_enable_sw_signaling
+  dma_fence_free
+  dma_fence_init
+  dma_fence_signal
+  down_read
+  down_write
+  drm_dev_unregister
+  fd_install
+  fget
+  find_vma
+  find_vpid
+  __get_task_comm
+  get_unused_fd_flags
+  idr_preload
+  idr_replace
+  ion_query_heaps_kernel
+  kill_pid
+  ksize
+  kthread_freezable_should_stop
+  ktime_get_raw_ts64
+  memcmp
+  mutex_is_locked
+  of_devfreq_cooling_register_power
+  of_hwspin_lock_get_id_byname
+  of_modalias_node
+  on_each_cpu
+  prepare_to_wait
+  proc_remove
+  put_unused_fd
+  _raw_read_lock_bh
+  _raw_read_unlock_bh
+  _raw_write_lock_bh
+  _raw_write_unlock_bh
+  register_shrinker
+  request_firmware
+  seq_vprintf
+  set_freezable
+  si_meminfo
+  split_page
+  strncat
+  strsep
+  sync_file_create
+  sync_file_get_fence
+  __task_pid_nr_ns
+  trace_set_clr_event
+  unmap_mapping_range
+  unregister_shrinker
+  up_read
+  up_write
+  __usecs_to_jiffies
+  vmf_insert_mixed
+  vmf_insert_pfn
+  vm_get_page_prot
+  vm_insert_page
+  vsscanf
+  vzalloc
+
+# required by pwm-sprd.ko
+  pwmchip_add
+  pwmchip_remove
+
+# required by pwm_bl.ko
+  backlight_device_register
+  backlight_device_unregister
+  devm_pwm_get
+  gpiod_get_direction
+  int_pow
+  pwm_free
+  pwm_request
+
+# required by roles.ko
+  fwnode_connection_find_match
+  fwnode_get_parent
+
+# required by rtc-sc27xx.ko
+  devm_rtc_allocate_device
+  rtc_ktime_to_tm
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by sc2703-bl.ko
+  of_pwm_get
+  pwm_apply_state
+
+# required by sc2703_disp.ko
+  mfd_add_devices
+
+# required by sc2703_regulator.ko
+  regulator_notifier_call_chain
+
+# required by sc27xx_adc.ko
+  devm_iio_device_alloc
+  hwspin_lock_free
+  hwspin_lock_request_specific
+  __hwspin_lock_timeout
+  __hwspin_unlock
+  of_hwspin_lock_get_id
+
+# required by sc27xx_fuel_gauge.ko
+  devm_iio_channel_get
+  gpiod_get_value_cansleep
+  iio_read_channel_processed
+  rtc_read_time
+  power_supply_find_ocv2cap_table
+  power_supply_ocv2cap_simple
+  power_supply_put_battery_info
+  power_supply_temp2resist_simple
+
+# required by sc27xx_pd.ko
+  device_get_named_child_node
+  devm_extcon_register_notifier_all
+  devm_regulator_get_optional
+
+# required by sc27xx_typec.ko
+  devm_extcon_dev_allocate
+  devm_extcon_dev_register
+  extcon_set_state_sync
+  typec_register_partner
+  typec_register_port
+  typec_set_data_role
+  typec_set_pwr_opmode
+  typec_set_pwr_role
+  typec_set_vconn_role
+  typec_unregister_partner
+  typec_unregister_port
+
+# required by sc27xx-vibra.ko
+  input_ff_create_memless
+
+# required by sc9863a-clk.ko
+  device_get_match_data
+
+# required by sdhci-sprd.ko
+  clk_round_rate
+  mmc_free_host
+  mmc_of_parse
+  mmc_regulator_set_ocr
+  mmc_regulator_set_vqmmc
+  mmc_remove_host
+  mmc_request_done
+  __sdhci_add_host
+  sdhci_cleanup_host
+  sdhci_enable_clk
+  sdhci_enable_v4_mode
+  sdhci_pltfm_free
+  sdhci_pltfm_init
+  sdhci_remove_host
+  sdhci_request
+  sdhci_request_atomic
+  sdhci_reset
+  sdhci_runtime_resume_host
+  sdhci_runtime_suspend_host
+  sdhci_set_bus_width
+  sdhci_setup_host
+
+# required by sdiohal.ko
+  mmc_detect_change
+  mmc_set_data_timeout
+  mmc_wait_for_req
+  __put_page
+  print_hex_dump
+  sdio_claim_host
+  sdio_enable_func
+  sdio_memcpy_fromio
+  sdio_memcpy_toio
+  sdio_readb
+  sdio_readl
+  sdio_readsb
+  sdio_register_driver
+  sdio_release_host
+  sdio_set_block_size
+  sdio_unregister_driver
+  sdio_writeb
+  sdio_writel
+  sdio_writesb
+  __trace_bprintk
+
+# required by seth.ko
+  napi_complete_done
+  napi_disable
+  __napi_schedule
+  napi_schedule_prep
+  netif_napi_add
+  netif_napi_del
+  netif_receive_skb
+  register_netdev
+  unregister_netdev
+
+# required by sfp_core.ko
+  csum_tcpudp_nofold
+  dev_get_by_index_rcu
+  ip_send_check
+  ipv6_ext_hdr
+  ipv6_find_hdr
+  kstrtouint_from_user
+  __local_bh_enable_ip
+  nf_conntrack_destroy
+  nf_conntrack_find_get
+  of_dma_configure
+  proc_dointvec
+  register_netdevice_notifier
+  register_net_sysctl
+  rt6_lookup
+  seq_open_private
+  seq_release
+  skb_copy_bits
+  unregister_netdevice_notifier
+
+# required by shubcore.ko
+  iio_alloc_pollfunc
+  iio_dealloc_pollfunc
+  iio_device_alloc
+  iio_device_attach_buffer
+  iio_device_free
+  iio_device_unregister
+  iio_pollfunc_store_time
+  iio_push_to_buffers
+  iio_trigger_alloc
+  iio_triggered_buffer_postenable
+  iio_triggered_buffer_predisable
+  iio_trigger_free
+  iio_trigger_notify_done
+  iio_trigger_poll
+  __iio_trigger_register
+  iio_trigger_unregister
+  ktime_get_with_offset
+  param_array_ops
+  unregister_pm_notifier
+
+# required by sipa_core.ko
+  free_pages
+  memremap
+  memunmap
+  pm_wakeup_dev_event
+  skb_dequeue
+  skb_queue_tail
+
+# required by sipa_sys_pd.ko
+  kstrdup
+  of_genpd_add_provider_simple
+  pm_genpd_init
+  pm_genpd_remove
+
+# required by sipc_core.ko
+  gen_pool_destroy
+  mbox_chan_received_data
+  mbox_chan_txdone
+  mbox_client_txdone
+  mbox_controller_register
+  mbox_controller_unregister
+  mbox_free_channel
+  mbox_request_channel
+  mbox_request_channel_byname
+  mbox_send_message
+  register_syscore_ops
+
+# required by sipx.ko
+  hrtimer_cancel
+  hrtimer_init
+  hrtimer_start_range_ns
+  hrtimer_try_to_cancel
+
+# required by snd-soc-aw881xx.ko
+  i2c_smbus_write_byte
+
+# required by snd-soc-akm4377.ko
+  regcache_mark_dirty
+  regcache_sync
+  snd_soc_get_volsw
+  snd_soc_put_volsw
+
+# required by snd-soc-sprd-audio-dma.ko
+  dmam_alloc_attrs
+  dmam_free_coherent
+  dma_release_channel
+  __memset_io
+  of_dma_request_slave_channel
+  snd_pcm_format_physical_width
+  snd_pcm_hw_constraint_integer
+  snd_pcm_hw_constraint_step
+  snd_soc_rtdcom_lookup
+  snd_soc_set_runtime_hwparams
+  vmap
+
+# required by snd-soc-sprd-card.ko
+  devm_gpio_request_one
+  devm_snd_soc_register_card
+  gpio_request_one
+  snd_interval_refine
+  snd_soc_of_get_dai_name
+  snd_soc_of_parse_audio_routing
+  snd_soc_of_parse_audio_simple_widgets
+  snd_soc_of_parse_card_name
+  snd_soc_of_parse_daifmt
+  snd_soc_of_parse_tdm_slot
+
+# required by snd-soc-sprd-codec-sc2721-power.ko
+  regulator_register
+  regulator_unregister
+
+# required by snd-soc-sprd-codec-sc2721.ko
+  dapm_regulator_event
+  gpiod_set_debounce
+  iio_channel_get
+  iio_read_channel_raw
+  iio_write_channel_attribute
+  irq_to_desc
+  power_supply_register
+  power_supply_unregister
+  regulator_get
+  regulator_get_mode
+  regulator_is_enabled
+  regulator_put
+  regulator_set_mode
+  regulator_set_voltage
+  snd_ctl_find_id
+  snd_jack_set_key
+  snd_pcm_rate_to_rate_bit
+  snd_soc_card_jack_new
+  snd_soc_component_read32
+  snd_soc_component_update_bits
+  snd_soc_component_write
+  snd_soc_dapm_force_enable_pin
+  snd_soc_dapm_get_enum_double
+  snd_soc_dapm_get_volsw
+  snd_soc_get_enum_double
+  snd_soc_jack_report
+  snd_soc_put_enum_double
+
+# required by snd-soc-sprd-platform.ko
+  devm_snd_soc_register_component
+  dma_request_slave_channel
+  of_reserved_mem_device_init_by_idx
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+
+# required by snd-soc-sprd-vbc-r1p0v3.ko
+  snd_ctl_boolean_mono_info
+  snd_pcm_hw_constraint_list
+
+# required by snd-soc-tfa98xx.ko
+  crc32_le
+  device_create_bin_file
+  device_remove_bin_file
+  msleep_interruptible
+  snd_pcm_format_width
+  snd_pcm_hw_constraint_mask64
+  snd_soc_dapm_add_routes
+  snd_soc_dapm_new_controls
+
+# required by sprd-cpufreq-common.ko
+  dev_pm_opp_remove
+
+# required by sprd-cpufreqhw.ko
+  arch_set_freq_scale
+  cpufreq_generic_attr
+  cpufreq_generic_frequency_table_verify
+  cpufreq_generic_get
+  cpufreq_generic_suspend
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+  dev_pm_opp_free_cpufreq_table
+  dev_pm_opp_init_cpufreq_table
+
+# required by sprd-drm.ko
+  adjust_managed_page_count
+  component_add
+  component_bind_all
+  component_del
+  component_master_add_with_match
+  component_master_del
+  component_match_add_release
+  component_unbind_all
+  devm_gpiod_get_optional
+  dma_get_sgtable_attrs
+  dma_mmap_attrs
+  dma_set_coherent_mask
+  drm_add_edid_modes
+  drm_atomic_helper_async_commit
+  drm_atomic_helper_check
+  drm_atomic_helper_cleanup_planes
+  drm_atomic_helper_commit
+  drm_atomic_helper_commit_cleanup_done
+  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_commit_tail
+  drm_atomic_helper_commit_tail_rpm
+  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
+  __dynamic_dev_dbg
+  __dynamic_pr_debug
+  drm_atomic_helper_prepare_planes
+  drm_atomic_helper_resume
+  drm_atomic_helper_set_config
+  drm_atomic_helper_shutdown
+  drm_atomic_helper_suspend
+  drm_atomic_helper_swap_state
+  drm_atomic_helper_update_legacy_modeset_state
+  drm_atomic_helper_update_plane
+  drm_atomic_helper_wait_for_dependencies
+  drm_atomic_helper_wait_for_fences
+  drm_atomic_helper_wait_for_vblanks
+  drm_atomic_private_obj_fini
+  drm_atomic_private_obj_init
+  drm_atomic_set_crtc_for_connector
+  drm_atomic_set_fence_for_plane
+  drm_atomic_set_mode_for_crtc
+  drm_atomic_state_alloc
+  drm_atomic_state_clear
+  drm_atomic_state_default_clear
+  drm_atomic_state_default_release
+  __drm_atomic_state_free
+  drm_bridge_attach
+  drm_connector_attach_content_protection_property
+  drm_connector_attach_encoder
+  drm_connector_cleanup
+  drm_connector_init
+  drm_connector_unregister
+  drm_connector_update_edid_property
+  drm_crtc_cleanup
+  __drm_crtc_commit_free
+  drm_crtc_handle_vblank
+  drm_crtc_init_with_planes
+  drm_crtc_send_vblank_event
+  drm_crtc_vblank_off
+  drm_crtc_vblank_on
+  drm_detect_monitor_audio
+  drm_display_mode_from_videomode
+  drm_display_mode_to_videomode
+  drm_dp_aux_register
+  drm_dp_aux_unregister
+  drm_dp_calc_pbn_mode
+  drm_dp_channel_eq_ok
+  drm_dp_clock_recovery_ok
+  drm_dp_dpcd_read
+  drm_dp_dpcd_read_link_status
+  drm_dp_dpcd_write
+  drm_encoder_cleanup
+  drm_encoder_init
+  drm_format_info
+  drm_gem_cma_prime_get_sg_table
+  drm_gem_cma_prime_mmap
+  drm_gem_cma_prime_vmap
+  drm_gem_cma_prime_vunmap
+  drm_gem_cma_vm_ops
+  drm_gem_create_mmap_offset
+  drm_gem_fb_create
+  drm_gem_fb_get_obj
+  drm_gem_handle_create
+  drm_gem_mmap
+  drm_gem_mmap_obj
+  drm_gem_object_init
+  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_vm_close
+  drm_get_edid
+  drm_hdcp_check_ksvs_revoked
+  drm_hdcp_update_content_protection
+  drm_helper_hpd_irq_event
+  drm_helper_probe_single_connector_modes
+  drm_kms_helper_poll_disable
+  drm_kms_helper_poll_enable
+  drm_kms_helper_poll_fini
+  drm_kms_helper_poll_init
+  drm_match_cea_mode
+  drm_mode_config_reset
+  drm_mode_create
+  drm_mode_crtc_set_gamma_size
+  drm_mode_destroy
+  drm_mode_duplicate
+  drm_mode_probed_add
+  drm_mode_vrefresh
+  drm_object_attach_property
+  drm_panel_add
+  drm_panel_attach
+  drm_panel_detach
+  drm_panel_disable
+  drm_panel_enable
+  drm_panel_get_modes
+  drm_panel_init
+  drm_panel_prepare
+  drm_panel_remove
+  drm_panel_unprepare
+  drm_plane_cleanup
+  drm_plane_create_alpha_property
+  drm_plane_create_blend_mode_property
+  drm_plane_create_rotation_property
+  drm_plane_create_zpos_immutable_property
+  drm_prime_gem_destroy
+  drm_property_create
+  drm_property_create_blob
+  drm_property_create_range
+  drm_put_dev
+  drm_universal_plane_init
+  drm_vblank_init
+  gpiod_direction_output
+  kstrtou8
+  mipi_dsi_attach
+  mipi_dsi_dcs_read
+  mipi_dsi_dcs_write_buffer
+  mipi_dsi_detach
+  mipi_dsi_driver_register_full
+  mipi_dsi_driver_unregister
+  mipi_dsi_generic_read
+  mipi_dsi_generic_write
+  mipi_dsi_host_register
+  mipi_dsi_host_unregister
+  mipi_dsi_set_maximum_return_packet_size
+  no_llseek
+  of_clk_get_by_name
+  of_drm_find_bridge
+  of_drm_find_panel
+  of_fdt_unflatten_tree
+  of_find_backlight_by_node
+  of_find_node_opts_by_path
+  of_get_drm_display_mode
+  of_graph_get_endpoint_by_regs
+  of_graph_get_remote_port_parent
+  of_reserved_mem_device_release
+  __platform_register_drivers
+  platform_unregister_drivers
+  regmap_get_reg_stride
+  regmap_get_val_bytes
+  try_wait_for_completion
+
+# required by spi-sprd.ko
+  dma_request_chan
+  spi_controller_resume
+  spi_controller_suspend
+  spi_finalize_current_transfer
+
+# required by spi-sprd-adi.ko
+  unregister_restart_handler
+
+# required by sprd-dma.ko
+  dma_async_device_register
+  dma_async_device_unregister
+  dma_async_tx_descriptor_init
+  of_dma_controller_free
+  of_dma_controller_register
+  of_dma_simple_xlate
+
+# required by sprd-gsp.ko
+  __kthread_init_worker
+  kthread_queue_work
+  kthread_worker_fn
+
+# required by sprd-hwdvfs-sharkl3.ko
+  __i2c_transfer
+  rt_mutex_trylock
+
+# required by sprd_dedicate_thm.ko
+  devm_thermal_zone_of_sensor_register
+  system_power_efficient_wq
+
+# required by sprd_dvfs.ko
+  devfreq_add_governor
+  devfreq_event_get_event
+  devfreq_remove_governor
+  devfreq_update_status
+  device_rename
+  update_devfreq
+
+# required by sprd_hwspinlock.ko
+  hwspin_lock_register
+  hwspin_lock_unregister
+
+# required by sprd_ipa.ko
+  skb_to_sgvec
+  irq_set_affinity_hint
+  napi_gro_receive
+
+# required by sprd-saudio.ko
+  snd_card_free
+
+# required by sprd-sc27xx-spi.ko
+  devm_regmap_add_irq_chip
+  regmap_irq_get_domain
+  spi_bus_type
+  __spi_register_driver
+  spi_sync
+
+# required by sprd_apb_busmonitor.ko
+  _dev_emerg
+
+# required by sprd_cproc.ko
+  of_get_parent
+
+# required by sprd_cpu_cooling.ko
+  cpu_down
+  cpufreq_get_policy
+  cpu_up
+  cpufreq_quick_get
+  dev_pm_opp_find_freq_exact
+  thermal_cooling_device_unregister
+  thermal_of_cooling_device_register
+
+# required by sprd-mailbox.ko
+  devm_mbox_controller_register
+
+# required by sprd_mcd.ko
+  gpiod_set_value_cansleep
+  kernel_power_off
+  register_restart_handler
+  register_reboot_notifier
+  unregister_reboot_notifier
+
+# required by sprd_pcie_ep_device.ko
+  pci_enable_device
+  pci_request_regions
+  pci_restore_state
+  pci_save_state
+  pci_set_power_state
+
+# required by sprd_pm_domain.ko
+  kfree_const
+  kstrdup_const
+  of_genpd_add_subdomain
+
+# required by sprd_powerdebug.ko
+  cpu_pm_register_notifier
+  cpu_pm_unregister_notifier
+  pm_print_active_wakeup_sources
+  syscon_node_to_regmap
+
+# required by sprd_sdio_fm.ko
+  vfs_llseek
+
+# required by sprd_soc_thm.ko
+  thermal_zone_device_unregister
+  thermal_zone_device_update
+  thermal_zone_of_sensor_register
+
+# required by sprd_vdsp.ko
+  bsearch
+  devm_kstrdup
+  __memcpy_toio
+  of_match_device
+  of_n_addr_cells
+  of_n_size_cells
+  of_translate_address
+  sort
+
+# required by sprd_wdt.ko
+  devm_watchdog_register_device
+  watchdog_init_timeout
+
+# required by sprdbt_sipc_tty.ko
+  tty_schedule_flip
+
+# required by sprdwl_ng.ko
+  bcmp
+  build_skb
+  __cfg80211_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  cfg80211_chandef_create
+  cfg80211_ch_switch_notify
+  cfg80211_connect_done
+  cfg80211_cqm_rssi_notify
+  cfg80211_del_sta_sinfo
+  cfg80211_disconnected
+  cfg80211_find_elem_match
+  cfg80211_get_bss
+  cfg80211_ibss_joined
+  cfg80211_inform_bss_data
+  cfg80211_mgmt_tx_status
+  cfg80211_michael_mic_failure
+  cfg80211_new_sta
+  cfg80211_put_bss
+  cfg80211_ready_on_channel
+  cfg80211_remain_on_channel_expired
+  cfg80211_roamed
+  cfg80211_rx_mgmt
+  cfg80211_rx_unprot_mlme_mgmt
+  cfg80211_scan_done
+  cfg80211_sched_scan_results
+  __cfg80211_send_event_skb
+  cfg80211_tdls_oper_request
+  cfg80211_unlink_bss
+  cfg80211_unregister_wdev
+  cfg80211_vendor_cmd_reply
+  console_printk
+  consume_skb
+  _ctype
+  dev_get_by_index
+  down_timeout
+  freq_reg_info
+  genlmsg_put
+  jiffies_to_usecs
+  kfree_skb_list
+  netdev_alloc_frag
+  netdev_err
+  netdev_info
+  netdev_warn
+  netlink_unicast
+  nla_memcpy
+  __nla_parse
+  nla_put
+  nla_put_64bit
+  nla_put_nohdr
+  printk_timed_ratelimit
+  register_inet6addr_notifier
+  register_inetaddr_notifier
+  register_netdevice
+  regulatory_hint
+  rtnl_lock
+  rtnl_unlock
+  simple_open
+  skb_queue_purge
+  skb_unlink
+  synchronize_rcu
+  unregister_inet6addr_notifier
+  unregister_inetaddr_notifier
+  unregister_netdevice_queue
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+
+# required by sunwave_fp.ko
+  input_unregister_device
+
+# required by tcpm.ko
+  fwnode_property_read_u32_array
+  mod_delayed_work_on
+  tcpm_cc_change
+  tcpm_pd_hard_reset
+  tcpm_pd_receive
+  tcpm_pd_transmit_complete
+  tcpm_register_port
+  tcpm_unregister_port
+  tcpm_vbus_change
+  usb_debug_root
+
+# required by trusty.ko
+  _copy_from_iter
+  _copy_to_iter
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  device_for_each_child
+  disable_percpu_irq
+  enable_percpu_irq
+  free_percpu_irq
+  irq_create_of_mapping
+  panic_notifier_list
+  register_virtio_device
+  register_virtio_driver
+  __request_percpu_irq
+  unregister_virtio_device
+  unregister_virtio_driver
+  virtqueue_add_inbuf
+  virtqueue_add_outbuf
+  virtqueue_detach_unused_buf
+  virtqueue_get_buf
+  virtqueue_get_vring_size
+  virtqueue_kick
+  virtqueue_kick_prepare
+  virtqueue_notify
+  vring_del_virtqueue
+  vring_interrupt
+  vring_new_virtqueue
+  wait_woken
+  woken_wake_function
+
+# required by typec.ko
+  blocking_notifier_call_chain
+  __class_register
+  class_unregister
+  device_find_child
+  fwnode_property_read_u16_array
+  get_device
+  kobject_uevent
+  match_string
+
+# required by usb-storage.ko
+  blk_queue_bounce_limit
+  blk_queue_max_hw_sectors
+  blk_queue_update_dma_alignment
+  _dev_notice
+  param_ops_string
+  schedule_timeout_uninterruptible
+  __scsi_add_device
+  __scsi_execute
+  scsi_add_host_with_dma
+  scsi_device_get
+  scsi_device_put
+  scsi_eh_prep_cmnd
+  scsi_eh_restore_cmnd
+  scsi_get_host_dev
+  scsi_host_alloc
+  scsi_host_put
+  scsi_is_host_device
+  scsi_normalize_sense
+  scsi_print_sense_hdr
+  scsi_remove_host
+  scsi_report_bus_reset
+  scsi_report_device_reset
+  scsi_scan_host
+  scsi_sense_desc_find
+  scsi_test_unit_ready
+  sg_miter_skip
+  simple_strtoul
+  usb_autopm_put_interface_no_suspend
+  usb_lock_device_for_reset
+  usb_reset_device
+  usb_reset_endpoint
+  usb_sg_cancel
+  usb_sg_init
+  usb_sg_wait
+  usb_unlink_urb
+
+# required by usb_f_mtp.ko
+  usb_os_desc_prepare_interf_dir
+  usb_string_id
+  config_group_init_type_name
+
+# required by usbserial.ko
+  device_del
+  driver_attach
+  handle_sysrq
+  tty_hangup
+  tty_ldisc_deref
+  tty_ldisc_ref
+  tty_termios_copy_hw
+  usb_disabled
+  usb_get_dev
+  usb_match_id
+  usb_match_one_id
+  usb_poison_urb
+  usb_put_dev
+  usb_show_dynids
+  usb_store_new_id
+  usb_unpoison_urb
+
+# required by vha.ko
+  clk_bulk_get
+  device_wakeup_disable
+  devm_iounmap
+  __ndelay
+  param_ops_long
+  param_ops_ulong
+  pm_relax
+  pm_stay_awake
+
+# required by virtio_crypto.ko
+  cpu_bit_bitmap
+  cpus_read_lock
+  cpus_read_unlock
+  cpu_topology
+  crypto_ablkcipher_type
+  crypto_engine_alloc_init
+  crypto_engine_exit
+  crypto_engine_start
+  crypto_finalize_ablkcipher_request
+  crypto_register_alg
+  crypto_register_scomp
+  crypto_transfer_ablkcipher_request_to_engine
+  crypto_unregister_alg
+  crypto_unregister_scomp
+  scatterwalk_map_and_copy
+  sg_init_one
+  sg_nents_for_len
+
+# required by wcn_bsp.ko
+  gpiod_set_value
+  memdup_user
+  pci_disable_device
+  pci_disable_msi
+  pci_disable_msix
+  pcie_capability_read_dword
+  pcie_capability_read_word
+  pci_enable_msix_range
+  pci_enable_wake
+  pci_find_ext_capability
+  pci_load_and_free_saved_state
+  pci_msi_vec_count
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_release_regions
+  pci_store_saved_state
+  pci_write_config_byte
+  pci_write_config_dword
+  register_chrdev_region
+  request_firmware_direct
+
+# required by rc-core.ko
+  input_scancode_to_scalar
+  kobject_get_path
+  led_trigger_register_simple
+  led_trigger_unregister_simple
+  __module_get
+  nsecs_to_jiffies
+
+# required by spi-bitbang.ko
+  spi_register_controller
+  spi_unregister_controller
+
+# required by sprd_memdisk.ko
+  __alloc_disk_node
+  blk_cleanup_queue
+  blk_mq_end_request
+  blk_mq_init_sq_queue
+  blk_mq_start_request
+  blk_queue_logical_block_size
+  del_gendisk
+  device_add_disk
+  put_disk
+  register_blkdev
+  unregister_blkdev
+
+# required by ppp_async.ko
+  crc_ccitt_table
+  n_tty_ioctl_helper
+  ppp_channel_index
+  ppp_input_error
+  ppp_output_wakeup
+  ppp_register_channel
+  ppp_unit_number
+  ppp_unregister_channel
+  _raw_write_lock_irq
+  _raw_write_unlock_irq
+  skb_pull
+  start_tty
+  stop_tty
+  tty_mode_ioctl
+  tty_register_ldisc
+  tty_unregister_ldisc
+  tty_unthrottle
+
+# required by cls_fw.ko
+  __dev_get_by_index
+  __dev_get_by_name
+  kfree_call_rcu
+  nla_strlcpy
+  __put_net
+  register_tcf_proto_ops
+  rtnl_is_locked
+  tcf_action_exec
+  tcf_exts_destroy
+  tcf_exts_dump
+  tcf_exts_dump_stats
+  tcf_exts_validate
+  tcf_queue_work
+  unregister_tcf_proto_ops
+
+# required by ipcomp.ko
+  ipcomp_destroy
+  ipcomp_init_state
+  ipcomp_input
+  ipcomp_output
+  xfrm_init_state
+  xfrm_state_alloc
+  xfrm_state_insert
+
+# required by xcbc.ko
+  crypto_alloc_instance
+  crypto_attr_alg2
+  crypto_check_attr_type
+  crypto_init_spawn
+  crypto_mod_put
+  crypto_register_template
+  crypto_spawn_tfm
+  crypto_unregister_template
+  shash_free_instance
+  shash_register_instance
+
+# required by aes-ce-ccm.ko
+  ce_aes_expandkey
+
+# required by xt_TEE.ko
+  static_key_slow_dec
+  static_key_slow_inc
+  xt_tee_enabled
+
+# required by ir-kbd-i2c.ko
+  i2c_new_dummy_device
+  i2c_unregister_device
+
+# required by ledtrig-pattern.ko
+  led_get_default_pattern
+  led_set_brightness
+  led_trigger_register
+  led_trigger_unregister
+
+# required by virtio_crypto.ko
+  virtio_break_device
+  virtqueue_add_sgs
+  virtqueue_disable_cb
+  virtqueue_enable_cb
+  virtqueue_is_broken
+
+# required by dns_resolver.ko
+  generic_key_instantiate
+  key_invalidate
+  key_put
+  key_revoke
+  keyring_alloc
+  key_validate
+  kmemdup_nul
+  memchr
+  prepare_kernel_cred
+  register_key_type
+  request_key_tag
+  unregister_key_type
+  user_destroy
+  user_read
+  user_revoke
+
+# required by aes-neon-blk.ko
+  crypto_aes_inv_sbox
+  crypto_aes_sbox
+  crypto_alloc_shash
+  crypto_register_skciphers
+  crypto_shash_digest
+  crypto_unregister_skciphers
+  scatterwalk_ffwd
+  simd_skcipher_create_compat
+  simd_skcipher_free
+
+# required by ghash-ce.ko
+  gf128mul_lle
+
+# required by pppoe.ko
+  _copy_from_iter_full
+  datagram_poll
+  dev_add_pack
+  dev_get_by_name_rcu
+  dev_remove_pack
+  lock_sock_nested
+  pppox_compat_ioctl
+  pppox_ioctl
+  pppox_unbind_sock
+  ppp_register_net_channel
+  proto_register
+  proto_unregister
+  pskb_trim_rcsum_slow
+  register_pernet_device
+  register_pppox_proto
+  release_sock
+  sk_alloc
+  skb_copy_datagram_iter
+  skb_pull_rcsum
+  skb_recv_datagram
+  __sk_receive_skb
+  sock_init_data
+  sock_no_accept
+  sock_no_bind
+  sock_no_getsockopt
+  sock_no_listen
+  sock_no_mmap
+  sock_no_setsockopt
+  sock_no_shutdown
+  sock_no_socketpair
+  sock_queue_rcv_skb
+  sock_wmalloc
+  sock_wfree
+  unregister_pernet_device
+  unregister_pppox_proto
+
+# required by sha1-ce.ko
+  crypto_sha1_finup
+  crypto_sha1_update
+
+# required by ah6.ko
+  ip6_redirect
+  ip6_update_pmtu
+  net_ratelimit
+  xfrm6_find_1stfragopt
+  xfrm6_protocol_deregister
+  xfrm6_protocol_register
+  xfrm6_rcv
+
+# required by raw_diag.ko
+  inet_diag_bc_sk
+  inet_diag_register
+  inet_diag_unregister
+  inet_sk_diag_fill
+  netlink_net_capable
+  raw_v4_hashinfo
+  __raw_v4_lookup
+  raw_v6_hashinfo
+  __raw_v6_lookup
+  sock_diag_destroy
+
+# required by xt_addrtype.ko
+  inet_dev_addr_type
+  __ipv6_addr_type
+  ipv6_chk_addr
+
+# required by sprd_thermal.ko
+  devm_thermal_zone_of_sensor_unregister
+
+# required by arc4.ko
+  arc4_crypt
+  arc4_setkey
+  crypto_register_skcipher
+  crypto_unregister_skcipher
+
+# required by ip6table_security.ko
+  xt_hook_ops_alloc
+
+# required by xfrm4_tunnel.ko
+  xfrm4_tunnel_deregister
+  xfrm4_tunnel_register
+
+# required by ppp_mppe.ko
+  crypto_has_ahash
+  crypto_shash_final
+  crypto_shash_update
+
+# required by pptp.ko
+  find_next_zero_bit
+  gre_add_protocol
+  gre_del_protocol
+  __ip_select_ident
+  security_sk_classify_flow
+  skb_set_owner_w
+  sk_setup_caps
+  sock_no_recvmsg
+  sock_no_sendmsg
+
+# required by gtco.ko
+  __usb_get_extra_descriptor
+
+# required by l2tp_ppp.ko
+  l2tp_session_create
+  l2tp_session_delete
+  l2tp_session_free
+  l2tp_session_get_nth
+  l2tp_session_register
+  l2tp_session_set_header_len
+  l2tp_tunnel_create
+  l2tp_tunnel_delete
+  l2tp_tunnel_free
+  l2tp_tunnel_get
+  l2tp_tunnel_get_nth
+  l2tp_tunnel_get_session
+  l2tp_tunnel_register
+  l2tp_udp_encap_recv
+  l2tp_xmit_skb
+  ppp_dev_name
+
+# required by ppp_generic.ko
+  arch_bpf_jit_check_func
+  bpf_prog_create
+  bpf_prog_destroy
+  bpf_stats_enabled_key
+  iov_iter_init
+  netdev_printk
+  netif_rx
+  ns_capable
+  rtnl_link_register
+  rtnl_link_unregister
+  skb_queue_head
+  skb_scrub_packet
+  slhc_compress
+  slhc_free
+  slhc_init
+  slhc_remember
+  slhc_toss
+  slhc_uncompress
+  unregister_netdevice_many
+
+# required by pppox.ko
+  sock_register
+  sock_unregister
+
+# required by ppp_deflate.ko
+  zlib_deflate
+  zlib_deflateEnd
+  zlib_deflateInit2
+  zlib_deflateReset
+  zlib_deflate_workspacesize
+  zlib_inflate
+  zlib_inflateEnd
+  zlib_inflateIncomp
+  zlib_inflateInit2
+  zlib_inflateReset
+  zlib_inflate_workspacesize
+
+# required by sprd_cpp.ko
+  clk_get_parent
+  of_iomap
+
+# required by sprd_camera.ko
+  ion_alloc
+  ion_free
+  ktime_get_ts64
+  ns_to_timeval
+  of_irq_to_resource
+  _raw_spin_trylock
+  regulator_get_linear_step
+
+# required by trusty-pm.ko
+  ktime_get_boot_fast_ns
+  unregister_syscore_ops
+
+# required by ufs-sprd.ko
+  ufshcd_dme_get_attr
+  ufshcd_dme_set_attr
+  ufshcd_get_local_unipro_ver
+  ufshcd_pltfrm_init
+  ufshcd_pltfrm_resume
+  ufshcd_pltfrm_runtime_idle
+  ufshcd_pltfrm_runtime_resume
+  ufshcd_pltfrm_runtime_suspend
+  ufshcd_pltfrm_shutdown
+  ufshcd_pltfrm_suspend
+  ufshcd_remove
+  ufshcd_read_desc_param
+
+# required by sprd_sip_svc.ko
+  __arm_smccc_smc
+
+# required by mali_gondul.ko
+  __arch_clear_user
+  bpf_trace_run5
+  ktime_get_raw
+  of_machine_is_compatible
+  _totalram_pages
+  trace_output_call
+  __tracepoint_gpu_mem_total
+  trace_print_array_seq
+  vmf_insert_pfn_prot
+
+# required by sprd_ion.ko
+  ion_buffer_zero
+  __ion_device_add_heap
+  memset32
+  of_platform_device_create
+  __sg_page_iter_next
+  __sg_page_iter_start
+
+# required by snd-soc-sprd-codec-sc2730.ko
+  dapm_kcontrol_get_value
+  __kfifo_init
+  __kfifo_from_user_r
+  __kfifo_to_user_r
+  snd_pcm_rate_bit_to_rate
+  snd_soc_bytes_info_ext
+  snd_soc_new_compress
+  snd_card_new
+  snd_card_register
+  snd_ctl_add
+  snd_ctl_new1
+  snd_pcm_new
+  snd_pcm_set_ops
+
+# required by ssd20xx_ts.ko
+  input_mt_report_pointer_emulation
+
+# cpufreq_interactive.ko
+  add_timer_on
+  cpufreq_register_notifier
+  cpufreq_table_index_unsorted
+  cpufreq_unregister_notifier
+  down_read_trylock
+  get_cpu_idle_time
+  irq_work_queue
+  kobject_init_and_add
+  sched_setscheduler_nocheck
+  strpbrk
+
+# required by sprd_wdf.ko
+  kstrtoull_from_user
+  smpboot_register_percpu_thread
+
+# required by zram.ko
+  bdgrab
+  bio_chain
+  bio_init
+  blkdev_put
+  blk_status_to_errno
+  blkdev_get
+  filp_close
+  filp_open_block
+  file_path
+  I_BDEV
+  set_blocksize
+  submit_bio_wait
+
+# required by sprd_usb_f_rndis.ko
+  alloc_etherdev_mqs
+  dev_get_stats
+  dev_set_mac_address
+  eth_mac_addr
+  eth_validate_addr
+  ethtool_op_get_link
+  hex_to_bin
+  usb_assign_descriptors
+  usb_free_all_descriptors
+  usb_gstrings_attach
+
+# required by sprd_apdu_r3p0.ko
+  __netlink_kernel_create
+  __nlmsg_put
+  netlink_kernel_release
+  of_get_address
+  of_get_compatible_child
+
+# required by sprd_tcpm.ko
+  typec_altmode_attention
+  typec_altmode_notify
+  typec_altmode_update_active
+  typec_altmode_vdm
+  typec_find_port_data_role
+  typec_find_port_power_role
+  typec_find_power_role
+  typec_get_drvdata
+  typec_match_altmode
+  typec_partner_set_identity
+  typec_partner_register_altmode
+  typec_port_register_altmode
+  typec_set_mode
+  typec_set_orientation
+  typec_unregister_altmode
+  usb_role_switch_get
+  usb_role_switch_put
+  usb_role_switch_set_role
diff --git a/android/abi_gki_aarch64_virtual_device b/android/abi_gki_aarch64_virtual_device
new file mode 100644
index 0000000..424ee63
--- /dev/null
+++ b/android/abi_gki_aarch64_virtual_device
@@ -0,0 +1,1182 @@
+[abi_symbol_list]
+# commonly used symbols
+  alloc_anon_inode
+  __alloc_disk_node
+  alloc_etherdev_mqs
+  __alloc_pages_nodemask
+  __alloc_skb
+  alloc_workqueue
+  __arch_copy_from_user
+  __arch_copy_to_user
+  arm64_const_caps_ready
+  bcmp
+  bio_alloc_bioset
+  bio_endio
+  blk_alloc_queue
+  blk_cleanup_queue
+  blk_queue_flag_clear
+  blk_queue_flag_set
+  blk_queue_io_min
+  blk_queue_io_opt
+  blk_queue_logical_block_size
+  blk_queue_make_request
+  blk_queue_max_discard_sectors
+  blk_queue_max_write_zeroes_sectors
+  blk_queue_physical_block_size
+  blk_queue_write_cache
+  bpf_trace_run2
+  bpf_trace_run3
+  bus_register
+  bus_unregister
+  cancel_delayed_work_sync
+  cancel_work_sync
+  capable
+  cfg80211_inform_bss_data
+  cfg80211_put_bss
+  __cfi_slowpath
+  __check_object_size
+  __class_create
+  class_destroy
+  __ClearPageMovable
+  complete
+  __const_udelay
+  consume_skb
+  contig_page_data
+  __cpuhp_remove_state
+  __cpuhp_setup_state
+  __cpuhp_state_add_instance
+  __cpuhp_state_remove_instance
+  cpu_hwcap_keys
+  cpu_hwcaps
+  cpumask_next
+  cpu_number
+  __cpu_online_mask
+  __cpu_possible_mask
+  crypto_register_alg
+  crypto_register_scomp
+  crypto_unregister_alg
+  crypto_unregister_scomp
+  _ctype
+  debugfs_create_dir
+  debugfs_create_file
+  debugfs_remove_recursive
+  delayed_work_timer_fn
+  del_gendisk
+  del_timer_sync
+  destroy_workqueue
+  _dev_err
+  device_add_disk
+  device_create
+  device_initialize
+  device_register
+  device_release_driver
+  device_unregister
+  _dev_info
+  __dev_kfree_skb_any
+  devm_ioremap
+  devm_kfree
+  devm_kmalloc
+  devm_request_threaded_irq
+  dev_queue_xmit
+  dev_set_name
+  _dev_warn
+  dma_alloc_attrs
+  dma_direct_map_sg
+  dma_direct_sync_sg_for_device
+  dma_direct_unmap_sg
+  dma_fence_context_alloc
+  dma_fence_init
+  dma_fence_release
+  dma_fence_signal_locked
+  dma_free_attrs
+  dma_set_coherent_mask
+  dma_set_mask
+  down_read
+  down_write
+  ether_setup
+  ethtool_op_get_link
+  eth_validate_addr
+  event_triggers_call
+  fd_install
+  finish_wait
+  flush_work
+  fput
+  free_irq
+  free_netdev
+  __free_pages
+  free_pages
+  freezing_slow_path
+  fs_bio_set
+  get_device
+  __get_free_pages
+  get_random_bytes
+  get_unused_fd_flags
+  hwrng_register
+  hwrng_unregister
+  ida_alloc_range
+  ida_free
+  idr_alloc
+  idr_destroy
+  idr_remove
+  init_pseudo
+  __init_rwsem
+  init_timer_key
+  init_wait_entry
+  __init_waitqueue_head
+  input_allocate_device
+  input_event
+  input_free_device
+  input_register_device
+  input_unregister_device
+  iounmap
+  iput
+  jiffies
+  jiffies_to_msecs
+  kern_mount
+  kern_unmount
+  kfree
+  kfree_skb
+  kill_anon_super
+  kimage_vaddr
+  kimage_voffset
+  __kmalloc
+  kmalloc_caches
+  kmem_cache_alloc
+  kmem_cache_alloc_trace
+  kmem_cache_create
+  kmem_cache_destroy
+  kmem_cache_free
+  kmemdup
+  kobject_add
+  kobject_init
+  kobject_put
+  kobject_uevent
+  krealloc
+  kstrdup
+  kstrtoint
+  kstrtoull
+  kthread_create_on_node
+  ktime_get
+  ktime_get_mono_fast_ns
+  ktime_get_raw_ts64
+  ktime_get_real_seconds
+  ktime_get_real_ts64
+  ktime_get_ts64
+  ktime_get_with_offset
+  kvfree
+  kvmalloc_node
+  __list_add_valid
+  __list_del_entry_valid
+  __local_bh_enable_ip
+  lzo1x_decompress_safe
+  memcpy
+  memmove
+  memparse
+  memremap
+  memset
+  memstart_addr
+  memunmap
+  misc_deregister
+  misc_register
+  mod_timer
+  module_layout
+  module_put
+  __msecs_to_jiffies
+  msleep
+  __mutex_init
+  mutex_lock
+  mutex_lock_interruptible
+  mutex_trylock
+  mutex_unlock
+  netdev_err
+  netdev_info
+  netdev_rx_handler_register
+  netdev_rx_handler_unregister
+  netdev_upper_dev_unlink
+  netif_carrier_off
+  netif_carrier_on
+  netif_device_detach
+  netif_tx_stop_all_queues
+  netif_tx_wake_queue
+  nf_conntrack_destroy
+  no_llseek
+  nonseekable_open
+  noop_llseek
+  nr_cpu_ids
+  __num_online_cpus
+  param_ops_bint
+  param_ops_bool
+  param_ops_charp
+  param_ops_int
+  param_ops_uint
+  passthru_features_check
+  pci_disable_device
+  pci_enable_device
+  pci_iomap
+  pci_read_config_byte
+  pci_read_config_dword
+  pci_read_config_word
+  __pci_register_driver
+  pci_release_region
+  pci_release_regions
+  pci_request_region
+  pci_request_regions
+  pci_set_master
+  pci_unregister_driver
+  pci_write_config_dword
+  __per_cpu_offset
+  perf_trace_buf_alloc
+  perf_trace_run_bpf_submit
+  platform_device_unregister
+  __platform_driver_register
+  platform_driver_unregister
+  platform_get_irq
+  platform_get_resource
+  pm_runtime_allow
+  __pm_runtime_disable
+  pm_runtime_enable
+  __pm_runtime_resume
+  __pm_runtime_suspend
+  __pm_runtime_use_autosuspend
+  preempt_schedule
+  preempt_schedule_notrace
+  prepare_to_wait_event
+  printk
+  put_device
+  put_disk
+  __put_page
+  __put_task_struct
+  put_unused_fd
+  queue_delayed_work_on
+  queue_work_on
+  ___ratelimit
+  _raw_spin_lock
+  _raw_spin_lock_bh
+  _raw_spin_lock_irq
+  _raw_spin_lock_irqsave
+  _raw_spin_unlock
+  _raw_spin_unlock_bh
+  _raw_spin_unlock_irq
+  _raw_spin_unlock_irqrestore
+  __rcu_read_lock
+  __rcu_read_unlock
+  refcount_dec_and_test_checked
+  refcount_inc_checked
+  __refrigerator
+  register_blkdev
+  register_netdev
+  register_netdevice
+  register_netdevice_notifier
+  register_shrinker
+  register_virtio_device
+  register_virtio_driver
+  remap_pfn_range
+  __request_module
+  request_threaded_irq
+  revalidate_disk
+  rtnl_lock
+  rtnl_unlock
+  schedule
+  schedule_timeout
+  schedule_timeout_uninterruptible
+  scnprintf
+  seq_lseek
+  seq_open
+  seq_printf
+  seq_read
+  seq_release
+  set_disk_ro
+  __SetPageMovable
+  sg_alloc_table
+  sg_free_table
+  sg_init_one
+  sg_init_table
+  sg_next
+  simple_strtoul
+  skb_add_rx_frag
+  skb_dequeue
+  skb_push
+  skb_put
+  skb_queue_tail
+  snd_card_disconnect
+  snd_card_free
+  snd_card_new
+  snd_card_register
+  snd_card_rw_proc_new
+  snd_component_add
+  snd_ctl_add
+  _snd_ctl_add_slave
+  snd_ctl_boolean_mono_info
+  snd_ctl_enum_info
+  snd_ctl_find_id
+  snd_ctl_make_virtual_master
+  snd_ctl_new1
+  snd_ctl_sync_vmaster
+  snd_device_new
+  snd_dma_alloc_pages
+  snd_dma_free_pages
+  snd_pci_quirk_lookup
+  snd_pcm_add_chmap_ctls
+  snd_pcm_alt_chmaps
+  snd_pcm_hw_constraint_integer
+  snd_pcm_lib_free_pages
+  snd_pcm_lib_ioctl
+  snd_pcm_lib_malloc_pages
+  snd_pcm_lib_preallocate_pages_for_all
+  snd_pcm_limit_hw_rates
+  snd_pcm_new
+  snd_pcm_period_elapsed
+  snd_pcm_set_ops
+  snd_pcm_std_chmaps
+  snprintf
+  sort
+  sprintf
+  __stack_chk_fail
+  __stack_chk_guard
+  strcmp
+  strcpy
+  strlcpy
+  strlen
+  strncmp
+  strncpy
+  strsep
+  submit_bio
+  sync_file_create
+  synchronize_irq
+  synchronize_rcu
+  sysfs_create_group
+  __sysfs_match_string
+  sysfs_remove_group
+  sysfs_remove_link
+  system_freezing_cnt
+  system_wq
+  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
+  trace_raw_output_prep
+  trace_seq_printf
+  try_module_get
+  __ubsan_handle_cfi_check_fail_abort
+  unlock_page
+  unregister_blkdev
+  unregister_netdev
+  unregister_netdevice_notifier
+  unregister_netdevice_queue
+  unregister_shrinker
+  unregister_virtio_device
+  unregister_virtio_driver
+  up_read
+  up_write
+  usleep_range
+  vabits_actual
+  vfree
+  virtio_check_driver_offered_feature
+  virtio_config_changed
+  virtio_max_dma_size
+  virtqueue_add_inbuf
+  virtqueue_add_outbuf
+  virtqueue_add_sgs
+  virtqueue_detach_unused_buf
+  virtqueue_disable_cb
+  virtqueue_enable_cb
+  virtqueue_get_avail_addr
+  virtqueue_get_buf
+  virtqueue_get_desc_addr
+  virtqueue_get_used_addr
+  virtqueue_get_vring_size
+  virtqueue_is_broken
+  virtqueue_kick
+  virtqueue_kick_prepare
+  virtqueue_notify
+  vmalloc
+  vring_create_virtqueue
+  vring_del_virtqueue
+  vring_interrupt
+  vring_transport_features
+  wait_for_completion
+  __wake_up
+  wake_up_process
+  __warn_printk
+
+# required by deferred-free-helper.ko
+  sched_setscheduler
+
+# required by dummy-cpufreq.ko
+  cpufreq_generic_attr
+  cpufreq_register_driver
+  cpufreq_unregister_driver
+
+# required by failover.ko
+  netdev_master_upper_dev_link
+  rtnl_is_locked
+
+# required by gnss-cmdline.ko
+  bus_find_device
+  device_find_child
+  device_match_name
+  platform_bus_type
+  strstr
+
+# required by gnss-serial.ko
+  gnss_allocate_device
+  gnss_deregister_device
+  gnss_insert_raw
+  gnss_put_device
+  gnss_register_device
+  of_property_read_variable_u32_array
+  __pm_runtime_idle
+  serdev_device_close
+  serdev_device_open
+  serdev_device_set_baudrate
+  serdev_device_set_flow_control
+  serdev_device_wait_until_sent
+  serdev_device_write
+  serdev_device_write_wakeup
+
+# required by goldfish_address_space.ko
+  __ioremap
+
+# required by goldfish_battery.ko
+  power_supply_changed
+  power_supply_get_drvdata
+  power_supply_register
+  power_supply_unregister
+
+# required by goldfish_pipe.ko
+  get_user_pages_fast
+  set_page_dirty
+  tasklet_init
+  tasklet_kill
+  __tasklet_schedule
+
+# required by goldfish_sync.ko
+  __close_fd
+  dma_fence_default_wait
+  dma_fence_free
+
+# required by hci_vhci.ko
+  bt_err
+  _copy_from_iter_full
+  hci_alloc_dev
+  hci_free_dev
+  hci_recv_frame
+  hci_register_dev
+  hci_unregister_dev
+  skb_pull
+  skb_queue_head
+  skb_queue_purge
+
+# required by lzo-rle.ko
+  lzorle1x_1_compress
+
+# required by lzo.ko
+  lzo1x_1_compress
+
+# required by mac80211_hwsim.ko
+  alloc_netdev_mqs
+  __cfg80211_alloc_event_skb
+  __cfg80211_alloc_reply_skb
+  __cfg80211_send_event_skb
+  cfg80211_vendor_cmd_reply
+  dev_alloc_name
+  device_bind_driver
+  dst_release
+  eth_mac_addr
+  generic_file_llseek
+  genlmsg_put
+  genl_notify
+  genl_register_family
+  genl_unregister_family
+  hrtimer_cancel
+  hrtimer_forward
+  hrtimer_init
+  hrtimer_start_range_ns
+  ieee80211_alloc_hw_nm
+  ieee80211_beacon_get_tim
+  ieee80211_csa_finish
+  ieee80211_csa_is_complete
+  ieee80211_free_hw
+  ieee80211_free_txskb
+  ieee80211_get_tx_rates
+  ieee80211_iterate_active_interfaces_atomic
+  ieee80211_probereq_get
+  ieee80211_queue_delayed_work
+  ieee80211_radar_detected
+  ieee80211_ready_on_channel
+  ieee80211_register_hw
+  ieee80211_remain_on_channel_expired
+  ieee80211_rx_irqsafe
+  ieee80211_scan_completed
+  ieee80211_start_tx_ba_cb_irqsafe
+  ieee80211_stop_tx_ba_cb_irqsafe
+  ieee80211_tx_status_irqsafe
+  ieee80211_unregister_hw
+  init_net
+  kstrndup
+  __netdev_alloc_skb
+  netif_rx
+  netlink_broadcast
+  netlink_register_notifier
+  netlink_unicast
+  netlink_unregister_notifier
+  net_namespace_list
+  nla_memcpy
+  __nla_parse
+  nla_put_64bit
+  nla_put
+  param_ops_ushort
+  register_pernet_device
+  regulatory_hint
+  rhashtable_destroy
+  rhashtable_init
+  rhashtable_insert_slow
+  __rht_bucket_nested
+  rht_bucket_nested
+  rht_bucket_nested_insert
+  schedule_timeout_interruptible
+  simple_attr_open
+  simple_attr_read
+  simple_attr_release
+  simple_attr_write
+  skb_copy
+  skb_copy_expand
+  __skb_ext_put
+  skb_trim
+  skb_unlink
+  unregister_pernet_device
+  wiphy_apply_custom_regulatory
+
+# required by md-mod.ko
+  ack_all_badblocks
+  alloc_page_buffers
+  _atomic_dec_and_lock
+  autoremove_wake_function
+  badblocks_clear
+  badblocks_exit
+  badblocks_init
+  badblocks_set
+  badblocks_show
+  badblocks_store
+  __bdevname
+  bdevname
+  bdev_read_only
+  bd_link_disk_holder
+  bd_unlink_disk_holder
+  bio_add_page
+  bio_associate_blkg
+  bio_put
+  bioset_exit
+  bioset_init
+  blkdev_get_by_dev
+  blkdev_put
+  blk_finish_plug
+  blk_queue_split
+  blk_register_region
+  blk_set_stacking_limits
+  blk_start_plug
+  blk_sync_queue
+  blk_unregister_region
+  bmap
+  check_disk_change
+  fget
+  file_path
+  flush_signals
+  flush_workqueue
+  free_buffer_head
+  int_pow
+  invalidate_bdev
+  invalidate_mapping_pages
+  kernel_sigaction
+  kernfs_find_and_get_ns
+  kernfs_notify
+  kernfs_put
+  kobject_del
+  kobject_get
+  kstrtobool
+  kstrtoll
+  kstrtouint
+  kthread_parkme
+  kthread_should_park
+  kthread_should_stop
+  kthread_stop
+  mempool_create
+  mempool_destroy
+  mempool_kfree
+  mempool_kmalloc
+  percpu_ref_exit
+  percpu_ref_init
+  percpu_ref_switch_to_atomic_sync
+  percpu_ref_switch_to_percpu
+  prepare_to_wait
+  proc_create
+  proc_dointvec
+  register_reboot_notifier
+  register_sysctl_table
+  remove_proc_entry
+  seq_file_path
+  skip_spaces
+  strreplace
+  submit_bh
+  submit_bio_wait
+  sync_blockdev
+  sysfs_create_link
+  sysfs_notify
+  unregister_reboot_notifier
+  unregister_sysctl_table
+  vfs_fsync
+
+# required by nd_virtio.ko
+  bio_chain
+  bio_clone_blkg_association
+
+# required by net_failover.ko
+  call_netdevice_notifiers
+  dev_close
+  dev_get_stats
+  dev_mc_sync_multiple
+  dev_mc_unsync
+  dev_open
+  dev_set_mtu
+  dev_uc_sync_multiple
+  dev_uc_unsync
+  __ethtool_get_link_ksettings
+  netdev_change_features
+  netdev_increment_features
+  netdev_lower_state_changed
+  netdev_pick_tx
+  pci_bus_type
+
+# required by page_pool.ko
+  mod_node_page_state
+
+# required by pulse8-cec.ko
+  cec_allocate_adapter
+  cec_delete_adapter
+  cec_received_msg_ts
+  cec_register_adapter
+  cec_s_log_addrs
+  cec_s_phys_addr
+  cec_transmit_attempt_done_ts
+  cec_unregister_adapter
+  serio_close
+  serio_open
+  __serio_register_driver
+  serio_unregister_driver
+  strscpy
+  time64_to_tm
+  wait_for_completion_timeout
+
+# required by rtc-test.ko
+  add_timer
+  del_timer
+  device_init_wakeup
+  devm_rtc_allocate_device
+  platform_device_add
+  platform_device_alloc
+  platform_device_del
+  platform_device_put
+  __rtc_register_device
+  rtc_time64_to_tm
+  rtc_tm_to_time64
+  rtc_update_irq
+
+# required by snd-ac97-codec.ko
+  snd_ctl_remove_id
+  snd_info_create_card_entry
+  snd_info_free_entry
+  snd_interval_refine
+  snd_pcm_hw_rule_add
+  strcat
+
+# required by snd-hda-codec-generic.ko
+  snd_ctl_boolean_stereo_info
+  strchr
+  strlcat
+  __sw_hweight32
+
+# required by snd-hda-codec.ko
+  bpf_trace_run4
+  current_work
+  device_attach
+  driver_register
+  driver_unregister
+  get_device_system_crosststamp
+  kvasprintf
+  ns_to_timespec
+  pm_runtime_forbid
+  pm_runtime_force_resume
+  pm_runtime_force_suspend
+  pm_runtime_set_autosuspend_delay
+  __printk_ratelimit
+  regcache_mark_dirty
+  snd_ctl_add_vmaster_hook
+  snd_ctl_apply_vmaster_slaves
+  snd_ctl_remove
+  snd_device_disconnect
+  snd_device_free
+  snd_jack_new
+  snd_jack_report
+  snd_jack_set_key
+  snd_pcm_hw_constraint_minmax
+  snd_pcm_hw_constraint_step
+  snd_pcm_lib_default_mmap
+  snd_pcm_set_sync
+  strncat
+  timecounter_read
+
+# required by snd-hda-core.ko
+  add_uevent_var
+  device_add
+  device_del
+  kasprintf
+  kobject_create_and_add
+  pm_runtime_get_if_in_use
+  __pm_runtime_set_status
+  regcache_cache_only
+  regcache_sync
+  regmap_exit
+  __regmap_init
+  regmap_read
+  regmap_update_bits_base
+  regmap_write
+  snd_pcm_format_width
+  __sw_hweight64
+  timecounter_init
+
+# required by snd-hda-intel.ko
+  bpf_trace_run1
+  complete_all
+  param_array_ops
+  param_get_int
+  param_set_int
+  pci_dev_put
+  pci_disable_msi
+  pci_enable_msi
+  pci_get_device
+  pci_intx
+  pci_ioremap_bar
+  pci_match_id
+  pci_set_power_state
+  pci_write_config_byte
+  pci_write_config_word
+
+# required by snd-intel8x0.ko
+  snd_pcm_hw_constraint_list
+  snd_pcm_hw_constraint_msbits
+
+# required by system_heap.ko
+  dma_buf_export
+  dma_direct_sync_sg_for_cpu
+  dma_heap_add
+  dma_heap_get_dev
+  dma_heap_get_name
+  __sg_page_iter_next
+  __sg_page_iter_start
+  vmap
+  vunmap
+
+# required by test_meminit.ko
+  kmem_cache_alloc_bulk
+  kmem_cache_free_bulk
+
+# required by tpm.ko
+  alloc_chrdev_region
+  cdev_device_add
+  cdev_device_del
+  cdev_init
+  __compat_only_sysfs_link_entry_to_kobj
+  devm_add_action
+  efi
+  efi_tpm_final_log_size
+  hash_digest_size
+  idr_get_next
+  idr_replace
+  jiffies_to_usecs
+  memchr_inv
+  of_find_property
+  of_get_property
+  of_property_match_string
+  securityfs_create_dir
+  securityfs_create_file
+  securityfs_remove
+  seq_putc
+  seq_write
+  unregister_chrdev_region
+  __usecs_to_jiffies
+
+# required by tpm_vtpm_proxy.ko
+  anon_inode_getfile
+
+# required by virt_wifi.ko
+  cfg80211_connect_done
+  cfg80211_disconnected
+  cfg80211_scan_done
+  __dev_get_by_index
+  dev_printk
+  __module_get
+  netdev_upper_dev_link
+  netif_stacked_transfer_operstate
+  rtnl_link_register
+  rtnl_link_unregister
+  skb_clone
+  unregister_netdevice_many
+  wiphy_free
+  wiphy_new_nm
+  wiphy_register
+  wiphy_unregister
+
+# required by virt_wifi_sim.ko
+  ieee80211_get_channel_khz
+  release_firmware
+  request_firmware
+
+# required by virtio-gpu.ko
+  dma_buf_get_uuid
+  dma_fence_match_context
+  dma_fence_wait_timeout
+  dma_resv_add_excl_fence
+  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_dirtyfb
+  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_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_dev_unregister
+  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_mmap
+  drm_helper_hpd_irq_event
+  drm_helper_mode_fill_fb_struct
+  drm_helper_probe_single_connector_modes
+  drm_ioctl
+  drm_kms_helper_hotplug_event
+  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_put_dev
+  drm_read
+  drm_release
+  drm_set_preferred_mode
+  drm_universal_plane_init
+  __get_task_comm
+  kmalloc_order_trace
+  __sg_alloc_table_from_pages
+  sync_file_get_fence
+  __tracepoint_dma_fence_emit
+  __tracepoint_gpu_mem_total
+  ttm_bo_add_to_lru
+  ttm_bo_del_sub_from_lru
+  ttm_bo_device_init
+  ttm_bo_device_release
+  ttm_bo_dma_acc_size
+  ttm_bo_eviction_valuable
+  ttm_bo_init
+  ttm_bo_init_mm
+  ttm_bo_kmap
+  ttm_bo_kunmap
+  ttm_bo_manager_func
+  ttm_bo_mmap
+  ttm_bo_move_to_lru_tail
+  ttm_bo_put
+  ttm_bo_validate
+  ttm_bo_wait
+  ttm_dma_tt_fini
+  ttm_dma_tt_init
+  ttm_eu_backoff_reservation
+  ttm_eu_fence_buffer_objects
+  ttm_eu_reserve_buffers
+  ttm_tt_init
+  vmalloc_to_page
+  vmemdup_user
+  ww_mutex_lock_interruptible
+  ww_mutex_unlock
+
+# required by virtio-rng.ko
+  wait_for_completion_killable
+
+# required by virtio_balloon.ko
+  adjust_managed_page_count
+  all_vm_events
+  balloon_aops
+  balloon_page_alloc
+  balloon_page_dequeue
+  balloon_page_enqueue
+  si_mem_available
+  si_meminfo
+  system_freezable_wq
+  vm_event_states
+  vm_node_stat
+
+# required by virtio_blk.ko
+  blk_execute_rq
+  blk_get_request
+  blk_mq_alloc_tag_set
+  blk_mq_complete_request
+  blk_mq_end_request
+  blk_mq_free_tag_set
+  blk_mq_init_queue
+  blk_mq_quiesce_queue
+  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_request
+  blk_queue_alignment_offset
+  blk_queue_max_discard_segments
+  blk_queue_max_hw_sectors
+  blk_queue_max_segments
+  blk_queue_max_segment_size
+  blk_rq_map_kern
+  blk_rq_map_sg
+  blk_status_to_errno
+  _dev_notice
+  kobject_uevent_env
+  string_get_size
+
+# required by virtio_console.ko
+  cdev_add
+  cdev_alloc
+  cdev_del
+  debugfs_remove
+  device_destroy
+  fasync_helper
+  hvc_alloc
+  hvc_instantiate
+  hvc_kick
+  hvc_poll
+  hvc_remove
+  __hvc_resize
+  kill_fasync
+  pipe_lock
+  pipe_unlock
+  __register_chrdev
+  single_open
+  single_release
+  __splice_from_pipe
+  __unregister_chrdev
+
+# required by virtio_input.ko
+  input_alloc_absinfo
+  input_mt_init_slots
+  input_set_abs_params
+
+# required by virtio_mmio.ko
+  device_for_each_child
+  __devm_request_region
+  iomem_resource
+  platform_device_register_full
+  sscanf
+
+# required by virtio_net.ko
+  arch_bpf_jit_check_func
+  bpf_prog_add
+  bpf_prog_put
+  bpf_prog_sub
+  bpf_stats_enabled_key
+  bpf_warn_invalid_xdp_action
+  build_skb
+  cpumask_next_wrap
+  cpus_read_lock
+  cpus_read_unlock
+  eth_commit_mac_addr_change
+  eth_prepare_mac_addr_change
+  ethtool_op_get_ts_info
+  eth_type_trans
+  find_next_bit
+  flow_keys_basic_dissector
+  __napi_alloc_skb
+  napi_complete_done
+  napi_consume_skb
+  napi_disable
+  napi_gro_receive
+  napi_hash_del
+  __napi_schedule
+  napi_schedule_prep
+  netdev_notify_peers
+  netdev_warn
+  netif_device_attach
+  netif_napi_add
+  netif_napi_del
+  netif_schedule_queue
+  netif_set_real_num_rx_queues
+  netif_set_real_num_tx_queues
+  __netif_set_xps_queue
+  net_ratelimit
+  __pskb_pull_tail
+  _raw_spin_trylock
+  sched_clock
+  skb_coalesce_rx_frag
+  __skb_flow_dissect
+  skb_page_frag_refill
+  skb_partial_csum_set
+  skb_to_sgvec
+  skb_tstamp_tx
+  softnet_data
+  synchronize_net
+  __tracepoint_xdp_exception
+  virtqueue_add_inbuf_ctx
+  virtqueue_enable_cb_delayed
+  virtqueue_enable_cb_prepare
+  virtqueue_get_buf_ctx
+  virtqueue_poll
+  xdp_convert_zc_to_xdp_frame
+  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
+
+# required by virtio_pci.ko
+  irq_set_affinity_hint
+  pci_alloc_irq_vectors_affinity
+  pci_disable_sriov
+  pci_enable_sriov
+  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_release_selected_regions
+  pci_request_selected_regions
+  pci_vfs_assigned
+  virtio_device_freeze
+  virtio_device_restore
+
+# required by virtio_pmem.ko
+  nvdimm_bus_register
+  nvdimm_bus_unregister
+  nvdimm_pmem_region_create
+
+# required by vmw_vsock_virtio_transport.ko
+  lock_sock_nested
+  release_sock
+  virtio_transport_connect
+  virtio_transport_deliver_tap_pkt
+  virtio_transport_destruct
+  virtio_transport_dgram_allow
+  virtio_transport_dgram_bind
+  virtio_transport_dgram_dequeue
+  virtio_transport_dgram_enqueue
+  virtio_transport_do_socket_init
+  virtio_transport_free_pkt
+  virtio_transport_notify_buffer_size
+  virtio_transport_notify_poll_in
+  virtio_transport_notify_poll_out
+  virtio_transport_notify_recv_init
+  virtio_transport_notify_recv_post_dequeue
+  virtio_transport_notify_recv_pre_block
+  virtio_transport_notify_recv_pre_dequeue
+  virtio_transport_notify_send_init
+  virtio_transport_notify_send_post_enqueue
+  virtio_transport_notify_send_pre_block
+  virtio_transport_notify_send_pre_enqueue
+  virtio_transport_recv_pkt
+  virtio_transport_release
+  virtio_transport_shutdown
+  virtio_transport_stream_allow
+  virtio_transport_stream_dequeue
+  virtio_transport_stream_enqueue
+  virtio_transport_stream_has_data
+  virtio_transport_stream_has_space
+  virtio_transport_stream_is_active
+  virtio_transport_stream_rcvhiwat
+  vsock_core_register
+  vsock_core_unregister
+  vsock_for_each_connected_socket
+
+# required by zram.ko
+  __alloc_percpu
+  bdget_disk
+  bdput
+  __class_register
+  class_unregister
+  crypto_alloc_base
+  crypto_destroy_tfm
+  crypto_has_alg
+  flush_dcache_page
+  free_percpu
+  fsync_bdev
+  generic_end_io_acct
+  generic_start_io_acct
+  idr_find
+  idr_for_each
+  kstrtou16
+  memset64
+  mutex_is_locked
+  page_endio
+  sysfs_streq
+  vzalloc
+
+# required by zsmalloc.ko
+  dec_zone_page_state
+  inc_zone_page_state
+  __lock_page
+  page_mapping
+  _raw_read_lock
+  _raw_read_unlock
+  _raw_write_lock
+  _raw_write_unlock
diff --git a/android/gki_aarch64_modules b/android/gki_aarch64_modules
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/android/gki_aarch64_modules
diff --git a/arch/Kconfig b/arch/Kconfig
index a8df66e..e698a77 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -544,6 +544,112 @@
 	  about 20% of all kernel functions, which increases the kernel code
 	  size by about 2%.
 
+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
+	default y
+	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 LTO
+	bool
+
+config ARCH_SUPPORTS_LTO_CLANG
+	bool
+	help
+	  An architecture should select this option if it supports:
+	  - compiling with Clang,
+	  - 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 ThinLTO.
+
+config THINLTO
+	bool "Use Clang's 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
+	help
+	  This option turns on Link-Time Optimization (LTO).
+
+config LTO_NONE
+	bool "None"
+
+config LTO_CLANG
+	bool "Use Clang's Link Time Optimization (LTO) (EXPERIMENTAL)"
+	depends on ARCH_SUPPORTS_LTO_CLANG
+	depends on !KASAN
+	depends on !FTRACE_MCOUNT_RECORD || HAVE_C_RECORDMCOUNT
+	depends on CC_IS_CLANG && CLANG_VERSION >= 100000 && LD_IS_LLD
+	select LTO
+	help
+          This option enables Clang's Link Time Optimization (LTO), which allows
+          the compiler to optimize the kernel globally at link time. If you
+          enable this option, the compiler generates LLVM IR instead of object
+          files, and the actual compilation from IR occurs at the LTO link step,
+          which may take several minutes.
+
+endchoice
+
+config CFI_CLANG
+	bool "Use Clang's Control Flow Integrity (CFI)"
+	depends on LTO_CLANG && KALLSYMS
+	depends on !GCOV_KERNEL
+	help
+	  This option enables Clang's Control Flow Integrity (CFI), which adds
+	  runtime checking for indirect function calls.
+
+config CFI_CLANG_SHADOW
+	bool "Use CFI shadow to speed up cross-module checks"
+	default y
+	depends on CFI_CLANG
+	help
+	  If you select this option, the kernel builds a fast look-up table of
+	  CFI check functions in loaded modules to reduce overhead.
+
+config CFI_PERMISSIVE
+	bool "Use CFI in permissive mode"
+	depends on CFI_CLANG
+	help
+	  When selected, Control Flow Integrity (CFI) violations result in a
+	  warning instead of a kernel panic. This option is useful for finding
+	  CFI violations during development.
+
 config HAVE_ARCH_WITHIN_STACK_FRAMES
 	bool
 	help
@@ -588,6 +694,13 @@
 	  Archs need to ensure they use a high enough resolution clock to
 	  support irq time accounting and then call enable_sched_clock_irqtime().
 
+config HAVE_MOVE_PUD
+	bool
+	help
+	  Architectures that select this are able to move page tables at the
+	  PUD level. If there are only 3 page table levels, the move effectively
+	  happens at the PGD level.
+
 config HAVE_MOVE_PMD
 	bool
 	help
diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c
index 741e61e..c2d7b6d 100644
--- a/arch/alpha/mm/fault.c
+++ b/arch/alpha/mm/fault.c
@@ -89,7 +89,7 @@
 	const struct exception_table_entry *fixup;
 	int si_code = SEGV_MAPERR;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	/* As of EV6, a load into $31/$f31 is a prefetch, and never faults
 	   (or is suppressed by the PALcode).  Support that for older CPUs
@@ -150,7 +150,7 @@
 	   the fault.  */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -169,7 +169,7 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
+			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
 			 * have already released it in __lock_page_or_retry
diff --git a/arch/arc/mm/dma.c b/arch/arc/mm/dma.c
index 73a7e88..4726906 100644
--- a/arch/arc/mm/dma.c
+++ b/arch/arc/mm/dma.c
@@ -104,3 +104,4 @@
 	dev_info(dev, "use %scoherent DMA ops\n",
 		 dev->dma_coherent ? "" : "non");
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c
index 3861543..fdf09db 100644
--- a/arch/arc/mm/fault.c
+++ b/arch/arc/mm/fault.c
@@ -94,7 +94,7 @@
 	         (regs->ecr_cause == ECR_C_PROTV_INST_FETCH))
 		exec = 1;
 
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 	if (write)
@@ -127,29 +127,20 @@
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	/*
-	 * Fault retry nuances
-	 */
-	if (unlikely(fault & VM_FAULT_RETRY)) {
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			goto no_context;
+		return;
+	}
 
-		/*
-		 * If fault needs to be retried, handle any pending signals
-		 * first (by returning to user mode).
-		 * mmap_sem already relinquished by core mm for RETRY case
-		 */
-		if (fatal_signal_pending(current)) {
-			if (!user_mode(regs))
-				goto no_context;
-			return;
-		}
-		/*
-		 * retry state machine
-		 */
-		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			flags |= FAULT_FLAG_TRIED;
-			goto retry;
-		}
+	/*
+	 * Fault retry nuances, mmap_sem already relinquished by core mm
+	 */
+	if (unlikely((fault & VM_FAULT_RETRY) &&
+		     (flags & FAULT_FLAG_ALLOW_RETRY))) {
+		flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 bad_area:
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 4b36bbc..f6fbe48 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -49,6 +49,7 @@
 	select GENERIC_ARCH_TOPOLOGY if ARM_CPU_TOPOLOGY
 	select GENERIC_ATOMIC64 if CPU_V7M || CPU_V6 || !CPU_32v6K || !AEABI
 	select GENERIC_CLOCKEVENTS_BROADCAST if SMP
+	select GENERIC_IRQ_IPI if SMP
 	select GENERIC_CPU_AUTOPROBE
 	select GENERIC_EARLY_IOREMAP
 	select GENERIC_IDLE_POLL_SETUP
@@ -1252,6 +1253,7 @@
 	depends on CPU_V7
 	select ARM_ARCH_TIMER
 	select GENERIC_CLOCKEVENTS
+	select GENERIC_GETTIMEOFDAY
 	help
 	  This option enables support for the ARM architected timer
 
@@ -2098,3 +2100,4 @@
 endif
 
 source "arch/arm/kvm/Kconfig"
+source "arch/arm/Kconfig.assembler"
diff --git a/arch/arm/Kconfig.assembler b/arch/arm/Kconfig.assembler
new file mode 100644
index 0000000..5cb31aa
--- /dev/null
+++ b/arch/arm/Kconfig.assembler
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+
+config AS_VFP_VMRS_FPINST
+	def_bool $(as-instr,.fpu vfpv2\nvmrs r0$(comma)FPINST)
+	help
+	  Supported by binutils >= 2.24 and LLVM integrated assembler.
diff --git a/arch/arm/OWNERS b/arch/arm/OWNERS
new file mode 100644
index 0000000..1e390c7
--- /dev/null
+++ b/arch/arm/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/arch/arm/OWNERS
diff --git a/arch/arm/boot/bootp/init.S b/arch/arm/boot/bootp/init.S
index 5c476bd..b562da2 100644
--- a/arch/arm/boot/bootp/init.S
+++ b/arch/arm/boot/bootp/init.S
@@ -13,7 +13,7 @@
  *  size immediately following the kernel, we could build this into
  *  a binary blob, and concatenate the zImage using the cat command.
  */
-		.section .start,#alloc,#execinstr
+		.section .start, "ax"
 		.type	_start, #function
 		.globl	_start
 
diff --git a/arch/arm/boot/compressed/big-endian.S b/arch/arm/boot/compressed/big-endian.S
index 88e2a88d..0e092c3 100644
--- a/arch/arm/boot/compressed/big-endian.S
+++ b/arch/arm/boot/compressed/big-endian.S
@@ -6,7 +6,7 @@
  *  Author: Nicolas Pitre
  */
 
-	.section ".start", #alloc, #execinstr
+	.section ".start", "ax"
 
 	mrc	p15, 0, r0, c1, c0, 0	@ read control reg
 	orr	r0, r0, #(1 << 7)	@ enable big endian mode
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index cbe1262..42496c6 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -140,7 +140,14 @@
 #endif
 		.endm
 
-		.section ".start", #alloc, #execinstr
+		.macro	be32tocpu, val, tmp
+#ifndef __ARMEB__
+		/* convert to little endian */
+		rev_l	\val, \tmp
+#endif
+		.endm
+
+		.section ".start", "ax"
 /*
  * sort out different calling conventions
  */
@@ -343,13 +350,7 @@
 
 		/* Get the initial DTB size */
 		ldr	r5, [r6, #4]
-#ifndef __ARMEB__
-		/* convert to little endian */
-		eor	r1, r5, r5, ror #16
-		bic	r1, r1, #0x00ff0000
-		mov	r5, r5, ror #8
-		eor	r5, r5, r1, lsr #8
-#endif
+		be32tocpu r5, r1
 		/* 50% DTB growth should be good enough */
 		add	r5, r5, r5, lsr #1
 		/* preserve 64-bit alignment */
@@ -402,13 +403,7 @@
 
 		/* Get the current DTB size */
 		ldr	r5, [r6, #4]
-#ifndef __ARMEB__
-		/* convert r5 (dtb size) to little endian */
-		eor	r1, r5, r5, ror #16
-		bic	r1, r1, #0x00ff0000
-		mov	r5, r5, ror #8
-		eor	r5, r5, r1, lsr #8
-#endif
+		be32tocpu r5, r1
 
 		/* preserve 64-bit alignment */
 		add	r5, r5, #7
@@ -1273,7 +1268,7 @@
 __armv5tej_mmu_cache_flush:
 		tst	r4, #1
 		movne	pc, lr
-1:		mrc	p15, 0, r15, c7, c14, 3	@ test,clean,invalidate D cache
+1:		mrc	p15, 0, APSR_nzcv, c7, c14, 3	@ test,clean,invalidate D cache
 		bne	1b
 		mcr	p15, 0, r0, c7, c5, 0	@ flush I cache
 		mcr	p15, 0, r0, c7, c10, 4	@ drain WB
diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S
index 0284f84..2757764 100644
--- a/arch/arm/boot/compressed/piggy.S
+++ b/arch/arm/boot/compressed/piggy.S
@@ -1,5 +1,5 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-	.section .piggydata,#alloc
+	.section .piggydata, "a"
 	.globl	input_data
 input_data:
 	.incbin	"arch/arm/boot/compressed/piggy_data"
diff --git a/arch/arm/boot/dts/dra7-l4.dtsi b/arch/arm/boot/dts/dra7-l4.dtsi
index 3f845a8..5798952 100644
--- a/arch/arm/boot/dts/dra7-l4.dtsi
+++ b/arch/arm/boot/dts/dra7-l4.dtsi
@@ -1176,7 +1176,7 @@
 			};
 		};
 
-		timer3_target: target-module@34000 {	/* 0x48034000, ap 7 46.0 */
+		target-module@34000 {			/* 0x48034000, ap 7 46.0 */
 			compatible = "ti,sysc-omap4-timer", "ti,sysc";
 			ti,hwmods = "timer3";
 			reg = <0x34000 0x4>,
@@ -1204,7 +1204,7 @@
 			};
 		};
 
-		timer4_target: target-module@36000 {	/* 0x48036000, ap 9 4e.0 */
+		target-module@36000 {			/* 0x48036000, ap 9 4e.0 */
 			compatible = "ti,sysc-omap4-timer", "ti,sysc";
 			ti,hwmods = "timer4";
 			reg = <0x36000 0x4>,
diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi
index f73324cb..a6ef3d1 100644
--- a/arch/arm/boot/dts/dra7.dtsi
+++ b/arch/arm/boot/dts/dra7.dtsi
@@ -46,7 +46,6 @@
 
 	timer {
 		compatible = "arm,armv7-timer";
-		status = "disabled";	/* See ARM architected timer wrap erratum i940 */
 		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
 			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
 			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(2) | IRQ_TYPE_LEVEL_LOW)>,
@@ -767,22 +766,3 @@
 
 #include "dra7-l4.dtsi"
 #include "dra7xx-clocks.dtsi"
-
-/* Local timers, see ARM architected timer wrap erratum i940 */
-&timer3_target {
-	ti,no-reset-on-init;
-	ti,no-idle;
-	timer@0 {
-		assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER3_CLKCTRL 24>;
-		assigned-clock-parents = <&timer_sys_clk_div>;
-	};
-};
-
-&timer4_target {
-	ti,no-reset-on-init;
-	ti,no-idle;
-	timer@0 {
-		assigned-clocks = <&l4per_clkctrl DRA7_L4PER_TIMER4_CLKCTRL 24>;
-		assigned-clock-parents = <&timer_sys_clk_div>;
-	};
-};
diff --git a/arch/arm/configs/bcm2835_defconfig b/arch/arm/configs/bcm2835_defconfig
index 519ff58..0afcae9 100644
--- a/arch/arm/configs/bcm2835_defconfig
+++ b/arch/arm/configs/bcm2835_defconfig
@@ -178,6 +178,7 @@
 CONFIG_STACK_TRACER=y
 CONFIG_FUNCTION_PROFILER=y
 CONFIG_TEST_KSTRTOX=y
+CONFIG_DEBUG_FS=y
 CONFIG_KGDB=y
 CONFIG_KGDB_KDB=y
 CONFIG_STRICT_DEVMEM=y
diff --git a/arch/arm/configs/socfpga_defconfig b/arch/arm/configs/socfpga_defconfig
index fe2e1e8..e73c97b 100644
--- a/arch/arm/configs/socfpga_defconfig
+++ b/arch/arm/configs/socfpga_defconfig
@@ -157,6 +157,7 @@
 CONFIG_PRINTK_TIME=y
 CONFIG_DEBUG_INFO=y
 CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
 CONFIG_DETECT_HUNG_TASK=y
 # CONFIG_SCHED_DEBUG is not set
 CONFIG_FUNCTION_TRACER=y
diff --git a/arch/arm/crypto/.gitignore b/arch/arm/crypto/.gitignore
index 31e1f53..a3c7ad5 100644
--- a/arch/arm/crypto/.gitignore
+++ b/arch/arm/crypto/.gitignore
@@ -1,3 +1,4 @@
 aesbs-core.S
 sha256-core.S
 sha512-core.S
+poly1305-core.S
diff --git a/arch/arm/crypto/Kconfig b/arch/arm/crypto/Kconfig
index 043b0b1..3e7acf1 100644
--- a/arch/arm/crypto/Kconfig
+++ b/arch/arm/crypto/Kconfig
@@ -30,7 +30,7 @@
 
 config CRYPTO_SHA1_ARM_CE
 	tristate "SHA1 digest algorithm (ARM v8 Crypto Extensions)"
-	depends on KERNEL_MODE_NEON
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
 	select CRYPTO_SHA1_ARM
 	select CRYPTO_HASH
 	help
@@ -39,7 +39,7 @@
 
 config CRYPTO_SHA2_ARM_CE
 	tristate "SHA-224/256 digest algorithm (ARM v8 Crypto Extensions)"
-	depends on KERNEL_MODE_NEON
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
 	select CRYPTO_SHA256_ARM
 	select CRYPTO_HASH
 	help
@@ -62,6 +62,25 @@
 	  SHA-512 secure hash standard (DFIPS 180-2) implemented
 	  using optimized ARM assembler and NEON, when available.
 
+config CRYPTO_BLAKE2S_ARM
+	tristate "BLAKE2s digest algorithm (ARM)"
+	select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	help
+	  BLAKE2s digest algorithm optimized with ARM scalar instructions.  This
+	  is faster than the generic implementations of BLAKE2s and BLAKE2b, but
+	  slower than the NEON implementation of BLAKE2b.  (There is no NEON
+	  implementation of BLAKE2s, since NEON doesn't really help with it.)
+
+config CRYPTO_BLAKE2B_NEON
+	tristate "BLAKE2b digest algorithm (ARM NEON)"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_BLAKE2B
+	help
+	  BLAKE2b digest algorithm optimized with ARM NEON instructions.
+	  On ARM processors that have NEON support but not the ARMv8
+	  Crypto Extensions, typically this BLAKE2b implementation is
+	  much faster than SHA-2 and slightly faster than SHA-1.
+
 config CRYPTO_AES_ARM
 	tristate "Scalar AES cipher for ARM"
 	select CRYPTO_ALGAPI
@@ -96,7 +115,7 @@
 
 config CRYPTO_AES_ARM_CE
 	tristate "Accelerated AES using ARMv8 Crypto Extensions"
-	depends on KERNEL_MODE_NEON
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
 	select CRYPTO_BLKCIPHER
 	select CRYPTO_LIB_AES
 	select CRYPTO_SIMD
@@ -106,7 +125,7 @@
 
 config CRYPTO_GHASH_ARM_CE
 	tristate "PMULL-accelerated GHASH using NEON/ARMv8 Crypto Extensions"
-	depends on KERNEL_MODE_NEON
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
 	select CRYPTO_HASH
 	select CRYPTO_CRYPTD
 	select CRYPTO_GF128MUL
@@ -118,23 +137,35 @@
 
 config CRYPTO_CRCT10DIF_ARM_CE
 	tristate "CRCT10DIF digest algorithm using PMULL instructions"
-	depends on KERNEL_MODE_NEON && CRC_T10DIF
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
+	depends on CRC_T10DIF
 	select CRYPTO_HASH
 
 config CRYPTO_CRC32_ARM_CE
 	tristate "CRC32(C) digest algorithm using CRC and/or PMULL instructions"
-	depends on KERNEL_MODE_NEON && CRC32
+	depends on KERNEL_MODE_NEON && (CC_IS_CLANG || GCC_VERSION >= 40800)
+	depends on CRC32
 	select CRYPTO_HASH
 
 config CRYPTO_CHACHA20_NEON
-	tristate "NEON accelerated ChaCha stream cipher algorithms"
-	depends on KERNEL_MODE_NEON
+	tristate "NEON and scalar accelerated ChaCha stream cipher algorithms"
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
+config CRYPTO_POLY1305_ARM
+	tristate "Accelerated scalar and SIMD Poly1305 hash implementations"
+	select CRYPTO_HASH
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 
 config CRYPTO_NHPOLY1305_NEON
 	tristate "NEON accelerated NHPoly1305 hash function (for Adiantum)"
 	depends on KERNEL_MODE_NEON
 	select CRYPTO_NHPOLY1305
 
+config CRYPTO_CURVE25519_NEON
+	tristate "NEON accelerated Curve25519 scalar multiplication library"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_LIB_CURVE25519_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CURVE25519
+
 endif
diff --git a/arch/arm/crypto/Makefile b/arch/arm/crypto/Makefile
index 4180f3a..8f26c45 100644
--- a/arch/arm/crypto/Makefile
+++ b/arch/arm/crypto/Makefile
@@ -9,35 +9,19 @@
 obj-$(CONFIG_CRYPTO_SHA1_ARM_NEON) += sha1-arm-neon.o
 obj-$(CONFIG_CRYPTO_SHA256_ARM) += sha256-arm.o
 obj-$(CONFIG_CRYPTO_SHA512_ARM) += sha512-arm.o
+obj-$(CONFIG_CRYPTO_BLAKE2S_ARM) += blake2s-arm.o
+obj-$(CONFIG_CRYPTO_BLAKE2B_NEON) += blake2b-neon.o
 obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
+obj-$(CONFIG_CRYPTO_POLY1305_ARM) += poly1305-arm.o
 obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
+obj-$(CONFIG_CRYPTO_CURVE25519_NEON) += curve25519-neon.o
 
-ce-obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
-ce-obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
-ce-obj-$(CONFIG_CRYPTO_SHA2_ARM_CE) += sha2-arm-ce.o
-ce-obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o
-ce-obj-$(CONFIG_CRYPTO_CRCT10DIF_ARM_CE) += crct10dif-arm-ce.o
-crc-obj-$(CONFIG_CRYPTO_CRC32_ARM_CE) += crc32-arm-ce.o
-
-ifneq ($(crc-obj-y)$(crc-obj-m),)
-ifeq ($(call as-instr,.arch armv8-a\n.arch_extension crc,y,n),y)
-ce-obj-y += $(crc-obj-y)
-ce-obj-m += $(crc-obj-m)
-else
-$(warning These CRC Extensions modules need binutils 2.23 or higher)
-$(warning $(crc-obj-y) $(crc-obj-m))
-endif
-endif
-
-ifneq ($(ce-obj-y)$(ce-obj-m),)
-ifeq ($(call as-instr,.fpu crypto-neon-fp-armv8,y,n),y)
-obj-y += $(ce-obj-y)
-obj-m += $(ce-obj-m)
-else
-$(warning These ARMv8 Crypto Extensions modules need binutils 2.23 or higher)
-$(warning $(ce-obj-y) $(ce-obj-m))
-endif
-endif
+obj-$(CONFIG_CRYPTO_AES_ARM_CE) += aes-arm-ce.o
+obj-$(CONFIG_CRYPTO_SHA1_ARM_CE) += sha1-arm-ce.o
+obj-$(CONFIG_CRYPTO_SHA2_ARM_CE) += sha2-arm-ce.o
+obj-$(CONFIG_CRYPTO_GHASH_ARM_CE) += ghash-arm-ce.o
+obj-$(CONFIG_CRYPTO_CRCT10DIF_ARM_CE) += crct10dif-arm-ce.o
+obj-$(CONFIG_CRYPTO_CRC32_ARM_CE) += crc32-arm-ce.o
 
 aes-arm-y	:= aes-cipher-core.o aes-cipher-glue.o
 aes-arm-bs-y	:= aes-neonbs-core.o aes-neonbs-glue.o
@@ -47,19 +31,27 @@
 sha256-arm-y	:= sha256-core.o sha256_glue.o $(sha256-arm-neon-y)
 sha512-arm-neon-$(CONFIG_KERNEL_MODE_NEON) := sha512-neon-glue.o
 sha512-arm-y	:= sha512-core.o sha512-glue.o $(sha512-arm-neon-y)
+blake2s-arm-y   := blake2s-core.o blake2s-glue.o
+blake2b-neon-y  := blake2b-neon-core.o blake2b-neon-glue.o
 sha1-arm-ce-y	:= sha1-ce-core.o sha1-ce-glue.o
 sha2-arm-ce-y	:= sha2-ce-core.o sha2-ce-glue.o
 aes-arm-ce-y	:= aes-ce-core.o aes-ce-glue.o
 ghash-arm-ce-y	:= ghash-ce-core.o ghash-ce-glue.o
 crct10dif-arm-ce-y	:= crct10dif-ce-core.o crct10dif-ce-glue.o
 crc32-arm-ce-y:= crc32-ce-core.o crc32-ce-glue.o
-chacha-neon-y := chacha-neon-core.o chacha-neon-glue.o
+chacha-neon-y := chacha-scalar-core.o chacha-glue.o
+chacha-neon-$(CONFIG_KERNEL_MODE_NEON) += chacha-neon-core.o
+poly1305-arm-y := poly1305-core.o poly1305-glue.o
 nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
+curve25519-neon-y := curve25519-core.o curve25519-glue.o
 
 ifdef REGENERATE_ARM_CRYPTO
 quiet_cmd_perl = PERL    $@
       cmd_perl = $(PERL) $(<) > $(@)
 
+$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv4.pl
+	$(call cmd,perl)
+
 $(src)/sha256-core.S_shipped: $(src)/sha256-armv4.pl
 	$(call cmd,perl)
 
@@ -67,4 +59,9 @@
 	$(call cmd,perl)
 endif
 
-clean-files += sha256-core.S sha512-core.S
+clean-files += poly1305-core.S sha256-core.S sha512-core.S
+
+# massage the perlasm code a bit so we only get the NEON routine if we need it
+poly1305-aflags-$(CONFIG_CPU_V7) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=5
+poly1305-aflags-$(CONFIG_KERNEL_MODE_NEON) := -U__LINUX_ARM_ARCH__ -D__LINUX_ARM_ARCH__=7
+AFLAGS_poly1305-core.o += $(poly1305-aflags-y)
diff --git a/arch/arm/crypto/blake2b-neon-core.S b/arch/arm/crypto/blake2b-neon-core.S
new file mode 100644
index 0000000..0406a18
--- /dev/null
+++ b/arch/arm/crypto/blake2b-neon-core.S
@@ -0,0 +1,347 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * BLAKE2b digest algorithm, NEON accelerated
+ *
+ * Copyright 2020 Google LLC
+ *
+ * Author: Eric Biggers <ebiggers@google.com>
+ */
+
+#include <linux/linkage.h>
+
+	.text
+	.fpu		neon
+
+	// The arguments to blake2b_compress_neon()
+	STATE		.req	r0
+	BLOCK		.req	r1
+	NBLOCKS		.req	r2
+	INC		.req	r3
+
+	// Pointers to the rotation tables
+	ROR24_TABLE	.req	r4
+	ROR16_TABLE	.req	r5
+
+	// The original stack pointer
+	ORIG_SP		.req	r6
+
+	// NEON registers which contain the message words of the current block.
+	// M_0-M_3 are occasionally used for other purposes too.
+	M_0		.req	d16
+	M_1		.req	d17
+	M_2		.req	d18
+	M_3		.req	d19
+	M_4		.req	d20
+	M_5		.req	d21
+	M_6		.req	d22
+	M_7		.req	d23
+	M_8		.req	d24
+	M_9		.req	d25
+	M_10		.req	d26
+	M_11		.req	d27
+	M_12		.req	d28
+	M_13		.req	d29
+	M_14		.req	d30
+	M_15		.req	d31
+
+	.align		4
+	// Tables for computing ror64(x, 24) and ror64(x, 16) using the vtbl.8
+	// instruction.  This is the most efficient way to implement these
+	// rotation amounts with NEON.  (On Cortex-A53 it's the same speed as
+	// vshr.u64 + vsli.u64, while on Cortex-A7 it's faster.)
+.Lror24_table:
+	.byte		3, 4, 5, 6, 7, 0, 1, 2
+.Lror16_table:
+	.byte		2, 3, 4, 5, 6, 7, 0, 1
+	// The BLAKE2b initialization vector
+.Lblake2b_IV:
+	.quad		0x6a09e667f3bcc908, 0xbb67ae8584caa73b
+	.quad		0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1
+	.quad		0x510e527fade682d1, 0x9b05688c2b3e6c1f
+	.quad		0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
+
+// Execute one round of BLAKE2b by updating the state matrix v[0..15] in the
+// NEON registers q0-q7.  The message block is in q8..q15 (M_0-M_15).  The stack
+// pointer points to a 32-byte aligned buffer containing a copy of q8 and q9
+// (M_0-M_3), so that they can be reloaded if they are used as temporary
+// registers.  The macro arguments s0-s15 give the order in which the message
+// words are used in this round.  'final' is 1 if this is the final round.
+.macro	_blake2b_round	s0, s1, s2, s3, s4, s5, s6, s7, \
+			s8, s9, s10, s11, s12, s13, s14, s15, final=0
+
+	// Mix the columns:
+	// (v[0], v[4], v[8], v[12]), (v[1], v[5], v[9], v[13]),
+	// (v[2], v[6], v[10], v[14]), and (v[3], v[7], v[11], v[15]).
+
+	// a += b + m[blake2b_sigma[r][2*i + 0]];
+	vadd.u64	q0, q0, q2
+	vadd.u64	q1, q1, q3
+	vadd.u64	d0, d0, M_\s0
+	vadd.u64	d1, d1, M_\s2
+	vadd.u64	d2, d2, M_\s4
+	vadd.u64	d3, d3, M_\s6
+
+	// d = ror64(d ^ a, 32);
+	veor		q6, q6, q0
+	veor		q7, q7, q1
+	vrev64.32	q6, q6
+	vrev64.32	q7, q7
+
+	// c += d;
+	vadd.u64	q4, q4, q6
+	vadd.u64	q5, q5, q7
+
+	// b = ror64(b ^ c, 24);
+	vld1.8		{M_0}, [ROR24_TABLE, :64]
+	veor		q2, q2, q4
+	veor		q3, q3, q5
+	vtbl.8		d4, {d4}, M_0
+	vtbl.8		d5, {d5}, M_0
+	vtbl.8		d6, {d6}, M_0
+	vtbl.8		d7, {d7}, M_0
+
+	// a += b + m[blake2b_sigma[r][2*i + 1]];
+	//
+	// M_0 got clobbered above, so we have to reload it if any of the four
+	// message words this step needs happens to be M_0.  Otherwise we don't
+	// need to reload it here, as it will just get clobbered again below.
+.if \s1 == 0 || \s3 == 0 || \s5 == 0 || \s7 == 0
+	vld1.8		{M_0}, [sp, :64]
+.endif
+	vadd.u64	q0, q0, q2
+	vadd.u64	q1, q1, q3
+	vadd.u64	d0, d0, M_\s1
+	vadd.u64	d1, d1, M_\s3
+	vadd.u64	d2, d2, M_\s5
+	vadd.u64	d3, d3, M_\s7
+
+	// d = ror64(d ^ a, 16);
+	vld1.8		{M_0}, [ROR16_TABLE, :64]
+	veor		q6, q6, q0
+	veor		q7, q7, q1
+	vtbl.8		d12, {d12}, M_0
+	vtbl.8		d13, {d13}, M_0
+	vtbl.8		d14, {d14}, M_0
+	vtbl.8		d15, {d15}, M_0
+
+	// c += d;
+	vadd.u64	q4, q4, q6
+	vadd.u64	q5, q5, q7
+
+	// b = ror64(b ^ c, 63);
+	//
+	// This rotation amount isn't a multiple of 8, so it has to be
+	// implemented using a pair of shifts, which requires temporary
+	// registers.  Use q8-q9 (M_0-M_3) for this, and reload them afterwards.
+	veor		q8, q2, q4
+	veor		q9, q3, q5
+	vshr.u64	q2, q8, #63
+	vshr.u64	q3, q9, #63
+	vsli.u64	q2, q8, #1
+	vsli.u64	q3, q9, #1
+	vld1.8		{q8-q9}, [sp, :256]
+
+	// Mix the diagonals:
+	// (v[0], v[5], v[10], v[15]), (v[1], v[6], v[11], v[12]),
+	// (v[2], v[7], v[8], v[13]), and (v[3], v[4], v[9], v[14]).
+	//
+	// There are two possible ways to do this: use 'vext' instructions to
+	// shift the rows of the matrix so that the diagonals become columns,
+	// and undo it afterwards; or just use 64-bit operations on 'd'
+	// registers instead of 128-bit operations on 'q' registers.  We use the
+	// latter approach, as it performs much better on Cortex-A7.
+
+	// a += b + m[blake2b_sigma[r][2*i + 0]];
+	vadd.u64	d0, d0, d5
+	vadd.u64	d1, d1, d6
+	vadd.u64	d2, d2, d7
+	vadd.u64	d3, d3, d4
+	vadd.u64	d0, d0, M_\s8
+	vadd.u64	d1, d1, M_\s10
+	vadd.u64	d2, d2, M_\s12
+	vadd.u64	d3, d3, M_\s14
+
+	// d = ror64(d ^ a, 32);
+	veor		d15, d15, d0
+	veor		d12, d12, d1
+	veor		d13, d13, d2
+	veor		d14, d14, d3
+	vrev64.32	d15, d15
+	vrev64.32	d12, d12
+	vrev64.32	d13, d13
+	vrev64.32	d14, d14
+
+	// c += d;
+	vadd.u64	d10, d10, d15
+	vadd.u64	d11, d11, d12
+	vadd.u64	d8, d8, d13
+	vadd.u64	d9, d9, d14
+
+	// b = ror64(b ^ c, 24);
+	vld1.8		{M_0}, [ROR24_TABLE, :64]
+	veor		d5, d5, d10
+	veor		d6, d6, d11
+	veor		d7, d7, d8
+	veor		d4, d4, d9
+	vtbl.8		d5, {d5}, M_0
+	vtbl.8		d6, {d6}, M_0
+	vtbl.8		d7, {d7}, M_0
+	vtbl.8		d4, {d4}, M_0
+
+	// a += b + m[blake2b_sigma[r][2*i + 1]];
+.if \s9 == 0 || \s11 == 0 || \s13 == 0 || \s15 == 0
+	vld1.8		{M_0}, [sp, :64]
+.endif
+	vadd.u64	d0, d0, d5
+	vadd.u64	d1, d1, d6
+	vadd.u64	d2, d2, d7
+	vadd.u64	d3, d3, d4
+	vadd.u64	d0, d0, M_\s9
+	vadd.u64	d1, d1, M_\s11
+	vadd.u64	d2, d2, M_\s13
+	vadd.u64	d3, d3, M_\s15
+
+	// d = ror64(d ^ a, 16);
+	vld1.8		{M_0}, [ROR16_TABLE, :64]
+	veor		d15, d15, d0
+	veor		d12, d12, d1
+	veor		d13, d13, d2
+	veor		d14, d14, d3
+	vtbl.8		d12, {d12}, M_0
+	vtbl.8		d13, {d13}, M_0
+	vtbl.8		d14, {d14}, M_0
+	vtbl.8		d15, {d15}, M_0
+
+	// c += d;
+	vadd.u64	d10, d10, d15
+	vadd.u64	d11, d11, d12
+	vadd.u64	d8, d8, d13
+	vadd.u64	d9, d9, d14
+
+	// b = ror64(b ^ c, 63);
+	veor		d16, d4, d9
+	veor		d17, d5, d10
+	veor		d18, d6, d11
+	veor		d19, d7, d8
+	vshr.u64	q2, q8, #63
+	vshr.u64	q3, q9, #63
+	vsli.u64	q2, q8, #1
+	vsli.u64	q3, q9, #1
+	// Reloading q8-q9 can be skipped on the final round.
+.if ! \final
+	vld1.8		{q8-q9}, [sp, :256]
+.endif
+.endm
+
+//
+// void blake2b_compress_neon(struct blake2b_state *state,
+//			      const u8 *block, size_t nblocks, u32 inc);
+//
+// Only the first three fields of struct blake2b_state are used:
+//	u64 h[8];	(inout)
+//	u64 t[2];	(inout)
+//	u64 f[2];	(in)
+//
+	.align		5
+ENTRY(blake2b_compress_neon)
+	push		{r4-r10}
+
+	// Allocate a 32-byte stack buffer that is 32-byte aligned.
+	mov		ORIG_SP, sp
+	sub		ip, sp, #32
+	bic		ip, ip, #31
+	mov		sp, ip
+
+	adr		ROR24_TABLE, .Lror24_table
+	adr		ROR16_TABLE, .Lror16_table
+
+	mov		ip, STATE
+	vld1.64		{q0-q1}, [ip]!		// Load h[0..3]
+	vld1.64		{q2-q3}, [ip]!		// Load h[4..7]
+.Lnext_block:
+	  adr		r10, .Lblake2b_IV
+	vld1.64		{q14-q15}, [ip]		// Load t[0..1] and f[0..1]
+	vld1.64		{q4-q5}, [r10]!		// Load IV[0..3]
+	  vmov		r7, r8, d28		// Copy t[0] to (r7, r8)
+	vld1.64		{q6-q7}, [r10]		// Load IV[4..7]
+	  adds		r7, r7, INC		// Increment counter
+	bcs		.Lslow_inc_ctr
+	vmov.i32	d28[0], r7
+	vst1.64		{d28}, [ip]		// Update t[0]
+.Linc_ctr_done:
+
+	// Load the next message block and finish initializing the state matrix
+	// 'v'.  Fortunately, there are exactly enough NEON registers to fit the
+	// entire state matrix in q0-q7 and the entire message block in q8-15.
+	//
+	// However, _blake2b_round also needs some extra registers for rotates,
+	// so we have to spill some registers.  It's better to spill the message
+	// registers than the state registers, as the message doesn't change.
+	// Therefore we store a copy of the first 32 bytes of the message block
+	// (q8-q9) in an aligned buffer on the stack so that they can be
+	// reloaded when needed.  (We could just reload directly from the
+	// message buffer, but it's faster to use aligned loads.)
+	vld1.8		{q8-q9}, [BLOCK]!
+	  veor		q6, q6, q14	// v[12..13] = IV[4..5] ^ t[0..1]
+	vld1.8		{q10-q11}, [BLOCK]!
+	  veor		q7, q7, q15	// v[14..15] = IV[6..7] ^ f[0..1]
+	vld1.8		{q12-q13}, [BLOCK]!
+	vst1.8		{q8-q9}, [sp, :256]
+	  mov		ip, STATE
+	vld1.8		{q14-q15}, [BLOCK]!
+
+	// Execute the rounds.  Each round is provided the order in which it
+	// needs to use the message words.
+	_blake2b_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2b_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3
+	_blake2b_round	11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4
+	_blake2b_round	7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8
+	_blake2b_round	9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13
+	_blake2b_round	2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9
+	_blake2b_round	12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11
+	_blake2b_round	13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10
+	_blake2b_round	6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5
+	_blake2b_round	10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0
+	_blake2b_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2b_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 \
+			final=1
+
+	// Fold the final state matrix into the hash chaining value:
+	//
+	//	for (i = 0; i < 8; i++)
+	//		h[i] ^= v[i] ^ v[i + 8];
+	//
+	  vld1.64	{q8-q9}, [ip]!		// Load old h[0..3]
+	veor		q0, q0, q4		// v[0..1] ^= v[8..9]
+	veor		q1, q1, q5		// v[2..3] ^= v[10..11]
+	  vld1.64	{q10-q11}, [ip]		// Load old h[4..7]
+	veor		q2, q2, q6		// v[4..5] ^= v[12..13]
+	veor		q3, q3, q7		// v[6..7] ^= v[14..15]
+	veor		q0, q0, q8		// v[0..1] ^= h[0..1]
+	veor		q1, q1, q9		// v[2..3] ^= h[2..3]
+	  mov		ip, STATE
+	  subs		NBLOCKS, NBLOCKS, #1	// nblocks--
+	  vst1.64	{q0-q1}, [ip]!		// Store new h[0..3]
+	veor		q2, q2, q10		// v[4..5] ^= h[4..5]
+	veor		q3, q3, q11		// v[6..7] ^= h[6..7]
+	  vst1.64	{q2-q3}, [ip]!		// Store new h[4..7]
+
+	// Advance to the next block, if there is one.
+	bne		.Lnext_block		// nblocks != 0?
+
+	mov		sp, ORIG_SP
+	pop		{r4-r10}
+	mov		pc, lr
+
+.Lslow_inc_ctr:
+	// Handle the case where the counter overflowed its low 32 bits, by
+	// carrying the overflow bit into the full 128-bit counter.
+	vmov		r9, r10, d29
+	adcs		r8, r8, #0
+	adcs		r9, r9, #0
+	adc		r10, r10, #0
+	vmov		d28, r7, r8
+	vmov		d29, r9, r10
+	vst1.64		{q14}, [ip]		// Update t[0] and t[1]
+	b		.Linc_ctr_done
+ENDPROC(blake2b_compress_neon)
diff --git a/arch/arm/crypto/blake2b-neon-glue.c b/arch/arm/crypto/blake2b-neon-glue.c
new file mode 100644
index 0000000..4b59d02
--- /dev/null
+++ b/arch/arm/crypto/blake2b-neon-glue.c
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * BLAKE2b digest algorithm, NEON accelerated
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <crypto/internal/blake2b.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/simd.h>
+
+#include <linux/module.h>
+#include <linux/sizes.h>
+
+#include <asm/neon.h>
+#include <asm/simd.h>
+
+asmlinkage void blake2b_compress_neon(struct blake2b_state *state,
+				      const u8 *block, size_t nblocks, u32 inc);
+
+static void blake2b_compress_arch(struct blake2b_state *state,
+				  const u8 *block, size_t nblocks, u32 inc)
+{
+	if (!crypto_simd_usable()) {
+		blake2b_compress_generic(state, block, nblocks, inc);
+		return;
+	}
+
+	do {
+		const size_t blocks = min_t(size_t, nblocks,
+					    SZ_4K / BLAKE2B_BLOCK_SIZE);
+
+		kernel_neon_begin();
+		blake2b_compress_neon(state, block, blocks, inc);
+		kernel_neon_end();
+
+		nblocks -= blocks;
+		block += blocks * BLAKE2B_BLOCK_SIZE;
+	} while (nblocks);
+}
+
+static int crypto_blake2b_update_neon(struct shash_desc *desc,
+				      const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2b_update(desc, in, inlen, blake2b_compress_arch);
+}
+
+static int crypto_blake2b_final_neon(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2b_final(desc, out, blake2b_compress_arch);
+}
+
+#define BLAKE2B_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2B_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2b_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2b_setkey,	\
+		.init			= crypto_blake2b_init,		\
+		.update			= crypto_blake2b_update_neon,	\
+		.final			= crypto_blake2b_final_neon,	\
+		.descsize		= sizeof(struct blake2b_state),	\
+	}
+
+static struct shash_alg blake2b_neon_algs[] = {
+	BLAKE2B_ALG("blake2b-160", "blake2b-160-neon", BLAKE2B_160_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-256", "blake2b-256-neon", BLAKE2B_256_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-384", "blake2b-384-neon", BLAKE2B_384_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-512", "blake2b-512-neon", BLAKE2B_512_HASH_SIZE),
+};
+
+static int __init blake2b_neon_mod_init(void)
+{
+	if (!(elf_hwcap & HWCAP_NEON))
+		return -ENODEV;
+
+	return crypto_register_shashes(blake2b_neon_algs,
+				       ARRAY_SIZE(blake2b_neon_algs));
+}
+
+static void __exit blake2b_neon_mod_exit(void)
+{
+	crypto_unregister_shashes(blake2b_neon_algs,
+				  ARRAY_SIZE(blake2b_neon_algs));
+}
+
+module_init(blake2b_neon_mod_init);
+module_exit(blake2b_neon_mod_exit);
+
+MODULE_DESCRIPTION("BLAKE2b digest algorithm, NEON accelerated");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_ALIAS_CRYPTO("blake2b-160");
+MODULE_ALIAS_CRYPTO("blake2b-160-neon");
+MODULE_ALIAS_CRYPTO("blake2b-256");
+MODULE_ALIAS_CRYPTO("blake2b-256-neon");
+MODULE_ALIAS_CRYPTO("blake2b-384");
+MODULE_ALIAS_CRYPTO("blake2b-384-neon");
+MODULE_ALIAS_CRYPTO("blake2b-512");
+MODULE_ALIAS_CRYPTO("blake2b-512-neon");
diff --git a/arch/arm/crypto/blake2s-core.S b/arch/arm/crypto/blake2s-core.S
new file mode 100644
index 0000000..8634575
--- /dev/null
+++ b/arch/arm/crypto/blake2s-core.S
@@ -0,0 +1,306 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+/*
+ * BLAKE2s digest algorithm, ARM scalar implementation
+ *
+ * Copyright 2020 Google LLC
+ *
+ * Author: Eric Biggers <ebiggers@google.com>
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+	// Registers used to hold message words temporarily.  There aren't
+	// enough ARM registers to hold the whole message block, so we have to
+	// load the words on-demand.
+	M_0		.req	r12
+	M_1		.req	r14
+
+// The BLAKE2s initialization vector
+.Lblake2s_IV:
+	.word	0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A
+	.word	0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19
+
+.macro __ldrd		a, b, src, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	ldrd		\a, \b, [\src, #\offset]
+#else
+	ldr		\a, [\src, #\offset]
+	ldr		\b, [\src, #\offset + 4]
+#endif
+.endm
+
+.macro __strd		a, b, dst, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	strd		\a, \b, [\dst, #\offset]
+#else
+	str		\a, [\dst, #\offset]
+	str		\b, [\dst, #\offset + 4]
+#endif
+.endm
+
+.macro _le32_bswap	a, tmp
+#ifdef __ARMEB__
+	rev_l		\a, \tmp
+#endif
+.endm
+
+.macro _le32_bswap_8x	a, b, c, d, e, f, g, h,  tmp
+	_le32_bswap	\a, \tmp
+	_le32_bswap	\b, \tmp
+	_le32_bswap	\c, \tmp
+	_le32_bswap	\d, \tmp
+	_le32_bswap	\e, \tmp
+	_le32_bswap	\f, \tmp
+	_le32_bswap	\g, \tmp
+	_le32_bswap	\h, \tmp
+.endm
+
+// Execute a quarter-round of BLAKE2s by mixing two columns or two diagonals.
+// (a0, b0, c0, d0) and (a1, b1, c1, d1) give the registers containing the two
+// columns/diagonals.  s0-s1 are the word offsets to the message words the first
+// column/diagonal needs, and likewise s2-s3 for the second column/diagonal.
+// M_0 and M_1 are free to use, and the message block can be found at sp + 32.
+//
+// Note that to save instructions, the rotations don't happen when the
+// pseudocode says they should, but rather they are delayed until the values are
+// used.  See the comment above _blake2s_round().
+.macro _blake2s_quarterround  a0, b0, c0, d0,  a1, b1, c1, d1,  s0, s1, s2, s3
+
+	ldr		M_0, [sp, #32 + 4 * \s0]
+	ldr		M_1, [sp, #32 + 4 * \s2]
+
+	// a += b + m[blake2s_sigma[r][2*i + 0]];
+	add		\a0, \a0, \b0, ror #brot
+	add		\a1, \a1, \b1, ror #brot
+	add		\a0, \a0, M_0
+	add		\a1, \a1, M_1
+
+	// d = ror32(d ^ a, 16);
+	eor		\d0, \a0, \d0, ror #drot
+	eor		\d1, \a1, \d1, ror #drot
+
+	// c += d;
+	add		\c0, \c0, \d0, ror #16
+	add		\c1, \c1, \d1, ror #16
+
+	// b = ror32(b ^ c, 12);
+	eor		\b0, \c0, \b0, ror #brot
+	eor		\b1, \c1, \b1, ror #brot
+
+	ldr		M_0, [sp, #32 + 4 * \s1]
+	ldr		M_1, [sp, #32 + 4 * \s3]
+
+	// a += b + m[blake2s_sigma[r][2*i + 1]];
+	add		\a0, \a0, \b0, ror #12
+	add		\a1, \a1, \b1, ror #12
+	add		\a0, \a0, M_0
+	add		\a1, \a1, M_1
+
+	// d = ror32(d ^ a, 8);
+	eor		\d0, \a0, \d0, ror#16
+	eor		\d1, \a1, \d1, ror#16
+
+	// c += d;
+	add		\c0, \c0, \d0, ror#8
+	add		\c1, \c1, \d1, ror#8
+
+	// b = ror32(b ^ c, 7);
+	eor		\b0, \c0, \b0, ror#12
+	eor		\b1, \c1, \b1, ror#12
+.endm
+
+// Execute one round of BLAKE2s by updating the state matrix v[0..15].  v[0..9]
+// are in r0..r9.  The stack pointer points to 8 bytes of scratch space for
+// spilling v[8..9], then to v[9..15], then to the message block.  r10-r12 and
+// r14 are free to use.  The macro arguments s0-s15 give the order in which the
+// message words are used in this round.
+//
+// All rotates are performed using the implicit rotate operand accepted by the
+// 'add' and 'eor' instructions.  This is faster than using explicit rotate
+// instructions.  To make this work, we allow the values in the second and last
+// rows of the BLAKE2s state matrix (rows 'b' and 'd') to temporarily have the
+// wrong rotation amount.  The rotation amount is then fixed up just in time
+// when the values are used.  'brot' is the number of bits the values in row 'b'
+// need to be rotated right to arrive at the correct values, and 'drot'
+// similarly for row 'd'.  (brot, drot) start out as (0, 0) but we make it such
+// that they end up as (7, 8) after every round.
+.macro	_blake2s_round	s0, s1, s2, s3, s4, s5, s6, s7, \
+			s8, s9, s10, s11, s12, s13, s14, s15
+
+	// Mix first two columns:
+	// (v[0], v[4], v[8], v[12]) and (v[1], v[5], v[9], v[13]).
+	__ldrd		r10, r11, sp, 16	// load v[12] and v[13]
+	_blake2s_quarterround	r0, r4, r8, r10,  r1, r5, r9, r11, \
+				\s0, \s1, \s2, \s3
+	__strd		r8, r9, sp, 0
+	__strd		r10, r11, sp, 16
+
+	// Mix second two columns:
+	// (v[2], v[6], v[10], v[14]) and (v[3], v[7], v[11], v[15]).
+	__ldrd		r8, r9, sp, 8		// load v[10] and v[11]
+	__ldrd		r10, r11, sp, 24	// load v[14] and v[15]
+	_blake2s_quarterround	r2, r6, r8, r10,  r3, r7, r9, r11, \
+				\s4, \s5, \s6, \s7
+	str		r10, [sp, #24]		// store v[14]
+	// v[10], v[11], and v[15] are used below, so no need to store them yet.
+
+	.set brot, 7
+	.set drot, 8
+
+	// Mix first two diagonals:
+	// (v[0], v[5], v[10], v[15]) and (v[1], v[6], v[11], v[12]).
+	ldr		r10, [sp, #16]		// load v[12]
+	_blake2s_quarterround	r0, r5, r8, r11,  r1, r6, r9, r10, \
+				\s8, \s9, \s10, \s11
+	__strd		r8, r9, sp, 8
+	str		r11, [sp, #28]
+	str		r10, [sp, #16]
+
+	// Mix second two diagonals:
+	// (v[2], v[7], v[8], v[13]) and (v[3], v[4], v[9], v[14]).
+	__ldrd		r8, r9, sp, 0		// load v[8] and v[9]
+	__ldrd		r10, r11, sp, 20	// load v[13] and v[14]
+	_blake2s_quarterround	r2, r7, r8, r10,  r3, r4, r9, r11, \
+				\s12, \s13, \s14, \s15
+	__strd		r10, r11, sp, 20
+.endm
+
+//
+// void blake2s_compress_arch(struct blake2s_state *state,
+//			      const u8 *block, size_t nblocks, u32 inc);
+//
+// Only the first three fields of struct blake2s_state are used:
+//	u32 h[8];	(inout)
+//	u32 t[2];	(inout)
+//	u32 f[2];	(in)
+//
+	.align		5
+ENTRY(blake2s_compress_arch)
+	push		{r0-r2,r4-r11,lr}	// keep this an even number
+
+.Lnext_block:
+	// r0 is 'state'
+	// r1 is 'block'
+	// r3 is 'inc'
+
+	// Load and increment the counter t[0..1].
+	__ldrd		r10, r11, r0, 32
+	adds		r10, r10, r3
+	adc		r11, r11, #0
+	__strd		r10, r11, r0, 32
+
+	// _blake2s_round is very short on registers, so copy the message block
+	// to the stack to save a register during the rounds.  This also has the
+	// advantage that misalignment only needs to be dealt with in one place.
+	sub		sp, sp, #64
+	mov		r12, sp
+	tst		r1, #3
+	bne		.Lcopy_block_misaligned
+	ldmia		r1!, {r2-r9}
+	_le32_bswap_8x	r2, r3, r4, r5, r6, r7, r8, r9,  r14
+	stmia		r12!, {r2-r9}
+	ldmia		r1!, {r2-r9}
+	_le32_bswap_8x	r2, r3, r4, r5, r6, r7, r8, r9,  r14
+	stmia		r12, {r2-r9}
+.Lcopy_block_done:
+	str		r1, [sp, #68]		// Update message pointer
+
+	// Calculate v[8..15].  Push v[9..15] onto the stack, and leave space
+	// for spilling v[8..9].  Leave v[8..9] in r8-r9.
+	mov		r14, r0			// r14 = state
+	adr		r12, .Lblake2s_IV
+	ldmia		r12!, {r8-r9}		// load IV[0..1]
+	__ldrd		r0, r1, r14, 40		// load f[0..1]
+	ldm		r12, {r2-r7}		// load IV[3..7]
+	eor		r4, r4, r10		// v[12] = IV[4] ^ t[0]
+	eor		r5, r5, r11		// v[13] = IV[5] ^ t[1]
+	eor		r6, r6, r0		// v[14] = IV[6] ^ f[0]
+	eor		r7, r7, r1		// v[15] = IV[7] ^ f[1]
+	push		{r2-r7}			// push v[9..15]
+	sub		sp, sp, #8		// leave space for v[8..9]
+
+	// Load h[0..7] == v[0..7].
+	ldm		r14, {r0-r7}
+
+	// Execute the rounds.  Each round is provided the order in which it
+	// needs to use the message words.
+	.set brot, 0
+	.set drot, 0
+	_blake2s_round	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+	_blake2s_round	14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3
+	_blake2s_round	11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4
+	_blake2s_round	7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8
+	_blake2s_round	9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13
+	_blake2s_round	2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9
+	_blake2s_round	12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11
+	_blake2s_round	13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10
+	_blake2s_round	6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5
+	_blake2s_round	10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0
+
+	// Fold the final state matrix into the hash chaining value:
+	//
+	//	for (i = 0; i < 8; i++)
+	//		h[i] ^= v[i] ^ v[i + 8];
+	//
+	ldr		r14, [sp, #96]		// r14 = &h[0]
+	add		sp, sp, #8		// v[8..9] are already loaded.
+	pop		{r10-r11}		// load v[10..11]
+	eor		r0, r0, r8
+	eor		r1, r1, r9
+	eor		r2, r2, r10
+	eor		r3, r3, r11
+	ldm		r14, {r8-r11}		// load h[0..3]
+	eor		r0, r0, r8
+	eor		r1, r1, r9
+	eor		r2, r2, r10
+	eor		r3, r3, r11
+	stmia		r14!, {r0-r3}		// store new h[0..3]
+	ldm		r14, {r0-r3}		// load old h[4..7]
+	pop		{r8-r11}		// load v[12..15]
+	eor		r0, r0, r4, ror #brot
+	eor		r1, r1, r5, ror #brot
+	eor		r2, r2, r6, ror #brot
+	eor		r3, r3, r7, ror #brot
+	eor		r0, r0, r8, ror #drot
+	eor		r1, r1, r9, ror #drot
+	eor		r2, r2, r10, ror #drot
+	eor		r3, r3, r11, ror #drot
+	  add		sp, sp, #64		// skip copy of message block
+	stm		r14, {r0-r3}		// store new h[4..7]
+
+	// Advance to the next block, if there is one.  Note that if there are
+	// multiple blocks, then 'inc' (the counter increment amount) must be
+	// 64.  So we can simply set it to 64 without re-loading it.
+	ldm		sp, {r0, r1, r2}	// load (state, block, nblocks)
+	mov		r3, #64			// set 'inc'
+	subs		r2, r2, #1		// nblocks--
+	str		r2, [sp, #8]
+	bne		.Lnext_block		// nblocks != 0?
+
+	pop		{r0-r2,r4-r11,pc}
+
+	// The next message block (pointed to by r1) isn't 4-byte aligned, so it
+	// can't be loaded using ldmia.  Copy it to the stack buffer (pointed to
+	// by r12) using an alternative method.  r2-r9 are free to use.
+.Lcopy_block_misaligned:
+	mov		r2, #64
+1:
+#ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+	ldr		r3, [r1], #4
+	_le32_bswap	r3, r4
+#else
+	ldrb		r3, [r1, #0]
+	ldrb		r4, [r1, #1]
+	ldrb		r5, [r1, #2]
+	ldrb		r6, [r1, #3]
+	add		r1, r1, #4
+	orr		r3, r3, r4, lsl #8
+	orr		r3, r3, r5, lsl #16
+	orr		r3, r3, r6, lsl #24
+#endif
+	subs		r2, r2, #4
+	str		r3, [r12], #4
+	bne		1b
+	b		.Lcopy_block_done
+ENDPROC(blake2s_compress_arch)
diff --git a/arch/arm/crypto/blake2s-glue.c b/arch/arm/crypto/blake2s-glue.c
new file mode 100644
index 0000000..f2cc1e5
--- /dev/null
+++ b/arch/arm/crypto/blake2s-glue.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * BLAKE2s digest algorithm, ARM scalar implementation
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/module.h>
+
+/* defined in blake2s-core.S */
+EXPORT_SYMBOL(blake2s_compress_arch);
+
+static int crypto_blake2s_update_arm(struct shash_desc *desc,
+				     const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
+}
+
+static int crypto_blake2s_final_arm(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_arch);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_arm,	\
+		.final			= crypto_blake2s_final_arm,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_arm_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-arm", BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-arm", BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-arm", BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-arm", BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_arm_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(blake2s_arm_algs,
+					ARRAY_SIZE(blake2s_arm_algs)) : 0;
+}
+
+static void __exit blake2s_arm_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shashes(blake2s_arm_algs,
+					  ARRAY_SIZE(blake2s_arm_algs));
+}
+
+module_init(blake2s_arm_mod_init);
+module_exit(blake2s_arm_mod_exit);
+
+MODULE_DESCRIPTION("BLAKE2s digest algorithm, ARM scalar implementation");
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-arm");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-arm");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-arm");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-arm");
diff --git a/arch/arm/crypto/chacha-glue.c b/arch/arm/crypto/chacha-glue.c
new file mode 100644
index 0000000..cd131b4
--- /dev/null
+++ b/arch/arm/crypto/chacha-glue.c
@@ -0,0 +1,357 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
+ * including ChaCha20 (RFC7539)
+ *
+ * Copyright (C) 2016-2019 Linaro, Ltd. <ard.biesheuvel@linaro.org>
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <crypto/algapi.h>
+#include <crypto/internal/chacha.h>
+#include <crypto/internal/simd.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cputype.h>
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+
+asmlinkage void chacha_block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
+				      int nrounds);
+asmlinkage void chacha_4block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
+				       int nrounds);
+asmlinkage void hchacha_block_arm(const u32 *state, u32 *out, int nrounds);
+asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
+
+asmlinkage void chacha_doarm(u8 *dst, const u8 *src, unsigned int bytes,
+			     const u32 *state, int nrounds);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(use_neon);
+
+static inline bool neon_usable(void)
+{
+	return static_branch_likely(&use_neon) && crypto_simd_usable();
+}
+
+static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds)
+{
+	u8 buf[CHACHA_BLOCK_SIZE];
+
+	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
+		chacha_4block_xor_neon(state, dst, src, nrounds);
+		bytes -= CHACHA_BLOCK_SIZE * 4;
+		src += CHACHA_BLOCK_SIZE * 4;
+		dst += CHACHA_BLOCK_SIZE * 4;
+		state[12] += 4;
+	}
+	while (bytes >= CHACHA_BLOCK_SIZE) {
+		chacha_block_xor_neon(state, dst, src, nrounds);
+		bytes -= CHACHA_BLOCK_SIZE;
+		src += CHACHA_BLOCK_SIZE;
+		dst += CHACHA_BLOCK_SIZE;
+		state[12]++;
+	}
+	if (bytes) {
+		memcpy(buf, src, bytes);
+		chacha_block_xor_neon(state, buf, buf, nrounds);
+		memcpy(dst, buf, bytes);
+	}
+}
+
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon_usable()) {
+		hchacha_block_arm(state, stream, nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, stream, nrounds);
+		kernel_neon_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon_usable() ||
+	    bytes <= CHACHA_BLOCK_SIZE) {
+		chacha_doarm(dst, src, bytes, state, nrounds);
+		state[12] += DIV_ROUND_UP(bytes, CHACHA_BLOCK_SIZE);
+		return;
+	}
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_neon_begin();
+		chacha_doneon(state, dst, src, todo, nrounds);
+		kernel_neon_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+static int chacha_stream_xor(struct skcipher_request *req,
+			     const struct chacha_ctx *ctx, const u8 *iv,
+			     bool neon)
+{
+	struct skcipher_walk walk;
+	u32 state[16];
+	int err;
+
+	err = skcipher_walk_virt(&walk, req, false);
+
+	chacha_init_generic(state, ctx->key, iv);
+
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
+
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
+
+		if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon) {
+			chacha_doarm(walk.dst.virt.addr, walk.src.virt.addr,
+				     nbytes, state, ctx->nrounds);
+			state[12] += DIV_ROUND_UP(nbytes, CHACHA_BLOCK_SIZE);
+		} else {
+			kernel_neon_begin();
+			chacha_doneon(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes, ctx->nrounds);
+			kernel_neon_end();
+		}
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
+	}
+
+	return err;
+}
+
+static int do_chacha(struct skcipher_request *req, bool neon)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+
+	return chacha_stream_xor(req, ctx, req->iv, neon);
+}
+
+static int chacha_arm(struct skcipher_request *req)
+{
+	return do_chacha(req, false);
+}
+
+static int chacha_neon(struct skcipher_request *req)
+{
+	return do_chacha(req, neon_usable());
+}
+
+static int do_xchacha(struct skcipher_request *req, bool neon)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	struct chacha_ctx subctx;
+	u32 state[16];
+	u8 real_iv[16];
+
+	chacha_init_generic(state, ctx->key, req->iv);
+
+	if (!IS_ENABLED(CONFIG_KERNEL_MODE_NEON) || !neon) {
+		hchacha_block_arm(state, subctx.key, ctx->nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, subctx.key, ctx->nrounds);
+		kernel_neon_end();
+	}
+	subctx.nrounds = ctx->nrounds;
+
+	memcpy(&real_iv[0], req->iv + 24, 8);
+	memcpy(&real_iv[8], req->iv + 16, 8);
+	return chacha_stream_xor(req, &subctx, real_iv, neon);
+}
+
+static int xchacha_arm(struct skcipher_request *req)
+{
+	return do_xchacha(req, false);
+}
+
+static int xchacha_neon(struct skcipher_request *req)
+{
+	return do_xchacha(req, neon_usable());
+}
+
+static struct skcipher_alg arm_algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_arm,
+		.decrypt		= chacha_arm,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_arm,
+		.decrypt		= xchacha_arm,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-arm",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_arm,
+		.decrypt		= xchacha_arm,
+	},
+};
+
+static struct skcipher_alg neon_algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_neon,
+		.decrypt		= chacha_neon,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_neon,
+		.decrypt		= xchacha_neon,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-neon",
+		.base.cra_priority	= 300,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.walksize		= 4 * CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_neon,
+		.decrypt		= xchacha_neon,
+	}
+};
+
+static int __init chacha_simd_mod_init(void)
+{
+	int err = 0;
+
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+		err = crypto_register_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		if (err)
+			return err;
+	}
+
+	if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && (elf_hwcap & HWCAP_NEON)) {
+		int i;
+
+		switch (read_cpuid_part()) {
+		case ARM_CPU_PART_CORTEX_A7:
+		case ARM_CPU_PART_CORTEX_A5:
+			/*
+			 * The Cortex-A7 and Cortex-A5 do not perform well with
+			 * the NEON implementation but do incredibly with the
+			 * scalar one and use less power.
+			 */
+			for (i = 0; i < ARRAY_SIZE(neon_algs); i++)
+				neon_algs[i].base.cra_priority = 0;
+			break;
+		default:
+			static_branch_enable(&use_neon);
+		}
+
+		if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+			err = crypto_register_skciphers(neon_algs, ARRAY_SIZE(neon_algs));
+			if (err)
+				crypto_unregister_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		}
+	}
+	return err;
+}
+
+static void __exit chacha_simd_mod_fini(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER)) {
+		crypto_unregister_skciphers(arm_algs, ARRAY_SIZE(arm_algs));
+		if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) && (elf_hwcap & HWCAP_NEON))
+			crypto_unregister_skciphers(neon_algs, ARRAY_SIZE(neon_algs));
+	}
+}
+
+module_init(chacha_simd_mod_init);
+module_exit(chacha_simd_mod_fini);
+
+MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (scalar and NEON accelerated)");
+MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("chacha20");
+MODULE_ALIAS_CRYPTO("chacha20-arm");
+MODULE_ALIAS_CRYPTO("xchacha20");
+MODULE_ALIAS_CRYPTO("xchacha20-arm");
+MODULE_ALIAS_CRYPTO("xchacha12");
+MODULE_ALIAS_CRYPTO("xchacha12-arm");
+#ifdef CONFIG_KERNEL_MODE_NEON
+MODULE_ALIAS_CRYPTO("chacha20-neon");
+MODULE_ALIAS_CRYPTO("xchacha20-neon");
+MODULE_ALIAS_CRYPTO("xchacha12-neon");
+#endif
diff --git a/arch/arm/crypto/chacha-neon-glue.c b/arch/arm/crypto/chacha-neon-glue.c
deleted file mode 100644
index a8e9b53..0000000
--- a/arch/arm/crypto/chacha-neon-glue.c
+++ /dev/null
@@ -1,202 +0,0 @@
-/*
- * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
- * including ChaCha20 (RFC7539)
- *
- * Copyright (C) 2016 Linaro, Ltd. <ard.biesheuvel@linaro.org>
- *
- * 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.
- *
- * Based on:
- * ChaCha20 256-bit cipher algorithm, RFC7539, SIMD glue code
- *
- * Copyright (C) 2015 Martin Willi
- *
- * 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.
- */
-
-#include <crypto/algapi.h>
-#include <crypto/chacha.h>
-#include <crypto/internal/simd.h>
-#include <crypto/internal/skcipher.h>
-#include <linux/kernel.h>
-#include <linux/module.h>
-
-#include <asm/hwcap.h>
-#include <asm/neon.h>
-#include <asm/simd.h>
-
-asmlinkage void chacha_block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
-				      int nrounds);
-asmlinkage void chacha_4block_xor_neon(const u32 *state, u8 *dst, const u8 *src,
-				       int nrounds);
-asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
-
-static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
-			  unsigned int bytes, int nrounds)
-{
-	u8 buf[CHACHA_BLOCK_SIZE];
-
-	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
-		chacha_4block_xor_neon(state, dst, src, nrounds);
-		bytes -= CHACHA_BLOCK_SIZE * 4;
-		src += CHACHA_BLOCK_SIZE * 4;
-		dst += CHACHA_BLOCK_SIZE * 4;
-		state[12] += 4;
-	}
-	while (bytes >= CHACHA_BLOCK_SIZE) {
-		chacha_block_xor_neon(state, dst, src, nrounds);
-		bytes -= CHACHA_BLOCK_SIZE;
-		src += CHACHA_BLOCK_SIZE;
-		dst += CHACHA_BLOCK_SIZE;
-		state[12]++;
-	}
-	if (bytes) {
-		memcpy(buf, src, bytes);
-		chacha_block_xor_neon(state, buf, buf, nrounds);
-		memcpy(dst, buf, bytes);
-	}
-}
-
-static int chacha_neon_stream_xor(struct skcipher_request *req,
-				  const struct chacha_ctx *ctx, const u8 *iv)
-{
-	struct skcipher_walk walk;
-	u32 state[16];
-	int err;
-
-	err = skcipher_walk_virt(&walk, req, false);
-
-	crypto_chacha_init(state, ctx, iv);
-
-	while (walk.nbytes > 0) {
-		unsigned int nbytes = walk.nbytes;
-
-		if (nbytes < walk.total)
-			nbytes = round_down(nbytes, walk.stride);
-
-		kernel_neon_begin();
-		chacha_doneon(state, walk.dst.virt.addr, walk.src.virt.addr,
-			      nbytes, ctx->nrounds);
-		kernel_neon_end();
-		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
-	}
-
-	return err;
-}
-
-static int chacha_neon(struct skcipher_request *req)
-{
-	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
-	return chacha_neon_stream_xor(req, ctx, req->iv);
-}
-
-static int xchacha_neon(struct skcipher_request *req)
-{
-	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct chacha_ctx subctx;
-	u32 state[16];
-	u8 real_iv[16];
-
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
-
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_neon_begin();
-	hchacha_block_neon(state, subctx.key, ctx->nrounds);
-	kernel_neon_end();
-	subctx.nrounds = ctx->nrounds;
-
-	memcpy(&real_iv[0], req->iv + 24, 8);
-	memcpy(&real_iv[8], req->iv + 16, 8);
-	return chacha_neon_stream_xor(req, &subctx, real_iv);
-}
-
-static struct skcipher_alg algs[] = {
-	{
-		.base.cra_name		= "chacha20",
-		.base.cra_driver_name	= "chacha20-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= CHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
-		.encrypt		= chacha_neon,
-		.decrypt		= chacha_neon,
-	}, {
-		.base.cra_name		= "xchacha20",
-		.base.cra_driver_name	= "xchacha20-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= XCHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
-		.encrypt		= xchacha_neon,
-		.decrypt		= xchacha_neon,
-	}, {
-		.base.cra_name		= "xchacha12",
-		.base.cra_driver_name	= "xchacha12-neon",
-		.base.cra_priority	= 300,
-		.base.cra_blocksize	= 1,
-		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
-		.base.cra_module	= THIS_MODULE,
-
-		.min_keysize		= CHACHA_KEY_SIZE,
-		.max_keysize		= CHACHA_KEY_SIZE,
-		.ivsize			= XCHACHA_IV_SIZE,
-		.chunksize		= CHACHA_BLOCK_SIZE,
-		.walksize		= 4 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
-		.encrypt		= xchacha_neon,
-		.decrypt		= xchacha_neon,
-	}
-};
-
-static int __init chacha_simd_mod_init(void)
-{
-	if (!(elf_hwcap & HWCAP_NEON))
-		return -ENODEV;
-
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
-}
-
-static void __exit chacha_simd_mod_fini(void)
-{
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
-}
-
-module_init(chacha_simd_mod_init);
-module_exit(chacha_simd_mod_fini);
-
-MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (NEON accelerated)");
-MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
-MODULE_LICENSE("GPL v2");
-MODULE_ALIAS_CRYPTO("chacha20");
-MODULE_ALIAS_CRYPTO("chacha20-neon");
-MODULE_ALIAS_CRYPTO("xchacha20");
-MODULE_ALIAS_CRYPTO("xchacha20-neon");
-MODULE_ALIAS_CRYPTO("xchacha12");
-MODULE_ALIAS_CRYPTO("xchacha12-neon");
diff --git a/arch/arm/crypto/chacha-scalar-core.S b/arch/arm/crypto/chacha-scalar-core.S
new file mode 100644
index 0000000..2985b80
--- /dev/null
+++ b/arch/arm/crypto/chacha-scalar-core.S
@@ -0,0 +1,460 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 Google, Inc.
+ */
+
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+
+/*
+ * Design notes:
+ *
+ * 16 registers would be needed to hold the state matrix, but only 14 are
+ * available because 'sp' and 'pc' cannot be used.  So we spill the elements
+ * (x8, x9) to the stack and swap them out with (x10, x11).  This adds one
+ * 'ldrd' and one 'strd' instruction per round.
+ *
+ * All rotates are performed using the implicit rotate operand accepted by the
+ * 'add' and 'eor' instructions.  This is faster than using explicit rotate
+ * instructions.  To make this work, we allow the values in the second and last
+ * rows of the ChaCha state matrix (rows 'b' and 'd') to temporarily have the
+ * wrong rotation amount.  The rotation amount is then fixed up just in time
+ * when the values are used.  'brot' is the number of bits the values in row 'b'
+ * need to be rotated right to arrive at the correct values, and 'drot'
+ * similarly for row 'd'.  (brot, drot) start out as (0, 0) but we make it such
+ * that they end up as (25, 24) after every round.
+ */
+
+	// ChaCha state registers
+	X0	.req	r0
+	X1	.req	r1
+	X2	.req	r2
+	X3	.req	r3
+	X4	.req	r4
+	X5	.req	r5
+	X6	.req	r6
+	X7	.req	r7
+	X8_X10	.req	r8	// shared by x8 and x10
+	X9_X11	.req	r9	// shared by x9 and x11
+	X12	.req	r10
+	X13	.req	r11
+	X14	.req	r12
+	X15	.req	r14
+
+.macro __rev		out, in,  t0, t1, t2
+.if __LINUX_ARM_ARCH__ >= 6
+	rev		\out, \in
+.else
+	lsl		\t0, \in, #24
+	and		\t1, \in, #0xff00
+	and		\t2, \in, #0xff0000
+	orr		\out, \t0, \in, lsr #24
+	orr		\out, \out, \t1, lsl #8
+	orr		\out, \out, \t2, lsr #8
+.endif
+.endm
+
+.macro _le32_bswap	x,  t0, t1, t2
+#ifdef __ARMEB__
+	__rev		\x, \x,  \t0, \t1, \t2
+#endif
+.endm
+
+.macro _le32_bswap_4x	a, b, c, d,  t0, t1, t2
+	_le32_bswap	\a,  \t0, \t1, \t2
+	_le32_bswap	\b,  \t0, \t1, \t2
+	_le32_bswap	\c,  \t0, \t1, \t2
+	_le32_bswap	\d,  \t0, \t1, \t2
+.endm
+
+.macro __ldrd		a, b, src, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	ldrd		\a, \b, [\src, #\offset]
+#else
+	ldr		\a, [\src, #\offset]
+	ldr		\b, [\src, #\offset + 4]
+#endif
+.endm
+
+.macro __strd		a, b, dst, offset
+#if __LINUX_ARM_ARCH__ >= 6
+	strd		\a, \b, [\dst, #\offset]
+#else
+	str		\a, [\dst, #\offset]
+	str		\b, [\dst, #\offset + 4]
+#endif
+.endm
+
+.macro _halfround	a1, b1, c1, d1,  a2, b2, c2, d2
+
+	// a += b; d ^= a; d = rol(d, 16);
+	add		\a1, \a1, \b1, ror #brot
+	add		\a2, \a2, \b2, ror #brot
+	eor		\d1, \a1, \d1, ror #drot
+	eor		\d2, \a2, \d2, ror #drot
+	// drot == 32 - 16 == 16
+
+	// c += d; b ^= c; b = rol(b, 12);
+	add		\c1, \c1, \d1, ror #16
+	add		\c2, \c2, \d2, ror #16
+	eor		\b1, \c1, \b1, ror #brot
+	eor		\b2, \c2, \b2, ror #brot
+	// brot == 32 - 12 == 20
+
+	// a += b; d ^= a; d = rol(d, 8);
+	add		\a1, \a1, \b1, ror #20
+	add		\a2, \a2, \b2, ror #20
+	eor		\d1, \a1, \d1, ror #16
+	eor		\d2, \a2, \d2, ror #16
+	// drot == 32 - 8 == 24
+
+	// c += d; b ^= c; b = rol(b, 7);
+	add		\c1, \c1, \d1, ror #24
+	add		\c2, \c2, \d2, ror #24
+	eor		\b1, \c1, \b1, ror #20
+	eor		\b2, \c2, \b2, ror #20
+	// brot == 32 - 7 == 25
+.endm
+
+.macro _doubleround
+
+	// column round
+
+	// quarterrounds: (x0, x4, x8, x12) and (x1, x5, x9, x13)
+	_halfround	X0, X4, X8_X10, X12,  X1, X5, X9_X11, X13
+
+	// save (x8, x9); restore (x10, x11)
+	__strd		X8_X10, X9_X11, sp, 0
+	__ldrd		X8_X10, X9_X11, sp, 8
+
+	// quarterrounds: (x2, x6, x10, x14) and (x3, x7, x11, x15)
+	_halfround	X2, X6, X8_X10, X14,  X3, X7, X9_X11, X15
+
+	.set brot, 25
+	.set drot, 24
+
+	// diagonal round
+
+	// quarterrounds: (x0, x5, x10, x15) and (x1, x6, x11, x12)
+	_halfround	X0, X5, X8_X10, X15,  X1, X6, X9_X11, X12
+
+	// save (x10, x11); restore (x8, x9)
+	__strd		X8_X10, X9_X11, sp, 8
+	__ldrd		X8_X10, X9_X11, sp, 0
+
+	// quarterrounds: (x2, x7, x8, x13) and (x3, x4, x9, x14)
+	_halfround	X2, X7, X8_X10, X13,  X3, X4, X9_X11, X14
+.endm
+
+.macro _chacha_permute	nrounds
+	.set brot, 0
+	.set drot, 0
+	.rept \nrounds / 2
+	 _doubleround
+	.endr
+.endm
+
+.macro _chacha		nrounds
+
+.Lnext_block\@:
+	// Stack: unused0-unused1 x10-x11 x0-x15 OUT IN LEN
+	// Registers contain x0-x9,x12-x15.
+
+	// Do the core ChaCha permutation to update x0-x15.
+	_chacha_permute	\nrounds
+
+	add		sp, #8
+	// Stack: x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers contain x0-x9,x12-x15.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// Free up some registers (r8-r12,r14) by pushing (x8-x9,x12-x15).
+	push		{X8_X10, X9_X11, X12, X13, X14, X15}
+
+	// Load (OUT, IN, LEN).
+	ldr		r14, [sp, #96]
+	ldr		r12, [sp, #100]
+	ldr		r11, [sp, #104]
+
+	orr		r10, r14, r12
+
+	// Use slow path if fewer than 64 bytes remain.
+	cmp		r11, #64
+	blt		.Lxor_slowpath\@
+
+	// Use slow path if IN and/or OUT isn't 4-byte aligned.  Needed even on
+	// ARMv6+, since ldmia and stmia (used below) still require alignment.
+	tst		r10, #3
+	bne		.Lxor_slowpath\@
+
+	// Fast path: XOR 64 bytes of aligned data.
+
+	// Stack: x8-x9 x12-x15 x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers: r0-r7 are x0-x7; r8-r11 are free; r12 is IN; r14 is OUT.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// x0-x3
+	__ldrd		r8, r9, sp, 32
+	__ldrd		r10, r11, sp, 40
+	add		X0, X0, r8
+	add		X1, X1, r9
+	add		X2, X2, r10
+	add		X3, X3, r11
+	_le32_bswap_4x	X0, X1, X2, X3,  r8, r9, r10
+	ldmia		r12!, {r8-r11}
+	eor		X0, X0, r8
+	eor		X1, X1, r9
+	eor		X2, X2, r10
+	eor		X3, X3, r11
+	stmia		r14!, {X0-X3}
+
+	// x4-x7
+	__ldrd		r8, r9, sp, 48
+	__ldrd		r10, r11, sp, 56
+	add		X4, r8, X4, ror #brot
+	add		X5, r9, X5, ror #brot
+	ldmia		r12!, {X0-X3}
+	add		X6, r10, X6, ror #brot
+	add		X7, r11, X7, ror #brot
+	_le32_bswap_4x	X4, X5, X6, X7,  r8, r9, r10
+	eor		X4, X4, X0
+	eor		X5, X5, X1
+	eor		X6, X6, X2
+	eor		X7, X7, X3
+	stmia		r14!, {X4-X7}
+
+	// x8-x15
+	pop		{r0-r7}			// (x8-x9,x12-x15,x10-x11)
+	__ldrd		r8, r9, sp, 32
+	__ldrd		r10, r11, sp, 40
+	add		r0, r0, r8		// x8
+	add		r1, r1, r9		// x9
+	add		r6, r6, r10		// x10
+	add		r7, r7, r11		// x11
+	_le32_bswap_4x	r0, r1, r6, r7,  r8, r9, r10
+	ldmia		r12!, {r8-r11}
+	eor		r0, r0, r8		// x8
+	eor		r1, r1, r9		// x9
+	eor		r6, r6, r10		// x10
+	eor		r7, r7, r11		// x11
+	stmia		r14!, {r0,r1,r6,r7}
+	ldmia		r12!, {r0,r1,r6,r7}
+	__ldrd		r8, r9, sp, 48
+	__ldrd		r10, r11, sp, 56
+	add		r2, r8, r2, ror #drot	// x12
+	add		r3, r9, r3, ror #drot	// x13
+	add		r4, r10, r4, ror #drot	// x14
+	add		r5, r11, r5, ror #drot	// x15
+	_le32_bswap_4x	r2, r3, r4, r5,  r9, r10, r11
+	  ldr		r9, [sp, #72]		// load LEN
+	eor		r2, r2, r0		// x12
+	eor		r3, r3, r1		// x13
+	eor		r4, r4, r6		// x14
+	eor		r5, r5, r7		// x15
+	  subs		r9, #64			// decrement and check LEN
+	stmia		r14!, {r2-r5}
+
+	beq		.Ldone\@
+
+.Lprepare_for_next_block\@:
+
+	// Stack: x0-x15 OUT IN LEN
+
+	// Increment block counter (x12)
+	add		r8, #1
+
+	// Store updated (OUT, IN, LEN)
+	str		r14, [sp, #64]
+	str		r12, [sp, #68]
+	str		r9, [sp, #72]
+
+	  mov		r14, sp
+
+	// Store updated block counter (x12)
+	str		r8, [sp, #48]
+
+	  sub		sp, #16
+
+	// Reload state and do next block
+	ldmia		r14!, {r0-r11}		// load x0-x11
+	__strd		r10, r11, sp, 8		// store x10-x11 before state
+	ldmia		r14, {r10-r12,r14}	// load x12-x15
+	b		.Lnext_block\@
+
+.Lxor_slowpath\@:
+	// Slow path: < 64 bytes remaining, or unaligned input or output buffer.
+	// We handle it by storing the 64 bytes of keystream to the stack, then
+	// XOR-ing the needed portion with the data.
+
+	// Allocate keystream buffer
+	sub		sp, #64
+	mov		r14, sp
+
+	// Stack: ks0-ks15 x8-x9 x12-x15 x10-x11 orig_x0-orig_x15 OUT IN LEN
+	// Registers: r0-r7 are x0-x7; r8-r11 are free; r12 is IN; r14 is &ks0.
+	// x4-x7 are rotated by 'brot'; x12-x15 are rotated by 'drot'.
+
+	// Save keystream for x0-x3
+	__ldrd		r8, r9, sp, 96
+	__ldrd		r10, r11, sp, 104
+	add		X0, X0, r8
+	add		X1, X1, r9
+	add		X2, X2, r10
+	add		X3, X3, r11
+	_le32_bswap_4x	X0, X1, X2, X3,  r8, r9, r10
+	stmia		r14!, {X0-X3}
+
+	// Save keystream for x4-x7
+	__ldrd		r8, r9, sp, 112
+	__ldrd		r10, r11, sp, 120
+	add		X4, r8, X4, ror #brot
+	add		X5, r9, X5, ror #brot
+	add		X6, r10, X6, ror #brot
+	add		X7, r11, X7, ror #brot
+	_le32_bswap_4x	X4, X5, X6, X7,  r8, r9, r10
+	  add		r8, sp, #64
+	stmia		r14!, {X4-X7}
+
+	// Save keystream for x8-x15
+	ldm		r8, {r0-r7}		// (x8-x9,x12-x15,x10-x11)
+	__ldrd		r8, r9, sp, 128
+	__ldrd		r10, r11, sp, 136
+	add		r0, r0, r8		// x8
+	add		r1, r1, r9		// x9
+	add		r6, r6, r10		// x10
+	add		r7, r7, r11		// x11
+	_le32_bswap_4x	r0, r1, r6, r7,  r8, r9, r10
+	stmia		r14!, {r0,r1,r6,r7}
+	__ldrd		r8, r9, sp, 144
+	__ldrd		r10, r11, sp, 152
+	add		r2, r8, r2, ror #drot	// x12
+	add		r3, r9, r3, ror #drot	// x13
+	add		r4, r10, r4, ror #drot	// x14
+	add		r5, r11, r5, ror #drot	// x15
+	_le32_bswap_4x	r2, r3, r4, r5,  r9, r10, r11
+	stmia		r14, {r2-r5}
+
+	// Stack: ks0-ks15 unused0-unused7 x0-x15 OUT IN LEN
+	// Registers: r8 is block counter, r12 is IN.
+
+	ldr		r9, [sp, #168]		// LEN
+	ldr		r14, [sp, #160]		// OUT
+	cmp		r9, #64
+	  mov		r0, sp
+	movle		r1, r9
+	movgt		r1, #64
+	// r1 is number of bytes to XOR, in range [1, 64]
+
+.if __LINUX_ARM_ARCH__ < 6
+	orr		r2, r12, r14
+	tst		r2, #3			// IN or OUT misaligned?
+	bne		.Lxor_next_byte\@
+.endif
+
+	// XOR a word at a time
+.rept 16
+	subs		r1, #4
+	blt		.Lxor_words_done\@
+	ldr		r2, [r12], #4
+	ldr		r3, [r0], #4
+	eor		r2, r2, r3
+	str		r2, [r14], #4
+.endr
+	b		.Lxor_slowpath_done\@
+.Lxor_words_done\@:
+	ands		r1, r1, #3
+	beq		.Lxor_slowpath_done\@
+
+	// XOR a byte at a time
+.Lxor_next_byte\@:
+	ldrb		r2, [r12], #1
+	ldrb		r3, [r0], #1
+	eor		r2, r2, r3
+	strb		r2, [r14], #1
+	subs		r1, #1
+	bne		.Lxor_next_byte\@
+
+.Lxor_slowpath_done\@:
+	subs		r9, #64
+	add		sp, #96
+	bgt		.Lprepare_for_next_block\@
+
+.Ldone\@:
+.endm	// _chacha
+
+/*
+ * void chacha_doarm(u8 *dst, const u8 *src, unsigned int bytes,
+ *		     const u32 *state, int nrounds);
+ */
+ENTRY(chacha_doarm)
+	cmp		r2, #0			// len == 0?
+	reteq		lr
+
+	ldr		ip, [sp]
+	cmp		ip, #12
+
+	push		{r0-r2,r4-r11,lr}
+
+	// Push state x0-x15 onto stack.
+	// Also store an extra copy of x10-x11 just before the state.
+
+	add		X12, r3, #48
+	ldm		X12, {X12,X13,X14,X15}
+	push		{X12,X13,X14,X15}
+	sub		sp, sp, #64
+
+	__ldrd		X8_X10, X9_X11, r3, 40
+	__strd		X8_X10, X9_X11, sp, 8
+	__strd		X8_X10, X9_X11, sp, 56
+	ldm		r3, {X0-X9_X11}
+	__strd		X0, X1, sp, 16
+	__strd		X2, X3, sp, 24
+	__strd		X4, X5, sp, 32
+	__strd		X6, X7, sp, 40
+	__strd		X8_X10, X9_X11, sp, 48
+
+	beq		1f
+	_chacha		20
+
+0:	add		sp, #76
+	pop		{r4-r11, pc}
+
+1:	_chacha		12
+	b		0b
+ENDPROC(chacha_doarm)
+
+/*
+ * void hchacha_block_arm(const u32 state[16], u32 out[8], int nrounds);
+ */
+ENTRY(hchacha_block_arm)
+	push		{r1,r4-r11,lr}
+
+	cmp		r2, #12			// ChaCha12 ?
+
+	mov		r14, r0
+	ldmia		r14!, {r0-r11}		// load x0-x11
+	push		{r10-r11}		// store x10-x11 to stack
+	ldm		r14, {r10-r12,r14}	// load x12-x15
+	sub		sp, #8
+
+	beq		1f
+	_chacha_permute	20
+
+	// Skip over (unused0-unused1, x10-x11)
+0:	add		sp, #16
+
+	// Fix up rotations of x12-x15
+	ror		X12, X12, #drot
+	ror		X13, X13, #drot
+	  pop		{r4}			// load 'out'
+	ror		X14, X14, #drot
+	ror		X15, X15, #drot
+
+	// Store (x0-x3,x12-x15) to 'out'
+	stm		r4, {X0,X1,X2,X3,X12,X13,X14,X15}
+
+	pop		{r4-r11,pc}
+
+1:	_chacha_permute	12
+	b		0b
+ENDPROC(hchacha_block_arm)
diff --git a/arch/arm/crypto/crct10dif-ce-core.S b/arch/arm/crypto/crct10dif-ce-core.S
index 86be258..46c02c51 100644
--- a/arch/arm/crypto/crct10dif-ce-core.S
+++ b/arch/arm/crypto/crct10dif-ce-core.S
@@ -72,7 +72,7 @@
 #endif
 
 	.text
-	.arch		armv7-a
+	.arch		armv8-a
 	.fpu		crypto-neon-fp-armv8
 
 	init_crc	.req	r0
diff --git a/arch/arm/crypto/curve25519-core.S b/arch/arm/crypto/curve25519-core.S
new file mode 100644
index 0000000..b697fa5
--- /dev/null
+++ b/arch/arm/crypto/curve25519-core.S
@@ -0,0 +1,2062 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
+ * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
+ * manually reworked for use in kernel space.
+ */
+
+#include <linux/linkage.h>
+
+.text
+.arch armv7-a
+.fpu neon
+.align 4
+
+ENTRY(curve25519_neon)
+	push		{r4-r11, lr}
+	mov		ip, sp
+	sub		r3, sp, #704
+	and		r3, r3, #0xfffffff0
+	mov		sp, r3
+	movw		r4, #0
+	movw		r5, #254
+	vmov.i32	q0, #1
+	vshr.u64	q1, q0, #7
+	vshr.u64	q0, q0, #8
+	vmov.i32	d4, #19
+	vmov.i32	d5, #38
+	add		r6, sp, #480
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d4-d5}, [r6, : 128]
+	add		r6, r3, #0
+	vmov.i32	q2, #0
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		d4, [r6, : 64]
+	add		r6, r3, #0
+	movw		r7, #960
+	sub		r7, r7, #2
+	neg		r7, r7
+	sub		r7, r7, r7, LSL #7
+	str		r7, [r6]
+	add		r6, sp, #672
+	vld1.8		{d4-d5}, [r1]!
+	vld1.8		{d6-d7}, [r1]
+	vst1.8		{d4-d5}, [r6, : 128]!
+	vst1.8		{d6-d7}, [r6, : 128]
+	sub		r1, r6, #16
+	ldrb		r6, [r1]
+	and		r6, r6, #248
+	strb		r6, [r1]
+	ldrb		r6, [r1, #31]
+	and		r6, r6, #127
+	orr		r6, r6, #64
+	strb		r6, [r1, #31]
+	vmov.i64	q2, #0xffffffff
+	vshr.u64	q3, q2, #7
+	vshr.u64	q2, q2, #6
+	vld1.8		{d8}, [r2]
+	vld1.8		{d10}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d12}, [r2]
+	vld1.8		{d14}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d16}, [r2]
+	add		r2, r2, #4
+	vld1.8		{d18}, [r2]
+	vld1.8		{d20}, [r2]
+	add		r2, r2, #6
+	vld1.8		{d22}, [r2]
+	add		r2, r2, #2
+	vld1.8		{d24}, [r2]
+	vld1.8		{d26}, [r2]
+	vshr.u64	q5, q5, #26
+	vshr.u64	q6, q6, #3
+	vshr.u64	q7, q7, #29
+	vshr.u64	q8, q8, #6
+	vshr.u64	q10, q10, #25
+	vshr.u64	q11, q11, #3
+	vshr.u64	q12, q12, #12
+	vshr.u64	q13, q13, #38
+	vand		q4, q4, q2
+	vand		q6, q6, q2
+	vand		q8, q8, q2
+	vand		q10, q10, q2
+	vand		q2, q12, q2
+	vand		q5, q5, q3
+	vand		q7, q7, q3
+	vand		q9, q9, q3
+	vand		q11, q11, q3
+	vand		q3, q13, q3
+	add		r2, r3, #48
+	vadd.i64	q12, q4, q1
+	vadd.i64	q13, q10, q1
+	vshr.s64	q12, q12, #26
+	vshr.s64	q13, q13, #26
+	vadd.i64	q5, q5, q12
+	vshl.i64	q12, q12, #26
+	vadd.i64	q14, q5, q0
+	vadd.i64	q11, q11, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q11, q0
+	vsub.i64	q4, q4, q12
+	vshr.s64	q12, q14, #25
+	vsub.i64	q10, q10, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q12
+	vshl.i64	q12, q12, #25
+	vadd.i64	q14, q6, q1
+	vadd.i64	q2, q2, q13
+	vsub.i64	q5, q5, q12
+	vshr.s64	q12, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q1
+	vadd.i64	q7, q7, q12
+	vshl.i64	q12, q12, #26
+	vadd.i64	q15, q7, q0
+	vsub.i64	q11, q11, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q12
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q3, q0
+	vadd.i64	q8, q8, q12
+	vshl.i64	q12, q12, #25
+	vadd.i64	q15, q8, q1
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q7, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q9, q9, q12
+	vtrn.32		d12, d14
+	vshl.i64	q12, q12, #26
+	vtrn.32		d13, d15
+	vadd.i64	q0, q9, q0
+	vadd.i64	q4, q4, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q6, q13, #4
+	vsub.i64	q7, q8, q12
+	vshr.s64	q0, q0, #25
+	vadd.i64	q4, q4, q6
+	vadd.i64	q6, q10, q0
+	vshl.i64	q0, q0, #25
+	vadd.i64	q8, q6, q1
+	vadd.i64	q4, q4, q13
+	vshl.i64	q10, q13, #25
+	vadd.i64	q1, q4, q1
+	vsub.i64	q0, q9, q0
+	vshr.s64	q8, q8, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d14, d0
+	vshr.s64	q1, q1, #26
+	vtrn.32		d15, d1
+	vadd.i64	q0, q11, q8
+	vst1.8		d14, [r2, : 64]
+	vshl.i64	q7, q8, #26
+	vadd.i64	q5, q5, q1
+	vtrn.32		d4, d6
+	vshl.i64	q1, q1, #26
+	vtrn.32		d5, d7
+	vsub.i64	q3, q6, q7
+	add		r2, r2, #16
+	vsub.i64	q1, q4, q1
+	vst1.8		d4, [r2, : 64]
+	vtrn.32		d6, d0
+	vtrn.32		d7, d1
+	sub		r2, r2, #8
+	vtrn.32		d2, d10
+	vtrn.32		d3, d11
+	vst1.8		d6, [r2, : 64]
+	sub		r2, r2, #24
+	vst1.8		d2, [r2, : 64]
+	add		r2, r3, #96
+	vmov.i32	q0, #0
+	vmov.i64	d2, #0xff
+	vmov.i64	d3, #0
+	vshr.u32	q1, q1, #7
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #144
+	vmov.i32	q0, #0
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #240
+	vmov.i32	q0, #0
+	vmov.i64	d2, #0xff
+	vmov.i64	d3, #0
+	vshr.u32	q1, q1, #7
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		d0, [r2, : 64]
+	add		r2, r3, #48
+	add		r6, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		d4, [r6, : 64]
+.Lmainloop:
+	mov		r2, r5, LSR #3
+	and		r6, r5, #7
+	ldrb		r2, [r1, r2]
+	mov		r2, r2, LSR r6
+	and		r2, r2, #1
+	str		r5, [sp, #456]
+	eor		r4, r4, r2
+	str		r2, [sp, #460]
+	neg		r2, r4
+	add		r4, r3, #96
+	add		r5, r3, #192
+	add		r6, r3, #144
+	vld1.8		{d8-d9}, [r4, : 128]!
+	add		r7, r3, #240
+	vld1.8		{d10-d11}, [r5, : 128]!
+	veor		q6, q4, q5
+	vld1.8		{d14-d15}, [r6, : 128]!
+	vdup.i32	q8, r2
+	vld1.8		{d18-d19}, [r7, : 128]!
+	veor		q10, q7, q9
+	vld1.8		{d22-d23}, [r4, : 128]!
+	vand		q6, q6, q8
+	vld1.8		{d24-d25}, [r5, : 128]!
+	vand		q10, q10, q8
+	vld1.8		{d26-d27}, [r6, : 128]!
+	veor		q4, q4, q6
+	vld1.8		{d28-d29}, [r7, : 128]!
+	veor		q5, q5, q6
+	vld1.8		{d0}, [r4, : 64]
+	veor		q6, q7, q10
+	vld1.8		{d2}, [r5, : 64]
+	veor		q7, q9, q10
+	vld1.8		{d4}, [r6, : 64]
+	veor		q9, q11, q12
+	vld1.8		{d6}, [r7, : 64]
+	veor		q10, q0, q1
+	sub		r2, r4, #32
+	vand		q9, q9, q8
+	sub		r4, r5, #32
+	vand		q10, q10, q8
+	sub		r5, r6, #32
+	veor		q11, q11, q9
+	sub		r6, r7, #32
+	veor		q0, q0, q10
+	veor		q9, q12, q9
+	veor		q1, q1, q10
+	veor		q10, q13, q14
+	veor		q12, q2, q3
+	vand		q10, q10, q8
+	vand		q8, q12, q8
+	veor		q12, q13, q10
+	veor		q2, q2, q8
+	veor		q10, q14, q10
+	veor		q3, q3, q8
+	vadd.i32	q8, q4, q6
+	vsub.i32	q4, q4, q6
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vadd.i32	q6, q11, q12
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vsub.i32	q4, q11, q12
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vadd.i32	q6, q0, q2
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vsub.i32	q0, q0, q2
+	vst1.8		d12, [r2, : 64]
+	vadd.i32	q2, q5, q7
+	vst1.8		d0, [r5, : 64]
+	vsub.i32	q0, q5, q7
+	vst1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q2, q9, q10
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vsub.i32	q0, q9, q10
+	vst1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q2, q1, q3
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vsub.i32	q0, q1, q3
+	vst1.8		d4, [r4, : 64]
+	vst1.8		d0, [r6, : 64]
+	add		r2, sp, #512
+	add		r4, r3, #96
+	add		r5, r3, #144
+	vld1.8		{d0-d1}, [r2, : 128]
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vzip.i32	q1, q2
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vld1.8		{d8-d9}, [r5, : 128]!
+	vshl.i32	q5, q1, #1
+	vzip.i32	q3, q4
+	vshl.i32	q6, q2, #1
+	vld1.8		{d14}, [r4, : 64]
+	vshl.i32	q8, q3, #1
+	vld1.8		{d15}, [r5, : 64]
+	vshl.i32	q9, q4, #1
+	vmul.i32	d21, d7, d1
+	vtrn.32		d14, d15
+	vmul.i32	q11, q4, q0
+	vmul.i32	q0, q7, q0
+	vmull.s32	q12, d2, d2
+	vmlal.s32	q12, d11, d1
+	vmlal.s32	q12, d12, d0
+	vmlal.s32	q12, d13, d23
+	vmlal.s32	q12, d16, d22
+	vmlal.s32	q12, d7, d21
+	vmull.s32	q10, d2, d11
+	vmlal.s32	q10, d4, d1
+	vmlal.s32	q10, d13, d0
+	vmlal.s32	q10, d6, d23
+	vmlal.s32	q10, d17, d22
+	vmull.s32	q13, d10, d4
+	vmlal.s32	q13, d11, d3
+	vmlal.s32	q13, d13, d1
+	vmlal.s32	q13, d16, d0
+	vmlal.s32	q13, d17, d23
+	vmlal.s32	q13, d8, d22
+	vmull.s32	q1, d10, d5
+	vmlal.s32	q1, d11, d4
+	vmlal.s32	q1, d6, d1
+	vmlal.s32	q1, d17, d0
+	vmlal.s32	q1, d8, d23
+	vmull.s32	q14, d10, d6
+	vmlal.s32	q14, d11, d13
+	vmlal.s32	q14, d4, d4
+	vmlal.s32	q14, d17, d1
+	vmlal.s32	q14, d18, d0
+	vmlal.s32	q14, d9, d23
+	vmull.s32	q11, d10, d7
+	vmlal.s32	q11, d11, d6
+	vmlal.s32	q11, d12, d5
+	vmlal.s32	q11, d8, d1
+	vmlal.s32	q11, d19, d0
+	vmull.s32	q15, d10, d8
+	vmlal.s32	q15, d11, d17
+	vmlal.s32	q15, d12, d6
+	vmlal.s32	q15, d13, d5
+	vmlal.s32	q15, d19, d1
+	vmlal.s32	q15, d14, d0
+	vmull.s32	q2, d10, d9
+	vmlal.s32	q2, d11, d8
+	vmlal.s32	q2, d12, d7
+	vmlal.s32	q2, d13, d6
+	vmlal.s32	q2, d14, d1
+	vmull.s32	q0, d15, d1
+	vmlal.s32	q0, d10, d14
+	vmlal.s32	q0, d11, d19
+	vmlal.s32	q0, d12, d8
+	vmlal.s32	q0, d13, d17
+	vmlal.s32	q0, d6, d6
+	add		r2, sp, #480
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vmull.s32	q3, d16, d7
+	vmlal.s32	q3, d10, d15
+	vmlal.s32	q3, d11, d14
+	vmlal.s32	q3, d12, d9
+	vmlal.s32	q3, d13, d8
+	vld1.8		{d8-d9}, [r2, : 128]
+	vadd.i64	q5, q12, q9
+	vadd.i64	q6, q15, q9
+	vshr.s64	q5, q5, #26
+	vshr.s64	q6, q6, #26
+	vadd.i64	q7, q10, q5
+	vshl.i64	q5, q5, #26
+	vadd.i64	q8, q7, q4
+	vadd.i64	q2, q2, q6
+	vshl.i64	q6, q6, #26
+	vadd.i64	q10, q2, q4
+	vsub.i64	q5, q12, q5
+	vshr.s64	q8, q8, #25
+	vsub.i64	q6, q15, q6
+	vshr.s64	q10, q10, #25
+	vadd.i64	q12, q13, q8
+	vshl.i64	q8, q8, #25
+	vadd.i64	q13, q12, q9
+	vadd.i64	q0, q0, q10
+	vsub.i64	q7, q7, q8
+	vshr.s64	q8, q13, #26
+	vshl.i64	q10, q10, #25
+	vadd.i64	q13, q0, q9
+	vadd.i64	q1, q1, q8
+	vshl.i64	q8, q8, #26
+	vadd.i64	q15, q1, q4
+	vsub.i64	q2, q2, q10
+	vshr.s64	q10, q13, #26
+	vsub.i64	q8, q12, q8
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q10
+	vshl.i64	q10, q10, #26
+	vadd.i64	q13, q3, q4
+	vadd.i64	q14, q14, q12
+	add		r2, r3, #288
+	vshl.i64	q12, q12, #25
+	add		r4, r3, #336
+	vadd.i64	q15, q14, q9
+	add		r2, r2, #8
+	vsub.i64	q0, q0, q10
+	add		r4, r4, #8
+	vshr.s64	q10, q13, #25
+	vsub.i64	q1, q1, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q13, q10, q10
+	vadd.i64	q11, q11, q12
+	vtrn.32		d16, d2
+	vshl.i64	q12, q12, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q11, q4
+	vadd.i64	q4, q5, q13
+	vst1.8		d16, [r2, : 64]!
+	vshl.i64	q5, q10, #4
+	vst1.8		d17, [r4, : 64]!
+	vsub.i64	q8, q14, q12
+	vshr.s64	q1, q1, #25
+	vadd.i64	q4, q4, q5
+	vadd.i64	q5, q6, q1
+	vshl.i64	q1, q1, #25
+	vadd.i64	q6, q5, q9
+	vadd.i64	q4, q4, q10
+	vshl.i64	q10, q10, #25
+	vadd.i64	q9, q4, q9
+	vsub.i64	q1, q11, q1
+	vshr.s64	q6, q6, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d16, d2
+	vshr.s64	q9, q9, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q2, q6
+	vst1.8		d16, [r2, : 64]
+	vshl.i64	q2, q6, #26
+	vst1.8		d17, [r4, : 64]
+	vadd.i64	q6, q7, q9
+	vtrn.32		d0, d6
+	vshl.i64	q7, q9, #26
+	vtrn.32		d1, d7
+	vsub.i64	q2, q5, q2
+	add		r2, r2, #16
+	vsub.i64	q3, q4, q7
+	vst1.8		d0, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d1, [r4, : 64]
+	vtrn.32		d4, d2
+	vtrn.32		d5, d3
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d6, d12
+	vtrn.32		d7, d13
+	vst1.8		d4, [r2, : 64]
+	vst1.8		d5, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d6, [r2, : 64]
+	vst1.8		d7, [r4, : 64]
+	add		r2, r3, #240
+	add		r4, r3, #96
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #144
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #192
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #144
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #96
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	add		r2, r3, #288
+	add		r4, r3, #336
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vsub.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4-d5}, [r4, : 128]!
+	vsub.i32	q1, q1, q2
+	add		r5, r3, #240
+	vld1.8		{d4}, [r2, : 64]
+	vld1.8		{d6}, [r4, : 64]
+	vsub.i32	q2, q2, q3
+	vst1.8		{d0-d1}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r5, : 128]!
+	vst1.8		d4, [r5, : 64]
+	add		r2, r3, #144
+	add		r4, r3, #96
+	add		r5, r3, #144
+	add		r6, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vsub.i32	q2, q0, q1
+	vadd.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vsub.i32	q4, q1, q3
+	vadd.i32	q1, q1, q3
+	vld1.8		{d6}, [r2, : 64]
+	vld1.8		{d10}, [r4, : 64]
+	vsub.i32	q6, q3, q5
+	vadd.i32	q3, q3, q5
+	vst1.8		{d4-d5}, [r5, : 128]!
+	vst1.8		{d0-d1}, [r6, : 128]!
+	vst1.8		{d8-d9}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r6, : 128]!
+	vst1.8		d12, [r5, : 64]
+	vst1.8		d6, [r6, : 64]
+	add		r2, r3, #0
+	add		r4, r3, #240
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #336
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #288
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #288
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #96
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	add		r2, sp, #512
+	add		r4, r3, #144
+	add		r5, r3, #192
+	vld1.8		{d0-d1}, [r2, : 128]
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vzip.i32	q1, q2
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vld1.8		{d8-d9}, [r5, : 128]!
+	vshl.i32	q5, q1, #1
+	vzip.i32	q3, q4
+	vshl.i32	q6, q2, #1
+	vld1.8		{d14}, [r4, : 64]
+	vshl.i32	q8, q3, #1
+	vld1.8		{d15}, [r5, : 64]
+	vshl.i32	q9, q4, #1
+	vmul.i32	d21, d7, d1
+	vtrn.32		d14, d15
+	vmul.i32	q11, q4, q0
+	vmul.i32	q0, q7, q0
+	vmull.s32	q12, d2, d2
+	vmlal.s32	q12, d11, d1
+	vmlal.s32	q12, d12, d0
+	vmlal.s32	q12, d13, d23
+	vmlal.s32	q12, d16, d22
+	vmlal.s32	q12, d7, d21
+	vmull.s32	q10, d2, d11
+	vmlal.s32	q10, d4, d1
+	vmlal.s32	q10, d13, d0
+	vmlal.s32	q10, d6, d23
+	vmlal.s32	q10, d17, d22
+	vmull.s32	q13, d10, d4
+	vmlal.s32	q13, d11, d3
+	vmlal.s32	q13, d13, d1
+	vmlal.s32	q13, d16, d0
+	vmlal.s32	q13, d17, d23
+	vmlal.s32	q13, d8, d22
+	vmull.s32	q1, d10, d5
+	vmlal.s32	q1, d11, d4
+	vmlal.s32	q1, d6, d1
+	vmlal.s32	q1, d17, d0
+	vmlal.s32	q1, d8, d23
+	vmull.s32	q14, d10, d6
+	vmlal.s32	q14, d11, d13
+	vmlal.s32	q14, d4, d4
+	vmlal.s32	q14, d17, d1
+	vmlal.s32	q14, d18, d0
+	vmlal.s32	q14, d9, d23
+	vmull.s32	q11, d10, d7
+	vmlal.s32	q11, d11, d6
+	vmlal.s32	q11, d12, d5
+	vmlal.s32	q11, d8, d1
+	vmlal.s32	q11, d19, d0
+	vmull.s32	q15, d10, d8
+	vmlal.s32	q15, d11, d17
+	vmlal.s32	q15, d12, d6
+	vmlal.s32	q15, d13, d5
+	vmlal.s32	q15, d19, d1
+	vmlal.s32	q15, d14, d0
+	vmull.s32	q2, d10, d9
+	vmlal.s32	q2, d11, d8
+	vmlal.s32	q2, d12, d7
+	vmlal.s32	q2, d13, d6
+	vmlal.s32	q2, d14, d1
+	vmull.s32	q0, d15, d1
+	vmlal.s32	q0, d10, d14
+	vmlal.s32	q0, d11, d19
+	vmlal.s32	q0, d12, d8
+	vmlal.s32	q0, d13, d17
+	vmlal.s32	q0, d6, d6
+	add		r2, sp, #480
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vmull.s32	q3, d16, d7
+	vmlal.s32	q3, d10, d15
+	vmlal.s32	q3, d11, d14
+	vmlal.s32	q3, d12, d9
+	vmlal.s32	q3, d13, d8
+	vld1.8		{d8-d9}, [r2, : 128]
+	vadd.i64	q5, q12, q9
+	vadd.i64	q6, q15, q9
+	vshr.s64	q5, q5, #26
+	vshr.s64	q6, q6, #26
+	vadd.i64	q7, q10, q5
+	vshl.i64	q5, q5, #26
+	vadd.i64	q8, q7, q4
+	vadd.i64	q2, q2, q6
+	vshl.i64	q6, q6, #26
+	vadd.i64	q10, q2, q4
+	vsub.i64	q5, q12, q5
+	vshr.s64	q8, q8, #25
+	vsub.i64	q6, q15, q6
+	vshr.s64	q10, q10, #25
+	vadd.i64	q12, q13, q8
+	vshl.i64	q8, q8, #25
+	vadd.i64	q13, q12, q9
+	vadd.i64	q0, q0, q10
+	vsub.i64	q7, q7, q8
+	vshr.s64	q8, q13, #26
+	vshl.i64	q10, q10, #25
+	vadd.i64	q13, q0, q9
+	vadd.i64	q1, q1, q8
+	vshl.i64	q8, q8, #26
+	vadd.i64	q15, q1, q4
+	vsub.i64	q2, q2, q10
+	vshr.s64	q10, q13, #26
+	vsub.i64	q8, q12, q8
+	vshr.s64	q12, q15, #25
+	vadd.i64	q3, q3, q10
+	vshl.i64	q10, q10, #26
+	vadd.i64	q13, q3, q4
+	vadd.i64	q14, q14, q12
+	add		r2, r3, #144
+	vshl.i64	q12, q12, #25
+	add		r4, r3, #192
+	vadd.i64	q15, q14, q9
+	add		r2, r2, #8
+	vsub.i64	q0, q0, q10
+	add		r4, r4, #8
+	vshr.s64	q10, q13, #25
+	vsub.i64	q1, q1, q12
+	vshr.s64	q12, q15, #26
+	vadd.i64	q13, q10, q10
+	vadd.i64	q11, q11, q12
+	vtrn.32		d16, d2
+	vshl.i64	q12, q12, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q11, q4
+	vadd.i64	q4, q5, q13
+	vst1.8		d16, [r2, : 64]!
+	vshl.i64	q5, q10, #4
+	vst1.8		d17, [r4, : 64]!
+	vsub.i64	q8, q14, q12
+	vshr.s64	q1, q1, #25
+	vadd.i64	q4, q4, q5
+	vadd.i64	q5, q6, q1
+	vshl.i64	q1, q1, #25
+	vadd.i64	q6, q5, q9
+	vadd.i64	q4, q4, q10
+	vshl.i64	q10, q10, #25
+	vadd.i64	q9, q4, q9
+	vsub.i64	q1, q11, q1
+	vshr.s64	q6, q6, #26
+	vsub.i64	q3, q3, q10
+	vtrn.32		d16, d2
+	vshr.s64	q9, q9, #26
+	vtrn.32		d17, d3
+	vadd.i64	q1, q2, q6
+	vst1.8		d16, [r2, : 64]
+	vshl.i64	q2, q6, #26
+	vst1.8		d17, [r4, : 64]
+	vadd.i64	q6, q7, q9
+	vtrn.32		d0, d6
+	vshl.i64	q7, q9, #26
+	vtrn.32		d1, d7
+	vsub.i64	q2, q5, q2
+	add		r2, r2, #16
+	vsub.i64	q3, q4, q7
+	vst1.8		d0, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d1, [r4, : 64]
+	vtrn.32		d4, d2
+	vtrn.32		d5, d3
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d6, d12
+	vtrn.32		d7, d13
+	vst1.8		d4, [r2, : 64]
+	vst1.8		d5, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d6, [r2, : 64]
+	vst1.8		d7, [r4, : 64]
+	add		r2, r3, #336
+	add		r4, r3, #288
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vadd.i32	q0, q0, q1
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4-d5}, [r4, : 128]!
+	vadd.i32	q1, q1, q2
+	add		r5, r3, #288
+	vld1.8		{d4}, [r2, : 64]
+	vld1.8		{d6}, [r4, : 64]
+	vadd.i32	q2, q2, q3
+	vst1.8		{d0-d1}, [r5, : 128]!
+	vst1.8		{d2-d3}, [r5, : 128]!
+	vst1.8		d4, [r5, : 64]
+	add		r2, r3, #48
+	add		r4, r3, #144
+	vld1.8		{d0-d1}, [r4, : 128]!
+	vld1.8		{d2-d3}, [r4, : 128]!
+	vld1.8		{d4}, [r4, : 64]
+	add		r4, r3, #288
+	vld1.8		{d6-d7}, [r4, : 128]!
+	vtrn.32		q0, q3
+	vld1.8		{d8-d9}, [r4, : 128]!
+	vshl.i32	q5, q0, #4
+	vtrn.32		q1, q4
+	vshl.i32	q6, q3, #4
+	vadd.i32	q5, q5, q0
+	vadd.i32	q6, q6, q3
+	vshl.i32	q7, q1, #4
+	vld1.8		{d5}, [r4, : 64]
+	vshl.i32	q8, q4, #4
+	vtrn.32		d4, d5
+	vadd.i32	q7, q7, q1
+	vadd.i32	q8, q8, q4
+	vld1.8		{d18-d19}, [r2, : 128]!
+	vshl.i32	q10, q2, #4
+	vld1.8		{d22-d23}, [r2, : 128]!
+	vadd.i32	q10, q10, q2
+	vld1.8		{d24}, [r2, : 64]
+	vadd.i32	q5, q5, q0
+	add		r2, r3, #240
+	vld1.8		{d26-d27}, [r2, : 128]!
+	vadd.i32	q6, q6, q3
+	vld1.8		{d28-d29}, [r2, : 128]!
+	vadd.i32	q8, q8, q4
+	vld1.8		{d25}, [r2, : 64]
+	vadd.i32	q10, q10, q2
+	vtrn.32		q9, q13
+	vadd.i32	q7, q7, q1
+	vadd.i32	q5, q5, q0
+	vtrn.32		q11, q14
+	vadd.i32	q6, q6, q3
+	add		r2, sp, #528
+	vadd.i32	q10, q10, q2
+	vtrn.32		d24, d25
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q6, q13, #1
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vshl.i32	q10, q14, #1
+	vst1.8		{d12-d13}, [r2, : 128]!
+	vshl.i32	q15, q12, #1
+	vadd.i32	q8, q8, q4
+	vext.32		d10, d31, d30, #0
+	vadd.i32	q7, q7, q1
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q8, d18, d5
+	vmlal.s32	q8, d26, d4
+	vmlal.s32	q8, d19, d9
+	vmlal.s32	q8, d27, d3
+	vmlal.s32	q8, d22, d8
+	vmlal.s32	q8, d28, d2
+	vmlal.s32	q8, d23, d7
+	vmlal.s32	q8, d29, d1
+	vmlal.s32	q8, d24, d6
+	vmlal.s32	q8, d25, d0
+	vst1.8		{d14-d15}, [r2, : 128]!
+	vmull.s32	q2, d18, d4
+	vmlal.s32	q2, d12, d9
+	vmlal.s32	q2, d13, d8
+	vmlal.s32	q2, d19, d3
+	vmlal.s32	q2, d22, d2
+	vmlal.s32	q2, d23, d1
+	vmlal.s32	q2, d24, d0
+	vst1.8		{d20-d21}, [r2, : 128]!
+	vmull.s32	q7, d18, d9
+	vmlal.s32	q7, d26, d3
+	vmlal.s32	q7, d19, d8
+	vmlal.s32	q7, d27, d2
+	vmlal.s32	q7, d22, d7
+	vmlal.s32	q7, d28, d1
+	vmlal.s32	q7, d23, d6
+	vmlal.s32	q7, d29, d0
+	vst1.8		{d10-d11}, [r2, : 128]!
+	vmull.s32	q5, d18, d3
+	vmlal.s32	q5, d19, d2
+	vmlal.s32	q5, d22, d1
+	vmlal.s32	q5, d23, d0
+	vmlal.s32	q5, d12, d8
+	vst1.8		{d16-d17}, [r2, : 128]!
+	vmull.s32	q4, d18, d8
+	vmlal.s32	q4, d26, d2
+	vmlal.s32	q4, d19, d7
+	vmlal.s32	q4, d27, d1
+	vmlal.s32	q4, d22, d6
+	vmlal.s32	q4, d28, d0
+	vmull.s32	q8, d18, d7
+	vmlal.s32	q8, d26, d1
+	vmlal.s32	q8, d19, d6
+	vmlal.s32	q8, d27, d0
+	add		r2, sp, #544
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q7, d24, d21
+	vmlal.s32	q7, d25, d20
+	vmlal.s32	q4, d23, d21
+	vmlal.s32	q4, d29, d20
+	vmlal.s32	q8, d22, d21
+	vmlal.s32	q8, d28, d20
+	vmlal.s32	q5, d24, d20
+	vst1.8		{d14-d15}, [r2, : 128]
+	vmull.s32	q7, d18, d6
+	vmlal.s32	q7, d26, d0
+	add		r2, sp, #624
+	vld1.8		{d30-d31}, [r2, : 128]
+	vmlal.s32	q2, d30, d21
+	vmlal.s32	q7, d19, d21
+	vmlal.s32	q7, d27, d20
+	add		r2, sp, #592
+	vld1.8		{d26-d27}, [r2, : 128]
+	vmlal.s32	q4, d25, d27
+	vmlal.s32	q8, d29, d27
+	vmlal.s32	q8, d25, d26
+	vmlal.s32	q7, d28, d27
+	vmlal.s32	q7, d29, d26
+	add		r2, sp, #576
+	vld1.8		{d28-d29}, [r2, : 128]
+	vmlal.s32	q4, d24, d29
+	vmlal.s32	q8, d23, d29
+	vmlal.s32	q8, d24, d28
+	vmlal.s32	q7, d22, d29
+	vmlal.s32	q7, d23, d28
+	vst1.8		{d8-d9}, [r2, : 128]
+	add		r2, sp, #528
+	vld1.8		{d8-d9}, [r2, : 128]
+	vmlal.s32	q7, d24, d9
+	vmlal.s32	q7, d25, d31
+	vmull.s32	q1, d18, d2
+	vmlal.s32	q1, d19, d1
+	vmlal.s32	q1, d22, d0
+	vmlal.s32	q1, d24, d27
+	vmlal.s32	q1, d23, d20
+	vmlal.s32	q1, d12, d7
+	vmlal.s32	q1, d13, d6
+	vmull.s32	q6, d18, d1
+	vmlal.s32	q6, d19, d0
+	vmlal.s32	q6, d23, d27
+	vmlal.s32	q6, d22, d20
+	vmlal.s32	q6, d24, d26
+	vmull.s32	q0, d18, d0
+	vmlal.s32	q0, d22, d27
+	vmlal.s32	q0, d23, d26
+	vmlal.s32	q0, d24, d31
+	vmlal.s32	q0, d19, d20
+	add		r2, sp, #608
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q2, d18, d7
+	vmlal.s32	q5, d18, d6
+	vmlal.s32	q1, d18, d21
+	vmlal.s32	q0, d18, d28
+	vmlal.s32	q6, d18, d29
+	vmlal.s32	q2, d19, d6
+	vmlal.s32	q5, d19, d21
+	vmlal.s32	q1, d19, d29
+	vmlal.s32	q0, d19, d9
+	vmlal.s32	q6, d19, d28
+	add		r2, sp, #560
+	vld1.8		{d18-d19}, [r2, : 128]
+	add		r2, sp, #480
+	vld1.8		{d22-d23}, [r2, : 128]
+	vmlal.s32	q5, d19, d7
+	vmlal.s32	q0, d18, d21
+	vmlal.s32	q0, d19, d29
+	vmlal.s32	q6, d18, d6
+	add		r2, sp, #496
+	vld1.8		{d6-d7}, [r2, : 128]
+	vmlal.s32	q6, d19, d21
+	add		r2, sp, #544
+	vld1.8		{d18-d19}, [r2, : 128]
+	vmlal.s32	q0, d30, d8
+	add		r2, sp, #640
+	vld1.8		{d20-d21}, [r2, : 128]
+	vmlal.s32	q5, d30, d29
+	add		r2, sp, #576
+	vld1.8		{d24-d25}, [r2, : 128]
+	vmlal.s32	q1, d30, d28
+	vadd.i64	q13, q0, q11
+	vadd.i64	q14, q5, q11
+	vmlal.s32	q6, d30, d9
+	vshr.s64	q4, q13, #26
+	vshr.s64	q13, q14, #26
+	vadd.i64	q7, q7, q4
+	vshl.i64	q4, q4, #26
+	vadd.i64	q14, q7, q3
+	vadd.i64	q9, q9, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q15, q9, q3
+	vsub.i64	q0, q0, q4
+	vshr.s64	q4, q14, #25
+	vsub.i64	q5, q5, q13
+	vshr.s64	q13, q15, #25
+	vadd.i64	q6, q6, q4
+	vshl.i64	q4, q4, #25
+	vadd.i64	q14, q6, q11
+	vadd.i64	q2, q2, q13
+	vsub.i64	q4, q7, q4
+	vshr.s64	q7, q14, #26
+	vshl.i64	q13, q13, #25
+	vadd.i64	q14, q2, q11
+	vadd.i64	q8, q8, q7
+	vshl.i64	q7, q7, #26
+	vadd.i64	q15, q8, q3
+	vsub.i64	q9, q9, q13
+	vshr.s64	q13, q14, #26
+	vsub.i64	q6, q6, q7
+	vshr.s64	q7, q15, #25
+	vadd.i64	q10, q10, q13
+	vshl.i64	q13, q13, #26
+	vadd.i64	q14, q10, q3
+	vadd.i64	q1, q1, q7
+	add		r2, r3, #240
+	vshl.i64	q7, q7, #25
+	add		r4, r3, #144
+	vadd.i64	q15, q1, q11
+	add		r2, r2, #8
+	vsub.i64	q2, q2, q13
+	add		r4, r4, #8
+	vshr.s64	q13, q14, #25
+	vsub.i64	q7, q8, q7
+	vshr.s64	q8, q15, #26
+	vadd.i64	q14, q13, q13
+	vadd.i64	q12, q12, q8
+	vtrn.32		d12, d14
+	vshl.i64	q8, q8, #26
+	vtrn.32		d13, d15
+	vadd.i64	q3, q12, q3
+	vadd.i64	q0, q0, q14
+	vst1.8		d12, [r2, : 64]!
+	vshl.i64	q7, q13, #4
+	vst1.8		d13, [r4, : 64]!
+	vsub.i64	q1, q1, q8
+	vshr.s64	q3, q3, #25
+	vadd.i64	q0, q0, q7
+	vadd.i64	q5, q5, q3
+	vshl.i64	q3, q3, #25
+	vadd.i64	q6, q5, q11
+	vadd.i64	q0, q0, q13
+	vshl.i64	q7, q13, #25
+	vadd.i64	q8, q0, q11
+	vsub.i64	q3, q12, q3
+	vshr.s64	q6, q6, #26
+	vsub.i64	q7, q10, q7
+	vtrn.32		d2, d6
+	vshr.s64	q8, q8, #26
+	vtrn.32		d3, d7
+	vadd.i64	q3, q9, q6
+	vst1.8		d2, [r2, : 64]
+	vshl.i64	q6, q6, #26
+	vst1.8		d3, [r4, : 64]
+	vadd.i64	q1, q4, q8
+	vtrn.32		d4, d14
+	vshl.i64	q4, q8, #26
+	vtrn.32		d5, d15
+	vsub.i64	q5, q5, q6
+	add		r2, r2, #16
+	vsub.i64	q0, q0, q4
+	vst1.8		d4, [r2, : 64]
+	add		r4, r4, #16
+	vst1.8		d5, [r4, : 64]
+	vtrn.32		d10, d6
+	vtrn.32		d11, d7
+	sub		r2, r2, #8
+	sub		r4, r4, #8
+	vtrn.32		d0, d2
+	vtrn.32		d1, d3
+	vst1.8		d10, [r2, : 64]
+	vst1.8		d11, [r4, : 64]
+	sub		r2, r2, #24
+	sub		r4, r4, #24
+	vst1.8		d0, [r2, : 64]
+	vst1.8		d1, [r4, : 64]
+	ldr		r2, [sp, #456]
+	ldr		r4, [sp, #460]
+	subs		r5, r2, #1
+	bge		.Lmainloop
+	add		r1, r3, #144
+	add		r2, r3, #336
+	vld1.8		{d0-d1}, [r1, : 128]!
+	vld1.8		{d2-d3}, [r1, : 128]!
+	vld1.8		{d4}, [r1, : 64]
+	vst1.8		{d0-d1}, [r2, : 128]!
+	vst1.8		{d2-d3}, [r2, : 128]!
+	vst1.8		d4, [r2, : 64]
+	movw		r1, #0
+.Linvertloop:
+	add		r2, r3, #144
+	movw		r4, #0
+	movw		r5, #2
+	cmp		r1, #1
+	moveq		r5, #1
+	addeq		r2, r3, #336
+	addeq		r4, r3, #48
+	cmp		r1, #2
+	moveq		r5, #1
+	addeq		r2, r3, #48
+	cmp		r1, #3
+	moveq		r5, #5
+	addeq		r4, r3, #336
+	cmp		r1, #4
+	moveq		r5, #10
+	cmp		r1, #5
+	moveq		r5, #20
+	cmp		r1, #6
+	moveq		r5, #10
+	addeq		r2, r3, #336
+	addeq		r4, r3, #336
+	cmp		r1, #7
+	moveq		r5, #50
+	cmp		r1, #8
+	moveq		r5, #100
+	cmp		r1, #9
+	moveq		r5, #50
+	addeq		r2, r3, #336
+	cmp		r1, #10
+	moveq		r5, #5
+	addeq		r2, r3, #48
+	cmp		r1, #11
+	moveq		r5, #0
+	addeq		r2, r3, #96
+	add		r6, r3, #144
+	add		r7, r3, #288
+	vld1.8		{d0-d1}, [r6, : 128]!
+	vld1.8		{d2-d3}, [r6, : 128]!
+	vld1.8		{d4}, [r6, : 64]
+	vst1.8		{d0-d1}, [r7, : 128]!
+	vst1.8		{d2-d3}, [r7, : 128]!
+	vst1.8		d4, [r7, : 64]
+	cmp		r5, #0
+	beq		.Lskipsquaringloop
+.Lsquaringloop:
+	add		r6, r3, #288
+	add		r7, r3, #288
+	add		r8, r3, #288
+	vmov.i32	q0, #19
+	vmov.i32	q1, #0
+	vmov.i32	q2, #1
+	vzip.i32	q1, q2
+	vld1.8		{d4-d5}, [r7, : 128]!
+	vld1.8		{d6-d7}, [r7, : 128]!
+	vld1.8		{d9}, [r7, : 64]
+	vld1.8		{d10-d11}, [r6, : 128]!
+	add		r7, sp, #384
+	vld1.8		{d12-d13}, [r6, : 128]!
+	vmul.i32	q7, q2, q0
+	vld1.8		{d8}, [r6, : 64]
+	vext.32		d17, d11, d10, #1
+	vmul.i32	q9, q3, q0
+	vext.32		d16, d10, d8, #1
+	vshl.u32	q10, q5, q1
+	vext.32		d22, d14, d4, #1
+	vext.32		d24, d18, d6, #1
+	vshl.u32	q13, q6, q1
+	vshl.u32	d28, d8, d2
+	vrev64.i32	d22, d22
+	vmul.i32	d1, d9, d1
+	vrev64.i32	d24, d24
+	vext.32		d29, d8, d13, #1
+	vext.32		d0, d1, d9, #1
+	vrev64.i32	d0, d0
+	vext.32		d2, d9, d1, #1
+	vext.32		d23, d15, d5, #1
+	vmull.s32	q4, d20, d4
+	vrev64.i32	d23, d23
+	vmlal.s32	q4, d21, d1
+	vrev64.i32	d2, d2
+	vmlal.s32	q4, d26, d19
+	vext.32		d3, d5, d15, #1
+	vmlal.s32	q4, d27, d18
+	vrev64.i32	d3, d3
+	vmlal.s32	q4, d28, d15
+	vext.32		d14, d12, d11, #1
+	vmull.s32	q5, d16, d23
+	vext.32		d15, d13, d12, #1
+	vmlal.s32	q5, d17, d4
+	vst1.8		d8, [r7, : 64]!
+	vmlal.s32	q5, d14, d1
+	vext.32		d12, d9, d8, #0
+	vmlal.s32	q5, d15, d19
+	vmov.i64	d13, #0
+	vmlal.s32	q5, d29, d18
+	vext.32		d25, d19, d7, #1
+	vmlal.s32	q6, d20, d5
+	vrev64.i32	d25, d25
+	vmlal.s32	q6, d21, d4
+	vst1.8		d11, [r7, : 64]!
+	vmlal.s32	q6, d26, d1
+	vext.32		d9, d10, d10, #0
+	vmlal.s32	q6, d27, d19
+	vmov.i64	d8, #0
+	vmlal.s32	q6, d28, d18
+	vmlal.s32	q4, d16, d24
+	vmlal.s32	q4, d17, d5
+	vmlal.s32	q4, d14, d4
+	vst1.8		d12, [r7, : 64]!
+	vmlal.s32	q4, d15, d1
+	vext.32		d10, d13, d12, #0
+	vmlal.s32	q4, d29, d19
+	vmov.i64	d11, #0
+	vmlal.s32	q5, d20, d6
+	vmlal.s32	q5, d21, d5
+	vmlal.s32	q5, d26, d4
+	vext.32		d13, d8, d8, #0
+	vmlal.s32	q5, d27, d1
+	vmov.i64	d12, #0
+	vmlal.s32	q5, d28, d19
+	vst1.8		d9, [r7, : 64]!
+	vmlal.s32	q6, d16, d25
+	vmlal.s32	q6, d17, d6
+	vst1.8		d10, [r7, : 64]
+	vmlal.s32	q6, d14, d5
+	vext.32		d8, d11, d10, #0
+	vmlal.s32	q6, d15, d4
+	vmov.i64	d9, #0
+	vmlal.s32	q6, d29, d1
+	vmlal.s32	q4, d20, d7
+	vmlal.s32	q4, d21, d6
+	vmlal.s32	q4, d26, d5
+	vext.32		d11, d12, d12, #0
+	vmlal.s32	q4, d27, d4
+	vmov.i64	d10, #0
+	vmlal.s32	q4, d28, d1
+	vmlal.s32	q5, d16, d0
+	sub		r6, r7, #32
+	vmlal.s32	q5, d17, d7
+	vmlal.s32	q5, d14, d6
+	vext.32		d30, d9, d8, #0
+	vmlal.s32	q5, d15, d5
+	vld1.8		{d31}, [r6, : 64]!
+	vmlal.s32	q5, d29, d4
+	vmlal.s32	q15, d20, d0
+	vext.32		d0, d6, d18, #1
+	vmlal.s32	q15, d21, d25
+	vrev64.i32	d0, d0
+	vmlal.s32	q15, d26, d24
+	vext.32		d1, d7, d19, #1
+	vext.32		d7, d10, d10, #0
+	vmlal.s32	q15, d27, d23
+	vrev64.i32	d1, d1
+	vld1.8		{d6}, [r6, : 64]
+	vmlal.s32	q15, d28, d22
+	vmlal.s32	q3, d16, d4
+	add		r6, r6, #24
+	vmlal.s32	q3, d17, d2
+	vext.32		d4, d31, d30, #0
+	vmov		d17, d11
+	vmlal.s32	q3, d14, d1
+	vext.32		d11, d13, d13, #0
+	vext.32		d13, d30, d30, #0
+	vmlal.s32	q3, d15, d0
+	vext.32		d1, d8, d8, #0
+	vmlal.s32	q3, d29, d3
+	vld1.8		{d5}, [r6, : 64]
+	sub		r6, r6, #16
+	vext.32		d10, d6, d6, #0
+	vmov.i32	q1, #0xffffffff
+	vshl.i64	q4, q1, #25
+	add		r7, sp, #480
+	vld1.8		{d14-d15}, [r7, : 128]
+	vadd.i64	q9, q2, q7
+	vshl.i64	q1, q1, #26
+	vshr.s64	q10, q9, #26
+	vld1.8		{d0}, [r6, : 64]!
+	vadd.i64	q5, q5, q10
+	vand		q9, q9, q1
+	vld1.8		{d16}, [r6, : 64]!
+	add		r6, sp, #496
+	vld1.8		{d20-d21}, [r6, : 128]
+	vadd.i64	q11, q5, q10
+	vsub.i64	q2, q2, q9
+	vshr.s64	q9, q11, #25
+	vext.32		d12, d5, d4, #0
+	vand		q11, q11, q4
+	vadd.i64	q0, q0, q9
+	vmov		d19, d7
+	vadd.i64	q3, q0, q7
+	vsub.i64	q5, q5, q11
+	vshr.s64	q11, q3, #26
+	vext.32		d18, d11, d10, #0
+	vand		q3, q3, q1
+	vadd.i64	q8, q8, q11
+	vadd.i64	q11, q8, q10
+	vsub.i64	q0, q0, q3
+	vshr.s64	q3, q11, #25
+	vand		q11, q11, q4
+	vadd.i64	q3, q6, q3
+	vadd.i64	q6, q3, q7
+	vsub.i64	q8, q8, q11
+	vshr.s64	q11, q6, #26
+	vand		q6, q6, q1
+	vadd.i64	q9, q9, q11
+	vadd.i64	d25, d19, d21
+	vsub.i64	q3, q3, q6
+	vshr.s64	d23, d25, #25
+	vand		q4, q12, q4
+	vadd.i64	d21, d23, d23
+	vshl.i64	d25, d23, #4
+	vadd.i64	d21, d21, d23
+	vadd.i64	d25, d25, d21
+	vadd.i64	d4, d4, d25
+	vzip.i32	q0, q8
+	vadd.i64	d12, d4, d14
+	add		r6, r8, #8
+	vst1.8		d0, [r6, : 64]
+	vsub.i64	d19, d19, d9
+	add		r6, r6, #16
+	vst1.8		d16, [r6, : 64]
+	vshr.s64	d22, d12, #26
+	vand		q0, q6, q1
+	vadd.i64	d10, d10, d22
+	vzip.i32	q3, q9
+	vsub.i64	d4, d4, d0
+	sub		r6, r6, #8
+	vst1.8		d6, [r6, : 64]
+	add		r6, r6, #16
+	vst1.8		d18, [r6, : 64]
+	vzip.i32	q2, q5
+	sub		r6, r6, #32
+	vst1.8		d4, [r6, : 64]
+	subs		r5, r5, #1
+	bhi		.Lsquaringloop
+.Lskipsquaringloop:
+	mov		r2, r2
+	add		r5, r3, #288
+	add		r6, r3, #144
+	vmov.i32	q0, #19
+	vmov.i32	q1, #0
+	vmov.i32	q2, #1
+	vzip.i32	q1, q2
+	vld1.8		{d4-d5}, [r5, : 128]!
+	vld1.8		{d6-d7}, [r5, : 128]!
+	vld1.8		{d9}, [r5, : 64]
+	vld1.8		{d10-d11}, [r2, : 128]!
+	add		r5, sp, #384
+	vld1.8		{d12-d13}, [r2, : 128]!
+	vmul.i32	q7, q2, q0
+	vld1.8		{d8}, [r2, : 64]
+	vext.32		d17, d11, d10, #1
+	vmul.i32	q9, q3, q0
+	vext.32		d16, d10, d8, #1
+	vshl.u32	q10, q5, q1
+	vext.32		d22, d14, d4, #1
+	vext.32		d24, d18, d6, #1
+	vshl.u32	q13, q6, q1
+	vshl.u32	d28, d8, d2
+	vrev64.i32	d22, d22
+	vmul.i32	d1, d9, d1
+	vrev64.i32	d24, d24
+	vext.32		d29, d8, d13, #1
+	vext.32		d0, d1, d9, #1
+	vrev64.i32	d0, d0
+	vext.32		d2, d9, d1, #1
+	vext.32		d23, d15, d5, #1
+	vmull.s32	q4, d20, d4
+	vrev64.i32	d23, d23
+	vmlal.s32	q4, d21, d1
+	vrev64.i32	d2, d2
+	vmlal.s32	q4, d26, d19
+	vext.32		d3, d5, d15, #1
+	vmlal.s32	q4, d27, d18
+	vrev64.i32	d3, d3
+	vmlal.s32	q4, d28, d15
+	vext.32		d14, d12, d11, #1
+	vmull.s32	q5, d16, d23
+	vext.32		d15, d13, d12, #1
+	vmlal.s32	q5, d17, d4
+	vst1.8		d8, [r5, : 64]!
+	vmlal.s32	q5, d14, d1
+	vext.32		d12, d9, d8, #0
+	vmlal.s32	q5, d15, d19
+	vmov.i64	d13, #0
+	vmlal.s32	q5, d29, d18
+	vext.32		d25, d19, d7, #1
+	vmlal.s32	q6, d20, d5
+	vrev64.i32	d25, d25
+	vmlal.s32	q6, d21, d4
+	vst1.8		d11, [r5, : 64]!
+	vmlal.s32	q6, d26, d1
+	vext.32		d9, d10, d10, #0
+	vmlal.s32	q6, d27, d19
+	vmov.i64	d8, #0
+	vmlal.s32	q6, d28, d18
+	vmlal.s32	q4, d16, d24
+	vmlal.s32	q4, d17, d5
+	vmlal.s32	q4, d14, d4
+	vst1.8		d12, [r5, : 64]!
+	vmlal.s32	q4, d15, d1
+	vext.32		d10, d13, d12, #0
+	vmlal.s32	q4, d29, d19
+	vmov.i64	d11, #0
+	vmlal.s32	q5, d20, d6
+	vmlal.s32	q5, d21, d5
+	vmlal.s32	q5, d26, d4
+	vext.32		d13, d8, d8, #0
+	vmlal.s32	q5, d27, d1
+	vmov.i64	d12, #0
+	vmlal.s32	q5, d28, d19
+	vst1.8		d9, [r5, : 64]!
+	vmlal.s32	q6, d16, d25
+	vmlal.s32	q6, d17, d6
+	vst1.8		d10, [r5, : 64]
+	vmlal.s32	q6, d14, d5
+	vext.32		d8, d11, d10, #0
+	vmlal.s32	q6, d15, d4
+	vmov.i64	d9, #0
+	vmlal.s32	q6, d29, d1
+	vmlal.s32	q4, d20, d7
+	vmlal.s32	q4, d21, d6
+	vmlal.s32	q4, d26, d5
+	vext.32		d11, d12, d12, #0
+	vmlal.s32	q4, d27, d4
+	vmov.i64	d10, #0
+	vmlal.s32	q4, d28, d1
+	vmlal.s32	q5, d16, d0
+	sub		r2, r5, #32
+	vmlal.s32	q5, d17, d7
+	vmlal.s32	q5, d14, d6
+	vext.32		d30, d9, d8, #0
+	vmlal.s32	q5, d15, d5
+	vld1.8		{d31}, [r2, : 64]!
+	vmlal.s32	q5, d29, d4
+	vmlal.s32	q15, d20, d0
+	vext.32		d0, d6, d18, #1
+	vmlal.s32	q15, d21, d25
+	vrev64.i32	d0, d0
+	vmlal.s32	q15, d26, d24
+	vext.32		d1, d7, d19, #1
+	vext.32		d7, d10, d10, #0
+	vmlal.s32	q15, d27, d23
+	vrev64.i32	d1, d1
+	vld1.8		{d6}, [r2, : 64]
+	vmlal.s32	q15, d28, d22
+	vmlal.s32	q3, d16, d4
+	add		r2, r2, #24
+	vmlal.s32	q3, d17, d2
+	vext.32		d4, d31, d30, #0
+	vmov		d17, d11
+	vmlal.s32	q3, d14, d1
+	vext.32		d11, d13, d13, #0
+	vext.32		d13, d30, d30, #0
+	vmlal.s32	q3, d15, d0
+	vext.32		d1, d8, d8, #0
+	vmlal.s32	q3, d29, d3
+	vld1.8		{d5}, [r2, : 64]
+	sub		r2, r2, #16
+	vext.32		d10, d6, d6, #0
+	vmov.i32	q1, #0xffffffff
+	vshl.i64	q4, q1, #25
+	add		r5, sp, #480
+	vld1.8		{d14-d15}, [r5, : 128]
+	vadd.i64	q9, q2, q7
+	vshl.i64	q1, q1, #26
+	vshr.s64	q10, q9, #26
+	vld1.8		{d0}, [r2, : 64]!
+	vadd.i64	q5, q5, q10
+	vand		q9, q9, q1
+	vld1.8		{d16}, [r2, : 64]!
+	add		r2, sp, #496
+	vld1.8		{d20-d21}, [r2, : 128]
+	vadd.i64	q11, q5, q10
+	vsub.i64	q2, q2, q9
+	vshr.s64	q9, q11, #25
+	vext.32		d12, d5, d4, #0
+	vand		q11, q11, q4
+	vadd.i64	q0, q0, q9
+	vmov		d19, d7
+	vadd.i64	q3, q0, q7
+	vsub.i64	q5, q5, q11
+	vshr.s64	q11, q3, #26
+	vext.32		d18, d11, d10, #0
+	vand		q3, q3, q1
+	vadd.i64	q8, q8, q11
+	vadd.i64	q11, q8, q10
+	vsub.i64	q0, q0, q3
+	vshr.s64	q3, q11, #25
+	vand		q11, q11, q4
+	vadd.i64	q3, q6, q3
+	vadd.i64	q6, q3, q7
+	vsub.i64	q8, q8, q11
+	vshr.s64	q11, q6, #26
+	vand		q6, q6, q1
+	vadd.i64	q9, q9, q11
+	vadd.i64	d25, d19, d21
+	vsub.i64	q3, q3, q6
+	vshr.s64	d23, d25, #25
+	vand		q4, q12, q4
+	vadd.i64	d21, d23, d23
+	vshl.i64	d25, d23, #4
+	vadd.i64	d21, d21, d23
+	vadd.i64	d25, d25, d21
+	vadd.i64	d4, d4, d25
+	vzip.i32	q0, q8
+	vadd.i64	d12, d4, d14
+	add		r2, r6, #8
+	vst1.8		d0, [r2, : 64]
+	vsub.i64	d19, d19, d9
+	add		r2, r2, #16
+	vst1.8		d16, [r2, : 64]
+	vshr.s64	d22, d12, #26
+	vand		q0, q6, q1
+	vadd.i64	d10, d10, d22
+	vzip.i32	q3, q9
+	vsub.i64	d4, d4, d0
+	sub		r2, r2, #8
+	vst1.8		d6, [r2, : 64]
+	add		r2, r2, #16
+	vst1.8		d18, [r2, : 64]
+	vzip.i32	q2, q5
+	sub		r2, r2, #32
+	vst1.8		d4, [r2, : 64]
+	cmp		r4, #0
+	beq		.Lskippostcopy
+	add		r2, r3, #144
+	mov		r4, r4
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r4, : 128]!
+	vst1.8		{d2-d3}, [r4, : 128]!
+	vst1.8		d4, [r4, : 64]
+.Lskippostcopy:
+	cmp		r1, #1
+	bne		.Lskipfinalcopy
+	add		r2, r3, #288
+	add		r4, r3, #144
+	vld1.8		{d0-d1}, [r2, : 128]!
+	vld1.8		{d2-d3}, [r2, : 128]!
+	vld1.8		{d4}, [r2, : 64]
+	vst1.8		{d0-d1}, [r4, : 128]!
+	vst1.8		{d2-d3}, [r4, : 128]!
+	vst1.8		d4, [r4, : 64]
+.Lskipfinalcopy:
+	add		r1, r1, #1
+	cmp		r1, #12
+	blo		.Linvertloop
+	add		r1, r3, #144
+	ldr		r2, [r1], #4
+	ldr		r3, [r1], #4
+	ldr		r4, [r1], #4
+	ldr		r5, [r1], #4
+	ldr		r6, [r1], #4
+	ldr		r7, [r1], #4
+	ldr		r8, [r1], #4
+	ldr		r9, [r1], #4
+	ldr		r10, [r1], #4
+	ldr		r1, [r1]
+	add		r11, r1, r1, LSL #4
+	add		r11, r11, r1, LSL #1
+	add		r11, r11, #16777216
+	mov		r11, r11, ASR #25
+	add		r11, r11, r2
+	mov		r11, r11, ASR #26
+	add		r11, r11, r3
+	mov		r11, r11, ASR #25
+	add		r11, r11, r4
+	mov		r11, r11, ASR #26
+	add		r11, r11, r5
+	mov		r11, r11, ASR #25
+	add		r11, r11, r6
+	mov		r11, r11, ASR #26
+	add		r11, r11, r7
+	mov		r11, r11, ASR #25
+	add		r11, r11, r8
+	mov		r11, r11, ASR #26
+	add		r11, r11, r9
+	mov		r11, r11, ASR #25
+	add		r11, r11, r10
+	mov		r11, r11, ASR #26
+	add		r11, r11, r1
+	mov		r11, r11, ASR #25
+	add		r2, r2, r11
+	add		r2, r2, r11, LSL #1
+	add		r2, r2, r11, LSL #4
+	mov		r11, r2, ASR #26
+	add		r3, r3, r11
+	sub		r2, r2, r11, LSL #26
+	mov		r11, r3, ASR #25
+	add		r4, r4, r11
+	sub		r3, r3, r11, LSL #25
+	mov		r11, r4, ASR #26
+	add		r5, r5, r11
+	sub		r4, r4, r11, LSL #26
+	mov		r11, r5, ASR #25
+	add		r6, r6, r11
+	sub		r5, r5, r11, LSL #25
+	mov		r11, r6, ASR #26
+	add		r7, r7, r11
+	sub		r6, r6, r11, LSL #26
+	mov		r11, r7, ASR #25
+	add		r8, r8, r11
+	sub		r7, r7, r11, LSL #25
+	mov		r11, r8, ASR #26
+	add		r9, r9, r11
+	sub		r8, r8, r11, LSL #26
+	mov		r11, r9, ASR #25
+	add		r10, r10, r11
+	sub		r9, r9, r11, LSL #25
+	mov		r11, r10, ASR #26
+	add		r1, r1, r11
+	sub		r10, r10, r11, LSL #26
+	mov		r11, r1, ASR #25
+	sub		r1, r1, r11, LSL #25
+	add		r2, r2, r3, LSL #26
+	mov		r3, r3, LSR #6
+	add		r3, r3, r4, LSL #19
+	mov		r4, r4, LSR #13
+	add		r4, r4, r5, LSL #13
+	mov		r5, r5, LSR #19
+	add		r5, r5, r6, LSL #6
+	add		r6, r7, r8, LSL #25
+	mov		r7, r8, LSR #7
+	add		r7, r7, r9, LSL #19
+	mov		r8, r9, LSR #13
+	add		r8, r8, r10, LSL #12
+	mov		r9, r10, LSR #20
+	add		r1, r9, r1, LSL #6
+	str		r2, [r0]
+	str		r3, [r0, #4]
+	str		r4, [r0, #8]
+	str		r5, [r0, #12]
+	str		r6, [r0, #16]
+	str		r7, [r0, #20]
+	str		r8, [r0, #24]
+	str		r1, [r0, #28]
+	movw		r0, #0
+	mov		sp, ip
+	pop		{r4-r11, pc}
+ENDPROC(curve25519_neon)
diff --git a/arch/arm/crypto/curve25519-glue.c b/arch/arm/crypto/curve25519-glue.c
new file mode 100644
index 0000000..31eb75b
--- /dev/null
+++ b/arch/arm/crypto/curve25519-glue.c
@@ -0,0 +1,136 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Based on public domain code from Daniel J. Bernstein and Peter Schwabe. This
+ * began from SUPERCOP's curve25519/neon2/scalarmult.s, but has subsequently been
+ * manually reworked for use in kernel space.
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <crypto/internal/kpp.h>
+#include <crypto/internal/simd.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/jump_label.h>
+#include <linux/scatterlist.h>
+#include <crypto/curve25519.h>
+
+asmlinkage void curve25519_neon(u8 mypublic[CURVE25519_KEY_SIZE],
+				const u8 secret[CURVE25519_KEY_SIZE],
+				const u8 basepoint[CURVE25519_KEY_SIZE]);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void curve25519_arch(u8 out[CURVE25519_KEY_SIZE],
+		     const u8 scalar[CURVE25519_KEY_SIZE],
+		     const u8 point[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
+		kernel_neon_begin();
+		curve25519_neon(out, scalar, point);
+		kernel_neon_end();
+	} else {
+		curve25519_generic(out, scalar, point);
+	}
+}
+EXPORT_SYMBOL(curve25519_arch);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE])
+{
+	return curve25519_arch(pub, secret, curve25519_base_point);
+}
+EXPORT_SYMBOL(curve25519_base_arch);
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_value(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+	u8 const *bp;
+
+	if (req->src) {
+		copied = sg_copy_to_buffer(req->src,
+					   sg_nents_for_len(req->src,
+							    CURVE25519_KEY_SIZE),
+					   public_key, CURVE25519_KEY_SIZE);
+		if (copied != CURVE25519_KEY_SIZE)
+			return -EINVAL;
+		bp = public_key;
+	} else {
+		bp = curve25519_base_point;
+	}
+
+	curve25519_arch(buf, secret, bp);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-neon",
+	.base.cra_priority	= 200,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_compute_value,
+	.compute_shared_secret	= curve25519_compute_value,
+	.max_size		= curve25519_max_size,
+};
+
+static int __init mod_init(void)
+{
+	if (elf_hwcap & HWCAP_NEON) {
+		static_branch_enable(&have_neon);
+		return IS_REACHABLE(CONFIG_CRYPTO_KPP) ?
+			crypto_register_kpp(&curve25519_alg) : 0;
+	}
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_KPP) && elf_hwcap & HWCAP_NEON)
+		crypto_unregister_kpp(&curve25519_alg);
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-neon");
+MODULE_LICENSE("GPL v2");
diff --git a/arch/arm/crypto/ghash-ce-core.S b/arch/arm/crypto/ghash-ce-core.S
index c47fe81..9f51e3f 100644
--- a/arch/arm/crypto/ghash-ce-core.S
+++ b/arch/arm/crypto/ghash-ce-core.S
@@ -8,6 +8,9 @@
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 
+	.arch		armv8-a
+	.fpu		crypto-neon-fp-armv8
+
 	SHASH		.req	q0
 	T1		.req	q1
 	XL		.req	q2
@@ -88,7 +91,6 @@
 	T3_H		.req	d17
 
 	.text
-	.fpu		crypto-neon-fp-armv8
 
 	.macro		__pmull_p64, rd, rn, rm, b1, b2, b3, b4
 	vmull.p64	\rd, \rn, \rm
diff --git a/arch/arm/crypto/poly1305-armv4.pl b/arch/arm/crypto/poly1305-armv4.pl
new file mode 100644
index 0000000..6d79498
--- /dev/null
+++ b/arch/arm/crypto/poly1305-armv4.pl
@@ -0,0 +1,1236 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, initially for the OpenSSL
+# project.
+# ====================================================================
+#
+#			IALU(*)/gcc-4.4		NEON
+#
+# ARM11xx(ARMv6)	7.78/+100%		-
+# Cortex-A5		6.35/+130%		3.00
+# Cortex-A8		6.25/+115%		2.36
+# Cortex-A9		5.10/+95%		2.55
+# Cortex-A15		3.85/+85%		1.25(**)
+# Snapdragon S4		5.70/+100%		1.48(**)
+#
+# (*)	this is for -march=armv6, i.e. with bunch of ldrb loading data;
+# (**)	these are trade-off results, they can be improved by ~8% but at
+#	the cost of 15/12% regression on Cortex-A5/A7, it's even possible
+#	to improve Cortex-A9 result, but then A5/A7 loose more than 20%;
+
+$flavour = shift;
+if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
+else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
+
+if ($flavour && $flavour ne "void") {
+    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
+    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
+    die "can't locate arm-xlate.pl";
+
+    open STDOUT,"| \"$^X\" $xlate $flavour $output";
+} else {
+    open STDOUT,">$output";
+}
+
+($ctx,$inp,$len,$padbit)=map("r$_",(0..3));
+
+$code.=<<___;
+#ifndef	__KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ __LINUX_ARM_ARCH__
+# define poly1305_init   poly1305_init_arm
+# define poly1305_blocks poly1305_blocks_arm
+# define poly1305_emit   poly1305_emit_arm
+.globl	poly1305_blocks_neon
+#endif
+
+#if defined(__thumb2__)
+.syntax	unified
+.thumb
+#else
+.code	32
+#endif
+
+.text
+
+.globl	poly1305_emit
+.globl	poly1305_blocks
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+.Lpoly1305_init:
+	stmdb	sp!,{r4-r11}
+
+	eor	r3,r3,r3
+	cmp	$inp,#0
+	str	r3,[$ctx,#0]		@ zero hash value
+	str	r3,[$ctx,#4]
+	str	r3,[$ctx,#8]
+	str	r3,[$ctx,#12]
+	str	r3,[$ctx,#16]
+	str	r3,[$ctx,#36]		@ clear is_base2_26
+	add	$ctx,$ctx,#20
+
+#ifdef	__thumb2__
+	it	eq
+#endif
+	moveq	r0,#0
+	beq	.Lno_key
+
+#if	__ARM_MAX_ARCH__>=7
+	mov	r3,#-1
+	str	r3,[$ctx,#28]		@ impossible key power value
+# ifndef __KERNEL__
+	adr	r11,.Lpoly1305_init
+	ldr	r12,.LOPENSSL_armcap
+# endif
+#endif
+	ldrb	r4,[$inp,#0]
+	mov	r10,#0x0fffffff
+	ldrb	r5,[$inp,#1]
+	and	r3,r10,#-4		@ 0x0ffffffc
+	ldrb	r6,[$inp,#2]
+	ldrb	r7,[$inp,#3]
+	orr	r4,r4,r5,lsl#8
+	ldrb	r5,[$inp,#4]
+	orr	r4,r4,r6,lsl#16
+	ldrb	r6,[$inp,#5]
+	orr	r4,r4,r7,lsl#24
+	ldrb	r7,[$inp,#6]
+	and	r4,r4,r10
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+# if !defined(_WIN32)
+	ldr	r12,[r11,r12]		@ OPENSSL_armcap_P
+# endif
+# if defined(__APPLE__) || defined(_WIN32)
+	ldr	r12,[r12]
+# endif
+#endif
+	ldrb	r8,[$inp,#7]
+	orr	r5,r5,r6,lsl#8
+	ldrb	r6,[$inp,#8]
+	orr	r5,r5,r7,lsl#16
+	ldrb	r7,[$inp,#9]
+	orr	r5,r5,r8,lsl#24
+	ldrb	r8,[$inp,#10]
+	and	r5,r5,r3
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	tst	r12,#ARMV7_NEON		@ check for NEON
+# ifdef	__thumb2__
+	adr	r9,.Lpoly1305_blocks_neon
+	adr	r11,.Lpoly1305_blocks
+	it	ne
+	movne	r11,r9
+	adr	r12,.Lpoly1305_emit
+	orr	r11,r11,#1		@ thumb-ify addresses
+	orr	r12,r12,#1
+# else
+	add	r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init)
+	ite	eq
+	addeq	r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init)
+	addne	r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init)
+# endif
+#endif
+	ldrb	r9,[$inp,#11]
+	orr	r6,r6,r7,lsl#8
+	ldrb	r7,[$inp,#12]
+	orr	r6,r6,r8,lsl#16
+	ldrb	r8,[$inp,#13]
+	orr	r6,r6,r9,lsl#24
+	ldrb	r9,[$inp,#14]
+	and	r6,r6,r3
+
+	ldrb	r10,[$inp,#15]
+	orr	r7,r7,r8,lsl#8
+	str	r4,[$ctx,#0]
+	orr	r7,r7,r9,lsl#16
+	str	r5,[$ctx,#4]
+	orr	r7,r7,r10,lsl#24
+	str	r6,[$ctx,#8]
+	and	r7,r7,r3
+	str	r7,[$ctx,#12]
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	stmia	r2,{r11,r12}		@ fill functions table
+	mov	r0,#1
+#else
+	mov	r0,#0
+#endif
+.Lno_key:
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	ret				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_init,.-poly1305_init
+___
+{
+my ($h0,$h1,$h2,$h3,$h4,$r0,$r1,$r2,$r3)=map("r$_",(4..12));
+my ($s1,$s2,$s3)=($r1,$r2,$r3);
+
+$code.=<<___;
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	stmdb	sp!,{r3-r11,lr}
+
+	ands	$len,$len,#-16
+	beq	.Lno_data
+
+	add	$len,$len,$inp		@ end pointer
+	sub	sp,sp,#32
+
+#if __ARM_ARCH__<7
+	ldmia	$ctx,{$h0-$r3}		@ load context
+	add	$ctx,$ctx,#20
+	str	$len,[sp,#16]		@ offload stuff
+	str	$ctx,[sp,#12]
+#else
+	ldr	lr,[$ctx,#36]		@ is_base2_26
+	ldmia	$ctx!,{$h0-$h4}		@ load hash value
+	str	$len,[sp,#16]		@ offload stuff
+	str	$ctx,[sp,#12]
+
+	adds	$r0,$h0,$h1,lsl#26	@ base 2^26 -> base 2^32
+	mov	$r1,$h1,lsr#6
+	adcs	$r1,$r1,$h2,lsl#20
+	mov	$r2,$h2,lsr#12
+	adcs	$r2,$r2,$h3,lsl#14
+	mov	$r3,$h3,lsr#18
+	adcs	$r3,$r3,$h4,lsl#8
+	mov	$len,#0
+	teq	lr,#0
+	str	$len,[$ctx,#16]		@ clear is_base2_26
+	adc	$len,$len,$h4,lsr#24
+
+	itttt	ne
+	movne	$h0,$r0			@ choose between radixes
+	movne	$h1,$r1
+	movne	$h2,$r2
+	movne	$h3,$r3
+	ldmia	$ctx,{$r0-$r3}		@ load key
+	it	ne
+	movne	$h4,$len
+#endif
+
+	mov	lr,$inp
+	cmp	$padbit,#0
+	str	$r1,[sp,#20]
+	str	$r2,[sp,#24]
+	str	$r3,[sp,#28]
+	b	.Loop
+
+.align	4
+.Loop:
+#if __ARM_ARCH__<7
+	ldrb	r0,[lr],#16		@ load input
+# ifdef	__thumb2__
+	it	hi
+# endif
+	addhi	$h4,$h4,#1		@ 1<<128
+	ldrb	r1,[lr,#-15]
+	ldrb	r2,[lr,#-14]
+	ldrb	r3,[lr,#-13]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-12]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-11]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-10]
+	adds	$h0,$h0,r3		@ accumulate input
+
+	ldrb	r3,[lr,#-9]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-8]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-7]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-6]
+	adcs	$h1,$h1,r3
+
+	ldrb	r3,[lr,#-5]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-4]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-3]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-2]
+	adcs	$h2,$h2,r3
+
+	ldrb	r3,[lr,#-1]
+	orr	r1,r0,r1,lsl#8
+	str	lr,[sp,#8]		@ offload input pointer
+	orr	r2,r1,r2,lsl#16
+	add	$s1,$r1,$r1,lsr#2
+	orr	r3,r2,r3,lsl#24
+#else
+	ldr	r0,[lr],#16		@ load input
+	it	hi
+	addhi	$h4,$h4,#1		@ padbit
+	ldr	r1,[lr,#-12]
+	ldr	r2,[lr,#-8]
+	ldr	r3,[lr,#-4]
+# ifdef	__ARMEB__
+	rev	r0,r0
+	rev	r1,r1
+	rev	r2,r2
+	rev	r3,r3
+# endif
+	adds	$h0,$h0,r0		@ accumulate input
+	str	lr,[sp,#8]		@ offload input pointer
+	adcs	$h1,$h1,r1
+	add	$s1,$r1,$r1,lsr#2
+	adcs	$h2,$h2,r2
+#endif
+	add	$s2,$r2,$r2,lsr#2
+	adcs	$h3,$h3,r3
+	add	$s3,$r3,$r3,lsr#2
+
+	umull	r2,r3,$h1,$r0
+	 adc	$h4,$h4,#0
+	umull	r0,r1,$h0,$r0
+	umlal	r2,r3,$h4,$s1
+	umlal	r0,r1,$h3,$s1
+	ldr	$r1,[sp,#20]		@ reload $r1
+	umlal	r2,r3,$h2,$s3
+	umlal	r0,r1,$h1,$s3
+	umlal	r2,r3,$h3,$s2
+	umlal	r0,r1,$h2,$s2
+	umlal	r2,r3,$h0,$r1
+	str	r0,[sp,#0]		@ future $h0
+	 mul	r0,$s2,$h4
+	ldr	$r2,[sp,#24]		@ reload $r2
+	adds	r2,r2,r1		@ d1+=d0>>32
+	 eor	r1,r1,r1
+	adc	lr,r3,#0		@ future $h2
+	str	r2,[sp,#4]		@ future $h1
+
+	mul	r2,$s3,$h4
+	eor	r3,r3,r3
+	umlal	r0,r1,$h3,$s3
+	ldr	$r3,[sp,#28]		@ reload $r3
+	umlal	r2,r3,$h3,$r0
+	umlal	r0,r1,$h2,$r0
+	umlal	r2,r3,$h2,$r1
+	umlal	r0,r1,$h1,$r1
+	umlal	r2,r3,$h1,$r2
+	umlal	r0,r1,$h0,$r2
+	umlal	r2,r3,$h0,$r3
+	ldr	$h0,[sp,#0]
+	mul	$h4,$r0,$h4
+	ldr	$h1,[sp,#4]
+
+	adds	$h2,lr,r0		@ d2+=d1>>32
+	ldr	lr,[sp,#8]		@ reload input pointer
+	adc	r1,r1,#0
+	adds	$h3,r2,r1		@ d3+=d2>>32
+	ldr	r0,[sp,#16]		@ reload end pointer
+	adc	r3,r3,#0
+	add	$h4,$h4,r3		@ h4+=d3>>32
+
+	and	r1,$h4,#-4
+	and	$h4,$h4,#3
+	add	r1,r1,r1,lsr#2		@ *=5
+	adds	$h0,$h0,r1
+	adcs	$h1,$h1,#0
+	adcs	$h2,$h2,#0
+	adcs	$h3,$h3,#0
+	adc	$h4,$h4,#0
+
+	cmp	r0,lr			@ done yet?
+	bhi	.Loop
+
+	ldr	$ctx,[sp,#12]
+	add	sp,sp,#32
+	stmdb	$ctx,{$h0-$h4}		@ store the result
+
+.Lno_data:
+#if	__ARM_ARCH__>=5
+	ldmia	sp!,{r3-r11,pc}
+#else
+	ldmia	sp!,{r3-r11,lr}
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_blocks,.-poly1305_blocks
+___
+}
+{
+my ($ctx,$mac,$nonce)=map("r$_",(0..2));
+my ($h0,$h1,$h2,$h3,$h4,$g0,$g1,$g2,$g3)=map("r$_",(3..11));
+my $g4=$ctx;
+
+$code.=<<___;
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	stmdb	sp!,{r4-r11}
+
+	ldmia	$ctx,{$h0-$h4}
+
+#if __ARM_ARCH__>=7
+	ldr	ip,[$ctx,#36]		@ is_base2_26
+
+	adds	$g0,$h0,$h1,lsl#26	@ base 2^26 -> base 2^32
+	mov	$g1,$h1,lsr#6
+	adcs	$g1,$g1,$h2,lsl#20
+	mov	$g2,$h2,lsr#12
+	adcs	$g2,$g2,$h3,lsl#14
+	mov	$g3,$h3,lsr#18
+	adcs	$g3,$g3,$h4,lsl#8
+	mov	$g4,#0
+	adc	$g4,$g4,$h4,lsr#24
+
+	tst	ip,ip
+	itttt	ne
+	movne	$h0,$g0
+	movne	$h1,$g1
+	movne	$h2,$g2
+	movne	$h3,$g3
+	it	ne
+	movne	$h4,$g4
+#endif
+
+	adds	$g0,$h0,#5		@ compare to modulus
+	adcs	$g1,$h1,#0
+	adcs	$g2,$h2,#0
+	adcs	$g3,$h3,#0
+	adc	$g4,$h4,#0
+	tst	$g4,#4			@ did it carry/borrow?
+
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h0,$g0
+	ldr	$g0,[$nonce,#0]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h1,$g1
+	ldr	$g1,[$nonce,#4]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h2,$g2
+	ldr	$g2,[$nonce,#8]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	$h3,$g3
+	ldr	$g3,[$nonce,#12]
+
+	adds	$h0,$h0,$g0
+	adcs	$h1,$h1,$g1
+	adcs	$h2,$h2,$g2
+	adc	$h3,$h3,$g3
+
+#if __ARM_ARCH__>=7
+# ifdef __ARMEB__
+	rev	$h0,$h0
+	rev	$h1,$h1
+	rev	$h2,$h2
+	rev	$h3,$h3
+# endif
+	str	$h0,[$mac,#0]
+	str	$h1,[$mac,#4]
+	str	$h2,[$mac,#8]
+	str	$h3,[$mac,#12]
+#else
+	strb	$h0,[$mac,#0]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#4]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#8]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#12]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#1]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#5]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#9]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#13]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#2]
+	mov	$h0,$h0,lsr#8
+	strb	$h1,[$mac,#6]
+	mov	$h1,$h1,lsr#8
+	strb	$h2,[$mac,#10]
+	mov	$h2,$h2,lsr#8
+	strb	$h3,[$mac,#14]
+	mov	$h3,$h3,lsr#8
+
+	strb	$h0,[$mac,#3]
+	strb	$h1,[$mac,#7]
+	strb	$h2,[$mac,#11]
+	strb	$h3,[$mac,#15]
+#endif
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	ret				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	bx	lr			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_emit,.-poly1305_emit
+___
+{
+my ($R0,$R1,$S1,$R2,$S2,$R3,$S3,$R4,$S4) = map("d$_",(0..9));
+my ($D0,$D1,$D2,$D3,$D4, $H0,$H1,$H2,$H3,$H4) = map("q$_",(5..14));
+my ($T0,$T1,$MASK) = map("q$_",(15,4,0));
+
+my ($in2,$zeros,$tbl0,$tbl1) = map("r$_",(4..7));
+
+$code.=<<___;
+#if	__ARM_MAX_ARCH__>=7
+.fpu	neon
+
+.type	poly1305_init_neon,%function
+.align	5
+poly1305_init_neon:
+.Lpoly1305_init_neon:
+	ldr	r3,[$ctx,#48]		@ first table element
+	cmp	r3,#-1			@ is value impossible?
+	bne	.Lno_init_neon
+
+	ldr	r4,[$ctx,#20]		@ load key base 2^32
+	ldr	r5,[$ctx,#24]
+	ldr	r6,[$ctx,#28]
+	ldr	r7,[$ctx,#32]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	and	r3,r3,#0x03ffffff
+	and	r4,r4,#0x03ffffff
+	and	r5,r5,#0x03ffffff
+
+	vdup.32	$R0,r2			@ r^1 in both lanes
+	add	r2,r3,r3,lsl#2		@ *5
+	vdup.32	$R1,r3
+	add	r3,r4,r4,lsl#2
+	vdup.32	$S1,r2
+	vdup.32	$R2,r4
+	add	r4,r5,r5,lsl#2
+	vdup.32	$S2,r3
+	vdup.32	$R3,r5
+	add	r5,r6,r6,lsl#2
+	vdup.32	$S3,r4
+	vdup.32	$R4,r6
+	vdup.32	$S4,r5
+
+	mov	$zeros,#2		@ counter
+
+.Lsquare_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+
+	vmull.u32	$D0,$R0,${R0}[1]
+	vmull.u32	$D1,$R1,${R0}[1]
+	vmull.u32	$D2,$R2,${R0}[1]
+	vmull.u32	$D3,$R3,${R0}[1]
+	vmull.u32	$D4,$R4,${R0}[1]
+
+	vmlal.u32	$D0,$R4,${S1}[1]
+	vmlal.u32	$D1,$R0,${R1}[1]
+	vmlal.u32	$D2,$R1,${R1}[1]
+	vmlal.u32	$D3,$R2,${R1}[1]
+	vmlal.u32	$D4,$R3,${R1}[1]
+
+	vmlal.u32	$D0,$R3,${S2}[1]
+	vmlal.u32	$D1,$R4,${S2}[1]
+	vmlal.u32	$D3,$R1,${R2}[1]
+	vmlal.u32	$D2,$R0,${R2}[1]
+	vmlal.u32	$D4,$R2,${R2}[1]
+
+	vmlal.u32	$D0,$R2,${S3}[1]
+	vmlal.u32	$D3,$R0,${R3}[1]
+	vmlal.u32	$D1,$R3,${S3}[1]
+	vmlal.u32	$D2,$R4,${S3}[1]
+	vmlal.u32	$D4,$R1,${R3}[1]
+
+	vmlal.u32	$D3,$R4,${S4}[1]
+	vmlal.u32	$D0,$R1,${S4}[1]
+	vmlal.u32	$D1,$R2,${S4}[1]
+	vmlal.u32	$D2,$R3,${S4}[1]
+	vmlal.u32	$D4,$R0,${R4}[1]
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	@ and P. Schwabe
+	@
+	@ H0>>+H1>>+H2>>+H3>>+H4
+	@ H3>>+H4>>*5+H0>>+H1
+	@
+	@ Trivia.
+	@
+	@ Result of multiplication of n-bit number by m-bit number is
+	@ n+m bits wide. However! Even though 2^n is a n+1-bit number,
+	@ m-bit number multiplied by 2^n is still n+m bits wide.
+	@
+	@ Sum of two n-bit numbers is n+1 bits wide, sum of three - n+2,
+	@ and so is sum of four. Sum of 2^m n-m-bit numbers and n-bit
+	@ one is n+1 bits wide.
+	@
+	@ >>+ denotes Hnext += Hn>>26, Hn &= 0x3ffffff. This means that
+	@ H0, H2, H3 are guaranteed to be 26 bits wide, while H1 and H4
+	@ can be 27. However! In cases when their width exceeds 26 bits
+	@ they are limited by 2^26+2^6. This in turn means that *sum*
+	@ of the products with these values can still be viewed as sum
+	@ of 52-bit numbers as long as the amount of addends is not a
+	@ power of 2. For example,
+	@
+	@ H4 = H4*R0 + H3*R1 + H2*R2 + H1*R3 + H0 * R4,
+	@
+	@ which can't be larger than 5 * (2^26 + 2^6) * (2^26 + 2^6), or
+	@ 5 * (2^52 + 2*2^32 + 2^12), which in turn is smaller than
+	@ 8 * (2^52) or 2^55. However, the value is then multiplied by
+	@ by 5, so we should be looking at 5 * 5 * (2^52 + 2^33 + 2^12),
+	@ which is less than 32 * (2^52) or 2^57. And when processing
+	@ data we are looking at triple as many addends...
+	@
+	@ In key setup procedure pre-reduced H0 is limited by 5*4+1 and
+	@ 5*H4 - by 5*5 52-bit addends, or 57 bits. But when hashing the
+	@ input H0 is limited by (5*4+1)*3 addends, or 58 bits, while
+	@ 5*H4 by 5*5*3, or 59[!] bits. How is this relevant? vmlal.u32
+	@ instruction accepts 2x32-bit input and writes 2x64-bit result.
+	@ This means that result of reduction have to be compressed upon
+	@ loop wrap-around. This can be done in the process of reduction
+	@ to minimize amount of instructions [as well as amount of
+	@ 128-bit instructions, which benefits low-end processors], but
+	@ one has to watch for H2 (which is narrower than H0) and 5*H4
+	@ not being wider than 58 bits, so that result of right shift
+	@ by 26 bits fits in 32 bits. This is also useful on x86,
+	@ because it allows to use paddd in place for paddq, which
+	@ benefits Atom, where paddq is ridiculously slow.
+
+	vshr.u64	$T0,$D3,#26
+	vmovn.i64	$D3#lo,$D3
+	 vshr.u64	$T1,$D0,#26
+	 vmovn.i64	$D0#lo,$D0
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	vbic.i32	$D3#lo,#0xfc000000	@ &=0x03ffffff
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+	 vbic.i32	$D0#lo,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D4,#26
+	vmovn.i64	$D4#lo,$D4
+	 vshr.u64	$T1,$D1,#26
+	 vmovn.i64	$D1#lo,$D1
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+	vbic.i32	$D4#lo,#0xfc000000
+	 vbic.i32	$D1#lo,#0xfc000000
+
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo
+	vshl.u32	$T0#lo,$T0#lo,#2
+	 vshrn.u64	$T1#lo,$D2,#26
+	 vmovn.i64	$D2#lo,$D2
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo	@ h4 -> h0
+	 vadd.i32	$D3#lo,$D3#lo,$T1#lo	@ h2 -> h3
+	 vbic.i32	$D2#lo,#0xfc000000
+
+	vshr.u32	$T0#lo,$D0#lo,#26
+	vbic.i32	$D0#lo,#0xfc000000
+	 vshr.u32	$T1#lo,$D3#lo,#26
+	 vbic.i32	$D3#lo,#0xfc000000
+	vadd.i32	$D1#lo,$D1#lo,$T0#lo	@ h0 -> h1
+	 vadd.i32	$D4#lo,$D4#lo,$T1#lo	@ h3 -> h4
+
+	subs		$zeros,$zeros,#1
+	beq		.Lsquare_break_neon
+
+	add		$tbl0,$ctx,#(48+0*9*4)
+	add		$tbl1,$ctx,#(48+1*9*4)
+
+	vtrn.32		$R0,$D0#lo		@ r^2:r^1
+	vtrn.32		$R2,$D2#lo
+	vtrn.32		$R3,$D3#lo
+	vtrn.32		$R1,$D1#lo
+	vtrn.32		$R4,$D4#lo
+
+	vshl.u32	$S2,$R2,#2		@ *5
+	vshl.u32	$S3,$R3,#2
+	vshl.u32	$S1,$R1,#2
+	vshl.u32	$S4,$R4,#2
+	vadd.i32	$S2,$S2,$R2
+	vadd.i32	$S1,$S1,$R1
+	vadd.i32	$S3,$S3,$R3
+	vadd.i32	$S4,$S4,$R4
+
+	vst4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!
+	vst4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!
+	vst4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vst4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vst1.32		{${S4}[0]},[$tbl0,:32]
+	vst1.32		{${S4}[1]},[$tbl1,:32]
+
+	b		.Lsquare_neon
+
+.align	4
+.Lsquare_break_neon:
+	add		$tbl0,$ctx,#(48+2*4*9)
+	add		$tbl1,$ctx,#(48+3*4*9)
+
+	vmov		$R0,$D0#lo		@ r^4:r^3
+	vshl.u32	$S1,$D1#lo,#2		@ *5
+	vmov		$R1,$D1#lo
+	vshl.u32	$S2,$D2#lo,#2
+	vmov		$R2,$D2#lo
+	vshl.u32	$S3,$D3#lo,#2
+	vmov		$R3,$D3#lo
+	vshl.u32	$S4,$D4#lo,#2
+	vmov		$R4,$D4#lo
+	vadd.i32	$S1,$S1,$D1#lo
+	vadd.i32	$S2,$S2,$D2#lo
+	vadd.i32	$S3,$S3,$D3#lo
+	vadd.i32	$S4,$S4,$D4#lo
+
+	vst4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!
+	vst4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!
+	vst4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vst4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vst1.32		{${S4}[0]},[$tbl0]
+	vst1.32		{${S4}[1]},[$tbl1]
+
+.Lno_init_neon:
+	ret				@ bx	lr
+.size	poly1305_init_neon,.-poly1305_init_neon
+
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	ip,[$ctx,#36]		@ is_base2_26
+
+	cmp	$len,#64
+	blo	.Lpoly1305_blocks
+
+	stmdb	sp!,{r4-r7}
+	vstmdb	sp!,{d8-d15}		@ ABI specification says so
+
+	tst	ip,ip			@ is_base2_26?
+	bne	.Lbase2_26_neon
+
+	stmdb	sp!,{r1-r3,lr}
+	bl	.Lpoly1305_init_neon
+
+	ldr	r4,[$ctx,#0]		@ load hash value base 2^32
+	ldr	r5,[$ctx,#4]
+	ldr	r6,[$ctx,#8]
+	ldr	r7,[$ctx,#12]
+	ldr	ip,[$ctx,#16]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	 veor	$D0#lo,$D0#lo,$D0#lo
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	 veor	$D1#lo,$D1#lo,$D1#lo
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	 veor	$D2#lo,$D2#lo,$D2#lo
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	 veor	$D3#lo,$D3#lo,$D3#lo
+	and	r3,r3,#0x03ffffff
+	orr	r6,r6,ip,lsl#24
+	 veor	$D4#lo,$D4#lo,$D4#lo
+	and	r4,r4,#0x03ffffff
+	mov	r1,#1
+	and	r5,r5,#0x03ffffff
+	str	r1,[$ctx,#36]		@ set is_base2_26
+
+	vmov.32	$D0#lo[0],r2
+	vmov.32	$D1#lo[0],r3
+	vmov.32	$D2#lo[0],r4
+	vmov.32	$D3#lo[0],r5
+	vmov.32	$D4#lo[0],r6
+	adr	$zeros,.Lzeros
+
+	ldmia	sp!,{r1-r3,lr}
+	b	.Lhash_loaded
+
+.align	4
+.Lbase2_26_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ load hash value
+
+	veor		$D0#lo,$D0#lo,$D0#lo
+	veor		$D1#lo,$D1#lo,$D1#lo
+	veor		$D2#lo,$D2#lo,$D2#lo
+	veor		$D3#lo,$D3#lo,$D3#lo
+	veor		$D4#lo,$D4#lo,$D4#lo
+	vld4.32		{$D0#lo[0],$D1#lo[0],$D2#lo[0],$D3#lo[0]},[$ctx]!
+	adr		$zeros,.Lzeros
+	vld1.32		{$D4#lo[0]},[$ctx]
+	sub		$ctx,$ctx,#16		@ rewind
+
+.Lhash_loaded:
+	add		$in2,$inp,#32
+	mov		$padbit,$padbit,lsl#24
+	tst		$len,#31
+	beq		.Leven
+
+	vld4.32		{$H0#lo[0],$H1#lo[0],$H2#lo[0],$H3#lo[0]},[$inp]!
+	vmov.32		$H4#lo[0],$padbit
+	sub		$len,$len,#16
+	add		$in2,$inp,#32
+
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H3,$H3
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+# endif
+	vsri.u32	$H4#lo,$H3#lo,#8	@ base 2^32 -> base 2^26
+	vshl.u32	$H3#lo,$H3#lo,#18
+
+	vsri.u32	$H3#lo,$H2#lo,#14
+	vshl.u32	$H2#lo,$H2#lo,#12
+	vadd.i32	$H4#hi,$H4#lo,$D4#lo	@ add hash value and move to #hi
+
+	vbic.i32	$H3#lo,#0xfc000000
+	vsri.u32	$H2#lo,$H1#lo,#20
+	vshl.u32	$H1#lo,$H1#lo,#6
+
+	vbic.i32	$H2#lo,#0xfc000000
+	vsri.u32	$H1#lo,$H0#lo,#26
+	vadd.i32	$H3#hi,$H3#lo,$D3#lo
+
+	vbic.i32	$H0#lo,#0xfc000000
+	vbic.i32	$H1#lo,#0xfc000000
+	vadd.i32	$H2#hi,$H2#lo,$D2#lo
+
+	vadd.i32	$H0#hi,$H0#lo,$D0#lo
+	vadd.i32	$H1#hi,$H1#lo,$D1#lo
+
+	mov		$tbl1,$zeros
+	add		$tbl0,$ctx,#48
+
+	cmp		$len,$len
+	b		.Long_tail
+
+.align	4
+.Leven:
+	subs		$len,$len,#64
+	it		lo
+	movlo		$in2,$zeros
+
+	vmov.i32	$H4,#1<<24		@ padbit, yes, always
+	vld4.32		{$H0#lo,$H1#lo,$H2#lo,$H3#lo},[$inp]	@ inp[0:1]
+	add		$inp,$inp,#64
+	vld4.32		{$H0#hi,$H1#hi,$H2#hi,$H3#hi},[$in2]	@ inp[2:3] (or 0)
+	add		$in2,$in2,#64
+	itt		hi
+	addhi		$tbl1,$ctx,#(48+1*9*4)
+	addhi		$tbl0,$ctx,#(48+3*9*4)
+
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H3,$H3
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+# endif
+	vsri.u32	$H4,$H3,#8		@ base 2^32 -> base 2^26
+	vshl.u32	$H3,$H3,#18
+
+	vsri.u32	$H3,$H2,#14
+	vshl.u32	$H2,$H2,#12
+
+	vbic.i32	$H3,#0xfc000000
+	vsri.u32	$H2,$H1,#20
+	vshl.u32	$H1,$H1,#6
+
+	vbic.i32	$H2,#0xfc000000
+	vsri.u32	$H1,$H0,#26
+
+	vbic.i32	$H0,#0xfc000000
+	vbic.i32	$H1,#0xfc000000
+
+	bls		.Lskip_loop
+
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^2
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^4
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	b		.Loop_neon
+
+.align	5
+.Loop_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	@   \___________________/
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	@   \___________________/ \____________________/
+	@
+	@ Note that we start with inp[2:3]*r^2. This is because it
+	@ doesn't depend on reduction in previous iteration.
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ inp[2:3]*r^2
+
+	vadd.i32	$H2#lo,$H2#lo,$D2#lo	@ accumulate inp[0:1]
+	vmull.u32	$D2,$H2#hi,${R0}[1]
+	vadd.i32	$H0#lo,$H0#lo,$D0#lo
+	vmull.u32	$D0,$H0#hi,${R0}[1]
+	vadd.i32	$H3#lo,$H3#lo,$D3#lo
+	vmull.u32	$D3,$H3#hi,${R0}[1]
+	vmlal.u32	$D2,$H1#hi,${R1}[1]
+	vadd.i32	$H1#lo,$H1#lo,$D1#lo
+	vmull.u32	$D1,$H1#hi,${R0}[1]
+
+	vadd.i32	$H4#lo,$H4#lo,$D4#lo
+	vmull.u32	$D4,$H4#hi,${R0}[1]
+	subs		$len,$len,#64
+	vmlal.u32	$D0,$H4#hi,${S1}[1]
+	it		lo
+	movlo		$in2,$zeros
+	vmlal.u32	$D3,$H2#hi,${R1}[1]
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D1,$H0#hi,${R1}[1]
+	vmlal.u32	$D4,$H3#hi,${R1}[1]
+
+	vmlal.u32	$D0,$H3#hi,${S2}[1]
+	vmlal.u32	$D3,$H1#hi,${R2}[1]
+	vmlal.u32	$D4,$H2#hi,${R2}[1]
+	vmlal.u32	$D1,$H4#hi,${S2}[1]
+	vmlal.u32	$D2,$H0#hi,${R2}[1]
+
+	vmlal.u32	$D3,$H0#hi,${R3}[1]
+	vmlal.u32	$D0,$H2#hi,${S3}[1]
+	vmlal.u32	$D4,$H1#hi,${R3}[1]
+	vmlal.u32	$D1,$H3#hi,${S3}[1]
+	vmlal.u32	$D2,$H4#hi,${S3}[1]
+
+	vmlal.u32	$D3,$H4#hi,${S4}[1]
+	vmlal.u32	$D0,$H1#hi,${S4}[1]
+	vmlal.u32	$D4,$H0#hi,${R4}[1]
+	vmlal.u32	$D1,$H2#hi,${S4}[1]
+	vmlal.u32	$D2,$H3#hi,${S4}[1]
+
+	vld4.32		{$H0#hi,$H1#hi,$H2#hi,$H3#hi},[$in2]	@ inp[2:3] (or 0)
+	add		$in2,$in2,#64
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4 and accumulate
+
+	vmlal.u32	$D3,$H3#lo,${R0}[0]
+	vmlal.u32	$D0,$H0#lo,${R0}[0]
+	vmlal.u32	$D4,$H4#lo,${R0}[0]
+	vmlal.u32	$D1,$H1#lo,${R0}[0]
+	vmlal.u32	$D2,$H2#lo,${R0}[0]
+	vld1.32		${S4}[0],[$tbl0,:32]
+
+	vmlal.u32	$D3,$H2#lo,${R1}[0]
+	vmlal.u32	$D0,$H4#lo,${S1}[0]
+	vmlal.u32	$D4,$H3#lo,${R1}[0]
+	vmlal.u32	$D1,$H0#lo,${R1}[0]
+	vmlal.u32	$D2,$H1#lo,${R1}[0]
+
+	vmlal.u32	$D3,$H1#lo,${R2}[0]
+	vmlal.u32	$D0,$H3#lo,${S2}[0]
+	vmlal.u32	$D4,$H2#lo,${R2}[0]
+	vmlal.u32	$D1,$H4#lo,${S2}[0]
+	vmlal.u32	$D2,$H0#lo,${R2}[0]
+
+	vmlal.u32	$D3,$H0#lo,${R3}[0]
+	vmlal.u32	$D0,$H2#lo,${S3}[0]
+	vmlal.u32	$D4,$H1#lo,${R3}[0]
+	vmlal.u32	$D1,$H3#lo,${S3}[0]
+	vmlal.u32	$D3,$H4#lo,${S4}[0]
+
+	vmlal.u32	$D2,$H4#lo,${S3}[0]
+	vmlal.u32	$D0,$H1#lo,${S4}[0]
+	vmlal.u32	$D4,$H0#lo,${R4}[0]
+	vmov.i32	$H4,#1<<24		@ padbit, yes, always
+	vmlal.u32	$D1,$H2#lo,${S4}[0]
+	vmlal.u32	$D2,$H3#lo,${S4}[0]
+
+	vld4.32		{$H0#lo,$H1#lo,$H2#lo,$H3#lo},[$inp]	@ inp[0:1]
+	add		$inp,$inp,#64
+# ifdef	__ARMEB__
+	vrev32.8	$H0,$H0
+	vrev32.8	$H1,$H1
+	vrev32.8	$H2,$H2
+	vrev32.8	$H3,$H3
+# endif
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction interleaved with base 2^32 -> base 2^26 of
+	@ inp[0:3] previously loaded to $H0-$H3 and smashed to $H0-$H4.
+
+	vshr.u64	$T0,$D3,#26
+	vmovn.i64	$D3#lo,$D3
+	 vshr.u64	$T1,$D0,#26
+	 vmovn.i64	$D0#lo,$D0
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	vbic.i32	$D3#lo,#0xfc000000
+	  vsri.u32	$H4,$H3,#8		@ base 2^32 -> base 2^26
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+	  vshl.u32	$H3,$H3,#18
+	 vbic.i32	$D0#lo,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D4,#26
+	vmovn.i64	$D4#lo,$D4
+	 vshr.u64	$T1,$D1,#26
+	 vmovn.i64	$D1#lo,$D1
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+	  vsri.u32	$H3,$H2,#14
+	vbic.i32	$D4#lo,#0xfc000000
+	  vshl.u32	$H2,$H2,#12
+	 vbic.i32	$D1#lo,#0xfc000000
+
+	vadd.i32	$D0#lo,$D0#lo,$T0#lo
+	vshl.u32	$T0#lo,$T0#lo,#2
+	  vbic.i32	$H3,#0xfc000000
+	 vshrn.u64	$T1#lo,$D2,#26
+	 vmovn.i64	$D2#lo,$D2
+	vaddl.u32	$D0,$D0#lo,$T0#lo	@ h4 -> h0 [widen for a sec]
+	  vsri.u32	$H2,$H1,#20
+	 vadd.i32	$D3#lo,$D3#lo,$T1#lo	@ h2 -> h3
+	  vshl.u32	$H1,$H1,#6
+	 vbic.i32	$D2#lo,#0xfc000000
+	  vbic.i32	$H2,#0xfc000000
+
+	vshrn.u64	$T0#lo,$D0,#26		@ re-narrow
+	vmovn.i64	$D0#lo,$D0
+	  vsri.u32	$H1,$H0,#26
+	  vbic.i32	$H0,#0xfc000000
+	 vshr.u32	$T1#lo,$D3#lo,#26
+	 vbic.i32	$D3#lo,#0xfc000000
+	vbic.i32	$D0#lo,#0xfc000000
+	vadd.i32	$D1#lo,$D1#lo,$T0#lo	@ h0 -> h1
+	 vadd.i32	$D4#lo,$D4#lo,$T1#lo	@ h3 -> h4
+	  vbic.i32	$H1,#0xfc000000
+
+	bhi		.Loop_neon
+
+.Lskip_loop:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	add		$tbl1,$ctx,#(48+0*9*4)
+	add		$tbl0,$ctx,#(48+1*9*4)
+	adds		$len,$len,#32
+	it		ne
+	movne		$len,#0
+	bne		.Long_tail
+
+	vadd.i32	$H2#hi,$H2#lo,$D2#lo	@ add hash value and move to #hi
+	vadd.i32	$H0#hi,$H0#lo,$D0#lo
+	vadd.i32	$H3#hi,$H3#lo,$D3#lo
+	vadd.i32	$H1#hi,$H1#lo,$D1#lo
+	vadd.i32	$H4#hi,$H4#lo,$D4#lo
+
+.Long_tail:
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^1
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^2
+
+	vadd.i32	$H2#lo,$H2#lo,$D2#lo	@ can be redundant
+	vmull.u32	$D2,$H2#hi,$R0
+	vadd.i32	$H0#lo,$H0#lo,$D0#lo
+	vmull.u32	$D0,$H0#hi,$R0
+	vadd.i32	$H3#lo,$H3#lo,$D3#lo
+	vmull.u32	$D3,$H3#hi,$R0
+	vadd.i32	$H1#lo,$H1#lo,$D1#lo
+	vmull.u32	$D1,$H1#hi,$R0
+	vadd.i32	$H4#lo,$H4#lo,$D4#lo
+	vmull.u32	$D4,$H4#hi,$R0
+
+	vmlal.u32	$D0,$H4#hi,$S1
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vmlal.u32	$D3,$H2#hi,$R1
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vmlal.u32	$D1,$H0#hi,$R1
+	vmlal.u32	$D4,$H3#hi,$R1
+	vmlal.u32	$D2,$H1#hi,$R1
+
+	vmlal.u32	$D3,$H1#hi,$R2
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D0,$H3#hi,$S2
+	vld1.32		${S4}[0],[$tbl0,:32]
+	vmlal.u32	$D4,$H2#hi,$R2
+	vmlal.u32	$D1,$H4#hi,$S2
+	vmlal.u32	$D2,$H0#hi,$R2
+
+	vmlal.u32	$D3,$H0#hi,$R3
+	 it		ne
+	 addne		$tbl1,$ctx,#(48+2*9*4)
+	vmlal.u32	$D0,$H2#hi,$S3
+	 it		ne
+	 addne		$tbl0,$ctx,#(48+3*9*4)
+	vmlal.u32	$D4,$H1#hi,$R3
+	vmlal.u32	$D1,$H3#hi,$S3
+	vmlal.u32	$D2,$H4#hi,$S3
+
+	vmlal.u32	$D3,$H4#hi,$S4
+	 vorn		$MASK,$MASK,$MASK	@ all-ones, can be redundant
+	vmlal.u32	$D0,$H1#hi,$S4
+	 vshr.u64	$MASK,$MASK,#38
+	vmlal.u32	$D4,$H0#hi,$R4
+	vmlal.u32	$D1,$H2#hi,$S4
+	vmlal.u32	$D2,$H3#hi,$S4
+
+	beq		.Lshort_tail
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	vld4.32		{${R0}[1],${R1}[1],${S1}[1],${R2}[1]},[$tbl1]!	@ load r^3
+	vld4.32		{${R0}[0],${R1}[0],${S1}[0],${R2}[0]},[$tbl0]!	@ load r^4
+
+	vmlal.u32	$D2,$H2#lo,$R0
+	vmlal.u32	$D0,$H0#lo,$R0
+	vmlal.u32	$D3,$H3#lo,$R0
+	vmlal.u32	$D1,$H1#lo,$R0
+	vmlal.u32	$D4,$H4#lo,$R0
+
+	vmlal.u32	$D0,$H4#lo,$S1
+	vld4.32		{${S2}[1],${R3}[1],${S3}[1],${R4}[1]},[$tbl1]!
+	vmlal.u32	$D3,$H2#lo,$R1
+	vld4.32		{${S2}[0],${R3}[0],${S3}[0],${R4}[0]},[$tbl0]!
+	vmlal.u32	$D1,$H0#lo,$R1
+	vmlal.u32	$D4,$H3#lo,$R1
+	vmlal.u32	$D2,$H1#lo,$R1
+
+	vmlal.u32	$D3,$H1#lo,$R2
+	vld1.32		${S4}[1],[$tbl1,:32]
+	vmlal.u32	$D0,$H3#lo,$S2
+	vld1.32		${S4}[0],[$tbl0,:32]
+	vmlal.u32	$D4,$H2#lo,$R2
+	vmlal.u32	$D1,$H4#lo,$S2
+	vmlal.u32	$D2,$H0#lo,$R2
+
+	vmlal.u32	$D3,$H0#lo,$R3
+	vmlal.u32	$D0,$H2#lo,$S3
+	vmlal.u32	$D4,$H1#lo,$R3
+	vmlal.u32	$D1,$H3#lo,$S3
+	vmlal.u32	$D2,$H4#lo,$S3
+
+	vmlal.u32	$D3,$H4#lo,$S4
+	 vorn		$MASK,$MASK,$MASK	@ all-ones
+	vmlal.u32	$D0,$H1#lo,$S4
+	 vshr.u64	$MASK,$MASK,#38
+	vmlal.u32	$D4,$H0#lo,$R4
+	vmlal.u32	$D1,$H2#lo,$S4
+	vmlal.u32	$D2,$H3#lo,$S4
+
+.Lshort_tail:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ horizontal addition
+
+	vadd.i64	$D3#lo,$D3#lo,$D3#hi
+	vadd.i64	$D0#lo,$D0#lo,$D0#hi
+	vadd.i64	$D4#lo,$D4#lo,$D4#hi
+	vadd.i64	$D1#lo,$D1#lo,$D1#hi
+	vadd.i64	$D2#lo,$D2#lo,$D2#hi
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction, but without narrowing
+
+	vshr.u64	$T0,$D3,#26
+	vand.i64	$D3,$D3,$MASK
+	 vshr.u64	$T1,$D0,#26
+	 vand.i64	$D0,$D0,$MASK
+	vadd.i64	$D4,$D4,$T0		@ h3 -> h4
+	 vadd.i64	$D1,$D1,$T1		@ h0 -> h1
+
+	vshr.u64	$T0,$D4,#26
+	vand.i64	$D4,$D4,$MASK
+	 vshr.u64	$T1,$D1,#26
+	 vand.i64	$D1,$D1,$MASK
+	 vadd.i64	$D2,$D2,$T1		@ h1 -> h2
+
+	vadd.i64	$D0,$D0,$T0
+	vshl.u64	$T0,$T0,#2
+	 vshr.u64	$T1,$D2,#26
+	 vand.i64	$D2,$D2,$MASK
+	vadd.i64	$D0,$D0,$T0		@ h4 -> h0
+	 vadd.i64	$D3,$D3,$T1		@ h2 -> h3
+
+	vshr.u64	$T0,$D0,#26
+	vand.i64	$D0,$D0,$MASK
+	 vshr.u64	$T1,$D3,#26
+	 vand.i64	$D3,$D3,$MASK
+	vadd.i64	$D1,$D1,$T0		@ h0 -> h1
+	 vadd.i64	$D4,$D4,$T1		@ h3 -> h4
+
+	cmp		$len,#0
+	bne		.Leven
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ store hash value
+
+	vst4.32		{$D0#lo[0],$D1#lo[0],$D2#lo[0],$D3#lo[0]},[$ctx]!
+	vst1.32		{$D4#lo[0]},[$ctx]
+
+	vldmia	sp!,{d8-d15}			@ epilogue
+	ldmia	sp!,{r4-r7}
+	ret					@ bx	lr
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+#ifndef	__KERNEL__
+.LOPENSSL_armcap:
+# ifdef	_WIN32
+.word	OPENSSL_armcap_P
+# else
+.word	OPENSSL_armcap_P-.Lpoly1305_init
+# endif
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+#endif
+___
+}	}
+$code.=<<___;
+.asciz	"Poly1305 for ARMv4/NEON, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+
+foreach (split("\n",$code)) {
+	s/\`([^\`]*)\`/eval $1/geo;
+
+	s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo	or
+	s/\bret\b/bx	lr/go						or
+	s/\bbx\s+lr\b/.word\t0xe12fff1e/go;	# make it possible to compile with -march=armv4
+
+	print $_,"\n";
+}
+close STDOUT; # enforce flush
diff --git a/arch/arm/crypto/poly1305-core.S_shipped b/arch/arm/crypto/poly1305-core.S_shipped
new file mode 100644
index 0000000..37b71d9
--- /dev/null
+++ b/arch/arm/crypto/poly1305-core.S_shipped
@@ -0,0 +1,1158 @@
+#ifndef	__KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ __LINUX_ARM_ARCH__
+# define poly1305_init   poly1305_init_arm
+# define poly1305_blocks poly1305_blocks_arm
+# define poly1305_emit   poly1305_emit_arm
+.globl	poly1305_blocks_neon
+#endif
+
+#if defined(__thumb2__)
+.syntax	unified
+.thumb
+#else
+.code	32
+#endif
+
+.text
+
+.globl	poly1305_emit
+.globl	poly1305_blocks
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+.Lpoly1305_init:
+	stmdb	sp!,{r4-r11}
+
+	eor	r3,r3,r3
+	cmp	r1,#0
+	str	r3,[r0,#0]		@ zero hash value
+	str	r3,[r0,#4]
+	str	r3,[r0,#8]
+	str	r3,[r0,#12]
+	str	r3,[r0,#16]
+	str	r3,[r0,#36]		@ clear is_base2_26
+	add	r0,r0,#20
+
+#ifdef	__thumb2__
+	it	eq
+#endif
+	moveq	r0,#0
+	beq	.Lno_key
+
+#if	__ARM_MAX_ARCH__>=7
+	mov	r3,#-1
+	str	r3,[r0,#28]		@ impossible key power value
+# ifndef __KERNEL__
+	adr	r11,.Lpoly1305_init
+	ldr	r12,.LOPENSSL_armcap
+# endif
+#endif
+	ldrb	r4,[r1,#0]
+	mov	r10,#0x0fffffff
+	ldrb	r5,[r1,#1]
+	and	r3,r10,#-4		@ 0x0ffffffc
+	ldrb	r6,[r1,#2]
+	ldrb	r7,[r1,#3]
+	orr	r4,r4,r5,lsl#8
+	ldrb	r5,[r1,#4]
+	orr	r4,r4,r6,lsl#16
+	ldrb	r6,[r1,#5]
+	orr	r4,r4,r7,lsl#24
+	ldrb	r7,[r1,#6]
+	and	r4,r4,r10
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+# if !defined(_WIN32)
+	ldr	r12,[r11,r12]		@ OPENSSL_armcap_P
+# endif
+# if defined(__APPLE__) || defined(_WIN32)
+	ldr	r12,[r12]
+# endif
+#endif
+	ldrb	r8,[r1,#7]
+	orr	r5,r5,r6,lsl#8
+	ldrb	r6,[r1,#8]
+	orr	r5,r5,r7,lsl#16
+	ldrb	r7,[r1,#9]
+	orr	r5,r5,r8,lsl#24
+	ldrb	r8,[r1,#10]
+	and	r5,r5,r3
+
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	tst	r12,#ARMV7_NEON		@ check for NEON
+# ifdef	__thumb2__
+	adr	r9,.Lpoly1305_blocks_neon
+	adr	r11,.Lpoly1305_blocks
+	it	ne
+	movne	r11,r9
+	adr	r12,.Lpoly1305_emit
+	orr	r11,r11,#1		@ thumb-ify addresses
+	orr	r12,r12,#1
+# else
+	add	r12,r11,#(.Lpoly1305_emit-.Lpoly1305_init)
+	ite	eq
+	addeq	r11,r11,#(.Lpoly1305_blocks-.Lpoly1305_init)
+	addne	r11,r11,#(.Lpoly1305_blocks_neon-.Lpoly1305_init)
+# endif
+#endif
+	ldrb	r9,[r1,#11]
+	orr	r6,r6,r7,lsl#8
+	ldrb	r7,[r1,#12]
+	orr	r6,r6,r8,lsl#16
+	ldrb	r8,[r1,#13]
+	orr	r6,r6,r9,lsl#24
+	ldrb	r9,[r1,#14]
+	and	r6,r6,r3
+
+	ldrb	r10,[r1,#15]
+	orr	r7,r7,r8,lsl#8
+	str	r4,[r0,#0]
+	orr	r7,r7,r9,lsl#16
+	str	r5,[r0,#4]
+	orr	r7,r7,r10,lsl#24
+	str	r6,[r0,#8]
+	and	r7,r7,r3
+	str	r7,[r0,#12]
+#if	__ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+	stmia	r2,{r11,r12}		@ fill functions table
+	mov	r0,#1
+#else
+	mov	r0,#0
+#endif
+.Lno_key:
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	bx	lr				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_init,.-poly1305_init
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	stmdb	sp!,{r3-r11,lr}
+
+	ands	r2,r2,#-16
+	beq	.Lno_data
+
+	add	r2,r2,r1		@ end pointer
+	sub	sp,sp,#32
+
+#if __ARM_ARCH__<7
+	ldmia	r0,{r4-r12}		@ load context
+	add	r0,r0,#20
+	str	r2,[sp,#16]		@ offload stuff
+	str	r0,[sp,#12]
+#else
+	ldr	lr,[r0,#36]		@ is_base2_26
+	ldmia	r0!,{r4-r8}		@ load hash value
+	str	r2,[sp,#16]		@ offload stuff
+	str	r0,[sp,#12]
+
+	adds	r9,r4,r5,lsl#26	@ base 2^26 -> base 2^32
+	mov	r10,r5,lsr#6
+	adcs	r10,r10,r6,lsl#20
+	mov	r11,r6,lsr#12
+	adcs	r11,r11,r7,lsl#14
+	mov	r12,r7,lsr#18
+	adcs	r12,r12,r8,lsl#8
+	mov	r2,#0
+	teq	lr,#0
+	str	r2,[r0,#16]		@ clear is_base2_26
+	adc	r2,r2,r8,lsr#24
+
+	itttt	ne
+	movne	r4,r9			@ choose between radixes
+	movne	r5,r10
+	movne	r6,r11
+	movne	r7,r12
+	ldmia	r0,{r9-r12}		@ load key
+	it	ne
+	movne	r8,r2
+#endif
+
+	mov	lr,r1
+	cmp	r3,#0
+	str	r10,[sp,#20]
+	str	r11,[sp,#24]
+	str	r12,[sp,#28]
+	b	.Loop
+
+.align	4
+.Loop:
+#if __ARM_ARCH__<7
+	ldrb	r0,[lr],#16		@ load input
+# ifdef	__thumb2__
+	it	hi
+# endif
+	addhi	r8,r8,#1		@ 1<<128
+	ldrb	r1,[lr,#-15]
+	ldrb	r2,[lr,#-14]
+	ldrb	r3,[lr,#-13]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-12]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-11]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-10]
+	adds	r4,r4,r3		@ accumulate input
+
+	ldrb	r3,[lr,#-9]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-8]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-7]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-6]
+	adcs	r5,r5,r3
+
+	ldrb	r3,[lr,#-5]
+	orr	r1,r0,r1,lsl#8
+	ldrb	r0,[lr,#-4]
+	orr	r2,r1,r2,lsl#16
+	ldrb	r1,[lr,#-3]
+	orr	r3,r2,r3,lsl#24
+	ldrb	r2,[lr,#-2]
+	adcs	r6,r6,r3
+
+	ldrb	r3,[lr,#-1]
+	orr	r1,r0,r1,lsl#8
+	str	lr,[sp,#8]		@ offload input pointer
+	orr	r2,r1,r2,lsl#16
+	add	r10,r10,r10,lsr#2
+	orr	r3,r2,r3,lsl#24
+#else
+	ldr	r0,[lr],#16		@ load input
+	it	hi
+	addhi	r8,r8,#1		@ padbit
+	ldr	r1,[lr,#-12]
+	ldr	r2,[lr,#-8]
+	ldr	r3,[lr,#-4]
+# ifdef	__ARMEB__
+	rev	r0,r0
+	rev	r1,r1
+	rev	r2,r2
+	rev	r3,r3
+# endif
+	adds	r4,r4,r0		@ accumulate input
+	str	lr,[sp,#8]		@ offload input pointer
+	adcs	r5,r5,r1
+	add	r10,r10,r10,lsr#2
+	adcs	r6,r6,r2
+#endif
+	add	r11,r11,r11,lsr#2
+	adcs	r7,r7,r3
+	add	r12,r12,r12,lsr#2
+
+	umull	r2,r3,r5,r9
+	 adc	r8,r8,#0
+	umull	r0,r1,r4,r9
+	umlal	r2,r3,r8,r10
+	umlal	r0,r1,r7,r10
+	ldr	r10,[sp,#20]		@ reload r10
+	umlal	r2,r3,r6,r12
+	umlal	r0,r1,r5,r12
+	umlal	r2,r3,r7,r11
+	umlal	r0,r1,r6,r11
+	umlal	r2,r3,r4,r10
+	str	r0,[sp,#0]		@ future r4
+	 mul	r0,r11,r8
+	ldr	r11,[sp,#24]		@ reload r11
+	adds	r2,r2,r1		@ d1+=d0>>32
+	 eor	r1,r1,r1
+	adc	lr,r3,#0		@ future r6
+	str	r2,[sp,#4]		@ future r5
+
+	mul	r2,r12,r8
+	eor	r3,r3,r3
+	umlal	r0,r1,r7,r12
+	ldr	r12,[sp,#28]		@ reload r12
+	umlal	r2,r3,r7,r9
+	umlal	r0,r1,r6,r9
+	umlal	r2,r3,r6,r10
+	umlal	r0,r1,r5,r10
+	umlal	r2,r3,r5,r11
+	umlal	r0,r1,r4,r11
+	umlal	r2,r3,r4,r12
+	ldr	r4,[sp,#0]
+	mul	r8,r9,r8
+	ldr	r5,[sp,#4]
+
+	adds	r6,lr,r0		@ d2+=d1>>32
+	ldr	lr,[sp,#8]		@ reload input pointer
+	adc	r1,r1,#0
+	adds	r7,r2,r1		@ d3+=d2>>32
+	ldr	r0,[sp,#16]		@ reload end pointer
+	adc	r3,r3,#0
+	add	r8,r8,r3		@ h4+=d3>>32
+
+	and	r1,r8,#-4
+	and	r8,r8,#3
+	add	r1,r1,r1,lsr#2		@ *=5
+	adds	r4,r4,r1
+	adcs	r5,r5,#0
+	adcs	r6,r6,#0
+	adcs	r7,r7,#0
+	adc	r8,r8,#0
+
+	cmp	r0,lr			@ done yet?
+	bhi	.Loop
+
+	ldr	r0,[sp,#12]
+	add	sp,sp,#32
+	stmdb	r0,{r4-r8}		@ store the result
+
+.Lno_data:
+#if	__ARM_ARCH__>=5
+	ldmia	sp!,{r3-r11,pc}
+#else
+	ldmia	sp!,{r3-r11,lr}
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_blocks,.-poly1305_blocks
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	stmdb	sp!,{r4-r11}
+
+	ldmia	r0,{r3-r7}
+
+#if __ARM_ARCH__>=7
+	ldr	ip,[r0,#36]		@ is_base2_26
+
+	adds	r8,r3,r4,lsl#26	@ base 2^26 -> base 2^32
+	mov	r9,r4,lsr#6
+	adcs	r9,r9,r5,lsl#20
+	mov	r10,r5,lsr#12
+	adcs	r10,r10,r6,lsl#14
+	mov	r11,r6,lsr#18
+	adcs	r11,r11,r7,lsl#8
+	mov	r0,#0
+	adc	r0,r0,r7,lsr#24
+
+	tst	ip,ip
+	itttt	ne
+	movne	r3,r8
+	movne	r4,r9
+	movne	r5,r10
+	movne	r6,r11
+	it	ne
+	movne	r7,r0
+#endif
+
+	adds	r8,r3,#5		@ compare to modulus
+	adcs	r9,r4,#0
+	adcs	r10,r5,#0
+	adcs	r11,r6,#0
+	adc	r0,r7,#0
+	tst	r0,#4			@ did it carry/borrow?
+
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r3,r8
+	ldr	r8,[r2,#0]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r4,r9
+	ldr	r9,[r2,#4]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r5,r10
+	ldr	r10,[r2,#8]
+#ifdef	__thumb2__
+	it	ne
+#endif
+	movne	r6,r11
+	ldr	r11,[r2,#12]
+
+	adds	r3,r3,r8
+	adcs	r4,r4,r9
+	adcs	r5,r5,r10
+	adc	r6,r6,r11
+
+#if __ARM_ARCH__>=7
+# ifdef __ARMEB__
+	rev	r3,r3
+	rev	r4,r4
+	rev	r5,r5
+	rev	r6,r6
+# endif
+	str	r3,[r1,#0]
+	str	r4,[r1,#4]
+	str	r5,[r1,#8]
+	str	r6,[r1,#12]
+#else
+	strb	r3,[r1,#0]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#4]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#8]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#12]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#1]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#5]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#9]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#13]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#2]
+	mov	r3,r3,lsr#8
+	strb	r4,[r1,#6]
+	mov	r4,r4,lsr#8
+	strb	r5,[r1,#10]
+	mov	r5,r5,lsr#8
+	strb	r6,[r1,#14]
+	mov	r6,r6,lsr#8
+
+	strb	r3,[r1,#3]
+	strb	r4,[r1,#7]
+	strb	r5,[r1,#11]
+	strb	r6,[r1,#15]
+#endif
+	ldmia	sp!,{r4-r11}
+#if	__ARM_ARCH__>=5
+	bx	lr				@ bx	lr
+#else
+	tst	lr,#1
+	moveq	pc,lr			@ be binary compatible with V4, yet
+	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
+.size	poly1305_emit,.-poly1305_emit
+#if	__ARM_MAX_ARCH__>=7
+.fpu	neon
+
+.type	poly1305_init_neon,%function
+.align	5
+poly1305_init_neon:
+.Lpoly1305_init_neon:
+	ldr	r3,[r0,#48]		@ first table element
+	cmp	r3,#-1			@ is value impossible?
+	bne	.Lno_init_neon
+
+	ldr	r4,[r0,#20]		@ load key base 2^32
+	ldr	r5,[r0,#24]
+	ldr	r6,[r0,#28]
+	ldr	r7,[r0,#32]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	and	r3,r3,#0x03ffffff
+	and	r4,r4,#0x03ffffff
+	and	r5,r5,#0x03ffffff
+
+	vdup.32	d0,r2			@ r^1 in both lanes
+	add	r2,r3,r3,lsl#2		@ *5
+	vdup.32	d1,r3
+	add	r3,r4,r4,lsl#2
+	vdup.32	d2,r2
+	vdup.32	d3,r4
+	add	r4,r5,r5,lsl#2
+	vdup.32	d4,r3
+	vdup.32	d5,r5
+	add	r5,r6,r6,lsl#2
+	vdup.32	d6,r4
+	vdup.32	d7,r6
+	vdup.32	d8,r5
+
+	mov	r5,#2		@ counter
+
+.Lsquare_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+
+	vmull.u32	q5,d0,d0[1]
+	vmull.u32	q6,d1,d0[1]
+	vmull.u32	q7,d3,d0[1]
+	vmull.u32	q8,d5,d0[1]
+	vmull.u32	q9,d7,d0[1]
+
+	vmlal.u32	q5,d7,d2[1]
+	vmlal.u32	q6,d0,d1[1]
+	vmlal.u32	q7,d1,d1[1]
+	vmlal.u32	q8,d3,d1[1]
+	vmlal.u32	q9,d5,d1[1]
+
+	vmlal.u32	q5,d5,d4[1]
+	vmlal.u32	q6,d7,d4[1]
+	vmlal.u32	q8,d1,d3[1]
+	vmlal.u32	q7,d0,d3[1]
+	vmlal.u32	q9,d3,d3[1]
+
+	vmlal.u32	q5,d3,d6[1]
+	vmlal.u32	q8,d0,d5[1]
+	vmlal.u32	q6,d5,d6[1]
+	vmlal.u32	q7,d7,d6[1]
+	vmlal.u32	q9,d1,d5[1]
+
+	vmlal.u32	q8,d7,d8[1]
+	vmlal.u32	q5,d1,d8[1]
+	vmlal.u32	q6,d3,d8[1]
+	vmlal.u32	q7,d5,d8[1]
+	vmlal.u32	q9,d0,d7[1]
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	@ and P. Schwabe
+	@
+	@ H0>>+H1>>+H2>>+H3>>+H4
+	@ H3>>+H4>>*5+H0>>+H1
+	@
+	@ Trivia.
+	@
+	@ Result of multiplication of n-bit number by m-bit number is
+	@ n+m bits wide. However! Even though 2^n is a n+1-bit number,
+	@ m-bit number multiplied by 2^n is still n+m bits wide.
+	@
+	@ Sum of two n-bit numbers is n+1 bits wide, sum of three - n+2,
+	@ and so is sum of four. Sum of 2^m n-m-bit numbers and n-bit
+	@ one is n+1 bits wide.
+	@
+	@ >>+ denotes Hnext += Hn>>26, Hn &= 0x3ffffff. This means that
+	@ H0, H2, H3 are guaranteed to be 26 bits wide, while H1 and H4
+	@ can be 27. However! In cases when their width exceeds 26 bits
+	@ they are limited by 2^26+2^6. This in turn means that *sum*
+	@ of the products with these values can still be viewed as sum
+	@ of 52-bit numbers as long as the amount of addends is not a
+	@ power of 2. For example,
+	@
+	@ H4 = H4*R0 + H3*R1 + H2*R2 + H1*R3 + H0 * R4,
+	@
+	@ which can't be larger than 5 * (2^26 + 2^6) * (2^26 + 2^6), or
+	@ 5 * (2^52 + 2*2^32 + 2^12), which in turn is smaller than
+	@ 8 * (2^52) or 2^55. However, the value is then multiplied by
+	@ by 5, so we should be looking at 5 * 5 * (2^52 + 2^33 + 2^12),
+	@ which is less than 32 * (2^52) or 2^57. And when processing
+	@ data we are looking at triple as many addends...
+	@
+	@ In key setup procedure pre-reduced H0 is limited by 5*4+1 and
+	@ 5*H4 - by 5*5 52-bit addends, or 57 bits. But when hashing the
+	@ input H0 is limited by (5*4+1)*3 addends, or 58 bits, while
+	@ 5*H4 by 5*5*3, or 59[!] bits. How is this relevant? vmlal.u32
+	@ instruction accepts 2x32-bit input and writes 2x64-bit result.
+	@ This means that result of reduction have to be compressed upon
+	@ loop wrap-around. This can be done in the process of reduction
+	@ to minimize amount of instructions [as well as amount of
+	@ 128-bit instructions, which benefits low-end processors], but
+	@ one has to watch for H2 (which is narrower than H0) and 5*H4
+	@ not being wider than 58 bits, so that result of right shift
+	@ by 26 bits fits in 32 bits. This is also useful on x86,
+	@ because it allows to use paddd in place for paddq, which
+	@ benefits Atom, where paddq is ridiculously slow.
+
+	vshr.u64	q15,q8,#26
+	vmovn.i64	d16,q8
+	 vshr.u64	q4,q5,#26
+	 vmovn.i64	d10,q5
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	vbic.i32	d16,#0xfc000000	@ &=0x03ffffff
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+	 vbic.i32	d10,#0xfc000000
+
+	vshrn.u64	d30,q9,#26
+	vmovn.i64	d18,q9
+	 vshr.u64	q4,q6,#26
+	 vmovn.i64	d12,q6
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+	vbic.i32	d18,#0xfc000000
+	 vbic.i32	d12,#0xfc000000
+
+	vadd.i32	d10,d10,d30
+	vshl.u32	d30,d30,#2
+	 vshrn.u64	d8,q7,#26
+	 vmovn.i64	d14,q7
+	vadd.i32	d10,d10,d30	@ h4 -> h0
+	 vadd.i32	d16,d16,d8	@ h2 -> h3
+	 vbic.i32	d14,#0xfc000000
+
+	vshr.u32	d30,d10,#26
+	vbic.i32	d10,#0xfc000000
+	 vshr.u32	d8,d16,#26
+	 vbic.i32	d16,#0xfc000000
+	vadd.i32	d12,d12,d30	@ h0 -> h1
+	 vadd.i32	d18,d18,d8	@ h3 -> h4
+
+	subs		r5,r5,#1
+	beq		.Lsquare_break_neon
+
+	add		r6,r0,#(48+0*9*4)
+	add		r7,r0,#(48+1*9*4)
+
+	vtrn.32		d0,d10		@ r^2:r^1
+	vtrn.32		d3,d14
+	vtrn.32		d5,d16
+	vtrn.32		d1,d12
+	vtrn.32		d7,d18
+
+	vshl.u32	d4,d3,#2		@ *5
+	vshl.u32	d6,d5,#2
+	vshl.u32	d2,d1,#2
+	vshl.u32	d8,d7,#2
+	vadd.i32	d4,d4,d3
+	vadd.i32	d2,d2,d1
+	vadd.i32	d6,d6,d5
+	vadd.i32	d8,d8,d7
+
+	vst4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!
+	vst4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!
+	vst4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vst4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vst1.32		{d8[0]},[r6,:32]
+	vst1.32		{d8[1]},[r7,:32]
+
+	b		.Lsquare_neon
+
+.align	4
+.Lsquare_break_neon:
+	add		r6,r0,#(48+2*4*9)
+	add		r7,r0,#(48+3*4*9)
+
+	vmov		d0,d10		@ r^4:r^3
+	vshl.u32	d2,d12,#2		@ *5
+	vmov		d1,d12
+	vshl.u32	d4,d14,#2
+	vmov		d3,d14
+	vshl.u32	d6,d16,#2
+	vmov		d5,d16
+	vshl.u32	d8,d18,#2
+	vmov		d7,d18
+	vadd.i32	d2,d2,d12
+	vadd.i32	d4,d4,d14
+	vadd.i32	d6,d6,d16
+	vadd.i32	d8,d8,d18
+
+	vst4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!
+	vst4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!
+	vst4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vst4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vst1.32		{d8[0]},[r6]
+	vst1.32		{d8[1]},[r7]
+
+.Lno_init_neon:
+	bx	lr				@ bx	lr
+.size	poly1305_init_neon,.-poly1305_init_neon
+
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	ip,[r0,#36]		@ is_base2_26
+
+	cmp	r2,#64
+	blo	.Lpoly1305_blocks
+
+	stmdb	sp!,{r4-r7}
+	vstmdb	sp!,{d8-d15}		@ ABI specification says so
+
+	tst	ip,ip			@ is_base2_26?
+	bne	.Lbase2_26_neon
+
+	stmdb	sp!,{r1-r3,lr}
+	bl	.Lpoly1305_init_neon
+
+	ldr	r4,[r0,#0]		@ load hash value base 2^32
+	ldr	r5,[r0,#4]
+	ldr	r6,[r0,#8]
+	ldr	r7,[r0,#12]
+	ldr	ip,[r0,#16]
+
+	and	r2,r4,#0x03ffffff	@ base 2^32 -> base 2^26
+	mov	r3,r4,lsr#26
+	 veor	d10,d10,d10
+	mov	r4,r5,lsr#20
+	orr	r3,r3,r5,lsl#6
+	 veor	d12,d12,d12
+	mov	r5,r6,lsr#14
+	orr	r4,r4,r6,lsl#12
+	 veor	d14,d14,d14
+	mov	r6,r7,lsr#8
+	orr	r5,r5,r7,lsl#18
+	 veor	d16,d16,d16
+	and	r3,r3,#0x03ffffff
+	orr	r6,r6,ip,lsl#24
+	 veor	d18,d18,d18
+	and	r4,r4,#0x03ffffff
+	mov	r1,#1
+	and	r5,r5,#0x03ffffff
+	str	r1,[r0,#36]		@ set is_base2_26
+
+	vmov.32	d10[0],r2
+	vmov.32	d12[0],r3
+	vmov.32	d14[0],r4
+	vmov.32	d16[0],r5
+	vmov.32	d18[0],r6
+	adr	r5,.Lzeros
+
+	ldmia	sp!,{r1-r3,lr}
+	b	.Lhash_loaded
+
+.align	4
+.Lbase2_26_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ load hash value
+
+	veor		d10,d10,d10
+	veor		d12,d12,d12
+	veor		d14,d14,d14
+	veor		d16,d16,d16
+	veor		d18,d18,d18
+	vld4.32		{d10[0],d12[0],d14[0],d16[0]},[r0]!
+	adr		r5,.Lzeros
+	vld1.32		{d18[0]},[r0]
+	sub		r0,r0,#16		@ rewind
+
+.Lhash_loaded:
+	add		r4,r1,#32
+	mov		r3,r3,lsl#24
+	tst		r2,#31
+	beq		.Leven
+
+	vld4.32		{d20[0],d22[0],d24[0],d26[0]},[r1]!
+	vmov.32		d28[0],r3
+	sub		r2,r2,#16
+	add		r4,r1,#32
+
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q13,q13
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+# endif
+	vsri.u32	d28,d26,#8	@ base 2^32 -> base 2^26
+	vshl.u32	d26,d26,#18
+
+	vsri.u32	d26,d24,#14
+	vshl.u32	d24,d24,#12
+	vadd.i32	d29,d28,d18	@ add hash value and move to #hi
+
+	vbic.i32	d26,#0xfc000000
+	vsri.u32	d24,d22,#20
+	vshl.u32	d22,d22,#6
+
+	vbic.i32	d24,#0xfc000000
+	vsri.u32	d22,d20,#26
+	vadd.i32	d27,d26,d16
+
+	vbic.i32	d20,#0xfc000000
+	vbic.i32	d22,#0xfc000000
+	vadd.i32	d25,d24,d14
+
+	vadd.i32	d21,d20,d10
+	vadd.i32	d23,d22,d12
+
+	mov		r7,r5
+	add		r6,r0,#48
+
+	cmp		r2,r2
+	b		.Long_tail
+
+.align	4
+.Leven:
+	subs		r2,r2,#64
+	it		lo
+	movlo		r4,r5
+
+	vmov.i32	q14,#1<<24		@ padbit, yes, always
+	vld4.32		{d20,d22,d24,d26},[r1]	@ inp[0:1]
+	add		r1,r1,#64
+	vld4.32		{d21,d23,d25,d27},[r4]	@ inp[2:3] (or 0)
+	add		r4,r4,#64
+	itt		hi
+	addhi		r7,r0,#(48+1*9*4)
+	addhi		r6,r0,#(48+3*9*4)
+
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q13,q13
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+# endif
+	vsri.u32	q14,q13,#8		@ base 2^32 -> base 2^26
+	vshl.u32	q13,q13,#18
+
+	vsri.u32	q13,q12,#14
+	vshl.u32	q12,q12,#12
+
+	vbic.i32	q13,#0xfc000000
+	vsri.u32	q12,q11,#20
+	vshl.u32	q11,q11,#6
+
+	vbic.i32	q12,#0xfc000000
+	vsri.u32	q11,q10,#26
+
+	vbic.i32	q10,#0xfc000000
+	vbic.i32	q11,#0xfc000000
+
+	bls		.Lskip_loop
+
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^2
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^4
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	b		.Loop_neon
+
+.align	5
+.Loop_neon:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	@   ___________________/
+	@ ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	@ ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	@   ___________________/ ____________________/
+	@
+	@ Note that we start with inp[2:3]*r^2. This is because it
+	@ doesn't depend on reduction in previous iteration.
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	@ d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	@ d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	@ d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	@ d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ inp[2:3]*r^2
+
+	vadd.i32	d24,d24,d14	@ accumulate inp[0:1]
+	vmull.u32	q7,d25,d0[1]
+	vadd.i32	d20,d20,d10
+	vmull.u32	q5,d21,d0[1]
+	vadd.i32	d26,d26,d16
+	vmull.u32	q8,d27,d0[1]
+	vmlal.u32	q7,d23,d1[1]
+	vadd.i32	d22,d22,d12
+	vmull.u32	q6,d23,d0[1]
+
+	vadd.i32	d28,d28,d18
+	vmull.u32	q9,d29,d0[1]
+	subs		r2,r2,#64
+	vmlal.u32	q5,d29,d2[1]
+	it		lo
+	movlo		r4,r5
+	vmlal.u32	q8,d25,d1[1]
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q6,d21,d1[1]
+	vmlal.u32	q9,d27,d1[1]
+
+	vmlal.u32	q5,d27,d4[1]
+	vmlal.u32	q8,d23,d3[1]
+	vmlal.u32	q9,d25,d3[1]
+	vmlal.u32	q6,d29,d4[1]
+	vmlal.u32	q7,d21,d3[1]
+
+	vmlal.u32	q8,d21,d5[1]
+	vmlal.u32	q5,d25,d6[1]
+	vmlal.u32	q9,d23,d5[1]
+	vmlal.u32	q6,d27,d6[1]
+	vmlal.u32	q7,d29,d6[1]
+
+	vmlal.u32	q8,d29,d8[1]
+	vmlal.u32	q5,d23,d8[1]
+	vmlal.u32	q9,d21,d7[1]
+	vmlal.u32	q6,d25,d8[1]
+	vmlal.u32	q7,d27,d8[1]
+
+	vld4.32		{d21,d23,d25,d27},[r4]	@ inp[2:3] (or 0)
+	add		r4,r4,#64
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4 and accumulate
+
+	vmlal.u32	q8,d26,d0[0]
+	vmlal.u32	q5,d20,d0[0]
+	vmlal.u32	q9,d28,d0[0]
+	vmlal.u32	q6,d22,d0[0]
+	vmlal.u32	q7,d24,d0[0]
+	vld1.32		d8[0],[r6,:32]
+
+	vmlal.u32	q8,d24,d1[0]
+	vmlal.u32	q5,d28,d2[0]
+	vmlal.u32	q9,d26,d1[0]
+	vmlal.u32	q6,d20,d1[0]
+	vmlal.u32	q7,d22,d1[0]
+
+	vmlal.u32	q8,d22,d3[0]
+	vmlal.u32	q5,d26,d4[0]
+	vmlal.u32	q9,d24,d3[0]
+	vmlal.u32	q6,d28,d4[0]
+	vmlal.u32	q7,d20,d3[0]
+
+	vmlal.u32	q8,d20,d5[0]
+	vmlal.u32	q5,d24,d6[0]
+	vmlal.u32	q9,d22,d5[0]
+	vmlal.u32	q6,d26,d6[0]
+	vmlal.u32	q8,d28,d8[0]
+
+	vmlal.u32	q7,d28,d6[0]
+	vmlal.u32	q5,d22,d8[0]
+	vmlal.u32	q9,d20,d7[0]
+	vmov.i32	q14,#1<<24		@ padbit, yes, always
+	vmlal.u32	q6,d24,d8[0]
+	vmlal.u32	q7,d26,d8[0]
+
+	vld4.32		{d20,d22,d24,d26},[r1]	@ inp[0:1]
+	add		r1,r1,#64
+# ifdef	__ARMEB__
+	vrev32.8	q10,q10
+	vrev32.8	q11,q11
+	vrev32.8	q12,q12
+	vrev32.8	q13,q13
+# endif
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction interleaved with base 2^32 -> base 2^26 of
+	@ inp[0:3] previously loaded to q10-q13 and smashed to q10-q14.
+
+	vshr.u64	q15,q8,#26
+	vmovn.i64	d16,q8
+	 vshr.u64	q4,q5,#26
+	 vmovn.i64	d10,q5
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	vbic.i32	d16,#0xfc000000
+	  vsri.u32	q14,q13,#8		@ base 2^32 -> base 2^26
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+	  vshl.u32	q13,q13,#18
+	 vbic.i32	d10,#0xfc000000
+
+	vshrn.u64	d30,q9,#26
+	vmovn.i64	d18,q9
+	 vshr.u64	q4,q6,#26
+	 vmovn.i64	d12,q6
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+	  vsri.u32	q13,q12,#14
+	vbic.i32	d18,#0xfc000000
+	  vshl.u32	q12,q12,#12
+	 vbic.i32	d12,#0xfc000000
+
+	vadd.i32	d10,d10,d30
+	vshl.u32	d30,d30,#2
+	  vbic.i32	q13,#0xfc000000
+	 vshrn.u64	d8,q7,#26
+	 vmovn.i64	d14,q7
+	vaddl.u32	q5,d10,d30	@ h4 -> h0 [widen for a sec]
+	  vsri.u32	q12,q11,#20
+	 vadd.i32	d16,d16,d8	@ h2 -> h3
+	  vshl.u32	q11,q11,#6
+	 vbic.i32	d14,#0xfc000000
+	  vbic.i32	q12,#0xfc000000
+
+	vshrn.u64	d30,q5,#26		@ re-narrow
+	vmovn.i64	d10,q5
+	  vsri.u32	q11,q10,#26
+	  vbic.i32	q10,#0xfc000000
+	 vshr.u32	d8,d16,#26
+	 vbic.i32	d16,#0xfc000000
+	vbic.i32	d10,#0xfc000000
+	vadd.i32	d12,d12,d30	@ h0 -> h1
+	 vadd.i32	d18,d18,d8	@ h3 -> h4
+	  vbic.i32	q11,#0xfc000000
+
+	bhi		.Loop_neon
+
+.Lskip_loop:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	add		r7,r0,#(48+0*9*4)
+	add		r6,r0,#(48+1*9*4)
+	adds		r2,r2,#32
+	it		ne
+	movne		r2,#0
+	bne		.Long_tail
+
+	vadd.i32	d25,d24,d14	@ add hash value and move to #hi
+	vadd.i32	d21,d20,d10
+	vadd.i32	d27,d26,d16
+	vadd.i32	d23,d22,d12
+	vadd.i32	d29,d28,d18
+
+.Long_tail:
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^1
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^2
+
+	vadd.i32	d24,d24,d14	@ can be redundant
+	vmull.u32	q7,d25,d0
+	vadd.i32	d20,d20,d10
+	vmull.u32	q5,d21,d0
+	vadd.i32	d26,d26,d16
+	vmull.u32	q8,d27,d0
+	vadd.i32	d22,d22,d12
+	vmull.u32	q6,d23,d0
+	vadd.i32	d28,d28,d18
+	vmull.u32	q9,d29,d0
+
+	vmlal.u32	q5,d29,d2
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vmlal.u32	q8,d25,d1
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vmlal.u32	q6,d21,d1
+	vmlal.u32	q9,d27,d1
+	vmlal.u32	q7,d23,d1
+
+	vmlal.u32	q8,d23,d3
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q5,d27,d4
+	vld1.32		d8[0],[r6,:32]
+	vmlal.u32	q9,d25,d3
+	vmlal.u32	q6,d29,d4
+	vmlal.u32	q7,d21,d3
+
+	vmlal.u32	q8,d21,d5
+	 it		ne
+	 addne		r7,r0,#(48+2*9*4)
+	vmlal.u32	q5,d25,d6
+	 it		ne
+	 addne		r6,r0,#(48+3*9*4)
+	vmlal.u32	q9,d23,d5
+	vmlal.u32	q6,d27,d6
+	vmlal.u32	q7,d29,d6
+
+	vmlal.u32	q8,d29,d8
+	 vorn		q0,q0,q0	@ all-ones, can be redundant
+	vmlal.u32	q5,d23,d8
+	 vshr.u64	q0,q0,#38
+	vmlal.u32	q9,d21,d7
+	vmlal.u32	q6,d25,d8
+	vmlal.u32	q7,d27,d8
+
+	beq		.Lshort_tail
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	vld4.32		{d0[1],d1[1],d2[1],d3[1]},[r7]!	@ load r^3
+	vld4.32		{d0[0],d1[0],d2[0],d3[0]},[r6]!	@ load r^4
+
+	vmlal.u32	q7,d24,d0
+	vmlal.u32	q5,d20,d0
+	vmlal.u32	q8,d26,d0
+	vmlal.u32	q6,d22,d0
+	vmlal.u32	q9,d28,d0
+
+	vmlal.u32	q5,d28,d2
+	vld4.32		{d4[1],d5[1],d6[1],d7[1]},[r7]!
+	vmlal.u32	q8,d24,d1
+	vld4.32		{d4[0],d5[0],d6[0],d7[0]},[r6]!
+	vmlal.u32	q6,d20,d1
+	vmlal.u32	q9,d26,d1
+	vmlal.u32	q7,d22,d1
+
+	vmlal.u32	q8,d22,d3
+	vld1.32		d8[1],[r7,:32]
+	vmlal.u32	q5,d26,d4
+	vld1.32		d8[0],[r6,:32]
+	vmlal.u32	q9,d24,d3
+	vmlal.u32	q6,d28,d4
+	vmlal.u32	q7,d20,d3
+
+	vmlal.u32	q8,d20,d5
+	vmlal.u32	q5,d24,d6
+	vmlal.u32	q9,d22,d5
+	vmlal.u32	q6,d26,d6
+	vmlal.u32	q7,d28,d6
+
+	vmlal.u32	q8,d28,d8
+	 vorn		q0,q0,q0	@ all-ones
+	vmlal.u32	q5,d22,d8
+	 vshr.u64	q0,q0,#38
+	vmlal.u32	q9,d20,d7
+	vmlal.u32	q6,d24,d8
+	vmlal.u32	q7,d26,d8
+
+.Lshort_tail:
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ horizontal addition
+
+	vadd.i64	d16,d16,d17
+	vadd.i64	d10,d10,d11
+	vadd.i64	d18,d18,d19
+	vadd.i64	d12,d12,d13
+	vadd.i64	d14,d14,d15
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ lazy reduction, but without narrowing
+
+	vshr.u64	q15,q8,#26
+	vand.i64	q8,q8,q0
+	 vshr.u64	q4,q5,#26
+	 vand.i64	q5,q5,q0
+	vadd.i64	q9,q9,q15		@ h3 -> h4
+	 vadd.i64	q6,q6,q4		@ h0 -> h1
+
+	vshr.u64	q15,q9,#26
+	vand.i64	q9,q9,q0
+	 vshr.u64	q4,q6,#26
+	 vand.i64	q6,q6,q0
+	 vadd.i64	q7,q7,q4		@ h1 -> h2
+
+	vadd.i64	q5,q5,q15
+	vshl.u64	q15,q15,#2
+	 vshr.u64	q4,q7,#26
+	 vand.i64	q7,q7,q0
+	vadd.i64	q5,q5,q15		@ h4 -> h0
+	 vadd.i64	q8,q8,q4		@ h2 -> h3
+
+	vshr.u64	q15,q5,#26
+	vand.i64	q5,q5,q0
+	 vshr.u64	q4,q8,#26
+	 vand.i64	q8,q8,q0
+	vadd.i64	q6,q6,q15		@ h0 -> h1
+	 vadd.i64	q9,q9,q4		@ h3 -> h4
+
+	cmp		r2,#0
+	bne		.Leven
+
+	@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+	@ store hash value
+
+	vst4.32		{d10[0],d12[0],d14[0],d16[0]},[r0]!
+	vst1.32		{d18[0]},[r0]
+
+	vldmia	sp!,{d8-d15}			@ epilogue
+	ldmia	sp!,{r4-r7}
+	bx	lr					@ bx	lr
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+#ifndef	__KERNEL__
+.LOPENSSL_armcap:
+# ifdef	_WIN32
+.word	OPENSSL_armcap_P
+# else
+.word	OPENSSL_armcap_P-.Lpoly1305_init
+# endif
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+#endif
+.asciz	"Poly1305 for ARMv4/NEON, CRYPTOGAMS by @dot-asm"
+.align	2
diff --git a/arch/arm/crypto/poly1305-glue.c b/arch/arm/crypto/poly1305-glue.c
new file mode 100644
index 0000000..c31bd8f
--- /dev/null
+++ b/arch/arm/crypto/poly1305-glue.c
@@ -0,0 +1,273 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for ARM
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <crypto/internal/simd.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/jump_label.h>
+#include <linux/module.h>
+
+void poly1305_init_arm(void *state, const u8 *key);
+void poly1305_blocks_arm(void *state, const u8 *src, u32 len, u32 hibit);
+void poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit);
+void poly1305_emit_arm(void *state, u8 *digest, const u32 *nonce);
+
+void __weak poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit)
+{
+}
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
+{
+	poly1305_init_arm(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int arm_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void arm_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit, bool do_neon)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_arm(&dctx->h, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	if (static_branch_likely(&have_neon) && likely(do_neon))
+		poly1305_blocks_neon(&dctx->h, src, len, hibit);
+	else
+		poly1305_blocks_arm(&dctx->h, src, len, hibit);
+}
+
+static void arm_poly1305_do_update(struct poly1305_desc_ctx *dctx,
+				    const u8 *src, u32 len, bool do_neon)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			arm_poly1305_blocks(dctx, dctx->buf,
+					    POLY1305_BLOCK_SIZE, 1, false);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		arm_poly1305_blocks(dctx, src, len, 1, do_neon);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+}
+
+static int arm_poly1305_update(struct shash_desc *desc,
+			       const u8 *src, unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	arm_poly1305_do_update(dctx, src, srclen, false);
+	return 0;
+}
+
+static int __maybe_unused arm_poly1305_update_neon(struct shash_desc *desc,
+						   const u8 *src,
+						   unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+	bool do_neon = crypto_simd_usable() && srclen > 128;
+
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_begin();
+	arm_poly1305_do_update(dctx, src, srclen, do_neon);
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_end();
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	bool do_neon = IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
+		       crypto_simd_usable();
+
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks_arm(&dctx->h, dctx->buf,
+					    POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		if (static_branch_likely(&have_neon) && do_neon) {
+			do {
+				unsigned int todo = min_t(unsigned int, len, SZ_4K);
+
+				kernel_neon_begin();
+				poly1305_blocks_neon(&dctx->h, src, todo, 1);
+				kernel_neon_end();
+
+				len -= todo;
+				src += todo;
+			} while (len);
+		} else {
+			poly1305_blocks_arm(&dctx->h, src, len, 1);
+			src += len;
+		}
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks_arm(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit_arm(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int arm_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg arm_poly1305_algs[] = {{
+	.init			= arm_poly1305_init,
+	.update			= arm_poly1305_update,
+	.final			= arm_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-arm",
+	.base.cra_priority	= 150,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+#ifdef CONFIG_KERNEL_MODE_NEON
+}, {
+	.init			= arm_poly1305_init,
+	.update			= arm_poly1305_update_neon,
+	.final			= arm_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-neon",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+#endif
+}};
+
+static int __init arm_poly1305_mod_init(void)
+{
+	if (IS_ENABLED(CONFIG_KERNEL_MODE_NEON) &&
+	    (elf_hwcap & HWCAP_NEON))
+		static_branch_enable(&have_neon);
+	else if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		/* register only the first entry */
+		return crypto_register_shash(&arm_poly1305_algs[0]);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(arm_poly1305_algs,
+					ARRAY_SIZE(arm_poly1305_algs)) : 0;
+}
+
+static void __exit arm_poly1305_mod_exit(void)
+{
+	if (!IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		return;
+	if (!static_branch_likely(&have_neon)) {
+		crypto_unregister_shash(&arm_poly1305_algs[0]);
+		return;
+	}
+	crypto_unregister_shashes(arm_poly1305_algs,
+				  ARRAY_SIZE(arm_poly1305_algs));
+}
+
+module_init(arm_poly1305_mod_init);
+module_exit(arm_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-arm");
+MODULE_ALIAS_CRYPTO("poly1305-neon");
diff --git a/arch/arm/crypto/sha1-ce-core.S b/arch/arm/crypto/sha1-ce-core.S
index 49a74a4..8a702e0 100644
--- a/arch/arm/crypto/sha1-ce-core.S
+++ b/arch/arm/crypto/sha1-ce-core.S
@@ -10,6 +10,7 @@
 #include <asm/assembler.h>
 
 	.text
+	.arch		armv8-a
 	.fpu		crypto-neon-fp-armv8
 
 	k0		.req	q0
diff --git a/arch/arm/crypto/sha2-ce-core.S b/arch/arm/crypto/sha2-ce-core.S
index 4ad5175..b6369d2 100644
--- a/arch/arm/crypto/sha2-ce-core.S
+++ b/arch/arm/crypto/sha2-ce-core.S
@@ -10,6 +10,7 @@
 #include <asm/assembler.h>
 
 	.text
+	.arch		armv8-a
 	.fpu		crypto-neon-fp-armv8
 
 	k0		.req	q7
diff --git a/arch/arm/crypto/sha256-armv4.pl b/arch/arm/crypto/sha256-armv4.pl
index a03cf4d..d927483 100644
--- a/arch/arm/crypto/sha256-armv4.pl
+++ b/arch/arm/crypto/sha256-armv4.pl
@@ -175,7 +175,6 @@
 #else
 .syntax unified
 # ifdef __thumb2__
-#  define adrl adr
 .thumb
 # else
 .code   32
@@ -471,7 +470,8 @@
 	stmdb	sp!,{r4-r12,lr}
 
 	sub	$H,sp,#16*4+16
-	adrl	$Ktbl,K256
+	adr	$Ktbl,.Lsha256_block_data_order
+	sub	$Ktbl,$Ktbl,#.Lsha256_block_data_order-K256
 	bic	$H,$H,#15		@ align for 128-bit stores
 	mov	$t2,sp
 	mov	sp,$H			@ alloca
diff --git a/arch/arm/crypto/sha256-core.S_shipped b/arch/arm/crypto/sha256-core.S_shipped
index 054aae0..9deb515 100644
--- a/arch/arm/crypto/sha256-core.S_shipped
+++ b/arch/arm/crypto/sha256-core.S_shipped
@@ -56,7 +56,6 @@
 #else
 .syntax unified
 # ifdef __thumb2__
-#  define adrl adr
 .thumb
 # else
 .code   32
@@ -1885,7 +1884,8 @@
 	stmdb	sp!,{r4-r12,lr}
 
 	sub	r11,sp,#16*4+16
-	adrl	r14,K256
+	adr	r14,.Lsha256_block_data_order
+	sub	r14,r14,#.Lsha256_block_data_order-K256
 	bic	r11,r11,#15		@ align for 128-bit stores
 	mov	r12,sp
 	mov	sp,r11			@ alloca
diff --git a/arch/arm/crypto/sha512-armv4.pl b/arch/arm/crypto/sha512-armv4.pl
index 788c17b..2a0bdf7 100644
--- a/arch/arm/crypto/sha512-armv4.pl
+++ b/arch/arm/crypto/sha512-armv4.pl
@@ -212,7 +212,6 @@
 #else
 .syntax unified
 # ifdef __thumb2__
-#  define adrl adr
 .thumb
 # else
 .code   32
@@ -602,7 +601,8 @@
 	dmb				@ errata #451034 on early Cortex A8
 	add	$len,$inp,$len,lsl#7	@ len to point at the end of inp
 	VFP_ABI_PUSH
-	adrl	$Ktbl,K512
+	adr	$Ktbl,.Lsha512_block_data_order
+	sub	$Ktbl,$Ktbl,.Lsha512_block_data_order-K512
 	vldmia	$ctx,{$A-$H}		@ load context
 .Loop_neon:
 ___
diff --git a/arch/arm/crypto/sha512-core.S_shipped b/arch/arm/crypto/sha512-core.S_shipped
index 710ea30..cf5a7a7 100644
--- a/arch/arm/crypto/sha512-core.S_shipped
+++ b/arch/arm/crypto/sha512-core.S_shipped
@@ -79,7 +79,6 @@
 #else
 .syntax unified
 # ifdef __thumb2__
-#  define adrl adr
 .thumb
 # else
 .code   32
@@ -543,7 +542,8 @@
 	dmb				@ errata #451034 on early Cortex A8
 	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
 	VFP_ABI_PUSH
-	adrl	r3,K512
+	adr	r3,.Lsha512_block_data_order
+	sub	r3,r3,.Lsha512_block_data_order-K512
 	vldmia	r0,{d16-d23}		@ load context
 .Loop_neon:
 	vshr.u64	d24,d20,#14	@ 0
diff --git a/arch/arm/include/asm/Kbuild b/arch/arm/include/asm/Kbuild
index 68ca86f..580ed13 100644
--- a/arch/arm/include/asm/Kbuild
+++ b/arch/arm/include/asm/Kbuild
@@ -15,7 +15,6 @@
 generic-y += msi.h
 generic-y += parport.h
 generic-y += preempt.h
-generic-y += seccomp.h
 generic-y += serial.h
 generic-y += trace_clock.h
 
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h
index 3546d29..e20be75 100644
--- a/arch/arm/include/asm/assembler.h
+++ b/arch/arm/include/asm/assembler.h
@@ -269,10 +269,9 @@
 	.endif							;\
 	.popsection
 #define ALT_UP_B(label)					\
-	.equ	up_b_offset, label - 9998b			;\
 	.pushsection ".alt.smp.init", "a"			;\
 	.long	9998b						;\
-	W(b)	. + up_b_offset					;\
+	W(b)	. + (label - 9998b)					;\
 	.popsection
 #else
 #define ALT_SMP(instr...)
@@ -495,4 +494,21 @@
 #define _ASM_NOKPROBE(entry)
 #endif
 
+	/*
+	 * rev_l - byte-swap a 32-bit value
+	 *
+	 * @val: source/destination register
+	 * @tmp: scratch register
+	 */
+	.macro		rev_l, val:req, tmp:req
+	.if		__LINUX_ARM_ARCH__ < 6
+	eor		\tmp, \val, \val, ror #16
+	bic		\tmp, \tmp, #0x00ff0000
+	mov		\val, \val, ror #8
+	eor		\val, \val, \tmp, lsr #8
+	.else
+	rev		\val, \val
+	.endif
+	.endm
+
 #endif /* __ASM_ASSEMBLER_H__ */
diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
index afb7a59..6e8e254 100644
--- a/arch/arm/include/asm/clocksource.h
+++ b/arch/arm/include/asm/clocksource.h
@@ -1,17 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 #ifndef _ASM_CLOCKSOURCE_H
 #define _ASM_CLOCKSOURCE_H
 
-enum vdso_arch_clockmode {
-	/* vdso clocksource not usable */
-	VDSO_CLOCKMODE_NONE,
-	/* vdso clocksource usable */
-	VDSO_CLOCKMODE_ARCHTIMER,
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = VDSO_CLOCKMODE_ARCHTIMER,
-};
+#include <vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	/* Usable for direct VDSO access? */
-	enum vdso_arch_clockmode clock_mode;
+	enum vdso_clock_mode clock_mode;
 };
 
-#endif
+#endif /* _ASM_CLOCKSOURCE_H */
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h
index d2453e2d..a54230e 100644
--- a/arch/arm/include/asm/cp15.h
+++ b/arch/arm/include/asm/cp15.h
@@ -50,25 +50,7 @@
 
 #ifdef CONFIG_CPU_CP15
 
-#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
-	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
-#define __ACCESS_CP15_64(Op1, CRm)		\
-	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
-
-#define __read_sysreg(r, w, c, t) ({				\
-	t __val;						\
-	asm volatile(r " " c : "=r" (__val));			\
-	__val;							\
-})
-#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
-
-#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
-#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
-
-#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
-#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
-
-#define CNTVCT				__ACCESS_CP15_64(1, c14)
+#include <asm/vdso/cp15.h>
 
 extern unsigned long cr_alignment;	/* defined in entry-armv.S */
 
diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h
index 7a88f160..b95848e 100644
--- a/arch/arm/include/asm/hardirq.h
+++ b/arch/arm/include/asm/hardirq.h
@@ -6,29 +6,12 @@
 #include <linux/threads.h>
 #include <asm/irq.h>
 
-/* number of IPIS _not_ including IPI_CPU_BACKTRACE */
-#define NR_IPI	7
-
 typedef struct {
 	unsigned int __softirq_pending;
-#ifdef CONFIG_SMP
-	unsigned int ipi_irqs[NR_IPI];
-#endif
 } ____cacheline_aligned irq_cpustat_t;
 
 #include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */
 
-#define __inc_irq_stat(cpu, member)	__IRQ_STAT(cpu, member)++
-#define __get_irq_stat(cpu, member)	__IRQ_STAT(cpu, member)
-
-#ifdef CONFIG_SMP
-u64 smp_irq_stat_cpu(unsigned int cpu);
-#else
-#define smp_irq_stat_cpu(cpu)	0
-#endif
-
-#define arch_irq_stat_cpu	smp_irq_stat_cpu
-
 #define __ARCH_IRQ_EXIT_IRQS_DISABLED	1
 
 #endif /* __ASM_HARDIRQ_H */
diff --git a/arch/arm/include/asm/kvm_hyp.h b/arch/arm/include/asm/kvm_hyp.h
index 40e9034..3163206 100644
--- a/arch/arm/include/asm/kvm_hyp.h
+++ b/arch/arm/include/asm/kvm_hyp.h
@@ -14,9 +14,6 @@
 
 #define __hyp_text __section(.hyp.text) notrace
 
-#define __ACCESS_VFP(CRn)			\
-	"mrc", "mcr", __stringify(p10, 7, %0, CRn, cr0, 0), u32
-
 #define write_special(v, r)					\
 	asm volatile("msr " __stringify(r) ", %0" : : "r" (v))
 #define read_special(r) ({					\
@@ -79,8 +76,6 @@
 #define CNTV_CTL	__ACCESS_CP15(c14, 0, c3, 1)
 #define CNTHCTL		__ACCESS_CP15(c14, 4, c1, 0)
 
-#define VFP_FPEXC	__ACCESS_VFP(FPEXC)
-
 /* AArch64 compatibility macros, only for the timer so far */
 #define read_sysreg_el0(r)		read_sysreg(r##_EL0)
 #define write_sysreg_el0(v, r)		write_sysreg(v, r##_EL0)
diff --git a/arch/arm/include/asm/processor.h b/arch/arm/include/asm/processor.h
index 614bf82..b924105 100644
--- a/arch/arm/include/asm/processor.h
+++ b/arch/arm/include/asm/processor.h
@@ -14,6 +14,7 @@
 #include <asm/ptrace.h>
 #include <asm/types.h>
 #include <asm/unified.h>
+#include <asm/vdso/processor.h>
 
 #ifdef __KERNEL__
 #define STACK_TOP	((current->personality & ADDR_LIMIT_32BIT) ? \
@@ -85,16 +86,6 @@
 
 unsigned long get_wchan(struct task_struct *p);
 
-#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
-#define cpu_relax()						\
-	do {							\
-		smp_mb();					\
-		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
-	} while (0)
-#else
-#define cpu_relax()			barrier()
-#endif
-
 #define task_pt_regs(p) \
 	((struct pt_regs *)(THREAD_START_SP + task_stack_page(p)) - 1)
 
diff --git a/arch/arm/include/asm/seccomp.h b/arch/arm/include/asm/seccomp.h
new file mode 100644
index 0000000..e9ad0f3
--- /dev/null
+++ b/arch/arm/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_ARM
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"arm"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h
index a91f21e..0ca55a6 100644
--- a/arch/arm/include/asm/smp.h
+++ b/arch/arm/include/asm/smp.h
@@ -39,11 +39,10 @@
  */
 extern void smp_init_cpus(void);
 
-
 /*
- * Provide a function to raise an IPI cross call on CPUs in callmap.
+ * Register IPI interrupts with the arch SMP code
  */
-extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
+extern void set_smp_ipi_range(int ipi_base, int nr_ipi);
 
 /*
  * Called from platform specific assembly code, this is the
diff --git a/arch/arm/include/asm/system_misc.h b/arch/arm/include/asm/system_misc.h
index 66f6a3a..98b3734 100644
--- a/arch/arm/include/asm/system_misc.h
+++ b/arch/arm/include/asm/system_misc.h
@@ -13,7 +13,6 @@
 extern void cpu_init(void);
 
 void soft_restart(unsigned long);
-extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
 extern void (*arm_pm_idle)(void);
 
 #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR
diff --git a/arch/arm/include/asm/topology.h b/arch/arm/include/asm/topology.h
index 8a0fae9..a2edacb 100644
--- a/arch/arm/include/asm/topology.h
+++ b/arch/arm/include/asm/topology.h
@@ -10,6 +10,9 @@
 /* Replace task scheduler's default frequency-invariant accounting */
 #define arch_scale_freq_capacity topology_get_freq_scale
 
+/* Replace task scheduler's default max-frequency-invariant accounting */
+#define arch_scale_max_freq_capacity topology_get_max_freq_scale
+
 /* Replace task scheduler's default cpu-invariant accounting */
 #define arch_scale_cpu_capacity topology_get_cpu_scale
 
diff --git a/arch/arm/include/asm/vdso/clocksource.h b/arch/arm/include/asm/vdso/clocksource.h
new file mode 100644
index 0000000..3a43c12
--- /dev/null
+++ b/arch/arm/include/asm/vdso/clocksource.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_VDSOCLOCKSOURCE_H
+#define __ASM_VDSOCLOCKSOURCE_H
+
+#define VDSO_ARCH_CLOCKMODES					\
+	VDSO_CLOCKMODE_ARCHTIMER,				\
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT = VDSO_CLOCKMODE_ARCHTIMER
+
+#endif /* __ASM_VDSOCLOCKSOURCE_H */
diff --git a/arch/arm/include/asm/vdso/cp15.h b/arch/arm/include/asm/vdso/cp15.h
new file mode 100644
index 0000000..bed16fa
--- /dev/null
+++ b/arch/arm/include/asm/vdso/cp15.h
@@ -0,0 +1,38 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_CP15_H
+#define __ASM_VDSO_CP15_H
+
+#ifndef __ASSEMBLY__
+
+#ifdef CONFIG_CPU_CP15
+
+#include <linux/stringify.h>
+
+#define __ACCESS_CP15(CRn, Op1, CRm, Op2)	\
+	"mrc", "mcr", __stringify(p15, Op1, %0, CRn, CRm, Op2), u32
+#define __ACCESS_CP15_64(Op1, CRm)		\
+	"mrrc", "mcrr", __stringify(p15, Op1, %Q0, %R0, CRm), u64
+
+#define __read_sysreg(r, w, c, t) ({				\
+	t __val;						\
+	asm volatile(r " " c : "=r" (__val));			\
+	__val;							\
+})
+#define read_sysreg(...)		__read_sysreg(__VA_ARGS__)
+
+#define __write_sysreg(v, r, w, c, t)	asm volatile(w " " c : : "r" ((t)(v)))
+#define write_sysreg(v, ...)		__write_sysreg(v, __VA_ARGS__)
+
+#define BPIALL				__ACCESS_CP15(c7, 0, c5, 6)
+#define ICIALLU				__ACCESS_CP15(c7, 0, c5, 0)
+
+#define CNTVCT				__ACCESS_CP15_64(1, c14)
+
+#endif /* CONFIG_CPU_CP15 */
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_CP15_H */
diff --git a/arch/arm/include/asm/vdso/gettimeofday.h b/arch/arm/include/asm/vdso/gettimeofday.h
new file mode 100644
index 0000000..36dc185
--- /dev/null
+++ b/arch/arm/include/asm/vdso/gettimeofday.h
@@ -0,0 +1,145 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2018 ARM Limited
+ */
+#ifndef __ASM_VDSO_GETTIMEOFDAY_H
+#define __ASM_VDSO_GETTIMEOFDAY_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/errno.h>
+#include <asm/unistd.h>
+#include <asm/vdso/cp15.h>
+#include <uapi/linux/time.h>
+
+#define VDSO_HAS_CLOCK_GETRES		1
+
+extern struct vdso_data *__get_datapage(void);
+
+static __always_inline int gettimeofday_fallback(
+				struct __kernel_old_timeval *_tv,
+				struct timezone *_tz)
+{
+	register struct timezone *tz asm("r1") = _tz;
+	register struct __kernel_old_timeval *tv asm("r0") = _tv;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_gettimeofday;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (tv), "r" (tz), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline long clock_gettime_fallback(
+					clockid_t _clkid,
+					struct __kernel_timespec *_ts)
+{
+	register struct __kernel_timespec *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_gettime64;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline long clock_gettime32_fallback(
+					clockid_t _clkid,
+					struct old_timespec32 *_ts)
+{
+	register struct old_timespec32 *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_gettime;
+
+	asm volatile(
+	"	swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline int clock_getres_fallback(
+					clockid_t _clkid,
+					struct __kernel_timespec *_ts)
+{
+	register struct __kernel_timespec *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_getres_time64;
+
+	asm volatile(
+	"       swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static __always_inline int clock_getres32_fallback(
+					clockid_t _clkid,
+					struct old_timespec32 *_ts)
+{
+	register struct old_timespec32 *ts asm("r1") = _ts;
+	register clockid_t clkid asm("r0") = _clkid;
+	register long ret asm ("r0");
+	register long nr asm("r7") = __NR_clock_getres;
+
+	asm volatile(
+	"       swi #0\n"
+	: "=r" (ret)
+	: "r" (clkid), "r" (ts), "r" (nr)
+	: "memory");
+
+	return ret;
+}
+
+static inline bool arm_vdso_hres_capable(void)
+{
+	return IS_ENABLED(CONFIG_ARM_ARCH_TIMER);
+}
+#define __arch_vdso_hres_capable arm_vdso_hres_capable
+
+static __always_inline u64 __arch_get_hw_counter(int clock_mode)
+{
+#ifdef CONFIG_ARM_ARCH_TIMER
+	u64 cycle_now;
+
+	/*
+	 * Core checks for mode already, so this raced against a concurrent
+	 * update. Return something. Core will do another round and then
+	 * see the mode change and fallback to the syscall.
+	 */
+	if (clock_mode == VDSO_CLOCKMODE_NONE)
+		return 0;
+
+	isb();
+	cycle_now = read_sysreg(CNTVCT);
+
+	return cycle_now;
+#else
+	/* Make GCC happy. This is compiled out anyway */
+	return 0;
+#endif
+}
+
+static __always_inline const struct vdso_data *__arch_get_vdso_data(void)
+{
+	return __get_datapage();
+}
+
+#endif /* !__ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
diff --git a/arch/arm/include/asm/vdso/processor.h b/arch/arm/include/asm/vdso/processor.h
new file mode 100644
index 0000000..45efb3f
--- /dev/null
+++ b/arch/arm/include/asm/vdso/processor.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#if __LINUX_ARM_ARCH__ == 6 || defined(CONFIG_ARM_ERRATA_754327)
+#define cpu_relax()						\
+	do {							\
+		smp_mb();					\
+		__asm__ __volatile__("nop; nop; nop; nop; nop; nop; nop; nop; nop; nop;");	\
+	} while (0)
+#else
+#define cpu_relax()			barrier()
+#endif
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/arm/include/asm/vfp.h b/arch/arm/include/asm/vfp.h
index 7157d2a..19928bf 100644
--- a/arch/arm/include/asm/vfp.h
+++ b/arch/arm/include/asm/vfp.h
@@ -9,6 +9,7 @@
 #ifndef __ASM_VFP_H
 #define __ASM_VFP_H
 
+#ifndef CONFIG_AS_VFP_VMRS_FPINST
 #define FPSID			cr0
 #define FPSCR			cr1
 #define MVFR1			cr6
@@ -16,6 +17,7 @@
 #define FPEXC			cr8
 #define FPINST			cr9
 #define FPINST2			cr10
+#endif
 
 /* FPSID bits */
 #define FPSID_IMPLEMENTER_BIT	(24)
diff --git a/arch/arm/include/asm/vfpmacros.h b/arch/arm/include/asm/vfpmacros.h
index 628c336..ba0d4cb 100644
--- a/arch/arm/include/asm/vfpmacros.h
+++ b/arch/arm/include/asm/vfpmacros.h
@@ -8,7 +8,16 @@
 
 #include <asm/vfp.h>
 
-@ Macros to allow building with old toolkits (with no VFP support)
+#ifdef CONFIG_AS_VFP_VMRS_FPINST
+	.macro	VFPFMRX, rd, sysreg, cond
+	vmrs\cond	\rd, \sysreg
+	.endm
+
+	.macro	VFPFMXR, sysreg, rd, cond
+	vmsr\cond	\sysreg, \rd
+	.endm
+#else
+	@ Macros to allow building with old toolkits (with no VFP support)
 	.macro	VFPFMRX, rd, sysreg, cond
 	MRC\cond	p10, 7, \rd, \sysreg, cr0, 0	@ FMRX	\rd, \sysreg
 	.endm
@@ -16,26 +25,29 @@
 	.macro	VFPFMXR, sysreg, rd, cond
 	MCR\cond	p10, 7, \rd, \sysreg, cr0, 0	@ FMXR	\sysreg, \rd
 	.endm
+#endif
 
 	@ read all the working registers back into the VFP
 	.macro	VFPFLDMIA, base, tmp
+	.fpu	vfpv2
 #if __LINUX_ARM_ARCH__ < 6
-	LDC	p11, cr0, [\base],#33*4		    @ FLDMIAX \base!, {d0-d15}
+	fldmiax	\base!, {d0-d15}
 #else
-	LDC	p11, cr0, [\base],#32*4		    @ FLDMIAD \base!, {d0-d15}
+	vldmia	\base!, {d0-d15}
 #endif
 #ifdef CONFIG_VFPv3
+	.fpu	vfpv3
 #if __LINUX_ARM_ARCH__ <= 6
 	ldr	\tmp, =elf_hwcap		    @ may not have MVFR regs
 	ldr	\tmp, [\tmp, #0]
 	tst	\tmp, #HWCAP_VFPD32
-	ldclne	p11, cr0, [\base],#32*4		    @ FLDMIAD \base!, {d16-d31}
+	vldmiane \base!, {d16-d31}
 	addeq	\base, \base, #32*4		    @ step over unused register space
 #else
 	VFPFMRX	\tmp, MVFR0			    @ Media and VFP Feature Register 0
 	and	\tmp, \tmp, #MVFR0_A_SIMD_MASK	    @ A_SIMD field
 	cmp	\tmp, #2			    @ 32 x 64bit registers?
-	ldcleq	p11, cr0, [\base],#32*4		    @ FLDMIAD \base!, {d16-d31}
+	vldmiaeq \base!, {d16-d31}
 	addne	\base, \base, #32*4		    @ step over unused register space
 #endif
 #endif
@@ -44,22 +56,23 @@
 	@ write all the working registers out of the VFP
 	.macro	VFPFSTMIA, base, tmp
 #if __LINUX_ARM_ARCH__ < 6
-	STC	p11, cr0, [\base],#33*4		    @ FSTMIAX \base!, {d0-d15}
+	fstmiax	\base!, {d0-d15}
 #else
-	STC	p11, cr0, [\base],#32*4		    @ FSTMIAD \base!, {d0-d15}
+	vstmia	\base!, {d0-d15}
 #endif
 #ifdef CONFIG_VFPv3
+	.fpu	vfpv3
 #if __LINUX_ARM_ARCH__ <= 6
 	ldr	\tmp, =elf_hwcap		    @ may not have MVFR regs
 	ldr	\tmp, [\tmp, #0]
 	tst	\tmp, #HWCAP_VFPD32
-	stclne	p11, cr0, [\base],#32*4		    @ FSTMIAD \base!, {d16-d31}
+	vstmiane \base!, {d16-d31}
 	addeq	\base, \base, #32*4		    @ step over unused register space
 #else
 	VFPFMRX	\tmp, MVFR0			    @ Media and VFP Feature Register 0
 	and	\tmp, \tmp, #MVFR0_A_SIMD_MASK	    @ A_SIMD field
 	cmp	\tmp, #2			    @ 32 x 64bit registers?
-	stcleq	p11, cr0, [\base],#32*4		    @ FSTMIAD \base!, {d16-d31}
+	vstmiaeq \base!, {d16-d31}
 	addne	\base, \base, #32*4		    @ step over unused register space
 #endif
 #endif
diff --git a/arch/arm/kernel/irq.c b/arch/arm/kernel/irq.c
index ee51403..698b6f6 100644
--- a/arch/arm/kernel/irq.c
+++ b/arch/arm/kernel/irq.c
@@ -18,7 +18,6 @@
  *  IRQ's are in fact implemented a bit like signal handlers for the kernel.
  *  Naturally it's not a 1:1 relation, but there are similarities.
  */
-#include <linux/kernel_stat.h>
 #include <linux/signal.h>
 #include <linux/ioport.h>
 #include <linux/interrupt.h>
diff --git a/arch/arm/kernel/iwmmxt.S b/arch/arm/kernel/iwmmxt.S
index 0dcae78..d2b4ac0 100644
--- a/arch/arm/kernel/iwmmxt.S
+++ b/arch/arm/kernel/iwmmxt.S
@@ -16,6 +16,7 @@
 #include <asm/thread_info.h>
 #include <asm/asm-offsets.h>
 #include <asm/assembler.h>
+#include "iwmmxt.h"
 
 #if defined(CONFIG_CPU_PJ4) || defined(CONFIG_CPU_PJ4B)
 #define PJ4(code...)		code
@@ -113,33 +114,33 @@
 
 concan_dump:
 
-	wstrw	wCSSF, [r1, #MMX_WCSSF]
-	wstrw	wCASF, [r1, #MMX_WCASF]
-	wstrw	wCGR0, [r1, #MMX_WCGR0]
-	wstrw	wCGR1, [r1, #MMX_WCGR1]
-	wstrw	wCGR2, [r1, #MMX_WCGR2]
-	wstrw	wCGR3, [r1, #MMX_WCGR3]
+	wstrw	wCSSF, r1, MMX_WCSSF
+	wstrw	wCASF, r1, MMX_WCASF
+	wstrw	wCGR0, r1, MMX_WCGR0
+	wstrw	wCGR1, r1, MMX_WCGR1
+	wstrw	wCGR2, r1, MMX_WCGR2
+	wstrw	wCGR3, r1, MMX_WCGR3
 
 1:	@ MUP? wRn
 	tst	r2, #0x2
 	beq	2f
 
-	wstrd	wR0,  [r1, #MMX_WR0]
-	wstrd	wR1,  [r1, #MMX_WR1]
-	wstrd	wR2,  [r1, #MMX_WR2]
-	wstrd	wR3,  [r1, #MMX_WR3]
-	wstrd	wR4,  [r1, #MMX_WR4]
-	wstrd	wR5,  [r1, #MMX_WR5]
-	wstrd	wR6,  [r1, #MMX_WR6]
-	wstrd	wR7,  [r1, #MMX_WR7]
-	wstrd	wR8,  [r1, #MMX_WR8]
-	wstrd	wR9,  [r1, #MMX_WR9]
-	wstrd	wR10, [r1, #MMX_WR10]
-	wstrd	wR11, [r1, #MMX_WR11]
-	wstrd	wR12, [r1, #MMX_WR12]
-	wstrd	wR13, [r1, #MMX_WR13]
-	wstrd	wR14, [r1, #MMX_WR14]
-	wstrd	wR15, [r1, #MMX_WR15]
+	wstrd	wR0,  r1, MMX_WR0
+	wstrd	wR1,  r1, MMX_WR1
+	wstrd	wR2,  r1, MMX_WR2
+	wstrd	wR3,  r1, MMX_WR3
+	wstrd	wR4,  r1, MMX_WR4
+	wstrd	wR5,  r1, MMX_WR5
+	wstrd	wR6,  r1, MMX_WR6
+	wstrd	wR7,  r1, MMX_WR7
+	wstrd	wR8,  r1, MMX_WR8
+	wstrd	wR9,  r1, MMX_WR9
+	wstrd	wR10, r1, MMX_WR10
+	wstrd	wR11, r1, MMX_WR11
+	wstrd	wR12, r1, MMX_WR12
+	wstrd	wR13, r1, MMX_WR13
+	wstrd	wR14, r1, MMX_WR14
+	wstrd	wR15, r1, MMX_WR15
 
 2:	teq	r0, #0				@ anything to load?
 	reteq	lr				@ if not, return
@@ -147,30 +148,30 @@
 concan_load:
 
 	@ Load wRn
-	wldrd	wR0,  [r0, #MMX_WR0]
-	wldrd	wR1,  [r0, #MMX_WR1]
-	wldrd	wR2,  [r0, #MMX_WR2]
-	wldrd	wR3,  [r0, #MMX_WR3]
-	wldrd	wR4,  [r0, #MMX_WR4]
-	wldrd	wR5,  [r0, #MMX_WR5]
-	wldrd	wR6,  [r0, #MMX_WR6]
-	wldrd	wR7,  [r0, #MMX_WR7]
-	wldrd	wR8,  [r0, #MMX_WR8]
-	wldrd	wR9,  [r0, #MMX_WR9]
-	wldrd	wR10, [r0, #MMX_WR10]
-	wldrd	wR11, [r0, #MMX_WR11]
-	wldrd	wR12, [r0, #MMX_WR12]
-	wldrd	wR13, [r0, #MMX_WR13]
-	wldrd	wR14, [r0, #MMX_WR14]
-	wldrd	wR15, [r0, #MMX_WR15]
+	wldrd	wR0,  r0, MMX_WR0
+	wldrd	wR1,  r0, MMX_WR1
+	wldrd	wR2,  r0, MMX_WR2
+	wldrd	wR3,  r0, MMX_WR3
+	wldrd	wR4,  r0, MMX_WR4
+	wldrd	wR5,  r0, MMX_WR5
+	wldrd	wR6,  r0, MMX_WR6
+	wldrd	wR7,  r0, MMX_WR7
+	wldrd	wR8,  r0, MMX_WR8
+	wldrd	wR9,  r0, MMX_WR9
+	wldrd	wR10, r0, MMX_WR10
+	wldrd	wR11, r0, MMX_WR11
+	wldrd	wR12, r0, MMX_WR12
+	wldrd	wR13, r0, MMX_WR13
+	wldrd	wR14, r0, MMX_WR14
+	wldrd	wR15, r0, MMX_WR15
 
 	@ Load wCx
-	wldrw	wCSSF, [r0, #MMX_WCSSF]
-	wldrw	wCASF, [r0, #MMX_WCASF]
-	wldrw	wCGR0, [r0, #MMX_WCGR0]
-	wldrw	wCGR1, [r0, #MMX_WCGR1]
-	wldrw	wCGR2, [r0, #MMX_WCGR2]
-	wldrw	wCGR3, [r0, #MMX_WCGR3]
+	wldrw	wCSSF, r0, MMX_WCSSF
+	wldrw	wCASF, r0, MMX_WCASF
+	wldrw	wCGR0, r0, MMX_WCGR0
+	wldrw	wCGR1, r0, MMX_WCGR1
+	wldrw	wCGR2, r0, MMX_WCGR2
+	wldrw	wCGR3, r0, MMX_WCGR3
 
 	@ clear CUP/MUP (only if r1 != 0)
 	teq	r1, #0
diff --git a/arch/arm/kernel/iwmmxt.h b/arch/arm/kernel/iwmmxt.h
new file mode 100644
index 0000000..fb627286
--- /dev/null
+++ b/arch/arm/kernel/iwmmxt.h
@@ -0,0 +1,47 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __IWMMXT_H__
+#define __IWMMXT_H__
+
+.irp b, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
+.set .LwR\b, \b
+.set .Lr\b, \b
+.endr
+
+.set .LwCSSF, 0x2
+.set .LwCASF, 0x3
+.set .LwCGR0, 0x8
+.set .LwCGR1, 0x9
+.set .LwCGR2, 0xa
+.set .LwCGR3, 0xb
+
+.macro wldrd, reg:req, base:req, offset:req
+.inst 0xedd00100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
+.endm
+
+.macro wldrw, reg:req, base:req, offset:req
+.inst 0xfd900100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
+.endm
+
+.macro wstrd, reg:req, base:req, offset:req
+.inst 0xedc00100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
+.endm
+
+.macro wstrw, reg:req, base:req, offset:req
+.inst 0xfd800100 | (.L\reg << 12) | (.L\base << 16) | (\offset >> 2)
+.endm
+
+#ifdef __clang__
+
+#define wCon c1
+
+.macro tmrc, dest:req, control:req
+mrc p1, 0, \dest, \control, c0, 0
+.endm
+
+.macro tmcr, control:req, src:req
+mcr p1, 0, \src, \control, c0, 0
+.endm
+#endif
+
+#endif
diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
index bb18ed0..1076b26 100644
--- a/arch/arm/kernel/reboot.c
+++ b/arch/arm/kernel/reboot.c
@@ -18,7 +18,6 @@
 /*
  * Function pointers to optional machine specific functions
  */
-void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
 void (*pm_power_off)(void);
 EXPORT_SYMBOL(pm_power_off);
 
@@ -138,10 +137,7 @@
 	local_irq_disable();
 	smp_send_stop();
 
-	if (arm_pm_restart)
-		arm_pm_restart(reboot_mode, cmd);
-	else
-		do_kernel_restart(cmd);
+	do_kernel_restart(cmd);
 
 	/* Give a grace period for failure to restart of 1s */
 	mdelay(1000);
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index 43d6a60..4bf3c26 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -1076,6 +1076,20 @@
 #endif
 }
 
+static void (*__arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
+
+static int arm_restart(struct notifier_block *nb, unsigned long action,
+		       void *data)
+{
+	__arm_pm_restart(action, data);
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block arm_restart_nb = {
+	.notifier_call = arm_restart,
+	.priority = 128,
+};
+
 void __init setup_arch(char **cmdline_p)
 {
 	const struct machine_desc *mdesc = NULL;
@@ -1143,8 +1157,10 @@
 	paging_init(mdesc);
 	request_standard_resources(mdesc);
 
-	if (mdesc->restart)
-		arm_pm_restart = mdesc->restart;
+	if (mdesc->restart) {
+		__arm_pm_restart = mdesc->restart;
+		register_restart_handler(&arm_restart_nb);
+	}
 
 	unflatten_device_tree();
 
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 46e1be9..b3279ed 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -26,6 +26,7 @@
 #include <linux/completion.h>
 #include <linux/cpufreq.h>
 #include <linux/irq_work.h>
+#include <linux/kernel_stat.h>
 
 #include <linux/atomic.h>
 #include <asm/bugs.h>
@@ -67,18 +68,26 @@
 	IPI_CPU_STOP,
 	IPI_IRQ_WORK,
 	IPI_COMPLETION,
+	NR_IPI,
 	/*
 	 * CPU_BACKTRACE is special and not included in NR_IPI
 	 * or tracable with trace_ipi_*
 	 */
-	IPI_CPU_BACKTRACE,
+	IPI_CPU_BACKTRACE = NR_IPI,
 	/*
 	 * SGI8-15 can be reserved by secure firmware, and thus may
 	 * not be usable by the kernel. Please keep the above limited
 	 * to at most 8 entries.
 	 */
+	MAX_IPI
 };
 
+static int ipi_irq_base __read_mostly;
+static int nr_ipi __read_mostly = NR_IPI;
+static struct irq_desc *ipi_desc[MAX_IPI] __read_mostly;
+
+static void ipi_setup(int cpu);
+
 static DECLARE_COMPLETION(cpu_running);
 
 static struct smp_operations smp_ops __ro_after_init;
@@ -228,6 +237,17 @@
 	return cpu != 0;
 }
 
+static void ipi_teardown(int cpu)
+{
+	int i;
+
+	if (WARN_ON_ONCE(!ipi_irq_base))
+		return;
+
+	for (i = 0; i < nr_ipi; i++)
+		disable_percpu_irq(ipi_irq_base + i);
+}
+
 /*
  * __cpu_disable runs on the processor to be shutdown.
  */
@@ -249,6 +269,7 @@
 	 * and we must not schedule until we're ready to give up the cpu.
 	 */
 	set_cpu_online(cpu, false);
+	ipi_teardown(cpu);
 
 	/*
 	 * OK - migrate IRQs away from this CPU
@@ -424,6 +445,8 @@
 
 	notify_cpu_starting(cpu);
 
+	ipi_setup(cpu);
+
 	calibrate_delay();
 
 	smp_store_cpu_info(cpu);
@@ -502,14 +525,6 @@
 	}
 }
 
-static void (*__smp_cross_call)(const struct cpumask *, unsigned int);
-
-void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
-{
-	if (!__smp_cross_call)
-		__smp_cross_call = fn;
-}
-
 static const char *ipi_types[NR_IPI] __tracepoint_string = {
 #define S(x,s)	[x] = s
 	S(IPI_WAKEUP, "CPU wakeup interrupts"),
@@ -521,38 +536,28 @@
 	S(IPI_COMPLETION, "completion interrupts"),
 };
 
-static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
-{
-	trace_ipi_raise_rcuidle(target, ipi_types[ipinr]);
-	__smp_cross_call(target, ipinr);
-}
+static void smp_cross_call(const struct cpumask *target, unsigned int ipinr);
 
 void show_ipi_list(struct seq_file *p, int prec)
 {
 	unsigned int cpu, i;
 
 	for (i = 0; i < NR_IPI; i++) {
+		unsigned int irq;
+
+		if (!ipi_desc[i])
+			continue;
+
+		irq = irq_desc_get_irq(ipi_desc[i]);
 		seq_printf(p, "%*s%u: ", prec - 1, "IPI", i);
 
 		for_each_online_cpu(cpu)
-			seq_printf(p, "%10u ",
-				   __get_irq_stat(cpu, ipi_irqs[i]));
+			seq_printf(p, "%10u ", kstat_irqs_cpu(irq, cpu));
 
 		seq_printf(p, " %s\n", ipi_types[i]);
 	}
 }
 
-u64 smp_irq_stat_cpu(unsigned int cpu)
-{
-	u64 sum = 0;
-	int i;
-
-	for (i = 0; i < NR_IPI; i++)
-		sum += __get_irq_stat(cpu, ipi_irqs[i]);
-
-	return sum;
-}
-
 void arch_send_call_function_ipi_mask(const struct cpumask *mask)
 {
 	smp_cross_call(mask, IPI_CALL_FUNC);
@@ -629,15 +634,12 @@
 	handle_IPI(ipinr, regs);
 }
 
-void handle_IPI(int ipinr, struct pt_regs *regs)
+static void do_handle_IPI(int ipinr)
 {
 	unsigned int cpu = smp_processor_id();
-	struct pt_regs *old_regs = set_irq_regs(regs);
 
-	if ((unsigned)ipinr < NR_IPI) {
+	if ((unsigned)ipinr < NR_IPI)
 		trace_ipi_entry_rcuidle(ipi_types[ipinr]);
-		__inc_irq_stat(cpu, ipi_irqs[ipinr]);
-	}
 
 	switch (ipinr) {
 	case IPI_WAKEUP:
@@ -645,9 +647,7 @@
 
 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
 	case IPI_TIMER:
-		irq_enter();
 		tick_receive_broadcast();
-		irq_exit();
 		break;
 #endif
 
@@ -656,36 +656,26 @@
 		break;
 
 	case IPI_CALL_FUNC:
-		irq_enter();
 		generic_smp_call_function_interrupt();
-		irq_exit();
 		break;
 
 	case IPI_CPU_STOP:
-		irq_enter();
 		ipi_cpu_stop(cpu);
-		irq_exit();
 		break;
 
 #ifdef CONFIG_IRQ_WORK
 	case IPI_IRQ_WORK:
-		irq_enter();
 		irq_work_run();
-		irq_exit();
 		break;
 #endif
 
 	case IPI_COMPLETION:
-		irq_enter();
 		ipi_complete(cpu);
-		irq_exit();
 		break;
 
 	case IPI_CPU_BACKTRACE:
 		printk_nmi_enter();
-		irq_enter();
-		nmi_cpu_backtrace(regs);
-		irq_exit();
+		nmi_cpu_backtrace(get_irq_regs());
 		printk_nmi_exit();
 		break;
 
@@ -697,9 +687,67 @@
 
 	if ((unsigned)ipinr < NR_IPI)
 		trace_ipi_exit_rcuidle(ipi_types[ipinr]);
+}
+
+/* Legacy version, should go away once all irqchips have been converted */
+void handle_IPI(int ipinr, struct pt_regs *regs)
+{
+	struct pt_regs *old_regs = set_irq_regs(regs);
+
+	irq_enter();
+	do_handle_IPI(ipinr);
+	irq_exit();
+
 	set_irq_regs(old_regs);
 }
 
+static irqreturn_t ipi_handler(int irq, void *data)
+{
+	do_handle_IPI(irq - ipi_irq_base);
+	return IRQ_HANDLED;
+}
+
+static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
+{
+	trace_ipi_raise_rcuidle(target, ipi_types[ipinr]);
+	__ipi_send_mask(ipi_desc[ipinr], target);
+}
+
+static void ipi_setup(int cpu)
+{
+	int i;
+
+	if (WARN_ON_ONCE(!ipi_irq_base))
+		return;
+
+	for (i = 0; i < nr_ipi; i++)
+		enable_percpu_irq(ipi_irq_base + i, 0);
+}
+
+void __init set_smp_ipi_range(int ipi_base, int n)
+{
+	int i;
+
+	WARN_ON(n < MAX_IPI);
+	nr_ipi = min(n, MAX_IPI);
+
+	for (i = 0; i < nr_ipi; i++) {
+		int err;
+
+		err = request_percpu_irq(ipi_base + i, ipi_handler,
+					 "IPI", &irq_stat);
+		WARN_ON(err);
+
+		ipi_desc[i] = irq_to_desc(ipi_base + i);
+		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
+	}
+
+	ipi_irq_base = ipi_base;
+
+	/* Setup the boot CPU immediately */
+	ipi_setup(smp_processor_id());
+}
+
 void smp_send_reschedule(int cpu)
 {
 	smp_cross_call(cpumask_of(cpu), IPI_RESCHEDULE);
@@ -807,7 +855,7 @@
 
 static void raise_nmi(cpumask_t *mask)
 {
-	__smp_cross_call(mask, IPI_CPU_BACKTRACE);
+	__ipi_send_mask(ipi_desc[IPI_CPU_BACKTRACE], mask);
 }
 
 void arch_trigger_cpumask_backtrace(const cpumask_t *mask, bool exclude_self)
diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile
index b76b75b..5df9dbd 100644
--- a/arch/arm/kvm/Makefile
+++ b/arch/arm/kvm/Makefile
@@ -3,7 +3,7 @@
 # Makefile for Kernel-based Virtual Machine module
 #
 
-plus_virt := $(call as-instr,.arch_extension virt,+virt)
+plus_virt := $(call as-instr,".cpu cortex-a7\n\n.arch_extension virt",+virt)
 ifeq ($(plus_virt),+virt)
 	plus_virt_def := -DREQUIRES_VIRT=1
 endif
diff --git a/arch/arm/kvm/hyp/switch.c b/arch/arm/kvm/hyp/switch.c
index 1efeef3..f5b2769 100644
--- a/arch/arm/kvm/hyp/switch.c
+++ b/arch/arm/kvm/hyp/switch.c
@@ -8,6 +8,7 @@
 #include <asm/kvm_asm.h>
 #include <asm/kvm_hyp.h>
 #include <asm/kvm_mmu.h>
+#include "../../vfp/vfpinstr.h"
 
 __asm__(".arch_extension     virt");
 
@@ -26,10 +27,10 @@
 	 * trap to SVC.  Therefore, always make sure that for 32-bit guests,
 	 * we set FPEXC.EN to prevent traps to SVC, when setting the TCP bits.
 	 */
-	val = read_sysreg(VFP_FPEXC);
+	val = fmrx(FPEXC);
 	*fpexc_host = val;
 	if (!(val & FPEXC_EN)) {
-		write_sysreg(val | FPEXC_EN, VFP_FPEXC);
+		fmxr(FPEXC, val | FPEXC_EN);
 		isb();
 	}
 
@@ -196,7 +197,7 @@
 		__vfp_restore_state(&host_ctxt->vfp);
 	}
 
-	write_sysreg(fpexc, VFP_FPEXC);
+	fmxr(FPEXC, fpexc);
 
 	return exit_code;
 }
diff --git a/arch/arm/kvm/hyp/vfp.S b/arch/arm/kvm/hyp/vfp.S
index 675a523..0870dfe 100644
--- a/arch/arm/kvm/hyp/vfp.S
+++ b/arch/arm/kvm/hyp/vfp.S
@@ -8,6 +8,7 @@
 #include <asm/vfpmacros.h>
 
 	.text
+	.fpu vfpv2
 	.pushsection	.hyp.text, "ax"
 
 /* void __vfp_save_state(struct vfp_hard_struct *vfp); */
diff --git a/arch/arm/kvm/init.S b/arch/arm/kvm/init.S
index 33e34b6..4a8b25f 100644
--- a/arch/arm/kvm/init.S
+++ b/arch/arm/kvm/init.S
@@ -35,6 +35,7 @@
  */
 
 	.text
+	.arch_extension virt
 	.pushsection    .hyp.idmap.text,"ax"
 	.align 5
 __kvm_hyp_init:
diff --git a/arch/arm/kvm/interrupts.S b/arch/arm/kvm/interrupts.S
index 064f4f1..7641652 100644
--- a/arch/arm/kvm/interrupts.S
+++ b/arch/arm/kvm/interrupts.S
@@ -7,6 +7,7 @@
 #include <linux/linkage.h>
 
 	.text
+	.arch_extension virt
 
 /********************************************************************
  *  Call function in Hyp mode
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index ad512f0..ff992f8 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -327,7 +327,7 @@
 	.init_late	= dra7xx_init_late,
 	.init_irq	= omap_gic_of_init,
 	.init_machine	= omap_generic_init,
-	.init_time	= omap3_gptimer_timer_init,
+	.init_time	= omap5_realtime_timer_init,
 	.dt_compat	= dra74x_boards_compat,
 	.restart	= omap44xx_restart,
 MACHINE_END
@@ -350,7 +350,7 @@
 	.init_late	= dra7xx_init_late,
 	.init_irq	= omap_gic_of_init,
 	.init_machine	= omap_generic_init,
-	.init_time	= omap3_gptimer_timer_init,
+	.init_time	= omap5_realtime_timer_init,
 	.dt_compat	= dra72x_boards_compat,
 	.restart	= omap44xx_restart,
 MACHINE_END
diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S
index ac1324c..c4e97d3 100644
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -72,7 +72,7 @@
 	stmfd	sp!, {lr}	@ save registers on stack
 	/* Setup so that we will disable and enable l2 */
 	mov	r1, #0x1
-	adrl	r3, l2dis_3630_offset	@ may be too distant for plain adr
+	adr	r3, l2dis_3630_offset
 	ldr	r2, [r3]		@ value for offset
 	str	r1, [r2, r3]		@ write to l2dis_3630
 	ldmfd	sp!, {pc}	@ restore regs and return
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c
index 1defb83..b92cb1e 100644
--- a/arch/arm/mach-omap2/timer.c
+++ b/arch/arm/mach-omap2/timer.c
@@ -42,7 +42,6 @@
 #include <linux/platform_device.h>
 #include <linux/platform_data/dmtimer-omap.h>
 #include <linux/sched_clock.h>
-#include <linux/cpu.h>
 
 #include <asm/mach/time.h>
 
@@ -421,53 +420,6 @@
 		timer->rate);
 }
 
-static DEFINE_PER_CPU(struct dmtimer_clockevent, dmtimer_percpu_timer);
-
-static int omap_gptimer_starting_cpu(unsigned int cpu)
-{
-	struct dmtimer_clockevent *clkevt = per_cpu_ptr(&dmtimer_percpu_timer, cpu);
-	struct clock_event_device *dev = &clkevt->dev;
-	struct omap_dm_timer *timer = &clkevt->timer;
-
-	clockevents_config_and_register(dev, timer->rate, 3, ULONG_MAX);
-	irq_force_affinity(dev->irq, cpumask_of(cpu));
-
-	return 0;
-}
-
-static int __init dmtimer_percpu_quirk_init(void)
-{
-	struct dmtimer_clockevent *clkevt;
-	struct clock_event_device *dev;
-	struct device_node *arm_timer;
-	struct omap_dm_timer *timer;
-	int cpu = 0;
-
-	arm_timer = of_find_compatible_node(NULL, NULL, "arm,armv7-timer");
-	if (of_device_is_available(arm_timer)) {
-		pr_warn_once("ARM architected timer wrap issue i940 detected\n");
-		return 0;
-	}
-
-	for_each_possible_cpu(cpu) {
-		clkevt = per_cpu_ptr(&dmtimer_percpu_timer, cpu);
-		dev = &clkevt->dev;
-		timer = &clkevt->timer;
-
-		dmtimer_clkevt_init_common(clkevt, 0, "timer_sys_ck",
-					   CLOCK_EVT_FEAT_ONESHOT,
-					   cpumask_of(cpu),
-					   "assigned-clock-parents",
-					   500, "percpu timer");
-	}
-
-	cpuhp_setup_state(CPUHP_AP_OMAP_DM_TIMER_STARTING,
-			  "clockevents/omap/gptimer:starting",
-			  omap_gptimer_starting_cpu, NULL);
-
-	return 0;
-}
-
 /* Clocksource code */
 static struct omap_dm_timer clksrc;
 static bool use_gptimer_clksrc __initdata;
@@ -612,9 +564,6 @@
 					3, /* Timer internal resynch latency */
 					0xffffffff);
 
-	if (soc_is_dra7xx())
-		dmtimer_percpu_quirk_init();
-
 	/* Enable the use of clocksource="gp_timer" kernel parameter */
 	if (use_gptimer_clksrc || gptimer)
 		omap2_gptimer_clocksource_init(clksrc_nr, clksrc_src,
@@ -642,7 +591,7 @@
 #endif /* CONFIG_ARCH_OMAP3 */
 
 #if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_SOC_AM33XX) || \
-	defined(CONFIG_SOC_AM43XX) || defined(CONFIG_SOC_DRA7XX)
+	defined(CONFIG_SOC_AM43XX)
 void __init omap3_gptimer_timer_init(void)
 {
 	__omap_sync32k_timer_init(2, "timer_sys_ck", NULL,
diff --git a/arch/arm/mach-prima2/rstc.c b/arch/arm/mach-prima2/rstc.c
index 9d56606..825dd5f 100644
--- a/arch/arm/mach-prima2/rstc.c
+++ b/arch/arm/mach-prima2/rstc.c
@@ -64,11 +64,18 @@
 
 #define SIRFSOC_SYS_RST_BIT  BIT(31)
 
-static void sirfsoc_restart(enum reboot_mode mode, const char *cmd)
+static int sirfsoc_restart(struct notifier_block *nb, unsigned long action,
+			   void *data)
 {
 	writel(SIRFSOC_SYS_RST_BIT, sirfsoc_rstc_base);
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block sirfsoc_restart_nb = {
+	.notifier_call  = sirfsoc_restart,
+	.priority       = 192,
+};
+
 static int sirfsoc_rstc_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
@@ -79,7 +86,7 @@
 	}
 
 	sirfsoc_reset_controller.of_node = np;
-	arm_pm_restart = sirfsoc_restart;
+	register_restart_handler(&sirfsoc_restart_nb);
 
 	if (IS_ENABLED(CONFIG_RESET_CONTROLLER))
 		reset_controller_register(&sirfsoc_reset_controller);
diff --git a/arch/arm/mach-tegra/cpuidle-tegra114.c b/arch/arm/mach-tegra/cpuidle-tegra114.c
index 5118f77..0ccdcc8 100644
--- a/arch/arm/mach-tegra/cpuidle-tegra114.c
+++ b/arch/arm/mach-tegra/cpuidle-tegra114.c
@@ -51,11 +51,13 @@
 	return index;
 }
 
-static void tegra114_idle_enter_s2idle(struct cpuidle_device *dev,
+static int tegra114_idle_enter_s2idle(struct cpuidle_device *dev,
 				       struct cpuidle_driver *drv,
 				       int index)
 {
        tegra114_idle_power_down(dev, drv, index);
+
+       return 0;
 }
 #endif
 
diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c
index 287ef89..e862b05 100644
--- a/arch/arm/mm/dma-mapping-nommu.c
+++ b/arch/arm/mm/dma-mapping-nommu.c
@@ -209,3 +209,4 @@
 	if (!dev->archdata.dma_coherent)
 		set_dma_ops(dev, &arm_nommu_dma_ops);
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c
index 27576c7..c31c72c 100644
--- a/arch/arm/mm/dma-mapping.c
+++ b/arch/arm/mm/dma-mapping.c
@@ -2320,6 +2320,7 @@
 #endif
 	dev->archdata.dma_ops_setup = true;
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
 
 void arch_teardown_dma_ops(struct device *dev)
 {
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c
index bd0f482..b598e69 100644
--- a/arch/arm/mm/fault.c
+++ b/arch/arm/mm/fault.c
@@ -241,7 +241,7 @@
 	struct mm_struct *mm;
 	int sig, code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	if (kprobe_page_fault(regs, fsr))
 		return 0;
@@ -295,7 +295,7 @@
 	 * signal first. We do not need to release the mmap_sem because
 	 * it would already be released in __lock_page_or_retry in
 	 * mm/filemap.c. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			goto no_context;
 		return 0;
@@ -319,9 +319,6 @@
 					regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			* of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
diff --git a/arch/arm/mm/proc-arm1020.S b/arch/arm/mm/proc-arm1020.S
index 4fa5371..2785da3 100644
--- a/arch/arm/mm/proc-arm1020.S
+++ b/arch/arm/mm/proc-arm1020.S
@@ -491,7 +491,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm1020_proc_info,#object
 __arm1020_proc_info:
diff --git a/arch/arm/mm/proc-arm1020e.S b/arch/arm/mm/proc-arm1020e.S
index 5d8a833..e9ea237 100644
--- a/arch/arm/mm/proc-arm1020e.S
+++ b/arch/arm/mm/proc-arm1020e.S
@@ -449,7 +449,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm1020e_proc_info,#object
 __arm1020e_proc_info:
diff --git a/arch/arm/mm/proc-arm1022.S b/arch/arm/mm/proc-arm1022.S
index b3dd95c..920c279 100644
--- a/arch/arm/mm/proc-arm1022.S
+++ b/arch/arm/mm/proc-arm1022.S
@@ -443,7 +443,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm1022_proc_info,#object
 __arm1022_proc_info:
diff --git a/arch/arm/mm/proc-arm1026.S b/arch/arm/mm/proc-arm1026.S
index ac5afde..0bdf25a 100644
--- a/arch/arm/mm/proc-arm1026.S
+++ b/arch/arm/mm/proc-arm1026.S
@@ -138,7 +138,7 @@
 	mov	ip, #0
 __flush_whole_cache:
 #ifndef CONFIG_CPU_DCACHE_DISABLE
-1:	mrc	p15, 0, r15, c7, c14, 3		@ test, clean, invalidate
+1:	mrc	p15, 0, APSR_nzcv, c7, c14, 3		@ test, clean, invalidate
 	bne	1b
 #endif
 	tst	r2, #VM_EXEC
@@ -363,7 +363,7 @@
 #ifdef CONFIG_MMU
 	mov	r1, #0
 #ifndef CONFIG_CPU_DCACHE_DISABLE
-1:	mrc	p15, 0, r15, c7, c14, 3		@ test, clean, invalidate
+1:	mrc	p15, 0, APSR_nzcv, c7, c14, 3		@ test, clean, invalidate
 	bne	1b
 #endif
 #ifndef CONFIG_CPU_ICACHE_DISABLE
@@ -437,7 +437,7 @@
 	string	cpu_arm1026_name, "ARM1026EJ-S"
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm1026_proc_info,#object
 __arm1026_proc_info:
diff --git a/arch/arm/mm/proc-arm720.S b/arch/arm/mm/proc-arm720.S
index c99d243..39361e1 100644
--- a/arch/arm/mm/proc-arm720.S
+++ b/arch/arm/mm/proc-arm720.S
@@ -172,7 +172,7 @@
  * See <asm/procinfo.h> for a definition of this structure.
  */
 	
-		.section ".proc.info.init", #alloc
+		.section ".proc.info.init", "a"
 
 .macro arm720_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cpu_flush:req
 		.type	__\name\()_proc_info,#object
diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S
index 1b4a383..1a94bbf 100644
--- a/arch/arm/mm/proc-arm740.S
+++ b/arch/arm/mm/proc-arm740.S
@@ -128,7 +128,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 	.type	__arm740_proc_info,#object
 __arm740_proc_info:
 	.long	0x41807400
diff --git a/arch/arm/mm/proc-arm7tdmi.S b/arch/arm/mm/proc-arm7tdmi.S
index 17a4687..52b66cf 100644
--- a/arch/arm/mm/proc-arm7tdmi.S
+++ b/arch/arm/mm/proc-arm7tdmi.S
@@ -72,7 +72,7 @@
 
 		.align
 
-		.section ".proc.info.init", #alloc
+		.section ".proc.info.init", "a"
 
 .macro arm7tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, \
 	extra_hwcaps=0
diff --git a/arch/arm/mm/proc-arm920.S b/arch/arm/mm/proc-arm920.S
index 298c76b..31ac8ac 100644
--- a/arch/arm/mm/proc-arm920.S
+++ b/arch/arm/mm/proc-arm920.S
@@ -434,7 +434,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm920_proc_info,#object
 __arm920_proc_info:
diff --git a/arch/arm/mm/proc-arm922.S b/arch/arm/mm/proc-arm922.S
index 824be3a..ca2c7ca 100644
--- a/arch/arm/mm/proc-arm922.S
+++ b/arch/arm/mm/proc-arm922.S
@@ -412,7 +412,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm922_proc_info,#object
 __arm922_proc_info:
diff --git a/arch/arm/mm/proc-arm925.S b/arch/arm/mm/proc-arm925.S
index d40cff8..a381a0c 100644
--- a/arch/arm/mm/proc-arm925.S
+++ b/arch/arm/mm/proc-arm925.S
@@ -477,7 +477,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro arm925_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
 	.type	__\name\()_proc_info,#object
diff --git a/arch/arm/mm/proc-arm926.S b/arch/arm/mm/proc-arm926.S
index f3cd08f..1ba253c 100644
--- a/arch/arm/mm/proc-arm926.S
+++ b/arch/arm/mm/proc-arm926.S
@@ -131,7 +131,7 @@
 #ifdef CONFIG_CPU_DCACHE_WRITETHROUGH
 	mcr	p15, 0, ip, c7, c6, 0		@ invalidate D cache
 #else
-1:	mrc	p15, 0, r15, c7, c14, 3 	@ test,clean,invalidate
+1:	mrc	p15, 0, APSR_nzcv, c7, c14, 3 	@ test,clean,invalidate
 	bne	1b
 #endif
 	tst	r2, #VM_EXEC
@@ -358,7 +358,7 @@
 	mcr	p15, 0, ip, c7, c6, 0		@ invalidate D cache
 #else
 @ && 'Clean & Invalidate whole DCache'
-1:	mrc	p15, 0, r15, c7, c14, 3 	@ test,clean,invalidate
+1:	mrc	p15, 0, APSR_nzcv, c7, c14, 3 	@ test,clean,invalidate
 	bne	1b
 #endif
 	mcr	p15, 0, ip, c7, c5, 0		@ invalidate I cache
@@ -460,7 +460,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm926_proc_info,#object
 __arm926_proc_info:
diff --git a/arch/arm/mm/proc-arm940.S b/arch/arm/mm/proc-arm940.S
index 1c26d99..4b8a002 100644
--- a/arch/arm/mm/proc-arm940.S
+++ b/arch/arm/mm/proc-arm940.S
@@ -340,7 +340,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__arm940_proc_info,#object
 __arm940_proc_info:
diff --git a/arch/arm/mm/proc-arm946.S b/arch/arm/mm/proc-arm946.S
index 2dc1c75..555becf 100644
--- a/arch/arm/mm/proc-arm946.S
+++ b/arch/arm/mm/proc-arm946.S
@@ -395,7 +395,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 	.type	__arm946_proc_info,#object
 __arm946_proc_info:
 	.long	0x41009460
diff --git a/arch/arm/mm/proc-arm9tdmi.S b/arch/arm/mm/proc-arm9tdmi.S
index 913c06e..ef51753 100644
--- a/arch/arm/mm/proc-arm9tdmi.S
+++ b/arch/arm/mm/proc-arm9tdmi.S
@@ -66,7 +66,7 @@
 
 		.align
 
-		.section ".proc.info.init", #alloc
+		.section ".proc.info.init", "a"
 
 .macro arm9tdmi_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
 		.type	__\name\()_proc_info, #object
diff --git a/arch/arm/mm/proc-fa526.S b/arch/arm/mm/proc-fa526.S
index 8120b6f..dddf833 100644
--- a/arch/arm/mm/proc-fa526.S
+++ b/arch/arm/mm/proc-fa526.S
@@ -185,7 +185,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__fa526_proc_info,#object
 __fa526_proc_info:
diff --git a/arch/arm/mm/proc-feroceon.S b/arch/arm/mm/proc-feroceon.S
index bb6dc34..b12b76b 100644
--- a/arch/arm/mm/proc-feroceon.S
+++ b/arch/arm/mm/proc-feroceon.S
@@ -571,7 +571,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro feroceon_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache:req
 	.type	__\name\()_proc_info,#object
diff --git a/arch/arm/mm/proc-mohawk.S b/arch/arm/mm/proc-mohawk.S
index f083085..d47d6c5 100644
--- a/arch/arm/mm/proc-mohawk.S
+++ b/arch/arm/mm/proc-mohawk.S
@@ -416,7 +416,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__88sv331x_proc_info,#object
 __88sv331x_proc_info:
diff --git a/arch/arm/mm/proc-sa110.S b/arch/arm/mm/proc-sa110.S
index d5bc5d7..baba503b 100644
--- a/arch/arm/mm/proc-sa110.S
+++ b/arch/arm/mm/proc-sa110.S
@@ -196,7 +196,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	.type	__sa110_proc_info,#object
 __sa110_proc_info:
diff --git a/arch/arm/mm/proc-sa1100.S b/arch/arm/mm/proc-sa1100.S
index be7b611..75ebacc 100644
--- a/arch/arm/mm/proc-sa1100.S
+++ b/arch/arm/mm/proc-sa1100.S
@@ -239,7 +239,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro sa1100_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req
 	.type	__\name\()_proc_info,#object
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
index c1c85eb..1dd0d5ca2 100644
--- a/arch/arm/mm/proc-v6.S
+++ b/arch/arm/mm/proc-v6.S
@@ -261,7 +261,7 @@
 	string	cpu_elf_name, "v6"
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	/*
 	 * Match any ARMv6 processor core.
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index c4e8006a..48e0ef6 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -644,7 +644,7 @@
 	string	cpu_elf_name, "v7"
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 	/*
 	 * Standard v7 proc info content
diff --git a/arch/arm/mm/proc-v7m.S b/arch/arm/mm/proc-v7m.S
index 1a49d50..84459c1 100644
--- a/arch/arm/mm/proc-v7m.S
+++ b/arch/arm/mm/proc-v7m.S
@@ -93,7 +93,7 @@
 	ret	lr
 ENDPROC(cpu_cm7_proc_fin)
 
-	.section ".init.text", #alloc, #execinstr
+	.section ".init.text", "ax"
 
 __v7m_cm7_setup:
 	mov	r8, #(V7M_SCB_CCR_DC | V7M_SCB_CCR_IC| V7M_SCB_CCR_BP)
@@ -177,7 +177,7 @@
 	string cpu_elf_name "v7m"
 	string cpu_v7m_name "ARMv7-M"
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro __v7m_proc name, initfunc, cache_fns = nop_cache_fns, hwcaps = 0,  proc_fns = v7m_processor_functions
 	.long	0			/* proc_info_list.__cpu_mm_mmu_flags */
diff --git a/arch/arm/mm/proc-xsc3.S b/arch/arm/mm/proc-xsc3.S
index 1ac0fbb..42eaecc 100644
--- a/arch/arm/mm/proc-xsc3.S
+++ b/arch/arm/mm/proc-xsc3.S
@@ -496,7 +496,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro xsc3_proc_info name:req, cpu_val:req, cpu_mask:req
 	.type	__\name\()_proc_info,#object
diff --git a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S
index bdb2b77..18ac5a1 100644
--- a/arch/arm/mm/proc-xscale.S
+++ b/arch/arm/mm/proc-xscale.S
@@ -610,7 +610,7 @@
 
 	.align
 
-	.section ".proc.info.init", #alloc
+	.section ".proc.info.init", "a"
 
 .macro xscale_proc_info name:req, cpu_val:req, cpu_mask:req, cpu_name:req, cache
 	.type	__\name\()_proc_info,#object
diff --git a/arch/arm/probes/kprobes/test-arm.c b/arch/arm/probes/kprobes/test-arm.c
index 977369f..a0dae35 100644
--- a/arch/arm/probes/kprobes/test-arm.c
+++ b/arch/arm/probes/kprobes/test-arm.c
@@ -55,25 +55,25 @@
 	TEST_GROUP("Data-processing (register), (register-shifted register), (immediate)")
 
 #define _DATA_PROCESSING_DNM(op,s,val)						\
-	TEST_RR(  op "eq" s "	r0,  r",1, VAL1,", r",2, val, "")		\
-	TEST_RR(  op "ne" s "	r1,  r",1, VAL1,", r",2, val, ", lsl #3")	\
-	TEST_RR(  op "cs" s "	r2,  r",3, VAL1,", r",2, val, ", lsr #4")	\
-	TEST_RR(  op "cc" s "	r3,  r",3, VAL1,", r",2, val, ", asr #5")	\
-	TEST_RR(  op "mi" s "	r4,  r",5, VAL1,", r",2, N(val),", asr #6")	\
-	TEST_RR(  op "pl" s "	r5,  r",5, VAL1,", r",2, val, ", ror #7")	\
-	TEST_RR(  op "vs" s "	r6,  r",7, VAL1,", r",2, val, ", rrx")		\
-	TEST_R(   op "vc" s "	r6,  r",7, VAL1,", pc, lsl #3")			\
-	TEST_R(   op "vc" s "	r6,  r",7, VAL1,", sp, lsr #4")			\
-	TEST_R(   op "vc" s "	r6,  pc, r",7, VAL1,", asr #5")			\
-	TEST_R(   op "vc" s "	r6,  sp, r",7, VAL1,", ror #6")			\
-	TEST_RRR( op "hi" s "	r8,  r",9, VAL1,", r",14,val, ", lsl r",0, 3,"")\
-	TEST_RRR( op "ls" s "	r9,  r",9, VAL1,", r",14,val, ", lsr r",7, 4,"")\
-	TEST_RRR( op "ge" s "	r10, r",11,VAL1,", r",14,val, ", asr r",7, 5,"")\
-	TEST_RRR( op "lt" s "	r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
-	TEST_RR(  op "gt" s "	r12, r13"       ", r",14,val, ", ror r",14,7,"")\
-	TEST_RR(  op "le" s "	r14, r",0, val, ", r13"       ", lsl r",14,8,"")\
-	TEST_R(   op "eq" s "	r0,  r",11,VAL1,", #0xf5")			\
-	TEST_R(   op "ne" s "	r11, r",0, VAL1,", #0xf5000000")		\
+	TEST_RR(  op s "eq	r0,  r",1, VAL1,", r",2, val, "")		\
+	TEST_RR(  op s "ne	r1,  r",1, VAL1,", r",2, val, ", lsl #3")	\
+	TEST_RR(  op s "cs	r2,  r",3, VAL1,", r",2, val, ", lsr #4")	\
+	TEST_RR(  op s "cc	r3,  r",3, VAL1,", r",2, val, ", asr #5")	\
+	TEST_RR(  op s "mi	r4,  r",5, VAL1,", r",2, N(val),", asr #6")	\
+	TEST_RR(  op s "pl	r5,  r",5, VAL1,", r",2, val, ", ror #7")	\
+	TEST_RR(  op s "vs	r6,  r",7, VAL1,", r",2, val, ", rrx")		\
+	TEST_R(   op s "vc	r6,  r",7, VAL1,", pc, lsl #3")			\
+	TEST_R(   op s "vc	r6,  r",7, VAL1,", sp, lsr #4")			\
+	TEST_R(   op s "vc	r6,  pc, r",7, VAL1,", asr #5")			\
+	TEST_R(   op s "vc	r6,  sp, r",7, VAL1,", ror #6")			\
+	TEST_RRR( op s "hi	r8,  r",9, VAL1,", r",14,val, ", lsl r",0, 3,"")\
+	TEST_RRR( op s "ls	r9,  r",9, VAL1,", r",14,val, ", lsr r",7, 4,"")\
+	TEST_RRR( op s "ge	r10, r",11,VAL1,", r",14,val, ", asr r",7, 5,"")\
+	TEST_RRR( op s "lt	r11, r",11,VAL1,", r",14,N(val),", asr r",7, 6,"")\
+	TEST_RR(  op s "gt	r12, r13"       ", r",14,val, ", ror r",14,7,"")\
+	TEST_RR(  op s "le	r14, r",0, val, ", r13"       ", lsl r",14,8,"")\
+	TEST_R(   op s "eq	r0,  r",11,VAL1,", #0xf5")			\
+	TEST_R(   op s "ne	r11, r",0, VAL1,", #0xf5000000")		\
 	TEST_R(   op s "	r7,  r",8, VAL2,", #0x000af000")		\
 	TEST(     op s "	r4,  pc"        ", #0x00005a00")
 
@@ -104,23 +104,23 @@
 	TEST_R(   op "	r",8, VAL2,", #0x000af000")
 
 #define _DATA_PROCESSING_DM(op,s,val)					\
-	TEST_R(   op "eq" s "	r0,  r",1, val, "")			\
-	TEST_R(   op "ne" s "	r1,  r",1, val, ", lsl #3")		\
-	TEST_R(   op "cs" s "	r2,  r",3, val, ", lsr #4")		\
-	TEST_R(   op "cc" s "	r3,  r",3, val, ", asr #5")		\
-	TEST_R(   op "mi" s "	r4,  r",5, N(val),", asr #6")		\
-	TEST_R(   op "pl" s "	r5,  r",5, val, ", ror #7")		\
-	TEST_R(   op "vs" s "	r6,  r",10,val, ", rrx")		\
-	TEST(     op "vs" s "	r7,  pc, lsl #3")			\
-	TEST(     op "vs" s "	r7,  sp, lsr #4")			\
-	TEST_RR(  op "vc" s "	r8,  r",7, val, ", lsl r",0, 3,"")	\
-	TEST_RR(  op "hi" s "	r9,  r",9, val, ", lsr r",7, 4,"")	\
-	TEST_RR(  op "ls" s "	r10, r",9, val, ", asr r",7, 5,"")	\
-	TEST_RR(  op "ge" s "	r11, r",11,N(val),", asr r",7, 6,"")	\
-	TEST_RR(  op "lt" s "	r12, r",11,val, ", ror r",14,7,"")	\
-	TEST_R(   op "gt" s "	r14, r13"       ", lsl r",14,8,"")	\
-	TEST(     op "eq" s "	r0,  #0xf5")				\
-	TEST(     op "ne" s "	r11, #0xf5000000")			\
+	TEST_R(   op s "eq	r0,  r",1, val, "")			\
+	TEST_R(   op s "ne	r1,  r",1, val, ", lsl #3")		\
+	TEST_R(   op s "cs	r2,  r",3, val, ", lsr #4")		\
+	TEST_R(   op s "cc	r3,  r",3, val, ", asr #5")		\
+	TEST_R(   op s "mi	r4,  r",5, N(val),", asr #6")		\
+	TEST_R(   op s "pl	r5,  r",5, val, ", ror #7")		\
+	TEST_R(   op s "vs	r6,  r",10,val, ", rrx")		\
+	TEST(     op s "vs	r7,  pc, lsl #3")			\
+	TEST(     op s "vs	r7,  sp, lsr #4")			\
+	TEST_RR(  op s "vc	r8,  r",7, val, ", lsl r",0, 3,"")	\
+	TEST_RR(  op s "hi	r9,  r",9, val, ", lsr r",7, 4,"")	\
+	TEST_RR(  op s "ls	r10, r",9, val, ", asr r",7, 5,"")	\
+	TEST_RR(  op s "ge	r11, r",11,N(val),", asr r",7, 6,"")	\
+	TEST_RR(  op s "lt	r12, r",11,val, ", ror r",14,7,"")	\
+	TEST_R(   op s "gt	r14, r13"       ", lsl r",14,8,"")	\
+	TEST(     op s "eq	r0,  #0xf5")				\
+	TEST(     op s "ne	r11, #0xf5000000")			\
 	TEST(     op s "	r7,  #0x000af000")			\
 	TEST(     op s "	r4,  #0x00005a00")
 
@@ -166,10 +166,10 @@
 
 	/* Data-processing with PC as a target and status registers updated */
 	TEST_UNSUPPORTED("movs	pc, r1")
-	TEST_UNSUPPORTED("movs	pc, r1, lsl r2")
+	TEST_UNSUPPORTED(__inst_arm(0xe1b0f211) "	@movs	pc, r1, lsl r2")
 	TEST_UNSUPPORTED("movs	pc, #0x10000")
 	TEST_UNSUPPORTED("adds	pc, lr, r1")
-	TEST_UNSUPPORTED("adds	pc, lr, r1, lsl r2")
+	TEST_UNSUPPORTED(__inst_arm(0xe09ef211) "	@adds	pc, lr, r1, lsl r2")
 	TEST_UNSUPPORTED("adds	pc, lr, #4")
 
 	/* Data-processing with SP as target */
@@ -352,7 +352,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe000029f) " @ mul r0, pc, r2")
 	TEST_UNSUPPORTED(__inst_arm(0xe0000f91) " @ mul r0, r1, pc")
 	TEST_RR(    "muls	r0, r",1, VAL1,", r",2, VAL2,"")
-	TEST_RR(    "mullss	r7, r",8, VAL2,", r",9, VAL2,"")
+	TEST_RR(    "mulsls	r7, r",8, VAL2,", r",9, VAL2,"")
 	TEST_R(     "muls	lr, r",4, VAL3,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe01f0291) " @ muls pc, r1, r2")
 
@@ -361,7 +361,7 @@
 	TEST_RR(     "mla	lr, r",1, VAL2,", r",2, VAL3,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe02f3291) " @ mla pc, r1, r2, r3")
 	TEST_RRR(    "mlas	r0, r",1, VAL1,", r",2, VAL2,", r",3,  VAL3,"")
-	TEST_RRR(    "mlahis	r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
+	TEST_RRR(    "mlashi	r7, r",8, VAL3,", r",9, VAL1,", r",10, VAL2,"")
 	TEST_RR(     "mlas	lr, r",1, VAL2,", r",2, VAL3,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe03f3291) " @ mlas pc, r1, r2, r3")
 
@@ -394,7 +394,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe081f392) " @ umull pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe08f1392) " @ umull r1, pc, r2, r3")
 	TEST_RR(  "umulls	r0, r1, r",2, VAL1,", r",3, VAL2,"")
-	TEST_RR(  "umulllss	r7, r8, r",9, VAL2,", r",10, VAL1,"")
+	TEST_RR(  "umullsls	r7, r8, r",9, VAL2,", r",10, VAL1,"")
 	TEST_R(   "umulls	lr, r12, r",11,VAL3,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe091f392) " @ umulls pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe09f1392) " @ umulls r1, pc, r2, r3")
@@ -405,7 +405,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0af1392) " @ umlal pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0a1f392) " @ umlal r1, pc, r2, r3")
 	TEST_RRRR(  "umlals	r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
-	TEST_RRRR(  "umlalles	r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
+	TEST_RRRR(  "umlalsle	r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 	TEST_RRR(   "umlals	r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe0bf1392) " @ umlals pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0b1f392) " @ umlals r1, pc, r2, r3")
@@ -416,7 +416,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0c1f392) " @ smull pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0cf1392) " @ smull r1, pc, r2, r3")
 	TEST_RR(  "smulls	r0, r1, r",2, VAL1,", r",3, VAL2,"")
-	TEST_RR(  "smulllss	r7, r8, r",9, VAL2,", r",10, VAL1,"")
+	TEST_RR(  "smullsls	r7, r8, r",9, VAL2,", r",10, VAL1,"")
 	TEST_R(   "smulls	lr, r12, r",11,VAL3,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe0d1f392) " @ smulls pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0df1392) " @ smulls r1, pc, r2, r3")
@@ -427,7 +427,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0ef1392) " @ smlal pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0e1f392) " @ smlal r1, pc, r2, r3")
 	TEST_RRRR(  "smlals	r",0, VAL1,", r",1, VAL2,", r",2, VAL3,", r",3, VAL4)
-	TEST_RRRR(  "smlalles	r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
+	TEST_RRRR(  "smlalsle	r",8, VAL4,", r",9, VAL1,", r",10,VAL2,", r",11,VAL3)
 	TEST_RRR(   "smlals	r",14,VAL3,", r",7, VAL4,", r",5, VAL1,", r13")
 	TEST_UNSUPPORTED(__inst_arm(0xe0ff1392) " @ smlals pc, r1, r2, r3")
 	TEST_UNSUPPORTED(__inst_arm(0xe0f0f392) " @ smlals r0, pc, r2, r3")
@@ -450,7 +450,7 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe10f0091) " @ swp r0, r1, [pc]")
 #if __LINUX_ARM_ARCH__ < 6
 	TEST_RP("swpb	lr, r",7,VAL2,", [r",8,0,"]")
-	TEST_R( "swpvsb	r0, r",1,VAL1,", [sp]")
+	TEST_R( "swpbvs	r0, r",1,VAL1,", [sp]")
 #else
 	TEST_UNSUPPORTED(__inst_arm(0xe148e097) " @ swpb	lr, r7, [r8]")
 	TEST_UNSUPPORTED(__inst_arm(0x614d0091) " @ swpvsb	r0, r1, [sp]")
@@ -477,11 +477,11 @@
 	TEST_GROUP("Extra load/store instructions")
 
 	TEST_RPR(  "strh	r",0, VAL1,", [r",1, 48,", -r",2, 24,"]")
-	TEST_RPR(  "streqh	r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
-	TEST_UNSUPPORTED(  "streqh	r14, [r13, r12]")
-	TEST_UNSUPPORTED(  "streqh	r14, [r12, r13]")
+	TEST_RPR(  "strheq	r",14,VAL2,", [r",11,0, ", r",12, 48,"]")
+	TEST_UNSUPPORTED(  "strheq	r14, [r13, r12]")
+	TEST_UNSUPPORTED(  "strheq	r14, [r12, r13]")
 	TEST_RPR(  "strh	r",1, VAL1,", [r",2, 24,", r",3,  48,"]!")
-	TEST_RPR(  "strneh	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
+	TEST_RPR(  "strhne	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
 	TEST_RPR(  "strh	r",2, VAL1,", [r",3, 24,"], r",4, 48,"")
 	TEST_RPR(  "strh	r",10,VAL2,", [r",9, 48,"], -r",11,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1afc0ba) "	@ strh r12, [pc, r10]!")
@@ -489,9 +489,9 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe089a0bf) "	@ strh r10, [r9], pc")
 
 	TEST_PR(   "ldrh	r0, [r",0,  48,", -r",2, 24,"]")
-	TEST_PR(   "ldrcsh	r14, [r",13,0, ", r",12, 48,"]")
+	TEST_PR(   "ldrhcs	r14, [r",13,0, ", r",12, 48,"]")
 	TEST_PR(   "ldrh	r1, [r",2,  24,", r",3,  48,"]!")
-	TEST_PR(   "ldrcch	r12, [r",11,48,", -r",10,24,"]!")
+	TEST_PR(   "ldrhcc	r12, [r",11,48,", -r",10,24,"]!")
 	TEST_PR(   "ldrh	r2, [r",3,  24,"], r",4, 48,"")
 	TEST_PR(   "ldrh	r10, [r",9, 48,"], -r",11,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1bfc0ba) "	@ ldrh r12, [pc, r10]!")
@@ -499,9 +499,9 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe099a0bf) "	@ ldrh r10, [r9], pc")
 
 	TEST_RP(   "strh	r",0, VAL1,", [r",1, 24,", #-2]")
-	TEST_RP(   "strmih	r",14,VAL2,", [r",13,0, ", #2]")
+	TEST_RP(   "strhmi	r",14,VAL2,", [r",13,0, ", #2]")
 	TEST_RP(   "strh	r",1, VAL1,", [r",2, 24,", #4]!")
-	TEST_RP(   "strplh	r",12,VAL2,", [r",11,24,", #-4]!")
+	TEST_RP(   "strhpl	r",12,VAL2,", [r",11,24,", #-4]!")
 	TEST_RP(   "strh	r",2, VAL1,", [r",3, 24,"], #48")
 	TEST_RP(   "strh	r",10,VAL2,", [r",9, 64,"], #-48")
 	TEST_RP(   "strh	r",3, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
@@ -511,9 +511,9 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0c9f3b0) "	@ strh pc, [r9], #48")
 
 	TEST_P(	   "ldrh	r0, [r",0,  24,", #-2]")
-	TEST_P(	   "ldrvsh	r14, [r",13,0, ", #2]")
+	TEST_P(	   "ldrhvs	r14, [r",13,0, ", #2]")
 	TEST_P(	   "ldrh	r1, [r",2,  24,", #4]!")
-	TEST_P(	   "ldrvch	r12, [r",11,24,", #-4]!")
+	TEST_P(	   "ldrhvc	r12, [r",11,24,", #-4]!")
 	TEST_P(	   "ldrh	r2, [r",3,  24,"], #48")
 	TEST_P(	   "ldrh	r10, [r",9, 64,"], #-48")
 	TEST(      "ldrh	r0, [pc, #0]")
@@ -521,18 +521,18 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0d9f3b0) "	@ ldrh pc, [r9], #48")
 
 	TEST_PR(   "ldrsb	r0, [r",0,  48,", -r",2, 24,"]")
-	TEST_PR(   "ldrhisb	r14, [r",13,0,", r",12,  48,"]")
+	TEST_PR(   "ldrsbhi	r14, [r",13,0,", r",12,  48,"]")
 	TEST_PR(   "ldrsb	r1, [r",2,  24,", r",3,  48,"]!")
-	TEST_PR(   "ldrlssb	r12, [r",11,48,", -r",10,24,"]!")
+	TEST_PR(   "ldrsbls	r12, [r",11,48,", -r",10,24,"]!")
 	TEST_PR(   "ldrsb	r2, [r",3,  24,"], r",4, 48,"")
 	TEST_PR(   "ldrsb	r10, [r",9, 48,"], -r",11,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1bfc0da) "	@ ldrsb r12, [pc, r10]!")
 	TEST_UNSUPPORTED(__inst_arm(0xe099f0db) "	@ ldrsb pc, [r9], r11")
 
 	TEST_P(	   "ldrsb	r0, [r",0,  24,", #-1]")
-	TEST_P(	   "ldrgesb	r14, [r",13,0, ", #1]")
+	TEST_P(	   "ldrsbge	r14, [r",13,0, ", #1]")
 	TEST_P(	   "ldrsb	r1, [r",2,  24,", #4]!")
-	TEST_P(	   "ldrltsb	r12, [r",11,24,", #-4]!")
+	TEST_P(	   "ldrsblt	r12, [r",11,24,", #-4]!")
 	TEST_P(	   "ldrsb	r2, [r",3,  24,"], #48")
 	TEST_P(	   "ldrsb	r10, [r",9, 64,"], #-48")
 	TEST(      "ldrsb	r0, [pc, #0]")
@@ -540,18 +540,18 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe0d9f3d0) "	@ ldrsb pc, [r9], #48")
 
 	TEST_PR(   "ldrsh	r0, [r",0,  48,", -r",2, 24,"]")
-	TEST_PR(   "ldrgtsh	r14, [r",13,0, ", r",12, 48,"]")
+	TEST_PR(   "ldrshgt	r14, [r",13,0, ", r",12, 48,"]")
 	TEST_PR(   "ldrsh	r1, [r",2,  24,", r",3,  48,"]!")
-	TEST_PR(   "ldrlesh	r12, [r",11,48,", -r",10,24,"]!")
+	TEST_PR(   "ldrshle	r12, [r",11,48,", -r",10,24,"]!")
 	TEST_PR(   "ldrsh	r2, [r",3,  24,"], r",4, 48,"")
 	TEST_PR(   "ldrsh	r10, [r",9, 48,"], -r",11,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1bfc0fa) "	@ ldrsh r12, [pc, r10]!")
 	TEST_UNSUPPORTED(__inst_arm(0xe099f0fb) "	@ ldrsh pc, [r9], r11")
 
 	TEST_P(	   "ldrsh	r0, [r",0,  24,", #-1]")
-	TEST_P(	   "ldreqsh	r14, [r",13,0 ,", #1]")
+	TEST_P(	   "ldrsheq	r14, [r",13,0 ,", #1]")
 	TEST_P(	   "ldrsh	r1, [r",2,  24,", #4]!")
-	TEST_P(	   "ldrnesh	r12, [r",11,24,", #-4]!")
+	TEST_P(	   "ldrshne	r12, [r",11,24,", #-4]!")
 	TEST_P(	   "ldrsh	r2, [r",3,  24,"], #48")
 	TEST_P(	   "ldrsh	r10, [r",9, 64,"], #-48")
 	TEST(      "ldrsh	r0, [pc, #0]")
@@ -571,30 +571,30 @@
 
 #if __LINUX_ARM_ARCH__ >= 5
 	TEST_RPR(  "strd	r",0, VAL1,", [r",1, 48,", -r",2,24,"]")
-	TEST_RPR(  "strccd	r",8, VAL2,", [r",11,0, ", r",12,48,"]")
-	TEST_UNSUPPORTED(  "strccd r8, [r13, r12]")
-	TEST_UNSUPPORTED(  "strccd r8, [r12, r13]")
+	TEST_RPR(  "strdcc	r",8, VAL2,", [r",11,0, ", r",12,48,"]")
+	TEST_UNSUPPORTED(  "strdcc r8, [r13, r12]")
+	TEST_UNSUPPORTED(  "strdcc r8, [r12, r13]")
 	TEST_RPR(  "strd	r",4, VAL1,", [r",2, 24,", r",3, 48,"]!")
-	TEST_RPR(  "strcsd	r",12,VAL2,", [r",11,48,", -r",10,24,"]!")
-	TEST_RPR(  "strd	r",2, VAL1,", [r",5, 24,"], r",4,48,"")
-	TEST_RPR(  "strd	r",10,VAL2,", [r",9, 48,"], -r",7,24,"")
+	TEST_RPR(  "strdcs	r",12,VAL2,", r13, [r",11,48,", -r",10,24,"]!")
+	TEST_RPR(  "strd	r",2, VAL1,", r3, [r",5, 24,"], r",4,48,"")
+	TEST_RPR(  "strd	r",10,VAL2,", r11, [r",9, 48,"], -r",7,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1afc0fa) "	@ strd r12, [pc, r10]!")
 
 	TEST_PR(   "ldrd	r0, [r",0, 48,", -r",2,24,"]")
-	TEST_PR(   "ldrmid	r8, [r",13,0, ", r",12,48,"]")
+	TEST_PR(   "ldrdmi	r8, [r",13,0, ", r",12,48,"]")
 	TEST_PR(   "ldrd	r4, [r",2, 24,", r",3, 48,"]!")
-	TEST_PR(   "ldrpld	r6, [r",11,48,", -r",10,24,"]!")
-	TEST_PR(   "ldrd	r2, [r",5, 24,"], r",4,48,"")
-	TEST_PR(   "ldrd	r10, [r",9,48,"], -r",7,24,"")
+	TEST_PR(   "ldrdpl	r6, [r",11,48,", -r",10,24,"]!")
+	TEST_PR(   "ldrd	r2, r3, [r",5, 24,"], r",4,48,"")
+	TEST_PR(   "ldrd	r10, r11, [r",9,48,"], -r",7,24,"")
 	TEST_UNSUPPORTED(__inst_arm(0xe1afc0da) "	@ ldrd r12, [pc, r10]!")
 	TEST_UNSUPPORTED(__inst_arm(0xe089f0db) "	@ ldrd pc, [r9], r11")
 	TEST_UNSUPPORTED(__inst_arm(0xe089e0db) "	@ ldrd lr, [r9], r11")
 	TEST_UNSUPPORTED(__inst_arm(0xe089c0df) "	@ ldrd r12, [r9], pc")
 
 	TEST_RP(   "strd	r",0, VAL1,", [r",1, 24,", #-8]")
-	TEST_RP(   "strvsd	r",8, VAL2,", [r",13,0, ", #8]")
+	TEST_RP(   "strdvs	r",8, VAL2,", [r",13,0, ", #8]")
 	TEST_RP(   "strd	r",4, VAL1,", [r",2, 24,", #16]!")
-	TEST_RP(   "strvcd	r",12,VAL2,", [r",11,24,", #-16]!")
+	TEST_RP(   "strdvc	r",12,VAL2,", r13, [r",11,24,", #-16]!")
 	TEST_RP(   "strd	r",2, VAL1,", [r",4, 24,"], #48")
 	TEST_RP(   "strd	r",10,VAL2,", [r",9, 64,"], #-48")
 	TEST_RP(   "strd	r",6, VAL1,", [r",13,TEST_MEMORY_SIZE,", #-"__stringify(MAX_STACK_SIZE)"]!")
@@ -603,9 +603,9 @@
 	TEST_UNSUPPORTED(__inst_arm(0xe1efc3f0) "	@ strd r12, [pc, #48]!")
 
 	TEST_P(	   "ldrd	r0, [r",0, 24,", #-8]")
-	TEST_P(	   "ldrhid	r8, [r",13,0, ", #8]")
+	TEST_P(	   "ldrdhi	r8, [r",13,0, ", #8]")
 	TEST_P(	   "ldrd	r4, [r",2, 24,", #16]!")
-	TEST_P(	   "ldrlsd	r6, [r",11,24,", #-16]!")
+	TEST_P(	   "ldrdls	r6, [r",11,24,", #-16]!")
 	TEST_P(	   "ldrd	r2, [r",5, 24,"], #48")
 	TEST_P(	   "ldrd	r10, [r",9,6,"], #-48")
 	TEST_UNSUPPORTED(__inst_arm(0xe1efc3d0) "	@ ldrd r12, [pc, #48]!")
@@ -1084,63 +1084,63 @@
 	TEST_GROUP("Branch, branch with link, and block data transfer")
 
 	TEST_P(   "stmda	r",0, 16*4,", {r0}")
-	TEST_P(   "stmeqda	r",4, 16*4,", {r0-r15}")
-	TEST_P(   "stmneda	r",8, 16*4,"!, {r8-r15}")
+	TEST_P(   "stmdaeq	r",4, 16*4,", {r0-r15}")
+	TEST_P(   "stmdane	r",8, 16*4,"!, {r8-r15}")
 	TEST_P(   "stmda	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_P(   "stmda	r",13,0,   "!, {pc}")
 
 	TEST_P(   "ldmda	r",0, 16*4,", {r0}")
-	TEST_BF_P("ldmcsda	r",4, 15*4,", {r0-r15}")
-	TEST_BF_P("ldmccda	r",7, 15*4,"!, {r8-r15}")
+	TEST_BF_P("ldmdacs	r",4, 15*4,", {r0-r15}")
+	TEST_BF_P("ldmdacc	r",7, 15*4,"!, {r8-r15}")
 	TEST_P(   "ldmda	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_BF_P("ldmda	r",14,15*4,"!, {pc}")
 
 	TEST_P(   "stmia	r",0, 16*4,", {r0}")
-	TEST_P(   "stmmiia	r",4, 16*4,", {r0-r15}")
-	TEST_P(   "stmplia	r",8, 16*4,"!, {r8-r15}")
+	TEST_P(   "stmiami	r",4, 16*4,", {r0-r15}")
+	TEST_P(   "stmiapl	r",8, 16*4,"!, {r8-r15}")
 	TEST_P(   "stmia	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_P(   "stmia	r",14,0,   "!, {pc}")
 
 	TEST_P(   "ldmia	r",0, 16*4,", {r0}")
-	TEST_BF_P("ldmvsia	r",4, 0,   ", {r0-r15}")
-	TEST_BF_P("ldmvcia	r",7, 8*4, "!, {r8-r15}")
+	TEST_BF_P("ldmiavs	r",4, 0,   ", {r0-r15}")
+	TEST_BF_P("ldmiavc	r",7, 8*4, "!, {r8-r15}")
 	TEST_P(   "ldmia	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_BF_P("ldmia	r",14,15*4,"!, {pc}")
 
 	TEST_P(   "stmdb	r",0, 16*4,", {r0}")
-	TEST_P(   "stmhidb	r",4, 16*4,", {r0-r15}")
-	TEST_P(   "stmlsdb	r",8, 16*4,"!, {r8-r15}")
+	TEST_P(   "stmdbhi	r",4, 16*4,", {r0-r15}")
+	TEST_P(   "stmdbls	r",8, 16*4,"!, {r8-r15}")
 	TEST_P(   "stmdb	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_P(   "stmdb	r",13,4,   "!, {pc}")
 
 	TEST_P(   "ldmdb	r",0, 16*4,", {r0}")
-	TEST_BF_P("ldmgedb	r",4, 16*4,", {r0-r15}")
-	TEST_BF_P("ldmltdb	r",7, 16*4,"!, {r8-r15}")
+	TEST_BF_P("ldmdbge	r",4, 16*4,", {r0-r15}")
+	TEST_BF_P("ldmdblt	r",7, 16*4,"!, {r8-r15}")
 	TEST_P(   "ldmdb	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_BF_P("ldmdb	r",14,16*4,"!, {pc}")
 
 	TEST_P(   "stmib	r",0, 16*4,", {r0}")
-	TEST_P(   "stmgtib	r",4, 16*4,", {r0-r15}")
-	TEST_P(   "stmleib	r",8, 16*4,"!, {r8-r15}")
+	TEST_P(   "stmibgt	r",4, 16*4,", {r0-r15}")
+	TEST_P(   "stmible	r",8, 16*4,"!, {r8-r15}")
 	TEST_P(   "stmib	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_P(   "stmib	r",13,-4,  "!, {pc}")
 
 	TEST_P(   "ldmib	r",0, 16*4,", {r0}")
-	TEST_BF_P("ldmeqib	r",4, -4,", {r0-r15}")
-	TEST_BF_P("ldmneib	r",7, 7*4,"!, {r8-r15}")
+	TEST_BF_P("ldmibeq	r",4, -4,", {r0-r15}")
+	TEST_BF_P("ldmibne	r",7, 7*4,"!, {r8-r15}")
 	TEST_P(   "ldmib	r",12,16*4,"!, {r1,r3,r5,r7,r8-r11,r14}")
 	TEST_BF_P("ldmib	r",14,14*4,"!, {pc}")
 
 	TEST_P(   "stmdb	r",13,16*4,"!, {r3-r12,lr}")
-	TEST_P(	  "stmeqdb	r",13,16*4,"!, {r3-r12}")
-	TEST_P(   "stmnedb	r",2, 16*4,", {r3-r12,lr}")
+	TEST_P(	  "stmdbeq	r",13,16*4,"!, {r3-r12}")
+	TEST_P(   "stmdbne	r",2, 16*4,", {r3-r12,lr}")
 	TEST_P(   "stmdb	r",13,16*4,"!, {r2-r12,lr}")
 	TEST_P(   "stmdb	r",0, 16*4,", {r0-r12}")
 	TEST_P(   "stmdb	r",0, 16*4,", {r0-r12,lr}")
 
 	TEST_BF_P("ldmia	r",13,5*4, "!, {r3-r12,pc}")
-	TEST_P(	  "ldmccia	r",13,5*4, "!, {r3-r12}")
-	TEST_BF_P("ldmcsia	r",2, 5*4, "!, {r3-r12,pc}")
+	TEST_P(	  "ldmiacc	r",13,5*4, "!, {r3-r12}")
+	TEST_BF_P("ldmiacs	r",2, 5*4, "!, {r3-r12,pc}")
 	TEST_BF_P("ldmia	r",13,4*4, "!, {r2-r12,pc}")
 	TEST_P(   "ldmia	r",0, 16*4,", {r0-r12}")
 	TEST_P(   "ldmia	r",0, 16*4,", {r0-r12,lr}")
@@ -1174,80 +1174,80 @@
 #define TEST_COPROCESSOR(code) TEST_UNSUPPORTED(code)
 
 #define COPROCESSOR_INSTRUCTIONS_ST_LD(two,cc)					\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13, #4]")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13, #-4]")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13, #4]!")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13, #-4]!")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13], #4")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13], #-4")			\
-	TEST_COPROCESSOR("stc"two"	0, cr0, [r13], {1}")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13, #4]")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13, #-4]")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13, #4]!")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13, #-4]!")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13], #4")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13], #-4")			\
-	TEST_COPROCESSOR("stc"two"l	0, cr0, [r13], {1}")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13, #4]")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13, #-4]")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13, #4]!")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13, #-4]!")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13], #4")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13], #-4")			\
-	TEST_COPROCESSOR("ldc"two"	0, cr0, [r13], {1}")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13, #4]")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13, #-4]")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13, #4]!")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13, #-4]!")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13], #4")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13], #-4")			\
-	TEST_COPROCESSOR("ldc"two"l	0, cr0, [r13], {1}")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13, #4]")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13, #-4]")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13, #4]!")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13, #-4]!")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13], #4")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13], #-4")			\
+	TEST_COPROCESSOR("stc"two"	p0, cr0, [r13], {1}")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13, #4]")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13, #-4]")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13, #4]!")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13, #-4]!")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13], #4")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13], #-4")			\
+	TEST_COPROCESSOR("stc"two"l	p0, cr0, [r13], {1}")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13, #4]")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13, #-4]")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13, #4]!")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13, #-4]!")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13], #4")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13], #-4")			\
+	TEST_COPROCESSOR("ldc"two"	p0, cr0, [r13], {1}")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13, #4]")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13, #-4]")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13, #4]!")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13, #-4]!")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13], #4")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13], #-4")			\
+	TEST_COPROCESSOR("ldc"two"l	p0, cr0, [r13], {1}")			\
 										\
-	TEST_COPROCESSOR( "stc"two"	0, cr0, [r15, #4]")			\
-	TEST_COPROCESSOR( "stc"two"	0, cr0, [r15, #-4]")			\
+	TEST_COPROCESSOR( "stc"two"	p0, cr0, [r15, #4]")			\
+	TEST_COPROCESSOR( "stc"two"	p0, cr0, [r15, #-4]")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##daf0001) "	@ stc"two"	0, cr0, [r15, #4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##d2f0001) "	@ stc"two"	0, cr0, [r15, #-4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##caf0001) "	@ stc"two"	0, cr0, [r15], #4")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c2f0001) "	@ stc"two"	0, cr0, [r15], #-4")	\
-	TEST_COPROCESSOR( "stc"two"	0, cr0, [r15], {1}")			\
-	TEST_COPROCESSOR( "stc"two"l	0, cr0, [r15, #4]")			\
-	TEST_COPROCESSOR( "stc"two"l	0, cr0, [r15, #-4]")			\
+	TEST_COPROCESSOR( "stc"two"	p0, cr0, [r15], {1}")			\
+	TEST_COPROCESSOR( "stc"two"l	p0, cr0, [r15, #4]")			\
+	TEST_COPROCESSOR( "stc"two"l	p0, cr0, [r15, #-4]")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##def0001) "	@ stc"two"l	0, cr0, [r15, #4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##d6f0001) "	@ stc"two"l	0, cr0, [r15, #-4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##cef0001) "	@ stc"two"l	0, cr0, [r15], #4")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c6f0001) "	@ stc"two"l	0, cr0, [r15], #-4")	\
-	TEST_COPROCESSOR( "stc"two"l	0, cr0, [r15], {1}")			\
-	TEST_COPROCESSOR( "ldc"two"	0, cr0, [r15, #4]")			\
-	TEST_COPROCESSOR( "ldc"two"	0, cr0, [r15, #-4]")			\
+	TEST_COPROCESSOR( "stc"two"l	p0, cr0, [r15], {1}")			\
+	TEST_COPROCESSOR( "ldc"two"	p0, cr0, [r15, #4]")			\
+	TEST_COPROCESSOR( "ldc"two"	p0, cr0, [r15, #-4]")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##dbf0001) "	@ ldc"two"	0, cr0, [r15, #4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##d3f0001) "	@ ldc"two"	0, cr0, [r15, #-4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##cbf0001) "	@ ldc"two"	0, cr0, [r15], #4")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c3f0001) "	@ ldc"two"	0, cr0, [r15], #-4")	\
-	TEST_COPROCESSOR( "ldc"two"	0, cr0, [r15], {1}")			\
-	TEST_COPROCESSOR( "ldc"two"l	0, cr0, [r15, #4]")			\
-	TEST_COPROCESSOR( "ldc"two"l	0, cr0, [r15, #-4]")			\
+	TEST_COPROCESSOR( "ldc"two"	p0, cr0, [r15], {1}")			\
+	TEST_COPROCESSOR( "ldc"two"l	p0, cr0, [r15, #4]")			\
+	TEST_COPROCESSOR( "ldc"two"l	p0, cr0, [r15, #-4]")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##dff0001) "	@ ldc"two"l	0, cr0, [r15, #4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##d7f0001) "	@ ldc"two"l	0, cr0, [r15, #-4]!")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##cff0001) "	@ ldc"two"l	0, cr0, [r15], #4")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c7f0001) "	@ ldc"two"l	0, cr0, [r15], #-4")	\
-	TEST_COPROCESSOR( "ldc"two"l	0, cr0, [r15], {1}")
+	TEST_COPROCESSOR( "ldc"two"l	p0, cr0, [r15], {1}")
 
 #define COPROCESSOR_INSTRUCTIONS_MC_MR(two,cc)					\
 										\
-	TEST_COPROCESSOR( "mcrr"two"	0, 15, r0, r14, cr0")			\
-	TEST_COPROCESSOR( "mcrr"two"	15, 0, r14, r0, cr15")			\
+	TEST_COPROCESSOR( "mcrr"two"	p0, 15, r0, r14, cr0")			\
+	TEST_COPROCESSOR( "mcrr"two"	p15, 0, r14, r0, cr15")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c4f00f0) "	@ mcrr"two"	0, 15, r0, r15, cr0")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c40ff0f) "	@ mcrr"two"	15, 0, r15, r0, cr15")	\
-	TEST_COPROCESSOR( "mrrc"two"	0, 15, r0, r14, cr0")			\
-	TEST_COPROCESSOR( "mrrc"two"	15, 0, r14, r0, cr15")			\
+	TEST_COPROCESSOR( "mrrc"two"	p0, 15, r0, r14, cr0")			\
+	TEST_COPROCESSOR( "mrrc"two"	p15, 0, r14, r0, cr15")			\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c5f00f0) "	@ mrrc"two"	0, 15, r0, r15, cr0")	\
 	TEST_UNSUPPORTED(__inst_arm(0x##cc##c50ff0f) "	@ mrrc"two"	15, 0, r15, r0, cr15")	\
-	TEST_COPROCESSOR( "cdp"two"	15, 15, cr15, cr15, cr15, 7")		\
-	TEST_COPROCESSOR( "cdp"two"	0, 0, cr0, cr0, cr0, 0")		\
-	TEST_COPROCESSOR( "mcr"two"	15, 7, r15, cr15, cr15, 7")		\
-	TEST_COPROCESSOR( "mcr"two"	0, 0, r0, cr0, cr0, 0")			\
-	TEST_COPROCESSOR( "mrc"two"	15, 7, r15, cr15, cr15, 7")		\
-	TEST_COPROCESSOR( "mrc"two"	0, 0, r0, cr0, cr0, 0")
+	TEST_COPROCESSOR( "cdp"two"	p15, 15, cr15, cr15, cr15, 7")		\
+	TEST_COPROCESSOR( "cdp"two"	p0, 0, cr0, cr0, cr0, 0")		\
+	TEST_COPROCESSOR( "mcr"two"	p15, 7, r15, cr15, cr15, 7")		\
+	TEST_COPROCESSOR( "mcr"two"	p0, 0, r0, cr0, cr0, 0")		\
+	TEST_COPROCESSOR( "mrc"two"	p15, 7, r14, cr15, cr15, 7")		\
+	TEST_COPROCESSOR( "mrc"two"	p0, 0, r0, cr0, cr0, 0")
 
 	COPROCESSOR_INSTRUCTIONS_ST_LD("",e)
 #if __LINUX_ARM_ARCH__ >= 5
diff --git a/arch/arm/probes/kprobes/test-core.h b/arch/arm/probes/kprobes/test-core.h
index 19a5b2a..f1d5583 100644
--- a/arch/arm/probes/kprobes/test-core.h
+++ b/arch/arm/probes/kprobes/test-core.h
@@ -108,6 +108,7 @@
 
 #define TESTCASE_START(title)					\
 	__asm__ __volatile__ (					\
+	".syntax unified				\n\t"	\
 	"bl	__kprobes_test_case_start		\n\t"	\
 	".pushsection .rodata				\n\t"	\
 	"10:						\n\t"	\
diff --git a/arch/arm/tools/syscall.tbl b/arch/arm/tools/syscall.tbl
index 6da7dc4..41348ac 100644
--- a/arch/arm/tools/syscall.tbl
+++ b/arch/arm/tools/syscall.tbl
@@ -449,3 +449,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/arm/vfp/Makefile b/arch/arm/vfp/Makefile
index 9975b63..749901a 100644
--- a/arch/arm/vfp/Makefile
+++ b/arch/arm/vfp/Makefile
@@ -8,6 +8,4 @@
 # ccflags-y := -DDEBUG
 # asflags-y := -DDEBUG
 
-KBUILD_AFLAGS	:=$(KBUILD_AFLAGS:-msoft-float=-Wa,-mfpu=softvfp+vfp -mfloat-abi=soft)
-
 obj-y		+= vfpmodule.o entry.o vfphw.o vfpsingle.o vfpdouble.o
diff --git a/arch/arm/vfp/vfphw.S b/arch/arm/vfp/vfphw.S
index b530db8..d5837bf 100644
--- a/arch/arm/vfp/vfphw.S
+++ b/arch/arm/vfp/vfphw.S
@@ -78,6 +78,7 @@
 ENTRY(vfp_support_entry)
 	DBGSTR3	"instr %08x pc %08x state %p", r0, r2, r10
 
+	.fpu	vfpv2
 	VFPFMRX	r1, FPEXC		@ Is the VFP enabled?
 	DBGSTR1	"fpexc %08x", r1
 	tst	r1, #FPEXC_EN
@@ -253,11 +254,14 @@
 
 ENTRY(vfp_get_float)
 	tbl_branch r0, r3, #3
+	.fpu	vfpv2
 	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	mrc	p10, 0, r0, c\dr, c0, 0	@ fmrs	r0, s0
+1:	vmov	r0, s\dr
 	ret	lr
 	.org	1b + 8
-1:	mrc	p10, 0, r0, c\dr, c0, 4	@ fmrs	r0, s1
+	.endr
+	.irp	dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+1:	vmov	r0, s\dr
 	ret	lr
 	.org	1b + 8
 	.endr
@@ -265,11 +269,14 @@
 
 ENTRY(vfp_put_float)
 	tbl_branch r1, r3, #3
+	.fpu	vfpv2
 	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	mcr	p10, 0, r0, c\dr, c0, 0	@ fmsr	r0, s0
+1:	vmov	s\dr, r0
 	ret	lr
 	.org	1b + 8
-1:	mcr	p10, 0, r0, c\dr, c0, 4	@ fmsr	r0, s1
+	.endr
+	.irp	dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+1:	vmov	s\dr, r0
 	ret	lr
 	.org	1b + 8
 	.endr
@@ -277,15 +284,17 @@
 
 ENTRY(vfp_get_double)
 	tbl_branch r0, r3, #3
+	.fpu	vfpv2
 	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	fmrrd	r0, r1, d\dr
+1:	vmov	r0, r1, d\dr
 	ret	lr
 	.org	1b + 8
 	.endr
 #ifdef CONFIG_VFPv3
 	@ d16 - d31 registers
-	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	mrrc	p11, 3, r0, r1, c\dr	@ fmrrd	r0, r1, d\dr
+	.fpu	vfpv3
+	.irp	dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+1:	vmov	r0, r1, d\dr
 	ret	lr
 	.org	1b + 8
 	.endr
@@ -299,15 +308,17 @@
 
 ENTRY(vfp_put_double)
 	tbl_branch r2, r3, #3
+	.fpu	vfpv2
 	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	fmdrr	d\dr, r0, r1
+1:	vmov	d\dr, r0, r1
 	ret	lr
 	.org	1b + 8
 	.endr
 #ifdef CONFIG_VFPv3
+	.fpu	vfpv3
 	@ d16 - d31 registers
-	.irp	dr,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
-1:	mcrr	p11, 3, r0, r1, c\dr	@ fmdrr	r0, r1, d\dr
+	.irp	dr,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
+1:	vmov	d\dr, r0, r1
 	ret	lr
 	.org	1b + 8
 	.endr
diff --git a/arch/arm/vfp/vfpinstr.h b/arch/arm/vfp/vfpinstr.h
index 38dc154..3c7938f 100644
--- a/arch/arm/vfp/vfpinstr.h
+++ b/arch/arm/vfp/vfpinstr.h
@@ -62,10 +62,23 @@
 #define FPSCR_C (1 << 29)
 #define FPSCR_V	(1 << 28)
 
-/*
- * Since we aren't building with -mfpu=vfp, we need to code
- * these instructions using their MRC/MCR equivalents.
- */
+#ifdef CONFIG_AS_VFP_VMRS_FPINST
+
+#define fmrx(_vfp_) ({			\
+	u32 __v;			\
+	asm(".fpu	vfpv2\n"	\
+	    "vmrs	%0, " #_vfp_	\
+	    : "=r" (__v) : : "cc");	\
+	__v;				\
+ })
+
+#define fmxr(_vfp_,_var_)		\
+	asm(".fpu	vfpv2\n"	\
+	    "vmsr	" #_vfp_ ", %0"	\
+	   : : "r" (_var_) : "cc")
+
+#else
+
 #define vfpreg(_vfp_) #_vfp_
 
 #define fmrx(_vfp_) ({			\
@@ -79,6 +92,8 @@
 	asm("mcr p10, 7, %0, " vfpreg(_vfp_) ", cr0, 0 @ fmxr	" #_vfp_ ", %0"	\
 	   : : "r" (_var_) : "cc")
 
+#endif
+
 u32 vfp_single_cpdo(u32 inst, u32 fpscr);
 u32 vfp_single_cprt(u32 inst, u32 fpscr, struct pt_regs *regs);
 
diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 57dfc13..2a594d3 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -29,6 +29,7 @@
 #include <linux/cpu.h>
 #include <linux/console.h>
 #include <linux/pvclock_gtod.h>
+#include <linux/reboot.h>
 #include <linux/time64.h>
 #include <linux/timekeeping.h>
 #include <linux/timekeeper_internal.h>
@@ -180,11 +181,18 @@
 	BUG_ON(rc);
 }
 
-static void xen_restart(enum reboot_mode reboot_mode, const char *cmd)
+static int xen_restart(struct notifier_block *nb, unsigned long action,
+		       void *data)
 {
 	xen_reboot(SHUTDOWN_reboot);
+
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block xen_restart_nb = {
+	.notifier_call = xen_restart,
+	.priority = 192,
+};
 
 static void xen_power_off(void)
 {
@@ -403,7 +411,7 @@
 		return -ENODEV;
 
 	pm_power_off = xen_power_off;
-	arm_pm_restart = xen_restart;
+	register_restart_handler(&xen_restart_nb);
 	if (!xen_initial_domain()) {
 		struct timespec64 ts;
 		xen_read_wallclock(&ts);
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 9c8ea59..a445bfe 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -66,6 +66,9 @@
 	select ARCH_USE_QUEUED_RWLOCKS
 	select ARCH_USE_QUEUED_SPINLOCKS
 	select ARCH_SUPPORTS_MEMORY_FAILURE
+	select ARCH_SUPPORTS_SHADOW_CALL_STACK if CC_HAVE_SHADOW_CALL_STACK
+	select ARCH_SUPPORTS_LTO_CLANG
+	select ARCH_SUPPORTS_THINLTO
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_INT128 if GCC_VERSION >= 50000 || CC_IS_CLANG
 	select ARCH_SUPPORTS_NUMA_BALANCING
@@ -99,6 +102,7 @@
 	select GENERIC_CPU_VULNERABILITIES
 	select GENERIC_EARLY_IOREMAP
 	select GENERIC_IDLE_POLL_SETUP
+	select GENERIC_IRQ_IPI
 	select GENERIC_IRQ_MULTI_HANDLER
 	select GENERIC_IRQ_PROBE
 	select GENERIC_IRQ_SHOW
@@ -112,6 +116,8 @@
 	select GENERIC_GETTIMEOFDAY
 	select HANDLE_DOMAIN_IRQ
 	select HARDIRQS_SW_RESEND
+	select HAVE_MOVE_PMD
+	select HAVE_MOVE_PUD
 	select HAVE_PCI
 	select HAVE_ACPI_APEI if (ACPI && EFI)
 	select HAVE_ALIGNED_STRUCT_PAGE if SLUB
@@ -122,10 +128,11 @@
 	select HAVE_ARCH_JUMP_LABEL_RELATIVE
 	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_KFENCE
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_MMAP_RND_BITS
 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT
-	select HAVE_ARCH_PREL32_RELOCATIONS
+	select HAVE_ARCH_PREL32_RELOCATIONS if !LTO_CLANG
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_STACKLEAK
 	select HAVE_ARCH_THREAD_STRUCT_WHITELIST
@@ -149,7 +156,7 @@
 	select HAVE_FTRACE_MCOUNT_RECORD
 	select HAVE_FUNCTION_TRACER
 	select HAVE_FUNCTION_ERROR_INJECTION
-	select HAVE_FUNCTION_GRAPH_TRACER
+	select HAVE_FUNCTION_GRAPH_TRACER if !SHADOW_CALL_STACK
 	select HAVE_GCC_PLUGINS
 	select HAVE_HW_BREAKPOINT if PERF_EVENTS
 	select HAVE_IRQ_TIME_ACCOUNTING
@@ -186,6 +193,7 @@
 	select SWIOTLB
 	select SYSCTL_EXCEPTION_TRACE
 	select THREAD_INFO_IN_TASK
+	select HAVE_ARCH_USERFAULTFD_MINOR if USERFAULTFD
 	help
 	  ARM 64-bit (AArch64) Linux support.
 
@@ -965,6 +973,10 @@
 config ARCH_ENABLE_SPLIT_PMD_PTLOCK
 	def_bool y if PGTABLE_LEVELS > 2
 
+# 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---
@@ -1455,6 +1467,33 @@
 
 endmenu
 
+menu "ARMv8.4 architectural features"
+
+config ARM64_AMU_EXTN
+	bool "Enable support for the Activity Monitors Unit CPU extension"
+	default y
+	help
+	  The activity monitors extension is an optional extension introduced
+	  by the ARMv8.4 CPU architecture. This enables support for version 1
+	  of the activity monitors architecture, AMUv1.
+
+	  To enable the use of this extension on CPUs that implement it, say Y.
+
+	  Note that for architectural reasons, firmware _must_ implement AMU
+	  support when running on CPUs that present the activity monitors
+	  extension. The required support is present in:
+	    * Version 1.5 and later of the ARM Trusted Firmware
+
+	  For kernels that have this configuration enabled but boot with broken
+	  firmware, you may need to say N here until the firmware is fixed.
+	  Otherwise you may experience firmware panics or lockups when
+	  accessing the counter registers. Even if you are not observing these
+	  symptoms, the values returned by the register reads might not
+	  correctly reflect reality. Most commonly, the value read will be 0,
+	  indicating that the counter is not enabled.
+
+endmenu
+
 config ARM64_SVE
 	bool "ARM Scalable Vector Extension support"
 	default y
@@ -1612,6 +1651,23 @@
 	  entering them here. As a minimum, you should specify the the
 	  root device (e.g. root=/dev/nfs).
 
+choice
+	prompt "Kernel command line type" if CMDLINE != ""
+	default CMDLINE_FROM_BOOTLOADER
+
+config CMDLINE_FROM_BOOTLOADER
+	bool "Use bootloader kernel arguments if available"
+	help
+	  Uses the command-line options passed by the boot loader. If
+	  the boot loader doesn't provide any, the default kernel command
+	  string provided in CMDLINE will be used.
+
+config CMDLINE_EXTEND
+	bool "Extend bootloader kernel arguments"
+	help
+	  The command-line arguments provided by the boot loader will be
+	  appended to the default kernel command string.
+
 config CMDLINE_FORCE
 	bool "Always use the default kernel command string"
 	help
@@ -1619,6 +1675,7 @@
 	  loader passes other arguments to the kernel.
 	  This is useful if you cannot or don't want to change the
 	  command-line options your boot loader passes to the kernel.
+endchoice
 
 config EFI_STUB
 	bool
diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
index d227cf8..255f5be 100644
--- a/arch/arm64/Makefile
+++ b/arch/arm64/Makefile
@@ -76,6 +76,10 @@
 # off.
 KBUILD_CFLAGS += $(call cc-option,-mbranch-protection=none)
 
+ifeq ($(CONFIG_SHADOW_CALL_STACK), y)
+KBUILD_CFLAGS	+= -ffixed-x18
+endif
+
 ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
 KBUILD_CPPFLAGS	+= -mbig-endian
 CHECKFLAGS	+= -D__AARCH64EB__
diff --git a/arch/arm64/OWNERS b/arch/arm64/OWNERS
new file mode 100644
index 0000000..257f4cf
--- /dev/null
+++ b/arch/arm64/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/arch/arm64/OWNERS
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
new file mode 100644
index 0000000..c7f497c
--- /dev/null
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-drm.dtsi
@@ -0,0 +1,114 @@
+/{
+		dpe: dpe@E8600000 {
+			compatible = "hisilicon,hi3660-dpe";
+			status = "ok";
+
+			reg = <0x0 0xE8600000 0x0 0x80000>,
+					<0x0 0xFFF35000 0 0x1000>,
+					<0x0 0xFFF0A000 0 0x1000>,
+					<0x0 0xFFF31000 0 0x1000>,
+					<0x0 0xE86C0000 0 0x10000>;
+			interrupts = <0 245 4>;
+
+			clocks = <&crg_ctrl HI3660_ACLK_GATE_DSS>,
+				<&crg_ctrl HI3660_PCLK_GATE_DSS>,
+				<&crg_ctrl HI3660_CLK_GATE_EDC0>,
+				<&crg_ctrl HI3660_CLK_GATE_LDI0>,
+				<&crg_ctrl HI3660_CLK_GATE_LDI1>,
+				<&sctrl HI3660_CLK_GATE_DSS_AXI_MM>,
+				<&sctrl HI3660_PCLK_GATE_MMBUF>;
+			clock-names = "aclk_dss",
+					"pclk_dss",
+					"clk_edc0",
+					"clk_ldi0",
+					"clk_ldi1",
+					"clk_dss_axi_mm",
+					"pclk_mmbuf";
+
+			dma-coherent;
+
+			port {
+				dpe_out: endpoint {
+					remote-endpoint = <&dsi_in>;
+				};
+			};
+
+			iommu_info {
+				start-addr = <0x8000>;
+				size = <0xbfff8000>;
+			};
+		};
+
+		dsi: dsi@E8601000 {
+			compatible = "hisilicon,hi3660-dsi";
+			status = "ok";
+
+			reg = <0 0xE8601000 0 0x7F000>,
+					<0 0xFFF35000 0 0x1000>;
+
+			clocks = <&crg_ctrl HI3660_CLK_GATE_TXDPHY0_REF>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_REF>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY0_CFG>,
+					<&crg_ctrl HI3660_CLK_GATE_TXDPHY1_CFG>,
+					<&crg_ctrl HI3660_PCLK_GATE_DSI0>,
+					<&crg_ctrl HI3660_PCLK_GATE_DSI1>;
+			clock-names = "clk_txdphy0_ref",
+						"clk_txdphy1_ref",
+						"clk_txdphy0_cfg",
+						"clk_txdphy1_cfg",
+						"pclk_dsi0",
+						"pclk_dsi1";
+
+			#address-cells = <1>;
+			#size-cells = <0>;
+			mux-gpio = <&gpio2 4 0>;
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				port@0 {
+					reg = <0>;
+					dsi_in: endpoint {
+						remote-endpoint = <&dpe_out>;
+					};
+				};
+
+				port@1 {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					reg = <1>;
+
+					dsi_out0: endpoint@0 {
+						reg = <0>;
+						remote-endpoint = <&adv7533_in>;
+					};
+
+					dsi_out1: endpoint@1 {
+						reg = <1>;
+						remote-endpoint = <&panel0_in>;
+					};
+				};
+			};
+
+			panel@1 {
+				compatible = "hisilicon,mipi-hikey";
+				#address-cells = <2>;
+				#size-cells = <2>;
+				status = "ok";
+				reg = <1>;
+				panel-width-mm = <94>;
+				panel-height-mm = <151>;
+				vdd-supply = <&ldo3>;
+				pwr-en-gpio = <&gpio27 0 0>;
+				bl-en-gpio = <&gpio27 2 0>;
+				pwm-gpio = <&gpio22 6 0>;
+
+				port {
+					panel0_in: endpoint {
+						remote-endpoint = <&dsi_out1>;
+					};
+				};
+			};
+		};
+};
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
new file mode 100644
index 0000000..0cce0ce
--- /dev/null
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-gpu.dtsi
@@ -0,0 +1,19 @@
+/{
+    gpu: mali@E82C0000 {
+        compatible = "arm,malit6xx", "arm,mali-midgard";
+        #cooling-cells = <3>; /* min followed by max */
+        gpu_outstanding = <0x0>;
+        reg = <0x0 0xE82C0000 0x0 0x4000>;
+        interrupts = <0 258 4 0 259 4 0 260 4>;
+        interrupt-names = "JOB", "MMU", "GPU";
+        operating-points = <
+		/* <frequency> <voltage>*/
+		178000  650000
+		400000	700000
+		533000	800000
+		807000	900000
+		960000	1000000
+		1037000 1100000
+        >;
+    };
+};
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
index 8c4bfba..cb9c7c6 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
+++ b/arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dts
@@ -10,9 +10,13 @@
 
 #include "hi3660.dtsi"
 #include "hikey960-pinctrl.dtsi"
+#include "hi3660-drm.dtsi"
+#include "hi3660-gpu.dtsi"
+
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
 #include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/usb/pd.h>
 
 / {
 	model = "HiKey960";
@@ -45,6 +49,23 @@
 		#size-cells = <2>;
 		ranges;
 
+		fastboot_cma: fastboot-cma-mem {
+			reg = <0x0 0x16c00000 0x0 0x4000000>;
+			compatible = "shared-dma-pool";
+			hisi,cma-sec;
+			reusable;
+		};
+
+		uefi-reboot-mode {
+			reg = <0x0 0x32100000 0x0 0x00001000>;
+			no-map;
+		};
+
+		bl31 {
+			reg = <0x0 0x20200000 0x0 0x200000>;
+			no-map;
+		};
+
 		ramoops@32000000 {
 			compatible = "ramoops";
 			reg = <0x0 0x32000000 0x0 0x00100000>;
@@ -52,6 +73,14 @@
 			console-size	= <0x00020000>;
 			ftrace-size	= <0x00020000>;
 		};
+
+		/* global autoconfigured region for contiguous allocations */
+		linux,cma {
+			compatible = "shared-dma-pool";
+			reg = <0x0 0x20C00000 0x0 0x4000000>;
+			reusable;
+			linux,cma-default;
+		};
 	};
 
 	reboot-mode-syscon@32100000 {
@@ -196,6 +225,59 @@
 			method = "smc";
 		};
 	};
+
+	hisi_hikey_usb: hisi_hikey_usb {
+		compatible = "hisilicon,gpio_hubv1";
+		typec-vbus-gpios = <&gpio25 2 GPIO_ACTIVE_HIGH>;
+		otg-switch-gpios = <&gpio25 6 GPIO_ACTIVE_HIGH>;
+		hub-vdd33-en-gpios = <&gpio5 6 GPIO_ACTIVE_HIGH>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usbhub5734_pmx_func>;
+		usb-role-switch;
+
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			hikey_usb_ep0: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&dwc3_role_switch>;
+			};
+			hikey_usb_ep1: endpoint@1 {
+				reg = <1>;
+				remote-endpoint = <&rt1711h_ep>;
+			};
+		};
+	};
+
+	i2s2: hi3660_i2s {
+		compatible = "hisilicon,hi3660-i2s-1.0";
+		reg = <0x0 0xe804f800 0x0 0x400>,
+			<0x0 0xe804e000 0x0 0x400>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&i2s2_pmx_func &i2s2_cfg_func>;
+		dmas = <&asp_dmac 18 &asp_dmac 19>;
+		dma-names = "rx", "tx";
+		#sound-dai-cells = <0>;
+	};
+
+	sound {
+		compatible = "simple-audio-card";
+		simple-audio-card,name = "hikey-hdmi";
+		simple-audio-card,format = "i2s";
+
+		simple-audio-card,bitclock-master = <&sound_master>;
+		simple-audio-card,frame-master = <&sound_master>;
+
+		sound_master: simple-audio-card,cpu {
+			sound-dai = <&i2s2>;
+		};
+
+		simple-audio-card,codec {
+			sound-dai = <&adv7533>;
+		};
+	};
+
 };
 
 /*
@@ -526,22 +608,76 @@
 &i2c1 {
 	status = "okay";
 
+	rt1711h: rt1711h@4e {
+		compatible = "richtek,rt1711h";
+		reg = <0x4e>;
+		status = "ok";
+		interrupt-parent = <&gpio27>;
+		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
+		pinctrl-names = "default";
+		pinctrl-0 = <&usb_cfg_func>;
+
+		usb_con: connector {
+			compatible = "usb-c-connector";
+			label = "USB-C";
+			data-role = "dual";
+			power-role = "dual";
+			try-power-role = "sink";
+			source-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)>;
+			sink-pdos = <PDO_FIXED(5000, 500, PDO_FIXED_USB_COMM)
+				PDO_VAR(5000, 5000, 1000)>;
+			op-sink-microwatt = <10000000>;
+
+			ports {
+				#address-cells = <1>;
+				#size-cells = <0>;
+				port@1 {
+					reg = <1>;
+					usb_con_ss: endpoint {
+						remote-endpoint = <&dwc3_ss>;
+					};
+				};
+			};
+		};
+		port {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			rt1711h_ep: endpoint@0 {
+				reg = <0>;
+				remote-endpoint = <&hikey_usb_ep1>;
+			};
+		};
+	};
+
 	adv7533: adv7533@39 {
 		status = "ok";
 		compatible = "adi,adv7533";
 		reg = <0x39>;
+		v1p2-supply = <&ldo3>;
+		vdd-supply = <&ldo3>;
+		interrupt-parent = <&gpio1>;
+		interrupts = <1 2>;
+		pd-gpio = <&gpio5 1 0>;
+		sel-gpio = <&gpio2 4 0>;
 		adi,dsi-lanes = <4>;
+		adi,disable-timing-generator;
+		#sound-dai-cells = <0>;
 		ports {
 			#address-cells = <1>;
 			#size-cells = <0>;
 			port@0 {
 				reg = <0>;
+				adv7533_in: endpoint@0 {
+					remote-endpoint = <&dsi_out0>;
+				};
 			};
 			port@1 {
 				reg = <1>;
 			};
 		};
 	};
+
 };
 
 &i2c7 {
diff --git a/arch/arm64/boot/dts/hisilicon/hi3660.dtsi b/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
index 0c88b72..e4e03ba 100644
--- a/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
+++ b/arch/arm64/boot/dts/hisilicon/hi3660.dtsi
@@ -355,6 +355,12 @@
 			#clock-cells = <1>;
 		};
 
+		pmctrl: pmctrl@fff31000 {
+			compatible = "hisilicon,hi3660-pmctrl", "syscon";
+			reg = <0x0 0xfff31000 0x0 0x1000>;
+			#clock-cells = <1>;
+		};
+
 		pmuctrl: crg_ctrl@fff34000 {
 			compatible = "hisilicon,hi3660-pmuctrl", "syscon";
 			reg = <0x0 0xfff34000 0x0 0x1000>;
@@ -367,6 +373,13 @@
 			#clock-cells = <1>;
 		};
 
+		reboot {
+			compatible = "hisilicon,hi3660-reboot";
+			pmu-regmap = <&pmuctrl>;
+			sctrl-regmap = <&sctrl>;
+			reboot-offset = <0x4>;
+		};
+
 		iomcu: iomcu@ffd7e000 {
 			compatible = "hisilicon,hi3660-iomcu", "syscon";
 			reg = <0x0 0xffd7e000 0x0 0x1000>;
@@ -431,7 +444,8 @@
 			resets = <&iomcu_rst 0x20 4>;
 			pinctrl-names = "default";
 			pinctrl-0 = <&i2c1_pmx_func &i2c1_cfg_func>;
-			status = "disabled";
+			status = "ok";
+
 		};
 
 		i2c3: i2c@fdf0c000 {
@@ -1152,6 +1166,70 @@
 				};
 			};
 		};
+
+		usb3_otg_bc: usb3_otg_bc@ff200000 {
+			compatible = "syscon", "simple-mfd";
+			reg = <0x0 0xff200000 0x0 0x1000>;
+
+			usb_phy: usb-phy {
+				compatible = "hisilicon,hi3660-usb-phy";
+				#phy-cells = <0>;
+				hisilicon,pericrg-syscon = <&crg_ctrl>;
+				hisilicon,pctrl-syscon = <&pctrl>;
+				hisilicon,eye-diagram-param = <0x22466e4>;
+			};
+		};
+
+
+		dwc3: dwc3@ff100000 {
+			compatible = "snps,dwc3";
+			reg = <0x0 0xff100000 0x0 0x100000>;
+
+			clocks = <&crg_ctrl HI3660_CLK_ABB_USB>,
+				 <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+			clock-names = "ref", "bus_early";
+
+			assigned-clocks = <&crg_ctrl HI3660_ACLK_GATE_USB3OTG>;
+			assigned-clock-rates = <229000000>;
+
+			resets = <&crg_rst 0x90 8>,
+				 <&crg_rst 0x90 7>,
+				 <&crg_rst 0x90 6>,
+				 <&crg_rst 0x90 5>;
+
+			interrupts = <0 159 4>, <0 161 4>;
+			phys = <&usb_phy>;
+			phy-names = "usb3-phy";
+
+			dr_mode = "otg";
+			maximum-speed = "super-speed";
+			phy_type = "utmi";
+			snps,dis-del-phy-power-chg-quirk;
+			snps,lfps_filter_quirk;
+			snps,dis_u2_susphy_quirk;
+			snps,dis_u3_susphy_quirk;
+			snps,tx_de_emphasis_quirk;
+			snps,tx_de_emphasis = <1>;
+			snps,dis_enblslpm_quirk;
+			snps,gctl-reset-quirk;
+			usb-role-switch;
+			role-switch-default-mode = "host";
+
+			port {
+				#address-cells = <1>;
+				#size-cells = <0>;
+
+				dwc3_role_switch: endpoint@0 {
+					reg = <0>;
+					remote-endpoint = <&hikey_usb_ep0>;
+				};
+
+				dwc3_ss: endpoint@1 {
+					reg = <1>;
+					remote-endpoint = <&usb_con_ss>;
+				};
+			};
+		};
 	};
 };
 
diff --git a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
index bf4fde8..c56711b 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
+++ b/arch/arm64/boot/dts/qcom/sdm845-db845c.dts
@@ -72,6 +72,17 @@
 		};
 	};
 
+	hdmi-out {
+		compatible = "hdmi-connector";
+		type = "a";
+
+		port {
+			hdmi_con: endpoint {
+				remote-endpoint = <&lt9611_out>;
+			};
+		};
+	};
+
 	lt9611_1v8: lt9611-vdd18-regulator {
 		compatible = "regulator-fixed";
 		regulator-name = "LT9611_1V8";
@@ -197,7 +208,7 @@
 &adsp_pas {
 	status = "okay";
 
-	firmware-name = "qcom/db845c/adsp.mdt";
+	firmware-name = "qcom/sdm845/adsp.mdt";
 };
 
 &apps_rsc {
@@ -331,9 +342,56 @@
 
 &cdsp_pas {
 	status = "okay";
-	firmware-name = "qcom/db845c/cdsp.mdt";
+	firmware-name = "qcom/sdm845/cdsp.mdt";
 };
 
+&dsi0 {
+	status = "okay";
+	vdda-supply = <&vreg_l26a_1p2>;
+
+#if 0
+	qcom,dual-dsi-mode;
+	qcom,master-dsi;
+#endif
+
+	ports {
+		port@1 {
+			endpoint {
+				remote-endpoint = <&lt9611_a>;
+				data-lanes = <0 1 2 3>;
+			};
+		};
+	};
+};
+
+&dsi0_phy {
+	status = "okay";
+	vdds-supply = <&vreg_l1a_0p875>;
+};
+
+#if 0
+&dsi1 {
+	status = "okay";
+	vdda-supply = <&vreg_l26a_1p2>;
+
+	qcom,dual-dsi-mode;
+
+	ports {
+		port@1 {
+			endpoint {
+				remote-endpoint = <&lt9611_b>;
+				data-lanes = <0 1 2 3>;
+			};
+		};
+	};
+};
+
+&dsi1_phy {
+	status = "okay";
+	vdds-supply = <&vreg_l1a_0p875>;
+};
+#endif
+
 &gcc {
 	protected-clocks = <GCC_QSPI_CORE_CLK>,
 			   <GCC_QSPI_CORE_CLK_SRC>,
@@ -342,6 +400,121 @@
 			   <GCC_LPASS_SWAY_CLK>;
 };
 
+&pcie0 {
+	status = "okay";
+	perst-gpio = <&tlmm 35 GPIO_ACTIVE_LOW>;
+	enable-gpio = <&tlmm 134 GPIO_ACTIVE_HIGH>;
+
+	vddpe-3v3-supply = <&pcie0_3p3v_dual>;
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie0_default_state>;
+};
+
+&pcie0_phy {
+	status = "okay";
+
+	vdda-phy-supply = <&vreg_l1a_0p875>;
+	vdda-pll-supply = <&vreg_l26a_1p2>;
+};
+
+&pcie1 {
+	status = "okay";
+	perst-gpio = <&tlmm 102 GPIO_ACTIVE_LOW>;
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_default_state>;
+};
+
+&pcie1_phy {
+	status = "okay";
+
+	vdda-phy-supply = <&vreg_l1a_0p875>;
+	vdda-pll-supply = <&vreg_l26a_1p2>;
+};
+
+&i2c10 {
+	status = "okay";
+	clock-frequency = <400000>;
+
+	hdmi-bridge@3b {
+		compatible = "lt,lt9611";
+		reg = <0x3b>;
+
+		interrupts-extended = <&tlmm 84 IRQ_TYPE_EDGE_FALLING>;
+
+		reset-gpios = <&tlmm 128 GPIO_ACTIVE_HIGH>;
+
+		vdd-supply = <&lt9611_1v8>;
+		vcc-supply = <&lt9611_3v3>;
+
+		pinctrl-names = "default";
+		pinctrl-0 = <&lt9611_irq_pin>, <&dsi_sw_sel>;
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+
+				lt9611_out: endpoint {
+					remote-endpoint = <&hdmi_con>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+
+				lt9611_a: endpoint {
+					remote-endpoint = <&dsi0_out>;
+				};
+			};
+
+#if 0
+			port@2 {
+				reg = <2>;
+
+				lt9611_b: endpoint {
+					remote-endpoint = <&dsi1_out>;
+				};
+			};
+#endif
+		};
+	};
+};
+
+&i2c11 {
+	/* On Low speed expansion */
+	label = "LS-I2C1";
+	status = "okay";
+};
+
+&i2c14 {
+	/* On Low speed expansion */
+	label = "LS-I2C0";
+	status = "okay";
+};
+
+&spi2 {
+	/* On Low speed expansion */
+	label = "LS-SPI0";
+	status = "okay";
+};
+
+&mdss {
+	status = "okay";
+};
+
+&mdss_mdp {
+	status = "okay";
+};
+
+&mss_pil {
+	status = "okay";
+	firmware-name = "qcom/sdm845/mba.mbn", "qcom/sdm845/modem.mbn";
+};
+
 &pm8998_gpio {
 	vol_up_pin_a: vol-up-active {
 		pins = "gpio6";
@@ -384,6 +557,37 @@
 };
 
 &tlmm {
+	pcie0_default_state: pcie0-default {
+		clkreq {
+			pins = "gpio36";
+			function = "pci_e0";
+			bias-pull-up;
+		};
+
+		reset-n {
+			pins = "gpio35";
+			function = "gpio";
+
+			drive-strength = <2>;
+			output-low;
+			bias-pull-down;
+		};
+
+		wake-n {
+			pins = "gpio37";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+	};
+
+	lt9611_irq_pin: lt9611-irq {
+		pins = "gpio84";
+		function = "gpio";
+		bias-disable;
+	};
+
 	pcie0_pwren_state: pcie0-pwren {
 		pins = "gpio90";
 		function = "gpio";
@@ -392,6 +596,39 @@
 		bias-disable;
 	};
 
+	pcie1_default_state: pcie1-default {
+		perst-n {
+			pins = "gpio102";
+			function = "gpio";
+
+			drive-strength = <16>;
+			bias-disable;
+		};
+
+		clkreq {
+			pins = "gpio103";
+			function = "pci_e1";
+			bias-pull-up;
+		};
+
+		wake-n {
+			pins = "gpio11";
+			function = "gpio";
+
+			drive-strength = <2>;
+			bias-pull-up;
+		};
+
+		reset-n {
+			pins = "gpio75";
+			function = "gpio";
+
+			drive-strength = <16>;
+			bias-pull-up;
+			output-high;
+		};
+	};
+
 	sdc2_default_state: sdc2-default {
 		clk {
 			pins = "sdc2_clk";
@@ -422,6 +659,20 @@
 		function = "gpio";
 		bias-pull-up;
 	};
+
+	dsi_sw_sel: dsi-sw-sel {
+		pins = "gpio120";
+		function = "gpio";
+
+		drive-strength = <2>;
+		bias-disable;
+		output-high;
+	};
+};
+
+&uart3 {
+	label = "LS-UART0";
+	status = "disabled";
 };
 
 &uart6 {
@@ -439,6 +690,7 @@
 };
 
 &uart9 {
+	label = "LS-UART1";
 	status = "okay";
 };
 
@@ -524,6 +776,24 @@
 };
 
 /* PINCTRL - additions to nodes defined in sdm845.dtsi */
+&qup_spi2_default {
+	drive-strength = <16>;
+};
+
+&qup_uart3_default{
+	pinmux {
+		pins = "gpio41", "gpio42", "gpio43", "gpio44";
+		function = "qup3";
+	};
+};
+
+&qup_i2c10_default {
+	pinconf {
+		pins = "gpio55", "gpio56";
+		drive-strength = <2>;
+		bias-disable;
+	};
+};
 
 &qup_uart6_default {
 	pinmux {
diff --git a/arch/arm64/boot/dts/qcom/sdm845.dtsi b/arch/arm64/boot/dts/qcom/sdm845.dtsi
index 2287354..9df23e3 100644
--- a/arch/arm64/boot/dts/qcom/sdm845.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845.dtsi
@@ -1364,10 +1364,227 @@
 			interrupts = <GIC_SPI 582 IRQ_TYPE_LEVEL_HIGH>;
 		};
 
+		pcie0: pci@1c00000 {
+			compatible = "qcom,pcie-sdm845", "snps,dw-pcie";
+			reg = <0 0x01c00000 0 0x2000>,
+			      <0 0x60000000 0 0xf1d>,
+			      <0 0x60000f20 0 0xa8>,
+			      <0 0x60100000 0 0x100000>;
+			reg-names = "parf", "dbi", "elbi", "config";
+			device_type = "pci";
+			linux,pci-domain = <0>;
+			bus-range = <0x00 0xff>;
+			num-lanes = <1>;
+
+			#address-cells = <3>;
+			#size-cells = <2>;
+
+			ranges = <0x01000000 0x0 0x60200000 0 0x60200000 0x0 0x100000>,
+				 <0x02000000 0x0 0x60300000 0 0x60300000 0x0 0xd00000>;
+
+			interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "msi";
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &intc 0 149 IRQ_TYPE_LEVEL_HIGH>, /* int_a */
+					<0 0 0 2 &intc 0 150 IRQ_TYPE_LEVEL_HIGH>, /* int_b */
+					<0 0 0 3 &intc 0 151 IRQ_TYPE_LEVEL_HIGH>, /* int_c */
+					<0 0 0 4 &intc 0 152 IRQ_TYPE_LEVEL_HIGH>; /* int_d */
+
+			clocks = <&gcc GCC_PCIE_0_PIPE_CLK>,
+				 <&gcc GCC_PCIE_0_AUX_CLK>,
+				 <&gcc GCC_PCIE_0_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_0_MSTR_AXI_CLK>,
+				 <&gcc GCC_PCIE_0_SLV_AXI_CLK>,
+				 <&gcc GCC_PCIE_0_SLV_Q2A_AXI_CLK>,
+				 <&gcc GCC_AGGRE_NOC_PCIE_TBU_CLK>;
+			clock-names = "pipe",
+				      "aux",
+				      "cfg",
+				      "bus_master",
+				      "bus_slave",
+				      "slave_q2a",
+				      "tbu";
+
+			iommus = <&apps_smmu 0x1c10 0xf>;
+			iommu-map = <0x0   &apps_smmu 0x1c10 0x1>,
+				    <0x100 &apps_smmu 0x1c11 0x1>,
+				    <0x200 &apps_smmu 0x1c12 0x1>,
+				    <0x300 &apps_smmu 0x1c13 0x1>,
+				    <0x400 &apps_smmu 0x1c14 0x1>,
+				    <0x500 &apps_smmu 0x1c15 0x1>,
+				    <0x600 &apps_smmu 0x1c16 0x1>,
+				    <0x700 &apps_smmu 0x1c17 0x1>,
+				    <0x800 &apps_smmu 0x1c18 0x1>,
+				    <0x900 &apps_smmu 0x1c19 0x1>,
+				    <0xa00 &apps_smmu 0x1c1a 0x1>,
+				    <0xb00 &apps_smmu 0x1c1b 0x1>,
+				    <0xc00 &apps_smmu 0x1c1c 0x1>,
+				    <0xd00 &apps_smmu 0x1c1d 0x1>,
+				    <0xe00 &apps_smmu 0x1c1e 0x1>,
+				    <0xf00 &apps_smmu 0x1c1f 0x1>;
+
+			resets = <&gcc GCC_PCIE_0_BCR>;
+			reset-names = "pci";
+
+			power-domains = <&gcc PCIE_0_GDSC>;
+
+			phys = <&pcie0_lane>;
+			phy-names = "pciephy";
+
+			status = "disabled";
+		};
+
+		pcie0_phy: phy@1c06000 {
+			compatible = "qcom,sdm845-qmp-pcie-phy";
+			reg = <0 0x01c06000 0 0x18c>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>,
+				 <&gcc GCC_PCIE_0_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_0_CLKREF_CLK>,
+				 <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			clock-names = "aux", "cfg_ahb", "ref", "refgen";
+
+			resets = <&gcc GCC_PCIE_0_PHY_BCR>;
+			reset-names = "phy";
+
+			assigned-clocks = <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			assigned-clock-rates = <100000000>;
+
+			status = "disabled";
+
+			pcie0_lane: lanes@1c06200 {
+				reg = <0 0x01c06200 0 0x128>,
+				      <0 0x01c06400 0 0x1fc>,
+				      <0 0x01c06800 0 0x218>,
+				      <0 0x01c06600 0 0x70>;
+				clocks = <&gcc GCC_PCIE_0_PIPE_CLK>;
+				clock-names = "pipe0";
+
+				#phy-cells = <0>;
+				clock-output-names = "pcie_0_pipe_clk";
+			};
+		};
+
+		pcie1: pci@1c08000 {
+			compatible = "qcom,pcie-sdm845", "snps,dw-pcie";
+			reg = <0 0x01c08000 0 0x2000>,
+			      <0 0x40000000 0 0xf1d>,
+			      <0 0x40000f20 0 0xa8>,
+			      <0 0x40100000 0 0x100000>;
+			reg-names = "parf", "dbi", "elbi", "config";
+			device_type = "pci";
+			linux,pci-domain = <1>;
+			bus-range = <0x00 0xff>;
+			num-lanes = <1>;
+
+			#address-cells = <3>;
+			#size-cells = <2>;
+
+			ranges = <0x01000000 0x0 0x40200000 0x0 0x40200000 0x0 0x100000>,
+				 <0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0x1fd00000>;
+
+			interrupts = <GIC_SPI 307 IRQ_TYPE_EDGE_RISING>;
+			interrupt-names = "msi";
+			#interrupt-cells = <1>;
+			interrupt-map-mask = <0 0 0 0x7>;
+			interrupt-map = <0 0 0 1 &intc 0 434 IRQ_TYPE_LEVEL_HIGH>, /* int_a */
+					<0 0 0 2 &intc 0 435 IRQ_TYPE_LEVEL_HIGH>, /* int_b */
+					<0 0 0 3 &intc 0 438 IRQ_TYPE_LEVEL_HIGH>, /* int_c */
+					<0 0 0 4 &intc 0 439 IRQ_TYPE_LEVEL_HIGH>; /* int_d */
+
+			clocks = <&gcc GCC_PCIE_1_PIPE_CLK>,
+				 <&gcc GCC_PCIE_1_AUX_CLK>,
+				 <&gcc GCC_PCIE_1_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_1_MSTR_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_SLV_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_SLV_Q2A_AXI_CLK>,
+				 <&gcc GCC_PCIE_1_CLKREF_CLK>,
+				 <&gcc GCC_AGGRE_NOC_PCIE_TBU_CLK>;
+			clock-names = "pipe",
+				      "aux",
+				      "cfg",
+				      "bus_master",
+				      "bus_slave",
+				      "slave_q2a",
+				      "ref",
+				      "tbu";
+
+			assigned-clocks = <&gcc GCC_PCIE_1_AUX_CLK>;
+			assigned-clock-rates = <19200000>;
+
+			iommus = <&apps_smmu 0x1c00 0xf>;
+			iommu-map = <0x0   &apps_smmu 0x1c00 0x1>,
+				    <0x100 &apps_smmu 0x1c01 0x1>,
+				    <0x200 &apps_smmu 0x1c02 0x1>,
+				    <0x300 &apps_smmu 0x1c03 0x1>,
+				    <0x400 &apps_smmu 0x1c04 0x1>,
+				    <0x500 &apps_smmu 0x1c05 0x1>,
+				    <0x600 &apps_smmu 0x1c06 0x1>,
+				    <0x700 &apps_smmu 0x1c07 0x1>,
+				    <0x800 &apps_smmu 0x1c08 0x1>,
+				    <0x900 &apps_smmu 0x1c09 0x1>,
+				    <0xa00 &apps_smmu 0x1c0a 0x1>,
+				    <0xb00 &apps_smmu 0x1c0b 0x1>,
+				    <0xc00 &apps_smmu 0x1c0c 0x1>,
+				    <0xd00 &apps_smmu 0x1c0d 0x1>,
+				    <0xe00 &apps_smmu 0x1c0e 0x1>,
+				    <0xf00 &apps_smmu 0x1c0f 0x1>;
+
+			resets = <&gcc GCC_PCIE_1_BCR>;
+			reset-names = "pci";
+
+			power-domains = <&gcc PCIE_1_GDSC>;
+
+			interconnects = <&rsc_hlos MASTER_PCIE_0 &rsc_hlos SLAVE_EBI1>;
+			interconnect-names = "pcie-mem";
+
+			phys = <&pcie1_lane>;
+			phy-names = "pciephy";
+
+			status = "disabled";
+		};
+
+		pcie1_phy: phy@1c0a000 {
+			compatible = "qcom,sdm845-qhp-pcie-phy";
+			reg = <0 0x01c0a000 0 0x800>;
+			#address-cells = <2>;
+			#size-cells = <2>;
+			ranges;
+			clocks = <&gcc GCC_PCIE_PHY_AUX_CLK>,
+				 <&gcc GCC_PCIE_1_CFG_AHB_CLK>,
+				 <&gcc GCC_PCIE_1_CLKREF_CLK>,
+				 <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			clock-names = "aux", "cfg_ahb", "ref", "refgen";
+
+			resets = <&gcc GCC_PCIE_1_PHY_BCR>;
+			reset-names = "phy";
+
+			assigned-clocks = <&gcc GCC_PCIE_PHY_REFGEN_CLK>;
+			assigned-clock-rates = <100000000>;
+
+			status = "disabled";
+
+			pcie1_lane: lanes@1c06200 {
+				reg = <0 0x01c0a800 0 0x800>,
+				      <0 0x01c0a800 0 0x800>,
+				      <0 0x01c0b800 0 0x400>;
+				clocks = <&gcc GCC_PCIE_1_PIPE_CLK>;
+				clock-names = "pipe0";
+
+				#phy-cells = <0>;
+				clock-output-names = "pcie_1_pipe_clk";
+			};
+		};
+
 		ufs_mem_hc: ufshc@1d84000 {
 			compatible = "qcom,sdm845-ufshc", "qcom,ufshc",
 				     "jedec,ufs-2.0";
-			reg = <0 0x01d84000 0 0x2500>;
+			reg = <0 0x01d84000 0 0x2500>,
+			      <0 0x01d90000 0 0x8000>;
+			reg-names = "std", "ice";
 			interrupts = <GIC_SPI 265 IRQ_TYPE_LEVEL_HIGH>;
 			phys = <&ufs_mem_phy_lanes>;
 			phy-names = "ufsphy";
@@ -1385,7 +1602,8 @@
 				"ref_clk",
 				"tx_lane0_sync_clk",
 				"rx_lane0_sync_clk",
-				"rx_lane1_sync_clk";
+				"rx_lane1_sync_clk",
+				"ice_core_clk";
 			clocks =
 				<&gcc GCC_UFS_PHY_AXI_CLK>,
 				<&gcc GCC_AGGRE_UFS_PHY_AXI_CLK>,
@@ -1394,7 +1612,8 @@
 				<&rpmhcc RPMH_CXO_CLK>,
 				<&gcc GCC_UFS_PHY_TX_SYMBOL_0_CLK>,
 				<&gcc GCC_UFS_PHY_RX_SYMBOL_0_CLK>,
-				<&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>;
+				<&gcc GCC_UFS_PHY_RX_SYMBOL_1_CLK>,
+				<&gcc GCC_UFS_PHY_ICE_CORE_CLK>;
 			freq-table-hz =
 				<50000000 200000000>,
 				<0 0>,
@@ -1403,7 +1622,8 @@
 				<0 0>,
 				<0 0>,
 				<0 0>,
-				<0 0>;
+				<0 0>,
+				<0 300000000>;
 
 			status = "disabled";
 		};
@@ -2912,6 +3132,8 @@
 					<&gpucc GPU_GX_GDSC>;
 			power-domain-names = "cx", "gx";
 
+			dma-ranges = <0 0x60000000 0 0x60000000 0 0x20000000>;
+
 			iommus = <&adreno_smmu 5>;
 
 			operating-points-v2 = <&gmu_opp_table>;
@@ -2934,6 +3156,7 @@
 		dispcc: clock-controller@af00000 {
 			compatible = "qcom,sdm845-dispcc";
 			reg = <0 0x0af00000 0 0x10000>;
+			clocks = <&gcc GCC_DISP_GPLL0_CLK_SRC>;
 			#clock-cells = <1>;
 			#reset-cells = <1>;
 			#power-domain-cells = <1>;
@@ -3008,6 +3231,7 @@
 			compatible = "qcom,sdm845-smmu-500", "arm,mmu-500";
 			reg = <0 0x15000000 0 0x80000>;
 			#iommu-cells = <2>;
+			qcom,smmu-500-fw-impl-safe-errata;
 			#global-interrupts = <1>;
 			interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>,
 				     <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>,
@@ -3084,6 +3308,12 @@
 			status = "disabled";
 		};
 
+		watchdog@17980000 {
+			compatible = "qcom,apss-wdt-sdm845", "qcom,kpss-wdt";
+			reg = <0 0x17980000 0 0x1000>;
+			clocks = <&sleep_clk>;
+		};
+
 		apss_shared: mailbox@17990000 {
 			compatible = "qcom,sdm845-apss-shared";
 			reg = <0 0x17990000 0 0x1000>;
diff --git a/arch/arm64/configs/db845c_gki.fragment b/arch/arm64/configs/db845c_gki.fragment
new file mode 100644
index 0000000..f05e75b
--- /dev/null
+++ b/arch/arm64/configs/db845c_gki.fragment
@@ -0,0 +1,89 @@
+CONFIG_QRTR=m
+CONFIG_QRTR_TUN=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_INPUT_PM8941_PWRKEY=m
+CONFIG_SERIAL_MSM=m
+CONFIG_SERIAL_QCOM_GENI=m
+CONFIG_SERIAL_QCOM_GENI_CONSOLE=y
+CONFIG_I2C_QCOM_GENI=m
+CONFIG_I2C_QUP=m
+CONFIG_PINCTRL_MSM8998=m
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=m
+CONFIG_PINCTRL_SDM845=m
+CONFIG_POWER_RESET_QCOM_PON=m
+CONFIG_SYSCON_REBOOT_MODE=m
+CONFIG_QCOM_TSENS=m
+CONFIG_QCOM_WDT=m
+CONFIG_PM8916_WATCHDOG=m
+CONFIG_MFD_SPMI_PMIC=m
+CONFIG_SPMI_MSM_PMIC_ARB=m
+CONFIG_QCOM_RPMH=m
+CONFIG_QCOM_RPMHPD=m
+CONFIG_REGULATOR_QCOM_RPMH=m
+CONFIG_REGULATOR_QCOM_SPMI=m
+CONFIG_DRM_MSM=m
+# CONFIG_DRM_MSM_DSI_28NM_PHY is not set
+# CONFIG_DRM_MSM_DSI_20NM_PHY is not set
+# CONFIG_DRM_MSM_DSI_28NM_8960_PHY is not set
+CONFIG_DRM_LONTIUM_LT9611=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+# CONFIG_USB_DWC3_HAPS is not set
+# CONFIG_USB_DWC3_OF_SIMPLE is not set
+CONFIG_USB_GADGET_VBUS_DRAW=500
+CONFIG_USB_ULPI_BUS=m
+CONFIG_MMC_SDHCI_MSM=m
+CONFIG_RTC_DRV_PM8XXX=m
+CONFIG_COMMON_CLK_QCOM=m
+CONFIG_COMMON_CLK_SCMI=m
+CONFIG_SDM_GPUCC_845=m
+CONFIG_QCOM_CLK_RPMH=m
+CONFIG_MSM_GCC_8998=m
+CONFIG_SDM_DISPCC_845=m
+CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_QCOM_GENI_SE=m
+CONFIG_QCOM_GSBI=m
+CONFIG_QCOM_LLCC=m
+CONFIG_QCOM_RMTFS_MEM=m
+CONFIG_QCOM_SMEM=m
+CONFIG_QCOM_SMSM=m
+CONFIG_EXTCON_USB_GPIO=m
+CONFIG_RESET_QCOM_AOSS=m
+CONFIG_RESET_QCOM_PDC=m
+CONFIG_PHY_QCOM_QMP=m
+CONFIG_PHY_QCOM_QUSB2=m
+CONFIG_PHY_QCOM_USB_HS=m
+CONFIG_QCOM_QFPROM=m
+CONFIG_INTERCONNECT_QCOM=y
+CONFIG_INTERCONNECT_QCOM_SDM845=m
+CONFIG_WLAN_VENDOR_ATH=y
+CONFIG_ATH10K_AHB=y
+CONFIG_ATH10K=m
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_SNOC=m
+CONFIG_QRTR_SMD=m
+CONFIG_QCOM_FASTRPC=m
+CONFIG_QCOM_APCS_IPC=m
+CONFIG_QCOM_Q6V5_COMMON=m
+CONFIG_QCOM_RPROC_COMMON=m
+CONFIG_QCOM_Q6V5_ADSP=m
+CONFIG_QCOM_Q6V5_MSS=m
+CONFIG_QCOM_Q6V5_PAS=m
+CONFIG_QCOM_Q6V5_WCSS=m
+CONFIG_QCOM_SYSMON=m
+CONFIG_RPMSG_QCOM_GLINK_SMEM=m
+CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_QCOM_AOSS_QMP=m
+CONFIG_QCOM_SMP2P=m
+CONFIG_QCOM_SOCINFO=m
+CONFIG_QCOM_APR=m
+CONFIG_QCOM_GLINK_SSR=m
+CONFIG_RPMSG_QCOM_GLINK_RPM=m
+CONFIG_QCOM_PDC=m
+CONFIG_QCOM_SCM=m
+CONFIG_ARM_SMMU=m
+CONFIG_ARM_QCOM_CPUFREQ_HW=m
+CONFIG_SCSI_UFS_QCOM=m
+CONFIG_DMABUF_HEAPS_SYSTEM=m
+CONFIG_QCOM_COMMAND_DB=m
diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
index c9a867a..7456909 100644
--- a/arch/arm64/configs/defconfig
+++ b/arch/arm64/configs/defconfig
@@ -13,10 +13,12 @@
 CONFIG_TASK_IO_ACCOUNTING=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_UCLAMP_TASK=y
 CONFIG_NUMA_BALANCING=y
 CONFIG_MEMCG=y
 CONFIG_MEMCG_SWAP=y
 CONFIG_BLK_CGROUP=y
+CONFIG_UCLAMP_TASK_GROUP=y
 CONFIG_CGROUP_PIDS=y
 CONFIG_CGROUP_HUGETLB=y
 CONFIG_CPUSETS=y
@@ -71,10 +73,12 @@
 CONFIG_RANDOMIZE_BASE=y
 CONFIG_HIBERNATION=y
 CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
+CONFIG_ENERGY_MODEL=y
 CONFIG_ARM_CPUIDLE=y
 CONFIG_ARM_PSCI_CPUIDLE=y
 CONFIG_CPU_FREQ=y
 CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
 CONFIG_CPU_FREQ_GOV_POWERSAVE=m
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 CONFIG_CPU_FREQ_GOV_ONDEMAND=y
diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig
new file mode 100644
index 0000000..2f5c00c
--- /dev/null
+++ b/arch/arm64/configs/gki_defconfig
@@ -0,0 +1,642 @@
+CONFIG_UAPI_HEADER_TEST=y
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=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_IKHEADERS=y
+CONFIG_UCLAMP_TASK=y
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_UCLAMP_TASK_GROUP=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+CONFIG_BOOT_CONFIG=y
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_FHANDLE is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT_ALWAYS_ON=y
+CONFIG_USERFAULTFD=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
+CONFIG_PROFILING=y
+CONFIG_ARCH_SUNXI=y
+CONFIG_ARCH_HISI=y
+CONFIG_ARCH_QCOM=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=32
+CONFIG_SECCOMP=y
+CONFIG_PARAVIRT=y
+CONFIG_ARM64_SW_TTBR0_PAN=y
+CONFIG_COMPAT=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+# CONFIG_ARM64_VHE is not set
+CONFIG_RANDOMIZE_BASE=y
+# CONFIG_RANDOMIZE_MODULE_REGION_FULL is not set
+CONFIG_CMDLINE="cgroup_disable=pressure"
+CONFIG_CMDLINE_EXTEND=y
+# CONFIG_DMI is not set
+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_ARM_PSCI_CPUIDLE=y
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_STAT=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_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_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+CONFIG_SHADOW_CALL_STACK=y
+# CONFIG_THINLTO is not set
+CONFIG_LTO_CLANG=y
+CONFIG_CFI_CLANG=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_BLK_DEV_THROTTLING=y
+CONFIG_BLK_CGROUP_IOCOST=y
+CONFIG_BLK_INLINE_ENCRYPTION=y
+CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
+CONFIG_GKI_HACKS_TO_FIX=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+CONFIG_CLEANCACHE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_XDP_SOCKETS=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=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_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_GRE=y
+CONFIG_IPV6_MULTIPLE_TABLES=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_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_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+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_QUOTA2_LOG=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_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_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+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_TBF=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_BASIC=y
+CONFIG_NET_CLS_TCINDEX=y
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_CLS_MATCHALL=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=y
+CONFIG_NET_ACT_GACT=y
+CONFIG_NET_ACT_MIRRED=y
+CONFIG_VSOCKETS=y
+CONFIG_BPF_JIT=y
+CONFIG_CAN=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_BCM=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIEAER is not set
+CONFIG_PCI_IOV=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_PCIE_DW_PLAT_EP=y
+CONFIG_PCIE_QCOM=y
+CONFIG_PCIE_KIRIN=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+# CONFIG_FW_CACHE is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+# CONFIG_SUN50I_DE2_BUS is not set
+# CONFIG_SUNXI_RSB is not set
+CONFIG_GNSS=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_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PCI=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
+CONFIG_SCSI_UFS_HISI=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFS_CRYPTO=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_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+CONFIG_WIREGUARD=y
+CONFIG_IFB=y
+CONFIG_TUN=y
+CONFIG_VETH=y
+# CONFIG_ETHERNET is not set
+CONFIG_PHYLIB=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_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+# CONFIG_USB_NET_AX88179_178A 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_USB_NET_AQC111=y
+# 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_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# 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_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_SERIAL_SAMSUNG=y
+CONFIG_SERIAL_SAMSUNG_CONSOLE=y
+CONFIG_SERIAL_SPRD=y
+CONFIG_SERIAL_SPRD_CONSOLE=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_HW_RANDOM=y
+# 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_SPMI_MSM_PMIC_ARB is not set
+CONFIG_PINCTRL_AMD=y
+# CONFIG_PINCTRL_SUN8I_H3_R is not set
+# CONFIG_PINCTRL_SUN50I_A64 is not set
+# CONFIG_PINCTRL_SUN50I_A64_R is not set
+# CONFIG_PINCTRL_SUN50I_A100 is not set
+# CONFIG_PINCTRL_SUN50I_A100_R is not set
+# CONFIG_PINCTRL_SUN50I_H5 is not set
+# CONFIG_PINCTRL_SUN50I_H6 is not set
+# CONFIG_PINCTRL_SUN50I_H6_R is not set
+CONFIG_POWER_AVS=y
+CONFIG_POWER_RESET_HISI=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_STATISTICS=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+CONFIG_MFD_ACT8945A=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_RC_CORE=y
+# CONFIG_RC_MAP is not set
+CONFIG_LIRC=y
+CONFIG_BPF_LIRC_MODE2=y
+CONFIG_RC_DECODERS=y
+CONFIG_RC_DEVICES=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CEC_SUPPORT=y
+CONFIG_MEDIA_CEC_RC=y
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_USB_GSPCA=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_CEC_PLATFORM_DRIVERS=y
+# CONFIG_VIDEO_IR_I2C is not set
+# CONFIG_VGA_ARB is not set
+CONFIG_DRM=y
+# CONFIG_DRM_FBDEV_EMULATION 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_DRIVERS is not set
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_PRODIKEYS=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_UCLOGIC=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_NINTENDO=y
+CONFIG_HID_PICOLCD=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_PLAYSTATION=y
+CONFIG_PLAYSTATION_FF=y
+CONFIG_HID_ROCCAT=y
+CONFIG_HID_SONY=y
+CONFIG_SONY_FF=y
+CONFIG_HID_STEAM=y
+CONFIG_HID_WACOM=y
+CONFIG_HID_WIIMOTE=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+CONFIG_USB_OTG=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_RNDIS=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_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_TYPEC=y
+CONFIG_TYPEC_TCPM=y
+CONFIG_TYPEC_UCSI=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_CRYPTO=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_EDAC=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_DMADEVICES=y
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_SYSFS_STATS=y
+CONFIG_UIO=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_CLK_SUNXI is not set
+# CONFIG_SUNXI_CCU is not set
+CONFIG_HWSPINLOCK=y
+CONFIG_SUN4I_TIMER=y
+# CONFIG_SUN50I_ERRATUM_UNKNOWN1 is not set
+CONFIG_MTK_TIMER=y
+CONFIG_SPRD_TIMER=y
+CONFIG_MAILBOX=y
+CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT=y
+CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y
+CONFIG_REMOTEPROC=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_IIO=y
+CONFIG_IIO_BUFFER=y
+CONFIG_IIO_TRIGGER=y
+CONFIG_PWM=y
+CONFIG_GENERIC_PHY=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=y
+CONFIG_ANDROID_VENDOR_HOOKS=y
+CONFIG_LIBNVDIMM=y
+# CONFIG_ND_BLK is not set
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_COMPRESSION=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_VIRTIO_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_INCREMENTAL_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS=y
+# CONFIG_EFIVAR_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_PMSG=y
+CONFIG_PSTORE_RAM=y
+CONFIG_EROFS_FS=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_UNICODE=y
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
+CONFIG_STATIC_USERMODEHELPER=y
+CONFIG_STATIC_USERMODEHELPER_PATH=""
+CONFIG_SECURITY_SELINUX=y
+CONFIG_INIT_STACK_ALL_ZERO=y
+CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
+CONFIG_CRYPTO_CHACHA20POLY1305=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_BLAKE2B=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_PRINTK_CALLER=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_DEBUG_FS=y
+CONFIG_HEADERS_INSTALL=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_KFENCE=y
+CONFIG_KFENCE_SAMPLE_INTERVAL=500
+CONFIG_KFENCE_NUM_OBJECTS=63
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_SCHEDSTATS=y
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_UBSAN=y
+CONFIG_UBSAN_TRAP=y
+# CONFIG_UBSAN_MISC is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_STM=y
diff --git a/arch/arm64/configs/hikey960_gki.fragment b/arch/arm64/configs/hikey960_gki.fragment
new file mode 100644
index 0000000..3edf353
--- /dev/null
+++ b/arch/arm64/configs/hikey960_gki.fragment
@@ -0,0 +1,53 @@
+CONFIG_CPUFREQ_DT=m
+CONFIG_RFKILL_GPIO=m
+CONFIG_CONNECTOR=m
+CONFIG_BLK_DEV_NVME=m
+CONFIG_HISI_HIKEY_USB=m
+CONFIG_WLAN_VENDOR_TI=y
+CONFIG_WL18XX=m
+CONFIG_WLCORE_SDIO=m
+CONFIG_INPUT_HISI_POWERKEY=m
+CONFIG_SERIO_AMBAKMI=m
+CONFIG_I2C_CHARDEV=m
+CONFIG_I2C_DESIGNWARE_PLATFORM=m
+CONFIG_SPI_PL022=m
+CONFIG_SPI_SPIDEV=m
+CONFIG_SYSCON_REBOOT_MODE=m
+CONFIG_HWMON=m
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR=y
+CONFIG_THERMAL_GOV_STEP_WISE=y
+CONFIG_HISI_THERMAL=m
+CONFIG_MFD_HI6421_PMIC=m
+CONFIG_MFD_HI655X_PMIC=m
+CONFIG_REGULATOR_HI6421V530=m
+CONFIG_REGULATOR_HI655X=m
+CONFIG_MALI_DEVFREQ=y
+CONFIG_DRM_I2C_ADV7511=m
+CONFIG_DRM_I2C_ADV7511_AUDIO=y
+CONFIG_DRM_HISI_KIRIN=m
+CONFIG_DRM_HISI_KIRIN960=y
+CONFIG_SND_I2S_HI3660_I2S=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_USB_OHCI_HCD=m
+CONFIG_USB_OHCI_HCD_PLATFORM=m
+CONFIG_TYPEC_TCPCI=m
+CONFIG_TYPEC_RT1711H=m
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_MINORS=64
+CONFIG_MMC_ARMMMCI=m
+CONFIG_MMC_SPI=m
+CONFIG_MMC_DW=m
+CONFIG_MMC_DW_EXYNOS=m
+CONFIG_MMC_DW_K3=m
+CONFIG_RTC_DRV_EFI=m
+CONFIG_K3_DMA=m
+CONFIG_ION_CMA_HEAP=m
+CONFIG_DMABUF_HEAPS_CMA=m
+CONFIG_DMABUF_HEAPS_SYSTEM=m
+CONFIG_HI3660_MBOX=m
+CONFIG_MALI_MIDGARD=m
+CONFIG_MALI_PLATFORM_NAME="hisilicon"
+CONFIG_MALI_EXPERT=y
+CONFIG_MALI_PWRSOFT_765=y
+CONFIG_PHY_HI3660_USB=m
diff --git a/arch/arm64/configs/rockpi4_defconfig b/arch/arm64/configs/rockpi4_defconfig
new file mode 100644
index 0000000..6a4a3e6
--- /dev/null
+++ b/arch/arm64/configs/rockpi4_defconfig
@@ -0,0 +1,539 @@
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_PSI=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+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_AUTOGROUP=y
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_RD_LZ4 is not set
+# CONFIG_SYSFS_SYSCALL is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# 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_QCOM=y
+CONFIG_ARCH_ROCKCHIP=y
+CONFIG_SCHED_MC=y
+CONFIG_NR_CPUS=32
+CONFIG_SECCOMP=y
+CONFIG_PARAVIRT=y
+CONFIG_COMPAT=y
+CONFIG_ARMV8_DEPRECATED=y
+CONFIG_SWP_EMULATION=y
+CONFIG_CP15_BARRIER_EMULATION=y
+CONFIG_SETEND_EMULATION=y
+CONFIG_RANDOMIZE_BASE=y
+# CONFIG_DMI is not set
+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_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=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_EFI_ARMSTUB_DTB_LOADER is not set
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_ARM64_CRYPTO=y
+CONFIG_CRYPTO_AES_ARM64=y
+CONFIG_KPROBES=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+# CONFIG_SPARSEMEM_VMEMMAP is not set
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+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_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=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_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+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
+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_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_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_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+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_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_BT=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+# CONFIG_MAC80211_RC_MINSTREL is not set
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCI_HOST_GENERIC=y
+CONFIG_DEVTMPFS=y
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_DEBUG_DEVRES=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_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_MD=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_UEVENT=y
+CONFIG_DM_VERITY=y
+CONFIG_DM_VERITY_FEC=y
+CONFIG_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_TUN=y
+CONFIG_VIRTIO_NET=y
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_ADAPTEC is not set
+# CONFIG_NET_VENDOR_AGERE is not set
+# CONFIG_NET_VENDOR_ALACRITECH is not set
+# CONFIG_NET_VENDOR_ALTEON is not set
+# CONFIG_NET_VENDOR_AMAZON is not set
+# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_VENDOR_AQUANTIA is not set
+# CONFIG_NET_VENDOR_ARC is not set
+# CONFIG_NET_VENDOR_ATHEROS is not set
+# CONFIG_NET_VENDOR_AURORA is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_BROCADE is not set
+# CONFIG_NET_VENDOR_CADENCE is not set
+# CONFIG_NET_VENDOR_CAVIUM is not set
+# CONFIG_NET_VENDOR_CHELSIO is not set
+# CONFIG_NET_VENDOR_CISCO is not set
+# CONFIG_NET_VENDOR_CORTINA is not set
+# CONFIG_NET_VENDOR_DEC is not set
+# CONFIG_NET_VENDOR_DLINK is not set
+# CONFIG_NET_VENDOR_EMULEX is not set
+# CONFIG_NET_VENDOR_EZCHIP is not set
+# CONFIG_NET_VENDOR_HISILICON is not set
+# CONFIG_NET_VENDOR_HP is not set
+# CONFIG_NET_VENDOR_HUAWEI is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_MICROCHIP is not set
+# CONFIG_NET_VENDOR_MICROSEMI is not set
+# CONFIG_NET_VENDOR_MYRI is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_NETERION is not set
+# CONFIG_NET_VENDOR_NETRONOME is not set
+# CONFIG_NET_VENDOR_NI is not set
+# CONFIG_NET_VENDOR_NVIDIA is not set
+# CONFIG_NET_VENDOR_OKI is not set
+# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
+# CONFIG_NET_VENDOR_QLOGIC is not set
+# CONFIG_NET_VENDOR_QUALCOMM is not set
+# CONFIG_NET_VENDOR_RDC is not set
+# CONFIG_NET_VENDOR_REALTEK is not set
+# CONFIG_NET_VENDOR_RENESAS is not set
+# CONFIG_NET_VENDOR_ROCKER is not set
+# CONFIG_NET_VENDOR_SAMSUNG is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SOLARFLARE is not set
+# CONFIG_NET_VENDOR_SILAN is not set
+# CONFIG_NET_VENDOR_SIS is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_SOCIONEXT is not set
+CONFIG_STMMAC_ETH=y
+# CONFIG_DWMAC_GENERIC is not set
+# CONFIG_NET_VENDOR_SUN is not set
+# CONFIG_NET_VENDOR_SYNOPSYS is not set
+# CONFIG_NET_VENDOR_TEHUTI is not set
+# CONFIG_NET_VENDOR_TI is not set
+# CONFIG_NET_VENDOR_VIA is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_ROCKCHIP_PHY=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_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_VIRT_WIFI=y
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# 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_SERIAL_8250_DW=y
+CONFIG_SERIAL_OF_PLATFORM=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_VIRTIO_CONSOLE=y
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_VIRTIO=y
+# CONFIG_HW_RANDOM_CAVIUM is not set
+# CONFIG_DEVPORT is not set
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_MUX_PINCTRL=y
+CONFIG_I2C_DEMUX_PINCTRL=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_I2C_DESIGNWARE_PLATFORM=y
+CONFIG_I2C_DESIGNWARE_SLAVE=y
+CONFIG_I2C_RK3X=y
+CONFIG_SPI=y
+CONFIG_SPI_ROCKCHIP=y
+CONFIG_SPMI=y
+CONFIG_DEBUG_PINCTRL=y
+CONFIG_PINCTRL_AMD=y
+CONFIG_PINCTRL_SINGLE=y
+CONFIG_PINCTRL_RK805=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
+CONFIG_POWER_AVS=y
+CONFIG_ROCKCHIP_IODOMAIN=y
+CONFIG_POWER_RESET_GPIO=y
+CONFIG_POWER_RESET_GPIO_RESTART=y
+CONFIG_POWER_RESET_RESTART=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_POWER_RESET_SYSCON_POWEROFF=y
+CONFIG_SYSCON_REBOOT_MODE=y
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_ROCKCHIP_THERMAL=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_PRETIMEOUT_GOV=y
+# CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP is not set
+CONFIG_DW_WATCHDOG=y
+CONFIG_MFD_ACT8945A=y
+CONFIG_MFD_RK808=y
+CONFIG_REGULATOR_DEBUG=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_REGULATOR_VIRTUAL_CONSUMER=y
+CONFIG_REGULATOR_USERSPACE_CONSUMER=y
+CONFIG_REGULATOR_GPIO=y
+CONFIG_REGULATOR_PWM=y
+CONFIG_REGULATOR_RK808=y
+CONFIG_REGULATOR_VCTRL=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_ROCKCHIP=y
+CONFIG_ROCKCHIP_DW_HDMI=y
+CONFIG_DRM_VIRTIO_GPU=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_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_SND_SOC_TS3A227E=y
+CONFIG_HIDRAW=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_USB_HIDDEV=y
+CONFIG_USB=y
+CONFIG_USB_OTG=y
+CONFIG_USB_OTG_FSM=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_PCI is not set
+CONFIG_USB_OHCI_HCD_PLATFORM=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_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+CONFIG_MMC_SDHCI_OF_DWCMSHC=y
+CONFIG_MMC_DW=y
+CONFIG_MMC_DW_ROCKCHIP=y
+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_RK808=y
+CONFIG_RTC_DRV_PL030=y
+CONFIG_RTC_DRV_PL031=y
+CONFIG_DMADEVICES=y
+CONFIG_PL330_DMA=y
+CONFIG_VIRTIO_PCI=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_ION_SYSTEM_CONTIG_HEAP=y
+CONFIG_COMMON_CLK_RK808=y
+CONFIG_COMMON_CLK_SCPI=y
+CONFIG_HWSPINLOCK=y
+CONFIG_MAILBOX=y
+CONFIG_ROCKCHIP_MBOX=y
+CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ARM_SMMU=y
+CONFIG_QCOM_COMMAND_DB=y
+CONFIG_QCOM_RPMH=y
+CONFIG_ROCKCHIP_PM_DOMAINS=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+CONFIG_DEVFREQ_GOV_PASSIVE=y
+CONFIG_ARM_RK3399_DMC_DEVFREQ=y
+CONFIG_PWM=y
+CONFIG_PWM_ROCKCHIP=y
+CONFIG_QCOM_PDC=y
+CONFIG_PHY_ROCKCHIP_EMMC=y
+CONFIG_PHY_ROCKCHIP_INNO_HDMI=y
+CONFIG_PHY_ROCKCHIP_INNO_USB2=y
+CONFIG_PHY_ROCKCHIP_USB=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ROCKCHIP_EFUSE=y
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_FS_ENCRYPTION=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_EFIVAR_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_RAM=y
+CONFIG_SECURITY_PERF_EVENTS_RESTRICT=y
+CONFIG_SECURITY=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+CONFIG_SECURITY_SELINUX=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_MD4=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ZSTD=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRYPTO_DEV_ROCKCHIP=y
+CONFIG_CRYPTO_DEV_VIRTIO=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_TIMEOUT=5
+CONFIG_SCHEDSTATS=y
+CONFIG_FUNCTION_TRACER=y
+# CONFIG_RUNTIME_TESTING_MENU is not set
+CONFIG_CORESIGHT=y
+CONFIG_CORESIGHT_STM=y
diff --git a/arch/arm64/crypto/.gitignore b/arch/arm64/crypto/.gitignore
index 879df87..e403b13 100644
--- a/arch/arm64/crypto/.gitignore
+++ b/arch/arm64/crypto/.gitignore
@@ -1,2 +1,3 @@
 sha256-core.S
 sha512-core.S
+poly1305-core.S
diff --git a/arch/arm64/crypto/Kconfig b/arch/arm64/crypto/Kconfig
index 4922c44..30d9b24 100644
--- a/arch/arm64/crypto/Kconfig
+++ b/arch/arm64/crypto/Kconfig
@@ -103,7 +103,14 @@
 	tristate "ChaCha20, XChaCha20, and XChaCha12 stream ciphers using NEON instructions"
 	depends on KERNEL_MODE_NEON
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_LIB_CHACHA_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
+config CRYPTO_POLY1305_NEON
+	tristate "Poly1305 hash function using scalar or NEON instructions"
+	depends on KERNEL_MODE_NEON
+	select CRYPTO_HASH
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 
 config CRYPTO_NHPOLY1305_NEON
 	tristate "NHPoly1305 hash function using NEON instructions (for Adiantum)"
diff --git a/arch/arm64/crypto/Makefile b/arch/arm64/crypto/Makefile
index 0435f2a..d0901e6 100644
--- a/arch/arm64/crypto/Makefile
+++ b/arch/arm64/crypto/Makefile
@@ -50,6 +50,10 @@
 obj-$(CONFIG_CRYPTO_CHACHA20_NEON) += chacha-neon.o
 chacha-neon-y := chacha-neon-core.o chacha-neon-glue.o
 
+obj-$(CONFIG_CRYPTO_POLY1305_NEON) += poly1305-neon.o
+poly1305-neon-y := poly1305-core.o poly1305-glue.o
+AFLAGS_poly1305-core.o += -Dpoly1305_init=poly1305_init_arm64
+
 obj-$(CONFIG_CRYPTO_NHPOLY1305_NEON) += nhpoly1305-neon.o
 nhpoly1305-neon-y := nh-neon-core.o nhpoly1305-neon-glue.o
 
@@ -68,11 +72,15 @@
 quiet_cmd_perlasm = PERLASM $@
       cmd_perlasm = $(PERL) $(<) void $(@)
 
+$(src)/poly1305-core.S_shipped: $(src)/poly1305-armv8.pl
+	$(call cmd,perlasm)
+
 $(src)/sha256-core.S_shipped: $(src)/sha512-armv8.pl
 	$(call cmd,perlasm)
 
 $(src)/sha512-core.S_shipped: $(src)/sha512-armv8.pl
 	$(call cmd,perlasm)
+
 endif
 
-clean-files += sha256-core.S sha512-core.S
+clean-files += poly1305-core.S sha256-core.S sha512-core.S
diff --git a/arch/arm64/crypto/chacha-neon-glue.c b/arch/arm64/crypto/chacha-neon-glue.c
index 1495d2b..1d9824c 100644
--- a/arch/arm64/crypto/chacha-neon-glue.c
+++ b/arch/arm64/crypto/chacha-neon-glue.c
@@ -1,5 +1,5 @@
 /*
- * ARM NEON accelerated ChaCha and XChaCha stream ciphers,
+ * ARM NEON and scalar accelerated ChaCha and XChaCha stream ciphers,
  * including ChaCha20 (RFC7539)
  *
  * Copyright (C) 2016 - 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
@@ -20,9 +20,10 @@
  */
 
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/simd.h>
 #include <crypto/internal/skcipher.h>
+#include <linux/jump_label.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
@@ -36,6 +37,8 @@
 				       int nrounds, int bytes);
 asmlinkage void hchacha_block_neon(const u32 *state, u32 *out, int nrounds);
 
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
 static void chacha_doneon(u32 *state, u8 *dst, const u8 *src,
 			  int bytes, int nrounds)
 {
@@ -52,13 +55,52 @@
 			break;
 		}
 		chacha_4block_xor_neon(state, dst, src, nrounds, l);
-		bytes -= CHACHA_BLOCK_SIZE * 5;
-		src += CHACHA_BLOCK_SIZE * 5;
-		dst += CHACHA_BLOCK_SIZE * 5;
-		state[12] += 5;
+		bytes -= l;
+		src += l;
+		dst += l;
+		state[12] += DIV_ROUND_UP(l, CHACHA_BLOCK_SIZE);
 	}
 }
 
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!static_branch_likely(&have_neon) || !crypto_simd_usable()) {
+		hchacha_block_generic(state, stream, nrounds);
+	} else {
+		kernel_neon_begin();
+		hchacha_block_neon(state, stream, nrounds);
+		kernel_neon_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!static_branch_likely(&have_neon) || bytes <= CHACHA_BLOCK_SIZE ||
+	    !crypto_simd_usable())
+		return chacha_crypt_generic(state, dst, src, bytes, nrounds);
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_neon_begin();
+		chacha_doneon(state, dst, src, todo, nrounds);
+		kernel_neon_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
 static int chacha_neon_stream_xor(struct skcipher_request *req,
 				  const struct chacha_ctx *ctx, const u8 *iv)
 {
@@ -68,7 +110,7 @@
 
 	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
 	while (walk.nbytes > 0) {
 		unsigned int nbytes = walk.nbytes;
@@ -76,10 +118,17 @@
 		if (nbytes < walk.total)
 			nbytes = rounddown(nbytes, walk.stride);
 
-		kernel_neon_begin();
-		chacha_doneon(state, walk.dst.virt.addr, walk.src.virt.addr,
-			      nbytes, ctx->nrounds);
-		kernel_neon_end();
+		if (!static_branch_likely(&have_neon) ||
+		    !crypto_simd_usable()) {
+			chacha_crypt_generic(state, walk.dst.virt.addr,
+					     walk.src.virt.addr, nbytes,
+					     ctx->nrounds);
+		} else {
+			kernel_neon_begin();
+			chacha_doneon(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes, ctx->nrounds);
+			kernel_neon_end();
+		}
 		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
@@ -91,9 +140,6 @@
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
 	return chacha_neon_stream_xor(req, ctx, req->iv);
 }
 
@@ -105,14 +151,8 @@
 	u32 state[16];
 	u8 real_iv[16];
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
-
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_neon_begin();
-	hchacha_block_neon(state, subctx.key, ctx->nrounds);
-	kernel_neon_end();
+	chacha_init_generic(state, ctx->key, req->iv);
+	hchacha_block_arch(state, subctx.key, ctx->nrounds);
 	subctx.nrounds = ctx->nrounds;
 
 	memcpy(&real_iv[0], req->iv + 24, 8);
@@ -134,7 +174,7 @@
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= chacha_neon,
 		.decrypt		= chacha_neon,
 	}, {
@@ -150,7 +190,7 @@
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= xchacha_neon,
 		.decrypt		= xchacha_neon,
 	}, {
@@ -166,7 +206,7 @@
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
 		.walksize		= 5 * CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= xchacha_neon,
 		.decrypt		= xchacha_neon,
 	}
@@ -175,14 +215,18 @@
 static int __init chacha_simd_mod_init(void)
 {
 	if (!cpu_have_named_feature(ASIMD))
-		return -ENODEV;
+		return 0;
 
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
+	static_branch_enable(&have_neon);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
 }
 
 static void __exit chacha_simd_mod_fini(void)
 {
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) && cpu_have_named_feature(ASIMD))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
 }
 
 module_init(chacha_simd_mod_init);
diff --git a/arch/arm64/crypto/poly1305-armv8.pl b/arch/arm64/crypto/poly1305-armv8.pl
new file mode 100644
index 0000000..cbc980f
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-armv8.pl
@@ -0,0 +1,913 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, initially for the OpenSSL
+# project.
+# ====================================================================
+#
+# This module implements Poly1305 hash for ARMv8.
+#
+# June 2015
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone.
+#
+#		IALU/gcc-4.9	NEON
+#
+# Apple A7	1.86/+5%	0.72
+# Cortex-A53	2.69/+58%	1.47
+# Cortex-A57	2.70/+7%	1.14
+# Denver	1.64/+50%	1.18(*)
+# X-Gene	2.13/+68%	2.27
+# Mongoose	1.77/+75%	1.12
+# Kryo		2.70/+55%	1.13
+# ThunderX2	1.17/+95%	1.36
+#
+# (*)	estimate based on resources availability is less than 1.0,
+#	i.e. measured result is worse than expected, presumably binary
+#	translator is not almighty;
+
+$flavour=shift;
+$output=shift;
+
+if ($flavour && $flavour ne "void") {
+    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
+    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
+    die "can't locate arm-xlate.pl";
+
+    open STDOUT,"| \"$^X\" $xlate $flavour $output";
+} else {
+    open STDOUT,">$output";
+}
+
+my ($ctx,$inp,$len,$padbit) = map("x$_",(0..3));
+my ($mac,$nonce)=($inp,$len);
+
+my ($h0,$h1,$h2,$r0,$r1,$s1,$t0,$t1,$d0,$d1,$d2) = map("x$_",(4..14));
+
+$code.=<<___;
+#ifndef __KERNEL__
+# include "arm_arch.h"
+.extern	OPENSSL_armcap_P
+#endif
+
+.text
+
+// forward "declarations" are required for Apple
+.globl	poly1305_blocks
+.globl	poly1305_emit
+
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+	cmp	$inp,xzr
+	stp	xzr,xzr,[$ctx]		// zero hash value
+	stp	xzr,xzr,[$ctx,#16]	// [along with is_base2_26]
+
+	csel	x0,xzr,x0,eq
+	b.eq	.Lno_key
+
+#ifndef	__KERNEL__
+	adrp	x17,OPENSSL_armcap_P
+	ldr	w17,[x17,#:lo12:OPENSSL_armcap_P]
+#endif
+
+	ldp	$r0,$r1,[$inp]		// load key
+	mov	$s1,#0xfffffffc0fffffff
+	movk	$s1,#0x0fff,lsl#48
+#ifdef	__AARCH64EB__
+	rev	$r0,$r0			// flip bytes
+	rev	$r1,$r1
+#endif
+	and	$r0,$r0,$s1		// &=0ffffffc0fffffff
+	and	$s1,$s1,#-4
+	and	$r1,$r1,$s1		// &=0ffffffc0ffffffc
+	mov	w#$s1,#-1
+	stp	$r0,$r1,[$ctx,#32]	// save key value
+	str	w#$s1,[$ctx,#48]	// impossible key power value
+
+#ifndef	__KERNEL__
+	tst	w17,#ARMV7_NEON
+
+	adr	$d0,.Lpoly1305_blocks
+	adr	$r0,.Lpoly1305_blocks_neon
+	adr	$d1,.Lpoly1305_emit
+
+	csel	$d0,$d0,$r0,eq
+
+# ifdef	__ILP32__
+	stp	w#$d0,w#$d1,[$len]
+# else
+	stp	$d0,$d1,[$len]
+# endif
+#endif
+	mov	x0,#1
+.Lno_key:
+	ret
+.size	poly1305_init,.-poly1305_init
+
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	ands	$len,$len,#-16
+	b.eq	.Lno_data
+
+	ldp	$h0,$h1,[$ctx]		// load hash value
+	ldp	$h2,x17,[$ctx,#16]	// [along with is_base2_26]
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+#ifdef	__AARCH64EB__
+	lsr	$d0,$h0,#32
+	mov	w#$d1,w#$h0
+	lsr	$d2,$h1,#32
+	mov	w15,w#$h1
+	lsr	x16,$h2,#32
+#else
+	mov	w#$d0,w#$h0
+	lsr	$d1,$h0,#32
+	mov	w#$d2,w#$h1
+	lsr	x15,$h1,#32
+	mov	w16,w#$h2
+#endif
+
+	add	$d0,$d0,$d1,lsl#26	// base 2^26 -> base 2^64
+	lsr	$d1,$d2,#12
+	adds	$d0,$d0,$d2,lsl#52
+	add	$d1,$d1,x15,lsl#14
+	adc	$d1,$d1,xzr
+	lsr	$d2,x16,#24
+	adds	$d1,$d1,x16,lsl#40
+	adc	$d2,$d2,xzr
+
+	cmp	x17,#0			// is_base2_26?
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+	csel	$h0,$h0,$d0,eq		// choose between radixes
+	csel	$h1,$h1,$d1,eq
+	csel	$h2,$h2,$d2,eq
+
+.Loop:
+	ldp	$t0,$t1,[$inp],#16	// load input
+	sub	$len,$len,#16
+#ifdef	__AARCH64EB__
+	rev	$t0,$t0
+	rev	$t1,$t1
+#endif
+	adds	$h0,$h0,$t0		// accumulate input
+	adcs	$h1,$h1,$t1
+
+	mul	$d0,$h0,$r0		// h0*r0
+	adc	$h2,$h2,$padbit
+	umulh	$d1,$h0,$r0
+
+	mul	$t0,$h1,$s1		// h1*5*r1
+	umulh	$t1,$h1,$s1
+
+	adds	$d0,$d0,$t0
+	mul	$t0,$h0,$r1		// h0*r1
+	adc	$d1,$d1,$t1
+	umulh	$d2,$h0,$r1
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h1,$r0		// h1*r0
+	adc	$d2,$d2,xzr
+	umulh	$t1,$h1,$r0
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h2,$s1		// h2*5*r1
+	adc	$d2,$d2,$t1
+	mul	$t1,$h2,$r0		// h2*r0
+
+	adds	$d1,$d1,$t0
+	adc	$d2,$d2,$t1
+
+	and	$t0,$d2,#-4		// final reduction
+	and	$h2,$d2,#3
+	add	$t0,$t0,$d2,lsr#2
+	adds	$h0,$d0,$t0
+	adcs	$h1,$d1,xzr
+	adc	$h2,$h2,xzr
+
+	cbnz	$len,.Loop
+
+	stp	$h0,$h1,[$ctx]		// store hash value
+	stp	$h2,xzr,[$ctx,#16]	// [and clear is_base2_26]
+
+.Lno_data:
+	ret
+.size	poly1305_blocks,.-poly1305_blocks
+
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	ldp	$h0,$h1,[$ctx]		// load hash base 2^64
+	ldp	$h2,$r0,[$ctx,#16]	// [along with is_base2_26]
+	ldp	$t0,$t1,[$nonce]	// load nonce
+
+#ifdef	__AARCH64EB__
+	lsr	$d0,$h0,#32
+	mov	w#$d1,w#$h0
+	lsr	$d2,$h1,#32
+	mov	w15,w#$h1
+	lsr	x16,$h2,#32
+#else
+	mov	w#$d0,w#$h0
+	lsr	$d1,$h0,#32
+	mov	w#$d2,w#$h1
+	lsr	x15,$h1,#32
+	mov	w16,w#$h2
+#endif
+
+	add	$d0,$d0,$d1,lsl#26	// base 2^26 -> base 2^64
+	lsr	$d1,$d2,#12
+	adds	$d0,$d0,$d2,lsl#52
+	add	$d1,$d1,x15,lsl#14
+	adc	$d1,$d1,xzr
+	lsr	$d2,x16,#24
+	adds	$d1,$d1,x16,lsl#40
+	adc	$d2,$d2,xzr
+
+	cmp	$r0,#0			// is_base2_26?
+	csel	$h0,$h0,$d0,eq		// choose between radixes
+	csel	$h1,$h1,$d1,eq
+	csel	$h2,$h2,$d2,eq
+
+	adds	$d0,$h0,#5		// compare to modulus
+	adcs	$d1,$h1,xzr
+	adc	$d2,$h2,xzr
+
+	tst	$d2,#-4			// see if it's carried/borrowed
+
+	csel	$h0,$h0,$d0,eq
+	csel	$h1,$h1,$d1,eq
+
+#ifdef	__AARCH64EB__
+	ror	$t0,$t0,#32		// flip nonce words
+	ror	$t1,$t1,#32
+#endif
+	adds	$h0,$h0,$t0		// accumulate nonce
+	adc	$h1,$h1,$t1
+#ifdef	__AARCH64EB__
+	rev	$h0,$h0			// flip output bytes
+	rev	$h1,$h1
+#endif
+	stp	$h0,$h1,[$mac]		// write result
+
+	ret
+.size	poly1305_emit,.-poly1305_emit
+___
+my ($R0,$R1,$S1,$R2,$S2,$R3,$S3,$R4,$S4) = map("v$_.4s",(0..8));
+my ($IN01_0,$IN01_1,$IN01_2,$IN01_3,$IN01_4) = map("v$_.2s",(9..13));
+my ($IN23_0,$IN23_1,$IN23_2,$IN23_3,$IN23_4) = map("v$_.2s",(14..18));
+my ($ACC0,$ACC1,$ACC2,$ACC3,$ACC4) = map("v$_.2d",(19..23));
+my ($H0,$H1,$H2,$H3,$H4) = map("v$_.2s",(24..28));
+my ($T0,$T1,$MASK) = map("v$_",(29..31));
+
+my ($in2,$zeros)=("x16","x17");
+my $is_base2_26 = $zeros;		# borrow
+
+$code.=<<___;
+.type	poly1305_mult,%function
+.align	5
+poly1305_mult:
+	mul	$d0,$h0,$r0		// h0*r0
+	umulh	$d1,$h0,$r0
+
+	mul	$t0,$h1,$s1		// h1*5*r1
+	umulh	$t1,$h1,$s1
+
+	adds	$d0,$d0,$t0
+	mul	$t0,$h0,$r1		// h0*r1
+	adc	$d1,$d1,$t1
+	umulh	$d2,$h0,$r1
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h1,$r0		// h1*r0
+	adc	$d2,$d2,xzr
+	umulh	$t1,$h1,$r0
+
+	adds	$d1,$d1,$t0
+	mul	$t0,$h2,$s1		// h2*5*r1
+	adc	$d2,$d2,$t1
+	mul	$t1,$h2,$r0		// h2*r0
+
+	adds	$d1,$d1,$t0
+	adc	$d2,$d2,$t1
+
+	and	$t0,$d2,#-4		// final reduction
+	and	$h2,$d2,#3
+	add	$t0,$t0,$d2,lsr#2
+	adds	$h0,$d0,$t0
+	adcs	$h1,$d1,xzr
+	adc	$h2,$h2,xzr
+
+	ret
+.size	poly1305_mult,.-poly1305_mult
+
+.type	poly1305_splat,%function
+.align	4
+poly1305_splat:
+	and	x12,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x13,$h0,#26,#26
+	extr	x14,$h1,$h0,#52
+	and	x14,x14,#0x03ffffff
+	ubfx	x15,$h1,#14,#26
+	extr	x16,$h2,$h1,#40
+
+	str	w12,[$ctx,#16*0]	// r0
+	add	w12,w13,w13,lsl#2	// r1*5
+	str	w13,[$ctx,#16*1]	// r1
+	add	w13,w14,w14,lsl#2	// r2*5
+	str	w12,[$ctx,#16*2]	// s1
+	str	w14,[$ctx,#16*3]	// r2
+	add	w14,w15,w15,lsl#2	// r3*5
+	str	w13,[$ctx,#16*4]	// s2
+	str	w15,[$ctx,#16*5]	// r3
+	add	w15,w16,w16,lsl#2	// r4*5
+	str	w14,[$ctx,#16*6]	// s3
+	str	w16,[$ctx,#16*7]	// r4
+	str	w15,[$ctx,#16*8]	// s4
+
+	ret
+.size	poly1305_splat,.-poly1305_splat
+
+#ifdef	__KERNEL__
+.globl	poly1305_blocks_neon
+#endif
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	$is_base2_26,[$ctx,#24]
+	cmp	$len,#128
+	b.lo	.Lpoly1305_blocks
+
+	.inst	0xd503233f		// paciasp
+	stp	x29,x30,[sp,#-80]!
+	add	x29,sp,#0
+
+	stp	d8,d9,[sp,#16]		// meet ABI requirements
+	stp	d10,d11,[sp,#32]
+	stp	d12,d13,[sp,#48]
+	stp	d14,d15,[sp,#64]
+
+	cbz	$is_base2_26,.Lbase2_64_neon
+
+	ldp	w10,w11,[$ctx]		// load hash value base 2^26
+	ldp	w12,w13,[$ctx,#8]
+	ldr	w14,[$ctx,#16]
+
+	tst	$len,#31
+	b.eq	.Leven_neon
+
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+	add	$h0,x10,x11,lsl#26	// base 2^26 -> base 2^64
+	lsr	$h1,x12,#12
+	adds	$h0,$h0,x12,lsl#52
+	add	$h1,$h1,x13,lsl#14
+	adc	$h1,$h1,xzr
+	lsr	$h2,x14,#24
+	adds	$h1,$h1,x14,lsl#40
+	adc	$d2,$h2,xzr		// can be partially reduced...
+
+	ldp	$d0,$d1,[$inp],#16	// load input
+	sub	$len,$len,#16
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+
+#ifdef	__AARCH64EB__
+	rev	$d0,$d0
+	rev	$d1,$d1
+#endif
+	adds	$h0,$h0,$d0		// accumulate input
+	adcs	$h1,$h1,$d1
+	adc	$h2,$h2,$padbit
+
+	bl	poly1305_mult
+
+	and	x10,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,$h0,#26,#26
+	extr	x12,$h1,$h0,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,$h1,#14,#26
+	extr	x14,$h2,$h1,#40
+
+	b	.Leven_neon
+
+.align	4
+.Lbase2_64_neon:
+	ldp	$r0,$r1,[$ctx,#32]	// load key value
+
+	ldp	$h0,$h1,[$ctx]		// load hash value base 2^64
+	ldr	$h2,[$ctx,#16]
+
+	tst	$len,#31
+	b.eq	.Linit_neon
+
+	ldp	$d0,$d1,[$inp],#16	// load input
+	sub	$len,$len,#16
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+#ifdef	__AARCH64EB__
+	rev	$d0,$d0
+	rev	$d1,$d1
+#endif
+	adds	$h0,$h0,$d0		// accumulate input
+	adcs	$h1,$h1,$d1
+	adc	$h2,$h2,$padbit
+
+	bl	poly1305_mult
+
+.Linit_neon:
+	ldr	w17,[$ctx,#48]		// first table element
+	and	x10,$h0,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,$h0,#26,#26
+	extr	x12,$h1,$h0,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,$h1,#14,#26
+	extr	x14,$h2,$h1,#40
+
+	cmp	w17,#-1			// is value impossible?
+	b.ne	.Leven_neon
+
+	fmov	${H0},x10
+	fmov	${H1},x11
+	fmov	${H2},x12
+	fmov	${H3},x13
+	fmov	${H4},x14
+
+	////////////////////////////////// initialize r^n table
+	mov	$h0,$r0			// r^1
+	add	$s1,$r1,$r1,lsr#2	// s1 = r1 + (r1 >> 2)
+	mov	$h1,$r1
+	mov	$h2,xzr
+	add	$ctx,$ctx,#48+12
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^2
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^3
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^4
+	sub	$ctx,$ctx,#4
+	bl	poly1305_splat
+	sub	$ctx,$ctx,#48		// restore original $ctx
+	b	.Ldo_neon
+
+.align	4
+.Leven_neon:
+	fmov	${H0},x10
+	fmov	${H1},x11
+	fmov	${H2},x12
+	fmov	${H3},x13
+	fmov	${H4},x14
+
+.Ldo_neon:
+	ldp	x8,x12,[$inp,#32]	// inp[2:3]
+	subs	$len,$len,#64
+	ldp	x9,x13,[$inp,#48]
+	add	$in2,$inp,#96
+	adr	$zeros,.Lzeros
+
+	lsl	$padbit,$padbit,#24
+	add	x15,$ctx,#48
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	$IN23_0,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,$padbit,x12,lsr#40
+	add	x13,$padbit,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	$IN23_1,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	fmov	$IN23_2,x8
+	fmov	$IN23_3,x10
+	fmov	$IN23_4,x12
+
+	ldp	x8,x12,[$inp],#16	// inp[0:1]
+	ldp	x9,x13,[$inp],#48
+
+	ld1	{$R0,$R1,$S1,$R2},[x15],#64
+	ld1	{$S2,$R3,$S3,$R4},[x15],#64
+	ld1	{$S4},[x15]
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	$IN01_0,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,$padbit,x12,lsr#40
+	add	x13,$padbit,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	$IN01_1,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	movi	$MASK.2d,#-1
+	fmov	$IN01_2,x8
+	fmov	$IN01_3,x10
+	fmov	$IN01_4,x12
+	ushr	$MASK.2d,$MASK.2d,#38
+
+	b.ls	.Lskip_loop
+
+.align	4
+.Loop_neon:
+	////////////////////////////////////////////////////////////////
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	//   \___________________/
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	//   \___________________/ \____________________/
+	//
+	// Note that we start with inp[2:3]*r^2. This is because it
+	// doesn't depend on reduction in previous iteration.
+	////////////////////////////////////////////////////////////////
+	// d4 = h0*r4 + h1*r3   + h2*r2   + h3*r1   + h4*r0
+	// d3 = h0*r3 + h1*r2   + h2*r1   + h3*r0   + h4*5*r4
+	// d2 = h0*r2 + h1*r1   + h2*r0   + h3*5*r4 + h4*5*r3
+	// d1 = h0*r1 + h1*r0   + h2*5*r4 + h3*5*r3 + h4*5*r2
+	// d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1
+
+	subs	$len,$len,#64
+	umull	$ACC4,$IN23_0,${R4}[2]
+	csel	$in2,$zeros,$in2,lo
+	umull	$ACC3,$IN23_0,${R3}[2]
+	umull	$ACC2,$IN23_0,${R2}[2]
+	 ldp	x8,x12,[$in2],#16	// inp[2:3] (or zero)
+	umull	$ACC1,$IN23_0,${R1}[2]
+	 ldp	x9,x13,[$in2],#48
+	umull	$ACC0,$IN23_0,${R0}[2]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	umlal	$ACC4,$IN23_1,${R3}[2]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	$ACC3,$IN23_1,${R2}[2]
+	 and	x5,x9,#0x03ffffff
+	umlal	$ACC2,$IN23_1,${R1}[2]
+	 ubfx	x6,x8,#26,#26
+	umlal	$ACC1,$IN23_1,${R0}[2]
+	 ubfx	x7,x9,#26,#26
+	umlal	$ACC0,$IN23_1,${S4}[2]
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+
+	umlal	$ACC4,$IN23_2,${R2}[2]
+	 extr	x8,x12,x8,#52
+	umlal	$ACC3,$IN23_2,${R1}[2]
+	 extr	x9,x13,x9,#52
+	umlal	$ACC2,$IN23_2,${R0}[2]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	$ACC1,$IN23_2,${S4}[2]
+	 fmov	$IN23_0,x4
+	umlal	$ACC0,$IN23_2,${S3}[2]
+	 and	x8,x8,#0x03ffffff
+
+	umlal	$ACC4,$IN23_3,${R1}[2]
+	 and	x9,x9,#0x03ffffff
+	umlal	$ACC3,$IN23_3,${R0}[2]
+	 ubfx	x10,x12,#14,#26
+	umlal	$ACC2,$IN23_3,${S4}[2]
+	 ubfx	x11,x13,#14,#26
+	umlal	$ACC1,$IN23_3,${S3}[2]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	$ACC0,$IN23_3,${S2}[2]
+	 fmov	$IN23_1,x6
+
+	add	$IN01_2,$IN01_2,$H2
+	 add	x12,$padbit,x12,lsr#40
+	umlal	$ACC4,$IN23_4,${R0}[2]
+	 add	x13,$padbit,x13,lsr#40
+	umlal	$ACC3,$IN23_4,${S4}[2]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	$ACC2,$IN23_4,${S3}[2]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	$ACC1,$IN23_4,${S2}[2]
+	 fmov	$IN23_2,x8
+	umlal	$ACC0,$IN23_4,${S1}[2]
+	 fmov	$IN23_3,x10
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4 and accumulate
+
+	add	$IN01_0,$IN01_0,$H0
+	 fmov	$IN23_4,x12
+	umlal	$ACC3,$IN01_2,${R1}[0]
+	 ldp	x8,x12,[$inp],#16	// inp[0:1]
+	umlal	$ACC0,$IN01_2,${S3}[0]
+	 ldp	x9,x13,[$inp],#48
+	umlal	$ACC4,$IN01_2,${R2}[0]
+	umlal	$ACC1,$IN01_2,${S4}[0]
+	umlal	$ACC2,$IN01_2,${R0}[0]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	add	$IN01_1,$IN01_1,$H1
+	umlal	$ACC3,$IN01_0,${R3}[0]
+	umlal	$ACC4,$IN01_0,${R4}[0]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	$ACC2,$IN01_0,${R2}[0]
+	 and	x5,x9,#0x03ffffff
+	umlal	$ACC0,$IN01_0,${R0}[0]
+	 ubfx	x6,x8,#26,#26
+	umlal	$ACC1,$IN01_0,${R1}[0]
+	 ubfx	x7,x9,#26,#26
+
+	add	$IN01_3,$IN01_3,$H3
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	umlal	$ACC3,$IN01_1,${R2}[0]
+	 extr	x8,x12,x8,#52
+	umlal	$ACC4,$IN01_1,${R3}[0]
+	 extr	x9,x13,x9,#52
+	umlal	$ACC0,$IN01_1,${S4}[0]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	$ACC2,$IN01_1,${R1}[0]
+	 fmov	$IN01_0,x4
+	umlal	$ACC1,$IN01_1,${R0}[0]
+	 and	x8,x8,#0x03ffffff
+
+	add	$IN01_4,$IN01_4,$H4
+	 and	x9,x9,#0x03ffffff
+	umlal	$ACC3,$IN01_3,${R0}[0]
+	 ubfx	x10,x12,#14,#26
+	umlal	$ACC0,$IN01_3,${S2}[0]
+	 ubfx	x11,x13,#14,#26
+	umlal	$ACC4,$IN01_3,${R1}[0]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	$ACC1,$IN01_3,${S3}[0]
+	 fmov	$IN01_1,x6
+	umlal	$ACC2,$IN01_3,${S4}[0]
+	 add	x12,$padbit,x12,lsr#40
+
+	umlal	$ACC3,$IN01_4,${S4}[0]
+	 add	x13,$padbit,x13,lsr#40
+	umlal	$ACC0,$IN01_4,${S1}[0]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	$ACC4,$IN01_4,${R0}[0]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	$ACC1,$IN01_4,${S2}[0]
+	 fmov	$IN01_2,x8
+	umlal	$ACC2,$IN01_4,${S3}[0]
+	 fmov	$IN01_3,x10
+	 fmov	$IN01_4,x12
+
+	/////////////////////////////////////////////////////////////////
+	// lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	// and P. Schwabe
+	//
+	// [see discussion in poly1305-armv4 module]
+
+	ushr	$T0.2d,$ACC3,#26
+	xtn	$H3,$ACC3
+	 ushr	$T1.2d,$ACC0,#26
+	 and	$ACC0,$ACC0,$MASK.2d
+	add	$ACC4,$ACC4,$T0.2d	// h3 -> h4
+	bic	$H3,#0xfc,lsl#24	// &=0x03ffffff
+	 add	$ACC1,$ACC1,$T1.2d	// h0 -> h1
+
+	ushr	$T0.2d,$ACC4,#26
+	xtn	$H4,$ACC4
+	 ushr	$T1.2d,$ACC1,#26
+	 xtn	$H1,$ACC1
+	bic	$H4,#0xfc,lsl#24
+	 add	$ACC2,$ACC2,$T1.2d	// h1 -> h2
+
+	add	$ACC0,$ACC0,$T0.2d
+	shl	$T0.2d,$T0.2d,#2
+	 shrn	$T1.2s,$ACC2,#26
+	 xtn	$H2,$ACC2
+	add	$ACC0,$ACC0,$T0.2d	// h4 -> h0
+	 bic	$H1,#0xfc,lsl#24
+	 add	$H3,$H3,$T1.2s		// h2 -> h3
+	 bic	$H2,#0xfc,lsl#24
+
+	shrn	$T0.2s,$ACC0,#26
+	xtn	$H0,$ACC0
+	 ushr	$T1.2s,$H3,#26
+	 bic	$H3,#0xfc,lsl#24
+	 bic	$H0,#0xfc,lsl#24
+	add	$H1,$H1,$T0.2s		// h0 -> h1
+	 add	$H4,$H4,$T1.2s		// h3 -> h4
+
+	b.hi	.Loop_neon
+
+.Lskip_loop:
+	dup	$IN23_2,${IN23_2}[0]
+	add	$IN01_2,$IN01_2,$H2
+
+	////////////////////////////////////////////////////////////////
+	// multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	adds	$len,$len,#32
+	b.ne	.Long_tail
+
+	dup	$IN23_2,${IN01_2}[0]
+	add	$IN23_0,$IN01_0,$H0
+	add	$IN23_3,$IN01_3,$H3
+	add	$IN23_1,$IN01_1,$H1
+	add	$IN23_4,$IN01_4,$H4
+
+.Long_tail:
+	dup	$IN23_0,${IN23_0}[0]
+	umull2	$ACC0,$IN23_2,${S3}
+	umull2	$ACC3,$IN23_2,${R1}
+	umull2	$ACC4,$IN23_2,${R2}
+	umull2	$ACC2,$IN23_2,${R0}
+	umull2	$ACC1,$IN23_2,${S4}
+
+	dup	$IN23_1,${IN23_1}[0]
+	umlal2	$ACC0,$IN23_0,${R0}
+	umlal2	$ACC2,$IN23_0,${R2}
+	umlal2	$ACC3,$IN23_0,${R3}
+	umlal2	$ACC4,$IN23_0,${R4}
+	umlal2	$ACC1,$IN23_0,${R1}
+
+	dup	$IN23_3,${IN23_3}[0]
+	umlal2	$ACC0,$IN23_1,${S4}
+	umlal2	$ACC3,$IN23_1,${R2}
+	umlal2	$ACC2,$IN23_1,${R1}
+	umlal2	$ACC4,$IN23_1,${R3}
+	umlal2	$ACC1,$IN23_1,${R0}
+
+	dup	$IN23_4,${IN23_4}[0]
+	umlal2	$ACC3,$IN23_3,${R0}
+	umlal2	$ACC4,$IN23_3,${R1}
+	umlal2	$ACC0,$IN23_3,${S2}
+	umlal2	$ACC1,$IN23_3,${S3}
+	umlal2	$ACC2,$IN23_3,${S4}
+
+	umlal2	$ACC3,$IN23_4,${S4}
+	umlal2	$ACC0,$IN23_4,${S1}
+	umlal2	$ACC4,$IN23_4,${R0}
+	umlal2	$ACC1,$IN23_4,${S2}
+	umlal2	$ACC2,$IN23_4,${S3}
+
+	b.eq	.Lshort_tail
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	add	$IN01_0,$IN01_0,$H0
+	umlal	$ACC3,$IN01_2,${R1}
+	umlal	$ACC0,$IN01_2,${S3}
+	umlal	$ACC4,$IN01_2,${R2}
+	umlal	$ACC1,$IN01_2,${S4}
+	umlal	$ACC2,$IN01_2,${R0}
+
+	add	$IN01_1,$IN01_1,$H1
+	umlal	$ACC3,$IN01_0,${R3}
+	umlal	$ACC0,$IN01_0,${R0}
+	umlal	$ACC4,$IN01_0,${R4}
+	umlal	$ACC1,$IN01_0,${R1}
+	umlal	$ACC2,$IN01_0,${R2}
+
+	add	$IN01_3,$IN01_3,$H3
+	umlal	$ACC3,$IN01_1,${R2}
+	umlal	$ACC0,$IN01_1,${S4}
+	umlal	$ACC4,$IN01_1,${R3}
+	umlal	$ACC1,$IN01_1,${R0}
+	umlal	$ACC2,$IN01_1,${R1}
+
+	add	$IN01_4,$IN01_4,$H4
+	umlal	$ACC3,$IN01_3,${R0}
+	umlal	$ACC0,$IN01_3,${S2}
+	umlal	$ACC4,$IN01_3,${R1}
+	umlal	$ACC1,$IN01_3,${S3}
+	umlal	$ACC2,$IN01_3,${S4}
+
+	umlal	$ACC3,$IN01_4,${S4}
+	umlal	$ACC0,$IN01_4,${S1}
+	umlal	$ACC4,$IN01_4,${R0}
+	umlal	$ACC1,$IN01_4,${S2}
+	umlal	$ACC2,$IN01_4,${S3}
+
+.Lshort_tail:
+	////////////////////////////////////////////////////////////////
+	// horizontal add
+
+	addp	$ACC3,$ACC3,$ACC3
+	 ldp	d8,d9,[sp,#16]		// meet ABI requirements
+	addp	$ACC0,$ACC0,$ACC0
+	 ldp	d10,d11,[sp,#32]
+	addp	$ACC4,$ACC4,$ACC4
+	 ldp	d12,d13,[sp,#48]
+	addp	$ACC1,$ACC1,$ACC1
+	 ldp	d14,d15,[sp,#64]
+	addp	$ACC2,$ACC2,$ACC2
+	 ldr	x30,[sp,#8]
+
+	////////////////////////////////////////////////////////////////
+	// lazy reduction, but without narrowing
+
+	ushr	$T0.2d,$ACC3,#26
+	and	$ACC3,$ACC3,$MASK.2d
+	 ushr	$T1.2d,$ACC0,#26
+	 and	$ACC0,$ACC0,$MASK.2d
+
+	add	$ACC4,$ACC4,$T0.2d	// h3 -> h4
+	 add	$ACC1,$ACC1,$T1.2d	// h0 -> h1
+
+	ushr	$T0.2d,$ACC4,#26
+	and	$ACC4,$ACC4,$MASK.2d
+	 ushr	$T1.2d,$ACC1,#26
+	 and	$ACC1,$ACC1,$MASK.2d
+	 add	$ACC2,$ACC2,$T1.2d	// h1 -> h2
+
+	add	$ACC0,$ACC0,$T0.2d
+	shl	$T0.2d,$T0.2d,#2
+	 ushr	$T1.2d,$ACC2,#26
+	 and	$ACC2,$ACC2,$MASK.2d
+	add	$ACC0,$ACC0,$T0.2d	// h4 -> h0
+	 add	$ACC3,$ACC3,$T1.2d	// h2 -> h3
+
+	ushr	$T0.2d,$ACC0,#26
+	and	$ACC0,$ACC0,$MASK.2d
+	 ushr	$T1.2d,$ACC3,#26
+	 and	$ACC3,$ACC3,$MASK.2d
+	add	$ACC1,$ACC1,$T0.2d	// h0 -> h1
+	 add	$ACC4,$ACC4,$T1.2d	// h3 -> h4
+
+	////////////////////////////////////////////////////////////////
+	// write the result, can be partially reduced
+
+	st4	{$ACC0,$ACC1,$ACC2,$ACC3}[0],[$ctx],#16
+	mov	x4,#1
+	st1	{$ACC4}[0],[$ctx]
+	str	x4,[$ctx,#8]		// set is_base2_26
+
+	ldr	x29,[sp],#80
+	 .inst	0xd50323bf		// autiasp
+	ret
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0
+.asciz	"Poly1305 for ARMv8, CRYPTOGAMS by \@dot-asm"
+.align	2
+#if !defined(__KERNEL__) && !defined(_WIN64)
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
+___
+
+foreach (split("\n",$code)) {
+	s/\b(shrn\s+v[0-9]+)\.[24]d/$1.2s/			or
+	s/\b(fmov\s+)v([0-9]+)[^,]*,\s*x([0-9]+)/$1d$2,x$3/	or
+	(m/\bdup\b/ and (s/\.[24]s/.2d/g or 1))			or
+	(m/\b(eor|and)/ and (s/\.[248][sdh]/.16b/g or 1))	or
+	(m/\bum(ul|la)l\b/ and (s/\.4s/.2s/g or 1))		or
+	(m/\bum(ul|la)l2\b/ and (s/\.2s/.4s/g or 1))		or
+	(m/\bst[1-4]\s+{[^}]+}\[/ and (s/\.[24]d/.s/g or 1));
+
+	s/\.[124]([sd])\[/.$1\[/;
+	s/w#x([0-9]+)/w$1/g;
+
+	print $_,"\n";
+}
+close STDOUT;
diff --git a/arch/arm64/crypto/poly1305-core.S_shipped b/arch/arm64/crypto/poly1305-core.S_shipped
new file mode 100644
index 0000000..fb2822a
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-core.S_shipped
@@ -0,0 +1,835 @@
+#ifndef __KERNEL__
+# include "arm_arch.h"
+.extern	OPENSSL_armcap_P
+#endif
+
+.text
+
+// forward "declarations" are required for Apple
+.globl	poly1305_blocks
+.globl	poly1305_emit
+
+.globl	poly1305_init
+.type	poly1305_init,%function
+.align	5
+poly1305_init:
+	cmp	x1,xzr
+	stp	xzr,xzr,[x0]		// zero hash value
+	stp	xzr,xzr,[x0,#16]	// [along with is_base2_26]
+
+	csel	x0,xzr,x0,eq
+	b.eq	.Lno_key
+
+#ifndef	__KERNEL__
+	adrp	x17,OPENSSL_armcap_P
+	ldr	w17,[x17,#:lo12:OPENSSL_armcap_P]
+#endif
+
+	ldp	x7,x8,[x1]		// load key
+	mov	x9,#0xfffffffc0fffffff
+	movk	x9,#0x0fff,lsl#48
+#ifdef	__AARCH64EB__
+	rev	x7,x7			// flip bytes
+	rev	x8,x8
+#endif
+	and	x7,x7,x9		// &=0ffffffc0fffffff
+	and	x9,x9,#-4
+	and	x8,x8,x9		// &=0ffffffc0ffffffc
+	mov	w9,#-1
+	stp	x7,x8,[x0,#32]	// save key value
+	str	w9,[x0,#48]	// impossible key power value
+
+#ifndef	__KERNEL__
+	tst	w17,#ARMV7_NEON
+
+	adr	x12,.Lpoly1305_blocks
+	adr	x7,.Lpoly1305_blocks_neon
+	adr	x13,.Lpoly1305_emit
+
+	csel	x12,x12,x7,eq
+
+# ifdef	__ILP32__
+	stp	w12,w13,[x2]
+# else
+	stp	x12,x13,[x2]
+# endif
+#endif
+	mov	x0,#1
+.Lno_key:
+	ret
+.size	poly1305_init,.-poly1305_init
+
+.type	poly1305_blocks,%function
+.align	5
+poly1305_blocks:
+.Lpoly1305_blocks:
+	ands	x2,x2,#-16
+	b.eq	.Lno_data
+
+	ldp	x4,x5,[x0]		// load hash value
+	ldp	x6,x17,[x0,#16]	// [along with is_base2_26]
+	ldp	x7,x8,[x0,#32]	// load key value
+
+#ifdef	__AARCH64EB__
+	lsr	x12,x4,#32
+	mov	w13,w4
+	lsr	x14,x5,#32
+	mov	w15,w5
+	lsr	x16,x6,#32
+#else
+	mov	w12,w4
+	lsr	x13,x4,#32
+	mov	w14,w5
+	lsr	x15,x5,#32
+	mov	w16,w6
+#endif
+
+	add	x12,x12,x13,lsl#26	// base 2^26 -> base 2^64
+	lsr	x13,x14,#12
+	adds	x12,x12,x14,lsl#52
+	add	x13,x13,x15,lsl#14
+	adc	x13,x13,xzr
+	lsr	x14,x16,#24
+	adds	x13,x13,x16,lsl#40
+	adc	x14,x14,xzr
+
+	cmp	x17,#0			// is_base2_26?
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+	csel	x4,x4,x12,eq		// choose between radixes
+	csel	x5,x5,x13,eq
+	csel	x6,x6,x14,eq
+
+.Loop:
+	ldp	x10,x11,[x1],#16	// load input
+	sub	x2,x2,#16
+#ifdef	__AARCH64EB__
+	rev	x10,x10
+	rev	x11,x11
+#endif
+	adds	x4,x4,x10		// accumulate input
+	adcs	x5,x5,x11
+
+	mul	x12,x4,x7		// h0*r0
+	adc	x6,x6,x3
+	umulh	x13,x4,x7
+
+	mul	x10,x5,x9		// h1*5*r1
+	umulh	x11,x5,x9
+
+	adds	x12,x12,x10
+	mul	x10,x4,x8		// h0*r1
+	adc	x13,x13,x11
+	umulh	x14,x4,x8
+
+	adds	x13,x13,x10
+	mul	x10,x5,x7		// h1*r0
+	adc	x14,x14,xzr
+	umulh	x11,x5,x7
+
+	adds	x13,x13,x10
+	mul	x10,x6,x9		// h2*5*r1
+	adc	x14,x14,x11
+	mul	x11,x6,x7		// h2*r0
+
+	adds	x13,x13,x10
+	adc	x14,x14,x11
+
+	and	x10,x14,#-4		// final reduction
+	and	x6,x14,#3
+	add	x10,x10,x14,lsr#2
+	adds	x4,x12,x10
+	adcs	x5,x13,xzr
+	adc	x6,x6,xzr
+
+	cbnz	x2,.Loop
+
+	stp	x4,x5,[x0]		// store hash value
+	stp	x6,xzr,[x0,#16]	// [and clear is_base2_26]
+
+.Lno_data:
+	ret
+.size	poly1305_blocks,.-poly1305_blocks
+
+.type	poly1305_emit,%function
+.align	5
+poly1305_emit:
+.Lpoly1305_emit:
+	ldp	x4,x5,[x0]		// load hash base 2^64
+	ldp	x6,x7,[x0,#16]	// [along with is_base2_26]
+	ldp	x10,x11,[x2]	// load nonce
+
+#ifdef	__AARCH64EB__
+	lsr	x12,x4,#32
+	mov	w13,w4
+	lsr	x14,x5,#32
+	mov	w15,w5
+	lsr	x16,x6,#32
+#else
+	mov	w12,w4
+	lsr	x13,x4,#32
+	mov	w14,w5
+	lsr	x15,x5,#32
+	mov	w16,w6
+#endif
+
+	add	x12,x12,x13,lsl#26	// base 2^26 -> base 2^64
+	lsr	x13,x14,#12
+	adds	x12,x12,x14,lsl#52
+	add	x13,x13,x15,lsl#14
+	adc	x13,x13,xzr
+	lsr	x14,x16,#24
+	adds	x13,x13,x16,lsl#40
+	adc	x14,x14,xzr
+
+	cmp	x7,#0			// is_base2_26?
+	csel	x4,x4,x12,eq		// choose between radixes
+	csel	x5,x5,x13,eq
+	csel	x6,x6,x14,eq
+
+	adds	x12,x4,#5		// compare to modulus
+	adcs	x13,x5,xzr
+	adc	x14,x6,xzr
+
+	tst	x14,#-4			// see if it's carried/borrowed
+
+	csel	x4,x4,x12,eq
+	csel	x5,x5,x13,eq
+
+#ifdef	__AARCH64EB__
+	ror	x10,x10,#32		// flip nonce words
+	ror	x11,x11,#32
+#endif
+	adds	x4,x4,x10		// accumulate nonce
+	adc	x5,x5,x11
+#ifdef	__AARCH64EB__
+	rev	x4,x4			// flip output bytes
+	rev	x5,x5
+#endif
+	stp	x4,x5,[x1]		// write result
+
+	ret
+.size	poly1305_emit,.-poly1305_emit
+.type	poly1305_mult,%function
+.align	5
+poly1305_mult:
+	mul	x12,x4,x7		// h0*r0
+	umulh	x13,x4,x7
+
+	mul	x10,x5,x9		// h1*5*r1
+	umulh	x11,x5,x9
+
+	adds	x12,x12,x10
+	mul	x10,x4,x8		// h0*r1
+	adc	x13,x13,x11
+	umulh	x14,x4,x8
+
+	adds	x13,x13,x10
+	mul	x10,x5,x7		// h1*r0
+	adc	x14,x14,xzr
+	umulh	x11,x5,x7
+
+	adds	x13,x13,x10
+	mul	x10,x6,x9		// h2*5*r1
+	adc	x14,x14,x11
+	mul	x11,x6,x7		// h2*r0
+
+	adds	x13,x13,x10
+	adc	x14,x14,x11
+
+	and	x10,x14,#-4		// final reduction
+	and	x6,x14,#3
+	add	x10,x10,x14,lsr#2
+	adds	x4,x12,x10
+	adcs	x5,x13,xzr
+	adc	x6,x6,xzr
+
+	ret
+.size	poly1305_mult,.-poly1305_mult
+
+.type	poly1305_splat,%function
+.align	4
+poly1305_splat:
+	and	x12,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x13,x4,#26,#26
+	extr	x14,x5,x4,#52
+	and	x14,x14,#0x03ffffff
+	ubfx	x15,x5,#14,#26
+	extr	x16,x6,x5,#40
+
+	str	w12,[x0,#16*0]	// r0
+	add	w12,w13,w13,lsl#2	// r1*5
+	str	w13,[x0,#16*1]	// r1
+	add	w13,w14,w14,lsl#2	// r2*5
+	str	w12,[x0,#16*2]	// s1
+	str	w14,[x0,#16*3]	// r2
+	add	w14,w15,w15,lsl#2	// r3*5
+	str	w13,[x0,#16*4]	// s2
+	str	w15,[x0,#16*5]	// r3
+	add	w15,w16,w16,lsl#2	// r4*5
+	str	w14,[x0,#16*6]	// s3
+	str	w16,[x0,#16*7]	// r4
+	str	w15,[x0,#16*8]	// s4
+
+	ret
+.size	poly1305_splat,.-poly1305_splat
+
+#ifdef	__KERNEL__
+.globl	poly1305_blocks_neon
+#endif
+.type	poly1305_blocks_neon,%function
+.align	5
+poly1305_blocks_neon:
+.Lpoly1305_blocks_neon:
+	ldr	x17,[x0,#24]
+	cmp	x2,#128
+	b.lo	.Lpoly1305_blocks
+
+	.inst	0xd503233f		// paciasp
+	stp	x29,x30,[sp,#-80]!
+	add	x29,sp,#0
+
+	stp	d8,d9,[sp,#16]		// meet ABI requirements
+	stp	d10,d11,[sp,#32]
+	stp	d12,d13,[sp,#48]
+	stp	d14,d15,[sp,#64]
+
+	cbz	x17,.Lbase2_64_neon
+
+	ldp	w10,w11,[x0]		// load hash value base 2^26
+	ldp	w12,w13,[x0,#8]
+	ldr	w14,[x0,#16]
+
+	tst	x2,#31
+	b.eq	.Leven_neon
+
+	ldp	x7,x8,[x0,#32]	// load key value
+
+	add	x4,x10,x11,lsl#26	// base 2^26 -> base 2^64
+	lsr	x5,x12,#12
+	adds	x4,x4,x12,lsl#52
+	add	x5,x5,x13,lsl#14
+	adc	x5,x5,xzr
+	lsr	x6,x14,#24
+	adds	x5,x5,x14,lsl#40
+	adc	x14,x6,xzr		// can be partially reduced...
+
+	ldp	x12,x13,[x1],#16	// load input
+	sub	x2,x2,#16
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+
+#ifdef	__AARCH64EB__
+	rev	x12,x12
+	rev	x13,x13
+#endif
+	adds	x4,x4,x12		// accumulate input
+	adcs	x5,x5,x13
+	adc	x6,x6,x3
+
+	bl	poly1305_mult
+
+	and	x10,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,x4,#26,#26
+	extr	x12,x5,x4,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,x5,#14,#26
+	extr	x14,x6,x5,#40
+
+	b	.Leven_neon
+
+.align	4
+.Lbase2_64_neon:
+	ldp	x7,x8,[x0,#32]	// load key value
+
+	ldp	x4,x5,[x0]		// load hash value base 2^64
+	ldr	x6,[x0,#16]
+
+	tst	x2,#31
+	b.eq	.Linit_neon
+
+	ldp	x12,x13,[x1],#16	// load input
+	sub	x2,x2,#16
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+#ifdef	__AARCH64EB__
+	rev	x12,x12
+	rev	x13,x13
+#endif
+	adds	x4,x4,x12		// accumulate input
+	adcs	x5,x5,x13
+	adc	x6,x6,x3
+
+	bl	poly1305_mult
+
+.Linit_neon:
+	ldr	w17,[x0,#48]		// first table element
+	and	x10,x4,#0x03ffffff	// base 2^64 -> base 2^26
+	ubfx	x11,x4,#26,#26
+	extr	x12,x5,x4,#52
+	and	x12,x12,#0x03ffffff
+	ubfx	x13,x5,#14,#26
+	extr	x14,x6,x5,#40
+
+	cmp	w17,#-1			// is value impossible?
+	b.ne	.Leven_neon
+
+	fmov	d24,x10
+	fmov	d25,x11
+	fmov	d26,x12
+	fmov	d27,x13
+	fmov	d28,x14
+
+	////////////////////////////////// initialize r^n table
+	mov	x4,x7			// r^1
+	add	x9,x8,x8,lsr#2	// s1 = r1 + (r1 >> 2)
+	mov	x5,x8
+	mov	x6,xzr
+	add	x0,x0,#48+12
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^2
+	sub	x0,x0,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^3
+	sub	x0,x0,#4
+	bl	poly1305_splat
+
+	bl	poly1305_mult		// r^4
+	sub	x0,x0,#4
+	bl	poly1305_splat
+	sub	x0,x0,#48		// restore original x0
+	b	.Ldo_neon
+
+.align	4
+.Leven_neon:
+	fmov	d24,x10
+	fmov	d25,x11
+	fmov	d26,x12
+	fmov	d27,x13
+	fmov	d28,x14
+
+.Ldo_neon:
+	ldp	x8,x12,[x1,#32]	// inp[2:3]
+	subs	x2,x2,#64
+	ldp	x9,x13,[x1,#48]
+	add	x16,x1,#96
+	adr	x17,.Lzeros
+
+	lsl	x3,x3,#24
+	add	x15,x0,#48
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	d14,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,x3,x12,lsr#40
+	add	x13,x3,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	d15,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	fmov	d16,x8
+	fmov	d17,x10
+	fmov	d18,x12
+
+	ldp	x8,x12,[x1],#16	// inp[0:1]
+	ldp	x9,x13,[x1],#48
+
+	ld1	{v0.4s,v1.4s,v2.4s,v3.4s},[x15],#64
+	ld1	{v4.4s,v5.4s,v6.4s,v7.4s},[x15],#64
+	ld1	{v8.4s},[x15]
+
+#ifdef	__AARCH64EB__
+	rev	x8,x8
+	rev	x12,x12
+	rev	x9,x9
+	rev	x13,x13
+#endif
+	and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	and	x5,x9,#0x03ffffff
+	ubfx	x6,x8,#26,#26
+	ubfx	x7,x9,#26,#26
+	add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	extr	x8,x12,x8,#52
+	extr	x9,x13,x9,#52
+	add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	fmov	d9,x4
+	and	x8,x8,#0x03ffffff
+	and	x9,x9,#0x03ffffff
+	ubfx	x10,x12,#14,#26
+	ubfx	x11,x13,#14,#26
+	add	x12,x3,x12,lsr#40
+	add	x13,x3,x13,lsr#40
+	add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	fmov	d10,x6
+	add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	movi	v31.2d,#-1
+	fmov	d11,x8
+	fmov	d12,x10
+	fmov	d13,x12
+	ushr	v31.2d,v31.2d,#38
+
+	b.ls	.Lskip_loop
+
+.align	4
+.Loop_neon:
+	////////////////////////////////////////////////////////////////
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	//   ___________________/
+	// ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	// ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	//   ___________________/ ____________________/
+	//
+	// Note that we start with inp[2:3]*r^2. This is because it
+	// doesn't depend on reduction in previous iteration.
+	////////////////////////////////////////////////////////////////
+	// d4 = h0*r4 + h1*r3   + h2*r2   + h3*r1   + h4*r0
+	// d3 = h0*r3 + h1*r2   + h2*r1   + h3*r0   + h4*5*r4
+	// d2 = h0*r2 + h1*r1   + h2*r0   + h3*5*r4 + h4*5*r3
+	// d1 = h0*r1 + h1*r0   + h2*5*r4 + h3*5*r3 + h4*5*r2
+	// d0 = h0*r0 + h1*5*r4 + h2*5*r3 + h3*5*r2 + h4*5*r1
+
+	subs	x2,x2,#64
+	umull	v23.2d,v14.2s,v7.s[2]
+	csel	x16,x17,x16,lo
+	umull	v22.2d,v14.2s,v5.s[2]
+	umull	v21.2d,v14.2s,v3.s[2]
+	 ldp	x8,x12,[x16],#16	// inp[2:3] (or zero)
+	umull	v20.2d,v14.2s,v1.s[2]
+	 ldp	x9,x13,[x16],#48
+	umull	v19.2d,v14.2s,v0.s[2]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	umlal	v23.2d,v15.2s,v5.s[2]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	v22.2d,v15.2s,v3.s[2]
+	 and	x5,x9,#0x03ffffff
+	umlal	v21.2d,v15.2s,v1.s[2]
+	 ubfx	x6,x8,#26,#26
+	umlal	v20.2d,v15.2s,v0.s[2]
+	 ubfx	x7,x9,#26,#26
+	umlal	v19.2d,v15.2s,v8.s[2]
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+
+	umlal	v23.2d,v16.2s,v3.s[2]
+	 extr	x8,x12,x8,#52
+	umlal	v22.2d,v16.2s,v1.s[2]
+	 extr	x9,x13,x9,#52
+	umlal	v21.2d,v16.2s,v0.s[2]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	v20.2d,v16.2s,v8.s[2]
+	 fmov	d14,x4
+	umlal	v19.2d,v16.2s,v6.s[2]
+	 and	x8,x8,#0x03ffffff
+
+	umlal	v23.2d,v17.2s,v1.s[2]
+	 and	x9,x9,#0x03ffffff
+	umlal	v22.2d,v17.2s,v0.s[2]
+	 ubfx	x10,x12,#14,#26
+	umlal	v21.2d,v17.2s,v8.s[2]
+	 ubfx	x11,x13,#14,#26
+	umlal	v20.2d,v17.2s,v6.s[2]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	v19.2d,v17.2s,v4.s[2]
+	 fmov	d15,x6
+
+	add	v11.2s,v11.2s,v26.2s
+	 add	x12,x3,x12,lsr#40
+	umlal	v23.2d,v18.2s,v0.s[2]
+	 add	x13,x3,x13,lsr#40
+	umlal	v22.2d,v18.2s,v8.s[2]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	v21.2d,v18.2s,v6.s[2]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	v20.2d,v18.2s,v4.s[2]
+	 fmov	d16,x8
+	umlal	v19.2d,v18.2s,v2.s[2]
+	 fmov	d17,x10
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4 and accumulate
+
+	add	v9.2s,v9.2s,v24.2s
+	 fmov	d18,x12
+	umlal	v22.2d,v11.2s,v1.s[0]
+	 ldp	x8,x12,[x1],#16	// inp[0:1]
+	umlal	v19.2d,v11.2s,v6.s[0]
+	 ldp	x9,x13,[x1],#48
+	umlal	v23.2d,v11.2s,v3.s[0]
+	umlal	v20.2d,v11.2s,v8.s[0]
+	umlal	v21.2d,v11.2s,v0.s[0]
+#ifdef	__AARCH64EB__
+	 rev	x8,x8
+	 rev	x12,x12
+	 rev	x9,x9
+	 rev	x13,x13
+#endif
+
+	add	v10.2s,v10.2s,v25.2s
+	umlal	v22.2d,v9.2s,v5.s[0]
+	umlal	v23.2d,v9.2s,v7.s[0]
+	 and	x4,x8,#0x03ffffff	// base 2^64 -> base 2^26
+	umlal	v21.2d,v9.2s,v3.s[0]
+	 and	x5,x9,#0x03ffffff
+	umlal	v19.2d,v9.2s,v0.s[0]
+	 ubfx	x6,x8,#26,#26
+	umlal	v20.2d,v9.2s,v1.s[0]
+	 ubfx	x7,x9,#26,#26
+
+	add	v12.2s,v12.2s,v27.2s
+	 add	x4,x4,x5,lsl#32		// bfi	x4,x5,#32,#32
+	umlal	v22.2d,v10.2s,v3.s[0]
+	 extr	x8,x12,x8,#52
+	umlal	v23.2d,v10.2s,v5.s[0]
+	 extr	x9,x13,x9,#52
+	umlal	v19.2d,v10.2s,v8.s[0]
+	 add	x6,x6,x7,lsl#32		// bfi	x6,x7,#32,#32
+	umlal	v21.2d,v10.2s,v1.s[0]
+	 fmov	d9,x4
+	umlal	v20.2d,v10.2s,v0.s[0]
+	 and	x8,x8,#0x03ffffff
+
+	add	v13.2s,v13.2s,v28.2s
+	 and	x9,x9,#0x03ffffff
+	umlal	v22.2d,v12.2s,v0.s[0]
+	 ubfx	x10,x12,#14,#26
+	umlal	v19.2d,v12.2s,v4.s[0]
+	 ubfx	x11,x13,#14,#26
+	umlal	v23.2d,v12.2s,v1.s[0]
+	 add	x8,x8,x9,lsl#32		// bfi	x8,x9,#32,#32
+	umlal	v20.2d,v12.2s,v6.s[0]
+	 fmov	d10,x6
+	umlal	v21.2d,v12.2s,v8.s[0]
+	 add	x12,x3,x12,lsr#40
+
+	umlal	v22.2d,v13.2s,v8.s[0]
+	 add	x13,x3,x13,lsr#40
+	umlal	v19.2d,v13.2s,v2.s[0]
+	 add	x10,x10,x11,lsl#32	// bfi	x10,x11,#32,#32
+	umlal	v23.2d,v13.2s,v0.s[0]
+	 add	x12,x12,x13,lsl#32	// bfi	x12,x13,#32,#32
+	umlal	v20.2d,v13.2s,v4.s[0]
+	 fmov	d11,x8
+	umlal	v21.2d,v13.2s,v6.s[0]
+	 fmov	d12,x10
+	 fmov	d13,x12
+
+	/////////////////////////////////////////////////////////////////
+	// lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	// and P. Schwabe
+	//
+	// [see discussion in poly1305-armv4 module]
+
+	ushr	v29.2d,v22.2d,#26
+	xtn	v27.2s,v22.2d
+	 ushr	v30.2d,v19.2d,#26
+	 and	v19.16b,v19.16b,v31.16b
+	add	v23.2d,v23.2d,v29.2d	// h3 -> h4
+	bic	v27.2s,#0xfc,lsl#24	// &=0x03ffffff
+	 add	v20.2d,v20.2d,v30.2d	// h0 -> h1
+
+	ushr	v29.2d,v23.2d,#26
+	xtn	v28.2s,v23.2d
+	 ushr	v30.2d,v20.2d,#26
+	 xtn	v25.2s,v20.2d
+	bic	v28.2s,#0xfc,lsl#24
+	 add	v21.2d,v21.2d,v30.2d	// h1 -> h2
+
+	add	v19.2d,v19.2d,v29.2d
+	shl	v29.2d,v29.2d,#2
+	 shrn	v30.2s,v21.2d,#26
+	 xtn	v26.2s,v21.2d
+	add	v19.2d,v19.2d,v29.2d	// h4 -> h0
+	 bic	v25.2s,#0xfc,lsl#24
+	 add	v27.2s,v27.2s,v30.2s		// h2 -> h3
+	 bic	v26.2s,#0xfc,lsl#24
+
+	shrn	v29.2s,v19.2d,#26
+	xtn	v24.2s,v19.2d
+	 ushr	v30.2s,v27.2s,#26
+	 bic	v27.2s,#0xfc,lsl#24
+	 bic	v24.2s,#0xfc,lsl#24
+	add	v25.2s,v25.2s,v29.2s		// h0 -> h1
+	 add	v28.2s,v28.2s,v30.2s		// h3 -> h4
+
+	b.hi	.Loop_neon
+
+.Lskip_loop:
+	dup	v16.2d,v16.d[0]
+	add	v11.2s,v11.2s,v26.2s
+
+	////////////////////////////////////////////////////////////////
+	// multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	adds	x2,x2,#32
+	b.ne	.Long_tail
+
+	dup	v16.2d,v11.d[0]
+	add	v14.2s,v9.2s,v24.2s
+	add	v17.2s,v12.2s,v27.2s
+	add	v15.2s,v10.2s,v25.2s
+	add	v18.2s,v13.2s,v28.2s
+
+.Long_tail:
+	dup	v14.2d,v14.d[0]
+	umull2	v19.2d,v16.4s,v6.4s
+	umull2	v22.2d,v16.4s,v1.4s
+	umull2	v23.2d,v16.4s,v3.4s
+	umull2	v21.2d,v16.4s,v0.4s
+	umull2	v20.2d,v16.4s,v8.4s
+
+	dup	v15.2d,v15.d[0]
+	umlal2	v19.2d,v14.4s,v0.4s
+	umlal2	v21.2d,v14.4s,v3.4s
+	umlal2	v22.2d,v14.4s,v5.4s
+	umlal2	v23.2d,v14.4s,v7.4s
+	umlal2	v20.2d,v14.4s,v1.4s
+
+	dup	v17.2d,v17.d[0]
+	umlal2	v19.2d,v15.4s,v8.4s
+	umlal2	v22.2d,v15.4s,v3.4s
+	umlal2	v21.2d,v15.4s,v1.4s
+	umlal2	v23.2d,v15.4s,v5.4s
+	umlal2	v20.2d,v15.4s,v0.4s
+
+	dup	v18.2d,v18.d[0]
+	umlal2	v22.2d,v17.4s,v0.4s
+	umlal2	v23.2d,v17.4s,v1.4s
+	umlal2	v19.2d,v17.4s,v4.4s
+	umlal2	v20.2d,v17.4s,v6.4s
+	umlal2	v21.2d,v17.4s,v8.4s
+
+	umlal2	v22.2d,v18.4s,v8.4s
+	umlal2	v19.2d,v18.4s,v2.4s
+	umlal2	v23.2d,v18.4s,v0.4s
+	umlal2	v20.2d,v18.4s,v4.4s
+	umlal2	v21.2d,v18.4s,v6.4s
+
+	b.eq	.Lshort_tail
+
+	////////////////////////////////////////////////////////////////
+	// (hash+inp[0:1])*r^4:r^3 and accumulate
+
+	add	v9.2s,v9.2s,v24.2s
+	umlal	v22.2d,v11.2s,v1.2s
+	umlal	v19.2d,v11.2s,v6.2s
+	umlal	v23.2d,v11.2s,v3.2s
+	umlal	v20.2d,v11.2s,v8.2s
+	umlal	v21.2d,v11.2s,v0.2s
+
+	add	v10.2s,v10.2s,v25.2s
+	umlal	v22.2d,v9.2s,v5.2s
+	umlal	v19.2d,v9.2s,v0.2s
+	umlal	v23.2d,v9.2s,v7.2s
+	umlal	v20.2d,v9.2s,v1.2s
+	umlal	v21.2d,v9.2s,v3.2s
+
+	add	v12.2s,v12.2s,v27.2s
+	umlal	v22.2d,v10.2s,v3.2s
+	umlal	v19.2d,v10.2s,v8.2s
+	umlal	v23.2d,v10.2s,v5.2s
+	umlal	v20.2d,v10.2s,v0.2s
+	umlal	v21.2d,v10.2s,v1.2s
+
+	add	v13.2s,v13.2s,v28.2s
+	umlal	v22.2d,v12.2s,v0.2s
+	umlal	v19.2d,v12.2s,v4.2s
+	umlal	v23.2d,v12.2s,v1.2s
+	umlal	v20.2d,v12.2s,v6.2s
+	umlal	v21.2d,v12.2s,v8.2s
+
+	umlal	v22.2d,v13.2s,v8.2s
+	umlal	v19.2d,v13.2s,v2.2s
+	umlal	v23.2d,v13.2s,v0.2s
+	umlal	v20.2d,v13.2s,v4.2s
+	umlal	v21.2d,v13.2s,v6.2s
+
+.Lshort_tail:
+	////////////////////////////////////////////////////////////////
+	// horizontal add
+
+	addp	v22.2d,v22.2d,v22.2d
+	 ldp	d8,d9,[sp,#16]		// meet ABI requirements
+	addp	v19.2d,v19.2d,v19.2d
+	 ldp	d10,d11,[sp,#32]
+	addp	v23.2d,v23.2d,v23.2d
+	 ldp	d12,d13,[sp,#48]
+	addp	v20.2d,v20.2d,v20.2d
+	 ldp	d14,d15,[sp,#64]
+	addp	v21.2d,v21.2d,v21.2d
+	 ldr	x30,[sp,#8]
+
+	////////////////////////////////////////////////////////////////
+	// lazy reduction, but without narrowing
+
+	ushr	v29.2d,v22.2d,#26
+	and	v22.16b,v22.16b,v31.16b
+	 ushr	v30.2d,v19.2d,#26
+	 and	v19.16b,v19.16b,v31.16b
+
+	add	v23.2d,v23.2d,v29.2d	// h3 -> h4
+	 add	v20.2d,v20.2d,v30.2d	// h0 -> h1
+
+	ushr	v29.2d,v23.2d,#26
+	and	v23.16b,v23.16b,v31.16b
+	 ushr	v30.2d,v20.2d,#26
+	 and	v20.16b,v20.16b,v31.16b
+	 add	v21.2d,v21.2d,v30.2d	// h1 -> h2
+
+	add	v19.2d,v19.2d,v29.2d
+	shl	v29.2d,v29.2d,#2
+	 ushr	v30.2d,v21.2d,#26
+	 and	v21.16b,v21.16b,v31.16b
+	add	v19.2d,v19.2d,v29.2d	// h4 -> h0
+	 add	v22.2d,v22.2d,v30.2d	// h2 -> h3
+
+	ushr	v29.2d,v19.2d,#26
+	and	v19.16b,v19.16b,v31.16b
+	 ushr	v30.2d,v22.2d,#26
+	 and	v22.16b,v22.16b,v31.16b
+	add	v20.2d,v20.2d,v29.2d	// h0 -> h1
+	 add	v23.2d,v23.2d,v30.2d	// h3 -> h4
+
+	////////////////////////////////////////////////////////////////
+	// write the result, can be partially reduced
+
+	st4	{v19.s,v20.s,v21.s,v22.s}[0],[x0],#16
+	mov	x4,#1
+	st1	{v23.s}[0],[x0]
+	str	x4,[x0,#8]		// set is_base2_26
+
+	ldr	x29,[sp],#80
+	 .inst	0xd50323bf		// autiasp
+	ret
+.size	poly1305_blocks_neon,.-poly1305_blocks_neon
+
+.align	5
+.Lzeros:
+.long	0,0,0,0,0,0,0,0
+.asciz	"Poly1305 for ARMv8, CRYPTOGAMS by @dot-asm"
+.align	2
+#if !defined(__KERNEL__) && !defined(_WIN64)
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
+#endif
diff --git a/arch/arm64/crypto/poly1305-glue.c b/arch/arm64/crypto/poly1305-glue.c
new file mode 100644
index 0000000..01e22fe
--- /dev/null
+++ b/arch/arm64/crypto/poly1305-glue.c
@@ -0,0 +1,231 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for arm64
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/hwcap.h>
+#include <asm/neon.h>
+#include <asm/simd.h>
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <crypto/internal/simd.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/jump_label.h>
+#include <linux/module.h>
+
+asmlinkage void poly1305_init_arm64(void *state, const u8 *key);
+asmlinkage void poly1305_blocks(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_blocks_neon(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_emit(void *state, u8 *digest, const u32 *nonce);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(have_neon);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
+{
+	poly1305_init_arm64(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int neon_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void neon_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit, bool do_neon)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_arch(dctx, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	if (static_branch_likely(&have_neon) && likely(do_neon))
+		poly1305_blocks_neon(&dctx->h, src, len, hibit);
+	else
+		poly1305_blocks(&dctx->h, src, len, hibit);
+}
+
+static void neon_poly1305_do_update(struct poly1305_desc_ctx *dctx,
+				    const u8 *src, u32 len, bool do_neon)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			neon_poly1305_blocks(dctx, dctx->buf,
+					     POLY1305_BLOCK_SIZE, 1, false);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		neon_poly1305_blocks(dctx, src, len, 1, do_neon);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+}
+
+static int neon_poly1305_update(struct shash_desc *desc,
+				const u8 *src, unsigned int srclen)
+{
+	bool do_neon = crypto_simd_usable() && srclen > 128;
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_begin();
+	neon_poly1305_do_update(dctx, src, srclen, do_neon);
+	if (static_branch_likely(&have_neon) && do_neon)
+		kernel_neon_end();
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		if (static_branch_likely(&have_neon) && crypto_simd_usable()) {
+			do {
+				unsigned int todo = min_t(unsigned int, len, SZ_4K);
+
+				kernel_neon_begin();
+				poly1305_blocks_neon(&dctx->h, src, todo, 1);
+				kernel_neon_end();
+
+				len -= todo;
+				src += todo;
+			} while (len);
+		} else {
+			poly1305_blocks(&dctx->h, src, len, 1);
+			src += len;
+		}
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int neon_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg neon_poly1305_alg = {
+	.init			= neon_poly1305_init,
+	.update			= neon_poly1305_update,
+	.final			= neon_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-neon",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+};
+
+static int __init neon_poly1305_mod_init(void)
+{
+	if (!cpu_have_named_feature(ASIMD))
+		return 0;
+
+	static_branch_enable(&have_neon);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shash(&neon_poly1305_alg) : 0;
+}
+
+static void __exit neon_poly1305_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && cpu_have_named_feature(ASIMD))
+		crypto_unregister_shash(&neon_poly1305_alg);
+}
+
+module_init(neon_poly1305_mod_init);
+module_exit(neon_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-neon");
diff --git a/arch/arm64/crypto/sha1-ce-glue.c b/arch/arm64/crypto/sha1-ce-glue.c
index 05cdad31..53335e7 100644
--- a/arch/arm64/crypto/sha1-ce-glue.c
+++ b/arch/arm64/crypto/sha1-ce-glue.c
@@ -29,6 +29,13 @@
 asmlinkage void sha1_ce_transform(struct sha1_ce_state *sst, u8 const *src,
 				  int blocks);
 
+static void __sha1_ce_transform(struct sha1_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha1_ce_transform(container_of(sst, struct sha1_ce_state, sst),
+				 src, blocks);
+}
+
 const u32 sha1_ce_offsetof_count = offsetof(struct sha1_ce_state, sst.count);
 const u32 sha1_ce_offsetof_finalize = offsetof(struct sha1_ce_state, finalize);
 
@@ -42,8 +49,7 @@
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_update(desc, data, len, __sha1_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -65,10 +71,9 @@
 	sctx->finalize = finalize;
 
 	kernel_neon_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_update(desc, data, len, __sha1_ce_transform);
 	if (!finalize)
-		sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_ce_transform);
+		sha1_base_do_finalize(desc, __sha1_ce_transform);
 	kernel_neon_end();
 	return sha1_base_finish(desc, out);
 }
@@ -82,7 +87,7 @@
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_ce_transform);
+	sha1_base_do_finalize(desc, __sha1_ce_transform);
 	kernel_neon_end();
 	return sha1_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha2-ce-glue.c b/arch/arm64/crypto/sha2-ce-glue.c
index 1de8029..0cbf473 100644
--- a/arch/arm64/crypto/sha2-ce-glue.c
+++ b/arch/arm64/crypto/sha2-ce-glue.c
@@ -30,6 +30,13 @@
 asmlinkage void sha2_ce_transform(struct sha256_ce_state *sst, u8 const *src,
 				  int blocks);
 
+static void __sha2_ce_transform(struct sha256_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha2_ce_transform(container_of(sst, struct sha256_ce_state, sst),
+				 src, blocks);
+}
+
 const u32 sha256_ce_offsetof_count = offsetof(struct sha256_ce_state,
 					      sst.count);
 const u32 sha256_ce_offsetof_finalize = offsetof(struct sha256_ce_state,
@@ -37,6 +44,12 @@
 
 asmlinkage void sha256_block_data_order(u32 *digest, u8 const *src, int blocks);
 
+static void __sha256_block_data_order(struct sha256_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha256_block_data_order(sst->state, src, blocks);
+}
+
 static int sha256_ce_update(struct shash_desc *desc, const u8 *data,
 			    unsigned int len)
 {
@@ -44,12 +57,11 @@
 
 	if (!crypto_simd_usable())
 		return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_update(desc, data, len, __sha2_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -64,9 +76,8 @@
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 		return sha256_base_finish(desc, out);
 	}
 
@@ -77,11 +88,9 @@
 	sctx->finalize = finalize;
 
 	kernel_neon_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_update(desc, data, len, __sha2_ce_transform);
 	if (!finalize)
-		sha256_base_do_finalize(desc,
-					(sha256_block_fn *)sha2_ce_transform);
+		sha256_base_do_finalize(desc, __sha2_ce_transform);
 	kernel_neon_end();
 	return sha256_base_finish(desc, out);
 }
@@ -91,14 +100,13 @@
 	struct sha256_ce_state *sctx = shash_desc_ctx(desc);
 
 	if (!crypto_simd_usable()) {
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 		return sha256_base_finish(desc, out);
 	}
 
 	sctx->finalize = 0;
 	kernel_neon_begin();
-	sha256_base_do_finalize(desc, (sha256_block_fn *)sha2_ce_transform);
+	sha256_base_do_finalize(desc, __sha2_ce_transform);
 	kernel_neon_end();
 	return sha256_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha256-glue.c b/arch/arm64/crypto/sha256-glue.c
index e273fac..03ed035 100644
--- a/arch/arm64/crypto/sha256-glue.c
+++ b/arch/arm64/crypto/sha256-glue.c
@@ -27,14 +27,26 @@
 					unsigned int num_blks);
 EXPORT_SYMBOL(sha256_block_data_order);
 
+static void __sha256_block_data_order(struct sha256_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha256_block_data_order(sst->state, src, blocks);
+}
+
 asmlinkage void sha256_block_neon(u32 *digest, const void *data,
 				  unsigned int num_blks);
 
+static void __sha256_block_neon(struct sha256_state *sst, u8 const *src,
+				int blocks)
+{
+	return sha256_block_neon(sst->state, src, blocks);
+}
+
 static int crypto_sha256_arm64_update(struct shash_desc *desc, const u8 *data,
 				      unsigned int len)
 {
 	return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				     __sha256_block_data_order);
 }
 
 static int crypto_sha256_arm64_finup(struct shash_desc *desc, const u8 *data,
@@ -42,9 +54,8 @@
 {
 	if (len)
 		sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-	sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				      __sha256_block_data_order);
+	sha256_base_do_finalize(desc, __sha256_block_data_order);
 
 	return sha256_base_finish(desc, out);
 }
@@ -87,7 +98,7 @@
 
 	if (!crypto_simd_usable())
 		return sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
 
 	while (len > 0) {
 		unsigned int chunk = len;
@@ -103,8 +114,7 @@
 				sctx->count % SHA256_BLOCK_SIZE;
 
 		kernel_neon_begin();
-		sha256_base_do_update(desc, data, chunk,
-				      (sha256_block_fn *)sha256_block_neon);
+		sha256_base_do_update(desc, data, chunk, __sha256_block_neon);
 		kernel_neon_end();
 		data += chunk;
 		len -= chunk;
@@ -118,15 +128,13 @@
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha256_base_do_update(desc, data, len,
-				(sha256_block_fn *)sha256_block_data_order);
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_data_order);
+				__sha256_block_data_order);
+		sha256_base_do_finalize(desc, __sha256_block_data_order);
 	} else {
 		if (len)
 			sha256_update_neon(desc, data, len);
 		kernel_neon_begin();
-		sha256_base_do_finalize(desc,
-				(sha256_block_fn *)sha256_block_neon);
+		sha256_base_do_finalize(desc, __sha256_block_neon);
 		kernel_neon_end();
 	}
 	return sha256_base_finish(desc, out);
diff --git a/arch/arm64/crypto/sha512-ce-glue.c b/arch/arm64/crypto/sha512-ce-glue.c
index 6dfcb4f3..7ff201e 100644
--- a/arch/arm64/crypto/sha512-ce-glue.c
+++ b/arch/arm64/crypto/sha512-ce-glue.c
@@ -31,16 +31,21 @@
 
 asmlinkage void sha512_block_data_order(u64 *digest, u8 const *src, int blocks);
 
+static void __sha512_block_data_order(struct sha512_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha512_block_data_order(sst->state, src, blocks);
+}
+
 static int sha512_ce_update(struct shash_desc *desc, const u8 *data,
 			    unsigned int len)
 {
 	if (!crypto_simd_usable())
 		return sha512_base_do_update(desc, data, len,
-				(sha512_block_fn *)sha512_block_data_order);
+					     __sha512_block_data_order);
 
 	kernel_neon_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_update(desc, data, len, sha512_ce_transform);
 	kernel_neon_end();
 
 	return 0;
@@ -52,16 +57,14 @@
 	if (!crypto_simd_usable()) {
 		if (len)
 			sha512_base_do_update(desc, data, len,
-				(sha512_block_fn *)sha512_block_data_order);
-		sha512_base_do_finalize(desc,
-				(sha512_block_fn *)sha512_block_data_order);
+					      __sha512_block_data_order);
+		sha512_base_do_finalize(desc, __sha512_block_data_order);
 		return sha512_base_finish(desc, out);
 	}
 
 	kernel_neon_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_ce_transform);
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_update(desc, data, len, sha512_ce_transform);
+	sha512_base_do_finalize(desc, sha512_ce_transform);
 	kernel_neon_end();
 	return sha512_base_finish(desc, out);
 }
@@ -69,13 +72,12 @@
 static int sha512_ce_final(struct shash_desc *desc, u8 *out)
 {
 	if (!crypto_simd_usable()) {
-		sha512_base_do_finalize(desc,
-				(sha512_block_fn *)sha512_block_data_order);
+		sha512_base_do_finalize(desc, __sha512_block_data_order);
 		return sha512_base_finish(desc, out);
 	}
 
 	kernel_neon_begin();
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_ce_transform);
+	sha512_base_do_finalize(desc, sha512_ce_transform);
 	kernel_neon_end();
 	return sha512_base_finish(desc, out);
 }
diff --git a/arch/arm64/crypto/sha512-glue.c b/arch/arm64/crypto/sha512-glue.c
index d915c656..86045ae 100644
--- a/arch/arm64/crypto/sha512-glue.c
+++ b/arch/arm64/crypto/sha512-glue.c
@@ -20,15 +20,21 @@
 MODULE_ALIAS_CRYPTO("sha384");
 MODULE_ALIAS_CRYPTO("sha512");
 
-asmlinkage void sha512_block_data_order(u32 *digest, const void *data,
+asmlinkage void sha512_block_data_order(u64 *digest, const void *data,
 					unsigned int num_blks);
 EXPORT_SYMBOL(sha512_block_data_order);
 
+static void __sha512_block_data_order(struct sha512_state *sst, u8 const *src,
+				      int blocks)
+{
+	return sha512_block_data_order(sst->state, src, blocks);
+}
+
 static int sha512_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
 {
 	return sha512_base_do_update(desc, data, len,
-			(sha512_block_fn *)sha512_block_data_order);
+				     __sha512_block_data_order);
 }
 
 static int sha512_finup(struct shash_desc *desc, const u8 *data,
@@ -36,9 +42,8 @@
 {
 	if (len)
 		sha512_base_do_update(desc, data, len,
-			(sha512_block_fn *)sha512_block_data_order);
-	sha512_base_do_finalize(desc,
-			(sha512_block_fn *)sha512_block_data_order);
+				      __sha512_block_data_order);
+	sha512_base_do_finalize(desc, __sha512_block_data_order);
 
 	return sha512_base_finish(desc, out);
 }
diff --git a/arch/arm64/include/asm/alternative.h b/arch/arm64/include/asm/alternative.h
index 3cb3c4a..ad04a50 100644
--- a/arch/arm64/include/asm/alternative.h
+++ b/arch/arm64/include/asm/alternative.h
@@ -73,13 +73,13 @@
 	".pushsection .altinstructions,\"a\"\n"				\
 	ALTINSTR_ENTRY(feature)						\
 	".popsection\n"							\
-	".subsection 1\n"						\
+	".pushsection .altinstr_replacement, \"a\"\n"			\
 	"663:\n\t"							\
 	newinstr "\n"							\
 	"664:\n\t"							\
+	".popsection\n\t"						\
 	".org	. - (664b-663b) + (662b-661b)\n\t"			\
-	".org	. - (662b-661b) + (664b-663b)\n\t"			\
-	".previous\n"							\
+	".org	. - (662b-661b) + (664b-663b)\n"			\
 	".endif\n"
 
 #define __ALTERNATIVE_CFG_CB(oldinstr, feature, cfg_enabled, cb)	\
@@ -117,11 +117,11 @@
 662:	.pushsection .altinstructions, "a"
 	altinstruction_entry 661b, 663f, \cap, 662b-661b, 664f-663f
 	.popsection
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 663:	\insn2
 664:	.org	. - (664b-663b) + (662b-661b)
 	.org	. - (662b-661b) + (664b-663b)
-	.previous
+	.popsection
 	.endif
 .endm
 
@@ -160,7 +160,7 @@
 	.pushsection .altinstructions, "a"
 	altinstruction_entry 663f, 661f, \cap, 664f-663f, 662f-661f
 	.popsection
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 	.align 2	/* So GAS knows label 661 is suitably aligned */
 661:
 .endm
@@ -179,9 +179,9 @@
 .macro alternative_else
 662:
 	.if .Lasm_alt_mode==0
-	.subsection 1
+	.pushsection .altinstr_replacement, "ax"
 	.else
-	.previous
+	.popsection
 	.endif
 663:
 .endm
@@ -194,7 +194,7 @@
 	.org	. - (664b-663b) + (662b-661b)
 	.org	. - (662b-661b) + (664b-663b)
 	.if .Lasm_alt_mode==0
-	.previous
+	.popsection
 	.endif
 .endm
 
diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index 4a4258f..21b606b 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -444,6 +444,16 @@
 	.endm
 
 /*
+ * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present
+ */
+	.macro	reset_amuserenr_el0, tmpreg
+	mrs	\tmpreg, id_aa64pfr0_el1	// Check ID_AA64PFR0_EL1
+	ubfx	\tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4
+	cbz	\tmpreg, .Lskip_\@		// Skip if no AMU present
+	msr_s	SYS_AMUSERENR_EL0, xzr		// Disable AMU access from EL0
+.Lskip_\@:
+	.endm
+/*
  * copy_page - copy src to dest using temp registers t1-t8
  */
 	.macro copy_page dest:req src:req t1:req t2:req t3:req t4:req t5:req t6:req t7:req t8:req
diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
index 0c791044..193f82a 100644
--- a/arch/arm64/include/asm/clocksource.h
+++ b/arch/arm64/include/asm/clocksource.h
@@ -2,11 +2,11 @@
 #ifndef _ASM_CLOCKSOURCE_H
 #define _ASM_CLOCKSOURCE_H
 
-#include <asm/vdso/clocksource.h>
+#include <vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	/* Usable for direct VDSO access? */
-	enum vdso_arch_clockmode clock_mode;
+	enum vdso_clock_mode clock_mode;
 };
 
 #endif
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
index 7b4172c..935d2aa 100644
--- a/arch/arm64/include/asm/compat.h
+++ b/arch/arm64/include/asm/compat.h
@@ -114,23 +114,6 @@
 
 #define COMPAT_OFF_T_MAX	0x7fffffff
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	return (void __user *)(unsigned long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 #define compat_user_stack_pointer() (user_stack_pointer(task_pt_regs(current)))
 #define COMPAT_MINSIGSTKSZ	2048
 
diff --git a/arch/arm64/include/asm/cpucaps.h b/arch/arm64/include/asm/cpucaps.h
index 1dc3c76..9f6894d 100644
--- a/arch/arm64/include/asm/cpucaps.h
+++ b/arch/arm64/include/asm/cpucaps.h
@@ -55,7 +55,9 @@
 #define ARM64_WORKAROUND_CAVIUM_TX2_219_TVM	45
 #define ARM64_WORKAROUND_CAVIUM_TX2_219_PRFM	46
 #define ARM64_WORKAROUND_1542419		47
+#define ARM64_HAS_AMU_EXTN			48
 
-#define ARM64_NCAPS				48
+/* kabi: reserve 49 - 62 for future cpu capabilities */
+#define ARM64_NCAPS				62
 
 #endif /* __ASM_CPUCAPS_H */
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h
index ccae05d..b88c37a 100644
--- a/arch/arm64/include/asm/cpufeature.h
+++ b/arch/arm64/include/asm/cpufeature.h
@@ -661,6 +661,12 @@
 	default: return CONFIG_ARM64_PA_BITS;
 	}
 }
+
+#ifdef CONFIG_ARM64_AMU_EXTN
+/* Check whether the cpu supports the Activity Monitors Unit (AMU) */
+extern bool cpu_has_amu_feat(int cpu);
+#endif
+
 #endif /* __ASSEMBLY__ */
 
 #endif
diff --git a/arch/arm64/include/asm/ftrace.h b/arch/arm64/include/asm/ftrace.h
index d48667b..dd59b5a1 100644
--- a/arch/arm64/include/asm/ftrace.h
+++ b/arch/arm64/include/asm/ftrace.h
@@ -11,7 +11,7 @@
 #include <asm/insn.h>
 
 #define HAVE_FUNCTION_GRAPH_FP_TEST
-#define MCOUNT_ADDR		((unsigned long)_mcount)
+#define MCOUNT_ADDR		((unsigned long)__va_function(_mcount))
 #define MCOUNT_INSN_SIZE	AARCH64_INSN_SIZE
 
 /*
diff --git a/arch/arm64/include/asm/hardirq.h b/arch/arm64/include/asm/hardirq.h
index 87ad961..ff12ec2 100644
--- a/arch/arm64/include/asm/hardirq.h
+++ b/arch/arm64/include/asm/hardirq.h
@@ -13,21 +13,12 @@
 #include <asm/kvm_arm.h>
 #include <asm/sysreg.h>
 
-#define NR_IPI	7
-
 typedef struct {
 	unsigned int __softirq_pending;
-	unsigned int ipi_irqs[NR_IPI];
 } ____cacheline_aligned irq_cpustat_t;
 
 #include <linux/irq_cpustat.h>	/* Standard mappings for irq_cpustat_t above */
 
-#define __inc_irq_stat(cpu, member)	__IRQ_STAT(cpu, member)++
-#define __get_irq_stat(cpu, member)	__IRQ_STAT(cpu, member)
-
-u64 smp_irq_stat_cpu(unsigned int cpu);
-#define arch_irq_stat_cpu	smp_irq_stat_cpu
-
 #define __ARCH_IRQ_EXIT_IRQS_DISABLED	1
 
 struct nmi_ctx {
diff --git a/arch/arm64/include/asm/irq_work.h b/arch/arm64/include/asm/irq_work.h
index 8a1ef19..a102028 100644
--- a/arch/arm64/include/asm/irq_work.h
+++ b/arch/arm64/include/asm/irq_work.h
@@ -2,11 +2,9 @@
 #ifndef __ASM_IRQ_WORK_H
 #define __ASM_IRQ_WORK_H
 
-#include <asm/smp.h>
-
 static inline bool arch_irq_work_has_interrupt(void)
 {
-	return !!__smp_cross_call;
+	return true;
 }
 
 #endif /* __ASM_IRQ_WORK_H */
diff --git a/arch/arm64/include/asm/kfence.h b/arch/arm64/include/asm/kfence.h
new file mode 100644
index 0000000..d061176
--- /dev/null
+++ b/arch/arm64/include/asm/kfence.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * arm64 KFENCE support.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef __ASM_KFENCE_H
+#define __ASM_KFENCE_H
+
+#include <asm/cacheflush.h>
+
+static inline bool arch_kfence_init_pool(void) { return true; }
+
+static inline bool kfence_protect_page(unsigned long addr, bool protect)
+{
+	set_memory_valid(addr, 1, !protect);
+
+	return true;
+}
+
+#endif /* __ASM_KFENCE_H */
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index 9be64c0..cac6ad9 100644
--- a/arch/arm64/include/asm/kvm_arm.h
+++ b/arch/arm64/include/asm/kvm_arm.h
@@ -269,6 +269,7 @@
 
 /* Hyp Coprocessor Trap Register */
 #define CPTR_EL2_TCPAC	(1 << 31)
+#define CPTR_EL2_TAM	(1 << 30)
 #define CPTR_EL2_TTA	(1 << 20)
 #define CPTR_EL2_TFP	(1 << CPTR_EL2_TFP_SHIFT)
 #define CPTR_EL2_TZ	(1 << 8)
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index c54e759..3316b65 100644
--- a/arch/arm64/include/asm/kvm_asm.h
+++ b/arch/arm64/include/asm/kvm_asm.h
@@ -43,9 +43,9 @@
 /* Translate a kernel address of @sym into its equivalent linear mapping */
 #define kvm_ksym_ref(sym)						\
 	({								\
-		void *val = &sym;					\
+		void *val = __va_function(sym);				\
 		if (!is_kernel_in_hyp_mode())				\
-			val = lm_alias(&sym);				\
+			val = lm_alias(val);				\
 		val;							\
 	 })
 
diff --git a/arch/arm64/include/asm/memory.h b/arch/arm64/include/asm/memory.h
index 67b6b90..0378574 100644
--- a/arch/arm64/include/asm/memory.h
+++ b/arch/arm64/include/asm/memory.h
@@ -309,6 +309,24 @@
 #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 __va_function(x) ({						\
+	void *addr;							\
+	asm("adrp %0, " __stringify(x) "\n\t"				\
+	    "add  %0, %0, :lo12:" __stringify(x) : "=r" (addr));	\
+	addr;								\
+})
+
+#define __pa_function(x) 	__pa_symbol(__va_function(x))
+
+/*
  *  virt_to_page(x)	convert a _valid_ virtual address to struct page *
  *  virt_addr_valid(x)	indicates whether a virtual address is valid
  */
diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index fb564de..6293143 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -132,7 +132,7 @@
  * Atomically replaces the active TTBR1_EL1 PGD with a new VA-compatible PGD,
  * avoiding the possibility of conflicting TLB entries being allocated.
  */
-static inline void cpu_replace_ttbr1(pgd_t *pgdp)
+static inline void __nocfi cpu_replace_ttbr1(pgd_t *pgdp)
 {
 	typedef void (ttbr_replace_func)(phys_addr_t);
 	extern ttbr_replace_func idmap_cpu_replace_ttbr1;
@@ -153,7 +153,7 @@
 		ttbr1 |= TTBR_CNP_BIT;
 	}
 
-	replace_phys = (void *)__pa_symbol(idmap_cpu_replace_ttbr1);
+	replace_phys = (void *)__pa_function(idmap_cpu_replace_ttbr1);
 
 	cpu_install_idmap();
 	replace_phys(ttbr1);
diff --git a/arch/arm64/include/asm/page.h b/arch/arm64/include/asm/page.h
index d39ddb2..75d6cd2 100644
--- a/arch/arm64/include/asm/page.h
+++ b/arch/arm64/include/asm/page.h
@@ -21,6 +21,10 @@
 extern void copy_page(void *to, const void *from);
 extern void clear_page(void *to);
 
+#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
+	alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
+#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
+
 #define clear_user_page(addr,vaddr,pg)  __cpu_clear_user_page(addr, vaddr)
 #define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr)
 
diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
index 3a057d4..8901f59 100644
--- a/arch/arm64/include/asm/pgtable.h
+++ b/arch/arm64/include/asm/pgtable.h
@@ -414,6 +414,7 @@
 #define pfn_pud(pfn,prot)	__pud(__phys_to_pud_val((phys_addr_t)(pfn) << PAGE_SHIFT) | pgprot_val(prot))
 
 #define set_pmd_at(mm, addr, pmdp, pmd)	set_pte_at(mm, addr, (pte_t *)pmdp, pmd_pte(pmd))
+#define set_pud_at(mm, addr, pudp, pud)	set_pte_at(mm, addr, (pte_t *)pudp, pud_pte(pud))
 
 #define __pgd_to_phys(pgd)	__pte_to_phys(pgd_pte(pgd))
 #define __phys_to_pgd_val(phys)	__phys_to_pte_val(phys)
diff --git a/arch/arm64/include/asm/processor.h b/arch/arm64/include/asm/processor.h
index 5623685..53e1f13 100644
--- a/arch/arm64/include/asm/processor.h
+++ b/arch/arm64/include/asm/processor.h
@@ -27,6 +27,8 @@
 #include <linux/stddef.h>
 #include <linux/string.h>
 
+#include <vdso/processor.h>
+
 #include <asm/alternative.h>
 #include <asm/cpufeature.h>
 #include <asm/hw_breakpoint.h>
@@ -242,11 +244,6 @@
 
 unsigned long get_wchan(struct task_struct *p);
 
-static inline void cpu_relax(void)
-{
-	asm volatile("yield" ::: "memory");
-}
-
 /* Thread switching */
 extern struct task_struct *cpu_switch_to(struct task_struct *prev,
 					 struct task_struct *next);
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/seccomp.h b/arch/arm64/include/asm/seccomp.h
index c363871..3025623 100644
--- a/arch/arm64/include/asm/seccomp.h
+++ b/arch/arm64/include/asm/seccomp.h
@@ -19,4 +19,13 @@
 
 #include <asm-generic/seccomp.h>
 
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_AARCH64
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"aarch64"
+#ifdef CONFIG_COMPAT
+# define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_ARM
+# define SECCOMP_ARCH_COMPAT_NR	__NR_compat_syscalls
+# define SECCOMP_ARCH_COMPAT_NAME	"arm"
+#endif
+
 #endif /* _ASM_SECCOMP_H */
diff --git a/arch/arm64/include/asm/smp.h b/arch/arm64/include/asm/smp.h
index 0eadbf9..2e7f529 100644
--- a/arch/arm64/include/asm/smp.h
+++ b/arch/arm64/include/asm/smp.h
@@ -56,27 +56,15 @@
 struct seq_file;
 
 /*
- * generate IPI list text
- */
-extern void show_ipi_list(struct seq_file *p, int prec);
-
-/*
- * Called from C code, this handles an IPI.
- */
-extern void handle_IPI(int ipinr, struct pt_regs *regs);
-
-/*
  * Discover the set of possible CPUs and determine their
  * SMP operations.
  */
 extern void smp_init_cpus(void);
 
 /*
- * Provide a function to raise an IPI cross call on CPUs in callmap.
+ * Register IPI interrupts with the arch SMP code
  */
-extern void set_smp_cross_call(void (*)(const struct cpumask *, unsigned int));
-
-extern void (*__smp_cross_call)(const struct cpumask *, unsigned int);
+extern void set_smp_ipi_range(int ipi_base, int nr_ipi);
 
 /*
  * Called from the secondary holding pen, this is the secondary CPU entry point.
diff --git a/arch/arm64/include/asm/stacktrace.h b/arch/arm64/include/asm/stacktrace.h
index 4d9b1f4..b6cf32f 100644
--- a/arch/arm64/include/asm/stacktrace.h
+++ b/arch/arm64/include/asm/stacktrace.h
@@ -68,6 +68,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/sysreg.h b/arch/arm64/include/asm/sysreg.h
index 9b68f1b..dd885ba 100644
--- a/arch/arm64/include/asm/sysreg.h
+++ b/arch/arm64/include/asm/sysreg.h
@@ -384,6 +384,42 @@
 #define SYS_TPIDR_EL0			sys_reg(3, 3, 13, 0, 2)
 #define SYS_TPIDRRO_EL0			sys_reg(3, 3, 13, 0, 3)
 
+/* Definitions for system register interface to AMU for ARMv8.4 onwards */
+#define SYS_AM_EL0(crm, op2)		sys_reg(3, 3, 13, (crm), (op2))
+#define SYS_AMCR_EL0			SYS_AM_EL0(2, 0)
+#define SYS_AMCFGR_EL0			SYS_AM_EL0(2, 1)
+#define SYS_AMCGCR_EL0			SYS_AM_EL0(2, 2)
+#define SYS_AMUSERENR_EL0		SYS_AM_EL0(2, 3)
+#define SYS_AMCNTENCLR0_EL0		SYS_AM_EL0(2, 4)
+#define SYS_AMCNTENSET0_EL0		SYS_AM_EL0(2, 5)
+#define SYS_AMCNTENCLR1_EL0		SYS_AM_EL0(3, 0)
+#define SYS_AMCNTENSET1_EL0		SYS_AM_EL0(3, 1)
+
+/*
+ * Group 0 of activity monitors (architected):
+ *                op0  op1  CRn   CRm       op2
+ * Counter:       11   011  1101  010:n<3>  n<2:0>
+ * Type:          11   011  1101  011:n<3>  n<2:0>
+ * n: 0-15
+ *
+ * Group 1 of activity monitors (auxiliary):
+ *                op0  op1  CRn   CRm       op2
+ * Counter:       11   011  1101  110:n<3>  n<2:0>
+ * Type:          11   011  1101  111:n<3>  n<2:0>
+ * n: 0-15
+ */
+
+#define SYS_AMEVCNTR0_EL0(n)		SYS_AM_EL0(4 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVTYPE0_EL0(n)		SYS_AM_EL0(6 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVCNTR1_EL0(n)		SYS_AM_EL0(12 + ((n) >> 3), (n) & 7)
+#define SYS_AMEVTYPE1_EL0(n)		SYS_AM_EL0(14 + ((n) >> 3), (n) & 7)
+
+/* AMU v1: Fixed (architecturally defined) activity monitors */
+#define SYS_AMEVCNTR0_CORE_EL0		SYS_AMEVCNTR0_EL0(0)
+#define SYS_AMEVCNTR0_CONST_EL0		SYS_AMEVCNTR0_EL0(1)
+#define SYS_AMEVCNTR0_INST_RET_EL0	SYS_AMEVCNTR0_EL0(2)
+#define SYS_AMEVCNTR0_MEM_STALL		SYS_AMEVCNTR0_EL0(3)
+
 #define SYS_CNTFRQ_EL0			sys_reg(3, 3, 14, 0, 0)
 
 #define SYS_CNTP_TVAL_EL0		sys_reg(3, 3, 14, 2, 0)
@@ -579,6 +615,7 @@
 #define ID_AA64PFR0_CSV3_SHIFT		60
 #define ID_AA64PFR0_CSV2_SHIFT		56
 #define ID_AA64PFR0_DIT_SHIFT		48
+#define ID_AA64PFR0_AMU_SHIFT		44
 #define ID_AA64PFR0_SVE_SHIFT		32
 #define ID_AA64PFR0_RAS_SHIFT		28
 #define ID_AA64PFR0_GIC_SHIFT		24
@@ -589,6 +626,7 @@
 #define ID_AA64PFR0_EL1_SHIFT		4
 #define ID_AA64PFR0_EL0_SHIFT		0
 
+#define ID_AA64PFR0_AMU			0x1
 #define ID_AA64PFR0_SVE			0x1
 #define ID_AA64PFR0_RAS_V1		0x1
 #define ID_AA64PFR0_FP_NI		0xf
diff --git a/arch/arm64/include/asm/system_misc.h b/arch/arm64/include/asm/system_misc.h
index 1ab63cf..d02c5e5 100644
--- a/arch/arm64/include/asm/system_misc.h
+++ b/arch/arm64/include/asm/system_misc.h
@@ -32,8 +32,6 @@
 struct mm_struct;
 extern void __show_regs(struct pt_regs *);
 
-extern void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
-
 #endif	/* __ASSEMBLY__ */
 
 #endif	/* __ASM_SYSTEM_MISC_H */
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 4e3ed70..8f4cd61 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -41,6 +41,9 @@
 #endif
 		} preempt;
 	};
+#ifdef CONFIG_SHADOW_CALL_STACK
+	void			*shadow_call_stack;
+#endif
 };
 
 #define thread_saved_pc(tsk)	\
diff --git a/arch/arm64/include/asm/topology.h b/arch/arm64/include/asm/topology.h
index a4d945db..7069717 100644
--- a/arch/arm64/include/asm/topology.h
+++ b/arch/arm64/include/asm/topology.h
@@ -19,6 +19,9 @@
 /* Replace task scheduler's default frequency-invariant accounting */
 #define arch_scale_freq_capacity topology_get_freq_scale
 
+/* Replace task scheduler's default max-frequency-invariant accounting */
+#define arch_scale_max_freq_capacity topology_get_max_freq_scale
+
 /* Replace task scheduler's default cpu-invariant accounting */
 #define arch_scale_cpu_capacity topology_get_cpu_scale
 
diff --git a/arch/arm64/include/asm/unistd.h b/arch/arm64/include/asm/unistd.h
index 8c1b73d..b3b2019 100644
--- a/arch/arm64/include/asm/unistd.h
+++ b/arch/arm64/include/asm/unistd.h
@@ -38,7 +38,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		436
+#define __NR_compat_syscalls		441
 #endif
 
 #define __ARCH_WANT_SYS_CLONE
diff --git a/arch/arm64/include/asm/unistd32.h b/arch/arm64/include/asm/unistd32.h
index 94ab29c..52879c7 100644
--- a/arch/arm64/include/asm/unistd32.h
+++ b/arch/arm64/include/asm/unistd32.h
@@ -879,6 +879,8 @@
 __SYSCALL(__NR_pidfd_open, sys_pidfd_open)
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 /*
  * Please add new compat syscalls above this comment and update
diff --git a/arch/arm64/include/asm/vdso/clocksource.h b/arch/arm64/include/asm/vdso/clocksource.h
index 8019f61..8ac7232 100644
--- a/arch/arm64/include/asm/vdso/clocksource.h
+++ b/arch/arm64/include/asm/vdso/clocksource.h
@@ -2,13 +2,10 @@
 #ifndef __ASM_VDSOCLOCKSOURCE_H
 #define __ASM_VDSOCLOCKSOURCE_H
 
-enum vdso_arch_clockmode {
-	/* vdso clocksource not usable */
-	VDSO_CLOCKMODE_NONE,
-	/* vdso clocksource for both 32 and 64bit tasks */
-	VDSO_CLOCKMODE_ARCHTIMER,
-	/* vdso clocksource for 64bit tasks only */
-	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT,
-};
+#define VDSO_ARCH_CLOCKMODES					\
+	/* vdso clocksource for both 32 and 64bit tasks */	\
+	VDSO_CLOCKMODE_ARCHTIMER,				\
+	/* vdso clocksource for 64bit tasks only */		\
+	VDSO_CLOCKMODE_ARCHTIMER_NOCOMPAT			\
 
 #endif
diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index 413d42e..0677262 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,7 +8,7 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
+#include <asm/errno.h>
 
 #include <asm/vdso/clocksource.h>
 #include <asm/vdso/compat_barrier.h>
@@ -18,6 +18,7 @@
 #define VDSO_HAS_CLOCK_GETRES		1
 
 #define VDSO_HAS_32BIT_FALLBACK		1
+#define BUILD_VDSO32			1
 
 static __always_inline
 int gettimeofday_fallback(struct __kernel_old_timeval *_tv,
@@ -79,10 +80,6 @@
 	register long ret asm ("r0");
 	register long nr asm("r7") = __NR_compat_clock_getres_time64;
 
-	/* The checks below are required for ABI consistency with arm */
-	if ((_clkid >= MAX_CLOCKS) && (_ts == NULL))
-		return -EINVAL;
-
 	asm volatile(
 	"       swi #0\n"
 	: "=r" (ret)
@@ -100,10 +97,6 @@
 	register long ret asm ("r0");
 	register long nr asm("r7") = __NR_compat_clock_getres;
 
-	/* The checks below are required for ABI consistency with arm */
-	if ((_clkid >= MAX_CLOCKS) && (_ts == NULL))
-		return -EINVAL;
-
 	asm volatile(
 	"       swi #0\n"
 	: "=r" (ret)
diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index d7361fa..f0cd969 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,7 +8,6 @@
 #ifndef __ASSEMBLY__
 
 #include <asm/unistd.h>
-#include <uapi/linux/time.h>
 
 #include <asm/vdso/clocksource.h>
 
diff --git a/arch/arm64/include/asm/vdso/processor.h b/arch/arm64/include/asm/vdso/processor.h
new file mode 100644
index 0000000..ff830b7
--- /dev/null
+++ b/arch/arm64/include/asm/vdso/processor.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+static inline void cpu_relax(void)
+{
+	asm volatile("yield" ::: "memory");
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/arm64/kernel/Makefile b/arch/arm64/kernel/Makefile
index 478491f..b399532 100644
--- a/arch/arm64/kernel/Makefile
+++ b/arch/arm64/kernel/Makefile
@@ -63,6 +63,7 @@
 obj-$(CONFIG_ARM_SDE_INTERFACE)		+= sdei.o
 obj-$(CONFIG_ARM64_SSBD)		+= ssbd.o
 obj-$(CONFIG_ARM64_PTR_AUTH)		+= pointer_auth.o
+obj-$(CONFIG_SHADOW_CALL_STACK)		+= scs.o
 
 obj-y					+= vdso/ probes/
 obj-$(CONFIG_COMPAT_VDSO)		+= vdso32/
diff --git a/arch/arm64/kernel/alternative.c b/arch/arm64/kernel/alternative.c
index 7303994..a50fb1d 100644
--- a/arch/arm64/kernel/alternative.c
+++ b/arch/arm64/kernel/alternative.c
@@ -132,8 +132,8 @@
 	} while (cur += d_size, cur < end);
 }
 
-static void __apply_alternatives(void *alt_region,  bool is_module,
-				 unsigned long *feature_mask)
+static void __nocfi __apply_alternatives(void *alt_region,  bool is_module,
+					 unsigned long *feature_mask)
 {
 	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 2146857..f6762b9 100644
--- a/arch/arm64/kernel/asm-offsets.c
+++ b/arch/arm64/kernel/asm-offsets.c
@@ -34,6 +34,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));
 #ifdef CONFIG_STACKPROTECTOR
   DEFINE(TSK_STACK_CANARY,	offsetof(struct task_struct, stack_canary));
diff --git a/arch/arm64/kernel/cpu-reset.S b/arch/arm64/kernel/cpu-reset.S
index 6ea337d..32c7bf8 100644
--- a/arch/arm64/kernel/cpu-reset.S
+++ b/arch/arm64/kernel/cpu-reset.S
@@ -42,11 +42,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 ed50e95..a05bda36 100644
--- a/arch/arm64/kernel/cpu-reset.h
+++ b/arch/arm64/kernel/cpu-reset.h
@@ -13,16 +13,16 @@
 void __cpu_soft_restart(unsigned long el2_switch, unsigned long entry,
 	unsigned long arg0, unsigned long arg1, unsigned long arg2);
 
-static inline void __noreturn cpu_soft_restart(unsigned long entry,
-					       unsigned long arg0,
-					       unsigned long arg1,
-					       unsigned long arg2)
+static inline void __noreturn __nocfi cpu_soft_restart(unsigned long entry,
+						       unsigned long arg0,
+						       unsigned long arg1,
+						       unsigned long arg2)
 {
 	typeof(__cpu_soft_restart) *restart;
 
 	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 acdef8d7..db967a8 100644
--- a/arch/arm64/kernel/cpufeature.c
+++ b/arch/arm64/kernel/cpufeature.c
@@ -154,6 +154,7 @@
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV3_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_CSV2_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_VISIBLE, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_DIT_SHIFT, 4, 0),
+	ARM64_FTR_BITS(FTR_HIDDEN, FTR_NONSTRICT, FTR_LOWER_SAFE, ID_AA64PFR0_AMU_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_VISIBLE_IF_IS_ENABLED(CONFIG_ARM64_SVE),
 				   FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_SVE_SHIFT, 4, 0),
 	ARM64_FTR_BITS(FTR_HIDDEN, FTR_STRICT, FTR_LOWER_SAFE, ID_AA64PFR0_RAS_SHIFT, 4, 0),
@@ -1028,7 +1029,7 @@
 }
 
 #ifdef CONFIG_UNMAP_KERNEL_AT_EL0
-static void
+static void __nocfi
 kpti_install_ng_mappings(const struct arm64_cpu_capabilities *__unused)
 {
 	typedef void (kpti_remap_fn)(int, int, phys_addr_t);
@@ -1046,7 +1047,7 @@
 	if (kpti_applied || kaslr_offset() > 0)
 		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));
@@ -1142,6 +1143,53 @@
 
 #endif
 
+#ifdef CONFIG_ARM64_AMU_EXTN
+
+/*
+ * The "amu_cpus" cpumask only signals that the CPU implementation for the
+ * flagged CPUs supports the Activity Monitors Unit (AMU) but does not provide
+ * information regarding all the events that it supports. When a CPU bit is
+ * set in the cpumask, the user of this feature can only rely on the presence
+ * of the 4 fixed counters for that CPU. But this does not guarantee that the
+ * counters are enabled or access to these counters is enabled by code
+ * executed at higher exception levels (firmware).
+ */
+static struct cpumask amu_cpus __read_mostly;
+
+bool cpu_has_amu_feat(int cpu)
+{
+	return cpumask_test_cpu(cpu, &amu_cpus);
+}
+
+static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap)
+{
+	if (has_cpuid_feature(cap, SCOPE_LOCAL_CPU)) {
+		pr_info("detected CPU%d: Activity Monitors Unit (AMU)\n",
+			smp_processor_id());
+		cpumask_set_cpu(smp_processor_id(), &amu_cpus);
+	}
+}
+
+static bool has_amu(const struct arm64_cpu_capabilities *cap,
+		    int __unused)
+{
+	/*
+	 * The AMU extension is a non-conflicting feature: the kernel can
+	 * safely run a mix of CPUs with and without support for the
+	 * activity monitors extension. Therefore, unconditionally enable
+	 * the capability to allow any late CPU to use the feature.
+	 *
+	 * With this feature unconditionally enabled, the cpu_enable
+	 * function will be called for all CPUs that match the criteria,
+	 * including secondary and hotplugged, marking this feature as
+	 * present on that respective CPU. The enable function will also
+	 * print a detection message.
+	 */
+
+	return true;
+}
+#endif
+
 #ifdef CONFIG_ARM64_VHE
 static bool runs_at_el2(const struct arm64_cpu_capabilities *entry, int __unused)
 {
@@ -1411,6 +1459,24 @@
 		.cpu_enable = cpu_clear_disr,
 	},
 #endif /* CONFIG_ARM64_RAS_EXTN */
+#ifdef CONFIG_ARM64_AMU_EXTN
+	{
+		/*
+		 * The feature is enabled by default if CONFIG_ARM64_AMU_EXTN=y.
+		 * Therefore, don't provide .desc as we don't want the detection
+		 * message to be shown until at least one CPU is detected to
+		 * support the feature.
+		 */
+		.capability = ARM64_HAS_AMU_EXTN,
+		.type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE,
+		.matches = has_amu,
+		.sys_reg = SYS_ID_AA64PFR0_EL1,
+		.sign = FTR_UNSIGNED,
+		.field_pos = ID_AA64PFR0_AMU_SHIFT,
+		.min_field_value = ID_AA64PFR0_AMU,
+		.cpu_enable = cpu_amu_enable,
+	},
+#endif /* CONFIG_ARM64_AMU_EXTN */
 	{
 		.desc = "Data cache clean to the PoU not required for I/D coherence",
 		.capability = ARM64_HAS_CACHE_IDC,
diff --git a/arch/arm64/kernel/efi-rt-wrapper.S b/arch/arm64/kernel/efi-rt-wrapper.S
index 3fc7110..62f0260 100644
--- a/arch/arm64/kernel/efi-rt-wrapper.S
+++ b/arch/arm64/kernel/efi-rt-wrapper.S
@@ -34,5 +34,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 db13774..6800457 100644
--- a/arch/arm64/kernel/entry.S
+++ b/arch/arm64/kernel/entry.S
@@ -172,6 +172,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_current_task tsk
@@ -278,6 +282,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
@@ -383,6 +393,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.
@@ -400,15 +413,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
 
 /* GPRs used by entry code */
@@ -1157,6 +1179,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/ftrace.c b/arch/arm64/kernel/ftrace.c
index 06e56b4..25930d2 100644
--- a/arch/arm64/kernel/ftrace.c
+++ b/arch/arm64/kernel/ftrace.c
@@ -55,7 +55,7 @@
 	unsigned long pc;
 	u32 new;
 
-	pc = (unsigned long)&ftrace_call;
+	pc = (unsigned long)__va_function(ftrace_call);
 	new = aarch64_insn_gen_branch_imm(pc, (unsigned long)func,
 					  AARCH64_INSN_BRANCH_LINK);
 
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index 2f784d3..23a4b53 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -27,6 +27,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>
@@ -431,6 +432,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
@@ -738,6 +743,10 @@
 	ldr	x2, [x0, #CPU_BOOT_TASK]
 	cbz	x2, __secondary_too_slow
 	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
diff --git a/arch/arm64/kernel/irq.c b/arch/arm64/kernel/irq.c
index 04a327c..79fc2bb 100644
--- a/arch/arm64/kernel/irq.c
+++ b/arch/arm64/kernel/irq.c
@@ -10,10 +10,10 @@
  * Copyright (C) 2012 ARM Ltd.
  */
 
-#include <linux/kernel_stat.h>
 #include <linux/irq.h>
 #include <linux/memory.h>
 #include <linux/smp.h>
+#include <linux/hardirq.h>
 #include <linux/init.h>
 #include <linux/irqchip.h>
 #include <linux/kprobes.h>
@@ -21,21 +21,13 @@
 #include <linux/vmalloc.h>
 #include <asm/daifflags.h>
 #include <asm/vmap_stack.h>
-
-unsigned long irq_err_count;
+#include <asm/scs.h>
 
 /* Only access this in an NMI enter/exit */
 DEFINE_PER_CPU(struct nmi_ctx, nmi_contexts);
 
 DEFINE_PER_CPU(unsigned long *, irq_stack_ptr);
 
-int arch_show_interrupts(struct seq_file *p, int prec)
-{
-	show_ipi_list(p, prec);
-	seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count);
-	return 0;
-}
-
 #ifdef CONFIG_VMAP_STACK
 static void init_irq_stacks(void)
 {
@@ -63,6 +55,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/module-plts.c b/arch/arm64/kernel/module-plts.c
index 426018e..20b98d0 100644
--- a/arch/arm64/kernel/module-plts.c
+++ b/arch/arm64/kernel/module-plts.c
@@ -252,6 +252,40 @@
 	return ret;
 }
 
+static bool branch_rela_needs_plt(Elf64_Sym *syms, Elf64_Rela *rela,
+				  Elf64_Word dstidx)
+{
+
+	Elf64_Sym *s = syms + ELF64_R_SYM(rela->r_info);
+
+	if (s->st_shndx == dstidx)
+		return false;
+
+	return ELF64_R_TYPE(rela->r_info) == R_AARCH64_JUMP26 ||
+	       ELF64_R_TYPE(rela->r_info) == R_AARCH64_CALL26;
+}
+
+/* Group branch PLT relas at the front end of the array. */
+static int partition_branch_plt_relas(Elf64_Sym *syms, Elf64_Rela *rela,
+				      int numrels, Elf64_Word dstidx)
+{
+	int i = 0, j = numrels - 1;
+
+	if (!IS_ENABLED(CONFIG_RANDOMIZE_BASE))
+		return 0;
+
+	while (i < j) {
+		if (branch_rela_needs_plt(syms, &rela[i], dstidx))
+			i++;
+		else if (branch_rela_needs_plt(syms, &rela[j], dstidx))
+			swap(rela[i], rela[j]);
+		else
+			j--;
+	}
+
+	return i;
+}
+
 int module_frob_arch_sections(Elf_Ehdr *ehdr, Elf_Shdr *sechdrs,
 			      char *secstrings, struct module *mod)
 {
@@ -288,7 +322,7 @@
 
 	for (i = 0; i < ehdr->e_shnum; i++) {
 		Elf64_Rela *rels = (void *)ehdr + sechdrs[i].sh_offset;
-		int numrels = sechdrs[i].sh_size / sizeof(Elf64_Rela);
+		int nents, numrels = sechdrs[i].sh_size / sizeof(Elf64_Rela);
 		Elf64_Shdr *dstsec = sechdrs + sechdrs[i].sh_info;
 
 		if (sechdrs[i].sh_type != SHT_RELA)
@@ -298,8 +332,14 @@
 		if (!(dstsec->sh_flags & SHF_EXECINSTR))
 			continue;
 
-		/* sort by type, symbol index and addend */
-		sort(rels, numrels, sizeof(Elf64_Rela), cmp_rela, NULL);
+		/*
+		 * sort branch relocations requiring a PLT by type, symbol index
+		 * and addend
+		 */
+		nents = partition_branch_plt_relas(syms, rels, numrels,
+						   sechdrs[i].sh_info);
+		if (nents)
+			sort(rels, nents, sizeof(Elf64_Rela), cmp_rela, NULL);
 
 		if (!str_has_prefix(secstrings + dstsec->sh_name, ".init"))
 			core_plts += count_plts(syms, rels, numrels,
diff --git a/arch/arm64/kernel/perf_event.c b/arch/arm64/kernel/perf_event.c
index 19128d9..e09faf0 100644
--- a/arch/arm64/kernel/perf_event.c
+++ b/arch/arm64/kernel/perf_event.c
@@ -1015,7 +1015,10 @@
 	return probe.present ? 0 : -ENODEV;
 }
 
-static int armv8_pmu_init(struct arm_pmu *cpu_pmu)
+static int armv8_pmu_init(struct arm_pmu *cpu_pmu, char *name,
+			  int (*map_event)(struct perf_event *event),
+			  const struct attribute_group *events,
+			  const struct attribute_group *format)
 {
 	int ret = armv8pmu_probe_pmu(cpu_pmu);
 	if (ret)
@@ -1034,144 +1037,127 @@
 	cpu_pmu->set_event_filter	= armv8pmu_set_event_filter;
 	cpu_pmu->filter_match		= armv8pmu_filter_match;
 
+	cpu_pmu->name			= name;
+	cpu_pmu->map_event		= map_event;
+	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] = events ?
+			events : &armv8_pmuv3_events_attr_group;
+	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] = format ?
+			format : &armv8_pmuv3_format_attr_group;
+
 	return 0;
 }
 
 static int armv8_pmuv3_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_pmuv3",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_pmuv3";
-	cpu_pmu->map_event		= armv8_pmuv3_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a34_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a34",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a35_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cortex_a35";
-	cpu_pmu->map_event		= armv8_a53_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a35",
+			      armv8_a53_map_event, NULL, NULL);
 }
 
 static int armv8_a53_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a53",
+			      armv8_a53_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a53";
-	cpu_pmu->map_event		= armv8_a53_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a55_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a55",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a57_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a57",
+			      armv8_a57_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a57";
-	cpu_pmu->map_event		= armv8_a57_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+static int armv8_a65_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a65",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_a72_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cortex_a72";
-	cpu_pmu->map_event		= armv8_a57_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a72",
+			      armv8_a57_map_event, NULL, NULL);
 }
 
 static int armv8_a73_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a73",
+			      armv8_a73_map_event, NULL, NULL);
+}
 
-	cpu_pmu->name			= "armv8_cortex_a73";
-	cpu_pmu->map_event		= armv8_a73_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
+static int armv8_a75_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a75",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
 
-	return 0;
+static int armv8_a76_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a76",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_a77_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_cortex_a77",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_e1_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_neoverse_e1",
+			      armv8_pmuv3_map_event, NULL, NULL);
+}
+
+static int armv8_n1_pmu_init(struct arm_pmu *cpu_pmu)
+{
+	return armv8_pmu_init(cpu_pmu, "armv8_neoverse_n1",
+			      armv8_pmuv3_map_event, NULL, NULL);
 }
 
 static int armv8_thunder_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_cavium_thunder";
-	cpu_pmu->map_event		= armv8_thunder_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_cavium_thunder",
+			      armv8_thunder_map_event, NULL, NULL);
 }
 
 static int armv8_vulcan_pmu_init(struct arm_pmu *cpu_pmu)
 {
-	int ret = armv8_pmu_init(cpu_pmu);
-	if (ret)
-		return ret;
-
-	cpu_pmu->name			= "armv8_brcm_vulcan";
-	cpu_pmu->map_event		= armv8_vulcan_map_event;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_EVENTS] =
-		&armv8_pmuv3_events_attr_group;
-	cpu_pmu->attr_groups[ARMPMU_ATTR_GROUP_FORMATS] =
-		&armv8_pmuv3_format_attr_group;
-
-	return 0;
+	return armv8_pmu_init(cpu_pmu, "armv8_brcm_vulcan",
+			      armv8_vulcan_map_event, NULL, NULL);
 }
 
 static const struct of_device_id armv8_pmu_of_device_ids[] = {
 	{.compatible = "arm,armv8-pmuv3",	.data = armv8_pmuv3_init},
+	{.compatible = "arm,cortex-a34-pmu",	.data = armv8_a34_pmu_init},
 	{.compatible = "arm,cortex-a35-pmu",	.data = armv8_a35_pmu_init},
 	{.compatible = "arm,cortex-a53-pmu",	.data = armv8_a53_pmu_init},
+	{.compatible = "arm,cortex-a55-pmu",	.data = armv8_a55_pmu_init},
 	{.compatible = "arm,cortex-a57-pmu",	.data = armv8_a57_pmu_init},
+	{.compatible = "arm,cortex-a65-pmu",	.data = armv8_a65_pmu_init},
 	{.compatible = "arm,cortex-a72-pmu",	.data = armv8_a72_pmu_init},
 	{.compatible = "arm,cortex-a73-pmu",	.data = armv8_a73_pmu_init},
+	{.compatible = "arm,cortex-a75-pmu",	.data = armv8_a75_pmu_init},
+	{.compatible = "arm,cortex-a76-pmu",	.data = armv8_a76_pmu_init},
+	{.compatible = "arm,cortex-a77-pmu",	.data = armv8_a77_pmu_init},
+	{.compatible = "arm,neoverse-e1-pmu",	.data = armv8_e1_pmu_init},
+	{.compatible = "arm,neoverse-n1-pmu",	.data = armv8_n1_pmu_init},
 	{.compatible = "cavium,thunder-pmu",	.data = armv8_thunder_pmu_init},
 	{.compatible = "brcm,vulcan-pmu",	.data = armv8_vulcan_pmu_init},
 	{},
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index f61ef46..64fc92ff 100644
--- a/arch/arm64/kernel/process.c
+++ b/arch/arm64/kernel/process.c
@@ -52,6 +52,7 @@
 #include <asm/mmu_context.h>
 #include <asm/processor.h>
 #include <asm/pointer_auth.h>
+#include <asm/scs.h>
 #include <asm/stacktrace.h>
 
 #if defined(CONFIG_STACKPROTECTOR) && !defined(CONFIG_STACKPROTECTOR_PER_TASK)
@@ -66,8 +67,6 @@
 void (*pm_power_off)(void);
 EXPORT_SYMBOL_GPL(pm_power_off);
 
-void (*arm_pm_restart)(enum reboot_mode reboot_mode, const char *cmd);
-
 static void __cpu_do_idle(void)
 {
 	dsb(sy);
@@ -197,10 +196,7 @@
 		efi_reboot(reboot_mode, NULL);
 
 	/* Now call the architecture specific reboot code. */
-	if (arm_pm_restart)
-		arm_pm_restart(reboot_mode, cmd);
-	else
-		do_kernel_restart(cmd);
+	do_kernel_restart(cmd);
 
 	/*
 	 * Whoops - the architecture was unable to reboot.
@@ -547,6 +543,7 @@
 	ptrauth_thread_switch(next);
 	ssbs_thread_switch(next);
 	erratum_1418040_thread_switch(prev, next);
+	scs_overflow_check(next);
 
 	/*
 	 * Complete any pending TLB or cache maintenance on this CPU in case
diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c
index 62d2bda..bfb1a6f 100644
--- a/arch/arm64/kernel/psci.c
+++ b/arch/arm64/kernel/psci.c
@@ -38,7 +38,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..eaadf543
--- /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/smp.c b/arch/arm64/kernel/smp.c
index 987220a..f5914ea 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -30,6 +30,7 @@
 #include <linux/completion.h>
 #include <linux/of.h>
 #include <linux/irq_work.h>
+#include <linux/kernel_stat.h>
 #include <linux/kexec.h>
 
 #include <asm/alternative.h>
@@ -44,6 +45,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>
@@ -52,6 +54,8 @@
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/ipi.h>
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/debug.h>
 
 DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number);
 EXPORT_PER_CPU_SYMBOL(cpu_number);
@@ -72,10 +76,18 @@
 	IPI_CPU_CRASH_STOP,
 	IPI_TIMER,
 	IPI_IRQ_WORK,
-	IPI_WAKEUP
+	IPI_WAKEUP,
+	NR_IPI
 };
 
+static int ipi_irq_base __read_mostly;
+static int nr_ipi __read_mostly = NR_IPI;
+static struct irq_desc *ipi_desc[NR_IPI] __read_mostly;
+
+static void ipi_setup(int cpu);
+
 #ifdef CONFIG_HOTPLUG_CPU
+static void ipi_teardown(int cpu);
 static int op_cpu_kill(unsigned int cpu);
 #else
 static inline int op_cpu_kill(unsigned int cpu)
@@ -239,6 +251,8 @@
 	 */
 	notify_cpu_starting(cpu);
 
+	ipi_setup(cpu);
+
 	store_cpu_topology(cpu);
 	numa_add_cpu(cpu);
 
@@ -302,6 +316,7 @@
 	 * and we must not schedule until we're ready to give up the cpu.
 	 */
 	set_cpu_online(cpu, false);
+	ipi_teardown(cpu);
 
 	/*
 	 * OK - migrate IRQs away from this CPU
@@ -358,6 +373,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();
@@ -755,13 +773,6 @@
 	}
 }
 
-void (*__smp_cross_call)(const struct cpumask *, unsigned int);
-
-void __init set_smp_cross_call(void (*fn)(const struct cpumask *, unsigned int))
-{
-	__smp_cross_call = fn;
-}
-
 static const char *ipi_types[NR_IPI] __tracepoint_string = {
 #define S(x,s)	[x] = s
 	S(IPI_RESCHEDULE, "Rescheduling interrupts"),
@@ -773,35 +784,25 @@
 	S(IPI_WAKEUP, "CPU wake-up interrupts"),
 };
 
-static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
-{
-	trace_ipi_raise(target, ipi_types[ipinr]);
-	__smp_cross_call(target, ipinr);
-}
+static void smp_cross_call(const struct cpumask *target, unsigned int ipinr);
 
-void show_ipi_list(struct seq_file *p, int prec)
+unsigned long irq_err_count;
+
+int arch_show_interrupts(struct seq_file *p, int prec)
 {
 	unsigned int cpu, i;
 
 	for (i = 0; i < NR_IPI; i++) {
+		unsigned int irq = irq_desc_get_irq(ipi_desc[i]);
 		seq_printf(p, "%*s%u:%s", prec - 1, "IPI", i,
 			   prec >= 4 ? " " : "");
 		for_each_online_cpu(cpu)
-			seq_printf(p, "%10u ",
-				   __get_irq_stat(cpu, ipi_irqs[i]));
+			seq_printf(p, "%10u ", kstat_irqs_cpu(irq, cpu));
 		seq_printf(p, "      %s\n", ipi_types[i]);
 	}
-}
 
-u64 smp_irq_stat_cpu(unsigned int cpu)
-{
-	u64 sum = 0;
-	int i;
-
-	for (i = 0; i < NR_IPI; i++)
-		sum += __get_irq_stat(cpu, ipi_irqs[i]);
-
-	return sum;
+	seq_printf(p, "%*s: %10lu\n", prec, "Err", irq_err_count);
+	return 0;
 }
 
 void arch_send_call_function_ipi_mask(const struct cpumask *mask)
@@ -824,8 +825,7 @@
 #ifdef CONFIG_IRQ_WORK
 void arch_irq_work_raise(void)
 {
-	if (__smp_cross_call)
-		smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
+	smp_cross_call(cpumask_of(smp_processor_id()), IPI_IRQ_WORK);
 }
 #endif
 
@@ -875,15 +875,13 @@
 /*
  * Main handler for inter-processor interrupts
  */
-void handle_IPI(int ipinr, struct pt_regs *regs)
+static void do_handle_IPI(int ipinr)
 {
 	unsigned int cpu = smp_processor_id();
-	struct pt_regs *old_regs = set_irq_regs(regs);
+	struct pt_regs *regs = get_irq_regs();
 
-	if ((unsigned)ipinr < NR_IPI) {
+	if ((unsigned)ipinr < NR_IPI)
 		trace_ipi_entry_rcuidle(ipi_types[ipinr]);
-		__inc_irq_stat(cpu, ipi_irqs[ipinr]);
-	}
 
 	switch (ipinr) {
 	case IPI_RESCHEDULE:
@@ -891,20 +889,16 @@
 		break;
 
 	case IPI_CALL_FUNC:
-		irq_enter();
 		generic_smp_call_function_interrupt();
-		irq_exit();
 		break;
 
 	case IPI_CPU_STOP:
-		irq_enter();
+		trace_android_vh_ipi_stop_rcuidle(regs);
 		local_cpu_stop();
-		irq_exit();
 		break;
 
 	case IPI_CPU_CRASH_STOP:
 		if (IS_ENABLED(CONFIG_KEXEC_CORE)) {
-			irq_enter();
 			ipi_cpu_crash_stop(cpu, regs);
 
 			unreachable();
@@ -913,17 +907,13 @@
 
 #ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST
 	case IPI_TIMER:
-		irq_enter();
 		tick_receive_broadcast();
-		irq_exit();
 		break;
 #endif
 
 #ifdef CONFIG_IRQ_WORK
 	case IPI_IRQ_WORK:
-		irq_enter();
 		irq_work_run();
-		irq_exit();
 		break;
 #endif
 
@@ -942,7 +932,66 @@
 
 	if ((unsigned)ipinr < NR_IPI)
 		trace_ipi_exit_rcuidle(ipi_types[ipinr]);
-	set_irq_regs(old_regs);
+}
+
+static irqreturn_t ipi_handler(int irq, void *data)
+{
+	do_handle_IPI(irq - ipi_irq_base);
+	return IRQ_HANDLED;
+}
+
+static void smp_cross_call(const struct cpumask *target, unsigned int ipinr)
+{
+	trace_ipi_raise(target, ipi_types[ipinr]);
+	__ipi_send_mask(ipi_desc[ipinr], target);
+}
+
+static void ipi_setup(int cpu)
+{
+	int i;
+
+	if (WARN_ON_ONCE(!ipi_irq_base))
+		return;
+
+	for (i = 0; i < nr_ipi; i++)
+		enable_percpu_irq(ipi_irq_base + i, 0);
+}
+
+#ifdef CONFIG_HOTPLUG_CPU
+static void ipi_teardown(int cpu)
+{
+	int i;
+
+	if (WARN_ON_ONCE(!ipi_irq_base))
+		return;
+
+	for (i = 0; i < nr_ipi; i++)
+		disable_percpu_irq(ipi_irq_base + i);
+}
+#endif
+
+void __init set_smp_ipi_range(int ipi_base, int n)
+{
+	int i;
+
+	WARN_ON(n < NR_IPI);
+	nr_ipi = min(n, NR_IPI);
+
+	for (i = 0; i < nr_ipi; i++) {
+		int err;
+
+		err = request_percpu_irq(ipi_base + i, ipi_handler,
+					 "IPI", &cpu_number);
+		WARN_ON(err);
+
+		ipi_desc[i] = irq_to_desc(ipi_base + i);
+		irq_set_status_flags(ipi_base + i, IRQ_HIDDEN);
+	}
+
+	ipi_irq_base = ipi_base;
+
+	/* Setup the boot CPU immediately */
+	ipi_setup(smp_processor_id());
 }
 
 void smp_send_reschedule(int cpu)
diff --git a/arch/arm64/kernel/smp_spin_table.c b/arch/arm64/kernel/smp_spin_table.c
index c8a3fee..d6c8183 100644
--- a/arch/arm64/kernel/smp_spin_table.c
+++ b/arch/arm64/kernel/smp_spin_table.c
@@ -88,7 +88,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/vdso/Makefile b/arch/arm64/kernel/vdso/Makefile
index 3862cad..2097a44 100644
--- a/arch/arm64/kernel/vdso/Makefile
+++ b/arch/arm64/kernel/vdso/Makefile
@@ -25,8 +25,8 @@
 
 VDSO_LDFLAGS := -Bsymbolic
 
-CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os
-KBUILD_CFLAGS			+= $(DISABLE_LTO)
+CFLAGS_REMOVE_vgettimeofday.o = $(CC_FLAGS_FTRACE) -Os $(CC_FLAGS_SCS) \
+				$(CC_FLAGS_LTO)
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
 OBJECT_FILES_NON_STANDARD	:= y
diff --git a/arch/arm64/kernel/vdso/vgettimeofday.c b/arch/arm64/kernel/vdso/vgettimeofday.c
index 7476355..4236cf3 100644
--- a/arch/arm64/kernel/vdso/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso/vgettimeofday.c
@@ -5,8 +5,6 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
 
 int __kernel_clock_gettime(clockid_t clock,
 			   struct __kernel_timespec *ts)
diff --git a/arch/arm64/kernel/vdso32/Makefile b/arch/arm64/kernel/vdso32/Makefile
index 894791f..ea0b758 100644
--- a/arch/arm64/kernel/vdso32/Makefile
+++ b/arch/arm64/kernel/vdso32/Makefile
@@ -10,17 +10,25 @@
 
 # Same as cc-*option, but using CC_COMPAT instead of CC
 ifeq ($(CONFIG_CC_IS_CLANG), y)
+CC_COMPAT_CLANG_FLAGS := --target=$(notdir $(CROSS_COMPILE_COMPAT:%-=%))
+
 CC_COMPAT ?= $(CC)
+CC_COMPAT += $(CC_COMPAT_CLANG_FLAGS)
+
+ifeq ($(LLVM),1)
+LD_COMPAT ?= $(LD)
+else
+LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld
+endif
 else
 CC_COMPAT ?= $(CROSS_COMPILE_COMPAT)gcc
+LD_COMPAT ?= $(CROSS_COMPILE_COMPAT)ld
 endif
 
 cc32-option = $(call try-run,\
         $(CC_COMPAT) $(1) -c -x c /dev/null -o "$$TMP",$(1),$(2))
 cc32-disable-warning = $(call try-run,\
 	$(CC_COMPAT) -W$(strip $(1)) -c -x c /dev/null -o "$$TMP",-Wno-$(strip $(1)))
-cc32-ldoption = $(call try-run,\
-        $(CC_COMPAT) $(1) -nostdlib -x c /dev/null -o "$$TMP",$(1),$(2))
 cc32-as-instr = $(call try-run,\
 	printf "%b\n" "$(1)" | $(CC_COMPAT) $(VDSO_AFLAGS) -c -x assembler -o "$$TMP" -,$(2),$(3))
 
@@ -104,14 +112,10 @@
 VDSO_CFLAGS += $(dmbinstr)
 VDSO_AFLAGS += $(dmbinstr)
 
-VDSO_LDFLAGS := $(VDSO_CPPFLAGS)
 # From arm vDSO Makefile
-VDSO_LDFLAGS += -Wl,-Bsymbolic -Wl,--no-undefined -Wl,-soname=linux-vdso.so.1
-VDSO_LDFLAGS += -Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
-VDSO_LDFLAGS += -nostdlib -shared -mfloat-abi=soft
-VDSO_LDFLAGS += -Wl,--hash-style=sysv
-VDSO_LDFLAGS += -Wl,--build-id
-VDSO_LDFLAGS += $(call cc32-ldoption,-fuse-ld=bfd)
+VDSO_LDFLAGS += -Bsymbolic --no-undefined -soname=linux-vdso.so.1
+VDSO_LDFLAGS += -z max-page-size=4096 -z common-page-size=4096
+VDSO_LDFLAGS += -nostdlib -shared --hash-style=sysv --build-id
 
 
 # Borrow vdsomunge.c from the arm vDSO
@@ -172,8 +176,8 @@
       cmd_vdsold_and_vdso_check = $(cmd_vdsold); $(cmd_vdso_check)
 
 quiet_cmd_vdsold = LD32    $@
-      cmd_vdsold = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_LDFLAGS) \
-                   -Wl,-T $(filter %.lds,$^) $(filter %.o,$^) -o $@
+      cmd_vdsold = $(LD_COMPAT) $(VDSO_LDFLAGS) \
+                   -T $(filter %.lds,$^) $(filter %.o,$^) -o $@
 quiet_cmd_vdsocc = CC32    $@
       cmd_vdsocc = $(CC_COMPAT) -Wp,-MD,$(depfile) $(VDSO_CFLAGS) -c -o $@ $<
 quiet_cmd_vdsocc_gettimeofday = CC32    $@
diff --git a/arch/arm64/kernel/vdso32/vgettimeofday.c b/arch/arm64/kernel/vdso32/vgettimeofday.c
index 54fc1c2..5acff29 100644
--- a/arch/arm64/kernel/vdso32/vgettimeofday.c
+++ b/arch/arm64/kernel/vdso32/vgettimeofday.c
@@ -5,26 +5,16 @@
  * Copyright (C) 2018 ARM Limited
  *
  */
-#include <linux/time.h>
-#include <linux/types.h>
 
 int __vdso_clock_gettime(clockid_t clock,
 			 struct old_timespec32 *ts)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)ts >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_gettime32(clock, ts);
 }
 
 int __vdso_clock_gettime64(clockid_t clock,
 			   struct __kernel_timespec *ts)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)ts >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_gettime(clock, ts);
 }
 
@@ -37,10 +27,6 @@
 int __vdso_clock_getres(clockid_t clock_id,
 			struct old_timespec32 *res)
 {
-	/* The checks below are required for ABI consistency with arm */
-	if ((u32)res >= TASK_SIZE_32)
-		return -EFAULT;
-
 	return __cvdso_clock_getres_time32(clock_id, res);
 }
 
diff --git a/arch/arm64/kernel/vmlinux.lds.S b/arch/arm64/kernel/vmlinux.lds.S
index 1f82cf6..ee2b9d2 100644
--- a/arch/arm64/kernel/vmlinux.lds.S
+++ b/arch/arm64/kernel/vmlinux.lds.S
@@ -181,6 +181,9 @@
 		*(.altinstructions)
 		__alt_instructions_end = .;
 	}
+	.altinstr_replacement : {
+		*(.altinstr_replacement)
+	}
 
 	. = ALIGN(PAGE_SIZE);
 	__inittext_end = .;
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 3ac1a64..89f8c45 100644
--- a/arch/arm64/kvm/Makefile
+++ b/arch/arm64/kvm/Makefile
@@ -4,6 +4,7 @@
 #
 
 ccflags-y += -I $(srctree)/$(src) -I $(srctree)/virt/kvm/arm/vgic
+CFLAGS_REMOVE_debug.o += $(CC_FLAGS_CFI)
 
 KVM=../../../virt/kvm
 
diff --git a/arch/arm64/kvm/hyp/Makefile b/arch/arm64/kvm/hyp/Makefile
index ea710f6..67aa18a 100644
--- a/arch/arm64/kvm/hyp/Makefile
+++ b/arch/arm64/kvm/hyp/Makefile
@@ -28,3 +28,6 @@
 KASAN_SANITIZE	:= n
 UBSAN_SANITIZE	:= n
 KCOV_INSTRUMENT	:= n
+
+# remove SCS and CFI flags from all objects in this directory
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_SCS) $(CC_FLAGS_CFI), $(KBUILD_CFLAGS))
diff --git a/arch/arm64/kvm/hyp/entry.S b/arch/arm64/kvm/hyp/entry.S
index dc3d7bc..cbe431f 100644
--- a/arch/arm64/kvm/hyp/entry.S
+++ b/arch/arm64/kvm/hyp/entry.S
@@ -22,7 +22,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)]
@@ -32,6 +37,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)]
@@ -48,7 +55,7 @@
 	// 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
@@ -67,31 +74,28 @@
 	ret
 
 1:
-	add	x18, x0, #VCPU_CONTEXT
+	add	x29, x0, #VCPU_CONTEXT
 
 	// Macro ptrauth_switch_to_guest format:
 	// 	ptrauth_switch_to_guest(guest cxt, tmp1, tmp2, tmp3)
 	// The below macro to restore guest keys is not implemented in C code
 	// as it may cause Pointer Authentication key signing mismatch errors
 	// when this feature is enabled for kernel code.
-	ptrauth_switch_to_guest x18, x0, x1, x2
+	ptrauth_switch_to_guest x29, x0, x1, x2
 
 	// 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
@@ -114,7 +118,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)]
@@ -123,9 +127,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/kvm/hyp/switch.c b/arch/arm64/kvm/hyp/switch.c
index 14607fa..422f64f 100644
--- a/arch/arm64/kvm/hyp/switch.c
+++ b/arch/arm64/kvm/hyp/switch.c
@@ -102,6 +102,18 @@
 	val = read_sysreg(cpacr_el1);
 	val |= CPACR_EL1_TTA;
 	val &= ~CPACR_EL1_ZEN;
+
+	/*
+	 * With VHE (HCR.E2H == 1), accesses to CPACR_EL1 are routed to
+	 * CPTR_EL2. In general, CPACR_EL1 has the same layout as CPTR_EL2,
+	 * except for some missing controls, such as TAM.
+	 * In this case, CPTR_EL2.TAM has the same position with or without
+	 * VHE (HCR.E2H == 1) which allows us to use here the CPTR_EL2.TAM
+	 * shift value for trapping the AMU accesses.
+	 */
+
+	val |= CPTR_EL2_TAM;
+
 	if (update_fp_enabled(vcpu)) {
 		if (vcpu_has_sve(vcpu))
 			val |= CPACR_EL1_ZEN;
@@ -123,7 +135,7 @@
 	__activate_traps_common(vcpu);
 
 	val = CPTR_EL2_DEFAULT;
-	val |= CPTR_EL2_TTA | CPTR_EL2_TZ;
+	val |= CPTR_EL2_TTA | CPTR_EL2_TZ | CPTR_EL2_TAM;
 	if (!update_fp_enabled(vcpu)) {
 		val |= CPTR_EL2_TFP;
 		__activate_traps_fpsimd32(vcpu);
diff --git a/arch/arm64/kvm/sys_regs.c b/arch/arm64/kvm/sys_regs.c
index da649e90..fd06587 100644
--- a/arch/arm64/kvm/sys_regs.c
+++ b/arch/arm64/kvm/sys_regs.c
@@ -1007,6 +1007,20 @@
 	{ SYS_DESC(SYS_PMEVTYPERn_EL0(n)),					\
 	  access_pmu_evtyper, reset_unknown, (PMEVTYPER0_EL0 + n), }
 
+static bool access_amu(struct kvm_vcpu *vcpu, struct sys_reg_params *p,
+			     const struct sys_reg_desc *r)
+{
+	kvm_inject_undefined(vcpu);
+
+	return false;
+}
+
+/* Macro to expand the AMU counter and type registers*/
+#define AMU_AMEVCNTR0_EL0(n) { SYS_DESC(SYS_AMEVCNTR0_EL0(n)), access_amu }
+#define AMU_AMEVTYPE0_EL0(n) { SYS_DESC(SYS_AMEVTYPE0_EL0(n)), access_amu }
+#define AMU_AMEVCNTR1_EL0(n) { SYS_DESC(SYS_AMEVCNTR1_EL0(n)), access_amu }
+#define AMU_AMEVTYPE1_EL0(n) { SYS_DESC(SYS_AMEVTYPE1_EL0(n)), access_amu }
+
 static bool trap_ptrauth(struct kvm_vcpu *vcpu,
 			 struct sys_reg_params *p,
 			 const struct sys_reg_desc *rd)
@@ -1082,8 +1096,10 @@
 			 (u32)r->CRn, (u32)r->CRm, (u32)r->Op2);
 	u64 val = raz ? 0 : read_sanitised_ftr_reg(id);
 
-	if (id == SYS_ID_AA64PFR0_EL1 && !vcpu_has_sve(vcpu)) {
-		val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT);
+	if (id == SYS_ID_AA64PFR0_EL1) {
+		if (!vcpu_has_sve(vcpu))
+			val &= ~(0xfUL << ID_AA64PFR0_SVE_SHIFT);
+		val &= ~(0xfUL << ID_AA64PFR0_AMU_SHIFT);
 	} else if (id == SYS_ID_AA64ISAR1_EL1 && !vcpu_has_ptrauth(vcpu)) {
 		val &= ~((0xfUL << ID_AA64ISAR1_APA_SHIFT) |
 			 (0xfUL << ID_AA64ISAR1_API_SHIFT) |
@@ -1559,6 +1575,79 @@
 	{ SYS_DESC(SYS_TPIDR_EL0), NULL, reset_unknown, TPIDR_EL0 },
 	{ SYS_DESC(SYS_TPIDRRO_EL0), NULL, reset_unknown, TPIDRRO_EL0 },
 
+	{ SYS_DESC(SYS_AMCR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCFGR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCGCR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMUSERENR_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENCLR0_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENSET0_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENCLR1_EL0), access_amu },
+	{ SYS_DESC(SYS_AMCNTENSET1_EL0), access_amu },
+	AMU_AMEVCNTR0_EL0(0),
+	AMU_AMEVCNTR0_EL0(1),
+	AMU_AMEVCNTR0_EL0(2),
+	AMU_AMEVCNTR0_EL0(3),
+	AMU_AMEVCNTR0_EL0(4),
+	AMU_AMEVCNTR0_EL0(5),
+	AMU_AMEVCNTR0_EL0(6),
+	AMU_AMEVCNTR0_EL0(7),
+	AMU_AMEVCNTR0_EL0(8),
+	AMU_AMEVCNTR0_EL0(9),
+	AMU_AMEVCNTR0_EL0(10),
+	AMU_AMEVCNTR0_EL0(11),
+	AMU_AMEVCNTR0_EL0(12),
+	AMU_AMEVCNTR0_EL0(13),
+	AMU_AMEVCNTR0_EL0(14),
+	AMU_AMEVCNTR0_EL0(15),
+	AMU_AMEVTYPE0_EL0(0),
+	AMU_AMEVTYPE0_EL0(1),
+	AMU_AMEVTYPE0_EL0(2),
+	AMU_AMEVTYPE0_EL0(3),
+	AMU_AMEVTYPE0_EL0(4),
+	AMU_AMEVTYPE0_EL0(5),
+	AMU_AMEVTYPE0_EL0(6),
+	AMU_AMEVTYPE0_EL0(7),
+	AMU_AMEVTYPE0_EL0(8),
+	AMU_AMEVTYPE0_EL0(9),
+	AMU_AMEVTYPE0_EL0(10),
+	AMU_AMEVTYPE0_EL0(11),
+	AMU_AMEVTYPE0_EL0(12),
+	AMU_AMEVTYPE0_EL0(13),
+	AMU_AMEVTYPE0_EL0(14),
+	AMU_AMEVTYPE0_EL0(15),
+	AMU_AMEVCNTR1_EL0(0),
+	AMU_AMEVCNTR1_EL0(1),
+	AMU_AMEVCNTR1_EL0(2),
+	AMU_AMEVCNTR1_EL0(3),
+	AMU_AMEVCNTR1_EL0(4),
+	AMU_AMEVCNTR1_EL0(5),
+	AMU_AMEVCNTR1_EL0(6),
+	AMU_AMEVCNTR1_EL0(7),
+	AMU_AMEVCNTR1_EL0(8),
+	AMU_AMEVCNTR1_EL0(9),
+	AMU_AMEVCNTR1_EL0(10),
+	AMU_AMEVCNTR1_EL0(11),
+	AMU_AMEVCNTR1_EL0(12),
+	AMU_AMEVCNTR1_EL0(13),
+	AMU_AMEVCNTR1_EL0(14),
+	AMU_AMEVCNTR1_EL0(15),
+	AMU_AMEVTYPE1_EL0(0),
+	AMU_AMEVTYPE1_EL0(1),
+	AMU_AMEVTYPE1_EL0(2),
+	AMU_AMEVTYPE1_EL0(3),
+	AMU_AMEVTYPE1_EL0(4),
+	AMU_AMEVTYPE1_EL0(5),
+	AMU_AMEVTYPE1_EL0(6),
+	AMU_AMEVTYPE1_EL0(7),
+	AMU_AMEVTYPE1_EL0(8),
+	AMU_AMEVTYPE1_EL0(9),
+	AMU_AMEVTYPE1_EL0(10),
+	AMU_AMEVTYPE1_EL0(11),
+	AMU_AMEVTYPE1_EL0(12),
+	AMU_AMEVTYPE1_EL0(13),
+	AMU_AMEVTYPE1_EL0(14),
+	AMU_AMEVTYPE1_EL0(15),
+
 	{ SYS_DESC(SYS_CNTP_TVAL_EL0), access_arch_timer },
 	{ SYS_DESC(SYS_CNTP_CTL_EL0), access_arch_timer },
 	{ SYS_DESC(SYS_CNTP_CVAL_EL0), access_arch_timer },
diff --git a/arch/arm64/lib/copy_page.S b/arch/arm64/lib/copy_page.S
index e125a84..e7a79396 100644
--- a/arch/arm64/lib/copy_page.S
+++ b/arch/arm64/lib/copy_page.S
@@ -34,45 +34,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
 SYM_FUNC_END(copy_page)
diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
index 9239416..7c1fb46 100644
--- a/arch/arm64/mm/dma-mapping.c
+++ b/arch/arm64/mm/dma-mapping.c
@@ -57,3 +57,4 @@
 		dev->dma_ops = &xen_swiotlb_dma_ops;
 #endif
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c
index 2a7339a..e2dbbfa 100644
--- a/arch/arm64/mm/fault.c
+++ b/arch/arm64/mm/fault.c
@@ -10,6 +10,7 @@
 #include <linux/acpi.h>
 #include <linux/bitfield.h>
 #include <linux/extable.h>
+#include <linux/kfence.h>
 #include <linux/signal.h>
 #include <linux/mm.h>
 #include <linux/hardirq.h>
@@ -323,6 +324,9 @@
 	} else if (addr < PAGE_SIZE) {
 		msg = "NULL pointer dereference";
 	} else {
+		if (kfence_handle_page_fault(addr, esr & ESR_ELx_WNR, regs))
+			return;
+
 		msg = "paging request";
 	}
 
@@ -455,7 +459,7 @@
 	struct mm_struct *mm = current->mm;
 	vm_fault_t fault, major = 0;
 	unsigned long vm_flags = VM_READ | VM_WRITE | VM_EXEC;
-	unsigned int mm_flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int mm_flags = FAULT_FLAG_DEFAULT;
 
 	if (kprobe_page_fault(regs, esr))
 		return 0;
@@ -522,25 +526,15 @@
 	fault = __do_page_fault(mm, addr, mm_flags, vm_flags);
 	major |= fault & VM_FAULT_MAJOR;
 
-	if (fault & VM_FAULT_RETRY) {
-		/*
-		 * If we need to retry but a fatal signal is pending,
-		 * handle the signal first. We do not need to release
-		 * the mmap_sem because it would already be released
-		 * in __lock_page_or_retry in mm/filemap.c.
-		 */
-		if (fatal_signal_pending(current)) {
-			if (!user_mode(regs))
-				goto no_context;
-			return 0;
-		}
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			goto no_context;
+		return 0;
+	}
 
-		/*
-		 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk of
-		 * starvation.
-		 */
+	if (fault & VM_FAULT_RETRY) {
 		if (mm_flags & FAULT_FLAG_ALLOW_RETRY) {
-			mm_flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			mm_flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
index 0be3355..6ea1412 100644
--- a/arch/arm64/mm/hugetlbpage.c
+++ b/arch/arm64/mm/hugetlbpage.c
@@ -213,7 +213,7 @@
 		set_pte(ptep, pte);
 }
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 		      unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgdp;
@@ -243,9 +243,8 @@
 		 */
 		ptep = pte_alloc_map(mm, pmdp, addr);
 	} else if (sz == PMD_SIZE) {
-		if (IS_ENABLED(CONFIG_ARCH_WANT_HUGE_PMD_SHARE) &&
-		    pud_none(READ_ONCE(*pudp)))
-			ptep = huge_pmd_share(mm, addr, pudp);
+		if (want_pmd_share(vma, addr) && pud_none(READ_ONCE(*pudp)))
+			ptep = huge_pmd_share(mm, vma, addr, pudp);
 		else
 			ptep = (pte_t *)pmd_alloc(mm, pudp, addr);
 	} else if (sz == (CONT_PMD_SIZE)) {
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index 99bc028..0e95501 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -463,7 +463,8 @@
 	struct memblock_region *reg;
 	int flags = 0;
 
-	if (rodata_full || debug_pagealloc_enabled())
+	if (rodata_full || debug_pagealloc_enabled() ||
+	    IS_ENABLED(CONFIG_KFENCE))
 		flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
 
 	/*
@@ -1055,7 +1056,12 @@
 {
 	int flags = 0;
 
-	if (rodata_full || debug_pagealloc_enabled())
+	/*
+	 * KFENCE requires linear map to be mapped at page granularity, so that
+	 * it is possible to protect/unprotect single pages in the KFENCE pool.
+	 */
+	if (rodata_full || debug_pagealloc_enabled() ||
+	    IS_ENABLED(CONFIG_KFENCE))
 		flags = NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS;
 
 	__create_pgd_mapping(swapper_pg_dir, start, __phys_to_virt(start),
diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S
index 13e78a5..57452ff 100644
--- a/arch/arm64/mm/proc.S
+++ b/arch/arm64/mm/proc.S
@@ -49,6 +49,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
@@ -73,6 +75,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)
 
@@ -89,6 +96,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
@@ -124,6 +138,7 @@
 	ubfx	x11, x11, #1, #1
 	msr	oslar_el1, x11
 	reset_pmuserenr_el0 x0			// Disable PMU access from EL0
+	reset_amuserenr_el0 x0			// Disable AMU access from EL0
 
 alternative_if ARM64_HAS_RAS_EXTN
 	msr_s	SYS_DISR_EL1, xzr
@@ -250,15 +265,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. */
@@ -281,9 +296,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
 
 	/*
@@ -353,34 +368,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 */
-	offset_ttbr1 swapper_ttb, x18
-	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
@@ -393,6 +383,32 @@
 	.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 */
+	offset_ttbr1 swapper_ttb, x16
+	msr	ttbr1_el1, swapper_ttb
+	isb
+	ret
+
+	.unreq	swapper_ttb
+	.unreq	flag_ptr
 ENDPROC(idmap_kpti_install_ng_mappings)
 	.popsection
 #endif
@@ -415,6 +431,8 @@
 	isb					// Unmask debug exceptions now,
 	enable_dbg				// since this is per-cpu
 	reset_pmuserenr_el0 x0			// Disable PMU access from EL0
+	reset_amuserenr_el0 x0			// Disable AMU access from EL0
+
 	/*
 	 * Memory region attributes for LPAE:
 	 *
diff --git a/arch/arm64/net/bpf_jit_comp.c b/arch/arm64/net/bpf_jit_comp.c
index a343677..2342ad9 100644
--- a/arch/arm64/net/bpf_jit_comp.c
+++ b/arch/arm64/net/bpf_jit_comp.c
@@ -1013,3 +1013,14 @@
 {
 	return vfree(addr);
 }
+
+#ifdef CONFIG_CFI_CLANG
+bool arch_bpf_jit_check_func(const struct bpf_prog *prog)
+{
+	const uintptr_t func = (const uintptr_t)prog->bpf_func;
+
+	/* bpf_func must be correctly aligned and within the BPF JIT region */
+	return (func >= BPF_JIT_REGION_START && func < BPF_JIT_REGION_END &&
+		IS_ALIGNED(func, sizeof(u32)));
+}
+#endif
diff --git a/arch/csky/include/asm/seccomp.h b/arch/csky/include/asm/seccomp.h
new file mode 100644
index 0000000..d33e758
--- /dev/null
+++ b/arch/csky/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_CSKY
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"csky"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/hexagon/mm/vm_fault.c b/arch/hexagon/mm/vm_fault.c
index b3bc716..72334b2 100644
--- a/arch/hexagon/mm/vm_fault.c
+++ b/arch/hexagon/mm/vm_fault.c
@@ -41,7 +41,7 @@
 	int si_code = SEGV_MAPERR;
 	vm_fault_t fault;
 	const struct exception_table_entry *fixup;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	/*
 	 * If we're in an interrupt or have no user context,
@@ -91,7 +91,7 @@
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	/* The most common case -- we are done. */
@@ -102,7 +102,6 @@
 			else
 				current->min_flt++;
 			if (fault & VM_FAULT_RETRY) {
-				flags &= ~FAULT_FLAG_ALLOW_RETRY;
 				flags |= FAULT_FLAG_TRIED;
 				goto retry;
 			}
diff --git a/arch/ia64/kernel/syscalls/syscall.tbl b/arch/ia64/kernel/syscalls/syscall.tbl
index 36d5faf..0a5a32a 100644
--- a/arch/ia64/kernel/syscalls/syscall.tbl
+++ b/arch/ia64/kernel/syscalls/syscall.tbl
@@ -356,3 +356,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c
index c2f299f..30d0c1f 100644
--- a/arch/ia64/mm/fault.c
+++ b/arch/ia64/mm/fault.c
@@ -65,7 +65,7 @@
 	struct mm_struct *mm = current->mm;
 	unsigned long mask;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	mask = ((((isr >> IA64_ISR_X_BIT) & 1UL) << VM_EXEC_BIT)
 		| (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT));
@@ -141,7 +141,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -167,7 +167,6 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
index d16e419..7529ff1 100644
--- a/arch/ia64/mm/hugetlbpage.c
+++ b/arch/ia64/mm/hugetlbpage.c
@@ -26,7 +26,8 @@
 EXPORT_SYMBOL(hpage_shift);
 
 pte_t *
-huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
+huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
+	       unsigned long addr, unsigned long sz)
 {
 	unsigned long taddr = htlbpage_to_page(addr);
 	pgd_t *pgd;
diff --git a/arch/m68k/kernel/syscalls/syscall.tbl b/arch/m68k/kernel/syscalls/syscall.tbl
index a88a285..bf4d2b4 100644
--- a/arch/m68k/kernel/syscalls/syscall.tbl
+++ b/arch/m68k/kernel/syscalls/syscall.tbl
@@ -435,3 +435,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c
index e9b1d75..f7afb98 100644
--- a/arch/m68k/mm/fault.c
+++ b/arch/m68k/mm/fault.c
@@ -71,7 +71,7 @@
 	struct mm_struct *mm = current->mm;
 	struct vm_area_struct * vma;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	pr_debug("do page fault:\nregs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n",
 		regs->sr, regs->pc, address, error_code, mm ? mm->pgd : NULL);
@@ -138,7 +138,7 @@
 	fault = handle_mm_fault(vma, address, flags);
 	pr_debug("handle_mm_fault returns %x\n", fault);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return 0;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -162,9 +162,6 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/microblaze/kernel/syscalls/syscall.tbl b/arch/microblaze/kernel/syscalls/syscall.tbl
index 09b0cd7..7bc400d 100644
--- a/arch/microblaze/kernel/syscalls/syscall.tbl
+++ b/arch/microblaze/kernel/syscalls/syscall.tbl
@@ -441,3 +441,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c
index e6a810b..3248141 100644
--- a/arch/microblaze/mm/fault.c
+++ b/arch/microblaze/mm/fault.c
@@ -91,7 +91,7 @@
 	int code = SEGV_MAPERR;
 	int is_write = error_code & ESR_S;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	regs->ear = address;
 	regs->esr = error_code;
@@ -217,7 +217,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -236,7 +236,6 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 9ff2c70..a0726f9 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -334,7 +334,7 @@
 # See arch/mips/Kbuild for content of core part of the kernel
 core-y += arch/mips/
 
-drivers-$(CONFIG_MIPS_CRC_SUPPORT) += arch/mips/crypto/
+drivers-y			+= arch/mips/crypto/
 drivers-$(CONFIG_OPROFILE)	+= arch/mips/oprofile/
 
 # suspend and hibernation support
diff --git a/arch/mips/crypto/.gitignore b/arch/mips/crypto/.gitignore
new file mode 100644
index 0000000..0d47d4f
--- /dev/null
+++ b/arch/mips/crypto/.gitignore
@@ -0,0 +1,2 @@
+# SPDX-License-Identifier: GPL-2.0-only
+poly1305-core.S
diff --git a/arch/mips/crypto/Makefile b/arch/mips/crypto/Makefile
index e07aca5..5e4105c 100644
--- a/arch/mips/crypto/Makefile
+++ b/arch/mips/crypto/Makefile
@@ -4,3 +4,21 @@
 #
 
 obj-$(CONFIG_CRYPTO_CRC32_MIPS) += crc32-mips.o
+
+obj-$(CONFIG_CRYPTO_CHACHA_MIPS) += chacha-mips.o
+chacha-mips-y := chacha-core.o chacha-glue.o
+AFLAGS_chacha-core.o += -O2 # needed to fill branch delay slots
+
+obj-$(CONFIG_CRYPTO_POLY1305_MIPS) += poly1305-mips.o
+poly1305-mips-y := poly1305-core.o poly1305-glue.o
+
+perlasm-flavour-$(CONFIG_32BIT) := o32
+perlasm-flavour-$(CONFIG_64BIT) := 64
+
+quiet_cmd_perlasm = PERLASM $@
+      cmd_perlasm = $(PERL) $(<) $(perlasm-flavour-y) $(@)
+
+$(obj)/poly1305-core.S: $(src)/poly1305-mips.pl FORCE
+	$(call if_changed,perlasm)
+
+targets += poly1305-core.S
diff --git a/arch/mips/crypto/chacha-core.S b/arch/mips/crypto/chacha-core.S
new file mode 100644
index 0000000..5755f69c
--- /dev/null
+++ b/arch/mips/crypto/chacha-core.S
@@ -0,0 +1,497 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2016-2018 René van Dorst <opensource@vdorst.com>. All Rights Reserved.
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#define MASK_U32		0x3c
+#define CHACHA20_BLOCK_SIZE	64
+#define STACK_SIZE		32
+
+#define X0	$t0
+#define X1	$t1
+#define X2	$t2
+#define X3	$t3
+#define X4	$t4
+#define X5	$t5
+#define X6	$t6
+#define X7	$t7
+#define X8	$t8
+#define X9	$t9
+#define X10	$v1
+#define X11	$s6
+#define X12	$s5
+#define X13	$s4
+#define X14	$s3
+#define X15	$s2
+/* Use regs which are overwritten on exit for Tx so we don't leak clear data. */
+#define T0	$s1
+#define T1	$s0
+#define T(n)	T ## n
+#define X(n)	X ## n
+
+/* Input arguments */
+#define STATE		$a0
+#define OUT		$a1
+#define IN		$a2
+#define BYTES		$a3
+
+/* Output argument */
+/* NONCE[0] is kept in a register and not in memory.
+ * We don't want to touch original value in memory.
+ * Must be incremented every loop iteration.
+ */
+#define NONCE_0		$v0
+
+/* SAVED_X and SAVED_CA are set in the jump table.
+ * Use regs which are overwritten on exit else we don't leak clear data.
+ * They are used to handling the last bytes which are not multiple of 4.
+ */
+#define SAVED_X		X15
+#define SAVED_CA	$s7
+
+#define IS_UNALIGNED	$s7
+
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
+#define MSB 0
+#define LSB 3
+#define ROTx rotl
+#define ROTR(n) rotr n, 24
+#define	CPU_TO_LE32(n) \
+	wsbh	n; \
+	rotr	n, 16;
+#else
+#define MSB 3
+#define LSB 0
+#define ROTx rotr
+#define CPU_TO_LE32(n)
+#define ROTR(n)
+#endif
+
+#define FOR_EACH_WORD(x) \
+	x( 0); \
+	x( 1); \
+	x( 2); \
+	x( 3); \
+	x( 4); \
+	x( 5); \
+	x( 6); \
+	x( 7); \
+	x( 8); \
+	x( 9); \
+	x(10); \
+	x(11); \
+	x(12); \
+	x(13); \
+	x(14); \
+	x(15);
+
+#define FOR_EACH_WORD_REV(x) \
+	x(15); \
+	x(14); \
+	x(13); \
+	x(12); \
+	x(11); \
+	x(10); \
+	x( 9); \
+	x( 8); \
+	x( 7); \
+	x( 6); \
+	x( 5); \
+	x( 4); \
+	x( 3); \
+	x( 2); \
+	x( 1); \
+	x( 0);
+
+#define PLUS_ONE_0	 1
+#define PLUS_ONE_1	 2
+#define PLUS_ONE_2	 3
+#define PLUS_ONE_3	 4
+#define PLUS_ONE_4	 5
+#define PLUS_ONE_5	 6
+#define PLUS_ONE_6	 7
+#define PLUS_ONE_7	 8
+#define PLUS_ONE_8	 9
+#define PLUS_ONE_9	10
+#define PLUS_ONE_10	11
+#define PLUS_ONE_11	12
+#define PLUS_ONE_12	13
+#define PLUS_ONE_13	14
+#define PLUS_ONE_14	15
+#define PLUS_ONE_15	16
+#define PLUS_ONE(x)	PLUS_ONE_ ## x
+#define _CONCAT3(a,b,c)	a ## b ## c
+#define CONCAT3(a,b,c)	_CONCAT3(a,b,c)
+
+#define STORE_UNALIGNED(x) \
+CONCAT3(.Lchacha_mips_xor_unaligned_, PLUS_ONE(x), _b: ;) \
+	.if (x != 12); \
+		lw	T0, (x*4)(STATE); \
+	.endif; \
+	lwl	T1, (x*4)+MSB ## (IN); \
+	lwr	T1, (x*4)+LSB ## (IN); \
+	.if (x == 12); \
+		addu	X ## x, NONCE_0; \
+	.else; \
+		addu	X ## x, T0; \
+	.endif; \
+	CPU_TO_LE32(X ## x); \
+	xor	X ## x, T1; \
+	swl	X ## x, (x*4)+MSB ## (OUT); \
+	swr	X ## x, (x*4)+LSB ## (OUT);
+
+#define STORE_ALIGNED(x) \
+CONCAT3(.Lchacha_mips_xor_aligned_, PLUS_ONE(x), _b: ;) \
+	.if (x != 12); \
+		lw	T0, (x*4)(STATE); \
+	.endif; \
+	lw	T1, (x*4) ## (IN); \
+	.if (x == 12); \
+		addu	X ## x, NONCE_0; \
+	.else; \
+		addu	X ## x, T0; \
+	.endif; \
+	CPU_TO_LE32(X ## x); \
+	xor	X ## x, T1; \
+	sw	X ## x, (x*4) ## (OUT);
+
+/* Jump table macro.
+ * Used for setup and handling the last bytes, which are not multiple of 4.
+ * X15 is free to store Xn
+ * Every jumptable entry must be equal in size.
+ */
+#define JMPTBL_ALIGNED(x) \
+.Lchacha_mips_jmptbl_aligned_ ## x: ; \
+	.set	noreorder; \
+	b	.Lchacha_mips_xor_aligned_ ## x ## _b; \
+	.if (x == 12); \
+		addu	SAVED_X, X ## x, NONCE_0; \
+	.else; \
+		addu	SAVED_X, X ## x, SAVED_CA; \
+	.endif; \
+	.set	reorder
+
+#define JMPTBL_UNALIGNED(x) \
+.Lchacha_mips_jmptbl_unaligned_ ## x: ; \
+	.set	noreorder; \
+	b	.Lchacha_mips_xor_unaligned_ ## x ## _b; \
+	.if (x == 12); \
+		addu	SAVED_X, X ## x, NONCE_0; \
+	.else; \
+		addu	SAVED_X, X ## x, SAVED_CA; \
+	.endif; \
+	.set	reorder
+
+#define AXR(A, B, C, D,  K, L, M, N,  V, W, Y, Z,  S) \
+	addu	X(A), X(K); \
+	addu	X(B), X(L); \
+	addu	X(C), X(M); \
+	addu	X(D), X(N); \
+	xor	X(V), X(A); \
+	xor	X(W), X(B); \
+	xor	X(Y), X(C); \
+	xor	X(Z), X(D); \
+	rotl	X(V), S;    \
+	rotl	X(W), S;    \
+	rotl	X(Y), S;    \
+	rotl	X(Z), S;
+
+.text
+.set	reorder
+.set	noat
+.globl	chacha_crypt_arch
+.ent	chacha_crypt_arch
+chacha_crypt_arch:
+	.frame	$sp, STACK_SIZE, $ra
+
+	/* Load number of rounds */
+	lw	$at, 16($sp)
+
+	addiu	$sp, -STACK_SIZE
+
+	/* Return bytes = 0. */
+	beqz	BYTES, .Lchacha_mips_end
+
+	lw	NONCE_0, 48(STATE)
+
+	/* Save s0-s7 */
+	sw	$s0,  0($sp)
+	sw	$s1,  4($sp)
+	sw	$s2,  8($sp)
+	sw	$s3, 12($sp)
+	sw	$s4, 16($sp)
+	sw	$s5, 20($sp)
+	sw	$s6, 24($sp)
+	sw	$s7, 28($sp)
+
+	/* Test IN or OUT is unaligned.
+	 * IS_UNALIGNED = ( IN | OUT ) & 0x00000003
+	 */
+	or	IS_UNALIGNED, IN, OUT
+	andi	IS_UNALIGNED, 0x3
+
+	b	.Lchacha_rounds_start
+
+.align 4
+.Loop_chacha_rounds:
+	addiu	IN,  CHACHA20_BLOCK_SIZE
+	addiu	OUT, CHACHA20_BLOCK_SIZE
+	addiu	NONCE_0, 1
+
+.Lchacha_rounds_start:
+	lw	X0,  0(STATE)
+	lw	X1,  4(STATE)
+	lw	X2,  8(STATE)
+	lw	X3,  12(STATE)
+
+	lw	X4,  16(STATE)
+	lw	X5,  20(STATE)
+	lw	X6,  24(STATE)
+	lw	X7,  28(STATE)
+	lw	X8,  32(STATE)
+	lw	X9,  36(STATE)
+	lw	X10, 40(STATE)
+	lw	X11, 44(STATE)
+
+	move	X12, NONCE_0
+	lw	X13, 52(STATE)
+	lw	X14, 56(STATE)
+	lw	X15, 60(STATE)
+
+.Loop_chacha_xor_rounds:
+	addiu	$at, -2
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15, 16);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7, 12);
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15,  8);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7,  7);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14, 16);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4, 12);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14,  8);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4,  7);
+	bnez	$at, .Loop_chacha_xor_rounds
+
+	addiu	BYTES, -(CHACHA20_BLOCK_SIZE)
+
+	/* Is data src/dst unaligned? Jump */
+	bnez	IS_UNALIGNED, .Loop_chacha_unaligned
+
+	/* Set number rounds here to fill delayslot. */
+	lw	$at, (STACK_SIZE+16)($sp)
+
+	/* BYTES < 0, it has no full block. */
+	bltz	BYTES, .Lchacha_mips_no_full_block_aligned
+
+	FOR_EACH_WORD_REV(STORE_ALIGNED)
+
+	/* BYTES > 0? Loop again. */
+	bgtz	BYTES, .Loop_chacha_rounds
+
+	/* Place this here to fill delay slot */
+	addiu	NONCE_0, 1
+
+	/* BYTES < 0? Handle last bytes */
+	bltz	BYTES, .Lchacha_mips_xor_bytes
+
+.Lchacha_mips_xor_done:
+	/* Restore used registers */
+	lw	$s0,  0($sp)
+	lw	$s1,  4($sp)
+	lw	$s2,  8($sp)
+	lw	$s3, 12($sp)
+	lw	$s4, 16($sp)
+	lw	$s5, 20($sp)
+	lw	$s6, 24($sp)
+	lw	$s7, 28($sp)
+
+	/* Write NONCE_0 back to right location in state */
+	sw	NONCE_0, 48(STATE)
+
+.Lchacha_mips_end:
+	addiu	$sp, STACK_SIZE
+	jr	$ra
+
+.Lchacha_mips_no_full_block_aligned:
+	/* Restore the offset on BYTES */
+	addiu	BYTES, CHACHA20_BLOCK_SIZE
+
+	/* Get number of full WORDS */
+	andi	$at, BYTES, MASK_U32
+
+	/* Load upper half of jump table addr */
+	lui	T0, %hi(.Lchacha_mips_jmptbl_aligned_0)
+
+	/* Calculate lower half jump table offset */
+	ins	T0, $at, 1, 6
+
+	/* Add offset to STATE */
+	addu	T1, STATE, $at
+
+	/* Add lower half jump table addr */
+	addiu	T0, %lo(.Lchacha_mips_jmptbl_aligned_0)
+
+	/* Read value from STATE */
+	lw	SAVED_CA, 0(T1)
+
+	/* Store remaining bytecounter as negative value */
+	subu	BYTES, $at, BYTES
+
+	jr	T0
+
+	/* Jump table */
+	FOR_EACH_WORD(JMPTBL_ALIGNED)
+
+
+.Loop_chacha_unaligned:
+	/* Set number rounds here to fill delayslot. */
+	lw	$at, (STACK_SIZE+16)($sp)
+
+	/* BYTES > 0, it has no full block. */
+	bltz	BYTES, .Lchacha_mips_no_full_block_unaligned
+
+	FOR_EACH_WORD_REV(STORE_UNALIGNED)
+
+	/* BYTES > 0? Loop again. */
+	bgtz	BYTES, .Loop_chacha_rounds
+
+	/* Write NONCE_0 back to right location in state */
+	sw	NONCE_0, 48(STATE)
+
+	.set noreorder
+	/* Fall through to byte handling */
+	bgez	BYTES, .Lchacha_mips_xor_done
+.Lchacha_mips_xor_unaligned_0_b:
+.Lchacha_mips_xor_aligned_0_b:
+	/* Place this here to fill delay slot */
+	addiu	NONCE_0, 1
+	.set reorder
+
+.Lchacha_mips_xor_bytes:
+	addu	IN, $at
+	addu	OUT, $at
+	/* First byte */
+	lbu	T1, 0(IN)
+	addiu	$at, BYTES, 1
+	CPU_TO_LE32(SAVED_X)
+	ROTR(SAVED_X)
+	xor	T1, SAVED_X
+	sb	T1, 0(OUT)
+	beqz	$at, .Lchacha_mips_xor_done
+	/* Second byte */
+	lbu	T1, 1(IN)
+	addiu	$at, BYTES, 2
+	ROTx	SAVED_X, 8
+	xor	T1, SAVED_X
+	sb	T1, 1(OUT)
+	beqz	$at, .Lchacha_mips_xor_done
+	/* Third byte */
+	lbu	T1, 2(IN)
+	ROTx	SAVED_X, 8
+	xor	T1, SAVED_X
+	sb	T1, 2(OUT)
+	b	.Lchacha_mips_xor_done
+
+.Lchacha_mips_no_full_block_unaligned:
+	/* Restore the offset on BYTES */
+	addiu	BYTES, CHACHA20_BLOCK_SIZE
+
+	/* Get number of full WORDS */
+	andi	$at, BYTES, MASK_U32
+
+	/* Load upper half of jump table addr */
+	lui	T0, %hi(.Lchacha_mips_jmptbl_unaligned_0)
+
+	/* Calculate lower half jump table offset */
+	ins	T0, $at, 1, 6
+
+	/* Add offset to STATE */
+	addu	T1, STATE, $at
+
+	/* Add lower half jump table addr */
+	addiu	T0, %lo(.Lchacha_mips_jmptbl_unaligned_0)
+
+	/* Read value from STATE */
+	lw	SAVED_CA, 0(T1)
+
+	/* Store remaining bytecounter as negative value */
+	subu	BYTES, $at, BYTES
+
+	jr	T0
+
+	/* Jump table */
+	FOR_EACH_WORD(JMPTBL_UNALIGNED)
+.end chacha_crypt_arch
+.set at
+
+/* Input arguments
+ * STATE	$a0
+ * OUT		$a1
+ * NROUND	$a2
+ */
+
+#undef X12
+#undef X13
+#undef X14
+#undef X15
+
+#define X12	$a3
+#define X13	$at
+#define X14	$v0
+#define X15	STATE
+
+.set noat
+.globl	hchacha_block_arch
+.ent	hchacha_block_arch
+hchacha_block_arch:
+	.frame	$sp, STACK_SIZE, $ra
+
+	addiu	$sp, -STACK_SIZE
+
+	/* Save X11(s6) */
+	sw	X11, 0($sp)
+
+	lw	X0,  0(STATE)
+	lw	X1,  4(STATE)
+	lw	X2,  8(STATE)
+	lw	X3,  12(STATE)
+	lw	X4,  16(STATE)
+	lw	X5,  20(STATE)
+	lw	X6,  24(STATE)
+	lw	X7,  28(STATE)
+	lw	X8,  32(STATE)
+	lw	X9,  36(STATE)
+	lw	X10, 40(STATE)
+	lw	X11, 44(STATE)
+	lw	X12, 48(STATE)
+	lw	X13, 52(STATE)
+	lw	X14, 56(STATE)
+	lw	X15, 60(STATE)
+
+.Loop_hchacha_xor_rounds:
+	addiu	$a2, -2
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15, 16);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7, 12);
+	AXR( 0, 1, 2, 3,  4, 5, 6, 7, 12,13,14,15,  8);
+	AXR( 8, 9,10,11, 12,13,14,15,  4, 5, 6, 7,  7);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14, 16);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4, 12);
+	AXR( 0, 1, 2, 3,  5, 6, 7, 4, 15,12,13,14,  8);
+	AXR(10,11, 8, 9, 15,12,13,14,  5, 6, 7, 4,  7);
+	bnez	$a2, .Loop_hchacha_xor_rounds
+
+	/* Restore used register */
+	lw	X11, 0($sp)
+
+	sw	X0,  0(OUT)
+	sw	X1,  4(OUT)
+	sw	X2,  8(OUT)
+	sw	X3,  12(OUT)
+	sw	X12, 16(OUT)
+	sw	X13, 20(OUT)
+	sw	X14, 24(OUT)
+	sw	X15, 28(OUT)
+
+	addiu	$sp, STACK_SIZE
+	jr	$ra
+.end hchacha_block_arch
+.set at
diff --git a/arch/mips/crypto/chacha-glue.c b/arch/mips/crypto/chacha-glue.c
new file mode 100644
index 0000000..9089602
--- /dev/null
+++ b/arch/mips/crypto/chacha-glue.c
@@ -0,0 +1,152 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MIPS accelerated ChaCha and XChaCha stream ciphers,
+ * including ChaCha20 (RFC7539)
+ *
+ * Copyright (C) 2019 Linaro, Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/byteorder.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/chacha.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+asmlinkage void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src,
+				  unsigned int bytes, int nrounds);
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+asmlinkage void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds);
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+static int chacha_mips_stream_xor(struct skcipher_request *req,
+				  const struct chacha_ctx *ctx, const u8 *iv)
+{
+	struct skcipher_walk walk;
+	u32 state[16];
+	int err;
+
+	err = skcipher_walk_virt(&walk, req, false);
+
+	chacha_init_generic(state, ctx->key, iv);
+
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
+
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
+
+		chacha_crypt(state, walk.dst.virt.addr, walk.src.virt.addr,
+			     nbytes, ctx->nrounds);
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
+	}
+
+	return err;
+}
+
+static int chacha_mips(struct skcipher_request *req)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+
+	return chacha_mips_stream_xor(req, ctx, req->iv);
+}
+
+static int xchacha_mips(struct skcipher_request *req)
+{
+	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	struct chacha_ctx subctx;
+	u32 state[16];
+	u8 real_iv[16];
+
+	chacha_init_generic(state, ctx->key, req->iv);
+
+	hchacha_block(state, subctx.key, ctx->nrounds);
+	subctx.nrounds = ctx->nrounds;
+
+	memcpy(&real_iv[0], req->iv + 24, 8);
+	memcpy(&real_iv[8], req->iv + 16, 8);
+	return chacha_mips_stream_xor(req, &subctx, real_iv);
+}
+
+static struct skcipher_alg algs[] = {
+	{
+		.base.cra_name		= "chacha20",
+		.base.cra_driver_name	= "chacha20-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= CHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= chacha_mips,
+		.decrypt		= chacha_mips,
+	}, {
+		.base.cra_name		= "xchacha20",
+		.base.cra_driver_name	= "xchacha20-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha20_setkey,
+		.encrypt		= xchacha_mips,
+		.decrypt		= xchacha_mips,
+	}, {
+		.base.cra_name		= "xchacha12",
+		.base.cra_driver_name	= "xchacha12-mips",
+		.base.cra_priority	= 200,
+		.base.cra_blocksize	= 1,
+		.base.cra_ctxsize	= sizeof(struct chacha_ctx),
+		.base.cra_module	= THIS_MODULE,
+
+		.min_keysize		= CHACHA_KEY_SIZE,
+		.max_keysize		= CHACHA_KEY_SIZE,
+		.ivsize			= XCHACHA_IV_SIZE,
+		.chunksize		= CHACHA_BLOCK_SIZE,
+		.setkey			= chacha12_setkey,
+		.encrypt		= xchacha_mips,
+		.decrypt		= xchacha_mips,
+	}
+};
+
+static int __init chacha_simd_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
+}
+
+static void __exit chacha_simd_mod_fini(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+}
+
+module_init(chacha_simd_mod_init);
+module_exit(chacha_simd_mod_fini);
+
+MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (MIPS accelerated)");
+MODULE_AUTHOR("Ard Biesheuvel <ard.biesheuvel@linaro.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("chacha20");
+MODULE_ALIAS_CRYPTO("chacha20-mips");
+MODULE_ALIAS_CRYPTO("xchacha20");
+MODULE_ALIAS_CRYPTO("xchacha20-mips");
+MODULE_ALIAS_CRYPTO("xchacha12");
+MODULE_ALIAS_CRYPTO("xchacha12-mips");
diff --git a/arch/mips/crypto/poly1305-glue.c b/arch/mips/crypto/poly1305-glue.c
new file mode 100644
index 0000000..bc6110f
--- /dev/null
+++ b/arch/mips/crypto/poly1305-glue.c
@@ -0,0 +1,191 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * OpenSSL/Cryptogams accelerated Poly1305 transform for MIPS
+ *
+ * Copyright (C) 2019 Linaro Ltd. <ard.biesheuvel@linaro.org>
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/algapi.h>
+#include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
+#include <linux/cpufeature.h>
+#include <linux/crypto.h>
+#include <linux/module.h>
+
+asmlinkage void poly1305_init_mips(void *state, const u8 *key);
+asmlinkage void poly1305_blocks_mips(void *state, const u8 *src, u32 len, u32 hibit);
+asmlinkage void poly1305_emit_mips(void *state, u8 *digest, const u32 *nonce);
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
+{
+	poly1305_init_mips(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(key + 16);
+	dctx->s[1] = get_unaligned_le32(key + 20);
+	dctx->s[2] = get_unaligned_le32(key + 24);
+	dctx->s[3] = get_unaligned_le32(key + 28);
+	dctx->buflen = 0;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static int mips_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	dctx->buflen = 0;
+	dctx->rset = 0;
+	dctx->sset = false;
+
+	return 0;
+}
+
+static void mips_poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+				 u32 len, u32 hibit)
+{
+	if (unlikely(!dctx->sset)) {
+		if (!dctx->rset) {
+			poly1305_init_mips(&dctx->h, src);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
+		}
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(src +  0);
+			dctx->s[1] = get_unaligned_le32(src +  4);
+			dctx->s[2] = get_unaligned_le32(src +  8);
+			dctx->s[3] = get_unaligned_le32(src + 12);
+			src += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
+		}
+		if (len < POLY1305_BLOCK_SIZE)
+			return;
+	}
+
+	len &= ~(POLY1305_BLOCK_SIZE - 1);
+
+	poly1305_blocks_mips(&dctx->h, src, len, hibit);
+}
+
+static int mips_poly1305_update(struct shash_desc *desc, const u8 *src,
+				unsigned int len)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(len, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		len -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			mips_poly1305_blocks(dctx, dctx->buf, POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(len >= POLY1305_BLOCK_SIZE)) {
+		mips_poly1305_blocks(dctx, src, len, 1);
+		src += round_down(len, POLY1305_BLOCK_SIZE);
+		len %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(len)) {
+		dctx->buflen = len;
+		memcpy(dctx->buf, src, len);
+	}
+	return 0;
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int nbytes)
+{
+	if (unlikely(dctx->buflen)) {
+		u32 bytes = min(nbytes, POLY1305_BLOCK_SIZE - dctx->buflen);
+
+		memcpy(dctx->buf + dctx->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		dctx->buflen += bytes;
+
+		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_blocks_mips(&dctx->h, dctx->buf,
+					     POLY1305_BLOCK_SIZE, 1);
+			dctx->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		unsigned int len = round_down(nbytes, POLY1305_BLOCK_SIZE);
+
+		poly1305_blocks_mips(&dctx->h, src, len, 1);
+		src += len;
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		dctx->buflen = nbytes;
+		memcpy(dctx->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
+
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_blocks_mips(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_emit_mips(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int mips_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
+	return 0;
+}
+
+static struct shash_alg mips_poly1305_alg = {
+	.init			= mips_poly1305_init,
+	.update			= mips_poly1305_update,
+	.final			= mips_poly1305_final,
+	.digestsize		= POLY1305_DIGEST_SIZE,
+	.descsize		= sizeof(struct poly1305_desc_ctx),
+
+	.base.cra_name		= "poly1305",
+	.base.cra_driver_name	= "poly1305-mips",
+	.base.cra_priority	= 200,
+	.base.cra_blocksize	= POLY1305_BLOCK_SIZE,
+	.base.cra_module	= THIS_MODULE,
+};
+
+static int __init mips_poly1305_mod_init(void)
+{
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shash(&mips_poly1305_alg) : 0;
+}
+
+static void __exit mips_poly1305_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shash(&mips_poly1305_alg);
+}
+
+module_init(mips_poly1305_mod_init);
+module_exit(mips_poly1305_mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS_CRYPTO("poly1305");
+MODULE_ALIAS_CRYPTO("poly1305-mips");
diff --git a/arch/mips/crypto/poly1305-mips.pl b/arch/mips/crypto/poly1305-mips.pl
new file mode 100644
index 0000000..b05bab8
--- /dev/null
+++ b/arch/mips/crypto/poly1305-mips.pl
@@ -0,0 +1,1273 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-1.0+ OR BSD-3-Clause
+#
+# ====================================================================
+# Written by Andy Polyakov, @dot-asm, originally for the OpenSSL
+# project.
+# ====================================================================
+
+# Poly1305 hash for MIPS.
+#
+# May 2016
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone.
+#
+#		IALU/gcc
+# R1x000	~5.5/+130%	(big-endian)
+# Octeon II	2.50/+70%	(little-endian)
+#
+# March 2019
+#
+# Add 32-bit code path.
+#
+# October 2019
+#
+# Modulo-scheduling reduction allows to omit dependency chain at the
+# end of inner loop and improve performance. Also optimize MIPS32R2
+# code path for MIPS 1004K core. Per René von Dorst's suggestions.
+#
+#		IALU/gcc
+# R1x000	~9.8/?		(big-endian)
+# Octeon II	3.65/+140%	(little-endian)
+# MT7621/1004K	4.75/?		(little-endian)
+#
+######################################################################
+# There is a number of MIPS ABI in use, O32 and N32/64 are most
+# widely used. Then there is a new contender: NUBI. It appears that if
+# one picks the latter, it's possible to arrange code in ABI neutral
+# manner. Therefore let's stick to NUBI register layout:
+#
+($zero,$at,$t0,$t1,$t2)=map("\$$_",(0..2,24,25));
+($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
+($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7,$s8,$s9,$s10,$s11)=map("\$$_",(12..23));
+($gp,$tp,$sp,$fp,$ra)=map("\$$_",(3,28..31));
+#
+# The return value is placed in $a0. Following coding rules facilitate
+# interoperability:
+#
+# - never ever touch $tp, "thread pointer", former $gp [o32 can be
+#   excluded from the rule, because it's specified volatile];
+# - copy return value to $t0, former $v0 [or to $a0 if you're adapting
+#   old code];
+# - on O32 populate $a4-$a7 with 'lw $aN,4*N($sp)' if necessary;
+#
+# For reference here is register layout for N32/64 MIPS ABIs:
+#
+# ($zero,$at,$v0,$v1)=map("\$$_",(0..3));
+# ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7)=map("\$$_",(4..11));
+# ($t0,$t1,$t2,$t3,$t8,$t9)=map("\$$_",(12..15,24,25));
+# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
+# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
+#
+# <appro@openssl.org>
+#
+######################################################################
+
+$flavour = shift || "64"; # supported flavours are o32,n32,64,nubi32,nubi64
+
+$v0 = ($flavour =~ /nubi/i) ? $a0 : $t0;
+
+if ($flavour =~ /64|n32/i) {{{
+######################################################################
+# 64-bit code path
+#
+
+my ($ctx,$inp,$len,$padbit) = ($a0,$a1,$a2,$a3);
+my ($in0,$in1,$tmp0,$tmp1,$tmp2,$tmp3,$tmp4) = ($a4,$a5,$a6,$a7,$at,$t0,$t1);
+
+$code.=<<___;
+#if (defined(_MIPS_ARCH_MIPS64R3) || defined(_MIPS_ARCH_MIPS64R5) || \\
+     defined(_MIPS_ARCH_MIPS64R6)) \\
+     && !defined(_MIPS_ARCH_MIPS64R2)
+# define _MIPS_ARCH_MIPS64R2
+#endif
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+# define dmultu(rs,rt)
+# define mflo(rd,rs,rt)	dmulu	rd,rs,rt
+# define mfhi(rd,rs,rt)	dmuhu	rd,rs,rt
+#else
+# define dmultu(rs,rt)		dmultu	rs,rt
+# define mflo(rd,rs,rt)	mflo	rd
+# define mfhi(rd,rs,rt)	mfhi	rd
+#endif
+
+#ifdef	__KERNEL__
+# define poly1305_init   poly1305_init_mips
+# define poly1305_blocks poly1305_blocks_mips
+# define poly1305_emit   poly1305_emit_mips
+#endif
+
+#if defined(__MIPSEB__) && !defined(MIPSEB)
+# define MIPSEB
+#endif
+
+#ifdef MIPSEB
+# define MSB 0
+# define LSB 7
+#else
+# define MSB 7
+# define LSB 0
+#endif
+
+.text
+.set	noat
+.set	noreorder
+
+.align	5
+.globl	poly1305_init
+.ent	poly1305_init
+poly1305_init:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	sd	$zero,0($ctx)
+	sd	$zero,8($ctx)
+	sd	$zero,16($ctx)
+
+	beqz	$inp,.Lno_key
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+	andi	$tmp0,$inp,7		# $inp % 8
+	dsubu	$inp,$inp,$tmp0		# align $inp
+	sll	$tmp0,$tmp0,3		# byte to bit offset
+	ld	$in0,0($inp)
+	ld	$in1,8($inp)
+	beqz	$tmp0,.Laligned_key
+	ld	$tmp2,16($inp)
+
+	subu	$tmp1,$zero,$tmp0
+# ifdef	MIPSEB
+	dsllv	$in0,$in0,$tmp0
+	dsrlv	$tmp3,$in1,$tmp1
+	dsllv	$in1,$in1,$tmp0
+	dsrlv	$tmp2,$tmp2,$tmp1
+# else
+	dsrlv	$in0,$in0,$tmp0
+	dsllv	$tmp3,$in1,$tmp1
+	dsrlv	$in1,$in1,$tmp0
+	dsllv	$tmp2,$tmp2,$tmp1
+# endif
+	or	$in0,$in0,$tmp3
+	or	$in1,$in1,$tmp2
+.Laligned_key:
+#else
+	ldl	$in0,0+MSB($inp)
+	ldl	$in1,8+MSB($inp)
+	ldr	$in0,0+LSB($inp)
+	ldr	$in1,8+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS64R2)
+	dsbh	$in0,$in0		# byte swap
+	 dsbh	$in1,$in1
+	dshd	$in0,$in0
+	 dshd	$in1,$in1
+# else
+	ori	$tmp0,$zero,0xFF
+	dsll	$tmp2,$tmp0,32
+	or	$tmp0,$tmp2		# 0x000000FF000000FF
+
+	and	$tmp1,$in0,$tmp0	# byte swap
+	 and	$tmp3,$in1,$tmp0
+	dsrl	$tmp2,$in0,24
+	 dsrl	$tmp4,$in1,24
+	dsll	$tmp1,24
+	 dsll	$tmp3,24
+	and	$tmp2,$tmp0
+	 and	$tmp4,$tmp0
+	dsll	$tmp0,8			# 0x0000FF000000FF00
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	and	$tmp2,$in0,$tmp0
+	 and	$tmp4,$in1,$tmp0
+	dsrl	$in0,8
+	 dsrl	$in1,8
+	dsll	$tmp2,8
+	 dsll	$tmp4,8
+	and	$in0,$tmp0
+	 and	$in1,$tmp0
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+	dsrl	$tmp1,$in0,32
+	 dsrl	$tmp3,$in1,32
+	dsll	$in0,32
+	 dsll	$in1,32
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+# endif
+#endif
+	li	$tmp0,1
+	dsll	$tmp0,32		# 0x0000000100000000
+	daddiu	$tmp0,-63		# 0x00000000ffffffc1
+	dsll	$tmp0,28		# 0x0ffffffc10000000
+	daddiu	$tmp0,-1		# 0x0ffffffc0fffffff
+
+	and	$in0,$tmp0
+	daddiu	$tmp0,-3		# 0x0ffffffc0ffffffc
+	and	$in1,$tmp0
+
+	sd	$in0,24($ctx)
+	dsrl	$tmp0,$in1,2
+	sd	$in1,32($ctx)
+	daddu	$tmp0,$in1		# s1 = r1 + (r1 >> 2)
+	sd	$tmp0,40($ctx)
+
+.Lno_key:
+	li	$v0,0			# return 0
+	jr	$ra
+.end	poly1305_init
+___
+{
+my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x0003f000" : "0x00030000";
+
+my ($h0,$h1,$h2,$r0,$r1,$rs1,$d0,$d1,$d2) =
+   ($s0,$s1,$s2,$s3,$s4,$s5,$in0,$in1,$t2);
+my ($shr,$shl) = ($s6,$s7);		# used on R6
+
+$code.=<<___;
+.align	5
+.globl	poly1305_blocks
+.ent	poly1305_blocks
+poly1305_blocks:
+	.set	noreorder
+	dsrl	$len,4			# number of complete blocks
+	bnez	$len,poly1305_blocks_internal
+	nop
+	jr	$ra
+	nop
+.end	poly1305_blocks
+
+.align	5
+.ent	poly1305_blocks_internal
+poly1305_blocks_internal:
+	.set	noreorder
+#if defined(_MIPS_ARCH_MIPS64R6)
+	.frame	$sp,8*8,$ra
+	.mask	$SAVED_REGS_MASK|0x000c0000,-8
+	dsubu	$sp,8*8
+	sd	$s7,56($sp)
+	sd	$s6,48($sp)
+#else
+	.frame	$sp,6*8,$ra
+	.mask	$SAVED_REGS_MASK,-8
+	dsubu	$sp,6*8
+#endif
+	sd	$s5,40($sp)
+	sd	$s4,32($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	sd	$s3,24($sp)
+	sd	$s2,16($sp)
+	sd	$s1,8($sp)
+	sd	$s0,0($sp)
+___
+$code.=<<___;
+	.set	reorder
+
+#if defined(_MIPS_ARCH_MIPS64R6)
+	andi	$shr,$inp,7
+	dsubu	$inp,$inp,$shr		# align $inp
+	sll	$shr,$shr,3		# byte to bit offset
+	subu	$shl,$zero,$shr
+#endif
+
+	ld	$h0,0($ctx)		# load hash value
+	ld	$h1,8($ctx)
+	ld	$h2,16($ctx)
+
+	ld	$r0,24($ctx)		# load key
+	ld	$r1,32($ctx)
+	ld	$rs1,40($ctx)
+
+	dsll	$len,4
+	daddu	$len,$inp		# end of buffer
+	b	.Loop
+
+.align	4
+.Loop:
+#if defined(_MIPS_ARCH_MIPS64R6)
+	ld	$in0,0($inp)		# load input
+	ld	$in1,8($inp)
+	beqz	$shr,.Laligned_inp
+
+	ld	$tmp2,16($inp)
+# ifdef	MIPSEB
+	dsllv	$in0,$in0,$shr
+	dsrlv	$tmp3,$in1,$shl
+	dsllv	$in1,$in1,$shr
+	dsrlv	$tmp2,$tmp2,$shl
+# else
+	dsrlv	$in0,$in0,$shr
+	dsllv	$tmp3,$in1,$shl
+	dsrlv	$in1,$in1,$shr
+	dsllv	$tmp2,$tmp2,$shl
+# endif
+	or	$in0,$in0,$tmp3
+	or	$in1,$in1,$tmp2
+.Laligned_inp:
+#else
+	ldl	$in0,0+MSB($inp)	# load input
+	ldl	$in1,8+MSB($inp)
+	ldr	$in0,0+LSB($inp)
+	ldr	$in1,8+LSB($inp)
+#endif
+	daddiu	$inp,16
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS64R2)
+	dsbh	$in0,$in0		# byte swap
+	 dsbh	$in1,$in1
+	dshd	$in0,$in0
+	 dshd	$in1,$in1
+# else
+	ori	$tmp0,$zero,0xFF
+	dsll	$tmp2,$tmp0,32
+	or	$tmp0,$tmp2		# 0x000000FF000000FF
+
+	and	$tmp1,$in0,$tmp0	# byte swap
+	 and	$tmp3,$in1,$tmp0
+	dsrl	$tmp2,$in0,24
+	 dsrl	$tmp4,$in1,24
+	dsll	$tmp1,24
+	 dsll	$tmp3,24
+	and	$tmp2,$tmp0
+	 and	$tmp4,$tmp0
+	dsll	$tmp0,8			# 0x0000FF000000FF00
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	and	$tmp2,$in0,$tmp0
+	 and	$tmp4,$in1,$tmp0
+	dsrl	$in0,8
+	 dsrl	$in1,8
+	dsll	$tmp2,8
+	 dsll	$tmp4,8
+	and	$in0,$tmp0
+	 and	$in1,$tmp0
+	or	$tmp1,$tmp2
+	 or	$tmp3,$tmp4
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+	dsrl	$tmp1,$in0,32
+	 dsrl	$tmp3,$in1,32
+	dsll	$in0,32
+	 dsll	$in1,32
+	or	$in0,$tmp1
+	 or	$in1,$tmp3
+# endif
+#endif
+	dsrl	$tmp1,$h2,2		# modulo-scheduled reduction
+	andi	$h2,$h2,3
+	dsll	$tmp0,$tmp1,2
+
+	daddu	$d0,$h0,$in0		# accumulate input
+	 daddu	$tmp1,$tmp0
+	sltu	$tmp0,$d0,$h0
+	daddu	$d0,$d0,$tmp1		# ... and residue
+	sltu	$tmp1,$d0,$tmp1
+	daddu	$d1,$h1,$in1
+	daddu	$tmp0,$tmp1
+	sltu	$tmp1,$d1,$h1
+	daddu	$d1,$tmp0
+
+	dmultu	($r0,$d0)		# h0*r0
+	 daddu	$d2,$h2,$padbit
+	 sltu	$tmp0,$d1,$tmp0
+	mflo	($h0,$r0,$d0)
+	mfhi	($h1,$r0,$d0)
+
+	dmultu	($rs1,$d1)		# h1*5*r1
+	 daddu	$d2,$tmp1
+	 daddu	$d2,$tmp0
+	mflo	($tmp0,$rs1,$d1)
+	mfhi	($tmp1,$rs1,$d1)
+
+	dmultu	($r1,$d0)		# h0*r1
+	mflo	($tmp2,$r1,$d0)
+	mfhi	($h2,$r1,$d0)
+	 daddu	$h0,$tmp0
+	 daddu	$h1,$tmp1
+	 sltu	$tmp0,$h0,$tmp0
+
+	dmultu	($r0,$d1)		# h1*r0
+	 daddu	$h1,$tmp0
+	 daddu	$h1,$tmp2
+	mflo	($tmp0,$r0,$d1)
+	mfhi	($tmp1,$r0,$d1)
+
+	dmultu	($rs1,$d2)		# h2*5*r1
+	 sltu	$tmp2,$h1,$tmp2
+	 daddu	$h2,$tmp2
+	mflo	($tmp2,$rs1,$d2)
+
+	dmultu	($r0,$d2)		# h2*r0
+	 daddu	$h1,$tmp0
+	 daddu	$h2,$tmp1
+	mflo	($tmp3,$r0,$d2)
+	 sltu	$tmp0,$h1,$tmp0
+	 daddu	$h2,$tmp0
+
+	daddu	$h1,$tmp2
+	sltu	$tmp2,$h1,$tmp2
+	daddu	$h2,$tmp2
+	daddu	$h2,$tmp3
+
+	bne	$inp,$len,.Loop
+
+	sd	$h0,0($ctx)		# store hash value
+	sd	$h1,8($ctx)
+	sd	$h2,16($ctx)
+
+	.set	noreorder
+#if defined(_MIPS_ARCH_MIPS64R6)
+	ld	$s7,56($sp)
+	ld	$s6,48($sp)
+#endif
+	ld	$s5,40($sp)		# epilogue
+	ld	$s4,32($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi epilogue
+	ld	$s3,24($sp)
+	ld	$s2,16($sp)
+	ld	$s1,8($sp)
+	ld	$s0,0($sp)
+___
+$code.=<<___;
+	jr	$ra
+#if defined(_MIPS_ARCH_MIPS64R6)
+	daddu	$sp,8*8
+#else
+	daddu	$sp,6*8
+#endif
+.end	poly1305_blocks_internal
+___
+}
+{
+my ($ctx,$mac,$nonce) = ($a0,$a1,$a2);
+
+$code.=<<___;
+.align	5
+.globl	poly1305_emit
+.ent	poly1305_emit
+poly1305_emit:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	ld	$tmp2,16($ctx)
+	ld	$tmp0,0($ctx)
+	ld	$tmp1,8($ctx)
+
+	li	$in0,-4			# final reduction
+	dsrl	$in1,$tmp2,2
+	and	$in0,$tmp2
+	andi	$tmp2,$tmp2,3
+	daddu	$in0,$in1
+
+	daddu	$tmp0,$tmp0,$in0
+	sltu	$in1,$tmp0,$in0
+	 daddiu	$in0,$tmp0,5		# compare to modulus
+	daddu	$tmp1,$tmp1,$in1
+	 sltiu	$tmp3,$in0,5
+	sltu	$tmp4,$tmp1,$in1
+	 daddu	$in1,$tmp1,$tmp3
+	daddu	$tmp2,$tmp2,$tmp4
+	 sltu	$tmp3,$in1,$tmp3
+	 daddu	$tmp2,$tmp2,$tmp3
+
+	dsrl	$tmp2,2			# see if it carried/borrowed
+	dsubu	$tmp2,$zero,$tmp2
+
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	and	$in0,$tmp2
+	and	$in1,$tmp2
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+
+	lwu	$tmp0,0($nonce)		# load nonce
+	lwu	$tmp1,4($nonce)
+	lwu	$tmp2,8($nonce)
+	lwu	$tmp3,12($nonce)
+	dsll	$tmp1,32
+	dsll	$tmp3,32
+	or	$tmp0,$tmp1
+	or	$tmp2,$tmp3
+
+	daddu	$in0,$tmp0		# accumulate nonce
+	daddu	$in1,$tmp2
+	sltu	$tmp0,$in0,$tmp0
+	daddu	$in1,$tmp0
+
+	dsrl	$tmp0,$in0,8		# write mac value
+	dsrl	$tmp1,$in0,16
+	dsrl	$tmp2,$in0,24
+	sb	$in0,0($mac)
+	dsrl	$tmp3,$in0,32
+	sb	$tmp0,1($mac)
+	dsrl	$tmp0,$in0,40
+	sb	$tmp1,2($mac)
+	dsrl	$tmp1,$in0,48
+	sb	$tmp2,3($mac)
+	dsrl	$tmp2,$in0,56
+	sb	$tmp3,4($mac)
+	dsrl	$tmp3,$in1,8
+	sb	$tmp0,5($mac)
+	dsrl	$tmp0,$in1,16
+	sb	$tmp1,6($mac)
+	dsrl	$tmp1,$in1,24
+	sb	$tmp2,7($mac)
+
+	sb	$in1,8($mac)
+	dsrl	$tmp2,$in1,32
+	sb	$tmp3,9($mac)
+	dsrl	$tmp3,$in1,40
+	sb	$tmp0,10($mac)
+	dsrl	$tmp0,$in1,48
+	sb	$tmp1,11($mac)
+	dsrl	$tmp1,$in1,56
+	sb	$tmp2,12($mac)
+	sb	$tmp3,13($mac)
+	sb	$tmp0,14($mac)
+	sb	$tmp1,15($mac)
+
+	jr	$ra
+.end	poly1305_emit
+.rdata
+.asciiz	"Poly1305 for MIPS64, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+}
+}}} else {{{
+######################################################################
+# 32-bit code path
+#
+
+my ($ctx,$inp,$len,$padbit) = ($a0,$a1,$a2,$a3);
+my ($in0,$in1,$in2,$in3,$tmp0,$tmp1,$tmp2,$tmp3) =
+   ($a4,$a5,$a6,$a7,$at,$t0,$t1,$t2);
+
+$code.=<<___;
+#if (defined(_MIPS_ARCH_MIPS32R3) || defined(_MIPS_ARCH_MIPS32R5) || \\
+     defined(_MIPS_ARCH_MIPS32R6)) \\
+     && !defined(_MIPS_ARCH_MIPS32R2)
+# define _MIPS_ARCH_MIPS32R2
+#endif
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+# define multu(rs,rt)
+# define mflo(rd,rs,rt)	mulu	rd,rs,rt
+# define mfhi(rd,rs,rt)	muhu	rd,rs,rt
+#else
+# define multu(rs,rt)	multu	rs,rt
+# define mflo(rd,rs,rt)	mflo	rd
+# define mfhi(rd,rs,rt)	mfhi	rd
+#endif
+
+#ifdef	__KERNEL__
+# define poly1305_init   poly1305_init_mips
+# define poly1305_blocks poly1305_blocks_mips
+# define poly1305_emit   poly1305_emit_mips
+#endif
+
+#if defined(__MIPSEB__) && !defined(MIPSEB)
+# define MIPSEB
+#endif
+
+#ifdef MIPSEB
+# define MSB 0
+# define LSB 3
+#else
+# define MSB 3
+# define LSB 0
+#endif
+
+.text
+.set	noat
+.set	noreorder
+
+.align	5
+.globl	poly1305_init
+.ent	poly1305_init
+poly1305_init:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	sw	$zero,0($ctx)
+	sw	$zero,4($ctx)
+	sw	$zero,8($ctx)
+	sw	$zero,12($ctx)
+	sw	$zero,16($ctx)
+
+	beqz	$inp,.Lno_key
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+	andi	$tmp0,$inp,3		# $inp % 4
+	subu	$inp,$inp,$tmp0		# align $inp
+	sll	$tmp0,$tmp0,3		# byte to bit offset
+	lw	$in0,0($inp)
+	lw	$in1,4($inp)
+	lw	$in2,8($inp)
+	lw	$in3,12($inp)
+	beqz	$tmp0,.Laligned_key
+
+	lw	$tmp2,16($inp)
+	subu	$tmp1,$zero,$tmp0
+# ifdef	MIPSEB
+	sllv	$in0,$in0,$tmp0
+	srlv	$tmp3,$in1,$tmp1
+	sllv	$in1,$in1,$tmp0
+	or	$in0,$in0,$tmp3
+	srlv	$tmp3,$in2,$tmp1
+	sllv	$in2,$in2,$tmp0
+	or	$in1,$in1,$tmp3
+	srlv	$tmp3,$in3,$tmp1
+	sllv	$in3,$in3,$tmp0
+	or	$in2,$in2,$tmp3
+	srlv	$tmp2,$tmp2,$tmp1
+	or	$in3,$in3,$tmp2
+# else
+	srlv	$in0,$in0,$tmp0
+	sllv	$tmp3,$in1,$tmp1
+	srlv	$in1,$in1,$tmp0
+	or	$in0,$in0,$tmp3
+	sllv	$tmp3,$in2,$tmp1
+	srlv	$in2,$in2,$tmp0
+	or	$in1,$in1,$tmp3
+	sllv	$tmp3,$in3,$tmp1
+	srlv	$in3,$in3,$tmp0
+	or	$in2,$in2,$tmp3
+	sllv	$tmp2,$tmp2,$tmp1
+	or	$in3,$in3,$tmp2
+# endif
+.Laligned_key:
+#else
+	lwl	$in0,0+MSB($inp)
+	lwl	$in1,4+MSB($inp)
+	lwl	$in2,8+MSB($inp)
+	lwl	$in3,12+MSB($inp)
+	lwr	$in0,0+LSB($inp)
+	lwr	$in1,4+LSB($inp)
+	lwr	$in2,8+LSB($inp)
+	lwr	$in3,12+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS32R2)
+	wsbh	$in0,$in0		# byte swap
+	wsbh	$in1,$in1
+	wsbh	$in2,$in2
+	wsbh	$in3,$in3
+	rotr	$in0,$in0,16
+	rotr	$in1,$in1,16
+	rotr	$in2,$in2,16
+	rotr	$in3,$in3,16
+# else
+	srl	$tmp0,$in0,24		# byte swap
+	srl	$tmp1,$in0,8
+	andi	$tmp2,$in0,0xFF00
+	sll	$in0,$in0,24
+	andi	$tmp1,0xFF00
+	sll	$tmp2,$tmp2,8
+	or	$in0,$tmp0
+	 srl	$tmp0,$in1,24
+	or	$tmp1,$tmp2
+	 srl	$tmp2,$in1,8
+	or	$in0,$tmp1
+	 andi	$tmp1,$in1,0xFF00
+	 sll	$in1,$in1,24
+	 andi	$tmp2,0xFF00
+	 sll	$tmp1,$tmp1,8
+	 or	$in1,$tmp0
+	srl	$tmp0,$in2,24
+	 or	$tmp2,$tmp1
+	srl	$tmp1,$in2,8
+	 or	$in1,$tmp2
+	andi	$tmp2,$in2,0xFF00
+	sll	$in2,$in2,24
+	andi	$tmp1,0xFF00
+	sll	$tmp2,$tmp2,8
+	or	$in2,$tmp0
+	 srl	$tmp0,$in3,24
+	or	$tmp1,$tmp2
+	 srl	$tmp2,$in3,8
+	or	$in2,$tmp1
+	 andi	$tmp1,$in3,0xFF00
+	 sll	$in3,$in3,24
+	 andi	$tmp2,0xFF00
+	 sll	$tmp1,$tmp1,8
+	 or	$in3,$tmp0
+	 or	$tmp2,$tmp1
+	 or	$in3,$tmp2
+# endif
+#endif
+	lui	$tmp0,0x0fff
+	ori	$tmp0,0xffff		# 0x0fffffff
+	and	$in0,$in0,$tmp0
+	subu	$tmp0,3			# 0x0ffffffc
+	and	$in1,$in1,$tmp0
+	and	$in2,$in2,$tmp0
+	and	$in3,$in3,$tmp0
+
+	sw	$in0,20($ctx)
+	sw	$in1,24($ctx)
+	sw	$in2,28($ctx)
+	sw	$in3,32($ctx)
+
+	srl	$tmp1,$in1,2
+	srl	$tmp2,$in2,2
+	srl	$tmp3,$in3,2
+	addu	$in1,$in1,$tmp1		# s1 = r1 + (r1 >> 2)
+	addu	$in2,$in2,$tmp2
+	addu	$in3,$in3,$tmp3
+	sw	$in1,36($ctx)
+	sw	$in2,40($ctx)
+	sw	$in3,44($ctx)
+.Lno_key:
+	li	$v0,0
+	jr	$ra
+.end	poly1305_init
+___
+{
+my $SAVED_REGS_MASK = ($flavour =~ /nubi/i) ? "0x00fff000" : "0x00ff0000";
+
+my ($h0,$h1,$h2,$h3,$h4, $r0,$r1,$r2,$r3, $rs1,$rs2,$rs3) =
+   ($s0,$s1,$s2,$s3,$s4, $s5,$s6,$s7,$s8, $s9,$s10,$s11);
+my ($d0,$d1,$d2,$d3) =
+   ($a4,$a5,$a6,$a7);
+my $shr = $t2;		# used on R6
+my $one = $t2;		# used on R2
+
+$code.=<<___;
+.globl	poly1305_blocks
+.align	5
+.ent	poly1305_blocks
+poly1305_blocks:
+	.frame	$sp,16*4,$ra
+	.mask	$SAVED_REGS_MASK,-4
+	.set	noreorder
+	subu	$sp, $sp,4*12
+	sw	$s11,4*11($sp)
+	sw	$s10,4*10($sp)
+	sw	$s9, 4*9($sp)
+	sw	$s8, 4*8($sp)
+	sw	$s7, 4*7($sp)
+	sw	$s6, 4*6($sp)
+	sw	$s5, 4*5($sp)
+	sw	$s4, 4*4($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	sw	$s3, 4*3($sp)
+	sw	$s2, 4*2($sp)
+	sw	$s1, 4*1($sp)
+	sw	$s0, 4*0($sp)
+___
+$code.=<<___;
+	.set	reorder
+
+	srl	$len,4			# number of complete blocks
+	li	$one,1
+	beqz	$len,.Labort
+
+#if defined(_MIPS_ARCH_MIPS32R6)
+	andi	$shr,$inp,3
+	subu	$inp,$inp,$shr		# align $inp
+	sll	$shr,$shr,3		# byte to bit offset
+#endif
+
+	lw	$h0,0($ctx)		# load hash value
+	lw	$h1,4($ctx)
+	lw	$h2,8($ctx)
+	lw	$h3,12($ctx)
+	lw	$h4,16($ctx)
+
+	lw	$r0,20($ctx)		# load key
+	lw	$r1,24($ctx)
+	lw	$r2,28($ctx)
+	lw	$r3,32($ctx)
+	lw	$rs1,36($ctx)
+	lw	$rs2,40($ctx)
+	lw	$rs3,44($ctx)
+
+	sll	$len,4
+	addu	$len,$len,$inp		# end of buffer
+	b	.Loop
+
+.align	4
+.Loop:
+#if defined(_MIPS_ARCH_MIPS32R6)
+	lw	$d0,0($inp)		# load input
+	lw	$d1,4($inp)
+	lw	$d2,8($inp)
+	lw	$d3,12($inp)
+	beqz	$shr,.Laligned_inp
+
+	lw	$t0,16($inp)
+	subu	$t1,$zero,$shr
+# ifdef	MIPSEB
+	sllv	$d0,$d0,$shr
+	srlv	$at,$d1,$t1
+	sllv	$d1,$d1,$shr
+	or	$d0,$d0,$at
+	srlv	$at,$d2,$t1
+	sllv	$d2,$d2,$shr
+	or	$d1,$d1,$at
+	srlv	$at,$d3,$t1
+	sllv	$d3,$d3,$shr
+	or	$d2,$d2,$at
+	srlv	$t0,$t0,$t1
+	or	$d3,$d3,$t0
+# else
+	srlv	$d0,$d0,$shr
+	sllv	$at,$d1,$t1
+	srlv	$d1,$d1,$shr
+	or	$d0,$d0,$at
+	sllv	$at,$d2,$t1
+	srlv	$d2,$d2,$shr
+	or	$d1,$d1,$at
+	sllv	$at,$d3,$t1
+	srlv	$d3,$d3,$shr
+	or	$d2,$d2,$at
+	sllv	$t0,$t0,$t1
+	or	$d3,$d3,$t0
+# endif
+.Laligned_inp:
+#else
+	lwl	$d0,0+MSB($inp)		# load input
+	lwl	$d1,4+MSB($inp)
+	lwl	$d2,8+MSB($inp)
+	lwl	$d3,12+MSB($inp)
+	lwr	$d0,0+LSB($inp)
+	lwr	$d1,4+LSB($inp)
+	lwr	$d2,8+LSB($inp)
+	lwr	$d3,12+LSB($inp)
+#endif
+#ifdef	MIPSEB
+# if defined(_MIPS_ARCH_MIPS32R2)
+	wsbh	$d0,$d0			# byte swap
+	wsbh	$d1,$d1
+	wsbh	$d2,$d2
+	wsbh	$d3,$d3
+	rotr	$d0,$d0,16
+	rotr	$d1,$d1,16
+	rotr	$d2,$d2,16
+	rotr	$d3,$d3,16
+# else
+	srl	$at,$d0,24		# byte swap
+	srl	$t0,$d0,8
+	andi	$t1,$d0,0xFF00
+	sll	$d0,$d0,24
+	andi	$t0,0xFF00
+	sll	$t1,$t1,8
+	or	$d0,$at
+	 srl	$at,$d1,24
+	or	$t0,$t1
+	 srl	$t1,$d1,8
+	or	$d0,$t0
+	 andi	$t0,$d1,0xFF00
+	 sll	$d1,$d1,24
+	 andi	$t1,0xFF00
+	 sll	$t0,$t0,8
+	 or	$d1,$at
+	srl	$at,$d2,24
+	 or	$t1,$t0
+	srl	$t0,$d2,8
+	 or	$d1,$t1
+	andi	$t1,$d2,0xFF00
+	sll	$d2,$d2,24
+	andi	$t0,0xFF00
+	sll	$t1,$t1,8
+	or	$d2,$at
+	 srl	$at,$d3,24
+	or	$t0,$t1
+	 srl	$t1,$d3,8
+	or	$d2,$t0
+	 andi	$t0,$d3,0xFF00
+	 sll	$d3,$d3,24
+	 andi	$t1,0xFF00
+	 sll	$t0,$t0,8
+	 or	$d3,$at
+	 or	$t1,$t0
+	 or	$d3,$t1
+# endif
+#endif
+	srl	$t0,$h4,2		# modulo-scheduled reduction
+	andi	$h4,$h4,3
+	sll	$at,$t0,2
+
+	addu	$d0,$d0,$h0		# accumulate input
+	 addu	$t0,$t0,$at
+	sltu	$h0,$d0,$h0
+	addu	$d0,$d0,$t0		# ... and residue
+	sltu	$at,$d0,$t0
+
+	addu	$d1,$d1,$h1
+	 addu	$h0,$h0,$at		# carry
+	sltu	$h1,$d1,$h1
+	addu	$d1,$d1,$h0
+	sltu	$h0,$d1,$h0
+
+	addu	$d2,$d2,$h2
+	 addu	$h1,$h1,$h0		# carry
+	sltu	$h2,$d2,$h2
+	addu	$d2,$d2,$h1
+	sltu	$h1,$d2,$h1
+
+	addu	$d3,$d3,$h3
+	 addu	$h2,$h2,$h1		# carry
+	sltu	$h3,$d3,$h3
+	addu	$d3,$d3,$h2
+
+#if defined(_MIPS_ARCH_MIPS32R2) && !defined(_MIPS_ARCH_MIPS32R6)
+	multu	$r0,$d0			# d0*r0
+	 sltu	$h2,$d3,$h2
+	maddu	$rs3,$d1		# d1*s3
+	 addu	$h3,$h3,$h2		# carry
+	maddu	$rs2,$d2		# d2*s2
+	 addu	$h4,$h4,$padbit
+	maddu	$rs1,$d3		# d3*s1
+	 addu	$h4,$h4,$h3
+	mfhi	$at
+	mflo	$h0
+
+	multu	$r1,$d0			# d0*r1
+	maddu	$r0,$d1			# d1*r0
+	maddu	$rs3,$d2		# d2*s3
+	maddu	$rs2,$d3		# d3*s2
+	maddu	$rs1,$h4		# h4*s1
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h1
+
+	multu	$r2,$d0			# d0*r2
+	maddu	$r1,$d1			# d1*r1
+	maddu	$r0,$d2			# d2*r0
+	maddu	$rs3,$d3		# d3*s3
+	maddu	$rs2,$h4		# h4*s2
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h2
+
+	mul	$t0,$r0,$h4		# h4*r0
+
+	multu	$r3,$d0			# d0*r3
+	maddu	$r2,$d1			# d1*r2
+	maddu	$r1,$d2			# d2*r1
+	maddu	$r0,$d3			# d3*r0
+	maddu	$rs3,$h4		# h4*s3
+	maddu	$at,$one		# hi*1
+	mfhi	$at
+	mflo	$h3
+
+	 addiu	$inp,$inp,16
+
+	addu	$h4,$t0,$at
+#else
+	multu	($r0,$d0)		# d0*r0
+	mflo	($h0,$r0,$d0)
+	mfhi	($h1,$r0,$d0)
+
+	 sltu	$h2,$d3,$h2
+	 addu	$h3,$h3,$h2		# carry
+
+	multu	($rs3,$d1)		# d1*s3
+	mflo	($at,$rs3,$d1)
+	mfhi	($t0,$rs3,$d1)
+
+	 addu	$h4,$h4,$padbit
+	 addiu	$inp,$inp,16
+	 addu	$h4,$h4,$h3
+
+	multu	($rs2,$d2)		# d2*s2
+	mflo	($a3,$rs2,$d2)
+	mfhi	($t1,$rs2,$d2)
+	 addu	$h0,$h0,$at
+	 addu	$h1,$h1,$t0
+	multu	($rs1,$d3)		# d3*s1
+	 sltu	$at,$h0,$at
+	 addu	$h1,$h1,$at
+
+	mflo	($at,$rs1,$d3)
+	mfhi	($t0,$rs1,$d3)
+	 addu	$h0,$h0,$a3
+	 addu	$h1,$h1,$t1
+	multu	($r1,$d0)		# d0*r1
+	 sltu	$a3,$h0,$a3
+	 addu	$h1,$h1,$a3
+
+
+	mflo	($a3,$r1,$d0)
+	mfhi	($h2,$r1,$d0)
+	 addu	$h0,$h0,$at
+	 addu	$h1,$h1,$t0
+	multu	($r0,$d1)		# d1*r0
+	 sltu	$at,$h0,$at
+	 addu	$h1,$h1,$at
+
+	mflo	($at,$r0,$d1)
+	mfhi	($t0,$r0,$d1)
+	 addu	$h1,$h1,$a3
+	 sltu	$a3,$h1,$a3
+	multu	($rs3,$d2)		# d2*s3
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$rs3,$d2)
+	mfhi	($t1,$rs3,$d2)
+	 addu	$h1,$h1,$at
+	 addu	$h2,$h2,$t0
+	multu	($rs2,$d3)		# d3*s2
+	 sltu	$at,$h1,$at
+	 addu	$h2,$h2,$at
+
+	mflo	($at,$rs2,$d3)
+	mfhi	($t0,$rs2,$d3)
+	 addu	$h1,$h1,$a3
+	 addu	$h2,$h2,$t1
+	multu	($rs1,$h4)		# h4*s1
+	 sltu	$a3,$h1,$a3
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$rs1,$h4)
+	 addu	$h1,$h1,$at
+	 addu	$h2,$h2,$t0
+	multu	($r2,$d0)		# d0*r2
+	 sltu	$at,$h1,$at
+	 addu	$h2,$h2,$at
+
+
+	mflo	($at,$r2,$d0)
+	mfhi	($h3,$r2,$d0)
+	 addu	$h1,$h1,$a3
+	 sltu	$a3,$h1,$a3
+	multu	($r1,$d1)		# d1*r1
+	 addu	$h2,$h2,$a3
+
+	mflo	($a3,$r1,$d1)
+	mfhi	($t1,$r1,$d1)
+	 addu	$h2,$h2,$at
+	 sltu	$at,$h2,$at
+	multu	($r0,$d2)		# d2*r0
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$r0,$d2)
+	mfhi	($t0,$r0,$d2)
+	 addu	$h2,$h2,$a3
+	 addu	$h3,$h3,$t1
+	multu	($rs3,$d3)		# d3*s3
+	 sltu	$a3,$h2,$a3
+	 addu	$h3,$h3,$a3
+
+	mflo	($a3,$rs3,$d3)
+	mfhi	($t1,$rs3,$d3)
+	 addu	$h2,$h2,$at
+	 addu	$h3,$h3,$t0
+	multu	($rs2,$h4)		# h4*s2
+	 sltu	$at,$h2,$at
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$rs2,$h4)
+	 addu	$h2,$h2,$a3
+	 addu	$h3,$h3,$t1
+	multu	($r3,$d0)		# d0*r3
+	 sltu	$a3,$h2,$a3
+	 addu	$h3,$h3,$a3
+
+
+	mflo	($a3,$r3,$d0)
+	mfhi	($t1,$r3,$d0)
+	 addu	$h2,$h2,$at
+	 sltu	$at,$h2,$at
+	multu	($r2,$d1)		# d1*r2
+	 addu	$h3,$h3,$at
+
+	mflo	($at,$r2,$d1)
+	mfhi	($t0,$r2,$d1)
+	 addu	$h3,$h3,$a3
+	 sltu	$a3,$h3,$a3
+	multu	($r0,$d3)		# d3*r0
+	 addu	$t1,$t1,$a3
+
+	mflo	($a3,$r0,$d3)
+	mfhi	($d3,$r0,$d3)
+	 addu	$h3,$h3,$at
+	 addu	$t1,$t1,$t0
+	multu	($r1,$d2)		# d2*r1
+	 sltu	$at,$h3,$at
+	 addu	$t1,$t1,$at
+
+	mflo	($at,$r1,$d2)
+	mfhi	($t0,$r1,$d2)
+	 addu	$h3,$h3,$a3
+	 addu	$t1,$t1,$d3
+	multu	($rs3,$h4)		# h4*s3
+	 sltu	$a3,$h3,$a3
+	 addu	$t1,$t1,$a3
+
+	mflo	($a3,$rs3,$h4)
+	 addu	$h3,$h3,$at
+	 addu	$t1,$t1,$t0
+	multu	($r0,$h4)		# h4*r0
+	 sltu	$at,$h3,$at
+	 addu	$t1,$t1,$at
+
+
+	mflo	($h4,$r0,$h4)
+	 addu	$h3,$h3,$a3
+	 sltu	$a3,$h3,$a3
+	 addu	$t1,$t1,$a3
+	addu	$h4,$h4,$t1
+
+	li	$padbit,1		# if we loop, padbit is 1
+#endif
+	bne	$inp,$len,.Loop
+
+	sw	$h0,0($ctx)		# store hash value
+	sw	$h1,4($ctx)
+	sw	$h2,8($ctx)
+	sw	$h3,12($ctx)
+	sw	$h4,16($ctx)
+
+	.set	noreorder
+.Labort:
+	lw	$s11,4*11($sp)
+	lw	$s10,4*10($sp)
+	lw	$s9, 4*9($sp)
+	lw	$s8, 4*8($sp)
+	lw	$s7, 4*7($sp)
+	lw	$s6, 4*6($sp)
+	lw	$s5, 4*5($sp)
+	lw	$s4, 4*4($sp)
+___
+$code.=<<___ if ($flavour =~ /nubi/i);	# optimize non-nubi prologue
+	lw	$s3, 4*3($sp)
+	lw	$s2, 4*2($sp)
+	lw	$s1, 4*1($sp)
+	lw	$s0, 4*0($sp)
+___
+$code.=<<___;
+	jr	$ra
+	addu	$sp,$sp,4*12
+.end	poly1305_blocks
+___
+}
+{
+my ($ctx,$mac,$nonce,$tmp4) = ($a0,$a1,$a2,$a3);
+
+$code.=<<___;
+.align	5
+.globl	poly1305_emit
+.ent	poly1305_emit
+poly1305_emit:
+	.frame	$sp,0,$ra
+	.set	reorder
+
+	lw	$tmp4,16($ctx)
+	lw	$tmp0,0($ctx)
+	lw	$tmp1,4($ctx)
+	lw	$tmp2,8($ctx)
+	lw	$tmp3,12($ctx)
+
+	li	$in0,-4			# final reduction
+	srl	$ctx,$tmp4,2
+	and	$in0,$in0,$tmp4
+	andi	$tmp4,$tmp4,3
+	addu	$ctx,$ctx,$in0
+
+	addu	$tmp0,$tmp0,$ctx
+	sltu	$ctx,$tmp0,$ctx
+	 addiu	$in0,$tmp0,5		# compare to modulus
+	addu	$tmp1,$tmp1,$ctx
+	 sltiu	$in1,$in0,5
+	sltu	$ctx,$tmp1,$ctx
+	 addu	$in1,$in1,$tmp1
+	addu	$tmp2,$tmp2,$ctx
+	 sltu	$in2,$in1,$tmp1
+	sltu	$ctx,$tmp2,$ctx
+	 addu	$in2,$in2,$tmp2
+	addu	$tmp3,$tmp3,$ctx
+	 sltu	$in3,$in2,$tmp2
+	sltu	$ctx,$tmp3,$ctx
+	 addu	$in3,$in3,$tmp3
+	addu	$tmp4,$tmp4,$ctx
+	 sltu	$ctx,$in3,$tmp3
+	 addu	$ctx,$tmp4
+
+	srl	$ctx,2			# see if it carried/borrowed
+	subu	$ctx,$zero,$ctx
+
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	xor	$in2,$tmp2
+	xor	$in3,$tmp3
+	and	$in0,$ctx
+	and	$in1,$ctx
+	and	$in2,$ctx
+	and	$in3,$ctx
+	xor	$in0,$tmp0
+	xor	$in1,$tmp1
+	xor	$in2,$tmp2
+	xor	$in3,$tmp3
+
+	lw	$tmp0,0($nonce)		# load nonce
+	lw	$tmp1,4($nonce)
+	lw	$tmp2,8($nonce)
+	lw	$tmp3,12($nonce)
+
+	addu	$in0,$tmp0		# accumulate nonce
+	sltu	$ctx,$in0,$tmp0
+
+	addu	$in1,$tmp1
+	sltu	$tmp1,$in1,$tmp1
+	addu	$in1,$ctx
+	sltu	$ctx,$in1,$ctx
+	addu	$ctx,$tmp1
+
+	addu	$in2,$tmp2
+	sltu	$tmp2,$in2,$tmp2
+	addu	$in2,$ctx
+	sltu	$ctx,$in2,$ctx
+	addu	$ctx,$tmp2
+
+	addu	$in3,$tmp3
+	addu	$in3,$ctx
+
+	srl	$tmp0,$in0,8		# write mac value
+	srl	$tmp1,$in0,16
+	srl	$tmp2,$in0,24
+	sb	$in0, 0($mac)
+	sb	$tmp0,1($mac)
+	srl	$tmp0,$in1,8
+	sb	$tmp1,2($mac)
+	srl	$tmp1,$in1,16
+	sb	$tmp2,3($mac)
+	srl	$tmp2,$in1,24
+	sb	$in1, 4($mac)
+	sb	$tmp0,5($mac)
+	srl	$tmp0,$in2,8
+	sb	$tmp1,6($mac)
+	srl	$tmp1,$in2,16
+	sb	$tmp2,7($mac)
+	srl	$tmp2,$in2,24
+	sb	$in2, 8($mac)
+	sb	$tmp0,9($mac)
+	srl	$tmp0,$in3,8
+	sb	$tmp1,10($mac)
+	srl	$tmp1,$in3,16
+	sb	$tmp2,11($mac)
+	srl	$tmp2,$in3,24
+	sb	$in3, 12($mac)
+	sb	$tmp0,13($mac)
+	sb	$tmp1,14($mac)
+	sb	$tmp2,15($mac)
+
+	jr	$ra
+.end	poly1305_emit
+.rdata
+.asciiz	"Poly1305 for MIPS32, CRYPTOGAMS by \@dot-asm"
+.align	2
+___
+}
+}}}
+
+$output=pop and open STDOUT,">$output";
+print $code;
+close STDOUT;
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h
index c99166e..255afcd 100644
--- a/arch/mips/include/asm/compat.h
+++ b/arch/mips/include/asm/compat.h
@@ -100,24 +100,6 @@
 
 #define COMPAT_OFF_T_MAX	0x7fffffff
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	/* cast to a __user pointer via "unsigned long" makes sparse happy */
-	return (void __user *)(unsigned long)(long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 static inline void __user *arch_compat_alloc_user_space(long len)
 {
 	struct pt_regs *regs = (struct pt_regs *)
diff --git a/arch/mips/include/asm/seccomp.h b/arch/mips/include/asm/seccomp.h
index e383d7e..aa80958 100644
--- a/arch/mips/include/asm/seccomp.h
+++ b/arch/mips/include/asm/seccomp.h
@@ -9,12 +9,12 @@
 	static const int syscalls_O32[] = {
 		__NR_O32_Linux + 3, __NR_O32_Linux + 4,
 		__NR_O32_Linux + 1, __NR_O32_Linux + 193,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 	static const int syscalls_N32[] = {
 		__NR_N32_Linux + 0, __NR_N32_Linux + 1,
 		__NR_N32_Linux + 58, __NR_N32_Linux + 211,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 
 	if (IS_ENABLED(CONFIG_MIPS32_O32) && test_thread_flag(TIF_32BIT_REGS))
diff --git a/arch/mips/kernel/syscalls/syscall_n32.tbl b/arch/mips/kernel/syscalls/syscall_n32.tbl
index e7c5ab3..12a9953 100644
--- a/arch/mips/kernel/syscalls/syscall_n32.tbl
+++ b/arch/mips/kernel/syscalls/syscall_n32.tbl
@@ -374,3 +374,4 @@
 433	n32	fspick				sys_fspick
 434	n32	pidfd_open			sys_pidfd_open
 435	n32	clone3				__sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/mips/kernel/syscalls/syscall_n64.tbl b/arch/mips/kernel/syscalls/syscall_n64.tbl
index 13cd665..4233b31 100644
--- a/arch/mips/kernel/syscalls/syscall_n64.tbl
+++ b/arch/mips/kernel/syscalls/syscall_n64.tbl
@@ -350,3 +350,4 @@
 433	n64	fspick				sys_fspick
 434	n64	pidfd_open			sys_pidfd_open
 435	n64	clone3				__sys_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/mips/mm/dma-noncoherent.c b/arch/mips/mm/dma-noncoherent.c
index 1d4d57d..35cfcf9 100644
--- a/arch/mips/mm/dma-noncoherent.c
+++ b/arch/mips/mm/dma-noncoherent.c
@@ -147,4 +147,5 @@
 {
 	dev->dma_coherent = coherent;
 }
+EXPORT_SYMBOL_GPL(arch_setup_dma_ops);
 #endif
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c
index f589aa8..e62ee6f 100644
--- a/arch/mips/mm/fault.c
+++ b/arch/mips/mm/fault.c
@@ -44,7 +44,7 @@
 	const int field = sizeof(unsigned long) * 2;
 	int si_code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	static DEFINE_RATELIMIT_STATE(ratelimit_state, 5 * HZ, 10);
 
@@ -154,7 +154,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
@@ -178,7 +178,6 @@
 			tsk->min_flt++;
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
index cef1522..cba32ef 100644
--- a/arch/mips/mm/hugetlbpage.c
+++ b/arch/mips/mm/hugetlbpage.c
@@ -21,8 +21,8 @@
 #include <asm/tlb.h>
 #include <asm/tlbflush.h>
 
-pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr,
-		      unsigned long sz)
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
+		      unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgd;
 	pud_t *pud;
diff --git a/arch/mips/vdso/Makefile b/arch/mips/vdso/Makefile
index d3cd9c4..d6429dc 100644
--- a/arch/mips/vdso/Makefile
+++ b/arch/mips/vdso/Makefile
@@ -19,6 +19,10 @@
 	$(CLANG_FLAGS) \
 	-D__VDSO__
 
+ifndef CONFIG_64BIT
+ccflags-vdso += -DBUILD_VDSO32
+endif
+
 #
 # The -fno-jump-tables flag only prevents the compiler from generating
 # jump tables but does not prevent the compiler from emitting absolute
diff --git a/arch/nds32/mm/fault.c b/arch/nds32/mm/fault.c
index 064ae5d..52097d5 100644
--- a/arch/nds32/mm/fault.c
+++ b/arch/nds32/mm/fault.c
@@ -76,7 +76,7 @@
 	int si_code;
 	vm_fault_t fault;
 	unsigned int mask = VM_READ | VM_WRITE | VM_EXEC;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	error_code = error_code & (ITYPE_mskINST | ITYPE_mskETYPE);
 	tsk = current;
@@ -210,7 +210,7 @@
 	 * signal first. We do not need to release the mmap_sem because it
 	 * would already be released in __lock_page_or_retry in mm/filemap.c.
 	 */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			goto no_context;
 		return;
@@ -242,7 +242,6 @@
 				      1, regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/nios2/mm/fault.c b/arch/nios2/mm/fault.c
index 6a2e716..ec9d8a9 100644
--- a/arch/nios2/mm/fault.c
+++ b/arch/nios2/mm/fault.c
@@ -47,7 +47,7 @@
 	struct mm_struct *mm = tsk->mm;
 	int code = SEGV_MAPERR;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	cause >>= 2;
 
@@ -133,7 +133,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -157,9 +157,6 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c
index 5d4d3a9..8af1cc7 100644
--- a/arch/openrisc/mm/fault.c
+++ b/arch/openrisc/mm/fault.c
@@ -50,7 +50,7 @@
 	struct vm_area_struct *vma;
 	int si_code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 
@@ -161,7 +161,7 @@
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -181,7 +181,6 @@
 		else
 			tsk->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/parisc/include/asm/Kbuild b/arch/parisc/include/asm/Kbuild
index 9ceedf6..ae63364 100644
--- a/arch/parisc/include/asm/Kbuild
+++ b/arch/parisc/include/asm/Kbuild
@@ -19,7 +19,6 @@
 generic-y += mmiowb.h
 generic-y += percpu.h
 generic-y += preempt.h
-generic-y += seccomp.h
 generic-y += trace_clock.h
 generic-y += user.h
 generic-y += vga.h
diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h
index e03e3c8..2f4f66a 100644
--- a/arch/parisc/include/asm/compat.h
+++ b/arch/parisc/include/asm/compat.h
@@ -173,23 +173,6 @@
 #define COMPAT_ELF_NGREG 80
 typedef compat_ulong_t compat_elf_gregset_t[COMPAT_ELF_NGREG];
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	return (void __user *)(unsigned long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 static __inline__ void __user *arch_compat_alloc_user_space(long len)
 {
 	struct pt_regs *regs = &current->thread.regs;
diff --git a/arch/parisc/include/asm/seccomp.h b/arch/parisc/include/asm/seccomp.h
new file mode 100644
index 0000000..b058b22
--- /dev/null
+++ b/arch/parisc/include/asm/seccomp.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#ifdef CONFIG_64BIT
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_PARISC64
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"parisc64"
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_PARISC
+#  define SECCOMP_ARCH_COMPAT_NR	NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"parisc"
+# endif
+#else /* !CONFIG_64BIT */
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_PARISC
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"parisc"
+#endif
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/parisc/kernel/syscalls/syscall.tbl b/arch/parisc/kernel/syscalls/syscall.tbl
index 285ff51..a22d7bd6f 100644
--- a/arch/parisc/kernel/syscalls/syscall.tbl
+++ b/arch/parisc/kernel/syscalls/syscall.tbl
@@ -433,3 +433,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3_wrapper
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c
index adbd5e2..86e8c84 100644
--- a/arch/parisc/mm/fault.c
+++ b/arch/parisc/mm/fault.c
@@ -274,7 +274,7 @@
 	if (!mm)
 		goto no_context;
 
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 
@@ -304,7 +304,7 @@
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -328,14 +328,12 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-
 			/*
 			 * No need to up_read(&mm->mmap_sem) as we would
 			 * have already released it in __lock_page_or_retry
 			 * in mm/filemap.c.
 			 */
-
+			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
 	}
diff --git a/arch/parisc/mm/hugetlbpage.c b/arch/parisc/mm/hugetlbpage.c
index d578809..89762c6 100644
--- a/arch/parisc/mm/hugetlbpage.c
+++ b/arch/parisc/mm/hugetlbpage.c
@@ -45,7 +45,7 @@
 }
 
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgd;
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h
index 74d0db5..3e3cdfa 100644
--- a/arch/powerpc/include/asm/compat.h
+++ b/arch/powerpc/include/asm/compat.h
@@ -96,23 +96,6 @@
 
 #define COMPAT_OFF_T_MAX	0x7fffffff
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	return (void __user *)(unsigned long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 static inline void __user *arch_compat_alloc_user_space(long len)
 {
 	struct pt_regs *regs = current->thread.regs;
diff --git a/arch/powerpc/include/asm/seccomp.h b/arch/powerpc/include/asm/seccomp.h
index 51209f6..ac2033f 100644
--- a/arch/powerpc/include/asm/seccomp.h
+++ b/arch/powerpc/include/asm/seccomp.h
@@ -8,4 +8,27 @@
 
 #include <asm-generic/seccomp.h>
 
+#ifdef __LITTLE_ENDIAN__
+#define __SECCOMP_ARCH_LE		__AUDIT_ARCH_LE
+#define __SECCOMP_ARCH_LE_NAME		"le"
+#else
+#define __SECCOMP_ARCH_LE		0
+#define __SECCOMP_ARCH_LE_NAME
+#endif
+
+#ifdef CONFIG_PPC64
+# define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_PPC64 | __SECCOMP_ARCH_LE)
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ppc64" __SECCOMP_ARCH_LE_NAME
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		(AUDIT_ARCH_PPC | __SECCOMP_ARCH_LE)
+#  define SECCOMP_ARCH_COMPAT_NR	NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"ppc" __SECCOMP_ARCH_LE_NAME
+# endif
+#else /* !CONFIG_PPC64 */
+# define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_PPC | __SECCOMP_ARCH_LE)
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ppc" __SECCOMP_ARCH_LE_NAME
+#endif
+
 #endif	/* _ASM_POWERPC_SECCOMP_H */
diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
index fb4f610..0cd1c88 100644
--- a/arch/powerpc/kernel/nvram_64.c
+++ b/arch/powerpc/kernel/nvram_64.c
@@ -655,9 +655,7 @@
 	int rc = -1;
 
 	switch (reason) {
-	case KMSG_DUMP_RESTART:
-	case KMSG_DUMP_HALT:
-	case KMSG_DUMP_POWEROFF:
+	case KMSG_DUMP_SHUTDOWN:
 		/* These are almost always orderly shutdowns. */
 		return;
 	case KMSG_DUMP_OOPS:
diff --git a/arch/powerpc/kernel/syscalls/syscall.tbl b/arch/powerpc/kernel/syscalls/syscall.tbl
index 43f736e..5b07621 100644
--- a/arch/powerpc/kernel/syscalls/syscall.tbl
+++ b/arch/powerpc/kernel/syscalls/syscall.tbl
@@ -517,3 +517,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	nospu	clone3				ppc_clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
index 9f4a78e..ade062d 100644
--- a/arch/powerpc/mm/fault.c
+++ b/arch/powerpc/mm/fault.c
@@ -437,7 +437,7 @@
 {
 	struct vm_area_struct * vma;
 	struct mm_struct *mm = current->mm;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
  	int is_exec = TRAP(regs) == 0x400;
 	int is_user = user_mode(regs);
 	int is_write = page_fault_is_write(error_code);
@@ -585,28 +585,18 @@
 
 	major |= fault & VM_FAULT_MAJOR;
 
+	if (fault_signal_pending(fault, regs))
+		return user_mode(regs) ? 0 : SIGBUS;
+
 	/*
 	 * Handle the retry right now, the mmap_sem has been released in that
 	 * case.
 	 */
 	if (unlikely(fault & VM_FAULT_RETRY)) {
-		/* We retry only once */
 		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			/*
-			 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation.
-			 */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
-			if (!fatal_signal_pending(current))
-				goto retry;
+			goto retry;
 		}
-
-		/*
-		 * User mode? Just return to handle the fatal exception otherwise
-		 * return to bad_page_fault
-		 */
-		return is_user ? 0 : SIGBUS;
 	}
 
 	up_read(&current->mm->mmap_sem);
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index 33b3461..e3e00e2 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -116,7 +116,8 @@
  * At this point we do the placement change only for BOOK3S 64. This would
  * possibly work on other subarchs.
  */
-pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr, unsigned long sz)
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
+		      unsigned long addr, unsigned long sz)
 {
 	pgd_t *pg;
 	pud_t *pu;
diff --git a/arch/powerpc/oprofile/backtrace.c b/arch/powerpc/oprofile/backtrace.c
index 43245f4..6ffcb80 100644
--- a/arch/powerpc/oprofile/backtrace.c
+++ b/arch/powerpc/oprofile/backtrace.c
@@ -9,7 +9,7 @@
 #include <linux/sched.h>
 #include <asm/processor.h>
 #include <linux/uaccess.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/oprofile_impl.h>
 
 #define STACK_SP(STACK)		*(STACK)
diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
index 6f013e4..04d20dc 100644
--- a/arch/powerpc/perf/core-book3s.c
+++ b/arch/powerpc/perf/core-book3s.c
@@ -96,7 +96,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;
@@ -127,7 +127,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 */
 
@@ -182,7 +182,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;
@@ -207,8 +207,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;
 }
 
@@ -447,7 +446,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;
@@ -475,8 +474,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
@@ -2120,12 +2118,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/riscv/mm/fault.c b/arch/riscv/mm/fault.c
index 247b8c8..c0dd526 100644
--- a/arch/riscv/mm/fault.c
+++ b/arch/riscv/mm/fault.c
@@ -30,7 +30,7 @@
 	struct vm_area_struct *vma;
 	struct mm_struct *mm;
 	unsigned long addr, cause;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 	int code = SEGV_MAPERR;
 	vm_fault_t fault;
 
@@ -117,7 +117,7 @@
 	 * signal first. We do not need to release the mmap_sem because it
 	 * would already be released in __lock_page_or_retry in mm/filemap.c.
 	 */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(tsk))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -144,11 +144,6 @@
 				      1, regs, addr);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			/*
-			 * Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation.
-			 */
-			flags &= ~(FAULT_FLAG_ALLOW_RETRY);
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
index 63b46e3..9547cd5 100644
--- a/arch/s390/include/asm/compat.h
+++ b/arch/s390/include/asm/compat.h
@@ -177,11 +177,7 @@
 {
 	return (void __user *)(unsigned long)(uptr & 0x7fffffffUL);
 }
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
+#define compat_ptr(uptr) compat_ptr(uptr)
 
 #ifdef CONFIG_COMPAT
 
diff --git a/arch/s390/include/asm/seccomp.h b/arch/s390/include/asm/seccomp.h
index 795bbe0..71d46f0 100644
--- a/arch/s390/include/asm/seccomp.h
+++ b/arch/s390/include/asm/seccomp.h
@@ -16,4 +16,13 @@
 
 #include <asm-generic/seccomp.h>
 
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_S390X
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"s390x"
+#ifdef CONFIG_COMPAT
+# define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_S390
+# define SECCOMP_ARCH_COMPAT_NR		NR_syscalls
+# define SECCOMP_ARCH_COMPAT_NAME	"s390"
+#endif
+
 #endif	/* _ASM_S390_SECCOMP_H */
diff --git a/arch/s390/kernel/syscalls/syscall.tbl b/arch/s390/kernel/syscalls/syscall.tbl
index 3054e9c0..d1d4386 100644
--- a/arch/s390/kernel/syscalls/syscall.tbl
+++ b/arch/s390/kernel/syscalls/syscall.tbl
@@ -438,3 +438,4 @@
 433  common	fspick			sys_fspick			sys_fspick
 434  common	pidfd_open		sys_pidfd_open			sys_pidfd_open
 435  common	clone3			sys_clone3			sys_clone3
+440	common	process_madvise		sys_process_madvise         sys_process_madvise
\ No newline at end of file
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c
index 7b0bb47..aeccdb3 100644
--- a/arch/s390/mm/fault.c
+++ b/arch/s390/mm/fault.c
@@ -429,7 +429,7 @@
 
 	address = trans_exc_code & __FAIL_ADDR_MASK;
 	perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address);
-	flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	flags = FAULT_FLAG_DEFAULT;
 	if (user_mode(regs))
 		flags |= FAULT_FLAG_USER;
 	if (access == VM_WRITE || (trans_exc_code & store_indication) == 0x400)
@@ -480,8 +480,7 @@
 	 * the fault.
 	 */
 	fault = handle_mm_fault(vma, address, flags);
-	/* No reason to continue if interrupted by SIGKILL. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) {
+	if (fault_signal_pending(fault, regs)) {
 		fault = VM_FAULT_SIGNAL;
 		if (flags & FAULT_FLAG_RETRY_NOWAIT)
 			goto out_up;
@@ -514,10 +513,7 @@
 				fault = VM_FAULT_PFAULT;
 				goto out_up;
 			}
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			 * of starvation. */
-			flags &= ~(FAULT_FLAG_ALLOW_RETRY |
-				   FAULT_FLAG_RETRY_NOWAIT);
+			flags &= ~FAULT_FLAG_RETRY_NOWAIT;
 			flags |= FAULT_FLAG_TRIED;
 			down_read(&mm->mmap_sem);
 			goto retry;
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index ff8234b..0697e4ad 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -189,7 +189,7 @@
 	return pte;
 }
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgdp;
diff --git a/arch/sh/include/asm/seccomp.h b/arch/sh/include/asm/seccomp.h
index 54111e4..d457839 100644
--- a/arch/sh/include/asm/seccomp.h
+++ b/arch/sh/include/asm/seccomp.h
@@ -8,4 +8,14 @@
 #define __NR_seccomp_exit __NR_exit
 #define __NR_seccomp_sigreturn __NR_rt_sigreturn
 
+#ifdef CONFIG_CPU_LITTLE_ENDIAN
+#define __SECCOMP_ARCH_LE		__AUDIT_ARCH_LE
+#else
+#define __SECCOMP_ARCH_LE		0
+#endif
+
+#define SECCOMP_ARCH_NATIVE		(AUDIT_ARCH_SH | __SECCOMP_ARCH_LE)
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"sh"
+
 #endif /* __ASM_SECCOMP_H */
diff --git a/arch/sh/include/uapi/asm/unistd_64.h b/arch/sh/include/uapi/asm/unistd_64.h
index 75da548..aa747f9 100644
--- a/arch/sh/include/uapi/asm/unistd_64.h
+++ b/arch/sh/include/uapi/asm/unistd_64.h
@@ -417,7 +417,7 @@
 #define __NR_pwritev2		393
 
 #ifdef __KERNEL__
-#define __NR_syscalls		394
+#define __NR_syscalls 441
 #endif
 
 #endif /* __ASM_SH_UNISTD_64_H */
diff --git a/arch/sh/kernel/syscalls/syscall.tbl b/arch/sh/kernel/syscalls/syscall.tbl
index b5ed26c..fef50a9 100644
--- a/arch/sh/kernel/syscalls/syscall.tbl
+++ b/arch/sh/kernel/syscalls/syscall.tbl
@@ -438,3 +438,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c
index 5f51456..13ee4d2 100644
--- a/arch/sh/mm/fault.c
+++ b/arch/sh/mm/fault.c
@@ -302,25 +302,25 @@
 	 * Pagefault was interrupted by SIGKILL. We have no reason to
 	 * continue pagefault.
 	 */
-	if (fatal_signal_pending(current)) {
-		if (!(fault & VM_FAULT_RETRY))
-			up_read(&current->mm->mmap_sem);
+	if (fault_signal_pending(fault, regs)) {
 		if (!user_mode(regs))
 			no_context(regs, error_code, address);
 		return 1;
 	}
 
+	/* Release mmap_sem first if necessary */
+	if (!(fault & VM_FAULT_RETRY))
+		up_read(&current->mm->mmap_sem);
+
 	if (!(fault & VM_FAULT_ERROR))
 		return 0;
 
 	if (fault & VM_FAULT_OOM) {
 		/* Kernel mode? Handle exceptions or die: */
 		if (!user_mode(regs)) {
-			up_read(&current->mm->mmap_sem);
 			no_context(regs, error_code, address);
 			return 1;
 		}
-		up_read(&current->mm->mmap_sem);
 
 		/*
 		 * We ran out of memory, call the OOM killer, and return the
@@ -380,7 +380,7 @@
 	struct mm_struct *mm;
 	struct vm_area_struct * vma;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -481,7 +481,6 @@
 				      regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/*
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
index 960deb1..1f4fb22 100644
--- a/arch/sh/mm/hugetlbpage.c
+++ b/arch/sh/mm/hugetlbpage.c
@@ -22,7 +22,7 @@
 #include <asm/tlbflush.h>
 #include <asm/cacheflush.h>
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgd;
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h
index 30b1763..40a267b3 100644
--- a/arch/sparc/include/asm/compat.h
+++ b/arch/sparc/include/asm/compat.h
@@ -125,23 +125,6 @@
 
 #define COMPAT_OFF_T_MAX	0x7fffffff
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	return (void __user *)(unsigned long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 #ifdef CONFIG_COMPAT
 static inline void __user *arch_compat_alloc_user_space(long len)
 {
diff --git a/arch/sparc/kernel/syscalls/syscall.tbl b/arch/sparc/kernel/syscalls/syscall.tbl
index 8c8cc75..07ab20a 100644
--- a/arch/sparc/kernel/syscalls/syscall.tbl
+++ b/arch/sparc/kernel/syscalls/syscall.tbl
@@ -481,3 +481,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 # 435 reserved for clone3
+440	common	process_madvise		sys_process_madvise
diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c
index 8d69de1..a8c8cb3 100644
--- a/arch/sparc/mm/fault_32.c
+++ b/arch/sparc/mm/fault_32.c
@@ -168,7 +168,7 @@
 	int from_user = !(regs->psr & PSR_PS);
 	int code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	if (text_fault)
 		address = regs->pc;
@@ -237,7 +237,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -261,7 +261,6 @@
 				      1, regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c
index 2371fb6..eb4cfd5 100644
--- a/arch/sparc/mm/fault_64.c
+++ b/arch/sparc/mm/fault_64.c
@@ -267,7 +267,7 @@
 	int si_code, fault_code;
 	vm_fault_t fault;
 	unsigned long address, mm_rss;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	fault_code = get_thread_fault_code();
 
@@ -421,7 +421,7 @@
 
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		goto exit_exception;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -445,7 +445,6 @@
 				      1, regs, address);
 		}
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			/* No need to up_read(&mm->mmap_sem) as we would
diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
index f78793a..9aabfae 100644
--- a/arch/sparc/mm/hugetlbpage.c
+++ b/arch/sparc/mm/hugetlbpage.c
@@ -273,7 +273,7 @@
 	return size;
 }
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgd;
diff --git a/arch/um/configs/kunit_defconfig b/arch/um/configs/kunit_defconfig
new file mode 100644
index 0000000..9235b7d
--- /dev/null
+++ b/arch/um/configs/kunit_defconfig
@@ -0,0 +1,3 @@
+CONFIG_KUNIT=y
+CONFIG_KUNIT_TEST=y
+CONFIG_KUNIT_EXAMPLE_TEST=y
diff --git a/arch/um/kernel/irq.c b/arch/um/kernel/irq.c
index 3577118..9410424 100644
--- a/arch/um/kernel/irq.c
+++ b/arch/um/kernel/irq.c
@@ -480,7 +480,7 @@
 	irq_set_chip_and_handler(TIMER_IRQ, &SIGVTALRM_irq_type, handle_edge_irq);
 
 
-	for (i = 1; i <= LAST_IRQ; i++)
+	for (i = 1; i < NR_IRQS; i++)
 		irq_set_chip_and_handler(i, &normal_irq_type, handle_edge_irq);
 	/* Initialize EPOLL Loop */
 	os_setup_epoll();
diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index e62296c..8544dae6 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -32,7 +32,7 @@
 	pmd_t *pmd;
 	pte_t *pte;
 	int err = -EFAULT;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	*code_out = SEGV_MAPERR;
 
@@ -96,7 +96,6 @@
 			else
 				current->min_flt++;
 			if (fault & VM_FAULT_RETRY) {
-				flags &= ~FAULT_FLAG_ALLOW_RETRY;
 				flags |= FAULT_FLAG_TRIED;
 
 				goto retry;
diff --git a/arch/um/os-Linux/umid.c b/arch/um/os-Linux/umid.c
index ea5c60f..4c19df8 100644
--- a/arch/um/os-Linux/umid.c
+++ b/arch/um/os-Linux/umid.c
@@ -135,15 +135,16 @@
  */
 static inline int is_umdir_used(char *dir)
 {
-	char pid[sizeof("nnnnn\0")], *end, *file;
+	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
+	char pid[sizeof("nnnnn\0")], *end;
 	int dead, fd, p, n, err;
-	size_t filelen = strlen(dir) + sizeof("/pid") + 1;
 
-	file = malloc(filelen);
-	if (!file)
-		return -ENOMEM;
-
-	snprintf(file, filelen, "%s/pid", dir);
+	n = snprintf(file, sizeof(file), "%s/pid", dir);
+	if (n >= sizeof(file)) {
+		printk(UM_KERN_ERR "is_umdir_used - pid filename too long\n");
+		err = -E2BIG;
+		goto out;
+	}
 
 	dead = 0;
 	fd = open(file, O_RDONLY);
@@ -184,7 +185,6 @@
 out_close:
 	close(fd);
 out:
-	free(file);
 	return 0;
 }
 
@@ -210,21 +210,18 @@
 
 static void __init create_pid_file(void)
 {
-	char pid[sizeof("nnnnn\0")], *file;
+	char file[strlen(uml_dir) + UMID_LEN + sizeof("/pid\0")];
+	char pid[sizeof("nnnnn\0")];
 	int fd, n;
 
-	file = malloc(strlen(uml_dir) + UMID_LEN + sizeof("/pid\0"));
-	if (!file)
-		return;
-
 	if (umid_file_name("pid", file, sizeof(file)))
-		goto out;
+		return;
 
 	fd = open(file, O_RDWR | O_CREAT | O_EXCL, 0644);
 	if (fd < 0) {
 		printk(UM_KERN_ERR "Open of machine pid file \"%s\" failed: "
 		       "%s\n", file, strerror(errno));
-		goto out;
+		return;
 	}
 
 	snprintf(pid, sizeof(pid), "%d\n", getpid());
@@ -234,8 +231,6 @@
 		       errno);
 
 	close(fd);
-out:
-	free(file);
 }
 
 int __init set_umid(char *name)
@@ -390,19 +385,13 @@
 
 static void remove_umid_dir(void)
 {
-	char *dir, err;
-
-	dir = malloc(strlen(uml_dir) + UMID_LEN + 1);
-	if (!dir)
-		return;
+	char dir[strlen(uml_dir) + UMID_LEN + 1], err;
 
 	sprintf(dir, "%s%s", uml_dir, umid);
 	err = remove_files_and_dir(dir);
 	if (err)
 		os_warn("%s - remove_files_and_dir failed with err = %d\n",
 			__func__, err);
-
-	free(dir);
 }
 
 __uml_exitcall(remove_umid_dir);
diff --git a/arch/unicore32/mm/fault.c b/arch/unicore32/mm/fault.c
index 76342de..a9bd08f 100644
--- a/arch/unicore32/mm/fault.c
+++ b/arch/unicore32/mm/fault.c
@@ -202,7 +202,7 @@
 	struct mm_struct *mm;
 	int sig, code;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -250,7 +250,7 @@
 	 * signal first. We do not need to release the mmap_sem because
 	 * it would already be released in __lock_page_or_retry in
 	 * mm/filemap.c. */
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return 0;
 
 	if (!(fault & VM_FAULT_ERROR) && (flags & FAULT_FLAG_ALLOW_RETRY)) {
@@ -259,9 +259,7 @@
 		else
 			tsk->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			/* Clear FAULT_FLAG_ALLOW_RETRY to avoid any risk
-			* of starvation. */
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
+			flags |= FAULT_FLAG_TRIED;
 			goto retry;
 		}
 	}
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index c6c7159..ffc26b8 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -90,6 +90,8 @@
 	select ARCH_SUPPORTS_ACPI
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_NUMA_BALANCING	if X86_64
+	select ARCH_SUPPORTS_LTO_CLANG		if X86_64
+	select ARCH_SUPPORTS_THINLTO		if X86_64
 	select ARCH_USE_BUILTIN_BSWAP
 	select ARCH_USE_QUEUED_RWLOCKS
 	select ARCH_USE_QUEUED_SPINLOCKS
@@ -135,17 +137,19 @@
 	select HAVE_ARCH_JUMP_LABEL
 	select HAVE_ARCH_JUMP_LABEL_RELATIVE
 	select HAVE_ARCH_KASAN			if X86_64
+	select HAVE_ARCH_KFENCE
 	select HAVE_ARCH_KGDB
 	select HAVE_ARCH_MMAP_RND_BITS		if MMU
 	select HAVE_ARCH_MMAP_RND_COMPAT_BITS	if MMU && COMPAT
 	select HAVE_ARCH_COMPAT_MMAP_BASES	if MMU && COMPAT
-	select HAVE_ARCH_PREL32_RELOCATIONS
+	select HAVE_ARCH_PREL32_RELOCATIONS	if !LTO_CLANG
 	select HAVE_ARCH_SECCOMP_FILTER
 	select HAVE_ARCH_THREAD_STRUCT_WHITELIST
 	select HAVE_ARCH_STACKLEAK
 	select HAVE_ARCH_TRACEHOOK
 	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
 	select HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD if X86_64
+	select HAVE_ARCH_USERFAULTFD_MINOR	if X86_64 && USERFAULTFD
 	select HAVE_ARCH_VMAP_STACK		if X86_64
 	select HAVE_ARCH_WITHIN_STACK_FRAMES
 	select HAVE_ASM_MODVERSIONS
@@ -189,6 +193,7 @@
 	select HAVE_MIXED_BREAKPOINTS_REGS
 	select HAVE_MOD_ARCH_SPECIFIC
 	select HAVE_MOVE_PMD
+	select HAVE_MOVE_PUD
 	select HAVE_NMI
 	select HAVE_OPROFILE
 	select HAVE_OPTPROBES
@@ -204,7 +209,7 @@
 	select HAVE_RELIABLE_STACKTRACE		if X86_64 && (UNWINDER_FRAME_POINTER || UNWINDER_ORC) && STACK_VALIDATION
 	select HAVE_FUNCTION_ARG_ACCESS_API
 	select HAVE_STACKPROTECTOR		if CC_HAS_SANE_STACKPROTECTOR
-	select HAVE_STACK_VALIDATION		if X86_64
+	select HAVE_STACK_VALIDATION		if X86_64 && !LTO_CLANG
 	select HAVE_RSEQ
 	select HAVE_SYSCALL_TRACEPOINTS
 	select HAVE_UNSTABLE_SCHED_CLOCK
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug
index bf9cd83..49b2dc2 100644
--- a/arch/x86/Kconfig.debug
+++ b/arch/x86/Kconfig.debug
@@ -291,7 +291,7 @@
 
 config UNWINDER_ORC
 	bool "ORC unwinder"
-	depends on X86_64
+	depends on X86_64 && !LTO_CLANG
 	select STACK_VALIDATION
 	---help---
 	  This option enables the ORC (Oops Rewind Capability) unwinder for
diff --git a/arch/x86/Makefile b/arch/x86/Makefile
index 69f0cb01..8ffc1e5 100644
--- a/arch/x86/Makefile
+++ b/arch/x86/Makefile
@@ -198,9 +198,10 @@
 avx512_instr :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,-DCONFIG_AS_AVX512=1)
 sha1_ni_instr :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA1_NI=1)
 sha256_ni_instr :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,-DCONFIG_AS_SHA256_NI=1)
+adx_instr := $(call as-instr,adox %r10$(comma)%r10,-DCONFIG_AS_ADX=1)
 
-KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
-KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr)
+KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
+KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) $(avx2_instr) $(avx512_instr) $(sha1_ni_instr) $(sha256_ni_instr) $(adx_instr)
 
 KBUILD_LDFLAGS := -m elf_$(UTS_MACHINE)
 
@@ -213,6 +214,12 @@
 KBUILD_LDFLAGS += $(call ld-option, -z max-page-size=0x200000)
 endif
 
+ifdef CONFIG_LTO_CLANG
+ifeq ($(shell test $(CONFIG_LLD_VERSION) -lt 130000; echo $$?),0)
+KBUILD_LDFLAGS	+= -plugin-opt=-stack-alignment=$(if $(CONFIG_X86_32),4,8)
+endif
+endif
+
 # Workaround for a gcc prelease that unfortunately was shipped in a suse release
 KBUILD_CFLAGS += -Wno-sign-compare
 #
diff --git a/arch/x86/OWNERS b/arch/x86/OWNERS
new file mode 100644
index 0000000..ae2c29f
--- /dev/null
+++ b/arch/x86/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/arch/x86/OWNERS
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index 292b5bc..aef6604 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -57,6 +57,9 @@
 KBUILD_LDFLAGS += $(shell $(LD) --help 2>&1 | grep -q "\-z noreloc-overflow" \
 	&& echo "-z noreloc-overflow -pie --no-dynamic-linker")
 endif
+ifeq ($(CONFIG_RELOCATABLE), y)
+KBUILD_LDFLAGS += -z notext
+endif
 LDFLAGS_vmlinux := -T
 
 hostprogs-y	:= mkpiggy
diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig
new file mode 100644
index 0000000..605107e
--- /dev/null
+++ b/arch/x86/configs/gki_defconfig
@@ -0,0 +1,563 @@
+CONFIG_UAPI_HEADER_TEST=y
+CONFIG_KERNEL_LZ4=y
+# CONFIG_USELIB is not set
+CONFIG_AUDIT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_PREEMPT=y
+CONFIG_IRQ_TIME_ACCOUNTING=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_IKHEADERS=y
+CONFIG_UCLAMP_TASK=y
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_MEMCG_SWAP=y
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_UCLAMP_TASK_GROUP=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CPUSETS=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_BPF=y
+CONFIG_NAMESPACES=y
+# CONFIG_PID_NS is not set
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_XZ is not set
+# CONFIG_RD_LZO is not set
+CONFIG_BOOT_CONFIG=y
+# CONFIG_SYSFS_SYSCALL is not set
+# CONFIG_FHANDLE is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_BPF_SYSCALL=y
+CONFIG_BPF_JIT_ALWAYS_ON=y
+CONFIG_USERFAULTFD=y
+# CONFIG_RSEQ is not set
+CONFIG_EMBEDDED=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB_MERGE_DEFAULT is not set
+CONFIG_SLAB_FREELIST_RANDOM=y
+CONFIG_SLAB_FREELIST_HARDENED=y
+CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
+CONFIG_PROFILING=y
+CONFIG_SMP=y
+CONFIG_X86_X2APIC=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_PARAVIRT=y
+CONFIG_NR_CPUS=32
+# CONFIG_X86_MCE is not set
+CONFIG_EFI=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="cgroup_disable=pressure"
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=0
+# CONFIG_PM_WAKELOCKS_GC is not set
+CONFIG_CPU_FREQ_STAT=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_IA32_EMULATION=y
+CONFIG_KVM=y
+CONFIG_KVM_INTEL=y
+CONFIG_KVM_AMD=y
+CONFIG_VHOST_VSOCK=y
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+# CONFIG_THINLTO is not set
+CONFIG_LTO_CLANG=y
+CONFIG_CFI_CLANG=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+CONFIG_BLK_INLINE_ENCRYPTION=y
+CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
+CONFIG_GKI_HACKS_TO_FIX=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_BINFMT_MISC=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
+CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y
+CONFIG_CLEANCACHE=y
+CONFIG_CMA=y
+CONFIG_CMA_AREAS=16
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_XFRM_USER=y
+CONFIG_XFRM_INTERFACE=y
+CONFIG_XFRM_MIGRATE=y
+CONFIG_XFRM_STATISTICS=y
+CONFIG_NET_KEY=y
+CONFIG_XDP_SOCKETS=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPVTI=y
+CONFIG_INET_ESP=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_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_IPV6_MIP6=y
+CONFIG_IPV6_VTI=y
+CONFIG_IPV6_GRE=y
+CONFIG_IPV6_MULTIPLE_TABLES=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_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_HASHLIMIT=y
+CONFIG_NETFILTER_XT_MATCH_HELPER=y
+CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
+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_QUOTA2_LOG=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_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_RPFILTER=y
+CONFIG_IP6_NF_FILTER=y
+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_TBF=y
+CONFIG_NET_SCH_INGRESS=y
+CONFIG_NET_CLS_BASIC=y
+CONFIG_NET_CLS_TCINDEX=y
+CONFIG_NET_CLS_FW=y
+CONFIG_NET_CLS_U32=y
+CONFIG_NET_CLS_BPF=y
+CONFIG_NET_CLS_MATCHALL=y
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_U32=y
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=y
+CONFIG_NET_ACT_GACT=y
+CONFIG_NET_ACT_MIRRED=y
+CONFIG_VSOCKETS=y
+CONFIG_BPF_JIT=y
+CONFIG_CAN=y
+CONFIG_BT=y
+CONFIG_BT_RFCOMM=y
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_HIDP=y
+CONFIG_BT_HCIBTSDIO=y
+CONFIG_BT_HCIUART=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_CFG80211=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_CRDA_SUPPORT is not set
+CONFIG_MAC80211=y
+CONFIG_RFKILL=y
+CONFIG_PCI=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_PCIEAER is not set
+CONFIG_PCI_MSI=y
+CONFIG_PCI_IOV=y
+CONFIG_PCIE_DW_PLAT_EP=y
+CONFIG_PCI_ENDPOINT=y
+CONFIG_FW_LOADER_USER_HELPER=y
+CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
+# CONFIG_FW_CACHE is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_GNSS=y
+CONFIG_OF=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_UID_SYS_STATS=y
+CONFIG_SCSI=y
+# CONFIG_SCSI_PROC_FS is not set
+CONFIG_BLK_DEV_SD=y
+CONFIG_SCSI_UFSHCD=y
+CONFIG_SCSI_UFSHCD_PCI=y
+CONFIG_SCSI_UFSHCD_PLATFORM=y
+CONFIG_SCSI_UFS_DWC_TC_PLATFORM=y
+CONFIG_SCSI_UFS_BSG=y
+CONFIG_SCSI_UFS_CRYPTO=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_DM_BOW=y
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+CONFIG_WIREGUARD=y
+CONFIG_IFB=y
+CONFIG_TUN=y
+CONFIG_VETH=y
+# CONFIG_ETHERNET is not set
+CONFIG_PHYLIB=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_USBNET=y
+# CONFIG_USB_NET_AX8817X is not set
+# CONFIG_USB_NET_AX88179_178A 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_USB_NET_AQC111=y
+# 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_INPUT_EVDEV=y
+CONFIG_KEYBOARD_GPIO=y
+# CONFIG_INPUT_MOUSE is not set
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=y
+# 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_OF_PLATFORM=y
+CONFIG_SERIAL_DEV_BUS=y
+CONFIG_HW_RANDOM=y
+CONFIG_HPET=y
+# 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_STATISTICS=y
+CONFIG_THERMAL_WRITABLE_TRIPS=y
+CONFIG_THERMAL_GOV_USER_SPACE=y
+CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
+CONFIG_CPU_THERMAL=y
+CONFIG_DEVFREQ_THERMAL=y
+CONFIG_THERMAL_EMULATION=y
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+CONFIG_MFD_SYSCON=y
+CONFIG_REGULATOR=y
+CONFIG_REGULATOR_FIXED_VOLTAGE=y
+CONFIG_RC_CORE=y
+# CONFIG_RC_MAP is not set
+CONFIG_LIRC=y
+CONFIG_BPF_LIRC_MODE2=y
+CONFIG_RC_DECODERS=y
+CONFIG_RC_DEVICES=y
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_CEC_SUPPORT=y
+CONFIG_MEDIA_CEC_RC=y
+CONFIG_MEDIA_USB_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_USB_GSPCA=y
+CONFIG_V4L_PLATFORM_DRIVERS=y
+CONFIG_V4L_MEM2MEM_DRIVERS=y
+CONFIG_CEC_PLATFORM_DRIVERS=y
+# CONFIG_VIDEO_IR_I2C is not set
+CONFIG_DRM=y
+# CONFIG_DRM_FBDEV_EMULATION 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_DRIVERS is not set
+CONFIG_SND_USB_AUDIO=y
+CONFIG_SND_SOC=y
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=y
+CONFIG_HID_APPLE=y
+CONFIG_HID_PRODIKEYS=y
+CONFIG_HID_ELECOM=y
+CONFIG_HID_UCLOGIC=y
+CONFIG_HID_LOGITECH=y
+CONFIG_HID_LOGITECH_DJ=y
+CONFIG_HID_MAGICMOUSE=y
+CONFIG_HID_MICROSOFT=y
+CONFIG_HID_MULTITOUCH=y
+CONFIG_HID_NINTENDO=y
+CONFIG_HID_PICOLCD=y
+CONFIG_HID_PLANTRONICS=y
+CONFIG_HID_PLAYSTATION=y
+CONFIG_PLAYSTATION_FF=y
+CONFIG_HID_ROCCAT=y
+CONFIG_HID_SONY=y
+CONFIG_SONY_FF=y
+CONFIG_HID_STEAM=y
+CONFIG_HID_WACOM=y
+CONFIG_HID_WIIMOTE=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_ACM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_UAS=y
+CONFIG_USB_DWC3=y
+CONFIG_USB_GADGET=y
+CONFIG_USB_DUMMY_HCD=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_UEVENT=y
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_RNDIS=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_MIDI=y
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_TYPEC=y
+CONFIG_TYPEC_TCPM=y
+CONFIG_TYPEC_UCSI=y
+CONFIG_MMC=y
+# CONFIG_PWRSEQ_EMMC is not set
+# CONFIG_PWRSEQ_SIMPLE is not set
+CONFIG_MMC_CRYPTO=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_LEDS_CLASS_FLASH=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_RTC_CLASS=y
+CONFIG_DMABUF_HEAPS=y
+CONFIG_DMABUF_SYSFS_STATS=y
+CONFIG_UIO=y
+CONFIG_STAGING=y
+CONFIG_ASHMEM=y
+CONFIG_ION=y
+CONFIG_ION_SYSTEM_HEAP=y
+CONFIG_REMOTEPROC=y
+CONFIG_RPMSG_CHAR=y
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_IIO=y
+CONFIG_IIO_BUFFER=y
+CONFIG_IIO_TRIGGER=y
+CONFIG_RAS=y
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=y
+CONFIG_ANDROID_VENDOR_HOOKS=y
+CONFIG_LIBNVDIMM=y
+# CONFIG_ND_BLK is not set
+CONFIG_INTERCONNECT=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_F2FS_FS=y
+CONFIG_F2FS_FS_SECURITY=y
+CONFIG_F2FS_FS_COMPRESSION=y
+CONFIG_FS_ENCRYPTION=y
+CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
+CONFIG_FS_VERITY=y
+CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y
+# CONFIG_DNOTIFY is not set
+CONFIG_QUOTA=y
+CONFIG_QFMT_V2=y
+CONFIG_FUSE_FS=y
+CONFIG_VIRTIO_FS=y
+CONFIG_OVERLAY_FS=y
+CONFIG_INCREMENTAL_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_PSTORE=y
+CONFIG_PSTORE_CONSOLE=y
+CONFIG_PSTORE_PMSG=y
+CONFIG_PSTORE_RAM=y
+CONFIG_EROFS_FS=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_UNICODE=y
+CONFIG_SECURITY=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_HARDENED_USERCOPY=y
+# CONFIG_HARDENED_USERCOPY_FALLBACK is not set
+CONFIG_STATIC_USERMODEHELPER=y
+CONFIG_STATIC_USERMODEHELPER_PATH=""
+CONFIG_SECURITY_SELINUX=y
+CONFIG_INIT_STACK_ALL_ZERO=y
+CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y
+CONFIG_CRYPTO_CHACHA20POLY1305=y
+CONFIG_CRYPTO_ADIANTUM=y
+CONFIG_CRYPTO_XCBC=y
+CONFIG_CRYPTO_BLAKE2B=y
+CONFIG_CRYPTO_SHA256_SSSE3=y
+CONFIG_CRYPTO_AES_NI_INTEL=y
+CONFIG_CRYPTO_LZ4=y
+CONFIG_CRYPTO_ANSI_CPRNG=y
+CONFIG_CRC8=y
+CONFIG_XZ_DEC=y
+CONFIG_DMA_CMA=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_DEBUG_FS=y
+CONFIG_HEADERS_INSTALL=y
+# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_KFENCE=y
+CONFIG_KFENCE_SAMPLE_INTERVAL=500
+CONFIG_KFENCE_NUM_OBJECTS=63
+CONFIG_SOFTLOCKUP_DETECTOR=y
+# CONFIG_DETECT_HUNG_TASK is not set
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_PANIC_TIMEOUT=5
+CONFIG_SCHEDSTATS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_UBSAN=y
+CONFIG_UBSAN_TRAP=y
+# CONFIG_UBSAN_MISC is not set
diff --git a/arch/x86/crypto/.gitignore b/arch/x86/crypto/.gitignore
new file mode 100644
index 0000000..30be040
--- /dev/null
+++ b/arch/x86/crypto/.gitignore
@@ -0,0 +1 @@
+poly1305-x86_64-cryptogams.S
diff --git a/arch/x86/crypto/Makefile b/arch/x86/crypto/Makefile
index 759b1a9..8c2e9ea 100644
--- a/arch/x86/crypto/Makefile
+++ b/arch/x86/crypto/Makefile
@@ -11,6 +11,7 @@
 avx512_supported :=$(call as-instr,vpmovm2b %k1$(comma)%zmm5,yes,no)
 sha1_ni_supported :=$(call as-instr,sha1msg1 %xmm0$(comma)%xmm1,yes,no)
 sha256_ni_supported :=$(call as-instr,sha256msg1 %xmm0$(comma)%xmm1,yes,no)
+adx_supported := $(call as-instr,adox %r10$(comma)%r10,yes,no)
 
 obj-$(CONFIG_CRYPTO_GLUE_HELPER_X86) += glue_helper.o
 
@@ -40,6 +41,11 @@
 obj-$(CONFIG_CRYPTO_NHPOLY1305_SSE2) += nhpoly1305-sse2.o
 obj-$(CONFIG_CRYPTO_NHPOLY1305_AVX2) += nhpoly1305-avx2.o
 
+# These modules require the assembler to support ADX.
+ifeq ($(adx_supported),yes)
+	obj-$(CONFIG_CRYPTO_CURVE25519_X86) += curve25519-x86_64.o
+endif
+
 # These modules require assembler to support AVX.
 ifeq ($(avx_supported),yes)
 	obj-$(CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64) += \
@@ -48,6 +54,7 @@
 	obj-$(CONFIG_CRYPTO_CAST6_AVX_X86_64) += cast6-avx-x86_64.o
 	obj-$(CONFIG_CRYPTO_TWOFISH_AVX_X86_64) += twofish-avx-x86_64.o
 	obj-$(CONFIG_CRYPTO_SERPENT_AVX_X86_64) += serpent-avx-x86_64.o
+	obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += blake2s-x86_64.o
 endif
 
 # These modules require assembler to support AVX2.
@@ -70,6 +77,11 @@
 aegis128-aesni-y := aegis128-aesni-asm.o aegis128-aesni-glue.o
 
 nhpoly1305-sse2-y := nh-sse2-x86_64.o nhpoly1305-sse2-glue.o
+blake2s-x86_64-y := blake2s-core.o blake2s-glue.o
+poly1305-x86_64-y := poly1305-x86_64-cryptogams.o poly1305_glue.o
+ifneq ($(CONFIG_CRYPTO_POLY1305_X86_64),)
+targets += poly1305-x86_64-cryptogams.S
+endif
 
 ifeq ($(avx_supported),yes)
 	camellia-aesni-avx-x86_64-y := camellia-aesni-avx-asm_64.o \
@@ -98,10 +110,8 @@
 aesni-intel-$(CONFIG_64BIT) += aesni-intel_avx-x86_64.o aes_ctrby8_avx-x86_64.o
 ghash-clmulni-intel-y := ghash-clmulni-intel_asm.o ghash-clmulni-intel_glue.o
 sha1-ssse3-y := sha1_ssse3_asm.o sha1_ssse3_glue.o
-poly1305-x86_64-y := poly1305-sse2-x86_64.o poly1305_glue.o
 ifeq ($(avx2_supported),yes)
 sha1-ssse3-y += sha1_avx2_x86_64_asm.o
-poly1305-x86_64-y += poly1305-avx2-x86_64.o
 endif
 ifeq ($(sha1_ni_supported),yes)
 sha1-ssse3-y += sha1_ni_asm.o
@@ -115,3 +125,8 @@
 endif
 sha512-ssse3-y := sha512-ssse3-asm.o sha512-avx-asm.o sha512-avx2-asm.o sha512_ssse3_glue.o
 crct10dif-pclmul-y := crct10dif-pcl-asm_64.o crct10dif-pclmul_glue.o
+
+quiet_cmd_perlasm = PERLASM $@
+      cmd_perlasm = $(PERL) $< > $@
+$(obj)/%.S: $(src)/%.pl FORCE
+	$(call if_changed,perlasm)
diff --git a/arch/x86/crypto/blake2s-core.S b/arch/x86/crypto/blake2s-core.S
new file mode 100644
index 0000000..8591938
--- /dev/null
+++ b/arch/x86/crypto/blake2s-core.S
@@ -0,0 +1,258 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * Copyright (C) 2017-2019 Samuel Neves <sneves@dei.uc.pt>. All Rights Reserved.
+ */
+
+#include <linux/linkage.h>
+
+.section .rodata.cst32.BLAKE2S_IV, "aM", @progbits, 32
+.align 32
+IV:	.octa 0xA54FF53A3C6EF372BB67AE856A09E667
+	.octa 0x5BE0CD191F83D9AB9B05688C510E527F
+.section .rodata.cst16.ROT16, "aM", @progbits, 16
+.align 16
+ROT16:	.octa 0x0D0C0F0E09080B0A0504070601000302
+.section .rodata.cst16.ROR328, "aM", @progbits, 16
+.align 16
+ROR328:	.octa 0x0C0F0E0D080B0A090407060500030201
+.section .rodata.cst64.BLAKE2S_SIGMA, "aM", @progbits, 160
+.align 64
+SIGMA:
+.byte  0,  2,  4,  6,  1,  3,  5,  7, 14,  8, 10, 12, 15,  9, 11, 13
+.byte 14,  4,  9, 13, 10,  8, 15,  6,  5,  1,  0, 11,  3, 12,  2,  7
+.byte 11, 12,  5, 15,  8,  0,  2, 13,  9, 10,  3,  7,  4, 14,  6,  1
+.byte  7,  3, 13, 11,  9,  1, 12, 14, 15,  2,  5,  4,  8,  6, 10,  0
+.byte  9,  5,  2, 10,  0,  7,  4, 15,  3, 14, 11,  6, 13,  1, 12,  8
+.byte  2,  6,  0,  8, 12, 10, 11,  3,  1,  4,  7, 15,  9, 13,  5, 14
+.byte 12,  1, 14,  4,  5, 15, 13, 10,  8,  0,  6,  9, 11,  7,  3,  2
+.byte 13,  7, 12,  3, 11, 14,  1,  9,  2,  5, 15,  8, 10,  0,  4,  6
+.byte  6, 14, 11,  0, 15,  9,  3,  8, 10, 12, 13,  1,  5,  2,  7,  4
+.byte 10,  8,  7,  1,  2,  4,  6,  5, 13, 15,  9,  3,  0, 11, 14, 12
+#ifdef CONFIG_AS_AVX512
+.section .rodata.cst64.BLAKE2S_SIGMA2, "aM", @progbits, 640
+.align 64
+SIGMA2:
+.long  0,  2,  4,  6,  1,  3,  5,  7, 14,  8, 10, 12, 15,  9, 11, 13
+.long  8,  2, 13, 15, 10,  9, 12,  3,  6,  4,  0, 14,  5, 11,  1,  7
+.long 11, 13,  8,  6,  5, 10, 14,  3,  2,  4, 12, 15,  1,  0,  7,  9
+.long 11, 10,  7,  0,  8, 15,  1, 13,  3,  6,  2, 12,  4, 14,  9,  5
+.long  4, 10,  9, 14, 15,  0, 11,  8,  1,  7,  3, 13,  2,  5,  6, 12
+.long  2, 11,  4, 15, 14,  3, 10,  8, 13,  6,  5,  7,  0, 12,  1,  9
+.long  4,  8, 15,  9, 14, 11, 13,  5,  3,  2,  1, 12,  6, 10,  7,  0
+.long  6, 13,  0, 14, 12,  2,  1, 11, 15,  4,  5,  8,  7,  9,  3, 10
+.long 15,  5,  4, 13, 10,  7,  3, 11, 12,  2,  0,  6,  9,  8,  1, 14
+.long  8,  7, 14, 11, 13, 15,  0, 12, 10,  4,  5,  6,  3,  2,  1,  9
+#endif /* CONFIG_AS_AVX512 */
+
+.text
+#ifdef CONFIG_AS_SSSE3
+ENTRY(blake2s_compress_ssse3)
+	testq		%rdx,%rdx
+	je		.Lendofloop
+	movdqu		(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqa		ROT16(%rip),%xmm12
+	movdqa		ROR328(%rip),%xmm13
+	movdqu		0x20(%rdi),%xmm14
+	movq		%rcx,%xmm15
+	leaq		SIGMA+0xa0(%rip),%r8
+	jmp		.Lbeginofloop
+	.align		32
+.Lbeginofloop:
+	movdqa		%xmm0,%xmm10
+	movdqa		%xmm1,%xmm11
+	paddq		%xmm15,%xmm14
+	movdqa		IV(%rip),%xmm2
+	movdqa		%xmm14,%xmm3
+	pxor		IV+0x10(%rip),%xmm3
+	leaq		SIGMA(%rip),%rcx
+.Lroundloop:
+	movzbl		(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0x1(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0x2(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x3(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	punpckldq	%xmm5,%xmm4
+	punpckldq	%xmm7,%xmm6
+	punpcklqdq	%xmm6,%xmm4
+	paddd		%xmm4,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm12,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0xc,%xmm1
+	pslld		$0x14,%xmm8
+	por		%xmm8,%xmm1
+	movzbl		0x4(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0x5(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x6(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0x7(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	punpckldq	%xmm6,%xmm5
+	punpckldq	%xmm4,%xmm7
+	punpcklqdq	%xmm7,%xmm5
+	paddd		%xmm5,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm13,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0x7,%xmm1
+	pslld		$0x19,%xmm8
+	por		%xmm8,%xmm1
+	pshufd		$0x93,%xmm0,%xmm0
+	pshufd		$0x4e,%xmm3,%xmm3
+	pshufd		$0x39,%xmm2,%xmm2
+	movzbl		0x8(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	movzbl		0x9(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0xa(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0xb(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	punpckldq	%xmm7,%xmm6
+	punpckldq	%xmm5,%xmm4
+	punpcklqdq	%xmm4,%xmm6
+	paddd		%xmm6,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm12,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0xc,%xmm1
+	pslld		$0x14,%xmm8
+	por		%xmm8,%xmm1
+	movzbl		0xc(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm7
+	movzbl		0xd(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm4
+	movzbl		0xe(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm5
+	movzbl		0xf(%rcx),%eax
+	movd		(%rsi,%rax,4),%xmm6
+	punpckldq	%xmm4,%xmm7
+	punpckldq	%xmm6,%xmm5
+	punpcklqdq	%xmm5,%xmm7
+	paddd		%xmm7,%xmm0
+	paddd		%xmm1,%xmm0
+	pxor		%xmm0,%xmm3
+	pshufb		%xmm13,%xmm3
+	paddd		%xmm3,%xmm2
+	pxor		%xmm2,%xmm1
+	movdqa		%xmm1,%xmm8
+	psrld		$0x7,%xmm1
+	pslld		$0x19,%xmm8
+	por		%xmm8,%xmm1
+	pshufd		$0x39,%xmm0,%xmm0
+	pshufd		$0x4e,%xmm3,%xmm3
+	pshufd		$0x93,%xmm2,%xmm2
+	addq		$0x10,%rcx
+	cmpq		%r8,%rcx
+	jnz		.Lroundloop
+	pxor		%xmm2,%xmm0
+	pxor		%xmm3,%xmm1
+	pxor		%xmm10,%xmm0
+	pxor		%xmm11,%xmm1
+	addq		$0x40,%rsi
+	decq		%rdx
+	jnz		.Lbeginofloop
+	movdqu		%xmm0,(%rdi)
+	movdqu		%xmm1,0x10(%rdi)
+	movdqu		%xmm14,0x20(%rdi)
+.Lendofloop:
+	ret
+ENDPROC(blake2s_compress_ssse3)
+#endif /* CONFIG_AS_SSSE3 */
+
+#ifdef CONFIG_AS_AVX512
+ENTRY(blake2s_compress_avx512)
+	vmovdqu		(%rdi),%xmm0
+	vmovdqu		0x10(%rdi),%xmm1
+	vmovdqu		0x20(%rdi),%xmm4
+	vmovq		%rcx,%xmm5
+	vmovdqa		IV(%rip),%xmm14
+	vmovdqa		IV+16(%rip),%xmm15
+	jmp		.Lblake2s_compress_avx512_mainloop
+.align 32
+.Lblake2s_compress_avx512_mainloop:
+	vmovdqa		%xmm0,%xmm10
+	vmovdqa		%xmm1,%xmm11
+	vpaddq		%xmm5,%xmm4,%xmm4
+	vmovdqa		%xmm14,%xmm2
+	vpxor		%xmm15,%xmm4,%xmm3
+	vmovdqu		(%rsi),%ymm6
+	vmovdqu		0x20(%rsi),%ymm7
+	addq		$0x40,%rsi
+	leaq		SIGMA2(%rip),%rax
+	movb		$0xa,%cl
+.Lblake2s_compress_avx512_roundloop:
+	addq		$0x40,%rax
+	vmovdqa		-0x40(%rax),%ymm8
+	vmovdqa		-0x20(%rax),%ymm9
+	vpermi2d	%ymm7,%ymm6,%ymm8
+	vpermi2d	%ymm7,%ymm6,%ymm9
+	vmovdqa		%ymm8,%ymm6
+	vmovdqa		%ymm9,%ymm7
+	vpaddd		%xmm8,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x10,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0xc,%xmm1,%xmm1
+	vextracti128	$0x1,%ymm8,%xmm8
+	vpaddd		%xmm8,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x8,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0x7,%xmm1,%xmm1
+	vpshufd		$0x93,%xmm0,%xmm0
+	vpshufd		$0x4e,%xmm3,%xmm3
+	vpshufd		$0x39,%xmm2,%xmm2
+	vpaddd		%xmm9,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x10,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0xc,%xmm1,%xmm1
+	vextracti128	$0x1,%ymm9,%xmm9
+	vpaddd		%xmm9,%xmm0,%xmm0
+	vpaddd		%xmm1,%xmm0,%xmm0
+	vpxor		%xmm0,%xmm3,%xmm3
+	vprord		$0x8,%xmm3,%xmm3
+	vpaddd		%xmm3,%xmm2,%xmm2
+	vpxor		%xmm2,%xmm1,%xmm1
+	vprord		$0x7,%xmm1,%xmm1
+	vpshufd		$0x39,%xmm0,%xmm0
+	vpshufd		$0x4e,%xmm3,%xmm3
+	vpshufd		$0x93,%xmm2,%xmm2
+	decb		%cl
+	jne		.Lblake2s_compress_avx512_roundloop
+	vpxor		%xmm10,%xmm0,%xmm0
+	vpxor		%xmm11,%xmm1,%xmm1
+	vpxor		%xmm2,%xmm0,%xmm0
+	vpxor		%xmm3,%xmm1,%xmm1
+	decq		%rdx
+	jne		.Lblake2s_compress_avx512_mainloop
+	vmovdqu		%xmm0,(%rdi)
+	vmovdqu		%xmm1,0x10(%rdi)
+	vmovdqu		%xmm4,0x20(%rdi)
+	vzeroupper
+	retq
+ENDPROC(blake2s_compress_avx512)
+#endif /* CONFIG_AS_AVX512 */
diff --git a/arch/x86/crypto/blake2s-glue.c b/arch/x86/crypto/blake2s-glue.c
new file mode 100644
index 0000000..8162d2c
--- /dev/null
+++ b/arch/x86/crypto/blake2s-glue.c
@@ -0,0 +1,133 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/simd.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/types.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cpufeature.h>
+#include <asm/fpu/api.h>
+#include <asm/processor.h>
+#include <asm/simd.h>
+
+asmlinkage void blake2s_compress_ssse3(struct blake2s_state *state,
+				       const u8 *block, const size_t nblocks,
+				       const u32 inc);
+asmlinkage void blake2s_compress_avx512(struct blake2s_state *state,
+					const u8 *block, const size_t nblocks,
+					const u32 inc);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_ssse3);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(blake2s_use_avx512);
+
+void blake2s_compress_arch(struct blake2s_state *state,
+			   const u8 *block, size_t nblocks,
+			   const u32 inc)
+{
+	/* SIMD disables preemption, so relax after processing each page. */
+	BUILD_BUG_ON(SZ_4K / BLAKE2S_BLOCK_SIZE < 8);
+
+	if (!static_branch_likely(&blake2s_use_ssse3) || !crypto_simd_usable()) {
+		blake2s_compress_generic(state, block, nblocks, inc);
+		return;
+	}
+
+	do {
+		const size_t blocks = min_t(size_t, nblocks,
+					    SZ_4K / BLAKE2S_BLOCK_SIZE);
+
+		kernel_fpu_begin();
+		if (IS_ENABLED(CONFIG_AS_AVX512) &&
+		    static_branch_likely(&blake2s_use_avx512))
+			blake2s_compress_avx512(state, block, blocks, inc);
+		else
+			blake2s_compress_ssse3(state, block, blocks, inc);
+		kernel_fpu_end();
+
+		nblocks -= blocks;
+		block += blocks * BLAKE2S_BLOCK_SIZE;
+	} while (nblocks);
+}
+EXPORT_SYMBOL(blake2s_compress_arch);
+
+static int crypto_blake2s_update_x86(struct shash_desc *desc,
+				     const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_arch);
+}
+
+static int crypto_blake2s_final_x86(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_arch);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 200,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_x86,	\
+		.final			= crypto_blake2s_final_x86,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-x86", BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-x86", BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-x86", BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-x86", BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_mod_init(void)
+{
+	if (!boot_cpu_has(X86_FEATURE_SSSE3))
+		return 0;
+
+	static_branch_enable(&blake2s_use_ssse3);
+
+	if (IS_ENABLED(CONFIG_AS_AVX512) &&
+	    boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    boot_cpu_has(X86_FEATURE_AVX512F) &&
+	    boot_cpu_has(X86_FEATURE_AVX512VL) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM |
+			      XFEATURE_MASK_AVX512, NULL))
+		static_branch_enable(&blake2s_use_avx512);
+
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ?
+		crypto_register_shashes(blake2s_algs,
+					ARRAY_SIZE(blake2s_algs)) : 0;
+}
+
+static void __exit blake2s_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH) && boot_cpu_has(X86_FEATURE_SSSE3))
+		crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+module_init(blake2s_mod_init);
+module_exit(blake2s_mod_exit);
+
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-x86");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-x86");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-x86");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-x86");
+MODULE_LICENSE("GPL v2");
diff --git a/arch/x86/crypto/chacha-ssse3-x86_64.S b/arch/x86/crypto/chacha-ssse3-x86_64.S
index 2d86c7d..a556a57 100644
--- a/arch/x86/crypto/chacha-ssse3-x86_64.S
+++ b/arch/x86/crypto/chacha-ssse3-x86_64.S
@@ -120,10 +120,10 @@
 	FRAME_BEGIN
 
 	# x0..3 = s0..3
-	movdqa		0x00(%rdi),%xmm0
-	movdqa		0x10(%rdi),%xmm1
-	movdqa		0x20(%rdi),%xmm2
-	movdqa		0x30(%rdi),%xmm3
+	movdqu		0x00(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqu		0x20(%rdi),%xmm2
+	movdqu		0x30(%rdi),%xmm3
 	movdqa		%xmm0,%xmm8
 	movdqa		%xmm1,%xmm9
 	movdqa		%xmm2,%xmm10
@@ -205,10 +205,10 @@
 	# %edx: nrounds
 	FRAME_BEGIN
 
-	movdqa		0x00(%rdi),%xmm0
-	movdqa		0x10(%rdi),%xmm1
-	movdqa		0x20(%rdi),%xmm2
-	movdqa		0x30(%rdi),%xmm3
+	movdqu		0x00(%rdi),%xmm0
+	movdqu		0x10(%rdi),%xmm1
+	movdqu		0x20(%rdi),%xmm2
+	movdqu		0x30(%rdi),%xmm3
 
 	mov		%edx,%r8d
 	call		chacha_permute
diff --git a/arch/x86/crypto/chacha_glue.c b/arch/x86/crypto/chacha_glue.c
index 388f95a..4c4dc64 100644
--- a/arch/x86/crypto/chacha_glue.c
+++ b/arch/x86/crypto/chacha_glue.c
@@ -7,38 +7,36 @@
  */
 
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/simd.h>
 #include <crypto/internal/skcipher.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <asm/simd.h>
 
-#define CHACHA_STATE_ALIGN 16
-
 asmlinkage void chacha_block_xor_ssse3(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_ssse3(u32 *state, u8 *dst, const u8 *src,
 					unsigned int len, int nrounds);
 asmlinkage void hchacha_block_ssse3(const u32 *state, u32 *out, int nrounds);
-#ifdef CONFIG_AS_AVX2
+
 asmlinkage void chacha_2block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
 asmlinkage void chacha_8block_xor_avx2(u32 *state, u8 *dst, const u8 *src,
 				       unsigned int len, int nrounds);
-static bool chacha_use_avx2;
-#ifdef CONFIG_AS_AVX512
+
 asmlinkage void chacha_2block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
 asmlinkage void chacha_4block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
 asmlinkage void chacha_8block_xor_avx512vl(u32 *state, u8 *dst, const u8 *src,
 					   unsigned int len, int nrounds);
-static bool chacha_use_avx512vl;
-#endif
-#endif
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_simd);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_avx2);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(chacha_use_avx512vl);
 
 static unsigned int chacha_advance(unsigned int len, unsigned int maxblocks)
 {
@@ -49,9 +47,8 @@
 static void chacha_dosimd(u32 *state, u8 *dst, const u8 *src,
 			  unsigned int bytes, int nrounds)
 {
-#ifdef CONFIG_AS_AVX2
-#ifdef CONFIG_AS_AVX512
-	if (chacha_use_avx512vl) {
+	if (IS_ENABLED(CONFIG_AS_AVX512) &&
+	    static_branch_likely(&chacha_use_avx512vl)) {
 		while (bytes >= CHACHA_BLOCK_SIZE * 8) {
 			chacha_8block_xor_avx512vl(state, dst, src, bytes,
 						   nrounds);
@@ -79,8 +76,9 @@
 			return;
 		}
 	}
-#endif
-	if (chacha_use_avx2) {
+
+	if (IS_ENABLED(CONFIG_AS_AVX2) &&
+	    static_branch_likely(&chacha_use_avx2)) {
 		while (bytes >= CHACHA_BLOCK_SIZE * 8) {
 			chacha_8block_xor_avx2(state, dst, src, bytes, nrounds);
 			bytes -= CHACHA_BLOCK_SIZE * 8;
@@ -104,7 +102,7 @@
 			return;
 		}
 	}
-#endif
+
 	while (bytes >= CHACHA_BLOCK_SIZE * 4) {
 		chacha_4block_xor_ssse3(state, dst, src, bytes, nrounds);
 		bytes -= CHACHA_BLOCK_SIZE * 4;
@@ -123,37 +121,75 @@
 	}
 }
 
-static int chacha_simd_stream_xor(struct skcipher_walk *walk,
+void hchacha_block_arch(const u32 *state, u32 *stream, int nrounds)
+{
+	if (!static_branch_likely(&chacha_use_simd) || !crypto_simd_usable()) {
+		hchacha_block_generic(state, stream, nrounds);
+	} else {
+		kernel_fpu_begin();
+		hchacha_block_ssse3(state, stream, nrounds);
+		kernel_fpu_end();
+	}
+}
+EXPORT_SYMBOL(hchacha_block_arch);
+
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv)
+{
+	chacha_init_generic(state, key, iv);
+}
+EXPORT_SYMBOL(chacha_init_arch);
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src, unsigned int bytes,
+		       int nrounds)
+{
+	if (!static_branch_likely(&chacha_use_simd) || !crypto_simd_usable() ||
+	    bytes <= CHACHA_BLOCK_SIZE)
+		return chacha_crypt_generic(state, dst, src, bytes, nrounds);
+
+	do {
+		unsigned int todo = min_t(unsigned int, bytes, SZ_4K);
+
+		kernel_fpu_begin();
+		chacha_dosimd(state, dst, src, todo, nrounds);
+		kernel_fpu_end();
+
+		bytes -= todo;
+		src += todo;
+		dst += todo;
+	} while (bytes);
+}
+EXPORT_SYMBOL(chacha_crypt_arch);
+
+static int chacha_simd_stream_xor(struct skcipher_request *req,
 				  const struct chacha_ctx *ctx, const u8 *iv)
 {
-	u32 *state, state_buf[16 + 2] __aligned(8);
-	int next_yield = 4096; /* bytes until next FPU yield */
-	int err = 0;
+	u32 state[CHACHA_STATE_WORDS] __aligned(8);
+	struct skcipher_walk walk;
+	int err;
 
-	BUILD_BUG_ON(CHACHA_STATE_ALIGN != 16);
-	state = PTR_ALIGN(state_buf + 0, CHACHA_STATE_ALIGN);
+	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
-	while (walk->nbytes > 0) {
-		unsigned int nbytes = walk->nbytes;
+	while (walk.nbytes > 0) {
+		unsigned int nbytes = walk.nbytes;
 
-		if (nbytes < walk->total) {
-			nbytes = round_down(nbytes, walk->stride);
-			next_yield -= nbytes;
-		}
+		if (nbytes < walk.total)
+			nbytes = round_down(nbytes, walk.stride);
 
-		chacha_dosimd(state, walk->dst.virt.addr, walk->src.virt.addr,
-			      nbytes, ctx->nrounds);
-
-		if (next_yield <= 0) {
-			/* temporarily allow preemption */
-			kernel_fpu_end();
+		if (!static_branch_likely(&chacha_use_simd) ||
+		    !crypto_simd_usable()) {
+			chacha_crypt_generic(state, walk.dst.virt.addr,
+					     walk.src.virt.addr, nbytes,
+					     ctx->nrounds);
+		} else {
 			kernel_fpu_begin();
-			next_yield = 4096;
+			chacha_dosimd(state, walk.dst.virt.addr,
+				      walk.src.virt.addr, nbytes,
+				      ctx->nrounds);
+			kernel_fpu_end();
 		}
-
-		err = skcipher_walk_done(walk, walk->nbytes - nbytes);
+		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
 	return err;
@@ -163,55 +199,32 @@
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct skcipher_walk walk;
-	int err;
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_chacha_crypt(req);
-
-	err = skcipher_walk_virt(&walk, req, true);
-	if (err)
-		return err;
-
-	kernel_fpu_begin();
-	err = chacha_simd_stream_xor(&walk, ctx, req->iv);
-	kernel_fpu_end();
-	return err;
+	return chacha_simd_stream_xor(req, ctx, req->iv);
 }
 
 static int xchacha_simd(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	struct skcipher_walk walk;
+	u32 state[CHACHA_STATE_WORDS] __aligned(8);
 	struct chacha_ctx subctx;
-	u32 *state, state_buf[16 + 2] __aligned(8);
 	u8 real_iv[16];
-	int err;
 
-	if (req->cryptlen <= CHACHA_BLOCK_SIZE || !crypto_simd_usable())
-		return crypto_xchacha_crypt(req);
+	chacha_init_generic(state, ctx->key, req->iv);
 
-	err = skcipher_walk_virt(&walk, req, true);
-	if (err)
-		return err;
-
-	BUILD_BUG_ON(CHACHA_STATE_ALIGN != 16);
-	state = PTR_ALIGN(state_buf + 0, CHACHA_STATE_ALIGN);
-	crypto_chacha_init(state, ctx, req->iv);
-
-	kernel_fpu_begin();
-
-	hchacha_block_ssse3(state, subctx.key, ctx->nrounds);
+	if (req->cryptlen > CHACHA_BLOCK_SIZE && crypto_simd_usable()) {
+		kernel_fpu_begin();
+		hchacha_block_ssse3(state, subctx.key, ctx->nrounds);
+		kernel_fpu_end();
+	} else {
+		hchacha_block_generic(state, subctx.key, ctx->nrounds);
+	}
 	subctx.nrounds = ctx->nrounds;
 
 	memcpy(&real_iv[0], req->iv + 24, 8);
 	memcpy(&real_iv[8], req->iv + 16, 8);
-	err = chacha_simd_stream_xor(&walk, &subctx, real_iv);
-
-	kernel_fpu_end();
-
-	return err;
+	return chacha_simd_stream_xor(req, &subctx, real_iv);
 }
 
 static struct skcipher_alg algs[] = {
@@ -227,7 +240,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= chacha_simd,
 		.decrypt		= chacha_simd,
 	}, {
@@ -242,7 +255,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= xchacha_simd,
 		.decrypt		= xchacha_simd,
 	}, {
@@ -257,7 +270,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= xchacha_simd,
 		.decrypt		= xchacha_simd,
 	},
@@ -266,24 +279,29 @@
 static int __init chacha_simd_mod_init(void)
 {
 	if (!boot_cpu_has(X86_FEATURE_SSSE3))
-		return -ENODEV;
+		return 0;
 
-#ifdef CONFIG_AS_AVX2
-	chacha_use_avx2 = boot_cpu_has(X86_FEATURE_AVX) &&
-			  boot_cpu_has(X86_FEATURE_AVX2) &&
-			  cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL);
-#ifdef CONFIG_AS_AVX512
-	chacha_use_avx512vl = chacha_use_avx2 &&
-			      boot_cpu_has(X86_FEATURE_AVX512VL) &&
-			      boot_cpu_has(X86_FEATURE_AVX512BW); /* kmovq */
-#endif
-#endif
-	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
+	static_branch_enable(&chacha_use_simd);
+
+	if (IS_ENABLED(CONFIG_AS_AVX2) &&
+	    boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL)) {
+		static_branch_enable(&chacha_use_avx2);
+
+		if (IS_ENABLED(CONFIG_AS_AVX512) &&
+		    boot_cpu_has(X86_FEATURE_AVX512VL) &&
+		    boot_cpu_has(X86_FEATURE_AVX512BW)) /* kmovq */
+			static_branch_enable(&chacha_use_avx512vl);
+	}
+	return IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) ?
+		crypto_register_skciphers(algs, ARRAY_SIZE(algs)) : 0;
 }
 
 static void __exit chacha_simd_mod_fini(void)
 {
-	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
+	if (IS_REACHABLE(CONFIG_CRYPTO_BLKCIPHER) && boot_cpu_has(X86_FEATURE_SSSE3))
+		crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
 }
 
 module_init(chacha_simd_mod_init);
diff --git a/arch/x86/crypto/curve25519-x86_64.c b/arch/x86/crypto/curve25519-x86_64.c
new file mode 100644
index 0000000..3fcbe87
--- /dev/null
+++ b/arch/x86/crypto/curve25519-x86_64.c
@@ -0,0 +1,1512 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ * Copyright (c) 2016-2020 INRIA, CMU and Microsoft Corporation
+ */
+
+#include <crypto/curve25519.h>
+#include <crypto/internal/kpp.h>
+
+#include <linux/types.h>
+#include <linux/jump_label.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+#include <asm/cpufeature.h>
+#include <asm/processor.h>
+
+static __always_inline u64 eq_mask(u64 a, u64 b)
+{
+	u64 x = a ^ b;
+	u64 minus_x = ~x + (u64)1U;
+	u64 x_or_minus_x = x | minus_x;
+	u64 xnx = x_or_minus_x >> (u32)63U;
+	return xnx - (u64)1U;
+}
+
+static __always_inline u64 gte_mask(u64 a, u64 b)
+{
+	u64 x = a;
+	u64 y = b;
+	u64 x_xor_y = x ^ y;
+	u64 x_sub_y = x - y;
+	u64 x_sub_y_xor_y = x_sub_y ^ y;
+	u64 q = x_xor_y | x_sub_y_xor_y;
+	u64 x_xor_q = x ^ q;
+	u64 x_xor_q_ = x_xor_q >> (u32)63U;
+	return x_xor_q_ - (u64)1U;
+}
+
+/* Computes the addition of four-element f1 with value in f2
+ * and returns the carry (if any) */
+static inline u64 add_scalar(u64 *out, const u64 *f1, u64 f2)
+{
+	u64 carry_r;
+
+	asm volatile(
+		/* Clear registers to propagate the carry bit */
+		"  xor %%r8d, %%r8d;"
+		"  xor %%r9d, %%r9d;"
+		"  xor %%r10d, %%r10d;"
+		"  xor %%r11d, %%r11d;"
+		"  xor %k1, %k1;"
+
+		/* Begin addition chain */
+		"  addq 0(%3), %0;"
+		"  movq %0, 0(%2);"
+		"  adcxq 8(%3), %%r8;"
+		"  movq %%r8, 8(%2);"
+		"  adcxq 16(%3), %%r9;"
+		"  movq %%r9, 16(%2);"
+		"  adcxq 24(%3), %%r10;"
+		"  movq %%r10, 24(%2);"
+
+		/* Return the carry bit in a register */
+		"  adcx %%r11, %1;"
+	: "+&r" (f2), "=&r" (carry_r)
+	: "r" (out), "r" (f1)
+	: "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+
+	return carry_r;
+}
+
+/* Computes the field addition of two field elements */
+static inline void fadd(u64 *out, const u64 *f1, const u64 *f2)
+{
+	asm volatile(
+		/* Compute the raw addition of f1 + f2 */
+		"  movq 0(%0), %%r8;"
+		"  addq 0(%2), %%r8;"
+		"  movq 8(%0), %%r9;"
+		"  adcxq 8(%2), %%r9;"
+		"  movq 16(%0), %%r10;"
+		"  adcxq 16(%2), %%r10;"
+		"  movq 24(%0), %%r11;"
+		"  adcxq 24(%2), %%r11;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $0, %%rax;"
+		"  mov $38, %0;"
+		"  cmovc %0, %%rax;"
+
+		/* Step 2: Add carry*38 to the original sum */
+		"  xor %%ecx, %%ecx;"
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%1);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%1);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%1);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %0, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%1);"
+	: "+&r" (f2)
+	: "r" (out), "r" (f1)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+}
+
+/* Computes the field substraction of two field elements */
+static inline void fsub(u64 *out, const u64 *f1, const u64 *f2)
+{
+	asm volatile(
+		/* Compute the raw substraction of f1-f2 */
+		"  movq 0(%1), %%r8;"
+		"  subq 0(%2), %%r8;"
+		"  movq 8(%1), %%r9;"
+		"  sbbq 8(%2), %%r9;"
+		"  movq 16(%1), %%r10;"
+		"  sbbq 16(%2), %%r10;"
+		"  movq 24(%1), %%r11;"
+		"  sbbq 24(%2), %%r11;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $0, %%rax;"
+		"  mov $38, %%rcx;"
+		"  cmovc %%rcx, %%rax;"
+
+		/* Step 2: Substract carry*38 from the original difference */
+		"  sub %%rax, %%r8;"
+		"  sbb $0, %%r9;"
+		"  sbb $0, %%r10;"
+		"  sbb $0, %%r11;"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rcx, %%rax;"
+		"  sub %%rax, %%r8;"
+
+		/* Store the result */
+		"  movq %%r8, 0(%0);"
+		"  movq %%r9, 8(%0);"
+		"  movq %%r10, 16(%0);"
+		"  movq %%r11, 24(%0);"
+	:
+	: "r" (out), "r" (f1), "r" (f2)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "memory", "cc"
+	);
+}
+
+/* Computes a field multiplication: out <- f1 * f2
+ * Uses the 8-element buffer tmp for intermediate results */
+static inline void fmul(u64 *out, const u64 *f1, const u64 *f2, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication: tmp <- src1 * src2 */
+
+		/* Compute src1[0] * src2 */
+		"  movq 0(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  movq %%r8, 0(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  movq %%r10, 8(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 8(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 8(%0), %%r8;"    "  movq %%r8, 8(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 16(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 16(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 16(%0), %%r8;"   "  movq %%r8, 16(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 24(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 24(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 24(%0), %%r8;"   "  movq %%r8, 24(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 32(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 40(%0);"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 48(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 56(%0);"
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+	: "+&r" (tmp), "+&r" (f1), "+&r" (out), "+&r" (f2)
+	:
+	: "%rax", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "memory", "cc"
+	);
+}
+
+/* Computes two field multiplications:
+ * out[0] <- f1[0] * f2[0]
+ * out[1] <- f1[1] * f2[1]
+ * Uses the 16-element buffer tmp for intermediate results. */
+static inline void fmul2(u64 *out, const u64 *f1, const u64 *f2, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication tmp[0] <- f1[0] * f2[0] */
+
+		/* Compute src1[0] * src2 */
+		"  movq 0(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  movq %%r8, 0(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  movq %%r10, 8(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 8(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 8(%0), %%r8;"    "  movq %%r8, 8(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 16(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 16(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 16(%0), %%r8;"   "  movq %%r8, 16(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 24(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 24(%1), %%rdx;"
+		"  mulxq 0(%3), %%r8, %%r9;"       "  xor %%r10d, %%r10d;"   "  adcxq 24(%0), %%r8;"   "  movq %%r8, 24(%0);"
+		"  mulxq 8(%3), %%r10, %%r11;"     "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 32(%0);"
+		"  mulxq 16(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 40(%0);"    "  mov $0, %%r8;"
+		"  mulxq 24(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 48(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 56(%0);"
+
+		/* Compute the raw multiplication tmp[1] <- f1[1] * f2[1] */
+
+		/* Compute src1[0] * src2 */
+		"  movq 32(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  movq %%r8, 64(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  movq %%r10, 72(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"
+		/* Compute src1[1] * src2 */
+		"  movq 40(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 72(%0), %%r8;"   "  movq %%r8, 72(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 80(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[2] * src2 */
+		"  movq 48(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 80(%0), %%r8;"   "  movq %%r8, 80(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 88(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"
+		/* Compute src1[3] * src2 */
+		"  movq 56(%1), %%rdx;"
+		"  mulxq 32(%3), %%r8, %%r9;"      "  xor %%r10d, %%r10d;"   "  adcxq 88(%0), %%r8;"   "  movq %%r8, 88(%0);"
+		"  mulxq 40(%3), %%r10, %%r11;"    "  adox %%r9, %%r10;"     "  adcx %%rbx, %%r10;"    "  movq %%r10, 96(%0);"
+		"  mulxq 48(%3), %%rbx, %%r13;"    "  adox %%r11, %%rbx;"    "  adcx %%r14, %%rbx;"    "  movq %%rbx, 104(%0);"    "  mov $0, %%r8;"
+		"  mulxq 56(%3), %%r14, %%rdx;"    "  adox %%r13, %%r14;"    "  adcx %%rax, %%r14;"    "  movq %%r14, 112(%0);"    "  mov $0, %%rax;"
+		                                   "  adox %%rdx, %%rax;"    "  adcx %%r8, %%rax;"     "  movq %%rax, 120(%0);"
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the results back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 96(%1), %%r8, %%r13;"
+		"  xor %k3, %k3;"
+		"  adoxq 64(%1), %%r8;"
+		"  mulxq 104(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 72(%1), %%r9;"
+		"  mulxq 112(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 80(%1), %%r10;"
+		"  mulxq 120(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 88(%1), %%r11;"
+		"  adcx %3, %%rax;"
+		"  adox %3, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %3, %%r9;"
+		"  movq %%r9, 40(%0);"
+		"  adcx %3, %%r10;"
+		"  movq %%r10, 48(%0);"
+		"  adcx %3, %%r11;"
+		"  movq %%r11, 56(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 32(%0);"
+	: "+&r" (tmp), "+&r" (f1), "+&r" (out), "+&r" (f2)
+	:
+	: "%rax", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "memory", "cc"
+	);
+}
+
+/* Computes the field multiplication of four-element f1 with value in f2 */
+static inline void fmul_scalar(u64 *out, const u64 *f1, u64 f2)
+{
+	register u64 f2_r asm("rdx") = f2;
+
+	asm volatile(
+		/* Compute the raw multiplication of f1*f2 */
+		"  mulxq 0(%2), %%r8, %%rcx;"      /* f1[0]*f2 */
+		"  mulxq 8(%2), %%r9, %%rbx;"      /* f1[1]*f2 */
+		"  add %%rcx, %%r9;"
+		"  mov $0, %%rcx;"
+		"  mulxq 16(%2), %%r10, %%r13;"    /* f1[2]*f2 */
+		"  adcx %%rbx, %%r10;"
+		"  mulxq 24(%2), %%r11, %%rax;"    /* f1[3]*f2 */
+		"  adcx %%r13, %%r11;"
+		"  adcx %%rcx, %%rax;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute carry*38 */
+		"  mov $38, %%rdx;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%1);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%1);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%1);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%1);"
+	: "+&r" (f2_r)
+	: "r" (out), "r" (f1)
+	: "%rax", "%rcx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "memory", "cc"
+	);
+}
+
+/* Computes p1 <- bit ? p2 : p1 in constant time */
+static inline void cswap2(u64 bit, const u64 *p1, const u64 *p2)
+{
+	asm volatile(
+		/* Invert the polarity of bit to match cmov expectations */
+		"  add $18446744073709551615, %0;"
+
+		/* cswap p1[0], p2[0] */
+		"  movq 0(%1), %%r8;"
+		"  movq 0(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 0(%1);"
+		"  movq %%r9, 0(%2);"
+
+		/* cswap p1[1], p2[1] */
+		"  movq 8(%1), %%r8;"
+		"  movq 8(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 8(%1);"
+		"  movq %%r9, 8(%2);"
+
+		/* cswap p1[2], p2[2] */
+		"  movq 16(%1), %%r8;"
+		"  movq 16(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 16(%1);"
+		"  movq %%r9, 16(%2);"
+
+		/* cswap p1[3], p2[3] */
+		"  movq 24(%1), %%r8;"
+		"  movq 24(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 24(%1);"
+		"  movq %%r9, 24(%2);"
+
+		/* cswap p1[4], p2[4] */
+		"  movq 32(%1), %%r8;"
+		"  movq 32(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 32(%1);"
+		"  movq %%r9, 32(%2);"
+
+		/* cswap p1[5], p2[5] */
+		"  movq 40(%1), %%r8;"
+		"  movq 40(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 40(%1);"
+		"  movq %%r9, 40(%2);"
+
+		/* cswap p1[6], p2[6] */
+		"  movq 48(%1), %%r8;"
+		"  movq 48(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 48(%1);"
+		"  movq %%r9, 48(%2);"
+
+		/* cswap p1[7], p2[7] */
+		"  movq 56(%1), %%r8;"
+		"  movq 56(%2), %%r9;"
+		"  mov %%r8, %%r10;"
+		"  cmovc %%r9, %%r8;"
+		"  cmovc %%r10, %%r9;"
+		"  movq %%r8, 56(%1);"
+		"  movq %%r9, 56(%2);"
+	: "+&r" (bit)
+	: "r" (p1), "r" (p2)
+	: "%r8", "%r9", "%r10", "memory", "cc"
+	);
+}
+
+/* Computes the square of a field element: out <- f * f
+ * Uses the 8-element buffer tmp for intermediate results */
+static inline void fsqr(u64 *out, const u64 *f, u64 *tmp)
+{
+	asm volatile(
+		/* Compute the raw multiplication: tmp <- f * f */
+
+		/* Step 1: Compute all partial products */
+		"  movq 0(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 8(%1), %%r8, %%r14;"      "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 16(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 24(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 24(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 8(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 16(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 8(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 16(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 0(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 0(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 8(%0);"
+		"  movq 8(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 16(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 24(%0);"
+		"  movq 16(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 32(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 40(%0);"
+		"  movq 24(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 48(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 56(%0);"
+
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Wrap the result back into the field */
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+	: "+&r" (tmp), "+&r" (f), "+&r" (out)
+	:
+	: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "%r15", "memory", "cc"
+	);
+}
+
+/* Computes two field squarings:
+ * out[0] <- f[0] * f[0]
+ * out[1] <- f[1] * f[1]
+ * Uses the 16-element buffer tmp for intermediate results */
+static inline void fsqr2(u64 *out, const u64 *f, u64 *tmp)
+{
+	asm volatile(
+		/* Step 1: Compute all partial products */
+		"  movq 0(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 8(%1), %%r8, %%r14;"      "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 16(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 24(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 24(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 8(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 16(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 8(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 16(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 0(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 0(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 8(%0);"
+		"  movq 8(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 16(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 24(%0);"
+		"  movq 16(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 32(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 40(%0);"
+		"  movq 24(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 48(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 56(%0);"
+
+		/* Step 1: Compute all partial products */
+		"  movq 32(%1), %%rdx;"                                       /* f[0] */
+		"  mulxq 40(%1), %%r8, %%r14;"     "  xor %%r15d, %%r15d;"   /* f[1]*f[0] */
+		"  mulxq 48(%1), %%r9, %%r10;"     "  adcx %%r14, %%r9;"     /* f[2]*f[0] */
+		"  mulxq 56(%1), %%rax, %%rcx;"    "  adcx %%rax, %%r10;"    /* f[3]*f[0] */
+		"  movq 56(%1), %%rdx;"                                      /* f[3] */
+		"  mulxq 40(%1), %%r11, %%rbx;"     "  adcx %%rcx, %%r11;"    /* f[1]*f[3] */
+		"  mulxq 48(%1), %%rax, %%r13;"    "  adcx %%rax, %%rbx;"    /* f[2]*f[3] */
+		"  movq 40(%1), %%rdx;"             "  adcx %%r15, %%r13;"    /* f1 */
+		"  mulxq 48(%1), %%rax, %%rcx;"    "  mov $0, %%r14;"        /* f[2]*f[1] */
+
+		/* Step 2: Compute two parallel carry chains */
+		"  xor %%r15d, %%r15d;"
+		"  adox %%rax, %%r10;"
+		"  adcx %%r8, %%r8;"
+		"  adox %%rcx, %%r11;"
+		"  adcx %%r9, %%r9;"
+		"  adox %%r15, %%rbx;"
+		"  adcx %%r10, %%r10;"
+		"  adox %%r15, %%r13;"
+		"  adcx %%r11, %%r11;"
+		"  adox %%r15, %%r14;"
+		"  adcx %%rbx, %%rbx;"
+		"  adcx %%r13, %%r13;"
+		"  adcx %%r14, %%r14;"
+
+		/* Step 3: Compute intermediate squares */
+		"  movq 32(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[0]^2 */
+		                           "  movq %%rax, 64(%0);"
+		"  add %%rcx, %%r8;"       "  movq %%r8, 72(%0);"
+		"  movq 40(%1), %%rdx;"     "  mulx %%rdx, %%rax, %%rcx;"    /* f[1]^2 */
+		"  adcx %%rax, %%r9;"      "  movq %%r9, 80(%0);"
+		"  adcx %%rcx, %%r10;"     "  movq %%r10, 88(%0);"
+		"  movq 48(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[2]^2 */
+		"  adcx %%rax, %%r11;"     "  movq %%r11, 96(%0);"
+		"  adcx %%rcx, %%rbx;"     "  movq %%rbx, 104(%0);"
+		"  movq 56(%1), %%rdx;"    "  mulx %%rdx, %%rax, %%rcx;"    /* f[3]^2 */
+		"  adcx %%rax, %%r13;"     "  movq %%r13, 112(%0);"
+		"  adcx %%rcx, %%r14;"     "  movq %%r14, 120(%0);"
+
+		/* Line up pointers */
+		"  mov %0, %1;"
+		"  mov %2, %0;"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 32(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 0(%1), %%r8;"
+		"  mulxq 40(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 8(%1), %%r9;"
+		"  mulxq 48(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 16(%1), %%r10;"
+		"  mulxq 56(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 24(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 8(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 16(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 24(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 0(%0);"
+
+		/* Step 1: Compute dst + carry == tmp_hi * 38 + tmp_lo */
+		"  mov $38, %%rdx;"
+		"  mulxq 96(%1), %%r8, %%r13;"
+		"  xor %%ecx, %%ecx;"
+		"  adoxq 64(%1), %%r8;"
+		"  mulxq 104(%1), %%r9, %%rbx;"
+		"  adcx %%r13, %%r9;"
+		"  adoxq 72(%1), %%r9;"
+		"  mulxq 112(%1), %%r10, %%r13;"
+		"  adcx %%rbx, %%r10;"
+		"  adoxq 80(%1), %%r10;"
+		"  mulxq 120(%1), %%r11, %%rax;"
+		"  adcx %%r13, %%r11;"
+		"  adoxq 88(%1), %%r11;"
+		"  adcx %%rcx, %%rax;"
+		"  adox %%rcx, %%rax;"
+		"  imul %%rdx, %%rax;"
+
+		/* Step 2: Fold the carry back into dst */
+		"  add %%rax, %%r8;"
+		"  adcx %%rcx, %%r9;"
+		"  movq %%r9, 40(%0);"
+		"  adcx %%rcx, %%r10;"
+		"  movq %%r10, 48(%0);"
+		"  adcx %%rcx, %%r11;"
+		"  movq %%r11, 56(%0);"
+
+		/* Step 3: Fold the carry bit back in; guaranteed not to carry at this point */
+		"  mov $0, %%rax;"
+		"  cmovc %%rdx, %%rax;"
+		"  add %%rax, %%r8;"
+		"  movq %%r8, 32(%0);"
+	: "+&r" (tmp), "+&r" (f), "+&r" (out)
+	:
+	: "%rax", "%rcx", "%rdx", "%r8", "%r9", "%r10", "%r11", "%rbx", "%r13", "%r14", "%r15", "memory", "cc"
+	);
+}
+
+static void point_add_and_double(u64 *q, u64 *p01_tmp1, u64 *tmp2)
+{
+	u64 *nq = p01_tmp1;
+	u64 *nq_p1 = p01_tmp1 + (u32)8U;
+	u64 *tmp1 = p01_tmp1 + (u32)16U;
+	u64 *x1 = q;
+	u64 *x2 = nq;
+	u64 *z2 = nq + (u32)4U;
+	u64 *z3 = nq_p1 + (u32)4U;
+	u64 *a = tmp1;
+	u64 *b = tmp1 + (u32)4U;
+	u64 *ab = tmp1;
+	u64 *dc = tmp1 + (u32)8U;
+	u64 *x3;
+	u64 *z31;
+	u64 *d0;
+	u64 *c0;
+	u64 *a1;
+	u64 *b1;
+	u64 *d;
+	u64 *c;
+	u64 *ab1;
+	u64 *dc1;
+	fadd(a, x2, z2);
+	fsub(b, x2, z2);
+	x3 = nq_p1;
+	z31 = nq_p1 + (u32)4U;
+	d0 = dc;
+	c0 = dc + (u32)4U;
+	fadd(c0, x3, z31);
+	fsub(d0, x3, z31);
+	fmul2(dc, dc, ab, tmp2);
+	fadd(x3, d0, c0);
+	fsub(z31, d0, c0);
+	a1 = tmp1;
+	b1 = tmp1 + (u32)4U;
+	d = tmp1 + (u32)8U;
+	c = tmp1 + (u32)12U;
+	ab1 = tmp1;
+	dc1 = tmp1 + (u32)8U;
+	fsqr2(dc1, ab1, tmp2);
+	fsqr2(nq_p1, nq_p1, tmp2);
+	a1[0U] = c[0U];
+	a1[1U] = c[1U];
+	a1[2U] = c[2U];
+	a1[3U] = c[3U];
+	fsub(c, d, c);
+	fmul_scalar(b1, c, (u64)121665U);
+	fadd(b1, b1, d);
+	fmul2(nq, dc1, ab1, tmp2);
+	fmul(z3, z3, x1, tmp2);
+}
+
+static void point_double(u64 *nq, u64 *tmp1, u64 *tmp2)
+{
+	u64 *x2 = nq;
+	u64 *z2 = nq + (u32)4U;
+	u64 *a = tmp1;
+	u64 *b = tmp1 + (u32)4U;
+	u64 *d = tmp1 + (u32)8U;
+	u64 *c = tmp1 + (u32)12U;
+	u64 *ab = tmp1;
+	u64 *dc = tmp1 + (u32)8U;
+	fadd(a, x2, z2);
+	fsub(b, x2, z2);
+	fsqr2(dc, ab, tmp2);
+	a[0U] = c[0U];
+	a[1U] = c[1U];
+	a[2U] = c[2U];
+	a[3U] = c[3U];
+	fsub(c, d, c);
+	fmul_scalar(b, c, (u64)121665U);
+	fadd(b, b, d);
+	fmul2(nq, dc, ab, tmp2);
+}
+
+static void montgomery_ladder(u64 *out, const u8 *key, u64 *init1)
+{
+	u64 tmp2[16U] = { 0U };
+	u64 p01_tmp1_swap[33U] = { 0U };
+	u64 *p0 = p01_tmp1_swap;
+	u64 *p01 = p01_tmp1_swap;
+	u64 *p03 = p01;
+	u64 *p11 = p01 + (u32)8U;
+	u64 *x0;
+	u64 *z0;
+	u64 *p01_tmp1;
+	u64 *p01_tmp11;
+	u64 *nq10;
+	u64 *nq_p11;
+	u64 *swap1;
+	u64 sw0;
+	u64 *nq1;
+	u64 *tmp1;
+	memcpy(p11, init1, (u32)8U * sizeof(init1[0U]));
+	x0 = p03;
+	z0 = p03 + (u32)4U;
+	x0[0U] = (u64)1U;
+	x0[1U] = (u64)0U;
+	x0[2U] = (u64)0U;
+	x0[3U] = (u64)0U;
+	z0[0U] = (u64)0U;
+	z0[1U] = (u64)0U;
+	z0[2U] = (u64)0U;
+	z0[3U] = (u64)0U;
+	p01_tmp1 = p01_tmp1_swap;
+	p01_tmp11 = p01_tmp1_swap;
+	nq10 = p01_tmp1_swap;
+	nq_p11 = p01_tmp1_swap + (u32)8U;
+	swap1 = p01_tmp1_swap + (u32)32U;
+	cswap2((u64)1U, nq10, nq_p11);
+	point_add_and_double(init1, p01_tmp11, tmp2);
+	swap1[0U] = (u64)1U;
+	{
+		u32 i;
+		for (i = (u32)0U; i < (u32)251U; i = i + (u32)1U) {
+			u64 *p01_tmp12 = p01_tmp1_swap;
+			u64 *swap2 = p01_tmp1_swap + (u32)32U;
+			u64 *nq2 = p01_tmp12;
+			u64 *nq_p12 = p01_tmp12 + (u32)8U;
+			u64 bit = (u64)(key[((u32)253U - i) / (u32)8U] >> ((u32)253U - i) % (u32)8U & (u8)1U);
+			u64 sw = swap2[0U] ^ bit;
+			cswap2(sw, nq2, nq_p12);
+			point_add_and_double(init1, p01_tmp12, tmp2);
+			swap2[0U] = bit;
+		}
+	}
+	sw0 = swap1[0U];
+	cswap2(sw0, nq10, nq_p11);
+	nq1 = p01_tmp1;
+	tmp1 = p01_tmp1 + (u32)16U;
+	point_double(nq1, tmp1, tmp2);
+	point_double(nq1, tmp1, tmp2);
+	point_double(nq1, tmp1, tmp2);
+	memcpy(out, p0, (u32)8U * sizeof(p0[0U]));
+
+	memzero_explicit(tmp2, sizeof(tmp2));
+	memzero_explicit(p01_tmp1_swap, sizeof(p01_tmp1_swap));
+}
+
+static void fsquare_times(u64 *o, const u64 *inp, u64 *tmp, u32 n1)
+{
+	u32 i;
+	fsqr(o, inp, tmp);
+	for (i = (u32)0U; i < n1 - (u32)1U; i = i + (u32)1U)
+		fsqr(o, o, tmp);
+}
+
+static void finv(u64 *o, const u64 *i, u64 *tmp)
+{
+	u64 t1[16U] = { 0U };
+	u64 *a0 = t1;
+	u64 *b = t1 + (u32)4U;
+	u64 *c = t1 + (u32)8U;
+	u64 *t00 = t1 + (u32)12U;
+	u64 *tmp1 = tmp;
+	u64 *a;
+	u64 *t0;
+	fsquare_times(a0, i, tmp1, (u32)1U);
+	fsquare_times(t00, a0, tmp1, (u32)2U);
+	fmul(b, t00, i, tmp);
+	fmul(a0, b, a0, tmp);
+	fsquare_times(t00, a0, tmp1, (u32)1U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)5U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)10U);
+	fmul(c, t00, b, tmp);
+	fsquare_times(t00, c, tmp1, (u32)20U);
+	fmul(t00, t00, c, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)10U);
+	fmul(b, t00, b, tmp);
+	fsquare_times(t00, b, tmp1, (u32)50U);
+	fmul(c, t00, b, tmp);
+	fsquare_times(t00, c, tmp1, (u32)100U);
+	fmul(t00, t00, c, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)50U);
+	fmul(t00, t00, b, tmp);
+	fsquare_times(t00, t00, tmp1, (u32)5U);
+	a = t1;
+	t0 = t1 + (u32)12U;
+	fmul(o, t0, a, tmp);
+}
+
+static void store_felem(u64 *b, u64 *f)
+{
+	u64 f30 = f[3U];
+	u64 top_bit0 = f30 >> (u32)63U;
+	u64 f31;
+	u64 top_bit;
+	u64 f0;
+	u64 f1;
+	u64 f2;
+	u64 f3;
+	u64 m0;
+	u64 m1;
+	u64 m2;
+	u64 m3;
+	u64 mask;
+	u64 f0_;
+	u64 f1_;
+	u64 f2_;
+	u64 f3_;
+	u64 o0;
+	u64 o1;
+	u64 o2;
+	u64 o3;
+	f[3U] = f30 & (u64)0x7fffffffffffffffU;
+	add_scalar(f, f, (u64)19U * top_bit0);
+	f31 = f[3U];
+	top_bit = f31 >> (u32)63U;
+	f[3U] = f31 & (u64)0x7fffffffffffffffU;
+	add_scalar(f, f, (u64)19U * top_bit);
+	f0 = f[0U];
+	f1 = f[1U];
+	f2 = f[2U];
+	f3 = f[3U];
+	m0 = gte_mask(f0, (u64)0xffffffffffffffedU);
+	m1 = eq_mask(f1, (u64)0xffffffffffffffffU);
+	m2 = eq_mask(f2, (u64)0xffffffffffffffffU);
+	m3 = eq_mask(f3, (u64)0x7fffffffffffffffU);
+	mask = ((m0 & m1) & m2) & m3;
+	f0_ = f0 - (mask & (u64)0xffffffffffffffedU);
+	f1_ = f1 - (mask & (u64)0xffffffffffffffffU);
+	f2_ = f2 - (mask & (u64)0xffffffffffffffffU);
+	f3_ = f3 - (mask & (u64)0x7fffffffffffffffU);
+	o0 = f0_;
+	o1 = f1_;
+	o2 = f2_;
+	o3 = f3_;
+	b[0U] = o0;
+	b[1U] = o1;
+	b[2U] = o2;
+	b[3U] = o3;
+}
+
+static void encode_point(u8 *o, const u64 *i)
+{
+	const u64 *x = i;
+	const u64 *z = i + (u32)4U;
+	u64 tmp[4U] = { 0U };
+	u64 tmp_w[16U] = { 0U };
+	finv(tmp, z, tmp_w);
+	fmul(tmp, tmp, x, tmp_w);
+	store_felem((u64 *)o, tmp);
+}
+
+static void curve25519_ever64(u8 *out, const u8 *priv, const u8 *pub)
+{
+	u64 init1[8U] = { 0U };
+	u64 tmp[4U] = { 0U };
+	u64 tmp3;
+	u64 *x;
+	u64 *z;
+	{
+		u32 i;
+		for (i = (u32)0U; i < (u32)4U; i = i + (u32)1U) {
+			u64 *os = tmp;
+			const u8 *bj = pub + i * (u32)8U;
+			u64 u = *(u64 *)bj;
+			u64 r = u;
+			u64 x0 = r;
+			os[i] = x0;
+		}
+	}
+	tmp3 = tmp[3U];
+	tmp[3U] = tmp3 & (u64)0x7fffffffffffffffU;
+	x = init1;
+	z = init1 + (u32)4U;
+	z[0U] = (u64)1U;
+	z[1U] = (u64)0U;
+	z[2U] = (u64)0U;
+	z[3U] = (u64)0U;
+	x[0U] = tmp[0U];
+	x[1U] = tmp[1U];
+	x[2U] = tmp[2U];
+	x[3U] = tmp[3U];
+	montgomery_ladder(init1, priv, init1);
+	encode_point(out, init1);
+}
+
+/* The below constants were generated using this sage script:
+ *
+ * #!/usr/bin/env sage
+ * import sys
+ * from sage.all import *
+ * def limbs(n):
+ * 	n = int(n)
+ * 	l = ((n >> 0) % 2^64, (n >> 64) % 2^64, (n >> 128) % 2^64, (n >> 192) % 2^64)
+ * 	return "0x%016xULL, 0x%016xULL, 0x%016xULL, 0x%016xULL" % l
+ * ec = EllipticCurve(GF(2^255 - 19), [0, 486662, 0, 1, 0])
+ * p_minus_s = (ec.lift_x(9) - ec.lift_x(1))[0]
+ * print("static const u64 p_minus_s[] = { %s };\n" % limbs(p_minus_s))
+ * print("static const u64 table_ladder[] = {")
+ * p = ec.lift_x(9)
+ * for i in range(252):
+ * 	l = (p[0] + p[2]) / (p[0] - p[2])
+ * 	print(("\t%s" + ("," if i != 251 else "")) % limbs(l))
+ * 	p = p * 2
+ * print("};")
+ *
+ */
+
+static const u64 p_minus_s[] = { 0x816b1e0137d48290ULL, 0x440f6a51eb4d1207ULL, 0x52385f46dca2b71dULL, 0x215132111d8354cbULL };
+
+static const u64 table_ladder[] = {
+	0xfffffffffffffff3ULL, 0xffffffffffffffffULL, 0xffffffffffffffffULL, 0x5fffffffffffffffULL,
+	0x6b8220f416aafe96ULL, 0x82ebeb2b4f566a34ULL, 0xd5a9a5b075a5950fULL, 0x5142b2cf4b2488f4ULL,
+	0x6aaebc750069680cULL, 0x89cf7820a0f99c41ULL, 0x2a58d9183b56d0f4ULL, 0x4b5aca80e36011a4ULL,
+	0x329132348c29745dULL, 0xf4a2e616e1642fd7ULL, 0x1e45bb03ff67bc34ULL, 0x306912d0f42a9b4aULL,
+	0xff886507e6af7154ULL, 0x04f50e13dfeec82fULL, 0xaa512fe82abab5ceULL, 0x174e251a68d5f222ULL,
+	0xcf96700d82028898ULL, 0x1743e3370a2c02c5ULL, 0x379eec98b4e86eaaULL, 0x0c59888a51e0482eULL,
+	0xfbcbf1d699b5d189ULL, 0xacaef0d58e9fdc84ULL, 0xc1c20d06231f7614ULL, 0x2938218da274f972ULL,
+	0xf6af49beff1d7f18ULL, 0xcc541c22387ac9c2ULL, 0x96fcc9ef4015c56bULL, 0x69c1627c690913a9ULL,
+	0x7a86fd2f4733db0eULL, 0xfdb8c4f29e087de9ULL, 0x095e4b1a8ea2a229ULL, 0x1ad7a7c829b37a79ULL,
+	0x342d89cad17ea0c0ULL, 0x67bedda6cced2051ULL, 0x19ca31bf2bb42f74ULL, 0x3df7b4c84980acbbULL,
+	0xa8c6444dc80ad883ULL, 0xb91e440366e3ab85ULL, 0xc215cda00164f6d8ULL, 0x3d867c6ef247e668ULL,
+	0xc7dd582bcc3e658cULL, 0xfd2c4748ee0e5528ULL, 0xa0fd9b95cc9f4f71ULL, 0x7529d871b0675ddfULL,
+	0xb8f568b42d3cbd78ULL, 0x1233011b91f3da82ULL, 0x2dce6ccd4a7c3b62ULL, 0x75e7fc8e9e498603ULL,
+	0x2f4f13f1fcd0b6ecULL, 0xf1a8ca1f29ff7a45ULL, 0xc249c1a72981e29bULL, 0x6ebe0dbb8c83b56aULL,
+	0x7114fa8d170bb222ULL, 0x65a2dcd5bf93935fULL, 0xbdc41f68b59c979aULL, 0x2f0eef79a2ce9289ULL,
+	0x42ecbf0c083c37ceULL, 0x2930bc09ec496322ULL, 0xf294b0c19cfeac0dULL, 0x3780aa4bedfabb80ULL,
+	0x56c17d3e7cead929ULL, 0xe7cb4beb2e5722c5ULL, 0x0ce931732dbfe15aULL, 0x41b883c7621052f8ULL,
+	0xdbf75ca0c3d25350ULL, 0x2936be086eb1e351ULL, 0xc936e03cb4a9b212ULL, 0x1d45bf82322225aaULL,
+	0xe81ab1036a024cc5ULL, 0xe212201c304c9a72ULL, 0xc5d73fba6832b1fcULL, 0x20ffdb5a4d839581ULL,
+	0xa283d367be5d0fadULL, 0x6c2b25ca8b164475ULL, 0x9d4935467caaf22eULL, 0x5166408eee85ff49ULL,
+	0x3c67baa2fab4e361ULL, 0xb3e433c67ef35cefULL, 0x5259729241159b1cULL, 0x6a621892d5b0ab33ULL,
+	0x20b74a387555cdcbULL, 0x532aa10e1208923fULL, 0xeaa17b7762281dd1ULL, 0x61ab3443f05c44bfULL,
+	0x257a6c422324def8ULL, 0x131c6c1017e3cf7fULL, 0x23758739f630a257ULL, 0x295a407a01a78580ULL,
+	0xf8c443246d5da8d9ULL, 0x19d775450c52fa5dULL, 0x2afcfc92731bf83dULL, 0x7d10c8e81b2b4700ULL,
+	0xc8e0271f70baa20bULL, 0x993748867ca63957ULL, 0x5412efb3cb7ed4bbULL, 0x3196d36173e62975ULL,
+	0xde5bcad141c7dffcULL, 0x47cc8cd2b395c848ULL, 0xa34cd942e11af3cbULL, 0x0256dbf2d04ecec2ULL,
+	0x875ab7e94b0e667fULL, 0xcad4dd83c0850d10ULL, 0x47f12e8f4e72c79fULL, 0x5f1a87bb8c85b19bULL,
+	0x7ae9d0b6437f51b8ULL, 0x12c7ce5518879065ULL, 0x2ade09fe5cf77aeeULL, 0x23a05a2f7d2c5627ULL,
+	0x5908e128f17c169aULL, 0xf77498dd8ad0852dULL, 0x74b4c4ceab102f64ULL, 0x183abadd10139845ULL,
+	0xb165ba8daa92aaacULL, 0xd5c5ef9599386705ULL, 0xbe2f8f0cf8fc40d1ULL, 0x2701e635ee204514ULL,
+	0x629fa80020156514ULL, 0xf223868764a8c1ceULL, 0x5b894fff0b3f060eULL, 0x60d9944cf708a3faULL,
+	0xaeea001a1c7a201fULL, 0xebf16a633ee2ce63ULL, 0x6f7709594c7a07e1ULL, 0x79b958150d0208cbULL,
+	0x24b55e5301d410e7ULL, 0xe3a34edff3fdc84dULL, 0xd88768e4904032d8ULL, 0x131384427b3aaeecULL,
+	0x8405e51286234f14ULL, 0x14dc4739adb4c529ULL, 0xb8a2b5b250634ffdULL, 0x2fe2a94ad8a7ff93ULL,
+	0xec5c57efe843faddULL, 0x2843ce40f0bb9918ULL, 0xa4b561d6cf3d6305ULL, 0x743629bde8fb777eULL,
+	0x343edd46bbaf738fULL, 0xed981828b101a651ULL, 0xa401760b882c797aULL, 0x1fc223e28dc88730ULL,
+	0x48604e91fc0fba0eULL, 0xb637f78f052c6fa4ULL, 0x91ccac3d09e9239cULL, 0x23f7eed4437a687cULL,
+	0x5173b1118d9bd800ULL, 0x29d641b63189d4a7ULL, 0xfdbf177988bbc586ULL, 0x2959894fcad81df5ULL,
+	0xaebc8ef3b4bbc899ULL, 0x4148995ab26992b9ULL, 0x24e20b0134f92cfbULL, 0x40d158894a05dee8ULL,
+	0x46b00b1185af76f6ULL, 0x26bac77873187a79ULL, 0x3dc0bf95ab8fff5fULL, 0x2a608bd8945524d7ULL,
+	0x26449588bd446302ULL, 0x7c4bc21c0388439cULL, 0x8e98a4f383bd11b2ULL, 0x26218d7bc9d876b9ULL,
+	0xe3081542997c178aULL, 0x3c2d29a86fb6606fULL, 0x5c217736fa279374ULL, 0x7dde05734afeb1faULL,
+	0x3bf10e3906d42babULL, 0xe4f7803e1980649cULL, 0xe6053bf89595bf7aULL, 0x394faf38da245530ULL,
+	0x7a8efb58896928f4ULL, 0xfbc778e9cc6a113cULL, 0x72670ce330af596fULL, 0x48f222a81d3d6cf7ULL,
+	0xf01fce410d72caa7ULL, 0x5a20ecc7213b5595ULL, 0x7bc21165c1fa1483ULL, 0x07f89ae31da8a741ULL,
+	0x05d2c2b4c6830ff9ULL, 0xd43e330fc6316293ULL, 0xa5a5590a96d3a904ULL, 0x705edb91a65333b6ULL,
+	0x048ee15e0bb9a5f7ULL, 0x3240cfca9e0aaf5dULL, 0x8f4b71ceedc4a40bULL, 0x621c0da3de544a6dULL,
+	0x92872836a08c4091ULL, 0xce8375b010c91445ULL, 0x8a72eb524f276394ULL, 0x2667fcfa7ec83635ULL,
+	0x7f4c173345e8752aULL, 0x061b47feee7079a5ULL, 0x25dd9afa9f86ff34ULL, 0x3780cef5425dc89cULL,
+	0x1a46035a513bb4e9ULL, 0x3e1ef379ac575adaULL, 0xc78c5f1c5fa24b50ULL, 0x321a967634fd9f22ULL,
+	0x946707b8826e27faULL, 0x3dca84d64c506fd0ULL, 0xc189218075e91436ULL, 0x6d9284169b3b8484ULL,
+	0x3a67e840383f2ddfULL, 0x33eec9a30c4f9b75ULL, 0x3ec7c86fa783ef47ULL, 0x26ec449fbac9fbc4ULL,
+	0x5c0f38cba09b9e7dULL, 0x81168cc762a3478cULL, 0x3e23b0d306fc121cULL, 0x5a238aa0a5efdcddULL,
+	0x1ba26121c4ea43ffULL, 0x36f8c77f7c8832b5ULL, 0x88fbea0b0adcf99aULL, 0x5ca9938ec25bebf9ULL,
+	0xd5436a5e51fccda0ULL, 0x1dbc4797c2cd893bULL, 0x19346a65d3224a08ULL, 0x0f5034e49b9af466ULL,
+	0xf23c3967a1e0b96eULL, 0xe58b08fa867a4d88ULL, 0xfb2fabc6a7341679ULL, 0x2a75381eb6026946ULL,
+	0xc80a3be4c19420acULL, 0x66b1f6c681f2b6dcULL, 0x7cf7036761e93388ULL, 0x25abbbd8a660a4c4ULL,
+	0x91ea12ba14fd5198ULL, 0x684950fc4a3cffa9ULL, 0xf826842130f5ad28ULL, 0x3ea988f75301a441ULL,
+	0xc978109a695f8c6fULL, 0x1746eb4a0530c3f3ULL, 0x444d6d77b4459995ULL, 0x75952b8c054e5cc7ULL,
+	0xa3703f7915f4d6aaULL, 0x66c346202f2647d8ULL, 0xd01469df811d644bULL, 0x77fea47d81a5d71fULL,
+	0xc5e9529ef57ca381ULL, 0x6eeeb4b9ce2f881aULL, 0xb6e91a28e8009bd6ULL, 0x4b80be3e9afc3fecULL,
+	0x7e3773c526aed2c5ULL, 0x1b4afcb453c9a49dULL, 0xa920bdd7baffb24dULL, 0x7c54699f122d400eULL,
+	0xef46c8e14fa94bc8ULL, 0xe0b074ce2952ed5eULL, 0xbea450e1dbd885d5ULL, 0x61b68649320f712cULL,
+	0x8a485f7309ccbdd1ULL, 0xbd06320d7d4d1a2dULL, 0x25232973322dbef4ULL, 0x445dc4758c17f770ULL,
+	0xdb0434177cc8933cULL, 0xed6fe82175ea059fULL, 0x1efebefdc053db34ULL, 0x4adbe867c65daf99ULL,
+	0x3acd71a2a90609dfULL, 0xe5e991856dd04050ULL, 0x1ec69b688157c23cULL, 0x697427f6885cfe4dULL,
+	0xd7be7b9b65e1a851ULL, 0xa03d28d522c536ddULL, 0x28399d658fd2b645ULL, 0x49e5b7e17c2641e1ULL,
+	0x6f8c3a98700457a4ULL, 0x5078f0a25ebb6778ULL, 0xd13c3ccbc382960fULL, 0x2e003258a7df84b1ULL,
+	0x8ad1f39be6296a1cULL, 0xc1eeaa652a5fbfb2ULL, 0x33ee0673fd26f3cbULL, 0x59256173a69d2cccULL,
+	0x41ea07aa4e18fc41ULL, 0xd9fc19527c87a51eULL, 0xbdaacb805831ca6fULL, 0x445b652dc916694fULL,
+	0xce92a3a7f2172315ULL, 0x1edc282de11b9964ULL, 0xa1823aafe04c314aULL, 0x790a2d94437cf586ULL,
+	0x71c447fb93f6e009ULL, 0x8922a56722845276ULL, 0xbf70903b204f5169ULL, 0x2f7a89891ba319feULL,
+	0x02a08eb577e2140cULL, 0xed9a4ed4427bdcf4ULL, 0x5253ec44e4323cd1ULL, 0x3e88363c14e9355bULL,
+	0xaa66c14277110b8cULL, 0x1ae0391610a23390ULL, 0x2030bd12c93fc2a2ULL, 0x3ee141579555c7abULL,
+	0x9214de3a6d6e7d41ULL, 0x3ccdd88607f17efeULL, 0x674f1288f8e11217ULL, 0x5682250f329f93d0ULL,
+	0x6cf00b136d2e396eULL, 0x6e4cf86f1014debfULL, 0x5930b1b5bfcc4e83ULL, 0x047069b48aba16b6ULL,
+	0x0d4ce4ab69b20793ULL, 0xb24db91a97d0fb9eULL, 0xcdfa50f54e00d01dULL, 0x221b1085368bddb5ULL,
+	0xe7e59468b1e3d8d2ULL, 0x53c56563bd122f93ULL, 0xeee8a903e0663f09ULL, 0x61efa662cbbe3d42ULL,
+	0x2cf8ddddde6eab2aULL, 0x9bf80ad51435f231ULL, 0x5deadacec9f04973ULL, 0x29275b5d41d29b27ULL,
+	0xcfde0f0895ebf14fULL, 0xb9aab96b054905a7ULL, 0xcae80dd9a1c420fdULL, 0x0a63bf2f1673bbc7ULL,
+	0x092f6e11958fbc8cULL, 0x672a81e804822fadULL, 0xcac8351560d52517ULL, 0x6f3f7722c8f192f8ULL,
+	0xf8ba90ccc2e894b7ULL, 0x2c7557a438ff9f0dULL, 0x894d1d855ae52359ULL, 0x68e122157b743d69ULL,
+	0xd87e5570cfb919f3ULL, 0x3f2cdecd95798db9ULL, 0x2121154710c0a2ceULL, 0x3c66a115246dc5b2ULL,
+	0xcbedc562294ecb72ULL, 0xba7143c36a280b16ULL, 0x9610c2efd4078b67ULL, 0x6144735d946a4b1eULL,
+	0x536f111ed75b3350ULL, 0x0211db8c2041d81bULL, 0xf93cb1000e10413cULL, 0x149dfd3c039e8876ULL,
+	0xd479dde46b63155bULL, 0xb66e15e93c837976ULL, 0xdafde43b1f13e038ULL, 0x5fafda1a2e4b0b35ULL,
+	0x3600bbdf17197581ULL, 0x3972050bbe3cd2c2ULL, 0x5938906dbdd5be86ULL, 0x34fce5e43f9b860fULL,
+	0x75a8a4cd42d14d02ULL, 0x828dabc53441df65ULL, 0x33dcabedd2e131d3ULL, 0x3ebad76fb814d25fULL,
+	0xd4906f566f70e10fULL, 0x5d12f7aa51690f5aULL, 0x45adb16e76cefcf2ULL, 0x01f768aead232999ULL,
+	0x2b6cc77b6248febdULL, 0x3cd30628ec3aaffdULL, 0xce1c0b80d4ef486aULL, 0x4c3bff2ea6f66c23ULL,
+	0x3f2ec4094aeaeb5fULL, 0x61b19b286e372ca7ULL, 0x5eefa966de2a701dULL, 0x23b20565de55e3efULL,
+	0xe301ca5279d58557ULL, 0x07b2d4ce27c2874fULL, 0xa532cd8a9dcf1d67ULL, 0x2a52fee23f2bff56ULL,
+	0x8624efb37cd8663dULL, 0xbbc7ac20ffbd7594ULL, 0x57b85e9c82d37445ULL, 0x7b3052cb86a6ec66ULL,
+	0x3482f0ad2525e91eULL, 0x2cb68043d28edca0ULL, 0xaf4f6d052e1b003aULL, 0x185f8c2529781b0aULL,
+	0xaa41de5bd80ce0d6ULL, 0x9407b2416853e9d6ULL, 0x563ec36e357f4c3aULL, 0x4cc4b8dd0e297bceULL,
+	0xa2fc1a52ffb8730eULL, 0x1811f16e67058e37ULL, 0x10f9a366cddf4ee1ULL, 0x72f4a0c4a0b9f099ULL,
+	0x8c16c06f663f4ea7ULL, 0x693b3af74e970fbaULL, 0x2102e7f1d69ec345ULL, 0x0ba53cbc968a8089ULL,
+	0xca3d9dc7fea15537ULL, 0x4c6824bb51536493ULL, 0xb9886314844006b1ULL, 0x40d2a72ab454cc60ULL,
+	0x5936a1b712570975ULL, 0x91b9d648debda657ULL, 0x3344094bb64330eaULL, 0x006ba10d12ee51d0ULL,
+	0x19228468f5de5d58ULL, 0x0eb12f4c38cc05b0ULL, 0xa1039f9dd5601990ULL, 0x4502d4ce4fff0e0bULL,
+	0xeb2054106837c189ULL, 0xd0f6544c6dd3b93cULL, 0x40727064c416d74fULL, 0x6e15c6114b502ef0ULL,
+	0x4df2a398cfb1a76bULL, 0x11256c7419f2f6b1ULL, 0x4a497962066e6043ULL, 0x705b3aab41355b44ULL,
+	0x365ef536d797b1d8ULL, 0x00076bd622ddf0dbULL, 0x3bbf33b0e0575a88ULL, 0x3777aa05c8e4ca4dULL,
+	0x392745c85578db5fULL, 0x6fda4149dbae5ae2ULL, 0xb1f0b00b8adc9867ULL, 0x09963437d36f1da3ULL,
+	0x7e824e90a5dc3853ULL, 0xccb5f6641f135cbdULL, 0x6736d86c87ce8fccULL, 0x625f3ce26604249fULL,
+	0xaf8ac8059502f63fULL, 0x0c05e70a2e351469ULL, 0x35292e9c764b6305ULL, 0x1a394360c7e23ac3ULL,
+	0xd5c6d53251183264ULL, 0x62065abd43c2b74fULL, 0xb5fbf5d03b973f9bULL, 0x13a3da3661206e5eULL,
+	0xc6bd5837725d94e5ULL, 0x18e30912205016c5ULL, 0x2088ce1570033c68ULL, 0x7fba1f495c837987ULL,
+	0x5a8c7423f2f9079dULL, 0x1735157b34023fc5ULL, 0xe4f9b49ad2fab351ULL, 0x6691ff72c878e33cULL,
+	0x122c2adedc5eff3eULL, 0xf8dd4bf1d8956cf4ULL, 0xeb86205d9e9e5bdaULL, 0x049b92b9d975c743ULL,
+	0xa5379730b0f6c05aULL, 0x72a0ffacc6f3a553ULL, 0xb0032c34b20dcd6dULL, 0x470e9dbc88d5164aULL,
+	0xb19cf10ca237c047ULL, 0xb65466711f6c81a2ULL, 0xb3321bd16dd80b43ULL, 0x48c14f600c5fbe8eULL,
+	0x66451c264aa6c803ULL, 0xb66e3904a4fa7da6ULL, 0xd45f19b0b3128395ULL, 0x31602627c3c9bc10ULL,
+	0x3120dc4832e4e10dULL, 0xeb20c46756c717f7ULL, 0x00f52e3f67280294ULL, 0x566d4fc14730c509ULL,
+	0x7e3a5d40fd837206ULL, 0xc1e926dc7159547aULL, 0x216730fba68d6095ULL, 0x22e8c3843f69cea7ULL,
+	0x33d074e8930e4b2bULL, 0xb6e4350e84d15816ULL, 0x5534c26ad6ba2365ULL, 0x7773c12f89f1f3f3ULL,
+	0x8cba404da57962aaULL, 0x5b9897a81999ce56ULL, 0x508e862f121692fcULL, 0x3a81907fa093c291ULL,
+	0x0dded0ff4725a510ULL, 0x10d8cc10673fc503ULL, 0x5b9d151c9f1f4e89ULL, 0x32a5c1d5cb09a44cULL,
+	0x1e0aa442b90541fbULL, 0x5f85eb7cc1b485dbULL, 0xbee595ce8a9df2e5ULL, 0x25e496c722422236ULL,
+	0x5edf3c46cd0fe5b9ULL, 0x34e75a7ed2a43388ULL, 0xe488de11d761e352ULL, 0x0e878a01a085545cULL,
+	0xba493c77e021bb04ULL, 0x2b4d1843c7df899aULL, 0x9ea37a487ae80d67ULL, 0x67a9958011e41794ULL,
+	0x4b58051a6697b065ULL, 0x47e33f7d8d6ba6d4ULL, 0xbb4da8d483ca46c1ULL, 0x68becaa181c2db0dULL,
+	0x8d8980e90b989aa5ULL, 0xf95eb14a2c93c99bULL, 0x51c6c7c4796e73a2ULL, 0x6e228363b5efb569ULL,
+	0xc6bbc0b02dd624c8ULL, 0x777eb47dec8170eeULL, 0x3cde15a004cfafa9ULL, 0x1dc6bc087160bf9bULL,
+	0x2e07e043eec34002ULL, 0x18e9fc677a68dc7fULL, 0xd8da03188bd15b9aULL, 0x48fbc3bb00568253ULL,
+	0x57547d4cfb654ce1ULL, 0xd3565b82a058e2adULL, 0xf63eaf0bbf154478ULL, 0x47531ef114dfbb18ULL,
+	0xe1ec630a4278c587ULL, 0x5507d546ca8e83f3ULL, 0x85e135c63adc0c2bULL, 0x0aa7efa85682844eULL,
+	0x72691ba8b3e1f615ULL, 0x32b4e9701fbe3ffaULL, 0x97b6d92e39bb7868ULL, 0x2cfe53dea02e39e8ULL,
+	0x687392cd85cd52b0ULL, 0x27ff66c910e29831ULL, 0x97134556a9832d06ULL, 0x269bb0360a84f8a0ULL,
+	0x706e55457643f85cULL, 0x3734a48c9b597d1bULL, 0x7aee91e8c6efa472ULL, 0x5cd6abc198a9d9e0ULL,
+	0x0e04de06cb3ce41aULL, 0xd8c6eb893402e138ULL, 0x904659bb686e3772ULL, 0x7215c371746ba8c8ULL,
+	0xfd12a97eeae4a2d9ULL, 0x9514b7516394f2c5ULL, 0x266fd5809208f294ULL, 0x5c847085619a26b9ULL,
+	0x52985410fed694eaULL, 0x3c905b934a2ed254ULL, 0x10bb47692d3be467ULL, 0x063b3d2d69e5e9e1ULL,
+	0x472726eedda57debULL, 0xefb6c4ae10f41891ULL, 0x2b1641917b307614ULL, 0x117c554fc4f45b7cULL,
+	0xc07cf3118f9d8812ULL, 0x01dbd82050017939ULL, 0xd7e803f4171b2827ULL, 0x1015e87487d225eaULL,
+	0xc58de3fed23acc4dULL, 0x50db91c294a7be2dULL, 0x0b94d43d1c9cf457ULL, 0x6b1640fa6e37524aULL,
+	0x692f346c5fda0d09ULL, 0x200b1c59fa4d3151ULL, 0xb8c46f760777a296ULL, 0x4b38395f3ffdfbcfULL,
+	0x18d25e00be54d671ULL, 0x60d50582bec8aba6ULL, 0x87ad8f263b78b982ULL, 0x50fdf64e9cda0432ULL,
+	0x90f567aac578dcf0ULL, 0xef1e9b0ef2a3133bULL, 0x0eebba9242d9de71ULL, 0x15473c9bf03101c7ULL,
+	0x7c77e8ae56b78095ULL, 0xb678e7666e6f078eULL, 0x2da0b9615348ba1fULL, 0x7cf931c1ff733f0bULL,
+	0x26b357f50a0a366cULL, 0xe9708cf42b87d732ULL, 0xc13aeea5f91cb2c0ULL, 0x35d90c991143bb4cULL,
+	0x47c1c404a9a0d9dcULL, 0x659e58451972d251ULL, 0x3875a8c473b38c31ULL, 0x1fbd9ed379561f24ULL,
+	0x11fabc6fd41ec28dULL, 0x7ef8dfe3cd2a2dcaULL, 0x72e73b5d8c404595ULL, 0x6135fa4954b72f27ULL,
+	0xccfc32a2de24b69cULL, 0x3f55698c1f095d88ULL, 0xbe3350ed5ac3f929ULL, 0x5e9bf806ca477eebULL,
+	0xe9ce8fb63c309f68ULL, 0x5376f63565e1f9f4ULL, 0xd1afcfb35a6393f1ULL, 0x6632a1ede5623506ULL,
+	0x0b7d6c390c2ded4cULL, 0x56cb3281df04cb1fULL, 0x66305a1249ecc3c7ULL, 0x5d588b60a38ca72aULL,
+	0xa6ecbf78e8e5f42dULL, 0x86eeb44b3c8a3eecULL, 0xec219c48fbd21604ULL, 0x1aaf1af517c36731ULL,
+	0xc306a2836769bde7ULL, 0x208280622b1e2adbULL, 0x8027f51ffbff94a6ULL, 0x76cfa1ce1124f26bULL,
+	0x18eb00562422abb6ULL, 0xf377c4d58f8c29c3ULL, 0x4dbbc207f531561aULL, 0x0253b7f082128a27ULL,
+	0x3d1f091cb62c17e0ULL, 0x4860e1abd64628a9ULL, 0x52d17436309d4253ULL, 0x356f97e13efae576ULL,
+	0xd351e11aa150535bULL, 0x3e6b45bb1dd878ccULL, 0x0c776128bed92c98ULL, 0x1d34ae93032885b8ULL,
+	0x4ba0488ca85ba4c3ULL, 0x985348c33c9ce6ceULL, 0x66124c6f97bda770ULL, 0x0f81a0290654124aULL,
+	0x9ed09ca6569b86fdULL, 0x811009fd18af9a2dULL, 0xff08d03f93d8c20aULL, 0x52a148199faef26bULL,
+	0x3e03f9dc2d8d1b73ULL, 0x4205801873961a70ULL, 0xc0d987f041a35970ULL, 0x07aa1f15a1c0d549ULL,
+	0xdfd46ce08cd27224ULL, 0x6d0a024f934e4239ULL, 0x808a7a6399897b59ULL, 0x0a4556e9e13d95a2ULL,
+	0xd21a991fe9c13045ULL, 0x9b0e8548fe7751b8ULL, 0x5da643cb4bf30035ULL, 0x77db28d63940f721ULL,
+	0xfc5eeb614adc9011ULL, 0x5229419ae8c411ebULL, 0x9ec3e7787d1dcf74ULL, 0x340d053e216e4cb5ULL,
+	0xcac7af39b48df2b4ULL, 0xc0faec2871a10a94ULL, 0x140a69245ca575edULL, 0x0cf1c37134273a4cULL,
+	0xc8ee306ac224b8a5ULL, 0x57eaee7ccb4930b0ULL, 0xa1e806bdaacbe74fULL, 0x7d9a62742eeb657dULL,
+	0x9eb6b6ef546c4830ULL, 0x885cca1fddb36e2eULL, 0xe6b9f383ef0d7105ULL, 0x58654fef9d2e0412ULL,
+	0xa905c4ffbe0e8e26ULL, 0x942de5df9b31816eULL, 0x497d723f802e88e1ULL, 0x30684dea602f408dULL,
+	0x21e5a278a3e6cb34ULL, 0xaefb6e6f5b151dc4ULL, 0xb30b8e049d77ca15ULL, 0x28c3c9cf53b98981ULL,
+	0x287fb721556cdd2aULL, 0x0d317ca897022274ULL, 0x7468c7423a543258ULL, 0x4a7f11464eb5642fULL,
+	0xa237a4774d193aa6ULL, 0xd865986ea92129a1ULL, 0x24c515ecf87c1a88ULL, 0x604003575f39f5ebULL,
+	0x47b9f189570a9b27ULL, 0x2b98cede465e4b78ULL, 0x026df551dbb85c20ULL, 0x74fcd91047e21901ULL,
+	0x13e2a90a23c1bfa3ULL, 0x0cb0074e478519f6ULL, 0x5ff1cbbe3af6cf44ULL, 0x67fe5438be812dbeULL,
+	0xd13cf64fa40f05b0ULL, 0x054dfb2f32283787ULL, 0x4173915b7f0d2aeaULL, 0x482f144f1f610d4eULL,
+	0xf6210201b47f8234ULL, 0x5d0ae1929e70b990ULL, 0xdcd7f455b049567cULL, 0x7e93d0f1f0916f01ULL,
+	0xdd79cbf18a7db4faULL, 0xbe8391bf6f74c62fULL, 0x027145d14b8291bdULL, 0x585a73ea2cbf1705ULL,
+	0x485ca03e928a0db2ULL, 0x10fc01a5742857e7ULL, 0x2f482edbd6d551a7ULL, 0x0f0433b5048fdb8aULL,
+	0x60da2e8dd7dc6247ULL, 0x88b4c9d38cd4819aULL, 0x13033ac001f66697ULL, 0x273b24fe3b367d75ULL,
+	0xc6e8f66a31b3b9d4ULL, 0x281514a494df49d5ULL, 0xd1726fdfc8b23da7ULL, 0x4b3ae7d103dee548ULL,
+	0xc6256e19ce4b9d7eULL, 0xff5c5cf186e3c61cULL, 0xacc63ca34b8ec145ULL, 0x74621888fee66574ULL,
+	0x956f409645290a1eULL, 0xef0bf8e3263a962eULL, 0xed6a50eb5ec2647bULL, 0x0694283a9dca7502ULL,
+	0x769b963643a2dcd1ULL, 0x42b7c8ea09fc5353ULL, 0x4f002aee13397eabULL, 0x63005e2c19b7d63aULL,
+	0xca6736da63023beaULL, 0x966c7f6db12a99b7ULL, 0xace09390c537c5e1ULL, 0x0b696063a1aa89eeULL,
+	0xebb03e97288c56e5ULL, 0x432a9f9f938c8be8ULL, 0xa6a5a93d5b717f71ULL, 0x1a5fb4c3e18f9d97ULL,
+	0x1c94e7ad1c60cdceULL, 0xee202a43fc02c4a0ULL, 0x8dafe4d867c46a20ULL, 0x0a10263c8ac27b58ULL,
+	0xd0dea9dfe4432a4aULL, 0x856af87bbe9277c5ULL, 0xce8472acc212c71aULL, 0x6f151b6d9bbb1e91ULL,
+	0x26776c527ceed56aULL, 0x7d211cb7fbf8faecULL, 0x37ae66a6fd4609ccULL, 0x1f81b702d2770c42ULL,
+	0x2fb0b057eac58392ULL, 0xe1dd89fe29744e9dULL, 0xc964f8eb17beb4f8ULL, 0x29571073c9a2d41eULL,
+	0xa948a18981c0e254ULL, 0x2df6369b65b22830ULL, 0xa33eb2d75fcfd3c6ULL, 0x078cd6ec4199a01fULL,
+	0x4a584a41ad900d2fULL, 0x32142b78e2c74c52ULL, 0x68c4e8338431c978ULL, 0x7f69ea9008689fc2ULL,
+	0x52f2c81e46a38265ULL, 0xfd78072d04a832fdULL, 0x8cd7d5fa25359e94ULL, 0x4de71b7454cc29d2ULL,
+	0x42eb60ad1eda6ac9ULL, 0x0aad37dfdbc09c3aULL, 0x81004b71e33cc191ULL, 0x44e6be345122803cULL,
+	0x03fe8388ba1920dbULL, 0xf5d57c32150db008ULL, 0x49c8c4281af60c29ULL, 0x21edb518de701aeeULL,
+	0x7fb63e418f06dc99ULL, 0xa4460d99c166d7b8ULL, 0x24dd5248ce520a83ULL, 0x5ec3ad712b928358ULL,
+	0x15022a5fbd17930fULL, 0xa4f64a77d82570e3ULL, 0x12bc8d6915783712ULL, 0x498194c0fc620abbULL,
+	0x38a2d9d255686c82ULL, 0x785c6bd9193e21f0ULL, 0xe4d5c81ab24a5484ULL, 0x56307860b2e20989ULL,
+	0x429d55f78b4d74c4ULL, 0x22f1834643350131ULL, 0x1e60c24598c71fffULL, 0x59f2f014979983efULL,
+	0x46a47d56eb494a44ULL, 0x3e22a854d636a18eULL, 0xb346e15274491c3bULL, 0x2ceafd4e5390cde7ULL,
+	0xba8a8538be0d6675ULL, 0x4b9074bb50818e23ULL, 0xcbdab89085d304c3ULL, 0x61a24fe0e56192c4ULL,
+	0xcb7615e6db525bcbULL, 0xdd7d8c35a567e4caULL, 0xe6b4153acafcdd69ULL, 0x2d668e097f3c9766ULL,
+	0xa57e7e265ce55ef0ULL, 0x5d9f4e527cd4b967ULL, 0xfbc83606492fd1e5ULL, 0x090d52beb7c3f7aeULL,
+	0x09b9515a1e7b4d7cULL, 0x1f266a2599da44c0ULL, 0xa1c49548e2c55504ULL, 0x7ef04287126f15ccULL,
+	0xfed1659dbd30ef15ULL, 0x8b4ab9eec4e0277bULL, 0x884d6236a5df3291ULL, 0x1fd96ea6bf5cf788ULL,
+	0x42a161981f190d9aULL, 0x61d849507e6052c1ULL, 0x9fe113bf285a2cd5ULL, 0x7c22d676dbad85d8ULL,
+	0x82e770ed2bfbd27dULL, 0x4c05b2ece996f5a5ULL, 0xcd40a9c2b0900150ULL, 0x5895319213d9bf64ULL,
+	0xe7cc5d703fea2e08ULL, 0xb50c491258e2188cULL, 0xcce30baa48205bf0ULL, 0x537c659ccfa32d62ULL,
+	0x37b6623a98cfc088ULL, 0xfe9bed1fa4d6aca4ULL, 0x04d29b8e56a8d1b0ULL, 0x725f71c40b519575ULL,
+	0x28c7f89cd0339ce6ULL, 0x8367b14469ddc18bULL, 0x883ada83a6a1652cULL, 0x585f1974034d6c17ULL,
+	0x89cfb266f1b19188ULL, 0xe63b4863e7c35217ULL, 0xd88c9da6b4c0526aULL, 0x3e035c9df0954635ULL,
+	0xdd9d5412fb45de9dULL, 0xdd684532e4cff40dULL, 0x4b5c999b151d671cULL, 0x2d8c2cc811e7f690ULL,
+	0x7f54be1d90055d40ULL, 0xa464c5df464aaf40ULL, 0x33979624f0e917beULL, 0x2c018dc527356b30ULL,
+	0xa5415024e330b3d4ULL, 0x73ff3d96691652d3ULL, 0x94ec42c4ef9b59f1ULL, 0x0747201618d08e5aULL,
+	0x4d6ca48aca411c53ULL, 0x66415f2fcfa66119ULL, 0x9c4dd40051e227ffULL, 0x59810bc09a02f7ebULL,
+	0x2a7eb171b3dc101dULL, 0x441c5ab99ffef68eULL, 0x32025c9b93b359eaULL, 0x5e8ce0a71e9d112fULL,
+	0xbfcccb92429503fdULL, 0xd271ba752f095d55ULL, 0x345ead5e972d091eULL, 0x18c8df11a83103baULL,
+	0x90cd949a9aed0f4cULL, 0xc5d1f4cb6660e37eULL, 0xb8cac52d56c52e0bULL, 0x6e42e400c5808e0dULL,
+	0xa3b46966eeaefd23ULL, 0x0c4f1f0be39ecdcaULL, 0x189dc8c9d683a51dULL, 0x51f27f054c09351bULL,
+	0x4c487ccd2a320682ULL, 0x587ea95bb3df1c96ULL, 0xc8ccf79e555cb8e8ULL, 0x547dc829a206d73dULL,
+	0xb822a6cd80c39b06ULL, 0xe96d54732000d4c6ULL, 0x28535b6f91463b4dULL, 0x228f4660e2486e1dULL,
+	0x98799538de8d3abfULL, 0x8cd8330045ebca6eULL, 0x79952a008221e738ULL, 0x4322e1a7535cd2bbULL,
+	0xb114c11819d1801cULL, 0x2016e4d84f3f5ec7ULL, 0xdd0e2df409260f4cULL, 0x5ec362c0ae5f7266ULL,
+	0xc0462b18b8b2b4eeULL, 0x7cc8d950274d1afbULL, 0xf25f7105436b02d2ULL, 0x43bbf8dcbff9ccd3ULL,
+	0xb6ad1767a039e9dfULL, 0xb0714da8f69d3583ULL, 0x5e55fa18b42931f5ULL, 0x4ed5558f33c60961ULL,
+	0x1fe37901c647a5ddULL, 0x593ddf1f8081d357ULL, 0x0249a4fd813fd7a6ULL, 0x69acca274e9caf61ULL,
+	0x047ba3ea330721c9ULL, 0x83423fc20e7e1ea0ULL, 0x1df4c0af01314a60ULL, 0x09a62dab89289527ULL,
+	0xa5b325a49cc6cb00ULL, 0xe94b5dc654b56cb6ULL, 0x3be28779adc994a0ULL, 0x4296e8f8ba3a4aadULL,
+	0x328689761e451eabULL, 0x2e4d598bff59594aULL, 0x49b96853d7a7084aULL, 0x4980a319601420a8ULL,
+	0x9565b9e12f552c42ULL, 0x8a5318db7100fe96ULL, 0x05c90b4d43add0d7ULL, 0x538b4cd66a5d4edaULL,
+	0xf4e94fc3e89f039fULL, 0x592c9af26f618045ULL, 0x08a36eb5fd4b9550ULL, 0x25fffaf6c2ed1419ULL,
+	0x34434459cc79d354ULL, 0xeeecbfb4b1d5476bULL, 0xddeb34a061615d99ULL, 0x5129cecceb64b773ULL,
+	0xee43215894993520ULL, 0x772f9c7cf14c0b3bULL, 0xd2e2fce306bedad5ULL, 0x715f42b546f06a97ULL,
+	0x434ecdceda5b5f1aULL, 0x0da17115a49741a9ULL, 0x680bd77c73edad2eULL, 0x487c02354edd9041ULL,
+	0xb8efeff3a70ed9c4ULL, 0x56a32aa3e857e302ULL, 0xdf3a68bd48a2a5a0ULL, 0x07f650b73176c444ULL,
+	0xe38b9b1626e0ccb1ULL, 0x79e053c18b09fb36ULL, 0x56d90319c9f94964ULL, 0x1ca941e7ac9ff5c4ULL,
+	0x49c4df29162fa0bbULL, 0x8488cf3282b33305ULL, 0x95dfda14cabb437dULL, 0x3391f78264d5ad86ULL,
+	0x729ae06ae2b5095dULL, 0xd58a58d73259a946ULL, 0xe9834262d13921edULL, 0x27fedafaa54bb592ULL,
+	0xa99dc5b829ad48bbULL, 0x5f025742499ee260ULL, 0x802c8ecd5d7513fdULL, 0x78ceb3ef3f6dd938ULL,
+	0xc342f44f8a135d94ULL, 0x7b9edb44828cdda3ULL, 0x9436d11a0537cfe7ULL, 0x5064b164ec1ab4c8ULL,
+	0x7020eccfd37eb2fcULL, 0x1f31ea3ed90d25fcULL, 0x1b930d7bdfa1bb34ULL, 0x5344467a48113044ULL,
+	0x70073170f25e6dfbULL, 0xe385dc1a50114cc8ULL, 0x2348698ac8fc4f00ULL, 0x2a77a55284dd40d8ULL,
+	0xfe06afe0c98c6ce4ULL, 0xc235df96dddfd6e4ULL, 0x1428d01e33bf1ed3ULL, 0x785768ec9300bdafULL,
+	0x9702e57a91deb63bULL, 0x61bdb8bfe5ce8b80ULL, 0x645b426f3d1d58acULL, 0x4804a82227a557bcULL,
+	0x8e57048ab44d2601ULL, 0x68d6501a4b3a6935ULL, 0xc39c9ec3f9e1c293ULL, 0x4172f257d4de63e2ULL,
+	0xd368b450330c6401ULL, 0x040d3017418f2391ULL, 0x2c34bb6090b7d90dULL, 0x16f649228fdfd51fULL,
+	0xbea6818e2b928ef5ULL, 0xe28ccf91cdc11e72ULL, 0x594aaa68e77a36cdULL, 0x313034806c7ffd0fULL,
+	0x8a9d27ac2249bd65ULL, 0x19a3b464018e9512ULL, 0xc26ccff352b37ec7ULL, 0x056f68341d797b21ULL,
+	0x5e79d6757efd2327ULL, 0xfabdbcb6553afe15ULL, 0xd3e7222c6eaf5a60ULL, 0x7046c76d4dae743bULL,
+	0x660be872b18d4a55ULL, 0x19992518574e1496ULL, 0xc103053a302bdcbbULL, 0x3ed8e9800b218e8eULL,
+	0x7b0b9239fa75e03eULL, 0xefe9fb684633c083ULL, 0x98a35fbe391a7793ULL, 0x6065510fe2d0fe34ULL,
+	0x55cb668548abad0cULL, 0xb4584548da87e527ULL, 0x2c43ecea0107c1ddULL, 0x526028809372de35ULL,
+	0x3415c56af9213b1fULL, 0x5bee1a4d017e98dbULL, 0x13f6b105b5cf709bULL, 0x5ff20e3482b29ab6ULL,
+	0x0aa29c75cc2e6c90ULL, 0xfc7d73ca3a70e206ULL, 0x899fc38fc4b5c515ULL, 0x250386b124ffc207ULL,
+	0x54ea28d5ae3d2b56ULL, 0x9913149dd6de60ceULL, 0x16694fc58f06d6c1ULL, 0x46b23975eb018fc7ULL,
+	0x470a6a0fb4b7b4e2ULL, 0x5d92475a8f7253deULL, 0xabeee5b52fbd3adbULL, 0x7fa20801a0806968ULL,
+	0x76f3faf19f7714d2ULL, 0xb3e840c12f4660c3ULL, 0x0fb4cd8df212744eULL, 0x4b065a251d3a2dd2ULL,
+	0x5cebde383d77cd4aULL, 0x6adf39df882c9cb1ULL, 0xa2dd242eb09af759ULL, 0x3147c0e50e5f6422ULL,
+	0x164ca5101d1350dbULL, 0xf8d13479c33fc962ULL, 0xe640ce4d13e5da08ULL, 0x4bdee0c45061f8baULL,
+	0xd7c46dc1a4edb1c9ULL, 0x5514d7b6437fd98aULL, 0x58942f6bb2a1c00bULL, 0x2dffb2ab1d70710eULL,
+	0xccdfcf2fc18b6d68ULL, 0xa8ebcba8b7806167ULL, 0x980697f95e2937e3ULL, 0x02fbba1cd0126e8cULL
+};
+
+static void curve25519_ever64_base(u8 *out, const u8 *priv)
+{
+	u64 swap = 1;
+	int i, j, k;
+	u64 tmp[16 + 32 + 4];
+	u64 *x1 = &tmp[0];
+	u64 *z1 = &tmp[4];
+	u64 *x2 = &tmp[8];
+	u64 *z2 = &tmp[12];
+	u64 *xz1 = &tmp[0];
+	u64 *xz2 = &tmp[8];
+	u64 *a = &tmp[0 + 16];
+	u64 *b = &tmp[4 + 16];
+	u64 *c = &tmp[8 + 16];
+	u64 *ab = &tmp[0 + 16];
+	u64 *abcd = &tmp[0 + 16];
+	u64 *ef = &tmp[16 + 16];
+	u64 *efgh = &tmp[16 + 16];
+	u64 *key = &tmp[0 + 16 + 32];
+
+	memcpy(key, priv, 32);
+	((u8 *)key)[0] &= 248;
+	((u8 *)key)[31] = (((u8 *)key)[31] & 127) | 64;
+
+	x1[0] = 1, x1[1] = x1[2] = x1[3] = 0;
+	z1[0] = 1, z1[1] = z1[2] = z1[3] = 0;
+	z2[0] = 1, z2[1] = z2[2] = z2[3] = 0;
+	memcpy(x2, p_minus_s, sizeof(p_minus_s));
+
+	j = 3;
+	for (i = 0; i < 4; ++i) {
+		while (j < (const int[]){ 64, 64, 64, 63 }[i]) {
+			u64 bit = (key[i] >> j) & 1;
+			k = (64 * i + j - 3);
+			swap = swap ^ bit;
+			cswap2(swap, xz1, xz2);
+			swap = bit;
+			fsub(b, x1, z1);
+			fadd(a, x1, z1);
+			fmul(c, &table_ladder[4 * k], b, ef);
+			fsub(b, a, c);
+			fadd(a, a, c);
+			fsqr2(ab, ab, efgh);
+			fmul2(xz1, xz2, ab, efgh);
+			++j;
+		}
+		j = 0;
+	}
+
+	point_double(xz1, abcd, efgh);
+	point_double(xz1, abcd, efgh);
+	point_double(xz1, abcd, efgh);
+	encode_point(out, xz1);
+
+	memzero_explicit(tmp, sizeof(tmp));
+}
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(curve25519_use_bmi2_adx);
+
+void curve25519_arch(u8 mypublic[CURVE25519_KEY_SIZE],
+		     const u8 secret[CURVE25519_KEY_SIZE],
+		     const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&curve25519_use_bmi2_adx))
+		curve25519_ever64(mypublic, secret, basepoint);
+	else
+		curve25519_generic(mypublic, secret, basepoint);
+}
+EXPORT_SYMBOL(curve25519_arch);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE])
+{
+	if (static_branch_likely(&curve25519_use_bmi2_adx))
+		curve25519_ever64_base(pub, secret);
+	else
+		curve25519_generic(pub, secret, curve25519_base_point);
+}
+EXPORT_SYMBOL(curve25519_base_arch);
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_generate_public_key(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+
+	if (req->src)
+		return -EINVAL;
+
+	curve25519_base_arch(buf, secret);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_shared_secret(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+
+	if (!req->src)
+		return -EINVAL;
+
+	copied = sg_copy_to_buffer(req->src,
+				   sg_nents_for_len(req->src,
+						    CURVE25519_KEY_SIZE),
+				   public_key, CURVE25519_KEY_SIZE);
+	if (copied != CURVE25519_KEY_SIZE)
+		return -EINVAL;
+
+	curve25519_arch(buf, secret, public_key);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-x86",
+	.base.cra_priority	= 200,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_generate_public_key,
+	.compute_shared_secret	= curve25519_compute_shared_secret,
+	.max_size		= curve25519_max_size,
+};
+
+
+static int __init curve25519_mod_init(void)
+{
+	if (boot_cpu_has(X86_FEATURE_BMI2) && boot_cpu_has(X86_FEATURE_ADX))
+		static_branch_enable(&curve25519_use_bmi2_adx);
+	else
+		return 0;
+	return IS_REACHABLE(CONFIG_CRYPTO_KPP) ?
+		crypto_register_kpp(&curve25519_alg) : 0;
+}
+
+static void __exit curve25519_mod_exit(void)
+{
+	if (IS_REACHABLE(CONFIG_CRYPTO_KPP) &&
+	    static_branch_likely(&curve25519_use_bmi2_adx))
+		crypto_unregister_kpp(&curve25519_alg);
+}
+
+module_init(curve25519_mod_init);
+module_exit(curve25519_mod_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-x86");
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/arch/x86/crypto/poly1305-avx2-x86_64.S b/arch/x86/crypto/poly1305-avx2-x86_64.S
deleted file mode 100644
index 8b341bc..0000000
--- a/arch/x86/crypto/poly1305-avx2-x86_64.S
+++ /dev/null
@@ -1,390 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Poly1305 authenticator algorithm, RFC7539, x64 AVX2 functions
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/linkage.h>
-
-.section	.rodata.cst32.ANMASK, "aM", @progbits, 32
-.align 32
-ANMASK:	.octa 0x0000000003ffffff0000000003ffffff
-	.octa 0x0000000003ffffff0000000003ffffff
-
-.section	.rodata.cst32.ORMASK, "aM", @progbits, 32
-.align 32
-ORMASK:	.octa 0x00000000010000000000000001000000
-	.octa 0x00000000010000000000000001000000
-
-.text
-
-#define h0 0x00(%rdi)
-#define h1 0x04(%rdi)
-#define h2 0x08(%rdi)
-#define h3 0x0c(%rdi)
-#define h4 0x10(%rdi)
-#define r0 0x00(%rdx)
-#define r1 0x04(%rdx)
-#define r2 0x08(%rdx)
-#define r3 0x0c(%rdx)
-#define r4 0x10(%rdx)
-#define u0 0x00(%r8)
-#define u1 0x04(%r8)
-#define u2 0x08(%r8)
-#define u3 0x0c(%r8)
-#define u4 0x10(%r8)
-#define w0 0x14(%r8)
-#define w1 0x18(%r8)
-#define w2 0x1c(%r8)
-#define w3 0x20(%r8)
-#define w4 0x24(%r8)
-#define y0 0x28(%r8)
-#define y1 0x2c(%r8)
-#define y2 0x30(%r8)
-#define y3 0x34(%r8)
-#define y4 0x38(%r8)
-#define m %rsi
-#define hc0 %ymm0
-#define hc1 %ymm1
-#define hc2 %ymm2
-#define hc3 %ymm3
-#define hc4 %ymm4
-#define hc0x %xmm0
-#define hc1x %xmm1
-#define hc2x %xmm2
-#define hc3x %xmm3
-#define hc4x %xmm4
-#define t1 %ymm5
-#define t2 %ymm6
-#define t1x %xmm5
-#define t2x %xmm6
-#define ruwy0 %ymm7
-#define ruwy1 %ymm8
-#define ruwy2 %ymm9
-#define ruwy3 %ymm10
-#define ruwy4 %ymm11
-#define ruwy0x %xmm7
-#define ruwy1x %xmm8
-#define ruwy2x %xmm9
-#define ruwy3x %xmm10
-#define ruwy4x %xmm11
-#define svxz1 %ymm12
-#define svxz2 %ymm13
-#define svxz3 %ymm14
-#define svxz4 %ymm15
-#define d0 %r9
-#define d1 %r10
-#define d2 %r11
-#define d3 %r12
-#define d4 %r13
-
-ENTRY(poly1305_4block_avx2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 64 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Quadblock count
-	# %r8:  Poly1305 derived key r^2 u[5], r^3 w[5], r^4 y[5],
-
-	# This four-block variant uses loop unrolled block processing. It
-	# requires 4 Poly1305 keys: r, r^2, r^3 and r^4:
-	# h = (h + m) * r  =>  h = (h + m1) * r^4 + m2 * r^3 + m3 * r^2 + m4 * r
-
-	vzeroupper
-	push		%rbx
-	push		%r12
-	push		%r13
-
-	# combine r0,u0,w0,y0
-	vmovd		y0,ruwy0x
-	vmovd		w0,t1x
-	vpunpcklqdq	t1,ruwy0,ruwy0
-	vmovd		u0,t1x
-	vmovd		r0,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy0,ruwy0
-
-	# combine r1,u1,w1,y1 and s1=r1*5,v1=u1*5,x1=w1*5,z1=y1*5
-	vmovd		y1,ruwy1x
-	vmovd		w1,t1x
-	vpunpcklqdq	t1,ruwy1,ruwy1
-	vmovd		u1,t1x
-	vmovd		r1,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy1,ruwy1
-	vpslld		$2,ruwy1,svxz1
-	vpaddd		ruwy1,svxz1,svxz1
-
-	# combine r2,u2,w2,y2 and s2=r2*5,v2=u2*5,x2=w2*5,z2=y2*5
-	vmovd		y2,ruwy2x
-	vmovd		w2,t1x
-	vpunpcklqdq	t1,ruwy2,ruwy2
-	vmovd		u2,t1x
-	vmovd		r2,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy2,ruwy2
-	vpslld		$2,ruwy2,svxz2
-	vpaddd		ruwy2,svxz2,svxz2
-
-	# combine r3,u3,w3,y3 and s3=r3*5,v3=u3*5,x3=w3*5,z3=y3*5
-	vmovd		y3,ruwy3x
-	vmovd		w3,t1x
-	vpunpcklqdq	t1,ruwy3,ruwy3
-	vmovd		u3,t1x
-	vmovd		r3,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy3,ruwy3
-	vpslld		$2,ruwy3,svxz3
-	vpaddd		ruwy3,svxz3,svxz3
-
-	# combine r4,u4,w4,y4 and s4=r4*5,v4=u4*5,x4=w4*5,z4=y4*5
-	vmovd		y4,ruwy4x
-	vmovd		w4,t1x
-	vpunpcklqdq	t1,ruwy4,ruwy4
-	vmovd		u4,t1x
-	vmovd		r4,t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,ruwy4,ruwy4
-	vpslld		$2,ruwy4,svxz4
-	vpaddd		ruwy4,svxz4,svxz4
-
-.Ldoblock4:
-	# hc0 = [m[48-51] & 0x3ffffff, m[32-35] & 0x3ffffff,
-	#	 m[16-19] & 0x3ffffff, m[ 0- 3] & 0x3ffffff + h0]
-	vmovd		0x00(m),hc0x
-	vmovd		0x10(m),t1x
-	vpunpcklqdq	t1,hc0,hc0
-	vmovd		0x20(m),t1x
-	vmovd		0x30(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc0,hc0
-	vpand		ANMASK(%rip),hc0,hc0
-	vmovd		h0,t1x
-	vpaddd		t1,hc0,hc0
-	# hc1 = [(m[51-54] >> 2) & 0x3ffffff, (m[35-38] >> 2) & 0x3ffffff,
-	#	 (m[19-22] >> 2) & 0x3ffffff, (m[ 3- 6] >> 2) & 0x3ffffff + h1]
-	vmovd		0x03(m),hc1x
-	vmovd		0x13(m),t1x
-	vpunpcklqdq	t1,hc1,hc1
-	vmovd		0x23(m),t1x
-	vmovd		0x33(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc1,hc1
-	vpsrld		$2,hc1,hc1
-	vpand		ANMASK(%rip),hc1,hc1
-	vmovd		h1,t1x
-	vpaddd		t1,hc1,hc1
-	# hc2 = [(m[54-57] >> 4) & 0x3ffffff, (m[38-41] >> 4) & 0x3ffffff,
-	#	 (m[22-25] >> 4) & 0x3ffffff, (m[ 6- 9] >> 4) & 0x3ffffff + h2]
-	vmovd		0x06(m),hc2x
-	vmovd		0x16(m),t1x
-	vpunpcklqdq	t1,hc2,hc2
-	vmovd		0x26(m),t1x
-	vmovd		0x36(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc2,hc2
-	vpsrld		$4,hc2,hc2
-	vpand		ANMASK(%rip),hc2,hc2
-	vmovd		h2,t1x
-	vpaddd		t1,hc2,hc2
-	# hc3 = [(m[57-60] >> 6) & 0x3ffffff, (m[41-44] >> 6) & 0x3ffffff,
-	#	 (m[25-28] >> 6) & 0x3ffffff, (m[ 9-12] >> 6) & 0x3ffffff + h3]
-	vmovd		0x09(m),hc3x
-	vmovd		0x19(m),t1x
-	vpunpcklqdq	t1,hc3,hc3
-	vmovd		0x29(m),t1x
-	vmovd		0x39(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc3,hc3
-	vpsrld		$6,hc3,hc3
-	vpand		ANMASK(%rip),hc3,hc3
-	vmovd		h3,t1x
-	vpaddd		t1,hc3,hc3
-	# hc4 = [(m[60-63] >> 8) | (1<<24), (m[44-47] >> 8) | (1<<24),
-	#	 (m[28-31] >> 8) | (1<<24), (m[12-15] >> 8) | (1<<24) + h4]
-	vmovd		0x0c(m),hc4x
-	vmovd		0x1c(m),t1x
-	vpunpcklqdq	t1,hc4,hc4
-	vmovd		0x2c(m),t1x
-	vmovd		0x3c(m),t2x
-	vpunpcklqdq	t2,t1,t1
-	vperm2i128	$0x20,t1,hc4,hc4
-	vpsrld		$8,hc4,hc4
-	vpor		ORMASK(%rip),hc4,hc4
-	vmovd		h4,t1x
-	vpaddd		t1,hc4,hc4
-
-	# t1 = [ hc0[3] * r0, hc0[2] * u0, hc0[1] * w0, hc0[0] * y0 ]
-	vpmuludq	hc0,ruwy0,t1
-	# t1 += [ hc1[3] * s4, hc1[2] * v4, hc1[1] * x4, hc1[0] * z4 ]
-	vpmuludq	hc1,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * s3, hc2[2] * v3, hc2[1] * x3, hc2[0] * z3 ]
-	vpmuludq	hc2,svxz3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s2, hc3[2] * v2, hc3[1] * x2, hc3[0] * z2 ]
-	vpmuludq	hc3,svxz2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s1, hc4[2] * v1, hc4[1] * x1, hc4[0] * z1 ]
-	vpmuludq	hc4,svxz1,t2
-	vpaddq		t2,t1,t1
-	# d0 = t1[0] + t1[1] + t[2] + t[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d0
-
-	# t1 = [ hc0[3] * r1, hc0[2] * u1,hc0[1] * w1, hc0[0] * y1 ]
-	vpmuludq	hc0,ruwy1,t1
-	# t1 += [ hc1[3] * r0, hc1[2] * u0, hc1[1] * w0, hc1[0] * y0 ]
-	vpmuludq	hc1,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * s4, hc2[2] * v4, hc2[1] * x4, hc2[0] * z4 ]
-	vpmuludq	hc2,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s3, hc3[2] * v3, hc3[1] * x3, hc3[0] * z3 ]
-	vpmuludq	hc3,svxz3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s2, hc4[2] * v2, hc4[1] * x2, hc4[0] * z2 ]
-	vpmuludq	hc4,svxz2,t2
-	vpaddq		t2,t1,t1
-	# d1 = t1[0] + t1[1] + t1[3] + t1[4]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d1
-
-	# t1 = [ hc0[3] * r2, hc0[2] * u2, hc0[1] * w2, hc0[0] * y2 ]
-	vpmuludq	hc0,ruwy2,t1
-	# t1 += [ hc1[3] * r1, hc1[2] * u1, hc1[1] * w1, hc1[0] * y1 ]
-	vpmuludq	hc1,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r0, hc2[2] * u0, hc2[1] * w0, hc2[0] * y0 ]
-	vpmuludq	hc2,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * s4, hc3[2] * v4, hc3[1] * x4, hc3[0] * z4 ]
-	vpmuludq	hc3,svxz4,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s3, hc4[2] * v3, hc4[1] * x3, hc4[0] * z3 ]
-	vpmuludq	hc4,svxz3,t2
-	vpaddq		t2,t1,t1
-	# d2 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d2
-
-	# t1 = [ hc0[3] * r3, hc0[2] * u3, hc0[1] * w3, hc0[0] * y3 ]
-	vpmuludq	hc0,ruwy3,t1
-	# t1 += [ hc1[3] * r2, hc1[2] * u2, hc1[1] * w2, hc1[0] * y2 ]
-	vpmuludq	hc1,ruwy2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r1, hc2[2] * u1, hc2[1] * w1, hc2[0] * y1 ]
-	vpmuludq	hc2,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * r0, hc3[2] * u0, hc3[1] * w0, hc3[0] * y0 ]
-	vpmuludq	hc3,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * s4, hc4[2] * v4, hc4[1] * x4, hc4[0] * z4 ]
-	vpmuludq	hc4,svxz4,t2
-	vpaddq		t2,t1,t1
-	# d3 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d3
-
-	# t1 = [ hc0[3] * r4, hc0[2] * u4, hc0[1] * w4, hc0[0] * y4 ]
-	vpmuludq	hc0,ruwy4,t1
-	# t1 += [ hc1[3] * r3, hc1[2] * u3, hc1[1] * w3, hc1[0] * y3 ]
-	vpmuludq	hc1,ruwy3,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc2[3] * r2, hc2[2] * u2, hc2[1] * w2, hc2[0] * y2 ]
-	vpmuludq	hc2,ruwy2,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc3[3] * r1, hc3[2] * u1, hc3[1] * w1, hc3[0] * y1 ]
-	vpmuludq	hc3,ruwy1,t2
-	vpaddq		t2,t1,t1
-	# t1 += [ hc4[3] * r0, hc4[2] * u0, hc4[1] * w0, hc4[0] * y0 ]
-	vpmuludq	hc4,ruwy0,t2
-	vpaddq		t2,t1,t1
-	# d4 = t1[0] + t1[1] + t1[2] + t1[3]
-	vpermq		$0xee,t1,t2
-	vpaddq		t2,t1,t1
-	vpsrldq		$8,t1,t2
-	vpaddq		t2,t1,t1
-	vmovq		t1x,d4
-
-	# Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
-	# h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
-	# amount.  Careful: we must not assume the carry bits 'd0 >> 26',
-	# 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
-	# integers.  It's true in a single-block implementation, but not here.
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x40,m
-	dec		%rcx
-	jnz		.Ldoblock4
-
-	vzeroupper
-	pop		%r13
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_4block_avx2)
diff --git a/arch/x86/crypto/poly1305-sse2-x86_64.S b/arch/x86/crypto/poly1305-sse2-x86_64.S
deleted file mode 100644
index 5578f846..0000000
--- a/arch/x86/crypto/poly1305-sse2-x86_64.S
+++ /dev/null
@@ -1,590 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-or-later */
-/*
- * Poly1305 authenticator algorithm, RFC7539, x64 SSE2 functions
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/linkage.h>
-
-.section	.rodata.cst16.ANMASK, "aM", @progbits, 16
-.align 16
-ANMASK:	.octa 0x0000000003ffffff0000000003ffffff
-
-.section	.rodata.cst16.ORMASK, "aM", @progbits, 16
-.align 16
-ORMASK:	.octa 0x00000000010000000000000001000000
-
-.text
-
-#define h0 0x00(%rdi)
-#define h1 0x04(%rdi)
-#define h2 0x08(%rdi)
-#define h3 0x0c(%rdi)
-#define h4 0x10(%rdi)
-#define r0 0x00(%rdx)
-#define r1 0x04(%rdx)
-#define r2 0x08(%rdx)
-#define r3 0x0c(%rdx)
-#define r4 0x10(%rdx)
-#define s1 0x00(%rsp)
-#define s2 0x04(%rsp)
-#define s3 0x08(%rsp)
-#define s4 0x0c(%rsp)
-#define m %rsi
-#define h01 %xmm0
-#define h23 %xmm1
-#define h44 %xmm2
-#define t1 %xmm3
-#define t2 %xmm4
-#define t3 %xmm5
-#define t4 %xmm6
-#define mask %xmm7
-#define d0 %r8
-#define d1 %r9
-#define d2 %r10
-#define d3 %r11
-#define d4 %r12
-
-ENTRY(poly1305_block_sse2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 16 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Block count
-
-	# This single block variant tries to improve performance by doing two
-	# multiplications in parallel using SSE instructions. There is quite
-	# some quardword packing involved, hence the speedup is marginal.
-
-	push		%rbx
-	push		%r12
-	sub		$0x10,%rsp
-
-	# s1..s4 = r1..r4 * 5
-	mov		r1,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s1
-	mov		r2,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s2
-	mov		r3,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s3
-	mov		r4,%eax
-	lea		(%eax,%eax,4),%eax
-	mov		%eax,s4
-
-	movdqa		ANMASK(%rip),mask
-
-.Ldoblock:
-	# h01 = [0, h1, 0, h0]
-	# h23 = [0, h3, 0, h2]
-	# h44 = [0, h4, 0, h4]
-	movd		h0,h01
-	movd		h1,t1
-	movd		h2,h23
-	movd		h3,t2
-	movd		h4,h44
-	punpcklqdq	t1,h01
-	punpcklqdq	t2,h23
-	punpcklqdq	h44,h44
-
-	# h01 += [ (m[3-6] >> 2) & 0x3ffffff, m[0-3] & 0x3ffffff ]
-	movd		0x00(m),t1
-	movd		0x03(m),t2
-	psrld		$2,t2
-	punpcklqdq	t2,t1
-	pand		mask,t1
-	paddd		t1,h01
-	# h23 += [ (m[9-12] >> 6) & 0x3ffffff, (m[6-9] >> 4) & 0x3ffffff ]
-	movd		0x06(m),t1
-	movd		0x09(m),t2
-	psrld		$4,t1
-	psrld		$6,t2
-	punpcklqdq	t2,t1
-	pand		mask,t1
-	paddd		t1,h23
-	# h44 += [ (m[12-15] >> 8) | (1 << 24), (m[12-15] >> 8) | (1 << 24) ]
-	mov		0x0c(m),%eax
-	shr		$8,%eax
-	or		$0x01000000,%eax
-	movd		%eax,t1
-	pshufd		$0xc4,t1,t1
-	paddd		t1,h44
-
-	# t1[0] = h0 * r0 + h2 * s3
-	# t1[1] = h1 * s4 + h3 * s2
-	movd		r0,t1
-	movd		s4,t2
-	punpcklqdq	t2,t1
-	pmuludq		h01,t1
-	movd		s3,t2
-	movd		s2,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t2[0] = h0 * r1 + h2 * s4
-	# t2[1] = h1 * r0 + h3 * s3
-	movd		r1,t2
-	movd		r0,t3
-	punpcklqdq	t3,t2
-	pmuludq		h01,t2
-	movd		s4,t3
-	movd		s3,t4
-	punpcklqdq	t4,t3
-	pmuludq		h23,t3
-	paddq		t3,t2
-	# t3[0] = h4 * s1
-	# t3[1] = h4 * s2
-	movd		s1,t3
-	movd		s2,t4
-	punpcklqdq	t4,t3
-	pmuludq		h44,t3
-	# d0 = t1[0] + t1[1] + t3[0]
-	# d1 = t2[0] + t2[1] + t3[1]
-	movdqa		t1,t4
-	punpcklqdq	t2,t4
-	punpckhqdq	t2,t1
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d0
-	psrldq		$8,t1
-	movq		t1,d1
-
-	# t1[0] = h0 * r2 + h2 * r0
-	# t1[1] = h1 * r1 + h3 * s4
-	movd		r2,t1
-	movd		r1,t2
-	punpcklqdq 	t2,t1
-	pmuludq		h01,t1
-	movd		r0,t2
-	movd		s4,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t2[0] = h0 * r3 + h2 * r1
-	# t2[1] = h1 * r2 + h3 * r0
-	movd		r3,t2
-	movd		r2,t3
-	punpcklqdq	t3,t2
-	pmuludq		h01,t2
-	movd		r1,t3
-	movd		r0,t4
-	punpcklqdq	t4,t3
-	pmuludq		h23,t3
-	paddq		t3,t2
-	# t3[0] = h4 * s3
-	# t3[1] = h4 * s4
-	movd		s3,t3
-	movd		s4,t4
-	punpcklqdq	t4,t3
-	pmuludq		h44,t3
-	# d2 = t1[0] + t1[1] + t3[0]
-	# d3 = t2[0] + t2[1] + t3[1]
-	movdqa		t1,t4
-	punpcklqdq	t2,t4
-	punpckhqdq	t2,t1
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d2
-	psrldq		$8,t1
-	movq		t1,d3
-
-	# t1[0] = h0 * r4 + h2 * r2
-	# t1[1] = h1 * r3 + h3 * r1
-	movd		r4,t1
-	movd		r3,t2
-	punpcklqdq	t2,t1
-	pmuludq		h01,t1
-	movd		r2,t2
-	movd		r1,t3
-	punpcklqdq	t3,t2
-	pmuludq		h23,t2
-	paddq		t2,t1
-	# t3[0] = h4 * r0
-	movd		r0,t3
-	pmuludq		h44,t3
-	# d4 = t1[0] + t1[1] + t3[0]
-	movdqa		t1,t4
-	psrldq		$8,t4
-	paddq		t4,t1
-	paddq		t3,t1
-	movq		t1,d4
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x10,m
-	dec		%rcx
-	jnz		.Ldoblock
-
-	# Zeroing of key material
-	mov		%rcx,0x00(%rsp)
-	mov		%rcx,0x08(%rsp)
-
-	add		$0x10,%rsp
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_block_sse2)
-
-
-#define u0 0x00(%r8)
-#define u1 0x04(%r8)
-#define u2 0x08(%r8)
-#define u3 0x0c(%r8)
-#define u4 0x10(%r8)
-#define hc0 %xmm0
-#define hc1 %xmm1
-#define hc2 %xmm2
-#define hc3 %xmm5
-#define hc4 %xmm6
-#define ru0 %xmm7
-#define ru1 %xmm8
-#define ru2 %xmm9
-#define ru3 %xmm10
-#define ru4 %xmm11
-#define sv1 %xmm12
-#define sv2 %xmm13
-#define sv3 %xmm14
-#define sv4 %xmm15
-#undef d0
-#define d0 %r13
-
-ENTRY(poly1305_2block_sse2)
-	# %rdi: Accumulator h[5]
-	# %rsi: 16 byte input block m
-	# %rdx: Poly1305 key r[5]
-	# %rcx: Doubleblock count
-	# %r8:  Poly1305 derived key r^2 u[5]
-
-	# This two-block variant further improves performance by using loop
-	# unrolled block processing. This is more straight forward and does
-	# less byte shuffling, but requires a second Poly1305 key r^2:
-	# h = (h + m) * r    =>    h = (h + m1) * r^2 + m2 * r
-
-	push		%rbx
-	push		%r12
-	push		%r13
-
-	# combine r0,u0
-	movd		u0,ru0
-	movd		r0,t1
-	punpcklqdq	t1,ru0
-
-	# combine r1,u1 and s1=r1*5,v1=u1*5
-	movd		u1,ru1
-	movd		r1,t1
-	punpcklqdq	t1,ru1
-	movdqa		ru1,sv1
-	pslld		$2,sv1
-	paddd		ru1,sv1
-
-	# combine r2,u2 and s2=r2*5,v2=u2*5
-	movd		u2,ru2
-	movd		r2,t1
-	punpcklqdq	t1,ru2
-	movdqa		ru2,sv2
-	pslld		$2,sv2
-	paddd		ru2,sv2
-
-	# combine r3,u3 and s3=r3*5,v3=u3*5
-	movd		u3,ru3
-	movd		r3,t1
-	punpcklqdq	t1,ru3
-	movdqa		ru3,sv3
-	pslld		$2,sv3
-	paddd		ru3,sv3
-
-	# combine r4,u4 and s4=r4*5,v4=u4*5
-	movd		u4,ru4
-	movd		r4,t1
-	punpcklqdq	t1,ru4
-	movdqa		ru4,sv4
-	pslld		$2,sv4
-	paddd		ru4,sv4
-
-.Ldoblock2:
-	# hc0 = [ m[16-19] & 0x3ffffff, h0 + m[0-3] & 0x3ffffff ]
-	movd		0x00(m),hc0
-	movd		0x10(m),t1
-	punpcklqdq	t1,hc0
-	pand		ANMASK(%rip),hc0
-	movd		h0,t1
-	paddd		t1,hc0
-	# hc1 = [ (m[19-22] >> 2) & 0x3ffffff, h1 + (m[3-6] >> 2) & 0x3ffffff ]
-	movd		0x03(m),hc1
-	movd		0x13(m),t1
-	punpcklqdq	t1,hc1
-	psrld		$2,hc1
-	pand		ANMASK(%rip),hc1
-	movd		h1,t1
-	paddd		t1,hc1
-	# hc2 = [ (m[22-25] >> 4) & 0x3ffffff, h2 + (m[6-9] >> 4) & 0x3ffffff ]
-	movd		0x06(m),hc2
-	movd		0x16(m),t1
-	punpcklqdq	t1,hc2
-	psrld		$4,hc2
-	pand		ANMASK(%rip),hc2
-	movd		h2,t1
-	paddd		t1,hc2
-	# hc3 = [ (m[25-28] >> 6) & 0x3ffffff, h3 + (m[9-12] >> 6) & 0x3ffffff ]
-	movd		0x09(m),hc3
-	movd		0x19(m),t1
-	punpcklqdq	t1,hc3
-	psrld		$6,hc3
-	pand		ANMASK(%rip),hc3
-	movd		h3,t1
-	paddd		t1,hc3
-	# hc4 = [ (m[28-31] >> 8) | (1<<24), h4 + (m[12-15] >> 8) | (1<<24) ]
-	movd		0x0c(m),hc4
-	movd		0x1c(m),t1
-	punpcklqdq	t1,hc4
-	psrld		$8,hc4
-	por		ORMASK(%rip),hc4
-	movd		h4,t1
-	paddd		t1,hc4
-
-	# t1 = [ hc0[1] * r0, hc0[0] * u0 ]
-	movdqa		ru0,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * s4, hc1[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * s3, hc2[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s2, hc3[0] * v2 ]
-	movdqa		sv2,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s1, hc4[0] * v1 ]
-	movdqa		sv1,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d0 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d0
-
-	# t1 = [ hc0[1] * r1, hc0[0] * u1 ]
-	movdqa		ru1,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r0, hc1[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * s4, hc2[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s3, hc3[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s2, hc4[0] * v2 ]
-	movdqa		sv2,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d1 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d1
-
-	# t1 = [ hc0[1] * r2, hc0[0] * u2 ]
-	movdqa		ru2,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r1, hc1[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r0, hc2[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * s4, hc3[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s3, hc4[0] * v3 ]
-	movdqa		sv3,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d2 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d2
-
-	# t1 = [ hc0[1] * r3, hc0[0] * u3 ]
-	movdqa		ru3,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r2, hc1[0] * u2 ]
-	movdqa		ru2,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r1, hc2[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * r0, hc3[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * s4, hc4[0] * v4 ]
-	movdqa		sv4,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d3 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d3
-
-	# t1 = [ hc0[1] * r4, hc0[0] * u4 ]
-	movdqa		ru4,t1
-	pmuludq		hc0,t1
-	# t1 += [ hc1[1] * r3, hc1[0] * u3 ]
-	movdqa		ru3,t2
-	pmuludq		hc1,t2
-	paddq		t2,t1
-	# t1 += [ hc2[1] * r2, hc2[0] * u2 ]
-	movdqa		ru2,t2
-	pmuludq		hc2,t2
-	paddq		t2,t1
-	# t1 += [ hc3[1] * r1, hc3[0] * u1 ]
-	movdqa		ru1,t2
-	pmuludq		hc3,t2
-	paddq		t2,t1
-	# t1 += [ hc4[1] * r0, hc4[0] * u0 ]
-	movdqa		ru0,t2
-	pmuludq		hc4,t2
-	paddq		t2,t1
-	# d4 = t1[0] + t1[1]
-	movdqa		t1,t2
-	psrldq		$8,t2
-	paddq		t2,t1
-	movq		t1,d4
-
-	# Now do a partial reduction mod (2^130)-5, carrying h0 -> h1 -> h2 ->
-	# h3 -> h4 -> h0 -> h1 to get h0,h2,h3,h4 < 2^26 and h1 < 2^26 + a small
-	# amount.  Careful: we must not assume the carry bits 'd0 >> 26',
-	# 'd1 >> 26', 'd2 >> 26', 'd3 >> 26', and '(d4 >> 26) * 5' fit in 32-bit
-	# integers.  It's true in a single-block implementation, but not here.
-
-	# d1 += d0 >> 26
-	mov		d0,%rax
-	shr		$26,%rax
-	add		%rax,d1
-	# h0 = d0 & 0x3ffffff
-	mov		d0,%rbx
-	and		$0x3ffffff,%ebx
-
-	# d2 += d1 >> 26
-	mov		d1,%rax
-	shr		$26,%rax
-	add		%rax,d2
-	# h1 = d1 & 0x3ffffff
-	mov		d1,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h1
-
-	# d3 += d2 >> 26
-	mov		d2,%rax
-	shr		$26,%rax
-	add		%rax,d3
-	# h2 = d2 & 0x3ffffff
-	mov		d2,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h2
-
-	# d4 += d3 >> 26
-	mov		d3,%rax
-	shr		$26,%rax
-	add		%rax,d4
-	# h3 = d3 & 0x3ffffff
-	mov		d3,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h3
-
-	# h0 += (d4 >> 26) * 5
-	mov		d4,%rax
-	shr		$26,%rax
-	lea		(%rax,%rax,4),%rax
-	add		%rax,%rbx
-	# h4 = d4 & 0x3ffffff
-	mov		d4,%rax
-	and		$0x3ffffff,%eax
-	mov		%eax,h4
-
-	# h1 += h0 >> 26
-	mov		%rbx,%rax
-	shr		$26,%rax
-	add		%eax,h1
-	# h0 = h0 & 0x3ffffff
-	andl		$0x3ffffff,%ebx
-	mov		%ebx,h0
-
-	add		$0x20,m
-	dec		%rcx
-	jnz		.Ldoblock2
-
-	pop		%r13
-	pop		%r12
-	pop		%rbx
-	ret
-ENDPROC(poly1305_2block_sse2)
diff --git a/arch/x86/crypto/poly1305-x86_64-cryptogams.pl b/arch/x86/crypto/poly1305-x86_64-cryptogams.pl
new file mode 100644
index 0000000..5b59399
--- /dev/null
+++ b/arch/x86/crypto/poly1305-x86_64-cryptogams.pl
@@ -0,0 +1,4265 @@
+#!/usr/bin/env perl
+# SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+#
+# Copyright (C) 2017-2018 Samuel Neves <sneves@dei.uc.pt>. All Rights Reserved.
+# Copyright (C) 2017-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+# Copyright (C) 2006-2017 CRYPTOGAMS by <appro@openssl.org>. All Rights Reserved.
+#
+# This code is taken from the OpenSSL project but the author, Andy Polyakov,
+# has relicensed it under the licenses specified in the SPDX header above.
+# The original headers, including the original license headers, are
+# included below for completeness.
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# This module implements Poly1305 hash for x86_64.
+#
+# March 2015
+#
+# Initial release.
+#
+# December 2016
+#
+# Add AVX512F+VL+BW code path.
+#
+# November 2017
+#
+# Convert AVX512F+VL+BW code path to pure AVX512F, so that it can be
+# executed even on Knights Landing. Trigger for modification was
+# observation that AVX512 code paths can negatively affect overall
+# Skylake-X system performance. Since we are likely to suppress
+# AVX512F capability flag [at least on Skylake-X], conversion serves
+# as kind of "investment protection". Note that next *lake processor,
+# Cannonlake, has AVX512IFMA code path to execute...
+#
+# Numbers are cycles per processed byte with poly1305_blocks alone,
+# measured with rdtsc at fixed clock frequency.
+#
+#		IALU/gcc-4.8(*)	AVX(**)		AVX2	AVX-512
+# P4		4.46/+120%	-
+# Core 2	2.41/+90%	-
+# Westmere	1.88/+120%	-
+# Sandy Bridge	1.39/+140%	1.10
+# Haswell	1.14/+175%	1.11		0.65
+# Skylake[-X]	1.13/+120%	0.96		0.51	[0.35]
+# Silvermont	2.83/+95%	-
+# Knights L	3.60/?		1.65		1.10	0.41(***)
+# Goldmont	1.70/+180%	-
+# VIA Nano	1.82/+150%	-
+# Sledgehammer	1.38/+160%	-
+# Bulldozer	2.30/+130%	0.97
+# Ryzen		1.15/+200%	1.08		1.18
+#
+# (*)	improvement coefficients relative to clang are more modest and
+#	are ~50% on most processors, in both cases we are comparing to
+#	__int128 code;
+# (**)	SSE2 implementation was attempted, but among non-AVX processors
+#	it was faster than integer-only code only on older Intel P4 and
+#	Core processors, 50-30%, less newer processor is, but slower on
+#	contemporary ones, for example almost 2x slower on Atom, and as
+#	former are naturally disappearing, SSE2 is deemed unnecessary;
+# (***)	strangely enough performance seems to vary from core to core,
+#	listed result is best case;
+
+$flavour = shift;
+$output  = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+$kernel=0; $kernel=1 if (!$flavour && !$output);
+
+if (!$kernel) {
+	$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+	( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+	( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+	die "can't locate x86_64-xlate.pl";
+
+	open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
+	*STDOUT=*OUT;
+
+	if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+	    =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+		$avx = ($1>=2.19) + ($1>=2.22) + ($1>=2.25);
+	}
+
+	if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+	    `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)(?:\.([0-9]+))?/) {
+		$avx = ($1>=2.09) + ($1>=2.10) + ($1>=2.12);
+		$avx += 1 if ($1==2.11 && $2>=8);
+	}
+
+	if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+	    `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+		$avx = ($1>=10) + ($1>=11);
+	}
+
+	if (!$avx && `$ENV{CC} -v 2>&1` =~ /((?:^clang|LLVM) version|.*based on LLVM) ([3-9]\.[0-9]+)/) {
+		$avx = ($2>=3.0) + ($2>3.0);
+	}
+} else {
+	$avx = 4; # The kernel uses ifdefs for this.
+}
+
+sub declare_function() {
+	my ($name, $align, $nargs) = @_;
+	if($kernel) {
+		$code .= ".align $align\n";
+		$code .= "ENTRY($name)\n";
+		$code .= ".L$name:\n";
+	} else {
+		$code .= ".globl	$name\n";
+		$code .= ".type	$name,\@function,$nargs\n";
+		$code .= ".align	$align\n";
+		$code .= "$name:\n";
+	}
+}
+
+sub end_function() {
+	my ($name) = @_;
+	if($kernel) {
+		$code .= "ENDPROC($name)\n";
+	} else {
+		$code .= ".size   $name,.-$name\n";
+	}
+}
+
+$code.=<<___ if $kernel;
+#include <linux/linkage.h>
+___
+
+if ($avx) {
+$code.=<<___ if $kernel;
+.section .rodata
+___
+$code.=<<___;
+.align	64
+.Lconst:
+.Lmask24:
+.long	0x0ffffff,0,0x0ffffff,0,0x0ffffff,0,0x0ffffff,0
+.L129:
+.long	`1<<24`,0,`1<<24`,0,`1<<24`,0,`1<<24`,0
+.Lmask26:
+.long	0x3ffffff,0,0x3ffffff,0,0x3ffffff,0,0x3ffffff,0
+.Lpermd_avx2:
+.long	2,2,2,3,2,0,2,1
+.Lpermd_avx512:
+.long	0,0,0,1, 0,2,0,3, 0,4,0,5, 0,6,0,7
+
+.L2_44_inp_permd:
+.long	0,1,1,2,2,3,7,7
+.L2_44_inp_shift:
+.quad	0,12,24,64
+.L2_44_mask:
+.quad	0xfffffffffff,0xfffffffffff,0x3ffffffffff,0xffffffffffffffff
+.L2_44_shift_rgt:
+.quad	44,44,42,64
+.L2_44_shift_lft:
+.quad	8,8,10,64
+
+.align	64
+.Lx_mask44:
+.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
+.quad	0xfffffffffff,0xfffffffffff,0xfffffffffff,0xfffffffffff
+.Lx_mask42:
+.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
+.quad	0x3ffffffffff,0x3ffffffffff,0x3ffffffffff,0x3ffffffffff
+___
+}
+$code.=<<___ if (!$kernel);
+.asciz	"Poly1305 for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+.align	16
+___
+
+my ($ctx,$inp,$len,$padbit)=("%rdi","%rsi","%rdx","%rcx");
+my ($mac,$nonce)=($inp,$len);	# *_emit arguments
+my ($d1,$d2,$d3, $r0,$r1,$s1)=("%r8","%r9","%rdi","%r11","%r12","%r13");
+my ($h0,$h1,$h2)=("%r14","%rbx","%r10");
+
+sub poly1305_iteration {
+# input:	copy of $r1 in %rax, $h0-$h2, $r0-$r1
+# output:	$h0-$h2 *= $r0-$r1
+$code.=<<___;
+	mulq	$h0			# h0*r1
+	mov	%rax,$d2
+	 mov	$r0,%rax
+	mov	%rdx,$d3
+
+	mulq	$h0			# h0*r0
+	mov	%rax,$h0		# future $h0
+	 mov	$r0,%rax
+	mov	%rdx,$d1
+
+	mulq	$h1			# h1*r0
+	add	%rax,$d2
+	 mov	$s1,%rax
+	adc	%rdx,$d3
+
+	mulq	$h1			# h1*s1
+	 mov	$h2,$h1			# borrow $h1
+	add	%rax,$h0
+	adc	%rdx,$d1
+
+	imulq	$s1,$h1			# h2*s1
+	add	$h1,$d2
+	 mov	$d1,$h1
+	adc	\$0,$d3
+
+	imulq	$r0,$h2			# h2*r0
+	add	$d2,$h1
+	mov	\$-4,%rax		# mask value
+	adc	$h2,$d3
+
+	and	$d3,%rax		# last reduction step
+	mov	$d3,$h2
+	shr	\$2,$d3
+	and	\$3,$h2
+	add	$d3,%rax
+	add	%rax,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+___
+}
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int64 h[3];		# current hash value base 2^64
+#	unsigned __int64 r[2];		# key value base 2^64
+
+$code.=<<___;
+.text
+___
+$code.=<<___ if (!$kernel);
+.extern	OPENSSL_ia32cap_P
+
+.globl	poly1305_init_x86_64
+.hidden	poly1305_init_x86_64
+.globl	poly1305_blocks_x86_64
+.hidden	poly1305_blocks_x86_64
+.globl	poly1305_emit_x86_64
+.hidden	poly1305_emit_x86_64
+___
+&declare_function("poly1305_init_x86_64", 32, 3);
+$code.=<<___;
+	xor	%eax,%eax
+	mov	%rax,0($ctx)		# initialize hash value
+	mov	%rax,8($ctx)
+	mov	%rax,16($ctx)
+
+	cmp	\$0,$inp
+	je	.Lno_key
+___
+$code.=<<___ if (!$kernel);
+	lea	poly1305_blocks_x86_64(%rip),%r10
+	lea	poly1305_emit_x86_64(%rip),%r11
+___
+$code.=<<___	if (!$kernel && $avx);
+	mov	OPENSSL_ia32cap_P+4(%rip),%r9
+	lea	poly1305_blocks_avx(%rip),%rax
+	lea	poly1305_emit_avx(%rip),%rcx
+	bt	\$`60-32`,%r9		# AVX?
+	cmovc	%rax,%r10
+	cmovc	%rcx,%r11
+___
+$code.=<<___	if (!$kernel && $avx>1);
+	lea	poly1305_blocks_avx2(%rip),%rax
+	bt	\$`5+32`,%r9		# AVX2?
+	cmovc	%rax,%r10
+___
+$code.=<<___	if (!$kernel && $avx>3);
+	mov	\$`(1<<31|1<<21|1<<16)`,%rax
+	shr	\$32,%r9
+	and	%rax,%r9
+	cmp	%rax,%r9
+	je	.Linit_base2_44
+___
+$code.=<<___;
+	mov	\$0x0ffffffc0fffffff,%rax
+	mov	\$0x0ffffffc0ffffffc,%rcx
+	and	0($inp),%rax
+	and	8($inp),%rcx
+	mov	%rax,24($ctx)
+	mov	%rcx,32($ctx)
+___
+$code.=<<___	if (!$kernel && $flavour !~ /elf32/);
+	mov	%r10,0(%rdx)
+	mov	%r11,8(%rdx)
+___
+$code.=<<___	if (!$kernel && $flavour =~ /elf32/);
+	mov	%r10d,0(%rdx)
+	mov	%r11d,4(%rdx)
+___
+$code.=<<___;
+	mov	\$1,%eax
+.Lno_key:
+	ret
+___
+&end_function("poly1305_init_x86_64");
+
+&declare_function("poly1305_blocks_x86_64", 32, 4);
+$code.=<<___;
+.cfi_startproc
+.Lblocks:
+	shr	\$4,$len
+	jz	.Lno_data		# too short
+
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+	push	$ctx
+.cfi_push	$ctx
+.Lblocks_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2
+
+	mov	$s1,$r1
+	shr	\$2,$s1
+	mov	$r1,%rax
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+	jmp	.Loop
+
+.align	32
+.Loop:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+___
+
+	&poly1305_iteration();
+
+$code.=<<___;
+	mov	$r1,%rax
+	dec	%r15			# len-=16
+	jnz	.Loop
+
+	mov	0(%rsp),$ctx
+.cfi_restore	$ctx
+
+	mov	$h0,0($ctx)		# store hash value
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)
+
+	mov	8(%rsp),%r15
+.cfi_restore	%r15
+	mov	16(%rsp),%r14
+.cfi_restore	%r14
+	mov	24(%rsp),%r13
+.cfi_restore	%r13
+	mov	32(%rsp),%r12
+.cfi_restore	%r12
+	mov	40(%rsp),%rbx
+.cfi_restore	%rbx
+	lea	48(%rsp),%rsp
+.cfi_adjust_cfa_offset	-48
+.Lno_data:
+.Lblocks_epilogue:
+	ret
+.cfi_endproc
+___
+&end_function("poly1305_blocks_x86_64");
+
+&declare_function("poly1305_emit_x86_64", 32, 3);
+$code.=<<___;
+.Lemit:
+	mov	0($ctx),%r8	# load hash value
+	mov	8($ctx),%r9
+	mov	16($ctx),%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+___
+&end_function("poly1305_emit_x86_64");
+if ($avx) {
+
+if($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX\n";
+}
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int32 h[5];		# current hash value base 2^26
+#	unsigned __int32 is_base2_26;
+#	unsigned __int64 r[2];		# key value base 2^64
+#	unsigned __int64 pad;
+#	struct { unsigned __int32 r^2, r^1, r^4, r^3; } r[9];
+#
+# where r^n are base 2^26 digits of degrees of multiplier key. There are
+# 5 digits, but last four are interleaved with multiples of 5, totalling
+# in 9 elements: r0, r1, 5*r1, r2, 5*r2, r3, 5*r3, r4, 5*r4.
+
+my ($H0,$H1,$H2,$H3,$H4, $T0,$T1,$T2,$T3,$T4, $D0,$D1,$D2,$D3,$D4, $MASK) =
+    map("%xmm$_",(0..15));
+
+$code.=<<___;
+.type	__poly1305_block,\@abi-omnipotent
+.align	32
+__poly1305_block:
+	push $ctx
+___
+	&poly1305_iteration();
+$code.=<<___;
+	pop $ctx
+	ret
+.size	__poly1305_block,.-__poly1305_block
+
+.type	__poly1305_init_avx,\@abi-omnipotent
+.align	32
+__poly1305_init_avx:
+	push %rbp
+	mov %rsp,%rbp
+	mov	$r0,$h0
+	mov	$r1,$h1
+	xor	$h2,$h2
+
+	lea	48+64($ctx),$ctx	# size optimization
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^2
+
+	mov	\$0x3ffffff,%eax	# save interleaved r^2 and r base 2^26
+	mov	\$0x3ffffff,%edx
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	mov	$r0,$d2
+	and	$r0#d,%edx
+	mov	%eax,`16*0+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*0+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	\$0x3ffffff,%eax
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%eax
+	and	$d2#d,%edx
+	mov	%eax,`16*1+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*1+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*2+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*2+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	$h1,%rax
+	mov	$r1,%rdx
+	shl	\$12,%rax
+	shl	\$12,%rdx
+	or	$d1,%rax
+	or	$d2,%rdx
+	and	\$0x3ffffff,%eax
+	and	\$0x3ffffff,%edx
+	mov	%eax,`16*3+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*3+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*4+0-64`($ctx)
+	mov	$h1,$d1
+	mov	%edx,`16*4+4-64`($ctx)
+	mov	$r1,$d2
+
+	mov	\$0x3ffffff,%eax
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	shr	\$14,$d2
+	and	$d1#d,%eax
+	and	$d2#d,%edx
+	mov	%eax,`16*5+0-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	%edx,`16*5+4-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	mov	%eax,`16*6+0-64`($ctx)
+	shr	\$26,$d1
+	mov	%edx,`16*6+4-64`($ctx)
+	shr	\$26,$d2
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+0-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d2#d,`16*7+4-64`($ctx)
+	lea	($d2,$d2,4),$d2		# *5
+	mov	$d1#d,`16*8+0-64`($ctx)
+	mov	$d2#d,`16*8+4-64`($ctx)
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^3
+
+	mov	\$0x3ffffff,%eax	# save r^3 base 2^26
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	shr	\$26,$d1
+	mov	%eax,`16*0+12-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%edx
+	mov	%edx,`16*1+12-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*2+12-64`($ctx)
+
+	mov	$h1,%rax
+	shl	\$12,%rax
+	or	$d1,%rax
+	and	\$0x3ffffff,%eax
+	mov	%eax,`16*3+12-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	$h1,$d1
+	mov	%eax,`16*4+12-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	and	$d1#d,%edx
+	mov	%edx,`16*5+12-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*6+12-64`($ctx)
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+12-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d1#d,`16*8+12-64`($ctx)
+
+	mov	$r1,%rax
+	call	__poly1305_block	# r^4
+
+	mov	\$0x3ffffff,%eax	# save r^4 base 2^26
+	mov	$h0,$d1
+	and	$h0#d,%eax
+	shr	\$26,$d1
+	mov	%eax,`16*0+8-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	and	$d1#d,%edx
+	mov	%edx,`16*1+8-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*2+8-64`($ctx)
+
+	mov	$h1,%rax
+	shl	\$12,%rax
+	or	$d1,%rax
+	and	\$0x3ffffff,%eax
+	mov	%eax,`16*3+8-64`($ctx)
+	lea	(%rax,%rax,4),%eax	# *5
+	mov	$h1,$d1
+	mov	%eax,`16*4+8-64`($ctx)
+
+	mov	\$0x3ffffff,%edx
+	shr	\$14,$d1
+	and	$d1#d,%edx
+	mov	%edx,`16*5+8-64`($ctx)
+	lea	(%rdx,%rdx,4),%edx	# *5
+	shr	\$26,$d1
+	mov	%edx,`16*6+8-64`($ctx)
+
+	mov	$h2,%rax
+	shl	\$24,%rax
+	or	%rax,$d1
+	mov	$d1#d,`16*7+8-64`($ctx)
+	lea	($d1,$d1,4),$d1		# *5
+	mov	$d1#d,`16*8+8-64`($ctx)
+
+	lea	-48-64($ctx),$ctx	# size [de-]optimization
+	pop %rbp
+	ret
+.size	__poly1305_init_avx,.-__poly1305_init_avx
+___
+
+&declare_function("poly1305_blocks_avx", 32, 4);
+$code.=<<___;
+.cfi_startproc
+	mov	20($ctx),%r8d		# is_base2_26
+	cmp	\$128,$len
+	jae	.Lblocks_avx
+	test	%r8d,%r8d
+	jz	.Lblocks
+
+.Lblocks_avx:
+	and	\$-16,$len
+	jz	.Lno_data_avx
+
+	vzeroupper
+
+	test	%r8d,%r8d
+	jz	.Lbase2_64_avx
+
+	test	\$31,$len
+	jz	.Leven_avx
+
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lblocks_avx_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	0($ctx),$d1		# load hash value
+	mov	8($ctx),$d2
+	mov	16($ctx),$h2#d
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	################################# base 2^26 -> base 2^64
+	mov	$d1#d,$h0#d
+	and	\$`-1*(1<<31)`,$d1
+	mov	$d2,$r1			# borrow $r1
+	mov	$d2#d,$h1#d
+	and	\$`-1*(1<<31)`,$d2
+
+	shr	\$6,$d1
+	shl	\$52,$r1
+	add	$d1,$h0
+	shr	\$12,$h1
+	shr	\$18,$d2
+	add	$r1,$h0
+	adc	$d2,$h1
+
+	mov	$h2,$d1
+	shl	\$40,$d1
+	shr	\$24,$h2
+	add	$d1,$h1
+	adc	\$0,$h2			# can be partially reduced...
+
+	mov	\$-4,$d2		# ... so reduce
+	mov	$h2,$d1
+	and	$h2,$d2
+	shr	\$2,$d1
+	and	\$3,$h2
+	add	$d2,$d1			# =*5
+	add	$d1,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+
+	call	__poly1305_block
+
+	test	$padbit,$padbit		# if $padbit is zero,
+	jz	.Lstore_base2_64_avx	# store hash in base 2^64 format
+
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$r0
+	mov	$h1,$r1
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$r0
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$r0,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$r1
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$r1,$h2			# h[4]
+
+	sub	\$16,%r15
+	jz	.Lstore_base2_26_avx
+
+	vmovd	%rax#d,$H0
+	vmovd	%rdx#d,$H1
+	vmovd	$h0#d,$H2
+	vmovd	$h1#d,$H3
+	vmovd	$h2#d,$H4
+	jmp	.Lproceed_avx
+
+.align	32
+.Lstore_base2_64_avx:
+	mov	$h0,0($ctx)
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)		# note that is_base2_26 is zeroed
+	jmp	.Ldone_avx
+
+.align	16
+.Lstore_base2_26_avx:
+	mov	%rax#d,0($ctx)		# store hash value base 2^26
+	mov	%rdx#d,4($ctx)
+	mov	$h0#d,8($ctx)
+	mov	$h1#d,12($ctx)
+	mov	$h2#d,16($ctx)
+.align	16
+.Ldone_avx:
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore	%rbp
+.Lno_data_avx:
+.Lblocks_avx_epilogue:
+	ret
+.cfi_endproc
+
+.align	32
+.Lbase2_64_avx:
+.cfi_startproc
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lbase2_64_avx_body:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2#d
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	test	\$31,$len
+	jz	.Linit_avx
+
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+
+.Linit_avx:
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$d1
+	mov	$h1,$d2
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$d1
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$d1,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$d2
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$d2,$h2			# h[4]
+
+	vmovd	%rax#d,$H0
+	vmovd	%rdx#d,$H1
+	vmovd	$h0#d,$H2
+	vmovd	$h1#d,$H3
+	vmovd	$h2#d,$H4
+	movl	\$1,20($ctx)		# set is_base2_26
+
+	call	__poly1305_init_avx
+
+.Lproceed_avx:
+	mov	%r15,$len
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore	%rbp
+.Lbase2_64_avx_epilogue:
+	jmp	.Ldo_avx
+.cfi_endproc
+
+.align	32
+.Leven_avx:
+.cfi_startproc
+	vmovd		4*0($ctx),$H0		# load hash value
+	vmovd		4*1($ctx),$H1
+	vmovd		4*2($ctx),$H2
+	vmovd		4*3($ctx),$H3
+	vmovd		4*4($ctx),$H4
+
+.Ldo_avx:
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	and		\$-32,%rsp
+	sub		\$-8,%rsp
+	lea		-0x58(%rsp),%r11
+	sub		\$0x178,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		-0xf8(%rsp),%r11
+	sub		\$0x218,%rsp
+	vmovdqa		%xmm6,0x50(%r11)
+	vmovdqa		%xmm7,0x60(%r11)
+	vmovdqa		%xmm8,0x70(%r11)
+	vmovdqa		%xmm9,0x80(%r11)
+	vmovdqa		%xmm10,0x90(%r11)
+	vmovdqa		%xmm11,0xa0(%r11)
+	vmovdqa		%xmm12,0xb0(%r11)
+	vmovdqa		%xmm13,0xc0(%r11)
+	vmovdqa		%xmm14,0xd0(%r11)
+	vmovdqa		%xmm15,0xe0(%r11)
+.Ldo_avx_body:
+___
+$code.=<<___;
+	sub		\$64,$len
+	lea		-32($inp),%rax
+	cmovc		%rax,$inp
+
+	vmovdqu		`16*3`($ctx),$D4	# preload r0^2
+	lea		`16*3+64`($ctx),$ctx	# size optimization
+	lea		.Lconst(%rip),%rcx
+
+	################################################################
+	# load input
+	vmovdqu		16*2($inp),$T0
+	vmovdqu		16*3($inp),$T1
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+
+	vpsrldq		\$6,$T0,$T2		# splat input
+	vpsrldq		\$6,$T1,$T3
+	vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpunpcklqdq	$T3,$T2,$T3		# 2:3
+
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpsrlq		\$26,$T0,$T1
+	vpand		$MASK,$T0,$T0		# 0
+	vpsrlq		\$4,$T3,$T2
+	vpand		$MASK,$T1,$T1		# 1
+	vpsrlq		\$30,$T3,$T3
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	jbe		.Lskip_loop_avx
+
+	# expand and copy pre-calculated table to stack
+	vmovdqu		`16*1-64`($ctx),$D1
+	vmovdqu		`16*2-64`($ctx),$D2
+	vpshufd		\$0xEE,$D4,$D3		# 34xx -> 3434
+	vpshufd		\$0x44,$D4,$D0		# xx12 -> 1212
+	vmovdqa		$D3,-0x90(%r11)
+	vmovdqa		$D0,0x00(%rsp)
+	vpshufd		\$0xEE,$D1,$D4
+	vmovdqu		`16*3-64`($ctx),$D0
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D4,-0x80(%r11)
+	vmovdqa		$D1,0x10(%rsp)
+	vpshufd		\$0xEE,$D2,$D3
+	vmovdqu		`16*4-64`($ctx),$D1
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D3,-0x70(%r11)
+	vmovdqa		$D2,0x20(%rsp)
+	vpshufd		\$0xEE,$D0,$D4
+	vmovdqu		`16*5-64`($ctx),$D2
+	vpshufd		\$0x44,$D0,$D0
+	vmovdqa		$D4,-0x60(%r11)
+	vmovdqa		$D0,0x30(%rsp)
+	vpshufd		\$0xEE,$D1,$D3
+	vmovdqu		`16*6-64`($ctx),$D0
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D3,-0x50(%r11)
+	vmovdqa		$D1,0x40(%rsp)
+	vpshufd		\$0xEE,$D2,$D4
+	vmovdqu		`16*7-64`($ctx),$D1
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D4,-0x40(%r11)
+	vmovdqa		$D2,0x50(%rsp)
+	vpshufd		\$0xEE,$D0,$D3
+	vmovdqu		`16*8-64`($ctx),$D2
+	vpshufd		\$0x44,$D0,$D0
+	vmovdqa		$D3,-0x30(%r11)
+	vmovdqa		$D0,0x60(%rsp)
+	vpshufd		\$0xEE,$D1,$D4
+	vpshufd		\$0x44,$D1,$D1
+	vmovdqa		$D4,-0x20(%r11)
+	vmovdqa		$D1,0x70(%rsp)
+	vpshufd		\$0xEE,$D2,$D3
+	 vmovdqa	0x00(%rsp),$D4		# preload r0^2
+	vpshufd		\$0x44,$D2,$D2
+	vmovdqa		$D3,-0x10(%r11)
+	vmovdqa		$D2,0x80(%rsp)
+
+	jmp		.Loop_avx
+
+.align	32
+.Loop_avx:
+	################################################################
+	# ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2
+	# ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^3+inp[7]*r
+	#   \___________________/
+	# ((inp[0]*r^4+inp[2]*r^2+inp[4])*r^4+inp[6]*r^2+inp[8])*r^2
+	# ((inp[1]*r^4+inp[3]*r^2+inp[5])*r^4+inp[7]*r^2+inp[9])*r
+	#   \___________________/ \____________________/
+	#
+	# Note that we start with inp[2:3]*r^2. This is because it
+	# doesn't depend on reduction in previous iteration.
+	################################################################
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# though note that $Tx and $Hx are "reversed" in this section,
+	# and $D4 is preloaded with r0^2...
+
+	vpmuludq	$T0,$D4,$D0		# d0 = h0*r0
+	vpmuludq	$T1,$D4,$D1		# d1 = h1*r0
+	  vmovdqa	$H2,0x20(%r11)				# offload hash
+	vpmuludq	$T2,$D4,$D2		# d3 = h2*r0
+	 vmovdqa	0x10(%rsp),$H2		# r1^2
+	vpmuludq	$T3,$D4,$D3		# d3 = h3*r0
+	vpmuludq	$T4,$D4,$D4		# d4 = h4*r0
+
+	  vmovdqa	$H0,0x00(%r11)				#
+	vpmuludq	0x20(%rsp),$T4,$H0	# h4*s1
+	  vmovdqa	$H1,0x10(%r11)				#
+	vpmuludq	$T3,$H2,$H1		# h3*r1
+	vpaddq		$H0,$D0,$D0		# d0 += h4*s1
+	vpaddq		$H1,$D4,$D4		# d4 += h3*r1
+	  vmovdqa	$H3,0x30(%r11)				#
+	vpmuludq	$T2,$H2,$H0		# h2*r1
+	vpmuludq	$T1,$H2,$H1		# h1*r1
+	vpaddq		$H0,$D3,$D3		# d3 += h2*r1
+	 vmovdqa	0x30(%rsp),$H3		# r2^2
+	vpaddq		$H1,$D2,$D2		# d2 += h1*r1
+	  vmovdqa	$H4,0x40(%r11)				#
+	vpmuludq	$T0,$H2,$H2		# h0*r1
+	 vpmuludq	$T2,$H3,$H0		# h2*r2
+	vpaddq		$H2,$D1,$D1		# d1 += h0*r1
+
+	 vmovdqa	0x40(%rsp),$H4		# s2^2
+	vpaddq		$H0,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$T1,$H3,$H1		# h1*r2
+	vpmuludq	$T0,$H3,$H3		# h0*r2
+	vpaddq		$H1,$D3,$D3		# d3 += h1*r2
+	 vmovdqa	0x50(%rsp),$H2		# r3^2
+	vpaddq		$H3,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$T4,$H4,$H0		# h4*s2
+	vpmuludq	$T3,$H4,$H4		# h3*s2
+	vpaddq		$H0,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	0x60(%rsp),$H3		# s3^2
+	vpaddq		$H4,$D0,$D0		# d0 += h3*s2
+
+	 vmovdqa	0x80(%rsp),$H4		# s4^2
+	vpmuludq	$T1,$H2,$H1		# h1*r3
+	vpmuludq	$T0,$H2,$H2		# h0*r3
+	vpaddq		$H1,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$T4,$H3,$H0		# h4*s3
+	vpmuludq	$T3,$H3,$H1		# h3*s3
+	vpaddq		$H0,$D2,$D2		# d2 += h4*s3
+	 vmovdqu	16*0($inp),$H0				# load input
+	vpaddq		$H1,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$T2,$H3,$H3		# h2*s3
+	 vpmuludq	$T2,$H4,$T2		# h2*s4
+	vpaddq		$H3,$D0,$D0		# d0 += h2*s3
+
+	 vmovdqu	16*1($inp),$H1				#
+	vpaddq		$T2,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$T3,$H4,$T3		# h3*s4
+	vpmuludq	$T4,$H4,$T4		# h4*s4
+	 vpsrldq	\$6,$H0,$H2				# splat input
+	vpaddq		$T3,$D2,$D2		# d2 += h3*s4
+	vpaddq		$T4,$D3,$D3		# d3 += h4*s4
+	 vpsrldq	\$6,$H1,$H3				#
+	vpmuludq	0x70(%rsp),$T0,$T4	# h0*r4
+	vpmuludq	$T1,$H4,$T0		# h1*s4
+	 vpunpckhqdq	$H1,$H0,$H4		# 4
+	vpaddq		$T4,$D4,$D4		# d4 += h0*r4
+	 vmovdqa	-0x90(%r11),$T4		# r0^4
+	vpaddq		$T0,$D0,$D0		# d0 += h1*s4
+
+	vpunpcklqdq	$H1,$H0,$H0		# 0:1
+	vpunpcklqdq	$H3,$H2,$H3		# 2:3
+
+	#vpsrlq		\$40,$H4,$H4		# 4
+	vpsrldq		\$`40/8`,$H4,$H4	# 4
+	vpsrlq		\$26,$H0,$H1
+	vpand		$MASK,$H0,$H0		# 0
+	vpsrlq		\$4,$H3,$H2
+	vpand		$MASK,$H1,$H1		# 1
+	vpand		0(%rcx),$H4,$H4		# .Lmask24
+	vpsrlq		\$30,$H3,$H3
+	vpand		$MASK,$H2,$H2		# 2
+	vpand		$MASK,$H3,$H3		# 3
+	vpor		32(%rcx),$H4,$H4	# padbit, yes, always
+
+	vpaddq		0x00(%r11),$H0,$H0	# add hash value
+	vpaddq		0x10(%r11),$H1,$H1
+	vpaddq		0x20(%r11),$H2,$H2
+	vpaddq		0x30(%r11),$H3,$H3
+	vpaddq		0x40(%r11),$H4,$H4
+
+	lea		16*2($inp),%rax
+	lea		16*4($inp),$inp
+	sub		\$64,$len
+	cmovc		%rax,$inp
+
+	################################################################
+	# Now we accumulate (inp[0:1]+hash)*r^4
+	################################################################
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	vpmuludq	$H0,$T4,$T0		# h0*r0
+	vpmuludq	$H1,$T4,$T1		# h1*r0
+	vpaddq		$T0,$D0,$D0
+	vpaddq		$T1,$D1,$D1
+	 vmovdqa	-0x80(%r11),$T2		# r1^4
+	vpmuludq	$H2,$T4,$T0		# h2*r0
+	vpmuludq	$H3,$T4,$T1		# h3*r0
+	vpaddq		$T0,$D2,$D2
+	vpaddq		$T1,$D3,$D3
+	vpmuludq	$H4,$T4,$T4		# h4*r0
+	 vpmuludq	-0x70(%r11),$H4,$T0	# h4*s1
+	vpaddq		$T4,$D4,$D4
+
+	vpaddq		$T0,$D0,$D0		# d0 += h4*s1
+	vpmuludq	$H2,$T2,$T1		# h2*r1
+	vpmuludq	$H3,$T2,$T0		# h3*r1
+	vpaddq		$T1,$D3,$D3		# d3 += h2*r1
+	 vmovdqa	-0x60(%r11),$T3		# r2^4
+	vpaddq		$T0,$D4,$D4		# d4 += h3*r1
+	vpmuludq	$H1,$T2,$T1		# h1*r1
+	vpmuludq	$H0,$T2,$T2		# h0*r1
+	vpaddq		$T1,$D2,$D2		# d2 += h1*r1
+	vpaddq		$T2,$D1,$D1		# d1 += h0*r1
+
+	 vmovdqa	-0x50(%r11),$T4		# s2^4
+	vpmuludq	$H2,$T3,$T0		# h2*r2
+	vpmuludq	$H1,$T3,$T1		# h1*r2
+	vpaddq		$T0,$D4,$D4		# d4 += h2*r2
+	vpaddq		$T1,$D3,$D3		# d3 += h1*r2
+	 vmovdqa	-0x40(%r11),$T2		# r3^4
+	vpmuludq	$H0,$T3,$T3		# h0*r2
+	vpmuludq	$H4,$T4,$T0		# h4*s2
+	vpaddq		$T3,$D2,$D2		# d2 += h0*r2
+	vpaddq		$T0,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	-0x30(%r11),$T3		# s3^4
+	vpmuludq	$H3,$T4,$T4		# h3*s2
+	 vpmuludq	$H1,$T2,$T1		# h1*r3
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+
+	 vmovdqa	-0x10(%r11),$T4		# s4^4
+	vpaddq		$T1,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$H0,$T2,$T2		# h0*r3
+	vpmuludq	$H4,$T3,$T0		# h4*s3
+	vpaddq		$T2,$D3,$D3		# d3 += h0*r3
+	vpaddq		$T0,$D2,$D2		# d2 += h4*s3
+	 vmovdqu	16*2($inp),$T0				# load input
+	vpmuludq	$H3,$T3,$T2		# h3*s3
+	vpmuludq	$H2,$T3,$T3		# h2*s3
+	vpaddq		$T2,$D1,$D1		# d1 += h3*s3
+	 vmovdqu	16*3($inp),$T1				#
+	vpaddq		$T3,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$H2,$T4,$H2		# h2*s4
+	vpmuludq	$H3,$T4,$H3		# h3*s4
+	 vpsrldq	\$6,$T0,$T2				# splat input
+	vpaddq		$H2,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$H4,$T4,$H4		# h4*s4
+	 vpsrldq	\$6,$T1,$T3				#
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*s4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*s4
+	vpmuludq	-0x20(%r11),$H0,$H4	# h0*r4
+	vpmuludq	$H1,$T4,$H0
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpunpcklqdq	$T3,$T2,$T3		# 2:3
+
+	#vpsrlq		\$40,$T4,$T4		# 4
+	vpsrldq		\$`40/8`,$T4,$T4	# 4
+	vpsrlq		\$26,$T0,$T1
+	 vmovdqa	0x00(%rsp),$D4		# preload r0^2
+	vpand		$MASK,$T0,$T0		# 0
+	vpsrlq		\$4,$T3,$T2
+	vpand		$MASK,$T1,$T1		# 1
+	vpand		0(%rcx),$T4,$T4		# .Lmask24
+	vpsrlq		\$30,$T3,$T3
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	################################################################
+	# lazy reduction as discussed in "NEON crypto" by D.J. Bernstein
+	# and P. Schwabe
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D0
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D0,$H0,$H0
+	vpsllq		\$2,$D0,$D0
+	vpaddq		$D0,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	ja		.Loop_avx
+
+.Lskip_loop_avx:
+	################################################################
+	# multiply (inp[0:1]+hash) or inp[2:3] by r^2:r^1
+
+	vpshufd		\$0x10,$D4,$D4		# r0^n, xx12 -> x1x2
+	add		\$32,$len
+	jnz		.Long_tail_avx
+
+	vpaddq		$H2,$T2,$T2
+	vpaddq		$H0,$T0,$T0
+	vpaddq		$H1,$T1,$T1
+	vpaddq		$H3,$T3,$T3
+	vpaddq		$H4,$T4,$T4
+
+.Long_tail_avx:
+	vmovdqa		$H2,0x20(%r11)
+	vmovdqa		$H0,0x00(%r11)
+	vmovdqa		$H1,0x10(%r11)
+	vmovdqa		$H3,0x30(%r11)
+	vmovdqa		$H4,0x40(%r11)
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+
+	vpmuludq	$T2,$D4,$D2		# d2 = h2*r0
+	vpmuludq	$T0,$D4,$D0		# d0 = h0*r0
+	 vpshufd	\$0x10,`16*1-64`($ctx),$H2		# r1^n
+	vpmuludq	$T1,$D4,$D1		# d1 = h1*r0
+	vpmuludq	$T3,$D4,$D3		# d3 = h3*r0
+	vpmuludq	$T4,$D4,$D4		# d4 = h4*r0
+
+	vpmuludq	$T3,$H2,$H0		# h3*r1
+	vpaddq		$H0,$D4,$D4		# d4 += h3*r1
+	 vpshufd	\$0x10,`16*2-64`($ctx),$H3		# s1^n
+	vpmuludq	$T2,$H2,$H1		# h2*r1
+	vpaddq		$H1,$D3,$D3		# d3 += h2*r1
+	 vpshufd	\$0x10,`16*3-64`($ctx),$H4		# r2^n
+	vpmuludq	$T1,$H2,$H0		# h1*r1
+	vpaddq		$H0,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$T0,$H2,$H2		# h0*r1
+	vpaddq		$H2,$D1,$D1		# d1 += h0*r1
+	vpmuludq	$T4,$H3,$H3		# h4*s1
+	vpaddq		$H3,$D0,$D0		# d0 += h4*s1
+
+	 vpshufd	\$0x10,`16*4-64`($ctx),$H2		# s2^n
+	vpmuludq	$T2,$H4,$H1		# h2*r2
+	vpaddq		$H1,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$T1,$H4,$H0		# h1*r2
+	vpaddq		$H0,$D3,$D3		# d3 += h1*r2
+	 vpshufd	\$0x10,`16*5-64`($ctx),$H3		# r3^n
+	vpmuludq	$T0,$H4,$H4		# h0*r2
+	vpaddq		$H4,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$T4,$H2,$H1		# h4*s2
+	vpaddq		$H1,$D1,$D1		# d1 += h4*s2
+	 vpshufd	\$0x10,`16*6-64`($ctx),$H4		# s3^n
+	vpmuludq	$T3,$H2,$H2		# h3*s2
+	vpaddq		$H2,$D0,$D0		# d0 += h3*s2
+
+	vpmuludq	$T1,$H3,$H0		# h1*r3
+	vpaddq		$H0,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$T0,$H3,$H3		# h0*r3
+	vpaddq		$H3,$D3,$D3		# d3 += h0*r3
+	 vpshufd	\$0x10,`16*7-64`($ctx),$H2		# r4^n
+	vpmuludq	$T4,$H4,$H1		# h4*s3
+	vpaddq		$H1,$D2,$D2		# d2 += h4*s3
+	 vpshufd	\$0x10,`16*8-64`($ctx),$H3		# s4^n
+	vpmuludq	$T3,$H4,$H0		# h3*s3
+	vpaddq		$H0,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$T2,$H4,$H4		# h2*s3
+	vpaddq		$H4,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$T0,$H2,$H2		# h0*r4
+	vpaddq		$H2,$D4,$D4		# h4 = d4 + h0*r4
+	vpmuludq	$T4,$H3,$H1		# h4*s4
+	vpaddq		$H1,$D3,$D3		# h3 = d3 + h4*s4
+	vpmuludq	$T3,$H3,$H0		# h3*s4
+	vpaddq		$H0,$D2,$D2		# h2 = d2 + h3*s4
+	vpmuludq	$T2,$H3,$H1		# h2*s4
+	vpaddq		$H1,$D1,$D1		# h1 = d1 + h2*s4
+	vpmuludq	$T1,$H3,$H3		# h1*s4
+	vpaddq		$H3,$D0,$D0		# h0 = d0 + h1*s4
+
+	jz		.Lshort_tail_avx
+
+	vmovdqu		16*0($inp),$H0		# load input
+	vmovdqu		16*1($inp),$H1
+
+	vpsrldq		\$6,$H0,$H2		# splat input
+	vpsrldq		\$6,$H1,$H3
+	vpunpckhqdq	$H1,$H0,$H4		# 4
+	vpunpcklqdq	$H1,$H0,$H0		# 0:1
+	vpunpcklqdq	$H3,$H2,$H3		# 2:3
+
+	vpsrlq		\$40,$H4,$H4		# 4
+	vpsrlq		\$26,$H0,$H1
+	vpand		$MASK,$H0,$H0		# 0
+	vpsrlq		\$4,$H3,$H2
+	vpand		$MASK,$H1,$H1		# 1
+	vpsrlq		\$30,$H3,$H3
+	vpand		$MASK,$H2,$H2		# 2
+	vpand		$MASK,$H3,$H3		# 3
+	vpor		32(%rcx),$H4,$H4	# padbit, yes, always
+
+	vpshufd		\$0x32,`16*0-64`($ctx),$T4	# r0^n, 34xx -> x3x4
+	vpaddq		0x00(%r11),$H0,$H0
+	vpaddq		0x10(%r11),$H1,$H1
+	vpaddq		0x20(%r11),$H2,$H2
+	vpaddq		0x30(%r11),$H3,$H3
+	vpaddq		0x40(%r11),$H4,$H4
+
+	################################################################
+	# multiply (inp[0:1]+hash) by r^4:r^3 and accumulate
+
+	vpmuludq	$H0,$T4,$T0		# h0*r0
+	vpaddq		$T0,$D0,$D0		# d0 += h0*r0
+	vpmuludq	$H1,$T4,$T1		# h1*r0
+	vpaddq		$T1,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H2,$T4,$T0		# h2*r0
+	vpaddq		$T0,$D2,$D2		# d2 += h2*r0
+	 vpshufd	\$0x32,`16*1-64`($ctx),$T2		# r1^n
+	vpmuludq	$H3,$T4,$T1		# h3*r0
+	vpaddq		$T1,$D3,$D3		# d3 += h3*r0
+	vpmuludq	$H4,$T4,$T4		# h4*r0
+	vpaddq		$T4,$D4,$D4		# d4 += h4*r0
+
+	vpmuludq	$H3,$T2,$T0		# h3*r1
+	vpaddq		$T0,$D4,$D4		# d4 += h3*r1
+	 vpshufd	\$0x32,`16*2-64`($ctx),$T3		# s1
+	vpmuludq	$H2,$T2,$T1		# h2*r1
+	vpaddq		$T1,$D3,$D3		# d3 += h2*r1
+	 vpshufd	\$0x32,`16*3-64`($ctx),$T4		# r2
+	vpmuludq	$H1,$T2,$T0		# h1*r1
+	vpaddq		$T0,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H0,$T2,$T2		# h0*r1
+	vpaddq		$T2,$D1,$D1		# d1 += h0*r1
+	vpmuludq	$H4,$T3,$T3		# h4*s1
+	vpaddq		$T3,$D0,$D0		# d0 += h4*s1
+
+	 vpshufd	\$0x32,`16*4-64`($ctx),$T2		# s2
+	vpmuludq	$H2,$T4,$T1		# h2*r2
+	vpaddq		$T1,$D4,$D4		# d4 += h2*r2
+	vpmuludq	$H1,$T4,$T0		# h1*r2
+	vpaddq		$T0,$D3,$D3		# d3 += h1*r2
+	 vpshufd	\$0x32,`16*5-64`($ctx),$T3		# r3
+	vpmuludq	$H0,$T4,$T4		# h0*r2
+	vpaddq		$T4,$D2,$D2		# d2 += h0*r2
+	vpmuludq	$H4,$T2,$T1		# h4*s2
+	vpaddq		$T1,$D1,$D1		# d1 += h4*s2
+	 vpshufd	\$0x32,`16*6-64`($ctx),$T4		# s3
+	vpmuludq	$H3,$T2,$T2		# h3*s2
+	vpaddq		$T2,$D0,$D0		# d0 += h3*s2
+
+	vpmuludq	$H1,$T3,$T0		# h1*r3
+	vpaddq		$T0,$D4,$D4		# d4 += h1*r3
+	vpmuludq	$H0,$T3,$T3		# h0*r3
+	vpaddq		$T3,$D3,$D3		# d3 += h0*r3
+	 vpshufd	\$0x32,`16*7-64`($ctx),$T2		# r4
+	vpmuludq	$H4,$T4,$T1		# h4*s3
+	vpaddq		$T1,$D2,$D2		# d2 += h4*s3
+	 vpshufd	\$0x32,`16*8-64`($ctx),$T3		# s4
+	vpmuludq	$H3,$T4,$T0		# h3*s3
+	vpaddq		$T0,$D1,$D1		# d1 += h3*s3
+	vpmuludq	$H2,$T4,$T4		# h2*s3
+	vpaddq		$T4,$D0,$D0		# d0 += h2*s3
+
+	vpmuludq	$H0,$T2,$T2		# h0*r4
+	vpaddq		$T2,$D4,$D4		# d4 += h0*r4
+	vpmuludq	$H4,$T3,$T1		# h4*s4
+	vpaddq		$T1,$D3,$D3		# d3 += h4*s4
+	vpmuludq	$H3,$T3,$T0		# h3*s4
+	vpaddq		$T0,$D2,$D2		# d2 += h3*s4
+	vpmuludq	$H2,$T3,$T1		# h2*s4
+	vpaddq		$T1,$D1,$D1		# d1 += h2*s4
+	vpmuludq	$H1,$T3,$T3		# h1*s4
+	vpaddq		$T3,$D0,$D0		# d0 += h1*s4
+
+.Lshort_tail_avx:
+	################################################################
+	# horizontal addition
+
+	vpsrldq		\$8,$D4,$T4
+	vpsrldq		\$8,$D3,$T3
+	vpsrldq		\$8,$D1,$T1
+	vpsrldq		\$8,$D0,$T0
+	vpsrldq		\$8,$D2,$T2
+	vpaddq		$T3,$D3,$D3
+	vpaddq		$T4,$D4,$D4
+	vpaddq		$T0,$D0,$D0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$D2,$D2
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$D3,$H3
+	vpand		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$D4		# h3 -> h4
+
+	vpsrlq		\$26,$D0,$H0
+	vpand		$MASK,$D0,$D0
+	vpaddq		$H0,$D1,$D1		# h0 -> h1
+
+	vpsrlq		\$26,$D4,$H4
+	vpand		$MASK,$D4,$D4
+
+	vpsrlq		\$26,$D1,$H1
+	vpand		$MASK,$D1,$D1
+	vpaddq		$H1,$D2,$D2		# h1 -> h2
+
+	vpaddq		$H4,$D0,$D0
+	vpsllq		\$2,$H4,$H4
+	vpaddq		$H4,$D0,$D0		# h4 -> h0
+
+	vpsrlq		\$26,$D2,$H2
+	vpand		$MASK,$D2,$D2
+	vpaddq		$H2,$D3,$D3		# h2 -> h3
+
+	vpsrlq		\$26,$D0,$H0
+	vpand		$MASK,$D0,$D0
+	vpaddq		$H0,$D1,$D1		# h0 -> h1
+
+	vpsrlq		\$26,$D3,$H3
+	vpand		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$D4		# h3 -> h4
+
+	vmovd		$D0,`4*0-48-64`($ctx)	# save partially reduced
+	vmovd		$D1,`4*1-48-64`($ctx)
+	vmovd		$D2,`4*2-48-64`($ctx)
+	vmovd		$D3,`4*3-48-64`($ctx)
+	vmovd		$D4,`4*4-48-64`($ctx)
+___
+$code.=<<___	if ($win64);
+	vmovdqa		0x50(%r11),%xmm6
+	vmovdqa		0x60(%r11),%xmm7
+	vmovdqa		0x70(%r11),%xmm8
+	vmovdqa		0x80(%r11),%xmm9
+	vmovdqa		0x90(%r11),%xmm10
+	vmovdqa		0xa0(%r11),%xmm11
+	vmovdqa		0xb0(%r11),%xmm12
+	vmovdqa		0xc0(%r11),%xmm13
+	vmovdqa		0xd0(%r11),%xmm14
+	vmovdqa		0xe0(%r11),%xmm15
+	lea		0xf8(%r11),%rsp
+.Ldo_avx_epilogue:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	vzeroupper
+	ret
+.cfi_endproc
+___
+&end_function("poly1305_blocks_avx");
+
+&declare_function("poly1305_emit_avx", 32, 3);
+$code.=<<___;
+	cmpl	\$0,20($ctx)	# is_base2_26?
+	je	.Lemit
+
+	mov	0($ctx),%eax	# load hash value base 2^26
+	mov	4($ctx),%ecx
+	mov	8($ctx),%r8d
+	mov	12($ctx),%r11d
+	mov	16($ctx),%r10d
+
+	shl	\$26,%rcx	# base 2^26 -> base 2^64
+	mov	%r8,%r9
+	shl	\$52,%r8
+	add	%rcx,%rax
+	shr	\$12,%r9
+	add	%rax,%r8	# h0
+	adc	\$0,%r9
+
+	shl	\$14,%r11
+	mov	%r10,%rax
+	shr	\$24,%r10
+	add	%r11,%r9
+	shl	\$40,%rax
+	add	%rax,%r9	# h1
+	adc	\$0,%r10	# h2
+
+	mov	%r10,%rax	# could be partially reduced, so reduce
+	mov	%r10,%rcx
+	and	\$3,%r10
+	shr	\$2,%rax
+	and	\$-4,%rcx
+	add	%rcx,%rax
+	add	%rax,%r8
+	adc	\$0,%r9
+	adc	\$0,%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+___
+&end_function("poly1305_emit_avx");
+
+if ($kernel) {
+	$code .= "#endif\n";
+}
+
+if ($avx>1) {
+
+if ($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX2\n";
+}
+
+my ($H0,$H1,$H2,$H3,$H4, $MASK, $T4,$T0,$T1,$T2,$T3, $D0,$D1,$D2,$D3,$D4) =
+    map("%ymm$_",(0..15));
+my $S4=$MASK;
+
+sub poly1305_blocks_avxN {
+	my ($avx512) = @_;
+	my $suffix = $avx512 ? "_avx512" : "";
+$code.=<<___;
+.cfi_startproc
+	mov	20($ctx),%r8d		# is_base2_26
+	cmp	\$128,$len
+	jae	.Lblocks_avx2$suffix
+	test	%r8d,%r8d
+	jz	.Lblocks
+
+.Lblocks_avx2$suffix:
+	and	\$-16,$len
+	jz	.Lno_data_avx2$suffix
+
+	vzeroupper
+
+	test	%r8d,%r8d
+	jz	.Lbase2_64_avx2$suffix
+
+	test	\$63,$len
+	jz	.Leven_avx2$suffix
+
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lblocks_avx2_body$suffix:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	0($ctx),$d1		# load hash value
+	mov	8($ctx),$d2
+	mov	16($ctx),$h2#d
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	################################# base 2^26 -> base 2^64
+	mov	$d1#d,$h0#d
+	and	\$`-1*(1<<31)`,$d1
+	mov	$d2,$r1			# borrow $r1
+	mov	$d2#d,$h1#d
+	and	\$`-1*(1<<31)`,$d2
+
+	shr	\$6,$d1
+	shl	\$52,$r1
+	add	$d1,$h0
+	shr	\$12,$h1
+	shr	\$18,$d2
+	add	$r1,$h0
+	adc	$d2,$h1
+
+	mov	$h2,$d1
+	shl	\$40,$d1
+	shr	\$24,$h2
+	add	$d1,$h1
+	adc	\$0,$h2			# can be partially reduced...
+
+	mov	\$-4,$d2		# ... so reduce
+	mov	$h2,$d1
+	and	$h2,$d2
+	shr	\$2,$d1
+	and	\$3,$h2
+	add	$d2,$d1			# =*5
+	add	$d1,$h0
+	adc	\$0,$h1
+	adc	\$0,$h2
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+.Lbase2_26_pre_avx2$suffix:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+	mov	$r1,%rax
+
+	test	\$63,%r15
+	jnz	.Lbase2_26_pre_avx2$suffix
+
+	test	$padbit,$padbit		# if $padbit is zero,
+	jz	.Lstore_base2_64_avx2$suffix	# store hash in base 2^64 format
+
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$r0
+	mov	$h1,$r1
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$r0
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$r0,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$r1
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$r1,$h2			# h[4]
+
+	test	%r15,%r15
+	jz	.Lstore_base2_26_avx2$suffix
+
+	vmovd	%rax#d,%x#$H0
+	vmovd	%rdx#d,%x#$H1
+	vmovd	$h0#d,%x#$H2
+	vmovd	$h1#d,%x#$H3
+	vmovd	$h2#d,%x#$H4
+	jmp	.Lproceed_avx2$suffix
+
+.align	32
+.Lstore_base2_64_avx2$suffix:
+	mov	$h0,0($ctx)
+	mov	$h1,8($ctx)
+	mov	$h2,16($ctx)		# note that is_base2_26 is zeroed
+	jmp	.Ldone_avx2$suffix
+
+.align	16
+.Lstore_base2_26_avx2$suffix:
+	mov	%rax#d,0($ctx)		# store hash value base 2^26
+	mov	%rdx#d,4($ctx)
+	mov	$h0#d,8($ctx)
+	mov	$h1#d,12($ctx)
+	mov	$h2#d,16($ctx)
+.align	16
+.Ldone_avx2$suffix:
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore 	%rbp
+.Lno_data_avx2$suffix:
+.Lblocks_avx2_epilogue$suffix:
+	ret
+.cfi_endproc
+
+.align	32
+.Lbase2_64_avx2$suffix:
+.cfi_startproc
+	push	%rbp
+.cfi_push	%rbp
+	mov 	%rsp,%rbp
+	push	%rbx
+.cfi_push	%rbx
+	push	%r12
+.cfi_push	%r12
+	push	%r13
+.cfi_push	%r13
+	push	%r14
+.cfi_push	%r14
+	push	%r15
+.cfi_push	%r15
+.Lbase2_64_avx2_body$suffix:
+
+	mov	$len,%r15		# reassign $len
+
+	mov	24($ctx),$r0		# load r
+	mov	32($ctx),$s1
+
+	mov	0($ctx),$h0		# load hash value
+	mov	8($ctx),$h1
+	mov	16($ctx),$h2#d
+
+	mov	$s1,$r1
+	mov	$s1,%rax
+	shr	\$2,$s1
+	add	$r1,$s1			# s1 = r1 + (r1 >> 2)
+
+	test	\$63,$len
+	jz	.Linit_avx2$suffix
+
+.Lbase2_64_pre_avx2$suffix:
+	add	0($inp),$h0		# accumulate input
+	adc	8($inp),$h1
+	lea	16($inp),$inp
+	adc	$padbit,$h2
+	sub	\$16,%r15
+
+	call	__poly1305_block
+	mov	$r1,%rax
+
+	test	\$63,%r15
+	jnz	.Lbase2_64_pre_avx2$suffix
+
+.Linit_avx2$suffix:
+	################################# base 2^64 -> base 2^26
+	mov	$h0,%rax
+	mov	$h0,%rdx
+	shr	\$52,$h0
+	mov	$h1,$d1
+	mov	$h1,$d2
+	shr	\$26,%rdx
+	and	\$0x3ffffff,%rax	# h[0]
+	shl	\$12,$d1
+	and	\$0x3ffffff,%rdx	# h[1]
+	shr	\$14,$h1
+	or	$d1,$h0
+	shl	\$24,$h2
+	and	\$0x3ffffff,$h0		# h[2]
+	shr	\$40,$d2
+	and	\$0x3ffffff,$h1		# h[3]
+	or	$d2,$h2			# h[4]
+
+	vmovd	%rax#d,%x#$H0
+	vmovd	%rdx#d,%x#$H1
+	vmovd	$h0#d,%x#$H2
+	vmovd	$h1#d,%x#$H3
+	vmovd	$h2#d,%x#$H4
+	movl	\$1,20($ctx)		# set is_base2_26
+
+	call	__poly1305_init_avx
+
+.Lproceed_avx2$suffix:
+	mov	%r15,$len			# restore $len
+___
+$code.=<<___ if (!$kernel);
+	mov	OPENSSL_ia32cap_P+8(%rip),%r9d
+	mov	\$`(1<<31|1<<30|1<<16)`,%r11d
+___
+$code.=<<___;
+	pop 		%r15
+.cfi_restore	%r15
+	pop 		%r14
+.cfi_restore	%r14
+	pop 		%r13
+.cfi_restore	%r13
+	pop 		%r12
+.cfi_restore	%r12
+	pop 		%rbx
+.cfi_restore	%rbx
+	pop 		%rbp
+.cfi_restore 	%rbp
+.Lbase2_64_avx2_epilogue$suffix:
+	jmp	.Ldo_avx2$suffix
+.cfi_endproc
+
+.align	32
+.Leven_avx2$suffix:
+.cfi_startproc
+___
+$code.=<<___ if (!$kernel);
+	mov		OPENSSL_ia32cap_P+8(%rip),%r9d
+___
+$code.=<<___;
+	vmovd		4*0($ctx),%x#$H0	# load hash value base 2^26
+	vmovd		4*1($ctx),%x#$H1
+	vmovd		4*2($ctx),%x#$H2
+	vmovd		4*3($ctx),%x#$H3
+	vmovd		4*4($ctx),%x#$H4
+
+.Ldo_avx2$suffix:
+___
+$code.=<<___		if (!$kernel && $avx>2);
+	cmp		\$512,$len
+	jb		.Lskip_avx512
+	and		%r11d,%r9d
+	test		\$`1<<16`,%r9d		# check for AVX512F
+	jnz		.Lblocks_avx512
+.Lskip_avx512$suffix:
+___
+$code.=<<___ if ($avx > 2 && $avx512 && $kernel);
+	cmp		\$512,$len
+	jae		.Lblocks_avx512
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	sub		\$0x128,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		8(%rsp),%r10
+	sub		\$0x1c8,%rsp
+	vmovdqa		%xmm6,-0xb0(%r10)
+	vmovdqa		%xmm7,-0xa0(%r10)
+	vmovdqa		%xmm8,-0x90(%r10)
+	vmovdqa		%xmm9,-0x80(%r10)
+	vmovdqa		%xmm10,-0x70(%r10)
+	vmovdqa		%xmm11,-0x60(%r10)
+	vmovdqa		%xmm12,-0x50(%r10)
+	vmovdqa		%xmm13,-0x40(%r10)
+	vmovdqa		%xmm14,-0x30(%r10)
+	vmovdqa		%xmm15,-0x20(%r10)
+.Ldo_avx2_body$suffix:
+___
+$code.=<<___;
+	lea		.Lconst(%rip),%rcx
+	lea		48+64($ctx),$ctx	# size optimization
+	vmovdqa		96(%rcx),$T0		# .Lpermd_avx2
+
+	# expand and copy pre-calculated table to stack
+	vmovdqu		`16*0-64`($ctx),%x#$T2
+	and		\$-512,%rsp
+	vmovdqu		`16*1-64`($ctx),%x#$T3
+	vmovdqu		`16*2-64`($ctx),%x#$T4
+	vmovdqu		`16*3-64`($ctx),%x#$D0
+	vmovdqu		`16*4-64`($ctx),%x#$D1
+	vmovdqu		`16*5-64`($ctx),%x#$D2
+	lea		0x90(%rsp),%rax		# size optimization
+	vmovdqu		`16*6-64`($ctx),%x#$D3
+	vpermd		$T2,$T0,$T2		# 00003412 -> 14243444
+	vmovdqu		`16*7-64`($ctx),%x#$D4
+	vpermd		$T3,$T0,$T3
+	vmovdqu		`16*8-64`($ctx),%x#$MASK
+	vpermd		$T4,$T0,$T4
+	vmovdqa		$T2,0x00(%rsp)
+	vpermd		$D0,$T0,$D0
+	vmovdqa		$T3,0x20-0x90(%rax)
+	vpermd		$D1,$T0,$D1
+	vmovdqa		$T4,0x40-0x90(%rax)
+	vpermd		$D2,$T0,$D2
+	vmovdqa		$D0,0x60-0x90(%rax)
+	vpermd		$D3,$T0,$D3
+	vmovdqa		$D1,0x80-0x90(%rax)
+	vpermd		$D4,$T0,$D4
+	vmovdqa		$D2,0xa0-0x90(%rax)
+	vpermd		$MASK,$T0,$MASK
+	vmovdqa		$D3,0xc0-0x90(%rax)
+	vmovdqa		$D4,0xe0-0x90(%rax)
+	vmovdqa		$MASK,0x100-0x90(%rax)
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+
+	################################################################
+	# load input
+	vmovdqu		16*0($inp),%x#$T0
+	vmovdqu		16*1($inp),%x#$T1
+	vinserti128	\$1,16*2($inp),$T0,$T0
+	vinserti128	\$1,16*3($inp),$T1,$T1
+	lea		16*4($inp),$inp
+
+	vpsrldq		\$6,$T0,$T2		# splat input
+	vpsrldq		\$6,$T1,$T3
+	vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpunpcklqdq	$T3,$T2,$T2		# 2:3
+	vpunpcklqdq	$T1,$T0,$T0		# 0:1
+
+	vpsrlq		\$30,$T2,$T3
+	vpsrlq		\$4,$T2,$T2
+	vpsrlq		\$26,$T0,$T1
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpand		$MASK,$T2,$T2		# 2
+	vpand		$MASK,$T0,$T0		# 0
+	vpand		$MASK,$T1,$T1		# 1
+	vpand		$MASK,$T3,$T3		# 3
+	vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	vpaddq		$H2,$T2,$H2		# accumulate input
+	sub		\$64,$len
+	jz		.Ltail_avx2$suffix
+	jmp		.Loop_avx2$suffix
+
+.align	32
+.Loop_avx2$suffix:
+	################################################################
+	# ((inp[0]*r^4+inp[4])*r^4+inp[ 8])*r^4
+	# ((inp[1]*r^4+inp[5])*r^4+inp[ 9])*r^3
+	# ((inp[2]*r^4+inp[6])*r^4+inp[10])*r^2
+	# ((inp[3]*r^4+inp[7])*r^4+inp[11])*r^1
+	#   \________/\__________/
+	################################################################
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+	vmovdqa		`32*0`(%rsp),$T0	# r0^4
+	vpaddq		$H1,$T1,$H1
+	vmovdqa		`32*1`(%rsp),$T1	# r1^4
+	vpaddq		$H3,$T3,$H3
+	vmovdqa		`32*3`(%rsp),$T2	# r2^4
+	vpaddq		$H4,$T4,$H4
+	vmovdqa		`32*6-0x90`(%rax),$T3	# s3^4
+	vmovdqa		`32*8-0x90`(%rax),$S4	# s4^4
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# however, as h2 is "chronologically" first one available pull
+	# corresponding operations up, so it's
+	#
+	# d4 = h2*r2   + h4*r0 + h3*r1             + h1*r3   + h0*r4
+	# d3 = h2*r1   + h3*r0           + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0           + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h2*5*r4 + h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3
+	# d0 = h2*5*r3 + h0*r0 + h4*5*r1 + h3*5*r2           + h1*5*r4
+
+	vpmuludq	$H2,$T0,$D2		# d2 = h2*r0
+	vpmuludq	$H2,$T1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$T2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$T3,$D0		# d0 = h2*s3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+
+	vpmuludq	$H0,$T1,$T4		# h0*r1
+	vpmuludq	$H1,$T1,$H2		# h1*r1, borrow $H2 as temp
+	vpaddq		$T4,$D1,$D1		# d1 += h0*r1
+	vpaddq		$H2,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H3,$T1,$T4		# h3*r1
+	vpmuludq	`32*2`(%rsp),$H4,$H2	# h4*s1
+	vpaddq		$T4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$H2,$D0,$D0		# d0 += h4*s1
+	 vmovdqa	`32*4-0x90`(%rax),$T1	# s2
+
+	vpmuludq	$H0,$T0,$T4		# h0*r0
+	vpmuludq	$H1,$T0,$H2		# h1*r0
+	vpaddq		$T4,$D0,$D0		# d0 += h0*r0
+	vpaddq		$H2,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H3,$T0,$T4		# h3*r0
+	vpmuludq	$H4,$T0,$H2		# h4*r0
+	 vmovdqu	16*0($inp),%x#$T0	# load input
+	vpaddq		$T4,$D3,$D3		# d3 += h3*r0
+	vpaddq		$H2,$D4,$D4		# d4 += h4*r0
+	 vinserti128	\$1,16*2($inp),$T0,$T0
+
+	vpmuludq	$H3,$T1,$T4		# h3*s2
+	vpmuludq	$H4,$T1,$H2		# h4*s2
+	 vmovdqu	16*1($inp),%x#$T1
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+	vpaddq		$H2,$D1,$D1		# d1 += h4*s2
+	 vmovdqa	`32*5-0x90`(%rax),$H2	# r3
+	vpmuludq	$H1,$T2,$T4		# h1*r2
+	vpmuludq	$H0,$T2,$T2		# h0*r2
+	vpaddq		$T4,$D3,$D3		# d3 += h1*r2
+	vpaddq		$T2,$D2,$D2		# d2 += h0*r2
+	 vinserti128	\$1,16*3($inp),$T1,$T1
+	 lea		16*4($inp),$inp
+
+	vpmuludq	$H1,$H2,$T4		# h1*r3
+	vpmuludq	$H0,$H2,$H2		# h0*r3
+	 vpsrldq	\$6,$T0,$T2		# splat input
+	vpaddq		$T4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$H3,$T3,$T4		# h3*s3
+	vpmuludq	$H4,$T3,$H2		# h4*s3
+	 vpsrldq	\$6,$T1,$T3
+	vpaddq		$T4,$D1,$D1		# d1 += h3*s3
+	vpaddq		$H2,$D2,$D2		# d2 += h4*s3
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+
+	vpmuludq	$H3,$S4,$H3		# h3*s4
+	vpmuludq	$H4,$S4,$H4		# h4*s4
+	 vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*r4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*r4
+	 vpunpcklqdq	$T3,$T2,$T3		# 2:3
+	vpmuludq	`32*7-0x90`(%rax),$H0,$H4	# h0*r4
+	vpmuludq	$H1,$S4,$H0		# h1*s4
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	################################################################
+	# lazy reduction (interleaved with tail of input splat)
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	 vpsrlq		\$4,$T3,$T2
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	 vpand		$MASK,$T2,$T2		# 2
+	 vpsrlq		\$26,$T0,$T1
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	 vpaddq		$T2,$H2,$H2		# modulo-scheduled
+	 vpsrlq		\$30,$T3,$T3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpsrlq		\$40,$T4,$T4		# 4
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	 vpand		$MASK,$T0,$T0		# 0
+	 vpand		$MASK,$T1,$T1		# 1
+	 vpand		$MASK,$T3,$T3		# 3
+	 vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+
+	sub		\$64,$len
+	jnz		.Loop_avx2$suffix
+
+	.byte		0x66,0x90
+.Ltail_avx2$suffix:
+	################################################################
+	# while above multiplications were by r^4 in all lanes, in last
+	# iteration we multiply least significant lane by r^4 and most
+	# significant one by r, so copy of above except that references
+	# to the precomputed table are displaced by 4...
+
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+	vmovdqu		`32*0+4`(%rsp),$T0	# r0^4
+	vpaddq		$H1,$T1,$H1
+	vmovdqu		`32*1+4`(%rsp),$T1	# r1^4
+	vpaddq		$H3,$T3,$H3
+	vmovdqu		`32*3+4`(%rsp),$T2	# r2^4
+	vpaddq		$H4,$T4,$H4
+	vmovdqu		`32*6+4-0x90`(%rax),$T3	# s3^4
+	vmovdqu		`32*8+4-0x90`(%rax),$S4	# s4^4
+
+	vpmuludq	$H2,$T0,$D2		# d2 = h2*r0
+	vpmuludq	$H2,$T1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$T2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$T3,$D0		# d0 = h2*s3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+
+	vpmuludq	$H0,$T1,$T4		# h0*r1
+	vpmuludq	$H1,$T1,$H2		# h1*r1
+	vpaddq		$T4,$D1,$D1		# d1 += h0*r1
+	vpaddq		$H2,$D2,$D2		# d2 += h1*r1
+	vpmuludq	$H3,$T1,$T4		# h3*r1
+	vpmuludq	`32*2+4`(%rsp),$H4,$H2	# h4*s1
+	vpaddq		$T4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$H2,$D0,$D0		# d0 += h4*s1
+
+	vpmuludq	$H0,$T0,$T4		# h0*r0
+	vpmuludq	$H1,$T0,$H2		# h1*r0
+	vpaddq		$T4,$D0,$D0		# d0 += h0*r0
+	 vmovdqu	`32*4+4-0x90`(%rax),$T1	# s2
+	vpaddq		$H2,$D1,$D1		# d1 += h1*r0
+	vpmuludq	$H3,$T0,$T4		# h3*r0
+	vpmuludq	$H4,$T0,$H2		# h4*r0
+	vpaddq		$T4,$D3,$D3		# d3 += h3*r0
+	vpaddq		$H2,$D4,$D4		# d4 += h4*r0
+
+	vpmuludq	$H3,$T1,$T4		# h3*s2
+	vpmuludq	$H4,$T1,$H2		# h4*s2
+	vpaddq		$T4,$D0,$D0		# d0 += h3*s2
+	vpaddq		$H2,$D1,$D1		# d1 += h4*s2
+	 vmovdqu	`32*5+4-0x90`(%rax),$H2	# r3
+	vpmuludq	$H1,$T2,$T4		# h1*r2
+	vpmuludq	$H0,$T2,$T2		# h0*r2
+	vpaddq		$T4,$D3,$D3		# d3 += h1*r2
+	vpaddq		$T2,$D2,$D2		# d2 += h0*r2
+
+	vpmuludq	$H1,$H2,$T4		# h1*r3
+	vpmuludq	$H0,$H2,$H2		# h0*r3
+	vpaddq		$T4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$H2,$D3,$D3		# d3 += h0*r3
+	vpmuludq	$H3,$T3,$T4		# h3*s3
+	vpmuludq	$H4,$T3,$H2		# h4*s3
+	vpaddq		$T4,$D1,$D1		# d1 += h3*s3
+	vpaddq		$H2,$D2,$D2		# d2 += h4*s3
+
+	vpmuludq	$H3,$S4,$H3		# h3*s4
+	vpmuludq	$H4,$S4,$H4		# h4*s4
+	vpaddq		$H3,$D2,$H2		# h2 = d2 + h3*r4
+	vpaddq		$H4,$D3,$H3		# h3 = d3 + h4*r4
+	vpmuludq	`32*7+4-0x90`(%rax),$H0,$H4		# h0*r4
+	vpmuludq	$H1,$S4,$H0		# h1*s4
+	vmovdqa		64(%rcx),$MASK		# .Lmask26
+	vpaddq		$H4,$D4,$H4		# h4 = d4 + h0*r4
+	vpaddq		$H0,$D0,$H0		# h0 = d0 + h1*s4
+
+	################################################################
+	# horizontal addition
+
+	vpsrldq		\$8,$D1,$T1
+	vpsrldq		\$8,$H2,$T2
+	vpsrldq		\$8,$H3,$T3
+	vpsrldq		\$8,$H4,$T4
+	vpsrldq		\$8,$H0,$T0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$H2,$H2
+	vpaddq		$T3,$H3,$H3
+	vpaddq		$T4,$H4,$H4
+	vpaddq		$T0,$H0,$H0
+
+	vpermq		\$0x2,$H3,$T3
+	vpermq		\$0x2,$H4,$T4
+	vpermq		\$0x2,$H0,$T0
+	vpermq		\$0x2,$D1,$T1
+	vpermq		\$0x2,$H2,$T2
+	vpaddq		$T3,$H3,$H3
+	vpaddq		$T4,$H4,$H4
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$D1,$D1
+	vpaddq		$T2,$H2,$H2
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$D1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vmovd		%x#$H0,`4*0-48-64`($ctx)# save partially reduced
+	vmovd		%x#$H1,`4*1-48-64`($ctx)
+	vmovd		%x#$H2,`4*2-48-64`($ctx)
+	vmovd		%x#$H3,`4*3-48-64`($ctx)
+	vmovd		%x#$H4,`4*4-48-64`($ctx)
+___
+$code.=<<___	if ($win64);
+	vmovdqa		-0xb0(%r10),%xmm6
+	vmovdqa		-0xa0(%r10),%xmm7
+	vmovdqa		-0x90(%r10),%xmm8
+	vmovdqa		-0x80(%r10),%xmm9
+	vmovdqa		-0x70(%r10),%xmm10
+	vmovdqa		-0x60(%r10),%xmm11
+	vmovdqa		-0x50(%r10),%xmm12
+	vmovdqa		-0x40(%r10),%xmm13
+	vmovdqa		-0x30(%r10),%xmm14
+	vmovdqa		-0x20(%r10),%xmm15
+	lea		-8(%r10),%rsp
+.Ldo_avx2_epilogue$suffix:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	vzeroupper
+	ret
+.cfi_endproc
+___
+if($avx > 2 && $avx512) {
+my ($R0,$R1,$R2,$R3,$R4, $S1,$S2,$S3,$S4) = map("%zmm$_",(16..24));
+my ($M0,$M1,$M2,$M3,$M4) = map("%zmm$_",(25..29));
+my $PADBIT="%zmm30";
+
+map(s/%y/%z/,($T4,$T0,$T1,$T2,$T3));		# switch to %zmm domain
+map(s/%y/%z/,($D0,$D1,$D2,$D3,$D4));
+map(s/%y/%z/,($H0,$H1,$H2,$H3,$H4));
+map(s/%y/%z/,($MASK));
+
+$code.=<<___;
+.cfi_startproc
+.Lblocks_avx512:
+	mov		\$15,%eax
+	kmovw		%eax,%k2
+___
+$code.=<<___	if (!$win64);
+	lea		8(%rsp),%r10
+.cfi_def_cfa_register	%r10
+	sub		\$0x128,%rsp
+___
+$code.=<<___	if ($win64);
+	lea		8(%rsp),%r10
+	sub		\$0x1c8,%rsp
+	vmovdqa		%xmm6,-0xb0(%r10)
+	vmovdqa		%xmm7,-0xa0(%r10)
+	vmovdqa		%xmm8,-0x90(%r10)
+	vmovdqa		%xmm9,-0x80(%r10)
+	vmovdqa		%xmm10,-0x70(%r10)
+	vmovdqa		%xmm11,-0x60(%r10)
+	vmovdqa		%xmm12,-0x50(%r10)
+	vmovdqa		%xmm13,-0x40(%r10)
+	vmovdqa		%xmm14,-0x30(%r10)
+	vmovdqa		%xmm15,-0x20(%r10)
+.Ldo_avx512_body:
+___
+$code.=<<___;
+	lea		.Lconst(%rip),%rcx
+	lea		48+64($ctx),$ctx	# size optimization
+	vmovdqa		96(%rcx),%y#$T2		# .Lpermd_avx2
+
+	# expand pre-calculated table
+	vmovdqu		`16*0-64`($ctx),%x#$D0	# will become expanded ${R0}
+	and		\$-512,%rsp
+	vmovdqu		`16*1-64`($ctx),%x#$D1	# will become ... ${R1}
+	mov		\$0x20,%rax
+	vmovdqu		`16*2-64`($ctx),%x#$T0	# ... ${S1}
+	vmovdqu		`16*3-64`($ctx),%x#$D2	# ... ${R2}
+	vmovdqu		`16*4-64`($ctx),%x#$T1	# ... ${S2}
+	vmovdqu		`16*5-64`($ctx),%x#$D3	# ... ${R3}
+	vmovdqu		`16*6-64`($ctx),%x#$T3	# ... ${S3}
+	vmovdqu		`16*7-64`($ctx),%x#$D4	# ... ${R4}
+	vmovdqu		`16*8-64`($ctx),%x#$T4	# ... ${S4}
+	vpermd		$D0,$T2,$R0		# 00003412 -> 14243444
+	vpbroadcastq	64(%rcx),$MASK		# .Lmask26
+	vpermd		$D1,$T2,$R1
+	vpermd		$T0,$T2,$S1
+	vpermd		$D2,$T2,$R2
+	vmovdqa64	$R0,0x00(%rsp){%k2}	# save in case $len%128 != 0
+	 vpsrlq		\$32,$R0,$T0		# 14243444 -> 01020304
+	vpermd		$T1,$T2,$S2
+	vmovdqu64	$R1,0x00(%rsp,%rax){%k2}
+	 vpsrlq		\$32,$R1,$T1
+	vpermd		$D3,$T2,$R3
+	vmovdqa64	$S1,0x40(%rsp){%k2}
+	vpermd		$T3,$T2,$S3
+	vpermd		$D4,$T2,$R4
+	vmovdqu64	$R2,0x40(%rsp,%rax){%k2}
+	vpermd		$T4,$T2,$S4
+	vmovdqa64	$S2,0x80(%rsp){%k2}
+	vmovdqu64	$R3,0x80(%rsp,%rax){%k2}
+	vmovdqa64	$S3,0xc0(%rsp){%k2}
+	vmovdqu64	$R4,0xc0(%rsp,%rax){%k2}
+	vmovdqa64	$S4,0x100(%rsp){%k2}
+
+	################################################################
+	# calculate 5th through 8th powers of the key
+	#
+	# d0 = r0'*r0 + r1'*5*r4 + r2'*5*r3 + r3'*5*r2 + r4'*5*r1
+	# d1 = r0'*r1 + r1'*r0   + r2'*5*r4 + r3'*5*r3 + r4'*5*r2
+	# d2 = r0'*r2 + r1'*r1   + r2'*r0   + r3'*5*r4 + r4'*5*r3
+	# d3 = r0'*r3 + r1'*r2   + r2'*r1   + r3'*r0   + r4'*5*r4
+	# d4 = r0'*r4 + r1'*r3   + r2'*r2   + r3'*r1   + r4'*r0
+
+	vpmuludq	$T0,$R0,$D0		# d0 = r0'*r0
+	vpmuludq	$T0,$R1,$D1		# d1 = r0'*r1
+	vpmuludq	$T0,$R2,$D2		# d2 = r0'*r2
+	vpmuludq	$T0,$R3,$D3		# d3 = r0'*r3
+	vpmuludq	$T0,$R4,$D4		# d4 = r0'*r4
+	 vpsrlq		\$32,$R2,$T2
+
+	vpmuludq	$T1,$S4,$M0
+	vpmuludq	$T1,$R0,$M1
+	vpmuludq	$T1,$R1,$M2
+	vpmuludq	$T1,$R2,$M3
+	vpmuludq	$T1,$R3,$M4
+	 vpsrlq		\$32,$R3,$T3
+	vpaddq		$M0,$D0,$D0		# d0 += r1'*5*r4
+	vpaddq		$M1,$D1,$D1		# d1 += r1'*r0
+	vpaddq		$M2,$D2,$D2		# d2 += r1'*r1
+	vpaddq		$M3,$D3,$D3		# d3 += r1'*r2
+	vpaddq		$M4,$D4,$D4		# d4 += r1'*r3
+
+	vpmuludq	$T2,$S3,$M0
+	vpmuludq	$T2,$S4,$M1
+	vpmuludq	$T2,$R1,$M3
+	vpmuludq	$T2,$R2,$M4
+	vpmuludq	$T2,$R0,$M2
+	 vpsrlq		\$32,$R4,$T4
+	vpaddq		$M0,$D0,$D0		# d0 += r2'*5*r3
+	vpaddq		$M1,$D1,$D1		# d1 += r2'*5*r4
+	vpaddq		$M3,$D3,$D3		# d3 += r2'*r1
+	vpaddq		$M4,$D4,$D4		# d4 += r2'*r2
+	vpaddq		$M2,$D2,$D2		# d2 += r2'*r0
+
+	vpmuludq	$T3,$S2,$M0
+	vpmuludq	$T3,$R0,$M3
+	vpmuludq	$T3,$R1,$M4
+	vpmuludq	$T3,$S3,$M1
+	vpmuludq	$T3,$S4,$M2
+	vpaddq		$M0,$D0,$D0		# d0 += r3'*5*r2
+	vpaddq		$M3,$D3,$D3		# d3 += r3'*r0
+	vpaddq		$M4,$D4,$D4		# d4 += r3'*r1
+	vpaddq		$M1,$D1,$D1		# d1 += r3'*5*r3
+	vpaddq		$M2,$D2,$D2		# d2 += r3'*5*r4
+
+	vpmuludq	$T4,$S4,$M3
+	vpmuludq	$T4,$R0,$M4
+	vpmuludq	$T4,$S1,$M0
+	vpmuludq	$T4,$S2,$M1
+	vpmuludq	$T4,$S3,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += r2'*5*r4
+	vpaddq		$M4,$D4,$D4		# d4 += r2'*r0
+	vpaddq		$M0,$D0,$D0		# d0 += r2'*5*r1
+	vpaddq		$M1,$D1,$D1		# d1 += r2'*5*r2
+	vpaddq		$M2,$D2,$D2		# d2 += r2'*5*r3
+
+	################################################################
+	# load input
+	vmovdqu64	16*0($inp),%z#$T3
+	vmovdqu64	16*4($inp),%z#$T4
+	lea		16*8($inp),$inp
+
+	################################################################
+	# lazy reduction
+
+	vpsrlq		\$26,$D3,$M3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$M3,$D4,$D4		# d3 -> d4
+
+	vpsrlq		\$26,$D0,$M0
+	vpandq		$MASK,$D0,$D0
+	vpaddq		$M0,$D1,$D1		# d0 -> d1
+
+	vpsrlq		\$26,$D4,$M4
+	vpandq		$MASK,$D4,$D4
+
+	vpsrlq		\$26,$D1,$M1
+	vpandq		$MASK,$D1,$D1
+	vpaddq		$M1,$D2,$D2		# d1 -> d2
+
+	vpaddq		$M4,$D0,$D0
+	vpsllq		\$2,$M4,$M4
+	vpaddq		$M4,$D0,$D0		# d4 -> d0
+
+	vpsrlq		\$26,$D2,$M2
+	vpandq		$MASK,$D2,$D2
+	vpaddq		$M2,$D3,$D3		# d2 -> d3
+
+	vpsrlq		\$26,$D0,$M0
+	vpandq		$MASK,$D0,$D0
+	vpaddq		$M0,$D1,$D1		# d0 -> d1
+
+	vpsrlq		\$26,$D3,$M3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$M3,$D4,$D4		# d3 -> d4
+
+	################################################################
+	# at this point we have 14243444 in $R0-$S4 and 05060708 in
+	# $D0-$D4, ...
+
+	vpunpcklqdq	$T4,$T3,$T0	# transpose input
+	vpunpckhqdq	$T4,$T3,$T4
+
+	# ... since input 64-bit lanes are ordered as 73625140, we could
+	# "vperm" it to 76543210 (here and in each loop iteration), *or*
+	# we could just flow along, hence the goal for $R0-$S4 is
+	# 1858286838784888 ...
+
+	vmovdqa32	128(%rcx),$M0		# .Lpermd_avx512:
+	mov		\$0x7777,%eax
+	kmovw		%eax,%k1
+
+	vpermd		$R0,$M0,$R0		# 14243444 -> 1---2---3---4---
+	vpermd		$R1,$M0,$R1
+	vpermd		$R2,$M0,$R2
+	vpermd		$R3,$M0,$R3
+	vpermd		$R4,$M0,$R4
+
+	vpermd		$D0,$M0,${R0}{%k1}	# 05060708 -> 1858286838784888
+	vpermd		$D1,$M0,${R1}{%k1}
+	vpermd		$D2,$M0,${R2}{%k1}
+	vpermd		$D3,$M0,${R3}{%k1}
+	vpermd		$D4,$M0,${R4}{%k1}
+
+	vpslld		\$2,$R1,$S1		# *5
+	vpslld		\$2,$R2,$S2
+	vpslld		\$2,$R3,$S3
+	vpslld		\$2,$R4,$S4
+	vpaddd		$R1,$S1,$S1
+	vpaddd		$R2,$S2,$S2
+	vpaddd		$R3,$S3,$S3
+	vpaddd		$R4,$S4,$S4
+
+	vpbroadcastq	32(%rcx),$PADBIT	# .L129
+
+	vpsrlq		\$52,$T0,$T2		# splat input
+	vpsllq		\$12,$T4,$T3
+	vporq		$T3,$T2,$T2
+	vpsrlq		\$26,$T0,$T1
+	vpsrlq		\$14,$T4,$T3
+	vpsrlq		\$40,$T4,$T4		# 4
+	vpandq		$MASK,$T2,$T2		# 2
+	vpandq		$MASK,$T0,$T0		# 0
+	#vpandq		$MASK,$T1,$T1		# 1
+	#vpandq		$MASK,$T3,$T3		# 3
+	#vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+
+	vpaddq		$H2,$T2,$H2		# accumulate input
+	sub		\$192,$len
+	jbe		.Ltail_avx512
+	jmp		.Loop_avx512
+
+.align	32
+.Loop_avx512:
+	################################################################
+	# ((inp[0]*r^8+inp[ 8])*r^8+inp[16])*r^8
+	# ((inp[1]*r^8+inp[ 9])*r^8+inp[17])*r^7
+	# ((inp[2]*r^8+inp[10])*r^8+inp[18])*r^6
+	# ((inp[3]*r^8+inp[11])*r^8+inp[19])*r^5
+	# ((inp[4]*r^8+inp[12])*r^8+inp[20])*r^4
+	# ((inp[5]*r^8+inp[13])*r^8+inp[21])*r^3
+	# ((inp[6]*r^8+inp[14])*r^8+inp[22])*r^2
+	# ((inp[7]*r^8+inp[15])*r^8+inp[23])*r^1
+	#   \________/\___________/
+	################################################################
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+
+	# d4 = h4*r0 + h3*r1   + h2*r2   + h1*r3   + h0*r4
+	# d3 = h3*r0 + h2*r1   + h1*r2   + h0*r3   + h4*5*r4
+	# d2 = h2*r0 + h1*r1   + h0*r2   + h4*5*r3 + h3*5*r4
+	# d1 = h1*r0 + h0*r1   + h4*5*r2 + h3*5*r3 + h2*5*r4
+	# d0 = h0*r0 + h4*5*r1 + h3*5*r2 + h2*5*r3 + h1*5*r4
+	#
+	# however, as h2 is "chronologically" first one available pull
+	# corresponding operations up, so it's
+	#
+	# d3 = h2*r1   + h0*r3 + h1*r2   + h3*r0 + h4*5*r4
+	# d4 = h2*r2   + h0*r4 + h1*r3   + h3*r1 + h4*r0
+	# d0 = h2*5*r3 + h0*r0 + h1*5*r4         + h3*5*r2 + h4*5*r1
+	# d1 = h2*5*r4 + h0*r1           + h1*r0 + h3*5*r3 + h4*5*r2
+	# d2 = h2*r0           + h0*r2   + h1*r1 + h3*5*r4 + h4*5*r3
+
+	vpmuludq	$H2,$R1,$D3		# d3 = h2*r1
+	 vpaddq		$H0,$T0,$H0
+	vpmuludq	$H2,$R2,$D4		# d4 = h2*r2
+	 vpandq		$MASK,$T1,$T1		# 1
+	vpmuludq	$H2,$S3,$D0		# d0 = h2*s3
+	 vpandq		$MASK,$T3,$T3		# 3
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+	 vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+	vpmuludq	$H2,$R0,$D2		# d2 = h2*r0
+	 vpaddq		$H1,$T1,$H1		# accumulate input
+	 vpaddq		$H3,$T3,$H3
+	 vpaddq		$H4,$T4,$H4
+
+	  vmovdqu64	16*0($inp),$T3		# load input
+	  vmovdqu64	16*4($inp),$T4
+	  lea		16*8($inp),$inp
+	vpmuludq	$H0,$R3,$M3
+	vpmuludq	$H0,$R4,$M4
+	vpmuludq	$H0,$R0,$M0
+	vpmuludq	$H0,$R1,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h0*r3
+	vpaddq		$M4,$D4,$D4		# d4 += h0*r4
+	vpaddq		$M0,$D0,$D0		# d0 += h0*r0
+	vpaddq		$M1,$D1,$D1		# d1 += h0*r1
+
+	vpmuludq	$H1,$R2,$M3
+	vpmuludq	$H1,$R3,$M4
+	vpmuludq	$H1,$S4,$M0
+	vpmuludq	$H0,$R2,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h1*r2
+	vpaddq		$M4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$M0,$D0,$D0		# d0 += h1*s4
+	vpaddq		$M2,$D2,$D2		# d2 += h0*r2
+
+	  vpunpcklqdq	$T4,$T3,$T0		# transpose input
+	  vpunpckhqdq	$T4,$T3,$T4
+
+	vpmuludq	$H3,$R0,$M3
+	vpmuludq	$H3,$R1,$M4
+	vpmuludq	$H1,$R0,$M1
+	vpmuludq	$H1,$R1,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h3*r0
+	vpaddq		$M4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$M1,$D1,$D1		# d1 += h1*r0
+	vpaddq		$M2,$D2,$D2		# d2 += h1*r1
+
+	vpmuludq	$H4,$S4,$M3
+	vpmuludq	$H4,$R0,$M4
+	vpmuludq	$H3,$S2,$M0
+	vpmuludq	$H3,$S3,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h4*s4
+	vpmuludq	$H3,$S4,$M2
+	vpaddq		$M4,$D4,$D4		# d4 += h4*r0
+	vpaddq		$M0,$D0,$D0		# d0 += h3*s2
+	vpaddq		$M1,$D1,$D1		# d1 += h3*s3
+	vpaddq		$M2,$D2,$D2		# d2 += h3*s4
+
+	vpmuludq	$H4,$S1,$M0
+	vpmuludq	$H4,$S2,$M1
+	vpmuludq	$H4,$S3,$M2
+	vpaddq		$M0,$D0,$H0		# h0 = d0 + h4*s1
+	vpaddq		$M1,$D1,$H1		# h1 = d2 + h4*s2
+	vpaddq		$M2,$D2,$H2		# h2 = d3 + h4*s3
+
+	################################################################
+	# lazy reduction (interleaved with input splat)
+
+	 vpsrlq		\$52,$T0,$T2		# splat input
+	 vpsllq		\$12,$T4,$T3
+
+	vpsrlq		\$26,$D3,$H3
+	vpandq		$MASK,$D3,$D3
+	vpaddq		$H3,$D4,$H4		# h3 -> h4
+
+	 vporq		$T3,$T2,$T2
+
+	vpsrlq		\$26,$H0,$D0
+	vpandq		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpandq		$MASK,$T2,$T2		# 2
+
+	vpsrlq		\$26,$H4,$D4
+	vpandq		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpandq		$MASK,$H1,$H1
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	 vpaddq		$T2,$H2,$H2		# modulo-scheduled
+	 vpsrlq		\$26,$T0,$T1
+
+	vpsrlq		\$26,$H2,$D2
+	vpandq		$MASK,$H2,$H2
+	vpaddq		$D2,$D3,$H3		# h2 -> h3
+
+	 vpsrlq		\$14,$T4,$T3
+
+	vpsrlq		\$26,$H0,$D0
+	vpandq		$MASK,$H0,$H0
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	 vpsrlq		\$40,$T4,$T4		# 4
+
+	vpsrlq		\$26,$H3,$D3
+	vpandq		$MASK,$H3,$H3
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	 vpandq		$MASK,$T0,$T0		# 0
+	 #vpandq	$MASK,$T1,$T1		# 1
+	 #vpandq	$MASK,$T3,$T3		# 3
+	 #vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+
+	sub		\$128,$len
+	ja		.Loop_avx512
+
+.Ltail_avx512:
+	################################################################
+	# while above multiplications were by r^8 in all lanes, in last
+	# iteration we multiply least significant lane by r^8 and most
+	# significant one by r, that's why table gets shifted...
+
+	vpsrlq		\$32,$R0,$R0		# 0105020603070408
+	vpsrlq		\$32,$R1,$R1
+	vpsrlq		\$32,$R2,$R2
+	vpsrlq		\$32,$S3,$S3
+	vpsrlq		\$32,$S4,$S4
+	vpsrlq		\$32,$R3,$R3
+	vpsrlq		\$32,$R4,$R4
+	vpsrlq		\$32,$S1,$S1
+	vpsrlq		\$32,$S2,$S2
+
+	################################################################
+	# load either next or last 64 byte of input
+	lea		($inp,$len),$inp
+
+	#vpaddq		$H2,$T2,$H2		# accumulate input
+	vpaddq		$H0,$T0,$H0
+
+	vpmuludq	$H2,$R1,$D3		# d3 = h2*r1
+	vpmuludq	$H2,$R2,$D4		# d4 = h2*r2
+	vpmuludq	$H2,$S3,$D0		# d0 = h2*s3
+	 vpandq		$MASK,$T1,$T1		# 1
+	vpmuludq	$H2,$S4,$D1		# d1 = h2*s4
+	 vpandq		$MASK,$T3,$T3		# 3
+	vpmuludq	$H2,$R0,$D2		# d2 = h2*r0
+	 vporq		$PADBIT,$T4,$T4		# padbit, yes, always
+	 vpaddq		$H1,$T1,$H1		# accumulate input
+	 vpaddq		$H3,$T3,$H3
+	 vpaddq		$H4,$T4,$H4
+
+	  vmovdqu	16*0($inp),%x#$T0
+	vpmuludq	$H0,$R3,$M3
+	vpmuludq	$H0,$R4,$M4
+	vpmuludq	$H0,$R0,$M0
+	vpmuludq	$H0,$R1,$M1
+	vpaddq		$M3,$D3,$D3		# d3 += h0*r3
+	vpaddq		$M4,$D4,$D4		# d4 += h0*r4
+	vpaddq		$M0,$D0,$D0		# d0 += h0*r0
+	vpaddq		$M1,$D1,$D1		# d1 += h0*r1
+
+	  vmovdqu	16*1($inp),%x#$T1
+	vpmuludq	$H1,$R2,$M3
+	vpmuludq	$H1,$R3,$M4
+	vpmuludq	$H1,$S4,$M0
+	vpmuludq	$H0,$R2,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h1*r2
+	vpaddq		$M4,$D4,$D4		# d4 += h1*r3
+	vpaddq		$M0,$D0,$D0		# d0 += h1*s4
+	vpaddq		$M2,$D2,$D2		# d2 += h0*r2
+
+	  vinserti128	\$1,16*2($inp),%y#$T0,%y#$T0
+	vpmuludq	$H3,$R0,$M3
+	vpmuludq	$H3,$R1,$M4
+	vpmuludq	$H1,$R0,$M1
+	vpmuludq	$H1,$R1,$M2
+	vpaddq		$M3,$D3,$D3		# d3 += h3*r0
+	vpaddq		$M4,$D4,$D4		# d4 += h3*r1
+	vpaddq		$M1,$D1,$D1		# d1 += h1*r0
+	vpaddq		$M2,$D2,$D2		# d2 += h1*r1
+
+	  vinserti128	\$1,16*3($inp),%y#$T1,%y#$T1
+	vpmuludq	$H4,$S4,$M3
+	vpmuludq	$H4,$R0,$M4
+	vpmuludq	$H3,$S2,$M0
+	vpmuludq	$H3,$S3,$M1
+	vpmuludq	$H3,$S4,$M2
+	vpaddq		$M3,$D3,$H3		# h3 = d3 + h4*s4
+	vpaddq		$M4,$D4,$D4		# d4 += h4*r0
+	vpaddq		$M0,$D0,$D0		# d0 += h3*s2
+	vpaddq		$M1,$D1,$D1		# d1 += h3*s3
+	vpaddq		$M2,$D2,$D2		# d2 += h3*s4
+
+	vpmuludq	$H4,$S1,$M0
+	vpmuludq	$H4,$S2,$M1
+	vpmuludq	$H4,$S3,$M2
+	vpaddq		$M0,$D0,$H0		# h0 = d0 + h4*s1
+	vpaddq		$M1,$D1,$H1		# h1 = d2 + h4*s2
+	vpaddq		$M2,$D2,$H2		# h2 = d3 + h4*s3
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	vpermq		\$0xb1,$H3,$D3
+	vpermq		\$0xb1,$D4,$H4
+	vpermq		\$0xb1,$H0,$D0
+	vpermq		\$0xb1,$H1,$D1
+	vpermq		\$0xb1,$H2,$D2
+	vpaddq		$D3,$H3,$H3
+	vpaddq		$D4,$H4,$H4
+	vpaddq		$D0,$H0,$H0
+	vpaddq		$D1,$H1,$H1
+	vpaddq		$D2,$H2,$H2
+
+	kmovw		%eax,%k3
+	vpermq		\$0x2,$H3,$D3
+	vpermq		\$0x2,$H4,$D4
+	vpermq		\$0x2,$H0,$D0
+	vpermq		\$0x2,$H1,$D1
+	vpermq		\$0x2,$H2,$D2
+	vpaddq		$D3,$H3,$H3
+	vpaddq		$D4,$H4,$H4
+	vpaddq		$D0,$H0,$H0
+	vpaddq		$D1,$H1,$H1
+	vpaddq		$D2,$H2,$H2
+
+	vextracti64x4	\$0x1,$H3,%y#$D3
+	vextracti64x4	\$0x1,$H4,%y#$D4
+	vextracti64x4	\$0x1,$H0,%y#$D0
+	vextracti64x4	\$0x1,$H1,%y#$D1
+	vextracti64x4	\$0x1,$H2,%y#$D2
+	vpaddq		$D3,$H3,${H3}{%k3}{z}	# keep single qword in case
+	vpaddq		$D4,$H4,${H4}{%k3}{z}	# it's passed to .Ltail_avx2
+	vpaddq		$D0,$H0,${H0}{%k3}{z}
+	vpaddq		$D1,$H1,${H1}{%k3}{z}
+	vpaddq		$D2,$H2,${H2}{%k3}{z}
+___
+map(s/%z/%y/,($T0,$T1,$T2,$T3,$T4, $PADBIT));
+map(s/%z/%y/,($H0,$H1,$H2,$H3,$H4, $D0,$D1,$D2,$D3,$D4, $MASK));
+$code.=<<___;
+	################################################################
+	# lazy reduction (interleaved with input splat)
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	 vpsrldq	\$6,$T0,$T2		# splat input
+	 vpsrldq	\$6,$T1,$T3
+	 vpunpckhqdq	$T1,$T0,$T4		# 4
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	 vpunpcklqdq	$T3,$T2,$T2		# 2:3
+	 vpunpcklqdq	$T1,$T0,$T0		# 0:1
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H4,$D4
+	vpand		$MASK,$H4,$H4
+
+	vpsrlq		\$26,$H1,$D1
+	vpand		$MASK,$H1,$H1
+	 vpsrlq		\$30,$T2,$T3
+	 vpsrlq		\$4,$T2,$T2
+	vpaddq		$D1,$H2,$H2		# h1 -> h2
+
+	vpaddq		$D4,$H0,$H0
+	vpsllq		\$2,$D4,$D4
+	 vpsrlq		\$26,$T0,$T1
+	 vpsrlq		\$40,$T4,$T4		# 4
+	vpaddq		$D4,$H0,$H0		# h4 -> h0
+
+	vpsrlq		\$26,$H2,$D2
+	vpand		$MASK,$H2,$H2
+	 vpand		$MASK,$T2,$T2		# 2
+	 vpand		$MASK,$T0,$T0		# 0
+	vpaddq		$D2,$H3,$H3		# h2 -> h3
+
+	vpsrlq		\$26,$H0,$D0
+	vpand		$MASK,$H0,$H0
+	 vpaddq		$H2,$T2,$H2		# accumulate input for .Ltail_avx2
+	 vpand		$MASK,$T1,$T1		# 1
+	vpaddq		$D0,$H1,$H1		# h0 -> h1
+
+	vpsrlq		\$26,$H3,$D3
+	vpand		$MASK,$H3,$H3
+	 vpand		$MASK,$T3,$T3		# 3
+	 vpor		32(%rcx),$T4,$T4	# padbit, yes, always
+	vpaddq		$D3,$H4,$H4		# h3 -> h4
+
+	lea		0x90(%rsp),%rax		# size optimization for .Ltail_avx2
+	add		\$64,$len
+	jnz		.Ltail_avx2$suffix
+
+	vpsubq		$T2,$H2,$H2		# undo input accumulation
+	vmovd		%x#$H0,`4*0-48-64`($ctx)# save partially reduced
+	vmovd		%x#$H1,`4*1-48-64`($ctx)
+	vmovd		%x#$H2,`4*2-48-64`($ctx)
+	vmovd		%x#$H3,`4*3-48-64`($ctx)
+	vmovd		%x#$H4,`4*4-48-64`($ctx)
+	vzeroall
+___
+$code.=<<___	if ($win64);
+	movdqa		-0xb0(%r10),%xmm6
+	movdqa		-0xa0(%r10),%xmm7
+	movdqa		-0x90(%r10),%xmm8
+	movdqa		-0x80(%r10),%xmm9
+	movdqa		-0x70(%r10),%xmm10
+	movdqa		-0x60(%r10),%xmm11
+	movdqa		-0x50(%r10),%xmm12
+	movdqa		-0x40(%r10),%xmm13
+	movdqa		-0x30(%r10),%xmm14
+	movdqa		-0x20(%r10),%xmm15
+	lea		-8(%r10),%rsp
+.Ldo_avx512_epilogue:
+___
+$code.=<<___	if (!$win64);
+	lea		-8(%r10),%rsp
+.cfi_def_cfa_register	%rsp
+___
+$code.=<<___;
+	ret
+.cfi_endproc
+___
+
+}
+
+}
+
+&declare_function("poly1305_blocks_avx2", 32, 4);
+poly1305_blocks_avxN(0);
+&end_function("poly1305_blocks_avx2");
+
+if($kernel) {
+	$code .= "#endif\n";
+}
+
+#######################################################################
+if ($avx>2) {
+# On entry we have input length divisible by 64. But since inner loop
+# processes 128 bytes per iteration, cases when length is not divisible
+# by 128 are handled by passing tail 64 bytes to .Ltail_avx2. For this
+# reason stack layout is kept identical to poly1305_blocks_avx2. If not
+# for this tail, we wouldn't have to even allocate stack frame...
+
+if($kernel) {
+	$code .= "#ifdef CONFIG_AS_AVX512\n";
+}
+
+&declare_function("poly1305_blocks_avx512", 32, 4);
+poly1305_blocks_avxN(1);
+&end_function("poly1305_blocks_avx512");
+
+if ($kernel) {
+	$code .= "#endif\n";
+}
+
+if (!$kernel && $avx>3) {
+########################################################################
+# VPMADD52 version using 2^44 radix.
+#
+# One can argue that base 2^52 would be more natural. Well, even though
+# some operations would be more natural, one has to recognize couple of
+# things. Base 2^52 doesn't provide advantage over base 2^44 if you look
+# at amount of multiply-n-accumulate operations. Secondly, it makes it
+# impossible to pre-compute multiples of 5 [referred to as s[]/sN in
+# reference implementations], which means that more such operations
+# would have to be performed in inner loop, which in turn makes critical
+# path longer. In other words, even though base 2^44 reduction might
+# look less elegant, overall critical path is actually shorter...
+
+########################################################################
+# Layout of opaque area is following.
+#
+#	unsigned __int64 h[3];		# current hash value base 2^44
+#	unsigned __int64 s[2];		# key value*20 base 2^44
+#	unsigned __int64 r[3];		# key value base 2^44
+#	struct { unsigned __int64 r^1, r^3, r^2, r^4; } R[4];
+#					# r^n positions reflect
+#					# placement in register, not
+#					# memory, R[3] is R[1]*20
+
+$code.=<<___;
+.type	poly1305_init_base2_44,\@function,3
+.align	32
+poly1305_init_base2_44:
+	xor	%eax,%eax
+	mov	%rax,0($ctx)		# initialize hash value
+	mov	%rax,8($ctx)
+	mov	%rax,16($ctx)
+
+.Linit_base2_44:
+	lea	poly1305_blocks_vpmadd52(%rip),%r10
+	lea	poly1305_emit_base2_44(%rip),%r11
+
+	mov	\$0x0ffffffc0fffffff,%rax
+	mov	\$0x0ffffffc0ffffffc,%rcx
+	and	0($inp),%rax
+	mov	\$0x00000fffffffffff,%r8
+	and	8($inp),%rcx
+	mov	\$0x00000fffffffffff,%r9
+	and	%rax,%r8
+	shrd	\$44,%rcx,%rax
+	mov	%r8,40($ctx)		# r0
+	and	%r9,%rax
+	shr	\$24,%rcx
+	mov	%rax,48($ctx)		# r1
+	lea	(%rax,%rax,4),%rax	# *5
+	mov	%rcx,56($ctx)		# r2
+	shl	\$2,%rax		# magic <<2
+	lea	(%rcx,%rcx,4),%rcx	# *5
+	shl	\$2,%rcx		# magic <<2
+	mov	%rax,24($ctx)		# s1
+	mov	%rcx,32($ctx)		# s2
+	movq	\$-1,64($ctx)		# write impossible value
+___
+$code.=<<___	if ($flavour !~ /elf32/);
+	mov	%r10,0(%rdx)
+	mov	%r11,8(%rdx)
+___
+$code.=<<___	if ($flavour =~ /elf32/);
+	mov	%r10d,0(%rdx)
+	mov	%r11d,4(%rdx)
+___
+$code.=<<___;
+	mov	\$1,%eax
+	ret
+.size	poly1305_init_base2_44,.-poly1305_init_base2_44
+___
+{
+my ($H0,$H1,$H2,$r2r1r0,$r1r0s2,$r0s2s1,$Dlo,$Dhi) = map("%ymm$_",(0..5,16,17));
+my ($T0,$inp_permd,$inp_shift,$PAD) = map("%ymm$_",(18..21));
+my ($reduc_mask,$reduc_rght,$reduc_left) = map("%ymm$_",(22..25));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52,\@function,4
+.align	32
+poly1305_blocks_vpmadd52:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+	# if powers of the key are not calculated yet, process up to 3
+	# blocks with this single-block subroutine, otherwise ensure that
+	# length is divisible by 2 blocks and pass the rest down to next
+	# subroutine...
+
+	mov	\$3,%rax
+	mov	\$1,%r10
+	cmp	\$4,$len			# is input long
+	cmovae	%r10,%rax
+	test	%r8,%r8				# is power value impossible?
+	cmovns	%r10,%rax
+
+	and	$len,%rax			# is input of favourable length?
+	jz	.Lblocks_vpmadd52_4x
+
+	sub		%rax,$len
+	mov		\$7,%r10d
+	mov		\$1,%r11d
+	kmovw		%r10d,%k7
+	lea		.L2_44_inp_permd(%rip),%r10
+	kmovw		%r11d,%k1
+
+	vmovq		$padbit,%x#$PAD
+	vmovdqa64	0(%r10),$inp_permd	# .L2_44_inp_permd
+	vmovdqa64	32(%r10),$inp_shift	# .L2_44_inp_shift
+	vpermq		\$0xcf,$PAD,$PAD
+	vmovdqa64	64(%r10),$reduc_mask	# .L2_44_mask
+
+	vmovdqu64	0($ctx),${Dlo}{%k7}{z}		# load hash value
+	vmovdqu64	40($ctx),${r2r1r0}{%k7}{z}	# load keys
+	vmovdqu64	32($ctx),${r1r0s2}{%k7}{z}
+	vmovdqu64	24($ctx),${r0s2s1}{%k7}{z}
+
+	vmovdqa64	96(%r10),$reduc_rght	# .L2_44_shift_rgt
+	vmovdqa64	128(%r10),$reduc_left	# .L2_44_shift_lft
+
+	jmp		.Loop_vpmadd52
+
+.align	32
+.Loop_vpmadd52:
+	vmovdqu32	0($inp),%x#$T0		# load input as ----3210
+	lea		16($inp),$inp
+
+	vpermd		$T0,$inp_permd,$T0	# ----3210 -> --322110
+	vpsrlvq		$inp_shift,$T0,$T0
+	vpandq		$reduc_mask,$T0,$T0
+	vporq		$PAD,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo		# accumulate input
+
+	vpermq		\$0,$Dlo,${H0}{%k7}{z}	# smash hash value
+	vpermq		\$0b01010101,$Dlo,${H1}{%k7}{z}
+	vpermq		\$0b10101010,$Dlo,${H2}{%k7}{z}
+
+	vpxord		$Dlo,$Dlo,$Dlo
+	vpxord		$Dhi,$Dhi,$Dhi
+
+	vpmadd52luq	$r2r1r0,$H0,$Dlo
+	vpmadd52huq	$r2r1r0,$H0,$Dhi
+
+	vpmadd52luq	$r1r0s2,$H1,$Dlo
+	vpmadd52huq	$r1r0s2,$H1,$Dhi
+
+	vpmadd52luq	$r0s2s1,$H2,$Dlo
+	vpmadd52huq	$r0s2s1,$H2,$Dhi
+
+	vpsrlvq		$reduc_rght,$Dlo,$T0	# 0 in topmost qword
+	vpsllvq		$reduc_left,$Dhi,$Dhi	# 0 in topmost qword
+	vpandq		$reduc_mask,$Dlo,$Dlo
+
+	vpaddq		$T0,$Dhi,$Dhi
+
+	vpermq		\$0b10010011,$Dhi,$Dhi	# 0 in lowest qword
+
+	vpaddq		$Dhi,$Dlo,$Dlo		# note topmost qword :-)
+
+	vpsrlvq		$reduc_rght,$Dlo,$T0	# 0 in topmost word
+	vpandq		$reduc_mask,$Dlo,$Dlo
+
+	vpermq		\$0b10010011,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo
+
+	vpermq		\$0b10010011,$Dlo,${T0}{%k1}{z}
+
+	vpaddq		$T0,$Dlo,$Dlo
+	vpsllq		\$2,$T0,$T0
+
+	vpaddq		$T0,$Dlo,$Dlo
+
+	dec		%rax			# len-=16
+	jnz		.Loop_vpmadd52
+
+	vmovdqu64	$Dlo,0($ctx){%k7}	# store hash value
+
+	test		$len,$len
+	jnz		.Lblocks_vpmadd52_4x
+
+.Lno_data_vpmadd52:
+	ret
+.size	poly1305_blocks_vpmadd52,.-poly1305_blocks_vpmadd52
+___
+}
+{
+########################################################################
+# As implied by its name 4x subroutine processes 4 blocks in parallel
+# (but handles even 4*n+2 blocks lengths). It takes up to 4th key power
+# and is handled in 256-bit %ymm registers.
+
+my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17));
+my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23));
+my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52_4x,\@function,4
+.align	32
+poly1305_blocks_vpmadd52_4x:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52_4x		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+.Lblocks_vpmadd52_4x:
+	vpbroadcastq	$padbit,$PAD
+
+	vmovdqa64	.Lx_mask44(%rip),$mask44
+	mov		\$5,%eax
+	vmovdqa64	.Lx_mask42(%rip),$mask42
+	kmovw		%eax,%k1		# used in 2x path
+
+	test		%r8,%r8			# is power value impossible?
+	js		.Linit_vpmadd52		# if it is, then init R[4]
+
+	vmovq		0($ctx),%x#$H0		# load current hash value
+	vmovq		8($ctx),%x#$H1
+	vmovq		16($ctx),%x#$H2
+
+	test		\$3,$len		# is length 4*n+2?
+	jnz		.Lblocks_vpmadd52_2x_do
+
+.Lblocks_vpmadd52_4x_do:
+	vpbroadcastq	64($ctx),$R0		# load 4th power of the key
+	vpbroadcastq	96($ctx),$R1
+	vpbroadcastq	128($ctx),$R2
+	vpbroadcastq	160($ctx),$S1
+
+.Lblocks_vpmadd52_4x_key_loaded:
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	test		\$7,$len		# is len 8*n?
+	jz		.Lblocks_vpmadd52_8x
+
+	vmovdqu64	16*0($inp),$T2		# load data
+	vmovdqu64	16*2($inp),$T3
+	lea		16*4($inp),$inp
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as 3-1-2-0
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	sub		\$4,$len
+	jz		.Ltail_vpmadd52_4x
+	jmp		.Loop_vpmadd52_4x
+	ud2
+
+.align	32
+.Linit_vpmadd52:
+	vmovq		24($ctx),%x#$S1		# load key
+	vmovq		56($ctx),%x#$H2
+	vmovq		32($ctx),%x#$S2
+	vmovq		40($ctx),%x#$R0
+	vmovq		48($ctx),%x#$R1
+
+	vmovdqa		$R0,$H0
+	vmovdqa		$R1,$H1
+	vmovdqa		$H2,$R2
+
+	mov		\$2,%eax
+
+.Lmul_init_vpmadd52:
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	dec		%eax
+	jz		.Ldone_init_vpmadd52
+
+	vpunpcklqdq	$R1,$H1,$R1		# 1,2
+	vpbroadcastq	%x#$H1,%x#$H1		# 2,2
+	vpunpcklqdq	$R2,$H2,$R2
+	vpbroadcastq	%x#$H2,%x#$H2
+	vpunpcklqdq	$R0,$H0,$R0
+	vpbroadcastq	%x#$H0,%x#$H0
+
+	vpsllq		\$2,$R1,$S1		# S1 = R1*5*4
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R1,$S1,$S1
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S1,$S1
+	vpsllq		\$2,$S2,$S2
+
+	jmp		.Lmul_init_vpmadd52
+	ud2
+
+.align	32
+.Ldone_init_vpmadd52:
+	vinserti128	\$1,%x#$R1,$H1,$R1	# 1,2,3,4
+	vinserti128	\$1,%x#$R2,$H2,$R2
+	vinserti128	\$1,%x#$R0,$H0,$R0
+
+	vpermq		\$0b11011000,$R1,$R1	# 1,3,2,4
+	vpermq		\$0b11011000,$R2,$R2
+	vpermq		\$0b11011000,$R0,$R0
+
+	vpsllq		\$2,$R1,$S1		# S1 = R1*5*4
+	vpaddq		$R1,$S1,$S1
+	vpsllq		\$2,$S1,$S1
+
+	vmovq		0($ctx),%x#$H0		# load current hash value
+	vmovq		8($ctx),%x#$H1
+	vmovq		16($ctx),%x#$H2
+
+	test		\$3,$len		# is length 4*n+2?
+	jnz		.Ldone_init_vpmadd52_2x
+
+	vmovdqu64	$R0,64($ctx)		# save key powers
+	vpbroadcastq	%x#$R0,$R0		# broadcast 4th power
+	vmovdqu64	$R1,96($ctx)
+	vpbroadcastq	%x#$R1,$R1
+	vmovdqu64	$R2,128($ctx)
+	vpbroadcastq	%x#$R2,$R2
+	vmovdqu64	$S1,160($ctx)
+	vpbroadcastq	%x#$S1,$S1
+
+	jmp		.Lblocks_vpmadd52_4x_key_loaded
+	ud2
+
+.align	32
+.Ldone_init_vpmadd52_2x:
+	vmovdqu64	$R0,64($ctx)		# save key powers
+	vpsrldq		\$8,$R0,$R0		# 0-1-0-2
+	vmovdqu64	$R1,96($ctx)
+	vpsrldq		\$8,$R1,$R1
+	vmovdqu64	$R2,128($ctx)
+	vpsrldq		\$8,$R2,$R2
+	vmovdqu64	$S1,160($ctx)
+	vpsrldq		\$8,$S1,$S1
+	jmp		.Lblocks_vpmadd52_2x_key_loaded
+	ud2
+
+.align	32
+.Lblocks_vpmadd52_2x_do:
+	vmovdqu64	128+8($ctx),${R2}{%k1}{z}# load 2nd and 1st key powers
+	vmovdqu64	160+8($ctx),${S1}{%k1}{z}
+	vmovdqu64	64+8($ctx),${R0}{%k1}{z}
+	vmovdqu64	96+8($ctx),${R1}{%k1}{z}
+
+.Lblocks_vpmadd52_2x_key_loaded:
+	vmovdqu64	16*0($inp),$T2		# load data
+	vpxorq		$T3,$T3,$T3
+	lea		16*2($inp),$inp
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as x-1-x-0
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	jmp		.Ltail_vpmadd52_2x
+	ud2
+
+.align	32
+.Loop_vpmadd52_4x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	 vmovdqu64	16*0($inp),$T2		# load data
+	 vmovdqu64	16*2($inp),$T3
+	 lea		16*4($inp),$inp
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	 vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	 vpunpckhqdq	$T3,$T2,$T3
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction (interleaved with data splat)
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	 vpsrlq		\$24,$T3,$T2
+	 vporq		$PAD,$T2,$T2
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	 vpandq		$mask44,$T1,$T0
+	 vpsrlq		\$44,$T1,$T1
+	 vpsllq		\$20,$T3,$T3
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	  vpaddq	$T2,$H2,$H2		# accumulate input
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	 vporq		$T3,$T1,$T1
+	 vpandq		$mask44,$T1,$T1
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	sub		\$4,$len		# len-=64
+	jnz		.Loop_vpmadd52_4x
+
+.Ltail_vpmadd52_4x:
+	vmovdqu64	128($ctx),$R2		# load all key powers
+	vmovdqu64	160($ctx),$S1
+	vmovdqu64	64($ctx),$R0
+	vmovdqu64	96($ctx),$R1
+
+.Ltail_vpmadd52_2x:
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	kmovw		%eax,%k1
+	vpsrldq		\$8,$D0lo,$T0
+	vpsrldq		\$8,$D0hi,$H0
+	vpsrldq		\$8,$D1lo,$T1
+	vpsrldq		\$8,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpsrldq		\$8,$D2lo,$T2
+	vpsrldq		\$8,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vpermq		\$0x2,$D0lo,$T0
+	 vpermq		\$0x2,$D0hi,$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vpermq		\$0x2,$D1lo,$T1
+	vpermq		\$0x2,$D1hi,$H1
+	vpaddq		$T0,$D0lo,${D0lo}{%k1}{z}
+	vpaddq		$H0,$D0hi,${D0hi}{%k1}{z}
+	vpermq		\$0x2,$D2lo,$T2
+	vpermq		\$0x2,$D2hi,$H2
+	vpaddq		$T1,$D1lo,${D1lo}{%k1}{z}
+	vpaddq		$H1,$D1hi,${D1hi}{%k1}{z}
+	vpaddq		$T2,$D2lo,${D2lo}{%k1}{z}
+	vpaddq		$H2,$D2hi,${D2hi}{%k1}{z}
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+						# at this point $len is
+						# either 4*n+2 or 0...
+	sub		\$2,$len		# len-=32
+	ja		.Lblocks_vpmadd52_4x_do
+
+	vmovq		%x#$H0,0($ctx)
+	vmovq		%x#$H1,8($ctx)
+	vmovq		%x#$H2,16($ctx)
+	vzeroall
+
+.Lno_data_vpmadd52_4x:
+	ret
+.size	poly1305_blocks_vpmadd52_4x,.-poly1305_blocks_vpmadd52_4x
+___
+}
+{
+########################################################################
+# As implied by its name 8x subroutine processes 8 blocks in parallel...
+# This is intermediate version, as it's used only in cases when input
+# length is either 8*n, 8*n+1 or 8*n+2...
+
+my ($H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2) = map("%ymm$_",(0..5,16,17));
+my ($D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi) = map("%ymm$_",(18..23));
+my ($T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD) = map("%ymm$_",(24..31));
+my ($RR0,$RR1,$RR2,$SS1,$SS2) = map("%ymm$_",(6..10));
+
+$code.=<<___;
+.type	poly1305_blocks_vpmadd52_8x,\@function,4
+.align	32
+poly1305_blocks_vpmadd52_8x:
+	shr	\$4,$len
+	jz	.Lno_data_vpmadd52_8x		# too short
+
+	shl	\$40,$padbit
+	mov	64($ctx),%r8			# peek on power of the key
+
+	vmovdqa64	.Lx_mask44(%rip),$mask44
+	vmovdqa64	.Lx_mask42(%rip),$mask42
+
+	test	%r8,%r8				# is power value impossible?
+	js	.Linit_vpmadd52			# if it is, then init R[4]
+
+	vmovq	0($ctx),%x#$H0			# load current hash value
+	vmovq	8($ctx),%x#$H1
+	vmovq	16($ctx),%x#$H2
+
+.Lblocks_vpmadd52_8x:
+	################################################################
+	# fist we calculate more key powers
+
+	vmovdqu64	128($ctx),$R2		# load 1-3-2-4 powers
+	vmovdqu64	160($ctx),$S1
+	vmovdqu64	64($ctx),$R0
+	vmovdqu64	96($ctx),$R1
+
+	vpsllq		\$2,$R2,$S2		# S2 = R2*5*4
+	vpaddq		$R2,$S2,$S2
+	vpsllq		\$2,$S2,$S2
+
+	vpbroadcastq	%x#$R2,$RR2		# broadcast 4th power
+	vpbroadcastq	%x#$R0,$RR0
+	vpbroadcastq	%x#$R1,$RR1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$RR2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$RR2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$RR2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$RR2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$RR2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$RR2,$R0,$D2hi
+
+	vpmadd52luq	$RR0,$R0,$D0lo
+	vpmadd52huq	$RR0,$R0,$D0hi
+	vpmadd52luq	$RR0,$R1,$D1lo
+	vpmadd52huq	$RR0,$R1,$D1hi
+	vpmadd52luq	$RR0,$R2,$D2lo
+	vpmadd52huq	$RR0,$R2,$D2hi
+
+	vpmadd52luq	$RR1,$S2,$D0lo
+	vpmadd52huq	$RR1,$S2,$D0hi
+	vpmadd52luq	$RR1,$R0,$D1lo
+	vpmadd52huq	$RR1,$R0,$D1hi
+	vpmadd52luq	$RR1,$R1,$D2lo
+	vpmadd52huq	$RR1,$R1,$D2hi
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$RR0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$RR1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$RR2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$RR0,$RR0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$RR0,$RR0
+
+	vpsrlq		\$44,$RR0,$tmp		# additional step
+	vpandq		$mask44,$RR0,$RR0
+
+	vpaddq		$tmp,$RR1,$RR1
+
+	################################################################
+	# At this point Rx holds 1324 powers, RRx - 5768, and the goal
+	# is 15263748, which reflects how data is loaded...
+
+	vpunpcklqdq	$R2,$RR2,$T2		# 3748
+	vpunpckhqdq	$R2,$RR2,$R2		# 1526
+	vpunpcklqdq	$R0,$RR0,$T0
+	vpunpckhqdq	$R0,$RR0,$R0
+	vpunpcklqdq	$R1,$RR1,$T1
+	vpunpckhqdq	$R1,$RR1,$R1
+___
+######## switch to %zmm
+map(s/%y/%z/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2);
+map(s/%y/%z/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi);
+map(s/%y/%z/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD);
+map(s/%y/%z/, $RR0,$RR1,$RR2,$SS1,$SS2);
+
+$code.=<<___;
+	vshufi64x2	\$0x44,$R2,$T2,$RR2	# 15263748
+	vshufi64x2	\$0x44,$R0,$T0,$RR0
+	vshufi64x2	\$0x44,$R1,$T1,$RR1
+
+	vmovdqu64	16*0($inp),$T2		# load data
+	vmovdqu64	16*4($inp),$T3
+	lea		16*8($inp),$inp
+
+	vpsllq		\$2,$RR2,$SS2		# S2 = R2*5*4
+	vpsllq		\$2,$RR1,$SS1		# S1 = R1*5*4
+	vpaddq		$RR2,$SS2,$SS2
+	vpaddq		$RR1,$SS1,$SS1
+	vpsllq		\$2,$SS2,$SS2
+	vpsllq		\$2,$SS1,$SS1
+
+	vpbroadcastq	$padbit,$PAD
+	vpbroadcastq	%x#$mask44,$mask44
+	vpbroadcastq	%x#$mask42,$mask42
+
+	vpbroadcastq	%x#$SS1,$S1		# broadcast 8th power
+	vpbroadcastq	%x#$SS2,$S2
+	vpbroadcastq	%x#$RR0,$R0
+	vpbroadcastq	%x#$RR1,$R1
+	vpbroadcastq	%x#$RR2,$R2
+
+	vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	vpunpckhqdq	$T3,$T2,$T3
+
+	# at this point 64-bit lanes are ordered as 73625140
+
+	vpsrlq		\$24,$T3,$T2		# splat the data
+	vporq		$PAD,$T2,$T2
+	 vpaddq		$T2,$H2,$H2		# accumulate input
+	vpandq		$mask44,$T1,$T0
+	vpsrlq		\$44,$T1,$T1
+	vpsllq		\$20,$T3,$T3
+	vporq		$T3,$T1,$T1
+	vpandq		$mask44,$T1,$T1
+
+	sub		\$8,$len
+	jz		.Ltail_vpmadd52_8x
+	jmp		.Loop_vpmadd52_8x
+
+.align	32
+.Loop_vpmadd52_8x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$S1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$S1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$S2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$S2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$R0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$R0,$D2hi
+
+	 vmovdqu64	16*0($inp),$T2		# load data
+	 vmovdqu64	16*4($inp),$T3
+	 lea		16*8($inp),$inp
+	vpmadd52luq	$H0,$R0,$D0lo
+	vpmadd52huq	$H0,$R0,$D0hi
+	vpmadd52luq	$H0,$R1,$D1lo
+	vpmadd52huq	$H0,$R1,$D1hi
+	vpmadd52luq	$H0,$R2,$D2lo
+	vpmadd52huq	$H0,$R2,$D2hi
+
+	 vpunpcklqdq	$T3,$T2,$T1		# transpose data
+	 vpunpckhqdq	$T3,$T2,$T3
+	vpmadd52luq	$H1,$S2,$D0lo
+	vpmadd52huq	$H1,$S2,$D0hi
+	vpmadd52luq	$H1,$R0,$D1lo
+	vpmadd52huq	$H1,$R0,$D1hi
+	vpmadd52luq	$H1,$R1,$D2lo
+	vpmadd52huq	$H1,$R1,$D2hi
+
+	################################################################
+	# partial reduction (interleaved with data splat)
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	 vpsrlq		\$24,$T3,$T2
+	 vporq		$PAD,$T2,$T2
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	 vpandq		$mask44,$T1,$T0
+	 vpsrlq		\$44,$T1,$T1
+	 vpsllq		\$20,$T3,$T3
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	  vpaddq	$T2,$H2,$H2		# accumulate input
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	 vporq		$T3,$T1,$T1
+	 vpandq		$mask44,$T1,$T1
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	sub		\$8,$len		# len-=128
+	jnz		.Loop_vpmadd52_8x
+
+.Ltail_vpmadd52_8x:
+	#vpaddq		$T2,$H2,$H2		# accumulate input
+	vpaddq		$T0,$H0,$H0
+	vpaddq		$T1,$H1,$H1
+
+	vpxorq		$D0lo,$D0lo,$D0lo
+	vpmadd52luq	$H2,$SS1,$D0lo
+	vpxorq		$D0hi,$D0hi,$D0hi
+	vpmadd52huq	$H2,$SS1,$D0hi
+	vpxorq		$D1lo,$D1lo,$D1lo
+	vpmadd52luq	$H2,$SS2,$D1lo
+	vpxorq		$D1hi,$D1hi,$D1hi
+	vpmadd52huq	$H2,$SS2,$D1hi
+	vpxorq		$D2lo,$D2lo,$D2lo
+	vpmadd52luq	$H2,$RR0,$D2lo
+	vpxorq		$D2hi,$D2hi,$D2hi
+	vpmadd52huq	$H2,$RR0,$D2hi
+
+	vpmadd52luq	$H0,$RR0,$D0lo
+	vpmadd52huq	$H0,$RR0,$D0hi
+	vpmadd52luq	$H0,$RR1,$D1lo
+	vpmadd52huq	$H0,$RR1,$D1hi
+	vpmadd52luq	$H0,$RR2,$D2lo
+	vpmadd52huq	$H0,$RR2,$D2hi
+
+	vpmadd52luq	$H1,$SS2,$D0lo
+	vpmadd52huq	$H1,$SS2,$D0hi
+	vpmadd52luq	$H1,$RR0,$D1lo
+	vpmadd52huq	$H1,$RR0,$D1hi
+	vpmadd52luq	$H1,$RR1,$D2lo
+	vpmadd52huq	$H1,$RR1,$D2hi
+
+	################################################################
+	# horizontal addition
+
+	mov		\$1,%eax
+	kmovw		%eax,%k1
+	vpsrldq		\$8,$D0lo,$T0
+	vpsrldq		\$8,$D0hi,$H0
+	vpsrldq		\$8,$D1lo,$T1
+	vpsrldq		\$8,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpsrldq		\$8,$D2lo,$T2
+	vpsrldq		\$8,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vpermq		\$0x2,$D0lo,$T0
+	 vpermq		\$0x2,$D0hi,$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vpermq		\$0x2,$D1lo,$T1
+	vpermq		\$0x2,$D1hi,$H1
+	vpaddq		$T0,$D0lo,$D0lo
+	vpaddq		$H0,$D0hi,$D0hi
+	vpermq		\$0x2,$D2lo,$T2
+	vpermq		\$0x2,$D2hi,$H2
+	vpaddq		$T1,$D1lo,$D1lo
+	vpaddq		$H1,$D1hi,$D1hi
+	 vextracti64x4	\$1,$D0lo,%y#$T0
+	 vextracti64x4	\$1,$D0hi,%y#$H0
+	vpaddq		$T2,$D2lo,$D2lo
+	vpaddq		$H2,$D2hi,$D2hi
+
+	vextracti64x4	\$1,$D1lo,%y#$T1
+	vextracti64x4	\$1,$D1hi,%y#$H1
+	vextracti64x4	\$1,$D2lo,%y#$T2
+	vextracti64x4	\$1,$D2hi,%y#$H2
+___
+######## switch back to %ymm
+map(s/%z/%y/, $H0,$H1,$H2,$R0,$R1,$R2,$S1,$S2);
+map(s/%z/%y/, $D0lo,$D0hi,$D1lo,$D1hi,$D2lo,$D2hi);
+map(s/%z/%y/, $T0,$T1,$T2,$T3,$mask44,$mask42,$tmp,$PAD);
+
+$code.=<<___;
+	vpaddq		$T0,$D0lo,${D0lo}{%k1}{z}
+	vpaddq		$H0,$D0hi,${D0hi}{%k1}{z}
+	vpaddq		$T1,$D1lo,${D1lo}{%k1}{z}
+	vpaddq		$H1,$D1hi,${D1hi}{%k1}{z}
+	vpaddq		$T2,$D2lo,${D2lo}{%k1}{z}
+	vpaddq		$H2,$D2hi,${D2hi}{%k1}{z}
+
+	################################################################
+	# partial reduction
+	vpsrlq		\$44,$D0lo,$tmp
+	vpsllq		\$8,$D0hi,$D0hi
+	vpandq		$mask44,$D0lo,$H0
+	vpaddq		$tmp,$D0hi,$D0hi
+
+	vpaddq		$D0hi,$D1lo,$D1lo
+
+	vpsrlq		\$44,$D1lo,$tmp
+	vpsllq		\$8,$D1hi,$D1hi
+	vpandq		$mask44,$D1lo,$H1
+	vpaddq		$tmp,$D1hi,$D1hi
+
+	vpaddq		$D1hi,$D2lo,$D2lo
+
+	vpsrlq		\$42,$D2lo,$tmp
+	vpsllq		\$10,$D2hi,$D2hi
+	vpandq		$mask42,$D2lo,$H2
+	vpaddq		$tmp,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+	vpsllq		\$2,$D2hi,$D2hi
+
+	vpaddq		$D2hi,$H0,$H0
+
+	vpsrlq		\$44,$H0,$tmp		# additional step
+	vpandq		$mask44,$H0,$H0
+
+	vpaddq		$tmp,$H1,$H1
+
+	################################################################
+
+	vmovq		%x#$H0,0($ctx)
+	vmovq		%x#$H1,8($ctx)
+	vmovq		%x#$H2,16($ctx)
+	vzeroall
+
+.Lno_data_vpmadd52_8x:
+	ret
+.size	poly1305_blocks_vpmadd52_8x,.-poly1305_blocks_vpmadd52_8x
+___
+}
+$code.=<<___;
+.type	poly1305_emit_base2_44,\@function,3
+.align	32
+poly1305_emit_base2_44:
+	mov	0($ctx),%r8	# load hash value
+	mov	8($ctx),%r9
+	mov	16($ctx),%r10
+
+	mov	%r9,%rax
+	shr	\$20,%r9
+	shl	\$44,%rax
+	mov	%r10,%rcx
+	shr	\$40,%r10
+	shl	\$24,%rcx
+
+	add	%rax,%r8
+	adc	%rcx,%r9
+	adc	\$0,%r10
+
+	mov	%r8,%rax
+	add	\$5,%r8		# compare to modulus
+	mov	%r9,%rcx
+	adc	\$0,%r9
+	adc	\$0,%r10
+	shr	\$2,%r10	# did 130-bit value overflow?
+	cmovnz	%r8,%rax
+	cmovnz	%r9,%rcx
+
+	add	0($nonce),%rax	# accumulate nonce
+	adc	8($nonce),%rcx
+	mov	%rax,0($mac)	# write result
+	mov	%rcx,8($mac)
+
+	ret
+.size	poly1305_emit_base2_44,.-poly1305_emit_base2_44
+___
+}	}	}
+}
+
+if (!$kernel)
+{	# chacha20-poly1305 helpers
+my ($out,$inp,$otp,$len)=$win64 ? ("%rcx","%rdx","%r8", "%r9") :  # Win64 order
+                                  ("%rdi","%rsi","%rdx","%rcx");  # Unix order
+$code.=<<___;
+.globl	xor128_encrypt_n_pad
+.type	xor128_encrypt_n_pad,\@abi-omnipotent
+.align	16
+xor128_encrypt_n_pad:
+	sub	$otp,$inp
+	sub	$otp,$out
+	mov	$len,%r10		# put len aside
+	shr	\$4,$len		# len / 16
+	jz	.Ltail_enc
+	nop
+.Loop_enc_xmm:
+	movdqu	($inp,$otp),%xmm0
+	pxor	($otp),%xmm0
+	movdqu	%xmm0,($out,$otp)
+	movdqa	%xmm0,($otp)
+	lea	16($otp),$otp
+	dec	$len
+	jnz	.Loop_enc_xmm
+
+	and	\$15,%r10		# len % 16
+	jz	.Ldone_enc
+
+.Ltail_enc:
+	mov	\$16,$len
+	sub	%r10,$len
+	xor	%eax,%eax
+.Loop_enc_byte:
+	mov	($inp,$otp),%al
+	xor	($otp),%al
+	mov	%al,($out,$otp)
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	%r10
+	jnz	.Loop_enc_byte
+
+	xor	%eax,%eax
+.Loop_enc_pad:
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	$len
+	jnz	.Loop_enc_pad
+
+.Ldone_enc:
+	mov	$otp,%rax
+	ret
+.size	xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
+
+.globl	xor128_decrypt_n_pad
+.type	xor128_decrypt_n_pad,\@abi-omnipotent
+.align	16
+xor128_decrypt_n_pad:
+	sub	$otp,$inp
+	sub	$otp,$out
+	mov	$len,%r10		# put len aside
+	shr	\$4,$len		# len / 16
+	jz	.Ltail_dec
+	nop
+.Loop_dec_xmm:
+	movdqu	($inp,$otp),%xmm0
+	movdqa	($otp),%xmm1
+	pxor	%xmm0,%xmm1
+	movdqu	%xmm1,($out,$otp)
+	movdqa	%xmm0,($otp)
+	lea	16($otp),$otp
+	dec	$len
+	jnz	.Loop_dec_xmm
+
+	pxor	%xmm1,%xmm1
+	and	\$15,%r10		# len % 16
+	jz	.Ldone_dec
+
+.Ltail_dec:
+	mov	\$16,$len
+	sub	%r10,$len
+	xor	%eax,%eax
+	xor	%r11d,%r11d
+.Loop_dec_byte:
+	mov	($inp,$otp),%r11b
+	mov	($otp),%al
+	xor	%r11b,%al
+	mov	%al,($out,$otp)
+	mov	%r11b,($otp)
+	lea	1($otp),$otp
+	dec	%r10
+	jnz	.Loop_dec_byte
+
+	xor	%eax,%eax
+.Loop_dec_pad:
+	mov	%al,($otp)
+	lea	1($otp),$otp
+	dec	$len
+	jnz	.Loop_dec_pad
+
+.Ldone_dec:
+	mov	$otp,%rax
+	ret
+.size	xor128_decrypt_n_pad,.-xor128_decrypt_n_pad
+___
+}
+
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+#		CONTEXT *context,DISPATCHER_CONTEXT *disp)
+if ($win64) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern	__imp_RtlVirtualUnwind
+.type	se_handler,\@abi-omnipotent
+.align	16
+se_handler:
+	push	%rsi
+	push	%rdi
+	push	%rbx
+	push	%rbp
+	push	%r12
+	push	%r13
+	push	%r14
+	push	%r15
+	pushfq
+	sub	\$64,%rsp
+
+	mov	120($context),%rax	# pull context->Rax
+	mov	248($context),%rbx	# pull context->Rip
+
+	mov	8($disp),%rsi		# disp->ImageBase
+	mov	56($disp),%r11		# disp->HandlerData
+
+	mov	0(%r11),%r10d		# HandlerData[0]
+	lea	(%rsi,%r10),%r10	# prologue label
+	cmp	%r10,%rbx		# context->Rip<.Lprologue
+	jb	.Lcommon_seh_tail
+
+	mov	152($context),%rax	# pull context->Rsp
+
+	mov	4(%r11),%r10d		# HandlerData[1]
+	lea	(%rsi,%r10),%r10	# epilogue label
+	cmp	%r10,%rbx		# context->Rip>=.Lepilogue
+	jae	.Lcommon_seh_tail
+
+	lea	48(%rax),%rax
+
+	mov	-8(%rax),%rbx
+	mov	-16(%rax),%rbp
+	mov	-24(%rax),%r12
+	mov	-32(%rax),%r13
+	mov	-40(%rax),%r14
+	mov	-48(%rax),%r15
+	mov	%rbx,144($context)	# restore context->Rbx
+	mov	%rbp,160($context)	# restore context->Rbp
+	mov	%r12,216($context)	# restore context->R12
+	mov	%r13,224($context)	# restore context->R13
+	mov	%r14,232($context)	# restore context->R14
+	mov	%r15,240($context)	# restore context->R14
+
+	jmp	.Lcommon_seh_tail
+.size	se_handler,.-se_handler
+
+.type	avx_handler,\@abi-omnipotent
+.align	16
+avx_handler:
+	push	%rsi
+	push	%rdi
+	push	%rbx
+	push	%rbp
+	push	%r12
+	push	%r13
+	push	%r14
+	push	%r15
+	pushfq
+	sub	\$64,%rsp
+
+	mov	120($context),%rax	# pull context->Rax
+	mov	248($context),%rbx	# pull context->Rip
+
+	mov	8($disp),%rsi		# disp->ImageBase
+	mov	56($disp),%r11		# disp->HandlerData
+
+	mov	0(%r11),%r10d		# HandlerData[0]
+	lea	(%rsi,%r10),%r10	# prologue label
+	cmp	%r10,%rbx		# context->Rip<prologue label
+	jb	.Lcommon_seh_tail
+
+	mov	152($context),%rax	# pull context->Rsp
+
+	mov	4(%r11),%r10d		# HandlerData[1]
+	lea	(%rsi,%r10),%r10	# epilogue label
+	cmp	%r10,%rbx		# context->Rip>=epilogue label
+	jae	.Lcommon_seh_tail
+
+	mov	208($context),%rax	# pull context->R11
+
+	lea	0x50(%rax),%rsi
+	lea	0xf8(%rax),%rax
+	lea	512($context),%rdi	# &context.Xmm6
+	mov	\$20,%ecx
+	.long	0xa548f3fc		# cld; rep movsq
+
+.Lcommon_seh_tail:
+	mov	8(%rax),%rdi
+	mov	16(%rax),%rsi
+	mov	%rax,152($context)	# restore context->Rsp
+	mov	%rsi,168($context)	# restore context->Rsi
+	mov	%rdi,176($context)	# restore context->Rdi
+
+	mov	40($disp),%rdi		# disp->ContextRecord
+	mov	$context,%rsi		# context
+	mov	\$154,%ecx		# sizeof(CONTEXT)
+	.long	0xa548f3fc		# cld; rep movsq
+
+	mov	$disp,%rsi
+	xor	%ecx,%ecx		# arg1, UNW_FLAG_NHANDLER
+	mov	8(%rsi),%rdx		# arg2, disp->ImageBase
+	mov	0(%rsi),%r8		# arg3, disp->ControlPc
+	mov	16(%rsi),%r9		# arg4, disp->FunctionEntry
+	mov	40(%rsi),%r10		# disp->ContextRecord
+	lea	56(%rsi),%r11		# &disp->HandlerData
+	lea	24(%rsi),%r12		# &disp->EstablisherFrame
+	mov	%r10,32(%rsp)		# arg5
+	mov	%r11,40(%rsp)		# arg6
+	mov	%r12,48(%rsp)		# arg7
+	mov	%rcx,56(%rsp)		# arg8, (NULL)
+	call	*__imp_RtlVirtualUnwind(%rip)
+
+	mov	\$1,%eax		# ExceptionContinueSearch
+	add	\$64,%rsp
+	popfq
+	pop	%r15
+	pop	%r14
+	pop	%r13
+	pop	%r12
+	pop	%rbp
+	pop	%rbx
+	pop	%rdi
+	pop	%rsi
+	ret
+.size	avx_handler,.-avx_handler
+
+.section	.pdata
+.align	4
+	.rva	.LSEH_begin_poly1305_init_x86_64
+	.rva	.LSEH_end_poly1305_init_x86_64
+	.rva	.LSEH_info_poly1305_init_x86_64
+
+	.rva	.LSEH_begin_poly1305_blocks_x86_64
+	.rva	.LSEH_end_poly1305_blocks_x86_64
+	.rva	.LSEH_info_poly1305_blocks_x86_64
+
+	.rva	.LSEH_begin_poly1305_emit_x86_64
+	.rva	.LSEH_end_poly1305_emit_x86_64
+	.rva	.LSEH_info_poly1305_emit_x86_64
+___
+$code.=<<___ if ($avx);
+	.rva	.LSEH_begin_poly1305_blocks_avx
+	.rva	.Lbase2_64_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_1
+
+	.rva	.Lbase2_64_avx
+	.rva	.Leven_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_2
+
+	.rva	.Leven_avx
+	.rva	.LSEH_end_poly1305_blocks_avx
+	.rva	.LSEH_info_poly1305_blocks_avx_3
+
+	.rva	.LSEH_begin_poly1305_emit_avx
+	.rva	.LSEH_end_poly1305_emit_avx
+	.rva	.LSEH_info_poly1305_emit_avx
+___
+$code.=<<___ if ($avx>1);
+	.rva	.LSEH_begin_poly1305_blocks_avx2
+	.rva	.Lbase2_64_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_1
+
+	.rva	.Lbase2_64_avx2
+	.rva	.Leven_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_2
+
+	.rva	.Leven_avx2
+	.rva	.LSEH_end_poly1305_blocks_avx2
+	.rva	.LSEH_info_poly1305_blocks_avx2_3
+___
+$code.=<<___ if ($avx>2);
+	.rva	.LSEH_begin_poly1305_blocks_avx512
+	.rva	.LSEH_end_poly1305_blocks_avx512
+	.rva	.LSEH_info_poly1305_blocks_avx512
+___
+$code.=<<___;
+.section	.xdata
+.align	8
+.LSEH_info_poly1305_init_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_init_x86_64,.LSEH_begin_poly1305_init_x86_64
+
+.LSEH_info_poly1305_blocks_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_body,.Lblocks_epilogue
+
+.LSEH_info_poly1305_emit_x86_64:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_emit_x86_64,.LSEH_begin_poly1305_emit_x86_64
+___
+$code.=<<___ if ($avx);
+.LSEH_info_poly1305_blocks_avx_1:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_avx_body,.Lblocks_avx_epilogue		# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx_2:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lbase2_64_avx_body,.Lbase2_64_avx_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx_3:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx_body,.Ldo_avx_epilogue			# HandlerData[]
+
+.LSEH_info_poly1305_emit_avx:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.LSEH_begin_poly1305_emit_avx,.LSEH_begin_poly1305_emit_avx
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_poly1305_blocks_avx2_1:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lblocks_avx2_body,.Lblocks_avx2_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx2_2:
+	.byte	9,0,0,0
+	.rva	se_handler
+	.rva	.Lbase2_64_avx2_body,.Lbase2_64_avx2_epilogue	# HandlerData[]
+
+.LSEH_info_poly1305_blocks_avx2_3:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx2_body,.Ldo_avx2_epilogue		# HandlerData[]
+___
+$code.=<<___ if ($avx>2);
+.LSEH_info_poly1305_blocks_avx512:
+	.byte	9,0,0,0
+	.rva	avx_handler
+	.rva	.Ldo_avx512_body,.Ldo_avx512_epilogue		# HandlerData[]
+___
+}
+
+open SELF,$0;
+while(<SELF>) {
+	next if (/^#!/);
+	last if (!s/^#/\/\// and !/^$/);
+	print;
+}
+close SELF;
+
+foreach (split('\n',$code)) {
+	s/\`([^\`]*)\`/eval($1)/ge;
+	s/%r([a-z]+)#d/%e$1/g;
+	s/%r([0-9]+)#d/%r$1d/g;
+	s/%x#%[yz]/%x/g or s/%y#%z/%y/g or s/%z#%[yz]/%z/g;
+
+	if ($kernel) {
+		s/(^\.type.*),[0-9]+$/\1/;
+		s/(^\.type.*),\@abi-omnipotent+$/\1,\@function/;
+		next if /^\.cfi.*/;
+	}
+
+	print $_,"\n";
+}
+close STDOUT;
diff --git a/arch/x86/crypto/poly1305_glue.c b/arch/x86/crypto/poly1305_glue.c
index 4a1c05d..7c712f8 100644
--- a/arch/x86/crypto/poly1305_glue.c
+++ b/arch/x86/crypto/poly1305_glue.c
@@ -1,131 +1,175 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
+// SPDX-License-Identifier: GPL-2.0 OR MIT
 /*
- * Poly1305 authenticator algorithm, RFC7539, SIMD glue code
- *
- * Copyright (C) 2015 Martin Willi
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
  */
 
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/internal/simd.h>
-#include <crypto/poly1305.h>
 #include <linux/crypto.h>
+#include <linux/jump_label.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
+#include <asm/intel-family.h>
 #include <asm/simd.h>
 
-struct poly1305_simd_desc_ctx {
-	struct poly1305_desc_ctx base;
-	/* derived key u set? */
-	bool uset;
-#ifdef CONFIG_AS_AVX2
-	/* derived keys r^3, r^4 set? */
-	bool wset;
-#endif
-	/* derived Poly1305 key r^2 */
-	u32 u[5];
-	/* ... silently appended r^3 and r^4 when using AVX2 */
+asmlinkage void poly1305_init_x86_64(void *ctx,
+				     const u8 key[POLY1305_BLOCK_SIZE]);
+asmlinkage void poly1305_blocks_x86_64(void *ctx, const u8 *inp,
+				       const size_t len, const u32 padbit);
+asmlinkage void poly1305_emit_x86_64(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+				     const u32 nonce[4]);
+asmlinkage void poly1305_emit_avx(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+				  const u32 nonce[4]);
+asmlinkage void poly1305_blocks_avx(void *ctx, const u8 *inp, const size_t len,
+				    const u32 padbit);
+asmlinkage void poly1305_blocks_avx2(void *ctx, const u8 *inp, const size_t len,
+				     const u32 padbit);
+asmlinkage void poly1305_blocks_avx512(void *ctx, const u8 *inp,
+				       const size_t len, const u32 padbit);
+
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx2);
+static __ro_after_init DEFINE_STATIC_KEY_FALSE(poly1305_use_avx512);
+
+struct poly1305_arch_internal {
+	union {
+		struct {
+			u32 h[5];
+			u32 is_base2_26;
+		};
+		u64 hs[3];
+	};
+	u64 r[2];
+	u64 pad;
+	struct { u32 r2, r1, r4, r3; } rn[9];
 };
 
-asmlinkage void poly1305_block_sse2(u32 *h, const u8 *src,
-				    const u32 *r, unsigned int blocks);
-asmlinkage void poly1305_2block_sse2(u32 *h, const u8 *src, const u32 *r,
-				     unsigned int blocks, const u32 *u);
-#ifdef CONFIG_AS_AVX2
-asmlinkage void poly1305_4block_avx2(u32 *h, const u8 *src, const u32 *r,
-				     unsigned int blocks, const u32 *u);
-static bool poly1305_use_avx2;
-#endif
-
-static int poly1305_simd_init(struct shash_desc *desc)
+/* The AVX code uses base 2^26, while the scalar code uses base 2^64. If we hit
+ * the unfortunate situation of using AVX and then having to go back to scalar
+ * -- because the user is silly and has called the update function from two
+ * separate contexts -- then we need to convert back to the original base before
+ * proceeding. It is possible to reason that the initial reduction below is
+ * sufficient given the implementation invariants. However, for an avoidance of
+ * doubt and because this is not performance critical, we do the full reduction
+ * anyway. Z3 proof of below function: https://xn--4db.cc/ltPtHCKN/py
+ */
+static void convert_to_base2_64(void *ctx)
 {
-	struct poly1305_simd_desc_ctx *sctx = shash_desc_ctx(desc);
+	struct poly1305_arch_internal *state = ctx;
+	u32 cy;
 
-	sctx->uset = false;
-#ifdef CONFIG_AS_AVX2
-	sctx->wset = false;
-#endif
+	if (!state->is_base2_26)
+		return;
 
-	return crypto_poly1305_init(desc);
+	cy = state->h[0] >> 26; state->h[0] &= 0x3ffffff; state->h[1] += cy;
+	cy = state->h[1] >> 26; state->h[1] &= 0x3ffffff; state->h[2] += cy;
+	cy = state->h[2] >> 26; state->h[2] &= 0x3ffffff; state->h[3] += cy;
+	cy = state->h[3] >> 26; state->h[3] &= 0x3ffffff; state->h[4] += cy;
+	state->hs[0] = ((u64)state->h[2] << 52) | ((u64)state->h[1] << 26) | state->h[0];
+	state->hs[1] = ((u64)state->h[4] << 40) | ((u64)state->h[3] << 14) | (state->h[2] >> 12);
+	state->hs[2] = state->h[4] >> 24;
+#define ULT(a, b) ((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1))
+	cy = (state->hs[2] >> 2) + (state->hs[2] & ~3ULL);
+	state->hs[2] &= 3;
+	state->hs[0] += cy;
+	state->hs[1] += (cy = ULT(state->hs[0], cy));
+	state->hs[2] += ULT(state->hs[1], cy);
+#undef ULT
+	state->is_base2_26 = 0;
 }
 
-static void poly1305_simd_mult(u32 *a, const u32 *b)
+static void poly1305_simd_init(void *ctx, const u8 key[POLY1305_BLOCK_SIZE])
 {
-	u8 m[POLY1305_BLOCK_SIZE];
-
-	memset(m, 0, sizeof(m));
-	/* The poly1305 block function adds a hi-bit to the accumulator which
-	 * we don't need for key multiplication; compensate for it. */
-	a[4] -= 1 << 24;
-	poly1305_block_sse2(a, m, b, 1);
+	poly1305_init_x86_64(ctx, key);
 }
 
-static unsigned int poly1305_simd_blocks(struct poly1305_desc_ctx *dctx,
-					 const u8 *src, unsigned int srclen)
+static void poly1305_simd_blocks(void *ctx, const u8 *inp, size_t len,
+				 const u32 padbit)
 {
-	struct poly1305_simd_desc_ctx *sctx;
-	unsigned int blocks, datalen;
+	struct poly1305_arch_internal *state = ctx;
 
-	BUILD_BUG_ON(offsetof(struct poly1305_simd_desc_ctx, base));
-	sctx = container_of(dctx, struct poly1305_simd_desc_ctx, base);
+	/* SIMD disables preemption, so relax after processing each page. */
+	BUILD_BUG_ON(SZ_4K < POLY1305_BLOCK_SIZE ||
+		     SZ_4K % POLY1305_BLOCK_SIZE);
 
+	if (!IS_ENABLED(CONFIG_AS_AVX) || !static_branch_likely(&poly1305_use_avx) ||
+	    (len < (POLY1305_BLOCK_SIZE * 18) && !state->is_base2_26) ||
+	    !crypto_simd_usable()) {
+		convert_to_base2_64(ctx);
+		poly1305_blocks_x86_64(ctx, inp, len, padbit);
+		return;
+	}
+
+	do {
+		const size_t bytes = min_t(size_t, len, SZ_4K);
+
+		kernel_fpu_begin();
+		if (IS_ENABLED(CONFIG_AS_AVX512) && static_branch_likely(&poly1305_use_avx512))
+			poly1305_blocks_avx512(ctx, inp, bytes, padbit);
+		else if (IS_ENABLED(CONFIG_AS_AVX2) && static_branch_likely(&poly1305_use_avx2))
+			poly1305_blocks_avx2(ctx, inp, bytes, padbit);
+		else
+			poly1305_blocks_avx(ctx, inp, bytes, padbit);
+		kernel_fpu_end();
+
+		len -= bytes;
+		inp += bytes;
+	} while (len);
+}
+
+static void poly1305_simd_emit(void *ctx, u8 mac[POLY1305_DIGEST_SIZE],
+			       const u32 nonce[4])
+{
+	if (!IS_ENABLED(CONFIG_AS_AVX) || !static_branch_likely(&poly1305_use_avx))
+		poly1305_emit_x86_64(ctx, mac, nonce);
+	else
+		poly1305_emit_avx(ctx, mac, nonce);
+}
+
+void poly1305_init_arch(struct poly1305_desc_ctx *dctx, const u8 key[POLY1305_KEY_SIZE])
+{
+	poly1305_simd_init(&dctx->h, key);
+	dctx->s[0] = get_unaligned_le32(&key[16]);
+	dctx->s[1] = get_unaligned_le32(&key[20]);
+	dctx->s[2] = get_unaligned_le32(&key[24]);
+	dctx->s[3] = get_unaligned_le32(&key[28]);
+	dctx->buflen = 0;
+	dctx->sset = true;
+}
+EXPORT_SYMBOL(poly1305_init_arch);
+
+static unsigned int crypto_poly1305_setdctxkey(struct poly1305_desc_ctx *dctx,
+					       const u8 *inp, unsigned int len)
+{
+	unsigned int acc = 0;
 	if (unlikely(!dctx->sset)) {
-		datalen = crypto_poly1305_setdesckey(dctx, src, srclen);
-		src += srclen - datalen;
-		srclen = datalen;
-	}
-
-#ifdef CONFIG_AS_AVX2
-	if (poly1305_use_avx2 && srclen >= POLY1305_BLOCK_SIZE * 4) {
-		if (unlikely(!sctx->wset)) {
-			if (!sctx->uset) {
-				memcpy(sctx->u, dctx->r.r, sizeof(sctx->u));
-				poly1305_simd_mult(sctx->u, dctx->r.r);
-				sctx->uset = true;
-			}
-			memcpy(sctx->u + 5, sctx->u, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u + 5, dctx->r.r);
-			memcpy(sctx->u + 10, sctx->u + 5, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u + 10, dctx->r.r);
-			sctx->wset = true;
+		if (!dctx->rset && len >= POLY1305_BLOCK_SIZE) {
+			poly1305_simd_init(&dctx->h, inp);
+			inp += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			acc += POLY1305_BLOCK_SIZE;
+			dctx->rset = 1;
 		}
-		blocks = srclen / (POLY1305_BLOCK_SIZE * 4);
-		poly1305_4block_avx2(dctx->h.h, src, dctx->r.r, blocks,
-				     sctx->u);
-		src += POLY1305_BLOCK_SIZE * 4 * blocks;
-		srclen -= POLY1305_BLOCK_SIZE * 4 * blocks;
-	}
-#endif
-	if (likely(srclen >= POLY1305_BLOCK_SIZE * 2)) {
-		if (unlikely(!sctx->uset)) {
-			memcpy(sctx->u, dctx->r.r, sizeof(sctx->u));
-			poly1305_simd_mult(sctx->u, dctx->r.r);
-			sctx->uset = true;
+		if (len >= POLY1305_BLOCK_SIZE) {
+			dctx->s[0] = get_unaligned_le32(&inp[0]);
+			dctx->s[1] = get_unaligned_le32(&inp[4]);
+			dctx->s[2] = get_unaligned_le32(&inp[8]);
+			dctx->s[3] = get_unaligned_le32(&inp[12]);
+			inp += POLY1305_BLOCK_SIZE;
+			len -= POLY1305_BLOCK_SIZE;
+			acc += POLY1305_BLOCK_SIZE;
+			dctx->sset = true;
 		}
-		blocks = srclen / (POLY1305_BLOCK_SIZE * 2);
-		poly1305_2block_sse2(dctx->h.h, src, dctx->r.r, blocks,
-				     sctx->u);
-		src += POLY1305_BLOCK_SIZE * 2 * blocks;
-		srclen -= POLY1305_BLOCK_SIZE * 2 * blocks;
 	}
-	if (srclen >= POLY1305_BLOCK_SIZE) {
-		poly1305_block_sse2(dctx->h.h, src, dctx->r.r, 1);
-		srclen -= POLY1305_BLOCK_SIZE;
-	}
-	return srclen;
+	return acc;
 }
 
-static int poly1305_simd_update(struct shash_desc *desc,
-				const u8 *src, unsigned int srclen)
+void poly1305_update_arch(struct poly1305_desc_ctx *dctx, const u8 *src,
+			  unsigned int srclen)
 {
-	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
-	unsigned int bytes;
-
-	/* kernel_fpu_begin/end is costly, use fallback for small updates */
-	if (srclen <= 288 || !crypto_simd_usable())
-		return crypto_poly1305_update(desc, src, srclen);
-
-	kernel_fpu_begin();
+	unsigned int bytes, used;
 
 	if (unlikely(dctx->buflen)) {
 		bytes = min(srclen, POLY1305_BLOCK_SIZE - dctx->buflen);
@@ -135,34 +179,76 @@
 		dctx->buflen += bytes;
 
 		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
-			poly1305_simd_blocks(dctx, dctx->buf,
-					     POLY1305_BLOCK_SIZE);
+			if (likely(!crypto_poly1305_setdctxkey(dctx, dctx->buf, POLY1305_BLOCK_SIZE)))
+				poly1305_simd_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 1);
 			dctx->buflen = 0;
 		}
 	}
 
 	if (likely(srclen >= POLY1305_BLOCK_SIZE)) {
-		bytes = poly1305_simd_blocks(dctx, src, srclen);
-		src += srclen - bytes;
-		srclen = bytes;
+		bytes = round_down(srclen, POLY1305_BLOCK_SIZE);
+		srclen -= bytes;
+		used = crypto_poly1305_setdctxkey(dctx, src, bytes);
+		if (likely(bytes - used))
+			poly1305_simd_blocks(&dctx->h, src + used, bytes - used, 1);
+		src += bytes;
 	}
 
-	kernel_fpu_end();
-
 	if (unlikely(srclen)) {
 		dctx->buflen = srclen;
 		memcpy(dctx->buf, src, srclen);
 	}
+}
+EXPORT_SYMBOL(poly1305_update_arch);
 
+void poly1305_final_arch(struct poly1305_desc_ctx *dctx, u8 *dst)
+{
+	if (unlikely(dctx->buflen)) {
+		dctx->buf[dctx->buflen++] = 1;
+		memset(dctx->buf + dctx->buflen, 0,
+		       POLY1305_BLOCK_SIZE - dctx->buflen);
+		poly1305_simd_blocks(&dctx->h, dctx->buf, POLY1305_BLOCK_SIZE, 0);
+	}
+
+	poly1305_simd_emit(&dctx->h, dst, dctx->s);
+	*dctx = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL(poly1305_final_arch);
+
+static int crypto_poly1305_init(struct shash_desc *desc)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	*dctx = (struct poly1305_desc_ctx){};
+	return 0;
+}
+
+static int crypto_poly1305_update(struct shash_desc *desc,
+				  const u8 *src, unsigned int srclen)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	poly1305_update_arch(dctx, src, srclen);
+	return 0;
+}
+
+static int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
+{
+	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
+
+	if (unlikely(!dctx->sset))
+		return -ENOKEY;
+
+	poly1305_final_arch(dctx, dst);
 	return 0;
 }
 
 static struct shash_alg alg = {
 	.digestsize	= POLY1305_DIGEST_SIZE,
-	.init		= poly1305_simd_init,
-	.update		= poly1305_simd_update,
+	.init		= crypto_poly1305_init,
+	.update		= crypto_poly1305_update,
 	.final		= crypto_poly1305_final,
-	.descsize	= sizeof(struct poly1305_simd_desc_ctx),
+	.descsize	= sizeof(struct poly1305_desc_ctx),
 	.base		= {
 		.cra_name		= "poly1305",
 		.cra_driver_name	= "poly1305-simd",
@@ -174,30 +260,33 @@
 
 static int __init poly1305_simd_mod_init(void)
 {
-	if (!boot_cpu_has(X86_FEATURE_XMM2))
-		return -ENODEV;
-
-#ifdef CONFIG_AS_AVX2
-	poly1305_use_avx2 = boot_cpu_has(X86_FEATURE_AVX) &&
-			    boot_cpu_has(X86_FEATURE_AVX2) &&
-			    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL);
-	alg.descsize = sizeof(struct poly1305_simd_desc_ctx);
-	if (poly1305_use_avx2)
-		alg.descsize += 10 * sizeof(u32);
-#endif
-	return crypto_register_shash(&alg);
+	if (IS_ENABLED(CONFIG_AS_AVX) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL))
+		static_branch_enable(&poly1305_use_avx);
+	if (IS_ENABLED(CONFIG_AS_AVX2) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL))
+		static_branch_enable(&poly1305_use_avx2);
+	if (IS_ENABLED(CONFIG_AS_AVX512) && boot_cpu_has(X86_FEATURE_AVX) &&
+	    boot_cpu_has(X86_FEATURE_AVX2) && boot_cpu_has(X86_FEATURE_AVX512F) &&
+	    cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM | XFEATURE_MASK_AVX512, NULL) &&
+	    /* Skylake downclocks unacceptably much when using zmm, but later generations are fast. */
+	    boot_cpu_data.x86_model != INTEL_FAM6_SKYLAKE_X)
+		static_branch_enable(&poly1305_use_avx512);
+	return IS_REACHABLE(CONFIG_CRYPTO_HASH) ? crypto_register_shash(&alg) : 0;
 }
 
 static void __exit poly1305_simd_mod_exit(void)
 {
-	crypto_unregister_shash(&alg);
+	if (IS_REACHABLE(CONFIG_CRYPTO_HASH))
+		crypto_unregister_shash(&alg);
 }
 
 module_init(poly1305_simd_mod_init);
 module_exit(poly1305_simd_mod_exit);
 
 MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
 MODULE_DESCRIPTION("Poly1305 authenticator");
 MODULE_ALIAS_CRYPTO("poly1305");
 MODULE_ALIAS_CRYPTO("poly1305-simd");
diff --git a/arch/x86/crypto/sha1_avx2_x86_64_asm.S b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
index 9f712a7..7e578fa 100644
--- a/arch/x86/crypto/sha1_avx2_x86_64_asm.S
+++ b/arch/x86/crypto/sha1_avx2_x86_64_asm.S
@@ -62,11 +62,11 @@
  *Visit http://software.intel.com/en-us/articles/
  *and refer to improving-the-performance-of-the-secure-hash-algorithm-1/
  *
- *Updates 20-byte SHA-1 record in 'hash' for even number of
- *'num_blocks' consecutive 64-byte blocks
+ *Updates 20-byte SHA-1 record at start of 'state', from 'input', for
+ *even number of 'blocks' consecutive 64-byte blocks.
  *
  *extern "C" void sha1_transform_avx2(
- *	int *hash, const char* input, size_t num_blocks );
+ *	struct sha1_state *state, const u8* input, int blocks );
  */
 
 #include <linux/linkage.h>
diff --git a/arch/x86/crypto/sha1_ssse3_asm.S b/arch/x86/crypto/sha1_ssse3_asm.S
index 99c5b8c..031e271 100644
--- a/arch/x86/crypto/sha1_ssse3_asm.S
+++ b/arch/x86/crypto/sha1_ssse3_asm.S
@@ -457,9 +457,13 @@
 	movdqu	\a,\b
 .endm
 
-/* SSSE3 optimized implementation:
- *  extern "C" void sha1_transform_ssse3(u32 *digest, const char *data, u32 *ws,
- *                                       unsigned int rounds);
+/*
+ * SSSE3 optimized implementation:
+ *
+ * extern "C" void sha1_transform_ssse3(struct sha1_state *state,
+ *					const u8 *data, int blocks);
+ *
+ * Note that struct sha1_state is assumed to begin with u32 state[5].
  */
 SHA1_VECTOR_ASM     sha1_transform_ssse3
 
@@ -545,8 +549,8 @@
 
 
 /* AVX optimized implementation:
- *  extern "C" void sha1_transform_avx(u32 *digest, const char *data, u32 *ws,
- *                                     unsigned int rounds);
+ *  extern "C" void sha1_transform_avx(struct sha1_state *state,
+ *				       const u8 *data, int blocks);
  */
 SHA1_VECTOR_ASM     sha1_transform_avx
 
diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c
index 639d4c2..d70b40a 100644
--- a/arch/x86/crypto/sha1_ssse3_glue.c
+++ b/arch/x86/crypto/sha1_ssse3_glue.c
@@ -27,11 +27,8 @@
 #include <crypto/sha1_base.h>
 #include <asm/simd.h>
 
-typedef void (sha1_transform_fn)(u32 *digest, const char *data,
-				unsigned int rounds);
-
 static int sha1_update(struct shash_desc *desc, const u8 *data,
-			     unsigned int len, sha1_transform_fn *sha1_xform)
+			     unsigned int len, sha1_block_fn *sha1_xform)
 {
 	struct sha1_state *sctx = shash_desc_ctx(desc);
 
@@ -39,48 +36,47 @@
 	    (sctx->count % SHA1_BLOCK_SIZE) + len < SHA1_BLOCK_SIZE)
 		return crypto_sha1_update(desc, data, len);
 
-	/* make sure casting to sha1_block_fn() is safe */
+	/*
+	 * Make sure struct sha1_state begins directly with the SHA1
+	 * 160-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha1_base_do_update(desc, data, len,
-			    (sha1_block_fn *)sha1_xform);
+	sha1_base_do_update(desc, data, len, sha1_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha1_finup(struct shash_desc *desc, const u8 *data,
-		      unsigned int len, u8 *out, sha1_transform_fn *sha1_xform)
+		      unsigned int len, u8 *out, sha1_block_fn *sha1_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha1_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha1_base_do_update(desc, data, len,
-				    (sha1_block_fn *)sha1_xform);
-	sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_xform);
+		sha1_base_do_update(desc, data, len, sha1_xform);
+	sha1_base_do_finalize(desc, sha1_xform);
 	kernel_fpu_end();
 
 	return sha1_base_finish(desc, out);
 }
 
-asmlinkage void sha1_transform_ssse3(u32 *digest, const char *data,
-				     unsigned int rounds);
+asmlinkage void sha1_transform_ssse3(struct sha1_state *state,
+				     const u8 *data, int blocks);
 
 static int sha1_ssse3_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-			(sha1_transform_fn *) sha1_transform_ssse3);
+	return sha1_update(desc, data, len, sha1_transform_ssse3);
 }
 
 static int sha1_ssse3_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-			(sha1_transform_fn *) sha1_transform_ssse3);
+	return sha1_finup(desc, data, len, out, sha1_transform_ssse3);
 }
 
 /* Add padding and return the message digest. */
@@ -119,21 +115,19 @@
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha1_transform_avx(u32 *digest, const char *data,
-				   unsigned int rounds);
+asmlinkage void sha1_transform_avx(struct sha1_state *state,
+				   const u8 *data, int blocks);
 
 static int sha1_avx_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-			(sha1_transform_fn *) sha1_transform_avx);
+	return sha1_update(desc, data, len, sha1_transform_avx);
 }
 
 static int sha1_avx_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-			(sha1_transform_fn *) sha1_transform_avx);
+	return sha1_finup(desc, data, len, out, sha1_transform_avx);
 }
 
 static int sha1_avx_final(struct shash_desc *desc, u8 *out)
@@ -190,8 +184,8 @@
 #if defined(CONFIG_AS_AVX2) && (CONFIG_AS_AVX)
 #define SHA1_AVX2_BLOCK_OPTSIZE	4	/* optimal 4*64 bytes of SHA1 blocks */
 
-asmlinkage void sha1_transform_avx2(u32 *digest, const char *data,
-				    unsigned int rounds);
+asmlinkage void sha1_transform_avx2(struct sha1_state *state,
+				    const u8 *data, int blocks);
 
 static bool avx2_usable(void)
 {
@@ -203,28 +197,26 @@
 	return false;
 }
 
-static void sha1_apply_transform_avx2(u32 *digest, const char *data,
-				unsigned int rounds)
+static void sha1_apply_transform_avx2(struct sha1_state *state,
+				      const u8 *data, int blocks)
 {
 	/* Select the optimal transform based on data block size */
-	if (rounds >= SHA1_AVX2_BLOCK_OPTSIZE)
-		sha1_transform_avx2(digest, data, rounds);
+	if (blocks >= SHA1_AVX2_BLOCK_OPTSIZE)
+		sha1_transform_avx2(state, data, blocks);
 	else
-		sha1_transform_avx(digest, data, rounds);
+		sha1_transform_avx(state, data, blocks);
 }
 
 static int sha1_avx2_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-		(sha1_transform_fn *) sha1_apply_transform_avx2);
+	return sha1_update(desc, data, len, sha1_apply_transform_avx2);
 }
 
 static int sha1_avx2_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-		(sha1_transform_fn *) sha1_apply_transform_avx2);
+	return sha1_finup(desc, data, len, out, sha1_apply_transform_avx2);
 }
 
 static int sha1_avx2_final(struct shash_desc *desc, u8 *out)
@@ -267,21 +259,19 @@
 #endif
 
 #ifdef CONFIG_AS_SHA1_NI
-asmlinkage void sha1_ni_transform(u32 *digest, const char *data,
-				   unsigned int rounds);
+asmlinkage void sha1_ni_transform(struct sha1_state *digest, const u8 *data,
+				  int rounds);
 
 static int sha1_ni_update(struct shash_desc *desc, const u8 *data,
 			     unsigned int len)
 {
-	return sha1_update(desc, data, len,
-		(sha1_transform_fn *) sha1_ni_transform);
+	return sha1_update(desc, data, len, sha1_ni_transform);
 }
 
 static int sha1_ni_finup(struct shash_desc *desc, const u8 *data,
 			      unsigned int len, u8 *out)
 {
-	return sha1_finup(desc, data, len, out,
-		(sha1_transform_fn *) sha1_ni_transform);
+	return sha1_finup(desc, data, len, out, sha1_ni_transform);
 }
 
 static int sha1_ni_final(struct shash_desc *desc, u8 *out)
diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S
index 001bbcf..b6e037e 100644
--- a/arch/x86/crypto/sha256-avx-asm.S
+++ b/arch/x86/crypto/sha256-avx-asm.S
@@ -341,8 +341,8 @@
 .endm
 
 ########################################################################
-## void sha256_transform_avx(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_avx(state sha256_state *state, const u8 *data, int blocks)
+## arg 1 : pointer to state
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S
index 1420db1..2e6ebc9 100644
--- a/arch/x86/crypto/sha256-avx2-asm.S
+++ b/arch/x86/crypto/sha256-avx2-asm.S
@@ -520,8 +520,8 @@
 .endm
 
 ########################################################################
-## void sha256_transform_rorx(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_rorx(struct sha256_state *state, const u8 *data, int blocks)
+## arg 1 : pointer to state
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S
index c6c05ed..ab7d9f0 100644
--- a/arch/x86/crypto/sha256-ssse3-asm.S
+++ b/arch/x86/crypto/sha256-ssse3-asm.S
@@ -347,8 +347,10 @@
 .endm
 
 ########################################################################
-## void sha256_transform_ssse3(void *input_data, UINT32 digest[8], UINT64 num_blks)
-## arg 1 : pointer to digest
+## void sha256_transform_ssse3(struct sha256_state *state, const u8 *data,
+##			       int blocks);
+## arg 1 : pointer to state
+##	   (struct sha256_state is assumed to begin with u32 state[8])
 ## arg 2 : pointer to input data
 ## arg 3 : Num blocks
 ########################################################################
diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c
index f9aff31f..03ad657 100644
--- a/arch/x86/crypto/sha256_ssse3_glue.c
+++ b/arch/x86/crypto/sha256_ssse3_glue.c
@@ -41,12 +41,11 @@
 #include <linux/string.h>
 #include <asm/simd.h>
 
-asmlinkage void sha256_transform_ssse3(u32 *digest, const char *data,
-				       u64 rounds);
-typedef void (sha256_transform_fn)(u32 *digest, const char *data, u64 rounds);
+asmlinkage void sha256_transform_ssse3(struct sha256_state *state,
+				       const u8 *data, int blocks);
 
 static int _sha256_update(struct shash_desc *desc, const u8 *data,
-			  unsigned int len, sha256_transform_fn *sha256_xform)
+			  unsigned int len, sha256_block_fn *sha256_xform)
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
@@ -54,28 +53,29 @@
 	    (sctx->count % SHA256_BLOCK_SIZE) + len < SHA256_BLOCK_SIZE)
 		return crypto_sha256_update(desc, data, len);
 
-	/* make sure casting to sha256_block_fn() is safe */
+	/*
+	 * Make sure struct sha256_state begins directly with the SHA256
+	 * 256-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha256_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha256_base_do_update(desc, data, len,
-			      (sha256_block_fn *)sha256_xform);
+	sha256_base_do_update(desc, data, len, sha256_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha256_finup(struct shash_desc *desc, const u8 *data,
-	      unsigned int len, u8 *out, sha256_transform_fn *sha256_xform)
+	      unsigned int len, u8 *out, sha256_block_fn *sha256_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha256_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha256_base_do_update(desc, data, len,
-				      (sha256_block_fn *)sha256_xform);
-	sha256_base_do_finalize(desc, (sha256_block_fn *)sha256_xform);
+		sha256_base_do_update(desc, data, len, sha256_xform);
+	sha256_base_do_finalize(desc, sha256_xform);
 	kernel_fpu_end();
 
 	return sha256_base_finish(desc, out);
@@ -145,8 +145,8 @@
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha256_transform_avx(u32 *digest, const char *data,
-				     u64 rounds);
+asmlinkage void sha256_transform_avx(struct sha256_state *state,
+				     const u8 *data, int blocks);
 
 static int sha256_avx_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
@@ -227,8 +227,8 @@
 #endif
 
 #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
-asmlinkage void sha256_transform_rorx(u32 *digest, const char *data,
-				      u64 rounds);
+asmlinkage void sha256_transform_rorx(struct sha256_state *state,
+				      const u8 *data, int blocks);
 
 static int sha256_avx2_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
@@ -307,8 +307,8 @@
 #endif
 
 #ifdef CONFIG_AS_SHA256_NI
-asmlinkage void sha256_ni_transform(u32 *digest, const char *data,
-				   u64 rounds); /*unsigned int rounds);*/
+asmlinkage void sha256_ni_transform(struct sha256_state *digest,
+				    const u8 *data, int rounds);
 
 static int sha256_ni_update(struct shash_desc *desc, const u8 *data,
 			 unsigned int len)
diff --git a/arch/x86/crypto/sha512-avx-asm.S b/arch/x86/crypto/sha512-avx-asm.S
index 39235fe..8f6fe09 100644
--- a/arch/x86/crypto/sha512-avx-asm.S
+++ b/arch/x86/crypto/sha512-avx-asm.S
@@ -271,11 +271,12 @@
 .endm
 
 ########################################################################
-# void sha512_transform_avx(void* D, const void* M, u64 L)
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-# message blocks.
-# L is the message length in SHA512 blocks
+# void sha512_transform_avx(sha512_state *state, const u8 *data, int blocks)
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks
 ########################################################################
 ENTRY(sha512_transform_avx)
 	cmp $0, msglen
diff --git a/arch/x86/crypto/sha512-avx2-asm.S b/arch/x86/crypto/sha512-avx2-asm.S
index b16d560..43d4d64 100644
--- a/arch/x86/crypto/sha512-avx2-asm.S
+++ b/arch/x86/crypto/sha512-avx2-asm.S
@@ -563,11 +563,12 @@
 .endm
 
 ########################################################################
-# void sha512_transform_rorx(void* D, const void* M, uint64_t L)#
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-#   message blocks.
-# L is the message length in SHA512 blocks
+# void sha512_transform_rorx(sha512_state *state, const u8 *data, int blocks)
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks
 ########################################################################
 ENTRY(sha512_transform_rorx)
 	# Allocate Stack Space
diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S
index 66bbd90..46da903 100644
--- a/arch/x86/crypto/sha512-ssse3-asm.S
+++ b/arch/x86/crypto/sha512-ssse3-asm.S
@@ -269,11 +269,14 @@
 .endm
 
 ########################################################################
-# void sha512_transform_ssse3(void* D, const void* M, u64 L)#
-# Purpose: Updates the SHA512 digest stored at D with the message stored in M.
-# The size of the message pointed to by M must be an integer multiple of SHA512
-#   message blocks.
-# L is the message length in SHA512 blocks.
+## void sha512_transform_ssse3(struct sha512_state *state, const u8 *data,
+##			       int blocks);
+# (struct sha512_state is assumed to begin with u64 state[8])
+# Purpose: Updates the SHA512 digest stored at "state" with the message
+# stored in "data".
+# The size of the message pointed to by "data" must be an integer multiple
+# of SHA512 message blocks.
+# "blocks" is the message length in SHA512 blocks.
 ########################################################################
 ENTRY(sha512_transform_ssse3)
 
diff --git a/arch/x86/crypto/sha512_ssse3_glue.c b/arch/x86/crypto/sha512_ssse3_glue.c
index 458356a..1c444f4 100644
--- a/arch/x86/crypto/sha512_ssse3_glue.c
+++ b/arch/x86/crypto/sha512_ssse3_glue.c
@@ -39,13 +39,11 @@
 #include <crypto/sha512_base.h>
 #include <asm/simd.h>
 
-asmlinkage void sha512_transform_ssse3(u64 *digest, const char *data,
-				       u64 rounds);
-
-typedef void (sha512_transform_fn)(u64 *digest, const char *data, u64 rounds);
+asmlinkage void sha512_transform_ssse3(struct sha512_state *state,
+				       const u8 *data, int blocks);
 
 static int sha512_update(struct shash_desc *desc, const u8 *data,
-		       unsigned int len, sha512_transform_fn *sha512_xform)
+		       unsigned int len, sha512_block_fn *sha512_xform)
 {
 	struct sha512_state *sctx = shash_desc_ctx(desc);
 
@@ -53,28 +51,29 @@
 	    (sctx->count[0] % SHA512_BLOCK_SIZE) + len < SHA512_BLOCK_SIZE)
 		return crypto_sha512_update(desc, data, len);
 
-	/* make sure casting to sha512_block_fn() is safe */
+	/*
+	 * Make sure struct sha512_state begins directly with the SHA512
+	 * 512-bit internal state, as this is what the asm functions expect.
+	 */
 	BUILD_BUG_ON(offsetof(struct sha512_state, state) != 0);
 
 	kernel_fpu_begin();
-	sha512_base_do_update(desc, data, len,
-			      (sha512_block_fn *)sha512_xform);
+	sha512_base_do_update(desc, data, len, sha512_xform);
 	kernel_fpu_end();
 
 	return 0;
 }
 
 static int sha512_finup(struct shash_desc *desc, const u8 *data,
-	      unsigned int len, u8 *out, sha512_transform_fn *sha512_xform)
+	      unsigned int len, u8 *out, sha512_block_fn *sha512_xform)
 {
 	if (!crypto_simd_usable())
 		return crypto_sha512_finup(desc, data, len, out);
 
 	kernel_fpu_begin();
 	if (len)
-		sha512_base_do_update(desc, data, len,
-				      (sha512_block_fn *)sha512_xform);
-	sha512_base_do_finalize(desc, (sha512_block_fn *)sha512_xform);
+		sha512_base_do_update(desc, data, len, sha512_xform);
+	sha512_base_do_finalize(desc, sha512_xform);
 	kernel_fpu_end();
 
 	return sha512_base_finish(desc, out);
@@ -144,8 +143,8 @@
 }
 
 #ifdef CONFIG_AS_AVX
-asmlinkage void sha512_transform_avx(u64 *digest, const char *data,
-				     u64 rounds);
+asmlinkage void sha512_transform_avx(struct sha512_state *state,
+				     const u8 *data, int blocks);
 static bool avx_usable(void)
 {
 	if (!cpu_has_xfeatures(XFEATURE_MASK_SSE | XFEATURE_MASK_YMM, NULL)) {
@@ -225,8 +224,8 @@
 #endif
 
 #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX)
-asmlinkage void sha512_transform_rorx(u64 *digest, const char *data,
-				      u64 rounds);
+asmlinkage void sha512_transform_rorx(struct sha512_state *state,
+				      const u8 *data, int blocks);
 
 static int sha512_avx2_update(struct shash_desc *desc, const u8 *data,
 		       unsigned int len)
diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index 15908eb..0e2d912 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -440,3 +440,4 @@
 433	i386	fspick			sys_fspick			__ia32_sys_fspick
 434	i386	pidfd_open		sys_pidfd_open			__ia32_sys_pidfd_open
 435	i386	clone3			sys_clone3			__ia32_sys_clone3
+440	i386	process_madvise		sys_process_madvise     __ia32_sys_process_madvise
\ No newline at end of file
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index c29976e..14213fc 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -357,6 +357,7 @@
 433	common	fspick			__x64_sys_fspick
 434	common	pidfd_open		__x64_sys_pidfd_open
 435	common	clone3			__x64_sys_clone3/ptregs
+440	common	process_madvise		__x64_sys_process_madvise
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
index 0f21541..a3d4cf5 100644
--- a/arch/x86/entry/vdso/Makefile
+++ b/arch/x86/entry/vdso/Makefile
@@ -9,7 +9,6 @@
 ARCH_REL_TYPE_ABS += R_386_GLOB_DAT|R_386_JMP_SLOT|R_386_RELATIVE
 include $(srctree)/lib/vdso/Makefile
 
-KBUILD_CFLAGS += $(DISABLE_LTO)
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
 OBJECT_FILES_NON_STANDARD	:= y
@@ -82,7 +81,7 @@
 endif
 endif
 
-$(vobjs): KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
+$(vobjs): KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
 
 #
 # vDSO code runs in userspace and -pg doesn't help with profiling anyway.
@@ -146,6 +145,7 @@
 KBUILD_CFLAGS_32 := $(filter-out -mfentry,$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 := $(filter-out $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS_32))
+KBUILD_CFLAGS_32 := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS_32))
 KBUILD_CFLAGS_32 += -m32 -msoft-float -mregparm=0 -fpic
 KBUILD_CFLAGS_32 += $(call cc-option, -fno-stack-protector)
 KBUILD_CFLAGS_32 += $(call cc-option, -foptimize-sibling-calls)
diff --git a/arch/x86/events/intel/bts.c b/arch/x86/events/intel/bts.c
index 741540d..6a3b599 100644
--- a/arch/x86/events/intel/bts.c
+++ b/arch/x86/events/intel/bts.c
@@ -555,9 +555,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 b33540e..4ac466a 100644
--- a/arch/x86/events/intel/core.c
+++ b/arch/x86/events/intel/core.c
@@ -3320,8 +3320,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 dee579e..a4cc660 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/include/asm/clocksource.h b/arch/x86/include/asm/clocksource.h
index dc4cfc8..3f73dff 100644
--- a/arch/x86/include/asm/clocksource.h
+++ b/arch/x86/include/asm/clocksource.h
@@ -4,11 +4,7 @@
 #ifndef _ASM_X86_CLOCKSOURCE_H
 #define _ASM_X86_CLOCKSOURCE_H
 
-#define VCLOCK_NONE	0	/* No vDSO clock available.		*/
-#define VCLOCK_TSC	1	/* vDSO should use vread_tsc.		*/
-#define VCLOCK_PVCLOCK	2	/* vDSO should use vread_pvclock.	*/
-#define VCLOCK_HVCLOCK	3	/* vDSO should use vread_hvclock.	*/
-#define VCLOCK_MAX	3
+#include <asm/vdso/clocksource.h>
 
 struct arch_clocksource_data {
 	int vclock_mode;
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
index 22c4dfe..52e9f34 100644
--- a/arch/x86/include/asm/compat.h
+++ b/arch/x86/include/asm/compat.h
@@ -177,23 +177,6 @@
 	(!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
 #endif
 
-/*
- * A pointer passed in from user mode. This should not
- * be used for syscall parameters, just declare them
- * as pointers because the syscall entry code will have
- * appropriately converted them already.
- */
-
-static inline void __user *compat_ptr(compat_uptr_t uptr)
-{
-	return (void __user *)(unsigned long)uptr;
-}
-
-static inline compat_uptr_t ptr_to_compat(void __user *uptr)
-{
-	return (u32)(unsigned long)uptr;
-}
-
 static inline void __user *arch_compat_alloc_user_space(long len)
 {
 	compat_uptr_t sp;
diff --git a/arch/x86/include/asm/kfence.h b/arch/x86/include/asm/kfence.h
new file mode 100644
index 0000000..2d66d70
--- /dev/null
+++ b/arch/x86/include/asm/kfence.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * x86 KFENCE support.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef _ASM_X86_KFENCE_H
+#define _ASM_X86_KFENCE_H
+
+#include <linux/bug.h>
+#include <linux/kfence.h>
+
+#include <asm/pgalloc.h>
+#include <asm/pgtable.h>
+#include <asm/set_memory.h>
+#include <asm/tlbflush.h>
+
+/* Force 4K pages for __kfence_pool. */
+static inline bool arch_kfence_init_pool(void)
+{
+	unsigned long addr;
+
+	for (addr = (unsigned long)__kfence_pool; is_kfence_address((void *)addr);
+	     addr += PAGE_SIZE) {
+		unsigned int level;
+
+		if (!lookup_address(addr, &level))
+			return false;
+
+		if (level != PG_LEVEL_4K)
+			set_memory_4k(addr, 1);
+	}
+
+	return true;
+}
+
+/* Protect the given page and flush TLB. */
+static inline bool kfence_protect_page(unsigned long addr, bool protect)
+{
+	unsigned int level;
+	pte_t *pte = lookup_address(addr, &level);
+
+	if (WARN_ON(!pte || level != PG_LEVEL_4K))
+		return false;
+
+	/*
+	 * We need to avoid IPIs, as we may get KFENCE allocations or faults
+	 * with interrupts disabled. Therefore, the below is best-effort, and
+	 * does not flush TLBs on all CPUs. We can tolerate some inaccuracy;
+	 * lazy fault handling takes care of faults after the page is PRESENT.
+	 */
+
+	if (protect)
+		set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT));
+	else
+		set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT));
+
+	/* Flush this CPU's TLB. */
+	__flush_tlb_one_kernel(addr);
+	return true;
+}
+
+#endif /* _ASM_X86_KFENCE_H */
diff --git a/arch/x86/include/asm/percpu.h b/arch/x86/include/asm/percpu.h
index 2278797..a3c33b7 100644
--- a/arch/x86/include/asm/percpu.h
+++ b/arch/x86/include/asm/percpu.h
@@ -4,33 +4,15 @@
 
 #ifdef CONFIG_X86_64
 #define __percpu_seg		gs
-#define __percpu_mov_op		movq
 #else
 #define __percpu_seg		fs
-#define __percpu_mov_op		movl
 #endif
 
 #ifdef __ASSEMBLY__
 
-/*
- * PER_CPU finds an address of a per-cpu variable.
- *
- * Args:
- *    var - variable name
- *    reg - 32bit register
- *
- * The resulting address is stored in the "reg" argument.
- *
- * Example:
- *    PER_CPU(cpu_gdt_descr, %ebx)
- */
 #ifdef CONFIG_SMP
-#define PER_CPU(var, reg)						\
-	__percpu_mov_op %__percpu_seg:this_cpu_off, reg;		\
-	lea var(reg), reg
 #define PER_CPU_VAR(var)	%__percpu_seg:var
 #else /* ! SMP */
-#define PER_CPU(var, reg)	__percpu_mov_op $var, reg
 #define PER_CPU_VAR(var)	var
 #endif	/* SMP */
 
@@ -85,213 +67,108 @@
 
 /* For arch-specific code, we can use direct single-insn ops (they
  * don't give an lvalue though). */
-extern void __bad_percpu_size(void);
 
-#define percpu_to_op(qual, op, var, val)		\
-do {							\
-	typedef typeof(var) pto_T__;			\
-	if (0) {					\
-		pto_T__ pto_tmp__;			\
-		pto_tmp__ = (val);			\
-		(void)pto_tmp__;			\
-	}						\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "qi" ((pto_T__)(val)));		\
-		break;					\
-	case 2:						\
-		asm qual (op "w %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "ri" ((pto_T__)(val)));		\
-		break;					\
-	case 4:						\
-		asm qual (op "l %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "ri" ((pto_T__)(val)));		\
-		break;					\
-	case 8:						\
-		asm qual (op "q %1,"__percpu_arg(0)	\
-		    : "+m" (var)			\
-		    : "re" ((pto_T__)(val)));		\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
+#define __pcpu_type_1 u8
+#define __pcpu_type_2 u16
+#define __pcpu_type_4 u32
+#define __pcpu_type_8 u64
+
+#define __pcpu_cast_1(val) ((u8)(((unsigned long) val) & 0xff))
+#define __pcpu_cast_2(val) ((u16)(((unsigned long) val) & 0xffff))
+#define __pcpu_cast_4(val) ((u32)(((unsigned long) val) & 0xffffffff))
+#define __pcpu_cast_8(val) ((u64)(val))
+
+#define __pcpu_op1_1(op, dst) op "b " dst
+#define __pcpu_op1_2(op, dst) op "w " dst
+#define __pcpu_op1_4(op, dst) op "l " dst
+#define __pcpu_op1_8(op, dst) op "q " dst
+
+#define __pcpu_op2_1(op, src, dst) op "b " src ", " dst
+#define __pcpu_op2_2(op, src, dst) op "w " src ", " dst
+#define __pcpu_op2_4(op, src, dst) op "l " src ", " dst
+#define __pcpu_op2_8(op, src, dst) op "q " src ", " dst
+
+#define __pcpu_reg_1(mod, x) mod "q" (x)
+#define __pcpu_reg_2(mod, x) mod "r" (x)
+#define __pcpu_reg_4(mod, x) mod "r" (x)
+#define __pcpu_reg_8(mod, x) mod "r" (x)
+
+#define __pcpu_reg_imm_1(x) "qi" (x)
+#define __pcpu_reg_imm_2(x) "ri" (x)
+#define __pcpu_reg_imm_4(x) "ri" (x)
+#define __pcpu_reg_imm_8(x) "re" (x)
+
+#define percpu_to_op(size, qual, op, _var, _val)			\
+do {									\
+	__pcpu_type_##size pto_val__ = __pcpu_cast_##size(_val);	\
+	if (0) {		                                        \
+		typeof(_var) pto_tmp__;					\
+		pto_tmp__ = (_val);					\
+		(void)pto_tmp__;					\
+	}								\
+	asm qual(__pcpu_op2_##size(op, "%[val]", __percpu_arg([var]))	\
+	    : [var] "+m" (_var)						\
+	    : [val] __pcpu_reg_imm_##size(pto_val__));			\
 } while (0)
 
+#define percpu_unary_op(size, qual, op, _var)				\
+({									\
+	asm qual (__pcpu_op1_##size(op, __percpu_arg([var]))		\
+	    : [var] "+m" (_var));					\
+})
+
 /*
  * Generate a percpu add to memory instruction and optimize code
  * if one is added or subtracted.
  */
-#define percpu_add_op(qual, var, val)					\
+#define percpu_add_op(size, qual, var, val)				\
 do {									\
-	typedef typeof(var) pao_T__;					\
 	const int pao_ID__ = (__builtin_constant_p(val) &&		\
 			      ((val) == 1 || (val) == -1)) ?		\
 				(int)(val) : 0;				\
 	if (0) {							\
-		pao_T__ pao_tmp__;					\
+		typeof(var) pao_tmp__;					\
 		pao_tmp__ = (val);					\
 		(void)pao_tmp__;					\
 	}								\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incb "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decb "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addb %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "qi" ((pao_T__)(val)));			\
-		break;							\
-	case 2:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incw "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decw "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addw %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "ri" ((pao_T__)(val)));			\
-		break;							\
-	case 4:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incl "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decl "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addl %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "ri" ((pao_T__)(val)));			\
-		break;							\
-	case 8:								\
-		if (pao_ID__ == 1)					\
-			asm qual ("incq "__percpu_arg(0) : "+m" (var));	\
-		else if (pao_ID__ == -1)				\
-			asm qual ("decq "__percpu_arg(0) : "+m" (var));	\
-		else							\
-			asm qual ("addq %1, "__percpu_arg(0)		\
-			    : "+m" (var)				\
-			    : "re" ((pao_T__)(val)));			\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
+	if (pao_ID__ == 1)						\
+		percpu_unary_op(size, qual, "inc", var);		\
+	else if (pao_ID__ == -1)					\
+		percpu_unary_op(size, qual, "dec", var);		\
+	else								\
+		percpu_to_op(size, qual, "add", var, val);		\
 } while (0)
 
-#define percpu_from_op(qual, op, var)			\
-({							\
-	typeof(var) pfo_ret__;				\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b "__percpu_arg(1)",%0"	\
-		    : "=q" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 2:						\
-		asm qual (op "w "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 4:						\
-		asm qual (op "l "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	case 8:						\
-		asm qual (op "q "__percpu_arg(1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "m" (var));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
-	pfo_ret__;					\
+#define percpu_from_op(size, qual, op, _var)				\
+({									\
+	__pcpu_type_##size pfo_val__;					\
+	asm qual (__pcpu_op2_##size(op, __percpu_arg([var]), "%[val]")	\
+	    : [val] __pcpu_reg_##size("=", pfo_val__)			\
+	    : [var] "m" (_var));					\
+	(typeof(_var))(unsigned long) pfo_val__;			\
 })
 
-#define percpu_stable_op(op, var)			\
-({							\
-	typeof(var) pfo_ret__;				\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm(op "b "__percpu_arg(P1)",%0"	\
-		    : "=q" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 2:						\
-		asm(op "w "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 4:						\
-		asm(op "l "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	case 8:						\
-		asm(op "q "__percpu_arg(P1)",%0"	\
-		    : "=r" (pfo_ret__)			\
-		    : "p" (&(var)));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
-	pfo_ret__;					\
-})
-
-#define percpu_unary_op(qual, op, var)			\
-({							\
-	switch (sizeof(var)) {				\
-	case 1:						\
-		asm qual (op "b "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 2:						\
-		asm qual (op "w "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 4:						\
-		asm qual (op "l "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	case 8:						\
-		asm qual (op "q "__percpu_arg(0)	\
-		    : "+m" (var));			\
-		break;					\
-	default: __bad_percpu_size();			\
-	}						\
+#define percpu_stable_op(size, op, _var)				\
+({									\
+	__pcpu_type_##size pfo_val__;					\
+	asm(__pcpu_op2_##size(op, __percpu_arg(P[var]), "%[val]")	\
+	    : [val] __pcpu_reg_##size("=", pfo_val__)			\
+	    : [var] "p" (&(_var)));					\
+	(typeof(_var))(unsigned long) pfo_val__;			\
 })
 
 /*
  * Add return operation
  */
-#define percpu_add_return_op(qual, var, val)				\
+#define percpu_add_return_op(size, qual, _var, _val)			\
 ({									\
-	typeof(var) paro_ret__ = val;					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("xaddb %0, "__percpu_arg(1)			\
-			    : "+q" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("xaddw %0, "__percpu_arg(1)			\
-			    : "+r" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("xaddl %0, "__percpu_arg(1)			\
-			    : "+r" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("xaddq %0, "__percpu_arg(1)			\
-			    : "+re" (paro_ret__), "+m" (var)		\
-			    : : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	paro_ret__ += val;						\
-	paro_ret__;							\
+	__pcpu_type_##size paro_tmp__ = __pcpu_cast_##size(_val);	\
+	asm qual (__pcpu_op2_##size("xadd", "%[tmp]",			\
+				     __percpu_arg([var]))		\
+		  : [tmp] __pcpu_reg_##size("+", paro_tmp__),		\
+		    [var] "+m" (_var)					\
+		  : : "memory");					\
+	(typeof(_var))(unsigned long) (paro_tmp__ + _val);		\
 })
 
 /*
@@ -299,85 +176,38 @@
  * expensive due to the implied lock prefix.  The processor cannot prefetch
  * cachelines if xchg is used.
  */
-#define percpu_xchg_op(qual, var, nval)					\
+#define percpu_xchg_op(size, qual, _var, _nval)				\
 ({									\
-	typeof(var) pxo_ret__;						\
-	typeof(var) pxo_new__ = (nval);					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%al"		\
-		    "\n1:\tcmpxchgb %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "q" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%ax"		\
-		    "\n1:\tcmpxchgw %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%eax"		\
-		    "\n1:\tcmpxchgl %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("\n\tmov "__percpu_arg(1)",%%rax"		\
-		    "\n1:\tcmpxchgq %2, "__percpu_arg(1)		\
-		    "\n\tjnz 1b"					\
-			    : "=&a" (pxo_ret__), "+m" (var)		\
-			    : "r" (pxo_new__)				\
-			    : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	pxo_ret__;							\
+	__pcpu_type_##size pxo_old__;					\
+	__pcpu_type_##size pxo_new__ = __pcpu_cast_##size(_nval);	\
+	asm qual (__pcpu_op2_##size("mov", __percpu_arg([var]),		\
+				    "%[oval]")				\
+		  "\n1:\t"						\
+		  __pcpu_op2_##size("cmpxchg", "%[nval]",		\
+				    __percpu_arg([var]))		\
+		  "\n\tjnz 1b"						\
+		  : [oval] "=&a" (pxo_old__),				\
+		    [var] "+m" (_var)					\
+		  : [nval] __pcpu_reg_##size(, pxo_new__)		\
+		  : "memory");						\
+	(typeof(_var))(unsigned long) pxo_old__;			\
 })
 
 /*
  * cmpxchg has no such implied lock semantics as a result it is much
  * more efficient for cpu local operations.
  */
-#define percpu_cmpxchg_op(qual, var, oval, nval)			\
+#define percpu_cmpxchg_op(size, qual, _var, _oval, _nval)		\
 ({									\
-	typeof(var) pco_ret__;						\
-	typeof(var) pco_old__ = (oval);					\
-	typeof(var) pco_new__ = (nval);					\
-	switch (sizeof(var)) {						\
-	case 1:								\
-		asm qual ("cmpxchgb %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "q" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 2:								\
-		asm qual ("cmpxchgw %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 4:								\
-		asm qual ("cmpxchgl %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	case 8:								\
-		asm qual ("cmpxchgq %2, "__percpu_arg(1)		\
-			    : "=a" (pco_ret__), "+m" (var)		\
-			    : "r" (pco_new__), "0" (pco_old__)		\
-			    : "memory");				\
-		break;							\
-	default: __bad_percpu_size();					\
-	}								\
-	pco_ret__;							\
+	__pcpu_type_##size pco_old__ = __pcpu_cast_##size(_oval);	\
+	__pcpu_type_##size pco_new__ = __pcpu_cast_##size(_nval);	\
+	asm qual (__pcpu_op2_##size("cmpxchg", "%[nval]",		\
+				    __percpu_arg([var]))		\
+		  : [oval] "+a" (pco_old__),				\
+		    [var] "+m" (_var)					\
+		  : [nval] __pcpu_reg_##size(, pco_new__)		\
+		  : "memory");						\
+	(typeof(_var))(unsigned long) pco_old__;			\
 })
 
 /*
@@ -389,24 +219,28 @@
  * per-thread variables implemented as per-cpu variables and thus
  * stable for the duration of the respective task.
  */
-#define this_cpu_read_stable(var)	percpu_stable_op("mov", var)
+#define this_cpu_read_stable_1(pcp)	percpu_stable_op(1, "mov", pcp)
+#define this_cpu_read_stable_2(pcp)	percpu_stable_op(2, "mov", pcp)
+#define this_cpu_read_stable_4(pcp)	percpu_stable_op(4, "mov", pcp)
+#define this_cpu_read_stable_8(pcp)	percpu_stable_op(8, "mov", pcp)
+#define this_cpu_read_stable(pcp)	__pcpu_size_call_return(this_cpu_read_stable_, pcp)
 
-#define raw_cpu_read_1(pcp)		percpu_from_op(, "mov", pcp)
-#define raw_cpu_read_2(pcp)		percpu_from_op(, "mov", pcp)
-#define raw_cpu_read_4(pcp)		percpu_from_op(, "mov", pcp)
+#define raw_cpu_read_1(pcp)		percpu_from_op(1, , "mov", pcp)
+#define raw_cpu_read_2(pcp)		percpu_from_op(2, , "mov", pcp)
+#define raw_cpu_read_4(pcp)		percpu_from_op(4, , "mov", pcp)
 
-#define raw_cpu_write_1(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_write_2(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_write_4(pcp, val)	percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_add_1(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_add_2(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_add_4(pcp, val)		percpu_add_op(, (pcp), val)
-#define raw_cpu_and_1(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_and_2(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_and_4(pcp, val)		percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_or_1(pcp, val)		percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_or_2(pcp, val)		percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_or_4(pcp, val)		percpu_to_op(, "or", (pcp), val)
+#define raw_cpu_write_1(pcp, val)	percpu_to_op(1, , "mov", (pcp), val)
+#define raw_cpu_write_2(pcp, val)	percpu_to_op(2, , "mov", (pcp), val)
+#define raw_cpu_write_4(pcp, val)	percpu_to_op(4, , "mov", (pcp), val)
+#define raw_cpu_add_1(pcp, val)		percpu_add_op(1, , (pcp), val)
+#define raw_cpu_add_2(pcp, val)		percpu_add_op(2, , (pcp), val)
+#define raw_cpu_add_4(pcp, val)		percpu_add_op(4, , (pcp), val)
+#define raw_cpu_and_1(pcp, val)		percpu_to_op(1, , "and", (pcp), val)
+#define raw_cpu_and_2(pcp, val)		percpu_to_op(2, , "and", (pcp), val)
+#define raw_cpu_and_4(pcp, val)		percpu_to_op(4, , "and", (pcp), val)
+#define raw_cpu_or_1(pcp, val)		percpu_to_op(1, , "or", (pcp), val)
+#define raw_cpu_or_2(pcp, val)		percpu_to_op(2, , "or", (pcp), val)
+#define raw_cpu_or_4(pcp, val)		percpu_to_op(4, , "or", (pcp), val)
 
 /*
  * raw_cpu_xchg() can use a load-store since it is not required to be
@@ -423,38 +257,38 @@
 #define raw_cpu_xchg_2(pcp, val)	raw_percpu_xchg_op(pcp, val)
 #define raw_cpu_xchg_4(pcp, val)	raw_percpu_xchg_op(pcp, val)
 
-#define this_cpu_read_1(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_read_2(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_read_4(pcp)		percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_write_1(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_write_2(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_write_4(pcp, val)	percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_add_1(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_add_2(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_add_4(pcp, val)	percpu_add_op(volatile, (pcp), val)
-#define this_cpu_and_1(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_and_2(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_and_4(pcp, val)	percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_or_1(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_or_2(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_or_4(pcp, val)		percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_xchg_1(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_xchg_2(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_xchg_4(pcp, nval)	percpu_xchg_op(volatile, pcp, nval)
+#define this_cpu_read_1(pcp)		percpu_from_op(1, volatile, "mov", pcp)
+#define this_cpu_read_2(pcp)		percpu_from_op(2, volatile, "mov", pcp)
+#define this_cpu_read_4(pcp)		percpu_from_op(4, volatile, "mov", pcp)
+#define this_cpu_write_1(pcp, val)	percpu_to_op(1, volatile, "mov", (pcp), val)
+#define this_cpu_write_2(pcp, val)	percpu_to_op(2, volatile, "mov", (pcp), val)
+#define this_cpu_write_4(pcp, val)	percpu_to_op(4, volatile, "mov", (pcp), val)
+#define this_cpu_add_1(pcp, val)	percpu_add_op(1, volatile, (pcp), val)
+#define this_cpu_add_2(pcp, val)	percpu_add_op(2, volatile, (pcp), val)
+#define this_cpu_add_4(pcp, val)	percpu_add_op(4, volatile, (pcp), val)
+#define this_cpu_and_1(pcp, val)	percpu_to_op(1, volatile, "and", (pcp), val)
+#define this_cpu_and_2(pcp, val)	percpu_to_op(2, volatile, "and", (pcp), val)
+#define this_cpu_and_4(pcp, val)	percpu_to_op(4, volatile, "and", (pcp), val)
+#define this_cpu_or_1(pcp, val)		percpu_to_op(1, volatile, "or", (pcp), val)
+#define this_cpu_or_2(pcp, val)		percpu_to_op(2, volatile, "or", (pcp), val)
+#define this_cpu_or_4(pcp, val)		percpu_to_op(4, volatile, "or", (pcp), val)
+#define this_cpu_xchg_1(pcp, nval)	percpu_xchg_op(1, volatile, pcp, nval)
+#define this_cpu_xchg_2(pcp, nval)	percpu_xchg_op(2, volatile, pcp, nval)
+#define this_cpu_xchg_4(pcp, nval)	percpu_xchg_op(4, volatile, pcp, nval)
 
-#define raw_cpu_add_return_1(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_add_return_2(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_add_return_4(pcp, val)		percpu_add_return_op(, pcp, val)
-#define raw_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
-#define raw_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
-#define raw_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
+#define raw_cpu_add_return_1(pcp, val)		percpu_add_return_op(1, , pcp, val)
+#define raw_cpu_add_return_2(pcp, val)		percpu_add_return_op(2, , pcp, val)
+#define raw_cpu_add_return_4(pcp, val)		percpu_add_return_op(4, , pcp, val)
+#define raw_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(1, , pcp, oval, nval)
+#define raw_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(2, , pcp, oval, nval)
+#define raw_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(4, , pcp, oval, nval)
 
-#define this_cpu_add_return_1(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_add_return_2(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_add_return_4(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
-#define this_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
-#define this_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
+#define this_cpu_add_return_1(pcp, val)		percpu_add_return_op(1, volatile, pcp, val)
+#define this_cpu_add_return_2(pcp, val)		percpu_add_return_op(2, volatile, pcp, val)
+#define this_cpu_add_return_4(pcp, val)		percpu_add_return_op(4, volatile, pcp, val)
+#define this_cpu_cmpxchg_1(pcp, oval, nval)	percpu_cmpxchg_op(1, volatile, pcp, oval, nval)
+#define this_cpu_cmpxchg_2(pcp, oval, nval)	percpu_cmpxchg_op(2, volatile, pcp, oval, nval)
+#define this_cpu_cmpxchg_4(pcp, oval, nval)	percpu_cmpxchg_op(4, volatile, pcp, oval, nval)
 
 #ifdef CONFIG_X86_CMPXCHG64
 #define percpu_cmpxchg8b_double(pcp1, pcp2, o1, o2, n1, n2)		\
@@ -478,23 +312,23 @@
  * 32 bit must fall back to generic operations.
  */
 #ifdef CONFIG_X86_64
-#define raw_cpu_read_8(pcp)			percpu_from_op(, "mov", pcp)
-#define raw_cpu_write_8(pcp, val)		percpu_to_op(, "mov", (pcp), val)
-#define raw_cpu_add_8(pcp, val)			percpu_add_op(, (pcp), val)
-#define raw_cpu_and_8(pcp, val)			percpu_to_op(, "and", (pcp), val)
-#define raw_cpu_or_8(pcp, val)			percpu_to_op(, "or", (pcp), val)
-#define raw_cpu_add_return_8(pcp, val)		percpu_add_return_op(, pcp, val)
+#define raw_cpu_read_8(pcp)			percpu_from_op(8, , "mov", pcp)
+#define raw_cpu_write_8(pcp, val)		percpu_to_op(8, , "mov", (pcp), val)
+#define raw_cpu_add_8(pcp, val)			percpu_add_op(8, , (pcp), val)
+#define raw_cpu_and_8(pcp, val)			percpu_to_op(8, , "and", (pcp), val)
+#define raw_cpu_or_8(pcp, val)			percpu_to_op(8, , "or", (pcp), val)
+#define raw_cpu_add_return_8(pcp, val)		percpu_add_return_op(8, , pcp, val)
 #define raw_cpu_xchg_8(pcp, nval)		raw_percpu_xchg_op(pcp, nval)
-#define raw_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(, pcp, oval, nval)
+#define raw_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(8, , pcp, oval, nval)
 
-#define this_cpu_read_8(pcp)			percpu_from_op(volatile, "mov", pcp)
-#define this_cpu_write_8(pcp, val)		percpu_to_op(volatile, "mov", (pcp), val)
-#define this_cpu_add_8(pcp, val)		percpu_add_op(volatile, (pcp), val)
-#define this_cpu_and_8(pcp, val)		percpu_to_op(volatile, "and", (pcp), val)
-#define this_cpu_or_8(pcp, val)			percpu_to_op(volatile, "or", (pcp), val)
-#define this_cpu_add_return_8(pcp, val)		percpu_add_return_op(volatile, pcp, val)
-#define this_cpu_xchg_8(pcp, nval)		percpu_xchg_op(volatile, pcp, nval)
-#define this_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(volatile, pcp, oval, nval)
+#define this_cpu_read_8(pcp)			percpu_from_op(8, volatile, "mov", pcp)
+#define this_cpu_write_8(pcp, val)		percpu_to_op(8, volatile, "mov", (pcp), val)
+#define this_cpu_add_8(pcp, val)		percpu_add_op(8, volatile, (pcp), val)
+#define this_cpu_and_8(pcp, val)		percpu_to_op(8, volatile, "and", (pcp), val)
+#define this_cpu_or_8(pcp, val)			percpu_to_op(8, volatile, "or", (pcp), val)
+#define this_cpu_add_return_8(pcp, val)		percpu_add_return_op(8, volatile, pcp, val)
+#define this_cpu_xchg_8(pcp, nval)		percpu_xchg_op(8, volatile, pcp, nval)
+#define this_cpu_cmpxchg_8(pcp, oval, nval)	percpu_cmpxchg_op(8, volatile, pcp, oval, nval)
 
 /*
  * Pretty complex macro to generate cmpxchg16 instruction.  The instruction
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 537c0dd..f4f07ca 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -24,6 +24,7 @@
 #include <asm/special_insns.h>
 #include <asm/fpu/types.h>
 #include <asm/unwind_hints.h>
+#include <asm/vdso/processor.h>
 
 #include <linux/personality.h>
 #include <linux/cache.h>
@@ -635,17 +636,6 @@
 	return edx;
 }
 
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static __always_inline void rep_nop(void)
-{
-	asm volatile("rep; nop" ::: "memory");
-}
-
-static __always_inline void cpu_relax(void)
-{
-	rep_nop();
-}
-
 /*
  * This function forces the icache and prefetched instruction stream to
  * catch up with reality in two very specific cases:
diff --git a/arch/x86/include/asm/seccomp.h b/arch/x86/include/asm/seccomp.h
index 2bd1338..fef16e3 100644
--- a/arch/x86/include/asm/seccomp.h
+++ b/arch/x86/include/asm/seccomp.h
@@ -16,6 +16,26 @@
 #define __NR_seccomp_sigreturn_32	__NR_ia32_sigreturn
 #endif
 
+#ifdef CONFIG_X86_64
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_X86_64
+# define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"x86_64"
+# ifdef CONFIG_COMPAT
+#  define SECCOMP_ARCH_COMPAT		AUDIT_ARCH_I386
+#  define SECCOMP_ARCH_COMPAT_NR	IA32_NR_syscalls
+#  define SECCOMP_ARCH_COMPAT_NAME	"ia32"
+# endif
+/*
+ * x32 will have __X32_SYSCALL_BIT set in syscall number. We don't support
+ * caching them and they are treated as out of range syscalls, which will
+ * always pass through the BPF filter.
+ */
+#else /* !CONFIG_X86_64 */
+# define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_I386
+# define SECCOMP_ARCH_NATIVE_NR	        NR_syscalls
+# define SECCOMP_ARCH_NATIVE_NAME	"ia32"
+#endif
+
 #include <asm-generic/seccomp.h>
 
 #endif /* _ASM_X86_SECCOMP_H */
diff --git a/arch/x86/include/asm/sections.h b/arch/x86/include/asm/sections.h
index 71b32f2..9319c5c 100644
--- a/arch/x86/include/asm/sections.h
+++ b/arch/x86/include/asm/sections.h
@@ -6,7 +6,7 @@
 #include <asm/extable.h>
 
 extern char __brk_base[], __brk_limit[];
-extern struct exception_table_entry __stop___ex_table[];
+extern char __cfi_jt_start[], __cfi_jt_end[];
 extern char __end_rodata_aligned[];
 
 #if defined(CONFIG_X86_64)
diff --git a/arch/x86/include/asm/syscall_wrapper.h b/arch/x86/include/asm/syscall_wrapper.h
index e2389ce..ef3c8be 100644
--- a/arch/x86/include/asm/syscall_wrapper.h
+++ b/arch/x86/include/asm/syscall_wrapper.h
@@ -148,7 +148,11 @@
  * kernel/time/posix-stubs.c to cover this case as well.
  */
 #define COND_SYSCALL_COMPAT(name) 					\
-	cond_syscall(__ia32_compat_sys_##name);				\
+	asmlinkage __weak long __ia32_compat_sys_##name(		\
+		const struct pt_regs *__unused)				\
+	{                                                               \
+		return sys_ni_syscall();                                \
+	}								\
 	cond_syscall(__x32_compat_sys_##name)
 
 #define COMPAT_SYS_NI(name)						\
diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
index 61d93f0..a99167c 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -345,11 +345,14 @@
 
 #define __get_user_size(x, ptr, size, retval, errret)			\
 do {									\
+	unsigned char x_u8__;						\
+									\
 	retval = 0;							\
 	__chk_user_ptr(ptr);						\
 	switch (size) {							\
 	case 1:								\
-		__get_user_asm(x, ptr, retval, "b", "b", "=q", errret);	\
+		__get_user_asm(x_u8__, ptr, retval, "b", "b", "=q", errret);	\
+		(x) = x_u8__;						\
 		break;							\
 	case 2:								\
 		__get_user_asm(x, ptr, retval, "w", "w", "=r", errret);	\
diff --git a/arch/x86/include/asm/vdso/clocksource.h b/arch/x86/include/asm/vdso/clocksource.h
new file mode 100644
index 0000000..17aa179
--- /dev/null
+++ b/arch/x86/include/asm/vdso/clocksource.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __ASM_VDSO_CLOCKSOURCE_H
+#define __ASM_VDSO_CLOCKSOURCE_H
+
+#define VCLOCK_NONE	0	/* No vDSO clock available.		*/
+#define VCLOCK_TSC	1	/* vDSO should use vread_tsc.		*/
+#define VCLOCK_PVCLOCK	2	/* vDSO should use vread_pvclock.	*/
+#define VCLOCK_HVCLOCK	3	/* vDSO should use vread_hvclock.	*/
+#define VCLOCK_MAX	3
+
+#endif /* __ASM_VDSO_CLOCKSOURCE_H */
diff --git a/arch/x86/include/asm/vdso/processor.h b/arch/x86/include/asm/vdso/processor.h
new file mode 100644
index 0000000..57b1a70
--- /dev/null
+++ b/arch/x86/include/asm/vdso/processor.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __ASM_VDSO_PROCESSOR_H
+#define __ASM_VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
+static __always_inline void rep_nop(void)
+{
+	asm volatile("rep; nop" ::: "memory");
+}
+
+static __always_inline void cpu_relax(void)
+{
+	rep_nop();
+}
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __ASM_VDSO_PROCESSOR_H */
diff --git a/arch/x86/include/asm/vgtod.h b/arch/x86/include/asm/vgtod.h
index a2638c6..f3fe005 100644
--- a/arch/x86/include/asm/vgtod.h
+++ b/arch/x86/include/asm/vgtod.h
@@ -2,6 +2,11 @@
 #ifndef _ASM_X86_VGTOD_H
 #define _ASM_X86_VGTOD_H
 
+/*
+ * This check is required to prevent ARCH=um to include
+ * unwanted headers.
+ */
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
 #include <linux/compiler.h>
 #include <asm/clocksource.h>
 #include <vdso/datapage.h>
@@ -14,6 +19,7 @@
 #else
 typedef unsigned long gtod_long_t;
 #endif
+#endif /* CONFIG_GENERIC_GETTIMEOFDAY */
 
 extern int vclocks_used;
 static inline bool vclock_was_used(int vclock)
diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c
index 9d3a971..efb5ef8 100644
--- a/arch/x86/kernel/alternative.c
+++ b/arch/x86/kernel/alternative.c
@@ -625,23 +625,10 @@
  *
  * See entry_{32,64}.S for more details.
  */
-
-/*
- * We define the int3_magic() function in assembly to control the calling
- * convention such that we can 'call' it from assembly.
- */
-
-extern void int3_magic(unsigned int *ptr); /* defined in asm */
-
-asm (
-"	.pushsection	.init.text, \"ax\", @progbits\n"
-"	.type		int3_magic, @function\n"
-"int3_magic:\n"
-"	movl	$1, (%" _ASM_ARG1 ")\n"
-"	ret\n"
-"	.size		int3_magic, .-int3_magic\n"
-"	.popsection\n"
-);
+static void __init __no_sanitize_address notrace int3_magic(unsigned int *ptr)
+{
+	*ptr = 1;
+}
 
 extern __initdata unsigned long int3_selftest_ip; /* defined in asm below */
 
diff --git a/arch/x86/kernel/livepatch.c b/arch/x86/kernel/livepatch.c
index 6a68e41..35fa60d 100644
--- a/arch/x86/kernel/livepatch.c
+++ b/arch/x86/kernel/livepatch.c
@@ -24,12 +24,12 @@
 	objname = obj->name ? obj->name : "vmlinux";
 
 	/* See livepatch core code for BUILD_BUG_ON() explanation */
-	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 128);
+	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 192);
 
 	for (s = info->sechdrs; s < info->sechdrs + info->hdr.e_shnum; s++) {
 		/* Apply per-object .klp.arch sections */
 		cnt = sscanf(info->secstrings + s->sh_name,
-			     ".klp.arch.%55[^.].%127s",
+			     ".klp.arch.%55[^.].%191s",
 			     sec_objname, secname);
 		if (cnt != 2)
 			continue;
diff --git a/arch/x86/kernel/module.c b/arch/x86/kernel/module.c
index 77dabed..54f29c3 100644
--- a/arch/x86/kernel/module.c
+++ b/arch/x86/kernel/module.c
@@ -196,6 +196,10 @@
 			val -= (u64)loc;
 			*(u64 *)loc = val;
 			break;
+		case R_X86_64_8:
+			if (!strncmp(strtab + sym->st_name, "__typeid__", 10))
+				break;
+			/* fallthrough */
 		default:
 			pr_err("%s: Unknown rela relocation: %llu\n",
 			       me->name, ELF64_R_TYPE(rel[i].r_info));
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 1afe211..1f82257 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -142,16 +142,22 @@
 		__indirect_thunk_end = .;
 #endif
 
-		/* End of text section */
-		_etext = .;
+#ifdef CONFIG_CFI_CLANG
+		. = ALIGN(PAGE_SIZE);
+		__cfi_jt_start = .;
+		*(.text..L.cfi.jumptable .text..L.cfi.jumptable.*)
+		__cfi_jt_end = .;
+#endif
 	} :text = 0x9090
 
 	NOTES :text :note
 
 	EXCEPTION_TABLE(16) :text = 0x9090
 
-	/* .text should occupy whole number of pages */
+	/* End of text section, which should occupy whole number of pages */
+	_etext = .;
 	. = ALIGN(PAGE_SIZE);
+
 	X86_ALIGN_RODATA_BEGIN
 	RO_DATA(PAGE_SIZE)
 	X86_ALIGN_RODATA_END
@@ -459,3 +465,7 @@
            "kexec control code size is too big");
 #endif
 
+#ifdef CONFIG_CFI_CLANG
+. = ASSERT((__cfi_jt_end - __cfi_jt_start > 0),
+	   "CFI jump table is empty");
+#endif
diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c
index 4d75bc6..3cacb49 100644
--- a/arch/x86/mm/extable.c
+++ b/arch/x86/mm/extable.c
@@ -199,6 +199,7 @@
 	return handler == ex_handler_fault;
 }
 
+__nocfi
 int fixup_exception(struct pt_regs *regs, int trapnr, unsigned long error_code,
 		    unsigned long fault_addr)
 {
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
index c494c8c..c9a1fd1 100644
--- a/arch/x86/mm/fault.c
+++ b/arch/x86/mm/fault.c
@@ -9,6 +9,7 @@
 #include <linux/kdebug.h>		/* oops_begin/end, ...		*/
 #include <linux/extable.h>		/* search_exception_tables	*/
 #include <linux/memblock.h>		/* max_low_pfn			*/
+#include <linux/kfence.h>		/* kfence_handle_page_fault	*/
 #include <linux/kprobes.h>		/* NOKPROBE_SYMBOL, ...		*/
 #include <linux/mmiotrace.h>		/* kmmio_handler, ...		*/
 #include <linux/perf_event.h>		/* perf_sw_event		*/
@@ -826,6 +827,11 @@
 	if (IS_ENABLED(CONFIG_EFI))
 		efi_recover_from_page_fault(address);
 
+	/* Only not-present faults should be handled by KFENCE. */
+	if (!(error_code & X86_PF_PROT) &&
+	    kfence_handle_page_fault(address, error_code & X86_PF_WRITE, regs))
+		return;
+
 oops:
 	/*
 	 * Oops. The kernel tried to access some bad page. We'll have to
@@ -1309,7 +1315,7 @@
 	struct task_struct *tsk;
 	struct mm_struct *mm;
 	vm_fault_t fault, major = 0;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	tsk = current;
 	mm = tsk->mm;
@@ -1463,27 +1469,23 @@
 	fault = handle_mm_fault(vma, address, flags);
 	major |= fault & VM_FAULT_MAJOR;
 
+	/* Quick path to respond to signals */
+	if (fault_signal_pending(fault, regs)) {
+		if (!user_mode(regs))
+			no_context(regs, hw_error_code, address, SIGBUS,
+				   BUS_ADRERR);
+		return;
+	}
+
 	/*
 	 * If we need to retry the mmap_sem has already been released,
 	 * and if there is a fatal signal pending there is no guarantee
 	 * that we made any progress. Handle this case first.
 	 */
-	if (unlikely(fault & VM_FAULT_RETRY)) {
-		/* Retry at most once */
-		if (flags & FAULT_FLAG_ALLOW_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			flags |= FAULT_FLAG_TRIED;
-			if (!fatal_signal_pending(tsk))
-				goto retry;
-		}
-
-		/* User mode? Just return to handle the fatal exception */
-		if (flags & FAULT_FLAG_USER)
-			return;
-
-		/* Not returning to user mode? Handle exceptions or die: */
-		no_context(regs, hw_error_code, address, SIGBUS, BUS_ADRERR);
-		return;
+	if (unlikely((fault & VM_FAULT_RETRY) &&
+		     (flags & FAULT_FLAG_ALLOW_RETRY))) {
+		flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 	up_read(&mm->mmap_sem);
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index a37ccaf..a64199a 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -1261,7 +1261,7 @@
 void set_kernel_text_rw(void)
 {
 	unsigned long start = PFN_ALIGN(_text);
-	unsigned long end = PFN_ALIGN(__stop___ex_table);
+	unsigned long end = PFN_ALIGN(_etext);
 
 	if (!kernel_set_to_readonly)
 		return;
@@ -1280,7 +1280,7 @@
 void set_kernel_text_ro(void)
 {
 	unsigned long start = PFN_ALIGN(_text);
-	unsigned long end = PFN_ALIGN(__stop___ex_table);
+	unsigned long end = PFN_ALIGN(_etext);
 
 	if (!kernel_set_to_readonly)
 		return;
@@ -1299,7 +1299,7 @@
 	unsigned long start = PFN_ALIGN(_text);
 	unsigned long rodata_start = PFN_ALIGN(__start_rodata);
 	unsigned long end = (unsigned long) &__end_rodata_hpage_align;
-	unsigned long text_end = PFN_ALIGN(&__stop___ex_table);
+	unsigned long text_end = PFN_ALIGN(&_etext);
 	unsigned long rodata_end = PFN_ALIGN(&__end_rodata);
 	unsigned long all_end;
 
diff --git a/arch/x86/mm/pti.c b/arch/x86/mm/pti.c
index 7f21404..6b68c19 100644
--- a/arch/x86/mm/pti.c
+++ b/arch/x86/mm/pti.c
@@ -505,6 +505,15 @@
 	pti_clone_pgtable((unsigned long) __entry_text_start,
 			  (unsigned long) __irqentry_text_end,
 			  PTI_CLONE_PMD);
+
+	/*
+	 * If CFI is enabled, also map jump tables, so the entry code can
+	 * make indirect calls.
+	 */
+	if (IS_ENABLED(CONFIG_CFI_CLANG))
+		pti_clone_pgtable((unsigned long) __cfi_jt_start,
+				  (unsigned long) __cfi_jt_end,
+				  PTI_CLONE_PMD);
 }
 
 /*
@@ -574,7 +583,7 @@
 	 */
 	unsigned long start = PFN_ALIGN(_text);
 	unsigned long end_clone  = (unsigned long)__end_rodata_aligned;
-	unsigned long end_global = PFN_ALIGN((unsigned long)__stop___ex_table);
+	unsigned long end_global = PFN_ALIGN((unsigned long)_etext);
 
 	if (!pti_kernel_image_global_ok())
 		return;
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c
index 6fa42e9..234998f 100644
--- a/arch/x86/pci/mmconfig-shared.c
+++ b/arch/x86/pci/mmconfig-shared.c
@@ -425,7 +425,7 @@
 	return AE_OK;
 }
 
-static bool is_acpi_reserved(u64 start, u64 end, unsigned not_used)
+static bool is_acpi_reserved(u64 start, u64 end, enum e820_type not_used)
 {
 	struct resource mcfg_res;
 
@@ -442,7 +442,7 @@
 	return mcfg_res.flags;
 }
 
-typedef bool (*check_reserved_t)(u64 start, u64 end, unsigned type);
+typedef bool (*check_reserved_t)(u64 start, u64 end, enum e820_type type);
 
 static bool __ref is_mmconf_reserved(check_reserved_t is_reserved,
 				     struct pci_mmcfg_region *cfg,
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
index 915bb16..14863ad 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
@@ -268,6 +268,19 @@
 /* Needed by apm.c */
 void notrace restore_processor_state(void)
 {
+#ifdef __clang__
+	// The following code snippet is copied from __restore_processor_state.
+	// Its purpose is to prepare GS segment before the function is called.
+	// Since the function is compiled with SCS on, it will use GS at its
+	// entry.
+	// TODO: Hack to be removed later when compiler bug is fixed.
+#ifdef CONFIG_X86_64
+	wrmsrl(MSR_GS_BASE, saved_context.kernelmode_gs_base);
+#else
+	loadsegment(fs, __KERNEL_PERCPU);
+	loadsegment(gs, __KERNEL_STACK_CANARY);
+#endif
+#endif
 	__restore_processor_state(&saved_context);
 }
 #ifdef CONFIG_X86_32
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
index 1c3a196..0b1b89e 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -48,6 +48,7 @@
 	"^(xen_irq_disable_direct_reloc$|"
 	"xen_save_fl_direct_reloc$|"
 	"VDSO|"
+	"__typeid__|"
 	"__crc_)",
 
 /*
@@ -78,6 +79,8 @@
 	"__end_rodata_hpage_align|"
 #endif
 	"__vvar_page|"
+	"_etext|"
+	"__end_of_kernel_reserve|"
 	"_end)$"
 };
 
@@ -808,6 +811,12 @@
 			    symname);
 		break;
 
+	case R_X86_64_8:
+		if (!shn_abs || !is_reloc(S_ABS, symname))
+			die("Non-whitelisted %s relocation: %s\n",
+				rel_type(r_type), symname);
+		break;
+
 	case R_X86_64_32:
 	case R_X86_64_32S:
 	case R_X86_64_64:
diff --git a/arch/xtensa/include/asm/seccomp.h b/arch/xtensa/include/asm/seccomp.h
new file mode 100644
index 0000000..f1cb6b0
--- /dev/null
+++ b/arch/xtensa/include/asm/seccomp.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _ASM_SECCOMP_H
+#define _ASM_SECCOMP_H
+
+#include <asm-generic/seccomp.h>
+
+#define SECCOMP_ARCH_NATIVE		AUDIT_ARCH_XTENSA
+#define SECCOMP_ARCH_NATIVE_NR		NR_syscalls
+#define SECCOMP_ARCH_NATIVE_NAME	"xtensa"
+
+#endif /* _ASM_SECCOMP_H */
diff --git a/arch/xtensa/kernel/syscalls/syscall.tbl b/arch/xtensa/kernel/syscalls/syscall.tbl
index 25f4de7..8a717ec 100644
--- a/arch/xtensa/kernel/syscalls/syscall.tbl
+++ b/arch/xtensa/kernel/syscalls/syscall.tbl
@@ -406,3 +406,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	common	clone3				sys_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c
index f81b147..c97c2c8 100644
--- a/arch/xtensa/mm/fault.c
+++ b/arch/xtensa/mm/fault.c
@@ -43,7 +43,7 @@
 
 	int is_write, is_exec;
 	vm_fault_t fault;
-	unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
+	unsigned int flags = FAULT_FLAG_DEFAULT;
 
 	code = SEGV_MAPERR;
 
@@ -110,7 +110,7 @@
 	 */
 	fault = handle_mm_fault(vma, address, flags);
 
-	if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current))
+	if (fault_signal_pending(fault, regs))
 		return;
 
 	if (unlikely(fault & VM_FAULT_ERROR)) {
@@ -128,7 +128,6 @@
 		else
 			current->min_flt++;
 		if (fault & VM_FAULT_RETRY) {
-			flags &= ~FAULT_FLAG_ALLOW_RETRY;
 			flags |= FAULT_FLAG_TRIED;
 
 			 /* No need to up_read(&mm->mmap_sem) as we would
diff --git a/block/Kconfig b/block/Kconfig
index 41c0917..0b651f3 100644
--- a/block/Kconfig
+++ b/block/Kconfig
@@ -177,6 +177,23 @@
 	Enabling this option enables users to setup/unlock/lock
 	Locking ranges for SED devices using the Opal protocol.
 
+config BLK_INLINE_ENCRYPTION
+	bool "Enable inline encryption support in block layer"
+	help
+	  Build the blk-crypto subsystem. Enabling this lets the
+	  block layer handle encryption, so users can take
+	  advantage of inline encryption hardware if present.
+
+config BLK_INLINE_ENCRYPTION_FALLBACK
+	bool "Enable crypto API fallback for blk-crypto"
+	depends on BLK_INLINE_ENCRYPTION
+	select CRYPTO
+	select CRYPTO_BLKCIPHER
+	help
+	  Enabling this lets the block layer handle inline encryption
+	  by falling back to the kernel crypto API when inline
+	  encryption hardware is not present.
+
 menu "Partition Types"
 
 source "block/partitions/Kconfig"
@@ -196,7 +213,7 @@
 	default y
 
 config BLK_MQ_VIRTIO
-	bool
+	tristate
 	depends on BLOCK && VIRTIO
 	default y
 
diff --git a/block/Makefile b/block/Makefile
index 9ef57ac..e3d09f0 100644
--- a/block/Makefile
+++ b/block/Makefile
@@ -36,3 +36,5 @@
 obj-$(CONFIG_BLK_DEBUG_FS_ZONED)+= blk-mq-debugfs-zoned.o
 obj-$(CONFIG_BLK_SED_OPAL)	+= sed-opal.o
 obj-$(CONFIG_BLK_PM)		+= blk-pm.o
+obj-$(CONFIG_BLK_INLINE_ENCRYPTION)	+= keyslot-manager.o blk-crypto.o
+obj-$(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK)	+= blk-crypto-fallback.o
diff --git a/block/OWNERS b/block/OWNERS
new file mode 100644
index 0000000..7786d73
--- /dev/null
+++ b/block/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/block/OWNERS
diff --git a/block/bio-integrity.c b/block/bio-integrity.c
index c9dc2b1..4707e90 100644
--- a/block/bio-integrity.c
+++ b/block/bio-integrity.c
@@ -54,6 +54,9 @@
 	struct bio_set *bs = bio->bi_pool;
 	unsigned inline_vecs;
 
+	if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
+		return ERR_PTR(-EOPNOTSUPP);
+
 	if (!bs || !mempool_initialized(&bs->bio_integrity_pool)) {
 		bip = kmalloc(struct_size(bip, bip_inline_vecs, nr_vecs), gfp_mask);
 		inline_vecs = nr_vecs;
diff --git a/block/bio.c b/block/bio.c
index cb38d6f..4ce4941 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -17,6 +17,7 @@
 #include <linux/cgroup.h>
 #include <linux/blk-cgroup.h>
 #include <linux/highmem.h>
+#include <linux/blk-crypto.h>
 
 #include <trace/events/block.h>
 #include "blk.h"
@@ -236,6 +237,8 @@
 
 	if (bio_integrity(bio))
 		bio_integrity_free(bio);
+
+	bio_crypt_free_ctx(bio);
 }
 EXPORT_SYMBOL(bio_uninit);
 
@@ -664,18 +667,18 @@
 
 	__bio_clone_fast(b, bio);
 
-	if (bio_integrity(bio)) {
-		int ret;
+	if (bio_crypt_clone(b, bio, gfp_mask) < 0)
+		goto err_put;
 
-		ret = bio_integrity_clone(b, bio, gfp_mask);
-
-		if (ret < 0) {
-			bio_put(b);
-			return NULL;
-		}
-	}
+	if (bio_integrity(bio) &&
+	    bio_integrity_clone(b, bio, gfp_mask) < 0)
+		goto err_put;
 
 	return b;
+
+err_put:
+	bio_put(b);
+	return NULL;
 }
 EXPORT_SYMBOL(bio_clone_fast);
 
@@ -1048,6 +1051,7 @@
 	if (bio_integrity(bio))
 		bio_integrity_advance(bio, bytes);
 
+	bio_crypt_advance(bio, bytes);
 	bio_advance_iter(bio, &bio->bi_iter, bytes);
 }
 EXPORT_SYMBOL(bio_advance);
diff --git a/block/blk-core.c b/block/blk-core.c
index 5808baa..4fe7cd5 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -38,6 +38,7 @@
 #include <linux/debugfs.h>
 #include <linux/bpf.h>
 #include <linux/psi.h>
+#include <linux/blk-crypto.h>
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/block.h>
@@ -120,6 +121,7 @@
 	rq->start_time_ns = ktime_get_ns();
 	rq->part = NULL;
 	refcount_set(&rq->ref, 1);
+	blk_crypto_rq_set_defaults(rq);
 }
 EXPORT_SYMBOL(blk_rq_init);
 
@@ -132,6 +134,9 @@
 	REQ_OP_NAME(SECURE_ERASE),
 	REQ_OP_NAME(ZONE_RESET),
 	REQ_OP_NAME(ZONE_RESET_ALL),
+	REQ_OP_NAME(ZONE_OPEN),
+	REQ_OP_NAME(ZONE_CLOSE),
+	REQ_OP_NAME(ZONE_FINISH),
 	REQ_OP_NAME(WRITE_SAME),
 	REQ_OP_NAME(WRITE_ZEROES),
 	REQ_OP_NAME(SCSI_IN),
@@ -615,6 +620,8 @@
 	req->biotail = bio;
 	req->__data_len += bio->bi_iter.bi_size;
 
+	bio_crypt_free_ctx(bio);
+
 	blk_account_io_start(req, false);
 	return true;
 }
@@ -639,6 +646,8 @@
 	req->__sector = bio->bi_iter.bi_sector;
 	req->__data_len += bio->bi_iter.bi_size;
 
+	bio_crypt_do_front_merge(req, bio);
+
 	blk_account_io_start(req, false);
 	return true;
 }
@@ -848,11 +857,7 @@
 	if (unlikely(bio_check_ro(bio, p)))
 		goto out;
 
-	/*
-	 * Zone reset does not include bi_size so bio_sectors() is always 0.
-	 * Include a test for the reset op code and perform the remap if needed.
-	 */
-	if (bio_sectors(bio) || bio_op(bio) == REQ_OP_ZONE_RESET) {
+	if (bio_sectors(bio)) {
 		if (bio_check_eod(bio, part_nr_sects_read(p)))
 			goto out;
 		bio->bi_iter.bi_sector += p->start_sect;
@@ -939,6 +944,9 @@
 			goto not_supported;
 		break;
 	case REQ_OP_ZONE_RESET:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
 		if (!blk_queue_is_zoned(q))
 			goto not_supported;
 		break;
@@ -1064,7 +1072,8 @@
 			/* Create a fresh bio_list for all subordinate requests */
 			bio_list_on_stack[1] = bio_list_on_stack[0];
 			bio_list_init(&bio_list_on_stack[0]);
-			ret = q->make_request_fn(q, bio);
+			if (blk_crypto_bio_prep(&bio))
+				ret = q->make_request_fn(q, bio);
 
 			blk_queue_exit(q);
 
@@ -1112,7 +1121,7 @@
 {
 	struct request_queue *q = bio->bi_disk->queue;
 	bool nowait = bio->bi_opf & REQ_NOWAIT;
-	blk_qc_t ret;
+	blk_qc_t ret = BLK_QC_T_NONE;
 
 	if (!generic_make_request_checks(bio))
 		return BLK_QC_T_NONE;
@@ -1126,7 +1135,8 @@
 		return BLK_QC_T_NONE;
 	}
 
-	ret = q->make_request_fn(q, bio);
+	if (blk_crypto_bio_prep(&bio))
+		ret = q->make_request_fn(q, bio);
 	blk_queue_exit(q);
 	return ret;
 }
@@ -1256,6 +1266,9 @@
 	    should_fail_request(&rq->rq_disk->part0, blk_rq_bytes(rq)))
 		return BLK_STS_IOERR;
 
+	if (blk_crypto_insert_cloned_request(rq))
+		return BLK_STS_IOERR;
+
 	if (blk_queue_io_stat(q))
 		blk_account_io_start(rq, true);
 
@@ -1637,12 +1650,17 @@
 		if (rq->bio) {
 			rq->biotail->bi_next = bio;
 			rq->biotail = bio;
-		} else
+		} else {
 			rq->bio = rq->biotail = bio;
+		}
+		bio = NULL;
 	}
 
 	__blk_rq_prep_clone(rq, rq_src);
 
+	if (rq->bio && blk_crypto_rq_bio_prep(rq, rq->bio, gfp_mask) < 0)
+		goto free_and_out;
+
 	return 0;
 
 free_and_out:
diff --git a/block/blk-crypto-fallback.c b/block/blk-crypto-fallback.c
new file mode 100644
index 0000000..077a60b
--- /dev/null
+++ b/block/blk-crypto-fallback.c
@@ -0,0 +1,660 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Refer to Documentation/block/inline-encryption.rst for detailed explanation.
+ */
+
+#define pr_fmt(fmt) "blk-crypto-fallback: " fmt
+
+#include <crypto/skcipher.h>
+#include <linux/blk-cgroup.h>
+#include <linux/blk-crypto.h>
+#include <linux/blkdev.h>
+#include <linux/crypto.h>
+#include <linux/keyslot-manager.h>
+#include <linux/mempool.h>
+#include <linux/module.h>
+#include <linux/random.h>
+
+#include "blk-crypto-internal.h"
+
+static unsigned int num_prealloc_bounce_pg = 32;
+module_param(num_prealloc_bounce_pg, uint, 0);
+MODULE_PARM_DESC(num_prealloc_bounce_pg,
+		 "Number of preallocated bounce pages for the blk-crypto crypto API fallback");
+
+static unsigned int blk_crypto_num_keyslots = 100;
+module_param_named(num_keyslots, blk_crypto_num_keyslots, uint, 0);
+MODULE_PARM_DESC(num_keyslots,
+		 "Number of keyslots for the blk-crypto crypto API fallback");
+
+static unsigned int num_prealloc_fallback_crypt_ctxs = 128;
+module_param(num_prealloc_fallback_crypt_ctxs, uint, 0);
+MODULE_PARM_DESC(num_prealloc_crypt_fallback_ctxs,
+		 "Number of preallocated bio fallback crypto contexts for blk-crypto to use during crypto API fallback");
+
+struct bio_fallback_crypt_ctx {
+	struct bio_crypt_ctx crypt_ctx;
+	/*
+	 * Copy of the bvec_iter when this bio was submitted.
+	 * We only want to en/decrypt the part of the bio as described by the
+	 * bvec_iter upon submission because bio might be split before being
+	 * resubmitted
+	 */
+	struct bvec_iter crypt_iter;
+	union {
+		struct {
+			struct work_struct work;
+			struct bio *bio;
+		};
+		struct {
+			void *bi_private_orig;
+			bio_end_io_t *bi_end_io_orig;
+		};
+	};
+};
+
+static struct kmem_cache *bio_fallback_crypt_ctx_cache;
+static mempool_t *bio_fallback_crypt_ctx_pool;
+
+/*
+ * Allocating a crypto tfm during I/O can deadlock, so we have to preallocate
+ * all of a mode's tfms when that mode starts being used. Since each mode may
+ * need all the keyslots at some point, each mode needs its own tfm for each
+ * keyslot; thus, a keyslot may contain tfms for multiple modes.  However, to
+ * match the behavior of real inline encryption hardware (which only supports a
+ * single encryption context per keyslot), we only allow one tfm per keyslot to
+ * be used at a time - the rest of the unused tfms have their keys cleared.
+ */
+static DEFINE_MUTEX(tfms_init_lock);
+static bool tfms_inited[BLK_ENCRYPTION_MODE_MAX];
+
+static struct blk_crypto_keyslot {
+	enum blk_crypto_mode_num crypto_mode;
+	struct crypto_skcipher *tfms[BLK_ENCRYPTION_MODE_MAX];
+} *blk_crypto_keyslots;
+
+static struct blk_keyslot_manager blk_crypto_ksm;
+static struct workqueue_struct *blk_crypto_wq;
+static mempool_t *blk_crypto_bounce_page_pool;
+
+/*
+ * This is the key we set when evicting a keyslot. This *should* be the all 0's
+ * key, but AES-XTS rejects that key, so we use some random bytes instead.
+ */
+static u8 blank_key[BLK_CRYPTO_MAX_KEY_SIZE];
+
+static void blk_crypto_evict_keyslot(unsigned int slot)
+{
+	struct blk_crypto_keyslot *slotp = &blk_crypto_keyslots[slot];
+	enum blk_crypto_mode_num crypto_mode = slotp->crypto_mode;
+	int err;
+
+	WARN_ON(slotp->crypto_mode == BLK_ENCRYPTION_MODE_INVALID);
+
+	/* Clear the key in the skcipher */
+	err = crypto_skcipher_setkey(slotp->tfms[crypto_mode], blank_key,
+				     blk_crypto_modes[crypto_mode].keysize);
+	WARN_ON(err);
+	slotp->crypto_mode = BLK_ENCRYPTION_MODE_INVALID;
+}
+
+static int blk_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      unsigned int slot)
+{
+	struct blk_crypto_keyslot *slotp = &blk_crypto_keyslots[slot];
+	const enum blk_crypto_mode_num crypto_mode =
+						key->crypto_cfg.crypto_mode;
+	int err;
+
+	if (crypto_mode != slotp->crypto_mode &&
+	    slotp->crypto_mode != BLK_ENCRYPTION_MODE_INVALID)
+		blk_crypto_evict_keyslot(slot);
+
+	slotp->crypto_mode = crypto_mode;
+	err = crypto_skcipher_setkey(slotp->tfms[crypto_mode], key->raw,
+				     key->size);
+	if (err) {
+		blk_crypto_evict_keyslot(slot);
+		return err;
+	}
+	return 0;
+}
+
+static int blk_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				    const struct blk_crypto_key *key,
+				    unsigned int slot)
+{
+	blk_crypto_evict_keyslot(slot);
+	return 0;
+}
+
+/*
+ * The crypto API fallback KSM ops - only used for a bio when it specifies a
+ * blk_crypto_key that was not supported by the device's inline encryption
+ * hardware.
+ */
+static const struct blk_ksm_ll_ops blk_crypto_ksm_ll_ops = {
+	.keyslot_program	= blk_crypto_keyslot_program,
+	.keyslot_evict		= blk_crypto_keyslot_evict,
+};
+
+static void blk_crypto_fallback_encrypt_endio(struct bio *enc_bio)
+{
+	struct bio *src_bio = enc_bio->bi_private;
+	int i;
+
+	for (i = 0; i < enc_bio->bi_vcnt; i++)
+		mempool_free(enc_bio->bi_io_vec[i].bv_page,
+			     blk_crypto_bounce_page_pool);
+
+	src_bio->bi_status = enc_bio->bi_status;
+
+	bio_put(enc_bio);
+	bio_endio(src_bio);
+}
+
+static struct bio *blk_crypto_clone_bio(struct bio *bio_src)
+{
+	struct bvec_iter iter;
+	struct bio_vec bv;
+	struct bio *bio;
+
+	bio = bio_alloc_bioset(GFP_NOIO, bio_segments(bio_src), NULL);
+	if (!bio)
+		return NULL;
+	bio->bi_disk		= bio_src->bi_disk;
+	bio->bi_opf		= bio_src->bi_opf;
+	bio->bi_ioprio		= bio_src->bi_ioprio;
+	bio->bi_write_hint	= bio_src->bi_write_hint;
+	bio->bi_iter.bi_sector	= bio_src->bi_iter.bi_sector;
+	bio->bi_iter.bi_size	= bio_src->bi_iter.bi_size;
+
+	bio_for_each_segment(bv, bio_src, iter)
+		bio->bi_io_vec[bio->bi_vcnt++] = bv;
+
+	bio_clone_blkg_association(bio, bio_src);
+	blkcg_bio_issue_init(bio);
+
+	bio_clone_skip_dm_default_key(bio, bio_src);
+
+	return bio;
+}
+
+static bool blk_crypto_alloc_cipher_req(struct blk_ksm_keyslot *slot,
+					struct skcipher_request **ciph_req_ret,
+					struct crypto_wait *wait)
+{
+	struct skcipher_request *ciph_req;
+	const struct blk_crypto_keyslot *slotp;
+	int keyslot_idx = blk_ksm_get_slot_idx(slot);
+
+	slotp = &blk_crypto_keyslots[keyslot_idx];
+	ciph_req = skcipher_request_alloc(slotp->tfms[slotp->crypto_mode],
+					  GFP_NOIO);
+	if (!ciph_req)
+		return false;
+
+	skcipher_request_set_callback(ciph_req,
+				      CRYPTO_TFM_REQ_MAY_BACKLOG |
+				      CRYPTO_TFM_REQ_MAY_SLEEP,
+				      crypto_req_done, wait);
+	*ciph_req_ret = ciph_req;
+
+	return true;
+}
+
+static bool blk_crypto_split_bio_if_needed(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	unsigned int i = 0;
+	unsigned int num_sectors = 0;
+	struct bio_vec bv;
+	struct bvec_iter iter;
+
+	bio_for_each_segment(bv, bio, iter) {
+		num_sectors += bv.bv_len >> SECTOR_SHIFT;
+		if (++i == BIO_MAX_PAGES)
+			break;
+	}
+	if (num_sectors < bio_sectors(bio)) {
+		struct bio *split_bio;
+
+		split_bio = bio_split(bio, num_sectors, GFP_NOIO, NULL);
+		if (!split_bio) {
+			bio->bi_status = BLK_STS_RESOURCE;
+			return false;
+		}
+		bio_chain(split_bio, bio);
+		generic_make_request(bio);
+		*bio_ptr = split_bio;
+	}
+
+	return true;
+}
+
+union blk_crypto_iv {
+	__le64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	u8 bytes[BLK_CRYPTO_MAX_IV_SIZE];
+};
+
+static void blk_crypto_dun_to_iv(const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+				 union blk_crypto_iv *iv)
+{
+	int i;
+
+	for (i = 0; i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++)
+		iv->dun[i] = cpu_to_le64(dun[i]);
+}
+
+/*
+ * The crypto API fallback's encryption routine.
+ * Allocate a bounce bio for encryption, encrypt the input bio using crypto API,
+ * and replace *bio_ptr with the bounce bio. May split input bio if it's too
+ * large. Returns true on success. Returns false and sets bio->bi_status on
+ * error.
+ */
+static bool blk_crypto_fallback_encrypt_bio(struct bio **bio_ptr)
+{
+	struct bio *src_bio, *enc_bio;
+	struct bio_crypt_ctx *bc;
+	struct blk_ksm_keyslot *slot;
+	int data_unit_size;
+	struct skcipher_request *ciph_req = NULL;
+	DECLARE_CRYPTO_WAIT(wait);
+	u64 curr_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	struct scatterlist src, dst;
+	union blk_crypto_iv iv;
+	unsigned int i, j;
+	bool ret = false;
+	blk_status_t blk_st;
+
+	/* Split the bio if it's too big for single page bvec */
+	if (!blk_crypto_split_bio_if_needed(bio_ptr))
+		return false;
+
+	src_bio = *bio_ptr;
+	bc = src_bio->bi_crypt_context;
+	data_unit_size = bc->bc_key->crypto_cfg.data_unit_size;
+
+	/* Allocate bounce bio for encryption */
+	enc_bio = blk_crypto_clone_bio(src_bio);
+	if (!enc_bio) {
+		src_bio->bi_status = BLK_STS_RESOURCE;
+		return false;
+	}
+
+	/*
+	 * Use the crypto API fallback keyslot manager to get a crypto_skcipher
+	 * for the algorithm and key specified for this bio.
+	 */
+	blk_st = blk_ksm_get_slot_for_key(&blk_crypto_ksm, bc->bc_key, &slot);
+	if (blk_st != BLK_STS_OK) {
+		src_bio->bi_status = blk_st;
+		goto out_put_enc_bio;
+	}
+
+	/* and then allocate an skcipher_request for it */
+	if (!blk_crypto_alloc_cipher_req(slot, &ciph_req, &wait)) {
+		src_bio->bi_status = BLK_STS_RESOURCE;
+		goto out_release_keyslot;
+	}
+
+	memcpy(curr_dun, bc->bc_dun, sizeof(curr_dun));
+	sg_init_table(&src, 1);
+	sg_init_table(&dst, 1);
+
+	skcipher_request_set_crypt(ciph_req, &src, &dst, data_unit_size,
+				   iv.bytes);
+
+	/* Encrypt each page in the bounce bio */
+	for (i = 0; i < enc_bio->bi_vcnt; i++) {
+		struct bio_vec *enc_bvec = &enc_bio->bi_io_vec[i];
+		struct page *plaintext_page = enc_bvec->bv_page;
+		struct page *ciphertext_page =
+			mempool_alloc(blk_crypto_bounce_page_pool, GFP_NOIO);
+
+		enc_bvec->bv_page = ciphertext_page;
+
+		if (!ciphertext_page) {
+			src_bio->bi_status = BLK_STS_RESOURCE;
+			goto out_free_bounce_pages;
+		}
+
+		sg_set_page(&src, plaintext_page, data_unit_size,
+			    enc_bvec->bv_offset);
+		sg_set_page(&dst, ciphertext_page, data_unit_size,
+			    enc_bvec->bv_offset);
+
+		/* Encrypt each data unit in this page */
+		for (j = 0; j < enc_bvec->bv_len; j += data_unit_size) {
+			blk_crypto_dun_to_iv(curr_dun, &iv);
+			if (crypto_wait_req(crypto_skcipher_encrypt(ciph_req),
+					    &wait)) {
+				i++;
+				src_bio->bi_status = BLK_STS_IOERR;
+				goto out_free_bounce_pages;
+			}
+			bio_crypt_dun_increment(curr_dun, 1);
+			src.offset += data_unit_size;
+			dst.offset += data_unit_size;
+		}
+	}
+
+	enc_bio->bi_private = src_bio;
+	enc_bio->bi_end_io = blk_crypto_fallback_encrypt_endio;
+	*bio_ptr = enc_bio;
+	ret = true;
+
+	enc_bio = NULL;
+	goto out_free_ciph_req;
+
+out_free_bounce_pages:
+	while (i > 0)
+		mempool_free(enc_bio->bi_io_vec[--i].bv_page,
+			     blk_crypto_bounce_page_pool);
+out_free_ciph_req:
+	skcipher_request_free(ciph_req);
+out_release_keyslot:
+	blk_ksm_put_slot(slot);
+out_put_enc_bio:
+	if (enc_bio)
+		bio_put(enc_bio);
+
+	return ret;
+}
+
+/*
+ * The crypto API fallback's main decryption routine.
+ * Decrypts input bio in place, and calls bio_endio on the bio.
+ */
+static void blk_crypto_fallback_decrypt_bio(struct work_struct *work)
+{
+	struct bio_fallback_crypt_ctx *f_ctx =
+		container_of(work, struct bio_fallback_crypt_ctx, work);
+	struct bio *bio = f_ctx->bio;
+	struct bio_crypt_ctx *bc = &f_ctx->crypt_ctx;
+	struct blk_ksm_keyslot *slot;
+	struct skcipher_request *ciph_req = NULL;
+	DECLARE_CRYPTO_WAIT(wait);
+	u64 curr_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+	union blk_crypto_iv iv;
+	struct scatterlist sg;
+	struct bio_vec bv;
+	struct bvec_iter iter;
+	const int data_unit_size = bc->bc_key->crypto_cfg.data_unit_size;
+	unsigned int i;
+	blk_status_t blk_st;
+
+	/*
+	 * Use the crypto API fallback keyslot manager to get a crypto_skcipher
+	 * for the algorithm and key specified for this bio.
+	 */
+	blk_st = blk_ksm_get_slot_for_key(&blk_crypto_ksm, bc->bc_key, &slot);
+	if (blk_st != BLK_STS_OK) {
+		bio->bi_status = blk_st;
+		goto out_no_keyslot;
+	}
+
+	/* and then allocate an skcipher_request for it */
+	if (!blk_crypto_alloc_cipher_req(slot, &ciph_req, &wait)) {
+		bio->bi_status = BLK_STS_RESOURCE;
+		goto out;
+	}
+
+	memcpy(curr_dun, bc->bc_dun, sizeof(curr_dun));
+	sg_init_table(&sg, 1);
+	skcipher_request_set_crypt(ciph_req, &sg, &sg, data_unit_size,
+				   iv.bytes);
+
+	/* Decrypt each segment in the bio */
+	__bio_for_each_segment(bv, bio, iter, f_ctx->crypt_iter) {
+		struct page *page = bv.bv_page;
+
+		sg_set_page(&sg, page, data_unit_size, bv.bv_offset);
+
+		/* Decrypt each data unit in the segment */
+		for (i = 0; i < bv.bv_len; i += data_unit_size) {
+			blk_crypto_dun_to_iv(curr_dun, &iv);
+			if (crypto_wait_req(crypto_skcipher_decrypt(ciph_req),
+					    &wait)) {
+				bio->bi_status = BLK_STS_IOERR;
+				goto out;
+			}
+			bio_crypt_dun_increment(curr_dun, 1);
+			sg.offset += data_unit_size;
+		}
+	}
+
+out:
+	skcipher_request_free(ciph_req);
+	blk_ksm_put_slot(slot);
+out_no_keyslot:
+	mempool_free(f_ctx, bio_fallback_crypt_ctx_pool);
+	bio_endio(bio);
+}
+
+/**
+ * blk_crypto_fallback_decrypt_endio - queue bio for fallback decryption
+ *
+ * @bio: the bio to queue
+ *
+ * Restore bi_private and bi_end_io, and queue the bio for decryption into a
+ * workqueue, since this function will be called from an atomic context.
+ */
+static void blk_crypto_fallback_decrypt_endio(struct bio *bio)
+{
+	struct bio_fallback_crypt_ctx *f_ctx = bio->bi_private;
+
+	bio->bi_private = f_ctx->bi_private_orig;
+	bio->bi_end_io = f_ctx->bi_end_io_orig;
+
+	/* If there was an IO error, don't queue for decrypt. */
+	if (bio->bi_status) {
+		mempool_free(f_ctx, bio_fallback_crypt_ctx_pool);
+		bio_endio(bio);
+		return;
+	}
+
+	INIT_WORK(&f_ctx->work, blk_crypto_fallback_decrypt_bio);
+	f_ctx->bio = bio;
+	queue_work(blk_crypto_wq, &f_ctx->work);
+}
+
+/**
+ * blk_crypto_fallback_bio_prep - Prepare a bio to use fallback en/decryption
+ *
+ * @bio_ptr: pointer to the bio to prepare
+ *
+ * If bio is doing a WRITE operation, this splits the bio into two parts if it's
+ * too big (see blk_crypto_split_bio_if_needed). It then allocates a bounce bio
+ * for the first part, encrypts it, and update bio_ptr to point to the bounce
+ * bio.
+ *
+ * For a READ operation, we mark the bio for decryption by using bi_private and
+ * bi_end_io.
+ *
+ * In either case, this function will make the bio look like a regular bio (i.e.
+ * as if no encryption context was ever specified) for the purposes of the rest
+ * of the stack except for blk-integrity (blk-integrity and blk-crypto are not
+ * currently supported together).
+ *
+ * Return: true on success. Sets bio->bi_status and returns false on error.
+ */
+bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+	struct bio_fallback_crypt_ctx *f_ctx;
+
+	if (WARN_ON_ONCE(!tfms_inited[bc->bc_key->crypto_cfg.crypto_mode])) {
+		/* User didn't call blk_crypto_start_using_key() first */
+		bio->bi_status = BLK_STS_IOERR;
+		return false;
+	}
+
+	if (!blk_ksm_crypto_cfg_supported(&blk_crypto_ksm,
+					  &bc->bc_key->crypto_cfg)) {
+		bio->bi_status = BLK_STS_NOTSUPP;
+		return false;
+	}
+
+	if (bio_data_dir(bio) == WRITE)
+		return blk_crypto_fallback_encrypt_bio(bio_ptr);
+
+	/*
+	 * bio READ case: Set up a f_ctx in the bio's bi_private and set the
+	 * bi_end_io appropriately to trigger decryption when the bio is ended.
+	 */
+	f_ctx = mempool_alloc(bio_fallback_crypt_ctx_pool, GFP_NOIO);
+	f_ctx->crypt_ctx = *bc;
+	f_ctx->crypt_iter = bio->bi_iter;
+	f_ctx->bi_private_orig = bio->bi_private;
+	f_ctx->bi_end_io_orig = bio->bi_end_io;
+	bio->bi_private = (void *)f_ctx;
+	bio->bi_end_io = blk_crypto_fallback_decrypt_endio;
+	bio_crypt_free_ctx(bio);
+
+	return true;
+}
+
+int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key)
+{
+	return blk_ksm_evict_key(&blk_crypto_ksm, key);
+}
+
+static bool blk_crypto_fallback_inited;
+static int blk_crypto_fallback_init(void)
+{
+	int i;
+	int err;
+
+	if (blk_crypto_fallback_inited)
+		return 0;
+
+	prandom_bytes(blank_key, BLK_CRYPTO_MAX_KEY_SIZE);
+
+	err = blk_ksm_init(&blk_crypto_ksm, blk_crypto_num_keyslots);
+	if (err)
+		goto out;
+	err = -ENOMEM;
+
+	blk_crypto_ksm.ksm_ll_ops = blk_crypto_ksm_ll_ops;
+	blk_crypto_ksm.max_dun_bytes_supported = BLK_CRYPTO_MAX_IV_SIZE;
+	blk_crypto_ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+
+	/* All blk-crypto modes have a crypto API fallback. */
+	for (i = 0; i < BLK_ENCRYPTION_MODE_MAX; i++)
+		blk_crypto_ksm.crypto_modes_supported[i] = 0xFFFFFFFF;
+	blk_crypto_ksm.crypto_modes_supported[BLK_ENCRYPTION_MODE_INVALID] = 0;
+
+	blk_crypto_wq = alloc_workqueue("blk_crypto_wq",
+					WQ_UNBOUND | WQ_HIGHPRI |
+					WQ_MEM_RECLAIM, num_online_cpus());
+	if (!blk_crypto_wq)
+		goto fail_free_ksm;
+
+	blk_crypto_keyslots = kcalloc(blk_crypto_num_keyslots,
+				      sizeof(blk_crypto_keyslots[0]),
+				      GFP_KERNEL);
+	if (!blk_crypto_keyslots)
+		goto fail_free_wq;
+
+	blk_crypto_bounce_page_pool =
+		mempool_create_page_pool(num_prealloc_bounce_pg, 0);
+	if (!blk_crypto_bounce_page_pool)
+		goto fail_free_keyslots;
+
+	bio_fallback_crypt_ctx_cache = KMEM_CACHE(bio_fallback_crypt_ctx, 0);
+	if (!bio_fallback_crypt_ctx_cache)
+		goto fail_free_bounce_page_pool;
+
+	bio_fallback_crypt_ctx_pool =
+		mempool_create_slab_pool(num_prealloc_fallback_crypt_ctxs,
+					 bio_fallback_crypt_ctx_cache);
+	if (!bio_fallback_crypt_ctx_pool)
+		goto fail_free_crypt_ctx_cache;
+
+	blk_crypto_fallback_inited = true;
+
+	return 0;
+fail_free_crypt_ctx_cache:
+	kmem_cache_destroy(bio_fallback_crypt_ctx_cache);
+fail_free_bounce_page_pool:
+	mempool_destroy(blk_crypto_bounce_page_pool);
+fail_free_keyslots:
+	kfree(blk_crypto_keyslots);
+fail_free_wq:
+	destroy_workqueue(blk_crypto_wq);
+fail_free_ksm:
+	blk_ksm_destroy(&blk_crypto_ksm);
+out:
+	return err;
+}
+
+/*
+ * Prepare blk-crypto-fallback for the specified crypto mode.
+ * Returns -ENOPKG if the needed crypto API support is missing.
+ */
+int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num)
+{
+	const char *cipher_str = blk_crypto_modes[mode_num].cipher_str;
+	struct blk_crypto_keyslot *slotp;
+	unsigned int i;
+	int err = 0;
+
+	/*
+	 * Fast path
+	 * Ensure that updates to blk_crypto_keyslots[i].tfms[mode_num]
+	 * for each i are visible before we try to access them.
+	 */
+	if (likely(smp_load_acquire(&tfms_inited[mode_num])))
+		return 0;
+
+	mutex_lock(&tfms_init_lock);
+	if (tfms_inited[mode_num])
+		goto out;
+
+	err = blk_crypto_fallback_init();
+	if (err)
+		goto out;
+
+	for (i = 0; i < blk_crypto_num_keyslots; i++) {
+		slotp = &blk_crypto_keyslots[i];
+		slotp->tfms[mode_num] = crypto_alloc_skcipher(cipher_str, 0, 0);
+		if (IS_ERR(slotp->tfms[mode_num])) {
+			err = PTR_ERR(slotp->tfms[mode_num]);
+			if (err == -ENOENT) {
+				pr_warn_once("Missing crypto API support for \"%s\"\n",
+					     cipher_str);
+				err = -ENOPKG;
+			}
+			slotp->tfms[mode_num] = NULL;
+			goto out_free_tfms;
+		}
+
+		crypto_skcipher_set_flags(slotp->tfms[mode_num],
+					  CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
+	}
+
+	/*
+	 * Ensure that updates to blk_crypto_keyslots[i].tfms[mode_num]
+	 * for each i are visible before we set tfms_inited[mode_num].
+	 */
+	smp_store_release(&tfms_inited[mode_num], true);
+	goto out;
+
+out_free_tfms:
+	for (i = 0; i < blk_crypto_num_keyslots; i++) {
+		slotp = &blk_crypto_keyslots[i];
+		crypto_free_skcipher(slotp->tfms[mode_num]);
+		slotp->tfms[mode_num] = NULL;
+	}
+out:
+	mutex_unlock(&tfms_init_lock);
+	return err;
+}
diff --git a/block/blk-crypto-internal.h b/block/blk-crypto-internal.h
new file mode 100644
index 0000000..0d36aae
--- /dev/null
+++ b/block/blk-crypto-internal.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_BLK_CRYPTO_INTERNAL_H
+#define __LINUX_BLK_CRYPTO_INTERNAL_H
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+
+/* Represents a crypto mode supported by blk-crypto  */
+struct blk_crypto_mode {
+	const char *cipher_str; /* crypto API name (for fallback case) */
+	unsigned int keysize; /* key size in bytes */
+	unsigned int ivsize; /* iv size in bytes */
+};
+
+extern const struct blk_crypto_mode blk_crypto_modes[];
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+void bio_crypt_dun_increment(u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+			     unsigned int inc);
+
+bool bio_crypt_rq_ctx_compatible(struct request *rq, struct bio *bio);
+
+bool bio_crypt_ctx_mergeable(struct bio_crypt_ctx *bc1, unsigned int bc1_bytes,
+			     struct bio_crypt_ctx *bc2);
+
+static inline bool bio_crypt_ctx_back_mergeable(struct request *req,
+						struct bio *bio)
+{
+	return bio_crypt_ctx_mergeable(req->crypt_ctx, blk_rq_bytes(req),
+				       bio->bi_crypt_context);
+}
+
+static inline bool bio_crypt_ctx_front_mergeable(struct request *req,
+						 struct bio *bio)
+{
+	return bio_crypt_ctx_mergeable(bio->bi_crypt_context,
+				       bio->bi_iter.bi_size, req->crypt_ctx);
+}
+
+static inline bool bio_crypt_ctx_merge_rq(struct request *req,
+					  struct request *next)
+{
+	return bio_crypt_ctx_mergeable(req->crypt_ctx, blk_rq_bytes(req),
+				       next->crypt_ctx);
+}
+
+static inline void blk_crypto_rq_set_defaults(struct request *rq)
+{
+	rq->crypt_ctx = NULL;
+	rq->crypt_keyslot = NULL;
+}
+
+static inline bool blk_crypto_rq_is_encrypted(struct request *rq)
+{
+	return rq->crypt_ctx;
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool bio_crypt_rq_ctx_compatible(struct request *rq,
+					       struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_front_mergeable(struct request *req,
+						 struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_back_mergeable(struct request *req,
+						struct bio *bio)
+{
+	return true;
+}
+
+static inline bool bio_crypt_ctx_merge_rq(struct request *req,
+					  struct request *next)
+{
+	return true;
+}
+
+static inline void blk_crypto_rq_set_defaults(struct request *rq) { }
+
+static inline bool blk_crypto_rq_is_encrypted(struct request *rq)
+{
+	return false;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+void __bio_crypt_advance(struct bio *bio, unsigned int bytes);
+static inline void bio_crypt_advance(struct bio *bio, unsigned int bytes)
+{
+	if (bio_has_crypt_ctx(bio))
+		__bio_crypt_advance(bio, bytes);
+}
+
+void __bio_crypt_free_ctx(struct bio *bio);
+static inline void bio_crypt_free_ctx(struct bio *bio)
+{
+	if (bio_has_crypt_ctx(bio))
+		__bio_crypt_free_ctx(bio);
+}
+
+static inline void bio_crypt_do_front_merge(struct request *rq,
+					    struct bio *bio)
+{
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	if (bio_has_crypt_ctx(bio))
+		memcpy(rq->crypt_ctx->bc_dun, bio->bi_crypt_context->bc_dun,
+		       sizeof(rq->crypt_ctx->bc_dun));
+#endif
+}
+
+bool __blk_crypto_bio_prep(struct bio **bio_ptr);
+static inline bool blk_crypto_bio_prep(struct bio **bio_ptr)
+{
+	if (bio_has_crypt_ctx(*bio_ptr))
+		return __blk_crypto_bio_prep(bio_ptr);
+	return true;
+}
+
+blk_status_t __blk_crypto_init_request(struct request *rq);
+static inline blk_status_t blk_crypto_init_request(struct request *rq)
+{
+	if (blk_crypto_rq_is_encrypted(rq))
+		return __blk_crypto_init_request(rq);
+	return BLK_STS_OK;
+}
+
+void __blk_crypto_free_request(struct request *rq);
+static inline void blk_crypto_free_request(struct request *rq)
+{
+	if (blk_crypto_rq_is_encrypted(rq))
+		__blk_crypto_free_request(rq);
+}
+
+int __blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+			     gfp_t gfp_mask);
+/**
+ * blk_crypto_rq_bio_prep - Prepare a request's crypt_ctx when its first bio
+ *			    is inserted
+ * @rq: The request to prepare
+ * @bio: The first bio being inserted into the request
+ * @gfp_mask: Memory allocation flags
+ *
+ * Return: 0 on success, -ENOMEM if out of memory.  -ENOMEM is only possible if
+ *	   @gfp_mask doesn't include %__GFP_DIRECT_RECLAIM.
+ */
+static inline int blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+					 gfp_t gfp_mask)
+{
+	if (bio_has_crypt_ctx(bio))
+		return __blk_crypto_rq_bio_prep(rq, bio, gfp_mask);
+	return 0;
+}
+
+/**
+ * blk_crypto_insert_cloned_request - Prepare a cloned request to be inserted
+ *				      into a request queue.
+ * @rq: the request being queued
+ *
+ * Return: BLK_STS_OK on success, nonzero on error.
+ */
+static inline blk_status_t blk_crypto_insert_cloned_request(struct request *rq)
+{
+
+	if (blk_crypto_rq_is_encrypted(rq))
+		return blk_crypto_init_request(rq);
+	return BLK_STS_OK;
+}
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK
+
+int blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num);
+
+bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr);
+
+int blk_crypto_fallback_evict_key(const struct blk_crypto_key *key);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */
+
+static inline int
+blk_crypto_fallback_start_using_mode(enum blk_crypto_mode_num mode_num)
+{
+	pr_warn_once("crypto API fallback is disabled\n");
+	return -ENOPKG;
+}
+
+static inline bool blk_crypto_fallback_bio_prep(struct bio **bio_ptr)
+{
+	pr_warn_once("crypto API fallback disabled; failing request.\n");
+	(*bio_ptr)->bi_status = BLK_STS_NOTSUPP;
+	return false;
+}
+
+static inline int
+blk_crypto_fallback_evict_key(const struct blk_crypto_key *key)
+{
+	return 0;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK */
+
+#endif /* __LINUX_BLK_CRYPTO_INTERNAL_H */
diff --git a/block/blk-crypto.c b/block/blk-crypto.c
new file mode 100644
index 0000000..b48aec2
--- /dev/null
+++ b/block/blk-crypto.c
@@ -0,0 +1,437 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * Refer to Documentation/block/inline-encryption.rst for detailed explanation.
+ */
+
+#define pr_fmt(fmt) "blk-crypto: " fmt
+
+#include <linux/bio.h>
+#include <linux/blkdev.h>
+#include <linux/keyslot-manager.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+
+#include "blk-crypto-internal.h"
+
+const struct blk_crypto_mode blk_crypto_modes[] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.cipher_str = "xts(aes)",
+		.keysize = 64,
+		.ivsize = 16,
+	},
+	[BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV] = {
+		.cipher_str = "essiv(cbc(aes),sha256)",
+		.keysize = 16,
+		.ivsize = 16,
+	},
+	[BLK_ENCRYPTION_MODE_ADIANTUM] = {
+		.cipher_str = "adiantum(xchacha12,aes)",
+		.keysize = 32,
+		.ivsize = 32,
+	},
+};
+
+/*
+ * This number needs to be at least (the number of threads doing IO
+ * concurrently) * (maximum recursive depth of a bio), so that we don't
+ * deadlock on crypt_ctx allocations. The default is chosen to be the same
+ * as the default number of post read contexts in both EXT4 and F2FS.
+ */
+static int num_prealloc_crypt_ctxs = 128;
+
+module_param(num_prealloc_crypt_ctxs, int, 0444);
+MODULE_PARM_DESC(num_prealloc_crypt_ctxs,
+		"Number of bio crypto contexts to preallocate");
+
+static struct kmem_cache *bio_crypt_ctx_cache;
+static mempool_t *bio_crypt_ctx_pool;
+
+static int __init bio_crypt_ctx_init(void)
+{
+	size_t i;
+
+	bio_crypt_ctx_cache = KMEM_CACHE(bio_crypt_ctx, 0);
+	if (!bio_crypt_ctx_cache)
+		goto out_no_mem;
+
+	bio_crypt_ctx_pool = mempool_create_slab_pool(num_prealloc_crypt_ctxs,
+						      bio_crypt_ctx_cache);
+	if (!bio_crypt_ctx_pool)
+		goto out_no_mem;
+
+	/* This is assumed in various places. */
+	BUILD_BUG_ON(BLK_ENCRYPTION_MODE_INVALID != 0);
+
+	/* Sanity check that no algorithm exceeds the defined limits. */
+	for (i = 0; i < BLK_ENCRYPTION_MODE_MAX; i++) {
+		BUG_ON(blk_crypto_modes[i].keysize > BLK_CRYPTO_MAX_KEY_SIZE);
+		BUG_ON(blk_crypto_modes[i].ivsize > BLK_CRYPTO_MAX_IV_SIZE);
+	}
+
+	return 0;
+out_no_mem:
+	panic("Failed to allocate mem for bio crypt ctxs\n");
+}
+subsys_initcall(bio_crypt_ctx_init);
+
+void bio_crypt_set_ctx(struct bio *bio, const struct blk_crypto_key *key,
+		       const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE], gfp_t gfp_mask)
+{
+	struct bio_crypt_ctx *bc;
+
+	/*
+	 * The caller must use a gfp_mask that contains __GFP_DIRECT_RECLAIM so
+	 * that the mempool_alloc() can't fail.
+	 */
+	WARN_ON_ONCE(!(gfp_mask & __GFP_DIRECT_RECLAIM));
+
+	bc = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+
+	bc->bc_key = key;
+	memcpy(bc->bc_dun, dun, sizeof(bc->bc_dun));
+
+	bio->bi_crypt_context = bc;
+}
+EXPORT_SYMBOL_GPL(bio_crypt_set_ctx);
+
+void __bio_crypt_free_ctx(struct bio *bio)
+{
+	mempool_free(bio->bi_crypt_context, bio_crypt_ctx_pool);
+	bio->bi_crypt_context = NULL;
+}
+
+int __bio_crypt_clone(struct bio *dst, struct bio *src, gfp_t gfp_mask)
+{
+	dst->bi_crypt_context = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+	if (!dst->bi_crypt_context)
+		return -ENOMEM;
+	*dst->bi_crypt_context = *src->bi_crypt_context;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__bio_crypt_clone);
+
+/* Increments @dun by @inc, treating @dun as a multi-limb integer. */
+void bio_crypt_dun_increment(u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+			     unsigned int inc)
+{
+	int i;
+
+	for (i = 0; inc && i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++) {
+		dun[i] += inc;
+		/*
+		 * If the addition in this limb overflowed, then we need to
+		 * carry 1 into the next limb. Else the carry is 0.
+		 */
+		if (dun[i] < inc)
+			inc = 1;
+		else
+			inc = 0;
+	}
+}
+
+void __bio_crypt_advance(struct bio *bio, unsigned int bytes)
+{
+	struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+
+	bio_crypt_dun_increment(bc->bc_dun,
+				bytes >> bc->bc_key->data_unit_size_bits);
+}
+
+/*
+ * Returns true if @bc->bc_dun plus @bytes converted to data units is equal to
+ * @next_dun, treating the DUNs as multi-limb integers.
+ */
+bool bio_crypt_dun_is_contiguous(const struct bio_crypt_ctx *bc,
+				 unsigned int bytes,
+				 const u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE])
+{
+	int i;
+	unsigned int carry = bytes >> bc->bc_key->data_unit_size_bits;
+
+	for (i = 0; i < BLK_CRYPTO_DUN_ARRAY_SIZE; i++) {
+		if (bc->bc_dun[i] + carry != next_dun[i])
+			return false;
+		/*
+		 * If the addition in this limb overflowed, then we need to
+		 * carry 1 into the next limb. Else the carry is 0.
+		 */
+		if ((bc->bc_dun[i] + carry) < carry)
+			carry = 1;
+		else
+			carry = 0;
+	}
+
+	/* If the DUN wrapped through 0, don't treat it as contiguous. */
+	return carry == 0;
+}
+
+/*
+ * Checks that two bio crypt contexts are compatible - i.e. that
+ * they are mergeable except for data_unit_num continuity.
+ */
+static bool bio_crypt_ctx_compatible(struct bio_crypt_ctx *bc1,
+				     struct bio_crypt_ctx *bc2)
+{
+	if (!bc1)
+		return !bc2;
+
+	return bc2 && bc1->bc_key == bc2->bc_key;
+}
+
+bool bio_crypt_rq_ctx_compatible(struct request *rq, struct bio *bio)
+{
+	return bio_crypt_ctx_compatible(rq->crypt_ctx, bio->bi_crypt_context);
+}
+
+/*
+ * Checks that two bio crypt contexts are compatible, and also
+ * that their data_unit_nums are continuous (and can hence be merged)
+ * in the order @bc1 followed by @bc2.
+ */
+bool bio_crypt_ctx_mergeable(struct bio_crypt_ctx *bc1, unsigned int bc1_bytes,
+			     struct bio_crypt_ctx *bc2)
+{
+	if (!bio_crypt_ctx_compatible(bc1, bc2))
+		return false;
+
+	return !bc1 || bio_crypt_dun_is_contiguous(bc1, bc1_bytes, bc2->bc_dun);
+}
+
+/* Check that all I/O segments are data unit aligned. */
+static bool bio_crypt_check_alignment(struct bio *bio)
+{
+	const unsigned int data_unit_size =
+		bio->bi_crypt_context->bc_key->crypto_cfg.data_unit_size;
+	struct bvec_iter iter;
+	struct bio_vec bv;
+
+	bio_for_each_segment(bv, bio, iter) {
+		if (!IS_ALIGNED(bv.bv_len | bv.bv_offset, data_unit_size))
+			return false;
+	}
+
+	return true;
+}
+
+blk_status_t __blk_crypto_init_request(struct request *rq)
+{
+	return blk_ksm_get_slot_for_key(rq->q->ksm, rq->crypt_ctx->bc_key,
+					&rq->crypt_keyslot);
+}
+
+/**
+ * __blk_crypto_free_request - Uninitialize the crypto fields of a request.
+ *
+ * @rq: The request whose crypto fields to uninitialize.
+ *
+ * Completely uninitializes the crypto fields of a request. If a keyslot has
+ * been programmed into some inline encryption hardware, that keyslot is
+ * released. The rq->crypt_ctx is also freed.
+ */
+void __blk_crypto_free_request(struct request *rq)
+{
+	blk_ksm_put_slot(rq->crypt_keyslot);
+	mempool_free(rq->crypt_ctx, bio_crypt_ctx_pool);
+	blk_crypto_rq_set_defaults(rq);
+}
+
+/**
+ * __blk_crypto_bio_prep - Prepare bio for inline encryption
+ *
+ * @bio_ptr: pointer to original bio pointer
+ *
+ * If the bio crypt context provided for the bio is supported by the underlying
+ * device's inline encryption hardware, do nothing.
+ *
+ * Otherwise, try to perform en/decryption for this bio by falling back to the
+ * kernel crypto API. When the crypto API fallback is used for encryption,
+ * blk-crypto may choose to split the bio into 2 - the first one that will
+ * continue to be processed and the second one that will be resubmitted via
+ * generic_make_request. A bounce bio will be allocated to encrypt the contents
+ * of the aforementioned "first one", and *bio_ptr will be updated to this
+ * bounce bio.
+ *
+ * Caller must ensure bio has bio_crypt_ctx.
+ *
+ * Return: true on success; false on error (and bio->bi_status will be set
+ *	   appropriately, and bio_endio() will have been called so bio
+ *	   submission should abort).
+ */
+bool __blk_crypto_bio_prep(struct bio **bio_ptr)
+{
+	struct bio *bio = *bio_ptr;
+	const struct blk_crypto_key *bc_key = bio->bi_crypt_context->bc_key;
+
+	/* Error if bio has no data. */
+	if (WARN_ON_ONCE(!bio_has_data(bio))) {
+		bio->bi_status = BLK_STS_IOERR;
+		goto fail;
+	}
+
+	if (!bio_crypt_check_alignment(bio)) {
+		bio->bi_status = BLK_STS_IOERR;
+		goto fail;
+	}
+
+	/*
+	 * Success if device supports the encryption context, or if we succeeded
+	 * in falling back to the crypto API.
+	 */
+	if (blk_ksm_crypto_cfg_supported(bio->bi_disk->queue->ksm,
+					 &bc_key->crypto_cfg))
+		return true;
+
+	if (blk_crypto_fallback_bio_prep(bio_ptr))
+		return true;
+fail:
+	bio_endio(*bio_ptr);
+	return false;
+}
+
+int __blk_crypto_rq_bio_prep(struct request *rq, struct bio *bio,
+			     gfp_t gfp_mask)
+{
+	if (!rq->crypt_ctx) {
+		rq->crypt_ctx = mempool_alloc(bio_crypt_ctx_pool, gfp_mask);
+		if (!rq->crypt_ctx)
+			return -ENOMEM;
+	}
+	*rq->crypt_ctx = *bio->bi_crypt_context;
+	return 0;
+}
+
+/**
+ * blk_crypto_init_key() - Prepare a key for use with blk-crypto
+ * @blk_key: Pointer to the blk_crypto_key to initialize.
+ * @raw_key: Pointer to the raw key.
+ * @raw_key_size: Size of raw key.  Must be at least the required size for the
+ *                chosen @crypto_mode; see blk_crypto_modes[].  (It's allowed
+ *                to be longer than the mode's actual key size, in order to
+ *                support inline encryption hardware that accepts wrapped keys.
+ *                @is_hw_wrapped has to be set for such keys)
+ * @is_hw_wrapped: Denotes @raw_key is wrapped.
+ * @crypto_mode: identifier for the encryption algorithm to use
+ * @dun_bytes: number of bytes that will be used to specify the DUN when this
+ *	       key is used
+ * @data_unit_size: the data unit size to use for en/decryption
+ *
+ * Return: 0 on success, -errno on failure.  The caller is responsible for
+ *	   zeroizing both blk_key and raw_key when done with them.
+ */
+int blk_crypto_init_key(struct blk_crypto_key *blk_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped,
+			enum blk_crypto_mode_num crypto_mode,
+			unsigned int dun_bytes,
+			unsigned int data_unit_size)
+{
+	const struct blk_crypto_mode *mode;
+
+	memset(blk_key, 0, sizeof(*blk_key));
+
+	if (crypto_mode >= ARRAY_SIZE(blk_crypto_modes))
+		return -EINVAL;
+
+	BUILD_BUG_ON(BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE < BLK_CRYPTO_MAX_KEY_SIZE);
+
+	mode = &blk_crypto_modes[crypto_mode];
+	if (is_hw_wrapped) {
+		if (raw_key_size < mode->keysize ||
+		    raw_key_size > BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE)
+			return -EINVAL;
+	} else {
+		if (raw_key_size != mode->keysize)
+			return -EINVAL;
+	}
+
+	if (dun_bytes == 0 || dun_bytes > BLK_CRYPTO_MAX_IV_SIZE)
+		return -EINVAL;
+
+	if (!is_power_of_2(data_unit_size))
+		return -EINVAL;
+
+	blk_key->crypto_cfg.crypto_mode = crypto_mode;
+	blk_key->crypto_cfg.dun_bytes = dun_bytes;
+	blk_key->crypto_cfg.data_unit_size = data_unit_size;
+	blk_key->crypto_cfg.is_hw_wrapped = is_hw_wrapped;
+	blk_key->data_unit_size_bits = ilog2(data_unit_size);
+	blk_key->size = raw_key_size;
+	memcpy(blk_key->raw, raw_key, raw_key_size);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(blk_crypto_init_key);
+
+/*
+ * Check if bios with @cfg can be en/decrypted by blk-crypto (i.e. either the
+ * request queue it's submitted to supports inline crypto, or the
+ * blk-crypto-fallback is enabled and supports the cfg).
+ */
+bool blk_crypto_config_supported(struct request_queue *q,
+				 const struct blk_crypto_config *cfg)
+{
+	if (IS_ENABLED(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK) &&
+	    !cfg->is_hw_wrapped)
+		return true;
+	return blk_ksm_crypto_cfg_supported(q->ksm, cfg);
+}
+
+/**
+ * blk_crypto_start_using_key() - Start using a blk_crypto_key on a device
+ * @key: A key to use on the device
+ * @q: the request queue for the device
+ *
+ * Upper layers must call this function to ensure that either the hardware
+ * supports the key's crypto settings, or the crypto API fallback has transforms
+ * for the needed mode allocated and ready to go. This function may allocate
+ * an skcipher, and *should not* be called from the data path, since that might
+ * cause a deadlock
+ *
+ * Return: 0 on success; -ENOPKG if the hardware doesn't support the key and
+ *	   blk-crypto-fallback is either disabled or the needed algorithm
+ *	   is disabled in the crypto API; or another -errno code.
+ */
+int blk_crypto_start_using_key(const struct blk_crypto_key *key,
+			       struct request_queue *q)
+{
+	if (blk_ksm_crypto_cfg_supported(q->ksm, &key->crypto_cfg))
+		return 0;
+	if (key->crypto_cfg.is_hw_wrapped) {
+		pr_warn_once("hardware doesn't support wrapped keys\n");
+		return -EOPNOTSUPP;
+	}
+	return blk_crypto_fallback_start_using_mode(key->crypto_cfg.crypto_mode);
+}
+EXPORT_SYMBOL_GPL(blk_crypto_start_using_key);
+
+/**
+ * blk_crypto_evict_key() - Evict a key from any inline encryption hardware
+ *			    it may have been programmed into
+ * @q: The request queue who's associated inline encryption hardware this key
+ *     might have been programmed into
+ * @key: The key to evict
+ *
+ * Upper layers (filesystems) must call this function to ensure that a key is
+ * evicted from any hardware that it might have been programmed into.  The key
+ * must not be in use by any in-flight IO when this function is called.
+ *
+ * Return: 0 on success or if key is not present in the q's ksm, -err on error.
+ */
+int blk_crypto_evict_key(struct request_queue *q,
+			 const struct blk_crypto_key *key)
+{
+	if (blk_ksm_crypto_cfg_supported(q->ksm, &key->crypto_cfg))
+		return blk_ksm_evict_key(q->ksm, key);
+
+	/*
+	 * If the request queue's associated inline encryption hardware didn't
+	 * have support for the key, then the key might have been programmed
+	 * into the fallback keyslot manager, so try to evict from there.
+	 */
+	return blk_crypto_fallback_evict_key(key);
+}
+EXPORT_SYMBOL_GPL(blk_crypto_evict_key);
diff --git a/block/blk-integrity.c b/block/blk-integrity.c
index ff1070e..c03705c 100644
--- a/block/blk-integrity.c
+++ b/block/blk-integrity.c
@@ -409,6 +409,13 @@
 	bi->tag_size = template->tag_size;
 
 	disk->queue->backing_dev_info->capabilities |= BDI_CAP_STABLE_WRITES;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	if (disk->queue->ksm) {
+		pr_warn("blk-integrity: Integrity and hardware inline encryption are not supported together. Disabling hardware inline encryption.\n");
+		blk_ksm_unregister(disk->queue);
+	}
+#endif
 }
 EXPORT_SYMBOL(blk_integrity_register);
 
diff --git a/block/blk-map.c b/block/blk-map.c
index b079026..4484e37 100644
--- a/block/blk-map.c
+++ b/block/blk-map.c
@@ -41,6 +41,7 @@
 		rq->biotail->bi_next = *bio;
 		rq->biotail = *bio;
 		rq->__data_len += (*bio)->bi_iter.bi_size;
+		bio_crypt_free_ctx(*bio);
 	}
 
 	return 0;
diff --git a/block/blk-merge.c b/block/blk-merge.c
index 4b022f0..88decf7 100644
--- a/block/blk-merge.c
+++ b/block/blk-merge.c
@@ -600,6 +600,8 @@
 	if (blk_integrity_rq(req) &&
 	    integrity_req_gap_back_merge(req, bio))
 		return 0;
+	if (!bio_crypt_ctx_back_mergeable(req, bio))
+		return 0;
 	if (blk_rq_sectors(req) + bio_sectors(bio) >
 	    blk_rq_get_max_sectors(req, blk_rq_pos(req))) {
 		req_set_nomerge(req->q, req);
@@ -616,6 +618,8 @@
 	if (blk_integrity_rq(req) &&
 	    integrity_req_gap_front_merge(req, bio))
 		return 0;
+	if (!bio_crypt_ctx_front_mergeable(req, bio))
+		return 0;
 	if (blk_rq_sectors(req) + bio_sectors(bio) >
 	    blk_rq_get_max_sectors(req, bio->bi_iter.bi_sector)) {
 		req_set_nomerge(req->q, req);
@@ -665,6 +669,9 @@
 	if (blk_integrity_merge_rq(q, req, next) == false)
 		return 0;
 
+	if (!bio_crypt_ctx_merge_rq(req, next))
+		return 0;
+
 	/* Merge is OK... */
 	req->nr_phys_segments = total_phys_segments;
 	return 1;
@@ -889,6 +896,10 @@
 	if (blk_integrity_merge_bio(rq->q, rq, bio) == false)
 		return false;
 
+	/* Only merge if the crypt contexts are compatible */
+	if (!bio_crypt_rq_ctx_compatible(rq, bio))
+		return false;
+
 	/* must be using the same buffer */
 	if (req_op(rq) == REQ_OP_WRITE_SAME &&
 	    !blk_write_same_mergeable(rq->bio, bio))
diff --git a/block/blk-mq-virtio.c b/block/blk-mq-virtio.c
index 4883416..d2808e1 100644
--- a/block/blk-mq-virtio.c
+++ b/block/blk-mq-virtio.c
@@ -44,3 +44,6 @@
 	return blk_mq_map_queues(qmap);
 }
 EXPORT_SYMBOL_GPL(blk_mq_virtio_map_queues);
+
+MODULE_DESCRIPTION("Virtio Device Default Queue Mapping");
+MODULE_LICENSE("GPL v2");
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 84798d0..0ebcf39 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -26,6 +26,7 @@
 #include <linux/delay.h>
 #include <linux/crash_dump.h>
 #include <linux/prefetch.h>
+#include <linux/blk-crypto.h>
 
 #include <trace/events/block.h>
 
@@ -339,6 +340,7 @@
 #if defined(CONFIG_BLK_DEV_INTEGRITY)
 	rq->nr_integrity_segments = 0;
 #endif
+	blk_crypto_rq_set_defaults(rq);
 	/* tag was already set */
 	rq->extra_len = 0;
 	WRITE_ONCE(rq->deadline, 0);
@@ -496,6 +498,7 @@
 	struct blk_mq_hw_ctx *hctx = rq->mq_hctx;
 	const int sched_tag = rq->internal_tag;
 
+	blk_crypto_free_request(rq);
 	blk_pm_mark_last_busy(rq);
 	rq->mq_hctx = NULL;
 	if (rq->tag != -1)
@@ -1802,6 +1805,8 @@
 static void blk_mq_bio_to_request(struct request *rq, struct bio *bio,
 		unsigned int nr_segs)
 {
+	int err;
+
 	if (bio->bi_opf & REQ_RAHEAD)
 		rq->cmd_flags |= REQ_FAILFAST_MASK;
 
@@ -1809,6 +1814,10 @@
 	rq->write_hint = bio->bi_write_hint;
 	blk_rq_bio_prep(rq, bio, nr_segs);
 
+	/* This can't fail, since GFP_NOIO includes __GFP_DIRECT_RECLAIM. */
+	err = blk_crypto_rq_bio_prep(rq, bio, GFP_NOIO);
+	WARN_ON_ONCE(err);
+
 	blk_account_io_start(rq, true);
 }
 
@@ -1980,6 +1989,7 @@
 	struct request *same_queue_rq = NULL;
 	unsigned int nr_segs;
 	blk_qc_t cookie;
+	blk_status_t ret;
 
 	blk_queue_bounce(q, &bio);
 	__blk_queue_split(q, &bio, &nr_segs);
@@ -2013,6 +2023,14 @@
 
 	blk_mq_bio_to_request(rq, bio, nr_segs);
 
+	ret = blk_crypto_init_request(rq);
+	if (ret != BLK_STS_OK) {
+		bio->bi_status = ret;
+		bio_endio(bio);
+		blk_mq_free_request(rq);
+		return BLK_QC_T_NONE;
+	}
+
 	plug = blk_mq_plug(q, bio);
 	if (unlikely(is_flush_fua)) {
 		/* bypass scheduler for flush rq */
diff --git a/block/blk-pm.c b/block/blk-pm.c
index 2ccf88dba..17bd020 100644
--- a/block/blk-pm.c
+++ b/block/blk-pm.c
@@ -167,9 +167,8 @@
  *
  * Description:
  *    Update the queue's runtime status according to the return value of the
- *    device's runtime_resume function. If it is successfully resumed, process
- *    the requests that are queued into the device's queue when it is resuming
- *    and then mark last busy and initiate autosuspend for it.
+ *    device's runtime_resume function. If the resume was successful, call
+ *    blk_set_runtime_active() to do the real work of restarting the queue.
  *
  *    This function should be called near the end of the device's
  *    runtime_resume callback.
@@ -178,19 +177,13 @@
 {
 	if (!q->dev)
 		return;
-
-	spin_lock_irq(&q->queue_lock);
 	if (!err) {
-		q->rpm_status = RPM_ACTIVE;
-		pm_runtime_mark_last_busy(q->dev);
-		pm_request_autosuspend(q->dev);
+		blk_set_runtime_active(q);
 	} else {
+		spin_lock_irq(&q->queue_lock);
 		q->rpm_status = RPM_SUSPENDED;
+		spin_unlock_irq(&q->queue_lock);
 	}
-	spin_unlock_irq(&q->queue_lock);
-
-	if (!err)
-		blk_clear_pm_only(q);
 }
 EXPORT_SYMBOL(blk_post_runtime_resume);
 
@@ -207,15 +200,25 @@
  * This function can be used in driver's resume hook to correct queue
  * runtime PM status and re-enable peeking requests from the queue. It
  * should be called before first request is added to the queue.
+ *
+ * This function is also called by blk_post_runtime_resume() for successful
+ * runtime resumes.  It does everything necessary to restart the queue.
  */
 void blk_set_runtime_active(struct request_queue *q)
 {
-	if (q->dev) {
-		spin_lock_irq(&q->queue_lock);
-		q->rpm_status = RPM_ACTIVE;
-		pm_runtime_mark_last_busy(q->dev);
-		pm_request_autosuspend(q->dev);
-		spin_unlock_irq(&q->queue_lock);
-	}
+	int old_status;
+
+	if (!q->dev)
+		return;
+
+	spin_lock_irq(&q->queue_lock);
+	old_status = q->rpm_status;
+	q->rpm_status = RPM_ACTIVE;
+	pm_runtime_mark_last_busy(q->dev);
+	pm_request_autosuspend(q->dev);
+	spin_unlock_irq(&q->queue_lock);
+
+	if (old_status != RPM_ACTIVE)
+		blk_clear_pm_only(q);
 }
 EXPORT_SYMBOL(blk_set_runtime_active);
diff --git a/block/blk-zoned.c b/block/blk-zoned.c
index a85d0a0..c66a23d 100644
--- a/block/blk-zoned.c
+++ b/block/blk-zoned.c
@@ -70,135 +70,56 @@
 }
 EXPORT_SYMBOL_GPL(__blk_req_zone_write_unlock);
 
-static inline unsigned int __blkdev_nr_zones(struct request_queue *q,
-					     sector_t nr_sectors)
-{
-	sector_t zone_sectors = blk_queue_zone_sectors(q);
-
-	return (nr_sectors + zone_sectors - 1) >> ilog2(zone_sectors);
-}
-
 /**
  * blkdev_nr_zones - Get number of zones
- * @bdev:	Target block device
+ * @disk:	Target gendisk
  *
- * Description:
- *    Return the total number of zones of a zoned block device.
- *    For a regular block device, the number of zones is always 0.
+ * Return the total number of zones of a zoned block device.  For a block
+ * device without zone capabilities, the number of zones is always 0.
  */
-unsigned int blkdev_nr_zones(struct block_device *bdev)
+unsigned int blkdev_nr_zones(struct gendisk *disk)
 {
-	struct request_queue *q = bdev_get_queue(bdev);
+	sector_t zone_sectors = blk_queue_zone_sectors(disk->queue);
 
-	if (!blk_queue_is_zoned(q))
+	if (!blk_queue_is_zoned(disk->queue))
 		return 0;
-
-	return __blkdev_nr_zones(q, bdev->bd_part->nr_sects);
+	return (get_capacity(disk) + zone_sectors - 1) >> ilog2(zone_sectors);
 }
 EXPORT_SYMBOL_GPL(blkdev_nr_zones);
 
-/*
- * Check that a zone report belongs to this partition, and if yes, fix its start
- * sector and write pointer and return true. Return false otherwise.
- */
-static bool blkdev_report_zone(struct block_device *bdev, struct blk_zone *rep)
-{
-	sector_t offset = get_start_sect(bdev);
-
-	if (rep->start < offset)
-		return false;
-
-	rep->start -= offset;
-	if (rep->start + rep->len > bdev->bd_part->nr_sects)
-		return false;
-
-	if (rep->type == BLK_ZONE_TYPE_CONVENTIONAL)
-		rep->wp = rep->start + rep->len;
-	else
-		rep->wp -= offset;
-	return true;
-}
-
-static int blk_report_zones(struct gendisk *disk, sector_t sector,
-			    struct blk_zone *zones, unsigned int *nr_zones)
-{
-	struct request_queue *q = disk->queue;
-	unsigned int z = 0, n, nrz = *nr_zones;
-	sector_t capacity = get_capacity(disk);
-	int ret;
-
-	while (z < nrz && sector < capacity) {
-		n = nrz - z;
-		ret = disk->fops->report_zones(disk, sector, &zones[z], &n);
-		if (ret)
-			return ret;
-		if (!n)
-			break;
-		sector += blk_queue_zone_sectors(q) * n;
-		z += n;
-	}
-
-	WARN_ON(z > *nr_zones);
-	*nr_zones = z;
-
-	return 0;
-}
-
 /**
  * blkdev_report_zones - Get zones information
  * @bdev:	Target block device
  * @sector:	Sector from which to report zones
- * @zones:	Array of zone structures where to return the zones information
- * @nr_zones:	Number of zone structures in the zone array
+ * @nr_zones:	Maximum number of zones to report
+ * @cb:		Callback function called for each reported zone
+ * @data:	Private data for the callback
  *
  * Description:
- *    Get zone information starting from the zone containing @sector.
- *    The number of zone information reported may be less than the number
- *    requested by @nr_zones. The number of zones actually reported is
- *    returned in @nr_zones.
- *    The caller must use memalloc_noXX_save/restore() calls to control
- *    memory allocations done within this function (zone array and command
- *    buffer allocation by the device driver).
+ *    Get zone information starting from the zone containing @sector for at most
+ *    @nr_zones, and call @cb for each zone reported by the device.
+ *    To report all zones in a device starting from @sector, the BLK_ALL_ZONES
+ *    constant can be passed to @nr_zones.
+ *    Returns the number of zones reported by the device, or a negative errno
+ *    value in case of failure.
+ *
+ *    Note: The caller must use memalloc_noXX_save/restore() calls to control
+ *    memory allocations done within this function.
  */
 int blkdev_report_zones(struct block_device *bdev, sector_t sector,
-			struct blk_zone *zones, unsigned int *nr_zones)
+			unsigned int nr_zones, report_zones_cb cb, void *data)
 {
-	struct request_queue *q = bdev_get_queue(bdev);
-	unsigned int i, nrz;
-	int ret;
+	struct gendisk *disk = bdev->bd_disk;
+	sector_t capacity = get_capacity(disk);
 
-	if (!blk_queue_is_zoned(q))
+	if (!blk_queue_is_zoned(bdev_get_queue(bdev)) ||
+	    WARN_ON_ONCE(!disk->fops->report_zones))
 		return -EOPNOTSUPP;
 
-	/*
-	 * A block device that advertized itself as zoned must have a
-	 * report_zones method. If it does not have one defined, the device
-	 * driver has a bug. So warn about that.
-	 */
-	if (WARN_ON_ONCE(!bdev->bd_disk->fops->report_zones))
-		return -EOPNOTSUPP;
-
-	if (!*nr_zones || sector >= bdev->bd_part->nr_sects) {
-		*nr_zones = 0;
+	if (!nr_zones || sector >= capacity)
 		return 0;
-	}
 
-	nrz = min(*nr_zones,
-		  __blkdev_nr_zones(q, bdev->bd_part->nr_sects - sector));
-	ret = blk_report_zones(bdev->bd_disk, get_start_sect(bdev) + sector,
-			       zones, &nrz);
-	if (ret)
-		return ret;
-
-	for (i = 0; i < nrz; i++) {
-		if (!blkdev_report_zone(bdev, zones))
-			break;
-		zones++;
-	}
-
-	*nr_zones = i;
-
-	return 0;
+	return disk->fops->report_zones(disk, sector, nr_zones, cb, data);
 }
 EXPORT_SYMBOL_GPL(blkdev_report_zones);
 
@@ -209,38 +130,38 @@
 	if (!blk_queue_zone_resetall(bdev_get_queue(bdev)))
 		return false;
 
-	if (sector || nr_sectors != part_nr_sects_read(bdev->bd_part))
-		return false;
 	/*
-	 * REQ_OP_ZONE_RESET_ALL can be executed only if the block device is
-	 * the entire disk, that is, if the blocks device start offset is 0 and
-	 * its capacity is the same as the entire disk.
+	 * REQ_OP_ZONE_RESET_ALL can be executed only if the number of sectors
+	 * of the applicable zone range is the entire disk.
 	 */
-	return get_start_sect(bdev) == 0 &&
-	       part_nr_sects_read(bdev->bd_part) == get_capacity(bdev->bd_disk);
+	return !sector && nr_sectors == get_capacity(bdev->bd_disk);
 }
 
 /**
- * blkdev_reset_zones - Reset zones write pointer
+ * blkdev_zone_mgmt - Execute a zone management operation on a range of zones
  * @bdev:	Target block device
- * @sector:	Start sector of the first zone to reset
- * @nr_sectors:	Number of sectors, at least the length of one zone
+ * @op:		Operation to be performed on the zones
+ * @sector:	Start sector of the first zone to operate on
+ * @nr_sectors:	Number of sectors, should be at least the length of one zone and
+ *		must be zone size aligned.
  * @gfp_mask:	Memory allocation flags (for bio_alloc)
  *
  * Description:
- *    Reset the write pointer of the zones contained in the range
+ *    Perform the specified operation on the range of zones specified by
  *    @sector..@sector+@nr_sectors. Specifying the entire disk sector range
  *    is valid, but the specified range should not contain conventional zones.
+ *    The operation to execute on each zone can be a zone reset, open, close
+ *    or finish request.
  */
-int blkdev_reset_zones(struct block_device *bdev,
-		       sector_t sector, sector_t nr_sectors,
-		       gfp_t gfp_mask)
+int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
+		     sector_t sector, sector_t nr_sectors,
+		     gfp_t gfp_mask)
 {
 	struct request_queue *q = bdev_get_queue(bdev);
-	sector_t zone_sectors;
+	sector_t zone_sectors = blk_queue_zone_sectors(q);
+	sector_t capacity = get_capacity(bdev->bd_disk);
 	sector_t end_sector = sector + nr_sectors;
 	struct bio *bio = NULL;
-	struct blk_plug plug;
 	int ret;
 
 	if (!blk_queue_is_zoned(q))
@@ -249,20 +170,20 @@
 	if (bdev_read_only(bdev))
 		return -EPERM;
 
-	if (!nr_sectors || end_sector > bdev->bd_part->nr_sects)
+	if (!op_is_zone_mgmt(op))
+		return -EOPNOTSUPP;
+
+	if (!nr_sectors || end_sector > capacity)
 		/* Out of range */
 		return -EINVAL;
 
 	/* Check alignment (handle eventual smaller last zone) */
-	zone_sectors = blk_queue_zone_sectors(q);
 	if (sector & (zone_sectors - 1))
 		return -EINVAL;
 
-	if ((nr_sectors & (zone_sectors - 1)) &&
-	    end_sector != bdev->bd_part->nr_sects)
+	if ((nr_sectors & (zone_sectors - 1)) && end_sector != capacity)
 		return -EINVAL;
 
-	blk_start_plug(&plug);
 	while (sector < end_sector) {
 		bio = blk_next_bio(bio, 0, gfp_mask);
 		bio_set_dev(bio, bdev);
@@ -271,12 +192,13 @@
 		 * Special case for the zone reset operation that reset all
 		 * zones, this is useful for applications like mkfs.
 		 */
-		if (blkdev_allow_reset_all_zones(bdev, sector, nr_sectors)) {
+		if (op == REQ_OP_ZONE_RESET &&
+		    blkdev_allow_reset_all_zones(bdev, sector, nr_sectors)) {
 			bio->bi_opf = REQ_OP_ZONE_RESET_ALL;
 			break;
 		}
 
-		bio->bi_opf = REQ_OP_ZONE_RESET;
+		bio->bi_opf = op;
 		bio->bi_iter.bi_sector = sector;
 		sector += zone_sectors;
 
@@ -287,11 +209,23 @@
 	ret = submit_bio_wait(bio);
 	bio_put(bio);
 
-	blk_finish_plug(&plug);
-
 	return ret;
 }
-EXPORT_SYMBOL_GPL(blkdev_reset_zones);
+EXPORT_SYMBOL_GPL(blkdev_zone_mgmt);
+
+struct zone_report_args {
+	struct blk_zone __user *zones;
+};
+
+static int blkdev_copy_zone_to_user(struct blk_zone *zone, unsigned int idx,
+				    void *data)
+{
+	struct zone_report_args *args = data;
+
+	if (copy_to_user(&args->zones[idx], zone, sizeof(struct blk_zone)))
+		return -EFAULT;
+	return 0;
+}
 
 /*
  * BLKREPORTZONE ioctl processing.
@@ -301,9 +235,9 @@
 			      unsigned int cmd, unsigned long arg)
 {
 	void __user *argp = (void __user *)arg;
+	struct zone_report_args args;
 	struct request_queue *q;
 	struct blk_zone_report rep;
-	struct blk_zone *zones;
 	int ret;
 
 	if (!argp)
@@ -322,44 +256,30 @@
 	if (!rep.nr_zones)
 		return -EINVAL;
 
-	rep.nr_zones = min(blkdev_nr_zones(bdev), rep.nr_zones);
+	args.zones = argp + sizeof(struct blk_zone_report);
+	ret = blkdev_report_zones(bdev, rep.sector, rep.nr_zones,
+				  blkdev_copy_zone_to_user, &args);
+	if (ret < 0)
+		return ret;
 
-	zones = kvmalloc_array(rep.nr_zones, sizeof(struct blk_zone),
-			       GFP_KERNEL | __GFP_ZERO);
-	if (!zones)
-		return -ENOMEM;
-
-	ret = blkdev_report_zones(bdev, rep.sector, zones, &rep.nr_zones);
-	if (ret)
-		goto out;
-
-	if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report))) {
-		ret = -EFAULT;
-		goto out;
-	}
-
-	if (rep.nr_zones) {
-		if (copy_to_user(argp + sizeof(struct blk_zone_report), zones,
-				 sizeof(struct blk_zone) * rep.nr_zones))
-			ret = -EFAULT;
-	}
-
- out:
-	kvfree(zones);
-
-	return ret;
+	rep.nr_zones = ret;
+	rep.flags = BLK_ZONE_REP_CAPACITY;
+	if (copy_to_user(argp, &rep, sizeof(struct blk_zone_report)))
+		return -EFAULT;
+	return 0;
 }
 
 /*
- * BLKRESETZONE ioctl processing.
+ * BLKRESETZONE, BLKOPENZONE, BLKCLOSEZONE and BLKFINISHZONE ioctl processing.
  * Called from blkdev_ioctl.
  */
-int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
-			     unsigned int cmd, unsigned long arg)
+int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
+			   unsigned int cmd, unsigned long arg)
 {
 	void __user *argp = (void __user *)arg;
 	struct request_queue *q;
 	struct blk_zone_range zrange;
+	enum req_opf op;
 
 	if (!argp)
 		return -EINVAL;
@@ -377,8 +297,25 @@
 	if (copy_from_user(&zrange, argp, sizeof(struct blk_zone_range)))
 		return -EFAULT;
 
-	return blkdev_reset_zones(bdev, zrange.sector, zrange.nr_sectors,
-				  GFP_KERNEL);
+	switch (cmd) {
+	case BLKRESETZONE:
+		op = REQ_OP_ZONE_RESET;
+		break;
+	case BLKOPENZONE:
+		op = REQ_OP_ZONE_OPEN;
+		break;
+	case BLKCLOSEZONE:
+		op = REQ_OP_ZONE_CLOSE;
+		break;
+	case BLKFINISHZONE:
+		op = REQ_OP_ZONE_FINISH;
+		break;
+	default:
+		return -ENOTTY;
+	}
+
+	return blkdev_zone_mgmt(bdev, op, zrange.sector, zrange.nr_sectors,
+				GFP_KERNEL);
 }
 
 static inline unsigned long *blk_alloc_zone_bitmap(int node,
@@ -388,141 +325,151 @@
 			    GFP_NOIO, node);
 }
 
-/*
- * Allocate an array of struct blk_zone to get nr_zones zone information.
- * The allocated array may be smaller than nr_zones.
- */
-static struct blk_zone *blk_alloc_zones(unsigned int *nr_zones)
-{
-	struct blk_zone *zones;
-	size_t nrz = min(*nr_zones, BLK_ZONED_REPORT_MAX_ZONES);
-
-	/*
-	 * GFP_KERNEL here is meaningless as the caller task context has
-	 * the PF_MEMALLOC_NOIO flag set in blk_revalidate_disk_zones()
-	 * with memalloc_noio_save().
-	 */
-	zones = kvcalloc(nrz, sizeof(struct blk_zone), GFP_KERNEL);
-	if (!zones) {
-		*nr_zones = 0;
-		return NULL;
-	}
-
-	*nr_zones = nrz;
-
-	return zones;
-}
-
 void blk_queue_free_zone_bitmaps(struct request_queue *q)
 {
-	kfree(q->seq_zones_bitmap);
-	q->seq_zones_bitmap = NULL;
+	kfree(q->conv_zones_bitmap);
+	q->conv_zones_bitmap = NULL;
 	kfree(q->seq_zones_wlock);
 	q->seq_zones_wlock = NULL;
 }
 
+struct blk_revalidate_zone_args {
+	struct gendisk	*disk;
+	unsigned long	*conv_zones_bitmap;
+	unsigned long	*seq_zones_wlock;
+	unsigned int	nr_zones;
+	sector_t	zone_sectors;
+	sector_t	sector;
+};
+
+/*
+ * Helper function to check the validity of zones of a zoned block device.
+ */
+static int blk_revalidate_zone_cb(struct blk_zone *zone, unsigned int idx,
+				  void *data)
+{
+	struct blk_revalidate_zone_args *args = data;
+	struct gendisk *disk = args->disk;
+	struct request_queue *q = disk->queue;
+	sector_t capacity = get_capacity(disk);
+
+	/*
+	 * All zones must have the same size, with the exception on an eventual
+	 * smaller last zone.
+	 */
+	if (zone->start == 0) {
+		if (zone->len == 0 || !is_power_of_2(zone->len)) {
+			pr_warn("%s: Invalid zoned device with non power of two zone size (%llu)\n",
+				disk->disk_name, zone->len);
+			return -ENODEV;
+		}
+
+		args->zone_sectors = zone->len;
+		args->nr_zones = (capacity + zone->len - 1) >> ilog2(zone->len);
+	} else if (zone->start + args->zone_sectors < capacity) {
+		if (zone->len != args->zone_sectors) {
+			pr_warn("%s: Invalid zoned device with non constant zone size\n",
+				disk->disk_name);
+			return -ENODEV;
+		}
+	} else {
+		if (zone->len > args->zone_sectors) {
+			pr_warn("%s: Invalid zoned device with larger last zone size\n",
+				disk->disk_name);
+			return -ENODEV;
+		}
+	}
+
+	/* Check for holes in the zone report */
+	if (zone->start != args->sector) {
+		pr_warn("%s: Zone gap at sectors %llu..%llu\n",
+			disk->disk_name, args->sector, zone->start);
+		return -ENODEV;
+	}
+
+	/* Check zone type */
+	switch (zone->type) {
+	case BLK_ZONE_TYPE_CONVENTIONAL:
+		if (!args->conv_zones_bitmap) {
+			args->conv_zones_bitmap =
+				blk_alloc_zone_bitmap(q->node, args->nr_zones);
+			if (!args->conv_zones_bitmap)
+				return -ENOMEM;
+		}
+		set_bit(idx, args->conv_zones_bitmap);
+		break;
+	case BLK_ZONE_TYPE_SEQWRITE_REQ:
+	case BLK_ZONE_TYPE_SEQWRITE_PREF:
+		if (!args->seq_zones_wlock) {
+			args->seq_zones_wlock =
+				blk_alloc_zone_bitmap(q->node, args->nr_zones);
+			if (!args->seq_zones_wlock)
+				return -ENOMEM;
+		}
+		break;
+	default:
+		pr_warn("%s: Invalid zone type 0x%x at sectors %llu\n",
+			disk->disk_name, (int)zone->type, zone->start);
+		return -ENODEV;
+	}
+
+	args->sector += zone->len;
+	return 0;
+}
+
 /**
  * blk_revalidate_disk_zones - (re)allocate and initialize zone bitmaps
  * @disk:	Target disk
  *
  * Helper function for low-level device drivers to (re) allocate and initialize
  * a disk request queue zone bitmaps. This functions should normally be called
- * within the disk ->revalidate method. For BIO based queues, no zone bitmap
- * is allocated.
+ * within the disk ->revalidate method for blk-mq based drivers.  For BIO based
+ * drivers only q->nr_zones needs to be updated so that the sysfs exposed value
+ * is correct.
  */
 int blk_revalidate_disk_zones(struct gendisk *disk)
 {
 	struct request_queue *q = disk->queue;
-	unsigned int nr_zones = __blkdev_nr_zones(q, get_capacity(disk));
-	unsigned long *seq_zones_wlock = NULL, *seq_zones_bitmap = NULL;
-	unsigned int i, rep_nr_zones = 0, z = 0, nrz;
-	struct blk_zone *zones = NULL;
+	struct blk_revalidate_zone_args args = {
+		.disk		= disk,
+	};
 	unsigned int noio_flag;
-	sector_t sector = 0;
-	int ret = 0;
+	int ret;
+
+	if (WARN_ON_ONCE(!blk_queue_is_zoned(q)))
+		return -EIO;
+	if (WARN_ON_ONCE(!queue_is_mq(q)))
+		return -EIO;
 
 	/*
-	 * BIO based queues do not use a scheduler so only q->nr_zones
-	 * needs to be updated so that the sysfs exposed value is correct.
-	 */
-	if (!queue_is_mq(q)) {
-		q->nr_zones = nr_zones;
-		return 0;
-	}
-
-	/*
-	 * Ensure that all memory allocations in this context are done as
-	 * if GFP_NOIO was specified.
+	 * Ensure that all memory allocations in this context are done as if
+	 * GFP_NOIO was specified.
 	 */
 	noio_flag = memalloc_noio_save();
-
-	if (!blk_queue_is_zoned(q) || !nr_zones) {
-		nr_zones = 0;
-		goto update;
-	}
-
-	/* Allocate bitmaps */
-	ret = -ENOMEM;
-	seq_zones_wlock = blk_alloc_zone_bitmap(q->node, nr_zones);
-	if (!seq_zones_wlock)
-		goto out;
-	seq_zones_bitmap = blk_alloc_zone_bitmap(q->node, nr_zones);
-	if (!seq_zones_bitmap)
-		goto out;
-
-	/* Get zone information and initialize seq_zones_bitmap */
-	rep_nr_zones = nr_zones;
-	zones = blk_alloc_zones(&rep_nr_zones);
-	if (!zones)
-		goto out;
-
-	while (z < nr_zones) {
-		nrz = min(nr_zones - z, rep_nr_zones);
-		ret = blk_report_zones(disk, sector, zones, &nrz);
-		if (ret)
-			goto out;
-		if (!nrz)
-			break;
-		for (i = 0; i < nrz; i++) {
-			if (zones[i].type != BLK_ZONE_TYPE_CONVENTIONAL)
-				set_bit(z, seq_zones_bitmap);
-			z++;
-		}
-		sector += nrz * blk_queue_zone_sectors(q);
-	}
-
-	if (WARN_ON(z != nr_zones)) {
-		ret = -EIO;
-		goto out;
-	}
-
-update:
-	/*
-	 * Install the new bitmaps, making sure the queue is stopped and
-	 * all I/Os are completed (i.e. a scheduler is not referencing the
-	 * bitmaps).
-	 */
-	blk_mq_freeze_queue(q);
-	q->nr_zones = nr_zones;
-	swap(q->seq_zones_wlock, seq_zones_wlock);
-	swap(q->seq_zones_bitmap, seq_zones_bitmap);
-	blk_mq_unfreeze_queue(q);
-
-out:
+	ret = disk->fops->report_zones(disk, 0, UINT_MAX,
+				       blk_revalidate_zone_cb, &args);
 	memalloc_noio_restore(noio_flag);
 
-	kvfree(zones);
-	kfree(seq_zones_wlock);
-	kfree(seq_zones_bitmap);
-
-	if (ret) {
+	/*
+	 * Install the new bitmaps and update nr_zones only once the queue is
+	 * stopped and all I/Os are completed (i.e. a scheduler is not
+	 * referencing the bitmaps).
+	 */
+	blk_mq_freeze_queue(q);
+	if (ret >= 0) {
+		blk_queue_chunk_sectors(q, args.zone_sectors);
+		q->nr_zones = args.nr_zones;
+		swap(q->seq_zones_wlock, args.seq_zones_wlock);
+		swap(q->conv_zones_bitmap, args.conv_zones_bitmap);
+		ret = 0;
+	} else {
 		pr_warn("%s: failed to revalidate zones\n", disk->disk_name);
-		blk_mq_freeze_queue(q);
 		blk_queue_free_zone_bitmaps(q);
-		blk_mq_unfreeze_queue(q);
 	}
+	blk_mq_unfreeze_queue(q);
 
+	kfree(args.seq_zones_wlock);
+	kfree(args.conv_zones_bitmap);
 	return ret;
 }
 EXPORT_SYMBOL_GPL(blk_revalidate_disk_zones);
-
diff --git a/block/blk.h b/block/blk.h
index ee3d566..b8920c0 100644
--- a/block/blk.h
+++ b/block/blk.h
@@ -4,7 +4,9 @@
 
 #include <linux/idr.h>
 #include <linux/blk-mq.h>
+#include <linux/blk-crypto.h>
 #include <xen/xen.h>
+#include "blk-crypto-internal.h"
 #include "blk-mq.h"
 #include "blk-mq-sched.h"
 
diff --git a/block/bounce.c b/block/bounce.c
index f8ed677..9bb8e84 100644
--- a/block/bounce.c
+++ b/block/bounce.c
@@ -267,20 +267,21 @@
 		break;
 	}
 
-	if (bio_integrity(bio_src)) {
-		int ret;
+	if (bio_crypt_clone(bio, bio_src, gfp_mask) < 0)
+		goto err_put;
 
-		ret = bio_integrity_clone(bio, bio_src, gfp_mask);
-		if (ret < 0) {
-			bio_put(bio);
-			return NULL;
-		}
-	}
+	if (bio_integrity(bio_src) &&
+	    bio_integrity_clone(bio, bio_src, gfp_mask) < 0)
+		goto err_put;
 
 	bio_clone_blkg_association(bio, bio_src);
 	blkcg_bio_issue_init(bio);
 
 	return bio;
+
+err_put:
+	bio_put(bio);
+	return NULL;
 }
 
 static void __blk_queue_bounce(struct request_queue *q, struct bio **bio_orig,
diff --git a/block/ioctl.c b/block/ioctl.c
index 15a0eb8..f5565dd 100644
--- a/block/ioctl.c
+++ b/block/ioctl.c
@@ -532,11 +532,14 @@
 	case BLKREPORTZONE:
 		return blkdev_report_zones_ioctl(bdev, mode, cmd, arg);
 	case BLKRESETZONE:
-		return blkdev_reset_zones_ioctl(bdev, mode, cmd, arg);
+	case BLKOPENZONE:
+	case BLKCLOSEZONE:
+	case BLKFINISHZONE:
+		return blkdev_zone_mgmt_ioctl(bdev, mode, cmd, arg);
 	case BLKGETZONESZ:
 		return put_uint(arg, bdev_zone_sectors(bdev));
 	case BLKGETNRZONES:
-		return put_uint(arg, blkdev_nr_zones(bdev));
+		return put_uint(arg, blkdev_nr_zones(bdev->bd_disk));
 	case HDIO_GETGEO:
 		return blkdev_getgeo(bdev, argp);
 	case BLKRAGET:
diff --git a/block/keyslot-manager.c b/block/keyslot-manager.c
new file mode 100644
index 0000000..2f741be
--- /dev/null
+++ b/block/keyslot-manager.c
@@ -0,0 +1,631 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+/**
+ * DOC: The Keyslot Manager
+ *
+ * Many devices with inline encryption support have a limited number of "slots"
+ * into which encryption contexts may be programmed, and requests can be tagged
+ * with a slot number to specify the key to use for en/decryption.
+ *
+ * As the number of slots is limited, and programming keys is expensive on
+ * many inline encryption hardware, we don't want to program the same key into
+ * multiple slots - if multiple requests are using the same key, we want to
+ * program just one slot with that key and use that slot for all requests.
+ *
+ * The keyslot manager manages these keyslots appropriately, and also acts as
+ * an abstraction between the inline encryption hardware and the upper layers.
+ *
+ * Lower layer devices will set up a keyslot manager in their request queue
+ * and tell it how to perform device specific operations like programming/
+ * evicting keys from keyslots.
+ *
+ * Upper layers will call blk_ksm_get_slot_for_key() to program a
+ * key into some slot in the inline encryption hardware.
+ */
+
+#define pr_fmt(fmt) "blk-crypto: " fmt
+
+#include <linux/keyslot-manager.h>
+#include <linux/device.h>
+#include <linux/atomic.h>
+#include <linux/mutex.h>
+#include <linux/pm_runtime.h>
+#include <linux/wait.h>
+#include <linux/blkdev.h>
+
+struct blk_ksm_keyslot {
+	atomic_t slot_refs;
+	struct list_head idle_slot_node;
+	struct hlist_node hash_node;
+	const struct blk_crypto_key *key;
+	struct blk_keyslot_manager *ksm;
+};
+
+static inline void blk_ksm_hw_enter(struct blk_keyslot_manager *ksm)
+{
+	/*
+	 * Calling into the driver requires ksm->lock held and the device
+	 * resumed.  But we must resume the device first, since that can acquire
+	 * and release ksm->lock via blk_ksm_reprogram_all_keys().
+	 */
+	if (ksm->dev)
+		pm_runtime_get_sync(ksm->dev);
+	down_write(&ksm->lock);
+}
+
+static inline void blk_ksm_hw_exit(struct blk_keyslot_manager *ksm)
+{
+	up_write(&ksm->lock);
+	if (ksm->dev)
+		pm_runtime_put_sync(ksm->dev);
+}
+
+static inline bool blk_ksm_is_passthrough(struct blk_keyslot_manager *ksm)
+{
+	return ksm->num_slots == 0;
+}
+
+/**
+ * blk_ksm_init() - Initialize a keyslot manager
+ * @ksm: The keyslot_manager to initialize.
+ * @num_slots: The number of key slots to manage.
+ *
+ * Allocate memory for keyslots and initialize a keyslot manager. Called by
+ * e.g. storage drivers to set up a keyslot manager in their request_queue.
+ *
+ * Return: 0 on success, or else a negative error code.
+ */
+int blk_ksm_init(struct blk_keyslot_manager *ksm, unsigned int num_slots)
+{
+	unsigned int slot;
+	unsigned int i;
+	unsigned int slot_hashtable_size;
+
+	memset(ksm, 0, sizeof(*ksm));
+
+	if (num_slots == 0)
+		return -EINVAL;
+
+	ksm->slots = kvcalloc(num_slots, sizeof(ksm->slots[0]), GFP_KERNEL);
+	if (!ksm->slots)
+		return -ENOMEM;
+
+	ksm->num_slots = num_slots;
+
+	init_rwsem(&ksm->lock);
+
+	init_waitqueue_head(&ksm->idle_slots_wait_queue);
+	INIT_LIST_HEAD(&ksm->idle_slots);
+
+	for (slot = 0; slot < num_slots; slot++) {
+		ksm->slots[slot].ksm = ksm;
+		list_add_tail(&ksm->slots[slot].idle_slot_node,
+			      &ksm->idle_slots);
+	}
+
+	spin_lock_init(&ksm->idle_slots_lock);
+
+	slot_hashtable_size = roundup_pow_of_two(num_slots);
+	/*
+	 * hash_ptr() assumes bits != 0, so ensure the hash table has at least 2
+	 * buckets.  This only makes a difference when there is only 1 keyslot.
+	 */
+	if (slot_hashtable_size < 2)
+		slot_hashtable_size = 2;
+
+	ksm->log_slot_ht_size = ilog2(slot_hashtable_size);
+	ksm->slot_hashtable = kvmalloc_array(slot_hashtable_size,
+					     sizeof(ksm->slot_hashtable[0]),
+					     GFP_KERNEL);
+	if (!ksm->slot_hashtable)
+		goto err_destroy_ksm;
+	for (i = 0; i < slot_hashtable_size; i++)
+		INIT_HLIST_HEAD(&ksm->slot_hashtable[i]);
+
+	return 0;
+
+err_destroy_ksm:
+	blk_ksm_destroy(ksm);
+	return -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_init);
+
+static void blk_ksm_destroy_callback(void *ksm)
+{
+	blk_ksm_destroy(ksm);
+}
+
+/**
+ * devm_blk_ksm_init() - Resource-managed blk_ksm_init()
+ * @dev: The device which owns the blk_keyslot_manager.
+ * @ksm: The blk_keyslot_manager to initialize.
+ * @num_slots: The number of key slots to manage.
+ *
+ * Like blk_ksm_init(), but causes blk_ksm_destroy() to be called automatically
+ * on driver detach.
+ *
+ * Return: 0 on success, or else a negative error code.
+ */
+int devm_blk_ksm_init(struct device *dev, struct blk_keyslot_manager *ksm,
+		      unsigned int num_slots)
+{
+	int err = blk_ksm_init(ksm, num_slots);
+
+	if (err)
+		return err;
+
+	return devm_add_action_or_reset(dev, blk_ksm_destroy_callback, ksm);
+}
+EXPORT_SYMBOL_GPL(devm_blk_ksm_init);
+
+static inline struct hlist_head *
+blk_ksm_hash_bucket_for_key(struct blk_keyslot_manager *ksm,
+			    const struct blk_crypto_key *key)
+{
+	return &ksm->slot_hashtable[hash_ptr(key, ksm->log_slot_ht_size)];
+}
+
+static void blk_ksm_remove_slot_from_lru_list(struct blk_ksm_keyslot *slot)
+{
+	struct blk_keyslot_manager *ksm = slot->ksm;
+	unsigned long flags;
+
+	spin_lock_irqsave(&ksm->idle_slots_lock, flags);
+	list_del(&slot->idle_slot_node);
+	spin_unlock_irqrestore(&ksm->idle_slots_lock, flags);
+}
+
+static struct blk_ksm_keyslot *blk_ksm_find_keyslot(
+					struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key)
+{
+	const struct hlist_head *head = blk_ksm_hash_bucket_for_key(ksm, key);
+	struct blk_ksm_keyslot *slotp;
+
+	hlist_for_each_entry(slotp, head, hash_node) {
+		if (slotp->key == key)
+			return slotp;
+	}
+	return NULL;
+}
+
+static struct blk_ksm_keyslot *blk_ksm_find_and_grab_keyslot(
+					struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key)
+{
+	struct blk_ksm_keyslot *slot;
+
+	slot = blk_ksm_find_keyslot(ksm, key);
+	if (!slot)
+		return NULL;
+	if (atomic_inc_return(&slot->slot_refs) == 1) {
+		/* Took first reference to this slot; remove it from LRU list */
+		blk_ksm_remove_slot_from_lru_list(slot);
+	}
+	return slot;
+}
+
+unsigned int blk_ksm_get_slot_idx(struct blk_ksm_keyslot *slot)
+{
+	return slot - slot->ksm->slots;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_get_slot_idx);
+
+/**
+ * blk_ksm_get_slot_for_key() - Program a key into a keyslot.
+ * @ksm: The keyslot manager to program the key into.
+ * @key: Pointer to the key object to program, including the raw key, crypto
+ *	 mode, and data unit size.
+ * @slot_ptr: A pointer to return the pointer of the allocated keyslot.
+ *
+ * Get a keyslot that's been programmed with the specified key.  If one already
+ * exists, return it with incremented refcount.  Otherwise, wait for a keyslot
+ * to become idle and program it.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ * Return: BLK_STS_OK on success (and keyslot is set to the pointer of the
+ *	   allocated keyslot), or some other blk_status_t otherwise (and
+ *	   keyslot is set to NULL).
+ */
+blk_status_t blk_ksm_get_slot_for_key(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      struct blk_ksm_keyslot **slot_ptr)
+{
+	struct blk_ksm_keyslot *slot;
+	int slot_idx;
+	int err;
+
+	*slot_ptr = NULL;
+
+	if (blk_ksm_is_passthrough(ksm))
+		return BLK_STS_OK;
+
+	down_read(&ksm->lock);
+	slot = blk_ksm_find_and_grab_keyslot(ksm, key);
+	up_read(&ksm->lock);
+	if (slot)
+		goto success;
+
+	for (;;) {
+		blk_ksm_hw_enter(ksm);
+		slot = blk_ksm_find_and_grab_keyslot(ksm, key);
+		if (slot) {
+			blk_ksm_hw_exit(ksm);
+			goto success;
+		}
+
+		/*
+		 * If we're here, that means there wasn't a slot that was
+		 * already programmed with the key. So try to program it.
+		 */
+		if (!list_empty(&ksm->idle_slots))
+			break;
+
+		blk_ksm_hw_exit(ksm);
+		wait_event(ksm->idle_slots_wait_queue,
+			   !list_empty(&ksm->idle_slots));
+	}
+
+	slot = list_first_entry(&ksm->idle_slots, struct blk_ksm_keyslot,
+				idle_slot_node);
+	slot_idx = blk_ksm_get_slot_idx(slot);
+
+	err = ksm->ksm_ll_ops.keyslot_program(ksm, key, slot_idx);
+	if (err) {
+		wake_up(&ksm->idle_slots_wait_queue);
+		blk_ksm_hw_exit(ksm);
+		return errno_to_blk_status(err);
+	}
+
+	/* Move this slot to the hash list for the new key. */
+	if (slot->key)
+		hlist_del(&slot->hash_node);
+	slot->key = key;
+	hlist_add_head(&slot->hash_node, blk_ksm_hash_bucket_for_key(ksm, key));
+
+	atomic_set(&slot->slot_refs, 1);
+
+	blk_ksm_remove_slot_from_lru_list(slot);
+
+	blk_ksm_hw_exit(ksm);
+success:
+	*slot_ptr = slot;
+	return BLK_STS_OK;
+}
+
+/**
+ * blk_ksm_put_slot() - Release a reference to a slot
+ * @slot: The keyslot to release the reference of.
+ *
+ * Context: Any context.
+ */
+void blk_ksm_put_slot(struct blk_ksm_keyslot *slot)
+{
+	struct blk_keyslot_manager *ksm;
+	unsigned long flags;
+
+	if (!slot)
+		return;
+
+	ksm = slot->ksm;
+
+	if (atomic_dec_and_lock_irqsave(&slot->slot_refs,
+					&ksm->idle_slots_lock, flags)) {
+		list_add_tail(&slot->idle_slot_node, &ksm->idle_slots);
+		spin_unlock_irqrestore(&ksm->idle_slots_lock, flags);
+		wake_up(&ksm->idle_slots_wait_queue);
+	}
+}
+
+/**
+ * blk_ksm_crypto_cfg_supported() - Find out if a crypto configuration is
+ *				    supported by a ksm.
+ * @ksm: The keyslot manager to check
+ * @cfg: The crypto configuration to check for.
+ *
+ * Checks for crypto_mode/data unit size/dun bytes support.
+ *
+ * Return: Whether or not this ksm supports the specified crypto config.
+ */
+bool blk_ksm_crypto_cfg_supported(struct blk_keyslot_manager *ksm,
+				  const struct blk_crypto_config *cfg)
+{
+	if (!ksm)
+		return false;
+	if (!(ksm->crypto_modes_supported[cfg->crypto_mode] &
+	      cfg->data_unit_size))
+		return false;
+	if (ksm->max_dun_bytes_supported < cfg->dun_bytes)
+		return false;
+	if (cfg->is_hw_wrapped) {
+		if (!(ksm->features & BLK_CRYPTO_FEATURE_WRAPPED_KEYS))
+			return false;
+	} else {
+		if (!(ksm->features & BLK_CRYPTO_FEATURE_STANDARD_KEYS))
+			return false;
+	}
+	return true;
+}
+
+/**
+ * blk_ksm_evict_key() - Evict a key from the lower layer device.
+ * @ksm: The keyslot manager to evict from
+ * @key: The key to evict
+ *
+ * Find the keyslot that the specified key was programmed into, and evict that
+ * slot from the lower layer device. The slot must not be in use by any
+ * in-flight IO when this function is called.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ * Return: 0 on success or if there's no keyslot with the specified key, -EBUSY
+ *	   if the keyslot is still in use, or another -errno value on other
+ *	   error.
+ */
+int blk_ksm_evict_key(struct blk_keyslot_manager *ksm,
+		      const struct blk_crypto_key *key)
+{
+	struct blk_ksm_keyslot *slot;
+	int err = 0;
+
+	if (blk_ksm_is_passthrough(ksm)) {
+		if (ksm->ksm_ll_ops.keyslot_evict) {
+			blk_ksm_hw_enter(ksm);
+			err = ksm->ksm_ll_ops.keyslot_evict(ksm, key, -1);
+			blk_ksm_hw_exit(ksm);
+			return err;
+		}
+		return 0;
+	}
+
+	blk_ksm_hw_enter(ksm);
+	slot = blk_ksm_find_keyslot(ksm, key);
+	if (!slot)
+		goto out_unlock;
+
+	if (WARN_ON_ONCE(atomic_read(&slot->slot_refs) != 0)) {
+		err = -EBUSY;
+		goto out_unlock;
+	}
+	err = ksm->ksm_ll_ops.keyslot_evict(ksm, key,
+					    blk_ksm_get_slot_idx(slot));
+	if (err)
+		goto out_unlock;
+
+	hlist_del(&slot->hash_node);
+	slot->key = NULL;
+	err = 0;
+out_unlock:
+	blk_ksm_hw_exit(ksm);
+	return err;
+}
+
+/**
+ * blk_ksm_reprogram_all_keys() - Re-program all keyslots.
+ * @ksm: The keyslot manager
+ *
+ * Re-program all keyslots that are supposed to have a key programmed.  This is
+ * intended only for use by drivers for hardware that loses its keys on reset.
+ *
+ * Context: Process context. Takes and releases ksm->lock.
+ */
+void blk_ksm_reprogram_all_keys(struct blk_keyslot_manager *ksm)
+{
+	unsigned int slot;
+
+	if (blk_ksm_is_passthrough(ksm))
+		return;
+
+	/* This is for device initialization, so don't resume the device */
+	down_write(&ksm->lock);
+	for (slot = 0; slot < ksm->num_slots; slot++) {
+		const struct blk_crypto_key *key = ksm->slots[slot].key;
+		int err;
+
+		if (!key)
+			continue;
+
+		err = ksm->ksm_ll_ops.keyslot_program(ksm, key, slot);
+		WARN_ON(err);
+	}
+	up_write(&ksm->lock);
+}
+EXPORT_SYMBOL_GPL(blk_ksm_reprogram_all_keys);
+
+void blk_ksm_destroy(struct blk_keyslot_manager *ksm)
+{
+	if (!ksm)
+		return;
+	kvfree(ksm->slot_hashtable);
+	memzero_explicit(ksm->slots, sizeof(ksm->slots[0]) * ksm->num_slots);
+	kvfree(ksm->slots);
+	memzero_explicit(ksm, sizeof(*ksm));
+}
+EXPORT_SYMBOL_GPL(blk_ksm_destroy);
+
+bool blk_ksm_register(struct blk_keyslot_manager *ksm, struct request_queue *q)
+{
+	if (blk_integrity_queue_supports_integrity(q)) {
+		pr_warn("Integrity and hardware inline encryption are not supported together. Disabling hardware inline encryption.\n");
+		return false;
+	}
+	q->ksm = ksm;
+	return true;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_register);
+
+void blk_ksm_unregister(struct request_queue *q)
+{
+	q->ksm = NULL;
+}
+
+/**
+ * blk_ksm_derive_raw_secret() - Derive software secret from wrapped key
+ * @ksm: The keyslot manager
+ * @wrapped_key: The wrapped key
+ * @wrapped_key_size: Size of the wrapped key in bytes
+ * @secret: (output) the software secret
+ * @secret_size: (output) the number of secret bytes to derive
+ *
+ * Given a hardware-wrapped key, ask the hardware to derive a secret which
+ * software can use for cryptographic tasks other than inline encryption.  The
+ * derived secret is guaranteed to be cryptographically isolated from the key
+ * with which any inline encryption with this wrapped key would actually be
+ * done.  I.e., both will be derived from the unwrapped key.
+ *
+ * Return: 0 on success, -EOPNOTSUPP if hardware-wrapped keys are unsupported,
+ *	   or another -errno code.
+ */
+int blk_ksm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *secret, unsigned int secret_size)
+{
+	int err;
+
+	if (ksm->ksm_ll_ops.derive_raw_secret) {
+		blk_ksm_hw_enter(ksm);
+		err = ksm->ksm_ll_ops.derive_raw_secret(ksm, wrapped_key,
+							wrapped_key_size,
+							secret, secret_size);
+		blk_ksm_hw_exit(ksm);
+	} else {
+		err = -EOPNOTSUPP;
+	}
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_derive_raw_secret);
+
+/**
+ * blk_ksm_intersect_modes() - restrict supported modes by child device
+ * @parent: The keyslot manager for parent device
+ * @child: The keyslot manager for child device, or NULL
+ *
+ * Clear any crypto mode support bits in @parent that aren't set in @child.
+ * If @child is NULL, then all parent bits are cleared.
+ *
+ * Only use this when setting up the keyslot manager for a layered device,
+ * before it's been exposed yet.
+ */
+void blk_ksm_intersect_modes(struct blk_keyslot_manager *parent,
+			     const struct blk_keyslot_manager *child)
+{
+	if (child) {
+		unsigned int i;
+
+		parent->max_dun_bytes_supported =
+			min(parent->max_dun_bytes_supported,
+			    child->max_dun_bytes_supported);
+		for (i = 0; i < ARRAY_SIZE(child->crypto_modes_supported);
+		     i++) {
+			parent->crypto_modes_supported[i] &=
+				child->crypto_modes_supported[i];
+		}
+		parent->features &= child->features;
+	} else {
+		parent->max_dun_bytes_supported = 0;
+		memset(parent->crypto_modes_supported, 0,
+		       sizeof(parent->crypto_modes_supported));
+		parent->features = 0;
+	}
+}
+EXPORT_SYMBOL_GPL(blk_ksm_intersect_modes);
+
+/**
+ * blk_ksm_is_superset() - Check if a KSM supports a superset of crypto modes
+ *			   and DUN bytes that another KSM supports. Here,
+ *			   "superset" refers to the mathematical meaning of the
+ *			   word - i.e. if two KSMs have the *same* capabilities,
+ *			   they *are* considered supersets of each other.
+ * @ksm_superset: The KSM that we want to verify is a superset
+ * @ksm_subset: The KSM that we want to verify is a subset
+ *
+ * Return: True if @ksm_superset supports a superset of the crypto modes and DUN
+ *	   bytes that @ksm_subset supports.
+ */
+bool blk_ksm_is_superset(struct blk_keyslot_manager *ksm_superset,
+			 struct blk_keyslot_manager *ksm_subset)
+{
+	int i;
+
+	if (!ksm_subset)
+		return true;
+
+	if (!ksm_superset)
+		return false;
+
+	for (i = 0; i < ARRAY_SIZE(ksm_superset->crypto_modes_supported); i++) {
+		if (ksm_subset->crypto_modes_supported[i] &
+		    (~ksm_superset->crypto_modes_supported[i])) {
+			return false;
+		}
+	}
+
+	if (ksm_subset->max_dun_bytes_supported >
+	    ksm_superset->max_dun_bytes_supported) {
+		return false;
+	}
+
+	if (ksm_subset->features & ~ksm_superset->features)
+		return false;
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_is_superset);
+
+/**
+ * blk_ksm_update_capabilities() - Update the restrictions of a KSM to those of
+ *				   another KSM
+ * @target_ksm: The KSM whose restrictions to update.
+ * @reference_ksm: The KSM to whose restrictions this function will update
+ *		   @target_ksm's restrictions to.
+ *
+ * Blk-crypto requires that crypto capabilities that were
+ * advertised when a bio was created continue to be supported by the
+ * device until that bio is ended. This is turn means that a device cannot
+ * shrink its advertised crypto capabilities without any explicit
+ * synchronization with upper layers. So if there's no such explicit
+ * synchronization, @reference_ksm must support all the crypto capabilities that
+ * @target_ksm does
+ * (i.e. we need blk_ksm_is_superset(@reference_ksm, @target_ksm) == true).
+ *
+ * Note also that as long as the crypto capabilities are being expanded, the
+ * order of updates becoming visible is not important because it's alright
+ * for blk-crypto to see stale values - they only cause blk-crypto to
+ * believe that a crypto capability isn't supported when it actually is (which
+ * might result in blk-crypto-fallback being used if available, or the bio being
+ * failed).
+ */
+void blk_ksm_update_capabilities(struct blk_keyslot_manager *target_ksm,
+				 struct blk_keyslot_manager *reference_ksm)
+{
+	memcpy(target_ksm->crypto_modes_supported,
+	       reference_ksm->crypto_modes_supported,
+	       sizeof(target_ksm->crypto_modes_supported));
+
+	target_ksm->max_dun_bytes_supported =
+				reference_ksm->max_dun_bytes_supported;
+
+	target_ksm->features = reference_ksm->features;
+}
+EXPORT_SYMBOL_GPL(blk_ksm_update_capabilities);
+
+/**
+ * blk_ksm_init_passthrough() - Init a passthrough keyslot manager
+ * @ksm: The keyslot manager to init
+ *
+ * Initialize a passthrough keyslot manager.
+ * Called by e.g. storage drivers to set up a keyslot manager in their
+ * request_queue, when the storage driver wants to manage its keys by itself.
+ * This is useful for inline encryption hardware that doesn't have the concept
+ * of keyslots, and for layered devices.
+ */
+void blk_ksm_init_passthrough(struct blk_keyslot_manager *ksm)
+{
+	memset(ksm, 0, sizeof(*ksm));
+	init_rwsem(&ksm->lock);
+}
+EXPORT_SYMBOL_GPL(blk_ksm_init_passthrough);
diff --git a/block/partition-generic.c b/block/partition-generic.c
index aee643c..31bff3f 100644
--- a/block/partition-generic.c
+++ b/block/partition-generic.c
@@ -459,56 +459,6 @@
 	return 0;
 }
 
-static bool part_zone_aligned(struct gendisk *disk,
-			      struct block_device *bdev,
-			      sector_t from, sector_t size)
-{
-	unsigned int zone_sectors = bdev_zone_sectors(bdev);
-
-	/*
-	 * If this function is called, then the disk is a zoned block device
-	 * (host-aware or host-managed). This can be detected even if the
-	 * zoned block device support is disabled (CONFIG_BLK_DEV_ZONED not
-	 * set). In this case, however, only host-aware devices will be seen
-	 * as a block device is not created for host-managed devices. Without
-	 * zoned block device support, host-aware drives can still be used as
-	 * regular block devices (no zone operation) and their zone size will
-	 * be reported as 0. Allow this case.
-	 */
-	if (!zone_sectors)
-		return true;
-
-	/*
-	 * Check partition start and size alignement. If the drive has a
-	 * smaller last runt zone, ignore it and allow the partition to
-	 * use it. Check the zone size too: it should be a power of 2 number
-	 * of sectors.
-	 */
-	if (WARN_ON_ONCE(!is_power_of_2(zone_sectors))) {
-		u32 rem;
-
-		div_u64_rem(from, zone_sectors, &rem);
-		if (rem)
-			return false;
-		if ((from + size) < get_capacity(disk)) {
-			div_u64_rem(size, zone_sectors, &rem);
-			if (rem)
-				return false;
-		}
-
-	} else {
-
-		if (from & (zone_sectors - 1))
-			return false;
-		if ((from + size) < get_capacity(disk) &&
-		    (size & (zone_sectors - 1)))
-			return false;
-
-	}
-
-	return true;
-}
-
 int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
 {
 	struct parsed_partitions *state = NULL;
@@ -544,6 +494,14 @@
 		}
 		return -EIO;
 	}
+
+	/* Partitions are not supported on zoned block devices */
+	if (bdev_is_zoned(bdev)) {
+		pr_warn("%s: ignoring partition table on zoned block device\n",
+			disk->disk_name);
+		goto out;
+	}
+
 	/*
 	 * If any partition code tried to read beyond EOD, try
 	 * unlocking native capacity even if partition table is
@@ -607,21 +565,6 @@
 			}
 		}
 
-		/*
-		 * On a zoned block device, partitions should be aligned on the
-		 * device zone size (i.e. zone boundary crossing not allowed).
-		 * Otherwise, resetting the write pointer of the last zone of
-		 * one partition may impact the following partition.
-		 */
-		if (bdev_is_zoned(bdev) &&
-		    !part_zone_aligned(disk, bdev, from, size)) {
-			printk(KERN_WARNING
-			       "%s: p%d start %llu+%llu is not zone aligned\n",
-			       disk->disk_name, p, (unsigned long long) from,
-			       (unsigned long long) size);
-			continue;
-		}
-
 		part = add_partition(disk, p, from, size,
 				     state->parts[p].flags,
 				     &state->parts[p].info);
@@ -635,6 +578,7 @@
 			md_autodetect_dev(part_to_dev(part)->devt);
 #endif
 	}
+out:
 	free_partitions(state);
 	return 0;
 }
diff --git a/build.config.aarch64 b/build.config.aarch64
new file mode 100644
index 0000000..d015286
--- /dev/null
+++ b/build.config.aarch64
@@ -0,0 +1,21 @@
+ARCH=arm64
+
+LLVM_IAS=1
+CROSS_COMPILE=aarch64-linux-gnu-
+CROSS_COMPILE_COMPAT=arm-linux-gnueabi-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+LINUX_GCC_CROSS_COMPILE_COMPAT_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+Image
+modules
+"
+
+FILES="
+arch/arm64/boot/Image
+vmlinux
+System.map
+Module.symvers
+modules.builtin
+modules.builtin.modinfo
+"
diff --git a/build.config.allmodconfig b/build.config.allmodconfig
new file mode 100644
index 0000000..103d1cd
--- /dev/null
+++ b/build.config.allmodconfig
@@ -0,0 +1,14 @@
+DEFCONFIG=allmodconfig
+
+POST_DEFCONFIG_CMDS="update_config"
+function update_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -d TEST_KMOD  \
+         -d CPU_BIG_ENDIAN \
+         -d STM \
+         -d TEST_MEMCAT_P \
+         -e UNWINDER_FRAME_POINTER \
+
+    (cd ${OUT_DIR} && \
+     make O=${OUT_DIR} $archsubarch CROSS_COMPILE=${CROSS_COMPILE} "${TOOL_ARGS[@]}" ${MAKE_ARGS} olddefconfig)
+}
diff --git a/build.config.allmodconfig.aarch64 b/build.config.allmodconfig.aarch64
new file mode 100644
index 0000000..2fbe380
--- /dev/null
+++ b/build.config.allmodconfig.aarch64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.allmodconfig.arm b/build.config.allmodconfig.arm
new file mode 100644
index 0000000..e92744a
--- /dev/null
+++ b/build.config.allmodconfig.arm
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.arm
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.allmodconfig.x86_64 b/build.config.allmodconfig.x86_64
new file mode 100644
index 0000000..f06b30c
--- /dev/null
+++ b/build.config.allmodconfig.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.allmodconfig
+
diff --git a/build.config.arm b/build.config.arm
new file mode 100644
index 0000000..41c407a
--- /dev/null
+++ b/build.config.arm
@@ -0,0 +1,16 @@
+ARCH=arm
+
+LLVM_IAS=1
+CROSS_COMPILE=arm-linux-gnueabi-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+Image
+modules
+"
+
+FILES="
+arch/arm/boot/Image
+vmlinux
+System.map
+"
diff --git a/build.config.common b/build.config.common
new file mode 100644
index 0000000..d5c51b5b
--- /dev/null
+++ b/build.config.common
@@ -0,0 +1,12 @@
+BRANCH=android12-5.4
+KMI_GENERATION=9
+
+LLVM=1
+DEPMOD=depmod
+CLANG_PREBUILT_BIN=prebuilts-master/clang/host/linux-x86/clang-r416183b/bin
+BUILDTOOLS_PREBUILT_BIN=build/build-tools/path/linux-x86
+
+EXTRA_CMDS=''
+STOP_SHIP_TRACEPRINTK=1
+IN_KERNEL_MODULES=1
+DO_NOT_STRIP_MODULES=1
diff --git a/build.config.db845c b/build.config.db845c
new file mode 100644
index 0000000..0cf9881
--- /dev/null
+++ b/build.config.db845c
@@ -0,0 +1,21 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+
+BUILD_INITRAMFS=1
+DEFCONFIG=db845c_gki_defconfig
+FRAGMENT_CONFIG=${KERNEL_DIR}/arch/arm64/configs/db845c_gki.fragment
+PRE_DEFCONFIG_CMDS="KCONFIG_CONFIG=${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG} ${ROOT_DIR}/${KERNEL_DIR}/scripts/kconfig/merge_config.sh -m -r ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${FRAGMENT_CONFIG}"
+POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}"
+
+MAKE_GOALS="${MAKE_GOALS}
+qcom/sdm845-db845c.dtb
+Image.gz
+"
+
+FILES="${FILES}
+arch/arm64/boot/Image.gz
+arch/arm64/boot/dts/qcom/sdm845-db845c.dtb
+vmlinux
+"
+KMI_SYMBOL_LIST=android/abi_gki_aarch64_db845c
+GKI_MODULES_LIST=android/gki_aarch64_modules
diff --git a/build.config.gki b/build.config.gki
new file mode 100644
index 0000000..44d4ed1
--- /dev/null
+++ b/build.config.gki
@@ -0,0 +1,3 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig"
+
diff --git a/build.config.gki-debug.aarch64 b/build.config.gki-debug.aarch64
new file mode 100644
index 0000000..c1fe2f0
--- /dev/null
+++ b/build.config.gki-debug.aarch64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki.aarch64
+TRIM_NONLISTED_KMI=""
+KMI_SYMBOL_LIST_STRICT_MODE=""
diff --git a/build.config.gki-debug.x86_64 b/build.config.gki-debug.x86_64
new file mode 100644
index 0000000..d89b7ad
--- /dev/null
+++ b/build.config.gki-debug.x86_64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki.x86_64
+TRIM_NONLISTED_KMI=""
+KMI_SYMBOL_LIST_STRICT_MODE=""
diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64
new file mode 100644
index 0000000..f42a84e
--- /dev/null
+++ b/build.config.gki.aarch64
@@ -0,0 +1,32 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki
+
+MAKE_GOALS="${MAKE_GOALS}
+Image.lz4
+"
+
+ABI_DEFINITION=android/abi_gki_aarch64.xml
+KMI_SYMBOL_LIST=android/abi_gki_aarch64
+ADDITIONAL_KMI_SYMBOL_LISTS="
+android/abi_gki_aarch64_db845c
+android/abi_gki_aarch64_hikey960
+android/abi_gki_aarch64_qcom
+android/abi_gki_aarch64_unisoc
+android/abi_gki_aarch64_exynos
+android/abi_gki_aarch64_sunxi
+android/abi_gki_aarch64_virtual_device
+"
+
+FILES="${FILES}
+arch/arm64/boot/Image.lz4
+"
+
+TRIM_NONLISTED_KMI=${TRIM_NONLISTED_KMI:-1}
+KMI_SYMBOL_LIST_STRICT_MODE=${KMI_SYMBOL_LIST_STRICT_MODE:-1}
+MODULES_ORDER=android/gki_aarch64_modules
+KMI_ENFORCED=1
+
+if [ -n "${GKI_DEFCONFIG_FRAGMENT}" ]; then
+source ${GKI_DEFCONFIG_FRAGMENT}
+fi
diff --git a/build.config.gki.x86_64 b/build.config.gki.x86_64
new file mode 100644
index 0000000..0e04fc6
--- /dev/null
+++ b/build.config.gki.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki
+
diff --git a/build.config.gki_kasan b/build.config.gki_kasan
new file mode 100644
index 0000000..ace2f87
--- /dev/null
+++ b/build.config.gki_kasan
@@ -0,0 +1,22 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig && update_kasan_config"
+KERNEL_DIR=common
+function update_kasan_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -e CONFIG_KASAN \
+         -e CONFIG_KASAN_INLINE \
+         -e CONFIG_KCOV \
+         -e CONFIG_PANIC_ON_WARN_DEFAULT_ENABLE \
+         -d CONFIG_RANDOMIZE_BASE \
+         -d CONFIG_KASAN_OUTLINE \
+         --set-val CONFIG_FRAME_WARN 0 \
+         -d LTO \
+         -d LTO_CLANG \
+         -d CFI \
+         -d CFI_PERMISSIVE \
+         -d CFI_CLANG \
+         -d SHADOW_CALL_STACK
+    (cd ${OUT_DIR} && \
+     make ${CC_LD_ARG} O=${OUT_DIR} olddefconfig)
+}
+
diff --git a/build.config.gki_kasan.aarch64 b/build.config.gki_kasan.aarch64
new file mode 100644
index 0000000..9fd2560
--- /dev/null
+++ b/build.config.gki_kasan.aarch64
@@ -0,0 +1,3 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kasan
diff --git a/build.config.gki_kasan.x86_64 b/build.config.gki_kasan.x86_64
new file mode 100644
index 0000000..eec6458
--- /dev/null
+++ b/build.config.gki_kasan.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kasan
+
diff --git a/build.config.gki_kprobes b/build.config.gki_kprobes
new file mode 100644
index 0000000..d4a7e7a
--- /dev/null
+++ b/build.config.gki_kprobes
@@ -0,0 +1,20 @@
+DEFCONFIG=gki_defconfig
+POST_DEFCONFIG_CMDS="check_defconfig && update_kprobes_config"
+function update_kprobes_config() {
+    ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
+         -d LTO \
+         -d LTO_CLANG_THIN \
+         -d CFI \
+         -d CFI_PERMISSIVE \
+         -d CFI_CLANG \
+         -e CONFIG_DYNAMIC_FTRACE \
+         -e CONFIG_FUNCTION_TRACER \
+         -e CONFIG_IRQSOFF_TRACER \
+         -e CONFIG_FUNCTION_PROFILER \
+         -e CONFIG_PREEMPT_TRACER \
+         -e CONFIG_CHECKPOINT_RESTORE \
+         -d CONFIG_RANDOMIZE_BASE
+    (cd ${OUT_DIR} && \
+     make ${CC_LD_ARG} O=${OUT_DIR} olddefconfig)
+}
+
diff --git a/build.config.gki_kprobes.aarch64 b/build.config.gki_kprobes.aarch64
new file mode 100644
index 0000000..627c217
--- /dev/null
+++ b/build.config.gki_kprobes.aarch64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kprobes
+
diff --git a/build.config.gki_kprobes.x86_64 b/build.config.gki_kprobes.x86_64
new file mode 100644
index 0000000..a1d3da7
--- /dev/null
+++ b/build.config.gki_kprobes.x86_64
@@ -0,0 +1,4 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.x86_64
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.gki_kprobes
+
diff --git a/build.config.hikey960 b/build.config.hikey960
new file mode 100644
index 0000000..29823f1
--- /dev/null
+++ b/build.config.hikey960
@@ -0,0 +1,24 @@
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common
+. ${ROOT_DIR}/${KERNEL_DIR}/build.config.aarch64
+
+DEFCONFIG=hikey960_gki_defconfig
+PRE_DEFCONFIG_CMDS="cat ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/gki_defconfig ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/hikey960_gki.fragment > ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG};"
+POST_DEFCONFIG_CMDS="rm ${ROOT_DIR}/${KERNEL_DIR}/arch/arm64/configs/${DEFCONFIG}"
+
+EXT_MODULES="
+hikey-modules/midgard
+"
+
+MAKE_GOALS="${MAKE_GOALS}
+hisilicon/hi3660-hikey960.dtb
+Image.gz
+"
+
+FILES="${FILES}
+arch/arm64/boot/Image.gz
+arch/arm64/boot/dts/hisilicon/hi3660-hikey960.dtb
+vmlinux
+System.map
+"
+KMI_SYMBOL_LIST=android/abi_gki_aarch64_hikey960
+GKI_MODULES_LIST=android/gki_aarch64_modules
diff --git a/build.config.x86_64 b/build.config.x86_64
new file mode 100644
index 0000000..2e9474c
--- /dev/null
+++ b/build.config.x86_64
@@ -0,0 +1,20 @@
+ARCH=x86_64
+
+LLVM_IAS=1
+CROSS_COMPILE=x86_64-linux-gnu-
+LINUX_GCC_CROSS_COMPILE_PREBUILTS_BIN=prebuilts/gas/linux-x86
+
+MAKE_GOALS="
+bzImage
+modules
+prepare-objtool
+"
+
+FILES="
+arch/x86/boot/bzImage
+vmlinux
+System.map
+Module.symvers
+modules.builtin
+modules.builtin.modinfo
+"
diff --git a/crypto/Kconfig b/crypto/Kconfig
index ce60ec3..3e59526 100644
--- a/crypto/Kconfig
+++ b/crypto/Kconfig
@@ -136,8 +136,6 @@
 	  Userspace configuration for cryptographic instantiations such as
 	  cbc(aes).
 
-if CRYPTO_MANAGER2
-
 config CRYPTO_MANAGER_DISABLE_TESTS
 	bool "Disable run-time self tests"
 	default y
@@ -147,7 +145,7 @@
 
 config CRYPTO_MANAGER_EXTRA_TESTS
 	bool "Enable extra run-time crypto self tests"
-	depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS
+	depends on DEBUG_KERNEL && !CRYPTO_MANAGER_DISABLE_TESTS && CRYPTO_MANAGER
 	help
 	  Enable extra run-time self tests of registered crypto algorithms,
 	  including randomized fuzz tests.
@@ -155,8 +153,6 @@
 	  This is intended for developer use only, as these tests take much
 	  longer to run than the normal self tests.
 
-endif	# if CRYPTO_MANAGER2
-
 config CRYPTO_GF128MUL
 	tristate
 
@@ -264,6 +260,17 @@
 	  standard algorithms (called GOST algorithms). Only signature verification
 	  is implemented.
 
+config CRYPTO_CURVE25519
+	tristate "Curve25519 algorithm"
+	select CRYPTO_KPP
+	select CRYPTO_LIB_CURVE25519_GENERIC
+
+config CRYPTO_CURVE25519_X86
+	tristate "x86_64 accelerated Curve25519 scalar multiplication library"
+	depends on X86 && 64BIT
+	select CRYPTO_LIB_CURVE25519_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CURVE25519
+
 comment "Authenticated Encryption with Associated Data"
 
 config CRYPTO_CCM
@@ -446,7 +453,7 @@
 config CRYPTO_NHPOLY1305
 	tristate
 	select CRYPTO_HASH
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
 
 config CRYPTO_NHPOLY1305_SSE2
 	tristate "NHPoly1305 hash function (x86_64 SSE2 implementation)"
@@ -467,7 +474,7 @@
 config CRYPTO_ADIANTUM
 	tristate "Adiantum support"
 	select CRYPTO_CHACHA20
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
 	select CRYPTO_NHPOLY1305
 	select CRYPTO_MANAGER
 	help
@@ -639,6 +646,47 @@
 	  xxHash non-cryptographic hash algorithm. Extremely fast, working at
 	  speeds close to RAM limits.
 
+config CRYPTO_BLAKE2S
+	tristate "BLAKE2s digest algorithm"
+	select CRYPTO_LIB_BLAKE2S_GENERIC
+	select CRYPTO_HASH
+	help
+	  Implementation of cryptographic hash function BLAKE2s
+	  optimized for 8-32bit platforms and can produce digests of any size
+	  between 1 to 32.  The keyed hash is also implemented.
+
+	  This module provides the following algorithms:
+
+	  - blake2s-128
+	  - blake2s-160
+	  - blake2s-224
+	  - blake2s-256
+
+	  See https://blake2.net for further information.
+
+config CRYPTO_BLAKE2S_X86
+	tristate "BLAKE2s digest algorithm (x86 accelerated version)"
+	depends on X86 && 64BIT
+	select CRYPTO_LIB_BLAKE2S_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+
+config CRYPTO_BLAKE2B
+	tristate "BLAKE2b digest algorithm"
+	select CRYPTO_HASH
+	help
+	  Implementation of cryptographic hash function BLAKE2b (or just BLAKE2),
+	  optimized for 64bit platforms and can produce digests of any size
+	  between 1 to 64.  The keyed hash is also implemented.
+
+	  This module provides the following algorithms:
+
+	  - blake2b-160
+	  - blake2b-256
+	  - blake2b-384
+	  - blake2b-512
+
+	  See https://blake2.net for further information.
+
 config CRYPTO_CRCT10DIF
 	tristate "CRCT10DIF algorithm"
 	select CRYPTO_HASH
@@ -686,6 +734,7 @@
 config CRYPTO_POLY1305
 	tristate "Poly1305 authenticator algorithm"
 	select CRYPTO_HASH
+	select CRYPTO_LIB_POLY1305_GENERIC
 	help
 	  Poly1305 authenticator algorithm, RFC7539.
 
@@ -696,7 +745,8 @@
 config CRYPTO_POLY1305_X86_64
 	tristate "Poly1305 authenticator algorithm (x86_64/SSE2/AVX2)"
 	depends on X86 && 64BIT
-	select CRYPTO_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
 	help
 	  Poly1305 authenticator algorithm, RFC7539.
 
@@ -705,6 +755,11 @@
 	  in IETF protocols. This is the x86_64 assembler implementation using SIMD
 	  instructions.
 
+config CRYPTO_POLY1305_MIPS
+	tristate "Poly1305 authenticator algorithm (MIPS optimized)"
+	depends on MIPS
+	select CRYPTO_ARCH_HAVE_LIB_POLY1305
+
 config CRYPTO_MD4
 	tristate "MD4 digest algorithm"
 	select CRYPTO_HASH
@@ -878,9 +933,6 @@
 	  SHA-1 secure hash standard (DFIPS 180-4) implemented
 	  using powerpc SPE SIMD instruction set.
 
-config CRYPTO_LIB_SHA256
-	tristate
-
 config CRYPTO_SHA256
 	tristate "SHA224 and SHA256 digest algorithm"
 	select CRYPTO_HASH
@@ -1019,9 +1071,6 @@
 
 comment "Ciphers"
 
-config CRYPTO_LIB_AES
-	tristate
-
 config CRYPTO_AES
 	tristate "AES cipher algorithms"
 	select CRYPTO_ALGAPI
@@ -1150,9 +1199,6 @@
 	  <https://www.cosic.esat.kuleuven.be/nessie/reports/>
 	  <http://www.larc.usp.br/~pbarreto/AnubisPage.html>
 
-config CRYPTO_LIB_ARC4
-	tristate
-
 config CRYPTO_ARC4
 	tristate "ARC4 cipher algorithm"
 	select CRYPTO_BLKCIPHER
@@ -1339,9 +1385,6 @@
 	  This module provides the Cast6 cipher algorithm that processes
 	  eight blocks parallel using the AVX instruction set.
 
-config CRYPTO_LIB_DES
-	tristate
-
 config CRYPTO_DES
 	tristate "DES and Triple DES EDE cipher algorithms"
 	select CRYPTO_ALGAPI
@@ -1405,6 +1448,7 @@
 
 config CRYPTO_CHACHA20
 	tristate "ChaCha stream cipher algorithms"
+	select CRYPTO_LIB_CHACHA_GENERIC
 	select CRYPTO_BLKCIPHER
 	help
 	  The ChaCha20, XChaCha20, and XChaCha12 stream cipher algorithms.
@@ -1428,11 +1472,18 @@
 	tristate "ChaCha stream cipher algorithms (x86_64/SSSE3/AVX2/AVX-512VL)"
 	depends on X86 && 64BIT
 	select CRYPTO_BLKCIPHER
-	select CRYPTO_CHACHA20
+	select CRYPTO_LIB_CHACHA_GENERIC
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
 	help
 	  SSSE3, AVX2, and AVX-512VL optimized implementations of the ChaCha20,
 	  XChaCha20, and XChaCha12 stream ciphers.
 
+config CRYPTO_CHACHA_MIPS
+	tristate "ChaCha stream cipher algorithms (MIPS 32r2 optimized)"
+	depends on CPU_MIPS32_R2
+	select CRYPTO_BLKCIPHER
+	select CRYPTO_ARCH_HAVE_LIB_CHACHA
+
 config CRYPTO_SEED
 	tristate "SEED cipher algorithm"
 	select CRYPTO_ALGAPI
@@ -1845,6 +1896,7 @@
 config CRYPTO_HASH_INFO
 	bool
 
+source "lib/crypto/Kconfig"
 source "drivers/crypto/Kconfig"
 source "crypto/asymmetric_keys/Kconfig"
 source "certs/Kconfig"
diff --git a/crypto/Makefile b/crypto/Makefile
index aa740c8..1eb4a210 100644
--- a/crypto/Makefile
+++ b/crypto/Makefile
@@ -74,6 +74,8 @@
 obj-$(CONFIG_CRYPTO_WP512) += wp512.o
 CFLAGS_wp512.o := $(call cc-option,-fno-schedule-insns)  # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79149
 obj-$(CONFIG_CRYPTO_TGR192) += tgr192.o
+obj-$(CONFIG_CRYPTO_BLAKE2S) += blake2s_generic.o
+obj-$(CONFIG_CRYPTO_BLAKE2B) += blake2b_generic.o
 obj-$(CONFIG_CRYPTO_GF128MUL) += gf128mul.o
 obj-$(CONFIG_CRYPTO_ECB) += ecb.o
 obj-$(CONFIG_CRYPTO_CBC) += cbc.o
@@ -166,6 +168,7 @@
 obj-$(CONFIG_CRYPTO_OFB) += ofb.o
 obj-$(CONFIG_CRYPTO_ECC) += ecc.o
 obj-$(CONFIG_CRYPTO_ESSIV) += essiv.o
+obj-$(CONFIG_CRYPTO_CURVE25519) += curve25519-generic.o
 
 ecdh_generic-y += ecdh.o
 ecdh_generic-y += ecdh_helper.o
diff --git a/crypto/OWNERS b/crypto/OWNERS
new file mode 100644
index 0000000..f74b7ed
--- /dev/null
+++ b/crypto/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/crypto/OWNERS
diff --git a/crypto/adiantum.c b/crypto/adiantum.c
index 395a3dd..c846a88 100644
--- a/crypto/adiantum.c
+++ b/crypto/adiantum.c
@@ -33,6 +33,7 @@
 #include <crypto/b128ops.h>
 #include <crypto/chacha.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/internal/skcipher.h>
 #include <crypto/nhpoly1305.h>
 #include <crypto/scatterwalk.h>
@@ -71,7 +72,7 @@
 	struct crypto_skcipher *streamcipher;
 	struct crypto_cipher *blockcipher;
 	struct crypto_shash *hash;
-	struct poly1305_key header_hash_key;
+	struct poly1305_core_key header_hash_key;
 };
 
 struct adiantum_request_ctx {
@@ -242,13 +243,13 @@
 
 	BUILD_BUG_ON(sizeof(header) % POLY1305_BLOCK_SIZE != 0);
 	poly1305_core_blocks(&state, &tctx->header_hash_key,
-			     &header, sizeof(header) / POLY1305_BLOCK_SIZE);
+			     &header, sizeof(header) / POLY1305_BLOCK_SIZE, 1);
 
 	BUILD_BUG_ON(TWEAK_SIZE % POLY1305_BLOCK_SIZE != 0);
 	poly1305_core_blocks(&state, &tctx->header_hash_key, req->iv,
-			     TWEAK_SIZE / POLY1305_BLOCK_SIZE);
+			     TWEAK_SIZE / POLY1305_BLOCK_SIZE, 1);
 
-	poly1305_core_emit(&state, &rctx->header_hash);
+	poly1305_core_emit(&state, NULL, &rctx->header_hash);
 }
 
 /* Hash the left-hand part (the "bulk") of the message using NHPoly1305 */
diff --git a/crypto/blake2b_generic.c b/crypto/blake2b_generic.c
new file mode 100644
index 0000000..6704c03
--- /dev/null
+++ b/crypto/blake2b_generic.c
@@ -0,0 +1,187 @@
+// SPDX-License-Identifier: (GPL-2.0-only OR Apache-2.0)
+/*
+ * Generic implementation of the BLAKE2b digest algorithm.  Based on the BLAKE2b
+ * reference implementation, but it has been heavily modified for use in the
+ * kernel.  The reference implementation was:
+ *
+ *	Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.  You may use this under
+ *	the terms of the CC0, the OpenSSL Licence, or the Apache Public License
+ *	2.0, at your option.  The terms of these licenses can be found at:
+ *
+ *	- CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0
+ *	- OpenSSL license   : https://www.openssl.org/source/license.html
+ *	- Apache 2.0        : https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * More information about BLAKE2 can be found at https://blake2.net.
+ */
+
+#include <asm/unaligned.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/bitops.h>
+#include <crypto/internal/blake2b.h>
+#include <crypto/internal/hash.h>
+
+static const u8 blake2b_sigma[12][16] = {
+	{  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+	{ 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 },
+	{  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 },
+	{  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 },
+	{  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 },
+	{ 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 },
+	{ 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 },
+	{  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 },
+	{ 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0 },
+	{  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 }
+};
+
+static void blake2b_increment_counter(struct blake2b_state *S, const u64 inc)
+{
+	S->t[0] += inc;
+	S->t[1] += (S->t[0] < inc);
+}
+
+#define G(r,i,a,b,c,d)                                  \
+	do {                                            \
+		a = a + b + m[blake2b_sigma[r][2*i+0]]; \
+		d = ror64(d ^ a, 32);                   \
+		c = c + d;                              \
+		b = ror64(b ^ c, 24);                   \
+		a = a + b + m[blake2b_sigma[r][2*i+1]]; \
+		d = ror64(d ^ a, 16);                   \
+		c = c + d;                              \
+		b = ror64(b ^ c, 63);                   \
+	} while (0)
+
+#define ROUND(r)                                \
+	do {                                    \
+		G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \
+		G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \
+		G(r,2,v[ 2],v[ 6],v[10],v[14]); \
+		G(r,3,v[ 3],v[ 7],v[11],v[15]); \
+		G(r,4,v[ 0],v[ 5],v[10],v[15]); \
+		G(r,5,v[ 1],v[ 6],v[11],v[12]); \
+		G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \
+		G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \
+	} while (0)
+
+static void blake2b_compress_one_generic(struct blake2b_state *S,
+					 const u8 block[BLAKE2B_BLOCK_SIZE])
+{
+	u64 m[16];
+	u64 v[16];
+	size_t i;
+
+	for (i = 0; i < 16; ++i)
+		m[i] = get_unaligned_le64(block + i * sizeof(m[i]));
+
+	for (i = 0; i < 8; ++i)
+		v[i] = S->h[i];
+
+	v[ 8] = BLAKE2B_IV0;
+	v[ 9] = BLAKE2B_IV1;
+	v[10] = BLAKE2B_IV2;
+	v[11] = BLAKE2B_IV3;
+	v[12] = BLAKE2B_IV4 ^ S->t[0];
+	v[13] = BLAKE2B_IV5 ^ S->t[1];
+	v[14] = BLAKE2B_IV6 ^ S->f[0];
+	v[15] = BLAKE2B_IV7 ^ S->f[1];
+
+	ROUND(0);
+	ROUND(1);
+	ROUND(2);
+	ROUND(3);
+	ROUND(4);
+	ROUND(5);
+	ROUND(6);
+	ROUND(7);
+	ROUND(8);
+	ROUND(9);
+	ROUND(10);
+	ROUND(11);
+#ifdef CONFIG_CC_IS_CLANG
+#pragma nounroll /* https://bugs.llvm.org/show_bug.cgi?id=45803 */
+#endif
+	for (i = 0; i < 8; ++i)
+		S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];
+}
+
+#undef G
+#undef ROUND
+
+void blake2b_compress_generic(struct blake2b_state *state,
+			      const u8 *block, size_t nblocks, u32 inc)
+{
+	do {
+		blake2b_increment_counter(state, inc);
+		blake2b_compress_one_generic(state, block);
+		block += BLAKE2B_BLOCK_SIZE;
+	} while (--nblocks);
+}
+EXPORT_SYMBOL(blake2b_compress_generic);
+
+static int crypto_blake2b_update_generic(struct shash_desc *desc,
+					 const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2b_update(desc, in, inlen, blake2b_compress_generic);
+}
+
+static int crypto_blake2b_final_generic(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2b_final(desc, out, blake2b_compress_generic);
+}
+
+#define BLAKE2B_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 100,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2B_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2b_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2b_setkey,	\
+		.init			= crypto_blake2b_init,		\
+		.update			= crypto_blake2b_update_generic, \
+		.final			= crypto_blake2b_final_generic,	\
+		.descsize		= sizeof(struct blake2b_state),	\
+	}
+
+static struct shash_alg blake2b_algs[] = {
+	BLAKE2B_ALG("blake2b-160", "blake2b-160-generic",
+		    BLAKE2B_160_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-256", "blake2b-256-generic",
+		    BLAKE2B_256_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-384", "blake2b-384-generic",
+		    BLAKE2B_384_HASH_SIZE),
+	BLAKE2B_ALG("blake2b-512", "blake2b-512-generic",
+		    BLAKE2B_512_HASH_SIZE),
+};
+
+static int __init blake2b_mod_init(void)
+{
+	return crypto_register_shashes(blake2b_algs, ARRAY_SIZE(blake2b_algs));
+}
+
+static void __exit blake2b_mod_fini(void)
+{
+	crypto_unregister_shashes(blake2b_algs, ARRAY_SIZE(blake2b_algs));
+}
+
+subsys_initcall(blake2b_mod_init);
+module_exit(blake2b_mod_fini);
+
+MODULE_AUTHOR("David Sterba <kdave@kernel.org>");
+MODULE_DESCRIPTION("BLAKE2b generic implementation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_CRYPTO("blake2b-160");
+MODULE_ALIAS_CRYPTO("blake2b-160-generic");
+MODULE_ALIAS_CRYPTO("blake2b-256");
+MODULE_ALIAS_CRYPTO("blake2b-256-generic");
+MODULE_ALIAS_CRYPTO("blake2b-384");
+MODULE_ALIAS_CRYPTO("blake2b-384-generic");
+MODULE_ALIAS_CRYPTO("blake2b-512");
+MODULE_ALIAS_CRYPTO("blake2b-512-generic");
diff --git a/crypto/blake2s_generic.c b/crypto/blake2s_generic.c
new file mode 100644
index 0000000..72fe480f
--- /dev/null
+++ b/crypto/blake2s_generic.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * shash interface to the generic implementation of BLAKE2s
+ *
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <crypto/internal/hash.h>
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+
+static int crypto_blake2s_update_generic(struct shash_desc *desc,
+					 const u8 *in, unsigned int inlen)
+{
+	return crypto_blake2s_update(desc, in, inlen, blake2s_compress_generic);
+}
+
+static int crypto_blake2s_final_generic(struct shash_desc *desc, u8 *out)
+{
+	return crypto_blake2s_final(desc, out, blake2s_compress_generic);
+}
+
+#define BLAKE2S_ALG(name, driver_name, digest_size)			\
+	{								\
+		.base.cra_name		= name,				\
+		.base.cra_driver_name	= driver_name,			\
+		.base.cra_priority	= 100,				\
+		.base.cra_flags		= CRYPTO_ALG_OPTIONAL_KEY,	\
+		.base.cra_blocksize	= BLAKE2S_BLOCK_SIZE,		\
+		.base.cra_ctxsize	= sizeof(struct blake2s_tfm_ctx), \
+		.base.cra_module	= THIS_MODULE,			\
+		.digestsize		= digest_size,			\
+		.setkey			= crypto_blake2s_setkey,	\
+		.init			= crypto_blake2s_init,		\
+		.update			= crypto_blake2s_update_generic, \
+		.final			= crypto_blake2s_final_generic,	\
+		.descsize		= sizeof(struct blake2s_state),	\
+	}
+
+static struct shash_alg blake2s_algs[] = {
+	BLAKE2S_ALG("blake2s-128", "blake2s-128-generic",
+		    BLAKE2S_128_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-160", "blake2s-160-generic",
+		    BLAKE2S_160_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-224", "blake2s-224-generic",
+		    BLAKE2S_224_HASH_SIZE),
+	BLAKE2S_ALG("blake2s-256", "blake2s-256-generic",
+		    BLAKE2S_256_HASH_SIZE),
+};
+
+static int __init blake2s_mod_init(void)
+{
+	return crypto_register_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+static void __exit blake2s_mod_exit(void)
+{
+	crypto_unregister_shashes(blake2s_algs, ARRAY_SIZE(blake2s_algs));
+}
+
+subsys_initcall(blake2s_mod_init);
+module_exit(blake2s_mod_exit);
+
+MODULE_ALIAS_CRYPTO("blake2s-128");
+MODULE_ALIAS_CRYPTO("blake2s-128-generic");
+MODULE_ALIAS_CRYPTO("blake2s-160");
+MODULE_ALIAS_CRYPTO("blake2s-160-generic");
+MODULE_ALIAS_CRYPTO("blake2s-224");
+MODULE_ALIAS_CRYPTO("blake2s-224-generic");
+MODULE_ALIAS_CRYPTO("blake2s-256");
+MODULE_ALIAS_CRYPTO("blake2s-256-generic");
+MODULE_LICENSE("GPL v2");
diff --git a/crypto/chacha_generic.c b/crypto/chacha_generic.c
index 085d8d2..8beea79 100644
--- a/crypto/chacha_generic.c
+++ b/crypto/chacha_generic.c
@@ -8,29 +8,10 @@
 
 #include <asm/unaligned.h>
 #include <crypto/algapi.h>
-#include <crypto/chacha.h>
+#include <crypto/internal/chacha.h>
 #include <crypto/internal/skcipher.h>
 #include <linux/module.h>
 
-static void chacha_docrypt(u32 *state, u8 *dst, const u8 *src,
-			   unsigned int bytes, int nrounds)
-{
-	/* aligned to potentially speed up crypto_xor() */
-	u8 stream[CHACHA_BLOCK_SIZE] __aligned(sizeof(long));
-
-	while (bytes >= CHACHA_BLOCK_SIZE) {
-		chacha_block(state, stream, nrounds);
-		crypto_xor_cpy(dst, src, stream, CHACHA_BLOCK_SIZE);
-		bytes -= CHACHA_BLOCK_SIZE;
-		dst += CHACHA_BLOCK_SIZE;
-		src += CHACHA_BLOCK_SIZE;
-	}
-	if (bytes) {
-		chacha_block(state, stream, nrounds);
-		crypto_xor_cpy(dst, src, stream, bytes);
-	}
-}
-
 static int chacha_stream_xor(struct skcipher_request *req,
 			     const struct chacha_ctx *ctx, const u8 *iv)
 {
@@ -40,7 +21,7 @@
 
 	err = skcipher_walk_virt(&walk, req, false);
 
-	crypto_chacha_init(state, ctx, iv);
+	chacha_init_generic(state, ctx->key, iv);
 
 	while (walk.nbytes > 0) {
 		unsigned int nbytes = walk.nbytes;
@@ -48,75 +29,23 @@
 		if (nbytes < walk.total)
 			nbytes = round_down(nbytes, CHACHA_BLOCK_SIZE);
 
-		chacha_docrypt(state, walk.dst.virt.addr, walk.src.virt.addr,
-			       nbytes, ctx->nrounds);
+		chacha_crypt_generic(state, walk.dst.virt.addr,
+				     walk.src.virt.addr, nbytes, ctx->nrounds);
 		err = skcipher_walk_done(&walk, walk.nbytes - nbytes);
 	}
 
 	return err;
 }
 
-void crypto_chacha_init(u32 *state, const struct chacha_ctx *ctx, const u8 *iv)
-{
-	state[0]  = 0x61707865; /* "expa" */
-	state[1]  = 0x3320646e; /* "nd 3" */
-	state[2]  = 0x79622d32; /* "2-by" */
-	state[3]  = 0x6b206574; /* "te k" */
-	state[4]  = ctx->key[0];
-	state[5]  = ctx->key[1];
-	state[6]  = ctx->key[2];
-	state[7]  = ctx->key[3];
-	state[8]  = ctx->key[4];
-	state[9]  = ctx->key[5];
-	state[10] = ctx->key[6];
-	state[11] = ctx->key[7];
-	state[12] = get_unaligned_le32(iv +  0);
-	state[13] = get_unaligned_le32(iv +  4);
-	state[14] = get_unaligned_le32(iv +  8);
-	state[15] = get_unaligned_le32(iv + 12);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha_init);
-
-static int chacha_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			 unsigned int keysize, int nrounds)
-{
-	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
-	int i;
-
-	if (keysize != CHACHA_KEY_SIZE)
-		return -EINVAL;
-
-	for (i = 0; i < ARRAY_SIZE(ctx->key); i++)
-		ctx->key[i] = get_unaligned_le32(key + i * sizeof(u32));
-
-	ctx->nrounds = nrounds;
-	return 0;
-}
-
-int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize)
-{
-	return chacha_setkey(tfm, key, keysize, 20);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha20_setkey);
-
-int crypto_chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize)
-{
-	return chacha_setkey(tfm, key, keysize, 12);
-}
-EXPORT_SYMBOL_GPL(crypto_chacha12_setkey);
-
-int crypto_chacha_crypt(struct skcipher_request *req)
+static int crypto_chacha_crypt(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
 
 	return chacha_stream_xor(req, ctx, req->iv);
 }
-EXPORT_SYMBOL_GPL(crypto_chacha_crypt);
 
-int crypto_xchacha_crypt(struct skcipher_request *req)
+static int crypto_xchacha_crypt(struct skcipher_request *req)
 {
 	struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req);
 	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
@@ -125,8 +54,8 @@
 	u8 real_iv[16];
 
 	/* Compute the subkey given the original key and first 128 nonce bits */
-	crypto_chacha_init(state, ctx, req->iv);
-	hchacha_block(state, subctx.key, ctx->nrounds);
+	chacha_init_generic(state, ctx->key, req->iv);
+	hchacha_block_generic(state, subctx.key, ctx->nrounds);
 	subctx.nrounds = ctx->nrounds;
 
 	/* Build the real IV */
@@ -136,7 +65,6 @@
 	/* Generate the stream and XOR it with the data */
 	return chacha_stream_xor(req, &subctx, real_iv);
 }
-EXPORT_SYMBOL_GPL(crypto_xchacha_crypt);
 
 static struct skcipher_alg algs[] = {
 	{
@@ -151,7 +79,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= CHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= crypto_chacha_crypt,
 		.decrypt		= crypto_chacha_crypt,
 	}, {
@@ -166,7 +94,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha20_setkey,
+		.setkey			= chacha20_setkey,
 		.encrypt		= crypto_xchacha_crypt,
 		.decrypt		= crypto_xchacha_crypt,
 	}, {
@@ -181,7 +109,7 @@
 		.max_keysize		= CHACHA_KEY_SIZE,
 		.ivsize			= XCHACHA_IV_SIZE,
 		.chunksize		= CHACHA_BLOCK_SIZE,
-		.setkey			= crypto_chacha12_setkey,
+		.setkey			= chacha12_setkey,
 		.encrypt		= crypto_xchacha_crypt,
 		.decrypt		= crypto_xchacha_crypt,
 	}
diff --git a/crypto/curve25519-generic.c b/crypto/curve25519-generic.c
new file mode 100644
index 0000000..bd88fd5
--- /dev/null
+++ b/crypto/curve25519-generic.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <crypto/curve25519.h>
+#include <crypto/internal/kpp.h>
+#include <crypto/kpp.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+
+static int curve25519_set_secret(struct crypto_kpp *tfm, const void *buf,
+				 unsigned int len)
+{
+	u8 *secret = kpp_tfm_ctx(tfm);
+
+	if (!len)
+		curve25519_generate_secret(secret);
+	else if (len == CURVE25519_KEY_SIZE &&
+		 crypto_memneq(buf, curve25519_null_point, CURVE25519_KEY_SIZE))
+		memcpy(secret, buf, CURVE25519_KEY_SIZE);
+	else
+		return -EINVAL;
+	return 0;
+}
+
+static int curve25519_compute_value(struct kpp_request *req)
+{
+	struct crypto_kpp *tfm = crypto_kpp_reqtfm(req);
+	const u8 *secret = kpp_tfm_ctx(tfm);
+	u8 public_key[CURVE25519_KEY_SIZE];
+	u8 buf[CURVE25519_KEY_SIZE];
+	int copied, nbytes;
+	u8 const *bp;
+
+	if (req->src) {
+		copied = sg_copy_to_buffer(req->src,
+					   sg_nents_for_len(req->src,
+							    CURVE25519_KEY_SIZE),
+					   public_key, CURVE25519_KEY_SIZE);
+		if (copied != CURVE25519_KEY_SIZE)
+			return -EINVAL;
+		bp = public_key;
+	} else {
+		bp = curve25519_base_point;
+	}
+
+	curve25519_generic(buf, secret, bp);
+
+	/* might want less than we've got */
+	nbytes = min_t(size_t, CURVE25519_KEY_SIZE, req->dst_len);
+	copied = sg_copy_from_buffer(req->dst, sg_nents_for_len(req->dst,
+								nbytes),
+				     buf, nbytes);
+	if (copied != nbytes)
+		return -EINVAL;
+	return 0;
+}
+
+static unsigned int curve25519_max_size(struct crypto_kpp *tfm)
+{
+	return CURVE25519_KEY_SIZE;
+}
+
+static struct kpp_alg curve25519_alg = {
+	.base.cra_name		= "curve25519",
+	.base.cra_driver_name	= "curve25519-generic",
+	.base.cra_priority	= 100,
+	.base.cra_module	= THIS_MODULE,
+	.base.cra_ctxsize	= CURVE25519_KEY_SIZE,
+
+	.set_secret		= curve25519_set_secret,
+	.generate_public_key	= curve25519_compute_value,
+	.compute_shared_secret	= curve25519_compute_value,
+	.max_size		= curve25519_max_size,
+};
+
+static int curve25519_init(void)
+{
+	return crypto_register_kpp(&curve25519_alg);
+}
+
+static void curve25519_exit(void)
+{
+	crypto_unregister_kpp(&curve25519_alg);
+}
+
+subsys_initcall(curve25519_init);
+module_exit(curve25519_exit);
+
+MODULE_ALIAS_CRYPTO("curve25519");
+MODULE_ALIAS_CRYPTO("curve25519-generic");
+MODULE_LICENSE("GPL");
diff --git a/crypto/drbg.c b/crypto/drbg.c
index 04379ca..8d80d93 100644
--- a/crypto/drbg.c
+++ b/crypto/drbg.c
@@ -1087,10 +1087,6 @@
 	if (ret)
 		goto unlock;
 
-	/* If nonblocking pool is initialized, deactivate Jitter RNG */
-	crypto_free_rng(drbg->jent);
-	drbg->jent = NULL;
-
 	/* Set seeded to false so that if __drbg_seed fails the
 	 * next generate call will trigger a reseed.
 	 */
@@ -1168,7 +1164,23 @@
 						   entropylen);
 			if (ret) {
 				pr_devel("DRBG: jent failed with %d\n", ret);
-				goto out;
+
+				/*
+				 * Do not treat the transient failure of the
+				 * Jitter RNG as an error that needs to be
+				 * reported. The combined number of the
+				 * maximum reseed threshold times the maximum
+				 * number of Jitter RNG transient errors is
+				 * less than the reseed threshold required by
+				 * SP800-90A allowing us to treat the
+				 * transient errors as such.
+				 *
+				 * However, we mandate that at least the first
+				 * seeding operation must succeed with the
+				 * Jitter RNG.
+				 */
+				if (!reseed || ret != -EAGAIN)
+					goto out;
 			}
 
 			drbg_string_fill(&data1, entropy, entropylen * 2);
@@ -1494,6 +1506,8 @@
 	if (list_empty(&drbg->test_data.list))
 		return 0;
 
+	drbg->jent = crypto_alloc_rng("jitterentropy_rng", 0, 0);
+
 	INIT_WORK(&drbg->seed_work, drbg_async_seed);
 
 	drbg->random_ready.owner = THIS_MODULE;
@@ -1514,8 +1528,6 @@
 		return err;
 	}
 
-	drbg->jent = crypto_alloc_rng("jitterentropy_rng", 0, 0);
-
 	/*
 	 * Require frequent reseeds until the seed source is fully
 	 * initialized.
@@ -1619,10 +1631,12 @@
 	if (drbg->random_ready.func) {
 		del_random_ready_callback(&drbg->random_ready);
 		cancel_work_sync(&drbg->seed_work);
-		crypto_free_rng(drbg->jent);
-		drbg->jent = NULL;
 	}
 
+	if (!IS_ERR_OR_NULL(drbg->jent))
+		crypto_free_rng(drbg->jent);
+	drbg->jent = NULL;
+
 	if (drbg->d_ops)
 		drbg->d_ops->crypto_fini(drbg);
 	drbg_dealloc_state(drbg);
diff --git a/crypto/jitterentropy-kcapi.c b/crypto/jitterentropy-kcapi.c
index 701b8d8..b43684c 100644
--- a/crypto/jitterentropy-kcapi.c
+++ b/crypto/jitterentropy-kcapi.c
@@ -44,13 +44,7 @@
 #include <linux/crypto.h>
 #include <crypto/internal/rng.h>
 
-struct rand_data;
-int jent_read_entropy(struct rand_data *ec, unsigned char *data,
-		      unsigned int len);
-int jent_entropy_init(void);
-struct rand_data *jent_entropy_collector_alloc(unsigned int osr,
-					       unsigned int flags);
-void jent_entropy_collector_free(struct rand_data *entropy_collector);
+#include "jitterentropy.h"
 
 /***************************************************************************
  * Helper function
@@ -114,6 +108,7 @@
 struct jitterentropy {
 	spinlock_t jent_lock;
 	struct rand_data *entropy_collector;
+	unsigned int reset_cnt;
 };
 
 static int jent_kcapi_init(struct crypto_tfm *tfm)
@@ -148,7 +143,33 @@
 	int ret = 0;
 
 	spin_lock(&rng->jent_lock);
+
+	/* Return a permanent error in case we had too many resets in a row. */
+	if (rng->reset_cnt > (1<<10)) {
+		ret = -EFAULT;
+		goto out;
+	}
+
 	ret = jent_read_entropy(rng->entropy_collector, rdata, dlen);
+
+	/* Reset RNG in case of health failures */
+	if (ret < -1) {
+		pr_warn_ratelimited("Reset Jitter RNG due to health test failure: %s failure\n",
+				    (ret == -2) ? "Repetition Count Test" :
+						  "Adaptive Proportion Test");
+
+		rng->reset_cnt++;
+
+		ret = -EAGAIN;
+	} else {
+		rng->reset_cnt = 0;
+
+		/* Convert the Jitter RNG error into a usable error code */
+		if (ret == -1)
+			ret = -EINVAL;
+	}
+
+out:
 	spin_unlock(&rng->jent_lock);
 
 	return ret;
diff --git a/crypto/jitterentropy.c b/crypto/jitterentropy.c
index 77fa212..57f4a1a 100644
--- a/crypto/jitterentropy.c
+++ b/crypto/jitterentropy.c
@@ -2,7 +2,7 @@
  * Non-physical true random number generator based on timing jitter --
  * Jitter RNG standalone code.
  *
- * Copyright Stephan Mueller <smueller@chronox.de>, 2015 - 2019
+ * Copyright Stephan Mueller <smueller@chronox.de>, 2015 - 2020
  *
  * Design
  * ======
@@ -47,7 +47,7 @@
 
 /*
  * This Jitterentropy RNG is based on the jitterentropy library
- * version 2.1.2 provided at http://www.chronox.de/jent.html
+ * version 2.2.0 provided at http://www.chronox.de/jent.html
  */
 
 #ifdef __OPTIMIZE__
@@ -83,6 +83,22 @@
 	unsigned int memblocksize; /* Size of one memory block in bytes */
 	unsigned int memaccessloops; /* Number of memory accesses per random
 				      * bit generation */
+
+	/* Repetition Count Test */
+	int rct_count;			/* Number of stuck values */
+
+	/* Adaptive Proportion Test for a significance level of 2^-30 */
+#define JENT_APT_CUTOFF		325	/* Taken from SP800-90B sec 4.4.2 */
+#define JENT_APT_WINDOW_SIZE	512	/* Data window size */
+	/* LSB of time stamp to process */
+#define JENT_APT_LSB		16
+#define JENT_APT_WORD_MASK	(JENT_APT_LSB - 1)
+	unsigned int apt_observations;	/* Number of collected observations */
+	unsigned int apt_count;		/* APT counter */
+	unsigned int apt_base;		/* APT base reference */
+	unsigned int apt_base_set:1;	/* APT base reference set? */
+
+	unsigned int health_failure:1;	/* Permanent health failure */
 };
 
 /* Flags that can be used to initialize the RNG */
@@ -98,17 +114,201 @@
 				   * variations (2nd derivation of time is
 				   * zero). */
 #define JENT_ESTUCK		8 /* Too many stuck results during init. */
+#define JENT_EHEALTH		9 /* Health test failed during initialization */
+#define JENT_ERCT		10 /* RCT failed during initialization */
+
+#include "jitterentropy.h"
 
 /***************************************************************************
- * Helper functions
+ * Adaptive Proportion Test
+ *
+ * This test complies with SP800-90B section 4.4.2.
  ***************************************************************************/
 
-void jent_get_nstime(__u64 *out);
-void *jent_zalloc(unsigned int len);
-void jent_zfree(void *ptr);
-int jent_fips_enabled(void);
-void jent_panic(char *s);
-void jent_memcpy(void *dest, const void *src, unsigned int n);
+/**
+ * Reset the APT counter
+ *
+ * @ec [in] Reference to entropy collector
+ */
+static void jent_apt_reset(struct rand_data *ec, unsigned int delta_masked)
+{
+	/* Reset APT counter */
+	ec->apt_count = 0;
+	ec->apt_base = delta_masked;
+	ec->apt_observations = 0;
+}
+
+/**
+ * Insert a new entropy event into APT
+ *
+ * @ec [in] Reference to entropy collector
+ * @delta_masked [in] Masked time delta to process
+ */
+static void jent_apt_insert(struct rand_data *ec, unsigned int delta_masked)
+{
+	/* Initialize the base reference */
+	if (!ec->apt_base_set) {
+		ec->apt_base = delta_masked;
+		ec->apt_base_set = 1;
+		return;
+	}
+
+	if (delta_masked == ec->apt_base) {
+		ec->apt_count++;
+
+		if (ec->apt_count >= JENT_APT_CUTOFF)
+			ec->health_failure = 1;
+	}
+
+	ec->apt_observations++;
+
+	if (ec->apt_observations >= JENT_APT_WINDOW_SIZE)
+		jent_apt_reset(ec, delta_masked);
+}
+
+/***************************************************************************
+ * Stuck Test and its use as Repetition Count Test
+ *
+ * The Jitter RNG uses an enhanced version of the Repetition Count Test
+ * (RCT) specified in SP800-90B section 4.4.1. Instead of counting identical
+ * back-to-back values, the input to the RCT is the counting of the stuck
+ * values during the generation of one Jitter RNG output block.
+ *
+ * The RCT is applied with an alpha of 2^{-30} compliant to FIPS 140-2 IG 9.8.
+ *
+ * During the counting operation, the Jitter RNG always calculates the RCT
+ * cut-off value of C. If that value exceeds the allowed cut-off value,
+ * the Jitter RNG output block will be calculated completely but discarded at
+ * the end. The caller of the Jitter RNG is informed with an error code.
+ ***************************************************************************/
+
+/**
+ * Repetition Count Test as defined in SP800-90B section 4.4.1
+ *
+ * @ec [in] Reference to entropy collector
+ * @stuck [in] Indicator whether the value is stuck
+ */
+static void jent_rct_insert(struct rand_data *ec, int stuck)
+{
+	/*
+	 * If we have a count less than zero, a previous RCT round identified
+	 * a failure. We will not overwrite it.
+	 */
+	if (ec->rct_count < 0)
+		return;
+
+	if (stuck) {
+		ec->rct_count++;
+
+		/*
+		 * The cutoff value is based on the following consideration:
+		 * alpha = 2^-30 as recommended in FIPS 140-2 IG 9.8.
+		 * In addition, we require an entropy value H of 1/OSR as this
+		 * is the minimum entropy required to provide full entropy.
+		 * Note, we collect 64 * OSR deltas for inserting them into
+		 * the entropy pool which should then have (close to) 64 bits
+		 * of entropy.
+		 *
+		 * Note, ec->rct_count (which equals to value B in the pseudo
+		 * code of SP800-90B section 4.4.1) starts with zero. Hence
+		 * we need to subtract one from the cutoff value as calculated
+		 * following SP800-90B.
+		 */
+		if ((unsigned int)ec->rct_count >= (31 * ec->osr)) {
+			ec->rct_count = -1;
+			ec->health_failure = 1;
+		}
+	} else {
+		ec->rct_count = 0;
+	}
+}
+
+/**
+ * Is there an RCT health test failure?
+ *
+ * @ec [in] Reference to entropy collector
+ *
+ * @return
+ * 	0 No health test failure
+ * 	1 Permanent health test failure
+ */
+static int jent_rct_failure(struct rand_data *ec)
+{
+	if (ec->rct_count < 0)
+		return 1;
+	return 0;
+}
+
+static inline __u64 jent_delta(__u64 prev, __u64 next)
+{
+#define JENT_UINT64_MAX		(__u64)(~((__u64) 0))
+	return (prev < next) ? (next - prev) :
+			       (JENT_UINT64_MAX - prev + 1 + next);
+}
+
+/**
+ * Stuck test by checking the:
+ * 	1st derivative of the jitter measurement (time delta)
+ * 	2nd derivative of the jitter measurement (delta of time deltas)
+ * 	3rd derivative of the jitter measurement (delta of delta of time deltas)
+ *
+ * All values must always be non-zero.
+ *
+ * @ec [in] Reference to entropy collector
+ * @current_delta [in] Jitter time delta
+ *
+ * @return
+ * 	0 jitter measurement not stuck (good bit)
+ * 	1 jitter measurement stuck (reject bit)
+ */
+static int jent_stuck(struct rand_data *ec, __u64 current_delta)
+{
+	__u64 delta2 = jent_delta(ec->last_delta, current_delta);
+	__u64 delta3 = jent_delta(ec->last_delta2, delta2);
+	unsigned int delta_masked = current_delta & JENT_APT_WORD_MASK;
+
+	ec->last_delta = current_delta;
+	ec->last_delta2 = delta2;
+
+	/*
+	 * Insert the result of the comparison of two back-to-back time
+	 * deltas.
+	 */
+	jent_apt_insert(ec, delta_masked);
+
+	if (!current_delta || !delta2 || !delta3) {
+		/* RCT with a stuck bit */
+		jent_rct_insert(ec, 1);
+		return 1;
+	}
+
+	/* RCT with a non-stuck bit */
+	jent_rct_insert(ec, 0);
+
+	return 0;
+}
+
+/**
+ * Report any health test failures
+ *
+ * @ec [in] Reference to entropy collector
+ *
+ * @return
+ * 	0 No health test failure
+ * 	1 Permanent health test failure
+ */
+static int jent_health_failure(struct rand_data *ec)
+{
+	/* Test is only enabled in FIPS mode */
+	if (!jent_fips_enabled())
+		return 0;
+
+	return ec->health_failure;
+}
+
+/***************************************************************************
+ * Noise sources
+ ***************************************************************************/
 
 /**
  * Update of the loop count used for the next round of
@@ -153,10 +353,6 @@
 	return (shuffle + (1<<min));
 }
 
-/***************************************************************************
- * Noise sources
- ***************************************************************************/
-
 /**
  * CPU Jitter noise source -- this is the noise source based on the CPU
  *			      execution time jitter
@@ -171,18 +367,19 @@
  * the CPU execution time jitter. Any change to the loop in this function
  * implies that careful retesting must be done.
  *
- * Input:
- * @ec entropy collector struct -- may be NULL
- * @time time stamp to be injected
- * @loop_cnt if a value not equal to 0 is set, use the given value as number of
- *	     loops to perform the folding
+ * @ec [in] entropy collector struct
+ * @time [in] time stamp to be injected
+ * @loop_cnt [in] if a value not equal to 0 is set, use the given value as
+ *		  number of loops to perform the folding
+ * @stuck [in] Is the time stamp identified as stuck?
  *
  * Output:
  * updated ec->data
  *
  * @return Number of loops the folding operation is performed
  */
-static __u64 jent_lfsr_time(struct rand_data *ec, __u64 time, __u64 loop_cnt)
+static void jent_lfsr_time(struct rand_data *ec, __u64 time, __u64 loop_cnt,
+			   int stuck)
 {
 	unsigned int i;
 	__u64 j = 0;
@@ -225,9 +422,17 @@
 			new ^= tmp;
 		}
 	}
-	ec->data = new;
 
-	return fold_loop_cnt;
+	/*
+	 * If the time stamp is stuck, do not finally insert the value into
+	 * the entropy pool. Although this operation should not do any harm
+	 * even when the time stamp has no entropy, SP800-90B requires that
+	 * any conditioning operation (SP800-90B considers the LFSR to be a
+	 * conditioning operation) to have an identical amount of input
+	 * data according to section 3.1.5.
+	 */
+	if (!stuck)
+		ec->data = new;
 }
 
 /**
@@ -248,16 +453,13 @@
  * to reliably access either L3 or memory, the ec->mem memory must be quite
  * large which is usually not desirable.
  *
- * Input:
- * @ec Reference to the entropy collector with the memory access data -- if
- *     the reference to the memory block to be accessed is NULL, this noise
- *     source is disabled
- * @loop_cnt if a value not equal to 0 is set, use the given value as number of
- *	     loops to perform the folding
- *
- * @return Number of memory access operations
+ * @ec [in] Reference to the entropy collector with the memory access data -- if
+ *	    the reference to the memory block to be accessed is NULL, this noise
+ *	    source is disabled
+ * @loop_cnt [in] if a value not equal to 0 is set, use the given value
+ *		  number of loops to perform the LFSR
  */
-static unsigned int jent_memaccess(struct rand_data *ec, __u64 loop_cnt)
+static void jent_memaccess(struct rand_data *ec, __u64 loop_cnt)
 {
 	unsigned int wrap = 0;
 	__u64 i = 0;
@@ -267,7 +469,7 @@
 		jent_loop_shuffle(ec, MAX_ACC_LOOP_BIT, MIN_ACC_LOOP_BIT);
 
 	if (NULL == ec || NULL == ec->mem)
-		return 0;
+		return;
 	wrap = ec->memblocksize * ec->memblocks;
 
 	/*
@@ -293,43 +495,11 @@
 		ec->memlocation = ec->memlocation + ec->memblocksize - 1;
 		ec->memlocation = ec->memlocation % wrap;
 	}
-	return i;
 }
 
 /***************************************************************************
  * Start of entropy processing logic
  ***************************************************************************/
-
-/**
- * Stuck test by checking the:
- *	1st derivation of the jitter measurement (time delta)
- *	2nd derivation of the jitter measurement (delta of time deltas)
- *	3rd derivation of the jitter measurement (delta of delta of time deltas)
- *
- * All values must always be non-zero.
- *
- * Input:
- * @ec Reference to entropy collector
- * @current_delta Jitter time delta
- *
- * @return
- *	0 jitter measurement not stuck (good bit)
- *	1 jitter measurement stuck (reject bit)
- */
-static int jent_stuck(struct rand_data *ec, __u64 current_delta)
-{
-	__s64 delta2 = ec->last_delta - current_delta;
-	__s64 delta3 = delta2 - ec->last_delta2;
-
-	ec->last_delta = current_delta;
-	ec->last_delta2 = delta2;
-
-	if (!current_delta || !delta2 || !delta3)
-		return 1;
-
-	return 0;
-}
-
 /**
  * This is the heart of the entropy generation: calculate time deltas and
  * use the CPU jitter in the time deltas. The jitter is injected into the
@@ -339,8 +509,7 @@
  *	    of this function! This can be done by calling this function
  *	    and not using its result.
  *
- * Input:
- * @entropy_collector Reference to entropy collector
+ * @ec [in] Reference to entropy collector
  *
  * @return result of stuck test
  */
@@ -348,6 +517,7 @@
 {
 	__u64 time = 0;
 	__u64 current_delta = 0;
+	int stuck;
 
 	/* Invoke one noise source before time measurement to add variations */
 	jent_memaccess(ec, 0);
@@ -357,22 +527,23 @@
 	 * invocation to measure the timing variations
 	 */
 	jent_get_nstime(&time);
-	current_delta = time - ec->prev_time;
+	current_delta = jent_delta(ec->prev_time, time);
 	ec->prev_time = time;
 
-	/* Now call the next noise sources which also injects the data */
-	jent_lfsr_time(ec, current_delta, 0);
-
 	/* Check whether we have a stuck measurement. */
-	return jent_stuck(ec, current_delta);
+	stuck = jent_stuck(ec, current_delta);
+
+	/* Now call the next noise sources which also injects the data */
+	jent_lfsr_time(ec, current_delta, 0, stuck);
+
+	return stuck;
 }
 
 /**
  * Generator of one 64 bit random number
  * Function fills rand_data->data
  *
- * Input:
- * @ec Reference to entropy collector
+ * @ec [in] Reference to entropy collector
  */
 static void jent_gen_entropy(struct rand_data *ec)
 {
@@ -396,31 +567,6 @@
 }
 
 /**
- * The continuous test required by FIPS 140-2 -- the function automatically
- * primes the test if needed.
- *
- * Return:
- * 0 if FIPS test passed
- * < 0 if FIPS test failed
- */
-static void jent_fips_test(struct rand_data *ec)
-{
-	if (!jent_fips_enabled())
-		return;
-
-	/* prime the FIPS test */
-	if (!ec->old_data) {
-		ec->old_data = ec->data;
-		jent_gen_entropy(ec);
-	}
-
-	if (ec->data == ec->old_data)
-		jent_panic("jitterentropy: Duplicate output detected\n");
-
-	ec->old_data = ec->data;
-}
-
-/**
  * Entry function: Obtain entropy for the caller.
  *
  * This function invokes the entropy gathering logic as often to generate
@@ -430,17 +576,18 @@
  * This function truncates the last 64 bit entropy value output to the exact
  * size specified by the caller.
  *
- * Input:
- * @ec Reference to entropy collector
- * @data pointer to buffer for storing random data -- buffer must already
- *	 exist
- * @len size of the buffer, specifying also the requested number of random
- *	in bytes
+ * @ec [in] Reference to entropy collector
+ * @data [in] pointer to buffer for storing random data -- buffer must already
+ *	      exist
+ * @len [in] size of the buffer, specifying also the requested number of random
+ *	     in bytes
  *
  * @return 0 when request is fulfilled or an error
  *
  * The following error codes can occur:
  *	-1	entropy_collector is NULL
+ *	-2	RCT failed
+ *	-3	APT test failed
  */
 int jent_read_entropy(struct rand_data *ec, unsigned char *data,
 		      unsigned int len)
@@ -454,7 +601,42 @@
 		unsigned int tocopy;
 
 		jent_gen_entropy(ec);
-		jent_fips_test(ec);
+
+		if (jent_health_failure(ec)) {
+			int ret;
+
+			if (jent_rct_failure(ec))
+				ret = -2;
+			else
+				ret = -3;
+
+			/*
+			 * Re-initialize the noise source
+			 *
+			 * If the health test fails, the Jitter RNG remains
+			 * in failure state and will return a health failure
+			 * during next invocation.
+			 */
+			if (jent_entropy_init())
+				return ret;
+
+			/* Set APT to initial state */
+			jent_apt_reset(ec, 0);
+			ec->apt_base_set = 0;
+
+			/* Set RCT to initial state */
+			ec->rct_count = 0;
+
+			/* Re-enable Jitter RNG */
+			ec->health_failure = 0;
+
+			/*
+			 * Return the health test failure status to the
+			 * caller as the generated value is not appropriate.
+			 */
+			return ret;
+		}
+
 		if ((DATA_SIZE_BITS / 8) < len)
 			tocopy = (DATA_SIZE_BITS / 8);
 		else
@@ -518,11 +700,15 @@
 	int i;
 	__u64 delta_sum = 0;
 	__u64 old_delta = 0;
+	unsigned int nonstuck = 0;
 	int time_backwards = 0;
 	int count_mod = 0;
 	int count_stuck = 0;
 	struct rand_data ec = { 0 };
 
+	/* Required for RCT */
+	ec.osr = 1;
+
 	/* We could perform statistical tests here, but the problem is
 	 * that we only have a few loop counts to do testing. These
 	 * loop counts may show some slight skew and we produce
@@ -544,8 +730,10 @@
 	/*
 	 * TESTLOOPCOUNT needs some loops to identify edge systems. 100 is
 	 * definitely too little.
+	 *
+	 * SP800-90B requires at least 1024 initial test cycles.
 	 */
-#define TESTLOOPCOUNT 300
+#define TESTLOOPCOUNT 1024
 #define CLEARCACHE 100
 	for (i = 0; (TESTLOOPCOUNT + CLEARCACHE) > i; i++) {
 		__u64 time = 0;
@@ -557,13 +745,13 @@
 		/* Invoke core entropy collection logic */
 		jent_get_nstime(&time);
 		ec.prev_time = time;
-		jent_lfsr_time(&ec, time, 0);
+		jent_lfsr_time(&ec, time, 0, 0);
 		jent_get_nstime(&time2);
 
 		/* test whether timer works */
 		if (!time || !time2)
 			return JENT_ENOTIME;
-		delta = time2 - time;
+		delta = jent_delta(time, time2);
 		/*
 		 * test whether timer is fine grained enough to provide
 		 * delta even when called shortly after each other -- this
@@ -586,6 +774,28 @@
 
 		if (stuck)
 			count_stuck++;
+		else {
+			nonstuck++;
+
+			/*
+			 * Ensure that the APT succeeded.
+			 *
+			 * With the check below that count_stuck must be less
+			 * than 10% of the overall generated raw entropy values
+			 * it is guaranteed that the APT is invoked at
+			 * floor((TESTLOOPCOUNT * 0.9) / 64) == 14 times.
+			 */
+			if ((nonstuck % JENT_APT_WINDOW_SIZE) == 0) {
+				jent_apt_reset(&ec,
+					       delta & JENT_APT_WORD_MASK);
+				if (jent_health_failure(&ec))
+					return JENT_EHEALTH;
+			}
+		}
+
+		/* Validate RCT */
+		if (jent_rct_failure(&ec))
+			return JENT_ERCT;
 
 		/* test whether we have an increasing timer */
 		if (!(time2 > time))
diff --git a/crypto/jitterentropy.h b/crypto/jitterentropy.h
new file mode 100644
index 0000000..c83fff3
--- /dev/null
+++ b/crypto/jitterentropy.h
@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+extern void *jent_zalloc(unsigned int len);
+extern void jent_zfree(void *ptr);
+extern int jent_fips_enabled(void);
+extern void jent_panic(char *s);
+extern void jent_memcpy(void *dest, const void *src, unsigned int n);
+extern void jent_get_nstime(__u64 *out);
+
+struct rand_data;
+extern int jent_entropy_init(void);
+extern int jent_read_entropy(struct rand_data *ec, unsigned char *data,
+			     unsigned int len);
+
+extern struct rand_data *jent_entropy_collector_alloc(unsigned int osr,
+						      unsigned int flags);
+extern void jent_entropy_collector_free(struct rand_data *entropy_collector);
diff --git a/crypto/nhpoly1305.c b/crypto/nhpoly1305.c
index 9ab4e07..8a3006c 100644
--- a/crypto/nhpoly1305.c
+++ b/crypto/nhpoly1305.c
@@ -33,6 +33,7 @@
 #include <asm/unaligned.h>
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
+#include <crypto/internal/poly1305.h>
 #include <crypto/nhpoly1305.h>
 #include <linux/crypto.h>
 #include <linux/kernel.h>
@@ -78,7 +79,7 @@
 	BUILD_BUG_ON(NH_HASH_BYTES % POLY1305_BLOCK_SIZE != 0);
 
 	poly1305_core_blocks(&state->poly_state, &key->poly_key, state->nh_hash,
-			     NH_HASH_BYTES / POLY1305_BLOCK_SIZE);
+			     NH_HASH_BYTES / POLY1305_BLOCK_SIZE, 1);
 }
 
 /*
@@ -209,7 +210,7 @@
 	if (state->nh_remaining)
 		process_nh_hash_value(state, key);
 
-	poly1305_core_emit(&state->poly_state, dst);
+	poly1305_core_emit(&state->poly_state, NULL, dst);
 	return 0;
 }
 EXPORT_SYMBOL(crypto_nhpoly1305_final_helper);
diff --git a/crypto/poly1305_generic.c b/crypto/poly1305_generic.c
index adc4029..94af47e 100644
--- a/crypto/poly1305_generic.c
+++ b/crypto/poly1305_generic.c
@@ -13,65 +13,33 @@
 
 #include <crypto/algapi.h>
 #include <crypto/internal/hash.h>
-#include <crypto/poly1305.h>
+#include <crypto/internal/poly1305.h>
 #include <linux/crypto.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <asm/unaligned.h>
 
-static inline u64 mlt(u64 a, u64 b)
-{
-	return a * b;
-}
-
-static inline u32 sr(u64 v, u_char n)
-{
-	return v >> n;
-}
-
-static inline u32 and(u32 v, u32 mask)
-{
-	return v & mask;
-}
-
-int crypto_poly1305_init(struct shash_desc *desc)
+static int crypto_poly1305_init(struct shash_desc *desc)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
 
 	poly1305_core_init(&dctx->h);
 	dctx->buflen = 0;
-	dctx->rset = false;
+	dctx->rset = 0;
 	dctx->sset = false;
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_init);
 
-void poly1305_core_setkey(struct poly1305_key *key, const u8 *raw_key)
-{
-	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
-	key->r[0] = (get_unaligned_le32(raw_key +  0) >> 0) & 0x3ffffff;
-	key->r[1] = (get_unaligned_le32(raw_key +  3) >> 2) & 0x3ffff03;
-	key->r[2] = (get_unaligned_le32(raw_key +  6) >> 4) & 0x3ffc0ff;
-	key->r[3] = (get_unaligned_le32(raw_key +  9) >> 6) & 0x3f03fff;
-	key->r[4] = (get_unaligned_le32(raw_key + 12) >> 8) & 0x00fffff;
-}
-EXPORT_SYMBOL_GPL(poly1305_core_setkey);
-
-/*
- * Poly1305 requires a unique key for each tag, which implies that we can't set
- * it on the tfm that gets accessed by multiple users simultaneously. Instead we
- * expect the key as the first 32 bytes in the update() call.
- */
-unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
-					const u8 *src, unsigned int srclen)
+static unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
+					       const u8 *src, unsigned int srclen)
 {
 	if (!dctx->sset) {
 		if (!dctx->rset && srclen >= POLY1305_BLOCK_SIZE) {
-			poly1305_core_setkey(&dctx->r, src);
+			poly1305_core_setkey(&dctx->core_r, src);
 			src += POLY1305_BLOCK_SIZE;
 			srclen -= POLY1305_BLOCK_SIZE;
-			dctx->rset = true;
+			dctx->rset = 2;
 		}
 		if (srclen >= POLY1305_BLOCK_SIZE) {
 			dctx->s[0] = get_unaligned_le32(src +  0);
@@ -85,86 +53,9 @@
 	}
 	return srclen;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_setdesckey);
 
-static void poly1305_blocks_internal(struct poly1305_state *state,
-				     const struct poly1305_key *key,
-				     const void *src, unsigned int nblocks,
-				     u32 hibit)
-{
-	u32 r0, r1, r2, r3, r4;
-	u32 s1, s2, s3, s4;
-	u32 h0, h1, h2, h3, h4;
-	u64 d0, d1, d2, d3, d4;
-
-	if (!nblocks)
-		return;
-
-	r0 = key->r[0];
-	r1 = key->r[1];
-	r2 = key->r[2];
-	r3 = key->r[3];
-	r4 = key->r[4];
-
-	s1 = r1 * 5;
-	s2 = r2 * 5;
-	s3 = r3 * 5;
-	s4 = r4 * 5;
-
-	h0 = state->h[0];
-	h1 = state->h[1];
-	h2 = state->h[2];
-	h3 = state->h[3];
-	h4 = state->h[4];
-
-	do {
-		/* h += m[i] */
-		h0 += (get_unaligned_le32(src +  0) >> 0) & 0x3ffffff;
-		h1 += (get_unaligned_le32(src +  3) >> 2) & 0x3ffffff;
-		h2 += (get_unaligned_le32(src +  6) >> 4) & 0x3ffffff;
-		h3 += (get_unaligned_le32(src +  9) >> 6) & 0x3ffffff;
-		h4 += (get_unaligned_le32(src + 12) >> 8) | hibit;
-
-		/* h *= r */
-		d0 = mlt(h0, r0) + mlt(h1, s4) + mlt(h2, s3) +
-		     mlt(h3, s2) + mlt(h4, s1);
-		d1 = mlt(h0, r1) + mlt(h1, r0) + mlt(h2, s4) +
-		     mlt(h3, s3) + mlt(h4, s2);
-		d2 = mlt(h0, r2) + mlt(h1, r1) + mlt(h2, r0) +
-		     mlt(h3, s4) + mlt(h4, s3);
-		d3 = mlt(h0, r3) + mlt(h1, r2) + mlt(h2, r1) +
-		     mlt(h3, r0) + mlt(h4, s4);
-		d4 = mlt(h0, r4) + mlt(h1, r3) + mlt(h2, r2) +
-		     mlt(h3, r1) + mlt(h4, r0);
-
-		/* (partial) h %= p */
-		d1 += sr(d0, 26);     h0 = and(d0, 0x3ffffff);
-		d2 += sr(d1, 26);     h1 = and(d1, 0x3ffffff);
-		d3 += sr(d2, 26);     h2 = and(d2, 0x3ffffff);
-		d4 += sr(d3, 26);     h3 = and(d3, 0x3ffffff);
-		h0 += sr(d4, 26) * 5; h4 = and(d4, 0x3ffffff);
-		h1 += h0 >> 26;       h0 = h0 & 0x3ffffff;
-
-		src += POLY1305_BLOCK_SIZE;
-	} while (--nblocks);
-
-	state->h[0] = h0;
-	state->h[1] = h1;
-	state->h[2] = h2;
-	state->h[3] = h3;
-	state->h[4] = h4;
-}
-
-void poly1305_core_blocks(struct poly1305_state *state,
-			  const struct poly1305_key *key,
-			  const void *src, unsigned int nblocks)
-{
-	poly1305_blocks_internal(state, key, src, nblocks, 1 << 24);
-}
-EXPORT_SYMBOL_GPL(poly1305_core_blocks);
-
-static void poly1305_blocks(struct poly1305_desc_ctx *dctx,
-			    const u8 *src, unsigned int srclen, u32 hibit)
+static void poly1305_blocks(struct poly1305_desc_ctx *dctx, const u8 *src,
+			    unsigned int srclen)
 {
 	unsigned int datalen;
 
@@ -174,12 +65,12 @@
 		srclen = datalen;
 	}
 
-	poly1305_blocks_internal(&dctx->h, &dctx->r,
-				 src, srclen / POLY1305_BLOCK_SIZE, hibit);
+	poly1305_core_blocks(&dctx->h, &dctx->core_r, src,
+			     srclen / POLY1305_BLOCK_SIZE, 1);
 }
 
-int crypto_poly1305_update(struct shash_desc *desc,
-			   const u8 *src, unsigned int srclen)
+static int crypto_poly1305_update(struct shash_desc *desc,
+				  const u8 *src, unsigned int srclen)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
 	unsigned int bytes;
@@ -193,13 +84,13 @@
 
 		if (dctx->buflen == POLY1305_BLOCK_SIZE) {
 			poly1305_blocks(dctx, dctx->buf,
-					POLY1305_BLOCK_SIZE, 1 << 24);
+					POLY1305_BLOCK_SIZE);
 			dctx->buflen = 0;
 		}
 	}
 
 	if (likely(srclen >= POLY1305_BLOCK_SIZE)) {
-		poly1305_blocks(dctx, src, srclen, 1 << 24);
+		poly1305_blocks(dctx, src, srclen);
 		src += srclen - (srclen % POLY1305_BLOCK_SIZE);
 		srclen %= POLY1305_BLOCK_SIZE;
 	}
@@ -211,87 +102,17 @@
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_update);
 
-void poly1305_core_emit(const struct poly1305_state *state, void *dst)
-{
-	u32 h0, h1, h2, h3, h4;
-	u32 g0, g1, g2, g3, g4;
-	u32 mask;
-
-	/* fully carry h */
-	h0 = state->h[0];
-	h1 = state->h[1];
-	h2 = state->h[2];
-	h3 = state->h[3];
-	h4 = state->h[4];
-
-	h2 += (h1 >> 26);     h1 = h1 & 0x3ffffff;
-	h3 += (h2 >> 26);     h2 = h2 & 0x3ffffff;
-	h4 += (h3 >> 26);     h3 = h3 & 0x3ffffff;
-	h0 += (h4 >> 26) * 5; h4 = h4 & 0x3ffffff;
-	h1 += (h0 >> 26);     h0 = h0 & 0x3ffffff;
-
-	/* compute h + -p */
-	g0 = h0 + 5;
-	g1 = h1 + (g0 >> 26);             g0 &= 0x3ffffff;
-	g2 = h2 + (g1 >> 26);             g1 &= 0x3ffffff;
-	g3 = h3 + (g2 >> 26);             g2 &= 0x3ffffff;
-	g4 = h4 + (g3 >> 26) - (1 << 26); g3 &= 0x3ffffff;
-
-	/* select h if h < p, or h + -p if h >= p */
-	mask = (g4 >> ((sizeof(u32) * 8) - 1)) - 1;
-	g0 &= mask;
-	g1 &= mask;
-	g2 &= mask;
-	g3 &= mask;
-	g4 &= mask;
-	mask = ~mask;
-	h0 = (h0 & mask) | g0;
-	h1 = (h1 & mask) | g1;
-	h2 = (h2 & mask) | g2;
-	h3 = (h3 & mask) | g3;
-	h4 = (h4 & mask) | g4;
-
-	/* h = h % (2^128) */
-	put_unaligned_le32((h0 >>  0) | (h1 << 26), dst +  0);
-	put_unaligned_le32((h1 >>  6) | (h2 << 20), dst +  4);
-	put_unaligned_le32((h2 >> 12) | (h3 << 14), dst +  8);
-	put_unaligned_le32((h3 >> 18) | (h4 <<  8), dst + 12);
-}
-EXPORT_SYMBOL_GPL(poly1305_core_emit);
-
-int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
+static int crypto_poly1305_final(struct shash_desc *desc, u8 *dst)
 {
 	struct poly1305_desc_ctx *dctx = shash_desc_ctx(desc);
-	__le32 digest[4];
-	u64 f = 0;
 
 	if (unlikely(!dctx->sset))
 		return -ENOKEY;
 
-	if (unlikely(dctx->buflen)) {
-		dctx->buf[dctx->buflen++] = 1;
-		memset(dctx->buf + dctx->buflen, 0,
-		       POLY1305_BLOCK_SIZE - dctx->buflen);
-		poly1305_blocks(dctx, dctx->buf, POLY1305_BLOCK_SIZE, 0);
-	}
-
-	poly1305_core_emit(&dctx->h, digest);
-
-	/* mac = (h + s) % (2^128) */
-	f = (f >> 32) + le32_to_cpu(digest[0]) + dctx->s[0];
-	put_unaligned_le32(f, dst + 0);
-	f = (f >> 32) + le32_to_cpu(digest[1]) + dctx->s[1];
-	put_unaligned_le32(f, dst + 4);
-	f = (f >> 32) + le32_to_cpu(digest[2]) + dctx->s[2];
-	put_unaligned_le32(f, dst + 8);
-	f = (f >> 32) + le32_to_cpu(digest[3]) + dctx->s[3];
-	put_unaligned_le32(f, dst + 12);
-
+	poly1305_final_generic(dctx, dst);
 	return 0;
 }
-EXPORT_SYMBOL_GPL(crypto_poly1305_final);
 
 static struct shash_alg poly1305_alg = {
 	.digestsize	= POLY1305_DIGEST_SIZE,
diff --git a/crypto/sha256_generic.c b/crypto/sha256_generic.c
index f2d7095..88156e3 100644
--- a/crypto/sha256_generic.c
+++ b/crypto/sha256_generic.c
@@ -35,27 +35,31 @@
 
 static int crypto_sha256_init(struct shash_desc *desc)
 {
-	return sha256_init(shash_desc_ctx(desc));
+	sha256_init(shash_desc_ctx(desc));
+	return 0;
 }
 
 static int crypto_sha224_init(struct shash_desc *desc)
 {
-	return sha224_init(shash_desc_ctx(desc));
+	sha224_init(shash_desc_ctx(desc));
+	return 0;
 }
 
 int crypto_sha256_update(struct shash_desc *desc, const u8 *data,
 			  unsigned int len)
 {
-	return sha256_update(shash_desc_ctx(desc), data, len);
+	sha256_update(shash_desc_ctx(desc), data, len);
+	return 0;
 }
 EXPORT_SYMBOL(crypto_sha256_update);
 
 static int crypto_sha256_final(struct shash_desc *desc, u8 *out)
 {
 	if (crypto_shash_digestsize(desc->tfm) == SHA224_DIGEST_SIZE)
-		return sha224_final(shash_desc_ctx(desc), out);
+		sha224_final(shash_desc_ctx(desc), out);
 	else
-		return sha256_final(shash_desc_ctx(desc), out);
+		sha256_final(shash_desc_ctx(desc), out);
+	return 0;
 }
 
 int crypto_sha256_finup(struct shash_desc *desc, const u8 *data,
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index 7473c5b..83b50e6c 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -4035,6 +4035,58 @@
 		.test = alg_test_null,
 		.fips_allowed = 1,
 	}, {
+		.alg = "blake2b-160",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_160_tv_template)
+		}
+	}, {
+		.alg = "blake2b-256",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_256_tv_template)
+		}
+	}, {
+		.alg = "blake2b-384",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_384_tv_template)
+		}
+	}, {
+		.alg = "blake2b-512",
+		.test = alg_test_hash,
+		.fips_allowed = 0,
+		.suite = {
+			.hash = __VECS(blake2b_512_tv_template)
+		}
+	}, {
+		.alg = "blake2s-128",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_128_tv_template)
+		}
+	}, {
+		.alg = "blake2s-160",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_160_tv_template)
+		}
+	}, {
+		.alg = "blake2s-224",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_224_tv_template)
+		}
+	}, {
+		.alg = "blake2s-256",
+		.test = alg_test_hash,
+		.suite = {
+			.hash = __VECS(blakes2s_256_tv_template)
+		}
+	}, {
 		.alg = "cbc(aes)",
 		.test = alg_test_skcipher,
 		.fips_allowed = 1,
@@ -4272,6 +4324,12 @@
 		.test = alg_test_null,
 		.fips_allowed = 1,
 	}, {
+		.alg = "curve25519",
+		.test = alg_test_kpp,
+		.suite = {
+			.kpp = __VECS(curve25519_tv_template)
+		}
+	}, {
 		.alg = "deflate",
 		.test = alg_test_comp,
 		.fips_allowed = 1,
diff --git a/crypto/testmgr.h b/crypto/testmgr.h
index ef7d21f..ea0679c 100644
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
@@ -1030,6 +1030,1231 @@
 	}
 };
 
+static const struct kpp_testvec curve25519_tv_template[] = {
+{
+	.secret = (u8[32]){ 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
+		     0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
+		     0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
+		     0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
+	.b_public = (u8[32]){ 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
+		    0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
+		    0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
+		    0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
+	.expected_ss = (u8[32]){ 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+		    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+		    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+		    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
+		     0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
+		     0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
+		     0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
+	.b_public = (u8[32]){ 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
+		    0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
+		    0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
+		    0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
+	.expected_ss = (u8[32]){ 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+		    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+		    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+		    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 1 },
+	.b_public = (u8[32]){ 0x25, 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 },
+	.expected_ss = (u8[32]){ 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
+		    0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
+		    0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
+		    0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 1 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
+		    0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
+		    0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
+		    0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+		     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+		     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+		     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
+	.b_public = (u8[32]){ 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+		    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+		    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+		    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+	.expected_ss = (u8[32]){ 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+		    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+		    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+		    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
+	.expected_ss = (u8[32]){ 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
+		    0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
+		    0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
+		    0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+{
+	.secret = (u8[32]){ 0x8e, 0x0a, 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 },
+	.b_public = (u8[32]){ 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, 0x8e, 0x06 },
+	.expected_ss = (u8[32]){ 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
+		    0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
+		    0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
+		    0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - normal case */
+{
+	.secret = (u8[32]){ 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
+		     0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
+		     0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
+		     0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
+	.b_public = (u8[32]){ 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
+		    0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
+		    0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
+		    0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
+	.expected_ss = (u8[32]){ 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
+		    0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
+		    0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
+		    0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
+		     0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
+		     0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
+		     0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
+	.b_public = (u8[32]){ 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
+		    0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
+		    0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
+		    0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
+	.expected_ss = (u8[32]){ 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
+		    0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
+		    0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
+		    0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
+		     0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
+		     0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
+		     0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
+	.b_public = (u8[32]){ 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
+		    0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
+		    0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
+		    0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
+	.expected_ss = (u8[32]){ 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
+		    0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
+		    0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
+		    0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
+		     0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
+		     0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
+		     0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
+	.b_public = (u8[32]){ 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
+		    0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
+		    0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
+		    0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
+	.expected_ss = (u8[32]){ 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
+		    0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
+		    0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
+		    0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
+		     0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
+		     0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
+		     0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
+	.b_public = (u8[32]){ 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
+		    0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
+		    0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
+		    0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
+	.expected_ss = (u8[32]){ 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
+		    0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
+		    0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
+		    0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key on twist */
+{
+	.secret = (u8[32]){ 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
+		     0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
+		     0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
+		     0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
+	.b_public = (u8[32]){ 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
+		    0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
+		    0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
+		    0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
+	.expected_ss = (u8[32]){ 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
+		    0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
+		    0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
+		    0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
+		     0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
+		     0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
+		     0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
+	.b_public = (u8[32]){ 0x02, 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 },
+	.expected_ss = (u8[32]){ 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
+		    0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
+		    0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
+		    0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
+		     0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
+		     0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
+		     0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
+	.b_public = (u8[32]){ 0x03, 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 },
+	.expected_ss = (u8[32]){ 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
+		    0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
+		    0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
+		    0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
+		     0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
+		     0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
+		     0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
+		    0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+		    0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
+		    0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
+		    0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
+		    0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
+		     0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
+		     0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
+		     0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
+	.b_public = (u8[32]){ 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
+		    0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
+		    0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
+		    0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
+		    0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
+		    0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
+		     0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
+		     0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
+		     0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
+	.b_public = (u8[32]){ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+		    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
+		    0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
+		    0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
+		    0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case on twist */
+{
+	.secret = (u8[32]){ 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
+		     0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
+		     0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
+		     0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
+	.b_public = (u8[32]){ 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
+		    0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
+		    0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
+		    0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
+		     0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
+		     0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
+		     0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
+	.b_public = (u8[32]){ 0x04, 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 },
+	.expected_ss = (u8[32]){ 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
+		    0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
+		    0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
+		    0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
+		     0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
+		     0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
+		     0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+		    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
+	.expected_ss = (u8[32]){ 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
+		    0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
+		    0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
+		    0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
+		     0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
+		     0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
+		     0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+	.expected_ss = (u8[32]){ 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
+		    0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
+		    0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
+		    0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
+		     0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
+		     0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
+		     0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
+		    0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+		    0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
+		    0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
+	.expected_ss = (u8[32]){ 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
+		    0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
+		    0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
+		    0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
+		     0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
+		     0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
+		     0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.expected_ss = (u8[32]){ 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
+		    0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
+		    0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
+		    0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
+		     0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
+		     0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
+		     0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+		    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
+		    0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
+		    0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
+		    0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for public key */
+{
+	.secret = (u8[32]){ 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
+		     0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
+		     0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
+		     0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
+	.b_public = (u8[32]){ 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
+		    0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
+		    0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
+		    0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
+		     0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
+		     0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
+		     0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
+	.b_public = (u8[32]){ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
+		    0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
+		    0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
+		    0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
+		     0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
+		     0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
+		     0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
+	.b_public = (u8[32]){ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
+		    0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
+		    0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
+		    0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
+		     0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
+		     0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
+		     0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
+	.b_public = (u8[32]){ 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
+		    0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
+		    0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
+		    0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
+		     0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
+		     0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
+		     0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.expected_ss = (u8[32]){ 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
+		    0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
+		    0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
+		    0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
+		     0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
+		     0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
+		     0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
+	.b_public = (u8[32]){ 0x02, 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, 0x80 },
+	.expected_ss = (u8[32]){ 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
+		    0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
+		    0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
+		    0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
+		     0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
+		     0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
+		     0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
+	.b_public = (u8[32]){ 0x03, 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, 0x80 },
+	.expected_ss = (u8[32]){ 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
+		    0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
+		    0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
+		    0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
+		     0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
+		     0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
+		     0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
+	.b_public = (u8[32]){ 0x04, 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, 0x80 },
+	.expected_ss = (u8[32]){ 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
+		    0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
+		    0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
+		    0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
+		     0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
+		     0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
+		     0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
+	.b_public = (u8[32]){ 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
+		    0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
+		    0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
+		    0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
+		     0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
+		     0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
+		     0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
+	.b_public = (u8[32]){ 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
+		    0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
+		    0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
+		    0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
+		     0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
+		     0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
+		     0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
+	.b_public = (u8[32]){ 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
+		    0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
+		    0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
+		    0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
+		     0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
+		     0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
+		     0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
+	.b_public = (u8[32]){ 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
+		    0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
+		    0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
+		    0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
+		     0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
+		     0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
+		     0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
+	.b_public = (u8[32]){ 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
+		    0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
+		    0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
+		    0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
+		     0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
+		     0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
+		     0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
+	.b_public = (u8[32]){ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
+		    0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
+		    0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
+		    0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
+		     0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
+		     0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
+		     0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
+	.b_public = (u8[32]){ 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
+		    0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
+		    0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
+		    0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
+		     0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
+		     0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
+		     0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
+	.b_public = (u8[32]){ 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
+		    0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
+		    0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
+		    0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - public key >= p */
+{
+	.secret = (u8[32]){ 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
+		     0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
+		     0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
+		     0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
+	.b_public = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+	.expected_ss = (u8[32]){ 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
+		    0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
+		    0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
+		    0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - RFC 7748 */
+{
+	.secret = (u8[32]){ 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+		     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+		     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+		     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
+	.b_public = (u8[32]){ 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+		    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+		    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+		    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+	.expected_ss = (u8[32]){ 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+		    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+		    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+		    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - RFC 7748 */
+{
+	.secret = (u8[32]){ 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
+		     0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
+		     0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
+		     0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
+	.b_public = (u8[32]){ 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
+		    0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
+		    0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
+		    0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
+	.expected_ss = (u8[32]){ 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
+		    0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
+		    0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
+		    0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
+		    0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
+		    0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
+		    0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
+	.expected_ss = (u8[32]){ 0x02, 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 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
+		    0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
+		    0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
+		    0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
+	.expected_ss = (u8[32]){ 0x09, 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 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
+		    0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
+		    0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
+		    0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
+	.expected_ss = (u8[32]){ 0x10, 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 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x63, 0xe5, 0xb1, 0xfe, 0x96, 0x01, 0xfe, 0x84,
+		    0x38, 0x5d, 0x88, 0x66, 0xb0, 0x42, 0x12, 0x62,
+		    0xf7, 0x8f, 0xbf, 0xa5, 0xaf, 0xf9, 0x58, 0x5e,
+		    0x62, 0x66, 0x79, 0xb1, 0x85, 0x47, 0xd9, 0x59 },
+	.expected_ss = (u8[32]){ 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xe4, 0x28, 0xf3, 0xda, 0xc1, 0x78, 0x09, 0xf8,
+		    0x27, 0xa5, 0x22, 0xce, 0x32, 0x35, 0x50, 0x58,
+		    0xd0, 0x73, 0x69, 0x36, 0x4a, 0xa7, 0x89, 0x02,
+		    0xee, 0x10, 0x13, 0x9b, 0x9f, 0x9d, 0xd6, 0x53 },
+	.expected_ss = (u8[32]){ 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xb3, 0xb5, 0x0e, 0x3e, 0xd3, 0xa4, 0x07, 0xb9,
+		    0x5d, 0xe9, 0x42, 0xef, 0x74, 0x57, 0x5b, 0x5a,
+		    0xb8, 0xa1, 0x0c, 0x09, 0xee, 0x10, 0x35, 0x44,
+		    0xd6, 0x0b, 0xdf, 0xed, 0x81, 0x38, 0xab, 0x2b },
+	.expected_ss = (u8[32]){ 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x21, 0x3f, 0xff, 0xe9, 0x3d, 0x5e, 0xa8, 0xcd,
+		    0x24, 0x2e, 0x46, 0x28, 0x44, 0x02, 0x99, 0x22,
+		    0xc4, 0x3c, 0x77, 0xc9, 0xe3, 0xe4, 0x2f, 0x56,
+		    0x2f, 0x48, 0x5d, 0x24, 0xc5, 0x01, 0xa2, 0x0b },
+	.expected_ss = (u8[32]){ 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x91, 0xb2, 0x32, 0xa1, 0x78, 0xb3, 0xcd, 0x53,
+		    0x09, 0x32, 0x44, 0x1e, 0x61, 0x39, 0x41, 0x8f,
+		    0x72, 0x17, 0x22, 0x92, 0xf1, 0xda, 0x4c, 0x18,
+		    0x34, 0xfc, 0x5e, 0xbf, 0xef, 0xb5, 0x1e, 0x3f },
+	.expected_ss = (u8[32]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x04, 0x5c, 0x6e, 0x11, 0xc5, 0xd3, 0x32, 0x55,
+		    0x6c, 0x78, 0x22, 0xfe, 0x94, 0xeb, 0xf8, 0x9b,
+		    0x56, 0xa3, 0x87, 0x8d, 0xc2, 0x7c, 0xa0, 0x79,
+		    0x10, 0x30, 0x58, 0x84, 0x9f, 0xab, 0xcb, 0x4f },
+	.expected_ss = (u8[32]){ 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x1c, 0xa2, 0x19, 0x0b, 0x71, 0x16, 0x35, 0x39,
+		    0x06, 0x3c, 0x35, 0x77, 0x3b, 0xda, 0x0c, 0x9c,
+		    0x92, 0x8e, 0x91, 0x36, 0xf0, 0x62, 0x0a, 0xeb,
+		    0x09, 0x3f, 0x09, 0x91, 0x97, 0xb7, 0xf7, 0x4e },
+	.expected_ss = (u8[32]){ 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xf7, 0x6e, 0x90, 0x10, 0xac, 0x33, 0xc5, 0x04,
+		    0x3b, 0x2d, 0x3b, 0x76, 0xa8, 0x42, 0x17, 0x10,
+		    0x00, 0xc4, 0x91, 0x62, 0x22, 0xe9, 0xe8, 0x58,
+		    0x97, 0xa0, 0xae, 0xc7, 0xf6, 0x35, 0x0b, 0x3c },
+	.expected_ss = (u8[32]){ 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0xbb, 0x72, 0x68, 0x8d, 0x8f, 0x8a, 0xa7, 0xa3,
+		    0x9c, 0xd6, 0x06, 0x0c, 0xd5, 0xc8, 0x09, 0x3c,
+		    0xde, 0xc6, 0xfe, 0x34, 0x19, 0x37, 0xc3, 0x88,
+		    0x6a, 0x99, 0x34, 0x6c, 0xd0, 0x7f, 0xaa, 0x55 },
+	.expected_ss = (u8[32]){ 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x88, 0xfd, 0xde, 0xa1, 0x93, 0x39, 0x1c, 0x6a,
+		    0x59, 0x33, 0xef, 0x9b, 0x71, 0x90, 0x15, 0x49,
+		    0x44, 0x72, 0x05, 0xaa, 0xe9, 0xda, 0x92, 0x8a,
+		    0x6b, 0x91, 0xa3, 0x52, 0xba, 0x10, 0xf4, 0x1f },
+	.expected_ss = (u8[32]){ 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, 0x02 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - edge case for shared secret */
+{
+	.secret = (u8[32]){ 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+		     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+		     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+		     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+	.b_public = (u8[32]){ 0x30, 0x3b, 0x39, 0x2f, 0x15, 0x31, 0x16, 0xca,
+		    0xd9, 0xcc, 0x68, 0x2a, 0x00, 0xcc, 0xc4, 0x4c,
+		    0x95, 0xff, 0x0d, 0x3b, 0xbe, 0x56, 0x8b, 0xeb,
+		    0x6c, 0x4e, 0x73, 0x9b, 0xaf, 0xdc, 0x2c, 0x68 },
+	.expected_ss = (u8[32]){ 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, 0x80, 0x00 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xfd, 0x30, 0x0a, 0xeb, 0x40, 0xe1, 0xfa, 0x58,
+		    0x25, 0x18, 0x41, 0x2b, 0x49, 0xb2, 0x08, 0xa7,
+		    0x84, 0x2b, 0x1e, 0x1f, 0x05, 0x6a, 0x04, 0x01,
+		    0x78, 0xea, 0x41, 0x41, 0x53, 0x4f, 0x65, 0x2d },
+	.expected_ss = (u8[32]){ 0xb7, 0x34, 0x10, 0x5d, 0xc2, 0x57, 0x58, 0x5d,
+		    0x73, 0xb5, 0x66, 0xcc, 0xb7, 0x6f, 0x06, 0x27,
+		    0x95, 0xcc, 0xbe, 0xc8, 0x91, 0x28, 0xe5, 0x2b,
+		    0x02, 0xf3, 0xe5, 0x96, 0x39, 0xf1, 0x3c, 0x46 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xc8, 0xef, 0x79, 0xb5, 0x14, 0xd7, 0x68, 0x26,
+		    0x77, 0xbc, 0x79, 0x31, 0xe0, 0x6e, 0xe5, 0xc2,
+		    0x7c, 0x9b, 0x39, 0x2b, 0x4a, 0xe9, 0x48, 0x44,
+		    0x73, 0xf5, 0x54, 0xe6, 0x67, 0x8e, 0xcc, 0x2e },
+	.expected_ss = (u8[32]){ 0x64, 0x7a, 0x46, 0xb6, 0xfc, 0x3f, 0x40, 0xd6,
+		    0x21, 0x41, 0xee, 0x3c, 0xee, 0x70, 0x6b, 0x4d,
+		    0x7a, 0x92, 0x71, 0x59, 0x3a, 0x7b, 0x14, 0x3e,
+		    0x8e, 0x2e, 0x22, 0x79, 0x88, 0x3e, 0x45, 0x50 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0x64, 0xae, 0xac, 0x25, 0x04, 0x14, 0x48, 0x61,
+		    0x53, 0x2b, 0x7b, 0xbc, 0xb6, 0xc8, 0x7d, 0x67,
+		    0xdd, 0x4c, 0x1f, 0x07, 0xeb, 0xc2, 0xe0, 0x6e,
+		    0xff, 0xb9, 0x5a, 0xec, 0xc6, 0x17, 0x0b, 0x2c },
+	.expected_ss = (u8[32]){ 0x4f, 0xf0, 0x3d, 0x5f, 0xb4, 0x3c, 0xd8, 0x65,
+		    0x7a, 0x3c, 0xf3, 0x7c, 0x13, 0x8c, 0xad, 0xce,
+		    0xcc, 0xe5, 0x09, 0xe4, 0xeb, 0xa0, 0x89, 0xd0,
+		    0xef, 0x40, 0xb4, 0xe4, 0xfb, 0x94, 0x61, 0x55 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0xbf, 0x68, 0xe3, 0x5e, 0x9b, 0xdb, 0x7e, 0xee,
+		    0x1b, 0x50, 0x57, 0x02, 0x21, 0x86, 0x0f, 0x5d,
+		    0xcd, 0xad, 0x8a, 0xcb, 0xab, 0x03, 0x1b, 0x14,
+		    0x97, 0x4c, 0xc4, 0x90, 0x13, 0xc4, 0x98, 0x31 },
+	.expected_ss = (u8[32]){ 0x21, 0xce, 0xe5, 0x2e, 0xfd, 0xbc, 0x81, 0x2e,
+		    0x1d, 0x02, 0x1a, 0x4a, 0xf1, 0xe1, 0xd8, 0xbc,
+		    0x4d, 0xb3, 0xc4, 0x00, 0xe4, 0xd2, 0xa2, 0xc5,
+		    0x6a, 0x39, 0x26, 0xdb, 0x4d, 0x99, 0xc6, 0x5b },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - checking for overflow */
+{
+	.secret = (u8[32]){ 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+		     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+		     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+		     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+	.b_public = (u8[32]){ 0x53, 0x47, 0xc4, 0x91, 0x33, 0x1a, 0x64, 0xb4,
+		    0x3d, 0xdc, 0x68, 0x30, 0x34, 0xe6, 0x77, 0xf5,
+		    0x3d, 0xc3, 0x2b, 0x52, 0xa5, 0x2a, 0x57, 0x7c,
+		    0x15, 0xa8, 0x3b, 0xf2, 0x98, 0xe9, 0x9f, 0x19 },
+	.expected_ss = (u8[32]){ 0x18, 0xcb, 0x89, 0xe4, 0xe2, 0x0c, 0x0c, 0x2b,
+		    0xd3, 0x24, 0x30, 0x52, 0x45, 0x26, 0x6c, 0x93,
+		    0x27, 0x69, 0x0b, 0xbe, 0x79, 0xac, 0xb8, 0x8f,
+		    0x5b, 0x8f, 0xb3, 0xf7, 0x4e, 0xca, 0x3e, 0x52 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - private key == -1 (mod order) */
+{
+	.secret = (u8[32]){ 0xa0, 0x23, 0xcd, 0xd0, 0x83, 0xef, 0x5b, 0xb8,
+		     0x2f, 0x10, 0xd6, 0x2e, 0x59, 0xe1, 0x5a, 0x68,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50 },
+	.b_public = (u8[32]){ 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+		    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+		    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+		    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+	.expected_ss = (u8[32]){ 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+		    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+		    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+		    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+},
+/* wycheproof - private key == 1 (mod order) on twist */
+{
+	.secret = (u8[32]){ 0x58, 0x08, 0x3d, 0xd2, 0x61, 0xad, 0x91, 0xef,
+		     0xf9, 0x52, 0x32, 0x2e, 0xc8, 0x24, 0xc6, 0x82,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+		     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f },
+	.b_public = (u8[32]){ 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+		    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+		    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+		    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+	.expected_ss = (u8[32]){ 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+		    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+		    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+		    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+	.secret_size = 32,
+	.b_public_size = 32,
+	.expected_ss_size = 32,
+
+}
+};
+
 static const struct kpp_testvec ecdh_tv_template[] = {
 	{
 #ifndef CONFIG_CRYPTO_FIPS
@@ -31567,4 +32792,528 @@
 	},
 };
 
+static const char blake2_ordered_sequence[] =
+	"\x00\x01\x02\x03\x04\x05\x06\x07"
+	"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+	"\x10\x11\x12\x13\x14\x15\x16\x17"
+	"\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
+	"\x20\x21\x22\x23\x24\x25\x26\x27"
+	"\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
+	"\x30\x31\x32\x33\x34\x35\x36\x37"
+	"\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
+	"\x40\x41\x42\x43\x44\x45\x46\x47"
+	"\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
+	"\x50\x51\x52\x53\x54\x55\x56\x57"
+	"\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
+	"\x60\x61\x62\x63\x64\x65\x66\x67"
+	"\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
+	"\x70\x71\x72\x73\x74\x75\x76\x77"
+	"\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
+	"\x80\x81\x82\x83\x84\x85\x86\x87"
+	"\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
+	"\x90\x91\x92\x93\x94\x95\x96\x97"
+	"\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
+	"\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7"
+	"\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
+	"\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7"
+	"\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
+	"\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7"
+	"\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
+	"\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7"
+	"\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
+	"\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7"
+	"\xe8\xe9\xea\xeb\xec\xed\xee\xef"
+	"\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7"
+	"\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+
+static const struct hash_testvec blake2b_160_tv_template[] = {{
+	.digest = (u8[]){ 0x33, 0x45, 0x52, 0x4a, 0xbf, 0x6b, 0xbe, 0x18,
+			  0x09, 0x44, 0x92, 0x24, 0xb5, 0x97, 0x2c, 0x41,
+			  0x79, 0x0b, 0x6c, 0xf2, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x11, 0xcc, 0x66, 0x61, 0xe9, 0x22, 0xb0, 0xe4,
+			  0x07, 0xe0, 0xa5, 0x72, 0x49, 0xc3, 0x8d, 0x4f,
+			  0xf7, 0x6d, 0x8e, 0xc8, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x31, 0xe3, 0xd9, 0xd5, 0x4e, 0x72, 0xd8, 0x0b,
+			  0x2b, 0x3b, 0xd7, 0x6b, 0x82, 0x7a, 0x1d, 0xfb,
+			  0x56, 0x2f, 0x79, 0x4c, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x28, 0x20, 0xd1, 0xbe, 0x7f, 0xcc, 0xc1, 0x62,
+			  0xd9, 0x0d, 0x9a, 0x4b, 0x47, 0xd1, 0x5e, 0x04,
+			  0x74, 0x2a, 0x53, 0x17, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x45, 0xe9, 0x95, 0xb6, 0xc4, 0xe8, 0x22, 0xea,
+			  0xfe, 0xd2, 0x37, 0xdb, 0x46, 0xbf, 0xf1, 0x25,
+			  0xd5, 0x03, 0x1d, 0x81, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x7e, 0xb9, 0xf2, 0x9b, 0x2f, 0xc2, 0x01, 0xd4,
+			  0xb0, 0x4f, 0x08, 0x2b, 0x8e, 0xbd, 0x06, 0xef,
+			  0x1c, 0xc4, 0x25, 0x95, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x6e, 0x35, 0x01, 0x70, 0xbf, 0xb6, 0xc4, 0xba,
+			  0x33, 0x1b, 0xa6, 0xd3, 0xc2, 0x5d, 0xb4, 0x03,
+			  0x95, 0xaf, 0x29, 0x16, },
+}};
+
+static const struct hash_testvec blake2b_256_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x9d, 0xf1, 0x4b, 0x72, 0x48, 0x76, 0x4a, 0x86,
+			  0x91, 0x97, 0xc3, 0x5e, 0x39, 0x2d, 0x2a, 0x6d,
+			  0x6f, 0xdc, 0x5b, 0x79, 0xd5, 0x97, 0x29, 0x79,
+			  0x20, 0xfd, 0x3f, 0x14, 0x91, 0xb4, 0x42, 0xd2, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x39, 0xa7, 0xeb, 0x9f, 0xed, 0xc1, 0x9a, 0xab,
+			  0xc8, 0x34, 0x25, 0xc6, 0x75, 0x5d, 0xd9, 0x0e,
+			  0x6f, 0x9d, 0x0c, 0x80, 0x49, 0x64, 0xa1, 0xf4,
+			  0xaa, 0xee, 0xa3, 0xb9, 0xfb, 0x59, 0x98, 0x35, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.digest = (u8[]){ 0xc3, 0x08, 0xb1, 0xbf, 0xe4, 0xf9, 0xbc, 0xb4,
+			  0x75, 0xaf, 0x3f, 0x59, 0x6e, 0xae, 0xde, 0x6a,
+			  0xa3, 0x8e, 0xb5, 0x94, 0xad, 0x30, 0xf0, 0x17,
+			  0x1c, 0xfb, 0xd8, 0x3e, 0x8a, 0xbe, 0xed, 0x9c, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x34, 0x75, 0x8b, 0x64, 0x71, 0x35, 0x62, 0x82,
+			  0x97, 0xfb, 0x09, 0xc7, 0x93, 0x0c, 0xd0, 0x4e,
+			  0x95, 0x28, 0xe5, 0x66, 0x91, 0x12, 0xf5, 0xb1,
+			  0x31, 0x84, 0x93, 0xe1, 0x4d, 0xe7, 0x7e, 0x55, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xce, 0x74, 0xa9, 0x2e, 0xe9, 0x40, 0x3d, 0xa2,
+			  0x11, 0x4a, 0x99, 0x25, 0x7a, 0x34, 0x5d, 0x35,
+			  0xdf, 0x6a, 0x48, 0x79, 0x2a, 0x93, 0x93, 0xff,
+			  0x1f, 0x3c, 0x39, 0xd0, 0x71, 0x1f, 0x20, 0x7b, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x2e, 0x84, 0xdb, 0xa2, 0x5f, 0x0e, 0xe9, 0x52,
+			  0x79, 0x50, 0x69, 0x9f, 0xf1, 0xfd, 0xfc, 0x9d,
+			  0x89, 0x83, 0xa9, 0xb6, 0xa4, 0xd5, 0xfa, 0xb5,
+			  0xbe, 0x35, 0x1a, 0x17, 0x8a, 0x2c, 0x7f, 0x7d, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2e, 0x26, 0xf0, 0x09, 0x02, 0x65, 0x90, 0x09,
+			  0xcc, 0xf5, 0x4c, 0x44, 0x74, 0x0e, 0xa0, 0xa8,
+			  0x25, 0x4a, 0xda, 0x61, 0x56, 0x95, 0x7d, 0x3f,
+			  0x6d, 0xc0, 0x43, 0x17, 0x95, 0x89, 0xcd, 0x9d, },
+}};
+
+static const struct hash_testvec blake2b_384_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0xcc, 0x01, 0x08, 0x85, 0x36, 0xf7, 0x84, 0xf0,
+			  0xbb, 0x76, 0x9e, 0x41, 0xc4, 0x95, 0x7b, 0x6d,
+			  0x0c, 0xde, 0x1f, 0xcc, 0x8c, 0xf1, 0xd9, 0x1f,
+			  0xc4, 0x77, 0xd4, 0xdd, 0x6e, 0x3f, 0xbf, 0xcd,
+			  0x43, 0xd1, 0x69, 0x8d, 0x14, 0x6f, 0x34, 0x8b,
+			  0x2c, 0x36, 0xa3, 0x39, 0x68, 0x2b, 0xec, 0x3f, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0xc8, 0xf8, 0xf0, 0xa2, 0x69, 0xfa, 0xcc, 0x4d,
+			  0x32, 0x5f, 0x13, 0x88, 0xca, 0x71, 0x99, 0x8f,
+			  0xf7, 0x30, 0x41, 0x5d, 0x6e, 0x34, 0xb7, 0x6e,
+			  0x3e, 0xd0, 0x46, 0xb6, 0xca, 0x30, 0x66, 0xb2,
+			  0x6f, 0x0c, 0x35, 0x54, 0x17, 0xcd, 0x26, 0x1b,
+			  0xef, 0x48, 0x98, 0xe0, 0x56, 0x7c, 0x05, 0xd2, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x15, 0x09, 0x7a, 0x90, 0x13, 0x23, 0xab, 0x0c,
+			  0x0b, 0x43, 0x21, 0x9a, 0xb5, 0xc6, 0x0c, 0x2e,
+			  0x7c, 0x57, 0xfc, 0xcc, 0x4b, 0x0f, 0xf0, 0x57,
+			  0xb7, 0x9c, 0xe7, 0x0f, 0xe1, 0x57, 0xac, 0x37,
+			  0x77, 0xd4, 0xf4, 0x2f, 0x03, 0x3b, 0x64, 0x09,
+			  0x84, 0xa0, 0xb3, 0x24, 0xb7, 0xae, 0x47, 0x5e, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x0b, 0x82, 0x88, 0xca, 0x05, 0x2f, 0x1b, 0x15,
+			  0xdc, 0xbb, 0x22, 0x27, 0x11, 0x6b, 0xf4, 0xd1,
+			  0xe9, 0x8f, 0x1b, 0x0b, 0x58, 0x3f, 0x5e, 0x86,
+			  0x80, 0x82, 0x6f, 0x8e, 0x54, 0xc1, 0x9f, 0x12,
+			  0xcf, 0xe9, 0x56, 0xc1, 0xfc, 0x1a, 0x08, 0xb9,
+			  0x4a, 0x57, 0x0a, 0x76, 0x3c, 0x15, 0x33, 0x18, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x4a, 0x81, 0x55, 0xb9, 0x79, 0x42, 0x8c, 0xc6,
+			  0x4f, 0xfe, 0xca, 0x82, 0x3b, 0xb2, 0xf7, 0xbc,
+			  0x5e, 0xfc, 0xab, 0x09, 0x1c, 0xd6, 0x3b, 0xe1,
+			  0x50, 0x82, 0x3b, 0xde, 0xc7, 0x06, 0xee, 0x3b,
+			  0x29, 0xce, 0xe5, 0x68, 0xe0, 0xff, 0xfa, 0xe1,
+			  0x7a, 0xf1, 0xc0, 0xfe, 0x57, 0xf4, 0x60, 0x49, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x34, 0xbd, 0xe1, 0x99, 0x43, 0x9f, 0x82, 0x72,
+			  0xe7, 0xed, 0x94, 0x9e, 0xe1, 0x84, 0xee, 0x82,
+			  0xfd, 0x26, 0x23, 0xc4, 0x17, 0x8d, 0xf5, 0x04,
+			  0xeb, 0xb7, 0xbc, 0xb8, 0xf3, 0x68, 0xb7, 0xad,
+			  0x94, 0x8e, 0x05, 0x3f, 0x8a, 0x5d, 0x8d, 0x81,
+			  0x3e, 0x88, 0xa7, 0x8c, 0xa2, 0xd5, 0xdc, 0x76, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x22, 0x14, 0xf4, 0xb0, 0x4c, 0xa8, 0xb5, 0x7d,
+			  0xa7, 0x5c, 0x04, 0xeb, 0xd8, 0x8d, 0x04, 0x71,
+			  0xc7, 0x3c, 0xc7, 0x6e, 0x8b, 0x20, 0x36, 0x40,
+			  0x9d, 0xd0, 0x60, 0xc6, 0xe3, 0x0b, 0x6e, 0x50,
+			  0xf5, 0xaf, 0xf5, 0xc6, 0x3b, 0xe3, 0x84, 0x6a,
+			  0x93, 0x1b, 0x12, 0xd6, 0x18, 0x27, 0xba, 0x36, },
+}};
+
+static const struct hash_testvec blake2b_512_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x44, 0x4b, 0x24, 0x0f, 0xe3, 0xed, 0x86, 0xd0,
+			  0xe2, 0xef, 0x4c, 0xe7, 0xd8, 0x51, 0xed, 0xde,
+			  0x22, 0x15, 0x55, 0x82, 0xaa, 0x09, 0x14, 0x79,
+			  0x7b, 0x72, 0x6c, 0xd0, 0x58, 0xb6, 0xf4, 0x59,
+			  0x32, 0xe0, 0xe1, 0x29, 0x51, 0x68, 0x76, 0x52,
+			  0x7b, 0x1d, 0xd8, 0x8f, 0xc6, 0x6d, 0x71, 0x19,
+			  0xf4, 0xab, 0x3b, 0xed, 0x93, 0xa6, 0x1a, 0x0e,
+			  0x2d, 0x2d, 0x2a, 0xea, 0xc3, 0x36, 0xd9, 0x58, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x10, 0xeb, 0xb6, 0x77, 0x00, 0xb1, 0x86, 0x8e,
+			  0xfb, 0x44, 0x17, 0x98, 0x7a, 0xcf, 0x46, 0x90,
+			  0xae, 0x9d, 0x97, 0x2f, 0xb7, 0xa5, 0x90, 0xc2,
+			  0xf0, 0x28, 0x71, 0x79, 0x9a, 0xaa, 0x47, 0x86,
+			  0xb5, 0xe9, 0x96, 0xe8, 0xf0, 0xf4, 0xeb, 0x98,
+			  0x1f, 0xc2, 0x14, 0xb0, 0x05, 0xf4, 0x2d, 0x2f,
+			  0xf4, 0x23, 0x34, 0x99, 0x39, 0x16, 0x53, 0xdf,
+			  0x7a, 0xef, 0xcb, 0xc1, 0x3f, 0xc5, 0x15, 0x68, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0xd2, 0x11, 0x31, 0x29, 0x3f, 0xea, 0xca, 0x72,
+			  0x21, 0xe4, 0x06, 0x65, 0x05, 0x2a, 0xd1, 0x02,
+			  0xc0, 0x8d, 0x7b, 0xf1, 0x09, 0x3c, 0xef, 0x88,
+			  0xe1, 0x68, 0x0c, 0xf1, 0x3b, 0xa4, 0xe3, 0x03,
+			  0xed, 0xa0, 0xe3, 0x60, 0x58, 0xa0, 0xdb, 0x52,
+			  0x8a, 0x66, 0x43, 0x09, 0x60, 0x1a, 0xbb, 0x67,
+			  0xc5, 0x84, 0x31, 0x40, 0xfa, 0xde, 0xc1, 0xd0,
+			  0xff, 0x3f, 0x4a, 0x69, 0xd9, 0x92, 0x26, 0x86, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xa3, 0x3e, 0x50, 0xbc, 0xfb, 0xd9, 0xf0, 0x82,
+			  0xa6, 0xd1, 0xdf, 0xaf, 0x82, 0xd0, 0xcf, 0x84,
+			  0x9a, 0x25, 0x3c, 0xae, 0x6d, 0xb5, 0xaf, 0x01,
+			  0xd7, 0xaf, 0xed, 0x50, 0xdc, 0xe2, 0xba, 0xcc,
+			  0x8c, 0x38, 0xf5, 0x16, 0x89, 0x38, 0x86, 0xce,
+			  0x68, 0x10, 0x63, 0x64, 0xa5, 0x79, 0x53, 0xb5,
+			  0x2e, 0x8e, 0xbc, 0x0a, 0xce, 0x95, 0xc0, 0x1e,
+			  0x69, 0x59, 0x1d, 0x3b, 0xd8, 0x19, 0x90, 0xd7, },
+}, {
+	.ksize = 64,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x65, 0x67, 0x6d, 0x80, 0x06, 0x17, 0x97, 0x2f,
+			  0xbd, 0x87, 0xe4, 0xb9, 0x51, 0x4e, 0x1c, 0x67,
+			  0x40, 0x2b, 0x7a, 0x33, 0x10, 0x96, 0xd3, 0xbf,
+			  0xac, 0x22, 0xf1, 0xab, 0xb9, 0x53, 0x74, 0xab,
+			  0xc9, 0x42, 0xf1, 0x6e, 0x9a, 0xb0, 0xea, 0xd3,
+			  0x3b, 0x87, 0xc9, 0x19, 0x68, 0xa6, 0xe5, 0x09,
+			  0xe1, 0x19, 0xff, 0x07, 0x78, 0x7b, 0x3e, 0xf4,
+			  0x83, 0xe1, 0xdc, 0xdc, 0xcf, 0x6e, 0x30, 0x22, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0xc2, 0x96, 0x2c, 0x6b, 0x84, 0xff, 0xee, 0xea,
+			  0x9b, 0xb8, 0x55, 0x2d, 0x6b, 0xa5, 0xd5, 0xe5,
+			  0xbd, 0xb1, 0x54, 0xb6, 0x1e, 0xfb, 0x63, 0x16,
+			  0x6e, 0x22, 0x04, 0xf0, 0x82, 0x7a, 0xc6, 0x99,
+			  0xf7, 0x4c, 0xff, 0x93, 0x71, 0x57, 0x64, 0xd0,
+			  0x08, 0x60, 0x39, 0x98, 0xb8, 0xd2, 0x2b, 0x4e,
+			  0x81, 0x8d, 0xe4, 0x8f, 0xb2, 0x1e, 0x8f, 0x99,
+			  0x98, 0xf1, 0x02, 0x9b, 0x4c, 0x7c, 0x97, 0x1a, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x0f, 0x32, 0x05, 0x09, 0xad, 0x9f, 0x25, 0xf7,
+			  0xf2, 0x00, 0x71, 0xc9, 0x9f, 0x08, 0x58, 0xd1,
+			  0x67, 0xc3, 0xa6, 0x2c, 0x0d, 0xe5, 0x7c, 0x15,
+			  0x35, 0x18, 0x5a, 0x68, 0xc1, 0xca, 0x1c, 0x6e,
+			  0x0f, 0xc4, 0xf6, 0x0c, 0x43, 0xe1, 0xb4, 0x3d,
+			  0x28, 0xe4, 0xc7, 0xa1, 0xcf, 0x6b, 0x17, 0x4e,
+			  0xf1, 0x5b, 0xb5, 0x53, 0xd4, 0xa7, 0xd0, 0x5b,
+			  0xae, 0x15, 0x81, 0x15, 0xd0, 0x88, 0xa0, 0x3c, },
+}};
+
+static const struct hash_testvec blakes2s_128_tv_template[] = {{
+	.digest = (u8[]){ 0x64, 0x55, 0x0d, 0x6f, 0xfe, 0x2c, 0x0a, 0x01,
+			  0xa1, 0x4a, 0xba, 0x1e, 0xad, 0xe0, 0x20, 0x0c, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0xdc, 0x66, 0xca, 0x8f, 0x03, 0x86, 0x58, 0x01,
+			  0xb0, 0xff, 0xe0, 0x6e, 0xd8, 0xa1, 0xa9, 0x0e, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x88, 0x1e, 0x42, 0xe7, 0xbb, 0x35, 0x80, 0x82,
+			  0x63, 0x7c, 0x0a, 0x0f, 0xd7, 0xec, 0x6c, 0x2f, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xcf, 0x9e, 0x07, 0x2a, 0xd5, 0x22, 0xf2, 0xcd,
+			  0xa2, 0xd8, 0x25, 0x21, 0x80, 0x86, 0x73, 0x1c, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xf6, 0x33, 0x5a, 0x2c, 0x22, 0xa0, 0x64, 0xb2,
+			  0xb6, 0x3f, 0xeb, 0xbc, 0xd1, 0xc3, 0xe5, 0xb2, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x72, 0x66, 0x49, 0x60, 0xf9, 0x4a, 0xea, 0xbe,
+			  0x1f, 0xf4, 0x60, 0xce, 0xb7, 0x81, 0xcb, 0x09, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xd5, 0xa4, 0x0e, 0xc3, 0x16, 0xc7, 0x51, 0xa6,
+			  0x3c, 0xd0, 0xd9, 0x11, 0x57, 0xfa, 0x1e, 0xbb, },
+}};
+
+static const struct hash_testvec blakes2s_160_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0xb4, 0xf2, 0x03, 0x49, 0x37, 0xed, 0xb1, 0x3e,
+			  0x5b, 0x2a, 0xca, 0x64, 0x82, 0x74, 0xf6, 0x62,
+			  0xe3, 0xf2, 0x84, 0xff, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xaa, 0x56, 0x9b, 0xdc, 0x98, 0x17, 0x75, 0xf2,
+			  0xb3, 0x68, 0x83, 0xb7, 0x9b, 0x8d, 0x48, 0xb1,
+			  0x9b, 0x2d, 0x35, 0x05, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.digest = (u8[]){ 0x50, 0x16, 0xe7, 0x0c, 0x01, 0xd0, 0xd3, 0xc3,
+			  0xf4, 0x3e, 0xb1, 0x6e, 0x97, 0xa9, 0x4e, 0xd1,
+			  0x79, 0x65, 0x32, 0x93, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x1c, 0x2b, 0xcd, 0x9a, 0x68, 0xca, 0x8c, 0x71,
+			  0x90, 0x29, 0x6c, 0x54, 0xfa, 0x56, 0x4a, 0xef,
+			  0xa2, 0x3a, 0x56, 0x9c, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x36, 0xc3, 0x5f, 0x9a, 0xdc, 0x7e, 0xbf, 0x19,
+			  0x68, 0xaa, 0xca, 0xd8, 0x81, 0xbf, 0x09, 0x34,
+			  0x83, 0x39, 0x0f, 0x30, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x86, 0x80, 0x78, 0xa4, 0x14, 0xec, 0x03, 0xe5,
+			  0xb6, 0x9a, 0x52, 0x0e, 0x42, 0xee, 0x39, 0x9d,
+			  0xac, 0xa6, 0x81, 0x63, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2d, 0xd8, 0xd2, 0x53, 0x66, 0xfa, 0xa9, 0x01,
+			  0x1c, 0x9c, 0xaf, 0xa3, 0xe2, 0x9d, 0x9b, 0x10,
+			  0x0a, 0xf6, 0x73, 0xe8, },
+}};
+
+static const struct hash_testvec blakes2s_224_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x61, 0xb9, 0x4e, 0xc9, 0x46, 0x22, 0xa3, 0x91,
+			  0xd2, 0xae, 0x42, 0xe6, 0x45, 0x6c, 0x90, 0x12,
+			  0xd5, 0x80, 0x07, 0x97, 0xb8, 0x86, 0x5a, 0xfc,
+			  0x48, 0x21, 0x97, 0xbb, },
+}, {
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x9e, 0xda, 0xc7, 0x20, 0x2c, 0xd8, 0x48, 0x2e,
+			  0x31, 0x94, 0xab, 0x46, 0x6d, 0x94, 0xd8, 0xb4,
+			  0x69, 0xcd, 0xae, 0x19, 0x6d, 0x9e, 0x41, 0xcc,
+			  0x2b, 0xa4, 0xd5, 0xf6, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x32, 0xc0, 0xac, 0xf4, 0x3b, 0xd3, 0x07, 0x9f,
+			  0xbe, 0xfb, 0xfa, 0x4d, 0x6b, 0x4e, 0x56, 0xb3,
+			  0xaa, 0xd3, 0x27, 0xf6, 0x14, 0xbf, 0xb9, 0x32,
+			  0xa7, 0x19, 0xfc, 0xb8, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x73, 0xad, 0x5e, 0x6d, 0xb9, 0x02, 0x8e, 0x76,
+			  0xf2, 0x66, 0x42, 0x4b, 0x4c, 0xfa, 0x1f, 0xe6,
+			  0x2e, 0x56, 0x40, 0xe5, 0xa2, 0xb0, 0x3c, 0xe8,
+			  0x7b, 0x45, 0xfe, 0x05, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0x16, 0x60, 0xfb, 0x92, 0x54, 0xb3, 0x6e, 0x36,
+			  0x81, 0xf4, 0x16, 0x41, 0xc3, 0x3d, 0xd3, 0x43,
+			  0x84, 0xed, 0x10, 0x6f, 0x65, 0x80, 0x7a, 0x3e,
+			  0x25, 0xab, 0xc5, 0x02, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0xca, 0xaa, 0x39, 0x67, 0x9c, 0xf7, 0x6b, 0xc7,
+			  0xb6, 0x82, 0xca, 0x0e, 0x65, 0x36, 0x5b, 0x7c,
+			  0x24, 0x00, 0xfa, 0x5f, 0xda, 0x06, 0x91, 0x93,
+			  0x6a, 0x31, 0x83, 0xb5, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0x90, 0x02, 0x26, 0xb5, 0x06, 0x9c, 0x36, 0x86,
+			  0x94, 0x91, 0x90, 0x1e, 0x7d, 0x2a, 0x71, 0xb2,
+			  0x48, 0xb5, 0xe8, 0x16, 0xfd, 0x64, 0x33, 0x45,
+			  0xb3, 0xd7, 0xec, 0xcc, },
+}};
+
+static const struct hash_testvec blakes2s_256_tv_template[] = {{
+	.plaintext = blake2_ordered_sequence,
+	.psize = 15,
+	.digest = (u8[]){ 0xd9, 0x7c, 0x82, 0x8d, 0x81, 0x82, 0xa7, 0x21,
+			  0x80, 0xa0, 0x6a, 0x78, 0x26, 0x83, 0x30, 0x67,
+			  0x3f, 0x7c, 0x4e, 0x06, 0x35, 0x94, 0x7c, 0x04,
+			  0xc0, 0x23, 0x23, 0xfd, 0x45, 0xc0, 0xa5, 0x2d, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.digest = (u8[]){ 0x48, 0xa8, 0x99, 0x7d, 0xa4, 0x07, 0x87, 0x6b,
+			  0x3d, 0x79, 0xc0, 0xd9, 0x23, 0x25, 0xad, 0x3b,
+			  0x89, 0xcb, 0xb7, 0x54, 0xd8, 0x6a, 0xb7, 0x1a,
+			  0xee, 0x04, 0x7a, 0xd3, 0x45, 0xfd, 0x2c, 0x49, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 1,
+	.digest = (u8[]){ 0x22, 0x27, 0xae, 0xaa, 0x6e, 0x81, 0x56, 0x03,
+			  0xa7, 0xe3, 0xa1, 0x18, 0xa5, 0x9a, 0x2c, 0x18,
+			  0xf4, 0x63, 0xbc, 0x16, 0x70, 0xf1, 0xe7, 0x4b,
+			  0x00, 0x6d, 0x66, 0x16, 0xae, 0x9e, 0x74, 0x4e, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 7,
+	.digest = (u8[]){ 0x58, 0x5d, 0xa8, 0x60, 0x1c, 0xa4, 0xd8, 0x03,
+			  0x86, 0x86, 0x84, 0x64, 0xd7, 0xa0, 0x8e, 0x15,
+			  0x2f, 0x05, 0xa2, 0x1b, 0xbc, 0xef, 0x7a, 0x34,
+			  0xb3, 0xc5, 0xbc, 0x4b, 0xf0, 0x32, 0xeb, 0x12, },
+}, {
+	.ksize = 32,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 64,
+	.digest = (u8[]){ 0x89, 0x75, 0xb0, 0x57, 0x7f, 0xd3, 0x55, 0x66,
+			  0xd7, 0x50, 0xb3, 0x62, 0xb0, 0x89, 0x7a, 0x26,
+			  0xc3, 0x99, 0x13, 0x6d, 0xf0, 0x7b, 0xab, 0xab,
+			  0xbd, 0xe6, 0x20, 0x3f, 0xf2, 0x95, 0x4e, 0xd4, },
+}, {
+	.ksize = 1,
+	.key = "B",
+	.plaintext = blake2_ordered_sequence,
+	.psize = 247,
+	.digest = (u8[]){ 0x2e, 0x74, 0x1c, 0x1d, 0x03, 0xf4, 0x9d, 0x84,
+			  0x6f, 0xfc, 0x86, 0x32, 0x92, 0x49, 0x7e, 0x66,
+			  0xd7, 0xc3, 0x10, 0x88, 0xfe, 0x28, 0xb3, 0xe0,
+			  0xbf, 0x50, 0x75, 0xad, 0x8e, 0xa4, 0xe6, 0xb2, },
+}, {
+	.ksize = 16,
+	.key = blake2_ordered_sequence,
+	.plaintext = blake2_ordered_sequence,
+	.psize = 256,
+	.digest = (u8[]){ 0xb9, 0xd2, 0x81, 0x0e, 0x3a, 0xb1, 0x62, 0x9b,
+			  0xad, 0x44, 0x05, 0xf4, 0x92, 0x2e, 0x99, 0xc1,
+			  0x4a, 0x47, 0xbb, 0x5b, 0x6f, 0xb2, 0x96, 0xed,
+			  0xd5, 0x06, 0xb5, 0x3a, 0x7c, 0x7a, 0x65, 0x1d, },
+}};
+
 #endif	/* _CRYPTO_TESTMGR_H */
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 8befa53..e0eda1a 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -200,6 +200,8 @@
 
 source "drivers/android/Kconfig"
 
+source "drivers/gpu/trace/Kconfig"
+
 source "drivers/nvdimm/Kconfig"
 
 source "drivers/dax/Kconfig"
diff --git a/drivers/OWNERS b/drivers/OWNERS
new file mode 100644
index 0000000..22c7eec
--- /dev/null
+++ b/drivers/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/drivers/OWNERS
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 53ae679..49138ff 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -831,8 +831,8 @@
 	return index;
 }
 
-static void acpi_idle_enter_s2idle(struct cpuidle_device *dev,
-				   struct cpuidle_driver *drv, int index)
+static int acpi_idle_enter_s2idle(struct cpuidle_device *dev,
+				  struct cpuidle_driver *drv, int index)
 {
 	struct acpi_processor_cx *cx = per_cpu(acpi_cstate[index], dev->cpu);
 
@@ -840,16 +840,18 @@
 		struct acpi_processor *pr = __this_cpu_read(processors);
 
 		if (unlikely(!pr))
-			return;
+			return 0;
 
 		if (pr->flags.bm_check) {
 			acpi_idle_enter_bm(pr, cx, false);
-			return;
+			return 0;
 		} else {
 			ACPI_FLUSH_CPU_CACHE();
 		}
 	}
 	acpi_idle_do_entry(cx);
+
+	return 0;
 }
 
 static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 702284b..bb94d23 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -506,7 +506,7 @@
 
 #define DEFERRED_DEVICE_TIMEOUT (msecs_to_jiffies(5 * 1000))
 
-static void amba_deferred_retry_func(struct work_struct *dummy)
+static int amba_deferred_retry(void)
 {
 	struct deferred_device *ddev, *tmp;
 
@@ -522,11 +522,19 @@
 		kfree(ddev);
 	}
 
+	mutex_unlock(&deferred_devices_lock);
+
+	return 0;
+}
+late_initcall(amba_deferred_retry);
+
+static void amba_deferred_retry_func(struct work_struct *dummy)
+{
+	amba_deferred_retry();
+
 	if (!list_empty(&deferred_devices))
 		schedule_delayed_work(&deferred_retry_work,
 				      DEFERRED_DEVICE_TIMEOUT);
-
-	mutex_unlock(&deferred_devices_lock);
 }
 
 /**
diff --git a/drivers/android/Kconfig b/drivers/android/Kconfig
index 6fdf2ab..392564c 100644
--- a/drivers/android/Kconfig
+++ b/drivers/android/Kconfig
@@ -54,6 +54,15 @@
 	  exhaustively with combinations of various buffer sizes and
 	  alignments.
 
+config ANDROID_VENDOR_HOOKS
+	bool "Android Vendor Hooks"
+	depends on TRACEPOINTS
+	---help---
+	  Enable vendor hooks implemented as tracepoints
+
+	  Allow vendor modules to attach to tracepoint "hooks" defined via
+	  DECLARE_HOOK or DECLARE_RESTRICTED_HOOK.
+
 endif # if ANDROID
 
 endmenu
diff --git a/drivers/android/Makefile b/drivers/android/Makefile
index c9d3d0c9..d488047 100644
--- a/drivers/android/Makefile
+++ b/drivers/android/Makefile
@@ -4,3 +4,4 @@
 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
+obj-$(CONFIG_ANDROID_VENDOR_HOOKS) += vendor_hooks.o
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 0512af0..181bc3a 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -65,15 +65,16 @@
 #include <linux/ratelimit.h>
 #include <linux/syscalls.h>
 #include <linux/task_work.h>
+#include <linux/android_vendor.h>
 
+#include <uapi/linux/sched/types.h>
 #include <uapi/linux/android/binder.h>
-#include <uapi/linux/android/binderfs.h>
 
 #include <asm/cacheflush.h>
 
-#include "binder_alloc.h"
 #include "binder_internal.h"
 #include "binder_trace.h"
+#include <trace/hooks/binder.h>
 
 static HLIST_HEAD(binder_deferred_list);
 static DEFINE_MUTEX(binder_deferred_lock);
@@ -164,24 +165,6 @@
 #define to_binder_fd_array_object(hdr) \
 	container_of(hdr, struct binder_fd_array_object, hdr)
 
-enum binder_stat_types {
-	BINDER_STAT_PROC,
-	BINDER_STAT_THREAD,
-	BINDER_STAT_NODE,
-	BINDER_STAT_REF,
-	BINDER_STAT_DEATH,
-	BINDER_STAT_TRANSACTION,
-	BINDER_STAT_TRANSACTION_COMPLETE,
-	BINDER_STAT_COUNT
-};
-
-struct binder_stats {
-	atomic_t br[_IOC_NR(BR_FAILED_REPLY) + 1];
-	atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1];
-	atomic_t obj_created[BINDER_STAT_COUNT];
-	atomic_t obj_deleted[BINDER_STAT_COUNT];
-};
-
 static struct binder_stats binder_stats;
 
 static inline void binder_stats_deleted(enum binder_stat_types type)
@@ -217,282 +200,11 @@
 	return e;
 }
 
-/**
- * struct binder_work - work enqueued on a worklist
- * @entry:             node enqueued on list
- * @type:              type of work to be performed
- *
- * There are separate work lists for proc, thread, and node (async).
- */
-struct binder_work {
-	struct list_head entry;
-
-	enum binder_work_type {
-		BINDER_WORK_TRANSACTION = 1,
-		BINDER_WORK_TRANSACTION_COMPLETE,
-		BINDER_WORK_RETURN_ERROR,
-		BINDER_WORK_NODE,
-		BINDER_WORK_DEAD_BINDER,
-		BINDER_WORK_DEAD_BINDER_AND_CLEAR,
-		BINDER_WORK_CLEAR_DEATH_NOTIFICATION,
-	} type;
-};
-
-struct binder_error {
-	struct binder_work work;
-	uint32_t cmd;
-};
-
-/**
- * struct binder_node - binder node bookkeeping
- * @debug_id:             unique ID for debugging
- *                        (invariant after initialized)
- * @lock:                 lock for node fields
- * @work:                 worklist element for node work
- *                        (protected by @proc->inner_lock)
- * @rb_node:              element for proc->nodes tree
- *                        (protected by @proc->inner_lock)
- * @dead_node:            element for binder_dead_nodes list
- *                        (protected by binder_dead_nodes_lock)
- * @proc:                 binder_proc that owns this node
- *                        (invariant after initialized)
- * @refs:                 list of references on this node
- *                        (protected by @lock)
- * @internal_strong_refs: used to take strong references when
- *                        initiating a transaction
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @local_weak_refs:      weak user refs from local process
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @local_strong_refs:    strong user refs from local process
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @tmp_refs:             temporary kernel refs
- *                        (protected by @proc->inner_lock while @proc
- *                        is valid, and by binder_dead_nodes_lock
- *                        if @proc is NULL. During inc/dec and node release
- *                        it is also protected by @lock to provide safety
- *                        as the node dies and @proc becomes NULL)
- * @ptr:                  userspace pointer for node
- *                        (invariant, no lock needed)
- * @cookie:               userspace cookie for node
- *                        (invariant, no lock needed)
- * @has_strong_ref:       userspace notified of strong ref
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @pending_strong_ref:   userspace has acked notification of strong ref
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @has_weak_ref:         userspace notified of weak ref
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @pending_weak_ref:     userspace has acked notification of weak ref
- *                        (protected by @proc->inner_lock if @proc
- *                        and by @lock)
- * @has_async_transaction: async transaction to node in progress
- *                        (protected by @lock)
- * @accept_fds:           file descriptor operations supported for node
- *                        (invariant after initialized)
- * @min_priority:         minimum scheduling priority
- *                        (invariant after initialized)
- * @txn_security_ctx:     require sender's security context
- *                        (invariant after initialized)
- * @async_todo:           list of async work items
- *                        (protected by @proc->inner_lock)
- *
- * Bookkeeping structure for binder nodes.
- */
-struct binder_node {
-	int debug_id;
-	spinlock_t lock;
-	struct binder_work work;
-	union {
-		struct rb_node rb_node;
-		struct hlist_node dead_node;
-	};
-	struct binder_proc *proc;
-	struct hlist_head refs;
-	int internal_strong_refs;
-	int local_weak_refs;
-	int local_strong_refs;
-	int tmp_refs;
-	binder_uintptr_t ptr;
-	binder_uintptr_t cookie;
-	struct {
-		/*
-		 * bitfield elements protected by
-		 * proc inner_lock
-		 */
-		u8 has_strong_ref:1;
-		u8 pending_strong_ref:1;
-		u8 has_weak_ref:1;
-		u8 pending_weak_ref:1;
-	};
-	struct {
-		/*
-		 * invariant after initialization
-		 */
-		u8 accept_fds:1;
-		u8 txn_security_ctx:1;
-		u8 min_priority;
-	};
-	bool has_async_transaction;
-	struct list_head async_todo;
-};
-
-struct binder_ref_death {
-	/**
-	 * @work: worklist element for death notifications
-	 *        (protected by inner_lock of the proc that
-	 *        this ref belongs to)
-	 */
-	struct binder_work work;
-	binder_uintptr_t cookie;
-};
-
-/**
- * struct binder_ref_data - binder_ref counts and id
- * @debug_id:        unique ID for the ref
- * @desc:            unique userspace handle for ref
- * @strong:          strong ref count (debugging only if not locked)
- * @weak:            weak ref count (debugging only if not locked)
- *
- * Structure to hold ref count and ref id information. Since
- * the actual ref can only be accessed with a lock, this structure
- * is used to return information about the ref to callers of
- * ref inc/dec functions.
- */
-struct binder_ref_data {
-	int debug_id;
-	uint32_t desc;
-	int strong;
-	int weak;
-};
-
-/**
- * struct binder_ref - struct to track references on nodes
- * @data:        binder_ref_data containing id, handle, and current refcounts
- * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree
- * @rb_node_node: node for lookup by @node in proc's rb_tree
- * @node_entry:  list entry for node->refs list in target node
- *               (protected by @node->lock)
- * @proc:        binder_proc containing ref
- * @node:        binder_node of target node. When cleaning up a
- *               ref for deletion in binder_cleanup_ref, a non-NULL
- *               @node indicates the node must be freed
- * @death:       pointer to death notification (ref_death) if requested
- *               (protected by @node->lock)
- *
- * Structure to track references from procA to target node (on procB). This
- * structure is unsafe to access without holding @proc->outer_lock.
- */
-struct binder_ref {
-	/* Lookups needed: */
-	/*   node + proc => ref (transaction) */
-	/*   desc + proc => ref (transaction, inc/dec ref) */
-	/*   node => refs + procs (proc exit) */
-	struct binder_ref_data data;
-	struct rb_node rb_node_desc;
-	struct rb_node rb_node_node;
-	struct hlist_node node_entry;
-	struct binder_proc *proc;
-	struct binder_node *node;
-	struct binder_ref_death *death;
-};
-
 enum binder_deferred_state {
 	BINDER_DEFERRED_FLUSH        = 0x01,
 	BINDER_DEFERRED_RELEASE      = 0x02,
 };
 
-/**
- * struct binder_proc - binder process bookkeeping
- * @proc_node:            element for binder_procs list
- * @threads:              rbtree of binder_threads in this proc
- *                        (protected by @inner_lock)
- * @nodes:                rbtree of binder nodes associated with
- *                        this proc ordered by node->ptr
- *                        (protected by @inner_lock)
- * @refs_by_desc:         rbtree of refs ordered by ref->desc
- *                        (protected by @outer_lock)
- * @refs_by_node:         rbtree of refs ordered by ref->node
- *                        (protected by @outer_lock)
- * @waiting_threads:      threads currently waiting for proc work
- *                        (protected by @inner_lock)
- * @pid                   PID of group_leader of process
- *                        (invariant after initialized)
- * @tsk                   task_struct for group_leader of process
- *                        (invariant after initialized)
- * @cred                  struct cred associated with the `struct file`
- *                        in binder_open()
- *                        (invariant after initialized)
- * @deferred_work_node:   element for binder_deferred_list
- *                        (protected by binder_deferred_lock)
- * @deferred_work:        bitmap of deferred work to perform
- *                        (protected by binder_deferred_lock)
- * @is_dead:              process is dead and awaiting free
- *                        when outstanding transactions are cleaned up
- *                        (protected by @inner_lock)
- * @todo:                 list of work for this process
- *                        (protected by @inner_lock)
- * @stats:                per-process binder statistics
- *                        (atomics, no lock needed)
- * @delivered_death:      list of delivered death notification
- *                        (protected by @inner_lock)
- * @max_threads:          cap on number of binder threads
- *                        (protected by @inner_lock)
- * @requested_threads:    number of binder threads requested but not
- *                        yet started. In current implementation, can
- *                        only be 0 or 1.
- *                        (protected by @inner_lock)
- * @requested_threads_started: number binder threads started
- *                        (protected by @inner_lock)
- * @tmp_ref:              temporary reference to indicate proc is in use
- *                        (protected by @inner_lock)
- * @default_priority:     default scheduler priority
- *                        (invariant after initialized)
- * @debugfs_entry:        debugfs node
- * @alloc:                binder allocator bookkeeping
- * @context:              binder_context for this proc
- *                        (invariant after initialized)
- * @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
- */
-struct binder_proc {
-	struct hlist_node proc_node;
-	struct rb_root threads;
-	struct rb_root nodes;
-	struct rb_root refs_by_desc;
-	struct rb_root refs_by_node;
-	struct list_head waiting_threads;
-	int pid;
-	struct task_struct *tsk;
-	const struct cred *cred;
-	struct hlist_node deferred_work_node;
-	int deferred_work;
-	bool is_dead;
-
-	struct list_head todo;
-	struct binder_stats stats;
-	struct list_head delivered_death;
-	int max_threads;
-	int requested_threads;
-	int requested_threads_started;
-	int tmp_ref;
-	long default_priority;
-	struct dentry *debugfs_entry;
-	struct binder_alloc alloc;
-	struct binder_context *context;
-	spinlock_t inner_lock;
-	spinlock_t outer_lock;
-	struct dentry *binderfs_entry;
-};
-
 enum {
 	BINDER_LOOPER_STATE_REGISTERED  = 0x01,
 	BINDER_LOOPER_STATE_ENTERED     = 0x02,
@@ -503,125 +215,6 @@
 };
 
 /**
- * struct binder_thread - binder thread bookkeeping
- * @proc:                 binder process for this thread
- *                        (invariant after initialization)
- * @rb_node:              element for proc->threads rbtree
- *                        (protected by @proc->inner_lock)
- * @waiting_thread_node:  element for @proc->waiting_threads list
- *                        (protected by @proc->inner_lock)
- * @pid:                  PID for this thread
- *                        (invariant after initialization)
- * @looper:               bitmap of looping state
- *                        (only accessed by this thread)
- * @looper_needs_return:  looping thread needs to exit driver
- *                        (no lock needed)
- * @transaction_stack:    stack of in-progress transactions for this thread
- *                        (protected by @proc->inner_lock)
- * @todo:                 list of work to do for this thread
- *                        (protected by @proc->inner_lock)
- * @process_todo:         whether work in @todo should be processed
- *                        (protected by @proc->inner_lock)
- * @return_error:         transaction errors reported by this thread
- *                        (only accessed by this thread)
- * @reply_error:          transaction errors reported by target thread
- *                        (protected by @proc->inner_lock)
- * @wait:                 wait queue for thread work
- * @stats:                per-thread statistics
- *                        (atomics, no lock needed)
- * @tmp_ref:              temporary reference to indicate thread is in use
- *                        (atomic since @proc->inner_lock cannot
- *                        always be acquired)
- * @is_dead:              thread is dead and awaiting free
- *                        when outstanding transactions are cleaned up
- *                        (protected by @proc->inner_lock)
- *
- * Bookkeeping structure for binder threads.
- */
-struct binder_thread {
-	struct binder_proc *proc;
-	struct rb_node rb_node;
-	struct list_head waiting_thread_node;
-	int pid;
-	int looper;              /* only modified by this thread */
-	bool looper_need_return; /* can be written by other thread */
-	struct binder_transaction *transaction_stack;
-	struct list_head todo;
-	bool process_todo;
-	struct binder_error return_error;
-	struct binder_error reply_error;
-	wait_queue_head_t wait;
-	struct binder_stats stats;
-	atomic_t tmp_ref;
-	bool is_dead;
-};
-
-/**
- * struct binder_txn_fd_fixup - transaction fd fixup list element
- * @fixup_entry:          list entry
- * @file:                 struct file to be associated with new fd
- * @offset:               offset in buffer data to this fixup
- *
- * List element for fd fixups in a transaction. Since file
- * descriptors need to be allocated in the context of the
- * target process, we pass each fd to be processed in this
- * struct.
- */
-struct binder_txn_fd_fixup {
-	struct list_head fixup_entry;
-	struct file *file;
-	size_t offset;
-};
-
-struct binder_transaction {
-	int debug_id;
-	struct binder_work work;
-	struct binder_thread *from;
-	struct binder_transaction *from_parent;
-	struct binder_proc *to_proc;
-	struct binder_thread *to_thread;
-	struct binder_transaction *to_parent;
-	unsigned need_reply:1;
-	/* unsigned is_dead:1; */	/* not used at the moment */
-
-	struct binder_buffer *buffer;
-	unsigned int	code;
-	unsigned int	flags;
-	long	priority;
-	long	saved_priority;
-	kuid_t	sender_euid;
-	struct list_head fd_fixups;
-	binder_uintptr_t security_ctx;
-	/**
-	 * @lock:  protects @from, @to_proc, and @to_thread
-	 *
-	 * @from, @to_proc, and @to_thread can be set to NULL
-	 * during thread teardown
-	 */
-	spinlock_t lock;
-};
-
-/**
- * struct binder_object - union of flat binder object types
- * @hdr:   generic object header
- * @fbo:   binder object (nodes and refs)
- * @fdo:   file descriptor object
- * @bbo:   binder buffer pointer
- * @fdao:  file descriptor array
- *
- * Used for type-independent object copies
- */
-struct binder_object {
-	union {
-		struct binder_object_header hdr;
-		struct flat_binder_object fbo;
-		struct binder_fd_object fdo;
-		struct binder_buffer_object bbo;
-		struct binder_fd_array_object fdao;
-	};
-};
-
-/**
  * binder_proc_lock() - Acquire outer lock for given binder_proc
  * @proc:         struct binder_proc to acquire
  *
@@ -1026,22 +619,146 @@
 	binder_wakeup_thread_ilocked(proc, thread, /* sync = */false);
 }
 
-static void binder_set_nice(long nice)
+static bool is_rt_policy(int policy)
 {
-	long min_nice;
+	return policy == SCHED_FIFO || policy == SCHED_RR;
+}
 
-	if (can_nice(current, nice)) {
-		set_user_nice(current, nice);
+static bool is_fair_policy(int policy)
+{
+	return policy == SCHED_NORMAL || policy == SCHED_BATCH;
+}
+
+static bool binder_supported_policy(int policy)
+{
+	return is_fair_policy(policy) || is_rt_policy(policy);
+}
+
+static int to_userspace_prio(int policy, int kernel_priority)
+{
+	if (is_fair_policy(policy))
+		return PRIO_TO_NICE(kernel_priority);
+	else
+		return MAX_USER_RT_PRIO - 1 - kernel_priority;
+}
+
+static int to_kernel_prio(int policy, int user_priority)
+{
+	if (is_fair_policy(policy))
+		return NICE_TO_PRIO(user_priority);
+	else
+		return MAX_USER_RT_PRIO - 1 - user_priority;
+}
+
+static void binder_do_set_priority(struct task_struct *task,
+				   struct binder_priority desired,
+				   bool verify)
+{
+	int priority; /* user-space prio value */
+	bool has_cap_nice;
+	unsigned int policy = desired.sched_policy;
+
+	if (task->policy == policy && task->normal_prio == desired.prio)
 		return;
+
+	has_cap_nice = has_capability_noaudit(task, CAP_SYS_NICE);
+
+	priority = to_userspace_prio(policy, desired.prio);
+
+	if (verify && is_rt_policy(policy) && !has_cap_nice) {
+		long max_rtprio = task_rlimit(task, RLIMIT_RTPRIO);
+
+		if (max_rtprio == 0) {
+			policy = SCHED_NORMAL;
+			priority = MIN_NICE;
+		} else if (priority > max_rtprio) {
+			priority = max_rtprio;
+		}
 	}
-	min_nice = rlimit_to_nice(rlimit(RLIMIT_NICE));
-	binder_debug(BINDER_DEBUG_PRIORITY_CAP,
-		     "%d: nice value %ld not allowed use %ld instead\n",
-		      current->pid, nice, min_nice);
-	set_user_nice(current, min_nice);
-	if (min_nice <= MAX_NICE)
+
+	if (verify && is_fair_policy(policy) && !has_cap_nice) {
+		long min_nice = rlimit_to_nice(task_rlimit(task, RLIMIT_NICE));
+
+		if (min_nice > MAX_NICE) {
+			binder_user_error("%d RLIMIT_NICE not set\n",
+					  task->pid);
+			return;
+		} else if (priority < min_nice) {
+			priority = min_nice;
+		}
+	}
+
+	if (policy != desired.sched_policy ||
+	    to_kernel_prio(policy, priority) != desired.prio)
+		binder_debug(BINDER_DEBUG_PRIORITY_CAP,
+			     "%d: priority %d not allowed, using %d instead\n",
+			      task->pid, desired.prio,
+			      to_kernel_prio(policy, priority));
+
+	trace_binder_set_priority(task->tgid, task->pid, task->normal_prio,
+				  to_kernel_prio(policy, priority),
+				  desired.prio);
+
+	/* Set the actual priority */
+	if (task->policy != policy || is_rt_policy(policy)) {
+		struct sched_param params;
+
+		params.sched_priority = is_rt_policy(policy) ? priority : 0;
+
+		sched_setscheduler_nocheck(task,
+					   policy | SCHED_RESET_ON_FORK,
+					   &params);
+	}
+	if (is_fair_policy(policy))
+		set_user_nice(task, priority);
+}
+
+static void binder_set_priority(struct task_struct *task,
+				struct binder_priority desired)
+{
+	binder_do_set_priority(task, desired, /* verify = */ true);
+}
+
+static void binder_restore_priority(struct task_struct *task,
+				    struct binder_priority desired)
+{
+	binder_do_set_priority(task, desired, /* verify = */ false);
+}
+
+static void binder_transaction_priority(struct task_struct *task,
+					struct binder_transaction *t,
+					struct binder_priority node_prio,
+					bool inherit_rt)
+{
+	struct binder_priority desired_prio = t->priority;
+
+	if (t->set_priority_called)
 		return;
-	binder_user_error("%d RLIMIT_NICE not set\n", current->pid);
+
+	t->set_priority_called = true;
+	t->saved_priority.sched_policy = task->policy;
+	t->saved_priority.prio = task->normal_prio;
+
+	if (!inherit_rt && is_rt_policy(desired_prio.sched_policy)) {
+		desired_prio.prio = NICE_TO_PRIO(0);
+		desired_prio.sched_policy = SCHED_NORMAL;
+	}
+
+	if (node_prio.prio < t->priority.prio ||
+	    (node_prio.prio == t->priority.prio &&
+	     node_prio.sched_policy == SCHED_FIFO)) {
+		/*
+		 * In case the minimum priority on the node is
+		 * higher (lower value), use that priority. If
+		 * the priority is the same, but the node uses
+		 * SCHED_FIFO, prefer SCHED_FIFO, since it can
+		 * run unbounded, unlike SCHED_RR.
+		 */
+		desired_prio = node_prio;
+	}
+
+	binder_set_priority(task, desired_prio);
+	trace_android_vh_binder_set_priority(t, task);
 }
 
 static struct binder_node *binder_get_node_ilocked(struct binder_proc *proc,
@@ -1094,6 +811,7 @@
 	binder_uintptr_t ptr = fp ? fp->binder : 0;
 	binder_uintptr_t cookie = fp ? fp->cookie : 0;
 	__u32 flags = fp ? fp->flags : 0;
+	s8 priority;
 
 	assert_spin_locked(&proc->inner_lock);
 
@@ -1126,8 +844,12 @@
 	node->ptr = ptr;
 	node->cookie = cookie;
 	node->work.type = BINDER_WORK_NODE;
-	node->min_priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
+	priority = flags & FLAT_BINDER_FLAG_PRIORITY_MASK;
+	node->sched_policy = (flags & FLAT_BINDER_FLAG_SCHED_POLICY_MASK) >>
+		FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT;
+	node->min_priority = to_kernel_prio(node->sched_policy, priority);
 	node->accept_fds = !!(flags & FLAT_BINDER_FLAG_ACCEPTS_FDS);
+	node->inherit_rt = !!(flags & FLAT_BINDER_FLAG_INHERIT_RT);
 	node->txn_security_ctx = !!(flags & FLAT_BINDER_FLAG_TXN_SECURITY_CTX);
 	spin_lock_init(&node->lock);
 	INIT_LIST_HEAD(&node->work.entry);
@@ -1906,6 +1628,12 @@
 
 	if (target_proc) {
 		binder_inner_proc_lock(target_proc);
+		target_proc->outstanding_txns--;
+		if (target_proc->outstanding_txns < 0)
+			pr_warn("%s: Unexpected outstanding_txns %d\n",
+				__func__, target_proc->outstanding_txns);
+		if (!target_proc->outstanding_txns && target_proc->is_frozen)
+			wake_up_interruptible_all(&target_proc->freeze_wait);
 		if (t->buffer)
 			t->buffer->transaction = NULL;
 		binder_inner_proc_unlock(target_proc);
@@ -2446,7 +2174,8 @@
 		ret = -EINVAL;
 		goto done;
 	}
-	if (security_binder_transfer_binder(proc->cred, target_proc->cred)) {
+	if (security_binder_transfer_binder(binder_get_cred(proc),
+					    binder_get_cred(target_proc))) {
 		ret = -EPERM;
 		goto done;
 	}
@@ -2492,7 +2221,8 @@
 				  proc->pid, thread->pid, fp->handle);
 		return -EINVAL;
 	}
-	if (security_binder_transfer_binder(proc->cred, target_proc->cred)) {
+	if (security_binder_transfer_binder(binder_get_cred(proc),
+					    binder_get_cred(target_proc))) {
 		ret = -EPERM;
 		goto done;
 	}
@@ -2580,7 +2310,8 @@
 		ret = -EBADF;
 		goto err_fget;
 	}
-	ret = security_binder_transfer_file(proc->cred, target_proc->cred, file);
+	ret = security_binder_transfer_file(binder_get_cred(proc),
+					    binder_get_cred(target_proc), file);
 	if (ret < 0) {
 		ret = -EPERM;
 		goto err_security;
@@ -2736,19 +2467,24 @@
  * If the @thread parameter is not NULL, the transaction is always queued
  * to the waitlist of that specific thread.
  *
- * Return:	true if the transactions was successfully queued
- *		false if the target process or thread is dead
+ * Return:	0 if the transaction was successfully queued
+ *		BR_DEAD_REPLY if the target process or thread is dead
+ *		BR_FROZEN_REPLY if the target process or thread is frozen
  */
-static bool binder_proc_transaction(struct binder_transaction *t,
+static int binder_proc_transaction(struct binder_transaction *t,
 				    struct binder_proc *proc,
 				    struct binder_thread *thread)
 {
 	struct binder_node *node = t->buffer->target_node;
+	struct binder_priority node_prio;
 	bool oneway = !!(t->flags & TF_ONE_WAY);
 	bool pending_async = false;
 
 	BUG_ON(!node);
 	binder_node_lock(node);
+	node_prio.prio = node->min_priority;
+	node_prio.sched_policy = node->sched_policy;
+
 	if (oneway) {
 		BUG_ON(thread);
 		if (node->has_async_transaction) {
@@ -2759,30 +2495,39 @@
 	}
 
 	binder_inner_proc_lock(proc);
+	if (proc->is_frozen) {
+		proc->sync_recv |= !oneway;
+		proc->async_recv |= oneway;
+	}
 
-	if (proc->is_dead || (thread && thread->is_dead)) {
+	if ((proc->is_frozen && !oneway) || proc->is_dead ||
+			(thread && thread->is_dead)) {
 		binder_inner_proc_unlock(proc);
 		binder_node_unlock(node);
-		return false;
+		return proc->is_frozen ? BR_FROZEN_REPLY : BR_DEAD_REPLY;
 	}
 
 	if (!thread && !pending_async)
 		thread = binder_select_thread_ilocked(proc);
 
-	if (thread)
+	if (thread) {
+		binder_transaction_priority(thread->task, t, node_prio,
+					    node->inherit_rt);
 		binder_enqueue_thread_work_ilocked(thread, &t->work);
-	else if (!pending_async)
+	} else if (!pending_async) {
 		binder_enqueue_work_ilocked(&t->work, &proc->todo);
-	else
+	} else {
 		binder_enqueue_work_ilocked(&t->work, &node->async_todo);
+	}
 
 	if (!pending_async)
 		binder_wakeup_thread_ilocked(proc, thread, !oneway /* sync */);
 
+	proc->outstanding_txns++;
 	binder_inner_proc_unlock(proc);
 	binder_node_unlock(node);
 
-	return true;
+	return 0;
 }
 
 /**
@@ -2895,7 +2640,6 @@
 		}
 		thread->transaction_stack = in_reply_to->to_parent;
 		binder_inner_proc_unlock(proc);
-		binder_set_nice(in_reply_to->saved_priority);
 		target_thread = binder_get_txn_from_and_acq_inner(in_reply_to);
 		if (target_thread == NULL) {
 			/* annotation for sparse */
@@ -2973,14 +2717,8 @@
 			goto err_dead_binder;
 		}
 		e->to_node = target_node->debug_id;
-		if (WARN_ON(proc == target_proc)) {
-			return_error = BR_FAILED_REPLY;
-			return_error_param = -EINVAL;
-			return_error_line = __LINE__;
-			goto err_invalid_target_handle;
-		}
-		if (security_binder_transaction(proc->cred,
-						target_proc->cred) < 0) {
+		if (security_binder_transaction(binder_get_cred(proc),
+						binder_get_cred(target_proc)) < 0) {
 			return_error = BR_FAILED_REPLY;
 			return_error_param = -EPERM;
 			return_error_line = __LINE__;
@@ -3060,6 +2798,7 @@
 	INIT_LIST_HEAD(&t->fd_fixups);
 	binder_stats_created(BINDER_STAT_TRANSACTION);
 	spin_lock_init(&t->lock);
+	trace_android_vh_binder_transaction_init(t);
 
 	tcomplete = kzalloc(sizeof(*tcomplete), GFP_KERNEL);
 	if (tcomplete == NULL) {
@@ -3100,14 +2839,41 @@
 	t->to_thread = target_thread;
 	t->code = tr->code;
 	t->flags = tr->flags;
-	t->priority = task_nice(current);
+	if (!(t->flags & TF_ONE_WAY) &&
+	    binder_supported_policy(current->policy)) {
+		/* Inherit supported policies for synchronous transactions */
+		t->priority.sched_policy = current->policy;
+		t->priority.prio = current->normal_prio;
+	} else {
+		/* Otherwise, fall back to the default priority */
+		t->priority = target_proc->default_priority;
+	}
 
 	if (target_node && target_node->txn_security_ctx) {
 		u32 secid;
 		size_t added_size;
+		int max_retries = 100;
 
-		security_cred_getsecid(proc->cred, &secid);
+		security_cred_getsecid(binder_get_cred(proc), &secid);
+ retry_alloc:
 		ret = security_secid_to_secctx(secid, &secctx, &secctx_sz);
+		if (ret == -ENOMEM && max_retries-- > 0) {
+			struct page *dummy_page;
+
+			/*
+			 * security_secid_to_secctx() can fail because of a
+			 * GFP_ATOMIC allocation in which case -ENOMEM is
+			 * returned. This needs to be retried, but there is
+			 * currently no way to tell userspace to retry so we
+			 * do it here. We make sure there is still available
+			 * memory first and then retry.
+			 */
+			dummy_page = alloc_page(GFP_KERNEL);
+			if (dummy_page) {
+				__free_page(dummy_page);
+				goto retry_alloc;
+			}
+		}
 		if (ret) {
 			return_error = BR_FAILED_REPLY;
 			return_error_param = ret;
@@ -3129,7 +2895,7 @@
 
 	t->buffer = binder_alloc_new_buf(&target_proc->alloc, tr->data_size,
 		tr->offsets_size, extra_buffers_size,
-		!reply && (t->flags & TF_ONE_WAY));
+		!reply && (t->flags & TF_ONE_WAY), current->tgid);
 	if (IS_ERR(t->buffer)) {
 		/*
 		 * -ESRCH indicates VMA cleared. The target is dying.
@@ -3413,21 +3179,28 @@
 			goto err_bad_object_type;
 		}
 	}
-	tcomplete->type = BINDER_WORK_TRANSACTION_COMPLETE;
+	if (t->buffer->oneway_spam_suspect)
+		tcomplete->type = BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT;
+	else
+		tcomplete->type = BINDER_WORK_TRANSACTION_COMPLETE;
 	t->work.type = BINDER_WORK_TRANSACTION;
 
 	if (reply) {
 		binder_enqueue_thread_work(thread, tcomplete);
 		binder_inner_proc_lock(target_proc);
 		if (target_thread->is_dead) {
+			return_error = BR_DEAD_REPLY;
 			binder_inner_proc_unlock(target_proc);
 			goto err_dead_proc_or_thread;
 		}
 		BUG_ON(t->buffer->async_transaction != 0);
 		binder_pop_transaction_ilocked(target_thread, in_reply_to);
 		binder_enqueue_thread_work_ilocked(target_thread, &t->work);
+		target_proc->outstanding_txns++;
 		binder_inner_proc_unlock(target_proc);
 		wake_up_interruptible_sync(&target_thread->wait);
+		trace_android_vh_binder_restore_priority(in_reply_to, current);
+		binder_restore_priority(current, in_reply_to->saved_priority);
 		binder_free_transaction(in_reply_to);
 	} else if (!(t->flags & TF_ONE_WAY)) {
 		BUG_ON(t->buffer->async_transaction != 0);
@@ -3444,7 +3217,9 @@
 		t->from_parent = thread->transaction_stack;
 		thread->transaction_stack = t;
 		binder_inner_proc_unlock(proc);
-		if (!binder_proc_transaction(t, target_proc, target_thread)) {
+		return_error = binder_proc_transaction(t,
+				target_proc, target_thread);
+		if (return_error) {
 			binder_inner_proc_lock(proc);
 			binder_pop_transaction_ilocked(thread, t);
 			binder_inner_proc_unlock(proc);
@@ -3454,7 +3229,8 @@
 		BUG_ON(target_node == NULL);
 		BUG_ON(t->buffer->async_transaction != 1);
 		binder_enqueue_thread_work(thread, tcomplete);
-		if (!binder_proc_transaction(t, target_proc, NULL))
+		return_error = binder_proc_transaction(t, target_proc, NULL);
+		if (return_error)
 			goto err_dead_proc_or_thread;
 	}
 	if (target_thread)
@@ -3471,7 +3247,6 @@
 	return;
 
 err_dead_proc_or_thread:
-	return_error = BR_DEAD_REPLY;
 	return_error_line = __LINE__;
 	binder_dequeue_work(proc, tcomplete);
 err_translate_failed:
@@ -3538,6 +3313,8 @@
 
 	BUG_ON(thread->return_error.cmd != BR_OK);
 	if (in_reply_to) {
+		trace_android_vh_binder_restore_priority(in_reply_to, current);
+		binder_restore_priority(current, in_reply_to->saved_priority);
 		thread->return_error.cmd = BR_TRANSACTION_COMPLETE;
 		binder_enqueue_thread_work(thread, &thread->return_error.work);
 		binder_send_failed_reply(in_reply_to, return_error);
@@ -3636,17 +3413,10 @@
 				struct binder_node *ctx_mgr_node;
 				mutex_lock(&context->context_mgr_node_lock);
 				ctx_mgr_node = context->binder_context_mgr_node;
-				if (ctx_mgr_node) {
-					if (ctx_mgr_node->proc == proc) {
-						binder_user_error("%d:%d context manager tried to acquire desc 0\n",
-								  proc->pid, thread->pid);
-						mutex_unlock(&context->context_mgr_node_lock);
-						return -EINVAL;
-					}
+				if (ctx_mgr_node)
 					ret = binder_inc_ref_for_node(
 							proc, ctx_mgr_node,
 							strong, NULL, &rdata);
-				}
 				mutex_unlock(&context->context_mgr_node_lock);
 			}
 			if (ret)
@@ -4102,7 +3872,7 @@
 		binder_inner_proc_lock(proc);
 		list_del_init(&thread->waiting_thread_node);
 		if (signal_pending(current)) {
-			ret = -ERESTARTSYS;
+			ret = -EINTR;
 			break;
 		}
 	}
@@ -4214,7 +3984,8 @@
 			wait_event_interruptible(binder_user_error_wait,
 						 binder_stop_on_user_error < 2);
 		}
-		binder_set_nice(proc->default_priority);
+		trace_android_vh_binder_restore_priority(NULL, current);
+		binder_restore_priority(current, proc->default_priority);
 	}
 
 	if (non_block) {
@@ -4281,9 +4052,14 @@
 
 			binder_stat_br(proc, thread, cmd);
 		} break;
-		case BINDER_WORK_TRANSACTION_COMPLETE: {
+		case BINDER_WORK_TRANSACTION_COMPLETE:
+		case BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT: {
+			if (proc->oneway_spam_detection_enabled &&
+				   w->type == BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT)
+				cmd = BR_ONEWAY_SPAM_SUSPECT;
+			else
+				cmd = BR_TRANSACTION_COMPLETE;
 			binder_inner_proc_unlock(proc);
-			cmd = BR_TRANSACTION_COMPLETE;
 			kfree(w);
 			binder_stats_deleted(BINDER_STAT_TRANSACTION_COMPLETE);
 			if (put_user(cmd, (uint32_t __user *)ptr))
@@ -4436,16 +4212,14 @@
 		BUG_ON(t->buffer == NULL);
 		if (t->buffer->target_node) {
 			struct binder_node *target_node = t->buffer->target_node;
+			struct binder_priority node_prio;
 
 			trd->target.ptr = target_node->ptr;
 			trd->cookie =  target_node->cookie;
-			t->saved_priority = task_nice(current);
-			if (t->priority < target_node->min_priority &&
-			    !(t->flags & TF_ONE_WAY))
-				binder_set_nice(t->priority);
-			else if (!(t->flags & TF_ONE_WAY) ||
-				 t->saved_priority > target_node->min_priority)
-				binder_set_nice(target_node->min_priority);
+			node_prio.sched_policy = target_node->sched_policy;
+			node_prio.prio = target_node->min_priority;
+			binder_transaction_priority(current, t, node_prio,
+						    target_node->inherit_rt);
 			cmd = BR_TRANSACTION;
 		} else {
 			trd->target.ptr = 0;
@@ -4663,6 +4437,8 @@
 	binder_stats_created(BINDER_STAT_THREAD);
 	thread->proc = proc;
 	thread->pid = current->pid;
+	get_task_struct(current);
+	thread->task = current;
 	atomic_set(&thread->tmp_ref, 0);
 	init_waitqueue_head(&thread->wait);
 	INIT_LIST_HEAD(&thread->todo);
@@ -4701,9 +4477,14 @@
 static void binder_free_proc(struct binder_proc *proc)
 {
 	struct binder_device *device;
+	struct binder_proc_ext *eproc =
+		container_of(proc, struct binder_proc_ext, proc);
 
 	BUG_ON(!list_empty(&proc->todo));
 	BUG_ON(!list_empty(&proc->delivered_death));
+	if (proc->outstanding_txns)
+		pr_warn("%s: Unexpected outstanding_txns %d\n",
+			__func__, proc->outstanding_txns);
 	device = container_of(proc->context, struct binder_device, context);
 	if (refcount_dec_and_test(&device->ref)) {
 		kfree(proc->context->name);
@@ -4711,9 +4492,9 @@
 	}
 	binder_alloc_deferred_release(&proc->alloc);
 	put_task_struct(proc->tsk);
-	put_cred(proc->cred);
+	put_cred(eproc->cred);
 	binder_stats_deleted(BINDER_STAT_PROC);
-	kfree(proc);
+	kfree(eproc);
 }
 
 static void binder_free_thread(struct binder_thread *thread)
@@ -4721,6 +4502,7 @@
 	BUG_ON(!list_empty(&thread->todo));
 	binder_stats_deleted(BINDER_STAT_THREAD);
 	binder_proc_dec_tmpref(thread->proc);
+	put_task_struct(thread->task);
 	kfree(thread);
 }
 
@@ -4766,6 +4548,7 @@
 			     (t->to_thread == thread) ? "in" : "out");
 
 		if (t->to_thread == thread) {
+			thread->proc->outstanding_txns--;
 			t->to_proc = NULL;
 			t->to_thread = NULL;
 			if (t->buffer) {
@@ -4919,7 +4702,7 @@
 		ret = -EBUSY;
 		goto out;
 	}
-	ret = security_binder_set_context_mgr(proc->cred);
+	ret = security_binder_set_context_mgr(binder_get_cred(proc));
 	if (ret < 0)
 		goto out;
 	if (uid_valid(context->binder_context_mgr_uid)) {
@@ -5013,6 +4796,100 @@
 	return 0;
 }
 
+static bool binder_txns_pending_ilocked(struct binder_proc *proc)
+{
+	struct rb_node *n;
+	struct binder_thread *thread;
+
+	if (proc->outstanding_txns > 0)
+		return true;
+
+	for (n = rb_first(&proc->threads); n; n = rb_next(n)) {
+		thread = rb_entry(n, struct binder_thread, rb_node);
+		if (thread->transaction_stack)
+			return true;
+	}
+	return false;
+}
+
+static int binder_ioctl_freeze(struct binder_freeze_info *info,
+			       struct binder_proc *target_proc)
+{
+	int ret = 0;
+
+	if (!info->enable) {
+		binder_inner_proc_lock(target_proc);
+		target_proc->sync_recv = false;
+		target_proc->async_recv = false;
+		target_proc->is_frozen = false;
+		binder_inner_proc_unlock(target_proc);
+		return 0;
+	}
+
+	/*
+	 * Freezing the target. Prevent new transactions by
+	 * setting frozen state. If timeout specified, wait
+	 * for transactions to drain.
+	 */
+	binder_inner_proc_lock(target_proc);
+	target_proc->sync_recv = false;
+	target_proc->async_recv = false;
+	target_proc->is_frozen = true;
+	binder_inner_proc_unlock(target_proc);
+
+	if (info->timeout_ms > 0)
+		ret = wait_event_interruptible_timeout(
+			target_proc->freeze_wait,
+			(!target_proc->outstanding_txns),
+			msecs_to_jiffies(info->timeout_ms));
+
+	/* Check pending transactions that wait for reply */
+	if (ret >= 0) {
+		binder_inner_proc_lock(target_proc);
+		if (binder_txns_pending_ilocked(target_proc))
+			ret = -EAGAIN;
+		binder_inner_proc_unlock(target_proc);
+	}
+
+	if (ret < 0) {
+		binder_inner_proc_lock(target_proc);
+		target_proc->is_frozen = false;
+		binder_inner_proc_unlock(target_proc);
+	}
+
+	return ret;
+}
+
+static int binder_ioctl_get_freezer_info(
+				struct binder_frozen_status_info *info)
+{
+	struct binder_proc *target_proc;
+	bool found = false;
+	__u32 txns_pending;
+
+	info->sync_recv = 0;
+	info->async_recv = 0;
+
+	mutex_lock(&binder_procs_lock);
+	hlist_for_each_entry(target_proc, &binder_procs, proc_node) {
+		if (target_proc->pid == info->pid) {
+			found = true;
+			binder_inner_proc_lock(target_proc);
+			txns_pending = binder_txns_pending_ilocked(target_proc);
+			info->sync_recv |= target_proc->sync_recv |
+					(txns_pending << 1);
+			info->async_recv |= target_proc->async_recv;
+			binder_inner_proc_unlock(target_proc);
+		}
+	}
+	mutex_unlock(&binder_procs_lock);
+
+	if (!found)
+		return -EINVAL;
+
+	return 0;
+}
+
 static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
 	int ret;
@@ -5131,6 +5008,96 @@
 		}
 		break;
 	}
+	case BINDER_FREEZE: {
+		struct binder_freeze_info info;
+		struct binder_proc **target_procs = NULL, *target_proc;
+		int target_procs_count = 0, i = 0;
+
+		ret = 0;
+
+		if (copy_from_user(&info, ubuf, sizeof(info))) {
+			ret = -EFAULT;
+			goto err;
+		}
+
+		mutex_lock(&binder_procs_lock);
+		hlist_for_each_entry(target_proc, &binder_procs, proc_node) {
+			if (target_proc->pid == info.pid)
+				target_procs_count++;
+		}
+
+		if (target_procs_count == 0) {
+			mutex_unlock(&binder_procs_lock);
+			ret = -EINVAL;
+			goto err;
+		}
+
+		target_procs = kcalloc(target_procs_count,
+				       sizeof(struct binder_proc *),
+				       GFP_KERNEL);
+
+		if (!target_procs) {
+			mutex_unlock(&binder_procs_lock);
+			ret = -ENOMEM;
+			goto err;
+		}
+
+		hlist_for_each_entry(target_proc, &binder_procs, proc_node) {
+			if (target_proc->pid != info.pid)
+				continue;
+
+			binder_inner_proc_lock(target_proc);
+			target_proc->tmp_ref++;
+			binder_inner_proc_unlock(target_proc);
+
+			target_procs[i++] = target_proc;
+		}
+		mutex_unlock(&binder_procs_lock);
+
+		for (i = 0; i < target_procs_count; i++) {
+			if (ret >= 0)
+				ret = binder_ioctl_freeze(&info,
+							  target_procs[i]);
+
+			binder_proc_dec_tmpref(target_procs[i]);
+		}
+
+		kfree(target_procs);
+
+		if (ret < 0)
+			goto err;
+		break;
+	}
+	case BINDER_GET_FROZEN_INFO: {
+		struct binder_frozen_status_info info;
+
+		if (copy_from_user(&info, ubuf, sizeof(info))) {
+			ret = -EFAULT;
+			goto err;
+		}
+
+		ret = binder_ioctl_get_freezer_info(&info);
+		if (ret < 0)
+			goto err;
+
+		if (copy_to_user(ubuf, &info, sizeof(info))) {
+			ret = -EFAULT;
+			goto err;
+		}
+		break;
+	}
+	case BINDER_ENABLE_ONEWAY_SPAM_DETECTION: {
+		uint32_t enable;
+
+		if (copy_from_user(&enable, ubuf, sizeof(enable))) {
+			ret = -EFAULT;
+			goto err;
+		}
+		binder_inner_proc_lock(proc);
+		proc->oneway_spam_detection_enabled = (bool)enable;
+		binder_inner_proc_unlock(proc);
+		break;
+	}
 	default:
 		ret = -EINVAL;
 		goto err;
@@ -5140,7 +5107,7 @@
 	if (thread)
 		thread->looper_need_return = false;
 	wait_event_interruptible(binder_user_error_wait, binder_stop_on_user_error < 2);
-	if (ret && ret != -ERESTARTSYS)
+	if (ret && ret != -EINTR)
 		pr_info("%d:%d ioctl %x %lx returned %d\n", proc->pid, current->pid, cmd, arg, ret);
 err_unlocked:
 	trace_binder_ioctl_done(ret);
@@ -5221,6 +5188,7 @@
 static int binder_open(struct inode *nodp, struct file *filp)
 {
 	struct binder_proc *proc, *itr;
+	struct binder_proc_ext *eproc;
 	struct binder_device *binder_dev;
 	struct binderfs_info *info;
 	struct dentry *binder_binderfs_dir_entry_proc = NULL;
@@ -5229,16 +5197,25 @@
 	binder_debug(BINDER_DEBUG_OPEN_CLOSE, "%s: %d:%d\n", __func__,
 		     current->group_leader->pid, current->pid);
 
-	proc = kzalloc(sizeof(*proc), GFP_KERNEL);
+	eproc = kzalloc(sizeof(*eproc), GFP_KERNEL);
+	proc = &eproc->proc;
 	if (proc == NULL)
 		return -ENOMEM;
 	spin_lock_init(&proc->inner_lock);
 	spin_lock_init(&proc->outer_lock);
 	get_task_struct(current->group_leader);
 	proc->tsk = current->group_leader;
-	proc->cred = get_cred(filp->f_cred);
+	eproc->cred = get_cred(filp->f_cred);
 	INIT_LIST_HEAD(&proc->todo);
-	proc->default_priority = task_nice(current);
+	init_waitqueue_head(&proc->freeze_wait);
+	if (binder_supported_policy(current->policy)) {
+		proc->default_priority.sched_policy = current->policy;
+		proc->default_priority.prio = current->normal_prio;
+	} else {
+		proc->default_priority.sched_policy = SCHED_NORMAL;
+		proc->default_priority.prio = NICE_TO_PRIO(0);
+	}
+
 	/* binderfs stashes devices in i_private */
 	if (is_binderfs_device(nodp)) {
 		binder_dev = nodp->i_private;
@@ -5450,6 +5427,9 @@
 	proc->tmp_ref++;
 
 	proc->is_dead = true;
+	proc->is_frozen = false;
+	proc->sync_recv = false;
+	proc->async_recv = false;
 	threads = 0;
 	active_transactions = 0;
 	while ((n = rb_first(&proc->threads))) {
@@ -5560,13 +5540,14 @@
 	spin_lock(&t->lock);
 	to_proc = t->to_proc;
 	seq_printf(m,
-		   "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %ld r%d",
+		   "%s %d: %pK from %d:%d to %d:%d code %x flags %x pri %d:%d r%d",
 		   prefix, t->debug_id, t,
 		   t->from ? t->from->proc->pid : 0,
 		   t->from ? t->from->pid : 0,
 		   to_proc ? to_proc->pid : 0,
 		   t->to_thread ? t->to_thread->pid : 0,
-		   t->code, t->flags, t->priority, t->need_reply);
+		   t->code, t->flags, t->priority.sched_policy,
+		   t->priority.prio, t->need_reply);
 	spin_unlock(&t->lock);
 
 	if (proc != to_proc) {
@@ -5684,8 +5665,9 @@
 	hlist_for_each_entry(ref, &node->refs, node_entry)
 		count++;
 
-	seq_printf(m, "  node %d: u%016llx c%016llx hs %d hw %d ls %d lw %d is %d iw %d tr %d",
+	seq_printf(m, "  node %d: u%016llx c%016llx pri %d:%d hs %d hw %d ls %d lw %d is %d iw %d tr %d",
 		   node->debug_id, (u64)node->ptr, (u64)node->cookie,
+		   node->sched_policy, node->min_priority,
 		   node->has_strong_ref, node->has_weak_ref,
 		   node->local_strong_refs, node->local_weak_refs,
 		   node->internal_strong_refs, count, node->tmp_refs);
@@ -5800,7 +5782,9 @@
 	"BR_FINISHED",
 	"BR_DEAD_BINDER",
 	"BR_CLEAR_DEATH_NOTIFICATION_DONE",
-	"BR_FAILED_REPLY"
+	"BR_FAILED_REPLY",
+	"BR_FROZEN_REPLY",
+	"BR_ONEWAY_SPAM_SUSPECT",
 };
 
 static const char * const binder_command_strings[] = {
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index b5022a7..bb19998 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -339,12 +339,56 @@
 	return vma;
 }
 
+static bool debug_low_async_space_locked(struct binder_alloc *alloc, int pid)
+{
+	/*
+	 * Find the amount and size of buffers allocated by the current caller;
+	 * The idea is that once we cross the threshold, whoever is responsible
+	 * for the low async space is likely to try to send another async txn,
+	 * and at some point we'll catch them in the act. This is more efficient
+	 * than keeping a map per pid.
+	 */
+	struct rb_node *n = alloc->free_buffers.rb_node;
+	struct binder_buffer *buffer;
+	size_t total_alloc_size = 0;
+	size_t num_buffers = 0;
+
+	for (n = rb_first(&alloc->allocated_buffers); n != NULL;
+		 n = rb_next(n)) {
+		buffer = rb_entry(n, struct binder_buffer, rb_node);
+		if (buffer->pid != pid)
+			continue;
+		if (!buffer->async_transaction)
+			continue;
+		total_alloc_size += binder_alloc_buffer_size(alloc, buffer)
+			+ sizeof(struct binder_buffer);
+		num_buffers++;
+	}
+
+	/*
+	 * Warn if this pid has more than 50 transactions, or more than 50% of
+	 * async space (which is 25% of total buffer size). Oneway spam is only
+	 * detected when the threshold is exceeded.
+	 */
+	if (num_buffers > 50 || total_alloc_size > alloc->buffer_size / 4) {
+		binder_alloc_debug(BINDER_DEBUG_USER_ERROR,
+			     "%d: pid %d spamming oneway? %zd buffers allocated for a total size of %zd\n",
+			      alloc->pid, pid, num_buffers, total_alloc_size);
+		if (!alloc->oneway_spam_detected) {
+			alloc->oneway_spam_detected = true;
+			return true;
+		}
+	}
+	return false;
+}
+
 static struct binder_buffer *binder_alloc_new_buf_locked(
 				struct binder_alloc *alloc,
 				size_t data_size,
 				size_t offsets_size,
 				size_t extra_buffers_size,
-				int is_async)
+				int is_async,
+				int pid)
 {
 	struct rb_node *n = alloc->free_buffers.rb_node;
 	struct binder_buffer *buffer;
@@ -487,11 +531,23 @@
 	buffer->offsets_size = offsets_size;
 	buffer->async_transaction = is_async;
 	buffer->extra_buffers_size = extra_buffers_size;
+	buffer->pid = pid;
+	buffer->oneway_spam_suspect = false;
 	if (is_async) {
 		alloc->free_async_space -= size + sizeof(struct binder_buffer);
 		binder_alloc_debug(BINDER_DEBUG_BUFFER_ALLOC_ASYNC,
 			     "%d: binder_alloc_buf size %zd async free %zd\n",
 			      alloc->pid, size, alloc->free_async_space);
+		if (alloc->free_async_space < alloc->buffer_size / 10) {
+			/*
+			 * Start detecting spammers once we have less than 20%
+			 * of async space left (which is less than 10% of total
+			 * buffer size).
+			 */
+			buffer->oneway_spam_suspect = debug_low_async_space_locked(alloc, pid);
+		} else {
+			alloc->oneway_spam_detected = false;
+		}
 	}
 	return buffer;
 
@@ -509,6 +565,7 @@
  * @offsets_size:       user specified buffer offset
  * @extra_buffers_size: size of extra space for meta-data (eg, security context)
  * @is_async:           buffer for async transaction
+ * @pid:				pid to attribute allocation to (used for debugging)
  *
  * Allocate a new buffer given the requested sizes. Returns
  * the kernel version of the buffer pointer. The size allocated
@@ -521,13 +578,14 @@
 					   size_t data_size,
 					   size_t offsets_size,
 					   size_t extra_buffers_size,
-					   int is_async)
+					   int is_async,
+					   int pid)
 {
 	struct binder_buffer *buffer;
 
 	mutex_lock(&alloc->mutex);
 	buffer = binder_alloc_new_buf_locked(alloc, data_size, offsets_size,
-					     extra_buffers_size, is_async);
+					     extra_buffers_size, is_async, pid);
 	mutex_unlock(&alloc->mutex);
 	return buffer;
 }
diff --git a/drivers/android/binder_alloc.h b/drivers/android/binder_alloc.h
index 288d0f4..7dea57a 100644
--- a/drivers/android/binder_alloc.h
+++ b/drivers/android/binder_alloc.h
@@ -26,6 +26,8 @@
  * @clear_on_free:      %true if buffer must be zeroed after use
  * @allow_user_free:    %true if user is allowed to free buffer
  * @async_transaction:  %true if buffer is in use for an async txn
+ * @oneway_spam_suspect: %true if total async allocate size just exceed
+ * spamming detect threshold
  * @debug_id:           unique ID for debugging
  * @transaction:        pointer to associated struct binder_transaction
  * @target_node:        struct binder_node associated with this buffer
@@ -33,6 +35,7 @@
  * @offsets_size:       size of array of offsets
  * @extra_buffers_size: size of space for other objects (like sg lists)
  * @user_data:          user pointer to base of buffer space
+ * @pid:                pid to attribute the buffer to (caller)
  *
  * Bookkeeping structure for binder transaction buffers
  */
@@ -44,7 +47,8 @@
 	unsigned clear_on_free:1;
 	unsigned allow_user_free:1;
 	unsigned async_transaction:1;
-	unsigned debug_id:28;
+	unsigned oneway_spam_suspect:1;
+	unsigned debug_id:27;
 
 	struct binder_transaction *transaction;
 
@@ -53,6 +57,7 @@
 	size_t offsets_size;
 	size_t extra_buffers_size;
 	void __user *user_data;
+	int    pid;
 };
 
 /**
@@ -85,6 +90,8 @@
  * @buffer_size:        size of address space specified via mmap
  * @pid:                pid for associated binder_proc (invariant after init)
  * @pages_high:         high watermark of offset in @pages
+ * @oneway_spam_detected: %true if oneway spam detection fired, clear that
+ * flag once the async buffer has returned to a healthy state
  *
  * Bookkeeping structure for per-proc address space management for binder
  * buffers. It is normally initialized during binder_init() and binder_mmap()
@@ -105,6 +112,7 @@
 	uint32_t buffer_free;
 	int pid;
 	size_t pages_high;
+	bool oneway_spam_detected;
 };
 
 #ifdef CONFIG_ANDROID_BINDER_IPC_SELFTEST
@@ -119,7 +127,8 @@
 						  size_t data_size,
 						  size_t offsets_size,
 						  size_t extra_buffers_size,
-						  int is_async);
+						  int is_async,
+						  int pid);
 extern void binder_alloc_init(struct binder_alloc *alloc);
 extern int binder_alloc_shrinker_init(void);
 extern void binder_alloc_vma_close(struct binder_alloc *alloc);
diff --git a/drivers/android/binder_alloc_selftest.c b/drivers/android/binder_alloc_selftest.c
index 4151d99..c2b323b 100644
--- a/drivers/android/binder_alloc_selftest.c
+++ b/drivers/android/binder_alloc_selftest.c
@@ -119,7 +119,7 @@
 	int i;
 
 	for (i = 0; i < BUFFER_NUM; i++) {
-		buffers[i] = binder_alloc_new_buf(alloc, sizes[i], 0, 0, 0);
+		buffers[i] = binder_alloc_new_buf(alloc, sizes[i], 0, 0, 0, 0);
 		if (IS_ERR(buffers[i]) ||
 		    !check_buffer_pages_allocated(alloc, buffers[i],
 						  sizes[i])) {
diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h
index 283d3cb..0dcde39 100644
--- a/drivers/android/binder_internal.h
+++ b/drivers/android/binder_internal.h
@@ -12,6 +12,8 @@
 #include <linux/stddef.h>
 #include <linux/types.h>
 #include <linux/uidgid.h>
+#include <uapi/linux/android/binderfs.h>
+#include "binder_alloc.h"
 
 struct binder_context {
 	struct binder_node *binder_context_mgr_node;
@@ -141,6 +143,482 @@
 	struct binder_transaction_log_entry entry[32];
 };
 
+enum binder_stat_types {
+	BINDER_STAT_PROC,
+	BINDER_STAT_THREAD,
+	BINDER_STAT_NODE,
+	BINDER_STAT_REF,
+	BINDER_STAT_DEATH,
+	BINDER_STAT_TRANSACTION,
+	BINDER_STAT_TRANSACTION_COMPLETE,
+	BINDER_STAT_COUNT
+};
+
+struct binder_stats {
+	atomic_t br[_IOC_NR(BR_ONEWAY_SPAM_SUSPECT) + 1];
+	atomic_t bc[_IOC_NR(BC_REPLY_SG) + 1];
+	atomic_t obj_created[BINDER_STAT_COUNT];
+	atomic_t obj_deleted[BINDER_STAT_COUNT];
+};
+
+/**
+ * struct binder_work - work enqueued on a worklist
+ * @entry:             node enqueued on list
+ * @type:              type of work to be performed
+ *
+ * There are separate work lists for proc, thread, and node (async).
+ */
+struct binder_work {
+	struct list_head entry;
+
+	enum binder_work_type {
+		BINDER_WORK_TRANSACTION = 1,
+		BINDER_WORK_TRANSACTION_COMPLETE,
+		BINDER_WORK_TRANSACTION_ONEWAY_SPAM_SUSPECT,
+		BINDER_WORK_RETURN_ERROR,
+		BINDER_WORK_NODE,
+		BINDER_WORK_DEAD_BINDER,
+		BINDER_WORK_DEAD_BINDER_AND_CLEAR,
+		BINDER_WORK_CLEAR_DEATH_NOTIFICATION,
+	} type;
+};
+
+struct binder_error {
+	struct binder_work work;
+	uint32_t cmd;
+};
+
+/**
+ * struct binder_node - binder node bookkeeping
+ * @debug_id:             unique ID for debugging
+ *                        (invariant after initialized)
+ * @lock:                 lock for node fields
+ * @work:                 worklist element for node work
+ *                        (protected by @proc->inner_lock)
+ * @rb_node:              element for proc->nodes tree
+ *                        (protected by @proc->inner_lock)
+ * @dead_node:            element for binder_dead_nodes list
+ *                        (protected by binder_dead_nodes_lock)
+ * @proc:                 binder_proc that owns this node
+ *                        (invariant after initialized)
+ * @refs:                 list of references on this node
+ *                        (protected by @lock)
+ * @internal_strong_refs: used to take strong references when
+ *                        initiating a transaction
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @local_weak_refs:      weak user refs from local process
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @local_strong_refs:    strong user refs from local process
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @tmp_refs:             temporary kernel refs
+ *                        (protected by @proc->inner_lock while @proc
+ *                        is valid, and by binder_dead_nodes_lock
+ *                        if @proc is NULL. During inc/dec and node release
+ *                        it is also protected by @lock to provide safety
+ *                        as the node dies and @proc becomes NULL)
+ * @ptr:                  userspace pointer for node
+ *                        (invariant, no lock needed)
+ * @cookie:               userspace cookie for node
+ *                        (invariant, no lock needed)
+ * @has_strong_ref:       userspace notified of strong ref
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @pending_strong_ref:   userspace has acked notification of strong ref
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @has_weak_ref:         userspace notified of weak ref
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @pending_weak_ref:     userspace has acked notification of weak ref
+ *                        (protected by @proc->inner_lock if @proc
+ *                        and by @lock)
+ * @has_async_transaction: async transaction to node in progress
+ *                        (protected by @lock)
+ * @sched_policy:         minimum scheduling policy for node
+ *                        (invariant after initialized)
+ * @accept_fds:           file descriptor operations supported for node
+ *                        (invariant after initialized)
+ * @min_priority:         minimum scheduling priority
+ *                        (invariant after initialized)
+ * @inherit_rt:           inherit RT scheduling policy from caller
+ * @txn_security_ctx:     require sender's security context
+ *                        (invariant after initialized)
+ * @async_todo:           list of async work items
+ *                        (protected by @proc->inner_lock)
+ *
+ * Bookkeeping structure for binder nodes.
+ */
+struct binder_node {
+	int debug_id;
+	spinlock_t lock;
+	struct binder_work work;
+	union {
+		struct rb_node rb_node;
+		struct hlist_node dead_node;
+	};
+	struct binder_proc *proc;
+	struct hlist_head refs;
+	int internal_strong_refs;
+	int local_weak_refs;
+	int local_strong_refs;
+	int tmp_refs;
+	binder_uintptr_t ptr;
+	binder_uintptr_t cookie;
+	struct {
+		/*
+		 * bitfield elements protected by
+		 * proc inner_lock
+		 */
+		u8 has_strong_ref:1;
+		u8 pending_strong_ref:1;
+		u8 has_weak_ref:1;
+		u8 pending_weak_ref:1;
+	};
+	struct {
+		/*
+		 * invariant after initialization
+		 */
+		u8 sched_policy:2;
+		u8 inherit_rt:1;
+		u8 accept_fds:1;
+		u8 txn_security_ctx:1;
+		u8 min_priority;
+	};
+	bool has_async_transaction;
+	struct list_head async_todo;
+};
+
+struct binder_ref_death {
+	/**
+	 * @work: worklist element for death notifications
+	 *        (protected by inner_lock of the proc that
+	 *        this ref belongs to)
+	 */
+	struct binder_work work;
+	binder_uintptr_t cookie;
+};
+
+/**
+ * struct binder_ref_data - binder_ref counts and id
+ * @debug_id:        unique ID for the ref
+ * @desc:            unique userspace handle for ref
+ * @strong:          strong ref count (debugging only if not locked)
+ * @weak:            weak ref count (debugging only if not locked)
+ *
+ * Structure to hold ref count and ref id information. Since
+ * the actual ref can only be accessed with a lock, this structure
+ * is used to return information about the ref to callers of
+ * ref inc/dec functions.
+ */
+struct binder_ref_data {
+	int debug_id;
+	uint32_t desc;
+	int strong;
+	int weak;
+};
+
+/**
+ * struct binder_ref - struct to track references on nodes
+ * @data:        binder_ref_data containing id, handle, and current refcounts
+ * @rb_node_desc: node for lookup by @data.desc in proc's rb_tree
+ * @rb_node_node: node for lookup by @node in proc's rb_tree
+ * @node_entry:  list entry for node->refs list in target node
+ *               (protected by @node->lock)
+ * @proc:        binder_proc containing ref
+ * @node:        binder_node of target node. When cleaning up a
+ *               ref for deletion in binder_cleanup_ref, a non-NULL
+ *               @node indicates the node must be freed
+ * @death:       pointer to death notification (ref_death) if requested
+ *               (protected by @node->lock)
+ *
+ * Structure to track references from procA to target node (on procB). This
+ * structure is unsafe to access without holding @proc->outer_lock.
+ */
+struct binder_ref {
+	/* Lookups needed: */
+	/*   node + proc => ref (transaction) */
+	/*   desc + proc => ref (transaction, inc/dec ref) */
+	/*   node => refs + procs (proc exit) */
+	struct binder_ref_data data;
+	struct rb_node rb_node_desc;
+	struct rb_node rb_node_node;
+	struct hlist_node node_entry;
+	struct binder_proc *proc;
+	struct binder_node *node;
+	struct binder_ref_death *death;
+};
+
+/**
+ * struct binder_priority - scheduler policy and priority
+ * @sched_policy            scheduler policy
+ * @prio                    [100..139] for SCHED_NORMAL, [0..99] for FIFO/RT
+ *
+ * The binder driver supports inheriting the following scheduler policies:
+ * SCHED_NORMAL
+ * SCHED_BATCH
+ * SCHED_FIFO
+ * SCHED_RR
+ */
+struct binder_priority {
+	unsigned int sched_policy;
+	int prio;
+};
+
+/**
+ * struct binder_proc - binder process bookkeeping
+ * @proc_node:            element for binder_procs list
+ * @threads:              rbtree of binder_threads in this proc
+ *                        (protected by @inner_lock)
+ * @nodes:                rbtree of binder nodes associated with
+ *                        this proc ordered by node->ptr
+ *                        (protected by @inner_lock)
+ * @refs_by_desc:         rbtree of refs ordered by ref->desc
+ *                        (protected by @outer_lock)
+ * @refs_by_node:         rbtree of refs ordered by ref->node
+ *                        (protected by @outer_lock)
+ * @waiting_threads:      threads currently waiting for proc work
+ *                        (protected by @inner_lock)
+ * @pid                   PID of group_leader of process
+ *                        (invariant after initialized)
+ * @tsk                   task_struct for group_leader of process
+ *                        (invariant after initialized)
+ * @deferred_work_node:   element for binder_deferred_list
+ *                        (protected by binder_deferred_lock)
+ * @deferred_work:        bitmap of deferred work to perform
+ *                        (protected by binder_deferred_lock)
+ * @outstanding_txns:     number of transactions to be transmitted before
+ *                        processes in freeze_wait are woken up
+ *                        (protected by @inner_lock)
+ * @is_dead:              process is dead and awaiting free
+ *                        when outstanding transactions are cleaned up
+ *                        (protected by @inner_lock)
+ * @is_frozen:            process is frozen and unable to service
+ *                        binder transactions
+ *                        (protected by @inner_lock)
+ * @sync_recv:            process received sync transactions since last frozen
+ *                        bit 0: received sync transaction after being frozen
+ *                        bit 1: new pending sync transaction during freezing
+ *                        (protected by @inner_lock)
+ * @async_recv:           process received async transactions since last frozen
+ *                        (protected by @inner_lock)
+ * @freeze_wait:          waitqueue of processes waiting for all outstanding
+ *                        transactions to be processed
+ *                        (protected by @inner_lock)
+ * @todo:                 list of work for this process
+ *                        (protected by @inner_lock)
+ * @stats:                per-process binder statistics
+ *                        (atomics, no lock needed)
+ * @delivered_death:      list of delivered death notification
+ *                        (protected by @inner_lock)
+ * @max_threads:          cap on number of binder threads
+ *                        (protected by @inner_lock)
+ * @requested_threads:    number of binder threads requested but not
+ *                        yet started. In current implementation, can
+ *                        only be 0 or 1.
+ *                        (protected by @inner_lock)
+ * @requested_threads_started: number binder threads started
+ *                        (protected by @inner_lock)
+ * @tmp_ref:              temporary reference to indicate proc is in use
+ *                        (protected by @inner_lock)
+ * @default_priority:     default scheduler priority
+ *                        (invariant after initialized)
+ * @debugfs_entry:        debugfs node
+ * @alloc:                binder allocator bookkeeping
+ * @context:              binder_context for this proc
+ *                        (invariant after initialized)
+ * @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
+ * @oneway_spam_detection_enabled: process enabled oneway spam detection
+ *                        or not
+ *
+ * Bookkeeping structure for binder processes
+ */
+struct binder_proc {
+	struct hlist_node proc_node;
+	struct rb_root threads;
+	struct rb_root nodes;
+	struct rb_root refs_by_desc;
+	struct rb_root refs_by_node;
+	struct list_head waiting_threads;
+	int pid;
+	struct task_struct *tsk;
+	struct hlist_node deferred_work_node;
+	int deferred_work;
+	int outstanding_txns;
+	bool is_dead;
+	bool is_frozen;
+	bool sync_recv;
+	bool async_recv;
+	wait_queue_head_t freeze_wait;
+
+	struct list_head todo;
+	struct binder_stats stats;
+	struct list_head delivered_death;
+	int max_threads;
+	int requested_threads;
+	int requested_threads_started;
+	int tmp_ref;
+	struct binder_priority default_priority;
+	struct dentry *debugfs_entry;
+	struct binder_alloc alloc;
+	struct binder_context *context;
+	spinlock_t inner_lock;
+	spinlock_t outer_lock;
+	struct dentry *binderfs_entry;
+	bool oneway_spam_detection_enabled;
+};
+
+/**
+ * struct binder_proc_ext - binder process bookkeeping
+ * @proc:            element for binder_procs list
+ * @cred                  struct cred associated with the `struct file`
+ *                        in binder_open()
+ *                        (invariant after initialized)
+ *
+ * Extended binder_proc -- needed to add the "cred" field without
+ * changing the KMI for binder_proc.
+ */
+struct binder_proc_ext {
+	struct binder_proc proc;
+	const struct cred *cred;
+};
+
+static inline const struct cred *binder_get_cred(struct binder_proc *proc)
+{
+	struct binder_proc_ext *eproc;
+
+	eproc = container_of(proc, struct binder_proc_ext, proc);
+	return eproc->cred;
+}
+
+/**
+ * struct binder_thread - binder thread bookkeeping
+ * @proc:                 binder process for this thread
+ *                        (invariant after initialization)
+ * @rb_node:              element for proc->threads rbtree
+ *                        (protected by @proc->inner_lock)
+ * @waiting_thread_node:  element for @proc->waiting_threads list
+ *                        (protected by @proc->inner_lock)
+ * @pid:                  PID for this thread
+ *                        (invariant after initialization)
+ * @looper:               bitmap of looping state
+ *                        (only accessed by this thread)
+ * @looper_needs_return:  looping thread needs to exit driver
+ *                        (no lock needed)
+ * @transaction_stack:    stack of in-progress transactions for this thread
+ *                        (protected by @proc->inner_lock)
+ * @todo:                 list of work to do for this thread
+ *                        (protected by @proc->inner_lock)
+ * @process_todo:         whether work in @todo should be processed
+ *                        (protected by @proc->inner_lock)
+ * @return_error:         transaction errors reported by this thread
+ *                        (only accessed by this thread)
+ * @reply_error:          transaction errors reported by target thread
+ *                        (protected by @proc->inner_lock)
+ * @wait:                 wait queue for thread work
+ * @stats:                per-thread statistics
+ *                        (atomics, no lock needed)
+ * @tmp_ref:              temporary reference to indicate thread is in use
+ *                        (atomic since @proc->inner_lock cannot
+ *                        always be acquired)
+ * @is_dead:              thread is dead and awaiting free
+ *                        when outstanding transactions are cleaned up
+ *                        (protected by @proc->inner_lock)
+ * @task:                 struct task_struct for this thread
+ *
+ * Bookkeeping structure for binder threads.
+ */
+struct binder_thread {
+	struct binder_proc *proc;
+	struct rb_node rb_node;
+	struct list_head waiting_thread_node;
+	int pid;
+	int looper;              /* only modified by this thread */
+	bool looper_need_return; /* can be written by other thread */
+	struct binder_transaction *transaction_stack;
+	struct list_head todo;
+	bool process_todo;
+	struct binder_error return_error;
+	struct binder_error reply_error;
+	wait_queue_head_t wait;
+	struct binder_stats stats;
+	atomic_t tmp_ref;
+	bool is_dead;
+	struct task_struct *task;
+};
+
+/**
+ * struct binder_txn_fd_fixup - transaction fd fixup list element
+ * @fixup_entry:          list entry
+ * @file:                 struct file to be associated with new fd
+ * @offset:               offset in buffer data to this fixup
+ *
+ * List element for fd fixups in a transaction. Since file
+ * descriptors need to be allocated in the context of the
+ * target process, we pass each fd to be processed in this
+ * struct.
+ */
+struct binder_txn_fd_fixup {
+	struct list_head fixup_entry;
+	struct file *file;
+	size_t offset;
+};
+
+struct binder_transaction {
+	int debug_id;
+	struct binder_work work;
+	struct binder_thread *from;
+	struct binder_transaction *from_parent;
+	struct binder_proc *to_proc;
+	struct binder_thread *to_thread;
+	struct binder_transaction *to_parent;
+	unsigned need_reply:1;
+	/* unsigned is_dead:1; */	/* not used at the moment */
+
+	struct binder_buffer *buffer;
+	unsigned int	code;
+	unsigned int	flags;
+	struct binder_priority	priority;
+	struct binder_priority	saved_priority;
+	bool    set_priority_called;
+	kuid_t	sender_euid;
+	struct list_head fd_fixups;
+	binder_uintptr_t security_ctx;
+	/**
+	 * @lock:  protects @from, @to_proc, and @to_thread
+	 *
+	 * @from, @to_proc, and @to_thread can be set to NULL
+	 * during thread teardown
+	 */
+	spinlock_t lock;
+	ANDROID_VENDOR_DATA(1);
+};
+
+/**
+ * struct binder_object - union of flat binder object types
+ * @hdr:   generic object header
+ * @fbo:   binder object (nodes and refs)
+ * @fdo:   file descriptor object
+ * @bbo:   binder buffer pointer
+ * @fdao:  file descriptor array
+ *
+ * Used for type-independent object copies
+ */
+struct binder_object {
+	union {
+		struct binder_object_header hdr;
+		struct flat_binder_object fbo;
+		struct binder_fd_object fdo;
+		struct binder_buffer_object bbo;
+		struct binder_fd_array_object fdao;
+	};
+};
+
 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/binder_trace.h b/drivers/android/binder_trace.h
index 6731c3c..a70e237 100644
--- a/drivers/android/binder_trace.h
+++ b/drivers/android/binder_trace.h
@@ -76,6 +76,30 @@
 DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_write_done);
 DEFINE_BINDER_FUNCTION_RETURN_EVENT(binder_read_done);
 
+TRACE_EVENT(binder_set_priority,
+	TP_PROTO(int proc, int thread, unsigned int old_prio,
+		 unsigned int desired_prio, unsigned int new_prio),
+	TP_ARGS(proc, thread, old_prio, new_prio, desired_prio),
+
+	TP_STRUCT__entry(
+		__field(int, proc)
+		__field(int, thread)
+		__field(unsigned int, old_prio)
+		__field(unsigned int, new_prio)
+		__field(unsigned int, desired_prio)
+	),
+	TP_fast_assign(
+		__entry->proc = proc;
+		__entry->thread = thread;
+		__entry->old_prio = old_prio;
+		__entry->new_prio = new_prio;
+		__entry->desired_prio = desired_prio;
+	),
+	TP_printk("proc=%d thread=%d old=%d => new=%d desired=%d",
+		  __entry->proc, __entry->thread, __entry->old_prio,
+		  __entry->new_prio, __entry->desired_prio)
+);
+
 TRACE_EVENT(binder_wait_for_work,
 	TP_PROTO(bool proc_work, bool transaction_stack, bool thread_todo),
 	TP_ARGS(proc_work, transaction_stack, thread_todo),
diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c
new file mode 100644
index 0000000..45d0f24
--- /dev/null
+++ b/drivers/android/vendor_hooks.c
@@ -0,0 +1,84 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* vendor_hook.c
+ *
+ * Android Vendor Hook Support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#define CREATE_TRACE_POINTS
+#include <trace/hooks/vendor_hooks.h>
+#include <trace/hooks/sched.h>
+#include <trace/hooks/dtask.h>
+#include <trace/hooks/net.h>
+#include <trace/hooks/binder.h>
+#include <trace/hooks/rwsem.h>
+#include <trace/hooks/futex.h>
+#include <trace/hooks/topology.h>
+#include <trace/hooks/debug.h>
+#include <trace/hooks/wqlockup.h>
+#include <trace/hooks/sysrqcrash.h>
+#include <trace/hooks/cgroup.h>
+#include <trace/hooks/sys.h>
+#include <trace/hooks/ufshcd.h>
+#include <trace/hooks/usb.h>
+#include <trace/hooks/psci.h>
+
+/*
+ * Export tracepoints that act as a bare tracehook (ie: have no trace event
+ * associated with them) to allow external modules to probe them.
+ */
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_rt);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_fallback_rq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scheduler_tick);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_can_migrate_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_lowest_rq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_wait_finish);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_show_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ptype_head);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kfree_skb);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sk_alloc);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sk_free);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_nf_conn_alloc);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_nf_conn_free);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_arch_set_freq_scale);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_transaction_init);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_set_priority);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_restore_priority);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_init);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_pd_energy);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_set_task);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_fill_prdt);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_prepare_command);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_update_sysfs);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_command);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_compl_command);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_uic_command);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_send_tm_command);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ufs_check_int_errors);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_usb_persist_overwrite);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psci_tos_resident_on);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psci_cpu_suspend);
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index 28b92e3..5f0bc74 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -148,6 +148,10 @@
 	  unusable. You should say N here unless you are explicitly looking to
 	  test this functionality.
 
+config PM_QOS_KUNIT_TEST
+	bool "KUnit Test for PM QoS features"
+	depends on KUNIT=y
+
 config HMEM_REPORTING
 	bool
 	default n
diff --git a/drivers/base/arch_topology.c b/drivers/base/arch_topology.c
index d5f6401..c132667 100644
--- a/drivers/base/arch_topology.c
+++ b/drivers/base/arch_topology.c
@@ -20,8 +20,11 @@
 #include <linux/percpu.h>
 #include <linux/sched.h>
 #include <linux/smp.h>
+#include <trace/hooks/topology.h>
 
 DEFINE_PER_CPU(unsigned long, freq_scale) = SCHED_CAPACITY_SCALE;
+DEFINE_PER_CPU(unsigned long, max_cpu_freq);
+DEFINE_PER_CPU(unsigned long, max_freq_scale) = SCHED_CAPACITY_SCALE;
 
 void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 			 unsigned long max_freq)
@@ -31,8 +34,33 @@
 
 	scale = (cur_freq << SCHED_CAPACITY_SHIFT) / max_freq;
 
-	for_each_cpu(i, cpus)
+	trace_android_vh_arch_set_freq_scale(cpus, cur_freq, max_freq, &scale);
+
+	for_each_cpu(i, cpus) {
 		per_cpu(freq_scale, i) = scale;
+		per_cpu(max_cpu_freq, i) = max_freq;
+	}
+}
+
+void arch_set_max_freq_scale(struct cpumask *cpus,
+			     unsigned long policy_max_freq)
+{
+	unsigned long scale, max_freq;
+	int cpu = cpumask_first(cpus);
+
+	if (cpu > nr_cpu_ids)
+		return;
+
+	max_freq = per_cpu(max_cpu_freq, cpu);
+	if (!max_freq)
+		return;
+
+	scale = (policy_max_freq << SCHED_CAPACITY_SHIFT) / max_freq;
+
+	trace_android_vh_arch_set_freq_scale(cpus, policy_max_freq, max_freq, &scale);
+
+	for_each_cpu(cpu, cpus)
+		per_cpu(max_freq_scale, cpu) = scale;
 }
 
 DEFINE_PER_CPU(unsigned long, cpu_scale) = SCHED_CAPACITY_SCALE;
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 1b016fd..b809920 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -45,6 +45,13 @@
 #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;
+static unsigned int defer_fw_devlink_count;
+static LIST_HEAD(deferred_fw_devlink);
+static DEFINE_MUTEX(defer_fw_devlink_lock);
 
 #ifdef CONFIG_SRCU
 static DEFINE_MUTEX(device_links_lock);
@@ -74,6 +81,11 @@
 {
 	return srcu_read_lock_held(&device_links_srcu);
 }
+
+static void device_link_synchronize_removal(void)
+{
+	synchronize_srcu(&device_links_srcu);
+}
 #else /* !CONFIG_SRCU */
 static DECLARE_RWSEM(device_links_lock);
 
@@ -104,6 +116,10 @@
 	return lockdep_is_held(&device_links_lock);
 }
 #endif
+
+static inline void device_link_synchronize_removal(void)
+{
+}
 #endif /* !CONFIG_SRCU */
 
 static bool device_is_ancestor(struct device *dev, struct device *target)
@@ -142,6 +158,9 @@
 		return ret;
 
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (link->flags == (DL_FLAG_SYNC_STATE_ONLY | DL_FLAG_MANAGED))
+			continue;
+
 		if (link->consumer == target)
 			return 1;
 
@@ -211,8 +230,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 | DL_FLAG_MANAGED))
+			continue;
 		device_reorder_to_tail(link->consumer, NULL);
+	}
 
 	return 0;
 }
@@ -237,9 +259,214 @@
 	device_links_read_unlock(idx);
 }
 
+#define to_devlink(dev)	container_of((dev), struct device_link, link_dev)
+
+static ssize_t status_show(struct device *dev,
+			  struct device_attribute *attr, char *buf)
+{
+	char *status;
+
+	switch (to_devlink(dev)->status) {
+	case DL_STATE_NONE:
+		status = "not tracked"; break;
+	case DL_STATE_DORMANT:
+		status = "dormant"; break;
+	case DL_STATE_AVAILABLE:
+		status = "available"; break;
+	case DL_STATE_CONSUMER_PROBE:
+		status = "consumer probing"; break;
+	case DL_STATE_ACTIVE:
+		status = "active"; break;
+	case DL_STATE_SUPPLIER_UNBIND:
+		status = "supplier unbinding"; break;
+	default:
+		status = "unknown"; break;
+	}
+	return sprintf(buf, "%s\n", status);
+}
+static DEVICE_ATTR_RO(status);
+
+static ssize_t auto_remove_on_show(struct device *dev,
+				   struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+	char *str;
+
+	if (link->flags & DL_FLAG_AUTOREMOVE_SUPPLIER)
+		str = "supplier unbind";
+	else if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
+		str = "consumer unbind";
+	else
+		str = "never";
+
+	return sprintf(buf, "%s\n", str);
+}
+static DEVICE_ATTR_RO(auto_remove_on);
+
+static ssize_t runtime_pm_show(struct device *dev,
+			       struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+
+	return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_PM_RUNTIME));
+}
+static DEVICE_ATTR_RO(runtime_pm);
+
+static ssize_t sync_state_only_show(struct device *dev,
+				    struct device_attribute *attr, char *buf)
+{
+	struct device_link *link = to_devlink(dev);
+
+	return sprintf(buf, "%d\n", !!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+}
+static DEVICE_ATTR_RO(sync_state_only);
+
+static struct attribute *devlink_attrs[] = {
+	&dev_attr_status.attr,
+	&dev_attr_auto_remove_on.attr,
+	&dev_attr_runtime_pm.attr,
+	&dev_attr_sync_state_only.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(devlink);
+
+static void device_link_release_fn(struct work_struct *work)
+{
+	struct device_link *link = container_of(work, struct device_link, rm_work);
+
+	/* Ensure that all references to the link object have been dropped. */
+	device_link_synchronize_removal();
+
+	while (refcount_dec_not_one(&link->rpm_active))
+		pm_runtime_put(link->supplier);
+
+	put_device(link->consumer);
+	put_device(link->supplier);
+	kfree(link);
+}
+
+static void devlink_dev_release(struct device *dev)
+{
+	struct device_link *link = to_devlink(dev);
+
+	INIT_WORK(&link->rm_work, device_link_release_fn);
+	/*
+	 * It may take a while to complete this work because of the SRCU
+	 * synchronization in device_link_release_fn() and if the consumer or
+	 * supplier devices get deleted when it runs, so put it into the "long"
+	 * workqueue.
+	 */
+	queue_work(system_long_wq, &link->rm_work);
+}
+
+static struct class devlink_class = {
+	.name = "devlink",
+	.owner = THIS_MODULE,
+	.dev_groups = devlink_groups,
+	.dev_release = devlink_dev_release,
+};
+
+static int devlink_add_symlinks(struct device *dev,
+				struct class_interface *class_intf)
+{
+	int ret;
+	size_t len;
+	struct device_link *link = to_devlink(dev);
+	struct device *sup = link->supplier;
+	struct device *con = link->consumer;
+	char *buf;
+
+	len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
+	len += strlen("supplier:") + 1;
+	buf = kzalloc(len, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	ret = sysfs_create_link(&link->link_dev.kobj, &sup->kobj, "supplier");
+	if (ret)
+		goto out;
+
+	ret = sysfs_create_link(&link->link_dev.kobj, &con->kobj, "consumer");
+	if (ret)
+		goto err_con;
+
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	ret = sysfs_create_link(&sup->kobj, &link->link_dev.kobj, buf);
+	if (ret)
+		goto err_con_dev;
+
+	snprintf(buf, len, "supplier:%s", dev_name(sup));
+	ret = sysfs_create_link(&con->kobj, &link->link_dev.kobj, buf);
+	if (ret)
+		goto err_sup_dev;
+
+	goto out;
+
+err_sup_dev:
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	sysfs_remove_link(&sup->kobj, buf);
+err_con_dev:
+	sysfs_remove_link(&link->link_dev.kobj, "consumer");
+err_con:
+	sysfs_remove_link(&link->link_dev.kobj, "supplier");
+out:
+	kfree(buf);
+	return ret;
+}
+
+static void devlink_remove_symlinks(struct device *dev,
+				   struct class_interface *class_intf)
+{
+	struct device_link *link = to_devlink(dev);
+	size_t len;
+	struct device *sup = link->supplier;
+	struct device *con = link->consumer;
+	char *buf;
+
+	sysfs_remove_link(&link->link_dev.kobj, "consumer");
+	sysfs_remove_link(&link->link_dev.kobj, "supplier");
+
+	len = max(strlen(dev_name(sup)), strlen(dev_name(con)));
+	len += strlen("supplier:") + 1;
+	buf = kzalloc(len, GFP_KERNEL);
+	if (!buf) {
+		WARN(1, "Unable to properly free device link symlinks!\n");
+		return;
+	}
+
+	snprintf(buf, len, "supplier:%s", dev_name(sup));
+	sysfs_remove_link(&con->kobj, buf);
+	snprintf(buf, len, "consumer:%s", dev_name(con));
+	sysfs_remove_link(&sup->kobj, buf);
+	kfree(buf);
+}
+
+static struct class_interface devlink_class_intf = {
+	.class = &devlink_class,
+	.add_dev = devlink_add_symlinks,
+	.remove_dev = devlink_remove_symlinks,
+};
+
+static int __init devlink_class_init(void)
+{
+	int ret;
+
+	ret = class_register(&devlink_class);
+	if (ret)
+		return ret;
+
+	ret = class_interface_register(&devlink_class_intf);
+	if (ret)
+		class_unregister(&devlink_class);
+
+	return ret;
+}
+postcore_initcall(devlink_class_init);
+
 #define DL_MANAGED_LINK_FLAGS (DL_FLAG_AUTOREMOVE_CONSUMER | \
 			       DL_FLAG_AUTOREMOVE_SUPPLIER | \
-			       DL_FLAG_AUTOPROBE_CONSUMER)
+			       DL_FLAG_AUTOPROBE_CONSUMER  | \
+			       DL_FLAG_SYNC_STATE_ONLY)
 
 #define DL_ADD_VALID_FLAGS (DL_MANAGED_LINK_FLAGS | DL_FLAG_STATELESS | \
 			    DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE)
@@ -307,6 +534,8 @@
 
 	if (!consumer || !supplier || flags & ~DL_ADD_VALID_FLAGS ||
 	    (flags & DL_FLAG_STATELESS && flags & DL_MANAGED_LINK_FLAGS) ||
+	    (flags & DL_FLAG_SYNC_STATE_ONLY &&
+	     flags != DL_FLAG_SYNC_STATE_ONLY) ||
 	    (flags & DL_FLAG_AUTOPROBE_CONSUMER &&
 	     flags & (DL_FLAG_AUTOREMOVE_CONSUMER |
 		      DL_FLAG_AUTOREMOVE_SUPPLIER)))
@@ -327,11 +556,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;
 	}
@@ -358,9 +590,15 @@
 		}
 
 		if (flags & DL_FLAG_STATELESS) {
-			link->flags |= DL_FLAG_STATELESS;
 			kref_get(&link->kref);
-			goto out;
+			if (link->flags & DL_FLAG_SYNC_STATE_ONLY &&
+			    !(link->flags & DL_FLAG_STATELESS)) {
+				link->flags |= DL_FLAG_STATELESS;
+				goto reorder;
+			} else {
+				link->flags |= DL_FLAG_STATELESS;
+				goto out;
+			}
 		}
 
 		/*
@@ -382,6 +620,12 @@
 			link->flags |= DL_FLAG_MANAGED;
 			device_link_init_status(link, consumer, supplier);
 		}
+		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;
 	}
 
@@ -391,13 +635,6 @@
 
 	refcount_set(&link->rpm_active, 1);
 
-	if (flags & DL_FLAG_PM_RUNTIME) {
-		if (flags & DL_FLAG_RPM_ACTIVE)
-			refcount_inc(&link->rpm_active);
-
-		pm_runtime_new_link(consumer);
-	}
-
 	get_device(supplier);
 	link->supplier = supplier;
 	INIT_LIST_HEAD(&link->s_node);
@@ -407,6 +644,25 @@
 	link->flags = flags;
 	kref_init(&link->kref);
 
+	link->link_dev.class = &devlink_class;
+	device_set_pm_not_required(&link->link_dev);
+	dev_set_name(&link->link_dev, "%s--%s",
+		     dev_name(supplier), dev_name(consumer));
+	if (device_register(&link->link_dev)) {
+		put_device(consumer);
+		put_device(supplier);
+		kfree(link);
+		link = NULL;
+		goto out;
+	}
+
+	if (flags & DL_FLAG_PM_RUNTIME) {
+		if (flags & DL_FLAG_RPM_ACTIVE)
+			refcount_inc(&link->rpm_active);
+
+		pm_runtime_new_link(consumer);
+	}
+
 	/* Determine the initial link state. */
 	if (flags & DL_FLAG_STATELESS)
 		link->status = DL_STATE_NONE;
@@ -421,6 +677,17 @@
 	    flags & DL_FLAG_PM_RUNTIME)
 		pm_runtime_resume(supplier);
 
+	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
+	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
+
+	if (flags & DL_FLAG_SYNC_STATE_ONLY) {
+		dev_dbg(consumer,
+			"Linked as a sync state only consumer to %s\n",
+			dev_name(supplier));
+		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.
@@ -430,12 +697,9 @@
 	 */
 	device_reorder_to_tail(consumer, NULL);
 
-	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
-	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
-
 	dev_dbg(consumer, "Linked as a consumer to %s\n", dev_name(supplier));
 
- out:
+out:
 	device_pm_unlock();
 	device_links_write_unlock();
 
@@ -446,22 +710,75 @@
 }
 EXPORT_SYMBOL_GPL(device_link_add);
 
-static void device_link_free(struct device_link *link)
+/**
+ * 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)
 {
-	while (refcount_dec_not_one(&link->rpm_active))
-		pm_runtime_put(link->supplier);
+	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);
+}
 
-	put_device(link->consumer);
-	put_device(link->supplier);
-	kfree(link);
+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) {
+		int ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
+		if (!ret)
+			list_del_init(&dev->links.needs_suppliers);
+		else if (ret != -ENODEV)
+			dev->links.need_for_probe = false;
+	}
+	mutex_unlock(&wfs_lock);
 }
 
 #ifdef CONFIG_SRCU
-static void __device_link_free_srcu(struct rcu_head *rhead)
-{
-	device_link_free(container_of(rhead, struct device_link, rcu_head));
-}
-
 static void __device_link_del(struct kref *kref)
 {
 	struct device_link *link = container_of(kref, struct device_link, kref);
@@ -473,7 +790,7 @@
 
 	list_del_rcu(&link->s_node);
 	list_del_rcu(&link->c_node);
-	call_srcu(&device_links_srcu, &link->rcu_head, __device_link_free_srcu);
+	device_unregister(&link->link_dev);
 }
 #else /* !CONFIG_SRCU */
 static void __device_link_del(struct kref *kref)
@@ -487,7 +804,7 @@
 
 	list_del(&link->s_node);
 	list_del(&link->c_node);
-	device_link_free(link);
+	device_unregister(&link->link_dev);
 }
 #endif /* !CONFIG_SRCU */
 
@@ -511,9 +828,7 @@
 void device_link_del(struct device_link *link)
 {
 	device_links_write_lock();
-	device_pm_lock();
 	device_link_put_kref(link);
-	device_pm_unlock();
 	device_links_write_unlock();
 }
 EXPORT_SYMBOL_GPL(device_link_del);
@@ -534,7 +849,6 @@
 		return;
 
 	device_links_write_lock();
-	device_pm_lock();
 
 	list_for_each_entry(link, &supplier->links.consumers, s_node) {
 		if (link->consumer == consumer) {
@@ -543,7 +857,6 @@
 		}
 	}
 
-	device_pm_unlock();
 	device_links_write_unlock();
 }
 EXPORT_SYMBOL_GPL(device_link_remove);
@@ -552,9 +865,17 @@
 {
 	struct device_link *link;
 
-	list_for_each_entry(link, &dev->links.suppliers, c_node)
-		if (link->status == DL_STATE_CONSUMER_PROBE)
+	list_for_each_entry(link, &dev->links.suppliers, c_node) {
+		if (link->status != DL_STATE_CONSUMER_PROBE)
+			continue;
+
+		if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
 			WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+		} else {
+			WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+			WRITE_ONCE(link->status, DL_STATE_DORMANT);
+		}
+	}
 }
 
 /**
@@ -578,13 +899,26 @@
 	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_MANAGED))
 			continue;
 
-		if (link->status != DL_STATE_AVAILABLE) {
+		if (link->status != DL_STATE_AVAILABLE &&
+		    !(link->flags & DL_FLAG_SYNC_STATE_ONLY)) {
 			device_links_missing_supplier(dev);
 			ret = -EPROBE_DEFER;
 			break;
@@ -598,6 +932,157 @@
 }
 
 /**
+ * __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_has_sync_state(dev))
+		return;
+	if (dev->state_synced)
+		return;
+
+	list_for_each_entry(link, &dev->links.consumers, s_node) {
+		if (!(link->flags & DL_FLAG_MANAGED))
+			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_hook)))
+		return;
+
+	get_device(dev);
+	list_add_tail(&dev->links.defer_hook, list);
+}
+
+/**
+ * device_links_flush_sync_list - Call sync_state() on a list of devices
+ * @list: List of devices to call sync_state() on
+ * @dont_lock_dev: Device for which lock is already held by the caller
+ *
+ * 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(). The
+ * @dont_lock_dev parameter is useful when this function is called from a
+ * context where a device lock is already held.
+ */
+static void device_links_flush_sync_list(struct list_head *list,
+					 struct device *dont_lock_dev)
+{
+	struct device *dev, *tmp;
+
+	list_for_each_entry_safe(dev, tmp, list, links.defer_hook) {
+		list_del_init(&dev->links.defer_hook);
+
+		if (dev != dont_lock_dev)
+			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);
+
+		if (dev != dont_lock_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_hook) {
+		/*
+		 * Delete from deferred_sync list before queuing it to
+		 * sync_list because defer_hook is used for both lists.
+		 */
+		list_del_init(&dev->links.defer_hook);
+		__device_links_queue_sync_state(dev, &sync_list);
+	}
+out:
+	device_links_write_unlock();
+
+	device_links_flush_sync_list(&sync_list, NULL);
+}
+
+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_hook) && dev_has_sync_state(sup))
+		list_add_tail(&sup->links.defer_hook, &deferred_sync);
+}
+
+static void device_link_drop_managed(struct device_link *link)
+{
+	link->flags &= ~DL_FLAG_MANAGED;
+	WRITE_ONCE(link->status, DL_STATE_NONE);
+	kref_put(&link->kref, __device_link_del);
+}
+
+static ssize_t waiting_for_supplier_show(struct device *dev,
+					 struct device_attribute *attr,
+					 char *buf)
+{
+	bool val;
+
+	device_lock(dev);
+	val = !list_empty(&dev->links.needs_suppliers)
+	      && dev->links.need_for_probe;
+	device_unlock(dev);
+	return sprintf(buf, "%u\n", val);
+}
+static DEVICE_ATTR_RO(waiting_for_supplier);
+
+/**
  * device_links_driver_bound - Update device links after probing its driver.
  * @dev: Device to update the links for.
  *
@@ -610,7 +1095,18 @@
  */
 void device_links_driver_bound(struct device *dev)
 {
-	struct device_link *link;
+	struct device_link *link, *ln;
+	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_remove_file(dev, &dev_attr_waiting_for_supplier);
 
 	device_links_write_lock();
 
@@ -635,24 +1131,47 @@
 			driver_deferred_probe_add(link->consumer);
 	}
 
-	list_for_each_entry(link, &dev->links.suppliers, c_node) {
+	if (defer_sync_state_count)
+		__device_links_supplier_defer_sync(dev);
+	else
+		__device_links_queue_sync_state(dev, &sync_list);
+
+	list_for_each_entry_safe(link, ln, &dev->links.suppliers, c_node) {
+		struct device *supplier;
+
 		if (!(link->flags & DL_FLAG_MANAGED))
 			continue;
 
-		WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
-		WRITE_ONCE(link->status, DL_STATE_ACTIVE);
+		supplier = link->supplier;
+		if (link->flags & DL_FLAG_SYNC_STATE_ONLY) {
+			/*
+			 * When DL_FLAG_SYNC_STATE_ONLY is set, it means no
+			 * other DL_MANAGED_LINK_FLAGS have been set. So, it's
+			 * save to drop the managed link completely.
+			 */
+			device_link_drop_managed(link);
+		} else {
+			WARN_ON(link->status != DL_STATE_CONSUMER_PROBE);
+			WRITE_ONCE(link->status, DL_STATE_ACTIVE);
+		}
+
+		/*
+		 * This needs to be done even for the deleted
+		 * DL_FLAG_SYNC_STATE_ONLY device link in case it was the last
+		 * device link that was preventing the supplier from getting a
+		 * sync_state() call.
+		 */
+		if (defer_sync_state_count)
+			__device_links_supplier_defer_sync(supplier);
+		else
+			__device_links_queue_sync_state(supplier, &sync_list);
 	}
 
 	dev->links.status = DL_DEV_DRIVER_BOUND;
 
 	device_links_write_unlock();
-}
 
-static void device_link_drop_managed(struct device_link *link)
-{
-	link->flags &= ~DL_FLAG_MANAGED;
-	WRITE_ONCE(link->status, DL_STATE_NONE);
-	kref_put(&link->kref, __device_link_del);
+	device_links_flush_sync_list(&sync_list, dev);
 }
 
 /**
@@ -675,11 +1194,21 @@
 		if (!(link->flags & DL_FLAG_MANAGED))
 			continue;
 
-		if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER)
+		if (link->flags & DL_FLAG_AUTOREMOVE_CONSUMER) {
 			device_link_drop_managed(link);
-		else if (link->status == DL_STATE_CONSUMER_PROBE ||
-			 link->status == DL_STATE_ACTIVE)
+			continue;
+		}
+
+		if (link->status != DL_STATE_CONSUMER_PROBE &&
+		    link->status != DL_STATE_ACTIVE)
+			continue;
+
+		if (link->supplier->links.status == DL_DEV_DRIVER_BOUND) {
 			WRITE_ONCE(link->status, DL_STATE_AVAILABLE);
+		} else {
+			WARN_ON(!(link->flags & DL_FLAG_SYNC_STATE_ONLY));
+			WRITE_ONCE(link->status, DL_STATE_DORMANT);
+		}
 	}
 
 	dev->links.status = DL_DEV_NO_DRIVER;
@@ -757,6 +1286,7 @@
 		WRITE_ONCE(link->status, DL_STATE_DORMANT);
 	}
 
+	list_del_init(&dev->links.defer_hook);
 	__device_links_no_driver(dev);
 
 	device_links_write_unlock();
@@ -826,7 +1356,8 @@
 	list_for_each_entry(link, &dev->links.consumers, s_node) {
 		enum device_link_state status;
 
-		if (!(link->flags & DL_FLAG_MANAGED))
+		if (!(link->flags & DL_FLAG_MANAGED) ||
+		    link->flags & DL_FLAG_SYNC_STATE_ONLY)
 			continue;
 
 		status = link->status;
@@ -862,6 +1393,13 @@
 {
 	struct device_link *link, *ln;
 
+	if (dev->class == &devlink_class)
+		return;
+
+	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).
@@ -882,6 +1420,134 @@
 	device_links_write_unlock();
 }
 
+static void fw_devlink_link_device(struct device *dev)
+{
+	int fw_ret;
+
+	mutex_lock(&defer_fw_devlink_lock);
+	if (!defer_fw_devlink_count)
+		device_link_add_missing_supplier_links();
+
+	/*
+	 * The device's fwnode not having add_links() doesn't affect if other
+	 * consumers can find this device as a supplier.  So, this check is
+	 * intentionally placed after device_link_add_missing_supplier_links().
+	 */
+	if (!fwnode_has_op(dev->fwnode, add_links))
+		goto out;
+
+	/*
+	 * If fw_devlink is being deferred, assume all devices have mandatory
+	 * suppliers they need to link to later. Then, when the fw_devlink is
+	 * resumed, all these devices will get a chance to try and link to any
+	 * suppliers they have.
+	 */
+	if (!defer_fw_devlink_count) {
+		fw_ret = fwnode_call_int_op(dev->fwnode, add_links, dev);
+	} else {
+		fw_ret = -ENODEV;
+		/*
+		 * defer_hook is not used to add device to deferred_sync list
+		 * until device is bound. Since deferred fw devlink also blocks
+		 * probing, same list hook can be used for deferred_fw_devlink.
+		 */
+		list_add_tail(&dev->links.defer_hook, &deferred_fw_devlink);
+	}
+
+	if (fw_ret == -ENODEV)
+		device_link_wait_for_mandatory_supplier(dev);
+	else if (fw_ret)
+		device_link_wait_for_optional_supplier(dev);
+
+out:
+	mutex_unlock(&defer_fw_devlink_lock);
+}
+
+/**
+ * fw_devlink_pause - Pause parsing of fwnode to create device links
+ *
+ * Calling this function defers any fwnode parsing to create device links until
+ * fw_devlink_resume() is called. Both these functions are ref counted and the
+ * caller needs to match the calls.
+ *
+ * While fw_devlink is paused:
+ * - Any device that is added won't have its fwnode parsed to create device
+ *   links.
+ * - The probe of the device will also be deferred during this period.
+ * - Any devices that were already added, but waiting for suppliers won't be
+ *   able to link to newly added devices.
+ *
+ * Once fw_devlink_resume():
+ * - All the fwnodes that was not parsed will be parsed.
+ * - All the devices that were deferred probing will be reattempted if they
+ *   aren't waiting for any more suppliers.
+ *
+ * This pair of functions, is mainly meant to optimize the parsing of fwnodes
+ * when a lot of devices that need to link to each other are added in a short
+ * interval of time. For example, adding all the top level devices in a system.
+ *
+ * For example, if N devices are added and:
+ * - All the consumers are added before their suppliers
+ * - All the suppliers of the N devices are part of the N devices
+ *
+ * Then:
+ *
+ * - With the use of fw_devlink_pause() and fw_devlink_resume(), each device
+ *   will only need one parsing of its fwnode because it is guaranteed to find
+ *   all the supplier devices already registered and ready to link to. It won't
+ *   have to do another pass later to find one or more suppliers it couldn't
+ *   find in the first parse of the fwnode. So, we'll only need O(N) fwnode
+ *   parses.
+ *
+ * - Without the use of fw_devlink_pause() and fw_devlink_resume(), we would
+ *   end up doing O(N^2) parses of fwnodes because every device that's added is
+ *   guaranteed to trigger a parse of the fwnode of every device added before
+ *   it. This O(N^2) parse is made worse by the fact that when a fwnode of a
+ *   device is parsed, all it descendant devices might need to have their
+ *   fwnodes parsed too (even if the devices themselves aren't added).
+ */
+void fw_devlink_pause(void)
+{
+	mutex_lock(&defer_fw_devlink_lock);
+	defer_fw_devlink_count++;
+	mutex_unlock(&defer_fw_devlink_lock);
+}
+
+/** fw_devlink_resume - Resume parsing of fwnode to create device links
+ *
+ * This function is used in conjunction with fw_devlink_pause() and is ref
+ * counted. See documentation for fw_devlink_pause() for more details.
+ */
+void fw_devlink_resume(void)
+{
+	struct device *dev, *tmp;
+	LIST_HEAD(probe_list);
+
+	mutex_lock(&defer_fw_devlink_lock);
+	if (!defer_fw_devlink_count) {
+		WARN(true, "Unmatched fw_devlink pause/resume!");
+		goto out;
+	}
+
+	defer_fw_devlink_count--;
+	if (defer_fw_devlink_count)
+		goto out;
+
+	device_link_add_missing_supplier_links();
+	list_splice_tail_init(&deferred_fw_devlink, &probe_list);
+out:
+	mutex_unlock(&defer_fw_devlink_lock);
+
+	/*
+	 * bus_probe_device() can cause new devices to get added and they'll
+	 * try to grab defer_fw_devlink_lock. So, this needs to be done outside
+	 * the defer_fw_devlink_lock.
+	 */
+	list_for_each_entry_safe(dev, tmp, &probe_list, links.defer_hook) {
+		list_del_init(&dev->links.defer_hook);
+		bus_probe_device(dev);
+	}
+}
 /* Device links support end. */
 
 int (*platform_notify)(struct device *dev) = NULL;
@@ -1504,8 +2170,14 @@
 			goto err_remove_dev_groups;
 	}
 
+	error = device_create_file(dev, &dev_attr_waiting_for_supplier);
+	if (error)
+		goto err_remove_dev_online;
+
 	return 0;
 
+ err_remove_dev_online:
+	device_remove_file(dev, &dev_attr_online);
  err_remove_dev_groups:
 	device_remove_groups(dev, dev->groups);
  err_remove_type_groups:
@@ -1523,6 +2195,7 @@
 	struct class *class = dev->class;
 	const struct device_type *type = dev->type;
 
+	device_remove_file(dev, &dev_attr_waiting_for_supplier);
 	device_remove_file(dev, &dev_attr_online);
 	device_remove_groups(dev, dev->groups);
 
@@ -1722,11 +2395,12 @@
 	device_pm_init(dev);
 	set_dev_node(dev, -1);
 #ifdef CONFIG_GENERIC_MSI_IRQ
-	raw_spin_lock_init(&dev->msi_lock);
 	INIT_LIST_HEAD(&dev->msi_list);
 #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_hook);
 	dev->links.status = DL_DEV_NO_DRIVER;
 }
 EXPORT_SYMBOL_GPL(device_initialize);
@@ -2213,6 +2887,24 @@
 					     BUS_NOTIFY_ADD_DEVICE, dev);
 
 	kobject_uevent(&dev->kobj, KOBJ_ADD);
+
+	/*
+	 * 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 happen 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.
+	 */
+	if (dev->fwnode && !dev->fwnode->dev) {
+		dev->fwnode->dev = dev;
+		fw_devlink_link_device(dev);
+	}
+
 	bus_probe_device(dev);
 	if (parent)
 		klist_add_tail(&dev->p->knode_parent,
@@ -2357,6 +3049,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/dd.c b/drivers/base/dd.c
index cf7e5b4..1563370 100644
--- a/drivers/base/dd.c
+++ b/drivers/base/dd.c
@@ -491,6 +491,18 @@
 		driver_deferred_probe_trigger();
 }
 
+static ssize_t state_synced_show(struct device *dev,
+				 struct device_attribute *attr, char *buf)
+{
+	bool val;
+
+	device_lock(dev);
+	val = dev->state_synced;
+	device_unlock(dev);
+	return sprintf(buf, "%u\n", val);
+}
+static DEVICE_ATTR_RO(state_synced);
+
 static int really_probe(struct device *dev, struct device_driver *drv)
 {
 	int ret = -EPROBE_DEFER;
@@ -565,9 +577,16 @@
 		goto dev_groups_failed;
 	}
 
+	if (dev_has_sync_state(dev) &&
+	    device_create_file(dev, &dev_attr_state_synced)) {
+		dev_err(dev, "state_synced sysfs add failed\n");
+		goto dev_sysfs_state_synced_failed;
+	}
+
 	if (test_remove) {
 		test_remove = false;
 
+		device_remove_file(dev, &dev_attr_state_synced);
 		device_remove_groups(dev, drv->dev_groups);
 
 		if (dev->bus->remove)
@@ -597,6 +616,8 @@
 		 drv->bus->name, __func__, dev_name(dev), drv->name);
 	goto done;
 
+dev_sysfs_state_synced_failed:
+	device_remove_groups(dev, drv->dev_groups);
 dev_groups_failed:
 	if (dev->bus->remove)
 		dev->bus->remove(dev);
@@ -1135,6 +1156,7 @@
 
 		pm_runtime_put_sync(dev);
 
+		device_remove_file(dev, &dev_attr_state_synced);
 		device_remove_groups(dev, drv->dev_groups);
 
 		if (dev->bus && dev->bus->remove)
diff --git a/drivers/base/firmware_loader/Kconfig b/drivers/base/firmware_loader/Kconfig
index 3f9e274..33e6552 100644
--- a/drivers/base/firmware_loader/Kconfig
+++ b/drivers/base/firmware_loader/Kconfig
@@ -169,5 +169,17 @@
 	  be compressed with either none or crc32 integrity check type (pass
 	  "-C crc32" option to xz command).
 
+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/firmware_loader/main.c b/drivers/base/firmware_loader/main.c
index 4f6b76b..f313e4f 100644
--- a/drivers/base/firmware_loader/main.c
+++ b/drivers/base/firmware_loader/main.c
@@ -51,7 +51,7 @@
 	struct list_head head;
 	int state;
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 	/*
 	 * Names of firmware images which have been cached successfully
 	 * will be added into the below list so that device uncache
@@ -562,7 +562,7 @@
 		 (unsigned int)fw_priv->size);
 }
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 static void fw_name_devm_release(struct device *dev, void *res)
 {
 	struct fw_name_devm *fwn = res;
@@ -1054,7 +1054,7 @@
 }
 EXPORT_SYMBOL(request_firmware_nowait);
 
-#ifdef CONFIG_PM_SLEEP
+#ifdef CONFIG_FW_CACHE
 static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
 
 /**
diff --git a/drivers/base/node.c b/drivers/base/node.c
index 62a05299..91fd7e6 100644
--- a/drivers/base/node.c
+++ b/drivers/base/node.c
@@ -413,6 +413,9 @@
 		       "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"
@@ -436,6 +439,9 @@
 		       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)),
diff --git a/drivers/base/power/Makefile b/drivers/base/power/Makefile
index ec5bb19..8fdd007 100644
--- a/drivers/base/power/Makefile
+++ b/drivers/base/power/Makefile
@@ -4,5 +4,6 @@
 obj-$(CONFIG_PM_TRACE_RTC)	+= trace.o
 obj-$(CONFIG_PM_GENERIC_DOMAINS)	+=  domain.o domain_governor.o
 obj-$(CONFIG_HAVE_CLK)	+= clock_ops.o
+obj-$(CONFIG_PM_QOS_KUNIT_TEST) += qos-test.o
 
 ccflags-$(CONFIG_DEBUG_DRIVER) := -DDEBUG
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index 23af545..0c309fa 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -34,6 +34,7 @@
 #include <linux/cpuidle.h>
 #include <linux/devfreq.h>
 #include <linux/timer.h>
+#include <linux/wakeup_reason.h>
 
 #include "../base.h"
 #include "power.h"
@@ -1341,6 +1342,8 @@
 	error = dpm_run_callback(callback, dev, state, info);
 	if (error) {
 		async_error = error;
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 		goto Complete;
 	}
 
@@ -1548,6 +1551,8 @@
 	error = dpm_run_callback(callback, dev, state, info);
 	if (error) {
 		async_error = error;
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 		goto Complete;
 	}
 	dpm_propagate_wakeup_to_parent(dev);
@@ -1818,6 +1823,9 @@
 
 		dpm_propagate_wakeup_to_parent(dev);
 		dpm_clear_superiors_direct_complete(dev);
+	} else {
+		log_suspend_abort_reason("Callback failed on %s in %pS returned %d",
+					 dev_name(dev), callback, error);
 	}
 
 	device_unlock(dev);
@@ -2027,6 +2035,9 @@
 			}
 			pr_info("Device %s not prepared for power transition: code %d\n",
 				dev_name(dev), error);
+			log_suspend_abort_reason("Device %s not prepared for power transition: code %d",
+						 dev_name(dev), error);
+			dpm_save_failed_dev(dev_name(dev));
 			put_device(dev);
 			break;
 		}
diff --git a/drivers/base/power/qos-test.c b/drivers/base/power/qos-test.c
new file mode 100644
index 0000000..79fc6c4
--- /dev/null
+++ b/drivers/base/power/qos-test.c
@@ -0,0 +1,117 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 NXP
+ */
+#include <kunit/test.h>
+#include <linux/pm_qos.h>
+
+/* Basic test for aggregating two "min" requests */
+static void freq_qos_test_min(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req1, req2;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req1, 0, sizeof(req1));
+	memset(&req2, 0, sizeof(req2));
+
+	ret = freq_qos_add_request(&qos, &req1, FREQ_QOS_MIN, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	ret = freq_qos_add_request(&qos, &req2, FREQ_QOS_MIN, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 2000);
+
+	ret = freq_qos_remove_request(&req2);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 1000);
+
+	ret = freq_qos_remove_request(&req1);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+}
+
+/* Test that requests for MAX_DEFAULT_VALUE have no effect */
+static void freq_qos_test_maxdef(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req1, req2;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req1, 0, sizeof(req1));
+	memset(&req2, 0, sizeof(req2));
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX),
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+
+	ret = freq_qos_add_request(&qos, &req1, FREQ_QOS_MAX,
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+	ret = freq_qos_add_request(&qos, &req2, FREQ_QOS_MAX,
+			FREQ_QOS_MAX_DEFAULT_VALUE);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+
+	/* Add max 1000 */
+	ret = freq_qos_update_request(&req1, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 1000);
+
+	/* Add max 2000, no impact */
+	ret = freq_qos_update_request(&req2, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 0);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 1000);
+
+	/* Remove max 1000, new max 2000 */
+	ret = freq_qos_remove_request(&req1);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MAX), 2000);
+}
+
+/*
+ * Test that a freq_qos_request can be added again after removal
+ *
+ * This issue was solved by commit 05ff1ba412fd ("PM: QoS: Invalidate frequency
+ * QoS requests after removal")
+ */
+static void freq_qos_test_readd(struct kunit *test)
+{
+	struct freq_constraints	qos;
+	struct freq_qos_request	req;
+	int ret;
+
+	freq_constraints_init(&qos);
+	memset(&req, 0, sizeof(req));
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+
+	/* Add */
+	ret = freq_qos_add_request(&qos, &req, FREQ_QOS_MIN, 1000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 1000);
+
+	/* Remove */
+	ret = freq_qos_remove_request(&req);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN),
+			FREQ_QOS_MIN_DEFAULT_VALUE);
+
+	/* Add again */
+	ret = freq_qos_add_request(&qos, &req, FREQ_QOS_MIN, 2000);
+	KUNIT_EXPECT_EQ(test, ret, 1);
+	KUNIT_EXPECT_EQ(test, freq_qos_read_value(&qos, FREQ_QOS_MIN), 2000);
+}
+
+static struct kunit_case pm_qos_test_cases[] = {
+	KUNIT_CASE(freq_qos_test_min),
+	KUNIT_CASE(freq_qos_test_maxdef),
+	KUNIT_CASE(freq_qos_test_readd),
+	{},
+};
+
+static struct kunit_suite pm_qos_test_module = {
+	.name = "qos-kunit-test",
+	.test_cases = pm_qos_test_cases,
+};
+kunit_test_suites(&pm_qos_test_module);
diff --git a/drivers/base/power/qos.c b/drivers/base/power/qos.c
index 350dcaf..8e93167 100644
--- a/drivers/base/power/qos.c
+++ b/drivers/base/power/qos.c
@@ -115,10 +115,20 @@
 
 	spin_lock_irqsave(&dev->power.lock, flags);
 
-	if (type == DEV_PM_QOS_RESUME_LATENCY) {
+	switch (type) {
+	case DEV_PM_QOS_RESUME_LATENCY:
 		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_RESUME_LATENCY_NO_CONSTRAINT
 			: pm_qos_read_value(&qos->resume_latency);
-	} else {
+		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE
+			: freq_qos_read_value(&qos->freq, FREQ_QOS_MIN);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = IS_ERR_OR_NULL(qos) ? PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE
+			: freq_qos_read_value(&qos->freq, FREQ_QOS_MAX);
+		break;
+	default:
 		WARN_ON(1);
 		ret = 0;
 	}
@@ -159,6 +169,10 @@
 			req->dev->power.set_latency_tolerance(req->dev, value);
 		}
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_apply(&req->data.freq, action, value);
+		break;
 	case DEV_PM_QOS_FLAGS:
 		ret = pm_qos_update_flags(&qos->flags, &req->data.flr,
 					  action, value);
@@ -209,6 +223,8 @@
 	c->no_constraint_value = PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT;
 	c->type = PM_QOS_MIN;
 
+	freq_constraints_init(&qos->freq);
+
 	INIT_LIST_HEAD(&qos->flags.list);
 
 	spin_lock_irq(&dev->power.lock);
@@ -269,6 +285,20 @@
 		memset(req, 0, sizeof(*req));
 	}
 
+	c = &qos->freq.min_freq;
+	plist_for_each_entry_safe(req, tmp, &c->list, data.freq.pnode) {
+		apply_constraint(req, PM_QOS_REMOVE_REQ,
+				 PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE);
+		memset(req, 0, sizeof(*req));
+	}
+
+	c = &qos->freq.max_freq;
+	plist_for_each_entry_safe(req, tmp, &c->list, data.freq.pnode) {
+		apply_constraint(req, PM_QOS_REMOVE_REQ,
+				 PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE);
+		memset(req, 0, sizeof(*req));
+	}
+
 	f = &qos->flags;
 	list_for_each_entry_safe(req, tmp, &f->list, data.flr.node) {
 		apply_constraint(req, PM_QOS_REMOVE_REQ, PM_QOS_DEFAULT_VALUE);
@@ -314,11 +344,22 @@
 		ret = dev_pm_qos_constraints_allocate(dev);
 
 	trace_dev_pm_qos_add_request(dev_name(dev), type, value);
-	if (!ret) {
-		req->dev = dev;
-		req->type = type;
+	if (ret)
+		return ret;
+
+	req->dev = dev;
+	req->type = type;
+	if (req->type == DEV_PM_QOS_MIN_FREQUENCY)
+		ret = freq_qos_add_request(&dev->power.qos->freq,
+					   &req->data.freq,
+					   FREQ_QOS_MIN, value);
+	else if (req->type == DEV_PM_QOS_MAX_FREQUENCY)
+		ret = freq_qos_add_request(&dev->power.qos->freq,
+					   &req->data.freq,
+					   FREQ_QOS_MAX, value);
+	else
 		ret = apply_constraint(req, PM_QOS_ADD_REQ, value);
-	}
+
 	return ret;
 }
 
@@ -382,6 +423,10 @@
 	case DEV_PM_QOS_LATENCY_TOLERANCE:
 		curr_value = req->data.pnode.prio;
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		curr_value = req->data.freq.pnode.prio;
+		break;
 	case DEV_PM_QOS_FLAGS:
 		curr_value = req->data.flr.flags;
 		break;
@@ -507,6 +552,14 @@
 		ret = blocking_notifier_chain_register(dev->power.qos->resume_latency.notifiers,
 						       notifier);
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = freq_qos_add_notifier(&dev->power.qos->freq,
+					    FREQ_QOS_MIN, notifier);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_add_notifier(&dev->power.qos->freq,
+					    FREQ_QOS_MAX, notifier);
+		break;
 	default:
 		WARN_ON(1);
 		ret = -EINVAL;
@@ -546,6 +599,14 @@
 		ret = blocking_notifier_chain_unregister(dev->power.qos->resume_latency.notifiers,
 							 notifier);
 		break;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		ret = freq_qos_remove_notifier(&dev->power.qos->freq,
+					       FREQ_QOS_MIN, notifier);
+		break;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		ret = freq_qos_remove_notifier(&dev->power.qos->freq,
+					       FREQ_QOS_MAX, notifier);
+		break;
 	default:
 		WARN_ON(1);
 		ret = -EINVAL;
diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c
index 92f0960..911f1e8 100644
--- a/drivers/base/power/wakeup.c
+++ b/drivers/base/power/wakeup.c
@@ -15,6 +15,9 @@
 #include <linux/seq_file.h>
 #include <linux/debugfs.h>
 #include <linux/pm_wakeirq.h>
+#include <linux/irq.h>
+#include <linux/irqdesc.h>
+#include <linux/wakeup_reason.h>
 #include <trace/events/power.h>
 
 #include "power.h"
@@ -815,6 +818,37 @@
 }
 EXPORT_SYMBOL_GPL(pm_wakeup_dev_event);
 
+void pm_get_active_wakeup_sources(char *pending_wakeup_source, size_t max)
+{
+	struct wakeup_source *ws, *last_active_ws = NULL;
+	int len = 0;
+	bool active = false;
+
+	rcu_read_lock();
+	list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
+		if (ws->active && len < max) {
+			if (!active)
+				len += scnprintf(pending_wakeup_source, max,
+						"Pending Wakeup Sources: ");
+			len += scnprintf(pending_wakeup_source + len, max - len,
+				"%s ", ws->name);
+			active = true;
+		} else if (!active &&
+			   (!last_active_ws ||
+			    ktime_to_ns(ws->last_time) >
+			    ktime_to_ns(last_active_ws->last_time))) {
+			last_active_ws = ws;
+		}
+	}
+	if (!active && last_active_ws) {
+		scnprintf(pending_wakeup_source, max,
+				"Last active Wakeup Source: %s",
+				last_active_ws->name);
+	}
+	rcu_read_unlock();
+}
+EXPORT_SYMBOL_GPL(pm_get_active_wakeup_sources);
+
 void pm_print_active_wakeup_sources(void)
 {
 	struct wakeup_source *ws;
@@ -853,6 +887,7 @@
 {
 	unsigned long flags;
 	bool ret = false;
+	char suspend_abort[MAX_SUSPEND_ABORT_LEN];
 
 	raw_spin_lock_irqsave(&events_lock, flags);
 	if (events_check_enabled) {
@@ -867,6 +902,10 @@
 	if (ret) {
 		pm_pr_dbg("Wakeup pending, aborting suspend\n");
 		pm_print_active_wakeup_sources();
+		pm_get_active_wakeup_sources(suspend_abort,
+					     MAX_SUSPEND_ABORT_LEN);
+		log_suspend_abort_reason(suspend_abort);
+		pr_info("PM: %s\n", suspend_abort);
 	}
 
 	return ret || atomic_read(&pm_abort_suspend) > 0;
@@ -894,6 +933,18 @@
 void pm_system_irq_wakeup(unsigned int irq_number)
 {
 	if (pm_wakeup_irq == 0) {
+		struct irq_desc *desc;
+		const char *name = "null";
+
+		desc = irq_to_desc(irq_number);
+		if (desc == NULL)
+			name = "stray irq";
+		else if (desc->action && desc->action->name)
+			name = desc->action->name;
+
+		log_irq_wakeup_reason(irq_number);
+		pr_warn("%s: %d triggered %s\n", __func__, irq_number, name);
+
 		pm_wakeup_irq = irq_number;
 		pm_system_wakeup();
 	}
diff --git a/drivers/base/soc.c b/drivers/base/soc.c
index 735f122..9f4275c 100644
--- a/drivers/base/soc.c
+++ b/drivers/base/soc.c
@@ -104,15 +104,12 @@
 	.is_visible = soc_attribute_mode,
 };
 
-static const struct attribute_group *soc_attr_groups[] = {
-	&soc_attr_group,
-	NULL,
-};
-
 static void soc_release(struct device *dev)
 {
 	struct soc_device *soc_dev = container_of(dev, struct soc_device, dev);
 
+	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
+	kfree(soc_dev->dev.groups);
 	kfree(soc_dev);
 }
 
@@ -121,6 +118,7 @@
 struct soc_device *soc_device_register(struct soc_device_attribute *soc_dev_attr)
 {
 	struct soc_device *soc_dev;
+	const struct attribute_group **soc_attr_groups;
 	int ret;
 
 	if (!soc_bus_type.p) {
@@ -136,10 +134,18 @@
 		goto out1;
 	}
 
+	soc_attr_groups = kcalloc(3, sizeof(*soc_attr_groups), GFP_KERNEL);
+	if (!soc_attr_groups) {
+		ret = -ENOMEM;
+		goto out2;
+	}
+	soc_attr_groups[0] = &soc_attr_group;
+	soc_attr_groups[1] = soc_dev_attr->custom_attr_group;
+
 	/* Fetch a unique (reclaimable) SOC ID. */
 	ret = ida_simple_get(&soc_ida, 0, 0, GFP_KERNEL);
 	if (ret < 0)
-		goto out2;
+		goto out3;
 	soc_dev->soc_dev_num = ret;
 
 	soc_dev->attr = soc_dev_attr;
@@ -150,15 +156,15 @@
 	dev_set_name(&soc_dev->dev, "soc%d", soc_dev->soc_dev_num);
 
 	ret = device_register(&soc_dev->dev);
-	if (ret)
-		goto out3;
+	if (ret) {
+		put_device(&soc_dev->dev);
+		return ERR_PTR(ret);
+	}
 
 	return soc_dev;
 
 out3:
-	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
-	put_device(&soc_dev->dev);
-	soc_dev = NULL;
+	kfree(soc_attr_groups);
 out2:
 	kfree(soc_dev);
 out1:
@@ -169,8 +175,6 @@
 /* Ensure soc_dev->attr is freed prior to calling soc_device_unregister. */
 void soc_device_unregister(struct soc_device *soc_dev)
 {
-	ida_simple_remove(&soc_ida, soc_dev->soc_dev_num);
-
 	device_unregister(&soc_dev->dev);
 	early_soc_dev_attr = NULL;
 }
diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c
index 0d346a3..f3ca20c 100644
--- a/drivers/base/syscore.c
+++ b/drivers/base/syscore.c
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/suspend.h>
 #include <trace/events/power.h>
+#include <linux/wakeup_reason.h>
 
 static LIST_HEAD(syscore_ops_list);
 static DEFINE_MUTEX(syscore_ops_lock);
@@ -74,7 +75,9 @@
 	return 0;
 
  err_out:
-	pr_err("PM: System core suspend callback %pS failed.\n", ops->suspend);
+	log_suspend_abort_reason("System core suspend callback %pS failed",
+		ops->suspend);
+	pr_err("PM: System core suspend callback %pF failed.\n", ops->suspend);
 
 	list_for_each_entry_continue(ops, &syscore_ops_list, node)
 		if (ops->resume)
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index ffbe792..611c429 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -214,7 +214,8 @@
 	 * LO_FLAGS_READ_ONLY, both are set from kernel, and losetup
 	 * will get updated by ioctl(LOOP_GET_STATUS)
 	 */
-	blk_mq_freeze_queue(lo->lo_queue);
+	if (lo->lo_state == Lo_bound)
+		blk_mq_freeze_queue(lo->lo_queue);
 	lo->use_dio = use_dio;
 	if (use_dio) {
 		blk_queue_flag_clear(QUEUE_FLAG_NOMERGES, lo->lo_queue);
@@ -223,27 +224,39 @@
 		blk_queue_flag_set(QUEUE_FLAG_NOMERGES, lo->lo_queue);
 		lo->lo_flags &= ~LO_FLAGS_DIRECT_IO;
 	}
-	blk_mq_unfreeze_queue(lo->lo_queue);
+	if (lo->lo_state == Lo_bound)
+		blk_mq_unfreeze_queue(lo->lo_queue);
 }
 
+/**
+ * loop_validate_block_size() - validates the passed in block size
+ * @bsize: size to validate
+ */
 static int
-figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit)
+loop_validate_block_size(unsigned short bsize)
 {
-	loff_t size = get_size(offset, sizelimit, lo->lo_backing_file);
-	sector_t x = (sector_t)size;
+	if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
+		return -EINVAL;
+
+	return 0;
+}
+
+/**
+ * loop_set_size() - sets device size and notifies userspace
+ * @lo: struct loop_device to set the size for
+ * @size: new size of the loop device
+ *
+ * Callers must validate that the size passed into this function fits into
+ * a sector_t, eg using loop_validate_size()
+ */
+static void loop_set_size(struct loop_device *lo, loff_t size)
+{
 	struct block_device *bdev = lo->lo_device;
 
-	if (unlikely((loff_t)x != size))
-		return -EFBIG;
-	if (lo->lo_offset != offset)
-		lo->lo_offset = offset;
-	if (lo->lo_sizelimit != sizelimit)
-		lo->lo_sizelimit = sizelimit;
-	set_capacity(lo->lo_disk, x);
-	bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9);
+	set_capacity(lo->lo_disk, size);
+	bd_set_size(bdev, size << SECTOR_SHIFT);
 	/* let user-space know about the new size */
 	kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
-	return 0;
 }
 
 static inline int
@@ -951,132 +964,6 @@
 		blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
 }
 
-static int loop_set_fd(struct loop_device *lo, fmode_t mode,
-		       struct block_device *bdev, unsigned int arg)
-{
-	struct file	*file;
-	struct inode	*inode;
-	struct address_space *mapping;
-	struct block_device *claimed_bdev = NULL;
-	int		lo_flags = 0;
-	int		error;
-	loff_t		size;
-	bool		partscan;
-
-	/* This is safe, since we have a reference from open(). */
-	__module_get(THIS_MODULE);
-
-	error = -EBADF;
-	file = fget(arg);
-	if (!file)
-		goto out;
-
-	/*
-	 * If we don't hold exclusive handle for the device, upgrade to it
-	 * here to avoid changing device under exclusive owner.
-	 */
-	if (!(mode & FMODE_EXCL)) {
-		claimed_bdev = bd_start_claiming(bdev, loop_set_fd);
-		if (IS_ERR(claimed_bdev)) {
-			error = PTR_ERR(claimed_bdev);
-			goto out_putf;
-		}
-	}
-
-	error = mutex_lock_killable(&loop_ctl_mutex);
-	if (error)
-		goto out_bdev;
-
-	error = -EBUSY;
-	if (lo->lo_state != Lo_unbound)
-		goto out_unlock;
-
-	error = loop_validate_file(file, bdev);
-	if (error)
-		goto out_unlock;
-
-	mapping = file->f_mapping;
-	inode = mapping->host;
-
-	if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
-	    !file->f_op->write_iter)
-		lo_flags |= LO_FLAGS_READ_ONLY;
-
-	error = -EFBIG;
-	size = get_loop_size(lo, file);
-	if ((loff_t)(sector_t)size != size)
-		goto out_unlock;
-	error = loop_prepare_queue(lo);
-	if (error)
-		goto out_unlock;
-
-	error = 0;
-
-	set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0);
-
-	lo->use_dio = false;
-	lo->lo_device = bdev;
-	lo->lo_flags = lo_flags;
-	lo->lo_backing_file = file;
-	lo->transfer = NULL;
-	lo->ioctl = NULL;
-	lo->lo_sizelimit = 0;
-	lo->old_gfp_mask = mapping_gfp_mask(mapping);
-	mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
-
-	if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
-		blk_queue_write_cache(lo->lo_queue, true, false);
-
-	if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev) {
-		/* In case of direct I/O, match underlying block size */
-		unsigned short bsize = bdev_logical_block_size(
-			inode->i_sb->s_bdev);
-
-		blk_queue_logical_block_size(lo->lo_queue, bsize);
-		blk_queue_physical_block_size(lo->lo_queue, bsize);
-		blk_queue_io_min(lo->lo_queue, bsize);
-	}
-
-	loop_update_rotational(lo);
-	loop_update_dio(lo);
-	set_capacity(lo->lo_disk, size);
-	bd_set_size(bdev, size << 9);
-	loop_sysfs_init(lo);
-	/* let user-space know about the new size */
-	kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
-
-	set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
-		      block_size(inode->i_bdev) : PAGE_SIZE);
-
-	lo->lo_state = Lo_bound;
-	if (part_shift)
-		lo->lo_flags |= LO_FLAGS_PARTSCAN;
-	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
-
-	/* Grab the block_device to prevent its destruction after we
-	 * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
-	 */
-	bdgrab(bdev);
-	mutex_unlock(&loop_ctl_mutex);
-	if (partscan)
-		loop_reread_partitions(lo, bdev);
-	if (claimed_bdev)
-		bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
-	return 0;
-
-out_unlock:
-	mutex_unlock(&loop_ctl_mutex);
-out_bdev:
-	if (claimed_bdev)
-		bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
-out_putf:
-	fput(file);
-out:
-	/* This is safe: open() is still holding a reference. */
-	module_put(THIS_MODULE);
-	return error;
-}
-
 static int
 loop_release_xfer(struct loop_device *lo)
 {
@@ -1114,6 +1001,208 @@
 	return err;
 }
 
+/**
+ * loop_set_status_from_info - configure device from loop_info
+ * @lo: struct loop_device to configure
+ * @info: struct loop_info64 to configure the device with
+ *
+ * Configures the loop device parameters according to the passed
+ * in loop_info64 configuration.
+ */
+static int
+loop_set_status_from_info(struct loop_device *lo,
+			  const struct loop_info64 *info)
+{
+	int err;
+	struct loop_func_table *xfer;
+	kuid_t uid = current_uid();
+
+	if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE)
+		return -EINVAL;
+
+	err = loop_release_xfer(lo);
+	if (err)
+		return err;
+
+	if (info->lo_encrypt_type) {
+		unsigned int type = info->lo_encrypt_type;
+
+		if (type >= MAX_LO_CRYPT)
+			return -EINVAL;
+		xfer = xfer_funcs[type];
+		if (xfer == NULL)
+			return -EINVAL;
+	} else
+		xfer = NULL;
+
+	err = loop_init_xfer(lo, xfer, info);
+	if (err)
+		return err;
+
+	lo->lo_offset = info->lo_offset;
+	lo->lo_sizelimit = info->lo_sizelimit;
+	memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
+	memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
+	lo->lo_file_name[LO_NAME_SIZE-1] = 0;
+	lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
+
+	if (!xfer)
+		xfer = &none_funcs;
+	lo->transfer = xfer->transfer;
+	lo->ioctl = xfer->ioctl;
+
+	lo->lo_flags = info->lo_flags;
+
+	lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
+	lo->lo_init[0] = info->lo_init[0];
+	lo->lo_init[1] = info->lo_init[1];
+	if (info->lo_encrypt_key_size) {
+		memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
+		       info->lo_encrypt_key_size);
+		lo->lo_key_owner = uid;
+	}
+
+	return 0;
+}
+
+static int loop_configure(struct loop_device *lo, fmode_t mode,
+			  struct block_device *bdev,
+			  const struct loop_config *config)
+{
+	struct file	*file;
+	struct inode	*inode;
+	struct address_space *mapping;
+	struct block_device *claimed_bdev = NULL;
+	int		error;
+	loff_t		size;
+	bool		partscan;
+	unsigned short  bsize;
+
+	/* This is safe, since we have a reference from open(). */
+	__module_get(THIS_MODULE);
+
+	error = -EBADF;
+	file = fget(config->fd);
+	if (!file)
+		goto out;
+
+	/*
+	 * If we don't hold exclusive handle for the device, upgrade to it
+	 * here to avoid changing device under exclusive owner.
+	 */
+	if (!(mode & FMODE_EXCL)) {
+		claimed_bdev = bd_start_claiming(bdev, loop_configure);
+		if (IS_ERR(claimed_bdev)) {
+			error = PTR_ERR(claimed_bdev);
+			goto out_putf;
+		}
+	}
+
+	error = mutex_lock_killable(&loop_ctl_mutex);
+	if (error)
+		goto out_bdev;
+
+	error = -EBUSY;
+	if (lo->lo_state != Lo_unbound)
+		goto out_unlock;
+
+	error = loop_validate_file(file, bdev);
+	if (error)
+		goto out_unlock;
+
+	mapping = file->f_mapping;
+	inode = mapping->host;
+
+	if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) {
+		error = -EINVAL;
+		goto out_unlock;
+	}
+
+	if (config->block_size) {
+		error = loop_validate_block_size(config->block_size);
+		if (error)
+			goto out_unlock;
+	}
+
+	error = loop_set_status_from_info(lo, &config->info);
+	if (error)
+		goto out_unlock;
+
+	if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
+	    !file->f_op->write_iter)
+		lo->lo_flags |= LO_FLAGS_READ_ONLY;
+
+	error = loop_prepare_queue(lo);
+	if (error)
+		goto out_unlock;
+
+	error = 0;
+
+	set_device_ro(bdev, (lo->lo_flags & LO_FLAGS_READ_ONLY) != 0);
+
+	lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
+	lo->lo_device = bdev;
+	lo->lo_backing_file = file;
+	lo->old_gfp_mask = mapping_gfp_mask(mapping);
+	mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
+
+	if (!(lo->lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
+		blk_queue_write_cache(lo->lo_queue, true, false);
+
+	if (config->block_size)
+		bsize = config->block_size;
+	else if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev)
+		/* In case of direct I/O, match underlying block size */
+		bsize = bdev_logical_block_size(inode->i_sb->s_bdev);
+	else
+		bsize = 512;
+
+	blk_queue_logical_block_size(lo->lo_queue, bsize);
+	blk_queue_physical_block_size(lo->lo_queue, bsize);
+	blk_queue_io_min(lo->lo_queue, bsize);
+
+	loop_config_discard(lo);
+	loop_update_rotational(lo);
+	loop_update_dio(lo);
+	loop_sysfs_init(lo);
+
+	size = get_loop_size(lo, file);
+	loop_set_size(lo, size);
+
+	set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
+		      block_size(inode->i_bdev) : PAGE_SIZE);
+
+	lo->lo_state = Lo_bound;
+	if (part_shift)
+		lo->lo_flags |= LO_FLAGS_PARTSCAN;
+	partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
+	if (partscan)
+		lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN;
+
+	/* Grab the block_device to prevent its destruction after we
+	 * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
+	 */
+	bdgrab(bdev);
+	mutex_unlock(&loop_ctl_mutex);
+	if (partscan)
+		loop_reread_partitions(lo, bdev);
+	if (claimed_bdev)
+		bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+	return 0;
+
+out_unlock:
+	mutex_unlock(&loop_ctl_mutex);
+out_bdev:
+	if (claimed_bdev)
+		bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+out_putf:
+	fput(file);
+out:
+	/* This is safe: open() is still holding a reference. */
+	module_put(THIS_MODULE);
+	return error;
+}
+
 static int __loop_clr_fd(struct loop_device *lo, bool release)
 {
 	struct file *filp = NULL;
@@ -1261,10 +1350,11 @@
 loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
 {
 	int err;
-	struct loop_func_table *xfer;
-	kuid_t uid = current_uid();
 	struct block_device *bdev;
+	kuid_t uid = current_uid();
+	int prev_lo_flags;
 	bool partscan = false;
+	bool size_changed = false;
 
 	err = mutex_lock_killable(&loop_ctl_mutex);
 	if (err)
@@ -1279,13 +1369,10 @@
 		err = -ENXIO;
 		goto out_unlock;
 	}
-	if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE) {
-		err = -EINVAL;
-		goto out_unlock;
-	}
 
 	if (lo->lo_offset != info->lo_offset ||
 	    lo->lo_sizelimit != info->lo_sizelimit) {
+		size_changed = true;
 		sync_blockdev(lo->lo_device);
 		invalidate_bdev(lo->lo_device);
 	}
@@ -1293,79 +1380,44 @@
 	/* I/O need to be drained during transfer transition */
 	blk_mq_freeze_queue(lo->lo_queue);
 
-	err = loop_release_xfer(lo);
+	if (size_changed && lo->lo_device->bd_inode->i_mapping->nrpages) {
+		/* If any pages were dirtied after kill_bdev(), try again */
+		err = -EAGAIN;
+		pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
+			__func__, lo->lo_number, lo->lo_file_name,
+			lo->lo_device->bd_inode->i_mapping->nrpages);
+		goto out_unfreeze;
+	}
+
+	prev_lo_flags = lo->lo_flags;
+
+	err = loop_set_status_from_info(lo, info);
 	if (err)
 		goto out_unfreeze;
 
-	if (info->lo_encrypt_type) {
-		unsigned int type = info->lo_encrypt_type;
+	/* Mask out flags that can't be set using LOOP_SET_STATUS. */
+	lo->lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS;
+	/* For those flags, use the previous values instead */
+	lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_SETTABLE_FLAGS;
+	/* For flags that can't be cleared, use previous values too */
+	lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_CLEARABLE_FLAGS;
 
-		if (type >= MAX_LO_CRYPT) {
-			err = -EINVAL;
-			goto out_unfreeze;
-		}
-		xfer = xfer_funcs[type];
-		if (xfer == NULL) {
-			err = -EINVAL;
-			goto out_unfreeze;
-		}
-	} else
-		xfer = NULL;
-
-	err = loop_init_xfer(lo, xfer, info);
-	if (err)
-		goto out_unfreeze;
-
-	if (lo->lo_offset != info->lo_offset ||
-	    lo->lo_sizelimit != info->lo_sizelimit) {
-		/* kill_bdev should have truncated all the pages */
-		if (lo->lo_device->bd_inode->i_mapping->nrpages) {
-			err = -EAGAIN;
-			pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
-				__func__, lo->lo_number, lo->lo_file_name,
-				lo->lo_device->bd_inode->i_mapping->nrpages);
-			goto out_unfreeze;
-		}
-		if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
-			err = -EFBIG;
-			goto out_unfreeze;
-		}
+	if (size_changed) {
+		loff_t new_size = get_size(lo->lo_offset, lo->lo_sizelimit,
+					   lo->lo_backing_file);
+		loop_set_size(lo, new_size);
 	}
 
 	loop_config_discard(lo);
 
-	memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
-	memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
-	lo->lo_file_name[LO_NAME_SIZE-1] = 0;
-	lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
-
-	if (!xfer)
-		xfer = &none_funcs;
-	lo->transfer = xfer->transfer;
-	lo->ioctl = xfer->ioctl;
-
-	if ((lo->lo_flags & LO_FLAGS_AUTOCLEAR) !=
-	     (info->lo_flags & LO_FLAGS_AUTOCLEAR))
-		lo->lo_flags ^= LO_FLAGS_AUTOCLEAR;
-
-	lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
-	lo->lo_init[0] = info->lo_init[0];
-	lo->lo_init[1] = info->lo_init[1];
-	if (info->lo_encrypt_key_size) {
-		memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
-		       info->lo_encrypt_key_size);
-		lo->lo_key_owner = uid;
-	}
-
 	/* update dio if lo_offset or transfer is changed */
 	__loop_update_dio(lo, lo->use_dio);
 
 out_unfreeze:
 	blk_mq_unfreeze_queue(lo->lo_queue);
 
-	if (!err && (info->lo_flags & LO_FLAGS_PARTSCAN) &&
-	     !(lo->lo_flags & LO_FLAGS_PARTSCAN)) {
-		lo->lo_flags |= LO_FLAGS_PARTSCAN;
+	if (!err && (lo->lo_flags & LO_FLAGS_PARTSCAN) &&
+	     !(prev_lo_flags & LO_FLAGS_PARTSCAN)) {
 		lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN;
 		bdev = lo->lo_device;
 		partscan = true;
@@ -1529,10 +1581,15 @@
 
 static int loop_set_capacity(struct loop_device *lo)
 {
+	loff_t size;
+
 	if (unlikely(lo->lo_state != Lo_bound))
 		return -ENXIO;
 
-	return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
+	size = get_loop_size(lo, lo->lo_backing_file);
+	loop_set_size(lo, size);
+
+	return 0;
 }
 
 static int loop_set_dio(struct loop_device *lo, unsigned long arg)
@@ -1556,19 +1613,20 @@
 	if (lo->lo_state != Lo_bound)
 		return -ENXIO;
 
-	if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg))
-		return -EINVAL;
+	err = loop_validate_block_size(arg);
+	if (err)
+		return err;
 
-	if (lo->lo_queue->limits.logical_block_size != arg) {
-		sync_blockdev(lo->lo_device);
-		invalidate_bdev(lo->lo_device);
-	}
+	if (lo->lo_queue->limits.logical_block_size == arg)
+		return 0;
+
+	sync_blockdev(lo->lo_device);
+	invalidate_bdev(lo->lo_device);
 
 	blk_mq_freeze_queue(lo->lo_queue);
 
 	/* invalidate_bdev should have truncated all the pages */
-	if (lo->lo_queue->limits.logical_block_size != arg &&
-			lo->lo_device->bd_inode->i_mapping->nrpages) {
+	if (lo->lo_device->bd_inode->i_mapping->nrpages) {
 		err = -EAGAIN;
 		pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
 			__func__, lo->lo_number, lo->lo_file_name,
@@ -1615,11 +1673,31 @@
 	unsigned int cmd, unsigned long arg)
 {
 	struct loop_device *lo = bdev->bd_disk->private_data;
+	void __user *argp = (void __user *) arg;
 	int err;
 
 	switch (cmd) {
-	case LOOP_SET_FD:
-		return loop_set_fd(lo, mode, bdev, arg);
+	case LOOP_SET_FD: {
+		/*
+		 * Legacy case - pass in a zeroed out struct loop_config with
+		 * only the file descriptor set , which corresponds with the
+		 * default parameters we'd have used otherwise.
+		 */
+		struct loop_config config;
+
+		memset(&config, 0, sizeof(config));
+		config.fd = arg;
+
+		return loop_configure(lo, mode, bdev, &config);
+	}
+	case LOOP_CONFIGURE: {
+		struct loop_config config;
+
+		if (copy_from_user(&config, argp, sizeof(config)))
+			return -EFAULT;
+
+		return loop_configure(lo, mode, bdev, &config);
+	}
 	case LOOP_CHANGE_FD:
 		return loop_change_fd(lo, bdev, arg);
 	case LOOP_CLR_FD:
@@ -1627,21 +1705,19 @@
 	case LOOP_SET_STATUS:
 		err = -EPERM;
 		if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
-			err = loop_set_status_old(lo,
-					(struct loop_info __user *)arg);
+			err = loop_set_status_old(lo, argp);
 		}
 		break;
 	case LOOP_GET_STATUS:
-		return loop_get_status_old(lo, (struct loop_info __user *) arg);
+		return loop_get_status_old(lo, argp);
 	case LOOP_SET_STATUS64:
 		err = -EPERM;
 		if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
-			err = loop_set_status64(lo,
-					(struct loop_info64 __user *) arg);
+			err = loop_set_status64(lo, argp);
 		}
 		break;
 	case LOOP_GET_STATUS64:
-		return loop_get_status64(lo, (struct loop_info64 __user *) arg);
+		return loop_get_status64(lo, argp);
 	case LOOP_SET_CAPACITY:
 	case LOOP_SET_DIRECT_IO:
 	case LOOP_SET_BLOCK_SIZE:
@@ -1793,6 +1869,7 @@
 	case LOOP_CLR_FD:
 	case LOOP_GET_STATUS64:
 	case LOOP_SET_STATUS64:
+	case LOOP_CONFIGURE:
 		arg = (unsigned long) compat_ptr(arg);
 		/* fall through */
 	case LOOP_SET_FD:
diff --git a/drivers/block/null_blk.h b/drivers/block/null_blk.h
index a235c45..bc83786 100644
--- a/drivers/block/null_blk.h
+++ b/drivers/block/null_blk.h
@@ -91,11 +91,13 @@
 #ifdef CONFIG_BLK_DEV_ZONED
 int null_zone_init(struct nullb_device *dev);
 void null_zone_exit(struct nullb_device *dev);
-int null_zone_report(struct gendisk *disk, sector_t sector,
-		     struct blk_zone *zones, unsigned int *nr_zones);
+int null_report_zones(struct gendisk *disk, sector_t sector,
+		      unsigned int nr_zones, report_zones_cb cb, void *data);
 blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
 				enum req_opf op, sector_t sector,
 				sector_t nr_sectors);
+size_t null_zone_valid_read_len(struct nullb *nullb,
+				sector_t sector, unsigned int len);
 #else
 static inline int null_zone_init(struct nullb_device *dev)
 {
@@ -103,17 +105,18 @@
 	return -EINVAL;
 }
 static inline void null_zone_exit(struct nullb_device *dev) {}
-static inline int null_zone_report(struct gendisk *disk, sector_t sector,
-				   struct blk_zone *zones,
-				   unsigned int *nr_zones)
-{
-	return -EOPNOTSUPP;
-}
 static inline blk_status_t null_handle_zoned(struct nullb_cmd *cmd,
 					     enum req_opf op, sector_t sector,
 					     sector_t nr_sectors)
 {
 	return BLK_STS_NOTSUPP;
 }
+static inline size_t null_zone_valid_read_len(struct nullb *nullb,
+					      sector_t sector,
+					      unsigned int len)
+{
+	return len;
+}
+#define null_report_zones	NULL
 #endif /* CONFIG_BLK_DEV_ZONED */
 #endif /* __NULL_BLK_H */
diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
index 13eae97..75a7dd7 100644
--- a/drivers/block/null_blk_main.c
+++ b/drivers/block/null_blk_main.c
@@ -997,6 +997,16 @@
 	return 0;
 }
 
+static void nullb_fill_pattern(struct nullb *nullb, struct page *page,
+			       unsigned int len, unsigned int off)
+{
+	void *dst;
+
+	dst = kmap_atomic(page);
+	memset(dst + off, 0xFF, len);
+	kunmap_atomic(dst);
+}
+
 static void null_handle_discard(struct nullb *nullb, sector_t sector, size_t n)
 {
 	size_t temp;
@@ -1037,10 +1047,24 @@
 	unsigned int len, unsigned int off, bool is_write, sector_t sector,
 	bool is_fua)
 {
+	struct nullb_device *dev = nullb->dev;
+	unsigned int valid_len = len;
 	int err = 0;
 
 	if (!is_write) {
-		err = copy_from_nullb(nullb, page, off, sector, len);
+		if (dev->zoned)
+			valid_len = null_zone_valid_read_len(nullb,
+				sector, len);
+
+		if (valid_len) {
+			err = copy_from_nullb(nullb, page, off,
+				sector, valid_len);
+			off += valid_len;
+			len -= valid_len;
+		}
+
+		if (len)
+			nullb_fill_pattern(nullb, page, len, off);
 		flush_dcache_page(page);
 	} else {
 		flush_dcache_page(page);
@@ -1425,20 +1449,9 @@
 	blk_queue_flag_set(QUEUE_FLAG_DISCARD, nullb->q);
 }
 
-static int null_open(struct block_device *bdev, fmode_t mode)
-{
-	return 0;
-}
-
-static void null_release(struct gendisk *disk, fmode_t mode)
-{
-}
-
-static const struct block_device_operations null_fops = {
-	.owner =	THIS_MODULE,
-	.open =		null_open,
-	.release =	null_release,
-	.report_zones =	null_zone_report,
+static const struct block_device_operations null_ops = {
+	.owner		= THIS_MODULE,
+	.report_zones	= null_report_zones,
 };
 
 static void null_init_queue(struct nullb *nullb, struct nullb_queue *nq)
@@ -1527,29 +1540,35 @@
 
 static int null_gendisk_register(struct nullb *nullb)
 {
+	sector_t size = ((sector_t)nullb->dev->size * SZ_1M) >> SECTOR_SHIFT;
 	struct gendisk *disk;
-	sector_t size;
 
 	disk = nullb->disk = alloc_disk_node(1, nullb->dev->home_node);
 	if (!disk)
 		return -ENOMEM;
-	size = (sector_t)nullb->dev->size * 1024 * 1024ULL;
-	set_capacity(disk, size >> 9);
+	set_capacity(disk, size);
 
 	disk->flags |= GENHD_FL_EXT_DEVT | GENHD_FL_SUPPRESS_PARTITION_INFO;
 	disk->major		= null_major;
 	disk->first_minor	= nullb->index;
-	disk->fops		= &null_fops;
+	disk->fops		= &null_ops;
 	disk->private_data	= nullb;
 	disk->queue		= nullb->q;
 	strncpy(disk->disk_name, nullb->disk_name, DISK_NAME_LEN);
 
+#ifdef CONFIG_BLK_DEV_ZONED
 	if (nullb->dev->zoned) {
-		int ret = blk_revalidate_disk_zones(disk);
-
-		if (ret != 0)
-			return ret;
+		if (queue_is_mq(nullb->q)) {
+			int ret = blk_revalidate_disk_zones(disk);
+			if (ret)
+				return ret;
+		} else {
+			blk_queue_chunk_sectors(nullb->q,
+					nullb->dev->zone_size_sects);
+			nullb->q->nr_zones = blkdev_nr_zones(disk);
+		}
 	}
+#endif
 
 	add_disk(disk);
 	return 0;
@@ -1575,7 +1594,7 @@
 	return blk_mq_alloc_tag_set(set);
 }
 
-static void null_validate_conf(struct nullb_device *dev)
+static int null_validate_conf(struct nullb_device *dev)
 {
 	dev->blocksize = round_down(dev->blocksize, 512);
 	dev->blocksize = clamp_t(unsigned int, dev->blocksize, 512, 4096);
@@ -1602,6 +1621,14 @@
 	/* can not stop a queue */
 	if (dev->queue_mode == NULL_Q_BIO)
 		dev->mbps = 0;
+
+	if (dev->zoned &&
+	    (!dev->zone_size || !is_power_of_2(dev->zone_size))) {
+		pr_err("zone_size must be power-of-two\n");
+		return -EINVAL;
+	}
+
+	return 0;
 }
 
 #ifdef CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION
@@ -1634,7 +1661,9 @@
 	struct nullb *nullb;
 	int rv;
 
-	null_validate_conf(dev);
+	rv = null_validate_conf(dev);
+	if (rv)
+		return rv;
 
 	nullb = kzalloc_node(sizeof(*nullb), GFP_KERNEL, dev->home_node);
 	if (!nullb) {
@@ -1699,7 +1728,6 @@
 		if (rv)
 			goto out_cleanup_blk_queue;
 
-		blk_queue_chunk_sectors(nullb->q, dev->zone_size_sects);
 		nullb->q->limits.zoned = BLK_ZONED_HM;
 		blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, nullb->q);
 		blk_queue_required_elevator_features(nullb->q,
@@ -1761,11 +1789,6 @@
 		g_bs = PAGE_SIZE;
 	}
 
-	if (!is_power_of_2(g_zone_size)) {
-		pr_err("zone_size must be power-of-two\n");
-		return -EINVAL;
-	}
-
 	if (g_home_node != NUMA_NO_NODE && g_home_node >= nr_online_nodes) {
 		pr_err("invalid home_node value\n");
 		g_home_node = NUMA_NO_NODE;
diff --git a/drivers/block/null_blk_zoned.c b/drivers/block/null_blk_zoned.c
index 90dcf4a9..a323cb3 100644
--- a/drivers/block/null_blk_zoned.c
+++ b/drivers/block/null_blk_zoned.c
@@ -46,6 +46,7 @@
 
 		zone->start = sector;
 		zone->len = dev->zone_size_sects;
+		zone->capacity = zone->len;
 		zone->wp = zone->start + zone->len;
 		zone->type = BLK_ZONE_TYPE_CONVENTIONAL;
 		zone->cond = BLK_ZONE_COND_NOT_WP;
@@ -61,6 +62,7 @@
 			zone->len = dev_capacity_sects - zone->start;
 		else
 			zone->len = dev->zone_size_sects;
+		zone->capacity = zone->len;
 		zone->type = BLK_ZONE_TYPE_SEQWRITE_REQ;
 		zone->cond = BLK_ZONE_COND_EMPTY;
 
@@ -76,22 +78,53 @@
 	dev->zones = NULL;
 }
 
-int null_zone_report(struct gendisk *disk, sector_t sector,
-		     struct blk_zone *zones, unsigned int *nr_zones)
+int null_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data)
 {
 	struct nullb *nullb = disk->private_data;
 	struct nullb_device *dev = nullb->dev;
-	unsigned int zno, nrz = 0;
+	unsigned int first_zone, i;
+	struct blk_zone zone;
+	int error;
 
-	zno = null_zone_no(dev, sector);
-	if (zno < dev->nr_zones) {
-		nrz = min_t(unsigned int, *nr_zones, dev->nr_zones - zno);
-		memcpy(zones, &dev->zones[zno], nrz * sizeof(struct blk_zone));
+	first_zone = null_zone_no(dev, sector);
+	if (first_zone >= dev->nr_zones)
+		return 0;
+
+	nr_zones = min(nr_zones, dev->nr_zones - first_zone);
+	for (i = 0; i < nr_zones; i++) {
+		/*
+		 * Stacked DM target drivers will remap the zone information by
+		 * modifying the zone information passed to the report callback.
+		 * So use a local copy to avoid corruption of the device zone
+		 * array.
+		 */
+		memcpy(&zone, &dev->zones[first_zone + i],
+		       sizeof(struct blk_zone));
+		error = cb(&zone, i, data);
+		if (error)
+			return error;
 	}
 
-	*nr_zones = nrz;
+	return nr_zones;
+}
 
-	return 0;
+size_t null_zone_valid_read_len(struct nullb *nullb,
+				sector_t sector, unsigned int len)
+{
+	struct nullb_device *dev = nullb->dev;
+	struct blk_zone *zone = &dev->zones[null_zone_no(dev, sector)];
+	unsigned int nr_sectors = len >> SECTOR_SHIFT;
+
+	/* Read must be below the write pointer position */
+	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL ||
+	    sector + nr_sectors <= zone->wp)
+		return len;
+
+	if (sector > zone->wp)
+		return 0;
+
+	return (zone->wp - sector) << SECTOR_SHIFT;
 }
 
 static blk_status_t null_zone_write(struct nullb_cmd *cmd, sector_t sector,
@@ -131,8 +164,7 @@
 static blk_status_t null_zone_reset(struct nullb_cmd *cmd, sector_t sector)
 {
 	struct nullb_device *dev = cmd->nq->dev;
-	unsigned int zno = null_zone_no(dev, sector);
-	struct blk_zone *zone = &dev->zones[zno];
+	struct blk_zone *zone = &dev->zones[null_zone_no(dev, sector)];
 	size_t i;
 
 	switch (req_op(cmd->rq)) {
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c
index 816eb2d..5eb3836 100644
--- a/drivers/block/virtio_blk.c
+++ b/drivers/block/virtio_blk.c
@@ -313,8 +313,6 @@
 	bool unmap = false;
 	u32 type;
 
-	BUG_ON(req->nr_phys_segments + 2 > vblk->sg_elems);
-
 	switch (req_op(req)) {
 	case REQ_OP_READ:
 	case REQ_OP_WRITE:
@@ -342,6 +340,10 @@
 		return BLK_STS_IOERR;
 	}
 
+	BUG_ON(type != VIRTIO_BLK_T_DISCARD &&
+	       type != VIRTIO_BLK_T_WRITE_ZEROES &&
+	       (req->nr_phys_segments + 2 > vblk->sg_elems));
+
 	vbr->out_hdr.type = cpu_to_virtio32(vblk->vdev, type);
 	vbr->out_hdr.sector = type ?
 		0 : cpu_to_virtio64(vblk->vdev, blk_rq_pos(req));
diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c
index 1cc9b67..849ea43 100644
--- a/drivers/block/zram/zram_drv.c
+++ b/drivers/block/zram/zram_drv.c
@@ -471,7 +471,7 @@
 	if (sz > 0 && file_name[sz - 1] == '\n')
 		file_name[sz - 1] = 0x00;
 
-	backing_dev = filp_open(file_name, O_RDWR|O_LARGEFILE, 0);
+	backing_dev = filp_open_block(file_name, O_RDWR|O_LARGEFILE, 0);
 	if (IS_ERR(backing_dev)) {
 		err = PTR_ERR(backing_dev);
 		backing_dev = NULL;
@@ -614,15 +614,19 @@
 	return 1;
 }
 
+#define PAGE_WB_SIG "page_index="
+
+#define PAGE_WRITEBACK 0
 #define HUGE_WRITEBACK 1
 #define IDLE_WRITEBACK 2
 
+
 static ssize_t writeback_store(struct device *dev,
 		struct device_attribute *attr, const char *buf, size_t len)
 {
 	struct zram *zram = dev_to_zram(dev);
 	unsigned long nr_pages = zram->disksize >> PAGE_SHIFT;
-	unsigned long index;
+	unsigned long index = 0;
 	struct bio bio;
 	struct bio_vec bio_vec;
 	struct page *page;
@@ -634,8 +638,17 @@
 		mode = IDLE_WRITEBACK;
 	else if (sysfs_streq(buf, "huge"))
 		mode = HUGE_WRITEBACK;
-	else
-		return -EINVAL;
+	else {
+		if (strncmp(buf, PAGE_WB_SIG, sizeof(PAGE_WB_SIG) - 1))
+			return -EINVAL;
+
+		if (kstrtol(buf + sizeof(PAGE_WB_SIG) - 1, 10, &index) ||
+				index >= nr_pages)
+			return -EINVAL;
+
+		nr_pages = 1;
+		mode = PAGE_WRITEBACK;
+	}
 
 	down_read(&zram->init_lock);
 	if (!init_done(zram)) {
@@ -654,7 +667,7 @@
 		goto release_init_lock;
 	}
 
-	for (index = 0; index < nr_pages; index++) {
+	for (; nr_pages != 0; index++, nr_pages--) {
 		struct bio_vec bvec;
 
 		bvec.bv_page = page;
diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index 8cc21ad..ec69e5d 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -14,19 +14,33 @@
 
 #define VERSION "0.1"
 
-int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
+int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+			 enum qca_btsoc_type soc_type)
 {
 	struct sk_buff *skb;
 	struct edl_event_hdr *edl;
-	struct rome_version *ver;
+	struct qca_btsoc_version *ver;
 	char cmd;
 	int err = 0;
+	u8 event_type = HCI_EV_VENDOR;
+	u8 rlen = sizeof(*edl) + sizeof(*ver);
+	u8 rtype = EDL_APP_VER_RES_EVT;
 
 	bt_dev_dbg(hdev, "QCA Version Request");
 
+	/* Unlike other SoC's sending version command response as payload to
+	 * VSE event. WCN3991 sends version command response as a payload to
+	 * command complete event.
+	 */
+	if (soc_type == QCA_WCN3991) {
+		event_type = 0;
+		rlen += 1;
+		rtype = EDL_PATCH_VER_REQ_CMD;
+	}
+
 	cmd = EDL_PATCH_VER_REQ_CMD;
 	skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, EDL_PATCH_CMD_LEN,
-				&cmd, HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
+				&cmd, event_type, HCI_INIT_TIMEOUT);
 	if (IS_ERR(skb)) {
 		err = PTR_ERR(skb);
 		bt_dev_err(hdev, "Reading QCA version information failed (%d)",
@@ -34,7 +48,7 @@
 		return err;
 	}
 
-	if (skb->len != sizeof(*edl) + sizeof(*ver)) {
+	if (skb->len != rlen) {
 		bt_dev_err(hdev, "QCA Version size mismatch len %d", skb->len);
 		err = -EILSEQ;
 		goto out;
@@ -48,18 +62,21 @@
 	}
 
 	if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
-	    edl->rtype != EDL_APP_VER_RES_EVT) {
+	    edl->rtype != rtype) {
 		bt_dev_err(hdev, "QCA Wrong packet received %d %d", edl->cresp,
 			   edl->rtype);
 		err = -EIO;
 		goto out;
 	}
 
-	ver = (struct rome_version *)(edl->data);
+	if (soc_type == QCA_WCN3991)
+		memmove(&edl->data, &edl->data[1], sizeof(*ver));
+
+	ver = (struct qca_btsoc_version *)(edl->data);
 
 	BT_DBG("%s: Product:0x%08x", hdev->name, le32_to_cpu(ver->product_id));
 	BT_DBG("%s: Patch  :0x%08x", hdev->name, le16_to_cpu(ver->patch_ver));
-	BT_DBG("%s: ROM    :0x%08x", hdev->name, le16_to_cpu(ver->rome_ver));
+	BT_DBG("%s: ROM    :0x%08x", hdev->name, le16_to_cpu(ver->rom_ver));
 	BT_DBG("%s: SOC    :0x%08x", hdev->name, le32_to_cpu(ver->soc_id));
 
 	/* QCA chipset version can be decided by patch and SoC
@@ -67,7 +84,7 @@
 	 * and lower 2 bytes from patch will be used.
 	 */
 	*soc_version = (le32_to_cpu(ver->soc_id) << 16) |
-			(le16_to_cpu(ver->rome_ver) & 0x0000ffff);
+			(le16_to_cpu(ver->rom_ver) & 0x0000ffff);
 	if (*soc_version == 0)
 		err = -EILSEQ;
 
@@ -121,7 +138,7 @@
 }
 EXPORT_SYMBOL_GPL(qca_send_pre_shutdown_cmd);
 
-static void qca_tlv_check_data(struct rome_config *config,
+static void qca_tlv_check_data(struct qca_fw_config *config,
 				const struct firmware *fw)
 {
 	const u8 *data;
@@ -140,8 +157,8 @@
 	BT_DBG("TLV Type\t\t : 0x%x", type_len & 0x000000ff);
 	BT_DBG("Length\t\t : %d bytes", length);
 
-	config->dnld_mode = ROME_SKIP_EVT_NONE;
-	config->dnld_type = ROME_SKIP_EVT_NONE;
+	config->dnld_mode = QCA_SKIP_EVT_NONE;
+	config->dnld_type = QCA_SKIP_EVT_NONE;
 
 	switch (config->type) {
 	case TLV_TYPE_PATCH:
@@ -223,31 +240,45 @@
 }
 
 static int qca_tlv_send_segment(struct hci_dev *hdev, int seg_size,
-				 const u8 *data, enum rome_tlv_dnld_mode mode)
+				const u8 *data, enum qca_tlv_dnld_mode mode,
+				enum qca_btsoc_type soc_type)
 {
 	struct sk_buff *skb;
 	struct edl_event_hdr *edl;
 	struct tlv_seg_resp *tlv_resp;
 	u8 cmd[MAX_SIZE_PER_TLV_SEGMENT + 2];
 	int err = 0;
+	u8 event_type = HCI_EV_VENDOR;
+	u8 rlen = (sizeof(*edl) + sizeof(*tlv_resp));
+	u8 rtype = EDL_TVL_DNLD_RES_EVT;
 
 	cmd[0] = EDL_PATCH_TLV_REQ_CMD;
 	cmd[1] = seg_size;
 	memcpy(cmd + 2, data, seg_size);
 
-	if (mode == ROME_SKIP_EVT_VSE_CC || mode == ROME_SKIP_EVT_VSE)
+	if (mode == QCA_SKIP_EVT_VSE_CC || mode == QCA_SKIP_EVT_VSE)
 		return __hci_cmd_send(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2,
 				      cmd);
 
+	/* Unlike other SoC's sending version command response as payload to
+	 * VSE event. WCN3991 sends version command response as a payload to
+	 * command complete event.
+	 */
+	if (soc_type == QCA_WCN3991) {
+		event_type = 0;
+		rlen = sizeof(*edl);
+		rtype = EDL_PATCH_TLV_REQ_CMD;
+	}
+
 	skb = __hci_cmd_sync_ev(hdev, EDL_PATCH_CMD_OPCODE, seg_size + 2, cmd,
-				HCI_EV_VENDOR, HCI_INIT_TIMEOUT);
+				event_type, HCI_INIT_TIMEOUT);
 	if (IS_ERR(skb)) {
 		err = PTR_ERR(skb);
 		bt_dev_err(hdev, "QCA Failed to send TLV segment (%d)", err);
 		return err;
 	}
 
-	if (skb->len != sizeof(*edl) + sizeof(*tlv_resp)) {
+	if (skb->len != rlen) {
 		bt_dev_err(hdev, "QCA TLV response size mismatch");
 		err = -EILSEQ;
 		goto out;
@@ -260,13 +291,19 @@
 		goto out;
 	}
 
-	tlv_resp = (struct tlv_seg_resp *)(edl->data);
+	if (edl->cresp != EDL_CMD_REQ_RES_EVT || edl->rtype != rtype) {
+		bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x",
+			   edl->cresp, edl->rtype);
+		err = -EIO;
+	}
 
-	if (edl->cresp != EDL_CMD_REQ_RES_EVT ||
-	    edl->rtype != EDL_TVL_DNLD_RES_EVT || tlv_resp->result != 0x00) {
+	if (soc_type == QCA_WCN3991)
+		goto out;
+
+	tlv_resp = (struct tlv_seg_resp *)(edl->data);
+	if (tlv_resp->result) {
 		bt_dev_err(hdev, "QCA TLV with error stat 0x%x rtype 0x%x (0x%x)",
 			   edl->cresp, edl->rtype, tlv_resp->result);
-		err = -EIO;
 	}
 
 out:
@@ -301,7 +338,8 @@
 }
 
 static int qca_download_firmware(struct hci_dev *hdev,
-				  struct rome_config *config)
+				 struct qca_fw_config *config,
+				 enum qca_btsoc_type soc_type)
 {
 	const struct firmware *fw;
 	const u8 *segment;
@@ -328,10 +366,10 @@
 		remain -= segsize;
 		/* The last segment is always acked regardless download mode */
 		if (!remain || segsize < MAX_SIZE_PER_TLV_SEGMENT)
-			config->dnld_mode = ROME_SKIP_EVT_NONE;
+			config->dnld_mode = QCA_SKIP_EVT_NONE;
 
 		ret = qca_tlv_send_segment(hdev, segsize, segment,
-					    config->dnld_mode);
+					   config->dnld_mode, soc_type);
 		if (ret)
 			goto out;
 
@@ -344,8 +382,8 @@
 	 * decrease the BT in initialization time. Here we will inject a command
 	 * complete event to avoid a command timeout error message.
 	 */
-	if (config->dnld_type == ROME_SKIP_EVT_VSE_CC ||
-	    config->dnld_type == ROME_SKIP_EVT_VSE)
+	if (config->dnld_type == QCA_SKIP_EVT_VSE_CC ||
+	    config->dnld_type == QCA_SKIP_EVT_VSE)
 		ret = qca_inject_cmd_complete_event(hdev);
 
 out:
@@ -382,7 +420,7 @@
 		   enum qca_btsoc_type soc_type, u32 soc_ver,
 		   const char *firmware_name)
 {
-	struct rome_config config;
+	struct qca_fw_config config;
 	int err;
 	u8 rom_ver = 0;
 
@@ -405,7 +443,7 @@
 			 "qca/rampatch_%08x.bin", soc_ver);
 	}
 
-	err = qca_download_firmware(hdev, &config);
+	err = qca_download_firmware(hdev, &config, soc_type);
 	if (err < 0) {
 		bt_dev_err(hdev, "QCA Failed to download patch (%d)", err);
 		return err;
@@ -426,7 +464,7 @@
 		snprintf(config.fwname, sizeof(config.fwname),
 			 "qca/nvm_%08x.bin", soc_ver);
 
-	err = qca_download_firmware(hdev, &config);
+	err = qca_download_firmware(hdev, &config, soc_type);
 	if (err < 0) {
 		bt_dev_err(hdev, "QCA Failed to download NVM (%d)", err);
 		return err;
diff --git a/drivers/bluetooth/btqca.h b/drivers/bluetooth/btqca.h
index 69c5315..f5795b1 100644
--- a/drivers/bluetooth/btqca.h
+++ b/drivers/bluetooth/btqca.h
@@ -56,24 +56,24 @@
 	QCA_BAUDRATE_RESERVED
 };
 
-enum rome_tlv_dnld_mode {
-	ROME_SKIP_EVT_NONE,
-	ROME_SKIP_EVT_VSE,
-	ROME_SKIP_EVT_CC,
-	ROME_SKIP_EVT_VSE_CC
+enum qca_tlv_dnld_mode {
+	QCA_SKIP_EVT_NONE,
+	QCA_SKIP_EVT_VSE,
+	QCA_SKIP_EVT_CC,
+	QCA_SKIP_EVT_VSE_CC
 };
 
-enum rome_tlv_type {
+enum qca_tlv_type {
 	TLV_TYPE_PATCH = 1,
 	TLV_TYPE_NVM
 };
 
-struct rome_config {
+struct qca_fw_config {
 	u8 type;
 	char fwname[64];
 	uint8_t user_baud_rate;
-	enum rome_tlv_dnld_mode dnld_mode;
-	enum rome_tlv_dnld_mode dnld_type;
+	enum qca_tlv_dnld_mode dnld_mode;
+	enum qca_tlv_dnld_mode dnld_type;
 };
 
 struct edl_event_hdr {
@@ -82,10 +82,10 @@
 	__u8 data[0];
 } __packed;
 
-struct rome_version {
+struct qca_btsoc_version {
 	__le32 product_id;
 	__le16 patch_ver;
-	__le16 rome_ver;
+	__le16 rom_ver;
 	__le32 soc_id;
 } __packed;
 
@@ -125,6 +125,7 @@
 	QCA_AR3002,
 	QCA_ROME,
 	QCA_WCN3990,
+	QCA_WCN3991,
 	QCA_WCN3998,
 };
 
@@ -134,12 +135,14 @@
 int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 		   enum qca_btsoc_type soc_type, u32 soc_ver,
 		   const char *firmware_name);
-int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version);
+int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+			 enum qca_btsoc_type);
 int qca_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 int qca_send_pre_shutdown_cmd(struct hci_dev *hdev);
 static inline bool qca_is_wcn399x(enum qca_btsoc_type soc_type)
 {
-	return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3998;
+	return soc_type == QCA_WCN3990 || soc_type == QCA_WCN3991 ||
+	       soc_type == QCA_WCN3998;
 }
 #else
 
@@ -155,7 +158,8 @@
 	return -EOPNOTSUPP;
 }
 
-static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version)
+static inline int qca_read_soc_version(struct hci_dev *hdev, u32 *soc_version,
+				       enum qca_btsoc_type)
 {
 	return -EOPNOTSUPP;
 }
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index e3164c2..bbd290f 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -1262,7 +1262,7 @@
 		if (ret)
 			return ret;
 
-		ret = qca_read_soc_version(hdev, &soc_ver);
+		ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
 		if (ret)
 			return ret;
 	} else {
@@ -1282,7 +1282,7 @@
 
 	if (!qca_is_wcn399x(soc_type)) {
 		/* Get QCA version information */
-		ret = qca_read_soc_version(hdev, &soc_ver);
+		ret = qca_read_soc_version(hdev, &soc_ver, soc_type);
 		if (ret)
 			return ret;
 	}
@@ -1340,6 +1340,17 @@
 	.num_vregs = 4,
 };
 
+static const struct qca_vreg_data qca_soc_data_wcn3991 = {
+	.soc_type = QCA_WCN3991,
+	.vregs = (struct qca_vreg []) {
+		{ "vddio", 15000  },
+		{ "vddxo", 80000  },
+		{ "vddrf", 300000 },
+		{ "vddch0", 450000 },
+	},
+	.num_vregs = 4,
+};
+
 static const struct qca_vreg_data qca_soc_data_wcn3998 = {
 	.soc_type = QCA_WCN3998,
 	.vregs = (struct qca_vreg []) {
@@ -1567,6 +1578,7 @@
 static const struct of_device_id qca_bluetooth_of_match[] = {
 	{ .compatible = "qcom,qca6174-bt" },
 	{ .compatible = "qcom,wcn3990-bt", .data = &qca_soc_data_wcn3990},
+	{ .compatible = "qcom,wcn3991-bt", .data = &qca_soc_data_wcn3991},
 	{ .compatible = "qcom,wcn3998-bt", .data = &qca_soc_data_wcn3998},
 	{ /* sentinel */ }
 };
diff --git a/drivers/char/misc.c b/drivers/char/misc.c
index f6a1474..ca5141e 100644
--- a/drivers/char/misc.c
+++ b/drivers/char/misc.c
@@ -60,7 +60,7 @@
 /*
  * Assigned numbers, used for dynamic minors
  */
-#define DYNAMIC_MINORS 64 /* like dynamic majors */
+#define DYNAMIC_MINORS 128 /* like dynamic majors */
 static DECLARE_BITMAP(misc_minors, DYNAMIC_MINORS);
 
 #ifdef CONFIG_PROC_FS
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 60b39af..4e7ad37 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -307,6 +307,8 @@
  * Eastlake, Steve Crocker, and Jeff Schiller.
  */
 
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
 #include <linux/utsname.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
@@ -354,7 +356,6 @@
 #define INPUT_POOL_WORDS	(1 << (INPUT_POOL_SHIFT-5))
 #define OUTPUT_POOL_SHIFT	10
 #define OUTPUT_POOL_WORDS	(1 << (OUTPUT_POOL_SHIFT-5))
-#define SEC_XFER_SIZE		512
 #define EXTRACT_SIZE		10
 
 
@@ -371,12 +372,6 @@
 #define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
 
 /*
- * The minimum number of bits of entropy before we wake up a read on
- * /dev/random.  Should be enough to do a significant reseed.
- */
-static int random_read_wakeup_bits = 64;
-
-/*
  * If the entropy count falls under this number of bits, then we
  * should wake up processes which are selecting or polling on write
  * access to /dev/random.
@@ -436,42 +431,11 @@
 	/* was: x^128 + x^103 + x^76 + x^51 +x^25 + x + 1 */
 	/* x^128 + x^104 + x^76 + x^51 +x^25 + x + 1 */
 	{ S(128),	104,	76,	51,	25,	1 },
-	/* was: x^32 + x^26 + x^20 + x^14 + x^7 + x + 1 */
-	/* x^32 + x^26 + x^19 + x^14 + x^7 + x + 1 */
-	{ S(32),	26,	19,	14,	7,	1 },
-#if 0
-	/* x^2048 + x^1638 + x^1231 + x^819 + x^411 + x + 1  -- 115 */
-	{ S(2048),	1638,	1231,	819,	411,	1 },
-
-	/* x^1024 + x^817 + x^615 + x^412 + x^204 + x + 1 -- 290 */
-	{ S(1024),	817,	615,	412,	204,	1 },
-
-	/* x^1024 + x^819 + x^616 + x^410 + x^207 + x^2 + 1 -- 115 */
-	{ S(1024),	819,	616,	410,	207,	2 },
-
-	/* x^512 + x^411 + x^308 + x^208 + x^104 + x + 1 -- 225 */
-	{ S(512),	411,	308,	208,	104,	1 },
-
-	/* x^512 + x^409 + x^307 + x^206 + x^102 + x^2 + 1 -- 95 */
-	{ S(512),	409,	307,	206,	102,	2 },
-	/* x^512 + x^409 + x^309 + x^205 + x^103 + x^2 + 1 -- 95 */
-	{ S(512),	409,	309,	205,	103,	2 },
-
-	/* x^256 + x^205 + x^155 + x^101 + x^52 + x + 1 -- 125 */
-	{ S(256),	205,	155,	101,	52,	1 },
-
-	/* x^128 + x^103 + x^78 + x^51 + x^27 + x^2 + 1 -- 70 */
-	{ S(128),	103,	78,	51,	27,	2 },
-
-	/* x^64 + x^52 + x^39 + x^26 + x^14 + x + 1 -- 15 */
-	{ S(64),	52,	39,	26,	14,	1 },
-#endif
 };
 
 /*
  * Static global variables
  */
-static DECLARE_WAIT_QUEUE_HEAD(random_read_wait);
 static DECLARE_WAIT_QUEUE_HEAD(random_write_wait);
 static struct fasync_struct *fasync;
 
@@ -531,11 +495,8 @@
 	const struct poolinfo *poolinfo;
 	__u32 *pool;
 	const char *name;
-	struct entropy_store *pull;
-	struct work_struct push_work;
 
 	/* read-write data: */
-	unsigned long last_pulled;
 	spinlock_t lock;
 	unsigned short add_ptr;
 	unsigned short input_rotate;
@@ -551,9 +512,7 @@
 				size_t nbytes, int fips);
 
 static void crng_reseed(struct crng_state *crng, struct entropy_store *r);
-static void push_to_pool(struct work_struct *work);
 static __u32 input_pool_data[INPUT_POOL_WORDS] __latent_entropy;
-static __u32 blocking_pool_data[OUTPUT_POOL_WORDS] __latent_entropy;
 
 static struct entropy_store input_pool = {
 	.poolinfo = &poolinfo_table[0],
@@ -562,16 +521,6 @@
 	.pool = input_pool_data
 };
 
-static struct entropy_store blocking_pool = {
-	.poolinfo = &poolinfo_table[1],
-	.name = "blocking",
-	.pull = &input_pool,
-	.lock = __SPIN_LOCK_UNLOCKED(blocking_pool.lock),
-	.pool = blocking_pool_data,
-	.push_work = __WORK_INITIALIZER(blocking_pool.push_work,
-					push_to_pool),
-};
-
 static __u32 const twist_table[8] = {
 	0x00000000, 0x3b6e20c8, 0x76dc4190, 0x4db26158,
 	0xedb88320, 0xd6d6a3e8, 0x9b64c2b0, 0xa00ae278 };
@@ -760,22 +709,17 @@
 		} while (unlikely(entropy_count < pool_size-2 && pnfrac));
 	}
 
-	if (unlikely(entropy_count < 0)) {
-		pr_warn("random: negative entropy/overflow: pool %s count %d\n",
+	if (WARN_ON(entropy_count < 0)) {
+		pr_warn("negative entropy/overflow: pool %s count %d\n",
 			r->name, entropy_count);
-		WARN_ON(1);
 		entropy_count = 0;
 	} else if (entropy_count > pool_size)
 		entropy_count = pool_size;
-	if ((r == &blocking_pool) && !r->initialized &&
-	    (entropy_count >> ENTROPY_SHIFT) > 128)
-		has_initialized = 1;
 	if (cmpxchg(&r->entropy_count, orig, entropy_count) != orig)
 		goto retry;
 
 	if (has_initialized) {
 		r->initialized = 1;
-		wake_up_interruptible(&random_read_wait);
 		kill_fasync(&fasync, SIGIO, POLL_IN);
 	}
 
@@ -784,36 +728,13 @@
 
 	if (r == &input_pool) {
 		int entropy_bits = entropy_count >> ENTROPY_SHIFT;
-		struct entropy_store *other = &blocking_pool;
 
 		if (crng_init < 2) {
 			if (entropy_bits < 128)
 				return;
 			crng_reseed(&primary_crng, r);
-			entropy_bits = r->entropy_count >> ENTROPY_SHIFT;
+			entropy_bits = ENTROPY_BITS(r);
 		}
-
-		/* initialize the blocking pool if necessary */
-		if (entropy_bits >= random_read_wakeup_bits &&
-		    !other->initialized) {
-			schedule_work(&other->push_work);
-			return;
-		}
-
-		/* should we wake readers? */
-		if (entropy_bits >= random_read_wakeup_bits &&
-		    wq_has_sleeper(&random_read_wait)) {
-			wake_up_interruptible(&random_read_wait);
-			kill_fasync(&fasync, SIGIO, POLL_IN);
-		}
-		/* If the input pool is getting full, and the blocking
-		 * pool has room, send some entropy to the blocking
-		 * pool.
-		 */
-		if (!work_pending(&other->push_work) &&
-		    (ENTROPY_BITS(r) > 6 * r->poolinfo->poolbytes) &&
-		    (ENTROPY_BITS(other) <= 6 * other->poolinfo->poolbytes))
-			schedule_work(&other->push_work);
 	}
 }
 
@@ -885,7 +806,7 @@
 		invalidate_batched_entropy();
 		numa_crng_init();
 		crng_init = 2;
-		pr_notice("random: crng done (trusting CPU's manufacturer)\n");
+		pr_notice("crng done (trusting CPU's manufacturer)\n");
 	}
 	crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
 }
@@ -997,8 +918,7 @@
 	if (crng_init_cnt >= CRNG_INIT_CNT_THRESH) {
 		invalidate_batched_entropy();
 		crng_init = 1;
-		wake_up_interruptible(&crng_init_wait);
-		pr_notice("random: fast init done\n");
+		pr_notice("fast init done\n");
 	}
 	return 1;
 }
@@ -1265,7 +1185,7 @@
 	/*
 	 * delta is now minimum absolute delta.
 	 * Round down by 1 bit on general principles,
-	 * and limit entropy entimate to 12 bits.
+	 * and limit entropy estimate to 12 bits.
 	 */
 	credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
 }
@@ -1409,57 +1329,6 @@
  *********************************************************************/
 
 /*
- * This utility inline function is responsible for transferring entropy
- * from the primary pool to the secondary extraction pool. We make
- * sure we pull enough for a 'catastrophic reseed'.
- */
-static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes);
-static void xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
-{
-	if (!r->pull ||
-	    r->entropy_count >= (nbytes << (ENTROPY_SHIFT + 3)) ||
-	    r->entropy_count > r->poolinfo->poolfracbits)
-		return;
-
-	_xfer_secondary_pool(r, nbytes);
-}
-
-static void _xfer_secondary_pool(struct entropy_store *r, size_t nbytes)
-{
-	__u32	tmp[OUTPUT_POOL_WORDS];
-
-	int bytes = nbytes;
-
-	/* pull at least as much as a wakeup */
-	bytes = max_t(int, bytes, random_read_wakeup_bits / 8);
-	/* but never more than the buffer size */
-	bytes = min_t(int, bytes, sizeof(tmp));
-
-	trace_xfer_secondary_pool(r->name, bytes * 8, nbytes * 8,
-				  ENTROPY_BITS(r), ENTROPY_BITS(r->pull));
-	bytes = extract_entropy(r->pull, tmp, bytes,
-				random_read_wakeup_bits / 8, 0);
-	mix_pool_bytes(r, tmp, bytes);
-	credit_entropy_bits(r, bytes*8);
-}
-
-/*
- * Used as a workqueue function so that when the input pool is getting
- * full, we can "spill over" some entropy to the output pools.  That
- * way the output pools can store some of the excess entropy instead
- * of letting it go to waste.
- */
-static void push_to_pool(struct work_struct *work)
-{
-	struct entropy_store *r = container_of(work, struct entropy_store,
-					      push_work);
-	BUG_ON(!r);
-	_xfer_secondary_pool(r, random_read_wakeup_bits/8);
-	trace_push_to_pool(r->name, r->entropy_count >> ENTROPY_SHIFT,
-			   r->pull->entropy_count >> ENTROPY_SHIFT);
-}
-
-/*
  * This function decides how many bytes to actually take from the
  * given pool, and also debits the entropy count accordingly.
  */
@@ -1484,10 +1353,9 @@
 	if (ibytes < min)
 		ibytes = 0;
 
-	if (unlikely(entropy_count < 0)) {
-		pr_warn("random: negative entropy count: pool %s count %d\n",
+	if (WARN_ON(entropy_count < 0)) {
+		pr_warn("negative entropy count: pool %s count %d\n",
 			r->name, entropy_count);
-		WARN_ON(1);
 		entropy_count = 0;
 	}
 	nfrac = ibytes << (ENTROPY_SHIFT + 3);
@@ -1500,8 +1368,7 @@
 		goto retry;
 
 	trace_debit_entropy(r->name, 8 * ibytes);
-	if (ibytes &&
-	    (r->entropy_count >> ENTROPY_SHIFT) < random_write_wakeup_bits) {
+	if (ibytes && ENTROPY_BITS(r) < random_write_wakeup_bits) {
 		wake_up_interruptible(&random_write_wait);
 		kill_fasync(&fasync, SIGIO, POLL_OUT);
 	}
@@ -1622,7 +1489,6 @@
 			spin_unlock_irqrestore(&r->lock, flags);
 			trace_extract_entropy(r->name, EXTRACT_SIZE,
 					      ENTROPY_BITS(r), _RET_IP_);
-			xfer_secondary_pool(r, EXTRACT_SIZE);
 			extract_buf(r, tmp);
 			spin_lock_irqsave(&r->lock, flags);
 			memcpy(r->last_data, tmp, EXTRACT_SIZE);
@@ -1631,60 +1497,11 @@
 	}
 
 	trace_extract_entropy(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
-	xfer_secondary_pool(r, nbytes);
 	nbytes = account(r, nbytes, min, reserved);
 
 	return _extract_entropy(r, buf, nbytes, fips_enabled);
 }
 
-/*
- * This function extracts randomness from the "entropy pool", and
- * returns it in a userspace buffer.
- */
-static ssize_t extract_entropy_user(struct entropy_store *r, void __user *buf,
-				    size_t nbytes)
-{
-	ssize_t ret = 0, i;
-	__u8 tmp[EXTRACT_SIZE];
-	int large_request = (nbytes > 256);
-
-	trace_extract_entropy_user(r->name, nbytes, ENTROPY_BITS(r), _RET_IP_);
-	if (!r->initialized && r->pull) {
-		xfer_secondary_pool(r, ENTROPY_BITS(r->pull)/8);
-		if (!r->initialized)
-			return 0;
-	}
-	xfer_secondary_pool(r, nbytes);
-	nbytes = account(r, nbytes, 0, 0);
-
-	while (nbytes) {
-		if (large_request && need_resched()) {
-			if (signal_pending(current)) {
-				if (ret == 0)
-					ret = -ERESTARTSYS;
-				break;
-			}
-			schedule();
-		}
-
-		extract_buf(r, tmp);
-		i = min_t(int, nbytes, EXTRACT_SIZE);
-		if (copy_to_user(buf, tmp, i)) {
-			ret = -EFAULT;
-			break;
-		}
-
-		nbytes -= i;
-		buf += i;
-		ret += i;
-	}
-
-	/* Wipe data just returned from memory */
-	memzero_explicit(tmp, sizeof(tmp));
-
-	return ret;
-}
-
 #define warn_unseeded_randomness(previous) \
 	_warn_unseeded_randomness(__func__, (void *) _RET_IP_, (previous))
 
@@ -1951,7 +1768,6 @@
 	ktime_t now = ktime_get_real();
 	unsigned long rv;
 
-	r->last_pulled = jiffies;
 	mix_pool_bytes(r, &now, sizeof(now));
 	for (i = r->poolinfo->poolbytes; i > 0; i -= sizeof(rv)) {
 		if (!arch_get_random_seed_long(&rv) &&
@@ -1975,7 +1791,6 @@
 int __init rand_initialize(void)
 {
 	init_std_data(&input_pool);
-	init_std_data(&blocking_pool);
 	if (crng_need_final_init)
 		crng_finalize_init(&primary_crng);
 	crng_initialize(&primary_crng);
@@ -2005,40 +1820,15 @@
 #endif
 
 static ssize_t
-_random_read(int nonblock, char __user *buf, size_t nbytes)
+urandom_read_nowarn(struct file *file, char __user *buf, size_t nbytes,
+		    loff_t *ppos)
 {
-	ssize_t n;
+	int ret;
 
-	if (nbytes == 0)
-		return 0;
-
-	nbytes = min_t(size_t, nbytes, SEC_XFER_SIZE);
-	while (1) {
-		n = extract_entropy_user(&blocking_pool, buf, nbytes);
-		if (n < 0)
-			return n;
-		trace_random_read(n*8, (nbytes-n)*8,
-				  ENTROPY_BITS(&blocking_pool),
-				  ENTROPY_BITS(&input_pool));
-		if (n > 0)
-			return n;
-
-		/* Pool is (near) empty.  Maybe wait and retry. */
-		if (nonblock)
-			return -EAGAIN;
-
-		wait_event_interruptible(random_read_wait,
-		    blocking_pool.initialized &&
-		    (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits));
-		if (signal_pending(current))
-			return -ERESTARTSYS;
-	}
-}
-
-static ssize_t
-random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
-{
-	return _random_read(file->f_flags & O_NONBLOCK, buf, nbytes);
+	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
+	ret = extract_crng_user(buf, nbytes);
+	trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool));
+	return ret;
 }
 
 static ssize_t
@@ -2046,22 +1836,29 @@
 {
 	unsigned long flags;
 	static int maxwarn = 10;
-	int ret;
 
 	if (!crng_ready() && maxwarn > 0) {
 		maxwarn--;
 		if (__ratelimit(&urandom_warning))
-			printk(KERN_NOTICE "random: %s: uninitialized "
-			       "urandom read (%zd bytes read)\n",
-			       current->comm, nbytes);
+			pr_notice("%s: uninitialized urandom read (%zd bytes read)\n",
+				  current->comm, nbytes);
 		spin_lock_irqsave(&primary_crng.lock, flags);
 		crng_init_cnt = 0;
 		spin_unlock_irqrestore(&primary_crng.lock, flags);
 	}
-	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
-	ret = extract_crng_user(buf, nbytes);
-	trace_urandom_read(8 * nbytes, 0, ENTROPY_BITS(&input_pool));
-	return ret;
+
+	return urandom_read_nowarn(file, buf, nbytes, ppos);
+}
+
+static ssize_t
+random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
+{
+	int ret;
+
+	ret = wait_for_random_bytes();
+	if (ret != 0)
+		return ret;
+	return urandom_read_nowarn(file, buf, nbytes, ppos);
 }
 
 static __poll_t
@@ -2069,10 +1866,10 @@
 {
 	__poll_t mask;
 
-	poll_wait(file, &random_read_wait, wait);
+	poll_wait(file, &crng_init_wait, wait);
 	poll_wait(file, &random_write_wait, wait);
 	mask = 0;
-	if (ENTROPY_BITS(&input_pool) >= random_read_wakeup_bits)
+	if (crng_ready())
 		mask |= EPOLLIN | EPOLLRDNORM;
 	if (ENTROPY_BITS(&input_pool) < random_write_wakeup_bits)
 		mask |= EPOLLOUT | EPOLLWRNORM;
@@ -2163,7 +1960,6 @@
 		if (!capable(CAP_SYS_ADMIN))
 			return -EPERM;
 		input_pool.entropy_count = 0;
-		blocking_pool.entropy_count = 0;
 		return 0;
 	case RNDRESEEDCRNG:
 		if (!capable(CAP_SYS_ADMIN))
@@ -2205,23 +2001,27 @@
 {
 	int ret;
 
-	if (flags & ~(GRND_NONBLOCK|GRND_RANDOM))
+	if (flags & ~(GRND_NONBLOCK|GRND_RANDOM|GRND_INSECURE))
+		return -EINVAL;
+
+	/*
+	 * Requesting insecure and blocking randomness at the same time makes
+	 * no sense.
+	 */
+	if ((flags & (GRND_INSECURE|GRND_RANDOM)) == (GRND_INSECURE|GRND_RANDOM))
 		return -EINVAL;
 
 	if (count > INT_MAX)
 		count = INT_MAX;
 
-	if (flags & GRND_RANDOM)
-		return _random_read(flags & GRND_NONBLOCK, buf, count);
-
-	if (!crng_ready()) {
+	if (!(flags & GRND_INSECURE) && !crng_ready()) {
 		if (flags & GRND_NONBLOCK)
 			return -EAGAIN;
 		ret = wait_for_random_bytes();
 		if (unlikely(ret))
 			return ret;
 	}
-	return urandom_read(NULL, buf, count, NULL);
+	return urandom_read_nowarn(NULL, buf, count, NULL);
 }
 
 /********************************************************************
@@ -2234,8 +2034,7 @@
 
 #include <linux/sysctl.h>
 
-static int min_read_thresh = 8, min_write_thresh;
-static int max_read_thresh = OUTPUT_POOL_WORDS * 32;
+static int min_write_thresh;
 static int max_write_thresh = INPUT_POOL_WORDS * 32;
 static int random_min_urandom_seed = 60;
 static char sysctl_bootid[16];
@@ -2311,15 +2110,6 @@
 		.data		= &input_pool.entropy_count,
 	},
 	{
-		.procname	= "read_wakeup_threshold",
-		.data		= &random_read_wakeup_bits,
-		.maxlen		= sizeof(int),
-		.mode		= 0644,
-		.proc_handler	= proc_dointvec_minmax,
-		.extra1		= &min_read_thresh,
-		.extra2		= &max_read_thresh,
-	},
-	{
 		.procname	= "write_wakeup_threshold",
 		.data		= &random_write_wakeup_bits,
 		.maxlen		= sizeof(int),
diff --git a/drivers/clk/clk-composite.c b/drivers/clk/clk-composite.c
index 4f13a68..bdc1482 100644
--- a/drivers/clk/clk-composite.c
+++ b/drivers/clk/clk-composite.c
@@ -328,6 +328,7 @@
 		return ERR_CAST(hw);
 	return hw->clk;
 }
+EXPORT_SYMBOL_GPL(clk_register_composite);
 
 void clk_unregister_composite(struct clk *clk)
 {
diff --git a/drivers/clk/clk-pwm.c b/drivers/clk/clk-pwm.c
index 87fe0b0e..7b1f7a0 100644
--- a/drivers/clk/clk-pwm.c
+++ b/drivers/clk/clk-pwm.c
@@ -89,7 +89,7 @@
 	}
 
 	if (of_property_read_u32(node, "clock-frequency", &clk_pwm->fixed_rate))
-		clk_pwm->fixed_rate = NSEC_PER_SEC / pargs.period;
+		clk_pwm->fixed_rate = div64_u64(NSEC_PER_SEC, pargs.period);
 
 	if (pargs.period != NSEC_PER_SEC / clk_pwm->fixed_rate &&
 	    pargs.period != DIV_ROUND_UP(NSEC_PER_SEC, clk_pwm->fixed_rate)) {
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index e4e1b4e..a922610 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -72,6 +72,8 @@
 	unsigned long		flags;
 	bool			orphan;
 	bool			rpm_enabled;
+	bool			need_sync;
+	bool			boot_enabled;
 	unsigned int		enable_count;
 	unsigned int		prepare_count;
 	unsigned int		protect_count;
@@ -1200,6 +1202,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;
+
 	if (core->prepare_count)
 		return;
 
@@ -1231,6 +1237,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;
+
 	if (core->flags & CLK_OPS_PARENT_ENABLE)
 		clk_core_prepare_enable(core->parent);
 
@@ -1304,6 +1314,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)
 {
@@ -1678,6 +1720,33 @@
 	return i;
 }
 
+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.
  */
@@ -1984,6 +2053,13 @@
 			fail_clk = core;
 	}
 
+	if (core->ops->pre_rate_change) {
+		ret = core->ops->pre_rate_change(core->hw, core->rate,
+						 core->new_rate);
+		if (ret)
+			fail_clk = core;
+	}
+
 	hlist_for_each_entry(child, &core->children, child_node) {
 		/* Skip children who will be reparented to another clock */
 		if (child->new_parent && child->new_parent != core)
@@ -2086,6 +2162,9 @@
 	if (core->flags & CLK_RECALC_NEW_RATES)
 		(void)clk_calc_new_rates(core, core->new_rate);
 
+	if (core->ops->post_rate_change)
+		core->ops->post_rate_change(core->hw, old_rate, core->rate);
+
 	/*
 	 * Use safe iteration, as change_rate can actually swap parents
 	 * for certain clock types.
@@ -3278,6 +3357,7 @@
 			__clk_set_parent_after(orphan, parent, NULL);
 			__clk_recalc_accuracies(orphan);
 			__clk_recalc_rates(orphan, 0);
+			__clk_core_update_orphan_hold_state(orphan);
 		}
 	}
 }
@@ -3432,6 +3512,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
@@ -3453,9 +3535,9 @@
 		}
 	}
 
+	clk_core_hold_state(core);
 	clk_core_reparent_orphans_nolock();
 
-
 	kref_init(&core->ref);
 out:
 	clk_pm_runtime_put(core);
diff --git a/drivers/clk/qcom/dispcc-sdm845.c b/drivers/clk/qcom/dispcc-sdm845.c
index 0cc4909..a84f170 100644
--- a/drivers/clk/qcom/dispcc-sdm845.c
+++ b/drivers/clk/qcom/dispcc-sdm845.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
  */
 
+#include <linux/clk.h>
 #include <linux/clk-provider.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
@@ -666,6 +667,7 @@
 	.driver		= {
 		.name	= "disp_cc-sdm845",
 		.of_match_table = disp_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gcc-msm8998.c b/drivers/clk/qcom/gcc-msm8998.c
index 752f267..82261ae 100644
--- a/drivers/clk/qcom/gcc-msm8998.c
+++ b/drivers/clk/qcom/gcc-msm8998.c
@@ -3006,6 +3006,7 @@
 	.driver		= {
 		.name	= "gcc-msm8998",
 		.of_match_table = gcc_msm8998_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gcc-sdm845.c b/drivers/clk/qcom/gcc-sdm845.c
index 56d22dd..9785bf2 100644
--- a/drivers/clk/qcom/gcc-sdm845.c
+++ b/drivers/clk/qcom/gcc-sdm845.c
@@ -3628,6 +3628,7 @@
 	.driver		= {
 		.name	= "gcc-sdm845",
 		.of_match_table = gcc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/gpucc-sdm845.c b/drivers/clk/qcom/gpucc-sdm845.c
index e40efba1..9aa30cd 100644
--- a/drivers/clk/qcom/gpucc-sdm845.c
+++ b/drivers/clk/qcom/gpucc-sdm845.c
@@ -233,6 +233,7 @@
 	.driver = {
 		.name = "sdm845-gpucc",
 		.of_match_table = gpu_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/qcom/videocc-sdm845.c b/drivers/clk/qcom/videocc-sdm845.c
index 5d6a772..5822252 100644
--- a/drivers/clk/qcom/videocc-sdm845.c
+++ b/drivers/clk/qcom/videocc-sdm845.c
@@ -338,6 +338,7 @@
 	.driver		= {
 		.name	= "sdm845-videocc",
 		.of_match_table = video_cc_sdm845_match_table,
+		.sync_state = clk_sync_state,
 	},
 };
 
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
index cdf3330..ce5f584 100644
--- a/drivers/clk/sunxi-ng/Kconfig
+++ b/drivers/clk/sunxi-ng/Kconfig
@@ -17,6 +17,16 @@
 	default ARM64 && ARCH_SUNXI
 	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
 
+config SUN50I_A100_CCU
+	bool "Support for the Allwinner A100 CCU"
+	default ARM64 && ARCH_SUNXI
+	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
+
+config SUN50I_A100_R_CCU
+	bool "Support for the Allwinner A100 PRCM CCU"
+	default ARM64 && ARCH_SUNXI
+	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
+
 config SUN50I_H6_CCU
 	bool "Support for the Allwinner H6 CCU"
 	default ARM64 && ARCH_SUNXI
diff --git a/drivers/clk/sunxi-ng/Makefile b/drivers/clk/sunxi-ng/Makefile
index 4c7bee8..3eb5cff 100644
--- a/drivers/clk/sunxi-ng/Makefile
+++ b/drivers/clk/sunxi-ng/Makefile
@@ -23,6 +23,8 @@
 # SoC support
 obj-$(CONFIG_SUNIV_F1C100S_CCU)	+= ccu-suniv-f1c100s.o
 obj-$(CONFIG_SUN50I_A64_CCU)	+= ccu-sun50i-a64.o
+obj-$(CONFIG_SUN50I_A100_CCU)	+= ccu-sun50i-a100.o
+obj-$(CONFIG_SUN50I_A100_R_CCU)	+= ccu-sun50i-a100-r.o
 obj-$(CONFIG_SUN50I_H6_CCU)	+= ccu-sun50i-h6.o
 obj-$(CONFIG_SUN50I_H6_R_CCU)	+= ccu-sun50i-h6-r.o
 obj-$(CONFIG_SUN4I_A10_CCU)	+= ccu-sun4i-a10.o
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c
new file mode 100644
index 0000000..a56142b
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.c
@@ -0,0 +1,214 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_nm.h"
+
+#include "ccu-sun50i-a100-r.h"
+
+static const char * const cpus_r_apb2_parents[] = { "dcxo24M", "osc32k",
+						     "iosc", "pll-periph0" };
+static const struct ccu_mux_var_prediv cpus_r_apb2_predivs[] = {
+	{ .index = 3, .shift = 0, .width = 5 },
+};
+
+static struct ccu_div r_cpus_clk = {
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+
+	.mux		= {
+		.shift	= 24,
+		.width	= 2,
+
+		.var_predivs	= cpus_r_apb2_predivs,
+		.n_var_predivs	= ARRAY_SIZE(cpus_r_apb2_predivs),
+	},
+
+	.common		= {
+		.reg		= 0x000,
+		.features	= CCU_FEATURE_VARIABLE_PREDIV,
+		.hw.init	= CLK_HW_INIT_PARENTS("cpus",
+						      cpus_r_apb2_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static CLK_FIXED_FACTOR_HW(r_ahb_clk, "r-ahb", &r_cpus_clk.common.hw, 1, 1, 0);
+
+static struct ccu_div r_apb1_clk = {
+	.div		= _SUNXI_CCU_DIV(0, 2),
+
+	.common		= {
+		.reg		= 0x00c,
+		.hw.init	= CLK_HW_INIT("r-apb1",
+					      "r-ahb",
+					      &ccu_div_ops,
+					      0),
+	},
+};
+
+static struct ccu_div r_apb2_clk = {
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+
+	.mux		= {
+		.shift	= 24,
+		.width	= 2,
+
+		.var_predivs	= cpus_r_apb2_predivs,
+		.n_var_predivs	= ARRAY_SIZE(cpus_r_apb2_predivs),
+	},
+
+	.common		= {
+		.reg		= 0x010,
+		.features	= CCU_FEATURE_VARIABLE_PREDIV,
+		.hw.init	= CLK_HW_INIT_PARENTS("r-apb2",
+						      cpus_r_apb2_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static const struct clk_parent_data clk_parent_r_apb1[] = {
+	{ .hw = &r_apb1_clk.common.hw },
+};
+
+static const struct clk_parent_data clk_parent_r_apb2[] = {
+	{ .hw = &r_apb2_clk.common.hw },
+};
+
+static SUNXI_CCU_GATE_DATA(r_apb1_timer_clk, "r-apb1-timer", clk_parent_r_apb1,
+			   0x11c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_twd_clk, "r-apb1-twd", clk_parent_r_apb1,
+			   0x12c, BIT(0), 0);
+
+static const char * const r_apb1_pwm_clk_parents[] = { "dcxo24M", "osc32k",
+						       "iosc" };
+static SUNXI_CCU_MUX(r_apb1_pwm_clk, "r-apb1-pwm", r_apb1_pwm_clk_parents,
+		     0x130, 24, 2, 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_bus_pwm_clk, "r-apb1-bus-pwm",
+			   clk_parent_r_apb1, 0x13c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_ppu_clk, "r-apb1-ppu", clk_parent_r_apb1,
+			   0x17c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_uart_clk, "r-apb2-uart", clk_parent_r_apb2,
+			   0x18c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_i2c0_clk, "r-apb2-i2c0", clk_parent_r_apb2,
+			   0x19c, BIT(0), 0);
+
+static SUNXI_CCU_GATE_DATA(r_apb2_i2c1_clk, "r-apb2-i2c1", clk_parent_r_apb2,
+			   0x19c, BIT(1), 0);
+
+static const char * const r_apb1_ir_rx_parents[] = { "osc32k", "dcxo24M" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(r_apb1_ir_rx_clk, "r-apb1-ir-rx",
+				  r_apb1_ir_rx_parents, 0x1c0,
+				  0, 5,		/* M */
+				  8, 2,		/* P */
+				  24, 1,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE_DATA(r_apb1_bus_ir_rx_clk, "r-apb1-bus-ir-rx",
+			   clk_parent_r_apb1, 0x1cc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(r_ahb_bus_rtc_clk, "r-ahb-rtc", "r-ahb",
+		      0x20c, BIT(0), 0);
+
+static struct ccu_common *sun50i_a100_r_ccu_clks[] = {
+	&r_cpus_clk.common,
+	&r_apb1_clk.common,
+	&r_apb2_clk.common,
+	&r_apb1_timer_clk.common,
+	&r_apb1_twd_clk.common,
+	&r_apb1_pwm_clk.common,
+	&r_apb1_bus_pwm_clk.common,
+	&r_apb1_ppu_clk.common,
+	&r_apb2_uart_clk.common,
+	&r_apb2_i2c0_clk.common,
+	&r_apb2_i2c1_clk.common,
+	&r_apb1_ir_rx_clk.common,
+	&r_apb1_bus_ir_rx_clk.common,
+	&r_ahb_bus_rtc_clk.common,
+};
+
+static struct clk_hw_onecell_data sun50i_a100_r_hw_clks = {
+	.hws	= {
+		[CLK_R_CPUS]		= &r_cpus_clk.common.hw,
+		[CLK_R_AHB]		= &r_ahb_clk.hw,
+		[CLK_R_APB1]		= &r_apb1_clk.common.hw,
+		[CLK_R_APB2]		= &r_apb2_clk.common.hw,
+		[CLK_R_APB1_TIMER]	= &r_apb1_timer_clk.common.hw,
+		[CLK_R_APB1_TWD]	= &r_apb1_twd_clk.common.hw,
+		[CLK_R_APB1_PWM]	= &r_apb1_pwm_clk.common.hw,
+		[CLK_R_APB1_BUS_PWM]	= &r_apb1_bus_pwm_clk.common.hw,
+		[CLK_R_APB1_PPU]	= &r_apb1_ppu_clk.common.hw,
+		[CLK_R_APB2_UART]	= &r_apb2_uart_clk.common.hw,
+		[CLK_R_APB2_I2C0]	= &r_apb2_i2c0_clk.common.hw,
+		[CLK_R_APB2_I2C1]	= &r_apb2_i2c1_clk.common.hw,
+		[CLK_R_APB1_IR]		= &r_apb1_ir_rx_clk.common.hw,
+		[CLK_R_APB1_BUS_IR]	= &r_apb1_bus_ir_rx_clk.common.hw,
+		[CLK_R_AHB_BUS_RTC]	= &r_ahb_bus_rtc_clk.common.hw,
+	},
+	.num	= CLK_NUMBER,
+};
+
+static struct ccu_reset_map sun50i_a100_r_ccu_resets[] = {
+	[RST_R_APB1_TIMER]	=  { 0x11c, BIT(16) },
+	[RST_R_APB1_BUS_PWM]	=  { 0x13c, BIT(16) },
+	[RST_R_APB1_PPU]	=  { 0x17c, BIT(16) },
+	[RST_R_APB2_UART]	=  { 0x18c, BIT(16) },
+	[RST_R_APB2_I2C0]	=  { 0x19c, BIT(16) },
+	[RST_R_APB2_I2C1]	=  { 0x19c, BIT(17) },
+	[RST_R_APB1_BUS_IR]	=  { 0x1cc, BIT(16) },
+	[RST_R_AHB_BUS_RTC]	=  { 0x20c, BIT(16) },
+};
+
+static const struct sunxi_ccu_desc sun50i_a100_r_ccu_desc = {
+	.ccu_clks	= sun50i_a100_r_ccu_clks,
+	.num_ccu_clks	= ARRAY_SIZE(sun50i_a100_r_ccu_clks),
+
+	.hw_clks	= &sun50i_a100_r_hw_clks,
+
+	.resets		= sun50i_a100_r_ccu_resets,
+	.num_resets	= ARRAY_SIZE(sun50i_a100_r_ccu_resets),
+};
+
+static int sun50i_a100_r_ccu_probe(struct platform_device *pdev)
+{
+	void __iomem *reg;
+
+	reg = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(reg))
+		return PTR_ERR(reg);
+
+	return sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a100_r_ccu_desc);
+}
+
+static const struct of_device_id sun50i_a100_r_ccu_ids[] = {
+	{ .compatible = "allwinner,sun50i-a100-r-ccu" },
+	{ }
+};
+
+static struct platform_driver sun50i_a100_r_ccu_driver = {
+	.probe	= sun50i_a100_r_ccu_probe,
+	.driver	= {
+		.name	= "sun50i-a100-r-ccu",
+		.of_match_table	= sun50i_a100_r_ccu_ids,
+	},
+};
+module_platform_driver(sun50i_a100_r_ccu_driver);
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h
new file mode 100644
index 0000000..3a8f187
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100-r.h
@@ -0,0 +1,21 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _CCU_SUN50I_A100_R_H
+#define _CCU_SUN50I_A100_R_H
+
+#include <dt-bindings/clock/sun50i-a100-r-ccu.h>
+#include <dt-bindings/reset/sun50i-a100-r-ccu.h>
+
+#define CLK_R_CPUS		0
+#define CLK_R_AHB		1
+
+/* exported except APB1 for R_PIO */
+
+#define CLK_R_APB2		3
+
+#define CLK_NUMBER	(CLK_R_AHB_BUS_RTC + 1)
+
+#endif /* _CCU_SUN50I_A100_R_H */
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100.c b/drivers/clk/sunxi-ng/ccu-sun50i-a100.c
new file mode 100644
index 0000000..81b48c7
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100.c
@@ -0,0 +1,1276 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_mult.h"
+#include "ccu_nk.h"
+#include "ccu_nkm.h"
+#include "ccu_nkmp.h"
+#include "ccu_nm.h"
+
+#include "ccu-sun50i-a100.h"
+
+#define SUN50I_A100_PLL_SDM_ENABLE		BIT(24)
+#define SUN50I_A100_PLL_OUTPUT_ENABLE		BIT(27)
+#define SUN50I_A100_PLL_LOCK			BIT(28)
+#define SUN50I_A100_PLL_LOCK_ENABLE		BIT(29)
+#define SUN50I_A100_PLL_ENABLE			BIT(31)
+
+#define SUN50I_A100_PLL_PERIPH1_PATTERN0	0xd1303333
+
+/*
+ * The CPU PLL is actually NP clock, with P being /1, /2 or /4. However
+ * P should only be used for output frequencies lower than 288 MHz.
+ *
+ * For now we can just model it as a multiplier clock, and force P to /1.
+ *
+ * The M factor is present in the register's description, but not in the
+ * frequency formula, and it's documented as "M is only used for backdoor
+ * testing", so it's not modelled and then force to 0.
+ */
+#define SUN50I_A100_PLL_CPUX_REG		0x000
+static struct ccu_mult pll_cpux_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.mult		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.common		= {
+		.reg		= 0x000,
+		.hw.init	= CLK_HW_INIT("pll-cpux", "dcxo24M",
+					      &ccu_mult_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/* Some PLLs are input * N / div1 / P. Model them as NKMP with no K */
+#define SUN50I_A100_PLL_DDR0_REG		0x010
+static struct ccu_nkmp pll_ddr0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x010,
+		.hw.init	= CLK_HW_INIT("pll-ddr0", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE |
+					      CLK_IS_CRITICAL),
+	},
+};
+
+#define SUN50I_A100_PLL_PERIPH0_REG	0x020
+static struct ccu_nkmp pll_periph0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.fixed_post_div	= 2,
+	.common		= {
+		.reg		= 0x020,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-periph0", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_PERIPH1_REG	0x028
+static struct ccu_nkmp pll_periph1_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.fixed_post_div	= 2,
+	.common		= {
+		.reg		= 0x028,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-periph1", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+#define SUN50I_A100_PLL_PERIPH1_PATTERN0_REG	0x128
+
+#define SUN50I_A100_PLL_GPU_REG		0x030
+static struct ccu_nkmp pll_gpu_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x030,
+		.hw.init	= CLK_HW_INIT("pll-gpu", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * For Video PLLs, the output divider is described as "used for testing"
+ * in the user manual. So it's not modelled and forced to 0.
+ */
+#define SUN50I_A100_PLL_VIDEO0_REG	0x040
+static struct ccu_nm pll_video0_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x040,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video0", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO1_REG	0x048
+static struct ccu_nm pll_video1_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x048,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video1", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO2_REG	0x050
+static struct ccu_nm pll_video2_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x050,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video2", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VE_REG		0x058
+static struct ccu_nkmp pll_ve_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.p		= _SUNXI_CCU_DIV(0, 1), /* output divider */
+	.common		= {
+		.reg		= 0x058,
+		.hw.init	= CLK_HW_INIT("pll-ve", "dcxo24M",
+					      &ccu_nkmp_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * The COM PLL has m0 dividers in addition to the usual N, M
+ * factors. Since we only need 1 frequencies from this PLL: 45.1584 MHz,
+ * ignore it for now.
+ */
+#define SUN50I_A100_PLL_COM_REG		0x060
+static struct ccu_sdm_setting pll_com_sdm_table[] = {
+	{ .rate = 451584000, .pattern = 0xc0014396, .m = 2, .n = 37 },
+};
+
+static struct ccu_nm pll_com_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(0, 1),
+	.sdm		= _SUNXI_CCU_SDM(pll_com_sdm_table, BIT(24),
+					 0x160, BIT(31)),
+	.common		= {
+		.reg		= 0x060,
+		.features	= CCU_FEATURE_SIGMA_DELTA_MOD,
+		.hw.init	= CLK_HW_INIT("pll-com", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+#define SUN50I_A100_PLL_VIDEO3_REG	0x068
+static struct ccu_nm pll_video3_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(1, 1), /* input divider */
+	.fixed_post_div	= 4,
+	.common		= {
+		.reg		= 0x068,
+		.features	= CCU_FEATURE_FIXED_POSTDIV,
+		.hw.init	= CLK_HW_INIT("pll-video3", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+/*
+ * The Audio PLL has m0, m1 dividers in addition to the usual N, M
+ * factors. Since we only need 4 frequencies from this PLL: 22.5792 MHz,
+ * 24.576 MHz, 90.3168MHz and 98.304MHz ignore them for now.
+ * Enforce the default for them, which is m0 = 1, m1 = 0.
+ */
+#define SUN50I_A100_PLL_AUDIO_REG		0x078
+static struct ccu_sdm_setting pll_audio_sdm_table[] = {
+	{ .rate = 45158400, .pattern = 0xc001bcd3, .m = 18, .n = 33 },
+	{ .rate = 49152000, .pattern = 0xc001eb85, .m = 20, .n = 40 },
+	{ .rate = 180633600, .pattern = 0xc001288d, .m = 3, .n = 22 },
+	{ .rate = 196608000, .pattern = 0xc001eb85, .m = 5, .n = 40 },
+};
+
+static struct ccu_nm pll_audio_clk = {
+	.enable		= SUN50I_A100_PLL_OUTPUT_ENABLE,
+	.lock		= SUN50I_A100_PLL_LOCK,
+	.n		= _SUNXI_CCU_MULT_MIN(8, 8, 12),
+	.m		= _SUNXI_CCU_DIV(16, 6),
+	.fixed_post_div	= 2,
+	.sdm		= _SUNXI_CCU_SDM(pll_audio_sdm_table, BIT(24),
+					 0x178, BIT(31)),
+	.common		= {
+		.reg		= 0x078,
+		.features	= CCU_FEATURE_FIXED_POSTDIV |
+				  CCU_FEATURE_SIGMA_DELTA_MOD,
+		.hw.init	= CLK_HW_INIT("pll-audio", "dcxo24M",
+					      &ccu_nm_ops,
+					      CLK_SET_RATE_UNGATE),
+	},
+};
+
+static const char * const cpux_parents[] = { "dcxo24M", "osc32k",
+					     "iosc", "pll-cpux",
+					      "pll-periph0" };
+static SUNXI_CCU_MUX(cpux_clk, "cpux", cpux_parents,
+		     0x500, 24, 3, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL);
+static SUNXI_CCU_M(axi_clk, "axi", "cpux", 0x500, 0, 2, 0);
+static SUNXI_CCU_M(cpux_apb_clk, "cpux-apb", "cpux", 0x500, 8, 2, 0);
+
+static const char * const psi_ahb1_ahb2_parents[] = { "dcxo24M", "osc32k",
+						      "iosc", "pll-periph0",
+						      "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX(psi_ahb1_ahb2_clk, "psi-ahb1-ahb2",
+			     psi_ahb1_ahb2_parents, 0x510,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static const char * const ahb3_apb1_apb2_parents[] = { "dcxo24M", "osc32k",
+						       "psi-ahb1-ahb2",
+						       "pll-periph0",
+						       "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX(ahb3_clk, "ahb3", ahb3_apb1_apb2_parents, 0x51c,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static SUNXI_CCU_MP_WITH_MUX(apb1_clk, "apb1", ahb3_apb1_apb2_parents, 0x520,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static SUNXI_CCU_MP_WITH_MUX(apb2_clk, "apb2", ahb3_apb1_apb2_parents, 0x524,
+			     0, 2,	/* M */
+			     8, 2,	/* P */
+			     24, 3,	/* mux */
+			     0);
+
+static const char * const mbus_parents[] = { "dcxo24M", "pll-ddr0",
+					     "pll-periph0",
+					     "pll-periph0-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(mbus_clk, "mbus", mbus_parents, 0x540,
+				 0, 3,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_IS_CRITICAL);
+
+static const char * const de_parents[] = { "pll-com", "pll-periph0-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de0", de_parents, 0x600,
+				 0, 4,		/* M */
+				 24, 1,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(bus_de_clk, "bus-de", "psi-ahb1-ahb2",
+		      0x60c, BIT(0), 0);
+
+static const char * const g2d_parents[] = { "pll-com", "pll-periph0-2x",
+					     "pll-video0-2x", "pll-video1-2x",
+					     "pll-video2-2x"};
+static SUNXI_CCU_M_WITH_MUX_GATE(g2d_clk, "g2d",
+				 g2d_parents,
+				 0x630,
+				 0, 4,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_g2d_clk, "bus-g2d", "psi-ahb1-ahb2",
+		      0x63c, BIT(0), 0);
+
+static const char * const gpu_parents[] = { "pll-gpu" };
+static SUNXI_CCU_M_WITH_MUX_GATE(gpu_clk, "gpu", gpu_parents, 0x670,
+				       0, 2,	/* M */
+				       24, 1,	/* mux */
+				       BIT(31),	/* gate */
+				       0);
+
+static SUNXI_CCU_GATE(bus_gpu_clk, "bus-gpu", "psi-ahb1-ahb2",
+		      0x67c, BIT(0), 0);
+
+static const char * const ce_parents[] = { "dcxo24M", "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ce_clk, "ce", ce_parents, 0x680,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 1,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ce_clk, "bus-ce", "psi-ahb1-ahb2",
+		      0x68c, BIT(0), 0);
+
+static const char * const ve_parents[] = { "pll-ve" };
+static SUNXI_CCU_M_WITH_MUX_GATE(ve_clk, "ve", ve_parents, 0x690,
+				 0, 3,		/* M */
+				 24, 1,		/* mux */
+				 BIT(31),	/* gate */
+				 CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(bus_ve_clk, "bus-ve", "psi-ahb1-ahb2",
+		      0x69c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dma_clk, "bus-dma", "psi-ahb1-ahb2",
+		      0x70c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_msgbox_clk, "bus-msgbox", "psi-ahb1-ahb2",
+		      0x71c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_spinlock_clk, "bus-spinlock", "psi-ahb1-ahb2",
+		      0x72c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_hstimer_clk, "bus-hstimer", "psi-ahb1-ahb2",
+		      0x73c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(avs_clk, "avs", "dcxo24M", 0x740, BIT(31), 0);
+
+static SUNXI_CCU_GATE(bus_dbg_clk, "bus-dbg", "psi-ahb1-ahb2",
+		      0x78c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_psi_clk, "bus-psi", "psi-ahb1-ahb2",
+		      0x79c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_pwm_clk, "bus-pwm", "apb1", 0x7ac, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_iommu_clk, "bus-iommu", "apb1", 0x7bc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(mbus_dma_clk, "mbus-dma", "mbus",
+		      0x804, BIT(0), 0);
+static SUNXI_CCU_GATE(mbus_ve_clk, "mbus-ve", "mbus",
+		      0x804, BIT(1), 0);
+static SUNXI_CCU_GATE(mbus_ce_clk, "mbus-ce", "mbus",
+		      0x804, BIT(2), 0);
+static SUNXI_CCU_GATE(mbus_nand_clk, "mbus-nand", "mbus",
+		      0x804, BIT(5), 0);
+static SUNXI_CCU_GATE(mbus_csi_clk, "mbus-csi", "mbus",
+		      0x804, BIT(8), 0);
+static SUNXI_CCU_GATE(mbus_isp_clk, "mbus-isp", "mbus",
+		      0x804, BIT(9), 0);
+static SUNXI_CCU_GATE(mbus_g2d_clk, "mbus-g2d", "mbus",
+		      0x804, BIT(10), 0);
+
+static SUNXI_CCU_GATE(bus_dram_clk, "bus-dram", "psi-ahb1-ahb2",
+		      0x80c, BIT(0), CLK_IS_CRITICAL);
+
+static const char * const nand_spi_parents[] = { "dcxo24M",
+						 "pll-periph0",
+						 "pll-periph1",
+						 "pll-periph0-2x",
+						 "pll-periph1-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand0_clk, "nand0", nand_spi_parents, 0x810,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand1_clk, "nand1", nand_spi_parents, 0x814,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_nand_clk, "bus-nand", "ahb3", 0x82c, BIT(0), 0);
+
+static const char * const mmc_parents[] = { "dcxo24M", "pll-periph0-2x",
+					    "pll-periph1-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc0_clk, "mmc0", mmc_parents, 0x830,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc1_clk, "mmc1", mmc_parents, 0x834,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE_POSTDIV(mmc2_clk, "mmc2", mmc_parents, 0x838,
+					  0, 4,		/* M */
+					  8, 2,		/* P */
+					  24, 2,	/* mux */
+					  BIT(31),	/* gate */
+					  2,		/* post-div */
+					  CLK_SET_RATE_NO_REPARENT);
+
+static SUNXI_CCU_GATE(bus_mmc0_clk, "bus-mmc0", "ahb3", 0x84c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_mmc1_clk, "bus-mmc1", "ahb3", 0x84c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_mmc2_clk, "bus-mmc2", "ahb3", 0x84c, BIT(2), 0);
+
+static SUNXI_CCU_GATE(bus_uart0_clk, "bus-uart0", "apb2", 0x90c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_uart1_clk, "bus-uart1", "apb2", 0x90c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_uart2_clk, "bus-uart2", "apb2", 0x90c, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_uart3_clk, "bus-uart3", "apb2", 0x90c, BIT(3), 0);
+static SUNXI_CCU_GATE(bus_uart4_clk, "bus-uart4", "apb2", 0x90c, BIT(4), 0);
+
+static SUNXI_CCU_GATE(bus_i2c0_clk, "bus-i2c0", "apb2", 0x91c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_i2c1_clk, "bus-i2c1", "apb2", 0x91c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_i2c2_clk, "bus-i2c2", "apb2", 0x91c, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_i2c3_clk, "bus-i2c3", "apb2", 0x91c, BIT(3), 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi0_clk, "spi0", nand_spi_parents, 0x940,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", nand_spi_parents, 0x944,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi2_clk, "spi2", nand_spi_parents, 0x948,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_spi0_clk, "bus-spi0", "ahb3", 0x96c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_spi1_clk, "bus-spi1", "ahb3", 0x96c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_spi2_clk, "bus-spi2", "ahb3", 0x96c, BIT(2), 0);
+
+static SUNXI_CCU_GATE(emac_25m_clk, "emac-25m", "ahb3", 0x970,
+		      BIT(31) | BIT(30), 0);
+
+static SUNXI_CCU_GATE(bus_emac_clk, "bus-emac", "ahb3", 0x97c, BIT(0), 0);
+
+static const char * const ir_parents[] = { "osc32k", "iosc",
+					   "pll-periph0", "pll-periph1" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir_rx_clk, "ir-rx", ir_parents, 0x990,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ir_rx_clk, "bus-ir-rx", "ahb3", 0x99c, BIT(0), 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir_tx_clk, "ir-tx", ir_parents, 0x9c0,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ir_tx_clk, "bus-ir-tx", "apb1", 0x9cc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_gpadc_clk, "bus-gpadc", "apb1", 0x9ec, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_ths_clk, "bus-ths", "apb1", 0x9fc, BIT(0), 0);
+
+static const char * const audio_parents[] = { "pll-audio", "pll-com-audio" };
+static struct ccu_div i2s0_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa10,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s0",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s1_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa14,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s1",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s2_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa18,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s2",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static struct ccu_div i2s3_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa1c,
+		.hw.init	= CLK_HW_INIT_PARENTS("i2s3",
+						      audio_parents,
+						      &ccu_div_ops,
+						      CLK_SET_RATE_PARENT),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_i2s0_clk, "bus-i2s0", "apb1", 0xa20, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_i2s1_clk, "bus-i2s1", "apb1", 0xa20, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_i2s2_clk, "bus-i2s2", "apb1", 0xa20, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_i2s3_clk, "bus-i2s3", "apb1", 0xa20, BIT(3), 0);
+
+static struct ccu_div spdif_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa24,
+		.hw.init	= CLK_HW_INIT_PARENTS("spdif",
+						      audio_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_spdif_clk, "bus-spdif", "apb1", 0xa2c, BIT(0), 0);
+
+static struct ccu_div dmic_clk = {
+	.enable		= BIT(31),
+	.div		= _SUNXI_CCU_DIV_FLAGS(8, 2, CLK_DIVIDER_POWER_OF_TWO),
+	.mux		= _SUNXI_CCU_MUX(24, 2),
+	.common		= {
+		.reg		= 0xa40,
+		.hw.init	= CLK_HW_INIT_PARENTS("dmic",
+						      audio_parents,
+						      &ccu_div_ops,
+						      0),
+	},
+};
+
+static SUNXI_CCU_GATE(bus_dmic_clk, "bus-dmic", "apb1", 0xa4c, BIT(0), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_dac_clk, "audio-codec-dac",
+				 audio_parents, 0xa50,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_adc_clk, "audio-codec-adc",
+				 audio_parents, 0xa54,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(audio_codec_4x_clk, "audio-codec-4x",
+				 audio_parents, 0xa58,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_audio_codec_clk, "bus-audio-codec", "apb1", 0xa5c,
+		      BIT(0), 0);
+
+/*
+ * There are OHCI 12M clock source selection bits for 2 USB 2.0 ports.
+ * We will force them to 0 (12M divided from 48M).
+ */
+#define SUN50I_A100_USB0_CLK_REG		0xa70
+#define SUN50I_A100_USB1_CLK_REG		0xa74
+
+static SUNXI_CCU_GATE(usb_ohci0_clk, "usb-ohci0", "osc12M", 0xa70, BIT(31), 0);
+static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "dcxo24M", 0xa70, BIT(29), 0);
+
+static SUNXI_CCU_GATE(usb_ohci1_clk, "usb-ohci1", "osc12M", 0xa74, BIT(31), 0);
+static SUNXI_CCU_GATE(usb_phy1_clk, "usb-phy1", "dcxo24M", 0xa74, BIT(29), 0);
+
+static SUNXI_CCU_GATE(bus_ohci0_clk, "bus-ohci0", "ahb3", 0xa8c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_ohci1_clk, "bus-ohci1", "ahb3", 0xa8c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_ehci0_clk, "bus-ehci0", "ahb3", 0xa8c, BIT(4), 0);
+static SUNXI_CCU_GATE(bus_ehci1_clk, "bus-ehci1", "ahb3", 0xa8c, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_otg_clk, "bus-otg", "ahb3", 0xa8c, BIT(8), 0);
+
+static SUNXI_CCU_GATE(bus_lradc_clk, "bus-lradc", "ahb3", 0xa9c, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dpss_top0_clk, "bus-dpss-top0", "ahb3",
+		      0xabc, BIT(0), 0);
+
+static SUNXI_CCU_GATE(bus_dpss_top1_clk, "bus-dpss-top1", "ahb3",
+		      0xacc, BIT(0), 0);
+
+static const char * const mipi_dsi_parents[] = { "dcxo24M", "pll-periph0-2x",
+						 "pll-periph0" };
+static SUNXI_CCU_M_WITH_MUX_GATE(mipi_dsi_clk, "mipi-dsi",
+				 mipi_dsi_parents,
+				 0xb24,
+				 0, 4,		/* M */
+				 24, 2,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_mipi_dsi_clk, "bus-mipi-dsi", "ahb3",
+		      0xb4c, BIT(0), 0);
+
+static const char * const tcon_lcd_parents[] = { "pll-video0-4x",
+						  "pll-video1-4x",
+						  "pll-video2-4x",
+						  "pll-video3-4x",
+						  "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(tcon_lcd_clk, "tcon-lcd0",
+				  tcon_lcd_parents, 0xb60,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_tcon_lcd_clk, "bus-tcon-lcd0", "ahb3",
+		      0xb7c, BIT(0), 0);
+
+static const char * const ledc_parents[] = { "dcxo24M",
+					     "pll-periph0" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ledc_clk, "ledc",
+				  ledc_parents, 0xbf0,
+				  0, 4,		/* M */
+				  8, 2,		/* P */
+				  24, 3,	/* mux */
+				  BIT(31),	/* gate */
+				  0);
+
+static SUNXI_CCU_GATE(bus_ledc_clk, "bus-ledc", "ahb3", 0xbfc, BIT(0), 0);
+
+static const char * const csi_top_parents[] = { "pll-periph0-2x",
+						"pll-video0-2x",
+						"pll-video1-2x",
+						"pll-video2-2x",
+						"pll-video3-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_top_clk, "csi-top",
+				 csi_top_parents, 0xc04,
+				 0, 4,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static const char * const csi0_mclk_parents[] = { "dcxo24M", "pll-video2",
+						  "pll-video3", "pll-video0",
+						  "pll-video1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi0_mclk_clk, "csi0-mclk",
+				 csi0_mclk_parents, 0xc08,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static const char * const csi1_mclk_parents[] = { "dcxo24M", "pll-video3",
+						  "pll-video0", "pll-video1",
+						  "pll-video2" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi1_mclk_clk, "csi1-mclk",
+				 csi1_mclk_parents, 0xc0c,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+static SUNXI_CCU_GATE(bus_csi_clk, "bus-csi", "ahb3", 0xc1c, BIT(0), 0);
+
+static const char * const csi_isp_parents[] = { "pll-periph0-2x",
+						"pll-video0-2x",
+						"pll-video1-2x",
+						"pll-video2-2x",
+						"pll-video3-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_isp_clk, "csi-isp",
+				 csi_isp_parents, 0xc20,
+				 0, 5,		/* M */
+				 24, 3,		/* mux */
+				 BIT(31),	/* gate */
+				 0);
+
+/* Fixed factor clocks */
+static CLK_FIXED_FACTOR_FW_NAME(osc12M_clk, "osc12M", "hosc", 2, 1, 0);
+
+static CLK_FIXED_FACTOR_HW(pll_com_audio_clk, "pll-com-audio",
+			   &pll_com_clk.common.hw,
+			   5, 1, CLK_SET_RATE_PARENT);
+
+static CLK_FIXED_FACTOR_HW(pll_periph0_2x_clk, "pll-periph0-2x",
+			   &pll_periph0_clk.common.hw,
+			   1, 2, 0);
+
+static CLK_FIXED_FACTOR_HW(pll_periph1_2x_clk, "pll-periph1-2x",
+			   &pll_periph1_clk.common.hw,
+			   1, 2, 0);
+
+static const struct clk_hw *pll_video0_parents[] = {
+	&pll_video0_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video0_4x_clk, "pll-video0-4x",
+			    pll_video0_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video0_2x_clk, "pll-video0-2x",
+			    pll_video0_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video1_parents[] = {
+	&pll_video1_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video1_4x_clk, "pll-video1-4x",
+			    pll_video1_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video1_2x_clk, "pll-video1-2x",
+			    pll_video1_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video2_parents[] = {
+	&pll_video2_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video2_4x_clk, "pll-video2-4x",
+			    pll_video2_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video2_2x_clk, "pll-video2-2x",
+			    pll_video2_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static const struct clk_hw *pll_video3_parents[] = {
+	&pll_video3_clk.common.hw
+};
+static CLK_FIXED_FACTOR_HWS(pll_video3_4x_clk, "pll-video3-4x",
+			    pll_video3_parents,
+			    1, 4, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR_HWS(pll_video3_2x_clk, "pll-video3-2x",
+			    pll_video3_parents,
+			    1, 2, CLK_SET_RATE_PARENT);
+
+static struct ccu_common *sun50i_a100_ccu_clks[] = {
+	&pll_cpux_clk.common,
+	&pll_ddr0_clk.common,
+	&pll_periph0_clk.common,
+	&pll_periph1_clk.common,
+	&pll_gpu_clk.common,
+	&pll_video0_clk.common,
+	&pll_video1_clk.common,
+	&pll_video2_clk.common,
+	&pll_video3_clk.common,
+	&pll_ve_clk.common,
+	&pll_com_clk.common,
+	&pll_audio_clk.common,
+	&cpux_clk.common,
+	&axi_clk.common,
+	&cpux_apb_clk.common,
+	&psi_ahb1_ahb2_clk.common,
+	&ahb3_clk.common,
+	&apb1_clk.common,
+	&apb2_clk.common,
+	&mbus_clk.common,
+	&de_clk.common,
+	&bus_de_clk.common,
+	&g2d_clk.common,
+	&bus_g2d_clk.common,
+	&gpu_clk.common,
+	&bus_gpu_clk.common,
+	&ce_clk.common,
+	&bus_ce_clk.common,
+	&ve_clk.common,
+	&bus_ve_clk.common,
+	&bus_dma_clk.common,
+	&bus_msgbox_clk.common,
+	&bus_spinlock_clk.common,
+	&bus_hstimer_clk.common,
+	&avs_clk.common,
+	&bus_dbg_clk.common,
+	&bus_psi_clk.common,
+	&bus_pwm_clk.common,
+	&bus_iommu_clk.common,
+	&mbus_dma_clk.common,
+	&mbus_ve_clk.common,
+	&mbus_ce_clk.common,
+	&mbus_nand_clk.common,
+	&mbus_csi_clk.common,
+	&mbus_isp_clk.common,
+	&mbus_g2d_clk.common,
+	&bus_dram_clk.common,
+	&nand0_clk.common,
+	&nand1_clk.common,
+	&bus_nand_clk.common,
+	&mmc0_clk.common,
+	&mmc1_clk.common,
+	&mmc2_clk.common,
+	&bus_mmc0_clk.common,
+	&bus_mmc1_clk.common,
+	&bus_mmc2_clk.common,
+	&bus_uart0_clk.common,
+	&bus_uart1_clk.common,
+	&bus_uart2_clk.common,
+	&bus_uart3_clk.common,
+	&bus_uart4_clk.common,
+	&bus_i2c0_clk.common,
+	&bus_i2c1_clk.common,
+	&bus_i2c2_clk.common,
+	&bus_i2c3_clk.common,
+	&spi0_clk.common,
+	&spi1_clk.common,
+	&spi2_clk.common,
+	&bus_spi0_clk.common,
+	&bus_spi1_clk.common,
+	&bus_spi2_clk.common,
+	&emac_25m_clk.common,
+	&bus_emac_clk.common,
+	&ir_rx_clk.common,
+	&bus_ir_rx_clk.common,
+	&ir_tx_clk.common,
+	&bus_ir_tx_clk.common,
+	&bus_gpadc_clk.common,
+	&bus_ths_clk.common,
+	&i2s0_clk.common,
+	&i2s1_clk.common,
+	&i2s2_clk.common,
+	&i2s3_clk.common,
+	&bus_i2s0_clk.common,
+	&bus_i2s1_clk.common,
+	&bus_i2s2_clk.common,
+	&bus_i2s3_clk.common,
+	&spdif_clk.common,
+	&bus_spdif_clk.common,
+	&dmic_clk.common,
+	&bus_dmic_clk.common,
+	&audio_codec_dac_clk.common,
+	&audio_codec_adc_clk.common,
+	&audio_codec_4x_clk.common,
+	&bus_audio_codec_clk.common,
+	&usb_ohci0_clk.common,
+	&usb_phy0_clk.common,
+	&usb_ohci1_clk.common,
+	&usb_phy1_clk.common,
+	&bus_ohci0_clk.common,
+	&bus_ohci1_clk.common,
+	&bus_ehci0_clk.common,
+	&bus_ehci1_clk.common,
+	&bus_otg_clk.common,
+	&bus_lradc_clk.common,
+	&bus_dpss_top0_clk.common,
+	&bus_dpss_top1_clk.common,
+	&mipi_dsi_clk.common,
+	&bus_mipi_dsi_clk.common,
+	&tcon_lcd_clk.common,
+	&bus_tcon_lcd_clk.common,
+	&ledc_clk.common,
+	&bus_ledc_clk.common,
+	&csi_top_clk.common,
+	&csi0_mclk_clk.common,
+	&csi1_mclk_clk.common,
+	&bus_csi_clk.common,
+	&csi_isp_clk.common,
+};
+
+static struct clk_hw_onecell_data sun50i_a100_hw_clks = {
+	.hws	= {
+		[CLK_OSC12M]		= &osc12M_clk.hw,
+		[CLK_PLL_CPUX]		= &pll_cpux_clk.common.hw,
+		[CLK_PLL_DDR0]		= &pll_ddr0_clk.common.hw,
+		[CLK_PLL_PERIPH0]	= &pll_periph0_clk.common.hw,
+		[CLK_PLL_PERIPH0_2X]	= &pll_periph0_2x_clk.hw,
+		[CLK_PLL_PERIPH1]	= &pll_periph1_clk.common.hw,
+		[CLK_PLL_PERIPH1_2X]	= &pll_periph1_2x_clk.hw,
+		[CLK_PLL_GPU]		= &pll_gpu_clk.common.hw,
+		[CLK_PLL_VIDEO0]	= &pll_video0_clk.common.hw,
+		[CLK_PLL_VIDEO0_2X]	= &pll_video0_2x_clk.hw,
+		[CLK_PLL_VIDEO0_4X]	= &pll_video0_4x_clk.hw,
+		[CLK_PLL_VIDEO1]	= &pll_video1_clk.common.hw,
+		[CLK_PLL_VIDEO1_2X]	= &pll_video1_2x_clk.hw,
+		[CLK_PLL_VIDEO1_4X]	= &pll_video1_4x_clk.hw,
+		[CLK_PLL_VIDEO2]	= &pll_video2_clk.common.hw,
+		[CLK_PLL_VIDEO2_2X]	= &pll_video2_2x_clk.hw,
+		[CLK_PLL_VIDEO2_4X]	= &pll_video2_4x_clk.hw,
+		[CLK_PLL_VIDEO3]	= &pll_video3_clk.common.hw,
+		[CLK_PLL_VIDEO3_2X]	= &pll_video3_2x_clk.hw,
+		[CLK_PLL_VIDEO3_4X]	= &pll_video3_4x_clk.hw,
+		[CLK_PLL_VE]		= &pll_ve_clk.common.hw,
+		[CLK_PLL_COM]		= &pll_com_clk.common.hw,
+		[CLK_PLL_COM_AUDIO]	= &pll_com_audio_clk.hw,
+		[CLK_PLL_AUDIO]		= &pll_audio_clk.common.hw,
+		[CLK_CPUX]		= &cpux_clk.common.hw,
+		[CLK_AXI]		= &axi_clk.common.hw,
+		[CLK_CPUX_APB]		= &cpux_apb_clk.common.hw,
+		[CLK_PSI_AHB1_AHB2]	= &psi_ahb1_ahb2_clk.common.hw,
+		[CLK_AHB3]		= &ahb3_clk.common.hw,
+		[CLK_APB1]		= &apb1_clk.common.hw,
+		[CLK_APB2]		= &apb2_clk.common.hw,
+		[CLK_MBUS]		= &mbus_clk.common.hw,
+		[CLK_DE]		= &de_clk.common.hw,
+		[CLK_BUS_DE]		= &bus_de_clk.common.hw,
+		[CLK_G2D]		= &g2d_clk.common.hw,
+		[CLK_BUS_G2D]		= &bus_g2d_clk.common.hw,
+		[CLK_GPU]		= &gpu_clk.common.hw,
+		[CLK_BUS_GPU]		= &bus_gpu_clk.common.hw,
+		[CLK_CE]		= &ce_clk.common.hw,
+		[CLK_BUS_CE]		= &bus_ce_clk.common.hw,
+		[CLK_VE]		= &ve_clk.common.hw,
+		[CLK_BUS_VE]		= &bus_ve_clk.common.hw,
+		[CLK_BUS_DMA]		= &bus_dma_clk.common.hw,
+		[CLK_BUS_MSGBOX]	= &bus_msgbox_clk.common.hw,
+		[CLK_BUS_SPINLOCK]	= &bus_spinlock_clk.common.hw,
+		[CLK_BUS_HSTIMER]	= &bus_hstimer_clk.common.hw,
+		[CLK_AVS]		= &avs_clk.common.hw,
+		[CLK_BUS_DBG]		= &bus_dbg_clk.common.hw,
+		[CLK_BUS_PSI]		= &bus_psi_clk.common.hw,
+		[CLK_BUS_PWM]		= &bus_pwm_clk.common.hw,
+		[CLK_BUS_IOMMU]		= &bus_iommu_clk.common.hw,
+		[CLK_MBUS_DMA]		= &mbus_dma_clk.common.hw,
+		[CLK_MBUS_VE]		= &mbus_ve_clk.common.hw,
+		[CLK_MBUS_CE]		= &mbus_ce_clk.common.hw,
+		[CLK_MBUS_NAND]		= &mbus_nand_clk.common.hw,
+		[CLK_MBUS_CSI]		= &mbus_csi_clk.common.hw,
+		[CLK_MBUS_ISP]		= &mbus_isp_clk.common.hw,
+		[CLK_MBUS_G2D]		= &mbus_g2d_clk.common.hw,
+		[CLK_BUS_DRAM]		= &bus_dram_clk.common.hw,
+		[CLK_NAND0]		= &nand0_clk.common.hw,
+		[CLK_NAND1]		= &nand1_clk.common.hw,
+		[CLK_BUS_NAND]		= &bus_nand_clk.common.hw,
+		[CLK_MMC0]		= &mmc0_clk.common.hw,
+		[CLK_MMC1]		= &mmc1_clk.common.hw,
+		[CLK_MMC2]		= &mmc2_clk.common.hw,
+		[CLK_BUS_MMC0]		= &bus_mmc0_clk.common.hw,
+		[CLK_BUS_MMC1]		= &bus_mmc1_clk.common.hw,
+		[CLK_BUS_MMC2]		= &bus_mmc2_clk.common.hw,
+		[CLK_BUS_UART0]		= &bus_uart0_clk.common.hw,
+		[CLK_BUS_UART1]		= &bus_uart1_clk.common.hw,
+		[CLK_BUS_UART2]		= &bus_uart2_clk.common.hw,
+		[CLK_BUS_UART3]		= &bus_uart3_clk.common.hw,
+		[CLK_BUS_UART4]		= &bus_uart4_clk.common.hw,
+		[CLK_BUS_I2C0]		= &bus_i2c0_clk.common.hw,
+		[CLK_BUS_I2C1]		= &bus_i2c1_clk.common.hw,
+		[CLK_BUS_I2C2]		= &bus_i2c2_clk.common.hw,
+		[CLK_BUS_I2C3]		= &bus_i2c3_clk.common.hw,
+		[CLK_SPI0]		= &spi0_clk.common.hw,
+		[CLK_SPI1]		= &spi1_clk.common.hw,
+		[CLK_SPI2]		= &spi2_clk.common.hw,
+		[CLK_BUS_SPI0]		= &bus_spi0_clk.common.hw,
+		[CLK_BUS_SPI1]		= &bus_spi1_clk.common.hw,
+		[CLK_BUS_SPI2]		= &bus_spi2_clk.common.hw,
+		[CLK_EMAC_25M]		= &emac_25m_clk.common.hw,
+		[CLK_BUS_EMAC]		= &bus_emac_clk.common.hw,
+		[CLK_IR_RX]		= &ir_rx_clk.common.hw,
+		[CLK_BUS_IR_RX]		= &bus_ir_rx_clk.common.hw,
+		[CLK_IR_TX]		= &ir_tx_clk.common.hw,
+		[CLK_BUS_IR_TX]		= &bus_ir_tx_clk.common.hw,
+		[CLK_BUS_GPADC]		= &bus_gpadc_clk.common.hw,
+		[CLK_BUS_THS]		= &bus_ths_clk.common.hw,
+		[CLK_I2S0]		= &i2s0_clk.common.hw,
+		[CLK_I2S1]		= &i2s1_clk.common.hw,
+		[CLK_I2S2]		= &i2s2_clk.common.hw,
+		[CLK_I2S3]		= &i2s3_clk.common.hw,
+		[CLK_BUS_I2S0]		= &bus_i2s0_clk.common.hw,
+		[CLK_BUS_I2S1]		= &bus_i2s1_clk.common.hw,
+		[CLK_BUS_I2S2]		= &bus_i2s2_clk.common.hw,
+		[CLK_BUS_I2S3]		= &bus_i2s3_clk.common.hw,
+		[CLK_SPDIF]		= &spdif_clk.common.hw,
+		[CLK_BUS_SPDIF]		= &bus_spdif_clk.common.hw,
+		[CLK_DMIC]		= &dmic_clk.common.hw,
+		[CLK_BUS_DMIC]		= &bus_dmic_clk.common.hw,
+		[CLK_AUDIO_DAC]		= &audio_codec_dac_clk.common.hw,
+		[CLK_AUDIO_ADC]		= &audio_codec_adc_clk.common.hw,
+		[CLK_AUDIO_4X]		= &audio_codec_4x_clk.common.hw,
+		[CLK_BUS_AUDIO_CODEC]	= &bus_audio_codec_clk.common.hw,
+		[CLK_USB_OHCI0]		= &usb_ohci0_clk.common.hw,
+		[CLK_USB_PHY0]		= &usb_phy0_clk.common.hw,
+		[CLK_USB_OHCI1]		= &usb_ohci1_clk.common.hw,
+		[CLK_USB_PHY1]		= &usb_phy1_clk.common.hw,
+		[CLK_BUS_OHCI0]		= &bus_ohci0_clk.common.hw,
+		[CLK_BUS_OHCI1]		= &bus_ohci1_clk.common.hw,
+		[CLK_BUS_EHCI0]		= &bus_ehci0_clk.common.hw,
+		[CLK_BUS_EHCI1]		= &bus_ehci1_clk.common.hw,
+		[CLK_BUS_OTG]		= &bus_otg_clk.common.hw,
+		[CLK_BUS_LRADC]		= &bus_lradc_clk.common.hw,
+		[CLK_BUS_DPSS_TOP0]	= &bus_dpss_top0_clk.common.hw,
+		[CLK_BUS_DPSS_TOP1]	= &bus_dpss_top1_clk.common.hw,
+		[CLK_MIPI_DSI]		= &mipi_dsi_clk.common.hw,
+		[CLK_BUS_MIPI_DSI]	= &bus_mipi_dsi_clk.common.hw,
+		[CLK_TCON_LCD]		= &tcon_lcd_clk.common.hw,
+		[CLK_BUS_TCON_LCD]	= &bus_tcon_lcd_clk.common.hw,
+		[CLK_LEDC]		= &ledc_clk.common.hw,
+		[CLK_BUS_LEDC]		= &bus_ledc_clk.common.hw,
+		[CLK_CSI_TOP]		= &csi_top_clk.common.hw,
+		[CLK_CSI0_MCLK]		= &csi0_mclk_clk.common.hw,
+		[CLK_CSI1_MCLK]		= &csi1_mclk_clk.common.hw,
+		[CLK_BUS_CSI]		= &bus_csi_clk.common.hw,
+		[CLK_CSI_ISP]		= &csi_isp_clk.common.hw,
+	},
+	.num = CLK_NUMBER,
+};
+
+static struct ccu_reset_map sun50i_a100_ccu_resets[] = {
+	[RST_MBUS]		= { 0x540, BIT(30) },
+
+	[RST_BUS_DE]		= { 0x60c, BIT(16) },
+	[RST_BUS_G2D]		= { 0x63c, BIT(16) },
+	[RST_BUS_GPU]		= { 0x67c, BIT(16) },
+	[RST_BUS_CE]		= { 0x68c, BIT(16) },
+	[RST_BUS_VE]		= { 0x69c, BIT(16) },
+	[RST_BUS_DMA]		= { 0x70c, BIT(16) },
+	[RST_BUS_MSGBOX]	= { 0x71c, BIT(16) },
+	[RST_BUS_SPINLOCK]	= { 0x72c, BIT(16) },
+	[RST_BUS_HSTIMER]	= { 0x73c, BIT(16) },
+	[RST_BUS_DBG]		= { 0x78c, BIT(16) },
+	[RST_BUS_PSI]		= { 0x79c, BIT(16) },
+	[RST_BUS_PWM]		= { 0x7ac, BIT(16) },
+	[RST_BUS_DRAM]		= { 0x80c, BIT(16) },
+	[RST_BUS_NAND]		= { 0x82c, BIT(16) },
+	[RST_BUS_MMC0]		= { 0x84c, BIT(16) },
+	[RST_BUS_MMC1]		= { 0x84c, BIT(17) },
+	[RST_BUS_MMC2]		= { 0x84c, BIT(18) },
+	[RST_BUS_UART0]		= { 0x90c, BIT(16) },
+	[RST_BUS_UART1]		= { 0x90c, BIT(17) },
+	[RST_BUS_UART2]		= { 0x90c, BIT(18) },
+	[RST_BUS_UART3]		= { 0x90c, BIT(19) },
+	[RST_BUS_UART4]		= { 0x90c, BIT(20) },
+	[RST_BUS_I2C0]		= { 0x91c, BIT(16) },
+	[RST_BUS_I2C1]		= { 0x91c, BIT(17) },
+	[RST_BUS_I2C2]		= { 0x91c, BIT(18) },
+	[RST_BUS_I2C3]		= { 0x91c, BIT(19) },
+	[RST_BUS_SPI0]		= { 0x96c, BIT(16) },
+	[RST_BUS_SPI1]		= { 0x96c, BIT(17) },
+	[RST_BUS_SPI2]		= { 0x96c, BIT(18) },
+	[RST_BUS_EMAC]		= { 0x97c, BIT(16) },
+	[RST_BUS_IR_RX]		= { 0x99c, BIT(16) },
+	[RST_BUS_IR_TX]		= { 0x9cc, BIT(16) },
+	[RST_BUS_GPADC]		= { 0x9ec, BIT(16) },
+	[RST_BUS_THS]		= { 0x9fc, BIT(16) },
+	[RST_BUS_I2S0]		= { 0xa20, BIT(16) },
+	[RST_BUS_I2S1]		= { 0xa20, BIT(17) },
+	[RST_BUS_I2S2]		= { 0xa20, BIT(18) },
+	[RST_BUS_I2S3]		= { 0xa20, BIT(19) },
+	[RST_BUS_SPDIF]		= { 0xa2c, BIT(16) },
+	[RST_BUS_DMIC]		= { 0xa4c, BIT(16) },
+	[RST_BUS_AUDIO_CODEC]	= { 0xa5c, BIT(16) },
+
+	[RST_USB_PHY0]		= { 0xa70, BIT(30) },
+	[RST_USB_PHY1]		= { 0xa74, BIT(30) },
+
+	[RST_BUS_OHCI0]		= { 0xa8c, BIT(16) },
+	[RST_BUS_OHCI1]		= { 0xa8c, BIT(17) },
+	[RST_BUS_EHCI0]		= { 0xa8c, BIT(20) },
+	[RST_BUS_EHCI1]		= { 0xa8c, BIT(21) },
+	[RST_BUS_OTG]		= { 0xa8c, BIT(24) },
+
+	[RST_BUS_LRADC]		= { 0xa9c, BIT(16) },
+	[RST_BUS_DPSS_TOP0]	= { 0xabc, BIT(16) },
+	[RST_BUS_DPSS_TOP1]	= { 0xacc, BIT(16) },
+	[RST_BUS_MIPI_DSI]	= { 0xb4c, BIT(16) },
+	[RST_BUS_TCON_LCD]	= { 0xb7c, BIT(16) },
+	[RST_BUS_LVDS]		= { 0xbac, BIT(16) },
+	[RST_BUS_LEDC]		= { 0xbfc, BIT(16) },
+	[RST_BUS_CSI]		= { 0xc1c, BIT(16) },
+	[RST_BUS_CSI_ISP]	= { 0xc2c, BIT(16) },
+};
+
+static const struct sunxi_ccu_desc sun50i_a100_ccu_desc = {
+	.ccu_clks	= sun50i_a100_ccu_clks,
+	.num_ccu_clks	= ARRAY_SIZE(sun50i_a100_ccu_clks),
+
+	.hw_clks	= &sun50i_a100_hw_clks,
+
+	.resets		= sun50i_a100_ccu_resets,
+	.num_resets	= ARRAY_SIZE(sun50i_a100_ccu_resets),
+};
+
+static const u32 sun50i_a100_pll_regs[] = {
+	SUN50I_A100_PLL_CPUX_REG,
+	SUN50I_A100_PLL_DDR0_REG,
+	SUN50I_A100_PLL_PERIPH0_REG,
+	SUN50I_A100_PLL_PERIPH1_REG,
+	SUN50I_A100_PLL_GPU_REG,
+	SUN50I_A100_PLL_VIDEO0_REG,
+	SUN50I_A100_PLL_VIDEO1_REG,
+	SUN50I_A100_PLL_VIDEO2_REG,
+	SUN50I_A100_PLL_VIDEO3_REG,
+	SUN50I_A100_PLL_VE_REG,
+	SUN50I_A100_PLL_COM_REG,
+	SUN50I_A100_PLL_AUDIO_REG,
+};
+
+static const u32 sun50i_a100_pll_video_regs[] = {
+	SUN50I_A100_PLL_VIDEO0_REG,
+	SUN50I_A100_PLL_VIDEO1_REG,
+	SUN50I_A100_PLL_VIDEO2_REG,
+	SUN50I_A100_PLL_VIDEO3_REG,
+};
+
+static const u32 sun50i_a100_usb2_clk_regs[] = {
+	SUN50I_A100_USB0_CLK_REG,
+	SUN50I_A100_USB1_CLK_REG,
+};
+
+static struct ccu_pll_nb sun50i_a100_pll_cpu_nb = {
+	.common = &pll_cpux_clk.common,
+	/* copy from pll_cpux_clk */
+	.enable = BIT(27),
+	.lock   = BIT(28),
+};
+
+static struct ccu_mux_nb sun50i_a100_cpu_nb = {
+	.common         = &cpux_clk.common,
+	.cm             = &cpux_clk.mux,
+	.delay_us       = 1,
+	.bypass_index   = 4, /* index of pll periph0 */
+};
+
+static int sun50i_a100_ccu_probe(struct platform_device *pdev)
+{
+	void __iomem *reg;
+	u32 val;
+	int i, ret;
+
+	reg = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(reg))
+		return PTR_ERR(reg);
+
+	/*
+	 * Enable lock and enable bits on all PLLs.
+	 *
+	 * Due to the current design, multiple PLLs share one power switch,
+	 * so switching PLL is easy to cause stability problems.
+	 * When initializing, we enable them by default. When disable,
+	 * we only turn off the output of PLL.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_pll_regs); i++) {
+		val = readl(reg + sun50i_a100_pll_regs[i]);
+		val |= SUN50I_A100_PLL_LOCK_ENABLE | SUN50I_A100_PLL_ENABLE;
+		writel(val, reg + sun50i_a100_pll_regs[i]);
+	}
+
+	/*
+	 * In order to pass the EMI certification, the SDM function of
+	 * the peripheral 1 bus is enabled, and the frequency is still
+	 * calculated using the previous division factor.
+	 */
+	writel(SUN50I_A100_PLL_PERIPH1_PATTERN0,
+	       reg + SUN50I_A100_PLL_PERIPH1_PATTERN0_REG);
+
+	val = readl(reg + SUN50I_A100_PLL_PERIPH1_REG);
+	val |= SUN50I_A100_PLL_SDM_ENABLE;
+	writel(val, reg + SUN50I_A100_PLL_PERIPH1_REG);
+
+	/*
+	 * Force the output divider of video PLLs to 0.
+	 *
+	 * See the comment before pll-video0 definition for the reason.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_pll_video_regs); i++) {
+		val = readl(reg + sun50i_a100_pll_video_regs[i]);
+		val &= ~BIT(0);
+		writel(val, reg + sun50i_a100_pll_video_regs[i]);
+	}
+
+	/*
+	 * Enforce m1 = 0, m0 = 1 for Audio PLL
+	 *
+	 * See the comment before pll-audio definition for the reason.
+	 */
+	val = readl(reg + SUN50I_A100_PLL_AUDIO_REG);
+	val &= ~BIT(1);
+	val |= BIT(0);
+	writel(val, reg + SUN50I_A100_PLL_AUDIO_REG);
+
+	/*
+	 * Force OHCI 12M clock sources to 00 (12MHz divided from 48MHz)
+	 *
+	 * This clock mux is still mysterious, and the code just enforces
+	 * it to have a valid clock parent.
+	 */
+	for (i = 0; i < ARRAY_SIZE(sun50i_a100_usb2_clk_regs); i++) {
+		val = readl(reg + sun50i_a100_usb2_clk_regs[i]);
+		val &= ~GENMASK(25, 24);
+		writel(val, reg + sun50i_a100_usb2_clk_regs[i]);
+	}
+
+	ret = sunxi_ccu_probe(pdev->dev.of_node, reg, &sun50i_a100_ccu_desc);
+	if (ret)
+		return ret;
+
+	/* Gate then ungate PLL CPU after any rate changes */
+	ccu_pll_notifier_register(&sun50i_a100_pll_cpu_nb);
+
+	/* Reparent CPU during PLL CPU rate changes */
+	ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
+				  &sun50i_a100_cpu_nb);
+
+	return 0;
+}
+
+static const struct of_device_id sun50i_a100_ccu_ids[] = {
+	{ .compatible = "allwinner,sun50i-a100-ccu" },
+	{ }
+};
+
+static struct platform_driver sun50i_a100_ccu_driver = {
+	.probe	= sun50i_a100_ccu_probe,
+	.driver	= {
+		.name	= "sun50i-a100-ccu",
+		.of_match_table	= sun50i_a100_ccu_ids,
+	},
+};
+module_platform_driver(sun50i_a100_ccu_driver);
diff --git a/drivers/clk/sunxi-ng/ccu-sun50i-a100.h b/drivers/clk/sunxi-ng/ccu-sun50i-a100.h
new file mode 100644
index 0000000..21ce92b
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun50i-a100.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _CCU_SUN50I_A100_H_
+#define _CCU_SUN50I_A100_H_
+
+#include <dt-bindings/clock/sun50i-a100-ccu.h>
+#include <dt-bindings/reset/sun50i-a100-ccu.h>
+
+#define CLK_OSC12M		0
+#define CLK_PLL_CPUX		1
+#define CLK_PLL_DDR0		2
+
+/* PLL_PERIPH0 exported for PRCM */
+
+#define CLK_PLL_PERIPH0_2X	4
+#define CLK_PLL_PERIPH1		5
+#define CLK_PLL_PERIPH1_2X	6
+#define CLK_PLL_GPU		7
+#define CLK_PLL_VIDEO0		8
+#define CLK_PLL_VIDEO0_2X	9
+#define CLK_PLL_VIDEO0_4X	10
+#define CLK_PLL_VIDEO1		11
+#define CLK_PLL_VIDEO1_2X	12
+#define CLK_PLL_VIDEO1_4X	13
+#define CLK_PLL_VIDEO2		14
+#define CLK_PLL_VIDEO2_2X	15
+#define CLK_PLL_VIDEO2_4X	16
+#define CLK_PLL_VIDEO3		17
+#define CLK_PLL_VIDEO3_2X	18
+#define CLK_PLL_VIDEO3_4X	19
+#define CLK_PLL_VE		20
+#define CLK_PLL_COM		21
+#define CLK_PLL_COM_AUDIO	22
+#define CLK_PLL_AUDIO		23
+
+/* CPUX clock exported for DVFS */
+
+#define CLK_AXI			25
+#define CLK_CPUX_APB		26
+#define CLK_PSI_AHB1_AHB2	27
+#define CLK_AHB3		28
+
+/* APB1 clock exported for PIO */
+
+#define CLK_APB2		30
+
+/* All module clocks and bus gates are exported except DRAM */
+
+#define CLK_BUS_DRAM		58
+
+#define CLK_NUMBER		(CLK_CSI_ISP + 1)
+
+#endif /* _CCU_SUN50I_A100_H_ */
diff --git a/drivers/clk/ti/clk-7xx.c b/drivers/clk/ti/clk-7xx.c
index 04ed661..66e4b2b9 100644
--- a/drivers/clk/ti/clk-7xx.c
+++ b/drivers/clk/ti/clk-7xx.c
@@ -793,7 +793,6 @@
 	DT_CLK(NULL, "timer_32k_ck", "sys_32k_ck"),
 	DT_CLK(NULL, "sys_clkin_ck", "timer_sys_clk_div"),
 	DT_CLK(NULL, "sys_clkin", "sys_clkin1"),
-	DT_CLK(NULL, "timer_sys_ck", "timer_sys_clk_div"),
 	DT_CLK(NULL, "atl_dpll_clk_mux", "atl-clkctrl:0000:24"),
 	DT_CLK(NULL, "atl_gfclk_mux", "atl-clkctrl:0000:26"),
 	DT_CLK(NULL, "dcan1_sys_clk_mux", "wkupaon-clkctrl:0068:24"),
diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
index 9bfe4c5..b284748 100644
--- a/drivers/clocksource/Kconfig
+++ b/drivers/clocksource/Kconfig
@@ -129,7 +129,7 @@
 	  Enables the support for the RDA Micro timer driver.
 
 config SUN4I_TIMER
-	bool "Sun4i timer driver" if COMPILE_TEST
+	bool "Sun4i timer driver"
 	depends on HAS_IOMEM
 	select CLKSRC_MMIO
 	select TIMER_OF
@@ -475,7 +475,7 @@
         bool
 
 config MTK_TIMER
-	bool "Mediatek timer driver" if COMPILE_TEST
+	bool "Mediatek timer driver"
 	depends on HAS_IOMEM
 	select TIMER_OF
 	select CLKSRC_MMIO
@@ -483,10 +483,8 @@
 	  Support for Mediatek timer driver.
 
 config SPRD_TIMER
-	bool "Spreadtrum timer driver" if EXPERT
+	tristate "Spreadtrum timer driver" if EXPERT
 	depends on HAS_IOMEM
-	depends on (ARCH_SPRD || COMPILE_TEST)
-	default ARCH_SPRD
 	select TIMER_OF
 	help
 	  Enables support for the Spreadtrum timer driver.
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index ec6f28e..d6c17f5 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@
 static bool arch_timer_c3stop;
 static bool arch_timer_mem_use_virtual;
 static bool arch_counter_suspend_stop;
-static enum vdso_arch_clockmode vdso_default = VDSO_CLOCKMODE_ARCHTIMER;
+static enum vdso_clock_mode vdso_default = VDSO_CLOCKMODE_ARCHTIMER;
 
 static cpumask_t evtstrm_available = CPU_MASK_NONE;
 static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c
index a3c73e9..c7ce0de 100644
--- a/drivers/clocksource/timer-of.c
+++ b/drivers/clocksource/timer-of.c
@@ -19,7 +19,7 @@
  *
  * Free the irq resource
  */
-static __init void timer_of_irq_exit(struct of_timer_irq *of_irq)
+static void timer_of_irq_exit(struct of_timer_irq *of_irq)
 {
 	struct timer_of *to = container_of(of_irq, struct timer_of, of_irq);
 
@@ -47,7 +47,7 @@
  *
  * Returns 0 on success, < 0 otherwise
  */
-static __init int timer_of_irq_init(struct device_node *np,
+static int timer_of_irq_init(struct device_node *np,
 				    struct of_timer_irq *of_irq)
 {
 	int ret;
@@ -91,7 +91,7 @@
  *
  * Disables and releases the refcount on the clk
  */
-static __init void timer_of_clk_exit(struct of_timer_clk *of_clk)
+static void timer_of_clk_exit(struct of_timer_clk *of_clk)
 {
 	of_clk->rate = 0;
 	clk_disable_unprepare(of_clk->clk);
@@ -107,7 +107,7 @@
  *
  * Returns 0 on success, < 0 otherwise
  */
-static __init int timer_of_clk_init(struct device_node *np,
+static int timer_of_clk_init(struct device_node *np,
 				    struct of_timer_clk *of_clk)
 {
 	int ret;
@@ -146,12 +146,12 @@
 	goto out;
 }
 
-static __init void timer_of_base_exit(struct of_timer_base *of_base)
+static void timer_of_base_exit(struct of_timer_base *of_base)
 {
 	iounmap(of_base->base);
 }
 
-static __init int timer_of_base_init(struct device_node *np,
+static int timer_of_base_init(struct device_node *np,
 				     struct of_timer_base *of_base)
 {
 	of_base->base = of_base->name ?
@@ -165,7 +165,7 @@
 	return 0;
 }
 
-int __init timer_of_init(struct device_node *np, struct timer_of *to)
+int timer_of_init(struct device_node *np, struct timer_of *to)
 {
 	int ret = -EINVAL;
 	int flags = 0;
@@ -209,6 +209,7 @@
 		timer_of_base_exit(&to->of_base);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(timer_of_init);
 
 /**
  * timer_of_cleanup - release timer_of ressources
@@ -217,7 +218,7 @@
  * Release the ressources that has been used in timer_of_init().
  * This function should be called in init error cases
  */
-void __init timer_of_cleanup(struct timer_of *to)
+void timer_of_cleanup(struct timer_of *to)
 {
 	if (to->flags & TIMER_OF_IRQ)
 		timer_of_irq_exit(&to->of_irq);
diff --git a/drivers/clocksource/timer-of.h b/drivers/clocksource/timer-of.h
index a5478f3..1b8cfac5 100644
--- a/drivers/clocksource/timer-of.h
+++ b/drivers/clocksource/timer-of.h
@@ -66,9 +66,9 @@
 	return to->of_clk.period;
 }
 
-extern int __init timer_of_init(struct device_node *np,
+extern int timer_of_init(struct device_node *np,
 				struct timer_of *to);
 
-extern void __init timer_of_cleanup(struct timer_of *to);
+extern void timer_of_cleanup(struct timer_of *to);
 
 #endif
diff --git a/drivers/clocksource/timer-sprd.c b/drivers/clocksource/timer-sprd.c
index 430cb99..5461789 100644
--- a/drivers/clocksource/timer-sprd.c
+++ b/drivers/clocksource/timer-sprd.c
@@ -5,6 +5,8 @@
 
 #include <linux/init.h>
 #include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
 
 #include "timer-of.h"
 
@@ -141,7 +143,7 @@
 	},
 };
 
-static int __init sprd_timer_init(struct device_node *np)
+static int sprd_timer_init(struct device_node *np)
 {
 	int ret;
 
@@ -190,7 +192,7 @@
 	.flags	= CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SUSPEND_NONSTOP,
 };
 
-static int __init sprd_suspend_timer_init(struct device_node *np)
+static int sprd_suspend_timer_init(struct device_node *np)
 {
 	int ret;
 
@@ -204,6 +206,37 @@
 	return 0;
 }
 
+#ifdef MODULE
+static int sprd_timer_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+
+	if (of_property_read_bool(np, "interrupts"))
+		return sprd_timer_init(np);
+
+	return sprd_suspend_timer_init(np);
+}
+
+static const struct of_device_id sprd_timer_match_table[] = {
+	{ .compatible = "sprd,sc9860-suspend-timer" },
+	{ .compatible = "sprd,sc9860-timer" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, sprd_timer_match_table);
+
+static struct platform_driver sprd_timer_driver = {
+	.probe		= sprd_timer_probe,
+	.driver		= {
+		.name	= "sprd-timer",
+		.of_match_table = sprd_timer_match_table,
+	},
+};
+module_platform_driver(sprd_timer_driver);
+
+#else
 TIMER_OF_DECLARE(sc9860_timer, "sprd,sc9860-timer", sprd_timer_init);
 TIMER_OF_DECLARE(sc9860_persistent_timer, "sprd,sc9860-suspend-timer",
 		 sprd_suspend_timer_init);
+#endif
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/cpufreq/Kconfig b/drivers/cpufreq/Kconfig
index bff5295..2075100 100644
--- a/drivers/cpufreq/Kconfig
+++ b/drivers/cpufreq/Kconfig
@@ -34,6 +34,13 @@
 
 	  If in doubt, say N.
 
+config CPU_FREQ_TIMES
+       bool "CPU frequency time-in-state statistics"
+       help
+         Export CPU time-in-state information through procfs.
+
+         If in doubt, say N.
+
 choice
 	prompt "Default CPUFreq governor"
 	default CPU_FREQ_DEFAULT_GOV_USERSPACE if ARM_SA1100_CPUFREQ || ARM_SA1110_CPUFREQ
@@ -222,6 +229,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 9a9f5cc..33d6b64 100644
--- a/drivers/cpufreq/Makefile
+++ b/drivers/cpufreq/Makefile
@@ -5,7 +5,10 @@
 # CPUfreq stats
 obj-$(CONFIG_CPU_FREQ_STAT)             += cpufreq_stats.o
 
-# CPUfreq governors 
+# CPUfreq times
+obj-$(CONFIG_CPU_FREQ_TIMES)		+= cpufreq_times.o
+
+# CPUfreq governors
 obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)	+= cpufreq_performance.o
 obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)	+= cpufreq_powersave.o
 obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)	+= cpufreq_userspace.o
@@ -17,6 +20,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-dt-platdev.c b/drivers/cpufreq/cpufreq-dt-platdev.c
index 1200842c..403dea96 100644
--- a/drivers/cpufreq/cpufreq-dt-platdev.c
+++ b/drivers/cpufreq/cpufreq-dt-platdev.c
@@ -182,4 +182,4 @@
 			       -1, data,
 			       sizeof(struct cpufreq_dt_platform_data)));
 }
-device_initcall(cpufreq_dt_platdev_init);
+core_initcall(cpufreq_dt_platdev_init);
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index cb7949a..2b1b35f 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -16,6 +16,7 @@
 
 #include <linux/cpu.h>
 #include <linux/cpufreq.h>
+#include <linux/cpufreq_times.h>
 #include <linux/cpu_cooling.h>
 #include <linux/delay.h>
 #include <linux/device.h>
@@ -105,6 +106,8 @@
 }
 EXPORT_SYMBOL_GPL(have_governor_per_policy);
 
+static struct kobject *cpufreq_global_kobject;
+
 struct kobject *get_governor_parent_kobj(struct cpufreq_policy *policy)
 {
 	if (have_governor_per_policy())
@@ -155,6 +158,12 @@
 }
 EXPORT_SYMBOL_GPL(arch_set_freq_scale);
 
+__weak void arch_set_max_freq_scale(struct cpumask *cpus,
+				    unsigned long policy_max_freq)
+{
+}
+EXPORT_SYMBOL_GPL(arch_set_max_freq_scale);
+
 /*
  * This is a generic cpufreq init() routine which can be used by cpufreq
  * drivers of SMP systems. It will do following:
@@ -382,6 +391,7 @@
 					 CPUFREQ_POSTCHANGE, freqs);
 
 		cpufreq_stats_record_transition(policy, freqs->new);
+		cpufreq_times_record_transition(policy, freqs->new);
 		policy->cur = freqs->new;
 	}
 }
@@ -1477,6 +1487,7 @@
 			goto out_destroy_policy;
 
 		cpufreq_stats_create_table(policy);
+		cpufreq_times_create_policy(policy);
 
 		write_lock_irqsave(&cpufreq_driver_lock, flags);
 		list_add(&policy->policy_list, &cpufreq_policy_list);
@@ -2041,9 +2052,15 @@
 unsigned int cpufreq_driver_fast_switch(struct cpufreq_policy *policy,
 					unsigned int target_freq)
 {
+	int ret;
+
 	target_freq = clamp_val(target_freq, policy->min, policy->max);
 
-	return cpufreq_driver->fast_switch(policy, target_freq);
+	ret = cpufreq_driver->fast_switch(policy, target_freq);
+	if (ret)
+		cpufreq_times_record_transition(policy, ret);
+
+	return ret;
 }
 EXPORT_SYMBOL_GPL(cpufreq_driver_fast_switch);
 
@@ -2421,6 +2438,8 @@
 	policy->max = new_data.max;
 	trace_cpu_frequency_limits(policy);
 
+	arch_set_max_freq_scale(policy->cpus, policy->max);
+
 	policy->cached_target_freq = UINT_MAX;
 
 	pr_debug("new min and max freqs are %u - %u kHz\n",
@@ -2768,9 +2787,6 @@
 }
 EXPORT_SYMBOL_GPL(cpufreq_unregister_driver);
 
-struct kobject *cpufreq_global_kobject;
-EXPORT_SYMBOL(cpufreq_global_kobject);
-
 static int __init cpufreq_core_init(void)
 {
 	if (cpufreq_disabled())
diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c
index b66e81c..737ff3b 100644
--- a/drivers/cpufreq/cpufreq_conservative.c
+++ b/drivers/cpufreq/cpufreq_conservative.c
@@ -346,7 +346,7 @@
 	return CPU_FREQ_GOV_CONSERVATIVE;
 }
 
-fs_initcall(cpufreq_gov_dbs_init);
+core_initcall(cpufreq_gov_dbs_init);
 #else
 module_init(cpufreq_gov_dbs_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c
index dced033..82a4d37 100644
--- a/drivers/cpufreq/cpufreq_ondemand.c
+++ b/drivers/cpufreq/cpufreq_ondemand.c
@@ -483,7 +483,7 @@
 	return CPU_FREQ_GOV_ONDEMAND;
 }
 
-fs_initcall(cpufreq_gov_dbs_init);
+core_initcall(cpufreq_gov_dbs_init);
 #else
 module_init(cpufreq_gov_dbs_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_performance.c b/drivers/cpufreq/cpufreq_performance.c
index aaa04df..def9afe 100644
--- a/drivers/cpufreq/cpufreq_performance.c
+++ b/drivers/cpufreq/cpufreq_performance.c
@@ -50,5 +50,5 @@
 MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
 MODULE_LICENSE("GPL");
 
-fs_initcall(cpufreq_gov_performance_init);
+core_initcall(cpufreq_gov_performance_init);
 module_exit(cpufreq_gov_performance_exit);
diff --git a/drivers/cpufreq/cpufreq_powersave.c b/drivers/cpufreq/cpufreq_powersave.c
index c143dc2..1ae6601 100644
--- a/drivers/cpufreq/cpufreq_powersave.c
+++ b/drivers/cpufreq/cpufreq_powersave.c
@@ -43,7 +43,7 @@
 	return &cpufreq_gov_powersave;
 }
 
-fs_initcall(cpufreq_gov_powersave_init);
+core_initcall(cpufreq_gov_powersave_init);
 #else
 module_init(cpufreq_gov_powersave_init);
 #endif
diff --git a/drivers/cpufreq/cpufreq_times.c b/drivers/cpufreq/cpufreq_times.c
new file mode 100644
index 0000000..4df55b3
--- /dev/null
+++ b/drivers/cpufreq/cpufreq_times.c
@@ -0,0 +1,211 @@
+/* drivers/cpufreq/cpufreq_times.c
+ *
+ * Copyright (C) 2018 Google, Inc.
+ *
+ * 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.
+ *
+ */
+
+#include <linux/cpufreq.h>
+#include <linux/cpufreq_times.h>
+#include <linux/jiffies.h>
+#include <linux/sched.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/threads.h>
+
+static DEFINE_SPINLOCK(task_time_in_state_lock); /* task->time_in_state */
+
+/**
+ * struct cpu_freqs - per-cpu frequency information
+ * @offset: start of these freqs' stats in task time_in_state array
+ * @max_state: number of entries in freq_table
+ * @last_index: index in freq_table of last frequency switched to
+ * @freq_table: list of available frequencies
+ */
+struct cpu_freqs {
+	unsigned int offset;
+	unsigned int max_state;
+	unsigned int last_index;
+	unsigned int freq_table[0];
+};
+
+static struct cpu_freqs *all_freqs[NR_CPUS];
+
+static unsigned int next_offset;
+
+void cpufreq_task_times_init(struct task_struct *p)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	p->time_in_state = NULL;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	p->max_state = 0;
+}
+
+void cpufreq_task_times_alloc(struct task_struct *p)
+{
+	void *temp;
+	unsigned long flags;
+	unsigned int max_state = READ_ONCE(next_offset);
+
+	/* We use one array to avoid multiple allocs per task */
+	temp = kcalloc(max_state, sizeof(p->time_in_state[0]), GFP_ATOMIC);
+	if (!temp)
+		return;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	p->time_in_state = temp;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	p->max_state = max_state;
+}
+
+/* Caller must hold task_time_in_state_lock */
+static int cpufreq_task_times_realloc_locked(struct task_struct *p)
+{
+	void *temp;
+	unsigned int max_state = READ_ONCE(next_offset);
+
+	temp = krealloc(p->time_in_state, max_state * sizeof(u64), GFP_ATOMIC);
+	if (!temp)
+		return -ENOMEM;
+	p->time_in_state = temp;
+	memset(p->time_in_state + p->max_state, 0,
+	       (max_state - p->max_state) * sizeof(u64));
+	p->max_state = max_state;
+	return 0;
+}
+
+void cpufreq_task_times_exit(struct task_struct *p)
+{
+	unsigned long flags;
+	void *temp;
+
+	if (!p->time_in_state)
+		return;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	temp = p->time_in_state;
+	p->time_in_state = NULL;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	kfree(temp);
+}
+
+int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns,
+	struct pid *pid, struct task_struct *p)
+{
+	unsigned int cpu, i;
+	u64 cputime;
+	unsigned long flags;
+	struct cpu_freqs *freqs;
+	struct cpu_freqs *last_freqs = NULL;
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	for_each_possible_cpu(cpu) {
+		freqs = all_freqs[cpu];
+		if (!freqs || freqs == last_freqs)
+			continue;
+		last_freqs = freqs;
+
+		seq_printf(m, "cpu%u\n", cpu);
+		for (i = 0; i < freqs->max_state; i++) {
+			cputime = 0;
+			if (freqs->offset + i < p->max_state &&
+			    p->time_in_state)
+				cputime = p->time_in_state[freqs->offset + i];
+			seq_printf(m, "%u %lu\n", freqs->freq_table[i],
+				   (unsigned long)nsec_to_clock_t(cputime));
+		}
+	}
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+	return 0;
+}
+
+void cpufreq_acct_update_power(struct task_struct *p, u64 cputime)
+{
+	unsigned long flags;
+	unsigned int state;
+	struct cpu_freqs *freqs = all_freqs[task_cpu(p)];
+
+	if (!freqs || is_idle_task(p) || p->flags & PF_EXITING)
+		return;
+
+	state = freqs->offset + READ_ONCE(freqs->last_index);
+
+	spin_lock_irqsave(&task_time_in_state_lock, flags);
+	if ((state < p->max_state || !cpufreq_task_times_realloc_locked(p)) &&
+	    p->time_in_state)
+		p->time_in_state[state] += cputime;
+	spin_unlock_irqrestore(&task_time_in_state_lock, flags);
+}
+
+static int cpufreq_times_get_index(struct cpu_freqs *freqs, unsigned int freq)
+{
+	int index;
+        for (index = 0; index < freqs->max_state; ++index) {
+		if (freqs->freq_table[index] == freq)
+			return index;
+        }
+	return -1;
+}
+
+void cpufreq_times_create_policy(struct cpufreq_policy *policy)
+{
+	int cpu, index = 0;
+	unsigned int count = 0;
+	struct cpufreq_frequency_table *pos, *table;
+	struct cpu_freqs *freqs;
+	void *tmp;
+
+	if (all_freqs[policy->cpu])
+		return;
+
+	table = policy->freq_table;
+	if (!table)
+		return;
+
+	cpufreq_for_each_valid_entry(pos, table)
+		count++;
+
+	tmp =  kzalloc(sizeof(*freqs) + sizeof(freqs->freq_table[0]) * count,
+		       GFP_KERNEL);
+	if (!tmp)
+		return;
+
+	freqs = tmp;
+	freqs->max_state = count;
+
+	cpufreq_for_each_valid_entry(pos, table)
+		freqs->freq_table[index++] = pos->frequency;
+
+	index = cpufreq_times_get_index(freqs, policy->cur);
+	if (index >= 0)
+		WRITE_ONCE(freqs->last_index, index);
+
+	freqs->offset = next_offset;
+	WRITE_ONCE(next_offset, freqs->offset + count);
+	for_each_cpu(cpu, policy->related_cpus)
+		all_freqs[cpu] = freqs;
+}
+
+void cpufreq_times_record_transition(struct cpufreq_policy *policy,
+	unsigned int new_freq)
+{
+	int index;
+	struct cpu_freqs *freqs = all_freqs[policy->cpu];
+	if (!freqs)
+		return;
+
+	index = cpufreq_times_get_index(freqs, new_freq);
+	if (index >= 0)
+		WRITE_ONCE(freqs->last_index, index);
+}
diff --git a/drivers/cpufreq/cpufreq_userspace.c b/drivers/cpufreq/cpufreq_userspace.c
index cbd81c5..b43e7cd 100644
--- a/drivers/cpufreq/cpufreq_userspace.c
+++ b/drivers/cpufreq/cpufreq_userspace.c
@@ -147,7 +147,7 @@
 	return &cpufreq_gov_userspace;
 }
 
-fs_initcall(cpufreq_gov_userspace_init);
+core_initcall(cpufreq_gov_userspace_init);
 #else
 module_init(cpufreq_gov_userspace_init);
 #endif
diff --git a/drivers/cpufreq/dummy-cpufreq.c b/drivers/cpufreq/dummy-cpufreq.c
new file mode 100644
index 0000000..f1e5ac7
--- /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_data *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/cpufreq/qcom-cpufreq-hw.c b/drivers/cpufreq/qcom-cpufreq-hw.c
index a9ae2f8..fc92a88 100644
--- a/drivers/cpufreq/qcom-cpufreq-hw.c
+++ b/drivers/cpufreq/qcom-cpufreq-hw.c
@@ -334,7 +334,7 @@
 {
 	return platform_driver_register(&qcom_cpufreq_hw_driver);
 }
-device_initcall(qcom_cpufreq_hw_init);
+postcore_initcall(qcom_cpufreq_hw_init);
 
 static void __exit qcom_cpufreq_hw_exit(void)
 {
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 73f08cd..8b96ef0 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -195,7 +195,7 @@
  * @drv: cpuidle driver for this cpu
  * @index: index into the states table in @drv of the state to enter
  */
-int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
+int __nocfi cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
 			int index)
 {
 	int entered_state;
diff --git a/drivers/crypto/virtio/Kconfig b/drivers/crypto/virtio/Kconfig
index 01b625e..6d3deb0 100644
--- a/drivers/crypto/virtio/Kconfig
+++ b/drivers/crypto/virtio/Kconfig
@@ -5,7 +5,6 @@
 	select CRYPTO_AEAD
 	select CRYPTO_BLKCIPHER
 	select CRYPTO_ENGINE
-	default m
 	help
 	  This driver provides support for virtio crypto device. If you
 	  choose 'M' here, this module will be called virtio_crypto.
diff --git a/drivers/dax/device.c b/drivers/dax/device.c
index 1af823b..4c0af2e 100644
--- a/drivers/dax/device.c
+++ b/drivers/dax/device.c
@@ -377,6 +377,7 @@
 	inode->i_mapping->a_ops = &dev_dax_aops;
 	filp->f_mapping = inode->i_mapping;
 	filp->f_wb_err = filemap_sample_wb_err(filp->f_mapping);
+	filp->f_sb_err = file_sample_sb_err(filp);
 	filp->private_data = dev_dax;
 	inode->i_flags = S_DAX;
 
diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig
index a23b675..aca9a1c 100644
--- a/drivers/dma-buf/Kconfig
+++ b/drivers/dma-buf/Kconfig
@@ -44,4 +44,26 @@
 	default n
 	depends on DMA_SHARED_BUFFER
 
+menuconfig DMABUF_HEAPS
+	bool "DMA-BUF Userland Memory Heaps"
+	select DMA_SHARED_BUFFER
+	help
+	  Choose this option to enable the DMA-BUF userland memory heaps.
+	  This options creates per heap chardevs in /dev/dma_heap/ which
+	  allows userspace to allocate dma-bufs that can be shared
+	  between drivers.
+
+menuconfig DMABUF_SYSFS_STATS
+	bool "DMA-BUF sysfs statistics"
+	select DMA_SHARED_BUFFER
+	help
+	   Choose this option to enable DMA-BUF sysfs statistics
+	   in location /sys/kernel/dmabuf/buffers.
+
+	   /sys/kernel/dmabuf/buffers/<inode_number> will contain
+	   statistics for the DMA-BUF with the unique inode number
+	   <inode_number>.
+
+source "drivers/dma-buf/heaps/Kconfig"
+
 endmenu
diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile
index 03479da..8ae92ce 100644
--- a/drivers/dma-buf/Makefile
+++ b/drivers/dma-buf/Makefile
@@ -1,9 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0-only
 obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \
 	 dma-resv.o seqno-fence.o
+obj-$(CONFIG_DMABUF_HEAPS)	+= dma-heap.o
+obj-$(CONFIG_DMABUF_HEAPS)	+= heaps/
 obj-$(CONFIG_SYNC_FILE)		+= sync_file.o
 obj-$(CONFIG_SW_SYNC)		+= sw_sync.o sync_debug.o
 obj-$(CONFIG_UDMABUF)		+= udmabuf.o
+obj-$(CONFIG_DMABUF_SYSFS_STATS) += dma-buf-sysfs-stats.o
 
 dmabuf_selftests-y := \
 	selftest.o \
diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.c b/drivers/dma-buf/dma-buf-sysfs-stats.c
new file mode 100644
index 0000000..2d90e69
--- /dev/null
+++ b/drivers/dma-buf/dma-buf-sysfs-stats.c
@@ -0,0 +1,157 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * DMA-BUF sysfs statistics.
+ *
+ * Copyright (C) 2021 Google LLC.
+ */
+
+#include <linux/dma-buf.h>
+#include <linux/dma-resv.h>
+#include <linux/kobject.h>
+#include <linux/printk.h>
+#include <linux/slab.h>
+#include <linux/sysfs.h>
+
+#include "dma-buf-sysfs-stats.h"
+
+#define to_dma_buf_entry_from_kobj(x) container_of(x, struct dma_buf_sysfs_entry, kobj)
+
+struct dma_buf_stats_attribute {
+	struct attribute attr;
+	ssize_t (*show)(struct dma_buf *dmabuf,
+			struct dma_buf_stats_attribute *attr, char *buf);
+};
+#define to_dma_buf_stats_attr(x) container_of(x, struct dma_buf_stats_attribute, attr)
+
+static ssize_t dma_buf_stats_attribute_show(struct kobject *kobj,
+					    struct attribute *attr,
+					    char *buf)
+{
+	struct dma_buf_stats_attribute *attribute;
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	struct dma_buf *dmabuf;
+
+	attribute = to_dma_buf_stats_attr(attr);
+	sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
+	dmabuf = sysfs_entry->dmabuf;
+
+	if (!dmabuf || !attribute->show)
+		return -EIO;
+
+	return attribute->show(dmabuf, attribute, buf);
+}
+
+static const struct sysfs_ops dma_buf_stats_sysfs_ops = {
+	.show = dma_buf_stats_attribute_show,
+};
+
+static ssize_t exporter_name_show(struct dma_buf *dmabuf,
+				  struct dma_buf_stats_attribute *attr,
+				  char *buf)
+{
+	return sprintf(buf, "%s\n", dmabuf->exp_name);
+}
+
+static ssize_t size_show(struct dma_buf *dmabuf,
+			 struct dma_buf_stats_attribute *attr,
+			 char *buf)
+{
+	return sprintf(buf, "%zu\n", dmabuf->size);
+}
+
+static struct dma_buf_stats_attribute exporter_name_attribute =
+	__ATTR_RO(exporter_name);
+static struct dma_buf_stats_attribute size_attribute = __ATTR_RO(size);
+
+static struct attribute *dma_buf_stats_default_attrs[] = {
+	&exporter_name_attribute.attr,
+	&size_attribute.attr,
+	NULL,
+};
+ATTRIBUTE_GROUPS(dma_buf_stats_default);
+
+static void dma_buf_sysfs_release(struct kobject *kobj)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = to_dma_buf_entry_from_kobj(kobj);
+	kfree(sysfs_entry);
+}
+
+static struct kobj_type dma_buf_ktype = {
+	.sysfs_ops = &dma_buf_stats_sysfs_ops,
+	.release = dma_buf_sysfs_release,
+	.default_groups = dma_buf_stats_default_groups,
+};
+
+void dma_buf_stats_teardown(struct dma_buf *dmabuf)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+
+	sysfs_entry = dmabuf->sysfs_entry;
+	if (!sysfs_entry)
+		return;
+
+	kobject_del(&sysfs_entry->kobj);
+	kobject_put(&sysfs_entry->kobj);
+}
+
+static struct kset *dma_buf_stats_kset;
+static struct kset *dma_buf_per_buffer_stats_kset;
+int dma_buf_init_sysfs_statistics(void)
+{
+	dma_buf_stats_kset = kset_create_and_add("dmabuf", NULL, kernel_kobj);
+	if (!dma_buf_stats_kset)
+		return -ENOMEM;
+
+	dma_buf_per_buffer_stats_kset = kset_create_and_add("buffers", NULL,
+							    &dma_buf_stats_kset->kobj);
+	if (!dma_buf_per_buffer_stats_kset) {
+		kset_unregister(dma_buf_stats_kset);
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+void dma_buf_uninit_sysfs_statistics(void)
+{
+	kset_unregister(dma_buf_per_buffer_stats_kset);
+	kset_unregister(dma_buf_stats_kset);
+}
+
+int dma_buf_stats_setup(struct dma_buf *dmabuf)
+{
+	struct dma_buf_sysfs_entry *sysfs_entry;
+	int ret;
+
+	if (!dmabuf || !dmabuf->file)
+		return -EINVAL;
+
+	if (!dmabuf->exp_name) {
+		pr_err("exporter name must not be empty if stats needed\n");
+		return -EINVAL;
+	}
+
+	sysfs_entry = kzalloc(sizeof(struct dma_buf_sysfs_entry), GFP_KERNEL);
+	if (!sysfs_entry)
+		return -ENOMEM;
+
+	sysfs_entry->kobj.kset = dma_buf_per_buffer_stats_kset;
+	sysfs_entry->dmabuf = dmabuf;
+
+	dmabuf->sysfs_entry = sysfs_entry;
+
+	/* create the directory for buffer stats */
+	ret = kobject_init_and_add(&sysfs_entry->kobj, &dma_buf_ktype, NULL,
+				   "%lu", file_inode(dmabuf->file)->i_ino);
+	if (ret)
+		goto err_sysfs_dmabuf;
+
+	return 0;
+
+err_sysfs_dmabuf:
+	kobject_put(&sysfs_entry->kobj);
+	dmabuf->sysfs_entry = NULL;
+	return ret;
+}
diff --git a/drivers/dma-buf/dma-buf-sysfs-stats.h b/drivers/dma-buf/dma-buf-sysfs-stats.h
new file mode 100644
index 0000000..a49c6e2
--- /dev/null
+++ b/drivers/dma-buf/dma-buf-sysfs-stats.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * DMA-BUF sysfs statistics.
+ *
+ * Copyright (C) 2021 Google LLC.
+ */
+
+#ifndef _DMA_BUF_SYSFS_STATS_H
+#define _DMA_BUF_SYSFS_STATS_H
+
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+
+int dma_buf_init_sysfs_statistics(void);
+void dma_buf_uninit_sysfs_statistics(void);
+
+int dma_buf_stats_setup(struct dma_buf *dmabuf);
+
+void dma_buf_stats_teardown(struct dma_buf *dmabuf);
+#else
+
+static inline int dma_buf_init_sysfs_statistics(void)
+{
+	return 0;
+}
+
+static inline void dma_buf_uninit_sysfs_statistics(void) {}
+
+static inline int dma_buf_stats_setup(struct dma_buf *dmabuf)
+{
+	return 0;
+}
+
+static inline void dma_buf_stats_teardown(struct dma_buf *dmabuf) {}
+#endif
+#endif // _DMA_BUF_SYSFS_STATS_H
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 16bbc9b..6970747 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -29,6 +29,8 @@
 #include <uapi/linux/dma-buf.h>
 #include <uapi/linux/magic.h>
 
+#include "dma-buf-sysfs-stats.h"
+
 static inline int is_dma_buf_file(struct file *);
 
 struct dma_buf_list {
@@ -79,6 +81,7 @@
 	if (dmabuf->resv == (struct dma_resv *)&dmabuf[1])
 		dma_resv_fini(dmabuf->resv);
 
+	dma_buf_stats_teardown(dmabuf);
 	WARN_ON(!list_empty(&dmabuf->attachments));
 	module_put(dmabuf->owner);
 	kfree(dmabuf->name);
@@ -575,6 +578,10 @@
 	file->f_mode |= FMODE_LSEEK;
 	dmabuf->file = file;
 
+	ret = dma_buf_stats_setup(dmabuf);
+	if (ret)
+		goto err_sysfs;
+
 	mutex_init(&dmabuf->lock);
 	INIT_LIST_HEAD(&dmabuf->attachments);
 
@@ -584,6 +591,14 @@
 
 	return dmabuf;
 
+err_sysfs:
+	/*
+	 * Set file->f_path.dentry->d_fsdata to NULL so that when
+	 * dma_buf_release() gets invoked by dentry_ops, it exits
+	 * early before calling the release() dma_buf op.
+	 */
+	file->f_path.dentry->d_fsdata = NULL;
+	fput(file);
 err_dmabuf:
 	kfree(dmabuf);
 err_module:
@@ -712,6 +727,9 @@
 	kfree(attach);
 	mutex_unlock(&dmabuf->lock);
 	return ERR_PTR(ret);
+
+	dma_buf_detach(dmabuf, attach);
+	return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(dma_buf_attach);
 
@@ -728,8 +746,9 @@
 	if (WARN_ON(!dmabuf || !attach))
 		return;
 
-	if (attach->sgt)
+	if (attach->sgt) {
 		dmabuf->ops->unmap_dma_buf(attach, attach->sgt, attach->dir);
+	}
 
 	mutex_lock(&dmabuf->lock);
 	list_del(&attach->node);
@@ -974,6 +993,30 @@
 }
 EXPORT_SYMBOL_GPL(dma_buf_begin_cpu_access);
 
+int dma_buf_begin_cpu_access_partial(struct dma_buf *dmabuf,
+				     enum dma_data_direction direction,
+				     unsigned int offset, unsigned int len)
+{
+	int ret = 0;
+
+	if (WARN_ON(!dmabuf))
+		return -EINVAL;
+
+	if (dmabuf->ops->begin_cpu_access_partial)
+		ret = dmabuf->ops->begin_cpu_access_partial(dmabuf, direction,
+							    offset, len);
+
+	/* Ensure that all fences are waited upon - but we first allow
+	 * the native handler the chance to do so more efficiently if it
+	 * chooses. A double invocation here will be reasonably cheap no-op.
+	 */
+	if (ret == 0)
+		ret = __dma_buf_begin_cpu_access(dmabuf, direction);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_begin_cpu_access_partial);
+
 /**
  * dma_buf_end_cpu_access - Must be called after accessing a dma_buf from the
  * cpu in the kernel context. Calls end_cpu_access to allow exporter-specific
@@ -1000,6 +1043,22 @@
 }
 EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access);
 
+int dma_buf_end_cpu_access_partial(struct dma_buf *dmabuf,
+				   enum dma_data_direction direction,
+				   unsigned int offset, unsigned int len)
+{
+	int ret = 0;
+
+	WARN_ON(!dmabuf);
+
+	if (dmabuf->ops->end_cpu_access_partial)
+		ret = dmabuf->ops->end_cpu_access_partial(dmabuf, direction,
+							  offset, len);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_end_cpu_access_partial);
+
 /**
  * dma_buf_kmap - Map a page of the buffer object into kernel address space. The
  * same restrictions as for kmap and friends apply.
@@ -1165,6 +1224,32 @@
 }
 EXPORT_SYMBOL_GPL(dma_buf_vunmap);
 
+int dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags)
+{
+	int ret = 0;
+
+	if (WARN_ON(!dmabuf) || !flags)
+		return -EINVAL;
+
+	if (dmabuf->ops->get_flags)
+		ret = dmabuf->ops->get_flags(dmabuf, flags);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(dma_buf_get_flags);
+
+int dma_buf_get_uuid(struct dma_buf *dmabuf, uuid_t *uuid)
+{
+	if (WARN_ON(!dmabuf) || !uuid)
+		return -EINVAL;
+
+	if (!dmabuf->ops->get_uuid)
+		return -ENODEV;
+
+	return dmabuf->ops->get_uuid(dmabuf, uuid);
+}
+EXPORT_SYMBOL_GPL(dma_buf_get_uuid);
+
 #ifdef CONFIG_DEBUG_FS
 static int dma_buf_debug_show(struct seq_file *s, void *unused)
 {
@@ -1298,6 +1383,12 @@
 
 static int __init dma_buf_init(void)
 {
+	int ret;
+
+	ret = dma_buf_init_sysfs_statistics();
+	if (ret)
+		return ret;
+
 	dma_buf_mnt = kern_mount(&dma_buf_fs_type);
 	if (IS_ERR(dma_buf_mnt))
 		return PTR_ERR(dma_buf_mnt);
@@ -1313,5 +1404,6 @@
 {
 	dma_buf_uninit_debugfs();
 	kern_unmount(dma_buf_mnt);
+	dma_buf_uninit_sysfs_statistics();
 }
 __exitcall(dma_buf_deinit);
diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c
new file mode 100644
index 0000000..0114157
--- /dev/null
+++ b/drivers/dma-buf/dma-heap.c
@@ -0,0 +1,403 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Framework for userspace DMA-BUF allocations
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+
+#include <linux/cdev.h>
+#include <linux/debugfs.h>
+#include <linux/device.h>
+#include <linux/dma-buf.h>
+#include <linux/err.h>
+#include <linux/xarray.h>
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/syscalls.h>
+#include <linux/dma-heap.h>
+#include <uapi/linux/dma-heap.h>
+
+#define DEVNAME "dma_heap"
+
+#define NUM_HEAP_MINORS 128
+
+/**
+ * struct dma_heap - represents a dmabuf heap in the system
+ * @name:		used for debugging/device-node name
+ * @ops:		ops struct for this heap
+ * @heap_devt		heap device node
+ * @list		list head connecting to list of heaps
+ * @heap_cdev		heap char device
+ * @heap_dev		heap device struct
+ *
+ * Represents a heap of memory from which buffers can be made.
+ */
+struct dma_heap {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+	dev_t heap_devt;
+	struct list_head list;
+	struct cdev heap_cdev;
+	struct kref refcount;
+	struct device *heap_dev;
+};
+
+static LIST_HEAD(heap_list);
+static DEFINE_MUTEX(heap_list_lock);
+static dev_t dma_heap_devt;
+static struct class *dma_heap_class;
+static DEFINE_XARRAY_ALLOC(dma_heap_minors);
+
+struct dma_heap *dma_heap_find(const char *name)
+{
+	struct dma_heap *h;
+
+	mutex_lock(&heap_list_lock);
+	list_for_each_entry(h, &heap_list, list) {
+		if (!strcmp(h->name, name)) {
+			kref_get(&h->refcount);
+			mutex_unlock(&heap_list_lock);
+			return h;
+		}
+	}
+	mutex_unlock(&heap_list_lock);
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(dma_heap_find);
+
+
+void dma_heap_buffer_free(struct dma_buf *dmabuf)
+{
+	dma_buf_put(dmabuf);
+}
+EXPORT_SYMBOL_GPL(dma_heap_buffer_free);
+
+struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len,
+				      unsigned int fd_flags,
+				      unsigned int heap_flags)
+{
+	if (fd_flags & ~DMA_HEAP_VALID_FD_FLAGS)
+		return ERR_PTR(-EINVAL);
+
+	if (heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS)
+		return ERR_PTR(-EINVAL);
+	/*
+	 * Allocations from all heaps have to begin
+	 * and end on page boundaries.
+	 */
+	len = PAGE_ALIGN(len);
+	if (!len)
+		return ERR_PTR(-EINVAL);
+
+	return heap->ops->allocate(heap, len, fd_flags, heap_flags);
+}
+EXPORT_SYMBOL_GPL(dma_heap_buffer_alloc);
+
+int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len,
+			    unsigned int fd_flags,
+			    unsigned int heap_flags)
+{
+	struct dma_buf *dmabuf;
+	int fd;
+
+	dmabuf = dma_heap_buffer_alloc(heap, len, fd_flags, heap_flags);
+
+	if (IS_ERR(dmabuf))
+		return PTR_ERR(dmabuf);
+
+	fd = dma_buf_fd(dmabuf, fd_flags);
+	if (fd < 0) {
+		dma_buf_put(dmabuf);
+		/* just return, as put will call release and that will free */
+	}
+	return fd;
+
+}
+EXPORT_SYMBOL_GPL(dma_heap_bufferfd_alloc);
+
+static int dma_heap_open(struct inode *inode, struct file *file)
+{
+	struct dma_heap *heap;
+
+	heap = xa_load(&dma_heap_minors, iminor(inode));
+	if (!heap) {
+		pr_err("dma_heap: minor %d unknown.\n", iminor(inode));
+		return -ENODEV;
+	}
+
+	/* instance data as context */
+	file->private_data = heap;
+	nonseekable_open(inode, file);
+
+	return 0;
+}
+
+static long dma_heap_ioctl_allocate(struct file *file, void *data)
+{
+	struct dma_heap_allocation_data *heap_allocation = data;
+	struct dma_heap *heap = file->private_data;
+	int fd;
+
+	if (heap_allocation->fd)
+		return -EINVAL;
+
+	fd = dma_heap_bufferfd_alloc(heap, heap_allocation->len,
+				     heap_allocation->fd_flags,
+				     heap_allocation->heap_flags);
+	if (fd < 0)
+		return fd;
+
+	heap_allocation->fd = fd;
+
+	return 0;
+}
+
+static unsigned int dma_heap_ioctl_cmds[] = {
+	DMA_HEAP_IOCTL_ALLOC,
+};
+
+static long dma_heap_ioctl(struct file *file, unsigned int ucmd,
+			   unsigned long arg)
+{
+	char stack_kdata[128];
+	char *kdata = stack_kdata;
+	unsigned int kcmd;
+	unsigned int in_size, out_size, drv_size, ksize;
+	int nr = _IOC_NR(ucmd);
+	int ret = 0;
+
+	if (nr >= ARRAY_SIZE(dma_heap_ioctl_cmds))
+		return -EINVAL;
+
+	/* Get the kernel ioctl cmd that matches */
+	kcmd = dma_heap_ioctl_cmds[nr];
+
+	/* Figure out the delta between user cmd size and kernel cmd size */
+	drv_size = _IOC_SIZE(kcmd);
+	out_size = _IOC_SIZE(ucmd);
+	in_size = out_size;
+	if ((ucmd & kcmd & IOC_IN) == 0)
+		in_size = 0;
+	if ((ucmd & kcmd & IOC_OUT) == 0)
+		out_size = 0;
+	ksize = max(max(in_size, out_size), drv_size);
+
+	/* If necessary, allocate buffer for ioctl argument */
+	if (ksize > sizeof(stack_kdata)) {
+		kdata = kmalloc(ksize, GFP_KERNEL);
+		if (!kdata)
+			return -ENOMEM;
+	}
+
+	if (copy_from_user(kdata, (void __user *)arg, in_size) != 0) {
+		ret = -EFAULT;
+		goto err;
+	}
+
+	/* zero out any difference between the kernel/user structure size */
+	if (ksize > in_size)
+		memset(kdata + in_size, 0, ksize - in_size);
+
+	switch (kcmd) {
+	case DMA_HEAP_IOCTL_ALLOC:
+		ret = dma_heap_ioctl_allocate(file, kdata);
+		break;
+	default:
+		ret = -ENOTTY;
+		goto err;
+	}
+
+	if (copy_to_user((void __user *)arg, kdata, out_size) != 0)
+		ret = -EFAULT;
+err:
+	if (kdata != stack_kdata)
+		kfree(kdata);
+	return ret;
+}
+
+static const struct file_operations dma_heap_fops = {
+	.owner          = THIS_MODULE,
+	.open		= dma_heap_open,
+	.unlocked_ioctl = dma_heap_ioctl,
+#ifdef CONFIG_COMPAT
+	.compat_ioctl	= dma_heap_ioctl,
+#endif
+};
+
+/**
+ * dma_heap_get_drvdata() - get per-subdriver data for the heap
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The per-subdriver data for the heap.
+ */
+void *dma_heap_get_drvdata(struct dma_heap *heap)
+{
+	return heap->priv;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_drvdata);
+
+static void dma_heap_release(struct kref *ref)
+{
+	struct dma_heap *heap = container_of(ref, struct dma_heap, refcount);
+	int minor = MINOR(heap->heap_devt);
+
+	/* Note, we already holding the heap_list_lock here */
+	list_del(&heap->list);
+
+	device_destroy(dma_heap_class, heap->heap_devt);
+	cdev_del(&heap->heap_cdev);
+	xa_erase(&dma_heap_minors, minor);
+
+	kfree(heap);
+}
+
+void dma_heap_put(struct dma_heap *h)
+{
+	/*
+	 * Take the heap_list_lock now to avoid racing with code
+	 * scanning the list and then taking a kref.
+	 */
+	mutex_lock(&heap_list_lock);
+	kref_put(&h->refcount, dma_heap_release);
+	mutex_unlock(&heap_list_lock);
+}
+EXPORT_SYMBOL_GPL(dma_heap_put);
+
+/**
+ * dma_heap_get_dev() - get device struct for the heap
+ * @heap: DMA-Heap to retrieve device struct from
+ *
+ * Returns:
+ * The device struct for the heap.
+ */
+struct device *dma_heap_get_dev(struct dma_heap *heap)
+{
+	return heap->heap_dev;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_dev);
+
+/**
+ * dma_heap_get_name() - get heap name
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The char* for the heap name.
+ */
+const char *dma_heap_get_name(struct dma_heap *heap)
+{
+	return heap->name;
+}
+EXPORT_SYMBOL_GPL(dma_heap_get_name);
+
+struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info)
+{
+	struct dma_heap *heap, *err_ret;
+	unsigned int minor;
+	int ret;
+
+	if (!exp_info->name || !strcmp(exp_info->name, "")) {
+		pr_err("dma_heap: Cannot add heap without a name\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	if (!exp_info->ops || !exp_info->ops->allocate) {
+		pr_err("dma_heap: Cannot add heap with invalid ops struct\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	/* check the name is unique */
+	heap = dma_heap_find(exp_info->name);
+	if (heap) {
+		pr_err("dma_heap: Already registered heap named %s\n",
+		       exp_info->name);
+		dma_heap_put(heap);
+		return ERR_PTR(-EINVAL);
+	}
+
+	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
+	if (!heap)
+		return ERR_PTR(-ENOMEM);
+
+	kref_init(&heap->refcount);
+	heap->name = exp_info->name;
+	heap->ops = exp_info->ops;
+	heap->priv = exp_info->priv;
+
+	/* Find unused minor number */
+	ret = xa_alloc(&dma_heap_minors, &minor, heap,
+		       XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL);
+	if (ret < 0) {
+		pr_err("dma_heap: Unable to get minor number for heap\n");
+		err_ret = ERR_PTR(ret);
+		goto err0;
+	}
+
+	/* Create device */
+	heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), minor);
+
+	cdev_init(&heap->heap_cdev, &dma_heap_fops);
+	ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1);
+	if (ret < 0) {
+		pr_err("dma_heap: Unable to add char device\n");
+		err_ret = ERR_PTR(ret);
+		goto err1;
+	}
+
+	heap->heap_dev = device_create(dma_heap_class,
+				       NULL,
+				       heap->heap_devt,
+				       NULL,
+				       heap->name);
+	if (IS_ERR(heap->heap_dev)) {
+		pr_err("dma_heap: Unable to create device\n");
+		err_ret = ERR_CAST(heap->heap_dev);
+		goto err2;
+	}
+
+	/* Make sure it doesn't disappear on us */
+	heap->heap_dev = get_device(heap->heap_dev);
+
+	/* Add heap to the list */
+	mutex_lock(&heap_list_lock);
+	list_add(&heap->list, &heap_list);
+	mutex_unlock(&heap_list_lock);
+
+	return heap;
+
+err2:
+	cdev_del(&heap->heap_cdev);
+err1:
+	xa_erase(&dma_heap_minors, minor);
+err0:
+	kfree(heap);
+	return err_ret;
+}
+EXPORT_SYMBOL_GPL(dma_heap_add);
+
+static char *dma_heap_devnode(struct device *dev, umode_t *mode)
+{
+	return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev));
+}
+
+static int dma_heap_init(void)
+{
+	int ret;
+
+	ret = alloc_chrdev_region(&dma_heap_devt, 0, NUM_HEAP_MINORS, DEVNAME);
+	if (ret)
+		return ret;
+
+	dma_heap_class = class_create(THIS_MODULE, DEVNAME);
+	if (IS_ERR(dma_heap_class)) {
+		unregister_chrdev_region(dma_heap_devt, NUM_HEAP_MINORS);
+		return PTR_ERR(dma_heap_class);
+	}
+	dma_heap_class->devnode = dma_heap_devnode;
+
+	return 0;
+}
+subsys_initcall(dma_heap_init);
diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig
new file mode 100644
index 0000000..7eecaf0
--- /dev/null
+++ b/drivers/dma-buf/heaps/Kconfig
@@ -0,0 +1,22 @@
+config DMABUF_HEAPS_DEFERRED_FREE
+	tristate
+
+config DMABUF_HEAPS_PAGE_POOL
+	tristate
+
+config DMABUF_HEAPS_SYSTEM
+	tristate "DMA-BUF System Heap"
+	depends on DMABUF_HEAPS
+	select DMABUF_HEAPS_PAGE_POOL
+	select DMABUF_HEAPS_DEFERRED_FREE
+	help
+	  Choose this option to enable the system dmabuf heap. The system heap
+	  is backed by pages from the buddy allocator. If in doubt, say Y.
+
+config DMABUF_HEAPS_CMA
+	tristate "DMA-BUF CMA Heap"
+	depends on DMABUF_HEAPS && DMA_CMA
+	help
+	  Choose this option to enable dma-buf CMA heap. This heap is backed
+	  by the Contiguous Memory Allocator (CMA). If your system has these
+	  regions, you should say Y here.
diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile
new file mode 100644
index 0000000..4d4cd94
--- /dev/null
+++ b/drivers/dma-buf/heaps/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_DMABUF_HEAPS_DEFERRED_FREE) += deferred-free-helper.o
+obj-$(CONFIG_DMABUF_HEAPS_PAGE_POOL)	+= page_pool.o
+obj-$(CONFIG_DMABUF_HEAPS_SYSTEM)	+= system_heap.o
+obj-$(CONFIG_DMABUF_HEAPS_CMA)		+= cma_heap.o
diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c
new file mode 100644
index 0000000..f587453
--- /dev/null
+++ b/drivers/dma-buf/heaps/cma_heap.c
@@ -0,0 +1,402 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMABUF CMA heap exporter
+ *
+ * Copyright (C) 2012, 2019, 2020 Linaro Ltd.
+ * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
+ *
+ * Also utilizing parts of Andrew Davis' SRAM heap:
+ * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ *	Andrew F. Davis <afd@ti.com>
+ */
+#include <linux/cma.h>
+#include <linux/dma-buf.h>
+#include <linux/dma-heap.h>
+#include <linux/dma-contiguous.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/io.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/sched/signal.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+
+struct cma_heap {
+	struct dma_heap *heap;
+	struct cma *cma;
+};
+
+struct cma_heap_buffer {
+	struct cma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	unsigned long len;
+	struct page *cma_pages;
+	struct page **pages;
+	pgoff_t pagecount;
+	int vmap_cnt;
+	void *vaddr;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table table;
+	struct list_head list;
+	bool mapped;
+};
+
+static int cma_heap_attach(struct dma_buf *dmabuf,
+			   struct dma_buf_attachment *attachment)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+	int ret;
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	ret = sg_alloc_table_from_pages(&a->table, buffer->pages,
+					buffer->pagecount, 0,
+					buffer->pagecount << PAGE_SHIFT,
+					GFP_KERNEL);
+	if (ret) {
+		kfree(a);
+		return ret;
+	}
+
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void cma_heap_detach(struct dma_buf *dmabuf,
+			    struct dma_buf_attachment *attachment)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a = attachment->priv;
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+
+	sg_free_table(&a->table);
+	kfree(a);
+}
+
+static struct sg_table *cma_heap_map_dma_buf(struct dma_buf_attachment *attachment,
+					     enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	struct sg_table *table = &a->table;
+	int ret;
+
+	ret = dma_map_sgtable(attachment->dev, table, direction, 0);
+	if (ret)
+		return ERR_PTR(-ENOMEM);
+	a->mapped = true;
+	return table;
+}
+
+static void cma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
+				   struct sg_table *table,
+				   enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+
+	a->mapped = false;
+	dma_unmap_sgtable(attachment->dev, table, direction, 0);
+}
+
+static int cma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+					     enum dma_data_direction direction)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	if (buffer->vmap_cnt)
+		invalidate_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	mutex_lock(&buffer->lock);
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sgtable_for_cpu(a->dev, &a->table, direction);
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int cma_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+					   enum dma_data_direction direction)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	if (buffer->vmap_cnt)
+		flush_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	mutex_lock(&buffer->lock);
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sgtable_for_device(a->dev, &a->table, direction);
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static vm_fault_t cma_heap_vm_fault(struct vm_fault *vmf)
+{
+	struct vm_area_struct *vma = vmf->vma;
+	struct cma_heap_buffer *buffer = vma->vm_private_data;
+
+	if (vmf->pgoff > buffer->pagecount)
+		return VM_FAULT_SIGBUS;
+
+	vmf->page = buffer->pages[vmf->pgoff];
+	get_page(vmf->page);
+
+	return 0;
+}
+
+static const struct vm_operations_struct dma_heap_vm_ops = {
+	.fault = cma_heap_vm_fault,
+};
+
+static int cma_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+
+	if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0)
+		return -EINVAL;
+
+	vma->vm_ops = &dma_heap_vm_ops;
+	vma->vm_private_data = buffer;
+
+	return 0;
+}
+
+static void *cma_heap_do_vmap(struct cma_heap_buffer *buffer)
+{
+	void *vaddr;
+
+	vaddr = vmap(buffer->pages, buffer->pagecount, VM_MAP, PAGE_KERNEL);
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+
+static void *cma_heap_vmap(struct dma_buf *dmabuf)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	void *vaddr;
+
+	mutex_lock(&buffer->lock);
+	if (buffer->vmap_cnt) {
+		buffer->vmap_cnt++;
+		vaddr = buffer->vaddr;
+		goto out;
+	}
+
+	vaddr = cma_heap_do_vmap(buffer);
+	if (IS_ERR(vaddr))
+		goto out;
+
+	buffer->vaddr = vaddr;
+	buffer->vmap_cnt++;
+out:
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void cma_heap_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+
+	mutex_lock(&buffer->lock);
+	if (!--buffer->vmap_cnt) {
+		vunmap(buffer->vaddr);
+		buffer->vaddr = NULL;
+	}
+	mutex_unlock(&buffer->lock);
+}
+
+static void cma_heap_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct cma_heap_buffer *buffer = dmabuf->priv;
+	struct cma_heap *cma_heap = buffer->heap;
+
+	if (buffer->vmap_cnt > 0) {
+		WARN(1, "%s: buffer still mapped in the kernel\n", __func__);
+		vunmap(buffer->vaddr);
+	}
+
+	/* free page list */
+	kfree(buffer->pages);
+	/* release memory */
+	cma_release(cma_heap->cma, buffer->cma_pages, buffer->pagecount);
+	kfree(buffer);
+}
+
+static const struct dma_buf_ops cma_heap_buf_ops = {
+	.attach = cma_heap_attach,
+	.detach = cma_heap_detach,
+	.map_dma_buf = cma_heap_map_dma_buf,
+	.unmap_dma_buf = cma_heap_unmap_dma_buf,
+	.begin_cpu_access = cma_heap_dma_buf_begin_cpu_access,
+	.end_cpu_access = cma_heap_dma_buf_end_cpu_access,
+	.mmap = cma_heap_mmap,
+	.vmap = cma_heap_vmap,
+	.vunmap = cma_heap_vunmap,
+	.release = cma_heap_dma_buf_release,
+};
+
+static struct dma_buf *cma_heap_allocate(struct dma_heap *heap,
+					 unsigned long len,
+					 unsigned long fd_flags,
+					 unsigned long heap_flags)
+{
+	struct cma_heap *cma_heap = dma_heap_get_drvdata(heap);
+	struct cma_heap_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	size_t size = PAGE_ALIGN(len);
+	pgoff_t pagecount = size >> PAGE_SHIFT;
+	unsigned long align = get_order(size);
+	struct page *cma_pages;
+	struct dma_buf *dmabuf;
+	int ret = -ENOMEM;
+	pgoff_t pg;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	buffer->len = size;
+
+	if (align > CONFIG_CMA_ALIGNMENT)
+		align = CONFIG_CMA_ALIGNMENT;
+
+	cma_pages = cma_alloc(cma_heap->cma, pagecount, align, false);
+	if (!cma_pages)
+		goto free_buffer;
+
+	/* Clear the cma pages */
+	if (PageHighMem(cma_pages)) {
+		unsigned long nr_clear_pages = pagecount;
+		struct page *page = cma_pages;
+
+		while (nr_clear_pages > 0) {
+			void *vaddr = kmap_atomic(page);
+
+			memset(vaddr, 0, PAGE_SIZE);
+			kunmap_atomic(vaddr);
+			/*
+			 * Avoid wasting time zeroing memory if the process
+			 * has been killed by by SIGKILL
+			 */
+			if (fatal_signal_pending(current))
+				goto free_cma;
+			page++;
+			nr_clear_pages--;
+		}
+	} else {
+		memset(page_address(cma_pages), 0, size);
+	}
+
+	buffer->pages = kmalloc_array(pagecount, sizeof(*buffer->pages), GFP_KERNEL);
+	if (!buffer->pages) {
+		ret = -ENOMEM;
+		goto free_cma;
+	}
+
+	for (pg = 0; pg < pagecount; pg++)
+		buffer->pages[pg] = &cma_pages[pg];
+
+	buffer->cma_pages = cma_pages;
+	buffer->heap = cma_heap;
+	buffer->pagecount = pagecount;
+
+	/* create the dmabuf */
+	exp_info.exp_name = dma_heap_get_name(heap);
+	exp_info.ops = &cma_heap_buf_ops;
+	exp_info.size = buffer->len;
+	exp_info.flags = fd_flags;
+	exp_info.priv = buffer;
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf)) {
+		ret = PTR_ERR(dmabuf);
+		goto free_pages;
+	}
+
+	return dmabuf;
+
+free_pages:
+	kfree(buffer->pages);
+free_cma:
+	cma_release(cma_heap->cma, cma_pages, pagecount);
+free_buffer:
+	kfree(buffer);
+
+	return ERR_PTR(ret);
+}
+
+static const struct dma_heap_ops cma_heap_ops = {
+	.allocate = cma_heap_allocate,
+};
+
+static int __add_cma_heap(struct cma *cma, void *data)
+{
+	struct cma_heap *cma_heap;
+	struct dma_heap_export_info exp_info;
+
+	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
+	if (!cma_heap)
+		return -ENOMEM;
+	cma_heap->cma = cma;
+
+	exp_info.name = cma_get_name(cma);
+	exp_info.ops = &cma_heap_ops;
+	exp_info.priv = cma_heap;
+
+	cma_heap->heap = dma_heap_add(&exp_info);
+	if (IS_ERR(cma_heap->heap)) {
+		int ret = PTR_ERR(cma_heap->heap);
+
+		kfree(cma_heap);
+		return ret;
+	}
+
+	return 0;
+}
+
+static int add_default_cma_heap(void)
+{
+	struct cma *default_cma = dev_get_cma_area(NULL);
+	int ret = 0;
+
+	if (default_cma)
+		ret = __add_cma_heap(default_cma, NULL);
+
+	return ret;
+}
+module_init(add_default_cma_heap);
+MODULE_DESCRIPTION("DMA-BUF CMA Heap");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma-buf/heaps/deferred-free-helper.c b/drivers/dma-buf/heaps/deferred-free-helper.c
new file mode 100644
index 0000000..dd09c4b
--- /dev/null
+++ b/drivers/dma-buf/heaps/deferred-free-helper.c
@@ -0,0 +1,142 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Deferred dmabuf freeing helper
+ *
+ * Copyright (C) 2020 Linaro, Ltd.
+ *
+ * Based on the ION page pool code
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/freezer.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+#include <uapi/linux/sched/types.h>
+
+#include "deferred-free-helper.h"
+
+static LIST_HEAD(free_list);
+static size_t list_nr_pages;
+wait_queue_head_t freelist_waitqueue;
+struct task_struct *freelist_task;
+static DEFINE_SPINLOCK(free_list_lock);
+
+void deferred_free(struct deferred_freelist_item *item,
+		   void (*free)(struct deferred_freelist_item*,
+				enum df_reason),
+		   size_t nr_pages)
+{
+	unsigned long flags;
+
+	INIT_LIST_HEAD(&item->list);
+	item->nr_pages = nr_pages;
+	item->free = free;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	list_add(&item->list, &free_list);
+	list_nr_pages += nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+	wake_up(&freelist_waitqueue);
+}
+EXPORT_SYMBOL_GPL(deferred_free);
+
+static size_t free_one_item(enum df_reason reason)
+{
+	unsigned long flags;
+	size_t nr_pages;
+	struct deferred_freelist_item *item;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	if (list_empty(&free_list)) {
+		spin_unlock_irqrestore(&free_list_lock, flags);
+		return 0;
+	}
+	item = list_first_entry(&free_list, struct deferred_freelist_item, list);
+	list_del(&item->list);
+	nr_pages = item->nr_pages;
+	list_nr_pages -= nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+
+	item->free(item, reason);
+	return nr_pages;
+}
+
+static unsigned long get_freelist_nr_pages(void)
+{
+	unsigned long nr_pages;
+	unsigned long flags;
+
+	spin_lock_irqsave(&free_list_lock, flags);
+	nr_pages = list_nr_pages;
+	spin_unlock_irqrestore(&free_list_lock, flags);
+	return nr_pages;
+}
+
+static unsigned long freelist_shrink_count(struct shrinker *shrinker,
+					   struct shrink_control *sc)
+{
+	return get_freelist_nr_pages();
+}
+
+static unsigned long freelist_shrink_scan(struct shrinker *shrinker,
+					  struct shrink_control *sc)
+{
+	unsigned long total_freed = 0;
+
+	if (sc->nr_to_scan == 0)
+		return 0;
+
+	while (total_freed < sc->nr_to_scan) {
+		size_t pages_freed = free_one_item(DF_UNDER_PRESSURE);
+
+		if (!pages_freed)
+			break;
+
+		total_freed += pages_freed;
+	}
+
+	return total_freed;
+}
+
+static struct shrinker freelist_shrinker = {
+	.count_objects = freelist_shrink_count,
+	.scan_objects = freelist_shrink_scan,
+	.seeks = DEFAULT_SEEKS,
+	.batch = 0,
+};
+
+static int deferred_free_thread(void *data)
+{
+	while (true) {
+		wait_event_freezable(freelist_waitqueue,
+				     get_freelist_nr_pages() > 0);
+
+		free_one_item(DF_NORMAL);
+	}
+
+	return 0;
+}
+
+static int deferred_freelist_init(void)
+{
+	struct sched_param param = { .sched_priority = 0 };
+
+	list_nr_pages = 0;
+
+	init_waitqueue_head(&freelist_waitqueue);
+	freelist_task = kthread_run(deferred_free_thread, NULL,
+				    "%s", "dmabuf-deferred-free-worker");
+	if (IS_ERR(freelist_task)) {
+		pr_err("Creating thread for deferred free failed\n");
+		return -1;
+	}
+	sched_setscheduler(freelist_task, SCHED_IDLE, &param);
+
+	return register_shrinker(&freelist_shrinker);
+}
+module_init(deferred_freelist_init);
+MODULE_LICENSE("GPL v2");
+
diff --git a/drivers/dma-buf/heaps/deferred-free-helper.h b/drivers/dma-buf/heaps/deferred-free-helper.h
new file mode 100644
index 0000000..1194032
--- /dev/null
+++ b/drivers/dma-buf/heaps/deferred-free-helper.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef DEFERRED_FREE_HELPER_H
+#define DEFERRED_FREE_HELPER_H
+
+/**
+ * df_reason - enum for reason why item was freed
+ *
+ * This provides a reason for why the free function was called
+ * on the item. This is useful when deferred_free is used in
+ * combination with a pagepool, so under pressure the page can
+ * be immediately freed.
+ *
+ * DF_NORMAL:         Normal deferred free
+ *
+ * DF_UNDER_PRESSURE: Free was called because the system
+ *                    is under memory pressure. Usually
+ *                    from a shrinker. Avoid allocating
+ *                    memory in the free call, as it may
+ *                    fail.
+ */
+enum df_reason {
+	DF_NORMAL,
+	DF_UNDER_PRESSURE,
+};
+
+/**
+ * deferred_freelist_item - item structure for deferred freelist
+ *
+ * This is to be added to the structure for whatever you want to
+ * defer freeing on.
+ *
+ * @nr_pages: number of pages used by item to be freed
+ * @free: function pointer to be called when freeing the item
+ * @list: list entry for the deferred list
+ */
+struct deferred_freelist_item {
+	size_t nr_pages;
+	void (*free)(struct deferred_freelist_item *i,
+		     enum df_reason reason);
+	struct list_head list;
+};
+
+/**
+ * deferred_free - call to add item to the deferred free list
+ *
+ * @item: Pointer to deferred_freelist_item field of a structure
+ * @free: Function pointer to the free call
+ * @nr_pages: number of pages to be freed
+ */
+void deferred_free(struct deferred_freelist_item *item,
+		   void (*free)(struct deferred_freelist_item *i,
+				enum df_reason reason),
+		   size_t nr_pages);
+#endif
diff --git a/drivers/dma-buf/heaps/page_pool.c b/drivers/dma-buf/heaps/page_pool.c
new file mode 100644
index 0000000..37faab4
--- /dev/null
+++ b/drivers/dma-buf/heaps/page_pool.c
@@ -0,0 +1,248 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMA BUF page pool system
+ *
+ * Copyright (C) 2020 Linaro Ltd.
+ *
+ * Based on the ION page pool code
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/freezer.h>
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+#include "page_pool.h"
+
+static LIST_HEAD(pool_list);
+static DEFINE_MUTEX(pool_list_lock);
+
+static inline
+struct page *dmabuf_page_pool_alloc_pages(struct dmabuf_page_pool *pool)
+{
+	if (fatal_signal_pending(current))
+		return NULL;
+	return alloc_pages(pool->gfp_mask, pool->order);
+}
+
+static inline void dmabuf_page_pool_free_pages(struct dmabuf_page_pool *pool,
+					       struct page *page)
+{
+	__free_pages(page, pool->order);
+}
+
+static void dmabuf_page_pool_add(struct dmabuf_page_pool *pool, struct page *page)
+{
+	int index;
+
+	if (PageHighMem(page))
+		index = POOL_HIGHPAGE;
+	else
+		index = POOL_LOWPAGE;
+
+	mutex_lock(&pool->mutex);
+	list_add_tail(&page->lru, &pool->items[index]);
+	pool->count[index]++;
+	mutex_unlock(&pool->mutex);
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+			    1 << pool->order);
+}
+
+static struct page *dmabuf_page_pool_remove(struct dmabuf_page_pool *pool, int index)
+{
+	struct page *page;
+
+	mutex_lock(&pool->mutex);
+	page = list_first_entry_or_null(&pool->items[index], struct page, lru);
+	if (page) {
+		pool->count[index]--;
+		list_del(&page->lru);
+		mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+				    -(1 << pool->order));
+	}
+	mutex_unlock(&pool->mutex);
+
+	return page;
+}
+
+static struct page *dmabuf_page_pool_fetch(struct dmabuf_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	page = dmabuf_page_pool_remove(pool, POOL_HIGHPAGE);
+	if (!page)
+		page = dmabuf_page_pool_remove(pool, POOL_LOWPAGE);
+
+	return page;
+}
+
+struct page *dmabuf_page_pool_alloc(struct dmabuf_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	if (WARN_ON(!pool))
+		return NULL;
+
+	page = dmabuf_page_pool_fetch(pool);
+
+	if (!page)
+		page = dmabuf_page_pool_alloc_pages(pool);
+	return page;
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_alloc);
+
+void dmabuf_page_pool_free(struct dmabuf_page_pool *pool, struct page *page)
+{
+	if (WARN_ON(pool->order != compound_order(page)))
+		return;
+
+	dmabuf_page_pool_add(pool, page);
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_free);
+
+static int dmabuf_page_pool_total(struct dmabuf_page_pool *pool, bool high)
+{
+	int count = pool->count[POOL_LOWPAGE];
+
+	if (high)
+		count += pool->count[POOL_HIGHPAGE];
+
+	return count << pool->order;
+}
+
+struct dmabuf_page_pool *dmabuf_page_pool_create(gfp_t gfp_mask, unsigned int order)
+{
+	struct dmabuf_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+	int i;
+
+	if (!pool)
+		return NULL;
+
+	for (i = 0; i < POOL_TYPE_SIZE; i++) {
+		pool->count[i] = 0;
+		INIT_LIST_HEAD(&pool->items[i]);
+	}
+	pool->gfp_mask = gfp_mask | __GFP_COMP;
+	pool->order = order;
+	mutex_init(&pool->mutex);
+
+	mutex_lock(&pool_list_lock);
+	list_add(&pool->list, &pool_list);
+	mutex_unlock(&pool_list_lock);
+
+	return pool;
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_create);
+
+void dmabuf_page_pool_destroy(struct dmabuf_page_pool *pool)
+{
+	struct page *page;
+	int i;
+
+	/* Remove us from the pool list */
+	mutex_lock(&pool_list_lock);
+	list_del(&pool->list);
+	mutex_unlock(&pool_list_lock);
+
+	/* Free any remaining pages in the pool */
+	for (i = 0; i < POOL_TYPE_SIZE; i++) {
+		while ((page = dmabuf_page_pool_remove(pool, i)))
+			dmabuf_page_pool_free_pages(pool, page);
+	}
+
+	kfree(pool);
+}
+EXPORT_SYMBOL_GPL(dmabuf_page_pool_destroy);
+
+static int dmabuf_page_pool_do_shrink(struct dmabuf_page_pool *pool, gfp_t gfp_mask,
+				      int nr_to_scan)
+{
+	int freed = 0;
+	bool high;
+
+	if (current_is_kswapd())
+		high = true;
+	else
+		high = !!(gfp_mask & __GFP_HIGHMEM);
+
+	if (nr_to_scan == 0)
+		return dmabuf_page_pool_total(pool, high);
+
+	while (freed < nr_to_scan) {
+		struct page *page;
+
+		/* Try to free low pages first */
+		page = dmabuf_page_pool_remove(pool, POOL_LOWPAGE);
+		if (!page)
+			page = dmabuf_page_pool_remove(pool, POOL_HIGHPAGE);
+
+		if (!page)
+			break;
+
+		dmabuf_page_pool_free_pages(pool, page);
+		freed += (1 << pool->order);
+	}
+
+	return freed;
+}
+
+static int dmabuf_page_pool_shrink(gfp_t gfp_mask, int nr_to_scan)
+{
+	struct dmabuf_page_pool *pool;
+	int nr_total = 0;
+	int nr_freed;
+	int only_scan = 0;
+
+	if (!nr_to_scan)
+		only_scan = 1;
+
+	mutex_lock(&pool_list_lock);
+	list_for_each_entry(pool, &pool_list, list) {
+		if (only_scan) {
+			nr_total += dmabuf_page_pool_do_shrink(pool,
+							       gfp_mask,
+							       nr_to_scan);
+		} else {
+			nr_freed = dmabuf_page_pool_do_shrink(pool,
+							      gfp_mask,
+							      nr_to_scan);
+			nr_to_scan -= nr_freed;
+			nr_total += nr_freed;
+			if (nr_to_scan <= 0)
+				break;
+		}
+	}
+	mutex_unlock(&pool_list_lock);
+
+	return nr_total;
+}
+
+static unsigned long dmabuf_page_pool_shrink_count(struct shrinker *shrinker,
+						   struct shrink_control *sc)
+{
+	return dmabuf_page_pool_shrink(sc->gfp_mask, 0);
+}
+
+static unsigned long dmabuf_page_pool_shrink_scan(struct shrinker *shrinker,
+						  struct shrink_control *sc)
+{
+	if (sc->nr_to_scan == 0)
+		return 0;
+	return dmabuf_page_pool_shrink(sc->gfp_mask, sc->nr_to_scan);
+}
+
+struct shrinker pool_shrinker = {
+	.count_objects = dmabuf_page_pool_shrink_count,
+	.scan_objects = dmabuf_page_pool_shrink_scan,
+	.seeks = DEFAULT_SEEKS,
+	.batch = 0,
+};
+
+static int dmabuf_page_pool_init_shrinker(void)
+{
+	return register_shrinker(&pool_shrinker);
+}
+module_init(dmabuf_page_pool_init_shrinker);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma-buf/heaps/page_pool.h b/drivers/dma-buf/heaps/page_pool.h
new file mode 100644
index 0000000..6b083b0
--- /dev/null
+++ b/drivers/dma-buf/heaps/page_pool.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * DMA BUF PagePool implementation
+ * Based on earlier ION code by Google
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2020 Linaro Ltd.
+ */
+
+#ifndef _DMABUF_PAGE_POOL_H
+#define _DMABUF_PAGE_POOL_H
+
+#include <linux/device.h>
+#include <linux/kref.h>
+#include <linux/mm_types.h>
+#include <linux/mutex.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+
+/* page types we track in the pool */
+enum {
+	POOL_LOWPAGE,      /* Clean lowmem pages */
+	POOL_HIGHPAGE,     /* Clean highmem pages */
+
+	POOL_TYPE_SIZE,
+};
+
+/**
+ * struct dmabuf_page_pool - pagepool struct
+ * @count[]:		array of number of pages of that type in the pool
+ * @items[]:		array of list of pages of the specific type
+ * @mutex:		lock protecting this struct and especially the count
+ *			item list
+ * @gfp_mask:		gfp_mask to use from alloc
+ * @order:		order of pages in the pool
+ * @list:		list node for list of pools
+ *
+ * Allows you to keep a pool of pre allocated pages to use
+ */
+struct dmabuf_page_pool {
+	int count[POOL_TYPE_SIZE];
+	struct list_head items[POOL_TYPE_SIZE];
+	struct mutex mutex;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct list_head list;
+};
+
+struct dmabuf_page_pool *dmabuf_page_pool_create(gfp_t gfp_mask,
+						 unsigned int order);
+void dmabuf_page_pool_destroy(struct dmabuf_page_pool *pool);
+struct page *dmabuf_page_pool_alloc(struct dmabuf_page_pool *pool);
+void dmabuf_page_pool_free(struct dmabuf_page_pool *pool, struct page *page);
+
+#endif /* _DMABUF_PAGE_POOL_H */
diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c
new file mode 100644
index 0000000..db527db
--- /dev/null
+++ b/drivers/dma-buf/heaps/system_heap.c
@@ -0,0 +1,571 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * DMABUF System heap exporter
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019, 2020 Linaro Ltd.
+ *
+ * Portions based off of Andrew Davis' SRAM heap:
+ * Copyright (C) 2019 Texas Instruments Incorporated - http://www.ti.com/
+ *	Andrew F. Davis <afd@ti.com>
+ */
+
+#include <linux/dma-buf.h>
+#include <linux/dma-mapping.h>
+#include <linux/dma-heap.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/sched/signal.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "page_pool.h"
+#include "deferred-free-helper.h"
+
+static struct dma_heap *sys_heap;
+static struct dma_heap *sys_uncached_heap;
+
+struct system_heap_buffer {
+	struct dma_heap *heap;
+	struct list_head attachments;
+	struct mutex lock;
+	unsigned long len;
+	struct sg_table sg_table;
+	int vmap_cnt;
+	void *vaddr;
+	struct deferred_freelist_item deferred_free;
+
+	bool uncached;
+};
+
+struct dma_heap_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped;
+
+	bool uncached;
+};
+
+#define HIGH_ORDER_GFP  (((GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN \
+				| __GFP_NORETRY) & ~__GFP_RECLAIM) \
+				| __GFP_COMP)
+#define LOW_ORDER_GFP (GFP_HIGHUSER | __GFP_ZERO | __GFP_COMP)
+static gfp_t order_flags[] = {HIGH_ORDER_GFP, LOW_ORDER_GFP, LOW_ORDER_GFP};
+/*
+ * The selection of the orders used for allocation (1MB, 64K, 4K) is designed
+ * to match with the sizes often found in IOMMUs. Using order 4 pages instead
+ * of order 0 pages can significantly improve the performance of many IOMMUs
+ * by reducing TLB pressure and time spent updating page tables.
+ */
+static const unsigned int orders[] = {8, 4, 0};
+#define NUM_ORDERS ARRAY_SIZE(orders)
+struct dmabuf_page_pool *pools[NUM_ORDERS];
+
+static struct sg_table *dup_sg_table(struct sg_table *table)
+{
+	struct sg_table *new_table;
+	int ret, i;
+	struct scatterlist *sg, *new_sg;
+
+	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
+	if (!new_table)
+		return ERR_PTR(-ENOMEM);
+
+	ret = sg_alloc_table(new_table, table->orig_nents, GFP_KERNEL);
+	if (ret) {
+		kfree(new_table);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	new_sg = new_table->sgl;
+	for_each_sgtable_sg(table, sg, i) {
+		sg_set_page(new_sg, sg_page(sg), sg->length, sg->offset);
+		new_sg = sg_next(new_sg);
+	}
+
+	return new_table;
+}
+
+static int system_heap_attach(struct dma_buf *dmabuf,
+			      struct dma_buf_attachment *attachment)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+	struct sg_table *table;
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	table = dup_sg_table(&buffer->sg_table);
+	if (IS_ERR(table)) {
+		kfree(a);
+		return -ENOMEM;
+	}
+
+	a->table = table;
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+	a->uncached = buffer->uncached;
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void system_heap_detach(struct dma_buf *dmabuf,
+			       struct dma_buf_attachment *attachment)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a = attachment->priv;
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+
+	sg_free_table(a->table);
+	kfree(a->table);
+	kfree(a);
+}
+
+static struct sg_table *system_heap_map_dma_buf(struct dma_buf_attachment *attachment,
+						enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	struct sg_table *table = a->table;
+	int attr = 0;
+	int ret;
+
+	if (a->uncached)
+		attr = DMA_ATTR_SKIP_CPU_SYNC;
+
+	ret = dma_map_sgtable(attachment->dev, table, direction, attr);
+	if (ret)
+		return ERR_PTR(ret);
+
+	a->mapped = true;
+	return table;
+}
+
+static void system_heap_unmap_dma_buf(struct dma_buf_attachment *attachment,
+				      struct sg_table *table,
+				      enum dma_data_direction direction)
+{
+	struct dma_heap_attachment *a = attachment->priv;
+	int attr = 0;
+
+	if (a->uncached)
+		attr = DMA_ATTR_SKIP_CPU_SYNC;
+	a->mapped = false;
+	dma_unmap_sgtable(attachment->dev, table, direction, attr);
+}
+
+static int system_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+						enum dma_data_direction direction)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	mutex_lock(&buffer->lock);
+
+	if (buffer->vmap_cnt)
+		invalidate_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	if (!buffer->uncached) {
+		list_for_each_entry(a, &buffer->attachments, list) {
+			if (!a->mapped)
+				continue;
+			dma_sync_sgtable_for_cpu(a->dev, a->table, direction);
+		}
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int system_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+					      enum dma_data_direction direction)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct dma_heap_attachment *a;
+
+	mutex_lock(&buffer->lock);
+
+	if (buffer->vmap_cnt)
+		flush_kernel_vmap_range(buffer->vaddr, buffer->len);
+
+	if (!buffer->uncached) {
+		list_for_each_entry(a, &buffer->attachments, list) {
+			if (!a->mapped)
+				continue;
+			dma_sync_sgtable_for_device(a->dev, a->table, direction);
+		}
+	}
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int system_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	struct sg_table *table = &buffer->sg_table;
+	unsigned long addr = vma->vm_start;
+	struct sg_page_iter piter;
+	int ret;
+
+	if (buffer->uncached)
+		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
+
+	for_each_sgtable_page(table, &piter, vma->vm_pgoff) {
+		struct page *page = sg_page_iter_page(&piter);
+
+		ret = remap_pfn_range(vma, addr, page_to_pfn(page), PAGE_SIZE,
+				      vma->vm_page_prot);
+		if (ret)
+			return ret;
+		addr += PAGE_SIZE;
+		if (addr >= vma->vm_end)
+			return 0;
+	}
+	return 0;
+}
+
+static void *system_heap_do_vmap(struct system_heap_buffer *buffer)
+{
+	struct sg_table *table = &buffer->sg_table;
+	int npages = PAGE_ALIGN(buffer->len) / PAGE_SIZE;
+	struct page **pages = vmalloc(sizeof(struct page *) * npages);
+	struct page **tmp = pages;
+	struct sg_page_iter piter;
+	pgprot_t pgprot = PAGE_KERNEL;
+	void *vaddr;
+
+	if (!pages)
+		return ERR_PTR(-ENOMEM);
+
+	if (buffer->uncached)
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	for_each_sgtable_page(table, &piter, 0) {
+		WARN_ON(tmp - pages >= npages);
+		*tmp++ = sg_page_iter_page(&piter);
+	}
+
+	vaddr = vmap(pages, npages, VM_MAP, pgprot);
+	vfree(pages);
+
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+
+static void *system_heap_vmap(struct dma_buf *dmabuf)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	void *vaddr;
+
+	mutex_lock(&buffer->lock);
+	if (buffer->vmap_cnt) {
+		buffer->vmap_cnt++;
+		vaddr = buffer->vaddr;
+		goto out;
+	}
+
+	vaddr = system_heap_do_vmap(buffer);
+	if (IS_ERR(vaddr))
+		goto out;
+
+	buffer->vaddr = vaddr;
+	buffer->vmap_cnt++;
+out:
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void system_heap_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+
+	mutex_lock(&buffer->lock);
+	if (!--buffer->vmap_cnt) {
+		vunmap(buffer->vaddr);
+		buffer->vaddr = NULL;
+	}
+	mutex_unlock(&buffer->lock);
+}
+
+static int system_heap_zero_buffer(struct system_heap_buffer *buffer)
+{
+	struct sg_table *sgt = &buffer->sg_table;
+	struct sg_page_iter piter;
+	struct page *p;
+	void *vaddr;
+	int ret = 0;
+
+	for_each_sgtable_page(sgt, &piter, 0) {
+		p = sg_page_iter_page(&piter);
+		vaddr = kmap_atomic(p);
+		memset(vaddr, 0, PAGE_SIZE);
+		kunmap_atomic(vaddr);
+	}
+
+	return ret;
+}
+
+static void system_heap_buf_free(struct deferred_freelist_item *item,
+				 enum df_reason reason)
+{
+	struct system_heap_buffer *buffer;
+	struct sg_table *table;
+	struct scatterlist *sg;
+	int i, j;
+
+	buffer = container_of(item, struct system_heap_buffer, deferred_free);
+	/* Zero the buffer pages before adding back to the pool */
+	if (reason == DF_NORMAL)
+		if (system_heap_zero_buffer(buffer))
+			reason = DF_UNDER_PRESSURE; // On failure, just free
+
+	table = &buffer->sg_table;
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		struct page *page = sg_page(sg);
+
+		if (reason == DF_UNDER_PRESSURE) {
+			__free_pages(page, compound_order(page));
+		} else {
+			for (j = 0; j < NUM_ORDERS; j++) {
+				if (compound_order(page) == orders[j])
+					break;
+			}
+			dmabuf_page_pool_free(pools[j], page);
+		}
+	}
+	sg_free_table(table);
+	kfree(buffer);
+}
+
+static void system_heap_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct system_heap_buffer *buffer = dmabuf->priv;
+	int npages = PAGE_ALIGN(buffer->len) / PAGE_SIZE;
+
+	deferred_free(&buffer->deferred_free, system_heap_buf_free, npages);
+}
+
+static const struct dma_buf_ops system_heap_buf_ops = {
+	.attach = system_heap_attach,
+	.detach = system_heap_detach,
+	.map_dma_buf = system_heap_map_dma_buf,
+	.unmap_dma_buf = system_heap_unmap_dma_buf,
+	.begin_cpu_access = system_heap_dma_buf_begin_cpu_access,
+	.end_cpu_access = system_heap_dma_buf_end_cpu_access,
+	.mmap = system_heap_mmap,
+	.vmap = system_heap_vmap,
+	.vunmap = system_heap_vunmap,
+	.release = system_heap_dma_buf_release,
+};
+
+static struct page *alloc_largest_available(unsigned long size,
+					    unsigned int max_order)
+{
+	struct page *page;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		if (size <  (PAGE_SIZE << orders[i]))
+			continue;
+		if (max_order < orders[i])
+			continue;
+		page = dmabuf_page_pool_alloc(pools[i]);
+		if (!page)
+			continue;
+		return page;
+	}
+	return NULL;
+}
+
+static struct dma_buf *system_heap_do_allocate(struct dma_heap *heap,
+					       unsigned long len,
+					       unsigned long fd_flags,
+					       unsigned long heap_flags,
+					       bool uncached)
+{
+	struct system_heap_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	unsigned long size_remaining = len;
+	unsigned int max_order = orders[0];
+	struct dma_buf *dmabuf;
+	struct sg_table *table;
+	struct scatterlist *sg;
+	struct list_head pages;
+	struct page *page, *tmp_page;
+	int i, ret = -ENOMEM;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	buffer->heap = heap;
+	buffer->len = len;
+	buffer->uncached = uncached;
+
+	INIT_LIST_HEAD(&pages);
+	i = 0;
+	while (size_remaining > 0) {
+		/*
+		 * Avoid trying to allocate memory if the process
+		 * has been killed by SIGKILL
+		 */
+		if (fatal_signal_pending(current))
+			goto free_buffer;
+
+		page = alloc_largest_available(size_remaining, max_order);
+		if (!page)
+			goto free_buffer;
+
+		list_add_tail(&page->lru, &pages);
+		size_remaining -= page_size(page);
+		max_order = compound_order(page);
+		i++;
+	}
+
+	table = &buffer->sg_table;
+	if (sg_alloc_table(table, i, GFP_KERNEL))
+		goto free_buffer;
+
+	sg = table->sgl;
+	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
+		sg_set_page(sg, page, page_size(page), 0);
+		sg = sg_next(sg);
+		list_del(&page->lru);
+	}
+
+	/* create the dmabuf */
+	exp_info.exp_name = dma_heap_get_name(heap);
+	exp_info.ops = &system_heap_buf_ops;
+	exp_info.size = buffer->len;
+	exp_info.flags = fd_flags;
+	exp_info.priv = buffer;
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf)) {
+		ret = PTR_ERR(dmabuf);
+		goto free_pages;
+	}
+
+	/*
+	 * For uncached buffers, we need to initially flush cpu cache, since
+	 * the __GFP_ZERO on the allocation means the zeroing was done by the
+	 * cpu and thus it is likely cached. Map (and implicitly flush) and
+	 * unmap it now so we don't get corruption later on.
+	 */
+	if (buffer->uncached) {
+		dma_map_sgtable(dma_heap_get_dev(heap), table, DMA_BIDIRECTIONAL, 0);
+		dma_unmap_sgtable(dma_heap_get_dev(heap), table, DMA_BIDIRECTIONAL, 0);
+	}
+
+	return dmabuf;
+
+free_pages:
+	for_each_sgtable_sg(table, sg, i) {
+		struct page *p = sg_page(sg);
+
+		__free_pages(p, compound_order(p));
+	}
+	sg_free_table(table);
+free_buffer:
+	list_for_each_entry_safe(page, tmp_page, &pages, lru)
+		__free_pages(page, compound_order(page));
+	kfree(buffer);
+
+	return ERR_PTR(ret);
+}
+
+static struct dma_buf *system_heap_allocate(struct dma_heap *heap,
+					    unsigned long len,
+					    unsigned long fd_flags,
+					    unsigned long heap_flags)
+{
+	return system_heap_do_allocate(heap, len, fd_flags, heap_flags, false);
+}
+
+static const struct dma_heap_ops system_heap_ops = {
+	.allocate = system_heap_allocate,
+};
+
+static struct dma_buf *system_uncached_heap_allocate(struct dma_heap *heap,
+						     unsigned long len,
+						     unsigned long fd_flags,
+						     unsigned long heap_flags)
+{
+	return system_heap_do_allocate(heap, len, fd_flags, heap_flags, true);
+}
+
+/* Dummy function to be used until we can call coerce_mask_and_coherent */
+static struct dma_buf *system_uncached_heap_not_initialized(struct dma_heap *heap,
+							    unsigned long len,
+							    unsigned long fd_flags,
+							    unsigned long heap_flags)
+{
+	return ERR_PTR(-EBUSY);
+}
+
+static struct dma_heap_ops system_uncached_heap_ops = {
+	/* After system_heap_create is complete, we will swap this */
+	.allocate = system_uncached_heap_not_initialized,
+};
+
+static int system_heap_create(void)
+{
+	struct dma_heap_export_info exp_info;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		pools[i] = dmabuf_page_pool_create(order_flags[i], orders[i]);
+
+		if (!pools[i]) {
+			int j;
+
+			pr_err("%s: page pool creation failed!\n", __func__);
+			for (j = 0; j < i; j++)
+				dmabuf_page_pool_destroy(pools[j]);
+			return -ENOMEM;
+		}
+	}
+
+	exp_info.name = "system";
+	exp_info.ops = &system_heap_ops;
+	exp_info.priv = NULL;
+
+	sys_heap = dma_heap_add(&exp_info);
+	if (IS_ERR(sys_heap))
+		return PTR_ERR(sys_heap);
+
+	exp_info.name = "system-uncached";
+	exp_info.ops = &system_uncached_heap_ops;
+	exp_info.priv = NULL;
+
+	sys_uncached_heap = dma_heap_add(&exp_info);
+	if (IS_ERR(sys_uncached_heap))
+		return PTR_ERR(sys_uncached_heap);
+
+	dma_coerce_mask_and_coherent(dma_heap_get_dev(sys_uncached_heap), DMA_BIT_MASK(64));
+	mb(); /* make sure we only set allocate after dma_mask is set */
+	system_uncached_heap_ops.allocate = system_uncached_heap_allocate;
+
+	return 0;
+}
+module_init(system_heap_create);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c
index b966115..8464da7 100644
--- a/drivers/dma/sprd-dma.c
+++ b/drivers/dma/sprd-dma.c
@@ -99,6 +99,7 @@
 /* DMA_CHN_WARP_* register definition */
 #define SPRD_DMA_HIGH_ADDR_MASK		GENMASK(31, 28)
 #define SPRD_DMA_LOW_ADDR_MASK		GENMASK(31, 0)
+#define SPRD_DMA_WRAP_ADDR_MASK		GENMASK(27, 0)
 #define SPRD_DMA_HIGH_ADDR_OFFSET	4
 
 /* SPRD_DMA_CHN_INTC register definition */
@@ -118,6 +119,8 @@
 #define SPRD_DMA_SWT_MODE_OFFSET	26
 #define SPRD_DMA_REQ_MODE_OFFSET	24
 #define SPRD_DMA_REQ_MODE_MASK		GENMASK(1, 0)
+#define SPRD_DMA_WRAP_SEL_DEST		BIT(23)
+#define SPRD_DMA_WRAP_EN		BIT(22)
 #define SPRD_DMA_FIX_SEL_OFFSET		21
 #define SPRD_DMA_FIX_EN_OFFSET		20
 #define SPRD_DMA_LLIST_END		BIT(19)
@@ -483,6 +486,28 @@
 	return 0;
 }
 
+static void sprd_dma_set_pending(struct sprd_dma_chn *schan, bool enable)
+{
+	struct sprd_dma_dev *sdev = to_sprd_dma_dev(&schan->vc.chan);
+	u32 reg, val, req_id;
+
+	if (schan->dev_id == SPRD_DMA_SOFTWARE_UID)
+		return;
+
+	/* The DMA request id always starts from 0. */
+	req_id = schan->dev_id - 1;
+
+	if (req_id < 32) {
+		reg = SPRD_DMA_GLB_REQ_PEND0_EN;
+		val = BIT(req_id);
+	} else {
+		reg = SPRD_DMA_GLB_REQ_PEND1_EN;
+		val = BIT(req_id - 32);
+	}
+
+	sprd_dma_glb_update(sdev, reg, val, enable ? val : 0);
+}
+
 static void sprd_dma_set_chn_config(struct sprd_dma_chn *schan,
 				    struct sprd_dma_desc *sdesc)
 {
@@ -529,6 +554,7 @@
 	 */
 	sprd_dma_set_chn_config(schan, schan->cur_desc);
 	sprd_dma_set_uid(schan);
+	sprd_dma_set_pending(schan, true);
 	sprd_dma_enable_chn(schan);
 
 	if (schan->dev_id == SPRD_DMA_SOFTWARE_UID &&
@@ -540,6 +566,7 @@
 static void sprd_dma_stop(struct sprd_dma_chn *schan)
 {
 	sprd_dma_stop_and_disable(schan);
+	sprd_dma_set_pending(schan, false);
 	sprd_dma_unset_uid(schan);
 	sprd_dma_clear_int(schan);
 	schan->cur_desc = NULL;
@@ -804,6 +831,8 @@
 	temp |= req_mode << SPRD_DMA_REQ_MODE_OFFSET;
 	temp |= fix_mode << SPRD_DMA_FIX_SEL_OFFSET;
 	temp |= fix_en << SPRD_DMA_FIX_EN_OFFSET;
+	temp |= schan->linklist.wrap_addr ?
+		SPRD_DMA_WRAP_EN | SPRD_DMA_WRAP_SEL_DEST : 0;
 	temp |= slave_cfg->src_maxburst & SPRD_DMA_FRG_LEN_MASK;
 	hw->frg_len = temp;
 
@@ -831,6 +860,12 @@
 		hw->llist_ptr = lower_32_bits(llist_ptr);
 		hw->src_blk_step = (upper_32_bits(llist_ptr) << SPRD_DMA_LLIST_HIGH_SHIFT) &
 			SPRD_DMA_LLIST_HIGH_MASK;
+
+		if (schan->linklist.wrap_addr) {
+			hw->wrap_ptr |= schan->linklist.wrap_addr &
+				SPRD_DMA_WRAP_ADDR_MASK;
+			hw->wrap_to |= dst & SPRD_DMA_WRAP_ADDR_MASK;
+		}
 	} else {
 		hw->llist_ptr = 0;
 		hw->src_blk_step = 0;
@@ -939,9 +974,11 @@
 
 		schan->linklist.phy_addr = ll_cfg->phy_addr;
 		schan->linklist.virt_addr = ll_cfg->virt_addr;
+		schan->linklist.wrap_addr = ll_cfg->wrap_addr;
 	} else {
 		schan->linklist.phy_addr = 0;
 		schan->linklist.virt_addr = 0;
+		schan->linklist.wrap_addr = 0;
 	}
 
 	/*
diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c
index 5c9e156..b4df437 100644
--- a/drivers/extcon/extcon.c
+++ b/drivers/extcon/extcon.c
@@ -1407,6 +1407,7 @@
 {
 	return !edev ? NULL : edev->name;
 }
+EXPORT_SYMBOL_GPL(extcon_get_edev_name);
 
 static int __init extcon_class_init(void)
 {
diff --git a/drivers/firmware/Kconfig b/drivers/firmware/Kconfig
index 7dfbd0f..756738a 100644
--- a/drivers/firmware/Kconfig
+++ b/drivers/firmware/Kconfig
@@ -235,17 +235,19 @@
 	  Say Y here if you want Intel RSU support.
 
 config QCOM_SCM
-	bool
+	tristate "Qcom SCM driver"
 	depends on ARM || ARM64
 	depends on HAVE_ARM_SMCCC
 	select RESET_CONTROLLER
 
 config QCOM_SCM_32
-	def_bool y
+	tristate
+	default y
 	depends on QCOM_SCM && ARM
 
 config QCOM_SCM_64
-	def_bool y
+	tristate
+	default y
 	depends on QCOM_SCM && ARM64
 
 config QCOM_SCM_DOWNLOAD_MODE_DEFAULT
diff --git a/drivers/firmware/Makefile b/drivers/firmware/Makefile
index 3fcb919..64f5391e 100644
--- a/drivers/firmware/Makefile
+++ b/drivers/firmware/Makefile
@@ -17,9 +17,11 @@
 obj-$(CONFIG_FIRMWARE_MEMMAP)	+= memmap.o
 obj-$(CONFIG_RASPBERRYPI_FIRMWARE) += raspberrypi.o
 obj-$(CONFIG_FW_CFG_SYSFS)	+= qemu_fw_cfg.o
-obj-$(CONFIG_QCOM_SCM)		+= qcom_scm.o
-obj-$(CONFIG_QCOM_SCM_64)	+= qcom_scm-64.o
-obj-$(CONFIG_QCOM_SCM_32)	+= qcom_scm-32.o
+obj-$(CONFIG_QCOM_SCM_64)	+= qcom-scm-64.o
+obj-$(CONFIG_QCOM_SCM_32)	+= qcom-scm-32.o
+qcom-scm-64-objs += qcom_scm.o qcom_scm-64.o
+qcom-scm-32-objs += qcom_scm.o qcom_scm-32.o
+
 CFLAGS_qcom_scm-32.o :=$(call as-instr,.arch armv7-a\n.arch_extension sec,-DREQUIRES_SEC=1) -march=armv7-a
 obj-$(CONFIG_TI_SCI_PROTOCOL)	+= ti_sci.o
 obj-$(CONFIG_TRUSTED_FOUNDATIONS) += trusted_foundations.o
diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
index 8c5b552..3f71cde 100644
--- a/drivers/firmware/efi/libstub/Makefile
+++ b/drivers/firmware/efi/libstub/Makefile
@@ -31,6 +31,9 @@
 				   $(call cc-option,-fno-addrsig) \
 				   -D__DISABLE_EXPORTS
 
+# disable LTO
+KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO), $(KBUILD_CFLAGS))
+
 GCOV_PROFILE			:= n
 KASAN_SANITIZE			:= n
 UBSAN_SANITIZE			:= n
diff --git a/drivers/firmware/psci/psci.c b/drivers/firmware/psci/psci.c
index 84f4ff3..28ed1a5 100644
--- a/drivers/firmware/psci/psci.c
+++ b/drivers/firmware/psci/psci.c
@@ -27,6 +27,8 @@
 #include <asm/smp_plat.h>
 #include <asm/suspend.h>
 
+#include <trace/hooks/psci.h>
+
 /*
  * While a 64-bit OS can make calls with SMC32 calling conventions, for some
  * calls it is necessary to use SMC64 to pass or return 64-bit values.
@@ -49,6 +51,12 @@
 
 bool psci_tos_resident_on(int cpu)
 {
+	bool resident = false;
+
+	trace_android_vh_psci_tos_resident_on(cpu, &resident);
+	if (resident)
+		return resident;
+
 	return cpu == resident_cpu;
 }
 
@@ -158,6 +166,11 @@
 {
 	int err;
 	u32 fn;
+	bool deny = false;
+
+	trace_android_vh_psci_cpu_suspend(state, &deny);
+	if (deny)
+		return -EPERM;
 
 	fn = psci_function_id[PSCI_FN_CPU_SUSPEND];
 	err = invoke_psci_fn(fn, state, entry_point, 0);
@@ -250,7 +263,8 @@
 	return 0;
 }
 
-static void psci_sys_reset(enum reboot_mode reboot_mode, const char *cmd)
+static int psci_sys_reset(struct notifier_block *nb, unsigned long action,
+			  void *data)
 {
 	if ((reboot_mode == REBOOT_WARM || reboot_mode == REBOOT_SOFT) &&
 	    psci_system_reset2_supported) {
@@ -263,8 +277,15 @@
 	} else {
 		invoke_psci_fn(PSCI_0_2_FN_SYSTEM_RESET, 0, 0, 0);
 	}
+
+	return NOTIFY_DONE;
 }
 
+static struct notifier_block psci_sys_reset_nb = {
+	.notifier_call = psci_sys_reset,
+	.priority = 129,
+};
+
 static void psci_sys_poweroff(void)
 {
 	invoke_psci_fn(PSCI_0_2_FN_SYSTEM_OFF, 0, 0, 0);
@@ -431,7 +452,7 @@
 
 	psci_ops.migrate_info_type = psci_migrate_info_type;
 
-	arm_pm_restart = psci_sys_reset;
+	register_restart_handler(&psci_sys_reset_nb);
 
 	pm_power_off = psci_sys_poweroff;
 }
diff --git a/drivers/firmware/qcom_scm-32.c b/drivers/firmware/qcom_scm-32.c
index 215061c..72b3262 100644
--- a/drivers/firmware/qcom_scm-32.c
+++ b/drivers/firmware/qcom_scm-32.c
@@ -417,7 +417,7 @@
 			flags & QCOM_SCM_FLUSH_FLAG_MASK);
 }
 
-int __qcom_scm_is_call_available(struct device *dev, u32 svc_id, u32 cmd_id)
+bool __qcom_scm_is_call_available(struct device *dev, u32 svc_id, u32 cmd_id)
 {
 	int ret;
 	__le32 svc_cmd = cpu_to_le32((svc_id << 10) | cmd_id);
@@ -426,10 +426,7 @@
 	ret = qcom_scm_call(dev, QCOM_SCM_SVC_INFO, QCOM_IS_CALL_AVAIL_CMD,
 			    &svc_cmd, sizeof(svc_cmd), &ret_val,
 			    sizeof(ret_val));
-	if (ret)
-		return ret;
-
-	return le32_to_cpu(ret_val);
+	return ret ? false : !!ret_val;
 }
 
 int __qcom_scm_hdcp_req(struct device *dev, struct qcom_scm_hdcp_req *req,
@@ -548,6 +545,20 @@
 	return ret ? : le32_to_cpu(out);
 }
 
+int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index)
+{
+	/* Untested on 32-bit, so disabled for now. */
+	return -ENODEV;
+}
+
+int __qcom_scm_ice_set_key(struct device *dev, u32 index, dma_addr_t key_phys,
+			   u32 key_size, enum qcom_scm_ice_cipher cipher,
+			   u32 data_unit_size)
+{
+	/* Untested on 32-bit, so disabled for now. */
+	return -ENODEV;
+}
+
 int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
 {
 	return qcom_scm_call_atomic2(QCOM_SCM_SVC_BOOT, QCOM_SCM_SET_DLOAD_MODE,
@@ -614,3 +625,8 @@
 	return qcom_scm_call_atomic2(QCOM_SCM_SVC_IO, QCOM_SCM_IO_WRITE,
 				     addr, val);
 }
+
+int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool enable)
+{
+	return -ENODEV;
+}
diff --git a/drivers/firmware/qcom_scm-64.c b/drivers/firmware/qcom_scm-64.c
index 25e0f60c..72d752f 100644
--- a/drivers/firmware/qcom_scm-64.c
+++ b/drivers/firmware/qcom_scm-64.c
@@ -62,32 +62,72 @@
 #define FIRST_EXT_ARG_IDX 3
 #define N_REGISTER_ARGS (MAX_QCOM_SCM_ARGS - N_EXT_QCOM_SCM_ARGS + 1)
 
-/**
- * qcom_scm_call() - Invoke a syscall in the secure world
- * @dev:	device
- * @svc_id:	service identifier
- * @cmd_id:	command identifier
- * @desc:	Descriptor structure containing arguments and return values
- *
- * Sends a command to the SCM and waits for the command to finish processing.
- * This should *only* be called in pre-emptible context.
-*/
-static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
-			 const struct qcom_scm_desc *desc,
-			 struct arm_smccc_res *res)
+static void __qcom_scm_call_do(const struct qcom_scm_desc *desc,
+			       struct arm_smccc_res *res, u32 fn_id,
+			       u64 x5, u32 type)
+{
+	u64 cmd;
+	struct arm_smccc_quirk quirk = { .id = ARM_SMCCC_QUIRK_QCOM_A6 };
+
+	cmd = ARM_SMCCC_CALL_VAL(type, qcom_smccc_convention,
+				 ARM_SMCCC_OWNER_SIP, fn_id);
+
+	quirk.state.a6 = 0;
+
+	do {
+		arm_smccc_smc_quirk(cmd, desc->arginfo, desc->args[0],
+				    desc->args[1], desc->args[2], x5,
+				    quirk.state.a6, 0, res, &quirk);
+
+		if (res->a0 == QCOM_SCM_INTERRUPTED)
+			cmd = res->a0;
+
+	} while (res->a0 == QCOM_SCM_INTERRUPTED);
+}
+
+static void qcom_scm_call_do(const struct qcom_scm_desc *desc,
+			     struct arm_smccc_res *res, u32 fn_id,
+			     u64 x5, bool atomic)
+{
+	int retry_count = 0;
+
+	if (atomic) {
+		__qcom_scm_call_do(desc, res, fn_id, x5, ARM_SMCCC_FAST_CALL);
+		return;
+	}
+
+	do {
+		mutex_lock(&qcom_scm_lock);
+
+		__qcom_scm_call_do(desc, res, fn_id, x5,
+				   ARM_SMCCC_STD_CALL);
+
+		mutex_unlock(&qcom_scm_lock);
+
+		if (res->a0 == QCOM_SCM_V2_EBUSY) {
+			if (retry_count++ > QCOM_SCM_EBUSY_MAX_RETRY)
+				break;
+			msleep(QCOM_SCM_EBUSY_WAIT_MS);
+		}
+	}  while (res->a0 == QCOM_SCM_V2_EBUSY);
+}
+
+static int ___qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
+			    const struct qcom_scm_desc *desc,
+			    struct arm_smccc_res *res, bool atomic)
 {
 	int arglen = desc->arginfo & 0xf;
-	int retry_count = 0, i;
+	int i;
 	u32 fn_id = QCOM_SCM_FNID(svc_id, cmd_id);
-	u64 cmd, x5 = desc->args[FIRST_EXT_ARG_IDX];
+	u64 x5 = desc->args[FIRST_EXT_ARG_IDX];
 	dma_addr_t args_phys = 0;
 	void *args_virt = NULL;
 	size_t alloc_len;
-	struct arm_smccc_quirk quirk = {.id = ARM_SMCCC_QUIRK_QCOM_A6};
+	gfp_t flag = atomic ? GFP_ATOMIC : GFP_KERNEL;
 
 	if (unlikely(arglen > N_REGISTER_ARGS)) {
 		alloc_len = N_EXT_QCOM_SCM_ARGS * sizeof(u64);
-		args_virt = kzalloc(PAGE_ALIGN(alloc_len), GFP_KERNEL);
+		args_virt = kzalloc(PAGE_ALIGN(alloc_len), flag);
 
 		if (!args_virt)
 			return -ENOMEM;
@@ -117,33 +157,7 @@
 		x5 = args_phys;
 	}
 
-	do {
-		mutex_lock(&qcom_scm_lock);
-
-		cmd = ARM_SMCCC_CALL_VAL(ARM_SMCCC_STD_CALL,
-					 qcom_smccc_convention,
-					 ARM_SMCCC_OWNER_SIP, fn_id);
-
-		quirk.state.a6 = 0;
-
-		do {
-			arm_smccc_smc_quirk(cmd, desc->arginfo, desc->args[0],
-				      desc->args[1], desc->args[2], x5,
-				      quirk.state.a6, 0, res, &quirk);
-
-			if (res->a0 == QCOM_SCM_INTERRUPTED)
-				cmd = res->a0;
-
-		} while (res->a0 == QCOM_SCM_INTERRUPTED);
-
-		mutex_unlock(&qcom_scm_lock);
-
-		if (res->a0 == QCOM_SCM_V2_EBUSY) {
-			if (retry_count++ > QCOM_SCM_EBUSY_MAX_RETRY)
-				break;
-			msleep(QCOM_SCM_EBUSY_WAIT_MS);
-		}
-	}  while (res->a0 == QCOM_SCM_V2_EBUSY);
+	qcom_scm_call_do(desc, res, fn_id, x5, atomic);
 
 	if (args_virt) {
 		dma_unmap_single(dev, args_phys, alloc_len, DMA_TO_DEVICE);
@@ -157,6 +171,42 @@
 }
 
 /**
+ * qcom_scm_call() - Invoke a syscall in the secure world
+ * @dev:	device
+ * @svc_id:	service identifier
+ * @cmd_id:	command identifier
+ * @desc:	Descriptor structure containing arguments and return values
+ *
+ * Sends a command to the SCM and waits for the command to finish processing.
+ * This should *only* be called in pre-emptible context.
+ */
+static int qcom_scm_call(struct device *dev, u32 svc_id, u32 cmd_id,
+			 const struct qcom_scm_desc *desc,
+			 struct arm_smccc_res *res)
+{
+	might_sleep();
+	return ___qcom_scm_call(dev, svc_id, cmd_id, desc, res, false);
+}
+
+/**
+ * qcom_scm_call_atomic() - atomic variation of qcom_scm_call()
+ * @dev:	device
+ * @svc_id:	service identifier
+ * @cmd_id:	command identifier
+ * @desc:	Descriptor structure containing arguments and return values
+ * @res:	Structure containing results from SMC/HVC call
+ *
+ * Sends a command to the SCM and waits for the command to finish processing.
+ * This can be called in atomic context.
+ */
+static int qcom_scm_call_atomic(struct device *dev, u32 svc_id, u32 cmd_id,
+				const struct qcom_scm_desc *desc,
+				struct arm_smccc_res *res)
+{
+	return ___qcom_scm_call(dev, svc_id, cmd_id, desc, res, true);
+}
+
+/**
  * qcom_scm_set_cold_boot_addr() - Set the cold boot address for cpus
  * @entry: Entry point function for the cpus
  * @cpus: The cpumask of cpus that will use the entry point
@@ -196,7 +246,7 @@
 {
 }
 
-int __qcom_scm_is_call_available(struct device *dev, u32 svc_id, u32 cmd_id)
+bool __qcom_scm_is_call_available(struct device *dev, u32 svc_id, u32 cmd_id)
 {
 	int ret;
 	struct qcom_scm_desc desc = {0};
@@ -209,7 +259,7 @@
 	ret = qcom_scm_call(dev, QCOM_SCM_SVC_INFO, QCOM_IS_CALL_AVAIL_CMD,
 			    &desc, &res);
 
-	return ret ? : res.a1;
+	return ret ? false : !!res.a1;
 }
 
 int __qcom_scm_hdcp_req(struct device *dev, struct qcom_scm_hdcp_req *req,
@@ -358,6 +408,38 @@
 	return ret ? : res.a1;
 }
 
+int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index)
+{
+	struct qcom_scm_desc desc = {
+		.arginfo = QCOM_SCM_ARGS(1),
+		.args[0] = index,
+	};
+	struct arm_smccc_res res;
+
+	return qcom_scm_call(dev, QCOM_SCM_SVC_ES,
+			     QCOM_SCM_ES_INVALIDATE_ICE_KEY, &desc, &res);
+}
+
+int __qcom_scm_ice_set_key(struct device *dev, u32 index, dma_addr_t key_phys,
+			   u32 key_size, enum qcom_scm_ice_cipher cipher,
+			   u32 data_unit_size)
+{
+	struct qcom_scm_desc desc = {
+		.arginfo = QCOM_SCM_ARGS(5, QCOM_SCM_VAL, QCOM_SCM_RW,
+					 QCOM_SCM_VAL, QCOM_SCM_VAL,
+					 QCOM_SCM_VAL),
+		.args[0] = index,
+		.args[1] = key_phys,
+		.args[2] = key_size,
+		.args[3] = cipher,
+		.args[4] = data_unit_size,
+	};
+	struct arm_smccc_res res;
+
+	return qcom_scm_call(dev, QCOM_SCM_SVC_ES,
+			     QCOM_SCM_ES_CONFIG_SET_ICE_KEY, &desc, &res);
+}
+
 int __qcom_scm_set_remote_state(struct device *dev, u32 state, u32 id)
 {
 	struct qcom_scm_desc desc = {0};
@@ -502,3 +584,16 @@
 	return qcom_scm_call(dev, QCOM_SCM_SVC_IO, QCOM_SCM_IO_WRITE,
 			     &desc, &res);
 }
+
+int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool en)
+{
+	struct qcom_scm_desc desc = {0};
+	struct arm_smccc_res res;
+
+	desc.args[0] = QCOM_SCM_CONFIG_ERRATA1_CLIENT_ALL;
+	desc.args[1] = en;
+	desc.arginfo = QCOM_SCM_ARGS(2);
+
+	return qcom_scm_call_atomic(dev, QCOM_SCM_SVC_SMMU_PROGRAM,
+				    QCOM_SCM_CONFIG_ERRATA1, &desc, &res);
+}
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index b9fdc20..8eb57d1 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -135,17 +135,18 @@
  */
 bool qcom_scm_hdcp_available(void)
 {
+	bool avail;
 	int ret = qcom_scm_clk_enable();
 
 	if (ret)
 		return ret;
 
-	ret = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP,
+	avail = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_HDCP,
 						QCOM_SCM_CMD_HDCP);
 
 	qcom_scm_clk_disable();
 
-	return ret > 0 ? true : false;
+	return avail;
 }
 EXPORT_SYMBOL(qcom_scm_hdcp_available);
 
@@ -181,9 +182,8 @@
 {
 	int ret;
 
-	ret = __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL,
-					   QCOM_SCM_PAS_IS_SUPPORTED_CMD);
-	if (ret <= 0)
+	if (!__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_PIL,
+					  QCOM_SCM_PAS_IS_SUPPORTED_CMD))
 		return false;
 
 	return __qcom_scm_pas_supported(__scm->dev, peripheral);
@@ -344,6 +344,12 @@
 }
 EXPORT_SYMBOL(qcom_scm_iommu_secure_ptbl_init);
 
+int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
+{
+	return __qcom_scm_qsmmu500_wait_safe_toggle(__scm->dev, en);
+}
+EXPORT_SYMBOL(qcom_scm_qsmmu500_wait_safe_toggle);
+
 int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val)
 {
 	return __qcom_scm_io_readl(__scm->dev, addr, val);
@@ -499,6 +505,95 @@
 }
 EXPORT_SYMBOL(qcom_scm_assign_mem);
 
+/**
+ * qcom_scm_ice_available() - Is the ICE key programming interface available?
+ *
+ * Return: true iff the SCM calls wrapped by qcom_scm_ice_invalidate_key() and
+ *	   qcom_scm_ice_set_key() are available.
+ */
+bool qcom_scm_ice_available(void)
+{
+	if (IS_ENABLED(CONFIG_ARM)) /* Not implemented/tested on 32-bit yet. */
+		return false;
+	return __qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+					    QCOM_SCM_ES_INVALIDATE_ICE_KEY) &&
+		__qcom_scm_is_call_available(__scm->dev, QCOM_SCM_SVC_ES,
+					     QCOM_SCM_ES_CONFIG_SET_ICE_KEY);
+}
+EXPORT_SYMBOL(qcom_scm_ice_available);
+
+/**
+ * qcom_scm_ice_invalidate_key() - Invalidate an inline encryption key
+ * @index: the keyslot to invalidate
+ *
+ * The UFSHCI and eMMC standards define a standard way to do this, but it
+ * doesn't work on these SoCs; only this SCM call does.
+ *
+ * It is assumed that the SoC has only one ICE instance being used, as this SCM
+ * call doesn't specify which ICE instance the keyslot belongs to.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
+int qcom_scm_ice_invalidate_key(u32 index)
+{
+	return __qcom_scm_ice_invalidate_key(__scm->dev, index);
+}
+EXPORT_SYMBOL(qcom_scm_ice_invalidate_key);
+
+/**
+ * qcom_scm_ice_set_key() - Set an inline encryption key
+ * @index: the keyslot into which to set the key
+ * @key: the key to program
+ * @key_size: the size of the key in bytes
+ * @cipher: the encryption algorithm the key is for
+ * @data_unit_size: the encryption data unit size, i.e. the size of each
+ *		    individual plaintext and ciphertext.  Given in 512-byte
+ *		    units, e.g. 1 = 512 bytes, 8 = 4096 bytes, etc.
+ *
+ * Program a key into a keyslot of Qualcomm ICE (Inline Crypto Engine), where it
+ * can then be used to encrypt/decrypt UFS or eMMC I/O requests inline.
+ *
+ * The UFSHCI and eMMC standards define a standard way to do this, but it
+ * doesn't work on these SoCs; only this SCM call does.
+ *
+ * It is assumed that the SoC has only one ICE instance being used, as this SCM
+ * call doesn't specify which ICE instance the keyslot belongs to.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
+int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+			 enum qcom_scm_ice_cipher cipher, u32 data_unit_size)
+{
+	void *keybuf;
+	dma_addr_t key_phys;
+	int ret;
+
+	/*
+	 * 'key' may point to vmalloc()'ed memory, but we need to pass a
+	 * physical address that's been properly flushed.  The sanctioned way to
+	 * do this is by using the DMA API.  But as is best practice for crypto
+	 * keys, we also must wipe the key after use.  This makes kmemdup() +
+	 * dma_map_single() not clearly correct, since the DMA API can use
+	 * bounce buffers.  Instead, just use dma_alloc_coherent().  Programming
+	 * keys is normally rare and thus not performance-critical.
+	 */
+
+	keybuf = dma_alloc_coherent(__scm->dev, key_size, &key_phys,
+				    GFP_KERNEL);
+	if (!keybuf)
+		return -ENOMEM;
+	memcpy(keybuf, key, key_size);
+
+	ret = __qcom_scm_ice_set_key(__scm->dev, index, key_phys, key_size,
+				     cipher, data_unit_size);
+
+	memzero_explicit(keybuf, key_size);
+
+	dma_free_coherent(__scm->dev, key_size, keybuf, key_phys);
+	return ret;
+}
+EXPORT_SYMBOL(qcom_scm_ice_set_key);
+
 static int qcom_scm_probe(struct platform_device *pdev)
 {
 	struct qcom_scm *scm;
@@ -612,6 +707,7 @@
 	{ .compatible = "qcom,scm" },
 	{}
 };
+MODULE_DEVICE_TABLE(of, qcom_scm_dt_match);
 
 static struct platform_driver qcom_scm_driver = {
 	.driver = {
@@ -627,3 +723,6 @@
 	return platform_driver_register(&qcom_scm_driver);
 }
 subsys_initcall(qcom_scm_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. SCM driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h
index 99506bd..4ab1a24 100644
--- a/drivers/firmware/qcom_scm.h
+++ b/drivers/firmware/qcom_scm.h
@@ -32,7 +32,7 @@
 
 #define QCOM_SCM_SVC_INFO		0x6
 #define QCOM_IS_CALL_AVAIL_CMD		0x1
-extern int __qcom_scm_is_call_available(struct device *dev, u32 svc_id,
+extern bool __qcom_scm_is_call_available(struct device *dev, u32 svc_id,
 		u32 cmd_id);
 
 #define QCOM_SCM_SVC_HDCP		0x11
@@ -58,6 +58,15 @@
 extern int  __qcom_scm_pas_shutdown(struct device *dev, u32 peripheral);
 extern int  __qcom_scm_pas_mss_reset(struct device *dev, bool reset);
 
+#define QCOM_SCM_SVC_ES			0x10	/* Enterprise Security */
+#define QCOM_SCM_ES_INVALIDATE_ICE_KEY	0x03
+#define QCOM_SCM_ES_CONFIG_SET_ICE_KEY	0x04
+extern int __qcom_scm_ice_invalidate_key(struct device *dev, u32 index);
+extern int __qcom_scm_ice_set_key(struct device *dev, u32 index,
+				  dma_addr_t key_phys,
+				  u32 key_size, enum qcom_scm_ice_cipher cipher,
+				  u32 data_unit_size);
+
 /* common error codes */
 #define QCOM_SCM_V2_EBUSY	-12
 #define QCOM_SCM_ENOMEM		-5
@@ -91,10 +100,15 @@
 				      u32 spare);
 #define QCOM_SCM_IOMMU_SECURE_PTBL_SIZE	3
 #define QCOM_SCM_IOMMU_SECURE_PTBL_INIT	4
+#define QCOM_SCM_SVC_SMMU_PROGRAM	0x15
+#define QCOM_SCM_CONFIG_ERRATA1		0x3
+#define QCOM_SCM_CONFIG_ERRATA1_CLIENT_ALL	0x2
 extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare,
 					     size_t *size);
 extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr,
 					     u32 size, u32 spare);
+extern int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev,
+						bool enable);
 #define QCOM_MEM_PROT_ASSIGN_ID	0x16
 extern int  __qcom_scm_assign_mem(struct device *dev,
 				  phys_addr_t mem_region, size_t mem_sz,
diff --git a/drivers/gnss/Kconfig b/drivers/gnss/Kconfig
index a0404ce..81f665d 100644
--- a/drivers/gnss/Kconfig
+++ b/drivers/gnss/Kconfig
@@ -54,4 +54,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 451f114..1d27659 100644
--- a/drivers/gnss/Makefile
+++ b/drivers/gnss/Makefile
@@ -17,3 +17,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/gpu/Makefile b/drivers/gpu/Makefile
index f17d01f..835c883 100644
--- a/drivers/gpu/Makefile
+++ b/drivers/gpu/Makefile
@@ -5,3 +5,4 @@
 obj-$(CONFIG_TEGRA_HOST1X)	+= host1x/
 obj-y			+= drm/ vga/
 obj-$(CONFIG_IMX_IPUV3_CORE)	+= ipu-v3/
+obj-$(CONFIG_TRACE_GPU_MEM)		+= trace/
diff --git a/drivers/gpu/drm/bochs/bochs_kms.c b/drivers/gpu/drm/bochs/bochs_kms.c
index fa50ab2..02a9c1e 100644
--- a/drivers/gpu/drm/bochs/bochs_kms.c
+++ b/drivers/gpu/drm/bochs/bochs_kms.c
@@ -194,7 +194,6 @@
 	bochs->dev->mode_config.preferred_depth = 24;
 	bochs->dev->mode_config.prefer_shadow = 0;
 	bochs->dev->mode_config.prefer_shadow_fbdev = 1;
-	bochs->dev->mode_config.fbdev_use_iomem = true;
 	bochs->dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
 
 	bochs->dev->mode_config.funcs = &bochs_mode_funcs;
diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig
index 1cc9f50..441350f 100644
--- a/drivers/gpu/drm/bridge/Kconfig
+++ b/drivers/gpu/drm/bridge/Kconfig
@@ -45,6 +45,14 @@
 	  Support for non-programmable RGB to VGA DAC bridges, such as ADI
 	  ADV7123, TI THS8134 and THS8135 or passive resistor ladder DACs.
 
+config DRM_LONTIUM_LT9611
+	tristate "Lontium LT9611 DSI/HDMI bridge"
+	depends on OF
+	select DRM_PANEL_BRIDGE
+	select DRM_KMS_HELPER
+	help
+	  Lontium LT9611 DSI/HDMI bridge chip driver.
+
 config DRM_LVDS_ENCODER
 	tristate "Transparent parallel to LVDS encoder support"
 	depends on OF
diff --git a/drivers/gpu/drm/bridge/Makefile b/drivers/gpu/drm/bridge/Makefile
index 4934fcf..8b1d176 100644
--- a/drivers/gpu/drm/bridge/Makefile
+++ b/drivers/gpu/drm/bridge/Makefile
@@ -2,6 +2,7 @@
 obj-$(CONFIG_DRM_ANALOGIX_ANX78XX) += analogix-anx78xx.o
 obj-$(CONFIG_DRM_CDNS_DSI) += cdns-dsi.o
 obj-$(CONFIG_DRM_DUMB_VGA_DAC) += dumb-vga-dac.o
+obj-$(CONFIG_DRM_LONTIUM_LT9611) += lt9611.o
 obj-$(CONFIG_DRM_LVDS_ENCODER) += lvds-encoder.o
 obj-$(CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW) += megachips-stdpxxxx-ge-b850v3-fw.o
 obj-$(CONFIG_DRM_NXP_PTN3460) += nxp-ptn3460.o
diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
index 9e13e46..f9e07b4 100644
--- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
+++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
@@ -356,6 +356,9 @@
 	regmap_update_bits(adv7511->regmap, ADV7511_REG_POWER2,
 			   ADV7511_REG_POWER2_HPD_SRC_MASK,
 			   ADV7511_REG_POWER2_HPD_SRC_NONE);
+
+	/* HACK: If we don't delay here edid probing doesn't work properly */
+	msleep(200);
 }
 
 static void adv7511_power_on(struct adv7511 *adv7511)
diff --git a/drivers/gpu/drm/bridge/lt9611.c b/drivers/gpu/drm/bridge/lt9611.c
new file mode 100644
index 0000000..5ee6dbf
--- /dev/null
+++ b/drivers/gpu/drm/bridge/lt9611.c
@@ -0,0 +1,1140 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2019. Linaro Ltd
+ */
+
+#define DEBUG
+
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/platform_device.h>
+#include <linux/fs.h>
+#include <linux/delay.h>
+#include <linux/i2c.h>
+#include <linux/gpio/consumer.h>
+#include <linux/regmap.h>
+#include <linux/interrupt.h>
+#include <linux/component.h>
+#include <linux/of_gpio.h>
+#include <linux/of_graph.h>
+#include <linux/of_irq.h>
+#include <linux/regulator/consumer.h>
+#include <drm/drm_probe_helper.h>
+#include <linux/hdmi.h>
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_edid.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_bridge.h>
+#include <drm/drm_print.h>
+
+#define EDID_SEG_SIZE 256
+
+#define LT9611_4LANES	0
+
+struct lt9611 {
+	struct device *dev;
+	struct drm_bridge bridge;
+	struct drm_connector connector;
+
+	struct regmap *regmap;
+
+	struct device_node *dsi0_node;
+	struct device_node *dsi1_node;
+	struct mipi_dsi_device *dsi0;
+	struct mipi_dsi_device *dsi1;
+
+	bool ac_mode;
+
+	struct gpio_desc *reset_gpio;
+	struct gpio_desc *enable_gpio;
+
+	bool power_on;
+
+	struct regulator_bulk_data supplies[2];
+
+	struct i2c_client *client;
+
+	enum drm_connector_status status;
+
+	u8 edid_buf[EDID_SEG_SIZE];
+	u32 vic;
+};
+
+static const struct regmap_config lt9611_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.cache_type = REGCACHE_NONE,
+};
+
+struct lt9611_mode {
+	u16 hdisplay;
+	u16 vdisplay;
+	u8 fps;
+	u8 lanes;
+	u8 intfs;
+};
+
+static struct lt9611_mode lt9611_modes[] = {
+	{ 3840, 2160, 30, 4, 2 }, /* 3840x2160 24bit 30Hz 4Lane 2ports */
+	{ 1920, 1080, 60, 4, 1 }, /* 1080P 24bit 60Hz 4lane 1port */
+	{ 1920, 1080, 30, 3, 1 }, /* 1080P 24bit 30Hz 3lane 1port */
+	{ 1920, 1080, 24, 3, 1 },
+	{ 720, 480, 60, 4, 1 },
+	{ 720, 576, 50, 2, 1 },
+	{ 640, 480, 60, 2, 1 },
+};
+
+static struct lt9611 *bridge_to_lt9611(struct drm_bridge *bridge)
+{
+	return container_of(bridge, struct lt9611, bridge);
+}
+
+static struct lt9611 *connector_to_lt9611(struct drm_connector *connector)
+{
+	return container_of(connector, struct lt9611, connector);
+}
+
+static int lt9611_mipi_input_analog(struct lt9611 *lt9611)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x81 },
+		{ 0x06, 0x40 }, /*port A rx current*/
+		{ 0x0a, 0xfe }, /*port A ldo voltage set*/
+		{ 0x0b, 0xbf }, /*enable port A lprx*/
+		{ 0x11, 0x40 }, /*port B rx current*/
+		{ 0x15, 0xfe }, /*port B ldo voltage set*/
+		{ 0x16, 0xbf }, /*enable port B lprx*/
+
+		{ 0x1c, 0x03 }, /*PortA clk lane no-LP mode*/
+		{ 0x20, 0x03 }, /*PortB clk lane with-LP mode*/
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	return 0;
+}
+
+static int lt9611_mipi_input_digital(struct lt9611 *lt9611,
+				     const struct drm_display_mode *mode)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x82 },
+		{ 0x4f, 0x80 },
+		{ 0x50, 0x10 },
+		{ 0xff, 0x83 },
+
+		{ 0x02, 0x0a },
+		{ 0x06, 0x0a },
+	};
+
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	regmap_write(lt9611->regmap, 0x00, LT9611_4LANES);
+
+	if (mode->hdisplay == 3840)
+		regmap_write(lt9611->regmap, 0x0a, 0x03);
+	else
+		regmap_write(lt9611->regmap, 0x0a, 0x00);
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	return 0;
+}
+
+static void lt9611_mipi_video_setup(struct lt9611 *lt9611,
+				    const struct drm_display_mode *mode)
+{
+	u32 h_total, h_act, hpw, hfp, hss;
+	u32 v_total, v_act, vpw, vfp, vss;
+
+	h_total = mode->htotal;
+	v_total = mode->vtotal;
+
+	h_act = mode->hdisplay;
+	hpw = mode->hsync_end - mode->hsync_start;
+	hfp = mode->hsync_start - mode->hdisplay;
+	hss = (mode->hsync_end - mode->hsync_start) + (mode->htotal - mode->hsync_end);
+
+	v_act = mode->vdisplay;
+	vpw = mode->vsync_end - mode->vsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vss = (mode->vsync_end - mode->vsync_start) + (mode->vtotal - mode->vsync_end);
+
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+
+	regmap_write(lt9611->regmap, 0x0d, (u8)(v_total / 256));
+	regmap_write(lt9611->regmap, 0x0e, (u8)(v_total % 256));
+
+	regmap_write(lt9611->regmap, 0x0f, (u8)(v_act / 256));
+	regmap_write(lt9611->regmap, 0x10, (u8)(v_act % 256));
+
+	regmap_write(lt9611->regmap, 0x11, (u8)(h_total / 256));
+	regmap_write(lt9611->regmap, 0x12, (u8)(h_total % 256));
+
+	regmap_write(lt9611->regmap, 0x13, (u8)(h_act / 256));
+	regmap_write(lt9611->regmap, 0x14, (u8)(h_act % 256));
+
+	regmap_write(lt9611->regmap, 0x15, (u8)(vpw % 256));
+	regmap_write(lt9611->regmap, 0x16, (u8)(hpw % 256));
+
+	regmap_write(lt9611->regmap, 0x17, (u8)(vfp % 256));
+
+	regmap_write(lt9611->regmap, 0x18, (u8)(vss % 256));
+
+	regmap_write(lt9611->regmap, 0x19, (u8)(hfp % 256));
+
+	regmap_write(lt9611->regmap, 0x1a, (u8)(hss / 256));
+	regmap_write(lt9611->regmap, 0x1b, (u8)(hss % 256));
+}
+
+static int lt9611_pcr_setup(struct lt9611 *lt9611,
+			    const struct drm_display_mode *mode)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x83 },
+		{ 0x0b, 0x01 },
+		{ 0x0c, 0x10 },
+		{ 0x48, 0x00 },
+		{ 0x49, 0x81 },
+
+		/* stage 1 */
+		{ 0x21, 0x4a },
+		{ 0x24, 0x71 },
+		{ 0x25, 0x30 },
+		{ 0x2a, 0x01 },
+
+		/* stage 2 */
+		{ 0x4a, 0x40 },
+		{ 0x1d, 0x10 },
+
+		/* MK limit */
+		{ 0x2d, 0x38 },
+		{ 0x31, 0x08 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	switch (mode->hdisplay) {
+	case 640:
+		regmap_write(lt9611->regmap, 0x26, 0x14);
+		break;
+	case 1920:
+		regmap_write(lt9611->regmap, 0x26, 0x37);
+		break;
+	case 3840:
+		regmap_write(lt9611->regmap, 0x0b, 0x03);
+		regmap_write(lt9611->regmap, 0x0c, 0xd0);
+		regmap_write(lt9611->regmap, 0x48, 0x03);
+		regmap_write(lt9611->regmap, 0x49, 0xe0);
+		regmap_write(lt9611->regmap, 0x24, 0x72);
+		regmap_write(lt9611->regmap, 0x25, 0x00);
+		regmap_write(lt9611->regmap, 0x2a, 0x01);
+		regmap_write(lt9611->regmap, 0x4a, 0x10);
+		regmap_write(lt9611->regmap, 0x1d, 0x10);
+		regmap_write(lt9611->regmap, 0x26, 0x37);
+		break;
+	}
+
+	/* pcr rst */
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0x11, 0x5a);
+	regmap_write(lt9611->regmap, 0x11, 0xfa);
+
+	return 0;
+}
+
+static int lt9611_pll_setup(struct lt9611 *lt9611,
+			    const struct drm_display_mode *mode)
+{
+	unsigned int pclk = mode->clock;
+	struct reg_sequence reg_cfg[] = {
+		/* txpll init */
+		{ 0xff, 0x81 },
+		{ 0x23, 0x40 },
+		{ 0x24, 0x64 },
+		{ 0x25, 0x80 },
+		{ 0x26, 0x55 },
+		{ 0x2c, 0x37 },
+		{ 0x2f, 0x01 },
+		{ 0x26, 0x55 },
+		{ 0x27, 0x66 },
+		{ 0x28, 0x88 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+
+	if (pclk > 150000)
+		regmap_write(lt9611->regmap, 0x2d, 0x88);
+	else if (pclk > 70000)
+		regmap_write(lt9611->regmap, 0x2d, 0x99);
+	else
+		regmap_write(lt9611->regmap, 0x2d, 0xaa);
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_write(lt9611->regmap, 0xe3, pclk >> 17); /* pclk[19:16] */
+	regmap_write(lt9611->regmap, 0xe4, pclk >> 9);  /* pclk[15:8]  */
+	regmap_write(lt9611->regmap, 0xe5, pclk >> 1);  /* pclk[7:0]   */
+
+	regmap_write(lt9611->regmap, 0xde, 0x20);
+	regmap_write(lt9611->regmap, 0xde, 0xe0);
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0x16, 0xf1);
+	regmap_write(lt9611->regmap, 0x16, 0xf3);
+
+	return 0;
+}
+
+static int lt9611_video_check(struct lt9611 *lt9611)
+{
+	u32 v_total, v_act, h_act_a, h_act_b, h_total_sysclk;
+	unsigned int temp;
+	int ret;
+
+	/* top module video check */
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+
+	/* v_act */
+	ret = regmap_read(lt9611->regmap, 0x82, &temp);
+	if (ret)
+		goto end;
+
+	v_act = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x83, &temp);
+	if (ret)
+		goto end;
+	v_act = v_act + temp;
+
+	/* v_total */
+	ret = regmap_read(lt9611->regmap, 0x6c, &temp);
+	if (ret)
+		goto end;
+	v_total = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x6d, &temp);
+	if (ret)
+		goto end;
+	v_total = v_total + temp;
+
+	/* h_total_sysclk */
+	ret = regmap_read(lt9611->regmap, 0x86, &temp);
+	if (ret)
+		goto end;
+	h_total_sysclk = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x87, &temp);
+	if (ret)
+		goto end;
+	h_total_sysclk = h_total_sysclk + temp;
+
+	/* h_act_a */
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	ret = regmap_read(lt9611->regmap, 0x82, &temp);
+	if (ret)
+		goto end;
+	h_act_a = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x83, &temp);
+	if (ret)
+		goto end;
+	h_act_a = (h_act_a + temp)/3;
+
+	/* h_act_b */
+	regmap_write(lt9611->regmap, 0xff, 0x83);
+	ret = regmap_read(lt9611->regmap, 0x86, &temp);
+	if (ret)
+		goto end;
+	h_act_b = temp << 8;
+	ret = regmap_read(lt9611->regmap, 0x87, &temp);
+	if (ret)
+		goto end;
+	h_act_b = (h_act_b + temp)/3;
+
+	dev_info(lt9611->dev, "video check: h_act_a=%d, h_act_b=%d, v_act=%d, v_total=%d, h_total_sysclk=%d\n",
+		h_act_a, h_act_b, v_act, v_total, h_total_sysclk);
+
+	return 0;
+
+end:
+	dev_err(lt9611->dev, "read video check error\n");
+	return ret;
+}
+
+static void lt9611_hdmi_tx_digital(struct lt9611 *lt9611)
+{
+	regmap_write(lt9611->regmap, 0xff, 0x84);
+	regmap_write(lt9611->regmap, 0x43, 0x46 - lt9611->vic);
+	regmap_write(lt9611->regmap, 0x44, 0x84);
+	regmap_write(lt9611->regmap, 0x47, lt9611->vic);
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_write(lt9611->regmap, 0xd6, 0x8c);
+	regmap_write(lt9611->regmap, 0xd7, 0x04);
+}
+
+static void lt9611_hdmi_tx_phy(struct lt9611 *lt9611)
+{
+	struct reg_sequence reg_cfg[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+		{ 0x31, 0x44 }, /* HDMI DC mode */
+		{ 0x32, 0x4a },
+		{ 0x33, 0x0b },
+		{ 0x34, 0x00 },
+		{ 0x35, 0x00 },
+		{ 0x36, 0x00 },
+		{ 0x37, 0x44 },
+		{ 0x3f, 0x0f },
+		{ 0x40, 0xa0 },
+		{ 0x41, 0xa0 },
+		{ 0x42, 0xa0 },
+		{ 0x43, 0xa0 },
+		{ 0x44, 0x0a },
+	};
+
+	/* HDMI AC mode */
+	if (lt9611->ac_mode)
+		reg_cfg[2].def = 0x73;
+
+	regmap_multi_reg_write(lt9611->regmap, reg_cfg, ARRAY_SIZE(reg_cfg));
+}
+
+static irqreturn_t lt9611_irq_thread_handler(int irq, void *dev_id)
+{
+	struct lt9611 *lt9611 = dev_id;
+	unsigned int irq_flag0 = 0;
+	unsigned int irq_flag3 = 0;
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x0f, &irq_flag3);
+	regmap_read(lt9611->regmap, 0x0c, &irq_flag0);
+
+	printk(KERN_ERR "%s() irq_flag0: %#x irq_flag3: %#x\n", __func__, irq_flag0, irq_flag3);
+
+	 /* hpd changed low */
+	if (irq_flag3 & 0x80) {
+		dev_info(lt9611->dev, "hdmi cable disconnected\n");
+
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 3 clear flag */
+		regmap_write(lt9611->regmap, 0x07, 0xbf);
+		regmap_write(lt9611->regmap, 0x07, 0x3f);
+	}
+	 /* hpd changed high */
+	if (irq_flag3 & 0x40) {
+		dev_info(lt9611->dev, "hdmi cable connected\n");
+
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 3 clear flag */
+		regmap_write(lt9611->regmap, 0x07, 0x7f);
+		regmap_write(lt9611->regmap, 0x07, 0x3f);
+	}
+
+//	if (irq_flag3 & 0xc0)
+//		drm_kms_helper_hotplug_event(lt9611->bridge.dev);
+
+	/* video input changed */
+	if (irq_flag0 & 0x01) {
+		dev_info(lt9611->dev, "video input changed\n");
+		regmap_write(lt9611->regmap, 0xff, 0x82); /* irq 0 clear flag */
+		regmap_write(lt9611->regmap, 0x9e, 0xff);
+		regmap_write(lt9611->regmap, 0x9e, 0xf7);
+		regmap_write(lt9611->regmap, 0x04, 0xff);
+		regmap_write(lt9611->regmap, 0x04, 0xfe);
+	}
+
+	return IRQ_HANDLED;
+}
+
+static void lt9611_enable_hpd_interrupts(struct lt9611 *lt9611)
+{
+	unsigned int val;
+
+	dev_dbg(lt9611->dev, "enabling hpd interrupts\n");
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x03, &val);
+
+	val &= ~0xc0;
+	regmap_write(lt9611->regmap, 0x03, val);
+	regmap_write(lt9611->regmap, 0x07, 0xff); //clear
+	regmap_write(lt9611->regmap, 0x07, 0x3f);
+}
+
+static int lt9611_power_on(struct lt9611 *lt9611)
+{
+	int ret;
+	const struct reg_sequence seq[] = {
+		/* LT9611_System_Init */
+		{ 0xFF, 0x81 },
+		{ 0x01, 0x18 }, /* sel xtal clock */
+
+		/* timer for frequency meter */
+		{ 0xff, 0x82 },
+		{ 0x1b, 0x69 }, /*timer 2*/
+		{ 0x1c, 0x78 },
+		{ 0xcb, 0x69 }, /*timer 1 */
+		{ 0xcc, 0x78 },
+
+		/* irq init */
+		{ 0xff, 0x82 },
+		{ 0x51, 0x01 },
+		{ 0x58, 0x0a }, /* hpd irq */
+		{ 0x59, 0x80 }, /* hpd debounce width */
+		{ 0x9e, 0xf7 }, /* video check irq */
+
+		/* power consumption for work */
+		{ 0xff, 0x80 },
+		{ 0x04, 0xf0 },
+		{ 0x06, 0xf0 },
+		{ 0x0a, 0x80 },
+		{ 0x0b, 0x40 },
+		{ 0x0d, 0xef },
+		{ 0x11, 0xfa },
+	};
+
+	if (lt9611->power_on)
+		return 0;
+	
+	dev_dbg(lt9611->dev, "power on\n");
+
+	ret = regmap_multi_reg_write(lt9611->regmap, seq, ARRAY_SIZE(seq));
+	if (!ret)
+		lt9611->power_on = true;
+
+	return ret;
+}
+
+static int lt9611_power_off(struct lt9611 *lt9611)
+{
+	int ret;
+	const struct reg_sequence off[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+	};
+
+	dev_dbg(lt9611->dev, "power off\n");
+
+	ret = regmap_multi_reg_write(lt9611->regmap, off, ARRAY_SIZE(off));
+	if (!ret)
+		lt9611->power_on = false;
+
+	return ret;
+}
+
+static void lt9611_i2s_init(struct lt9611 *lt9611)
+{
+	const struct reg_sequence init[] = {
+		{ 0xff, 0x82 },
+		{ 0xd6, 0x8c },
+		{ 0xd7, 0x04 },
+
+		{ 0xff, 0x84 },
+		{ 0x06, 0x08 },
+		{ 0x07, 0x10 },
+
+		{ 0x34, 0xd4 },
+	};
+
+	regmap_multi_reg_write(lt9611->regmap, init, ARRAY_SIZE(init));
+}
+
+static void lt9611_reset(struct lt9611 *lt9611)
+{
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
+	msleep(20);
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 0);
+	msleep(20);
+	gpiod_set_value_cansleep(lt9611->reset_gpio, 1);
+	msleep(100);
+}
+
+static void lt9611_assert_5v(struct lt9611 *lt9611)
+{
+	if (!lt9611->enable_gpio)
+		return;
+
+	gpiod_set_value_cansleep(lt9611->enable_gpio, 1);
+	msleep(20);
+}
+
+static int lt9611_regulator_init(struct lt9611 *lt9611)
+{
+	int ret;
+
+	lt9611->supplies[0].supply = "vdd";
+	lt9611->supplies[1].supply = "vcc";
+	ret = devm_regulator_bulk_get(lt9611->dev, 2, lt9611->supplies);
+	if (ret < 0)
+		return ret;
+
+	return regulator_set_load(lt9611->supplies[0].consumer, 300000);
+}
+
+static int lt9611_regulator_enable(struct lt9611 *lt9611)
+{
+	int ret;
+
+	ret = regulator_enable(lt9611->supplies[0].consumer);
+	if (ret < 0)
+		return ret;
+
+	usleep_range(1000, 10000);
+
+	ret = regulator_enable(lt9611->supplies[1].consumer);
+	if (ret < 0) {
+		regulator_disable(lt9611->supplies[0].consumer);
+		return ret;
+	}
+
+	return 0;
+}
+
+static struct lt9611_mode *lt9611_find_mode(const struct drm_display_mode *mode)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(lt9611_modes); i++) {
+		if (lt9611_modes[i].hdisplay == mode->hdisplay &&
+		    lt9611_modes[i].vdisplay == mode->vdisplay &&
+		    lt9611_modes[i].fps == drm_mode_vrefresh(mode)) {
+			return &lt9611_modes[i];
+		}
+	}
+
+	return NULL;
+}
+
+/* connector funcs */
+static enum drm_connector_status
+lt9611_connector_detect(struct drm_connector *connector, bool force)
+{
+	struct lt9611 *lt9611 = connector_to_lt9611(connector);
+	unsigned int reg_val = 0;
+	int connected = 0;
+
+	regmap_write(lt9611->regmap, 0xff, 0x82);
+	regmap_read(lt9611->regmap, 0x5e, &reg_val);
+	connected  = (reg_val & BIT(2));
+	dev_dbg(lt9611->dev, "connected = %x\n", connected);
+
+	lt9611->status = connected ?  connector_status_connected :
+				connector_status_disconnected;
+
+	return lt9611->status;
+}
+
+static int lt9611_read_edid(struct lt9611 *lt9611)
+{
+	unsigned int temp;
+	int ret = 0;
+	int i, j;
+
+	memset(lt9611->edid_buf, 0, EDID_SEG_SIZE);
+
+	regmap_write(lt9611->regmap, 0xff, 0x85);
+	regmap_write(lt9611->regmap, 0x03, 0xc9);
+	regmap_write(lt9611->regmap, 0x04, 0xa0); /* 0xA0 is EDID device address */
+	regmap_write(lt9611->regmap, 0x05, 0x00); /* 0x00 is EDID offset address */
+	regmap_write(lt9611->regmap, 0x06, 0x20); /* length for read */
+	regmap_write(lt9611->regmap, 0x14, 0x7f);
+
+	for (i = 0 ; i < 8 ; i++) {
+		regmap_write(lt9611->regmap, 0x05, i * 32); /* offset address */
+		regmap_write(lt9611->regmap, 0x07, 0x36);
+		regmap_write(lt9611->regmap, 0x07, 0x31);
+		regmap_write(lt9611->regmap, 0x07, 0x37);
+		usleep_range(5000, 10000);
+
+		regmap_read(lt9611->regmap, 0x40, &temp);
+
+		if (temp & 0x02) {  /*KEY_DDC_ACCS_DONE=1*/
+			for (j = 0; j < 32; j++) {
+				regmap_read(lt9611->regmap, 0x83, &temp);
+				lt9611->edid_buf[i*32+j] = temp;
+			}
+		} else if (temp & 0x50) { /* DDC No Ack or Abitration lost */
+			dev_err(lt9611->dev, "read edid failed: no ack\n");
+			ret = -EIO;
+			goto end;
+		} else {
+			dev_err(lt9611->dev, "read edid failed: access not done\n");
+			ret = -EIO;
+			goto end;
+		}
+	}
+
+	dev_dbg(lt9611->dev, "read edid succeeded, checksum = 0x%x\n",
+		lt9611->edid_buf[255]);
+
+end:
+	regmap_write(lt9611->regmap, 0x07, 0x1f);
+	return ret;
+}
+
+/* TODO: add support for more extenstion blocks */
+static int lt9611_get_edid_block(void *data, u8 *buf, unsigned int block,
+				  size_t len)
+{
+	struct lt9611 *lt9611 = data;
+	int ret;
+
+	dev_dbg(lt9611->dev, "get edid block: block=%d, len=%d\n", block, (int)len);
+
+	if (len > 128)
+		return -EINVAL;
+
+	/* support up to 1 extension block */
+	if (block > 1)
+		return -EINVAL;
+
+	if (block == 0) {
+		/* always read 2 edid blocks once */
+		ret = lt9611_read_edid(lt9611);
+		if (ret) {
+			dev_err(lt9611->dev, "edid read failed\n");
+			return ret;
+		}
+	}
+
+	if (block % 2 == 0)
+		memcpy(buf, lt9611->edid_buf, len);
+	else
+		memcpy(buf, lt9611->edid_buf + 128, len);
+
+	return 0;
+}
+
+static int lt9611_connector_get_modes(struct drm_connector *connector)
+{
+	struct lt9611 *lt9611 = connector_to_lt9611(connector);
+	unsigned int count;
+	struct edid *edid;
+
+	dev_dbg(lt9611->dev, "get modes\n");
+
+	lt9611_power_on(lt9611);
+	edid = drm_do_get_edid(connector, lt9611_get_edid_block, lt9611);
+	drm_connector_update_edid_property(connector, edid);
+	count = drm_add_edid_modes(connector, edid);
+	kfree(edid);
+
+	return count;
+}
+
+static enum drm_mode_status lt9611_connector_mode_valid(
+	struct drm_connector *connector, struct drm_display_mode *mode)
+{
+	struct lt9611_mode *lt9611_mode = lt9611_find_mode(mode);
+
+	return lt9611_mode ? MODE_OK : MODE_BAD;
+}
+
+/* bridge funcs */
+static void lt9611_bridge_enable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	const struct reg_sequence on[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0xea },
+	};
+
+	dev_dbg(lt9611->dev, "bridge enable\n");
+
+	if (lt9611_power_on(lt9611)) {
+		dev_err(lt9611->dev, "power on failed\n");
+		return;
+	}
+
+	dev_dbg(lt9611->dev, "video on\n");
+
+	lt9611_mipi_input_analog(lt9611);
+	lt9611_hdmi_tx_digital(lt9611);
+	lt9611_hdmi_tx_phy(lt9611);
+
+	msleep(500);
+
+	lt9611_video_check(lt9611);
+
+	/* Enable HDMI output */
+	regmap_multi_reg_write(lt9611->regmap, on, ARRAY_SIZE(on));
+}
+
+static void lt9611_bridge_disable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	int ret;
+	const struct reg_sequence hdmi_off[] = {
+		{ 0xff, 0x81 },
+		{ 0x30, 0x6a },
+	};
+
+	dev_dbg(lt9611->dev, "bridge disable\n");
+
+	/* Disable HDMI output */
+	ret = regmap_multi_reg_write(lt9611->regmap, hdmi_off, ARRAY_SIZE(hdmi_off));
+	if (ret) {
+		dev_err(lt9611->dev, "video on failed\n");
+		return;
+	}
+
+	if (lt9611_power_off(lt9611)) {
+		dev_err(lt9611->dev, "power on failed\n");
+		return;
+	}
+}
+
+static struct drm_connector_helper_funcs lt9611_bridge_connector_helper_funcs = {
+	.get_modes = lt9611_connector_get_modes,
+	.mode_valid = lt9611_connector_mode_valid,
+};
+
+static const struct drm_connector_funcs lt9611_bridge_connector_funcs = {
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.detect = lt9611_connector_detect,
+	.destroy = drm_connector_cleanup,
+	.reset = drm_atomic_helper_connector_reset,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
+static struct mipi_dsi_device *lt9611_attach_dsi(struct lt9611 *lt9611,
+						 struct device_node *dsi_node)
+{
+	const struct mipi_dsi_device_info info = { "lt9611", 0, NULL };
+	struct mipi_dsi_device *dsi;
+	struct mipi_dsi_host *host;
+	int ret;
+
+	host = of_find_mipi_dsi_host_by_node(dsi_node);
+	if (!host) {
+		dev_err(lt9611->dev, "failed to find dsi host\n");
+		return ERR_PTR(-EPROBE_DEFER);
+	}
+
+	dsi = mipi_dsi_device_register_full(host, &info);
+	if (IS_ERR(dsi)) {
+		dev_err(lt9611->dev, "failed to create dsi device\n");
+		return dsi;
+	}
+
+	dsi->lanes = 4;
+	dsi->format = MIPI_DSI_FMT_RGB888;
+	dsi->mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_SYNC_PULSE |
+			  MIPI_DSI_MODE_VIDEO_HSE;
+
+	ret = mipi_dsi_attach(dsi);
+	if (ret < 0) {
+		dev_err(lt9611->dev, "failed to attach dsi to host\n");
+		mipi_dsi_device_unregister(dsi);
+		return ERR_PTR(ret);
+	}
+
+	return dsi;
+}
+
+static int lt9611_bridge_attach(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	int ret;
+
+	dev_dbg(lt9611->dev, "bridge attach\n");
+
+	ret = drm_connector_init(bridge->dev, &lt9611->connector,
+				 &lt9611_bridge_connector_funcs,
+				 DRM_MODE_CONNECTOR_HDMIA);
+	if (ret) {
+		DRM_ERROR("Failed to initialize connector with drm\n");
+		return ret;
+	}
+
+	drm_connector_helper_add(&lt9611->connector,
+				 &lt9611_bridge_connector_helper_funcs);
+	drm_connector_attach_encoder(&lt9611->connector, bridge->encoder);
+
+	if (!bridge->encoder) {
+		DRM_ERROR("Parent encoder object not found");
+		return -ENODEV;
+	}
+
+	/* Attach primary DSI */
+	lt9611->dsi0 = lt9611_attach_dsi(lt9611, lt9611->dsi0_node);
+	if (IS_ERR(lt9611->dsi0))
+		return PTR_ERR(lt9611->dsi0);
+
+	/* Attach secondary DSI, if specified */
+	if (lt9611->dsi1_node) {
+		lt9611->dsi1 = lt9611_attach_dsi(lt9611, lt9611->dsi1_node);
+		if (IS_ERR(lt9611->dsi1)) {
+			ret = PTR_ERR(lt9611->dsi1);
+			goto err_unregister_dsi0;
+		}
+	}
+
+	return 0;
+
+err_unregister_dsi0:
+	mipi_dsi_device_unregister(lt9611->dsi0);
+
+	return ret;
+}
+
+static void lt9611_bridge_detach(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	if (lt9611->dsi1) {
+		mipi_dsi_detach(lt9611->dsi1);
+		mipi_dsi_device_unregister(lt9611->dsi1);
+	}
+
+	mipi_dsi_detach(lt9611->dsi0);
+	mipi_dsi_device_unregister(lt9611->dsi0);
+}
+
+static enum drm_mode_status
+lt9611_bridge_mode_valid(struct drm_bridge *bridge,
+			 const struct drm_display_mode *mode)
+{
+	struct lt9611_mode *lt9611_mode = lt9611_find_mode(mode);
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	if (lt9611_mode->intfs > 1 && !lt9611->dsi1)
+		return MODE_PANEL;
+	else
+		return MODE_OK;
+}
+
+static void lt9611_bridge_pre_enable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	dev_dbg(lt9611->dev, "bridge pre_enable\n");
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0xee, 0x01);
+}
+
+static void lt9611_bridge_post_disable(struct drm_bridge *bridge)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+
+	dev_dbg(lt9611->dev, "bridge post_disable\n");
+
+	/* TODO: We still need to figure out how to best put the
+	 * hardware to sleep while still allowing hotplug
+	 * detection to work here. -jstultz
+	 */
+}
+
+static void lt9611_bridge_mode_set(struct drm_bridge *bridge,
+				   const struct drm_display_mode *mode,
+				   const struct drm_display_mode *adj_mode)
+{
+	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
+	struct hdmi_avi_infoframe avi_frame;
+	int ret;
+
+	dev_dbg(lt9611->dev, "bridge mode_set: hdisplay=%d, vdisplay=%d, vrefresh=%d, clock=%d\n",
+		adj_mode->hdisplay, adj_mode->vdisplay,
+		adj_mode->vrefresh, adj_mode->clock);
+
+	lt9611_mipi_input_digital(lt9611, mode);
+	lt9611_pll_setup(lt9611, mode);
+	lt9611_mipi_video_setup(lt9611, mode);
+	lt9611_pcr_setup(lt9611, mode);
+
+	ret = drm_hdmi_avi_infoframe_from_display_mode(&avi_frame,
+						       &lt9611->connector,
+						       mode);
+	if (!ret)
+		lt9611->vic = avi_frame.video_code;
+}
+
+static const struct drm_bridge_funcs lt9611_bridge_funcs = {
+	.attach = lt9611_bridge_attach,
+	.detach = lt9611_bridge_detach,
+	.mode_valid = lt9611_bridge_mode_valid,
+	.pre_enable   = lt9611_bridge_pre_enable,
+	.enable = lt9611_bridge_enable,
+	.disable = lt9611_bridge_disable,
+	.post_disable = lt9611_bridge_post_disable,
+	.mode_set = lt9611_bridge_mode_set,
+};
+
+static int lt9611_parse_dt(struct device *dev,
+	struct lt9611 *lt9611)
+{
+	lt9611->dsi0_node = of_graph_get_remote_node(dev->of_node, 1, -1);
+	if (!lt9611->dsi0_node) {
+		DRM_DEV_ERROR(dev,
+			"failed to get remote node for primary dsi\n");
+		return -ENODEV;
+	}
+
+	lt9611->dsi1_node = of_graph_get_remote_node(dev->of_node, 2, -1);
+
+	lt9611->ac_mode = of_property_read_bool(dev->of_node, "lt,ac-mode");
+	dev_dbg(lt9611->dev, "ac_mode=%d\n", lt9611->ac_mode);
+
+	return 0;
+}
+
+static int lt9611_gpio_init(struct lt9611 *lt9611)
+{
+	struct device *dev = lt9611->dev;
+
+	lt9611->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+	if (IS_ERR(lt9611->reset_gpio)) {
+		dev_err(dev, "failed to acquire reset gpio\n");
+		return PTR_ERR(lt9611->reset_gpio);
+	}
+
+	lt9611->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_LOW);
+	if (IS_ERR(lt9611->enable_gpio)) {
+		dev_err(dev, "failed to acquire enable gpio\n");
+		return PTR_ERR(lt9611->enable_gpio);
+	}
+
+	return 0;
+}
+
+static int lt9611_read_device_rev(struct lt9611 *lt9611)
+{
+	unsigned int rev;
+	int ret;
+
+	regmap_write(lt9611->regmap, 0xff, 0x80);
+	regmap_write(lt9611->regmap, 0xee, 0x01);
+
+	ret = regmap_read(lt9611->regmap, 0x02, &rev);
+	if (ret)
+		dev_err(lt9611->dev, "failed to read revision: %d\n", ret);
+
+	dev_info(lt9611->dev, "LT9611 revsion: 0x%x\n", rev);
+
+	return ret;
+}
+
+static int lt9611_probe(struct i2c_client *client,
+	 const struct i2c_device_id *id)
+{
+	struct lt9611 *lt9611;
+	struct device *dev = &client->dev;
+	int ret;
+
+	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+		dev_err(dev, "device doesn't support I2C\n");
+		return -ENODEV;
+	}
+
+	lt9611 = devm_kzalloc(dev, sizeof(*lt9611), GFP_KERNEL);
+	if (!lt9611)
+		return -ENOMEM;
+
+	lt9611->dev = &client->dev;
+	lt9611->client = client;
+
+	lt9611->regmap = devm_regmap_init_i2c(client, &lt9611_regmap_config);
+	if (IS_ERR(lt9611->regmap)) {
+		DRM_ERROR("regmap i2c init failed\n");
+		return PTR_ERR(lt9611->regmap);
+	}
+
+	ret = lt9611_parse_dt(&client->dev, lt9611);
+	if (ret) {
+		dev_err(dev, "failed to parse device tree\n");
+		return ret;
+	}
+
+	ret = lt9611_gpio_init(lt9611);
+	if (ret < 0)
+		return ret;
+
+	ret = lt9611_regulator_init(lt9611);
+	if (ret < 0)
+		return ret;
+
+	lt9611_assert_5v(lt9611);
+
+	ret = lt9611_regulator_enable(lt9611);
+	if (ret)
+		return ret;
+
+	lt9611_reset(lt9611);
+
+	ret = lt9611_read_device_rev(lt9611);
+	if (ret) {
+		dev_err(dev, "failed to read chip rev\n");
+		goto err_disable_regulators;
+	}
+
+	lt9611_i2s_init(lt9611);
+
+	ret = devm_request_threaded_irq(dev, client->irq, NULL,
+					lt9611_irq_thread_handler,
+					IRQF_ONESHOT, "lt9611", lt9611);
+	if (ret) {
+		dev_err(dev, "failed to request irq\n");
+		goto err_disable_regulators;
+	}
+
+	i2c_set_clientdata(client, lt9611);
+
+	lt9611->bridge.funcs = &lt9611_bridge_funcs;
+	lt9611->bridge.of_node = client->dev.of_node;
+
+	drm_bridge_add(&lt9611->bridge);
+
+	lt9611_enable_hpd_interrupts(lt9611);
+
+	return 0;
+
+err_disable_regulators:
+	regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
+
+	of_node_put(lt9611->dsi0_node);
+	of_node_put(lt9611->dsi1_node);
+
+	return ret;
+}
+
+static int lt9611_remove(struct i2c_client *client)
+{
+	struct lt9611 *lt9611 = i2c_get_clientdata(client);
+
+	disable_irq(client->irq);
+
+	drm_bridge_remove(&lt9611->bridge);
+
+	regulator_bulk_disable(ARRAY_SIZE(lt9611->supplies), lt9611->supplies);
+
+	of_node_put(lt9611->dsi0_node);
+	of_node_put(lt9611->dsi1_node);
+
+	return 0;
+}
+
+
+static struct i2c_device_id lt9611_id[] = {
+	{ "lt,lt9611", 0},
+	{}
+};
+
+static const struct of_device_id lt9611_match_table[] = {
+	{.compatible = "lt,lt9611"},
+	{}
+};
+MODULE_DEVICE_TABLE(of, lt9611_match_table);
+
+static struct i2c_driver lt9611_driver = {
+	.driver = {
+		.name = "lt9611",
+		.of_match_table = lt9611_match_table,
+	},
+	.probe = lt9611_probe,
+	.remove = lt9611_remove,
+	.id_table = lt9611_id,
+};
+module_i2c_driver(lt9611_driver);
+
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 2337b38..d932256 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -887,6 +887,38 @@
 	{ DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER, "DCI-P3_RGB_Theater" },
 };
 
+/*
+ * As per DP 1.4a spec, 2.2.5.7.5 VSC SDP Payload for Pixel Encoding/Colorimetry
+ * Format Table 2-120
+ */
+static const struct drm_prop_enum_list dp_colorspaces[] = {
+	/* For Default case, driver will set the colorspace */
+	{ DRM_MODE_COLORIMETRY_DEFAULT, "Default" },
+	{ DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED, "RGB_Wide_Gamut_Fixed_Point" },
+	/* Colorimetry based on scRGB (IEC 61966-2-2) */
+	{ DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT, "RGB_Wide_Gamut_Floating_Point" },
+	/* Colorimetry based on IEC 61966-2-5 */
+	{ DRM_MODE_COLORIMETRY_OPRGB, "opRGB" },
+	/* Colorimetry based on SMPTE RP 431-2 */
+	{ DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65, "DCI-P3_RGB_D65" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_RGB, "BT2020_RGB" },
+	{ DRM_MODE_COLORIMETRY_BT601_YCC, "BT601_YCC" },
+	{ DRM_MODE_COLORIMETRY_BT709_YCC, "BT709_YCC" },
+	/* Standard Definition Colorimetry based on IEC 61966-2-4 */
+	{ DRM_MODE_COLORIMETRY_XVYCC_601, "XVYCC_601" },
+	/* High Definition Colorimetry based on IEC 61966-2-4 */
+	{ DRM_MODE_COLORIMETRY_XVYCC_709, "XVYCC_709" },
+	/* Colorimetry based on IEC 61966-2-1/Amendment 1 */
+	{ DRM_MODE_COLORIMETRY_SYCC_601, "SYCC_601" },
+	/* Colorimetry based on IEC 61966-2-5 [33] */
+	{ DRM_MODE_COLORIMETRY_OPYCC_601, "opYCC_601" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_CYCC, "BT2020_CYCC" },
+	/* Colorimetry based on ITU-R BT.2020 */
+	{ DRM_MODE_COLORIMETRY_BT2020_YCC, "BT2020_YCC" },
+};
+
 /**
  * DOC: standard connector properties
  *
@@ -1679,7 +1711,6 @@
  * DOC: standard connector properties
  *
  * Colorspace:
- *     drm_mode_create_colorspace_property - create colorspace property
  *     This property helps select a suitable colorspace based on the sink
  *     capability. Modern sink devices support wider gamut like BT2020.
  *     This helps switch to BT2020 mode if the BT2020 encoded video stream
@@ -1699,32 +1730,68 @@
  *      - This property is just to inform sink what colorspace
  *        source is trying to drive.
  *
- * Called by a driver the first time it's needed, must be attached to desired
- * connectors.
+ * Because between HDMI and DP have different colorspaces,
+ * drm_mode_create_hdmi_colorspace_property() is used for HDMI connector and
+ * drm_mode_create_dp_colorspace_property() is used for DP connector.
  */
-int drm_mode_create_colorspace_property(struct drm_connector *connector)
+
+/**
+ * drm_mode_create_hdmi_colorspace_property - create hdmi colorspace property
+ * @connector: connector to create the Colorspace property on.
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * HDMI connectors.
+ *
+ * Returns:
+ * Zero on success, negative errono on failure.
+ */
+int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector)
 {
 	struct drm_device *dev = connector->dev;
-	struct drm_property *prop;
 
-	if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA ||
-	    connector->connector_type == DRM_MODE_CONNECTOR_HDMIB) {
-		prop = drm_property_create_enum(dev, DRM_MODE_PROP_ENUM,
-						"Colorspace",
-						hdmi_colorspaces,
-						ARRAY_SIZE(hdmi_colorspaces));
-		if (!prop)
-			return -ENOMEM;
-	} else {
-		DRM_DEBUG_KMS("Colorspace property not supported\n");
+	if (connector->colorspace_property)
 		return 0;
-	}
 
-	connector->colorspace_property = prop;
+	connector->colorspace_property =
+		drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "Colorspace",
+					 hdmi_colorspaces,
+					 ARRAY_SIZE(hdmi_colorspaces));
+
+	if (!connector->colorspace_property)
+		return -ENOMEM;
 
 	return 0;
 }
-EXPORT_SYMBOL(drm_mode_create_colorspace_property);
+EXPORT_SYMBOL(drm_mode_create_hdmi_colorspace_property);
+
+/**
+ * drm_mode_create_dp_colorspace_property - create dp colorspace property
+ * @connector: connector to create the Colorspace property on.
+ *
+ * Called by a driver the first time it's needed, must be attached to desired
+ * DP connectors.
+ *
+ * Returns:
+ * Zero on success, negative errono on failure.
+ */
+int drm_mode_create_dp_colorspace_property(struct drm_connector *connector)
+{
+	struct drm_device *dev = connector->dev;
+
+	if (connector->colorspace_property)
+		return 0;
+
+	connector->colorspace_property =
+		drm_property_create_enum(dev, DRM_MODE_PROP_ENUM, "Colorspace",
+					 dp_colorspaces,
+					 ARRAY_SIZE(dp_colorspaces));
+
+	if (!connector->colorspace_property)
+		return -ENOMEM;
+
+	return 0;
+}
+EXPORT_SYMBOL(drm_mode_create_dp_colorspace_property);
 
 /**
  * drm_mode_create_content_type_property - create content type property
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index ffc68d3..8b6dd549f 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -337,6 +337,65 @@
 EXPORT_SYMBOL(drm_dp_dpcd_read_link_status);
 
 /**
+ * drm_dp_send_real_edid_checksum() - send back real edid checksum value
+ * @aux: DisplayPort AUX channel
+ * @real_edid_checksum: real edid checksum for the last block
+ *
+ * Returns:
+ * True on success
+ */
+bool drm_dp_send_real_edid_checksum(struct drm_dp_aux *aux,
+				    u8 real_edid_checksum)
+{
+	u8 link_edid_read = 0, auto_test_req = 0, test_resp = 0;
+
+	if (drm_dp_dpcd_read(aux, DP_DEVICE_SERVICE_IRQ_VECTOR,
+			     &auto_test_req, 1) < 1) {
+		DRM_ERROR("DPCD failed read at register 0x%x\n",
+			  DP_DEVICE_SERVICE_IRQ_VECTOR);
+		return false;
+	}
+	auto_test_req &= DP_AUTOMATED_TEST_REQUEST;
+
+	if (drm_dp_dpcd_read(aux, DP_TEST_REQUEST, &link_edid_read, 1) < 1) {
+		DRM_ERROR("DPCD failed read at register 0x%x\n",
+			  DP_TEST_REQUEST);
+		return false;
+	}
+	link_edid_read &= DP_TEST_LINK_EDID_READ;
+
+	if (!auto_test_req || !link_edid_read) {
+		DRM_DEBUG_KMS("Source DUT does not support TEST_EDID_READ\n");
+		return false;
+	}
+
+	if (drm_dp_dpcd_write(aux, DP_DEVICE_SERVICE_IRQ_VECTOR,
+			      &auto_test_req, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_DEVICE_SERVICE_IRQ_VECTOR);
+		return false;
+	}
+
+	/* send back checksum for the last edid extension block data */
+	if (drm_dp_dpcd_write(aux, DP_TEST_EDID_CHECKSUM,
+			      &real_edid_checksum, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_TEST_EDID_CHECKSUM);
+		return false;
+	}
+
+	test_resp |= DP_TEST_EDID_CHECKSUM_WRITE;
+	if (drm_dp_dpcd_write(aux, DP_TEST_RESPONSE, &test_resp, 1) < 1) {
+		DRM_ERROR("DPCD failed write at register 0x%x\n",
+			  DP_TEST_RESPONSE);
+		return false;
+	}
+
+	return true;
+}
+EXPORT_SYMBOL(drm_dp_send_real_edid_checksum);
+
+/**
  * drm_dp_link_probe() - probe a DisplayPort link for capabilities
  * @aux: DisplayPort AUX channel
  * @link: pointer to structure in which to return link capabilities
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 9b69e55a..4525e0a 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1351,11 +1351,22 @@
 static int drm_edid_block_checksum(const u8 *raw_edid)
 {
 	int i;
-	u8 csum = 0;
-	for (i = 0; i < EDID_LENGTH; i++)
+	u8 csum = 0, crc = 0;
+
+	for (i = 0; i < EDID_LENGTH - 1; i++)
 		csum += raw_edid[i];
 
-	return csum;
+	crc = 0x100 - csum;
+
+	return crc;
+}
+
+static bool drm_edid_block_checksum_diff(const u8 *raw_edid, u8 real_checksum)
+{
+	if (raw_edid[EDID_LENGTH - 1] != real_checksum)
+		return true;
+	else
+		return false;
 }
 
 static bool drm_edid_is_zero(const u8 *in_edid, int length)
@@ -1413,7 +1424,7 @@
 	}
 
 	csum = drm_edid_block_checksum(raw_edid);
-	if (csum) {
+	if (drm_edid_block_checksum_diff(raw_edid, csum)) {
 		if (edid_corrupt)
 			*edid_corrupt = true;
 
@@ -1554,6 +1565,11 @@
 			       u8 *edid, int num_blocks)
 {
 	int i;
+	u8 num_of_ext = edid[0x7e];
+
+	/* Calculate real checksum for the last edid extension block data */
+	connector->real_edid_checksum =
+		drm_edid_block_checksum(edid + num_of_ext * EDID_LENGTH);
 
 	if (connector->bad_edid_counter++ && !(drm_debug & DRM_UT_KMS))
 		return;
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 02ffde5..87914b8 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -390,11 +390,7 @@
 	unsigned int y;
 
 	for (y = clip->y1; y < clip->y2; y++) {
-		if (!fb_helper->dev->mode_config.fbdev_use_iomem)
-			memcpy(dst, src, len);
-		else
-			memcpy_toio((void __iomem *)dst, src, len);
-
+		memcpy(dst, src, len);
 		src += fb->pitches[0];
 		dst += fb->pitches[0];
 	}
diff --git a/drivers/gpu/drm/drm_file.c b/drivers/gpu/drm/drm_file.c
index ea34bc9..d5c9d11 100644
--- a/drivers/gpu/drm/drm_file.c
+++ b/drivers/gpu/drm/drm_file.c
@@ -49,6 +49,8 @@
 /* from BKL pushdown */
 DEFINE_MUTEX(drm_global_mutex);
 
+#define MAX_DRM_OPEN_COUNT		4096
+
 /**
  * DOC: file operations
  *
@@ -380,6 +382,11 @@
 	if (!dev->open_count++)
 		need_setup = 1;
 
+	if (dev->open_count >= MAX_DRM_OPEN_COUNT) {
+		retcode = -EPERM;
+		goto err_undo;
+	}
+
 	/* share address_space across all char-devs of a single device */
 	filp->f_mapping = dev->anon_inode->i_mapping;
 
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index 5756431..c62250c 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -295,7 +295,8 @@
 	struct drm_framebuffer *fb;
 	int ret;
 
-	if (r->flags & ~(DRM_MODE_FB_INTERLACED | DRM_MODE_FB_MODIFIERS)) {
+	if (r->flags & ~(DRM_MODE_FB_INTERLACED | DRM_MODE_FB_MODIFIERS |
+			DRM_MODE_FB_SECURE)) {
 		DRM_DEBUG_KMS("bad framebuffer flags 0x%08x\n", r->flags);
 		return ERR_PTR(-EINVAL);
 	}
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 76b6676..57a85eb 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -677,9 +677,9 @@
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb_ioctl, 0),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, 0),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, 0),
-	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, 0),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_RENDER_ALLOW),
+	DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_RENDER_ALLOW),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, 0),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER),
 	DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER),
diff --git a/drivers/gpu/drm/drm_mipi_dsi.c b/drivers/gpu/drm/drm_mipi_dsi.c
index b99f96d..edaec70 100644
--- a/drivers/gpu/drm/drm_mipi_dsi.c
+++ b/drivers/gpu/drm/drm_mipi_dsi.c
@@ -355,6 +355,7 @@
 
 	if (dsi->mode_flags & MIPI_DSI_MODE_LPM)
 		msg->flags |= MIPI_DSI_MSG_USE_LPM;
+	msg->flags |= MIPI_DSI_MSG_LASTCOMMAND;
 
 	return ops->transfer(dsi->host, msg);
 }
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 3fd35e6..e4e33caf 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -2052,6 +2052,7 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(drm_mode_convert_umode);
 
 /**
  * drm_mode_is_420_only - if a given videomode can be only supported in YCBCR420
diff --git a/drivers/gpu/drm/drm_panel.c b/drivers/gpu/drm/drm_panel.c
index 6b0bf42..da69dc2 100644
--- a/drivers/gpu/drm/drm_panel.c
+++ b/drivers/gpu/drm/drm_panel.c
@@ -51,6 +51,7 @@
 void drm_panel_init(struct drm_panel *panel)
 {
 	INIT_LIST_HEAD(&panel->list);
+	BLOCKING_INIT_NOTIFIER_HEAD(&panel->nh);
 }
 EXPORT_SYMBOL(drm_panel_init);
 
@@ -266,6 +267,27 @@
 EXPORT_SYMBOL(of_drm_find_panel);
 #endif
 
+int drm_panel_notifier_register(struct drm_panel *panel,
+	struct notifier_block *nb)
+{
+	return blocking_notifier_chain_register(&panel->nh, nb);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_register);
+
+int drm_panel_notifier_unregister(struct drm_panel *panel,
+	struct notifier_block *nb)
+{
+	return blocking_notifier_chain_unregister(&panel->nh, nb);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_unregister);
+
+int drm_panel_notifier_call_chain(struct drm_panel *panel,
+	unsigned long val, void *v)
+{
+	return blocking_notifier_call_chain(&panel->nh, val, v);
+}
+EXPORT_SYMBOL_GPL(drm_panel_notifier_call_chain);
+
 MODULE_AUTHOR("Thierry Reding <treding@nvidia.com>");
 MODULE_DESCRIPTION("DRM panel infrastructure");
 MODULE_LICENSE("GPL and additional rights");
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 0a2316e..f9f60de 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -767,6 +767,28 @@
 }
 EXPORT_SYMBOL(drm_gem_dmabuf_mmap);
 
+/**
+ * drm_gem_dmabuf_get_uuid - dma_buf get_uuid implementation for GEM
+ * @dma_buf: buffer to query
+ * @uuid: uuid outparam
+ *
+ * Queries the buffer's virtio UUID. This can be used as the
+ * &dma_buf_ops.get_uuid callback. Calls into &drm_driver.gem_prime_get_uuid.
+ *
+ * Returns 0 on success or a negative error code on failure.
+ */
+int drm_gem_dmabuf_get_uuid(struct dma_buf *dma_buf, uuid_t *uuid)
+{
+	struct drm_gem_object *obj = dma_buf->priv;
+	struct drm_device *dev = obj->dev;
+
+	if (!dev->driver->gem_prime_get_uuid)
+		return -ENODEV;
+
+	return dev->driver->gem_prime_get_uuid(obj, uuid);
+}
+EXPORT_SYMBOL(drm_gem_dmabuf_get_uuid);
+
 static const struct dma_buf_ops drm_gem_prime_dmabuf_ops =  {
 	.cache_sgt_mapping = true,
 	.attach = drm_gem_map_attach,
@@ -777,6 +799,7 @@
 	.mmap = drm_gem_dmabuf_mmap,
 	.vmap = drm_gem_dmabuf_vmap,
 	.vunmap = drm_gem_dmabuf_vunmap,
+	.get_uuid = drm_gem_dmabuf_get_uuid,
 };
 
 /**
diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c
index 6ee0480..b363578 100644
--- a/drivers/gpu/drm/drm_property.c
+++ b/drivers/gpu/drm/drm_property.c
@@ -31,6 +31,9 @@
 
 #include "drm_crtc_internal.h"
 
+#define MAX_BLOB_PROP_SIZE	(PAGE_SIZE * 30)
+#define MAX_BLOB_PROP_COUNT	250
+
 /**
  * DOC: overview
  *
@@ -787,12 +790,21 @@
 			      void *data, struct drm_file *file_priv)
 {
 	struct drm_mode_create_blob *out_resp = data;
-	struct drm_property_blob *blob;
+	struct drm_property_blob *blob, *bt;
 	int ret = 0;
+	u32 count = 0;
 
 	if (!drm_core_check_feature(dev, DRIVER_MODESET))
 		return -EOPNOTSUPP;
 
+	mutex_lock(&dev->mode_config.blob_lock);
+	list_for_each_entry(bt, &file_priv->blobs, head_file)
+		count++;
+	mutex_unlock(&dev->mode_config.blob_lock);
+
+	if (count >= MAX_BLOB_PROP_COUNT)
+		return -EOPNOTSUPP;
+
 	blob = drm_property_create_blob(dev, out_resp->length, NULL);
 	if (IS_ERR(blob))
 		return PTR_ERR(blob);
diff --git a/drivers/gpu/drm/hisilicon/Makefile b/drivers/gpu/drm/hisilicon/Makefile
old mode 100644
new mode 100755
diff --git a/drivers/gpu/drm/hisilicon/kirin/Kconfig b/drivers/gpu/drm/hisilicon/kirin/Kconfig
index 290553e..0f2a29e8 100644
--- a/drivers/gpu/drm/hisilicon/kirin/Kconfig
+++ b/drivers/gpu/drm/hisilicon/kirin/Kconfig
@@ -6,7 +6,37 @@
 	select DRM_GEM_CMA_HELPER
 	select DRM_KMS_CMA_HELPER
 	select DRM_MIPI_DSI
+	select DRM_PANEL
 	help
-	  Choose this option if you have a hisilicon Kirin chipsets(hi6220).
+	  Choose this option if you have a hisilicon Kirin chipsets.
 	  If M is selected the module will be called kirin-drm.
 
+if DRM_HISI_KIRIN
+config DRM_HISI_KIRIN620
+	bool "DRM Support for Hisilicon Kirin620 Platform"
+	default n
+	depends on DRM_HISI_KIRIN
+	select DRM_KMS_HELPER
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select DRM_PANEL
+	help
+	  Choose this option if you have hisilicon Kirin Chipset(kirin620).
+	  It includes kirin620 ade and dsi drivers.
+	  If y is to build kirin620 drm into kirin drm drivers.
+
+config DRM_HISI_KIRIN960
+	bool "DRM Support for Hisilicon Kirin960 Platform"
+	default n
+	depends on DRM_HISI_KIRIN
+	select DRM_KMS_HELPER
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_MIPI_DSI
+	select DRM_PANEL
+	help
+	  Choose this option if you have hisilicon Kirin Chipset(kirin960), such
+	  as hikey board. It includes kirin620 dpe and dsi drivers.
+	  If y is to build kirin960 drm into kirin drm drivers.
+endif
diff --git a/drivers/gpu/drm/hisilicon/kirin/Makefile b/drivers/gpu/drm/hisilicon/kirin/Makefile
index d9323f6..d00c948 100644
--- a/drivers/gpu/drm/hisilicon/kirin/Makefile
+++ b/drivers/gpu/drm/hisilicon/kirin/Makefile
@@ -1,6 +1,14 @@
 # SPDX-License-Identifier: GPL-2.0-only
-kirin-drm-y := kirin_drm_drv.o \
-	       kirin_drm_ade.o
+EXTRA_CFLAGS += \
+		-Iinclude/drm
 
-obj-$(CONFIG_DRM_HISI_KIRIN) += kirin-drm.o dw_drm_dsi.o
 
+kirin-drm-y := kirin_drm_drv.o
+kirin-drm-$(CONFIG_DRM_HISI_KIRIN620) += kirin_drm_ade.o
+kirin-drm-$(CONFIG_DRM_HISI_KIRIN960) += kirin_drm_dpe.o
+
+kirin-dsi-y := kirin_drm_dsi.o
+kirin-dsi-$(CONFIG_DRM_HISI_KIRIN620) += kirin/dw_drm_dsi.o
+kirin-dsi-$(CONFIG_DRM_HISI_KIRIN960) += kirin960/dw_drm_dsi.o
+
+obj-$(CONFIG_DRM_HISI_KIRIN) += kirin-drm.o kirin-dsi.o
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
deleted file mode 100644
index 5bf8138..0000000
--- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+++ /dev/null
@@ -1,904 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- * DesignWare MIPI DSI Host Controller v1.02 driver
- *
- * Copyright (c) 2016 Linaro Limited.
- * Copyright (c) 2014-2016 Hisilicon Limited.
- *
- * Author:
- *	Xinliang Liu <z.liuxinliang@hisilicon.com>
- *	Xinliang Liu <xinliang.liu@linaro.org>
- *	Xinwei Kong <kong.kongxinwei@hisilicon.com>
- */
-
-#include <linux/clk.h>
-#include <linux/component.h>
-#include <linux/delay.h>
-#include <linux/module.h>
-#include <linux/platform_device.h>
-
-#include <drm/drm_atomic_helper.h>
-#include <drm/drm_device.h>
-#include <drm/drm_encoder_slave.h>
-#include <drm/drm_mipi_dsi.h>
-#include <drm/drm_of.h>
-#include <drm/drm_print.h>
-#include <drm/drm_probe_helper.h>
-
-#include "dw_dsi_reg.h"
-
-#define MAX_TX_ESC_CLK		10
-#define ROUND(x, y)		((x) / (y) + \
-				((x) % (y) * 10 / (y) >= 5 ? 1 : 0))
-#define PHY_REF_CLK_RATE	19200000
-#define PHY_REF_CLK_PERIOD_PS	(1000000000 / (PHY_REF_CLK_RATE / 1000))
-
-#define encoder_to_dsi(encoder) \
-	container_of(encoder, struct dw_dsi, encoder)
-#define host_to_dsi(host) \
-	container_of(host, struct dw_dsi, host)
-
-struct mipi_phy_params {
-	u32 clk_t_lpx;
-	u32 clk_t_hs_prepare;
-	u32 clk_t_hs_zero;
-	u32 clk_t_hs_trial;
-	u32 clk_t_wakeup;
-	u32 data_t_lpx;
-	u32 data_t_hs_prepare;
-	u32 data_t_hs_zero;
-	u32 data_t_hs_trial;
-	u32 data_t_ta_go;
-	u32 data_t_ta_get;
-	u32 data_t_wakeup;
-	u32 hstx_ckg_sel;
-	u32 pll_fbd_div5f;
-	u32 pll_fbd_div1f;
-	u32 pll_fbd_2p;
-	u32 pll_enbwt;
-	u32 pll_fbd_p;
-	u32 pll_fbd_s;
-	u32 pll_pre_div1p;
-	u32 pll_pre_p;
-	u32 pll_vco_750M;
-	u32 pll_lpf_rs;
-	u32 pll_lpf_cs;
-	u32 clklp2hs_time;
-	u32 clkhs2lp_time;
-	u32 lp2hs_time;
-	u32 hs2lp_time;
-	u32 clk_to_data_delay;
-	u32 data_to_clk_delay;
-	u32 lane_byte_clk_kHz;
-	u32 clk_division;
-};
-
-struct dsi_hw_ctx {
-	void __iomem *base;
-	struct clk *pclk;
-};
-
-struct dw_dsi {
-	struct drm_encoder encoder;
-	struct drm_bridge *bridge;
-	struct mipi_dsi_host host;
-	struct drm_display_mode cur_mode;
-	struct dsi_hw_ctx *ctx;
-	struct mipi_phy_params phy;
-
-	u32 lanes;
-	enum mipi_dsi_pixel_format format;
-	unsigned long mode_flags;
-	bool enable;
-};
-
-struct dsi_data {
-	struct dw_dsi dsi;
-	struct dsi_hw_ctx ctx;
-};
-
-struct dsi_phy_range {
-	u32 min_range_kHz;
-	u32 max_range_kHz;
-	u32 pll_vco_750M;
-	u32 hstx_ckg_sel;
-};
-
-static const struct dsi_phy_range dphy_range_info[] = {
-	{   46875,    62500,   1,    7 },
-	{   62500,    93750,   0,    7 },
-	{   93750,   125000,   1,    6 },
-	{  125000,   187500,   0,    6 },
-	{  187500,   250000,   1,    5 },
-	{  250000,   375000,   0,    5 },
-	{  375000,   500000,   1,    4 },
-	{  500000,   750000,   0,    4 },
-	{  750000,  1000000,   1,    0 },
-	{ 1000000,  1500000,   0,    0 }
-};
-
-static u32 dsi_calc_phy_rate(u32 req_kHz, struct mipi_phy_params *phy)
-{
-	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
-	u32 tmp_kHz = req_kHz;
-	u32 i = 0;
-	u32 q_pll = 1;
-	u32 m_pll = 0;
-	u32 n_pll = 0;
-	u32 r_pll = 1;
-	u32 m_n = 0;
-	u32 m_n_int = 0;
-	u32 f_kHz = 0;
-	u64 temp;
-
-	/*
-	 * Find a rate >= req_kHz.
-	 */
-	do {
-		f_kHz = tmp_kHz;
-
-		for (i = 0; i < ARRAY_SIZE(dphy_range_info); i++)
-			if (f_kHz >= dphy_range_info[i].min_range_kHz &&
-			    f_kHz <= dphy_range_info[i].max_range_kHz)
-				break;
-
-		if (i == ARRAY_SIZE(dphy_range_info)) {
-			DRM_ERROR("%dkHz out of range\n", f_kHz);
-			return 0;
-		}
-
-		phy->pll_vco_750M = dphy_range_info[i].pll_vco_750M;
-		phy->hstx_ckg_sel = dphy_range_info[i].hstx_ckg_sel;
-
-		if (phy->hstx_ckg_sel <= 7 &&
-		    phy->hstx_ckg_sel >= 4)
-			q_pll = 0x10 >> (7 - phy->hstx_ckg_sel);
-
-		temp = f_kHz * (u64)q_pll * (u64)ref_clk_ps;
-		m_n_int = temp / (u64)1000000000;
-		m_n = (temp % (u64)1000000000) / (u64)100000000;
-
-		if (m_n_int % 2 == 0) {
-			if (m_n * 6 >= 50) {
-				n_pll = 2;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 30) {
-				n_pll = 3;
-				m_pll = m_n_int * n_pll + 2;
-			} else {
-				n_pll = 1;
-				m_pll = m_n_int * n_pll;
-			}
-		} else {
-			if (m_n * 6 >= 50) {
-				n_pll = 1;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 30) {
-				n_pll = 1;
-				m_pll = (m_n_int + 1) * n_pll;
-			} else if (m_n * 6 >= 10) {
-				n_pll = 3;
-				m_pll = m_n_int * n_pll + 1;
-			} else {
-				n_pll = 2;
-				m_pll = m_n_int * n_pll;
-			}
-		}
-
-		if (n_pll == 1) {
-			phy->pll_fbd_p = 0;
-			phy->pll_pre_div1p = 1;
-		} else {
-			phy->pll_fbd_p = n_pll;
-			phy->pll_pre_div1p = 0;
-		}
-
-		if (phy->pll_fbd_2p <= 7 && phy->pll_fbd_2p >= 4)
-			r_pll = 0x10 >> (7 - phy->pll_fbd_2p);
-
-		if (m_pll == 2) {
-			phy->pll_pre_p = 0;
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 1;
-		} else if (m_pll >= 2 * 2 * r_pll && m_pll <= 2 * 4 * r_pll) {
-			phy->pll_pre_p = m_pll / (2 * r_pll);
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 1;
-			phy->pll_fbd_div5f = 0;
-		} else if (m_pll >= 2 * 5 * r_pll && m_pll <= 2 * 150 * r_pll) {
-			if (((m_pll / (2 * r_pll)) % 2) == 0) {
-				phy->pll_pre_p =
-					(m_pll / (2 * r_pll)) / 2 - 1;
-				phy->pll_fbd_s =
-					(m_pll / (2 * r_pll)) % 2 + 2;
-			} else {
-				phy->pll_pre_p =
-					(m_pll / (2 * r_pll)) / 2;
-				phy->pll_fbd_s =
-					(m_pll / (2 * r_pll)) % 2;
-			}
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 0;
-		} else {
-			phy->pll_pre_p = 0;
-			phy->pll_fbd_s = 0;
-			phy->pll_fbd_div1f = 0;
-			phy->pll_fbd_div5f = 1;
-		}
-
-		f_kHz = (u64)1000000000 * (u64)m_pll /
-			((u64)ref_clk_ps * (u64)n_pll * (u64)q_pll);
-
-		if (f_kHz >= req_kHz)
-			break;
-
-		tmp_kHz += 10;
-
-	} while (true);
-
-	return f_kHz;
-}
-
-static void dsi_get_phy_params(u32 phy_req_kHz,
-			       struct mipi_phy_params *phy)
-{
-	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
-	u32 phy_rate_kHz;
-	u32 ui;
-
-	memset(phy, 0, sizeof(*phy));
-
-	phy_rate_kHz = dsi_calc_phy_rate(phy_req_kHz, phy);
-	if (!phy_rate_kHz)
-		return;
-
-	ui = 1000000 / phy_rate_kHz;
-
-	phy->clk_t_lpx = ROUND(50, 8 * ui);
-	phy->clk_t_hs_prepare = ROUND(133, 16 * ui) - 1;
-
-	phy->clk_t_hs_zero = ROUND(262, 8 * ui);
-	phy->clk_t_hs_trial = 2 * (ROUND(60, 8 * ui) - 1);
-	phy->clk_t_wakeup = ROUND(1000000, (ref_clk_ps / 1000) - 1);
-	if (phy->clk_t_wakeup > 0xff)
-		phy->clk_t_wakeup = 0xff;
-	phy->data_t_wakeup = phy->clk_t_wakeup;
-	phy->data_t_lpx = phy->clk_t_lpx;
-	phy->data_t_hs_prepare = ROUND(125 + 10 * ui, 16 * ui) - 1;
-	phy->data_t_hs_zero = ROUND(105 + 6 * ui, 8 * ui);
-	phy->data_t_hs_trial = 2 * (ROUND(60 + 4 * ui, 8 * ui) - 1);
-	phy->data_t_ta_go = 3;
-	phy->data_t_ta_get = 4;
-
-	phy->pll_enbwt = 1;
-	phy->clklp2hs_time = ROUND(407, 8 * ui) + 12;
-	phy->clkhs2lp_time = ROUND(105 + 12 * ui, 8 * ui);
-	phy->lp2hs_time = ROUND(240 + 12 * ui, 8 * ui) + 1;
-	phy->hs2lp_time = phy->clkhs2lp_time;
-	phy->clk_to_data_delay = 1 + phy->clklp2hs_time;
-	phy->data_to_clk_delay = ROUND(60 + 52 * ui, 8 * ui) +
-				phy->clkhs2lp_time;
-
-	phy->lane_byte_clk_kHz = phy_rate_kHz / 8;
-	phy->clk_division =
-		DIV_ROUND_UP(phy->lane_byte_clk_kHz, MAX_TX_ESC_CLK);
-}
-
-static u32 dsi_get_dpi_color_coding(enum mipi_dsi_pixel_format format)
-{
-	u32 val;
-
-	/*
-	 * TODO: only support RGB888 now, to support more
-	 */
-	switch (format) {
-	case MIPI_DSI_FMT_RGB888:
-		val = DSI_24BITS_1;
-		break;
-	default:
-		val = DSI_24BITS_1;
-		break;
-	}
-
-	return val;
-}
-
-/*
- * dsi phy reg write function
- */
-static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
-{
-	u32 reg_write = 0x10000 + reg;
-
-	/*
-	 * latch reg first
-	 */
-	writel(reg_write, base + PHY_TST_CTRL1);
-	writel(0x02, base + PHY_TST_CTRL0);
-	writel(0x00, base + PHY_TST_CTRL0);
-
-	/*
-	 * then latch value
-	 */
-	writel(val, base + PHY_TST_CTRL1);
-	writel(0x02, base + PHY_TST_CTRL0);
-	writel(0x00, base + PHY_TST_CTRL0);
-}
-
-static void dsi_set_phy_timer(void __iomem *base,
-			      struct mipi_phy_params *phy,
-			      u32 lanes)
-{
-	u32 val;
-
-	/*
-	 * Set lane value and phy stop wait time.
-	 */
-	val = (lanes - 1) | (PHY_STOP_WAIT_TIME << 8);
-	writel(val, base + PHY_IF_CFG);
-
-	/*
-	 * Set phy clk division.
-	 */
-	val = readl(base + CLKMGR_CFG) | phy->clk_division;
-	writel(val, base + CLKMGR_CFG);
-
-	/*
-	 * Set lp and hs switching params.
-	 */
-	dw_update_bits(base + PHY_TMR_CFG, 24, MASK(8), phy->hs2lp_time);
-	dw_update_bits(base + PHY_TMR_CFG, 16, MASK(8), phy->lp2hs_time);
-	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 16, MASK(10),
-		       phy->clkhs2lp_time);
-	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 0, MASK(10),
-		       phy->clklp2hs_time);
-	dw_update_bits(base + CLK_DATA_TMR_CFG, 8, MASK(8),
-		       phy->data_to_clk_delay);
-	dw_update_bits(base + CLK_DATA_TMR_CFG, 0, MASK(8),
-		       phy->clk_to_data_delay);
-}
-
-static void dsi_set_mipi_phy(void __iomem *base,
-			     struct mipi_phy_params *phy,
-			     u32 lanes)
-{
-	u32 delay_count;
-	u32 val;
-	u32 i;
-
-	/* phy timer setting */
-	dsi_set_phy_timer(base, phy, lanes);
-
-	/*
-	 * Reset to clean up phy tst params.
-	 */
-	writel(0, base + PHY_RSTZ);
-	writel(0, base + PHY_TST_CTRL0);
-	writel(1, base + PHY_TST_CTRL0);
-	writel(0, base + PHY_TST_CTRL0);
-
-	/*
-	 * Clock lane timing control setting: TLPX, THS-PREPARE,
-	 * THS-ZERO, THS-TRAIL, TWAKEUP.
-	 */
-	dsi_phy_tst_set(base, CLK_TLPX, phy->clk_t_lpx);
-	dsi_phy_tst_set(base, CLK_THS_PREPARE, phy->clk_t_hs_prepare);
-	dsi_phy_tst_set(base, CLK_THS_ZERO, phy->clk_t_hs_zero);
-	dsi_phy_tst_set(base, CLK_THS_TRAIL, phy->clk_t_hs_trial);
-	dsi_phy_tst_set(base, CLK_TWAKEUP, phy->clk_t_wakeup);
-
-	/*
-	 * Data lane timing control setting: TLPX, THS-PREPARE,
-	 * THS-ZERO, THS-TRAIL, TTA-GO, TTA-GET, TWAKEUP.
-	 */
-	for (i = 0; i < lanes; i++) {
-		dsi_phy_tst_set(base, DATA_TLPX(i), phy->data_t_lpx);
-		dsi_phy_tst_set(base, DATA_THS_PREPARE(i),
-				phy->data_t_hs_prepare);
-		dsi_phy_tst_set(base, DATA_THS_ZERO(i), phy->data_t_hs_zero);
-		dsi_phy_tst_set(base, DATA_THS_TRAIL(i), phy->data_t_hs_trial);
-		dsi_phy_tst_set(base, DATA_TTA_GO(i), phy->data_t_ta_go);
-		dsi_phy_tst_set(base, DATA_TTA_GET(i), phy->data_t_ta_get);
-		dsi_phy_tst_set(base, DATA_TWAKEUP(i), phy->data_t_wakeup);
-	}
-
-	/*
-	 * physical configuration: I, pll I, pll II, pll III,
-	 * pll IV, pll V.
-	 */
-	dsi_phy_tst_set(base, PHY_CFG_I, phy->hstx_ckg_sel);
-	val = (phy->pll_fbd_div5f << 5) + (phy->pll_fbd_div1f << 4) +
-				(phy->pll_fbd_2p << 1) + phy->pll_enbwt;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_I, val);
-	dsi_phy_tst_set(base, PHY_CFG_PLL_II, phy->pll_fbd_p);
-	dsi_phy_tst_set(base, PHY_CFG_PLL_III, phy->pll_fbd_s);
-	val = (phy->pll_pre_div1p << 7) + phy->pll_pre_p;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_IV, val);
-	val = (5 << 5) + (phy->pll_vco_750M << 4) + (phy->pll_lpf_rs << 2) +
-		phy->pll_lpf_cs;
-	dsi_phy_tst_set(base, PHY_CFG_PLL_V, val);
-
-	writel(PHY_ENABLECLK, base + PHY_RSTZ);
-	udelay(1);
-	writel(PHY_ENABLECLK | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
-	udelay(1);
-	writel(PHY_ENABLECLK | PHY_UNRSTZ | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
-	usleep_range(1000, 1500);
-
-	/*
-	 * wait for phy's clock ready
-	 */
-	delay_count = 100;
-	while (delay_count) {
-		val = readl(base +  PHY_STATUS);
-		if ((BIT(0) | BIT(2)) & val)
-			break;
-
-		udelay(1);
-		delay_count--;
-	}
-
-	if (!delay_count)
-		DRM_INFO("phylock and phystopstateclklane is not ready.\n");
-}
-
-static void dsi_set_mode_timing(void __iomem *base,
-				u32 lane_byte_clk_kHz,
-				struct drm_display_mode *mode,
-				enum mipi_dsi_pixel_format format)
-{
-	u32 hfp, hbp, hsw, vfp, vbp, vsw;
-	u32 hline_time;
-	u32 hsa_time;
-	u32 hbp_time;
-	u32 pixel_clk_kHz;
-	int htot, vtot;
-	u32 val;
-	u64 tmp;
-
-	val = dsi_get_dpi_color_coding(format);
-	writel(val, base + DPI_COLOR_CODING);
-
-	val = (mode->flags & DRM_MODE_FLAG_NHSYNC ? 1 : 0) << 2;
-	val |= (mode->flags & DRM_MODE_FLAG_NVSYNC ? 1 : 0) << 1;
-	writel(val, base +  DPI_CFG_POL);
-
-	/*
-	 * The DSI IP accepts vertical timing using lines as normal,
-	 * but horizontal timing is a mixture of pixel-clocks for the
-	 * active region and byte-lane clocks for the blanking-related
-	 * timings.  hfp is specified as the total hline_time in byte-
-	 * lane clocks minus hsa, hbp and active.
-	 */
-	pixel_clk_kHz = mode->clock;
-	htot = mode->htotal;
-	vtot = mode->vtotal;
-	hfp = mode->hsync_start - mode->hdisplay;
-	hbp = mode->htotal - mode->hsync_end;
-	hsw = mode->hsync_end - mode->hsync_start;
-	vfp = mode->vsync_start - mode->vdisplay;
-	vbp = mode->vtotal - mode->vsync_end;
-	vsw = mode->vsync_end - mode->vsync_start;
-	if (vsw > 15) {
-		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
-		vsw = 15;
-	}
-
-	hsa_time = (hsw * lane_byte_clk_kHz) / pixel_clk_kHz;
-	hbp_time = (hbp * lane_byte_clk_kHz) / pixel_clk_kHz;
-	tmp = (u64)htot * (u64)lane_byte_clk_kHz;
-	hline_time = DIV_ROUND_UP(tmp, pixel_clk_kHz);
-
-	/* all specified in byte-lane clocks */
-	writel(hsa_time, base + VID_HSA_TIME);
-	writel(hbp_time, base + VID_HBP_TIME);
-	writel(hline_time, base + VID_HLINE_TIME);
-
-	writel(vsw, base + VID_VSA_LINES);
-	writel(vbp, base + VID_VBP_LINES);
-	writel(vfp, base + VID_VFP_LINES);
-	writel(mode->vdisplay, base + VID_VACTIVE_LINES);
-	writel(mode->hdisplay, base + VID_PKT_SIZE);
-
-	DRM_DEBUG_DRIVER("htot=%d, hfp=%d, hbp=%d, hsw=%d\n",
-			 htot, hfp, hbp, hsw);
-	DRM_DEBUG_DRIVER("vtol=%d, vfp=%d, vbp=%d, vsw=%d\n",
-			 vtot, vfp, vbp, vsw);
-	DRM_DEBUG_DRIVER("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
-			 hsa_time, hbp_time, hline_time);
-}
-
-static void dsi_set_video_mode(void __iomem *base, unsigned long flags)
-{
-	u32 val;
-	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
-		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
-	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
-		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
-	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
-
-	/*
-	 * choose video mode type
-	 */
-	if ((flags & mode_mask) == non_burst_sync_pulse)
-		val = DSI_NON_BURST_SYNC_PULSES;
-	else if ((flags & mode_mask) == non_burst_sync_event)
-		val = DSI_NON_BURST_SYNC_EVENTS;
-	else
-		val = DSI_BURST_SYNC_PULSES_1;
-	writel(val, base + VID_MODE_CFG);
-
-	writel(PHY_TXREQUESTCLKHS, base + LPCLK_CTRL);
-	writel(DSI_VIDEO_MODE, base + MODE_CFG);
-}
-
-static void dsi_mipi_init(struct dw_dsi *dsi)
-{
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	struct mipi_phy_params *phy = &dsi->phy;
-	struct drm_display_mode *mode = &dsi->cur_mode;
-	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
-	void __iomem *base = ctx->base;
-	u32 dphy_req_kHz;
-
-	/*
-	 * count phy params
-	 */
-	dphy_req_kHz = mode->clock * bpp / dsi->lanes;
-	dsi_get_phy_params(dphy_req_kHz, phy);
-
-	/* reset Core */
-	writel(RESET, base + PWR_UP);
-
-	/* set dsi phy params */
-	dsi_set_mipi_phy(base, phy, dsi->lanes);
-
-	/* set dsi mode timing */
-	dsi_set_mode_timing(base, phy->lane_byte_clk_kHz, mode, dsi->format);
-
-	/* set dsi video mode */
-	dsi_set_video_mode(base, dsi->mode_flags);
-
-	/* dsi wake up */
-	writel(POWERUP, base + PWR_UP);
-
-	DRM_DEBUG_DRIVER("lanes=%d, pixel_clk=%d kHz, bytes_freq=%d kHz\n",
-			 dsi->lanes, mode->clock, phy->lane_byte_clk_kHz);
-}
-
-static void dsi_encoder_disable(struct drm_encoder *encoder)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	void __iomem *base = ctx->base;
-
-	if (!dsi->enable)
-		return;
-
-	writel(0, base + PWR_UP);
-	writel(0, base + LPCLK_CTRL);
-	writel(0, base + PHY_RSTZ);
-	clk_disable_unprepare(ctx->pclk);
-
-	dsi->enable = false;
-}
-
-static void dsi_encoder_enable(struct drm_encoder *encoder)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	int ret;
-
-	if (dsi->enable)
-		return;
-
-	ret = clk_prepare_enable(ctx->pclk);
-	if (ret) {
-		DRM_ERROR("fail to enable pclk: %d\n", ret);
-		return;
-	}
-
-	dsi_mipi_init(dsi);
-
-	dsi->enable = true;
-}
-
-static enum drm_mode_status dsi_encoder_phy_mode_valid(
-					struct drm_encoder *encoder,
-					const struct drm_display_mode *mode)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-	struct mipi_phy_params phy;
-	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
-	u32 req_kHz, act_kHz, lane_byte_clk_kHz;
-
-	/* Calculate the lane byte clk using the adjusted mode clk */
-	memset(&phy, 0, sizeof(phy));
-	req_kHz = mode->clock * bpp / dsi->lanes;
-	act_kHz = dsi_calc_phy_rate(req_kHz, &phy);
-	lane_byte_clk_kHz = act_kHz / 8;
-
-	DRM_DEBUG_DRIVER("Checking mode %ix%i-%i@%i clock: %i...",
-			mode->hdisplay, mode->vdisplay, bpp,
-			drm_mode_vrefresh(mode), mode->clock);
-
-	/*
-	 * Make sure the adjusted mode clock and the lane byte clk
-	 * have a common denominator base frequency
-	 */
-	if (mode->clock/dsi->lanes == lane_byte_clk_kHz/3) {
-		DRM_DEBUG_DRIVER("OK!\n");
-		return MODE_OK;
-	}
-
-	DRM_DEBUG_DRIVER("BAD!\n");
-	return MODE_BAD;
-}
-
-static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
-					const struct drm_display_mode *mode)
-
-{
-	const struct drm_crtc_helper_funcs *crtc_funcs = NULL;
-	struct drm_crtc *crtc = NULL;
-	struct drm_display_mode adj_mode;
-	enum drm_mode_status ret;
-
-	/*
-	 * The crtc might adjust the mode, so go through the
-	 * possible crtcs (technically just one) and call
-	 * mode_fixup to figure out the adjusted mode before we
-	 * validate it.
-	 */
-	drm_for_each_crtc(crtc, encoder->dev) {
-		/*
-		 * reset adj_mode to the mode value each time,
-		 * so we don't adjust the mode twice
-		 */
-		drm_mode_copy(&adj_mode, mode);
-
-		crtc_funcs = crtc->helper_private;
-		if (crtc_funcs && crtc_funcs->mode_fixup)
-			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
-				return MODE_BAD;
-
-		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
-		if (ret != MODE_OK)
-			return ret;
-	}
-	return MODE_OK;
-}
-
-static void dsi_encoder_mode_set(struct drm_encoder *encoder,
-				 struct drm_display_mode *mode,
-				 struct drm_display_mode *adj_mode)
-{
-	struct dw_dsi *dsi = encoder_to_dsi(encoder);
-
-	drm_mode_copy(&dsi->cur_mode, adj_mode);
-}
-
-static int dsi_encoder_atomic_check(struct drm_encoder *encoder,
-				    struct drm_crtc_state *crtc_state,
-				    struct drm_connector_state *conn_state)
-{
-	/* do nothing */
-	return 0;
-}
-
-static const struct drm_encoder_helper_funcs dw_encoder_helper_funcs = {
-	.atomic_check	= dsi_encoder_atomic_check,
-	.mode_valid	= dsi_encoder_mode_valid,
-	.mode_set	= dsi_encoder_mode_set,
-	.enable		= dsi_encoder_enable,
-	.disable	= dsi_encoder_disable
-};
-
-static const struct drm_encoder_funcs dw_encoder_funcs = {
-	.destroy = drm_encoder_cleanup,
-};
-
-static int dw_drm_encoder_init(struct device *dev,
-			       struct drm_device *drm_dev,
-			       struct drm_encoder *encoder)
-{
-	int ret;
-	u32 crtc_mask = drm_of_find_possible_crtcs(drm_dev, dev->of_node);
-
-	if (!crtc_mask) {
-		DRM_ERROR("failed to find crtc mask\n");
-		return -EINVAL;
-	}
-
-	encoder->possible_crtcs = crtc_mask;
-	ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
-			       DRM_MODE_ENCODER_DSI, NULL);
-	if (ret) {
-		DRM_ERROR("failed to init dsi encoder\n");
-		return ret;
-	}
-
-	drm_encoder_helper_add(encoder, &dw_encoder_helper_funcs);
-
-	return 0;
-}
-
-static int dsi_host_attach(struct mipi_dsi_host *host,
-			   struct mipi_dsi_device *mdsi)
-{
-	struct dw_dsi *dsi = host_to_dsi(host);
-
-	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
-		DRM_ERROR("dsi device params invalid\n");
-		return -EINVAL;
-	}
-
-	dsi->lanes = mdsi->lanes;
-	dsi->format = mdsi->format;
-	dsi->mode_flags = mdsi->mode_flags;
-
-	return 0;
-}
-
-static int dsi_host_detach(struct mipi_dsi_host *host,
-			   struct mipi_dsi_device *mdsi)
-{
-	/* do nothing */
-	return 0;
-}
-
-static const struct mipi_dsi_host_ops dsi_host_ops = {
-	.attach = dsi_host_attach,
-	.detach = dsi_host_detach,
-};
-
-static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
-{
-	struct mipi_dsi_host *host = &dsi->host;
-	int ret;
-
-	host->dev = dev;
-	host->ops = &dsi_host_ops;
-	ret = mipi_dsi_host_register(host);
-	if (ret) {
-		DRM_ERROR("failed to register dsi host\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
-{
-	struct drm_encoder *encoder = &dsi->encoder;
-	struct drm_bridge *bridge = dsi->bridge;
-	int ret;
-
-	/* associate the bridge to dsi encoder */
-	ret = drm_bridge_attach(encoder, bridge, NULL);
-	if (ret) {
-		DRM_ERROR("failed to attach external bridge\n");
-		return ret;
-	}
-
-	return 0;
-}
-
-static int dsi_bind(struct device *dev, struct device *master, void *data)
-{
-	struct dsi_data *ddata = dev_get_drvdata(dev);
-	struct dw_dsi *dsi = &ddata->dsi;
-	struct drm_device *drm_dev = data;
-	int ret;
-
-	ret = dw_drm_encoder_init(dev, drm_dev, &dsi->encoder);
-	if (ret)
-		return ret;
-
-	ret = dsi_host_init(dev, dsi);
-	if (ret)
-		return ret;
-
-	ret = dsi_bridge_init(drm_dev, dsi);
-	if (ret)
-		return ret;
-
-	return 0;
-}
-
-static void dsi_unbind(struct device *dev, struct device *master, void *data)
-{
-	/* do nothing */
-}
-
-static const struct component_ops dsi_ops = {
-	.bind	= dsi_bind,
-	.unbind	= dsi_unbind,
-};
-
-static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
-{
-	struct dsi_hw_ctx *ctx = dsi->ctx;
-	struct device_node *np = pdev->dev.of_node;
-	struct resource *res;
-	int ret;
-
-	/*
-	 * Get the endpoint node. In our case, dsi has one output port1
-	 * to which the external HDMI bridge is connected.
-	 */
-	ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &dsi->bridge);
-	if (ret)
-		return ret;
-
-	ctx->pclk = devm_clk_get(&pdev->dev, "pclk");
-	if (IS_ERR(ctx->pclk)) {
-		DRM_ERROR("failed to get pclk clock\n");
-		return PTR_ERR(ctx->pclk);
-	}
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	ctx->base = devm_ioremap_resource(&pdev->dev, res);
-	if (IS_ERR(ctx->base)) {
-		DRM_ERROR("failed to remap dsi io region\n");
-		return PTR_ERR(ctx->base);
-	}
-
-	return 0;
-}
-
-static int dsi_probe(struct platform_device *pdev)
-{
-	struct dsi_data *data;
-	struct dw_dsi *dsi;
-	struct dsi_hw_ctx *ctx;
-	int ret;
-
-	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
-	if (!data) {
-		DRM_ERROR("failed to allocate dsi data.\n");
-		return -ENOMEM;
-	}
-	dsi = &data->dsi;
-	ctx = &data->ctx;
-	dsi->ctx = ctx;
-
-	ret = dsi_parse_dt(pdev, dsi);
-	if (ret)
-		return ret;
-
-	platform_set_drvdata(pdev, data);
-
-	return component_add(&pdev->dev, &dsi_ops);
-}
-
-static int dsi_remove(struct platform_device *pdev)
-{
-	component_del(&pdev->dev, &dsi_ops);
-
-	return 0;
-}
-
-static const struct of_device_id dsi_of_match[] = {
-	{.compatible = "hisilicon,hi6220-dsi"},
-	{ }
-};
-MODULE_DEVICE_TABLE(of, dsi_of_match);
-
-static struct platform_driver dsi_driver = {
-	.probe = dsi_probe,
-	.remove = dsi_remove,
-	.driver = {
-		.name = "dw-dsi",
-		.of_match_table = dsi_of_match,
-	},
-};
-
-module_platform_driver(dsi_driver);
-
-MODULE_AUTHOR("Xinliang Liu <xinliang.liu@linaro.org>");
-MODULE_AUTHOR("Xinliang Liu <z.liuxinliang@hisilicon.com>");
-MODULE_AUTHOR("Xinwei Kong <kong.kongxinwei@hisilicon.com>");
-MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h b/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
index 19e81ff..6c31ee0 100644
--- a/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
+++ b/drivers/gpu/drm/hisilicon/kirin/dw_dsi_reg.h
@@ -8,7 +8,7 @@
 #define __DW_DSI_REG_H__
 
 #define MASK(x)				(BIT(x) - 1)
-
+#define DEFAULT_MAX_TX_ESC_CLK	(10 * 1000000UL)	//for hikey960
 /*
  * regs
  */
@@ -52,6 +52,50 @@
 #define VID_VACTIVE_LINES       0x60  /* Vertical resolution */
 #define VID_PKT_SIZE            0x3C  /* Video packet size */
 #define VID_MODE_CFG            0x38  /* Video mode configuration */
+/***************************for hikey960***********************************/
+#define GEN_HDR			0x6c
+#define GEN_HDATA(data)		(((data) & 0xffff) << 8)
+#define GEN_HDATA_MASK		(0xffff << 8)
+#define GEN_HTYPE(type)		(((type) & 0xff) << 0)
+#define GEN_HTYPE_MASK		0xff
+#define GEN_PLD_DATA		0x70
+#define CMD_PKT_STATUS		0x74
+#define GEN_CMD_EMPTY		BIT(0)
+#define GEN_CMD_FULL		BIT(1)
+#define GEN_PLD_W_EMPTY		BIT(2)
+#define GEN_PLD_W_FULL		BIT(3)
+#define GEN_PLD_R_EMPTY		BIT(4)
+#define GEN_PLD_R_FULL		BIT(5)
+#define GEN_RD_CMD_BUSY		BIT(6)
+#define CMD_MODE_CFG		0x68
+#define MAX_RD_PKT_SIZE_LP	BIT(24)
+#define DCS_LW_TX_LP		BIT(19)
+#define DCS_SR_0P_TX_LP		BIT(18)
+#define DCS_SW_1P_TX_LP		BIT(17)
+#define DCS_SW_0P_TX_LP		BIT(16)
+#define GEN_LW_TX_LP		BIT(14)
+#define GEN_SR_2P_TX_LP		BIT(13)
+#define GEN_SR_1P_TX_LP		BIT(12)
+#define GEN_SR_0P_TX_LP		BIT(11)
+#define GEN_SW_2P_TX_LP		BIT(10)
+#define GEN_SW_1P_TX_LP		BIT(9)
+#define GEN_SW_0P_TX_LP		BIT(8)
+#define EN_ACK_RQST		BIT(1)
+#define EN_TEAR_FX		BIT(0)
+#define CMD_PKT_STATUS_TIMEOUT_US	20000
+#define CMD_MODE_ALL_LP		(MAX_RD_PKT_SIZE_LP | \
+				 DCS_LW_TX_LP | \
+				 DCS_SR_0P_TX_LP | \
+				 DCS_SW_1P_TX_LP | \
+				 DCS_SW_0P_TX_LP | \
+				 GEN_LW_TX_LP | \
+				 GEN_SR_2P_TX_LP | \
+				 GEN_SR_1P_TX_LP | \
+				 GEN_SR_0P_TX_LP | \
+				 GEN_SW_2P_TX_LP | \
+				 GEN_SW_1P_TX_LP | \
+				 GEN_SW_0P_TX_LP)
+/***************************for hikey960***********************************/
 #define PHY_TMR_CFG             0x9C  /* Data lanes timing configuration */
 #define BTA_TO_CNT              0x8C  /* Response timeout definition */
 #define PHY_TMR_LPCLK_CFG       0x98  /* clock lane timing configuration */
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
new file mode 100644
index 0000000..100f502
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin/dw_drm_dsi.c
@@ -0,0 +1,656 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	Xinliang Liu <z.liuxinliang@hisilicon.com>
+ *	Xinliang Liu <xinliang.liu@linaro.org>
+ *	Xinwei Kong <kong.kongxinwei@hisilicon.com>
+ *	Da Lv <lvda3@hisilicon.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_device.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_of.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+
+#include "../kirin_drm_dsi.h"
+#include "../dw_dsi_reg.h"
+
+#define MAX_TX_ESC_CLK		10
+
+static u32 dsi_calc_phy_rate(u32 req_kHz, struct mipi_phy_params *phy)
+{
+	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
+	u32 tmp_kHz = req_kHz;
+	u32 i = 0;
+	u32 q_pll = 1;
+	u32 m_pll = 0;
+	u32 n_pll = 0;
+	u32 r_pll = 1;
+	u32 m_n = 0;
+	u32 m_n_int = 0;
+	u32 f_kHz = 0;
+	u64 temp;
+
+	/*
+	 * Find a rate >= req_kHz.
+	 */
+	do {
+		f_kHz = tmp_kHz;
+
+		for (i = 0; i < ARRAY_SIZE(dphy_range_info); i++)
+			if (f_kHz >= dphy_range_info[i].min_range_kHz &&
+			    f_kHz <= dphy_range_info[i].max_range_kHz)
+				break;
+
+		if (i == ARRAY_SIZE(dphy_range_info)) {
+			DRM_ERROR("%dkHz out of range\n", f_kHz);
+			return 0;
+		}
+
+		phy->pll_vco_750M = dphy_range_info[i].pll_vco_750M;
+		phy->hstx_ckg_sel = dphy_range_info[i].hstx_ckg_sel;
+
+		if (phy->hstx_ckg_sel <= 7 &&
+		    phy->hstx_ckg_sel >= 4)
+			q_pll = 0x10 >> (7 - phy->hstx_ckg_sel);
+
+		temp = f_kHz * (u64)q_pll * (u64)ref_clk_ps;
+		m_n_int = temp / (u64)1000000000;
+		m_n = (temp % (u64)1000000000) / (u64)100000000;
+
+		if (m_n_int % 2 == 0) {
+			if (m_n * 6 >= 50) {
+				n_pll = 2;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 30) {
+				n_pll = 3;
+				m_pll = m_n_int * n_pll + 2;
+			} else {
+				n_pll = 1;
+				m_pll = m_n_int * n_pll;
+			}
+		} else {
+			if (m_n * 6 >= 50) {
+				n_pll = 1;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 30) {
+				n_pll = 1;
+				m_pll = (m_n_int + 1) * n_pll;
+			} else if (m_n * 6 >= 10) {
+				n_pll = 3;
+				m_pll = m_n_int * n_pll + 1;
+			} else {
+				n_pll = 2;
+				m_pll = m_n_int * n_pll;
+			}
+		}
+
+		if (n_pll == 1) {
+			phy->pll_fbd_p = 0;
+			phy->pll_pre_div1p = 1;
+		} else {
+			phy->pll_fbd_p = n_pll;
+			phy->pll_pre_div1p = 0;
+		}
+
+		if (phy->pll_fbd_2p <= 7 && phy->pll_fbd_2p >= 4)
+			r_pll = 0x10 >> (7 - phy->pll_fbd_2p);
+
+		if (m_pll == 2) {
+			phy->pll_pre_p = 0;
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 1;
+		} else if (m_pll >= 2 * 2 * r_pll && m_pll <= 2 * 4 * r_pll) {
+			phy->pll_pre_p = m_pll / (2 * r_pll);
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 1;
+			phy->pll_fbd_div5f = 0;
+		} else if (m_pll >= 2 * 5 * r_pll && m_pll <= 2 * 150 * r_pll) {
+			if (((m_pll / (2 * r_pll)) % 2) == 0) {
+				phy->pll_pre_p =
+					(m_pll / (2 * r_pll)) / 2 - 1;
+				phy->pll_fbd_s =
+					(m_pll / (2 * r_pll)) % 2 + 2;
+			} else {
+				phy->pll_pre_p =
+					(m_pll / (2 * r_pll)) / 2;
+				phy->pll_fbd_s =
+					(m_pll / (2 * r_pll)) % 2;
+			}
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 0;
+		} else {
+			phy->pll_pre_p = 0;
+			phy->pll_fbd_s = 0;
+			phy->pll_fbd_div1f = 0;
+			phy->pll_fbd_div5f = 1;
+		}
+
+		f_kHz = (u64)1000000000 * (u64)m_pll /
+			((u64)ref_clk_ps * (u64)n_pll * (u64)q_pll);
+
+		if (f_kHz >= req_kHz)
+			break;
+
+		tmp_kHz += 10;
+
+	} while (true);
+
+	return f_kHz;
+}
+
+static void dsi_get_phy_params(u32 phy_req_kHz,
+			       struct mipi_phy_params *phy)
+{
+	u32 ref_clk_ps = PHY_REF_CLK_PERIOD_PS;
+	u32 phy_rate_kHz;
+	u32 ui;
+
+	memset(phy, 0, sizeof(*phy));
+
+	phy_rate_kHz = dsi_calc_phy_rate(phy_req_kHz, phy);
+	if (!phy_rate_kHz)
+		return;
+
+	ui = 1000000 / phy_rate_kHz;
+
+	phy->clk_t_lpx = ROUND(50, 8 * ui);
+	phy->clk_t_hs_prepare = ROUND(133, 16 * ui) - 1;
+
+	phy->clk_t_hs_zero = ROUND(262, 8 * ui);
+	phy->clk_t_hs_trial = 2 * (ROUND(60, 8 * ui) - 1);
+	phy->clk_t_wakeup = ROUND(1000000, (ref_clk_ps / 1000) - 1);
+	if (phy->clk_t_wakeup > 0xff)
+		phy->clk_t_wakeup = 0xff;
+	phy->data_t_wakeup = phy->clk_t_wakeup;
+	phy->data_t_lpx = phy->clk_t_lpx;
+	phy->data_t_hs_prepare = ROUND(125 + 10 * ui, 16 * ui) - 1;
+	phy->data_t_hs_zero = ROUND(105 + 6 * ui, 8 * ui);
+	phy->data_t_hs_trial = 2 * (ROUND(60 + 4 * ui, 8 * ui) - 1);
+	phy->data_t_ta_go = 3;
+	phy->data_t_ta_get = 4;
+
+	phy->pll_enbwt = 1;
+	phy->clklp2hs_time = ROUND(407, 8 * ui) + 12;
+	phy->clkhs2lp_time = ROUND(105 + 12 * ui, 8 * ui);
+	phy->lp2hs_time = ROUND(240 + 12 * ui, 8 * ui) + 1;
+	phy->hs2lp_time = phy->clkhs2lp_time;
+	phy->clk_to_data_delay = 1 + phy->clklp2hs_time;
+	phy->data_to_clk_delay = ROUND(60 + 52 * ui, 8 * ui) +
+				phy->clkhs2lp_time;
+
+	phy->lane_byte_clk_kHz = phy_rate_kHz / 8;
+	phy->clk_division =
+		DIV_ROUND_UP(phy->lane_byte_clk_kHz, MAX_TX_ESC_CLK);
+}
+
+static u32 dsi_get_dpi_color_coding(enum mipi_dsi_pixel_format format)
+{
+	u32 val;
+
+	/*
+	 * TODO: only support RGB888 now, to support more
+	 */
+	switch (format) {
+	case MIPI_DSI_FMT_RGB888:
+		val = DSI_24BITS_1;
+		break;
+	default:
+		val = DSI_24BITS_1;
+		break;
+	}
+
+	return val;
+}
+
+/*
+ * dsi phy reg write function
+ */
+static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
+{
+	u32 reg_write = 0x10000 + reg;
+
+	/*
+	 * latch reg first
+	 */
+	writel(reg_write, base + PHY_TST_CTRL1);
+	writel(0x02, base + PHY_TST_CTRL0);
+	writel(0x00, base + PHY_TST_CTRL0);
+
+	/*
+	 * then latch value
+	 */
+	writel(val, base + PHY_TST_CTRL1);
+	writel(0x02, base + PHY_TST_CTRL0);
+	writel(0x00, base + PHY_TST_CTRL0);
+}
+
+static void dsi_set_phy_timer(void __iomem *base,
+			      struct mipi_phy_params *phy,
+			      u32 lanes)
+{
+	u32 val;
+
+	/*
+	 * Set lane value and phy stop wait time.
+	 */
+	val = (lanes - 1) | (PHY_STOP_WAIT_TIME << 8);
+	writel(val, base + PHY_IF_CFG);
+
+	/*
+	 * Set phy clk division.
+	 */
+	val = readl(base + CLKMGR_CFG) | phy->clk_division;
+	writel(val, base + CLKMGR_CFG);
+
+	/*
+	 * Set lp and hs switching params.
+	 */
+	dw_update_bits(base + PHY_TMR_CFG, 24, MASK(8), phy->hs2lp_time);
+	dw_update_bits(base + PHY_TMR_CFG, 16, MASK(8), phy->lp2hs_time);
+	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 16, MASK(10),
+		       phy->clkhs2lp_time);
+	dw_update_bits(base + PHY_TMR_LPCLK_CFG, 0, MASK(10),
+		       phy->clklp2hs_time);
+	dw_update_bits(base + CLK_DATA_TMR_CFG, 8, MASK(8),
+		       phy->data_to_clk_delay);
+	dw_update_bits(base + CLK_DATA_TMR_CFG, 0, MASK(8),
+		       phy->clk_to_data_delay);
+}
+
+static void dsi_set_mipi_phy(void __iomem *base,
+			     struct mipi_phy_params *phy,
+			     u32 lanes)
+{
+	u32 delay_count;
+	u32 val;
+	u32 i;
+
+	/* phy timer setting */
+	dsi_set_phy_timer(base, phy, lanes);
+
+	/*
+	 * Reset to clean up phy tst params.
+	 */
+	writel(0, base + PHY_RSTZ);
+	writel(0, base + PHY_TST_CTRL0);
+	writel(1, base + PHY_TST_CTRL0);
+	writel(0, base + PHY_TST_CTRL0);
+
+	/*
+	 * Clock lane timing control setting: TLPX, THS-PREPARE,
+	 * THS-ZERO, THS-TRAIL, TWAKEUP.
+	 */
+	dsi_phy_tst_set(base, CLK_TLPX, phy->clk_t_lpx);
+	dsi_phy_tst_set(base, CLK_THS_PREPARE, phy->clk_t_hs_prepare);
+	dsi_phy_tst_set(base, CLK_THS_ZERO, phy->clk_t_hs_zero);
+	dsi_phy_tst_set(base, CLK_THS_TRAIL, phy->clk_t_hs_trial);
+	dsi_phy_tst_set(base, CLK_TWAKEUP, phy->clk_t_wakeup);
+
+	/*
+	 * Data lane timing control setting: TLPX, THS-PREPARE,
+	 * THS-ZERO, THS-TRAIL, TTA-GO, TTA-GET, TWAKEUP.
+	 */
+	for (i = 0; i < lanes; i++) {
+		dsi_phy_tst_set(base, DATA_TLPX(i), phy->data_t_lpx);
+		dsi_phy_tst_set(base, DATA_THS_PREPARE(i),
+				phy->data_t_hs_prepare);
+		dsi_phy_tst_set(base, DATA_THS_ZERO(i), phy->data_t_hs_zero);
+		dsi_phy_tst_set(base, DATA_THS_TRAIL(i), phy->data_t_hs_trial);
+		dsi_phy_tst_set(base, DATA_TTA_GO(i), phy->data_t_ta_go);
+		dsi_phy_tst_set(base, DATA_TTA_GET(i), phy->data_t_ta_get);
+		dsi_phy_tst_set(base, DATA_TWAKEUP(i), phy->data_t_wakeup);
+	}
+
+	/*
+	 * physical configuration: I, pll I, pll II, pll III,
+	 * pll IV, pll V.
+	 */
+	dsi_phy_tst_set(base, PHY_CFG_I, phy->hstx_ckg_sel);
+	val = (phy->pll_fbd_div5f << 5) + (phy->pll_fbd_div1f << 4) +
+				(phy->pll_fbd_2p << 1) + phy->pll_enbwt;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_I, val);
+	dsi_phy_tst_set(base, PHY_CFG_PLL_II, phy->pll_fbd_p);
+	dsi_phy_tst_set(base, PHY_CFG_PLL_III, phy->pll_fbd_s);
+	val = (phy->pll_pre_div1p << 7) + phy->pll_pre_p;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_IV, val);
+	val = (5 << 5) + (phy->pll_vco_750M << 4) + (phy->pll_lpf_rs << 2) +
+		phy->pll_lpf_cs;
+	dsi_phy_tst_set(base, PHY_CFG_PLL_V, val);
+
+	writel(PHY_ENABLECLK, base + PHY_RSTZ);
+	udelay(1);
+	writel(PHY_ENABLECLK | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
+	udelay(1);
+	writel(PHY_ENABLECLK | PHY_UNRSTZ | PHY_UNSHUTDOWNZ, base + PHY_RSTZ);
+	usleep_range(1000, 1500);
+
+	/*
+	 * wait for phy's clock ready
+	 */
+	delay_count = 100;
+	while (delay_count) {
+		val = readl(base +  PHY_STATUS);
+		if ((BIT(0) | BIT(2)) & val)
+			break;
+
+		udelay(1);
+		delay_count--;
+	}
+
+	if (!delay_count)
+		DRM_INFO("phylock and phystopstateclklane is not ready.\n");
+}
+
+static void dsi_set_mode_timing(void __iomem *base,
+				u32 lane_byte_clk_kHz,
+				struct drm_display_mode *mode,
+				enum mipi_dsi_pixel_format format)
+{
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+	u32 hline_time;
+	u32 hsa_time;
+	u32 hbp_time;
+	u32 pixel_clk_kHz;
+	int htot, vtot;
+	u32 val;
+	u64 tmp;
+
+	val = dsi_get_dpi_color_coding(format);
+	writel(val, base + DPI_COLOR_CODING);
+
+	val = (mode->flags & DRM_MODE_FLAG_NHSYNC ? 1 : 0) << 2;
+	val |= (mode->flags & DRM_MODE_FLAG_NVSYNC ? 1 : 0) << 1;
+	writel(val, base +  DPI_CFG_POL);
+
+	/*
+	 * The DSI IP accepts vertical timing using lines as normal,
+	 * but horizontal timing is a mixture of pixel-clocks for the
+	 * active region and byte-lane clocks for the blanking-related
+	 * timings.  hfp is specified as the total hline_time in byte-
+	 * lane clocks minus hsa, hbp and active.
+	 */
+	pixel_clk_kHz = mode->clock;
+	htot = mode->htotal;
+	vtot = mode->vtotal;
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+	if (vsw > 15) {
+		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
+		vsw = 15;
+	}
+
+	hsa_time = (hsw * lane_byte_clk_kHz) / pixel_clk_kHz;
+	hbp_time = (hbp * lane_byte_clk_kHz) / pixel_clk_kHz;
+	tmp = (u64)htot * (u64)lane_byte_clk_kHz;
+	hline_time = DIV_ROUND_UP(tmp, pixel_clk_kHz);
+
+	/* all specified in byte-lane clocks */
+	writel(hsa_time, base + VID_HSA_TIME);
+	writel(hbp_time, base + VID_HBP_TIME);
+	writel(hline_time, base + VID_HLINE_TIME);
+
+	writel(vsw, base + VID_VSA_LINES);
+	writel(vbp, base + VID_VBP_LINES);
+	writel(vfp, base + VID_VFP_LINES);
+	writel(mode->vdisplay, base + VID_VACTIVE_LINES);
+	writel(mode->hdisplay, base + VID_PKT_SIZE);
+
+	DRM_DEBUG_DRIVER("htot=%d, hfp=%d, hbp=%d, hsw=%d\n",
+			 htot, hfp, hbp, hsw);
+	DRM_DEBUG_DRIVER("vtol=%d, vfp=%d, vbp=%d, vsw=%d\n",
+			 vtot, vfp, vbp, vsw);
+	DRM_DEBUG_DRIVER("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
+			 hsa_time, hbp_time, hline_time);
+}
+
+static void dsi_set_video_mode(void __iomem *base, unsigned long flags)
+{
+	u32 val;
+	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
+
+	/*
+	 * choose video mode type
+	 */
+	if ((flags & mode_mask) == non_burst_sync_pulse)
+		val = DSI_NON_BURST_SYNC_PULSES;
+	else if ((flags & mode_mask) == non_burst_sync_event)
+		val = DSI_NON_BURST_SYNC_EVENTS;
+	else
+		val = DSI_BURST_SYNC_PULSES_1;
+	writel(val, base + VID_MODE_CFG);
+
+	writel(PHY_TXREQUESTCLKHS, base + LPCLK_CTRL);
+	writel(DSI_VIDEO_MODE, base + MODE_CFG);
+}
+
+static void dsi_mipi_init(struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	struct mipi_phy_params *phy = &dsi->phy;
+	struct drm_display_mode *mode = &dsi->cur_mode;
+	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
+	void __iomem *base = ctx->base;
+	u32 dphy_req_kHz;
+
+	/*
+	 * count phy params
+	 */
+	dphy_req_kHz = mode->clock * bpp / dsi->lanes;
+	dsi_get_phy_params(dphy_req_kHz, phy);
+
+	/* reset Core */
+	writel(RESET, base + PWR_UP);
+
+	/* set dsi phy params */
+	dsi_set_mipi_phy(base, phy, dsi->lanes);
+
+	/* set dsi mode timing */
+	dsi_set_mode_timing(base, phy->lane_byte_clk_kHz, mode, dsi->format);
+
+	/* set dsi video mode */
+	dsi_set_video_mode(base, dsi->mode_flags);
+
+	/* dsi wake up */
+	writel(POWERUP, base + PWR_UP);
+
+	DRM_DEBUG_DRIVER("lanes=%d, pixel_clk=%d kHz, bytes_freq=%d kHz\n",
+			 dsi->lanes, mode->clock, phy->lane_byte_clk_kHz);
+}
+
+static void dsi_encoder_enable_sub(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret;
+
+	if (dsi->enable)
+		return;
+
+	ret = clk_prepare_enable(ctx->pclk);
+	if (ret) {
+		DRM_ERROR("fail to enable pclk: %d\n", ret);
+		return;
+	}
+
+	dsi_mipi_init(dsi);
+}
+
+static enum drm_mode_status dsi_encoder_phy_mode_valid(
+					struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct mipi_phy_params phy;
+	u32 bpp = mipi_dsi_pixel_format_to_bpp(dsi->format);
+	u32 req_kHz, act_kHz, lane_byte_clk_kHz;
+
+	/* Calculate the lane byte clk using the adjusted mode clk */
+	memset(&phy, 0, sizeof(phy));
+	req_kHz = mode->clock * bpp / dsi->lanes;
+	act_kHz = dsi_calc_phy_rate(req_kHz, &phy);
+	lane_byte_clk_kHz = act_kHz / 8;
+
+	DRM_DEBUG_DRIVER("Checking mode %ix%i-%i@%i clock: %i...",
+			mode->hdisplay, mode->vdisplay, bpp,
+			drm_mode_vrefresh(mode), mode->clock);
+
+	/*
+	 * Make sure the adjusted mode clock and the lane byte clk
+	 * have a common denominator base frequency
+	 */
+	if (mode->clock/dsi->lanes == lane_byte_clk_kHz/3) {
+		DRM_DEBUG_DRIVER("OK!\n");
+		return MODE_OK;
+	}
+
+	DRM_DEBUG_DRIVER("BAD!\n");
+	return MODE_BAD;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	const struct drm_crtc_helper_funcs *crtc_funcs = NULL;
+	struct drm_crtc *crtc = NULL;
+	struct drm_display_mode adj_mode;
+	enum drm_mode_status ret;
+
+	/*
+	 * The crtc might adjust the mode, so go through the
+	 * possible crtcs (technically just one) and call
+	 * mode_fixup to figure out the adjusted mode before we
+	 * validate it.
+	 */
+	drm_for_each_crtc(crtc, encoder->dev) {
+		/*
+		 * reset adj_mode to the mode value each time,
+		 * so we don't adjust the mode twice
+		 */
+		drm_mode_copy(&adj_mode, mode);
+
+		crtc_funcs = crtc->helper_private;
+		if (crtc_funcs && crtc_funcs->mode_fixup)
+			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
+				return MODE_BAD;
+
+		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
+		if (ret != MODE_OK)
+			return ret;
+	}
+	return MODE_OK;
+}
+
+static int dsi_host_attach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+
+	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
+		DRM_ERROR("dsi device params invalid\n");
+		return -EINVAL;
+	}
+
+	dsi->lanes = mdsi->lanes;
+	dsi->format = mdsi->format;
+	dsi->mode_flags = mdsi->mode_flags;
+
+	return 0;
+}
+
+static int dsi_host_detach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	/* do nothing */
+	return 0;
+}
+
+static const struct mipi_dsi_host_ops dsi_host_ops = {
+	.attach = dsi_host_attach,
+	.detach = dsi_host_detach,
+};
+
+static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
+{
+	struct mipi_dsi_host *host = &dsi->host;
+	int ret;
+
+	host->dev = dev;
+	host->ops = &dsi_host_ops;
+	ret = mipi_dsi_host_register(host);
+	if (ret) {
+		DRM_ERROR("failed to register dsi host\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	struct device_node *np = pdev->dev.of_node;
+	struct resource *res;
+	int ret;
+
+	/*
+	 * Get the endpoint node. In our case, dsi has one output port1
+	 * to which the external HDMI bridge is connected.
+	 */
+	ret = drm_of_find_panel_or_bridge(np, 1, 0, NULL, &dsi->bridge);
+	if (ret)
+		return ret;
+
+	ctx->pclk = devm_clk_get(&pdev->dev, "pclk");
+	if (IS_ERR(ctx->pclk)) {
+		DRM_ERROR("failed to get pclk clock\n");
+		return PTR_ERR(ctx->pclk);
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	ctx->base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(ctx->base)) {
+		DRM_ERROR("failed to remap dsi io region\n");
+		return PTR_ERR(ctx->base);
+	}
+
+	return 0;
+}
+
+const struct kirin_dsi_ops kirin_dsi_620 = {
+	.version = KIRIN620_DSI,
+	.parse_dt = dsi_parse_dt,
+	.host_init = dsi_host_init,
+	.encoder_enable = dsi_encoder_enable_sub,
+	.encoder_valid = dsi_encoder_mode_valid
+};
+
+MODULE_AUTHOR("Xinliang Liu <xinliang.liu@linaro.org>");
+MODULE_AUTHOR("Xinliang Liu <z.liuxinliang@hisilicon.com>");
+MODULE_AUTHOR("Xinwei Kong <kong.kongxinwei@hisilicon.com>");
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c
new file mode 100644
index 0000000..84f0b76
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin960/dw_drm_dsi.c
@@ -0,0 +1,1220 @@
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	<shizongxuan@huawei.com>
+ *	<zhangxiubin@huawei.com>
+ *  <lvda3@hisilicon.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/clk.h>
+#include <linux/module.h>
+#include <linux/component.h>
+#include <linux/of_graph.h>
+#include <linux/iopoll.h>
+#include <video/mipi_display.h>
+#include <linux/gpio/consumer.h>
+#include <linux/of_address.h>
+
+#include <drm/drm_of.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_panel.h>
+#include <drm/drm_device.h>
+#include <drm/drm_sysfs.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+
+#include "../kirin_drm_dsi.h"
+#include "../dw_dsi_reg.h"
+#include "../kirin_dpe_reg.h"
+
+#define DTS_COMP_DSI_NAME "hisilicon,hi3660-dsi"
+#define ROUND1(x, y)	((x) / (y) + ((x) % (y)  ? 1 : 0))
+#define DSS_REDUCE(x)	((x) > 0 ? ((x) - 1) : (x))
+
+#define DEFAULT_MIPI_CLK_RATE	(192 * 100000L)
+#define DEFAULT_PCLK_DSI_RATE	(120 * 1000000L)
+
+#define outp32(addr, val) writel(val, addr)
+#define inp32(addr)       readl(addr)
+
+struct dss_rect {
+	s32 x;
+	s32 y;
+	s32 w;
+	s32 h;
+};
+
+enum {
+	DSI_1_LANES = 0,
+	DSI_2_LANES,
+	DSI_3_LANES,
+	DSI_4_LANES,
+};
+
+static void set_reg(char __iomem *addr, uint32_t val, uint8_t bw, uint8_t bs)
+{
+	u32 mask = (1UL << bw) - 1UL;
+	u32 tmp = 0;
+
+	tmp = inp32(addr);
+	tmp &= ~(mask << bs);
+
+	outp32(addr, tmp | ((val & mask) << bs));
+}
+
+static enum drm_mode_status dsi_encoder_phy_mode_valid(
+					struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+{
+	/* XXX HACK whitelist for now, to move it out of
+	 * common adv7511 code.  This should be replaced by
+	 * something closer to dsi_encoder_phy_mode_valid()
+	 * found in in:
+	 *   drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c
+	 */
+	DRM_DEBUG_DRIVER("Checking mode %ix%i@%i clock: %i...",
+			mode->hdisplay, mode->vdisplay,
+			drm_mode_vrefresh(mode), mode->clock);
+	if ((mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 148500) ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 80192)  ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 74250)  ||
+	    (mode->hdisplay == 1920 && mode->vdisplay == 1080 && mode->clock == 61855)  ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 147116) ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 146250) ||
+	    (mode->hdisplay == 1680 && mode->vdisplay == 1050 && mode->clock == 144589) ||
+	    (mode->hdisplay == 1600 && mode->vdisplay == 1200 && mode->clock == 160961) ||
+	    (mode->hdisplay == 1600 && mode->vdisplay == 900  && mode->clock == 118963) ||
+	    (mode->hdisplay == 1440 && mode->vdisplay == 900  && mode->clock == 126991) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 1024 && mode->clock == 128946) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 1024 && mode->clock == 98619)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 960  && mode->clock == 102081) ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 800  && mode->clock == 83496)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 720  && mode->clock == 74440)  ||
+	    (mode->hdisplay == 1280 && mode->vdisplay == 720  && mode->clock == 74250)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 78800)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 75000)  ||
+	    (mode->hdisplay == 1024 && mode->vdisplay == 768  && mode->clock == 81833)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 600  && mode->clock == 48907)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 600  && mode->clock == 40000)  ||
+	    (mode->hdisplay == 800  && mode->vdisplay == 480  && mode->clock == 32000)) {
+		DRM_DEBUG("OK\n");
+		return MODE_OK;
+	}
+	DRM_DEBUG("BAD\n");
+	return MODE_BAD;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	struct drm_crtc *crtc = NULL;
+	struct drm_display_mode adj_mode;
+	enum drm_mode_status ret;
+
+	/*
+	 * The crtc might adjust the mode, so go through the
+	 * possible crtcs (technically just one) and call
+	 * mode_fixup to figure out the adjusted mode before we
+	 * validate it.
+	 */
+	drm_for_each_crtc(crtc, encoder->dev) {
+		/*
+		 * reset adj_mode to the mode value each time,
+		 * so we don't adjust the mode twice
+		 */
+		drm_mode_copy(&adj_mode, mode);
+
+		/* XXX - skip this as we're just using a whitelist
+		crtc_funcs = crtc->helper_private;
+		if (crtc_funcs && crtc_funcs->mode_fixup)
+			if (!crtc_funcs->mode_fixup(crtc, mode, &adj_mode))
+				return MODE_BAD;
+		*/
+		ret = dsi_encoder_phy_mode_valid(encoder, &adj_mode);
+		if (ret != MODE_OK)
+			return ret;
+	}
+	return MODE_OK;
+}
+
+static void get_dsi_phy_ctrl(struct dw_dsi *dsi,
+							struct mipi_phy_params *phy_ctrl)
+{
+	struct mipi_panel_info *mipi = NULL;
+	struct drm_display_mode *mode = NULL;
+	u32 dphy_req_kHz;
+	int bpp;
+	u32 id = 0;
+	u32 ui = 0;
+	u32 m_pll = 0;
+	u32 n_pll = 0;
+	u32 m_n_fract = 0;
+	u32 m_n_int = 0;
+	u64 lane_clock = 0;
+	u64 vco_div = 1;
+
+	u32 accuracy = 0;
+	u32 unit_tx_byte_clk_hs = 0;
+	u32 clk_post = 0;
+	u32 clk_pre = 0;
+	u32 clk_t_hs_exit = 0;
+	u32 clk_pre_delay = 0;
+	u32 clk_t_hs_prepare = 0;
+	u32 clk_t_lpx = 0;
+	u32 clk_t_hs_zero = 0;
+	u32 clk_t_hs_trial = 0;
+	u32 data_post_delay = 0;
+	u32 data_t_hs_prepare = 0;
+	u32 data_t_hs_zero = 0;
+	u32 data_t_hs_trial = 0;
+	u32 data_t_lpx = 0;
+	u32 clk_pre_delay_reality = 0;
+	u32 clk_t_hs_zero_reality = 0;
+	u32 clk_post_delay_reality = 0;
+	u32 data_t_hs_zero_reality = 0;
+	u32 data_post_delay_reality = 0;
+	u32 data_pre_delay_reality = 0;
+
+	WARN_ON(!phy_ctrl);
+	WARN_ON(!dsi);
+
+	id = dsi->cur_client;
+	mode = &dsi->cur_mode;
+	mipi = &dsi->mipi;
+
+	/*
+	 * count phy params
+	 */
+	bpp = mipi_dsi_pixel_format_to_bpp(dsi->client[id].format);
+	if (bpp < 0)
+		return;
+	if (mode->clock > 80000)
+	    dsi->client[id].lanes = 4;
+	else
+	    dsi->client[id].lanes = 3;
+	if (dsi->client[id].phy_clock)
+		dphy_req_kHz = dsi->client[id].phy_clock;
+	else
+		dphy_req_kHz = mode->clock * bpp / dsi->client[id].lanes;
+
+	lane_clock = dphy_req_kHz / 1000;
+	DRM_INFO("Expected : lane_clock = %llu M\n", lane_clock);
+
+	/************************  PLL parameters config  *********************/
+	/*chip spec :
+		If the output data rate is below 320 Mbps,
+		RG_BNAD_SEL should be set to 1.
+		At this mode a post divider of 1/4 will be applied to VCO.
+	*/
+	if ((320 <= lane_clock) && (lane_clock <= 2500)) {
+		phy_ctrl->rg_band_sel = 0;	/*0x1E[2]*/
+		vco_div = 1;
+	} else if ((80 <= lane_clock) && (lane_clock < 320)) {
+		phy_ctrl->rg_band_sel = 1;
+		vco_div = 4;
+	} else {
+		DRM_ERROR("80M <= lane_clock< = 2500M, not support lane_clock = %llu M\n",
+			lane_clock);
+	}
+
+	m_n_int = lane_clock * vco_div * 1000000UL / DEFAULT_MIPI_CLK_RATE;
+	m_n_fract = ((lane_clock * vco_div * 1000000UL * 1000UL / DEFAULT_MIPI_CLK_RATE) % 1000) * 10 / 1000;
+
+	if (m_n_int % 2 == 0) {
+		if (m_n_fract * 6 >= 50) {
+			n_pll = 2;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 30) {
+			n_pll = 3;
+			m_pll = m_n_int * n_pll + 2;
+		} else {
+			n_pll = 1;
+			m_pll = m_n_int * n_pll;
+		}
+	} else {
+		if (m_n_fract * 6 >= 50) {
+			n_pll = 1;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 30) {
+			n_pll = 1;
+			m_pll = (m_n_int + 1) * n_pll;
+		} else if (m_n_fract * 6 >= 10) {
+			n_pll = 3;
+			m_pll = m_n_int * n_pll + 1;
+		} else {
+			n_pll = 2;
+			m_pll = m_n_int * n_pll;
+		}
+	}
+
+	/*if set rg_pll_enswc=1, pll_fbd_s can't be 0*/
+	if (m_pll <= 8) {
+		phy_ctrl->pll_fbd_s = 1;
+		phy_ctrl->rg_pll_enswc = 0;
+
+		if (m_pll % 2 == 0) {
+			phy_ctrl->pll_fbd_p = m_pll / 2;
+		} else {
+			if (n_pll == 1) {
+				n_pll *= 2;
+				phy_ctrl->pll_fbd_p = (m_pll  * 2) / 2;
+			} else {
+				DRM_ERROR("phy m_pll not support!m_pll = %d\n", m_pll);
+				return;
+			}
+		}
+	} else if (m_pll <= 300) {
+		if (m_pll % 2 == 0)
+			phy_ctrl->rg_pll_enswc = 0;
+		else
+			phy_ctrl->rg_pll_enswc = 1;
+
+		phy_ctrl->pll_fbd_s = 1;
+		phy_ctrl->pll_fbd_p = m_pll / 2;
+	} else if (m_pll <= 315) {
+		phy_ctrl->pll_fbd_p = 150;
+		phy_ctrl->pll_fbd_s = m_pll - 2 * phy_ctrl->pll_fbd_p;
+		phy_ctrl->rg_pll_enswc = 1;
+	} else {
+		DRM_ERROR("phy m_pll not support!m_pll = %d\n", m_pll);
+		return;
+	}
+
+	phy_ctrl->pll_pre_p = n_pll;
+
+	lane_clock = m_pll * (DEFAULT_MIPI_CLK_RATE / n_pll) / vco_div;
+	DRM_INFO("Config : lane_clock = %llu\n", lane_clock);
+
+	/*FIXME :*/
+	phy_ctrl->rg_pll_cp = 1;		/*0x16[7:5]*/
+	phy_ctrl->rg_pll_cp_p = 3;		/*0x1E[7:5]*/
+
+	/*test_code_0x14 other parameters config*/
+	phy_ctrl->pll_enbwt = 0;	/*0x14[2]*/
+	phy_ctrl->rg_pll_chp = 0;		/*0x14[1:0]*/
+
+	/*test_code_0x16 other parameters config,  0x16[3:2] reserved*/
+	phy_ctrl->pll_lpf_cs = 0;	/*0x16[4]*/
+	phy_ctrl->rg_pll_refsel = 1;		/*0x16[1:0]*/
+
+	/*test_code_0x1E other parameters config*/
+	phy_ctrl->reload_sel = 1;			/*0x1E[4]*/
+	phy_ctrl->rg_phase_gen_en = 1;	/*0x1E[3]*/
+	phy_ctrl->pll_power_down = 0;		/*0x1E[1]*/
+	phy_ctrl->pll_register_override = 1;	/*0x1E[0]*/
+
+	/*HSTX select VCM VREF*/
+	phy_ctrl->rg_vrefsel_vcm = 0x55;
+	if (mipi->rg_vrefsel_vcm_clk_adjust != 0)
+		phy_ctrl->rg_vrefsel_vcm = (phy_ctrl->rg_vrefsel_vcm & 0x0F) |
+			((mipi->rg_vrefsel_vcm_clk_adjust & 0x0F) << 4);
+
+	if (mipi->rg_vrefsel_vcm_data_adjust != 0)
+		phy_ctrl->rg_vrefsel_vcm = (phy_ctrl->rg_vrefsel_vcm & 0xF0) |
+			(mipi->rg_vrefsel_vcm_data_adjust & 0x0F);
+
+	/*if reload_sel = 1, need to set load_command*/
+	phy_ctrl->load_command = 0x5A;
+
+	/********************  clock/data lane parameters config  ******************/
+	accuracy = 10;
+	ui =  10 * 1000000000UL * accuracy / lane_clock;
+	/*unit of measurement*/
+	unit_tx_byte_clk_hs = 8 * ui;
+
+	/* D-PHY Specification : 60ns + 52*UI <= clk_post*/
+	clk_post = 600 * accuracy + 52 * ui + mipi->clk_post_adjust * ui;
+
+	/* D-PHY Specification : clk_pre >= 8*UI*/
+	clk_pre = 8 * ui + mipi->clk_pre_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_exit >= 100ns*/
+	clk_t_hs_exit = 1000 * accuracy + mipi->clk_t_hs_exit_adjust * ui;
+
+	/* clocked by TXBYTECLKHS*/
+	clk_pre_delay = 0 + mipi->clk_pre_delay_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_trial >= 60ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_hs_trial = 600 * accuracy + 3 * unit_tx_byte_clk_hs + mipi->clk_t_hs_trial_adjust * ui;
+
+	/* D-PHY Specification : 38ns <= clk_t_hs_prepare <= 95ns*/
+	/* clocked by TXBYTECLKHS*/
+	if (mipi->clk_t_hs_prepare_adjust == 0)
+		mipi->clk_t_hs_prepare_adjust = 43;
+
+	clk_t_hs_prepare = ((380 * accuracy + mipi->clk_t_hs_prepare_adjust * ui) <= (950 * accuracy - 8 * ui)) ?
+		(380 * accuracy + mipi->clk_t_hs_prepare_adjust * ui) : (950 * accuracy - 8 * ui);
+
+	/* clocked by TXBYTECLKHS*/
+	data_post_delay = 0 + mipi->data_post_delay_adjust * ui;
+
+	/* D-PHY Specification : data_t_hs_trial >= max( n*8*UI, 60ns + n*4*UI ), n = 1*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_hs_trial = ((600 * accuracy + 4 * ui) >= (8 * ui) ? (600 * accuracy + 4 * ui) : (8 * ui)) + 8 * ui +
+		3 * unit_tx_byte_clk_hs + mipi->data_t_hs_trial_adjust * ui;
+
+	/* D-PHY Specification : 40ns + 4*UI <= data_t_hs_prepare <= 85ns + 6*UI*/
+	/* clocked by TXBYTECLKHS*/
+	if (mipi->data_t_hs_prepare_adjust == 0)
+		mipi->data_t_hs_prepare_adjust = 35;
+
+	data_t_hs_prepare = ((400  * accuracy + 4 * ui + mipi->data_t_hs_prepare_adjust * ui) <= (850 * accuracy + 6 * ui - 8 * ui)) ?
+		(400  * accuracy + 4 * ui + mipi->data_t_hs_prepare_adjust * ui) : (850 * accuracy + 6 * ui - 8 * ui);
+
+	/* D-PHY chip spec : clk_t_lpx + clk_t_hs_prepare > 200ns*/
+	/* D-PHY Specification : clk_t_lpx >= 50ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_lpx = (((2000 * accuracy - clk_t_hs_prepare) >= 500 * accuracy) ?
+		((2000 * accuracy - clk_t_hs_prepare)) : (500 * accuracy)) +
+		mipi->clk_t_lpx_adjust * ui;
+
+	/* D-PHY Specification : clk_t_hs_zero + clk_t_hs_prepare >= 300 ns*/
+	/* clocked by TXBYTECLKHS*/
+	clk_t_hs_zero = 3000 * accuracy - clk_t_hs_prepare + 3 * unit_tx_byte_clk_hs + mipi->clk_t_hs_zero_adjust * ui;
+
+	/* D-PHY chip spec : data_t_lpx + data_t_hs_prepare > 200ns*/
+	/* D-PHY Specification : data_t_lpx >= 50ns*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_lpx = clk_t_lpx + mipi->data_t_lpx_adjust * ui; /*2000 * accuracy - data_t_hs_prepare;*/
+
+	/* D-PHY Specification : data_t_hs_zero + data_t_hs_prepare >= 145ns + 10*UI*/
+	/* clocked by TXBYTECLKHS*/
+	data_t_hs_zero = 1450 * accuracy + 10 * ui - data_t_hs_prepare +
+		3 * unit_tx_byte_clk_hs + mipi->data_t_hs_zero_adjust * ui;
+
+	phy_ctrl->clk_pre_delay = ROUND1(clk_pre_delay, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_prepare = ROUND1(clk_t_hs_prepare, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_lpx = ROUND1(clk_t_lpx, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_zero = ROUND1(clk_t_hs_zero, unit_tx_byte_clk_hs);
+	phy_ctrl->clk_t_hs_trial = ROUND1(clk_t_hs_trial, unit_tx_byte_clk_hs);
+
+	phy_ctrl->data_post_delay = ROUND1(data_post_delay, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_prepare = ROUND1(data_t_hs_prepare, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_lpx = ROUND1(data_t_lpx, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_zero = ROUND1(data_t_hs_zero, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_hs_trial = ROUND1(data_t_hs_trial, unit_tx_byte_clk_hs);
+	phy_ctrl->data_t_ta_go = 4;
+	phy_ctrl->data_t_ta_get = 5;
+
+	clk_pre_delay_reality = phy_ctrl->clk_pre_delay + 2;
+	clk_t_hs_zero_reality = phy_ctrl->clk_t_hs_zero + 8;
+	data_t_hs_zero_reality = phy_ctrl->data_t_hs_zero + 4;
+	data_post_delay_reality = phy_ctrl->data_post_delay + 4;
+
+	phy_ctrl->clk_post_delay = phy_ctrl->data_t_hs_trial + ROUND1(clk_post, unit_tx_byte_clk_hs);
+	phy_ctrl->data_pre_delay = clk_pre_delay_reality + phy_ctrl->clk_t_lpx +
+		phy_ctrl->clk_t_hs_prepare + clk_t_hs_zero_reality + ROUND1(clk_pre, unit_tx_byte_clk_hs) ;
+
+	clk_post_delay_reality = phy_ctrl->clk_post_delay + 4;
+	data_pre_delay_reality = phy_ctrl->data_pre_delay + 2;
+
+	phy_ctrl->clk_lane_lp2hs_time = clk_pre_delay_reality + phy_ctrl->clk_t_lpx +
+		phy_ctrl->clk_t_hs_prepare + clk_t_hs_zero_reality + 3;
+	phy_ctrl->clk_lane_hs2lp_time = clk_post_delay_reality + phy_ctrl->clk_t_hs_trial + 3;
+	phy_ctrl->data_lane_lp2hs_time = data_pre_delay_reality + phy_ctrl->data_t_lpx +
+		phy_ctrl->data_t_hs_prepare + data_t_hs_zero_reality + 3;
+	phy_ctrl->data_lane_hs2lp_time = data_post_delay_reality + phy_ctrl->data_t_hs_trial + 3;
+	phy_ctrl->phy_stop_wait_time = clk_post_delay_reality +
+		phy_ctrl->clk_t_hs_trial + ROUND1(clk_t_hs_exit, unit_tx_byte_clk_hs) -
+		(data_post_delay_reality + phy_ctrl->data_t_hs_trial) + 3;
+
+	phy_ctrl->lane_byte_clk = lane_clock / 8;
+	phy_ctrl->clk_division = (((phy_ctrl->lane_byte_clk / 2) % mipi->max_tx_esc_clk) > 0) ?
+		(phy_ctrl->lane_byte_clk / 2 / mipi->max_tx_esc_clk + 1) :
+		(phy_ctrl->lane_byte_clk / 2 / mipi->max_tx_esc_clk);
+
+	DRM_INFO("PHY clock_lane and data_lane config : \n"
+		"rg_vrefsel_vcm=%u\n"
+		"clk_pre_delay=%u\n"
+		"clk_post_delay=%u\n"
+		"clk_t_hs_prepare=%u\n"
+		"clk_t_lpx=%u\n"
+		"clk_t_hs_zero=%u\n"
+		"clk_t_hs_trial=%u\n"
+		"data_pre_delay=%u\n"
+		"data_post_delay=%u\n"
+		"data_t_hs_prepare=%u\n"
+		"data_t_lpx=%u\n"
+		"data_t_hs_zero=%u\n"
+		"data_t_hs_trial=%u\n"
+		"data_t_ta_go=%u\n"
+		"data_t_ta_get=%u\n",
+		phy_ctrl->rg_vrefsel_vcm,
+		phy_ctrl->clk_pre_delay,
+		phy_ctrl->clk_post_delay,
+		phy_ctrl->clk_t_hs_prepare,
+		phy_ctrl->clk_t_lpx,
+		phy_ctrl->clk_t_hs_zero,
+		phy_ctrl->clk_t_hs_trial,
+		phy_ctrl->data_pre_delay,
+		phy_ctrl->data_post_delay,
+		phy_ctrl->data_t_hs_prepare,
+		phy_ctrl->data_t_lpx,
+		phy_ctrl->data_t_hs_zero,
+		phy_ctrl->data_t_hs_trial,
+		phy_ctrl->data_t_ta_go,
+		phy_ctrl->data_t_ta_get);
+	DRM_INFO("clk_lane_lp2hs_time=%u\n"
+		"clk_lane_hs2lp_time=%u\n"
+		"data_lane_lp2hs_time=%u\n"
+		"data_lane_hs2lp_time=%u\n"
+		"phy_stop_wait_time=%u\n",
+		phy_ctrl->clk_lane_lp2hs_time,
+		phy_ctrl->clk_lane_hs2lp_time,
+		phy_ctrl->data_lane_lp2hs_time,
+		phy_ctrl->data_lane_hs2lp_time,
+		phy_ctrl->phy_stop_wait_time);
+}
+
+static void dsi_set_burst_mode(void __iomem *base, unsigned long flags)
+{
+	u32 val;
+	u32 mode_mask = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_pulse = MIPI_DSI_MODE_VIDEO |
+		MIPI_DSI_MODE_VIDEO_SYNC_PULSE;
+	u32 non_burst_sync_event = MIPI_DSI_MODE_VIDEO;
+
+	/*
+	 * choose video mode type
+	 */
+	if ((flags & mode_mask) == non_burst_sync_pulse)
+		val = DSI_NON_BURST_SYNC_PULSES;
+	else if ((flags & mode_mask) == non_burst_sync_event)
+		val = DSI_NON_BURST_SYNC_EVENTS;
+	else
+		val = DSI_BURST_SYNC_PULSES_1;
+
+	set_reg(base + MIPIDSI_VID_MODE_CFG_OFFSET, val, 2, 0);
+}
+
+/*
+ * dsi phy reg write function
+ */
+static void dsi_phy_tst_set(void __iomem *base, u32 reg, u32 val)
+{
+	u32 reg_write = 0x10000 + reg;
+
+	/*
+	 * latch reg first
+	 */
+	writel(reg_write, base + MIPIDSI_PHY_TST_CTRL1_OFFSET);
+	writel(0x02, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+	writel(0x00, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+
+	/*
+	 * then latch value
+	 */
+	writel(val, base + MIPIDSI_PHY_TST_CTRL1_OFFSET);
+	writel(0x02, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+	writel(0x00, base + MIPIDSI_PHY_TST_CTRL0_OFFSET);
+}
+
+static void dsi_mipi_init(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	u32 hline_time = 0;
+	u32 hsa_time = 0;
+	u32 hbp_time = 0;
+	u64 pixel_clk = 0;
+	u32 i = 0;
+	u32 id = 0;
+	unsigned long dw_jiffies = 0;
+	u32 tmp = 0;
+	bool is_ready = false;
+	struct mipi_panel_info *mipi = NULL;
+	struct dss_rect rect;
+	u32 cmp_stopstate_val = 0;
+	u32 lanes;
+
+	WARN_ON(!dsi);
+	WARN_ON(!mipi_dsi_base);
+
+	id = dsi->cur_client;
+	mipi = &dsi->mipi;
+
+	if (mipi->max_tx_esc_clk == 0) {
+		DRM_INFO("max_tx_esc_clk is invalid!");
+		mipi->max_tx_esc_clk = DEFAULT_MAX_TX_ESC_CLK;
+	}
+
+	memset(&dsi->phy, 0, sizeof(struct mipi_phy_params));
+	get_dsi_phy_ctrl(dsi, &dsi->phy);
+
+	rect.x = 0;
+	rect.y = 0;
+	rect.w = dsi->cur_mode.hdisplay;
+	rect.h = dsi->cur_mode.vdisplay;
+	lanes = dsi->client[id].lanes - 1;
+	/***************Configure the DPHY start**************/
+
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_IF_CFG_OFFSET, lanes, 2, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_CLKMGR_CFG_OFFSET, dsi->phy.clk_division, 8, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_CLKMGR_CFG_OFFSET, dsi->phy.clk_division, 8, 8);
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_RSTZ_OFFSET, 0x00000000);
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000000);
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000001);
+	outp32(mipi_dsi_base + MIPIDSI_PHY_TST_CTRL0_OFFSET, 0x00000000);
+
+	/* physical configuration PLL I*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x14,
+		(dsi->phy.pll_fbd_s << 4) + (dsi->phy.rg_pll_enswc << 3) +
+		(dsi->phy.pll_enbwt << 2) + dsi->phy.rg_pll_chp);
+
+	/* physical configuration PLL II, M*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x15, dsi->phy.pll_fbd_p);
+
+	/* physical configuration PLL III*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x16,
+		(dsi->phy.rg_pll_cp << 5) + (dsi->phy.pll_lpf_cs << 4) +
+		dsi->phy.rg_pll_refsel);
+
+	/* physical configuration PLL IV, N*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x17, dsi->phy.pll_pre_p);
+
+	/* sets the analog characteristic of V reference in D-PHY TX*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1D, dsi->phy.rg_vrefsel_vcm);
+
+	/* MISC AFE Configuration*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1E,
+		(dsi->phy.rg_pll_cp_p << 5) + (dsi->phy.reload_sel << 4) +
+		(dsi->phy.rg_phase_gen_en << 3) + (dsi->phy.rg_band_sel << 2) +
+		(dsi->phy.pll_power_down << 1) + dsi->phy.pll_register_override);
+
+	/*reload_command*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x1F, dsi->phy.load_command);
+
+	/* pre_delay of clock lane request setting*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x20, DSS_REDUCE(dsi->phy.clk_pre_delay));
+
+	/* post_delay of clock lane request setting*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x21, DSS_REDUCE(dsi->phy.clk_post_delay));
+
+	/* clock lane timing ctrl - t_lpx*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x22, DSS_REDUCE(dsi->phy.clk_t_lpx));
+
+	/* clock lane timing ctrl - t_hs_prepare*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x23, DSS_REDUCE(dsi->phy.clk_t_hs_prepare));
+
+	/* clock lane timing ctrl - t_hs_zero*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x24, DSS_REDUCE(dsi->phy.clk_t_hs_zero));
+
+	/* clock lane timing ctrl - t_hs_trial*/
+	dsi_phy_tst_set(mipi_dsi_base, 0x25, dsi->phy.clk_t_hs_trial);
+
+	for (i = 0; i <= lanes; i++) {
+		/* data lane pre_delay*/
+		tmp = 0x30 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_pre_delay));
+
+		/*data lane post_delay*/
+		tmp = 0x31 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_post_delay));
+
+		/* data lane timing ctrl - t_lpx*/
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_lpx));
+
+		/* data lane timing ctrl - t_hs_prepare*/
+		tmp = 0x33 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_prepare));
+
+		/* data lane timing ctrl - t_hs_zero*/
+		tmp = 0x34 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_zero));
+
+		/* data lane timing ctrl - t_hs_trial*/
+		tmp = 0x35 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_hs_trial));
+
+		/* data lane timing ctrl - t_ta_go*/
+		tmp = 0x36 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_ta_go));
+
+		/* data lane timing ctrl - t_ta_get*/
+		tmp = 0x37 + (i << 4);
+		dsi_phy_tst_set(mipi_dsi_base, tmp, DSS_REDUCE(dsi->phy.data_t_ta_get));
+	}
+
+	outp32(mipi_dsi_base + MIPIDSI_PHY_RSTZ_OFFSET, 0x00000007);
+
+	is_ready = false;
+	dw_jiffies = jiffies + HZ / 2;
+	do {
+		tmp = inp32(mipi_dsi_base + MIPIDSI_PHY_STATUS_OFFSET);
+		if ((tmp & 0x00000001) == 0x00000001) {
+			is_ready = true;
+			break;
+		}
+	} while (time_after(dw_jiffies, jiffies));
+
+	if (!is_ready) {
+		DRM_INFO("phylock is not ready!MIPIDSI_PHY_STATUS_OFFSET=0x%x.\n",
+			tmp);
+	}
+
+	if (lanes >= DSI_4_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7) | BIT(9) | BIT(11));
+	else if (lanes >= DSI_3_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7) | BIT(9));
+	else if (lanes >= DSI_2_LANES)
+		cmp_stopstate_val = (BIT(4) | BIT(7));
+	else
+		cmp_stopstate_val = (BIT(4));
+
+	is_ready = false;
+	dw_jiffies = jiffies + HZ / 2;
+	do {
+		tmp = inp32(mipi_dsi_base + MIPIDSI_PHY_STATUS_OFFSET);
+		if ((tmp & cmp_stopstate_val) == cmp_stopstate_val) {
+			is_ready = true;
+			break;
+		}
+	} while (time_after(dw_jiffies, jiffies));
+
+	if (!is_ready) {
+		DRM_INFO("phystopstateclklane is not ready! MIPIDSI_PHY_STATUS_OFFSET=0x%x.\n",
+			tmp);
+	}
+
+	/*************************Configure the DPHY end*************************/
+
+	/* phy_stop_wait_time*/
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_IF_CFG_OFFSET, dsi->phy.phy_stop_wait_time, 8, 8);
+
+	/*--------------configuring the DPI packet transmission----------------*/
+	/*
+	** 2. Configure the DPI Interface:
+	** This defines how the DPI interface interacts with the controller.
+	*/
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_VCID_OFFSET, mipi->vc, 2, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_COLOR_CODING_OFFSET, mipi->color_mode, 4, 0);
+
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.data_en_plr, 1, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.vsync_plr, 1, 1);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, dsi->ldi.hsync_plr, 1, 2);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, 0x0, 1, 3);
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_CFG_POL_OFFSET, 0x0, 1, 4);
+
+	/*
+	** 3. Select the Video Transmission Mode:
+	** This defines how the processor requires the video line to be
+	** transported through the DSI link.
+	*/
+	/* video mode: low power mode*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x3f, 6, 8);
+	/* set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x0, 1, 14); */
+
+	/* TODO: fix blank display bug when set backlight*/
+	set_reg(mipi_dsi_base + MIPIDSI_DPI_LP_CMD_TIM_OFFSET, 0x4, 8, 16);
+	/* video mode: send read cmd by lp mode*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_MODE_CFG_OFFSET, 0x1, 1, 15);
+
+	set_reg(mipi_dsi_base + MIPIDSI_VID_PKT_SIZE_OFFSET, rect.w, 14, 0);
+
+	/* burst mode*/
+	dsi_set_burst_mode(mipi_dsi_base, dsi->client[id].mode_flags);
+	/* for dsi read, BTA enable*/
+	set_reg(mipi_dsi_base + MIPIDSI_PCKHDL_CFG_OFFSET, 0x1, 1, 2);
+
+	/*
+	** 4. Define the DPI Horizontal timing configuration:
+	**
+	** Hsa_time = HSA*(PCLK period/Clk Lane Byte Period);
+	** Hbp_time = HBP*(PCLK period/Clk Lane Byte Period);
+	** Hline_time = (HSA+HBP+HACT+HFP)*(PCLK period/Clk Lane Byte Period);
+	*/
+	pixel_clk = dsi->cur_mode.clock * 1000;
+	/*htot = dsi->cur_mode.htotal;*/
+	/*vtot = dsi->cur_mode.vtotal;*/
+	dsi->ldi.h_front_porch = dsi->cur_mode.hsync_start - dsi->cur_mode.hdisplay;
+	dsi->ldi.h_back_porch = dsi->cur_mode.htotal - dsi->cur_mode.hsync_end;
+	dsi->ldi.h_pulse_width = dsi->cur_mode.hsync_end - dsi->cur_mode.hsync_start;
+	dsi->ldi.v_front_porch = dsi->cur_mode.vsync_start - dsi->cur_mode.vdisplay;
+	dsi->ldi.v_back_porch = dsi->cur_mode.vtotal - dsi->cur_mode.vsync_end;
+	dsi->ldi.v_pulse_width = dsi->cur_mode.vsync_end - dsi->cur_mode.vsync_start;
+	if (dsi->ldi.v_pulse_width > 15) {
+		DRM_DEBUG_DRIVER("vsw exceeded 15\n");
+		dsi->ldi.v_pulse_width = 15;
+	}
+	hsa_time = dsi->ldi.h_pulse_width * dsi->phy.lane_byte_clk / pixel_clk;
+	hbp_time = dsi->ldi.h_back_porch * dsi->phy.lane_byte_clk / pixel_clk;
+	hline_time = ROUND1((dsi->ldi.h_pulse_width + dsi->ldi.h_back_porch +
+		rect.w + dsi->ldi.h_front_porch) * dsi->phy.lane_byte_clk, pixel_clk);
+
+	DRM_INFO("hsa_time=%d, hbp_time=%d, hline_time=%d\n",
+	    hsa_time, hbp_time, hline_time);
+	DRM_INFO("lane_byte_clk=%llu, pixel_clk=%llu\n",
+	    dsi->phy.lane_byte_clk, pixel_clk);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HSA_TIME_OFFSET, hsa_time, 12, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HBP_TIME_OFFSET, hbp_time, 12, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_HLINE_TIME_OFFSET, hline_time, 15, 0);
+
+	/* Define the Vertical line configuration*/
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VSA_LINES_OFFSET, dsi->ldi.v_pulse_width, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VBP_LINES_OFFSET, dsi->ldi.v_back_porch, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VFP_LINES_OFFSET, dsi->ldi.v_front_porch, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_VID_VACTIVE_LINES_OFFSET, rect.h, 14, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_TO_CNT_CFG_OFFSET, 0x7FF, 16, 0);
+
+	/* Configure core's phy parameters*/
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET, dsi->phy.clk_lane_lp2hs_time, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET, dsi->phy.clk_lane_hs2lp_time, 10, 16);
+
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_RD_CFG_OFFSET, 0x7FFF, 15, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_CFG_OFFSET, dsi->phy.data_lane_lp2hs_time, 10, 0);
+	set_reg(mipi_dsi_base + MIPIDSI_PHY_TMR_CFG_OFFSET, dsi->phy.data_lane_hs2lp_time, 10, 16);
+
+	/* Waking up Core*/
+	set_reg(mipi_dsi_base + MIPIDSI_PWR_UP_OFFSET, 0x1, 1, 0);
+}
+
+static int mipi_dsi_on_sub1(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	WARN_ON(!mipi_dsi_base);
+
+	/* mipi init */
+	dsi_mipi_init(dsi, mipi_dsi_base);
+	DRM_INFO("dsi_mipi_init ok\n");
+	/* switch to cmd mode */
+	set_reg(mipi_dsi_base + MIPIDSI_MODE_CFG_OFFSET, 0x1, 1, 0);
+	/* cmd mode: low power mode */
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0x7f, 7, 8);
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0xf, 4, 16);
+	set_reg(mipi_dsi_base + MIPIDSI_CMD_MODE_CFG_OFFSET, 0x1, 1, 24);
+	/* disable generate High Speed clock */
+	/* delete? */
+	set_reg(mipi_dsi_base + MIPIDSI_LPCLK_CTRL_OFFSET, 0x0, 1, 0);
+
+	return 0;
+}
+
+static int mipi_dsi_on_sub2(struct dw_dsi *dsi, char __iomem *mipi_dsi_base)
+{
+	WARN_ON(!mipi_dsi_base);
+
+	/* switch to video mode */
+	set_reg(mipi_dsi_base + MIPIDSI_MODE_CFG_OFFSET, 0x0, 1, 0);
+
+	/* enable EOTP TX */
+	set_reg(mipi_dsi_base + MIPIDSI_PCKHDL_CFG_OFFSET, 0x1, 1, 0);
+
+	/* enable generate High Speed clock, continue clock */
+	set_reg(mipi_dsi_base + MIPIDSI_LPCLK_CTRL_OFFSET, 0x1, 2, 0);
+
+	return 0;
+}
+
+static void dsi_encoder_enable_sub(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret;
+
+	if (dsi->enable)
+		return;
+
+	ret = clk_prepare_enable(ctx->dss_dphy0_ref_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_dphy0_ref_clk: %d\n", ret);
+		return;
+	}
+
+	ret = clk_prepare_enable(ctx->dss_dphy0_cfg_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_dphy0_cfg_clk: %d\n", ret);
+		return;
+	}
+
+	ret = clk_prepare_enable(ctx->dss_pclk_dsi0_clk);
+	if (ret) {
+		DRM_ERROR("fail to enable dss_pclk_dsi0_clk: %d\n", ret);
+		return;
+	}
+
+	mipi_dsi_on_sub1(dsi, ctx->base);
+
+	mipi_dsi_on_sub2(dsi, ctx->base);
+}
+
+static int dsi_host_attach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+	u32 id = mdsi->channel >= 1 ? OUT_PANEL : OUT_HDMI;
+
+	if (mdsi->lanes < 1 || mdsi->lanes > 4) {
+		DRM_ERROR("dsi device params invalid\n");
+		return -EINVAL;
+	}
+
+	dsi->client[id].lanes = mdsi->lanes;
+	dsi->client[id].format = mdsi->format;
+	dsi->client[id].mode_flags = mdsi->mode_flags;
+	dsi->client[id].phy_clock = 0;//mdsi->phy_clock;
+
+	DRM_INFO("host attach, client name=[%s], id=%d\n", mdsi->name, id);
+
+	return 0;
+}
+
+static int dsi_host_detach(struct mipi_dsi_host *host,
+			   struct mipi_dsi_device *mdsi)
+{
+	/* do nothing */
+	return 0;
+}
+
+static int dsi_gen_pkt_hdr_write(void __iomem *base, u32 val)
+{
+	u32 status;
+	int ret;
+
+	ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS, status,
+				 !(status & GEN_CMD_FULL), 1000,
+				 CMD_PKT_STATUS_TIMEOUT_US);
+	if (ret < 0) {
+		DRM_ERROR("failed to get available command FIFO\n");
+		return ret;
+	}
+
+	writel(val, base + GEN_HDR);
+
+	ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS, status,
+				 status & (GEN_CMD_EMPTY | GEN_PLD_W_EMPTY),
+				 1000, CMD_PKT_STATUS_TIMEOUT_US);
+	if (ret < 0) {
+		DRM_ERROR("failed to write command FIFO\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_dcs_short_write(void __iomem *base,
+			       const struct mipi_dsi_msg *msg)
+{
+	const u16 *tx_buf = msg->tx_buf;
+	u32 val = GEN_HDATA(*tx_buf) | GEN_HTYPE(msg->type);
+
+	if (msg->tx_len > 2) {
+		DRM_ERROR("too long tx buf length %zu for short write\n",
+			  msg->tx_len);
+		return -EINVAL;
+	}
+
+	return dsi_gen_pkt_hdr_write(base, val);
+}
+
+static int dsi_dcs_long_write(void __iomem *base,
+			      const struct mipi_dsi_msg *msg)
+{
+	const u32 *tx_buf = msg->tx_buf;
+	int len = msg->tx_len, pld_data_bytes = sizeof(*tx_buf), ret;
+	u32 val = GEN_HDATA(msg->tx_len) | GEN_HTYPE(msg->type);
+	u32 remainder = 0;
+	u32 status;
+
+	if (msg->tx_len < 3) {
+		DRM_ERROR("wrong tx buf length %zu for long write\n",
+			  msg->tx_len);
+		return -EINVAL;
+	}
+
+	while (DIV_ROUND_UP(len, pld_data_bytes)) {
+		if (len < pld_data_bytes) {
+			memcpy(&remainder, tx_buf, len);
+			writel(remainder, base + GEN_PLD_DATA);
+			len = 0;
+		} else {
+			writel(*tx_buf, base + GEN_PLD_DATA);
+			tx_buf++;
+			len -= pld_data_bytes;
+		}
+
+		ret = readx_poll_timeout(readl, base + CMD_PKT_STATUS,
+					 status, !(status & GEN_PLD_W_FULL), 1000,
+					 CMD_PKT_STATUS_TIMEOUT_US);
+		if (ret < 0) {
+			DRM_ERROR("failed to get available write payload FIFO\n");
+			return ret;
+		}
+	}
+
+	return dsi_gen_pkt_hdr_write(base, val);
+}
+
+static ssize_t dsi_host_transfer(struct mipi_dsi_host *host,
+				    const struct mipi_dsi_msg *msg)
+{
+	struct dw_dsi *dsi = host_to_dsi(host);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	void __iomem *base = ctx->base;
+	int ret;
+
+	switch (msg->type) {
+	case MIPI_DSI_DCS_SHORT_WRITE:
+	case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
+	case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
+		ret = dsi_dcs_short_write(base, msg);
+		break;
+	case MIPI_DSI_DCS_LONG_WRITE:
+		ret = dsi_dcs_long_write(base, msg);
+		break;
+	default:
+		DRM_ERROR("unsupported message type\n");
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static const struct mipi_dsi_host_ops dsi_host_ops = {
+	.attach = dsi_host_attach,
+	.detach = dsi_host_detach,
+	.transfer = dsi_host_transfer,
+};
+
+static int dsi_host_init(struct device *dev, struct dw_dsi *dsi)
+{
+	struct mipi_dsi_host *host = &dsi->host;
+	struct mipi_panel_info *mipi = &dsi->mipi;
+	int ret;
+
+	host->dev = dev;
+	host->ops = &dsi_host_ops;
+
+	mipi->max_tx_esc_clk = 10 * 1000000UL;
+	mipi->vc = 0;
+	mipi->color_mode = DSI_24BITS_1;
+	mipi->clk_post_adjust = 120;
+	mipi->clk_pre_adjust = 0;
+	mipi->clk_t_hs_prepare_adjust = 0;
+	mipi->clk_t_lpx_adjust = 0;
+	mipi->clk_t_hs_trial_adjust = 0;
+	mipi->clk_t_hs_exit_adjust = 0;
+	mipi->clk_t_hs_zero_adjust = 0;
+
+	dsi->ldi.data_en_plr = 0;
+	dsi->ldi.vsync_plr = 0;
+	dsi->ldi.hsync_plr = 0;
+
+	ret = mipi_dsi_host_register(host);
+	if (ret) {
+		DRM_ERROR("failed to register dsi host\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_bridge_endpoint(struct dw_dsi *dsi,
+				     struct device_node *endpoint)
+{
+	struct device_node *bridge_node;
+	struct drm_bridge *bridge;
+
+	bridge_node = of_graph_get_remote_port_parent(endpoint);
+	if (!bridge_node) {
+		DRM_ERROR("no valid bridge node\n");
+		return -ENODEV;
+	}
+	of_node_put(bridge_node);
+
+	bridge = of_drm_find_bridge(bridge_node);
+	if (!bridge) {
+		DRM_INFO("wait for external HDMI bridge driver.\n");
+		return -EPROBE_DEFER;
+	}
+	dsi->bridge = bridge;
+
+	return 0;
+}
+
+static int dsi_parse_panel_endpoint(struct dw_dsi *dsi,
+				    struct device_node *endpoint)
+{
+	struct device_node *panel_node;
+	struct drm_panel *panel;
+
+	panel_node = of_graph_get_remote_port_parent(endpoint);
+	if (!panel_node) {
+		DRM_ERROR("no valid panel node\n");
+		return -ENODEV;
+	}
+	of_node_put(panel_node);
+
+	panel = of_drm_find_panel(panel_node);
+	if (IS_ERR(panel)) {
+		DRM_DEBUG_DRIVER("skip this panel endpoint.\n");
+		return 0;
+	}
+	dsi->panel = panel;
+
+	return 0;
+}
+
+static int dsi_parse_endpoint(struct dw_dsi *dsi,
+			      struct device_node *np,
+			      enum dsi_output_client client)
+{
+	struct device_node *ep_node;
+	struct of_endpoint ep;
+	int ret = 0;
+
+	if (client == OUT_MAX)
+		return -EINVAL;
+
+	for_each_endpoint_of_node(np, ep_node) {
+		ret = of_graph_parse_endpoint(ep_node, &ep);
+		if (ret) {
+			of_node_put(ep_node);
+			return ret;
+		}
+
+		/* skip dsi input port, port == 0 is input port */
+		if (ep.port == 0)
+			continue;
+
+		/* parse bridge endpoint */
+		if (client == OUT_HDMI) {
+			if (ep.id == 0) {
+				ret = dsi_parse_bridge_endpoint(dsi, ep_node);
+				if (dsi->bridge)
+					break;
+			}
+		} else { /* parse panel endpoint */
+			if (ep.id > 0) {
+				ret = dsi_parse_panel_endpoint(dsi, ep_node);
+				if (dsi->panel)
+					break;
+			}
+		}
+
+		if (ret) {
+			of_node_put(ep_node);
+			return ret;
+		}
+	}
+
+	if (!dsi->bridge && !dsi->panel) {
+		DRM_ERROR("at least one bridge or panel node is required\n");
+		return -ENODEV;
+	}
+
+	return 0;
+}
+
+static int dsi_parse_dt(struct platform_device *pdev, struct dw_dsi *dsi)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	int ret = 0;
+	struct device_node *np = pdev->dev.of_node;
+
+	/* parse HDMI bridge endpoint */
+	ret = dsi_parse_endpoint(dsi, np, OUT_HDMI);
+	if (ret)
+		return ret;
+
+
+
+	/* parse panel endpoint */
+	ret = dsi_parse_endpoint(dsi, np, OUT_PANEL);
+	if (ret)
+		return ret;
+	
+
+	np = of_find_compatible_node(NULL, NULL, DTS_COMP_DSI_NAME);
+	if (!np) {
+			DRM_ERROR("NOT FOUND device node %s!\n",
+				    DTS_COMP_DSI_NAME);
+			return -ENXIO;
+	}
+
+	ctx->base = of_iomap(np, 0);
+	if (!(ctx->base)) {
+			DRM_ERROR ("failed to get base resource.\n");
+			return -ENXIO;
+	}
+
+	ctx->peri_crg_base = of_iomap(np, 1);
+	if (!(ctx->peri_crg_base)) {
+			DRM_ERROR ("failed to get peri_crg_base resource.\n");
+			return -ENXIO;
+	}
+
+	dsi->gpio_mux = devm_gpiod_get(&pdev->dev, "mux", GPIOD_OUT_HIGH);
+	if (IS_ERR(dsi->gpio_mux))
+		return PTR_ERR(dsi->gpio_mux);
+	/* set dsi default output to panel */
+	dsi->cur_client = OUT_PANEL;
+
+	/*dis-reset*/
+	/*ip_reset_dis_dsi0, ip_reset_dis_dsi1*/
+	outp32(ctx->peri_crg_base + PERRSTDIS3, 0x30000000);
+
+	ctx->dss_dphy0_ref_clk = devm_clk_get(&pdev->dev, "clk_txdphy0_ref");
+	if (IS_ERR(ctx->dss_dphy0_ref_clk)) {
+		DRM_ERROR("failed to get dss_dphy0_ref_clk clock\n");
+		return PTR_ERR(ctx->dss_dphy0_ref_clk);
+	}
+
+	ret = clk_set_rate(ctx->dss_dphy0_ref_clk, DEFAULT_MIPI_CLK_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dss_dphy0_ref_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_MIPI_CLK_RATE, ret);
+		return -EINVAL;
+	}
+
+	DRM_DEBUG("dss_dphy0_ref_clk:[%lu]->[%lu].\n",
+		DEFAULT_MIPI_CLK_RATE, clk_get_rate(ctx->dss_dphy0_ref_clk));
+
+	ctx->dss_dphy0_cfg_clk = devm_clk_get(&pdev->dev, "clk_txdphy0_cfg");
+	if (IS_ERR(ctx->dss_dphy0_cfg_clk)) {
+		DRM_ERROR("failed to get dss_dphy0_cfg_clk clock\n");
+		return PTR_ERR(ctx->dss_dphy0_cfg_clk);
+	}
+
+	ret = clk_set_rate(ctx->dss_dphy0_cfg_clk, DEFAULT_MIPI_CLK_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dss_dphy0_cfg_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_MIPI_CLK_RATE, ret);
+		return -EINVAL;
+	}
+
+	DRM_DEBUG("dss_dphy0_cfg_clk:[%lu]->[%lu].\n",
+		DEFAULT_MIPI_CLK_RATE, clk_get_rate(ctx->dss_dphy0_cfg_clk));
+
+	ctx->dss_pclk_dsi0_clk = devm_clk_get(&pdev->dev, "pclk_dsi0");
+	if (IS_ERR(ctx->dss_pclk_dsi0_clk)) {
+		DRM_ERROR("failed to get dss_pclk_dsi0_clk clock\n");
+		return PTR_ERR(ctx->dss_pclk_dsi0_clk);
+	}
+
+	return 0;
+}
+
+const struct kirin_dsi_ops kirin_dsi_960 = {
+	.version = KIRIN960_DSI,
+	.parse_dt = dsi_parse_dt,
+	.host_init = dsi_host_init,
+	.encoder_enable = dsi_encoder_enable_sub,
+	.encoder_valid = dsi_encoder_mode_valid
+};
+
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h b/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
old mode 100644
new mode 100755
index e2ac098..6d7f2e8
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_ade_reg.h
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0-only */
 /*
- * Copyright (c) 2016 Linaro Limited.
- * Copyright (c) 2014-2016 Hisilicon Limited.
+ * Copyright (c) 2016,2019 Linaro Limited.
+ * Copyright (c) 2014-2016,2019 Hisilicon Limited.
  */
 
 #ifndef __KIRIN_ADE_REG_H__
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h b/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h
new file mode 100644
index 0000000..f0ea3ee
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_dpe_reg.h
@@ -0,0 +1,393 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * 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.
+ *
+ */
+#ifndef __KIRIN_DPE_REG_H__
+#define __KIRIN_DPE_REG_H__
+
+#define BIT_MMU_IRPT_NS                  BIT(28)
+#define BIT_ITF0_INTS                    BIT(16)
+#define BIT_DPP_INTS                     BIT(15)
+#define BIT_VACTIVE0_END                 BIT(8)
+#define BIT_VACTIVE0_START               BIT(7)
+#define BIT_VSYNC                        BIT(4)
+#define BIT_LDI_UNFLOW                   BIT(2)
+
+#define DFS_TIME                         (80)
+#define DFS_TIME_MIN                     (50)
+#define DFS_TIME_MIN_4K                  (10)
+#define DBUF0_DEPTH                      (1408)
+#define DBUF_WIDTH_BIT                   (144)
+#define PERRSTDIS3                       (0x088)
+
+#define DPE_GLB0_OFFSET                  (0x12000)
+#define DPE_DBG_OFFSET                   (0x11000)
+#define DPE_CMDLIST_OFFSET               (0x02000)
+#define DPE_SMMU_OFFSET                  (0x08000)
+#define DPE_MIF_OFFSET                   (0x0A000)
+#define DPE_MCTRL_SYS_OFFSET             (0x10000)
+#define DPE_MCTRL_CTL0_OFFSET            (0x10800)
+#define DPE_RCH_VG0_DMA_OFFSET           (0x20000)
+#define DPE_RCH_VG0_SCL_OFFSET           (0x20200)
+#define DPE_RCH_VG0_ARSR_OFFSET          (0x20300)
+#define DPE_RCH_VG1_DMA_OFFSET           (0x28000)
+#define DPE_RCH_VG1_SCL_OFFSET           (0x28200)
+#define DPE_RCH_VG2_DMA_OFFSET           (0x30000)
+#define DPE_RCH_VG2_SCL_OFFSET           (0x30200)
+#define DPE_RCH_G0_DMA_OFFSET            (0x38000)
+#define DPE_RCH_G0_SCL_OFFSET            (0x38200)
+#define DPE_RCH_G1_DMA_OFFSET            (0x40000)
+#define DPE_RCH_G1_SCL_OFFSET            (0x40200)
+#define DPE_RCH_D2_DMA_OFFSET            (0x50000)
+#define DPE_RCH_D3_DMA_OFFSET            (0x51000)
+#define DPE_RCH_D0_DMA_OFFSET            (0x52000)
+#define DPE_RCH_D0_DFC_OFFSET            (0x52100)
+#define DPE_RCH_D1_DMA_OFFSET            (0x53000)
+#define DPE_WCH0_DMA_OFFSET              (0x5A000)
+#define DPE_WCH1_DMA_OFFSET              (0x5C000)
+#define DPE_WCH2_DMA_OFFSET              (0x5E000)
+#define DPE_WCH2_DFC_OFFSET              (0x5E100)
+#define DPE_OVL0_OFFSET                  (0x60000)
+#define DPE_DBUF0_OFFSET                 (0x6D000)
+#define DPE_DPP_OFFSET                   (0x70000)
+#define DPE_DPP_DITHER_OFFSET            (0x70200)
+#define DPE_LDI0_OFFSET                  (0x7D000)
+#define DPE_IFBC_OFFSET                  (0x7D800)
+#define DPE_DSC_OFFSET                   (0x7DC00)
+
+#define GLB_CPU_PDP_INTS                 (DPE_GLB0_OFFSET + 0x224)
+#define GLB_CPU_PDP_INT_MSK              (DPE_GLB0_OFFSET + 0x228)
+#define GLB_CPU_SDP_INTS                 (DPE_GLB0_OFFSET + 0x22C)
+#define GLB_CPU_SDP_INT_MSK              (DPE_GLB0_OFFSET + 0x230)
+
+#define DBG_MCTL_INTS                    (0x023C)
+#define DBG_MCTL_INT_MSK                 (0x0240)
+#define DBG_WCH0_INTS                    (0x0244)
+#define DBG_WCH0_INT_MSK                 (0x0248)
+#define DBG_WCH1_INTS                    (0x024C)
+#define DBG_WCH1_INT_MSK                 (0x0250)
+#define DBG_RCH0_INTS                    (0x0254)
+#define DBG_RCH0_INT_MSK                 (0x0258)
+#define DBG_RCH1_INTS                    (0x025C)
+#define DBG_RCH1_INT_MSK                 (0x0260)
+#define DBG_RCH2_INTS                    (0x0264)
+#define DBG_RCH2_INT_MSK                 (0x0268)
+#define DBG_RCH3_INTS                    (0x026C)
+#define DBG_RCH3_INT_MSK                 (0x0270)
+#define DBG_RCH4_INTS                    (0x0274)
+#define DBG_RCH4_INT_MSK                 (0x0278)
+#define DBG_RCH5_INTS                    (0x027C)
+#define DBG_RCH5_INT_MSK                 (0x0280)
+#define DBG_RCH6_INTS                    (0x0284)
+#define DBG_RCH6_INT_MSK                 (0x0288)
+#define DBG_RCH7_INTS                    (0x028C)
+#define DBG_RCH7_INT_MSK                 (0x0290)
+#define DBG_DPE_GLB_INTS                 (0x0294)
+#define DBG_DPE_GLB_INT_MSK              (0x0298)
+
+#define AIF0_CH0_OFFSET                  (0x7000)
+#define AIF0_CH0_ADD_OFFSET              (0x7004)
+
+#define MIF_ENABLE                       (0x0000)
+#define MIF_MEM_CTRL                     (0x0004)
+#define MIF_CTRL0                        (0x0000)
+#define MIF_CTRL1                        (0x0004)
+#define MIF_CTRL2                        (0x0008)
+#define MIF_CTRL3                        (0x000C)
+#define MIF_CTRL4                        (0x0010)
+#define MIF_CTRL5                        (0x0014)
+#define MIF_CTRL_OFFSET                  (0x0020)
+#define MIF_CH0_OFFSET                   (DPE_MIF_OFFSET + MIF_CTRL_OFFSET * 1)
+
+#define SMMU_SCR                         (0x0000)
+#define SMMU_MEMCTRL                     (0x0004)
+#define SMMU_LP_CTRL                     (0x0008)
+#define SMMU_INTMASK_NS                  (0x0010)
+#define SMMU_INTRAW_NS                   (0x0014)
+#define SMMU_INTSTAT_NS                  (0x0018)
+#define SMMU_INTCLR_NS                   (0x001C)
+#define SMMU_SMRx_NS                     (0x0020)
+
+#define DMA_OFT_X0                       (0x0000)
+#define DMA_OFT_Y0                       (0x0004)
+#define DMA_OFT_X1                       (0x0008)
+#define DMA_OFT_Y1                       (0x000C)
+#define DMA_MASK0                        (0x0010)
+#define DMA_MASK1                        (0x0014)
+#define DMA_STRETCH_SIZE_VRT             (0x0018)
+#define DMA_CTRL                         (0x001C)
+#define DMA_TILE_SCRAM                   (0x0020)
+#define DMA_PULSE                        (0x0028)
+#define DMA_CORE_GT                      (0x002C)
+#define DMA_DATA_ADDR0                   (0x0060)
+#define DMA_STRIDE0                      (0x0064)
+#define DMA_STRETCH_STRIDE0              (0x0068)
+#define DMA_DATA_NUM0                    (0x006C)
+#define DMA_CH_CTL                       (0x00D4)
+#define DMA_CH_REG_DEFAULT               (0x0A00)
+#define DMA_ALIGN_BYTES                  (128 / BITS_PER_BYTE)
+#define DMA_ADDR_ALIGN                   (128 / BITS_PER_BYTE)
+#define DMA_STRIDE_ALIGN                 (128 / BITS_PER_BYTE)
+
+#define DFC_DISP_SIZE                    (0x0000)
+#define DFC_PIX_IN_NUM                   (0x0004)
+#define DFC_GLB_ALPHA                    (0x0008)
+#define DFC_DISP_FMT                     (0x000C)
+#define DFC_CLIP_CTL_HRZ                 (0x0010)
+#define DFC_CLIP_CTL_VRZ                 (0x0014)
+#define DFC_CTL_CLIP_EN                  (0x0018)
+#define DFC_ICG_MODULE                   (0x001C)
+#define DFC_DITHER_ENABLE                (0x0020)
+#define DFC_PADDING_CTL                  (0x0024)
+
+#define MCTL_CTL_EN                      (0x0000)
+#define MCTL_CTL_MUTEX                   (0x0004)
+#define MCTL_CTL_MUTEX_STATUS            (0x0008)
+#define MCTL_CTL_MUTEX_ITF               (0x000C)
+#define MCTL_CTL_MUTEX_DBUF              (0x0010)
+#define MCTL_CTL_MUTEX_SCF               (0x0014)
+#define MCTL_CTL_MUTEX_OV                (0x0018)
+#define MCTL_CTL_MUTEX_WCH0              (0x0020)
+#define MCTL_CTL_MUTEX_RCH0              (0x0030)
+#define MCTL_CTL_TOP                     (0x0050)
+#define MCTL_CTL_DBG                     (0x00E0)
+#define MCTL_RCH0_FLUSH_EN               (0x0100)
+#define MCTL_OV0_FLUSH_EN                (0x0128)
+#define MCTL_RCH0_OV_OEN                 (0x0160)
+#define MCTL_RCH_OV0_SEL                 (0x0180)
+
+#define OVL_SIZE                         (0x0000)
+#define OVL_BG_COLOR                     (0x0004)
+#define OVL_DST_STARTPOS                 (0x0008)
+#define OVL_DST_ENDPOS                   (0x000C)
+#define OVL_GCFG                         (0x0010)
+#define OVL_LAYER0_POS                   (0x0014)
+#define OVL_LAYER0_SIZE                  (0x0018)
+#define OVL_LAYER0_ALPHA                 (0x0030)
+#define OVL_LAYER0_CFG                   (0x0034)
+#define OVL6_REG_DEFAULT                 (0x01A8)
+
+#define DBUF_FRM_SIZE                    (0x0000)
+#define DBUF_FRM_HSIZE                   (0x0004)
+#define DBUF_SRAM_VALID_NUM              (0x0008)
+#define DBUF_WBE_EN                      (0x000C)
+#define DBUF_THD_FILL_LEV0               (0x0010)
+#define DBUF_DFS_FILL_LEV1               (0x0014)
+#define DBUF_THD_RQOS                    (0x0018)
+#define DBUF_THD_WQOS                    (0x001C)
+#define DBUF_THD_CG                      (0x0020)
+#define DBUF_THD_OTHER                   (0x0024)
+#define DBUF_ONLINE_FILL_LEVEL           (0x003C)
+#define DBUF_WB_FILL_LEVEL               (0x0040)
+#define DBUF_DFS_STATUS                  (0x0044)
+#define DBUF_THD_FLUX_REQ_BEF            (0x0048)
+#define DBUF_DFS_LP_CTRL                 (0x004C)
+#define DBUF_RD_SHADOW_SEL               (0x0050)
+#define DBUF_MEM_CTRL                    (0x0054)
+#define DBUF_THD_FLUX_REQ_AFT            (0x0064)
+#define DBUF_THD_DFS_OK                  (0x0068)
+#define DBUF_FLUX_REQ_CTRL               (0x006C)
+#define DBUF_REG_DEFAULT                 (0x00A4)
+
+#define DPP_IMG_SIZE_BEF_SR              (0x000C)
+#define DPP_IMG_SIZE_AFT_SR              (0x0010)
+#define DPP_INTS                         (0x0040)
+#define DPP_INT_MSK                      (0x0044)
+
+#define SCF_COEF_MEM_CTRL                (0x0018)
+#define IFBC_MEM_CTRL                    (0x001C)
+#define DITHER_MEM_CTRL                  (0x002C)
+#define DSC_MEM_CTRL                     (0x0084)
+#define ARSR2P_LB_MEM_CTRL               (0x0084)
+#define SCF_LB_MEM_CTRL                  (0x0090)
+#define ROT_MEM_CTRL                     (0x0538)
+#define VPP_MEM_CTRL                     (0x0704)
+#define CMD_MEM_CTRL                     (0x073C)
+#define DMA_BUF_MEM_CTRL                 (0x0854)
+#define AFBCD_MEM_CTRL                   (0x093C)
+#define AFBCE_MEM_CTRL                   (0x0924)
+
+#define LDI_DPI0_HRZ_CTRL0               (0x0000)
+#define LDI_DPI0_HRZ_CTRL1               (0x0004)
+#define LDI_DPI0_HRZ_CTRL2               (0x0008)
+#define LDI_VRT_CTRL0                    (0x000C)
+#define LDI_VRT_CTRL1                    (0x0010)
+#define LDI_VRT_CTRL2                    (0x0014)
+#define LDI_PLR_CTRL                     (0x0018)
+#define LDI_CTRL                         (0x0024)
+#define LDI_WORK_MODE                    (0x0028)
+#define LDI_DSI_CMD_MOD_CTRL             (0x0030)
+#define LDI_VINACT_MSK_LEN               (0x0050)
+#define LDI_CMD_EVENT_SEL                (0x0060)
+#define LDI_MEM_CTRL                     (0x0100)
+#define LDI_PXL0_DIV2_GT_EN              (0x0210)
+#define LDI_PXL0_DIV4_GT_EN              (0x0214)
+#define LDI_PXL0_GT_EN                   (0x0218)
+#define LDI_PXL0_DSI_GT_EN               (0x021C)
+#define LDI_PXL0_DIVXCFG                 (0x0220)
+#define LDI_VESA_CLK_SEL                 (0x0228)
+#define LDI_CPU_ITF_INTS                 (0x0248)
+#define LDI_CPU_ITF_INT_MSK              (0x024C)
+
+#define MIPIDSI_VERSION_OFFSET           (0x0000)
+#define MIPIDSI_PWR_UP_OFFSET            (0x0004)
+#define MIPIDSI_CLKMGR_CFG_OFFSET        (0x0008)
+#define MIPIDSI_DPI_VCID_OFFSET          (0x000c)
+#define MIPIDSI_DPI_COLOR_CODING_OFFSET  (0x0010)
+#define MIPIDSI_DPI_CFG_POL_OFFSET       (0x0014)
+#define MIPIDSI_DPI_LP_CMD_TIM_OFFSET    (0x0018)
+#define MIPIDSI_PCKHDL_CFG_OFFSET        (0x002c)
+#define MIPIDSI_GEN_VCID_OFFSET          (0x0030)
+#define MIPIDSI_MODE_CFG_OFFSET          (0x0034)
+#define MIPIDSI_VID_MODE_CFG_OFFSET      (0x0038)
+#define MIPIDSI_VID_PKT_SIZE_OFFSET      (0x003c)
+#define MIPIDSI_VID_NUM_CHUNKS_OFFSET    (0x0040)
+#define MIPIDSI_VID_NULL_SIZE_OFFSET     (0x0044)
+#define MIPIDSI_VID_HSA_TIME_OFFSET      (0x0048)
+#define MIPIDSI_VID_HBP_TIME_OFFSET      (0x004c)
+#define MIPIDSI_VID_HLINE_TIME_OFFSET    (0x0050)
+#define MIPIDSI_VID_VSA_LINES_OFFSET     (0x0054)
+#define MIPIDSI_VID_VBP_LINES_OFFSET     (0x0058)
+#define MIPIDSI_VID_VFP_LINES_OFFSET     (0x005c)
+#define MIPIDSI_VID_VACTIVE_LINES_OFFSET (0x0060)
+#define MIPIDSI_EDPI_CMD_SIZE_OFFSET     (0x0064)
+#define MIPIDSI_CMD_MODE_CFG_OFFSET      (0x0068)
+#define MIPIDSI_GEN_HDR_OFFSET           (0x006c)
+#define MIPIDSI_GEN_PLD_DATA_OFFSET      (0x0070)
+#define MIPIDSI_CMD_PKT_STATUS_OFFSET    (0x0074)
+#define MIPIDSI_TO_CNT_CFG_OFFSET        (0x0078)
+#define MIPIDSI_BTA_TO_CNT_OFFSET        (0x008C)
+#define MIPIDSI_SDF_3D_OFFSET            (0x0090)
+#define MIPIDSI_LPCLK_CTRL_OFFSET        (0x0094)
+#define MIPIDSI_PHY_TMR_LPCLK_CFG_OFFSET (0x0098)
+#define MIPIDSI_PHY_TMR_CFG_OFFSET       (0x009c)
+#define MIPIDSI_PHY_RSTZ_OFFSET          (0x00a0)
+#define MIPIDSI_PHY_IF_CFG_OFFSET        (0x00a4)
+#define MIPIDSI_PHY_ULPS_CTRL_OFFSET     (0x00a8)
+#define MIPIDSI_PHY_TX_TRIGGERS_OFFSET   (0x00ac)
+#define MIPIDSI_PHY_STATUS_OFFSET        (0x00b0)
+#define MIPIDSI_PHY_TST_CTRL0_OFFSET     (0x00b4)
+#define MIPIDSI_PHY_TST_CTRL1_OFFSET     (0x00b8)
+#define MIPIDSI_PHY_TMR_RD_CFG_OFFSET    (0x00f4)
+
+enum XRES_DIV {
+	XRES_DIV_1 = 1,
+	XRES_DIV_2,
+};
+
+enum YRES_DIV {
+	YRES_DIV_1 = 1,
+	YRES_DIV_2,
+};
+
+enum PXL0_DIVCFG {
+	PXL0_DIVCFG_0 = 0,
+	PXL0_DIVCFG_1,
+};
+
+enum PXL0_DIV2_GT_EN {
+	PXL0_DIV2_GT_EN_CLOSE = 0,
+	PXL0_DIV2_GT_EN_OPEN,
+};
+
+enum PXL0_DIV4_GT_EN {
+	PXL0_DIV4_GT_EN_CLOSE = 0,
+	PXL0_DIV4_GT_EN_OPEN,
+};
+
+enum PXL0_DSI_GT_EN {
+	PXL0_DSI_GT_EN_0 = 0,
+	PXL0_DSI_GT_EN_1,
+};
+
+enum lcd_format {
+	LCD_RGB888 = 0,
+	LCD_RGB101010,
+	LCD_RGB565,
+};
+
+enum lcd_rgb_order {
+	LCD_RGB = 0,
+	LCD_BGR,
+};
+
+enum dpe_dfc_format {
+	DFC_PIXEL_FORMAT_RGB_565 = 0,
+	DFC_PIXEL_FORMAT_XRGB_4444,
+	DFC_PIXEL_FORMAT_ARGB_4444,
+	DFC_PIXEL_FORMAT_XRGB_5551,
+	DFC_PIXEL_FORMAT_ARGB_5551,
+	DFC_PIXEL_FORMAT_XRGB_8888,
+	DFC_PIXEL_FORMAT_ARGB_8888,
+	DFC_PIXEL_FORMAT_BGR_565,
+	DFC_PIXEL_FORMAT_XBGR_4444,
+	DFC_PIXEL_FORMAT_ABGR_4444,
+	DFC_PIXEL_FORMAT_XBGR_5551,
+	DFC_PIXEL_FORMAT_ABGR_5551,
+	DFC_PIXEL_FORMAT_XBGR_8888,
+	DFC_PIXEL_FORMAT_ABGR_8888,
+	DFC_PIXEL_FORMAT_YUV444,
+	DFC_PIXEL_FORMAT_YVU444,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_VYUY422,
+	DFC_PIXEL_FORMAT_UYVY422,
+};
+
+enum dpe_dma_format {
+	DMA_PIXEL_FORMAT_RGB_565 = 0,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_RESERVED0,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_AYUV_4444,
+};
+
+enum dpe_fb_format {
+	DPE_RGB_565 = 0,
+	DPE_RGBX_4444,
+	DPE_RGBA_4444,
+	DPE_RGBX_5551,
+	DPE_RGBA_5551,
+	DPE_RGBX_8888,
+	DPE_RGBA_8888,
+	DPE_BGR_565,
+	DPE_BGRX_4444,
+	DPE_BGRA_4444,
+	DPE_BGRX_5551,
+	DPE_BGRA_5551,
+	DPE_BGRX_8888,
+	DPE_BGRA_8888,
+	DPE_YUV_422_I,
+	/* YUV Semi-planar */
+	DPE_YCbCr_422_SP,
+	DPE_YCrCb_422_SP,
+	DPE_YCbCr_420_SP,
+	DPE_YCrCb_420_SP,
+	/* YUV Planar */
+	DPE_YCbCr_422_P,
+	DPE_YCrCb_422_P,
+	DPE_YCbCr_420_P,
+	DPE_YCrCb_420_P,
+	/* YUV Package */
+	DPE_YUYV_422_Pkg,
+	DPE_UYVY_422_Pkg,
+	DPE_YVYU_422_Pkg,
+	DPE_VYUY_422_Pkg,
+};
+
+#endif
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
old mode 100644
new mode 100755
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c
new file mode 100644
index 0000000..a15f8d4
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dpe.c
@@ -0,0 +1,1233 @@
+/*
+ * Hisilicon Hi6220 SoC ADE(Advanced Display Engine)'s crtc&plane driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	Xinliang Liu <z.liuxinliang@hisilicon.com>
+ *	Xinliang Liu <xinliang.liu@linaro.org>
+ *	Xinwei Kong <kong.kongxinwei@hisilicon.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/clk.h>
+#include <video/display_timing.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/of_address.h>
+#include <linux/of.h>
+#include <linux/of_irq.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_drv.h>
+#include <drm/drm_crtc.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_atomic.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_plane_helper.h>
+#include <drm/drm_gem_cma_helper.h>
+#include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_fb_cma_helper.h>
+#include <drm/drm_vblank.h>
+#include <drm/drm_fourcc.h>
+
+#include "kirin_drm_drv.h"
+#include "kirin_dpe_reg.h"
+
+#define DPE_WIDTH(width)   ((width) - 1)
+#define DPE_HEIGHT(height) ((height) - 1)
+
+#define GET_FLUX_REQ_IN(max_depth)  ((max_depth) * 50 / 100)
+#define GET_FLUX_REQ_OUT(max_depth)	((max_depth) * 90 / 100)
+
+#define DEFAULT_DPE_CORE_CLK_07V_RATE (400000000UL)
+#define DPE_MAX_PXL0_CLK_144M         (144000000UL)
+
+#define DPE_UNSUPPORT (800)
+#define RES_4K_PHONE  (3840 * 2160)
+
+enum dpe_ovl {
+	DPE_OVL0 = 0,
+	DPE_OVL_NUM
+};
+
+enum dpe_channel {
+	DPE_CH0 = 0, /* channel 1 for primary plane */
+	DPE_CH_NUM
+};
+
+struct dpe_hw_ctx {
+	void __iomem *base;
+	void __iomem *noc_base;
+
+	struct clk *dpe_axi_clk;
+	struct clk *dpe_pclk_clk;
+	struct clk *dpe_pri_clk;
+	struct clk *dpe_pxl0_clk;
+	struct clk *dpe_mmbuf_clk;
+
+	bool power_on;
+	int irq;
+
+	struct drm_crtc *crtc;
+
+	u32 hdisplay;
+	u32 vdisplay;
+};
+
+static const struct kirin_format dpe_formats[] = {
+	{ DRM_FORMAT_RGB565, DPE_RGB_565 },
+	{ DRM_FORMAT_BGR565, DPE_BGR_565 },
+	{ DRM_FORMAT_XRGB8888, DPE_RGBX_8888 },
+	{ DRM_FORMAT_XBGR8888, DPE_BGRX_8888 },
+	{ DRM_FORMAT_RGBA8888, DPE_RGBA_8888 },
+	{ DRM_FORMAT_BGRA8888, DPE_BGRA_8888 },
+	{ DRM_FORMAT_ARGB8888, DPE_BGRA_8888 },
+	{ DRM_FORMAT_ABGR8888, DPE_RGBA_8888 },
+};
+
+static const u32 dpe_channel_formats[] = {
+	DRM_FORMAT_RGB565,
+	DRM_FORMAT_BGR565,
+	DRM_FORMAT_XRGB8888,
+	DRM_FORMAT_XBGR8888,
+	DRM_FORMAT_RGBA8888,
+	DRM_FORMAT_BGRA8888,
+	DRM_FORMAT_ARGB8888,
+	DRM_FORMAT_ABGR8888,
+};
+
+static u32 dpe_pixel_dma_format_map[] = {
+	DMA_PIXEL_FORMAT_RGB_565,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_RGB_565,
+	DMA_PIXEL_FORMAT_XRGB_4444,
+	DMA_PIXEL_FORMAT_ARGB_4444,
+	DMA_PIXEL_FORMAT_XRGB_5551,
+	DMA_PIXEL_FORMAT_ARGB_5551,
+	DMA_PIXEL_FORMAT_XRGB_8888,
+	DMA_PIXEL_FORMAT_ARGB_8888,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_420_SP_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_YUV_422_P_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUV_420_P_HP,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+	DMA_PIXEL_FORMAT_YUYV_422_Pkg,
+};
+
+static u32 dpe_pixel_dfc_format_map[] = {
+	DFC_PIXEL_FORMAT_RGB_565,
+	DFC_PIXEL_FORMAT_XBGR_4444,
+	DFC_PIXEL_FORMAT_ABGR_4444,
+	DFC_PIXEL_FORMAT_XBGR_5551,
+	DFC_PIXEL_FORMAT_ABGR_5551,
+	DFC_PIXEL_FORMAT_XBGR_8888,
+	DFC_PIXEL_FORMAT_ABGR_8888,
+	DFC_PIXEL_FORMAT_BGR_565,
+	DFC_PIXEL_FORMAT_XRGB_4444,
+	DFC_PIXEL_FORMAT_ARGB_4444,
+	DFC_PIXEL_FORMAT_XRGB_5551,
+	DFC_PIXEL_FORMAT_ARGB_5551,
+	DFC_PIXEL_FORMAT_XRGB_8888,
+	DFC_PIXEL_FORMAT_ARGB_8888,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_YUYV422,
+	DFC_PIXEL_FORMAT_UYVY422,
+	DFC_PIXEL_FORMAT_YVYU422,
+	DFC_PIXEL_FORMAT_VYUY422,
+};
+
+static u32 mid_array[DPE_CH_NUM] = {0xb};
+static u32 aif_offset[DPE_CH_NUM] = {AIF0_CH0_OFFSET};
+static u32 mif_offset[DPE_CH_NUM] = {MIF_CH0_OFFSET};
+static u32 rdma_offset[DPE_CH_NUM] = {DPE_RCH_D0_DMA_OFFSET};
+static u32 rdfc_offset[DPE_CH_NUM] = {DPE_RCH_D0_DFC_OFFSET};
+static u32 dpe_smmu_chn_sid_num[DPE_CH_NUM] = {4};
+static u32 dpe_smmu_smrx_idx[DPE_CH_NUM] = {0};
+static u32 mctl_offset[DPE_OVL_NUM] = {DPE_MCTRL_CTL0_OFFSET};
+static u32 ovl_offset[DPE_OVL_NUM] = {DPE_OVL0_OFFSET};
+
+static u32 dpe_get_format(u32 pixel_format)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(dpe_formats); i++)
+		if (dpe_formats[i].pixel_format == pixel_format)
+			return dpe_formats[i].hw_format;
+
+	DRM_ERROR("Not found pixel format!!fourcc_format= %d\n",
+		  pixel_format);
+	return DPE_UNSUPPORT;
+}
+
+static void dpe_set_reg(char __iomem *addr, u32 val, u8 bw, u8 bs)
+{
+	u32 mask = (1UL << bw) - 1UL;
+	u32 tmp = 0;
+
+	tmp = readl(addr);
+	tmp &= ~(mask << bs);
+
+	writel(tmp | ((val & mask) << bs), addr);
+}
+
+/* dpe mctl utils */
+static void dpe_mctl_lock(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX, 0x1, 1, 0);
+}
+
+static void dpe_mctl_unlock(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX, 0x0, 1, 0);
+}
+
+static void dpe_mctl_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_EN, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_DBG, 0xB13A00, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_TOP, 0x2, 32, 0);
+}
+
+static void dpe_qos_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *noc_base = ctx->noc_base;
+
+	writel(0x2, noc_base + 0x000c);
+	writel(0x2, noc_base + 0x008c);
+	writel(0x2, noc_base + 0x010c);
+	writel(0x2, noc_base + 0x018c);
+}
+
+/* dpe ldi utils */
+static void dpe_enable_ldi(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+
+	dpe_set_reg(ldi_base + LDI_CTRL, 0x1, 1, 0);
+}
+
+
+/* interrupts utils */
+static void dpe_interrupt_mask(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 mask = ~0;
+
+	writel(mask, base + GLB_CPU_PDP_INT_MSK);
+	writel(mask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+	writel(mask, base + DPE_DPP_OFFSET + DPP_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_DPE_GLB_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_MCTL_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_WCH0_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_WCH1_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH0_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH1_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH2_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH3_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH4_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH5_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH6_INT_MSK);
+	writel(mask, base + DPE_DBG_OFFSET + DBG_RCH7_INT_MSK);
+}
+
+static void dpe_interrupt_unmask(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 unmask;
+
+	unmask = ~0;
+	unmask &= ~(BIT_DPP_INTS | BIT_ITF0_INTS | BIT_MMU_IRPT_NS);
+	writel(unmask, base + GLB_CPU_PDP_INT_MSK);
+
+	unmask = ~0;
+	unmask &= ~(BIT_VSYNC | BIT_LDI_UNFLOW);
+	writel(unmask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+}
+
+static void dpe_interrupt_clear(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 clear = ~0;
+
+	writel(clear, base + GLB_CPU_PDP_INTS);
+	writel(clear, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	writel(clear, base + DPE_DPP_OFFSET + DPP_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_MCTL_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_WCH0_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_WCH1_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH0_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH1_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH2_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH3_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH4_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH5_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH6_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_RCH7_INTS);
+	writel(clear, base + DPE_DBG_OFFSET + DBG_DPE_GLB_INTS);
+}
+
+static void dpe_irq_enable(struct dpe_hw_ctx *ctx)
+{
+	enable_irq(ctx->irq);
+}
+
+static void dpe_clk_enable(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+
+	writel(0x00000088, base + DPE_IFBC_OFFSET + IFBC_MEM_CTRL);
+	writel(0x00000888, base + DPE_DSC_OFFSET + DSC_MEM_CTRL);
+	writel(0x00000008, base + DPE_LDI0_OFFSET + LDI_MEM_CTRL);
+	writel(0x00000008, base + DPE_DBUF0_OFFSET + DBUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_DPP_DITHER_OFFSET + DITHER_MEM_CTRL);
+	writel(0x00000008, base + DPE_CMDLIST_OFFSET + CMD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG0_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_ARSR_OFFSET + ARSR2P_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_DMA_OFFSET + VPP_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_VG0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG1_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG1_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_VG1_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_VG2_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG2_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_VG2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_G0_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G0_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_G0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000088, base + DPE_RCH_G1_SCL_OFFSET + SCF_COEF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G1_SCL_OFFSET + SCF_LB_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_G1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_G1_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00008888, base + DPE_RCH_D0_DMA_OFFSET + AFBCD_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_RCH_D3_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH0_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000888, base + DPE_WCH0_DMA_OFFSET + AFBCE_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH0_DMA_OFFSET + ROT_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH1_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000888, base + DPE_WCH1_DMA_OFFSET + AFBCE_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH1_DMA_OFFSET + ROT_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH2_DMA_OFFSET + DMA_BUF_MEM_CTRL);
+	writel(0x00000008, base + DPE_WCH2_DMA_OFFSET + ROT_MEM_CTRL);
+}
+
+static int dpe_power_up(struct dpe_hw_ctx *ctx)
+{
+	int ret;
+
+	if (ctx->power_on == true)
+		return 0;
+
+	/*peri clk enable */
+	ret = clk_prepare_enable(ctx->dpe_pxl0_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pxl0_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_pri_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pri_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_pclk_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_pclk_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_axi_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_axi_clk (%d)\n", ret);
+		return ret;
+	}
+
+	ret = clk_prepare_enable(ctx->dpe_mmbuf_clk);
+	if (ret) {
+		DRM_ERROR("failed to enable dpe_mmbuf_clk (%d)\n", ret);
+		return ret;
+	}
+
+	dpe_clk_enable(ctx);
+	dpe_interrupt_mask(ctx);
+	dpe_interrupt_clear(ctx);
+	dpe_irq_enable(ctx);
+	dpe_interrupt_unmask(ctx);
+
+	ctx->power_on = true;
+	return 0;
+}
+
+static void dpe_dpp_init(struct dpe_hw_ctx *ctx, struct drm_display_mode *mode,
+					struct drm_display_mode *adj_mode)
+{
+	void __iomem *dpp_base = ctx->base + DPE_DPP_OFFSET;
+
+	writel((DPE_HEIGHT(mode->vdisplay) << 16) | DPE_WIDTH(mode->hdisplay),
+			dpp_base + DPP_IMG_SIZE_BEF_SR);
+	writel((DPE_HEIGHT(mode->vdisplay) << 16) | DPE_WIDTH(mode->hdisplay),
+			dpp_base + DPP_IMG_SIZE_AFT_SR);
+}
+
+static void dpe_ovl_init(struct dpe_hw_ctx *ctx, u32 xres, u32 yres)
+{
+	void __iomem *mctl_sys_base = ctx->base + DPE_MCTRL_SYS_OFFSET;
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+	void __iomem *ovl0_base = ctx->base + ovl_offset[DPE_OVL0];
+
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_SIZE,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_BG_COLOR, 0xFF000000, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_STARTPOS, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_ENDPOS,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_GCFG, 0x10001, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_DBUF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_OV, 1 << DPE_OVL0, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL, 0x8, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_OV0_FLUSH_EN, 0xd, 4, 0);
+}
+
+static void dpe_vesa_init(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+
+	dpe_set_reg(base + DPE_LDI0_OFFSET + LDI_VESA_CLK_SEL, 0, 1, 0);
+}
+
+static int dpe_mipi_ifbc_get_rect(struct drm_rect *rect)
+{
+	u32 xres_div = XRES_DIV_1;
+	u32 yres_div = YRES_DIV_1;
+
+	if ((rect->x2 % xres_div) > 0)
+		DRM_ERROR("xres(%d) is not division_h(%d) pixel aligned!\n",
+					rect->x2, xres_div);
+
+	if ((rect->y2 % yres_div) > 0)
+		DRM_ERROR("yres(%d) is not division_v(%d) pixel aligned!\n",
+					rect->y2, yres_div);
+
+	rect->x2 /= xres_div;
+	rect->y2 /= yres_div;
+
+	return 0;
+}
+
+static void dpe_init_ldi_pxl_div(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+
+	dpe_set_reg(ldi_base + LDI_PXL0_DIV2_GT_EN, PXL0_DIV2_GT_EN_CLOSE,
+				1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DIV4_GT_EN, PXL0_DIV4_GT_EN_CLOSE,
+				1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_GT_EN, 0x1, 1, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DSI_GT_EN, PXL0_DSI_GT_EN_1, 2, 0);
+	dpe_set_reg(ldi_base + LDI_PXL0_DIVXCFG, PXL0_DIVCFG_0, 3, 0);
+}
+
+static void dpe_dbuf_init(struct dpe_hw_ctx *ctx,
+			struct drm_display_mode *mode,
+			struct drm_display_mode *adj_mode)
+{
+	void __iomem *dbuf_base = ctx->base + DPE_DBUF0_OFFSET;
+
+	int sram_valid_num = 0;
+	int sram_max_mem_depth = 0;
+	int sram_min_support_depth = 0;
+
+	u32 thd_rqos_in = 0;
+	u32 thd_rqos_out = 0;
+	u32 thd_wqos_in = 0;
+	u32 thd_wqos_out = 0;
+	u32 thd_cg_in = 0;
+	u32 thd_cg_out = 0;
+	u32 thd_wr_wait = 0;
+	u32 thd_cg_hold = 0;
+	u32 thd_flux_req_befdfs_in = 0;
+	u32 thd_flux_req_befdfs_out = 0;
+	u32 thd_flux_req_aftdfs_in = 0;
+	u32 thd_flux_req_aftdfs_out = 0;
+	u32 thd_dfs_ok = 0;
+	u32 dfs_ok_mask = 0;
+	u32 thd_flux_req_sw_en = 1;
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+
+	int dfs_time_min = 0;
+	int depth = 0;
+
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+
+	dbuf_base = ctx->base + DPE_DBUF0_OFFSET;
+
+	if (mode->hdisplay * mode->vdisplay >= RES_4K_PHONE)
+		dfs_time_min = DFS_TIME_MIN_4K;
+	else
+		dfs_time_min = DFS_TIME_MIN;
+
+	depth = DBUF0_DEPTH;
+
+	thd_cg_out = (DFS_TIME * adj_mode->clock * 1000UL * mode->hdisplay) /
+		(((hsw + hbp + hfp) + mode->hdisplay) * 6 * 1000000UL);
+
+	sram_valid_num = thd_cg_out / depth;
+	thd_cg_in = (sram_valid_num + 1) * depth - 1;
+	sram_max_mem_depth = (sram_valid_num + 1) * depth;
+
+	thd_rqos_in = thd_cg_out * 85 / 100;
+	thd_rqos_out = thd_cg_out;
+	thd_flux_req_befdfs_in = GET_FLUX_REQ_IN(sram_max_mem_depth);
+	thd_flux_req_befdfs_out = GET_FLUX_REQ_OUT(sram_max_mem_depth);
+
+	sram_min_support_depth = dfs_time_min * mode->hdisplay /
+			(1000000 / 60 / (mode->vdisplay + vbp + vfp + vsw)
+			* (DBUF_WIDTH_BIT / 3 / BITS_PER_BYTE));
+
+	thd_flux_req_aftdfs_in = (sram_max_mem_depth - sram_min_support_depth);
+	thd_flux_req_aftdfs_in = thd_flux_req_aftdfs_in / 3;
+	thd_flux_req_aftdfs_out = 2 * thd_flux_req_aftdfs_in;
+	thd_dfs_ok = thd_flux_req_befdfs_in;
+
+	writel(mode->hdisplay * mode->vdisplay, dbuf_base + DBUF_FRM_SIZE);
+	writel(DPE_WIDTH(mode->hdisplay), dbuf_base + DBUF_FRM_HSIZE);
+	writel(sram_valid_num, dbuf_base + DBUF_SRAM_VALID_NUM);
+
+	writel((thd_rqos_out << 16) | thd_rqos_in, dbuf_base + DBUF_THD_RQOS);
+	writel((thd_wqos_out << 16) | thd_wqos_in, dbuf_base + DBUF_THD_WQOS);
+	writel((thd_cg_out << 16) | thd_cg_in, dbuf_base + DBUF_THD_CG);
+	writel((thd_cg_hold << 16) | thd_wr_wait, dbuf_base + DBUF_THD_OTHER);
+	writel((thd_flux_req_befdfs_out << 16) | thd_flux_req_befdfs_in,
+			dbuf_base + DBUF_THD_FLUX_REQ_BEF);
+	writel((thd_flux_req_aftdfs_out << 16) | thd_flux_req_aftdfs_in,
+			dbuf_base + DBUF_THD_FLUX_REQ_AFT);
+	writel(thd_dfs_ok, dbuf_base + DBUF_THD_DFS_OK);
+	writel((dfs_ok_mask << 1) | thd_flux_req_sw_en,
+			dbuf_base + DBUF_FLUX_REQ_CTRL);
+
+	writel(0x1, dbuf_base + DBUF_DFS_LP_CTRL);
+}
+
+static void dpe_ldi_init(struct dpe_hw_ctx *ctx, struct drm_display_mode *mode,
+					struct drm_display_mode *adj_mode)
+{
+	void __iomem *ldi_base = ctx->base + DPE_LDI0_OFFSET;
+	struct drm_rect rect = {0, 0, 0, 0};
+	u32 hfp, hbp, hsw, vfp, vbp, vsw;
+	u32 vsync_plr = 0;
+	u32 hsync_plr = 0;
+	u32 pixelclk_plr = 0;
+	u32 data_en_plr = 0;
+
+	hfp = mode->hsync_start - mode->hdisplay;
+	hbp = mode->htotal - mode->hsync_end;
+	hsw = mode->hsync_end - mode->hsync_start;
+	vfp = mode->vsync_start - mode->vdisplay;
+	vbp = mode->vtotal - mode->vsync_end;
+	vsw = mode->vsync_end - mode->vsync_start;
+
+	rect.x1 = 0;
+	rect.y1 = 0;
+	rect.x2 = mode->hdisplay;
+	rect.y2 = mode->vdisplay;
+	dpe_mipi_ifbc_get_rect(&rect);
+	dpe_init_ldi_pxl_div(ctx);
+
+	writel(hfp | ((hbp + DPE_WIDTH(hsw)) << 16),
+		   ldi_base + LDI_DPI0_HRZ_CTRL0);
+	writel(0, ldi_base + LDI_DPI0_HRZ_CTRL1);
+	writel(DPE_WIDTH(rect.x2), ldi_base + LDI_DPI0_HRZ_CTRL2);
+	writel(vfp | (vbp << 16), ldi_base + LDI_VRT_CTRL0);
+	writel(DPE_HEIGHT(vsw), ldi_base + LDI_VRT_CTRL1);
+	writel(DPE_HEIGHT(rect.y2), ldi_base + LDI_VRT_CTRL2);
+	writel(vsync_plr | (hsync_plr << 1) | (pixelclk_plr << 2)
+				| (data_en_plr << 3), ldi_base + LDI_PLR_CTRL);
+
+	dpe_set_reg(ldi_base + LDI_CTRL, LCD_RGB888, 2, 3);
+	dpe_set_reg(ldi_base + LDI_CTRL, LCD_RGB, 1, 13);
+
+	writel(vfp, ldi_base + LDI_VINACT_MSK_LEN);
+	writel(0x1, ldi_base + LDI_CMD_EVENT_SEL);
+
+	dpe_set_reg(ldi_base + LDI_DSI_CMD_MOD_CTRL, 0x1, 1, 1);
+	dpe_set_reg(ldi_base + LDI_WORK_MODE, 0x1, 1, 0);
+	dpe_set_reg(ldi_base + LDI_CTRL, 0x0, 1, 0);
+}
+
+static void dpe_init(struct dpe_hw_ctx *ctx,
+				struct drm_display_mode *mode,
+				struct drm_display_mode *adj_mode)
+{
+	dpe_dbuf_init(ctx, mode, adj_mode);
+	dpe_dpp_init(ctx, mode, adj_mode);
+	dpe_vesa_init(ctx);
+	dpe_ldi_init(ctx, mode, adj_mode);
+	dpe_qos_init(ctx);
+	dpe_mctl_init(ctx);
+
+	dpe_mctl_lock(ctx);
+	dpe_ovl_init(ctx, mode->hdisplay, mode->vdisplay);
+	dpe_mctl_unlock(ctx);
+
+//	dpe_enable_ldi(ctx);
+
+	ctx->hdisplay = mode->hdisplay;
+	ctx->vdisplay = mode->vdisplay;
+	mdelay(60);
+}
+
+static void dpe_ldi_set_mode(struct dpe_hw_ctx *ctx,
+				struct drm_display_mode *mode,
+				struct drm_display_mode *adj_mode)
+{
+	int ret;
+	u32 clk_Hz;
+
+	switch (mode->clock) {
+	case 148500:
+		clk_Hz = 144000 * 1000UL;
+		break;
+	case 83496:
+		clk_Hz = 80000 * 1000UL;
+		break;
+	case 74440:
+		clk_Hz = 72000 * 1000UL;
+		break;
+	case 74250:
+		clk_Hz = 72000 * 1000UL;
+		break;
+	default:
+		clk_Hz = mode->clock * 1000UL;
+	}
+
+	ret = clk_set_rate(ctx->dpe_pxl0_clk, clk_Hz);
+	if (ret)
+		DRM_ERROR("failed to set pixel clk %dHz (%d)\n",
+				clk_Hz, ret);
+
+	adj_mode->clock = clk_get_rate(ctx->dpe_pxl0_clk) / 1000;
+}
+
+static int dpe_enable_vblank(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	dpe_power_up(ctx);
+
+	return 0;
+}
+
+static void dpe_disable_vblank(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	if (!ctx->power_on) {
+		DRM_ERROR("power is down! vblank disable fail\n");
+		return;
+	}
+}
+
+static void dpe_crtc_atomic_enable(struct drm_crtc *crtc,
+				   struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+	int ret;
+
+	if (kcrtc->enable == true)
+		return;
+
+	ret = dpe_power_up(ctx);
+	if (ret)
+		return;
+
+	kcrtc->enable = true;
+	drm_crtc_vblank_on(crtc);
+}
+
+static void dpe_crtc_atomic_disable(struct drm_crtc *crtc,
+				    struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+
+	if (kcrtc->enable == false)
+		return;
+
+	drm_crtc_vblank_off(crtc);
+	kcrtc->enable = false;
+}
+
+static void dpe_crtc_mode_set_nofb(struct drm_crtc *crtc)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+	struct drm_display_mode *mode = &crtc->state->mode;
+	struct drm_display_mode *adj_mode = &crtc->state->adjusted_mode;
+
+	dpe_power_up(ctx);
+	dpe_ldi_set_mode(ctx, mode, adj_mode);
+	dpe_init(ctx, mode, adj_mode);
+}
+
+static void dpe_crtc_atomic_begin(struct drm_crtc *crtc,
+				  struct drm_crtc_state *old_state)
+{
+	struct kirin_crtc *kcrtc = to_kirin_crtc(crtc);
+	struct dpe_hw_ctx *ctx = kcrtc->hw_ctx;
+
+	dpe_power_up(ctx);
+}
+
+static void dpe_crtc_atomic_flush(struct drm_crtc *crtc,
+				  struct drm_crtc_state *old_state)
+
+{
+	struct drm_pending_vblank_event *event = crtc->state->event;
+
+	if (event) {
+		crtc->state->event = NULL;
+
+		spin_lock_irq(&crtc->dev->event_lock);
+		if (drm_crtc_vblank_get(crtc) == 0)
+			drm_crtc_arm_vblank_event(crtc, event);
+		else
+			drm_crtc_send_vblank_event(crtc, event);
+		spin_unlock_irq(&crtc->dev->event_lock);
+	}
+}
+
+const struct drm_crtc_helper_funcs dpe_crtc_helper_funcs = {
+	.atomic_enable	= dpe_crtc_atomic_enable,
+	.atomic_disable	= dpe_crtc_atomic_disable,
+	.mode_set_nofb	= dpe_crtc_mode_set_nofb,
+	.atomic_begin	= dpe_crtc_atomic_begin,
+	.atomic_flush	= dpe_crtc_atomic_flush,
+};
+
+const struct drm_crtc_funcs dpe_crtc_funcs = {
+	.destroy = drm_crtc_cleanup,
+	.set_config	= drm_atomic_helper_set_config,
+	.page_flip = drm_atomic_helper_page_flip,
+	.reset = drm_atomic_helper_crtc_reset,
+	.atomic_duplicate_state	= drm_atomic_helper_crtc_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
+	.enable_vblank = dpe_enable_vblank,
+	.disable_vblank	= dpe_disable_vblank,
+};
+
+static void dpe_unflow_handler(struct dpe_hw_ctx *ctx)
+{
+	void __iomem *base = ctx->base;
+	u32 tmp = 0;
+
+	tmp = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+	tmp &= ~BIT_LDI_UNFLOW;
+
+	writel(tmp, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+}
+
+static void dpe_mctl_ov_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mctl_base = ctx->base + mctl_offset[DPE_OVL0];
+
+	dpe_set_reg(mctl_base + MCTL_CTL_EN, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_TOP, 0x2, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_DBG, 0xB13A00, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_RCH0 + ch * 4, 0x1, 32, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_ITF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_DBUF, 0x1, 2, 0);
+	dpe_set_reg(mctl_base + MCTL_CTL_MUTEX_OV, 1 << DPE_OVL0, 4, 0);
+}
+
+static void dpe_mctl_sys_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mctl_sys_base = ctx->base + DPE_MCTRL_SYS_OFFSET;
+
+	dpe_set_reg(mctl_sys_base + MCTL_RCH0_OV_OEN + ch * 4,
+				(1 << 1) | 0x100, 32, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL, 0x8, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH_OV0_SEL,
+				ch, 4, (DPE_OVL0 + 1) * 4);
+	dpe_set_reg(mctl_sys_base + MCTL_OV0_FLUSH_EN, 0xd, 4, 0);
+	dpe_set_reg(mctl_sys_base + MCTL_RCH0_FLUSH_EN + ch * 4, 0x1, 32, 0);
+}
+
+static void dpe_ovl_config(struct dpe_hw_ctx *ctx, const struct drm_rect *rect,
+						   u32 xres, u32 yres)
+{
+	void __iomem *ovl0_base = ctx->base + ovl_offset[DPE_OVL0];
+
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(ovl0_base + OVL6_REG_DEFAULT, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_SIZE,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_BG_COLOR, 0xFF000000, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_STARTPOS, 0x0, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_DST_ENDPOS,
+				(xres - 1) | ((yres - 1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_GCFG, 0x10001, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_POS,
+				(rect->x1) | ((rect->y1) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_SIZE,
+				(rect->x2) | ((rect->y2) << 16), 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_ALPHA, 0x00ff40ff, 32, 0);
+	dpe_set_reg(ovl0_base + OVL_LAYER0_CFG, 0x1, 1, 0);
+}
+
+static void dpe_rdma_config(struct dpe_hw_ctx *ctx,
+				const struct drm_rect *rect,
+				u32 display_addr, u32 hal_format,
+				u32 bpp, int ch)
+{
+	void __iomem *rdma_base = ctx->base + rdma_offset[ch];
+
+	u32 aligned_pixel = 0;
+	u32 rdma_oft_x0, rdma_oft_y0, rdma_oft_x1, rdma_oft_y1;
+	u32 rdma_stride, rdma_format;
+	u32 stretch_size_vrt = 0;
+	u32 h_display = 0;
+
+	aligned_pixel = DMA_ALIGN_BYTES / bpp;
+	rdma_oft_x0 = rect->x1 / aligned_pixel;
+	rdma_oft_y0 = rect->y1;
+	rdma_oft_x1 = rect->x2 / aligned_pixel;
+	rdma_oft_y1 = rect->y2;
+
+	rdma_format = dpe_pixel_dma_format_map[hal_format];
+	stretch_size_vrt = rdma_oft_y1 - rdma_oft_y0;
+
+	h_display = (rect->x2 - rect->x1) + 1;
+	rdma_stride = (h_display * bpp) / DMA_ALIGN_BYTES;
+
+
+	dpe_set_reg(rdma_base + DMA_CH_REG_DEFAULT, 0x1, 32, 0);
+	dpe_set_reg(rdma_base + DMA_CH_REG_DEFAULT, 0x0, 32, 0);
+
+	dpe_set_reg(rdma_base + DMA_OFT_X0, rdma_oft_x0, 12, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_Y0, rdma_oft_y0, 16, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_X1, rdma_oft_x1, 12, 0);
+	dpe_set_reg(rdma_base + DMA_OFT_Y1, rdma_oft_y1, 16, 0);
+	dpe_set_reg(rdma_base + DMA_CTRL, rdma_format, 5, 3);
+	dpe_set_reg(rdma_base + DMA_CTRL, 0x0, 1, 8);
+	dpe_set_reg(rdma_base + DMA_STRETCH_SIZE_VRT, stretch_size_vrt, 32, 0);
+	dpe_set_reg(rdma_base + DMA_DATA_ADDR0, display_addr, 32, 0);
+	dpe_set_reg(rdma_base + DMA_STRIDE0, rdma_stride, 13, 0);
+	dpe_set_reg(rdma_base + DMA_CH_CTL, 0x1, 1, 0);
+}
+
+static void dpe_rdfc_config(struct dpe_hw_ctx *ctx,
+				const struct drm_rect *rect,
+				u32 hal_format, u32 bpp, int ch)
+{
+	void __iomem *rdfc_base = ctx->base + rdfc_offset[ch];
+
+	u32 dfc_pix_in_num = 0;
+	u32 size_hrz = 0;
+	u32 size_vrt = 0;
+	u32 dfc_fmt = 0;
+
+	dfc_pix_in_num = (bpp <= 2) ? 0x1 : 0x0;
+	size_hrz = rect->x2 - rect->x1;
+	size_vrt = rect->y2 - rect->y1;
+
+	dfc_fmt = dpe_pixel_dfc_format_map[hal_format];
+
+	dpe_set_reg(rdfc_base + DFC_DISP_SIZE,
+				(size_vrt | (size_hrz << 16)), 29, 0);
+	dpe_set_reg(rdfc_base + DFC_PIX_IN_NUM, dfc_pix_in_num, 1, 0);
+	dpe_set_reg(rdfc_base + DFC_DISP_FMT, dfc_fmt, 5, 1);
+	dpe_set_reg(rdfc_base + DFC_CTL_CLIP_EN, 0x1, 1, 0);
+	dpe_set_reg(rdfc_base + DFC_ICG_MODULE, 0x1, 1, 0);
+}
+
+static void dpe_aif_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *aif_ch_base = ctx->base + aif_offset[ch];
+
+	dpe_set_reg(aif_ch_base, 0x0, 1, 0);
+	dpe_set_reg(aif_ch_base, mid_array[ch], 4, 4);
+}
+
+static void dpe_mif_config(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *mif_ch_base = ctx->base + mif_offset[ch];
+
+	dpe_set_reg(mif_ch_base + MIF_CTRL1, 0x1, 1, 5);
+}
+
+static void dpe_smmu_config_off(struct dpe_hw_ctx *ctx, u32 ch)
+{
+	void __iomem *smmu_base = ctx->base + DPE_SMMU_OFFSET;
+	int i, index;
+
+	for (i = 0; i < dpe_smmu_chn_sid_num[ch]; i++) {
+		index = dpe_smmu_smrx_idx[ch] + i;
+		dpe_set_reg(smmu_base + SMMU_SMRx_NS + index * 0x4, 1, 32, 0);
+	}
+}
+
+static void dpe_update_channel(struct kirin_plane *kplane,
+			       struct drm_framebuffer *fb, int crtc_x,
+			       int crtc_y, unsigned int crtc_w,
+			       unsigned int crtc_h, u32 src_x,
+			       u32 src_y, u32 src_w, u32 src_h)
+{
+	struct dpe_hw_ctx *ctx = kplane->hw_ctx;
+	struct drm_gem_cma_object *obj = drm_fb_cma_get_gem_obj(fb, 0);
+	struct drm_rect rect;
+	u32 bpp;
+	u32 stride;
+	u32 display_addr;
+	u32 hal_fmt;
+	u32 ch = DPE_CH0;
+
+	bpp = fb->format->cpp[0];
+	stride = fb->pitches[0];
+
+	display_addr = (u32)obj->paddr + src_y * stride;
+
+	rect.x1 = 0;
+	rect.x2 = src_w - 1;
+	rect.y1 = 0;
+	rect.y2 = src_h - 1;
+	hal_fmt = dpe_get_format(fb->format->format);
+
+	dpe_mctl_lock(ctx);
+	dpe_aif_config(ctx, ch);
+	dpe_mif_config(ctx, ch);
+	dpe_smmu_config_off(ctx, ch);
+
+	dpe_rdma_config(ctx, &rect, display_addr, hal_fmt, bpp, ch);
+	dpe_rdfc_config(ctx, &rect, hal_fmt, bpp, ch);
+	dpe_ovl_config(ctx, &rect, ctx->hdisplay, ctx->vdisplay);
+
+	dpe_mctl_ov_config(ctx, ch);
+	dpe_mctl_sys_config(ctx, ch);
+	dpe_mctl_unlock(ctx);
+	dpe_unflow_handler(ctx);
+
+	dpe_enable_ldi(ctx);
+}
+
+static void dpe_plane_atomic_update(struct drm_plane *plane,
+				    struct drm_plane_state *old_state)
+{
+	struct drm_plane_state *state = plane->state;
+	struct kirin_plane *kplane = to_kirin_plane(plane);
+
+	if (!state->fb) {
+		state->visible = false;
+		return;
+	}
+
+	dpe_update_channel(kplane, state->fb, state->crtc_x, state->crtc_y,
+			   state->crtc_w, state->crtc_h,
+			   state->src_x >> 16, state->src_y >> 16,
+			   state->src_w >> 16, state->src_h >> 16);
+}
+
+static int dpe_plane_atomic_check(struct drm_plane *plane,
+				  struct drm_plane_state *state)
+{
+	struct drm_framebuffer *fb = state->fb;
+	struct drm_crtc *crtc = state->crtc;
+	struct drm_crtc_state *crtc_state;
+	u32 src_x = state->src_x >> 16;
+	u32 src_y = state->src_y >> 16;
+	u32 src_w = state->src_w >> 16;
+	u32 src_h = state->src_h >> 16;
+	int crtc_x = state->crtc_x;
+	int crtc_y = state->crtc_y;
+	u32 crtc_w = state->crtc_w;
+	u32 crtc_h = state->crtc_h;
+	u32 fmt;
+
+	if (!crtc || !fb)
+		return 0;
+
+	fmt = dpe_get_format(fb->format->format);
+	if (fmt == DPE_UNSUPPORT)
+		return -EINVAL;
+
+	crtc_state = drm_atomic_get_crtc_state(state->state, crtc);
+	if (IS_ERR(crtc_state))
+		return PTR_ERR(crtc_state);
+
+	if (src_w != crtc_w || src_h != crtc_h) {
+		DRM_ERROR("Scale not support!!!\n");
+		return -EINVAL;
+	}
+
+	if (src_x + src_w > fb->width ||
+	    src_y + src_h > fb->height)
+		return -EINVAL;
+
+	if (crtc_x < 0 || crtc_y < 0)
+		return -EINVAL;
+
+	if (crtc_x + crtc_w > crtc_state->adjusted_mode.hdisplay ||
+	    crtc_y + crtc_h > crtc_state->adjusted_mode.vdisplay)
+		return -EINVAL;
+
+	return 0;
+}
+
+const struct drm_plane_helper_funcs dpe_plane_helper_funcs = {
+	.atomic_check = dpe_plane_atomic_check,
+	.atomic_update = dpe_plane_atomic_update,
+};
+
+const struct drm_plane_funcs dpe_plane_funcs = {
+	.update_plane = drm_atomic_helper_update_plane,
+	.disable_plane = drm_atomic_helper_disable_plane,
+	.destroy = drm_plane_cleanup,
+	.reset = drm_atomic_helper_plane_reset,
+	.atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
+};
+
+static irqreturn_t dpe_irq_handler(int irq, void *data)
+{
+	struct dpe_hw_ctx *ctx = data;
+	struct drm_crtc *crtc = ctx->crtc;
+	void __iomem *base = ctx->base;
+
+	u32 isr_s1 = 0;
+	u32 isr_s2 = 0;
+	u32 isr_s2_dpp = 0;
+	u32 isr_s2_smmu = 0;
+	u32 mask = 0;
+
+	isr_s1 = readl(base + GLB_CPU_PDP_INTS);
+	isr_s2 = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	isr_s2_dpp = readl(base + DPE_DPP_OFFSET + DPP_INTS);
+	isr_s2_smmu = readl(base + DPE_SMMU_OFFSET + SMMU_INTSTAT_NS);
+
+	writel(isr_s2_smmu, base + DPE_SMMU_OFFSET + SMMU_INTCLR_NS);
+	writel(isr_s2_dpp, base + DPE_DPP_OFFSET + DPP_INTS);
+	writel(isr_s2, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INTS);
+	writel(isr_s1, base + GLB_CPU_PDP_INTS);
+
+	isr_s1 &= ~(readl(base + GLB_CPU_PDP_INT_MSK));
+	isr_s2 &= ~(readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK));
+	isr_s2_dpp &= ~(readl(base + DPE_DPP_OFFSET + DPP_INT_MSK));
+
+	if (isr_s2 & BIT_VSYNC)
+		drm_crtc_handle_vblank(crtc);
+
+	if (isr_s2 & BIT_LDI_UNFLOW) {
+		mask = readl(base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+		mask |= BIT_LDI_UNFLOW;
+		writel(mask, base + DPE_LDI0_OFFSET + LDI_CPU_ITF_INT_MSK);
+
+		DRM_ERROR("ldi underflow!\n");
+	}
+
+	return IRQ_HANDLED;
+}
+
+static void *dpe_hw_ctx_alloc(struct platform_device *pdev,
+							  struct drm_crtc *crtc)
+{
+	struct dpe_hw_ctx *ctx = NULL;
+	struct device *dev = &pdev->dev;
+	struct device_node *np = pdev->dev.of_node;
+	int ret = 0;
+
+	ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
+	if (!ctx) {
+		DRM_ERROR("failed to alloc ade_hw_ctx\n");
+		return ERR_PTR(-ENOMEM);
+	}
+
+	ctx->base = of_iomap(np, 0);
+	if (!(ctx->base)) {
+		DRM_ERROR("failed to get ade base resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	ctx->noc_base = of_iomap(np, 4);
+	if (!(ctx->noc_base)) {
+		DRM_ERROR("failed to get noc_base  resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	ctx->irq = irq_of_parse_and_map(np, 0);
+	if (ctx->irq <= 0) {
+		DRM_ERROR("failed to get irq_pdp resource.\n");
+		return ERR_PTR(-ENXIO);
+	}
+
+	DRM_INFO("dpe irq = %d.", ctx->irq);
+
+	ctx->dpe_mmbuf_clk = devm_clk_get(dev, "clk_dss_axi_mm");
+	if (!ctx->dpe_mmbuf_clk) {
+		DRM_ERROR("failed to parse dpe_mmbuf_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_axi_clk = devm_clk_get(dev, "aclk_dss");
+	if (!ctx->dpe_axi_clk) {
+		DRM_ERROR("failed to parse dpe_axi_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_pclk_clk = devm_clk_get(dev, "pclk_dss");
+	if (!ctx->dpe_pclk_clk) {
+		DRM_ERROR("failed to parse dpe_pclk_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ctx->dpe_pri_clk = devm_clk_get(dev, "clk_edc0");
+	if (!ctx->dpe_pri_clk) {
+		DRM_ERROR("failed to parse dpe_pri_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ret = clk_set_rate(ctx->dpe_pri_clk, DEFAULT_DPE_CORE_CLK_07V_RATE);
+	if (ret < 0) {
+		DRM_ERROR("dpe_pri_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DEFAULT_DPE_CORE_CLK_07V_RATE, ret);
+		return ERR_PTR(-EINVAL);
+	}
+
+	ctx->dpe_pxl0_clk = devm_clk_get(dev, "clk_ldi0");
+	if (!ctx->dpe_pxl0_clk) {
+		DRM_ERROR("failed to parse dpe_pxl0_clk\n");
+		return ERR_PTR(-ENODEV);
+	}
+
+	ret = clk_set_rate(ctx->dpe_pxl0_clk, DPE_MAX_PXL0_CLK_144M);
+	if (ret < 0) {
+		DRM_ERROR("dpe_pxl0_clk clk_set_rate(%lu) failed, error=%d!\n",
+			DPE_MAX_PXL0_CLK_144M, ret);
+		return ERR_PTR(-EINVAL);
+	}
+
+	ctx->crtc = crtc;
+	ret = devm_request_irq(dev, ctx->irq, dpe_irq_handler,
+			       IRQF_SHARED, dev->driver->name, ctx);
+	if (ret)
+		return ERR_PTR(-EIO);
+
+	disable_irq(ctx->irq);
+
+	return ctx;
+}
+
+static void dpe_hw_ctx_cleanup(void *hw_ctx)
+{
+}
+
+extern void dsi_set_output_client(struct drm_device *dev);
+static void kirin_fbdev_output_poll_changed(struct drm_device *dev)
+{
+	dsi_set_output_client(dev);
+}
+
+static const struct drm_mode_config_funcs dpe_mode_config_funcs = {
+	.fb_create = drm_gem_fb_create,
+	.output_poll_changed = kirin_fbdev_output_poll_changed,
+	.atomic_check = drm_atomic_helper_check,
+	.atomic_commit = drm_atomic_helper_commit,
+};
+
+DEFINE_DRM_GEM_CMA_FOPS(kirin_drm_fops);
+static struct drm_driver dpe_driver = {
+	.driver_features	= DRIVER_GEM | DRIVER_MODESET |
+				  DRIVER_ATOMIC | DRIVER_RENDER,
+
+	.date			= "20170309",
+	.fops				= &kirin_drm_fops,
+	.gem_free_object_unlocked	= drm_gem_cma_free_object,
+	.gem_vm_ops		= &drm_gem_cma_vm_ops,
+	.dumb_create		= drm_gem_cma_dumb_create_internal,
+	.prime_handle_to_fd	= drm_gem_prime_handle_to_fd,
+	.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_get_sg_table = drm_gem_cma_prime_get_sg_table,
+	.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table,
+	.gem_prime_vmap		= drm_gem_cma_prime_vmap,
+	.gem_prime_vunmap	= drm_gem_cma_prime_vunmap,
+	.gem_prime_mmap		= drm_gem_cma_prime_mmap,
+
+	.name			= "kirin",
+	.desc			= "Hisilicon Kirin SoCs' DRM Driver",
+	.major			= 1,
+	.minor			= 0,
+};
+
+const struct kirin_drm_data dpe_driver_data = {
+	.register_connects = true,
+	.num_planes = DPE_CH_NUM,
+	.prim_plane = DPE_CH0,
+
+	.channel_formats = dpe_channel_formats,
+	.channel_formats_cnt = ARRAY_SIZE(dpe_channel_formats),
+	.config_max_width = 4096,
+	.config_max_height = 4096,
+
+	.driver = &dpe_driver,
+
+	.crtc_helper_funcs = &dpe_crtc_helper_funcs,
+	.crtc_funcs = &dpe_crtc_funcs,
+	.plane_helper_funcs = &dpe_plane_helper_funcs,
+	.plane_funcs = &dpe_plane_funcs,
+	.mode_config_funcs = &dpe_mode_config_funcs,
+
+	.alloc_hw_ctx = dpe_hw_ctx_alloc,
+	.cleanup_hw_ctx = dpe_hw_ctx_cleanup,
+};
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index d3145ae..ace4d30 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -336,9 +336,16 @@
 }
 
 static const struct of_device_id kirin_drm_dt_ids[] = {
+#ifdef CONFIG_DRM_HISI_KIRIN620
 	{ .compatible = "hisilicon,hi6220-ade",
 	  .data = &ade_driver_data,
 	},
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN960
+	{ .compatible = "hisilicon,hi3660-dpe",
+	  .data = &dpe_driver_data,
+	},
+#endif
 	{ /* end node */ },
 };
 MODULE_DEVICE_TABLE(of, kirin_drm_dt_ids);
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
old mode 100644
new mode 100755
index 4d5c05a..ad4aaf3
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.h
@@ -53,6 +53,11 @@
 	void (*cleanup_hw_ctx)(void *hw_ctx);
 };
 
+#ifdef CONFIG_DRM_HISI_KIRIN620
 extern struct kirin_drm_data ade_driver_data;
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN960
+extern const struct kirin_drm_data dpe_driver_data;
+#endif
 
 #endif /* __KIRIN_DRM_DRV_H__ */
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c
new file mode 100644
index 0000000..2aa5766
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.c
@@ -0,0 +1,444 @@
+/*
+ * DesignWare MIPI DSI Host Controller v1.02 driver
+ *
+ * Copyright (c) 2016 Linaro Limited.
+ * Copyright (c) 2014-2016 Hisilicon Limited.
+ *
+ * Author:
+ *	<shizongxuan@huawei.com>
+ *	<zhangxiubin@huawei.com>
+ *	<lvda3@hisilicon.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/clk.h>
+#include <linux/component.h>
+#include <linux/delay.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_device.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_of.h>
+#include <drm/drm_print.h>
+#include <drm/drm_probe_helper.h>
+#include <drm/drm_sysfs.h>
+
+#include "kirin_drm_dsi.h"
+#include "dw_dsi_reg.h"
+
+static struct kirin_dsi_ops *hisi_dsi_ops;
+
+void dsi_set_output_client(struct drm_device *dev)
+{
+	enum dsi_output_client client;
+	struct drm_connector *connector;
+	struct drm_encoder *encoder;
+	struct drm_connector_list_iter conn_iter;
+	struct dw_dsi *dsi;
+
+	mutex_lock(&dev->mode_config.mutex);
+
+	/* find dsi encoder */
+	drm_for_each_encoder(encoder, dev)
+		if (encoder->encoder_type == DRM_MODE_ENCODER_DSI)
+			break;
+	dsi = encoder_to_dsi(encoder);
+
+	/* find HDMI connector */
+	drm_connector_list_iter_begin(dev, &conn_iter);
+	drm_for_each_connector_iter(connector, &conn_iter)
+		if (connector->connector_type == DRM_MODE_CONNECTOR_HDMIA)
+			break;
+	drm_connector_list_iter_end(&conn_iter);
+
+	/*
+	 * set the proper dsi output client
+	 */
+	client = connector->status == connector_status_connected ?
+		OUT_HDMI : OUT_PANEL;
+	if (client != dsi->cur_client) {
+		/* associate bridge and dsi encoder */
+		if (client == OUT_HDMI)
+			encoder->bridge = dsi->bridge;
+		else
+			encoder->bridge = NULL;
+		/*
+		 * set the switch ic to select the HDMI or MIPI_DSI
+		*/
+		if (KIRIN960_DSI == hisi_dsi_ops->version) {
+			gpiod_set_value_cansleep(dsi->gpio_mux, client);
+		}else if (KIRIN620_DSI == hisi_dsi_ops->version) {
+			/*the gpio0_1*/
+		}
+		dsi->cur_client = client;
+		/* let the userspace know panel connector status has changed */
+		drm_sysfs_hotplug_event(dev);
+		DRM_INFO("client change to %s\n", client == OUT_HDMI ?
+				 "HDMI" : "panel");
+	}
+
+	mutex_unlock(&dev->mode_config.mutex);
+}
+EXPORT_SYMBOL_GPL(dsi_set_output_client);
+/************************for the panel attach to dsi*****************************/
+static int dsi_connector_get_modes(struct drm_connector *connector)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+
+	return drm_panel_get_modes(dsi->panel);
+}
+
+static enum drm_mode_status
+dsi_connector_mode_valid(struct drm_connector *connector,
+			 struct drm_display_mode *mode)
+{
+	enum drm_mode_status mode_status = MODE_OK;
+
+	return mode_status;
+}
+
+static struct drm_encoder *
+dsi_connector_best_encoder(struct drm_connector *connector)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+
+	return &dsi->encoder;
+}
+
+static struct drm_connector_helper_funcs dsi_connector_helper_funcs = {
+	.get_modes = dsi_connector_get_modes,
+	.mode_valid = dsi_connector_mode_valid,
+	.best_encoder = dsi_connector_best_encoder,
+};
+
+static enum drm_connector_status
+dsi_connector_detect(struct drm_connector *connector, bool force)
+{
+	struct dw_dsi *dsi = connector_to_dsi(connector);
+	enum drm_connector_status status;
+
+	status = dsi->cur_client == OUT_PANEL ?	connector_status_connected :
+		connector_status_disconnected;
+
+	return status;
+}
+
+static void dsi_connector_destroy(struct drm_connector *connector)
+{
+	drm_connector_unregister(connector);
+	drm_connector_cleanup(connector);
+}
+
+static struct drm_connector_funcs dsi_atomic_connector_funcs = {
+	.fill_modes = drm_helper_probe_single_connector_modes,
+	.detect = dsi_connector_detect,
+	.destroy = dsi_connector_destroy,
+	.reset = drm_atomic_helper_connector_reset,
+	.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
+	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
+};
+
+static int dsi_connector_init(struct drm_device *dev, struct dw_dsi *dsi)
+{
+	struct drm_encoder *encoder = &dsi->encoder;
+	struct drm_connector *connector = &dsi->connector;
+	int ret;
+
+	connector->polled = DRM_CONNECTOR_POLL_HPD;
+	drm_connector_helper_add(connector,
+				 &dsi_connector_helper_funcs);
+
+	ret = drm_connector_init(dev, &dsi->connector,
+				 &dsi_atomic_connector_funcs,
+				 DRM_MODE_CONNECTOR_DSI);
+	if (ret)
+		return ret;
+
+	ret = drm_connector_attach_encoder(connector, encoder);
+	if (ret)
+		return ret;
+
+	ret = drm_panel_attach(dsi->panel, connector);
+	if (ret)
+		return ret;
+
+	DRM_INFO("connector init\n");
+	return 0;
+}
+/****************************************************************************/
+
+/***************************for the encoder_helper_funcs****************************************/
+static const struct drm_encoder_funcs dw_encoder_funcs = {
+	.destroy = drm_encoder_cleanup,
+};
+
+
+static int dsi_encoder_atomic_check(struct drm_encoder *encoder,
+				    struct drm_crtc_state *crtc_state,
+				    struct drm_connector_state *conn_state)
+{
+	/* do nothing */
+	return 0;
+}
+
+static enum drm_mode_status dsi_encoder_mode_valid(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode)
+
+{
+	 return hisi_dsi_ops->encoder_valid(encoder,mode);
+}
+
+static void dsi_encoder_mode_set(struct drm_encoder *encoder,
+				 struct drm_display_mode *mode,
+				 struct drm_display_mode *adj_mode)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+
+	drm_mode_copy(&dsi->cur_mode, adj_mode);
+}
+
+static void dsi_encoder_enable(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+
+
+
+	if (dsi->enable)
+		return;
+
+	hisi_dsi_ops->encoder_enable(encoder);
+
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		/* turn on panel */
+		if (dsi->panel && drm_panel_prepare(dsi->panel))
+			DRM_ERROR("failed to prepare panel\n");
+
+		/*dw_dsi_set_mode(dsi, DSI_VIDEO_MODE);*/
+
+		/* turn on panel's back light */
+		if (dsi->panel && drm_panel_enable(dsi->panel))
+			DRM_ERROR("failed to enable panel\n");
+
+	}
+
+	dsi->enable = true;
+}
+
+static void dw_dsi_set_mode(struct dw_dsi *dsi, enum dsi_work_mode mode)
+{
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+	void __iomem *base = ctx->base;
+
+	writel(RESET, base + PWR_UP);
+	writel(mode, base + MODE_CFG);
+	writel(POWERUP, base + PWR_UP);
+}
+
+static void dsi_encoder_disable(struct drm_encoder *encoder)
+{
+	struct dw_dsi *dsi = encoder_to_dsi(encoder);
+	struct dsi_hw_ctx *ctx = dsi->ctx;
+
+	if (!dsi->enable)
+		return;
+
+	dw_dsi_set_mode(dsi, DSI_COMMAND_MODE);
+	
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		/* turn off panel's backlight */
+		if (dsi->panel && drm_panel_disable(dsi->panel))
+			DRM_ERROR("failed to disable panel\n");
+
+		/* turn off panel */
+		if (dsi->panel && drm_panel_unprepare(dsi->panel))
+			DRM_ERROR("failed to unprepare panel\n");
+
+		clk_disable_unprepare(ctx->dss_dphy0_ref_clk);
+		clk_disable_unprepare(ctx->dss_dphy0_cfg_clk);
+		clk_disable_unprepare(ctx->dss_pclk_dsi0_clk);
+	}
+
+	dsi->enable = false;
+}
+
+static const struct drm_encoder_helper_funcs dw_encoder_helper_funcs = {
+	.atomic_check	= dsi_encoder_atomic_check,
+	.mode_valid	= dsi_encoder_mode_valid,
+	.mode_set	= dsi_encoder_mode_set,
+	.enable		= dsi_encoder_enable,
+	.disable	= dsi_encoder_disable
+};
+
+/****************************************************************************/
+static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
+{
+	struct drm_encoder *encoder = &dsi->encoder;
+	struct drm_bridge *bridge = dsi->bridge;
+	int ret;
+
+	/* associate the bridge to dsi encoder */
+	ret = drm_bridge_attach(encoder, bridge, NULL);
+	if (ret) {
+		DRM_ERROR("failed to attach external bridge\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int dw_drm_encoder_init(struct device *dev,
+			       struct drm_device *drm_dev,
+			       struct drm_encoder *encoder)
+{
+	int ret;
+	u32 crtc_mask = drm_of_find_possible_crtcs(drm_dev, dev->of_node);
+
+	if (!crtc_mask) {
+		DRM_ERROR("failed to find crtc mask\n");
+		return -EINVAL;
+	}
+
+	encoder->possible_crtcs = crtc_mask;
+	ret = drm_encoder_init(drm_dev, encoder, &dw_encoder_funcs,
+			       DRM_MODE_ENCODER_DSI, NULL);
+	if (ret) {
+		DRM_ERROR("failed to init dsi encoder\n");
+		return ret;
+	}
+
+	drm_encoder_helper_add(encoder, &dw_encoder_helper_funcs);
+
+	return 0;
+}
+
+static int dsi_bind(struct device *dev, struct device *master, void *data)
+{
+	struct dsi_data *ddata = dev_get_drvdata(dev);
+	struct dw_dsi *dsi = &ddata->dsi;
+	struct drm_device *drm_dev = data;
+	int ret;
+
+	DRM_INFO("+. \n");
+	ret = dw_drm_encoder_init(dev, drm_dev, &dsi->encoder);
+	if (ret)
+		return ret;
+
+	if (dsi->bridge) {
+		ret = dsi_bridge_init(drm_dev, dsi);
+		if (ret)
+			return ret;
+	}
+
+	if (KIRIN960_DSI == hisi_dsi_ops->version) {
+		if (dsi->panel) {
+			ret = dsi_connector_init(drm_dev, dsi);
+			if (ret)
+				return ret;
+		}
+	}else if (KIRIN620_DSI == hisi_dsi_ops->version) {
+		/*the panel for the kirin620 drm have not support*/
+	}
+
+	DRM_INFO("-. \n");
+	return 0;
+}
+
+static void dsi_unbind(struct device *dev, struct device *master, void *data)
+{
+	/* do nothing */
+}
+
+static const struct component_ops dsi_ops = {
+	.bind	= dsi_bind,
+	.unbind	= dsi_unbind,
+};
+
+
+
+static int dsi_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct dsi_data *data;
+	struct dw_dsi *dsi;
+	struct dsi_hw_ctx *ctx;
+	int ret;
+
+	hisi_dsi_ops =  (struct kirin_dsi_ops *) of_device_get_match_data(dev);
+
+	DRM_INFO("+. \n");
+	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+	if (!data) {
+		DRM_ERROR("failed to allocate dsi data.\n");
+		return -ENOMEM;
+	}
+	dsi = &data->dsi;
+	ctx = &data->ctx;
+	dsi->ctx = ctx;
+
+	if (NULL == hisi_dsi_ops) {
+		DRM_ERROR("hisi_dsi_ops is not bind\n");
+	}
+	ret = hisi_dsi_ops->host_init(dev, dsi);
+	if (ret)
+		return ret;
+	
+	ret = hisi_dsi_ops->parse_dt(pdev, dsi);
+	if (ret)
+		goto err_host_unregister;
+
+	platform_set_drvdata(pdev, data);
+
+	ret = component_add(dev, &dsi_ops);
+	if (ret)
+		goto err_host_unregister;
+
+	DRM_INFO("-. \n");
+	return 0;
+
+err_host_unregister:
+	mipi_dsi_host_unregister(&dsi->host);
+	return ret;
+}
+static int dsi_remove(struct platform_device *pdev)
+{
+	component_del(&pdev->dev, &dsi_ops);
+
+	return 0;
+}
+
+static const struct of_device_id dsi_of_match[] = {
+#ifdef CONFIG_DRM_HISI_KIRIN960
+	{
+		.compatible = "hisilicon,hi3660-dsi",
+		.data = &kirin_dsi_960,
+	},
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN620
+	{
+		.compatible = "hisilicon,hi6220-dsi",
+		.data = &kirin_dsi_620,
+	},
+#endif
+	{ /* end node */}
+};
+MODULE_DEVICE_TABLE(of, dsi_of_match);
+
+static struct platform_driver dsi_driver = {
+	.probe = dsi_probe,
+	.remove = dsi_remove,
+	.driver = {
+		.name = "dw-dsi",
+		.of_match_table = dsi_of_match,
+	},
+};
+
+module_platform_driver(dsi_driver);
+
+MODULE_DESCRIPTION("DesignWare MIPI DSI Host Controller v1.02 driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h
new file mode 100644
index 0000000..4043784
--- /dev/null
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_dsi.h
@@ -0,0 +1,259 @@
+#ifndef __KIRIN_DRM_DSI_H__
+#define __KIRIN_DRM_DSI_H__
+
+
+#include <linux/clk.h>
+#include <linux/component.h>
+#include <linux/of_graph.h>
+#include <linux/iopoll.h>
+#include <video/mipi_display.h>
+#include <linux/gpio/consumer.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+
+#include <drm/drm_of.h>
+#include <drm/drm_crtc_helper.h>
+#include <drm/drm_mipi_dsi.h>
+#include <drm/drm_encoder_slave.h>
+#include <drm/drm_atomic_helper.h>
+#include <drm/drm_panel.h>
+
+#define ROUND(x, y)		((x) / (y) + \
+				((x) % (y) * 10 / (y) >= 5 ? 1 : 0))
+#define PHY_REF_CLK_RATE	19200000
+#define PHY_REF_CLK_PERIOD_PS	(1000000000 / (PHY_REF_CLK_RATE / 1000))
+
+#define encoder_to_dsi(encoder) \
+	container_of(encoder, struct dw_dsi, encoder)
+#define host_to_dsi(host) \
+	container_of(host, struct dw_dsi, host)
+#define connector_to_dsi(connector) \
+	container_of(connector, struct dw_dsi, connector)
+	
+enum dsi_output_client {
+	OUT_HDMI = 0,
+	OUT_PANEL,
+	OUT_MAX
+};
+
+struct dsi_phy_range {
+	u32 min_range_kHz;
+	u32 max_range_kHz;
+	u32 pll_vco_750M;
+	u32 hstx_ckg_sel;
+};
+
+static const struct dsi_phy_range dphy_range_info[] = {
+	{   46875,    62500,   1,    7 },
+	{   62500,    93750,   0,    7 },
+	{   93750,   125000,   1,    6 },
+	{  125000,   187500,   0,    6 },
+	{  187500,   250000,   1,    5 },
+	{  250000,   375000,   0,    5 },
+	{  375000,   500000,   1,    4 },
+	{  500000,   750000,   0,    4 },
+	{  750000,  1000000,   1,    0 },
+	{ 1000000,  1500000,   0,    0 }
+};
+
+struct dsi_hw_ctx {
+	void __iomem *base;
+	char __iomem *peri_crg_base;
+
+	struct clk *pclk;
+	struct clk *dss_dphy0_ref_clk;
+	struct clk *dss_dphy1_ref_clk;
+	struct clk *dss_dphy0_cfg_clk;
+	struct clk *dss_dphy1_cfg_clk;
+	struct clk *dss_pclk_dsi0_clk;
+	struct clk *dss_pclk_dsi1_clk;
+};
+
+struct mipi_panel_info {
+	u8 dsi_version;
+	u8 vc;
+	u8 lane_nums;
+	u8 lane_nums_select_support;
+	u8 color_mode;
+	u32 dsi_bit_clk; /* clock lane(p/n) */
+	u32 burst_mode;
+	u32 max_tx_esc_clk;
+	u8 non_continue_en;
+
+	u32 dsi_bit_clk_val1;
+	u32 dsi_bit_clk_val2;
+	u32 dsi_bit_clk_val3;
+	u32 dsi_bit_clk_val4;
+	u32 dsi_bit_clk_val5;
+	u32 dsi_bit_clk_upt;
+	/*uint32_t dsi_pclk_rate;*/
+
+	u32 hs_wr_to_time;
+
+	/* dphy config parameter adjust*/
+	u32 clk_post_adjust;
+	u32 clk_pre_adjust;
+	u32 clk_pre_delay_adjust;
+	u32 clk_t_hs_exit_adjust;
+	u32 clk_t_hs_trial_adjust;
+	u32 clk_t_hs_prepare_adjust;
+	int clk_t_lpx_adjust;
+	u32 clk_t_hs_zero_adjust;
+	u32 data_post_delay_adjust;
+	int data_t_lpx_adjust;
+	u32 data_t_hs_prepare_adjust;
+	u32 data_t_hs_zero_adjust;
+	u32 data_t_hs_trial_adjust;
+	u32 rg_vrefsel_vcm_adjust;
+
+	/*only for Chicago<3660> use*/
+	u32 rg_vrefsel_vcm_clk_adjust;
+	u32 rg_vrefsel_vcm_data_adjust;
+};
+
+struct mipi_phy_params {
+	u32 clk_t_lpx;
+	u32 clk_t_hs_prepare;
+	u32 clk_t_hs_zero;
+	u32 clk_t_hs_trial;
+	u32 clk_t_wakeup;
+	u32 data_t_lpx;
+	u32 data_t_hs_prepare;
+	u32 data_t_hs_zero;
+	u32 data_t_hs_trial;
+	u32 data_t_ta_go;
+	u32 data_t_ta_get;
+	u32 data_t_wakeup;
+	u32 hstx_ckg_sel;
+	u32 pll_fbd_div5f;
+	u32 pll_fbd_div1f;
+	u32 pll_fbd_2p;
+	u32 pll_enbwt;
+	u32 pll_fbd_p;
+	u32 pll_fbd_s;
+	u32 pll_pre_div1p;
+	u32 pll_pre_p;
+	u32 pll_vco_750M;
+	u32 pll_lpf_rs;
+	u32 pll_lpf_cs;
+	u32 clk_division;
+	/********for hikey620************/
+	u32 clklp2hs_time;
+	u32 clkhs2lp_time;
+	u32 lp2hs_time;
+	u32 hs2lp_time;
+	u32 clk_to_data_delay;
+	u32 data_to_clk_delay;
+	u32 lane_byte_clk_kHz;
+	/*****************/
+
+	/****for hikey960*****/
+	u64 lane_byte_clk;
+
+	u32 clk_lane_lp2hs_time;
+	u32 clk_lane_hs2lp_time;
+	u32 data_lane_lp2hs_time;
+	u32 data_lane_hs2lp_time;
+	u32 clk2data_delay;
+	u32 data2clk_delay;
+
+	u32 clk_pre_delay;
+	u32 clk_post_delay;
+	u32 data_pre_delay;
+	u32 data_post_delay;
+	u32 phy_stop_wait_time;
+	u32 rg_vrefsel_vcm;
+
+	u32 rg_pll_enswc;
+	u32 rg_pll_chp;
+
+	u32 pll_register_override;		/*0x1E[0]*/
+	u32 pll_power_down;			/*0x1E[1]*/
+	u32 rg_band_sel;				/*0x1E[2]*/
+	u32 rg_phase_gen_en;		/*0x1E[3]*/
+	u32 reload_sel;				/*0x1E[4]*/
+	u32 rg_pll_cp_p;				/*0x1E[7:5]*/
+	u32 rg_pll_refsel;				/*0x16[1:0]*/
+	u32 rg_pll_cp;				/*0x16[7:5]*/
+	u32 load_command;
+	/*********/
+};
+
+struct ldi_panel_info {
+	u32 h_back_porch;
+	u32 h_front_porch;
+	u32 h_pulse_width;
+
+	/*
+	** note: vbp > 8 if used overlay compose,
+	** also lcd vbp > 8 in lcd power on sequence
+	*/
+	u32 v_back_porch;
+	u32 v_front_porch;
+	u32 v_pulse_width;
+
+	u8 hsync_plr;
+	u8 vsync_plr;
+	u8 pixelclk_plr;
+	u8 data_en_plr;
+
+	/* for cabc */
+	u8 dpi0_overlap_size;
+	u8 dpi1_overlap_size;
+};
+
+struct dw_dsi_client {
+	u32 lanes;
+	u32 phy_clock; /* in kHz */
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+};
+
+struct dw_dsi {
+	struct drm_encoder encoder;
+	struct drm_bridge *bridge;
+	struct drm_panel *panel;
+	struct mipi_dsi_host host;
+	struct drm_connector connector; /* connector for panel */
+	struct drm_display_mode cur_mode;
+	struct dsi_hw_ctx *ctx;
+	struct mipi_phy_params phy;
+	struct mipi_panel_info mipi;
+	struct ldi_panel_info ldi;
+	u32 lanes;
+	enum mipi_dsi_pixel_format format;
+	unsigned long mode_flags;
+	struct gpio_desc *gpio_mux;
+	struct dw_dsi_client client[OUT_MAX];
+	enum dsi_output_client cur_client;
+	bool enable;
+};
+
+struct dsi_data {
+	struct dw_dsi dsi;
+	struct dsi_hw_ctx ctx;
+};
+
+enum kirin_dsi_version {
+	KIRIN620_DSI = 0,
+	KIRIN960_DSI
+};
+
+/* display controller init/cleanup ops */
+struct kirin_dsi_ops {
+	enum kirin_dsi_version version;
+	int (*parse_dt)(struct platform_device *pdev, struct dw_dsi *dsi);
+	int (*host_init)(struct device *dev, struct dw_dsi *dsi);
+	void (*encoder_enable)(struct drm_encoder *encoder);
+	enum drm_mode_status(*encoder_valid)(struct drm_encoder *encoder,
+					const struct drm_display_mode *mode);
+};
+
+#ifdef CONFIG_DRM_HISI_KIRIN960
+extern const struct kirin_dsi_ops kirin_dsi_960;
+#endif
+#ifdef CONFIG_DRM_HISI_KIRIN620
+extern const struct kirin_dsi_ops kirin_dsi_620;
+#endif
+
+#endif /* __KIRIN_DRM_DSI_H__ */
diff --git a/drivers/gpu/drm/i915/display/intel_connector.c b/drivers/gpu/drm/i915/display/intel_connector.c
index 308ec63..ba2ef16 100644
--- a/drivers/gpu/drm/i915/display/intel_connector.c
+++ b/drivers/gpu/drm/i915/display/intel_connector.c
@@ -277,7 +277,7 @@
 void
 intel_attach_colorspace_property(struct drm_connector *connector)
 {
-	if (!drm_mode_create_colorspace_property(connector))
+	if (!drm_mode_create_hdmi_colorspace_property(connector))
 		drm_object_attach_property(&connector->base,
 					   connector->colorspace_property, 0);
 }
diff --git a/drivers/gpu/drm/i915/display/intel_panel.c b/drivers/gpu/drm/i915/display/intel_panel.c
index 23edc1b..ee5f46b 100644
--- a/drivers/gpu/drm/i915/display/intel_panel.c
+++ b/drivers/gpu/drm/i915/display/intel_panel.c
@@ -1869,7 +1869,7 @@
 
 	panel->backlight.min = 0; /* 0% */
 	panel->backlight.max = 100; /* 100% */
-	panel->backlight.level = DIV_ROUND_UP(
+	panel->backlight.level = DIV64_U64_ROUND_UP(
 				 pwm_get_duty_cycle(panel->backlight.pwm) * 100,
 				 CRC_PMIC_PWM_PERIOD_NS);
 	panel->backlight.enabled = panel->backlight.level != 0;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
index 6d0cc90..968d9b2 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_userptr.c
@@ -619,14 +619,6 @@
 				      GFP_KERNEL |
 				      __GFP_NORETRY |
 				      __GFP_NOWARN);
-		/*
-		 * Using __get_user_pages_fast() with a read-only
-		 * access is questionable. A read-only page may be
-		 * COW-broken, and then this might end up giving
-		 * the wrong side of the COW..
-		 *
-		 * We may or may not care.
-		 */
 		if (pvec) /* defer to worker if malloc fails */
 			pinned = __get_user_pages_fast(obj->userptr.ptr,
 						       num_pages,
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
index 40431a0..bf5220c 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c
@@ -2,6 +2,7 @@
 /* Copyright (c) 2017-2018 The Linux Foundation. All rights reserved. */
 
 #include <linux/clk.h>
+#include <linux/dma-mapping.h>
 #include <linux/interconnect.h>
 #include <linux/pm_domain.h>
 #include <linux/pm_opp.h>
@@ -897,21 +898,10 @@
 
 static void a6xx_gmu_memory_free(struct a6xx_gmu *gmu, struct a6xx_gmu_bo *bo)
 {
-	int count, i;
-	u64 iova;
-
 	if (IS_ERR_OR_NULL(bo))
 		return;
 
-	count = bo->size >> PAGE_SHIFT;
-	iova = bo->iova;
-
-	for (i = 0; i < count; i++, iova += PAGE_SIZE) {
-		iommu_unmap(gmu->domain, iova, PAGE_SIZE);
-		__free_pages(bo->pages[i], 0);
-	}
-
-	kfree(bo->pages);
+	dma_free_attrs(gmu->dev, bo->size, bo->virt, bo->iova, bo->attrs);
 	kfree(bo);
 }
 
@@ -919,94 +909,23 @@
 		size_t size)
 {
 	struct a6xx_gmu_bo *bo;
-	int ret, count, i;
 
 	bo = kzalloc(sizeof(*bo), GFP_KERNEL);
 	if (!bo)
 		return ERR_PTR(-ENOMEM);
 
 	bo->size = PAGE_ALIGN(size);
+	bo->attrs = DMA_ATTR_WRITE_COMBINE;
 
-	count = bo->size >> PAGE_SHIFT;
+	bo->virt = dma_alloc_attrs(gmu->dev, bo->size, &bo->iova, GFP_KERNEL,
+		bo->attrs);
 
-	bo->pages = kcalloc(count, sizeof(struct page *), GFP_KERNEL);
-	if (!bo->pages) {
+	if (!bo->virt) {
 		kfree(bo);
 		return ERR_PTR(-ENOMEM);
 	}
 
-	for (i = 0; i < count; i++) {
-		bo->pages[i] = alloc_page(GFP_KERNEL);
-		if (!bo->pages[i])
-			goto err;
-	}
-
-	bo->iova = gmu->uncached_iova_base;
-
-	for (i = 0; i < count; i++) {
-		ret = iommu_map(gmu->domain,
-			bo->iova + (PAGE_SIZE * i),
-			page_to_phys(bo->pages[i]), PAGE_SIZE,
-			IOMMU_READ | IOMMU_WRITE);
-
-		if (ret) {
-			DRM_DEV_ERROR(gmu->dev, "Unable to map GMU buffer object\n");
-
-			for (i = i - 1 ; i >= 0; i--)
-				iommu_unmap(gmu->domain,
-					bo->iova + (PAGE_SIZE * i),
-					PAGE_SIZE);
-
-			goto err;
-		}
-	}
-
-	bo->virt = vmap(bo->pages, count, VM_IOREMAP,
-		pgprot_writecombine(PAGE_KERNEL));
-	if (!bo->virt)
-		goto err;
-
-	/* Align future IOVA addresses on 1MB boundaries */
-	gmu->uncached_iova_base += ALIGN(size, SZ_1M);
-
 	return bo;
-
-err:
-	for (i = 0; i < count; i++) {
-		if (bo->pages[i])
-			__free_pages(bo->pages[i], 0);
-	}
-
-	kfree(bo->pages);
-	kfree(bo);
-
-	return ERR_PTR(-ENOMEM);
-}
-
-static int a6xx_gmu_memory_probe(struct a6xx_gmu *gmu)
-{
-	int ret;
-
-	/*
-	 * The GMU address space is hardcoded to treat the range
-	 * 0x60000000 - 0x80000000 as un-cached memory. All buffers shared
-	 * between the GMU and the CPU will live in this space
-	 */
-	gmu->uncached_iova_base = 0x60000000;
-
-
-	gmu->domain = iommu_domain_alloc(&platform_bus_type);
-	if (!gmu->domain)
-		return -ENODEV;
-
-	ret = iommu_attach_device(gmu->domain, gmu->dev);
-
-	if (ret) {
-		iommu_domain_free(gmu->domain);
-		gmu->domain = NULL;
-	}
-
-	return ret;
 }
 
 /* Return the 'arc-level' for the given frequency */
@@ -1264,10 +1183,6 @@
 
 	a6xx_gmu_memory_free(gmu, gmu->hfi);
 
-	iommu_detach_device(gmu->domain, gmu->dev);
-
-	iommu_domain_free(gmu->domain);
-
 	free_irq(gmu->gmu_irq, gmu);
 	free_irq(gmu->hfi_irq, gmu);
 
@@ -1288,7 +1203,10 @@
 
 	gmu->dev = &pdev->dev;
 
-	of_dma_configure(gmu->dev, node, true);
+	/* Pass force_dma false to require the DT to set the dma region */
+	ret = of_dma_configure(gmu->dev, node, false);
+	if (ret)
+		return ret;
 
 	/* Fow now, don't do anything fancy until we get our feet under us */
 	gmu->idle_level = GMU_IDLE_STATE_ACTIVE;
@@ -1300,11 +1218,6 @@
 	if (ret)
 		goto err_put_device;
 
-	/* Set up the IOMMU context bank */
-	ret = a6xx_gmu_memory_probe(gmu);
-	if (ret)
-		goto err_put_device;
-
 	/* Allocate memory for for the HFI queues */
 	gmu->hfi = a6xx_gmu_memory_alloc(gmu, SZ_16K);
 	if (IS_ERR(gmu->hfi))
@@ -1350,11 +1263,6 @@
 err_memory:
 	a6xx_gmu_memory_free(gmu, gmu->hfi);
 
-	if (gmu->domain) {
-		iommu_detach_device(gmu->domain, gmu->dev);
-
-		iommu_domain_free(gmu->domain);
-	}
 	ret = -ENODEV;
 
 err_put_device:
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
index 39a26dd..f5c733a 100644
--- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
+++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.h
@@ -12,8 +12,8 @@
 struct a6xx_gmu_bo {
 	void *virt;
 	size_t size;
-	u64 iova;
-	struct page **pages;
+	dma_addr_t iova;
+	unsigned long attrs;
 };
 
 /*
@@ -49,9 +49,6 @@
 	int hfi_irq;
 	int gmu_irq;
 
-	struct iommu_domain *domain;
-	u64 uncached_iova_base;
-
 	struct device *gxpd;
 
 	int idle_level;
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index b984baf..9b2efee 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -858,7 +858,7 @@
 					  pdpu->pipe_sblk->maxdwnscale << 16,
 					  true, true);
 	if (ret) {
-		DPU_ERROR_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
+		DPU_DEBUG_PLANE(pdpu, "Check plane state failed (%d)\n", ret);
 		return ret;
 	}
 	if (!state->visible)
@@ -884,13 +884,13 @@
 		(!(pdpu->features & DPU_SSPP_SCALER) ||
 		 !(pdpu->features & (BIT(DPU_SSPP_CSC)
 		 | BIT(DPU_SSPP_CSC_10BIT))))) {
-		DPU_ERROR_PLANE(pdpu,
+		DPU_DEBUG_PLANE(pdpu,
 				"plane doesn't have scaler/csc for yuv\n");
 		return -EINVAL;
 
 	/* check src bounds */
 	} else if (!dpu_plane_validate_src(&src, &fb_rect, min_src_size)) {
-		DPU_ERROR_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid source " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&src));
 		return -E2BIG;
 
@@ -899,19 +899,19 @@
 		   (src.x1 & 0x1 || src.y1 & 0x1 ||
 		    drm_rect_width(&src) & 0x1 ||
 		    drm_rect_height(&src) & 0x1)) {
-		DPU_ERROR_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid yuv source " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&src));
 		return -EINVAL;
 
 	/* min dst support */
 	} else if (drm_rect_width(&dst) < 0x1 || drm_rect_height(&dst) < 0x1) {
-		DPU_ERROR_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid dest rect " DRM_RECT_FMT "\n",
 				DRM_RECT_ARG(&dst));
 		return -EINVAL;
 
 	/* check decimated source width */
 	} else if (drm_rect_width(&src) > max_linewidth) {
-		DPU_ERROR_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
+		DPU_DEBUG_PLANE(pdpu, "invalid src " DRM_RECT_FMT " line:%u\n",
 				DRM_RECT_ARG(&src), max_linewidth);
 		return -E2BIG;
 	}
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
index f2bad14..6d9c47c 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
@@ -61,9 +61,10 @@
 
 	/*
 	 * If possible, avoid waiting for GPU with mmap_sem
-	 * held.
+	 * held.  We only do this if the fault allows retry and this
+	 * is the first attempt.
 	 */
-	if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(vmf->flags)) {
 		ret = VM_FAULT_RETRY;
 		if (vmf->flags & FAULT_FLAG_RETRY_NOWAIT)
 			goto out_unlock;
@@ -132,7 +133,12 @@
 	 * for the buffer to become unreserved.
 	 */
 	if (unlikely(!dma_resv_trylock(bo->base.resv))) {
-		if (vmf->flags & FAULT_FLAG_ALLOW_RETRY) {
+		/*
+		 * If the fault allows retry and this is the first
+		 * fault attempt, we try to release the mmap_sem
+		 * before waiting
+		 */
+		if (fault_flag_allow_retry_first(vmf->flags)) {
 			if (!(vmf->flags & FAULT_FLAG_RETRY_NOWAIT)) {
 				ttm_bo_get(bo);
 				up_read(&vmf->vma->vm_mm->mmap_sem);
diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
index e622485..7f56940 100644
--- a/drivers/gpu/drm/virtio/virtgpu_display.c
+++ b/drivers/gpu/drm/virtio/virtgpu_display.c
@@ -298,10 +298,6 @@
 	struct virtio_gpu_framebuffer *virtio_gpu_fb;
 	int ret;
 
-	if (mode_cmd->pixel_format != DRM_FORMAT_HOST_XRGB8888 &&
-	    mode_cmd->pixel_format != DRM_FORMAT_HOST_ARGB8888)
-		return ERR_PTR(-ENOENT);
-
 	/* lookup object associated with res handle */
 	obj = drm_gem_object_lookup(file_priv, mode_cmd->handles[0]);
 	if (!obj)
@@ -350,7 +346,6 @@
 	int i;
 
 	drm_mode_config_init(vgdev->ddev);
-	vgdev->ddev->mode_config.quirk_addfb_prefer_host_byte_order = true;
 	vgdev->ddev->mode_config.funcs = &virtio_gpu_mode_funcs;
 	vgdev->ddev->mode_config.helper_private = &virtio_mode_config_helpers;
 
diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c
index a492ac3..56a2757 100644
--- a/drivers/gpu/drm/virtio/virtgpu_plane.c
+++ b/drivers/gpu/drm/virtio/virtgpu_plane.c
@@ -30,7 +30,14 @@
 #include "virtgpu_drv.h"
 
 static const uint32_t virtio_gpu_formats[] = {
-	DRM_FORMAT_HOST_XRGB8888,
+	DRM_FORMAT_XRGB8888,
+	DRM_FORMAT_ARGB8888,
+	DRM_FORMAT_BGRX8888,
+	DRM_FORMAT_BGRA8888,
+	DRM_FORMAT_RGBX8888,
+	DRM_FORMAT_RGBA8888,
+	DRM_FORMAT_XBGR8888,
+	DRM_FORMAT_ABGR8888,
 };
 
 static const uint32_t virtio_gpu_cursor_formats[] = {
@@ -42,6 +49,32 @@
 	uint32_t format;
 
 	switch (drm_fourcc) {
+#ifdef __BIG_ENDIAN
+	case DRM_FORMAT_XRGB8888:
+		format = VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_ARGB8888:
+		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
+		break;
+	case DRM_FORMAT_BGRX8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
+		break;
+	case DRM_FORMAT_BGRA8888:
+		format = VIRTIO_GPU_FORMAT_B8G8R8A8_UNORM;
+		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+#else
 	case DRM_FORMAT_XRGB8888:
 		format = VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM;
 		break;
@@ -54,6 +87,19 @@
 	case DRM_FORMAT_BGRA8888:
 		format = VIRTIO_GPU_FORMAT_A8R8G8B8_UNORM;
 		break;
+	case DRM_FORMAT_RGBX8888:
+		format = VIRTIO_GPU_FORMAT_X8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_RGBA8888:
+		format = VIRTIO_GPU_FORMAT_A8B8G8R8_UNORM;
+		break;
+	case DRM_FORMAT_XBGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8X8_UNORM;
+		break;
+	case DRM_FORMAT_ABGR8888:
+		format = VIRTIO_GPU_FORMAT_R8G8B8A8_UNORM;
+		break;
+#endif
 	default:
 		/*
 		 * This should not happen, we handle everything listed
diff --git a/drivers/gpu/trace/Kconfig b/drivers/gpu/trace/Kconfig
new file mode 100644
index 0000000..c24e9ed
--- /dev/null
+++ b/drivers/gpu/trace/Kconfig
@@ -0,0 +1,4 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config TRACE_GPU_MEM
+	bool
diff --git a/drivers/gpu/trace/Makefile b/drivers/gpu/trace/Makefile
new file mode 100644
index 0000000..b70fbdc
--- /dev/null
+++ b/drivers/gpu/trace/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_TRACE_GPU_MEM) += trace_gpu_mem.o
diff --git a/drivers/gpu/trace/trace_gpu_mem.c b/drivers/gpu/trace/trace_gpu_mem.c
new file mode 100644
index 0000000..01e8558
--- /dev/null
+++ b/drivers/gpu/trace/trace_gpu_mem.c
@@ -0,0 +1,13 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * GPU memory trace points
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#include <linux/module.h>
+
+#define CREATE_TRACE_POINTS
+#include <trace/events/gpu_mem.h>
+
+EXPORT_TRACEPOINT_SYMBOL(gpu_mem_total);
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
index 5169a38..b749e6b 100644
--- a/drivers/hid/Kconfig
+++ b/drivers/hid/Kconfig
@@ -702,6 +702,17 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called hid-multitouch.
 
+config HID_NINTENDO
+	tristate "Nintendo Joy-Con and Pro Controller support"
+	depends on HID
+	help
+	Adds support for the Nintendo Switch Joy-Cons and Pro Controller.
+	All controllers support bluetooth, and the Pro Controller also supports
+	its USB mode.
+
+	To compile this driver as a module, choose M here: the
+	module will be called hid-nintendo.
+
 config HID_NTI
 	tristate "NTI keyboard adapters"
 	---help---
@@ -836,6 +847,24 @@
 
 	  Say M here if you may ever plug in a Plantronics USB audio device.
 
+config HID_PLAYSTATION
+	tristate "PlayStation HID Driver"
+	depends on HID
+	select CRC32
+	select POWER_SUPPLY
+	help
+	  Provides support for Sony PS5 controllers including support for
+	  its special functionalities e.g. touchpad, lights and motion
+	  sensors.
+
+config PLAYSTATION_FF
+	bool "PlayStation force feedback support"
+	depends on HID_PLAYSTATION
+	select INPUT_FF_MEMLESS
+	help
+	  Say Y here if you would like to enable force feedback support for
+	  PlayStation game controllers.
+
 config HID_PRIMAX
 	tristate "Primax non-fully HID-compliant devices"
 	depends on HID
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
index 0c03308..27595a3 100644
--- a/drivers/hid/Makefile
+++ b/drivers/hid/Makefile
@@ -73,6 +73,7 @@
 obj-$(CONFIG_HID_MICROSOFT)	+= hid-microsoft.o
 obj-$(CONFIG_HID_MONTEREY)	+= hid-monterey.o
 obj-$(CONFIG_HID_MULTITOUCH)	+= hid-multitouch.o
+obj-$(CONFIG_HID_NINTENDO)	+= hid-nintendo.o
 obj-$(CONFIG_HID_NTI)			+= hid-nti.o
 obj-$(CONFIG_HID_NTRIG)		+= hid-ntrig.o
 obj-$(CONFIG_HID_ORTEK)		+= hid-ortek.o
@@ -90,6 +91,7 @@
 hid-picolcd-$(CONFIG_DEBUG_FS)		+= hid-picolcd_debugfs.o
 
 obj-$(CONFIG_HID_PLANTRONICS)	+= hid-plantronics.o
+obj-$(CONFIG_HID_PLAYSTATION)	+= hid-playstation.o
 obj-$(CONFIG_HID_PRIMAX)	+= hid-primax.o
 obj-$(CONFIG_HID_REDRAGON)	+= hid-redragon.o
 obj-$(CONFIG_HID_RETRODE)	+= hid-retrode.o
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 26758ea..3ab58d3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -896,6 +896,9 @@
 #define USB_VENDOR_ID_NINTENDO		0x057e
 #define USB_DEVICE_ID_NINTENDO_WIIMOTE	0x0306
 #define USB_DEVICE_ID_NINTENDO_WIIMOTE2	0x0330
+#define USB_DEVICE_ID_NINTENDO_JOYCONL	0x2006
+#define USB_DEVICE_ID_NINTENDO_JOYCONR	0x2007
+#define USB_DEVICE_ID_NINTENDO_PROCON	0x2009
 
 #define USB_VENDOR_ID_NOVATEK		0x0603
 #define USB_DEVICE_ID_NOVATEK_PCT	0x0600
@@ -1073,6 +1076,7 @@
 #define USB_DEVICE_ID_SONY_PS4_CONTROLLER	0x05c4
 #define USB_DEVICE_ID_SONY_PS4_CONTROLLER_2	0x09cc
 #define USB_DEVICE_ID_SONY_PS4_CONTROLLER_DONGLE	0x0ba0
+#define USB_DEVICE_ID_SONY_PS5_CONTROLLER	0x0ce6
 #define USB_DEVICE_ID_SONY_MOTION_CONTROLLER	0x03d5
 #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER	0x042f
 #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER		0x0002
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c
new file mode 100644
index 0000000..3695b96
--- /dev/null
+++ b/drivers/hid/hid-nintendo.c
@@ -0,0 +1,820 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * HID driver for Nintendo Switch Joy-Cons and Pro Controllers
+ *
+ * Copyright (c) 2019 Daniel J. Ogorchock <djogorchock@gmail.com>
+ *
+ * The following resources/projects were referenced for this driver:
+ *   https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering
+ *   https://gitlab.com/pjranki/joycon-linux-kernel (Peter Rankin)
+ *   https://github.com/FrotBot/SwitchProConLinuxUSB
+ *   https://github.com/MTCKC/ProconXInput
+ *   hid-wiimote kernel hid driver
+ *   hid-logitech-hidpp driver
+ *
+ * This driver supports the Nintendo Switch Joy-Cons and Pro Controllers. The
+ * Pro Controllers can either be used over USB or Bluetooth.
+ *
+ * The driver will retrieve the factory calibration info from the controllers,
+ * so little to no user calibration should be required.
+ *
+ */
+
+#include "hid-ids.h"
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/hid.h>
+#include <linux/input.h>
+#include <linux/module.h>
+#include <linux/spinlock.h>
+
+/*
+ * Reference the url below for the following HID report defines:
+ * https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering
+ */
+
+/* Output Reports */
+static const u8 JC_OUTPUT_RUMBLE_AND_SUBCMD	= 0x01;
+static const u8 JC_OUTPUT_FW_UPDATE_PKT		= 0x03;
+static const u8 JC_OUTPUT_RUMBLE_ONLY		= 0x10;
+static const u8 JC_OUTPUT_MCU_DATA		= 0x11;
+static const u8 JC_OUTPUT_USB_CMD		= 0x80;
+
+/* Subcommand IDs */
+static const u8 JC_SUBCMD_STATE			/*= 0x00*/;
+static const u8 JC_SUBCMD_MANUAL_BT_PAIRING	= 0x01;
+static const u8 JC_SUBCMD_REQ_DEV_INFO		= 0x02;
+static const u8 JC_SUBCMD_SET_REPORT_MODE	= 0x03;
+static const u8 JC_SUBCMD_TRIGGERS_ELAPSED	= 0x04;
+static const u8 JC_SUBCMD_GET_PAGE_LIST_STATE	= 0x05;
+static const u8 JC_SUBCMD_SET_HCI_STATE		= 0x06;
+static const u8 JC_SUBCMD_RESET_PAIRING_INFO	= 0x07;
+static const u8 JC_SUBCMD_LOW_POWER_MODE	= 0x08;
+static const u8 JC_SUBCMD_SPI_FLASH_READ	= 0x10;
+static const u8 JC_SUBCMD_SPI_FLASH_WRITE	= 0x11;
+static const u8 JC_SUBCMD_RESET_MCU		= 0x20;
+static const u8 JC_SUBCMD_SET_MCU_CONFIG	= 0x21;
+static const u8 JC_SUBCMD_SET_MCU_STATE		= 0x22;
+static const u8 JC_SUBCMD_SET_PLAYER_LIGHTS	= 0x30;
+static const u8 JC_SUBCMD_GET_PLAYER_LIGHTS	= 0x31;
+static const u8 JC_SUBCMD_SET_HOME_LIGHT	= 0x38;
+static const u8 JC_SUBCMD_ENABLE_IMU		= 0x40;
+static const u8 JC_SUBCMD_SET_IMU_SENSITIVITY	= 0x41;
+static const u8 JC_SUBCMD_WRITE_IMU_REG		= 0x42;
+static const u8 JC_SUBCMD_READ_IMU_REG		= 0x43;
+static const u8 JC_SUBCMD_ENABLE_VIBRATION	= 0x48;
+static const u8 JC_SUBCMD_GET_REGULATED_VOLTAGE	= 0x50;
+
+/* Input Reports */
+static const u8 JC_INPUT_BUTTON_EVENT		= 0x3F;
+static const u8 JC_INPUT_SUBCMD_REPLY		= 0x21;
+static const u8 JC_INPUT_IMU_DATA		= 0x30;
+static const u8 JC_INPUT_MCU_DATA		= 0x31;
+static const u8 JC_INPUT_USB_RESPONSE		= 0x81;
+
+/* Feature Reports */
+static const u8 JC_FEATURE_LAST_SUBCMD		= 0x02;
+static const u8 JC_FEATURE_OTA_FW_UPGRADE	= 0x70;
+static const u8 JC_FEATURE_SETUP_MEM_READ	= 0x71;
+static const u8 JC_FEATURE_MEM_READ		= 0x72;
+static const u8 JC_FEATURE_ERASE_MEM_SECTOR	= 0x73;
+static const u8 JC_FEATURE_MEM_WRITE		= 0x74;
+static const u8 JC_FEATURE_LAUNCH		= 0x75;
+
+/* USB Commands */
+static const u8 JC_USB_CMD_CONN_STATUS		= 0x01;
+static const u8 JC_USB_CMD_HANDSHAKE		= 0x02;
+static const u8 JC_USB_CMD_BAUDRATE_3M		= 0x03;
+static const u8 JC_USB_CMD_NO_TIMEOUT		= 0x04;
+static const u8 JC_USB_CMD_EN_TIMEOUT		= 0x05;
+static const u8 JC_USB_RESET			= 0x06;
+static const u8 JC_USB_PRE_HANDSHAKE		= 0x91;
+static const u8 JC_USB_SEND_UART		= 0x92;
+
+/* SPI storage addresses of factory calibration data */
+static const u16 JC_CAL_DATA_START		= 0x603d;
+static const u16 JC_CAL_DATA_END		= 0x604e;
+#define JC_CAL_DATA_SIZE	(JC_CAL_DATA_END - JC_CAL_DATA_START + 1)
+
+
+/* The raw analog joystick values will be mapped in terms of this magnitude */
+static const u16 JC_MAX_STICK_MAG		= 32767;
+static const u16 JC_STICK_FUZZ			= 250;
+static const u16 JC_STICK_FLAT			= 500;
+
+/* States for controller state machine */
+enum joycon_ctlr_state {
+	JOYCON_CTLR_STATE_INIT,
+	JOYCON_CTLR_STATE_READ,
+};
+
+struct joycon_stick_cal {
+	s32 max;
+	s32 min;
+	s32 center;
+};
+
+/*
+ * All the controller's button values are stored in a u32.
+ * They can be accessed with bitwise ANDs.
+ */
+static const u32 JC_BTN_Y	= BIT(0);
+static const u32 JC_BTN_X	= BIT(1);
+static const u32 JC_BTN_B	= BIT(2);
+static const u32 JC_BTN_A	= BIT(3);
+static const u32 JC_BTN_SR_R	= BIT(4);
+static const u32 JC_BTN_SL_R	= BIT(5);
+static const u32 JC_BTN_R	= BIT(6);
+static const u32 JC_BTN_ZR	= BIT(7);
+static const u32 JC_BTN_MINUS	= BIT(8);
+static const u32 JC_BTN_PLUS	= BIT(9);
+static const u32 JC_BTN_RSTICK	= BIT(10);
+static const u32 JC_BTN_LSTICK	= BIT(11);
+static const u32 JC_BTN_HOME	= BIT(12);
+static const u32 JC_BTN_CAP	= BIT(13); /* capture button */
+static const u32 JC_BTN_DOWN	= BIT(16);
+static const u32 JC_BTN_UP	= BIT(17);
+static const u32 JC_BTN_RIGHT	= BIT(18);
+static const u32 JC_BTN_LEFT	= BIT(19);
+static const u32 JC_BTN_SR_L	= BIT(20);
+static const u32 JC_BTN_SL_L	= BIT(21);
+static const u32 JC_BTN_L	= BIT(22);
+static const u32 JC_BTN_ZL	= BIT(23);
+
+enum joycon_msg_type {
+	JOYCON_MSG_TYPE_NONE,
+	JOYCON_MSG_TYPE_USB,
+	JOYCON_MSG_TYPE_SUBCMD,
+};
+
+struct joycon_subcmd_request {
+	u8 output_id; /* must be 0x01 for subcommand, 0x10 for rumble only */
+	u8 packet_num; /* incremented every send */
+	u8 rumble_data[8];
+	u8 subcmd_id;
+	u8 data[0]; /* length depends on the subcommand */
+} __packed;
+
+struct joycon_subcmd_reply {
+	u8 ack; /* MSB 1 for ACK, 0 for NACK */
+	u8 id; /* id of requested subcmd */
+	u8 data[0]; /* will be at most 35 bytes */
+} __packed;
+
+struct joycon_input_report {
+	u8 id;
+	u8 timer;
+	u8 bat_con; /* battery and connection info */
+	u8 button_status[3];
+	u8 left_stick[3];
+	u8 right_stick[3];
+	u8 vibrator_report;
+
+	/*
+	 * If support for firmware updates, gyroscope data, and/or NFC/IR
+	 * are added in the future, this can be swapped for a union.
+	 */
+	struct joycon_subcmd_reply reply;
+} __packed;
+
+#define JC_MAX_RESP_SIZE	(sizeof(struct joycon_input_report) + 35)
+
+/* Each physical controller is associated with a joycon_ctlr struct */
+struct joycon_ctlr {
+	struct hid_device *hdev;
+	struct input_dev *input;
+	enum joycon_ctlr_state ctlr_state;
+
+	/* The following members are used for synchronous sends/receives */
+	enum joycon_msg_type msg_type;
+	u8 subcmd_num;
+	struct mutex output_mutex;
+	u8 input_buf[JC_MAX_RESP_SIZE];
+	wait_queue_head_t wait;
+	bool received_resp;
+	u8 usb_ack_match;
+	u8 subcmd_ack_match;
+
+	/* factory calibration data */
+	struct joycon_stick_cal left_stick_cal_x;
+	struct joycon_stick_cal left_stick_cal_y;
+	struct joycon_stick_cal right_stick_cal_x;
+	struct joycon_stick_cal right_stick_cal_y;
+
+};
+
+static int __joycon_hid_send(struct hid_device *hdev, u8 *data, size_t len)
+{
+	u8 *buf;
+	int ret;
+
+	buf = kmemdup(data, len, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+	ret = hid_hw_output_report(hdev, buf, len);
+	kfree(buf);
+	if (ret < 0)
+		hid_dbg(hdev, "Failed to send output report ret=%d\n", ret);
+	return ret;
+}
+
+static int joycon_hid_send_sync(struct joycon_ctlr *ctlr, u8 *data, size_t len)
+{
+	int ret;
+
+	ret = __joycon_hid_send(ctlr->hdev, data, len);
+	if (ret < 0) {
+		memset(ctlr->input_buf, 0, JC_MAX_RESP_SIZE);
+		return ret;
+	}
+
+	if (!wait_event_timeout(ctlr->wait, ctlr->received_resp, HZ)) {
+		hid_dbg(ctlr->hdev, "synchronous send/receive timed out\n");
+		memset(ctlr->input_buf, 0, JC_MAX_RESP_SIZE);
+		return -ETIMEDOUT;
+	}
+
+	ctlr->received_resp = false;
+	return 0;
+}
+
+static int joycon_send_usb(struct joycon_ctlr *ctlr, u8 cmd)
+{
+	int ret;
+	u8 buf[2] = {JC_OUTPUT_USB_CMD};
+
+	buf[1] = cmd;
+	ctlr->usb_ack_match = cmd;
+	ctlr->msg_type = JOYCON_MSG_TYPE_USB;
+	ret = joycon_hid_send_sync(ctlr, buf, sizeof(buf));
+	if (ret)
+		hid_dbg(ctlr->hdev, "send usb command failed; ret=%d\n", ret);
+	return ret;
+}
+
+static int joycon_send_subcmd(struct joycon_ctlr *ctlr,
+			      struct joycon_subcmd_request *subcmd,
+			      size_t data_len)
+{
+	int ret;
+
+	subcmd->output_id = JC_OUTPUT_RUMBLE_AND_SUBCMD;
+	subcmd->packet_num = ctlr->subcmd_num;
+	if (++ctlr->subcmd_num > 0xF)
+		ctlr->subcmd_num = 0;
+	ctlr->subcmd_ack_match = subcmd->subcmd_id;
+	ctlr->msg_type = JOYCON_MSG_TYPE_SUBCMD;
+
+	ret = joycon_hid_send_sync(ctlr, (u8 *)subcmd,
+				   sizeof(*subcmd) + data_len);
+	if (ret < 0)
+		hid_dbg(ctlr->hdev, "send subcommand failed; ret=%d\n", ret);
+	else
+		ret = 0;
+	return ret;
+}
+
+/* Supply nibbles for flash and on. Ones correspond to active */
+static int joycon_set_player_leds(struct joycon_ctlr *ctlr, u8 flash, u8 on)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 1] = { 0 };
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SET_PLAYER_LIGHTS;
+	req->data[0] = (flash << 4) | on;
+
+	hid_dbg(ctlr->hdev, "setting player leds\n");
+	return joycon_send_subcmd(ctlr, req, 1);
+}
+
+static const u16 DFLT_STICK_CAL_CEN = 2000;
+static const u16 DFLT_STICK_CAL_MAX = 3500;
+static const u16 DFLT_STICK_CAL_MIN = 500;
+static int joycon_request_calibration(struct joycon_ctlr *ctlr)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 5] = { 0 };
+	struct joycon_input_report *report;
+	struct joycon_stick_cal *cal_x;
+	struct joycon_stick_cal *cal_y;
+	s32 x_max_above;
+	s32 x_min_below;
+	s32 y_max_above;
+	s32 y_min_below;
+	u8 *data;
+	u8 *raw_cal;
+	int ret;
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SPI_FLASH_READ;
+	data = req->data;
+	data[0] = 0xFF & JC_CAL_DATA_START;
+	data[1] = 0xFF & (JC_CAL_DATA_START >> 8);
+	data[2] = 0xFF & (JC_CAL_DATA_START >> 16);
+	data[3] = 0xFF & (JC_CAL_DATA_START >> 24);
+	data[4] = JC_CAL_DATA_SIZE;
+
+	hid_dbg(ctlr->hdev, "requesting cal data\n");
+	ret = joycon_send_subcmd(ctlr, req, 5);
+	if (ret) {
+		hid_warn(ctlr->hdev,
+			 "Failed to read stick cal, using defaults; ret=%d\n",
+			 ret);
+
+		ctlr->left_stick_cal_x.center = DFLT_STICK_CAL_CEN;
+		ctlr->left_stick_cal_x.max = DFLT_STICK_CAL_MAX;
+		ctlr->left_stick_cal_x.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->left_stick_cal_y.center = DFLT_STICK_CAL_CEN;
+		ctlr->left_stick_cal_y.max = DFLT_STICK_CAL_MAX;
+		ctlr->left_stick_cal_y.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->right_stick_cal_x.center = DFLT_STICK_CAL_CEN;
+		ctlr->right_stick_cal_x.max = DFLT_STICK_CAL_MAX;
+		ctlr->right_stick_cal_x.min = DFLT_STICK_CAL_MIN;
+
+		ctlr->right_stick_cal_y.center = DFLT_STICK_CAL_CEN;
+		ctlr->right_stick_cal_y.max = DFLT_STICK_CAL_MAX;
+		ctlr->right_stick_cal_y.min = DFLT_STICK_CAL_MIN;
+
+		return ret;
+	}
+
+	report = (struct joycon_input_report *)ctlr->input_buf;
+	raw_cal = &report->reply.data[5];
+
+	/* left stick calibration parsing */
+	cal_x = &ctlr->left_stick_cal_x;
+	cal_y = &ctlr->left_stick_cal_y;
+
+	x_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 0), 0, 12);
+	y_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 1), 4, 12);
+	cal_x->center = hid_field_extract(ctlr->hdev, (raw_cal + 3), 0, 12);
+	cal_y->center = hid_field_extract(ctlr->hdev, (raw_cal + 4), 4, 12);
+	x_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 6), 0, 12);
+	y_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 7), 4, 12);
+	cal_x->max = cal_x->center + x_max_above;
+	cal_x->min = cal_x->center - x_min_below;
+	cal_y->max = cal_y->center + y_max_above;
+	cal_y->min = cal_y->center - y_min_below;
+
+	/* right stick calibration parsing */
+	raw_cal += 9;
+	cal_x = &ctlr->right_stick_cal_x;
+	cal_y = &ctlr->right_stick_cal_y;
+
+	cal_x->center = hid_field_extract(ctlr->hdev, (raw_cal + 0), 0, 12);
+	cal_y->center = hid_field_extract(ctlr->hdev, (raw_cal + 1), 4, 12);
+	x_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 3), 0, 12);
+	y_min_below = hid_field_extract(ctlr->hdev, (raw_cal + 4), 4, 12);
+	x_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 6), 0, 12);
+	y_max_above = hid_field_extract(ctlr->hdev, (raw_cal + 7), 4, 12);
+	cal_x->max = cal_x->center + x_max_above;
+	cal_x->min = cal_x->center - x_min_below;
+	cal_y->max = cal_y->center + y_max_above;
+	cal_y->min = cal_y->center - y_min_below;
+
+	hid_dbg(ctlr->hdev, "calibration:\n"
+			    "l_x_c=%d l_x_max=%d l_x_min=%d\n"
+			    "l_y_c=%d l_y_max=%d l_y_min=%d\n"
+			    "r_x_c=%d r_x_max=%d r_x_min=%d\n"
+			    "r_y_c=%d r_y_max=%d r_y_min=%d\n",
+			    ctlr->left_stick_cal_x.center,
+			    ctlr->left_stick_cal_x.max,
+			    ctlr->left_stick_cal_x.min,
+			    ctlr->left_stick_cal_y.center,
+			    ctlr->left_stick_cal_y.max,
+			    ctlr->left_stick_cal_y.min,
+			    ctlr->right_stick_cal_x.center,
+			    ctlr->right_stick_cal_x.max,
+			    ctlr->right_stick_cal_x.min,
+			    ctlr->right_stick_cal_y.center,
+			    ctlr->right_stick_cal_y.max,
+			    ctlr->right_stick_cal_y.min);
+
+	return 0;
+}
+
+static int joycon_set_report_mode(struct joycon_ctlr *ctlr)
+{
+	struct joycon_subcmd_request *req;
+	u8 buffer[sizeof(*req) + 1] = { 0 };
+
+	req = (struct joycon_subcmd_request *)buffer;
+	req->subcmd_id = JC_SUBCMD_SET_REPORT_MODE;
+	req->data[0] = 0x30; /* standard, full report mode */
+
+	hid_dbg(ctlr->hdev, "setting controller report mode\n");
+	return joycon_send_subcmd(ctlr, req, 1);
+}
+
+static s32 joycon_map_stick_val(struct joycon_stick_cal *cal, s32 val)
+{
+	s32 center = cal->center;
+	s32 min = cal->min;
+	s32 max = cal->max;
+	s32 new_val;
+
+	if (val > center) {
+		new_val = (val - center) * JC_MAX_STICK_MAG;
+		new_val /= (max - center);
+	} else {
+		new_val = (center - val) * -JC_MAX_STICK_MAG;
+		new_val /= (center - min);
+	}
+	new_val = clamp(new_val, (s32)-JC_MAX_STICK_MAG, (s32)JC_MAX_STICK_MAG);
+	return new_val;
+}
+
+static void joycon_parse_report(struct joycon_ctlr *ctlr,
+				struct joycon_input_report *rep)
+{
+	struct input_dev *dev = ctlr->input;
+	u32 btns;
+	u32 id = ctlr->hdev->product;
+
+	btns = hid_field_extract(ctlr->hdev, rep->button_status, 0, 24);
+
+	if (id != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		u16 raw_x;
+		u16 raw_y;
+		s32 x;
+		s32 y;
+
+		/* get raw stick values */
+		raw_x = hid_field_extract(ctlr->hdev, rep->left_stick, 0, 12);
+		raw_y = hid_field_extract(ctlr->hdev,
+					  rep->left_stick + 1, 4, 12);
+		/* map the stick values */
+		x = joycon_map_stick_val(&ctlr->left_stick_cal_x, raw_x);
+		y = -joycon_map_stick_val(&ctlr->left_stick_cal_y, raw_y);
+		/* report sticks */
+		input_report_abs(dev, ABS_X, x);
+		input_report_abs(dev, ABS_Y, y);
+
+		/* report buttons */
+		input_report_key(dev, BTN_TL, btns & JC_BTN_L);
+		input_report_key(dev, BTN_TL2, btns & JC_BTN_ZL);
+		if (id != USB_DEVICE_ID_NINTENDO_PROCON) {
+			/* Report the S buttons as the non-existent triggers */
+			input_report_key(dev, BTN_TR, btns & JC_BTN_SL_L);
+			input_report_key(dev, BTN_TR2, btns & JC_BTN_SR_L);
+		}
+		input_report_key(dev, BTN_SELECT, btns & JC_BTN_MINUS);
+		input_report_key(dev, BTN_THUMBL, btns & JC_BTN_LSTICK);
+		input_report_key(dev, BTN_Z, btns & JC_BTN_CAP);
+		input_report_key(dev, BTN_DPAD_DOWN, btns & JC_BTN_DOWN);
+		input_report_key(dev, BTN_DPAD_UP, btns & JC_BTN_UP);
+		input_report_key(dev, BTN_DPAD_RIGHT, btns & JC_BTN_RIGHT);
+		input_report_key(dev, BTN_DPAD_LEFT, btns & JC_BTN_LEFT);
+	}
+	if (id != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		u16 raw_x;
+		u16 raw_y;
+		s32 x;
+		s32 y;
+
+		/* get raw stick values */
+		raw_x = hid_field_extract(ctlr->hdev, rep->right_stick, 0, 12);
+		raw_y = hid_field_extract(ctlr->hdev,
+					  rep->right_stick + 1, 4, 12);
+		/* map stick values */
+		x = joycon_map_stick_val(&ctlr->right_stick_cal_x, raw_x);
+		y = -joycon_map_stick_val(&ctlr->right_stick_cal_y, raw_y);
+		/* report sticks */
+		input_report_abs(dev, ABS_RX, x);
+		input_report_abs(dev, ABS_RY, y);
+
+		/* report buttons */
+		input_report_key(dev, BTN_TR, btns & JC_BTN_R);
+		input_report_key(dev, BTN_TR2, btns & JC_BTN_ZR);
+		if (id != USB_DEVICE_ID_NINTENDO_PROCON) {
+			/* Report the S buttons as the non-existent triggers */
+			input_report_key(dev, BTN_TL, btns & JC_BTN_SL_R);
+			input_report_key(dev, BTN_TL2, btns & JC_BTN_SR_R);
+		}
+		input_report_key(dev, BTN_START, btns & JC_BTN_PLUS);
+		input_report_key(dev, BTN_THUMBR, btns & JC_BTN_RSTICK);
+		input_report_key(dev, BTN_MODE, btns & JC_BTN_HOME);
+		input_report_key(dev, BTN_WEST, btns & JC_BTN_Y);
+		input_report_key(dev, BTN_NORTH, btns & JC_BTN_X);
+		input_report_key(dev, BTN_EAST, btns & JC_BTN_A);
+		input_report_key(dev, BTN_SOUTH, btns & JC_BTN_B);
+	}
+
+	input_sync(dev);
+}
+
+
+static const unsigned int joycon_button_inputs_l[] = {
+	BTN_SELECT, BTN_Z, BTN_THUMBL,
+	BTN_DPAD_UP, BTN_DPAD_DOWN, BTN_DPAD_LEFT, BTN_DPAD_RIGHT,
+	BTN_TL, BTN_TL2,
+	0 /* 0 signals end of array */
+};
+
+static const unsigned int joycon_button_inputs_r[] = {
+	BTN_START, BTN_MODE, BTN_THUMBR,
+	BTN_SOUTH, BTN_EAST, BTN_NORTH, BTN_WEST,
+	BTN_TR, BTN_TR2,
+	0 /* 0 signals end of array */
+};
+
+static DEFINE_MUTEX(joycon_input_num_mutex);
+static int joycon_input_create(struct joycon_ctlr *ctlr)
+{
+	struct hid_device *hdev;
+	static int input_num = 1;
+	const char *name;
+	int ret;
+	int i;
+
+	hdev = ctlr->hdev;
+
+	switch (hdev->product) {
+	case USB_DEVICE_ID_NINTENDO_PROCON:
+		name = "Nintendo Switch Pro Controller";
+		break;
+	case USB_DEVICE_ID_NINTENDO_JOYCONL:
+		name = "Nintendo Switch Left Joy-Con";
+		break;
+	case USB_DEVICE_ID_NINTENDO_JOYCONR:
+		name = "Nintendo Switch Right Joy-Con";
+		break;
+	default: /* Should be impossible */
+		hid_err(hdev, "Invalid hid product\n");
+		return -EINVAL;
+	}
+
+	ctlr->input = devm_input_allocate_device(&hdev->dev);
+	if (!ctlr->input)
+		return -ENOMEM;
+	ctlr->input->id.bustype = hdev->bus;
+	ctlr->input->id.vendor = hdev->vendor;
+	ctlr->input->id.product = hdev->product;
+	ctlr->input->id.version = hdev->version;
+	ctlr->input->name = name;
+	input_set_drvdata(ctlr->input, ctlr);
+
+
+	/* set up sticks */
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		input_set_abs_params(ctlr->input, ABS_X,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+		input_set_abs_params(ctlr->input, ABS_Y,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+	}
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		input_set_abs_params(ctlr->input, ABS_RX,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+		input_set_abs_params(ctlr->input, ABS_RY,
+				     -JC_MAX_STICK_MAG, JC_MAX_STICK_MAG,
+				     JC_STICK_FUZZ, JC_STICK_FLAT);
+	}
+
+	/* set up buttons */
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONR) {
+		for (i = 0; joycon_button_inputs_l[i] > 0; i++)
+			input_set_capability(ctlr->input, EV_KEY,
+					     joycon_button_inputs_l[i]);
+	}
+	if (hdev->product != USB_DEVICE_ID_NINTENDO_JOYCONL) {
+		for (i = 0; joycon_button_inputs_r[i] > 0; i++)
+			input_set_capability(ctlr->input, EV_KEY,
+					     joycon_button_inputs_r[i]);
+	}
+
+	ret = input_register_device(ctlr->input);
+	if (ret)
+		return ret;
+
+	/* Set the default controller player leds based on controller number */
+	mutex_lock(&joycon_input_num_mutex);
+	mutex_lock(&ctlr->output_mutex);
+	ret = joycon_set_player_leds(ctlr, 0, 0xF >> (4 - input_num));
+	if (ret)
+		hid_warn(ctlr->hdev, "Failed to set leds; ret=%d\n", ret);
+	mutex_unlock(&ctlr->output_mutex);
+	if (++input_num > 4)
+		input_num = 1;
+	mutex_unlock(&joycon_input_num_mutex);
+
+	return 0;
+}
+
+/* Common handler for parsing inputs */
+static int joycon_ctlr_read_handler(struct joycon_ctlr *ctlr, u8 *data,
+							      int size)
+{
+	int ret = 0;
+
+	if (data[0] == JC_INPUT_SUBCMD_REPLY || data[0] == JC_INPUT_IMU_DATA ||
+	    data[0] == JC_INPUT_MCU_DATA) {
+		if (size >= 12) /* make sure it contains the input report */
+			joycon_parse_report(ctlr,
+					    (struct joycon_input_report *)data);
+	}
+
+	return ret;
+}
+
+static int joycon_ctlr_handle_event(struct joycon_ctlr *ctlr, u8 *data,
+							      int size)
+{
+	int ret = 0;
+	bool match = false;
+	struct joycon_input_report *report;
+
+	if (unlikely(mutex_is_locked(&ctlr->output_mutex)) &&
+	    ctlr->msg_type != JOYCON_MSG_TYPE_NONE) {
+		switch (ctlr->msg_type) {
+		case JOYCON_MSG_TYPE_USB:
+			if (size < 2)
+				break;
+			if (data[0] == JC_INPUT_USB_RESPONSE &&
+			    data[1] == ctlr->usb_ack_match)
+				match = true;
+			break;
+		case JOYCON_MSG_TYPE_SUBCMD:
+			if (size < sizeof(struct joycon_input_report) ||
+			    data[0] != JC_INPUT_SUBCMD_REPLY)
+				break;
+			report = (struct joycon_input_report *)data;
+			if (report->reply.id == ctlr->subcmd_ack_match)
+				match = true;
+			break;
+		default:
+			break;
+		}
+
+		if (match) {
+			memcpy(ctlr->input_buf, data,
+			       min(size, (int)JC_MAX_RESP_SIZE));
+			ctlr->msg_type = JOYCON_MSG_TYPE_NONE;
+			ctlr->received_resp = true;
+			wake_up(&ctlr->wait);
+
+			/* This message has been handled */
+			return 1;
+		}
+	}
+
+	if (ctlr->ctlr_state == JOYCON_CTLR_STATE_READ)
+		ret = joycon_ctlr_read_handler(ctlr, data, size);
+
+	return ret;
+}
+
+static int nintendo_hid_event(struct hid_device *hdev,
+			      struct hid_report *report, u8 *raw_data, int size)
+{
+	struct joycon_ctlr *ctlr = hid_get_drvdata(hdev);
+
+	if (size < 1)
+		return -EINVAL;
+
+	return joycon_ctlr_handle_event(ctlr, raw_data, size);
+}
+
+static int nintendo_hid_probe(struct hid_device *hdev,
+			    const struct hid_device_id *id)
+{
+	int ret;
+	struct joycon_ctlr *ctlr;
+
+	hid_dbg(hdev, "probe - start\n");
+
+	ctlr = devm_kzalloc(&hdev->dev, sizeof(*ctlr), GFP_KERNEL);
+	if (!ctlr) {
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	ctlr->hdev = hdev;
+	ctlr->ctlr_state = JOYCON_CTLR_STATE_INIT;
+	hid_set_drvdata(hdev, ctlr);
+	mutex_init(&ctlr->output_mutex);
+	init_waitqueue_head(&ctlr->wait);
+
+	ret = hid_parse(hdev);
+	if (ret) {
+		hid_err(hdev, "HID parse failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW);
+	if (ret) {
+		hid_err(hdev, "HW start failed\n");
+		goto err;
+	}
+
+	ret = hid_hw_open(hdev);
+	if (ret) {
+		hid_err(hdev, "cannot start hardware I/O\n");
+		goto err_stop;
+	}
+
+	hid_device_io_start(hdev);
+
+	/* Initialize the controller */
+	mutex_lock(&ctlr->output_mutex);
+	/* if handshake command fails, assume ble pro controller */
+	if (hdev->product == USB_DEVICE_ID_NINTENDO_PROCON &&
+	    !joycon_send_usb(ctlr, JC_USB_CMD_HANDSHAKE)) {
+		hid_dbg(hdev, "detected USB controller\n");
+		/* set baudrate for improved latency */
+		ret = joycon_send_usb(ctlr, JC_USB_CMD_BAUDRATE_3M);
+		if (ret) {
+			hid_err(hdev, "Failed to set baudrate; ret=%d\n", ret);
+			goto err_mutex;
+		}
+		/* handshake */
+		ret = joycon_send_usb(ctlr, JC_USB_CMD_HANDSHAKE);
+		if (ret) {
+			hid_err(hdev, "Failed handshake; ret=%d\n", ret);
+			goto err_mutex;
+		}
+		/*
+		 * Set no timeout (to keep controller in USB mode).
+		 * This doesn't send a response, so ignore the timeout.
+		 */
+		joycon_send_usb(ctlr, JC_USB_CMD_NO_TIMEOUT);
+	}
+
+	/* get controller calibration data, and parse it */
+	ret = joycon_request_calibration(ctlr);
+	if (ret) {
+		/*
+		 * We can function with default calibration, but it may be
+		 * inaccurate. Provide a warning, and continue on.
+		 */
+		hid_warn(hdev, "Analog stick positions may be inaccurate\n");
+	}
+
+	/* Set the reporting mode to 0x30, which is the full report mode */
+	ret = joycon_set_report_mode(ctlr);
+	if (ret) {
+		hid_err(hdev, "Failed to set report mode; ret=%d\n", ret);
+		goto err_mutex;
+	}
+
+	mutex_unlock(&ctlr->output_mutex);
+
+	ret = joycon_input_create(ctlr);
+	if (ret) {
+		hid_err(hdev, "Failed to create input device; ret=%d\n", ret);
+		goto err_close;
+	}
+
+	ctlr->ctlr_state = JOYCON_CTLR_STATE_READ;
+
+	hid_dbg(hdev, "probe - success\n");
+	return 0;
+
+err_mutex:
+	mutex_unlock(&ctlr->output_mutex);
+err_close:
+	hid_hw_close(hdev);
+err_stop:
+	hid_hw_stop(hdev);
+err:
+	hid_err(hdev, "probe - fail = %d\n", ret);
+	return ret;
+}
+
+static void nintendo_hid_remove(struct hid_device *hdev)
+{
+	hid_dbg(hdev, "remove\n");
+	hid_hw_close(hdev);
+	hid_hw_stop(hdev);
+}
+
+static const struct hid_device_id nintendo_hid_devices[] = {
+	{ HID_USB_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_PROCON) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_PROCON) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_JOYCONL) },
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO,
+			 USB_DEVICE_ID_NINTENDO_JOYCONR) },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, nintendo_hid_devices);
+
+static struct hid_driver nintendo_hid_driver = {
+	.name		= "nintendo",
+	.id_table	= nintendo_hid_devices,
+	.probe		= nintendo_hid_probe,
+	.remove		= nintendo_hid_remove,
+	.raw_event	= nintendo_hid_event,
+};
+module_hid_driver(nintendo_hid_driver);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Daniel J. Ogorchock <djogorchock@gmail.com>");
+MODULE_DESCRIPTION("Driver for Nintendo Switch Controllers");
diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c
new file mode 100644
index 0000000..1c92164
--- /dev/null
+++ b/drivers/hid/hid-playstation.c
@@ -0,0 +1,1351 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ *  HID driver for Sony DualSense(TM) controller.
+ *
+ *  Copyright (c) 2020 Sony Interactive Entertainment
+ */
+
+#include <linux/bits.h>
+#include <linux/crc32.h>
+#include <linux/device.h>
+#include <linux/hid.h>
+#include <linux/idr.h>
+#include <linux/input/mt.h>
+#include <linux/module.h>
+
+#include <asm/unaligned.h>
+
+#include "hid-ids.h"
+
+/* List of connected playstation devices. */
+static DEFINE_MUTEX(ps_devices_lock);
+static LIST_HEAD(ps_devices_list);
+
+static DEFINE_IDA(ps_player_id_allocator);
+
+#define HID_PLAYSTATION_VERSION_PATCH 0x8000
+
+/* Base class for playstation devices. */
+struct ps_device {
+	struct list_head list;
+	struct hid_device *hdev;
+	spinlock_t lock;
+
+	uint32_t player_id;
+
+	struct power_supply_desc battery_desc;
+	struct power_supply *battery;
+	uint8_t battery_capacity;
+	int battery_status;
+
+	uint8_t mac_address[6]; /* Note: stored in little endian order. */
+	uint32_t hw_version;
+	uint32_t fw_version;
+
+	int (*parse_report)(struct ps_device *dev, struct hid_report *report, u8 *data, int size);
+};
+
+/* Calibration data for playstation motion sensors. */
+struct ps_calibration_data {
+	int abs_code;
+	short bias;
+	int sens_numer;
+	int sens_denom;
+};
+
+/* Seed values for DualShock4 / DualSense CRC32 for different report types. */
+#define PS_INPUT_CRC32_SEED	0xA1
+#define PS_OUTPUT_CRC32_SEED	0xA2
+#define PS_FEATURE_CRC32_SEED	0xA3
+
+#define DS_INPUT_REPORT_USB			0x01
+#define DS_INPUT_REPORT_USB_SIZE		64
+#define DS_INPUT_REPORT_BT			0x31
+#define DS_INPUT_REPORT_BT_SIZE			78
+#define DS_OUTPUT_REPORT_USB			0x02
+#define DS_OUTPUT_REPORT_USB_SIZE		63
+#define DS_OUTPUT_REPORT_BT			0x31
+#define DS_OUTPUT_REPORT_BT_SIZE		78
+
+#define DS_FEATURE_REPORT_CALIBRATION		0x05
+#define DS_FEATURE_REPORT_CALIBRATION_SIZE	41
+#define DS_FEATURE_REPORT_PAIRING_INFO		0x09
+#define DS_FEATURE_REPORT_PAIRING_INFO_SIZE	20
+#define DS_FEATURE_REPORT_FIRMWARE_INFO		0x20
+#define DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE	64
+
+/* Button masks for DualSense input report. */
+#define DS_BUTTONS0_HAT_SWITCH	GENMASK(3, 0)
+#define DS_BUTTONS0_SQUARE	BIT(4)
+#define DS_BUTTONS0_CROSS	BIT(5)
+#define DS_BUTTONS0_CIRCLE	BIT(6)
+#define DS_BUTTONS0_TRIANGLE	BIT(7)
+#define DS_BUTTONS1_L1		BIT(0)
+#define DS_BUTTONS1_R1		BIT(1)
+#define DS_BUTTONS1_L2		BIT(2)
+#define DS_BUTTONS1_R2		BIT(3)
+#define DS_BUTTONS1_CREATE	BIT(4)
+#define DS_BUTTONS1_OPTIONS	BIT(5)
+#define DS_BUTTONS1_L3		BIT(6)
+#define DS_BUTTONS1_R3		BIT(7)
+#define DS_BUTTONS2_PS_HOME	BIT(0)
+#define DS_BUTTONS2_TOUCHPAD	BIT(1)
+#define DS_BUTTONS2_MIC_MUTE	BIT(2)
+
+/* Status field of DualSense input report. */
+#define DS_STATUS_BATTERY_CAPACITY	GENMASK(3, 0)
+#define DS_STATUS_CHARGING		GENMASK(7, 4)
+#define DS_STATUS_CHARGING_SHIFT	4
+
+/*
+ * Status of a DualSense touch point contact.
+ * Contact IDs, with highest bit set are 'inactive'
+ * and any associated data is then invalid.
+ */
+#define DS_TOUCH_POINT_INACTIVE BIT(7)
+
+ /* Magic value required in tag field of Bluetooth output report. */
+#define DS_OUTPUT_TAG 0x10
+/* Flags for DualSense output report. */
+#define DS_OUTPUT_VALID_FLAG0_COMPATIBLE_VIBRATION BIT(0)
+#define DS_OUTPUT_VALID_FLAG0_HAPTICS_SELECT BIT(1)
+#define DS_OUTPUT_VALID_FLAG1_MIC_MUTE_LED_CONTROL_ENABLE BIT(0)
+#define DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE BIT(1)
+#define DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE BIT(2)
+#define DS_OUTPUT_VALID_FLAG1_RELEASE_LEDS BIT(3)
+#define DS_OUTPUT_VALID_FLAG1_PLAYER_INDICATOR_CONTROL_ENABLE BIT(4)
+#define DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE BIT(1)
+#define DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE BIT(4)
+#define DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT BIT(1)
+
+/* DualSense hardware limits */
+#define DS_ACC_RES_PER_G	8192
+#define DS_ACC_RANGE		(4*DS_ACC_RES_PER_G)
+#define DS_GYRO_RES_PER_DEG_S	1024
+#define DS_GYRO_RANGE		(2048*DS_GYRO_RES_PER_DEG_S)
+#define DS_TOUCHPAD_WIDTH	1920
+#define DS_TOUCHPAD_HEIGHT	1080
+
+struct dualsense {
+	struct ps_device base;
+	struct input_dev *gamepad;
+	struct input_dev *sensors;
+	struct input_dev *touchpad;
+
+	/* Calibration data for accelerometer and gyroscope. */
+	struct ps_calibration_data accel_calib_data[3];
+	struct ps_calibration_data gyro_calib_data[3];
+
+	/* Timestamp for sensor data */
+	bool sensor_timestamp_initialized;
+	uint32_t prev_sensor_timestamp;
+	uint32_t sensor_timestamp_us;
+
+	/* Compatible rumble state */
+	bool update_rumble;
+	uint8_t motor_left;
+	uint8_t motor_right;
+
+	/* RGB lightbar */
+	bool update_lightbar;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+
+	/* Microphone */
+	bool update_mic_mute;
+	bool mic_muted;
+	bool last_btn_mic_state;
+
+	/* Player leds */
+	bool update_player_leds;
+	uint8_t player_leds_state;
+	struct led_classdev player_leds[5];
+
+	struct work_struct output_worker;
+	void *output_report_dmabuf;
+	uint8_t output_seq; /* Sequence number for output report. */
+};
+
+struct dualsense_touch_point {
+	uint8_t contact;
+	uint8_t x_lo;
+	uint8_t x_hi:4, y_lo:4;
+	uint8_t y_hi;
+} __packed;
+static_assert(sizeof(struct dualsense_touch_point) == 4);
+
+/* Main DualSense input report excluding any BT/USB specific headers. */
+struct dualsense_input_report {
+	uint8_t x, y;
+	uint8_t rx, ry;
+	uint8_t z, rz;
+	uint8_t seq_number;
+	uint8_t buttons[4];
+	uint8_t reserved[4];
+
+	/* Motion sensors */
+	__le16 gyro[3]; /* x, y, z */
+	__le16 accel[3]; /* x, y, z */
+	__le32 sensor_timestamp;
+	uint8_t reserved2;
+
+	/* Touchpad */
+	struct dualsense_touch_point points[2];
+
+	uint8_t reserved3[12];
+	uint8_t status;
+	uint8_t reserved4[10];
+} __packed;
+/* Common input report size shared equals the size of the USB report minus 1 byte for ReportID. */
+static_assert(sizeof(struct dualsense_input_report) == DS_INPUT_REPORT_USB_SIZE - 1);
+
+/* Common data between DualSense BT/USB main output report. */
+struct dualsense_output_report_common {
+	uint8_t valid_flag0;
+	uint8_t valid_flag1;
+
+	/* For DualShock 4 compatibility mode. */
+	uint8_t motor_right;
+	uint8_t motor_left;
+
+	/* Audio controls */
+	uint8_t reserved[4];
+	uint8_t mute_button_led;
+
+	uint8_t power_save_control;
+	uint8_t reserved2[28];
+
+	/* LEDs and lightbar */
+	uint8_t valid_flag2;
+	uint8_t reserved3[2];
+	uint8_t lightbar_setup;
+	uint8_t led_brightness;
+	uint8_t player_leds;
+	uint8_t lightbar_red;
+	uint8_t lightbar_green;
+	uint8_t lightbar_blue;
+} __packed;
+static_assert(sizeof(struct dualsense_output_report_common) == 47);
+
+struct dualsense_output_report_bt {
+	uint8_t report_id; /* 0x31 */
+	uint8_t seq_tag;
+	uint8_t tag;
+	struct dualsense_output_report_common common;
+	uint8_t reserved[24];
+	__le32 crc32;
+} __packed;
+static_assert(sizeof(struct dualsense_output_report_bt) == DS_OUTPUT_REPORT_BT_SIZE);
+
+struct dualsense_output_report_usb {
+	uint8_t report_id; /* 0x02 */
+	struct dualsense_output_report_common common;
+	uint8_t reserved[15];
+} __packed;
+static_assert(sizeof(struct dualsense_output_report_usb) == DS_OUTPUT_REPORT_USB_SIZE);
+
+/*
+ * The DualSense has a main output report used to control most features. It is
+ * largely the same between Bluetooth and USB except for different headers and CRC.
+ * This structure hide the differences between the two to simplify sending output reports.
+ */
+struct dualsense_output_report {
+	uint8_t *data; /* Start of data */
+	uint8_t len; /* Size of output report */
+
+	/* Points to Bluetooth data payload in case for a Bluetooth report else NULL. */
+	struct dualsense_output_report_bt *bt;
+	/* Points to USB data payload in case for a USB report else NULL. */
+	struct dualsense_output_report_usb *usb;
+	/* Points to common section of report, so past any headers. */
+	struct dualsense_output_report_common *common;
+};
+
+/*
+ * Common gamepad buttons across DualShock 3 / 4 and DualSense.
+ * Note: for device with a touchpad, touchpad button is not included
+ *        as it will be part of the touchpad device.
+ */
+static const int ps_gamepad_buttons[] = {
+	BTN_WEST, /* Square */
+	BTN_NORTH, /* Triangle */
+	BTN_EAST, /* Circle */
+	BTN_SOUTH, /* Cross */
+	BTN_TL, /* L1 */
+	BTN_TR, /* R1 */
+	BTN_TL2, /* L2 */
+	BTN_TR2, /* R2 */
+	BTN_SELECT, /* Create (PS5) / Share (PS4) */
+	BTN_START, /* Option */
+	BTN_THUMBL, /* L3 */
+	BTN_THUMBR, /* R3 */
+	BTN_MODE, /* PS Home */
+};
+
+static const struct {int x; int y; } ps_gamepad_hat_mapping[] = {
+	{0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1},
+	{0, 0},
+};
+
+/*
+ * Add a new ps_device to ps_devices if it doesn't exist.
+ * Return error on duplicate device, which can happen if the same
+ * device is connected using both Bluetooth and USB.
+ */
+static int ps_devices_list_add(struct ps_device *dev)
+{
+	struct ps_device *entry;
+
+	mutex_lock(&ps_devices_lock);
+	list_for_each_entry(entry, &ps_devices_list, list) {
+		if (!memcmp(entry->mac_address, dev->mac_address, sizeof(dev->mac_address))) {
+			hid_err(dev->hdev, "Duplicate device found for MAC address %pMR.\n",
+					dev->mac_address);
+			mutex_unlock(&ps_devices_lock);
+			return -EEXIST;
+		}
+	}
+
+	list_add_tail(&dev->list, &ps_devices_list);
+	mutex_unlock(&ps_devices_lock);
+	return 0;
+}
+
+static int ps_devices_list_remove(struct ps_device *dev)
+{
+	mutex_lock(&ps_devices_lock);
+	list_del(&dev->list);
+	mutex_unlock(&ps_devices_lock);
+	return 0;
+}
+
+static int ps_device_set_player_id(struct ps_device *dev)
+{
+	int ret = ida_alloc(&ps_player_id_allocator, GFP_KERNEL);
+
+	if (ret < 0)
+		return ret;
+
+	dev->player_id = ret;
+	return 0;
+}
+
+static void ps_device_release_player_id(struct ps_device *dev)
+{
+	ida_free(&ps_player_id_allocator, dev->player_id);
+
+	dev->player_id = U32_MAX;
+}
+
+static struct input_dev *ps_allocate_input_dev(struct hid_device *hdev, const char *name_suffix)
+{
+	struct input_dev *input_dev;
+
+	input_dev = devm_input_allocate_device(&hdev->dev);
+	if (!input_dev)
+		return ERR_PTR(-ENOMEM);
+
+	input_dev->id.bustype = hdev->bus;
+	input_dev->id.vendor = hdev->vendor;
+	input_dev->id.product = hdev->product;
+	input_dev->id.version = hdev->version;
+	input_dev->uniq = hdev->uniq;
+
+	if (name_suffix) {
+		input_dev->name = devm_kasprintf(&hdev->dev, GFP_KERNEL, "%s %s", hdev->name,
+				name_suffix);
+		if (!input_dev->name)
+			return ERR_PTR(-ENOMEM);
+	} else {
+		input_dev->name = hdev->name;
+	}
+
+	input_set_drvdata(input_dev, hdev);
+
+	return input_dev;
+}
+
+static enum power_supply_property ps_power_supply_props[] = {
+	POWER_SUPPLY_PROP_STATUS,
+	POWER_SUPPLY_PROP_PRESENT,
+	POWER_SUPPLY_PROP_CAPACITY,
+	POWER_SUPPLY_PROP_SCOPE,
+};
+
+static int ps_battery_get_property(struct power_supply *psy,
+		enum power_supply_property psp,
+		union power_supply_propval *val)
+{
+	struct ps_device *dev = power_supply_get_drvdata(psy);
+	uint8_t battery_capacity;
+	int battery_status;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	battery_capacity = dev->battery_capacity;
+	battery_status = dev->battery_status;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	switch (psp) {
+	case POWER_SUPPLY_PROP_STATUS:
+		val->intval = battery_status;
+		break;
+	case POWER_SUPPLY_PROP_PRESENT:
+		val->intval = 1;
+		break;
+	case POWER_SUPPLY_PROP_CAPACITY:
+		val->intval = battery_capacity;
+		break;
+	case POWER_SUPPLY_PROP_SCOPE:
+		val->intval = POWER_SUPPLY_SCOPE_DEVICE;
+		break;
+	default:
+		ret = -EINVAL;
+		break;
+	}
+
+	return ret;
+}
+
+static int ps_device_register_battery(struct ps_device *dev)
+{
+	struct power_supply *battery;
+	struct power_supply_config battery_cfg = { .drv_data = dev };
+	int ret;
+
+	dev->battery_desc.type = POWER_SUPPLY_TYPE_BATTERY;
+	dev->battery_desc.properties = ps_power_supply_props;
+	dev->battery_desc.num_properties = ARRAY_SIZE(ps_power_supply_props);
+	dev->battery_desc.get_property = ps_battery_get_property;
+	dev->battery_desc.name = devm_kasprintf(&dev->hdev->dev, GFP_KERNEL,
+			"ps-controller-battery-%pMR", dev->mac_address);
+	if (!dev->battery_desc.name)
+		return -ENOMEM;
+
+	battery = devm_power_supply_register(&dev->hdev->dev, &dev->battery_desc, &battery_cfg);
+	if (IS_ERR(battery)) {
+		ret = PTR_ERR(battery);
+		hid_err(dev->hdev, "Unable to register battery device: %d\n", ret);
+		return ret;
+	}
+	dev->battery = battery;
+
+	ret = power_supply_powers(dev->battery, &dev->hdev->dev);
+	if (ret) {
+		hid_err(dev->hdev, "Unable to activate battery device: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+/* Compute crc32 of HID data and compare against expected CRC. */
+static bool ps_check_crc32(uint8_t seed, uint8_t *data, size_t len, uint32_t report_crc)
+{
+	uint32_t crc;
+
+	crc = crc32_le(0xFFFFFFFF, &seed, 1);
+	crc = ~crc32_le(crc, data, len);
+
+	return crc == report_crc;
+}
+
+static struct input_dev *ps_gamepad_create(struct hid_device *hdev,
+		int (*play_effect)(struct input_dev *, void *, struct ff_effect *))
+{
+	struct input_dev *gamepad;
+	unsigned int i;
+	int ret;
+
+	gamepad = ps_allocate_input_dev(hdev, NULL);
+	if (IS_ERR(gamepad))
+		return ERR_CAST(gamepad);
+
+	input_set_abs_params(gamepad, ABS_X, 0, 255, 0, 0);
+	input_set_abs_params(gamepad, ABS_Y, 0, 255, 0, 0);
+	input_set_abs_params(gamepad, ABS_Z, 0, 255, 0, 0);
+	input_set_abs_params(gamepad, ABS_RX, 0, 255, 0, 0);
+	input_set_abs_params(gamepad, ABS_RY, 0, 255, 0, 0);
+	input_set_abs_params(gamepad, ABS_RZ, 0, 255, 0, 0);
+
+	input_set_abs_params(gamepad, ABS_HAT0X, -1, 1, 0, 0);
+	input_set_abs_params(gamepad, ABS_HAT0Y, -1, 1, 0, 0);
+
+	for (i = 0; i < ARRAY_SIZE(ps_gamepad_buttons); i++)
+		input_set_capability(gamepad, EV_KEY, ps_gamepad_buttons[i]);
+
+#if IS_ENABLED(CONFIG_PLAYSTATION_FF)
+	if (play_effect) {
+		input_set_capability(gamepad, EV_FF, FF_RUMBLE);
+		input_ff_create_memless(gamepad, NULL, play_effect);
+	}
+#endif
+
+	ret = input_register_device(gamepad);
+	if (ret)
+		return ERR_PTR(ret);
+
+	return gamepad;
+}
+
+static int ps_get_report(struct hid_device *hdev, uint8_t report_id, uint8_t *buf, size_t size)
+{
+	int ret;
+
+	ret = hid_hw_raw_request(hdev, report_id, buf, size, HID_FEATURE_REPORT,
+				 HID_REQ_GET_REPORT);
+	if (ret < 0) {
+		hid_err(hdev, "Failed to retrieve feature with reportID %d: %d\n", report_id, ret);
+		return ret;
+	}
+
+	if (ret != size) {
+		hid_err(hdev, "Invalid byte count transferred, expected %zu got %d\n", size, ret);
+		return -EINVAL;
+	}
+
+	if (buf[0] != report_id) {
+		hid_err(hdev, "Invalid reportID received, expected %d got %d\n", report_id, buf[0]);
+		return -EINVAL;
+	}
+
+	if (hdev->bus == BUS_BLUETOOTH) {
+		/* Last 4 bytes contains crc32. */
+		uint8_t crc_offset = size - 4;
+		uint32_t report_crc = get_unaligned_le32(&buf[crc_offset]);
+
+		if (!ps_check_crc32(PS_FEATURE_CRC32_SEED, buf, crc_offset, report_crc)) {
+			hid_err(hdev, "CRC check failed for reportID=%d\n", report_id);
+			return -EILSEQ;
+		}
+	}
+
+	return 0;
+}
+
+static struct input_dev *ps_sensors_create(struct hid_device *hdev, int accel_range, int accel_res,
+		int gyro_range, int gyro_res)
+{
+	struct input_dev *sensors;
+	int ret;
+
+	sensors = ps_allocate_input_dev(hdev, "Motion Sensors");
+	if (IS_ERR(sensors))
+		return ERR_CAST(sensors);
+
+	__set_bit(INPUT_PROP_ACCELEROMETER, sensors->propbit);
+	__set_bit(EV_MSC, sensors->evbit);
+	__set_bit(MSC_TIMESTAMP, sensors->mscbit);
+
+	/* Accelerometer */
+	input_set_abs_params(sensors, ABS_X, -accel_range, accel_range, 16, 0);
+	input_set_abs_params(sensors, ABS_Y, -accel_range, accel_range, 16, 0);
+	input_set_abs_params(sensors, ABS_Z, -accel_range, accel_range, 16, 0);
+	input_abs_set_res(sensors, ABS_X, accel_res);
+	input_abs_set_res(sensors, ABS_Y, accel_res);
+	input_abs_set_res(sensors, ABS_Z, accel_res);
+
+	/* Gyroscope */
+	input_set_abs_params(sensors, ABS_RX, -gyro_range, gyro_range, 16, 0);
+	input_set_abs_params(sensors, ABS_RY, -gyro_range, gyro_range, 16, 0);
+	input_set_abs_params(sensors, ABS_RZ, -gyro_range, gyro_range, 16, 0);
+	input_abs_set_res(sensors, ABS_RX, gyro_res);
+	input_abs_set_res(sensors, ABS_RY, gyro_res);
+	input_abs_set_res(sensors, ABS_RZ, gyro_res);
+
+	ret = input_register_device(sensors);
+	if (ret)
+		return ERR_PTR(ret);
+
+	return sensors;
+}
+
+static struct input_dev *ps_touchpad_create(struct hid_device *hdev, int width, int height,
+		unsigned int num_contacts)
+{
+	struct input_dev *touchpad;
+	int ret;
+
+	touchpad = ps_allocate_input_dev(hdev, "Touchpad");
+	if (IS_ERR(touchpad))
+		return ERR_CAST(touchpad);
+
+	/* Map button underneath touchpad to BTN_LEFT. */
+	input_set_capability(touchpad, EV_KEY, BTN_LEFT);
+	__set_bit(INPUT_PROP_BUTTONPAD, touchpad->propbit);
+
+	input_set_abs_params(touchpad, ABS_MT_POSITION_X, 0, width - 1, 0, 0);
+	input_set_abs_params(touchpad, ABS_MT_POSITION_Y, 0, height - 1, 0, 0);
+
+	ret = input_mt_init_slots(touchpad, num_contacts, INPUT_MT_POINTER);
+	if (ret)
+		return ERR_PTR(ret);
+
+	ret = input_register_device(touchpad);
+	if (ret)
+		return ERR_PTR(ret);
+
+	return touchpad;
+}
+
+static ssize_t firmware_version_show(struct device *dev,
+				struct device_attribute
+				*attr, char *buf)
+{
+	struct hid_device *hdev = to_hid_device(dev);
+	struct ps_device *ps_dev = hid_get_drvdata(hdev);
+
+	return snprintf(buf, PAGE_SIZE, "0x%08x\n", ps_dev->fw_version);
+}
+
+static DEVICE_ATTR_RO(firmware_version);
+
+static ssize_t hardware_version_show(struct device *dev,
+				struct device_attribute
+				*attr, char *buf)
+{
+	struct hid_device *hdev = to_hid_device(dev);
+	struct ps_device *ps_dev = hid_get_drvdata(hdev);
+
+	return snprintf(buf, PAGE_SIZE, "0x%08x\n", ps_dev->hw_version);
+}
+
+static DEVICE_ATTR_RO(hardware_version);
+
+static struct attribute *ps_device_attributes[] = {
+	&dev_attr_firmware_version.attr,
+	&dev_attr_hardware_version.attr,
+	NULL
+};
+
+static const struct attribute_group ps_device_attribute_group = {
+	.attrs = ps_device_attributes,
+};
+
+static int dualsense_get_calibration_data(struct dualsense *ds)
+{
+	short gyro_pitch_bias, gyro_pitch_plus, gyro_pitch_minus;
+	short gyro_yaw_bias, gyro_yaw_plus, gyro_yaw_minus;
+	short gyro_roll_bias, gyro_roll_plus, gyro_roll_minus;
+	short gyro_speed_plus, gyro_speed_minus;
+	short acc_x_plus, acc_x_minus;
+	short acc_y_plus, acc_y_minus;
+	short acc_z_plus, acc_z_minus;
+	int speed_2x;
+	int range_2g;
+	int ret = 0;
+	uint8_t *buf;
+
+	buf = kzalloc(DS_FEATURE_REPORT_CALIBRATION_SIZE, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_CALIBRATION, buf,
+			DS_FEATURE_REPORT_CALIBRATION_SIZE);
+	if (ret) {
+		hid_err(ds->base.hdev, "Failed to retrieve DualSense calibration info: %d\n", ret);
+		goto err_free;
+	}
+
+	gyro_pitch_bias  = get_unaligned_le16(&buf[1]);
+	gyro_yaw_bias    = get_unaligned_le16(&buf[3]);
+	gyro_roll_bias   = get_unaligned_le16(&buf[5]);
+	gyro_pitch_plus  = get_unaligned_le16(&buf[7]);
+	gyro_pitch_minus = get_unaligned_le16(&buf[9]);
+	gyro_yaw_plus    = get_unaligned_le16(&buf[11]);
+	gyro_yaw_minus   = get_unaligned_le16(&buf[13]);
+	gyro_roll_plus   = get_unaligned_le16(&buf[15]);
+	gyro_roll_minus  = get_unaligned_le16(&buf[17]);
+	gyro_speed_plus  = get_unaligned_le16(&buf[19]);
+	gyro_speed_minus = get_unaligned_le16(&buf[21]);
+	acc_x_plus       = get_unaligned_le16(&buf[23]);
+	acc_x_minus      = get_unaligned_le16(&buf[25]);
+	acc_y_plus       = get_unaligned_le16(&buf[27]);
+	acc_y_minus      = get_unaligned_le16(&buf[29]);
+	acc_z_plus       = get_unaligned_le16(&buf[31]);
+	acc_z_minus      = get_unaligned_le16(&buf[33]);
+
+	/*
+	 * Set gyroscope calibration and normalization parameters.
+	 * Data values will be normalized to 1/DS_GYRO_RES_PER_DEG_S degree/s.
+	 */
+	speed_2x = (gyro_speed_plus + gyro_speed_minus);
+	ds->gyro_calib_data[0].abs_code = ABS_RX;
+	ds->gyro_calib_data[0].bias = gyro_pitch_bias;
+	ds->gyro_calib_data[0].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S;
+	ds->gyro_calib_data[0].sens_denom = gyro_pitch_plus - gyro_pitch_minus;
+
+	ds->gyro_calib_data[1].abs_code = ABS_RY;
+	ds->gyro_calib_data[1].bias = gyro_yaw_bias;
+	ds->gyro_calib_data[1].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S;
+	ds->gyro_calib_data[1].sens_denom = gyro_yaw_plus - gyro_yaw_minus;
+
+	ds->gyro_calib_data[2].abs_code = ABS_RZ;
+	ds->gyro_calib_data[2].bias = gyro_roll_bias;
+	ds->gyro_calib_data[2].sens_numer = speed_2x*DS_GYRO_RES_PER_DEG_S;
+	ds->gyro_calib_data[2].sens_denom = gyro_roll_plus - gyro_roll_minus;
+
+	/*
+	 * Set accelerometer calibration and normalization parameters.
+	 * Data values will be normalized to 1/DS_ACC_RES_PER_G g.
+	 */
+	range_2g = acc_x_plus - acc_x_minus;
+	ds->accel_calib_data[0].abs_code = ABS_X;
+	ds->accel_calib_data[0].bias = acc_x_plus - range_2g / 2;
+	ds->accel_calib_data[0].sens_numer = 2*DS_ACC_RES_PER_G;
+	ds->accel_calib_data[0].sens_denom = range_2g;
+
+	range_2g = acc_y_plus - acc_y_minus;
+	ds->accel_calib_data[1].abs_code = ABS_Y;
+	ds->accel_calib_data[1].bias = acc_y_plus - range_2g / 2;
+	ds->accel_calib_data[1].sens_numer = 2*DS_ACC_RES_PER_G;
+	ds->accel_calib_data[1].sens_denom = range_2g;
+
+	range_2g = acc_z_plus - acc_z_minus;
+	ds->accel_calib_data[2].abs_code = ABS_Z;
+	ds->accel_calib_data[2].bias = acc_z_plus - range_2g / 2;
+	ds->accel_calib_data[2].sens_numer = 2*DS_ACC_RES_PER_G;
+	ds->accel_calib_data[2].sens_denom = range_2g;
+
+err_free:
+	kfree(buf);
+	return ret;
+}
+
+static int dualsense_get_firmware_info(struct dualsense *ds)
+{
+	uint8_t *buf;
+	int ret;
+
+	buf = kzalloc(DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_FIRMWARE_INFO, buf,
+			DS_FEATURE_REPORT_FIRMWARE_INFO_SIZE);
+	if (ret) {
+		hid_err(ds->base.hdev, "Failed to retrieve DualSense firmware info: %d\n", ret);
+		goto err_free;
+	}
+
+	ds->base.hw_version = get_unaligned_le32(&buf[24]);
+	ds->base.fw_version = get_unaligned_le32(&buf[28]);
+
+err_free:
+	kfree(buf);
+	return ret;
+}
+
+static int dualsense_get_mac_address(struct dualsense *ds)
+{
+	uint8_t *buf;
+	int ret = 0;
+
+	buf = kzalloc(DS_FEATURE_REPORT_PAIRING_INFO_SIZE, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	ret = ps_get_report(ds->base.hdev, DS_FEATURE_REPORT_PAIRING_INFO, buf,
+			DS_FEATURE_REPORT_PAIRING_INFO_SIZE);
+	if (ret) {
+		hid_err(ds->base.hdev, "Failed to retrieve DualSense pairing info: %d\n", ret);
+		goto err_free;
+	}
+
+	memcpy(ds->base.mac_address, &buf[1], sizeof(ds->base.mac_address));
+
+err_free:
+	kfree(buf);
+	return ret;
+}
+
+static void dualsense_init_output_report(struct dualsense *ds, struct dualsense_output_report *rp,
+		void *buf)
+{
+	struct hid_device *hdev = ds->base.hdev;
+
+	if (hdev->bus == BUS_BLUETOOTH) {
+		struct dualsense_output_report_bt *bt = buf;
+
+		memset(bt, 0, sizeof(*bt));
+		bt->report_id = DS_OUTPUT_REPORT_BT;
+		bt->tag = DS_OUTPUT_TAG; /* Tag must be set. Exact meaning is unclear. */
+
+		/*
+		 * Highest 4-bit is a sequence number, which needs to be increased
+		 * every report. Lowest 4-bit is tag and can be zero for now.
+		 */
+		bt->seq_tag = (ds->output_seq << 4) | 0x0;
+		if (++ds->output_seq == 16)
+			ds->output_seq = 0;
+
+		rp->data = buf;
+		rp->len = sizeof(*bt);
+		rp->bt = bt;
+		rp->usb = NULL;
+		rp->common = &bt->common;
+	} else { /* USB */
+		struct dualsense_output_report_usb *usb = buf;
+
+		memset(usb, 0, sizeof(*usb));
+		usb->report_id = DS_OUTPUT_REPORT_USB;
+
+		rp->data = buf;
+		rp->len = sizeof(*usb);
+		rp->bt = NULL;
+		rp->usb = usb;
+		rp->common = &usb->common;
+	}
+}
+
+/*
+ * Helper function to send DualSense output reports. Applies a CRC at the end of a report
+ * for Bluetooth reports.
+ */
+static void dualsense_send_output_report(struct dualsense *ds,
+		struct dualsense_output_report *report)
+{
+	struct hid_device *hdev = ds->base.hdev;
+
+	/* Bluetooth packets need to be signed with a CRC in the last 4 bytes. */
+	if (report->bt) {
+		uint32_t crc;
+		uint8_t seed = PS_OUTPUT_CRC32_SEED;
+
+		crc = crc32_le(0xFFFFFFFF, &seed, 1);
+		crc = ~crc32_le(crc, report->data, report->len - 4);
+
+		report->bt->crc32 = cpu_to_le32(crc);
+	}
+
+	hid_hw_output_report(hdev, report->data, report->len);
+}
+
+static void dualsense_output_worker(struct work_struct *work)
+{
+	struct dualsense *ds = container_of(work, struct dualsense, output_worker);
+	struct dualsense_output_report report;
+	struct dualsense_output_report_common *common;
+	unsigned long flags;
+
+	dualsense_init_output_report(ds, &report, ds->output_report_dmabuf);
+	common = report.common;
+
+	spin_lock_irqsave(&ds->base.lock, flags);
+
+	if (ds->update_rumble) {
+		/* Select classic rumble style haptics and enable it. */
+		common->valid_flag0 |= DS_OUTPUT_VALID_FLAG0_HAPTICS_SELECT;
+		common->valid_flag0 |= DS_OUTPUT_VALID_FLAG0_COMPATIBLE_VIBRATION;
+		common->motor_left = ds->motor_left;
+		common->motor_right = ds->motor_right;
+		ds->update_rumble = false;
+	}
+
+	if (ds->update_lightbar) {
+		common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_LIGHTBAR_CONTROL_ENABLE;
+		common->lightbar_red = ds->lightbar_red;
+		common->lightbar_green = ds->lightbar_green;
+		common->lightbar_blue = ds->lightbar_blue;
+
+		ds->update_lightbar = false;
+	}
+
+	if (ds->update_player_leds) {
+		common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_PLAYER_INDICATOR_CONTROL_ENABLE;
+		common->player_leds = ds->player_leds_state;
+
+		ds->update_player_leds = false;
+	}
+
+	if (ds->update_mic_mute) {
+		common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_MIC_MUTE_LED_CONTROL_ENABLE;
+		common->mute_button_led = ds->mic_muted;
+
+		if (ds->mic_muted) {
+			/* Disable microphone */
+			common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE;
+			common->power_save_control |= DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE;
+		} else {
+			/* Enable microphone */
+			common->valid_flag1 |= DS_OUTPUT_VALID_FLAG1_POWER_SAVE_CONTROL_ENABLE;
+			common->power_save_control &= ~DS_OUTPUT_POWER_SAVE_CONTROL_MIC_MUTE;
+		}
+
+		ds->update_mic_mute = false;
+	}
+
+	spin_unlock_irqrestore(&ds->base.lock, flags);
+
+	dualsense_send_output_report(ds, &report);
+}
+
+static int dualsense_parse_report(struct ps_device *ps_dev, struct hid_report *report,
+		u8 *data, int size)
+{
+	struct hid_device *hdev = ps_dev->hdev;
+	struct dualsense *ds = container_of(ps_dev, struct dualsense, base);
+	struct dualsense_input_report *ds_report;
+	uint8_t battery_data, battery_capacity, charging_status, value;
+	int battery_status;
+	uint32_t sensor_timestamp;
+	bool btn_mic_state;
+	unsigned long flags;
+	int i;
+
+	/*
+	 * DualSense in USB uses the full HID report for reportID 1, but
+	 * Bluetooth uses a minimal HID report for reportID 1 and reports
+	 * the full report using reportID 49.
+	 */
+	if (hdev->bus == BUS_USB && report->id == DS_INPUT_REPORT_USB &&
+			size == DS_INPUT_REPORT_USB_SIZE) {
+		ds_report = (struct dualsense_input_report *)&data[1];
+	} else if (hdev->bus == BUS_BLUETOOTH && report->id == DS_INPUT_REPORT_BT &&
+			size == DS_INPUT_REPORT_BT_SIZE) {
+		/* Last 4 bytes of input report contain crc32 */
+		uint32_t report_crc = get_unaligned_le32(&data[size - 4]);
+
+		if (!ps_check_crc32(PS_INPUT_CRC32_SEED, data, size - 4, report_crc)) {
+			hid_err(hdev, "DualSense input CRC's check failed\n");
+			return -EILSEQ;
+		}
+
+		ds_report = (struct dualsense_input_report *)&data[2];
+	} else {
+		hid_err(hdev, "Unhandled reportID=%d\n", report->id);
+		return -1;
+	}
+
+	input_report_abs(ds->gamepad, ABS_X,  ds_report->x);
+	input_report_abs(ds->gamepad, ABS_Y,  ds_report->y);
+	input_report_abs(ds->gamepad, ABS_RX, ds_report->rx);
+	input_report_abs(ds->gamepad, ABS_RY, ds_report->ry);
+	input_report_abs(ds->gamepad, ABS_Z,  ds_report->z);
+	input_report_abs(ds->gamepad, ABS_RZ, ds_report->rz);
+
+	value = ds_report->buttons[0] & DS_BUTTONS0_HAT_SWITCH;
+	if (value >= ARRAY_SIZE(ps_gamepad_hat_mapping))
+		value = 8; /* center */
+	input_report_abs(ds->gamepad, ABS_HAT0X, ps_gamepad_hat_mapping[value].x);
+	input_report_abs(ds->gamepad, ABS_HAT0Y, ps_gamepad_hat_mapping[value].y);
+
+	input_report_key(ds->gamepad, BTN_WEST,   ds_report->buttons[0] & DS_BUTTONS0_SQUARE);
+	input_report_key(ds->gamepad, BTN_SOUTH,  ds_report->buttons[0] & DS_BUTTONS0_CROSS);
+	input_report_key(ds->gamepad, BTN_EAST,   ds_report->buttons[0] & DS_BUTTONS0_CIRCLE);
+	input_report_key(ds->gamepad, BTN_NORTH,  ds_report->buttons[0] & DS_BUTTONS0_TRIANGLE);
+	input_report_key(ds->gamepad, BTN_TL,     ds_report->buttons[1] & DS_BUTTONS1_L1);
+	input_report_key(ds->gamepad, BTN_TR,     ds_report->buttons[1] & DS_BUTTONS1_R1);
+	input_report_key(ds->gamepad, BTN_TL2,    ds_report->buttons[1] & DS_BUTTONS1_L2);
+	input_report_key(ds->gamepad, BTN_TR2,    ds_report->buttons[1] & DS_BUTTONS1_R2);
+	input_report_key(ds->gamepad, BTN_SELECT, ds_report->buttons[1] & DS_BUTTONS1_CREATE);
+	input_report_key(ds->gamepad, BTN_START,  ds_report->buttons[1] & DS_BUTTONS1_OPTIONS);
+	input_report_key(ds->gamepad, BTN_THUMBL, ds_report->buttons[1] & DS_BUTTONS1_L3);
+	input_report_key(ds->gamepad, BTN_THUMBR, ds_report->buttons[1] & DS_BUTTONS1_R3);
+	input_report_key(ds->gamepad, BTN_MODE,   ds_report->buttons[2] & DS_BUTTONS2_PS_HOME);
+	input_sync(ds->gamepad);
+
+	/*
+	 * The DualSense has an internal microphone, which can be muted through a mute button
+	 * on the device. The driver is expected to read the button state and program the device
+	 * to mute/unmute audio at the hardware level.
+	 */
+	btn_mic_state = !!(ds_report->buttons[2] & DS_BUTTONS2_MIC_MUTE);
+	if (btn_mic_state && !ds->last_btn_mic_state) {
+		spin_lock_irqsave(&ps_dev->lock, flags);
+		ds->update_mic_mute = true;
+		ds->mic_muted = !ds->mic_muted; /* toggle */
+		spin_unlock_irqrestore(&ps_dev->lock, flags);
+
+		/* Schedule updating of microphone state at hardware level. */
+		schedule_work(&ds->output_worker);
+	}
+	ds->last_btn_mic_state = btn_mic_state;
+
+	/* Parse and calibrate gyroscope data. */
+	for (i = 0; i < ARRAY_SIZE(ds_report->gyro); i++) {
+		int raw_data = (short)le16_to_cpu(ds_report->gyro[i]);
+		int calib_data = mult_frac(ds->gyro_calib_data[i].sens_numer,
+					   raw_data - ds->gyro_calib_data[i].bias,
+					   ds->gyro_calib_data[i].sens_denom);
+
+		input_report_abs(ds->sensors, ds->gyro_calib_data[i].abs_code, calib_data);
+	}
+
+	/* Parse and calibrate accelerometer data. */
+	for (i = 0; i < ARRAY_SIZE(ds_report->accel); i++) {
+		int raw_data = (short)le16_to_cpu(ds_report->accel[i]);
+		int calib_data = mult_frac(ds->accel_calib_data[i].sens_numer,
+					   raw_data - ds->accel_calib_data[i].bias,
+					   ds->accel_calib_data[i].sens_denom);
+
+		input_report_abs(ds->sensors, ds->accel_calib_data[i].abs_code, calib_data);
+	}
+
+	/* Convert timestamp (in 0.33us unit) to timestamp_us */
+	sensor_timestamp = le32_to_cpu(ds_report->sensor_timestamp);
+	if (!ds->sensor_timestamp_initialized) {
+		ds->sensor_timestamp_us = DIV_ROUND_CLOSEST(sensor_timestamp, 3);
+		ds->sensor_timestamp_initialized = true;
+	} else {
+		uint32_t delta;
+
+		if (ds->prev_sensor_timestamp > sensor_timestamp)
+			delta = (U32_MAX - ds->prev_sensor_timestamp + sensor_timestamp + 1);
+		else
+			delta = sensor_timestamp - ds->prev_sensor_timestamp;
+		ds->sensor_timestamp_us += DIV_ROUND_CLOSEST(delta, 3);
+	}
+	ds->prev_sensor_timestamp = sensor_timestamp;
+	input_event(ds->sensors, EV_MSC, MSC_TIMESTAMP, ds->sensor_timestamp_us);
+	input_sync(ds->sensors);
+
+	for (i = 0; i < ARRAY_SIZE(ds_report->points); i++) {
+		struct dualsense_touch_point *point = &ds_report->points[i];
+		bool active = (point->contact & DS_TOUCH_POINT_INACTIVE) ? false : true;
+
+		input_mt_slot(ds->touchpad, i);
+		input_mt_report_slot_state(ds->touchpad, MT_TOOL_FINGER, active);
+
+		if (active) {
+			int x = (point->x_hi << 8) | point->x_lo;
+			int y = (point->y_hi << 4) | point->y_lo;
+
+			input_report_abs(ds->touchpad, ABS_MT_POSITION_X, x);
+			input_report_abs(ds->touchpad, ABS_MT_POSITION_Y, y);
+		}
+	}
+	input_mt_sync_frame(ds->touchpad);
+	input_report_key(ds->touchpad, BTN_LEFT, ds_report->buttons[2] & DS_BUTTONS2_TOUCHPAD);
+	input_sync(ds->touchpad);
+
+	battery_data = ds_report->status & DS_STATUS_BATTERY_CAPACITY;
+	charging_status = (ds_report->status & DS_STATUS_CHARGING) >> DS_STATUS_CHARGING_SHIFT;
+
+	switch (charging_status) {
+	case 0x0:
+		/*
+		 * Each unit of battery data corresponds to 10%
+		 * 0 = 0-9%, 1 = 10-19%, .. and 10 = 100%
+		 */
+		battery_capacity = min(battery_data * 10 + 5, 100);
+		battery_status = POWER_SUPPLY_STATUS_DISCHARGING;
+		break;
+	case 0x1:
+		battery_capacity = min(battery_data * 10 + 5, 100);
+		battery_status = POWER_SUPPLY_STATUS_CHARGING;
+		break;
+	case 0x2:
+		battery_capacity = 100;
+		battery_status = POWER_SUPPLY_STATUS_FULL;
+		break;
+	case 0xa: /* voltage or temperature out of range */
+	case 0xb: /* temperature error */
+		battery_capacity = 0;
+		battery_status = POWER_SUPPLY_STATUS_NOT_CHARGING;
+		break;
+	case 0xf: /* charging error */
+	default:
+		battery_capacity = 0;
+		battery_status = POWER_SUPPLY_STATUS_UNKNOWN;
+	}
+
+	spin_lock_irqsave(&ps_dev->lock, flags);
+	ps_dev->battery_capacity = battery_capacity;
+	ps_dev->battery_status = battery_status;
+	spin_unlock_irqrestore(&ps_dev->lock, flags);
+
+	return 0;
+}
+
+static int dualsense_play_effect(struct input_dev *dev, void *data, struct ff_effect *effect)
+{
+	struct hid_device *hdev = input_get_drvdata(dev);
+	struct dualsense *ds = hid_get_drvdata(hdev);
+	unsigned long flags;
+
+	if (effect->type != FF_RUMBLE)
+		return 0;
+
+	spin_lock_irqsave(&ds->base.lock, flags);
+	ds->update_rumble = true;
+	ds->motor_left = effect->u.rumble.strong_magnitude / 256;
+	ds->motor_right = effect->u.rumble.weak_magnitude / 256;
+	spin_unlock_irqrestore(&ds->base.lock, flags);
+
+	schedule_work(&ds->output_worker);
+	return 0;
+}
+
+static int dualsense_reset_leds(struct dualsense *ds)
+{
+	struct dualsense_output_report report;
+	uint8_t *buf;
+
+	buf = kzalloc(sizeof(struct dualsense_output_report_bt), GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	dualsense_init_output_report(ds, &report, buf);
+	/*
+	 * On Bluetooth the DualSense outputs an animation on the lightbar
+	 * during startup and maintains a color afterwards. We need to explicitly
+	 * reconfigure the lightbar before we can do any programming later on.
+	 * In USB the lightbar is not on by default, but redoing the setup there
+	 * doesn't hurt.
+	 */
+	report.common->valid_flag2 = DS_OUTPUT_VALID_FLAG2_LIGHTBAR_SETUP_CONTROL_ENABLE;
+	report.common->lightbar_setup = DS_OUTPUT_LIGHTBAR_SETUP_LIGHT_OUT; /* Fade light out. */
+	dualsense_send_output_report(ds, &report);
+
+	kfree(buf);
+	return 0;
+}
+
+static void dualsense_set_lightbar(struct dualsense *ds, uint8_t red, uint8_t green, uint8_t blue)
+{
+	ds->update_lightbar = true;
+	ds->lightbar_red = red;
+	ds->lightbar_green = green;
+	ds->lightbar_blue = blue;
+
+	schedule_work(&ds->output_worker);
+}
+
+static void dualsense_set_player_leds(struct dualsense *ds)
+{
+	/*
+	 * The DualSense controller has a row of 5 LEDs used for player ids.
+	 * Behavior on the PlayStation 5 console is to center the player id
+	 * across the LEDs, so e.g. player 1 would be "--x--" with x being 'on'.
+	 * Follow a similar mapping here.
+	 */
+	static const int player_ids[5] = {
+		BIT(2),
+		BIT(3) | BIT(1),
+		BIT(4) | BIT(2) | BIT(0),
+		BIT(4) | BIT(3) | BIT(1) | BIT(0),
+		BIT(4) | BIT(3) | BIT(2) | BIT(1) | BIT(0)
+	};
+
+	uint8_t player_id = ds->base.player_id % ARRAY_SIZE(player_ids);
+
+	ds->update_player_leds = true;
+	ds->player_leds_state = player_ids[player_id];
+	schedule_work(&ds->output_worker);
+}
+
+static struct ps_device *dualsense_create(struct hid_device *hdev)
+{
+	struct dualsense *ds;
+	struct ps_device *ps_dev;
+	uint8_t max_output_report_size;
+	int ret;
+
+	ds = devm_kzalloc(&hdev->dev, sizeof(*ds), GFP_KERNEL);
+	if (!ds)
+		return ERR_PTR(-ENOMEM);
+
+	/*
+	 * Patch version to allow userspace to distinguish between
+	 * hid-generic vs hid-playstation axis and button mapping.
+	 */
+	hdev->version |= HID_PLAYSTATION_VERSION_PATCH;
+
+	ps_dev = &ds->base;
+	ps_dev->hdev = hdev;
+	spin_lock_init(&ps_dev->lock);
+	ps_dev->battery_capacity = 100; /* initial value until parse_report. */
+	ps_dev->battery_status = POWER_SUPPLY_STATUS_UNKNOWN;
+	ps_dev->parse_report = dualsense_parse_report;
+	INIT_WORK(&ds->output_worker, dualsense_output_worker);
+	hid_set_drvdata(hdev, ds);
+
+	max_output_report_size = sizeof(struct dualsense_output_report_bt);
+	ds->output_report_dmabuf = devm_kzalloc(&hdev->dev, max_output_report_size, GFP_KERNEL);
+	if (!ds->output_report_dmabuf)
+		return ERR_PTR(-ENOMEM);
+
+	ret = dualsense_get_mac_address(ds);
+	if (ret) {
+		hid_err(hdev, "Failed to get MAC address from DualSense\n");
+		return ERR_PTR(ret);
+	}
+	snprintf(hdev->uniq, sizeof(hdev->uniq), "%pMR", ds->base.mac_address);
+
+	ret = dualsense_get_firmware_info(ds);
+	if (ret) {
+		hid_err(hdev, "Failed to get firmware info from DualSense\n");
+		return ERR_PTR(ret);
+	}
+
+	ret = ps_devices_list_add(ps_dev);
+	if (ret)
+		return ERR_PTR(ret);
+
+	ret = dualsense_get_calibration_data(ds);
+	if (ret) {
+		hid_err(hdev, "Failed to get calibration data from DualSense\n");
+		goto err;
+	}
+
+	ds->gamepad = ps_gamepad_create(hdev, dualsense_play_effect);
+	if (IS_ERR(ds->gamepad)) {
+		ret = PTR_ERR(ds->gamepad);
+		goto err;
+	}
+
+	ds->sensors = ps_sensors_create(hdev, DS_ACC_RANGE, DS_ACC_RES_PER_G,
+			DS_GYRO_RANGE, DS_GYRO_RES_PER_DEG_S);
+	if (IS_ERR(ds->sensors)) {
+		ret = PTR_ERR(ds->sensors);
+		goto err;
+	}
+
+	ds->touchpad = ps_touchpad_create(hdev, DS_TOUCHPAD_WIDTH, DS_TOUCHPAD_HEIGHT, 2);
+	if (IS_ERR(ds->touchpad)) {
+		ret = PTR_ERR(ds->touchpad);
+		goto err;
+	}
+
+	ret = ps_device_register_battery(ps_dev);
+	if (ret)
+		goto err;
+
+	/*
+	 * The hardware may have control over the LEDs (e.g. in Bluetooth on startup).
+	 * Reset the LEDs (lightbar, mute, player leds), so we can control them
+	 * from software.
+	 */
+	ret = dualsense_reset_leds(ds);
+	if (ret)
+		goto err;
+
+	dualsense_set_lightbar(ds, 0, 0, 128); /* blue */
+
+	ret = ps_device_set_player_id(ps_dev);
+	if (ret) {
+		hid_err(hdev, "Failed to assign player id for DualSense: %d\n", ret);
+		goto err;
+	}
+
+	/* Set player LEDs to our player id. */
+	dualsense_set_player_leds(ds);
+
+	/*
+	 * Reporting hardware and firmware is important as there are frequent updates, which
+	 * can change behavior.
+	 */
+	hid_info(hdev, "Registered DualSense controller hw_version=0x%08x fw_version=0x%08x\n",
+			ds->base.hw_version, ds->base.fw_version);
+
+	return &ds->base;
+
+err:
+	ps_devices_list_remove(ps_dev);
+	return ERR_PTR(ret);
+}
+
+static int ps_raw_event(struct hid_device *hdev, struct hid_report *report,
+		u8 *data, int size)
+{
+	struct ps_device *dev = hid_get_drvdata(hdev);
+
+	if (dev && dev->parse_report)
+		return dev->parse_report(dev, report, data, size);
+
+	return 0;
+}
+
+static int ps_probe(struct hid_device *hdev, const struct hid_device_id *id)
+{
+	struct ps_device *dev;
+	int ret;
+
+	ret = hid_parse(hdev);
+	if (ret) {
+		hid_err(hdev, "Parse failed\n");
+		return ret;
+	}
+
+	ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW);
+	if (ret) {
+		hid_err(hdev, "Failed to start HID device\n");
+		return ret;
+	}
+
+	ret = hid_hw_open(hdev);
+	if (ret) {
+		hid_err(hdev, "Failed to open HID device\n");
+		goto err_stop;
+	}
+
+	if (hdev->product == USB_DEVICE_ID_SONY_PS5_CONTROLLER) {
+		dev = dualsense_create(hdev);
+		if (IS_ERR(dev)) {
+			hid_err(hdev, "Failed to create dualsense.\n");
+			ret = PTR_ERR(dev);
+			goto err_close;
+		}
+	}
+
+	ret = devm_device_add_group(&hdev->dev, &ps_device_attribute_group);
+	if (ret) {
+		hid_err(hdev, "Failed to register sysfs nodes.\n");
+		goto err_close;
+	}
+
+	return ret;
+
+err_close:
+	hid_hw_close(hdev);
+err_stop:
+	hid_hw_stop(hdev);
+	return ret;
+}
+
+static void ps_remove(struct hid_device *hdev)
+{
+	struct ps_device *dev = hid_get_drvdata(hdev);
+
+	ps_devices_list_remove(dev);
+	ps_device_release_player_id(dev);
+
+	hid_hw_close(hdev);
+	hid_hw_stop(hdev);
+}
+
+static const struct hid_device_id ps_devices[] = {
+	{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS5_CONTROLLER) },
+	{ }
+};
+MODULE_DEVICE_TABLE(hid, ps_devices);
+
+static struct hid_driver ps_driver = {
+	.name		= "playstation",
+	.id_table	= ps_devices,
+	.probe		= ps_probe,
+	.remove		= ps_remove,
+	.raw_event	= ps_raw_event,
+};
+
+static int __init ps_init(void)
+{
+	return hid_register_driver(&ps_driver);
+}
+
+static void __exit ps_exit(void)
+{
+	hid_unregister_driver(&ps_driver);
+	ida_destroy(&ps_player_id_allocator);
+}
+
+module_init(ps_init);
+module_exit(ps_exit);
+
+MODULE_AUTHOR("Sony Interactive Entertainment");
+MODULE_DESCRIPTION("HID Driver for PlayStation peripherals.");
+MODULE_LICENSE("GPL");
diff --git a/drivers/hwmon/pwm-fan.c b/drivers/hwmon/pwm-fan.c
index df6f042..e301177a 100644
--- a/drivers/hwmon/pwm-fan.c
+++ b/drivers/hwmon/pwm-fan.c
@@ -449,7 +449,7 @@
 		return 0;
 
 	pwm_get_args(ctx->pwm, &pargs);
-	duty = DIV_ROUND_UP(ctx->pwm_value * (pargs.period - 1), MAX_PWM);
+	duty = DIV_ROUND_UP_ULL(ctx->pwm_value * (pargs.period - 1), MAX_PWM);
 	ret = pwm_config(ctx->pwm, duty, pargs.period);
 	if (ret)
 		return ret;
diff --git a/drivers/i2c/i2c-core-of.c b/drivers/i2c/i2c-core-of.c
index 7eb4199..e4d296b 100644
--- a/drivers/i2c/i2c-core-of.c
+++ b/drivers/i2c/i2c-core-of.c
@@ -50,6 +50,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/idle/intel_idle.c b/drivers/idle/intel_idle.c
index 347b08b..a5d6adc 100644
--- a/drivers/idle/intel_idle.c
+++ b/drivers/idle/intel_idle.c
@@ -85,7 +85,7 @@
 static struct cpuidle_device __percpu *intel_idle_cpuidle_devices;
 static int intel_idle(struct cpuidle_device *dev,
 			struct cpuidle_driver *drv, int index);
-static void intel_idle_s2idle(struct cpuidle_device *dev,
+static int intel_idle_s2idle(struct cpuidle_device *dev,
 			      struct cpuidle_driver *drv, int index);
 static struct cpuidle_state *cpuidle_state_table;
 
@@ -935,13 +935,15 @@
  * @drv: cpuidle driver
  * @index: state index
  */
-static void intel_idle_s2idle(struct cpuidle_device *dev,
+static int intel_idle_s2idle(struct cpuidle_device *dev,
 			     struct cpuidle_driver *drv, int index)
 {
 	unsigned long ecx = 1; /* break on interrupt flag */
 	unsigned long eax = flg2MWAIT(drv->states[index].flags);
 
 	mwait_idle_with_hints(eax, ecx);
+
+	return 0;
 }
 
 static void __setup_broadcast_timer(bool on)
diff --git a/drivers/interconnect/Makefile b/drivers/interconnect/Makefile
index 28f2ab0..725029a 100644
--- a/drivers/interconnect/Makefile
+++ b/drivers/interconnect/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 
+CFLAGS_core.o				:= -I$(src)
 icc-core-objs				:= core.o
 
 obj-$(CONFIG_INTERCONNECT)		+= icc-core.o
diff --git a/drivers/interconnect/core.c b/drivers/interconnect/core.c
index e579b36..dcff97b 100644
--- a/drivers/interconnect/core.c
+++ b/drivers/interconnect/core.c
@@ -19,39 +19,16 @@
 #include <linux/of.h>
 #include <linux/overflow.h>
 
+#include "internal.h"
+
+#define CREATE_TRACE_POINTS
+#include "trace.h"
+
 static DEFINE_IDR(icc_idr);
 static LIST_HEAD(icc_providers);
 static DEFINE_MUTEX(icc_lock);
 static struct dentry *icc_debugfs_dir;
 
-/**
- * struct icc_req - constraints that are attached to each node
- * @req_node: entry in list of requests for the particular @node
- * @node: the interconnect node to which this constraint applies
- * @dev: reference to the device that sets the constraints
- * @tag: path tag (optional)
- * @avg_bw: an integer describing the average bandwidth in kBps
- * @peak_bw: an integer describing the peak bandwidth in kBps
- */
-struct icc_req {
-	struct hlist_node req_node;
-	struct icc_node *node;
-	struct device *dev;
-	u32 tag;
-	u32 avg_bw;
-	u32 peak_bw;
-};
-
-/**
- * struct icc_path - interconnect path structure
- * @num_nodes: number of hops (nodes)
- * @reqs: array of the requests applicable to this path of nodes
- */
-struct icc_path {
-	size_t num_nodes;
-	struct icc_req reqs[];
-};
-
 static void icc_summary_show_one(struct seq_file *s, struct icc_node *n)
 {
 	if (!n)
@@ -382,9 +359,22 @@
 
 	mutex_lock(&icc_lock);
 	path = path_find(dev, src_node, dst_node);
-	if (IS_ERR(path))
-		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
 	mutex_unlock(&icc_lock);
+	if (IS_ERR(path)) {
+		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
+		return path;
+	}
+
+	if (name)
+		path->name = kstrdup_const(name, GFP_KERNEL);
+	else
+		path->name = kasprintf(GFP_KERNEL, "%s-%s",
+				       src_node->name, dst_node->name);
+
+	if (!path->name) {
+		kfree(path);
+		return ERR_PTR(-ENOMEM);
+	}
 
 	return path;
 }
@@ -453,6 +443,8 @@
 
 		/* aggregate requests for this node */
 		aggregate_requests(node);
+
+		trace_icc_set_bw(path, node, i, avg_bw, peak_bw);
 	}
 
 	ret = apply_constraints(path);
@@ -471,6 +463,8 @@
 
 	mutex_unlock(&icc_lock);
 
+	trace_icc_set_bw_end(path, ret);
+
 	return ret;
 }
 EXPORT_SYMBOL_GPL(icc_set_bw);
@@ -507,9 +501,16 @@
 		goto out;
 
 	path = path_find(dev, src, dst);
-	if (IS_ERR(path))
+	if (IS_ERR(path)) {
 		dev_err(dev, "%s: invalid path=%ld\n", __func__, PTR_ERR(path));
+		goto out;
+	}
 
+	path->name = kasprintf(GFP_KERNEL, "%s-%s", src->name, dst->name);
+	if (!path->name) {
+		kfree(path);
+		path = ERR_PTR(-ENOMEM);
+	}
 out:
 	mutex_unlock(&icc_lock);
 	return path;
@@ -545,6 +546,7 @@
 	}
 	mutex_unlock(&icc_lock);
 
+	kfree_const(path->name);
 	kfree(path);
 }
 EXPORT_SYMBOL_GPL(icc_put);
diff --git a/drivers/interconnect/internal.h b/drivers/interconnect/internal.h
new file mode 100644
index 0000000..bf18cb7
--- /dev/null
+++ b/drivers/interconnect/internal.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Interconnect framework internal structs
+ *
+ * Copyright (c) 2019, Linaro Ltd.
+ * Author: Georgi Djakov <georgi.djakov@linaro.org>
+ */
+
+#ifndef __DRIVERS_INTERCONNECT_INTERNAL_H
+#define __DRIVERS_INTERCONNECT_INTERNAL_H
+
+/**
+ * struct icc_req - constraints that are attached to each node
+ * @req_node: entry in list of requests for the particular @node
+ * @node: the interconnect node to which this constraint applies
+ * @dev: reference to the device that sets the constraints
+ * @tag: path tag (optional)
+ * @avg_bw: an integer describing the average bandwidth in kBps
+ * @peak_bw: an integer describing the peak bandwidth in kBps
+ */
+struct icc_req {
+	struct hlist_node req_node;
+	struct icc_node *node;
+	struct device *dev;
+	u32 tag;
+	u32 avg_bw;
+	u32 peak_bw;
+};
+
+/**
+ * struct icc_path - interconnect path structure
+ * @name: a string name of the path (useful for ftrace)
+ * @num_nodes: number of hops (nodes)
+ * @reqs: array of the requests applicable to this path of nodes
+ */
+struct icc_path {
+	const char *name;
+	size_t num_nodes;
+	struct icc_req reqs[];
+};
+
+#endif
diff --git a/drivers/interconnect/trace.h b/drivers/interconnect/trace.h
new file mode 100644
index 0000000..3d668ff
--- /dev/null
+++ b/drivers/interconnect/trace.h
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Interconnect framework tracepoints
+ * Copyright (c) 2019, Linaro Ltd.
+ * Author: Georgi Djakov <georgi.djakov@linaro.org>
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM interconnect
+
+#if !defined(_TRACE_INTERCONNECT_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_INTERCONNECT_H
+
+#include <linux/interconnect.h>
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(icc_set_bw,
+
+	TP_PROTO(struct icc_path *p, struct icc_node *n, int i,
+		 u32 avg_bw, u32 peak_bw),
+
+	TP_ARGS(p, n, i, avg_bw, peak_bw),
+
+	TP_STRUCT__entry(
+		__string(path_name, p->name)
+		__string(dev, dev_name(p->reqs[i].dev))
+		__string(node_name, n->name)
+		__field(u32, avg_bw)
+		__field(u32, peak_bw)
+		__field(u32, node_avg_bw)
+		__field(u32, node_peak_bw)
+	),
+
+	TP_fast_assign(
+		__assign_str(path_name, p->name);
+		__assign_str(dev, dev_name(p->reqs[i].dev));
+		__assign_str(node_name, n->name);
+		__entry->avg_bw = avg_bw;
+		__entry->peak_bw = peak_bw;
+		__entry->node_avg_bw = n->avg_bw;
+		__entry->node_peak_bw = n->peak_bw;
+	),
+
+	TP_printk("path=%s dev=%s node=%s avg_bw=%u peak_bw=%u agg_avg=%u agg_peak=%u",
+		  __get_str(path_name),
+		  __get_str(dev),
+		  __get_str(node_name),
+		  __entry->avg_bw,
+		  __entry->peak_bw,
+		  __entry->node_avg_bw,
+		  __entry->node_peak_bw)
+);
+
+TRACE_EVENT(icc_set_bw_end,
+
+	TP_PROTO(struct icc_path *p, int ret),
+
+	TP_ARGS(p, ret),
+
+	TP_STRUCT__entry(
+		__string(path_name, p->name)
+		__string(dev, dev_name(p->reqs[0].dev))
+		__field(int, ret)
+	),
+
+	TP_fast_assign(
+		__assign_str(path_name, p->name);
+		__assign_str(dev, dev_name(p->reqs[0].dev));
+		__entry->ret = ret;
+	),
+
+	TP_printk("path=%s dev=%s ret=%d",
+		  __get_str(path_name),
+		  __get_str(dev),
+		  __entry->ret)
+);
+
+#endif /* _TRACE_INTERCONNECT_H */
+
+/* This part must be outside protection */
+
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+
+#undef TRACE_INCLUDE_FILE
+#define TRACE_INCLUDE_FILE trace
+
+#include <trace/define_trace.h>
diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
index fc0160e..60f677c 100644
--- a/drivers/iommu/Kconfig
+++ b/drivers/iommu/Kconfig
@@ -7,6 +7,36 @@
 config IOMMU_API
 	bool
 
+if IOMMU_IOVA
+
+config IOMMU_LIMIT_IOVA_ALIGNMENT
+	bool "Limit IOVA alignment"
+	help
+	  When the IOVA framework applies IOVA alignment it aligns all
+	  IOVAs to the smallest PAGE_SIZE order which is greater than or
+	  equal to the requested IOVA size. This works fine for sizes up
+	  to several MiB, but for larger sizes it results in address
+	  space wastage and fragmentation. For example drivers with a 4
+	  GiB IOVA space might run out of IOVA space when allocating
+	  buffers great than 64 MiB.
+
+	  Enable this option to impose a limit on the alignment of IOVAs.
+
+	  If unsure, say N.
+
+config IOMMU_IOVA_ALIGNMENT
+	int "Maximum PAGE_SIZE order of alignment for IOVAs"
+	depends on IOMMU_LIMIT_IOVA_ALIGNMENT
+	range 4 9
+	default 9
+	help
+	  With this parameter you can specify the maximum PAGE_SIZE order for
+	  IOVAs. Larger IOVAs will be aligned only to this specified order.
+	  The order is expressed a power of two multiplied by the PAGE_SIZE.
+
+	  If unsure, leave the default value "9".
+endif
+
 menuconfig IOMMU_SUPPORT
 	bool "IOMMU Hardware Support"
 	depends on MMU
@@ -350,8 +380,9 @@
 
 # ARM IOMMU support
 config ARM_SMMU
-	bool "ARM Ltd. System MMU (SMMU) Support"
+	tristate "ARM Ltd. System MMU (SMMU) Support"
 	depends on (ARM64 || ARM) && MMU
+	depends on QCOM_SCM || !QCOM_SCM #if QCOM_SCM=m this can't be =y
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
 	select ARM_DMA_USE_IOMMU if ARM
@@ -362,6 +393,18 @@
 	  Say Y here if your SoC includes an IOMMU device implementing
 	  the ARM SMMU architecture.
 
+config ARM_SMMU_LEGACY_DT_BINDINGS
+	bool "Support the legacy \"mmu-masters\" devicetree bindings"
+	depends on ARM_SMMU=y && OF
+	help
+	  Support for the badly designed and deprecated "mmu-masters"
+	  devicetree bindings. This allows some DMA masters to attach
+	  to the SMMU but does not provide any support via the DMA API.
+	  If you're lucky, you might be able to get VFIO up and running.
+
+	  If you say Y here then you'll make me very sad. Instead, say N
+	  and move your firmware to the utopian future that was 2016.
+
 config ARM_SMMU_DISABLE_BYPASS_BY_DEFAULT
 	bool "Default to disabling bypass on ARM SMMU v1 and v2"
 	depends on ARM_SMMU
@@ -388,7 +431,7 @@
 	  config.
 
 config ARM_SMMU_V3
-	bool "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
+	tristate "ARM Ltd. System MMU Version 3 (SMMUv3) Support"
 	depends on ARM64
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
@@ -459,6 +502,7 @@
 	# Note: iommu drivers cannot (yet?) be built as modules
 	bool "Qualcomm IOMMU Support"
 	depends on ARCH_QCOM || (COMPILE_TEST && !GENERIC_ATOMIC64)
+	depends on QCOM_SCM=y
 	select IOMMU_API
 	select IOMMU_IO_PGTABLE_LPAE
 	select ARM_DMA_USE_IOMMU
diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile
index 4f405f9..c25bc97 100644
--- a/drivers/iommu/Makefile
+++ b/drivers/iommu/Makefile
@@ -13,7 +13,8 @@
 obj-$(CONFIG_AMD_IOMMU) += amd_iommu.o amd_iommu_init.o amd_iommu_quirks.o
 obj-$(CONFIG_AMD_IOMMU_DEBUGFS) += amd_iommu_debugfs.o
 obj-$(CONFIG_AMD_IOMMU_V2) += amd_iommu_v2.o
-obj-$(CONFIG_ARM_SMMU) += arm-smmu.o arm-smmu-impl.o
+obj-$(CONFIG_ARM_SMMU) += arm_smmu.o
+arm_smmu-objs += arm-smmu.o arm-smmu-impl.o arm-smmu-qcom.o
 obj-$(CONFIG_ARM_SMMU_V3) += arm-smmu-v3.o
 obj-$(CONFIG_DMAR_TABLE) += dmar.o
 obj-$(CONFIG_INTEL_IOMMU) += intel-iommu.o intel-pasid.o
diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
index c392930..b793099 100644
--- a/drivers/iommu/amd_iommu.c
+++ b/drivers/iommu/amd_iommu.c
@@ -3098,7 +3098,8 @@
 }
 
 static int amd_iommu_map(struct iommu_domain *dom, unsigned long iova,
-			 phys_addr_t paddr, size_t page_size, int iommu_prot)
+			 phys_addr_t paddr, size_t page_size, int iommu_prot,
+			 gfp_t gfp)
 {
 	struct protection_domain *domain = to_pdomain(dom);
 	int prot = 0;
@@ -3113,7 +3114,7 @@
 		prot |= IOMMU_PROT_IW;
 
 	mutex_lock(&domain->api_lock);
-	ret = iommu_map_page(domain, iova, paddr, page_size, prot, GFP_KERNEL);
+	ret = iommu_map_page(domain, iova, paddr, page_size, prot, gfp);
 	mutex_unlock(&domain->api_lock);
 
 	domain_flush_np_cache(domain, iova, page_size);
diff --git a/drivers/iommu/arm-smmu-impl.c b/drivers/iommu/arm-smmu-impl.c
index 5c87a38..b2fe72a8 100644
--- a/drivers/iommu/arm-smmu-impl.c
+++ b/drivers/iommu/arm-smmu-impl.c
@@ -109,7 +109,7 @@
 #define ARM_MMU500_ACR_S2CRB_TLBEN	(1 << 10)
 #define ARM_MMU500_ACR_SMTNMB_TLBEN	(1 << 8)
 
-static int arm_mmu500_reset(struct arm_smmu_device *smmu)
+int arm_mmu500_reset(struct arm_smmu_device *smmu)
 {
 	u32 reg, major;
 	int i;
@@ -170,5 +170,8 @@
 				  "calxeda,smmu-secure-config-access"))
 		smmu->impl = &calxeda_impl;
 
+	if (of_device_is_compatible(smmu->dev->of_node, "qcom,sdm845-smmu-500"))
+		return qcom_smmu_impl_init(smmu);
+
 	return smmu;
 }
diff --git a/drivers/iommu/arm-smmu-qcom.c b/drivers/iommu/arm-smmu-qcom.c
new file mode 100644
index 0000000..06e5799
--- /dev/null
+++ b/drivers/iommu/arm-smmu-qcom.c
@@ -0,0 +1,86 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/bitfield.h>
+#include <linux/qcom_scm.h>
+
+#include "arm-smmu.h"
+
+struct qcom_smmu {
+	struct arm_smmu_device smmu;
+};
+
+static int qcom_sdm845_smmu500_cfg_probe(struct arm_smmu_device *smmu)
+{
+	u32 s2cr;
+	u32 smr;
+	int i;
+
+	for (i = 0; i < smmu->num_mapping_groups; i++) {
+		smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(i));
+		s2cr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_S2CR(i));
+
+		smmu->smrs[i].mask = FIELD_GET(SMR_MASK, smr);
+		smmu->smrs[i].id = FIELD_GET(SMR_ID, smr);
+		if (smmu->features & ARM_SMMU_FEAT_EXIDS)
+			smmu->smrs[i].valid = FIELD_GET(S2CR_EXIDVALID, s2cr);
+		else
+			smmu->smrs[i].valid = FIELD_GET(SMR_VALID, smr);
+
+		smmu->s2crs[i].group = NULL;
+		smmu->s2crs[i].count = 0;
+		smmu->s2crs[i].type = FIELD_GET(S2CR_TYPE, s2cr);
+		smmu->s2crs[i].privcfg = FIELD_GET(S2CR_PRIVCFG, s2cr);
+		smmu->s2crs[i].cbndx = FIELD_GET(S2CR_CBNDX, s2cr);
+
+		if (!smmu->smrs[i].valid)
+			continue;
+
+		smmu->s2crs[i].pinned = true;
+		bitmap_set(smmu->context_map, smmu->s2crs[i].cbndx, 1);
+	}
+
+	return 0;
+}
+
+static int qcom_sdm845_smmu500_reset(struct arm_smmu_device *smmu)
+{
+	int ret;
+
+	arm_mmu500_reset(smmu);
+
+	/*
+	 * To address performance degradation in non-real time clients,
+	 * such as USB and UFS, turn off wait-for-safe on sdm845 based boards,
+	 * such as MTP and db845, whose firmwares implement secure monitor
+	 * call handlers to turn on/off the wait-for-safe logic.
+	 */
+	ret = qcom_scm_qsmmu500_wait_safe_toggle(0);
+	if (ret)
+		dev_warn(smmu->dev, "Failed to turn off SAFE logic\n");
+
+	return ret;
+}
+
+static const struct arm_smmu_impl qcom_smmu_impl = {
+	.cfg_probe = qcom_sdm845_smmu500_cfg_probe,
+	.reset = qcom_sdm845_smmu500_reset,
+};
+
+struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu)
+{
+	struct qcom_smmu *qsmmu;
+
+	qsmmu = devm_kzalloc(smmu->dev, sizeof(*qsmmu), GFP_KERNEL);
+	if (!qsmmu)
+		return ERR_PTR(-ENOMEM);
+
+	qsmmu->smmu = *smmu;
+
+	qsmmu->smmu.impl = &qcom_smmu_impl;
+	devm_kfree(smmu->dev, smmu);
+
+	return &qsmmu->smmu;
+}
diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c
index ef6af71..fc5f353 100644
--- a/drivers/iommu/arm-smmu-v3.c
+++ b/drivers/iommu/arm-smmu-v3.c
@@ -21,8 +21,7 @@
 #include <linux/io-pgtable.h>
 #include <linux/iommu.h>
 #include <linux/iopoll.h>
-#include <linux/init.h>
-#include <linux/moduleparam.h>
+#include <linux/module.h>
 #include <linux/msi.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
@@ -384,10 +383,6 @@
 #define MSI_IOVA_BASE			0x8000000
 #define MSI_IOVA_LENGTH			0x100000
 
-/*
- * not really modular, but the easiest way to keep compat with existing
- * bootargs behaviour is to continue using module_param_named here.
- */
 static bool disable_bypass = 1;
 module_param_named(disable_bypass, disable_bypass, bool, S_IRUGO);
 MODULE_PARM_DESC(disable_bypass,
@@ -2450,7 +2445,7 @@
 }
 
 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
 
@@ -2485,7 +2480,7 @@
 {
 	struct arm_smmu_domain *smmu_domain = to_smmu_domain(domain);
 
-	arm_smmu_tlb_inv_range(gather->start, gather->end - gather->start,
+	arm_smmu_tlb_inv_range(gather->start, gather->end - gather->start + 1,
 			       gather->pgsize, true, smmu_domain);
 }
 
@@ -3572,6 +3567,43 @@
 		return SZ_128K;
 }
 
+static int arm_smmu_set_bus_ops(struct iommu_ops *ops)
+{
+	int err;
+
+#ifdef CONFIG_PCI
+	if (pci_bus_type.iommu_ops != ops) {
+		err = bus_set_iommu(&pci_bus_type, ops);
+		if (err)
+			return err;
+	}
+#endif
+#ifdef CONFIG_ARM_AMBA
+	if (amba_bustype.iommu_ops != ops) {
+		err = bus_set_iommu(&amba_bustype, ops);
+		if (err)
+			goto err_reset_pci_ops;
+	}
+#endif
+	if (platform_bus_type.iommu_ops != ops) {
+		err = bus_set_iommu(&platform_bus_type, ops);
+		if (err)
+			goto err_reset_amba_ops;
+	}
+
+	return 0;
+
+err_reset_amba_ops:
+#ifdef CONFIG_ARM_AMBA
+	bus_set_iommu(&amba_bustype, NULL);
+#endif
+err_reset_pci_ops: __maybe_unused;
+#ifdef CONFIG_PCI
+	bus_set_iommu(&pci_bus_type, NULL);
+#endif
+	return err;
+}
+
 static int arm_smmu_device_probe(struct platform_device *pdev)
 {
 	int irq, ret;
@@ -3662,48 +3694,44 @@
 		return ret;
 	}
 
-#ifdef CONFIG_PCI
-	if (pci_bus_type.iommu_ops != &arm_smmu_ops) {
-		pci_request_acs();
-		ret = bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-#ifdef CONFIG_ARM_AMBA
-	if (amba_bustype.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&amba_bustype, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
-#endif
-	if (platform_bus_type.iommu_ops != &arm_smmu_ops) {
-		ret = bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
-		if (ret)
-			return ret;
-	}
+	return arm_smmu_set_bus_ops(&arm_smmu_ops);
+}
+
+static int arm_smmu_device_remove(struct platform_device *pdev)
+{
+	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
+
+	arm_smmu_set_bus_ops(NULL);
+	iommu_device_unregister(&smmu->iommu);
+	iommu_device_sysfs_remove(&smmu->iommu);
+	arm_smmu_device_disable(smmu);
+
 	return 0;
 }
 
 static void arm_smmu_device_shutdown(struct platform_device *pdev)
 {
-	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
-
-	arm_smmu_device_disable(smmu);
+	arm_smmu_device_remove(pdev);
 }
 
 static const struct of_device_id arm_smmu_of_match[] = {
 	{ .compatible = "arm,smmu-v3", },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
 
 static struct platform_driver arm_smmu_driver = {
 	.driver	= {
-		.name		= "arm-smmu-v3",
-		.of_match_table	= of_match_ptr(arm_smmu_of_match),
-		.suppress_bind_attrs = true,
+		.name			= "arm-smmu-v3",
+		.of_match_table		= of_match_ptr(arm_smmu_of_match),
+		.suppress_bind_attrs	= true,
 	},
 	.probe	= arm_smmu_device_probe,
+	.remove	= arm_smmu_device_remove,
 	.shutdown = arm_smmu_device_shutdown,
 };
-builtin_platform_driver(arm_smmu_driver);
+module_platform_driver(arm_smmu_driver);
+
+MODULE_DESCRIPTION("IOMMU API for ARM architected SMMUv3 implementations");
+MODULE_AUTHOR("Will Deacon <will@kernel.org>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index 2185ea5..fd75d9e 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -27,8 +27,7 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/iopoll.h>
-#include <linux/init.h>
-#include <linux/moduleparam.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
@@ -59,10 +58,6 @@
 #define MSI_IOVA_LENGTH			0x100000
 
 static int force_stage;
-/*
- * not really modular, but the easiest way to keep compat with existing
- * bootargs behaviour is to continue using module_param() here.
- */
 module_param(force_stage, int, S_IRUGO);
 MODULE_PARM_DESC(force_stage,
 	"Force SMMU mappings to be installed at a particular stage of translation. A value of '1' or '2' forces the corresponding stage. All other values are ignored (i.e. no stage is forced). Note that selecting a specific stage will disable support for nested translation.");
@@ -72,24 +67,10 @@
 MODULE_PARM_DESC(disable_bypass,
 	"Disable bypass streams such that incoming transactions from devices that are not attached to an iommu domain will report an abort back to the device and will not be allowed to pass through the SMMU.");
 
-struct arm_smmu_s2cr {
-	struct iommu_group		*group;
-	int				count;
-	enum arm_smmu_s2cr_type		type;
-	enum arm_smmu_s2cr_privcfg	privcfg;
-	u8				cbndx;
-};
-
 #define s2cr_init_val (struct arm_smmu_s2cr){				\
 	.type = disable_bypass ? S2CR_TYPE_FAULT : S2CR_TYPE_BYPASS,	\
 }
 
-struct arm_smmu_smr {
-	u16				mask;
-	u16				id;
-	bool				valid;
-};
-
 struct arm_smmu_cb {
 	u64				ttbr[2];
 	u32				tcr[2];
@@ -130,6 +111,12 @@
 	return container_of(dom, struct arm_smmu_domain, domain);
 }
 
+static struct platform_driver arm_smmu_driver;
+static struct iommu_ops arm_smmu_ops;
+
+#ifdef CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS
+static int arm_smmu_bus_init(struct iommu_ops *ops);
+
 static struct device_node *dev_get_dev_node(struct device *dev)
 {
 	if (dev_is_pci(dev)) {
@@ -165,9 +152,6 @@
 	return err == -ENOENT ? 0 : err;
 }
 
-static struct platform_driver arm_smmu_driver;
-static struct iommu_ops arm_smmu_ops;
-
 static int arm_smmu_register_legacy_master(struct device *dev,
 					   struct arm_smmu_device **smmu)
 {
@@ -219,9 +203,40 @@
 	return err;
 }
 
-static int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end)
+/*
+ * With the legacy DT binding in play, we have no guarantees about
+ * probe order, but then we're also not doing default domains, so we can
+ * delay setting bus ops until we're sure every possible SMMU is ready,
+ * and that way ensure that no add_device() calls get missed.
+ */
+static int arm_smmu_legacy_bus_init(void)
 {
+	if (using_legacy_binding)
+		return arm_smmu_bus_init(&arm_smmu_ops);
+	return 0;
+}
+device_initcall_sync(arm_smmu_legacy_bus_init);
+#else
+static int arm_smmu_register_legacy_master(struct device *dev,
+					   struct arm_smmu_device **smmu)
+{
+	return -ENODEV;
+}
+#endif /* CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS */
+
+static int __arm_smmu_alloc_cb(struct arm_smmu_device *smmu, int start,
+			       struct device *dev)
+{
+	struct iommu_fwspec *fwspec = dev_iommu_fwspec_get(dev);
+	unsigned long *map = smmu->context_map;
+	int end = smmu->num_context_banks;
 	int idx;
+	int i;
+
+	for_each_cfg_sme(fwspec, i, idx) {
+		if (smmu->s2crs[idx].pinned)
+			return smmu->s2crs[idx].cbndx;
+	}
 
 	do {
 		idx = find_next_zero_bit(map, end, start);
@@ -626,7 +641,8 @@
 }
 
 static int arm_smmu_init_domain_context(struct iommu_domain *domain,
-					struct arm_smmu_device *smmu)
+					struct arm_smmu_device *smmu,
+					struct device *dev)
 {
 	int irq, start, ret = 0;
 	unsigned long ias, oas;
@@ -740,8 +756,7 @@
 		ret = -EINVAL;
 		goto out_unlock;
 	}
-	ret = __arm_smmu_alloc_bitmap(smmu->context_map, start,
-				      smmu->num_context_banks);
+	ret = __arm_smmu_alloc_cb(smmu, start, dev);
 	if (ret < 0)
 		goto out_unlock;
 
@@ -929,24 +944,43 @@
  */
 static void arm_smmu_test_smr_masks(struct arm_smmu_device *smmu)
 {
+	u32 s2cr;
 	u32 smr;
+	int idx;
 
 	if (!smmu->smrs)
 		return;
 
+	for (idx = 0; idx < smmu->num_mapping_groups; idx++) {
+		if (smmu->features & ARM_SMMU_FEAT_EXIDS) {
+			s2cr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_S2CR(idx));
+			if (!FIELD_GET(S2CR_EXIDVALID, s2cr))
+				break;
+		} else {
+			smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
+			if (!FIELD_GET(SMR_VALID, smr))
+				break;
+		}
+	}
+
+	if (idx == smmu->num_mapping_groups) {
+		dev_err(smmu->dev, "Unable to compute streamid_mask\n");
+		return;
+	}
+
 	/*
 	 * SMR.ID bits may not be preserved if the corresponding MASK
 	 * bits are set, so check each one separately. We can reject
 	 * masters later if they try to claim IDs outside these masks.
 	 */
 	smr = FIELD_PREP(SMR_ID, smmu->streamid_mask);
-	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(0), smr);
-	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(0));
+	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), smr);
+	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
 	smmu->streamid_mask = FIELD_GET(SMR_ID, smr);
 
 	smr = FIELD_PREP(SMR_MASK, smmu->streamid_mask);
-	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(0), smr);
-	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(0));
+	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_SMR(idx), smr);
+	smr = arm_smmu_gr0_read(smmu, ARM_SMMU_GR0_SMR(idx));
 	smmu->smr_mask_mask = FIELD_GET(SMR_MASK, smr);
 }
 
@@ -994,12 +1028,19 @@
 
 static bool arm_smmu_free_sme(struct arm_smmu_device *smmu, int idx)
 {
+	bool pinned = smmu->s2crs[idx].pinned;
+	u8 cbndx = smmu->s2crs[idx].cbndx;;
+
 	if (--smmu->s2crs[idx].count)
 		return false;
 
 	smmu->s2crs[idx] = s2cr_init_val;
-	if (smmu->smrs)
+	if (pinned) {
+		smmu->s2crs[idx].pinned = true;
+		smmu->s2crs[idx].cbndx = cbndx;
+	} else if (smmu->smrs) {
 		smmu->smrs[idx].valid = false;
+	}
 
 	return true;
 }
@@ -1135,7 +1176,7 @@
 		return ret;
 
 	/* Ensure that the domain is finalised */
-	ret = arm_smmu_init_domain_context(domain, smmu);
+	ret = arm_smmu_init_domain_context(domain, smmu, dev);
 	if (ret < 0)
 		goto rpm_put;
 
@@ -1160,7 +1201,7 @@
 }
 
 static int arm_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct io_pgtable_ops *ops = to_smmu_domain(domain)->pgtbl_ops;
 	struct arm_smmu_device *smmu = to_smmu_domain(domain)->smmu;
@@ -1882,6 +1923,7 @@
 	{ .compatible = "qcom,smmu-v2", .data = &qcom_smmuv2 },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, arm_smmu_of_match);
 
 #ifdef CONFIG_ACPI
 static int acpi_smmu_get_data(u32 model, struct arm_smmu_device *smmu)
@@ -1968,8 +2010,10 @@
 
 	legacy_binding = of_find_property(dev->of_node, "mmu-masters", NULL);
 	if (legacy_binding && !using_generic_binding) {
-		if (!using_legacy_binding)
-			pr_notice("deprecated \"mmu-masters\" DT property in use; DMA API support unavailable\n");
+		if (!using_legacy_binding) {
+			pr_notice("deprecated \"mmu-masters\" DT property in use; %s support unavailable\n",
+				  IS_ENABLED(CONFIG_ARM_SMMU_LEGACY_DT_BINDINGS) ? "DMA API" : "SMMU");
+		}
 		using_legacy_binding = true;
 	} else if (!legacy_binding && !using_legacy_binding) {
 		using_generic_binding = true;
@@ -1984,25 +2028,50 @@
 	return 0;
 }
 
-static void arm_smmu_bus_init(void)
+static int arm_smmu_bus_init(struct iommu_ops *ops)
 {
+	int err;
+
 	/* Oh, for a proper bus abstraction */
-	if (!iommu_present(&platform_bus_type))
-		bus_set_iommu(&platform_bus_type, &arm_smmu_ops);
+	if (!iommu_present(&platform_bus_type)) {
+		err = bus_set_iommu(&platform_bus_type, ops);
+		if (err)
+			return err;
+	}
 #ifdef CONFIG_ARM_AMBA
-	if (!iommu_present(&amba_bustype))
-		bus_set_iommu(&amba_bustype, &arm_smmu_ops);
+	if (!iommu_present(&amba_bustype)) {
+		err = bus_set_iommu(&amba_bustype, ops);
+		if (err)
+			goto err_reset_platform_ops;
+	}
 #endif
 #ifdef CONFIG_PCI
 	if (!iommu_present(&pci_bus_type)) {
-		pci_request_acs();
-		bus_set_iommu(&pci_bus_type, &arm_smmu_ops);
+		err = bus_set_iommu(&pci_bus_type, ops);
+		if (err)
+			goto err_reset_amba_ops;
 	}
 #endif
 #ifdef CONFIG_FSL_MC_BUS
-	if (!iommu_present(&fsl_mc_bus_type))
-		bus_set_iommu(&fsl_mc_bus_type, &arm_smmu_ops);
+	if (!iommu_present(&fsl_mc_bus_type)) {
+		err = bus_set_iommu(&fsl_mc_bus_type, ops);
+		if (err)
+			goto err_reset_pci_ops;
+	}
 #endif
+	return 0;
+
+err_reset_pci_ops: __maybe_unused;
+#ifdef CONFIG_PCI
+	bus_set_iommu(&pci_bus_type, NULL);
+#endif
+err_reset_amba_ops: __maybe_unused;
+#ifdef CONFIG_ARM_AMBA
+	bus_set_iommu(&amba_bustype, NULL);
+#endif
+err_reset_platform_ops: __maybe_unused;
+	bus_set_iommu(&platform_bus_type, NULL);
+	return err;
 }
 
 static int arm_smmu_device_probe(struct platform_device *pdev)
@@ -2150,35 +2219,25 @@
 	 * ready to handle default domain setup as soon as any SMMU exists.
 	 */
 	if (!using_legacy_binding)
-		arm_smmu_bus_init();
+		return arm_smmu_bus_init(&arm_smmu_ops);
 
 	return 0;
 }
 
-/*
- * With the legacy DT binding in play, though, we have no guarantees about
- * probe order, but then we're also not doing default domains, so we can
- * delay setting bus ops until we're sure every possible SMMU is ready,
- * and that way ensure that no add_device() calls get missed.
- */
-static int arm_smmu_legacy_bus_init(void)
-{
-	if (using_legacy_binding)
-		arm_smmu_bus_init();
-	return 0;
-}
-device_initcall_sync(arm_smmu_legacy_bus_init);
-
-static void arm_smmu_device_shutdown(struct platform_device *pdev)
+static int arm_smmu_device_remove(struct platform_device *pdev)
 {
 	struct arm_smmu_device *smmu = platform_get_drvdata(pdev);
 
 	if (!smmu)
-		return;
+		return -ENODEV;
 
 	if (!bitmap_empty(smmu->context_map, ARM_SMMU_MAX_CBS))
 		dev_err(&pdev->dev, "removing device with active domains!\n");
 
+	arm_smmu_bus_init(NULL);
+	iommu_device_unregister(&smmu->iommu);
+	iommu_device_sysfs_remove(&smmu->iommu);
+
 	arm_smmu_rpm_get(smmu);
 	/* Turn the thing off */
 	arm_smmu_gr0_write(smmu, ARM_SMMU_GR0_sCR0, sCR0_CLIENTPD);
@@ -2190,6 +2249,12 @@
 		clk_bulk_disable(smmu->num_clks, smmu->clks);
 
 	clk_bulk_unprepare(smmu->num_clks, smmu->clks);
+	return 0;
+}
+
+static void arm_smmu_device_shutdown(struct platform_device *pdev)
+{
+	arm_smmu_device_remove(pdev);
 }
 
 static int __maybe_unused arm_smmu_runtime_resume(struct device *dev)
@@ -2242,9 +2307,14 @@
 		.name			= "arm-smmu",
 		.of_match_table		= of_match_ptr(arm_smmu_of_match),
 		.pm			= &arm_smmu_pm_ops,
-		.suppress_bind_attrs	= true,
+		.suppress_bind_attrs    = true,
 	},
 	.probe	= arm_smmu_device_probe,
+	.remove	= arm_smmu_device_remove,
 	.shutdown = arm_smmu_device_shutdown,
 };
-builtin_platform_driver(arm_smmu_driver);
+module_platform_driver(arm_smmu_driver);
+
+MODULE_DESCRIPTION("IOMMU API for ARM architected SMMU implementations");
+MODULE_AUTHOR("Will Deacon <will@kernel.org>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/iommu/arm-smmu.h b/drivers/iommu/arm-smmu.h
index b19b6ca..a144c9f 100644
--- a/drivers/iommu/arm-smmu.h
+++ b/drivers/iommu/arm-smmu.h
@@ -222,6 +222,21 @@
 	QCOM_SMMUV2,
 };
 
+struct arm_smmu_s2cr {
+	struct iommu_group		*group;
+	int				count;
+	enum arm_smmu_s2cr_type		type;
+	enum arm_smmu_s2cr_privcfg	privcfg;
+	u8				cbndx;
+	bool				pinned;
+};
+
+struct arm_smmu_smr {
+	u16				mask;
+	u16				id;
+	bool				valid;
+};
+
 struct arm_smmu_device {
 	struct device			*dev;
 
@@ -398,5 +413,8 @@
 	arm_smmu_writeq((s), ARM_SMMU_CB((s), (n)), (o), (v))
 
 struct arm_smmu_device *arm_smmu_impl_init(struct arm_smmu_device *smmu);
+struct arm_smmu_device *qcom_smmu_impl_init(struct arm_smmu_device *smmu);
+
+int arm_mmu500_reset(struct arm_smmu_device *smmu);
 
 #endif /* _ARM_SMMU_H */
diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
index 9c3e630..661bc03 100644
--- a/drivers/iommu/dma-iommu.c
+++ b/drivers/iommu/dma-iommu.c
@@ -354,6 +354,52 @@
 	return iova_reserve_iommu_regions(dev, domain);
 }
 
+/*
+ * Should be called prior to using dma-apis
+ */
+int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+			   u64 size)
+{
+	struct iommu_domain *domain;
+	struct iommu_dma_cookie *cookie;
+	struct iova_domain *iovad;
+	unsigned long pfn_lo, pfn_hi;
+
+	domain = iommu_get_domain_for_dev(dev);
+	if (!domain || !domain->iova_cookie)
+		return -EINVAL;
+
+	cookie = domain->iova_cookie;
+	iovad = &cookie->iovad;
+
+	/* iova will be freed automatically by put_iova_domain() */
+	pfn_lo = iova_pfn(iovad, base);
+	pfn_hi = iova_pfn(iovad, base + size - 1);
+	if (!reserve_iova(iovad, pfn_lo, pfn_hi))
+		return -EINVAL;
+
+	return 0;
+}
+EXPORT_SYMBOL(iommu_dma_reserve_iova);
+
+/*
+ * Should be called prior to using dma-apis.
+ */
+int iommu_dma_enable_best_fit_algo(struct device *dev)
+{
+	struct iommu_domain *domain;
+	struct iova_domain *iovad;
+
+	domain = iommu_get_domain_for_dev(dev);
+	if (!domain || !domain->iova_cookie)
+		return -EINVAL;
+
+	iovad = &((struct iommu_dma_cookie *)domain->iova_cookie)->iovad;
+	iovad->best_fit = true;
+	return 0;
+}
+EXPORT_SYMBOL(iommu_dma_enable_best_fit_algo);
+
 /**
  * dma_info_to_prot - Translate DMA API directions and attributes to IOMMU API
  *                    page flags.
@@ -477,7 +523,7 @@
 	if (!iova)
 		return DMA_MAPPING_ERROR;
 
-	if (iommu_map(domain, iova, phys - iova_off, size, prot)) {
+	if (iommu_map_atomic(domain, iova, phys - iova_off, size, prot)) {
 		iommu_dma_free_iova(cookie, iova, size);
 		return DMA_MAPPING_ERROR;
 	}
@@ -612,7 +658,7 @@
 			arch_dma_prep_coherent(sg_page(sg), sg->length);
 	}
 
-	if (iommu_map_sg(domain, iova, sgt.sgl, sgt.orig_nents, ioprot)
+	if (iommu_map_sg_atomic(domain, iova, sgt.sgl, sgt.orig_nents, ioprot)
 			< size)
 		goto out_free_sg;
 
@@ -872,7 +918,7 @@
 	 * We'll leave any physical concatenation to the IOMMU driver's
 	 * implementation - it knows better than we do.
 	 */
-	if (iommu_map_sg(domain, iova, sg, nents, prot) < iova_len)
+	if (iommu_map_sg_atomic(domain, iova, sg, nents, prot) < iova_len)
 		goto out_free_iova;
 
 	return __finalise_sg(dev, sg, nents, iova);
diff --git a/drivers/iommu/exynos-iommu.c b/drivers/iommu/exynos-iommu.c
index 55ed857f..85b7a1b 100644
--- a/drivers/iommu/exynos-iommu.c
+++ b/drivers/iommu/exynos-iommu.c
@@ -1073,7 +1073,7 @@
  */
 static int exynos_iommu_map(struct iommu_domain *iommu_domain,
 			    unsigned long l_iova, phys_addr_t paddr, size_t size,
-			    int prot)
+			    int prot, gfp_t gfp)
 {
 	struct exynos_iommu_domain *domain = to_exynos_domain(iommu_domain);
 	sysmmu_pte_t *entry;
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index a2a03df..d00ac43 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -5453,7 +5453,7 @@
 
 static int intel_iommu_map(struct iommu_domain *domain,
 			   unsigned long iova, phys_addr_t hpa,
-			   size_t size, int iommu_prot)
+			   size_t size, int iommu_prot, gfp_t gfp)
 {
 	struct dmar_domain *dmar_domain = to_dmar_domain(domain);
 	u64 max_addr;
diff --git a/drivers/iommu/io-pgtable-arm-v7s.c b/drivers/iommu/io-pgtable-arm-v7s.c
index 4cb3949..6c08e99 100644
--- a/drivers/iommu/io-pgtable-arm-v7s.c
+++ b/drivers/iommu/io-pgtable-arm-v7s.c
@@ -50,20 +50,26 @@
  */
 #define ARM_V7S_ADDR_BITS		32
 #define _ARM_V7S_LVL_BITS(lvl)		(16 - (lvl) * 4)
+/* MediaTek: totally 34bits, 14bits at lvl1 and 8bits at lvl2. */
+#define _ARM_V7S_LVL_BITS_MTK(lvl)	(20 - (lvl) * 6)
 #define ARM_V7S_LVL_SHIFT(lvl)		(ARM_V7S_ADDR_BITS - (4 + 8 * (lvl)))
 #define ARM_V7S_TABLE_SHIFT		10
 
-#define ARM_V7S_PTES_PER_LVL(lvl)	(1 << _ARM_V7S_LVL_BITS(lvl))
-#define ARM_V7S_TABLE_SIZE(lvl)						\
-	(ARM_V7S_PTES_PER_LVL(lvl) * sizeof(arm_v7s_iopte))
+#define ARM_V7S_PTES_PER_LVL(lvl, cfg)	({				\
+	!arm_v7s_is_mtk_enabled(cfg) ?					\
+	 (1 << _ARM_V7S_LVL_BITS(lvl)) : (1 << _ARM_V7S_LVL_BITS_MTK(lvl));\
+})
+
+#define ARM_V7S_TABLE_SIZE(lvl, cfg)					\
+	(ARM_V7S_PTES_PER_LVL(lvl, cfg) * sizeof(arm_v7s_iopte))
 
 #define ARM_V7S_BLOCK_SIZE(lvl)		(1UL << ARM_V7S_LVL_SHIFT(lvl))
 #define ARM_V7S_LVL_MASK(lvl)		((u32)(~0U << ARM_V7S_LVL_SHIFT(lvl)))
 #define ARM_V7S_TABLE_MASK		((u32)(~0U << ARM_V7S_TABLE_SHIFT))
-#define _ARM_V7S_IDX_MASK(lvl)		(ARM_V7S_PTES_PER_LVL(lvl) - 1)
-#define ARM_V7S_LVL_IDX(addr, lvl)	({				\
+#define _ARM_V7S_IDX_MASK(lvl, cfg)	(ARM_V7S_PTES_PER_LVL(lvl, cfg) - 1)
+#define ARM_V7S_LVL_IDX(addr, lvl, cfg)	({			\
 	int _l = lvl;							\
-	((u32)(addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l); \
+	((addr) >> ARM_V7S_LVL_SHIFT(_l)) & _ARM_V7S_IDX_MASK(_l, cfg); \
 })
 
 /*
@@ -112,9 +118,10 @@
 #define ARM_V7S_TEX_MASK		0x7
 #define ARM_V7S_ATTR_TEX(val)		(((val) & ARM_V7S_TEX_MASK) << ARM_V7S_TEX_SHIFT)
 
-/* MediaTek extend the two bits for PA 32bit/33bit */
+/* MediaTek extend the bits below for PA 32bit/33bit/34bit */
 #define ARM_V7S_ATTR_MTK_PA_BIT32	BIT(9)
 #define ARM_V7S_ATTR_MTK_PA_BIT33	BIT(4)
+#define ARM_V7S_ATTR_MTK_PA_BIT34	BIT(5)
 
 /* *well, except for TEX on level 2 large pages, of course :( */
 #define ARM_V7S_CONT_PAGE_TEX_SHIFT	6
@@ -196,6 +203,8 @@
 		pte |= ARM_V7S_ATTR_MTK_PA_BIT32;
 	if (paddr & BIT_ULL(33))
 		pte |= ARM_V7S_ATTR_MTK_PA_BIT33;
+	if (paddr & BIT_ULL(34))
+		pte |= ARM_V7S_ATTR_MTK_PA_BIT34;
 	return pte;
 }
 
@@ -220,6 +229,8 @@
 		paddr |= BIT_ULL(32);
 	if (pte & ARM_V7S_ATTR_MTK_PA_BIT33)
 		paddr |= BIT_ULL(33);
+	if (pte & ARM_V7S_ATTR_MTK_PA_BIT34)
+		paddr |= BIT_ULL(34);
 	return paddr;
 }
 
@@ -236,7 +247,7 @@
 	struct device *dev = cfg->iommu_dev;
 	phys_addr_t phys;
 	dma_addr_t dma;
-	size_t size = ARM_V7S_TABLE_SIZE(lvl);
+	size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
 	void *table = NULL;
 
 	if (lvl == 1)
@@ -282,7 +293,7 @@
 {
 	struct io_pgtable_cfg *cfg = &data->iop.cfg;
 	struct device *dev = cfg->iommu_dev;
-	size_t size = ARM_V7S_TABLE_SIZE(lvl);
+	size_t size = ARM_V7S_TABLE_SIZE(lvl, cfg);
 
 	if (!cfg->coherent_walk)
 		dma_unmap_single(dev, __arm_v7s_dma_addr(table), size,
@@ -426,7 +437,7 @@
 			arm_v7s_iopte *tblp;
 			size_t sz = ARM_V7S_BLOCK_SIZE(lvl);
 
-			tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl);
+			tblp = ptep - ARM_V7S_LVL_IDX(iova, lvl, cfg);
 			if (WARN_ON(__arm_v7s_unmap(data, NULL, iova + i * sz,
 						    sz, lvl, tblp) != sz))
 				return -EINVAL;
@@ -479,7 +490,7 @@
 	int num_entries = size >> ARM_V7S_LVL_SHIFT(lvl);
 
 	/* Find our entry at the current level */
-	ptep += ARM_V7S_LVL_IDX(iova, lvl);
+	ptep += ARM_V7S_LVL_IDX(iova, lvl, cfg);
 
 	/* If we can install a leaf entry at this level, then do so */
 	if (num_entries)
@@ -552,7 +563,7 @@
 	struct arm_v7s_io_pgtable *data = io_pgtable_to_data(iop);
 	int i;
 
-	for (i = 0; i < ARM_V7S_PTES_PER_LVL(1); i++) {
+	for (i = 0; i < ARM_V7S_PTES_PER_LVL(1, &data->iop.cfg); i++) {
 		arm_v7s_iopte pte = data->pgd[i];
 
 		if (ARM_V7S_PTE_IS_TABLE(pte, 1))
@@ -604,9 +615,9 @@
 	if (!tablep)
 		return 0; /* Bytes unmapped */
 
-	num_ptes = ARM_V7S_PTES_PER_LVL(2);
+	num_ptes = ARM_V7S_PTES_PER_LVL(2, cfg);
 	num_entries = size >> ARM_V7S_LVL_SHIFT(2);
-	unmap_idx = ARM_V7S_LVL_IDX(iova, 2);
+	unmap_idx = ARM_V7S_LVL_IDX(iova, 2, cfg);
 
 	pte = arm_v7s_prot_to_pte(arm_v7s_pte_to_prot(blk_pte, 1), 2, cfg);
 	if (num_entries > 1)
@@ -648,7 +659,7 @@
 	if (WARN_ON(lvl > 2))
 		return 0;
 
-	idx = ARM_V7S_LVL_IDX(iova, lvl);
+	idx = ARM_V7S_LVL_IDX(iova, lvl, &iop->cfg);
 	ptep += idx;
 	do {
 		pte[i] = READ_ONCE(ptep[i]);
@@ -719,7 +730,7 @@
 {
 	struct arm_v7s_io_pgtable *data = io_pgtable_ops_to_data(ops);
 
-	if (WARN_ON(upper_32_bits(iova)))
+	if (WARN_ON(iova >= (1ULL << data->iop.cfg.ias)))
 		return 0;
 
 	return __arm_v7s_unmap(data, gather, iova, size, 1, data->pgd);
@@ -734,7 +745,7 @@
 	u32 mask;
 
 	do {
-		ptep += ARM_V7S_LVL_IDX(iova, ++lvl);
+		ptep += ARM_V7S_LVL_IDX(iova, ++lvl, &data->iop.cfg);
 		pte = READ_ONCE(*ptep);
 		ptep = iopte_deref(pte, lvl, data);
 	} while (ARM_V7S_PTE_IS_TABLE(pte, lvl));
@@ -753,10 +764,10 @@
 {
 	struct arm_v7s_io_pgtable *data;
 
-	if (cfg->ias > ARM_V7S_ADDR_BITS)
+	if (cfg->ias > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
 		return NULL;
 
-	if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 34 : ARM_V7S_ADDR_BITS))
+	if (cfg->oas > (arm_v7s_is_mtk_enabled(cfg) ? 35 : ARM_V7S_ADDR_BITS))
 		return NULL;
 
 	if (cfg->quirks & ~(IO_PGTABLE_QUIRK_ARM_NS |
@@ -777,8 +788,8 @@
 
 	spin_lock_init(&data->split_lock);
 	data->l2_tables = kmem_cache_create("io-pgtable_armv7s_l2",
-					    ARM_V7S_TABLE_SIZE(2),
-					    ARM_V7S_TABLE_SIZE(2),
+					    ARM_V7S_TABLE_SIZE(2, cfg),
+					    ARM_V7S_TABLE_SIZE(2, cfg),
 					    ARM_V7S_TABLE_SLAB_FLAGS, NULL);
 	if (!data->l2_tables)
 		goto out_free_data;
diff --git a/drivers/iommu/iommu-sysfs.c b/drivers/iommu/iommu-sysfs.c
index e436ff8..9986921 100644
--- a/drivers/iommu/iommu-sysfs.c
+++ b/drivers/iommu/iommu-sysfs.c
@@ -87,6 +87,7 @@
 	put_device(iommu->dev);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(iommu_device_sysfs_add);
 
 void iommu_device_sysfs_remove(struct iommu_device *iommu)
 {
@@ -94,6 +95,8 @@
 	device_unregister(iommu->dev);
 	iommu->dev = NULL;
 }
+EXPORT_SYMBOL_GPL(iommu_device_sysfs_remove);
+
 /*
  * IOMMU drivers can indicate a device is managed by a given IOMMU using
  * this interface.  A link to the device will be created in the "devices"
@@ -119,6 +122,7 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(iommu_device_link);
 
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link)
 {
@@ -128,3 +132,4 @@
 	sysfs_remove_link(&link->kobj, "iommu");
 	sysfs_remove_link_from_group(&iommu->dev->kobj, "devices", dev_name(link));
 }
+EXPORT_SYMBOL_GPL(iommu_device_unlink);
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index c5758fb..9a9138e 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -22,6 +22,7 @@
 #include <linux/bitops.h>
 #include <linux/property.h>
 #include <linux/fsl/mc.h>
+#include <linux/module.h>
 #include <trace/events/iommu.h>
 
 static struct kset *iommu_group_kset;
@@ -141,6 +142,7 @@
 	spin_unlock(&iommu_device_lock);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(iommu_device_register);
 
 void iommu_device_unregister(struct iommu_device *iommu)
 {
@@ -148,6 +150,7 @@
 	list_del(&iommu->list);
 	spin_unlock(&iommu_device_lock);
 }
+EXPORT_SYMBOL_GPL(iommu_device_unregister);
 
 static struct iommu_param *iommu_get_dev_param(struct device *dev)
 {
@@ -183,10 +186,21 @@
 	if (!iommu_get_dev_param(dev))
 		return -ENOMEM;
 
+	if (!try_module_get(ops->owner)) {
+		ret = -EINVAL;
+		goto err_free_dev_param;
+	}
+
 	ret = ops->add_device(dev);
 	if (ret)
-		iommu_free_dev_param(dev);
+		goto err_module_put;
 
+	return 0;
+
+err_module_put:
+	module_put(ops->owner);
+err_free_dev_param:
+	iommu_free_dev_param(dev);
 	return ret;
 }
 
@@ -197,7 +211,10 @@
 	if (dev->iommu_group)
 		ops->remove_device(dev);
 
-	iommu_free_dev_param(dev);
+	if (dev->iommu_param) {
+		module_put(ops->owner);
+		iommu_free_dev_param(dev);
+	}
 }
 
 static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
@@ -289,8 +306,8 @@
  * Elements are sorted by start address and overlapping segments
  * of the same type are merged.
  */
-int iommu_insert_resv_region(struct iommu_resv_region *new,
-			     struct list_head *regions)
+static int iommu_insert_resv_region(struct iommu_resv_region *new,
+				    struct list_head *regions)
 {
 	struct iommu_resv_region *iter, *tmp, *nr, *top;
 	LIST_HEAD(stack);
@@ -890,6 +907,7 @@
 	kobject_get(group->devices_kobj);
 	return group;
 }
+EXPORT_SYMBOL_GPL(iommu_group_ref_get);
 
 /**
  * iommu_group_put - Decrement group reference
@@ -1263,6 +1281,7 @@
 {
 	return iommu_group_alloc();
 }
+EXPORT_SYMBOL_GPL(generic_device_group);
 
 /*
  * Use standard PCI bus topology, isolation features, and DMA alias quirks
@@ -1330,6 +1349,7 @@
 	/* No shared group found, allocate new */
 	return iommu_group_alloc();
 }
+EXPORT_SYMBOL_GPL(pci_device_group);
 
 /* Get the IOMMU group for device on fsl-mc bus */
 struct iommu_group *fsl_mc_device_group(struct device *dev)
@@ -1342,6 +1362,7 @@
 		group = iommu_group_alloc();
 	return group;
 }
+EXPORT_SYMBOL_GPL(fsl_mc_device_group);
 
 /**
  * iommu_group_get_for_dev - Find or create the IOMMU group for a device
@@ -1410,6 +1431,7 @@
 
 	return group;
 }
+EXPORT_SYMBOL_GPL(iommu_group_get_for_dev);
 
 struct iommu_domain *iommu_group_default_domain(struct iommu_group *group)
 {
@@ -1540,6 +1562,11 @@
 {
 	int err;
 
+	if (ops == NULL) {
+		bus->iommu_ops = NULL;
+		return 0;
+	}
+
 	if (bus->iommu_ops != NULL)
 		return -EBUSY;
 
@@ -1858,8 +1885,8 @@
 	return pgsize;
 }
 
-int iommu_map(struct iommu_domain *domain, unsigned long iova,
-	      phys_addr_t paddr, size_t size, int prot)
+static int __iommu_map(struct iommu_domain *domain, unsigned long iova,
+		       phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	const struct iommu_ops *ops = domain->ops;
 	unsigned long orig_iova = iova;
@@ -1896,8 +1923,8 @@
 
 		pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
 			 iova, &paddr, pgsize);
+		ret = ops->map(domain, iova, paddr, pgsize, prot, gfp);
 
-		ret = ops->map(domain, iova, paddr, pgsize, prot);
 		if (ret)
 			break;
 
@@ -1906,9 +1933,6 @@
 		size -= pgsize;
 	}
 
-	if (ops->iotlb_sync_map)
-		ops->iotlb_sync_map(domain);
-
 	/* unroll mapping in case something went wrong */
 	if (ret)
 		iommu_unmap(domain, orig_iova, orig_size - size);
@@ -1917,8 +1941,35 @@
 
 	return ret;
 }
+
+static int _iommu_map(struct iommu_domain *domain, unsigned long iova,
+		      phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
+{
+	const struct iommu_ops *ops = domain->ops;
+	int ret;
+
+	ret = __iommu_map(domain, iova, paddr, size, prot, gfp);
+	if (ret == 0 && ops->iotlb_sync_map)
+		ops->iotlb_sync_map(domain, iova, size);
+
+	return ret;
+}
+
+int iommu_map(struct iommu_domain *domain, unsigned long iova,
+	      phys_addr_t paddr, size_t size, int prot)
+{
+	might_sleep();
+	return _iommu_map(domain, iova, paddr, size, prot, GFP_KERNEL);
+}
 EXPORT_SYMBOL_GPL(iommu_map);
 
+int iommu_map_atomic(struct iommu_domain *domain, unsigned long iova,
+	      phys_addr_t paddr, size_t size, int prot)
+{
+	return _iommu_map(domain, iova, paddr, size, prot, GFP_ATOMIC);
+}
+EXPORT_SYMBOL_GPL(iommu_map_atomic);
+
 static size_t __iommu_unmap(struct iommu_domain *domain,
 			    unsigned long iova, size_t size,
 			    struct iommu_iotlb_gather *iotlb_gather)
@@ -1995,9 +2046,11 @@
 }
 EXPORT_SYMBOL_GPL(iommu_unmap_fast);
 
-size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
-		    struct scatterlist *sg, unsigned int nents, int prot)
+static size_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+			     struct scatterlist *sg, unsigned int nents, int prot,
+			     gfp_t gfp)
 {
+	const struct iommu_ops *ops = domain->ops;
 	size_t len = 0, mapped = 0;
 	phys_addr_t start;
 	unsigned int i = 0;
@@ -2007,7 +2060,9 @@
 		phys_addr_t s_phys = sg_phys(sg);
 
 		if (len && s_phys != start + len) {
-			ret = iommu_map(domain, iova + mapped, start, len, prot);
+			ret = __iommu_map(domain, iova + mapped, start,
+					len, prot, gfp);
+
 			if (ret)
 				goto out_err;
 
@@ -2026,6 +2081,8 @@
 			sg = sg_next(sg);
 	}
 
+	if (ops->iotlb_sync_map)
+		ops->iotlb_sync_map(domain, iova, mapped);
 	return mapped;
 
 out_err:
@@ -2035,8 +2092,22 @@
 	return 0;
 
 }
+
+size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
+		    struct scatterlist *sg, unsigned int nents, int prot)
+{
+	might_sleep();
+	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_KERNEL);
+}
 EXPORT_SYMBOL_GPL(iommu_map_sg);
 
+size_t iommu_map_sg_atomic(struct iommu_domain *domain, unsigned long iova,
+		    struct scatterlist *sg, unsigned int nents, int prot)
+{
+	return __iommu_map_sg(domain, iova, sg, nents, prot, GFP_ATOMIC);
+}
+EXPORT_SYMBOL_GPL(iommu_map_sg_atomic);
+
 int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr,
 			       phys_addr_t paddr, u64 size, int prot)
 {
@@ -2189,6 +2260,7 @@
 	region->type = type;
 	return region;
 }
+EXPORT_SYMBOL_GPL(iommu_alloc_resv_region);
 
 static int
 request_default_domain_for_dev(struct device *dev, unsigned long type)
diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c
index 612cbf6..7593ba3 100644
--- a/drivers/iommu/iova.c
+++ b/drivers/iommu/iova.c
@@ -50,6 +50,7 @@
 	iovad->anchor.pfn_lo = iovad->anchor.pfn_hi = IOVA_ANCHOR;
 	rb_link_node(&iovad->anchor.node, NULL, &iovad->rbroot.rb_node);
 	rb_insert_color(&iovad->anchor.node, &iovad->rbroot);
+	iovad->best_fit = false;
 	init_iova_rcaches(iovad);
 }
 EXPORT_SYMBOL_GPL(init_iova_domain);
@@ -177,6 +178,24 @@
 	rb_insert_color(&iova->node, root);
 }
 
+#ifdef CONFIG_IOMMU_LIMIT_IOVA_ALIGNMENT
+static unsigned long limit_align_shift(struct iova_domain *iovad,
+				       unsigned long shift)
+{
+	unsigned long max_align_shift;
+
+	max_align_shift = CONFIG_IOMMU_IOVA_ALIGNMENT + PAGE_SHIFT
+		- iova_shift(iovad);
+	return min_t(unsigned long, max_align_shift, shift);
+}
+#else
+static unsigned long limit_align_shift(struct iova_domain *iovad,
+				       unsigned long shift)
+{
+	return shift;
+}
+#endif
+
 static int __alloc_and_insert_iova_range(struct iova_domain *iovad,
 		unsigned long size, unsigned long limit_pfn,
 			struct iova *new, bool size_aligned)
@@ -188,7 +207,7 @@
 	unsigned long align_mask = ~0UL;
 
 	if (size_aligned)
-		align_mask <<= fls_long(size - 1);
+		align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
 
 	/* Walk the tree backwards */
 	spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);
@@ -227,6 +246,70 @@
 	return -ENOMEM;
 }
 
+static int __alloc_and_insert_iova_best_fit(struct iova_domain *iovad,
+					    unsigned long size,
+					    unsigned long limit_pfn,
+					    struct iova *new, bool size_aligned)
+{
+	struct rb_node *curr, *prev;
+	struct iova *curr_iova, *prev_iova;
+	unsigned long flags;
+	unsigned long align_mask = ~0UL;
+	struct rb_node *candidate_rb_parent;
+	unsigned long new_pfn, candidate_pfn = ~0UL;
+	unsigned long gap, candidate_gap = ~0UL;
+
+	if (size_aligned)
+		align_mask <<= limit_align_shift(iovad, fls_long(size - 1));
+
+	/* Walk the tree backwards */
+	spin_lock_irqsave(&iovad->iova_rbtree_lock, flags);
+	curr = &iovad->anchor.node;
+	prev = rb_prev(curr);
+	for (; prev; curr = prev, prev = rb_prev(curr)) {
+		curr_iova = rb_entry(curr, struct iova, node);
+		prev_iova = rb_entry(prev, struct iova, node);
+
+		limit_pfn = min(limit_pfn, curr_iova->pfn_lo);
+		new_pfn = (limit_pfn - size) & align_mask;
+		gap = curr_iova->pfn_lo - prev_iova->pfn_hi - 1;
+		if ((limit_pfn >= size) && (new_pfn > prev_iova->pfn_hi)
+				&& (gap < candidate_gap)) {
+			candidate_gap = gap;
+			candidate_pfn = new_pfn;
+			candidate_rb_parent = curr;
+			if (gap == size)
+				goto insert;
+		}
+	}
+
+	curr_iova = rb_entry(curr, struct iova, node);
+	limit_pfn = min(limit_pfn, curr_iova->pfn_lo);
+	new_pfn = (limit_pfn - size) & align_mask;
+	gap = curr_iova->pfn_lo - iovad->start_pfn;
+	if (limit_pfn >= size && new_pfn >= iovad->start_pfn &&
+			gap < candidate_gap) {
+		candidate_gap = gap;
+		candidate_pfn = new_pfn;
+		candidate_rb_parent = curr;
+	}
+
+insert:
+	if (candidate_pfn == ~0UL) {
+		spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags);
+		return -ENOMEM;
+	}
+
+	/* pfn_lo will point to size aligned address if size_aligned is set */
+	new->pfn_lo = candidate_pfn;
+	new->pfn_hi = new->pfn_lo + size - 1;
+
+	/* If we have 'prev', it's a valid place to start the insertion. */
+	iova_insert_rbtree(&iovad->rbroot, new, candidate_rb_parent);
+	spin_unlock_irqrestore(&iovad->iova_rbtree_lock, flags);
+	return 0;
+}
+
 static struct kmem_cache *iova_cache;
 static unsigned int iova_cache_users;
 static DEFINE_MUTEX(iova_cache_mutex);
@@ -302,8 +385,13 @@
 	if (!new_iova)
 		return NULL;
 
-	ret = __alloc_and_insert_iova_range(iovad, size, limit_pfn + 1,
-			new_iova, size_aligned);
+	if (iovad->best_fit) {
+		ret = __alloc_and_insert_iova_best_fit(iovad, size,
+				limit_pfn + 1, new_iova, size_aligned);
+	} else {
+		ret = __alloc_and_insert_iova_range(iovad, size, limit_pfn + 1,
+				new_iova, size_aligned);
+	}
 
 	if (ret) {
 		free_iova_mem(new_iova);
diff --git a/drivers/iommu/ipmmu-vmsa.c b/drivers/iommu/ipmmu-vmsa.c
index 2639fc7..3dc4c79 100644
--- a/drivers/iommu/ipmmu-vmsa.c
+++ b/drivers/iommu/ipmmu-vmsa.c
@@ -724,7 +724,7 @@
 }
 
 static int ipmmu_map(struct iommu_domain *io_domain, unsigned long iova,
-		     phys_addr_t paddr, size_t size, int prot)
+		     phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct ipmmu_vmsa_domain *domain = to_vmsa_domain(io_domain);
 
diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c
index be99d40..93f14bc 100644
--- a/drivers/iommu/msm_iommu.c
+++ b/drivers/iommu/msm_iommu.c
@@ -504,7 +504,7 @@
 }
 
 static int msm_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t pa, size_t len, int prot)
+			 phys_addr_t pa, size_t len, int prot, gfp_t gfp)
 {
 	struct msm_priv *priv = to_msm_priv(domain);
 	unsigned long flags;
diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index c2f6c78..eb2ef17 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -101,8 +101,6 @@
 #define MTK_M4U_TO_PORT(id)		((id) & 0x1f)
 
 struct mtk_iommu_domain {
-	spinlock_t			pgtlock; /* lock for page table */
-
 	struct io_pgtable_cfg		cfg;
 	struct io_pgtable_ops		*iop;
 
@@ -161,10 +159,8 @@
 	return container_of(dom, struct mtk_iommu_domain, domain);
 }
 
-static void mtk_iommu_tlb_flush_all(void *cookie)
+static void mtk_iommu_tlb_flush_all(struct mtk_iommu_data *data)
 {
-	struct mtk_iommu_data *data = cookie;
-
 	for_each_m4u(data) {
 		writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0,
 			       data->base + REG_MMU_INV_SEL);
@@ -173,13 +169,16 @@
 	}
 }
 
-static void mtk_iommu_tlb_add_flush_nosync(unsigned long iova, size_t size,
-					   size_t granule, bool leaf,
-					   void *cookie)
+static void mtk_iommu_tlb_flush_range_sync(unsigned long iova, size_t size,
+					   size_t granule,
+					   struct mtk_iommu_data *data)
 {
-	struct mtk_iommu_data *data = cookie;
+	unsigned long flags;
+	int ret;
+	u32 tmp;
 
 	for_each_m4u(data) {
+		spin_lock_irqsave(&data->tlb_lock, flags);
 		writel_relaxed(F_INVLD_EN1 | F_INVLD_EN0,
 			       data->base + REG_MMU_INV_SEL);
 
@@ -188,77 +187,21 @@
 			       data->base + REG_MMU_INVLD_END_A);
 		writel_relaxed(F_MMU_INV_RANGE,
 			       data->base + REG_MMU_INVALIDATE);
-		data->tlb_flush_active = true;
-	}
-}
 
-static void mtk_iommu_tlb_sync(void *cookie)
-{
-	struct mtk_iommu_data *data = cookie;
-	int ret;
-	u32 tmp;
-
-	for_each_m4u(data) {
-		/* Avoid timing out if there's nothing to wait for */
-		if (!data->tlb_flush_active)
-			return;
-
+		/* tlb sync */
 		ret = readl_poll_timeout_atomic(data->base + REG_MMU_CPE_DONE,
-						tmp, tmp != 0, 10, 100000);
+						tmp, tmp != 0, 10, 1000);
 		if (ret) {
 			dev_warn(data->dev,
 				 "Partial TLB flush timed out, falling back to full flush\n");
-			mtk_iommu_tlb_flush_all(cookie);
+			mtk_iommu_tlb_flush_all(data);
 		}
 		/* Clear the CPE status */
 		writel_relaxed(0, data->base + REG_MMU_CPE_DONE);
-		data->tlb_flush_active = false;
+		spin_unlock_irqrestore(&data->tlb_lock, flags);
 	}
 }
 
-static void mtk_iommu_tlb_flush_walk(unsigned long iova, size_t size,
-				     size_t granule, void *cookie)
-{
-	struct mtk_iommu_data *data = cookie;
-	unsigned long flags;
-
-	spin_lock_irqsave(&data->tlb_lock, flags);
-	mtk_iommu_tlb_add_flush_nosync(iova, size, granule, false, cookie);
-	mtk_iommu_tlb_sync(cookie);
-	spin_unlock_irqrestore(&data->tlb_lock, flags);
-}
-
-static void mtk_iommu_tlb_flush_leaf(unsigned long iova, size_t size,
-				     size_t granule, void *cookie)
-{
-	struct mtk_iommu_data *data = cookie;
-	unsigned long flags;
-
-	spin_lock_irqsave(&data->tlb_lock, flags);
-	mtk_iommu_tlb_add_flush_nosync(iova, size, granule, true, cookie);
-	mtk_iommu_tlb_sync(cookie);
-	spin_unlock_irqrestore(&data->tlb_lock, flags);
-}
-
-static void mtk_iommu_tlb_flush_page_nosync(struct iommu_iotlb_gather *gather,
-					    unsigned long iova, size_t granule,
-					    void *cookie)
-{
-	struct mtk_iommu_data *data = cookie;
-	unsigned long flags;
-
-	spin_lock_irqsave(&data->tlb_lock, flags);
-	mtk_iommu_tlb_add_flush_nosync(iova, granule, granule, true, cookie);
-	spin_unlock_irqrestore(&data->tlb_lock, flags);
-}
-
-static const struct iommu_flush_ops mtk_iommu_flush_ops = {
-	.tlb_flush_all = mtk_iommu_tlb_flush_all,
-	.tlb_flush_walk = mtk_iommu_tlb_flush_walk,
-	.tlb_flush_leaf = mtk_iommu_tlb_flush_leaf,
-	.tlb_add_page = mtk_iommu_tlb_flush_page_nosync,
-};
-
 static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
 {
 	struct mtk_iommu_data *data = dev_id;
@@ -331,17 +274,13 @@
 {
 	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
 
-	spin_lock_init(&dom->pgtlock);
-
 	dom->cfg = (struct io_pgtable_cfg) {
 		.quirks = IO_PGTABLE_QUIRK_ARM_NS |
 			IO_PGTABLE_QUIRK_NO_PERMS |
-			IO_PGTABLE_QUIRK_TLBI_ON_MAP |
 			IO_PGTABLE_QUIRK_ARM_MTK_EXT,
 		.pgsize_bitmap = mtk_iommu_ops.pgsize_bitmap,
 		.ias = 32,
 		.oas = 34,
-		.tlb = &mtk_iommu_flush_ops,
 		.iommu_dev = data->dev,
 	};
 
@@ -427,22 +366,17 @@
 }
 
 static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t paddr, size_t size, int prot)
+			 phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
 	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
-	unsigned long flags;
-	int ret;
 
 	/* The "4GB mode" M4U physically can not use the lower remap of Dram. */
 	if (data->enable_4GB)
 		paddr |= BIT_ULL(32);
 
-	spin_lock_irqsave(&dom->pgtlock, flags);
-	ret = dom->iop->map(dom->iop, iova, paddr, size, prot);
-	spin_unlock_irqrestore(&dom->pgtlock, flags);
-
-	return ret;
+	/* Synchronize with the tlb_lock */
+	return dom->iop->map(dom->iop, iova, paddr, size, prot);
 }
 
 static size_t mtk_iommu_unmap(struct iommu_domain *domain,
@@ -450,14 +384,13 @@
 			      struct iommu_iotlb_gather *gather)
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
-	unsigned long flags;
-	size_t unmapsz;
+	unsigned long end = iova + size - 1;
 
-	spin_lock_irqsave(&dom->pgtlock, flags);
-	unmapsz = dom->iop->unmap(dom->iop, iova, size, gather);
-	spin_unlock_irqrestore(&dom->pgtlock, flags);
-
-	return unmapsz;
+	if (gather->start > iova)
+		gather->start = iova;
+	if (gather->end < end)
+		gather->end = end;
+	return dom->iop->unmap(dom->iop, iova, size, gather);
 }
 
 static void mtk_iommu_flush_iotlb_all(struct iommu_domain *domain)
@@ -469,11 +402,18 @@
 				 struct iommu_iotlb_gather *gather)
 {
 	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
-	unsigned long flags;
+	size_t length = gather->end - gather->start + 1;
 
-	spin_lock_irqsave(&data->tlb_lock, flags);
-	mtk_iommu_tlb_sync(data);
-	spin_unlock_irqrestore(&data->tlb_lock, flags);
+	mtk_iommu_tlb_flush_range_sync(gather->start, length, gather->pgsize,
+				       data);
+}
+
+static void mtk_iommu_sync_map(struct iommu_domain *domain, unsigned long iova,
+			       size_t size)
+{
+	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
+
+	mtk_iommu_tlb_flush_range_sync(iova, size, size, data);
 }
 
 static phys_addr_t mtk_iommu_iova_to_phys(struct iommu_domain *domain,
@@ -481,13 +421,9 @@
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
 	struct mtk_iommu_data *data = mtk_iommu_get_m4u_data();
-	unsigned long flags;
 	phys_addr_t pa;
 
-	spin_lock_irqsave(&dom->pgtlock, flags);
 	pa = dom->iop->iova_to_phys(dom->iop, iova);
-	spin_unlock_irqrestore(&dom->pgtlock, flags);
-
 	if (data->enable_4GB && pa >= MTK_IOMMU_4GB_MODE_REMAP_BASE)
 		pa &= ~BIT_ULL(32);
 
@@ -579,6 +515,7 @@
 	.unmap		= mtk_iommu_unmap,
 	.flush_iotlb_all = mtk_iommu_flush_iotlb_all,
 	.iotlb_sync	= mtk_iommu_iotlb_sync,
+	.iotlb_sync_map	= mtk_iommu_sync_map,
 	.iova_to_phys	= mtk_iommu_iova_to_phys,
 	.add_device	= mtk_iommu_add_device,
 	.remove_device	= mtk_iommu_remove_device,
diff --git a/drivers/iommu/mtk_iommu.h b/drivers/iommu/mtk_iommu.h
index 8cae22d..ea949a3 100644
--- a/drivers/iommu/mtk_iommu.h
+++ b/drivers/iommu/mtk_iommu.h
@@ -57,7 +57,6 @@
 	struct mtk_iommu_domain		*m4u_dom;
 	struct iommu_group		*m4u_group;
 	bool                            enable_4GB;
-	bool				tlb_flush_active;
 	spinlock_t			tlb_lock; /* lock for tlb range flush */
 
 	struct iommu_device		iommu;
diff --git a/drivers/iommu/mtk_iommu_v1.c b/drivers/iommu/mtk_iommu_v1.c
index b5efd6d..e93b94e 100644
--- a/drivers/iommu/mtk_iommu_v1.c
+++ b/drivers/iommu/mtk_iommu_v1.c
@@ -295,7 +295,7 @@
 }
 
 static int mtk_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			 phys_addr_t paddr, size_t size, int prot)
+			 phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct mtk_iommu_domain *dom = to_mtk_domain(domain);
 	unsigned int page_num = size >> MT2701_IOMMU_PAGE_SHIFT;
diff --git a/drivers/iommu/of_iommu.c b/drivers/iommu/of_iommu.c
index 614a93a..2549140 100644
--- a/drivers/iommu/of_iommu.c
+++ b/drivers/iommu/of_iommu.c
@@ -8,6 +8,7 @@
 #include <linux/export.h>
 #include <linux/iommu.h>
 #include <linux/limits.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_iommu.h>
 #include <linux/of_pci.h>
@@ -89,16 +90,16 @@
 {
 	const struct iommu_ops *ops;
 	struct fwnode_handle *fwnode = &iommu_spec->np->fwnode;
-	int err;
+	int ret;
 
 	ops = iommu_ops_from_fwnode(fwnode);
 	if ((ops && !ops->of_xlate) ||
 	    !of_device_is_available(iommu_spec->np))
 		return NO_IOMMU;
 
-	err = iommu_fwspec_init(dev, &iommu_spec->np->fwnode, ops);
-	if (err)
-		return err;
+	ret = iommu_fwspec_init(dev, &iommu_spec->np->fwnode, ops);
+	if (ret)
+		return ret;
 	/*
 	 * The otherwise-empty fwspec handily serves to indicate the specific
 	 * IOMMU device we're waiting for, which will be useful if we ever get
@@ -107,7 +108,12 @@
 	if (!ops)
 		return driver_deferred_probe_check_state(dev);
 
-	return ops->of_xlate(dev, iommu_spec);
+	if (!try_module_get(ops->owner))
+		return -ENODEV;
+
+	ret = ops->of_xlate(dev, iommu_spec);
+	module_put(ops->owner);
+	return ret;
 }
 
 struct of_pci_iommu_alias_info {
@@ -177,6 +183,7 @@
 			.np = master_np,
 		};
 
+		pci_request_acs();
 		err = pci_for_each_dma_alias(to_pci_dev(dev),
 					     of_pci_iommu_init, &info);
 	} else if (dev_is_fsl_mc(dev)) {
diff --git a/drivers/iommu/omap-iommu.c b/drivers/iommu/omap-iommu.c
index 09c6e1c..be551cc 100644
--- a/drivers/iommu/omap-iommu.c
+++ b/drivers/iommu/omap-iommu.c
@@ -1339,7 +1339,7 @@
 }
 
 static int omap_iommu_map(struct iommu_domain *domain, unsigned long da,
-			  phys_addr_t pa, size_t bytes, int prot)
+			  phys_addr_t pa, size_t bytes, int prot, gfp_t gfp)
 {
 	struct omap_iommu_domain *omap_domain = to_omap_domain(domain);
 	struct device *dev = omap_domain->dev;
diff --git a/drivers/iommu/qcom_iommu.c b/drivers/iommu/qcom_iommu.c
index 280de92b..1be1a17 100644
--- a/drivers/iommu/qcom_iommu.c
+++ b/drivers/iommu/qcom_iommu.c
@@ -419,7 +419,7 @@
 }
 
 static int qcom_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	int ret;
 	unsigned long flags;
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index 0df0919..96f37d9 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -758,7 +758,7 @@
 }
 
 static int rk_iommu_map(struct iommu_domain *domain, unsigned long _iova,
-			phys_addr_t paddr, size_t size, int prot)
+			phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct rk_iommu_domain *rk_domain = to_rk_domain(domain);
 	unsigned long flags;
diff --git a/drivers/iommu/s390-iommu.c b/drivers/iommu/s390-iommu.c
index 3b0b18e..1137f3d 100644
--- a/drivers/iommu/s390-iommu.c
+++ b/drivers/iommu/s390-iommu.c
@@ -265,7 +265,7 @@
 }
 
 static int s390_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct s390_domain *s390_domain = to_s390_domain(domain);
 	int flags = ZPCI_PTE_VALID, rc = 0;
diff --git a/drivers/iommu/tegra-gart.c b/drivers/iommu/tegra-gart.c
index 3924f7c..6ababca 100644
--- a/drivers/iommu/tegra-gart.c
+++ b/drivers/iommu/tegra-gart.c
@@ -178,7 +178,7 @@
 }
 
 static int gart_iommu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t pa, size_t bytes, int prot)
+			  phys_addr_t pa, size_t bytes, int prot, gfp_t gfp)
 {
 	struct gart_device *gart = gart_handle;
 	int ret;
@@ -273,7 +273,8 @@
 	return 0;
 }
 
-static void gart_iommu_sync_map(struct iommu_domain *domain)
+static void gart_iommu_sync_map(struct iommu_domain *domain, unsigned long iova,
+				size_t size)
 {
 	FLUSH_GART_REGS(gart_handle);
 }
@@ -281,7 +282,9 @@
 static void gart_iommu_sync(struct iommu_domain *domain,
 			    struct iommu_iotlb_gather *gather)
 {
-	gart_iommu_sync_map(domain);
+	size_t length = gather->end - gather->start + 1;
+
+	gart_iommu_sync_map(domain, gather->start, length);
 }
 
 static const struct iommu_ops gart_iommu_ops = {
diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
index dd48623..576be3f 100644
--- a/drivers/iommu/tegra-smmu.c
+++ b/drivers/iommu/tegra-smmu.c
@@ -651,7 +651,7 @@
 }
 
 static int tegra_smmu_map(struct iommu_domain *domain, unsigned long iova,
-			  phys_addr_t paddr, size_t size, int prot)
+			  phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	struct tegra_smmu_as *as = to_smmu_as(domain);
 	dma_addr_t pte_dma;
diff --git a/drivers/iommu/virtio-iommu.c b/drivers/iommu/virtio-iommu.c
index 60e659a..37e2267 100644
--- a/drivers/iommu/virtio-iommu.c
+++ b/drivers/iommu/virtio-iommu.c
@@ -715,7 +715,7 @@
 }
 
 static int viommu_map(struct iommu_domain *domain, unsigned long iova,
-		      phys_addr_t paddr, size_t size, int prot)
+		      phys_addr_t paddr, size_t size, int prot, gfp_t gfp)
 {
 	int ret;
 	u32 flags;
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index 20f44ef..2e8fb87 100644
--- a/drivers/irqchip/Kconfig
+++ b/drivers/irqchip/Kconfig
@@ -422,7 +422,7 @@
          for Goldfish based virtual platforms.
 
 config QCOM_PDC
-	bool "QCOM PDC"
+	tristate "QCOM PDC"
 	depends on ARCH_QCOM
 	select IRQ_DOMAIN_HIERARCHY
 	help
diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c
index 5849ac5..84f2741 100644
--- a/drivers/irqchip/irq-armada-370-xp.c
+++ b/drivers/irqchip/irq-armada-370-xp.c
@@ -306,7 +306,134 @@
 }
 #endif
 
+static void armada_xp_mpic_perf_init(void)
+{
+	unsigned long cpuid = cpu_logical_map(smp_processor_id());
+
+	/* Enable Performance Counter Overflow interrupts */
+	writel(ARMADA_370_XP_INT_CAUSE_PERF(cpuid),
+	       per_cpu_int_base + ARMADA_370_XP_INT_FABRIC_MASK_OFFS);
+}
+
 #ifdef CONFIG_SMP
+static struct irq_domain *ipi_domain;
+
+static void armada_370_xp_ipi_mask(struct irq_data *d)
+{
+	u32 reg;
+	reg = readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	reg &= ~BIT(d->hwirq);
+	writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+}
+
+static void armada_370_xp_ipi_unmask(struct irq_data *d)
+{
+	u32 reg;
+	reg = readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+	reg |= BIT(d->hwirq);
+	writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+}
+
+static void armada_370_xp_ipi_send_mask(struct irq_data *d,
+					const struct cpumask *mask)
+{
+	unsigned long map = 0;
+	int cpu;
+
+	/* Convert our logical CPU mask into a physical one. */
+	for_each_cpu(cpu, mask)
+		map |= 1 << cpu_logical_map(cpu);
+
+	/*
+	 * Ensure that stores to Normal memory are visible to the
+	 * other CPUs before issuing the IPI.
+	 */
+	dsb();
+
+	/* submit softirq */
+	writel((map << 8) | d->hwirq, main_int_base +
+		ARMADA_370_XP_SW_TRIG_INT_OFFS);
+}
+
+static void armada_370_xp_ipi_eoi(struct irq_data *d)
+{
+	writel(~BIT(d->hwirq), per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
+}
+
+static struct irq_chip ipi_irqchip = {
+	.name		= "IPI",
+	.irq_mask	= armada_370_xp_ipi_mask,
+	.irq_unmask	= armada_370_xp_ipi_unmask,
+	.irq_eoi	= armada_370_xp_ipi_eoi,
+	.ipi_send_mask	= armada_370_xp_ipi_send_mask,
+};
+
+static int armada_370_xp_ipi_alloc(struct irq_domain *d,
+					 unsigned int virq,
+					 unsigned int nr_irqs, void *args)
+{
+	int i;
+
+	for (i = 0; i < nr_irqs; i++) {
+		irq_set_percpu_devid(virq + i);
+		irq_domain_set_info(d, virq + i, i, &ipi_irqchip,
+				    d->host_data,
+				    handle_percpu_devid_fasteoi_ipi,
+				    NULL, NULL);
+	}
+
+	return 0;
+}
+
+static void armada_370_xp_ipi_free(struct irq_domain *d,
+					 unsigned int virq,
+					 unsigned int nr_irqs)
+{
+	/* Not freeing IPIs */
+}
+
+static const struct irq_domain_ops ipi_domain_ops = {
+	.alloc	= armada_370_xp_ipi_alloc,
+	.free	= armada_370_xp_ipi_free,
+};
+
+static void ipi_resume(void)
+{
+	int i;
+
+	for (i = 0; i < IPI_DOORBELL_END; i++) {
+		int irq;
+
+		irq = irq_find_mapping(ipi_domain, i);
+		if (irq <= 0)
+			continue;
+		if (irq_percpu_is_enabled(irq)) {
+			struct irq_data *d;
+			d = irq_domain_get_irq_data(ipi_domain, irq);
+			armada_370_xp_ipi_unmask(d);
+		}
+	}
+}
+
+static __init void armada_xp_ipi_init(struct device_node *node)
+{
+	int base_ipi;
+
+	ipi_domain = irq_domain_create_linear(of_node_to_fwnode(node),
+					      IPI_DOORBELL_END,
+					      &ipi_domain_ops, NULL);
+	if (WARN_ON(!ipi_domain))
+		return;
+
+	irq_domain_update_bus_token(ipi_domain, DOMAIN_BUS_IPI);
+	base_ipi = __irq_domain_alloc_irqs(ipi_domain, -1, IPI_DOORBELL_END,
+					   NUMA_NO_NODE, NULL, false, NULL);
+	if (WARN_ON(!base_ipi))
+		return;
+
+	set_smp_ipi_range(base_ipi, IPI_DOORBELL_END);
+}
+
 static DEFINE_RAW_SPINLOCK(irq_controller_lock);
 
 static int armada_xp_set_affinity(struct irq_data *d,
@@ -330,6 +457,70 @@
 
 	return IRQ_SET_MASK_OK;
 }
+
+static void armada_xp_mpic_smp_cpu_init(void)
+{
+	u32 control;
+	int nr_irqs, i;
+
+	control = readl(main_int_base + ARMADA_370_XP_INT_CONTROL);
+	nr_irqs = (control >> 2) & 0x3ff;
+
+	for (i = 0; i < nr_irqs; i++)
+		writel(i, per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS);
+
+	/* Disable all IPIs */
+	writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
+
+	/* Clear pending IPIs */
+	writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
+
+	/* Unmask IPI interrupt */
+	writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+}
+
+static void armada_xp_mpic_reenable_percpu(void)
+{
+	unsigned int irq;
+
+	/* Re-enable per-CPU interrupts that were enabled before suspend */
+	for (irq = 0; irq < ARMADA_370_XP_MAX_PER_CPU_IRQS; irq++) {
+		struct irq_data *data;
+		int virq;
+
+		virq = irq_linear_revmap(armada_370_xp_mpic_domain, irq);
+		if (virq == 0)
+			continue;
+
+		data = irq_get_irq_data(virq);
+
+		if (!irq_percpu_is_enabled(virq))
+			continue;
+
+		armada_370_xp_irq_unmask(data);
+	}
+
+	ipi_resume();
+}
+
+static int armada_xp_mpic_starting_cpu(unsigned int cpu)
+{
+	armada_xp_mpic_perf_init();
+	armada_xp_mpic_smp_cpu_init();
+	armada_xp_mpic_reenable_percpu();
+	return 0;
+}
+
+static int mpic_cascaded_starting_cpu(unsigned int cpu)
+{
+	armada_xp_mpic_perf_init();
+	armada_xp_mpic_reenable_percpu();
+	enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
+	return 0;
+}
+#else
+static void armada_xp_mpic_smp_cpu_init(void) {}
+static void ipi_resume(void) {}
 #endif
 
 static struct irq_chip armada_370_xp_irq_chip = {
@@ -368,98 +559,6 @@
 	return 0;
 }
 
-static void armada_xp_mpic_smp_cpu_init(void)
-{
-	u32 control;
-	int nr_irqs, i;
-
-	control = readl(main_int_base + ARMADA_370_XP_INT_CONTROL);
-	nr_irqs = (control >> 2) & 0x3ff;
-
-	for (i = 0; i < nr_irqs; i++)
-		writel(i, per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS);
-
-	/* Clear pending IPIs */
-	writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
-
-	/* Enable first 8 IPIs */
-	writel(IPI_DOORBELL_MASK, per_cpu_int_base +
-		ARMADA_370_XP_IN_DRBEL_MSK_OFFS);
-
-	/* Unmask IPI interrupt */
-	writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
-}
-
-static void armada_xp_mpic_perf_init(void)
-{
-	unsigned long cpuid = cpu_logical_map(smp_processor_id());
-
-	/* Enable Performance Counter Overflow interrupts */
-	writel(ARMADA_370_XP_INT_CAUSE_PERF(cpuid),
-	       per_cpu_int_base + ARMADA_370_XP_INT_FABRIC_MASK_OFFS);
-}
-
-#ifdef CONFIG_SMP
-static void armada_mpic_send_doorbell(const struct cpumask *mask,
-				      unsigned int irq)
-{
-	int cpu;
-	unsigned long map = 0;
-
-	/* Convert our logical CPU mask into a physical one. */
-	for_each_cpu(cpu, mask)
-		map |= 1 << cpu_logical_map(cpu);
-
-	/*
-	 * Ensure that stores to Normal memory are visible to the
-	 * other CPUs before issuing the IPI.
-	 */
-	dsb();
-
-	/* submit softirq */
-	writel((map << 8) | irq, main_int_base +
-		ARMADA_370_XP_SW_TRIG_INT_OFFS);
-}
-
-static void armada_xp_mpic_reenable_percpu(void)
-{
-	unsigned int irq;
-
-	/* Re-enable per-CPU interrupts that were enabled before suspend */
-	for (irq = 0; irq < ARMADA_370_XP_MAX_PER_CPU_IRQS; irq++) {
-		struct irq_data *data;
-		int virq;
-
-		virq = irq_linear_revmap(armada_370_xp_mpic_domain, irq);
-		if (virq == 0)
-			continue;
-
-		data = irq_get_irq_data(virq);
-
-		if (!irq_percpu_is_enabled(virq))
-			continue;
-
-		armada_370_xp_irq_unmask(data);
-	}
-}
-
-static int armada_xp_mpic_starting_cpu(unsigned int cpu)
-{
-	armada_xp_mpic_perf_init();
-	armada_xp_mpic_smp_cpu_init();
-	armada_xp_mpic_reenable_percpu();
-	return 0;
-}
-
-static int mpic_cascaded_starting_cpu(unsigned int cpu)
-{
-	armada_xp_mpic_perf_init();
-	armada_xp_mpic_reenable_percpu();
-	enable_percpu_irq(parent_irq, IRQ_TYPE_NONE);
-	return 0;
-}
-#endif
-
 static const struct irq_domain_ops armada_370_xp_mpic_irq_ops = {
 	.map = armada_370_xp_mpic_irq_map,
 	.xlate = irq_domain_xlate_onecell,
@@ -558,22 +657,15 @@
 #ifdef CONFIG_SMP
 		/* IPI Handling */
 		if (irqnr == 0) {
-			u32 ipimask, ipinr;
+			unsigned long ipimask;
+			int ipi;
 
 			ipimask = readl_relaxed(per_cpu_int_base +
 						ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS)
 				& IPI_DOORBELL_MASK;
 
-			writel(~ipimask, per_cpu_int_base +
-				ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS);
-
-			/* Handle all pending doorbells */
-			for (ipinr = IPI_DOORBELL_START;
-			     ipinr < IPI_DOORBELL_END; ipinr++) {
-				if (ipimask & (0x1 << ipinr))
-					handle_IPI(ipinr, regs);
-			}
-			continue;
+			for_each_set_bit(ipi, &ipimask, IPI_DOORBELL_END)
+				handle_domain_irq(ipi_domain, ipi, regs);
 		}
 #endif
 
@@ -632,6 +724,8 @@
 		writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
 	if (doorbell_mask_reg & PCI_MSI_DOORBELL_MASK)
 		writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS);
+
+	ipi_resume();
 }
 
 static struct syscore_ops armada_370_xp_mpic_syscore_ops = {
@@ -687,7 +781,7 @@
 		irq_set_default_host(armada_370_xp_mpic_domain);
 		set_handle_irq(armada_370_xp_handle_irq);
 #ifdef CONFIG_SMP
-		set_smp_cross_call(armada_mpic_send_doorbell);
+		armada_xp_ipi_init(node);
 		cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_ARMADA_XP_STARTING,
 					  "irqchip/armada/ipi:starting",
 					  armada_xp_mpic_starting_cpu, NULL);
diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c
index 2038693..72c8127 100644
--- a/drivers/irqchip/irq-bcm2836.c
+++ b/drivers/irqchip/irq-bcm2836.c
@@ -10,6 +10,7 @@
 #include <linux/of_irq.h>
 #include <linux/irqchip.h>
 #include <linux/irqdomain.h>
+#include <linux/irqchip/chained_irq.h>
 #include <linux/irqchip/irq-bcm2836.h>
 
 #include <asm/exception.h>
@@ -89,12 +90,24 @@
 	.irq_unmask	= bcm2836_arm_irqchip_unmask_gpu_irq,
 };
 
+static void bcm2836_arm_irqchip_dummy_op(struct irq_data *d)
+{
+}
+
+static struct irq_chip bcm2836_arm_irqchip_dummy = {
+	.name		= "bcm2836-dummy",
+	.irq_eoi	= bcm2836_arm_irqchip_dummy_op,
+};
+
 static int bcm2836_map(struct irq_domain *d, unsigned int irq,
 		       irq_hw_number_t hw)
 {
 	struct irq_chip *chip;
 
 	switch (hw) {
+	case LOCAL_IRQ_MAILBOX0:
+		chip = &bcm2836_arm_irqchip_dummy;
+		break;
 	case LOCAL_IRQ_CNTPSIRQ:
 	case LOCAL_IRQ_CNTPNSIRQ:
 	case LOCAL_IRQ_CNTHPIRQ:
@@ -127,17 +140,7 @@
 	u32 stat;
 
 	stat = readl_relaxed(intc.base + LOCAL_IRQ_PENDING0 + 4 * cpu);
-	if (stat & BIT(LOCAL_IRQ_MAILBOX0)) {
-#ifdef CONFIG_SMP
-		void __iomem *mailbox0 = (intc.base +
-					  LOCAL_MAILBOX0_CLR0 + 16 * cpu);
-		u32 mbox_val = readl(mailbox0);
-		u32 ipi = ffs(mbox_val) - 1;
-
-		writel(1 << ipi, mailbox0);
-		handle_IPI(ipi, regs);
-#endif
-	} else if (stat) {
+	if (stat) {
 		u32 hwirq = ffs(stat) - 1;
 
 		handle_domain_irq(intc.domain, hwirq, regs);
@@ -145,8 +148,35 @@
 }
 
 #ifdef CONFIG_SMP
-static void bcm2836_arm_irqchip_send_ipi(const struct cpumask *mask,
-					 unsigned int ipi)
+static struct irq_domain *ipi_domain;
+
+static void bcm2836_arm_irqchip_handle_ipi(struct irq_desc *desc)
+{
+	struct irq_chip *chip = irq_desc_get_chip(desc);
+	int cpu = smp_processor_id();
+	u32 mbox_val;
+
+	chained_irq_enter(chip, desc);
+
+	mbox_val = readl_relaxed(intc.base + LOCAL_MAILBOX0_CLR0 + 16 * cpu);
+	if (mbox_val) {
+		int hwirq = ffs(mbox_val) - 1;
+		generic_handle_irq(irq_find_mapping(ipi_domain, hwirq));
+	}
+
+	chained_irq_exit(chip, desc);
+}
+
+static void bcm2836_arm_irqchip_ipi_eoi(struct irq_data *d)
+{
+	int cpu = smp_processor_id();
+
+	writel_relaxed(BIT(d->hwirq),
+		       intc.base + LOCAL_MAILBOX0_CLR0 + 16 * cpu);
+}
+
+static void bcm2836_arm_irqchip_ipi_send_mask(struct irq_data *d,
+					      const struct cpumask *mask)
 {
 	int cpu;
 	void __iomem *mailbox0_base = intc.base + LOCAL_MAILBOX0_SET0;
@@ -157,11 +187,47 @@
 	 */
 	smp_wmb();
 
-	for_each_cpu(cpu, mask)	{
-		writel(1 << ipi, mailbox0_base + 16 * cpu);
-	}
+	for_each_cpu(cpu, mask)
+		writel_relaxed(BIT(d->hwirq), mailbox0_base + 16 * cpu);
 }
 
+static struct irq_chip bcm2836_arm_irqchip_ipi = {
+	.name		= "IPI",
+	.irq_mask	= bcm2836_arm_irqchip_dummy_op,
+	.irq_unmask	= bcm2836_arm_irqchip_dummy_op,
+	.irq_eoi	= bcm2836_arm_irqchip_ipi_eoi,
+	.ipi_send_mask	= bcm2836_arm_irqchip_ipi_send_mask,
+};
+
+static int bcm2836_arm_irqchip_ipi_alloc(struct irq_domain *d,
+					 unsigned int virq,
+					 unsigned int nr_irqs, void *args)
+{
+	int i;
+
+	for (i = 0; i < nr_irqs; i++) {
+		irq_set_percpu_devid(virq + i);
+		irq_domain_set_info(d, virq + i, i, &bcm2836_arm_irqchip_ipi,
+				    d->host_data,
+				    handle_percpu_devid_fasteoi_ipi,
+				    NULL, NULL);
+	}
+
+	return 0;
+}
+
+static void bcm2836_arm_irqchip_ipi_free(struct irq_domain *d,
+					 unsigned int virq,
+					 unsigned int nr_irqs)
+{
+	/* Not freeing IPIs */
+}
+
+static const struct irq_domain_ops ipi_domain_ops = {
+	.alloc	= bcm2836_arm_irqchip_ipi_alloc,
+	.free	= bcm2836_arm_irqchip_ipi_free,
+};
+
 static int bcm2836_cpu_starting(unsigned int cpu)
 {
 	bcm2836_arm_irqchip_unmask_per_cpu_irq(LOCAL_MAILBOX_INT_CONTROL0, 0,
@@ -175,6 +241,52 @@
 					     cpu);
 	return 0;
 }
+
+#define BITS_PER_MBOX	32
+
+static void __init bcm2836_arm_irqchip_smp_init(void)
+{
+	struct irq_fwspec ipi_fwspec = {
+		.fwnode		= intc.domain->fwnode,
+		.param_count	= 1,
+		.param		= {
+			[0]	= LOCAL_IRQ_MAILBOX0,
+		},
+	};
+	int base_ipi, mux_irq;
+
+	mux_irq = irq_create_fwspec_mapping(&ipi_fwspec);
+	if (WARN_ON(mux_irq <= 0))
+		return;
+
+	ipi_domain = irq_domain_create_linear(intc.domain->fwnode,
+					      BITS_PER_MBOX, &ipi_domain_ops,
+					      NULL);
+	if (WARN_ON(!ipi_domain))
+		return;
+
+	ipi_domain->flags |= IRQ_DOMAIN_FLAG_IPI_SINGLE;
+	irq_domain_update_bus_token(ipi_domain, DOMAIN_BUS_IPI);
+
+	base_ipi = __irq_domain_alloc_irqs(ipi_domain, -1, BITS_PER_MBOX,
+					   NUMA_NO_NODE, NULL,
+					   false, NULL);
+
+	if (WARN_ON(!base_ipi))
+		return;
+
+	set_smp_ipi_range(base_ipi, BITS_PER_MBOX);
+
+	irq_set_chained_handler_and_data(mux_irq,
+					 bcm2836_arm_irqchip_handle_ipi, NULL);
+
+	/* Unmask IPIs to the boot CPU. */
+	cpuhp_setup_state(CPUHP_AP_IRQ_BCM2836_STARTING,
+			  "irqchip/bcm2836:starting", bcm2836_cpu_starting,
+			  bcm2836_cpu_dying);
+}
+#else
+#define bcm2836_arm_irqchip_smp_init()	do { } while (0)
 #endif
 
 static const struct irq_domain_ops bcm2836_arm_irqchip_intc_ops = {
@@ -182,19 +294,6 @@
 	.map = bcm2836_map,
 };
 
-static void
-bcm2836_arm_irqchip_smp_init(void)
-{
-#ifdef CONFIG_SMP
-	/* Unmask IPIs to the boot CPU. */
-	cpuhp_setup_state(CPUHP_AP_IRQ_BCM2836_STARTING,
-			  "irqchip/bcm2836:starting", bcm2836_cpu_starting,
-			  bcm2836_cpu_dying);
-
-	set_smp_cross_call(bcm2836_arm_irqchip_send_ipi);
-#endif
-}
-
 /*
  * The LOCAL_IRQ_CNT* timer firings are based off of the external
  * oscillator with some scaling.  The firmware sets up CNTFRQ to
@@ -232,6 +331,8 @@
 	if (!intc.domain)
 		panic("%pOF: unable to create IRQ domain\n", node);
 
+	irq_domain_update_bus_token(intc.domain, DOMAIN_BUS_WIRED);
+
 	bcm2836_arm_irqchip_smp_init();
 
 	set_handle_irq(bcm2836_arm_irqchip_handle_irq);
diff --git a/drivers/irqchip/irq-gic-common.c b/drivers/irqchip/irq-gic-common.c
index 8252000..f47b41d 100644
--- a/drivers/irqchip/irq-gic-common.c
+++ b/drivers/irqchip/irq-gic-common.c
@@ -152,9 +152,6 @@
 		writel_relaxed(GICD_INT_DEF_PRI_X4,
 					base + GIC_DIST_PRI + i * 4 / 4);
 
-	/* Ensure all SGI interrupts are now enabled */
-	writel_relaxed(GICD_INT_EN_SET_SGI, base + GIC_DIST_ENABLE_SET);
-
 	if (sync_access)
 		sync_access();
 }
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
index 9d0b42c..e9677bb 100644
--- a/drivers/irqchip/irq-gic-v3.c
+++ b/drivers/irqchip/irq-gic-v3.c
@@ -18,6 +18,8 @@
 #include <linux/percpu.h>
 #include <linux/refcount.h>
 #include <linux/slab.h>
+#include <linux/wakeup_reason.h>
+
 
 #include <linux/irqchip.h>
 #include <linux/irqchip/arm-gic-common.h>
@@ -35,6 +37,8 @@
 
 #define FLAGS_WORKAROUND_GICR_WAKER_MSM8996	(1ULL << 0)
 
+#define GIC_IRQ_TYPE_PARTITION	(GIC_IRQ_TYPE_LPI + 1)
+
 struct redist_region {
 	void __iomem		*redist_base;
 	phys_addr_t		phys_base;
@@ -102,6 +106,7 @@
 #define DEFAULT_PMR_VALUE	0xf0
 
 enum gic_intid_range {
+	SGI_RANGE,
 	PPI_RANGE,
 	SPI_RANGE,
 	EPPI_RANGE,
@@ -113,6 +118,8 @@
 static enum gic_intid_range __get_intid_range(irq_hw_number_t hwirq)
 {
 	switch (hwirq) {
+	case 0 ... 15:
+		return SGI_RANGE;
 	case 16 ... 31:
 		return PPI_RANGE;
 	case 32 ... 1019:
@@ -138,15 +145,22 @@
 	return d->hwirq;
 }
 
-static inline int gic_irq_in_rdist(struct irq_data *d)
+static inline bool gic_irq_in_rdist(struct irq_data *d)
 {
-	enum gic_intid_range range = get_intid_range(d);
-	return range == PPI_RANGE || range == EPPI_RANGE;
+	switch (get_intid_range(d)) {
+	case SGI_RANGE:
+	case PPI_RANGE:
+	case EPPI_RANGE:
+		return true;
+	default:
+		return false;
+	}
 }
 
 static inline void __iomem *gic_dist_base(struct irq_data *d)
 {
 	switch (get_intid_range(d)) {
+	case SGI_RANGE:
 	case PPI_RANGE:
 	case EPPI_RANGE:
 		/* SGI+PPI -> SGI_base for this CPU */
@@ -243,6 +257,7 @@
 static u32 convert_offset_index(struct irq_data *d, u32 offset, u32 *index)
 {
 	switch (get_intid_range(d)) {
+	case SGI_RANGE:
 	case PPI_RANGE:
 	case SPI_RANGE:
 		*index = d->hwirq;
@@ -362,7 +377,7 @@
 {
 	u32 reg;
 
-	if (d->hwirq >= 8192) /* PPI/SPI only */
+	if (d->hwirq >= 8192) /* SGI/PPI/SPI only */
 		return -EINVAL;
 
 	switch (which) {
@@ -529,12 +544,12 @@
 	u32 offset, index;
 	int ret;
 
-	/* Interrupt configuration for SGIs can't be changed */
-	if (irq < 16)
-		return -EINVAL;
-
 	range = get_intid_range(d);
 
+	/* Interrupt configuration for SGIs can't be changed */
+	if (range == SGI_RANGE)
+		return type != IRQ_TYPE_EDGE_RISING ? -EINVAL : 0;
+
 	/* SPIs have restrictions on the supported types */
 	if ((range == SPI_RANGE || range == ESPI_RANGE) &&
 	    type != IRQ_TYPE_LEVEL_HIGH && type != IRQ_TYPE_EDGE_RISING)
@@ -562,6 +577,9 @@
 
 static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
 {
+	if (get_intid_range(d) == SGI_RANGE)
+		return -EINVAL;
+
 	if (vcpu)
 		irqd_set_forwarded_to_vcpu(d);
 	else
@@ -636,38 +654,17 @@
 		gic_arch_enable_irqs();
 	}
 
-	/* Treat anything but SGIs in a uniform way */
-	if (likely(irqnr > 15)) {
-		int err;
-
-		if (static_branch_likely(&supports_deactivate_key))
-			gic_write_eoir(irqnr);
-		else
-			isb();
-
-		err = handle_domain_irq(gic_data.domain, irqnr, regs);
-		if (err) {
-			WARN_ONCE(true, "Unexpected interrupt received!\n");
-			gic_deactivate_unhandled(irqnr);
-		}
-		return;
-	}
-	if (irqnr < 16) {
+	if (static_branch_likely(&supports_deactivate_key))
 		gic_write_eoir(irqnr);
-		if (static_branch_likely(&supports_deactivate_key))
-			gic_write_dir(irqnr);
-#ifdef CONFIG_SMP
-		/*
-		 * Unlike GICv2, we don't need an smp_rmb() here.
-		 * The control dependency from gic_read_iar to
-		 * the ISB in gic_write_eoir is enough to ensure
-		 * that any shared data read by handle_IPI will
-		 * be read after the ACK.
-		 */
-		handle_IPI(irqnr, regs);
-#else
-		WARN_ONCE(true, "Unexpected SGI received!\n");
-#endif
+	else
+		isb();
+
+	if (handle_domain_irq(gic_data.domain, irqnr, regs)) {
+		WARN_ONCE(true, "Unexpected interrupt received!\n");
+		log_abnormal_wakeup_reason(
+				"unexpected HW IRQ %u", irqnr);
+
+		gic_deactivate_unhandled(irqnr);
 	}
 }
 
@@ -1092,11 +1089,11 @@
 	gic_write_sgi1r(val);
 }
 
-static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
+static void gic_ipi_send_mask(struct irq_data *d, const struct cpumask *mask)
 {
 	int cpu;
 
-	if (WARN_ON(irq >= 16))
+	if (WARN_ON(d->hwirq >= 16))
 		return;
 
 	/*
@@ -1110,7 +1107,7 @@
 		u16 tlist;
 
 		tlist = gic_compute_target_list(&cpu, mask, cluster_id);
-		gic_send_sgi(cluster_id, tlist, irq);
+		gic_send_sgi(cluster_id, tlist, d->hwirq);
 	}
 
 	/* Force the above writes to ICC_SGI1R_EL1 to be executed */
@@ -1119,10 +1116,24 @@
 
 static void gic_smp_init(void)
 {
-	set_smp_cross_call(gic_raise_softirq);
+	struct irq_fwspec sgi_fwspec = {
+		.fwnode		= gic_data.fwnode,
+		.param_count	= 1,
+	};
+	int base_sgi;
+
 	cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_GIC_STARTING,
 				  "irqchip/arm/gicv3:starting",
 				  gic_starting_cpu, NULL);
+
+	/* Register all 8 non-secure SGIs */
+	base_sgi = __irq_domain_alloc_irqs(gic_data.domain, -1, 8,
+					   NUMA_NO_NODE, &sgi_fwspec,
+					   false, NULL);
+	if (WARN_ON(base_sgi <= 0))
+		return;
+
+	set_smp_ipi_range(base_sgi, 8);
 }
 
 static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
@@ -1171,6 +1182,7 @@
 }
 #else
 #define gic_set_affinity	NULL
+#define gic_ipi_send_mask	NULL
 #define gic_smp_init()		do { } while(0)
 #endif
 
@@ -1213,6 +1225,7 @@
 	.irq_set_irqchip_state	= gic_irq_set_irqchip_state,
 	.irq_nmi_setup		= gic_irq_nmi_setup,
 	.irq_nmi_teardown	= gic_irq_nmi_teardown,
+	.ipi_send_mask		= gic_ipi_send_mask,
 	.flags			= IRQCHIP_SET_TYPE_MASKED |
 				  IRQCHIP_SKIP_SET_WAKE |
 				  IRQCHIP_MASK_ON_SUSPEND,
@@ -1230,6 +1243,7 @@
 	.irq_set_vcpu_affinity	= gic_irq_set_vcpu_affinity,
 	.irq_nmi_setup		= gic_irq_nmi_setup,
 	.irq_nmi_teardown	= gic_irq_nmi_teardown,
+	.ipi_send_mask		= gic_ipi_send_mask,
 	.flags			= IRQCHIP_SET_TYPE_MASKED |
 				  IRQCHIP_SKIP_SET_WAKE |
 				  IRQCHIP_MASK_ON_SUSPEND,
@@ -1244,12 +1258,18 @@
 		chip = &gic_eoimode1_chip;
 
 	switch (__get_intid_range(hw)) {
+	case SGI_RANGE:
+		irq_set_percpu_devid(irq);
+		irq_domain_set_info(d, irq, hw, chip, d->host_data,
+				    handle_percpu_devid_fasteoi_ipi,
+				    NULL, NULL);
+		break;
+
 	case PPI_RANGE:
 	case EPPI_RANGE:
 		irq_set_percpu_devid(irq);
 		irq_domain_set_info(d, irq, hw, chip, d->host_data,
 				    handle_percpu_devid_irq, NULL, NULL);
-		irq_set_status_flags(irq, IRQ_NOAUTOEN);
 		break;
 
 	case SPI_RANGE:
@@ -1274,13 +1294,17 @@
 	return 0;
 }
 
-#define GIC_IRQ_TYPE_PARTITION	(GIC_IRQ_TYPE_LPI + 1)
-
 static int gic_irq_domain_translate(struct irq_domain *d,
 				    struct irq_fwspec *fwspec,
 				    unsigned long *hwirq,
 				    unsigned int *type)
 {
+	if (fwspec->param_count == 1 && fwspec->param[0] < 16) {
+		*hwirq = fwspec->param[0];
+		*type = IRQ_TYPE_EDGE_RISING;
+		return 0;
+	}
+
 	if (is_of_node(fwspec->fwnode)) {
 		if (fwspec->param_count < 3)
 			return -EINVAL;
@@ -1568,9 +1592,9 @@
 
 	gic_update_rdist_properties();
 
-	gic_smp_init();
 	gic_dist_init();
 	gic_cpu_init();
+	gic_smp_init();
 	gic_cpu_pm_init();
 
 	if (gic_dist_supports_lpis()) {
@@ -1722,7 +1746,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;
@@ -1792,7 +1816,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/irq-gic.c b/drivers/irqchip/irq-gic.c
index 882204d..cc2e0ac 100644
--- a/drivers/irqchip/irq-gic.c
+++ b/drivers/irqchip/irq-gic.c
@@ -83,9 +83,6 @@
 #endif
 	struct irq_domain *domain;
 	unsigned int gic_irqs;
-#ifdef CONFIG_GIC_NON_BANKED
-	void __iomem *(*get_base)(union gic_base *);
-#endif
 };
 
 #ifdef CONFIG_BL_SWITCHER
@@ -124,36 +121,30 @@
 
 static struct gic_kvm_info gic_v2_kvm_info;
 
+static DEFINE_PER_CPU(u32, sgi_intid);
+
 #ifdef CONFIG_GIC_NON_BANKED
-static void __iomem *gic_get_percpu_base(union gic_base *base)
+static DEFINE_STATIC_KEY_FALSE(frankengic_key);
+
+static void enable_frankengic(void)
 {
-	return raw_cpu_read(*base->percpu_base);
+	static_branch_enable(&frankengic_key);
 }
 
-static void __iomem *gic_get_common_base(union gic_base *base)
+static inline void __iomem *__get_base(union gic_base *base)
 {
+	if (static_branch_unlikely(&frankengic_key))
+		return raw_cpu_read(*base->percpu_base);
+
 	return base->common_base;
 }
 
-static inline void __iomem *gic_data_dist_base(struct gic_chip_data *data)
-{
-	return data->get_base(&data->dist_base);
-}
-
-static inline void __iomem *gic_data_cpu_base(struct gic_chip_data *data)
-{
-	return data->get_base(&data->cpu_base);
-}
-
-static inline void gic_set_base_accessor(struct gic_chip_data *data,
-					 void __iomem *(*f)(union gic_base *))
-{
-	data->get_base = f;
-}
+#define gic_data_dist_base(d)	__get_base(&(d)->dist_base)
+#define gic_data_cpu_base(d)	__get_base(&(d)->cpu_base)
 #else
 #define gic_data_dist_base(d)	((d)->dist_base.common_base)
 #define gic_data_cpu_base(d)	((d)->cpu_base.common_base)
-#define gic_set_base_accessor(d, f)
+#define enable_frankengic()	do { } while (0)
 #endif
 
 static inline void __iomem *gic_dist_base(struct irq_data *d)
@@ -226,16 +217,26 @@
 
 static void gic_eoi_irq(struct irq_data *d)
 {
-	writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_EOI);
+	u32 hwirq = gic_irq(d);
+
+	if (hwirq < 16)
+		hwirq = this_cpu_read(sgi_intid);
+
+	writel_relaxed(hwirq, gic_cpu_base(d) + GIC_CPU_EOI);
 }
 
 static void gic_eoimode1_eoi_irq(struct irq_data *d)
 {
+	u32 hwirq = gic_irq(d);
+
 	/* Do not deactivate an IRQ forwarded to a vcpu. */
 	if (irqd_is_forwarded_to_vcpu(d))
 		return;
 
-	writel_relaxed(gic_irq(d), gic_cpu_base(d) + GIC_CPU_DEACTIVATE);
+	if (hwirq < 16)
+		hwirq = this_cpu_read(sgi_intid);
+
+	writel_relaxed(hwirq, gic_cpu_base(d) + GIC_CPU_DEACTIVATE);
 }
 
 static int gic_irq_set_irqchip_state(struct irq_data *d,
@@ -295,7 +296,7 @@
 
 	/* Interrupt configuration for SGIs can't be changed */
 	if (gicirq < 16)
-		return -EINVAL;
+		return type != IRQ_TYPE_EDGE_RISING ? -EINVAL : 0;
 
 	/* SPIs have restrictions on the supported types */
 	if (gicirq >= 32 && type != IRQ_TYPE_LEVEL_HIGH &&
@@ -315,7 +316,7 @@
 static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu)
 {
 	/* Only interrupts on the primary GIC can be forwarded to a vcpu. */
-	if (cascading_gic_irq(d))
+	if (cascading_gic_irq(d) || gic_irq(d) < 16)
 		return -EINVAL;
 
 	if (vcpu)
@@ -325,28 +326,6 @@
 	return 0;
 }
 
-#ifdef CONFIG_SMP
-static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
-			    bool force)
-{
-	void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + gic_irq(d);
-	unsigned int cpu;
-
-	if (!force)
-		cpu = cpumask_any_and(mask_val, cpu_online_mask);
-	else
-		cpu = cpumask_first(mask_val);
-
-	if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
-		return -EINVAL;
-
-	writeb_relaxed(gic_cpu_map[cpu], reg);
-	irq_data_update_effective_affinity(d, cpumask_of(cpu));
-
-	return IRQ_SET_MASK_OK_DONE;
-}
-#endif
-
 static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
 {
 	u32 irqstat, irqnr;
@@ -357,31 +336,33 @@
 		irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK);
 		irqnr = irqstat & GICC_IAR_INT_ID_MASK;
 
-		if (likely(irqnr > 15 && irqnr < 1020)) {
-			if (static_branch_likely(&supports_deactivate_key))
-				writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
-			isb();
-			handle_domain_irq(gic->domain, irqnr, regs);
-			continue;
-		}
-		if (irqnr < 16) {
+		if (unlikely(irqnr >= 1020))
+			break;
+
+		if (static_branch_likely(&supports_deactivate_key))
 			writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
-			if (static_branch_likely(&supports_deactivate_key))
-				writel_relaxed(irqstat, cpu_base + GIC_CPU_DEACTIVATE);
-#ifdef CONFIG_SMP
-			/*
-			 * Ensure any shared data written by the CPU sending
-			 * the IPI is read after we've read the ACK register
-			 * on the GIC.
-			 *
-			 * Pairs with the write barrier in gic_raise_softirq
-			 */
+		isb();
+
+		/*
+		 * Ensure any shared data written by the CPU sending the IPI
+		 * is read after we've read the ACK register on the GIC.
+		 *
+		 * Pairs with the write barrier in gic_ipi_send_mask
+		 */
+		if (irqnr <= 15) {
 			smp_rmb();
-			handle_IPI(irqnr, regs);
-#endif
-			continue;
+
+			/*
+			 * The GIC encodes the source CPU in GICC_IAR,
+			 * leading to the deactivation to fail if not
+			 * written back as is to GICC_EOI.  Stash the INTID
+			 * away for gic_eoi_irq() to write back.  This only
+			 * works because we don't nest SGIs...
+			 */
+			this_cpu_write(sgi_intid, irqstat);
 		}
-		break;
+
+		handle_domain_irq(gic->domain, irqnr, regs);
 	} while (1);
 }
 
@@ -728,11 +709,6 @@
 	int i;
 
 	for (i = 0; i < CONFIG_ARM_GIC_MAX_NR; i++) {
-#ifdef CONFIG_GIC_NON_BANKED
-		/* Skip over unused GICs */
-		if (!gic_data[i].get_base)
-			continue;
-#endif
 		switch (cmd) {
 		case CPU_PM_ENTER:
 			gic_cpu_save(&gic_data[i]);
@@ -795,14 +771,34 @@
 #endif
 
 #ifdef CONFIG_SMP
-static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)
+static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,
+			    bool force)
+{
+	void __iomem *reg = gic_dist_base(d) + GIC_DIST_TARGET + gic_irq(d);
+	unsigned int cpu;
+
+	if (!force)
+		cpu = cpumask_any_and(mask_val, cpu_online_mask);
+	else
+		cpu = cpumask_first(mask_val);
+
+	if (cpu >= NR_GIC_CPU_IF || cpu >= nr_cpu_ids)
+		return -EINVAL;
+
+	writeb_relaxed(gic_cpu_map[cpu], reg);
+	irq_data_update_effective_affinity(d, cpumask_of(cpu));
+
+	return IRQ_SET_MASK_OK_DONE;
+}
+
+static void gic_ipi_send_mask(struct irq_data *d, const struct cpumask *mask)
 {
 	int cpu;
 	unsigned long flags, map = 0;
 
 	if (unlikely(nr_cpu_ids == 1)) {
 		/* Only one CPU? let's do a self-IPI... */
-		writel_relaxed(2 << 24 | irq,
+		writel_relaxed(2 << 24 | d->hwirq,
 			       gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
 		return;
 	}
@@ -820,10 +816,41 @@
 	dmb(ishst);
 
 	/* this always happens on GIC0 */
-	writel_relaxed(map << 16 | irq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
+	writel_relaxed(map << 16 | d->hwirq, gic_data_dist_base(&gic_data[0]) + GIC_DIST_SOFTINT);
 
 	gic_unlock_irqrestore(flags);
 }
+
+static int gic_starting_cpu(unsigned int cpu)
+{
+	gic_cpu_init(&gic_data[0]);
+	return 0;
+}
+
+static __init void gic_smp_init(void)
+{
+	struct irq_fwspec sgi_fwspec = {
+		.fwnode		= gic_data[0].domain->fwnode,
+		.param_count	= 1,
+	};
+	int base_sgi;
+
+	cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_GIC_STARTING,
+				  "irqchip/arm/gic:starting",
+				  gic_starting_cpu, NULL);
+
+	base_sgi = __irq_domain_alloc_irqs(gic_data[0].domain, -1, 8,
+					   NUMA_NO_NODE, &sgi_fwspec,
+					   false, NULL);
+	if (WARN_ON(base_sgi <= 0))
+		return;
+
+	set_smp_ipi_range(base_sgi, 8);
+}
+#else
+#define gic_smp_init()		do { } while (0)
+#define gic_set_affinity	NULL
+#define gic_ipi_send_mask	NULL
 #endif
 
 #ifdef CONFIG_BL_SWITCHER
@@ -970,16 +997,24 @@
 {
 	struct gic_chip_data *gic = d->host_data;
 
-	if (hw < 32) {
+	switch (hw) {
+	case 0 ... 15:
+		irq_set_percpu_devid(irq);
+		irq_domain_set_info(d, irq, hw, &gic->chip, d->host_data,
+				    handle_percpu_devid_fasteoi_ipi,
+				    NULL, NULL);
+		break;
+	case 16 ... 31:
 		irq_set_percpu_devid(irq);
 		irq_domain_set_info(d, irq, hw, &gic->chip, d->host_data,
 				    handle_percpu_devid_irq, NULL, NULL);
-		irq_set_status_flags(irq, IRQ_NOAUTOEN);
-	} else {
+		break;
+	default:
 		irq_domain_set_info(d, irq, hw, &gic->chip, d->host_data,
 				    handle_fasteoi_irq, NULL, NULL);
 		irq_set_probe(irq);
 		irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(irq)));
+		break;
 	}
 	return 0;
 }
@@ -993,19 +1028,26 @@
 				    unsigned long *hwirq,
 				    unsigned int *type)
 {
+	if (fwspec->param_count == 1 && fwspec->param[0] < 16) {
+		*hwirq = fwspec->param[0];
+		*type = IRQ_TYPE_EDGE_RISING;
+		return 0;
+	}
+
 	if (is_of_node(fwspec->fwnode)) {
 		if (fwspec->param_count < 3)
 			return -EINVAL;
 
-		/* Get the interrupt number and add 16 to skip over SGIs */
-		*hwirq = fwspec->param[1] + 16;
-
-		/*
-		 * For SPIs, we need to add 16 more to get the GIC irq
-		 * ID number
-		 */
-		if (!fwspec->param[0])
-			*hwirq += 16;
+		switch (fwspec->param[0]) {
+		case 0:			/* SPI */
+			*hwirq = fwspec->param[1] + 32;
+			break;
+		case 1:			/* PPI */
+			*hwirq = fwspec->param[1] + 16;
+			break;
+		default:
+			return -EINVAL;
+		}
 
 		*type = fwspec->param[2] & IRQ_TYPE_SENSE_MASK;
 
@@ -1028,12 +1070,6 @@
 	return -EINVAL;
 }
 
-static int gic_starting_cpu(unsigned int cpu)
-{
-	gic_cpu_init(&gic_data[0]);
-	return 0;
-}
-
 static int gic_irq_domain_alloc(struct irq_domain *domain, unsigned int virq,
 				unsigned int nr_irqs, void *arg)
 {
@@ -1080,10 +1116,10 @@
 		gic->chip.irq_set_vcpu_affinity = gic_irq_set_vcpu_affinity;
 	}
 
-#ifdef CONFIG_SMP
-	if (gic == &gic_data[0])
+	if (gic == &gic_data[0]) {
 		gic->chip.irq_set_affinity = gic_set_affinity;
-#endif
+		gic->chip.ipi_send_mask = gic_ipi_send_mask;
+	}
 }
 
 static int gic_init_bases(struct gic_chip_data *gic,
@@ -1113,7 +1149,7 @@
 				gic->raw_cpu_base + offset;
 		}
 
-		gic_set_base_accessor(gic, gic_get_percpu_base);
+		enable_frankengic();
 	} else {
 		/* Normal, sane GIC... */
 		WARN(gic->percpu_offset,
@@ -1121,7 +1157,6 @@
 		     gic->percpu_offset);
 		gic->dist_base.common_base = gic->raw_dist_base;
 		gic->cpu_base.common_base = gic->raw_cpu_base;
-		gic_set_base_accessor(gic, gic_get_common_base);
 	}
 
 	/*
@@ -1200,12 +1235,7 @@
 		 */
 		for (i = 0; i < NR_GIC_CPU_IF; i++)
 			gic_cpu_map[i] = 0xff;
-#ifdef CONFIG_SMP
-		set_smp_cross_call(gic_raise_softirq);
-#endif
-		cpuhp_setup_state_nocalls(CPUHP_AP_IRQ_GIC_STARTING,
-					  "irqchip/arm/gic:starting",
-					  gic_starting_cpu, NULL);
+
 		set_handle_irq(gic_handle_irq);
 		if (static_branch_likely(&supports_deactivate_key))
 			pr_info("GIC: Using split EOI/Deactivate mode\n");
@@ -1222,6 +1252,8 @@
 	ret = gic_init_bases(gic, handle);
 	if (ret)
 		kfree(name);
+	else if (gic == &gic_data[0])
+		gic_smp_init();
 
 	return ret;
 }
diff --git a/drivers/irqchip/irq-hip04.c b/drivers/irqchip/irq-hip04.c
index 130caa1..9b73dcf 100644
--- a/drivers/irqchip/irq-hip04.c
+++ b/drivers/irqchip/irq-hip04.c
@@ -171,6 +171,29 @@
 
 	return IRQ_SET_MASK_OK;
 }
+
+static void hip04_ipi_send_mask(struct irq_data *d, const struct cpumask *mask)
+{
+	int cpu;
+	unsigned long flags, map = 0;
+
+	raw_spin_lock_irqsave(&irq_controller_lock, flags);
+
+	/* Convert our logical CPU mask into a physical one. */
+	for_each_cpu(cpu, mask)
+		map |= hip04_cpu_map[cpu];
+
+	/*
+	 * Ensure that stores to Normal memory are visible to the
+	 * other CPUs before they observe us issuing the IPI.
+	 */
+	dmb(ishst);
+
+	/* this always happens on GIC0 */
+	writel_relaxed(map << 8 | d->hwirq, hip04_data.dist_base + GIC_DIST_SOFTINT);
+
+	raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
+}
 #endif
 
 static void __exception_irq_entry hip04_handle_irq(struct pt_regs *regs)
@@ -182,19 +205,9 @@
 		irqstat = readl_relaxed(cpu_base + GIC_CPU_INTACK);
 		irqnr = irqstat & GICC_IAR_INT_ID_MASK;
 
-		if (likely(irqnr > 15 && irqnr <= HIP04_MAX_IRQS)) {
+		if (irqnr <= HIP04_MAX_IRQS)
 			handle_domain_irq(hip04_data.domain, irqnr, regs);
-			continue;
-		}
-		if (irqnr < 16) {
-			writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
-#ifdef CONFIG_SMP
-			handle_IPI(irqnr, regs);
-#endif
-			continue;
-		}
-		break;
-	} while (1);
+	} while (irqnr > HIP04_MAX_IRQS);
 }
 
 static struct irq_chip hip04_irq_chip = {
@@ -205,6 +218,7 @@
 	.irq_set_type		= hip04_irq_set_type,
 #ifdef CONFIG_SMP
 	.irq_set_affinity	= hip04_irq_set_affinity,
+	.ipi_send_mask		= hip04_ipi_send_mask,
 #endif
 	.flags			= IRQCHIP_SET_TYPE_MASKED |
 				  IRQCHIP_SKIP_SET_WAKE |
@@ -279,39 +293,17 @@
 	writel_relaxed(1, base + GIC_CPU_CTRL);
 }
 
-#ifdef CONFIG_SMP
-static void hip04_raise_softirq(const struct cpumask *mask, unsigned int irq)
-{
-	int cpu;
-	unsigned long flags, map = 0;
-
-	raw_spin_lock_irqsave(&irq_controller_lock, flags);
-
-	/* Convert our logical CPU mask into a physical one. */
-	for_each_cpu(cpu, mask)
-		map |= hip04_cpu_map[cpu];
-
-	/*
-	 * Ensure that stores to Normal memory are visible to the
-	 * other CPUs before they observe us issuing the IPI.
-	 */
-	dmb(ishst);
-
-	/* this always happens on GIC0 */
-	writel_relaxed(map << 8 | irq, hip04_data.dist_base + GIC_DIST_SOFTINT);
-
-	raw_spin_unlock_irqrestore(&irq_controller_lock, flags);
-}
-#endif
-
 static int hip04_irq_domain_map(struct irq_domain *d, unsigned int irq,
 				irq_hw_number_t hw)
 {
-	if (hw < 32) {
+	if (hw < 16) {
+		irq_set_percpu_devid(irq);
+		irq_set_chip_and_handler(irq, &hip04_irq_chip,
+					 handle_percpu_devid_fasteoi_ipi);
+	} else if (hw < 32) {
 		irq_set_percpu_devid(irq);
 		irq_set_chip_and_handler(irq, &hip04_irq_chip,
 					 handle_percpu_devid_irq);
-		irq_set_status_flags(irq, IRQ_NOAUTOEN);
 	} else {
 		irq_set_chip_and_handler(irq, &hip04_irq_chip,
 					 handle_fasteoi_irq);
@@ -328,10 +320,13 @@
 				  unsigned long *out_hwirq,
 				  unsigned int *out_type)
 {
-	unsigned long ret = 0;
-
 	if (irq_domain_get_of_node(d) != controller)
 		return -EINVAL;
+	if (intsize == 1 && intspec[0] < 16) {
+		*out_hwirq = intspec[0];
+		*out_type = IRQ_TYPE_EDGE_RISING;
+		return 0;
+	}
 	if (intsize < 3)
 		return -EINVAL;
 
@@ -344,7 +339,7 @@
 
 	*out_type = intspec[2] & IRQ_TYPE_SENSE_MASK;
 
-	return ret;
+	return 0;
 }
 
 static int hip04_irq_starting_cpu(unsigned int cpu)
@@ -361,7 +356,6 @@
 static int __init
 hip04_of_init(struct device_node *node, struct device_node *parent)
 {
-	irq_hw_number_t hwirq_base = 16;
 	int nr_irqs, irq_base, i;
 
 	if (WARN_ON(!node))
@@ -390,24 +384,21 @@
 		nr_irqs = HIP04_MAX_IRQS;
 	hip04_data.nr_irqs = nr_irqs;
 
-	nr_irqs -= hwirq_base; /* calculate # of irqs to allocate */
-
-	irq_base = irq_alloc_descs(-1, hwirq_base, nr_irqs, numa_node_id());
+	irq_base = irq_alloc_descs(-1, 0, nr_irqs, numa_node_id());
 	if (irq_base < 0) {
 		pr_err("failed to allocate IRQ numbers\n");
 		return -EINVAL;
 	}
 
 	hip04_data.domain = irq_domain_add_legacy(node, nr_irqs, irq_base,
-						  hwirq_base,
+						  0,
 						  &hip04_irq_domain_ops,
 						  &hip04_data);
-
 	if (WARN_ON(!hip04_data.domain))
 		return -EINVAL;
 
 #ifdef CONFIG_SMP
-	set_smp_cross_call(hip04_raise_softirq);
+	set_smp_ipi_range(irq_base, 16);
 #endif
 	set_handle_irq(hip04_handle_irq);
 
diff --git a/drivers/irqchip/qcom-pdc.c b/drivers/irqchip/qcom-pdc.c
index faa7d61..bf0b4c7 100644
--- a/drivers/irqchip/qcom-pdc.c
+++ b/drivers/irqchip/qcom-pdc.c
@@ -1,24 +1,30 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved.
  */
 
 #include <linux/err.h>
 #include <linux/init.h>
+#include <linux/interrupt.h>
 #include <linux/irq.h>
 #include <linux/irqchip.h>
 #include <linux/irqdomain.h>
 #include <linux/io.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/of.h>
+#include <linux/of_irq.h>
 #include <linux/of_address.h>
 #include <linux/of_device.h>
+#include <linux/soc/qcom/irq.h>
 #include <linux/spinlock.h>
-#include <linux/platform_device.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 
-#define PDC_MAX_IRQS		126
+#include <linux/qcom_scm.h>
+
+#define PDC_MAX_IRQS		168
+#define PDC_MAX_GPIO_IRQS	256
 
 #define CLEAR_INTR(reg, intr)	(reg & ~(1 << intr))
 #define ENABLE_INTR(reg, intr)	(reg | (1 << intr))
@@ -26,16 +32,28 @@
 #define IRQ_ENABLE_BANK		0x10
 #define IRQ_i_CFG		0x110
 
+#define PDC_NO_PARENT_IRQ	~0UL
+
 struct pdc_pin_region {
 	u32 pin_base;
 	u32 parent_base;
 	u32 cnt;
 };
 
+struct spi_cfg_regs {
+	union {
+		u64 start;
+		void __iomem *base;
+	};
+	resource_size_t size;
+	bool scm_io;
+};
+
 static DEFINE_RAW_SPINLOCK(pdc_lock);
 static void __iomem *pdc_base;
 static struct pdc_pin_region *pdc_region;
 static int pdc_region_cnt;
+static struct spi_cfg_regs *spi_cfg;
 
 static void pdc_reg_write(int reg, u32 i, u32 val)
 {
@@ -63,18 +81,109 @@
 	raw_spin_unlock(&pdc_lock);
 }
 
+static void qcom_pdc_gic_disable(struct irq_data *d)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
+	pdc_enable_intr(d, false);
+	irq_chip_disable_parent(d);
+}
+
+static int qcom_pdc_gic_get_irqchip_state(struct irq_data *d,
+		enum irqchip_irq_state which, bool *state)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	return irq_chip_get_parent_state(d, which, state);
+}
+
+static int qcom_pdc_gic_set_irqchip_state(struct irq_data *d,
+		enum irqchip_irq_state which, bool value)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	return irq_chip_set_parent_state(d, which, value);
+}
+
+static void qcom_pdc_gic_enable(struct irq_data *d)
+{
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
+	pdc_enable_intr(d, true);
+	irq_chip_enable_parent(d);
+}
+
 static void qcom_pdc_gic_mask(struct irq_data *d)
 {
-	pdc_enable_intr(d, false);
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
 	irq_chip_mask_parent(d);
 }
 
 static void qcom_pdc_gic_unmask(struct irq_data *d)
 {
-	pdc_enable_intr(d, true);
+	if (d->hwirq == GPIO_NO_WAKE_IRQ)
+		return;
+
 	irq_chip_unmask_parent(d);
 }
 
+static u32 __spi_pin_read(unsigned int pin)
+{
+	void __iomem *cfg_reg = spi_cfg->base + pin * 4;
+	u64 scm_cfg_reg = spi_cfg->start + pin * 4;
+
+	if (spi_cfg->scm_io) {
+		unsigned int val;
+
+		qcom_scm_io_readl(scm_cfg_reg, &val);
+		return val;
+	} else {
+		return readl(cfg_reg);
+	}
+}
+
+static void __spi_pin_write(unsigned int pin, unsigned int val)
+{
+	void __iomem *cfg_reg = spi_cfg->base + pin * 4;
+	u64 scm_cfg_reg = spi_cfg->start + pin * 4;
+
+	if (spi_cfg->scm_io)
+		qcom_scm_io_writel(scm_cfg_reg, val);
+	else
+		writel(val, cfg_reg);
+}
+
+static int spi_configure_type(irq_hw_number_t hwirq, unsigned int type)
+{
+	int spi = hwirq - 32;
+	u32 pin = spi / 32;
+	u32 mask = BIT(spi % 32);
+	u32 val;
+	unsigned long flags;
+
+	if (!spi_cfg)
+		return 0;
+
+	if (pin * 4 > spi_cfg->size)
+		return -EFAULT;
+
+	raw_spin_lock_irqsave(&pdc_lock, flags);
+	val = __spi_pin_read(pin);
+	val &= ~mask;
+	if (type & IRQ_TYPE_LEVEL_MASK)
+		val |= mask;
+	__spi_pin_write(pin, val);
+	raw_spin_unlock_irqrestore(&pdc_lock, flags);
+
+	return 0;
+}
+
 /*
  * GIC does not handle falling edge or active low. To allow falling edge and
  * active low interrupts to be handled at GIC, PDC has an inverter that inverts
@@ -112,7 +221,12 @@
 static int qcom_pdc_gic_set_type(struct irq_data *d, unsigned int type)
 {
 	int pin_out = d->hwirq;
+	int parent_hwirq = d->parent_data->hwirq;
 	enum pdc_irq_config_bits pdc_type;
+	int ret;
+
+	if (pin_out == GPIO_NO_WAKE_IRQ)
+		return 0;
 
 	switch (type) {
 	case IRQ_TYPE_EDGE_RISING:
@@ -140,6 +254,11 @@
 
 	pdc_reg_write(IRQ_i_CFG, pin_out, pdc_type);
 
+	/* Additionally, configure (only) the GPIO in the f/w */
+	ret = spi_configure_type(parent_hwirq, type);
+	if (ret)
+		return ret;
+
 	return irq_chip_set_type_parent(d, type);
 }
 
@@ -148,6 +267,10 @@
 	.irq_eoi		= irq_chip_eoi_parent,
 	.irq_mask		= qcom_pdc_gic_mask,
 	.irq_unmask		= qcom_pdc_gic_unmask,
+	.irq_disable		= qcom_pdc_gic_disable,
+	.irq_enable		= qcom_pdc_gic_enable,
+	.irq_get_irqchip_state	= qcom_pdc_gic_get_irqchip_state,
+	.irq_set_irqchip_state	= qcom_pdc_gic_set_irqchip_state,
 	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.irq_set_type		= qcom_pdc_gic_set_type,
 	.flags			= IRQCHIP_MASK_ON_SUSPEND |
@@ -169,8 +292,7 @@
 			return (region->parent_base + pin - region->pin_base);
 	}
 
-	WARN_ON(1);
-	return ~0UL;
+	return PDC_NO_PARENT_IRQ;
 }
 
 static int qcom_pdc_translate(struct irq_domain *d, struct irq_fwspec *fwspec,
@@ -199,17 +321,17 @@
 
 	ret = qcom_pdc_translate(domain, fwspec, &hwirq, &type);
 	if (ret)
-		return -EINVAL;
-
-	parent_hwirq = get_parent_hwirq(hwirq);
-	if (parent_hwirq == ~0UL)
-		return -EINVAL;
+		return ret;
 
 	ret  = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
 					     &qcom_pdc_gic_chip, NULL);
 	if (ret)
 		return ret;
 
+	parent_hwirq = get_parent_hwirq(hwirq);
+	if (parent_hwirq == PDC_NO_PARENT_IRQ)
+		return 0;
+
 	if (type & IRQ_TYPE_EDGE_BOTH)
 		type = IRQ_TYPE_EDGE_RISING;
 
@@ -232,6 +354,60 @@
 	.free		= irq_domain_free_irqs_common,
 };
 
+static int qcom_pdc_gpio_alloc(struct irq_domain *domain, unsigned int virq,
+			       unsigned int nr_irqs, void *data)
+{
+	struct irq_fwspec *fwspec = data;
+	struct irq_fwspec parent_fwspec;
+	irq_hw_number_t hwirq, parent_hwirq;
+	unsigned int type;
+	int ret;
+
+	ret = qcom_pdc_translate(domain, fwspec, &hwirq, &type);
+	if (ret)
+		return ret;
+
+	ret = irq_domain_set_hwirq_and_chip(domain, virq, hwirq,
+					    &qcom_pdc_gic_chip, NULL);
+	if (ret)
+		return ret;
+
+	if (hwirq == GPIO_NO_WAKE_IRQ)
+		return 0;
+
+	parent_hwirq = get_parent_hwirq(hwirq);
+	if (parent_hwirq == PDC_NO_PARENT_IRQ)
+		return 0;
+
+	if (type & IRQ_TYPE_EDGE_BOTH)
+		type = IRQ_TYPE_EDGE_RISING;
+
+	if (type & IRQ_TYPE_LEVEL_MASK)
+		type = IRQ_TYPE_LEVEL_HIGH;
+
+	parent_fwspec.fwnode      = domain->parent->fwnode;
+	parent_fwspec.param_count = 3;
+	parent_fwspec.param[0]    = 0;
+	parent_fwspec.param[1]    = parent_hwirq;
+	parent_fwspec.param[2]    = type;
+
+	return irq_domain_alloc_irqs_parent(domain, virq, nr_irqs,
+					    &parent_fwspec);
+}
+
+static int qcom_pdc_gpio_domain_select(struct irq_domain *d,
+				       struct irq_fwspec *fwspec,
+				       enum irq_domain_bus_token bus_token)
+{
+	return bus_token == DOMAIN_BUS_WAKEUP;
+}
+
+static const struct irq_domain_ops qcom_pdc_gpio_ops = {
+	.select		= qcom_pdc_gpio_domain_select,
+	.alloc		= qcom_pdc_gpio_alloc,
+	.free		= irq_domain_free_irqs_common,
+};
+
 static int pdc_setup_pin_mapping(struct device_node *np)
 {
 	int ret, n;
@@ -270,7 +446,8 @@
 
 static int qcom_pdc_init(struct device_node *node, struct device_node *parent)
 {
-	struct irq_domain *parent_domain, *pdc_domain;
+	struct irq_domain *parent_domain, *pdc_domain, *pdc_gpio_domain;
+	struct resource res;
 	int ret;
 
 	pdc_base = of_iomap(node, 0);
@@ -301,12 +478,77 @@
 		goto fail;
 	}
 
+	ret = of_address_to_resource(node, 1, &res);
+	if (!ret) {
+		spi_cfg = kcalloc(1, sizeof(*spi_cfg), GFP_KERNEL);
+		if (!spi_cfg) {
+			ret = -ENOMEM;
+			goto remove;
+		}
+		spi_cfg->scm_io = of_find_property(node,
+						   "qcom,scm-spi-cfg", NULL);
+		spi_cfg->size = resource_size(&res);
+		if (spi_cfg->scm_io) {
+			spi_cfg->start = res.start;
+		} else {
+			spi_cfg->base = ioremap(res.start, spi_cfg->size);
+			if (!spi_cfg->base) {
+				ret = -ENOMEM;
+				goto remove;
+			}
+		}
+	}
+
+	pdc_gpio_domain = irq_domain_create_hierarchy(parent_domain,
+						      IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP,
+						      PDC_MAX_GPIO_IRQS,
+						      of_fwnode_handle(node),
+						      &qcom_pdc_gpio_ops, NULL);
+	if (!pdc_gpio_domain) {
+		pr_err("%pOF: PDC domain add failed for GPIO domain\n", node);
+		ret = -ENOMEM;
+		goto remove;
+	}
+
+	irq_domain_update_bus_token(pdc_gpio_domain, DOMAIN_BUS_WAKEUP);
+
 	return 0;
 
+remove:
+	irq_domain_remove(pdc_domain);
+	kfree(spi_cfg);
 fail:
 	kfree(pdc_region);
 	iounmap(pdc_base);
 	return ret;
 }
 
+
+#ifdef MODULE
+static int qcom_pdc_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *parent = of_irq_find_parent(np);
+	return qcom_pdc_init(np, parent);
+}
+
+static const struct of_device_id qcom_pdc_match_table[] = {
+	{ .compatible = "qcom,sdm845-pdc" },
+	{}
+};
+MODULE_DEVICE_TABLE(of, qcom_pdc_match_table);
+
+static struct platform_driver qcom_pdc_driver = {
+	.probe = qcom_pdc_probe,
+	.driver = {
+		.name = "qcom-pdc",
+		.of_match_table = qcom_pdc_match_table,
+	},
+};
+module_platform_driver(qcom_pdc_driver);
+#else
 IRQCHIP_DECLARE(pdc_sdm845, "qcom,sdm845-pdc", qcom_pdc_init);
+#endif
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Power Domain Controller");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/md/Kconfig b/drivers/md/Kconfig
index 7dd6e98..3cd65eb 100644
--- a/drivers/md/Kconfig
+++ b/drivers/md/Kconfig
@@ -285,6 +285,27 @@
 
 	  If unsure, say N.
 
+config DM_DEFAULT_KEY
+	tristate "Default-key target support"
+	depends on BLK_DEV_DM
+	depends on BLK_INLINE_ENCRYPTION
+	# dm-default-key doesn't require -o inlinecrypt, but it does currently
+	# rely on the inline encryption hooks being built into the kernel.
+	depends on FS_ENCRYPTION_INLINE_CRYPT
+	help
+	  This device-mapper target allows you to create a device that
+	  assigns a default encryption key to bios that aren't for the
+	  contents of an encrypted file.
+
+	  This ensures that all blocks on-disk will be encrypted with
+	  some key, without the performance hit of file contents being
+	  encrypted twice when fscrypt (File-Based Encryption) is used.
+
+	  It is only appropriate to use dm-default-key when key
+	  configuration is tightly controlled, like it is in Android,
+	  such that all fscrypt keys are at least as hard to compromise
+	  as the default key.
+
 config DM_SNAPSHOT
        tristate "Snapshot target"
        depends on BLK_DEV_DM
@@ -598,4 +619,30 @@
 
 	  If unsure, say N.
 
+config DM_BOW
+	tristate "Backup block device"
+	depends on BLK_DEV_DM
+	select DM_BUFIO
+	---help---
+	  This device-mapper target takes a device and keeps a log of all
+	  changes using free blocks identified by issuing a trim command.
+	  This can then be restored by running a command line utility,
+	  or committed by simply replacing the target.
+
+	  If unsure, say N.
+
+config DM_USER
+	tristate "Block device in userspace"
+	depends on BLK_DEV_DM
+	default y
+	help
+	  This device-mapper target allows a userspace daemon to provide the
+	  contents of a block device.  See
+	  <file:Documentation/block/dm-user.rst> for more information.
+
+	  To compile this code as a module, choose M here: the module will be
+	  called dm-user.
+
+	  If unsure, say N.
+
 endif # MD
diff --git a/drivers/md/Makefile b/drivers/md/Makefile
index d91a7edc..2ea9886 100644
--- a/drivers/md/Makefile
+++ b/drivers/md/Makefile
@@ -48,6 +48,7 @@
 obj-$(CONFIG_DM_BUFIO)		+= dm-bufio.o
 obj-$(CONFIG_DM_BIO_PRISON)	+= dm-bio-prison.o
 obj-$(CONFIG_DM_CRYPT)		+= dm-crypt.o
+obj-$(CONFIG_DM_DEFAULT_KEY)	+= dm-default-key.o
 obj-$(CONFIG_DM_DELAY)		+= dm-delay.o
 obj-$(CONFIG_DM_DUST)		+= dm-dust.o
 obj-$(CONFIG_DM_FLAKEY)		+= dm-flakey.o
@@ -71,6 +72,8 @@
 obj-$(CONFIG_DM_INTEGRITY)	+= dm-integrity.o
 obj-$(CONFIG_DM_ZONED)		+= dm-zoned.o
 obj-$(CONFIG_DM_WRITECACHE)	+= dm-writecache.o
+obj-$(CONFIG_DM_BOW)		+= dm-bow.o
+obj-$(CONFIG_DM_USER)		+= dm-user.o
 
 ifeq ($(CONFIG_DM_INIT),y)
 dm-mod-objs			+= dm-init.o
diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c
new file mode 100644
index 0000000..cac4459
--- /dev/null
+++ b/drivers/md/dm-bow.c
@@ -0,0 +1,1297 @@
+/*
+ * Copyright (C) 2018 Google Limited.
+ *
+ * This file is released under the GPL.
+ */
+
+#include "dm.h"
+#include "dm-core.h"
+
+#include <linux/crc32.h>
+#include <linux/dm-bufio.h>
+#include <linux/module.h>
+
+#define DM_MSG_PREFIX "bow"
+
+struct log_entry {
+	u64 source;
+	u64 dest;
+	u32 size;
+	u32 checksum;
+} __packed;
+
+struct log_sector {
+	u32 magic;
+	u16 header_version;
+	u16 header_size;
+	u32 block_size;
+	u32 count;
+	u32 sequence;
+	sector_t sector0;
+	struct log_entry entries[];
+} __packed;
+
+/*
+ * MAGIC is BOW in ascii
+ */
+#define MAGIC 0x00574f42
+#define HEADER_VERSION 0x0100
+
+/*
+ * A sorted set of ranges representing the state of the data on the device.
+ * Use an rb_tree for fast lookup of a given sector
+ * Consecutive ranges are always of different type - operations on this
+ * set must merge matching consecutive ranges.
+ *
+ * Top range is always of type TOP
+ */
+struct bow_range {
+	struct rb_node		node;
+	sector_t		sector;
+	enum {
+		INVALID,	/* Type not set */
+		SECTOR0,	/* First sector - holds log record */
+		SECTOR0_CURRENT,/* Live contents of sector0 */
+		UNCHANGED,	/* Original contents */
+		TRIMMED,	/* Range has been trimmed */
+		CHANGED,	/* Range has been changed */
+		BACKUP,		/* Range is being used as a backup */
+		TOP,		/* Final range - sector is size of device */
+	} type;
+	struct list_head	trimmed_list; /* list of TRIMMED ranges */
+};
+
+static const char * const readable_type[] = {
+	"Invalid",
+	"Sector0",
+	"Sector0_current",
+	"Unchanged",
+	"Free",
+	"Changed",
+	"Backup",
+	"Top",
+};
+
+enum state {
+	TRIM,
+	CHECKPOINT,
+	COMMITTED,
+};
+
+struct bow_context {
+	struct dm_dev *dev;
+	u32 block_size;
+	u32 block_shift;
+	struct workqueue_struct *workqueue;
+	struct dm_bufio_client *bufio;
+	struct mutex ranges_lock; /* Hold to access this struct and/or ranges */
+	struct rb_root ranges;
+	struct dm_kobject_holder kobj_holder;	/* for sysfs attributes */
+	atomic_t state; /* One of the enum state values above */
+	u64 trims_total;
+	struct log_sector *log_sector;
+	struct list_head trimmed_list;
+	bool forward_trims;
+};
+
+sector_t range_top(struct bow_range *br)
+{
+	return container_of(rb_next(&br->node), struct bow_range, node)
+		->sector;
+}
+
+u64 range_size(struct bow_range *br)
+{
+	return (range_top(br) - br->sector) * SECTOR_SIZE;
+}
+
+static sector_t bvec_top(struct bvec_iter *bi_iter)
+{
+	return bi_iter->bi_sector + bi_iter->bi_size / SECTOR_SIZE;
+}
+
+/*
+ * Find the first range that overlaps with bi_iter
+ * bi_iter is set to the size of the overlapping sub-range
+ */
+static struct bow_range *find_first_overlapping_range(struct rb_root *ranges,
+						      struct bvec_iter *bi_iter)
+{
+	struct rb_node *node = ranges->rb_node;
+	struct bow_range *br;
+
+	while (node) {
+		br = container_of(node, struct bow_range, node);
+
+		if (br->sector <= bi_iter->bi_sector
+		    && bi_iter->bi_sector < range_top(br))
+			break;
+
+		if (bi_iter->bi_sector < br->sector)
+			node = node->rb_left;
+		else
+			node = node->rb_right;
+	}
+
+	WARN_ON(!node);
+	if (!node)
+		return NULL;
+
+	if (range_top(br) - bi_iter->bi_sector
+	    < bi_iter->bi_size >> SECTOR_SHIFT)
+		bi_iter->bi_size = (range_top(br) - bi_iter->bi_sector)
+			<< SECTOR_SHIFT;
+
+	return br;
+}
+
+void add_before(struct rb_root *ranges, struct bow_range *new_br,
+		struct bow_range *existing)
+{
+	struct rb_node *parent = &(existing->node);
+	struct rb_node **link = &(parent->rb_left);
+
+	while (*link) {
+		parent = *link;
+		link = &((*link)->rb_right);
+	}
+
+	rb_link_node(&new_br->node, parent, link);
+	rb_insert_color(&new_br->node, ranges);
+}
+
+/*
+ * Given a range br returned by find_first_overlapping_range, split br into a
+ * leading range, a range matching the bi_iter and a trailing range.
+ * Leading and trailing may end up size 0 and will then be deleted. The
+ * new range matching the bi_iter is then returned and should have its type
+ * and type specific fields populated.
+ * If bi_iter runs off the end of the range, bi_iter is truncated accordingly
+ */
+static int split_range(struct bow_context *bc, struct bow_range **br,
+		       struct bvec_iter *bi_iter)
+{
+	struct bow_range *new_br;
+
+	if (bi_iter->bi_sector < (*br)->sector) {
+		WARN_ON(true);
+		return BLK_STS_IOERR;
+	}
+
+	if (bi_iter->bi_sector > (*br)->sector) {
+		struct bow_range *leading_br =
+			kzalloc(sizeof(*leading_br), GFP_KERNEL);
+
+		if (!leading_br)
+			return BLK_STS_RESOURCE;
+
+		*leading_br = **br;
+		if (leading_br->type == TRIMMED)
+			list_add(&leading_br->trimmed_list, &bc->trimmed_list);
+
+		add_before(&bc->ranges, leading_br, *br);
+		(*br)->sector = bi_iter->bi_sector;
+	}
+
+	if (bvec_top(bi_iter) >= range_top(*br)) {
+		bi_iter->bi_size = (range_top(*br) - (*br)->sector)
+					* SECTOR_SIZE;
+		return BLK_STS_OK;
+	}
+
+	/* new_br will be the beginning, existing br will be the tail */
+	new_br = kzalloc(sizeof(*new_br), GFP_KERNEL);
+	if (!new_br)
+		return BLK_STS_RESOURCE;
+
+	new_br->sector = (*br)->sector;
+	(*br)->sector = bvec_top(bi_iter);
+	add_before(&bc->ranges, new_br, *br);
+	*br = new_br;
+
+	return BLK_STS_OK;
+}
+
+/*
+ * Sets type of a range. May merge range into surrounding ranges
+ * Since br may be invalidated, always sets br to NULL to prevent
+ * usage after this is called
+ */
+static void set_type(struct bow_context *bc, struct bow_range **br, int type)
+{
+	struct bow_range *prev = container_of(rb_prev(&(*br)->node),
+						      struct bow_range, node);
+	struct bow_range *next = container_of(rb_next(&(*br)->node),
+						      struct bow_range, node);
+
+	if ((*br)->type == TRIMMED) {
+		bc->trims_total -= range_size(*br);
+		list_del(&(*br)->trimmed_list);
+	}
+
+	if (type == TRIMMED) {
+		bc->trims_total += range_size(*br);
+		list_add(&(*br)->trimmed_list, &bc->trimmed_list);
+	}
+
+	(*br)->type = type;
+
+	if (next->type == type) {
+		if (type == TRIMMED)
+			list_del(&next->trimmed_list);
+		rb_erase(&next->node, &bc->ranges);
+		kfree(next);
+	}
+
+	if (prev->type == type) {
+		if (type == TRIMMED)
+			list_del(&(*br)->trimmed_list);
+		rb_erase(&(*br)->node, &bc->ranges);
+		kfree(*br);
+	}
+
+	*br = NULL;
+}
+
+static struct bow_range *find_free_range(struct bow_context *bc)
+{
+	if (list_empty(&bc->trimmed_list)) {
+		DMERR("Unable to find free space to back up to");
+		return NULL;
+	}
+
+	return list_first_entry(&bc->trimmed_list, struct bow_range,
+				trimmed_list);
+}
+
+static sector_t sector_to_page(struct bow_context const *bc, sector_t sector)
+{
+	WARN_ON((sector & (((sector_t)1 << (bc->block_shift - SECTOR_SHIFT)) - 1))
+		!= 0);
+	return sector >> (bc->block_shift - SECTOR_SHIFT);
+}
+
+static int copy_data(struct bow_context const *bc,
+		     struct bow_range *source, struct bow_range *dest,
+		     u32 *checksum)
+{
+	int i;
+
+	if (range_size(source) != range_size(dest)) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (checksum)
+		*checksum = sector_to_page(bc, source->sector);
+
+	for (i = 0; i < range_size(source) >> bc->block_shift; ++i) {
+		struct dm_buffer *read_buffer, *write_buffer;
+		u8 *read, *write;
+		sector_t page = sector_to_page(bc, source->sector) + i;
+
+		read = dm_bufio_read(bc->bufio, page, &read_buffer);
+		if (IS_ERR(read)) {
+			DMERR("Cannot read page %llu",
+			      (unsigned long long)page);
+			return PTR_ERR(read);
+		}
+
+		if (checksum)
+			*checksum = crc32(*checksum, read, bc->block_size);
+
+		write = dm_bufio_new(bc->bufio,
+				     sector_to_page(bc, dest->sector) + i,
+				     &write_buffer);
+		if (IS_ERR(write)) {
+			DMERR("Cannot write sector");
+			dm_bufio_release(read_buffer);
+			return PTR_ERR(write);
+		}
+
+		memcpy(write, read, bc->block_size);
+
+		dm_bufio_mark_buffer_dirty(write_buffer);
+		dm_bufio_release(write_buffer);
+		dm_bufio_release(read_buffer);
+	}
+
+	dm_bufio_write_dirty_buffers(bc->bufio);
+	return BLK_STS_OK;
+}
+
+/****** logging functions ******/
+
+static int add_log_entry(struct bow_context *bc, sector_t source, sector_t dest,
+			 unsigned int size, u32 checksum);
+
+static int backup_log_sector(struct bow_context *bc)
+{
+	struct bow_range *first_br, *free_br;
+	struct bvec_iter bi_iter;
+	u32 checksum = 0;
+	int ret;
+
+	first_br = container_of(rb_first(&bc->ranges), struct bow_range, node);
+
+	if (first_br->type != SECTOR0) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (range_size(first_br) != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	free_br = find_free_range(bc);
+	/* No space left - return this error to userspace */
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+	if (bi_iter.bi_size != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	ret = copy_data(bc, first_br, free_br, &checksum);
+	if (ret)
+		return ret;
+
+	bc->log_sector->count = 0;
+	bc->log_sector->sequence++;
+	ret = add_log_entry(bc, first_br->sector, free_br->sector,
+			    range_size(first_br), checksum);
+	if (ret)
+		return ret;
+
+	set_type(bc, &free_br, BACKUP);
+	return BLK_STS_OK;
+}
+
+static int add_log_entry(struct bow_context *bc, sector_t source, sector_t dest,
+			 unsigned int size, u32 checksum)
+{
+	struct dm_buffer *sector_buffer;
+	u8 *sector;
+
+	if (sizeof(struct log_sector)
+	    + sizeof(struct log_entry) * (bc->log_sector->count + 1)
+		> bc->block_size) {
+		int ret = backup_log_sector(bc);
+
+		if (ret)
+			return ret;
+	}
+
+	sector = dm_bufio_new(bc->bufio, 0, &sector_buffer);
+	if (IS_ERR(sector)) {
+		DMERR("Cannot write boot sector");
+		dm_bufio_release(sector_buffer);
+		return BLK_STS_NOSPC;
+	}
+
+	bc->log_sector->entries[bc->log_sector->count].source = source;
+	bc->log_sector->entries[bc->log_sector->count].dest = dest;
+	bc->log_sector->entries[bc->log_sector->count].size = size;
+	bc->log_sector->entries[bc->log_sector->count].checksum = checksum;
+	bc->log_sector->count++;
+
+	memcpy(sector, bc->log_sector, bc->block_size);
+	dm_bufio_mark_buffer_dirty(sector_buffer);
+	dm_bufio_release(sector_buffer);
+	dm_bufio_write_dirty_buffers(bc->bufio);
+	return BLK_STS_OK;
+}
+
+static int prepare_log(struct bow_context *bc)
+{
+	struct bow_range *free_br, *first_br;
+	struct bvec_iter bi_iter;
+	u32 checksum = 0;
+	int ret;
+
+	/* Carve out first sector as log sector */
+	first_br = container_of(rb_first(&bc->ranges), struct bow_range, node);
+	if (first_br->type != UNCHANGED) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	if (range_size(first_br) < bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+	bi_iter.bi_sector = 0;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &first_br, &bi_iter);
+	if (ret)
+		return ret;
+	first_br->type = SECTOR0;
+	if (range_size(first_br) != bc->block_size) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+	/* Find free sector for active sector0 reads/writes */
+	free_br = find_free_range(bc);
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+	free_br->type = SECTOR0_CURRENT;
+
+	/* Copy data */
+	ret = copy_data(bc, first_br, free_br, NULL);
+	if (ret)
+		return ret;
+
+	bc->log_sector->sector0 = free_br->sector;
+
+	/* Find free sector to back up original sector zero */
+	free_br = find_free_range(bc);
+	if (!free_br)
+		return BLK_STS_NOSPC;
+	bi_iter.bi_sector = free_br->sector;
+	bi_iter.bi_size = bc->block_size;
+	ret = split_range(bc, &free_br, &bi_iter);
+	if (ret)
+		return ret;
+
+	/* Back up */
+	ret = copy_data(bc, first_br, free_br, &checksum);
+	if (ret)
+		return ret;
+
+	/*
+	 * Set up our replacement boot sector - it will get written when we
+	 * add the first log entry, which we do immediately
+	 */
+	bc->log_sector->magic = MAGIC;
+	bc->log_sector->header_version = HEADER_VERSION;
+	bc->log_sector->header_size = sizeof(*bc->log_sector);
+	bc->log_sector->block_size = bc->block_size;
+	bc->log_sector->count = 0;
+	bc->log_sector->sequence = 0;
+
+	/* Add log entry */
+	ret = add_log_entry(bc, first_br->sector, free_br->sector,
+			    range_size(first_br), checksum);
+	if (ret)
+		return ret;
+
+	set_type(bc, &free_br, BACKUP);
+	return BLK_STS_OK;
+}
+
+static struct bow_range *find_sector0_current(struct bow_context *bc)
+{
+	struct bvec_iter bi_iter;
+
+	bi_iter.bi_sector = bc->log_sector->sector0;
+	bi_iter.bi_size = bc->block_size;
+	return find_first_overlapping_range(&bc->ranges, &bi_iter);
+}
+
+/****** sysfs interface functions ******/
+
+static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
+			  char *buf)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+
+	return scnprintf(buf, PAGE_SIZE, "%d\n", atomic_read(&bc->state));
+}
+
+static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
+			   const char *buf, size_t count)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+	enum state state, original_state;
+	int ret;
+
+	state = buf[0] - '0';
+	if (state < TRIM || state > COMMITTED) {
+		DMERR("State value %d out of range", state);
+		return -EINVAL;
+	}
+
+	mutex_lock(&bc->ranges_lock);
+	original_state = atomic_read(&bc->state);
+	if (state != original_state + 1) {
+		DMERR("Invalid state change from %d to %d",
+		      original_state, state);
+		ret = -EINVAL;
+		goto bad;
+	}
+
+	DMINFO("Switching to state %s", state == CHECKPOINT ? "Checkpoint"
+	       : state == COMMITTED ? "Committed" : "Unknown");
+
+	if (state == CHECKPOINT) {
+		ret = prepare_log(bc);
+		if (ret) {
+			DMERR("Failed to switch to checkpoint state");
+			goto bad;
+		}
+	} else if (state == COMMITTED) {
+		struct bow_range *br = find_sector0_current(bc);
+		struct bow_range *sector0_br =
+			container_of(rb_first(&bc->ranges), struct bow_range,
+				     node);
+
+		ret = copy_data(bc, br, sector0_br, 0);
+		if (ret) {
+			DMERR("Failed to switch to committed state");
+			goto bad;
+		}
+	}
+	atomic_inc(&bc->state);
+	ret = count;
+
+bad:
+	mutex_unlock(&bc->ranges_lock);
+	return ret;
+}
+
+static ssize_t free_show(struct kobject *kobj, struct kobj_attribute *attr,
+			  char *buf)
+{
+	struct bow_context *bc = container_of(kobj, struct bow_context,
+					      kobj_holder.kobj);
+	u64 trims_total;
+
+	mutex_lock(&bc->ranges_lock);
+	trims_total = bc->trims_total;
+	mutex_unlock(&bc->ranges_lock);
+
+	return scnprintf(buf, PAGE_SIZE, "%llu\n", trims_total);
+}
+
+static struct kobj_attribute attr_state = __ATTR_RW(state);
+static struct kobj_attribute attr_free = __ATTR_RO(free);
+
+static struct attribute *bow_attrs[] = {
+	&attr_state.attr,
+	&attr_free.attr,
+	NULL
+};
+
+static struct kobj_type bow_ktype = {
+	.sysfs_ops = &kobj_sysfs_ops,
+	.default_attrs = bow_attrs,
+	.release = dm_kobject_release
+};
+
+/****** constructor/destructor ******/
+
+static void dm_bow_dtr(struct dm_target *ti)
+{
+	struct bow_context *bc = (struct bow_context *) ti->private;
+	struct kobject *kobj;
+
+	while (rb_first(&bc->ranges)) {
+		struct bow_range *br = container_of(rb_first(&bc->ranges),
+						    struct bow_range, node);
+
+		rb_erase(&br->node, &bc->ranges);
+		kfree(br);
+	}
+	if (bc->workqueue)
+		destroy_workqueue(bc->workqueue);
+	if (bc->bufio)
+		dm_bufio_client_destroy(bc->bufio);
+
+	kobj = &bc->kobj_holder.kobj;
+	if (kobj->state_initialized) {
+		kobject_put(kobj);
+		wait_for_completion(dm_get_completion_from_kobject(kobj));
+	}
+
+	kfree(bc->log_sector);
+	kfree(bc);
+}
+
+static void dm_bow_io_hints(struct dm_target *ti, struct queue_limits *limits)
+{
+	struct bow_context *bc = ti->private;
+	const unsigned int block_size = bc->block_size;
+
+	limits->logical_block_size =
+		max_t(unsigned short, limits->logical_block_size, block_size);
+	limits->physical_block_size =
+		max_t(unsigned int, limits->physical_block_size, block_size);
+	limits->io_min = max_t(unsigned int, limits->io_min, block_size);
+
+	if (limits->max_discard_sectors == 0) {
+		limits->discard_granularity = 1 << 12;
+		limits->max_hw_discard_sectors = 1 << 15;
+		limits->max_discard_sectors = 1 << 15;
+		bc->forward_trims = false;
+	} else {
+		limits->discard_granularity = 1 << 12;
+		bc->forward_trims = true;
+	}
+}
+
+static int dm_bow_ctr_optional(struct dm_target *ti, unsigned int argc,
+		char **argv)
+{
+	struct bow_context *bc = ti->private;
+	struct dm_arg_set as;
+	static const struct dm_arg _args[] = {
+		{0, 1, "Invalid number of feature args"},
+	};
+	unsigned int opt_params;
+	const char *opt_string;
+	int err;
+	char dummy;
+
+	as.argc = argc;
+	as.argv = argv;
+
+	err = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
+	if (err)
+		return err;
+
+	while (opt_params--) {
+		opt_string = dm_shift_arg(&as);
+		if (!opt_string) {
+			ti->error = "Not enough feature arguments";
+			return -EINVAL;
+		}
+
+		if (sscanf(opt_string, "block_size:%u%c",
+					&bc->block_size, &dummy) == 1) {
+			if (bc->block_size < SECTOR_SIZE ||
+			    bc->block_size > 4096 ||
+			    !is_power_of_2(bc->block_size)) {
+				ti->error = "Invalid block_size";
+				return -EINVAL;
+			}
+		} else {
+			ti->error = "Invalid feature arguments";
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+static int dm_bow_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct bow_context *bc;
+	struct bow_range *br;
+	int ret;
+	struct mapped_device *md = dm_table_get_md(ti->table);
+
+	if (argc < 1) {
+		ti->error = "Invalid argument count";
+		return -EINVAL;
+	}
+
+	bc = kzalloc(sizeof(*bc), GFP_KERNEL);
+	if (!bc) {
+		ti->error = "Cannot allocate bow context";
+		return -ENOMEM;
+	}
+
+	ti->num_flush_bios = 1;
+	ti->num_discard_bios = 1;
+	ti->num_write_same_bios = 1;
+	ti->private = bc;
+
+	ret = dm_get_device(ti, argv[0], dm_table_get_mode(ti->table),
+			    &bc->dev);
+	if (ret) {
+		ti->error = "Device lookup failed";
+		goto bad;
+	}
+
+	bc->block_size = bc->dev->bdev->bd_queue->limits.logical_block_size;
+	if (argc > 1) {
+		ret = dm_bow_ctr_optional(ti, argc - 1, &argv[1]);
+		if (ret)
+			goto bad;
+	}
+
+	bc->block_shift = ilog2(bc->block_size);
+	bc->log_sector = kzalloc(bc->block_size, GFP_KERNEL);
+	if (!bc->log_sector) {
+		ti->error = "Cannot allocate log sector";
+		goto bad;
+	}
+
+	init_completion(&bc->kobj_holder.completion);
+	ret = kobject_init_and_add(&bc->kobj_holder.kobj, &bow_ktype,
+				   &disk_to_dev(dm_disk(md))->kobj, "%s",
+				   "bow");
+	if (ret) {
+		ti->error = "Cannot create sysfs node";
+		goto bad;
+	}
+
+	mutex_init(&bc->ranges_lock);
+	bc->ranges = RB_ROOT;
+	bc->bufio = dm_bufio_client_create(bc->dev->bdev, bc->block_size, 1, 0,
+					   NULL, NULL);
+	if (IS_ERR(bc->bufio)) {
+		ti->error = "Cannot initialize dm-bufio";
+		ret = PTR_ERR(bc->bufio);
+		bc->bufio = NULL;
+		goto bad;
+	}
+
+	bc->workqueue = alloc_workqueue("dm-bow",
+					WQ_CPU_INTENSIVE | WQ_MEM_RECLAIM
+					| WQ_UNBOUND, num_online_cpus());
+	if (!bc->workqueue) {
+		ti->error = "Cannot allocate workqueue";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	INIT_LIST_HEAD(&bc->trimmed_list);
+
+	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	if (!br) {
+		ti->error = "Cannot allocate ranges";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	br->sector = ti->len;
+	br->type = TOP;
+	rb_link_node(&br->node, NULL, &bc->ranges.rb_node);
+	rb_insert_color(&br->node, &bc->ranges);
+
+	br = kzalloc(sizeof(*br), GFP_KERNEL);
+	if (!br) {
+		ti->error = "Cannot allocate ranges";
+		ret = -ENOMEM;
+		goto bad;
+	}
+
+	br->sector = 0;
+	br->type = UNCHANGED;
+	rb_link_node(&br->node, bc->ranges.rb_node,
+		     &bc->ranges.rb_node->rb_left);
+	rb_insert_color(&br->node, &bc->ranges);
+
+	ti->discards_supported = true;
+
+	return 0;
+
+bad:
+	dm_bow_dtr(ti);
+	return ret;
+}
+
+/****** Handle writes ******/
+
+static int prepare_unchanged_range(struct bow_context *bc, struct bow_range *br,
+				   struct bvec_iter *bi_iter,
+				   bool record_checksum)
+{
+	struct bow_range *backup_br;
+	struct bvec_iter backup_bi;
+	sector_t log_source, log_dest;
+	unsigned int log_size;
+	u32 checksum = 0;
+	int ret;
+	int original_type;
+	sector_t sector0;
+
+	/* Find a free range */
+	backup_br = find_free_range(bc);
+	if (!backup_br)
+		return BLK_STS_NOSPC;
+
+	/* Carve out a backup range. This may be smaller than the br given */
+	backup_bi.bi_sector = backup_br->sector;
+	backup_bi.bi_size = min(range_size(backup_br), (u64) bi_iter->bi_size);
+	ret = split_range(bc, &backup_br, &backup_bi);
+	if (ret)
+		return ret;
+
+	/*
+	 * Carve out a changed range. This will not be smaller than the backup
+	 * br since the backup br is smaller than the source range and iterator
+	 */
+	bi_iter->bi_size = backup_bi.bi_size;
+	ret = split_range(bc, &br, bi_iter);
+	if (ret)
+		return ret;
+	if (range_size(br) != range_size(backup_br)) {
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+
+
+	/* Copy data over */
+	ret = copy_data(bc, br, backup_br, record_checksum ? &checksum : NULL);
+	if (ret)
+		return ret;
+
+	/* Add an entry to the log */
+	log_source = br->sector;
+	log_dest = backup_br->sector;
+	log_size = range_size(br);
+
+	/*
+	 * Set the types. Note that since set_type also amalgamates ranges
+	 * we have to set both sectors to their final type before calling
+	 * set_type on either
+	 */
+	original_type = br->type;
+	sector0 = backup_br->sector;
+	bc->trims_total -= range_size(backup_br);
+	if (backup_br->type == TRIMMED)
+		list_del(&backup_br->trimmed_list);
+	backup_br->type = br->type == SECTOR0_CURRENT ? SECTOR0_CURRENT
+						      : BACKUP;
+	br->type = CHANGED;
+	set_type(bc, &backup_br, backup_br->type);
+
+	/*
+	 * Add the log entry after marking the backup sector, since adding a log
+	 * can cause another backup
+	 */
+	ret = add_log_entry(bc, log_source, log_dest, log_size, checksum);
+	if (ret) {
+		br->type = original_type;
+		return ret;
+	}
+
+	/* Now it is safe to mark this backup successful */
+	if (original_type == SECTOR0_CURRENT)
+		bc->log_sector->sector0 = sector0;
+
+	set_type(bc, &br, br->type);
+	return ret;
+}
+
+static int prepare_free_range(struct bow_context *bc, struct bow_range *br,
+			      struct bvec_iter *bi_iter)
+{
+	int ret;
+
+	ret = split_range(bc, &br, bi_iter);
+	if (ret)
+		return ret;
+	set_type(bc, &br, CHANGED);
+	return BLK_STS_OK;
+}
+
+static int prepare_changed_range(struct bow_context *bc, struct bow_range *br,
+				 struct bvec_iter *bi_iter)
+{
+	/* Nothing to do ... */
+	return BLK_STS_OK;
+}
+
+static int prepare_one_range(struct bow_context *bc,
+			     struct bvec_iter *bi_iter)
+{
+	struct bow_range *br = find_first_overlapping_range(&bc->ranges,
+							    bi_iter);
+	switch (br->type) {
+	case CHANGED:
+		return prepare_changed_range(bc, br, bi_iter);
+
+	case TRIMMED:
+		return prepare_free_range(bc, br, bi_iter);
+
+	case UNCHANGED:
+	case BACKUP:
+		return prepare_unchanged_range(bc, br, bi_iter, true);
+
+	/*
+	 * We cannot track the checksum for the active sector0, since it
+	 * may change at any point.
+	 */
+	case SECTOR0_CURRENT:
+		return prepare_unchanged_range(bc, br, bi_iter, false);
+
+	case SECTOR0:	/* Handled in the dm_bow_map */
+	case TOP:	/* Illegal - top is off the end of the device */
+	default:
+		WARN_ON(1);
+		return BLK_STS_IOERR;
+	}
+}
+
+struct write_work {
+	struct work_struct work;
+	struct bow_context *bc;
+	struct bio *bio;
+};
+
+static void bow_write(struct work_struct *work)
+{
+	struct write_work *ww = container_of(work, struct write_work, work);
+	struct bow_context *bc = ww->bc;
+	struct bio *bio = ww->bio;
+	struct bvec_iter bi_iter = bio->bi_iter;
+	int ret = BLK_STS_OK;
+
+	kfree(ww);
+
+	mutex_lock(&bc->ranges_lock);
+	do {
+		ret = prepare_one_range(bc, &bi_iter);
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+	} while (!ret && bi_iter.bi_size);
+
+	mutex_unlock(&bc->ranges_lock);
+
+	if (!ret) {
+		bio_set_dev(bio, bc->dev->bdev);
+		submit_bio(bio);
+	} else {
+		DMERR("Write failure with error %d", -ret);
+		bio->bi_status = ret;
+		bio_endio(bio);
+	}
+}
+
+static int queue_write(struct bow_context *bc, struct bio *bio)
+{
+	struct write_work *ww = kmalloc(sizeof(*ww), GFP_NOIO | __GFP_NORETRY
+					| __GFP_NOMEMALLOC | __GFP_NOWARN);
+	if (!ww) {
+		DMERR("Failed to allocate write_work");
+		return -ENOMEM;
+	}
+
+	INIT_WORK(&ww->work, bow_write);
+	ww->bc = bc;
+	ww->bio = bio;
+	queue_work(bc->workqueue, &ww->work);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static int handle_sector0(struct bow_context *bc, struct bio *bio)
+{
+	int ret = DM_MAPIO_REMAPPED;
+
+	if (bio->bi_iter.bi_size > bc->block_size) {
+		struct bio * split = bio_split(bio,
+					       bc->block_size >> SECTOR_SHIFT,
+					       GFP_NOIO,
+					       &fs_bio_set);
+		if (!split) {
+			DMERR("Failed to split bio");
+			bio->bi_status = BLK_STS_RESOURCE;
+			bio_endio(bio);
+			return DM_MAPIO_SUBMITTED;
+		}
+
+		bio_chain(split, bio);
+		split->bi_iter.bi_sector = bc->log_sector->sector0;
+		bio_set_dev(split, bc->dev->bdev);
+		submit_bio(split);
+
+		if (bio_data_dir(bio) == WRITE)
+			ret = queue_write(bc, bio);
+	} else {
+		bio->bi_iter.bi_sector = bc->log_sector->sector0;
+	}
+
+	return ret;
+}
+
+static int add_trim(struct bow_context *bc, struct bio *bio)
+{
+	struct bow_range *br;
+	struct bvec_iter bi_iter = bio->bi_iter;
+
+	DMDEBUG("add_trim: %llu, %u",
+		(unsigned long long)bio->bi_iter.bi_sector,
+		bio->bi_iter.bi_size);
+
+	do {
+		br = find_first_overlapping_range(&bc->ranges, &bi_iter);
+
+		switch (br->type) {
+		case UNCHANGED:
+			if (!split_range(bc, &br, &bi_iter))
+				set_type(bc, &br, TRIMMED);
+			break;
+
+		case TRIMMED:
+			/* Nothing to do */
+			break;
+
+		default:
+			/* No other case is legal in TRIM state */
+			WARN_ON(true);
+			break;
+		}
+
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+
+	} while (bi_iter.bi_size);
+
+	bio_endio(bio);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static int remove_trim(struct bow_context *bc, struct bio *bio)
+{
+	struct bow_range *br;
+	struct bvec_iter bi_iter = bio->bi_iter;
+
+	DMDEBUG("remove_trim: %llu, %u",
+		(unsigned long long)bio->bi_iter.bi_sector,
+		bio->bi_iter.bi_size);
+
+	do {
+		br = find_first_overlapping_range(&bc->ranges, &bi_iter);
+
+		switch (br->type) {
+		case UNCHANGED:
+			/* Nothing to do */
+			break;
+
+		case TRIMMED:
+			if (!split_range(bc, &br, &bi_iter))
+				set_type(bc, &br, UNCHANGED);
+			break;
+
+		default:
+			/* No other case is legal in TRIM state */
+			WARN_ON(true);
+			break;
+		}
+
+		bi_iter.bi_sector += bi_iter.bi_size / SECTOR_SIZE;
+		bi_iter.bi_size = bio->bi_iter.bi_size
+			- (bi_iter.bi_sector - bio->bi_iter.bi_sector)
+			  * SECTOR_SIZE;
+
+	} while (bi_iter.bi_size);
+
+	return DM_MAPIO_REMAPPED;
+}
+
+int remap_unless_illegal_trim(struct bow_context *bc, struct bio *bio)
+{
+	if (!bc->forward_trims && bio_op(bio) == REQ_OP_DISCARD) {
+		bio->bi_status = BLK_STS_NOTSUPP;
+		bio_endio(bio);
+		return DM_MAPIO_SUBMITTED;
+	} else {
+		bio_set_dev(bio, bc->dev->bdev);
+		return DM_MAPIO_REMAPPED;
+	}
+}
+
+/****** dm interface ******/
+
+static int dm_bow_map(struct dm_target *ti, struct bio *bio)
+{
+	int ret = DM_MAPIO_REMAPPED;
+	struct bow_context *bc = ti->private;
+
+	if (likely(bc->state.counter == COMMITTED))
+		return remap_unless_illegal_trim(bc, bio);
+
+	if (bio_data_dir(bio) == READ && bio->bi_iter.bi_sector != 0)
+		return remap_unless_illegal_trim(bc, bio);
+
+	if (atomic_read(&bc->state) != COMMITTED) {
+		enum state state;
+
+		mutex_lock(&bc->ranges_lock);
+		state = atomic_read(&bc->state);
+		if (state == TRIM) {
+			if (bio_op(bio) == REQ_OP_DISCARD)
+				ret = add_trim(bc, bio);
+			else if (bio_data_dir(bio) == WRITE)
+				ret = remove_trim(bc, bio);
+			else
+				/* pass-through */;
+		} else if (state == CHECKPOINT) {
+			if (bio->bi_iter.bi_sector == 0)
+				ret = handle_sector0(bc, bio);
+			else if (bio_data_dir(bio) == WRITE)
+				ret = queue_write(bc, bio);
+			else
+				/* pass-through */;
+		} else {
+			/* pass-through */
+		}
+		mutex_unlock(&bc->ranges_lock);
+	}
+
+	if (ret == DM_MAPIO_REMAPPED)
+		return remap_unless_illegal_trim(bc, bio);
+
+	return ret;
+}
+
+static void dm_bow_tablestatus(struct dm_target *ti, char *result,
+			       unsigned int maxlen)
+{
+	char *end = result + maxlen;
+	struct bow_context *bc = ti->private;
+	struct rb_node *i;
+	int trimmed_list_length = 0;
+	int trimmed_range_count = 0;
+	struct bow_range *br;
+
+	if (maxlen == 0)
+		return;
+	result[0] = 0;
+
+	list_for_each_entry(br, &bc->trimmed_list, trimmed_list)
+		if (br->type == TRIMMED) {
+			++trimmed_list_length;
+		} else {
+			scnprintf(result, end - result,
+				  "ERROR: non-trimmed entry in trimmed_list");
+			return;
+		}
+
+	if (!rb_first(&bc->ranges)) {
+		scnprintf(result, end - result, "ERROR: Empty ranges");
+		return;
+	}
+
+	if (container_of(rb_first(&bc->ranges), struct bow_range, node)
+	    ->sector) {
+		scnprintf(result, end - result,
+			 "ERROR: First range does not start at sector 0");
+		return;
+	}
+
+	for (i = rb_first(&bc->ranges); i; i = rb_next(i)) {
+		struct bow_range *br = container_of(i, struct bow_range, node);
+
+		result += scnprintf(result, end - result, "%s: %llu",
+				    readable_type[br->type],
+				    (unsigned long long)br->sector);
+		if (result >= end)
+			return;
+
+		result += scnprintf(result, end - result, "\n");
+		if (result >= end)
+			return;
+
+		if (br->type == TRIMMED)
+			++trimmed_range_count;
+
+		if (br->type == TOP) {
+			if (br->sector != ti->len) {
+				scnprintf(result, end - result,
+					 "\nERROR: Top sector is incorrect");
+			}
+
+			if (&br->node != rb_last(&bc->ranges)) {
+				scnprintf(result, end - result,
+					  "\nERROR: Top sector is not last");
+			}
+
+			break;
+		}
+
+		if (!rb_next(i)) {
+			scnprintf(result, end - result,
+				  "\nERROR: Last range not of type TOP");
+			return;
+		}
+
+		if (br->sector > range_top(br)) {
+			scnprintf(result, end - result,
+				  "\nERROR: sectors out of order");
+			return;
+		}
+	}
+
+	if (trimmed_range_count != trimmed_list_length)
+		scnprintf(result, end - result,
+			  "\nERROR: not all trimmed ranges in trimmed list");
+}
+
+static void dm_bow_status(struct dm_target *ti, status_type_t type,
+			  unsigned int status_flags, char *result,
+			  unsigned int maxlen)
+{
+	switch (type) {
+	case STATUSTYPE_INFO:
+		if (maxlen)
+			result[0] = 0;
+		break;
+
+	case STATUSTYPE_TABLE:
+		dm_bow_tablestatus(ti, result, maxlen);
+		break;
+	}
+}
+
+int dm_bow_prepare_ioctl(struct dm_target *ti, struct block_device **bdev)
+{
+	struct bow_context *bc = ti->private;
+	struct dm_dev *dev = bc->dev;
+
+	*bdev = dev->bdev;
+	/* Only pass ioctls through if the device sizes match exactly. */
+	return ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT;
+}
+
+static int dm_bow_iterate_devices(struct dm_target *ti,
+				  iterate_devices_callout_fn fn, void *data)
+{
+	struct bow_context *bc = ti->private;
+
+	return fn(ti, bc->dev, 0, ti->len, data);
+}
+
+static struct target_type bow_target = {
+	.name   = "bow",
+	.version = {1, 2, 0},
+	.features = DM_TARGET_PASSES_CRYPTO,
+	.module = THIS_MODULE,
+	.ctr    = dm_bow_ctr,
+	.dtr    = dm_bow_dtr,
+	.map    = dm_bow_map,
+	.status = dm_bow_status,
+	.prepare_ioctl  = dm_bow_prepare_ioctl,
+	.iterate_devices = dm_bow_iterate_devices,
+	.io_hints = dm_bow_io_hints,
+};
+
+int __init dm_bow_init(void)
+{
+	int r = dm_register_target(&bow_target);
+
+	if (r < 0)
+		DMERR("registering bow failed %d", r);
+	return r;
+}
+
+void dm_bow_exit(void)
+{
+	dm_unregister_target(&bow_target);
+}
+
+MODULE_LICENSE("GPL");
+
+module_init(dm_bow_init);
+module_exit(dm_bow_exit);
diff --git a/drivers/md/dm-core.h b/drivers/md/dm-core.h
index 3fea121f..833d439 100644
--- a/drivers/md/dm-core.h
+++ b/drivers/md/dm-core.h
@@ -12,6 +12,7 @@
 #include <linux/kthread.h>
 #include <linux/ktime.h>
 #include <linux/blk-mq.h>
+#include <linux/keyslot-manager.h>
 
 #include <trace/events/block.h>
 
diff --git a/drivers/md/dm-default-key.c b/drivers/md/dm-default-key.c
new file mode 100644
index 0000000..8b3e8c1
--- /dev/null
+++ b/drivers/md/dm-default-key.c
@@ -0,0 +1,426 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2017 Google, Inc.
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/device-mapper.h>
+#include <linux/module.h>
+
+#define DM_MSG_PREFIX		"default-key"
+
+#define DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE 128
+
+static const struct dm_default_key_cipher {
+	const char *name;
+	enum blk_crypto_mode_num mode_num;
+	int key_size;
+} dm_default_key_ciphers[] = {
+	{
+		.name = "aes-xts-plain64",
+		.mode_num = BLK_ENCRYPTION_MODE_AES_256_XTS,
+		.key_size = 64,
+	}, {
+		.name = "xchacha12,aes-adiantum-plain64",
+		.mode_num = BLK_ENCRYPTION_MODE_ADIANTUM,
+		.key_size = 32,
+	},
+};
+
+/**
+ * struct dm_default_c - private data of a default-key target
+ * @dev: the underlying device
+ * @start: starting sector of the range of @dev which this target actually maps.
+ *	   For this purpose a "sector" is 512 bytes.
+ * @cipher_string: the name of the encryption algorithm being used
+ * @iv_offset: starting offset for IVs.  IVs are generated as if the target were
+ *	       preceded by @iv_offset 512-byte sectors.
+ * @sector_size: crypto sector size in bytes (usually 4096)
+ * @sector_bits: log2(sector_size)
+ * @key: the encryption key to use
+ * @max_dun: the maximum DUN that may be used (computed from other params)
+ */
+struct default_key_c {
+	struct dm_dev *dev;
+	sector_t start;
+	const char *cipher_string;
+	u64 iv_offset;
+	unsigned int sector_size;
+	unsigned int sector_bits;
+	struct blk_crypto_key key;
+	bool is_hw_wrapped;
+	u64 max_dun;
+};
+
+static const struct dm_default_key_cipher *
+lookup_cipher(const char *cipher_string)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(dm_default_key_ciphers); i++) {
+		if (strcmp(cipher_string, dm_default_key_ciphers[i].name) == 0)
+			return &dm_default_key_ciphers[i];
+	}
+	return NULL;
+}
+
+static void default_key_dtr(struct dm_target *ti)
+{
+	struct default_key_c *dkc = ti->private;
+	int err;
+
+	if (dkc->dev) {
+		err = blk_crypto_evict_key(bdev_get_queue(dkc->dev->bdev),
+					   &dkc->key);
+		if (err && err != -ENOKEY)
+			DMWARN("Failed to evict crypto key: %d", err);
+		dm_put_device(ti, dkc->dev);
+	}
+	kzfree(dkc->cipher_string);
+	kzfree(dkc);
+}
+
+static int default_key_ctr_optional(struct dm_target *ti,
+				    unsigned int argc, char **argv)
+{
+	struct default_key_c *dkc = ti->private;
+	struct dm_arg_set as;
+	static const struct dm_arg _args[] = {
+		{0, 4, "Invalid number of feature args"},
+	};
+	unsigned int opt_params;
+	const char *opt_string;
+	bool iv_large_sectors = false;
+	char dummy;
+	int err;
+
+	as.argc = argc;
+	as.argv = argv;
+
+	err = dm_read_arg_group(_args, &as, &opt_params, &ti->error);
+	if (err)
+		return err;
+
+	while (opt_params--) {
+		opt_string = dm_shift_arg(&as);
+		if (!opt_string) {
+			ti->error = "Not enough feature arguments";
+			return -EINVAL;
+		}
+		if (!strcmp(opt_string, "allow_discards")) {
+			ti->num_discard_bios = 1;
+		} else if (sscanf(opt_string, "sector_size:%u%c",
+				  &dkc->sector_size, &dummy) == 1) {
+			if (dkc->sector_size < SECTOR_SIZE ||
+			    dkc->sector_size > 4096 ||
+			    !is_power_of_2(dkc->sector_size)) {
+				ti->error = "Invalid sector_size";
+				return -EINVAL;
+			}
+		} else if (!strcmp(opt_string, "iv_large_sectors")) {
+			iv_large_sectors = true;
+		} else if (!strcmp(opt_string, "wrappedkey_v0")) {
+			dkc->is_hw_wrapped = true;
+		} else {
+			ti->error = "Invalid feature arguments";
+			return -EINVAL;
+		}
+	}
+
+	/* dm-default-key doesn't implement iv_large_sectors=false. */
+	if (dkc->sector_size != SECTOR_SIZE && !iv_large_sectors) {
+		ti->error = "iv_large_sectors must be specified";
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+/*
+ * Construct a default-key mapping:
+ * <cipher> <key> <iv_offset> <dev_path> <start>
+ *
+ * This syntax matches dm-crypt's, but lots of unneeded functionality has been
+ * removed.  Also, dm-default-key requires that the "iv_large_sectors" option be
+ * given whenever a non-default sector size is used.
+ */
+static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct default_key_c *dkc;
+	const struct dm_default_key_cipher *cipher;
+	u8 raw_key[DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE];
+	unsigned int raw_key_size;
+	unsigned int dun_bytes;
+	unsigned long long tmpll;
+	char dummy;
+	int err;
+
+	if (argc < 5) {
+		ti->error = "Not enough arguments";
+		return -EINVAL;
+	}
+
+	dkc = kzalloc(sizeof(*dkc), GFP_KERNEL);
+	if (!dkc) {
+		ti->error = "Out of memory";
+		return -ENOMEM;
+	}
+	ti->private = dkc;
+
+	/* <cipher> */
+	dkc->cipher_string = kstrdup(argv[0], GFP_KERNEL);
+	if (!dkc->cipher_string) {
+		ti->error = "Out of memory";
+		err = -ENOMEM;
+		goto bad;
+	}
+	cipher = lookup_cipher(dkc->cipher_string);
+	if (!cipher) {
+		ti->error = "Unsupported cipher";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <key> */
+	raw_key_size = strlen(argv[1]);
+	if (raw_key_size > 2 * DM_DEFAULT_KEY_MAX_WRAPPED_KEY_SIZE ||
+	    raw_key_size % 2) {
+		ti->error = "Invalid keysize";
+		err = -EINVAL;
+		goto bad;
+	}
+	raw_key_size /= 2;
+	if (hex2bin(raw_key, argv[1], raw_key_size) != 0) {
+		ti->error = "Malformed key string";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <iv_offset> */
+	if (sscanf(argv[2], "%llu%c", &dkc->iv_offset, &dummy) != 1) {
+		ti->error = "Invalid iv_offset sector";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	/* <dev_path> */
+	err = dm_get_device(ti, argv[3], dm_table_get_mode(ti->table),
+			    &dkc->dev);
+	if (err) {
+		ti->error = "Device lookup failed";
+		goto bad;
+	}
+
+	/* <start> */
+	if (sscanf(argv[4], "%llu%c", &tmpll, &dummy) != 1 ||
+	    tmpll != (sector_t)tmpll) {
+		ti->error = "Invalid start sector";
+		err = -EINVAL;
+		goto bad;
+	}
+	dkc->start = tmpll;
+
+	/* optional arguments */
+	dkc->sector_size = SECTOR_SIZE;
+	if (argc > 5) {
+		err = default_key_ctr_optional(ti, argc - 5, &argv[5]);
+		if (err)
+			goto bad;
+	}
+	dkc->sector_bits = ilog2(dkc->sector_size);
+	if (ti->len & ((dkc->sector_size >> SECTOR_SHIFT) - 1)) {
+		ti->error = "Device size is not a multiple of sector_size";
+		err = -EINVAL;
+		goto bad;
+	}
+
+	dkc->max_dun = (dkc->iv_offset + ti->len - 1) >>
+		       (dkc->sector_bits - SECTOR_SHIFT);
+	dun_bytes = DIV_ROUND_UP(fls64(dkc->max_dun), 8);
+
+	err = blk_crypto_init_key(&dkc->key, raw_key, raw_key_size,
+				  dkc->is_hw_wrapped, cipher->mode_num,
+				  dun_bytes, dkc->sector_size);
+	if (err) {
+		ti->error = "Error initializing blk-crypto key";
+		goto bad;
+	}
+
+	err = blk_crypto_start_using_key(&dkc->key,
+					 bdev_get_queue(dkc->dev->bdev));
+	if (err) {
+		ti->error = "Error starting to use blk-crypto";
+		goto bad;
+	}
+
+	ti->num_flush_bios = 1;
+
+	err = 0;
+	goto out;
+
+bad:
+	default_key_dtr(ti);
+out:
+	memzero_explicit(raw_key, sizeof(raw_key));
+	return err;
+}
+
+static int default_key_map(struct dm_target *ti, struct bio *bio)
+{
+	const struct default_key_c *dkc = ti->private;
+	sector_t sector_in_target;
+	u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE] = { 0 };
+
+	bio_set_dev(bio, dkc->dev->bdev);
+
+	/*
+	 * If the bio is a device-level request which doesn't target a specific
+	 * sector, there's nothing more to do.
+	 */
+	if (bio_sectors(bio) == 0)
+		return DM_MAPIO_REMAPPED;
+
+	/* Map the bio's sector to the underlying device. (512-byte sectors) */
+	sector_in_target = dm_target_offset(ti, bio->bi_iter.bi_sector);
+	bio->bi_iter.bi_sector = dkc->start + sector_in_target;
+
+	/*
+	 * If the bio should skip dm-default-key (i.e. if it's for an encrypted
+	 * file's contents), or if it doesn't have any data (e.g. if it's a
+	 * DISCARD request), there's nothing more to do.
+	 */
+	if (bio_should_skip_dm_default_key(bio) || !bio_has_data(bio))
+		return DM_MAPIO_REMAPPED;
+
+	/*
+	 * Else, dm-default-key needs to set this bio's encryption context.
+	 * It must not already have one.
+	 */
+	if (WARN_ON_ONCE(bio_has_crypt_ctx(bio)))
+		return DM_MAPIO_KILL;
+
+	/* Calculate the DUN and enforce data-unit (crypto sector) alignment. */
+	dun[0] = dkc->iv_offset + sector_in_target; /* 512-byte sectors */
+	if (dun[0] & ((dkc->sector_size >> SECTOR_SHIFT) - 1))
+		return DM_MAPIO_KILL;
+	dun[0] >>= dkc->sector_bits - SECTOR_SHIFT; /* crypto sectors */
+
+	/*
+	 * This check isn't necessary as we should have calculated max_dun
+	 * correctly, but be safe.
+	 */
+	if (WARN_ON_ONCE(dun[0] > dkc->max_dun))
+		return DM_MAPIO_KILL;
+
+	bio_crypt_set_ctx(bio, &dkc->key, dun, GFP_NOIO);
+
+	return DM_MAPIO_REMAPPED;
+}
+
+static void default_key_status(struct dm_target *ti, status_type_t type,
+			       unsigned int status_flags, char *result,
+			       unsigned int maxlen)
+{
+	const struct default_key_c *dkc = ti->private;
+	unsigned int sz = 0;
+	int num_feature_args = 0;
+
+	switch (type) {
+	case STATUSTYPE_INFO:
+		result[0] = '\0';
+		break;
+
+	case STATUSTYPE_TABLE:
+		/* Omit the key for now. */
+		DMEMIT("%s - %llu %s %llu", dkc->cipher_string, dkc->iv_offset,
+		       dkc->dev->name, (unsigned long long)dkc->start);
+
+		num_feature_args += !!ti->num_discard_bios;
+		if (dkc->sector_size != SECTOR_SIZE)
+			num_feature_args += 2;
+		if (dkc->is_hw_wrapped)
+			num_feature_args += 1;
+		if (num_feature_args != 0) {
+			DMEMIT(" %d", num_feature_args);
+			if (ti->num_discard_bios)
+				DMEMIT(" allow_discards");
+			if (dkc->sector_size != SECTOR_SIZE) {
+				DMEMIT(" sector_size:%u", dkc->sector_size);
+				DMEMIT(" iv_large_sectors");
+			}
+			if (dkc->is_hw_wrapped)
+				DMEMIT(" wrappedkey_v0");
+		}
+		break;
+	}
+}
+
+static int default_key_prepare_ioctl(struct dm_target *ti,
+				     struct block_device **bdev)
+{
+	const struct default_key_c *dkc = ti->private;
+	const struct dm_dev *dev = dkc->dev;
+
+	*bdev = dev->bdev;
+
+	/* Only pass ioctls through if the device sizes match exactly. */
+	if (dkc->start != 0 ||
+	    ti->len != i_size_read(dev->bdev->bd_inode) >> SECTOR_SHIFT)
+		return 1;
+	return 0;
+}
+
+static int default_key_iterate_devices(struct dm_target *ti,
+				       iterate_devices_callout_fn fn,
+				       void *data)
+{
+	const struct default_key_c *dkc = ti->private;
+
+	return fn(ti, dkc->dev, dkc->start, ti->len, data);
+}
+
+static void default_key_io_hints(struct dm_target *ti,
+				 struct queue_limits *limits)
+{
+	const struct default_key_c *dkc = ti->private;
+	const unsigned int sector_size = dkc->sector_size;
+
+	limits->logical_block_size =
+		max_t(unsigned int, limits->logical_block_size, sector_size);
+	limits->physical_block_size =
+		max_t(unsigned int, limits->physical_block_size, sector_size);
+	limits->io_min = max_t(unsigned int, limits->io_min, sector_size);
+}
+
+static struct target_type default_key_target = {
+	.name			= "default-key",
+	.version		= {2, 1, 0},
+	.features		= DM_TARGET_PASSES_CRYPTO,
+	.module			= THIS_MODULE,
+	.ctr			= default_key_ctr,
+	.dtr			= default_key_dtr,
+	.map			= default_key_map,
+	.status			= default_key_status,
+	.prepare_ioctl		= default_key_prepare_ioctl,
+	.iterate_devices	= default_key_iterate_devices,
+	.io_hints		= default_key_io_hints,
+};
+
+static int __init dm_default_key_init(void)
+{
+	return dm_register_target(&default_key_target);
+}
+
+static void __exit dm_default_key_exit(void)
+{
+	dm_unregister_target(&default_key_target);
+}
+
+module_init(dm_default_key_init);
+module_exit(dm_default_key_exit);
+
+MODULE_AUTHOR("Paul Lawrence <paullawrence@google.com>");
+MODULE_AUTHOR("Paul Crowley <paulcrowley@google.com>");
+MODULE_AUTHOR("Eric Biggers <ebiggers@google.com>");
+MODULE_DESCRIPTION(DM_NAME " target for encrypting filesystem metadata");
+MODULE_LICENSE("GPL");
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 2900fbd..2ffe0b4 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -460,21 +460,15 @@
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
-static int flakey_report_zones(struct dm_target *ti, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
+static int flakey_report_zones(struct dm_target *ti,
+		struct dm_report_zones_args *args, unsigned int nr_zones)
 {
 	struct flakey_c *fc = ti->private;
-	int ret;
+	sector_t sector = flakey_map_sector(ti, args->next_sector);
 
-	/* Do report and remap it */
-	ret = blkdev_report_zones(fc->dev->bdev, flakey_map_sector(ti, sector),
-				  zones, nr_zones);
-	if (ret != 0)
-		return ret;
-
-	if (*nr_zones)
-		dm_remap_zone_report(ti, fc->start, zones, nr_zones);
-	return 0;
+	args->start = fc->start;
+	return blkdev_report_zones(fc->dev->bdev, sector, nr_zones,
+				   dm_report_zones_cb, args);
 }
 #endif
 
@@ -489,8 +483,10 @@
 	.name   = "flakey",
 	.version = {1, 5, 0},
 #ifdef CONFIG_BLK_DEV_ZONED
-	.features = DM_TARGET_ZONED_HM,
+	.features = DM_TARGET_ZONED_HM | DM_TARGET_PASSES_CRYPTO,
 	.report_zones = flakey_report_zones,
+#else
+	.features = DM_TARGET_PASSES_CRYPTO,
 #endif
 	.module = THIS_MODULE,
 	.ctr    = flakey_ctr,
diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index ecefe67..071edd6 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -136,21 +136,15 @@
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
-static int linear_report_zones(struct dm_target *ti, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
+static int linear_report_zones(struct dm_target *ti,
+		struct dm_report_zones_args *args, unsigned int nr_zones)
 {
-	struct linear_c *lc = (struct linear_c *) ti->private;
-	int ret;
+	struct linear_c *lc = ti->private;
+	sector_t sector = linear_map_sector(ti, args->next_sector);
 
-	/* Do report and remap it */
-	ret = blkdev_report_zones(lc->dev->bdev, linear_map_sector(ti, sector),
-				  zones, nr_zones);
-	if (ret != 0)
-		return ret;
-
-	if (*nr_zones)
-		dm_remap_zone_report(ti, lc->start, zones, nr_zones);
-	return 0;
+	args->start = lc->start;
+	return blkdev_report_zones(lc->dev->bdev, sector, nr_zones,
+				   dm_report_zones_cb, args);
 }
 #endif
 
@@ -217,10 +211,11 @@
 	.name   = "linear",
 	.version = {1, 4, 0},
 #ifdef CONFIG_BLK_DEV_ZONED
-	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_ZONED_HM,
+	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_ZONED_HM |
+		    DM_TARGET_PASSES_CRYPTO,
 	.report_zones = linear_report_zones,
 #else
-	.features = DM_TARGET_PASSES_INTEGRITY,
+	.features = DM_TARGET_PASSES_INTEGRITY | DM_TARGET_PASSES_CRYPTO,
 #endif
 	.module = THIS_MODULE,
 	.ctr    = linear_ctr,
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 06b3823..bdd4c77 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -66,6 +66,10 @@
 	struct dm_md_mempools *mempools;
 
 	struct list_head target_callbacks;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct blk_keyslot_manager *ksm;
+#endif
 };
 
 /*
@@ -228,6 +232,8 @@
 	}
 }
 
+static void dm_table_destroy_keyslot_manager(struct dm_table *t);
+
 void dm_table_destroy(struct dm_table *t)
 {
 	unsigned int i;
@@ -256,6 +262,8 @@
 
 	dm_free_md_mempools(t->mempools);
 
+	dm_table_destroy_keyslot_manager(t);
+
 	kfree(t);
 }
 
@@ -1284,6 +1292,287 @@
 	return 0;
 }
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+struct dm_keyslot_manager {
+	struct blk_keyslot_manager ksm;
+	struct mapped_device *md;
+};
+
+struct dm_keyslot_evict_args {
+	const struct blk_crypto_key *key;
+	int err;
+};
+
+static int dm_keyslot_evict_callback(struct dm_target *ti, struct dm_dev *dev,
+				     sector_t start, sector_t len, void *data)
+{
+	struct dm_keyslot_evict_args *args = data;
+	int err;
+
+	err = blk_crypto_evict_key(bdev_get_queue(dev->bdev), args->key);
+	if (!args->err)
+		args->err = err;
+	/* Always try to evict the key from all devices. */
+	return 0;
+}
+
+/*
+ * When an inline encryption key is evicted from a device-mapper device, evict
+ * it from all the underlying devices.
+ */
+static int dm_keyslot_evict(struct blk_keyslot_manager *ksm,
+			    const struct blk_crypto_key *key, unsigned int slot)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+	struct mapped_device *md = dksm->md;
+	struct dm_keyslot_evict_args args = { key };
+	struct dm_table *t;
+	int srcu_idx;
+	int i;
+	struct dm_target *ti;
+
+	t = dm_get_live_table(md, &srcu_idx);
+	if (!t)
+		return 0;
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, dm_keyslot_evict_callback, &args);
+	}
+	dm_put_live_table(md, srcu_idx);
+	return args.err;
+}
+
+struct dm_derive_raw_secret_args {
+	const u8 *wrapped_key;
+	unsigned int wrapped_key_size;
+	u8 *secret;
+	unsigned int secret_size;
+	int err;
+};
+
+static int dm_derive_raw_secret_callback(struct dm_target *ti,
+					 struct dm_dev *dev, sector_t start,
+					 sector_t len, void *data)
+{
+	struct dm_derive_raw_secret_args *args = data;
+	struct request_queue *q = bdev_get_queue(dev->bdev);
+
+	if (!args->err)
+		return 0;
+
+	if (!q->ksm) {
+		args->err = -EOPNOTSUPP;
+		return 0;
+	}
+
+	args->err = blk_ksm_derive_raw_secret(q->ksm, args->wrapped_key,
+					      args->wrapped_key_size,
+					      args->secret,
+					      args->secret_size);
+	/* Try another device in case this fails. */
+	return 0;
+}
+
+/*
+ * Retrieve the raw_secret from the underlying device.  Given that only one
+ * raw_secret can exist for a particular wrappedkey, retrieve it only from the
+ * first device that supports derive_raw_secret().
+ */
+static int dm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+				const u8 *wrapped_key,
+				unsigned int wrapped_key_size,
+				u8 *secret, unsigned int secret_size)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+	struct mapped_device *md = dksm->md;
+	struct dm_derive_raw_secret_args args = {
+		.wrapped_key = wrapped_key,
+		.wrapped_key_size = wrapped_key_size,
+		.secret = secret,
+		.secret_size = secret_size,
+		.err = -EOPNOTSUPP,
+	};
+	struct dm_table *t;
+	int srcu_idx;
+	int i;
+	struct dm_target *ti;
+
+	t = dm_get_live_table(md, &srcu_idx);
+	if (!t)
+		return -EOPNOTSUPP;
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, dm_derive_raw_secret_callback,
+					  &args);
+		if (!args.err)
+			break;
+	}
+	dm_put_live_table(md, srcu_idx);
+	return args.err;
+}
+
+
+static struct blk_ksm_ll_ops dm_ksm_ll_ops = {
+	.keyslot_evict = dm_keyslot_evict,
+	.derive_raw_secret = dm_derive_raw_secret,
+};
+
+static int device_intersect_crypto_modes(struct dm_target *ti,
+					 struct dm_dev *dev, sector_t start,
+					 sector_t len, void *data)
+{
+	struct blk_keyslot_manager *parent = data;
+	struct blk_keyslot_manager *child = bdev_get_queue(dev->bdev)->ksm;
+
+	blk_ksm_intersect_modes(parent, child);
+	return 0;
+}
+
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm)
+{
+	struct dm_keyslot_manager *dksm = container_of(ksm,
+						       struct dm_keyslot_manager,
+						       ksm);
+
+	if (!ksm)
+		return;
+
+	blk_ksm_destroy(ksm);
+	kfree(dksm);
+}
+
+static void dm_table_destroy_keyslot_manager(struct dm_table *t)
+{
+	dm_destroy_keyslot_manager(t->ksm);
+	t->ksm = NULL;
+}
+
+/*
+ * Constructs and initializes t->ksm with a keyslot manager that
+ * represents the common set of crypto capabilities of the devices
+ * described by the dm_table. However, if the constructed keyslot
+ * manager does not support a superset of the crypto capabilities
+ * supported by the current keyslot manager of the mapped_device,
+ * it returns an error instead, since we don't support restricting
+ * crypto capabilities on table changes. Finally, if the constructed
+ * keyslot manager doesn't actually support any crypto modes at all,
+ * it just returns NULL.
+ */
+static int dm_table_construct_keyslot_manager(struct dm_table *t)
+{
+	struct dm_keyslot_manager *dksm;
+	struct blk_keyslot_manager *ksm;
+	struct dm_target *ti;
+	unsigned int i;
+	bool ksm_is_empty = true;
+
+	dksm = kmalloc(sizeof(*dksm), GFP_KERNEL);
+	if (!dksm)
+		return -ENOMEM;
+	dksm->md = t->md;
+
+	ksm = &dksm->ksm;
+	blk_ksm_init_passthrough(ksm);
+	ksm->ksm_ll_ops = dm_ksm_ll_ops;
+	ksm->max_dun_bytes_supported = UINT_MAX;
+	memset(ksm->crypto_modes_supported, 0xFF,
+	       sizeof(ksm->crypto_modes_supported));
+	ksm->features = BLK_CRYPTO_FEATURE_STANDARD_KEYS |
+			BLK_CRYPTO_FEATURE_WRAPPED_KEYS;
+
+	for (i = 0; i < dm_table_get_num_targets(t); i++) {
+		ti = dm_table_get_target(t, i);
+
+		if (!dm_target_passes_crypto(ti->type)) {
+			blk_ksm_intersect_modes(ksm, NULL);
+			break;
+		}
+		if (!ti->type->iterate_devices)
+			continue;
+		ti->type->iterate_devices(ti, device_intersect_crypto_modes,
+					  ksm);
+	}
+
+	if (t->md->queue && !blk_ksm_is_superset(ksm, t->md->queue->ksm)) {
+		DMWARN("Inline encryption capabilities of new DM table were more restrictive than the old table's. This is not supported!");
+		dm_destroy_keyslot_manager(ksm);
+		return -EINVAL;
+	}
+
+	/*
+	 * If the new KSM doesn't actually support any crypto modes, we may as
+	 * well represent it with a NULL ksm.
+	 */
+	ksm_is_empty = true;
+	for (i = 0; i < ARRAY_SIZE(ksm->crypto_modes_supported); i++) {
+		if (ksm->crypto_modes_supported[i]) {
+			ksm_is_empty = false;
+			break;
+		}
+	}
+
+	if (ksm_is_empty) {
+		dm_destroy_keyslot_manager(ksm);
+		ksm = NULL;
+	}
+
+	/*
+	 * t->ksm is only set temporarily while the table is being set
+	 * up, and it gets set to NULL after the capabilities have
+	 * been transferred to the request_queue.
+	 */
+	t->ksm = ksm;
+
+	return 0;
+}
+
+static void dm_update_keyslot_manager(struct request_queue *q,
+				      struct dm_table *t)
+{
+	if (!t->ksm)
+		return;
+
+	/* Make the ksm less restrictive */
+	if (!q->ksm) {
+		blk_ksm_register(t->ksm, q);
+	} else {
+		blk_ksm_update_capabilities(q->ksm, t->ksm);
+		dm_destroy_keyslot_manager(t->ksm);
+	}
+	t->ksm = NULL;
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static int dm_table_construct_keyslot_manager(struct dm_table *t)
+{
+	return 0;
+}
+
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm)
+{
+}
+
+static void dm_table_destroy_keyslot_manager(struct dm_table *t)
+{
+}
+
+static void dm_update_keyslot_manager(struct request_queue *q,
+				      struct dm_table *t)
+{
+}
+
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 /*
  * Prepares the table for use by building the indices,
  * setting the type, and allocating mempools.
@@ -1310,6 +1599,12 @@
 		return r;
 	}
 
+	r = dm_table_construct_keyslot_manager(t);
+	if (r) {
+		DMERR("could not construct keyslot manager.");
+		return r;
+	}
+
 	r = dm_table_alloc_md_mempools(t, t->md);
 	if (r)
 		DMERR("unable to allocate mempools");
@@ -1933,12 +2228,16 @@
 	/*
 	 * For a zoned target, the number of zones should be updated for the
 	 * correct value to be exposed in sysfs queue/nr_zones. For a BIO based
-	 * target, this is all that is needed. For a request based target, the
-	 * queue zone bitmaps must also be updated.
-	 * Use blk_revalidate_disk_zones() to handle this.
+	 * target, this is all that is needed.
 	 */
-	if (blk_queue_is_zoned(q))
-		blk_revalidate_disk_zones(t->md->disk);
+#ifdef CONFIG_BLK_DEV_ZONED
+	if (blk_queue_is_zoned(q)) {
+		WARN_ON_ONCE(queue_is_mq(q));
+		q->nr_zones = blkdev_nr_zones(t->md->disk);
+	}
+#endif
+
+	dm_update_keyslot_manager(q, t);
 
 	/* Allow reads to exceed readahead limits */
 	q->backing_dev_info->io_pages = limits->max_sectors >> (PAGE_SHIFT - 9);
diff --git a/drivers/md/dm-user.c b/drivers/md/dm-user.c
new file mode 100644
index 0000000..a1d0f1a
--- /dev/null
+++ b/drivers/md/dm-user.c
@@ -0,0 +1,1293 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (C) 2020 Google, Inc
+ * Copyright (C) 2020 Palmer Dabbelt <palmerdabbelt@google.com>
+ */
+
+#include <linux/device-mapper.h>
+#include <uapi/linux/dm-user.h>
+
+#include <linux/bio.h>
+#include <linux/init.h>
+#include <linux/mempool.h>
+#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/poll.h>
+#include <linux/uio.h>
+#include <linux/wait.h>
+#include <linux/workqueue.h>
+
+#define DM_MSG_PREFIX "user"
+
+#define MAX_OUTSTANDING_MESSAGES 128
+
+static unsigned int daemon_timeout_msec = 4000;
+module_param_named(dm_user_daemon_timeout_msec, daemon_timeout_msec, uint,
+		   0644);
+MODULE_PARM_DESC(dm_user_daemon_timeout_msec,
+		 "IO Timeout in msec if daemon does not process");
+
+/*
+ * dm-user uses four structures:
+ *
+ *  - "struct target", the outermost structure, corresponds to a single device
+ *    mapper target.  This contains the set of outstanding BIOs that have been
+ *    provided by DM and are not actively being processed by the user, along
+ *    with a misc device that userspace can open to communicate with the
+ *    kernel.  Each time userspaces opens the misc device a new channel is
+ *    created.
+ *  - "struct channel", which represents a single active communication channel
+ *    with userspace.  Userspace may choose arbitrary read/write sizes to use
+ *    when processing messages, channels form these into logical accesses.
+ *    When userspace responds to a full message the channel completes the BIO
+ *    and obtains a new message to process from the target.
+ *  - "struct message", which wraps a BIO with the additional information
+ *    required by the kernel to sort out what to do with BIOs when they return
+ *    from userspace.
+ *  - "struct dm_user_message", which is the exact message format that
+ *    userspace sees.
+ *
+ * The hot path contains three distinct operations:
+ *
+ *  - user_map(), which is provided a BIO from device mapper that is queued
+ *    into the target.  This allocates and enqueues a new message.
+ *  - dev_read(), which dequeues a message, copies it to userspace.
+ *  - dev_write(), which looks up a message (keyed by sequence number) and
+ *    completes the corresponding BIO.
+ *
+ * Lock ordering (outer to inner)
+ *
+ * 1) miscdevice's global lock.  This is held around dev_open, so it has to be
+ *    the outermost lock.
+ * 2) target->lock
+ * 3) channel->lock
+ */
+
+struct message {
+	/*
+	 * Messages themselves do not need a lock, they're protected by either
+	 * the target or channel's lock, depending on which can reference them
+	 * directly.
+	 */
+	struct dm_user_message msg;
+	struct bio *bio;
+	size_t posn_to_user;
+	size_t total_to_user;
+	size_t posn_from_user;
+	size_t total_from_user;
+
+	struct list_head from_user;
+	struct list_head to_user;
+
+	/*
+	 * These are written back from the user.  They live in the same spot in
+	 * the message, but we need to either keep the old values around or
+	 * call a bunch more BIO helpers.  These are only valid after write has
+	 * adopted the message.
+	 */
+	u64 return_type;
+	u64 return_flags;
+
+	struct delayed_work work;
+	bool delayed;
+	struct target *t;
+};
+
+struct target {
+	/*
+	 * A target has a single lock, which protects everything in the target
+	 * (but does not protect the channels associated with a target).
+	 */
+	struct mutex lock;
+
+	/*
+	 * There is only one point at which anything blocks: userspace blocks
+	 * reading a new message, which is woken up by device mapper providing
+	 * a new BIO to process (or tearing down the target).  The
+	 * corresponding write side doesn't block, instead we treat userspace's
+	 * response containing a message that has yet to be mapped as an
+	 * invalid operation.
+	 */
+	struct wait_queue_head wq;
+
+	/*
+	 * Messages are delivered to userspace in order, but may be returned
+	 * out of order.  This allows userspace to schedule IO if it wants to.
+	 */
+	mempool_t message_pool;
+	u64 next_seq_to_map;
+	u64 next_seq_to_user;
+	struct list_head to_user;
+
+	/*
+	 * There is a misc device per target.  The name is selected by
+	 * userspace (via a DM create ioctl argument), and each ends up in
+	 * /dev/dm-user/.  It looks like a better way to do this may be to have
+	 * a filesystem to manage these, but this was more expedient.  The
+	 * current mechanism is functional, but does result in an arbitrary
+	 * number of dynamically created misc devices.
+	 */
+	struct miscdevice miscdev;
+
+	/*
+	 * Device mapper's target destructor triggers tearing this all down,
+	 * but we can't actually free until every channel associated with this
+	 * target has been destroyed.  Channels each have a reference to their
+	 * target, and there is an additional single reference that corresponds
+	 * to both DM and the misc device (both of which are destroyed by DM).
+	 *
+	 * In the common case userspace will be asleep waiting for a new
+	 * message when device mapper decides to destroy the target, which
+	 * means no new messages will appear.  The destroyed flag triggers a
+	 * wakeup, which will end up removing the reference.
+	 */
+	struct kref references;
+	int dm_destroyed;
+	bool daemon_terminated;
+};
+
+struct channel {
+	struct target *target;
+
+	/*
+	 * A channel has a single lock, which prevents multiple reads (or
+	 * multiple writes) from conflicting with each other.
+	 */
+	struct mutex lock;
+
+	struct message *cur_to_user;
+	struct message *cur_from_user;
+	ssize_t to_user_error;
+	ssize_t from_user_error;
+
+	/*
+	 * Once a message has been forwarded to userspace on a channel it must
+	 * be responded to on the same channel.  This allows us to error out
+	 * the messages that have not yet been responded to by a channel when
+	 * that channel closes, which makes handling errors more reasonable for
+	 * fault-tolerant userspace daemons.  It also happens to make avoiding
+	 * shared locks between user_map() and dev_read() a lot easier.
+	 *
+	 * This does preclude a multi-threaded work stealing userspace
+	 * implementation (or at least, force a degree of head-of-line blocking
+	 * on the response path).
+	 */
+	struct list_head from_user;
+
+	/*
+	 * Responses from userspace can arrive in arbitrarily small chunks.
+	 * We need some place to buffer one up until we can find the
+	 * corresponding kernel-side message to continue processing, so instead
+	 * of allocating them we just keep one off to the side here.  This can
+	 * only ever be pointer to by from_user_cur, and will never have a BIO.
+	 */
+	struct message scratch_message_from_user;
+};
+
+static void message_kill(struct message *m, mempool_t *pool)
+{
+	m->bio->bi_status = BLK_STS_IOERR;
+	bio_endio(m->bio);
+	bio_put(m->bio);
+	mempool_free(m, pool);
+}
+
+static inline bool is_user_space_thread_present(struct target *t)
+{
+	lockdep_assert_held(&t->lock);
+	return (kref_read(&t->references) > 1);
+}
+
+static void process_delayed_work(struct work_struct *work)
+{
+	struct delayed_work *del_work = to_delayed_work(work);
+	struct message *msg = container_of(del_work, struct message, work);
+
+	struct target *t = msg->t;
+
+	mutex_lock(&t->lock);
+
+	/*
+	 * There is a atleast one thread to process the IO.
+	 */
+	if (is_user_space_thread_present(t)) {
+		mutex_unlock(&t->lock);
+		return;
+	}
+
+	/*
+	 * Terminate the IO with an error
+	 */
+	list_del(&msg->to_user);
+	pr_err("I/O error: sector %llu: no user-space daemon for %s target\n",
+	       msg->bio->bi_iter.bi_sector,
+	       t->miscdev.name);
+	message_kill(msg, &t->message_pool);
+	mutex_unlock(&t->lock);
+}
+
+static void enqueue_delayed_work(struct message *m, bool is_delay)
+{
+	unsigned long delay = 0;
+
+	m->delayed = true;
+	INIT_DELAYED_WORK(&m->work, process_delayed_work);
+
+	/*
+	 * Snapuserd daemon is the user-space process
+	 * which processes IO request from dm-user
+	 * when OTA is applied. Per the current design,
+	 * when a dm-user target is created, daemon
+	 * attaches to target and starts processing
+	 * the IO's. Daemon is terminated only when
+	 * dm-user target is destroyed.
+	 *
+	 * If for some reason, daemon crashes or terminates early,
+	 * without destroying the dm-user target; then
+	 * there is no mechanism to restart the daemon
+	 * and start processing the IO's from the same target.
+	 * Theoretically, it is possible but that infrastructure
+	 * doesn't exist in the android ecosystem.
+	 *
+	 * Thus, when the daemon terminates, there is no way the IO's
+	 * issued on that target will be processed. Hence,
+	 * we set the delay to 0 and fail the IO's immediately.
+	 *
+	 * On the other hand, when a new dm-user target is created,
+	 * we wait for the daemon to get attached for the first time.
+	 * This primarily happens when init first stage spins up
+	 * the daemon. At this point, since the snapshot device is mounted
+	 * of a root filesystem, dm-user target may receive IO request
+	 * even though daemon is not fully launched. We don't want
+	 * to fail those IO requests immediately. Thus, we queue these
+	 * requests with a timeout so that daemon is ready to process
+	 * those IO requests. Again, if the daemon fails to launch within
+	 * the timeout period, then IO's will be failed.
+	 */
+	if (is_delay)
+		delay = msecs_to_jiffies(daemon_timeout_msec);
+
+	queue_delayed_work(system_wq, &m->work, delay);
+}
+
+static inline struct target *target_from_target(struct dm_target *target)
+{
+	WARN_ON(target->private == NULL);
+	return target->private;
+}
+
+static inline struct target *target_from_miscdev(struct miscdevice *miscdev)
+{
+	return container_of(miscdev, struct target, miscdev);
+}
+
+static inline struct channel *channel_from_file(struct file *file)
+{
+	WARN_ON(file->private_data == NULL);
+	return file->private_data;
+}
+
+static inline struct target *target_from_channel(struct channel *c)
+{
+	WARN_ON(c->target == NULL);
+	return c->target;
+}
+
+static inline size_t bio_size(struct bio *bio)
+{
+	struct bio_vec bvec;
+	struct bvec_iter iter;
+	size_t out = 0;
+
+	bio_for_each_segment (bvec, bio, iter)
+		out += bio_iter_len(bio, iter);
+	return out;
+}
+
+static inline size_t bio_bytes_needed_to_user(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_WRITE:
+		return sizeof(struct dm_user_message) + bio_size(bio);
+	case REQ_OP_READ:
+	case REQ_OP_FLUSH:
+	case REQ_OP_DISCARD:
+	case REQ_OP_SECURE_ERASE:
+	case REQ_OP_WRITE_SAME:
+	case REQ_OP_WRITE_ZEROES:
+		return sizeof(struct dm_user_message);
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline size_t bio_bytes_needed_from_user(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_READ:
+		return sizeof(struct dm_user_message) + bio_size(bio);
+	case REQ_OP_WRITE:
+	case REQ_OP_FLUSH:
+	case REQ_OP_DISCARD:
+	case REQ_OP_SECURE_ERASE:
+	case REQ_OP_WRITE_SAME:
+	case REQ_OP_WRITE_ZEROES:
+		return sizeof(struct dm_user_message);
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline long bio_type_to_user_type(struct bio *bio)
+{
+	switch (bio_op(bio)) {
+	case REQ_OP_READ:
+		return DM_USER_REQ_MAP_READ;
+	case REQ_OP_WRITE:
+		return DM_USER_REQ_MAP_WRITE;
+	case REQ_OP_FLUSH:
+		return DM_USER_REQ_MAP_FLUSH;
+	case REQ_OP_DISCARD:
+		return DM_USER_REQ_MAP_DISCARD;
+	case REQ_OP_SECURE_ERASE:
+		return DM_USER_REQ_MAP_SECURE_ERASE;
+	case REQ_OP_WRITE_SAME:
+		return DM_USER_REQ_MAP_WRITE_SAME;
+	case REQ_OP_WRITE_ZEROES:
+		return DM_USER_REQ_MAP_WRITE_ZEROES;
+
+	/*
+	 * These ops are not passed to userspace under the assumption that
+	 * they're not going to be particularly useful in that context.
+	 */
+	default:
+		return -EOPNOTSUPP;
+	}
+}
+
+static inline long bio_flags_to_user_flags(struct bio *bio)
+{
+	u64 out = 0;
+	typeof(bio->bi_opf) opf = bio->bi_opf & ~REQ_OP_MASK;
+
+	if (opf & REQ_FAILFAST_DEV) {
+		opf &= ~REQ_FAILFAST_DEV;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_DEV;
+	}
+
+	if (opf & REQ_FAILFAST_TRANSPORT) {
+		opf &= ~REQ_FAILFAST_TRANSPORT;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_TRANSPORT;
+	}
+
+	if (opf & REQ_FAILFAST_DRIVER) {
+		opf &= ~REQ_FAILFAST_DRIVER;
+		out |= DM_USER_REQ_MAP_FLAG_FAILFAST_DRIVER;
+	}
+
+	if (opf & REQ_SYNC) {
+		opf &= ~REQ_SYNC;
+		out |= DM_USER_REQ_MAP_FLAG_SYNC;
+	}
+
+	if (opf & REQ_META) {
+		opf &= ~REQ_META;
+		out |= DM_USER_REQ_MAP_FLAG_META;
+	}
+
+	if (opf & REQ_PRIO) {
+		opf &= ~REQ_PRIO;
+		out |= DM_USER_REQ_MAP_FLAG_PRIO;
+	}
+
+	if (opf & REQ_NOMERGE) {
+		opf &= ~REQ_NOMERGE;
+		out |= DM_USER_REQ_MAP_FLAG_NOMERGE;
+	}
+
+	if (opf & REQ_IDLE) {
+		opf &= ~REQ_IDLE;
+		out |= DM_USER_REQ_MAP_FLAG_IDLE;
+	}
+
+	if (opf & REQ_INTEGRITY) {
+		opf &= ~REQ_INTEGRITY;
+		out |= DM_USER_REQ_MAP_FLAG_INTEGRITY;
+	}
+
+	if (opf & REQ_FUA) {
+		opf &= ~REQ_FUA;
+		out |= DM_USER_REQ_MAP_FLAG_FUA;
+	}
+
+	if (opf & REQ_PREFLUSH) {
+		opf &= ~REQ_PREFLUSH;
+		out |= DM_USER_REQ_MAP_FLAG_PREFLUSH;
+	}
+
+	if (opf & REQ_RAHEAD) {
+		opf &= ~REQ_RAHEAD;
+		out |= DM_USER_REQ_MAP_FLAG_RAHEAD;
+	}
+
+	if (opf & REQ_BACKGROUND) {
+		opf &= ~REQ_BACKGROUND;
+		out |= DM_USER_REQ_MAP_FLAG_BACKGROUND;
+	}
+
+	if (opf & REQ_NOWAIT) {
+		opf &= ~REQ_NOWAIT;
+		out |= DM_USER_REQ_MAP_FLAG_NOWAIT;
+	}
+
+	if (opf & REQ_NOUNMAP) {
+		opf &= ~REQ_NOUNMAP;
+		out |= DM_USER_REQ_MAP_FLAG_NOUNMAP;
+	}
+
+	if (unlikely(opf)) {
+		pr_warn("unsupported BIO type %x\n", opf);
+		return -EOPNOTSUPP;
+	}
+	WARN_ON(out < 0);
+	return out;
+}
+
+/*
+ * Not quite what's in blk-map.c, but instead what I thought the functions in
+ * blk-map did.  This one seems more generally useful and I think we could
+ * write the blk-map version in terms of this one.  The differences are that
+ * this has a return value that counts, and blk-map uses the BIO _all iters.
+ * Neither  advance the BIO iter but don't advance the IOV iter, which is a bit
+ * odd here.
+ */
+static ssize_t bio_copy_from_iter(struct bio *bio, struct iov_iter *iter)
+{
+	struct bio_vec bvec;
+	struct bvec_iter biter;
+	ssize_t out = 0;
+
+	bio_for_each_segment (bvec, bio, biter) {
+		ssize_t ret;
+
+		ret = copy_page_from_iter(bvec.bv_page, bvec.bv_offset,
+					  bvec.bv_len, iter);
+
+		/*
+		 * FIXME: I thought that IOV copies had a mechanism for
+		 * terminating early, if for example a signal came in while
+		 * sleeping waiting for a page to be mapped, but I don't see
+		 * where that would happen.
+		 */
+		WARN_ON(ret < 0);
+		out += ret;
+
+		if (!iov_iter_count(iter))
+			break;
+
+		if (ret < bvec.bv_len)
+			return ret;
+	}
+
+	return out;
+}
+
+static ssize_t bio_copy_to_iter(struct bio *bio, struct iov_iter *iter)
+{
+	struct bio_vec bvec;
+	struct bvec_iter biter;
+	ssize_t out = 0;
+
+	bio_for_each_segment (bvec, bio, biter) {
+		ssize_t ret;
+
+		ret = copy_page_to_iter(bvec.bv_page, bvec.bv_offset,
+					bvec.bv_len, iter);
+
+		/* as above */
+		WARN_ON(ret < 0);
+		out += ret;
+
+		if (!iov_iter_count(iter))
+			break;
+
+		if (ret < bvec.bv_len)
+			return ret;
+	}
+
+	return out;
+}
+
+static ssize_t msg_copy_to_iov(struct message *msg, struct iov_iter *to)
+{
+	ssize_t copied = 0;
+
+	if (!iov_iter_count(to))
+		return 0;
+
+	if (msg->posn_to_user < sizeof(msg->msg)) {
+		copied = copy_to_iter((char *)(&msg->msg) + msg->posn_to_user,
+				      sizeof(msg->msg) - msg->posn_to_user, to);
+	} else {
+		copied = bio_copy_to_iter(msg->bio, to);
+		if (copied > 0)
+			bio_advance(msg->bio, copied);
+	}
+
+	if (copied < 0)
+		return copied;
+
+	msg->posn_to_user += copied;
+	return copied;
+}
+
+static ssize_t msg_copy_from_iov(struct message *msg, struct iov_iter *from)
+{
+	ssize_t copied = 0;
+
+	if (!iov_iter_count(from))
+		return 0;
+
+	if (msg->posn_from_user < sizeof(msg->msg)) {
+		copied = copy_from_iter(
+			(char *)(&msg->msg) + msg->posn_from_user,
+			sizeof(msg->msg) - msg->posn_from_user, from);
+	} else {
+		copied = bio_copy_from_iter(msg->bio, from);
+		if (copied > 0)
+			bio_advance(msg->bio, copied);
+	}
+
+	if (copied < 0)
+		return copied;
+
+	msg->posn_from_user += copied;
+	return copied;
+}
+
+static struct message *msg_get_map(struct target *t)
+{
+	struct message *m;
+
+	lockdep_assert_held(&t->lock);
+
+	m = mempool_alloc(&t->message_pool, GFP_NOIO);
+	m->msg.seq = t->next_seq_to_map++;
+	INIT_LIST_HEAD(&m->to_user);
+	INIT_LIST_HEAD(&m->from_user);
+	return m;
+}
+
+static struct message *msg_get_to_user(struct target *t)
+{
+	struct message *m;
+
+	lockdep_assert_held(&t->lock);
+
+	if (list_empty(&t->to_user))
+		return NULL;
+
+	m = list_first_entry(&t->to_user, struct message, to_user);
+
+	list_del(&m->to_user);
+
+	/*
+	 * If the IO was queued to workqueue since there
+	 * was no daemon to service the IO, then we
+	 * will have to cancel the delayed work as the
+	 * IO will be processed by this user-space thread.
+	 *
+	 * If the delayed work was already picked up for
+	 * processing, then wait for it to complete. Note
+	 * that the IO will not be terminated by the work
+	 * queue thread.
+	 */
+	if (unlikely(m->delayed)) {
+		mutex_unlock(&t->lock);
+		cancel_delayed_work_sync(&m->work);
+		mutex_lock(&t->lock);
+	}
+	return m;
+}
+
+static struct message *msg_get_from_user(struct channel *c, u64 seq)
+{
+	struct message *m;
+	struct list_head *cur, *tmp;
+
+	lockdep_assert_held(&c->lock);
+
+	list_for_each_safe (cur, tmp, &c->from_user) {
+		m = list_entry(cur, struct message, from_user);
+		if (m->msg.seq == seq) {
+			list_del(&m->from_user);
+			return m;
+		}
+	}
+
+	return NULL;
+}
+
+/*
+ * Returns 0 when there is no work left to do.  This must be callable without
+ * holding the target lock, as it is part of the waitqueue's check expression.
+ * When called without the lock it may spuriously indicate there is remaining
+ * work, but when called with the lock it must be accurate.
+ */
+static int target_poll(struct target *t)
+{
+	return !list_empty(&t->to_user) || t->dm_destroyed;
+}
+
+static void target_release(struct kref *ref)
+{
+	struct target *t = container_of(ref, struct target, references);
+	struct list_head *cur, *tmp;
+
+	/*
+	 * There may be outstanding BIOs that have not yet been given to
+	 * userspace.  At this point there's nothing we can do about them, as
+	 * there are and will never be any channels.
+	 */
+	list_for_each_safe (cur, tmp, &t->to_user) {
+		struct message *m = list_entry(cur, struct message, to_user);
+
+		if (unlikely(m->delayed)) {
+			bool ret;
+
+			mutex_unlock(&t->lock);
+			ret = cancel_delayed_work_sync(&m->work);
+			mutex_lock(&t->lock);
+			if (!ret)
+				continue;
+		}
+		message_kill(m, &t->message_pool);
+	}
+
+	mempool_exit(&t->message_pool);
+	mutex_unlock(&t->lock);
+	mutex_destroy(&t->lock);
+	kfree(t);
+}
+
+static void target_put(struct target *t)
+{
+	/*
+	 * This both releases a reference to the target and the lock.  We leave
+	 * it up to the caller to hold the lock, as they probably needed it for
+	 * something else.
+	 */
+	lockdep_assert_held(&t->lock);
+
+	if (!kref_put(&t->references, target_release)) {
+		/*
+		 * User-space thread is getting terminated.
+		 * We need to scan the list for all those
+		 * pending IO's which were not processed yet
+		 * and put them back to work-queue for delayed
+		 * processing.
+		 */
+		if (!is_user_space_thread_present(t)) {
+			struct list_head *cur, *tmp;
+
+			list_for_each_safe(cur, tmp, &t->to_user) {
+				struct message *m = list_entry(cur,
+							       struct message,
+							       to_user);
+				if (!m->delayed)
+					enqueue_delayed_work(m, false);
+			}
+			/*
+			 * Daemon attached to this target is terminated.
+			 */
+			t->daemon_terminated = true;
+		}
+		mutex_unlock(&t->lock);
+	}
+}
+
+static struct channel *channel_alloc(struct target *t)
+{
+	struct channel *c;
+
+	lockdep_assert_held(&t->lock);
+
+	c = kzalloc(sizeof(*c), GFP_KERNEL);
+	if (c == NULL)
+		return NULL;
+
+	kref_get(&t->references);
+	c->target = t;
+	c->cur_from_user = &c->scratch_message_from_user;
+	mutex_init(&c->lock);
+	INIT_LIST_HEAD(&c->from_user);
+	return c;
+}
+
+static void channel_free(struct channel *c)
+{
+	struct list_head *cur, *tmp;
+
+	lockdep_assert_held(&c->lock);
+
+	/*
+	 * There may be outstanding BIOs that have been given to userspace but
+	 * have not yet been completed.  The channel has been shut down so
+	 * there's no way to process the rest of those messages, so we just go
+	 * ahead and error out the BIOs.  Hopefully whatever's on the other end
+	 * can handle the errors.  One could imagine splitting the BIOs and
+	 * completing as much as we got, but that seems like overkill here.
+	 *
+	 * Our only other options would be to let the BIO hang around (which
+	 * seems way worse) or to resubmit it to userspace in the hope there's
+	 * another channel.  I don't really like the idea of submitting a
+	 * message twice.
+	 */
+	if (c->cur_to_user != NULL)
+		message_kill(c->cur_to_user, &c->target->message_pool);
+	if (c->cur_from_user != &c->scratch_message_from_user)
+		message_kill(c->cur_from_user, &c->target->message_pool);
+	list_for_each_safe (cur, tmp, &c->from_user)
+		message_kill(list_entry(cur, struct message, from_user),
+			     &c->target->message_pool);
+
+	mutex_lock(&c->target->lock);
+	target_put(c->target);
+	mutex_unlock(&c->lock);
+	mutex_destroy(&c->lock);
+	kfree(c);
+}
+
+static int dev_open(struct inode *inode, struct file *file)
+{
+	struct channel *c;
+	struct target *t;
+
+	/*
+	 * This is called by miscdev, which sets private_data to point to the
+	 * struct miscdevice that was opened.  The rest of our file operations
+	 * want to refer to the channel that's been opened, so we swap that
+	 * pointer out with a fresh channel.
+	 *
+	 * This is called with the miscdev lock held, which is also held while
+	 * registering/unregistering the miscdev.  The miscdev must be
+	 * registered for this to get called, which means there must be an
+	 * outstanding reference to the target, which means it cannot be freed
+	 * out from under us despite us not holding a reference yet.
+	 */
+	t = container_of(file->private_data, struct target, miscdev);
+	mutex_lock(&t->lock);
+	file->private_data = c = channel_alloc(t);
+
+	if (c == NULL) {
+		mutex_unlock(&t->lock);
+		return -ENOMEM;
+	}
+
+	mutex_unlock(&t->lock);
+	return 0;
+}
+
+static ssize_t dev_read(struct kiocb *iocb, struct iov_iter *to)
+{
+	struct channel *c = channel_from_file(iocb->ki_filp);
+	ssize_t total_processed = 0;
+	ssize_t processed;
+
+	mutex_lock(&c->lock);
+
+	if (unlikely(c->to_user_error)) {
+		total_processed = c->to_user_error;
+		goto cleanup_unlock;
+	}
+
+	if (c->cur_to_user == NULL) {
+		struct target *t = target_from_channel(c);
+
+		mutex_lock(&t->lock);
+
+		while (!target_poll(t)) {
+			int e;
+
+			mutex_unlock(&t->lock);
+			mutex_unlock(&c->lock);
+			e = wait_event_interruptible(t->wq, target_poll(t));
+			mutex_lock(&c->lock);
+			mutex_lock(&t->lock);
+
+			if (unlikely(e != 0)) {
+				/*
+				 * We haven't processed any bytes in either the
+				 * BIO or the IOV, so we can just terminate
+				 * right now.  Elsewhere in the kernel handles
+				 * restarting the syscall when appropriate.
+				 */
+				total_processed = e;
+				mutex_unlock(&t->lock);
+				goto cleanup_unlock;
+			}
+		}
+
+		if (unlikely(t->dm_destroyed)) {
+			/*
+			 * DM has destroyed this target, so just lock
+			 * the user out.  There's really nothing else
+			 * we can do here.  Note that we don't actually
+			 * tear any thing down until userspace has
+			 * closed the FD, as there may still be
+			 * outstanding BIOs.
+			 *
+			 * This is kind of a wacky error code to
+			 * return.  My goal was really just to try and
+			 * find something that wasn't likely to be
+			 * returned by anything else in the miscdev
+			 * path.  The message "block device required"
+			 * seems like a somewhat reasonable thing to
+			 * say when the target has disappeared out from
+			 * under us, but "not block" isn't sensible.
+			 */
+			c->to_user_error = total_processed = -ENOTBLK;
+			mutex_unlock(&t->lock);
+			goto cleanup_unlock;
+		}
+
+		/*
+		 * Ensures that accesses to the message data are not ordered
+		 * before the remote accesses that produce that message data.
+		 *
+		 * This pairs with the barrier in user_map(), via the
+		 * conditional within the while loop above. Also see the lack
+		 * of barrier in user_dtr(), which is why this can be after the
+		 * destroyed check.
+		 */
+		smp_rmb();
+
+		c->cur_to_user = msg_get_to_user(t);
+		WARN_ON(c->cur_to_user == NULL);
+		mutex_unlock(&t->lock);
+	}
+
+	processed = msg_copy_to_iov(c->cur_to_user, to);
+	total_processed += processed;
+
+	WARN_ON(c->cur_to_user->posn_to_user > c->cur_to_user->total_to_user);
+	if (c->cur_to_user->posn_to_user == c->cur_to_user->total_to_user) {
+		struct message *m = c->cur_to_user;
+
+		c->cur_to_user = NULL;
+		list_add_tail(&m->from_user, &c->from_user);
+	}
+
+cleanup_unlock:
+	mutex_unlock(&c->lock);
+	return total_processed;
+}
+
+static ssize_t dev_write(struct kiocb *iocb, struct iov_iter *from)
+{
+	struct channel *c = channel_from_file(iocb->ki_filp);
+	ssize_t total_processed = 0;
+	ssize_t processed;
+
+	mutex_lock(&c->lock);
+
+	if (unlikely(c->from_user_error)) {
+		total_processed = c->from_user_error;
+		goto cleanup_unlock;
+	}
+
+	/*
+	 * cur_from_user can never be NULL.  If there's no real message it must
+	 * point to the scratch space.
+	 */
+	WARN_ON(c->cur_from_user == NULL);
+	if (c->cur_from_user->posn_from_user < sizeof(struct dm_user_message)) {
+		struct message *msg, *old;
+
+		processed = msg_copy_from_iov(c->cur_from_user, from);
+		if (processed <= 0) {
+			pr_warn("msg_copy_from_iov() returned %zu\n",
+				processed);
+			c->from_user_error = -EINVAL;
+			goto cleanup_unlock;
+		}
+		total_processed += processed;
+
+		/*
+		 * In the unlikely event the user has provided us a very short
+		 * write, not even big enough to fill a message, just succeed.
+		 * We'll eventually build up enough bytes to do something.
+		 */
+		if (unlikely(c->cur_from_user->posn_from_user <
+			     sizeof(struct dm_user_message)))
+			goto cleanup_unlock;
+
+		old = c->cur_from_user;
+		mutex_lock(&c->target->lock);
+		msg = msg_get_from_user(c, c->cur_from_user->msg.seq);
+		if (msg == NULL) {
+			pr_info("user provided an invalid messag seq of %llx\n",
+				old->msg.seq);
+			mutex_unlock(&c->target->lock);
+			c->from_user_error = -EINVAL;
+			goto cleanup_unlock;
+		}
+		mutex_unlock(&c->target->lock);
+
+		WARN_ON(old->posn_from_user != sizeof(struct dm_user_message));
+		msg->posn_from_user = sizeof(struct dm_user_message);
+		msg->return_type = old->msg.type;
+		msg->return_flags = old->msg.flags;
+		WARN_ON(msg->posn_from_user > msg->total_from_user);
+		c->cur_from_user = msg;
+		WARN_ON(old != &c->scratch_message_from_user);
+	}
+
+	/*
+	 * Userspace can signal an error for single requests by overwriting the
+	 * seq field.
+	 */
+	switch (c->cur_from_user->return_type) {
+	case DM_USER_RESP_SUCCESS:
+		c->cur_from_user->bio->bi_status = BLK_STS_OK;
+		break;
+	case DM_USER_RESP_ERROR:
+	case DM_USER_RESP_UNSUPPORTED:
+	default:
+		c->cur_from_user->bio->bi_status = BLK_STS_IOERR;
+		goto finish_bio;
+	}
+
+	/*
+	 * The op was a success as far as userspace is concerned, so process
+	 * whatever data may come along with it.  The user may provide the BIO
+	 * data in multiple chunks, in which case we don't need to finish the
+	 * BIO.
+	 */
+	processed = msg_copy_from_iov(c->cur_from_user, from);
+	total_processed += processed;
+
+	if (c->cur_from_user->posn_from_user <
+	    c->cur_from_user->total_from_user)
+		goto cleanup_unlock;
+
+finish_bio:
+	/*
+	 * When we set up this message the BIO's size matched the
+	 * message size, if that's not still the case then something
+	 * has gone off the rails.
+	 */
+	WARN_ON(bio_size(c->cur_from_user->bio) != 0);
+	bio_endio(c->cur_from_user->bio);
+	bio_put(c->cur_from_user->bio);
+
+	/*
+	 * We don't actually need to take the target lock here, as all
+	 * we're doing is freeing the message and mempools have their
+	 * own lock.  Each channel has its ows scratch message.
+	 */
+	WARN_ON(c->cur_from_user == &c->scratch_message_from_user);
+	mempool_free(c->cur_from_user, &c->target->message_pool);
+	c->scratch_message_from_user.posn_from_user = 0;
+	c->cur_from_user = &c->scratch_message_from_user;
+
+cleanup_unlock:
+	mutex_unlock(&c->lock);
+	return total_processed;
+}
+
+static int dev_release(struct inode *inode, struct file *file)
+{
+	struct channel *c;
+
+	c = channel_from_file(file);
+	mutex_lock(&c->lock);
+	channel_free(c);
+
+	return 0;
+}
+
+static const struct file_operations file_operations = {
+	.owner = THIS_MODULE,
+	.open = dev_open,
+	.llseek = no_llseek,
+	.read_iter = dev_read,
+	.write_iter = dev_write,
+	.release = dev_release,
+};
+
+static int user_ctr(struct dm_target *ti, unsigned int argc, char **argv)
+{
+	struct target *t;
+	int r;
+
+	if (argc != 3) {
+		ti->error = "Invalid argument count";
+		r = -EINVAL;
+		goto cleanup_none;
+	}
+
+	t = kzalloc(sizeof(*t), GFP_KERNEL);
+	if (t == NULL) {
+		r = -ENOMEM;
+		goto cleanup_none;
+	}
+	ti->private = t;
+
+	/* Enable more BIO types. */
+	ti->num_discard_bios = 1;
+	ti->discards_supported = true;
+	ti->num_flush_bios = 1;
+	ti->flush_supported = true;
+
+	/*
+	 * We begin with a single reference to the target, which is miscdev's
+	 * reference.  This ensures that the target won't be freed
+	 * until after the miscdev has been unregistered and all extant
+	 * channels have been closed.
+	 */
+	kref_init(&t->references);
+
+	t->daemon_terminated = false;
+	mutex_init(&t->lock);
+	init_waitqueue_head(&t->wq);
+	INIT_LIST_HEAD(&t->to_user);
+	mempool_init_kmalloc_pool(&t->message_pool, MAX_OUTSTANDING_MESSAGES,
+				  sizeof(struct message));
+
+	t->miscdev.minor = MISC_DYNAMIC_MINOR;
+	t->miscdev.fops = &file_operations;
+	t->miscdev.name = kasprintf(GFP_KERNEL, "dm-user/%s", argv[2]);
+	if (t->miscdev.name == NULL) {
+		r = -ENOMEM;
+		goto cleanup_message_pool;
+	}
+
+	/*
+	 * Once the miscdev is registered it can be opened and therefor
+	 * concurrent references to the channel can happen.  Holding the target
+	 * lock during misc_register() could deadlock.  If registration
+	 * succeeds then we will not access the target again so we just stick a
+	 * barrier here, which pairs with taking the target lock everywhere
+	 * else the target is accessed.
+	 *
+	 * I forgot where we ended up on the RCpc/RCsc locks.  IIU RCsc locks
+	 * would mean that we could take the target lock earlier and release it
+	 * here instead of the memory barrier.  I'm not sure that's any better,
+	 * though, and this isn't on a hot path so it probably doesn't matter
+	 * either way.
+	 */
+	smp_mb();
+
+	r = misc_register(&t->miscdev);
+	if (r) {
+		DMERR("Unable to register miscdev %s for dm-user",
+		      t->miscdev.name);
+		r = -ENOMEM;
+		goto cleanup_misc_name;
+	}
+
+	return 0;
+
+cleanup_misc_name:
+	kfree(t->miscdev.name);
+cleanup_message_pool:
+	mempool_exit(&t->message_pool);
+	kfree(t);
+cleanup_none:
+	return r;
+}
+
+static void user_dtr(struct dm_target *ti)
+{
+	struct target *t = target_from_target(ti);
+
+	/*
+	 * Removes the miscdev.  This must be called without the target lock
+	 * held to avoid a possible deadlock because our open implementation is
+	 * called holding the miscdev lock and must later take the target lock.
+	 *
+	 * There is no race here because only DM can register/unregister the
+	 * miscdev, and DM ensures that doesn't happen twice.  The internal
+	 * miscdev lock is sufficient to ensure there are no races between
+	 * deregistering the miscdev and open.
+	 */
+	misc_deregister(&t->miscdev);
+
+	/*
+	 * We are now free to take the target's lock and drop our reference to
+	 * the target.  There are almost certainly tasks sleeping in read on at
+	 * least one of the channels associated with this target, this
+	 * explicitly wakes them up and terminates the read.
+	 */
+	mutex_lock(&t->lock);
+	/*
+	 * No barrier here, as wait/wake ensures that the flag visibility is
+	 * correct WRT the wake/sleep state of the target tasks.
+	 */
+	t->dm_destroyed = true;
+	wake_up_all(&t->wq);
+	target_put(t);
+}
+
+/*
+ * Consumes a BIO from device mapper, queueing it up for userspace.
+ */
+static int user_map(struct dm_target *ti, struct bio *bio)
+{
+	struct target *t;
+	struct message *entry;
+
+	t = target_from_target(ti);
+	/*
+	 * FIXME
+	 *
+	 * This seems like a bad idea.  Specifically, here we're
+	 * directly on the IO path when we take the target lock, which may also
+	 * be taken from a user context.  The user context doesn't actively
+	 * trigger anything that may sleep while holding the lock, but this
+	 * still seems like a bad idea.
+	 *
+	 * The obvious way to fix this would be to use a proper queue, which
+	 * would result in no shared locks between the direct IO path and user
+	 * tasks.  I had a version that did this, but the head-of-line blocking
+	 * from the circular buffer resulted in us needing a fairly large
+	 * allocation in order to avoid situations in which the queue fills up
+	 * and everything goes off the rails.
+	 *
+	 * I could jump through a some hoops to avoid a shared lock while still
+	 * allowing for a large queue, but I'm not actually sure that allowing
+	 * for very large queues is the right thing to do here.  Intuitively it
+	 * seems better to keep the queues small in here (essentially sized to
+	 * the user latency for performance reasons only) and rely on returning
+	 * DM_MAPIO_REQUEUE regularly, as that would give the rest of the
+	 * kernel more information.
+	 *
+	 * I'll spend some time trying to figure out what's going on with
+	 * DM_MAPIO_REQUEUE, but if someone has a better idea of how to fix
+	 * this I'm all ears.
+	 */
+	mutex_lock(&t->lock);
+
+	/*
+	 * FIXME
+	 *
+	 * The assumption here is that there's no benefit to returning
+	 * DM_MAPIO_KILL as opposed to just erroring out the BIO, but I'm not
+	 * sure that's actually true -- for example, I could imagine users
+	 * expecting that submitted BIOs are unlikely to fail and therefor
+	 * relying on submission failure to indicate an unsupported type.
+	 *
+	 * There's two ways I can think of to fix this:
+	 *   - Add DM arguments that are parsed during the constructor that
+	 *     allow various dm_target flags to be set that indicate the op
+	 *     types supported by this target.  This may make sense for things
+	 *     like discard, where DM can already transform the BIOs to a form
+	 *     that's likely to be supported.
+	 *   - Some sort of pre-filter that allows userspace to hook in here
+	 *     and kill BIOs before marking them as submitted.  My guess would
+	 *     be that a userspace round trip is a bad idea here, but a BPF
+	 *     call seems resonable.
+	 *
+	 * My guess is that we'd likely want to do both.  The first one is easy
+	 * and gives DM the proper info, so it seems better.  The BPF call
+	 * seems overly complex for just this, but one could imagine wanting to
+	 * sometimes return _MAPPED and a BPF filter would be the way to do
+	 * that.
+	 *
+	 * For example, in Android we have an in-kernel DM device called
+	 * "dm-bow" that takes advange of some portion of the space that has
+	 * been discarded on a device to provide opportunistic block-level
+	 * backups.  While one could imagine just implementing this entirely in
+	 * userspace, that would come with an appreciable performance penalty.
+	 * Instead one could keep a BPF program that forwards most accesses
+	 * directly to the backing block device while informing a userspace
+	 * daemon of any discarded space and on writes to blocks that are to be
+	 * backed up.
+	 */
+	if (unlikely((bio_type_to_user_type(bio) < 0) ||
+		     (bio_flags_to_user_flags(bio) < 0))) {
+		mutex_unlock(&t->lock);
+		return DM_MAPIO_KILL;
+	}
+
+	entry = msg_get_map(t);
+	if (unlikely(entry == NULL)) {
+		mutex_unlock(&t->lock);
+		return DM_MAPIO_REQUEUE;
+	}
+
+	bio_get(bio);
+	entry->msg.type = bio_type_to_user_type(bio);
+	entry->msg.flags = bio_flags_to_user_flags(bio);
+	entry->msg.sector = bio->bi_iter.bi_sector;
+	entry->msg.len = bio_size(bio);
+	entry->bio = bio;
+	entry->posn_to_user = 0;
+	entry->total_to_user = bio_bytes_needed_to_user(bio);
+	entry->posn_from_user = 0;
+	entry->total_from_user = bio_bytes_needed_from_user(bio);
+	entry->delayed = false;
+	entry->t = t;
+	/* Pairs with the barrier in dev_read() */
+	smp_wmb();
+	list_add_tail(&entry->to_user, &t->to_user);
+
+	/*
+	 * If there is no daemon to process the IO's,
+	 * queue these messages into a workqueue with
+	 * a timeout.
+	 */
+	if (!is_user_space_thread_present(t))
+		enqueue_delayed_work(entry, !t->daemon_terminated);
+
+	wake_up_interruptible(&t->wq);
+	mutex_unlock(&t->lock);
+	return DM_MAPIO_SUBMITTED;
+}
+
+static struct target_type user_target = {
+	.name = "user",
+	.version = { 1, 0, 0 },
+	.module = THIS_MODULE,
+	.ctr = user_ctr,
+	.dtr = user_dtr,
+	.map = user_map,
+};
+
+static int __init dm_user_init(void)
+{
+	int r;
+
+	r = dm_register_target(&user_target);
+	if (r) {
+		DMERR("register failed %d", r);
+		goto error;
+	}
+
+	return 0;
+
+error:
+	return r;
+}
+
+static void __exit dm_user_exit(void)
+{
+	dm_unregister_target(&user_target);
+}
+
+module_init(dm_user_init);
+module_exit(dm_user_exit);
+MODULE_AUTHOR("Palmer Dabbelt <palmerdabbelt@google.com>");
+MODULE_DESCRIPTION(DM_NAME " target returning blocks from userspace");
+MODULE_LICENSE("GPL");
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 711f101..08047cc 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -471,6 +471,7 @@
 	struct bvec_iter start;
 	unsigned b;
 	struct crypto_wait wait;
+	struct bio *bio = dm_bio_from_per_bio_data(io, v->ti->per_io_data_size);
 
 	for (b = 0; b < io->n_blocks; b++) {
 		int r;
@@ -525,9 +526,17 @@
 		else if (verity_fec_decode(v, io, DM_VERITY_BLOCK_TYPE_DATA,
 					   cur_block, NULL, &start) == 0)
 			continue;
-		else if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA,
+		else {
+			if (bio->bi_status) {
+				/*
+				 * Error correction failed; Just return error
+				 */
+				return -EIO;
+			}
+			if (verity_handle_err(v, DM_VERITY_BLOCK_TYPE_DATA,
 					   cur_block))
-			return -EIO;
+				return -EIO;
+		}
 	}
 
 	return 0;
diff --git a/drivers/md/dm-zoned-metadata.c b/drivers/md/dm-zoned-metadata.c
index e6b0039..61b7d7b 100644
--- a/drivers/md/dm-zoned-metadata.c
+++ b/drivers/md/dm-zoned-metadata.c
@@ -1089,9 +1089,10 @@
 /*
  * Initialize a zone descriptor.
  */
-static int dmz_init_zone(struct dmz_metadata *zmd, struct dm_zone *zone,
-			 struct blk_zone *blkz)
+static int dmz_init_zone(struct blk_zone *blkz, unsigned int idx, void *data)
 {
+	struct dmz_metadata *zmd = data;
+	struct dm_zone *zone = &zmd->zones[idx];
 	struct dmz_dev *dev = zmd->dev;
 
 	/* Ignore the eventual last runt (smaller) zone */
@@ -1105,25 +1106,28 @@
 	atomic_set(&zone->refcount, 0);
 	zone->chunk = DMZ_MAP_UNMAPPED;
 
-	if (blkz->type == BLK_ZONE_TYPE_CONVENTIONAL) {
+	switch (blkz->type) {
+	case BLK_ZONE_TYPE_CONVENTIONAL:
 		set_bit(DMZ_RND, &zone->flags);
-	} else if (blkz->type == BLK_ZONE_TYPE_SEQWRITE_REQ ||
-		   blkz->type == BLK_ZONE_TYPE_SEQWRITE_PREF) {
+		break;
+	case BLK_ZONE_TYPE_SEQWRITE_REQ:
+	case BLK_ZONE_TYPE_SEQWRITE_PREF:
 		set_bit(DMZ_SEQ, &zone->flags);
-	} else
+		break;
+	default:
 		return -ENXIO;
-
-	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
-		set_bit(DMZ_OFFLINE, &zone->flags);
-	else if (blkz->cond == BLK_ZONE_COND_READONLY)
-		set_bit(DMZ_READ_ONLY, &zone->flags);
+	}
 
 	if (dmz_is_rnd(zone))
 		zone->wp_block = 0;
 	else
 		zone->wp_block = dmz_sect2blk(blkz->wp - blkz->start);
 
-	if (!dmz_is_offline(zone) && !dmz_is_readonly(zone)) {
+	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
+		set_bit(DMZ_OFFLINE, &zone->flags);
+	else if (blkz->cond == BLK_ZONE_COND_READONLY)
+		set_bit(DMZ_READ_ONLY, &zone->flags);
+	else {
 		zmd->nr_useable_zones++;
 		if (dmz_is_rnd(zone)) {
 			zmd->nr_rnd_zones++;
@@ -1147,23 +1151,13 @@
 }
 
 /*
- * The size of a zone report in number of zones.
- * This results in 4096*64B=256KB report zones commands.
- */
-#define DMZ_REPORT_NR_ZONES	4096
-
-/*
  * Allocate and initialize zone descriptors using the zone
  * information from disk.
  */
 static int dmz_init_zones(struct dmz_metadata *zmd)
 {
 	struct dmz_dev *dev = zmd->dev;
-	struct dm_zone *zone;
-	struct blk_zone *blkz;
-	unsigned int nr_blkz;
-	sector_t sector = 0;
-	int i, ret = 0;
+	int ret;
 
 	/* Init */
 	zmd->zone_bitmap_size = dev->zone_nr_blocks >> 3;
@@ -1180,54 +1174,38 @@
 	dmz_dev_info(dev, "Using %zu B for zone information",
 		     sizeof(struct dm_zone) * dev->nr_zones);
 
-	/* Get zone information */
-	nr_blkz = DMZ_REPORT_NR_ZONES;
-	blkz = kcalloc(nr_blkz, sizeof(struct blk_zone), GFP_KERNEL);
-	if (!blkz) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
 	/*
-	 * Get zone information and initialize zone descriptors.
-	 * At the same time, determine where the super block
-	 * should be: first block of the first randomly writable
-	 * zone.
+	 * Get zone information and initialize zone descriptors.  At the same
+	 * time, determine where the super block should be: first block of the
+	 * first randomly writable zone.
 	 */
-	zone = zmd->zones;
-	while (sector < dev->capacity) {
-		/* Get zone information */
-		nr_blkz = DMZ_REPORT_NR_ZONES;
-		ret = blkdev_report_zones(dev->bdev, sector, blkz, &nr_blkz);
-		if (ret) {
-			dmz_dev_err(dev, "Report zones failed %d", ret);
-			goto out;
-		}
-
-		if (!nr_blkz)
-			break;
-
-		/* Process report */
-		for (i = 0; i < nr_blkz; i++) {
-			ret = dmz_init_zone(zmd, zone, &blkz[i]);
-			if (ret)
-				goto out;
-			sector += dev->zone_nr_sectors;
-			zone++;
-		}
-	}
-
-	/* The entire zone configuration of the disk should now be known */
-	if (sector < dev->capacity) {
-		dmz_dev_err(dev, "Failed to get correct zone information");
-		ret = -ENXIO;
-	}
-out:
-	kfree(blkz);
-	if (ret)
+	ret = blkdev_report_zones(dev->bdev, 0, BLK_ALL_ZONES, dmz_init_zone,
+				  zmd);
+	if (ret < 0) {
 		dmz_drop_zones(zmd);
+		return ret;
+	}
 
-	return ret;
+	return 0;
+}
+
+static int dmz_update_zone_cb(struct blk_zone *blkz, unsigned int idx,
+			      void *data)
+{
+	struct dm_zone *zone = data;
+
+	clear_bit(DMZ_OFFLINE, &zone->flags);
+	clear_bit(DMZ_READ_ONLY, &zone->flags);
+	if (blkz->cond == BLK_ZONE_COND_OFFLINE)
+		set_bit(DMZ_OFFLINE, &zone->flags);
+	else if (blkz->cond == BLK_ZONE_COND_READONLY)
+		set_bit(DMZ_READ_ONLY, &zone->flags);
+
+	if (dmz_is_seq(zone))
+		zone->wp_block = dmz_sect2blk(blkz->wp - blkz->start);
+	else
+		zone->wp_block = 0;
+	return 0;
 }
 
 /*
@@ -1235,9 +1213,7 @@
  */
 static int dmz_update_zone(struct dmz_metadata *zmd, struct dm_zone *zone)
 {
-	unsigned int nr_blkz = 1;
 	unsigned int noio_flag;
-	struct blk_zone blkz;
 	int ret;
 
 	/*
@@ -1247,30 +1223,19 @@
 	 * GFP_NOIO was specified.
 	 */
 	noio_flag = memalloc_noio_save();
-	ret = blkdev_report_zones(zmd->dev->bdev, dmz_start_sect(zmd, zone),
-				  &blkz, &nr_blkz);
+	ret = blkdev_report_zones(zmd->dev->bdev, dmz_start_sect(zmd, zone), 1,
+				  dmz_update_zone_cb, zone);
 	memalloc_noio_restore(noio_flag);
-	if (!nr_blkz)
+
+	if (ret == 0)
 		ret = -EIO;
-	if (ret) {
+	if (ret < 0) {
 		dmz_dev_err(zmd->dev, "Get zone %u report failed",
 			    dmz_id(zmd, zone));
 		dmz_check_bdev(zmd->dev);
 		return ret;
 	}
 
-	clear_bit(DMZ_OFFLINE, &zone->flags);
-	clear_bit(DMZ_READ_ONLY, &zone->flags);
-	if (blkz.cond == BLK_ZONE_COND_OFFLINE)
-		set_bit(DMZ_OFFLINE, &zone->flags);
-	else if (blkz.cond == BLK_ZONE_COND_READONLY)
-		set_bit(DMZ_READ_ONLY, &zone->flags);
-
-	if (dmz_is_seq(zone))
-		zone->wp_block = dmz_sect2blk(blkz.wp - blkz.start);
-	else
-		zone->wp_block = 0;
-
 	return 0;
 }
 
@@ -1324,9 +1289,9 @@
 	if (!dmz_is_empty(zone) || dmz_seq_write_err(zone)) {
 		struct dmz_dev *dev = zmd->dev;
 
-		ret = blkdev_reset_zones(dev->bdev,
-					 dmz_start_sect(zmd, zone),
-					 dev->zone_nr_sectors, GFP_NOIO);
+		ret = blkdev_zone_mgmt(dev->bdev, REQ_OP_ZONE_RESET,
+				       dmz_start_sect(zmd, zone),
+				       dev->zone_nr_sectors, GFP_NOIO);
 		if (ret) {
 			dmz_dev_err(dev, "Reset zone %u failed %d",
 				    dmz_id(zmd, zone), ret);
diff --git a/drivers/md/dm-zoned-target.c b/drivers/md/dm-zoned-target.c
index 6e4f3ef..aa8de56 100644
--- a/drivers/md/dm-zoned-target.c
+++ b/drivers/md/dm-zoned-target.c
@@ -727,7 +727,7 @@
 	dev->zone_nr_blocks = dmz_sect2blk(dev->zone_nr_sectors);
 	dev->zone_nr_blocks_shift = ilog2(dev->zone_nr_blocks);
 
-	dev->nr_zones = blkdev_nr_zones(dev->bdev);
+	dev->nr_zones = blkdev_nr_zones(dev->bdev->bd_disk);
 
 	dmz->dev = dev;
 
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 530c0fe..95ee488 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -26,6 +26,8 @@
 #include <linux/wait.h>
 #include <linux/pr.h>
 #include <linux/refcount.h>
+#include <linux/blk-crypto.h>
+#include <linux/keyslot-manager.h>
 
 #define DM_MSG_PREFIX "core"
 
@@ -452,14 +454,48 @@
 	return dm_get_geometry(md, geo);
 }
 
-static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones)
-{
 #ifdef CONFIG_BLK_DEV_ZONED
+int dm_report_zones_cb(struct blk_zone *zone, unsigned int idx, void *data)
+{
+	struct dm_report_zones_args *args = data;
+	sector_t sector_diff = args->tgt->begin - args->start;
+
+	/*
+	 * Ignore zones beyond the target range.
+	 */
+	if (zone->start >= args->start + args->tgt->len)
+		return 0;
+
+	/*
+	 * Remap the start sector and write pointer position of the zone
+	 * to match its position in the target range.
+	 */
+	zone->start += sector_diff;
+	if (zone->type != BLK_ZONE_TYPE_CONVENTIONAL) {
+		if (zone->cond == BLK_ZONE_COND_FULL)
+			zone->wp = zone->start + zone->len;
+		else if (zone->cond == BLK_ZONE_COND_EMPTY)
+			zone->wp = zone->start;
+		else
+			zone->wp += sector_diff;
+	}
+
+	args->next_sector = zone->start + zone->len;
+	return args->orig_cb(zone, args->zone_idx++, args->orig_data);
+}
+EXPORT_SYMBOL_GPL(dm_report_zones_cb);
+
+static int dm_blk_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data)
+{
 	struct mapped_device *md = disk->private_data;
-	struct dm_target *tgt;
 	struct dm_table *map;
 	int srcu_idx, ret;
+	struct dm_report_zones_args args = {
+		.next_sector = sector,
+		.orig_data = data,
+		.orig_cb = cb,
+	};
 
 	if (dm_suspended_md(md))
 		return -EAGAIN;
@@ -470,38 +506,30 @@
 		goto out;
 	}
 
-	tgt = dm_table_find_target(map, sector);
-	if (!tgt) {
-		ret = -EIO;
-		goto out;
-	}
+	do {
+		struct dm_target *tgt;
 
-	/*
-	 * If we are executing this, we already know that the block device
-	 * is a zoned device and so each target should have support for that
-	 * type of drive. A missing report_zones method means that the target
-	 * driver has a problem.
-	 */
-	if (WARN_ON(!tgt->type->report_zones)) {
-		ret = -EIO;
-		goto out;
-	}
+		tgt = dm_table_find_target(map, args.next_sector);
+		if (WARN_ON_ONCE(!tgt->type->report_zones)) {
+			ret = -EIO;
+			goto out;
+		}
 
-	/*
-	 * blkdev_report_zones() will loop and call this again to cover all the
-	 * zones of the target, eventually moving on to the next target.
-	 * So there is no need to loop here trying to fill the entire array
-	 * of zones.
-	 */
-	ret = tgt->type->report_zones(tgt, sector, zones, nr_zones);
+		args.tgt = tgt;
+		ret = tgt->type->report_zones(tgt, &args, nr_zones);
+		if (ret < 0)
+			goto out;
+	} while (args.zone_idx < nr_zones &&
+		 args.next_sector < get_capacity(disk));
 
+	ret = args.zone_idx;
 out:
 	dm_put_live_table(md, srcu_idx);
 	return ret;
-#else
-	return -ENOTSUPP;
-#endif
 }
+#else
+#define dm_blk_report_zones		NULL
+#endif /* CONFIG_BLK_DEV_ZONED */
 
 static int dm_prepare_ioctl(struct mapped_device *md, int *srcu_idx,
 			    struct block_device **bdev)
@@ -1235,54 +1263,6 @@
 }
 EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
 
-/*
- * The zone descriptors obtained with a zone report indicate
- * zone positions within the underlying device of the target. The zone
- * descriptors must be remapped to match their position within the dm device.
- * The caller target should obtain the zones information using
- * blkdev_report_zones() to ensure that remapping for partition offset is
- * already handled.
- */
-void dm_remap_zone_report(struct dm_target *ti, sector_t start,
-			  struct blk_zone *zones, unsigned int *nr_zones)
-{
-#ifdef CONFIG_BLK_DEV_ZONED
-	struct blk_zone *zone;
-	unsigned int nrz = *nr_zones;
-	int i;
-
-	/*
-	 * Remap the start sector and write pointer position of the zones in
-	 * the array. Since we may have obtained from the target underlying
-	 * device more zones that the target size, also adjust the number
-	 * of zones.
-	 */
-	for (i = 0; i < nrz; i++) {
-		zone = zones + i;
-		if (zone->start >= start + ti->len) {
-			memset(zone, 0, sizeof(struct blk_zone) * (nrz - i));
-			break;
-		}
-
-		zone->start = zone->start + ti->begin - start;
-		if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
-			continue;
-
-		if (zone->cond == BLK_ZONE_COND_FULL)
-			zone->wp = zone->start + zone->len;
-		else if (zone->cond == BLK_ZONE_COND_EMPTY)
-			zone->wp = zone->start;
-		else
-			zone->wp = zone->wp + ti->begin - start;
-	}
-
-	*nr_zones = i;
-#else /* !CONFIG_BLK_DEV_ZONED */
-	*nr_zones = 0;
-#endif
-}
-EXPORT_SYMBOL_GPL(dm_remap_zone_report);
-
 static noinline void __set_swap_bios_limit(struct mapped_device *md, int latch)
 {
 	mutex_lock(&md->swap_bios_lock);
@@ -1377,12 +1357,15 @@
 		     sector_t sector, unsigned len)
 {
 	struct bio *clone = &tio->clone;
+	int r;
 
 	__bio_clone_fast(clone, bio);
 
-	if (bio_integrity(bio)) {
-		int r;
+	r = bio_crypt_clone(clone, bio, GFP_NOIO);
+	if (r < 0)
+		return r;
 
+	if (bio_integrity(bio)) {
 		if (unlikely(!dm_target_has_integrity(tio->ti->type) &&
 			     !dm_target_passes_integrity(tio->ti->type))) {
 			DMWARN("%s: the target %s doesn't support integrity data.",
@@ -1912,6 +1895,19 @@
 
 static void dm_wq_work(struct work_struct *work);
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+static void dm_queue_destroy_keyslot_manager(struct request_queue *q)
+{
+	dm_destroy_keyslot_manager(q->ksm);
+}
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline void dm_queue_destroy_keyslot_manager(struct request_queue *q)
+{
+}
+#endif /* !CONFIG_BLK_INLINE_ENCRYPTION */
+
 static void cleanup_mapped_device(struct mapped_device *md)
 {
 	if (md->wq)
@@ -1933,8 +1929,10 @@
 		put_disk(md->disk);
 	}
 
-	if (md->queue)
+	if (md->queue) {
+		dm_queue_destroy_keyslot_manager(md->queue);
 		blk_cleanup_queue(md->queue);
+	}
 
 	cleanup_srcu_struct(&md->io_barrier);
 
diff --git a/drivers/md/md-bitmap.c b/drivers/md/md-bitmap.c
index d7eef52..20c6c4b 100644
--- a/drivers/md/md-bitmap.c
+++ b/drivers/md/md-bitmap.c
@@ -364,7 +364,7 @@
 	int ret = 0;
 	struct inode *inode = file_inode(file);
 	struct buffer_head *bh;
-	sector_t block;
+	sector_t block, blk_cur;
 
 	pr_debug("read bitmap file (%dB @ %llu)\n", (int)PAGE_SIZE,
 		 (unsigned long long)index << PAGE_SHIFT);
@@ -375,17 +375,21 @@
 		goto out;
 	}
 	attach_page_buffers(page, bh);
-	block = index << (PAGE_SHIFT - inode->i_blkbits);
+	blk_cur = index << (PAGE_SHIFT - inode->i_blkbits);
 	while (bh) {
+		block = blk_cur;
+
 		if (count == 0)
 			bh->b_blocknr = 0;
 		else {
-			bh->b_blocknr = bmap(inode, block);
-			if (bh->b_blocknr == 0) {
-				/* Cannot use this file! */
+			ret = bmap(inode, &block);
+			if (ret || !block) {
 				ret = -EINVAL;
+				bh->b_blocknr = 0;
 				goto out;
 			}
+
+			bh->b_blocknr = block;
 			bh->b_bdev = inode->i_sb->s_bdev;
 			if (count < (1<<inode->i_blkbits))
 				count = 0;
@@ -399,7 +403,7 @@
 			set_buffer_mapped(bh);
 			submit_bh(REQ_OP_READ, 0, bh);
 		}
-		block++;
+		blk_cur++;
 		bh = bh->b_this_page;
 	}
 	page->index = index;
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig
index b36a413..752cd76 100644
--- a/drivers/media/Kconfig
+++ b/drivers/media/Kconfig
@@ -50,7 +50,7 @@
 		will disable support for them.
 
 config MEDIA_DIGITAL_TV_SUPPORT
-	bool "Digital TV support"
+	tristate "Digital TV support"
 	help
 	  Enable digital TV support.
 
@@ -123,7 +123,7 @@
 	depends on MEDIA_SUPPORT
 	depends on MEDIA_DIGITAL_TV_SUPPORT
 	depends on (I2C || I2C=n)
-	default y
+	default MEDIA_DIGITAL_TV_SUPPORT
 	select CRC32
 
 config DVB_MMAP
diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c b/drivers/media/common/videobuf2/videobuf2-v4l2.c
index 5a9ba38..e652f43 100644
--- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
+++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
@@ -49,8 +49,11 @@
 				 V4L2_BUF_FLAG_REQUEST_FD | \
 				 V4L2_BUF_FLAG_TIMESTAMP_MASK)
 /* Output buffer flags that should be passed on to the driver */
-#define V4L2_BUFFER_OUT_FLAGS	(V4L2_BUF_FLAG_PFRAME | V4L2_BUF_FLAG_BFRAME | \
-				 V4L2_BUF_FLAG_KEYFRAME | V4L2_BUF_FLAG_TIMECODE)
+#define V4L2_BUFFER_OUT_FLAGS	(V4L2_BUF_FLAG_PFRAME | \
+				 V4L2_BUF_FLAG_BFRAME | \
+				 V4L2_BUF_FLAG_KEYFRAME | \
+				 V4L2_BUF_FLAG_TIMECODE | \
+				 V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF)
 
 /*
  * __verify_planes_array() - verify that the planes array passed in struct
@@ -194,6 +197,7 @@
 	}
 	vbuf->sequence = 0;
 	vbuf->request_fd = -1;
+	vbuf->is_held = false;
 
 	if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) {
 		switch (b->memory) {
@@ -321,6 +325,8 @@
 		 */
 		vbuf->flags &= ~V4L2_BUF_FLAG_TIMECODE;
 		vbuf->field = b->field;
+		if (!(q->subsystem_flags & VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF))
+			vbuf->flags &= ~V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
 	} else {
 		/* Zero any output buffer flags as this is a capture buffer */
 		vbuf->flags &= ~V4L2_BUFFER_OUT_FLAGS;
@@ -654,6 +660,8 @@
 		*caps |= V4L2_BUF_CAP_SUPPORTS_USERPTR;
 	if (q->io_modes & VB2_DMABUF)
 		*caps |= V4L2_BUF_CAP_SUPPORTS_DMABUF;
+	if (q->subsystem_flags & VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF)
+		*caps |= V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF;
 #ifdef CONFIG_MEDIA_CONTROLLER_REQUEST_API
 	if (q->supports_requests)
 		*caps |= V4L2_BUF_CAP_SUPPORTS_REQUESTS;
diff --git a/drivers/media/i2c/saa6588.c b/drivers/media/i2c/saa6588.c
index d1e0716..ecb491d 100644
--- a/drivers/media/i2c/saa6588.c
+++ b/drivers/media/i2c/saa6588.c
@@ -380,7 +380,7 @@
 
 /* ---------------------------------------------------------------------- */
 
-static long saa6588_command(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
+static long saa6588_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
 {
 	struct saa6588 *s = to_saa6588(sd);
 	struct saa6588_command *a = arg;
@@ -433,7 +433,7 @@
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops saa6588_core_ops = {
-	.command = saa6588_command,
+	.ioctl = saa6588_ioctl,
 };
 
 static const struct v4l2_subdev_tuner_ops saa6588_tuner_ops = {
diff --git a/drivers/media/pci/bt8xx/bttv-driver.c b/drivers/media/pci/bt8xx/bttv-driver.c
index 570530d..ff2962c 100644
--- a/drivers/media/pci/bt8xx/bttv-driver.c
+++ b/drivers/media/pci/bt8xx/bttv-driver.c
@@ -3187,7 +3187,7 @@
 
 	btv->radio_user--;
 
-	bttv_call_all(btv, core, command, SAA6588_CMD_CLOSE, &cmd);
+	bttv_call_all(btv, core, ioctl, SAA6588_CMD_CLOSE, &cmd);
 
 	if (btv->radio_user == 0)
 		btv->has_radio_tuner = 0;
@@ -3268,7 +3268,7 @@
 	cmd.result = -ENODEV;
 	radio_enable(btv);
 
-	bttv_call_all(btv, core, command, SAA6588_CMD_READ, &cmd);
+	bttv_call_all(btv, core, ioctl, SAA6588_CMD_READ, &cmd);
 
 	return cmd.result;
 }
@@ -3289,7 +3289,7 @@
 	cmd.instance = file;
 	cmd.event_list = wait;
 	cmd.poll_mask = res;
-	bttv_call_all(btv, core, command, SAA6588_CMD_POLL, &cmd);
+	bttv_call_all(btv, core, ioctl, SAA6588_CMD_POLL, &cmd);
 
 	return cmd.poll_mask;
 }
diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c
index e454a28..342cabf4 100644
--- a/drivers/media/pci/saa7134/saa7134-video.c
+++ b/drivers/media/pci/saa7134/saa7134-video.c
@@ -1179,7 +1179,7 @@
 
 	saa_call_all(dev, tuner, standby);
 	if (vdev->vfl_type == VFL_TYPE_RADIO)
-		saa_call_all(dev, core, command, SAA6588_CMD_CLOSE, &cmd);
+		saa_call_all(dev, core, ioctl, SAA6588_CMD_CLOSE, &cmd);
 	mutex_unlock(&dev->lock);
 
 	return 0;
@@ -1198,7 +1198,7 @@
 	cmd.result = -ENODEV;
 
 	mutex_lock(&dev->lock);
-	saa_call_all(dev, core, command, SAA6588_CMD_READ, &cmd);
+	saa_call_all(dev, core, ioctl, SAA6588_CMD_READ, &cmd);
 	mutex_unlock(&dev->lock);
 
 	return cmd.result;
@@ -1214,7 +1214,7 @@
 	cmd.event_list = wait;
 	cmd.poll_mask = 0;
 	mutex_lock(&dev->lock);
-	saa_call_all(dev, core, command, SAA6588_CMD_POLL, &cmd);
+	saa_call_all(dev, core, ioctl, SAA6588_CMD_POLL, &cmd);
 	mutex_unlock(&dev->lock);
 
 	return rc | cmd.poll_mask;
diff --git a/drivers/media/platform/davinci/vpbe_display.c b/drivers/media/platform/davinci/vpbe_display.c
index 7fbd22d..ae41995 100644
--- a/drivers/media/platform/davinci/vpbe_display.c
+++ b/drivers/media/platform/davinci/vpbe_display.c
@@ -48,7 +48,7 @@
 
 	ret = v4l2_subdev_call(vpbe_dev->venc,
 			       core,
-			       command,
+			       ioctl,
 			       VENC_GET_FLD,
 			       &val);
 	if (ret < 0) {
diff --git a/drivers/media/platform/davinci/vpbe_venc.c b/drivers/media/platform/davinci/vpbe_venc.c
index bde241c..8caa084 100644
--- a/drivers/media/platform/davinci/vpbe_venc.c
+++ b/drivers/media/platform/davinci/vpbe_venc.c
@@ -521,7 +521,9 @@
 	return ret;
 }
 
-static long venc_command(struct v4l2_subdev *sd, unsigned int cmd, void *arg)
+static long venc_ioctl(struct v4l2_subdev *sd,
+			unsigned int cmd,
+			void *arg)
 {
 	u32 val;
 
@@ -540,7 +542,7 @@
 }
 
 static const struct v4l2_subdev_core_ops venc_core_ops = {
-	.command      = venc_command,
+	.ioctl      = venc_ioctl,
 };
 
 static const struct v4l2_subdev_video_ops venc_video_ops = {
diff --git a/drivers/media/rc/bpf-lirc.c b/drivers/media/rc/bpf-lirc.c
index d5f839f..e90971a 100644
--- a/drivers/media/rc/bpf-lirc.c
+++ b/drivers/media/rc/bpf-lirc.c
@@ -108,6 +108,8 @@
 		return &bpf_map_peek_elem_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	case BPF_FUNC_tail_call:
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_get_prandom_u32:
diff --git a/drivers/media/rc/ir-rx51.c b/drivers/media/rc/ir-rx51.c
index 8574eda..9a5dfd7 100644
--- a/drivers/media/rc/ir-rx51.c
+++ b/drivers/media/rc/ir-rx51.c
@@ -241,7 +241,8 @@
 	}
 
 	/* Use default, in case userspace does not set the carrier */
-	ir_rx51.freq = DIV_ROUND_CLOSEST(pwm_get_period(pwm), NSEC_PER_SEC);
+	ir_rx51.freq = DIV_ROUND_CLOSEST_ULL(pwm_get_period(pwm),
+			NSEC_PER_SEC);
 	pwm_put(pwm);
 
 	hrtimer_init(&ir_rx51.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c
index 62f7aa9..d0e5ebc 100644
--- a/drivers/media/v4l2-core/v4l2-common.c
+++ b/drivers/media/v4l2-core/v4l2-common.c
@@ -236,77 +236,79 @@
 {
 	static const struct v4l2_format_info formats[] = {
 		/* RGB formats */
-		{ .format = V4L2_PIX_FMT_BGR24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGB24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_HSV24,   .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGR32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_XBGR32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGRX32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGB32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_XRGB32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGBX32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_HSV32,   .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_ARGB32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_RGBA32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_ABGR32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_BGRA32,  .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_GREY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGR24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_HSV24,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 3, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGR32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_XBGR32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGRX32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_XRGB32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGBX32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_HSV32,   .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_ARGB32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGBA32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_ABGR32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_BGRA32,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_GREY,    .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB565,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_RGB555,  .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 
 		/* YUV packed formats */
-		{ .format = V4L2_PIX_FMT_YUYV,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVYU,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_UYVY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_VYUY,    .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUYV,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVYU,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_UYVY,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_VYUY,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* YUV planar formats */
-		{ .format = V4L2_PIX_FMT_NV12,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV21,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV16,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV61,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV24,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV42,    .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV12,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV21,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV16,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV61,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV24,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV42,    .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 
-		{ .format = V4L2_PIX_FMT_YUV410,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
-		{ .format = V4L2_PIX_FMT_YVU410,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
-		{ .format = V4L2_PIX_FMT_YUV411P, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YUV420,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YVU420,  .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YUV422P, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV410,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
+		{ .format = V4L2_PIX_FMT_YVU410,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 },
+		{ .format = V4L2_PIX_FMT_YUV411P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV420,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YVU420,  .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YUV422P, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* YUV planar formats, non contiguous variant */
-		{ .format = V4L2_PIX_FMT_YUV420M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YVU420M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_YUV422M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVU422M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YUV444M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_YVU444M, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV420M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YVU420M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_YUV422M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVU422M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YUV444M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_YVU444M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 3, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 1, .vdiv = 1 },
 
-		{ .format = V4L2_PIX_FMT_NV12M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV21M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
-		{ .format = V4L2_PIX_FMT_NV16M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_NV61M,   .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV12M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV21M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 },
+		{ .format = V4L2_PIX_FMT_NV16M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_NV61M,   .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 },
 
 		/* Bayer RGB formats */
-		{ .format = V4L2_PIX_FMT_SBGGR8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10ALAW8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB10DPCM8,	.mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SBGGR12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGBRG12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SGRBG12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
-		{ .format = V4L2_PIX_FMT_SRGGB12,	.mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10ALAW8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB10DPCM8,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SBGGR12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGBRG12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SGRBG12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
+		{ .format = V4L2_PIX_FMT_SRGGB12,	.pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 },
 	};
 	unsigned int i;
 
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 7ad6db8..62183fe 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -465,6 +465,11 @@
 		__s32		fd;
 	} m;
 	__u32			data_offset;
+	/*
+	 * few userspace clients and drivers use reserved fields
+	 * and it is up to them how these fields are used. v4l2
+	 * simply copy reserved fields between them.
+	 */
 	__u32			reserved[11];
 };
 
@@ -499,7 +504,9 @@
 
 	if (copy_in_user(p64, p32, 2 * sizeof(__u32)) ||
 	    copy_in_user(&p64->data_offset, &p32->data_offset,
-			 sizeof(p64->data_offset)))
+			 sizeof(p64->data_offset)) ||
+	    copy_in_user(p64->reserved, p32->reserved,
+			 sizeof(p64->reserved)))
 		return -EFAULT;
 
 	switch (memory) {
@@ -531,7 +538,9 @@
 
 	if (copy_in_user(p32, p64, 2 * sizeof(__u32)) ||
 	    copy_in_user(&p32->data_offset, &p64->data_offset,
-			 sizeof(p64->data_offset)))
+			 sizeof(p64->data_offset)) ||
+	    copy_in_user(p32->reserved, p64->reserved,
+			 sizeof(p32->reserved)))
 		return -EFAULT;
 
 	switch (memory) {
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 7ac7a50..3a2c37b 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -29,6 +29,8 @@
 #define call_op(master, op) \
 	(has_op(master, op) ? master->ops->op(master) : 0)
 
+static const union v4l2_ctrl_ptr ptr_null;
+
 /* Internal temporary helper struct, one for each v4l2_ext_control */
 struct v4l2_ctrl_helper {
 	/* Pointer to the control reference of the master control */
@@ -334,6 +336,10 @@
 		"4.2",
 		"5",
 		"5.1",
+		"5.2",
+		"6.0",
+		"6.1",
+		"6.2",
 		NULL,
 	};
 	static const char * const h264_loop_filter[] = {
@@ -360,6 +366,7 @@
 		"Scalable High Intra",
 		"Stereo High",
 		"Multiview High",
+		"Constrained High",
 		NULL,
 	};
 	static const char * const vui_sar_idc[] = {
@@ -566,6 +573,16 @@
 		"Disabled at slice boundary",
 		"NULL",
 	};
+	static const char * const hevc_decode_mode[] = {
+		"Slice-Based",
+		"Frame-Based",
+		NULL,
+	};
+	static const char * const hevc_start_code[] = {
+		"No Start Code",
+		"Annex B Start Code",
+		NULL,
+	};
 
 	switch (id) {
 	case V4L2_CID_MPEG_AUDIO_SAMPLING_FREQ:
@@ -687,7 +704,10 @@
 		return hevc_tier;
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
 		return hevc_loop_filter_mode;
-
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+		return hevc_decode_mode;
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+		return hevc_start_code;
 	default:
 		return NULL;
 	}
@@ -957,6 +977,11 @@
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
 	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
 	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
+	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
+	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
+	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* CAMERA controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -994,6 +1019,7 @@
 	case V4L2_CID_AUTO_FOCUS_RANGE:		return "Auto Focus, Range";
 	case V4L2_CID_PAN_SPEED:		return "Pan, Speed";
 	case V4L2_CID_TILT_SPEED:		return "Tilt, Speed";
+	case V4L2_CID_UNIT_CELL_SIZE:		return "Unit Cell Size";
 
 	/* FM Radio Modulator controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1265,6 +1291,8 @@
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
 	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
+	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
 		*type = V4L2_CTRL_TYPE_MENU;
 		break;
 	case V4L2_CID_LINK_FREQ:
@@ -1375,6 +1403,19 @@
 	case V4L2_CID_MPEG_VIDEO_VP8_FRAME_HEADER:
 		*type = V4L2_CTRL_TYPE_VP8_FRAME_HEADER;
 		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
+		*type = V4L2_CTRL_TYPE_HEVC_SPS;
+		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
+		*type = V4L2_CTRL_TYPE_HEVC_PPS;
+		break;
+	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
+		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
+		break;
+	case V4L2_CID_UNIT_CELL_SIZE:
+		*type = V4L2_CTRL_TYPE_AREA;
+		*flags |= V4L2_CTRL_FLAG_READ_ONLY;
+		break;
 	default:
 		*type = V4L2_CTRL_TYPE_INTEGER;
 		break;
@@ -1520,7 +1561,8 @@
 		if (ctrl->is_int)
 			return ptr1.p_s32[idx] == ptr2.p_s32[idx];
 		idx *= ctrl->elem_size;
-		return !memcmp(ptr1.p + idx, ptr2.p + idx, ctrl->elem_size);
+		return !memcmp(ptr1.p_const + idx, ptr2.p_const + idx,
+			       ctrl->elem_size);
 	}
 }
 
@@ -1530,7 +1572,10 @@
 	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	void *p = ptr.p + idx * ctrl->elem_size;
 
-	memset(p, 0, ctrl->elem_size);
+	if (ctrl->p_def.p_const)
+		memcpy(p, ctrl->p_def.p_const, ctrl->elem_size);
+	else
+		memset(p, 0, ctrl->elem_size);
 
 	/*
 	 * The cast is needed to get rid of a gcc warning complaining that
@@ -1672,7 +1717,12 @@
 {
 	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_area *area;
 	void *p = ptr.p + idx * ctrl->elem_size;
+	unsigned int i;
 
 	switch ((u32)ctrl->type) {
 	case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
@@ -1748,6 +1798,76 @@
 		zero_padding(p_vp8_frame_header->entropy_header);
 		zero_padding(p_vp8_frame_header->coder_state);
 		break;
+
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		p_hevc_sps = p;
+
+		if (!(p_hevc_sps->flags & V4L2_HEVC_SPS_FLAG_PCM_ENABLED)) {
+			p_hevc_sps->pcm_sample_bit_depth_luma_minus1 = 0;
+			p_hevc_sps->pcm_sample_bit_depth_chroma_minus1 = 0;
+			p_hevc_sps->log2_min_pcm_luma_coding_block_size_minus3 = 0;
+			p_hevc_sps->log2_diff_max_min_pcm_luma_coding_block_size = 0;
+		}
+
+		if (!(p_hevc_sps->flags &
+		      V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT))
+			p_hevc_sps->num_long_term_ref_pics_sps = 0;
+		break;
+
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		p_hevc_pps = p;
+
+		if (!(p_hevc_pps->flags &
+		      V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED))
+			p_hevc_pps->diff_cu_qp_delta_depth = 0;
+
+		if (!(p_hevc_pps->flags & V4L2_HEVC_PPS_FLAG_TILES_ENABLED)) {
+			p_hevc_pps->num_tile_columns_minus1 = 0;
+			p_hevc_pps->num_tile_rows_minus1 = 0;
+			memset(&p_hevc_pps->column_width_minus1, 0,
+			       sizeof(p_hevc_pps->column_width_minus1));
+			memset(&p_hevc_pps->row_height_minus1, 0,
+			       sizeof(p_hevc_pps->row_height_minus1));
+
+			p_hevc_pps->flags &=
+				~V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED;
+		}
+
+		if (p_hevc_pps->flags &
+		    V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER) {
+			p_hevc_pps->pps_beta_offset_div2 = 0;
+			p_hevc_pps->pps_tc_offset_div2 = 0;
+		}
+
+		zero_padding(*p_hevc_pps);
+		break;
+
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		p_hevc_slice_params = p;
+
+		if (p_hevc_slice_params->num_active_dpb_entries >
+		    V4L2_HEVC_DPB_ENTRIES_NUM_MAX)
+			return -EINVAL;
+
+		zero_padding(p_hevc_slice_params->pred_weight_table);
+
+		for (i = 0; i < p_hevc_slice_params->num_active_dpb_entries;
+		     i++) {
+			struct v4l2_hevc_dpb_entry *dpb_entry =
+				&p_hevc_slice_params->dpb[i];
+
+			zero_padding(*dpb_entry);
+		}
+
+		zero_padding(*p_hevc_slice_params);
+		break;
+
+	case V4L2_CTRL_TYPE_AREA:
+		area = p;
+		if (!area->width || !area->height)
+			return -EINVAL;
+		break;
+
 	default:
 		return -EINVAL;
 	}
@@ -1841,7 +1961,7 @@
 	u32 len;
 
 	if (ctrl->is_ptr && !ctrl->is_string)
-		return copy_to_user(c->ptr, ptr.p, c->size) ?
+		return copy_to_user(c->ptr, ptr.p_const, c->size) ?
 		       -EFAULT : 0;
 
 	switch (ctrl->type) {
@@ -1956,7 +2076,7 @@
 {
 	if (ctrl == NULL)
 		return;
-	memcpy(to.p, from.p, ctrl->elems * ctrl->elem_size);
+	memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
 }
 
 /* Copy the new value to the current value. */
@@ -2363,7 +2483,8 @@
 			s64 min, s64 max, u64 step, s64 def,
 			const u32 dims[V4L2_CTRL_MAX_DIMS], u32 elem_size,
 			u32 flags, const char * const *qmenu,
-			const s64 *qmenu_int, void *priv)
+			const s64 *qmenu_int, const union v4l2_ctrl_ptr p_def,
+			void *priv)
 {
 	struct v4l2_ctrl *ctrl;
 	unsigned sz_extra;
@@ -2430,6 +2551,18 @@
 	case V4L2_CTRL_TYPE_VP8_FRAME_HEADER:
 		elem_size = sizeof(struct v4l2_ctrl_vp8_frame_header);
 		break;
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_sps);
+		break;
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_pps);
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		elem_size = sizeof(struct v4l2_ctrl_hevc_slice_params);
+		break;
+	case V4L2_CTRL_TYPE_AREA:
+		elem_size = sizeof(struct v4l2_area);
+		break;
 	default:
 		if (type < V4L2_CTRL_COMPOUND_TYPES)
 			elem_size = sizeof(s32);
@@ -2469,6 +2602,9 @@
 		 is_array)
 		sz_extra += 2 * tot_ctrl_size;
 
+	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
+		sz_extra += elem_size;
+
 	ctrl = kvzalloc(sizeof(*ctrl) + sz_extra, GFP_KERNEL);
 	if (ctrl == NULL) {
 		handler_set_err(hdl, -ENOMEM);
@@ -2512,6 +2648,12 @@
 		ctrl->p_new.p = &ctrl->val;
 		ctrl->p_cur.p = &ctrl->cur.val;
 	}
+
+	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
+		ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
+		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
+	}
+
 	for (idx = 0; idx < elems; idx++) {
 		ctrl->type_ops->init(ctrl, idx, ctrl->p_cur);
 		ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
@@ -2563,7 +2705,7 @@
 			type, min, max,
 			is_menu ? cfg->menu_skip_mask : step, def,
 			cfg->dims, cfg->elem_size,
-			flags, qmenu, qmenu_int, priv);
+			flags, qmenu, qmenu_int, cfg->p_def, priv);
 	if (ctrl)
 		ctrl->is_private = cfg->is_private;
 	return ctrl;
@@ -2588,7 +2730,7 @@
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     min, max, step, def, NULL, 0,
-			     flags, NULL, NULL, NULL);
+			     flags, NULL, NULL, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std);
 
@@ -2621,7 +2763,7 @@
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, mask, def, NULL, 0,
-			     flags, qmenu, qmenu_int, NULL);
+			     flags, qmenu, qmenu_int, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu);
 
@@ -2653,11 +2795,32 @@
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, mask, def, NULL, 0,
-			     flags, qmenu, NULL, NULL);
+			     flags, qmenu, NULL, ptr_null, NULL);
 
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_std_menu_items);
 
+/* Helper function for standard compound controls */
+struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
+				const struct v4l2_ctrl_ops *ops, u32 id,
+				const union v4l2_ctrl_ptr p_def)
+{
+	const char *name;
+	enum v4l2_ctrl_type type;
+	u32 flags;
+	s64 min, max, step, def;
+
+	v4l2_ctrl_fill(id, &name, &type, &min, &max, &step, &def, &flags);
+	if (type < V4L2_CTRL_COMPOUND_TYPES) {
+		handler_set_err(hdl, -EINVAL);
+		return NULL;
+	}
+	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
+			     min, max, step, def, NULL, 0,
+			     flags, NULL, NULL, p_def, NULL);
+}
+EXPORT_SYMBOL(v4l2_ctrl_new_std_compound);
+
 /* Helper function for standard integer menu controls */
 struct v4l2_ctrl *v4l2_ctrl_new_int_menu(struct v4l2_ctrl_handler *hdl,
 			const struct v4l2_ctrl_ops *ops,
@@ -2678,7 +2841,7 @@
 	}
 	return v4l2_ctrl_new(hdl, ops, NULL, id, name, type,
 			     0, max, 0, def, NULL, 0,
-			     flags, NULL, qmenu_int, NULL);
+			     flags, NULL, qmenu_int, ptr_null, NULL);
 }
 EXPORT_SYMBOL(v4l2_ctrl_new_int_menu);
 
@@ -4097,6 +4260,18 @@
 }
 EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_string);
 
+int __v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+			    const struct v4l2_area *area)
+{
+	lockdep_assert_held(ctrl->handler->lock);
+
+	/* It's a driver bug if this happens. */
+	WARN_ON(ctrl->type != V4L2_CTRL_TYPE_AREA);
+	*ctrl->p_new.p_area = *area;
+	return set_ctrl(NULL, ctrl, 0);
+}
+EXPORT_SYMBOL(__v4l2_ctrl_s_ctrl_area);
+
 void v4l2_ctrl_request_complete(struct media_request *req,
 				struct v4l2_ctrl_handler *main_hdl)
 {
diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
index 4037689..da42d17 100644
--- a/drivers/media/v4l2-core/v4l2-dev.c
+++ b/drivers/media/v4l2-core/v4l2-dev.c
@@ -533,13 +533,23 @@
  */
 static void determine_valid_ioctls(struct video_device *vdev)
 {
+	const u32 vid_caps = V4L2_CAP_VIDEO_CAPTURE |
+			     V4L2_CAP_VIDEO_CAPTURE_MPLANE |
+			     V4L2_CAP_VIDEO_OUTPUT |
+			     V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+			     V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE;
+	const u32 meta_caps = V4L2_CAP_META_CAPTURE |
+			      V4L2_CAP_META_OUTPUT;
 	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
 	const struct v4l2_ioctl_ops *ops = vdev->ioctl_ops;
-	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER;
+	bool is_vid = vdev->vfl_type == VFL_TYPE_GRABBER &&
+		      (vdev->device_caps & vid_caps);
 	bool is_vbi = vdev->vfl_type == VFL_TYPE_VBI;
 	bool is_radio = vdev->vfl_type == VFL_TYPE_RADIO;
 	bool is_sdr = vdev->vfl_type == VFL_TYPE_SDR;
 	bool is_tch = vdev->vfl_type == VFL_TYPE_TOUCH;
+	bool is_meta = vdev->vfl_type == VFL_TYPE_GRABBER &&
+		       (vdev->device_caps & meta_caps);
 	bool is_rx = vdev->vfl_dir != VFL_DIR_TX;
 	bool is_tx = vdev->vfl_dir != VFL_DIR_RX;
 
@@ -571,8 +581,10 @@
 		set_bit(_IOC_NR(VIDIOC_TRY_EXT_CTRLS), valid_ioctls);
 	if (vdev->ctrl_handler || ops->vidioc_querymenu)
 		set_bit(_IOC_NR(VIDIOC_QUERYMENU), valid_ioctls);
-	SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
-	SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
+	if (!is_tch) {
+		SET_VALID_IOCTL(ops, VIDIOC_G_FREQUENCY, vidioc_g_frequency);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FREQUENCY, vidioc_s_frequency);
+	}
 	SET_VALID_IOCTL(ops, VIDIOC_LOG_STATUS, vidioc_log_status);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	set_bit(_IOC_NR(VIDIOC_DBG_G_CHIP_INFO), valid_ioctls);
@@ -586,40 +598,32 @@
 	if (ops->vidioc_enum_freq_bands || ops->vidioc_g_tuner || ops->vidioc_g_modulator)
 		set_bit(_IOC_NR(VIDIOC_ENUM_FREQ_BANDS), valid_ioctls);
 
-	if (is_vid || is_tch) {
-		/* video and metadata specific ioctls */
+	if (is_vid) {
+		/* video specific ioctls */
 		if ((is_rx && (ops->vidioc_enum_fmt_vid_cap ||
-			       ops->vidioc_enum_fmt_vid_overlay ||
-			       ops->vidioc_enum_fmt_meta_cap)) ||
-		    (is_tx && (ops->vidioc_enum_fmt_vid_out ||
-			       ops->vidioc_enum_fmt_meta_out)))
+			       ops->vidioc_enum_fmt_vid_overlay)) ||
+		    (is_tx && ops->vidioc_enum_fmt_vid_out))
 			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_g_fmt_vid_cap ||
 			       ops->vidioc_g_fmt_vid_cap_mplane ||
-			       ops->vidioc_g_fmt_vid_overlay ||
-			       ops->vidioc_g_fmt_meta_cap)) ||
+			       ops->vidioc_g_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_g_fmt_vid_out ||
 			       ops->vidioc_g_fmt_vid_out_mplane ||
-			       ops->vidioc_g_fmt_vid_out_overlay ||
-			       ops->vidioc_g_fmt_meta_out)))
+			       ops->vidioc_g_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_s_fmt_vid_cap ||
 			       ops->vidioc_s_fmt_vid_cap_mplane ||
-			       ops->vidioc_s_fmt_vid_overlay ||
-			       ops->vidioc_s_fmt_meta_cap)) ||
+			       ops->vidioc_s_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_s_fmt_vid_out ||
 			       ops->vidioc_s_fmt_vid_out_mplane ||
-			       ops->vidioc_s_fmt_vid_out_overlay ||
-			       ops->vidioc_s_fmt_meta_out)))
+			       ops->vidioc_s_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
 		if ((is_rx && (ops->vidioc_try_fmt_vid_cap ||
 			       ops->vidioc_try_fmt_vid_cap_mplane ||
-			       ops->vidioc_try_fmt_vid_overlay ||
-			       ops->vidioc_try_fmt_meta_cap)) ||
+			       ops->vidioc_try_fmt_vid_overlay)) ||
 		    (is_tx && (ops->vidioc_try_fmt_vid_out ||
 			       ops->vidioc_try_fmt_vid_out_mplane ||
-			       ops->vidioc_try_fmt_vid_out_overlay ||
-			       ops->vidioc_try_fmt_meta_out)))
+			       ops->vidioc_try_fmt_vid_out_overlay)))
 			 set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_OVERLAY, vidioc_overlay);
 		SET_VALID_IOCTL(ops, VIDIOC_G_FBUF, vidioc_g_fbuf);
@@ -641,7 +645,21 @@
 			set_bit(_IOC_NR(VIDIOC_S_CROP), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_G_SELECTION, vidioc_g_selection);
 		SET_VALID_IOCTL(ops, VIDIOC_S_SELECTION, vidioc_s_selection);
-	} else if (is_vbi) {
+	}
+	if (is_meta && is_rx) {
+		/* metadata capture specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_cap);
+	} else if (is_meta && is_tx) {
+		/* metadata output specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_meta_out);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_meta_out);
+	}
+	if (is_vbi) {
 		/* vbi specific ioctls */
 		if ((is_rx && (ops->vidioc_g_fmt_vbi_cap ||
 			       ops->vidioc_g_fmt_sliced_vbi_cap)) ||
@@ -659,30 +677,35 @@
 			       ops->vidioc_try_fmt_sliced_vbi_out)))
 			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_G_SLICED_VBI_CAP, vidioc_g_sliced_vbi_cap);
+	} else if (is_tch) {
+		/* touch specific ioctls */
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_vid_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMESIZES, vidioc_enum_framesizes);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FRAMEINTERVALS, vidioc_enum_frameintervals);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUMINPUT, vidioc_enum_input);
+		SET_VALID_IOCTL(ops, VIDIOC_G_INPUT, vidioc_g_input);
+		SET_VALID_IOCTL(ops, VIDIOC_S_INPUT, vidioc_s_input);
+		SET_VALID_IOCTL(ops, VIDIOC_G_PARM, vidioc_g_parm);
+		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
 	} else if (is_sdr && is_rx) {
 		/* SDR receiver specific ioctls */
-		if (ops->vidioc_enum_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
-		if (ops->vidioc_g_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
-		if (ops->vidioc_s_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
-		if (ops->vidioc_try_fmt_sdr_cap)
-			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_cap);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_cap);
 	} else if (is_sdr && is_tx) {
 		/* SDR transmitter specific ioctls */
-		if (ops->vidioc_enum_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_ENUM_FMT), valid_ioctls);
-		if (ops->vidioc_g_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_G_FMT), valid_ioctls);
-		if (ops->vidioc_s_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_S_FMT), valid_ioctls);
-		if (ops->vidioc_try_fmt_sdr_out)
-			set_bit(_IOC_NR(VIDIOC_TRY_FMT), valid_ioctls);
+		SET_VALID_IOCTL(ops, VIDIOC_ENUM_FMT, vidioc_enum_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_G_FMT, vidioc_g_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_S_FMT, vidioc_s_fmt_sdr_out);
+		SET_VALID_IOCTL(ops, VIDIOC_TRY_FMT, vidioc_try_fmt_sdr_out);
 	}
 
-	if (is_vid || is_vbi || is_sdr || is_tch) {
-		/* ioctls valid for video, metadata, vbi or sdr */
+	if (is_vid || is_vbi || is_sdr || is_tch || is_meta) {
+		/* ioctls valid for video, vbi, sdr, touch and metadata */
 		SET_VALID_IOCTL(ops, VIDIOC_REQBUFS, vidioc_reqbufs);
 		SET_VALID_IOCTL(ops, VIDIOC_QUERYBUF, vidioc_querybuf);
 		SET_VALID_IOCTL(ops, VIDIOC_QBUF, vidioc_qbuf);
@@ -694,8 +717,8 @@
 		SET_VALID_IOCTL(ops, VIDIOC_STREAMOFF, vidioc_streamoff);
 	}
 
-	if (is_vid || is_vbi || is_tch) {
-		/* ioctls valid for video or vbi */
+	if (is_vid || is_vbi || is_meta) {
+		/* ioctls valid for video, vbi and metadata */
 		if (ops->vidioc_s_std)
 			set_bit(_IOC_NR(VIDIOC_ENUMSTD), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_S_STD, vidioc_s_std);
@@ -719,8 +742,7 @@
 			SET_VALID_IOCTL(ops, VIDIOC_G_AUDOUT, vidioc_g_audout);
 			SET_VALID_IOCTL(ops, VIDIOC_S_AUDOUT, vidioc_s_audout);
 		}
-		if (ops->vidioc_g_parm || (vdev->vfl_type == VFL_TYPE_GRABBER &&
-					ops->vidioc_g_std))
+		if (ops->vidioc_g_parm || ops->vidioc_g_std)
 			set_bit(_IOC_NR(VIDIOC_G_PARM), valid_ioctls);
 		SET_VALID_IOCTL(ops, VIDIOC_S_PARM, vidioc_s_parm);
 		SET_VALID_IOCTL(ops, VIDIOC_S_DV_TIMINGS, vidioc_s_dv_timings);
@@ -734,7 +756,7 @@
 		SET_VALID_IOCTL(ops, VIDIOC_G_MODULATOR, vidioc_g_modulator);
 		SET_VALID_IOCTL(ops, VIDIOC_S_MODULATOR, vidioc_s_modulator);
 	}
-	if (is_rx) {
+	if (is_rx && !is_tch) {
 		/* receiver only ioctls */
 		SET_VALID_IOCTL(ops, VIDIOC_G_TUNER, vidioc_g_tuner);
 		SET_VALID_IOCTL(ops, VIDIOC_S_TUNER, vidioc_s_tuner);
diff --git a/drivers/media/v4l2-core/v4l2-dv-timings.c b/drivers/media/v4l2-core/v4l2-dv-timings.c
index 60454e1..af48705 100644
--- a/drivers/media/v4l2-core/v4l2-dv-timings.c
+++ b/drivers/media/v4l2-core/v4l2-dv-timings.c
@@ -293,7 +293,7 @@
 	if (prefix == NULL)
 		prefix = "";
 
-	pr_info("%s: %s%ux%u%s%u.%u (%ux%u)\n", dev_prefix, prefix,
+	pr_info("%s: %s%ux%u%s%u.%02u (%ux%u)\n", dev_prefix, prefix,
 		bt->width, bt->height, bt->interlaced ? "i" : "p",
 		fps / 100, fps % 100, htot, vtot);
 
@@ -757,7 +757,7 @@
 	pix_clk = pix_clk / GTF_PXL_CLK_GRAN * GTF_PXL_CLK_GRAN;
 
 	hsync = (frame_width * 8 + 50) / 100;
-	hsync = ((hsync + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN) * GTF_CELL_GRAN;
+	hsync = DIV_ROUND_CLOSEST(hsync, GTF_CELL_GRAN) * GTF_CELL_GRAN;
 
 	h_fp = h_blank / 2 - hsync;
 
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 98633fa..b306d72 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -950,12 +950,22 @@
 
 static int check_fmt(struct file *file, enum v4l2_buf_type type)
 {
+	const u32 vid_caps = V4L2_CAP_VIDEO_CAPTURE |
+			     V4L2_CAP_VIDEO_CAPTURE_MPLANE |
+			     V4L2_CAP_VIDEO_OUTPUT |
+			     V4L2_CAP_VIDEO_OUTPUT_MPLANE |
+			     V4L2_CAP_VIDEO_M2M | V4L2_CAP_VIDEO_M2M_MPLANE;
+	const u32 meta_caps = V4L2_CAP_META_CAPTURE |
+			      V4L2_CAP_META_OUTPUT;
 	struct video_device *vfd = video_devdata(file);
 	const struct v4l2_ioctl_ops *ops = vfd->ioctl_ops;
-	bool is_vid = vfd->vfl_type == VFL_TYPE_GRABBER;
+	bool is_vid = vfd->vfl_type == VFL_TYPE_GRABBER &&
+		      (vfd->device_caps & vid_caps);
 	bool is_vbi = vfd->vfl_type == VFL_TYPE_VBI;
 	bool is_sdr = vfd->vfl_type == VFL_TYPE_SDR;
 	bool is_tch = vfd->vfl_type == VFL_TYPE_TOUCH;
+	bool is_meta = vfd->vfl_type == VFL_TYPE_GRABBER &&
+		       (vfd->device_caps & meta_caps);
 	bool is_rx = vfd->vfl_dir != VFL_DIR_TX;
 	bool is_tx = vfd->vfl_dir != VFL_DIR_RX;
 
@@ -1014,11 +1024,11 @@
 			return 0;
 		break;
 	case V4L2_BUF_TYPE_META_CAPTURE:
-		if (is_vid && is_rx && ops->vidioc_g_fmt_meta_cap)
+		if (is_meta && is_rx && ops->vidioc_g_fmt_meta_cap)
 			return 0;
 		break;
 	case V4L2_BUF_TYPE_META_OUTPUT:
-		if (is_vid && is_tx && ops->vidioc_g_fmt_meta_out)
+		if (is_meta && is_tx && ops->vidioc_g_fmt_meta_out)
 			return 0;
 		break;
 	default:
@@ -1374,6 +1384,7 @@
 		case V4L2_PIX_FMT_VP8_FRAME:    descr = "VP8 Frame"; break;
 		case V4L2_PIX_FMT_VP9:		descr = "VP9"; break;
 		case V4L2_PIX_FMT_HEVC:		descr = "HEVC"; break; /* aka H.265 */
+		case V4L2_PIX_FMT_HEVC_SLICE:	descr = "HEVC Parsed Slice Data"; break;
 		case V4L2_PIX_FMT_FWHT:		descr = "FWHT"; break; /* used in vicodec */
 		case V4L2_PIX_FMT_FWHT_STATELESS:	descr = "FWHT Stateless"; break; /* used in vicodec */
 		case V4L2_PIX_FMT_CPIA1:	descr = "GSPCA CPiA YUV"; break;
@@ -2658,7 +2669,7 @@
 /* Zero struct from after the field to the end */
 #define INFO_FL_CLEAR(v4l2_struct, field)			\
 	((offsetof(struct v4l2_struct, field) +			\
-	  sizeof(((struct v4l2_struct *)0)->field)) << 16)
+	  FIELD_SIZEOF(struct v4l2_struct, field)) << 16)
 #define INFO_FL_CLEAR_MASK	(_IOC_SIZEMASK << 16)
 
 #define DEFINE_V4L_STUB_FUNC(_vidioc)				\
diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c
index 639dc8d..3641bc6 100644
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
@@ -284,7 +284,8 @@
 static void __v4l2_m2m_try_queue(struct v4l2_m2m_dev *m2m_dev,
 				 struct v4l2_m2m_ctx *m2m_ctx)
 {
-	unsigned long flags_job, flags_out, flags_cap;
+	unsigned long flags_job;
+	struct vb2_v4l2_buffer *dst, *src;
 
 	dprintk("Trying to schedule a job for m2m_ctx: %p\n", m2m_ctx);
 
@@ -307,20 +308,42 @@
 		goto job_unlock;
 	}
 
-	spin_lock_irqsave(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
-	if (list_empty(&m2m_ctx->out_q_ctx.rdy_queue)
-	    && !m2m_ctx->out_q_ctx.buffered) {
+	src = v4l2_m2m_next_src_buf(m2m_ctx);
+	dst = v4l2_m2m_next_dst_buf(m2m_ctx);
+	if (!src && !m2m_ctx->out_q_ctx.buffered) {
 		dprintk("No input buffers available\n");
-		goto out_unlock;
+		goto job_unlock;
 	}
-	spin_lock_irqsave(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-	if (list_empty(&m2m_ctx->cap_q_ctx.rdy_queue)
-	    && !m2m_ctx->cap_q_ctx.buffered) {
+	if (!dst && !m2m_ctx->cap_q_ctx.buffered) {
 		dprintk("No output buffers available\n");
-		goto cap_unlock;
+		goto job_unlock;
 	}
-	spin_unlock_irqrestore(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-	spin_unlock_irqrestore(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
+
+	m2m_ctx->new_frame = true;
+
+	if (src && dst && dst->is_held &&
+	    dst->vb2_buf.copied_timestamp &&
+	    dst->vb2_buf.timestamp != src->vb2_buf.timestamp) {
+		dst->is_held = false;
+		v4l2_m2m_dst_buf_remove(m2m_ctx);
+		v4l2_m2m_buf_done(dst, VB2_BUF_STATE_DONE);
+		dst = v4l2_m2m_next_dst_buf(m2m_ctx);
+
+		if (!dst && !m2m_ctx->cap_q_ctx.buffered) {
+			dprintk("No output buffers available after returning held buffer\n");
+			goto job_unlock;
+		}
+	}
+
+	if (src && dst && (m2m_ctx->out_q_ctx.q.subsystem_flags &
+			   VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF))
+		m2m_ctx->new_frame = !dst->vb2_buf.copied_timestamp ||
+			dst->vb2_buf.timestamp != src->vb2_buf.timestamp;
+
+	if (m2m_ctx->has_stopped) {
+		dprintk("Device has stopped\n");
+		goto job_unlock;
+	}
 
 	if (m2m_dev->m2m_ops->job_ready
 		&& (!m2m_dev->m2m_ops->job_ready(m2m_ctx->priv))) {
@@ -331,13 +354,6 @@
 	list_add_tail(&m2m_ctx->queue, &m2m_dev->job_queue);
 	m2m_ctx->job_flags |= TRANS_QUEUED;
 
-	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags_job);
-	return;
-
-cap_unlock:
-	spin_unlock_irqrestore(&m2m_ctx->cap_q_ctx.rdy_spinlock, flags_cap);
-out_unlock:
-	spin_unlock_irqrestore(&m2m_ctx->out_q_ctx.rdy_spinlock, flags_out);
 job_unlock:
 	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags_job);
 }
@@ -412,37 +428,97 @@
 	}
 }
 
-void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
-			 struct v4l2_m2m_ctx *m2m_ctx)
+/*
+ * Schedule the next job, called from v4l2_m2m_job_finish() or
+ * v4l2_m2m_buf_done_and_job_finish().
+ */
+static void v4l2_m2m_schedule_next_job(struct v4l2_m2m_dev *m2m_dev,
+				       struct v4l2_m2m_ctx *m2m_ctx)
 {
-	unsigned long flags;
+	/*
+	 * This instance might have more buffers ready, but since we do not
+	 * allow more than one job on the job_queue per instance, each has
+	 * to be scheduled separately after the previous one finishes.
+	 */
+	__v4l2_m2m_try_queue(m2m_dev, m2m_ctx);
 
-	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	/*
+	 * We might be running in atomic context,
+	 * but the job must be run in non-atomic context.
+	 */
+	schedule_work(&m2m_dev->job_work);
+}
+
+/*
+ * Assumes job_spinlock is held, called from v4l2_m2m_job_finish() or
+ * v4l2_m2m_buf_done_and_job_finish().
+ */
+static bool _v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				 struct v4l2_m2m_ctx *m2m_ctx)
+{
 	if (!m2m_dev->curr_ctx || m2m_dev->curr_ctx != m2m_ctx) {
-		spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
 		dprintk("Called by an instance not currently running\n");
-		return;
+		return false;
 	}
 
 	list_del(&m2m_dev->curr_ctx->queue);
 	m2m_dev->curr_ctx->job_flags &= ~(TRANS_QUEUED | TRANS_RUNNING);
 	wake_up(&m2m_dev->curr_ctx->finished);
 	m2m_dev->curr_ctx = NULL;
+	return true;
+}
 
+void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
+			 struct v4l2_m2m_ctx *m2m_ctx)
+{
+	unsigned long flags;
+	bool schedule_next;
+
+	/*
+	 * This function should not be used for drivers that support
+	 * holding capture buffers. Those should use
+	 * v4l2_m2m_buf_done_and_job_finish() instead.
+	 */
+	WARN_ON(m2m_ctx->out_q_ctx.q.subsystem_flags &
+		VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF);
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	schedule_next = _v4l2_m2m_job_finish(m2m_dev, m2m_ctx);
 	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
 
-	/* This instance might have more buffers ready, but since we do not
-	 * allow more than one job on the job_queue per instance, each has
-	 * to be scheduled separately after the previous one finishes. */
-	__v4l2_m2m_try_queue(m2m_dev, m2m_ctx);
-
-	/* We might be running in atomic context,
-	 * but the job must be run in non-atomic context.
-	 */
-	schedule_work(&m2m_dev->job_work);
+	if (schedule_next)
+		v4l2_m2m_schedule_next_job(m2m_dev, m2m_ctx);
 }
 EXPORT_SYMBOL(v4l2_m2m_job_finish);
 
+void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				      struct v4l2_m2m_ctx *m2m_ctx,
+				      enum vb2_buffer_state state)
+{
+	struct vb2_v4l2_buffer *src_buf, *dst_buf;
+	bool schedule_next = false;
+	unsigned long flags;
+
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	src_buf = v4l2_m2m_src_buf_remove(m2m_ctx);
+	dst_buf = v4l2_m2m_next_dst_buf(m2m_ctx);
+
+	if (WARN_ON(!src_buf || !dst_buf))
+		goto unlock;
+	v4l2_m2m_buf_done(src_buf, state);
+	dst_buf->is_held = src_buf->flags & V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
+	if (!dst_buf->is_held) {
+		v4l2_m2m_dst_buf_remove(m2m_ctx);
+		v4l2_m2m_buf_done(dst_buf, state);
+	}
+	schedule_next = _v4l2_m2m_job_finish(m2m_dev, m2m_ctx);
+unlock:
+	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
+
+	if (schedule_next)
+		v4l2_m2m_schedule_next_job(m2m_dev, m2m_ctx);
+}
+EXPORT_SYMBOL(v4l2_m2m_buf_done_and_job_finish);
+
 int v4l2_m2m_reqbufs(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 		     struct v4l2_requestbuffers *reqbufs)
 {
@@ -485,6 +561,140 @@
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_querybuf);
 
+/*
+ * This will add the LAST flag and mark the buffer management
+ * state as stopped.
+ * This is called when the last capture buffer must be flagged as LAST
+ * in draining mode from the encoder/decoder driver buf_queue() callback
+ * or from v4l2_update_last_buf_state() when a capture buffer is available.
+ */
+void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx,
+			       struct vb2_v4l2_buffer *vbuf)
+{
+	vbuf->flags |= V4L2_BUF_FLAG_LAST;
+	vb2_buffer_done(&vbuf->vb2_buf, VB2_BUF_STATE_DONE);
+
+	v4l2_m2m_mark_stopped(m2m_ctx);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_last_buffer_done);
+
+/* When stop command is issued, update buffer management state */
+static int v4l2_update_last_buf_state(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	struct vb2_v4l2_buffer *next_dst_buf;
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		return 0;
+
+	m2m_ctx->last_src_buf = v4l2_m2m_last_src_buf(m2m_ctx);
+	m2m_ctx->is_draining = true;
+
+	/*
+	 * The processing of the last output buffer queued before
+	 * the STOP command is expected to mark the buffer management
+	 * state as stopped with v4l2_m2m_mark_stopped().
+	 */
+	if (m2m_ctx->last_src_buf)
+		return 0;
+
+	/*
+	 * In case the output queue is empty, try to mark the last capture
+	 * buffer as LAST.
+	 */
+	next_dst_buf = v4l2_m2m_dst_buf_remove(m2m_ctx);
+	if (!next_dst_buf) {
+		/*
+		 * Wait for the next queued one in encoder/decoder driver
+		 * buf_queue() callback using the v4l2_m2m_dst_buf_is_last()
+		 * helper or in v4l2_m2m_qbuf() if encoder/decoder is not yet
+		 * streaming.
+		 */
+		m2m_ctx->next_buf_last = true;
+		return 0;
+	}
+
+	v4l2_m2m_last_buffer_done(m2m_ctx, next_dst_buf);
+
+	return 0;
+}
+
+/*
+ * Updates the encoding/decoding buffer management state, should
+ * be called from encoder/decoder drivers start_streaming()
+ */
+void v4l2_m2m_update_start_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					   struct vb2_queue *q)
+{
+	/* If start streaming again, untag the last output buffer */
+	if (V4L2_TYPE_IS_OUTPUT(q->type))
+		m2m_ctx->last_src_buf = NULL;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_update_start_streaming_state);
+
+/*
+ * Updates the encoding/decoding buffer management state, should
+ * be called from encoder/decoder driver stop_streaming()
+ */
+void v4l2_m2m_update_stop_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					  struct vb2_queue *q)
+{
+	if (V4L2_TYPE_IS_OUTPUT(q->type)) {
+		/*
+		 * If in draining state, either mark next dst buffer as
+		 * done or flag next one to be marked as done either
+		 * in encoder/decoder driver buf_queue() callback using
+		 * the v4l2_m2m_dst_buf_is_last() helper or in v4l2_m2m_qbuf()
+		 * if encoder/decoder is not yet streaming
+		 */
+		if (m2m_ctx->is_draining) {
+			struct vb2_v4l2_buffer *next_dst_buf;
+
+			m2m_ctx->last_src_buf = NULL;
+			next_dst_buf = v4l2_m2m_dst_buf_remove(m2m_ctx);
+			if (!next_dst_buf)
+				m2m_ctx->next_buf_last = true;
+			else
+				v4l2_m2m_last_buffer_done(m2m_ctx,
+							  next_dst_buf);
+		}
+	} else {
+		v4l2_m2m_clear_state(m2m_ctx);
+	}
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_update_stop_streaming_state);
+
+static void v4l2_m2m_force_last_buf_done(struct v4l2_m2m_ctx *m2m_ctx,
+					 struct vb2_queue *q)
+{
+	struct vb2_buffer *vb;
+	struct vb2_v4l2_buffer *vbuf;
+	unsigned int i;
+
+	if (WARN_ON(q->is_output))
+		return;
+	if (list_empty(&q->queued_list))
+		return;
+
+	vb = list_first_entry(&q->queued_list, struct vb2_buffer, queued_entry);
+	for (i = 0; i < vb->num_planes; i++)
+		vb2_set_plane_payload(vb, i, 0);
+
+	/*
+	 * Since the buffer hasn't been queued to the ready queue,
+	 * mark is active and owned before marking it LAST and DONE
+	 */
+	vb->state = VB2_BUF_STATE_ACTIVE;
+	atomic_inc(&q->owned_by_drv_count);
+
+	vbuf = to_vb2_v4l2_buffer(vb);
+	vbuf->field = V4L2_FIELD_NONE;
+
+	v4l2_m2m_last_buffer_done(m2m_ctx, vbuf);
+}
+
 int v4l2_m2m_qbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
 		  struct v4l2_buffer *buf)
 {
@@ -499,11 +709,25 @@
 			__func__);
 		return -EPERM;
 	}
+
 	ret = vb2_qbuf(vq, vdev->v4l2_dev->mdev, buf);
-	if (!ret && !(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
+	if (ret)
+		return ret;
+
+	/*
+	 * If the capture queue is streaming, but streaming hasn't started
+	 * on the device, but was asked to stop, mark the previously queued
+	 * buffer as DONE with LAST flag since it won't be queued on the
+	 * device.
+	 */
+	if (!V4L2_TYPE_IS_OUTPUT(vq->type) &&
+	    vb2_is_streaming(vq) && !vb2_start_streaming_called(vq) &&
+	   (v4l2_m2m_has_stopped(m2m_ctx) || v4l2_m2m_dst_buf_is_last(m2m_ctx)))
+		v4l2_m2m_force_last_buf_done(m2m_ctx, vq);
+	else if (!(buf->flags & V4L2_BUF_FLAG_IN_REQUEST))
 		v4l2_m2m_try_schedule(m2m_ctx);
 
-	return ret;
+	return 0;
 }
 EXPORT_SYMBOL_GPL(v4l2_m2m_qbuf);
 
@@ -1153,6 +1377,123 @@
 EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_try_decoder_cmd);
 
 /*
+ * Updates the encoding state on ENC_CMD_STOP/ENC_CMD_START
+ * Should be called from the encoder driver encoder_cmd() callback
+ */
+int v4l2_m2m_encoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_encoder_cmd *ec)
+{
+	if (ec->cmd != V4L2_ENC_CMD_STOP && ec->cmd != V4L2_ENC_CMD_START)
+		return -EINVAL;
+
+	if (ec->cmd == V4L2_ENC_CMD_STOP)
+		return v4l2_update_last_buf_state(m2m_ctx);
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		m2m_ctx->has_stopped = false;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_encoder_cmd);
+
+/*
+ * Updates the decoding state on DEC_CMD_STOP/DEC_CMD_START
+ * Should be called from the decoder driver decoder_cmd() callback
+ */
+int v4l2_m2m_decoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_decoder_cmd *dc)
+{
+	if (dc->cmd != V4L2_DEC_CMD_STOP && dc->cmd != V4L2_DEC_CMD_START)
+		return -EINVAL;
+
+	if (dc->cmd == V4L2_DEC_CMD_STOP)
+		return v4l2_update_last_buf_state(m2m_ctx);
+
+	if (m2m_ctx->is_draining)
+		return -EBUSY;
+
+	if (m2m_ctx->has_stopped)
+		m2m_ctx->has_stopped = false;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_decoder_cmd);
+
+int v4l2_m2m_ioctl_encoder_cmd(struct file *file, void *priv,
+			       struct v4l2_encoder_cmd *ec)
+{
+	struct v4l2_fh *fh = file->private_data;
+
+	return v4l2_m2m_encoder_cmd(file, fh->m2m_ctx, ec);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_encoder_cmd);
+
+int v4l2_m2m_ioctl_decoder_cmd(struct file *file, void *priv,
+			       struct v4l2_decoder_cmd *dc)
+{
+	struct v4l2_fh *fh = file->private_data;
+
+	return v4l2_m2m_decoder_cmd(file, fh->m2m_ctx, dc);
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_decoder_cmd);
+
+int v4l2_m2m_ioctl_stateless_try_decoder_cmd(struct file *file, void *fh,
+					     struct v4l2_decoder_cmd *dc)
+{
+	if (dc->cmd != V4L2_DEC_CMD_FLUSH)
+		return -EINVAL;
+
+	dc->flags = 0;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_stateless_try_decoder_cmd);
+
+int v4l2_m2m_ioctl_stateless_decoder_cmd(struct file *file, void *priv,
+					 struct v4l2_decoder_cmd *dc)
+{
+	struct v4l2_fh *fh = file->private_data;
+	struct vb2_v4l2_buffer *out_vb, *cap_vb;
+	struct v4l2_m2m_dev *m2m_dev = fh->m2m_ctx->m2m_dev;
+	unsigned long flags;
+	int ret;
+
+	ret = v4l2_m2m_ioctl_stateless_try_decoder_cmd(file, priv, dc);
+	if (ret < 0)
+		return ret;
+
+	spin_lock_irqsave(&m2m_dev->job_spinlock, flags);
+	out_vb = v4l2_m2m_last_src_buf(fh->m2m_ctx);
+	cap_vb = v4l2_m2m_last_dst_buf(fh->m2m_ctx);
+
+	/*
+	 * If there is an out buffer pending, then clear any HOLD flag.
+	 *
+	 * By clearing this flag we ensure that when this output
+	 * buffer is processed any held capture buffer will be released.
+	 */
+	if (out_vb) {
+		out_vb->flags &= ~V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
+	} else if (cap_vb && cap_vb->is_held) {
+		/*
+		 * If there were no output buffers, but there is a
+		 * capture buffer that is held, then release that
+		 * buffer.
+		 */
+		cap_vb->is_held = false;
+		v4l2_m2m_dst_buf_remove(fh->m2m_ctx);
+		v4l2_m2m_buf_done(cap_vb, VB2_BUF_STATE_DONE);
+	}
+	spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(v4l2_m2m_ioctl_stateless_decoder_cmd);
+
+/*
  * v4l2_file_operations helpers. It is assumed here same lock is used
  * for the output and the capture buffer queue.
  */
diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c
index 20529ff..bb502f4 100644
--- a/drivers/mfd/sprd-sc27xx-spi.c
+++ b/drivers/mfd/sprd-sc27xx-spi.c
@@ -10,6 +10,7 @@
 #include <linux/of_device.h>
 #include <linux/regmap.h>
 #include <linux/spi/spi.h>
+#include <uapi/linux/usb/charger.h>
 
 #define SPRD_PMIC_INT_MASK_STATUS	0x0
 #define SPRD_PMIC_INT_RAW_STATUS	0x4
@@ -17,6 +18,16 @@
 
 #define SPRD_SC2731_IRQ_BASE		0x140
 #define SPRD_SC2731_IRQ_NUMS		16
+#define SPRD_SC2731_CHG_DET		0xedc
+
+/* PMIC charger detection definition */
+#define SPRD_PMIC_CHG_DET_DELAY_US	200000
+#define SPRD_PMIC_CHG_DET_TIMEOUT	2000000
+#define SPRD_PMIC_CHG_DET_DONE		BIT(11)
+#define SPRD_PMIC_SDP_TYPE		BIT(7)
+#define SPRD_PMIC_DCP_TYPE		BIT(6)
+#define SPRD_PMIC_CDP_TYPE		BIT(5)
+#define SPRD_PMIC_CHG_TYPE_MASK		GENMASK(7, 5)
 
 struct sprd_pmic {
 	struct regmap *regmap;
@@ -24,12 +35,14 @@
 	struct regmap_irq *irqs;
 	struct regmap_irq_chip irq_chip;
 	struct regmap_irq_chip_data *irq_data;
+	const struct sprd_pmic_data *pdata;
 	int irq;
 };
 
 struct sprd_pmic_data {
 	u32 irq_base;
 	u32 num_irqs;
+	u32 charger_det;
 };
 
 /*
@@ -40,8 +53,46 @@
 static const struct sprd_pmic_data sc2731_data = {
 	.irq_base = SPRD_SC2731_IRQ_BASE,
 	.num_irqs = SPRD_SC2731_IRQ_NUMS,
+	.charger_det = SPRD_SC2731_CHG_DET,
 };
 
+enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev)
+{
+	struct spi_device *spi = to_spi_device(dev);
+	struct sprd_pmic *ddata = spi_get_drvdata(spi);
+	const struct sprd_pmic_data *pdata = ddata->pdata;
+	enum usb_charger_type type;
+	u32 val;
+	int ret;
+
+	ret = regmap_read_poll_timeout(ddata->regmap, pdata->charger_det, val,
+				       (val & SPRD_PMIC_CHG_DET_DONE),
+				       SPRD_PMIC_CHG_DET_DELAY_US,
+				       SPRD_PMIC_CHG_DET_TIMEOUT);
+	if (ret) {
+		dev_err(&spi->dev, "failed to detect charger type\n");
+		return UNKNOWN_TYPE;
+	}
+
+	switch (val & SPRD_PMIC_CHG_TYPE_MASK) {
+	case SPRD_PMIC_CDP_TYPE:
+		type = CDP_TYPE;
+		break;
+	case SPRD_PMIC_DCP_TYPE:
+		type = DCP_TYPE;
+		break;
+	case SPRD_PMIC_SDP_TYPE:
+		type = SDP_TYPE;
+		break;
+	default:
+		type = UNKNOWN_TYPE;
+		break;
+	}
+
+	return type;
+}
+EXPORT_SYMBOL_GPL(sprd_pmic_detect_charger_type);
+
 static const struct mfd_cell sprd_pmic_devs[] = {
 	{
 		.name = "sc27xx-wdt",
@@ -181,6 +232,7 @@
 	spi_set_drvdata(spi, ddata);
 	ddata->dev = &spi->dev;
 	ddata->irq = spi->irq;
+	ddata->pdata = pdata;
 
 	ddata->irq_chip.name = dev_name(&spi->dev);
 	ddata->irq_chip.status_base =
diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c
index 6607232..a928c5d 100644
--- a/drivers/mfd/syscon.c
+++ b/drivers/mfd/syscon.c
@@ -225,6 +225,35 @@
 }
 EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_phandle);
 
+struct regmap *syscon_regmap_lookup_by_phandle_args(struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args)
+{
+	struct device_node *syscon_np;
+	struct of_phandle_args args;
+	struct regmap *regmap;
+	unsigned int index;
+	int rc;
+
+	rc = of_parse_phandle_with_fixed_args(np, property, arg_count,
+			0, &args);
+	if (rc)
+		return ERR_PTR(rc);
+
+	syscon_np = args.np;
+	if (!syscon_np)
+		return ERR_PTR(-ENODEV);
+
+	regmap = syscon_node_to_regmap(syscon_np);
+	for (index = 0; index < arg_count; index++)
+		out_args[index] = args.args[index];
+	of_node_put(syscon_np);
+
+	return regmap;
+}
+EXPORT_SYMBOL_GPL(syscon_regmap_lookup_by_phandle_args);
+
 static int syscon_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index c55b637..ff0b8b0 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -458,6 +458,21 @@
 	tristate
 	default MISC_RTSX_PCI || MISC_RTSX_USB
 
+config UID_SYS_STATS
+	bool "Per-UID statistics"
+	depends on PROFILING && TASK_XACCT && TASK_IO_ACCOUNTING
+	help
+	  Per UID based cpu time statistics exported to /proc/uid_cputime
+	  Per UID based io statistics exported to /proc/uid_io
+	  Per UID based procstat control in /proc/uid_procstat
+
+config UID_SYS_STATS_DEBUG
+	bool "Per-TASK statistics"
+	depends on UID_SYS_STATS
+	default n
+	help
+	  Per TASK based io statistics exported to /proc/uid_io
+
 config PVPANIC
 	tristate "pvpanic device support"
 	depends on HAS_IOMEM && (ACPI || OF)
@@ -466,6 +481,12 @@
 	  a paravirtualized device provided by QEMU; it lets a virtual machine
 	  (guest) communicate panic events to the host.
 
+config HISI_HIKEY_USB
+	tristate "USB functionality of HiSilicon Hikey Platform"
+	depends on OF && GPIOLIB
+	help
+	  If you say yes here you get support for usb functionality of HiSilicon Hikey Platform.
+
 source "drivers/misc/c2port/Kconfig"
 source "drivers/misc/eeprom/Kconfig"
 source "drivers/misc/cb710/Kconfig"
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index c1860d3..bb5edea 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -57,3 +57,5 @@
 obj-$(CONFIG_PVPANIC)   	+= pvpanic.o
 obj-$(CONFIG_HABANA_AI)		+= habanalabs/
 obj-$(CONFIG_XILINX_SDFEC)	+= xilinx_sdfec.o
+obj-$(CONFIG_UID_SYS_STATS)	+= uid_sys_stats.o
+obj-$(CONFIG_HISI_HIKEY_USB)	+= hisi_hikey_usb.o
diff --git a/drivers/misc/hisi_hikey_usb.c b/drivers/misc/hisi_hikey_usb.c
new file mode 100644
index 0000000..32015bc
--- /dev/null
+++ b/drivers/misc/hisi_hikey_usb.c
@@ -0,0 +1,178 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Support for usb functionality of Hikey series boards
+ * based on Hisilicon Kirin Soc.
+ *
+ * Copyright (C) 2017-2018 Hilisicon Electronics Co., Ltd.
+ *		http://www.huawei.com
+ *
+ * Authors: Yu Chen <chenyu56@huawei.com>
+ */
+
+#include <linux/gpio/consumer.h>
+#include <linux/kernel.h>
+#include <linux/mod_devicetable.h>
+#include <linux/module.h>
+#include <linux/notifier.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/slab.h>
+#include <linux/usb/role.h>
+
+#define DEVICE_DRIVER_NAME "hisi_hikey_usb"
+
+#define HUB_VBUS_POWER_ON 1
+#define HUB_VBUS_POWER_OFF 0
+#define USB_SWITCH_TO_HUB 1
+#define USB_SWITCH_TO_TYPEC 0
+#define TYPEC_VBUS_POWER_ON 1
+#define TYPEC_VBUS_POWER_OFF 0
+
+struct hisi_hikey_usb {
+	struct gpio_desc *otg_switch;
+	struct gpio_desc *typec_vbus;
+	struct gpio_desc *hub_vbus;
+
+	struct usb_role_switch *hub_role_sw;
+	struct usb_role_switch *dev_role_sw;
+	struct notifier_block nb;
+};
+
+static void hub_power_ctrl(struct hisi_hikey_usb *hisi_hikey_usb, int value)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->hub_vbus, value);
+}
+
+static void usb_switch_ctrl(struct hisi_hikey_usb *hisi_hikey_usb,
+			    int switch_to)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->otg_switch, switch_to);
+}
+
+static void usb_typec_power_ctrl(struct hisi_hikey_usb *hisi_hikey_usb,
+				 int value)
+{
+	gpiod_set_value_cansleep(hisi_hikey_usb->typec_vbus, value);
+}
+
+static int hub_usb_role_switch_set(struct device *dev, enum usb_role role)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = dev_get_drvdata(dev);
+
+	if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw)
+		return -EINVAL;
+
+	switch (role) {
+	case USB_ROLE_NONE:
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_HUB);
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_ON);
+		break;
+	case USB_ROLE_HOST:
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_TYPEC);
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_ON);
+		break;
+	case USB_ROLE_DEVICE:
+		hub_power_ctrl(hisi_hikey_usb, HUB_VBUS_POWER_OFF);
+		usb_typec_power_ctrl(hisi_hikey_usb, TYPEC_VBUS_POWER_OFF);
+		usb_switch_ctrl(hisi_hikey_usb, USB_SWITCH_TO_TYPEC);
+		break;
+	default:
+		break;
+	}
+
+	return usb_role_switch_set_role(hisi_hikey_usb->dev_role_sw, role);
+}
+
+static enum usb_role hub_usb_role_switch_get(struct device *dev)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = dev_get_drvdata(dev);
+
+	if (!hisi_hikey_usb || !hisi_hikey_usb->dev_role_sw)
+		return -EINVAL;
+
+	return usb_role_switch_get_role(hisi_hikey_usb->dev_role_sw);
+}
+
+static int hisi_hikey_usb_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct hisi_hikey_usb *hisi_hikey_usb;
+	struct usb_role_switch_desc hub_role_switch = {NULL};
+
+	hisi_hikey_usb = devm_kzalloc(dev, sizeof(*hisi_hikey_usb), GFP_KERNEL);
+	if (!hisi_hikey_usb)
+		return -ENOMEM;
+
+	hisi_hikey_usb->typec_vbus = devm_gpiod_get(dev, "typec-vbus",
+						    GPIOD_OUT_LOW);
+	if (IS_ERR(hisi_hikey_usb->typec_vbus))
+		return PTR_ERR(hisi_hikey_usb->typec_vbus);
+
+	hisi_hikey_usb->otg_switch = devm_gpiod_get(dev, "otg-switch",
+						    GPIOD_OUT_HIGH);
+	if (IS_ERR(hisi_hikey_usb->otg_switch))
+		return PTR_ERR(hisi_hikey_usb->otg_switch);
+
+	/* hub-vdd33-en is optional */
+	hisi_hikey_usb->hub_vbus = devm_gpiod_get_optional(dev, "hub-vdd33-en",
+							   GPIOD_OUT_HIGH);
+	if (IS_ERR(hisi_hikey_usb->hub_vbus))
+		return PTR_ERR(hisi_hikey_usb->hub_vbus);
+
+	hisi_hikey_usb->dev_role_sw = usb_role_switch_get(dev);
+	if (!hisi_hikey_usb->dev_role_sw)
+		return -EPROBE_DEFER;
+	if (IS_ERR(hisi_hikey_usb->dev_role_sw))
+		return PTR_ERR(hisi_hikey_usb->dev_role_sw);
+
+	hub_role_switch.fwnode = dev_fwnode(dev);
+	hub_role_switch.set = hub_usb_role_switch_set;
+	hub_role_switch.get = hub_usb_role_switch_get;
+	hisi_hikey_usb->hub_role_sw = usb_role_switch_register(dev,
+							&hub_role_switch);
+
+	if (IS_ERR(hisi_hikey_usb->hub_role_sw)) {
+		usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+		return PTR_ERR(hisi_hikey_usb->hub_role_sw);
+	}
+
+	platform_set_drvdata(pdev, hisi_hikey_usb);
+
+	return 0;
+}
+
+static int  hisi_hikey_usb_remove(struct platform_device *pdev)
+{
+	struct hisi_hikey_usb *hisi_hikey_usb = platform_get_drvdata(pdev);
+
+	if (hisi_hikey_usb->hub_role_sw)
+		usb_role_switch_unregister(hisi_hikey_usb->hub_role_sw);
+
+	if (hisi_hikey_usb->dev_role_sw)
+		usb_role_switch_put(hisi_hikey_usb->dev_role_sw);
+
+	return 0;
+}
+
+static const struct of_device_id id_table_hisi_hikey_usb[] = {
+	{.compatible = "hisilicon,gpio_hubv1"},
+	{}
+};
+MODULE_DEVICE_TABLE(of, id_table_hisi_hikey_usb);
+
+static struct platform_driver hisi_hikey_usb_driver = {
+	.probe = hisi_hikey_usb_probe,
+	.remove = hisi_hikey_usb_remove,
+	.driver = {
+		.name = DEVICE_DRIVER_NAME,
+		.of_match_table = id_table_hisi_hikey_usb,
+	},
+};
+
+module_platform_driver(hisi_hikey_usb_driver);
+
+MODULE_AUTHOR("Yu Chen <chenyu56@huawei.com>");
+MODULE_DESCRIPTION("Driver Support for USB functionality of Hikey");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/misc/lkdtm/Makefile b/drivers/misc/lkdtm/Makefile
index 30c8ac2..73fb627 100644
--- a/drivers/misc/lkdtm/Makefile
+++ b/drivers/misc/lkdtm/Makefile
@@ -13,6 +13,7 @@
 
 KASAN_SANITIZE_stackleak.o	:= n
 KCOV_INSTRUMENT_rodata.o	:= n
+CFLAGS_REMOVE_rodata.o		+= $(CC_FLAGS_LTO)
 
 OBJCOPYFLAGS :=
 OBJCOPYFLAGS_rodata_objcopy.o	:= \
diff --git a/drivers/misc/lkdtm/bugs.c b/drivers/misc/lkdtm/bugs.c
index 4d5a512..048a688 100644
--- a/drivers/misc/lkdtm/bugs.c
+++ b/drivers/misc/lkdtm/bugs.c
@@ -11,6 +11,7 @@
 #include <linux/sched/signal.h>
 #include <linux/sched/task_stack.h>
 #include <linux/uaccess.h>
+#include <linux/slab.h>
 
 struct lkdtm_list {
 	struct list_head node;
@@ -113,9 +114,8 @@
 	/* Use default char array length that triggers stack protection. */
 	char data[8] __aligned(sizeof(void *));
 
-	__lkdtm_CORRUPT_STACK(&data);
-
-	pr_info("Corrupted stack containing char array ...\n");
+	pr_info("Corrupting stack containing char array ...\n");
+	__lkdtm_CORRUPT_STACK((void *)&data);
 }
 
 /* Same as above but will only get a canary with -fstack-protector-strong */
@@ -126,9 +126,8 @@
 		unsigned long *ptr;
 	} data __aligned(sizeof(void *));
 
-	__lkdtm_CORRUPT_STACK(&data);
-
-	pr_info("Corrupted stack containing union ...\n");
+	pr_info("Corrupting stack containing union ...\n");
+	__lkdtm_CORRUPT_STACK((void *)&data);
 }
 
 void lkdtm_UNALIGNED_LOAD_STORE_WRITE(void)
@@ -171,6 +170,80 @@
 	schedule();
 }
 
+volatile unsigned int huge = INT_MAX - 2;
+volatile unsigned int ignored;
+
+void lkdtm_OVERFLOW_SIGNED(void)
+{
+	int value;
+
+	value = huge;
+	pr_info("Normal signed addition ...\n");
+	value += 1;
+	ignored = value;
+
+	pr_info("Overflowing signed addition ...\n");
+	value += 4;
+	ignored = value;
+}
+
+
+void lkdtm_OVERFLOW_UNSIGNED(void)
+{
+	unsigned int value;
+
+	value = huge;
+	pr_info("Normal unsigned addition ...\n");
+	value += 1;
+	ignored = value;
+
+	pr_info("Overflowing unsigned addition ...\n");
+	value += 4;
+	ignored = value;
+}
+
+/* Intentially using old-style flex array definition of 1 byte. */
+struct array_bounds_flex_array {
+	int one;
+	int two;
+	char data[1];
+};
+
+struct array_bounds {
+	int one;
+	int two;
+	char data[8];
+	int three;
+};
+
+void lkdtm_ARRAY_BOUNDS(void)
+{
+	struct array_bounds_flex_array *not_checked;
+	struct array_bounds *checked;
+	volatile int i;
+
+	not_checked = kmalloc(sizeof(*not_checked) * 2, GFP_KERNEL);
+	checked = kmalloc(sizeof(*checked) * 2, GFP_KERNEL);
+
+	pr_info("Array access within bounds ...\n");
+	/* For both, touch all bytes in the actual member size. */
+	for (i = 0; i < sizeof(checked->data); i++)
+		checked->data[i] = 'A';
+	/*
+	 * For the uninstrumented flex array member, also touch 1 byte
+	 * beyond to verify it is correctly uninstrumented.
+	 */
+	for (i = 0; i < sizeof(not_checked->data) + 1; i++)
+		not_checked->data[i] = 'A';
+
+	pr_info("Array access beyond bounds ...\n");
+	for (i = 0; i < sizeof(checked->data) + 1; i++)
+		checked->data[i] = 'B';
+
+	kfree(not_checked);
+	kfree(checked);
+}
+
 void lkdtm_CORRUPT_LIST_ADD(void)
 {
 	/*
diff --git a/drivers/misc/lkdtm/core.c b/drivers/misc/lkdtm/core.c
index cbc4c90..25879f7 100644
--- a/drivers/misc/lkdtm/core.c
+++ b/drivers/misc/lkdtm/core.c
@@ -129,6 +129,9 @@
 	CRASHTYPE(HARDLOCKUP),
 	CRASHTYPE(SPINLOCKUP),
 	CRASHTYPE(HUNG_TASK),
+	CRASHTYPE(OVERFLOW_SIGNED),
+	CRASHTYPE(OVERFLOW_UNSIGNED),
+	CRASHTYPE(ARRAY_BOUNDS),
 	CRASHTYPE(EXEC_DATA),
 	CRASHTYPE(EXEC_STACK),
 	CRASHTYPE(EXEC_KMALLOC),
diff --git a/drivers/misc/lkdtm/heap.c b/drivers/misc/lkdtm/heap.c
index 3c5cec8..1323bc1 100644
--- a/drivers/misc/lkdtm/heap.c
+++ b/drivers/misc/lkdtm/heap.c
@@ -58,11 +58,12 @@
 	int *base, *val, saw;
 	size_t len = 1024;
 	/*
-	 * The slub allocator uses the first word to store the free
-	 * pointer in some configurations. Use the middle of the
-	 * allocation to avoid running into the freelist
+	 * The slub allocator will use the either the first word or
+	 * the middle of the allocation to store the free pointer,
+	 * depending on configurations. Store in the second word to
+	 * avoid running into the freelist.
 	 */
-	size_t offset = (len / sizeof(*base)) / 2;
+	size_t offset = sizeof(*base);
 
 	base = kmalloc(len, GFP_KERNEL);
 	if (!base) {
diff --git a/drivers/misc/lkdtm/lkdtm.h b/drivers/misc/lkdtm/lkdtm.h
index ab446e0..2cd0c50 100644
--- a/drivers/misc/lkdtm/lkdtm.h
+++ b/drivers/misc/lkdtm/lkdtm.h
@@ -22,6 +22,9 @@
 void lkdtm_HARDLOCKUP(void);
 void lkdtm_SPINLOCKUP(void);
 void lkdtm_HUNG_TASK(void);
+void lkdtm_OVERFLOW_SIGNED(void);
+void lkdtm_OVERFLOW_UNSIGNED(void);
+void lkdtm_ARRAY_BOUNDS(void);
 void lkdtm_CORRUPT_LIST_ADD(void);
 void lkdtm_CORRUPT_LIST_DEL(void);
 void lkdtm_CORRUPT_USER_DS(void);
diff --git a/drivers/misc/lkdtm/perms.c b/drivers/misc/lkdtm/perms.c
index 62f76d5..2dede2e 100644
--- a/drivers/misc/lkdtm/perms.c
+++ b/drivers/misc/lkdtm/perms.c
@@ -57,6 +57,7 @@
 	}
 	pr_info("attempting bad execution at %px\n", func);
 	func();
+	pr_err("FAIL: func returned\n");
 }
 
 static void execute_user_location(void *dst)
@@ -75,20 +76,22 @@
 		return;
 	pr_info("attempting bad execution at %px\n", func);
 	func();
+	pr_err("FAIL: func returned\n");
 }
 
 void lkdtm_WRITE_RO(void)
 {
-	/* Explicitly cast away "const" for the test. */
-	unsigned long *ptr = (unsigned long *)&rodata;
+	/* Explicitly cast away "const" for the test and make volatile. */
+	volatile unsigned long *ptr = (unsigned long *)&rodata;
 
 	pr_info("attempting bad rodata write at %px\n", ptr);
 	*ptr ^= 0xabcd1234;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void lkdtm_WRITE_RO_AFTER_INIT(void)
 {
-	unsigned long *ptr = &ro_after_init;
+	volatile unsigned long *ptr = &ro_after_init;
 
 	/*
 	 * Verify we were written to during init. Since an Oops
@@ -102,19 +105,21 @@
 
 	pr_info("attempting bad ro_after_init write at %px\n", ptr);
 	*ptr ^= 0xabcd1234;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void lkdtm_WRITE_KERN(void)
 {
 	size_t size;
-	unsigned char *ptr;
+	volatile unsigned char *ptr;
 
 	size = (unsigned long)do_overwritten - (unsigned long)do_nothing;
 	ptr = (unsigned char *)do_overwritten;
 
 	pr_info("attempting bad %zu byte write at %px\n", size, ptr);
-	memcpy(ptr, (unsigned char *)do_nothing, size);
+	memcpy((void *)ptr, (unsigned char *)do_nothing, size);
 	flush_icache_range((unsigned long)ptr, (unsigned long)(ptr + size));
+	pr_err("FAIL: survived bad write\n");
 
 	do_overwritten();
 }
@@ -193,9 +198,11 @@
 	pr_info("attempting bad read at %px\n", ptr);
 	tmp = *ptr;
 	tmp += 0xc0dec0de;
+	pr_err("FAIL: survived bad read\n");
 
 	pr_info("attempting bad write at %px\n", ptr);
 	*ptr = tmp;
+	pr_err("FAIL: survived bad write\n");
 
 	vm_munmap(user_addr, PAGE_SIZE);
 }
@@ -203,19 +210,20 @@
 void lkdtm_ACCESS_NULL(void)
 {
 	unsigned long tmp;
-	unsigned long *ptr = (unsigned long *)NULL;
+	volatile unsigned long *ptr = (unsigned long *)NULL;
 
 	pr_info("attempting bad read at %px\n", ptr);
 	tmp = *ptr;
 	tmp += 0xc0dec0de;
+	pr_err("FAIL: survived bad read\n");
 
 	pr_info("attempting bad write at %px\n", ptr);
 	*ptr = tmp;
+	pr_err("FAIL: survived bad write\n");
 }
 
 void __init lkdtm_perms_init(void)
 {
 	/* Make sure we can write to __ro_after_init values during __init */
 	ro_after_init |= 0xAA;
-
 }
diff --git a/drivers/misc/lkdtm/usercopy.c b/drivers/misc/lkdtm/usercopy.c
index e172719..b833367 100644
--- a/drivers/misc/lkdtm/usercopy.c
+++ b/drivers/misc/lkdtm/usercopy.c
@@ -304,19 +304,22 @@
 		return;
 	}
 
-	pr_info("attempting good copy_to_user from kernel rodata\n");
+	pr_info("attempting good copy_to_user from kernel rodata: %px\n",
+		test_text);
 	if (copy_to_user((void __user *)user_addr, test_text,
 			 unconst + sizeof(test_text))) {
 		pr_warn("copy_to_user failed unexpectedly?!\n");
 		goto free_user;
 	}
 
-	pr_info("attempting bad copy_to_user from kernel text\n");
+	pr_info("attempting bad copy_to_user from kernel text: %px\n",
+		vm_mmap);
 	if (copy_to_user((void __user *)user_addr, vm_mmap,
 			 unconst + PAGE_SIZE)) {
 		pr_warn("copy_to_user failed, but lacked Oops\n");
 		goto free_user;
 	}
+	pr_err("FAIL: survived bad copy_to_user()\n");
 
 free_user:
 	vm_munmap(user_addr, PAGE_SIZE);
diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c
new file mode 100644
index 0000000..6f17a3c8
--- /dev/null
+++ b/drivers/misc/uid_sys_stats.c
@@ -0,0 +1,706 @@
+/* drivers/misc/uid_sys_stats.c
+ *
+ * Copyright (C) 2014 - 2015 Google, Inc.
+ *
+ * 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.
+ *
+ */
+
+#include <linux/atomic.h>
+#include <linux/err.h>
+#include <linux/hashtable.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/mm.h>
+#include <linux/proc_fs.h>
+#include <linux/profile.h>
+#include <linux/rtmutex.h>
+#include <linux/sched/cputime.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+
+
+#define UID_HASH_BITS	10
+DECLARE_HASHTABLE(hash_table, UID_HASH_BITS);
+
+static DEFINE_RT_MUTEX(uid_lock);
+static struct proc_dir_entry *cpu_parent;
+static struct proc_dir_entry *io_parent;
+static struct proc_dir_entry *proc_parent;
+
+struct io_stats {
+	u64 read_bytes;
+	u64 write_bytes;
+	u64 rchar;
+	u64 wchar;
+	u64 fsync;
+};
+
+#define UID_STATE_FOREGROUND	0
+#define UID_STATE_BACKGROUND	1
+#define UID_STATE_BUCKET_SIZE	2
+
+#define UID_STATE_TOTAL_CURR	2
+#define UID_STATE_TOTAL_LAST	3
+#define UID_STATE_DEAD_TASKS	4
+#define UID_STATE_SIZE		5
+
+#define MAX_TASK_COMM_LEN 256
+
+struct task_entry {
+	char comm[MAX_TASK_COMM_LEN];
+	pid_t pid;
+	struct io_stats io[UID_STATE_SIZE];
+	struct hlist_node hash;
+};
+
+struct uid_entry {
+	uid_t uid;
+	u64 utime;
+	u64 stime;
+	u64 active_utime;
+	u64 active_stime;
+	int state;
+	struct io_stats io[UID_STATE_SIZE];
+	struct hlist_node hash;
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+	DECLARE_HASHTABLE(task_entries, UID_HASH_BITS);
+#endif
+};
+
+static u64 compute_write_bytes(struct task_struct *task)
+{
+	if (task->ioac.write_bytes <= task->ioac.cancelled_write_bytes)
+		return 0;
+
+	return task->ioac.write_bytes - task->ioac.cancelled_write_bytes;
+}
+
+static void compute_io_bucket_stats(struct io_stats *io_bucket,
+					struct io_stats *io_curr,
+					struct io_stats *io_last,
+					struct io_stats *io_dead)
+{
+	/* tasks could switch to another uid group, but its io_last in the
+	 * previous uid group could still be positive.
+	 * therefore before each update, do an overflow check first
+	 */
+	int64_t delta;
+
+	delta = io_curr->read_bytes + io_dead->read_bytes -
+		io_last->read_bytes;
+	io_bucket->read_bytes += delta > 0 ? delta : 0;
+	delta = io_curr->write_bytes + io_dead->write_bytes -
+		io_last->write_bytes;
+	io_bucket->write_bytes += delta > 0 ? delta : 0;
+	delta = io_curr->rchar + io_dead->rchar - io_last->rchar;
+	io_bucket->rchar += delta > 0 ? delta : 0;
+	delta = io_curr->wchar + io_dead->wchar - io_last->wchar;
+	io_bucket->wchar += delta > 0 ? delta : 0;
+	delta = io_curr->fsync + io_dead->fsync - io_last->fsync;
+	io_bucket->fsync += delta > 0 ? delta : 0;
+
+	io_last->read_bytes = io_curr->read_bytes;
+	io_last->write_bytes = io_curr->write_bytes;
+	io_last->rchar = io_curr->rchar;
+	io_last->wchar = io_curr->wchar;
+	io_last->fsync = io_curr->fsync;
+
+	memset(io_dead, 0, sizeof(struct io_stats));
+}
+
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+static void get_full_task_comm(struct task_entry *task_entry,
+		struct task_struct *task)
+{
+	int i = 0, offset = 0, len = 0;
+	/* save one byte for terminating null character */
+	int unused_len = MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1;
+	char buf[MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1];
+	struct mm_struct *mm = task->mm;
+
+	/* fill the first TASK_COMM_LEN bytes with thread name */
+	__get_task_comm(task_entry->comm, TASK_COMM_LEN, task);
+	i = strlen(task_entry->comm);
+	while (i < TASK_COMM_LEN)
+		task_entry->comm[i++] = ' ';
+
+	/* next the executable file name */
+	if (mm) {
+		down_read(&mm->mmap_sem);
+		if (mm->exe_file) {
+			char *pathname = d_path(&mm->exe_file->f_path, buf,
+					unused_len);
+
+			if (!IS_ERR(pathname)) {
+				len = strlcpy(task_entry->comm + i, pathname,
+						unused_len);
+				i += len;
+				task_entry->comm[i++] = ' ';
+				unused_len--;
+			}
+		}
+		up_read(&mm->mmap_sem);
+	}
+	unused_len -= len;
+
+	/* fill the rest with command line argument
+	 * replace each null or new line character
+	 * between args in argv with whitespace */
+	len = get_cmdline(task, buf, unused_len);
+	while (offset < len) {
+		if (buf[offset] != '\0' && buf[offset] != '\n')
+			task_entry->comm[i++] = buf[offset];
+		else
+			task_entry->comm[i++] = ' ';
+		offset++;
+	}
+
+	/* get rid of trailing whitespaces in case when arg is memset to
+	 * zero before being reset in userspace
+	 */
+	while (task_entry->comm[i-1] == ' ')
+		i--;
+	task_entry->comm[i] = '\0';
+}
+
+static struct task_entry *find_task_entry(struct uid_entry *uid_entry,
+		struct task_struct *task)
+{
+	struct task_entry *task_entry;
+
+	hash_for_each_possible(uid_entry->task_entries, task_entry, hash,
+			task->pid) {
+		if (task->pid == task_entry->pid) {
+			/* if thread name changed, update the entire command */
+			int len = strnchr(task_entry->comm, ' ', TASK_COMM_LEN)
+				- task_entry->comm;
+
+			if (strncmp(task_entry->comm, task->comm, len))
+				get_full_task_comm(task_entry, task);
+			return task_entry;
+		}
+	}
+	return NULL;
+}
+
+static struct task_entry *find_or_register_task(struct uid_entry *uid_entry,
+		struct task_struct *task)
+{
+	struct task_entry *task_entry;
+	pid_t pid = task->pid;
+
+	task_entry = find_task_entry(uid_entry, task);
+	if (task_entry)
+		return task_entry;
+
+	task_entry = kzalloc(sizeof(struct task_entry), GFP_ATOMIC);
+	if (!task_entry)
+		return NULL;
+
+	get_full_task_comm(task_entry, task);
+
+	task_entry->pid = pid;
+	hash_add(uid_entry->task_entries, &task_entry->hash, (unsigned int)pid);
+
+	return task_entry;
+}
+
+static void remove_uid_tasks(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+	struct hlist_node *tmp_task;
+
+	hash_for_each_safe(uid_entry->task_entries, bkt_task,
+			tmp_task, task_entry, hash) {
+		hash_del(&task_entry->hash);
+		kfree(task_entry);
+	}
+}
+
+static void set_io_uid_tasks_zero(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		memset(&task_entry->io[UID_STATE_TOTAL_CURR], 0,
+			sizeof(struct io_stats));
+	}
+}
+
+static void add_uid_tasks_io_stats(struct uid_entry *uid_entry,
+		struct task_struct *task, int slot)
+{
+	struct task_entry *task_entry = find_or_register_task(uid_entry, task);
+	struct io_stats *task_io_slot = &task_entry->io[slot];
+
+	task_io_slot->read_bytes += task->ioac.read_bytes;
+	task_io_slot->write_bytes += compute_write_bytes(task);
+	task_io_slot->rchar += task->ioac.rchar;
+	task_io_slot->wchar += task->ioac.wchar;
+	task_io_slot->fsync += task->ioac.syscfs;
+}
+
+static void compute_io_uid_tasks(struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		compute_io_bucket_stats(&task_entry->io[uid_entry->state],
+					&task_entry->io[UID_STATE_TOTAL_CURR],
+					&task_entry->io[UID_STATE_TOTAL_LAST],
+					&task_entry->io[UID_STATE_DEAD_TASKS]);
+	}
+}
+
+static void show_io_uid_tasks(struct seq_file *m, struct uid_entry *uid_entry)
+{
+	struct task_entry *task_entry;
+	unsigned long bkt_task;
+
+	hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) {
+		/* Separated by comma because space exists in task comm */
+		seq_printf(m, "task,%s,%lu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu\n",
+				task_entry->comm,
+				(unsigned long)task_entry->pid,
+				task_entry->io[UID_STATE_FOREGROUND].rchar,
+				task_entry->io[UID_STATE_FOREGROUND].wchar,
+				task_entry->io[UID_STATE_FOREGROUND].read_bytes,
+				task_entry->io[UID_STATE_FOREGROUND].write_bytes,
+				task_entry->io[UID_STATE_BACKGROUND].rchar,
+				task_entry->io[UID_STATE_BACKGROUND].wchar,
+				task_entry->io[UID_STATE_BACKGROUND].read_bytes,
+				task_entry->io[UID_STATE_BACKGROUND].write_bytes,
+				task_entry->io[UID_STATE_FOREGROUND].fsync,
+				task_entry->io[UID_STATE_BACKGROUND].fsync);
+	}
+}
+#else
+static void remove_uid_tasks(struct uid_entry *uid_entry) {};
+static void set_io_uid_tasks_zero(struct uid_entry *uid_entry) {};
+static void add_uid_tasks_io_stats(struct uid_entry *uid_entry,
+		struct task_struct *task, int slot) {};
+static void compute_io_uid_tasks(struct uid_entry *uid_entry) {};
+static void show_io_uid_tasks(struct seq_file *m,
+		struct uid_entry *uid_entry) {}
+#endif
+
+static struct uid_entry *find_uid_entry(uid_t uid)
+{
+	struct uid_entry *uid_entry;
+	hash_for_each_possible(hash_table, uid_entry, hash, uid) {
+		if (uid_entry->uid == uid)
+			return uid_entry;
+	}
+	return NULL;
+}
+
+static struct uid_entry *find_or_register_uid(uid_t uid)
+{
+	struct uid_entry *uid_entry;
+
+	uid_entry = find_uid_entry(uid);
+	if (uid_entry)
+		return uid_entry;
+
+	uid_entry = kzalloc(sizeof(struct uid_entry), GFP_ATOMIC);
+	if (!uid_entry)
+		return NULL;
+
+	uid_entry->uid = uid;
+#ifdef CONFIG_UID_SYS_STATS_DEBUG
+	hash_init(uid_entry->task_entries);
+#endif
+	hash_add(hash_table, &uid_entry->hash, uid);
+
+	return uid_entry;
+}
+
+static int uid_cputime_show(struct seq_file *m, void *v)
+{
+	struct uid_entry *uid_entry = NULL;
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+	u64 utime;
+	u64 stime;
+	unsigned long bkt;
+	uid_t uid;
+
+	rt_mutex_lock(&uid_lock);
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		uid_entry->active_stime = 0;
+		uid_entry->active_utime = 0;
+	}
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		uid = from_kuid_munged(user_ns, task_uid(task));
+		if (!uid_entry || uid_entry->uid != uid)
+			uid_entry = find_or_register_uid(uid);
+		if (!uid_entry) {
+			rcu_read_unlock();
+			rt_mutex_unlock(&uid_lock);
+			pr_err("%s: failed to find the uid_entry for uid %d\n",
+				__func__, uid);
+			return -ENOMEM;
+		}
+		/* 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();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		u64 total_utime = uid_entry->utime +
+							uid_entry->active_utime;
+		u64 total_stime = uid_entry->stime +
+							uid_entry->active_stime;
+		seq_printf(m, "%d: %llu %llu\n", uid_entry->uid,
+			ktime_to_us(total_utime), ktime_to_us(total_stime));
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return 0;
+}
+
+static int uid_cputime_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, uid_cputime_show, PDE_DATA(inode));
+}
+
+static const struct file_operations uid_cputime_fops = {
+	.open		= uid_cputime_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int uid_remove_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, NULL, NULL);
+}
+
+static ssize_t uid_remove_write(struct file *file,
+			const char __user *buffer, size_t count, loff_t *ppos)
+{
+	struct uid_entry *uid_entry;
+	struct hlist_node *tmp;
+	char uids[128];
+	char *start_uid, *end_uid = NULL;
+	long int uid_start = 0, uid_end = 0;
+
+	if (count >= sizeof(uids))
+		count = sizeof(uids) - 1;
+
+	if (copy_from_user(uids, buffer, count))
+		return -EFAULT;
+
+	uids[count] = '\0';
+	end_uid = uids;
+	start_uid = strsep(&end_uid, "-");
+
+	if (!start_uid || !end_uid)
+		return -EINVAL;
+
+	if (kstrtol(start_uid, 10, &uid_start) != 0 ||
+		kstrtol(end_uid, 10, &uid_end) != 0) {
+		return -EINVAL;
+	}
+
+	rt_mutex_lock(&uid_lock);
+
+	for (; uid_start <= uid_end; uid_start++) {
+		hash_for_each_possible_safe(hash_table, uid_entry, tmp,
+							hash, (uid_t)uid_start) {
+			if (uid_start == uid_entry->uid) {
+				remove_uid_tasks(uid_entry);
+				hash_del(&uid_entry->hash);
+				kfree(uid_entry);
+			}
+		}
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return count;
+}
+
+static const struct file_operations uid_remove_fops = {
+	.open		= uid_remove_open,
+	.release	= single_release,
+	.write		= uid_remove_write,
+};
+
+
+static void add_uid_io_stats(struct uid_entry *uid_entry,
+			struct task_struct *task, int slot)
+{
+	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;
+	io_slot->wchar += task->ioac.wchar;
+	io_slot->fsync += task->ioac.syscfs;
+
+	add_uid_tasks_io_stats(uid_entry, task, slot);
+}
+
+static void update_io_stats_all_locked(void)
+{
+	struct uid_entry *uid_entry = NULL;
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+	unsigned long bkt;
+	uid_t uid;
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
+			sizeof(struct io_stats));
+		set_io_uid_tasks_zero(uid_entry);
+	}
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		uid = from_kuid_munged(user_ns, task_uid(task));
+		if (!uid_entry || uid_entry->uid != uid)
+			uid_entry = find_or_register_uid(uid);
+		if (!uid_entry)
+			continue;
+		add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
+	} while_each_thread(temp, task);
+	rcu_read_unlock();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
+					&uid_entry->io[UID_STATE_TOTAL_CURR],
+					&uid_entry->io[UID_STATE_TOTAL_LAST],
+					&uid_entry->io[UID_STATE_DEAD_TASKS]);
+		compute_io_uid_tasks(uid_entry);
+	}
+}
+
+static void update_io_stats_uid_locked(struct uid_entry *uid_entry)
+{
+	struct task_struct *task, *temp;
+	struct user_namespace *user_ns = current_user_ns();
+
+	memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0,
+		sizeof(struct io_stats));
+	set_io_uid_tasks_zero(uid_entry);
+
+	rcu_read_lock();
+	do_each_thread(temp, task) {
+		if (from_kuid_munged(user_ns, task_uid(task)) != uid_entry->uid)
+			continue;
+		add_uid_io_stats(uid_entry, task, UID_STATE_TOTAL_CURR);
+	} while_each_thread(temp, task);
+	rcu_read_unlock();
+
+	compute_io_bucket_stats(&uid_entry->io[uid_entry->state],
+				&uid_entry->io[UID_STATE_TOTAL_CURR],
+				&uid_entry->io[UID_STATE_TOTAL_LAST],
+				&uid_entry->io[UID_STATE_DEAD_TASKS]);
+	compute_io_uid_tasks(uid_entry);
+}
+
+
+static int uid_io_show(struct seq_file *m, void *v)
+{
+	struct uid_entry *uid_entry;
+	unsigned long bkt;
+
+	rt_mutex_lock(&uid_lock);
+
+	update_io_stats_all_locked();
+
+	hash_for_each(hash_table, bkt, uid_entry, hash) {
+		seq_printf(m, "%d %llu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
+				uid_entry->uid,
+				uid_entry->io[UID_STATE_FOREGROUND].rchar,
+				uid_entry->io[UID_STATE_FOREGROUND].wchar,
+				uid_entry->io[UID_STATE_FOREGROUND].read_bytes,
+				uid_entry->io[UID_STATE_FOREGROUND].write_bytes,
+				uid_entry->io[UID_STATE_BACKGROUND].rchar,
+				uid_entry->io[UID_STATE_BACKGROUND].wchar,
+				uid_entry->io[UID_STATE_BACKGROUND].read_bytes,
+				uid_entry->io[UID_STATE_BACKGROUND].write_bytes,
+				uid_entry->io[UID_STATE_FOREGROUND].fsync,
+				uid_entry->io[UID_STATE_BACKGROUND].fsync);
+
+		show_io_uid_tasks(m, uid_entry);
+	}
+
+	rt_mutex_unlock(&uid_lock);
+	return 0;
+}
+
+static int uid_io_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, uid_io_show, PDE_DATA(inode));
+}
+
+static const struct file_operations uid_io_fops = {
+	.open		= uid_io_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= single_release,
+};
+
+static int uid_procstat_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, NULL, NULL);
+}
+
+static ssize_t uid_procstat_write(struct file *file,
+			const char __user *buffer, size_t count, loff_t *ppos)
+{
+	struct uid_entry *uid_entry;
+	uid_t uid;
+	int argc, state;
+	char input[128];
+
+	if (count >= sizeof(input))
+		return -EINVAL;
+
+	if (copy_from_user(input, buffer, count))
+		return -EFAULT;
+
+	input[count] = '\0';
+
+	argc = sscanf(input, "%u %d", &uid, &state);
+	if (argc != 2)
+		return -EINVAL;
+
+	if (state != UID_STATE_BACKGROUND && state != UID_STATE_FOREGROUND)
+		return -EINVAL;
+
+	rt_mutex_lock(&uid_lock);
+
+	uid_entry = find_or_register_uid(uid);
+	if (!uid_entry) {
+		rt_mutex_unlock(&uid_lock);
+		return -EINVAL;
+	}
+
+	if (uid_entry->state == state) {
+		rt_mutex_unlock(&uid_lock);
+		return count;
+	}
+
+	update_io_stats_uid_locked(uid_entry);
+
+	uid_entry->state = state;
+
+	rt_mutex_unlock(&uid_lock);
+
+	return count;
+}
+
+static const struct file_operations uid_procstat_fops = {
+	.open		= uid_procstat_open,
+	.release	= single_release,
+	.write		= uid_procstat_write,
+};
+
+static int process_notifier(struct notifier_block *self,
+			unsigned long cmd, void *v)
+{
+	struct task_struct *task = v;
+	struct uid_entry *uid_entry;
+	u64 utime, stime;
+	uid_t uid;
+
+	if (!task)
+		return NOTIFY_OK;
+
+	rt_mutex_lock(&uid_lock);
+	uid = from_kuid_munged(current_user_ns(), task_uid(task));
+	uid_entry = find_or_register_uid(uid);
+	if (!uid_entry) {
+		pr_err("%s: failed to find uid %d\n", __func__, uid);
+		goto exit;
+	}
+
+	task_cputime_adjusted(task, &utime, &stime);
+	uid_entry->utime += utime;
+	uid_entry->stime += stime;
+
+	add_uid_io_stats(uid_entry, task, UID_STATE_DEAD_TASKS);
+
+exit:
+	rt_mutex_unlock(&uid_lock);
+	return NOTIFY_OK;
+}
+
+static struct notifier_block process_notifier_block = {
+	.notifier_call	= process_notifier,
+};
+
+static int __init proc_uid_sys_stats_init(void)
+{
+	hash_init(hash_table);
+
+	cpu_parent = proc_mkdir("uid_cputime", NULL);
+	if (!cpu_parent) {
+		pr_err("%s: failed to create uid_cputime proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("remove_uid_range", 0222, cpu_parent,
+		&uid_remove_fops, NULL);
+	proc_create_data("show_uid_stat", 0444, cpu_parent,
+		&uid_cputime_fops, NULL);
+
+	io_parent = proc_mkdir("uid_io", NULL);
+	if (!io_parent) {
+		pr_err("%s: failed to create uid_io proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("stats", 0444, io_parent,
+		&uid_io_fops, NULL);
+
+	proc_parent = proc_mkdir("uid_procstat", NULL);
+	if (!proc_parent) {
+		pr_err("%s: failed to create uid_procstat proc entry\n",
+			__func__);
+		goto err;
+	}
+
+	proc_create_data("set", 0222, proc_parent,
+		&uid_procstat_fops, NULL);
+
+	profile_event_register(PROFILE_TASK_EXIT, &process_notifier_block);
+
+	return 0;
+
+err:
+	remove_proc_subtree("uid_cputime", NULL);
+	remove_proc_subtree("uid_io", NULL);
+	remove_proc_subtree("uid_procstat", NULL);
+	return -ENOMEM;
+}
+
+early_initcall(proc_uid_sys_stats_init);
diff --git a/drivers/misc/vmw_vmci/vmci_driver.c b/drivers/misc/vmw_vmci/vmci_driver.c
index 819e359..cbb706d 100644
--- a/drivers/misc/vmw_vmci/vmci_driver.c
+++ b/drivers/misc/vmw_vmci/vmci_driver.c
@@ -28,6 +28,10 @@
 static bool vmci_guest_personality_initialized;
 static bool vmci_host_personality_initialized;
 
+static DEFINE_MUTEX(vmci_vsock_mutex); /* protects vmci_vsock_transport_cb */
+static vmci_vsock_cb vmci_vsock_transport_cb;
+static bool vmci_vsock_cb_host_called;
+
 /*
  * vmci_get_context_id() - Gets the current context ID.
  *
@@ -45,6 +49,69 @@
 }
 EXPORT_SYMBOL_GPL(vmci_get_context_id);
 
+/*
+ * vmci_register_vsock_callback() - Register the VSOCK vmci_transport callback.
+ *
+ * The callback will be called when the first host or guest becomes active,
+ * or if they are already active when this function is called.
+ * To unregister the callback, call this function with NULL parameter.
+ *
+ * Returns 0 on success. -EBUSY if a callback is already registered.
+ */
+int vmci_register_vsock_callback(vmci_vsock_cb callback)
+{
+	int err = 0;
+
+	mutex_lock(&vmci_vsock_mutex);
+
+	if (vmci_vsock_transport_cb && callback) {
+		err = -EBUSY;
+		goto out;
+	}
+
+	vmci_vsock_transport_cb = callback;
+
+	if (!vmci_vsock_transport_cb) {
+		vmci_vsock_cb_host_called = false;
+		goto out;
+	}
+
+	if (vmci_guest_code_active())
+		vmci_vsock_transport_cb(false);
+
+	if (vmci_host_users() > 0) {
+		vmci_vsock_cb_host_called = true;
+		vmci_vsock_transport_cb(true);
+	}
+
+out:
+	mutex_unlock(&vmci_vsock_mutex);
+	return err;
+}
+EXPORT_SYMBOL_GPL(vmci_register_vsock_callback);
+
+void vmci_call_vsock_callback(bool is_host)
+{
+	mutex_lock(&vmci_vsock_mutex);
+
+	if (!vmci_vsock_transport_cb)
+		goto out;
+
+	/* In the host, this function could be called multiple times,
+	 * but we want to register it only once.
+	 */
+	if (is_host) {
+		if (vmci_vsock_cb_host_called)
+			goto out;
+
+		vmci_vsock_cb_host_called = true;
+	}
+
+	vmci_vsock_transport_cb(is_host);
+out:
+	mutex_unlock(&vmci_vsock_mutex);
+}
+
 static int __init vmci_drv_init(void)
 {
 	int vmci_err;
diff --git a/drivers/misc/vmw_vmci/vmci_driver.h b/drivers/misc/vmw_vmci/vmci_driver.h
index aab81b6..9906824 100644
--- a/drivers/misc/vmw_vmci/vmci_driver.h
+++ b/drivers/misc/vmw_vmci/vmci_driver.h
@@ -36,10 +36,12 @@
 
 u32 vmci_get_context_id(void);
 int vmci_send_datagram(struct vmci_datagram *dg);
+void vmci_call_vsock_callback(bool is_host);
 
 int vmci_host_init(void);
 void vmci_host_exit(void);
 bool vmci_host_code_active(void);
+int vmci_host_users(void);
 
 int vmci_guest_init(void);
 void vmci_guest_exit(void);
diff --git a/drivers/misc/vmw_vmci/vmci_guest.c b/drivers/misc/vmw_vmci/vmci_guest.c
index 5437685..1018dc7 100644
--- a/drivers/misc/vmw_vmci/vmci_guest.c
+++ b/drivers/misc/vmw_vmci/vmci_guest.c
@@ -637,6 +637,8 @@
 		  vmci_dev->iobase + VMCI_CONTROL_ADDR);
 
 	pci_set_drvdata(pdev, vmci_dev);
+
+	vmci_call_vsock_callback(false);
 	return 0;
 
 err_free_irq:
diff --git a/drivers/misc/vmw_vmci/vmci_host.c b/drivers/misc/vmw_vmci/vmci_host.c
index 833e2bd..ff3c396 100644
--- a/drivers/misc/vmw_vmci/vmci_host.c
+++ b/drivers/misc/vmw_vmci/vmci_host.c
@@ -108,6 +108,11 @@
 	     atomic_read(&vmci_host_active_users) > 0);
 }
 
+int vmci_host_users(void)
+{
+	return atomic_read(&vmci_host_active_users);
+}
+
 /*
  * Called on open of /dev/vmci.
  */
@@ -338,6 +343,8 @@
 	vmci_host_dev->ct_type = VMCIOBJ_CONTEXT;
 	atomic_inc(&vmci_host_active_users);
 
+	vmci_call_vsock_callback(true);
+
 	retval = 0;
 
 out:
diff --git a/drivers/mmc/core/Kconfig b/drivers/mmc/core/Kconfig
index c12fe13..ae8b69a 100644
--- a/drivers/mmc/core/Kconfig
+++ b/drivers/mmc/core/Kconfig
@@ -81,3 +81,11 @@
 	  This driver is only of interest to those developing or
 	  testing a host driver. Most people should say N here.
 
+config MMC_CRYPTO
+	bool "MMC Crypto Engine Support"
+	depends on BLK_INLINE_ENCRYPTION
+	help
+	  Enable Crypto Engine Support in MMC.
+	  Enabling this makes it possible for the kernel to use the crypto
+	  capabilities of the MMC device (if present) to perform crypto
+	  operations on data being transferred to/from the device.
diff --git a/drivers/mmc/core/Makefile b/drivers/mmc/core/Makefile
index 95ffe00..6a907736 100644
--- a/drivers/mmc/core/Makefile
+++ b/drivers/mmc/core/Makefile
@@ -18,3 +18,4 @@
 mmc_block-objs			:= block.o queue.o
 obj-$(CONFIG_MMC_TEST)		+= mmc_test.o
 obj-$(CONFIG_SDIO_UART)		+= sdio_uart.o
+mmc_core-$(CONFIG_MMC_CRYPTO)	+= crypto.o
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index e92f937..9e9171b 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -51,6 +51,7 @@
 #include "block.h"
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "host.h"
 #include "bus.h"
 #include "mmc_ops.h"
@@ -168,6 +169,11 @@
 
 static inline int mmc_blk_part_switch(struct mmc_card *card,
 				      unsigned int part_type);
+static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
+			       struct mmc_card *card,
+			       int disable_multi,
+			       struct mmc_queue *mq);
+static void mmc_blk_hsq_req_done(struct mmc_request *mrq);
 
 static struct mmc_blk_data *mmc_blk_get(struct gendisk *disk)
 {
@@ -1316,6 +1322,8 @@
 
 	memset(brq, 0, sizeof(struct mmc_blk_request));
 
+	mmc_crypto_prepare_req(mqrq);
+
 	brq->mrq.data = &brq->data;
 	brq->mrq.tag = req->tag;
 
@@ -1552,9 +1560,30 @@
 	return mmc_blk_cqe_start_req(mq->card->host, mrq);
 }
 
+static int mmc_blk_hsq_issue_rw_rq(struct mmc_queue *mq, struct request *req)
+{
+	struct mmc_queue_req *mqrq = req_to_mmc_queue_req(req);
+	struct mmc_host *host = mq->card->host;
+	int err;
+
+	mmc_blk_rw_rq_prep(mqrq, mq->card, 0, mq);
+	mqrq->brq.mrq.done = mmc_blk_hsq_req_done;
+	mmc_pre_req(host, &mqrq->brq.mrq);
+
+	err = mmc_cqe_start_req(host, &mqrq->brq.mrq);
+	if (err)
+		mmc_post_req(host, &mqrq->brq.mrq, err);
+
+	return err;
+}
+
 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_host *host = mq->card->host;
+
+	if (host->hsq_enabled)
+		return mmc_blk_hsq_issue_rw_rq(mq, req);
 
 	mmc_blk_data_prep(mq, mqrq, 0, NULL, NULL);
 
@@ -1940,6 +1969,41 @@
 		mmc_run_bkops(mq->card);
 }
 
+static void mmc_blk_hsq_req_done(struct mmc_request *mrq)
+{
+	struct mmc_queue_req *mqrq =
+		container_of(mrq, struct mmc_queue_req, brq.mrq);
+	struct request *req = mmc_queue_req_to_req(mqrq);
+	struct request_queue *q = req->q;
+	struct mmc_queue *mq = q->queuedata;
+	struct mmc_host *host = mq->card->host;
+	unsigned long flags;
+
+	if (mmc_blk_rq_error(&mqrq->brq) ||
+	    mmc_blk_urgent_bkops_needed(mq, mqrq)) {
+		spin_lock_irqsave(&mq->lock, flags);
+		mq->recovery_needed = true;
+		mq->recovery_req = req;
+		spin_unlock_irqrestore(&mq->lock, flags);
+
+		host->cqe_ops->cqe_recovery_start(host);
+
+		schedule_work(&mq->recovery_work);
+		return;
+	}
+
+	mmc_blk_rw_reset_success(mq, req);
+
+	/*
+	 * Block layer timeouts race with completions which means the normal
+	 * completion path cannot be used during recovery.
+	 */
+	if (mq->in_recovery)
+		mmc_blk_cqe_complete_rq(mq, req);
+	else
+		blk_mq_complete_request(req);
+}
+
 void mmc_blk_mq_complete(struct request *req)
 {
 	struct mmc_queue *mq = req->q->queuedata;
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
index d7bda1f..0f2349c 100644
--- a/drivers/mmc/core/core.c
+++ b/drivers/mmc/core/core.c
@@ -37,6 +37,7 @@
 
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "bus.h"
 #include "host.h"
 #include "sdio_bus.h"
@@ -1012,6 +1013,8 @@
 		host->ops->hs400_enhanced_strobe(host, &host->ios);
 
 	mmc_set_ios(host);
+
+	mmc_crypto_set_initial_state(host);
 }
 
 /**
diff --git a/drivers/mmc/core/crypto.c b/drivers/mmc/core/crypto.c
new file mode 100644
index 0000000..6755780
--- /dev/null
+++ b/drivers/mmc/core/crypto.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * MMC crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/mmc/host.h>
+
+#include "core.h"
+#include "crypto.h"
+#include "queue.h"
+
+void mmc_crypto_set_initial_state(struct mmc_host *host)
+{
+	/* Reset might clear all keys, so reprogram all the keys. */
+	if (host->caps2 & MMC_CAP2_CRYPTO)
+		blk_ksm_reprogram_all_keys(&host->ksm);
+}
+
+void mmc_crypto_setup_queue(struct request_queue *q, struct mmc_host *host)
+{
+	if (host->caps2 & MMC_CAP2_CRYPTO)
+		blk_ksm_register(&host->ksm, q);
+}
+EXPORT_SYMBOL_GPL(mmc_crypto_setup_queue);
+
+void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq)
+{
+	struct request *req = mmc_queue_req_to_req(mqrq);
+	struct mmc_request *mrq = &mqrq->brq.mrq;
+
+	if (!req->crypt_ctx)
+		return;
+
+	mrq->crypto_ctx = req->crypt_ctx;
+	if (req->crypt_keyslot)
+		mrq->crypto_key_slot = blk_ksm_get_slot_idx(req->crypt_keyslot);
+}
+EXPORT_SYMBOL_GPL(mmc_crypto_prepare_req);
diff --git a/drivers/mmc/core/crypto.h b/drivers/mmc/core/crypto.h
new file mode 100644
index 0000000..fbe9a52
--- /dev/null
+++ b/drivers/mmc/core/crypto.h
@@ -0,0 +1,40 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * MMC crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef _MMC_CORE_CRYPTO_H
+#define _MMC_CORE_CRYPTO_H
+
+struct mmc_host;
+struct mmc_queue_req;
+struct request_queue;
+
+#ifdef CONFIG_MMC_CRYPTO
+
+void mmc_crypto_set_initial_state(struct mmc_host *host);
+
+void mmc_crypto_setup_queue(struct request_queue *q, struct mmc_host *host);
+
+void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq);
+
+#else /* CONFIG_MMC_CRYPTO */
+
+static inline void mmc_crypto_set_initial_state(struct mmc_host *host)
+{
+}
+
+static inline void mmc_crypto_setup_queue(struct request_queue *q,
+					  struct mmc_host *host)
+{
+}
+
+static inline void mmc_crypto_prepare_req(struct mmc_queue_req *mqrq)
+{
+}
+
+#endif /* !CONFIG_MMC_CRYPTO */
+
+#endif /* _MMC_CORE_CRYPTO_H */
diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c
index e955f1e..25d1552 100644
--- a/drivers/mmc/core/host.c
+++ b/drivers/mmc/core/host.c
@@ -24,6 +24,7 @@
 #include <linux/mmc/slot-gpio.h>
 
 #include "core.h"
+#include "crypto.h"
 #include "host.h"
 #include "slot-gpio.h"
 #include "pwrseq.h"
diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
index ed939bb..56836ea 100644
--- a/drivers/mmc/core/mmc.c
+++ b/drivers/mmc/core/mmc.c
@@ -654,6 +654,9 @@
 				 mmc_hostname(card->host),
 				 card->ext_csd.cmdq_depth);
 		}
+		card->ext_csd.enhanced_rpmb_supported =
+					(card->ext_csd.rel_param &
+					 EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR);
 	}
 out:
 	return err;
@@ -793,6 +796,8 @@
 		card->ext_csd.enhanced_area_offset);
 MMC_DEV_ATTR(enhanced_area_size, "%u\n", card->ext_csd.enhanced_area_size);
 MMC_DEV_ATTR(raw_rpmb_size_mult, "%#x\n", card->ext_csd.raw_rpmb_size_mult);
+MMC_DEV_ATTR(enhanced_rpmb_supported, "%#x\n",
+	card->ext_csd.enhanced_rpmb_supported);
 MMC_DEV_ATTR(rel_sectors, "%#x\n", card->ext_csd.rel_sectors);
 MMC_DEV_ATTR(ocr, "0x%08x\n", card->ocr);
 MMC_DEV_ATTR(rca, "0x%04x\n", card->rca);
@@ -850,6 +855,7 @@
 	&dev_attr_enhanced_area_offset.attr,
 	&dev_attr_enhanced_area_size.attr,
 	&dev_attr_raw_rpmb_size_mult.attr,
+	&dev_attr_enhanced_rpmb_supported.attr,
 	&dev_attr_rel_sectors.attr,
 	&dev_attr_ocr.attr,
 	&dev_attr_rca.attr,
@@ -1858,15 +1864,19 @@
 	 */
 	card->reenable_cmdq = card->ext_csd.cmdq_en;
 
-	if (card->ext_csd.cmdq_en && !host->cqe_enabled) {
+	if (host->cqe_ops && !host->cqe_enabled) {
 		err = host->cqe_ops->cqe_enable(host, card);
-		if (err) {
-			pr_err("%s: Failed to enable CQE, error %d\n",
-				mmc_hostname(host), err);
-		} else {
+		if (!err) {
 			host->cqe_enabled = true;
-			pr_info("%s: Command Queue Engine enabled\n",
-				mmc_hostname(host));
+
+			if (card->ext_csd.cmdq_en) {
+				pr_info("%s: Command Queue Engine enabled\n",
+					mmc_hostname(host));
+			} else {
+				host->hsq_enabled = true;
+				pr_info("%s: Host Software Queue enabled\n",
+					mmc_hostname(host));
+			}
 		}
 	}
 
diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c
index 9cee10e..11e4e42 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -19,6 +19,7 @@
 #include "block.h"
 #include "core.h"
 #include "card.h"
+#include "crypto.h"
 #include "host.h"
 
 #define MMC_DMA_MAP_MERGE_SEGMENTS	512
@@ -62,7 +63,7 @@
 {
 	struct mmc_host *host = mq->card->host;
 
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		return mmc_cqe_issue_type(host, req);
 
 	if (req_op(req) == REQ_OP_READ || req_op(req) == REQ_OP_WRITE)
@@ -123,11 +124,13 @@
 {
 	struct request_queue *q = req->q;
 	struct mmc_queue *mq = q->queuedata;
+	struct mmc_card *card = mq->card;
+	struct mmc_host *host = card->host;
 	unsigned long flags;
 	bool ignore_tout;
 
 	spin_lock_irqsave(&mq->lock, flags);
-	ignore_tout = mq->recovery_needed || !mq->use_cqe;
+	ignore_tout = mq->recovery_needed || !mq->use_cqe || host->hsq_enabled;
 	spin_unlock_irqrestore(&mq->lock, flags);
 
 	return ignore_tout ? BLK_EH_RESET_TIMER : mmc_cqe_timed_out(req);
@@ -138,12 +141,13 @@
 	struct mmc_queue *mq = container_of(work, struct mmc_queue,
 					    recovery_work);
 	struct request_queue *q = mq->queue;
+	struct mmc_host *host = mq->card->host;
 
 	mmc_get_card(mq->card, &mq->ctx);
 
 	mq->in_recovery = true;
 
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		mmc_blk_cqe_recovery(mq);
 	else
 		mmc_blk_mq_recovery(mq);
@@ -154,6 +158,9 @@
 	mq->recovery_needed = false;
 	spin_unlock_irq(&mq->lock);
 
+	if (host->hsq_enabled)
+		host->cqe_ops->cqe_recovery_finish(host);
+
 	mmc_put_card(mq->card, &mq->ctx);
 
 	blk_mq_run_hw_queues(q, true);
@@ -273,6 +280,14 @@
 		}
 		break;
 	case MMC_ISSUE_ASYNC:
+		/*
+		 * For MMC host software queue, we only allow 2 requests in
+		 * flight to avoid a long latency.
+		 */
+		if (host->hsq_enabled && mq->in_flight[issue_type] > 2) {
+			spin_unlock_irq(&mq->lock);
+			return BLK_STS_RESOURCE;
+		}
 		break;
 	default:
 		/*
@@ -393,6 +408,8 @@
 	mutex_init(&mq->complete_lock);
 
 	init_waitqueue_head(&mq->wait);
+
+	mmc_crypto_setup_queue(mq->queue, host);
 }
 
 static inline bool mmc_merge_capable(struct mmc_host *host)
@@ -426,7 +443,7 @@
 	 * The queue depth for CQE must match the hardware because the request
 	 * tag is used to index the hardware queue.
 	 */
-	if (mq->use_cqe)
+	if (mq->use_cqe && !host->hsq_enabled)
 		mq->tag_set.queue_depth =
 			min_t(int, card->ext_csd.cmdq_depth, host->cqe_qdepth);
 	else
diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
index c6d7a0a..d539c8e 100644
--- a/drivers/mmc/core/sd.c
+++ b/drivers/mmc/core/sd.c
@@ -1090,6 +1090,16 @@
 		}
 	}
 
+	if (host->cqe_ops && !host->cqe_enabled) {
+		err = host->cqe_ops->cqe_enable(host, card);
+		if (!err) {
+			host->cqe_enabled = true;
+			host->hsq_enabled = true;
+			pr_info("%s: Host Software Queue enabled\n",
+				mmc_hostname(host));
+		}
+	}
+
 	if (host->caps2 & MMC_CAP2_AVOID_3_3V &&
 	    host->ios.signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
 		pr_err("%s: Host failed to negotiate down from 3.3V\n",
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 1b4a40d..121b23d 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -489,6 +489,8 @@
 	depends on ARCH_QCOM || (ARM && COMPILE_TEST)
 	depends on MMC_SDHCI_PLTFM
 	select MMC_SDHCI_IO_ACCESSORS
+	select MMC_CQHCI
+	select QCOM_SCM if MMC_CRYPTO && ARCH_QCOM
 	help
 	  This selects the Secure Digital Host Controller Interface (SDHCI)
 	  support present in Qualcomm SOCs. The controller supports
@@ -632,6 +634,7 @@
 	depends on ARCH_SPRD
 	depends on MMC_SDHCI_PLTFM
 	select MMC_SDHCI_IO_ACCESSORS
+	select MMC_HSQ
 	help
 	  This selects the SDIO Host Controller in Spreadtrum
 	  SoCs, this driver supports R11(IP version: R11P0).
@@ -936,6 +939,17 @@
 
 	  If unsure, say N.
 
+config MMC_HSQ
+	tristate "MMC Host Software Queue support"
+	help
+	  This selects the MMC Host Software Queue support. This may increase
+	  performance, if the host controller and its driver supports it.
+
+	  If you have a controller/driver supporting this interface, say Y or M
+	  here.
+
+	  If unsure, say N.
+
 config MMC_TOSHIBA_PCI
 	tristate "Toshiba Type A SD/MMC Card Interface Driver"
 	depends on PCI
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
index 11c4598..99837ef 100644
--- a/drivers/mmc/host/Makefile
+++ b/drivers/mmc/host/Makefile
@@ -98,6 +98,9 @@
 obj-$(CONFIG_MMC_SDHCI_OMAP)		+= sdhci-omap.o
 obj-$(CONFIG_MMC_SDHCI_SPRD)		+= sdhci-sprd.o
 obj-$(CONFIG_MMC_CQHCI)			+= cqhci.o
+cqhci-y					+= cqhci-core.o
+cqhci-$(CONFIG_MMC_CRYPTO)		+= cqhci-crypto.o
+obj-$(CONFIG_MMC_HSQ)			+= mmc_hsq.o
 
 ifeq ($(CONFIG_CB710_DEBUG),y)
 	CFLAGS-cb710-mmc	+= -DDEBUG
diff --git a/drivers/mmc/host/cqhci-core.c b/drivers/mmc/host/cqhci-core.c
new file mode 100644
index 0000000..35be0bd
--- /dev/null
+++ b/drivers/mmc/host/cqhci-core.c
@@ -0,0 +1,1209 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+ */
+
+#include <linux/delay.h>
+#include <linux/highmem.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/dma-mapping.h>
+#include <linux/slab.h>
+#include <linux/scatterlist.h>
+#include <linux/platform_device.h>
+#include <linux/ktime.h>
+
+#include <linux/mmc/mmc.h>
+#include <linux/mmc/host.h>
+#include <linux/mmc/card.h>
+
+#include "cqhci.h"
+#include "cqhci-crypto.h"
+
+#define DCMD_SLOT 31
+#define NUM_SLOTS 32
+
+struct cqhci_slot {
+	struct mmc_request *mrq;
+	unsigned int flags;
+#define CQHCI_EXTERNAL_TIMEOUT	BIT(0)
+#define CQHCI_COMPLETED		BIT(1)
+#define CQHCI_HOST_CRC		BIT(2)
+#define CQHCI_HOST_TIMEOUT	BIT(3)
+#define CQHCI_HOST_OTHER	BIT(4)
+};
+
+static inline u8 *get_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->desc_base + (tag * cq_host->slot_sz);
+}
+
+static inline u8 *get_link_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	u8 *desc = get_desc(cq_host, tag);
+
+	return desc + cq_host->task_desc_len;
+}
+
+static inline dma_addr_t get_trans_desc_dma(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->trans_desc_dma_base +
+		(cq_host->mmc->max_segs * tag *
+		 cq_host->trans_desc_len);
+}
+
+static inline u8 *get_trans_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	return cq_host->trans_desc_base +
+		(cq_host->trans_desc_len * cq_host->mmc->max_segs * tag);
+}
+
+static void setup_trans_desc(struct cqhci_host *cq_host, u8 tag)
+{
+	u8 *link_temp;
+	dma_addr_t trans_temp;
+
+	link_temp = get_link_desc(cq_host, tag);
+	trans_temp = get_trans_desc_dma(cq_host, tag);
+
+	memset(link_temp, 0, cq_host->link_desc_len);
+	if (cq_host->link_desc_len > 8)
+		*(link_temp + 8) = 0;
+
+	if (tag == DCMD_SLOT && (cq_host->mmc->caps2 & MMC_CAP2_CQE_DCMD)) {
+		*link_temp = CQHCI_VALID(0) | CQHCI_ACT(0) | CQHCI_END(1);
+		return;
+	}
+
+	*link_temp = CQHCI_VALID(1) | CQHCI_ACT(0x6) | CQHCI_END(0);
+
+	if (cq_host->dma64) {
+		__le64 *data_addr = (__le64 __force *)(link_temp + 4);
+
+		data_addr[0] = cpu_to_le64(trans_temp);
+	} else {
+		__le32 *data_addr = (__le32 __force *)(link_temp + 4);
+
+		data_addr[0] = cpu_to_le32(trans_temp);
+	}
+}
+
+static void cqhci_set_irqs(struct cqhci_host *cq_host, u32 set)
+{
+	cqhci_writel(cq_host, set, CQHCI_ISTE);
+	cqhci_writel(cq_host, set, CQHCI_ISGE);
+}
+
+#define DRV_NAME "cqhci"
+
+#define CQHCI_DUMP(f, x...) \
+	pr_err("%s: " DRV_NAME ": " f, mmc_hostname(mmc), ## x)
+
+static void cqhci_dumpregs(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+
+	CQHCI_DUMP("============ CQHCI REGISTER DUMP ===========\n");
+
+	CQHCI_DUMP("Caps:      0x%08x | Version:  0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CAP),
+		   cqhci_readl(cq_host, CQHCI_VER));
+	CQHCI_DUMP("Config:    0x%08x | Control:  0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CFG),
+		   cqhci_readl(cq_host, CQHCI_CTL));
+	CQHCI_DUMP("Int stat:  0x%08x | Int enab: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_IS),
+		   cqhci_readl(cq_host, CQHCI_ISTE));
+	CQHCI_DUMP("Int sig:   0x%08x | Int Coal: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_ISGE),
+		   cqhci_readl(cq_host, CQHCI_IC));
+	CQHCI_DUMP("TDL base:  0x%08x | TDL up32: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TDLBA),
+		   cqhci_readl(cq_host, CQHCI_TDLBAU));
+	CQHCI_DUMP("Doorbell:  0x%08x | TCN:      0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TDBR),
+		   cqhci_readl(cq_host, CQHCI_TCN));
+	CQHCI_DUMP("Dev queue: 0x%08x | Dev Pend: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_DQS),
+		   cqhci_readl(cq_host, CQHCI_DPT));
+	CQHCI_DUMP("Task clr:  0x%08x | SSC1:     0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_TCLR),
+		   cqhci_readl(cq_host, CQHCI_SSC1));
+	CQHCI_DUMP("SSC2:      0x%08x | DCMD rsp: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_SSC2),
+		   cqhci_readl(cq_host, CQHCI_CRDCT));
+	CQHCI_DUMP("RED mask:  0x%08x | TERRI:    0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_RMEM),
+		   cqhci_readl(cq_host, CQHCI_TERRI));
+	CQHCI_DUMP("Resp idx:  0x%08x | Resp arg: 0x%08x\n",
+		   cqhci_readl(cq_host, CQHCI_CRI),
+		   cqhci_readl(cq_host, CQHCI_CRA));
+
+	if (cq_host->ops->dumpregs)
+		cq_host->ops->dumpregs(mmc);
+	else
+		CQHCI_DUMP(": ===========================================\n");
+}
+
+/**
+ * The allocated descriptor table for task, link & transfer descritors
+ * looks like:
+ * |----------|
+ * |task desc |  |->|----------|
+ * |----------|  |  |trans desc|
+ * |link desc-|->|  |----------|
+ * |----------|          .
+ *      .                .
+ *  no. of slots      max-segs
+ *      .           |----------|
+ * |----------|
+ * The idea here is to create the [task+trans] table and mark & point the
+ * link desc to the transfer desc table on a per slot basis.
+ */
+static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
+{
+	int i = 0;
+
+	/* task descriptor can be 64/128 bit irrespective of arch */
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
+		cqhci_writel(cq_host, cqhci_readl(cq_host, CQHCI_CFG) |
+			       CQHCI_TASK_DESC_SZ, CQHCI_CFG);
+		cq_host->task_desc_len = 16;
+	} else {
+		cq_host->task_desc_len = 8;
+	}
+
+	/*
+	 * 96 bits length of transfer desc instead of 128 bits which means
+	 * ADMA would expect next valid descriptor at the 96th bit
+	 * or 128th bit
+	 */
+	if (cq_host->dma64) {
+		if (cq_host->quirks & CQHCI_QUIRK_SHORT_TXFR_DESC_SZ)
+			cq_host->trans_desc_len = 12;
+		else
+			cq_host->trans_desc_len = 16;
+		cq_host->link_desc_len = 16;
+	} else {
+		cq_host->trans_desc_len = 8;
+		cq_host->link_desc_len = 8;
+	}
+
+	/* total size of a slot: 1 task & 1 transfer (link) */
+	cq_host->slot_sz = cq_host->task_desc_len + cq_host->link_desc_len;
+
+	cq_host->desc_size = cq_host->slot_sz * cq_host->num_slots;
+
+	cq_host->data_size = cq_host->trans_desc_len * cq_host->mmc->max_segs *
+		cq_host->mmc->cqe_qdepth;
+
+	pr_debug("%s: cqhci: desc_size: %zu data_sz: %zu slot-sz: %d\n",
+		 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size,
+		 cq_host->slot_sz);
+
+	/*
+	 * allocate a dma-mapped chunk of memory for the descriptors
+	 * allocate a dma-mapped chunk of memory for link descriptors
+	 * setup each link-desc memory offset per slot-number to
+	 * the descriptor table.
+	 */
+	cq_host->desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
+						 cq_host->desc_size,
+						 &cq_host->desc_dma_base,
+						 GFP_KERNEL);
+	if (!cq_host->desc_base)
+		return -ENOMEM;
+
+	cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
+					      cq_host->data_size,
+					      &cq_host->trans_desc_dma_base,
+					      GFP_KERNEL);
+	if (!cq_host->trans_desc_base) {
+		dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
+				   cq_host->desc_base,
+				   cq_host->desc_dma_base);
+		cq_host->desc_base = NULL;
+		cq_host->desc_dma_base = 0;
+		return -ENOMEM;
+	}
+
+	pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
+		 mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
+		(unsigned long long)cq_host->desc_dma_base,
+		(unsigned long long)cq_host->trans_desc_dma_base);
+
+	for (; i < (cq_host->num_slots); i++)
+		setup_trans_desc(cq_host, i);
+
+	return 0;
+}
+
+static void __cqhci_enable(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+	u32 cqcfg;
+
+	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+
+	/* Configuration must not be changed while enabled */
+	if (cqcfg & CQHCI_ENABLE) {
+		cqcfg &= ~CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+	}
+
+	cqcfg &= ~(CQHCI_DCMD | CQHCI_TASK_DESC_SZ);
+
+	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
+		cqcfg |= CQHCI_DCMD;
+
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128)
+		cqcfg |= CQHCI_TASK_DESC_SZ;
+
+	if (mmc->caps2 & MMC_CAP2_CRYPTO)
+		cqcfg |= CQHCI_CRYPTO_GENERAL_ENABLE;
+
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base),
+		     CQHCI_TDLBA);
+	cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base),
+		     CQHCI_TDLBAU);
+
+	cqhci_writel(cq_host, cq_host->rca, CQHCI_SSC2);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	cqcfg |= CQHCI_ENABLE;
+
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	if (cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT)
+		cqhci_writel(cq_host, 0, CQHCI_CTL);
+
+	mmc->cqe_on = true;
+
+	if (cq_host->ops->enable)
+		cq_host->ops->enable(mmc);
+
+	/* Ensure all writes are done before interrupts are enabled */
+	wmb();
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
+
+	cq_host->activated = true;
+}
+
+static void __cqhci_disable(struct cqhci_host *cq_host)
+{
+	u32 cqcfg;
+
+	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+	cqcfg &= ~CQHCI_ENABLE;
+	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+
+	cq_host->mmc->cqe_on = false;
+
+	cq_host->activated = false;
+}
+
+int cqhci_deactivate(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (cq_host->enabled && cq_host->activated)
+		__cqhci_disable(cq_host);
+
+	return 0;
+}
+EXPORT_SYMBOL(cqhci_deactivate);
+
+int cqhci_resume(struct mmc_host *mmc)
+{
+	/* Re-enable is done upon first request */
+	return 0;
+}
+EXPORT_SYMBOL(cqhci_resume);
+
+static int cqhci_enable(struct mmc_host *mmc, struct mmc_card *card)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int err;
+
+	if (!card->ext_csd.cmdq_en)
+		return -EINVAL;
+
+	if (cq_host->enabled)
+		return 0;
+
+	cq_host->rca = card->rca;
+
+	err = cqhci_host_alloc_tdl(cq_host);
+	if (err) {
+		pr_err("%s: Failed to enable CQE, error %d\n",
+		       mmc_hostname(mmc), err);
+		return err;
+	}
+
+	__cqhci_enable(cq_host);
+
+	cq_host->enabled = true;
+
+#ifdef DEBUG
+	cqhci_dumpregs(cq_host);
+#endif
+	return 0;
+}
+
+/* CQHCI is idle and should halt immediately, so set a small timeout */
+#define CQHCI_OFF_TIMEOUT 100
+
+static u32 cqhci_read_ctl(struct cqhci_host *cq_host)
+{
+	return cqhci_readl(cq_host, CQHCI_CTL);
+}
+
+static void cqhci_off(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	u32 reg;
+	int err;
+
+	if (!cq_host->enabled || !mmc->cqe_on || cq_host->recovery_halt)
+		return;
+
+	if (cq_host->ops->disable)
+		cq_host->ops->disable(mmc, false);
+
+	cqhci_writel(cq_host, CQHCI_HALT, CQHCI_CTL);
+
+	err = readx_poll_timeout(cqhci_read_ctl, cq_host, reg,
+				 reg & CQHCI_HALT, 0, CQHCI_OFF_TIMEOUT);
+	if (err < 0)
+		pr_err("%s: cqhci: CQE stuck on\n", mmc_hostname(mmc));
+	else
+		pr_debug("%s: cqhci: CQE off\n", mmc_hostname(mmc));
+
+	mmc->cqe_on = false;
+}
+
+static void cqhci_disable(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (!cq_host->enabled)
+		return;
+
+	cqhci_off(mmc);
+
+	__cqhci_disable(cq_host);
+
+	dmam_free_coherent(mmc_dev(mmc), cq_host->data_size,
+			   cq_host->trans_desc_base,
+			   cq_host->trans_desc_dma_base);
+
+	dmam_free_coherent(mmc_dev(mmc), cq_host->desc_size,
+			   cq_host->desc_base,
+			   cq_host->desc_dma_base);
+
+	cq_host->trans_desc_base = NULL;
+	cq_host->desc_base = NULL;
+
+	cq_host->enabled = false;
+}
+
+static void cqhci_prep_task_desc(struct mmc_request *mrq,
+				 struct cqhci_host *cq_host, int tag)
+{
+	__le64 *task_desc = (__le64 __force *)get_desc(cq_host, tag);
+	u32 req_flags = mrq->data->flags;
+	u64 desc0;
+
+	desc0 = CQHCI_VALID(1) |
+		CQHCI_END(1) |
+		CQHCI_INT(1) |
+		CQHCI_ACT(0x5) |
+		CQHCI_FORCED_PROG(!!(req_flags & MMC_DATA_FORCED_PRG)) |
+		CQHCI_DATA_TAG(!!(req_flags & MMC_DATA_DAT_TAG)) |
+		CQHCI_DATA_DIR(!!(req_flags & MMC_DATA_READ)) |
+		CQHCI_PRIORITY(!!(req_flags & MMC_DATA_PRIO)) |
+		CQHCI_QBAR(!!(req_flags & MMC_DATA_QBR)) |
+		CQHCI_REL_WRITE(!!(req_flags & MMC_DATA_REL_WR)) |
+		CQHCI_BLK_COUNT(mrq->data->blocks) |
+		CQHCI_BLK_ADDR((u64)mrq->data->blk_addr);
+
+	task_desc[0] = cpu_to_le64(desc0);
+
+	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
+		u64 desc1 = cqhci_crypto_prep_task_desc(mrq);
+
+		task_desc[1] = cpu_to_le64(desc1);
+
+		pr_debug("%s: cqhci: tag %d task descriptor 0x%016llx%016llx\n",
+			 mmc_hostname(mrq->host), mrq->tag, desc1, desc0);
+	} else {
+		pr_debug("%s: cqhci: tag %d task descriptor 0x%016llx\n",
+			 mmc_hostname(mrq->host), mrq->tag, desc0);
+	}
+}
+
+static int cqhci_dma_map(struct mmc_host *host, struct mmc_request *mrq)
+{
+	int sg_count;
+	struct mmc_data *data = mrq->data;
+
+	if (!data)
+		return -EINVAL;
+
+	sg_count = dma_map_sg(mmc_dev(host), data->sg,
+			      data->sg_len,
+			      (data->flags & MMC_DATA_WRITE) ?
+			      DMA_TO_DEVICE : DMA_FROM_DEVICE);
+	if (!sg_count) {
+		pr_err("%s: sg-len: %d\n", __func__, data->sg_len);
+		return -ENOMEM;
+	}
+
+	return sg_count;
+}
+
+static void cqhci_set_tran_desc(u8 *desc, dma_addr_t addr, int len, bool end,
+				bool dma64)
+{
+	__le32 *attr = (__le32 __force *)desc;
+
+	*attr = (CQHCI_VALID(1) |
+		 CQHCI_END(end ? 1 : 0) |
+		 CQHCI_INT(0) |
+		 CQHCI_ACT(0x4) |
+		 CQHCI_DAT_LENGTH(len));
+
+	if (dma64) {
+		__le64 *dataddr = (__le64 __force *)(desc + 4);
+
+		dataddr[0] = cpu_to_le64(addr);
+	} else {
+		__le32 *dataddr = (__le32 __force *)(desc + 4);
+
+		dataddr[0] = cpu_to_le32(addr);
+	}
+}
+
+static int cqhci_prep_tran_desc(struct mmc_request *mrq,
+			       struct cqhci_host *cq_host, int tag)
+{
+	struct mmc_data *data = mrq->data;
+	int i, sg_count, len;
+	bool end = false;
+	bool dma64 = cq_host->dma64;
+	dma_addr_t addr;
+	u8 *desc;
+	struct scatterlist *sg;
+
+	sg_count = cqhci_dma_map(mrq->host, mrq);
+	if (sg_count < 0) {
+		pr_err("%s: %s: unable to map sg lists, %d\n",
+				mmc_hostname(mrq->host), __func__, sg_count);
+		return sg_count;
+	}
+
+	desc = get_trans_desc(cq_host, tag);
+
+	for_each_sg(data->sg, sg, sg_count, i) {
+		addr = sg_dma_address(sg);
+		len = sg_dma_len(sg);
+
+		if ((i+1) == sg_count)
+			end = true;
+		cqhci_set_tran_desc(desc, addr, len, end, dma64);
+		desc += cq_host->trans_desc_len;
+	}
+
+	return 0;
+}
+
+static void cqhci_prep_dcmd_desc(struct mmc_host *mmc,
+				   struct mmc_request *mrq)
+{
+	u64 *task_desc = NULL;
+	u64 data = 0;
+	u8 resp_type;
+	u8 *desc;
+	__le64 *dataddr;
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	u8 timing;
+
+	if (!(mrq->cmd->flags & MMC_RSP_PRESENT)) {
+		resp_type = 0x0;
+		timing = 0x1;
+	} else {
+		if (mrq->cmd->flags & MMC_RSP_R1B) {
+			resp_type = 0x3;
+			timing = 0x0;
+		} else {
+			resp_type = 0x2;
+			timing = 0x1;
+		}
+	}
+
+	task_desc = (__le64 __force *)get_desc(cq_host, cq_host->dcmd_slot);
+	memset(task_desc, 0, cq_host->task_desc_len);
+	data |= (CQHCI_VALID(1) |
+		 CQHCI_END(1) |
+		 CQHCI_INT(1) |
+		 CQHCI_QBAR(1) |
+		 CQHCI_ACT(0x5) |
+		 CQHCI_CMD_INDEX(mrq->cmd->opcode) |
+		 CQHCI_CMD_TIMING(timing) | CQHCI_RESP_TYPE(resp_type));
+	if (cq_host->ops->update_dcmd_desc)
+		cq_host->ops->update_dcmd_desc(mmc, mrq, &data);
+	*task_desc |= data;
+	desc = (u8 *)task_desc;
+	pr_debug("%s: cqhci: dcmd: cmd: %d timing: %d resp: %d\n",
+		 mmc_hostname(mmc), mrq->cmd->opcode, timing, resp_type);
+	dataddr = (__le64 __force *)(desc + 4);
+	dataddr[0] = cpu_to_le64((u64)mrq->cmd->arg);
+
+}
+
+static void cqhci_post_req(struct mmc_host *host, struct mmc_request *mrq)
+{
+	struct mmc_data *data = mrq->data;
+
+	if (data) {
+		dma_unmap_sg(mmc_dev(host), data->sg, data->sg_len,
+			     (data->flags & MMC_DATA_READ) ?
+			     DMA_FROM_DEVICE : DMA_TO_DEVICE);
+	}
+}
+
+static inline int cqhci_tag(struct mmc_request *mrq)
+{
+	return mrq->cmd ? DCMD_SLOT : mrq->tag;
+}
+
+static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	int err = 0;
+	int tag = cqhci_tag(mrq);
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	unsigned long flags;
+
+	if (!cq_host->enabled) {
+		pr_err("%s: cqhci: not enabled\n", mmc_hostname(mmc));
+		return -EINVAL;
+	}
+
+	/* First request after resume has to re-enable */
+	if (!cq_host->activated)
+		__cqhci_enable(cq_host);
+
+	if (!mmc->cqe_on) {
+		cqhci_writel(cq_host, 0, CQHCI_CTL);
+		mmc->cqe_on = true;
+		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",
+			       mmc_hostname(mmc));
+		}
+		if (cq_host->ops->enable)
+			cq_host->ops->enable(mmc);
+	}
+
+	if (mrq->data) {
+		cqhci_prep_task_desc(mrq, cq_host, tag);
+
+		err = cqhci_prep_tran_desc(mrq, cq_host, tag);
+		if (err) {
+			pr_err("%s: cqhci: failed to setup tx desc: %d\n",
+			       mmc_hostname(mmc), err);
+			return err;
+		}
+	} else {
+		cqhci_prep_dcmd_desc(mmc, mrq);
+	}
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+
+	if (cq_host->recovery_halt) {
+		err = -EBUSY;
+		goto out_unlock;
+	}
+
+	cq_host->slot[tag].mrq = mrq;
+	cq_host->slot[tag].flags = 0;
+
+	cq_host->qcnt += 1;
+	/* Make sure descriptors are ready before ringing the doorbell */
+	wmb();
+	cqhci_writel(cq_host, 1 << tag, CQHCI_TDBR);
+	if (!(cqhci_readl(cq_host, CQHCI_TDBR) & (1 << tag)))
+		pr_debug("%s: cqhci: doorbell not set for tag %d\n",
+			 mmc_hostname(mmc), tag);
+out_unlock:
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	if (err)
+		cqhci_post_req(mmc, mrq);
+
+	return err;
+}
+
+static void cqhci_recovery_needed(struct mmc_host *mmc, struct mmc_request *mrq,
+				  bool notify)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	if (!cq_host->recovery_halt) {
+		cq_host->recovery_halt = true;
+		pr_debug("%s: cqhci: recovery needed\n", mmc_hostname(mmc));
+		wake_up(&cq_host->wait_queue);
+		if (notify && mrq->recovery_notifier)
+			mrq->recovery_notifier(mrq);
+	}
+}
+
+static unsigned int cqhci_error_flags(int error1, int error2)
+{
+	int error = error1 ? error1 : error2;
+
+	switch (error) {
+	case -EILSEQ:
+		return CQHCI_HOST_CRC;
+	case -ETIMEDOUT:
+		return CQHCI_HOST_TIMEOUT;
+	default:
+		return CQHCI_HOST_OTHER;
+	}
+}
+
+static void cqhci_error_irq(struct mmc_host *mmc, u32 status, int cmd_error,
+			    int data_error)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	struct cqhci_slot *slot;
+	u32 terri;
+	u32 tdpe;
+	int tag;
+
+	spin_lock(&cq_host->lock);
+
+	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",
+		 mmc_hostname(mmc), status, cmd_error, data_error, terri);
+
+	/* Forget about errors when recovery has already been triggered */
+	if (cq_host->recovery_halt)
+		goto out_unlock;
+
+	if (!cq_host->qcnt) {
+		WARN_ONCE(1, "%s: cqhci: error when idle. IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
+			  mmc_hostname(mmc), status, cmd_error, data_error,
+			  terri);
+		goto out_unlock;
+	}
+
+	if (CQHCI_TERRI_C_VALID(terri)) {
+		tag = CQHCI_TERRI_C_TASK(terri);
+		slot = &cq_host->slot[tag];
+		if (slot->mrq) {
+			slot->flags = cqhci_error_flags(cmd_error, data_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	if (CQHCI_TERRI_D_VALID(terri)) {
+		tag = CQHCI_TERRI_D_TASK(terri);
+		slot = &cq_host->slot[tag];
+		if (slot->mrq) {
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	/*
+	 * Handle ICCE ("Invalid Crypto Configuration Error").  This should
+	 * never happen, since the block layer ensures that all crypto-enabled
+	 * I/O requests have a valid keyslot before they reach the driver.
+	 *
+	 * Note that GCE ("General Crypto Error") is different; it already got
+	 * handled above by checking TERRI.
+	 */
+	if (status & CQHCI_IS_ICCE) {
+		tdpe = cqhci_readl(cq_host, CQHCI_TDPE);
+		WARN_ONCE(1,
+			  "%s: cqhci: invalid crypto configuration error. IRQ status: 0x%08x TDPE: 0x%08x\n",
+			  mmc_hostname(mmc), status, tdpe);
+		while (tdpe != 0) {
+			tag = __ffs(tdpe);
+			tdpe &= ~(1 << tag);
+			slot = &cq_host->slot[tag];
+			if (!slot->mrq)
+				continue;
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+		}
+	}
+
+	if (!cq_host->recovery_halt) {
+		/*
+		 * The only way to guarantee forward progress is to mark at
+		 * least one task in error, so if none is indicated, pick one.
+		 */
+		for (tag = 0; tag < NUM_SLOTS; tag++) {
+			slot = &cq_host->slot[tag];
+			if (!slot->mrq)
+				continue;
+			slot->flags = cqhci_error_flags(data_error, cmd_error);
+			cqhci_recovery_needed(mmc, slot->mrq, true);
+			break;
+		}
+	}
+
+out_unlock:
+	spin_unlock(&cq_host->lock);
+}
+
+static void cqhci_finish_mrq(struct mmc_host *mmc, unsigned int tag)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	struct mmc_request *mrq = slot->mrq;
+	struct mmc_data *data;
+
+	if (!mrq) {
+		WARN_ONCE(1, "%s: cqhci: spurious TCN for tag %d\n",
+			  mmc_hostname(mmc), tag);
+		return;
+	}
+
+	/* No completions allowed during recovery */
+	if (cq_host->recovery_halt) {
+		slot->flags |= CQHCI_COMPLETED;
+		return;
+	}
+
+	slot->mrq = NULL;
+
+	cq_host->qcnt -= 1;
+
+	data = mrq->data;
+	if (data) {
+		if (data->error)
+			data->bytes_xfered = 0;
+		else
+			data->bytes_xfered = data->blksz * data->blocks;
+	}
+
+	mmc_cqe_request_done(mmc, mrq);
+}
+
+irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
+		      int data_error)
+{
+	u32 status;
+	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);
+
+	pr_debug("%s: cqhci: IRQ status: 0x%08x\n", mmc_hostname(mmc), status);
+
+	if ((status & (CQHCI_IS_RED | CQHCI_IS_GCE | CQHCI_IS_ICCE)) ||
+	    cmd_error || data_error)
+		cqhci_error_irq(mmc, status, cmd_error, data_error);
+
+	if (status & CQHCI_IS_TCC) {
+		/* read TCN and complete the request */
+		comp_status = cqhci_readl(cq_host, CQHCI_TCN);
+		cqhci_writel(cq_host, comp_status, CQHCI_TCN);
+		pr_debug("%s: cqhci: TCN: 0x%08lx\n",
+			 mmc_hostname(mmc), comp_status);
+
+		spin_lock(&cq_host->lock);
+
+		for_each_set_bit(tag, &comp_status, cq_host->num_slots) {
+			/* complete the corresponding mrq */
+			pr_debug("%s: cqhci: completing tag %lu\n",
+				 mmc_hostname(mmc), tag);
+			cqhci_finish_mrq(mmc, tag);
+		}
+
+		if (cq_host->waiting_for_idle && !cq_host->qcnt) {
+			cq_host->waiting_for_idle = false;
+			wake_up(&cq_host->wait_queue);
+		}
+
+		spin_unlock(&cq_host->lock);
+	}
+
+	if (status & CQHCI_IS_TCL)
+		wake_up(&cq_host->wait_queue);
+
+	if (status & CQHCI_IS_HAC)
+		wake_up(&cq_host->wait_queue);
+
+	return IRQ_HANDLED;
+}
+EXPORT_SYMBOL(cqhci_irq);
+
+static bool cqhci_is_idle(struct cqhci_host *cq_host, int *ret)
+{
+	unsigned long flags;
+	bool is_idle;
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	is_idle = !cq_host->qcnt || cq_host->recovery_halt;
+	*ret = cq_host->recovery_halt ? -EBUSY : 0;
+	cq_host->waiting_for_idle = !is_idle;
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	return is_idle;
+}
+
+static int cqhci_wait_for_idle(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int ret;
+
+	wait_event(cq_host->wait_queue, cqhci_is_idle(cq_host, &ret));
+
+	return ret;
+}
+
+static bool cqhci_timeout(struct mmc_host *mmc, struct mmc_request *mrq,
+			  bool *recovery_needed)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	int tag = cqhci_tag(mrq);
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	unsigned long flags;
+	bool timed_out;
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	timed_out = slot->mrq == mrq;
+	if (timed_out) {
+		slot->flags |= CQHCI_EXTERNAL_TIMEOUT;
+		cqhci_recovery_needed(mmc, mrq, false);
+		*recovery_needed = cq_host->recovery_halt;
+	}
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	if (timed_out) {
+		pr_err("%s: cqhci: timeout for tag %d\n",
+		       mmc_hostname(mmc), tag);
+		cqhci_dumpregs(cq_host);
+	}
+
+	return timed_out;
+}
+
+static bool cqhci_tasks_cleared(struct cqhci_host *cq_host)
+{
+	return !(cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_CLEAR_ALL_TASKS);
+}
+
+static bool cqhci_clear_all_tasks(struct mmc_host *mmc, unsigned int timeout)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	bool ret;
+	u32 ctl;
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_TCL);
+
+	ctl = cqhci_readl(cq_host, CQHCI_CTL);
+	ctl |= CQHCI_CLEAR_ALL_TASKS;
+	cqhci_writel(cq_host, ctl, CQHCI_CTL);
+
+	wait_event_timeout(cq_host->wait_queue, cqhci_tasks_cleared(cq_host),
+			   msecs_to_jiffies(timeout) + 1);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	ret = cqhci_tasks_cleared(cq_host);
+
+	if (!ret)
+		pr_debug("%s: cqhci: Failed to clear tasks\n",
+			 mmc_hostname(mmc));
+
+	return ret;
+}
+
+static bool cqhci_halted(struct cqhci_host *cq_host)
+{
+	return cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT;
+}
+
+static bool cqhci_halt(struct mmc_host *mmc, unsigned int timeout)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	bool ret;
+	u32 ctl;
+
+	if (cqhci_halted(cq_host))
+		return true;
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_HAC);
+
+	ctl = cqhci_readl(cq_host, CQHCI_CTL);
+	ctl |= CQHCI_HALT;
+	cqhci_writel(cq_host, ctl, CQHCI_CTL);
+
+	wait_event_timeout(cq_host->wait_queue, cqhci_halted(cq_host),
+			   msecs_to_jiffies(timeout) + 1);
+
+	cqhci_set_irqs(cq_host, 0);
+
+	ret = cqhci_halted(cq_host);
+
+	if (!ret)
+		pr_debug("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
+
+	return ret;
+}
+
+/*
+ * After halting we expect to be able to use the command line. We interpret the
+ * failure to halt to mean the data lines might still be in use (and the upper
+ * layers will need to send a STOP command), so we set the timeout based on a
+ * generous command timeout.
+ */
+#define CQHCI_START_HALT_TIMEOUT	5
+
+static void cqhci_recovery_start(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+
+	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
+
+	WARN_ON(!cq_host->recovery_halt);
+
+	cqhci_halt(mmc, CQHCI_START_HALT_TIMEOUT);
+
+	if (cq_host->ops->disable)
+		cq_host->ops->disable(mmc, true);
+
+	mmc->cqe_on = false;
+}
+
+static int cqhci_error_from_flags(unsigned int flags)
+{
+	if (!flags)
+		return 0;
+
+	/* CRC errors might indicate re-tuning so prefer to report that */
+	if (flags & CQHCI_HOST_CRC)
+		return -EILSEQ;
+
+	if (flags & (CQHCI_EXTERNAL_TIMEOUT | CQHCI_HOST_TIMEOUT))
+		return -ETIMEDOUT;
+
+	return -EIO;
+}
+
+static void cqhci_recover_mrq(struct cqhci_host *cq_host, unsigned int tag)
+{
+	struct cqhci_slot *slot = &cq_host->slot[tag];
+	struct mmc_request *mrq = slot->mrq;
+	struct mmc_data *data;
+
+	if (!mrq)
+		return;
+
+	slot->mrq = NULL;
+
+	cq_host->qcnt -= 1;
+
+	data = mrq->data;
+	if (data) {
+		data->bytes_xfered = 0;
+		data->error = cqhci_error_from_flags(slot->flags);
+	} else {
+		mrq->cmd->error = cqhci_error_from_flags(slot->flags);
+	}
+
+	mmc_cqe_request_done(cq_host->mmc, mrq);
+}
+
+static void cqhci_recover_mrqs(struct cqhci_host *cq_host)
+{
+	int i;
+
+	for (i = 0; i < cq_host->num_slots; i++)
+		cqhci_recover_mrq(cq_host, i);
+}
+
+/*
+ * By now the command and data lines should be unused so there is no reason for
+ * CQHCI to take a long time to halt, but if it doesn't halt there could be
+ * problems clearing tasks, so be generous.
+ */
+#define CQHCI_FINISH_HALT_TIMEOUT	20
+
+/* CQHCI could be expected to clear it's internal state pretty quickly */
+#define CQHCI_CLEAR_TIMEOUT		20
+
+static void cqhci_recovery_finish(struct mmc_host *mmc)
+{
+	struct cqhci_host *cq_host = mmc->cqe_private;
+	unsigned long flags;
+	u32 cqcfg;
+	bool ok;
+
+	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
+
+	WARN_ON(!cq_host->recovery_halt);
+
+	ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
+
+	if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
+		ok = false;
+
+	/*
+	 * The specification contradicts itself, by saying that tasks cannot be
+	 * cleared if CQHCI does not halt, but if CQHCI does not halt, it should
+	 * be disabled/re-enabled, but not to disable before clearing tasks.
+	 * Have a go anyway.
+	 */
+	if (!ok) {
+		pr_debug("%s: cqhci: disable / re-enable\n", mmc_hostname(mmc));
+		cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
+		cqcfg &= ~CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+		cqcfg |= CQHCI_ENABLE;
+		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
+		/* Be sure that there are no tasks */
+		ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
+		if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
+			ok = false;
+		WARN_ON(!ok);
+	}
+
+	cqhci_recover_mrqs(cq_host);
+
+	WARN_ON(cq_host->qcnt);
+
+	spin_lock_irqsave(&cq_host->lock, flags);
+	cq_host->qcnt = 0;
+	cq_host->recovery_halt = false;
+	mmc->cqe_on = false;
+	spin_unlock_irqrestore(&cq_host->lock, flags);
+
+	/* Ensure all writes are done before interrupts are re-enabled */
+	wmb();
+
+	cqhci_writel(cq_host, CQHCI_IS_HAC | CQHCI_IS_TCL, CQHCI_IS);
+
+	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
+
+	pr_debug("%s: cqhci: recovery done\n", mmc_hostname(mmc));
+}
+
+static const struct mmc_cqe_ops cqhci_cqe_ops = {
+	.cqe_enable = cqhci_enable,
+	.cqe_disable = cqhci_disable,
+	.cqe_request = cqhci_request,
+	.cqe_post_req = cqhci_post_req,
+	.cqe_off = cqhci_off,
+	.cqe_wait_for_idle = cqhci_wait_for_idle,
+	.cqe_timeout = cqhci_timeout,
+	.cqe_recovery_start = cqhci_recovery_start,
+	.cqe_recovery_finish = cqhci_recovery_finish,
+};
+
+struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev)
+{
+	struct cqhci_host *cq_host;
+	struct resource *cqhci_memres = NULL;
+
+	/* check and setup CMDQ interface */
+	cqhci_memres = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "cqhci_mem");
+	if (!cqhci_memres) {
+		dev_dbg(&pdev->dev, "CMDQ not supported\n");
+		return ERR_PTR(-EINVAL);
+	}
+
+	cq_host = devm_kzalloc(&pdev->dev, sizeof(*cq_host), GFP_KERNEL);
+	if (!cq_host)
+		return ERR_PTR(-ENOMEM);
+	cq_host->mmio = devm_ioremap(&pdev->dev,
+				     cqhci_memres->start,
+				     resource_size(cqhci_memres));
+	if (!cq_host->mmio) {
+		dev_err(&pdev->dev, "failed to remap cqhci regs\n");
+		return ERR_PTR(-EBUSY);
+	}
+	dev_dbg(&pdev->dev, "CMDQ ioremap: done\n");
+
+	return cq_host;
+}
+EXPORT_SYMBOL(cqhci_pltfm_init);
+
+static unsigned int cqhci_ver_major(struct cqhci_host *cq_host)
+{
+	return CQHCI_VER_MAJOR(cqhci_readl(cq_host, CQHCI_VER));
+}
+
+static unsigned int cqhci_ver_minor(struct cqhci_host *cq_host)
+{
+	u32 ver = cqhci_readl(cq_host, CQHCI_VER);
+
+	return CQHCI_VER_MINOR1(ver) * 10 + CQHCI_VER_MINOR2(ver);
+}
+
+int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc,
+	      bool dma64)
+{
+	int err;
+
+	cq_host->dma64 = dma64;
+	cq_host->mmc = mmc;
+	cq_host->mmc->cqe_private = cq_host;
+
+	cq_host->num_slots = NUM_SLOTS;
+	cq_host->dcmd_slot = DCMD_SLOT;
+
+	mmc->cqe_ops = &cqhci_cqe_ops;
+
+	mmc->cqe_qdepth = NUM_SLOTS;
+	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
+		mmc->cqe_qdepth -= 1;
+
+	cq_host->slot = devm_kcalloc(mmc_dev(mmc), cq_host->num_slots,
+				     sizeof(*cq_host->slot), GFP_KERNEL);
+	if (!cq_host->slot) {
+		err = -ENOMEM;
+		goto out_err;
+	}
+
+	err = cqhci_crypto_init(cq_host);
+	if (err) {
+		pr_err("%s: CQHCI crypto initialization failed\n",
+		       mmc_hostname(mmc));
+		goto out_err;
+	}
+
+	spin_lock_init(&cq_host->lock);
+
+	init_completion(&cq_host->halt_comp);
+	init_waitqueue_head(&cq_host->wait_queue);
+
+	pr_info("%s: CQHCI version %u.%02u\n",
+		mmc_hostname(mmc), cqhci_ver_major(cq_host),
+		cqhci_ver_minor(cq_host));
+
+	return 0;
+
+out_err:
+	pr_err("%s: CQHCI version %u.%02u failed to initialize, error %d\n",
+	       mmc_hostname(mmc), cqhci_ver_major(cq_host),
+	       cqhci_ver_minor(cq_host), err);
+	return err;
+}
+EXPORT_SYMBOL(cqhci_init);
+
+MODULE_AUTHOR("Venkat Gopalakrishnan <venkatg@codeaurora.org>");
+MODULE_DESCRIPTION("Command Queue Host Controller Interface driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/cqhci-crypto.c b/drivers/mmc/host/cqhci-crypto.c
new file mode 100644
index 0000000..5698bc4
--- /dev/null
+++ b/drivers/mmc/host/cqhci-crypto.c
@@ -0,0 +1,244 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * CQHCI crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/keyslot-manager.h>
+#include <linux/mmc/host.h>
+
+#include "cqhci-crypto.h"
+
+/* Map from blk-crypto modes to CQHCI crypto algorithm IDs and key sizes */
+static const struct cqhci_crypto_alg_entry {
+	enum cqhci_crypto_alg alg;
+	enum cqhci_crypto_key_size key_size;
+} cqhci_crypto_algs[BLK_ENCRYPTION_MODE_MAX] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.alg = CQHCI_CRYPTO_ALG_AES_XTS,
+		.key_size = CQHCI_CRYPTO_KEY_SIZE_256,
+	},
+};
+
+static inline struct cqhci_host *
+cqhci_host_from_ksm(struct blk_keyslot_manager *ksm)
+{
+	struct mmc_host *mmc = container_of(ksm, struct mmc_host, ksm);
+
+	return mmc->cqe_private;
+}
+
+static int cqhci_crypto_program_key(struct cqhci_host *cq_host,
+				    const union cqhci_crypto_cfg_entry *cfg,
+				    int slot)
+{
+	u32 slot_offset = cq_host->crypto_cfg_register + slot * sizeof(*cfg);
+	int i;
+
+	if (cq_host->ops->program_key)
+		return cq_host->ops->program_key(cq_host, cfg, slot);
+
+	/* Clear CFGE */
+	cqhci_writel(cq_host, 0, slot_offset + 16 * sizeof(cfg->reg_val[0]));
+
+	/* Write the key */
+	for (i = 0; i < 16; i++) {
+		cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[i]),
+			     slot_offset + i * sizeof(cfg->reg_val[0]));
+	}
+	/* Write dword 17 */
+	cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[17]),
+		     slot_offset + 17 * sizeof(cfg->reg_val[0]));
+	/* Write dword 16, which includes the new value of CFGE */
+	cqhci_writel(cq_host, le32_to_cpu(cfg->reg_val[16]),
+		     slot_offset + 16 * sizeof(cfg->reg_val[0]));
+	return 0;
+}
+
+static int cqhci_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+					const struct blk_crypto_key *key,
+					unsigned int slot)
+
+{
+	struct cqhci_host *cq_host = cqhci_host_from_ksm(ksm);
+	const union cqhci_crypto_cap_entry *ccap_array =
+		cq_host->crypto_cap_array;
+	const struct cqhci_crypto_alg_entry *alg =
+			&cqhci_crypto_algs[key->crypto_cfg.crypto_mode];
+	u8 data_unit_mask = key->crypto_cfg.data_unit_size / 512;
+	int i;
+	int cap_idx = -1;
+	union cqhci_crypto_cfg_entry cfg = {};
+	int err;
+
+	BUILD_BUG_ON(CQHCI_CRYPTO_KEY_SIZE_INVALID != 0);
+	for (i = 0; i < cq_host->crypto_capabilities.num_crypto_cap; i++) {
+		if (ccap_array[i].algorithm_id == alg->alg &&
+		    ccap_array[i].key_size == alg->key_size &&
+		    (ccap_array[i].sdus_mask & data_unit_mask)) {
+			cap_idx = i;
+			break;
+		}
+	}
+	if (WARN_ON(cap_idx < 0))
+		return -EOPNOTSUPP;
+
+	cfg.data_unit_size = data_unit_mask;
+	cfg.crypto_cap_idx = cap_idx;
+	cfg.config_enable = CQHCI_CRYPTO_CONFIGURATION_ENABLE;
+
+	if (ccap_array[cap_idx].algorithm_id == CQHCI_CRYPTO_ALG_AES_XTS) {
+		/* In XTS mode, the blk_crypto_key's size is already doubled */
+		memcpy(cfg.crypto_key, key->raw, key->size/2);
+		memcpy(cfg.crypto_key + CQHCI_CRYPTO_KEY_MAX_SIZE/2,
+		       key->raw + key->size/2, key->size/2);
+	} else {
+		memcpy(cfg.crypto_key, key->raw, key->size);
+	}
+
+	err = cqhci_crypto_program_key(cq_host, &cfg, slot);
+
+	memzero_explicit(&cfg, sizeof(cfg));
+	return err;
+}
+
+static int cqhci_crypto_clear_keyslot(struct cqhci_host *cq_host, int slot)
+{
+	/*
+	 * Clear the crypto cfg on the device. Clearing CFGE
+	 * might not be sufficient, so just clear the entire cfg.
+	 */
+	union cqhci_crypto_cfg_entry cfg = {};
+
+	return cqhci_crypto_program_key(cq_host, &cfg, slot);
+}
+
+static int cqhci_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      unsigned int slot)
+{
+	struct cqhci_host *cq_host = cqhci_host_from_ksm(ksm);
+
+	return cqhci_crypto_clear_keyslot(cq_host, slot);
+}
+
+/*
+ * The keyslot management operations for CQHCI crypto.
+ *
+ * Note that the block layer ensures that these are never called while the host
+ * controller is runtime-suspended.  However, the CQE won't necessarily be
+ * "enabled" when these are called, i.e. CQHCI_ENABLE might not be set in the
+ * CQHCI_CFG register.  But the hardware allows that.
+ */
+static const struct blk_ksm_ll_ops cqhci_ksm_ops = {
+	.keyslot_program	= cqhci_crypto_keyslot_program,
+	.keyslot_evict		= cqhci_crypto_keyslot_evict,
+};
+
+static enum blk_crypto_mode_num
+cqhci_find_blk_crypto_mode(union cqhci_crypto_cap_entry cap)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(cqhci_crypto_algs); i++) {
+		BUILD_BUG_ON(CQHCI_CRYPTO_KEY_SIZE_INVALID != 0);
+		if (cqhci_crypto_algs[i].alg == cap.algorithm_id &&
+		    cqhci_crypto_algs[i].key_size == cap.key_size)
+			return i;
+	}
+	return BLK_ENCRYPTION_MODE_INVALID;
+}
+
+/**
+ * cqhci_crypto_init - initialize CQHCI crypto support
+ * @cq_host: a cqhci host
+ *
+ * If the driver previously set MMC_CAP2_CRYPTO and the CQE declares
+ * CQHCI_CAP_CS, initialize the crypto support.  This involves reading the
+ * crypto capability registers, initializing the keyslot manager, clearing all
+ * keyslots, and enabling 128-bit task descriptors.
+ *
+ * Return: 0 if crypto was initialized or isn't supported; whether
+ *	   MMC_CAP2_CRYPTO remains set indicates which one of those cases it is.
+ *	   Also can return a negative errno value on unexpected error.
+ */
+int cqhci_crypto_init(struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = cq_host->mmc;
+	struct device *dev = mmc_dev(mmc);
+	struct blk_keyslot_manager *ksm = &mmc->ksm;
+	unsigned int num_keyslots;
+	unsigned int cap_idx;
+	enum blk_crypto_mode_num blk_mode_num;
+	unsigned int slot;
+	int err = 0;
+
+	if (!(mmc->caps2 & MMC_CAP2_CRYPTO) ||
+	    !(cqhci_readl(cq_host, CQHCI_CAP) & CQHCI_CAP_CS))
+		goto out;
+
+	cq_host->crypto_capabilities.reg_val =
+			cpu_to_le32(cqhci_readl(cq_host, CQHCI_CCAP));
+
+	cq_host->crypto_cfg_register =
+		(u32)cq_host->crypto_capabilities.config_array_ptr * 0x100;
+
+	cq_host->crypto_cap_array =
+		devm_kcalloc(dev, cq_host->crypto_capabilities.num_crypto_cap,
+			     sizeof(cq_host->crypto_cap_array[0]), GFP_KERNEL);
+	if (!cq_host->crypto_cap_array) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	/*
+	 * CCAP.CFGC is off by one, so the actual number of crypto
+	 * configurations (a.k.a. keyslots) is CCAP.CFGC + 1.
+	 */
+	num_keyslots = cq_host->crypto_capabilities.config_count + 1;
+
+	err = devm_blk_ksm_init(dev, ksm, num_keyslots);
+	if (err)
+		goto out;
+
+	ksm->ksm_ll_ops = cqhci_ksm_ops;
+	ksm->dev = dev;
+
+	/* Unfortunately, CQHCI crypto only supports 32 DUN bits. */
+	ksm->max_dun_bytes_supported = 4;
+
+	ksm->features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+
+	/*
+	 * Cache all the crypto capabilities and advertise the supported crypto
+	 * modes and data unit sizes to the block layer.
+	 */
+	for (cap_idx = 0; cap_idx < cq_host->crypto_capabilities.num_crypto_cap;
+	     cap_idx++) {
+		cq_host->crypto_cap_array[cap_idx].reg_val =
+			cpu_to_le32(cqhci_readl(cq_host,
+						CQHCI_CRYPTOCAP +
+						cap_idx * sizeof(__le32)));
+		blk_mode_num = cqhci_find_blk_crypto_mode(
+					cq_host->crypto_cap_array[cap_idx]);
+		if (blk_mode_num == BLK_ENCRYPTION_MODE_INVALID)
+			continue;
+		ksm->crypto_modes_supported[blk_mode_num] |=
+			cq_host->crypto_cap_array[cap_idx].sdus_mask * 512;
+	}
+
+	/* Clear all the keyslots so that we start in a known state. */
+	for (slot = 0; slot < num_keyslots; slot++)
+		cqhci_crypto_clear_keyslot(cq_host, slot);
+
+	/* CQHCI crypto requires the use of 128-bit task descriptors. */
+	cq_host->caps |= CQHCI_TASK_DESC_SZ_128;
+
+	return 0;
+
+out:
+	mmc->caps2 &= ~MMC_CAP2_CRYPTO;
+	return err;
+}
diff --git a/drivers/mmc/host/cqhci-crypto.h b/drivers/mmc/host/cqhci-crypto.h
new file mode 100644
index 0000000..d7fb084
--- /dev/null
+++ b/drivers/mmc/host/cqhci-crypto.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * CQHCI crypto engine (inline encryption) support
+ *
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef LINUX_MMC_CQHCI_CRYPTO_H
+#define LINUX_MMC_CQHCI_CRYPTO_H
+
+#include <linux/mmc/host.h>
+
+#include "cqhci.h"
+
+#ifdef CONFIG_MMC_CRYPTO
+
+int cqhci_crypto_init(struct cqhci_host *host);
+
+/*
+ * Returns the crypto bits that should be set in bits 64-127 of the
+ * task descriptor.
+ */
+static inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
+{
+	if (!mrq->crypto_ctx)
+		return 0;
+
+	/* We set max_dun_bytes_supported=4, so all DUNs should be 32-bit. */
+	WARN_ON_ONCE(mrq->crypto_ctx->bc_dun[0] > U32_MAX);
+
+	return CQHCI_CRYPTO_ENABLE_BIT |
+	       CQHCI_CRYPTO_KEYSLOT(mrq->crypto_key_slot) |
+	       mrq->crypto_ctx->bc_dun[0];
+}
+
+#else /* CONFIG_MMC_CRYPTO */
+
+static inline int cqhci_crypto_init(struct cqhci_host *host)
+{
+	return 0;
+}
+
+static inline u64 cqhci_crypto_prep_task_desc(struct mmc_request *mrq)
+{
+	return 0;
+}
+
+#endif /* !CONFIG_MMC_CRYPTO */
+
+#endif /* LINUX_MMC_CQHCI_CRYPTO_H */
diff --git a/drivers/mmc/host/cqhci.c b/drivers/mmc/host/cqhci.c
deleted file mode 100644
index ec56464..0000000
--- a/drivers/mmc/host/cqhci.c
+++ /dev/null
@@ -1,1156 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
- */
-
-#include <linux/delay.h>
-#include <linux/highmem.h>
-#include <linux/io.h>
-#include <linux/iopoll.h>
-#include <linux/module.h>
-#include <linux/dma-mapping.h>
-#include <linux/slab.h>
-#include <linux/scatterlist.h>
-#include <linux/platform_device.h>
-#include <linux/ktime.h>
-
-#include <linux/mmc/mmc.h>
-#include <linux/mmc/host.h>
-#include <linux/mmc/card.h>
-
-#include "cqhci.h"
-
-#define DCMD_SLOT 31
-#define NUM_SLOTS 32
-
-struct cqhci_slot {
-	struct mmc_request *mrq;
-	unsigned int flags;
-#define CQHCI_EXTERNAL_TIMEOUT	BIT(0)
-#define CQHCI_COMPLETED		BIT(1)
-#define CQHCI_HOST_CRC		BIT(2)
-#define CQHCI_HOST_TIMEOUT	BIT(3)
-#define CQHCI_HOST_OTHER	BIT(4)
-};
-
-static inline u8 *get_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->desc_base + (tag * cq_host->slot_sz);
-}
-
-static inline u8 *get_link_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	u8 *desc = get_desc(cq_host, tag);
-
-	return desc + cq_host->task_desc_len;
-}
-
-static inline dma_addr_t get_trans_desc_dma(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->trans_desc_dma_base +
-		(cq_host->mmc->max_segs * tag *
-		 cq_host->trans_desc_len);
-}
-
-static inline u8 *get_trans_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	return cq_host->trans_desc_base +
-		(cq_host->trans_desc_len * cq_host->mmc->max_segs * tag);
-}
-
-static void setup_trans_desc(struct cqhci_host *cq_host, u8 tag)
-{
-	u8 *link_temp;
-	dma_addr_t trans_temp;
-
-	link_temp = get_link_desc(cq_host, tag);
-	trans_temp = get_trans_desc_dma(cq_host, tag);
-
-	memset(link_temp, 0, cq_host->link_desc_len);
-	if (cq_host->link_desc_len > 8)
-		*(link_temp + 8) = 0;
-
-	if (tag == DCMD_SLOT && (cq_host->mmc->caps2 & MMC_CAP2_CQE_DCMD)) {
-		*link_temp = CQHCI_VALID(0) | CQHCI_ACT(0) | CQHCI_END(1);
-		return;
-	}
-
-	*link_temp = CQHCI_VALID(1) | CQHCI_ACT(0x6) | CQHCI_END(0);
-
-	if (cq_host->dma64) {
-		__le64 *data_addr = (__le64 __force *)(link_temp + 4);
-
-		data_addr[0] = cpu_to_le64(trans_temp);
-	} else {
-		__le32 *data_addr = (__le32 __force *)(link_temp + 4);
-
-		data_addr[0] = cpu_to_le32(trans_temp);
-	}
-}
-
-static void cqhci_set_irqs(struct cqhci_host *cq_host, u32 set)
-{
-	cqhci_writel(cq_host, set, CQHCI_ISTE);
-	cqhci_writel(cq_host, set, CQHCI_ISGE);
-}
-
-#define DRV_NAME "cqhci"
-
-#define CQHCI_DUMP(f, x...) \
-	pr_err("%s: " DRV_NAME ": " f, mmc_hostname(mmc), ## x)
-
-static void cqhci_dumpregs(struct cqhci_host *cq_host)
-{
-	struct mmc_host *mmc = cq_host->mmc;
-
-	CQHCI_DUMP("============ CQHCI REGISTER DUMP ===========\n");
-
-	CQHCI_DUMP("Caps:      0x%08x | Version:  0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CAP),
-		   cqhci_readl(cq_host, CQHCI_VER));
-	CQHCI_DUMP("Config:    0x%08x | Control:  0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CFG),
-		   cqhci_readl(cq_host, CQHCI_CTL));
-	CQHCI_DUMP("Int stat:  0x%08x | Int enab: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_IS),
-		   cqhci_readl(cq_host, CQHCI_ISTE));
-	CQHCI_DUMP("Int sig:   0x%08x | Int Coal: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_ISGE),
-		   cqhci_readl(cq_host, CQHCI_IC));
-	CQHCI_DUMP("TDL base:  0x%08x | TDL up32: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TDLBA),
-		   cqhci_readl(cq_host, CQHCI_TDLBAU));
-	CQHCI_DUMP("Doorbell:  0x%08x | TCN:      0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TDBR),
-		   cqhci_readl(cq_host, CQHCI_TCN));
-	CQHCI_DUMP("Dev queue: 0x%08x | Dev Pend: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_DQS),
-		   cqhci_readl(cq_host, CQHCI_DPT));
-	CQHCI_DUMP("Task clr:  0x%08x | SSC1:     0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_TCLR),
-		   cqhci_readl(cq_host, CQHCI_SSC1));
-	CQHCI_DUMP("SSC2:      0x%08x | DCMD rsp: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_SSC2),
-		   cqhci_readl(cq_host, CQHCI_CRDCT));
-	CQHCI_DUMP("RED mask:  0x%08x | TERRI:    0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_RMEM),
-		   cqhci_readl(cq_host, CQHCI_TERRI));
-	CQHCI_DUMP("Resp idx:  0x%08x | Resp arg: 0x%08x\n",
-		   cqhci_readl(cq_host, CQHCI_CRI),
-		   cqhci_readl(cq_host, CQHCI_CRA));
-
-	if (cq_host->ops->dumpregs)
-		cq_host->ops->dumpregs(mmc);
-	else
-		CQHCI_DUMP(": ===========================================\n");
-}
-
-/**
- * The allocated descriptor table for task, link & transfer descritors
- * looks like:
- * |----------|
- * |task desc |  |->|----------|
- * |----------|  |  |trans desc|
- * |link desc-|->|  |----------|
- * |----------|          .
- *      .                .
- *  no. of slots      max-segs
- *      .           |----------|
- * |----------|
- * The idea here is to create the [task+trans] table and mark & point the
- * link desc to the transfer desc table on a per slot basis.
- */
-static int cqhci_host_alloc_tdl(struct cqhci_host *cq_host)
-{
-	int i = 0;
-
-	/* task descriptor can be 64/128 bit irrespective of arch */
-	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128) {
-		cqhci_writel(cq_host, cqhci_readl(cq_host, CQHCI_CFG) |
-			       CQHCI_TASK_DESC_SZ, CQHCI_CFG);
-		cq_host->task_desc_len = 16;
-	} else {
-		cq_host->task_desc_len = 8;
-	}
-
-	/*
-	 * 96 bits length of transfer desc instead of 128 bits which means
-	 * ADMA would expect next valid descriptor at the 96th bit
-	 * or 128th bit
-	 */
-	if (cq_host->dma64) {
-		if (cq_host->quirks & CQHCI_QUIRK_SHORT_TXFR_DESC_SZ)
-			cq_host->trans_desc_len = 12;
-		else
-			cq_host->trans_desc_len = 16;
-		cq_host->link_desc_len = 16;
-	} else {
-		cq_host->trans_desc_len = 8;
-		cq_host->link_desc_len = 8;
-	}
-
-	/* total size of a slot: 1 task & 1 transfer (link) */
-	cq_host->slot_sz = cq_host->task_desc_len + cq_host->link_desc_len;
-
-	cq_host->desc_size = cq_host->slot_sz * cq_host->num_slots;
-
-	cq_host->data_size = cq_host->trans_desc_len * cq_host->mmc->max_segs *
-		cq_host->mmc->cqe_qdepth;
-
-	pr_debug("%s: cqhci: desc_size: %zu data_sz: %zu slot-sz: %d\n",
-		 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size,
-		 cq_host->slot_sz);
-
-	/*
-	 * allocate a dma-mapped chunk of memory for the descriptors
-	 * allocate a dma-mapped chunk of memory for link descriptors
-	 * setup each link-desc memory offset per slot-number to
-	 * the descriptor table.
-	 */
-	cq_host->desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
-						 cq_host->desc_size,
-						 &cq_host->desc_dma_base,
-						 GFP_KERNEL);
-	if (!cq_host->desc_base)
-		return -ENOMEM;
-
-	cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc),
-					      cq_host->data_size,
-					      &cq_host->trans_desc_dma_base,
-					      GFP_KERNEL);
-	if (!cq_host->trans_desc_base) {
-		dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size,
-				   cq_host->desc_base,
-				   cq_host->desc_dma_base);
-		cq_host->desc_base = NULL;
-		cq_host->desc_dma_base = 0;
-		return -ENOMEM;
-	}
-
-	pr_debug("%s: cqhci: desc-base: 0x%p trans-base: 0x%p\n desc_dma 0x%llx trans_dma: 0x%llx\n",
-		 mmc_hostname(cq_host->mmc), cq_host->desc_base, cq_host->trans_desc_base,
-		(unsigned long long)cq_host->desc_dma_base,
-		(unsigned long long)cq_host->trans_desc_dma_base);
-
-	for (; i < (cq_host->num_slots); i++)
-		setup_trans_desc(cq_host, i);
-
-	return 0;
-}
-
-static void __cqhci_enable(struct cqhci_host *cq_host)
-{
-	struct mmc_host *mmc = cq_host->mmc;
-	u32 cqcfg;
-
-	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-
-	/* Configuration must not be changed while enabled */
-	if (cqcfg & CQHCI_ENABLE) {
-		cqcfg &= ~CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-	}
-
-	cqcfg &= ~(CQHCI_DCMD | CQHCI_TASK_DESC_SZ);
-
-	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
-		cqcfg |= CQHCI_DCMD;
-
-	if (cq_host->caps & CQHCI_TASK_DESC_SZ_128)
-		cqcfg |= CQHCI_TASK_DESC_SZ;
-
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	cqhci_writel(cq_host, lower_32_bits(cq_host->desc_dma_base),
-		     CQHCI_TDLBA);
-	cqhci_writel(cq_host, upper_32_bits(cq_host->desc_dma_base),
-		     CQHCI_TDLBAU);
-
-	cqhci_writel(cq_host, cq_host->rca, CQHCI_SSC2);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	cqcfg |= CQHCI_ENABLE;
-
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	if (cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT)
-		cqhci_writel(cq_host, 0, CQHCI_CTL);
-
-	mmc->cqe_on = true;
-
-	if (cq_host->ops->enable)
-		cq_host->ops->enable(mmc);
-
-	/* Ensure all writes are done before interrupts are enabled */
-	wmb();
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
-
-	cq_host->activated = true;
-}
-
-static void __cqhci_disable(struct cqhci_host *cq_host)
-{
-	u32 cqcfg;
-
-	cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-	cqcfg &= ~CQHCI_ENABLE;
-	cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-
-	cq_host->mmc->cqe_on = false;
-
-	cq_host->activated = false;
-}
-
-int cqhci_deactivate(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (cq_host->enabled && cq_host->activated)
-		__cqhci_disable(cq_host);
-
-	return 0;
-}
-EXPORT_SYMBOL(cqhci_deactivate);
-
-int cqhci_resume(struct mmc_host *mmc)
-{
-	/* Re-enable is done upon first request */
-	return 0;
-}
-EXPORT_SYMBOL(cqhci_resume);
-
-static int cqhci_enable(struct mmc_host *mmc, struct mmc_card *card)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int err;
-
-	if (cq_host->enabled)
-		return 0;
-
-	cq_host->rca = card->rca;
-
-	err = cqhci_host_alloc_tdl(cq_host);
-	if (err)
-		return err;
-
-	__cqhci_enable(cq_host);
-
-	cq_host->enabled = true;
-
-#ifdef DEBUG
-	cqhci_dumpregs(cq_host);
-#endif
-	return 0;
-}
-
-/* CQHCI is idle and should halt immediately, so set a small timeout */
-#define CQHCI_OFF_TIMEOUT 100
-
-static u32 cqhci_read_ctl(struct cqhci_host *cq_host)
-{
-	return cqhci_readl(cq_host, CQHCI_CTL);
-}
-
-static void cqhci_off(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	u32 reg;
-	int err;
-
-	if (!cq_host->enabled || !mmc->cqe_on || cq_host->recovery_halt)
-		return;
-
-	if (cq_host->ops->disable)
-		cq_host->ops->disable(mmc, false);
-
-	cqhci_writel(cq_host, CQHCI_HALT, CQHCI_CTL);
-
-	err = readx_poll_timeout(cqhci_read_ctl, cq_host, reg,
-				 reg & CQHCI_HALT, 0, CQHCI_OFF_TIMEOUT);
-	if (err < 0)
-		pr_err("%s: cqhci: CQE stuck on\n", mmc_hostname(mmc));
-	else
-		pr_debug("%s: cqhci: CQE off\n", mmc_hostname(mmc));
-
-	mmc->cqe_on = false;
-}
-
-static void cqhci_disable(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (!cq_host->enabled)
-		return;
-
-	cqhci_off(mmc);
-
-	__cqhci_disable(cq_host);
-
-	dmam_free_coherent(mmc_dev(mmc), cq_host->data_size,
-			   cq_host->trans_desc_base,
-			   cq_host->trans_desc_dma_base);
-
-	dmam_free_coherent(mmc_dev(mmc), cq_host->desc_size,
-			   cq_host->desc_base,
-			   cq_host->desc_dma_base);
-
-	cq_host->trans_desc_base = NULL;
-	cq_host->desc_base = NULL;
-
-	cq_host->enabled = false;
-}
-
-static void cqhci_prep_task_desc(struct mmc_request *mrq,
-					u64 *data, bool intr)
-{
-	u32 req_flags = mrq->data->flags;
-
-	*data = CQHCI_VALID(1) |
-		CQHCI_END(1) |
-		CQHCI_INT(intr) |
-		CQHCI_ACT(0x5) |
-		CQHCI_FORCED_PROG(!!(req_flags & MMC_DATA_FORCED_PRG)) |
-		CQHCI_DATA_TAG(!!(req_flags & MMC_DATA_DAT_TAG)) |
-		CQHCI_DATA_DIR(!!(req_flags & MMC_DATA_READ)) |
-		CQHCI_PRIORITY(!!(req_flags & MMC_DATA_PRIO)) |
-		CQHCI_QBAR(!!(req_flags & MMC_DATA_QBR)) |
-		CQHCI_REL_WRITE(!!(req_flags & MMC_DATA_REL_WR)) |
-		CQHCI_BLK_COUNT(mrq->data->blocks) |
-		CQHCI_BLK_ADDR((u64)mrq->data->blk_addr);
-
-	pr_debug("%s: cqhci: tag %d task descriptor 0x016%llx\n",
-		 mmc_hostname(mrq->host), mrq->tag, (unsigned long long)*data);
-}
-
-static int cqhci_dma_map(struct mmc_host *host, struct mmc_request *mrq)
-{
-	int sg_count;
-	struct mmc_data *data = mrq->data;
-
-	if (!data)
-		return -EINVAL;
-
-	sg_count = dma_map_sg(mmc_dev(host), data->sg,
-			      data->sg_len,
-			      (data->flags & MMC_DATA_WRITE) ?
-			      DMA_TO_DEVICE : DMA_FROM_DEVICE);
-	if (!sg_count) {
-		pr_err("%s: sg-len: %d\n", __func__, data->sg_len);
-		return -ENOMEM;
-	}
-
-	return sg_count;
-}
-
-static void cqhci_set_tran_desc(u8 *desc, dma_addr_t addr, int len, bool end,
-				bool dma64)
-{
-	__le32 *attr = (__le32 __force *)desc;
-
-	*attr = (CQHCI_VALID(1) |
-		 CQHCI_END(end ? 1 : 0) |
-		 CQHCI_INT(0) |
-		 CQHCI_ACT(0x4) |
-		 CQHCI_DAT_LENGTH(len));
-
-	if (dma64) {
-		__le64 *dataddr = (__le64 __force *)(desc + 4);
-
-		dataddr[0] = cpu_to_le64(addr);
-	} else {
-		__le32 *dataddr = (__le32 __force *)(desc + 4);
-
-		dataddr[0] = cpu_to_le32(addr);
-	}
-}
-
-static int cqhci_prep_tran_desc(struct mmc_request *mrq,
-			       struct cqhci_host *cq_host, int tag)
-{
-	struct mmc_data *data = mrq->data;
-	int i, sg_count, len;
-	bool end = false;
-	bool dma64 = cq_host->dma64;
-	dma_addr_t addr;
-	u8 *desc;
-	struct scatterlist *sg;
-
-	sg_count = cqhci_dma_map(mrq->host, mrq);
-	if (sg_count < 0) {
-		pr_err("%s: %s: unable to map sg lists, %d\n",
-				mmc_hostname(mrq->host), __func__, sg_count);
-		return sg_count;
-	}
-
-	desc = get_trans_desc(cq_host, tag);
-
-	for_each_sg(data->sg, sg, sg_count, i) {
-		addr = sg_dma_address(sg);
-		len = sg_dma_len(sg);
-
-		if ((i+1) == sg_count)
-			end = true;
-		cqhci_set_tran_desc(desc, addr, len, end, dma64);
-		desc += cq_host->trans_desc_len;
-	}
-
-	return 0;
-}
-
-static void cqhci_prep_dcmd_desc(struct mmc_host *mmc,
-				   struct mmc_request *mrq)
-{
-	u64 *task_desc = NULL;
-	u64 data = 0;
-	u8 resp_type;
-	u8 *desc;
-	__le64 *dataddr;
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	u8 timing;
-
-	if (!(mrq->cmd->flags & MMC_RSP_PRESENT)) {
-		resp_type = 0x0;
-		timing = 0x1;
-	} else {
-		if (mrq->cmd->flags & MMC_RSP_R1B) {
-			resp_type = 0x3;
-			timing = 0x0;
-		} else {
-			resp_type = 0x2;
-			timing = 0x1;
-		}
-	}
-
-	task_desc = (__le64 __force *)get_desc(cq_host, cq_host->dcmd_slot);
-	memset(task_desc, 0, cq_host->task_desc_len);
-	data |= (CQHCI_VALID(1) |
-		 CQHCI_END(1) |
-		 CQHCI_INT(1) |
-		 CQHCI_QBAR(1) |
-		 CQHCI_ACT(0x5) |
-		 CQHCI_CMD_INDEX(mrq->cmd->opcode) |
-		 CQHCI_CMD_TIMING(timing) | CQHCI_RESP_TYPE(resp_type));
-	if (cq_host->ops->update_dcmd_desc)
-		cq_host->ops->update_dcmd_desc(mmc, mrq, &data);
-	*task_desc |= data;
-	desc = (u8 *)task_desc;
-	pr_debug("%s: cqhci: dcmd: cmd: %d timing: %d resp: %d\n",
-		 mmc_hostname(mmc), mrq->cmd->opcode, timing, resp_type);
-	dataddr = (__le64 __force *)(desc + 4);
-	dataddr[0] = cpu_to_le64((u64)mrq->cmd->arg);
-
-}
-
-static void cqhci_post_req(struct mmc_host *host, struct mmc_request *mrq)
-{
-	struct mmc_data *data = mrq->data;
-
-	if (data) {
-		dma_unmap_sg(mmc_dev(host), data->sg, data->sg_len,
-			     (data->flags & MMC_DATA_READ) ?
-			     DMA_FROM_DEVICE : DMA_TO_DEVICE);
-	}
-}
-
-static inline int cqhci_tag(struct mmc_request *mrq)
-{
-	return mrq->cmd ? DCMD_SLOT : mrq->tag;
-}
-
-static int cqhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
-{
-	int err = 0;
-	u64 data = 0;
-	u64 *task_desc = NULL;
-	int tag = cqhci_tag(mrq);
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	unsigned long flags;
-
-	if (!cq_host->enabled) {
-		pr_err("%s: cqhci: not enabled\n", mmc_hostname(mmc));
-		return -EINVAL;
-	}
-
-	/* First request after resume has to re-enable */
-	if (!cq_host->activated)
-		__cqhci_enable(cq_host);
-
-	if (!mmc->cqe_on) {
-		cqhci_writel(cq_host, 0, CQHCI_CTL);
-		mmc->cqe_on = true;
-		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",
-			       mmc_hostname(mmc));
-		}
-		if (cq_host->ops->enable)
-			cq_host->ops->enable(mmc);
-	}
-
-	if (mrq->data) {
-		task_desc = (__le64 __force *)get_desc(cq_host, tag);
-		cqhci_prep_task_desc(mrq, &data, 1);
-		*task_desc = cpu_to_le64(data);
-		err = cqhci_prep_tran_desc(mrq, cq_host, tag);
-		if (err) {
-			pr_err("%s: cqhci: failed to setup tx desc: %d\n",
-			       mmc_hostname(mmc), err);
-			return err;
-		}
-	} else {
-		cqhci_prep_dcmd_desc(mmc, mrq);
-	}
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-
-	if (cq_host->recovery_halt) {
-		err = -EBUSY;
-		goto out_unlock;
-	}
-
-	cq_host->slot[tag].mrq = mrq;
-	cq_host->slot[tag].flags = 0;
-
-	cq_host->qcnt += 1;
-	/* Make sure descriptors are ready before ringing the doorbell */
-	wmb();
-	cqhci_writel(cq_host, 1 << tag, CQHCI_TDBR);
-	if (!(cqhci_readl(cq_host, CQHCI_TDBR) & (1 << tag)))
-		pr_debug("%s: cqhci: doorbell not set for tag %d\n",
-			 mmc_hostname(mmc), tag);
-out_unlock:
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	if (err)
-		cqhci_post_req(mmc, mrq);
-
-	return err;
-}
-
-static void cqhci_recovery_needed(struct mmc_host *mmc, struct mmc_request *mrq,
-				  bool notify)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	if (!cq_host->recovery_halt) {
-		cq_host->recovery_halt = true;
-		pr_debug("%s: cqhci: recovery needed\n", mmc_hostname(mmc));
-		wake_up(&cq_host->wait_queue);
-		if (notify && mrq->recovery_notifier)
-			mrq->recovery_notifier(mrq);
-	}
-}
-
-static unsigned int cqhci_error_flags(int error1, int error2)
-{
-	int error = error1 ? error1 : error2;
-
-	switch (error) {
-	case -EILSEQ:
-		return CQHCI_HOST_CRC;
-	case -ETIMEDOUT:
-		return CQHCI_HOST_TIMEOUT;
-	default:
-		return CQHCI_HOST_OTHER;
-	}
-}
-
-static void cqhci_error_irq(struct mmc_host *mmc, u32 status, int cmd_error,
-			    int data_error)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	struct cqhci_slot *slot;
-	u32 terri;
-	int tag;
-
-	spin_lock(&cq_host->lock);
-
-	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",
-		 mmc_hostname(mmc), status, cmd_error, data_error, terri);
-
-	/* Forget about errors when recovery has already been triggered */
-	if (cq_host->recovery_halt)
-		goto out_unlock;
-
-	if (!cq_host->qcnt) {
-		WARN_ONCE(1, "%s: cqhci: error when idle. IRQ status: 0x%08x cmd error %d data error %d TERRI: 0x%08x\n",
-			  mmc_hostname(mmc), status, cmd_error, data_error,
-			  terri);
-		goto out_unlock;
-	}
-
-	if (CQHCI_TERRI_C_VALID(terri)) {
-		tag = CQHCI_TERRI_C_TASK(terri);
-		slot = &cq_host->slot[tag];
-		if (slot->mrq) {
-			slot->flags = cqhci_error_flags(cmd_error, data_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-		}
-	}
-
-	if (CQHCI_TERRI_D_VALID(terri)) {
-		tag = CQHCI_TERRI_D_TASK(terri);
-		slot = &cq_host->slot[tag];
-		if (slot->mrq) {
-			slot->flags = cqhci_error_flags(data_error, cmd_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-		}
-	}
-
-	if (!cq_host->recovery_halt) {
-		/*
-		 * The only way to guarantee forward progress is to mark at
-		 * least one task in error, so if none is indicated, pick one.
-		 */
-		for (tag = 0; tag < NUM_SLOTS; tag++) {
-			slot = &cq_host->slot[tag];
-			if (!slot->mrq)
-				continue;
-			slot->flags = cqhci_error_flags(data_error, cmd_error);
-			cqhci_recovery_needed(mmc, slot->mrq, true);
-			break;
-		}
-	}
-
-out_unlock:
-	spin_unlock(&cq_host->lock);
-}
-
-static void cqhci_finish_mrq(struct mmc_host *mmc, unsigned int tag)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	struct mmc_request *mrq = slot->mrq;
-	struct mmc_data *data;
-
-	if (!mrq) {
-		WARN_ONCE(1, "%s: cqhci: spurious TCN for tag %d\n",
-			  mmc_hostname(mmc), tag);
-		return;
-	}
-
-	/* No completions allowed during recovery */
-	if (cq_host->recovery_halt) {
-		slot->flags |= CQHCI_COMPLETED;
-		return;
-	}
-
-	slot->mrq = NULL;
-
-	cq_host->qcnt -= 1;
-
-	data = mrq->data;
-	if (data) {
-		if (data->error)
-			data->bytes_xfered = 0;
-		else
-			data->bytes_xfered = data->blksz * data->blocks;
-	}
-
-	mmc_cqe_request_done(mmc, mrq);
-}
-
-irqreturn_t cqhci_irq(struct mmc_host *mmc, u32 intmask, int cmd_error,
-		      int data_error)
-{
-	u32 status;
-	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);
-
-	pr_debug("%s: cqhci: IRQ status: 0x%08x\n", mmc_hostname(mmc), status);
-
-	if ((status & CQHCI_IS_RED) || cmd_error || data_error)
-		cqhci_error_irq(mmc, status, cmd_error, data_error);
-
-	if (status & CQHCI_IS_TCC) {
-		/* read TCN and complete the request */
-		comp_status = cqhci_readl(cq_host, CQHCI_TCN);
-		cqhci_writel(cq_host, comp_status, CQHCI_TCN);
-		pr_debug("%s: cqhci: TCN: 0x%08lx\n",
-			 mmc_hostname(mmc), comp_status);
-
-		spin_lock(&cq_host->lock);
-
-		for_each_set_bit(tag, &comp_status, cq_host->num_slots) {
-			/* complete the corresponding mrq */
-			pr_debug("%s: cqhci: completing tag %lu\n",
-				 mmc_hostname(mmc), tag);
-			cqhci_finish_mrq(mmc, tag);
-		}
-
-		if (cq_host->waiting_for_idle && !cq_host->qcnt) {
-			cq_host->waiting_for_idle = false;
-			wake_up(&cq_host->wait_queue);
-		}
-
-		spin_unlock(&cq_host->lock);
-	}
-
-	if (status & CQHCI_IS_TCL)
-		wake_up(&cq_host->wait_queue);
-
-	if (status & CQHCI_IS_HAC)
-		wake_up(&cq_host->wait_queue);
-
-	return IRQ_HANDLED;
-}
-EXPORT_SYMBOL(cqhci_irq);
-
-static bool cqhci_is_idle(struct cqhci_host *cq_host, int *ret)
-{
-	unsigned long flags;
-	bool is_idle;
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	is_idle = !cq_host->qcnt || cq_host->recovery_halt;
-	*ret = cq_host->recovery_halt ? -EBUSY : 0;
-	cq_host->waiting_for_idle = !is_idle;
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	return is_idle;
-}
-
-static int cqhci_wait_for_idle(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int ret;
-
-	wait_event(cq_host->wait_queue, cqhci_is_idle(cq_host, &ret));
-
-	return ret;
-}
-
-static bool cqhci_timeout(struct mmc_host *mmc, struct mmc_request *mrq,
-			  bool *recovery_needed)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	int tag = cqhci_tag(mrq);
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	unsigned long flags;
-	bool timed_out;
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	timed_out = slot->mrq == mrq;
-	if (timed_out) {
-		slot->flags |= CQHCI_EXTERNAL_TIMEOUT;
-		cqhci_recovery_needed(mmc, mrq, false);
-		*recovery_needed = cq_host->recovery_halt;
-	}
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	if (timed_out) {
-		pr_err("%s: cqhci: timeout for tag %d\n",
-		       mmc_hostname(mmc), tag);
-		cqhci_dumpregs(cq_host);
-	}
-
-	return timed_out;
-}
-
-static bool cqhci_tasks_cleared(struct cqhci_host *cq_host)
-{
-	return !(cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_CLEAR_ALL_TASKS);
-}
-
-static bool cqhci_clear_all_tasks(struct mmc_host *mmc, unsigned int timeout)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	bool ret;
-	u32 ctl;
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_TCL);
-
-	ctl = cqhci_readl(cq_host, CQHCI_CTL);
-	ctl |= CQHCI_CLEAR_ALL_TASKS;
-	cqhci_writel(cq_host, ctl, CQHCI_CTL);
-
-	wait_event_timeout(cq_host->wait_queue, cqhci_tasks_cleared(cq_host),
-			   msecs_to_jiffies(timeout) + 1);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	ret = cqhci_tasks_cleared(cq_host);
-
-	if (!ret)
-		pr_debug("%s: cqhci: Failed to clear tasks\n",
-			 mmc_hostname(mmc));
-
-	return ret;
-}
-
-static bool cqhci_halted(struct cqhci_host *cq_host)
-{
-	return cqhci_readl(cq_host, CQHCI_CTL) & CQHCI_HALT;
-}
-
-static bool cqhci_halt(struct mmc_host *mmc, unsigned int timeout)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	bool ret;
-	u32 ctl;
-
-	if (cqhci_halted(cq_host))
-		return true;
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_HAC);
-
-	ctl = cqhci_readl(cq_host, CQHCI_CTL);
-	ctl |= CQHCI_HALT;
-	cqhci_writel(cq_host, ctl, CQHCI_CTL);
-
-	wait_event_timeout(cq_host->wait_queue, cqhci_halted(cq_host),
-			   msecs_to_jiffies(timeout) + 1);
-
-	cqhci_set_irqs(cq_host, 0);
-
-	ret = cqhci_halted(cq_host);
-
-	if (!ret)
-		pr_debug("%s: cqhci: Failed to halt\n", mmc_hostname(mmc));
-
-	return ret;
-}
-
-/*
- * After halting we expect to be able to use the command line. We interpret the
- * failure to halt to mean the data lines might still be in use (and the upper
- * layers will need to send a STOP command), so we set the timeout based on a
- * generous command timeout.
- */
-#define CQHCI_START_HALT_TIMEOUT	5
-
-static void cqhci_recovery_start(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-
-	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
-
-	WARN_ON(!cq_host->recovery_halt);
-
-	cqhci_halt(mmc, CQHCI_START_HALT_TIMEOUT);
-
-	if (cq_host->ops->disable)
-		cq_host->ops->disable(mmc, true);
-
-	mmc->cqe_on = false;
-}
-
-static int cqhci_error_from_flags(unsigned int flags)
-{
-	if (!flags)
-		return 0;
-
-	/* CRC errors might indicate re-tuning so prefer to report that */
-	if (flags & CQHCI_HOST_CRC)
-		return -EILSEQ;
-
-	if (flags & (CQHCI_EXTERNAL_TIMEOUT | CQHCI_HOST_TIMEOUT))
-		return -ETIMEDOUT;
-
-	return -EIO;
-}
-
-static void cqhci_recover_mrq(struct cqhci_host *cq_host, unsigned int tag)
-{
-	struct cqhci_slot *slot = &cq_host->slot[tag];
-	struct mmc_request *mrq = slot->mrq;
-	struct mmc_data *data;
-
-	if (!mrq)
-		return;
-
-	slot->mrq = NULL;
-
-	cq_host->qcnt -= 1;
-
-	data = mrq->data;
-	if (data) {
-		data->bytes_xfered = 0;
-		data->error = cqhci_error_from_flags(slot->flags);
-	} else {
-		mrq->cmd->error = cqhci_error_from_flags(slot->flags);
-	}
-
-	mmc_cqe_request_done(cq_host->mmc, mrq);
-}
-
-static void cqhci_recover_mrqs(struct cqhci_host *cq_host)
-{
-	int i;
-
-	for (i = 0; i < cq_host->num_slots; i++)
-		cqhci_recover_mrq(cq_host, i);
-}
-
-/*
- * By now the command and data lines should be unused so there is no reason for
- * CQHCI to take a long time to halt, but if it doesn't halt there could be
- * problems clearing tasks, so be generous.
- */
-#define CQHCI_FINISH_HALT_TIMEOUT	20
-
-/* CQHCI could be expected to clear it's internal state pretty quickly */
-#define CQHCI_CLEAR_TIMEOUT		20
-
-static void cqhci_recovery_finish(struct mmc_host *mmc)
-{
-	struct cqhci_host *cq_host = mmc->cqe_private;
-	unsigned long flags;
-	u32 cqcfg;
-	bool ok;
-
-	pr_debug("%s: cqhci: %s\n", mmc_hostname(mmc), __func__);
-
-	WARN_ON(!cq_host->recovery_halt);
-
-	ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
-
-	if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
-		ok = false;
-
-	/*
-	 * The specification contradicts itself, by saying that tasks cannot be
-	 * cleared if CQHCI does not halt, but if CQHCI does not halt, it should
-	 * be disabled/re-enabled, but not to disable before clearing tasks.
-	 * Have a go anyway.
-	 */
-	if (!ok) {
-		pr_debug("%s: cqhci: disable / re-enable\n", mmc_hostname(mmc));
-		cqcfg = cqhci_readl(cq_host, CQHCI_CFG);
-		cqcfg &= ~CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-		cqcfg |= CQHCI_ENABLE;
-		cqhci_writel(cq_host, cqcfg, CQHCI_CFG);
-		/* Be sure that there are no tasks */
-		ok = cqhci_halt(mmc, CQHCI_FINISH_HALT_TIMEOUT);
-		if (!cqhci_clear_all_tasks(mmc, CQHCI_CLEAR_TIMEOUT))
-			ok = false;
-		WARN_ON(!ok);
-	}
-
-	cqhci_recover_mrqs(cq_host);
-
-	WARN_ON(cq_host->qcnt);
-
-	spin_lock_irqsave(&cq_host->lock, flags);
-	cq_host->qcnt = 0;
-	cq_host->recovery_halt = false;
-	mmc->cqe_on = false;
-	spin_unlock_irqrestore(&cq_host->lock, flags);
-
-	/* Ensure all writes are done before interrupts are re-enabled */
-	wmb();
-
-	cqhci_writel(cq_host, CQHCI_IS_HAC | CQHCI_IS_TCL, CQHCI_IS);
-
-	cqhci_set_irqs(cq_host, CQHCI_IS_MASK);
-
-	pr_debug("%s: cqhci: recovery done\n", mmc_hostname(mmc));
-}
-
-static const struct mmc_cqe_ops cqhci_cqe_ops = {
-	.cqe_enable = cqhci_enable,
-	.cqe_disable = cqhci_disable,
-	.cqe_request = cqhci_request,
-	.cqe_post_req = cqhci_post_req,
-	.cqe_off = cqhci_off,
-	.cqe_wait_for_idle = cqhci_wait_for_idle,
-	.cqe_timeout = cqhci_timeout,
-	.cqe_recovery_start = cqhci_recovery_start,
-	.cqe_recovery_finish = cqhci_recovery_finish,
-};
-
-struct cqhci_host *cqhci_pltfm_init(struct platform_device *pdev)
-{
-	struct cqhci_host *cq_host;
-	struct resource *cqhci_memres = NULL;
-
-	/* check and setup CMDQ interface */
-	cqhci_memres = platform_get_resource_byname(pdev, IORESOURCE_MEM,
-						   "cqhci_mem");
-	if (!cqhci_memres) {
-		dev_dbg(&pdev->dev, "CMDQ not supported\n");
-		return ERR_PTR(-EINVAL);
-	}
-
-	cq_host = devm_kzalloc(&pdev->dev, sizeof(*cq_host), GFP_KERNEL);
-	if (!cq_host)
-		return ERR_PTR(-ENOMEM);
-	cq_host->mmio = devm_ioremap(&pdev->dev,
-				     cqhci_memres->start,
-				     resource_size(cqhci_memres));
-	if (!cq_host->mmio) {
-		dev_err(&pdev->dev, "failed to remap cqhci regs\n");
-		return ERR_PTR(-EBUSY);
-	}
-	dev_dbg(&pdev->dev, "CMDQ ioremap: done\n");
-
-	return cq_host;
-}
-EXPORT_SYMBOL(cqhci_pltfm_init);
-
-static unsigned int cqhci_ver_major(struct cqhci_host *cq_host)
-{
-	return CQHCI_VER_MAJOR(cqhci_readl(cq_host, CQHCI_VER));
-}
-
-static unsigned int cqhci_ver_minor(struct cqhci_host *cq_host)
-{
-	u32 ver = cqhci_readl(cq_host, CQHCI_VER);
-
-	return CQHCI_VER_MINOR1(ver) * 10 + CQHCI_VER_MINOR2(ver);
-}
-
-int cqhci_init(struct cqhci_host *cq_host, struct mmc_host *mmc,
-	      bool dma64)
-{
-	int err;
-
-	cq_host->dma64 = dma64;
-	cq_host->mmc = mmc;
-	cq_host->mmc->cqe_private = cq_host;
-
-	cq_host->num_slots = NUM_SLOTS;
-	cq_host->dcmd_slot = DCMD_SLOT;
-
-	mmc->cqe_ops = &cqhci_cqe_ops;
-
-	mmc->cqe_qdepth = NUM_SLOTS;
-	if (mmc->caps2 & MMC_CAP2_CQE_DCMD)
-		mmc->cqe_qdepth -= 1;
-
-	cq_host->slot = devm_kcalloc(mmc_dev(mmc), cq_host->num_slots,
-				     sizeof(*cq_host->slot), GFP_KERNEL);
-	if (!cq_host->slot) {
-		err = -ENOMEM;
-		goto out_err;
-	}
-
-	spin_lock_init(&cq_host->lock);
-
-	init_completion(&cq_host->halt_comp);
-	init_waitqueue_head(&cq_host->wait_queue);
-
-	pr_info("%s: CQHCI version %u.%02u\n",
-		mmc_hostname(mmc), cqhci_ver_major(cq_host),
-		cqhci_ver_minor(cq_host));
-
-	return 0;
-
-out_err:
-	pr_err("%s: CQHCI version %u.%02u failed to initialize, error %d\n",
-	       mmc_hostname(mmc), cqhci_ver_major(cq_host),
-	       cqhci_ver_minor(cq_host), err);
-	return err;
-}
-EXPORT_SYMBOL(cqhci_init);
-
-MODULE_AUTHOR("Venkat Gopalakrishnan <venkatg@codeaurora.org>");
-MODULE_DESCRIPTION("Command Queue Host Controller Interface driver");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/cqhci.h b/drivers/mmc/host/cqhci.h
index 4377001..e08fa17 100644
--- a/drivers/mmc/host/cqhci.h
+++ b/drivers/mmc/host/cqhci.h
@@ -22,10 +22,13 @@
 
 /* capabilities */
 #define CQHCI_CAP			0x04
+#define CQHCI_CAP_CS			0x10000000 /* Crypto Support */
+
 /* configuration */
 #define CQHCI_CFG			0x08
 #define CQHCI_DCMD			0x00001000
 #define CQHCI_TASK_DESC_SZ		0x00000100
+#define CQHCI_CRYPTO_GENERAL_ENABLE	0x00000002
 #define CQHCI_ENABLE			0x00000001
 
 /* control */
@@ -39,8 +42,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) /* General Crypto Error */
+#define CQHCI_IS_ICCE			BIT(5) /* Invalid Crypto Config Error */
 
-#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
@@ -78,6 +84,9 @@
 /* task clear */
 #define CQHCI_TCLR			0x38
 
+/* task descriptor processing error */
+#define CQHCI_TDPE			0x3c
+
 /* send status config 1 */
 #define CQHCI_SSC1			0x40
 #define CQHCI_SSC1_CBC_MASK		GENMASK(19, 16)
@@ -107,6 +116,10 @@
 /* command response argument */
 #define CQHCI_CRA			0x5C
 
+/* crypto capabilities */
+#define CQHCI_CCAP			0x100
+#define CQHCI_CRYPTOCAP			0x104
+
 #define CQHCI_INT_ALL			0xF
 #define CQHCI_IC_DEFAULT_ICCTH		31
 #define CQHCI_IC_DEFAULT_ICTOVAL	1
@@ -133,11 +146,70 @@
 #define CQHCI_CMD_TIMING(x)		(((x) & 1) << 22)
 #define CQHCI_RESP_TYPE(x)		(((x) & 0x3) << 23)
 
+/* crypto task descriptor fields (for bits 64-127 of task descriptor) */
+#define CQHCI_CRYPTO_ENABLE_BIT		(1ULL << 47)
+#define CQHCI_CRYPTO_KEYSLOT(x)		((u64)(x) << 32)
+
 /* transfer descriptor fields */
 #define CQHCI_DAT_LENGTH(x)		(((x) & 0xFFFF) << 16)
 #define CQHCI_DAT_ADDR_LO(x)		(((x) & 0xFFFFFFFF) << 32)
 #define CQHCI_DAT_ADDR_HI(x)		(((x) & 0xFFFFFFFF) << 0)
 
+/* CCAP - Crypto Capability 100h */
+union cqhci_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+enum cqhci_crypto_key_size {
+	CQHCI_CRYPTO_KEY_SIZE_INVALID	= 0,
+	CQHCI_CRYPTO_KEY_SIZE_128	= 1,
+	CQHCI_CRYPTO_KEY_SIZE_192	= 2,
+	CQHCI_CRYPTO_KEY_SIZE_256	= 3,
+	CQHCI_CRYPTO_KEY_SIZE_512	= 4,
+};
+
+enum cqhci_crypto_alg {
+	CQHCI_CRYPTO_ALG_AES_XTS		= 0,
+	CQHCI_CRYPTO_ALG_BITLOCKER_AES_CBC	= 1,
+	CQHCI_CRYPTO_ALG_AES_ECB		= 2,
+	CQHCI_CRYPTO_ALG_ESSIV_AES_CBC		= 3,
+};
+
+/* x-CRYPTOCAP - Crypto Capability X */
+union cqhci_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask; /* Supported data unit size mask */
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+#define CQHCI_CRYPTO_CONFIGURATION_ENABLE (1 << 7)
+#define CQHCI_CRYPTO_KEY_MAX_SIZE 64
+/* x-CRYPTOCFG - Crypto Configuration X */
+union cqhci_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[CQHCI_CRYPTO_KEY_MAX_SIZE];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
 struct cqhci_host_ops;
 struct mmc_host;
 struct mmc_request;
@@ -196,6 +268,12 @@
 	struct completion halt_comp;
 	wait_queue_head_t wait_queue;
 	struct cqhci_slot *slot;
+
+#ifdef CONFIG_MMC_CRYPTO
+	union cqhci_crypto_capabilities crypto_capabilities;
+	union cqhci_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+#endif
 };
 
 struct cqhci_host_ops {
@@ -206,6 +284,10 @@
 	void (*disable)(struct mmc_host *mmc, bool recovery);
 	void (*update_dcmd_desc)(struct mmc_host *mmc, struct mmc_request *mrq,
 				 u64 *data);
+#ifdef CONFIG_MMC_CRYPTO
+	int (*program_key)(struct cqhci_host *cq_host,
+			   const union cqhci_crypto_cfg_entry *cfg, int slot);
+#endif
 };
 
 static inline void cqhci_writel(struct cqhci_host *host, u32 val, int reg)
diff --git a/drivers/mmc/host/mmc_hsq.c b/drivers/mmc/host/mmc_hsq.c
new file mode 100644
index 0000000..a5e05ed
--- /dev/null
+++ b/drivers/mmc/host/mmc_hsq.c
@@ -0,0 +1,375 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ *
+ * MMC software queue support based on command queue interfaces
+ *
+ * Copyright (C) 2019 Linaro, Inc.
+ * Author: Baolin Wang <baolin.wang@linaro.org>
+ */
+
+#include <linux/mmc/card.h>
+#include <linux/mmc/host.h>
+#include <linux/module.h>
+
+#include "mmc_hsq.h"
+
+#define HSQ_NUM_SLOTS	64
+#define HSQ_INVALID_TAG	HSQ_NUM_SLOTS
+
+static void mmc_hsq_retry_handler(struct work_struct *work)
+{
+	struct mmc_hsq *hsq = container_of(work, struct mmc_hsq, retry_work);
+	struct mmc_host *mmc = hsq->mmc;
+
+	mmc->ops->request(mmc, hsq->mrq);
+}
+
+static void mmc_hsq_pump_requests(struct mmc_hsq *hsq)
+{
+	struct mmc_host *mmc = hsq->mmc;
+	struct hsq_slot *slot;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	/* Make sure we are not already running a request now */
+	if (hsq->mrq) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	/* Make sure there are remain requests need to pump */
+	if (!hsq->qcnt || !hsq->enabled) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	slot = &hsq->slot[hsq->next_tag];
+	hsq->mrq = slot->mrq;
+	hsq->qcnt--;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	if (mmc->ops->request_atomic)
+		ret = mmc->ops->request_atomic(mmc, hsq->mrq);
+	else
+		mmc->ops->request(mmc, hsq->mrq);
+
+	/*
+	 * If returning BUSY from request_atomic(), which means the card
+	 * may be busy now, and we should change to non-atomic context to
+	 * try again for this unusual case, to avoid time-consuming operations
+	 * in the atomic context.
+	 *
+	 * Note: we just give a warning for other error cases, since the host
+	 * driver will handle them.
+	 */
+	if (ret == -EBUSY)
+		schedule_work(&hsq->retry_work);
+	else
+		WARN_ON_ONCE(ret);
+}
+
+static void mmc_hsq_update_next_tag(struct mmc_hsq *hsq, int remains)
+{
+	struct hsq_slot *slot;
+	int tag;
+
+	/*
+	 * If there are no remain requests in software queue, then set a invalid
+	 * tag.
+	 */
+	if (!remains) {
+		hsq->next_tag = HSQ_INVALID_TAG;
+		return;
+	}
+
+	/*
+	 * Increasing the next tag and check if the corresponding request is
+	 * available, if yes, then we found a candidate request.
+	 */
+	if (++hsq->next_tag != HSQ_INVALID_TAG) {
+		slot = &hsq->slot[hsq->next_tag];
+		if (slot->mrq)
+			return;
+	}
+
+	/* Othersie we should iterate all slots to find a available tag. */
+	for (tag = 0; tag < HSQ_NUM_SLOTS; tag++) {
+		slot = &hsq->slot[tag];
+		if (slot->mrq)
+			break;
+	}
+
+	if (tag == HSQ_NUM_SLOTS)
+		tag = HSQ_INVALID_TAG;
+
+	hsq->next_tag = tag;
+}
+
+static void mmc_hsq_post_request(struct mmc_hsq *hsq)
+{
+	unsigned long flags;
+	int remains;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	remains = hsq->qcnt;
+	hsq->mrq = NULL;
+
+	/* Update the next available tag to be queued. */
+	mmc_hsq_update_next_tag(hsq, remains);
+
+	if (hsq->waiting_for_idle && !remains) {
+		hsq->waiting_for_idle = false;
+		wake_up(&hsq->wait_queue);
+	}
+
+	/* Do not pump new request in recovery mode. */
+	if (hsq->recovery_halt) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return;
+	}
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	 /*
+	  * Try to pump new request to host controller as fast as possible,
+	  * after completing previous request.
+	  */
+	if (remains > 0)
+		mmc_hsq_pump_requests(hsq);
+}
+
+/**
+ * mmc_hsq_finalize_request - finalize one request if the request is done
+ * @mmc: the host controller
+ * @mrq: the request need to be finalized
+ *
+ * Return true if we finalized the corresponding request in software queue,
+ * otherwise return false.
+ */
+bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	if (!hsq->enabled || !hsq->mrq || hsq->mrq != mrq) {
+		spin_unlock_irqrestore(&hsq->lock, flags);
+		return false;
+	}
+
+	/*
+	 * Clear current completed slot request to make a room for new request.
+	 */
+	hsq->slot[hsq->next_tag].mrq = NULL;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+
+	mmc_cqe_request_done(mmc, hsq->mrq);
+
+	mmc_hsq_post_request(hsq);
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_finalize_request);
+
+static void mmc_hsq_recovery_start(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hsq->lock, flags);
+
+	hsq->recovery_halt = true;
+
+	spin_unlock_irqrestore(&hsq->lock, flags);
+}
+
+static void mmc_hsq_recovery_finish(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int remains;
+
+	spin_lock_irq(&hsq->lock);
+
+	hsq->recovery_halt = false;
+	remains = hsq->qcnt;
+
+	spin_unlock_irq(&hsq->lock);
+
+	/*
+	 * Try to pump new request if there are request pending in software
+	 * queue after finishing recovery.
+	 */
+	if (remains > 0)
+		mmc_hsq_pump_requests(hsq);
+}
+
+static int mmc_hsq_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int tag = mrq->tag;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (!hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return -ESHUTDOWN;
+	}
+
+	/* Do not queue any new requests in recovery mode. */
+	if (hsq->recovery_halt) {
+		spin_unlock_irq(&hsq->lock);
+		return -EBUSY;
+	}
+
+	hsq->slot[tag].mrq = mrq;
+
+	/*
+	 * Set the next tag as current request tag if no available
+	 * next tag.
+	 */
+	if (hsq->next_tag == HSQ_INVALID_TAG)
+		hsq->next_tag = tag;
+
+	hsq->qcnt++;
+
+	spin_unlock_irq(&hsq->lock);
+
+	mmc_hsq_pump_requests(hsq);
+
+	return 0;
+}
+
+static void mmc_hsq_post_req(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	if (mmc->ops->post_req)
+		mmc->ops->post_req(mmc, mrq, 0);
+}
+
+static bool mmc_hsq_queue_is_idle(struct mmc_hsq *hsq, int *ret)
+{
+	bool is_idle;
+
+	spin_lock_irq(&hsq->lock);
+
+	is_idle = (!hsq->mrq && !hsq->qcnt) ||
+		hsq->recovery_halt;
+
+	*ret = hsq->recovery_halt ? -EBUSY : 0;
+	hsq->waiting_for_idle = !is_idle;
+
+	spin_unlock_irq(&hsq->lock);
+
+	return is_idle;
+}
+
+static int mmc_hsq_wait_for_idle(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	int ret;
+
+	wait_event(hsq->wait_queue,
+		   mmc_hsq_queue_is_idle(hsq, &ret));
+
+	return ret;
+}
+
+static void mmc_hsq_disable(struct mmc_host *mmc)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+	u32 timeout = 500;
+	int ret;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (!hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return;
+	}
+
+	spin_unlock_irq(&hsq->lock);
+
+	ret = wait_event_timeout(hsq->wait_queue,
+				 mmc_hsq_queue_is_idle(hsq, &ret),
+				 msecs_to_jiffies(timeout));
+	if (ret == 0) {
+		pr_warn("could not stop mmc software queue\n");
+		return;
+	}
+
+	spin_lock_irq(&hsq->lock);
+
+	hsq->enabled = false;
+
+	spin_unlock_irq(&hsq->lock);
+}
+
+static int mmc_hsq_enable(struct mmc_host *mmc, struct mmc_card *card)
+{
+	struct mmc_hsq *hsq = mmc->cqe_private;
+
+	spin_lock_irq(&hsq->lock);
+
+	if (hsq->enabled) {
+		spin_unlock_irq(&hsq->lock);
+		return -EBUSY;
+	}
+
+	hsq->enabled = true;
+
+	spin_unlock_irq(&hsq->lock);
+
+	return 0;
+}
+
+static const struct mmc_cqe_ops mmc_hsq_ops = {
+	.cqe_enable = mmc_hsq_enable,
+	.cqe_disable = mmc_hsq_disable,
+	.cqe_request = mmc_hsq_request,
+	.cqe_post_req = mmc_hsq_post_req,
+	.cqe_wait_for_idle = mmc_hsq_wait_for_idle,
+	.cqe_recovery_start = mmc_hsq_recovery_start,
+	.cqe_recovery_finish = mmc_hsq_recovery_finish,
+};
+
+int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc)
+{
+	hsq->num_slots = HSQ_NUM_SLOTS;
+	hsq->next_tag = HSQ_INVALID_TAG;
+
+	hsq->slot = devm_kcalloc(mmc_dev(mmc), hsq->num_slots,
+				 sizeof(struct hsq_slot), GFP_KERNEL);
+	if (!hsq->slot)
+		return -ENOMEM;
+
+	hsq->mmc = mmc;
+	hsq->mmc->cqe_private = hsq;
+	mmc->cqe_ops = &mmc_hsq_ops;
+
+	INIT_WORK(&hsq->retry_work, mmc_hsq_retry_handler);
+	spin_lock_init(&hsq->lock);
+	init_waitqueue_head(&hsq->wait_queue);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_init);
+
+void mmc_hsq_suspend(struct mmc_host *mmc)
+{
+	mmc_hsq_disable(mmc);
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_suspend);
+
+int mmc_hsq_resume(struct mmc_host *mmc)
+{
+	return mmc_hsq_enable(mmc, NULL);
+}
+EXPORT_SYMBOL_GPL(mmc_hsq_resume);
+
+MODULE_DESCRIPTION("MMC Host Software Queue support");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/mmc/host/mmc_hsq.h b/drivers/mmc/host/mmc_hsq.h
new file mode 100644
index 0000000..ffdd9cd
--- /dev/null
+++ b/drivers/mmc/host/mmc_hsq.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef LINUX_MMC_HSQ_H
+#define LINUX_MMC_HSQ_H
+
+struct hsq_slot {
+	struct mmc_request *mrq;
+};
+
+struct mmc_hsq {
+	struct mmc_host *mmc;
+	struct mmc_request *mrq;
+	wait_queue_head_t wait_queue;
+	struct hsq_slot *slot;
+	spinlock_t lock;
+	struct work_struct retry_work;
+
+	int next_tag;
+	int num_slots;
+	int qcnt;
+
+	bool enabled;
+	bool waiting_for_idle;
+	bool recovery_halt;
+};
+
+int mmc_hsq_init(struct mmc_hsq *hsq, struct mmc_host *mmc);
+void mmc_hsq_suspend(struct mmc_host *mmc);
+int mmc_hsq_resume(struct mmc_host *mmc);
+bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq);
+
+#endif
diff --git a/drivers/mmc/host/sdhci-msm.c b/drivers/mmc/host/sdhci-msm.c
index 8ab9630..0c8733e 100644
--- a/drivers/mmc/host/sdhci-msm.c
+++ b/drivers/mmc/host/sdhci-msm.c
@@ -12,9 +12,11 @@
 #include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/iopoll.h>
+#include <linux/qcom_scm.h>
 #include <linux/regulator/consumer.h>
 
 #include "sdhci-pltfm.h"
+#include "cqhci.h"
 
 #define CORE_MCI_VERSION		0x50
 #define CORE_VERSION_MAJOR_SHIFT	28
@@ -122,6 +124,10 @@
 #define msm_host_writel(msm_host, val, host, offset) \
 	msm_host->var_ops->msm_writel_relaxed(val, host, offset)
 
+/* CQHCI vendor specific registers */
+#define CQHCI_VENDOR_CFG1	0xA00
+#define CQHCI_VENDOR_DIS_RST_ON_CQ_EN	(0x3 << 13)
+
 struct sdhci_msm_offset {
 	u32 core_hc_mode;
 	u32 core_mci_data_cnt;
@@ -232,10 +238,12 @@
 struct sdhci_msm_host {
 	struct platform_device *pdev;
 	void __iomem *core_mem;	/* MSM SDCC mapped address */
+	void __iomem *ice_mem;	/* MSM ICE mapped address (if available) */
 	int pwr_irq;		/* power irq */
 	struct clk *bus_clk;	/* SDHC bus voter clock */
 	struct clk *xo_clk;	/* TCXO clk needed for FLL feature of cm_dll*/
-	struct clk_bulk_data bulk_clks[4]; /* core, iface, cal, sleep clocks */
+	/* core, iface, cal, sleep, and ice clocks */
+	struct clk_bulk_data bulk_clks[5];
 	unsigned long clk_rate;
 	struct mmc_host *mmc;
 	bool use_14lpp_dll_reset;
@@ -1589,6 +1597,384 @@
 	__sdhci_msm_set_clock(host, clock);
 }
 
+/*****************************************************************************\
+ *                                                                           *
+ * Inline Crypto Engine (ICE) support                                        *
+ *                                                                           *
+\*****************************************************************************/
+
+#ifdef CONFIG_MMC_CRYPTO
+
+#define AES_256_XTS_KEY_SIZE			64
+
+/* QCOM ICE registers */
+
+#define QCOM_ICE_REG_VERSION			0x0008
+
+#define QCOM_ICE_REG_FUSE_SETTING		0x0010
+#define QCOM_ICE_FUSE_SETTING_MASK		0x1
+#define QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK	0x2
+#define QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK	0x4
+
+#define QCOM_ICE_REG_BIST_STATUS		0x0070
+#define QCOM_ICE_BIST_STATUS_MASK		0xF0000000
+
+#define QCOM_ICE_REG_ADVANCED_CONTROL		0x1000
+
+#define sdhci_msm_ice_writel(host, val, reg)	\
+	writel((val), (host)->ice_mem + (reg))
+#define sdhci_msm_ice_readl(host, reg)	\
+	readl((host)->ice_mem + (reg))
+
+static bool sdhci_msm_ice_supported(struct sdhci_msm_host *msm_host)
+{
+	struct device *dev = mmc_dev(msm_host->mmc);
+	u32 regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_VERSION);
+	int major = regval >> 24;
+	int minor = (regval >> 16) & 0xFF;
+	int step = regval & 0xFFFF;
+
+	/* For now this driver only supports ICE version 3. */
+	if (major != 3) {
+		dev_warn(dev, "Unsupported ICE version: v%d.%d.%d\n",
+			 major, minor, step);
+		return false;
+	}
+
+	dev_info(dev, "Found QC Inline Crypto Engine (ICE) v%d.%d.%d\n",
+		 major, minor, step);
+
+	/* If fuses are blown, ICE might not work in the standard way. */
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_FUSE_SETTING);
+	if (regval & (QCOM_ICE_FUSE_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK)) {
+		dev_warn(dev, "Fuses are blown; ICE is unusable!\n");
+		return false;
+	}
+	return true;
+}
+
+static inline struct clk *sdhci_msm_ice_get_clk(struct device *dev)
+{
+	return devm_clk_get(dev, "ice");
+}
+
+static int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
+			      struct cqhci_host *cq_host)
+{
+	struct mmc_host *mmc = msm_host->mmc;
+	struct device *dev = mmc_dev(mmc);
+	struct resource *res;
+	int err;
+
+	if (!(cqhci_readl(cq_host, CQHCI_CAP) & CQHCI_CAP_CS))
+		return 0;
+
+	res = platform_get_resource_byname(msm_host->pdev, IORESOURCE_MEM,
+					   "ice");
+	if (!res) {
+		dev_warn(dev, "ICE registers not found\n");
+		goto disable;
+	}
+
+	if (!qcom_scm_ice_available()) {
+		dev_warn(dev, "ICE SCM interface not found\n");
+		goto disable;
+	}
+
+	msm_host->ice_mem = devm_ioremap_resource(dev, res);
+	if (IS_ERR(msm_host->ice_mem)) {
+		err = PTR_ERR(msm_host->ice_mem);
+		dev_err(dev, "Failed to map ICE registers; err=%d\n", err);
+		return err;
+	}
+
+	if (!sdhci_msm_ice_supported(msm_host))
+		goto disable;
+
+	mmc->caps2 |= MMC_CAP2_CRYPTO;
+	return 0;
+
+disable:
+	dev_warn(dev, "Disabling inline encryption support\n");
+	return 0;
+}
+
+static void sdhci_msm_ice_low_power_mode_enable(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	/*
+	 * Enable low power mode sequence
+	 * [0]-0, [1]-0, [2]-0, [3]-E, [4]-0, [5]-0, [6]-0, [7]-0
+	 */
+	regval |= 0x7000;
+	sdhci_msm_ice_writel(msm_host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+}
+
+static void sdhci_msm_ice_optimization_enable(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+
+	/* ICE Optimizations Enable Sequence */
+	regval = sdhci_msm_ice_readl(msm_host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	regval |= 0xD807100;
+	/* ICE HPG requires delay before writing */
+	udelay(5);
+	sdhci_msm_ice_writel(msm_host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+	udelay(5);
+}
+
+/*
+ * Wait until the ICE BIST (built-in self-test) has completed.
+ *
+ * This may be necessary before ICE can be used.
+ *
+ * Note that we don't really care whether the BIST passed or failed; we really
+ * just want to make sure that it isn't still running.  This is because (a) the
+ * BIST is a FIPS compliance thing that never fails in practice, (b) ICE is
+ * documented to reject crypto requests if the BIST fails, so we needn't do it
+ * in software too, and (c) properly testing storage encryption requires testing
+ * the full storage stack anyway, and not relying on hardware-level self-tests.
+ */
+static int sdhci_msm_ice_wait_bist_status(struct sdhci_msm_host *msm_host)
+{
+	u32 regval;
+	int err;
+
+	err = readl_poll_timeout(msm_host->ice_mem + QCOM_ICE_REG_BIST_STATUS,
+				 regval, !(regval & QCOM_ICE_BIST_STATUS_MASK),
+				 50, 5000);
+	if (err)
+		dev_err(mmc_dev(msm_host->mmc),
+			"Timed out waiting for ICE self-test to complete\n");
+	return err;
+}
+
+static void sdhci_msm_ice_enable(struct sdhci_msm_host *msm_host)
+{
+	if (!(msm_host->mmc->caps2 & MMC_CAP2_CRYPTO))
+		return;
+	sdhci_msm_ice_low_power_mode_enable(msm_host);
+	sdhci_msm_ice_optimization_enable(msm_host);
+	sdhci_msm_ice_wait_bist_status(msm_host);
+}
+
+static int __maybe_unused sdhci_msm_ice_resume(struct sdhci_msm_host *msm_host)
+{
+	if (!(msm_host->mmc->caps2 & MMC_CAP2_CRYPTO))
+		return 0;
+	return sdhci_msm_ice_wait_bist_status(msm_host);
+}
+
+/*
+ * Program a key into a QC ICE keyslot, or evict a keyslot.  QC ICE requires
+ * vendor-specific SCM calls for this; it doesn't support the standard way.
+ */
+static int sdhci_msm_program_key(struct cqhci_host *cq_host,
+				 const union cqhci_crypto_cfg_entry *cfg,
+				 int slot)
+{
+	struct device *dev = mmc_dev(cq_host->mmc);
+	union cqhci_crypto_cap_entry cap;
+	union {
+		u8 bytes[AES_256_XTS_KEY_SIZE];
+		u32 words[AES_256_XTS_KEY_SIZE / sizeof(u32)];
+	} key;
+	int i;
+	int err;
+
+	if (!(cfg->config_enable & CQHCI_CRYPTO_CONFIGURATION_ENABLE))
+		return qcom_scm_ice_invalidate_key(slot);
+
+	/* Only AES-256-XTS has been tested so far. */
+	cap = cq_host->crypto_cap_array[cfg->crypto_cap_idx];
+	if (cap.algorithm_id != CQHCI_CRYPTO_ALG_AES_XTS ||
+	    cap.key_size != CQHCI_CRYPTO_KEY_SIZE_256) {
+		dev_err_ratelimited(dev,
+				    "Unhandled crypto capability; algorithm_id=%d, key_size=%d\n",
+				    cap.algorithm_id, cap.key_size);
+		return -EINVAL;
+	}
+
+	memcpy(key.bytes, cfg->crypto_key, AES_256_XTS_KEY_SIZE);
+
+	/*
+	 * The SCM call byte-swaps the 32-bit words of the key.  So we have to
+	 * do the same, in order for the final key be correct.
+	 */
+	for (i = 0; i < ARRAY_SIZE(key.words); i++)
+		__cpu_to_be32s(&key.words[i]);
+
+	err = qcom_scm_ice_set_key(slot, key.bytes, AES_256_XTS_KEY_SIZE,
+				   QCOM_SCM_ICE_CIPHER_AES_256_XTS,
+				   cfg->data_unit_size);
+	memzero_explicit(&key, sizeof(key));
+	return err;
+}
+#else /* CONFIG_MMC_CRYPTO */
+static inline struct clk *sdhci_msm_ice_get_clk(struct device *dev)
+{
+	return NULL;
+}
+
+static inline int sdhci_msm_ice_init(struct sdhci_msm_host *msm_host,
+				     struct cqhci_host *cq_host)
+{
+	return 0;
+}
+
+static inline void sdhci_msm_ice_enable(struct sdhci_msm_host *msm_host)
+{
+}
+
+static inline int __maybe_unused
+sdhci_msm_ice_resume(struct sdhci_msm_host *msm_host)
+{
+	return 0;
+}
+#endif /* !CONFIG_MMC_CRYPTO */
+
+/*****************************************************************************\
+ *                                                                           *
+ * MSM Command Queue Engine (CQE)                                            *
+ *                                                                           *
+\*****************************************************************************/
+
+static u32 sdhci_msm_cqe_irq(struct sdhci_host *host, u32 intmask)
+{
+	int cmd_error = 0;
+	int data_error = 0;
+
+	if (!sdhci_cqe_irq(host, intmask, &cmd_error, &data_error))
+		return intmask;
+
+	cqhci_irq(host->mmc, intmask, cmd_error, data_error);
+	return 0;
+}
+
+static void sdhci_msm_cqe_enable(struct mmc_host *mmc)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
+
+	sdhci_cqe_enable(mmc);
+	sdhci_msm_ice_enable(msm_host);
+}
+
+static void sdhci_msm_cqe_disable(struct mmc_host *mmc, bool recovery)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	unsigned long flags;
+	u32 ctrl;
+
+	/*
+	 * When CQE is halted, the legacy SDHCI path operates only
+	 * on 16-byte descriptors in 64bit mode.
+	 */
+	if (host->flags & SDHCI_USE_64_BIT_DMA)
+		host->desc_sz = 16;
+
+	spin_lock_irqsave(&host->lock, flags);
+
+	/*
+	 * During CQE command transfers, command complete bit gets latched.
+	 * So s/w should clear command complete interrupt status when CQE is
+	 * either halted or disabled. Otherwise unexpected SDCHI legacy
+	 * interrupt gets triggered when CQE is halted/disabled.
+	 */
+	ctrl = sdhci_readl(host, SDHCI_INT_ENABLE);
+	ctrl |= SDHCI_INT_RESPONSE;
+	sdhci_writel(host,  ctrl, SDHCI_INT_ENABLE);
+	sdhci_writel(host, SDHCI_INT_RESPONSE, SDHCI_INT_STATUS);
+
+	spin_unlock_irqrestore(&host->lock, flags);
+
+	sdhci_cqe_disable(mmc, recovery);
+}
+
+static const struct cqhci_host_ops sdhci_msm_cqhci_ops = {
+	.enable		= sdhci_msm_cqe_enable,
+	.disable	= sdhci_msm_cqe_disable,
+#ifdef CONFIG_MMC_CRYPTO
+	.program_key	= sdhci_msm_program_key,
+#endif
+};
+
+static int sdhci_msm_cqe_add_host(struct sdhci_host *host,
+				struct platform_device *pdev)
+{
+	struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host);
+	struct sdhci_msm_host *msm_host = sdhci_pltfm_priv(pltfm_host);
+	struct cqhci_host *cq_host;
+	bool dma64;
+	u32 cqcfg;
+	int ret;
+
+	/*
+	 * When CQE is halted, SDHC operates only on 16byte ADMA descriptors.
+	 * So ensure ADMA table is allocated for 16byte descriptors.
+	 */
+	if (host->caps & SDHCI_CAN_64BIT)
+		host->alloc_desc_sz = 16;
+
+	ret = sdhci_setup_host(host);
+	if (ret)
+		return ret;
+
+	cq_host = cqhci_pltfm_init(pdev);
+	if (IS_ERR(cq_host)) {
+		ret = PTR_ERR(cq_host);
+		dev_err(&pdev->dev, "cqhci-pltfm init: failed: %d\n", ret);
+		goto cleanup;
+	}
+
+	msm_host->mmc->caps2 |= MMC_CAP2_CQE | MMC_CAP2_CQE_DCMD;
+	cq_host->ops = &sdhci_msm_cqhci_ops;
+
+	dma64 = host->flags & SDHCI_USE_64_BIT_DMA;
+
+	ret = sdhci_msm_ice_init(msm_host, cq_host);
+	if (ret)
+		goto cleanup;
+
+	ret = cqhci_init(cq_host, host->mmc, dma64);
+	if (ret) {
+		dev_err(&pdev->dev, "%s: CQE init: failed (%d)\n",
+				mmc_hostname(host->mmc), ret);
+		goto cleanup;
+	}
+
+	/* Disable cqe reset due to cqe enable signal */
+	cqcfg = cqhci_readl(cq_host, CQHCI_VENDOR_CFG1);
+	cqcfg |= CQHCI_VENDOR_DIS_RST_ON_CQ_EN;
+	cqhci_writel(cq_host, cqcfg, CQHCI_VENDOR_CFG1);
+
+	/*
+	 * SDHC expects 12byte ADMA descriptors till CQE is enabled.
+	 * So limit desc_sz to 12 so that the data commands that are sent
+	 * during card initialization (before CQE gets enabled) would
+	 * get executed without any issues.
+	 */
+	if (host->flags & SDHCI_USE_64_BIT_DMA)
+		host->desc_sz = 12;
+
+	ret = __sdhci_add_host(host);
+	if (ret)
+		goto cleanup;
+
+	dev_info(&pdev->dev, "%s: CQE init: success\n",
+			mmc_hostname(host->mmc));
+	return ret;
+
+cleanup:
+	sdhci_cleanup_host(host);
+	return ret;
+}
+
 static void sdhci_msm_set_timeout(struct sdhci_host *host, struct mmc_command *cmd)
 {
 	u32 count, start = 15;
@@ -1724,6 +2110,13 @@
 	pr_debug("%s: supported caps: 0x%08x\n", mmc_hostname(mmc), caps);
 }
 
+static void sdhci_msm_reset(struct sdhci_host *host, u8 mask)
+{
+	if ((host->mmc->caps2 & MMC_CAP2_CQE) && (mask & SDHCI_RESET_ALL))
+		cqhci_deactivate(host->mmc);
+	sdhci_reset(host, mask);
+}
+
 static const struct sdhci_msm_variant_ops mci_var_ops = {
 	.msm_readl_relaxed = sdhci_msm_mci_variant_readl_relaxed,
 	.msm_writel_relaxed = sdhci_msm_mci_variant_writel_relaxed,
@@ -1762,7 +2155,7 @@
 MODULE_DEVICE_TABLE(of, sdhci_msm_dt_match);
 
 static const struct sdhci_ops sdhci_msm_ops = {
-	.reset = sdhci_reset,
+	.reset = sdhci_msm_reset,
 	.set_clock = sdhci_msm_set_clock,
 	.get_min_clock = sdhci_msm_get_min_clock,
 	.get_max_clock = sdhci_msm_get_max_clock,
@@ -1771,6 +2164,7 @@
 	.write_w = sdhci_msm_writew,
 	.write_b = sdhci_msm_writeb,
 	.set_timeout = sdhci_msm_set_timeout,
+	.irq	= sdhci_msm_cqe_irq,
 };
 
 static const struct sdhci_pltfm_data sdhci_msm_pdata = {
@@ -1796,6 +2190,7 @@
 	u8 core_major;
 	const struct sdhci_msm_offset *msm_offset;
 	const struct sdhci_msm_variant_info *var_info;
+	struct device_node *node = pdev->dev.of_node;
 
 	host = sdhci_pltfm_init(pdev, &sdhci_msm_pdata, sizeof(*msm_host));
 	if (IS_ERR(host))
@@ -1873,6 +2268,11 @@
 		clk = NULL;
 	msm_host->bulk_clks[3].clk = clk;
 
+	clk = sdhci_msm_ice_get_clk(&pdev->dev);
+	if (IS_ERR(clk))
+		clk = NULL;
+	msm_host->bulk_clks[4].clk = clk;
+
 	ret = clk_bulk_prepare_enable(ARRAY_SIZE(msm_host->bulk_clks),
 				      msm_host->bulk_clks);
 	if (ret)
@@ -1996,7 +2396,10 @@
 	pm_runtime_use_autosuspend(&pdev->dev);
 
 	host->mmc_host_ops.execute_tuning = sdhci_msm_execute_tuning;
-	ret = sdhci_add_host(host);
+	if (of_property_read_bool(node, "supports-cqe"))
+		ret = sdhci_msm_cqe_add_host(host, pdev);
+	else
+		ret = sdhci_add_host(host);
 	if (ret)
 		goto pm_runtime_disable;
 	sdhci_msm_set_regulator_caps(msm_host);
@@ -2070,10 +2473,13 @@
 	 * Whenever core-clock is gated dynamically, it's needed to
 	 * restore the SDR DLL settings when the clock is ungated.
 	 */
-	if (msm_host->restore_dll_config && msm_host->clk_rate)
-		return sdhci_msm_restore_sdr_dll_config(host);
+	if (msm_host->restore_dll_config && msm_host->clk_rate) {
+		ret = sdhci_msm_restore_sdr_dll_config(host);
+		if (ret)
+			return ret;
+	}
 
-	return 0;
+	return sdhci_msm_ice_resume(msm_host);
 }
 
 static const struct dev_pm_ops sdhci_msm_pm_ops = {
diff --git a/drivers/mmc/host/sdhci-sprd.c b/drivers/mmc/host/sdhci-sprd.c
index a999d20..4ac419f 100644
--- a/drivers/mmc/host/sdhci-sprd.c
+++ b/drivers/mmc/host/sdhci-sprd.c
@@ -19,6 +19,7 @@
 #include <linux/slab.h>
 
 #include "sdhci-pltfm.h"
+#include "mmc_hsq.h"
 
 /* SDHCI_ARGUMENT2 register high 16bit */
 #define SDHCI_SPRD_ARG2_STUFF		GENMASK(31, 16)
@@ -379,6 +380,16 @@
 	return 0;
 }
 
+static void sdhci_sprd_request_done(struct sdhci_host *host,
+				    struct mmc_request *mrq)
+{
+	/* Validate if the request was from software queue firstly. */
+	if (mmc_hsq_finalize_request(host->mmc, mrq))
+		return;
+
+	 mmc_request_done(host->mmc, mrq);
+}
+
 static struct sdhci_ops sdhci_sprd_ops = {
 	.read_l = sdhci_sprd_readl,
 	.write_l = sdhci_sprd_writel,
@@ -393,9 +404,11 @@
 	.hw_reset = sdhci_sprd_hw_reset,
 	.get_max_timeout_count = sdhci_sprd_get_max_timeout_count,
 	.get_ro = sdhci_sprd_get_ro,
+	.request_done = sdhci_sprd_request_done,
 };
 
-static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq)
+static void sdhci_sprd_check_auto_cmd23(struct mmc_host *mmc,
+					struct mmc_request *mrq)
 {
 	struct sdhci_host *host = mmc_priv(mmc);
 	struct sdhci_sprd_host *sprd_host = TO_SPRD_HOST(host);
@@ -411,10 +424,23 @@
 	    mrq->sbc && (mrq->sbc->arg & SDHCI_SPRD_ARG2_STUFF) &&
 	    (host->flags & SDHCI_AUTO_CMD23))
 		host->flags &= ~SDHCI_AUTO_CMD23;
+}
+
+static void sdhci_sprd_request(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	sdhci_sprd_check_auto_cmd23(mmc, mrq);
 
 	sdhci_request(mmc, mrq);
 }
 
+static int sdhci_sprd_request_atomic(struct mmc_host *mmc,
+				      struct mmc_request *mrq)
+{
+	sdhci_sprd_check_auto_cmd23(mmc, mrq);
+
+	return sdhci_request_atomic(mmc, mrq);
+}
+
 static int sdhci_sprd_voltage_switch(struct mmc_host *mmc, struct mmc_ios *ios)
 {
 	struct sdhci_host *host = mmc_priv(mmc);
@@ -522,6 +548,7 @@
 {
 	struct sdhci_host *host;
 	struct sdhci_sprd_host *sprd_host;
+	struct mmc_hsq *hsq;
 	struct clk *clk;
 	int ret = 0;
 
@@ -544,11 +571,17 @@
 		sdhci_sprd_voltage_switch;
 
 	host->mmc->caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED |
-		MMC_CAP_ERASE | MMC_CAP_CMD23;
+		MMC_CAP_WAIT_WHILE_BUSY;
+
 	ret = mmc_of_parse(host->mmc);
 	if (ret)
 		goto pltfm_free;
 
+	if (!mmc_card_is_removable(host->mmc))
+		host->mmc_host_ops.request_atomic = sdhci_sprd_request_atomic;
+	else
+		host->always_defer_done = true;
+
 	sprd_host = TO_SPRD_HOST(host);
 	sdhci_sprd_phy_param_parse(sprd_host, pdev->dev.of_node);
 
@@ -632,6 +665,16 @@
 
 	sprd_host->flags = host->flags;
 
+	hsq = devm_kzalloc(&pdev->dev, sizeof(*hsq), GFP_KERNEL);
+	if (!hsq) {
+		ret = -ENOMEM;
+		goto err_cleanup_host;
+	}
+
+	ret = mmc_hsq_init(hsq, host->mmc);
+	if (ret)
+		goto err_cleanup_host;
+
 	ret = __sdhci_add_host(host);
 	if (ret)
 		goto err_cleanup_host;
@@ -690,6 +733,7 @@
 	struct sdhci_host *host = dev_get_drvdata(dev);
 	struct sdhci_sprd_host *sprd_host = TO_SPRD_HOST(host);
 
+	mmc_hsq_suspend(host->mmc);
 	sdhci_runtime_suspend_host(host);
 
 	clk_disable_unprepare(sprd_host->clk_sdio);
@@ -718,6 +762,8 @@
 		goto clk_disable;
 
 	sdhci_runtime_resume_host(host, 1);
+	mmc_hsq_resume(host->mmc);
+
 	return 0;
 
 clk_disable:
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index deafcc5..f07dac4 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -46,10 +46,10 @@
 static unsigned int debug_quirks = 0;
 static unsigned int debug_quirks2;
 
-static void sdhci_finish_data(struct sdhci_host *);
-
 static void sdhci_enable_preset_value(struct sdhci_host *host, bool enable);
 
+static bool sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd);
+
 void sdhci_dumpregs(struct sdhci_host *host)
 {
 	SDHCI_DUMP("============ SDHCI REGISTER DUMP ===========\n");
@@ -109,6 +109,9 @@
 		}
 	}
 
+	if (host->ops->dump_vendor_regs)
+		host->ops->dump_vendor_regs(host);
+
 	SDHCI_DUMP("============================================\n");
 }
 EXPORT_SYMBOL_GPL(sdhci_dumpregs);
@@ -749,19 +752,7 @@
 			len -= offset;
 		}
 
-		/*
-		 * The block layer forces a minimum segment size of PAGE_SIZE,
-		 * so 'len' can be too big here if PAGE_SIZE >= 64KiB. Write
-		 * multiple descriptors, noting that the ADMA table is sized
-		 * for 4KiB chunks anyway, so it will be big enough.
-		 */
-		while (len > host->max_adma) {
-			int n = 32 * 1024; /* 32KiB*/
-
-			__sdhci_adma_write_desc(host, &desc, addr, n, ADMA2_TRAN_VALID);
-			addr += n;
-			len -= n;
-		}
+		BUG_ON(len > 65536);
 
 		/* tran, valid */
 		if (len)
@@ -1162,13 +1153,25 @@
 	       !mrq->cap_cmd_during_tfr;
 }
 
+static inline bool sdhci_auto_cmd23(struct sdhci_host *host,
+				    struct mmc_request *mrq)
+{
+	return mrq->sbc && (host->flags & SDHCI_AUTO_CMD23);
+}
+
+static inline bool sdhci_manual_cmd23(struct sdhci_host *host,
+				      struct mmc_request *mrq)
+{
+	return mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23);
+}
+
 static inline void sdhci_auto_cmd_select(struct sdhci_host *host,
 					 struct mmc_command *cmd,
 					 u16 *mode)
 {
 	bool use_cmd12 = sdhci_auto_cmd12(host, cmd->mrq) &&
 			 (cmd->opcode != SD_IO_RW_EXTENDED);
-	bool use_cmd23 = cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23);
+	bool use_cmd23 = sdhci_auto_cmd23(host, cmd->mrq);
 	u16 ctrl2;
 
 	/*
@@ -1230,7 +1233,7 @@
 	if (mmc_op_multi(cmd->opcode) || data->blocks > 1) {
 		mode = SDHCI_TRNS_BLK_CNT_EN | SDHCI_TRNS_MULTI;
 		sdhci_auto_cmd_select(host, cmd, &mode);
-		if (cmd->mrq->sbc && (host->flags & SDHCI_AUTO_CMD23))
+		if (sdhci_auto_cmd23(host, cmd->mrq))
 			sdhci_writel(host, cmd->mrq->sbc->arg, SDHCI_ARGUMENT2);
 	}
 
@@ -1261,6 +1264,9 @@
 	if (host->data_cmd && host->data_cmd->mrq == mrq)
 		host->data_cmd = NULL;
 
+	if (host->deferred_cmd && host->deferred_cmd->mrq == mrq)
+		host->deferred_cmd = NULL;
+
 	if (host->data && host->data->mrq == mrq)
 		host->data = NULL;
 
@@ -1296,7 +1302,7 @@
 	queue_work(host->complete_wq, &host->complete_work);
 }
 
-static void sdhci_finish_data(struct sdhci_host *host)
+static void __sdhci_finish_data(struct sdhci_host *host, bool sw_data_timeout)
 {
 	struct mmc_command *data_cmd = host->data_cmd;
 	struct mmc_data *data = host->data;
@@ -1348,14 +1354,31 @@
 		} else {
 			/* Avoid triggering warning in sdhci_send_command() */
 			host->cmd = NULL;
-			sdhci_send_command(host, data->stop);
+			if (!sdhci_send_command(host, data->stop)) {
+				if (sw_data_timeout) {
+					/*
+					 * This is anyway a sw data timeout, so
+					 * give up now.
+					 */
+					data->stop->error = -EIO;
+					__sdhci_finish_mrq(host, data->mrq);
+				} else {
+					WARN_ON(host->deferred_cmd);
+					host->deferred_cmd = data->stop;
+				}
+			}
 		}
 	} else {
 		__sdhci_finish_mrq(host, data->mrq);
 	}
 }
 
-void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
+static void sdhci_finish_data(struct sdhci_host *host)
+{
+	__sdhci_finish_data(host, false);
+}
+
+static bool sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd)
 {
 	int flags;
 	u32 mask;
@@ -1370,9 +1393,6 @@
 	    cmd->opcode == MMC_STOP_TRANSMISSION)
 		cmd->flags |= MMC_RSP_BUSY;
 
-	/* Wait max 10 ms */
-	timeout = 10;
-
 	mask = SDHCI_CMD_INHIBIT;
 	if (sdhci_data_line_cmd(cmd))
 		mask |= SDHCI_DATA_INHIBIT;
@@ -1382,18 +1402,8 @@
 	if (cmd->mrq->data && (cmd == cmd->mrq->data->stop))
 		mask &= ~SDHCI_DATA_INHIBIT;
 
-	while (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask) {
-		if (timeout == 0) {
-			pr_err("%s: Controller never released inhibit bit(s).\n",
-			       mmc_hostname(host->mmc));
-			sdhci_dumpregs(host);
-			cmd->error = -EIO;
-			sdhci_finish_mrq(host, cmd->mrq);
-			return;
-		}
-		timeout--;
-		mdelay(1);
-	}
+	if (sdhci_readl(host, SDHCI_PRESENT_STATE) & mask)
+		return false;
 
 	host->cmd = cmd;
 	if (sdhci_data_line_cmd(cmd)) {
@@ -1408,11 +1418,13 @@
 	sdhci_set_transfer_mode(host, cmd);
 
 	if ((cmd->flags & MMC_RSP_136) && (cmd->flags & MMC_RSP_BUSY)) {
-		pr_err("%s: Unsupported response type!\n",
-			mmc_hostname(host->mmc));
-		cmd->error = -EINVAL;
-		sdhci_finish_mrq(host, cmd->mrq);
-		return;
+		WARN_ONCE(1, "Unsupported response type!\n");
+		/*
+		 * This does not happen in practice because 136-bit response
+		 * commands never have busy waiting, so rather than complicate
+		 * the error path, just remove busy waiting and continue.
+		 */
+		cmd->flags &= ~MMC_RSP_BUSY;
 	}
 
 	if (!(cmd->flags & MMC_RSP_PRESENT))
@@ -1444,8 +1456,61 @@
 	sdhci_mod_timer(host, cmd->mrq, timeout);
 
 	sdhci_writew(host, SDHCI_MAKE_CMD(cmd->opcode, flags), SDHCI_COMMAND);
+
+	return true;
 }
-EXPORT_SYMBOL_GPL(sdhci_send_command);
+
+static bool sdhci_present_error(struct sdhci_host *host,
+				struct mmc_command *cmd, bool present)
+{
+	if (!present || host->flags & SDHCI_DEVICE_DEAD) {
+		cmd->error = -ENOMEDIUM;
+		return true;
+	}
+
+	return false;
+}
+
+static bool sdhci_send_command_retry(struct sdhci_host *host,
+				     struct mmc_command *cmd,
+				     unsigned long flags)
+	__releases(host->lock)
+	__acquires(host->lock)
+{
+	struct mmc_command *deferred_cmd = host->deferred_cmd;
+	int timeout = 10; /* Approx. 10 ms */
+	bool present;
+
+	while (!sdhci_send_command(host, cmd)) {
+		if (!timeout--) {
+			pr_err("%s: Controller never released inhibit bit(s).\n",
+			       mmc_hostname(host->mmc));
+			sdhci_dumpregs(host);
+			cmd->error = -EIO;
+			return false;
+		}
+
+		spin_unlock_irqrestore(&host->lock, flags);
+
+		usleep_range(1000, 1250);
+
+		present = host->mmc->ops->get_cd(host->mmc);
+
+		spin_lock_irqsave(&host->lock, flags);
+
+		/* A deferred command might disappear, handle that */
+		if (cmd == deferred_cmd && cmd != host->deferred_cmd)
+			return true;
+
+		if (sdhci_present_error(host, cmd, present))
+			return false;
+	}
+
+	if (cmd == host->deferred_cmd)
+		host->deferred_cmd = NULL;
+
+	return true;
+}
 
 static void sdhci_read_rsp_136(struct sdhci_host *host, struct mmc_command *cmd)
 {
@@ -1506,7 +1571,10 @@
 
 	/* Finished CMD23, now send actual command. */
 	if (cmd == cmd->mrq->sbc) {
-		sdhci_send_command(host, cmd->mrq->cmd);
+		if (!sdhci_send_command(host, cmd->mrq->cmd)) {
+			WARN_ON(host->deferred_cmd);
+			host->deferred_cmd = cmd->mrq->cmd;
+		}
 	} else {
 
 		/* Processed actual command. */
@@ -1828,11 +1896,10 @@
 
 void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq)
 {
-	struct sdhci_host *host;
-	int present;
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct mmc_command *cmd;
 	unsigned long flags;
-
-	host = mmc_priv(mmc);
+	bool present;
 
 	/* Firstly check card presence */
 	present = mmc->ops->get_cd(mmc);
@@ -1852,20 +1919,59 @@
 		}
 	}
 
-	if (!present || host->flags & SDHCI_DEVICE_DEAD) {
-		mrq->cmd->error = -ENOMEDIUM;
-		sdhci_finish_mrq(host, mrq);
-	} else {
-		if (mrq->sbc && !(host->flags & SDHCI_AUTO_CMD23))
-			sdhci_send_command(host, mrq->sbc);
-		else
-			sdhci_send_command(host, mrq->cmd);
-	}
 
+	if (sdhci_present_error(host, mrq->cmd, present))
+		goto out_finish;
+
+	cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd;
+
+	if (!sdhci_send_command_retry(host, cmd, flags))
+		goto out_finish;
+
+	spin_unlock_irqrestore(&host->lock, flags);
+
+	return;
+
+out_finish:
+	sdhci_finish_mrq(host, mrq);
 	spin_unlock_irqrestore(&host->lock, flags);
 }
 EXPORT_SYMBOL_GPL(sdhci_request);
 
+int sdhci_request_atomic(struct mmc_host *mmc, struct mmc_request *mrq)
+{
+	struct sdhci_host *host = mmc_priv(mmc);
+	struct mmc_command *cmd;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&host->lock, flags);
+
+	if (sdhci_present_error(host, mrq->cmd, true)) {
+		sdhci_finish_mrq(host, mrq);
+		goto out_finish;
+	}
+
+	cmd = sdhci_manual_cmd23(host, mrq) ? mrq->sbc : mrq->cmd;
+
+	/*
+	 * The HSQ may send a command in interrupt context without polling
+	 * the busy signaling, which means we should return BUSY if controller
+	 * has not released inhibit bits to allow HSQ trying to send request
+	 * again in non-atomic context. So we should not finish this request
+	 * here.
+	 */
+	if (!sdhci_send_command(host, cmd))
+		ret = -EBUSY;
+	else
+		sdhci_led_activate(host);
+
+out_finish:
+	spin_unlock_irqrestore(&host->lock, flags);
+	return ret;
+}
+EXPORT_SYMBOL_GPL(sdhci_request_atomic);
+
 void sdhci_set_bus_width(struct sdhci_host *host, int width)
 {
 	u8 ctrl;
@@ -2402,7 +2508,11 @@
 	 */
 	sdhci_writew(host, SDHCI_TRNS_READ, SDHCI_TRANSFER_MODE);
 
-	sdhci_send_command(host, &cmd);
+	if (!sdhci_send_command_retry(host, &cmd, flags)) {
+		spin_unlock_irqrestore(&host->lock, flags);
+		host->tuning_done = 0;
+		return;
+	}
 
 	host->cmd = NULL;
 
@@ -2756,7 +2866,10 @@
 
 	spin_unlock_irqrestore(&host->lock, flags);
 
-	mmc_request_done(host->mmc, mrq);
+	if (host->ops->request_done)
+		host->ops->request_done(host, mrq);
+	else
+		mmc_request_done(host->mmc, mrq);
 
 	return false;
 }
@@ -2808,7 +2921,7 @@
 
 		if (host->data) {
 			host->data->error = -ETIMEDOUT;
-			sdhci_finish_data(host);
+			__sdhci_finish_data(host, true);
 			queue_work(host->complete_wq, &host->complete_work);
 		} else if (host->data_cmd) {
 			host->data_cmd->error = -ETIMEDOUT;
@@ -3059,7 +3172,7 @@
 {
 	struct mmc_data *data = mrq->data;
 
-	return host->pending_reset ||
+	return host->pending_reset || host->always_defer_done ||
 	       ((host->flags & SDHCI_REQ_USE_DMA) && data &&
 		data->host_cookie == COOKIE_MAPPED);
 }
@@ -3180,11 +3293,19 @@
 		}
 	}
 out:
+	if (host->deferred_cmd)
+		result = IRQ_WAKE_THREAD;
+
 	spin_unlock(&host->lock);
 
 	/* Process mrqs ready for immediate completion */
 	for (i = 0; i < SDHCI_MAX_MRQS; i++) {
-		if (mrqs_done[i])
+		if (!mrqs_done[i])
+			continue;
+
+		if (host->ops->request_done)
+			host->ops->request_done(host, mrqs_done[i]);
+		else
 			mmc_request_done(host->mmc, mrqs_done[i]);
 	}
 
@@ -3200,6 +3321,7 @@
 static irqreturn_t sdhci_thread_irq(int irq, void *dev_id)
 {
 	struct sdhci_host *host = dev_id;
+	struct mmc_command *cmd;
 	unsigned long flags;
 	u32 isr;
 
@@ -3207,8 +3329,14 @@
 		;
 
 	spin_lock_irqsave(&host->lock, flags);
+
 	isr = host->thread_isr;
 	host->thread_isr = 0;
+
+	cmd = host->deferred_cmd;
+	if (cmd && !sdhci_send_command_retry(host, cmd, flags))
+		sdhci_finish_mrq(host, cmd->mrq);
+
 	spin_unlock_irqrestore(&host->lock, flags);
 
 	if (isr & (SDHCI_INT_CARD_INSERT | SDHCI_INT_CARD_REMOVE)) {
@@ -3580,7 +3708,6 @@
 	 * descriptor for each segment, plus 1 for a nop end descriptor.
 	 */
 	host->adma_table_cnt = SDHCI_MAX_SEGS * 2 + 1;
-	host->max_adma = 65536;
 
 	return host;
 }
@@ -3786,9 +3913,6 @@
 		       mmc_hostname(mmc), host->version);
 	}
 
-	if (host->quirks & SDHCI_QUIRK_BROKEN_CQE)
-		mmc->caps2 &= ~MMC_CAP2_CQE;
-
 	if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
 		host->flags |= SDHCI_USE_SDMA;
 	else if (!(host->caps & SDHCI_CAN_DO_SDMA))
@@ -3841,15 +3965,13 @@
 		dma_addr_t dma;
 		void *buf;
 
-		if (host->flags & SDHCI_USE_64_BIT_DMA) {
-			host->adma_table_sz = host->adma_table_cnt *
-					      SDHCI_ADMA2_64_DESC_SZ(host);
-			host->desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
-		} else {
-			host->adma_table_sz = host->adma_table_cnt *
-					      SDHCI_ADMA2_32_DESC_SZ;
-			host->desc_sz = SDHCI_ADMA2_32_DESC_SZ;
-		}
+		if (!(host->flags & SDHCI_USE_64_BIT_DMA))
+			host->alloc_desc_sz = SDHCI_ADMA2_32_DESC_SZ;
+		else if (!host->alloc_desc_sz)
+			host->alloc_desc_sz = SDHCI_ADMA2_64_DESC_SZ(host);
+
+		host->desc_sz = host->alloc_desc_sz;
+		host->adma_table_sz = host->adma_table_cnt * host->desc_sz;
 
 		host->align_buffer_sz = SDHCI_MAX_SEGS * SDHCI_ADMA2_ALIGN;
 		/*
@@ -4234,12 +4356,10 @@
 	 * be larger than 64 KiB though.
 	 */
 	if (host->flags & SDHCI_USE_ADMA) {
-		if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC) {
-			host->max_adma = 65532; /* 32-bit alignment */
+		if (host->quirks & SDHCI_QUIRK_BROKEN_ADMA_ZEROLEN_DESC)
 			mmc->max_seg_size = 65535;
-		} else {
+		else
 			mmc->max_seg_size = 65536;
-		}
 	} else {
 		mmc->max_seg_size = mmc->max_req_size;
 	}
@@ -4310,6 +4430,12 @@
 	struct mmc_host *mmc = host->mmc;
 	int ret;
 
+	if ((mmc->caps2 & MMC_CAP2_CQE) &&
+	    (host->quirks & SDHCI_QUIRK_BROKEN_CQE)) {
+		mmc->caps2 &= ~MMC_CAP2_CQE;
+		mmc->cqe_ops = NULL;
+	}
+
 	host->complete_wq = alloc_workqueue("sdhci", flags, 0);
 	if (!host->complete_wq)
 		return -ENOMEM;
diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h
index 54f9d67..97aae19 100644
--- a/drivers/mmc/host/sdhci.h
+++ b/drivers/mmc/host/sdhci.h
@@ -15,6 +15,7 @@
 #include <linux/io.h>
 #include <linux/leds.h>
 #include <linux/interrupt.h>
+#include <linux/android_kabi.h>
 
 #include <linux/mmc/host.h>
 
@@ -349,8 +350,7 @@
 
 /*
  * Maximum segments assuming a 512KiB maximum requisition size and a minimum
- * 4KiB page size. Note this also allows enough for multiple descriptors in
- * case of PAGE_SIZE >= 64KiB.
+ * 4KiB page size.
  */
 #define SDHCI_MAX_SEGS		128
 
@@ -537,10 +537,12 @@
 	bool pending_reset;	/* Cmd/data reset is pending */
 	bool irq_wake_enabled;	/* IRQ wakeup is enabled */
 	bool v4_mode;		/* Host Version 4 Enable */
+	bool always_defer_done;	/* Always defer to complete requests */
 
 	struct mmc_request *mrqs_done[SDHCI_MAX_MRQS];	/* Requests done */
 	struct mmc_command *cmd;	/* Current command */
 	struct mmc_command *data_cmd;	/* Current data command */
+	struct mmc_command *deferred_cmd;	/* Deferred command */
 	struct mmc_data *data;	/* Current data request */
 	unsigned int data_early:1;	/* Data finished before cmd */
 
@@ -548,7 +550,6 @@
 	unsigned int blocks;	/* remaining PIO blocks */
 
 	int sg_count;		/* Mapped sg entries */
-	int max_adma;		/* Max. length in ADMA descriptor */
 
 	void *adma_table;	/* ADMA descriptor table */
 	void *align_buffer;	/* Bounce buffer */
@@ -559,7 +560,8 @@
 	dma_addr_t adma_addr;	/* Mapped ADMA descr. table */
 	dma_addr_t align_addr;	/* Mapped bounce buffer */
 
-	unsigned int desc_sz;	/* ADMA descriptor size */
+	unsigned int desc_sz;	/* ADMA current descriptor size */
+	unsigned int alloc_desc_sz;	/* ADMA descr. max size host supports */
 
 	struct workqueue_struct *complete_wq;	/* Request completion wq */
 	struct work_struct	complete_work;	/* Request completion work */
@@ -608,6 +610,8 @@
 
 	u64			data_timeout;
 
+	ANDROID_KABI_RESERVE(1);
+
 	unsigned long private[0] ____cacheline_aligned;
 };
 
@@ -649,6 +653,11 @@
 	void	(*voltage_switch)(struct sdhci_host *host);
 	void	(*adma_write_desc)(struct sdhci_host *host, void **desc,
 				   dma_addr_t addr, int len, unsigned int cmd);
+	void	(*request_done)(struct sdhci_host *host,
+				struct mmc_request *mrq);
+	void    (*dump_vendor_regs)(struct sdhci_host *host);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
@@ -751,7 +760,6 @@
 int __sdhci_add_host(struct sdhci_host *host);
 int sdhci_add_host(struct sdhci_host *host);
 void sdhci_remove_host(struct sdhci_host *host, int dead);
-void sdhci_send_command(struct sdhci_host *host, struct mmc_command *cmd);
 
 static inline void sdhci_read_caps(struct sdhci_host *host)
 {
@@ -767,6 +775,7 @@
 void sdhci_set_power_noreg(struct sdhci_host *host, unsigned char mode,
 			   unsigned short vdd);
 void sdhci_request(struct mmc_host *mmc, struct mmc_request *mrq);
+int sdhci_request_atomic(struct mmc_host *mmc, struct mmc_request *mrq);
 void sdhci_set_bus_width(struct sdhci_host *host, int width);
 void sdhci_reset(struct sdhci_host *host, u8 mask);
 void sdhci_set_uhs_signaling(struct sdhci_host *host, unsigned timing);
diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig
index 42d401e..6ddab79 100644
--- a/drivers/mtd/Kconfig
+++ b/drivers/mtd/Kconfig
@@ -170,6 +170,16 @@
 	  buffer in a flash partition where it can be read back at some
 	  later point.
 
+config MTD_PSTORE
+	tristate "Log panic/oops to an MTD buffer based on pstore"
+	depends on PSTORE_BLK
+	help
+	  This enables panic and oops messages to be logged to a circular
+	  buffer in a flash partition where it can be read back as files after
+	  mounting pstore filesystem.
+
+	  If unsure, say N.
+
 config MTD_SWAP
 	tristate "Swap on MTD device support"
 	depends on MTD && SWAP
diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile
index 56cc60c..593d059 100644
--- a/drivers/mtd/Makefile
+++ b/drivers/mtd/Makefile
@@ -20,6 +20,7 @@
 obj-$(CONFIG_SSFDC)		+= ssfdc.o
 obj-$(CONFIG_SM_FTL)		+= sm_ftl.o
 obj-$(CONFIG_MTD_OOPS)		+= mtdoops.o
+obj-$(CONFIG_MTD_PSTORE)	+= mtdpstore.o
 obj-$(CONFIG_MTD_SWAP)		+= mtdswap.o
 
 nftl-objs		:= nftlcore.o nftlmount.o
diff --git a/drivers/mtd/mtdpstore.c b/drivers/mtd/mtdpstore.c
new file mode 100644
index 0000000..a4fe606
--- /dev/null
+++ b/drivers/mtd/mtdpstore.c
@@ -0,0 +1,578 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#define dev_fmt(fmt) "mtdoops-pstore: " fmt
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/pstore_blk.h>
+#include <linux/mtd/mtd.h>
+#include <linux/bitops.h>
+
+static struct mtdpstore_context {
+	int index;
+	struct pstore_blk_config info;
+	struct pstore_device_info dev;
+	struct mtd_info *mtd;
+	unsigned long *rmmap;		/* removed bit map */
+	unsigned long *usedmap;		/* used bit map */
+	/*
+	 * used for panic write
+	 * As there are no block_isbad for panic case, we should keep this
+	 * status before panic to ensure panic_write not failed.
+	 */
+	unsigned long *badmap;		/* bad block bit map */
+} oops_cxt;
+
+static int mtdpstore_block_isbad(struct mtdpstore_context *cxt, loff_t off)
+{
+	int ret;
+	struct mtd_info *mtd = cxt->mtd;
+	u64 blknum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	blknum = div_u64(off, mtd->erasesize);
+
+	if (test_bit(blknum, cxt->badmap))
+		return true;
+	ret = mtd_block_isbad(mtd, off);
+	if (ret < 0) {
+		dev_err(&mtd->dev, "mtd_block_isbad failed, aborting\n");
+		return ret;
+	} else if (ret > 0) {
+		set_bit(blknum, cxt->badmap);
+		return true;
+	}
+	return false;
+}
+
+static inline int mtdpstore_panic_block_isbad(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u64 blknum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	blknum = div_u64(off, mtd->erasesize);
+	return test_bit(blknum, cxt->badmap);
+}
+
+static inline void mtdpstore_mark_used(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u64 zonenum = div_u64(off, cxt->info.kmsg_size);
+
+	dev_dbg(&mtd->dev, "mark zone %llu used\n", zonenum);
+	set_bit(zonenum, cxt->usedmap);
+}
+
+static inline void mtdpstore_mark_unused(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u64 zonenum = div_u64(off, cxt->info.kmsg_size);
+
+	dev_dbg(&mtd->dev, "mark zone %llu unused\n", zonenum);
+	clear_bit(zonenum, cxt->usedmap);
+}
+
+static inline void mtdpstore_block_mark_unused(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u32 zonecnt = mtd->erasesize / cxt->info.kmsg_size;
+	u64 zonenum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	zonenum = div_u64(off, cxt->info.kmsg_size);
+	while (zonecnt > 0) {
+		dev_dbg(&mtd->dev, "mark zone %llu unused\n", zonenum);
+		clear_bit(zonenum, cxt->usedmap);
+		zonenum++;
+		zonecnt--;
+	}
+}
+
+static inline int mtdpstore_is_used(struct mtdpstore_context *cxt, loff_t off)
+{
+	u64 zonenum = div_u64(off, cxt->info.kmsg_size);
+	u64 blknum = div_u64(off, cxt->mtd->erasesize);
+
+	if (test_bit(blknum, cxt->badmap))
+		return true;
+	return test_bit(zonenum, cxt->usedmap);
+}
+
+static int mtdpstore_block_is_used(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u32 zonecnt = mtd->erasesize / cxt->info.kmsg_size;
+	u64 zonenum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	zonenum = div_u64(off, cxt->info.kmsg_size);
+	while (zonecnt > 0) {
+		if (test_bit(zonenum, cxt->usedmap))
+			return true;
+		zonenum++;
+		zonecnt--;
+	}
+	return false;
+}
+
+static int mtdpstore_is_empty(struct mtdpstore_context *cxt, char *buf,
+		size_t size)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	size_t sz;
+	int i;
+
+	sz = min_t(uint32_t, size, mtd->writesize / 4);
+	for (i = 0; i < sz; i++) {
+		if (buf[i] != (char)0xFF)
+			return false;
+	}
+	return true;
+}
+
+static void mtdpstore_mark_removed(struct mtdpstore_context *cxt, loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u64 zonenum = div_u64(off, cxt->info.kmsg_size);
+
+	dev_dbg(&mtd->dev, "mark zone %llu removed\n", zonenum);
+	set_bit(zonenum, cxt->rmmap);
+}
+
+static void mtdpstore_block_clear_removed(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u32 zonecnt = mtd->erasesize / cxt->info.kmsg_size;
+	u64 zonenum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	zonenum = div_u64(off, cxt->info.kmsg_size);
+	while (zonecnt > 0) {
+		clear_bit(zonenum, cxt->rmmap);
+		zonenum++;
+		zonecnt--;
+	}
+}
+
+static int mtdpstore_block_is_removed(struct mtdpstore_context *cxt,
+		loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u32 zonecnt = mtd->erasesize / cxt->info.kmsg_size;
+	u64 zonenum;
+
+	off = ALIGN_DOWN(off, mtd->erasesize);
+	zonenum = div_u64(off, cxt->info.kmsg_size);
+	while (zonecnt > 0) {
+		if (test_bit(zonenum, cxt->rmmap))
+			return true;
+		zonenum++;
+		zonecnt--;
+	}
+	return false;
+}
+
+static int mtdpstore_erase_do(struct mtdpstore_context *cxt, loff_t off)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	struct erase_info erase;
+	int ret;
+
+	off = ALIGN_DOWN(off, cxt->mtd->erasesize);
+	dev_dbg(&mtd->dev, "try to erase off 0x%llx\n", off);
+	erase.len = cxt->mtd->erasesize;
+	erase.addr = off;
+	ret = mtd_erase(cxt->mtd, &erase);
+	if (!ret)
+		mtdpstore_block_clear_removed(cxt, off);
+	else
+		dev_err(&mtd->dev, "erase of region [0x%llx, 0x%llx] on \"%s\" failed\n",
+		       (unsigned long long)erase.addr,
+		       (unsigned long long)erase.len, cxt->info.device);
+	return ret;
+}
+
+/*
+ * called while removing file
+ *
+ * Avoiding over erasing, do erase block only when the whole block is unused.
+ * If the block contains valid log, do erase lazily on flush_removed() when
+ * unregister.
+ */
+static ssize_t mtdpstore_erase(size_t size, loff_t off)
+{
+	struct mtdpstore_context *cxt = &oops_cxt;
+
+	if (mtdpstore_block_isbad(cxt, off))
+		return -EIO;
+
+	mtdpstore_mark_unused(cxt, off);
+
+	/* If the block still has valid data, mtdpstore do erase lazily */
+	if (likely(mtdpstore_block_is_used(cxt, off))) {
+		mtdpstore_mark_removed(cxt, off);
+		return 0;
+	}
+
+	/* all zones are unused, erase it */
+	return mtdpstore_erase_do(cxt, off);
+}
+
+/*
+ * What is security for mtdpstore?
+ * As there is no erase for panic case, we should ensure at least one zone
+ * is writable. Otherwise, panic write will fail.
+ * If zone is used, write operation will return -ENOMSG, which means that
+ * pstore/blk will try one by one until gets an empty zone. So, it is not
+ * needed to ensure the next zone is empty, but at least one.
+ */
+static int mtdpstore_security(struct mtdpstore_context *cxt, loff_t off)
+{
+	int ret = 0, i;
+	struct mtd_info *mtd = cxt->mtd;
+	u32 zonenum = (u32)div_u64(off, cxt->info.kmsg_size);
+	u32 zonecnt = (u32)div_u64(cxt->mtd->size, cxt->info.kmsg_size);
+	u32 blkcnt = (u32)div_u64(cxt->mtd->size, cxt->mtd->erasesize);
+	u32 erasesize = cxt->mtd->erasesize;
+
+	for (i = 0; i < zonecnt; i++) {
+		u32 num = (zonenum + i) % zonecnt;
+
+		/* found empty zone */
+		if (!test_bit(num, cxt->usedmap))
+			return 0;
+	}
+
+	/* If there is no any empty zone, we have no way but to do erase */
+	while (blkcnt--) {
+		div64_u64_rem(off + erasesize, cxt->mtd->size, (u64 *)&off);
+
+		if (mtdpstore_block_isbad(cxt, off))
+			continue;
+
+		ret = mtdpstore_erase_do(cxt, off);
+		if (!ret) {
+			mtdpstore_block_mark_unused(cxt, off);
+			break;
+		}
+	}
+
+	if (ret)
+		dev_err(&mtd->dev, "all blocks bad!\n");
+	dev_dbg(&mtd->dev, "end security\n");
+	return ret;
+}
+
+static ssize_t mtdpstore_write(const char *buf, size_t size, loff_t off)
+{
+	struct mtdpstore_context *cxt = &oops_cxt;
+	struct mtd_info *mtd = cxt->mtd;
+	size_t retlen;
+	int ret;
+
+	if (mtdpstore_block_isbad(cxt, off))
+		return -ENOMSG;
+
+	/* zone is used, please try next one */
+	if (mtdpstore_is_used(cxt, off))
+		return -ENOMSG;
+
+	dev_dbg(&mtd->dev, "try to write off 0x%llx size %zu\n", off, size);
+	ret = mtd_write(cxt->mtd, off, size, &retlen, (u_char *)buf);
+	if (ret < 0 || retlen != size) {
+		dev_err(&mtd->dev, "write failure at %lld (%zu of %zu written), err %d\n",
+				off, retlen, size, ret);
+		return -EIO;
+	}
+	mtdpstore_mark_used(cxt, off);
+
+	mtdpstore_security(cxt, off);
+	return retlen;
+}
+
+static inline bool mtdpstore_is_io_error(int ret)
+{
+	return ret < 0 && !mtd_is_bitflip(ret) && !mtd_is_eccerr(ret);
+}
+
+/*
+ * All zones will be read as pstore/blk will read zone one by one when do
+ * recover.
+ */
+static ssize_t mtdpstore_read(char *buf, size_t size, loff_t off)
+{
+	struct mtdpstore_context *cxt = &oops_cxt;
+	struct mtd_info *mtd = cxt->mtd;
+	size_t retlen, done;
+	int ret;
+
+	if (mtdpstore_block_isbad(cxt, off))
+		return -ENOMSG;
+
+	dev_dbg(&mtd->dev, "try to read off 0x%llx size %zu\n", off, size);
+	for (done = 0, retlen = 0; done < size; done += retlen) {
+		retlen = 0;
+
+		ret = mtd_read(cxt->mtd, off + done, size - done, &retlen,
+				(u_char *)buf + done);
+		if (mtdpstore_is_io_error(ret)) {
+			dev_err(&mtd->dev, "read failure at %lld (%zu of %zu read), err %d\n",
+					off + done, retlen, size - done, ret);
+			/* the zone may be broken, try next one */
+			return -ENOMSG;
+		}
+
+		/*
+		 * ECC error. The impact on log data is so small. Maybe we can
+		 * still read it and try to understand. So mtdpstore just hands
+		 * over what it gets and user can judge whether the data is
+		 * valid or not.
+		 */
+		if (mtd_is_eccerr(ret)) {
+			dev_err(&mtd->dev, "ecc error at %lld (%zu of %zu read), err %d\n",
+					off + done, retlen, size - done, ret);
+			/* driver may not set retlen when ecc error */
+			retlen = retlen == 0 ? size - done : retlen;
+		}
+	}
+
+	if (mtdpstore_is_empty(cxt, buf, size))
+		mtdpstore_mark_unused(cxt, off);
+	else
+		mtdpstore_mark_used(cxt, off);
+
+	mtdpstore_security(cxt, off);
+	return retlen;
+}
+
+static ssize_t mtdpstore_panic_write(const char *buf, size_t size, loff_t off)
+{
+	struct mtdpstore_context *cxt = &oops_cxt;
+	struct mtd_info *mtd = cxt->mtd;
+	size_t retlen;
+	int ret;
+
+	if (mtdpstore_panic_block_isbad(cxt, off))
+		return -ENOMSG;
+
+	/* zone is used, please try next one */
+	if (mtdpstore_is_used(cxt, off))
+		return -ENOMSG;
+
+	ret = mtd_panic_write(cxt->mtd, off, size, &retlen, (u_char *)buf);
+	if (ret < 0 || size != retlen) {
+		dev_err(&mtd->dev, "panic write failure at %lld (%zu of %zu read), err %d\n",
+				off, retlen, size, ret);
+		return -EIO;
+	}
+	mtdpstore_mark_used(cxt, off);
+
+	return retlen;
+}
+
+static void mtdpstore_notify_add(struct mtd_info *mtd)
+{
+	int ret;
+	struct mtdpstore_context *cxt = &oops_cxt;
+	struct pstore_blk_config *info = &cxt->info;
+	unsigned long longcnt;
+
+	if (!strcmp(mtd->name, info->device))
+		cxt->index = mtd->index;
+
+	if (mtd->index != cxt->index || cxt->index < 0)
+		return;
+
+	dev_dbg(&mtd->dev, "found matching MTD device %s\n", mtd->name);
+
+	if (mtd->size < info->kmsg_size * 2) {
+		dev_err(&mtd->dev, "MTD partition %d not big enough\n",
+				mtd->index);
+		return;
+	}
+	/*
+	 * kmsg_size must be aligned to 4096 Bytes, which is limited by
+	 * psblk. The default value of kmsg_size is 64KB. If kmsg_size
+	 * is larger than erasesize, some errors will occur since mtdpsotre
+	 * is designed on it.
+	 */
+	if (mtd->erasesize < info->kmsg_size) {
+		dev_err(&mtd->dev, "eraseblock size of MTD partition %d too small\n",
+				mtd->index);
+		return;
+	}
+	if (unlikely(info->kmsg_size % mtd->writesize)) {
+		dev_err(&mtd->dev, "record size %lu KB must align to write size %d KB\n",
+				info->kmsg_size / 1024,
+				mtd->writesize / 1024);
+		return;
+	}
+
+	longcnt = BITS_TO_LONGS(div_u64(mtd->size, info->kmsg_size));
+	cxt->rmmap = kcalloc(longcnt, sizeof(long), GFP_KERNEL);
+	cxt->usedmap = kcalloc(longcnt, sizeof(long), GFP_KERNEL);
+
+	longcnt = BITS_TO_LONGS(div_u64(mtd->size, mtd->erasesize));
+	cxt->badmap = kcalloc(longcnt, sizeof(long), GFP_KERNEL);
+
+	cxt->dev.total_size = mtd->size;
+	/* just support dmesg right now */
+	cxt->dev.flags = PSTORE_FLAGS_DMESG;
+	cxt->dev.read = mtdpstore_read;
+	cxt->dev.write = mtdpstore_write;
+	cxt->dev.erase = mtdpstore_erase;
+	cxt->dev.panic_write = mtdpstore_panic_write;
+
+	ret = register_pstore_device(&cxt->dev);
+	if (ret) {
+		dev_err(&mtd->dev, "mtd%d register to psblk failed\n",
+				mtd->index);
+		return;
+	}
+	cxt->mtd = mtd;
+	dev_info(&mtd->dev, "Attached to MTD device %d\n", mtd->index);
+}
+
+static int mtdpstore_flush_removed_do(struct mtdpstore_context *cxt,
+		loff_t off, size_t size)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	u_char *buf;
+	int ret;
+	size_t retlen;
+	struct erase_info erase;
+
+	buf = kmalloc(mtd->erasesize, GFP_KERNEL);
+	if (!buf)
+		return -ENOMEM;
+
+	/* 1st. read to cache */
+	ret = mtd_read(mtd, off, mtd->erasesize, &retlen, buf);
+	if (mtdpstore_is_io_error(ret))
+		goto free;
+
+	/* 2nd. erase block */
+	erase.len = mtd->erasesize;
+	erase.addr = off;
+	ret = mtd_erase(mtd, &erase);
+	if (ret)
+		goto free;
+
+	/* 3rd. write back */
+	while (size) {
+		unsigned int zonesize = cxt->info.kmsg_size;
+
+		/* there is valid data on block, write back */
+		if (mtdpstore_is_used(cxt, off)) {
+			ret = mtd_write(mtd, off, zonesize, &retlen, buf);
+			if (ret)
+				dev_err(&mtd->dev, "write failure at %lld (%zu of %u written), err %d\n",
+						off, retlen, zonesize, ret);
+		}
+
+		off += zonesize;
+		size -= min_t(unsigned int, zonesize, size);
+	}
+
+free:
+	kfree(buf);
+	return ret;
+}
+
+/*
+ * What does mtdpstore_flush_removed() do?
+ * When user remove any log file on pstore filesystem, mtdpstore should do
+ * something to ensure log file removed. If the whole block is no longer used,
+ * it's nice to erase the block. However if the block still contains valid log,
+ * what mtdpstore can do is to erase and write the valid log back.
+ */
+static int mtdpstore_flush_removed(struct mtdpstore_context *cxt)
+{
+	struct mtd_info *mtd = cxt->mtd;
+	int ret;
+	loff_t off;
+	u32 blkcnt = (u32)div_u64(mtd->size, mtd->erasesize);
+
+	for (off = 0; blkcnt > 0; blkcnt--, off += mtd->erasesize) {
+		ret = mtdpstore_block_isbad(cxt, off);
+		if (ret)
+			continue;
+
+		ret = mtdpstore_block_is_removed(cxt, off);
+		if (!ret)
+			continue;
+
+		ret = mtdpstore_flush_removed_do(cxt, off, mtd->erasesize);
+		if (ret)
+			return ret;
+	}
+	return 0;
+}
+
+static void mtdpstore_notify_remove(struct mtd_info *mtd)
+{
+	struct mtdpstore_context *cxt = &oops_cxt;
+
+	if (mtd->index != cxt->index || cxt->index < 0)
+		return;
+
+	mtdpstore_flush_removed(cxt);
+
+	unregister_pstore_device(&cxt->dev);
+	kfree(cxt->badmap);
+	kfree(cxt->usedmap);
+	kfree(cxt->rmmap);
+	cxt->mtd = NULL;
+	cxt->index = -1;
+}
+
+static struct mtd_notifier mtdpstore_notifier = {
+	.add	= mtdpstore_notify_add,
+	.remove	= mtdpstore_notify_remove,
+};
+
+static int __init mtdpstore_init(void)
+{
+	int ret;
+	struct mtdpstore_context *cxt = &oops_cxt;
+	struct pstore_blk_config *info = &cxt->info;
+
+	ret = pstore_blk_get_config(info);
+	if (unlikely(ret))
+		return ret;
+
+	if (strlen(info->device) == 0) {
+		pr_err("mtd device must be supplied (device name is empty)\n");
+		return -EINVAL;
+	}
+	if (!info->kmsg_size) {
+		pr_err("no backend enabled (kmsg_size is 0)\n");
+		return -EINVAL;
+	}
+
+	/* Setup the MTD device to use */
+	ret = kstrtoint((char *)info->device, 0, &cxt->index);
+	if (ret)
+		cxt->index = -1;
+
+	register_mtd_user(&mtdpstore_notifier);
+	return 0;
+}
+module_init(mtdpstore_init);
+
+static void __exit mtdpstore_exit(void)
+{
+	unregister_mtd_user(&mtdpstore_notifier);
+}
+module_exit(mtdpstore_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("WeiXiong Liao <liaoweixiong@allwinnertech.com>");
+MODULE_DESCRIPTION("MTD backend for pstore/blk");
diff --git a/drivers/mtd/nand/onenand/Makefile b/drivers/mtd/nand/onenand/Makefile
index f8b624a..a27b635 100644
--- a/drivers/mtd/nand/onenand/Makefile
+++ b/drivers/mtd/nand/onenand/Makefile
@@ -9,6 +9,6 @@
 # Board specific.
 obj-$(CONFIG_MTD_ONENAND_GENERIC)	+= generic.o
 obj-$(CONFIG_MTD_ONENAND_OMAP2)		+= omap2.o
-obj-$(CONFIG_MTD_ONENAND_SAMSUNG)       += samsung.o
+obj-$(CONFIG_MTD_ONENAND_SAMSUNG)       += samsung_mtd.o
 
 onenand-objs = onenand_base.o onenand_bbt.o
diff --git a/drivers/mtd/nand/onenand/samsung.c b/drivers/mtd/nand/onenand/samsung_mtd.c
similarity index 100%
rename from drivers/mtd/nand/onenand/samsung.c
rename to drivers/mtd/nand/onenand/samsung_mtd.c
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index df3cd25..6730ea6 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -71,6 +71,50 @@
 	  To compile this driver as a module, choose M here: the module
 	  will be called dummy.
 
+config WIREGUARD
+	tristate "WireGuard secure network tunnel"
+	depends on NET && INET
+	depends on IPV6 || !IPV6
+	select NET_UDP_TUNNEL
+	select DST_CACHE
+	select CRYPTO
+	select CRYPTO_LIB_CURVE25519
+	select CRYPTO_LIB_CHACHA20POLY1305
+	select CRYPTO_LIB_BLAKE2S
+	select CRYPTO_CHACHA20_X86_64 if X86 && 64BIT
+	select CRYPTO_POLY1305_X86_64 if X86 && 64BIT
+	select CRYPTO_BLAKE2S_X86 if X86 && 64BIT
+	select CRYPTO_CURVE25519_X86 if X86 && 64BIT
+	select ARM_CRYPTO if ARM
+	select ARM64_CRYPTO if ARM64
+	select CRYPTO_CHACHA20_NEON if ARM || (ARM64 && KERNEL_MODE_NEON)
+	select CRYPTO_POLY1305_NEON if ARM64 && KERNEL_MODE_NEON
+	select CRYPTO_POLY1305_ARM if ARM
+	select CRYPTO_BLAKE2S_ARM if ARM
+	select CRYPTO_CURVE25519_NEON if ARM && KERNEL_MODE_NEON
+	select CRYPTO_CHACHA_MIPS if CPU_MIPS32_R2
+	select CRYPTO_POLY1305_MIPS if MIPS
+	help
+	  WireGuard is a secure, fast, and easy to use replacement for IPSec
+	  that uses modern cryptography and clever networking tricks. It's
+	  designed to be fairly general purpose and abstract enough to fit most
+	  use cases, while at the same time remaining extremely simple to
+	  configure. See www.wireguard.com for more info.
+
+	  It's safe to say Y or M here, as the driver is very lightweight and
+	  is only in use when an administrator chooses to add an interface.
+
+config WIREGUARD_DEBUG
+	bool "Debugging checks and verbose messages"
+	depends on WIREGUARD
+	help
+	  This will write log messages for handshake and other events
+	  that occur for a WireGuard interface. It will also perform some
+	  extra validation checks and unit tests at various points. This is
+	  only useful for debugging.
+
+	  Say N here unless you know what you're doing.
+
 config EQUALIZER
 	tristate "EQL (serial line load balancing) support"
 	---help---
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 0d3ba05..953b7c1 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -10,6 +10,7 @@
 obj-$(CONFIG_IPVLAN) += ipvlan/
 obj-$(CONFIG_IPVTAP) += ipvlan/
 obj-$(CONFIG_DUMMY) += dummy.o
+obj-$(CONFIG_WIREGUARD) += wireguard/
 obj-$(CONFIG_EQUALIZER) += eql.o
 obj-$(CONFIG_IFB) += ifb.o
 obj-$(CONFIG_MACSEC) += macsec.o
diff --git a/drivers/net/phy/mdio-cavium.h b/drivers/net/phy/mdio-cavium.h
index b7f89ad..359f97a 100644
--- a/drivers/net/phy/mdio-cavium.h
+++ b/drivers/net/phy/mdio-cavium.h
@@ -90,7 +90,7 @@
 
 struct cavium_mdiobus {
 	struct mii_bus *mii_bus;
-	u64 register_base;
+	void __iomem *register_base;
 	enum cavium_mdiobus_mode mode;
 };
 
@@ -98,20 +98,20 @@
 
 #include <asm/octeon/octeon.h>
 
-static inline void oct_mdio_writeq(u64 val, u64 addr)
+static inline void oct_mdio_writeq(u64 val, void __iomem *addr)
 {
-	cvmx_write_csr(addr, val);
+	cvmx_write_csr((u64 __force)addr, val);
 }
 
-static inline u64 oct_mdio_readq(u64 addr)
+static inline u64 oct_mdio_readq(void __iomem *addr)
 {
-	return cvmx_read_csr(addr);
+	return cvmx_read_csr((u64 __force)addr);
 }
 #else
 #include <linux/io-64-nonatomic-lo-hi.h>
 
-#define oct_mdio_writeq(val, addr)	writeq(val, (void *)addr)
-#define oct_mdio_readq(addr)		readq((void *)addr)
+#define oct_mdio_writeq(val, addr)	writeq(val, addr)
+#define oct_mdio_readq(addr)		readq(addr)
 #endif
 
 int cavium_mdiobus_read(struct mii_bus *bus, int phy_id, int regnum);
diff --git a/drivers/net/phy/mdio-octeon.c b/drivers/net/phy/mdio-octeon.c
index 088c737..3511f94 100644
--- a/drivers/net/phy/mdio-octeon.c
+++ b/drivers/net/phy/mdio-octeon.c
@@ -44,8 +44,7 @@
 		return -ENXIO;
 	}
 
-	bus->register_base =
-		(u64)devm_ioremap(&pdev->dev, mdio_phys, regsize);
+	bus->register_base = devm_ioremap(&pdev->dev, mdio_phys, regsize);
 	if (!bus->register_base) {
 		dev_err(&pdev->dev, "dev_ioremap failed\n");
 		return -ENOMEM;
@@ -56,7 +55,7 @@
 	oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN);
 
 	bus->mii_bus->name = KBUILD_MODNAME;
-	snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%llx", bus->register_base);
+	snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%px", bus->register_base);
 	bus->mii_bus->parent = &pdev->dev;
 
 	bus->mii_bus->read = cavium_mdiobus_read;
diff --git a/drivers/net/phy/mdio-thunder.c b/drivers/net/phy/mdio-thunder.c
index 1e2f57e..426f4f9 100644
--- a/drivers/net/phy/mdio-thunder.c
+++ b/drivers/net/phy/mdio-thunder.c
@@ -84,7 +84,7 @@
 		nexus->buses[i] = bus;
 		i++;
 
-		bus->register_base = (u64)nexus->bar0 +
+		bus->register_base = nexus->bar0 +
 			r.start - pci_resource_start(pdev, 0);
 
 		smi_en.u64 = 0;
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c
index b8b9df8..474ef0c 100644
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1573,6 +1573,13 @@
 	}
 }
 
+static void usbnet_bh_tasklet(unsigned long data)
+{
+	struct timer_list *t = (struct timer_list *)data;
+
+	usbnet_bh(t);
+}
+
 
 /*-------------------------------------------------------------------------
  *
@@ -1700,7 +1707,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/virtio_net.c b/drivers/net/virtio_net.c
index 37c2cec..925b093 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -2644,6 +2644,9 @@
 	u64 offloads;
 	int err;
 
+	if (!vi->has_cvq)
+		return 0;
+
 	if ((dev->features ^ features) & NETIF_F_GRO_HW) {
 		if (vi->xdp_enabled)
 			return -EBUSY;
diff --git a/drivers/net/wireguard/Makefile b/drivers/net/wireguard/Makefile
new file mode 100644
index 0000000..dbe1f85
--- /dev/null
+++ b/drivers/net/wireguard/Makefile
@@ -0,0 +1,17 @@
+ccflags-y := -D'pr_fmt(fmt)=KBUILD_MODNAME ": " fmt'
+ccflags-$(CONFIG_WIREGUARD_DEBUG) += -DDEBUG
+wireguard-y := main.o
+wireguard-y += noise.o
+wireguard-y += device.o
+wireguard-y += peer.o
+wireguard-y += timers.o
+wireguard-y += queueing.o
+wireguard-y += send.o
+wireguard-y += receive.o
+wireguard-y += socket.o
+wireguard-y += peerlookup.o
+wireguard-y += allowedips.o
+wireguard-y += ratelimiter.o
+wireguard-y += cookie.o
+wireguard-y += netlink.o
+obj-$(CONFIG_WIREGUARD) := wireguard.o
diff --git a/drivers/net/wireguard/allowedips.c b/drivers/net/wireguard/allowedips.c
new file mode 100644
index 0000000..b7197e8
--- /dev/null
+++ b/drivers/net/wireguard/allowedips.c
@@ -0,0 +1,386 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "allowedips.h"
+#include "peer.h"
+
+static struct kmem_cache *node_cache;
+
+static void swap_endian(u8 *dst, const u8 *src, u8 bits)
+{
+	if (bits == 32) {
+		*(u32 *)dst = be32_to_cpu(*(const __be32 *)src);
+	} else if (bits == 128) {
+		((u64 *)dst)[0] = be64_to_cpu(((const __be64 *)src)[0]);
+		((u64 *)dst)[1] = be64_to_cpu(((const __be64 *)src)[1]);
+	}
+}
+
+static void copy_and_assign_cidr(struct allowedips_node *node, const u8 *src,
+				 u8 cidr, u8 bits)
+{
+	node->cidr = cidr;
+	node->bit_at_a = cidr / 8U;
+#ifdef __LITTLE_ENDIAN
+	node->bit_at_a ^= (bits / 8U - 1U) % 8U;
+#endif
+	node->bit_at_b = 7U - (cidr % 8U);
+	node->bitlen = bits;
+	memcpy(node->bits, src, bits / 8U);
+}
+
+static inline u8 choose(struct allowedips_node *node, const u8 *key)
+{
+	return (key[node->bit_at_a] >> node->bit_at_b) & 1;
+}
+
+static void push_rcu(struct allowedips_node **stack,
+		     struct allowedips_node __rcu *p, unsigned int *len)
+{
+	if (rcu_access_pointer(p)) {
+		WARN_ON(IS_ENABLED(DEBUG) && *len >= 128);
+		stack[(*len)++] = rcu_dereference_raw(p);
+	}
+}
+
+static void node_free_rcu(struct rcu_head *rcu)
+{
+	kmem_cache_free(node_cache, container_of(rcu, struct allowedips_node, rcu));
+}
+
+static void root_free_rcu(struct rcu_head *rcu)
+{
+	struct allowedips_node *node, *stack[128] = {
+		container_of(rcu, struct allowedips_node, rcu) };
+	unsigned int len = 1;
+
+	while (len > 0 && (node = stack[--len])) {
+		push_rcu(stack, node->bit[0], &len);
+		push_rcu(stack, node->bit[1], &len);
+		kmem_cache_free(node_cache, node);
+	}
+}
+
+static void root_remove_peer_lists(struct allowedips_node *root)
+{
+	struct allowedips_node *node, *stack[128] = { root };
+	unsigned int len = 1;
+
+	while (len > 0 && (node = stack[--len])) {
+		push_rcu(stack, node->bit[0], &len);
+		push_rcu(stack, node->bit[1], &len);
+		if (rcu_access_pointer(node->peer))
+			list_del(&node->peer_list);
+	}
+}
+
+static unsigned int fls128(u64 a, u64 b)
+{
+	return a ? fls64(a) + 64U : fls64(b);
+}
+
+static u8 common_bits(const struct allowedips_node *node, const u8 *key,
+		      u8 bits)
+{
+	if (bits == 32)
+		return 32U - fls(*(const u32 *)node->bits ^ *(const u32 *)key);
+	else if (bits == 128)
+		return 128U - fls128(
+			*(const u64 *)&node->bits[0] ^ *(const u64 *)&key[0],
+			*(const u64 *)&node->bits[8] ^ *(const u64 *)&key[8]);
+	return 0;
+}
+
+static bool prefix_matches(const struct allowedips_node *node, const u8 *key,
+			   u8 bits)
+{
+	/* This could be much faster if it actually just compared the common
+	 * bits properly, by precomputing a mask bswap(~0 << (32 - cidr)), and
+	 * the rest, but it turns out that common_bits is already super fast on
+	 * modern processors, even taking into account the unfortunate bswap.
+	 * So, we just inline it like this instead.
+	 */
+	return common_bits(node, key, bits) >= node->cidr;
+}
+
+static struct allowedips_node *find_node(struct allowedips_node *trie, u8 bits,
+					 const u8 *key)
+{
+	struct allowedips_node *node = trie, *found = NULL;
+
+	while (node && prefix_matches(node, key, bits)) {
+		if (rcu_access_pointer(node->peer))
+			found = node;
+		if (node->cidr == bits)
+			break;
+		node = rcu_dereference_bh(node->bit[choose(node, key)]);
+	}
+	return found;
+}
+
+/* Returns a strong reference to a peer */
+static struct wg_peer *lookup(struct allowedips_node __rcu *root, u8 bits,
+			      const void *be_ip)
+{
+	/* Aligned so it can be passed to fls/fls64 */
+	u8 ip[16] __aligned(__alignof(u64));
+	struct allowedips_node *node;
+	struct wg_peer *peer = NULL;
+
+	swap_endian(ip, be_ip, bits);
+
+	rcu_read_lock_bh();
+retry:
+	node = find_node(rcu_dereference_bh(root), bits, ip);
+	if (node) {
+		peer = wg_peer_get_maybe_zero(rcu_dereference_bh(node->peer));
+		if (!peer)
+			goto retry;
+	}
+	rcu_read_unlock_bh();
+	return peer;
+}
+
+static bool node_placement(struct allowedips_node __rcu *trie, const u8 *key,
+			   u8 cidr, u8 bits, struct allowedips_node **rnode,
+			   struct mutex *lock)
+{
+	struct allowedips_node *node = rcu_dereference_protected(trie, lockdep_is_held(lock));
+	struct allowedips_node *parent = NULL;
+	bool exact = false;
+
+	while (node && node->cidr <= cidr && prefix_matches(node, key, bits)) {
+		parent = node;
+		if (parent->cidr == cidr) {
+			exact = true;
+			break;
+		}
+		node = rcu_dereference_protected(parent->bit[choose(parent, key)], lockdep_is_held(lock));
+	}
+	*rnode = parent;
+	return exact;
+}
+
+static inline void connect_node(struct allowedips_node **parent, u8 bit, struct allowedips_node *node)
+{
+	node->parent_bit_packed = (unsigned long)parent | bit;
+	rcu_assign_pointer(*parent, node);
+}
+
+static inline void choose_and_connect_node(struct allowedips_node *parent, struct allowedips_node *node)
+{
+	u8 bit = choose(parent, node->bits);
+	connect_node(&parent->bit[bit], bit, node);
+}
+
+static int add(struct allowedips_node __rcu **trie, u8 bits, const u8 *key,
+	       u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	struct allowedips_node *node, *parent, *down, *newnode;
+
+	if (unlikely(cidr > bits || !peer))
+		return -EINVAL;
+
+	if (!rcu_access_pointer(*trie)) {
+		node = kmem_cache_zalloc(node_cache, GFP_KERNEL);
+		if (unlikely(!node))
+			return -ENOMEM;
+		RCU_INIT_POINTER(node->peer, peer);
+		list_add_tail(&node->peer_list, &peer->allowedips_list);
+		copy_and_assign_cidr(node, key, cidr, bits);
+		connect_node(trie, 2, node);
+		return 0;
+	}
+	if (node_placement(*trie, key, cidr, bits, &node, lock)) {
+		rcu_assign_pointer(node->peer, peer);
+		list_move_tail(&node->peer_list, &peer->allowedips_list);
+		return 0;
+	}
+
+	newnode = kmem_cache_zalloc(node_cache, GFP_KERNEL);
+	if (unlikely(!newnode))
+		return -ENOMEM;
+	RCU_INIT_POINTER(newnode->peer, peer);
+	list_add_tail(&newnode->peer_list, &peer->allowedips_list);
+	copy_and_assign_cidr(newnode, key, cidr, bits);
+
+	if (!node) {
+		down = rcu_dereference_protected(*trie, lockdep_is_held(lock));
+	} else {
+		const u8 bit = choose(node, key);
+		down = rcu_dereference_protected(node->bit[bit], lockdep_is_held(lock));
+		if (!down) {
+			connect_node(&node->bit[bit], bit, newnode);
+			return 0;
+		}
+	}
+	cidr = min(cidr, common_bits(down, key, bits));
+	parent = node;
+
+	if (newnode->cidr == cidr) {
+		choose_and_connect_node(newnode, down);
+		if (!parent)
+			connect_node(trie, 2, newnode);
+		else
+			choose_and_connect_node(parent, newnode);
+		return 0;
+	}
+
+	node = kmem_cache_zalloc(node_cache, GFP_KERNEL);
+	if (unlikely(!node)) {
+		list_del(&newnode->peer_list);
+		kmem_cache_free(node_cache, newnode);
+		return -ENOMEM;
+	}
+	INIT_LIST_HEAD(&node->peer_list);
+	copy_and_assign_cidr(node, newnode->bits, cidr, bits);
+
+	choose_and_connect_node(node, down);
+	choose_and_connect_node(node, newnode);
+	if (!parent)
+		connect_node(trie, 2, node);
+	else
+		choose_and_connect_node(parent, node);
+	return 0;
+}
+
+void wg_allowedips_init(struct allowedips *table)
+{
+	table->root4 = table->root6 = NULL;
+	table->seq = 1;
+}
+
+void wg_allowedips_free(struct allowedips *table, struct mutex *lock)
+{
+	struct allowedips_node __rcu *old4 = table->root4, *old6 = table->root6;
+
+	++table->seq;
+	RCU_INIT_POINTER(table->root4, NULL);
+	RCU_INIT_POINTER(table->root6, NULL);
+	if (rcu_access_pointer(old4)) {
+		struct allowedips_node *node = rcu_dereference_protected(old4,
+							lockdep_is_held(lock));
+
+		root_remove_peer_lists(node);
+		call_rcu(&node->rcu, root_free_rcu);
+	}
+	if (rcu_access_pointer(old6)) {
+		struct allowedips_node *node = rcu_dereference_protected(old6,
+							lockdep_is_held(lock));
+
+		root_remove_peer_lists(node);
+		call_rcu(&node->rcu, root_free_rcu);
+	}
+}
+
+int wg_allowedips_insert_v4(struct allowedips *table, const struct in_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	/* Aligned so it can be passed to fls */
+	u8 key[4] __aligned(__alignof(u32));
+
+	++table->seq;
+	swap_endian(key, (const u8 *)ip, 32);
+	return add(&table->root4, 32, key, cidr, peer, lock);
+}
+
+int wg_allowedips_insert_v6(struct allowedips *table, const struct in6_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock)
+{
+	/* Aligned so it can be passed to fls64 */
+	u8 key[16] __aligned(__alignof(u64));
+
+	++table->seq;
+	swap_endian(key, (const u8 *)ip, 128);
+	return add(&table->root6, 128, key, cidr, peer, lock);
+}
+
+void wg_allowedips_remove_by_peer(struct allowedips *table,
+				  struct wg_peer *peer, struct mutex *lock)
+{
+	struct allowedips_node *node, *child, **parent_bit, *parent, *tmp;
+	bool free_parent;
+
+	if (list_empty(&peer->allowedips_list))
+		return;
+	++table->seq;
+	list_for_each_entry_safe(node, tmp, &peer->allowedips_list, peer_list) {
+		list_del_init(&node->peer_list);
+		RCU_INIT_POINTER(node->peer, NULL);
+		if (node->bit[0] && node->bit[1])
+			continue;
+		child = rcu_dereference_protected(node->bit[!rcu_access_pointer(node->bit[0])],
+						  lockdep_is_held(lock));
+		if (child)
+			child->parent_bit_packed = node->parent_bit_packed;
+		parent_bit = (struct allowedips_node **)(node->parent_bit_packed & ~3UL);
+		*parent_bit = child;
+		parent = (void *)parent_bit -
+			 offsetof(struct allowedips_node, bit[node->parent_bit_packed & 1]);
+		free_parent = !rcu_access_pointer(node->bit[0]) &&
+			      !rcu_access_pointer(node->bit[1]) &&
+			      (node->parent_bit_packed & 3) <= 1 &&
+			      !rcu_access_pointer(parent->peer);
+		if (free_parent)
+			child = rcu_dereference_protected(
+					parent->bit[!(node->parent_bit_packed & 1)],
+					lockdep_is_held(lock));
+		call_rcu(&node->rcu, node_free_rcu);
+		if (!free_parent)
+			continue;
+		if (child)
+			child->parent_bit_packed = parent->parent_bit_packed;
+		*(struct allowedips_node **)(parent->parent_bit_packed & ~3UL) = child;
+		call_rcu(&parent->rcu, node_free_rcu);
+	}
+}
+
+int wg_allowedips_read_node(struct allowedips_node *node, u8 ip[16], u8 *cidr)
+{
+	const unsigned int cidr_bytes = DIV_ROUND_UP(node->cidr, 8U);
+	swap_endian(ip, node->bits, node->bitlen);
+	memset(ip + cidr_bytes, 0, node->bitlen / 8U - cidr_bytes);
+	if (node->cidr)
+		ip[cidr_bytes - 1U] &= ~0U << (-node->cidr % 8U);
+
+	*cidr = node->cidr;
+	return node->bitlen == 32 ? AF_INET : AF_INET6;
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *wg_allowedips_lookup_dst(struct allowedips *table,
+					 struct sk_buff *skb)
+{
+	if (skb->protocol == htons(ETH_P_IP))
+		return lookup(table->root4, 32, &ip_hdr(skb)->daddr);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		return lookup(table->root6, 128, &ipv6_hdr(skb)->daddr);
+	return NULL;
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *wg_allowedips_lookup_src(struct allowedips *table,
+					 struct sk_buff *skb)
+{
+	if (skb->protocol == htons(ETH_P_IP))
+		return lookup(table->root4, 32, &ip_hdr(skb)->saddr);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		return lookup(table->root6, 128, &ipv6_hdr(skb)->saddr);
+	return NULL;
+}
+
+int __init wg_allowedips_slab_init(void)
+{
+	node_cache = KMEM_CACHE(allowedips_node, 0);
+	return node_cache ? 0 : -ENOMEM;
+}
+
+void wg_allowedips_slab_uninit(void)
+{
+	rcu_barrier();
+	kmem_cache_destroy(node_cache);
+}
+
+#include "selftest/allowedips.c"
diff --git a/drivers/net/wireguard/allowedips.h b/drivers/net/wireguard/allowedips.h
new file mode 100644
index 0000000..2346c79
--- /dev/null
+++ b/drivers/net/wireguard/allowedips.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_ALLOWEDIPS_H
+#define _WG_ALLOWEDIPS_H
+
+#include <linux/mutex.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+
+struct wg_peer;
+
+struct allowedips_node {
+	struct wg_peer __rcu *peer;
+	struct allowedips_node __rcu *bit[2];
+	u8 cidr, bit_at_a, bit_at_b, bitlen;
+	u8 bits[16] __aligned(__alignof(u64));
+
+	/* Keep rarely used members at bottom to be beyond cache line. */
+	unsigned long parent_bit_packed;
+	union {
+		struct list_head peer_list;
+		struct rcu_head rcu;
+	};
+};
+
+struct allowedips {
+	struct allowedips_node __rcu *root4;
+	struct allowedips_node __rcu *root6;
+	u64 seq;
+} __aligned(4); /* We pack the lower 2 bits of &root, but m68k only gives 16-bit alignment. */
+
+void wg_allowedips_init(struct allowedips *table);
+void wg_allowedips_free(struct allowedips *table, struct mutex *mutex);
+int wg_allowedips_insert_v4(struct allowedips *table, const struct in_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock);
+int wg_allowedips_insert_v6(struct allowedips *table, const struct in6_addr *ip,
+			    u8 cidr, struct wg_peer *peer, struct mutex *lock);
+void wg_allowedips_remove_by_peer(struct allowedips *table,
+				  struct wg_peer *peer, struct mutex *lock);
+/* The ip input pointer should be __aligned(__alignof(u64))) */
+int wg_allowedips_read_node(struct allowedips_node *node, u8 ip[16], u8 *cidr);
+
+/* These return a strong reference to a peer: */
+struct wg_peer *wg_allowedips_lookup_dst(struct allowedips *table,
+					 struct sk_buff *skb);
+struct wg_peer *wg_allowedips_lookup_src(struct allowedips *table,
+					 struct sk_buff *skb);
+
+#ifdef DEBUG
+bool wg_allowedips_selftest(void);
+#endif
+
+int wg_allowedips_slab_init(void);
+void wg_allowedips_slab_uninit(void);
+
+#endif /* _WG_ALLOWEDIPS_H */
diff --git a/drivers/net/wireguard/cookie.c b/drivers/net/wireguard/cookie.c
new file mode 100644
index 0000000..4956f04
--- /dev/null
+++ b/drivers/net/wireguard/cookie.c
@@ -0,0 +1,236 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "cookie.h"
+#include "peer.h"
+#include "device.h"
+#include "messages.h"
+#include "ratelimiter.h"
+#include "timers.h"
+
+#include <crypto/blake2s.h>
+#include <crypto/chacha20poly1305.h>
+
+#include <net/ipv6.h>
+#include <crypto/algapi.h>
+
+void wg_cookie_checker_init(struct cookie_checker *checker,
+			    struct wg_device *wg)
+{
+	init_rwsem(&checker->secret_lock);
+	checker->secret_birthdate = ktime_get_coarse_boottime_ns();
+	get_random_bytes(checker->secret, NOISE_HASH_LEN);
+	checker->device = wg;
+}
+
+enum { COOKIE_KEY_LABEL_LEN = 8 };
+static const u8 mac1_key_label[COOKIE_KEY_LABEL_LEN] = "mac1----";
+static const u8 cookie_key_label[COOKIE_KEY_LABEL_LEN] = "cookie--";
+
+static void precompute_key(u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN],
+			   const u8 label[COOKIE_KEY_LABEL_LEN])
+{
+	struct blake2s_state blake;
+
+	blake2s_init(&blake, NOISE_SYMMETRIC_KEY_LEN);
+	blake2s_update(&blake, label, COOKIE_KEY_LABEL_LEN);
+	blake2s_update(&blake, pubkey, NOISE_PUBLIC_KEY_LEN);
+	blake2s_final(&blake, key);
+}
+
+/* Must hold peer->handshake.static_identity->lock */
+void wg_cookie_checker_precompute_device_keys(struct cookie_checker *checker)
+{
+	if (likely(checker->device->static_identity.has_identity)) {
+		precompute_key(checker->cookie_encryption_key,
+			       checker->device->static_identity.static_public,
+			       cookie_key_label);
+		precompute_key(checker->message_mac1_key,
+			       checker->device->static_identity.static_public,
+			       mac1_key_label);
+	} else {
+		memset(checker->cookie_encryption_key, 0,
+		       NOISE_SYMMETRIC_KEY_LEN);
+		memset(checker->message_mac1_key, 0, NOISE_SYMMETRIC_KEY_LEN);
+	}
+}
+
+void wg_cookie_checker_precompute_peer_keys(struct wg_peer *peer)
+{
+	precompute_key(peer->latest_cookie.cookie_decryption_key,
+		       peer->handshake.remote_static, cookie_key_label);
+	precompute_key(peer->latest_cookie.message_mac1_key,
+		       peer->handshake.remote_static, mac1_key_label);
+}
+
+void wg_cookie_init(struct cookie *cookie)
+{
+	memset(cookie, 0, sizeof(*cookie));
+	init_rwsem(&cookie->lock);
+}
+
+static void compute_mac1(u8 mac1[COOKIE_LEN], const void *message, size_t len,
+			 const u8 key[NOISE_SYMMETRIC_KEY_LEN])
+{
+	len = len - sizeof(struct message_macs) +
+	      offsetof(struct message_macs, mac1);
+	blake2s(mac1, message, key, COOKIE_LEN, len, NOISE_SYMMETRIC_KEY_LEN);
+}
+
+static void compute_mac2(u8 mac2[COOKIE_LEN], const void *message, size_t len,
+			 const u8 cookie[COOKIE_LEN])
+{
+	len = len - sizeof(struct message_macs) +
+	      offsetof(struct message_macs, mac2);
+	blake2s(mac2, message, cookie, COOKIE_LEN, len, COOKIE_LEN);
+}
+
+static void make_cookie(u8 cookie[COOKIE_LEN], struct sk_buff *skb,
+			struct cookie_checker *checker)
+{
+	struct blake2s_state state;
+
+	if (wg_birthdate_has_expired(checker->secret_birthdate,
+				     COOKIE_SECRET_MAX_AGE)) {
+		down_write(&checker->secret_lock);
+		checker->secret_birthdate = ktime_get_coarse_boottime_ns();
+		get_random_bytes(checker->secret, NOISE_HASH_LEN);
+		up_write(&checker->secret_lock);
+	}
+
+	down_read(&checker->secret_lock);
+
+	blake2s_init_key(&state, COOKIE_LEN, checker->secret, NOISE_HASH_LEN);
+	if (skb->protocol == htons(ETH_P_IP))
+		blake2s_update(&state, (u8 *)&ip_hdr(skb)->saddr,
+			       sizeof(struct in_addr));
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		blake2s_update(&state, (u8 *)&ipv6_hdr(skb)->saddr,
+			       sizeof(struct in6_addr));
+	blake2s_update(&state, (u8 *)&udp_hdr(skb)->source, sizeof(__be16));
+	blake2s_final(&state, cookie);
+
+	up_read(&checker->secret_lock);
+}
+
+enum cookie_mac_state wg_cookie_validate_packet(struct cookie_checker *checker,
+						struct sk_buff *skb,
+						bool check_cookie)
+{
+	struct message_macs *macs = (struct message_macs *)
+		(skb->data + skb->len - sizeof(*macs));
+	enum cookie_mac_state ret;
+	u8 computed_mac[COOKIE_LEN];
+	u8 cookie[COOKIE_LEN];
+
+	ret = INVALID_MAC;
+	compute_mac1(computed_mac, skb->data, skb->len,
+		     checker->message_mac1_key);
+	if (crypto_memneq(computed_mac, macs->mac1, COOKIE_LEN))
+		goto out;
+
+	ret = VALID_MAC_BUT_NO_COOKIE;
+
+	if (!check_cookie)
+		goto out;
+
+	make_cookie(cookie, skb, checker);
+
+	compute_mac2(computed_mac, skb->data, skb->len, cookie);
+	if (crypto_memneq(computed_mac, macs->mac2, COOKIE_LEN))
+		goto out;
+
+	ret = VALID_MAC_WITH_COOKIE_BUT_RATELIMITED;
+	if (!wg_ratelimiter_allow(skb, dev_net(checker->device->dev)))
+		goto out;
+
+	ret = VALID_MAC_WITH_COOKIE;
+
+out:
+	return ret;
+}
+
+void wg_cookie_add_mac_to_packet(void *message, size_t len,
+				 struct wg_peer *peer)
+{
+	struct message_macs *macs = (struct message_macs *)
+		((u8 *)message + len - sizeof(*macs));
+
+	down_write(&peer->latest_cookie.lock);
+	compute_mac1(macs->mac1, message, len,
+		     peer->latest_cookie.message_mac1_key);
+	memcpy(peer->latest_cookie.last_mac1_sent, macs->mac1, COOKIE_LEN);
+	peer->latest_cookie.have_sent_mac1 = true;
+	up_write(&peer->latest_cookie.lock);
+
+	down_read(&peer->latest_cookie.lock);
+	if (peer->latest_cookie.is_valid &&
+	    !wg_birthdate_has_expired(peer->latest_cookie.birthdate,
+				COOKIE_SECRET_MAX_AGE - COOKIE_SECRET_LATENCY))
+		compute_mac2(macs->mac2, message, len,
+			     peer->latest_cookie.cookie);
+	else
+		memset(macs->mac2, 0, COOKIE_LEN);
+	up_read(&peer->latest_cookie.lock);
+}
+
+void wg_cookie_message_create(struct message_handshake_cookie *dst,
+			      struct sk_buff *skb, __le32 index,
+			      struct cookie_checker *checker)
+{
+	struct message_macs *macs = (struct message_macs *)
+		((u8 *)skb->data + skb->len - sizeof(*macs));
+	u8 cookie[COOKIE_LEN];
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE);
+	dst->receiver_index = index;
+	get_random_bytes_wait(dst->nonce, COOKIE_NONCE_LEN);
+
+	make_cookie(cookie, skb, checker);
+	xchacha20poly1305_encrypt(dst->encrypted_cookie, cookie, COOKIE_LEN,
+				  macs->mac1, COOKIE_LEN, dst->nonce,
+				  checker->cookie_encryption_key);
+}
+
+void wg_cookie_message_consume(struct message_handshake_cookie *src,
+			       struct wg_device *wg)
+{
+	struct wg_peer *peer = NULL;
+	u8 cookie[COOKIE_LEN];
+	bool ret;
+
+	if (unlikely(!wg_index_hashtable_lookup(wg->index_hashtable,
+						INDEX_HASHTABLE_HANDSHAKE |
+						INDEX_HASHTABLE_KEYPAIR,
+						src->receiver_index, &peer)))
+		return;
+
+	down_read(&peer->latest_cookie.lock);
+	if (unlikely(!peer->latest_cookie.have_sent_mac1)) {
+		up_read(&peer->latest_cookie.lock);
+		goto out;
+	}
+	ret = xchacha20poly1305_decrypt(
+		cookie, src->encrypted_cookie, sizeof(src->encrypted_cookie),
+		peer->latest_cookie.last_mac1_sent, COOKIE_LEN, src->nonce,
+		peer->latest_cookie.cookie_decryption_key);
+	up_read(&peer->latest_cookie.lock);
+
+	if (ret) {
+		down_write(&peer->latest_cookie.lock);
+		memcpy(peer->latest_cookie.cookie, cookie, COOKIE_LEN);
+		peer->latest_cookie.birthdate = ktime_get_coarse_boottime_ns();
+		peer->latest_cookie.is_valid = true;
+		peer->latest_cookie.have_sent_mac1 = false;
+		up_write(&peer->latest_cookie.lock);
+	} else {
+		net_dbg_ratelimited("%s: Could not decrypt invalid cookie response\n",
+				    wg->dev->name);
+	}
+
+out:
+	wg_peer_put(peer);
+}
diff --git a/drivers/net/wireguard/cookie.h b/drivers/net/wireguard/cookie.h
new file mode 100644
index 0000000..c4bd61c
--- /dev/null
+++ b/drivers/net/wireguard/cookie.h
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_COOKIE_H
+#define _WG_COOKIE_H
+
+#include "messages.h"
+#include <linux/rwsem.h>
+
+struct wg_peer;
+
+struct cookie_checker {
+	u8 secret[NOISE_HASH_LEN];
+	u8 cookie_encryption_key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 message_mac1_key[NOISE_SYMMETRIC_KEY_LEN];
+	u64 secret_birthdate;
+	struct rw_semaphore secret_lock;
+	struct wg_device *device;
+};
+
+struct cookie {
+	u64 birthdate;
+	bool is_valid;
+	u8 cookie[COOKIE_LEN];
+	bool have_sent_mac1;
+	u8 last_mac1_sent[COOKIE_LEN];
+	u8 cookie_decryption_key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 message_mac1_key[NOISE_SYMMETRIC_KEY_LEN];
+	struct rw_semaphore lock;
+};
+
+enum cookie_mac_state {
+	INVALID_MAC,
+	VALID_MAC_BUT_NO_COOKIE,
+	VALID_MAC_WITH_COOKIE_BUT_RATELIMITED,
+	VALID_MAC_WITH_COOKIE
+};
+
+void wg_cookie_checker_init(struct cookie_checker *checker,
+			    struct wg_device *wg);
+void wg_cookie_checker_precompute_device_keys(struct cookie_checker *checker);
+void wg_cookie_checker_precompute_peer_keys(struct wg_peer *peer);
+void wg_cookie_init(struct cookie *cookie);
+
+enum cookie_mac_state wg_cookie_validate_packet(struct cookie_checker *checker,
+						struct sk_buff *skb,
+						bool check_cookie);
+void wg_cookie_add_mac_to_packet(void *message, size_t len,
+				 struct wg_peer *peer);
+
+void wg_cookie_message_create(struct message_handshake_cookie *src,
+			      struct sk_buff *skb, __le32 index,
+			      struct cookie_checker *checker);
+void wg_cookie_message_consume(struct message_handshake_cookie *src,
+			       struct wg_device *wg);
+
+#endif /* _WG_COOKIE_H */
diff --git a/drivers/net/wireguard/device.c b/drivers/net/wireguard/device.c
new file mode 100644
index 0000000..e01ab07
--- /dev/null
+++ b/drivers/net/wireguard/device.c
@@ -0,0 +1,457 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "socket.h"
+#include "timers.h"
+#include "device.h"
+#include "ratelimiter.h"
+#include "peer.h"
+#include "messages.h"
+
+#include <linux/module.h>
+#include <linux/rtnetlink.h>
+#include <linux/inet.h>
+#include <linux/netdevice.h>
+#include <linux/inetdevice.h>
+#include <linux/if_arp.h>
+#include <linux/icmp.h>
+#include <linux/suspend.h>
+#include <net/icmp.h>
+#include <net/rtnetlink.h>
+#include <net/ip_tunnels.h>
+#include <net/addrconf.h>
+
+static LIST_HEAD(device_list);
+
+static int wg_open(struct net_device *dev)
+{
+	struct in_device *dev_v4 = __in_dev_get_rtnl(dev);
+	struct inet6_dev *dev_v6 = __in6_dev_get(dev);
+	struct wg_device *wg = netdev_priv(dev);
+	struct wg_peer *peer;
+	int ret;
+
+	if (dev_v4) {
+		/* At some point we might put this check near the ip_rt_send_
+		 * redirect call of ip_forward in net/ipv4/ip_forward.c, similar
+		 * to the current secpath check.
+		 */
+		IN_DEV_CONF_SET(dev_v4, SEND_REDIRECTS, false);
+		IPV4_DEVCONF_ALL(dev_net(dev), SEND_REDIRECTS) = false;
+	}
+	if (dev_v6)
+		dev_v6->cnf.addr_gen_mode = IN6_ADDR_GEN_MODE_NONE;
+
+	mutex_lock(&wg->device_update_lock);
+	ret = wg_socket_init(wg, wg->incoming_port);
+	if (ret < 0)
+		goto out;
+	list_for_each_entry(peer, &wg->peer_list, peer_list) {
+		wg_packet_send_staged_packets(peer);
+		if (peer->persistent_keepalive_interval)
+			wg_packet_send_keepalive(peer);
+	}
+out:
+	mutex_unlock(&wg->device_update_lock);
+	return ret;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int wg_pm_notification(struct notifier_block *nb, unsigned long action,
+			      void *data)
+{
+	struct wg_device *wg;
+	struct wg_peer *peer;
+
+	/* If the machine is constantly suspending and resuming, as part of
+	 * its normal operation rather than as a somewhat rare event, then we
+	 * don't actually want to clear keys.
+	 */
+	if (IS_ENABLED(CONFIG_PM_AUTOSLEEP) || IS_ENABLED(CONFIG_ANDROID))
+		return 0;
+
+	if (action != PM_HIBERNATION_PREPARE && action != PM_SUSPEND_PREPARE)
+		return 0;
+
+	rtnl_lock();
+	list_for_each_entry(wg, &device_list, device_list) {
+		mutex_lock(&wg->device_update_lock);
+		list_for_each_entry(peer, &wg->peer_list, peer_list) {
+			del_timer(&peer->timer_zero_key_material);
+			wg_noise_handshake_clear(&peer->handshake);
+			wg_noise_keypairs_clear(&peer->keypairs);
+		}
+		mutex_unlock(&wg->device_update_lock);
+	}
+	rtnl_unlock();
+	rcu_barrier();
+	return 0;
+}
+
+static struct notifier_block pm_notifier = { .notifier_call = wg_pm_notification };
+#endif
+
+static int wg_stop(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	struct wg_peer *peer;
+
+	mutex_lock(&wg->device_update_lock);
+	list_for_each_entry(peer, &wg->peer_list, peer_list) {
+		wg_packet_purge_staged_packets(peer);
+		wg_timers_stop(peer);
+		wg_noise_handshake_clear(&peer->handshake);
+		wg_noise_keypairs_clear(&peer->keypairs);
+		wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+	}
+	mutex_unlock(&wg->device_update_lock);
+	skb_queue_purge(&wg->incoming_handshakes);
+	wg_socket_reinit(wg, NULL, NULL);
+	return 0;
+}
+
+static netdev_tx_t wg_xmit(struct sk_buff *skb, struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	struct sk_buff_head packets;
+	struct wg_peer *peer;
+	struct sk_buff *next;
+	sa_family_t family;
+	u32 mtu;
+	int ret;
+
+	if (unlikely(!wg_check_packet_protocol(skb))) {
+		ret = -EPROTONOSUPPORT;
+		net_dbg_ratelimited("%s: Invalid IP packet\n", dev->name);
+		goto err;
+	}
+
+	peer = wg_allowedips_lookup_dst(&wg->peer_allowedips, skb);
+	if (unlikely(!peer)) {
+		ret = -ENOKEY;
+		if (skb->protocol == htons(ETH_P_IP))
+			net_dbg_ratelimited("%s: No peer has allowed IPs matching %pI4\n",
+					    dev->name, &ip_hdr(skb)->daddr);
+		else if (skb->protocol == htons(ETH_P_IPV6))
+			net_dbg_ratelimited("%s: No peer has allowed IPs matching %pI6\n",
+					    dev->name, &ipv6_hdr(skb)->daddr);
+		goto err_icmp;
+	}
+
+	family = READ_ONCE(peer->endpoint.addr.sa_family);
+	if (unlikely(family != AF_INET && family != AF_INET6)) {
+		ret = -EDESTADDRREQ;
+		net_dbg_ratelimited("%s: No valid endpoint has been configured or discovered for peer %llu\n",
+				    dev->name, peer->internal_id);
+		goto err_peer;
+	}
+
+	mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu;
+
+	__skb_queue_head_init(&packets);
+	if (!skb_is_gso(skb)) {
+		skb_mark_not_on_list(skb);
+	} else {
+		struct sk_buff *segs = skb_gso_segment(skb, 0);
+
+		if (unlikely(IS_ERR(segs))) {
+			ret = PTR_ERR(segs);
+			goto err_peer;
+		}
+		dev_kfree_skb(skb);
+		skb = segs;
+	}
+
+	skb_list_walk_safe(skb, skb, next) {
+		skb_mark_not_on_list(skb);
+
+		skb = skb_share_check(skb, GFP_ATOMIC);
+		if (unlikely(!skb))
+			continue;
+
+		/* We only need to keep the original dst around for icmp,
+		 * so at this point we're in a position to drop it.
+		 */
+		skb_dst_drop(skb);
+
+		PACKET_CB(skb)->mtu = mtu;
+
+		__skb_queue_tail(&packets, skb);
+	}
+
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	/* If the queue is getting too big, we start removing the oldest packets
+	 * until it's small again. We do this before adding the new packet, so
+	 * we don't remove GSO segments that are in excess.
+	 */
+	while (skb_queue_len(&peer->staged_packet_queue) > MAX_STAGED_PACKETS) {
+		dev_kfree_skb(__skb_dequeue(&peer->staged_packet_queue));
+		++dev->stats.tx_dropped;
+	}
+	skb_queue_splice_tail(&packets, &peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+
+	wg_packet_send_staged_packets(peer);
+
+	wg_peer_put(peer);
+	return NETDEV_TX_OK;
+
+err_peer:
+	wg_peer_put(peer);
+err_icmp:
+	if (skb->protocol == htons(ETH_P_IP))
+		icmp_ndo_send(skb, ICMP_DEST_UNREACH, ICMP_HOST_UNREACH, 0);
+	else if (skb->protocol == htons(ETH_P_IPV6))
+		icmpv6_ndo_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0);
+err:
+	++dev->stats.tx_errors;
+	kfree_skb(skb);
+	return ret;
+}
+
+static const struct net_device_ops netdev_ops = {
+	.ndo_open		= wg_open,
+	.ndo_stop		= wg_stop,
+	.ndo_start_xmit		= wg_xmit,
+	.ndo_get_stats64	= ip_tunnel_get_stats64
+};
+
+static void wg_destruct(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+
+	rtnl_lock();
+	list_del(&wg->device_list);
+	rtnl_unlock();
+	mutex_lock(&wg->device_update_lock);
+	rcu_assign_pointer(wg->creating_net, NULL);
+	wg->incoming_port = 0;
+	wg_socket_reinit(wg, NULL, NULL);
+	/* The final references are cleared in the below calls to destroy_workqueue. */
+	wg_peer_remove_all(wg);
+	destroy_workqueue(wg->handshake_receive_wq);
+	destroy_workqueue(wg->handshake_send_wq);
+	destroy_workqueue(wg->packet_crypt_wq);
+	wg_packet_queue_free(&wg->decrypt_queue);
+	wg_packet_queue_free(&wg->encrypt_queue);
+	rcu_barrier(); /* Wait for all the peers to be actually freed. */
+	wg_ratelimiter_uninit();
+	memzero_explicit(&wg->static_identity, sizeof(wg->static_identity));
+	skb_queue_purge(&wg->incoming_handshakes);
+	free_percpu(dev->tstats);
+	free_percpu(wg->incoming_handshakes_worker);
+	kvfree(wg->index_hashtable);
+	kvfree(wg->peer_hashtable);
+	mutex_unlock(&wg->device_update_lock);
+
+	pr_debug("%s: Interface destroyed\n", dev->name);
+	free_netdev(dev);
+}
+
+static const struct device_type device_type = { .name = KBUILD_MODNAME };
+
+static void wg_setup(struct net_device *dev)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	enum { WG_NETDEV_FEATURES = NETIF_F_HW_CSUM | NETIF_F_RXCSUM |
+				    NETIF_F_SG | NETIF_F_GSO |
+				    NETIF_F_GSO_SOFTWARE | NETIF_F_HIGHDMA };
+	const int overhead = MESSAGE_MINIMUM_LENGTH + sizeof(struct udphdr) +
+			     max(sizeof(struct ipv6hdr), sizeof(struct iphdr));
+
+	dev->netdev_ops = &netdev_ops;
+	dev->header_ops = &ip_tunnel_header_ops;
+	dev->hard_header_len = 0;
+	dev->addr_len = 0;
+	dev->needed_headroom = DATA_PACKET_HEAD_ROOM;
+	dev->needed_tailroom = noise_encrypted_len(MESSAGE_PADDING_MULTIPLE);
+	dev->type = ARPHRD_NONE;
+	dev->flags = IFF_POINTOPOINT | IFF_NOARP;
+	dev->priv_flags |= IFF_NO_QUEUE;
+	dev->features |= NETIF_F_LLTX;
+	dev->features |= WG_NETDEV_FEATURES;
+	dev->hw_features |= WG_NETDEV_FEATURES;
+	dev->hw_enc_features |= WG_NETDEV_FEATURES;
+	dev->mtu = ETH_DATA_LEN - overhead;
+	dev->max_mtu = round_down(INT_MAX, MESSAGE_PADDING_MULTIPLE) - overhead;
+
+	SET_NETDEV_DEVTYPE(dev, &device_type);
+
+	/* We need to keep the dst around in case of icmp replies. */
+	netif_keep_dst(dev);
+
+	memset(wg, 0, sizeof(*wg));
+	wg->dev = dev;
+}
+
+static int wg_newlink(struct net *src_net, struct net_device *dev,
+		      struct nlattr *tb[], struct nlattr *data[],
+		      struct netlink_ext_ack *extack)
+{
+	struct wg_device *wg = netdev_priv(dev);
+	int ret = -ENOMEM;
+
+	rcu_assign_pointer(wg->creating_net, src_net);
+	init_rwsem(&wg->static_identity.lock);
+	mutex_init(&wg->socket_update_lock);
+	mutex_init(&wg->device_update_lock);
+	skb_queue_head_init(&wg->incoming_handshakes);
+	wg_allowedips_init(&wg->peer_allowedips);
+	wg_cookie_checker_init(&wg->cookie_checker, wg);
+	INIT_LIST_HEAD(&wg->peer_list);
+	wg->device_update_gen = 1;
+
+	wg->peer_hashtable = wg_pubkey_hashtable_alloc();
+	if (!wg->peer_hashtable)
+		return ret;
+
+	wg->index_hashtable = wg_index_hashtable_alloc();
+	if (!wg->index_hashtable)
+		goto err_free_peer_hashtable;
+
+	dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
+	if (!dev->tstats)
+		goto err_free_index_hashtable;
+
+	wg->incoming_handshakes_worker =
+		wg_packet_percpu_multicore_worker_alloc(
+				wg_packet_handshake_receive_worker, wg);
+	if (!wg->incoming_handshakes_worker)
+		goto err_free_tstats;
+
+	wg->handshake_receive_wq = alloc_workqueue("wg-kex-%s",
+			WQ_CPU_INTENSIVE | WQ_FREEZABLE, 0, dev->name);
+	if (!wg->handshake_receive_wq)
+		goto err_free_incoming_handshakes;
+
+	wg->handshake_send_wq = alloc_workqueue("wg-kex-%s",
+			WQ_UNBOUND | WQ_FREEZABLE, 0, dev->name);
+	if (!wg->handshake_send_wq)
+		goto err_destroy_handshake_receive;
+
+	wg->packet_crypt_wq = alloc_workqueue("wg-crypt-%s",
+			WQ_CPU_INTENSIVE | WQ_MEM_RECLAIM, 0, dev->name);
+	if (!wg->packet_crypt_wq)
+		goto err_destroy_handshake_send;
+
+	ret = wg_packet_queue_init(&wg->encrypt_queue, wg_packet_encrypt_worker,
+				   MAX_QUEUED_PACKETS);
+	if (ret < 0)
+		goto err_destroy_packet_crypt;
+
+	ret = wg_packet_queue_init(&wg->decrypt_queue, wg_packet_decrypt_worker,
+				   MAX_QUEUED_PACKETS);
+	if (ret < 0)
+		goto err_free_encrypt_queue;
+
+	ret = wg_ratelimiter_init();
+	if (ret < 0)
+		goto err_free_decrypt_queue;
+
+	ret = register_netdevice(dev);
+	if (ret < 0)
+		goto err_uninit_ratelimiter;
+
+	list_add(&wg->device_list, &device_list);
+
+	/* We wait until the end to assign priv_destructor, so that
+	 * register_netdevice doesn't call it for us if it fails.
+	 */
+	dev->priv_destructor = wg_destruct;
+
+	pr_debug("%s: Interface created\n", dev->name);
+	return ret;
+
+err_uninit_ratelimiter:
+	wg_ratelimiter_uninit();
+err_free_decrypt_queue:
+	wg_packet_queue_free(&wg->decrypt_queue);
+err_free_encrypt_queue:
+	wg_packet_queue_free(&wg->encrypt_queue);
+err_destroy_packet_crypt:
+	destroy_workqueue(wg->packet_crypt_wq);
+err_destroy_handshake_send:
+	destroy_workqueue(wg->handshake_send_wq);
+err_destroy_handshake_receive:
+	destroy_workqueue(wg->handshake_receive_wq);
+err_free_incoming_handshakes:
+	free_percpu(wg->incoming_handshakes_worker);
+err_free_tstats:
+	free_percpu(dev->tstats);
+err_free_index_hashtable:
+	kvfree(wg->index_hashtable);
+err_free_peer_hashtable:
+	kvfree(wg->peer_hashtable);
+	return ret;
+}
+
+static struct rtnl_link_ops link_ops __read_mostly = {
+	.kind			= KBUILD_MODNAME,
+	.priv_size		= sizeof(struct wg_device),
+	.setup			= wg_setup,
+	.newlink		= wg_newlink,
+};
+
+static void wg_netns_pre_exit(struct net *net)
+{
+	struct wg_device *wg;
+
+	rtnl_lock();
+	list_for_each_entry(wg, &device_list, device_list) {
+		if (rcu_access_pointer(wg->creating_net) == net) {
+			pr_debug("%s: Creating namespace exiting\n", wg->dev->name);
+			netif_carrier_off(wg->dev);
+			mutex_lock(&wg->device_update_lock);
+			rcu_assign_pointer(wg->creating_net, NULL);
+			wg_socket_reinit(wg, NULL, NULL);
+			mutex_unlock(&wg->device_update_lock);
+		}
+	}
+	rtnl_unlock();
+}
+
+static struct pernet_operations pernet_ops = {
+	.pre_exit = wg_netns_pre_exit
+};
+
+int __init wg_device_init(void)
+{
+	int ret;
+
+#ifdef CONFIG_PM_SLEEP
+	ret = register_pm_notifier(&pm_notifier);
+	if (ret)
+		return ret;
+#endif
+
+	ret = register_pernet_device(&pernet_ops);
+	if (ret)
+		goto error_pm;
+
+	ret = rtnl_link_register(&link_ops);
+	if (ret)
+		goto error_pernet;
+
+	return 0;
+
+error_pernet:
+	unregister_pernet_device(&pernet_ops);
+error_pm:
+#ifdef CONFIG_PM_SLEEP
+	unregister_pm_notifier(&pm_notifier);
+#endif
+	return ret;
+}
+
+void wg_device_uninit(void)
+{
+	rtnl_link_unregister(&link_ops);
+	unregister_pernet_device(&pernet_ops);
+#ifdef CONFIG_PM_SLEEP
+	unregister_pm_notifier(&pm_notifier);
+#endif
+	rcu_barrier();
+}
diff --git a/drivers/net/wireguard/device.h b/drivers/net/wireguard/device.h
new file mode 100644
index 0000000..854bc3d
--- /dev/null
+++ b/drivers/net/wireguard/device.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_DEVICE_H
+#define _WG_DEVICE_H
+
+#include "noise.h"
+#include "allowedips.h"
+#include "peerlookup.h"
+#include "cookie.h"
+
+#include <linux/types.h>
+#include <linux/netdevice.h>
+#include <linux/workqueue.h>
+#include <linux/mutex.h>
+#include <linux/net.h>
+#include <linux/ptr_ring.h>
+
+struct wg_device;
+
+struct multicore_worker {
+	void *ptr;
+	struct work_struct work;
+};
+
+struct crypt_queue {
+	struct ptr_ring ring;
+	struct multicore_worker __percpu *worker;
+	int last_cpu;
+};
+
+struct prev_queue {
+	struct sk_buff *head, *tail, *peeked;
+	struct { struct sk_buff *next, *prev; } empty; // Match first 2 members of struct sk_buff.
+	atomic_t count;
+};
+
+struct wg_device {
+	struct net_device *dev;
+	struct crypt_queue encrypt_queue, decrypt_queue;
+	struct sock __rcu *sock4, *sock6;
+	struct net __rcu *creating_net;
+	struct noise_static_identity static_identity;
+	struct workqueue_struct *handshake_receive_wq, *handshake_send_wq;
+	struct workqueue_struct *packet_crypt_wq;
+	struct sk_buff_head incoming_handshakes;
+	int incoming_handshake_cpu;
+	struct multicore_worker __percpu *incoming_handshakes_worker;
+	struct cookie_checker cookie_checker;
+	struct pubkey_hashtable *peer_hashtable;
+	struct index_hashtable *index_hashtable;
+	struct allowedips peer_allowedips;
+	struct mutex device_update_lock, socket_update_lock;
+	struct list_head device_list, peer_list;
+	unsigned int num_peers, device_update_gen;
+	u32 fwmark;
+	u16 incoming_port;
+};
+
+int wg_device_init(void);
+void wg_device_uninit(void);
+
+#endif /* _WG_DEVICE_H */
diff --git a/drivers/net/wireguard/main.c b/drivers/net/wireguard/main.c
new file mode 100644
index 0000000..75dbe77
--- /dev/null
+++ b/drivers/net/wireguard/main.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "version.h"
+#include "device.h"
+#include "noise.h"
+#include "queueing.h"
+#include "ratelimiter.h"
+#include "netlink.h"
+
+#include <uapi/linux/wireguard.h>
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/genetlink.h>
+#include <net/rtnetlink.h>
+
+static int __init mod_init(void)
+{
+	int ret;
+
+	ret = wg_allowedips_slab_init();
+	if (ret < 0)
+		goto err_allowedips;
+
+#ifdef DEBUG
+	ret = -ENOTRECOVERABLE;
+	if (!wg_allowedips_selftest() || !wg_packet_counter_selftest() ||
+	    !wg_ratelimiter_selftest())
+		goto err_peer;
+#endif
+	wg_noise_init();
+
+	ret = wg_peer_init();
+	if (ret < 0)
+		goto err_peer;
+
+	ret = wg_device_init();
+	if (ret < 0)
+		goto err_device;
+
+	ret = wg_genetlink_init();
+	if (ret < 0)
+		goto err_netlink;
+
+	pr_info("WireGuard " WIREGUARD_VERSION " loaded. See www.wireguard.com for information.\n");
+	pr_info("Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.\n");
+
+	return 0;
+
+err_netlink:
+	wg_device_uninit();
+err_device:
+	wg_peer_uninit();
+err_peer:
+	wg_allowedips_slab_uninit();
+err_allowedips:
+	return ret;
+}
+
+static void __exit mod_exit(void)
+{
+	wg_genetlink_uninit();
+	wg_device_uninit();
+	wg_peer_uninit();
+	wg_allowedips_slab_uninit();
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("WireGuard secure network tunnel");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
+MODULE_VERSION(WIREGUARD_VERSION);
+MODULE_ALIAS_RTNL_LINK(KBUILD_MODNAME);
+MODULE_ALIAS_GENL_FAMILY(WG_GENL_NAME);
diff --git a/drivers/net/wireguard/messages.h b/drivers/net/wireguard/messages.h
new file mode 100644
index 0000000..208da72
--- /dev/null
+++ b/drivers/net/wireguard/messages.h
@@ -0,0 +1,128 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_MESSAGES_H
+#define _WG_MESSAGES_H
+
+#include <crypto/curve25519.h>
+#include <crypto/chacha20poly1305.h>
+#include <crypto/blake2s.h>
+
+#include <linux/kernel.h>
+#include <linux/param.h>
+#include <linux/skbuff.h>
+
+enum noise_lengths {
+	NOISE_PUBLIC_KEY_LEN = CURVE25519_KEY_SIZE,
+	NOISE_SYMMETRIC_KEY_LEN = CHACHA20POLY1305_KEY_SIZE,
+	NOISE_TIMESTAMP_LEN = sizeof(u64) + sizeof(u32),
+	NOISE_AUTHTAG_LEN = CHACHA20POLY1305_AUTHTAG_SIZE,
+	NOISE_HASH_LEN = BLAKE2S_HASH_SIZE
+};
+
+#define noise_encrypted_len(plain_len) ((plain_len) + NOISE_AUTHTAG_LEN)
+
+enum cookie_values {
+	COOKIE_SECRET_MAX_AGE = 2 * 60,
+	COOKIE_SECRET_LATENCY = 5,
+	COOKIE_NONCE_LEN = XCHACHA20POLY1305_NONCE_SIZE,
+	COOKIE_LEN = 16
+};
+
+enum counter_values {
+	COUNTER_BITS_TOTAL = 8192,
+	COUNTER_REDUNDANT_BITS = BITS_PER_LONG,
+	COUNTER_WINDOW_SIZE = COUNTER_BITS_TOTAL - COUNTER_REDUNDANT_BITS
+};
+
+enum limits {
+	REKEY_AFTER_MESSAGES = 1ULL << 60,
+	REJECT_AFTER_MESSAGES = U64_MAX - COUNTER_WINDOW_SIZE - 1,
+	REKEY_TIMEOUT = 5,
+	REKEY_TIMEOUT_JITTER_MAX_JIFFIES = HZ / 3,
+	REKEY_AFTER_TIME = 120,
+	REJECT_AFTER_TIME = 180,
+	INITIATIONS_PER_SECOND = 50,
+	MAX_PEERS_PER_DEVICE = 1U << 20,
+	KEEPALIVE_TIMEOUT = 10,
+	MAX_TIMER_HANDSHAKES = 90 / REKEY_TIMEOUT,
+	MAX_QUEUED_INCOMING_HANDSHAKES = 4096, /* TODO: replace this with DQL */
+	MAX_STAGED_PACKETS = 128,
+	MAX_QUEUED_PACKETS = 1024 /* TODO: replace this with DQL */
+};
+
+enum message_type {
+	MESSAGE_INVALID = 0,
+	MESSAGE_HANDSHAKE_INITIATION = 1,
+	MESSAGE_HANDSHAKE_RESPONSE = 2,
+	MESSAGE_HANDSHAKE_COOKIE = 3,
+	MESSAGE_DATA = 4
+};
+
+struct message_header {
+	/* The actual layout of this that we want is:
+	 * u8 type
+	 * u8 reserved_zero[3]
+	 *
+	 * But it turns out that by encoding this as little endian,
+	 * we achieve the same thing, and it makes checking faster.
+	 */
+	__le32 type;
+};
+
+struct message_macs {
+	u8 mac1[COOKIE_LEN];
+	u8 mac2[COOKIE_LEN];
+};
+
+struct message_handshake_initiation {
+	struct message_header header;
+	__le32 sender_index;
+	u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 encrypted_static[noise_encrypted_len(NOISE_PUBLIC_KEY_LEN)];
+	u8 encrypted_timestamp[noise_encrypted_len(NOISE_TIMESTAMP_LEN)];
+	struct message_macs macs;
+};
+
+struct message_handshake_response {
+	struct message_header header;
+	__le32 sender_index;
+	__le32 receiver_index;
+	u8 unencrypted_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 encrypted_nothing[noise_encrypted_len(0)];
+	struct message_macs macs;
+};
+
+struct message_handshake_cookie {
+	struct message_header header;
+	__le32 receiver_index;
+	u8 nonce[COOKIE_NONCE_LEN];
+	u8 encrypted_cookie[noise_encrypted_len(COOKIE_LEN)];
+};
+
+struct message_data {
+	struct message_header header;
+	__le32 key_idx;
+	__le64 counter;
+	u8 encrypted_data[];
+};
+
+#define message_data_len(plain_len) \
+	(noise_encrypted_len(plain_len) + sizeof(struct message_data))
+
+enum message_alignments {
+	MESSAGE_PADDING_MULTIPLE = 16,
+	MESSAGE_MINIMUM_LENGTH = message_data_len(0)
+};
+
+#define SKB_HEADER_LEN                                       \
+	(max(sizeof(struct iphdr), sizeof(struct ipv6hdr)) + \
+	 sizeof(struct udphdr) + NET_SKB_PAD)
+#define DATA_PACKET_HEAD_ROOM \
+	ALIGN(sizeof(struct message_data) + SKB_HEADER_LEN, 4)
+
+enum { HANDSHAKE_DSCP = 0x88 /* AF41, plus 00 ECN */ };
+
+#endif /* _WG_MESSAGES_H */
diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlink.c
new file mode 100644
index 0000000..1c69eb8
--- /dev/null
+++ b/drivers/net/wireguard/netlink.c
@@ -0,0 +1,646 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "netlink.h"
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "queueing.h"
+#include "messages.h"
+
+#include <uapi/linux/wireguard.h>
+
+#include <linux/if.h>
+#include <net/genetlink.h>
+#include <net/sock.h>
+#include <crypto/algapi.h>
+
+static struct genl_family genl_family;
+
+static const struct nla_policy device_policy[WGDEVICE_A_MAX + 1] = {
+	[WGDEVICE_A_IFINDEX]		= { .type = NLA_U32 },
+	[WGDEVICE_A_IFNAME]		= { .type = NLA_NUL_STRING, .len = IFNAMSIZ - 1 },
+	[WGDEVICE_A_PRIVATE_KEY]	= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGDEVICE_A_PUBLIC_KEY]		= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGDEVICE_A_FLAGS]		= { .type = NLA_U32 },
+	[WGDEVICE_A_LISTEN_PORT]	= { .type = NLA_U16 },
+	[WGDEVICE_A_FWMARK]		= { .type = NLA_U32 },
+	[WGDEVICE_A_PEERS]		= { .type = NLA_NESTED }
+};
+
+static const struct nla_policy peer_policy[WGPEER_A_MAX + 1] = {
+	[WGPEER_A_PUBLIC_KEY]				= NLA_POLICY_EXACT_LEN(NOISE_PUBLIC_KEY_LEN),
+	[WGPEER_A_PRESHARED_KEY]			= NLA_POLICY_EXACT_LEN(NOISE_SYMMETRIC_KEY_LEN),
+	[WGPEER_A_FLAGS]				= { .type = NLA_U32 },
+	[WGPEER_A_ENDPOINT]				= NLA_POLICY_MIN_LEN(sizeof(struct sockaddr)),
+	[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]	= { .type = NLA_U16 },
+	[WGPEER_A_LAST_HANDSHAKE_TIME]			= NLA_POLICY_EXACT_LEN(sizeof(struct __kernel_timespec)),
+	[WGPEER_A_RX_BYTES]				= { .type = NLA_U64 },
+	[WGPEER_A_TX_BYTES]				= { .type = NLA_U64 },
+	[WGPEER_A_ALLOWEDIPS]				= { .type = NLA_NESTED },
+	[WGPEER_A_PROTOCOL_VERSION]			= { .type = NLA_U32 }
+};
+
+static const struct nla_policy allowedip_policy[WGALLOWEDIP_A_MAX + 1] = {
+	[WGALLOWEDIP_A_FAMILY]		= { .type = NLA_U16 },
+	[WGALLOWEDIP_A_IPADDR]		= NLA_POLICY_MIN_LEN(sizeof(struct in_addr)),
+	[WGALLOWEDIP_A_CIDR_MASK]	= { .type = NLA_U8 }
+};
+
+static struct wg_device *lookup_interface(struct nlattr **attrs,
+					  struct sk_buff *skb)
+{
+	struct net_device *dev = NULL;
+
+	if (!attrs[WGDEVICE_A_IFINDEX] == !attrs[WGDEVICE_A_IFNAME])
+		return ERR_PTR(-EBADR);
+	if (attrs[WGDEVICE_A_IFINDEX])
+		dev = dev_get_by_index(sock_net(skb->sk),
+				       nla_get_u32(attrs[WGDEVICE_A_IFINDEX]));
+	else if (attrs[WGDEVICE_A_IFNAME])
+		dev = dev_get_by_name(sock_net(skb->sk),
+				      nla_data(attrs[WGDEVICE_A_IFNAME]));
+	if (!dev)
+		return ERR_PTR(-ENODEV);
+	if (!dev->rtnl_link_ops || !dev->rtnl_link_ops->kind ||
+	    strcmp(dev->rtnl_link_ops->kind, KBUILD_MODNAME)) {
+		dev_put(dev);
+		return ERR_PTR(-EOPNOTSUPP);
+	}
+	return netdev_priv(dev);
+}
+
+static int get_allowedips(struct sk_buff *skb, const u8 *ip, u8 cidr,
+			  int family)
+{
+	struct nlattr *allowedip_nest;
+
+	allowedip_nest = nla_nest_start(skb, 0);
+	if (!allowedip_nest)
+		return -EMSGSIZE;
+
+	if (nla_put_u8(skb, WGALLOWEDIP_A_CIDR_MASK, cidr) ||
+	    nla_put_u16(skb, WGALLOWEDIP_A_FAMILY, family) ||
+	    nla_put(skb, WGALLOWEDIP_A_IPADDR, family == AF_INET6 ?
+		    sizeof(struct in6_addr) : sizeof(struct in_addr), ip)) {
+		nla_nest_cancel(skb, allowedip_nest);
+		return -EMSGSIZE;
+	}
+
+	nla_nest_end(skb, allowedip_nest);
+	return 0;
+}
+
+struct dump_ctx {
+	struct wg_device *wg;
+	struct wg_peer *next_peer;
+	u64 allowedips_seq;
+	struct allowedips_node *next_allowedip;
+};
+
+#define DUMP_CTX(cb) ((struct dump_ctx *)(cb)->args)
+
+static int
+get_peer(struct wg_peer *peer, struct sk_buff *skb, struct dump_ctx *ctx)
+{
+
+	struct nlattr *allowedips_nest, *peer_nest = nla_nest_start(skb, 0);
+	struct allowedips_node *allowedips_node = ctx->next_allowedip;
+	bool fail;
+
+	if (!peer_nest)
+		return -EMSGSIZE;
+
+	down_read(&peer->handshake.lock);
+	fail = nla_put(skb, WGPEER_A_PUBLIC_KEY, NOISE_PUBLIC_KEY_LEN,
+		       peer->handshake.remote_static);
+	up_read(&peer->handshake.lock);
+	if (fail)
+		goto err;
+
+	if (!allowedips_node) {
+		const struct __kernel_timespec last_handshake = {
+			.tv_sec = peer->walltime_last_handshake.tv_sec,
+			.tv_nsec = peer->walltime_last_handshake.tv_nsec
+		};
+
+		down_read(&peer->handshake.lock);
+		fail = nla_put(skb, WGPEER_A_PRESHARED_KEY,
+			       NOISE_SYMMETRIC_KEY_LEN,
+			       peer->handshake.preshared_key);
+		up_read(&peer->handshake.lock);
+		if (fail)
+			goto err;
+
+		if (nla_put(skb, WGPEER_A_LAST_HANDSHAKE_TIME,
+			    sizeof(last_handshake), &last_handshake) ||
+		    nla_put_u16(skb, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL,
+				peer->persistent_keepalive_interval) ||
+		    nla_put_u64_64bit(skb, WGPEER_A_TX_BYTES, peer->tx_bytes,
+				      WGPEER_A_UNSPEC) ||
+		    nla_put_u64_64bit(skb, WGPEER_A_RX_BYTES, peer->rx_bytes,
+				      WGPEER_A_UNSPEC) ||
+		    nla_put_u32(skb, WGPEER_A_PROTOCOL_VERSION, 1))
+			goto err;
+
+		read_lock_bh(&peer->endpoint_lock);
+		if (peer->endpoint.addr.sa_family == AF_INET)
+			fail = nla_put(skb, WGPEER_A_ENDPOINT,
+				       sizeof(peer->endpoint.addr4),
+				       &peer->endpoint.addr4);
+		else if (peer->endpoint.addr.sa_family == AF_INET6)
+			fail = nla_put(skb, WGPEER_A_ENDPOINT,
+				       sizeof(peer->endpoint.addr6),
+				       &peer->endpoint.addr6);
+		read_unlock_bh(&peer->endpoint_lock);
+		if (fail)
+			goto err;
+		allowedips_node =
+			list_first_entry_or_null(&peer->allowedips_list,
+					struct allowedips_node, peer_list);
+	}
+	if (!allowedips_node)
+		goto no_allowedips;
+	if (!ctx->allowedips_seq)
+		ctx->allowedips_seq = peer->device->peer_allowedips.seq;
+	else if (ctx->allowedips_seq != peer->device->peer_allowedips.seq)
+		goto no_allowedips;
+
+	allowedips_nest = nla_nest_start(skb, WGPEER_A_ALLOWEDIPS);
+	if (!allowedips_nest)
+		goto err;
+
+	list_for_each_entry_from(allowedips_node, &peer->allowedips_list,
+				 peer_list) {
+		u8 cidr, ip[16] __aligned(__alignof(u64));
+		int family;
+
+		family = wg_allowedips_read_node(allowedips_node, ip, &cidr);
+		if (get_allowedips(skb, ip, cidr, family)) {
+			nla_nest_end(skb, allowedips_nest);
+			nla_nest_end(skb, peer_nest);
+			ctx->next_allowedip = allowedips_node;
+			return -EMSGSIZE;
+		}
+	}
+	nla_nest_end(skb, allowedips_nest);
+no_allowedips:
+	nla_nest_end(skb, peer_nest);
+	ctx->next_allowedip = NULL;
+	ctx->allowedips_seq = 0;
+	return 0;
+err:
+	nla_nest_cancel(skb, peer_nest);
+	return -EMSGSIZE;
+}
+
+static int wg_get_device_start(struct netlink_callback *cb)
+{
+	struct nlattr **attrs = genl_family_attrbuf(&genl_family);
+	struct wg_device *wg;
+	int ret;
+
+	ret = nlmsg_parse(cb->nlh, GENL_HDRLEN + genl_family.hdrsize, attrs,
+			  genl_family.maxattr, device_policy, NULL);
+	if (ret < 0)
+		return ret;
+	wg = lookup_interface(attrs, cb->skb);
+	if (IS_ERR(wg))
+		return PTR_ERR(wg);
+	DUMP_CTX(cb)->wg = wg;
+	return 0;
+}
+
+static int wg_get_device_dump(struct sk_buff *skb, struct netlink_callback *cb)
+{
+	struct wg_peer *peer, *next_peer_cursor;
+	struct dump_ctx *ctx = DUMP_CTX(cb);
+	struct wg_device *wg = ctx->wg;
+	struct nlattr *peers_nest;
+	int ret = -EMSGSIZE;
+	bool done = true;
+	void *hdr;
+
+	rtnl_lock();
+	mutex_lock(&wg->device_update_lock);
+	cb->seq = wg->device_update_gen;
+	next_peer_cursor = ctx->next_peer;
+
+	hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
+			  &genl_family, NLM_F_MULTI, WG_CMD_GET_DEVICE);
+	if (!hdr)
+		goto out;
+	genl_dump_check_consistent(cb, hdr);
+
+	if (!ctx->next_peer) {
+		if (nla_put_u16(skb, WGDEVICE_A_LISTEN_PORT,
+				wg->incoming_port) ||
+		    nla_put_u32(skb, WGDEVICE_A_FWMARK, wg->fwmark) ||
+		    nla_put_u32(skb, WGDEVICE_A_IFINDEX, wg->dev->ifindex) ||
+		    nla_put_string(skb, WGDEVICE_A_IFNAME, wg->dev->name))
+			goto out;
+
+		down_read(&wg->static_identity.lock);
+		if (wg->static_identity.has_identity) {
+			if (nla_put(skb, WGDEVICE_A_PRIVATE_KEY,
+				    NOISE_PUBLIC_KEY_LEN,
+				    wg->static_identity.static_private) ||
+			    nla_put(skb, WGDEVICE_A_PUBLIC_KEY,
+				    NOISE_PUBLIC_KEY_LEN,
+				    wg->static_identity.static_public)) {
+				up_read(&wg->static_identity.lock);
+				goto out;
+			}
+		}
+		up_read(&wg->static_identity.lock);
+	}
+
+	peers_nest = nla_nest_start(skb, WGDEVICE_A_PEERS);
+	if (!peers_nest)
+		goto out;
+	ret = 0;
+	/* If the last cursor was removed via list_del_init in peer_remove, then
+	 * we just treat this the same as there being no more peers left. The
+	 * reason is that seq_nr should indicate to userspace that this isn't a
+	 * coherent dump anyway, so they'll try again.
+	 */
+	if (list_empty(&wg->peer_list) ||
+	    (ctx->next_peer && list_empty(&ctx->next_peer->peer_list))) {
+		nla_nest_cancel(skb, peers_nest);
+		goto out;
+	}
+	lockdep_assert_held(&wg->device_update_lock);
+	peer = list_prepare_entry(ctx->next_peer, &wg->peer_list, peer_list);
+	list_for_each_entry_continue(peer, &wg->peer_list, peer_list) {
+		if (get_peer(peer, skb, ctx)) {
+			done = false;
+			break;
+		}
+		next_peer_cursor = peer;
+	}
+	nla_nest_end(skb, peers_nest);
+
+out:
+	if (!ret && !done && next_peer_cursor)
+		wg_peer_get(next_peer_cursor);
+	wg_peer_put(ctx->next_peer);
+	mutex_unlock(&wg->device_update_lock);
+	rtnl_unlock();
+
+	if (ret) {
+		genlmsg_cancel(skb, hdr);
+		return ret;
+	}
+	genlmsg_end(skb, hdr);
+	if (done) {
+		ctx->next_peer = NULL;
+		return 0;
+	}
+	ctx->next_peer = next_peer_cursor;
+	return skb->len;
+
+	/* At this point, we can't really deal ourselves with safely zeroing out
+	 * the private key material after usage. This will need an additional API
+	 * in the kernel for marking skbs as zero_on_free.
+	 */
+}
+
+static int wg_get_device_done(struct netlink_callback *cb)
+{
+	struct dump_ctx *ctx = DUMP_CTX(cb);
+
+	if (ctx->wg)
+		dev_put(ctx->wg->dev);
+	wg_peer_put(ctx->next_peer);
+	return 0;
+}
+
+static int set_port(struct wg_device *wg, u16 port)
+{
+	struct wg_peer *peer;
+
+	if (wg->incoming_port == port)
+		return 0;
+	list_for_each_entry(peer, &wg->peer_list, peer_list)
+		wg_socket_clear_peer_endpoint_src(peer);
+	if (!netif_running(wg->dev)) {
+		wg->incoming_port = port;
+		return 0;
+	}
+	return wg_socket_init(wg, port);
+}
+
+static int set_allowedip(struct wg_peer *peer, struct nlattr **attrs)
+{
+	int ret = -EINVAL;
+	u16 family;
+	u8 cidr;
+
+	if (!attrs[WGALLOWEDIP_A_FAMILY] || !attrs[WGALLOWEDIP_A_IPADDR] ||
+	    !attrs[WGALLOWEDIP_A_CIDR_MASK])
+		return ret;
+	family = nla_get_u16(attrs[WGALLOWEDIP_A_FAMILY]);
+	cidr = nla_get_u8(attrs[WGALLOWEDIP_A_CIDR_MASK]);
+
+	if (family == AF_INET && cidr <= 32 &&
+	    nla_len(attrs[WGALLOWEDIP_A_IPADDR]) == sizeof(struct in_addr))
+		ret = wg_allowedips_insert_v4(
+			&peer->device->peer_allowedips,
+			nla_data(attrs[WGALLOWEDIP_A_IPADDR]), cidr, peer,
+			&peer->device->device_update_lock);
+	else if (family == AF_INET6 && cidr <= 128 &&
+		 nla_len(attrs[WGALLOWEDIP_A_IPADDR]) == sizeof(struct in6_addr))
+		ret = wg_allowedips_insert_v6(
+			&peer->device->peer_allowedips,
+			nla_data(attrs[WGALLOWEDIP_A_IPADDR]), cidr, peer,
+			&peer->device->device_update_lock);
+
+	return ret;
+}
+
+static int set_peer(struct wg_device *wg, struct nlattr **attrs)
+{
+	u8 *public_key = NULL, *preshared_key = NULL;
+	struct wg_peer *peer = NULL;
+	u32 flags = 0;
+	int ret;
+
+	ret = -EINVAL;
+	if (attrs[WGPEER_A_PUBLIC_KEY] &&
+	    nla_len(attrs[WGPEER_A_PUBLIC_KEY]) == NOISE_PUBLIC_KEY_LEN)
+		public_key = nla_data(attrs[WGPEER_A_PUBLIC_KEY]);
+	else
+		goto out;
+	if (attrs[WGPEER_A_PRESHARED_KEY] &&
+	    nla_len(attrs[WGPEER_A_PRESHARED_KEY]) == NOISE_SYMMETRIC_KEY_LEN)
+		preshared_key = nla_data(attrs[WGPEER_A_PRESHARED_KEY]);
+
+	if (attrs[WGPEER_A_FLAGS])
+		flags = nla_get_u32(attrs[WGPEER_A_FLAGS]);
+	ret = -EOPNOTSUPP;
+	if (flags & ~__WGPEER_F_ALL)
+		goto out;
+
+	ret = -EPFNOSUPPORT;
+	if (attrs[WGPEER_A_PROTOCOL_VERSION]) {
+		if (nla_get_u32(attrs[WGPEER_A_PROTOCOL_VERSION]) != 1)
+			goto out;
+	}
+
+	peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable,
+					  nla_data(attrs[WGPEER_A_PUBLIC_KEY]));
+	ret = 0;
+	if (!peer) { /* Peer doesn't exist yet. Add a new one. */
+		if (flags & (WGPEER_F_REMOVE_ME | WGPEER_F_UPDATE_ONLY))
+			goto out;
+
+		/* The peer is new, so there aren't allowed IPs to remove. */
+		flags &= ~WGPEER_F_REPLACE_ALLOWEDIPS;
+
+		down_read(&wg->static_identity.lock);
+		if (wg->static_identity.has_identity &&
+		    !memcmp(nla_data(attrs[WGPEER_A_PUBLIC_KEY]),
+			    wg->static_identity.static_public,
+			    NOISE_PUBLIC_KEY_LEN)) {
+			/* We silently ignore peers that have the same public
+			 * key as the device. The reason we do it silently is
+			 * that we'd like for people to be able to reuse the
+			 * same set of API calls across peers.
+			 */
+			up_read(&wg->static_identity.lock);
+			ret = 0;
+			goto out;
+		}
+		up_read(&wg->static_identity.lock);
+
+		peer = wg_peer_create(wg, public_key, preshared_key);
+		if (IS_ERR(peer)) {
+			ret = PTR_ERR(peer);
+			peer = NULL;
+			goto out;
+		}
+		/* Take additional reference, as though we've just been
+		 * looked up.
+		 */
+		wg_peer_get(peer);
+	}
+
+	if (flags & WGPEER_F_REMOVE_ME) {
+		wg_peer_remove(peer);
+		goto out;
+	}
+
+	if (preshared_key) {
+		down_write(&peer->handshake.lock);
+		memcpy(&peer->handshake.preshared_key, preshared_key,
+		       NOISE_SYMMETRIC_KEY_LEN);
+		up_write(&peer->handshake.lock);
+	}
+
+	if (attrs[WGPEER_A_ENDPOINT]) {
+		struct sockaddr *addr = nla_data(attrs[WGPEER_A_ENDPOINT]);
+		size_t len = nla_len(attrs[WGPEER_A_ENDPOINT]);
+
+		if ((len == sizeof(struct sockaddr_in) &&
+		     addr->sa_family == AF_INET) ||
+		    (len == sizeof(struct sockaddr_in6) &&
+		     addr->sa_family == AF_INET6)) {
+			struct endpoint endpoint = { { { 0 } } };
+
+			memcpy(&endpoint.addr, addr, len);
+			wg_socket_set_peer_endpoint(peer, &endpoint);
+		}
+	}
+
+	if (flags & WGPEER_F_REPLACE_ALLOWEDIPS)
+		wg_allowedips_remove_by_peer(&wg->peer_allowedips, peer,
+					     &wg->device_update_lock);
+
+	if (attrs[WGPEER_A_ALLOWEDIPS]) {
+		struct nlattr *attr, *allowedip[WGALLOWEDIP_A_MAX + 1];
+		int rem;
+
+		nla_for_each_nested(attr, attrs[WGPEER_A_ALLOWEDIPS], rem) {
+			ret = nla_parse_nested(allowedip, WGALLOWEDIP_A_MAX,
+					       attr, allowedip_policy, NULL);
+			if (ret < 0)
+				goto out;
+			ret = set_allowedip(peer, allowedip);
+			if (ret < 0)
+				goto out;
+		}
+	}
+
+	if (attrs[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]) {
+		const u16 persistent_keepalive_interval = nla_get_u16(
+				attrs[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL]);
+		const bool send_keepalive =
+			!peer->persistent_keepalive_interval &&
+			persistent_keepalive_interval &&
+			netif_running(wg->dev);
+
+		peer->persistent_keepalive_interval = persistent_keepalive_interval;
+		if (send_keepalive)
+			wg_packet_send_keepalive(peer);
+	}
+
+	if (netif_running(wg->dev))
+		wg_packet_send_staged_packets(peer);
+
+out:
+	wg_peer_put(peer);
+	if (attrs[WGPEER_A_PRESHARED_KEY])
+		memzero_explicit(nla_data(attrs[WGPEER_A_PRESHARED_KEY]),
+				 nla_len(attrs[WGPEER_A_PRESHARED_KEY]));
+	return ret;
+}
+
+static int wg_set_device(struct sk_buff *skb, struct genl_info *info)
+{
+	struct wg_device *wg = lookup_interface(info->attrs, skb);
+	u32 flags = 0;
+	int ret;
+
+	if (IS_ERR(wg)) {
+		ret = PTR_ERR(wg);
+		goto out_nodev;
+	}
+
+	rtnl_lock();
+	mutex_lock(&wg->device_update_lock);
+
+	if (info->attrs[WGDEVICE_A_FLAGS])
+		flags = nla_get_u32(info->attrs[WGDEVICE_A_FLAGS]);
+	ret = -EOPNOTSUPP;
+	if (flags & ~__WGDEVICE_F_ALL)
+		goto out;
+
+	if (info->attrs[WGDEVICE_A_LISTEN_PORT] || info->attrs[WGDEVICE_A_FWMARK]) {
+		struct net *net;
+		rcu_read_lock();
+		net = rcu_dereference(wg->creating_net);
+		ret = !net || !ns_capable(net->user_ns, CAP_NET_ADMIN) ? -EPERM : 0;
+		rcu_read_unlock();
+		if (ret)
+			goto out;
+	}
+
+	++wg->device_update_gen;
+
+	if (info->attrs[WGDEVICE_A_FWMARK]) {
+		struct wg_peer *peer;
+
+		wg->fwmark = nla_get_u32(info->attrs[WGDEVICE_A_FWMARK]);
+		list_for_each_entry(peer, &wg->peer_list, peer_list)
+			wg_socket_clear_peer_endpoint_src(peer);
+	}
+
+	if (info->attrs[WGDEVICE_A_LISTEN_PORT]) {
+		ret = set_port(wg,
+			nla_get_u16(info->attrs[WGDEVICE_A_LISTEN_PORT]));
+		if (ret)
+			goto out;
+	}
+
+	if (flags & WGDEVICE_F_REPLACE_PEERS)
+		wg_peer_remove_all(wg);
+
+	if (info->attrs[WGDEVICE_A_PRIVATE_KEY] &&
+	    nla_len(info->attrs[WGDEVICE_A_PRIVATE_KEY]) ==
+		    NOISE_PUBLIC_KEY_LEN) {
+		u8 *private_key = nla_data(info->attrs[WGDEVICE_A_PRIVATE_KEY]);
+		u8 public_key[NOISE_PUBLIC_KEY_LEN];
+		struct wg_peer *peer, *temp;
+
+		if (!crypto_memneq(wg->static_identity.static_private,
+				   private_key, NOISE_PUBLIC_KEY_LEN))
+			goto skip_set_private_key;
+
+		/* We remove before setting, to prevent race, which means doing
+		 * two 25519-genpub ops.
+		 */
+		if (curve25519_generate_public(public_key, private_key)) {
+			peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable,
+							  public_key);
+			if (peer) {
+				wg_peer_put(peer);
+				wg_peer_remove(peer);
+			}
+		}
+
+		down_write(&wg->static_identity.lock);
+		wg_noise_set_static_identity_private_key(&wg->static_identity,
+							 private_key);
+		list_for_each_entry_safe(peer, temp, &wg->peer_list,
+					 peer_list) {
+			wg_noise_precompute_static_static(peer);
+			wg_noise_expire_current_peer_keypairs(peer);
+		}
+		wg_cookie_checker_precompute_device_keys(&wg->cookie_checker);
+		up_write(&wg->static_identity.lock);
+	}
+skip_set_private_key:
+
+	if (info->attrs[WGDEVICE_A_PEERS]) {
+		struct nlattr *attr, *peer[WGPEER_A_MAX + 1];
+		int rem;
+
+		nla_for_each_nested(attr, info->attrs[WGDEVICE_A_PEERS], rem) {
+			ret = nla_parse_nested(peer, WGPEER_A_MAX, attr,
+					       peer_policy, NULL);
+			if (ret < 0)
+				goto out;
+			ret = set_peer(wg, peer);
+			if (ret < 0)
+				goto out;
+		}
+	}
+	ret = 0;
+
+out:
+	mutex_unlock(&wg->device_update_lock);
+	rtnl_unlock();
+	dev_put(wg->dev);
+out_nodev:
+	if (info->attrs[WGDEVICE_A_PRIVATE_KEY])
+		memzero_explicit(nla_data(info->attrs[WGDEVICE_A_PRIVATE_KEY]),
+				 nla_len(info->attrs[WGDEVICE_A_PRIVATE_KEY]));
+	return ret;
+}
+
+static const struct genl_ops genl_ops[] = {
+	{
+		.cmd = WG_CMD_GET_DEVICE,
+		.start = wg_get_device_start,
+		.dumpit = wg_get_device_dump,
+		.done = wg_get_device_done,
+		.flags = GENL_UNS_ADMIN_PERM
+	}, {
+		.cmd = WG_CMD_SET_DEVICE,
+		.doit = wg_set_device,
+		.flags = GENL_UNS_ADMIN_PERM
+	}
+};
+
+static struct genl_family genl_family __ro_after_init = {
+	.ops = genl_ops,
+	.n_ops = ARRAY_SIZE(genl_ops),
+	.name = WG_GENL_NAME,
+	.version = WG_GENL_VERSION,
+	.maxattr = WGDEVICE_A_MAX,
+	.module = THIS_MODULE,
+	.policy = device_policy,
+	.netnsok = true
+};
+
+int __init wg_genetlink_init(void)
+{
+	return genl_register_family(&genl_family);
+}
+
+void __exit wg_genetlink_uninit(void)
+{
+	genl_unregister_family(&genl_family);
+}
diff --git a/drivers/net/wireguard/netlink.h b/drivers/net/wireguard/netlink.h
new file mode 100644
index 0000000..15100d9
--- /dev/null
+++ b/drivers/net/wireguard/netlink.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_NETLINK_H
+#define _WG_NETLINK_H
+
+int wg_genetlink_init(void);
+void wg_genetlink_uninit(void);
+
+#endif /* _WG_NETLINK_H */
diff --git a/drivers/net/wireguard/noise.c b/drivers/net/wireguard/noise.c
new file mode 100644
index 0000000..27cb504
--- /dev/null
+++ b/drivers/net/wireguard/noise.c
@@ -0,0 +1,828 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "noise.h"
+#include "device.h"
+#include "peer.h"
+#include "messages.h"
+#include "queueing.h"
+#include "peerlookup.h"
+
+#include <linux/rcupdate.h>
+#include <linux/slab.h>
+#include <linux/bitmap.h>
+#include <linux/scatterlist.h>
+#include <linux/highmem.h>
+#include <crypto/algapi.h>
+
+/* This implements Noise_IKpsk2:
+ *
+ * <- s
+ * ******
+ * -> e, es, s, ss, {t}
+ * <- e, ee, se, psk, {}
+ */
+
+static const u8 handshake_name[37] = "Noise_IKpsk2_25519_ChaChaPoly_BLAKE2s";
+static const u8 identifier_name[34] = "WireGuard v1 zx2c4 Jason@zx2c4.com";
+static u8 handshake_init_hash[NOISE_HASH_LEN] __ro_after_init;
+static u8 handshake_init_chaining_key[NOISE_HASH_LEN] __ro_after_init;
+static atomic64_t keypair_counter = ATOMIC64_INIT(0);
+
+void __init wg_noise_init(void)
+{
+	struct blake2s_state blake;
+
+	blake2s(handshake_init_chaining_key, handshake_name, NULL,
+		NOISE_HASH_LEN, sizeof(handshake_name), 0);
+	blake2s_init(&blake, NOISE_HASH_LEN);
+	blake2s_update(&blake, handshake_init_chaining_key, NOISE_HASH_LEN);
+	blake2s_update(&blake, identifier_name, sizeof(identifier_name));
+	blake2s_final(&blake, handshake_init_hash);
+}
+
+/* Must hold peer->handshake.static_identity->lock */
+void wg_noise_precompute_static_static(struct wg_peer *peer)
+{
+	down_write(&peer->handshake.lock);
+	if (!peer->handshake.static_identity->has_identity ||
+	    !curve25519(peer->handshake.precomputed_static_static,
+			peer->handshake.static_identity->static_private,
+			peer->handshake.remote_static))
+		memset(peer->handshake.precomputed_static_static, 0,
+		       NOISE_PUBLIC_KEY_LEN);
+	up_write(&peer->handshake.lock);
+}
+
+void wg_noise_handshake_init(struct noise_handshake *handshake,
+			     struct noise_static_identity *static_identity,
+			     const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
+			     const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
+			     struct wg_peer *peer)
+{
+	memset(handshake, 0, sizeof(*handshake));
+	init_rwsem(&handshake->lock);
+	handshake->entry.type = INDEX_HASHTABLE_HANDSHAKE;
+	handshake->entry.peer = peer;
+	memcpy(handshake->remote_static, peer_public_key, NOISE_PUBLIC_KEY_LEN);
+	if (peer_preshared_key)
+		memcpy(handshake->preshared_key, peer_preshared_key,
+		       NOISE_SYMMETRIC_KEY_LEN);
+	handshake->static_identity = static_identity;
+	handshake->state = HANDSHAKE_ZEROED;
+	wg_noise_precompute_static_static(peer);
+}
+
+static void handshake_zero(struct noise_handshake *handshake)
+{
+	memset(&handshake->ephemeral_private, 0, NOISE_PUBLIC_KEY_LEN);
+	memset(&handshake->remote_ephemeral, 0, NOISE_PUBLIC_KEY_LEN);
+	memset(&handshake->hash, 0, NOISE_HASH_LEN);
+	memset(&handshake->chaining_key, 0, NOISE_HASH_LEN);
+	handshake->remote_index = 0;
+	handshake->state = HANDSHAKE_ZEROED;
+}
+
+void wg_noise_handshake_clear(struct noise_handshake *handshake)
+{
+	down_write(&handshake->lock);
+	wg_index_hashtable_remove(
+			handshake->entry.peer->device->index_hashtable,
+			&handshake->entry);
+	handshake_zero(handshake);
+	up_write(&handshake->lock);
+}
+
+static struct noise_keypair *keypair_create(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair = kzalloc(sizeof(*keypair), GFP_KERNEL);
+
+	if (unlikely(!keypair))
+		return NULL;
+	spin_lock_init(&keypair->receiving_counter.lock);
+	keypair->internal_id = atomic64_inc_return(&keypair_counter);
+	keypair->entry.type = INDEX_HASHTABLE_KEYPAIR;
+	keypair->entry.peer = peer;
+	kref_init(&keypair->refcount);
+	return keypair;
+}
+
+static void keypair_free_rcu(struct rcu_head *rcu)
+{
+	kzfree(container_of(rcu, struct noise_keypair, rcu));
+}
+
+static void keypair_free_kref(struct kref *kref)
+{
+	struct noise_keypair *keypair =
+		container_of(kref, struct noise_keypair, refcount);
+
+	net_dbg_ratelimited("%s: Keypair %llu destroyed for peer %llu\n",
+			    keypair->entry.peer->device->dev->name,
+			    keypair->internal_id,
+			    keypair->entry.peer->internal_id);
+	wg_index_hashtable_remove(keypair->entry.peer->device->index_hashtable,
+				  &keypair->entry);
+	call_rcu(&keypair->rcu, keypair_free_rcu);
+}
+
+void wg_noise_keypair_put(struct noise_keypair *keypair, bool unreference_now)
+{
+	if (unlikely(!keypair))
+		return;
+	if (unlikely(unreference_now))
+		wg_index_hashtable_remove(
+			keypair->entry.peer->device->index_hashtable,
+			&keypair->entry);
+	kref_put(&keypair->refcount, keypair_free_kref);
+}
+
+struct noise_keypair *wg_noise_keypair_get(struct noise_keypair *keypair)
+{
+	RCU_LOCKDEP_WARN(!rcu_read_lock_bh_held(),
+		"Taking noise keypair reference without holding the RCU BH read lock");
+	if (unlikely(!keypair || !kref_get_unless_zero(&keypair->refcount)))
+		return NULL;
+	return keypair;
+}
+
+void wg_noise_keypairs_clear(struct noise_keypairs *keypairs)
+{
+	struct noise_keypair *old;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+
+	/* We zero the next_keypair before zeroing the others, so that
+	 * wg_noise_received_with_keypair returns early before subsequent ones
+	 * are zeroed.
+	 */
+	old = rcu_dereference_protected(keypairs->next_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	old = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->previous_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	old = rcu_dereference_protected(keypairs->current_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	RCU_INIT_POINTER(keypairs->current_keypair, NULL);
+	wg_noise_keypair_put(old, true);
+
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+}
+
+void wg_noise_expire_current_peer_keypairs(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+
+	wg_noise_handshake_clear(&peer->handshake);
+	wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+
+	spin_lock_bh(&peer->keypairs.keypair_update_lock);
+	keypair = rcu_dereference_protected(peer->keypairs.next_keypair,
+			lockdep_is_held(&peer->keypairs.keypair_update_lock));
+	if (keypair)
+		keypair->sending.is_valid = false;
+	keypair = rcu_dereference_protected(peer->keypairs.current_keypair,
+			lockdep_is_held(&peer->keypairs.keypair_update_lock));
+	if (keypair)
+		keypair->sending.is_valid = false;
+	spin_unlock_bh(&peer->keypairs.keypair_update_lock);
+}
+
+static void add_new_keypair(struct noise_keypairs *keypairs,
+			    struct noise_keypair *new_keypair)
+{
+	struct noise_keypair *previous_keypair, *next_keypair, *current_keypair;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+	previous_keypair = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	next_keypair = rcu_dereference_protected(keypairs->next_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	current_keypair = rcu_dereference_protected(keypairs->current_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	if (new_keypair->i_am_the_initiator) {
+		/* If we're the initiator, it means we've sent a handshake, and
+		 * received a confirmation response, which means this new
+		 * keypair can now be used.
+		 */
+		if (next_keypair) {
+			/* If there already was a next keypair pending, we
+			 * demote it to be the previous keypair, and free the
+			 * existing current. Note that this means KCI can result
+			 * in this transition. It would perhaps be more sound to
+			 * always just get rid of the unused next keypair
+			 * instead of putting it in the previous slot, but this
+			 * might be a bit less robust. Something to think about
+			 * for the future.
+			 */
+			RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+			rcu_assign_pointer(keypairs->previous_keypair,
+					   next_keypair);
+			wg_noise_keypair_put(current_keypair, true);
+		} else /* If there wasn't an existing next keypair, we replace
+			* the previous with the current one.
+			*/
+			rcu_assign_pointer(keypairs->previous_keypair,
+					   current_keypair);
+		/* At this point we can get rid of the old previous keypair, and
+		 * set up the new keypair.
+		 */
+		wg_noise_keypair_put(previous_keypair, true);
+		rcu_assign_pointer(keypairs->current_keypair, new_keypair);
+	} else {
+		/* If we're the responder, it means we can't use the new keypair
+		 * until we receive confirmation via the first data packet, so
+		 * we get rid of the existing previous one, the possibly
+		 * existing next one, and slide in the new next one.
+		 */
+		rcu_assign_pointer(keypairs->next_keypair, new_keypair);
+		wg_noise_keypair_put(next_keypair, true);
+		RCU_INIT_POINTER(keypairs->previous_keypair, NULL);
+		wg_noise_keypair_put(previous_keypair, true);
+	}
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+}
+
+bool wg_noise_received_with_keypair(struct noise_keypairs *keypairs,
+				    struct noise_keypair *received_keypair)
+{
+	struct noise_keypair *old_keypair;
+	bool key_is_new;
+
+	/* We first check without taking the spinlock. */
+	key_is_new = received_keypair ==
+		     rcu_access_pointer(keypairs->next_keypair);
+	if (likely(!key_is_new))
+		return false;
+
+	spin_lock_bh(&keypairs->keypair_update_lock);
+	/* After locking, we double check that things didn't change from
+	 * beneath us.
+	 */
+	if (unlikely(received_keypair !=
+		    rcu_dereference_protected(keypairs->next_keypair,
+			    lockdep_is_held(&keypairs->keypair_update_lock)))) {
+		spin_unlock_bh(&keypairs->keypair_update_lock);
+		return false;
+	}
+
+	/* When we've finally received the confirmation, we slide the next
+	 * into the current, the current into the previous, and get rid of
+	 * the old previous.
+	 */
+	old_keypair = rcu_dereference_protected(keypairs->previous_keypair,
+		lockdep_is_held(&keypairs->keypair_update_lock));
+	rcu_assign_pointer(keypairs->previous_keypair,
+		rcu_dereference_protected(keypairs->current_keypair,
+			lockdep_is_held(&keypairs->keypair_update_lock)));
+	wg_noise_keypair_put(old_keypair, true);
+	rcu_assign_pointer(keypairs->current_keypair, received_keypair);
+	RCU_INIT_POINTER(keypairs->next_keypair, NULL);
+
+	spin_unlock_bh(&keypairs->keypair_update_lock);
+	return true;
+}
+
+/* Must hold static_identity->lock */
+void wg_noise_set_static_identity_private_key(
+	struct noise_static_identity *static_identity,
+	const u8 private_key[NOISE_PUBLIC_KEY_LEN])
+{
+	memcpy(static_identity->static_private, private_key,
+	       NOISE_PUBLIC_KEY_LEN);
+	curve25519_clamp_secret(static_identity->static_private);
+	static_identity->has_identity = curve25519_generate_public(
+		static_identity->static_public, private_key);
+}
+
+/* This is Hugo Krawczyk's HKDF:
+ *  - https://eprint.iacr.org/2010/264.pdf
+ *  - https://tools.ietf.org/html/rfc5869
+ */
+static void kdf(u8 *first_dst, u8 *second_dst, u8 *third_dst, const u8 *data,
+		size_t first_len, size_t second_len, size_t third_len,
+		size_t data_len, const u8 chaining_key[NOISE_HASH_LEN])
+{
+	u8 output[BLAKE2S_HASH_SIZE + 1];
+	u8 secret[BLAKE2S_HASH_SIZE];
+
+	WARN_ON(IS_ENABLED(DEBUG) &&
+		(first_len > BLAKE2S_HASH_SIZE ||
+		 second_len > BLAKE2S_HASH_SIZE ||
+		 third_len > BLAKE2S_HASH_SIZE ||
+		 ((second_len || second_dst || third_len || third_dst) &&
+		  (!first_len || !first_dst)) ||
+		 ((third_len || third_dst) && (!second_len || !second_dst))));
+
+	/* Extract entropy from data into secret */
+	blake2s256_hmac(secret, data, chaining_key, data_len, NOISE_HASH_LEN);
+
+	if (!first_dst || !first_len)
+		goto out;
+
+	/* Expand first key: key = secret, data = 0x1 */
+	output[0] = 1;
+	blake2s256_hmac(output, output, secret, 1, BLAKE2S_HASH_SIZE);
+	memcpy(first_dst, output, first_len);
+
+	if (!second_dst || !second_len)
+		goto out;
+
+	/* Expand second key: key = secret, data = first-key || 0x2 */
+	output[BLAKE2S_HASH_SIZE] = 2;
+	blake2s256_hmac(output, output, secret, BLAKE2S_HASH_SIZE + 1,
+			BLAKE2S_HASH_SIZE);
+	memcpy(second_dst, output, second_len);
+
+	if (!third_dst || !third_len)
+		goto out;
+
+	/* Expand third key: key = secret, data = second-key || 0x3 */
+	output[BLAKE2S_HASH_SIZE] = 3;
+	blake2s256_hmac(output, output, secret, BLAKE2S_HASH_SIZE + 1,
+			BLAKE2S_HASH_SIZE);
+	memcpy(third_dst, output, third_len);
+
+out:
+	/* Clear sensitive data from stack */
+	memzero_explicit(secret, BLAKE2S_HASH_SIZE);
+	memzero_explicit(output, BLAKE2S_HASH_SIZE + 1);
+}
+
+static void derive_keys(struct noise_symmetric_key *first_dst,
+			struct noise_symmetric_key *second_dst,
+			const u8 chaining_key[NOISE_HASH_LEN])
+{
+	u64 birthdate = ktime_get_coarse_boottime_ns();
+	kdf(first_dst->key, second_dst->key, NULL, NULL,
+	    NOISE_SYMMETRIC_KEY_LEN, NOISE_SYMMETRIC_KEY_LEN, 0, 0,
+	    chaining_key);
+	first_dst->birthdate = second_dst->birthdate = birthdate;
+	first_dst->is_valid = second_dst->is_valid = true;
+}
+
+static bool __must_check mix_dh(u8 chaining_key[NOISE_HASH_LEN],
+				u8 key[NOISE_SYMMETRIC_KEY_LEN],
+				const u8 private[NOISE_PUBLIC_KEY_LEN],
+				const u8 public[NOISE_PUBLIC_KEY_LEN])
+{
+	u8 dh_calculation[NOISE_PUBLIC_KEY_LEN];
+
+	if (unlikely(!curve25519(dh_calculation, private, public)))
+		return false;
+	kdf(chaining_key, key, NULL, dh_calculation, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN, chaining_key);
+	memzero_explicit(dh_calculation, NOISE_PUBLIC_KEY_LEN);
+	return true;
+}
+
+static bool __must_check mix_precomputed_dh(u8 chaining_key[NOISE_HASH_LEN],
+					    u8 key[NOISE_SYMMETRIC_KEY_LEN],
+					    const u8 precomputed[NOISE_PUBLIC_KEY_LEN])
+{
+	static u8 zero_point[NOISE_PUBLIC_KEY_LEN];
+	if (unlikely(!crypto_memneq(precomputed, zero_point, NOISE_PUBLIC_KEY_LEN)))
+		return false;
+	kdf(chaining_key, key, NULL, precomputed, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, 0, NOISE_PUBLIC_KEY_LEN,
+	    chaining_key);
+	return true;
+}
+
+static void mix_hash(u8 hash[NOISE_HASH_LEN], const u8 *src, size_t src_len)
+{
+	struct blake2s_state blake;
+
+	blake2s_init(&blake, NOISE_HASH_LEN);
+	blake2s_update(&blake, hash, NOISE_HASH_LEN);
+	blake2s_update(&blake, src, src_len);
+	blake2s_final(&blake, hash);
+}
+
+static void mix_psk(u8 chaining_key[NOISE_HASH_LEN], u8 hash[NOISE_HASH_LEN],
+		    u8 key[NOISE_SYMMETRIC_KEY_LEN],
+		    const u8 psk[NOISE_SYMMETRIC_KEY_LEN])
+{
+	u8 temp_hash[NOISE_HASH_LEN];
+
+	kdf(chaining_key, temp_hash, key, psk, NOISE_HASH_LEN, NOISE_HASH_LEN,
+	    NOISE_SYMMETRIC_KEY_LEN, NOISE_SYMMETRIC_KEY_LEN, chaining_key);
+	mix_hash(hash, temp_hash, NOISE_HASH_LEN);
+	memzero_explicit(temp_hash, NOISE_HASH_LEN);
+}
+
+static void handshake_init(u8 chaining_key[NOISE_HASH_LEN],
+			   u8 hash[NOISE_HASH_LEN],
+			   const u8 remote_static[NOISE_PUBLIC_KEY_LEN])
+{
+	memcpy(hash, handshake_init_hash, NOISE_HASH_LEN);
+	memcpy(chaining_key, handshake_init_chaining_key, NOISE_HASH_LEN);
+	mix_hash(hash, remote_static, NOISE_PUBLIC_KEY_LEN);
+}
+
+static void message_encrypt(u8 *dst_ciphertext, const u8 *src_plaintext,
+			    size_t src_len, u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			    u8 hash[NOISE_HASH_LEN])
+{
+	chacha20poly1305_encrypt(dst_ciphertext, src_plaintext, src_len, hash,
+				 NOISE_HASH_LEN,
+				 0 /* Always zero for Noise_IK */, key);
+	mix_hash(hash, dst_ciphertext, noise_encrypted_len(src_len));
+}
+
+static bool message_decrypt(u8 *dst_plaintext, const u8 *src_ciphertext,
+			    size_t src_len, u8 key[NOISE_SYMMETRIC_KEY_LEN],
+			    u8 hash[NOISE_HASH_LEN])
+{
+	if (!chacha20poly1305_decrypt(dst_plaintext, src_ciphertext, src_len,
+				      hash, NOISE_HASH_LEN,
+				      0 /* Always zero for Noise_IK */, key))
+		return false;
+	mix_hash(hash, src_ciphertext, src_len);
+	return true;
+}
+
+static void message_ephemeral(u8 ephemeral_dst[NOISE_PUBLIC_KEY_LEN],
+			      const u8 ephemeral_src[NOISE_PUBLIC_KEY_LEN],
+			      u8 chaining_key[NOISE_HASH_LEN],
+			      u8 hash[NOISE_HASH_LEN])
+{
+	if (ephemeral_dst != ephemeral_src)
+		memcpy(ephemeral_dst, ephemeral_src, NOISE_PUBLIC_KEY_LEN);
+	mix_hash(hash, ephemeral_src, NOISE_PUBLIC_KEY_LEN);
+	kdf(chaining_key, NULL, NULL, ephemeral_src, NOISE_HASH_LEN, 0, 0,
+	    NOISE_PUBLIC_KEY_LEN, chaining_key);
+}
+
+static void tai64n_now(u8 output[NOISE_TIMESTAMP_LEN])
+{
+	struct timespec64 now;
+
+	ktime_get_real_ts64(&now);
+
+	/* In order to prevent some sort of infoleak from precise timers, we
+	 * round down the nanoseconds part to the closest rounded-down power of
+	 * two to the maximum initiations per second allowed anyway by the
+	 * implementation.
+	 */
+	now.tv_nsec = ALIGN_DOWN(now.tv_nsec,
+		rounddown_pow_of_two(NSEC_PER_SEC / INITIATIONS_PER_SECOND));
+
+	/* https://cr.yp.to/libtai/tai64.html */
+	*(__be64 *)output = cpu_to_be64(0x400000000000000aULL + now.tv_sec);
+	*(__be32 *)(output + sizeof(__be64)) = cpu_to_be32(now.tv_nsec);
+}
+
+bool
+wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,
+				     struct noise_handshake *handshake)
+{
+	u8 timestamp[NOISE_TIMESTAMP_LEN];
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	bool ret = false;
+
+	/* We need to wait for crng _before_ taking any locks, since
+	 * curve25519_generate_secret uses get_random_bytes_wait.
+	 */
+	wait_for_random_bytes();
+
+	down_read(&handshake->static_identity->lock);
+	down_write(&handshake->lock);
+
+	if (unlikely(!handshake->static_identity->has_identity))
+		goto out;
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION);
+
+	handshake_init(handshake->chaining_key, handshake->hash,
+		       handshake->remote_static);
+
+	/* e */
+	curve25519_generate_secret(handshake->ephemeral_private);
+	if (!curve25519_generate_public(dst->unencrypted_ephemeral,
+					handshake->ephemeral_private))
+		goto out;
+	message_ephemeral(dst->unencrypted_ephemeral,
+			  dst->unencrypted_ephemeral, handshake->chaining_key,
+			  handshake->hash);
+
+	/* es */
+	if (!mix_dh(handshake->chaining_key, key, handshake->ephemeral_private,
+		    handshake->remote_static))
+		goto out;
+
+	/* s */
+	message_encrypt(dst->encrypted_static,
+			handshake->static_identity->static_public,
+			NOISE_PUBLIC_KEY_LEN, key, handshake->hash);
+
+	/* ss */
+	if (!mix_precomputed_dh(handshake->chaining_key, key,
+				handshake->precomputed_static_static))
+		goto out;
+
+	/* {t} */
+	tai64n_now(timestamp);
+	message_encrypt(dst->encrypted_timestamp, timestamp,
+			NOISE_TIMESTAMP_LEN, key, handshake->hash);
+
+	dst->sender_index = wg_index_hashtable_insert(
+		handshake->entry.peer->device->index_hashtable,
+		&handshake->entry);
+
+	handshake->state = HANDSHAKE_CREATED_INITIATION;
+	ret = true;
+
+out:
+	up_write(&handshake->lock);
+	up_read(&handshake->static_identity->lock);
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	return ret;
+}
+
+struct wg_peer *
+wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src,
+				      struct wg_device *wg)
+{
+	struct wg_peer *peer = NULL, *ret_peer = NULL;
+	struct noise_handshake *handshake;
+	bool replay_attack, flood_attack;
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+	u8 hash[NOISE_HASH_LEN];
+	u8 s[NOISE_PUBLIC_KEY_LEN];
+	u8 e[NOISE_PUBLIC_KEY_LEN];
+	u8 t[NOISE_TIMESTAMP_LEN];
+	u64 initiation_consumption;
+
+	down_read(&wg->static_identity.lock);
+	if (unlikely(!wg->static_identity.has_identity))
+		goto out;
+
+	handshake_init(chaining_key, hash, wg->static_identity.static_public);
+
+	/* e */
+	message_ephemeral(e, src->unencrypted_ephemeral, chaining_key, hash);
+
+	/* es */
+	if (!mix_dh(chaining_key, key, wg->static_identity.static_private, e))
+		goto out;
+
+	/* s */
+	if (!message_decrypt(s, src->encrypted_static,
+			     sizeof(src->encrypted_static), key, hash))
+		goto out;
+
+	/* Lookup which peer we're actually talking to */
+	peer = wg_pubkey_hashtable_lookup(wg->peer_hashtable, s);
+	if (!peer)
+		goto out;
+	handshake = &peer->handshake;
+
+	/* ss */
+	if (!mix_precomputed_dh(chaining_key, key,
+				handshake->precomputed_static_static))
+	    goto out;
+
+	/* {t} */
+	if (!message_decrypt(t, src->encrypted_timestamp,
+			     sizeof(src->encrypted_timestamp), key, hash))
+		goto out;
+
+	down_read(&handshake->lock);
+	replay_attack = memcmp(t, handshake->latest_timestamp,
+			       NOISE_TIMESTAMP_LEN) <= 0;
+	flood_attack = (s64)handshake->last_initiation_consumption +
+			       NSEC_PER_SEC / INITIATIONS_PER_SECOND >
+		       (s64)ktime_get_coarse_boottime_ns();
+	up_read(&handshake->lock);
+	if (replay_attack || flood_attack)
+		goto out;
+
+	/* Success! Copy everything to peer */
+	down_write(&handshake->lock);
+	memcpy(handshake->remote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);
+	if (memcmp(t, handshake->latest_timestamp, NOISE_TIMESTAMP_LEN) > 0)
+		memcpy(handshake->latest_timestamp, t, NOISE_TIMESTAMP_LEN);
+	memcpy(handshake->hash, hash, NOISE_HASH_LEN);
+	memcpy(handshake->chaining_key, chaining_key, NOISE_HASH_LEN);
+	handshake->remote_index = src->sender_index;
+	initiation_consumption = ktime_get_coarse_boottime_ns();
+	if ((s64)(handshake->last_initiation_consumption - initiation_consumption) < 0)
+		handshake->last_initiation_consumption = initiation_consumption;
+	handshake->state = HANDSHAKE_CONSUMED_INITIATION;
+	up_write(&handshake->lock);
+	ret_peer = peer;
+
+out:
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	memzero_explicit(hash, NOISE_HASH_LEN);
+	memzero_explicit(chaining_key, NOISE_HASH_LEN);
+	up_read(&wg->static_identity.lock);
+	if (!ret_peer)
+		wg_peer_put(peer);
+	return ret_peer;
+}
+
+bool wg_noise_handshake_create_response(struct message_handshake_response *dst,
+					struct noise_handshake *handshake)
+{
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	bool ret = false;
+
+	/* We need to wait for crng _before_ taking any locks, since
+	 * curve25519_generate_secret uses get_random_bytes_wait.
+	 */
+	wait_for_random_bytes();
+
+	down_read(&handshake->static_identity->lock);
+	down_write(&handshake->lock);
+
+	if (handshake->state != HANDSHAKE_CONSUMED_INITIATION)
+		goto out;
+
+	dst->header.type = cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE);
+	dst->receiver_index = handshake->remote_index;
+
+	/* e */
+	curve25519_generate_secret(handshake->ephemeral_private);
+	if (!curve25519_generate_public(dst->unencrypted_ephemeral,
+					handshake->ephemeral_private))
+		goto out;
+	message_ephemeral(dst->unencrypted_ephemeral,
+			  dst->unencrypted_ephemeral, handshake->chaining_key,
+			  handshake->hash);
+
+	/* ee */
+	if (!mix_dh(handshake->chaining_key, NULL, handshake->ephemeral_private,
+		    handshake->remote_ephemeral))
+		goto out;
+
+	/* se */
+	if (!mix_dh(handshake->chaining_key, NULL, handshake->ephemeral_private,
+		    handshake->remote_static))
+		goto out;
+
+	/* psk */
+	mix_psk(handshake->chaining_key, handshake->hash, key,
+		handshake->preshared_key);
+
+	/* {} */
+	message_encrypt(dst->encrypted_nothing, NULL, 0, key, handshake->hash);
+
+	dst->sender_index = wg_index_hashtable_insert(
+		handshake->entry.peer->device->index_hashtable,
+		&handshake->entry);
+
+	handshake->state = HANDSHAKE_CREATED_RESPONSE;
+	ret = true;
+
+out:
+	up_write(&handshake->lock);
+	up_read(&handshake->static_identity->lock);
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	return ret;
+}
+
+struct wg_peer *
+wg_noise_handshake_consume_response(struct message_handshake_response *src,
+				    struct wg_device *wg)
+{
+	enum noise_handshake_state state = HANDSHAKE_ZEROED;
+	struct wg_peer *peer = NULL, *ret_peer = NULL;
+	struct noise_handshake *handshake;
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u8 hash[NOISE_HASH_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+	u8 e[NOISE_PUBLIC_KEY_LEN];
+	u8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];
+	u8 static_private[NOISE_PUBLIC_KEY_LEN];
+	u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN];
+
+	down_read(&wg->static_identity.lock);
+
+	if (unlikely(!wg->static_identity.has_identity))
+		goto out;
+
+	handshake = (struct noise_handshake *)wg_index_hashtable_lookup(
+		wg->index_hashtable, INDEX_HASHTABLE_HANDSHAKE,
+		src->receiver_index, &peer);
+	if (unlikely(!handshake))
+		goto out;
+
+	down_read(&handshake->lock);
+	state = handshake->state;
+	memcpy(hash, handshake->hash, NOISE_HASH_LEN);
+	memcpy(chaining_key, handshake->chaining_key, NOISE_HASH_LEN);
+	memcpy(ephemeral_private, handshake->ephemeral_private,
+	       NOISE_PUBLIC_KEY_LEN);
+	memcpy(preshared_key, handshake->preshared_key,
+	       NOISE_SYMMETRIC_KEY_LEN);
+	up_read(&handshake->lock);
+
+	if (state != HANDSHAKE_CREATED_INITIATION)
+		goto fail;
+
+	/* e */
+	message_ephemeral(e, src->unencrypted_ephemeral, chaining_key, hash);
+
+	/* ee */
+	if (!mix_dh(chaining_key, NULL, ephemeral_private, e))
+		goto fail;
+
+	/* se */
+	if (!mix_dh(chaining_key, NULL, wg->static_identity.static_private, e))
+		goto fail;
+
+	/* psk */
+	mix_psk(chaining_key, hash, key, preshared_key);
+
+	/* {} */
+	if (!message_decrypt(NULL, src->encrypted_nothing,
+			     sizeof(src->encrypted_nothing), key, hash))
+		goto fail;
+
+	/* Success! Copy everything to peer */
+	down_write(&handshake->lock);
+	/* It's important to check that the state is still the same, while we
+	 * have an exclusive lock.
+	 */
+	if (handshake->state != state) {
+		up_write(&handshake->lock);
+		goto fail;
+	}
+	memcpy(handshake->remote_ephemeral, e, NOISE_PUBLIC_KEY_LEN);
+	memcpy(handshake->hash, hash, NOISE_HASH_LEN);
+	memcpy(handshake->chaining_key, chaining_key, NOISE_HASH_LEN);
+	handshake->remote_index = src->sender_index;
+	handshake->state = HANDSHAKE_CONSUMED_RESPONSE;
+	up_write(&handshake->lock);
+	ret_peer = peer;
+	goto out;
+
+fail:
+	wg_peer_put(peer);
+out:
+	memzero_explicit(key, NOISE_SYMMETRIC_KEY_LEN);
+	memzero_explicit(hash, NOISE_HASH_LEN);
+	memzero_explicit(chaining_key, NOISE_HASH_LEN);
+	memzero_explicit(ephemeral_private, NOISE_PUBLIC_KEY_LEN);
+	memzero_explicit(static_private, NOISE_PUBLIC_KEY_LEN);
+	memzero_explicit(preshared_key, NOISE_SYMMETRIC_KEY_LEN);
+	up_read(&wg->static_identity.lock);
+	return ret_peer;
+}
+
+bool wg_noise_handshake_begin_session(struct noise_handshake *handshake,
+				      struct noise_keypairs *keypairs)
+{
+	struct noise_keypair *new_keypair;
+	bool ret = false;
+
+	down_write(&handshake->lock);
+	if (handshake->state != HANDSHAKE_CREATED_RESPONSE &&
+	    handshake->state != HANDSHAKE_CONSUMED_RESPONSE)
+		goto out;
+
+	new_keypair = keypair_create(handshake->entry.peer);
+	if (!new_keypair)
+		goto out;
+	new_keypair->i_am_the_initiator = handshake->state ==
+					  HANDSHAKE_CONSUMED_RESPONSE;
+	new_keypair->remote_index = handshake->remote_index;
+
+	if (new_keypair->i_am_the_initiator)
+		derive_keys(&new_keypair->sending, &new_keypair->receiving,
+			    handshake->chaining_key);
+	else
+		derive_keys(&new_keypair->receiving, &new_keypair->sending,
+			    handshake->chaining_key);
+
+	handshake_zero(handshake);
+	rcu_read_lock_bh();
+	if (likely(!READ_ONCE(container_of(handshake, struct wg_peer,
+					   handshake)->is_dead))) {
+		add_new_keypair(keypairs, new_keypair);
+		net_dbg_ratelimited("%s: Keypair %llu created for peer %llu\n",
+				    handshake->entry.peer->device->dev->name,
+				    new_keypair->internal_id,
+				    handshake->entry.peer->internal_id);
+		ret = wg_index_hashtable_replace(
+			handshake->entry.peer->device->index_hashtable,
+			&handshake->entry, &new_keypair->entry);
+	} else {
+		kzfree(new_keypair);
+	}
+	rcu_read_unlock_bh();
+
+out:
+	up_write(&handshake->lock);
+	return ret;
+}
diff --git a/drivers/net/wireguard/noise.h b/drivers/net/wireguard/noise.h
new file mode 100644
index 0000000..c527253
--- /dev/null
+++ b/drivers/net/wireguard/noise.h
@@ -0,0 +1,135 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+#ifndef _WG_NOISE_H
+#define _WG_NOISE_H
+
+#include "messages.h"
+#include "peerlookup.h"
+
+#include <linux/types.h>
+#include <linux/spinlock.h>
+#include <linux/atomic.h>
+#include <linux/rwsem.h>
+#include <linux/mutex.h>
+#include <linux/kref.h>
+
+struct noise_replay_counter {
+	u64 counter;
+	spinlock_t lock;
+	unsigned long backtrack[COUNTER_BITS_TOTAL / BITS_PER_LONG];
+};
+
+struct noise_symmetric_key {
+	u8 key[NOISE_SYMMETRIC_KEY_LEN];
+	u64 birthdate;
+	bool is_valid;
+};
+
+struct noise_keypair {
+	struct index_hashtable_entry entry;
+	struct noise_symmetric_key sending;
+	atomic64_t sending_counter;
+	struct noise_symmetric_key receiving;
+	struct noise_replay_counter receiving_counter;
+	__le32 remote_index;
+	bool i_am_the_initiator;
+	struct kref refcount;
+	struct rcu_head rcu;
+	u64 internal_id;
+};
+
+struct noise_keypairs {
+	struct noise_keypair __rcu *current_keypair;
+	struct noise_keypair __rcu *previous_keypair;
+	struct noise_keypair __rcu *next_keypair;
+	spinlock_t keypair_update_lock;
+};
+
+struct noise_static_identity {
+	u8 static_public[NOISE_PUBLIC_KEY_LEN];
+	u8 static_private[NOISE_PUBLIC_KEY_LEN];
+	struct rw_semaphore lock;
+	bool has_identity;
+};
+
+enum noise_handshake_state {
+	HANDSHAKE_ZEROED,
+	HANDSHAKE_CREATED_INITIATION,
+	HANDSHAKE_CONSUMED_INITIATION,
+	HANDSHAKE_CREATED_RESPONSE,
+	HANDSHAKE_CONSUMED_RESPONSE
+};
+
+struct noise_handshake {
+	struct index_hashtable_entry entry;
+
+	enum noise_handshake_state state;
+	u64 last_initiation_consumption;
+
+	struct noise_static_identity *static_identity;
+
+	u8 ephemeral_private[NOISE_PUBLIC_KEY_LEN];
+	u8 remote_static[NOISE_PUBLIC_KEY_LEN];
+	u8 remote_ephemeral[NOISE_PUBLIC_KEY_LEN];
+	u8 precomputed_static_static[NOISE_PUBLIC_KEY_LEN];
+
+	u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN];
+
+	u8 hash[NOISE_HASH_LEN];
+	u8 chaining_key[NOISE_HASH_LEN];
+
+	u8 latest_timestamp[NOISE_TIMESTAMP_LEN];
+	__le32 remote_index;
+
+	/* Protects all members except the immutable (after noise_handshake_
+	 * init): remote_static, precomputed_static_static, static_identity.
+	 */
+	struct rw_semaphore lock;
+};
+
+struct wg_device;
+
+void wg_noise_init(void);
+void wg_noise_handshake_init(struct noise_handshake *handshake,
+			     struct noise_static_identity *static_identity,
+			     const u8 peer_public_key[NOISE_PUBLIC_KEY_LEN],
+			     const u8 peer_preshared_key[NOISE_SYMMETRIC_KEY_LEN],
+			     struct wg_peer *peer);
+void wg_noise_handshake_clear(struct noise_handshake *handshake);
+static inline void wg_noise_reset_last_sent_handshake(atomic64_t *handshake_ns)
+{
+	atomic64_set(handshake_ns, ktime_get_coarse_boottime_ns() -
+				       (u64)(REKEY_TIMEOUT + 1) * NSEC_PER_SEC);
+}
+
+void wg_noise_keypair_put(struct noise_keypair *keypair, bool unreference_now);
+struct noise_keypair *wg_noise_keypair_get(struct noise_keypair *keypair);
+void wg_noise_keypairs_clear(struct noise_keypairs *keypairs);
+bool wg_noise_received_with_keypair(struct noise_keypairs *keypairs,
+				    struct noise_keypair *received_keypair);
+void wg_noise_expire_current_peer_keypairs(struct wg_peer *peer);
+
+void wg_noise_set_static_identity_private_key(
+	struct noise_static_identity *static_identity,
+	const u8 private_key[NOISE_PUBLIC_KEY_LEN]);
+void wg_noise_precompute_static_static(struct wg_peer *peer);
+
+bool
+wg_noise_handshake_create_initiation(struct message_handshake_initiation *dst,
+				     struct noise_handshake *handshake);
+struct wg_peer *
+wg_noise_handshake_consume_initiation(struct message_handshake_initiation *src,
+				      struct wg_device *wg);
+
+bool wg_noise_handshake_create_response(struct message_handshake_response *dst,
+					struct noise_handshake *handshake);
+struct wg_peer *
+wg_noise_handshake_consume_response(struct message_handshake_response *src,
+				    struct wg_device *wg);
+
+bool wg_noise_handshake_begin_session(struct noise_handshake *handshake,
+				      struct noise_keypairs *keypairs);
+
+#endif /* _WG_NOISE_H */
diff --git a/drivers/net/wireguard/peer.c b/drivers/net/wireguard/peer.c
new file mode 100644
index 0000000..1acd00a
--- /dev/null
+++ b/drivers/net/wireguard/peer.c
@@ -0,0 +1,240 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "peer.h"
+#include "device.h"
+#include "queueing.h"
+#include "timers.h"
+#include "peerlookup.h"
+#include "noise.h"
+
+#include <linux/kref.h>
+#include <linux/lockdep.h>
+#include <linux/rcupdate.h>
+#include <linux/list.h>
+
+static struct kmem_cache *peer_cache;
+static atomic64_t peer_counter = ATOMIC64_INIT(0);
+
+struct wg_peer *wg_peer_create(struct wg_device *wg,
+			       const u8 public_key[NOISE_PUBLIC_KEY_LEN],
+			       const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN])
+{
+	struct wg_peer *peer;
+	int ret = -ENOMEM;
+
+	lockdep_assert_held(&wg->device_update_lock);
+
+	if (wg->num_peers >= MAX_PEERS_PER_DEVICE)
+		return ERR_PTR(ret);
+
+	peer = kmem_cache_zalloc(peer_cache, GFP_KERNEL);
+	if (unlikely(!peer))
+		return ERR_PTR(ret);
+	if (unlikely(dst_cache_init(&peer->endpoint_cache, GFP_KERNEL)))
+		goto err;
+
+	peer->device = wg;
+	wg_noise_handshake_init(&peer->handshake, &wg->static_identity,
+				public_key, preshared_key, peer);
+	peer->internal_id = atomic64_inc_return(&peer_counter);
+	peer->serial_work_cpu = nr_cpumask_bits;
+	wg_cookie_init(&peer->latest_cookie);
+	wg_timers_init(peer);
+	wg_cookie_checker_precompute_peer_keys(peer);
+	spin_lock_init(&peer->keypairs.keypair_update_lock);
+	INIT_WORK(&peer->transmit_handshake_work, wg_packet_handshake_send_worker);
+	INIT_WORK(&peer->transmit_packet_work, wg_packet_tx_worker);
+	wg_prev_queue_init(&peer->tx_queue);
+	wg_prev_queue_init(&peer->rx_queue);
+	rwlock_init(&peer->endpoint_lock);
+	kref_init(&peer->refcount);
+	skb_queue_head_init(&peer->staged_packet_queue);
+	wg_noise_reset_last_sent_handshake(&peer->last_sent_handshake);
+	set_bit(NAPI_STATE_NO_BUSY_POLL, &peer->napi.state);
+	netif_napi_add(wg->dev, &peer->napi, wg_packet_rx_poll,
+		       NAPI_POLL_WEIGHT);
+	napi_enable(&peer->napi);
+	list_add_tail(&peer->peer_list, &wg->peer_list);
+	INIT_LIST_HEAD(&peer->allowedips_list);
+	wg_pubkey_hashtable_add(wg->peer_hashtable, peer);
+	++wg->num_peers;
+	pr_debug("%s: Peer %llu created\n", wg->dev->name, peer->internal_id);
+	return peer;
+
+err:
+	kmem_cache_free(peer_cache, peer);
+	return ERR_PTR(ret);
+}
+
+struct wg_peer *wg_peer_get_maybe_zero(struct wg_peer *peer)
+{
+	RCU_LOCKDEP_WARN(!rcu_read_lock_bh_held(),
+			 "Taking peer reference without holding the RCU read lock");
+	if (unlikely(!peer || !kref_get_unless_zero(&peer->refcount)))
+		return NULL;
+	return peer;
+}
+
+static void peer_make_dead(struct wg_peer *peer)
+{
+	/* Remove from configuration-time lookup structures. */
+	list_del_init(&peer->peer_list);
+	wg_allowedips_remove_by_peer(&peer->device->peer_allowedips, peer,
+				     &peer->device->device_update_lock);
+	wg_pubkey_hashtable_remove(peer->device->peer_hashtable, peer);
+
+	/* Mark as dead, so that we don't allow jumping contexts after. */
+	WRITE_ONCE(peer->is_dead, true);
+
+	/* The caller must now synchronize_net() for this to take effect. */
+}
+
+static void peer_remove_after_dead(struct wg_peer *peer)
+{
+	WARN_ON(!peer->is_dead);
+
+	/* No more keypairs can be created for this peer, since is_dead protects
+	 * add_new_keypair, so we can now destroy existing ones.
+	 */
+	wg_noise_keypairs_clear(&peer->keypairs);
+
+	/* Destroy all ongoing timers that were in-flight at the beginning of
+	 * this function.
+	 */
+	wg_timers_stop(peer);
+
+	/* The transition between packet encryption/decryption queues isn't
+	 * guarded by is_dead, but each reference's life is strictly bounded by
+	 * two generations: once for parallel crypto and once for serial
+	 * ingestion, so we can simply flush twice, and be sure that we no
+	 * longer have references inside these queues.
+	 */
+
+	/* a) For encrypt/decrypt. */
+	flush_workqueue(peer->device->packet_crypt_wq);
+	/* b.1) For send (but not receive, since that's napi). */
+	flush_workqueue(peer->device->packet_crypt_wq);
+	/* b.2.1) For receive (but not send, since that's wq). */
+	napi_disable(&peer->napi);
+	/* b.2.1) It's now safe to remove the napi struct, which must be done
+	 * here from process context.
+	 */
+	netif_napi_del(&peer->napi);
+
+	/* Ensure any workstructs we own (like transmit_handshake_work or
+	 * clear_peer_work) no longer are in use.
+	 */
+	flush_workqueue(peer->device->handshake_send_wq);
+
+	/* After the above flushes, a peer might still be active in a few
+	 * different contexts: 1) from xmit(), before hitting is_dead and
+	 * returning, 2) from wg_packet_consume_data(), before hitting is_dead
+	 * and returning, 3) from wg_receive_handshake_packet() after a point
+	 * where it has processed an incoming handshake packet, but where
+	 * all calls to pass it off to timers fails because of is_dead. We won't
+	 * have new references in (1) eventually, because we're removed from
+	 * allowedips; we won't have new references in (2) eventually, because
+	 * wg_index_hashtable_lookup will always return NULL, since we removed
+	 * all existing keypairs and no more can be created; we won't have new
+	 * references in (3) eventually, because we're removed from the pubkey
+	 * hash table, which allows for a maximum of one handshake response,
+	 * via the still-uncleared index hashtable entry, but not more than one,
+	 * and in wg_cookie_message_consume, the lookup eventually gets a peer
+	 * with a refcount of zero, so no new reference is taken.
+	 */
+
+	--peer->device->num_peers;
+	wg_peer_put(peer);
+}
+
+/* We have a separate "remove" function make sure that all active places where
+ * a peer is currently operating will eventually come to an end and not pass
+ * their reference onto another context.
+ */
+void wg_peer_remove(struct wg_peer *peer)
+{
+	if (unlikely(!peer))
+		return;
+	lockdep_assert_held(&peer->device->device_update_lock);
+
+	peer_make_dead(peer);
+	synchronize_net();
+	peer_remove_after_dead(peer);
+}
+
+void wg_peer_remove_all(struct wg_device *wg)
+{
+	struct wg_peer *peer, *temp;
+	LIST_HEAD(dead_peers);
+
+	lockdep_assert_held(&wg->device_update_lock);
+
+	/* Avoid having to traverse individually for each one. */
+	wg_allowedips_free(&wg->peer_allowedips, &wg->device_update_lock);
+
+	list_for_each_entry_safe(peer, temp, &wg->peer_list, peer_list) {
+		peer_make_dead(peer);
+		list_add_tail(&peer->peer_list, &dead_peers);
+	}
+	synchronize_net();
+	list_for_each_entry_safe(peer, temp, &dead_peers, peer_list)
+		peer_remove_after_dead(peer);
+}
+
+static void rcu_release(struct rcu_head *rcu)
+{
+	struct wg_peer *peer = container_of(rcu, struct wg_peer, rcu);
+
+	dst_cache_destroy(&peer->endpoint_cache);
+	WARN_ON(wg_prev_queue_peek(&peer->tx_queue) || wg_prev_queue_peek(&peer->rx_queue));
+
+	/* The final zeroing takes care of clearing any remaining handshake key
+	 * material and other potentially sensitive information.
+	 */
+	memzero_explicit(peer, sizeof(*peer));
+	kmem_cache_free(peer_cache, peer);
+}
+
+static void kref_release(struct kref *refcount)
+{
+	struct wg_peer *peer = container_of(refcount, struct wg_peer, refcount);
+
+	pr_debug("%s: Peer %llu (%pISpfsc) destroyed\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr);
+
+	/* Remove ourself from dynamic runtime lookup structures, now that the
+	 * last reference is gone.
+	 */
+	wg_index_hashtable_remove(peer->device->index_hashtable,
+				  &peer->handshake.entry);
+
+	/* Remove any lingering packets that didn't have a chance to be
+	 * transmitted.
+	 */
+	wg_packet_purge_staged_packets(peer);
+
+	/* Free the memory used. */
+	call_rcu(&peer->rcu, rcu_release);
+}
+
+void wg_peer_put(struct wg_peer *peer)
+{
+	if (unlikely(!peer))
+		return;
+	kref_put(&peer->refcount, kref_release);
+}
+
+int __init wg_peer_init(void)
+{
+	peer_cache = KMEM_CACHE(wg_peer, 0);
+	return peer_cache ? 0 : -ENOMEM;
+}
+
+void wg_peer_uninit(void)
+{
+	kmem_cache_destroy(peer_cache);
+}
diff --git a/drivers/net/wireguard/peer.h b/drivers/net/wireguard/peer.h
new file mode 100644
index 0000000..74227aa
--- /dev/null
+++ b/drivers/net/wireguard/peer.h
@@ -0,0 +1,86 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_PEER_H
+#define _WG_PEER_H
+
+#include "device.h"
+#include "noise.h"
+#include "cookie.h"
+
+#include <linux/types.h>
+#include <linux/netfilter.h>
+#include <linux/spinlock.h>
+#include <linux/kref.h>
+#include <net/dst_cache.h>
+
+struct wg_device;
+
+struct endpoint {
+	union {
+		struct sockaddr addr;
+		struct sockaddr_in addr4;
+		struct sockaddr_in6 addr6;
+	};
+	union {
+		struct {
+			struct in_addr src4;
+			/* Essentially the same as addr6->scope_id */
+			int src_if4;
+		};
+		struct in6_addr src6;
+	};
+};
+
+struct wg_peer {
+	struct wg_device *device;
+	struct prev_queue tx_queue, rx_queue;
+	struct sk_buff_head staged_packet_queue;
+	int serial_work_cpu;
+	struct noise_keypairs keypairs;
+	struct endpoint endpoint;
+	struct dst_cache endpoint_cache;
+	rwlock_t endpoint_lock;
+	struct noise_handshake handshake;
+	atomic64_t last_sent_handshake;
+	struct work_struct transmit_handshake_work, clear_peer_work, transmit_packet_work;
+	struct cookie latest_cookie;
+	struct hlist_node pubkey_hash;
+	u64 rx_bytes, tx_bytes;
+	struct timer_list timer_retransmit_handshake, timer_send_keepalive;
+	struct timer_list timer_new_handshake, timer_zero_key_material;
+	struct timer_list timer_persistent_keepalive;
+	unsigned int timer_handshake_attempts;
+	u16 persistent_keepalive_interval;
+	bool timer_need_another_keepalive;
+	bool sent_lastminute_handshake;
+	struct timespec64 walltime_last_handshake;
+	struct kref refcount;
+	struct rcu_head rcu;
+	struct list_head peer_list;
+	struct list_head allowedips_list;
+	u64 internal_id;
+	struct napi_struct napi;
+	bool is_dead;
+};
+
+struct wg_peer *wg_peer_create(struct wg_device *wg,
+			       const u8 public_key[NOISE_PUBLIC_KEY_LEN],
+			       const u8 preshared_key[NOISE_SYMMETRIC_KEY_LEN]);
+
+struct wg_peer *__must_check wg_peer_get_maybe_zero(struct wg_peer *peer);
+static inline struct wg_peer *wg_peer_get(struct wg_peer *peer)
+{
+	kref_get(&peer->refcount);
+	return peer;
+}
+void wg_peer_put(struct wg_peer *peer);
+void wg_peer_remove(struct wg_peer *peer);
+void wg_peer_remove_all(struct wg_device *wg);
+
+int wg_peer_init(void);
+void wg_peer_uninit(void);
+
+#endif /* _WG_PEER_H */
diff --git a/drivers/net/wireguard/peerlookup.c b/drivers/net/wireguard/peerlookup.c
new file mode 100644
index 0000000..f2783aa
--- /dev/null
+++ b/drivers/net/wireguard/peerlookup.c
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "peerlookup.h"
+#include "peer.h"
+#include "noise.h"
+
+static struct hlist_head *pubkey_bucket(struct pubkey_hashtable *table,
+					const u8 pubkey[NOISE_PUBLIC_KEY_LEN])
+{
+	/* siphash gives us a secure 64bit number based on a random key. Since
+	 * the bits are uniformly distributed, we can then mask off to get the
+	 * bits we need.
+	 */
+	const u64 hash = siphash(pubkey, NOISE_PUBLIC_KEY_LEN, &table->key);
+
+	return &table->hashtable[hash & (HASH_SIZE(table->hashtable) - 1)];
+}
+
+struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void)
+{
+	struct pubkey_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+
+	if (!table)
+		return NULL;
+
+	get_random_bytes(&table->key, sizeof(table->key));
+	hash_init(table->hashtable);
+	mutex_init(&table->lock);
+	return table;
+}
+
+void wg_pubkey_hashtable_add(struct pubkey_hashtable *table,
+			     struct wg_peer *peer)
+{
+	mutex_lock(&table->lock);
+	hlist_add_head_rcu(&peer->pubkey_hash,
+			   pubkey_bucket(table, peer->handshake.remote_static));
+	mutex_unlock(&table->lock);
+}
+
+void wg_pubkey_hashtable_remove(struct pubkey_hashtable *table,
+				struct wg_peer *peer)
+{
+	mutex_lock(&table->lock);
+	hlist_del_init_rcu(&peer->pubkey_hash);
+	mutex_unlock(&table->lock);
+}
+
+/* Returns a strong reference to a peer */
+struct wg_peer *
+wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN])
+{
+	struct wg_peer *iter_peer, *peer = NULL;
+
+	rcu_read_lock_bh();
+	hlist_for_each_entry_rcu_bh(iter_peer, pubkey_bucket(table, pubkey),
+				    pubkey_hash) {
+		if (!memcmp(pubkey, iter_peer->handshake.remote_static,
+			    NOISE_PUBLIC_KEY_LEN)) {
+			peer = iter_peer;
+			break;
+		}
+	}
+	peer = wg_peer_get_maybe_zero(peer);
+	rcu_read_unlock_bh();
+	return peer;
+}
+
+static struct hlist_head *index_bucket(struct index_hashtable *table,
+				       const __le32 index)
+{
+	/* Since the indices are random and thus all bits are uniformly
+	 * distributed, we can find its bucket simply by masking.
+	 */
+	return &table->hashtable[(__force u32)index &
+				 (HASH_SIZE(table->hashtable) - 1)];
+}
+
+struct index_hashtable *wg_index_hashtable_alloc(void)
+{
+	struct index_hashtable *table = kvmalloc(sizeof(*table), GFP_KERNEL);
+
+	if (!table)
+		return NULL;
+
+	hash_init(table->hashtable);
+	spin_lock_init(&table->lock);
+	return table;
+}
+
+/* At the moment, we limit ourselves to 2^20 total peers, which generally might
+ * amount to 2^20*3 items in this hashtable. The algorithm below works by
+ * picking a random number and testing it. We can see that these limits mean we
+ * usually succeed pretty quickly:
+ *
+ * >>> def calculation(tries, size):
+ * ...     return (size / 2**32)**(tries - 1) *  (1 - (size / 2**32))
+ * ...
+ * >>> calculation(1, 2**20 * 3)
+ * 0.999267578125
+ * >>> calculation(2, 2**20 * 3)
+ * 0.0007318854331970215
+ * >>> calculation(3, 2**20 * 3)
+ * 5.360489012673497e-07
+ * >>> calculation(4, 2**20 * 3)
+ * 3.9261394135792216e-10
+ *
+ * At the moment, we don't do any masking, so this algorithm isn't exactly
+ * constant time in either the random guessing or in the hash list lookup. We
+ * could require a minimum of 3 tries, which would successfully mask the
+ * guessing. this would not, however, help with the growing hash lengths, which
+ * is another thing to consider moving forward.
+ */
+
+__le32 wg_index_hashtable_insert(struct index_hashtable *table,
+				 struct index_hashtable_entry *entry)
+{
+	struct index_hashtable_entry *existing_entry;
+
+	spin_lock_bh(&table->lock);
+	hlist_del_init_rcu(&entry->index_hash);
+	spin_unlock_bh(&table->lock);
+
+	rcu_read_lock_bh();
+
+search_unused_slot:
+	/* First we try to find an unused slot, randomly, while unlocked. */
+	entry->index = (__force __le32)get_random_u32();
+	hlist_for_each_entry_rcu_bh(existing_entry,
+				    index_bucket(table, entry->index),
+				    index_hash) {
+		if (existing_entry->index == entry->index)
+			/* If it's already in use, we continue searching. */
+			goto search_unused_slot;
+	}
+
+	/* Once we've found an unused slot, we lock it, and then double-check
+	 * that nobody else stole it from us.
+	 */
+	spin_lock_bh(&table->lock);
+	hlist_for_each_entry_rcu_bh(existing_entry,
+				    index_bucket(table, entry->index),
+				    index_hash) {
+		if (existing_entry->index == entry->index) {
+			spin_unlock_bh(&table->lock);
+			/* If it was stolen, we start over. */
+			goto search_unused_slot;
+		}
+	}
+	/* Otherwise, we know we have it exclusively (since we're locked),
+	 * so we insert.
+	 */
+	hlist_add_head_rcu(&entry->index_hash,
+			   index_bucket(table, entry->index));
+	spin_unlock_bh(&table->lock);
+
+	rcu_read_unlock_bh();
+
+	return entry->index;
+}
+
+bool wg_index_hashtable_replace(struct index_hashtable *table,
+				struct index_hashtable_entry *old,
+				struct index_hashtable_entry *new)
+{
+	bool ret;
+
+	spin_lock_bh(&table->lock);
+	ret = !hlist_unhashed(&old->index_hash);
+	if (unlikely(!ret))
+		goto out;
+
+	new->index = old->index;
+	hlist_replace_rcu(&old->index_hash, &new->index_hash);
+
+	/* Calling init here NULLs out index_hash, and in fact after this
+	 * function returns, it's theoretically possible for this to get
+	 * reinserted elsewhere. That means the RCU lookup below might either
+	 * terminate early or jump between buckets, in which case the packet
+	 * simply gets dropped, which isn't terrible.
+	 */
+	INIT_HLIST_NODE(&old->index_hash);
+out:
+	spin_unlock_bh(&table->lock);
+	return ret;
+}
+
+void wg_index_hashtable_remove(struct index_hashtable *table,
+			       struct index_hashtable_entry *entry)
+{
+	spin_lock_bh(&table->lock);
+	hlist_del_init_rcu(&entry->index_hash);
+	spin_unlock_bh(&table->lock);
+}
+
+/* Returns a strong reference to a entry->peer */
+struct index_hashtable_entry *
+wg_index_hashtable_lookup(struct index_hashtable *table,
+			  const enum index_hashtable_type type_mask,
+			  const __le32 index, struct wg_peer **peer)
+{
+	struct index_hashtable_entry *iter_entry, *entry = NULL;
+
+	rcu_read_lock_bh();
+	hlist_for_each_entry_rcu_bh(iter_entry, index_bucket(table, index),
+				    index_hash) {
+		if (iter_entry->index == index) {
+			if (likely(iter_entry->type & type_mask))
+				entry = iter_entry;
+			break;
+		}
+	}
+	if (likely(entry)) {
+		entry->peer = wg_peer_get_maybe_zero(entry->peer);
+		if (likely(entry->peer))
+			*peer = entry->peer;
+		else
+			entry = NULL;
+	}
+	rcu_read_unlock_bh();
+	return entry;
+}
diff --git a/drivers/net/wireguard/peerlookup.h b/drivers/net/wireguard/peerlookup.h
new file mode 100644
index 0000000..ced8117
--- /dev/null
+++ b/drivers/net/wireguard/peerlookup.h
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_PEERLOOKUP_H
+#define _WG_PEERLOOKUP_H
+
+#include "messages.h"
+
+#include <linux/hashtable.h>
+#include <linux/mutex.h>
+#include <linux/siphash.h>
+
+struct wg_peer;
+
+struct pubkey_hashtable {
+	/* TODO: move to rhashtable */
+	DECLARE_HASHTABLE(hashtable, 11);
+	siphash_key_t key;
+	struct mutex lock;
+};
+
+struct pubkey_hashtable *wg_pubkey_hashtable_alloc(void);
+void wg_pubkey_hashtable_add(struct pubkey_hashtable *table,
+			     struct wg_peer *peer);
+void wg_pubkey_hashtable_remove(struct pubkey_hashtable *table,
+				struct wg_peer *peer);
+struct wg_peer *
+wg_pubkey_hashtable_lookup(struct pubkey_hashtable *table,
+			   const u8 pubkey[NOISE_PUBLIC_KEY_LEN]);
+
+struct index_hashtable {
+	/* TODO: move to rhashtable */
+	DECLARE_HASHTABLE(hashtable, 13);
+	spinlock_t lock;
+};
+
+enum index_hashtable_type {
+	INDEX_HASHTABLE_HANDSHAKE = 1U << 0,
+	INDEX_HASHTABLE_KEYPAIR = 1U << 1
+};
+
+struct index_hashtable_entry {
+	struct wg_peer *peer;
+	struct hlist_node index_hash;
+	enum index_hashtable_type type;
+	__le32 index;
+};
+
+struct index_hashtable *wg_index_hashtable_alloc(void);
+__le32 wg_index_hashtable_insert(struct index_hashtable *table,
+				 struct index_hashtable_entry *entry);
+bool wg_index_hashtable_replace(struct index_hashtable *table,
+				struct index_hashtable_entry *old,
+				struct index_hashtable_entry *new);
+void wg_index_hashtable_remove(struct index_hashtable *table,
+			       struct index_hashtable_entry *entry);
+struct index_hashtable_entry *
+wg_index_hashtable_lookup(struct index_hashtable *table,
+			  const enum index_hashtable_type type_mask,
+			  const __le32 index, struct wg_peer **peer);
+
+#endif /* _WG_PEERLOOKUP_H */
diff --git a/drivers/net/wireguard/queueing.c b/drivers/net/wireguard/queueing.c
new file mode 100644
index 0000000..48e7b98
--- /dev/null
+++ b/drivers/net/wireguard/queueing.c
@@ -0,0 +1,107 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+
+struct multicore_worker __percpu *
+wg_packet_percpu_multicore_worker_alloc(work_func_t function, void *ptr)
+{
+	int cpu;
+	struct multicore_worker __percpu *worker = alloc_percpu(struct multicore_worker);
+
+	if (!worker)
+		return NULL;
+
+	for_each_possible_cpu(cpu) {
+		per_cpu_ptr(worker, cpu)->ptr = ptr;
+		INIT_WORK(&per_cpu_ptr(worker, cpu)->work, function);
+	}
+	return worker;
+}
+
+int wg_packet_queue_init(struct crypt_queue *queue, work_func_t function,
+			 unsigned int len)
+{
+	int ret;
+
+	memset(queue, 0, sizeof(*queue));
+	ret = ptr_ring_init(&queue->ring, len, GFP_KERNEL);
+	if (ret)
+		return ret;
+	queue->worker = wg_packet_percpu_multicore_worker_alloc(function, queue);
+	if (!queue->worker) {
+		ptr_ring_cleanup(&queue->ring, NULL);
+		return -ENOMEM;
+	}
+	return 0;
+}
+
+void wg_packet_queue_free(struct crypt_queue *queue)
+{
+	free_percpu(queue->worker);
+	WARN_ON(!__ptr_ring_empty(&queue->ring));
+	ptr_ring_cleanup(&queue->ring, NULL);
+}
+
+#define NEXT(skb) ((skb)->prev)
+#define STUB(queue) ((struct sk_buff *)&queue->empty)
+
+void wg_prev_queue_init(struct prev_queue *queue)
+{
+	NEXT(STUB(queue)) = NULL;
+	queue->head = queue->tail = STUB(queue);
+	queue->peeked = NULL;
+	atomic_set(&queue->count, 0);
+	BUILD_BUG_ON(
+		offsetof(struct sk_buff, next) != offsetof(struct prev_queue, empty.next) -
+							offsetof(struct prev_queue, empty) ||
+		offsetof(struct sk_buff, prev) != offsetof(struct prev_queue, empty.prev) -
+							 offsetof(struct prev_queue, empty));
+}
+
+static void __wg_prev_queue_enqueue(struct prev_queue *queue, struct sk_buff *skb)
+{
+	WRITE_ONCE(NEXT(skb), NULL);
+	WRITE_ONCE(NEXT(xchg_release(&queue->head, skb)), skb);
+}
+
+bool wg_prev_queue_enqueue(struct prev_queue *queue, struct sk_buff *skb)
+{
+	if (!atomic_add_unless(&queue->count, 1, MAX_QUEUED_PACKETS))
+		return false;
+	__wg_prev_queue_enqueue(queue, skb);
+	return true;
+}
+
+struct sk_buff *wg_prev_queue_dequeue(struct prev_queue *queue)
+{
+	struct sk_buff *tail = queue->tail, *next = smp_load_acquire(&NEXT(tail));
+
+	if (tail == STUB(queue)) {
+		if (!next)
+			return NULL;
+		queue->tail = next;
+		tail = next;
+		next = smp_load_acquire(&NEXT(next));
+	}
+	if (next) {
+		queue->tail = next;
+		atomic_dec(&queue->count);
+		return tail;
+	}
+	if (tail != READ_ONCE(queue->head))
+		return NULL;
+	__wg_prev_queue_enqueue(queue, STUB(queue));
+	next = smp_load_acquire(&NEXT(tail));
+	if (next) {
+		queue->tail = next;
+		atomic_dec(&queue->count);
+		return tail;
+	}
+	return NULL;
+}
+
+#undef NEXT
+#undef STUB
diff --git a/drivers/net/wireguard/queueing.h b/drivers/net/wireguard/queueing.h
new file mode 100644
index 0000000..4ef2944
--- /dev/null
+++ b/drivers/net/wireguard/queueing.h
@@ -0,0 +1,214 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_QUEUEING_H
+#define _WG_QUEUEING_H
+
+#include "peer.h"
+#include <linux/types.h>
+#include <linux/skbuff.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <net/ip_tunnels.h>
+
+struct wg_device;
+struct wg_peer;
+struct multicore_worker;
+struct crypt_queue;
+struct prev_queue;
+struct sk_buff;
+
+/* queueing.c APIs: */
+int wg_packet_queue_init(struct crypt_queue *queue, work_func_t function,
+			 unsigned int len);
+void wg_packet_queue_free(struct crypt_queue *queue);
+struct multicore_worker __percpu *
+wg_packet_percpu_multicore_worker_alloc(work_func_t function, void *ptr);
+
+/* receive.c APIs: */
+void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb);
+void wg_packet_handshake_receive_worker(struct work_struct *work);
+/* NAPI poll function: */
+int wg_packet_rx_poll(struct napi_struct *napi, int budget);
+/* Workqueue worker: */
+void wg_packet_decrypt_worker(struct work_struct *work);
+
+/* send.c APIs: */
+void wg_packet_send_queued_handshake_initiation(struct wg_peer *peer,
+						bool is_retry);
+void wg_packet_send_handshake_response(struct wg_peer *peer);
+void wg_packet_send_handshake_cookie(struct wg_device *wg,
+				     struct sk_buff *initiating_skb,
+				     __le32 sender_index);
+void wg_packet_send_keepalive(struct wg_peer *peer);
+void wg_packet_purge_staged_packets(struct wg_peer *peer);
+void wg_packet_send_staged_packets(struct wg_peer *peer);
+/* Workqueue workers: */
+void wg_packet_handshake_send_worker(struct work_struct *work);
+void wg_packet_tx_worker(struct work_struct *work);
+void wg_packet_encrypt_worker(struct work_struct *work);
+
+enum packet_state {
+	PACKET_STATE_UNCRYPTED,
+	PACKET_STATE_CRYPTED,
+	PACKET_STATE_DEAD
+};
+
+struct packet_cb {
+	u64 nonce;
+	struct noise_keypair *keypair;
+	atomic_t state;
+	u32 mtu;
+	u8 ds;
+};
+
+#define PACKET_CB(skb) ((struct packet_cb *)((skb)->cb))
+#define PACKET_PEER(skb) (PACKET_CB(skb)->keypair->entry.peer)
+
+static inline bool wg_check_packet_protocol(struct sk_buff *skb)
+{
+	__be16 real_protocol = ip_tunnel_parse_protocol(skb);
+	return real_protocol && skb->protocol == real_protocol;
+}
+
+static inline void wg_reset_packet(struct sk_buff *skb, bool encapsulating)
+{
+	u8 l4_hash = skb->l4_hash;
+	u8 sw_hash = skb->sw_hash;
+	u32 hash = skb->hash;
+	skb_scrub_packet(skb, true);
+	memset(&skb->headers_start, 0,
+	       offsetof(struct sk_buff, headers_end) -
+		       offsetof(struct sk_buff, headers_start));
+	if (encapsulating) {
+		skb->l4_hash = l4_hash;
+		skb->sw_hash = sw_hash;
+		skb->hash = hash;
+	}
+	skb->queue_mapping = 0;
+	skb->nohdr = 0;
+	skb->peeked = 0;
+	skb->mac_len = 0;
+	skb->dev = NULL;
+#ifdef CONFIG_NET_SCHED
+	skb->tc_index = 0;
+#endif
+	skb_reset_redirect(skb);
+	skb->hdr_len = skb_headroom(skb);
+	skb_reset_mac_header(skb);
+	skb_reset_network_header(skb);
+	skb_reset_transport_header(skb);
+	skb_probe_transport_header(skb);
+	skb_reset_inner_headers(skb);
+}
+
+static inline int wg_cpumask_choose_online(int *stored_cpu, unsigned int id)
+{
+	unsigned int cpu = *stored_cpu, cpu_index, i;
+
+	if (unlikely(cpu == nr_cpumask_bits ||
+		     !cpumask_test_cpu(cpu, cpu_online_mask))) {
+		cpu_index = id % cpumask_weight(cpu_online_mask);
+		cpu = cpumask_first(cpu_online_mask);
+		for (i = 0; i < cpu_index; ++i)
+			cpu = cpumask_next(cpu, cpu_online_mask);
+		*stored_cpu = cpu;
+	}
+	return cpu;
+}
+
+/* This function is racy, in the sense that next is unlocked, so it could return
+ * the same CPU twice. A race-free version of this would be to instead store an
+ * atomic sequence number, do an increment-and-return, and then iterate through
+ * every possible CPU until we get to that index -- choose_cpu. However that's
+ * a bit slower, and it doesn't seem like this potential race actually
+ * introduces any performance loss, so we live with it.
+ */
+static inline int wg_cpumask_next_online(int *next)
+{
+	int cpu = *next;
+
+	while (unlikely(!cpumask_test_cpu(cpu, cpu_online_mask)))
+		cpu = cpumask_next(cpu, cpu_online_mask) % nr_cpumask_bits;
+	*next = cpumask_next(cpu, cpu_online_mask) % nr_cpumask_bits;
+	return cpu;
+}
+
+void wg_prev_queue_init(struct prev_queue *queue);
+
+/* Multi producer */
+bool wg_prev_queue_enqueue(struct prev_queue *queue, struct sk_buff *skb);
+
+/* Single consumer */
+struct sk_buff *wg_prev_queue_dequeue(struct prev_queue *queue);
+
+/* Single consumer */
+static inline struct sk_buff *wg_prev_queue_peek(struct prev_queue *queue)
+{
+	if (queue->peeked)
+		return queue->peeked;
+	queue->peeked = wg_prev_queue_dequeue(queue);
+	return queue->peeked;
+}
+
+/* Single consumer */
+static inline void wg_prev_queue_drop_peeked(struct prev_queue *queue)
+{
+	queue->peeked = NULL;
+}
+
+static inline int wg_queue_enqueue_per_device_and_peer(
+	struct crypt_queue *device_queue, struct prev_queue *peer_queue,
+	struct sk_buff *skb, struct workqueue_struct *wq, int *next_cpu)
+{
+	int cpu;
+
+	atomic_set_release(&PACKET_CB(skb)->state, PACKET_STATE_UNCRYPTED);
+	/* We first queue this up for the peer ingestion, but the consumer
+	 * will wait for the state to change to CRYPTED or DEAD before.
+	 */
+	if (unlikely(!wg_prev_queue_enqueue(peer_queue, skb)))
+		return -ENOSPC;
+
+	/* Then we queue it up in the device queue, which consumes the
+	 * packet as soon as it can.
+	 */
+	cpu = wg_cpumask_next_online(next_cpu);
+	if (unlikely(ptr_ring_produce_bh(&device_queue->ring, skb)))
+		return -EPIPE;
+	queue_work_on(cpu, wq, &per_cpu_ptr(device_queue->worker, cpu)->work);
+	return 0;
+}
+
+static inline void wg_queue_enqueue_per_peer_tx(struct sk_buff *skb, enum packet_state state)
+{
+	/* We take a reference, because as soon as we call atomic_set, the
+	 * peer can be freed from below us.
+	 */
+	struct wg_peer *peer = wg_peer_get(PACKET_PEER(skb));
+
+	atomic_set_release(&PACKET_CB(skb)->state, state);
+	queue_work_on(wg_cpumask_choose_online(&peer->serial_work_cpu, peer->internal_id),
+		      peer->device->packet_crypt_wq, &peer->transmit_packet_work);
+	wg_peer_put(peer);
+}
+
+static inline void wg_queue_enqueue_per_peer_rx(struct sk_buff *skb, enum packet_state state)
+{
+	/* We take a reference, because as soon as we call atomic_set, the
+	 * peer can be freed from below us.
+	 */
+	struct wg_peer *peer = wg_peer_get(PACKET_PEER(skb));
+
+	atomic_set_release(&PACKET_CB(skb)->state, state);
+	napi_schedule(&peer->napi);
+	wg_peer_put(peer);
+}
+
+#ifdef DEBUG
+bool wg_packet_counter_selftest(void);
+#endif
+
+#endif /* _WG_QUEUEING_H */
diff --git a/drivers/net/wireguard/ratelimiter.c b/drivers/net/wireguard/ratelimiter.c
new file mode 100644
index 0000000..3fedd1d
--- /dev/null
+++ b/drivers/net/wireguard/ratelimiter.c
@@ -0,0 +1,223 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "ratelimiter.h"
+#include <linux/siphash.h>
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <net/ip.h>
+
+static struct kmem_cache *entry_cache;
+static hsiphash_key_t key;
+static spinlock_t table_lock = __SPIN_LOCK_UNLOCKED("ratelimiter_table_lock");
+static DEFINE_MUTEX(init_lock);
+static u64 init_refcnt; /* Protected by init_lock, hence not atomic. */
+static atomic_t total_entries = ATOMIC_INIT(0);
+static unsigned int max_entries, table_size;
+static void wg_ratelimiter_gc_entries(struct work_struct *);
+static DECLARE_DEFERRABLE_WORK(gc_work, wg_ratelimiter_gc_entries);
+static struct hlist_head *table_v4;
+#if IS_ENABLED(CONFIG_IPV6)
+static struct hlist_head *table_v6;
+#endif
+
+struct ratelimiter_entry {
+	u64 last_time_ns, tokens, ip;
+	void *net;
+	spinlock_t lock;
+	struct hlist_node hash;
+	struct rcu_head rcu;
+};
+
+enum {
+	PACKETS_PER_SECOND = 20,
+	PACKETS_BURSTABLE = 5,
+	PACKET_COST = NSEC_PER_SEC / PACKETS_PER_SECOND,
+	TOKEN_MAX = PACKET_COST * PACKETS_BURSTABLE
+};
+
+static void entry_free(struct rcu_head *rcu)
+{
+	kmem_cache_free(entry_cache,
+			container_of(rcu, struct ratelimiter_entry, rcu));
+	atomic_dec(&total_entries);
+}
+
+static void entry_uninit(struct ratelimiter_entry *entry)
+{
+	hlist_del_rcu(&entry->hash);
+	call_rcu(&entry->rcu, entry_free);
+}
+
+/* Calling this function with a NULL work uninits all entries. */
+static void wg_ratelimiter_gc_entries(struct work_struct *work)
+{
+	const u64 now = ktime_get_coarse_boottime_ns();
+	struct ratelimiter_entry *entry;
+	struct hlist_node *temp;
+	unsigned int i;
+
+	for (i = 0; i < table_size; ++i) {
+		spin_lock(&table_lock);
+		hlist_for_each_entry_safe(entry, temp, &table_v4[i], hash) {
+			if (unlikely(!work) ||
+			    now - entry->last_time_ns > NSEC_PER_SEC)
+				entry_uninit(entry);
+		}
+#if IS_ENABLED(CONFIG_IPV6)
+		hlist_for_each_entry_safe(entry, temp, &table_v6[i], hash) {
+			if (unlikely(!work) ||
+			    now - entry->last_time_ns > NSEC_PER_SEC)
+				entry_uninit(entry);
+		}
+#endif
+		spin_unlock(&table_lock);
+		if (likely(work))
+			cond_resched();
+	}
+	if (likely(work))
+		queue_delayed_work(system_power_efficient_wq, &gc_work, HZ);
+}
+
+bool wg_ratelimiter_allow(struct sk_buff *skb, struct net *net)
+{
+	/* We only take the bottom half of the net pointer, so that we can hash
+	 * 3 words in the end. This way, siphash's len param fits into the final
+	 * u32, and we don't incur an extra round.
+	 */
+	const u32 net_word = (unsigned long)net;
+	struct ratelimiter_entry *entry;
+	struct hlist_head *bucket;
+	u64 ip;
+
+	if (skb->protocol == htons(ETH_P_IP)) {
+		ip = (u64 __force)ip_hdr(skb)->saddr;
+		bucket = &table_v4[hsiphash_2u32(net_word, ip, &key) &
+				   (table_size - 1)];
+	}
+#if IS_ENABLED(CONFIG_IPV6)
+	else if (skb->protocol == htons(ETH_P_IPV6)) {
+		/* Only use 64 bits, so as to ratelimit the whole /64. */
+		memcpy(&ip, &ipv6_hdr(skb)->saddr, sizeof(ip));
+		bucket = &table_v6[hsiphash_3u32(net_word, ip >> 32, ip, &key) &
+				   (table_size - 1)];
+	}
+#endif
+	else
+		return false;
+	rcu_read_lock();
+	hlist_for_each_entry_rcu(entry, bucket, hash) {
+		if (entry->net == net && entry->ip == ip) {
+			u64 now, tokens;
+			bool ret;
+			/* Quasi-inspired by nft_limit.c, but this is actually a
+			 * slightly different algorithm. Namely, we incorporate
+			 * the burst as part of the maximum tokens, rather than
+			 * as part of the rate.
+			 */
+			spin_lock(&entry->lock);
+			now = ktime_get_coarse_boottime_ns();
+			tokens = min_t(u64, TOKEN_MAX,
+				       entry->tokens + now -
+					       entry->last_time_ns);
+			entry->last_time_ns = now;
+			ret = tokens >= PACKET_COST;
+			entry->tokens = ret ? tokens - PACKET_COST : tokens;
+			spin_unlock(&entry->lock);
+			rcu_read_unlock();
+			return ret;
+		}
+	}
+	rcu_read_unlock();
+
+	if (atomic_inc_return(&total_entries) > max_entries)
+		goto err_oom;
+
+	entry = kmem_cache_alloc(entry_cache, GFP_KERNEL);
+	if (unlikely(!entry))
+		goto err_oom;
+
+	entry->net = net;
+	entry->ip = ip;
+	INIT_HLIST_NODE(&entry->hash);
+	spin_lock_init(&entry->lock);
+	entry->last_time_ns = ktime_get_coarse_boottime_ns();
+	entry->tokens = TOKEN_MAX - PACKET_COST;
+	spin_lock(&table_lock);
+	hlist_add_head_rcu(&entry->hash, bucket);
+	spin_unlock(&table_lock);
+	return true;
+
+err_oom:
+	atomic_dec(&total_entries);
+	return false;
+}
+
+int wg_ratelimiter_init(void)
+{
+	mutex_lock(&init_lock);
+	if (++init_refcnt != 1)
+		goto out;
+
+	entry_cache = KMEM_CACHE(ratelimiter_entry, 0);
+	if (!entry_cache)
+		goto err;
+
+	/* xt_hashlimit.c uses a slightly different algorithm for ratelimiting,
+	 * but what it shares in common is that it uses a massive hashtable. So,
+	 * we borrow their wisdom about good table sizes on different systems
+	 * dependent on RAM. This calculation here comes from there.
+	 */
+	table_size = (totalram_pages() > (1U << 30) / PAGE_SIZE) ? 8192 :
+		max_t(unsigned long, 16, roundup_pow_of_two(
+			(totalram_pages() << PAGE_SHIFT) /
+			(1U << 14) / sizeof(struct hlist_head)));
+	max_entries = table_size * 8;
+
+	table_v4 = kvzalloc(table_size * sizeof(*table_v4), GFP_KERNEL);
+	if (unlikely(!table_v4))
+		goto err_kmemcache;
+
+#if IS_ENABLED(CONFIG_IPV6)
+	table_v6 = kvzalloc(table_size * sizeof(*table_v6), GFP_KERNEL);
+	if (unlikely(!table_v6)) {
+		kvfree(table_v4);
+		goto err_kmemcache;
+	}
+#endif
+
+	queue_delayed_work(system_power_efficient_wq, &gc_work, HZ);
+	get_random_bytes(&key, sizeof(key));
+out:
+	mutex_unlock(&init_lock);
+	return 0;
+
+err_kmemcache:
+	kmem_cache_destroy(entry_cache);
+err:
+	--init_refcnt;
+	mutex_unlock(&init_lock);
+	return -ENOMEM;
+}
+
+void wg_ratelimiter_uninit(void)
+{
+	mutex_lock(&init_lock);
+	if (!init_refcnt || --init_refcnt)
+		goto out;
+
+	cancel_delayed_work_sync(&gc_work);
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+	kvfree(table_v4);
+#if IS_ENABLED(CONFIG_IPV6)
+	kvfree(table_v6);
+#endif
+	kmem_cache_destroy(entry_cache);
+out:
+	mutex_unlock(&init_lock);
+}
+
+#include "selftest/ratelimiter.c"
diff --git a/drivers/net/wireguard/ratelimiter.h b/drivers/net/wireguard/ratelimiter.h
new file mode 100644
index 0000000..83067f7
--- /dev/null
+++ b/drivers/net/wireguard/ratelimiter.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_RATELIMITER_H
+#define _WG_RATELIMITER_H
+
+#include <linux/skbuff.h>
+
+int wg_ratelimiter_init(void);
+void wg_ratelimiter_uninit(void);
+bool wg_ratelimiter_allow(struct sk_buff *skb, struct net *net);
+
+#ifdef DEBUG
+bool wg_ratelimiter_selftest(void);
+#endif
+
+#endif /* _WG_RATELIMITER_H */
diff --git a/drivers/net/wireguard/receive.c b/drivers/net/wireguard/receive.c
new file mode 100644
index 0000000..7dc84bc
--- /dev/null
+++ b/drivers/net/wireguard/receive.c
@@ -0,0 +1,586 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "device.h"
+#include "peer.h"
+#include "timers.h"
+#include "messages.h"
+#include "cookie.h"
+#include "socket.h"
+
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/udp.h>
+#include <net/ip_tunnels.h>
+
+/* Must be called with bh disabled. */
+static void update_rx_stats(struct wg_peer *peer, size_t len)
+{
+	struct pcpu_sw_netstats *tstats =
+		get_cpu_ptr(peer->device->dev->tstats);
+
+	u64_stats_update_begin(&tstats->syncp);
+	++tstats->rx_packets;
+	tstats->rx_bytes += len;
+	peer->rx_bytes += len;
+	u64_stats_update_end(&tstats->syncp);
+	put_cpu_ptr(tstats);
+}
+
+#define SKB_TYPE_LE32(skb) (((struct message_header *)(skb)->data)->type)
+
+static size_t validate_header_len(struct sk_buff *skb)
+{
+	if (unlikely(skb->len < sizeof(struct message_header)))
+		return 0;
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_DATA) &&
+	    skb->len >= MESSAGE_MINIMUM_LENGTH)
+		return sizeof(struct message_data);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION) &&
+	    skb->len == sizeof(struct message_handshake_initiation))
+		return sizeof(struct message_handshake_initiation);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE) &&
+	    skb->len == sizeof(struct message_handshake_response))
+		return sizeof(struct message_handshake_response);
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE) &&
+	    skb->len == sizeof(struct message_handshake_cookie))
+		return sizeof(struct message_handshake_cookie);
+	return 0;
+}
+
+static int prepare_skb_header(struct sk_buff *skb, struct wg_device *wg)
+{
+	size_t data_offset, data_len, header_len;
+	struct udphdr *udp;
+
+	if (unlikely(!wg_check_packet_protocol(skb) ||
+		     skb_transport_header(skb) < skb->head ||
+		     (skb_transport_header(skb) + sizeof(struct udphdr)) >
+			     skb_tail_pointer(skb)))
+		return -EINVAL; /* Bogus IP header */
+	udp = udp_hdr(skb);
+	data_offset = (u8 *)udp - skb->data;
+	if (unlikely(data_offset > U16_MAX ||
+		     data_offset + sizeof(struct udphdr) > skb->len))
+		/* Packet has offset at impossible location or isn't big enough
+		 * to have UDP fields.
+		 */
+		return -EINVAL;
+	data_len = ntohs(udp->len);
+	if (unlikely(data_len < sizeof(struct udphdr) ||
+		     data_len > skb->len - data_offset))
+		/* UDP packet is reporting too small of a size or lying about
+		 * its size.
+		 */
+		return -EINVAL;
+	data_len -= sizeof(struct udphdr);
+	data_offset = (u8 *)udp + sizeof(struct udphdr) - skb->data;
+	if (unlikely(!pskb_may_pull(skb,
+				data_offset + sizeof(struct message_header)) ||
+		     pskb_trim(skb, data_len + data_offset) < 0))
+		return -EINVAL;
+	skb_pull(skb, data_offset);
+	if (unlikely(skb->len != data_len))
+		/* Final len does not agree with calculated len */
+		return -EINVAL;
+	header_len = validate_header_len(skb);
+	if (unlikely(!header_len))
+		return -EINVAL;
+	__skb_push(skb, data_offset);
+	if (unlikely(!pskb_may_pull(skb, data_offset + header_len)))
+		return -EINVAL;
+	__skb_pull(skb, data_offset);
+	return 0;
+}
+
+static void wg_receive_handshake_packet(struct wg_device *wg,
+					struct sk_buff *skb)
+{
+	enum cookie_mac_state mac_state;
+	struct wg_peer *peer = NULL;
+	/* This is global, so that our load calculation applies to the whole
+	 * system. We don't care about races with it at all.
+	 */
+	static u64 last_under_load;
+	bool packet_needs_cookie;
+	bool under_load;
+
+	if (SKB_TYPE_LE32(skb) == cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE)) {
+		net_dbg_skb_ratelimited("%s: Receiving cookie response from %pISpfsc\n",
+					wg->dev->name, skb);
+		wg_cookie_message_consume(
+			(struct message_handshake_cookie *)skb->data, wg);
+		return;
+	}
+
+	under_load = skb_queue_len(&wg->incoming_handshakes) >=
+		     MAX_QUEUED_INCOMING_HANDSHAKES / 8;
+	if (under_load) {
+		last_under_load = ktime_get_coarse_boottime_ns();
+	} else if (last_under_load) {
+		under_load = !wg_birthdate_has_expired(last_under_load, 1);
+		if (!under_load)
+			last_under_load = 0;
+	}
+	mac_state = wg_cookie_validate_packet(&wg->cookie_checker, skb,
+					      under_load);
+	if ((under_load && mac_state == VALID_MAC_WITH_COOKIE) ||
+	    (!under_load && mac_state == VALID_MAC_BUT_NO_COOKIE)) {
+		packet_needs_cookie = false;
+	} else if (under_load && mac_state == VALID_MAC_BUT_NO_COOKIE) {
+		packet_needs_cookie = true;
+	} else {
+		net_dbg_skb_ratelimited("%s: Invalid MAC of handshake, dropping packet from %pISpfsc\n",
+					wg->dev->name, skb);
+		return;
+	}
+
+	switch (SKB_TYPE_LE32(skb)) {
+	case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION): {
+		struct message_handshake_initiation *message =
+			(struct message_handshake_initiation *)skb->data;
+
+		if (packet_needs_cookie) {
+			wg_packet_send_handshake_cookie(wg, skb,
+							message->sender_index);
+			return;
+		}
+		peer = wg_noise_handshake_consume_initiation(message, wg);
+		if (unlikely(!peer)) {
+			net_dbg_skb_ratelimited("%s: Invalid handshake initiation from %pISpfsc\n",
+						wg->dev->name, skb);
+			return;
+		}
+		wg_socket_set_peer_endpoint_from_skb(peer, skb);
+		net_dbg_ratelimited("%s: Receiving handshake initiation from peer %llu (%pISpfsc)\n",
+				    wg->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		wg_packet_send_handshake_response(peer);
+		break;
+	}
+	case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE): {
+		struct message_handshake_response *message =
+			(struct message_handshake_response *)skb->data;
+
+		if (packet_needs_cookie) {
+			wg_packet_send_handshake_cookie(wg, skb,
+							message->sender_index);
+			return;
+		}
+		peer = wg_noise_handshake_consume_response(message, wg);
+		if (unlikely(!peer)) {
+			net_dbg_skb_ratelimited("%s: Invalid handshake response from %pISpfsc\n",
+						wg->dev->name, skb);
+			return;
+		}
+		wg_socket_set_peer_endpoint_from_skb(peer, skb);
+		net_dbg_ratelimited("%s: Receiving handshake response from peer %llu (%pISpfsc)\n",
+				    wg->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		if (wg_noise_handshake_begin_session(&peer->handshake,
+						     &peer->keypairs)) {
+			wg_timers_session_derived(peer);
+			wg_timers_handshake_complete(peer);
+			/* Calling this function will either send any existing
+			 * packets in the queue and not send a keepalive, which
+			 * is the best case, Or, if there's nothing in the
+			 * queue, it will send a keepalive, in order to give
+			 * immediate confirmation of the session.
+			 */
+			wg_packet_send_keepalive(peer);
+		}
+		break;
+	}
+	}
+
+	if (unlikely(!peer)) {
+		WARN(1, "Somehow a wrong type of packet wound up in the handshake queue!\n");
+		return;
+	}
+
+	local_bh_disable();
+	update_rx_stats(peer, skb->len);
+	local_bh_enable();
+
+	wg_timers_any_authenticated_packet_received(peer);
+	wg_timers_any_authenticated_packet_traversal(peer);
+	wg_peer_put(peer);
+}
+
+void wg_packet_handshake_receive_worker(struct work_struct *work)
+{
+	struct wg_device *wg = container_of(work, struct multicore_worker,
+					    work)->ptr;
+	struct sk_buff *skb;
+
+	while ((skb = skb_dequeue(&wg->incoming_handshakes)) != NULL) {
+		wg_receive_handshake_packet(wg, skb);
+		dev_kfree_skb(skb);
+		cond_resched();
+	}
+}
+
+static void keep_key_fresh(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	bool send;
+
+	if (peer->sent_lastminute_handshake)
+		return;
+
+	rcu_read_lock_bh();
+	keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
+	send = keypair && READ_ONCE(keypair->sending.is_valid) &&
+	       keypair->i_am_the_initiator &&
+	       wg_birthdate_has_expired(keypair->sending.birthdate,
+			REJECT_AFTER_TIME - KEEPALIVE_TIMEOUT - REKEY_TIMEOUT);
+	rcu_read_unlock_bh();
+
+	if (unlikely(send)) {
+		peer->sent_lastminute_handshake = true;
+		wg_packet_send_queued_handshake_initiation(peer, false);
+	}
+}
+
+static bool decrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
+{
+	struct scatterlist sg[MAX_SKB_FRAGS + 8];
+	struct sk_buff *trailer;
+	unsigned int offset;
+	int num_frags;
+
+	if (unlikely(!keypair))
+		return false;
+
+	if (unlikely(!READ_ONCE(keypair->receiving.is_valid) ||
+		  wg_birthdate_has_expired(keypair->receiving.birthdate, REJECT_AFTER_TIME) ||
+		  keypair->receiving_counter.counter >= REJECT_AFTER_MESSAGES)) {
+		WRITE_ONCE(keypair->receiving.is_valid, false);
+		return false;
+	}
+
+	PACKET_CB(skb)->nonce =
+		le64_to_cpu(((struct message_data *)skb->data)->counter);
+
+	/* We ensure that the network header is part of the packet before we
+	 * call skb_cow_data, so that there's no chance that data is removed
+	 * from the skb, so that later we can extract the original endpoint.
+	 */
+	offset = skb->data - skb_network_header(skb);
+	skb_push(skb, offset);
+	num_frags = skb_cow_data(skb, 0, &trailer);
+	offset += sizeof(struct message_data);
+	skb_pull(skb, offset);
+	if (unlikely(num_frags < 0 || num_frags > ARRAY_SIZE(sg)))
+		return false;
+
+	sg_init_table(sg, num_frags);
+	if (skb_to_sgvec(skb, sg, 0, skb->len) <= 0)
+		return false;
+
+	if (!chacha20poly1305_decrypt_sg_inplace(sg, skb->len, NULL, 0,
+					         PACKET_CB(skb)->nonce,
+						 keypair->receiving.key))
+		return false;
+
+	/* Another ugly situation of pushing and pulling the header so as to
+	 * keep endpoint information intact.
+	 */
+	skb_push(skb, offset);
+	if (pskb_trim(skb, skb->len - noise_encrypted_len(0)))
+		return false;
+	skb_pull(skb, offset);
+
+	return true;
+}
+
+/* This is RFC6479, a replay detection bitmap algorithm that avoids bitshifts */
+static bool counter_validate(struct noise_replay_counter *counter, u64 their_counter)
+{
+	unsigned long index, index_current, top, i;
+	bool ret = false;
+
+	spin_lock_bh(&counter->lock);
+
+	if (unlikely(counter->counter >= REJECT_AFTER_MESSAGES + 1 ||
+		     their_counter >= REJECT_AFTER_MESSAGES))
+		goto out;
+
+	++their_counter;
+
+	if (unlikely((COUNTER_WINDOW_SIZE + their_counter) <
+		     counter->counter))
+		goto out;
+
+	index = their_counter >> ilog2(BITS_PER_LONG);
+
+	if (likely(their_counter > counter->counter)) {
+		index_current = counter->counter >> ilog2(BITS_PER_LONG);
+		top = min_t(unsigned long, index - index_current,
+			    COUNTER_BITS_TOTAL / BITS_PER_LONG);
+		for (i = 1; i <= top; ++i)
+			counter->backtrack[(i + index_current) &
+				((COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1)] = 0;
+		counter->counter = their_counter;
+	}
+
+	index &= (COUNTER_BITS_TOTAL / BITS_PER_LONG) - 1;
+	ret = !test_and_set_bit(their_counter & (BITS_PER_LONG - 1),
+				&counter->backtrack[index]);
+
+out:
+	spin_unlock_bh(&counter->lock);
+	return ret;
+}
+
+#include "selftest/counter.c"
+
+static void wg_packet_consume_data_done(struct wg_peer *peer,
+					struct sk_buff *skb,
+					struct endpoint *endpoint)
+{
+	struct net_device *dev = peer->device->dev;
+	unsigned int len, len_before_trim;
+	struct wg_peer *routed_peer;
+
+	wg_socket_set_peer_endpoint(peer, endpoint);
+
+	if (unlikely(wg_noise_received_with_keypair(&peer->keypairs,
+						    PACKET_CB(skb)->keypair))) {
+		wg_timers_handshake_complete(peer);
+		wg_packet_send_staged_packets(peer);
+	}
+
+	keep_key_fresh(peer);
+
+	wg_timers_any_authenticated_packet_received(peer);
+	wg_timers_any_authenticated_packet_traversal(peer);
+
+	/* A packet with length 0 is a keepalive packet */
+	if (unlikely(!skb->len)) {
+		update_rx_stats(peer, message_data_len(0));
+		net_dbg_ratelimited("%s: Receiving keepalive packet from peer %llu (%pISpfsc)\n",
+				    dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+		goto packet_processed;
+	}
+
+	wg_timers_data_received(peer);
+
+	if (unlikely(skb_network_header(skb) < skb->head))
+		goto dishonest_packet_size;
+	if (unlikely(!(pskb_network_may_pull(skb, sizeof(struct iphdr)) &&
+		       (ip_hdr(skb)->version == 4 ||
+			(ip_hdr(skb)->version == 6 &&
+			 pskb_network_may_pull(skb, sizeof(struct ipv6hdr)))))))
+		goto dishonest_packet_type;
+
+	skb->dev = dev;
+	/* We've already verified the Poly1305 auth tag, which means this packet
+	 * was not modified in transit. We can therefore tell the networking
+	 * stack that all checksums of every layer of encapsulation have already
+	 * been checked "by the hardware" and therefore is unnecessary to check
+	 * again in software.
+	 */
+	skb->ip_summed = CHECKSUM_UNNECESSARY;
+	skb->csum_level = ~0; /* All levels */
+	skb->protocol = ip_tunnel_parse_protocol(skb);
+	if (skb->protocol == htons(ETH_P_IP)) {
+		len = ntohs(ip_hdr(skb)->tot_len);
+		if (unlikely(len < sizeof(struct iphdr)))
+			goto dishonest_packet_size;
+		INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ip_hdr(skb)->tos);
+	} else if (skb->protocol == htons(ETH_P_IPV6)) {
+		len = ntohs(ipv6_hdr(skb)->payload_len) +
+		      sizeof(struct ipv6hdr);
+		INET_ECN_decapsulate(skb, PACKET_CB(skb)->ds, ipv6_get_dsfield(ipv6_hdr(skb)));
+	} else {
+		goto dishonest_packet_type;
+	}
+
+	if (unlikely(len > skb->len))
+		goto dishonest_packet_size;
+	len_before_trim = skb->len;
+	if (unlikely(pskb_trim(skb, len)))
+		goto packet_processed;
+
+	routed_peer = wg_allowedips_lookup_src(&peer->device->peer_allowedips,
+					       skb);
+	wg_peer_put(routed_peer); /* We don't need the extra reference. */
+
+	if (unlikely(routed_peer != peer))
+		goto dishonest_packet_peer;
+
+	napi_gro_receive(&peer->napi, skb);
+	update_rx_stats(peer, message_data_len(len_before_trim));
+	return;
+
+dishonest_packet_peer:
+	net_dbg_skb_ratelimited("%s: Packet has unallowed src IP (%pISc) from peer %llu (%pISpfsc)\n",
+				dev->name, skb, peer->internal_id,
+				&peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_frame_errors;
+	goto packet_processed;
+dishonest_packet_type:
+	net_dbg_ratelimited("%s: Packet is neither ipv4 nor ipv6 from peer %llu (%pISpfsc)\n",
+			    dev->name, peer->internal_id, &peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_frame_errors;
+	goto packet_processed;
+dishonest_packet_size:
+	net_dbg_ratelimited("%s: Packet has incorrect size from peer %llu (%pISpfsc)\n",
+			    dev->name, peer->internal_id, &peer->endpoint.addr);
+	++dev->stats.rx_errors;
+	++dev->stats.rx_length_errors;
+	goto packet_processed;
+packet_processed:
+	dev_kfree_skb(skb);
+}
+
+int wg_packet_rx_poll(struct napi_struct *napi, int budget)
+{
+	struct wg_peer *peer = container_of(napi, struct wg_peer, napi);
+	struct noise_keypair *keypair;
+	struct endpoint endpoint;
+	enum packet_state state;
+	struct sk_buff *skb;
+	int work_done = 0;
+	bool free;
+
+	if (unlikely(budget <= 0))
+		return 0;
+
+	while ((skb = wg_prev_queue_peek(&peer->rx_queue)) != NULL &&
+	       (state = atomic_read_acquire(&PACKET_CB(skb)->state)) !=
+		       PACKET_STATE_UNCRYPTED) {
+		wg_prev_queue_drop_peeked(&peer->rx_queue);
+		keypair = PACKET_CB(skb)->keypair;
+		free = true;
+
+		if (unlikely(state != PACKET_STATE_CRYPTED))
+			goto next;
+
+		if (unlikely(!counter_validate(&keypair->receiving_counter,
+					       PACKET_CB(skb)->nonce))) {
+			net_dbg_ratelimited("%s: Packet has invalid nonce %llu (max %llu)\n",
+					    peer->device->dev->name,
+					    PACKET_CB(skb)->nonce,
+					    keypair->receiving_counter.counter);
+			goto next;
+		}
+
+		if (unlikely(wg_socket_endpoint_from_skb(&endpoint, skb)))
+			goto next;
+
+		wg_reset_packet(skb, false);
+		wg_packet_consume_data_done(peer, skb, &endpoint);
+		free = false;
+
+next:
+		wg_noise_keypair_put(keypair, false);
+		wg_peer_put(peer);
+		if (unlikely(free))
+			dev_kfree_skb(skb);
+
+		if (++work_done >= budget)
+			break;
+	}
+
+	if (work_done < budget)
+		napi_complete_done(napi, work_done);
+
+	return work_done;
+}
+
+void wg_packet_decrypt_worker(struct work_struct *work)
+{
+	struct crypt_queue *queue = container_of(work, struct multicore_worker,
+						 work)->ptr;
+	struct sk_buff *skb;
+
+	while ((skb = ptr_ring_consume_bh(&queue->ring)) != NULL) {
+		enum packet_state state =
+			likely(decrypt_packet(skb, PACKET_CB(skb)->keypair)) ?
+				PACKET_STATE_CRYPTED : PACKET_STATE_DEAD;
+		wg_queue_enqueue_per_peer_rx(skb, state);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+static void wg_packet_consume_data(struct wg_device *wg, struct sk_buff *skb)
+{
+	__le32 idx = ((struct message_data *)skb->data)->key_idx;
+	struct wg_peer *peer = NULL;
+	int ret;
+
+	rcu_read_lock_bh();
+	PACKET_CB(skb)->keypair =
+		(struct noise_keypair *)wg_index_hashtable_lookup(
+			wg->index_hashtable, INDEX_HASHTABLE_KEYPAIR, idx,
+			&peer);
+	if (unlikely(!wg_noise_keypair_get(PACKET_CB(skb)->keypair)))
+		goto err_keypair;
+
+	if (unlikely(READ_ONCE(peer->is_dead)))
+		goto err;
+
+	ret = wg_queue_enqueue_per_device_and_peer(&wg->decrypt_queue, &peer->rx_queue, skb,
+						   wg->packet_crypt_wq, &wg->decrypt_queue.last_cpu);
+	if (unlikely(ret == -EPIPE))
+		wg_queue_enqueue_per_peer_rx(skb, PACKET_STATE_DEAD);
+	if (likely(!ret || ret == -EPIPE)) {
+		rcu_read_unlock_bh();
+		return;
+	}
+err:
+	wg_noise_keypair_put(PACKET_CB(skb)->keypair, false);
+err_keypair:
+	rcu_read_unlock_bh();
+	wg_peer_put(peer);
+	dev_kfree_skb(skb);
+}
+
+void wg_packet_receive(struct wg_device *wg, struct sk_buff *skb)
+{
+	if (unlikely(prepare_skb_header(skb, wg) < 0))
+		goto err;
+	switch (SKB_TYPE_LE32(skb)) {
+	case cpu_to_le32(MESSAGE_HANDSHAKE_INITIATION):
+	case cpu_to_le32(MESSAGE_HANDSHAKE_RESPONSE):
+	case cpu_to_le32(MESSAGE_HANDSHAKE_COOKIE): {
+		int cpu;
+
+		if (skb_queue_len(&wg->incoming_handshakes) >
+			    MAX_QUEUED_INCOMING_HANDSHAKES ||
+		    unlikely(!rng_is_initialized())) {
+			net_dbg_skb_ratelimited("%s: Dropping handshake packet from %pISpfsc\n",
+						wg->dev->name, skb);
+			goto err;
+		}
+		skb_queue_tail(&wg->incoming_handshakes, skb);
+		/* Queues up a call to packet_process_queued_handshake_
+		 * packets(skb):
+		 */
+		cpu = wg_cpumask_next_online(&wg->incoming_handshake_cpu);
+		queue_work_on(cpu, wg->handshake_receive_wq,
+			&per_cpu_ptr(wg->incoming_handshakes_worker, cpu)->work);
+		break;
+	}
+	case cpu_to_le32(MESSAGE_DATA):
+		PACKET_CB(skb)->ds = ip_tunnel_get_dsfield(ip_hdr(skb), skb);
+		wg_packet_consume_data(wg, skb);
+		break;
+	default:
+		WARN(1, "Non-exhaustive parsing of packet header lead to unknown packet type!\n");
+		goto err;
+	}
+	return;
+
+err:
+	dev_kfree_skb(skb);
+}
diff --git a/drivers/net/wireguard/selftest/allowedips.c b/drivers/net/wireguard/selftest/allowedips.c
new file mode 100644
index 0000000..e173204
--- /dev/null
+++ b/drivers/net/wireguard/selftest/allowedips.c
@@ -0,0 +1,676 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This contains some basic static unit tests for the allowedips data structure.
+ * It also has two additional modes that are disabled and meant to be used by
+ * folks directly playing with this file. If you define the macro
+ * DEBUG_PRINT_TRIE_GRAPHVIZ to be 1, then every time there's a full tree in
+ * memory, it will be printed out as KERN_DEBUG in a format that can be passed
+ * to graphviz (the dot command) to visualize it. If you define the macro
+ * DEBUG_RANDOM_TRIE to be 1, then there will be an extremely costly set of
+ * randomized tests done against a trivial implementation, which may take
+ * upwards of a half-hour to complete. There's no set of users who should be
+ * enabling these, and the only developers that should go anywhere near these
+ * nobs are the ones who are reading this comment.
+ */
+
+#ifdef DEBUG
+
+#include <linux/siphash.h>
+
+static __init void print_node(struct allowedips_node *node, u8 bits)
+{
+	char *fmt_connection = KERN_DEBUG "\t\"%p/%d\" -> \"%p/%d\";\n";
+	char *fmt_declaration = KERN_DEBUG "\t\"%p/%d\"[style=%s, color=\"#%06x\"];\n";
+	u8 ip1[16], ip2[16], cidr1, cidr2;
+	char *style = "dotted";
+	u32 color = 0;
+
+	if (node == NULL)
+		return;
+	if (bits == 32) {
+		fmt_connection = KERN_DEBUG "\t\"%pI4/%d\" -> \"%pI4/%d\";\n";
+		fmt_declaration = KERN_DEBUG "\t\"%pI4/%d\"[style=%s, color=\"#%06x\"];\n";
+	} else if (bits == 128) {
+		fmt_connection = KERN_DEBUG "\t\"%pI6/%d\" -> \"%pI6/%d\";\n";
+		fmt_declaration = KERN_DEBUG "\t\"%pI6/%d\"[style=%s, color=\"#%06x\"];\n";
+	}
+	if (node->peer) {
+		hsiphash_key_t key = { { 0 } };
+
+		memcpy(&key, &node->peer, sizeof(node->peer));
+		color = hsiphash_1u32(0xdeadbeef, &key) % 200 << 16 |
+			hsiphash_1u32(0xbabecafe, &key) % 200 << 8 |
+			hsiphash_1u32(0xabad1dea, &key) % 200;
+		style = "bold";
+	}
+	wg_allowedips_read_node(node, ip1, &cidr1);
+	printk(fmt_declaration, ip1, cidr1, style, color);
+	if (node->bit[0]) {
+		wg_allowedips_read_node(rcu_dereference_raw(node->bit[0]), ip2, &cidr2);
+		printk(fmt_connection, ip1, cidr1, ip2, cidr2);
+	}
+	if (node->bit[1]) {
+		wg_allowedips_read_node(rcu_dereference_raw(node->bit[1]), ip2, &cidr2);
+		printk(fmt_connection, ip1, cidr1, ip2, cidr2);
+	}
+	if (node->bit[0])
+		print_node(rcu_dereference_raw(node->bit[0]), bits);
+	if (node->bit[1])
+		print_node(rcu_dereference_raw(node->bit[1]), bits);
+}
+
+static __init void print_tree(struct allowedips_node __rcu *top, u8 bits)
+{
+	printk(KERN_DEBUG "digraph trie {\n");
+	print_node(rcu_dereference_raw(top), bits);
+	printk(KERN_DEBUG "}\n");
+}
+
+enum {
+	NUM_PEERS = 2000,
+	NUM_RAND_ROUTES = 400,
+	NUM_MUTATED_ROUTES = 100,
+	NUM_QUERIES = NUM_RAND_ROUTES * NUM_MUTATED_ROUTES * 30
+};
+
+struct horrible_allowedips {
+	struct hlist_head head;
+};
+
+struct horrible_allowedips_node {
+	struct hlist_node table;
+	union nf_inet_addr ip;
+	union nf_inet_addr mask;
+	u8 ip_version;
+	void *value;
+};
+
+static __init void horrible_allowedips_init(struct horrible_allowedips *table)
+{
+	INIT_HLIST_HEAD(&table->head);
+}
+
+static __init void horrible_allowedips_free(struct horrible_allowedips *table)
+{
+	struct horrible_allowedips_node *node;
+	struct hlist_node *h;
+
+	hlist_for_each_entry_safe(node, h, &table->head, table) {
+		hlist_del(&node->table);
+		kfree(node);
+	}
+}
+
+static __init inline union nf_inet_addr horrible_cidr_to_mask(u8 cidr)
+{
+	union nf_inet_addr mask;
+
+	memset(&mask, 0, sizeof(mask));
+	memset(&mask.all, 0xff, cidr / 8);
+	if (cidr % 32)
+		mask.all[cidr / 32] = (__force u32)htonl(
+			(0xFFFFFFFFUL << (32 - (cidr % 32))) & 0xFFFFFFFFUL);
+	return mask;
+}
+
+static __init inline u8 horrible_mask_to_cidr(union nf_inet_addr subnet)
+{
+	return hweight32(subnet.all[0]) + hweight32(subnet.all[1]) +
+	       hweight32(subnet.all[2]) + hweight32(subnet.all[3]);
+}
+
+static __init inline void
+horrible_mask_self(struct horrible_allowedips_node *node)
+{
+	if (node->ip_version == 4) {
+		node->ip.ip &= node->mask.ip;
+	} else if (node->ip_version == 6) {
+		node->ip.ip6[0] &= node->mask.ip6[0];
+		node->ip.ip6[1] &= node->mask.ip6[1];
+		node->ip.ip6[2] &= node->mask.ip6[2];
+		node->ip.ip6[3] &= node->mask.ip6[3];
+	}
+}
+
+static __init inline bool
+horrible_match_v4(const struct horrible_allowedips_node *node, struct in_addr *ip)
+{
+	return (ip->s_addr & node->mask.ip) == node->ip.ip;
+}
+
+static __init inline bool
+horrible_match_v6(const struct horrible_allowedips_node *node, struct in6_addr *ip)
+{
+	return (ip->in6_u.u6_addr32[0] & node->mask.ip6[0]) == node->ip.ip6[0] &&
+	       (ip->in6_u.u6_addr32[1] & node->mask.ip6[1]) == node->ip.ip6[1] &&
+	       (ip->in6_u.u6_addr32[2] & node->mask.ip6[2]) == node->ip.ip6[2] &&
+	       (ip->in6_u.u6_addr32[3] & node->mask.ip6[3]) == node->ip.ip6[3];
+}
+
+static __init void
+horrible_insert_ordered(struct horrible_allowedips *table, struct horrible_allowedips_node *node)
+{
+	struct horrible_allowedips_node *other = NULL, *where = NULL;
+	u8 my_cidr = horrible_mask_to_cidr(node->mask);
+
+	hlist_for_each_entry(other, &table->head, table) {
+		if (other->ip_version == node->ip_version &&
+		    !memcmp(&other->mask, &node->mask, sizeof(union nf_inet_addr)) &&
+		    !memcmp(&other->ip, &node->ip, sizeof(union nf_inet_addr))) {
+			other->value = node->value;
+			kfree(node);
+			return;
+		}
+	}
+	hlist_for_each_entry(other, &table->head, table) {
+		where = other;
+		if (horrible_mask_to_cidr(other->mask) <= my_cidr)
+			break;
+	}
+	if (!other && !where)
+		hlist_add_head(&node->table, &table->head);
+	else if (!other)
+		hlist_add_behind(&node->table, &where->table);
+	else
+		hlist_add_before(&node->table, &where->table);
+}
+
+static __init int
+horrible_allowedips_insert_v4(struct horrible_allowedips *table,
+			      struct in_addr *ip, u8 cidr, void *value)
+{
+	struct horrible_allowedips_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+
+	if (unlikely(!node))
+		return -ENOMEM;
+	node->ip.in = *ip;
+	node->mask = horrible_cidr_to_mask(cidr);
+	node->ip_version = 4;
+	node->value = value;
+	horrible_mask_self(node);
+	horrible_insert_ordered(table, node);
+	return 0;
+}
+
+static __init int
+horrible_allowedips_insert_v6(struct horrible_allowedips *table,
+			      struct in6_addr *ip, u8 cidr, void *value)
+{
+	struct horrible_allowedips_node *node = kzalloc(sizeof(*node), GFP_KERNEL);
+
+	if (unlikely(!node))
+		return -ENOMEM;
+	node->ip.in6 = *ip;
+	node->mask = horrible_cidr_to_mask(cidr);
+	node->ip_version = 6;
+	node->value = value;
+	horrible_mask_self(node);
+	horrible_insert_ordered(table, node);
+	return 0;
+}
+
+static __init void *
+horrible_allowedips_lookup_v4(struct horrible_allowedips *table, struct in_addr *ip)
+{
+	struct horrible_allowedips_node *node;
+
+	hlist_for_each_entry(node, &table->head, table) {
+		if (node->ip_version == 4 && horrible_match_v4(node, ip))
+			return node->value;
+	}
+	return NULL;
+}
+
+static __init void *
+horrible_allowedips_lookup_v6(struct horrible_allowedips *table, struct in6_addr *ip)
+{
+	struct horrible_allowedips_node *node;
+
+	hlist_for_each_entry(node, &table->head, table) {
+		if (node->ip_version == 6 && horrible_match_v6(node, ip))
+			return node->value;
+	}
+	return NULL;
+}
+
+
+static __init void
+horrible_allowedips_remove_by_value(struct horrible_allowedips *table, void *value)
+{
+	struct horrible_allowedips_node *node;
+	struct hlist_node *h;
+
+	hlist_for_each_entry_safe(node, h, &table->head, table) {
+		if (node->value != value)
+			continue;
+		hlist_del(&node->table);
+		kfree(node);
+	}
+
+}
+
+static __init bool randomized_test(void)
+{
+	unsigned int i, j, k, mutate_amount, cidr;
+	u8 ip[16], mutate_mask[16], mutated[16];
+	struct wg_peer **peers, *peer;
+	struct horrible_allowedips h;
+	DEFINE_MUTEX(mutex);
+	struct allowedips t;
+	bool ret = false;
+
+	mutex_init(&mutex);
+
+	wg_allowedips_init(&t);
+	horrible_allowedips_init(&h);
+
+	peers = kcalloc(NUM_PEERS, sizeof(*peers), GFP_KERNEL);
+	if (unlikely(!peers)) {
+		pr_err("allowedips random self-test malloc: FAIL\n");
+		goto free;
+	}
+	for (i = 0; i < NUM_PEERS; ++i) {
+		peers[i] = kzalloc(sizeof(*peers[i]), GFP_KERNEL);
+		if (unlikely(!peers[i])) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free;
+		}
+		kref_init(&peers[i]->refcount);
+		INIT_LIST_HEAD(&peers[i]->allowedips_list);
+	}
+
+	mutex_lock(&mutex);
+
+	for (i = 0; i < NUM_RAND_ROUTES; ++i) {
+		prandom_bytes(ip, 4);
+		cidr = prandom_u32_max(32) + 1;
+		peer = peers[prandom_u32_max(NUM_PEERS)];
+		if (wg_allowedips_insert_v4(&t, (struct in_addr *)ip, cidr,
+					    peer, &mutex) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		if (horrible_allowedips_insert_v4(&h, (struct in_addr *)ip,
+						  cidr, peer) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
+			memcpy(mutated, ip, 4);
+			prandom_bytes(mutate_mask, 4);
+			mutate_amount = prandom_u32_max(32);
+			for (k = 0; k < mutate_amount / 8; ++k)
+				mutate_mask[k] = 0xff;
+			mutate_mask[k] = 0xff
+					 << ((8 - (mutate_amount % 8)) % 8);
+			for (; k < 4; ++k)
+				mutate_mask[k] = 0;
+			for (k = 0; k < 4; ++k)
+				mutated[k] = (mutated[k] & mutate_mask[k]) |
+					     (~mutate_mask[k] &
+					      prandom_u32_max(256));
+			cidr = prandom_u32_max(32) + 1;
+			peer = peers[prandom_u32_max(NUM_PEERS)];
+			if (wg_allowedips_insert_v4(&t,
+						    (struct in_addr *)mutated,
+						    cidr, peer, &mutex) < 0) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+			if (horrible_allowedips_insert_v4(&h,
+				(struct in_addr *)mutated, cidr, peer)) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+		}
+	}
+
+	for (i = 0; i < NUM_RAND_ROUTES; ++i) {
+		prandom_bytes(ip, 16);
+		cidr = prandom_u32_max(128) + 1;
+		peer = peers[prandom_u32_max(NUM_PEERS)];
+		if (wg_allowedips_insert_v6(&t, (struct in6_addr *)ip, cidr,
+					    peer, &mutex) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		if (horrible_allowedips_insert_v6(&h, (struct in6_addr *)ip,
+						  cidr, peer) < 0) {
+			pr_err("allowedips random self-test malloc: FAIL\n");
+			goto free_locked;
+		}
+		for (j = 0; j < NUM_MUTATED_ROUTES; ++j) {
+			memcpy(mutated, ip, 16);
+			prandom_bytes(mutate_mask, 16);
+			mutate_amount = prandom_u32_max(128);
+			for (k = 0; k < mutate_amount / 8; ++k)
+				mutate_mask[k] = 0xff;
+			mutate_mask[k] = 0xff
+					 << ((8 - (mutate_amount % 8)) % 8);
+			for (; k < 4; ++k)
+				mutate_mask[k] = 0;
+			for (k = 0; k < 4; ++k)
+				mutated[k] = (mutated[k] & mutate_mask[k]) |
+					     (~mutate_mask[k] &
+					      prandom_u32_max(256));
+			cidr = prandom_u32_max(128) + 1;
+			peer = peers[prandom_u32_max(NUM_PEERS)];
+			if (wg_allowedips_insert_v6(&t,
+						    (struct in6_addr *)mutated,
+						    cidr, peer, &mutex) < 0) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+			if (horrible_allowedips_insert_v6(
+				    &h, (struct in6_addr *)mutated, cidr,
+				    peer)) {
+				pr_err("allowedips random self-test malloc: FAIL\n");
+				goto free_locked;
+			}
+		}
+	}
+
+	mutex_unlock(&mutex);
+
+	if (IS_ENABLED(DEBUG_PRINT_TRIE_GRAPHVIZ)) {
+		print_tree(t.root4, 32);
+		print_tree(t.root6, 128);
+	}
+
+	for (j = 0;; ++j) {
+		for (i = 0; i < NUM_QUERIES; ++i) {
+			prandom_bytes(ip, 4);
+			if (lookup(t.root4, 32, ip) != horrible_allowedips_lookup_v4(&h, (struct in_addr *)ip)) {
+				horrible_allowedips_lookup_v4(&h, (struct in_addr *)ip);
+				pr_err("allowedips random v4 self-test: FAIL\n");
+				goto free;
+			}
+			prandom_bytes(ip, 16);
+			if (lookup(t.root6, 128, ip) != horrible_allowedips_lookup_v6(&h, (struct in6_addr *)ip)) {
+				pr_err("allowedips random v6 self-test: FAIL\n");
+				goto free;
+			}
+		}
+		if (j >= NUM_PEERS)
+			break;
+		mutex_lock(&mutex);
+		wg_allowedips_remove_by_peer(&t, peers[j], &mutex);
+		mutex_unlock(&mutex);
+		horrible_allowedips_remove_by_value(&h, peers[j]);
+	}
+
+	if (t.root4 || t.root6) {
+		pr_err("allowedips random self-test removal: FAIL\n");
+		goto free;
+	}
+
+	ret = true;
+
+free:
+	mutex_lock(&mutex);
+free_locked:
+	wg_allowedips_free(&t, &mutex);
+	mutex_unlock(&mutex);
+	horrible_allowedips_free(&h);
+	if (peers) {
+		for (i = 0; i < NUM_PEERS; ++i)
+			kfree(peers[i]);
+	}
+	kfree(peers);
+	return ret;
+}
+
+static __init inline struct in_addr *ip4(u8 a, u8 b, u8 c, u8 d)
+{
+	static struct in_addr ip;
+	u8 *split = (u8 *)&ip;
+
+	split[0] = a;
+	split[1] = b;
+	split[2] = c;
+	split[3] = d;
+	return &ip;
+}
+
+static __init inline struct in6_addr *ip6(u32 a, u32 b, u32 c, u32 d)
+{
+	static struct in6_addr ip;
+	__be32 *split = (__be32 *)&ip;
+
+	split[0] = cpu_to_be32(a);
+	split[1] = cpu_to_be32(b);
+	split[2] = cpu_to_be32(c);
+	split[3] = cpu_to_be32(d);
+	return &ip;
+}
+
+static __init struct wg_peer *init_peer(void)
+{
+	struct wg_peer *peer = kzalloc(sizeof(*peer), GFP_KERNEL);
+
+	if (!peer)
+		return NULL;
+	kref_init(&peer->refcount);
+	INIT_LIST_HEAD(&peer->allowedips_list);
+	return peer;
+}
+
+#define insert(version, mem, ipa, ipb, ipc, ipd, cidr)                       \
+	wg_allowedips_insert_v##version(&t, ip##version(ipa, ipb, ipc, ipd), \
+					cidr, mem, &mutex)
+
+#define maybe_fail() do {                                               \
+		++i;                                                    \
+		if (!_s) {                                              \
+			pr_info("allowedips self-test %zu: FAIL\n", i); \
+			success = false;                                \
+		}                                                       \
+	} while (0)
+
+#define test(version, mem, ipa, ipb, ipc, ipd) do {                          \
+		bool _s = lookup(t.root##version, (version) == 4 ? 32 : 128, \
+				 ip##version(ipa, ipb, ipc, ipd)) == (mem);  \
+		maybe_fail();                                                \
+	} while (0)
+
+#define test_negative(version, mem, ipa, ipb, ipc, ipd) do {                 \
+		bool _s = lookup(t.root##version, (version) == 4 ? 32 : 128, \
+				 ip##version(ipa, ipb, ipc, ipd)) != (mem);  \
+		maybe_fail();                                                \
+	} while (0)
+
+#define test_boolean(cond) do {   \
+		bool _s = (cond); \
+		maybe_fail();     \
+	} while (0)
+
+bool __init wg_allowedips_selftest(void)
+{
+	bool found_a = false, found_b = false, found_c = false, found_d = false,
+	     found_e = false, found_other = false;
+	struct wg_peer *a = init_peer(), *b = init_peer(), *c = init_peer(),
+		       *d = init_peer(), *e = init_peer(), *f = init_peer(),
+		       *g = init_peer(), *h = init_peer();
+	struct allowedips_node *iter_node;
+	bool success = false;
+	struct allowedips t;
+	DEFINE_MUTEX(mutex);
+	struct in6_addr ip;
+	size_t i = 0, count = 0;
+	__be64 part;
+
+	mutex_init(&mutex);
+	mutex_lock(&mutex);
+	wg_allowedips_init(&t);
+
+	if (!a || !b || !c || !d || !e || !f || !g || !h) {
+		pr_err("allowedips self-test malloc: FAIL\n");
+		goto free;
+	}
+
+	insert(4, a, 192, 168, 4, 0, 24);
+	insert(4, b, 192, 168, 4, 4, 32);
+	insert(4, c, 192, 168, 0, 0, 16);
+	insert(4, d, 192, 95, 5, 64, 27);
+	/* replaces previous entry, and maskself is required */
+	insert(4, c, 192, 95, 5, 65, 27);
+	insert(6, d, 0x26075300, 0x60006b00, 0, 0xc05f0543, 128);
+	insert(6, c, 0x26075300, 0x60006b00, 0, 0, 64);
+	insert(4, e, 0, 0, 0, 0, 0);
+	insert(6, e, 0, 0, 0, 0, 0);
+	/* replaces previous entry */
+	insert(6, f, 0, 0, 0, 0, 0);
+	insert(6, g, 0x24046800, 0, 0, 0, 32);
+	/* maskself is required */
+	insert(6, h, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef, 64);
+	insert(6, a, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef, 128);
+	insert(6, c, 0x24446800, 0x40e40800, 0xdeaebeef, 0xdefbeef, 128);
+	insert(6, b, 0x24446800, 0xf0e40800, 0xeeaebeef, 0, 98);
+	insert(4, g, 64, 15, 112, 0, 20);
+	/* maskself is required */
+	insert(4, h, 64, 15, 123, 211, 25);
+	insert(4, a, 10, 0, 0, 0, 25);
+	insert(4, b, 10, 0, 0, 128, 25);
+	insert(4, a, 10, 1, 0, 0, 30);
+	insert(4, b, 10, 1, 0, 4, 30);
+	insert(4, c, 10, 1, 0, 8, 29);
+	insert(4, d, 10, 1, 0, 16, 29);
+
+	if (IS_ENABLED(DEBUG_PRINT_TRIE_GRAPHVIZ)) {
+		print_tree(t.root4, 32);
+		print_tree(t.root6, 128);
+	}
+
+	success = true;
+
+	test(4, a, 192, 168, 4, 20);
+	test(4, a, 192, 168, 4, 0);
+	test(4, b, 192, 168, 4, 4);
+	test(4, c, 192, 168, 200, 182);
+	test(4, c, 192, 95, 5, 68);
+	test(4, e, 192, 95, 5, 96);
+	test(6, d, 0x26075300, 0x60006b00, 0, 0xc05f0543);
+	test(6, c, 0x26075300, 0x60006b00, 0, 0xc02e01ee);
+	test(6, f, 0x26075300, 0x60006b01, 0, 0);
+	test(6, g, 0x24046800, 0x40040806, 0, 0x1006);
+	test(6, g, 0x24046800, 0x40040806, 0x1234, 0x5678);
+	test(6, f, 0x240467ff, 0x40040806, 0x1234, 0x5678);
+	test(6, f, 0x24046801, 0x40040806, 0x1234, 0x5678);
+	test(6, h, 0x24046800, 0x40040800, 0x1234, 0x5678);
+	test(6, h, 0x24046800, 0x40040800, 0, 0);
+	test(6, h, 0x24046800, 0x40040800, 0x10101010, 0x10101010);
+	test(6, a, 0x24046800, 0x40040800, 0xdeadbeef, 0xdeadbeef);
+	test(4, g, 64, 15, 116, 26);
+	test(4, g, 64, 15, 127, 3);
+	test(4, g, 64, 15, 123, 1);
+	test(4, h, 64, 15, 123, 128);
+	test(4, h, 64, 15, 123, 129);
+	test(4, a, 10, 0, 0, 52);
+	test(4, b, 10, 0, 0, 220);
+	test(4, a, 10, 1, 0, 2);
+	test(4, b, 10, 1, 0, 6);
+	test(4, c, 10, 1, 0, 10);
+	test(4, d, 10, 1, 0, 20);
+
+	insert(4, a, 1, 0, 0, 0, 32);
+	insert(4, a, 64, 0, 0, 0, 32);
+	insert(4, a, 128, 0, 0, 0, 32);
+	insert(4, a, 192, 0, 0, 0, 32);
+	insert(4, a, 255, 0, 0, 0, 32);
+	wg_allowedips_remove_by_peer(&t, a, &mutex);
+	test_negative(4, a, 1, 0, 0, 0);
+	test_negative(4, a, 64, 0, 0, 0);
+	test_negative(4, a, 128, 0, 0, 0);
+	test_negative(4, a, 192, 0, 0, 0);
+	test_negative(4, a, 255, 0, 0, 0);
+
+	wg_allowedips_free(&t, &mutex);
+	wg_allowedips_init(&t);
+	insert(4, a, 192, 168, 0, 0, 16);
+	insert(4, a, 192, 168, 0, 0, 24);
+	wg_allowedips_remove_by_peer(&t, a, &mutex);
+	test_negative(4, a, 192, 168, 0, 1);
+
+	/* These will hit the WARN_ON(len >= 128) in free_node if something
+	 * goes wrong.
+	 */
+	for (i = 0; i < 128; ++i) {
+		part = cpu_to_be64(~(1LLU << (i % 64)));
+		memset(&ip, 0xff, 16);
+		memcpy((u8 *)&ip + (i < 64) * 8, &part, 8);
+		wg_allowedips_insert_v6(&t, &ip, 128, a, &mutex);
+	}
+
+	wg_allowedips_free(&t, &mutex);
+
+	wg_allowedips_init(&t);
+	insert(4, a, 192, 95, 5, 93, 27);
+	insert(6, a, 0x26075300, 0x60006b00, 0, 0xc05f0543, 128);
+	insert(4, a, 10, 1, 0, 20, 29);
+	insert(6, a, 0x26075300, 0x6d8a6bf8, 0xdab1f1df, 0xc05f1523, 83);
+	insert(6, a, 0x26075300, 0x6d8a6bf8, 0xdab1f1df, 0xc05f1523, 21);
+	list_for_each_entry(iter_node, &a->allowedips_list, peer_list) {
+		u8 cidr, ip[16] __aligned(__alignof(u64));
+		int family = wg_allowedips_read_node(iter_node, ip, &cidr);
+
+		count++;
+
+		if (cidr == 27 && family == AF_INET &&
+		    !memcmp(ip, ip4(192, 95, 5, 64), sizeof(struct in_addr)))
+			found_a = true;
+		else if (cidr == 128 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075300, 0x60006b00, 0, 0xc05f0543),
+				 sizeof(struct in6_addr)))
+			found_b = true;
+		else if (cidr == 29 && family == AF_INET &&
+			 !memcmp(ip, ip4(10, 1, 0, 16), sizeof(struct in_addr)))
+			found_c = true;
+		else if (cidr == 83 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075300, 0x6d8a6bf8, 0xdab1e000, 0),
+				 sizeof(struct in6_addr)))
+			found_d = true;
+		else if (cidr == 21 && family == AF_INET6 &&
+			 !memcmp(ip, ip6(0x26075000, 0, 0, 0),
+				 sizeof(struct in6_addr)))
+			found_e = true;
+		else
+			found_other = true;
+	}
+	test_boolean(count == 5);
+	test_boolean(found_a);
+	test_boolean(found_b);
+	test_boolean(found_c);
+	test_boolean(found_d);
+	test_boolean(found_e);
+	test_boolean(!found_other);
+
+	if (IS_ENABLED(DEBUG_RANDOM_TRIE) && success)
+		success = randomized_test();
+
+	if (success)
+		pr_info("allowedips self-tests: pass\n");
+
+free:
+	wg_allowedips_free(&t, &mutex);
+	kfree(a);
+	kfree(b);
+	kfree(c);
+	kfree(d);
+	kfree(e);
+	kfree(f);
+	kfree(g);
+	kfree(h);
+	mutex_unlock(&mutex);
+
+	return success;
+}
+
+#undef test_negative
+#undef test
+#undef remove
+#undef insert
+#undef init_peer
+
+#endif
diff --git a/drivers/net/wireguard/selftest/counter.c b/drivers/net/wireguard/selftest/counter.c
new file mode 100644
index 0000000..ec3c156
--- /dev/null
+++ b/drivers/net/wireguard/selftest/counter.c
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifdef DEBUG
+bool __init wg_packet_counter_selftest(void)
+{
+	struct noise_replay_counter *counter;
+	unsigned int test_num = 0, i;
+	bool success = true;
+
+	counter = kmalloc(sizeof(*counter), GFP_KERNEL);
+	if (unlikely(!counter)) {
+		pr_err("nonce counter self-test malloc: FAIL\n");
+		return false;
+	}
+
+#define T_INIT do {                                    \
+		memset(counter, 0, sizeof(*counter));  \
+		spin_lock_init(&counter->lock);        \
+	} while (0)
+#define T_LIM (COUNTER_WINDOW_SIZE + 1)
+#define T(n, v) do {                                                  \
+		++test_num;                                           \
+		if (counter_validate(counter, n) != (v)) {            \
+			pr_err("nonce counter self-test %u: FAIL\n",  \
+			       test_num);                             \
+			success = false;                              \
+		}                                                     \
+	} while (0)
+
+	T_INIT;
+	/*  1 */ T(0, true);
+	/*  2 */ T(1, true);
+	/*  3 */ T(1, false);
+	/*  4 */ T(9, true);
+	/*  5 */ T(8, true);
+	/*  6 */ T(7, true);
+	/*  7 */ T(7, false);
+	/*  8 */ T(T_LIM, true);
+	/*  9 */ T(T_LIM - 1, true);
+	/* 10 */ T(T_LIM - 1, false);
+	/* 11 */ T(T_LIM - 2, true);
+	/* 12 */ T(2, true);
+	/* 13 */ T(2, false);
+	/* 14 */ T(T_LIM + 16, true);
+	/* 15 */ T(3, false);
+	/* 16 */ T(T_LIM + 16, false);
+	/* 17 */ T(T_LIM * 4, true);
+	/* 18 */ T(T_LIM * 4 - (T_LIM - 1), true);
+	/* 19 */ T(10, false);
+	/* 20 */ T(T_LIM * 4 - T_LIM, false);
+	/* 21 */ T(T_LIM * 4 - (T_LIM + 1), false);
+	/* 22 */ T(T_LIM * 4 - (T_LIM - 2), true);
+	/* 23 */ T(T_LIM * 4 + 1 - T_LIM, false);
+	/* 24 */ T(0, false);
+	/* 25 */ T(REJECT_AFTER_MESSAGES, false);
+	/* 26 */ T(REJECT_AFTER_MESSAGES - 1, true);
+	/* 27 */ T(REJECT_AFTER_MESSAGES, false);
+	/* 28 */ T(REJECT_AFTER_MESSAGES - 1, false);
+	/* 29 */ T(REJECT_AFTER_MESSAGES - 2, true);
+	/* 30 */ T(REJECT_AFTER_MESSAGES + 1, false);
+	/* 31 */ T(REJECT_AFTER_MESSAGES + 2, false);
+	/* 32 */ T(REJECT_AFTER_MESSAGES - 2, false);
+	/* 33 */ T(REJECT_AFTER_MESSAGES - 3, true);
+	/* 34 */ T(0, false);
+
+	T_INIT;
+	for (i = 1; i <= COUNTER_WINDOW_SIZE; ++i)
+		T(i, true);
+	T(0, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = 2; i <= COUNTER_WINDOW_SIZE + 1; ++i)
+		T(i, true);
+	T(1, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 0;)
+		T(i, true);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 2; i-- > 1;)
+		T(i, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
+		T(i, true);
+	T(COUNTER_WINDOW_SIZE + 1, true);
+	T(0, false);
+
+	T_INIT;
+	for (i = COUNTER_WINDOW_SIZE + 1; i-- > 1;)
+		T(i, true);
+	T(0, true);
+	T(COUNTER_WINDOW_SIZE + 1, true);
+
+#undef T
+#undef T_LIM
+#undef T_INIT
+
+	if (success)
+		pr_info("nonce counter self-tests: pass\n");
+	kfree(counter);
+	return success;
+}
+#endif
diff --git a/drivers/net/wireguard/selftest/ratelimiter.c b/drivers/net/wireguard/selftest/ratelimiter.c
new file mode 100644
index 0000000..007cd44
--- /dev/null
+++ b/drivers/net/wireguard/selftest/ratelimiter.c
@@ -0,0 +1,226 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifdef DEBUG
+
+#include <linux/jiffies.h>
+
+static const struct {
+	bool result;
+	unsigned int msec_to_sleep_before;
+} expected_results[] __initconst = {
+	[0 ... PACKETS_BURSTABLE - 1] = { true, 0 },
+	[PACKETS_BURSTABLE] = { false, 0 },
+	[PACKETS_BURSTABLE + 1] = { true, MSEC_PER_SEC / PACKETS_PER_SECOND },
+	[PACKETS_BURSTABLE + 2] = { false, 0 },
+	[PACKETS_BURSTABLE + 3] = { true, (MSEC_PER_SEC / PACKETS_PER_SECOND) * 2 },
+	[PACKETS_BURSTABLE + 4] = { true, 0 },
+	[PACKETS_BURSTABLE + 5] = { false, 0 }
+};
+
+static __init unsigned int maximum_jiffies_at_index(int index)
+{
+	unsigned int total_msecs = 2 * MSEC_PER_SEC / PACKETS_PER_SECOND / 3;
+	int i;
+
+	for (i = 0; i <= index; ++i)
+		total_msecs += expected_results[i].msec_to_sleep_before;
+	return msecs_to_jiffies(total_msecs);
+}
+
+static __init int timings_test(struct sk_buff *skb4, struct iphdr *hdr4,
+			       struct sk_buff *skb6, struct ipv6hdr *hdr6,
+			       int *test)
+{
+	unsigned long loop_start_time;
+	int i;
+
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+	loop_start_time = jiffies;
+
+	for (i = 0; i < ARRAY_SIZE(expected_results); ++i) {
+		if (expected_results[i].msec_to_sleep_before)
+			msleep(expected_results[i].msec_to_sleep_before);
+
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (wg_ratelimiter_allow(skb4, &init_net) !=
+					expected_results[i].result)
+			return -EXFULL;
+		++(*test);
+
+		hdr4->saddr = htonl(ntohl(hdr4->saddr) + i + 1);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (!wg_ratelimiter_allow(skb4, &init_net))
+			return -EXFULL;
+		++(*test);
+
+		hdr4->saddr = htonl(ntohl(hdr4->saddr) - i - 1);
+
+#if IS_ENABLED(CONFIG_IPV6)
+		hdr6->saddr.in6_u.u6_addr32[2] = htonl(i);
+		hdr6->saddr.in6_u.u6_addr32[3] = htonl(i);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (wg_ratelimiter_allow(skb6, &init_net) !=
+					expected_results[i].result)
+			return -EXFULL;
+		++(*test);
+
+		hdr6->saddr.in6_u.u6_addr32[0] =
+			htonl(ntohl(hdr6->saddr.in6_u.u6_addr32[0]) + i + 1);
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+		if (!wg_ratelimiter_allow(skb6, &init_net))
+			return -EXFULL;
+		++(*test);
+
+		hdr6->saddr.in6_u.u6_addr32[0] =
+			htonl(ntohl(hdr6->saddr.in6_u.u6_addr32[0]) - i - 1);
+
+		if (time_is_before_jiffies(loop_start_time +
+					   maximum_jiffies_at_index(i)))
+			return -ETIMEDOUT;
+#endif
+	}
+	return 0;
+}
+
+static __init int capacity_test(struct sk_buff *skb4, struct iphdr *hdr4,
+				int *test)
+{
+	int i;
+
+	wg_ratelimiter_gc_entries(NULL);
+	rcu_barrier();
+
+	if (atomic_read(&total_entries))
+		return -EXFULL;
+	++(*test);
+
+	for (i = 0; i <= max_entries; ++i) {
+		hdr4->saddr = htonl(i);
+		if (wg_ratelimiter_allow(skb4, &init_net) != (i != max_entries))
+			return -EXFULL;
+		++(*test);
+	}
+	return 0;
+}
+
+bool __init wg_ratelimiter_selftest(void)
+{
+	enum { TRIALS_BEFORE_GIVING_UP = 5000 };
+	bool success = false;
+	int test = 0, trials;
+	struct sk_buff *skb4, *skb6 = NULL;
+	struct iphdr *hdr4;
+	struct ipv6hdr *hdr6 = NULL;
+
+	if (IS_ENABLED(CONFIG_KASAN) || IS_ENABLED(CONFIG_UBSAN))
+		return true;
+
+	BUILD_BUG_ON(MSEC_PER_SEC % PACKETS_PER_SECOND != 0);
+
+	if (wg_ratelimiter_init())
+		goto out;
+	++test;
+	if (wg_ratelimiter_init()) {
+		wg_ratelimiter_uninit();
+		goto out;
+	}
+	++test;
+	if (wg_ratelimiter_init()) {
+		wg_ratelimiter_uninit();
+		wg_ratelimiter_uninit();
+		goto out;
+	}
+	++test;
+
+	skb4 = alloc_skb(sizeof(struct iphdr), GFP_KERNEL);
+	if (unlikely(!skb4))
+		goto err_nofree;
+	skb4->protocol = htons(ETH_P_IP);
+	hdr4 = (struct iphdr *)skb_put(skb4, sizeof(*hdr4));
+	hdr4->saddr = htonl(8182);
+	skb_reset_network_header(skb4);
+	++test;
+
+#if IS_ENABLED(CONFIG_IPV6)
+	skb6 = alloc_skb(sizeof(struct ipv6hdr), GFP_KERNEL);
+	if (unlikely(!skb6)) {
+		kfree_skb(skb4);
+		goto err_nofree;
+	}
+	skb6->protocol = htons(ETH_P_IPV6);
+	hdr6 = (struct ipv6hdr *)skb_put(skb6, sizeof(*hdr6));
+	hdr6->saddr.in6_u.u6_addr32[0] = htonl(1212);
+	hdr6->saddr.in6_u.u6_addr32[1] = htonl(289188);
+	skb_reset_network_header(skb6);
+	++test;
+#endif
+
+	for (trials = TRIALS_BEFORE_GIVING_UP;;) {
+		int test_count = 0, ret;
+
+		ret = timings_test(skb4, hdr4, skb6, hdr6, &test_count);
+		if (ret == -ETIMEDOUT) {
+			if (!trials--) {
+				test += test_count;
+				goto err;
+			}
+			msleep(500);
+			continue;
+		} else if (ret < 0) {
+			test += test_count;
+			goto err;
+		} else {
+			test += test_count;
+			break;
+		}
+	}
+
+	for (trials = TRIALS_BEFORE_GIVING_UP;;) {
+		int test_count = 0;
+
+		if (capacity_test(skb4, hdr4, &test_count) < 0) {
+			if (!trials--) {
+				test += test_count;
+				goto err;
+			}
+			msleep(50);
+			continue;
+		}
+		test += test_count;
+		break;
+	}
+
+	success = true;
+
+err:
+	kfree_skb(skb4);
+#if IS_ENABLED(CONFIG_IPV6)
+	kfree_skb(skb6);
+#endif
+err_nofree:
+	wg_ratelimiter_uninit();
+	wg_ratelimiter_uninit();
+	wg_ratelimiter_uninit();
+	/* Uninit one extra time to check underflow detection. */
+	wg_ratelimiter_uninit();
+out:
+	if (success)
+		pr_info("ratelimiter self-tests: pass\n");
+	else
+		pr_err("ratelimiter self-test %d: FAIL\n", test);
+
+	return success;
+}
+#endif
diff --git a/drivers/net/wireguard/send.c b/drivers/net/wireguard/send.c
new file mode 100644
index 0000000..5368f7c
--- /dev/null
+++ b/drivers/net/wireguard/send.c
@@ -0,0 +1,413 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "queueing.h"
+#include "timers.h"
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "messages.h"
+#include "cookie.h"
+
+#include <linux/uio.h>
+#include <linux/inetdevice.h>
+#include <linux/socket.h>
+#include <net/ip_tunnels.h>
+#include <net/udp.h>
+#include <net/sock.h>
+
+static void wg_packet_send_handshake_initiation(struct wg_peer *peer)
+{
+	struct message_handshake_initiation packet;
+
+	if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
+				      REKEY_TIMEOUT))
+		return; /* This function is rate limited. */
+
+	atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
+	net_dbg_ratelimited("%s: Sending handshake initiation to peer %llu (%pISpfsc)\n",
+			    peer->device->dev->name, peer->internal_id,
+			    &peer->endpoint.addr);
+
+	if (wg_noise_handshake_create_initiation(&packet, &peer->handshake)) {
+		wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
+		wg_timers_any_authenticated_packet_traversal(peer);
+		wg_timers_any_authenticated_packet_sent(peer);
+		atomic64_set(&peer->last_sent_handshake,
+			     ktime_get_coarse_boottime_ns());
+		wg_socket_send_buffer_to_peer(peer, &packet, sizeof(packet),
+					      HANDSHAKE_DSCP);
+		wg_timers_handshake_initiated(peer);
+	}
+}
+
+void wg_packet_handshake_send_worker(struct work_struct *work)
+{
+	struct wg_peer *peer = container_of(work, struct wg_peer,
+					    transmit_handshake_work);
+
+	wg_packet_send_handshake_initiation(peer);
+	wg_peer_put(peer);
+}
+
+void wg_packet_send_queued_handshake_initiation(struct wg_peer *peer,
+						bool is_retry)
+{
+	if (!is_retry)
+		peer->timer_handshake_attempts = 0;
+
+	rcu_read_lock_bh();
+	/* We check last_sent_handshake here in addition to the actual function
+	 * we're queueing up, so that we don't queue things if not strictly
+	 * necessary:
+	 */
+	if (!wg_birthdate_has_expired(atomic64_read(&peer->last_sent_handshake),
+				      REKEY_TIMEOUT) ||
+			unlikely(READ_ONCE(peer->is_dead)))
+		goto out;
+
+	wg_peer_get(peer);
+	/* Queues up calling packet_send_queued_handshakes(peer), where we do a
+	 * peer_put(peer) after:
+	 */
+	if (!queue_work(peer->device->handshake_send_wq,
+			&peer->transmit_handshake_work))
+		/* If the work was already queued, we want to drop the
+		 * extra reference:
+		 */
+		wg_peer_put(peer);
+out:
+	rcu_read_unlock_bh();
+}
+
+void wg_packet_send_handshake_response(struct wg_peer *peer)
+{
+	struct message_handshake_response packet;
+
+	atomic64_set(&peer->last_sent_handshake, ktime_get_coarse_boottime_ns());
+	net_dbg_ratelimited("%s: Sending handshake response to peer %llu (%pISpfsc)\n",
+			    peer->device->dev->name, peer->internal_id,
+			    &peer->endpoint.addr);
+
+	if (wg_noise_handshake_create_response(&packet, &peer->handshake)) {
+		wg_cookie_add_mac_to_packet(&packet, sizeof(packet), peer);
+		if (wg_noise_handshake_begin_session(&peer->handshake,
+						     &peer->keypairs)) {
+			wg_timers_session_derived(peer);
+			wg_timers_any_authenticated_packet_traversal(peer);
+			wg_timers_any_authenticated_packet_sent(peer);
+			atomic64_set(&peer->last_sent_handshake,
+				     ktime_get_coarse_boottime_ns());
+			wg_socket_send_buffer_to_peer(peer, &packet,
+						      sizeof(packet),
+						      HANDSHAKE_DSCP);
+		}
+	}
+}
+
+void wg_packet_send_handshake_cookie(struct wg_device *wg,
+				     struct sk_buff *initiating_skb,
+				     __le32 sender_index)
+{
+	struct message_handshake_cookie packet;
+
+	net_dbg_skb_ratelimited("%s: Sending cookie response for denied handshake message for %pISpfsc\n",
+				wg->dev->name, initiating_skb);
+	wg_cookie_message_create(&packet, initiating_skb, sender_index,
+				 &wg->cookie_checker);
+	wg_socket_send_buffer_as_reply_to_skb(wg, initiating_skb, &packet,
+					      sizeof(packet));
+}
+
+static void keep_key_fresh(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	bool send;
+
+	rcu_read_lock_bh();
+	keypair = rcu_dereference_bh(peer->keypairs.current_keypair);
+	send = keypair && READ_ONCE(keypair->sending.is_valid) &&
+	       (atomic64_read(&keypair->sending_counter) > REKEY_AFTER_MESSAGES ||
+		(keypair->i_am_the_initiator &&
+		 wg_birthdate_has_expired(keypair->sending.birthdate, REKEY_AFTER_TIME)));
+	rcu_read_unlock_bh();
+
+	if (unlikely(send))
+		wg_packet_send_queued_handshake_initiation(peer, false);
+}
+
+static unsigned int calculate_skb_padding(struct sk_buff *skb)
+{
+	unsigned int padded_size, last_unit = skb->len;
+
+	if (unlikely(!PACKET_CB(skb)->mtu))
+		return ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE) - last_unit;
+
+	/* We do this modulo business with the MTU, just in case the networking
+	 * layer gives us a packet that's bigger than the MTU. In that case, we
+	 * wouldn't want the final subtraction to overflow in the case of the
+	 * padded_size being clamped. Fortunately, that's very rarely the case,
+	 * so we optimize for that not happening.
+	 */
+	if (unlikely(last_unit > PACKET_CB(skb)->mtu))
+		last_unit %= PACKET_CB(skb)->mtu;
+
+	padded_size = min(PACKET_CB(skb)->mtu,
+			  ALIGN(last_unit, MESSAGE_PADDING_MULTIPLE));
+	return padded_size - last_unit;
+}
+
+static bool encrypt_packet(struct sk_buff *skb, struct noise_keypair *keypair)
+{
+	unsigned int padding_len, plaintext_len, trailer_len;
+	struct scatterlist sg[MAX_SKB_FRAGS + 8];
+	struct message_data *header;
+	struct sk_buff *trailer;
+	int num_frags;
+
+	/* Force hash calculation before encryption so that flow analysis is
+	 * consistent over the inner packet.
+	 */
+	skb_get_hash(skb);
+
+	/* Calculate lengths. */
+	padding_len = calculate_skb_padding(skb);
+	trailer_len = padding_len + noise_encrypted_len(0);
+	plaintext_len = skb->len + padding_len;
+
+	/* Expand data section to have room for padding and auth tag. */
+	num_frags = skb_cow_data(skb, trailer_len, &trailer);
+	if (unlikely(num_frags < 0 || num_frags > ARRAY_SIZE(sg)))
+		return false;
+
+	/* Set the padding to zeros, and make sure it and the auth tag are part
+	 * of the skb.
+	 */
+	memset(skb_tail_pointer(trailer), 0, padding_len);
+
+	/* Expand head section to have room for our header and the network
+	 * stack's headers.
+	 */
+	if (unlikely(skb_cow_head(skb, DATA_PACKET_HEAD_ROOM) < 0))
+		return false;
+
+	/* Finalize checksum calculation for the inner packet, if required. */
+	if (unlikely(skb->ip_summed == CHECKSUM_PARTIAL &&
+		     skb_checksum_help(skb)))
+		return false;
+
+	/* Only after checksumming can we safely add on the padding at the end
+	 * and the header.
+	 */
+	skb_set_inner_network_header(skb, 0);
+	header = (struct message_data *)skb_push(skb, sizeof(*header));
+	header->header.type = cpu_to_le32(MESSAGE_DATA);
+	header->key_idx = keypair->remote_index;
+	header->counter = cpu_to_le64(PACKET_CB(skb)->nonce);
+	pskb_put(skb, trailer, trailer_len);
+
+	/* Now we can encrypt the scattergather segments */
+	sg_init_table(sg, num_frags);
+	if (skb_to_sgvec(skb, sg, sizeof(struct message_data),
+			 noise_encrypted_len(plaintext_len)) <= 0)
+		return false;
+	return chacha20poly1305_encrypt_sg_inplace(sg, plaintext_len, NULL, 0,
+						   PACKET_CB(skb)->nonce,
+						   keypair->sending.key);
+}
+
+void wg_packet_send_keepalive(struct wg_peer *peer)
+{
+	struct sk_buff *skb;
+
+	if (skb_queue_empty(&peer->staged_packet_queue)) {
+		skb = alloc_skb(DATA_PACKET_HEAD_ROOM + MESSAGE_MINIMUM_LENGTH,
+				GFP_ATOMIC);
+		if (unlikely(!skb))
+			return;
+		skb_reserve(skb, DATA_PACKET_HEAD_ROOM);
+		skb->dev = peer->device->dev;
+		PACKET_CB(skb)->mtu = skb->dev->mtu;
+		skb_queue_tail(&peer->staged_packet_queue, skb);
+		net_dbg_ratelimited("%s: Sending keepalive packet to peer %llu (%pISpfsc)\n",
+				    peer->device->dev->name, peer->internal_id,
+				    &peer->endpoint.addr);
+	}
+
+	wg_packet_send_staged_packets(peer);
+}
+
+static void wg_packet_create_data_done(struct wg_peer *peer, struct sk_buff *first)
+{
+	struct sk_buff *skb, *next;
+	bool is_keepalive, data_sent = false;
+
+	wg_timers_any_authenticated_packet_traversal(peer);
+	wg_timers_any_authenticated_packet_sent(peer);
+	skb_list_walk_safe(first, skb, next) {
+		is_keepalive = skb->len == message_data_len(0);
+		if (likely(!wg_socket_send_skb_to_peer(peer, skb,
+				PACKET_CB(skb)->ds) && !is_keepalive))
+			data_sent = true;
+	}
+
+	if (likely(data_sent))
+		wg_timers_data_sent(peer);
+
+	keep_key_fresh(peer);
+}
+
+void wg_packet_tx_worker(struct work_struct *work)
+{
+	struct wg_peer *peer = container_of(work, struct wg_peer, transmit_packet_work);
+	struct noise_keypair *keypair;
+	enum packet_state state;
+	struct sk_buff *first;
+
+	while ((first = wg_prev_queue_peek(&peer->tx_queue)) != NULL &&
+	       (state = atomic_read_acquire(&PACKET_CB(first)->state)) !=
+		       PACKET_STATE_UNCRYPTED) {
+		wg_prev_queue_drop_peeked(&peer->tx_queue);
+		keypair = PACKET_CB(first)->keypair;
+
+		if (likely(state == PACKET_STATE_CRYPTED))
+			wg_packet_create_data_done(peer, first);
+		else
+			kfree_skb_list(first);
+
+		wg_noise_keypair_put(keypair, false);
+		wg_peer_put(peer);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+void wg_packet_encrypt_worker(struct work_struct *work)
+{
+	struct crypt_queue *queue = container_of(work, struct multicore_worker,
+						 work)->ptr;
+	struct sk_buff *first, *skb, *next;
+
+	while ((first = ptr_ring_consume_bh(&queue->ring)) != NULL) {
+		enum packet_state state = PACKET_STATE_CRYPTED;
+
+		skb_list_walk_safe(first, skb, next) {
+			if (likely(encrypt_packet(skb,
+					PACKET_CB(first)->keypair))) {
+				wg_reset_packet(skb, true);
+			} else {
+				state = PACKET_STATE_DEAD;
+				break;
+			}
+		}
+		wg_queue_enqueue_per_peer_tx(first, state);
+		if (need_resched())
+			cond_resched();
+	}
+}
+
+static void wg_packet_create_data(struct wg_peer *peer, struct sk_buff *first)
+{
+	struct wg_device *wg = peer->device;
+	int ret = -EINVAL;
+
+	rcu_read_lock_bh();
+	if (unlikely(READ_ONCE(peer->is_dead)))
+		goto err;
+
+	ret = wg_queue_enqueue_per_device_and_peer(&wg->encrypt_queue, &peer->tx_queue, first,
+						   wg->packet_crypt_wq, &wg->encrypt_queue.last_cpu);
+	if (unlikely(ret == -EPIPE))
+		wg_queue_enqueue_per_peer_tx(first, PACKET_STATE_DEAD);
+err:
+	rcu_read_unlock_bh();
+	if (likely(!ret || ret == -EPIPE))
+		return;
+	wg_noise_keypair_put(PACKET_CB(first)->keypair, false);
+	wg_peer_put(peer);
+	kfree_skb_list(first);
+}
+
+void wg_packet_purge_staged_packets(struct wg_peer *peer)
+{
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	peer->device->dev->stats.tx_dropped += peer->staged_packet_queue.qlen;
+	__skb_queue_purge(&peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+}
+
+void wg_packet_send_staged_packets(struct wg_peer *peer)
+{
+	struct noise_keypair *keypair;
+	struct sk_buff_head packets;
+	struct sk_buff *skb;
+
+	/* Steal the current queue into our local one. */
+	__skb_queue_head_init(&packets);
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	skb_queue_splice_init(&peer->staged_packet_queue, &packets);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+	if (unlikely(skb_queue_empty(&packets)))
+		return;
+
+	/* First we make sure we have a valid reference to a valid key. */
+	rcu_read_lock_bh();
+	keypair = wg_noise_keypair_get(
+		rcu_dereference_bh(peer->keypairs.current_keypair));
+	rcu_read_unlock_bh();
+	if (unlikely(!keypair))
+		goto out_nokey;
+	if (unlikely(!READ_ONCE(keypair->sending.is_valid)))
+		goto out_nokey;
+	if (unlikely(wg_birthdate_has_expired(keypair->sending.birthdate,
+					      REJECT_AFTER_TIME)))
+		goto out_invalid;
+
+	/* After we know we have a somewhat valid key, we now try to assign
+	 * nonces to all of the packets in the queue. If we can't assign nonces
+	 * for all of them, we just consider it a failure and wait for the next
+	 * handshake.
+	 */
+	skb_queue_walk(&packets, skb) {
+		/* 0 for no outer TOS: no leak. TODO: at some later point, we
+		 * might consider using flowi->tos as outer instead.
+		 */
+		PACKET_CB(skb)->ds = ip_tunnel_ecn_encap(0, ip_hdr(skb), skb);
+		PACKET_CB(skb)->nonce =
+				atomic64_inc_return(&keypair->sending_counter) - 1;
+		if (unlikely(PACKET_CB(skb)->nonce >= REJECT_AFTER_MESSAGES))
+			goto out_invalid;
+	}
+
+	packets.prev->next = NULL;
+	wg_peer_get(keypair->entry.peer);
+	PACKET_CB(packets.next)->keypair = keypair;
+	wg_packet_create_data(peer, packets.next);
+	return;
+
+out_invalid:
+	WRITE_ONCE(keypair->sending.is_valid, false);
+out_nokey:
+	wg_noise_keypair_put(keypair, false);
+
+	/* We orphan the packets if we're waiting on a handshake, so that they
+	 * don't block a socket's pool.
+	 */
+	skb_queue_walk(&packets, skb)
+		skb_orphan(skb);
+	/* Then we put them back on the top of the queue. We're not too
+	 * concerned about accidentally getting things a little out of order if
+	 * packets are being added really fast, because this queue is for before
+	 * packets can even be sent and it's small anyway.
+	 */
+	spin_lock_bh(&peer->staged_packet_queue.lock);
+	skb_queue_splice(&packets, &peer->staged_packet_queue);
+	spin_unlock_bh(&peer->staged_packet_queue.lock);
+
+	/* If we're exiting because there's something wrong with the key, it
+	 * means we should initiate a new handshake.
+	 */
+	wg_packet_send_queued_handshake_initiation(peer, false);
+}
diff --git a/drivers/net/wireguard/socket.c b/drivers/net/wireguard/socket.c
new file mode 100644
index 0000000..c8cd385
--- /dev/null
+++ b/drivers/net/wireguard/socket.c
@@ -0,0 +1,436 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "device.h"
+#include "peer.h"
+#include "socket.h"
+#include "queueing.h"
+#include "messages.h"
+
+#include <linux/ctype.h>
+#include <linux/net.h>
+#include <linux/if_vlan.h>
+#include <linux/if_ether.h>
+#include <linux/inetdevice.h>
+#include <net/udp_tunnel.h>
+#include <net/ipv6.h>
+
+static int send4(struct wg_device *wg, struct sk_buff *skb,
+		 struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
+{
+	struct flowi4 fl = {
+		.saddr = endpoint->src4.s_addr,
+		.daddr = endpoint->addr4.sin_addr.s_addr,
+		.fl4_dport = endpoint->addr4.sin_port,
+		.flowi4_mark = wg->fwmark,
+		.flowi4_proto = IPPROTO_UDP
+	};
+	struct rtable *rt = NULL;
+	struct sock *sock;
+	int ret = 0;
+
+	skb_mark_not_on_list(skb);
+	skb->dev = wg->dev;
+	skb->mark = wg->fwmark;
+
+	rcu_read_lock_bh();
+	sock = rcu_dereference_bh(wg->sock4);
+
+	if (unlikely(!sock)) {
+		ret = -ENONET;
+		goto err;
+	}
+
+	fl.fl4_sport = inet_sk(sock)->inet_sport;
+
+	if (cache)
+		rt = dst_cache_get_ip4(cache, &fl.saddr);
+
+	if (!rt) {
+		security_sk_classify_flow(sock, flowi4_to_flowi(&fl));
+		if (unlikely(!inet_confirm_addr(sock_net(sock), NULL, 0,
+						fl.saddr, RT_SCOPE_HOST))) {
+			endpoint->src4.s_addr = 0;
+			*(__force __be32 *)&endpoint->src_if4 = 0;
+			fl.saddr = 0;
+			if (cache)
+				dst_cache_reset(cache);
+		}
+		rt = ip_route_output_flow(sock_net(sock), &fl, sock);
+		if (unlikely(endpoint->src_if4 && ((IS_ERR(rt) &&
+			     PTR_ERR(rt) == -EINVAL) || (!IS_ERR(rt) &&
+			     rt->dst.dev->ifindex != endpoint->src_if4)))) {
+			endpoint->src4.s_addr = 0;
+			*(__force __be32 *)&endpoint->src_if4 = 0;
+			fl.saddr = 0;
+			if (cache)
+				dst_cache_reset(cache);
+			if (!IS_ERR(rt))
+				ip_rt_put(rt);
+			rt = ip_route_output_flow(sock_net(sock), &fl, sock);
+		}
+		if (unlikely(IS_ERR(rt))) {
+			ret = PTR_ERR(rt);
+			net_dbg_ratelimited("%s: No route to %pISpfsc, error %d\n",
+					    wg->dev->name, &endpoint->addr, ret);
+			goto err;
+		}
+		if (cache)
+			dst_cache_set_ip4(cache, &rt->dst, fl.saddr);
+	}
+
+	skb->ignore_df = 1;
+	udp_tunnel_xmit_skb(rt, sock, skb, fl.saddr, fl.daddr, ds,
+			    ip4_dst_hoplimit(&rt->dst), 0, fl.fl4_sport,
+			    fl.fl4_dport, false, false);
+	goto out;
+
+err:
+	kfree_skb(skb);
+out:
+	rcu_read_unlock_bh();
+	return ret;
+}
+
+static int send6(struct wg_device *wg, struct sk_buff *skb,
+		 struct endpoint *endpoint, u8 ds, struct dst_cache *cache)
+{
+#if IS_ENABLED(CONFIG_IPV6)
+	struct flowi6 fl = {
+		.saddr = endpoint->src6,
+		.daddr = endpoint->addr6.sin6_addr,
+		.fl6_dport = endpoint->addr6.sin6_port,
+		.flowi6_mark = wg->fwmark,
+		.flowi6_oif = endpoint->addr6.sin6_scope_id,
+		.flowi6_proto = IPPROTO_UDP
+		/* TODO: addr->sin6_flowinfo */
+	};
+	struct dst_entry *dst = NULL;
+	struct sock *sock;
+	int ret = 0;
+
+	skb_mark_not_on_list(skb);
+	skb->dev = wg->dev;
+	skb->mark = wg->fwmark;
+
+	rcu_read_lock_bh();
+	sock = rcu_dereference_bh(wg->sock6);
+
+	if (unlikely(!sock)) {
+		ret = -ENONET;
+		goto err;
+	}
+
+	fl.fl6_sport = inet_sk(sock)->inet_sport;
+
+	if (cache)
+		dst = dst_cache_get_ip6(cache, &fl.saddr);
+
+	if (!dst) {
+		security_sk_classify_flow(sock, flowi6_to_flowi(&fl));
+		if (unlikely(!ipv6_addr_any(&fl.saddr) &&
+			     !ipv6_chk_addr(sock_net(sock), &fl.saddr, NULL, 0))) {
+			endpoint->src6 = fl.saddr = in6addr_any;
+			if (cache)
+				dst_cache_reset(cache);
+		}
+		dst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(sock), sock, &fl,
+						      NULL);
+		if (unlikely(IS_ERR(dst))) {
+			ret = PTR_ERR(dst);
+			net_dbg_ratelimited("%s: No route to %pISpfsc, error %d\n",
+					    wg->dev->name, &endpoint->addr, ret);
+			goto err;
+		}
+		if (cache)
+			dst_cache_set_ip6(cache, dst, &fl.saddr);
+	}
+
+	skb->ignore_df = 1;
+	udp_tunnel6_xmit_skb(dst, sock, skb, skb->dev, &fl.saddr, &fl.daddr, ds,
+			     ip6_dst_hoplimit(dst), 0, fl.fl6_sport,
+			     fl.fl6_dport, false);
+	goto out;
+
+err:
+	kfree_skb(skb);
+out:
+	rcu_read_unlock_bh();
+	return ret;
+#else
+	return -EAFNOSUPPORT;
+#endif
+}
+
+int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb, u8 ds)
+{
+	size_t skb_len = skb->len;
+	int ret = -EAFNOSUPPORT;
+
+	read_lock_bh(&peer->endpoint_lock);
+	if (peer->endpoint.addr.sa_family == AF_INET)
+		ret = send4(peer->device, skb, &peer->endpoint, ds,
+			    &peer->endpoint_cache);
+	else if (peer->endpoint.addr.sa_family == AF_INET6)
+		ret = send6(peer->device, skb, &peer->endpoint, ds,
+			    &peer->endpoint_cache);
+	else
+		dev_kfree_skb(skb);
+	if (likely(!ret))
+		peer->tx_bytes += skb_len;
+	read_unlock_bh(&peer->endpoint_lock);
+
+	return ret;
+}
+
+int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *buffer,
+				  size_t len, u8 ds)
+{
+	struct sk_buff *skb = alloc_skb(len + SKB_HEADER_LEN, GFP_ATOMIC);
+
+	if (unlikely(!skb))
+		return -ENOMEM;
+
+	skb_reserve(skb, SKB_HEADER_LEN);
+	skb_set_inner_network_header(skb, 0);
+	skb_put_data(skb, buffer, len);
+	return wg_socket_send_skb_to_peer(peer, skb, ds);
+}
+
+int wg_socket_send_buffer_as_reply_to_skb(struct wg_device *wg,
+					  struct sk_buff *in_skb, void *buffer,
+					  size_t len)
+{
+	int ret = 0;
+	struct sk_buff *skb;
+	struct endpoint endpoint;
+
+	if (unlikely(!in_skb))
+		return -EINVAL;
+	ret = wg_socket_endpoint_from_skb(&endpoint, in_skb);
+	if (unlikely(ret < 0))
+		return ret;
+
+	skb = alloc_skb(len + SKB_HEADER_LEN, GFP_ATOMIC);
+	if (unlikely(!skb))
+		return -ENOMEM;
+	skb_reserve(skb, SKB_HEADER_LEN);
+	skb_set_inner_network_header(skb, 0);
+	skb_put_data(skb, buffer, len);
+
+	if (endpoint.addr.sa_family == AF_INET)
+		ret = send4(wg, skb, &endpoint, 0, NULL);
+	else if (endpoint.addr.sa_family == AF_INET6)
+		ret = send6(wg, skb, &endpoint, 0, NULL);
+	/* No other possibilities if the endpoint is valid, which it is,
+	 * as we checked above.
+	 */
+
+	return ret;
+}
+
+int wg_socket_endpoint_from_skb(struct endpoint *endpoint,
+				const struct sk_buff *skb)
+{
+	memset(endpoint, 0, sizeof(*endpoint));
+	if (skb->protocol == htons(ETH_P_IP)) {
+		endpoint->addr4.sin_family = AF_INET;
+		endpoint->addr4.sin_port = udp_hdr(skb)->source;
+		endpoint->addr4.sin_addr.s_addr = ip_hdr(skb)->saddr;
+		endpoint->src4.s_addr = ip_hdr(skb)->daddr;
+		endpoint->src_if4 = skb->skb_iif;
+	} else if (skb->protocol == htons(ETH_P_IPV6)) {
+		endpoint->addr6.sin6_family = AF_INET6;
+		endpoint->addr6.sin6_port = udp_hdr(skb)->source;
+		endpoint->addr6.sin6_addr = ipv6_hdr(skb)->saddr;
+		endpoint->addr6.sin6_scope_id = ipv6_iface_scope_id(
+			&ipv6_hdr(skb)->saddr, skb->skb_iif);
+		endpoint->src6 = ipv6_hdr(skb)->daddr;
+	} else {
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static bool endpoint_eq(const struct endpoint *a, const struct endpoint *b)
+{
+	return (a->addr.sa_family == AF_INET && b->addr.sa_family == AF_INET &&
+		a->addr4.sin_port == b->addr4.sin_port &&
+		a->addr4.sin_addr.s_addr == b->addr4.sin_addr.s_addr &&
+		a->src4.s_addr == b->src4.s_addr && a->src_if4 == b->src_if4) ||
+	       (a->addr.sa_family == AF_INET6 &&
+		b->addr.sa_family == AF_INET6 &&
+		a->addr6.sin6_port == b->addr6.sin6_port &&
+		ipv6_addr_equal(&a->addr6.sin6_addr, &b->addr6.sin6_addr) &&
+		a->addr6.sin6_scope_id == b->addr6.sin6_scope_id &&
+		ipv6_addr_equal(&a->src6, &b->src6)) ||
+	       unlikely(!a->addr.sa_family && !b->addr.sa_family);
+}
+
+void wg_socket_set_peer_endpoint(struct wg_peer *peer,
+				 const struct endpoint *endpoint)
+{
+	/* First we check unlocked, in order to optimize, since it's pretty rare
+	 * that an endpoint will change. If we happen to be mid-write, and two
+	 * CPUs wind up writing the same thing or something slightly different,
+	 * it doesn't really matter much either.
+	 */
+	if (endpoint_eq(endpoint, &peer->endpoint))
+		return;
+	write_lock_bh(&peer->endpoint_lock);
+	if (endpoint->addr.sa_family == AF_INET) {
+		peer->endpoint.addr4 = endpoint->addr4;
+		peer->endpoint.src4 = endpoint->src4;
+		peer->endpoint.src_if4 = endpoint->src_if4;
+	} else if (endpoint->addr.sa_family == AF_INET6) {
+		peer->endpoint.addr6 = endpoint->addr6;
+		peer->endpoint.src6 = endpoint->src6;
+	} else {
+		goto out;
+	}
+	dst_cache_reset(&peer->endpoint_cache);
+out:
+	write_unlock_bh(&peer->endpoint_lock);
+}
+
+void wg_socket_set_peer_endpoint_from_skb(struct wg_peer *peer,
+					  const struct sk_buff *skb)
+{
+	struct endpoint endpoint;
+
+	if (!wg_socket_endpoint_from_skb(&endpoint, skb))
+		wg_socket_set_peer_endpoint(peer, &endpoint);
+}
+
+void wg_socket_clear_peer_endpoint_src(struct wg_peer *peer)
+{
+	write_lock_bh(&peer->endpoint_lock);
+	memset(&peer->endpoint.src6, 0, sizeof(peer->endpoint.src6));
+	dst_cache_reset(&peer->endpoint_cache);
+	write_unlock_bh(&peer->endpoint_lock);
+}
+
+static int wg_receive(struct sock *sk, struct sk_buff *skb)
+{
+	struct wg_device *wg;
+
+	if (unlikely(!sk))
+		goto err;
+	wg = sk->sk_user_data;
+	if (unlikely(!wg))
+		goto err;
+	skb_mark_not_on_list(skb);
+	wg_packet_receive(wg, skb);
+	return 0;
+
+err:
+	kfree_skb(skb);
+	return 0;
+}
+
+static void sock_free(struct sock *sock)
+{
+	if (unlikely(!sock))
+		return;
+	sk_clear_memalloc(sock);
+	udp_tunnel_sock_release(sock->sk_socket);
+}
+
+static void set_sock_opts(struct socket *sock)
+{
+	sock->sk->sk_allocation = GFP_ATOMIC;
+	sock->sk->sk_sndbuf = INT_MAX;
+	sk_set_memalloc(sock->sk);
+}
+
+int wg_socket_init(struct wg_device *wg, u16 port)
+{
+	struct net *net;
+	int ret;
+	struct udp_tunnel_sock_cfg cfg = {
+		.sk_user_data = wg,
+		.encap_type = 1,
+		.encap_rcv = wg_receive
+	};
+	struct socket *new4 = NULL, *new6 = NULL;
+	struct udp_port_cfg port4 = {
+		.family = AF_INET,
+		.local_ip.s_addr = htonl(INADDR_ANY),
+		.local_udp_port = htons(port),
+		.use_udp_checksums = true
+	};
+#if IS_ENABLED(CONFIG_IPV6)
+	int retries = 0;
+	struct udp_port_cfg port6 = {
+		.family = AF_INET6,
+		.local_ip6 = IN6ADDR_ANY_INIT,
+		.use_udp6_tx_checksums = true,
+		.use_udp6_rx_checksums = true,
+		.ipv6_v6only = true
+	};
+#endif
+
+	rcu_read_lock();
+	net = rcu_dereference(wg->creating_net);
+	net = net ? maybe_get_net(net) : NULL;
+	rcu_read_unlock();
+	if (unlikely(!net))
+		return -ENONET;
+
+#if IS_ENABLED(CONFIG_IPV6)
+retry:
+#endif
+
+	ret = udp_sock_create(net, &port4, &new4);
+	if (ret < 0) {
+		pr_err("%s: Could not create IPv4 socket\n", wg->dev->name);
+		goto out;
+	}
+	set_sock_opts(new4);
+	setup_udp_tunnel_sock(net, new4, &cfg);
+
+#if IS_ENABLED(CONFIG_IPV6)
+	if (ipv6_mod_enabled()) {
+		port6.local_udp_port = inet_sk(new4->sk)->inet_sport;
+		ret = udp_sock_create(net, &port6, &new6);
+		if (ret < 0) {
+			udp_tunnel_sock_release(new4);
+			if (ret == -EADDRINUSE && !port && retries++ < 100)
+				goto retry;
+			pr_err("%s: Could not create IPv6 socket\n",
+			       wg->dev->name);
+			goto out;
+		}
+		set_sock_opts(new6);
+		setup_udp_tunnel_sock(net, new6, &cfg);
+	}
+#endif
+
+	wg_socket_reinit(wg, new4->sk, new6 ? new6->sk : NULL);
+	ret = 0;
+out:
+	put_net(net);
+	return ret;
+}
+
+void wg_socket_reinit(struct wg_device *wg, struct sock *new4,
+		      struct sock *new6)
+{
+	struct sock *old4, *old6;
+
+	mutex_lock(&wg->socket_update_lock);
+	old4 = rcu_dereference_protected(wg->sock4,
+				lockdep_is_held(&wg->socket_update_lock));
+	old6 = rcu_dereference_protected(wg->sock6,
+				lockdep_is_held(&wg->socket_update_lock));
+	rcu_assign_pointer(wg->sock4, new4);
+	rcu_assign_pointer(wg->sock6, new6);
+	if (new4)
+		wg->incoming_port = ntohs(inet_sk(new4)->inet_sport);
+	mutex_unlock(&wg->socket_update_lock);
+	synchronize_net();
+	sock_free(old4);
+	sock_free(old6);
+}
diff --git a/drivers/net/wireguard/socket.h b/drivers/net/wireguard/socket.h
new file mode 100644
index 0000000..bab5848
--- /dev/null
+++ b/drivers/net/wireguard/socket.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_SOCKET_H
+#define _WG_SOCKET_H
+
+#include <linux/netdevice.h>
+#include <linux/udp.h>
+#include <linux/if_vlan.h>
+#include <linux/if_ether.h>
+
+int wg_socket_init(struct wg_device *wg, u16 port);
+void wg_socket_reinit(struct wg_device *wg, struct sock *new4,
+		      struct sock *new6);
+int wg_socket_send_buffer_to_peer(struct wg_peer *peer, void *data,
+				  size_t len, u8 ds);
+int wg_socket_send_skb_to_peer(struct wg_peer *peer, struct sk_buff *skb,
+			       u8 ds);
+int wg_socket_send_buffer_as_reply_to_skb(struct wg_device *wg,
+					  struct sk_buff *in_skb,
+					  void *out_buffer, size_t len);
+
+int wg_socket_endpoint_from_skb(struct endpoint *endpoint,
+				const struct sk_buff *skb);
+void wg_socket_set_peer_endpoint(struct wg_peer *peer,
+				 const struct endpoint *endpoint);
+void wg_socket_set_peer_endpoint_from_skb(struct wg_peer *peer,
+					  const struct sk_buff *skb);
+void wg_socket_clear_peer_endpoint_src(struct wg_peer *peer);
+
+#if defined(CONFIG_DYNAMIC_DEBUG) || defined(DEBUG)
+#define net_dbg_skb_ratelimited(fmt, dev, skb, ...) do {                       \
+		struct endpoint __endpoint;                                    \
+		wg_socket_endpoint_from_skb(&__endpoint, skb);                 \
+		net_dbg_ratelimited(fmt, dev, &__endpoint.addr,                \
+				    ##__VA_ARGS__);                            \
+	} while (0)
+#else
+#define net_dbg_skb_ratelimited(fmt, skb, ...)
+#endif
+
+#endif /* _WG_SOCKET_H */
diff --git a/drivers/net/wireguard/timers.c b/drivers/net/wireguard/timers.c
new file mode 100644
index 0000000..d54d32a
--- /dev/null
+++ b/drivers/net/wireguard/timers.c
@@ -0,0 +1,243 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include "timers.h"
+#include "device.h"
+#include "peer.h"
+#include "queueing.h"
+#include "socket.h"
+
+/*
+ * - Timer for retransmitting the handshake if we don't hear back after
+ * `REKEY_TIMEOUT + jitter` ms.
+ *
+ * - Timer for sending empty packet if we have received a packet but after have
+ * not sent one for `KEEPALIVE_TIMEOUT` ms.
+ *
+ * - Timer for initiating new handshake if we have sent a packet but after have
+ * not received one (even empty) for `(KEEPALIVE_TIMEOUT + REKEY_TIMEOUT) +
+ * jitter` ms.
+ *
+ * - Timer for zeroing out all ephemeral keys after `(REJECT_AFTER_TIME * 3)` ms
+ * if no new keys have been received.
+ *
+ * - Timer for, if enabled, sending an empty authenticated packet every user-
+ * specified seconds.
+ */
+
+static inline void mod_peer_timer(struct wg_peer *peer,
+				  struct timer_list *timer,
+				  unsigned long expires)
+{
+	rcu_read_lock_bh();
+	if (likely(netif_running(peer->device->dev) &&
+		   !READ_ONCE(peer->is_dead)))
+		mod_timer(timer, expires);
+	rcu_read_unlock_bh();
+}
+
+static void wg_expired_retransmit_handshake(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer,
+					  timer_retransmit_handshake);
+
+	if (peer->timer_handshake_attempts > MAX_TIMER_HANDSHAKES) {
+		pr_debug("%s: Handshake for peer %llu (%pISpfsc) did not complete after %d attempts, giving up\n",
+			 peer->device->dev->name, peer->internal_id,
+			 &peer->endpoint.addr, MAX_TIMER_HANDSHAKES + 2);
+
+		del_timer(&peer->timer_send_keepalive);
+		/* We drop all packets without a keypair and don't try again,
+		 * if we try unsuccessfully for too long to make a handshake.
+		 */
+		wg_packet_purge_staged_packets(peer);
+
+		/* We set a timer for destroying any residue that might be left
+		 * of a partial exchange.
+		 */
+		if (!timer_pending(&peer->timer_zero_key_material))
+			mod_peer_timer(peer, &peer->timer_zero_key_material,
+				       jiffies + REJECT_AFTER_TIME * 3 * HZ);
+	} else {
+		++peer->timer_handshake_attempts;
+		pr_debug("%s: Handshake for peer %llu (%pISpfsc) did not complete after %d seconds, retrying (try %d)\n",
+			 peer->device->dev->name, peer->internal_id,
+			 &peer->endpoint.addr, REKEY_TIMEOUT,
+			 peer->timer_handshake_attempts + 1);
+
+		/* We clear the endpoint address src address, in case this is
+		 * the cause of trouble.
+		 */
+		wg_socket_clear_peer_endpoint_src(peer);
+
+		wg_packet_send_queued_handshake_initiation(peer, true);
+	}
+}
+
+static void wg_expired_send_keepalive(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_send_keepalive);
+
+	wg_packet_send_keepalive(peer);
+	if (peer->timer_need_another_keepalive) {
+		peer->timer_need_another_keepalive = false;
+		mod_peer_timer(peer, &peer->timer_send_keepalive,
+			       jiffies + KEEPALIVE_TIMEOUT * HZ);
+	}
+}
+
+static void wg_expired_new_handshake(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_new_handshake);
+
+	pr_debug("%s: Retrying handshake with peer %llu (%pISpfsc) because we stopped hearing back after %d seconds\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr, KEEPALIVE_TIMEOUT + REKEY_TIMEOUT);
+	/* We clear the endpoint address src address, in case this is the cause
+	 * of trouble.
+	 */
+	wg_socket_clear_peer_endpoint_src(peer);
+	wg_packet_send_queued_handshake_initiation(peer, false);
+}
+
+static void wg_expired_zero_key_material(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer, timer_zero_key_material);
+
+	rcu_read_lock_bh();
+	if (!READ_ONCE(peer->is_dead)) {
+		wg_peer_get(peer);
+		if (!queue_work(peer->device->handshake_send_wq,
+				&peer->clear_peer_work))
+			/* If the work was already on the queue, we want to drop
+			 * the extra reference.
+			 */
+			wg_peer_put(peer);
+	}
+	rcu_read_unlock_bh();
+}
+
+static void wg_queued_expired_zero_key_material(struct work_struct *work)
+{
+	struct wg_peer *peer = container_of(work, struct wg_peer,
+					    clear_peer_work);
+
+	pr_debug("%s: Zeroing out all keys for peer %llu (%pISpfsc), since we haven't received a new one in %d seconds\n",
+		 peer->device->dev->name, peer->internal_id,
+		 &peer->endpoint.addr, REJECT_AFTER_TIME * 3);
+	wg_noise_handshake_clear(&peer->handshake);
+	wg_noise_keypairs_clear(&peer->keypairs);
+	wg_peer_put(peer);
+}
+
+static void wg_expired_send_persistent_keepalive(struct timer_list *timer)
+{
+	struct wg_peer *peer = from_timer(peer, timer,
+					  timer_persistent_keepalive);
+
+	if (likely(peer->persistent_keepalive_interval))
+		wg_packet_send_keepalive(peer);
+}
+
+/* Should be called after an authenticated data packet is sent. */
+void wg_timers_data_sent(struct wg_peer *peer)
+{
+	if (!timer_pending(&peer->timer_new_handshake))
+		mod_peer_timer(peer, &peer->timer_new_handshake,
+			jiffies + (KEEPALIVE_TIMEOUT + REKEY_TIMEOUT) * HZ +
+			prandom_u32_max(REKEY_TIMEOUT_JITTER_MAX_JIFFIES));
+}
+
+/* Should be called after an authenticated data packet is received. */
+void wg_timers_data_received(struct wg_peer *peer)
+{
+	if (likely(netif_running(peer->device->dev))) {
+		if (!timer_pending(&peer->timer_send_keepalive))
+			mod_peer_timer(peer, &peer->timer_send_keepalive,
+				       jiffies + KEEPALIVE_TIMEOUT * HZ);
+		else
+			peer->timer_need_another_keepalive = true;
+	}
+}
+
+/* Should be called after any type of authenticated packet is sent, whether
+ * keepalive, data, or handshake.
+ */
+void wg_timers_any_authenticated_packet_sent(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_send_keepalive);
+}
+
+/* Should be called after any type of authenticated packet is received, whether
+ * keepalive, data, or handshake.
+ */
+void wg_timers_any_authenticated_packet_received(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_new_handshake);
+}
+
+/* Should be called after a handshake initiation message is sent. */
+void wg_timers_handshake_initiated(struct wg_peer *peer)
+{
+	mod_peer_timer(peer, &peer->timer_retransmit_handshake,
+		       jiffies + REKEY_TIMEOUT * HZ +
+		       prandom_u32_max(REKEY_TIMEOUT_JITTER_MAX_JIFFIES));
+}
+
+/* Should be called after a handshake response message is received and processed
+ * or when getting key confirmation via the first data message.
+ */
+void wg_timers_handshake_complete(struct wg_peer *peer)
+{
+	del_timer(&peer->timer_retransmit_handshake);
+	peer->timer_handshake_attempts = 0;
+	peer->sent_lastminute_handshake = false;
+	ktime_get_real_ts64(&peer->walltime_last_handshake);
+}
+
+/* Should be called after an ephemeral key is created, which is before sending a
+ * handshake response or after receiving a handshake response.
+ */
+void wg_timers_session_derived(struct wg_peer *peer)
+{
+	mod_peer_timer(peer, &peer->timer_zero_key_material,
+		       jiffies + REJECT_AFTER_TIME * 3 * HZ);
+}
+
+/* Should be called before a packet with authentication, whether
+ * keepalive, data, or handshakem is sent, or after one is received.
+ */
+void wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer)
+{
+	if (peer->persistent_keepalive_interval)
+		mod_peer_timer(peer, &peer->timer_persistent_keepalive,
+			jiffies + peer->persistent_keepalive_interval * HZ);
+}
+
+void wg_timers_init(struct wg_peer *peer)
+{
+	timer_setup(&peer->timer_retransmit_handshake,
+		    wg_expired_retransmit_handshake, 0);
+	timer_setup(&peer->timer_send_keepalive, wg_expired_send_keepalive, 0);
+	timer_setup(&peer->timer_new_handshake, wg_expired_new_handshake, 0);
+	timer_setup(&peer->timer_zero_key_material,
+		    wg_expired_zero_key_material, 0);
+	timer_setup(&peer->timer_persistent_keepalive,
+		    wg_expired_send_persistent_keepalive, 0);
+	INIT_WORK(&peer->clear_peer_work, wg_queued_expired_zero_key_material);
+	peer->timer_handshake_attempts = 0;
+	peer->sent_lastminute_handshake = false;
+	peer->timer_need_another_keepalive = false;
+}
+
+void wg_timers_stop(struct wg_peer *peer)
+{
+	del_timer_sync(&peer->timer_retransmit_handshake);
+	del_timer_sync(&peer->timer_send_keepalive);
+	del_timer_sync(&peer->timer_new_handshake);
+	del_timer_sync(&peer->timer_zero_key_material);
+	del_timer_sync(&peer->timer_persistent_keepalive);
+	flush_work(&peer->clear_peer_work);
+}
diff --git a/drivers/net/wireguard/timers.h b/drivers/net/wireguard/timers.h
new file mode 100644
index 0000000..f0653dc
--- /dev/null
+++ b/drivers/net/wireguard/timers.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _WG_TIMERS_H
+#define _WG_TIMERS_H
+
+#include <linux/ktime.h>
+
+struct wg_peer;
+
+void wg_timers_init(struct wg_peer *peer);
+void wg_timers_stop(struct wg_peer *peer);
+void wg_timers_data_sent(struct wg_peer *peer);
+void wg_timers_data_received(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_sent(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_received(struct wg_peer *peer);
+void wg_timers_handshake_initiated(struct wg_peer *peer);
+void wg_timers_handshake_complete(struct wg_peer *peer);
+void wg_timers_session_derived(struct wg_peer *peer);
+void wg_timers_any_authenticated_packet_traversal(struct wg_peer *peer);
+
+static inline bool wg_birthdate_has_expired(u64 birthday_nanoseconds,
+					    u64 expiration_seconds)
+{
+	return (s64)(birthday_nanoseconds + expiration_seconds * NSEC_PER_SEC)
+		<= (s64)ktime_get_coarse_boottime_ns();
+}
+
+#endif /* _WG_TIMERS_H */
diff --git a/drivers/net/wireguard/version.h b/drivers/net/wireguard/version.h
new file mode 100644
index 0000000..a1a269a
--- /dev/null
+++ b/drivers/net/wireguard/version.h
@@ -0,0 +1 @@
+#define WIREGUARD_VERSION "1.0.0"
diff --git a/drivers/net/wireless/ath/ath10k/qmi.c b/drivers/net/wireless/ath/ath10k/qmi.c
index 545ac1f..86fde22 100644
--- a/drivers/net/wireless/ath/ath10k/qmi.c
+++ b/drivers/net/wireless/ath/ath10k/qmi.c
@@ -746,6 +746,13 @@
 	if (ret)
 		return;
 
+	/*
+	 * HACK: sleep for a while inbetween receiving the msa info response
+	 * and the XPU update to prevent SDM845 from crashing due to a security
+	 * violation, when running MPSS.AT.4.0.c2-01184-SDM845_GEN_PACK-1.
+	 */
+	msleep(20);
+
 	ret = ath10k_qmi_setup_msa_permissions(qmi);
 	if (ret)
 		return;
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 598c1fb..579bfa2 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -907,7 +907,6 @@
 void wil_netif_rx(struct sk_buff *skb, struct net_device *ndev, int cid,
 		  struct wil_net_stats *stats, bool gro)
 {
-	gro_result_t rc = GRO_NORMAL;
 	struct wil6210_vif *vif = ndev_to_vif(ndev);
 	struct wil6210_priv *wil = ndev_to_wil(ndev);
 	struct wireless_dev *wdev = vif_to_wdev(vif);
@@ -918,22 +917,16 @@
 	 */
 	int mcast = is_multicast_ether_addr(da);
 	struct sk_buff *xmit_skb = NULL;
-	static const char * const gro_res_str[] = {
-		[GRO_MERGED]		= "GRO_MERGED",
-		[GRO_MERGED_FREE]	= "GRO_MERGED_FREE",
-		[GRO_HELD]		= "GRO_HELD",
-		[GRO_NORMAL]		= "GRO_NORMAL",
-		[GRO_DROP]		= "GRO_DROP",
-		[GRO_CONSUMED]		= "GRO_CONSUMED",
-	};
 
 	if (wdev->iftype == NL80211_IFTYPE_STATION) {
 		sa = wil_skb_get_sa(skb);
 		if (mcast && ether_addr_equal(sa, ndev->dev_addr)) {
 			/* mcast packet looped back to us */
-			rc = GRO_DROP;
 			dev_kfree_skb(skb);
-			goto stats;
+			ndev->stats.rx_dropped++;
+			stats->rx_dropped++;
+			wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
+			return;
 		}
 	} else if (wdev->iftype == NL80211_IFTYPE_AP && !vif->ap_isolate) {
 		if (mcast) {
@@ -977,26 +970,16 @@
 			wil_rx_handle_eapol(vif, skb);
 
 		if (gro)
-			rc = napi_gro_receive(&wil->napi_rx, skb);
+			napi_gro_receive(&wil->napi_rx, skb);
 		else
 			netif_rx_ni(skb);
-		wil_dbg_txrx(wil, "Rx complete %d bytes => %s\n",
-			     len, gro_res_str[rc]);
 	}
-stats:
-	/* statistics. rc set to GRO_NORMAL for AP bridging */
-	if (unlikely(rc == GRO_DROP)) {
-		ndev->stats.rx_dropped++;
-		stats->rx_dropped++;
-		wil_dbg_txrx(wil, "Rx drop %d bytes\n", len);
-	} else {
-		ndev->stats.rx_packets++;
-		stats->rx_packets++;
-		ndev->stats.rx_bytes += len;
-		stats->rx_bytes += len;
-		if (mcast)
-			ndev->stats.multicast++;
-	}
+	ndev->stats.rx_packets++;
+	stats->rx_packets++;
+	ndev->stats.rx_bytes += len;
+	stats->rx_bytes += len;
+	if (mcast)
+		ndev->stats.multicast++;
 }
 
 void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 07b070b..9585908 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -4,7 +4,7 @@
  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
  * Copyright (c) 2016 - 2017 Intel Deutschland GmbH
- * Copyright (C) 2018 Intel Corporation
+ * Copyright (C) 2018 - 2020 Intel Corporation
  */
 
 /*
@@ -33,6 +33,9 @@
 #include <net/netns/generic.h>
 #include <linux/rhashtable.h>
 #include <linux/nospec.h>
+#include <linux/virtio.h>
+#include <linux/virtio_ids.h>
+#include <linux/virtio_config.h>
 #include "mac80211_hwsim.h"
 
 #define WARN_QUEUE 100
@@ -62,6 +65,10 @@
 module_param(support_p2p_device, bool, 0444);
 MODULE_PARM_DESC(support_p2p_device, "Support P2P-Device interface type");
 
+static ushort mac_prefix;
+module_param(mac_prefix, ushort, 0444);
+MODULE_PARM_DESC(mac_prefix, "Second and third most significant octets in MAC");
+
 /**
  * enum hwsim_regtest - the type of regulatory tests we offer
  *
@@ -492,6 +499,7 @@
 	u32 ciphers[ARRAY_SIZE(hwsim_ciphers)];
 
 	struct mac_address addresses[2];
+	struct ieee80211_chanctx_conf *chanctx;
 	int channels, idx;
 	bool use_chanctx;
 	bool destroy_on_close;
@@ -595,14 +603,14 @@
 /* MAC80211_HWSIM netlink policy */
 
 static const struct nla_policy hwsim_genl_policy[HWSIM_ATTR_MAX + 1] = {
-	[HWSIM_ATTR_ADDR_RECEIVER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
-	[HWSIM_ATTR_ADDR_TRANSMITTER] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
+	[HWSIM_ATTR_ADDR_RECEIVER] = NLA_POLICY_ETH_ADDR_COMPAT,
+	[HWSIM_ATTR_ADDR_TRANSMITTER] = NLA_POLICY_ETH_ADDR_COMPAT,
 	[HWSIM_ATTR_FRAME] = { .type = NLA_BINARY,
 			       .len = IEEE80211_MAX_DATA_LEN },
 	[HWSIM_ATTR_FLAGS] = { .type = NLA_U32 },
 	[HWSIM_ATTR_RX_RATE] = { .type = NLA_U32 },
 	[HWSIM_ATTR_SIGNAL] = { .type = NLA_U32 },
-	[HWSIM_ATTR_TX_INFO] = { .type = NLA_UNSPEC,
+	[HWSIM_ATTR_TX_INFO] = { .type = NLA_BINARY,
 				 .len = IEEE80211_TX_MAX_RATES *
 					sizeof(struct hwsim_tx_rate)},
 	[HWSIM_ATTR_COOKIE] = { .type = NLA_U64 },
@@ -612,15 +620,61 @@
 	[HWSIM_ATTR_REG_CUSTOM_REG] = { .type = NLA_U32 },
 	[HWSIM_ATTR_REG_STRICT_REG] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_SUPPORT_P2P_DEVICE] = { .type = NLA_FLAG },
+	[HWSIM_ATTR_USE_CHANCTX] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_DESTROY_RADIO_ON_CLOSE] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_RADIO_NAME] = { .type = NLA_STRING },
 	[HWSIM_ATTR_NO_VIF] = { .type = NLA_FLAG },
 	[HWSIM_ATTR_FREQ] = { .type = NLA_U32 },
-	[HWSIM_ATTR_PERM_ADDR] = { .type = NLA_UNSPEC, .len = ETH_ALEN },
+	[HWSIM_ATTR_TX_INFO_FLAGS] = { .type = NLA_BINARY },
+	[HWSIM_ATTR_PERM_ADDR] = NLA_POLICY_ETH_ADDR_COMPAT,
 	[HWSIM_ATTR_IFTYPE_SUPPORT] = { .type = NLA_U32 },
 	[HWSIM_ATTR_CIPHER_SUPPORT] = { .type = NLA_BINARY },
 };
 
+#if IS_REACHABLE(CONFIG_VIRTIO)
+
+/* MAC80211_HWSIM virtio queues */
+static struct virtqueue *hwsim_vqs[HWSIM_NUM_VQS];
+static bool hwsim_virtio_enabled;
+static spinlock_t hwsim_virtio_lock;
+
+static void hwsim_virtio_rx_work(struct work_struct *work);
+static DECLARE_WORK(hwsim_virtio_rx, hwsim_virtio_rx_work);
+
+static int hwsim_tx_virtio(struct mac80211_hwsim_data *data,
+			   struct sk_buff *skb)
+{
+	struct scatterlist sg[1];
+	unsigned long flags;
+	int err;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled) {
+		err = -ENODEV;
+		goto out_free;
+	}
+
+	sg_init_one(sg, skb->head, skb_end_offset(skb));
+	err = virtqueue_add_outbuf(hwsim_vqs[HWSIM_VQ_TX], sg, 1, skb,
+				   GFP_ATOMIC);
+	if (err)
+		goto out_free;
+	virtqueue_kick(hwsim_vqs[HWSIM_VQ_TX]);
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+	return 0;
+
+out_free:
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+	nlmsg_free(skb);
+	return err;
+}
+#else
+/* cause a linker error if this ends up being needed */
+extern int hwsim_tx_virtio(struct mac80211_hwsim_data *data,
+			   struct sk_buff *skb);
+#define hwsim_virtio_enabled false
+#endif
+
 static void mac80211_hwsim_tx_frame(struct ieee80211_hw *hw,
 				    struct sk_buff *skb,
 				    struct ieee80211_channel *chan);
@@ -1033,7 +1087,8 @@
 
 static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
 				       struct sk_buff *my_skb,
-				       int dst_portid)
+				       int dst_portid,
+				       struct ieee80211_channel *channel)
 {
 	struct sk_buff *skb;
 	struct mac80211_hwsim_data *data = hw->priv;
@@ -1088,7 +1143,7 @@
 	if (nla_put_u32(skb, HWSIM_ATTR_FLAGS, hwsim_flags))
 		goto nla_put_failure;
 
-	if (nla_put_u32(skb, HWSIM_ATTR_FREQ, data->channel->center_freq))
+	if (nla_put_u32(skb, HWSIM_ATTR_FREQ, channel->center_freq))
 		goto nla_put_failure;
 
 	/* We get the tx control (rate and retries) info*/
@@ -1120,8 +1175,14 @@
 		goto nla_put_failure;
 
 	genlmsg_end(skb, msg_head);
-	if (hwsim_unicast_netgroup(data, skb, dst_portid))
-		goto err_free_txskb;
+
+	if (hwsim_virtio_enabled) {
+		if (hwsim_tx_virtio(data, skb))
+			goto err_free_txskb;
+	} else {
+		if (hwsim_unicast_netgroup(data, skb, dst_portid))
+			goto err_free_txskb;
+	}
 
 	/* Enqueue the packet */
 	skb_queue_tail(&data->pending, my_skb);
@@ -1423,8 +1484,8 @@
 	/* wmediumd mode check */
 	_portid = READ_ONCE(data->wmediumd);
 
-	if (_portid)
-		return mac80211_hwsim_tx_frame_nl(hw, skb, _portid);
+	if (_portid || hwsim_virtio_enabled)
+		return mac80211_hwsim_tx_frame_nl(hw, skb, _portid, channel);
 
 	/* NO wmediumd detected, perfect medium simulation */
 	data->tx_pkts++;
@@ -1534,8 +1595,8 @@
 
 	mac80211_hwsim_monitor_rx(hw, skb, chan);
 
-	if (_pid)
-		return mac80211_hwsim_tx_frame_nl(hw, skb, _pid);
+	if (_pid || hwsim_virtio_enabled)
+		return mac80211_hwsim_tx_frame_nl(hw, skb, _pid, chan);
 
 	mac80211_hwsim_tx_frame_no_nl(hw, skb, chan);
 	dev_kfree_skb(skb);
@@ -2241,6 +2302,11 @@
 static int mac80211_hwsim_add_chanctx(struct ieee80211_hw *hw,
 				      struct ieee80211_chanctx_conf *ctx)
 {
+	struct mac80211_hwsim_data *hwsim = hw->priv;
+
+	mutex_lock(&hwsim->mutex);
+	hwsim->chanctx = ctx;
+	mutex_unlock(&hwsim->mutex);
 	hwsim_set_chanctx_magic(ctx);
 	wiphy_dbg(hw->wiphy,
 		  "add channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
@@ -2252,6 +2318,11 @@
 static void mac80211_hwsim_remove_chanctx(struct ieee80211_hw *hw,
 					  struct ieee80211_chanctx_conf *ctx)
 {
+	struct mac80211_hwsim_data *hwsim = hw->priv;
+
+	mutex_lock(&hwsim->mutex);
+	hwsim->chanctx = NULL;
+	mutex_unlock(&hwsim->mutex);
 	wiphy_dbg(hw->wiphy,
 		  "remove channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
 		  ctx->def.chan->center_freq, ctx->def.width,
@@ -2264,6 +2335,11 @@
 					  struct ieee80211_chanctx_conf *ctx,
 					  u32 changed)
 {
+	struct mac80211_hwsim_data *hwsim = hw->priv;
+
+	mutex_lock(&hwsim->mutex);
+	hwsim->chanctx = ctx;
+	mutex_unlock(&hwsim->mutex);
 	hwsim_check_chanctx_magic(ctx);
 	wiphy_dbg(hw->wiphy,
 		  "change channel context control: %d MHz/width: %d/cfreqs:%d/%d MHz\n",
@@ -2793,6 +2869,8 @@
 	if (!param->perm_addr) {
 		eth_zero_addr(addr);
 		addr[0] = 0x02;
+		addr[1] = (mac_prefix >> 8) & 0xFF;
+		addr[2] = mac_prefix & 0xFF;
 		addr[3] = idx >> 8;
 		addr[4] = idx;
 		memcpy(data->addresses[0].addr, addr, ETH_ALEN);
@@ -2849,6 +2927,7 @@
 		hw->wiphy->max_remain_on_channel_duration = 1000;
 		data->if_combination.radar_detect_widths = 0;
 		data->if_combination.num_different_channels = data->channels;
+		data->chanctx = NULL;
 	} else {
 		data->if_combination.num_different_channels = 1;
 		data->if_combination.radar_detect_widths =
@@ -3265,11 +3344,14 @@
 	if (!data2)
 		goto out;
 
-	if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
-		goto out;
+	if (!hwsim_virtio_enabled) {
+		if (hwsim_net_get_netgroup(genl_info_net(info)) !=
+		    data2->netgroup)
+			goto out;
 
-	if (info->snd_portid != data2->wmediumd)
-		goto out;
+		if (info->snd_portid != data2->wmediumd)
+			goto out;
+	}
 
 	/* look for the skb matching the cookie passed back from user */
 	skb_queue_walk_safe(&data2->pending, skb, tmp) {
@@ -3333,6 +3415,7 @@
 	int frame_data_len;
 	void *frame_data;
 	struct sk_buff *skb = NULL;
+	struct ieee80211_channel *channel = NULL;
 
 	if (!info->attrs[HWSIM_ATTR_ADDR_RECEIVER] ||
 	    !info->attrs[HWSIM_ATTR_FRAME] ||
@@ -3359,15 +3442,29 @@
 	if (!data2)
 		goto out;
 
-	if (hwsim_net_get_netgroup(genl_info_net(info)) != data2->netgroup)
+	if (data2->use_chanctx) {
+		if (data2->tmp_chan)
+			channel = data2->tmp_chan;
+		else if (data2->chanctx)
+			channel = data2->chanctx->def.chan;
+	} else {
+		channel = data2->channel;
+	}
+	if (!channel)
 		goto out;
 
-	if (info->snd_portid != data2->wmediumd)
-		goto out;
+	if (!hwsim_virtio_enabled) {
+		if (hwsim_net_get_netgroup(genl_info_net(info)) !=
+		    data2->netgroup)
+			goto out;
+
+		if (info->snd_portid != data2->wmediumd)
+			goto out;
+	}
 
 	/* check if radio is configured properly */
 
-	if (data2->idle || !data2->started)
+	if ((data2->idle && !data2->tmp_chan) || !data2->started)
 		goto out;
 
 	/* A frame is received from user space */
@@ -3380,18 +3477,16 @@
 		mutex_lock(&data2->mutex);
 		rx_status.freq = nla_get_u32(info->attrs[HWSIM_ATTR_FREQ]);
 
-		if (rx_status.freq != data2->channel->center_freq &&
-		    (!data2->tmp_chan ||
-		     rx_status.freq != data2->tmp_chan->center_freq)) {
+		if (rx_status.freq != channel->center_freq) {
 			mutex_unlock(&data2->mutex);
 			goto out;
 		}
 		mutex_unlock(&data2->mutex);
 	} else {
-		rx_status.freq = data2->channel->center_freq;
+		rx_status.freq = channel->center_freq;
 	}
 
-	rx_status.band = data2->channel->band;
+	rx_status.band = channel->band;
 	rx_status.rate_idx = nla_get_u32(info->attrs[HWSIM_ATTR_RX_RATE]);
 	rx_status.signal = nla_get_u32(info->attrs[HWSIM_ATTR_SIGNAL]);
 
@@ -3904,6 +3999,229 @@
 	genl_unregister_family(&hwsim_genl_family);
 }
 
+#if IS_REACHABLE(CONFIG_VIRTIO)
+static void hwsim_virtio_tx_done(struct virtqueue *vq)
+{
+	unsigned int len;
+	struct sk_buff *skb;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	while ((skb = virtqueue_get_buf(vq, &len)))
+		nlmsg_free(skb);
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+}
+
+static int hwsim_virtio_handle_cmd(struct sk_buff *skb)
+{
+	struct nlmsghdr *nlh;
+	struct genlmsghdr *gnlh;
+	struct nlattr *tb[HWSIM_ATTR_MAX + 1];
+	struct genl_info info = {};
+	int err;
+
+	nlh = nlmsg_hdr(skb);
+	gnlh = nlmsg_data(nlh);
+	err = genlmsg_parse(nlh, &hwsim_genl_family, tb, HWSIM_ATTR_MAX,
+			    hwsim_genl_policy, NULL);
+	if (err) {
+		pr_err_ratelimited("hwsim: genlmsg_parse returned %d\n", err);
+		return err;
+	}
+
+	info.attrs = tb;
+
+	switch (gnlh->cmd) {
+	case HWSIM_CMD_FRAME:
+		hwsim_cloned_frame_received_nl(skb, &info);
+		break;
+	case HWSIM_CMD_TX_INFO_FRAME:
+		hwsim_tx_info_frame_received_nl(skb, &info);
+		break;
+	default:
+		pr_err_ratelimited("hwsim: invalid cmd: %d\n", gnlh->cmd);
+		return -EPROTO;
+	}
+	return 0;
+}
+
+static void hwsim_virtio_rx_work(struct work_struct *work)
+{
+	struct virtqueue *vq;
+	unsigned int len;
+	struct sk_buff *skb;
+	struct scatterlist sg[1];
+	int err;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled)
+		goto out_unlock;
+
+	skb = virtqueue_get_buf(hwsim_vqs[HWSIM_VQ_RX], &len);
+	if (!skb)
+		goto out_unlock;
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	skb->data = skb->head;
+	skb_set_tail_pointer(skb, len);
+	hwsim_virtio_handle_cmd(skb);
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (!hwsim_virtio_enabled) {
+		nlmsg_free(skb);
+		goto out_unlock;
+	}
+	vq = hwsim_vqs[HWSIM_VQ_RX];
+	sg_init_one(sg, skb->head, skb_end_offset(skb));
+	err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_ATOMIC);
+	if (WARN(err, "virtqueue_add_inbuf returned %d\n", err))
+		nlmsg_free(skb);
+	else
+		virtqueue_kick(vq);
+	schedule_work(&hwsim_virtio_rx);
+
+out_unlock:
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+}
+
+static void hwsim_virtio_rx_done(struct virtqueue *vq)
+{
+	schedule_work(&hwsim_virtio_rx);
+}
+
+static int init_vqs(struct virtio_device *vdev)
+{
+	vq_callback_t *callbacks[HWSIM_NUM_VQS] = {
+		[HWSIM_VQ_TX] = hwsim_virtio_tx_done,
+		[HWSIM_VQ_RX] = hwsim_virtio_rx_done,
+	};
+	const char *names[HWSIM_NUM_VQS] = {
+		[HWSIM_VQ_TX] = "tx",
+		[HWSIM_VQ_RX] = "rx",
+	};
+
+	return virtio_find_vqs(vdev, HWSIM_NUM_VQS,
+			       hwsim_vqs, callbacks, names, NULL);
+}
+
+static int fill_vq(struct virtqueue *vq)
+{
+	int i, err;
+	struct sk_buff *skb;
+	struct scatterlist sg[1];
+
+	for (i = 0; i < virtqueue_get_vring_size(vq); i++) {
+		skb = genlmsg_new(GENLMSG_DEFAULT_SIZE, GFP_KERNEL);
+		if (!skb)
+			return -ENOMEM;
+
+		sg_init_one(sg, skb->head, skb_end_offset(skb));
+		err = virtqueue_add_inbuf(vq, sg, 1, skb, GFP_KERNEL);
+		if (err) {
+			nlmsg_free(skb);
+			return err;
+		}
+	}
+	virtqueue_kick(vq);
+	return 0;
+}
+
+static void remove_vqs(struct virtio_device *vdev)
+{
+	int i;
+
+	vdev->config->reset(vdev);
+
+	for (i = 0; i < ARRAY_SIZE(hwsim_vqs); i++) {
+		struct virtqueue *vq = hwsim_vqs[i];
+		struct sk_buff *skb;
+
+		while ((skb = virtqueue_detach_unused_buf(vq)))
+			nlmsg_free(skb);
+	}
+
+	vdev->config->del_vqs(vdev);
+}
+
+static int hwsim_virtio_probe(struct virtio_device *vdev)
+{
+	int err;
+	unsigned long flags;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	if (hwsim_virtio_enabled) {
+		spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+		return -EEXIST;
+	}
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	err = init_vqs(vdev);
+	if (err)
+		return err;
+
+	err = fill_vq(hwsim_vqs[HWSIM_VQ_RX]);
+	if (err)
+		goto out_remove;
+
+	spin_lock_irqsave(&hwsim_virtio_lock, flags);
+	hwsim_virtio_enabled = true;
+	spin_unlock_irqrestore(&hwsim_virtio_lock, flags);
+
+	schedule_work(&hwsim_virtio_rx);
+	return 0;
+
+out_remove:
+	remove_vqs(vdev);
+	return err;
+}
+
+static void hwsim_virtio_remove(struct virtio_device *vdev)
+{
+	hwsim_virtio_enabled = false;
+
+	cancel_work_sync(&hwsim_virtio_rx);
+
+	remove_vqs(vdev);
+}
+
+/* MAC80211_HWSIM virtio device id table */
+static const struct virtio_device_id id_table[] = {
+	{ VIRTIO_ID_MAC80211_HWSIM, VIRTIO_DEV_ANY_ID },
+	{ 0 }
+};
+MODULE_DEVICE_TABLE(virtio, id_table);
+
+static struct virtio_driver virtio_hwsim = {
+	.driver.name = KBUILD_MODNAME,
+	.driver.owner = THIS_MODULE,
+	.id_table = id_table,
+	.probe = hwsim_virtio_probe,
+	.remove = hwsim_virtio_remove,
+};
+
+static int hwsim_register_virtio_driver(void)
+{
+	spin_lock_init(&hwsim_virtio_lock);
+
+	return register_virtio_driver(&virtio_hwsim);
+}
+
+static void hwsim_unregister_virtio_driver(void)
+{
+	unregister_virtio_driver(&virtio_hwsim);
+}
+#else
+static inline int hwsim_register_virtio_driver(void)
+{
+	return 0;
+}
+
+static inline void hwsim_unregister_virtio_driver(void)
+{
+}
+#endif
+
 static int __init init_mac80211_hwsim(void)
 {
 	int i, err;
@@ -3932,10 +4250,14 @@
 	if (err)
 		goto out_unregister_driver;
 
+	err = hwsim_register_virtio_driver();
+	if (err)
+		goto out_exit_netlink;
+
 	hwsim_class = class_create(THIS_MODULE, "mac80211_hwsim");
 	if (IS_ERR(hwsim_class)) {
 		err = PTR_ERR(hwsim_class);
-		goto out_exit_netlink;
+		goto out_exit_virtio;
 	}
 
 	for (i = 0; i < radios; i++) {
@@ -4047,6 +4369,8 @@
 	free_netdev(hwsim_mon);
 out_free_radios:
 	mac80211_hwsim_free();
+out_exit_virtio:
+	hwsim_unregister_virtio_driver();
 out_exit_netlink:
 	hwsim_exit_netlink();
 out_unregister_driver:
@@ -4063,6 +4387,7 @@
 {
 	pr_debug("mac80211_hwsim: unregister radios\n");
 
+	hwsim_unregister_virtio_driver();
 	hwsim_exit_netlink();
 
 	mac80211_hwsim_free();
diff --git a/drivers/net/wireless/mac80211_hwsim.h b/drivers/net/wireless/mac80211_hwsim.h
index a85bc7c..28ade92 100644
--- a/drivers/net/wireless/mac80211_hwsim.h
+++ b/drivers/net/wireless/mac80211_hwsim.h
@@ -3,6 +3,7 @@
  * mac80211_hwsim - software simulator of 802.11 radio(s) for mac80211
  * Copyright (c) 2008, Jouni Malinen <j@w1.fi>
  * Copyright (c) 2011, Javier Lopez <jlopex@gmail.com>
+ * Copyright (C) 2020 Intel Corporation
  */
 
 #ifndef __MAC80211_HWSIM_H
@@ -245,4 +246,24 @@
 	s8 idx;
 	u16 flags;
 } __packed;
+
+/**
+ * DOC: Frame transmission support over virtio
+ *
+ * Frame transmission is also supported over virtio to allow communication
+ * with external entities.
+ */
+
+/**
+ * enum hwsim_vqs - queues for virtio frame transmission
+ *
+ * @HWSIM_VQ_TX: send frames to external entity
+ * @HWSIM_VQ_RX: receive frames and transmission info reports
+ * @HWSIM_NUM_VQS: enum limit
+ */
+enum {
+	HWSIM_VQ_TX,
+	HWSIM_VQ_RX,
+	HWSIM_NUM_VQS,
+};
 #endif /* __MAC80211_HWSIM_H */
diff --git a/drivers/net/wireless/virt_wifi.c b/drivers/net/wireless/virt_wifi.c
index 4e90691..6168c0b 100644
--- a/drivers/net/wireless/virt_wifi.c
+++ b/drivers/net/wireless/virt_wifi.c
@@ -14,6 +14,7 @@
 #include <linux/etherdevice.h>
 #include <linux/math64.h>
 #include <linux/module.h>
+#include <net/virt_wifi.h>
 
 static struct wiphy *common_wiphy;
 
@@ -21,6 +22,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 = {
@@ -172,6 +174,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;
 }
@@ -187,6 +192,12 @@
 
 	virt_wifi_inform_bss(wiphy);
 
+	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;
@@ -378,6 +389,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);
@@ -393,7 +406,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;
@@ -427,8 +439,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;
 }
 
@@ -436,16 +453,22 @@
 static int virt_wifi_net_device_stop(struct net_device *dev)
 {
 	struct virt_wifi_netdev_priv *n_priv = netdev_priv(dev);
+	struct virt_wifi_wiphy_priv *w_priv;
 
 	n_priv->is_up = false;
 
 	if (!dev->ieee80211_ptr)
 		return 0;
+	w_priv = wiphy_priv(dev->ieee80211_ptr->wiphy);
 
 	virt_wifi_cancel_scan(dev->ieee80211_ptr->wiphy);
 	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;
 }
 
@@ -680,6 +703,27 @@
 	unregister_netdevice_notifier(&virt_wifi_notifier);
 }
 
+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_GPL(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_GPL(virt_wifi_unregister_network_simulation);
+
 module_init(virt_wifi_init_module);
 module_exit(virt_wifi_cleanup_module);
 
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index c2ec750..8fd425d 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -230,4 +230,15 @@
 
 	  If sure, say yes. If unsure, say no.
 
+config SPRD_EFUSE
+	tristate "Spreadtrum SoC eFuse Support"
+	depends on ARCH_SPRD || COMPILE_TEST
+	depends on HAS_IOMEM
+	help
+	  This is a simple driver to dump specified values of Spreadtrum
+	  SoCs from eFuse.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called nvmem-sprd-efuse.
+
 endif
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index e5c153d..7c19870 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -50,3 +50,5 @@
 nvmem-sc27xx-efuse-y		:= sc27xx-efuse.o
 obj-$(CONFIG_NVMEM_ZYNQMP)	+= nvmem_zynqmp_nvmem.o
 nvmem_zynqmp_nvmem-y		:= zynqmp_nvmem.o
+obj-$(CONFIG_SPRD_EFUSE)	+= nvmem_sprd_efuse.o
+nvmem_sprd_efuse-y		:= sprd-efuse.o
diff --git a/drivers/nvmem/sprd-efuse.c b/drivers/nvmem/sprd-efuse.c
new file mode 100644
index 0000000..4f1fcbf
--- /dev/null
+++ b/drivers/nvmem/sprd-efuse.c
@@ -0,0 +1,441 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2019 Spreadtrum Communications Inc.
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/hwspinlock.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+
+#define SPRD_EFUSE_ENABLE		0x20
+#define SPRD_EFUSE_ERR_FLAG		0x24
+#define SPRD_EFUSE_ERR_CLR		0x28
+#define SPRD_EFUSE_MAGIC_NUM		0x2c
+#define SPRD_EFUSE_FW_CFG		0x50
+#define SPRD_EFUSE_PW_SWT		0x54
+#define SPRD_EFUSE_MEM(val)		(0x1000 + ((val) << 2))
+
+#define SPRD_EFUSE_VDD_EN		BIT(0)
+#define SPRD_EFUSE_AUTO_CHECK_EN	BIT(1)
+#define SPRD_EFUSE_DOUBLE_EN		BIT(2)
+#define SPRD_EFUSE_MARGIN_RD_EN		BIT(3)
+#define SPRD_EFUSE_LOCK_WR_EN		BIT(4)
+
+#define SPRD_EFUSE_ERR_CLR_MASK		GENMASK(13, 0)
+
+#define SPRD_EFUSE_ENK1_ON		BIT(0)
+#define SPRD_EFUSE_ENK2_ON		BIT(1)
+#define SPRD_EFUSE_PROG_EN		BIT(2)
+
+#define SPRD_EFUSE_MAGIC_NUMBER		0x8810
+
+/* Block width (bytes) definitions */
+#define SPRD_EFUSE_BLOCK_WIDTH		4
+
+/*
+ * The Spreadtrum AP efuse contains 2 parts: normal efuse and secure efuse,
+ * and we can only access the normal efuse in kernel. So define the normal
+ * block offset index and normal block numbers.
+ */
+#define SPRD_EFUSE_NORMAL_BLOCK_NUMS	24
+#define SPRD_EFUSE_NORMAL_BLOCK_OFFSET	72
+
+/* Timeout (ms) for the trylock of hardware spinlocks */
+#define SPRD_EFUSE_HWLOCK_TIMEOUT	5000
+
+/*
+ * Since different Spreadtrum SoC chip can have different normal block numbers
+ * and offset. And some SoC can support block double feature, which means
+ * when reading or writing data to efuse memory, the controller can save double
+ * data in case one data become incorrect after a long period.
+ *
+ * Thus we should save them in the device data structure.
+ */
+struct sprd_efuse_variant_data {
+	u32 blk_nums;
+	u32 blk_offset;
+	bool blk_double;
+};
+
+struct sprd_efuse {
+	struct device *dev;
+	struct clk *clk;
+	struct hwspinlock *hwlock;
+	struct mutex mutex;
+	void __iomem *base;
+	const struct sprd_efuse_variant_data *data;
+};
+
+static const struct sprd_efuse_variant_data ums312_data = {
+	.blk_nums = SPRD_EFUSE_NORMAL_BLOCK_NUMS,
+	.blk_offset = SPRD_EFUSE_NORMAL_BLOCK_OFFSET,
+	.blk_double = false,
+};
+
+/*
+ * On Spreadtrum platform, we have multi-subsystems will access the unique
+ * efuse controller, so we need one hardware spinlock to synchronize between
+ * the multiple subsystems.
+ */
+static int sprd_efuse_lock(struct sprd_efuse *efuse)
+{
+	int ret;
+
+	mutex_lock(&efuse->mutex);
+
+	ret = hwspin_lock_timeout_raw(efuse->hwlock,
+				      SPRD_EFUSE_HWLOCK_TIMEOUT);
+	if (ret) {
+		dev_err(efuse->dev, "timeout get the hwspinlock\n");
+		mutex_unlock(&efuse->mutex);
+		return ret;
+	}
+
+	return 0;
+}
+
+static void sprd_efuse_unlock(struct sprd_efuse *efuse)
+{
+	hwspin_unlock_raw(efuse->hwlock);
+	mutex_unlock(&efuse->mutex);
+}
+
+static void sprd_efuse_set_prog_power(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_PW_SWT);
+
+	if (en)
+		val &= ~SPRD_EFUSE_ENK2_ON;
+	else
+		val &= ~SPRD_EFUSE_ENK1_ON;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+
+	if (en)
+		val |= SPRD_EFUSE_ENK1_ON;
+	else
+		val |= SPRD_EFUSE_ENK2_ON;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+}
+
+static void sprd_efuse_set_read_power(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_VDD_EN;
+	else
+		val &= ~SPRD_EFUSE_VDD_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+
+	/* Open or close efuse power need wait 1000us to make power stable. */
+	usleep_range(1000, 1200);
+}
+
+static void sprd_efuse_set_prog_lock(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_LOCK_WR_EN;
+	else
+		val &= ~SPRD_EFUSE_LOCK_WR_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_auto_check(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_AUTO_CHECK_EN;
+	else
+		val &= ~SPRD_EFUSE_AUTO_CHECK_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_data_double(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_ENABLE);
+
+	if (en)
+		val |= SPRD_EFUSE_DOUBLE_EN;
+	else
+		val &= ~SPRD_EFUSE_DOUBLE_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_ENABLE);
+}
+
+static void sprd_efuse_set_prog_en(struct sprd_efuse *efuse, bool en)
+{
+	u32 val = readl(efuse->base + SPRD_EFUSE_PW_SWT);
+
+	if (en)
+		val |= SPRD_EFUSE_PROG_EN;
+	else
+		val &= ~SPRD_EFUSE_PROG_EN;
+
+	writel(val, efuse->base + SPRD_EFUSE_PW_SWT);
+}
+
+static int sprd_efuse_raw_prog(struct sprd_efuse *efuse, u32 blk, bool doub,
+			       bool lock, u32 *data)
+{
+	u32 status;
+	int ret = 0;
+
+	/*
+	 * We need set the correct magic number before writing the efuse to
+	 * allow programming, and block other programming until we clear the
+	 * magic number.
+	 */
+	writel(SPRD_EFUSE_MAGIC_NUMBER,
+	       efuse->base + SPRD_EFUSE_MAGIC_NUM);
+
+	/*
+	 * Power on the efuse, enable programme and enable double data
+	 * if asked.
+	 */
+	sprd_efuse_set_prog_power(efuse, true);
+	sprd_efuse_set_prog_en(efuse, true);
+	sprd_efuse_set_data_double(efuse, doub);
+
+	/*
+	 * Enable the auto-check function to validate if the programming is
+	 * successful.
+	 */
+	if (lock)
+		sprd_efuse_set_auto_check(efuse, true);
+
+	writel(*data, efuse->base + SPRD_EFUSE_MEM(blk));
+
+	/* Disable auto-check and data double after programming */
+	if (lock)
+		sprd_efuse_set_auto_check(efuse, false);
+	sprd_efuse_set_data_double(efuse, false);
+
+	/*
+	 * Check the efuse error status, if the programming is successful,
+	 * we should lock this efuse block to avoid programming again.
+	 */
+	status = readl(efuse->base + SPRD_EFUSE_ERR_FLAG);
+	if (status) {
+		dev_err(efuse->dev,
+			"write error status %u of block %d\n", status, blk);
+
+		writel(SPRD_EFUSE_ERR_CLR_MASK,
+		       efuse->base + SPRD_EFUSE_ERR_CLR);
+		ret = -EBUSY;
+	} else if (lock) {
+		sprd_efuse_set_prog_lock(efuse, lock);
+		writel(0, efuse->base + SPRD_EFUSE_MEM(blk));
+		sprd_efuse_set_prog_lock(efuse, false);
+	}
+
+	sprd_efuse_set_prog_power(efuse, false);
+	writel(0, efuse->base + SPRD_EFUSE_MAGIC_NUM);
+
+	return ret;
+}
+
+static int sprd_efuse_raw_read(struct sprd_efuse *efuse, int blk, u32 *val,
+			       bool doub)
+{
+	u32 status;
+
+	/*
+	 * Need power on the efuse before reading data from efuse, and will
+	 * power off the efuse after reading process.
+	 */
+	sprd_efuse_set_read_power(efuse, true);
+
+	/* Enable double data if asked */
+	sprd_efuse_set_data_double(efuse, doub);
+
+	/* Start to read data from efuse block */
+	*val = readl(efuse->base + SPRD_EFUSE_MEM(blk));
+
+	/* Disable double data */
+	sprd_efuse_set_data_double(efuse, false);
+
+	/* Power off the efuse */
+	sprd_efuse_set_read_power(efuse, false);
+
+	/*
+	 * Check the efuse error status and clear them if there are some
+	 * errors occurred.
+	 */
+	status = readl(efuse->base + SPRD_EFUSE_ERR_FLAG);
+	if (status) {
+		dev_err(efuse->dev,
+			"read error status %d of block %d\n", status, blk);
+
+		writel(SPRD_EFUSE_ERR_CLR_MASK,
+		       efuse->base + SPRD_EFUSE_ERR_CLR);
+		return -EBUSY;
+	}
+
+	return 0;
+}
+
+static int sprd_efuse_read(void *context, u32 offset, void *val, size_t bytes)
+{
+	struct sprd_efuse *efuse = context;
+	bool blk_double = efuse->data->blk_double;
+	u32 index = offset / SPRD_EFUSE_BLOCK_WIDTH + efuse->data->blk_offset;
+	u32 blk_offset = (offset % SPRD_EFUSE_BLOCK_WIDTH) * BITS_PER_BYTE;
+	u32 data;
+	int ret;
+
+	ret = sprd_efuse_lock(efuse);
+	if (ret)
+		return ret;
+
+	ret = clk_prepare_enable(efuse->clk);
+	if (ret)
+		goto unlock;
+
+	ret = sprd_efuse_raw_read(efuse, index, &data, blk_double);
+	if (!ret) {
+		data >>= blk_offset;
+		memcpy(val, &data, bytes);
+	}
+
+	clk_disable_unprepare(efuse->clk);
+
+unlock:
+	sprd_efuse_unlock(efuse);
+	return ret;
+}
+
+static int sprd_efuse_write(void *context, u32 offset, void *val, size_t bytes)
+{
+	struct sprd_efuse *efuse = context;
+	bool blk_double = efuse->data->blk_double;
+	bool lock;
+	int ret;
+
+	ret = sprd_efuse_lock(efuse);
+	if (ret)
+		return ret;
+
+	ret = clk_prepare_enable(efuse->clk);
+	if (ret)
+		goto unlock;
+
+	/*
+	 * If the writing bytes are equal with the block width, which means the
+	 * whole block will be programmed. For this case, we should not allow
+	 * this block to be programmed again by locking this block.
+	 *
+	 * If the block was programmed partially, we should allow this block to
+	 * be programmed again.
+	 */
+	if (bytes < SPRD_EFUSE_BLOCK_WIDTH)
+		lock = false;
+	else
+		lock = true;
+
+	ret = sprd_efuse_raw_prog(efuse, offset, blk_double, lock, val);
+
+	clk_disable_unprepare(efuse->clk);
+
+unlock:
+	sprd_efuse_unlock(efuse);
+	return ret;
+}
+
+static int sprd_efuse_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct nvmem_device *nvmem;
+	struct nvmem_config econfig = { };
+	struct sprd_efuse *efuse;
+	const struct sprd_efuse_variant_data *pdata;
+	int ret;
+
+	pdata = of_device_get_match_data(&pdev->dev);
+	if (!pdata) {
+		dev_err(&pdev->dev, "No matching driver data found\n");
+		return -EINVAL;
+	}
+
+	efuse = devm_kzalloc(&pdev->dev, sizeof(*efuse), GFP_KERNEL);
+	if (!efuse)
+		return -ENOMEM;
+
+	efuse->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(efuse->base))
+		return PTR_ERR(efuse->base);
+
+	ret = of_hwspin_lock_get_id(np, 0);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to get hwlock id\n");
+		return ret;
+	}
+
+	efuse->hwlock = devm_hwspin_lock_request_specific(&pdev->dev, ret);
+	if (!efuse->hwlock) {
+		dev_err(&pdev->dev, "failed to request hwlock\n");
+		return -ENXIO;
+	}
+
+	efuse->clk = devm_clk_get(&pdev->dev, "enable");
+	if (IS_ERR(efuse->clk)) {
+		dev_err(&pdev->dev, "failed to get enable clock\n");
+		return PTR_ERR(efuse->clk);
+	}
+
+	mutex_init(&efuse->mutex);
+	efuse->dev = &pdev->dev;
+	efuse->data = pdata;
+
+	econfig.stride = 1;
+	econfig.word_size = 1;
+	econfig.read_only = false;
+	econfig.name = "sprd-efuse";
+	econfig.size = efuse->data->blk_nums * SPRD_EFUSE_BLOCK_WIDTH;
+	econfig.reg_read = sprd_efuse_read;
+	econfig.reg_write = sprd_efuse_write;
+	econfig.priv = efuse;
+	econfig.dev = &pdev->dev;
+	nvmem = devm_nvmem_register(&pdev->dev, &econfig);
+	if (IS_ERR(nvmem)) {
+		dev_err(&pdev->dev, "failed to register nvmem\n");
+		return PTR_ERR(nvmem);
+	}
+
+	return 0;
+}
+
+static const struct of_device_id sprd_efuse_of_match[] = {
+	{ .compatible = "sprd,ums312-efuse", .data = &ums312_data },
+	{ }
+};
+
+static struct platform_driver sprd_efuse_driver = {
+	.probe = sprd_efuse_probe,
+	.driver = {
+		.name = "sprd-efuse",
+		.of_match_table = sprd_efuse_of_match,
+	},
+};
+
+module_platform_driver(sprd_efuse_driver);
+
+MODULE_AUTHOR("Freeman Liu <freeman.liu@spreadtrum.com>");
+MODULE_DESCRIPTION("Spreadtrum AP efuse driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/of/address.c b/drivers/of/address.c
index 5abb056..c06f5ab 100644
--- a/drivers/of/address.c
+++ b/drivers/of/address.c
@@ -14,6 +14,8 @@
 #include <linux/slab.h>
 #include <linux/string.h>
 
+#include "of_private.h"
+
 /* Max address size we deal with */
 #define OF_MAX_ADDR_CELLS	4
 #define OF_CHECK_ADDR_COUNT(na)	((na) > 0 && (na) <= OF_MAX_ADDR_CELLS)
@@ -241,6 +243,7 @@
 	parser->node = node;
 	parser->pna = of_n_addr_cells(node);
 	parser->np = parser->pna + na + ns;
+	parser->dma = !strcmp(name, "dma-ranges");
 
 	parser->range = of_get_property(node, name, &rlen);
 	if (parser->range == NULL)
@@ -279,7 +282,11 @@
 	range->pci_space = be32_to_cpup(parser->range);
 	range->flags = of_bus_pci_get_flags(parser->range);
 	range->pci_addr = of_read_number(parser->range + 1, ns);
-	range->cpu_addr = of_translate_address(parser->node,
+	if (parser->dma)
+		range->cpu_addr = of_translate_dma_address(parser->node,
+				parser->range + na);
+	else
+		range->cpu_addr = of_translate_address(parser->node,
 				parser->range + na);
 	range->size = of_read_number(parser->range + parser->pna + na, ns);
 
@@ -292,8 +299,12 @@
 
 		flags = of_bus_pci_get_flags(parser->range);
 		pci_addr = of_read_number(parser->range + 1, ns);
-		cpu_addr = of_translate_address(parser->node,
-				parser->range + na);
+		if (parser->dma)
+			cpu_addr = of_translate_dma_address(parser->node,
+					parser->range + na);
+		else
+			cpu_addr = of_translate_address(parser->node,
+					parser->range + na);
 		size = of_read_number(parser->range + parser->pna + na, ns);
 
 		if (flags != range->flags)
@@ -517,9 +528,13 @@
 	 *
 	 * As far as we know, this damage only exists on Apple machines, so
 	 * This code is only enabled on powerpc. --gcl
+	 *
+	 * This quirk also applies for 'dma-ranges' which frequently exist in
+	 * child nodes without 'dma-ranges' in the parent nodes. --RobH
 	 */
 	ranges = of_get_property(parent, rprop, &rlen);
-	if (ranges == NULL && !of_empty_ranges_quirk(parent)) {
+	if (ranges == NULL && !of_empty_ranges_quirk(parent) &&
+	    strcmp(rprop, "dma-ranges")) {
 		pr_debug("no ranges; cannot translate\n");
 		return 1;
 	}
@@ -695,6 +710,16 @@
 	return of_node_get(args.np);
 }
 
+static struct device_node *of_get_next_dma_parent(struct device_node *np)
+{
+	struct device_node *parent;
+
+	parent = __of_get_dma_parent(np);
+	of_node_put(np);
+
+	return parent;
+}
+
 u64 of_translate_dma_address(struct device_node *dev, const __be32 *in_addr)
 {
 	struct device_node *host;
@@ -924,47 +949,39 @@
 	const __be32 *ranges = NULL;
 	int len, naddr, nsize, pna;
 	int ret = 0;
+	bool found_dma_ranges = false;
 	u64 dmaaddr;
 
-	if (!node)
-		return -EINVAL;
-
-	while (1) {
-		struct device_node *parent;
-
-		naddr = of_n_addr_cells(node);
-		nsize = of_n_size_cells(node);
-
-		parent = __of_get_dma_parent(node);
-		of_node_put(node);
-
-		node = parent;
-		if (!node)
-			break;
-
+	while (node) {
 		ranges = of_get_property(node, "dma-ranges", &len);
 
 		/* Ignore empty ranges, they imply no translation required */
 		if (ranges && len > 0)
 			break;
 
-		/*
-		 * At least empty ranges has to be defined for parent node if
-		 * DMA is supported
-		 */
-		if (!ranges)
-			break;
+		/* Once we find 'dma-ranges', then a missing one is an error */
+		if (found_dma_ranges && !ranges) {
+			ret = -ENODEV;
+			goto out;
+		}
+		found_dma_ranges = true;
+
+		node = of_get_next_dma_parent(node);
 	}
 
-	if (!ranges) {
+	if (!node || !ranges) {
 		pr_debug("no dma-ranges found for node(%pOF)\n", np);
 		ret = -ENODEV;
 		goto out;
 	}
 
-	len /= sizeof(u32);
-
+	naddr = of_bus_n_addr_cells(node);
+	nsize = of_bus_n_size_cells(node);
 	pna = of_n_addr_cells(node);
+	if ((len / sizeof(__be32)) % (pna + naddr + nsize)) {
+		ret = -EINVAL;
+		goto out;
+	}
 
 	/* dma-ranges format:
 	 * DMA addr	: naddr cells
@@ -972,7 +989,7 @@
 	 * size		: nsize cells
 	 */
 	dmaaddr = of_read_number(ranges, naddr);
-	*paddr = of_translate_dma_address(np, ranges);
+	*paddr = of_translate_dma_address(node, ranges + naddr);
 	if (*paddr == OF_BAD_ADDR) {
 		pr_err("translation of DMA address(%pad) to CPU address failed node(%pOF)\n",
 		       dma_addr, np);
@@ -991,7 +1008,6 @@
 
 	return ret;
 }
-EXPORT_SYMBOL_GPL(of_dma_get_range);
 
 /**
  * of_dma_is_coherent - Check if device is coherent
@@ -1015,7 +1031,7 @@
 			of_node_put(node);
 			return true;
 		}
-		node = of_get_next_parent(node);
+		node = of_get_next_dma_parent(node);
 	}
 	of_node_put(node);
 	return false;
diff --git a/drivers/of/base.c b/drivers/of/base.c
index 1d667eb..db7fbc0 100644
--- a/drivers/of/base.c
+++ b/drivers/of/base.c
@@ -86,34 +86,46 @@
 	return np && match && type && !strcmp(match, type);
 }
 
-int of_n_addr_cells(struct device_node *np)
+int of_bus_n_addr_cells(struct device_node *np)
 {
 	u32 cells;
 
-	do {
-		if (np->parent)
-			np = np->parent;
+	for (; np; np = np->parent)
 		if (!of_property_read_u32(np, "#address-cells", &cells))
 			return cells;
-	} while (np->parent);
+
 	/* No #address-cells property for the root node */
 	return OF_ROOT_NODE_ADDR_CELLS_DEFAULT;
 }
+
+int of_n_addr_cells(struct device_node *np)
+{
+	if (np->parent)
+		np = np->parent;
+
+	return of_bus_n_addr_cells(np);
+}
 EXPORT_SYMBOL(of_n_addr_cells);
 
-int of_n_size_cells(struct device_node *np)
+int of_bus_n_size_cells(struct device_node *np)
 {
 	u32 cells;
 
-	do {
-		if (np->parent)
-			np = np->parent;
+	for (; np; np = np->parent)
 		if (!of_property_read_u32(np, "#size-cells", &cells))
 			return cells;
-	} while (np->parent);
+
 	/* No #size-cells property for the root node */
 	return OF_ROOT_NODE_SIZE_CELLS_DEFAULT;
 }
+
+int of_n_size_cells(struct device_node *np)
+{
+	if (np->parent)
+		np = np->parent;
+
+	return of_bus_n_size_cells(np);
+}
 EXPORT_SYMBOL(of_n_size_cells);
 
 #ifdef CONFIG_NUMA
diff --git a/drivers/of/fdt.c b/drivers/of/fdt.c
index 943d2a6..63bfc14 100644
--- a/drivers/of/fdt.c
+++ b/drivers/of/fdt.c
@@ -1040,43 +1040,67 @@
 	return 0;
 }
 
+/*
+ * Convert configs to something easy to use in C code
+ */
+#if defined(CONFIG_CMDLINE_FORCE)
+static const int overwrite_incoming_cmdline = 1;
+static const int read_dt_cmdline;
+static const int concat_cmdline;
+#elif defined(CONFIG_CMDLINE_EXTEND)
+static const int overwrite_incoming_cmdline;
+static const int read_dt_cmdline = 1;
+static const int concat_cmdline = 1;
+#else /* CMDLINE_FROM_BOOTLOADER */
+static const int overwrite_incoming_cmdline;
+static const int read_dt_cmdline = 1;
+static const int concat_cmdline;
+#endif
+
+#ifdef CONFIG_CMDLINE
+static const char *config_cmdline = CONFIG_CMDLINE;
+#else
+static const char *config_cmdline = "";
+#endif
+
 int __init early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data)
 {
-	int l;
-	const char *p;
+	int l = 0;
+	const char *p = NULL;
 	const void *rng_seed;
+	char *cmdline = data;
 
 	pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname);
 
-	if (depth != 1 || !data ||
+	if (depth != 1 || !cmdline ||
 	    (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0))
 		return 0;
 
 	early_init_dt_check_for_initrd(node);
 
-	/* Retrieve command line */
-	p = of_get_flat_dt_prop(node, "bootargs", &l);
-	if (p != NULL && l > 0)
-		strlcpy(data, p, min(l, COMMAND_LINE_SIZE));
+	/* Put CONFIG_CMDLINE in if forced or if data had nothing in it to start */
+	if (overwrite_incoming_cmdline || !cmdline[0])
+		strlcpy(cmdline, config_cmdline, COMMAND_LINE_SIZE);
 
-	/*
-	 * CONFIG_CMDLINE is meant to be a default in case nothing else
-	 * managed to set the command line, unless CONFIG_CMDLINE_FORCE
-	 * is set in which case we override whatever was found earlier.
-	 */
-#ifdef CONFIG_CMDLINE
-#if defined(CONFIG_CMDLINE_EXTEND)
-	strlcat(data, " ", COMMAND_LINE_SIZE);
-	strlcat(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#elif defined(CONFIG_CMDLINE_FORCE)
-	strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#else
-	/* No arguments from boot loader, use kernel's  cmdl*/
-	if (!((char *)data)[0])
-		strlcpy(data, CONFIG_CMDLINE, COMMAND_LINE_SIZE);
-#endif
-#endif /* CONFIG_CMDLINE */
+	/* Retrieve command line unless forcing */
+	if (read_dt_cmdline)
+		p = of_get_flat_dt_prop(node, "bootargs", &l);
+
+	if (p != NULL && l > 0) {
+		if (concat_cmdline) {
+			int cmdline_len;
+			int copy_len;
+			strlcat(cmdline, " ", COMMAND_LINE_SIZE);
+			cmdline_len = strlen(cmdline);
+			copy_len = COMMAND_LINE_SIZE - cmdline_len - 1;
+			copy_len = min((int)l, copy_len);
+			strncpy(cmdline + cmdline_len, p, copy_len);
+			cmdline[cmdline_len + copy_len] = '\0';
+		} else {
+			strlcpy(cmdline, p, min(l, COMMAND_LINE_SIZE));
+		}
+	}
 
 	pr_debug("Command line is: %s\n", (char*)data);
 
diff --git a/drivers/of/of_private.h b/drivers/of/of_private.h
index 2478681..66294d2 100644
--- a/drivers/of/of_private.h
+++ b/drivers/of/of_private.h
@@ -158,4 +158,18 @@
 #define for_each_transaction_entry_reverse(_oft, _te) \
 	list_for_each_entry_reverse(_te, &(_oft)->te_list, node)
 
+extern int of_bus_n_addr_cells(struct device_node *np);
+extern int of_bus_n_size_cells(struct device_node *np);
+
+#ifdef CONFIG_OF_ADDRESS
+extern int of_dma_get_range(struct device_node *np, u64 *dma_addr,
+			    u64 *paddr, u64 *size);
+#else
+static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr,
+				   u64 *paddr, u64 *size)
+{
+	return -ENODEV;
+}
+#endif
+
 #endif /* _LINUX_OF_PRIVATE_H */
diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
index 6ed3ffd..5f17e8c 100644
--- a/drivers/of/of_reserved_mem.c
+++ b/drivers/of/of_reserved_mem.c
@@ -22,7 +22,7 @@
 #include <linux/slab.h>
 #include <linux/memblock.h>
 
-#define MAX_RESERVED_REGIONS	32
+#define MAX_RESERVED_REGIONS	64
 static struct reserved_mem reserved_mem[MAX_RESERVED_REGIONS];
 static int reserved_mem_count;
 
diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index b47a229..55d7193 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -480,6 +480,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) {
@@ -487,6 +488,8 @@
 			break;
 		}
 	}
+	device_links_supplier_sync_state_resume();
+
 	of_node_set_flag(root, OF_POPULATED_BUS);
 
 	of_node_put(root);
@@ -515,6 +518,8 @@
 {
 	struct device_node *node;
 
+	device_links_supplier_sync_state_pause();
+
 	if (!of_have_populated_dt())
 		return -ENODEV;
 
@@ -533,11 +538,20 @@
 	}
 
 	/* Populate everything else. */
+	fw_devlink_pause();
 	of_platform_default_populate(NULL, NULL, NULL);
+	fw_devlink_resume();
 
 	return 0;
 }
 arch_initcall_sync(of_platform_default_populate_init);
+
+static int __init of_platform_sync_state_init(void)
+{
+	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 d7fa75e..5d7af9f 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,374 @@
 	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) {
+
+		/* Don't allow linking to a disabled supplier */
+		if (!of_device_is_available(sup_np)) {
+			of_node_put(sup_np);
+			sup_np = NULL;
+		}
+
+		if (of_find_property(sup_np, "compatible", NULL))
+			break;
+
+		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_SIMPLE_PROP(power_domains, "power-domains", "#power-domain-cells")
+DEFINE_SIMPLE_PROP(hwlocks, "hwlocks", "#hwlock-cells")
+DEFINE_SIMPLE_PROP(extcon, "extcon", NULL)
+DEFINE_SIMPLE_PROP(interrupts_extended, "interrupts-extended",
+					"#interrupt-cells")
+DEFINE_SIMPLE_PROP(nvmem_cells, "nvmem-cells", NULL)
+DEFINE_SIMPLE_PROP(phys, "phys", "#phy-cells")
+DEFINE_SIMPLE_PROP(wakeup_parent, "wakeup-parent", NULL)
+DEFINE_SIMPLE_PROP(pinctrl0, "pinctrl-0", NULL)
+DEFINE_SIMPLE_PROP(pinctrl1, "pinctrl-1", NULL)
+DEFINE_SIMPLE_PROP(pinctrl2, "pinctrl-2", NULL)
+DEFINE_SIMPLE_PROP(pinctrl3, "pinctrl-3", NULL)
+DEFINE_SIMPLE_PROP(pinctrl4, "pinctrl-4", NULL)
+DEFINE_SIMPLE_PROP(pinctrl5, "pinctrl-5", NULL)
+DEFINE_SIMPLE_PROP(pinctrl6, "pinctrl-6", NULL)
+DEFINE_SIMPLE_PROP(pinctrl7, "pinctrl-7", NULL)
+DEFINE_SIMPLE_PROP(pinctrl8, "pinctrl-8", NULL)
+DEFINE_SUFFIX_PROP(regulators, "-supply", NULL)
+DEFINE_SUFFIX_PROP(gpio, "-gpio", "#gpio-cells")
+
+static struct device_node *parse_gpios(struct device_node *np,
+				       const char *prop_name, int index)
+{
+	if (!strcmp_suffix(prop_name, ",nr-gpios"))
+		return NULL;
+
+	return parse_suffix_prop_cells(np, prop_name, index, "-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_power_domains, },
+	{ .parse_prop = parse_hwlocks, },
+	{ .parse_prop = parse_extcon, },
+	{ .parse_prop = parse_interrupts_extended, },
+	{ .parse_prop = parse_nvmem_cells, },
+	{ .parse_prop = parse_phys, },
+	{ .parse_prop = parse_wakeup_parent, },
+	{ .parse_prop = parse_pinctrl0, },
+	{ .parse_prop = parse_pinctrl1, },
+	{ .parse_prop = parse_pinctrl2, },
+	{ .parse_prop = parse_pinctrl3, },
+	{ .parse_prop = parse_pinctrl4, },
+	{ .parse_prop = parse_pinctrl5, },
+	{ .parse_prop = parse_pinctrl6, },
+	{ .parse_prop = parse_pinctrl7, },
+	{ .parse_prop = parse_pinctrl8, },
+	{ .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 = DL_FLAG_AUTOPROBE_CONSUMER;
+	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_available_child_of_node(con_np, child)
+		if (of_link_to_suppliers(dev, child) && !ret)
+			ret = -EAGAIN;
+
+	return ret;
+}
+
+static bool of_devlink = true;
+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 +1370,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/dwc/pcie-designware-ep.c b/drivers/pci/controller/dwc/pcie-designware-ep.c
index 3dd2e26..d6d9667 100644
--- a/drivers/pci/controller/dwc/pcie-designware-ep.c
+++ b/drivers/pci/controller/dwc/pcie-designware-ep.c
@@ -18,6 +18,7 @@
 
 	pci_epc_linkup(epc);
 }
+EXPORT_SYMBOL_GPL(dw_pcie_ep_linkup);
 
 static void __dw_pcie_ep_reset_bar(struct dw_pcie *pci, enum pci_barno bar,
 				   int flags)
@@ -607,3 +608,4 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(dw_pcie_ep_init);
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index a8eab4e..9d4678b 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -60,6 +60,7 @@
 #define PCIE20_PARF_LTSSM			0x1B0
 #define PCIE20_PARF_SID_OFFSET			0x234
 #define PCIE20_PARF_BDF_TRANSLATE_CFG		0x24C
+#define PCIE20_PARF_DEVICE_TYPE			0x1000
 
 #define PCIE20_ELBI_SYS_CTRL			0x04
 #define PCIE20_ELBI_SYS_CTRL_LT_ENABLE		BIT(0)
@@ -98,6 +99,8 @@
 #define PCIE20_v3_PARF_SLV_ADDR_SPACE_SIZE	0x358
 #define SLV_ADDR_SPACE_SZ			0x10000000
 
+#define DEVICE_TYPE_RC				0x4
+
 #define QCOM_PCIE_2_1_0_MAX_SUPPLY	3
 struct qcom_pcie_resources_2_1_0 {
 	struct clk *iface_clk;
@@ -160,12 +163,20 @@
 	struct reset_control *rst[7];
 };
 
+struct qcom_pcie_resources_2_7_0 {
+	struct clk_bulk_data clks[6];
+	struct regulator_bulk_data supplies[2];
+	struct reset_control *pci_reset;
+	struct clk *pipe_clk;
+};
+
 union qcom_pcie_resources {
 	struct qcom_pcie_resources_1_0_0 v1_0_0;
 	struct qcom_pcie_resources_2_1_0 v2_1_0;
 	struct qcom_pcie_resources_2_3_2 v2_3_2;
 	struct qcom_pcie_resources_2_3_3 v2_3_3;
 	struct qcom_pcie_resources_2_4_0 v2_4_0;
+	struct qcom_pcie_resources_2_7_0 v2_7_0;
 };
 
 struct qcom_pcie;
@@ -1160,6 +1171,136 @@
 	return ret;
 }
 
+static int qcom_pcie_get_resources_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+	struct dw_pcie *pci = pcie->pci;
+	struct device *dev = pci->dev;
+	int ret;
+
+	res->pci_reset = devm_reset_control_get_exclusive(dev, "pci");
+	if (IS_ERR(res->pci_reset))
+		return PTR_ERR(res->pci_reset);
+
+	res->supplies[0].supply = "vdda";
+	res->supplies[1].supply = "vddpe-3v3";
+	ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(res->supplies),
+				      res->supplies);
+	if (ret)
+		return ret;
+
+	res->clks[0].id = "aux";
+	res->clks[1].id = "cfg";
+	res->clks[2].id = "bus_master";
+	res->clks[3].id = "bus_slave";
+	res->clks[4].id = "slave_q2a";
+	res->clks[5].id = "tbu";
+
+	ret = devm_clk_bulk_get(dev, ARRAY_SIZE(res->clks), res->clks);
+	if (ret < 0)
+		return ret;
+
+	res->pipe_clk = devm_clk_get(dev, "pipe");
+	return PTR_ERR_OR_ZERO(res->pipe_clk);
+}
+
+static int qcom_pcie_init_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+	struct dw_pcie *pci = pcie->pci;
+	struct device *dev = pci->dev;
+	u32 val;
+	int ret;
+
+	ret = regulator_bulk_enable(ARRAY_SIZE(res->supplies), res->supplies);
+	if (ret < 0) {
+		dev_err(dev, "cannot enable regulators\n");
+		return ret;
+	}
+
+	ret = clk_bulk_prepare_enable(ARRAY_SIZE(res->clks), res->clks);
+	if (ret < 0)
+		goto err_disable_regulators;
+
+	ret = reset_control_assert(res->pci_reset);
+	if (ret < 0) {
+		dev_err(dev, "cannot deassert pci reset\n");
+		goto err_disable_clocks;
+	}
+
+	msleep(10);
+
+	ret = reset_control_deassert(res->pci_reset);
+	if (ret < 0) {
+		dev_err(dev, "cannot deassert pci reset\n");
+		goto err_assert_resets;
+	}
+
+	ret = clk_prepare_enable(res->pipe_clk);
+	if (ret) {
+		dev_err(dev, "cannot prepare/enable pipe clock\n");
+		goto err_assert_resets;
+	}
+
+	/* configure PCIe to RC mode */
+	writel(DEVICE_TYPE_RC, pcie->parf + PCIE20_PARF_DEVICE_TYPE);
+
+	/* enable PCIe clocks and resets */
+	val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL);
+	val &= ~BIT(0);
+	writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL);
+
+	/* change DBI base address */
+	writel(0, pcie->parf + PCIE20_PARF_DBI_BASE_ADDR);
+
+	/* MAC PHY_POWERDOWN MUX DISABLE  */
+	val = readl(pcie->parf + PCIE20_PARF_SYS_CTRL);
+	val &= ~BIT(29);
+	writel(val, pcie->parf + PCIE20_PARF_SYS_CTRL);
+
+	val = readl(pcie->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL);
+	val |= BIT(4);
+	writel(val, pcie->parf + PCIE20_PARF_MHI_CLOCK_RESET_CTRL);
+
+	if (IS_ENABLED(CONFIG_PCI_MSI)) {
+		val = readl(pcie->parf + PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT);
+		val |= BIT(31);
+		writel(val, pcie->parf + PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT);
+	}
+
+	return 0;
+err_assert_resets:
+	reset_control_assert(res->pci_reset);
+err_disable_clocks:
+	clk_bulk_disable_unprepare(ARRAY_SIZE(res->clks), res->clks);
+err_disable_regulators:
+	regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
+
+	return ret;
+}
+
+static void qcom_pcie_deinit_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	clk_bulk_disable_unprepare(ARRAY_SIZE(res->clks), res->clks);
+	regulator_bulk_disable(ARRAY_SIZE(res->supplies), res->supplies);
+}
+
+static int qcom_pcie_post_init_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	return clk_prepare_enable(res->pipe_clk);
+}
+
+static void qcom_pcie_post_deinit_2_7_0(struct qcom_pcie *pcie)
+{
+	struct qcom_pcie_resources_2_7_0 *res = &pcie->res.v2_7_0;
+
+	clk_disable_unprepare(res->pipe_clk);
+}
+
 static int qcom_pcie_link_up(struct dw_pcie *pci)
 {
 	u16 val = readw(pci->dbi_base + PCIE20_CAP + PCI_EXP_LNKSTA);
@@ -1259,6 +1400,16 @@
 	.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
 };
 
+/* Qcom IP rev.: 2.7.0	Synopsys IP rev.: 4.30a */
+static const struct qcom_pcie_ops ops_2_7_0 = {
+	.get_resources = qcom_pcie_get_resources_2_7_0,
+	.init = qcom_pcie_init_2_7_0,
+	.deinit = qcom_pcie_deinit_2_7_0,
+	.ltssm_enable = qcom_pcie_2_3_2_ltssm_enable,
+	.post_init = qcom_pcie_post_init_2_7_0,
+	.post_deinit = qcom_pcie_post_deinit_2_7_0,
+};
+
 static const struct dw_pcie_ops dw_pcie_ops = {
 	.link_up = qcom_pcie_link_up,
 };
@@ -1374,6 +1525,7 @@
 	{ .compatible = "qcom,pcie-ipq8074", .data = &ops_2_3_3 },
 	{ .compatible = "qcom,pcie-ipq4019", .data = &ops_2_4_0 },
 	{ .compatible = "qcom,pcie-qcs404", .data = &ops_2_4_0 },
+	{ .compatible = "qcom,pcie-sdm845", .data = &ops_2_7_0 },
 	{ }
 };
 
diff --git a/drivers/pci/msi.c b/drivers/pci/msi.c
index 7dc10c2..3c66dd08 100644
--- a/drivers/pci/msi.c
+++ b/drivers/pci/msi.c
@@ -170,25 +170,24 @@
  * reliably as devices without an INTx disable bit will then generate a
  * level IRQ which will never be cleared.
  */
-void __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
+u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
 {
-	raw_spinlock_t *lock = &desc->dev->msi_lock;
-	unsigned long flags;
+	u32 mask_bits = desc->masked;
 
 	if (pci_msi_ignore_mask || !desc->msi_attrib.maskbit)
-		return;
+		return 0;
 
-	raw_spin_lock_irqsave(lock, flags);
-	desc->masked &= ~mask;
-	desc->masked |= flag;
+	mask_bits &= ~mask;
+	mask_bits |= flag;
 	pci_write_config_dword(msi_desc_to_pci_dev(desc), desc->mask_pos,
-			       desc->masked);
-	raw_spin_unlock_irqrestore(lock, flags);
+			       mask_bits);
+
+	return mask_bits;
 }
 
 static void msi_mask_irq(struct msi_desc *desc, u32 mask, u32 flag)
 {
-	__pci_msi_desc_mask_irq(desc, mask, flag);
+	desc->masked = __pci_msi_desc_mask_irq(desc, mask, flag);
 }
 
 static void __iomem *pci_msix_desc_addr(struct msi_desc *desc)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b9550cd..379d558 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -123,6 +123,7 @@
 {
 	return pcie_ats_disabled;
 }
+EXPORT_SYMBOL_GPL(pci_ats_disabled);
 
 /* Disable bridge_d3 for all PCIe ports */
 static bool pci_bridge_d3_disable;
diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h
index 572c2f0..403cdc1 100644
--- a/drivers/pci/pci.h
+++ b/drivers/pci/pci.h
@@ -3,6 +3,7 @@
 #define DRIVERS_PCI_H
 
 #include <linux/pci.h>
+#include <linux/android_kabi.h>
 
 /* Number of possible devfns: 0.0 to 1f.7 inclusive */
 #define MAX_NR_DEVFNS 256
@@ -338,6 +339,11 @@
 	u16		subsystem_device; /* VF subsystem device */
 	resource_size_t	barsz[PCI_SRIOV_NUM_BARS];	/* VF BAR size */
 	bool		drivers_autoprobe; /* Auto probing of VFs by driver */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
diff --git a/drivers/phy/qualcomm/phy-qcom-qmp.c b/drivers/phy/qualcomm/phy-qcom-qmp.c
index 5ddbf9a..7f00228 100644
--- a/drivers/phy/qualcomm/phy-qcom-qmp.c
+++ b/drivers/phy/qualcomm/phy-qcom-qmp.c
@@ -160,6 +160,18 @@
 	[QPHY_PCS_LFPS_RXTERM_IRQ_STATUS] = 0x170,
 };
 
+static const unsigned int sdm845_qmp_pciephy_regs_layout[] = {
+	[QPHY_SW_RESET]			= 0x00,
+	[QPHY_START_CTRL]		= 0x08,
+	[QPHY_PCS_STATUS]		= 0x174,
+};
+
+static const unsigned int sdm845_qhp_pciephy_regs_layout[] = {
+	[QPHY_SW_RESET]			= 0x00,
+	[QPHY_START_CTRL]		= 0x08,
+	[QPHY_PCS_STATUS]		= 0x2ac,
+};
+
 static const unsigned int sdm845_ufsphy_regs_layout[] = {
 	[QPHY_START_CTRL]		= 0x00,
 	[QPHY_PCS_READY_STATUS]		= 0x160,
@@ -474,6 +486,229 @@
 	QMP_PHY_INIT_CFG_L(QPHY_START_CTRL, 0x3),
 };
 
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_serdes_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BIAS_EN_CLKBUFLR_EN, 0x14),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x30),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x007),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_CONFIG, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP_EN, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_RESETSM_CNTRL, 0x20),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_MAP, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE2_MODE0, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE1_MODE0, 0xc9),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER1, 0xff),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_VCO_TUNE_TIMER2, 0x3f),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SVS_MODE_CLK_SEL, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORE_CLK_EN, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CORECLK_DIV_MODE0, 0x0a),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_EP_DIV, 0x19),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_ENABLE1, 0x90),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DEC_START_MODE0, 0x82),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START3_MODE0, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START2_MODE0, 0xea),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_DIV_FRAC_START1_MODE0, 0xab),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP3_MODE0, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP2_MODE0, 0x0d),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_LOCK_CMP1_MODE0, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_HSCLK_SEL, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CP_CTRL_MODE0, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_RCTRL_MODE0, 0x16),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_CCTRL_MODE0, 0x36),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CMN_MODE, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_CLK_SELECT, 0x33),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYS_CLK_CTRL, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_BUF_ENABLE, 0x06),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN1_MODE0, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_INTEGLOOP_GAIN0_MODE0, 0x3f),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_BG_TIMER, 0x09),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_EN_CENTER, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER1, 0x40),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_PER2, 0x01),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER1, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_ADJ_PER2, 0x00),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE1, 0x7e),
+	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SSC_STEP_SIZE2, 0x15),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_tx_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RES_CODE_LANE_OFFSET_TX, 0x02),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_RCV_DETECT_LVL_2, 0x12),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_HIGHZ_DRVR_EN, 0x10),
+	QMP_PHY_INIT_CFG(QSERDES_V3_TX_LANE_MODE_1, 0x06),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_rx_tbl[] = {
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_CNTRL, 0x03),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_ENABLES, 0x10),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_SIGDET_DEGLITCH_CNTRL, 0x14),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL2, 0x0e),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL3, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQU_ADAPTOR_CNTRL4, 0x1a),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x4b),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_SO_GAIN_HALF, 0x04),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1, 0x71),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_00, 0x59),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_MODE_01, 0x59),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_RX_INTERFACE_MODE, 0x40),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_PI_CONTROLS, 0x71),
+	QMP_PHY_INIT_CFG(QSERDES_V3_RX_UCDR_FASTLOCK_COUNT_LOW, 0x40),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_ENDPOINT_REFCLK_DRIVE, 0x04),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL2, 0x83),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_L, 0x09),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNT_VAL_H_TOL, 0xa2),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_MAN_CODE, 0x40),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_FLL_CNTRL1, 0x02),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_OSC_DTCT_ACTIONS, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PWRUP_RESET_DLY_TIME_AUXCLK, 0x01),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB, 0x20),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK_MSB, 0x00),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_LP_WAKEUP_DLY_TIME_AUXCLK, 0x01),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_PLL_LOCK_CHK_DLY_TIME, 0x73),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_RX_SIGDET_LVL, 0xbb),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_SIGDET_CNTRL, 0x03),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_REFGEN_REQ_CONFIG1, 0x0d),
+
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_POWER_STATE_CONFIG4, 0x00),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qmp_pcie_pcs_misc_tbl[] = {
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_CONFIG2, 0x52),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG2, 0x10),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG4, 0x1a),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_OSC_DTCT_MODE2_CONFIG5, 0x06),
+	QMP_PHY_INIT_CFG(QPHY_V3_PCS_MISC_PCIE_INT_AUX_CLK_CONFIG1, 0x00),
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_serdes_tbl[] = {
+	{ 0x0dc, 0x27 },
+	{ 0x014, 0x01 },
+	{ 0x020, 0x31 },
+	{ 0x024, 0x01 },
+	{ 0x028, 0xde },
+	{ 0x02c, 0x07 },
+	{ 0x034, 0x4c },
+	{ 0x038, 0x06 },
+	{ 0x054, 0x18 },
+	{ 0x058, 0xb0 },
+	{ 0x06c, 0x8c },
+	{ 0x070, 0x20 },
+	{ 0x078, 0x14 },
+	{ 0x07c, 0x34 },
+	{ 0x0b4, 0x06 },
+	{ 0x0b8, 0x06 },
+	{ 0x0c0, 0x16 },
+	{ 0x0c4, 0x16 },
+	{ 0x0cc, 0x36 },
+	{ 0x0d0, 0x36 },
+	{ 0x0f0, 0x05 },
+	{ 0x0f8, 0x42 },
+	{ 0x100, 0x82 },
+	{ 0x108, 0x68 },
+	{ 0x11c, 0x55 },
+	{ 0x120, 0x55 },
+	{ 0x124, 0x03 },
+	{ 0x128, 0xab },
+	{ 0x12c, 0xaa },
+	{ 0x130, 0x02 },
+	{ 0x150, 0x3f },
+	{ 0x158, 0x3f },
+	{ 0x178, 0x10 },
+	{ 0x1cc, 0x04 },
+	{ 0x1d0, 0x30 },
+	{ 0x1e0, 0x04 },
+	{ 0x1e8, 0x73 },
+	{ 0x1f0, 0x0c },
+	{ 0x1fc, 0x15 },
+	{ 0x21c, 0x04 },
+	{ 0x224, 0x01 },
+	{ 0x228, 0x22 },
+	{ 0x22c, 0x00 },
+	{ 0x098, 0x20 },
+	{ 0x1c8, 0x07 },
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_tx_tbl[] = {
+	{ 0x00c, 0x00 },
+	{ 0x018, 0x0d },
+	{ 0x060, 0x01 },
+	{ 0x064, 0x1a },
+	{ 0x07c, 0x2f },
+	{ 0x0c0, 0x09 },
+	{ 0x0c4, 0x09 },
+	{ 0x0c8, 0x1b },
+	{ 0x0d0, 0x01 },
+	{ 0x0d4, 0x07 },
+	{ 0x0d8, 0x31 },
+	{ 0x0dc, 0x31 },
+	{ 0x0e0, 0x03 },
+	{ 0x0fc, 0x02 },
+	{ 0x100, 0x00 },
+	{ 0x108, 0x12 },
+	{ 0x114, 0x25 },
+	{ 0x118, 0x00 },
+	{ 0x11c, 0x05 },
+	{ 0x120, 0x01 },
+	{ 0x124, 0x26 },
+	{ 0x128, 0x12 },
+	{ 0x130, 0x04 },
+	{ 0x134, 0x04 },
+	{ 0x138, 0x09 },
+	{ 0x154, 0x15 },
+	{ 0x160, 0x28 },
+	{ 0x168, 0x7f },
+	{ 0x16c, 0x07 },
+	{ 0x178, 0x04 },
+	{ 0x180, 0x70 },
+	{ 0x184, 0x8b },
+	{ 0x188, 0x08 },
+	{ 0x18c, 0x0a },
+	{ 0x190, 0x03 },
+	{ 0x194, 0x04 },
+	{ 0x198, 0x04 },
+	{ 0x19c, 0x0c },
+	{ 0x1a4, 0x02 },
+	{ 0x1c0, 0x5c },
+	{ 0x1c4, 0x3e },
+	{ 0x1c8, 0x3f },
+	{ 0x230, 0x01 },
+	{ 0x234, 0xa0 },
+	{ 0x238, 0x08 },
+	{ 0x2a4, 0x01 },
+	{ 0x2ac, 0xc3 },
+	{ 0x2b0, 0x00 },
+	{ 0x2b8, 0xbc },
+	{ 0x2c0, 0x7f },
+	{ 0x2c4, 0x15 },
+	{ 0x010, 0x0c },
+	{ 0x014, 0x0f },
+	{ 0x2cc, 0x04 },
+	{ 0x13c, 0x20 },
+	{ 0x2a8, 0x01 },
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_rx_tbl[] = {
+};
+
+static const struct qmp_phy_init_tbl sdm845_qhp_pcie_pcs_tbl[] = {
+	{ 0x15c, 0x3f },
+	{ 0x174, 0x50 },
+	{ 0x02c, 0x19 },
+	{ 0x040, 0x07 },
+	{ 0x054, 0x17 },
+	{ 0x068, 0x09 },
+	{ 0x16c, 0x9f },
+};
+
 static const struct qmp_phy_init_tbl qmp_v3_usb3_serdes_tbl[] = {
 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_PLL_IVCO, 0x07),
 	QMP_PHY_INIT_CFG(QSERDES_V3_COM_SYSCLK_EN_SEL, 0x14),
@@ -895,6 +1130,8 @@
 	int rx_tbl_num;
 	const struct qmp_phy_init_tbl *pcs_tbl;
 	int pcs_tbl_num;
+	const struct qmp_phy_init_tbl *pcs_misc_tbl;
+	int pcs_misc_tbl_num;
 
 	/* clock ids to be requested */
 	const char * const *clk_list;
@@ -1033,6 +1270,10 @@
 	"aux", "cfg_ahb", "ref", "com_aux",
 };
 
+static const char * const sdm845_pciephy_clk_l[] = {
+	"aux", "cfg_ahb", "ref", "refgen",
+};
+
 static const char * const sdm845_ufs_phy_clk_l[] = {
 	"ref", "ref_aux",
 };
@@ -1046,6 +1287,10 @@
 	"phy", "common",
 };
 
+static const char * const sdm845_pciephy_reset_l[] = {
+	"phy",
+};
+
 /* list of regulators */
 static const char * const qmp_phy_vreg_l[] = {
 	"vdda-phy", "vdda-pll",
@@ -1144,6 +1389,64 @@
 	.pwrdn_delay_max	= 1005,		/* us */
 };
 
+static const struct qmp_phy_cfg sdm845_qmp_pciephy_cfg = {
+	.type = PHY_TYPE_PCIE,
+	.nlanes = 1,
+
+	.serdes_tbl		= sdm845_qmp_pcie_serdes_tbl,
+	.serdes_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_serdes_tbl),
+	.tx_tbl			= sdm845_qmp_pcie_tx_tbl,
+	.tx_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_tx_tbl),
+	.rx_tbl			= sdm845_qmp_pcie_rx_tbl,
+	.rx_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_rx_tbl),
+	.pcs_tbl		= sdm845_qmp_pcie_pcs_tbl,
+	.pcs_tbl_num		= ARRAY_SIZE(sdm845_qmp_pcie_pcs_tbl),
+	.pcs_misc_tbl		= sdm845_qmp_pcie_pcs_misc_tbl,
+	.pcs_misc_tbl_num	= ARRAY_SIZE(sdm845_qmp_pcie_pcs_misc_tbl),
+	.clk_list		= sdm845_pciephy_clk_l,
+	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
+	.reset_list		= sdm845_pciephy_reset_l,
+	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
+	.vreg_list		= qmp_phy_vreg_l,
+	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
+	.regs			= sdm845_qmp_pciephy_regs_layout,
+
+	.start_ctrl		= PCS_START | SERDES_START,
+	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
+
+	.has_pwrdn_delay	= true,
+	.pwrdn_delay_min	= 995,		/* us */
+	.pwrdn_delay_max	= 1005,		/* us */
+};
+
+static const struct qmp_phy_cfg sdm845_qhp_pciephy_cfg = {
+	.type = PHY_TYPE_PCIE,
+	.nlanes = 1,
+
+	.serdes_tbl		= sdm845_qhp_pcie_serdes_tbl,
+	.serdes_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_serdes_tbl),
+	.tx_tbl			= sdm845_qhp_pcie_tx_tbl,
+	.tx_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_tx_tbl),
+	.rx_tbl			= sdm845_qhp_pcie_rx_tbl,
+	.rx_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_rx_tbl),
+	.pcs_tbl		= sdm845_qhp_pcie_pcs_tbl,
+	.pcs_tbl_num		= ARRAY_SIZE(sdm845_qhp_pcie_pcs_tbl),
+	.clk_list		= sdm845_pciephy_clk_l,
+	.num_clks		= ARRAY_SIZE(sdm845_pciephy_clk_l),
+	.reset_list		= sdm845_pciephy_reset_l,
+	.num_resets		= ARRAY_SIZE(sdm845_pciephy_reset_l),
+	.vreg_list		= qmp_phy_vreg_l,
+	.num_vregs		= ARRAY_SIZE(qmp_phy_vreg_l),
+	.regs			= sdm845_qhp_pciephy_regs_layout,
+
+	.start_ctrl		= PCS_START | SERDES_START,
+	.pwrdn_ctrl		= SW_PWRDN | REFCLK_DRV_DSBL,
+
+	.has_pwrdn_delay	= true,
+	.pwrdn_delay_min	= 995,		/* us */
+	.pwrdn_delay_max	= 1005,		/* us */
+};
+
 static const struct qmp_phy_cfg qmp_v3_usb3phy_cfg = {
 	.type			= PHY_TYPE_USB3,
 	.nlanes			= 1,
@@ -1449,6 +1752,7 @@
 	void __iomem *tx = qphy->tx;
 	void __iomem *rx = qphy->rx;
 	void __iomem *pcs = qphy->pcs;
+	void __iomem *pcs_misc = qphy->pcs_misc;
 	void __iomem *dp_com = qmp->dp_com;
 	void __iomem *status;
 	unsigned int mask, val, ready;
@@ -1519,6 +1823,9 @@
 	if (ret)
 		goto err_lane_rst;
 
+	qcom_qmp_phy_configure(pcs_misc, cfg->regs, cfg->pcs_misc_tbl,
+			       cfg->pcs_misc_tbl_num);
+
 	/*
 	 * Pull out PHY from POWER DOWN state.
 	 * This is active low enable signal to power-down PHY.
@@ -1853,7 +2160,7 @@
 	.owner		= THIS_MODULE,
 };
 
-static const struct phy_ops qcom_qmp_ufs_ops = {
+static const struct phy_ops qcom_qmp_pcie_ufs_ops = {
 	.power_on	= qcom_qmp_phy_enable,
 	.power_off	= qcom_qmp_phy_disable,
 	.set_mode	= qcom_qmp_phy_set_mode,
@@ -1953,8 +2260,8 @@
 		}
 	}
 
-	if (qmp->cfg->type == PHY_TYPE_UFS)
-		ops = &qcom_qmp_ufs_ops;
+	if (qmp->cfg->type == PHY_TYPE_UFS || qmp->cfg->type == PHY_TYPE_PCIE)
+		ops = &qcom_qmp_pcie_ufs_ops;
 
 	generic_phy = devm_phy_create(dev, np, ops);
 	if (IS_ERR(generic_phy)) {
@@ -1989,6 +2296,12 @@
 		.compatible = "qcom,ipq8074-qmp-pcie-phy",
 		.data = &ipq8074_pciephy_cfg,
 	}, {
+		.compatible = "qcom,sdm845-qhp-pcie-phy",
+		.data = &sdm845_qhp_pciephy_cfg,
+	}, {
+		.compatible = "qcom,sdm845-qmp-pcie-phy",
+		.data = &sdm845_qmp_pciephy_cfg,
+	}, {
 		.compatible = "qcom,sdm845-qmp-usb3-phy",
 		.data = &qmp_v3_usb3phy_cfg,
 	}, {
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 9ebeef2..448111b 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -176,6 +176,7 @@
 
 	return desc->name;
 }
+EXPORT_SYMBOL_GPL(pin_get_name);
 
 /* Deletes a range of pin descriptors */
 static void pinctrl_free_pindescs(struct pinctrl_dev *pctldev,
diff --git a/drivers/pinctrl/pinconf-generic.c b/drivers/pinctrl/pinconf-generic.c
index 9eb8630..dfef471 100644
--- a/drivers/pinctrl/pinconf-generic.c
+++ b/drivers/pinctrl/pinconf-generic.c
@@ -286,6 +286,7 @@
 	kfree(cfg);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(pinconf_generic_parse_dt_config);
 
 int pinconf_generic_dt_subnode_to_map(struct pinctrl_dev *pctldev,
 		struct device_node *np, struct pinctrl_map **map,
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
index 4432032..4e0bbfc 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.c
+++ b/drivers/pinctrl/qcom/pinctrl-msm.c
@@ -23,6 +23,8 @@
 #include <linux/pm.h>
 #include <linux/log2.h>
 
+#include <linux/soc/qcom/irq.h>
+
 #include "../core.h"
 #include "../pinconf.h"
 #include "pinctrl-msm.h"
@@ -44,6 +46,7 @@
  * @enabled_irqs:   Bitmap of currently enabled irqs.
  * @dual_edge_irqs: Bitmap of irqs that need sw emulated dual edge
  *                  detection.
+ * @skip_wake_irqs: Skip IRQs that are handled by wakeup interrupt contrroller
  * @soc;            Reference to soc_data of platform specific data.
  * @regs:           Base addresses for the TLMM tiles.
  */
@@ -61,6 +64,7 @@
 
 	DECLARE_BITMAP(dual_edge_irqs, MAX_NR_GPIO);
 	DECLARE_BITMAP(enabled_irqs, MAX_NR_GPIO);
+	DECLARE_BITMAP(skip_wake_irqs, MAX_NR_GPIO);
 
 	const struct msm_pinctrl_soc_data *soc;
 	void __iomem *regs[MAX_NR_TILES];
@@ -707,6 +711,12 @@
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_mask_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -751,6 +761,12 @@
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_unmask_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -778,10 +794,37 @@
 
 static void msm_gpio_irq_enable(struct irq_data *d)
 {
+	/*
+	 * Clear the interrupt that may be pending before we enable
+	 * the line.
+	 * This is especially a problem with the GPIOs routed to the
+	 * PDC. These GPIOs are direct-connect interrupts to the GIC.
+	 * Disabling the interrupt line at the PDC does not prevent
+	 * the interrupt from being latched at the GIC. The state at
+	 * GIC needs to be cleared before enabling.
+	 */
+	if (d->parent_data) {
+		irq_chip_set_parent_state(d, IRQCHIP_STATE_PENDING, 0);
+		irq_chip_enable_parent(d);
+	}
 
 	msm_gpio_irq_clear_unmask(d, true);
 }
 
+static void msm_gpio_irq_disable(struct irq_data *d)
+{
+	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
+	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
+
+	if (d->parent_data)
+		irq_chip_disable_parent(d);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
+	msm_gpio_irq_mask(d);
+}
+
 static void msm_gpio_irq_unmask(struct irq_data *d)
 {
 	msm_gpio_irq_clear_unmask(d, false);
@@ -795,6 +838,9 @@
 	unsigned long flags;
 	u32 val;
 
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -820,6 +866,12 @@
 	unsigned long flags;
 	u32 val;
 
+	if (d->parent_data)
+		irq_chip_set_type_parent(d, type);
+
+	if (test_bit(d->hwirq, pctrl->skip_wake_irqs))
+		return 0;
+
 	g = &pctrl->soc->groups[d->hwirq];
 
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
@@ -912,6 +964,15 @@
 	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
 	unsigned long flags;
 
+	if (d->parent_data)
+		irq_chip_set_wake_parent(d, on);
+
+	/*
+	 * While they may not wake up when the TLMM is powered off,
+	 * some GPIOs would like to wakeup the system from suspend
+	 * when TLMM is powered on. To allow that, enable the GPIO
+	 * summary line to be wakeup capable at GIC.
+	 */
 	raw_spin_lock_irqsave(&pctrl->lock, flags);
 
 	irq_set_irq_wake(pctrl->irq, on);
@@ -990,6 +1051,30 @@
 	chained_irq_exit(chip, desc);
 }
 
+static int msm_gpio_wakeirq(struct gpio_chip *gc,
+			    unsigned int child,
+			    unsigned int child_type,
+			    unsigned int *parent,
+			    unsigned int *parent_type)
+{
+	struct msm_pinctrl *pctrl = gpiochip_get_data(gc);
+	const struct msm_gpio_wakeirq_map *map;
+	int i;
+
+	*parent = GPIO_NO_WAKE_IRQ;
+	*parent_type = IRQ_TYPE_EDGE_RISING;
+
+	for (i = 0; i < pctrl->soc->nwakeirq_map; i++) {
+		map = &pctrl->soc->wakeirq_map[i];
+		if (map->gpio == child) {
+			*parent = map->wakeirq;
+			break;
+		}
+	}
+
+	return 0;
+}
+
 static bool msm_gpio_needs_valid_mask(struct msm_pinctrl *pctrl)
 {
 	if (pctrl->soc->reserved_gpios)
@@ -1004,6 +1089,7 @@
 	struct gpio_irq_chip *girq;
 	int ret;
 	unsigned ngpio = pctrl->soc->ngpios;
+	struct device_node *dn;
 
 	if (WARN_ON(ngpio > MAX_NR_GPIO))
 		return -EINVAL;
@@ -1020,17 +1106,40 @@
 
 	pctrl->irq_chip.name = "msmgpio";
 	pctrl->irq_chip.irq_enable = msm_gpio_irq_enable;
+	pctrl->irq_chip.irq_disable = msm_gpio_irq_disable;
 	pctrl->irq_chip.irq_mask = msm_gpio_irq_mask;
 	pctrl->irq_chip.irq_unmask = msm_gpio_irq_unmask;
 	pctrl->irq_chip.irq_ack = msm_gpio_irq_ack;
+	pctrl->irq_chip.irq_eoi = irq_chip_eoi_parent;
 	pctrl->irq_chip.irq_set_type = msm_gpio_irq_set_type;
 	pctrl->irq_chip.irq_set_wake = msm_gpio_irq_set_wake;
 	pctrl->irq_chip.irq_request_resources = msm_gpio_irq_reqres;
 	pctrl->irq_chip.irq_release_resources = msm_gpio_irq_relres;
 
+	dn = of_parse_phandle(pctrl->dev->of_node, "wakeup-parent", 0);
+	if (dn) {
+		int i;
+		bool skip;
+		unsigned int gpio;
+
+		chip->irq.parent_domain = irq_find_matching_host(dn,
+						 DOMAIN_BUS_WAKEUP);
+		of_node_put(dn);
+		if (!chip->irq.parent_domain)
+			return -EPROBE_DEFER;
+		chip->irq.child_to_parent_hwirq = msm_gpio_wakeirq;
+
+		skip = irq_domain_qcom_handle_wakeup(chip->irq.parent_domain);
+		for (i = 0; skip && i < pctrl->soc->nwakeirq_map; i++) {
+			gpio = pctrl->soc->wakeirq_map[i].gpio;
+			set_bit(gpio, pctrl->skip_wake_irqs);
+		}
+	}
+
 	girq = &chip->irq;
 	girq->chip = &pctrl->irq_chip;
 	girq->parent_handler = msm_gpio_irq_handler;
+	girq->fwnode = pctrl->dev->fwnode;
 	girq->num_parents = 1;
 	girq->parents = devm_kcalloc(pctrl->dev, 1, sizeof(*girq->parents),
 				     GFP_KERNEL);
@@ -1066,6 +1175,16 @@
 		}
 	}
 
+	/*
+	 * Since we are chained to the GIC using the TLMM summary line
+	 * and in hierarchy with the wakeup parent interrupt controller,
+	 * explicitly set the chained summary line. We need to do this because
+	 * the summary line is not routed to the wakeup parent but directly
+	 * to the GIC.
+	 */
+	gpiochip_set_chained_irqchip(chip, &pctrl->irq_chip, pctrl->irq,
+				     msm_gpio_irq_handler);
+
 	return 0;
 }
 
diff --git a/drivers/pinctrl/qcom/pinctrl-msm.h b/drivers/pinctrl/qcom/pinctrl-msm.h
index 48569cda8..1547020 100644
--- a/drivers/pinctrl/qcom/pinctrl-msm.h
+++ b/drivers/pinctrl/qcom/pinctrl-msm.h
@@ -5,6 +5,8 @@
 #ifndef __PINCTRL_MSM_H__
 #define __PINCTRL_MSM_H__
 
+#include <linux/gpio/driver.h>
+
 struct pinctrl_pin_desc;
 
 /**
@@ -92,6 +94,16 @@
 };
 
 /**
+ * struct msm_gpio_wakeirq_map - Map of GPIOs and their wakeup pins
+ * @gpio:          The GPIOs that are wakeup capable
+ * @wakeirq:       The interrupt at the always-on interrupt controller
+ */
+struct msm_gpio_wakeirq_map {
+	unsigned int gpio;
+	unsigned int wakeirq;
+};
+
+/**
  * struct msm_pinctrl_soc_data - Qualcomm pin controller driver configuration
  * @pins:	    An array describing all pins the pin controller affects.
  * @npins:	    The number of entries in @pins.
@@ -101,6 +113,8 @@
  * @ngroups:	    The numbmer of entries in @groups.
  * @ngpio:	    The number of pingroups the driver should expose as GPIOs.
  * @pull_no_keeper: The SoC does not support keeper bias.
+ * @wakeirq_map:    The map of wakeup capable GPIOs and the pin at PDC/MPM
+ * @nwakeirq_map:   The number of entries in @hierarchy_map
  */
 struct msm_pinctrl_soc_data {
 	const struct pinctrl_pin_desc *pins;
@@ -114,6 +128,8 @@
 	const char *const *tiles;
 	unsigned int ntiles;
 	const int *reserved_gpios;
+	const struct msm_gpio_wakeirq_map *wakeirq_map;
+	unsigned int nwakeirq_map;
 };
 
 extern const struct dev_pm_ops msm_pinctrl_dev_pm_ops;
diff --git a/drivers/pinctrl/sprd/Kconfig b/drivers/pinctrl/sprd/Kconfig
index b6c5479..eef35d0 100644
--- a/drivers/pinctrl/sprd/Kconfig
+++ b/drivers/pinctrl/sprd/Kconfig
@@ -4,9 +4,7 @@
 #
 
 config PINCTRL_SPRD
-	bool "Spreadtrum pinctrl driver"
-	depends on OF
-	depends on ARCH_SPRD || COMPILE_TEST
+	tristate
 	select PINMUX
 	select PINCONF
 	select GENERIC_PINCONF
@@ -15,7 +13,9 @@
 	  Say Y here to enable Spreadtrum pinctrl driver
 
 config PINCTRL_SPRD_SC9860
-	bool "Spreadtrum SC9860 pinctrl driver"
-	depends on PINCTRL_SPRD
+	tristate "Spreadtrum SC9860 pinctrl driver"
+	depends on OF
+	depends on ARCH_SPRD || COMPILE_TEST
+	select PINCTRL_SPRD
 	help
 	  Say Y here to enable Spreadtrum SC9860 pinctrl driver
diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c
index 7b95bf5..48cbf2a 100644
--- a/drivers/pinctrl/sprd/pinctrl-sprd.c
+++ b/drivers/pinctrl/sprd/pinctrl-sprd.c
@@ -41,7 +41,8 @@
 #define PUBCP_SLEEP_MODE		BIT(14)
 #define TGLDSP_SLEEP_MODE		BIT(15)
 #define AGDSP_SLEEP_MODE		BIT(16)
-#define SLEEP_MODE_MASK			GENMASK(3, 0)
+#define CM4_SLEEP_MODE			BIT(17)
+#define SLEEP_MODE_MASK			GENMASK(5, 0)
 #define SLEEP_MODE_SHIFT		13
 
 #define SLEEP_INPUT			BIT(1)
@@ -81,6 +82,7 @@
 	PUBCP_SLEEP = BIT(1),
 	TGLDSP_SLEEP = BIT(2),
 	AGDSP_SLEEP = BIT(3),
+	CM4_SLEEP = BIT(4),
 };
 
 enum pin_func_sel {
@@ -462,9 +464,15 @@
 		case PIN_CONFIG_INPUT_ENABLE:
 			arg = (reg >> SLEEP_INPUT_SHIFT) & SLEEP_INPUT_MASK;
 			break;
-		case PIN_CONFIG_OUTPUT:
+		case PIN_CONFIG_OUTPUT_ENABLE:
 			arg = reg & SLEEP_OUTPUT_MASK;
 			break;
+		case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+			if ((reg & SLEEP_OUTPUT) || (reg & SLEEP_INPUT))
+				return -EINVAL;
+
+			arg = 1;
+			break;
 		case PIN_CONFIG_DRIVE_STRENGTH:
 			arg = (reg >> DRIVE_STRENGTH_SHIFT) &
 				DRIVE_STRENGTH_MASK;
@@ -484,6 +492,13 @@
 			       SLEEP_PULL_UP_MASK) << 16;
 			arg |= (reg >> PULL_UP_SHIFT) & PULL_UP_MASK;
 			break;
+		case PIN_CONFIG_BIAS_DISABLE:
+			if ((reg & (SLEEP_PULL_DOWN | SLEEP_PULL_UP)) ||
+			    (reg & (PULL_DOWN | PULL_UP_4_7K | PULL_UP_20K)))
+				return -EINVAL;
+
+			arg = 1;
+			break;
 		case PIN_CONFIG_SLEEP_HARDWARE_STATE:
 			arg = 0;
 			break;
@@ -609,6 +624,8 @@
 					val |= TGLDSP_SLEEP_MODE;
 				if (arg & AGDSP_SLEEP)
 					val |= AGDSP_SLEEP_MODE;
+				if (arg & CM4_SLEEP)
+					val |= CM4_SLEEP_MODE;
 
 				mask = SLEEP_MODE_MASK;
 				shift = SLEEP_MODE_SHIFT;
@@ -624,13 +641,23 @@
 					shift = SLEEP_INPUT_SHIFT;
 				}
 				break;
-			case PIN_CONFIG_OUTPUT:
+			case PIN_CONFIG_OUTPUT_ENABLE:
 				if (is_sleep_config == true) {
-					val |= SLEEP_OUTPUT;
+					if (arg > 0)
+						val |= SLEEP_OUTPUT;
+					else
+						val &= ~SLEEP_OUTPUT;
+
 					mask = SLEEP_OUTPUT_MASK;
 					shift = SLEEP_OUTPUT_SHIFT;
 				}
 				break;
+			case PIN_CONFIG_BIAS_HIGH_IMPEDANCE:
+				if (is_sleep_config == true) {
+					val = shift = 0;
+					mask = SLEEP_OUTPUT | SLEEP_INPUT;
+				}
+				break;
 			case PIN_CONFIG_DRIVE_STRENGTH:
 				if (arg < 2 || arg > 60)
 					return -EINVAL;
@@ -674,6 +701,16 @@
 					shift = PULL_UP_SHIFT;
 				}
 				break;
+			case PIN_CONFIG_BIAS_DISABLE:
+				if (is_sleep_config == true) {
+					val = shift = 0;
+					mask = SLEEP_PULL_DOWN | SLEEP_PULL_UP;
+				} else {
+					val = shift = 0;
+					mask = PULL_DOWN | PULL_UP_20K |
+						PULL_UP_4_7K;
+				}
+				break;
 			case PIN_CONFIG_SLEEP_HARDWARE_STATE:
 				continue;
 			default:
@@ -1069,6 +1106,7 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_core_probe);
 
 int sprd_pinctrl_remove(struct platform_device *pdev)
 {
@@ -1077,6 +1115,7 @@
 	pinctrl_unregister(sprd_pctl->pctl);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_remove);
 
 void sprd_pinctrl_shutdown(struct platform_device *pdev)
 {
@@ -1091,6 +1130,7 @@
 		return;
 	pinctrl_select_state(pinctl, state);
 }
+EXPORT_SYMBOL_GPL(sprd_pinctrl_shutdown);
 
 MODULE_DESCRIPTION("SPREADTRUM Pin Controller Driver");
 MODULE_AUTHOR("Baolin Wang <baolin.wang@spreadtrum.com>");
diff --git a/drivers/pinctrl/sunxi/Kconfig b/drivers/pinctrl/sunxi/Kconfig
index f7aae20..5932935 100644
--- a/drivers/pinctrl/sunxi/Kconfig
+++ b/drivers/pinctrl/sunxi/Kconfig
@@ -94,6 +94,16 @@
 	default ARM64 && ARCH_SUNXI
 	select PINCTRL_SUNXI
 
+config PINCTRL_SUN50I_A100
+	bool "Support for the Allwinner A100 PIO"
+	default ARM64 && ARCH_SUNXI
+	select PINCTRL_SUNXI
+
+config PINCTRL_SUN50I_A100_R
+	bool "Support for the Allwinner A100 R-PIO"
+	default ARM64 && ARCH_SUNXI
+	select PINCTRL_SUNXI
+
 config PINCTRL_SUN50I_H5
 	bool "Support for the Allwinner H5 PIO"
 	default ARM64 && ARCH_SUNXI
diff --git a/drivers/pinctrl/sunxi/Makefile b/drivers/pinctrl/sunxi/Makefile
index fafcdae..8b7ff0d 100644
--- a/drivers/pinctrl/sunxi/Makefile
+++ b/drivers/pinctrl/sunxi/Makefile
@@ -13,6 +13,8 @@
 obj-$(CONFIG_PINCTRL_SUN8I_A33)		+= pinctrl-sun8i-a33.o
 obj-$(CONFIG_PINCTRL_SUN50I_A64)	+= pinctrl-sun50i-a64.o
 obj-$(CONFIG_PINCTRL_SUN50I_A64_R)	+= pinctrl-sun50i-a64-r.o
+obj-$(CONFIG_PINCTRL_SUN50I_A100)	+= pinctrl-sun50i-a100.o
+obj-$(CONFIG_PINCTRL_SUN50I_A100_R)	+= pinctrl-sun50i-a100-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_A83T)	+= pinctrl-sun8i-a83t.o
 obj-$(CONFIG_PINCTRL_SUN8I_A83T_R)	+= pinctrl-sun8i-a83t-r.o
 obj-$(CONFIG_PINCTRL_SUN8I_H3)		+= pinctrl-sun8i-h3.o
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c
new file mode 100644
index 0000000..21054fc
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c
@@ -0,0 +1,105 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ *
+ * Based on:
+ * huangshuosheng <huangshuosheng@allwinnertech.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/platform_device.h>
+
+#include "pinctrl-sunxi.h"
+
+static const struct sunxi_desc_pin a100_r_pins[] = {
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c0"),	/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c0"),	/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_uart0"),	/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_uart0"),	/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* MS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* CK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* DO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_jtag"),	/* DI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c1"),	/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_i2c1"),	/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "s_pwm"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(L, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "s_cir"),		/* IN */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 11)),
+};
+
+static const struct sunxi_pinctrl_desc a100_r_pinctrl_data = {
+	.pins = a100_r_pins,
+	.npins = ARRAY_SIZE(a100_r_pins),
+	.pin_base = PL_BASE,
+	.irq_banks = 1,
+};
+
+static int a100_r_pinctrl_probe(struct platform_device *pdev)
+{
+	return sunxi_pinctrl_init(pdev, &a100_r_pinctrl_data);
+}
+
+static const struct of_device_id a100_r_pinctrl_match[] = {
+	{ .compatible = "allwinner,sun50i-a100-r-pinctrl", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, a100_r_pinctrl_match);
+
+static struct platform_driver a100_r_pinctrl_driver = {
+	.probe	= a100_r_pinctrl_probe,
+	.driver	= {
+		.name		= "sun50iw10p1-r-pinctrl",
+		.of_match_table	= a100_r_pinctrl_match,
+	},
+};
+module_platform_driver(a100_r_pinctrl_driver);
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c
new file mode 100644
index 0000000..e69f6da
--- /dev/null
+++ b/drivers/pinctrl/sunxi/pinctrl-sun50i-a100.c
@@ -0,0 +1,708 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ *
+ * Based on:
+ * huangshuosheng <huangshuosheng@allwinnertech.com>
+ */
+
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/pinctrl/pinctrl.h>
+#include <linux/platform_device.h>
+
+#include "pinctrl-sunxi.h"
+
+static const struct sunxi_desc_pin a100_pins[] = {
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CS */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* MS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* CK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* RTS */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MOSI */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* DO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart2"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "jtag"),		/* DI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* MCLK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* MS_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* BCLK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* CK_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s0"),		/* LRCK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DO_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "spdif"),		/* DIN */
+		  SUNXI_FUNCTION(0x3, "i2s0_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s0_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "spdif"),		/* DOUT */
+		  SUNXI_FUNCTION(0x3, "i2s0_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x4, "i2s0_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart0"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DI_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(B, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart0"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION(0x4, "pwm1"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 0, 10)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* WE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* DS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* ALE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* RST */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CLE */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* MOSI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE1 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CS0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* CE0 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* MISO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RE */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB0 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* CMD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* RB1 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CS1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ7 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ6 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D4 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ5 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ4 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D5 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQS */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ3 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ2 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D6 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ1 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D2 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* WP */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(C, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "nand0"),		/* DQ0 */
+		  SUNXI_FUNCTION(0x3, "mmc2"),		/* D7 */
+		  SUNXI_FUNCTION(0x4, "spi0"),		/* HOLD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 1, 16)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D2 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D0P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D3 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D0N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D4 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D1P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D5 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D1N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D6 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D2P */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* CKP */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D7 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* D2N */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* CKM */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D10 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* CKP */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D11 */
+		  SUNXI_FUNCTION(0x3, "lvds0"),		/* CKN */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D12 */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DP3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D13 */
+		  SUNXI_FUNCTION(0x4, "dsi0"),		/* DM3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D14 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* CS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D15 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D18 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* MOSI */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D19 */
+		  SUNXI_FUNCTION(0x4, "spi1"),		/* MISO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D20 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D21 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D22 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 16)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 17),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* D23 */
+		  SUNXI_FUNCTION(0x4, "uart3"),		/* CTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 17)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 18),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 18)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 19),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* DE */
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 19)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 20),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* HSYNC */
+		  SUNXI_FUNCTION(0x3, "pwm2"),
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 20)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 21),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "lcd0"),		/* VSYNC */
+		  SUNXI_FUNCTION(0x3, "pwm3"),
+		  SUNXI_FUNCTION(0x4, "uart4"),		/* CTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 21)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 22),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "pwm1"),
+		  SUNXI_FUNCTION(0x4, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 22)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(D, 23),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "pwm0"),
+		  SUNXI_FUNCTION(0x4, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 2, 23)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c2"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c3"),		/* SDA */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* MCLK */
+		  SUNXI_FUNCTION(0x3, "pll"),		/* LOCK_DBG */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "ledc"),		/* LEDC */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT0 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* BCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "csi"),		/* SM_VS */
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT1 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "tcon0"),		/* TRIG */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3,	7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT2 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* DOUT0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(E, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "bist0"),		/* RESULT3 */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* DIN0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 3, 9)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D1 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* MS1 */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* MS_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D0 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* DI1 */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DI_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CLK */
+		  SUNXI_FUNCTION(0x3, "uart0"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* CMD */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* DO */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* DO_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D3 */
+		  SUNXI_FUNCTION(0x3, "uart0"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc0"),		/* D2 */
+		  SUNXI_FUNCTION(0x3, "jtag"),		/* CK */
+		  SUNXI_FUNCTION(0x4, "jtag_gpu"),	/* CK_GPU */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(F, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 4, 6)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* CMD */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "mmc1"),		/* D3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* TX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* RX */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* RTS */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart1"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* MCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* BCLK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1"),		/* LRCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s1_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(G, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s1_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x4, "i2s1_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 5, 13)),
+	/* HOLE */
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 0),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 0)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 1),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c0"),		/* SDA */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 1)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 2),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXCTL */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 2)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 3),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "i2c1"),		/* SDA */
+		  SUNXI_FUNCTION(0x3, "cir0"),		/* OUT */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* CLKIN */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 3)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 4),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* TX */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* CS */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 4)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 5),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* RX */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "ledc"),
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD0 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 5)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 6),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* RTS */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* MOSI */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 6)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 7),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "uart3"),		/* CTS */
+		  SUNXI_FUNCTION(0x3, "spi1"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "spdif"),		/* OUT */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXCTL */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 7)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 8),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* CLK */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CS */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "i2s2_din2"),	/* DIN2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 8)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 9),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA0 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* CLK */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* BCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* MDC */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 9)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 10),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA1 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MOSI */
+		  SUNXI_FUNCTION(0x4, "i2s2"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* MDIO */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 10)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 11),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA2 */
+		  SUNXI_FUNCTION(0x3, "spi2"),		/* MISO */
+		  SUNXI_FUNCTION(0x4, "i2s2_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x5, "i2s2_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 11)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 12),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "dmic"),		/* DATA3 */
+		  SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "i2s2_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x5, "i2s2_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 12)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 13),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2c3"),		/* SCK */
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* MCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* EPHY */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 13)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 14),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* BCLK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 14)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 15),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x4, "i2s3"),		/* LRCK */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXD2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 15)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 16),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s3_dout0"),	/* DOUT0 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din1"),	/* DIN1 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* RXCK */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 16)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x3, "i2s3_dout1"),	/* DOUT1 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din0"),	/* DIN0 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD3 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 17)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 18),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "cir0"),		/* OUT */
+		  SUNXI_FUNCTION(0x3, "i2s3_dout2"),	/* DOUT2 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din2"),	/* DIN2 */
+		  SUNXI_FUNCTION(0x5, "emac0"),		/* TXD2 */
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 18)),
+	SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 19),
+		  SUNXI_FUNCTION(0x0, "gpio_in"),
+		  SUNXI_FUNCTION(0x1, "gpio_out"),
+		  SUNXI_FUNCTION(0x2, "cir0"),		/* IN */
+		  SUNXI_FUNCTION(0x3, "i2s3_dout3"),	/* DOUT3 */
+		  SUNXI_FUNCTION(0x4, "i2s3_din3"),	/* DIN3 */
+		  SUNXI_FUNCTION(0x5, "ledc"),
+		  SUNXI_FUNCTION_IRQ_BANK(0x6, 6, 19)),
+};
+
+static const unsigned int a100_irq_bank_map[] = { 1, 2, 3, 4, 5, 6, 7};
+
+static const struct sunxi_pinctrl_desc a100_pinctrl_data = {
+	.pins = a100_pins,
+	.npins = ARRAY_SIZE(a100_pins),
+	.irq_banks = 7,
+	.irq_bank_map = a100_irq_bank_map,
+	.io_bias_cfg_variant = BIAS_VOLTAGE_PIO_POW_MODE_SEL,
+};
+
+static int a100_pinctrl_probe(struct platform_device *pdev)
+{
+	return sunxi_pinctrl_init(pdev, &a100_pinctrl_data);
+}
+
+static const struct of_device_id a100_pinctrl_match[] = {
+	{ .compatible = "allwinner,sun50i-a100-pinctrl", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, a100_pinctrl_match);
+
+static struct platform_driver a100_pinctrl_driver = {
+	.probe	= a100_pinctrl_probe,
+	.driver	= {
+		.name		= "sun50i-a100-pinctrl",
+		.of_match_table	= a100_pinctrl_match,
+	},
+};
+module_platform_driver(a100_pinctrl_driver);
diff --git a/drivers/platform/chrome/chromeos_pstore.c b/drivers/platform/chrome/chromeos_pstore.c
index d137707..fa51153 100644
--- a/drivers/platform/chrome/chromeos_pstore.c
+++ b/drivers/platform/chrome/chromeos_pstore.c
@@ -57,7 +57,7 @@
 	.record_size	= 0x40000,
 	.console_size	= 0x20000,
 	.ftrace_size	= 0x20000,
-	.dump_oops	= 1,
+	.max_reason	= KMSG_DUMP_OOPS,
 };
 
 static struct platform_device chromeos_ramoops = {
diff --git a/drivers/power/reset/Kconfig b/drivers/power/reset/Kconfig
index a564237..f58f303 100644
--- a/drivers/power/reset/Kconfig
+++ b/drivers/power/reset/Kconfig
@@ -94,7 +94,7 @@
 	  create a binding in your devicetree.
 
 config POWER_RESET_HISI
-	bool "Hisilicon power-off driver"
+	tristate "Hisilicon power-off driver"
 	depends on ARCH_HISI
 	help
 	  Reboot support for Hisilicon boards.
@@ -238,7 +238,7 @@
 	  action according to the mode.
 
 config POWER_RESET_SC27XX
-	bool "Spreadtrum SC27xx PMIC power-off driver"
+	tristate "Spreadtrum SC27xx PMIC power-off driver"
 	depends on MFD_SC27XX_PMIC || COMPILE_TEST
 	help
 	  This driver supports powering off a system through
diff --git a/drivers/power/reset/hisi-reboot.c b/drivers/power/reset/hisi-reboot.c
index 0ba5fdc..283afb5 100644
--- a/drivers/power/reset/hisi-reboot.c
+++ b/drivers/power/reset/hisi-reboot.c
@@ -8,26 +8,64 @@
  * Author: Haojian Zhuang <haojian.zhuang@linaro.org>
  */
 
+#include <linux/bitops.h>
 #include <linux/delay.h>
 #include <linux/io.h>
 #include <linux/module.h>
+#include <linux/mfd/syscon.h>
 #include <linux/notifier.h>
 #include <linux/of_address.h>
 #include <linux/platform_device.h>
 #include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <asm/system_misc.h>
 
 #include <asm/proc-fns.h>
 
 static void __iomem *base;
 static u32 reboot_offset;
+static struct regmap *pmu_regmap;
+static struct regmap *sctrl_regmap;
+
+#define REBOOT_REASON_BOOTLOADER (0x01)
+#define REBOOT_REASON_COLDBOOT   (0x00)
+#define DDR_BYPASS               BIT(31)
+
+#define RST_FLAG_MASK            GENMASK(7, 0)
+
+#define PMU_HRST_OFFSET		((0x101) << 2)
+#define SCPEREN1_OFFSET		(0x170)
 
 static int hisi_restart_handler(struct notifier_block *this,
 				unsigned long mode, void *cmd)
 {
-	writel_relaxed(0xdeadbeef, base + reboot_offset);
+	int ret;
+	char reboot_reason;
+
+	if (!cmd || !strcmp(cmd, "bootloader"))
+		reboot_reason = REBOOT_REASON_BOOTLOADER;
+	else
+		reboot_reason = REBOOT_REASON_COLDBOOT;
+
+	if (base) {
+		writel_relaxed(0xdeadbeef, base + reboot_offset);
+	} else {
+		ret = regmap_update_bits(pmu_regmap, PMU_HRST_OFFSET,
+					 RST_FLAG_MASK, reboot_reason);
+		if (ret)
+			return ret;
+
+		ret = regmap_write(sctrl_regmap, SCPEREN1_OFFSET, DDR_BYPASS);
+		if (ret)
+			return ret;
+
+		ret = regmap_write(sctrl_regmap, reboot_offset, 0xdeadbeef);
+		if (ret)
+			return ret;
+	}
 
 	while (1)
-		cpu_do_idle();
+		mdelay(1);
 
 	return NOTIFY_DONE;
 }
@@ -44,8 +82,17 @@
 
 	base = of_iomap(np, 0);
 	if (!base) {
-		WARN(1, "failed to map base address");
-		return -ENODEV;
+		pmu_regmap = syscon_regmap_lookup_by_phandle(np, "pmu-regmap");
+		if (!pmu_regmap) {
+			WARN(1, "failed to regmap pmu address");
+			return -ENODEV;
+		}
+
+		sctrl_regmap = syscon_regmap_lookup_by_phandle(np, "sctrl-regmap");
+		if (!sctrl_regmap) {
+			WARN(1, "failed to regmap sctrl address");
+			return -ENODEV;
+		}
 	}
 
 	if (of_property_read_u32(np, "reboot-offset", &reboot_offset) < 0) {
@@ -66,6 +113,7 @@
 
 static const struct of_device_id hisi_reboot_of_match[] = {
 	{ .compatible = "hisilicon,sysctrl" },
+	{ .compatible = "hisilicon,hi3660-reboot" },
 	{}
 };
 
@@ -77,3 +125,6 @@
 	},
 };
 module_platform_driver(hisi_reboot_driver);
+
+MODULE_DESCRIPTION("Reset driver for HiSi SoCs");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/reset/sc27xx-poweroff.c b/drivers/power/reset/sc27xx-poweroff.c
index 29fb08b..6986307 100644
--- a/drivers/power/reset/sc27xx-poweroff.c
+++ b/drivers/power/reset/sc27xx-poweroff.c
@@ -6,6 +6,7 @@
 
 #include <linux/cpu.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/pm.h>
 #include <linux/regmap.h>
@@ -13,6 +14,8 @@
 
 #define SC27XX_PWR_PD_HW	0xc2c
 #define SC27XX_PWR_OFF_EN	BIT(0)
+#define SC27XX_SLP_CTRL		0xdf0
+#define SC27XX_LDO_XTL_EN	BIT(3)
 
 static struct regmap *regmap;
 
@@ -27,10 +30,13 @@
  */
 static void sc27xx_poweroff_shutdown(void)
 {
-#ifdef CONFIG_PM_SLEEP_SMP
-	int cpu = smp_processor_id();
+#ifdef CONFIG_HOTPLUG_CPU
+	int cpu;
 
-	freeze_secondary_cpus(cpu);
+	for_each_online_cpu(cpu) {
+		if (cpu != smp_processor_id())
+			cpu_down(cpu);
+	}
 #endif
 }
 
@@ -40,6 +46,9 @@
 
 static void sc27xx_poweroff_do_poweroff(void)
 {
+	/* Disable the external subsys connection's power firstly */
+	regmap_write(regmap, SC27XX_SLP_CTRL, SC27XX_LDO_XTL_EN);
+
 	regmap_write(regmap, SC27XX_PWR_PD_HW, SC27XX_PWR_OFF_EN);
 }
 
@@ -63,4 +72,8 @@
 		.name = "sc27xx-poweroff",
 	},
 };
-builtin_platform_driver(sc27xx_poweroff_driver);
+module_platform_driver(sc27xx_poweroff_driver);
+
+MODULE_DESCRIPTION("Power off driver for SC27XX PMIC Device");
+MODULE_AUTHOR("Baolin Wang <baolin.wang@unisoc.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/power/supply/Kconfig b/drivers/power/supply/Kconfig
index ffdb152..eb126a4 100644
--- a/drivers/power/supply/Kconfig
+++ b/drivers/power/supply/Kconfig
@@ -480,7 +480,7 @@
 	  called gpio-charger.
 
 config CHARGER_MANAGER
-	bool "Battery charger manager for multiple chargers"
+	tristate "Battery charger manager for multiple chargers"
 	depends on REGULATOR
 	select EXTCON
 	help
diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
index a2f56a6..7839597 100644
--- a/drivers/power/supply/power_supply_core.c
+++ b/drivers/power/supply/power_supply_core.c
@@ -32,6 +32,13 @@
 
 static struct device_type power_supply_dev_type;
 
+struct match_device_node_array_param {
+	struct device_node *parent_of_node;
+	struct power_supply **psy;
+	ssize_t psy_size;
+	ssize_t psy_count;
+};
+
 #define POWER_SUPPLY_DEFERRED_REGISTER_TIME	msecs_to_jiffies(10)
 
 static bool __power_supply_is_supplied_by(struct power_supply *supplier,
@@ -522,6 +529,77 @@
 }
 EXPORT_SYMBOL_GPL(power_supply_get_by_phandle);
 
+static int power_supply_match_device_node_array(struct device *dev,
+						void *data)
+{
+	struct match_device_node_array_param *param =
+		(struct match_device_node_array_param *)data;
+	struct power_supply **psy = param->psy;
+	ssize_t size = param->psy_size;
+	ssize_t *count = &param->psy_count;
+
+	if (!dev->parent || dev->parent->of_node != param->parent_of_node)
+		return 0;
+
+	if (*count >= size)
+		return -EOVERFLOW;
+
+	psy[*count] = dev_get_drvdata(dev);
+	atomic_inc(&psy[*count]->use_cnt);
+	(*count)++;
+
+	return 0;
+}
+
+/**
+ * power_supply_get_by_phandle_array() - Similar to
+ * power_supply_get_by_phandle but returns an array of power supply
+ * objects which are associated with the phandle.
+ * @np: Pointer to device node holding phandle property.
+ * @property: Name of property holding a power supply name.
+ * @psy: Array of power_supply pointers provided by the client which is
+ * filled by power_supply_get_by_phandle_array.
+ * @size: size of power_supply pointer array.
+ *
+ * If power supply was found, it increases reference count for the
+ * internal power supply's device. The user should power_supply_put()
+ * after usage.
+ *
+ * Return: On success returns the number of power supply objects filled
+ * in the @psy array.
+ * -EOVERFLOW when size of @psy array is not suffice.
+ * -EINVAL when @psy is NULL or @size is 0.
+ * -ENODEV when matching device_node is not found.
+ */
+int power_supply_get_by_phandle_array(struct device_node *np,
+				      const char *property,
+				      struct power_supply **psy,
+				      ssize_t size)
+{
+	struct device_node *power_supply_np;
+	int ret;
+	struct match_device_node_array_param param;
+
+	if (!psy || !size)
+		return -EINVAL;
+
+	power_supply_np = of_parse_phandle(np, property, 0);
+	if (!power_supply_np)
+		return -ENODEV;
+
+	param.parent_of_node = power_supply_np;
+	param.psy = psy;
+	param.psy_size = size;
+	param.psy_count = 0;
+	ret = class_for_each_device(power_supply_class, NULL, &param,
+				    power_supply_match_device_node_array);
+
+	of_node_put(power_supply_np);
+
+	return param.psy_count;
+}
+EXPORT_SYMBOL_GPL(power_supply_get_by_phandle_array);
+
 static void devm_power_supply_put(struct device *dev, void *res)
 {
 	struct power_supply **psy = res;
@@ -565,9 +643,11 @@
 int power_supply_get_battery_info(struct power_supply *psy,
 				  struct power_supply_battery_info *info)
 {
+	struct power_supply_resistance_temp_table *resist_table;
 	struct device_node *battery_np;
 	const char *value;
 	int err, len, index;
+	const __be32 *list;
 
 	info->energy_full_design_uwh         = -EINVAL;
 	info->charge_full_design_uah         = -EINVAL;
@@ -578,6 +658,7 @@
 	info->constant_charge_current_max_ua = -EINVAL;
 	info->constant_charge_voltage_max_uv = -EINVAL;
 	info->factory_internal_resistance_uohm  = -EINVAL;
+	info->resist_table = NULL;
 
 	for (index = 0; index < POWER_SUPPLY_OCV_TEMP_MAX; index++) {
 		info->ocv_table[index]       = NULL;
@@ -644,7 +725,6 @@
 	for (index = 0; index < len; index++) {
 		struct power_supply_battery_ocv_table *table;
 		char *propname;
-		const __be32 *list;
 		int i, tab_len, size;
 
 		propname = kasprintf(GFP_KERNEL, "ocv-capacity-table-%d", index);
@@ -677,6 +757,26 @@
 		}
 	}
 
+	list = of_get_property(battery_np, "resistance-temp-table", &len);
+	if (!list || !len)
+		goto out_put_node;
+
+	info->resist_table_size = len / (2 * sizeof(__be32));
+	resist_table = info->resist_table = devm_kcalloc(&psy->dev,
+							 info->resist_table_size,
+							 sizeof(*resist_table),
+							 GFP_KERNEL);
+	if (!info->resist_table) {
+		power_supply_put_battery_info(psy, info);
+		err = -ENOMEM;
+		goto out_put_node;
+	}
+
+	for (index = 0; index < info->resist_table_size; index++) {
+		resist_table[index].temp = be32_to_cpu(*list++);
+		resist_table[index].resistance = be32_to_cpu(*list++);
+	}
+
 out_put_node:
 	of_node_put(battery_np);
 	return err;
@@ -692,10 +792,53 @@
 		if (info->ocv_table[i])
 			devm_kfree(&psy->dev, info->ocv_table[i]);
 	}
+
+	if (info->resist_table)
+		devm_kfree(&psy->dev, info->resist_table);
 }
 EXPORT_SYMBOL_GPL(power_supply_put_battery_info);
 
 /**
+ * power_supply_temp2resist_simple() - find the battery internal resistance
+ * percent
+ * @table: Pointer to battery resistance temperature table
+ * @table_len: The table length
+ * @ocv: Current temperature
+ *
+ * This helper function is used to look up battery internal resistance percent
+ * according to current temperature value from the resistance temperature table,
+ * and the table must be ordered descending. Then the actual battery internal
+ * resistance = the ideal battery internal resistance * percent / 100.
+ *
+ * Return: the battery internal resistance percent
+ */
+int power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				    int table_len, int temp)
+{
+	int i, resist;
+
+	for (i = 0; i < table_len; i++)
+		if (temp > table[i].temp)
+			break;
+
+	if (i > 0 && i < table_len) {
+		int tmp;
+
+		tmp = (table[i - 1].resistance - table[i].resistance) *
+			(temp - table[i].temp);
+		tmp /= table[i - 1].temp - table[i].temp;
+		resist = tmp + table[i].resistance;
+	} else if (i == 0) {
+		resist = table[0].resistance;
+	} else {
+		resist = table[table_len - 1].resistance;
+	}
+
+	return resist;
+}
+EXPORT_SYMBOL_GPL(power_supply_temp2resist_simple);
+
+/**
  * power_supply_ocv2cap_simple() - find the battery capacity
  * @table: Pointer to battery OCV lookup table
  * @table_len: OCV table length
diff --git a/drivers/power/supply/power_supply_sysfs.c b/drivers/power/supply/power_supply_sysfs.c
index f37ad4e..583a90f 100644
--- a/drivers/power/supply/power_supply_sysfs.c
+++ b/drivers/power/supply/power_supply_sysfs.c
@@ -18,68 +18,216 @@
 
 #include "power_supply.h"
 
-/*
- * This is because the name "current" breaks the device attr macro.
- * The "current" word resolves to "(get_current())" so instead of
- * "current" "(get_current())" appears in the sysfs.
- *
- * The source of this definition is the device.h which calls __ATTR
- * macro in sysfs.h which calls the __stringify macro.
- *
- * Only modification that the name is not tried to be resolved
- * (as a macro let's say).
- */
+#define MAX_PROP_NAME_LEN 30
 
-#define POWER_SUPPLY_ATTR(_name)					\
-{									\
-	.attr = { .name = #_name },					\
-	.show = power_supply_show_property,				\
-	.store = power_supply_store_property,				\
+struct power_supply_attr {
+	const char *prop_name;
+	char attr_name[MAX_PROP_NAME_LEN + 1];
+	struct device_attribute dev_attr;
+	const char * const *text_values;
+	int text_values_len;
+};
+
+#define _POWER_SUPPLY_ATTR(_name, _text, _len)	\
+[POWER_SUPPLY_PROP_ ## _name] =			\
+{						\
+	.prop_name = #_name,			\
+	.attr_name = #_name "\0",		\
+	.text_values = _text,			\
+	.text_values_len = _len,		\
 }
 
-static struct device_attribute power_supply_attrs[];
+#define POWER_SUPPLY_ATTR(_name) _POWER_SUPPLY_ATTR(_name, NULL, 0)
+#define _POWER_SUPPLY_ENUM_ATTR(_name, _text)	\
+	_POWER_SUPPLY_ATTR(_name, _text, ARRAY_SIZE(_text))
+#define POWER_SUPPLY_ENUM_ATTR(_name)	\
+	_POWER_SUPPLY_ENUM_ATTR(_name, POWER_SUPPLY_ ## _name ## _TEXT)
 
-static const char * const power_supply_type_text[] = {
-	"Unknown", "Battery", "UPS", "Mains", "USB",
-	"USB_DCP", "USB_CDP", "USB_ACA", "USB_C",
-	"USB_PD", "USB_PD_DRP", "BrickID"
+static const char * const POWER_SUPPLY_TYPE_TEXT[] = {
+	[POWER_SUPPLY_TYPE_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_TYPE_BATTERY]		= "Battery",
+	[POWER_SUPPLY_TYPE_UPS]			= "UPS",
+	[POWER_SUPPLY_TYPE_MAINS]		= "Mains",
+	[POWER_SUPPLY_TYPE_USB]			= "USB",
+	[POWER_SUPPLY_TYPE_USB_DCP]		= "USB_DCP",
+	[POWER_SUPPLY_TYPE_USB_CDP]		= "USB_CDP",
+	[POWER_SUPPLY_TYPE_USB_ACA]		= "USB_ACA",
+	[POWER_SUPPLY_TYPE_USB_TYPE_C]		= "USB_C",
+	[POWER_SUPPLY_TYPE_USB_PD]		= "USB_PD",
+	[POWER_SUPPLY_TYPE_USB_PD_DRP]		= "USB_PD_DRP",
+	[POWER_SUPPLY_TYPE_APPLE_BRICK_ID]	= "BrickID",
+	[POWER_SUPPLY_TYPE_WIRELESS]		= "Wireless",
 };
 
-static const char * const power_supply_usb_type_text[] = {
-	"Unknown", "SDP", "DCP", "CDP", "ACA", "C",
-	"PD", "PD_DRP", "PD_PPS", "BrickID"
+static const char * const POWER_SUPPLY_USB_TYPE_TEXT[] = {
+	[POWER_SUPPLY_USB_TYPE_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_USB_TYPE_SDP]		= "SDP",
+	[POWER_SUPPLY_USB_TYPE_DCP]		= "DCP",
+	[POWER_SUPPLY_USB_TYPE_CDP]		= "CDP",
+	[POWER_SUPPLY_USB_TYPE_ACA]		= "ACA",
+	[POWER_SUPPLY_USB_TYPE_C]		= "C",
+	[POWER_SUPPLY_USB_TYPE_PD]		= "PD",
+	[POWER_SUPPLY_USB_TYPE_PD_DRP]		= "PD_DRP",
+	[POWER_SUPPLY_USB_TYPE_PD_PPS]		= "PD_PPS",
+	[POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID]	= "BrickID",
 };
 
-static const char * const power_supply_status_text[] = {
-	"Unknown", "Charging", "Discharging", "Not charging", "Full"
+static const char * const POWER_SUPPLY_STATUS_TEXT[] = {
+	[POWER_SUPPLY_STATUS_UNKNOWN]		= "Unknown",
+	[POWER_SUPPLY_STATUS_CHARGING]		= "Charging",
+	[POWER_SUPPLY_STATUS_DISCHARGING]	= "Discharging",
+	[POWER_SUPPLY_STATUS_NOT_CHARGING]	= "Not charging",
+	[POWER_SUPPLY_STATUS_FULL]		= "Full",
 };
 
-static const char * const power_supply_charge_type_text[] = {
-	"Unknown", "N/A", "Trickle", "Fast", "Standard", "Adaptive", "Custom"
+static const char * const POWER_SUPPLY_CHARGE_TYPE_TEXT[] = {
+	[POWER_SUPPLY_CHARGE_TYPE_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_CHARGE_TYPE_NONE]		= "N/A",
+	[POWER_SUPPLY_CHARGE_TYPE_TRICKLE]	= "Trickle",
+	[POWER_SUPPLY_CHARGE_TYPE_FAST]		= "Fast",
+	[POWER_SUPPLY_CHARGE_TYPE_STANDARD]	= "Standard",
+	[POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE]	= "Adaptive",
+	[POWER_SUPPLY_CHARGE_TYPE_CUSTOM]	= "Custom",
+	[POWER_SUPPLY_CHARGE_TYPE_TAPER]        = "Taper",
 };
 
-static const char * const power_supply_health_text[] = {
-	"Unknown", "Good", "Overheat", "Dead", "Over voltage",
-	"Unspecified failure", "Cold", "Watchdog timer expire",
-	"Safety timer expire", "Over current"
+static const char * const POWER_SUPPLY_HEALTH_TEXT[] = {
+	[POWER_SUPPLY_HEALTH_UNKNOWN]		    = "Unknown",
+	[POWER_SUPPLY_HEALTH_GOOD]		    = "Good",
+	[POWER_SUPPLY_HEALTH_OVERHEAT]		    = "Overheat",
+	[POWER_SUPPLY_HEALTH_DEAD]		    = "Dead",
+	[POWER_SUPPLY_HEALTH_OVERVOLTAGE]	    = "Over voltage",
+	[POWER_SUPPLY_HEALTH_UNSPEC_FAILURE]	    = "Unspecified failure",
+	[POWER_SUPPLY_HEALTH_COLD]		    = "Cold",
+	[POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE] = "Watchdog timer expire",
+	[POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE]   = "Safety timer expire",
+	[POWER_SUPPLY_HEALTH_OVERCURRENT]	    = "Over current",
+	[POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED]  = "Calibration required",
+	[POWER_SUPPLY_HEALTH_WARM]		    = "Warm",
+	[POWER_SUPPLY_HEALTH_COOL]		    = "Cool",
+	[POWER_SUPPLY_HEALTH_HOT]		    = "Hot",
 };
 
-static const char * const power_supply_technology_text[] = {
-	"Unknown", "NiMH", "Li-ion", "Li-poly", "LiFe", "NiCd",
-	"LiMn"
+static const char * const POWER_SUPPLY_TECHNOLOGY_TEXT[] = {
+	[POWER_SUPPLY_TECHNOLOGY_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_TECHNOLOGY_NiMH]		= "NiMH",
+	[POWER_SUPPLY_TECHNOLOGY_LION]		= "Li-ion",
+	[POWER_SUPPLY_TECHNOLOGY_LIPO]		= "Li-poly",
+	[POWER_SUPPLY_TECHNOLOGY_LiFe]		= "LiFe",
+	[POWER_SUPPLY_TECHNOLOGY_NiCd]		= "NiCd",
+	[POWER_SUPPLY_TECHNOLOGY_LiMn]		= "LiMn",
 };
 
-static const char * const power_supply_capacity_level_text[] = {
-	"Unknown", "Critical", "Low", "Normal", "High", "Full"
+static const char * const POWER_SUPPLY_CAPACITY_LEVEL_TEXT[] = {
+	[POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL]	= "Critical",
+	[POWER_SUPPLY_CAPACITY_LEVEL_LOW]	= "Low",
+	[POWER_SUPPLY_CAPACITY_LEVEL_NORMAL]	= "Normal",
+	[POWER_SUPPLY_CAPACITY_LEVEL_HIGH]	= "High",
+	[POWER_SUPPLY_CAPACITY_LEVEL_FULL]	= "Full",
 };
 
-static const char * const power_supply_scope_text[] = {
-	"Unknown", "System", "Device"
+static const char * const POWER_SUPPLY_SCOPE_TEXT[] = {
+	[POWER_SUPPLY_SCOPE_UNKNOWN]	= "Unknown",
+	[POWER_SUPPLY_SCOPE_SYSTEM]	= "System",
+	[POWER_SUPPLY_SCOPE_DEVICE]	= "Device",
 };
 
+static struct power_supply_attr power_supply_attrs[] = {
+	/* Properties of type `int' */
+	POWER_SUPPLY_ENUM_ATTR(STATUS),
+	POWER_SUPPLY_ENUM_ATTR(CHARGE_TYPE),
+	POWER_SUPPLY_ENUM_ATTR(HEALTH),
+	POWER_SUPPLY_ATTR(PRESENT),
+	POWER_SUPPLY_ATTR(ONLINE),
+	POWER_SUPPLY_ATTR(AUTHENTIC),
+	POWER_SUPPLY_ENUM_ATTR(TECHNOLOGY),
+	POWER_SUPPLY_ATTR(CYCLE_COUNT),
+	POWER_SUPPLY_ATTR(VOLTAGE_MAX),
+	POWER_SUPPLY_ATTR(VOLTAGE_MIN),
+	POWER_SUPPLY_ATTR(VOLTAGE_MAX_DESIGN),
+	POWER_SUPPLY_ATTR(VOLTAGE_MIN_DESIGN),
+	POWER_SUPPLY_ATTR(VOLTAGE_NOW),
+	POWER_SUPPLY_ATTR(VOLTAGE_AVG),
+	POWER_SUPPLY_ATTR(VOLTAGE_OCV),
+	POWER_SUPPLY_ATTR(VOLTAGE_BOOT),
+	POWER_SUPPLY_ATTR(CURRENT_MAX),
+	POWER_SUPPLY_ATTR(CURRENT_NOW),
+	POWER_SUPPLY_ATTR(CURRENT_AVG),
+	POWER_SUPPLY_ATTR(CURRENT_BOOT),
+	POWER_SUPPLY_ATTR(POWER_NOW),
+	POWER_SUPPLY_ATTR(POWER_AVG),
+	POWER_SUPPLY_ATTR(CHARGE_FULL_DESIGN),
+	POWER_SUPPLY_ATTR(CHARGE_EMPTY_DESIGN),
+	POWER_SUPPLY_ATTR(CHARGE_FULL),
+	POWER_SUPPLY_ATTR(CHARGE_EMPTY),
+	POWER_SUPPLY_ATTR(CHARGE_NOW),
+	POWER_SUPPLY_ATTR(CHARGE_AVG),
+	POWER_SUPPLY_ATTR(CHARGE_COUNTER),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_CURRENT),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_CURRENT_MAX),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_VOLTAGE),
+	POWER_SUPPLY_ATTR(CONSTANT_CHARGE_VOLTAGE_MAX),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_LIMIT),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_LIMIT_MAX),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_START_THRESHOLD),
+	POWER_SUPPLY_ATTR(CHARGE_CONTROL_END_THRESHOLD),
+	POWER_SUPPLY_ATTR(INPUT_CURRENT_LIMIT),
+	POWER_SUPPLY_ATTR(INPUT_VOLTAGE_LIMIT),
+	POWER_SUPPLY_ATTR(INPUT_POWER_LIMIT),
+	POWER_SUPPLY_ATTR(ENERGY_FULL_DESIGN),
+	POWER_SUPPLY_ATTR(ENERGY_EMPTY_DESIGN),
+	POWER_SUPPLY_ATTR(ENERGY_FULL),
+	POWER_SUPPLY_ATTR(ENERGY_EMPTY),
+	POWER_SUPPLY_ATTR(ENERGY_NOW),
+	POWER_SUPPLY_ATTR(ENERGY_AVG),
+	POWER_SUPPLY_ATTR(CAPACITY),
+	POWER_SUPPLY_ATTR(CAPACITY_ALERT_MIN),
+	POWER_SUPPLY_ATTR(CAPACITY_ALERT_MAX),
+	POWER_SUPPLY_ATTR(CAPACITY_ERROR_MARGIN),
+	POWER_SUPPLY_ENUM_ATTR(CAPACITY_LEVEL),
+	POWER_SUPPLY_ATTR(TEMP),
+	POWER_SUPPLY_ATTR(TEMP_MAX),
+	POWER_SUPPLY_ATTR(TEMP_MIN),
+	POWER_SUPPLY_ATTR(TEMP_ALERT_MIN),
+	POWER_SUPPLY_ATTR(TEMP_ALERT_MAX),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT_ALERT_MIN),
+	POWER_SUPPLY_ATTR(TEMP_AMBIENT_ALERT_MAX),
+	POWER_SUPPLY_ATTR(TIME_TO_EMPTY_NOW),
+	POWER_SUPPLY_ATTR(TIME_TO_EMPTY_AVG),
+	POWER_SUPPLY_ATTR(TIME_TO_FULL_NOW),
+	POWER_SUPPLY_ATTR(TIME_TO_FULL_AVG),
+	POWER_SUPPLY_ENUM_ATTR(TYPE),
+	POWER_SUPPLY_ATTR(USB_TYPE),
+	POWER_SUPPLY_ENUM_ATTR(SCOPE),
+	POWER_SUPPLY_ATTR(PRECHARGE_CURRENT),
+	POWER_SUPPLY_ATTR(CHARGE_TERM_CURRENT),
+	POWER_SUPPLY_ATTR(CALIBRATE),
+	POWER_SUPPLY_ATTR(MANUFACTURE_YEAR),
+	POWER_SUPPLY_ATTR(MANUFACTURE_MONTH),
+	POWER_SUPPLY_ATTR(MANUFACTURE_DAY),
+	/* Properties of type `const char *' */
+	POWER_SUPPLY_ATTR(MODEL_NAME),
+	POWER_SUPPLY_ATTR(MANUFACTURER),
+	POWER_SUPPLY_ATTR(SERIAL_NUMBER),
+};
+
+static struct attribute *
+__power_supply_attrs[ARRAY_SIZE(power_supply_attrs) + 1];
+
+static struct power_supply_attr *to_ps_attr(struct device_attribute *attr)
+{
+	return container_of(attr, struct power_supply_attr, dev_attr);
+}
+
+static enum power_supply_property dev_attr_psp(struct device_attribute *attr)
+{
+	return  to_ps_attr(attr) - power_supply_attrs;
+}
+
 static ssize_t power_supply_show_usb_type(struct device *dev,
-					  enum power_supply_usb_type *usb_types,
-					  ssize_t num_usb_types,
+					  const struct power_supply_desc *desc,
 					  union power_supply_propval *value,
 					  char *buf)
 {
@@ -88,16 +236,16 @@
 	bool match = false;
 	int i;
 
-	for (i = 0; i < num_usb_types; ++i) {
-		usb_type = usb_types[i];
+	for (i = 0; i < desc->num_usb_types; ++i) {
+		usb_type = desc->usb_types[i];
 
 		if (value->intval == usb_type) {
 			count += sprintf(buf + count, "[%s] ",
-					 power_supply_usb_type_text[usb_type]);
+					 POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
 			match = true;
 		} else {
 			count += sprintf(buf + count, "%s ",
-					 power_supply_usb_type_text[usb_type]);
+					 POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
 		}
 	}
 
@@ -117,7 +265,8 @@
 					  char *buf) {
 	ssize_t ret;
 	struct power_supply *psy = dev_get_drvdata(dev);
-	enum power_supply_property psp = attr - power_supply_attrs;
+	struct power_supply_attr *ps_attr = to_ps_attr(attr);
+	enum power_supply_property psp = dev_attr_psp(attr);
 	union power_supply_propval value;
 
 	if (psp == POWER_SUPPLY_PROP_TYPE) {
@@ -137,39 +286,15 @@
 		}
 	}
 
+	if (ps_attr->text_values_len > 0 &&
+	    value.intval < ps_attr->text_values_len && value.intval >= 0) {
+		return sprintf(buf, "%s\n", ps_attr->text_values[value.intval]);
+	}
+
 	switch (psp) {
-	case POWER_SUPPLY_PROP_STATUS:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_status_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_CHARGE_TYPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_charge_type_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_HEALTH:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_health_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_TECHNOLOGY:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_technology_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_capacity_level_text[value.intval]);
-		break;
-	case POWER_SUPPLY_PROP_TYPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_type_text[value.intval]);
-		break;
 	case POWER_SUPPLY_PROP_USB_TYPE:
-		ret = power_supply_show_usb_type(dev, psy->desc->usb_types,
-						 psy->desc->num_usb_types,
-						 &value, buf);
-		break;
-	case POWER_SUPPLY_PROP_SCOPE:
-		ret = sprintf(buf, "%s\n",
-			      power_supply_scope_text[value.intval]);
+		ret = power_supply_show_usb_type(dev, psy->desc,
+						&value, buf);
 		break;
 	case POWER_SUPPLY_PROP_MODEL_NAME ... POWER_SUPPLY_PROP_SERIAL_NUMBER:
 		ret = sprintf(buf, "%s\n", value.strval);
@@ -186,30 +311,14 @@
 					   const char *buf, size_t count) {
 	ssize_t ret;
 	struct power_supply *psy = dev_get_drvdata(dev);
-	enum power_supply_property psp = attr - power_supply_attrs;
+	struct power_supply_attr *ps_attr = to_ps_attr(attr);
+	enum power_supply_property psp = dev_attr_psp(attr);
 	union power_supply_propval value;
 
-	switch (psp) {
-	case POWER_SUPPLY_PROP_STATUS:
-		ret = sysfs_match_string(power_supply_status_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_CHARGE_TYPE:
-		ret = sysfs_match_string(power_supply_charge_type_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_HEALTH:
-		ret = sysfs_match_string(power_supply_health_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_TECHNOLOGY:
-		ret = sysfs_match_string(power_supply_technology_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
-		ret = sysfs_match_string(power_supply_capacity_level_text, buf);
-		break;
-	case POWER_SUPPLY_PROP_SCOPE:
-		ret = sysfs_match_string(power_supply_scope_text, buf);
-		break;
-	default:
-		ret = -EINVAL;
+	ret = -EINVAL;
+	if (ps_attr->text_values_len > 0) {
+		ret = __sysfs_match_string(ps_attr->text_values,
+					   ps_attr->text_values_len, buf);
 	}
 
 	/*
@@ -235,86 +344,6 @@
 	return count;
 }
 
-/* Must be in the same order as POWER_SUPPLY_PROP_* */
-static struct device_attribute power_supply_attrs[] = {
-	/* Properties of type `int' */
-	POWER_SUPPLY_ATTR(status),
-	POWER_SUPPLY_ATTR(charge_type),
-	POWER_SUPPLY_ATTR(health),
-	POWER_SUPPLY_ATTR(present),
-	POWER_SUPPLY_ATTR(online),
-	POWER_SUPPLY_ATTR(authentic),
-	POWER_SUPPLY_ATTR(technology),
-	POWER_SUPPLY_ATTR(cycle_count),
-	POWER_SUPPLY_ATTR(voltage_max),
-	POWER_SUPPLY_ATTR(voltage_min),
-	POWER_SUPPLY_ATTR(voltage_max_design),
-	POWER_SUPPLY_ATTR(voltage_min_design),
-	POWER_SUPPLY_ATTR(voltage_now),
-	POWER_SUPPLY_ATTR(voltage_avg),
-	POWER_SUPPLY_ATTR(voltage_ocv),
-	POWER_SUPPLY_ATTR(voltage_boot),
-	POWER_SUPPLY_ATTR(current_max),
-	POWER_SUPPLY_ATTR(current_now),
-	POWER_SUPPLY_ATTR(current_avg),
-	POWER_SUPPLY_ATTR(current_boot),
-	POWER_SUPPLY_ATTR(power_now),
-	POWER_SUPPLY_ATTR(power_avg),
-	POWER_SUPPLY_ATTR(charge_full_design),
-	POWER_SUPPLY_ATTR(charge_empty_design),
-	POWER_SUPPLY_ATTR(charge_full),
-	POWER_SUPPLY_ATTR(charge_empty),
-	POWER_SUPPLY_ATTR(charge_now),
-	POWER_SUPPLY_ATTR(charge_avg),
-	POWER_SUPPLY_ATTR(charge_counter),
-	POWER_SUPPLY_ATTR(constant_charge_current),
-	POWER_SUPPLY_ATTR(constant_charge_current_max),
-	POWER_SUPPLY_ATTR(constant_charge_voltage),
-	POWER_SUPPLY_ATTR(constant_charge_voltage_max),
-	POWER_SUPPLY_ATTR(charge_control_limit),
-	POWER_SUPPLY_ATTR(charge_control_limit_max),
-	POWER_SUPPLY_ATTR(charge_control_start_threshold),
-	POWER_SUPPLY_ATTR(charge_control_end_threshold),
-	POWER_SUPPLY_ATTR(input_current_limit),
-	POWER_SUPPLY_ATTR(input_voltage_limit),
-	POWER_SUPPLY_ATTR(input_power_limit),
-	POWER_SUPPLY_ATTR(energy_full_design),
-	POWER_SUPPLY_ATTR(energy_empty_design),
-	POWER_SUPPLY_ATTR(energy_full),
-	POWER_SUPPLY_ATTR(energy_empty),
-	POWER_SUPPLY_ATTR(energy_now),
-	POWER_SUPPLY_ATTR(energy_avg),
-	POWER_SUPPLY_ATTR(capacity),
-	POWER_SUPPLY_ATTR(capacity_alert_min),
-	POWER_SUPPLY_ATTR(capacity_alert_max),
-	POWER_SUPPLY_ATTR(capacity_level),
-	POWER_SUPPLY_ATTR(temp),
-	POWER_SUPPLY_ATTR(temp_max),
-	POWER_SUPPLY_ATTR(temp_min),
-	POWER_SUPPLY_ATTR(temp_alert_min),
-	POWER_SUPPLY_ATTR(temp_alert_max),
-	POWER_SUPPLY_ATTR(temp_ambient),
-	POWER_SUPPLY_ATTR(temp_ambient_alert_min),
-	POWER_SUPPLY_ATTR(temp_ambient_alert_max),
-	POWER_SUPPLY_ATTR(time_to_empty_now),
-	POWER_SUPPLY_ATTR(time_to_empty_avg),
-	POWER_SUPPLY_ATTR(time_to_full_now),
-	POWER_SUPPLY_ATTR(time_to_full_avg),
-	POWER_SUPPLY_ATTR(type),
-	POWER_SUPPLY_ATTR(usb_type),
-	POWER_SUPPLY_ATTR(scope),
-	POWER_SUPPLY_ATTR(precharge_current),
-	POWER_SUPPLY_ATTR(charge_term_current),
-	POWER_SUPPLY_ATTR(calibrate),
-	/* Properties of type `const char *' */
-	POWER_SUPPLY_ATTR(model_name),
-	POWER_SUPPLY_ATTR(manufacturer),
-	POWER_SUPPLY_ATTR(serial_number),
-};
-
-static struct attribute *
-__power_supply_attrs[ARRAY_SIZE(power_supply_attrs) + 1];
-
 static umode_t power_supply_attr_is_visible(struct kobject *kobj,
 					   struct attribute *attr,
 					   int attrno)
@@ -324,6 +353,9 @@
 	umode_t mode = S_IRUSR | S_IRGRP | S_IROTH;
 	int i;
 
+	if (!power_supply_attrs[attrno].prop_name)
+		return 0;
+
 	if (attrno == POWER_SUPPLY_PROP_TYPE)
 		return mode;
 
@@ -352,31 +384,69 @@
 	NULL,
 };
 
+static void str_to_lower(char *str)
+{
+	while (*str) {
+		*str = tolower(*str);
+		str++;
+	}
+}
+
 void power_supply_init_attrs(struct device_type *dev_type)
 {
 	int i;
 
 	dev_type->groups = power_supply_attr_groups;
 
-	for (i = 0; i < ARRAY_SIZE(power_supply_attrs); i++)
-		__power_supply_attrs[i] = &power_supply_attrs[i].attr;
+	for (i = 0; i < ARRAY_SIZE(power_supply_attrs); i++) {
+		struct device_attribute *attr;
+
+		if (!power_supply_attrs[i].prop_name) {
+			pr_warn("%s: Property %d skipped because is is missing from power_supply_attrs\n",
+				__func__, i);
+			sprintf(power_supply_attrs[i].attr_name, "_err_%d", i);
+		} else {
+			str_to_lower(power_supply_attrs[i].attr_name);
+		}
+
+		attr = &power_supply_attrs[i].dev_attr;
+
+		attr->attr.name = power_supply_attrs[i].attr_name;
+		attr->show = power_supply_show_property;
+		attr->store = power_supply_store_property;
+		__power_supply_attrs[i] = &attr->attr;
+	}
 }
 
-static char *kstruprdup(const char *str, gfp_t gfp)
+static int add_prop_uevent(struct device *dev, struct kobj_uevent_env *env,
+			   enum power_supply_property prop, char *prop_buf)
 {
-	char *ret, *ustr;
+	int ret = 0;
+	struct power_supply_attr *pwr_attr;
+	struct device_attribute *dev_attr;
+	char *line;
 
-	ustr = ret = kmalloc(strlen(str) + 1, gfp);
+	pwr_attr = &power_supply_attrs[prop];
+	dev_attr = &pwr_attr->dev_attr;
 
-	if (!ret)
-		return NULL;
+	ret = power_supply_show_property(dev, dev_attr, prop_buf);
+	if (ret == -ENODEV || ret == -ENODATA) {
+		/*
+		 * When a battery is absent, we expect -ENODEV. Don't abort;
+		 * send the uevent with at least the the PRESENT=0 property
+		 */
+		return 0;
+	}
 
-	while (*str)
-		*ustr++ = toupper(*str++);
+	if (ret < 0)
+		return ret;
 
-	*ustr = 0;
+	line = strchr(prop_buf, '\n');
+	if (line)
+		*line = 0;
 
-	return ret;
+	return add_uevent_var(env, "POWER_SUPPLY_%s=%s",
+			      pwr_attr->prop_name, prop_buf);
 }
 
 int power_supply_uevent(struct device *dev, struct kobj_uevent_env *env)
@@ -384,7 +454,6 @@
 	struct power_supply *psy = dev_get_drvdata(dev);
 	int ret = 0, j;
 	char *prop_buf;
-	char *attrname;
 
 	if (!psy || !psy->desc) {
 		dev_dbg(dev, "No power supply yet\n");
@@ -399,35 +468,13 @@
 	if (!prop_buf)
 		return -ENOMEM;
 
+	ret = add_prop_uevent(dev, env, POWER_SUPPLY_PROP_TYPE, prop_buf);
+	if (ret)
+		goto out;
+
 	for (j = 0; j < psy->desc->num_properties; j++) {
-		struct device_attribute *attr;
-		char *line;
-
-		attr = &power_supply_attrs[psy->desc->properties[j]];
-
-		ret = power_supply_show_property(dev, attr, prop_buf);
-		if (ret == -ENODEV || ret == -ENODATA) {
-			/* When a battery is absent, we expect -ENODEV. Don't abort;
-			   send the uevent with at least the the PRESENT=0 property */
-			ret = 0;
-			continue;
-		}
-
-		if (ret < 0)
-			goto out;
-
-		line = strchr(prop_buf, '\n');
-		if (line)
-			*line = 0;
-
-		attrname = kstruprdup(attr->attr.name, GFP_KERNEL);
-		if (!attrname) {
-			ret = -ENOMEM;
-			goto out;
-		}
-
-		ret = add_uevent_var(env, "POWER_SUPPLY_%s=%s", attrname, prop_buf);
-		kfree(attrname);
+		ret = add_prop_uevent(dev, env, psy->desc->properties[j],
+				      prop_buf);
 		if (ret)
 			goto out;
 	}
diff --git a/drivers/power/supply/sc27xx_fuel_gauge.c b/drivers/power/supply/sc27xx_fuel_gauge.c
index 5e5bcdb..839593d 100644
--- a/drivers/power/supply/sc27xx_fuel_gauge.c
+++ b/drivers/power/supply/sc27xx_fuel_gauge.c
@@ -62,6 +62,8 @@
 
 #define SC27XX_FGU_CUR_BASIC_ADC	8192
 #define SC27XX_FGU_SAMPLE_HZ		2
+/* micro Ohms */
+#define SC27XX_FGU_IDEAL_RESISTANCE	20000
 
 /*
  * struct sc27xx_fgu_data: describe the FGU device
@@ -81,9 +83,12 @@
  * @max_volt: the maximum constant input voltage in millivolt
  * @min_volt: the minimum drained battery voltage in microvolt
  * @table_len: the capacity table length
+ * @resist_table_len: the resistance table length
  * @cur_1000ma_adc: ADC value corresponding to 1000 mA
  * @vol_1000mv_adc: ADC value corresponding to 1000 mV
+ * @calib_resist: the real resistance of coulomb counter chip in uOhm
  * @cap_table: capacity table with corresponding ocv
+ * @resist_table: resistance percent table with corresponding temperature
  */
 struct sc27xx_fgu_data {
 	struct regmap *regmap;
@@ -103,15 +108,19 @@
 	int max_volt;
 	int min_volt;
 	int table_len;
+	int resist_table_len;
 	int cur_1000ma_adc;
 	int vol_1000mv_adc;
+	int calib_resist;
 	struct power_supply_battery_ocv_table *cap_table;
+	struct power_supply_resistance_temp_table *resist_table;
 };
 
 static int sc27xx_fgu_cap_to_clbcnt(struct sc27xx_fgu_data *data, int capacity);
 static void sc27xx_fgu_capacity_calibration(struct sc27xx_fgu_data *data,
 					    int cap, bool int_mode);
 static void sc27xx_fgu_adjust_cap(struct sc27xx_fgu_data *data, int cap);
+static int sc27xx_fgu_get_temp(struct sc27xx_fgu_data *data, int *temp);
 
 static const char * const sc27xx_charger_supply_name[] = {
 	"sc2731_charger",
@@ -434,7 +443,7 @@
 
 static int sc27xx_fgu_get_vbat_ocv(struct sc27xx_fgu_data *data, int *val)
 {
-	int vol, cur, ret;
+	int vol, cur, ret, temp, resistance;
 
 	ret = sc27xx_fgu_get_vbat_vol(data, &vol);
 	if (ret)
@@ -444,8 +453,19 @@
 	if (ret)
 		return ret;
 
+	resistance = data->internal_resist;
+	if (data->resist_table_len > 0) {
+		ret = sc27xx_fgu_get_temp(data, &temp);
+		if (ret)
+			return ret;
+
+		resistance = power_supply_temp2resist_simple(data->resist_table,
+						data->resist_table_len, temp);
+		resistance = data->internal_resist * resistance / 100;
+	}
+
 	/* Return the battery OCV in micro volts. */
-	*val = vol * 1000 - cur * data->internal_resist;
+	*val = vol * 1000 - cur * resistance;
 
 	return 0;
 }
@@ -594,6 +614,17 @@
 		val->intval = data->total_cap * 1000;
 		break;
 
+	case POWER_SUPPLY_PROP_CHARGE_NOW:
+		ret = sc27xx_fgu_get_clbcnt(data, &value);
+		if (ret)
+			goto error;
+
+		value = DIV_ROUND_CLOSEST(value * 10,
+					  36 * SC27XX_FGU_SAMPLE_HZ);
+		val->intval = sc27xx_fgu_adc_to_current(data, value);
+
+		break;
+
 	default:
 		ret = -EINVAL;
 		break;
@@ -662,6 +693,7 @@
 	POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE,
 	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
 	POWER_SUPPLY_PROP_CALIBRATE,
+	POWER_SUPPLY_PROP_CHARGE_NOW
 };
 
 static const struct power_supply_desc sc27xx_fgu_desc = {
@@ -884,7 +916,9 @@
 	 */
 	cal_4200mv = (calib_data & 0x1ff) + 6963 - 4096 - 256;
 	data->vol_1000mv_adc = DIV_ROUND_CLOSEST(cal_4200mv * 10, 42);
-	data->cur_1000ma_adc = data->vol_1000mv_adc * 4;
+	data->cur_1000ma_adc =
+		DIV_ROUND_CLOSEST(data->vol_1000mv_adc * 4 * data->calib_resist,
+				  SC27XX_FGU_IDEAL_RESISTANCE);
 
 	kfree(buf);
 	return 0;
@@ -929,6 +963,18 @@
 	if (!data->alarm_cap)
 		data->alarm_cap += 1;
 
+	data->resist_table_len = info.resist_table_size;
+	if (data->resist_table_len > 0) {
+		data->resist_table = devm_kmemdup(data->dev, info.resist_table,
+						  data->resist_table_len *
+						  sizeof(struct power_supply_resistance_temp_table),
+						  GFP_KERNEL);
+		if (!data->resist_table) {
+			power_supply_put_battery_info(data->battery, &info);
+			return -ENOMEM;
+		}
+	}
+
 	power_supply_put_battery_info(data->battery, &info);
 
 	ret = sc27xx_fgu_calibration(data);
@@ -1051,6 +1097,15 @@
 		return ret;
 	}
 
+	ret = device_property_read_u32(&pdev->dev,
+				       "sprd,calib-resistance-micro-ohms",
+				       &data->calib_resist);
+	if (ret) {
+		dev_err(&pdev->dev,
+			"failed to get fgu calibration resistance\n");
+		return ret;
+	}
+
 	data->channel = devm_iio_channel_get(dev, "bat-temp");
 	if (IS_ERR(data->channel)) {
 		dev_err(dev, "failed to get IIO channel\n");
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index f877e77..ff3dacb 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -282,6 +282,7 @@
 		pwm->pwm = chip->base + i;
 		pwm->hwpwm = i;
 		pwm->state.polarity = polarity;
+		pwm->state.output_type = PWM_OUTPUT_FIXED;
 
 		if (chip->ops->get_state)
 			chip->ops->get_state(chip, pwm, &pwm->state);
@@ -1156,8 +1157,8 @@
 		if (state.enabled)
 			seq_puts(s, " enabled");
 
-		seq_printf(s, " period: %u ns", state.period);
-		seq_printf(s, " duty: %u ns", state.duty_cycle);
+		seq_printf(s, " period: %llu ns", state.period);
+		seq_printf(s, " duty: %llu ns", state.duty_cycle);
 		seq_printf(s, " polarity: %s",
 			   state.polarity ? "inverse" : "normal");
 
diff --git a/drivers/pwm/pwm-clps711x.c b/drivers/pwm/pwm-clps711x.c
index 924d39a..ba9500a 100644
--- a/drivers/pwm/pwm-clps711x.c
+++ b/drivers/pwm/pwm-clps711x.c
@@ -43,7 +43,7 @@
 static unsigned int clps711x_get_duty(struct pwm_device *pwm, unsigned int v)
 {
 	/* Duty cycle 0..15 max */
-	return DIV_ROUND_CLOSEST(v * 0xf, pwm->args.period);
+	return DIV64_U64_ROUND_CLOSEST(v * 0xf, pwm->args.period);
 }
 
 static int clps711x_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c
index 9145f61..53bf3643 100644
--- a/drivers/pwm/pwm-imx-tpm.c
+++ b/drivers/pwm/pwm-imx-tpm.c
@@ -126,7 +126,7 @@
 		real_state->duty_cycle = state->duty_cycle;
 
 	tmp = (u64)p->mod * real_state->duty_cycle;
-	p->val = DIV_ROUND_CLOSEST_ULL(tmp, real_state->period);
+	p->val = DIV64_U64_ROUND_CLOSEST(tmp, real_state->period);
 
 	real_state->polarity = state->polarity;
 	real_state->enabled = state->enabled;
diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c
index ae11d85..b4b0fbd 100644
--- a/drivers/pwm/pwm-imx27.c
+++ b/drivers/pwm/pwm-imx27.c
@@ -198,7 +198,7 @@
 	sr = readl(imx->mmio_base + MX3_PWMSR);
 	fifoav = FIELD_GET(MX3_PWMSR_FIFOAV, sr);
 	if (fifoav == MX3_PWMSR_FIFOAV_4WORDS) {
-		period_ms = DIV_ROUND_UP(pwm_get_period(pwm),
+		period_ms = DIV_ROUND_UP_ULL(pwm_get_period(pwm),
 					 NSEC_PER_MSEC);
 		msleep(period_ms);
 
@@ -231,8 +231,7 @@
 
 		period_cycles /= prescale;
 		c = (unsigned long long)period_cycles * state->duty_cycle;
-		do_div(c, state->period);
-		duty_cycles = c;
+		duty_cycles = div64_u64(c, state->period);
 
 		/*
 		 * according to imx pwm RM, the real period value should be
diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c
index cc63f9b..62de0bb 100644
--- a/drivers/pwm/pwm-sifive.c
+++ b/drivers/pwm/pwm-sifive.c
@@ -181,7 +181,7 @@
 	 * consecutively
 	 */
 	num = (u64)duty_cycle * (1U << PWM_SIFIVE_CMPWIDTH);
-	frac = DIV_ROUND_CLOSEST_ULL(num, state->period);
+	frac = DIV64_U64_ROUND_CLOSEST(num, state->period);
 	/* The hardware cannot generate a 100% duty cycle */
 	frac = min(frac, (1U << PWM_SIFIVE_CMPWIDTH) - 1);
 
diff --git a/drivers/pwm/pwm-sti.c b/drivers/pwm/pwm-sti.c
index 1508616..857f2ad 100644
--- a/drivers/pwm/pwm-sti.c
+++ b/drivers/pwm/pwm-sti.c
@@ -371,10 +371,10 @@
 		effective_ticks = clk_get_rate(pc->cpt_clk);
 
 		result->period = (high + low) * NSEC_PER_SEC;
-		result->period /= effective_ticks;
+		do_div(result->period, effective_ticks);
 
 		result->duty_cycle = high * NSEC_PER_SEC;
-		result->duty_cycle /= effective_ticks;
+		do_div(result->duty_cycle, effective_ticks);
 
 		break;
 
diff --git a/drivers/pwm/pwm-stm32-lp.c b/drivers/pwm/pwm-stm32-lp.c
index 05bb1f9..945a8b2 100644
--- a/drivers/pwm/pwm-stm32-lp.c
+++ b/drivers/pwm/pwm-stm32-lp.c
@@ -61,7 +61,7 @@
 	do_div(div, NSEC_PER_SEC);
 	if (!div) {
 		/* Clock is too slow to achieve requested period. */
-		dev_dbg(priv->chip.dev, "Can't reach %u ns\n",	state->period);
+		dev_dbg(priv->chip.dev, "Can't reach %llu ns\n", state->period);
 		return -EINVAL;
 	}
 
diff --git a/drivers/pwm/pwm-sun4i.c b/drivers/pwm/pwm-sun4i.c
index 0527372..cb3feab 100644
--- a/drivers/pwm/pwm-sun4i.c
+++ b/drivers/pwm/pwm-sun4i.c
@@ -245,7 +245,7 @@
 		val = (duty & PWM_DTY_MASK) | PWM_PRD(period);
 		sun4i_pwm_writel(sun4i_pwm, val, PWM_CH_PRD(pwm->hwpwm));
 		sun4i_pwm->next_period[pwm->hwpwm] = jiffies +
-			usecs_to_jiffies(cstate.period / 1000 + 1);
+			usecs_to_jiffies(div_u64(cstate.period, 1000) + 1);
 		sun4i_pwm->needs_delay[pwm->hwpwm] = true;
 	}
 
diff --git a/drivers/pwm/sysfs.c b/drivers/pwm/sysfs.c
index 2389b86..417ecd7 100644
--- a/drivers/pwm/sysfs.c
+++ b/drivers/pwm/sysfs.c
@@ -42,7 +42,7 @@
 
 	pwm_get_state(pwm, &state);
 
-	return sprintf(buf, "%u\n", state.period);
+	return sprintf(buf, "%llu\n", state.period);
 }
 
 static ssize_t period_store(struct device *child,
@@ -52,10 +52,10 @@
 	struct pwm_export *export = child_to_pwm_export(child);
 	struct pwm_device *pwm = export->pwm;
 	struct pwm_state state;
-	unsigned int val;
+	u64 val;
 	int ret;
 
-	ret = kstrtouint(buf, 0, &val);
+	ret = kstrtou64(buf, 0, &val);
 	if (ret)
 		return ret;
 
@@ -77,7 +77,7 @@
 
 	pwm_get_state(pwm, &state);
 
-	return sprintf(buf, "%u\n", state.duty_cycle);
+	return sprintf(buf, "%llu\n", state.duty_cycle);
 }
 
 static ssize_t duty_cycle_store(struct device *child,
@@ -212,7 +212,30 @@
 	if (ret)
 		return ret;
 
-	return sprintf(buf, "%u %u\n", result.period, result.duty_cycle);
+	return sprintf(buf, "%llu %llu\n", result.period, result.duty_cycle);
+}
+
+static ssize_t output_type_show(struct device *child,
+			     struct device_attribute *attr,
+			     char *buf)
+{
+	const struct pwm_device *pwm = child_to_pwm_device(child);
+	const char *output_type = "unknown";
+	struct pwm_state state;
+
+	pwm_get_state(pwm, &state);
+	switch (state.output_type) {
+	case PWM_OUTPUT_FIXED:
+		output_type = "fixed";
+		break;
+	case PWM_OUTPUT_MODULATED:
+		output_type = "modulated";
+		break;
+	default:
+		break;
+	}
+
+	return snprintf(buf, PAGE_SIZE, "%s\n", output_type);
 }
 
 static DEVICE_ATTR_RW(period);
@@ -220,6 +243,7 @@
 static DEVICE_ATTR_RW(enable);
 static DEVICE_ATTR_RW(polarity);
 static DEVICE_ATTR_RO(capture);
+static DEVICE_ATTR_RO(output_type);
 
 static struct attribute *pwm_attrs[] = {
 	&dev_attr_period.attr,
@@ -227,6 +251,7 @@
 	&dev_attr_enable.attr,
 	&dev_attr_polarity.attr,
 	&dev_attr_capture.attr,
+	&dev_attr_output_type.attr,
 	NULL
 };
 ATTRIBUTE_GROUPS(pwm);
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 3ee6353..6395129 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -734,6 +734,7 @@
 config REGULATOR_QCOM_RPMH
 	tristate "Qualcomm Technologies, Inc. RPMh regulator driver"
 	depends on QCOM_RPMH || COMPILE_TEST
+	depends on QCOM_COMMAND_DB || !QCOM_COMMAND_DB
 	help
 	  This driver supports control of PMIC regulators via the RPMh hardware
 	  block found on Qualcomm Technologies Inc. SoCs.  RPMh regulator
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 7fd793d..bde3022 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1887,6 +1887,7 @@
 	struct regulator_dev *rdev;
 	struct regulator *regulator;
 	const char *devname = dev ? dev_name(dev) : "deviceless";
+	struct device_link *link;
 	int ret;
 
 	if (get_type >= MAX_GET_TYPE) {
@@ -1994,7 +1995,9 @@
 			rdev->use_count = 0;
 	}
 
-	device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
+	link = device_link_add(dev, &rdev->dev, DL_FLAG_STATELESS);
+	if (!IS_ERR_OR_NULL(link))
+		regulator->device_link = true;
 
 	return regulator;
 }
@@ -2089,7 +2092,8 @@
 	debugfs_remove_recursive(regulator->debugfs);
 
 	if (regulator->dev) {
-		device_link_remove(regulator->dev, &rdev->dev);
+		if (regulator->device_link)
+			device_link_remove(regulator->dev, &rdev->dev);
 
 		/* remove any sysfs entries */
 		sysfs_remove_link(&rdev->dev.kobj, regulator->supply_name);
diff --git a/drivers/regulator/internal.h b/drivers/regulator/internal.h
index 83ae442..2391b56 100644
--- a/drivers/regulator/internal.h
+++ b/drivers/regulator/internal.h
@@ -36,6 +36,7 @@
 	struct list_head list;
 	unsigned int always_on:1;
 	unsigned int bypass:1;
+	unsigned int device_link:1;
 	int uA_load;
 	unsigned int enable_count;
 	unsigned int deferred_disables;
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c
index ce92ae2..d3ce072 100644
--- a/drivers/remoteproc/remoteproc_core.c
+++ b/drivers/remoteproc/remoteproc_core.c
@@ -405,10 +405,22 @@
 
 	idr_remove(&rproc->notifyids, rvring->notifyid);
 
-	/* reset resource entry info */
-	rsc = (void *)rproc->table_ptr + rvring->rvdev->rsc_offset;
-	rsc->vring[idx].da = 0;
-	rsc->vring[idx].notifyid = -1;
+	/*
+	 * At this point rproc_stop() has been called and the installed resource
+	 * table in the remote processor memory may no longer be accessible. As
+	 * such and as per rproc_stop(), rproc->table_ptr points to the cached
+	 * resource table (rproc->cached_table).  The cached resource table is
+	 * only available when a remote processor has been booted by the
+	 * remoteproc core, otherwise it is NULL.
+	 *
+	 * Based on the above, reset the virtio device section in the cached
+	 * resource table only if there is one to work with.
+	 */
+	if (rproc->table_ptr) {
+		rsc = (void *)rproc->table_ptr + rvring->rvdev->rsc_offset;
+		rsc->vring[idx].da = 0;
+		rsc->vring[idx].notifyid = -1;
+	}
 }
 
 static int rproc_vdev_do_start(struct rproc_subdev *subdev)
@@ -445,7 +457,7 @@
 /**
  * rproc_handle_vdev() - handle a vdev fw resource
  * @rproc: the remote processor
- * @rsc: the vring resource descriptor
+ * ptr: the vring resource descriptor
  * @avail: size of available data (for sanity checking the image)
  *
  * This resource entry requests the host to statically register a virtio
@@ -469,9 +481,10 @@
  *
  * Returns 0 on success, or an appropriate error code otherwise
  */
-static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc,
+static int rproc_handle_vdev(struct rproc *rproc, void *ptr,
 			     int offset, int avail)
 {
+	struct fw_rsc_vdev *rsc = ptr;
 	struct device *dev = &rproc->dev;
 	struct rproc_vdev *rvdev;
 	int i, ret;
@@ -587,7 +600,7 @@
 /**
  * rproc_handle_trace() - handle a shared trace buffer resource
  * @rproc: the remote processor
- * @rsc: the trace resource descriptor
+ * @ptr: the trace resource descriptor
  * @avail: size of available data (for sanity checking the image)
  *
  * In case the remote processor dumps trace logs into memory,
@@ -600,9 +613,10 @@
  *
  * Returns 0 on success, or an appropriate error code otherwise
  */
-static int rproc_handle_trace(struct rproc *rproc, struct fw_rsc_trace *rsc,
+static int rproc_handle_trace(struct rproc *rproc, void *ptr,
 			      int offset, int avail)
 {
+	struct fw_rsc_trace *rsc = ptr;
 	struct rproc_debug_trace *trace;
 	struct device *dev = &rproc->dev;
 	char name[15];
@@ -652,7 +666,7 @@
 /**
  * rproc_handle_devmem() - handle devmem resource entry
  * @rproc: remote processor handle
- * @rsc: the devmem resource entry
+ * @ptr: the devmem resource entry
  * @avail: size of available data (for sanity checking the image)
  *
  * Remote processors commonly need to access certain on-chip peripherals.
@@ -674,9 +688,10 @@
  * and not allow firmwares to request access to physical addresses that
  * are outside those ranges.
  */
-static int rproc_handle_devmem(struct rproc *rproc, struct fw_rsc_devmem *rsc,
+static int rproc_handle_devmem(struct rproc *rproc, void *ptr,
 			       int offset, int avail)
 {
+	struct fw_rsc_devmem *rsc = ptr;
 	struct rproc_mem_entry *mapping;
 	struct device *dev = &rproc->dev;
 	int ret;
@@ -853,7 +868,7 @@
 /**
  * rproc_handle_carveout() - handle phys contig memory allocation requests
  * @rproc: rproc handle
- * @rsc: the resource entry
+ * @ptr: the resource entry
  * @avail: size of available data (for image validation)
  *
  * This function will handle firmware requests for allocation of physically
@@ -869,9 +884,9 @@
  * pressure is important; it may have a substantial impact on performance.
  */
 static int rproc_handle_carveout(struct rproc *rproc,
-				 struct fw_rsc_carveout *rsc,
-				 int offset, int avail)
+				 void *ptr, int offset, int avail)
 {
+	struct fw_rsc_carveout *rsc = ptr;
 	struct rproc_mem_entry *carveout;
 	struct device *dev = &rproc->dev;
 
@@ -1028,10 +1043,10 @@
  * enum fw_resource_type.
  */
 static rproc_handle_resource_t rproc_loading_handlers[RSC_LAST] = {
-	[RSC_CARVEOUT] = (rproc_handle_resource_t)rproc_handle_carveout,
-	[RSC_DEVMEM] = (rproc_handle_resource_t)rproc_handle_devmem,
-	[RSC_TRACE] = (rproc_handle_resource_t)rproc_handle_trace,
-	[RSC_VDEV] = (rproc_handle_resource_t)rproc_handle_vdev,
+	[RSC_CARVEOUT] = rproc_handle_carveout,
+	[RSC_DEVMEM] = rproc_handle_devmem,
+	[RSC_TRACE] = rproc_handle_trace,
+	[RSC_VDEV] = rproc_handle_vdev,
 };
 
 /* handle firmware resource entries before booting the remote processor */
@@ -1359,6 +1374,48 @@
 	return ret;
 }
 
+static int rproc_attach(struct rproc *rproc)
+{
+	struct device *dev = &rproc->dev;
+	int ret;
+
+	ret = rproc_prepare_subdevices(rproc);
+	if (ret) {
+		dev_err(dev, "failed to prepare subdevices for %s: %d\n",
+			rproc->name, ret);
+		goto out;
+	}
+
+	/* Attach to the remote processor */
+	ret = rproc_attach_device(rproc);
+	if (ret) {
+		dev_err(dev, "can't attach to rproc %s: %d\n",
+			rproc->name, ret);
+		goto unprepare_subdevices;
+	}
+
+	/* Start any subdevices for the remote processor */
+	ret = rproc_start_subdevices(rproc);
+	if (ret) {
+		dev_err(dev, "failed to probe subdevices for %s: %d\n",
+			rproc->name, ret);
+		goto stop_rproc;
+	}
+
+	rproc->state = RPROC_RUNNING;
+
+	dev_info(dev, "remote processor %s is now attached\n", rproc->name);
+
+	return 0;
+
+stop_rproc:
+	rproc->ops->stop(rproc);
+unprepare_subdevices:
+	rproc_unprepare_subdevices(rproc);
+out:
+	return ret;
+}
+
 /*
  * take a firmware and boot a remote processor with it.
  */
@@ -1429,6 +1486,63 @@
 }
 
 /*
+ * Attach to remote processor - similar to rproc_fw_boot() but without
+ * the steps that deal with the firmware image.
+ */
+static int rproc_actuate(struct rproc *rproc)
+{
+	struct device *dev = &rproc->dev;
+	int ret;
+
+	/*
+	 * if enabling an IOMMU isn't relevant for this rproc, this is
+	 * just a nop
+	 */
+	ret = rproc_enable_iommu(rproc);
+	if (ret) {
+		dev_err(dev, "can't enable iommu: %d\n", ret);
+		return ret;
+	}
+
+	/* reset max_notifyid */
+	rproc->max_notifyid = -1;
+
+	/* reset handled vdev */
+	rproc->nb_vdev = 0;
+
+	/*
+	 * Handle firmware resources required to attach to a remote processor.
+	 * Because we are attaching rather than booting the remote processor,
+	 * we expect the platform driver to properly set rproc->table_ptr.
+	 */
+	ret = rproc_handle_resources(rproc, rproc_loading_handlers);
+	if (ret) {
+		dev_err(dev, "Failed to process resources: %d\n", ret);
+		goto disable_iommu;
+	}
+
+	/* Allocate carveout resources associated to rproc */
+	ret = rproc_alloc_registered_carveouts(rproc);
+	if (ret) {
+		dev_err(dev, "Failed to allocate associated carveouts: %d\n",
+			ret);
+		goto clean_up_resources;
+	}
+
+	ret = rproc_attach(rproc);
+	if (ret)
+		goto clean_up_resources;
+
+	return 0;
+
+clean_up_resources:
+	rproc_resource_cleanup(rproc);
+disable_iommu:
+	rproc_disable_iommu(rproc);
+	return ret;
+}
+
+/*
  * take a firmware and boot it up.
  *
  * Note: this function is called asynchronously upon registration of the
@@ -1450,6 +1564,15 @@
 	int ret;
 
 	/*
+	 * Since the remote processor is in a detached state, it has already
+	 * been booted by another entity.  As such there is no point in waiting
+	 * for a firmware image to be loaded, we can simply initiate the process
+	 * of attaching to it immediately.
+	 */
+	if (rproc->state == RPROC_DETACHED)
+		return rproc_boot(rproc);
+
+	/*
 	 * We're initiating an asynchronous firmware loading, so we can
 	 * be built-in kernel code, without hanging the boot process.
 	 */
@@ -1484,6 +1607,14 @@
 
 	rproc->state = RPROC_OFFLINE;
 
+	/*
+	 * The remote processor has been stopped and is now offline, which means
+	 * that the next time it is brought back online the remoteproc core will
+	 * be responsible to load its firmware.  As such it is no longer
+	 * autonomous.
+	 */
+	rproc->autonomous = false;
+
 	dev_info(dev, "stopped remote processor %s\n", rproc->name);
 
 	return 0;
@@ -1751,25 +1882,31 @@
 		goto unlock_mutex;
 	}
 
-	/* skip the boot process if rproc is already powered up */
+	/* skip the boot or attach process if rproc is already powered up */
 	if (atomic_inc_return(&rproc->power) > 1) {
 		ret = 0;
 		goto unlock_mutex;
 	}
 
-	dev_info(dev, "powering up %s\n", rproc->name);
+	if (rproc->state == RPROC_DETACHED) {
+		dev_info(dev, "attaching to %s\n", rproc->name);
 
-	/* load firmware */
-	ret = request_firmware(&firmware_p, rproc->firmware, dev);
-	if (ret < 0) {
-		dev_err(dev, "request_firmware failed: %d\n", ret);
-		goto downref_rproc;
+		ret = rproc_actuate(rproc);
+	} else {
+		dev_info(dev, "powering up %s\n", rproc->name);
+
+		/* load firmware */
+		ret = request_firmware(&firmware_p, rproc->firmware, dev);
+		if (ret < 0) {
+			dev_err(dev, "request_firmware failed: %d\n", ret);
+			goto downref_rproc;
+		}
+
+		ret = rproc_fw_boot(rproc, firmware_p);
+
+		release_firmware(firmware_p);
 	}
 
-	ret = rproc_fw_boot(rproc, firmware_p);
-
-	release_firmware(firmware_p);
-
 downref_rproc:
 	if (ret)
 		atomic_dec(&rproc->power);
@@ -1883,6 +2020,43 @@
 #endif
 EXPORT_SYMBOL(rproc_get_by_phandle);
 
+static int rproc_validate(struct rproc *rproc)
+{
+	switch (rproc->state) {
+	case RPROC_OFFLINE:
+		/*
+		 * An offline processor without a start()
+		 * function makes no sense.
+		 */
+		if (!rproc->ops->start)
+			return -EINVAL;
+		break;
+	case RPROC_DETACHED:
+		/*
+		 * A remote processor in a detached state without an
+		 * attach() function makes not sense.
+		 */
+		if (!rproc->ops->attach)
+			return -EINVAL;
+		/*
+		 * When attaching to a remote processor the device memory
+		 * is already available and as such there is no need to have a
+		 * cached table.
+		 */
+		if (rproc->cached_table)
+			return -EINVAL;
+		break;
+	default:
+		/*
+		 * When adding a remote processor, the state of the device
+		 * can be offline or detached, nothing else.
+		 */
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 /**
  * rproc_add() - register a remote processor
  * @rproc: the remote processor handle to register
@@ -1912,11 +2086,25 @@
 	if (ret < 0)
 		return ret;
 
+	ret = rproc_validate(rproc);
+	if (ret < 0)
+		return ret;
+
 	dev_info(dev, "%s is available\n", rproc->name);
 
 	/* create debugfs entries */
 	rproc_create_debug_dir(rproc);
 
+	/*
+	 * Remind ourselves the remote processor has been attached to rather
+	 * than booted by the remoteproc core.  This is important because the
+	 * RPROC_DETACHED state will be lost as soon as the remote processor
+	 * has been attached to.  Used in firmware_show() and reset in
+	 * rproc_stop().
+	 */
+	if (rproc->state == RPROC_DETACHED)
+		rproc->autonomous = true;
+
 	/* if rproc is marked always-on, request it to boot */
 	if (rproc->auto_boot) {
 		ret = rproc_trigger_auto_boot(rproc);
diff --git a/drivers/remoteproc/remoteproc_internal.h b/drivers/remoteproc/remoteproc_internal.h
index 493ef926..2ab1af7 100644
--- a/drivers/remoteproc/remoteproc_internal.h
+++ b/drivers/remoteproc/remoteproc_internal.h
@@ -63,6 +63,14 @@
 struct rproc_mem_entry *
 rproc_find_carveout_by_name(struct rproc *rproc, const char *name, ...);
 
+static inline int rproc_attach_device(struct rproc *rproc)
+{
+	if (rproc->ops->attach)
+		return rproc->ops->attach(rproc);
+
+	return 0;
+}
+
 static inline
 int rproc_fw_sanity_check(struct rproc *rproc, const struct firmware *fw)
 {
diff --git a/drivers/remoteproc/remoteproc_sysfs.c b/drivers/remoteproc/remoteproc_sysfs.c
index 7f8536b..4ee1584 100644
--- a/drivers/remoteproc/remoteproc_sysfs.c
+++ b/drivers/remoteproc/remoteproc_sysfs.c
@@ -14,8 +14,20 @@
 			  char *buf)
 {
 	struct rproc *rproc = to_rproc(dev);
+	const char *firmware = rproc->firmware;
 
-	return sprintf(buf, "%s\n", rproc->firmware);
+	/*
+	 * If the remote processor has been started by an external
+	 * entity we have no idea of what image it is running.  As such
+	 * simply display a generic string rather then rproc->firmware.
+	 *
+	 * Here we rely on the autonomous flag because a remote processor
+	 * may have been attached to and currently in a running state.
+	 */
+	if (rproc->autonomous)
+		firmware = "unknown";
+
+	return sprintf(buf, "%s\n", firmware);
 }
 
 /* Change firmware name via sysfs */
@@ -71,6 +83,7 @@
 	[RPROC_RUNNING]		= "running",
 	[RPROC_CRASHED]		= "crashed",
 	[RPROC_DELETED]		= "deleted",
+	[RPROC_DETACHED]	= "detached",
 	[RPROC_LAST]		= "invalid",
 };
 
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 7b07281..1bacffd 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -99,7 +99,7 @@
 	  This enables the reset driver for ImgTec Pistachio SoCs.
 
 config RESET_QCOM_AOSS
-	bool "Qcom AOSS Reset Driver"
+	tristate "Qcom AOSS Reset Driver"
 	depends on ARCH_QCOM || COMPILE_TEST
 	help
 	  This enables the AOSS (always on subsystem) reset driver
diff --git a/drivers/reset/reset-qcom-aoss.c b/drivers/reset/reset-qcom-aoss.c
index 36db967..9333b92 100644
--- a/drivers/reset/reset-qcom-aoss.c
+++ b/drivers/reset/reset-qcom-aoss.c
@@ -118,6 +118,7 @@
 	{ .compatible = "qcom,sdm845-aoss-cc", .data = &sdm845_aoss_desc },
 	{}
 };
+MODULE_DEVICE_TABLE(of, qcom_aoss_reset_of_match);
 
 static struct platform_driver qcom_aoss_reset_driver = {
 	.probe = qcom_aoss_reset_probe,
@@ -127,7 +128,7 @@
 	},
 };
 
-builtin_platform_driver(qcom_aoss_reset_driver);
+module_platform_driver(qcom_aoss_reset_driver);
 
 MODULE_DESCRIPTION("Qualcomm AOSS Reset Driver");
 MODULE_LICENSE("GPL v2");
diff --git a/drivers/rpmsg/rpmsg_core.c b/drivers/rpmsg/rpmsg_core.c
index e330ec4..a3c25bb 100644
--- a/drivers/rpmsg/rpmsg_core.c
+++ b/drivers/rpmsg/rpmsg_core.c
@@ -81,7 +81,7 @@
  */
 void rpmsg_destroy_ept(struct rpmsg_endpoint *ept)
 {
-	if (ept)
+	if (ept && ept->ops)
 		ept->ops->destroy_ept(ept);
 }
 EXPORT_SYMBOL(rpmsg_destroy_ept);
@@ -283,6 +283,42 @@
 }
 EXPORT_SYMBOL(rpmsg_trysend_offchannel);
 
+/**
+ * rpmsg_get_signals() - get the signals for this endpoint
+ * @ept:	the rpmsg endpoint
+ *
+ * Returns signal bits on success and an appropriate error value on failure.
+ */
+int rpmsg_get_signals(struct rpmsg_endpoint *ept)
+{
+	if (WARN_ON(!ept))
+		return -EINVAL;
+	if (!ept->ops->get_signals)
+		return -ENXIO;
+
+	return ept->ops->get_signals(ept);
+}
+EXPORT_SYMBOL(rpmsg_get_signals);
+
+/**
+ * rpmsg_set_signals() - set the remote signals for this endpoint
+ * @ept:	the rpmsg endpoint
+ * @set:	set mask for signals
+ * @clear:	clear mask for signals
+ *
+ * Returns 0 on success and an appropriate error value on failure.
+ */
+int rpmsg_set_signals(struct rpmsg_endpoint *ept, u32 set, u32 clear)
+{
+	if (WARN_ON(!ept))
+		return -EINVAL;
+	if (!ept->ops->set_signals)
+		return -ENXIO;
+
+	return ept->ops->set_signals(ept, set, clear);
+}
+EXPORT_SYMBOL(rpmsg_set_signals);
+
 /*
  * match an rpmsg channel with a channel info struct.
  * this is used to make sure we're not creating rpmsg devices for channels
@@ -468,6 +504,10 @@
 
 		rpdev->ept = ept;
 		rpdev->src = ept->addr;
+
+		if (rpdrv->signals)
+			ept->sig_cb = rpdrv->signals;
+
 	}
 
 	err = rpdrv->probe(rpdev);
diff --git a/drivers/rpmsg/rpmsg_internal.h b/drivers/rpmsg/rpmsg_internal.h
index 3fc83cd..03356e8 100644
--- a/drivers/rpmsg/rpmsg_internal.h
+++ b/drivers/rpmsg/rpmsg_internal.h
@@ -2,6 +2,7 @@
 /*
  * remote processor messaging bus internals
  *
+ * Copyright (c) 2020 The Linux Foundation.
  * Copyright (C) 2011 Texas Instruments, Inc.
  * Copyright (C) 2011 Google, Inc.
  *
@@ -47,6 +48,8 @@
  * @trysendto:		see @rpmsg_trysendto(), optional
  * @trysend_offchannel:	see @rpmsg_trysend_offchannel(), optional
  * @poll:		see @rpmsg_poll(), optional
+ * @get_signals:	see @rpmsg_get_signals(), optional
+ * @set_signals:	see @rpmsg_set_signals(), optional
  *
  * Indirection table for the operations that a rpmsg backend should implement.
  * In addition to @destroy_ept, the backend must at least implement @send and
@@ -66,6 +69,8 @@
 			     void *data, int len);
 	__poll_t (*poll)(struct rpmsg_endpoint *ept, struct file *filp,
 			     poll_table *wait);
+	int (*get_signals)(struct rpmsg_endpoint *ept);
+	int (*set_signals)(struct rpmsg_endpoint *ept, u32 set, u32 clear);
 };
 
 int rpmsg_register_device(struct rpmsg_device *rpdev);
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
index 9458e6d..970b19c 100644
--- a/drivers/rtc/class.c
+++ b/drivers/rtc/class.c
@@ -375,6 +375,11 @@
 	dev_info(rtc->dev.parent, "registered as %s\n",
 		 dev_name(&rtc->dev));
 
+#ifdef CONFIG_RTC_HCTOSYS_DEVICE
+	if (!strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE))
+		rtc_hctosys();
+#endif
+
 	return 0;
 }
 EXPORT_SYMBOL_GPL(__rtc_register_device);
diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c
index a74d0d8..e3a4f26 100644
--- a/drivers/rtc/hctosys.c
+++ b/drivers/rtc/hctosys.c
@@ -21,7 +21,7 @@
  * the best guess is to add 0.5s.
  */
 
-static int __init rtc_hctosys(void)
+int rtc_hctosys(void)
 {
 	int err = -ENODEV;
 	struct rtc_time tm;
@@ -65,5 +65,3 @@
 
 	return err;
 }
-
-late_initcall(rtc_hctosys);
diff --git a/drivers/rtc/rtc-core.h b/drivers/rtc/rtc-core.h
index 0abf989..c38ef33 100644
--- a/drivers/rtc/rtc-core.h
+++ b/drivers/rtc/rtc-core.h
@@ -46,3 +46,7 @@
 	return NULL;
 }
 #endif
+
+#ifdef CONFIG_RTC_HCTOSYS
+extern int rtc_hctosys(void);
+#endif
diff --git a/drivers/scsi/scsi_lib.c b/drivers/scsi/scsi_lib.c
index 8e6d7ba..92659ed 100644
--- a/drivers/scsi/scsi_lib.c
+++ b/drivers/scsi/scsi_lib.c
@@ -2122,6 +2122,8 @@
 
 	memset(data, 0, sizeof(*data));
 	memset(&cmd[0], 0, 12);
+
+	dbd = sdev->set_dbd_for_ms ? 8 : dbd;
 	cmd[1] = dbd & 0x18;	/* allows DBD and LLBA bits */
 	cmd[2] = modepage;
 
diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c
index 5f0ad8b..3717eea 100644
--- a/drivers/scsi/scsi_pm.c
+++ b/drivers/scsi/scsi_pm.c
@@ -80,10 +80,6 @@
 	dev_dbg(dev, "scsi resume: %d\n", err);
 
 	if (err == 0) {
-		bool was_runtime_suspended;
-
-		was_runtime_suspended = pm_runtime_suspended(dev);
-
 		pm_runtime_disable(dev);
 		err = pm_runtime_set_active(dev);
 		pm_runtime_enable(dev);
@@ -97,10 +93,8 @@
 		 */
 		if (!err && scsi_is_sdev_device(dev)) {
 			struct scsi_device *sdev = to_scsi_device(dev);
-			if (was_runtime_suspended)
-				blk_post_runtime_resume(sdev->request_queue, 0);
-			else
-				blk_set_runtime_active(sdev->request_queue);
+
+			blk_set_runtime_active(sdev->request_queue);
 		}
 	}
 
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c
index 6faf1d64..eceb23d 100644
--- a/drivers/scsi/scsi_sysfs.c
+++ b/drivers/scsi/scsi_sysfs.c
@@ -1332,7 +1332,8 @@
 	device_enable_async_suspend(&sdev->sdev_gendev);
 	scsi_autopm_get_target(starget);
 	pm_runtime_set_active(&sdev->sdev_gendev);
-	pm_runtime_forbid(&sdev->sdev_gendev);
+	if (!sdev->rpm_autosuspend)
+		pm_runtime_forbid(&sdev->sdev_gendev);
 	pm_runtime_enable(&sdev->sdev_gendev);
 	scsi_autopm_put_target(starget);
 
diff --git a/drivers/scsi/sd.c b/drivers/scsi/sd.c
index 152b486..e90a22e 100644
--- a/drivers/scsi/sd.c
+++ b/drivers/scsi/sd.c
@@ -122,8 +122,6 @@
 static int sd_eh_action(struct scsi_cmnd *, int);
 static void sd_read_capacity(struct scsi_disk *sdkp, unsigned char *buffer);
 static void scsi_disk_release(struct device *cdev);
-static void sd_print_sense_hdr(struct scsi_disk *, struct scsi_sense_hdr *);
-static void sd_print_result(const struct scsi_disk *, const char *, int);
 
 static DEFINE_IDA(sd_index_ida);
 
@@ -1293,9 +1291,17 @@
 	case REQ_OP_WRITE:
 		return sd_setup_read_write_cmnd(cmd);
 	case REQ_OP_ZONE_RESET:
-		return sd_zbc_setup_reset_cmnd(cmd, false);
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
+						   false);
 	case REQ_OP_ZONE_RESET_ALL:
-		return sd_zbc_setup_reset_cmnd(cmd, true);
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_RESET_WRITE_POINTER,
+						   true);
+	case REQ_OP_ZONE_OPEN:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_OPEN_ZONE, false);
+	case REQ_OP_ZONE_CLOSE:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_CLOSE_ZONE, false);
+	case REQ_OP_ZONE_FINISH:
+		return sd_zbc_setup_zone_mgmt_cmnd(cmd, ZO_FINISH_ZONE, false);
 	default:
 		WARN_ON_ONCE(1);
 		return BLK_STS_NOTSUPP;
@@ -1973,6 +1979,9 @@
 	case REQ_OP_WRITE_SAME:
 	case REQ_OP_ZONE_RESET:
 	case REQ_OP_ZONE_RESET_ALL:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
 		if (!result) {
 			good_bytes = blk_rq_bytes(req);
 			scsi_set_resid(SCpnt, 0);
@@ -3386,6 +3395,10 @@
 	}
 
 	blk_pm_runtime_init(sdp->request_queue, dev);
+	if (sdp->rpm_autosuspend) {
+		pm_runtime_set_autosuspend_delay(dev,
+			sdp->host->hostt->rpm_autosuspend_delay);
+	}
 	device_add_disk(dev, gd, NULL);
 	if (sdkp->capacity)
 		sd_dif_config_host(sdkp);
@@ -3718,15 +3731,13 @@
 module_init(init_sd);
 module_exit(exit_sd);
 
-static void sd_print_sense_hdr(struct scsi_disk *sdkp,
-			       struct scsi_sense_hdr *sshdr)
+void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr)
 {
 	scsi_print_sense_hdr(sdkp->device,
 			     sdkp->disk ? sdkp->disk->disk_name : NULL, sshdr);
 }
 
-static void sd_print_result(const struct scsi_disk *sdkp, const char *msg,
-			    int result)
+void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result)
 {
 	const char *hb_string = scsi_hostbyte_string(result);
 	const char *db_string = scsi_driverbyte_string(result);
@@ -3741,4 +3752,3 @@
 			  "%s: Result: hostbyte=0x%02x driverbyte=0x%02x\n",
 			  msg, host_byte(result), driver_byte(result));
 }
-
diff --git a/drivers/scsi/sd.h b/drivers/scsi/sd.h
index 1eab779..048cf39 100644
--- a/drivers/scsi/sd.h
+++ b/drivers/scsi/sd.h
@@ -116,6 +116,9 @@
 	unsigned	urswrz : 1;
 	unsigned	security : 1;
 	unsigned	ignore_medium_access_errors : 1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
 
@@ -209,11 +212,12 @@
 
 extern int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buffer);
 extern void sd_zbc_print_zones(struct scsi_disk *sdkp);
-extern blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd, bool all);
+blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+					 unsigned char op, bool all);
 extern void sd_zbc_complete(struct scsi_cmnd *cmd, unsigned int good_bytes,
 			    struct scsi_sense_hdr *sshdr);
-extern int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
-			       struct blk_zone *zones, unsigned int *nr_zones);
+int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
+		unsigned int nr_zones, report_zones_cb cb, void *data);
 
 #else /* CONFIG_BLK_DEV_ZONED */
 
@@ -225,8 +229,9 @@
 
 static inline void sd_zbc_print_zones(struct scsi_disk *sdkp) {}
 
-static inline blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd,
-						   bool all)
+static inline blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+						       unsigned char op,
+						       bool all)
 {
 	return BLK_STS_TARGET;
 }
@@ -239,4 +244,7 @@
 
 #endif /* CONFIG_BLK_DEV_ZONED */
 
+void sd_print_sense_hdr(struct scsi_disk *sdkp, struct scsi_sense_hdr *sshdr);
+void sd_print_result(const struct scsi_disk *sdkp, const char *msg, int result);
+
 #endif /* _SCSI_DISK_H */
diff --git a/drivers/scsi/sd_zbc.c b/drivers/scsi/sd_zbc.c
index 1efc69e..fecaf8d 100644
--- a/drivers/scsi/sd_zbc.c
+++ b/drivers/scsi/sd_zbc.c
@@ -19,34 +19,28 @@
 
 #include "sd.h"
 
-/**
- * sd_zbc_parse_report - Convert a zone descriptor to a struct blk_zone,
- * @sdkp: The disk the report originated from
- * @buf: Address of the report zone descriptor
- * @zone: the destination zone structure
- *
- * All LBA sized values are converted to 512B sectors unit.
- */
-static void sd_zbc_parse_report(struct scsi_disk *sdkp, u8 *buf,
-				struct blk_zone *zone)
+static int sd_zbc_parse_report(struct scsi_disk *sdkp, u8 *buf,
+			       unsigned int idx, report_zones_cb cb, void *data)
 {
 	struct scsi_device *sdp = sdkp->device;
+	struct blk_zone zone = { 0 };
 
-	memset(zone, 0, sizeof(struct blk_zone));
-
-	zone->type = buf[0] & 0x0f;
-	zone->cond = (buf[1] >> 4) & 0xf;
+	zone.type = buf[0] & 0x0f;
+	zone.cond = (buf[1] >> 4) & 0xf;
 	if (buf[1] & 0x01)
-		zone->reset = 1;
+		zone.reset = 1;
 	if (buf[1] & 0x02)
-		zone->non_seq = 1;
+		zone.non_seq = 1;
 
-	zone->len = logical_to_sectors(sdp, get_unaligned_be64(&buf[8]));
-	zone->start = logical_to_sectors(sdp, get_unaligned_be64(&buf[16]));
-	zone->wp = logical_to_sectors(sdp, get_unaligned_be64(&buf[24]));
-	if (zone->type != ZBC_ZONE_TYPE_CONV &&
-	    zone->cond == ZBC_ZONE_COND_FULL)
-		zone->wp = zone->start + zone->len;
+	zone.len = logical_to_sectors(sdp, get_unaligned_be64(&buf[8]));
+	zone.capacity = zone.len;
+	zone.start = logical_to_sectors(sdp, get_unaligned_be64(&buf[16]));
+	zone.wp = logical_to_sectors(sdp, get_unaligned_be64(&buf[24]));
+	if (zone.type != ZBC_ZONE_TYPE_CONV &&
+	    zone.cond == ZBC_ZONE_COND_FULL)
+		zone.wp = zone.start + zone.len;
+
+	return cb(&zone, idx, data);
 }
 
 /**
@@ -87,9 +81,11 @@
 				  timeout, SD_MAX_RETRIES, NULL);
 	if (result) {
 		sd_printk(KERN_ERR, sdkp,
-			  "REPORT ZONES lba %llu failed with %d/%d\n",
-			  (unsigned long long)lba,
-			  host_byte(result), driver_byte(result));
+			  "REPORT ZONES start lba %llu failed\n", lba);
+		sd_print_result(sdkp, "REPORT ZONES", result);
+		if (driver_byte(result) == DRIVER_SENSE &&
+		    scsi_sense_valid(&sshdr))
+			sd_print_sense_hdr(sdkp, &sshdr);
 		return -EIO;
 	}
 
@@ -104,11 +100,6 @@
 	return 0;
 }
 
-/*
- * Maximum number of zones to get with one report zones command.
- */
-#define SD_ZBC_REPORT_MAX_ZONES		8192U
-
 /**
  * Allocate a buffer for report zones reply.
  * @sdkp: The target disk
@@ -138,63 +129,24 @@
 	 * sure that the allocated buffer can always be mapped by limiting the
 	 * number of pages allocated to the HBA max segments limit.
 	 */
-	nr_zones = min(nr_zones, SD_ZBC_REPORT_MAX_ZONES);
-	bufsize = roundup((nr_zones + 1) * 64, 512);
+	nr_zones = min(nr_zones, sdkp->nr_zones);
+	bufsize = roundup((nr_zones + 1) * 64, SECTOR_SIZE);
 	bufsize = min_t(size_t, bufsize,
 			queue_max_hw_sectors(q) << SECTOR_SHIFT);
 	bufsize = min_t(size_t, bufsize, queue_max_segments(q) << PAGE_SHIFT);
 
-	buf = vzalloc(bufsize);
-	if (buf)
-		*buflen = bufsize;
-
-	return buf;
-}
-
-/**
- * sd_zbc_report_zones - Disk report zones operation.
- * @disk: The target disk
- * @sector: Start 512B sector of the report
- * @zones: Array of zone descriptors
- * @nr_zones: Number of descriptors in the array
- *
- * Execute a report zones command on the target disk.
- */
-int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
-			struct blk_zone *zones, unsigned int *nr_zones)
-{
-	struct scsi_disk *sdkp = scsi_disk(disk);
-	unsigned int i, nrz = *nr_zones;
-	unsigned char *buf;
-	size_t buflen = 0, offset = 0;
-	int ret = 0;
-
-	if (!sd_is_zoned(sdkp))
-		/* Not a zoned device */
-		return -EOPNOTSUPP;
-
-	buf = sd_zbc_alloc_report_buffer(sdkp, nrz, &buflen);
-	if (!buf)
-		return -ENOMEM;
-
-	ret = sd_zbc_do_report_zones(sdkp, buf, buflen,
-			sectors_to_logical(sdkp->device, sector), true);
-	if (ret)
-		goto out;
-
-	nrz = min(nrz, get_unaligned_be32(&buf[0]) / 64);
-	for (i = 0; i < nrz; i++) {
-		offset += 64;
-		sd_zbc_parse_report(sdkp, buf + offset, zones);
-		zones++;
+	while (bufsize >= SECTOR_SIZE) {
+		buf = __vmalloc(bufsize,
+				GFP_KERNEL | __GFP_ZERO | __GFP_NORETRY,
+				PAGE_KERNEL);
+		if (buf) {
+			*buflen = bufsize;
+			return buf;
+		}
+		bufsize >>= 1;
 	}
 
-	*nr_zones = nrz;
-
-out:
-	kvfree(buf);
-
-	return ret;
+	return NULL;
 }
 
 /**
@@ -206,14 +158,65 @@
 	return logical_to_sectors(sdkp->device, sdkp->zone_blocks);
 }
 
+int sd_zbc_report_zones(struct gendisk *disk, sector_t sector,
+			unsigned int nr_zones, report_zones_cb cb, void *data)
+{
+	struct scsi_disk *sdkp = scsi_disk(disk);
+	unsigned int nr, i;
+	unsigned char *buf;
+	size_t offset, buflen = 0;
+	int zone_idx = 0;
+	int ret;
+
+	if (!sd_is_zoned(sdkp))
+		/* Not a zoned device */
+		return -EOPNOTSUPP;
+
+	buf = sd_zbc_alloc_report_buffer(sdkp, nr_zones, &buflen);
+	if (!buf)
+		return -ENOMEM;
+
+	while (zone_idx < nr_zones && sector < get_capacity(disk)) {
+		ret = sd_zbc_do_report_zones(sdkp, buf, buflen,
+				sectors_to_logical(sdkp->device, sector), true);
+		if (ret)
+			goto out;
+
+		offset = 0;
+		nr = min(nr_zones, get_unaligned_be32(&buf[0]) / 64);
+		if (!nr)
+			break;
+
+		for (i = 0; i < nr && zone_idx < nr_zones; i++) {
+			offset += 64;
+			ret = sd_zbc_parse_report(sdkp, buf + offset, zone_idx,
+						  cb, data);
+			if (ret)
+				goto out;
+			zone_idx++;
+		}
+
+		sector += sd_zbc_zone_sectors(sdkp) * i;
+	}
+
+	ret = zone_idx;
+out:
+	kvfree(buf);
+	return ret;
+}
+
 /**
- * sd_zbc_setup_reset_cmnd - Prepare a RESET WRITE POINTER scsi command.
+ * sd_zbc_setup_zone_mgmt_cmnd - Prepare a zone ZBC_OUT command. The operations
+ *			can be RESET WRITE POINTER, OPEN, CLOSE or FINISH.
  * @cmd: the command to setup
- * @all: Reset all zones control.
+ * @op: Operation to be performed
+ * @all: All zones control
  *
- * Called from sd_init_command() for a REQ_OP_ZONE_RESET request.
+ * Called from sd_init_command() for REQ_OP_ZONE_RESET, REQ_OP_ZONE_RESET_ALL,
+ * REQ_OP_ZONE_OPEN, REQ_OP_ZONE_CLOSE or REQ_OP_ZONE_FINISH requests.
  */
-blk_status_t sd_zbc_setup_reset_cmnd(struct scsi_cmnd *cmd, bool all)
+blk_status_t sd_zbc_setup_zone_mgmt_cmnd(struct scsi_cmnd *cmd,
+					 unsigned char op, bool all)
 {
 	struct request *rq = cmd->request;
 	struct scsi_disk *sdkp = scsi_disk(rq->rq_disk);
@@ -234,7 +237,7 @@
 	cmd->cmd_len = 16;
 	memset(cmd->cmnd, 0, cmd->cmd_len);
 	cmd->cmnd[0] = ZBC_OUT;
-	cmd->cmnd[1] = ZO_RESET_WRITE_POINTER;
+	cmd->cmnd[1] = op;
 	if (all)
 		cmd->cmnd[14] = 0x1;
 	else
@@ -263,14 +266,14 @@
 	int result = cmd->result;
 	struct request *rq = cmd->request;
 
-	if (req_op(rq) == REQ_OP_ZONE_RESET &&
+	if (op_is_zone_mgmt(req_op(rq)) &&
 	    result &&
 	    sshdr->sense_key == ILLEGAL_REQUEST &&
 	    sshdr->asc == 0x24) {
 		/*
-		 * INVALID FIELD IN CDB error: reset of a conventional
-		 * zone was attempted. Nothing to worry about, so be
-		 * quiet about the error.
+		 * INVALID FIELD IN CDB error: a zone management command was
+		 * attempted on a conventional zone. Nothing to worry about,
+		 * so be quiet about the error.
 		 */
 		rq->rq_flags |= RQF_QUIET;
 	}
@@ -335,32 +338,18 @@
  * Returns the zone size in number of blocks upon success or an error code
  * upon failure.
  */
-static int sd_zbc_check_zones(struct scsi_disk *sdkp, u32 *zblocks)
+static int sd_zbc_check_zones(struct scsi_disk *sdkp, unsigned char *buf,
+			      u32 *zblocks)
 {
-	size_t bufsize, buflen;
-	unsigned int noio_flag;
 	u64 zone_blocks = 0;
-	sector_t max_lba, block = 0;
-	unsigned char *buf;
+	sector_t max_lba;
 	unsigned char *rec;
 	int ret;
-	u8 same;
 
-	/* Do all memory allocations as if GFP_NOIO was specified */
-	noio_flag = memalloc_noio_save();
-
-	/* Get a buffer */
-	buf = sd_zbc_alloc_report_buffer(sdkp, SD_ZBC_REPORT_MAX_ZONES,
-					 &bufsize);
-	if (!buf) {
-		ret = -ENOMEM;
-		goto out;
-	}
-
-	/* Do a report zone to get max_lba and the same field */
-	ret = sd_zbc_do_report_zones(sdkp, buf, bufsize, 0, false);
+	/* Do a report zone to get max_lba and the size of the first zone */
+	ret = sd_zbc_do_report_zones(sdkp, buf, SD_BUF_SIZE, 0, false);
 	if (ret)
-		goto out_free;
+		return ret;
 
 	if (sdkp->rc_basis == 0) {
 		/* The max_lba field is the capacity of this device */
@@ -375,82 +364,27 @@
 		}
 	}
 
-	/*
-	 * Check same field: for any value other than 0, we know that all zones
-	 * have the same size.
-	 */
-	same = buf[4] & 0x0f;
-	if (same > 0) {
-		rec = &buf[64];
-		zone_blocks = get_unaligned_be64(&rec[8]);
-		goto out;
-	}
-
-	/*
-	 * Check the size of all zones: all zones must be of
-	 * equal size, except the last zone which can be smaller
-	 * than other zones.
-	 */
-	do {
-
-		/* Parse REPORT ZONES header */
-		buflen = min_t(size_t, get_unaligned_be32(&buf[0]) + 64,
-			       bufsize);
-		rec = buf + 64;
-
-		/* Parse zone descriptors */
-		while (rec < buf + buflen) {
-			u64 this_zone_blocks = get_unaligned_be64(&rec[8]);
-
-			if (zone_blocks == 0) {
-				zone_blocks = this_zone_blocks;
-			} else if (this_zone_blocks != zone_blocks &&
-				   (block + this_zone_blocks < sdkp->capacity
-				    || this_zone_blocks > zone_blocks)) {
-				zone_blocks = 0;
-				goto out;
-			}
-			block += this_zone_blocks;
-			rec += 64;
-		}
-
-		if (block < sdkp->capacity) {
-			ret = sd_zbc_do_report_zones(sdkp, buf, bufsize, block,
-						     true);
-			if (ret)
-				goto out_free;
-		}
-
-	} while (block < sdkp->capacity);
-
-out:
-	if (!zone_blocks) {
-		if (sdkp->first_scan)
-			sd_printk(KERN_NOTICE, sdkp,
-				  "Devices with non constant zone "
-				  "size are not supported\n");
-		ret = -ENODEV;
-	} else if (!is_power_of_2(zone_blocks)) {
+	/* Parse REPORT ZONES header */
+	rec = buf + 64;
+	zone_blocks = get_unaligned_be64(&rec[8]);
+	if (!zone_blocks || !is_power_of_2(zone_blocks)) {
 		if (sdkp->first_scan)
 			sd_printk(KERN_NOTICE, sdkp,
 				  "Devices with non power of 2 zone "
 				  "size are not supported\n");
-		ret = -ENODEV;
-	} else if (logical_to_sectors(sdkp->device, zone_blocks) > UINT_MAX) {
+		return -ENODEV;
+	}
+
+	if (logical_to_sectors(sdkp->device, zone_blocks) > UINT_MAX) {
 		if (sdkp->first_scan)
 			sd_printk(KERN_NOTICE, sdkp,
 				  "Zone size too large\n");
-		ret = -EFBIG;
-	} else {
-		*zblocks = zone_blocks;
-		ret = 0;
+		return -EFBIG;
 	}
 
-out_free:
-	memalloc_noio_restore(noio_flag);
-	kvfree(buf);
+	*zblocks = zone_blocks;
 
-	return ret;
+	return 0;
 }
 
 int sd_zbc_read_zones(struct scsi_disk *sdkp, unsigned char *buf)
@@ -476,13 +410,11 @@
 	 * Check zone size: only devices with a constant zone size (except
 	 * an eventual last runt zone) that is a power of 2 are supported.
 	 */
-	ret = sd_zbc_check_zones(sdkp, &zone_blocks);
+	ret = sd_zbc_check_zones(sdkp, buf, &zone_blocks);
 	if (ret != 0)
 		goto err;
 
 	/* The drive satisfies the kernel restrictions: set it up */
-	blk_queue_chunk_sectors(sdkp->disk->queue,
-			logical_to_sectors(sdkp->device, zone_blocks));
 	blk_queue_flag_set(QUEUE_FLAG_ZONE_RESETALL, sdkp->disk->queue);
 	blk_queue_required_elevator_features(sdkp->disk->queue,
 					     ELEVATOR_F_ZBD_SEQ_WRITE);
diff --git a/drivers/scsi/ufs/Kconfig b/drivers/scsi/ufs/Kconfig
index 0b845ab..dd2ee07 100644
--- a/drivers/scsi/ufs/Kconfig
+++ b/drivers/scsi/ufs/Kconfig
@@ -99,6 +99,7 @@
 config SCSI_UFS_QCOM
 	tristate "QCOM specific hooks to UFS controller platform driver"
 	depends on SCSI_UFSHCD_PLATFORM && ARCH_QCOM
+	select QCOM_SCM
 	select RESET_CONTROLLER
 	help
 	  This selects the QCOM specific additions to UFSHCD platform driver.
@@ -150,3 +151,12 @@
 
 	  Select this if you need a bsg device node for your UFS controller.
 	  If unsure, say N.
+
+config SCSI_UFS_CRYPTO
+	bool "UFS Crypto Engine Support"
+	depends on SCSI_UFSHCD && BLK_INLINE_ENCRYPTION
+	help
+	  Enable Crypto Engine Support in UFS.
+	  Enabling this makes it possible for the kernel to use the crypto
+	  capabilities of the UFS device (if present) to perform crypto
+	  operations on data being transferred to/from the device.
diff --git a/drivers/scsi/ufs/Makefile b/drivers/scsi/ufs/Makefile
index 2a90979..17352a3 100644
--- a/drivers/scsi/ufs/Makefile
+++ b/drivers/scsi/ufs/Makefile
@@ -3,10 +3,13 @@
 obj-$(CONFIG_SCSI_UFS_DWC_TC_PCI) += tc-dwc-g210-pci.o ufshcd-dwc.o tc-dwc-g210.o
 obj-$(CONFIG_SCSI_UFS_DWC_TC_PLATFORM) += tc-dwc-g210-pltfrm.o ufshcd-dwc.o tc-dwc-g210.o
 obj-$(CONFIG_SCSI_UFS_CDNS_PLATFORM) += cdns-pltfrm.o
-obj-$(CONFIG_SCSI_UFS_QCOM) += ufs-qcom.o
+obj-$(CONFIG_SCSI_UFS_QCOM) += ufs_qcom.o
+ufs_qcom-y += ufs-qcom.o
+ufs_qcom-$(CONFIG_SCSI_UFS_CRYPTO) += ufs-qcom-ice.o
 obj-$(CONFIG_SCSI_UFSHCD) += ufshcd-core.o
 ufshcd-core-y				+= ufshcd.o ufs-sysfs.o
 ufshcd-core-$(CONFIG_SCSI_UFS_BSG)	+= ufs_bsg.o
+ufshcd-core-$(CONFIG_SCSI_UFS_CRYPTO) += ufshcd-crypto.o
 obj-$(CONFIG_SCSI_UFSHCD_PCI) += ufshcd-pci.o
 obj-$(CONFIG_SCSI_UFSHCD_PLATFORM) += ufshcd-pltfrm.o
 obj-$(CONFIG_SCSI_UFS_HISI) += ufs-hisi.o
diff --git a/drivers/scsi/ufs/cdns-pltfrm.c b/drivers/scsi/ufs/cdns-pltfrm.c
index 6feeb0f..7669527 100644
--- a/drivers/scsi/ufs/cdns-pltfrm.c
+++ b/drivers/scsi/ufs/cdns-pltfrm.c
@@ -97,7 +97,7 @@
 	 * and device TX LCC are disabled once link startup is
 	 * completed.
 	 */
-	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
+	ufshcd_disable_host_tx_lcc(hba);
 
 	/*
 	 * Disabling Autohibern8 feature in cadence UFS
diff --git a/drivers/scsi/ufs/ufs-hisi.c b/drivers/scsi/ufs/ufs-hisi.c
index 9903ce9..ad4276c 100644
--- a/drivers/scsi/ufs/ufs-hisi.c
+++ b/drivers/scsi/ufs/ufs-hisi.c
@@ -235,7 +235,7 @@
 	ufshcd_writel(hba, reg, REG_AUTO_HIBERNATE_IDLE_TIMER);
 
 	/* Unipro PA_Local_TX_LCC_Enable */
-	ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0x155E, 0x0), 0x0);
+	ufshcd_disable_host_tx_lcc(hba);
 	/* close Unipro VS_Mk2ExtnSupport */
 	ufshcd_dme_set(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), 0x0);
 	ufshcd_dme_get(hba, UIC_ARG_MIB_SEL(0xD0AB, 0x0), &value);
diff --git a/drivers/scsi/ufs/ufs-mediatek.c b/drivers/scsi/ufs/ufs-mediatek.c
index d4a8be5..7e08353 100644
--- a/drivers/scsi/ufs/ufs-mediatek.c
+++ b/drivers/scsi/ufs/ufs-mediatek.c
@@ -6,17 +6,67 @@
  *	Peter Wang <peter.wang@mediatek.com>
  */
 
+#include <linux/arm-smccc.h>
+#include <linux/bitfield.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include <linux/of_device.h>
 #include <linux/phy/phy.h>
 #include <linux/platform_device.h>
+#include <linux/regulator/consumer.h>
+#include <linux/reset.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
 
 #include "ufshcd.h"
+#include "ufshcd-crypto.h"
 #include "ufshcd-pltfrm.h"
 #include "ufs_quirks.h"
 #include "unipro.h"
 #include "ufs-mediatek.h"
 
+#define ufs_mtk_smc(cmd, val, res) \
+	arm_smccc_smc(MTK_SIP_UFS_CONTROL, \
+		      cmd, val, 0, 0, 0, 0, 0, &(res))
+
+#define ufs_mtk_va09_pwr_ctrl(res, on) \
+	ufs_mtk_smc(UFS_MTK_SIP_VA09_PWR_CTRL, on, res)
+
+#define ufs_mtk_crypto_ctrl(res, enable) \
+	ufs_mtk_smc(UFS_MTK_SIP_CRYPTO_CTRL, enable, res)
+
+#define ufs_mtk_ref_clk_notify(on, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_REF_CLK_NOTIFICATION, on, res)
+
+#define ufs_mtk_device_reset_ctrl(high, res) \
+	ufs_mtk_smc(UFS_MTK_SIP_DEVICE_RESET, high, res)
+
+static struct ufs_dev_fix ufs_mtk_dev_fixups[] = {
+	UFS_FIX(UFS_VENDOR_MICRON, UFS_ANY_MODEL,
+		UFS_DEVICE_QUIRK_DELAY_AFTER_LPM),
+	UFS_FIX(UFS_VENDOR_SKHYNIX, "H9HQ21AFAMZDAR",
+		UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES),
+	END_FIX
+};
+
+static const struct of_device_id ufs_mtk_of_match[] = {
+	{ .compatible = "mediatek,mt8183-ufshci" },
+	{},
+};
+
+static bool ufs_mtk_is_boost_crypt_enabled(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	return !!(host->caps & UFS_MTK_CAP_BOOST_CRYPT_ENGINE);
+}
+
+static bool ufs_mtk_is_va09_supported(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	return !!(host->caps & UFS_MTK_CAP_VA09_PWR_CTRL);
+}
+
 static void ufs_mtk_cfg_unipro_cg(struct ufs_hba *hba, bool enable)
 {
 	u32 tmp;
@@ -53,6 +103,89 @@
 	}
 }
 
+static void ufs_mtk_crypto_enable(struct ufs_hba *hba)
+{
+	struct arm_smccc_res res;
+
+	ufs_mtk_crypto_ctrl(res, 1);
+	if (res.a0) {
+		dev_info(hba->dev, "%s: crypto enable failed, err: %lu\n",
+			 __func__, res.a0);
+		hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	}
+}
+
+static void ufs_mtk_host_reset(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	reset_control_assert(host->hci_reset);
+	reset_control_assert(host->crypto_reset);
+	reset_control_assert(host->unipro_reset);
+
+	usleep_range(100, 110);
+
+	reset_control_deassert(host->unipro_reset);
+	reset_control_deassert(host->crypto_reset);
+	reset_control_deassert(host->hci_reset);
+}
+
+static void ufs_mtk_init_reset_control(struct ufs_hba *hba,
+				       struct reset_control **rc,
+				       char *str)
+{
+	*rc = devm_reset_control_get(hba->dev, str);
+	if (IS_ERR(*rc)) {
+		dev_info(hba->dev, "Failed to get reset control %s: %ld\n",
+			 str, PTR_ERR(*rc));
+		*rc = NULL;
+	}
+}
+
+static void ufs_mtk_init_reset(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	ufs_mtk_init_reset_control(hba, &host->hci_reset,
+				   "hci_rst");
+	ufs_mtk_init_reset_control(hba, &host->unipro_reset,
+				   "unipro_rst");
+	ufs_mtk_init_reset_control(hba, &host->crypto_reset,
+				   "crypto_rst");
+}
+
+static int ufs_mtk_hce_enable_notify(struct ufs_hba *hba,
+				     enum ufs_notify_change_status status)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	unsigned long flags;
+
+	if (status == PRE_CHANGE) {
+		if (host->unipro_lpm) {
+			hba->vps->hba_enable_delay_us = 0;
+		} else {
+			hba->vps->hba_enable_delay_us = 600;
+			ufs_mtk_host_reset(hba);
+		}
+
+		if (hba->caps & UFSHCD_CAP_CRYPTO)
+			ufs_mtk_crypto_enable(hba);
+
+		if (host->caps & UFS_MTK_CAP_DISABLE_AH8) {
+			spin_lock_irqsave(hba->host->host_lock, flags);
+			ufshcd_writel(hba, 0,
+				      REG_AUTO_HIBERNATE_IDLE_TIMER);
+			spin_unlock_irqrestore(hba->host->host_lock,
+					       flags);
+
+			hba->capabilities &= ~MASK_AUTO_HIBERN8_SUPPORT;
+			hba->ahit = 0;
+		}
+	}
+
+	return 0;
+}
+
 static int ufs_mtk_bind_mphy(struct ufs_hba *hba)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
@@ -73,15 +206,314 @@
 			__func__, err);
 	} else if (IS_ERR(host->mphy)) {
 		err = PTR_ERR(host->mphy);
-		dev_info(dev, "%s: PHY get failed %d\n", __func__, err);
+		if (err != -ENODEV) {
+			dev_info(dev, "%s: PHY get failed %d\n", __func__,
+				 err);
+		}
 	}
 
 	if (err)
 		host->mphy = NULL;
+	/*
+	 * Allow unbound mphy because not every platform needs specific
+	 * mphy control.
+	 */
+	if (err == -ENODEV)
+		err = 0;
 
 	return err;
 }
 
+static int ufs_mtk_setup_ref_clk(struct ufs_hba *hba, bool on)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct arm_smccc_res res;
+	ktime_t timeout, time_checked;
+	u32 value;
+
+	if (host->ref_clk_enabled == on)
+		return 0;
+
+	if (on) {
+		ufs_mtk_ref_clk_notify(on, res);
+		ufshcd_delay_us(host->ref_clk_ungating_wait_us, 10);
+		ufshcd_writel(hba, REFCLK_REQUEST, REG_UFS_REFCLK_CTRL);
+	} else {
+		ufshcd_writel(hba, REFCLK_RELEASE, REG_UFS_REFCLK_CTRL);
+	}
+
+	/* Wait for ack */
+	timeout = ktime_add_us(ktime_get(), REFCLK_REQ_TIMEOUT_US);
+	do {
+		time_checked = ktime_get();
+		value = ufshcd_readl(hba, REG_UFS_REFCLK_CTRL);
+
+		/* Wait until ack bit equals to req bit */
+		if (((value & REFCLK_ACK) >> 1) == (value & REFCLK_REQUEST))
+			goto out;
+
+		usleep_range(100, 200);
+	} while (ktime_before(time_checked, timeout));
+
+	dev_err(hba->dev, "missing ack of refclk req, reg: 0x%x\n", value);
+
+	ufs_mtk_ref_clk_notify(host->ref_clk_enabled, res);
+
+	return -ETIMEDOUT;
+
+out:
+	host->ref_clk_enabled = on;
+	if (!on) {
+		ufshcd_delay_us(host->ref_clk_gating_wait_us, 10);
+		ufs_mtk_ref_clk_notify(on, res);
+	}
+
+	return 0;
+}
+
+static void ufs_mtk_setup_ref_clk_wait_us(struct ufs_hba *hba,
+					  u16 gating_us, u16 ungating_us)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	if (hba->dev_info.clk_gating_wait_us) {
+		host->ref_clk_gating_wait_us =
+			hba->dev_info.clk_gating_wait_us;
+	} else {
+		host->ref_clk_gating_wait_us = gating_us;
+	}
+
+	host->ref_clk_ungating_wait_us = ungating_us;
+}
+
+int ufs_mtk_wait_link_state(struct ufs_hba *hba, u32 state,
+			    unsigned long max_wait_ms)
+{
+	ktime_t timeout, time_checked;
+	u32 val;
+
+	timeout = ktime_add_ms(ktime_get(), max_wait_ms);
+	do {
+		time_checked = ktime_get();
+		ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
+		val = ufshcd_readl(hba, REG_UFS_PROBE);
+		val = val >> 28;
+
+		if (val == state)
+			return 0;
+
+		/* Sleep for max. 200us */
+		usleep_range(100, 200);
+	} while (ktime_before(time_checked, timeout));
+
+	if (val == state)
+		return 0;
+
+	return -ETIMEDOUT;
+}
+
+static int ufs_mtk_mphy_power_on(struct ufs_hba *hba, bool on)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct phy *mphy = host->mphy;
+	struct arm_smccc_res res;
+	int ret = 0;
+
+	if (!mphy || !(on ^ host->mphy_powered_on))
+		return 0;
+
+	if (on) {
+		if (ufs_mtk_is_va09_supported(hba)) {
+			ret = regulator_enable(host->reg_va09);
+			if (ret < 0)
+				goto out;
+			/* wait 200 us to stablize VA09 */
+			usleep_range(200, 210);
+			ufs_mtk_va09_pwr_ctrl(res, 1);
+		}
+		phy_power_on(mphy);
+	} else {
+		phy_power_off(mphy);
+		if (ufs_mtk_is_va09_supported(hba)) {
+			ufs_mtk_va09_pwr_ctrl(res, 0);
+			ret = regulator_disable(host->reg_va09);
+			if (ret < 0)
+				goto out;
+		}
+	}
+out:
+	if (ret) {
+		dev_info(hba->dev,
+			 "failed to %s va09: %d\n",
+			 on ? "enable" : "disable",
+			 ret);
+	} else {
+		host->mphy_powered_on = on;
+	}
+
+	return ret;
+}
+
+static int ufs_mtk_get_host_clk(struct device *dev, const char *name,
+				struct clk **clk_out)
+{
+	struct clk *clk;
+	int err = 0;
+
+	clk = devm_clk_get(dev, name);
+	if (IS_ERR(clk))
+		err = PTR_ERR(clk);
+	else
+		*clk_out = clk;
+
+	return err;
+}
+
+static void ufs_mtk_boost_crypt(struct ufs_hba *hba, bool boost)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct ufs_mtk_crypt_cfg *cfg;
+	struct regulator *reg;
+	int volt, ret;
+
+	if (!ufs_mtk_is_boost_crypt_enabled(hba))
+		return;
+
+	cfg = host->crypt;
+	volt = cfg->vcore_volt;
+	reg = cfg->reg_vcore;
+
+	ret = clk_prepare_enable(cfg->clk_crypt_mux);
+	if (ret) {
+		dev_info(hba->dev, "clk_prepare_enable(): %d\n",
+			 ret);
+		return;
+	}
+
+	if (boost) {
+		ret = regulator_set_voltage(reg, volt, INT_MAX);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set vcore to %d\n", volt);
+			goto out;
+		}
+
+		ret = clk_set_parent(cfg->clk_crypt_mux,
+				     cfg->clk_crypt_perf);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set clk_crypt_perf\n");
+			regulator_set_voltage(reg, 0, INT_MAX);
+			goto out;
+		}
+	} else {
+		ret = clk_set_parent(cfg->clk_crypt_mux,
+				     cfg->clk_crypt_lp);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set clk_crypt_lp\n");
+			goto out;
+		}
+
+		ret = regulator_set_voltage(reg, 0, INT_MAX);
+		if (ret) {
+			dev_info(hba->dev,
+				 "failed to set vcore to MIN\n");
+		}
+	}
+out:
+	clk_disable_unprepare(cfg->clk_crypt_mux);
+}
+
+static int ufs_mtk_init_host_clk(struct ufs_hba *hba, const char *name,
+				 struct clk **clk)
+{
+	int ret;
+
+	ret = ufs_mtk_get_host_clk(hba->dev, name, clk);
+	if (ret) {
+		dev_info(hba->dev, "%s: failed to get %s: %d", __func__,
+			 name, ret);
+	}
+
+	return ret;
+}
+
+static void ufs_mtk_init_boost_crypt(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct ufs_mtk_crypt_cfg *cfg;
+	struct device *dev = hba->dev;
+	struct regulator *reg;
+	u32 volt;
+
+	host->crypt = devm_kzalloc(dev, sizeof(*(host->crypt)),
+				   GFP_KERNEL);
+	if (!host->crypt)
+		goto disable_caps;
+
+	reg = devm_regulator_get_optional(dev, "dvfsrc-vcore");
+	if (IS_ERR(reg)) {
+		dev_info(dev, "failed to get dvfsrc-vcore: %ld",
+			 PTR_ERR(reg));
+		goto disable_caps;
+	}
+
+	if (of_property_read_u32(dev->of_node, "boost-crypt-vcore-min",
+				 &volt)) {
+		dev_info(dev, "failed to get boost-crypt-vcore-min");
+		goto disable_caps;
+	}
+
+	cfg = host->crypt;
+	if (ufs_mtk_init_host_clk(hba, "crypt_mux",
+				  &cfg->clk_crypt_mux))
+		goto disable_caps;
+
+	if (ufs_mtk_init_host_clk(hba, "crypt_lp",
+				  &cfg->clk_crypt_lp))
+		goto disable_caps;
+
+	if (ufs_mtk_init_host_clk(hba, "crypt_perf",
+				  &cfg->clk_crypt_perf))
+		goto disable_caps;
+
+	cfg->reg_vcore = reg;
+	cfg->vcore_volt = volt;
+	host->caps |= UFS_MTK_CAP_BOOST_CRYPT_ENGINE;
+
+disable_caps:
+	return;
+}
+
+static void ufs_mtk_init_va09_pwr_ctrl(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	host->reg_va09 = regulator_get(hba->dev, "va09");
+	if (!host->reg_va09)
+		dev_info(hba->dev, "failed to get va09");
+	else
+		host->caps |= UFS_MTK_CAP_VA09_PWR_CTRL;
+}
+
+static void ufs_mtk_init_host_caps(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct device_node *np = hba->dev->of_node;
+
+	if (of_property_read_bool(np, "mediatek,ufs-boost-crypt"))
+		ufs_mtk_init_boost_crypt(hba);
+
+	if (of_property_read_bool(np, "mediatek,ufs-support-va09"))
+		ufs_mtk_init_va09_pwr_ctrl(hba);
+
+	if (of_property_read_bool(np, "mediatek,ufs-disable-ah8"))
+		host->caps |= UFS_MTK_CAP_DISABLE_AH8;
+
+	dev_info(hba->dev, "caps: 0x%x", host->caps);
+}
+
 /**
  * ufs_mtk_setup_clocks - enables/disable clocks
  * @hba: host controller instance
@@ -94,7 +526,8 @@
 				enum ufs_notify_change_status status)
 {
 	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
-	int ret = -EINVAL;
+	bool clk_pwr_off = false;
+	int ret = 0;
 
 	/*
 	 * In case ufs_mtk_init() is not yet done, simply ignore.
@@ -104,20 +537,56 @@
 	if (!host)
 		return 0;
 
-	switch (status) {
-	case PRE_CHANGE:
-		if (!on)
-			ret = phy_power_off(host->mphy);
-		break;
-	case POST_CHANGE:
-		if (on)
-			ret = phy_power_on(host->mphy);
-		break;
+	if (!on && status == PRE_CHANGE) {
+		if (ufshcd_is_link_off(hba)) {
+			clk_pwr_off = true;
+		} else if (ufshcd_is_link_hibern8(hba) ||
+			 (!ufshcd_can_hibern8_during_gating(hba) &&
+			 ufshcd_is_auto_hibern8_enabled(hba))) {
+			/*
+			 * Gate ref-clk and poweroff mphy if link state is in
+			 * OFF or Hibern8 by either Auto-Hibern8 or
+			 * ufshcd_link_state_transition().
+			 */
+			ret = ufs_mtk_wait_link_state(hba,
+						      VS_LINK_HIBERN8,
+						      15);
+			if (!ret)
+				clk_pwr_off = true;
+		}
+
+		if (clk_pwr_off) {
+			ufs_mtk_boost_crypt(hba, on);
+			ufs_mtk_setup_ref_clk(hba, on);
+			phy_power_off(host->mphy);
+		}
+	} else if (on && status == POST_CHANGE) {
+		phy_power_on(host->mphy);
+		ufs_mtk_setup_ref_clk(hba, on);
+		ufs_mtk_boost_crypt(hba, on);
 	}
 
 	return ret;
 }
 
+static void ufs_mtk_get_controller_version(struct ufs_hba *hba)
+{
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	int ret, ver = 0;
+
+	if (host->hw_ver.major)
+		return;
+
+	/* Set default (minimum) version anyway */
+	host->hw_ver.major = 2;
+
+	ret = ufshcd_dme_get(hba, UIC_ARG_MIB(PA_LOCALVERINFO), &ver);
+	if (!ret) {
+		if (ver >= UFS_UNIPRO_VER_1_8)
+			host->hw_ver.major = 3;
+	}
+}
+
 /**
  * ufs_mtk_init - find other essential mmio bases
  * @hba: host controller instance
@@ -130,8 +599,9 @@
  */
 static int ufs_mtk_init(struct ufs_hba *hba)
 {
-	struct ufs_mtk_host *host;
+	const struct of_device_id *id;
 	struct device *dev = hba->dev;
+	struct ufs_mtk_host *host;
 	int err = 0;
 
 	host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
@@ -144,10 +614,37 @@
 	host->hba = hba;
 	ufshcd_set_variant(hba, host);
 
+	id = of_match_device(ufs_mtk_of_match, dev);
+	if (!id) {
+		err = -EINVAL;
+		goto out;
+	}
+
+	/* Initialize host capability */
+	ufs_mtk_init_host_caps(hba);
+
 	err = ufs_mtk_bind_mphy(hba);
 	if (err)
 		goto out_variant_clear;
 
+	ufs_mtk_init_reset(hba);
+
+	/* Enable runtime autosuspend */
+	hba->caps |= UFSHCD_CAP_RPM_AUTOSUSPEND;
+
+	/* Enable clock-gating */
+	hba->caps |= UFSHCD_CAP_CLK_GATING;
+
+	/* Enable inline encryption */
+	hba->caps |= UFSHCD_CAP_CRYPTO;
+
+	/* Enable WriteBooster */
+	hba->caps |= UFSHCD_CAP_WB_EN;
+	hba->vps->wb_flush_threshold = UFS_WB_BUF_REMAIN_PERCENT(80);
+
+	if (host->caps & UFS_MTK_CAP_DISABLE_AH8)
+		hba->caps |= UFSHCD_CAP_HIBERN8_WITH_CLK_GATING;
+
 	/*
 	 * ufshcd_vops_init() is invoked after
 	 * ufshcd_setup_clock(true) in ufshcd_hba_init() thus
@@ -155,6 +652,7 @@
 	 *
 	 * Enable phy clocks specifically here.
 	 */
+	ufs_mtk_mphy_power_on(hba, true);
 	ufs_mtk_setup_clocks(hba, true, POST_CHANGE);
 
 	goto out;
@@ -169,7 +667,9 @@
 				  struct ufs_pa_layer_attr *dev_max_params,
 				  struct ufs_pa_layer_attr *dev_req_params)
 {
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
 	struct ufs_dev_params host_cap;
+	u32 adapt_val;
 	int ret;
 
 	host_cap.tx_lanes = UFS_MTK_LIMIT_NUM_LANES_TX;
@@ -194,6 +694,16 @@
 			__func__);
 	}
 
+	if (host->hw_ver.major >= 3) {
+		if (dev_req_params->gear_tx == UFS_HS_G4)
+			adapt_val = PA_INITIAL_ADAPT;
+		else
+			adapt_val = PA_NO_ADAPT;
+		ufshcd_dme_set(hba,
+			       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+			       adapt_val);
+	}
+
 	return ret;
 }
 
@@ -219,11 +729,46 @@
 	return ret;
 }
 
+static int ufs_mtk_unipro_set_lpm(struct ufs_hba *hba, bool lpm)
+{
+	int ret;
+	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+
+	ret = ufshcd_dme_set(hba,
+			     UIC_ARG_MIB_SEL(VS_UNIPROPOWERDOWNCONTROL, 0),
+			     lpm ? 1 : 0);
+	if (!ret || !lpm) {
+		/*
+		 * Forcibly set as non-LPM mode if UIC commands is failed
+		 * to use default hba_enable_delay_us value for re-enabling
+		 * the host.
+		 */
+		host->unipro_lpm = lpm;
+	}
+
+	return ret;
+}
+
 static int ufs_mtk_pre_link(struct ufs_hba *hba)
 {
 	int ret;
 	u32 tmp;
 
+	ufs_mtk_get_controller_version(hba);
+
+	ret = ufs_mtk_unipro_set_lpm(hba, false);
+	if (ret)
+		return ret;
+
+	/*
+	 * Setting PA_Local_TX_LCC_Enable to 0 before link startup
+	 * to make sure that both host and device TX LCC are disabled
+	 * once link startup is completed.
+	 */
+	ret = ufshcd_disable_host_tx_lcc(hba);
+	if (ret)
+		return ret;
+
 	/* disable deep stall */
 	ret = ufshcd_dme_get(hba, UIC_ARG_MIB(VS_SAVEPOWERCONTROL), &tmp);
 	if (ret)
@@ -236,14 +781,37 @@
 	return ret;
 }
 
+static void ufs_mtk_setup_clk_gating(struct ufs_hba *hba)
+{
+	unsigned long flags;
+	u32 ah_ms;
+
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		if (ufshcd_is_auto_hibern8_supported(hba) && hba->ahit)
+			ah_ms = FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK,
+					  hba->ahit);
+		else
+			ah_ms = 10;
+		spin_lock_irqsave(hba->host->host_lock, flags);
+		hba->clk_gating.delay_ms = ah_ms + 5;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+	}
+}
+
 static int ufs_mtk_post_link(struct ufs_hba *hba)
 {
-	/* disable device LCC */
-	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
-
 	/* enable unipro clock gating feature */
 	ufs_mtk_cfg_unipro_cg(hba, true);
 
+	/* configure auto-hibern8 timer to 10ms */
+	if (ufshcd_is_auto_hibern8_supported(hba)) {
+		ufshcd_auto_hibern8_update(hba,
+			FIELD_PREP(UFSHCI_AHIBERN8_TIMER_MASK, 10) |
+			FIELD_PREP(UFSHCI_AHIBERN8_SCALE_MASK, 3));
+	}
+
+	ufs_mtk_setup_clk_gating(hba);
+
 	return 0;
 }
 
@@ -267,50 +835,197 @@
 	return ret;
 }
 
-static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
+static void ufs_mtk_device_reset(struct ufs_hba *hba)
 {
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	struct arm_smccc_res res;
 
-	if (ufshcd_is_link_hibern8(hba))
-		phy_power_off(host->mphy);
+	ufs_mtk_device_reset_ctrl(0, res);
+
+	/*
+	 * The reset signal is active low. UFS devices shall detect
+	 * more than or equal to 1us of positive or negative RST_n
+	 * pulse width.
+	 *
+	 * To be on safe side, keep the reset low for at least 10us.
+	 */
+	usleep_range(10, 15);
+
+	ufs_mtk_device_reset_ctrl(1, res);
+
+	/* Some devices may need time to respond to rst_n */
+	usleep_range(10000, 15000);
+
+	dev_info(hba->dev, "device reset done\n");
+}
+
+static int ufs_mtk_link_set_hpm(struct ufs_hba *hba)
+{
+	int err;
+
+	err = ufshcd_hba_enable(hba);
+	if (err)
+		return err;
+
+	err = ufs_mtk_unipro_set_lpm(hba, false);
+	if (err)
+		return err;
+
+	err = ufshcd_uic_hibern8_exit(hba);
+	if (!err)
+		ufshcd_set_link_active(hba);
+	else
+		return err;
+
+	err = ufshcd_make_hba_operational(hba);
+	if (err)
+		return err;
 
 	return 0;
 }
 
+static int ufs_mtk_link_set_lpm(struct ufs_hba *hba)
+{
+	int err;
+
+	err = ufs_mtk_unipro_set_lpm(hba, true);
+	if (err) {
+		/* Resume UniPro state for following error recovery */
+		ufs_mtk_unipro_set_lpm(hba, false);
+		return err;
+	}
+
+	return 0;
+}
+
+static void ufs_mtk_vreg_set_lpm(struct ufs_hba *hba, bool lpm)
+{
+	if (!hba->vreg_info.vccq2)
+		return;
+
+	if (lpm && !hba->vreg_info.vcc->enabled)
+		regulator_set_mode(hba->vreg_info.vccq2->reg,
+				   REGULATOR_MODE_IDLE);
+	else if (!lpm)
+		regulator_set_mode(hba->vreg_info.vccq2->reg,
+				   REGULATOR_MODE_NORMAL);
+}
+
+static int ufs_mtk_suspend(struct ufs_hba *hba, enum ufs_pm_op pm_op)
+{
+	int err;
+
+	if (ufshcd_is_link_hibern8(hba)) {
+		err = ufs_mtk_link_set_lpm(hba);
+		if (err)
+			goto fail;
+	}
+
+	if (!ufshcd_is_link_active(hba)) {
+		/*
+		 * Make sure no error will be returned to prevent
+		 * ufshcd_suspend() re-enabling regulators while vreg is still
+		 * in low-power mode.
+		 */
+		ufs_mtk_vreg_set_lpm(hba, true);
+		err = ufs_mtk_mphy_power_on(hba, false);
+		if (err)
+			goto fail;
+	}
+
+	return 0;
+fail:
+	/*
+	 * Set link as off state enforcedly to trigger
+	 * ufshcd_host_reset_and_restore() in ufshcd_suspend()
+	 * for completed host reset.
+	 */
+	ufshcd_set_link_off(hba);
+	return -EAGAIN;
+}
+
 static int ufs_mtk_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op)
 {
-	struct ufs_mtk_host *host = ufshcd_get_variant(hba);
+	int err;
 
-	if (ufshcd_is_link_hibern8(hba))
-		phy_power_on(host->mphy);
+	err = ufs_mtk_mphy_power_on(hba, true);
+	if (err)
+		goto fail;
+
+	ufs_mtk_vreg_set_lpm(hba, false);
+
+	if (ufshcd_is_link_hibern8(hba)) {
+		err = ufs_mtk_link_set_hpm(hba);
+		if (err)
+			goto fail;
+	}
 
 	return 0;
+fail:
+	return ufshcd_link_recovery(hba);
 }
 
-static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba,
-				    struct ufs_dev_desc *card)
+static void ufs_mtk_dbg_register_dump(struct ufs_hba *hba)
 {
-	if (card->wmanufacturerid == UFS_VENDOR_SAMSUNG)
+	ufshcd_dump_regs(hba, REG_UFS_REFCLK_CTRL, 0x4, "Ref-Clk Ctrl ");
+
+	ufshcd_dump_regs(hba, REG_UFS_EXTREG, 0x4, "Ext Reg ");
+
+	ufshcd_dump_regs(hba, REG_UFS_MPHYCTRL,
+			 REG_UFS_REJECT_MON - REG_UFS_MPHYCTRL + 4,
+			 "MPHY Ctrl ");
+
+	/* Direct debugging information to REG_MTK_PROBE */
+	ufshcd_writel(hba, 0x20, REG_UFS_DEBUG_SEL);
+	ufshcd_dump_regs(hba, REG_UFS_PROBE, 0x4, "Debug Probe ");
+}
+
+static int ufs_mtk_apply_dev_quirks(struct ufs_hba *hba)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u16 mid = dev_info->wmanufacturerid;
+
+	if (mid == UFS_VENDOR_SAMSUNG)
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 6);
 
+	/*
+	 * Decide waiting time before gating reference clock and
+	 * after ungating reference clock according to vendors'
+	 * requirements.
+	 */
+	if (mid == UFS_VENDOR_SAMSUNG)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 1, 1);
+	else if (mid == UFS_VENDOR_SKHYNIX)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 30, 30);
+	else if (mid == UFS_VENDOR_TOSHIBA)
+		ufs_mtk_setup_ref_clk_wait_us(hba, 100, 32);
+
 	return 0;
 }
 
-/**
+static void ufs_mtk_fixup_dev_quirks(struct ufs_hba *hba)
+{
+	ufshcd_fixup_dev_quirks(hba, ufs_mtk_dev_fixups);
+}
+
+/*
  * struct ufs_hba_mtk_vops - UFS MTK specific variant operations
  *
  * The variant operations configure the necessary controller and PHY
  * handshake during initialization.
  */
-static struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
+static const struct ufs_hba_variant_ops ufs_hba_mtk_vops = {
 	.name                = "mediatek.ufshci",
 	.init                = ufs_mtk_init,
 	.setup_clocks        = ufs_mtk_setup_clocks,
+	.hce_enable_notify   = ufs_mtk_hce_enable_notify,
 	.link_startup_notify = ufs_mtk_link_startup_notify,
 	.pwr_change_notify   = ufs_mtk_pwr_change_notify,
 	.apply_dev_quirks    = ufs_mtk_apply_dev_quirks,
+	.fixup_dev_quirks    = ufs_mtk_fixup_dev_quirks,
 	.suspend             = ufs_mtk_suspend,
 	.resume              = ufs_mtk_resume,
+	.dbg_register_dump   = ufs_mtk_dbg_register_dump,
+	.device_reset        = ufs_mtk_device_reset,
 };
 
 /**
@@ -347,11 +1062,6 @@
 	return 0;
 }
 
-static const struct of_device_id ufs_mtk_of_match[] = {
-	{ .compatible = "mediatek,mt8183-ufshci"},
-	{},
-};
-
 static const struct dev_pm_ops ufs_mtk_pm_ops = {
 	.suspend         = ufshcd_pltfrm_suspend,
 	.resume          = ufshcd_pltfrm_resume,
diff --git a/drivers/scsi/ufs/ufs-mediatek.h b/drivers/scsi/ufs/ufs-mediatek.h
index 19f8c42..ac37b11 100644
--- a/drivers/scsi/ufs/ufs-mediatek.h
+++ b/drivers/scsi/ufs/ufs-mediatek.h
@@ -6,13 +6,37 @@
 #ifndef _UFS_MEDIATEK_H
 #define _UFS_MEDIATEK_H
 
+#include <linux/bitops.h>
+#include <linux/soc/mediatek/mtk_sip_svc.h>
+
+/*
+ * Vendor specific UFSHCI Registers
+ */
+#define REG_UFS_REFCLK_CTRL         0x144
+#define REG_UFS_EXTREG              0x2100
+#define REG_UFS_MPHYCTRL            0x2200
+#define REG_UFS_REJECT_MON          0x22AC
+#define REG_UFS_DEBUG_SEL           0x22C0
+#define REG_UFS_PROBE               0x22C8
+
+/*
+ * Ref-clk control
+ *
+ * Values for register REG_UFS_REFCLK_CTRL
+ */
+#define REFCLK_RELEASE              0x0
+#define REFCLK_REQUEST              BIT(0)
+#define REFCLK_ACK                  BIT(1)
+
+#define REFCLK_REQ_TIMEOUT_US       3000
+
 /*
  * Vendor specific pre-defined parameters
  */
-#define UFS_MTK_LIMIT_NUM_LANES_RX  1
-#define UFS_MTK_LIMIT_NUM_LANES_TX  1
-#define UFS_MTK_LIMIT_HSGEAR_RX     UFS_HS_G3
-#define UFS_MTK_LIMIT_HSGEAR_TX     UFS_HS_G3
+#define UFS_MTK_LIMIT_NUM_LANES_RX  2
+#define UFS_MTK_LIMIT_NUM_LANES_TX  2
+#define UFS_MTK_LIMIT_HSGEAR_RX     UFS_HS_G4
+#define UFS_MTK_LIMIT_HSGEAR_TX     UFS_HS_G4
 #define UFS_MTK_LIMIT_PWMGEAR_RX    UFS_PWM_G4
 #define UFS_MTK_LIMIT_PWMGEAR_TX    UFS_PWM_G4
 #define UFS_MTK_LIMIT_RX_PWR_PWM    SLOW_MODE
@@ -30,6 +54,27 @@
 #define VS_UNIPROPOWERDOWNCONTROL   0xD0A8
 
 /*
+ * Vendor specific link state
+ */
+enum {
+	VS_LINK_DISABLED            = 0,
+	VS_LINK_DOWN                = 1,
+	VS_LINK_UP                  = 2,
+	VS_LINK_HIBERN8             = 3,
+	VS_LINK_LOST                = 4,
+	VS_LINK_CFG                 = 5,
+};
+
+/*
+ * SiP commands
+ */
+#define MTK_SIP_UFS_CONTROL               MTK_SIP_SMC_CMD(0x276)
+#define UFS_MTK_SIP_VA09_PWR_CTRL         BIT(0)
+#define UFS_MTK_SIP_DEVICE_RESET          BIT(1)
+#define UFS_MTK_SIP_CRYPTO_CTRL           BIT(2)
+#define UFS_MTK_SIP_REF_CLK_NOTIFICATION  BIT(3)
+
+/*
  * VS_DEBUGCLOCKENABLE
  */
 enum {
@@ -45,9 +90,44 @@
 	TX_CLK_GATE_EN          = 3,
 };
 
+/*
+ * Host capability
+ */
+enum ufs_mtk_host_caps {
+	UFS_MTK_CAP_BOOST_CRYPT_ENGINE         = 1 << 0,
+	UFS_MTK_CAP_VA09_PWR_CTRL              = 1 << 1,
+	UFS_MTK_CAP_DISABLE_AH8                = 1 << 2,
+};
+
+struct ufs_mtk_crypt_cfg {
+	struct regulator *reg_vcore;
+	struct clk *clk_crypt_perf;
+	struct clk *clk_crypt_mux;
+	struct clk *clk_crypt_lp;
+	int vcore_volt;
+};
+
+struct ufs_mtk_hw_ver {
+	u8 step;
+	u8 minor;
+	u8 major;
+};
+
 struct ufs_mtk_host {
-	struct ufs_hba *hba;
 	struct phy *mphy;
+	struct regulator *reg_va09;
+	struct reset_control *hci_reset;
+	struct reset_control *unipro_reset;
+	struct reset_control *crypto_reset;
+	struct ufs_hba *hba;
+	struct ufs_mtk_crypt_cfg *crypt;
+	struct ufs_mtk_hw_ver hw_ver;
+	enum ufs_mtk_host_caps caps;
+	bool mphy_powered_on;
+	bool unipro_lpm;
+	bool ref_clk_enabled;
+	u16 ref_clk_ungating_wait_us;
+	u16 ref_clk_gating_wait_us;
 };
 
 #endif /* !_UFS_MEDIATEK_H */
diff --git a/drivers/scsi/ufs/ufs-qcom-ice.c b/drivers/scsi/ufs/ufs-qcom-ice.c
new file mode 100644
index 0000000..bbb0ad7
--- /dev/null
+++ b/drivers/scsi/ufs/ufs-qcom-ice.c
@@ -0,0 +1,245 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Qualcomm ICE (Inline Crypto Engine) support.
+ *
+ * Copyright (c) 2014-2019, The Linux Foundation. All rights reserved.
+ * Copyright 2019 Google LLC
+ */
+
+#include <linux/platform_device.h>
+#include <linux/qcom_scm.h>
+
+#include "ufshcd-crypto.h"
+#include "ufs-qcom.h"
+
+#define AES_256_XTS_KEY_SIZE			64
+
+/* QCOM ICE registers */
+
+#define QCOM_ICE_REG_CONTROL			0x0000
+#define QCOM_ICE_REG_RESET			0x0004
+#define QCOM_ICE_REG_VERSION			0x0008
+#define QCOM_ICE_REG_FUSE_SETTING		0x0010
+#define QCOM_ICE_REG_PARAMETERS_1		0x0014
+#define QCOM_ICE_REG_PARAMETERS_2		0x0018
+#define QCOM_ICE_REG_PARAMETERS_3		0x001C
+#define QCOM_ICE_REG_PARAMETERS_4		0x0020
+#define QCOM_ICE_REG_PARAMETERS_5		0x0024
+
+/* QCOM ICE v3.X only */
+#define QCOM_ICE_GENERAL_ERR_STTS		0x0040
+#define QCOM_ICE_INVALID_CCFG_ERR_STTS		0x0030
+#define QCOM_ICE_GENERAL_ERR_MASK		0x0044
+
+/* QCOM ICE v2.X only */
+#define QCOM_ICE_REG_NON_SEC_IRQ_STTS		0x0040
+#define QCOM_ICE_REG_NON_SEC_IRQ_MASK		0x0044
+
+#define QCOM_ICE_REG_NON_SEC_IRQ_CLR		0x0048
+#define QCOM_ICE_REG_STREAM1_ERROR_SYNDROME1	0x0050
+#define QCOM_ICE_REG_STREAM1_ERROR_SYNDROME2	0x0054
+#define QCOM_ICE_REG_STREAM2_ERROR_SYNDROME1	0x0058
+#define QCOM_ICE_REG_STREAM2_ERROR_SYNDROME2	0x005C
+#define QCOM_ICE_REG_STREAM1_BIST_ERROR_VEC	0x0060
+#define QCOM_ICE_REG_STREAM2_BIST_ERROR_VEC	0x0064
+#define QCOM_ICE_REG_STREAM1_BIST_FINISH_VEC	0x0068
+#define QCOM_ICE_REG_STREAM2_BIST_FINISH_VEC	0x006C
+#define QCOM_ICE_REG_BIST_STATUS		0x0070
+#define QCOM_ICE_REG_BYPASS_STATUS		0x0074
+#define QCOM_ICE_REG_ADVANCED_CONTROL		0x1000
+#define QCOM_ICE_REG_ENDIAN_SWAP		0x1004
+#define QCOM_ICE_REG_TEST_BUS_CONTROL		0x1010
+#define QCOM_ICE_REG_TEST_BUS_REG		0x1014
+
+/* BIST ("built-in self-test"?) status flags */
+#define QCOM_ICE_BIST_STATUS_MASK		0xF0000000
+
+#define QCOM_ICE_FUSE_SETTING_MASK		0x1
+#define QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK	0x2
+#define QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK	0x4
+
+#define qcom_ice_writel(host, val, reg)	\
+	writel((val), (host)->ice_mmio + (reg))
+#define qcom_ice_readl(host, reg)	\
+	readl((host)->ice_mmio + (reg))
+
+static bool qcom_ice_supported(struct ufs_qcom_host *host)
+{
+	struct device *dev = host->hba->dev;
+	u32 regval = qcom_ice_readl(host, QCOM_ICE_REG_VERSION);
+	int major = regval >> 24;
+	int minor = (regval >> 16) & 0xFF;
+	int step = regval & 0xFFFF;
+
+	/* For now this driver only supports ICE version 3. */
+	if (major != 3) {
+		dev_warn(dev, "Unsupported ICE version: v%d.%d.%d\n",
+			 major, minor, step);
+		return false;
+	}
+
+	dev_info(dev, "Found QC Inline Crypto Engine (ICE) v%d.%d.%d\n",
+		 major, minor, step);
+
+	/* If fuses are blown, ICE might not work in the standard way. */
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_FUSE_SETTING);
+	if (regval & (QCOM_ICE_FUSE_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY0_SETTING_MASK |
+		      QCOM_ICE_FORCE_HW_KEY1_SETTING_MASK)) {
+		dev_warn(dev, "Fuses are blown; ICE is unusable!\n");
+		return false;
+	}
+	return true;
+}
+
+int ufs_qcom_ice_init(struct ufs_qcom_host *host)
+{
+	struct ufs_hba *hba = host->hba;
+	struct device *dev = hba->dev;
+	struct platform_device *pdev = to_platform_device(dev);
+	struct resource *res;
+	int err;
+
+	if (!(ufshcd_readl(hba, REG_CONTROLLER_CAPABILITIES) &
+	      MASK_CRYPTO_SUPPORT))
+		return 0;
+
+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "ice");
+	if (!res) {
+		dev_warn(dev, "ICE registers not found\n");
+		goto disable;
+	}
+
+	if (!qcom_scm_ice_available()) {
+		dev_warn(dev, "ICE SCM interface not found\n");
+		goto disable;
+	}
+
+	host->ice_mmio = devm_ioremap_resource(dev, res);
+	if (IS_ERR(host->ice_mmio)) {
+		err = PTR_ERR(host->ice_mmio);
+		dev_err(dev, "Failed to map ICE registers; err=%d\n", err);
+		return err;
+	}
+
+	if (!qcom_ice_supported(host))
+		goto disable;
+
+	return 0;
+
+disable:
+	dev_warn(dev, "Disabling inline encryption support\n");
+	hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	return 0;
+}
+
+static void qcom_ice_low_power_mode_enable(struct ufs_qcom_host *host)
+{
+	u32 regval;
+
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	/*
+	 * Enable low power mode sequence
+	 * [0]-0, [1]-0, [2]-0, [3]-E, [4]-0, [5]-0, [6]-0, [7]-0
+	 */
+	regval |= 0x7000;
+	qcom_ice_writel(host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+}
+
+static void qcom_ice_optimization_enable(struct ufs_qcom_host *host)
+{
+	u32 regval;
+
+	/* ICE Optimizations Enable Sequence */
+	regval = qcom_ice_readl(host, QCOM_ICE_REG_ADVANCED_CONTROL);
+	regval |= 0xD807100;
+	/* ICE HPG requires delay before writing */
+	udelay(5);
+	qcom_ice_writel(host, regval, QCOM_ICE_REG_ADVANCED_CONTROL);
+	udelay(5);
+}
+
+int ufs_qcom_ice_enable(struct ufs_qcom_host *host)
+{
+	if (!(host->hba->caps & UFSHCD_CAP_CRYPTO))
+		return 0;
+	qcom_ice_low_power_mode_enable(host);
+	qcom_ice_optimization_enable(host);
+	return ufs_qcom_ice_resume(host);
+}
+
+/* Poll until all BIST bits are reset */
+static int qcom_ice_wait_bist_status(struct ufs_qcom_host *host)
+{
+	int count;
+	u32 reg;
+
+	for (count = 0; count < 100; count++) {
+		reg = qcom_ice_readl(host, QCOM_ICE_REG_BIST_STATUS);
+		if (!(reg & QCOM_ICE_BIST_STATUS_MASK))
+			break;
+		udelay(50);
+	}
+	if (reg)
+		return -ETIMEDOUT;
+	return 0;
+}
+
+int ufs_qcom_ice_resume(struct ufs_qcom_host *host)
+{
+	int err;
+
+	if (!(host->hba->caps & UFSHCD_CAP_CRYPTO))
+		return 0;
+
+	err = qcom_ice_wait_bist_status(host);
+	if (err) {
+		dev_err(host->hba->dev, "BIST status error (%d)\n", err);
+		return err;
+	}
+	return 0;
+}
+
+/*
+ * Program a key into a QC ICE keyslot, or evict a keyslot.  QC ICE requires
+ * vendor-specific SCM calls for this; it doesn't support the standard way.
+ */
+int ufs_qcom_ice_program_key(struct ufs_hba *hba,
+			     const union ufs_crypto_cfg_entry *cfg, int slot)
+{
+	union ufs_crypto_cap_entry cap;
+	union {
+		u8 bytes[AES_256_XTS_KEY_SIZE];
+		u32 words[AES_256_XTS_KEY_SIZE / sizeof(u32)];
+	} key;
+	int i;
+	int err;
+
+	if (!(cfg->config_enable & UFS_CRYPTO_CONFIGURATION_ENABLE))
+		return qcom_scm_ice_invalidate_key(slot);
+
+	/* Only AES-256-XTS has been tested so far. */
+	cap = hba->crypto_cap_array[cfg->crypto_cap_idx];
+	if (cap.algorithm_id != UFS_CRYPTO_ALG_AES_XTS ||
+	    cap.key_size != UFS_CRYPTO_KEY_SIZE_256) {
+		dev_err_ratelimited(hba->dev,
+				    "Unhandled crypto capability; algorithm_id=%d, key_size=%d\n",
+				    cap.algorithm_id, cap.key_size);
+		return -EINVAL;
+	}
+
+	memcpy(key.bytes, cfg->crypto_key, AES_256_XTS_KEY_SIZE);
+
+	/*
+	 * The SCM call byte-swaps the 32-bit words of the key.  So we have to
+	 * do the same, in order for the final key be correct.
+	 */
+	for (i = 0; i < ARRAY_SIZE(key.words); i++)
+		__cpu_to_be32s(&key.words[i]);
+
+	err = qcom_scm_ice_set_key(slot, key.bytes, AES_256_XTS_KEY_SIZE,
+				   QCOM_SCM_ICE_CIPHER_AES_256_XTS,
+				   cfg->data_unit_size);
+	memzero_explicit(&key, sizeof(key));
+	return err;
+}
diff --git a/drivers/scsi/ufs/ufs-qcom.c b/drivers/scsi/ufs/ufs-qcom.c
index 4f066e3..de81fee 100644
--- a/drivers/scsi/ufs/ufs-qcom.c
+++ b/drivers/scsi/ufs/ufs-qcom.c
@@ -10,6 +10,7 @@
 #include <linux/phy/phy.h>
 #include <linux/gpio/consumer.h>
 #include <linux/reset-controller.h>
+#include <linux/devfreq.h>
 
 #include "ufshcd.h"
 #include "ufshcd-pltfrm.h"
@@ -38,7 +39,6 @@
 
 static struct ufs_qcom_host *ufs_qcom_hosts[MAX_UFS_QCOM_HOSTS];
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote);
 static void ufs_qcom_get_default_testbus_cfg(struct ufs_qcom_host *host);
 static int ufs_qcom_set_dme_vs_core_clk_ctrl_clear_div(struct ufs_hba *hba,
 						       u32 clk_cycles);
@@ -246,6 +246,44 @@
 	mb();
 }
 
+/**
+ * ufs_qcom_host_reset - reset host controller and PHY
+ */
+static int ufs_qcom_host_reset(struct ufs_hba *hba)
+{
+	int ret = 0;
+	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+
+	if (!host->core_reset) {
+		dev_warn(hba->dev, "%s: reset control not set\n", __func__);
+		goto out;
+	}
+
+	ret = reset_control_assert(host->core_reset);
+	if (ret) {
+		dev_err(hba->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(host->core_reset);
+	if (ret)
+		dev_err(hba->dev, "%s: core_reset deassert failed, err = %d\n",
+				 __func__, ret);
+
+	usleep_range(1000, 1100);
+
+out:
+	return ret;
+}
+
 static int ufs_qcom_power_up_sequence(struct ufs_hba *hba)
 {
 	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
@@ -254,6 +292,12 @@
 	bool is_rate_B = (UFS_QCOM_LIMIT_HS_RATE == PA_HS_MODE_B)
 							? true : false;
 
+	/* Reset UFS Host Controller and PHY */
+	ret = ufs_qcom_host_reset(hba);
+	if (ret)
+		dev_warn(hba->dev, "%s: host reset returned %d\n",
+				  __func__, ret);
+
 	if (is_rate_B)
 		phy_set_mode(phy, PHY_MODE_UFS_HS_B);
 
@@ -321,7 +365,7 @@
 		/* check if UFS PHY moved from DISABLED to HIBERN8 */
 		err = ufs_qcom_check_hibern8(hba);
 		ufs_qcom_enable_hw_clk_gating(hba);
-
+		ufs_qcom_ice_enable(host);
 		break;
 	default:
 		dev_err(hba->dev, "%s: invalid status %d\n", __func__, status);
@@ -510,9 +554,7 @@
 		 * completed.
 		 */
 		if (ufshcd_get_local_unipro_ver(hba) != UFS_UNIPRO_VER_1_41)
-			err = ufshcd_dme_set(hba,
-					UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE),
-					0);
+			err = ufshcd_disable_host_tx_lcc(hba);
 
 		break;
 	case POST_CHANGE:
@@ -572,6 +614,10 @@
 			return err;
 	}
 
+	err = ufs_qcom_ice_resume(host);
+	if (err)
+		return err;
+
 	hba->is_sys_suspended = false;
 	return 0;
 }
@@ -630,7 +676,7 @@
 	}
 }
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
+static int __ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
 {
 	int err = 0;
 
@@ -661,7 +707,7 @@
 
 	vote = ufs_qcom_get_bus_vote(host, mode);
 	if (vote >= 0)
-		err = ufs_qcom_set_bus_vote(host, vote);
+		err = __ufs_qcom_set_bus_vote(host, vote);
 	else
 		err = vote;
 
@@ -672,6 +718,35 @@
 	return err;
 }
 
+static int ufs_qcom_set_bus_vote(struct ufs_hba *hba, bool on)
+{
+	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
+	int vote, err;
+
+	/*
+	 * In case ufs_qcom_init() is not yet done, simply ignore.
+	 * This ufs_qcom_set_bus_vote() shall be called from
+	 * ufs_qcom_init() after init is done.
+	 */
+	if (!host)
+		return 0;
+
+	if (on) {
+		vote = host->bus_vote.saved_vote;
+		if (vote == host->bus_vote.min_bw_vote)
+			ufs_qcom_update_bus_bw_vote(host);
+	} else {
+		vote = host->bus_vote.min_bw_vote;
+	}
+
+	err = __ufs_qcom_set_bus_vote(host, vote);
+	if (err)
+		dev_err(hba->dev, "%s: set bus vote failed %d\n",
+				 __func__, err);
+
+	return err;
+}
+
 static ssize_t
 show_ufs_to_mem_max_bus_bw(struct device *dev, struct device_attribute *attr,
 			char *buf)
@@ -748,7 +823,7 @@
 	return 0;
 }
 
-static int ufs_qcom_set_bus_vote(struct ufs_qcom_host *host, int vote)
+static int ufs_qcom_set_bus_vote(struct ufs_hba *host, bool on)
 {
 	return 0;
 }
@@ -773,11 +848,27 @@
 		/*
 		 * If we are here to disable this clock it might be immediately
 		 * after entering into hibern8 in which case we need to make
-		 * sure that device ref_clk is active at least 1us after the
+		 * sure that device ref_clk is active for specific time after
 		 * hibern8 enter.
 		 */
-		if (!enable)
-			udelay(1);
+		if (!enable) {
+			unsigned long gating_wait;
+
+			gating_wait = host->hba->dev_info.clk_gating_wait_us;
+			if (!gating_wait) {
+				udelay(1);
+			} else {
+				/*
+				 * bRefClkGatingWaitTime defines the minimum
+				 * time for which the reference clock is
+				 * required by device during transition from
+				 * HS-MODE to LS-MODE or HIBERN8 state. Give it
+				 * more delay to be on the safe side.
+				 */
+				gating_wait += 10;
+				usleep_range(gating_wait, gating_wait + 10);
+			}
+		}
 
 		writel_relaxed(temp, host->dev_ref_clk_ctrl_mmio);
 
@@ -854,6 +945,20 @@
 		if (!ufshcd_is_hs_mode(&hba->pwr_info) &&
 			ufshcd_is_hs_mode(dev_req_params))
 			ufs_qcom_dev_ref_clk_ctrl(host, true);
+
+		if (host->hw_ver.major >= 0x4) {
+			if (dev_req_params->gear_tx == UFS_HS_G4) {
+				/* INITIAL ADAPT */
+				ufshcd_dme_set(hba,
+					       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+					       PA_INITIAL_ADAPT);
+			} else {
+				/* NO ADAPT */
+				ufshcd_dme_set(hba,
+					       UIC_ARG_MIB(PA_TXHSADAPTTYPE),
+					       PA_NO_ADAPT);
+			}
+		}
 		break;
 	case POST_CHANGE:
 		if (ufs_qcom_cfg_timers(hba, dev_req_params->gear_rx,
@@ -905,14 +1010,16 @@
 	return err;
 }
 
-static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba,
-				     struct ufs_dev_desc *card)
+static int ufs_qcom_apply_dev_quirks(struct ufs_hba *hba)
 {
 	int err = 0;
 
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_SAVECONFIGTIME)
 		err = ufs_qcom_quirk_host_pa_saveconfigtime(hba);
 
+	if (hba->dev_info.wmanufacturerid == UFS_VENDOR_WDC)
+		hba->dev_quirks |= UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE;
+
 	return err;
 }
 
@@ -968,6 +1075,8 @@
 	hba->caps |= UFSHCD_CAP_CLK_GATING | UFSHCD_CAP_HIBERN8_WITH_CLK_GATING;
 	hba->caps |= UFSHCD_CAP_CLK_SCALING;
 	hba->caps |= UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
+	hba->caps |= UFSHCD_CAP_WB_EN;
+	hba->caps |= UFSHCD_CAP_CRYPTO;
 
 	if (host->hw_ver.major >= 0x2) {
 		host->caps = UFS_QCOM_CAP_QUNIPRO |
@@ -987,8 +1096,7 @@
 				 enum ufs_notify_change_status status)
 {
 	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
-	int err;
-	int vote = 0;
+	int err = 0;
 
 	/*
 	 * In case ufs_qcom_init() is not yet done, simply ignore.
@@ -998,28 +1106,28 @@
 	if (!host)
 		return 0;
 
-	if (on && (status == POST_CHANGE)) {
-		/* enable the device ref clock for HS mode*/
-		if (ufshcd_is_hs_mode(&hba->pwr_info))
-			ufs_qcom_dev_ref_clk_ctrl(host, true);
-		vote = host->bus_vote.saved_vote;
-		if (vote == host->bus_vote.min_bw_vote)
-			ufs_qcom_update_bus_bw_vote(host);
-
-	} else if (!on && (status == PRE_CHANGE)) {
-		if (!ufs_qcom_is_link_active(hba)) {
-			/* disable device ref_clk */
-			ufs_qcom_dev_ref_clk_ctrl(host, false);
+	switch (status) {
+	case PRE_CHANGE:
+		if (on) {
+			err = ufs_qcom_set_bus_vote(hba, true);
+		} else {
+			if (!ufs_qcom_is_link_active(hba)) {
+				/* disable device ref_clk */
+				ufs_qcom_dev_ref_clk_ctrl(host, false);
+			}
 		}
-
-		vote = host->bus_vote.min_bw_vote;
+		break;
+	case POST_CHANGE:
+		if (on) {
+			/* enable the device ref clock for HS mode*/
+			if (ufshcd_is_hs_mode(&hba->pwr_info))
+				ufs_qcom_dev_ref_clk_ctrl(host, true);
+		} else {
+			err = ufs_qcom_set_bus_vote(hba, false);
+		}
+		break;
 	}
 
-	err = ufs_qcom_set_bus_vote(host, vote);
-	if (err)
-		dev_err(hba->dev, "%s: set bus vote failed %d\n",
-				__func__, err);
-
 	return err;
 }
 
@@ -1102,6 +1210,15 @@
 	host->hba = hba;
 	ufshcd_set_variant(hba, host);
 
+	/* Setup the reset control of HCI */
+	host->core_reset = devm_reset_control_get(hba->dev, "rst");
+	if (IS_ERR(host->core_reset)) {
+		err = PTR_ERR(host->core_reset);
+		dev_warn(dev, "Failed to get reset control %d\n", err);
+		host->core_reset = NULL;
+		err = 0;
+	}
+
 	/* Fire up the reset controller. Failure here is non-fatal. */
 	host->rcdev.of_node = dev->of_node;
 	host->rcdev.ops = &ufs_qcom_reset_ops;
@@ -1164,7 +1281,8 @@
 		host->dev_ref_clk_en_mask = BIT(26);
 	} else {
 		/* "dev_ref_clk_ctrl_mem" is optional resource */
-		res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+		res = platform_get_resource_byname(pdev, IORESOURCE_MEM,
+						   "dev_ref_clk_ctrl_mem");
 		if (res) {
 			host->dev_ref_clk_ctrl_mmio =
 					devm_ioremap_resource(dev, res);
@@ -1186,6 +1304,11 @@
 	ufs_qcom_set_caps(hba);
 	ufs_qcom_advertise_quirks(hba);
 
+	err = ufs_qcom_ice_init(host);
+	if (err)
+		goto out_variant_clear;
+
+	ufs_qcom_set_bus_vote(hba, true);
 	ufs_qcom_setup_clocks(hba, true, POST_CHANGE);
 
 	if (hba->dev->id < MAX_UFS_QCOM_HOSTS)
@@ -1306,18 +1429,27 @@
 	int err = 0;
 
 	if (status == PRE_CHANGE) {
+		err = ufshcd_uic_hibern8_enter(hba);
+		if (err)
+			return err;
 		if (scale_up)
 			err = ufs_qcom_clk_scale_up_pre_change(hba);
 		else
 			err = ufs_qcom_clk_scale_down_pre_change(hba);
+		if (err)
+			ufshcd_uic_hibern8_exit(hba);
+
 	} else {
 		if (scale_up)
 			err = ufs_qcom_clk_scale_up_post_change(hba);
 		else
 			err = ufs_qcom_clk_scale_down_post_change(hba);
 
-		if (err || !dev_req_params)
+
+		if (err || !dev_req_params) {
+			ufshcd_uic_hibern8_exit(hba);
 			goto out;
+		}
 
 		ufs_qcom_cfg_timers(hba,
 				    dev_req_params->gear_rx,
@@ -1325,6 +1457,7 @@
 				    dev_req_params->hs_rate,
 				    false);
 		ufs_qcom_update_bus_bw_vote(host);
+		ufshcd_uic_hibern8_exit(hba);
 	}
 
 out:
@@ -1508,44 +1641,12 @@
 	return 0;
 }
 
-static void ufs_qcom_testbus_read(struct ufs_hba *hba)
-{
-	ufshcd_dump_regs(hba, UFS_TEST_BUS, 4, "UFS_TEST_BUS ");
-}
-
-static void ufs_qcom_print_unipro_testbus(struct ufs_hba *hba)
-{
-	struct ufs_qcom_host *host = ufshcd_get_variant(hba);
-	u32 *testbus = NULL;
-	int i, nminor = 256, testbus_len = nminor * sizeof(u32);
-
-	testbus = kmalloc(testbus_len, GFP_KERNEL);
-	if (!testbus)
-		return;
-
-	host->testbus.select_major = TSTBUS_UNIPRO;
-	for (i = 0; i < nminor; i++) {
-		host->testbus.select_minor = i;
-		ufs_qcom_testbus_config(host);
-		testbus[i] = ufshcd_readl(hba, UFS_TEST_BUS);
-	}
-	print_hex_dump(KERN_ERR, "UNIPRO_TEST_BUS ", DUMP_PREFIX_OFFSET,
-			16, 4, testbus, testbus_len, false);
-	kfree(testbus);
-}
-
 static void ufs_qcom_dump_dbg_regs(struct ufs_hba *hba)
 {
 	ufshcd_dump_regs(hba, REG_UFS_SYS1CLK_1US, 16 * 4,
 			 "HCI Vendor Specific Registers ");
 
-	/* sleep a bit intermittently as we are dumping too much data */
 	ufs_qcom_print_hw_debug_reg_all(hba, NULL, ufs_qcom_dump_regs_wrapper);
-	udelay(1000);
-	ufs_qcom_testbus_read(hba);
-	udelay(1000);
-	ufs_qcom_print_unipro_testbus(hba);
-	udelay(1000);
 }
 
 /**
@@ -1573,6 +1674,29 @@
 	usleep_range(10, 15);
 }
 
+#if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND)
+static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
+					  struct devfreq_dev_profile *p,
+					  void *data)
+{
+	static struct devfreq_simple_ondemand_data *d;
+
+	if (!data)
+		return;
+
+	d = (struct devfreq_simple_ondemand_data *)data;
+	p->polling_ms = 60;
+	d->upthreshold = 70;
+	d->downdifferential = 5;
+}
+#else
+static void ufs_qcom_config_scaling_param(struct ufs_hba *hba,
+					  struct devfreq_dev_profile *p,
+					  void *data)
+{
+}
+#endif
+
 /**
  * struct ufs_hba_qcom_vops - UFS QCOM specific variant operations
  *
@@ -1594,6 +1718,8 @@
 	.resume			= ufs_qcom_resume,
 	.dbg_register_dump	= ufs_qcom_dump_dbg_regs,
 	.device_reset		= ufs_qcom_device_reset,
+	.config_scaling_param = ufs_qcom_config_scaling_param,
+	.program_key		= ufs_qcom_ice_program_key,
 };
 
 /**
diff --git a/drivers/scsi/ufs/ufs-qcom.h b/drivers/scsi/ufs/ufs-qcom.h
index d401f17..97247d1 100644
--- a/drivers/scsi/ufs/ufs-qcom.h
+++ b/drivers/scsi/ufs/ufs-qcom.h
@@ -6,6 +6,7 @@
 #define UFS_QCOM_H_
 
 #include <linux/reset-controller.h>
+#include <linux/reset.h>
 
 #define MAX_UFS_QCOM_HOSTS	1
 #define MAX_U32                 (~(u32)0)
@@ -226,6 +227,9 @@
 	void __iomem *dev_ref_clk_ctrl_mmio;
 	bool is_dev_ref_clk_enabled;
 	struct ufs_hw_version hw_ver;
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	void __iomem *ice_mmio;
+#endif
 
 	u32 dev_ref_clk_en_mask;
 
@@ -233,6 +237,8 @@
 	u32 dbg_print_en;
 	struct ufs_qcom_testbus testbus;
 
+	/* Reset control of HCI */
+	struct reset_control *core_reset;
 	struct reset_controller_dev rcdev;
 
 	struct gpio_desc *device_reset;
@@ -261,4 +267,28 @@
 		return false;
 }
 
+/* ufs-qcom-ice.c */
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+int ufs_qcom_ice_init(struct ufs_qcom_host *host);
+int ufs_qcom_ice_enable(struct ufs_qcom_host *host);
+int ufs_qcom_ice_resume(struct ufs_qcom_host *host);
+int ufs_qcom_ice_program_key(struct ufs_hba *hba,
+			     const union ufs_crypto_cfg_entry *cfg, int slot);
+#else
+static inline int ufs_qcom_ice_init(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+static inline int ufs_qcom_ice_enable(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+static inline int ufs_qcom_ice_resume(struct ufs_qcom_host *host)
+{
+	return 0;
+}
+#define ufs_qcom_ice_program_key NULL
+#endif /* !CONFIG_SCSI_UFS_CRYPTO */
+
 #endif /* UFS_QCOM_H_ */
diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c
index ad2abc9..1dd5ada 100644
--- a/drivers/scsi/ufs/ufs-sysfs.c
+++ b/drivers/scsi/ufs/ufs-sysfs.c
@@ -9,6 +9,8 @@
 #include "ufs.h"
 #include "ufs-sysfs.h"
 
+#include <trace/hooks/ufshcd.h>
+
 static const char *ufschd_uic_link_state_to_string(
 			enum uic_link_state state)
 {
@@ -16,6 +18,7 @@
 	case UIC_LINK_OFF_STATE:	return "OFF";
 	case UIC_LINK_ACTIVE_STATE:	return "ACTIVE";
 	case UIC_LINK_HIBERN8_STATE:	return "HIBERN8";
+	case UIC_LINK_BROKEN_STATE:	return "BROKEN";
 	default:			return "UNKNOWN";
 	}
 }
@@ -118,26 +121,6 @@
 				ufs_pm_lvl_states[hba->spm_lvl].link_state));
 }
 
-static void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
-{
-	unsigned long flags;
-
-	if (!ufshcd_is_auto_hibern8_supported(hba))
-		return;
-
-	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (hba->ahit != ahit)
-		hba->ahit = ahit;
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
-	if (!pm_runtime_suspended(hba->dev)) {
-		pm_runtime_get_sync(hba->dev);
-		ufshcd_hold(hba, false);
-		ufshcd_auto_hibern8_enable(hba);
-		ufshcd_release(hba);
-		pm_runtime_put(hba->dev);
-	}
-}
-
 /* Convert Auto-Hibernate Idle Timer register value to microseconds */
 static int ufshcd_ahit_to_us(u32 ahit)
 {
@@ -294,6 +277,10 @@
 UFS_DEVICE_DESC_PARAM(number_of_secure_wpa, _NUM_SEC_WPA, 1);
 UFS_DEVICE_DESC_PARAM(psa_max_data_size, _PSA_MAX_DATA, 4);
 UFS_DEVICE_DESC_PARAM(psa_state_timeout, _PSA_TMT, 1);
+UFS_DEVICE_DESC_PARAM(ext_feature_sup, _EXT_UFS_FEATURE_SUP, 4);
+UFS_DEVICE_DESC_PARAM(wb_presv_us_en, _WB_PRESRV_USRSPC_EN, 1);
+UFS_DEVICE_DESC_PARAM(wb_type, _WB_TYPE, 1);
+UFS_DEVICE_DESC_PARAM(wb_shared_alloc_units, _WB_SHARED_ALLOC_UNITS, 4);
 
 static struct attribute *ufs_sysfs_device_descriptor[] = {
 	&dev_attr_device_type.attr,
@@ -322,6 +309,10 @@
 	&dev_attr_number_of_secure_wpa.attr,
 	&dev_attr_psa_max_data_size.attr,
 	&dev_attr_psa_state_timeout.attr,
+	&dev_attr_ext_feature_sup.attr,
+	&dev_attr_wb_presv_us_en.attr,
+	&dev_attr_wb_type.attr,
+	&dev_attr_wb_shared_alloc_units.attr,
 	NULL,
 };
 
@@ -391,6 +382,12 @@
 	_ENM4_MAX_NUM_UNITS, 4);
 UFS_GEOMETRY_DESC_PARAM(enh4_memory_capacity_adjustment_factor,
 	_ENM4_CAP_ADJ_FCTR, 2);
+UFS_GEOMETRY_DESC_PARAM(wb_max_alloc_units, _WB_MAX_ALLOC_UNITS, 4);
+UFS_GEOMETRY_DESC_PARAM(wb_max_wb_luns, _WB_MAX_WB_LUNS, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_buff_cap_adj, _WB_BUFF_CAP_ADJ, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_sup_red_type, _WB_SUP_RED_TYPE, 1);
+UFS_GEOMETRY_DESC_PARAM(wb_sup_wb_type, _WB_SUP_WB_TYPE, 1);
+
 
 static struct attribute *ufs_sysfs_geometry_descriptor[] = {
 	&dev_attr_raw_device_capacity.attr,
@@ -422,6 +419,11 @@
 	&dev_attr_enh3_memory_capacity_adjustment_factor.attr,
 	&dev_attr_enh4_memory_max_alloc_units.attr,
 	&dev_attr_enh4_memory_capacity_adjustment_factor.attr,
+	&dev_attr_wb_max_alloc_units.attr,
+	&dev_attr_wb_max_wb_luns.attr,
+	&dev_attr_wb_buff_cap_adj.attr,
+	&dev_attr_wb_sup_red_type.attr,
+	&dev_attr_wb_sup_wb_type.attr,
 	NULL,
 };
 
@@ -619,16 +621,25 @@
 	.attrs = ufs_sysfs_string_descriptors,
 };
 
+static inline bool ufshcd_is_wb_flags(enum flag_idn idn)
+{
+	return ((idn >= QUERY_FLAG_IDN_WB_EN) &&
+		(idn <= QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8));
+}
+
 #define UFS_FLAG(_name, _uname)						\
 static ssize_t _name##_show(struct device *dev,				\
 	struct device_attribute *attr, char *buf)			\
 {									\
 	bool flag;							\
+	u8 index = 0;							\
 	struct ufs_hba *hba = dev_get_drvdata(dev);			\
+	if (ufshcd_is_wb_flags(QUERY_FLAG_IDN##_uname))			\
+		index = ufshcd_wb_get_query_index(hba);			\
 	if (ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG,		\
-		QUERY_FLAG_IDN##_uname, &flag))				\
+		QUERY_FLAG_IDN##_uname, index, &flag))			\
 		return -EINVAL;						\
-	return sprintf(buf, "%s\n", flag ? "true" : "false");		\
+	return sprintf(buf, "%s\n", flag ? "true" : "false"); \
 }									\
 static DEVICE_ATTR_RO(_name)
 
@@ -640,6 +651,9 @@
 UFS_FLAG(phy_resource_removal, _FPHYRESOURCEREMOVAL);
 UFS_FLAG(busy_rtc, _BUSY_RTC);
 UFS_FLAG(disable_fw_update, _PERMANENTLY_DISABLE_FW_UPDATE);
+UFS_FLAG(wb_enable, _WB_EN);
+UFS_FLAG(wb_flush_en, _WB_BUFF_FLUSH_EN);
+UFS_FLAG(wb_flush_during_h8, _WB_BUFF_FLUSH_DURING_HIBERN8);
 
 static struct attribute *ufs_sysfs_device_flags[] = {
 	&dev_attr_device_init.attr,
@@ -650,6 +664,9 @@
 	&dev_attr_phy_resource_removal.attr,
 	&dev_attr_busy_rtc.attr,
 	&dev_attr_disable_fw_update.attr,
+	&dev_attr_wb_enable.attr,
+	&dev_attr_wb_flush_en.attr,
+	&dev_attr_wb_flush_during_h8.attr,
 	NULL,
 };
 
@@ -658,14 +675,23 @@
 	.attrs = ufs_sysfs_device_flags,
 };
 
+static inline bool ufshcd_is_wb_attrs(enum attr_idn idn)
+{
+	return ((idn >= QUERY_ATTR_IDN_WB_FLUSH_STATUS) &&
+		(idn <= QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE));
+}
+
 #define UFS_ATTRIBUTE(_name, _uname)					\
 static ssize_t _name##_show(struct device *dev,				\
 	struct device_attribute *attr, char *buf)			\
 {									\
 	struct ufs_hba *hba = dev_get_drvdata(dev);			\
 	u32 value;							\
+	u8 index = 0;							\
+	if (ufshcd_is_wb_attrs(QUERY_ATTR_IDN##_uname))			\
+		index = ufshcd_wb_get_query_index(hba);			\
 	if (ufshcd_query_attr(hba, UPIU_QUERY_OPCODE_READ_ATTR,		\
-		QUERY_ATTR_IDN##_uname, 0, 0, &value))			\
+		QUERY_ATTR_IDN##_uname, index, 0, &value))		\
 		return -EINVAL;						\
 	return sprintf(buf, "0x%08X\n", value);				\
 }									\
@@ -687,6 +713,11 @@
 UFS_ATTRIBUTE(ffu_status, _FFU_STATUS);
 UFS_ATTRIBUTE(psa_state, _PSA_STATE);
 UFS_ATTRIBUTE(psa_data_size, _PSA_DATA_SIZE);
+UFS_ATTRIBUTE(wb_flush_status, _WB_FLUSH_STATUS);
+UFS_ATTRIBUTE(wb_avail_buf, _AVAIL_WB_BUFF_SIZE);
+UFS_ATTRIBUTE(wb_life_time_est, _WB_BUFF_LIFE_TIME_EST);
+UFS_ATTRIBUTE(wb_cur_buf, _CURR_WB_BUFF_SIZE);
+
 
 static struct attribute *ufs_sysfs_attributes[] = {
 	&dev_attr_boot_lun_enabled.attr,
@@ -705,6 +736,10 @@
 	&dev_attr_ffu_status.attr,
 	&dev_attr_psa_state.attr,
 	&dev_attr_psa_data_size.attr,
+	&dev_attr_wb_flush_status.attr,
+	&dev_attr_wb_avail_buf.attr,
+	&dev_attr_wb_life_time_est.attr,
+	&dev_attr_wb_cur_buf.attr,
 	NULL,
 };
 
@@ -756,6 +791,8 @@
 UFS_UNIT_DESC_PARAM(physical_memory_resourse_count, _PHY_MEM_RSRC_CNT, 8);
 UFS_UNIT_DESC_PARAM(context_capabilities, _CTX_CAPABILITIES, 2);
 UFS_UNIT_DESC_PARAM(large_unit_granularity, _LARGE_UNIT_SIZE_M1, 1);
+UFS_UNIT_DESC_PARAM(wb_buf_alloc_units, _WB_BUF_ALLOC_UNITS, 4);
+
 
 static struct attribute *ufs_sysfs_unit_descriptor[] = {
 	&dev_attr_boot_lun_id.attr,
@@ -771,6 +808,7 @@
 	&dev_attr_physical_memory_resourse_count.attr,
 	&dev_attr_context_capabilities.attr,
 	&dev_attr_large_unit_granularity.attr,
+	&dev_attr_wb_buf_alloc_units.attr,
 	NULL,
 };
 
@@ -803,15 +841,19 @@
 	.attrs = ufs_sysfs_lun_attributes,
 };
 
-void ufs_sysfs_add_nodes(struct device *dev)
+void ufs_sysfs_add_nodes(struct ufs_hba *hba)
 {
 	int ret;
 
-	ret = sysfs_create_groups(&dev->kobj, ufs_sysfs_groups);
-	if (ret)
-		dev_err(dev,
+	ret = sysfs_create_groups(&hba->dev->kobj, ufs_sysfs_groups);
+	if (ret) {
+		dev_err(hba->dev,
 			"%s: sysfs groups creation failed (err = %d)\n",
 			__func__, ret);
+		return;
+	}
+
+	trace_android_vh_ufs_update_sysfs(hba);
 }
 
 void ufs_sysfs_remove_nodes(struct device *dev)
diff --git a/drivers/scsi/ufs/ufs-sysfs.h b/drivers/scsi/ufs/ufs-sysfs.h
index e5621e5..1c10e5a 100644
--- a/drivers/scsi/ufs/ufs-sysfs.h
+++ b/drivers/scsi/ufs/ufs-sysfs.h
@@ -9,7 +9,7 @@
 
 #include "ufshcd.h"
 
-void ufs_sysfs_add_nodes(struct device *dev);
+void ufs_sysfs_add_nodes(struct ufs_hba *hba);
 void ufs_sysfs_remove_nodes(struct device *dev);
 
 extern const struct attribute_group ufs_sysfs_unit_descriptor_group;
diff --git a/drivers/scsi/ufs/ufs.h b/drivers/scsi/ufs/ufs.h
index 3327981..f6a7b4c 100644
--- a/drivers/scsi/ufs/ufs.h
+++ b/drivers/scsi/ufs/ufs.h
@@ -38,6 +38,7 @@
 
 #include <linux/mutex.h>
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 #include <uapi/scsi/scsi_bsg_ufs.h>
 
 #define GENERAL_UPIU_REQUEST_SIZE (sizeof(struct utp_upiu_req))
@@ -65,6 +66,9 @@
 #define UFS_UPIU_WLUN_ID	(1 << 7)
 #define UFS_UPIU_MAX_GENERAL_LUN	8
 
+/* WriteBooster buffer is available only for the logical unit from 0 to 7 */
+#define UFS_UPIU_MAX_WB_LUN_ID	8
+
 /* Well known logical unit id in LUN field of UPIU */
 enum {
 	UFS_UPIU_REPORT_LUNS_WLUN	= 0x81,
@@ -141,6 +145,9 @@
 	QUERY_FLAG_IDN_BUSY_RTC				= 0x09,
 	QUERY_FLAG_IDN_RESERVED3			= 0x0A,
 	QUERY_FLAG_IDN_PERMANENTLY_DISABLE_FW_UPDATE	= 0x0B,
+	QUERY_FLAG_IDN_WB_EN                            = 0x0E,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN                 = 0x0F,
+	QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8     = 0x10,
 };
 
 /* Attribute idn for Query requests */
@@ -168,6 +175,11 @@
 	QUERY_ATTR_IDN_FFU_STATUS		= 0x14,
 	QUERY_ATTR_IDN_PSA_STATE		= 0x15,
 	QUERY_ATTR_IDN_PSA_DATA_SIZE		= 0x16,
+	QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME	= 0x17,
+	QUERY_ATTR_IDN_WB_FLUSH_STATUS	        = 0x1C,
+	QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE       = 0x1D,
+	QUERY_ATTR_IDN_WB_BUFF_LIFE_TIME_EST    = 0x1E,
+	QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE        = 0x1F,
 };
 
 /* Descriptor idn for Query requests */
@@ -191,9 +203,9 @@
 };
 
 enum ufs_desc_def_size {
-	QUERY_DESC_DEVICE_DEF_SIZE		= 0x40,
+	QUERY_DESC_DEVICE_DEF_SIZE		= 0x59,
 	QUERY_DESC_CONFIGURATION_DEF_SIZE	= 0x90,
-	QUERY_DESC_UNIT_DEF_SIZE		= 0x23,
+	QUERY_DESC_UNIT_DEF_SIZE		= 0x2D,
 	QUERY_DESC_INTERCONNECT_DEF_SIZE	= 0x06,
 	QUERY_DESC_GEOMETRY_DEF_SIZE		= 0x48,
 	QUERY_DESC_POWER_DEF_SIZE		= 0x62,
@@ -219,6 +231,7 @@
 	UNIT_DESC_PARAM_PHY_MEM_RSRC_CNT	= 0x18,
 	UNIT_DESC_PARAM_CTX_CAPABILITIES	= 0x20,
 	UNIT_DESC_PARAM_LARGE_UNIT_SIZE_M1	= 0x22,
+	UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS	= 0x29,
 };
 
 /* Device descriptor parameters offsets in bytes*/
@@ -258,6 +271,10 @@
 	DEVICE_DESC_PARAM_PSA_MAX_DATA		= 0x25,
 	DEVICE_DESC_PARAM_PSA_TMT		= 0x29,
 	DEVICE_DESC_PARAM_PRDCT_REV		= 0x2A,
+	DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP	= 0x4F,
+	DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN	= 0x53,
+	DEVICE_DESC_PARAM_WB_TYPE		= 0x54,
+	DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS = 0x55,
 };
 
 /* Interconnect descriptor parameters offsets in bytes*/
@@ -302,6 +319,11 @@
 	GEOMETRY_DESC_PARAM_ENM4_MAX_NUM_UNITS	= 0x3E,
 	GEOMETRY_DESC_PARAM_ENM4_CAP_ADJ_FCTR	= 0x42,
 	GEOMETRY_DESC_PARAM_OPT_LOG_BLK_SIZE	= 0x44,
+	GEOMETRY_DESC_PARAM_WB_MAX_ALLOC_UNITS	= 0x4F,
+	GEOMETRY_DESC_PARAM_WB_MAX_WB_LUNS	= 0x53,
+	GEOMETRY_DESC_PARAM_WB_BUFF_CAP_ADJ	= 0x54,
+	GEOMETRY_DESC_PARAM_WB_SUP_RED_TYPE	= 0x55,
+	GEOMETRY_DESC_PARAM_WB_SUP_WB_TYPE	= 0x56,
 };
 
 /* Health descriptor parameters offsets in bytes*/
@@ -313,6 +335,12 @@
 	HEALTH_DESC_PARAM_LIFE_TIME_EST_B	= 0x4,
 };
 
+/* WriteBooster buffer mode */
+enum {
+	WB_BUF_MODE_LU_DEDICATED	= 0x0,
+	WB_BUF_MODE_SHARED		= 0x1,
+};
+
 /*
  * Logical Unit Write Protect
  * 00h: LU not write protected
@@ -333,6 +361,11 @@
 	UFSHCD_AMP		= 3,
 };
 
+/* Possible values for dExtendedUFSFeaturesSupport */
+enum {
+	UFS_DEV_WRITE_BOOSTER_SUP	= BIT(8),
+};
+
 #define POWER_DESC_MAX_SIZE			0x62
 #define POWER_DESC_MAX_ACTV_ICC_LVLS		16
 
@@ -447,6 +480,8 @@
 	UFS_POWERDOWN_PWR_MODE	= 3,
 };
 
+#define UFS_WB_BUF_REMAIN_PERCENT(val) ((val) / 10)
+
 /**
  * struct utp_cmd_rsp - Response UPIU structure
  * @residual_transfer_count: Residual transfer count DW-3
@@ -499,9 +534,9 @@
 #define UFS_VREG_VCC_MAX_UV	   3600000 /* uV */
 #define UFS_VREG_VCC_1P8_MIN_UV    1700000 /* uV */
 #define UFS_VREG_VCC_1P8_MAX_UV    1950000 /* uV */
-#define UFS_VREG_VCCQ_MIN_UV	   1100000 /* uV */
-#define UFS_VREG_VCCQ_MAX_UV	   1300000 /* uV */
-#define UFS_VREG_VCCQ2_MIN_UV	   1650000 /* uV */
+#define UFS_VREG_VCCQ_MIN_UV	   1140000 /* uV */
+#define UFS_VREG_VCCQ_MAX_UV	   1260000 /* uV */
+#define UFS_VREG_VCCQ2_MIN_UV	   1700000 /* uV */
 #define UFS_VREG_VCCQ2_MAX_UV	   1950000 /* uV */
 
 /*
@@ -530,18 +565,20 @@
 	bool f_power_on_wp_en;
 	/* Keeps information if any of the LU is power on write protected */
 	bool is_lu_power_on_wp;
-};
-
-#define MAX_MODEL_LEN 16
-/**
- * ufs_dev_desc - ufs device details from the device descriptor
- *
- * @wmanufacturerid: card details
- * @model: card model
- */
-struct ufs_dev_desc {
+	/* Maximum number of general LU supported by the UFS device */
+	u8 max_lu_supported;
+	u8 wb_dedicated_lu;
 	u16 wmanufacturerid;
+	/*UFS device Product Name */
 	u8 *model;
+	u16 wspecversion;
+	u32 clk_gating_wait_us;
+	u32 d_ext_ufs_feature_sup;
+	u8 b_wb_buffer_type;
+	u32 d_wb_alloc_units;
+	bool b_rpm_dev_flush_capable;
+	u8 b_presrv_uspc_en;
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
diff --git a/drivers/scsi/ufs/ufs_quirks.h b/drivers/scsi/ufs/ufs_quirks.h
index 0398591..ce578f8 100644
--- a/drivers/scsi/ufs/ufs_quirks.h
+++ b/drivers/scsi/ufs/ufs_quirks.h
@@ -16,6 +16,7 @@
 #define UFS_VENDOR_TOSHIBA     0x198
 #define UFS_VENDOR_SAMSUNG     0x1CE
 #define UFS_VENDOR_SKHYNIX     0x1AD
+#define UFS_VENDOR_WDC         0x145
 
 /**
  * ufs_dev_fix - ufs device quirk info
@@ -23,16 +24,17 @@
  * @quirk: device quirk
  */
 struct ufs_dev_fix {
-	struct ufs_dev_desc card;
+	u16 wmanufacturerid;
+	u8 *model;
 	unsigned int quirk;
 };
 
-#define END_FIX { { 0 }, 0 }
+#define END_FIX { }
 
 /* add specific device quirk */
 #define UFS_FIX(_vendor, _model, _quirk) { \
-	.card.wmanufacturerid = (_vendor),\
-	.card.model = (_model),		   \
+	.wmanufacturerid = (_vendor),\
+	.model = (_model),		   \
 	.quirk = (_quirk),		   \
 }
 
@@ -100,4 +102,18 @@
  */
 #define UFS_DEVICE_QUIRK_HOST_VS_DEBUGSAVECONFIGTIME	(1 << 9)
 
+/*
+ * Some pre-3.1 UFS devices can support extended features by upgrading
+ * the firmware. Enable this quirk to make UFS core driver probe and enable
+ * supported features on such devices.
+ */
+#define UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES (1 << 10)
+
+/*
+ * Some UFS devices require delay after VCC power rail is turned-off.
+ * Enable this quirk to introduce 5ms delays after VCC power-off during
+ * suspend flow.
+ */
+#define UFS_DEVICE_QUIRK_DELAY_AFTER_LPM        (1 << 11)
+
 #endif /* UFS_QUIRKS_H_ */
diff --git a/drivers/scsi/ufs/ufshcd-crypto.c b/drivers/scsi/ufs/ufshcd-crypto.c
new file mode 100644
index 0000000..734dd09
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.c
@@ -0,0 +1,249 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#include "ufshcd.h"
+#include "ufshcd-crypto.h"
+
+/* Blk-crypto modes supported by UFS crypto */
+static const struct ufs_crypto_alg_entry {
+	enum ufs_crypto_alg ufs_alg;
+	enum ufs_crypto_key_size ufs_key_size;
+} ufs_crypto_algs[BLK_ENCRYPTION_MODE_MAX] = {
+	[BLK_ENCRYPTION_MODE_AES_256_XTS] = {
+		.ufs_alg = UFS_CRYPTO_ALG_AES_XTS,
+		.ufs_key_size = UFS_CRYPTO_KEY_SIZE_256,
+	},
+};
+
+static int ufshcd_program_key(struct ufs_hba *hba,
+			      const union ufs_crypto_cfg_entry *cfg, int slot)
+{
+	int i;
+	u32 slot_offset = hba->crypto_cfg_register + slot * sizeof(*cfg);
+	int err = 0;
+
+	ufshcd_hold(hba, false);
+
+	if (hba->vops && hba->vops->program_key) {
+		err = hba->vops->program_key(hba, cfg, slot);
+		goto out;
+	}
+
+	/* Ensure that CFGE is cleared before programming the key */
+	ufshcd_writel(hba, 0, slot_offset + 16 * sizeof(cfg->reg_val[0]));
+	for (i = 0; i < 16; i++) {
+		ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[i]),
+			      slot_offset + i * sizeof(cfg->reg_val[0]));
+	}
+	/* Write dword 17 */
+	ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[17]),
+		      slot_offset + 17 * sizeof(cfg->reg_val[0]));
+	/* Dword 16 must be written last */
+	ufshcd_writel(hba, le32_to_cpu(cfg->reg_val[16]),
+		      slot_offset + 16 * sizeof(cfg->reg_val[0]));
+out:
+	ufshcd_release(hba);
+	return err;
+}
+
+static int ufshcd_crypto_keyslot_program(struct blk_keyslot_manager *ksm,
+					 const struct blk_crypto_key *key,
+					 unsigned int slot)
+{
+	struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
+	const union ufs_crypto_cap_entry *ccap_array = hba->crypto_cap_array;
+	const struct ufs_crypto_alg_entry *alg =
+			&ufs_crypto_algs[key->crypto_cfg.crypto_mode];
+	u8 data_unit_mask = key->crypto_cfg.data_unit_size / 512;
+	int i;
+	int cap_idx = -1;
+	union ufs_crypto_cfg_entry cfg = {};
+	int err;
+
+	BUILD_BUG_ON(UFS_CRYPTO_KEY_SIZE_INVALID != 0);
+	for (i = 0; i < hba->crypto_capabilities.num_crypto_cap; i++) {
+		if (ccap_array[i].algorithm_id == alg->ufs_alg &&
+		    ccap_array[i].key_size == alg->ufs_key_size &&
+		    (ccap_array[i].sdus_mask & data_unit_mask)) {
+			cap_idx = i;
+			break;
+		}
+	}
+
+	if (WARN_ON(cap_idx < 0))
+		return -EOPNOTSUPP;
+
+	cfg.data_unit_size = data_unit_mask;
+	cfg.crypto_cap_idx = cap_idx;
+	cfg.config_enable = UFS_CRYPTO_CONFIGURATION_ENABLE;
+
+	if (ccap_array[cap_idx].algorithm_id == UFS_CRYPTO_ALG_AES_XTS) {
+		/* In XTS mode, the blk_crypto_key's size is already doubled */
+		memcpy(cfg.crypto_key, key->raw, key->size/2);
+		memcpy(cfg.crypto_key + UFS_CRYPTO_KEY_MAX_SIZE/2,
+		       key->raw + key->size/2, key->size/2);
+	} else {
+		memcpy(cfg.crypto_key, key->raw, key->size);
+	}
+
+	err = ufshcd_program_key(hba, &cfg, slot);
+
+	memzero_explicit(&cfg, sizeof(cfg));
+	return err;
+}
+
+static int ufshcd_clear_keyslot(struct ufs_hba *hba, int slot)
+{
+	/*
+	 * Clear the crypto cfg on the device. Clearing CFGE
+	 * might not be sufficient, so just clear the entire cfg.
+	 */
+	union ufs_crypto_cfg_entry cfg = {};
+
+	return ufshcd_program_key(hba, &cfg, slot);
+}
+
+static int ufshcd_crypto_keyslot_evict(struct blk_keyslot_manager *ksm,
+				       const struct blk_crypto_key *key,
+				       unsigned int slot)
+{
+	struct ufs_hba *hba = container_of(ksm, struct ufs_hba, ksm);
+
+	return ufshcd_clear_keyslot(hba, slot);
+}
+
+bool ufshcd_crypto_enable(struct ufs_hba *hba)
+{
+	if (!(hba->caps & UFSHCD_CAP_CRYPTO))
+		return false;
+
+	/* Reset might clear all keys, so reprogram all the keys. */
+	if (hba->ksm.num_slots)
+		blk_ksm_reprogram_all_keys(&hba->ksm);
+
+	if (hba->quirks & UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE)
+		return false;
+
+	return true;
+}
+
+static const struct blk_ksm_ll_ops ufshcd_ksm_ops = {
+	.keyslot_program	= ufshcd_crypto_keyslot_program,
+	.keyslot_evict		= ufshcd_crypto_keyslot_evict,
+};
+
+static enum blk_crypto_mode_num
+ufshcd_find_blk_crypto_mode(union ufs_crypto_cap_entry cap)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(ufs_crypto_algs); i++) {
+		BUILD_BUG_ON(UFS_CRYPTO_KEY_SIZE_INVALID != 0);
+		if (ufs_crypto_algs[i].ufs_alg == cap.algorithm_id &&
+		    ufs_crypto_algs[i].ufs_key_size == cap.key_size) {
+			return i;
+		}
+	}
+	return BLK_ENCRYPTION_MODE_INVALID;
+}
+
+/**
+ * ufshcd_hba_init_crypto_capabilities - Read crypto capabilities, init crypto
+ *					 fields in hba
+ * @hba: Per adapter instance
+ *
+ * Return: 0 if crypto was initialized or is not supported, else a -errno value.
+ */
+int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
+{
+	int cap_idx;
+	int err = 0;
+	enum blk_crypto_mode_num blk_mode_num;
+
+	if (hba->quirks & UFSHCD_QUIRK_CUSTOM_KEYSLOT_MANAGER)
+		return 0;
+
+	/*
+	 * Don't use crypto if either the hardware doesn't advertise the
+	 * standard crypto capability bit *or* if the vendor specific driver
+	 * hasn't advertised that crypto is supported.
+	 */
+	if (!(hba->capabilities & MASK_CRYPTO_SUPPORT) ||
+	    !(hba->caps & UFSHCD_CAP_CRYPTO))
+		goto out;
+
+	hba->crypto_capabilities.reg_val =
+			cpu_to_le32(ufshcd_readl(hba, REG_UFS_CCAP));
+	hba->crypto_cfg_register =
+		(u32)hba->crypto_capabilities.config_array_ptr * 0x100;
+	hba->crypto_cap_array =
+		devm_kcalloc(hba->dev, hba->crypto_capabilities.num_crypto_cap,
+			     sizeof(hba->crypto_cap_array[0]), GFP_KERNEL);
+	if (!hba->crypto_cap_array) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	/* The actual number of configurations supported is (CFGC+1) */
+	err = devm_blk_ksm_init(hba->dev, &hba->ksm,
+				hba->crypto_capabilities.config_count + 1);
+	if (err)
+		goto out_free_caps;
+
+	hba->ksm.ksm_ll_ops = ufshcd_ksm_ops;
+	/* UFS only supports 8 bytes for any DUN */
+	hba->ksm.max_dun_bytes_supported = 8;
+	hba->ksm.features = BLK_CRYPTO_FEATURE_STANDARD_KEYS;
+	hba->ksm.dev = hba->dev;
+
+	/*
+	 * Cache all the UFS crypto capabilities and advertise the supported
+	 * crypto modes and data unit sizes to the block layer.
+	 */
+	for (cap_idx = 0; cap_idx < hba->crypto_capabilities.num_crypto_cap;
+	     cap_idx++) {
+		hba->crypto_cap_array[cap_idx].reg_val =
+			cpu_to_le32(ufshcd_readl(hba,
+						 REG_UFS_CRYPTOCAP +
+						 cap_idx * sizeof(__le32)));
+		blk_mode_num = ufshcd_find_blk_crypto_mode(
+						hba->crypto_cap_array[cap_idx]);
+		if (blk_mode_num != BLK_ENCRYPTION_MODE_INVALID)
+			hba->ksm.crypto_modes_supported[blk_mode_num] |=
+				hba->crypto_cap_array[cap_idx].sdus_mask * 512;
+	}
+
+	return 0;
+
+out_free_caps:
+	devm_kfree(hba->dev, hba->crypto_cap_array);
+out:
+	/* Indicate that init failed by clearing UFSHCD_CAP_CRYPTO */
+	hba->caps &= ~UFSHCD_CAP_CRYPTO;
+	return err;
+}
+
+/**
+ * ufshcd_init_crypto - Initialize crypto hardware
+ * @hba: Per adapter instance
+ */
+void ufshcd_init_crypto(struct ufs_hba *hba)
+{
+	int slot;
+
+	if (!(hba->caps & UFSHCD_CAP_CRYPTO))
+		return;
+
+	/* Clear all keyslots */
+	for (slot = 0; slot < hba->ksm.num_slots; slot++)
+		hba->ksm.ksm_ll_ops.keyslot_evict(&hba->ksm, NULL, slot);
+}
+
+void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+					    struct request_queue *q)
+{
+	if (hba->caps & UFSHCD_CAP_CRYPTO)
+		blk_ksm_register(&hba->ksm, q);
+}
diff --git a/drivers/scsi/ufs/ufshcd-crypto.h b/drivers/scsi/ufs/ufshcd-crypto.h
new file mode 100644
index 0000000..83b0e50
--- /dev/null
+++ b/drivers/scsi/ufs/ufshcd-crypto.h
@@ -0,0 +1,88 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef _UFSHCD_CRYPTO_H
+#define _UFSHCD_CRYPTO_H
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+#include "ufshcd.h"
+#include "ufshci.h"
+
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+					      struct ufshcd_lrb *lrbp)
+{
+	if (!rq || !rq->crypt_keyslot) {
+		lrbp->crypto_key_slot = -1;
+		return;
+	}
+
+	lrbp->crypto_key_slot = blk_ksm_get_slot_idx(rq->crypt_keyslot);
+	lrbp->data_unit_num = rq->crypt_ctx->bc_dun[0];
+}
+
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+				   u32 *dword_1, u32 *dword_3)
+{
+	if (lrbp->crypto_key_slot >= 0) {
+		*dword_0 |= UTP_REQ_DESC_CRYPTO_ENABLE_CMD;
+		*dword_0 |= lrbp->crypto_key_slot;
+		*dword_1 = lower_32_bits(lrbp->data_unit_num);
+		*dword_3 = upper_32_bits(lrbp->data_unit_num);
+	}
+}
+
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+					    struct ufshcd_lrb *lrbp)
+{
+	if (!(hba->quirks & UFSHCD_QUIRK_KEYS_IN_PRDT))
+		return;
+
+	if (!lrbp->cmd->request->crypt_ctx)
+		return;
+
+	memzero_explicit(lrbp->ucd_prdt_ptr,
+			 hba->sg_entry_size * scsi_sg_count(lrbp->cmd));
+}
+
+bool ufshcd_crypto_enable(struct ufs_hba *hba);
+
+int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba);
+
+void ufshcd_init_crypto(struct ufs_hba *hba);
+
+void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+					    struct request_queue *q);
+
+#else /* CONFIG_SCSI_UFS_CRYPTO */
+
+static inline void ufshcd_prepare_lrbp_crypto(struct request *rq,
+					      struct ufshcd_lrb *lrbp) { }
+
+static inline void
+ufshcd_prepare_req_desc_hdr_crypto(struct ufshcd_lrb *lrbp, u32 *dword_0,
+				   u32 *dword_1, u32 *dword_3) { }
+
+static inline void ufshcd_crypto_clear_prdt(struct ufs_hba *hba,
+					    struct ufshcd_lrb *lrbp) { }
+
+static inline bool ufshcd_crypto_enable(struct ufs_hba *hba)
+{
+	return false;
+}
+
+static inline int ufshcd_hba_init_crypto_capabilities(struct ufs_hba *hba)
+{
+	return 0;
+}
+
+static inline void ufshcd_init_crypto(struct ufs_hba *hba) { }
+
+static inline void ufshcd_crypto_setup_rq_keyslot_manager(struct ufs_hba *hba,
+						struct request_queue *q) { }
+
+#endif /* CONFIG_SCSI_UFS_CRYPTO */
+
+#endif /* _UFSHCD_CRYPTO_H */
diff --git a/drivers/scsi/ufs/ufshcd-pci.c b/drivers/scsi/ufs/ufshcd-pci.c
index e4ba244..84e6647 100644
--- a/drivers/scsi/ufs/ufshcd-pci.c
+++ b/drivers/scsi/ufs/ufshcd-pci.c
@@ -44,7 +44,7 @@
 
 	ufshcd_dme_get(hba, attr, &lcc_enable);
 	if (lcc_enable)
-		ufshcd_dme_set(hba, attr, 0);
+		ufshcd_disable_host_tx_lcc(hba);
 
 	return 0;
 }
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 29c7a76..a033c22 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -42,15 +42,22 @@
 #include <linux/nls.h>
 #include <linux/of.h>
 #include <linux/bitfield.h>
+#include <linux/blk-pm.h>
+#include <asm/unaligned.h>
+#include <linux/blkdev.h>
 #include "ufshcd.h"
 #include "ufs_quirks.h"
 #include "unipro.h"
 #include "ufs-sysfs.h"
 #include "ufs_bsg.h"
+#include "ufshcd-crypto.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/ufs.h>
 
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/ufshcd.h>
+
 #define UFSHCD_ENABLE_INTRS	(UTP_TRANSFER_REQ_COMPL |\
 				 UTP_TASK_REQ_COMPL |\
 				 UFSHCD_ERROR_MASK)
@@ -88,6 +95,18 @@
 /* Interrupt aggregation default timeout, unit: 40us */
 #define INT_AGGR_DEF_TO	0x02
 
+/* default delay of autosuspend: 2000 ms */
+#define RPM_AUTOSUSPEND_DELAY_MS 2000
+
+/* Default delay of RPM device flush delayed work */
+#define RPM_DEV_FLUSH_RECHECK_WORK_DELAY_MS 5000
+
+/* Default value of wait time before gating device ref clock */
+#define UFSHCD_REF_CLK_GATING_WAIT_US 0xFF /* microsecs */
+
+/* Polling time to wait for fDeviceInit  */
+#define FDEVICEINIT_COMPL_TIMEOUT 1500 /* millisecs */
+
 #define ufshcd_toggle_vreg(_dev, _vreg, _on)				\
 	({                                                              \
 		int _ret;                                               \
@@ -114,7 +133,7 @@
 	if (offset % 4 != 0 || len % 4 != 0) /* keep readl happy */
 		return -EINVAL;
 
-	regs = kzalloc(len, GFP_KERNEL);
+	regs = kzalloc(len, GFP_ATOMIC);
 	if (!regs)
 		return -ENOMEM;
 
@@ -140,7 +159,8 @@
 	UFSHCD_STATE_RESET,
 	UFSHCD_STATE_ERROR,
 	UFSHCD_STATE_OPERATIONAL,
-	UFSHCD_STATE_EH_SCHEDULED,
+	UFSHCD_STATE_EH_SCHEDULED_FATAL,
+	UFSHCD_STATE_EH_SCHEDULED_NON_FATAL,
 };
 
 /* UFSHCD error handling flags */
@@ -156,6 +176,7 @@
 	UFSHCD_UIC_NL_ERROR = (1 << 3), /* Network layer error */
 	UFSHCD_UIC_TL_ERROR = (1 << 4), /* Transport Layer error */
 	UFSHCD_UIC_DME_ERROR = (1 << 5), /* DME error */
+	UFSHCD_UIC_PA_GENERIC_ERROR = (1 << 6), /* Generic PA error */
 };
 
 #define ufshcd_set_eh_in_progress(h) \
@@ -165,19 +186,6 @@
 #define ufshcd_clear_eh_in_progress(h) \
 	((h)->eh_flags &= ~UFSHCD_EH_IN_PROGRESS)
 
-#define ufshcd_set_ufs_dev_active(h) \
-	((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE)
-#define ufshcd_set_ufs_dev_sleep(h) \
-	((h)->curr_dev_pwr_mode = UFS_SLEEP_PWR_MODE)
-#define ufshcd_set_ufs_dev_poweroff(h) \
-	((h)->curr_dev_pwr_mode = UFS_POWERDOWN_PWR_MODE)
-#define ufshcd_is_ufs_dev_active(h) \
-	((h)->curr_dev_pwr_mode == UFS_ACTIVE_PWR_MODE)
-#define ufshcd_is_ufs_dev_sleep(h) \
-	((h)->curr_dev_pwr_mode == UFS_SLEEP_PWR_MODE)
-#define ufshcd_is_ufs_dev_poweroff(h) \
-	((h)->curr_dev_pwr_mode == UFS_POWERDOWN_PWR_MODE)
-
 struct ufs_pm_lvl_states ufs_pm_lvl_states[] = {
 	{UFS_ACTIVE_PWR_MODE, UIC_LINK_ACTIVE_STATE},
 	{UFS_ACTIVE_PWR_MODE, UIC_LINK_HIBERN8_STATE},
@@ -245,12 +253,10 @@
 static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd);
 static int ufshcd_clear_tm_cmd(struct ufs_hba *hba, int tag);
 static void ufshcd_hba_exit(struct ufs_hba *hba);
-static int ufshcd_probe_hba(struct ufs_hba *hba);
+static int ufshcd_probe_hba(struct ufs_hba *hba, bool async);
 static int __ufshcd_setup_clocks(struct ufs_hba *hba, bool on,
 				 bool skip_ref_clk);
 static int ufshcd_setup_clocks(struct ufs_hba *hba, bool on);
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
 static inline void ufshcd_add_delay_before_dme_cmd(struct ufs_hba *hba);
 static int ufshcd_host_reset_and_restore(struct ufs_hba *hba);
 static void ufshcd_resume_clkscaling(struct ufs_hba *hba);
@@ -260,35 +266,58 @@
 static irqreturn_t ufshcd_intr(int irq, void *__hba);
 static int ufshcd_change_power_mode(struct ufs_hba *hba,
 			     struct ufs_pa_layer_attr *pwr_mode);
+static void ufshcd_schedule_eh_work(struct ufs_hba *hba);
+static int ufshcd_setup_hba_vreg(struct ufs_hba *hba, bool on);
+static int ufshcd_setup_vreg(struct ufs_hba *hba, bool on);
+static inline int ufshcd_config_vreg_hpm(struct ufs_hba *hba,
+					 struct ufs_vreg *vreg);
+static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag);
+static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba);
+static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba);
+static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable);
+static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set);
+static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable);
+
 static inline bool ufshcd_valid_tag(struct ufs_hba *hba, int tag)
 {
 	return tag >= 0 && tag < hba->nutrs;
 }
 
-static inline int ufshcd_enable_irq(struct ufs_hba *hba)
+static inline void ufshcd_enable_irq(struct ufs_hba *hba)
 {
-	int ret = 0;
-
 	if (!hba->is_irq_enabled) {
-		ret = request_irq(hba->irq, ufshcd_intr, IRQF_SHARED, UFSHCD,
-				hba);
-		if (ret)
-			dev_err(hba->dev, "%s: request_irq failed, ret=%d\n",
-				__func__, ret);
+		enable_irq(hba->irq);
 		hba->is_irq_enabled = true;
 	}
-
-	return ret;
 }
 
 static inline void ufshcd_disable_irq(struct ufs_hba *hba)
 {
 	if (hba->is_irq_enabled) {
-		free_irq(hba->irq, hba);
+		disable_irq(hba->irq);
 		hba->is_irq_enabled = false;
 	}
 }
 
+static inline void ufshcd_wb_config(struct ufs_hba *hba)
+{
+	int ret;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return;
+
+	ret = ufshcd_wb_ctrl(hba, true);
+	if (ret)
+		dev_err(hba->dev, "%s: Enable WB failed: %d\n", __func__, ret);
+	else
+		dev_info(hba->dev, "%s: Write Booster Configured\n", __func__);
+	ret = ufshcd_wb_toggle_flush_during_h8(hba, true);
+	if (ret)
+		dev_err(hba->dev, "%s: En WB flush during H8: failed: %d\n",
+			__func__, ret);
+	ufshcd_wb_toggle_flush(hba, true);
+}
+
 static void ufshcd_scsi_unblock_requests(struct ufs_hba *hba)
 {
 	if (atomic_dec_and_test(&hba->scsi_block_reqs_cnt))
@@ -322,15 +351,38 @@
 {
 	struct utp_task_req_desc *descp = &hba->utmrdl_base_addr[tag];
 
+	trace_android_vh_ufs_send_tm_command(hba, tag, str);
 	trace_ufshcd_upiu(dev_name(hba->dev), str, &descp->req_header,
 			&descp->input_param1);
 }
 
+static void ufshcd_add_uic_command_trace(struct ufs_hba *hba,
+					 struct uic_command *ucmd,
+					 const char *str)
+{
+	u32 cmd;
+
+	trace_android_vh_ufs_send_uic_command(hba, ucmd, str);
+
+	if (!trace_ufshcd_uic_command_enabled())
+		return;
+
+	if (!strcmp(str, "send"))
+		cmd = ucmd->command;
+	else
+		cmd = ufshcd_readl(hba, REG_UIC_COMMAND);
+
+	trace_ufshcd_uic_command(dev_name(hba->dev), str, cmd,
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_1),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_2),
+				 ufshcd_readl(hba, REG_UIC_COMMAND_ARG_3));
+}
+
 static void ufshcd_add_command_trace(struct ufs_hba *hba,
 		unsigned int tag, const char *str)
 {
 	sector_t lba = -1;
-	u8 opcode = 0;
+	u8 opcode = 0, group_id = 0;
 	u32 intr, doorbell;
 	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
 	struct scsi_cmnd *cmd = lrbp->cmd;
@@ -356,13 +408,15 @@
 				lba = cmd->request->bio->bi_iter.bi_sector;
 			transfer_len = be32_to_cpu(
 				lrbp->ucd_req_ptr->sc.exp_data_transfer_len);
+			if (opcode == WRITE_10)
+				group_id = lrbp->cmd->cmnd[6];
 		}
 	}
 
 	intr = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
 	doorbell = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
 	trace_ufshcd_command(dev_name(hba->dev), str, tag,
-				doorbell, transfer_len, intr, lba, opcode);
+			doorbell, transfer_len, intr, lba, opcode, group_id);
 }
 
 static void ufshcd_print_clk_freqs(struct ufs_hba *hba)
@@ -391,7 +445,7 @@
 	for (i = 0; i < UFS_ERR_REG_HIST_LENGTH; i++) {
 		int p = (i + err_hist->pos) % UFS_ERR_REG_HIST_LENGTH;
 
-		if (err_hist->reg[p] == 0)
+		if (err_hist->tstamp[p] == 0)
 			continue;
 		dev_err(hba->dev, "%s[%d] = 0x%x at %lld us\n", err_name, p,
 			err_hist->reg[p], ktime_to_us(err_hist->tstamp[p]));
@@ -405,15 +459,6 @@
 static void ufshcd_print_host_regs(struct ufs_hba *hba)
 {
 	ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE, "host_regs: ");
-	dev_err(hba->dev, "hba->ufs_version = 0x%x, hba->capabilities = 0x%x\n",
-		hba->ufs_version, hba->capabilities);
-	dev_err(hba->dev,
-		"hba->outstanding_reqs = 0x%x, hba->outstanding_tasks = 0x%x\n",
-		(u32)hba->outstanding_reqs, (u32)hba->outstanding_tasks);
-	dev_err(hba->dev,
-		"last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt = %d\n",
-		ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp),
-		hba->ufs_stats.hibern8_exit_cnt);
 
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.pa_err, "pa_err");
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.dl_err, "dl_err");
@@ -432,10 +477,7 @@
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.host_reset, "host_reset");
 	ufshcd_print_err_hist(hba, &hba->ufs_stats.task_abort, "task_abort");
 
-	ufshcd_print_clk_freqs(hba);
-
-	if (hba->vops && hba->vops->dbg_register_dump)
-		hba->vops->dbg_register_dump(hba);
+	ufshcd_vops_dbg_register_dump(hba);
 }
 
 static
@@ -467,8 +509,11 @@
 		ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr,
 				sizeof(struct utp_upiu_rsp));
 
-		prdt_length = le16_to_cpu(
-			lrbp->utr_descriptor_ptr->prd_table_length);
+		prdt_length =
+			le16_to_cpu(lrbp->utr_descriptor_ptr->prd_table_length);
+		if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
+			prdt_length /= hba->sg_entry_size;
+
 		dev_err(hba->dev,
 			"UPIU[%d] - PRDT - %d entries  phys@0x%llx\n",
 			tag, prdt_length,
@@ -476,7 +521,7 @@
 
 		if (pr_prdt)
 			ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr,
-				sizeof(struct ufshcd_sg_entry) * prdt_length);
+				hba->sg_entry_size * prdt_length);
 	}
 }
 
@@ -494,6 +539,8 @@
 
 static void ufshcd_print_host_state(struct ufs_hba *hba)
 {
+	struct scsi_device *sdev_ufs = hba->sdev_ufs_device;
+
 	dev_err(hba->dev, "UFS Host state=%d\n", hba->ufshcd_state);
 	dev_err(hba->dev, "outstanding reqs=0x%lx tasks=0x%lx\n",
 		hba->outstanding_reqs, hba->outstanding_tasks);
@@ -506,12 +553,24 @@
 	dev_err(hba->dev, "Auto BKOPS=%d, Host self-block=%d\n",
 		hba->auto_bkops_enabled, hba->host->host_self_blocked);
 	dev_err(hba->dev, "Clk gate=%d\n", hba->clk_gating.state);
+	dev_err(hba->dev,
+		"last_hibern8_exit_tstamp at %lld us, hibern8_exit_cnt=%d\n",
+		ktime_to_us(hba->ufs_stats.last_hibern8_exit_tstamp),
+		hba->ufs_stats.hibern8_exit_cnt);
+	dev_err(hba->dev, "last intr at %lld us, last intr status=0x%x\n",
+		ktime_to_us(hba->ufs_stats.last_intr_ts),
+		hba->ufs_stats.last_intr_status);
 	dev_err(hba->dev, "error handling flags=0x%x, req. abort count=%d\n",
 		hba->eh_flags, hba->req_abort_count);
-	dev_err(hba->dev, "Host capabilities=0x%x, caps=0x%x\n",
-		hba->capabilities, hba->caps);
+	dev_err(hba->dev, "hba->ufs_version=0x%x, Host capabilities=0x%x, caps=0x%x\n",
+		hba->ufs_version, hba->capabilities, hba->caps);
 	dev_err(hba->dev, "quirks=0x%x, dev. quirks=0x%x\n", hba->quirks,
 		hba->dev_quirks);
+	if (sdev_ufs)
+		dev_err(hba->dev, "UFS dev info: %.8s %.16s rev %.4s\n",
+			sdev_ufs->vendor, sdev_ufs->model, sdev_ufs->rev);
+
+	ufshcd_print_clk_freqs(hba);
 }
 
 /**
@@ -540,6 +599,18 @@
 		 hba->pwr_info.hs_rate);
 }
 
+void ufshcd_delay_us(unsigned long us, unsigned long tolerance)
+{
+	if (!us)
+		return;
+
+	if (us < 10)
+		udelay(us);
+	else
+		usleep_range(us, us + tolerance);
+}
+EXPORT_SYMBOL_GPL(ufshcd_delay_us);
+
 /*
  * ufshcd_wait_for_register - wait for register value to change
  * @hba - per-adapter interface
@@ -824,7 +895,12 @@
  */
 static inline void ufshcd_hba_start(struct ufs_hba *hba)
 {
-	ufshcd_writel(hba, CONTROLLER_ENABLE, REG_CONTROLLER_ENABLE);
+	u32 val = CONTROLLER_ENABLE;
+
+	if (ufshcd_crypto_enable(hba))
+		val |= CRYPTO_GENERAL_ENABLE;
+
+	ufshcd_writel(hba, val, REG_CONTROLLER_ENABLE);
 }
 
 /**
@@ -867,28 +943,29 @@
 		return false;
 }
 
-static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+/**
+ * ufshcd_set_clk_freq - set UFS controller clock frequencies
+ * @hba: per adapter instance
+ * @scale_up: If True, set max possible frequency othewise set low frequency
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_set_clk_freq(struct ufs_hba *hba, bool scale_up)
 {
 	int ret = 0;
 	struct ufs_clk_info *clki;
 	struct list_head *head = &hba->clk_list_head;
-	ktime_t start = ktime_get();
-	bool clk_state_changed = false;
 
 	if (list_empty(head))
 		goto out;
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
-	if (ret)
-		return ret;
-
 	list_for_each_entry(clki, head, list) {
 		if (!IS_ERR_OR_NULL(clki->clk)) {
 			if (scale_up && clki->max_freq) {
 				if (clki->curr_freq == clki->max_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->max_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -907,7 +984,6 @@
 				if (clki->curr_freq == clki->min_freq)
 					continue;
 
-				clk_state_changed = true;
 				ret = clk_set_rate(clki->clk, clki->min_freq);
 				if (ret) {
 					dev_err(hba->dev, "%s: %s clk set rate(%dHz) failed, %d\n",
@@ -926,13 +1002,36 @@
 				clki->name, clk_get_rate(clki->clk));
 	}
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
-
 out:
-	if (clk_state_changed)
-		trace_ufshcd_profile_clk_scaling(dev_name(hba->dev),
-			(scale_up ? "up" : "down"),
-			ktime_to_us(ktime_sub(ktime_get(), start)), ret);
+	return ret;
+}
+
+/**
+ * ufshcd_scale_clks - scale up or scale down UFS controller clocks
+ * @hba: per adapter instance
+ * @scale_up: True if scaling up and false if scaling down
+ *
+ * Returns 0 if successful
+ * Returns < 0 for any other errors
+ */
+static int ufshcd_scale_clks(struct ufs_hba *hba, bool scale_up)
+{
+	int ret = 0;
+
+	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, PRE_CHANGE);
+	if (ret)
+		return ret;
+
+	ret = ufshcd_set_clk_freq(hba, scale_up);
+	if (ret)
+		return ret;
+
+	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
+	if (ret) {
+		ufshcd_set_clk_freq(hba, !scale_up);
+		return ret;
+	}
+
 	return ret;
 }
 
@@ -1064,8 +1163,7 @@
 	}
 
 	/* check if the power mode needs to be changed or not? */
-	ret = ufshcd_change_power_mode(hba, &new_pwr_info);
-
+	ret = ufshcd_config_pwr_mode(hba, &new_pwr_info);
 	if (ret)
 		dev_err(hba->dev, "%s: failed err %d, old gear: (tx %d rx %d), new gear: (tx %d rx %d)",
 			__func__, ret,
@@ -1118,35 +1216,41 @@
 
 	ret = ufshcd_clock_scaling_prepare(hba);
 	if (ret)
-		return ret;
+		goto out;
 
 	/* scale down the gear before scaling down clocks */
 	if (!scale_up) {
 		ret = ufshcd_scale_gear(hba, false);
 		if (ret)
-			goto out;
+			goto clk_scaling_unprepare;
 	}
 
 	ret = ufshcd_scale_clks(hba, scale_up);
-	if (ret) {
-		if (!scale_up)
-			ufshcd_scale_gear(hba, true);
-		goto out;
-	}
+	if (ret)
+		goto scale_up_gear;
 
 	/* scale up the gear after scaling up clocks */
 	if (scale_up) {
 		ret = ufshcd_scale_gear(hba, true);
 		if (ret) {
 			ufshcd_scale_clks(hba, false);
-			goto out;
+			goto clk_scaling_unprepare;
 		}
 	}
 
-	ret = ufshcd_vops_clk_scale_notify(hba, scale_up, POST_CHANGE);
+	/* Enable Write Booster if we have scaled up else disable it */
+	up_write(&hba->clk_scaling_lock);
+	ufshcd_wb_ctrl(hba, scale_up);
+	down_write(&hba->clk_scaling_lock);
 
-out:
+	goto clk_scaling_unprepare;
+
+scale_up_gear:
+	if (!scale_up)
+		ufshcd_scale_gear(hba, true);
+clk_scaling_unprepare:
 	ufshcd_clock_scaling_unprepare(hba);
+out:
 	ufshcd_release(hba);
 	return ret;
 }
@@ -1199,6 +1303,9 @@
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return -EINVAL;
 
+	clki = list_first_entry(&hba->clk_list_head, struct ufs_clk_info, list);
+	/* Override with the closest supported frequency */
+	*freq = (unsigned long) clk_round_rate(clki->clk, *freq);
 	spin_lock_irqsave(hba->host->host_lock, irq_flags);
 	if (ufshcd_eh_in_progress(hba)) {
 		spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
@@ -1213,8 +1320,11 @@
 		goto out;
 	}
 
-	clki = list_first_entry(&hba->clk_list_head, struct ufs_clk_info, list);
+	/* Decide based on the rounded-off frequency and update */
 	scale_up = (*freq == clki->max_freq) ? true : false;
+	if (!scale_up)
+		*freq = clki->min_freq;
+	/* Update the frequency */
 	if (!ufshcd_is_devfreq_scaling_required(hba, scale_up)) {
 		spin_unlock_irqrestore(hba->host->host_lock, irq_flags);
 		ret = 0;
@@ -1269,6 +1379,9 @@
 	struct ufs_hba *hba = dev_get_drvdata(dev);
 	struct ufs_clk_scaling *scaling = &hba->clk_scaling;
 	unsigned long flags;
+	struct list_head *clk_list = &hba->clk_list_head;
+	struct ufs_clk_info *clki;
+	ktime_t curr_t;
 
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return -EINVAL;
@@ -1276,22 +1389,29 @@
 	memset(stat, 0, sizeof(*stat));
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
+	curr_t = ktime_get();
 	if (!scaling->window_start_t)
 		goto start_window;
 
+	clki = list_first_entry(clk_list, struct ufs_clk_info, list);
+	/*
+	 * If current frequency is 0, then the ondemand governor considers
+	 * there's no initial frequency set. And it always requests to set
+	 * to max. frequency.
+	 */
+	stat->current_frequency = clki->curr_freq;
 	if (scaling->is_busy_started)
-		scaling->tot_busy_t += ktime_to_us(ktime_sub(ktime_get(),
-					scaling->busy_start_t));
+		scaling->tot_busy_t += ktime_us_delta(curr_t,
+				scaling->busy_start_t);
 
-	stat->total_time = jiffies_to_usecs((long)jiffies -
-				(long)scaling->window_start_t);
+	stat->total_time = ktime_us_delta(curr_t, scaling->window_start_t);
 	stat->busy_time = scaling->tot_busy_t;
 start_window:
-	scaling->window_start_t = jiffies;
+	scaling->window_start_t = curr_t;
 	scaling->tot_busy_t = 0;
 
 	if (hba->outstanding_reqs) {
-		scaling->busy_start_t = ktime_get();
+		scaling->busy_start_t = curr_t;
 		scaling->is_busy_started = true;
 	} else {
 		scaling->busy_start_t = 0;
@@ -1301,12 +1421,6 @@
 	return 0;
 }
 
-static struct devfreq_dev_profile ufs_devfreq_profile = {
-	.polling_ms	= 100,
-	.target		= ufshcd_devfreq_target,
-	.get_dev_status	= ufshcd_devfreq_get_dev_status,
-};
-
 static int ufshcd_devfreq_init(struct ufs_hba *hba)
 {
 	struct list_head *clk_list = &hba->clk_list_head;
@@ -1322,10 +1436,12 @@
 	dev_pm_opp_add(hba->dev, clki->min_freq, 0);
 	dev_pm_opp_add(hba->dev, clki->max_freq, 0);
 
+	ufshcd_vops_config_scaling_param(hba, &hba->vps->devfreq_profile,
+					 &hba->vps->ondemand_data);
 	devfreq = devfreq_add_device(hba->dev,
-			&ufs_devfreq_profile,
+			&hba->vps->devfreq_profile,
 			DEVFREQ_GOV_SIMPLE_ONDEMAND,
-			NULL);
+			&hba->vps->ondemand_data);
 	if (IS_ERR(devfreq)) {
 		ret = PTR_ERR(devfreq);
 		dev_err(hba->dev, "Unable to register with devfreq %d\n", ret);
@@ -1479,6 +1595,8 @@
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	ufshcd_setup_clocks(hba, true);
 
+	ufshcd_enable_irq(hba);
+
 	/* Exit from hibern8 */
 	if (ufshcd_can_hibern8_during_gating(hba)) {
 		/* Prevent gating in this path */
@@ -1514,11 +1632,6 @@
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	hba->clk_gating.active_reqs++;
 
-	if (ufshcd_eh_in_progress(hba)) {
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-		return 0;
-	}
-
 start:
 	switch (hba->clk_gating.state) {
 	case CLKS_ON:
@@ -1598,6 +1711,7 @@
 	struct ufs_hba *hba = container_of(work, struct ufs_hba,
 			clk_gating.gate_work.work);
 	unsigned long flags;
+	int ret;
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	/*
@@ -1607,7 +1721,7 @@
 	 * state to CLKS_ON.
 	 */
 	if (hba->clk_gating.is_suspended ||
-		(hba->clk_gating.state == REQ_CLKS_ON)) {
+		(hba->clk_gating.state != REQ_CLKS_OFF)) {
 		hba->clk_gating.state = CLKS_ON;
 		trace_ufshcd_clk_gating(dev_name(hba->dev),
 					hba->clk_gating.state);
@@ -1624,8 +1738,11 @@
 
 	/* put the link into hibern8 mode before turning off clocks */
 	if (ufshcd_can_hibern8_during_gating(hba)) {
-		if (ufshcd_uic_hibern8_enter(hba)) {
+		ret = ufshcd_uic_hibern8_enter(hba);
+		if (ret) {
 			hba->clk_gating.state = CLKS_ON;
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			trace_ufshcd_clk_gating(dev_name(hba->dev),
 						hba->clk_gating.state);
 			goto out;
@@ -1633,6 +1750,8 @@
 		ufshcd_set_link_hibern8(hba);
 	}
 
+	ufshcd_disable_irq(hba);
+
 	if (!ufshcd_is_link_active(hba))
 		ufshcd_setup_clocks(hba, false);
 	else
@@ -1668,11 +1787,10 @@
 
 	hba->clk_gating.active_reqs--;
 
-	if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended
-		|| hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL
-		|| ufshcd_any_tag_in_use(hba) || hba->outstanding_tasks
-		|| hba->active_uic_cmd || hba->uic_async_done
-		|| ufshcd_eh_in_progress(hba))
+	if (hba->clk_gating.active_reqs || hba->clk_gating.is_suspended ||
+	    hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL ||
+	    ufshcd_any_tag_in_use(hba) || hba->outstanding_tasks ||
+	    hba->active_uic_cmd || hba->uic_async_done)
 		return;
 
 	hba->clk_gating.state = REQ_CLKS_OFF;
@@ -1734,19 +1852,19 @@
 		return -EINVAL;
 
 	value = !!value;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
 	if (value == hba->clk_gating.is_enabled)
 		goto out;
 
-	if (value) {
-		ufshcd_release(hba);
-	} else {
-		spin_lock_irqsave(hba->host->host_lock, flags);
+	if (value)
+		hba->clk_gating.active_reqs--;
+	else
 		hba->clk_gating.active_reqs++;
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-	}
 
 	hba->clk_gating.is_enabled = value;
 out:
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	return count;
 }
 
@@ -1785,6 +1903,8 @@
 	if (!ufshcd_is_clkgating_allowed(hba))
 		return;
 
+	hba->clk_gating.state = CLKS_ON;
+
 	hba->clk_gating.delay_ms = 150;
 	INIT_DELAYED_WORK(&hba->clk_gating.gate_work, ufshcd_gate_work);
 	INIT_WORK(&hba->clk_gating.ungate_work, ufshcd_ungate_work);
@@ -1792,7 +1912,7 @@
 	snprintf(wq_name, ARRAY_SIZE(wq_name), "ufs_clk_gating_%d",
 		 hba->host->host_no);
 	hba->clk_gating.clk_gating_workq = alloc_ordered_workqueue(wq_name,
-							   WQ_MEM_RECLAIM);
+					WQ_MEM_RECLAIM | WQ_HIGHPRI);
 
 	hba->clk_gating.is_enabled = true;
 
@@ -1828,6 +1948,7 @@
 static void ufshcd_clk_scaling_start_busy(struct ufs_hba *hba)
 {
 	bool queue_resume_work = false;
+	ktime_t curr_t = ktime_get();
 
 	if (!ufshcd_is_clkscaling_supported(hba))
 		return;
@@ -1843,13 +1964,13 @@
 			   &hba->clk_scaling.resume_work);
 
 	if (!hba->clk_scaling.window_start_t) {
-		hba->clk_scaling.window_start_t = jiffies;
+		hba->clk_scaling.window_start_t = curr_t;
 		hba->clk_scaling.tot_busy_t = 0;
 		hba->clk_scaling.is_busy_started = false;
 	}
 
 	if (!hba->clk_scaling.is_busy_started) {
-		hba->clk_scaling.busy_start_t = ktime_get();
+		hba->clk_scaling.busy_start_t = curr_t;
 		hba->clk_scaling.is_busy_started = true;
 	}
 }
@@ -1876,8 +1997,12 @@
 static inline
 void ufshcd_send_command(struct ufs_hba *hba, unsigned int task_tag)
 {
-	hba->lrb[task_tag].issue_time_stamp = ktime_get();
-	hba->lrb[task_tag].compl_time_stamp = ktime_set(0, 0);
+	struct ufshcd_lrb *lrbp = &hba->lrb[task_tag];
+
+	lrbp->issue_time_stamp = ktime_get();
+	lrbp->compl_time_stamp = ktime_set(0, 0);
+	ufshcd_vops_setup_xfer_req(hba, task_tag, (lrbp->cmd ? true : false));
+	trace_android_vh_ufs_send_command(hba, lrbp);
 	ufshcd_add_command_trace(hba, task_tag, "send");
 	ufshcd_clk_scaling_start_busy(hba);
 	__set_bit(task_tag, &hba->outstanding_reqs);
@@ -1947,15 +2072,26 @@
 /**
  * ufshcd_hba_capabilities - Read controller capabilities
  * @hba: per adapter instance
+ *
+ * Return: 0 on success, negative on error.
  */
-static inline void ufshcd_hba_capabilities(struct ufs_hba *hba)
+static inline int ufshcd_hba_capabilities(struct ufs_hba *hba)
 {
+	int err;
+
 	hba->capabilities = ufshcd_readl(hba, REG_CONTROLLER_CAPABILITIES);
 
 	/* nutrs and nutmrs are 0 based values */
 	hba->nutrs = (hba->capabilities & MASK_TRANSFER_REQUESTS_SLOTS) + 1;
 	hba->nutmrs =
 	((hba->capabilities & MASK_TASK_MANAGEMENT_REQUEST_SLOTS) >> 16) + 1;
+
+	/* Read crypto capabilities */
+	err = ufshcd_hba_init_crypto_capabilities(hba);
+	if (err)
+		dev_err(hba->dev, "crypto setup failed\n");
+
+	return err;
 }
 
 /**
@@ -2003,6 +2139,8 @@
 	ufshcd_writel(hba, uic_cmd->argument2, REG_UIC_COMMAND_ARG_2);
 	ufshcd_writel(hba, uic_cmd->argument3, REG_UIC_COMMAND_ARG_3);
 
+	ufshcd_add_uic_command_trace(hba, uic_cmd, "send");
+
 	/* Write UIC Cmd */
 	ufshcd_writel(hba, uic_cmd->command & COMMAND_OPCODE_MASK,
 		      REG_UIC_COMMAND);
@@ -2100,11 +2238,12 @@
  */
 static int ufshcd_map_sg(struct ufs_hba *hba, struct ufshcd_lrb *lrbp)
 {
-	struct ufshcd_sg_entry *prd_table;
+	struct ufshcd_sg_entry *prd;
 	struct scatterlist *sg;
 	struct scsi_cmnd *cmd;
 	int sg_segments;
 	int i;
+	int err;
 
 	cmd = lrbp->cmd;
 	sg_segments = scsi_dma_map(cmd);
@@ -2115,27 +2254,30 @@
 		if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
 			lrbp->utr_descriptor_ptr->prd_table_length =
 				cpu_to_le16((u16)(sg_segments *
-					sizeof(struct ufshcd_sg_entry)));
+						  hba->sg_entry_size));
 		else
 			lrbp->utr_descriptor_ptr->prd_table_length =
 				cpu_to_le16((u16) (sg_segments));
 
-		prd_table = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
+		prd = (struct ufshcd_sg_entry *)lrbp->ucd_prdt_ptr;
 
 		scsi_for_each_sg(cmd, sg, sg_segments, i) {
-			prd_table[i].size  =
+			prd->size =
 				cpu_to_le32(((u32) sg_dma_len(sg))-1);
-			prd_table[i].base_addr =
+			prd->base_addr =
 				cpu_to_le32(lower_32_bits(sg->dma_address));
-			prd_table[i].upper_addr =
+			prd->upper_addr =
 				cpu_to_le32(upper_32_bits(sg->dma_address));
-			prd_table[i].reserved = 0;
+			prd->reserved = 0;
+			prd = (void *)prd + hba->sg_entry_size;
 		}
 	} else {
 		lrbp->utr_descriptor_ptr->prd_table_length = 0;
 	}
 
-	return 0;
+	err = 0;
+	trace_android_vh_ufs_fill_prdt(hba, lrbp, sg_segments, &err);
+	return err;
 }
 
 /**
@@ -2193,6 +2335,8 @@
 	struct utp_transfer_req_desc *req_desc = lrbp->utr_descriptor_ptr;
 	u32 data_direction;
 	u32 dword_0;
+	u32 dword_1 = 0;
+	u32 dword_3 = 0;
 
 	if (cmd_dir == DMA_FROM_DEVICE) {
 		data_direction = UTP_DEVICE_TO_HOST;
@@ -2210,10 +2354,12 @@
 	if (lrbp->intr_cmd)
 		dword_0 |= UTP_REQ_DESC_INT_CMD;
 
+	/* Prepare crypto related dwords */
+	ufshcd_prepare_req_desc_hdr_crypto(lrbp, &dword_0, &dword_1, &dword_3);
+
 	/* Transfer request descriptor header fields */
 	req_desc->header.dword_0 = cpu_to_le32(dword_0);
-	/* dword_1 is reserved, hence it is set to 0 */
-	req_desc->header.dword_1 = 0;
+	req_desc->header.dword_1 = cpu_to_le32(dword_1);
 	/*
 	 * assigning invalid value for command status. Controller
 	 * updates OCS on command completion, with the command
@@ -2221,8 +2367,7 @@
 	 */
 	req_desc->header.dword_2 =
 		cpu_to_le32(OCS_INVALID_COMMAND_STATUS);
-	/* dword_3 is reserved, hence it is set to 0 */
-	req_desc->header.dword_3 = 0;
+	req_desc->header.dword_3 = cpu_to_le32(dword_3);
 
 	req_desc->prd_table_length = 0;
 }
@@ -2410,34 +2555,6 @@
 	if (!down_read_trylock(&hba->clk_scaling_lock))
 		return SCSI_MLQUEUE_HOST_BUSY;
 
-	spin_lock_irqsave(hba->host->host_lock, flags);
-	switch (hba->ufshcd_state) {
-	case UFSHCD_STATE_OPERATIONAL:
-		break;
-	case UFSHCD_STATE_EH_SCHEDULED:
-	case UFSHCD_STATE_RESET:
-		err = SCSI_MLQUEUE_HOST_BUSY;
-		goto out_unlock;
-	case UFSHCD_STATE_ERROR:
-		set_host_byte(cmd, DID_ERROR);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	default:
-		dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n",
-				__func__, hba->ufshcd_state);
-		set_host_byte(cmd, DID_BAD_TARGET);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	}
-
-	/* if error handling is in progress, don't issue commands */
-	if (ufshcd_eh_in_progress(hba)) {
-		set_host_byte(cmd, DID_ERROR);
-		cmd->scsi_done(cmd);
-		goto out_unlock;
-	}
-	spin_unlock_irqrestore(hba->host->host_lock, flags);
-
 	hba->req_abort_count = 0;
 
 	err = ufshcd_hold(hba, true);
@@ -2445,7 +2562,8 @@
 		err = SCSI_MLQUEUE_HOST_BUSY;
 		goto out;
 	}
-	WARN_ON(hba->clk_gating.state != CLKS_ON);
+	WARN_ON(ufshcd_is_clkgating_allowed(hba) &&
+		(hba->clk_gating.state != CLKS_ON));
 
 	lrbp = &hba->lrb[tag];
 
@@ -2456,6 +2574,16 @@
 	lrbp->task_tag = tag;
 	lrbp->lun = ufshcd_scsi_to_upiu_lun(cmd->device->lun);
 	lrbp->intr_cmd = !ufshcd_is_intr_aggr_allowed(hba) ? true : false;
+
+	ufshcd_prepare_lrbp_crypto(cmd->request, lrbp);
+
+	trace_android_vh_ufs_prepare_command(hba, cmd->request, lrbp, &err);
+	if (err) {
+		ufshcd_release(hba);
+		lrbp->cmd = NULL;
+		goto out;
+	}
+
 	lrbp->req_abort_skip = false;
 
 	ufshcd_comp_scsi_upiu(hba, lrbp);
@@ -2469,12 +2597,51 @@
 	/* Make sure descriptors are ready before ringing the doorbell */
 	wmb();
 
-	/* issue command to the controller */
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false));
+	switch (hba->ufshcd_state) {
+	case UFSHCD_STATE_OPERATIONAL:
+	case UFSHCD_STATE_EH_SCHEDULED_NON_FATAL:
+		break;
+	case UFSHCD_STATE_EH_SCHEDULED_FATAL:
+		/*
+		 * pm_runtime_get_sync() is used at error handling preparation
+		 * stage. If a scsi cmd, e.g. the SSU cmd, is sent from hba's
+		 * PM ops, it can never be finished if we let SCSI layer keep
+		 * retrying it, which gets err handler stuck forever. Neither
+		 * can we let the scsi cmd pass through, because UFS is in bad
+		 * state, the scsi cmd may eventually time out, which will get
+		 * err handler blocked for too long. So, just fail the scsi cmd
+		 * sent from PM ops, err handler can recover PM error anyways.
+		 */
+		if (hba->pm_op_in_progress) {
+			hba->force_reset = true;
+			set_host_byte(cmd, DID_BAD_TARGET);
+			goto out_compl_cmd;
+		}
+		fallthrough;
+	case UFSHCD_STATE_RESET:
+		err = SCSI_MLQUEUE_HOST_BUSY;
+		goto out_compl_cmd;
+	case UFSHCD_STATE_ERROR:
+		set_host_byte(cmd, DID_ERROR);
+		goto out_compl_cmd;
+	default:
+		dev_WARN_ONCE(hba->dev, 1, "%s: invalid state %d\n",
+				__func__, hba->ufshcd_state);
+		set_host_byte(cmd, DID_BAD_TARGET);
+		goto out_compl_cmd;
+	}
 	ufshcd_send_command(hba, tag);
-out_unlock:
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	goto out;
+
+out_compl_cmd:
+	scsi_dma_unmap(lrbp->cmd);
+	lrbp->cmd = NULL;
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	ufshcd_release(hba);
+	if (!err)
+		cmd->scsi_done(cmd);
 out:
 	up_read(&hba->clk_scaling_lock);
 	return err;
@@ -2489,6 +2656,7 @@
 	lrbp->task_tag = tag;
 	lrbp->lun = 0; /* device management cmd is not specific to any LUN */
 	lrbp->intr_cmd = true; /* No interrupt aggregation */
+	ufshcd_prepare_lrbp_crypto(NULL, lrbp);
 	hba->dev_cmd.type = cmd_type;
 
 	return ufshcd_comp_devman_upiu(hba, lrbp);
@@ -2661,7 +2829,6 @@
 	/* Make sure descriptors are ready before ringing the doorbell */
 	wmb();
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	ufshcd_vops_setup_xfer_req(hba, tag, (lrbp->cmd ? true : false));
 	ufshcd_send_command(hba, tag);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
@@ -2701,14 +2868,14 @@
 	(*request)->upiu_req.selector = selector;
 }
 
-static int ufshcd_query_flag_retry(struct ufs_hba *hba,
-	enum query_opcode opcode, enum flag_idn idn, bool *flag_res)
+int ufshcd_query_flag_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res)
 {
 	int ret;
 	int retries;
 
 	for (retries = 0; retries < QUERY_REQ_RETRIES; retries++) {
-		ret = ufshcd_query_flag(hba, opcode, idn, flag_res);
+		ret = ufshcd_query_flag(hba, opcode, idn, index, flag_res);
 		if (ret)
 			dev_dbg(hba->dev,
 				"%s: failed with error %d, retries %d\n",
@@ -2723,22 +2890,24 @@
 			__func__, opcode, idn, ret, retries);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_flag_retry);
 
 /**
  * ufshcd_query_flag() - API function for sending flag query requests
  * @hba: per-adapter instance
  * @opcode: flag query to perform
  * @idn: flag idn to access
+ * @index: flag index to access
  * @flag_res: the flag value after the query request completes
  *
  * Returns 0 for success, non-zero in case of failure
  */
 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
-			enum flag_idn idn, bool *flag_res)
+			enum flag_idn idn, u8 index, bool *flag_res)
 {
 	struct ufs_query_req *request = NULL;
 	struct ufs_query_res *response = NULL;
-	int err, index = 0, selector = 0;
+	int err, selector = 0;
 	int timeout = QUERY_REQ_TIMEOUT;
 
 	BUG_ON(!hba);
@@ -2790,6 +2959,7 @@
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_flag);
 
 /**
  * ufshcd_query_attr - API function for sending attribute requests
@@ -2854,6 +3024,7 @@
 	ufshcd_release(hba);
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_attr);
 
 /**
  * ufshcd_query_attr_retry() - API function for sending query
@@ -2868,7 +3039,7 @@
  *
  * Returns 0 for success, non-zero in case of failure
 */
-static int ufshcd_query_attr_retry(struct ufs_hba *hba,
+int ufshcd_query_attr_retry(struct ufs_hba *hba,
 	enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector,
 	u32 *attr_val)
 {
@@ -2891,6 +3062,7 @@
 			__func__, idn, ret, QUERY_REQ_RETRIES);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_attr_retry);
 
 static int __ufshcd_query_descriptor(struct ufs_hba *hba,
 			enum query_opcode opcode, enum desc_idn idn, u8 index,
@@ -2988,6 +3160,7 @@
 
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_query_descriptor_retry);
 
 /**
  * ufshcd_read_desc_length - read the specified descriptor length from header
@@ -3157,6 +3330,7 @@
 		kfree(desc_buf);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_read_desc_param);
 
 static inline int ufshcd_read_desc(struct ufs_hba *hba,
 				   enum desc_idn desc_id,
@@ -3309,6 +3483,31 @@
 				      param_offset, param_read_buf, param_size);
 }
 
+static int ufshcd_get_ref_clk_gating_wait(struct ufs_hba *hba)
+{
+	int err = 0;
+	u32 gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
+
+	if (hba->dev_info.wspecversion >= 0x300) {
+		err = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+				QUERY_ATTR_IDN_REF_CLK_GATING_WAIT_TIME, 0, 0,
+				&gating_wait);
+		if (err)
+			dev_err(hba->dev, "Failed reading bRefClkGatingWait. err = %d, use default %uus\n",
+					 err, gating_wait);
+
+		if (gating_wait == 0) {
+			gating_wait = UFSHCD_REF_CLK_GATING_WAIT_US;
+			dev_err(hba->dev, "Undefined ref clk gating wait time, use default %uus\n",
+					 gating_wait);
+		}
+
+		hba->dev_info.clk_gating_wait_us = gating_wait;
+	}
+
+	return err;
+}
+
 /**
  * ufshcd_memory_alloc - allocate memory for host memory space data structures
  * @hba: per adapter instance
@@ -3327,7 +3526,7 @@
 	size_t utmrdl_size, utrdl_size, ucdl_size;
 
 	/* Allocate memory for UTP command descriptors */
-	ucdl_size = (sizeof(struct utp_transfer_cmd_desc) * hba->nutrs);
+	ucdl_size = (sizeof_utp_transfer_cmd_desc(hba) * hba->nutrs);
 	hba->ucdl_base_addr = dmam_alloc_coherent(hba->dev,
 						  ucdl_size,
 						  &hba->ucdl_dma_addr,
@@ -3423,7 +3622,7 @@
 	prdt_offset =
 		offsetof(struct utp_transfer_cmd_desc, prd_table);
 
-	cmd_desc_size = sizeof(struct utp_transfer_cmd_desc);
+	cmd_desc_size = sizeof_utp_transfer_cmd_desc(hba);
 	cmd_desc_dma_addr = hba->ucdl_dma_addr;
 
 	for (i = 0; i < hba->nutrs; i++) {
@@ -3455,17 +3654,17 @@
 		hba->lrb[i].utr_descriptor_ptr = (utrdlp + i);
 		hba->lrb[i].utrd_dma_addr = hba->utrdl_dma_addr +
 				(i * sizeof(struct utp_transfer_req_desc));
-		hba->lrb[i].ucd_req_ptr =
-			(struct utp_upiu_req *)(cmd_descp + i);
+		hba->lrb[i].ucd_req_ptr = (struct utp_upiu_req *)cmd_descp;
 		hba->lrb[i].ucd_req_dma_addr = cmd_desc_element_addr;
 		hba->lrb[i].ucd_rsp_ptr =
-			(struct utp_upiu_rsp *)cmd_descp[i].response_upiu;
+			(struct utp_upiu_rsp *)cmd_descp->response_upiu;
 		hba->lrb[i].ucd_rsp_dma_addr = cmd_desc_element_addr +
 				response_offset;
 		hba->lrb[i].ucd_prdt_ptr =
-			(struct ufshcd_sg_entry *)cmd_descp[i].prd_table;
+			(struct ufshcd_sg_entry *)cmd_descp->prd_table;
 		hba->lrb[i].ucd_prdt_dma_addr = cmd_desc_element_addr +
 				prdt_offset;
+		cmd_descp = (void *)cmd_descp + cmd_desc_size;
 	}
 }
 
@@ -3719,6 +3918,10 @@
 	ufshcd_add_delay_before_dme_cmd(hba);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (ufshcd_is_link_broken(hba)) {
+		ret = -ENOLINK;
+		goto out_unlock;
+	}
 	hba->uic_async_done = &uic_async_done;
 	if (ufshcd_readl(hba, REG_INTERRUPT_ENABLE) & UIC_COMMAND_COMPL) {
 		ufshcd_disable_intr(hba, UIC_COMMAND_COMPL);
@@ -3766,6 +3969,11 @@
 	hba->uic_async_done = NULL;
 	if (reenable_intr)
 		ufshcd_enable_intr(hba, UIC_COMMAND_COMPL);
+	if (ret) {
+		ufshcd_set_link_broken(hba);
+		ufshcd_schedule_eh_work(hba);
+	}
+out_unlock:
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	mutex_unlock(&hba->uic_cmd_mutex);
 
@@ -3806,7 +4014,7 @@
 	return ret;
 }
 
-static int ufshcd_link_recovery(struct ufs_hba *hba)
+int ufshcd_link_recovery(struct ufs_hba *hba)
 {
 	int ret;
 	unsigned long flags;
@@ -3816,6 +4024,9 @@
 	ufshcd_set_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
+	/* Reset the attached device */
+	ufshcd_vops_device_reset(hba);
+
 	ret = ufshcd_host_reset_and_restore(hba);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
@@ -3830,8 +4041,9 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_link_recovery);
 
-static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
 {
 	int ret;
 	struct uic_command uic_cmd = {0};
@@ -3844,46 +4056,18 @@
 	trace_ufshcd_profile_hibern8(dev_name(hba->dev), "enter",
 			     ktime_to_us(ktime_sub(ktime_get(), start)), ret);
 
-	if (ret) {
-		int err;
-
+	if (ret)
 		dev_err(hba->dev, "%s: hibern8 enter failed. ret = %d\n",
 			__func__, ret);
-
-		/*
-		 * If link recovery fails then return error code returned from
-		 * ufshcd_link_recovery().
-		 * If link recovery succeeds then return -EAGAIN to attempt
-		 * hibern8 enter retry again.
-		 */
-		err = ufshcd_link_recovery(hba);
-		if (err) {
-			dev_err(hba->dev, "%s: link recovery failed", __func__);
-			ret = err;
-		} else {
-			ret = -EAGAIN;
-		}
-	} else
+	else
 		ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_ENTER,
 								POST_CHANGE);
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_enter);
 
-static int ufshcd_uic_hibern8_enter(struct ufs_hba *hba)
-{
-	int ret = 0, retries;
-
-	for (retries = UIC_HIBERN8_ENTER_RETRIES; retries > 0; retries--) {
-		ret = __ufshcd_uic_hibern8_enter(hba);
-		if (!ret)
-			goto out;
-	}
-out:
-	return ret;
-}
-
-static int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba)
 {
 	struct uic_command uic_cmd = {0};
 	int ret;
@@ -3899,7 +4083,6 @@
 	if (ret) {
 		dev_err(hba->dev, "%s: hibern8 exit failed. ret = %d\n",
 			__func__, ret);
-		ret = ufshcd_link_recovery(hba);
 	} else {
 		ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_EXIT,
 								POST_CHANGE);
@@ -3909,6 +4092,32 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit);
+
+void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit)
+{
+	unsigned long flags;
+	bool update = false;
+
+	if (!ufshcd_is_auto_hibern8_supported(hba))
+		return;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (hba->ahit != ahit) {
+		hba->ahit = ahit;
+		update = true;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
+	if (update && !pm_runtime_suspended(hba->dev)) {
+		pm_runtime_get_sync(hba->dev);
+		ufshcd_hold(hba, false);
+		ufshcd_auto_hibern8_enable(hba);
+		ufshcd_release(hba);
+		pm_runtime_put(hba->dev);
+	}
+}
+EXPORT_SYMBOL_GPL(ufshcd_auto_hibern8_update);
 
 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba)
 {
@@ -4007,7 +4216,8 @@
 	int ret;
 
 	/* if already configured to the requested pwr_mode */
-	if (pwr_mode->gear_rx == hba->pwr_info.gear_rx &&
+	if (!hba->force_pmc &&
+	    pwr_mode->gear_rx == hba->pwr_info.gear_rx &&
 	    pwr_mode->gear_tx == hba->pwr_info.gear_tx &&
 	    pwr_mode->lane_rx == hba->pwr_info.lane_rx &&
 	    pwr_mode->lane_tx == hba->pwr_info.lane_tx &&
@@ -4049,6 +4259,26 @@
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_HSSERIES),
 						pwr_mode->hs_rate);
 
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA0),
+			DL_FC0ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA1),
+			DL_TC0ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA2),
+			DL_AFC0ReqTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA3),
+			DL_FC1ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA4),
+			DL_TC1ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(PA_PWRMODEUSERDATA5),
+			DL_AFC1ReqTimeOutVal_Default);
+
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalFC0ProtectionTimeOutVal),
+			DL_FC0ProtectionTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalTC0ReplayTimeOutVal),
+			DL_TC0ReplayTimeOutVal_Default);
+	ufshcd_dme_set(hba, UIC_ARG_MIB(DME_LocalAFC0ReqTimeOutVal),
+			DL_AFC0ReqTimeOutVal_Default);
+
 	ret = ufshcd_uic_change_pwr_mode(hba, pwr_mode->pwr_rx << 4
 			| pwr_mode->pwr_tx);
 
@@ -4084,8 +4314,6 @@
 		memcpy(&final_params, desired_pwr_mode, sizeof(final_params));
 
 	ret = ufshcd_change_power_mode(hba, &final_params);
-	if (!ret)
-		ufshcd_print_pwr_info(hba);
 
 	return ret;
 }
@@ -4099,12 +4327,12 @@
  */
 static int ufshcd_complete_dev_init(struct ufs_hba *hba)
 {
-	int i;
 	int err;
 	bool flag_res = 1;
+	ktime_t timeout;
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
-		QUERY_FLAG_IDN_FDEVICEINIT, NULL);
+		QUERY_FLAG_IDN_FDEVICEINIT, 0, NULL);
 	if (err) {
 		dev_err(hba->dev,
 			"%s setting fDeviceInit flag failed with error %d\n",
@@ -4112,20 +4340,26 @@
 		goto out;
 	}
 
-	/* poll for max. 1000 iterations for fDeviceInit flag to clear */
-	for (i = 0; i < 1000 && !err && flag_res; i++)
-		err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
-			QUERY_FLAG_IDN_FDEVICEINIT, &flag_res);
+	/* Poll fDeviceInit flag to be cleared */
+	timeout = ktime_add_ms(ktime_get(), FDEVICEINIT_COMPL_TIMEOUT);
+	do {
+		err = ufshcd_query_flag(hba, UPIU_QUERY_OPCODE_READ_FLAG,
+					QUERY_FLAG_IDN_FDEVICEINIT, 0, &flag_res);
+		if (!flag_res)
+			break;
+		usleep_range(5000, 10000);
+	} while (ktime_before(ktime_get(), timeout));
 
-	if (err)
+	if (err) {
 		dev_err(hba->dev,
-			"%s reading fDeviceInit flag failed with error %d\n",
-			__func__, err);
-	else if (flag_res)
+				"%s reading fDeviceInit flag failed with error %d\n",
+				__func__, err);
+	} else if (flag_res) {
 		dev_err(hba->dev,
-			"%s fDeviceInit was not cleared by the device\n",
-			__func__);
-
+				"%s fDeviceInit was not cleared by the device\n",
+				__func__);
+		err = -EBUSY;
+	}
 out:
 	return err;
 }
@@ -4142,7 +4376,7 @@
  *
  * Returns 0 on success, non-zero value on failure
  */
-static int ufshcd_make_hba_operational(struct ufs_hba *hba)
+int ufshcd_make_hba_operational(struct ufs_hba *hba)
 {
 	int err = 0;
 	u32 reg;
@@ -4188,6 +4422,7 @@
 out:
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_make_hba_operational);
 
 /**
  * ufshcd_hba_stop - Send controller to reset state
@@ -4242,10 +4477,10 @@
 	 * instruction might be read back.
 	 * This delay can be changed based on the controller.
 	 */
-	usleep_range(1000, 1100);
+	ufshcd_delay_us(hba->vps->hba_enable_delay_us, 100);
 
 	/* wait for the host controller to complete initialization */
-	retry = 10;
+	retry = 50;
 	while (ufshcd_is_hba_active(hba)) {
 		if (retry) {
 			retry--;
@@ -4254,7 +4489,7 @@
 				"Controller enable failed\n");
 			return -EIO;
 		}
-		usleep_range(5000, 5100);
+		usleep_range(1000, 1100);
 	}
 
 	/* enable UIC related interrupts */
@@ -4265,7 +4500,7 @@
 	return 0;
 }
 
-static int ufshcd_hba_enable(struct ufs_hba *hba)
+int ufshcd_hba_enable(struct ufs_hba *hba)
 {
 	int ret;
 
@@ -4290,9 +4525,11 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(ufshcd_hba_enable);
+
 static int ufshcd_disable_tx_lcc(struct ufs_hba *hba, bool peer)
 {
-	int tx_lanes, i, err = 0;
+	int tx_lanes = 0, i, err = 0;
 
 	if (!peer)
 		ufshcd_dme_get(hba, UIC_ARG_MIB(PA_CONNECTEDTXDATALANES),
@@ -4326,13 +4563,14 @@
 	return ufshcd_disable_tx_lcc(hba, true);
 }
 
-static void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
-				   u32 reg)
+void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
+			    u32 reg)
 {
 	reg_hist->reg[reg_hist->pos] = reg;
 	reg_hist->tstamp[reg_hist->pos] = ktime_get();
 	reg_hist->pos = (reg_hist->pos + 1) % UFS_ERR_REG_HIST_LENGTH;
 }
+EXPORT_SYMBOL_GPL(ufshcd_update_reg_hist);
 
 /**
  * ufshcd_link_startup - Initialize unipro link startup
@@ -4408,6 +4646,8 @@
 	if (ret)
 		goto out;
 
+	/* Clear UECPA once due to LINERESET has happened during LINK_STARTUP */
+	ufshcd_readl(hba, REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER);
 	ret = ufshcd_make_hba_operational(hba);
 out:
 	if (ret) {
@@ -4562,6 +4802,9 @@
 	/* Mode sense(6) is not supported by UFS, so use Mode sense(10) */
 	sdev->use_10_for_ms = 1;
 
+	/* DBD field should be set to 1 in mode sense(10) */
+	sdev->set_dbd_for_ms = 1;
+
 	/* allow SCSI layer to restart the device in case of errors */
 	sdev->allow_restart = 1;
 
@@ -4601,8 +4844,15 @@
 static int ufshcd_slave_configure(struct scsi_device *sdev)
 {
 	struct request_queue *q = sdev->request_queue;
+	struct ufs_hba *hba = shost_priv(sdev->host);
 
 	blk_queue_update_dma_pad(q, PRDT_DATA_BYTE_COUNT_PAD - 1);
+
+	if (ufshcd_is_rpm_autosuspend_allowed(hba))
+		sdev->rpm_autosuspend = 1;
+
+	ufshcd_crypto_setup_rq_keyslot_manager(hba, q);
+
 	return 0;
 }
 
@@ -4677,6 +4927,12 @@
 	/* overall command status of utrd */
 	ocs = ufshcd_get_tr_ocs(lrbp);
 
+	if (hba->quirks & UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR) {
+		if (be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_1) &
+					MASK_RSP_UPIU_RESULT)
+			ocs = OCS_SUCCESS;
+	}
+
 	switch (ocs) {
 	case OCS_SUCCESS:
 		result = ufshcd_get_req_rsp(lrbp->ucd_rsp_ptr);
@@ -4709,8 +4965,15 @@
 			 * UFS device needs urgent BKOPs.
 			 */
 			if (!hba->pm_op_in_progress &&
-			    ufshcd_is_exception_event(lrbp->ucd_rsp_ptr))
-				schedule_work(&hba->eeh_work);
+			    ufshcd_is_exception_event(lrbp->ucd_rsp_ptr)) {
+				/*
+				 * Prevent suspend once eeh_work is scheduled
+				 * to avoid deadlock between ufshcd_suspend
+				 * and exception event handler.
+				 */
+				if (schedule_work(&hba->eeh_work))
+					pm_runtime_get_noresume(hba->dev);
+			}
 			break;
 		case UPIU_TRANSACTION_REJECT_UPIU:
 			/* TODO: handle Reject UPIU Response */
@@ -4738,6 +5001,9 @@
 	case OCS_MISMATCH_RESP_UPIU_SIZE:
 	case OCS_PEER_COMM_FAILURE:
 	case OCS_FATAL_ERROR:
+	case OCS_DEVICE_FATAL_ERROR:
+	case OCS_INVALID_CRYPTO_CONFIG:
+	case OCS_GENERAL_CRYPTO_ERROR:
 	default:
 		result |= DID_ERROR << 16;
 		dev_err(hba->dev,
@@ -4780,6 +5046,10 @@
 		complete(hba->uic_async_done);
 		retval = IRQ_HANDLED;
 	}
+
+	if (retval == IRQ_HANDLED)
+		ufshcd_add_uic_command_trace(hba, hba->active_uic_cmd,
+					     "complete");
 	return retval;
 }
 
@@ -4800,18 +5070,23 @@
 		lrbp = &hba->lrb[index];
 		cmd = lrbp->cmd;
 		if (cmd) {
+			trace_android_vh_ufs_compl_command(hba, lrbp);
 			ufshcd_add_command_trace(hba, index, "complete");
 			result = ufshcd_transfer_rsp_status(hba, lrbp);
 			scsi_dma_unmap(cmd);
 			cmd->result = result;
+			ufshcd_crypto_clear_prdt(hba, lrbp);
 			/* Mark completed command as NULL in LRB */
 			lrbp->cmd = NULL;
+			lrbp->compl_time_stamp = ktime_get();
 			/* Do not touch lrbp after scsi done */
 			cmd->scsi_done(cmd);
 			__ufshcd_release(hba);
 		} else if (lrbp->command_type == UTP_CMD_TYPE_DEV_MANAGE ||
 			lrbp->command_type == UTP_CMD_TYPE_UFS_STORAGE) {
+			lrbp->compl_time_stamp = ktime_get();
 			if (hba->dev_cmd.complete) {
+				trace_android_vh_ufs_compl_command(hba, lrbp);
 				ufshcd_add_command_trace(hba, index,
 						"dev_complete");
 				complete(hba->dev_cmd.complete);
@@ -4819,8 +5094,6 @@
 		}
 		if (ufshcd_is_clkscaling_supported(hba))
 			hba->clk_scaling.active_reqs--;
-
-		lrbp->compl_time_stamp = ktime_get();
 	}
 
 	/* clear corresponding bits of completed commands */
@@ -4939,7 +5212,7 @@
 		goto out;
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
-			QUERY_FLAG_IDN_BKOPS_EN, NULL);
+			QUERY_FLAG_IDN_BKOPS_EN, 0, NULL);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to enable bkops %d\n",
 				__func__, err);
@@ -4989,7 +5262,7 @@
 	}
 
 	err = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG,
-			QUERY_FLAG_IDN_BKOPS_EN, NULL);
+			QUERY_FLAG_IDN_BKOPS_EN, 0, NULL);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to disable bkops %d\n",
 				__func__, err);
@@ -5049,7 +5322,7 @@
  * to know whether auto bkops is enabled or disabled after this function
  * returns control to it.
  */
-static int ufshcd_bkops_ctrl(struct ufs_hba *hba,
+int ufshcd_bkops_ctrl(struct ufs_hba *hba,
 			     enum bkops_status status)
 {
 	int err;
@@ -5074,6 +5347,7 @@
 out:
 	return err;
 }
+EXPORT_SYMBOL_GPL(ufshcd_bkops_ctrl);
 
 /**
  * ufshcd_urgent_bkops - handle urgent bkops exception event
@@ -5133,6 +5407,190 @@
 				__func__, err);
 }
 
+static int ufshcd_wb_ctrl(struct ufs_hba *hba, bool enable)
+{
+	int ret;
+	u8 index;
+	enum query_opcode opcode;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return 0;
+
+	if (!(enable ^ hba->wb_enabled))
+		return 0;
+	if (enable)
+		opcode = UPIU_QUERY_OPCODE_SET_FLAG;
+	else
+		opcode = UPIU_QUERY_OPCODE_CLEAR_FLAG;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, opcode,
+				      QUERY_FLAG_IDN_WB_EN, index, NULL);
+	if (ret) {
+		dev_err(hba->dev, "%s write booster %s failed %d\n",
+			__func__, enable ? "enable" : "disable", ret);
+		return ret;
+	}
+
+	hba->wb_enabled = enable;
+	dev_dbg(hba->dev, "%s write booster %s %d\n",
+			__func__, enable ? "enable" : "disable", ret);
+
+	return ret;
+}
+
+static int ufshcd_wb_toggle_flush_during_h8(struct ufs_hba *hba, bool set)
+{
+	int val;
+	u8 index;
+
+	if (set)
+		val =  UPIU_QUERY_OPCODE_SET_FLAG;
+	else
+		val = UPIU_QUERY_OPCODE_CLEAR_FLAG;
+
+	index = ufshcd_wb_get_query_index(hba);
+	return ufshcd_query_flag_retry(hba, val,
+				QUERY_FLAG_IDN_WB_BUFF_FLUSH_DURING_HIBERN8,
+				index, NULL);
+}
+
+static inline void ufshcd_wb_toggle_flush(struct ufs_hba *hba, bool enable)
+{
+	if (enable)
+		ufshcd_wb_buf_flush_enable(hba);
+	else
+		ufshcd_wb_buf_flush_disable(hba);
+
+}
+
+static int ufshcd_wb_buf_flush_enable(struct ufs_hba *hba)
+{
+	int ret;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba) || hba->wb_buf_flush_enabled)
+		return 0;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_SET_FLAG,
+				      QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN,
+				      index, NULL);
+	if (ret)
+		dev_err(hba->dev, "%s WB - buf flush enable failed %d\n",
+			__func__, ret);
+	else
+		hba->wb_buf_flush_enabled = true;
+
+	dev_dbg(hba->dev, "WB - Flush enabled: %d\n", ret);
+	return ret;
+}
+
+static int ufshcd_wb_buf_flush_disable(struct ufs_hba *hba)
+{
+	int ret;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba) || !hba->wb_buf_flush_enabled)
+		return 0;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_CLEAR_FLAG,
+				      QUERY_FLAG_IDN_WB_BUFF_FLUSH_EN,
+				      index, NULL);
+	if (ret) {
+		dev_warn(hba->dev, "%s: WB - buf flush disable failed %d\n",
+			 __func__, ret);
+	} else {
+		hba->wb_buf_flush_enabled = false;
+		dev_dbg(hba->dev, "WB - Flush disabled: %d\n", ret);
+	}
+
+	return ret;
+}
+
+static bool ufshcd_wb_presrv_usrspc_keep_vcc_on(struct ufs_hba *hba,
+						u32 avail_buf)
+{
+	u32 cur_buf;
+	int ret;
+	u8 index;
+
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+					      QUERY_ATTR_IDN_CURR_WB_BUFF_SIZE,
+					      index, 0, &cur_buf);
+	if (ret) {
+		dev_err(hba->dev, "%s dCurWriteBoosterBufferSize read failed %d\n",
+			__func__, ret);
+		return false;
+	}
+
+	if (!cur_buf) {
+		dev_info(hba->dev, "dCurWBBuf: %d WB disabled until free-space is available\n",
+			 cur_buf);
+		return false;
+	}
+	/* Let it continue to flush when available buffer exceeds threshold */
+	if (avail_buf < hba->vps->wb_flush_threshold)
+		return true;
+
+	return false;
+}
+
+static bool ufshcd_wb_need_flush(struct ufs_hba *hba)
+{
+	int ret;
+	u32 avail_buf;
+	u8 index;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return false;
+	/*
+	 * The ufs device needs the vcc to be ON to flush.
+	 * With user-space reduction enabled, it's enough to enable flush
+	 * by checking only the available buffer. The threshold
+	 * defined here is > 90% full.
+	 * With user-space preserved enabled, the current-buffer
+	 * should be checked too because the wb buffer size can reduce
+	 * when disk tends to be full. This info is provided by current
+	 * buffer (dCurrentWriteBoosterBufferSize). There's no point in
+	 * keeping vcc on when current buffer is empty.
+	 */
+	index = ufshcd_wb_get_query_index(hba);
+	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_READ_ATTR,
+				      QUERY_ATTR_IDN_AVAIL_WB_BUFF_SIZE,
+				      index, 0, &avail_buf);
+	if (ret) {
+		dev_warn(hba->dev, "%s dAvailableWriteBoosterBufferSize read failed %d\n",
+			 __func__, ret);
+		return false;
+	}
+
+	if (!hba->dev_info.b_presrv_uspc_en) {
+		if (avail_buf <= UFS_WB_BUF_REMAIN_PERCENT(10))
+			return true;
+		return false;
+	}
+
+	return ufshcd_wb_presrv_usrspc_keep_vcc_on(hba, avail_buf);
+}
+
+static void ufshcd_rpm_dev_flush_recheck_work(struct work_struct *work)
+{
+	struct ufs_hba *hba = container_of(to_delayed_work(work),
+					   struct ufs_hba,
+					   rpm_dev_flush_recheck_work);
+	/*
+	 * To prevent unnecessary VCC power drain after device finishes
+	 * WriteBooster buffer flush or Auto BKOPs, force runtime resume
+	 * after a certain delay to recheck the threshold by next runtime
+	 * suspend.
+	 */
+	pm_runtime_get_sync(hba->dev);
+	pm_runtime_put_sync(hba->dev);
+}
+
 /**
  * ufshcd_exception_event_handler - handle exceptions raised by device
  * @work: pointer to work data
@@ -5148,7 +5606,7 @@
 	hba = container_of(work, struct ufs_hba, eeh_work);
 
 	pm_runtime_get_sync(hba->dev);
-	scsi_block_requests(hba->host);
+	ufshcd_scsi_block_requests(hba);
 	err = ufshcd_get_ee_status(hba, &status);
 	if (err) {
 		dev_err(hba->dev, "%s: failed to get exception status %d\n",
@@ -5162,8 +5620,15 @@
 		ufshcd_bkops_exception_event_handler(hba);
 
 out:
-	scsi_unblock_requests(hba->host);
-	pm_runtime_put_sync(hba->dev);
+	ufshcd_scsi_unblock_requests(hba);
+	/*
+	 * pm_runtime_get_noresume is called while scheduling
+	 * eeh_work to avoid suspend racing with exception work.
+	 * Hence decrement usage counter using pm_runtime_put_noidle
+	 * to allow suspend on completion of exception event handler.
+	 */
+	pm_runtime_put_noidle(hba->dev);
+	pm_runtime_put(hba->dev);
 	return;
 }
 
@@ -5247,6 +5712,121 @@
 	return err_handling;
 }
 
+/* host lock must be held before calling this func */
+static inline bool ufshcd_is_saved_err_fatal(struct ufs_hba *hba)
+{
+	return (hba->saved_uic_err & UFSHCD_UIC_DL_PA_INIT_ERROR) ||
+	       (hba->saved_err & (INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK));
+}
+
+/* host lock must be held before calling this func */
+static inline void ufshcd_schedule_eh_work(struct ufs_hba *hba)
+{
+	/* handle fatal errors only when link is not in error state */
+	if (hba->ufshcd_state != UFSHCD_STATE_ERROR) {
+		if (hba->force_reset || ufshcd_is_link_broken(hba) ||
+		    ufshcd_is_saved_err_fatal(hba))
+			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_FATAL;
+		else
+			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED_NON_FATAL;
+		queue_work(hba->eh_wq, &hba->eh_work);
+	}
+}
+
+static void ufshcd_err_handling_prepare(struct ufs_hba *hba)
+{
+	pm_runtime_get_sync(hba->dev);
+	if (pm_runtime_suspended(hba->dev)) {
+		/*
+		 * Don't assume anything of pm_runtime_get_sync(), if
+		 * resume fails, irq and clocks can be OFF, and powers
+		 * can be OFF or in LPM.
+		 */
+		ufshcd_setup_hba_vreg(hba, true);
+		ufshcd_enable_irq(hba);
+		ufshcd_setup_vreg(hba, true);
+		ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq);
+		ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq2);
+		ufshcd_hold(hba, false);
+		if (!ufshcd_is_clkgating_allowed(hba))
+			ufshcd_setup_clocks(hba, true);
+		ufshcd_release(hba);
+		ufshcd_vops_resume(hba, UFS_RUNTIME_PM);
+	} else {
+		ufshcd_hold(hba, false);
+		if (hba->clk_scaling.is_allowed) {
+			cancel_work_sync(&hba->clk_scaling.suspend_work);
+			cancel_work_sync(&hba->clk_scaling.resume_work);
+			ufshcd_suspend_clkscaling(hba);
+		}
+	}
+}
+
+static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
+{
+	ufshcd_release(hba);
+	if (hba->clk_scaling.is_allowed)
+		ufshcd_resume_clkscaling(hba);
+	pm_runtime_put(hba->dev);
+}
+
+static inline bool ufshcd_err_handling_should_stop(struct ufs_hba *hba)
+{
+	return (hba->ufshcd_state == UFSHCD_STATE_ERROR ||
+		(!(hba->saved_err || hba->saved_uic_err || hba->force_reset ||
+			ufshcd_is_link_broken(hba))));
+}
+
+#ifdef CONFIG_PM
+static void ufshcd_recover_pm_error(struct ufs_hba *hba)
+{
+	struct Scsi_Host *shost = hba->host;
+	struct scsi_device *sdev;
+	struct request_queue *q;
+	int ret;
+
+	/*
+	 * Set RPM status of hba device to RPM_ACTIVE,
+	 * this also clears its runtime error.
+	 */
+	ret = pm_runtime_set_active(hba->dev);
+	/*
+	 * If hba device had runtime error, we also need to resume those
+	 * scsi devices under hba in case any of them has failed to be
+	 * resumed due to hba runtime resume failure. This is to unblock
+	 * blk_queue_enter in case there are bios waiting inside it.
+	 */
+	if (!ret) {
+		shost_for_each_device(sdev, shost) {
+			q = sdev->request_queue;
+			if (q->dev && (q->rpm_status == RPM_SUSPENDED ||
+				       q->rpm_status == RPM_SUSPENDING))
+				pm_request_resume(q->dev);
+		}
+	}
+}
+#else
+static inline void ufshcd_recover_pm_error(struct ufs_hba *hba)
+{
+}
+#endif
+
+static bool ufshcd_is_pwr_mode_restore_needed(struct ufs_hba *hba)
+{
+	struct ufs_pa_layer_attr *pwr_info = &hba->pwr_info;
+	u32 mode;
+
+	ufshcd_dme_get(hba, UIC_ARG_MIB(PA_PWRMODE), &mode);
+
+	if (pwr_info->pwr_rx != ((mode >> PWRMODE_RX_OFFSET) & PWRMODE_MASK))
+		return true;
+
+	if (pwr_info->pwr_tx != (mode & PWRMODE_MASK))
+		return true;
+
+	return false;
+}
+
 /**
  * ufshcd_err_handler - handle UFS errors that require s/w attention
  * @work: pointer to work structure
@@ -5255,23 +5835,36 @@
 {
 	struct ufs_hba *hba;
 	unsigned long flags;
-	u32 err_xfer = 0;
-	u32 err_tm = 0;
-	int err = 0;
+	bool err_xfer = false;
+	bool err_tm = false;
+	int err = 0, pmc_err;
 	int tag;
-	bool needs_reset = false;
+	bool needs_reset = false, needs_restore = false;
 
 	hba = container_of(work, struct ufs_hba, eh_work);
 
-	pm_runtime_get_sync(hba->dev);
-	ufshcd_hold(hba, false);
-
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (hba->ufshcd_state == UFSHCD_STATE_RESET)
-		goto out;
-
-	hba->ufshcd_state = UFSHCD_STATE_RESET;
+	if (ufshcd_err_handling_should_stop(hba)) {
+		if (hba->ufshcd_state != UFSHCD_STATE_ERROR)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		return;
+	}
 	ufshcd_set_eh_in_progress(hba);
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	ufshcd_err_handling_prepare(hba);
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	ufshcd_scsi_block_requests(hba);
+	/*
+	 * A full reset and restore might have happened after preparation
+	 * is finished, double check whether we should stop.
+	 */
+	if (ufshcd_err_handling_should_stop(hba)) {
+		if (hba->ufshcd_state != UFSHCD_STATE_ERROR)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		goto out;
+	}
+	hba->ufshcd_state = UFSHCD_STATE_RESET;
 
 	/* Complete requests that have door-bell cleared by h/w */
 	ufshcd_complete_requests(hba);
@@ -5283,30 +5876,61 @@
 		/* release the lock as ufshcd_quirk_dl_nac_errors() may sleep */
 		ret = ufshcd_quirk_dl_nac_errors(hba);
 		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (!ret)
+		if (!ret && !hba->force_reset && ufshcd_is_link_active(hba))
 			goto skip_err_handling;
 	}
-	if ((hba->saved_err & INT_FATAL_ERRORS) ||
-	    (hba->saved_err & UFSHCD_UIC_HIBERN8_MASK) ||
+
+	if (hba->force_reset || ufshcd_is_link_broken(hba) ||
+	    ufshcd_is_saved_err_fatal(hba) ||
 	    ((hba->saved_err & UIC_ERROR) &&
-	    (hba->saved_uic_err & (UFSHCD_UIC_DL_PA_INIT_ERROR |
-				   UFSHCD_UIC_DL_NAC_RECEIVED_ERROR |
-				   UFSHCD_UIC_DL_TCx_REPLAY_ERROR))))
+	     (hba->saved_uic_err & (UFSHCD_UIC_DL_NAC_RECEIVED_ERROR |
+				    UFSHCD_UIC_DL_TCx_REPLAY_ERROR))))
 		needs_reset = true;
 
+	if ((hba->saved_err & (INT_FATAL_ERRORS | UFSHCD_UIC_HIBERN8_MASK)) ||
+	    (hba->saved_uic_err &&
+	     (hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR))) {
+		bool pr_prdt = !!(hba->saved_err & SYSTEM_BUS_FATAL_ERROR);
+
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		ufshcd_print_host_state(hba);
+		ufshcd_print_pwr_info(hba);
+		ufshcd_print_host_regs(hba);
+		ufshcd_print_tmrs(hba, hba->outstanding_tasks);
+		ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt);
+		spin_lock_irqsave(hba->host->host_lock, flags);
+	}
+
 	/*
 	 * if host reset is required then skip clearing the pending
 	 * transfers forcefully because they will get cleared during
 	 * host reset and restore
 	 */
 	if (needs_reset)
-		goto skip_pending_xfer_clear;
+		goto do_reset;
 
+	/*
+	 * If LINERESET was caught, UFS might have been put to PWM mode,
+	 * check if power mode restore is needed.
+	 */
+	if (hba->saved_uic_err & UFSHCD_UIC_PA_GENERIC_ERROR) {
+		hba->saved_uic_err &= ~UFSHCD_UIC_PA_GENERIC_ERROR;
+		if (!hba->saved_uic_err)
+			hba->saved_err &= ~UIC_ERROR;
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		if (ufshcd_is_pwr_mode_restore_needed(hba))
+			needs_restore = true;
+		spin_lock_irqsave(hba->host->host_lock, flags);
+		if (!hba->saved_err && !needs_restore)
+			goto skip_err_handling;
+	}
+
+	hba->silence_err_logs = true;
 	/* release lock as clear command might sleep */
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	/* Clear pending transfer requests */
 	for_each_set_bit(tag, &hba->outstanding_reqs, hba->nutrs) {
-		if (ufshcd_clear_cmd(hba, tag)) {
+		if (ufshcd_try_to_abort_task(hba, tag)) {
 			err_xfer = true;
 			goto lock_skip_pending_xfer_clear;
 		}
@@ -5325,11 +5949,38 @@
 
 	/* Complete the requests that are cleared by s/w */
 	ufshcd_complete_requests(hba);
+	hba->silence_err_logs = false;
 
-	if (err_xfer || err_tm)
+	if (err_xfer || err_tm) {
 		needs_reset = true;
+		goto do_reset;
+	}
 
-skip_pending_xfer_clear:
+	/*
+	 * After all reqs and tasks are cleared from doorbell,
+	 * now it is safe to retore power mode.
+	 */
+	if (needs_restore) {
+		spin_unlock_irqrestore(hba->host->host_lock, flags);
+		/*
+		 * Hold the scaling lock just in case dev cmds
+		 * are sent via bsg and/or sysfs.
+		 */
+		down_write(&hba->clk_scaling_lock);
+		hba->force_pmc = true;
+		pmc_err = ufshcd_config_pwr_mode(hba, &(hba->pwr_info));
+		if (pmc_err) {
+			needs_reset = true;
+			dev_err(hba->dev, "%s: Failed to restore power mode, err = %d\n",
+					__func__, pmc_err);
+		}
+		hba->force_pmc = false;
+		ufshcd_print_pwr_info(hba);
+		up_write(&hba->clk_scaling_lock);
+		spin_lock_irqsave(hba->host->host_lock, flags);
+	}
+
+do_reset:
 	/* Fatal errors need reset */
 	if (needs_reset) {
 		unsigned long max_doorbells = (1UL << hba->nutrs) - 1;
@@ -5345,38 +5996,31 @@
 			__ufshcd_transfer_req_compl(hba,
 						    (1UL << (hba->nutrs - 1)));
 
+		hba->force_reset = false;
 		spin_unlock_irqrestore(hba->host->host_lock, flags);
 		err = ufshcd_reset_and_restore(hba);
+		if (err)
+			dev_err(hba->dev, "%s: reset and restore failed with err %d\n",
+					__func__, err);
+		else
+			ufshcd_recover_pm_error(hba);
 		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (err) {
-			dev_err(hba->dev, "%s: reset and restore failed\n",
-					__func__);
-			hba->ufshcd_state = UFSHCD_STATE_ERROR;
-		}
-		/*
-		 * Inform scsi mid-layer that we did reset and allow to handle
-		 * Unit Attention properly.
-		 */
-		scsi_report_bus_reset(hba->host, 0);
-		hba->saved_err = 0;
-		hba->saved_uic_err = 0;
 	}
 
 skip_err_handling:
 	if (!needs_reset) {
-		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+		if (hba->ufshcd_state == UFSHCD_STATE_RESET)
+			hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
 		if (hba->saved_err || hba->saved_uic_err)
 			dev_err_ratelimited(hba->dev, "%s: exit: saved_err 0x%x saved_uic_err 0x%x",
 			    __func__, hba->saved_err, hba->saved_uic_err);
 	}
 
-	ufshcd_clear_eh_in_progress(hba);
-
 out:
+	ufshcd_clear_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 	ufshcd_scsi_unblock_requests(hba);
-	ufshcd_release(hba);
-	pm_runtime_put_sync(hba->dev);
+	ufshcd_err_handling_unprepare(hba);
 }
 
 /**
@@ -5392,17 +6036,33 @@
 	u32 reg;
 	irqreturn_t retval = IRQ_NONE;
 
-	/* PHY layer lane error */
+	/* PHY layer error */
 	reg = ufshcd_readl(hba, REG_UIC_ERROR_CODE_PHY_ADAPTER_LAYER);
-	/* Ignore LINERESET indication, as this is not an error */
 	if ((reg & UIC_PHY_ADAPTER_LAYER_ERROR) &&
-	    (reg & UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK)) {
+	    (reg & UIC_PHY_ADAPTER_LAYER_ERROR_CODE_MASK)) {
+		ufshcd_update_reg_hist(&hba->ufs_stats.pa_err, reg);
 		/*
 		 * To know whether this error is fatal or not, DB timeout
 		 * must be checked but this error is handled separately.
 		 */
-		dev_dbg(hba->dev, "%s: UIC Lane error reported\n", __func__);
-		ufshcd_update_reg_hist(&hba->ufs_stats.pa_err, reg);
+		if (reg & UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK)
+			dev_dbg(hba->dev, "%s: UIC Lane error reported\n",
+					__func__);
+
+		/* Got a LINERESET indication. */
+		if (reg & UIC_PHY_ADAPTER_LAYER_GENERIC_ERROR) {
+			struct uic_command *cmd = NULL;
+
+			hba->uic_error |= UFSHCD_UIC_PA_GENERIC_ERROR;
+			if (hba->uic_async_done && hba->active_uic_cmd)
+				cmd = hba->active_uic_cmd;
+			/*
+			 * Ignore the LINERESET during power mode change
+			 * operation via DME_SET command.
+			 */
+			if (cmd && (cmd->command == UIC_CMD_DME_SET))
+				hba->uic_error &= ~UFSHCD_UIC_PA_GENERIC_ERROR;
+		}
 		retval |= IRQ_HANDLED;
 	}
 
@@ -5506,9 +6166,12 @@
 			hba->errors, ufshcd_get_upmcrs(hba));
 		ufshcd_update_reg_hist(&hba->ufs_stats.auto_hibern8_err,
 				       hba->errors);
+		ufshcd_set_link_broken(hba);
 		queue_eh_work = true;
 	}
 
+	trace_android_vh_ufs_check_int_errors(hba, queue_eh_work);
+
 	if (queue_eh_work) {
 		/*
 		 * update the transfer error masks to sticky bits, let's do this
@@ -5517,30 +6180,18 @@
 		hba->saved_err |= hba->errors;
 		hba->saved_uic_err |= hba->uic_error;
 
-		/* handle fatal errors only when link is functional */
-		if (hba->ufshcd_state == UFSHCD_STATE_OPERATIONAL) {
-			/* block commands from scsi mid-layer */
-			ufshcd_scsi_block_requests(hba);
-
-			hba->ufshcd_state = UFSHCD_STATE_EH_SCHEDULED;
-
-			/* dump controller state before resetting */
-			if (hba->saved_err & (INT_FATAL_ERRORS | UIC_ERROR)) {
-				bool pr_prdt = !!(hba->saved_err &
-						SYSTEM_BUS_FATAL_ERROR);
-
-				dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
+		/* dump controller state before resetting */
+		if ((hba->saved_err & (INT_FATAL_ERRORS)) ||
+		    (hba->saved_uic_err &&
+		     (hba->saved_uic_err != UFSHCD_UIC_PA_GENERIC_ERROR))) {
+			dev_err(hba->dev, "%s: saved_err 0x%x saved_uic_err 0x%x\n",
 					__func__, hba->saved_err,
 					hba->saved_uic_err);
-
-				ufshcd_print_host_regs(hba);
-				ufshcd_print_pwr_info(hba);
-				ufshcd_print_tmrs(hba, hba->outstanding_tasks);
-				ufshcd_print_trs(hba, hba->outstanding_reqs,
-							pr_prdt);
-			}
-			schedule_work(&hba->eh_work);
+			ufshcd_dump_regs(hba, 0, UFSHCI_REG_SPACE_SIZE,
+					 "host_regs: ");
+			ufshcd_print_pwr_info(hba);
 		}
+		ufshcd_schedule_eh_work(hba);
 		retval |= IRQ_HANDLED;
 	}
 	/*
@@ -5644,6 +6295,8 @@
 
 	spin_lock(hba->host->host_lock);
 	intr_status = ufshcd_readl(hba, REG_INTERRUPT_STATUS);
+	hba->ufs_stats.last_intr_status = intr_status;
+	hba->ufs_stats.last_intr_ts = ktime_get();
 
 	/*
 	 * There could be max of hba->nutrs reqs in flight and in worst case
@@ -5871,6 +6524,7 @@
 	lrbp->task_tag = tag;
 	lrbp->lun = 0;
 	lrbp->intr_cmd = true;
+	ufshcd_prepare_lrbp_crypto(NULL, lrbp);
 	hba->dev_cmd.type = cmd_type;
 
 	switch (hba->ufs_version) {
@@ -6073,7 +6727,7 @@
 }
 
 /**
- * ufshcd_abort - abort a specific command
+ * ufshcd_try_to_abort_task - abort a specific task
  * @cmd: SCSI command pointer
  *
  * Abort the pending command in device by sending UFS_ABORT_TASK task management
@@ -6082,6 +6736,80 @@
  * issued. To avoid that, first issue UFS_QUERY_TASK to check if the command is
  * really issued and then try to abort it.
  *
+ * Returns zero on success, non-zero on failure
+ */
+static int ufshcd_try_to_abort_task(struct ufs_hba *hba, int tag)
+{
+	struct ufshcd_lrb *lrbp = &hba->lrb[tag];
+	int err = 0;
+	int poll_cnt;
+	u8 resp = 0xF;
+	u32 reg;
+
+	for (poll_cnt = 100; poll_cnt; poll_cnt--) {
+		err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
+				UFS_QUERY_TASK, &resp);
+		if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED) {
+			/* cmd pending in the device */
+			dev_err(hba->dev, "%s: cmd pending in the device. tag = %d\n",
+				__func__, tag);
+			break;
+		} else if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
+			/*
+			 * cmd not pending in the device, check if it is
+			 * in transition.
+			 */
+			dev_err(hba->dev, "%s: cmd at tag %d not pending in the device.\n",
+				__func__, tag);
+			reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
+			if (reg & (1 << tag)) {
+				/* sleep for max. 200us to stabilize */
+				usleep_range(100, 200);
+				continue;
+			}
+			/* command completed already */
+			dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n",
+				__func__, tag);
+			goto out;
+		} else {
+			dev_err(hba->dev,
+				"%s: no response from device. tag = %d, err %d\n",
+				__func__, tag, err);
+			if (!err)
+				err = resp; /* service response error */
+			goto out;
+		}
+	}
+
+	if (!poll_cnt) {
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
+			UFS_ABORT_TASK, &resp);
+	if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
+		if (!err) {
+			err = resp; /* service response error */
+			dev_err(hba->dev, "%s: issued. tag = %d, err %d\n",
+				__func__, tag, err);
+		}
+		goto out;
+	}
+
+	err = ufshcd_clear_cmd(hba, tag);
+	if (err)
+		dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n",
+			__func__, tag, err);
+
+out:
+	return err;
+}
+
+/**
+ * ufshcd_abort - scsi host template eh_abort_handler callback
+ * @cmd: SCSI command pointer
+ *
  * Returns SUCCESS/FAILED
  */
 static int ufshcd_abort(struct scsi_cmnd *cmd)
@@ -6091,8 +6819,6 @@
 	unsigned long flags;
 	unsigned int tag;
 	int err = 0;
-	int poll_cnt;
-	u8 resp = 0xF;
 	struct ufshcd_lrb *lrbp;
 	u32 reg;
 
@@ -6161,70 +6887,12 @@
 		goto out;
 	}
 
-	for (poll_cnt = 100; poll_cnt; poll_cnt--) {
-		err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
-				UFS_QUERY_TASK, &resp);
-		if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_SUCCEEDED) {
-			/* cmd pending in the device */
-			dev_err(hba->dev, "%s: cmd pending in the device. tag = %d\n",
-				__func__, tag);
-			break;
-		} else if (!err && resp == UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
-			/*
-			 * cmd not pending in the device, check if it is
-			 * in transition.
-			 */
-			dev_err(hba->dev, "%s: cmd at tag %d not pending in the device.\n",
-				__func__, tag);
-			reg = ufshcd_readl(hba, REG_UTP_TRANSFER_REQ_DOOR_BELL);
-			if (reg & (1 << tag)) {
-				/* sleep for max. 200us to stabilize */
-				usleep_range(100, 200);
-				continue;
-			}
-			/* command completed already */
-			dev_err(hba->dev, "%s: cmd at tag %d successfully cleared from DB.\n",
-				__func__, tag);
-			goto cleanup;
-		} else {
-			dev_err(hba->dev,
-				"%s: no response from device. tag = %d, err %d\n",
-				__func__, tag, err);
-			if (!err)
-				err = resp; /* service response error */
-			goto out;
-		}
-	}
-
-	if (!poll_cnt) {
-		err = -EBUSY;
+	err = ufshcd_try_to_abort_task(hba, tag);
+	if (err)
 		goto out;
-	}
-
-	err = ufshcd_issue_tm_cmd(hba, lrbp->lun, lrbp->task_tag,
-			UFS_ABORT_TASK, &resp);
-	if (err || resp != UPIU_TASK_MANAGEMENT_FUNC_COMPL) {
-		if (!err) {
-			err = resp; /* service response error */
-			dev_err(hba->dev, "%s: issued. tag = %d, err %d\n",
-				__func__, tag, err);
-		}
-		goto out;
-	}
-
-	err = ufshcd_clear_cmd(hba, tag);
-	if (err) {
-		dev_err(hba->dev, "%s: Failed clearing cmd at tag %d, err %d\n",
-			__func__, tag, err);
-		goto out;
-	}
-
-cleanup:
-	scsi_dma_unmap(cmd);
 
 	spin_lock_irqsave(host->host_lock, flags);
-	ufshcd_outstanding_req_clear(hba, tag);
-	hba->lrb[tag].cmd = NULL;
+	__ufshcd_transfer_req_compl(hba, (1UL << tag));
 	spin_unlock_irqrestore(host->host_lock, flags);
 
 out:
@@ -6271,17 +6939,15 @@
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	/* scale up clocks to max frequency before full reinitialization */
-	ufshcd_scale_clks(hba, true);
+	ufshcd_set_clk_freq(hba, true);
 
 	err = ufshcd_hba_enable(hba);
 	if (err)
 		goto out;
 
 	/* Establish the link again and restore the device */
-	err = ufshcd_probe_hba(hba);
+	err = ufshcd_probe_hba(hba, false);
 
-	if (!err && (hba->ufshcd_state != UFSHCD_STATE_OPERATIONAL))
-		err = -EIO;
 out:
 	if (err)
 		dev_err(hba->dev, "%s: Host init failed %d\n", __func__, err);
@@ -6300,9 +6966,23 @@
  */
 static int ufshcd_reset_and_restore(struct ufs_hba *hba)
 {
+	u32 saved_err;
+	u32 saved_uic_err;
 	int err = 0;
+	unsigned long flags;
 	int retries = MAX_HOST_RESET_RETRIES;
 
+	/*
+	 * This is a fresh start, cache and clear saved error first,
+	 * in case new error generated during reset and restore.
+	 */
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	saved_err = hba->saved_err;
+	saved_uic_err = hba->saved_uic_err;
+	hba->saved_err = 0;
+	hba->saved_uic_err = 0;
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
 	do {
 		/* Reset the attached device */
 		ufshcd_vops_device_reset(hba);
@@ -6310,6 +6990,18 @@
 		err = ufshcd_host_reset_and_restore(hba);
 	} while (err && --retries);
 
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	/*
+	 * Inform scsi mid-layer that we did reset and allow to handle
+	 * Unit Attention properly.
+	 */
+	scsi_report_bus_reset(hba->host, 0);
+	if (err) {
+		hba->saved_err |= saved_err;
+		hba->saved_uic_err |= saved_uic_err;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+
 	return err;
 }
 
@@ -6321,48 +7013,25 @@
  */
 static int ufshcd_eh_host_reset_handler(struct scsi_cmnd *cmd)
 {
-	int err;
+	int err = SUCCESS;
 	unsigned long flags;
 	struct ufs_hba *hba;
 
 	hba = shost_priv(cmd->device->host);
 
-	ufshcd_hold(hba, false);
-	/*
-	 * Check if there is any race with fatal error handling.
-	 * If so, wait for it to complete. Even though fatal error
-	 * handling does reset and restore in some cases, don't assume
-	 * anything out of it. We are just avoiding race here.
-	 */
-	do {
-		spin_lock_irqsave(hba->host->host_lock, flags);
-		if (!(work_pending(&hba->eh_work) ||
-			    hba->ufshcd_state == UFSHCD_STATE_RESET ||
-			    hba->ufshcd_state == UFSHCD_STATE_EH_SCHEDULED))
-			break;
-		spin_unlock_irqrestore(hba->host->host_lock, flags);
-		dev_dbg(hba->dev, "%s: reset in progress\n", __func__);
-		flush_work(&hba->eh_work);
-	} while (1);
-
-	hba->ufshcd_state = UFSHCD_STATE_RESET;
-	ufshcd_set_eh_in_progress(hba);
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	hba->force_reset = true;
+	ufshcd_schedule_eh_work(hba);
+	dev_err(hba->dev, "%s: reset in progress - 1\n", __func__);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
-	err = ufshcd_reset_and_restore(hba);
+	flush_work(&hba->eh_work);
 
 	spin_lock_irqsave(hba->host->host_lock, flags);
-	if (!err) {
-		err = SUCCESS;
-		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
-	} else {
+	if (hba->ufshcd_state == UFSHCD_STATE_ERROR)
 		err = FAILED;
-		hba->ufshcd_state = UFSHCD_STATE_ERROR;
-	}
-	ufshcd_clear_eh_in_progress(hba);
 	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
-	ufshcd_release(hba);
 	return err;
 }
 
@@ -6454,11 +7123,12 @@
 	return icc_level;
 }
 
-static void ufshcd_init_icc_levels(struct ufs_hba *hba)
+static void ufshcd_set_active_icc_lvl(struct ufs_hba *hba)
 {
 	int ret;
 	int buff_len = hba->desc_size.pwr_desc;
 	u8 *desc_buf;
+	u32 icc_level;
 
 	desc_buf = kmalloc(buff_len, GFP_KERNEL);
 	if (!desc_buf)
@@ -6472,25 +7142,32 @@
 		goto out;
 	}
 
-	hba->init_prefetch_data.icc_level =
-			ufshcd_find_max_sup_active_icc_level(hba,
-			desc_buf, buff_len);
-	dev_dbg(hba->dev, "%s: setting icc_level 0x%x",
-			__func__, hba->init_prefetch_data.icc_level);
+	icc_level = ufshcd_find_max_sup_active_icc_level(hba, desc_buf,
+							 buff_len);
+	dev_dbg(hba->dev, "%s: setting icc_level 0x%x", __func__, icc_level);
 
 	ret = ufshcd_query_attr_retry(hba, UPIU_QUERY_OPCODE_WRITE_ATTR,
-		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0,
-		&hba->init_prefetch_data.icc_level);
+		QUERY_ATTR_IDN_ACTIVE_ICC_LVL, 0, 0, &icc_level);
 
 	if (ret)
 		dev_err(hba->dev,
 			"%s: Failed configuring bActiveICCLevel = %d ret = %d",
-			__func__, hba->init_prefetch_data.icc_level , ret);
+			__func__, icc_level, ret);
 
 out:
 	kfree(desc_buf);
 }
 
+static inline void ufshcd_blk_pm_runtime_init(struct scsi_device *sdev)
+{
+	scsi_autopm_get_device(sdev);
+	blk_pm_runtime_init(sdev->request_queue, &sdev->sdev_gendev);
+	if (sdev->rpm_autosuspend)
+		pm_runtime_set_autosuspend_delay(&sdev->sdev_gendev,
+						 RPM_AUTOSUSPEND_DELAY_MS);
+	scsi_autopm_put_device(sdev);
+}
+
 /**
  * ufshcd_scsi_add_wlus - Adds required W-LUs
  * @hba: per-adapter instance
@@ -6530,6 +7207,7 @@
 		hba->sdev_ufs_device = NULL;
 		goto out;
 	}
+	ufshcd_blk_pm_runtime_init(hba->sdev_ufs_device);
 	scsi_device_put(hba->sdev_ufs_device);
 
 	sdev_rpmb = __scsi_add_device(hba->host, 0, 0,
@@ -6538,14 +7216,17 @@
 		ret = PTR_ERR(sdev_rpmb);
 		goto remove_sdev_ufs_device;
 	}
+	ufshcd_blk_pm_runtime_init(sdev_rpmb);
 	scsi_device_put(sdev_rpmb);
 
 	sdev_boot = __scsi_add_device(hba->host, 0, 0,
 		ufshcd_upiu_wlun_to_scsi_wlun(UFS_UPIU_BOOT_WLUN), NULL);
-	if (IS_ERR(sdev_boot))
+	if (IS_ERR(sdev_boot)) {
 		dev_err(hba->dev, "%s: BOOT WLUN not found\n", __func__);
-	else
+	} else {
+		ufshcd_blk_pm_runtime_init(sdev_boot);
 		scsi_device_put(sdev_boot);
+	}
 	goto out;
 
 remove_sdev_ufs_device:
@@ -6554,16 +7235,110 @@
 	return ret;
 }
 
-static int ufs_get_device_desc(struct ufs_hba *hba,
-			       struct ufs_dev_desc *dev_desc)
+static void ufshcd_wb_probe(struct ufs_hba *hba, u8 *desc_buf)
+{
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+	u8 lun;
+	u32 d_lu_wb_buf_alloc;
+
+	if (!ufshcd_is_wb_allowed(hba))
+		return;
+	/*
+	 * Probe WB only for UFS-2.2 and UFS-3.1 (and later) devices or
+	 * UFS devices with quirk UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES
+	 * enabled
+	 */
+	if (!(dev_info->wspecversion >= 0x310 ||
+	      dev_info->wspecversion == 0x220 ||
+	     (hba->dev_quirks & UFS_DEVICE_QUIRK_SUPPORT_EXTENDED_FEATURES)))
+		goto wb_disabled;
+
+	if (hba->desc_size.dev_desc < DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP + 4)
+		goto wb_disabled;
+
+	dev_info->d_ext_ufs_feature_sup =
+		get_unaligned_be32(desc_buf +
+				   DEVICE_DESC_PARAM_EXT_UFS_FEATURE_SUP);
+
+	if (!(dev_info->d_ext_ufs_feature_sup & UFS_DEV_WRITE_BOOSTER_SUP))
+		goto wb_disabled;
+
+	/*
+	 * WB may be supported but not configured while provisioning.
+	 * The spec says, in dedicated wb buffer mode,
+	 * a max of 1 lun would have wb buffer configured.
+	 * Now only shared buffer mode is supported.
+	 */
+	dev_info->b_wb_buffer_type =
+		desc_buf[DEVICE_DESC_PARAM_WB_TYPE];
+
+	dev_info->b_presrv_uspc_en =
+		desc_buf[DEVICE_DESC_PARAM_WB_PRESRV_USRSPC_EN];
+
+	if (dev_info->b_wb_buffer_type == WB_BUF_MODE_SHARED) {
+		dev_info->d_wb_alloc_units =
+		get_unaligned_be32(desc_buf +
+				   DEVICE_DESC_PARAM_WB_SHARED_ALLOC_UNITS);
+		if (!dev_info->d_wb_alloc_units)
+			goto wb_disabled;
+	} else {
+		for (lun = 0; lun < UFS_UPIU_MAX_WB_LUN_ID; lun++) {
+			d_lu_wb_buf_alloc = 0;
+			ufshcd_read_unit_desc_param(hba,
+					lun,
+					UNIT_DESC_PARAM_WB_BUF_ALLOC_UNITS,
+					(u8 *)&d_lu_wb_buf_alloc,
+					sizeof(d_lu_wb_buf_alloc));
+			if (d_lu_wb_buf_alloc) {
+				dev_info->wb_dedicated_lu = lun;
+				break;
+			}
+		}
+
+		if (!d_lu_wb_buf_alloc)
+			goto wb_disabled;
+	}
+	return;
+
+wb_disabled:
+	hba->caps &= ~UFSHCD_CAP_WB_EN;
+}
+
+void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups)
+{
+	struct ufs_dev_fix *f;
+	struct ufs_dev_info *dev_info = &hba->dev_info;
+
+	if (!fixups)
+		return;
+
+	for (f = fixups; f->quirk; f++) {
+		if ((f->wmanufacturerid == dev_info->wmanufacturerid ||
+		     f->wmanufacturerid == UFS_ANY_VENDOR) &&
+		     ((dev_info->model &&
+		       STR_PRFX_EQUAL(f->model, dev_info->model)) ||
+		      !strcmp(f->model, UFS_ANY_MODEL)))
+			hba->dev_quirks |= f->quirk;
+	}
+}
+EXPORT_SYMBOL_GPL(ufshcd_fixup_dev_quirks);
+
+static void ufs_fixup_device_setup(struct ufs_hba *hba)
+{
+	/* fix by general quirk table */
+	ufshcd_fixup_dev_quirks(hba, ufs_fixups);
+
+	/* allow vendors to fix quirks */
+	ufshcd_vops_fixup_dev_quirks(hba);
+}
+
+static int ufs_get_device_desc(struct ufs_hba *hba)
 {
 	int err;
 	size_t buff_len;
 	u8 model_index;
 	u8 *desc_buf;
-
-	if (!dev_desc)
-		return -EINVAL;
+	struct ufs_dev_info *dev_info = &hba->dev_info;
 
 	buff_len = max_t(size_t, hba->desc_size.dev_desc,
 			 QUERY_DESC_MAX_SIZE + 1);
@@ -6584,18 +7359,29 @@
 	 * getting vendor (manufacturerID) and Bank Index in big endian
 	 * format
 	 */
-	dev_desc->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
+	dev_info->wmanufacturerid = desc_buf[DEVICE_DESC_PARAM_MANF_ID] << 8 |
 				     desc_buf[DEVICE_DESC_PARAM_MANF_ID + 1];
 
+	/* getting Specification Version in big endian format */
+	dev_info->wspecversion = desc_buf[DEVICE_DESC_PARAM_SPEC_VER] << 8 |
+				      desc_buf[DEVICE_DESC_PARAM_SPEC_VER + 1];
+
 	model_index = desc_buf[DEVICE_DESC_PARAM_PRDCT_NAME];
+
 	err = ufshcd_read_string_desc(hba, model_index,
-				      &dev_desc->model, SD_ASCII_STD);
+				      &dev_info->model, SD_ASCII_STD);
 	if (err < 0) {
 		dev_err(hba->dev, "%s: Failed reading Product Name. err = %d\n",
 			__func__, err);
 		goto out;
 	}
 
+	ufshcd_get_ref_clk_gating_wait(hba);
+
+	ufs_fixup_device_setup(hba);
+
+	ufshcd_wb_probe(hba, desc_buf);
+
 	/*
 	 * ufshcd_read_string_desc returns size of the string
 	 * reset the error value
@@ -6607,25 +7393,12 @@
 	return err;
 }
 
-static void ufs_put_device_desc(struct ufs_dev_desc *dev_desc)
+static void ufs_put_device_desc(struct ufs_hba *hba)
 {
-	kfree(dev_desc->model);
-	dev_desc->model = NULL;
-}
+	struct ufs_dev_info *dev_info = &hba->dev_info;
 
-static void ufs_fixup_device_setup(struct ufs_hba *hba,
-				   struct ufs_dev_desc *dev_desc)
-{
-	struct ufs_dev_fix *f;
-
-	for (f = ufs_fixups; f->quirk; f++) {
-		if ((f->card.wmanufacturerid == dev_desc->wmanufacturerid ||
-		     f->card.wmanufacturerid == UFS_ANY_VENDOR) &&
-		     ((dev_desc->model &&
-		       STR_PRFX_EQUAL(f->card.model, dev_desc->model)) ||
-		      !strcmp(f->card.model, UFS_ANY_MODEL)))
-			hba->dev_quirks |= f->quirk;
-	}
+	kfree(dev_info->model);
+	dev_info->model = NULL;
 }
 
 /**
@@ -6775,22 +7548,21 @@
 	return ret;
 }
 
-static void ufshcd_tune_unipro_params(struct ufs_hba *hba,
-				      struct ufs_dev_desc *card)
+static void ufshcd_tune_unipro_params(struct ufs_hba *hba)
 {
 	if (ufshcd_is_unipro_pa_params_tuning_req(hba)) {
 		ufshcd_tune_pa_tactivate(hba);
 		ufshcd_tune_pa_hibern8time(hba);
 	}
 
+	ufshcd_vops_apply_dev_quirks(hba);
+
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_PA_TACTIVATE)
 		/* set 1ms timeout for PA_TACTIVATE */
 		ufshcd_dme_set(hba, UIC_ARG_MIB(PA_TACTIVATE), 10);
 
 	if (hba->dev_quirks & UFS_DEVICE_QUIRK_HOST_PA_TACTIVATE)
 		ufshcd_quirk_tune_host_pa_tactivate(hba);
-
-	ufshcd_vops_apply_dev_quirks(hba, card);
 }
 
 static void ufshcd_clear_dbg_ufs_stats(struct ufs_hba *hba)
@@ -6840,6 +7612,37 @@
 		hba->desc_size.hlth_desc = QUERY_DESC_HEALTH_DEF_SIZE;
 }
 
+static int ufshcd_device_geo_params_init(struct ufs_hba *hba)
+{
+	int err;
+	size_t buff_len;
+	u8 *desc_buf;
+
+	buff_len = hba->desc_size.geom_desc;
+	desc_buf = kmalloc(buff_len, GFP_KERNEL);
+	if (!desc_buf) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	err = ufshcd_read_desc(hba, QUERY_DESC_IDN_GEOMETRY, 0,
+			desc_buf, buff_len);
+	if (err) {
+		dev_err(hba->dev, "%s: Failed reading Geometry Desc. err = %d\n",
+				__func__, err);
+		goto out;
+	}
+
+	if (desc_buf[GEOMETRY_DESC_PARAM_MAX_NUM_LUN] == 1)
+		hba->dev_info.max_lu_supported = 32;
+	else if (desc_buf[GEOMETRY_DESC_PARAM_MAX_NUM_LUN] == 0)
+		hba->dev_info.max_lu_supported = 8;
+
+out:
+	kfree(desc_buf);
+	return err;
+}
+
 static struct ufs_ref_clk ufs_ref_clk_freqs[] = {
 	{19200000, REF_CLK_FREQ_19_2_MHZ},
 	{26000000, REF_CLK_FREQ_26_MHZ},
@@ -6908,16 +7711,126 @@
 	return err;
 }
 
+static int ufshcd_device_params_init(struct ufs_hba *hba)
+{
+	bool flag;
+	int ret;
+
+	/* Init check for device descriptor sizes */
+	ufshcd_init_desc_sizes(hba);
+
+	/* Init UFS geometry descriptor related parameters */
+	ret = ufshcd_device_geo_params_init(hba);
+	if (ret)
+		goto out;
+
+	/* Check and apply UFS device quirks */
+	ret = ufs_get_device_desc(hba);
+	if (ret) {
+		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
+			__func__, ret);
+		goto out;
+	}
+
+	if (!ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
+			QUERY_FLAG_IDN_PWR_ON_WPE, 0, &flag))
+		hba->dev_info.f_power_on_wp_en = flag;
+
+	/* Probe maximum power mode co-supported by both UFS host and device */
+	if (ufshcd_get_max_pwr_mode(hba))
+		dev_err(hba->dev,
+			"%s: Failed getting max supported power mode\n",
+			__func__);
+out:
+	return ret;
+}
+
+/**
+ * ufshcd_add_lus - probe and add UFS logical units
+ * @hba: per-adapter instance
+ */
+static int ufshcd_add_lus(struct ufs_hba *hba)
+{
+	int ret;
+
+	/* Add required well known logical units to scsi mid layer */
+	ret = ufshcd_scsi_add_wlus(hba);
+	if (ret)
+		goto out;
+
+	/* Initialize devfreq after UFS device is detected */
+	if (ufshcd_is_clkscaling_supported(hba)) {
+		memcpy(&hba->clk_scaling.saved_pwr_info.info,
+			&hba->pwr_info,
+			sizeof(struct ufs_pa_layer_attr));
+		hba->clk_scaling.saved_pwr_info.is_valid = true;
+		if (!hba->devfreq) {
+			ret = ufshcd_devfreq_init(hba);
+			if (ret)
+				goto out;
+		}
+
+		hba->clk_scaling.is_allowed = true;
+	}
+
+	ufs_bsg_probe(hba);
+	scsi_scan_host(hba->host);
+	pm_runtime_put_sync(hba->dev);
+
+out:
+	return ret;
+}
+
+static int
+ufshcd_send_request_sense(struct ufs_hba *hba, struct scsi_device *sdp);
+
+static int ufshcd_clear_uac(struct ufs_hba *hba)
+{
+	struct scsi_device *sdp;
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	sdp = hba->sdev_ufs_device;
+	if (sdp) {
+		ret = scsi_device_get(sdp);
+		if (!ret && !scsi_device_online(sdp)) {
+			ret = -ENODEV;
+			scsi_device_put(sdp);
+		}
+	} else {
+		ret = -ENODEV;
+	}
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
+	if (ret)
+		goto out_err;
+
+	if (hba->wlun_dev_clr_ua) {
+		ret = ufshcd_send_request_sense(hba, sdp);
+		if (ret)
+			goto out;
+		/* Unit attention condition is cleared now */
+		hba->wlun_dev_clr_ua = false;
+	}
+out:
+	scsi_device_put(sdp);
+out_err:
+	if (ret)
+		dev_err(hba->dev, "%s: UAC clear ret = %d\n", __func__, ret);
+	return ret;
+}
+
 /**
  * ufshcd_probe_hba - probe hba to detect device and initialize
  * @hba: per-adapter instance
+ * @async: asynchronous execution or not
  *
  * Execute link-startup and verify device initialization
  */
-static int ufshcd_probe_hba(struct ufs_hba *hba)
+static int ufshcd_probe_hba(struct ufs_hba *hba, bool async)
 {
-	struct ufs_dev_desc card = {0};
 	int ret;
+	unsigned long flags;
 	ktime_t start = ktime_get();
 
 	ret = ufshcd_link_startup(hba);
@@ -6934,38 +7847,35 @@
 	/* UniPro link is active now */
 	ufshcd_set_link_active(hba);
 
+	/* Verify device initialization by sending NOP OUT UPIU */
 	ret = ufshcd_verify_dev_init(hba);
 	if (ret)
 		goto out;
 
+	/* Initiate UFS initialization, and waiting until completion */
 	ret = ufshcd_complete_dev_init(hba);
 	if (ret)
 		goto out;
 
-	/* Init check for device descriptor sizes */
-	ufshcd_init_desc_sizes(hba);
-
-	ret = ufs_get_device_desc(hba, &card);
-	if (ret) {
-		dev_err(hba->dev, "%s: Failed getting device info. err = %d\n",
-			__func__, ret);
-		goto out;
+	/*
+	 * Initialize UFS device parameters used by driver, these
+	 * parameters are associated with UFS descriptors.
+	 */
+	if (async) {
+		ret = ufshcd_device_params_init(hba);
+		if (ret)
+			goto out;
 	}
 
-	ufs_fixup_device_setup(hba, &card);
-	ufshcd_tune_unipro_params(hba, &card);
-	ufs_put_device_desc(&card);
+	ufshcd_tune_unipro_params(hba);
 
 	/* UFS device is also active now */
 	ufshcd_set_ufs_dev_active(hba);
 	ufshcd_force_reset_auto_bkops(hba);
 	hba->wlun_dev_clr_ua = true;
 
-	if (ufshcd_get_max_pwr_mode(hba)) {
-		dev_err(hba->dev,
-			"%s: Failed getting max supported power mode\n",
-			__func__);
-	} else {
+	/* Gear up to HS gear if supported */
+	if (hba->max_pwr_info.is_valid) {
 		/*
 		 * Set the right value to bRefClkFreq before attempting to
 		 * switch to HS gears.
@@ -6978,68 +7888,28 @@
 					__func__, ret);
 			goto out;
 		}
+		ufshcd_print_pwr_info(hba);
 	}
 
-	/* set the state as operational after switching to desired gear */
-	hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+	/*
+	 * bActiveICCLevel is volatile for UFS device (as per latest v2.1 spec)
+	 * and for removable UFS card as well, hence always set the parameter.
+	 * Note: Error handler may issue the device reset hence resetting
+	 *       bActiveICCLevel as well so it is always safe to set this here.
+	 */
+	ufshcd_set_active_icc_lvl(hba);
 
+	ufshcd_wb_config(hba);
 	/* Enable Auto-Hibernate if configured */
 	ufshcd_auto_hibern8_enable(hba);
 
-	/*
-	 * If we are in error handling context or in power management callbacks
-	 * context, no need to scan the host
-	 */
-	if (!ufshcd_eh_in_progress(hba) && !hba->pm_op_in_progress) {
-		bool flag;
-
-		/* clear any previous UFS device information */
-		memset(&hba->dev_info, 0, sizeof(hba->dev_info));
-		if (!ufshcd_query_flag_retry(hba, UPIU_QUERY_OPCODE_READ_FLAG,
-				QUERY_FLAG_IDN_PWR_ON_WPE, &flag))
-			hba->dev_info.f_power_on_wp_en = flag;
-
-		if (!hba->is_init_prefetch)
-			ufshcd_init_icc_levels(hba);
-
-		/* Add required well known logical units to scsi mid layer */
-		ret = ufshcd_scsi_add_wlus(hba);
-		if (ret)
-			goto out;
-
-		/* Initialize devfreq after UFS device is detected */
-		if (ufshcd_is_clkscaling_supported(hba)) {
-			memcpy(&hba->clk_scaling.saved_pwr_info.info,
-				&hba->pwr_info,
-				sizeof(struct ufs_pa_layer_attr));
-			hba->clk_scaling.saved_pwr_info.is_valid = true;
-			if (!hba->devfreq) {
-				ret = ufshcd_devfreq_init(hba);
-				if (ret)
-					goto out;
-			}
-			hba->clk_scaling.is_allowed = true;
-		}
-
-		ufs_bsg_probe(hba);
-
-		scsi_scan_host(hba->host);
-		pm_runtime_put_sync(hba->dev);
-	}
-
-	if (!hba->is_init_prefetch)
-		hba->is_init_prefetch = true;
-
 out:
-	/*
-	 * If we failed to initialize the device or the device is not
-	 * present, turn off the power/clocks etc.
-	 */
-	if (ret && !ufshcd_eh_in_progress(hba) && !hba->pm_op_in_progress) {
-		pm_runtime_put_sync(hba->dev);
-		ufshcd_exit_clk_scaling(hba);
-		ufshcd_hba_exit(hba);
-	}
+	spin_lock_irqsave(hba->host->host_lock, flags);
+	if (ret)
+		hba->ufshcd_state = UFSHCD_STATE_ERROR;
+	else if (hba->ufshcd_state == UFSHCD_STATE_RESET)
+		hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL;
+	spin_unlock_irqrestore(hba->host->host_lock, flags);
 
 	trace_ufshcd_init(dev_name(hba->dev), ret,
 		ktime_to_us(ktime_sub(ktime_get(), start)),
@@ -7055,8 +7925,27 @@
 static void ufshcd_async_scan(void *data, async_cookie_t cookie)
 {
 	struct ufs_hba *hba = (struct ufs_hba *)data;
+	int ret;
 
-	ufshcd_probe_hba(hba);
+	/* Initialize hba, detect and initialize UFS device */
+	ret = ufshcd_probe_hba(hba, true);
+	if (ret)
+		goto out;
+
+	/* Probe and add UFS logical units  */
+	ret = ufshcd_add_lus(hba);
+out:
+	/*
+	 * If we failed to initialize the device or the device is not
+	 * present, turn off the power/clocks etc.
+	 */
+	if (ret) {
+		pm_runtime_put_sync(hba->dev);
+		ufshcd_exit_clk_scaling(hba);
+		ufshcd_hba_exit(hba);
+	} else {
+		ufshcd_clear_uac(hba);
+	}
 }
 
 static enum blk_eh_timer_return ufshcd_eh_timed_out(struct scsi_cmnd *scmd)
@@ -7100,6 +7989,16 @@
 	NULL,
 };
 
+static struct ufs_hba_variant_params ufs_hba_vps = {
+	.hba_enable_delay_us		= 1000,
+	.wb_flush_threshold		= UFS_WB_BUF_REMAIN_PERCENT(40),
+	.devfreq_profile.polling_ms	= 100,
+	.devfreq_profile.target		= ufshcd_devfreq_target,
+	.devfreq_profile.get_dev_status	= ufshcd_devfreq_get_dev_status,
+	.ondemand_data.upthreshold	= 70,
+	.ondemand_data.downdifferential	= 5,
+};
+
 static struct scsi_host_template ufshcd_driver_template = {
 	.module			= THIS_MODULE,
 	.name			= UFSHCD,
@@ -7122,6 +8021,7 @@
 	.track_queue_depth	= 1,
 	.sdev_groups		= ufshcd_driver_groups,
 	.dma_boundary		= PAGE_SIZE - 1,
+	.rpm_autosuspend_delay	= RPM_AUTOSUSPEND_DELAY_MS,
 };
 
 static int ufshcd_config_vreg_load(struct device *dev, struct ufs_vreg *vreg,
@@ -7179,6 +8079,11 @@
 	name = vreg->name;
 
 	if (regulator_count_voltages(reg) > 0) {
+		uA_load = on ? vreg->max_uA : 0;
+		ret = ufshcd_config_vreg_load(dev, vreg, uA_load);
+		if (ret)
+			goto out;
+
 		if (vreg->min_uV && vreg->max_uV) {
 			min_uV = on ? vreg->min_uV : 0;
 			ret = regulator_set_voltage(reg, min_uV, vreg->max_uV);
@@ -7189,11 +8094,6 @@
 				goto out;
 			}
 		}
-
-		uA_load = on ? vreg->max_uA : 0;
-		ret = ufshcd_config_vreg_load(dev, vreg, uA_load);
-		if (ret)
-			goto out;
 	}
 out:
 	return ret;
@@ -7333,16 +8233,9 @@
 	if (list_empty(head))
 		goto out;
 
-	/*
-	 * vendor specific setup_clocks ops may depend on clocks managed by
-	 * this standard driver hence call the vendor specific setup_clocks
-	 * before disabling the clocks managed here.
-	 */
-	if (!on) {
-		ret = ufshcd_vops_setup_clocks(hba, on, PRE_CHANGE);
-		if (ret)
-			return ret;
-	}
+	ret = ufshcd_vops_setup_clocks(hba, on, PRE_CHANGE);
+	if (ret)
+		return ret;
 
 	list_for_each_entry(clki, head, list) {
 		if (!IS_ERR_OR_NULL(clki->clk)) {
@@ -7366,16 +8259,9 @@
 		}
 	}
 
-	/*
-	 * vendor specific setup_clocks ops may depend on clocks managed by
-	 * this standard driver hence call the vendor specific setup_clocks
-	 * after enabling the clocks managed here.
-	 */
-	if (on) {
-		ret = ufshcd_vops_setup_clocks(hba, on, POST_CHANGE);
-		if (ret)
-			return ret;
-	}
+	ret = ufshcd_vops_setup_clocks(hba, on, POST_CHANGE);
+	if (ret)
+		return ret;
 
 out:
 	if (ret) {
@@ -7550,6 +8436,7 @@
 		ufshcd_setup_clocks(hba, false);
 		ufshcd_setup_hba_vreg(hba, false);
 		hba->is_powered = false;
+		ufs_put_device_desc(hba);
 	}
 }
 
@@ -7667,10 +8554,13 @@
 
 	if (req_link_state == UIC_LINK_HIBERN8_STATE) {
 		ret = ufshcd_uic_hibern8_enter(hba);
-		if (!ret)
+		if (!ret) {
 			ufshcd_set_link_hibern8(hba);
-		else
+		} else {
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			goto out;
+		}
 	}
 	/*
 	 * If autobkops is enabled, link can't be turned off because
@@ -7687,8 +8577,11 @@
 		 * unipro. But putting the link in hibern8 is much faster.
 		 */
 		ret = ufshcd_uic_hibern8_enter(hba);
-		if (ret)
+		if (ret) {
+			dev_err(hba->dev, "%s: hibern8 enter failed %d\n",
+					__func__, ret);
 			goto out;
+		}
 		/*
 		 * Change controller state to "reset state" which
 		 * should also put the link in off/reset state
@@ -7707,6 +8600,8 @@
 
 static void ufshcd_vreg_set_lpm(struct ufs_hba *hba)
 {
+	bool vcc_off = false;
+
 	/*
 	 * It seems some UFS devices may keep drawing more than sleep current
 	 * (atleast for 500us) from UFS rails (especially from VCCQ rail).
@@ -7728,17 +8623,29 @@
 	 *
 	 * Ignore the error returned by ufshcd_toggle_vreg() as device is anyway
 	 * in low power state which would save some power.
+	 *
+	 * If Write Booster is enabled and the device needs to flush the WB
+	 * buffer OR if bkops status is urgent for WB, keep Vcc on.
 	 */
 	if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba) &&
 	    !hba->dev_info.is_lu_power_on_wp) {
 		ufshcd_setup_vreg(hba, false);
+		vcc_off = true;
 	} else if (!ufshcd_is_ufs_dev_active(hba)) {
 		ufshcd_toggle_vreg(hba->dev, hba->vreg_info.vcc, false);
-		if (!ufshcd_is_link_active(hba)) {
+		vcc_off = true;
+		if (ufshcd_is_link_hibern8(hba) || ufshcd_is_link_off(hba)) {
 			ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq);
 			ufshcd_config_vreg_lpm(hba, hba->vreg_info.vccq2);
 		}
 	}
+
+	/*
+	 * Some UFS devices require delay after VCC power rail is turned-off.
+	 */
+	if (vcc_off && hba->vreg_info.vcc &&
+		hba->dev_quirks & UFS_DEVICE_QUIRK_DELAY_AFTER_LPM)
+		usleep_range(5000, 5100);
 }
 
 static int ufshcd_vreg_set_hpm(struct ufs_hba *hba)
@@ -7749,7 +8656,7 @@
 	    !hba->dev_info.is_lu_power_on_wp) {
 		ret = ufshcd_setup_vreg(hba, true);
 	} else if (!ufshcd_is_ufs_dev_active(hba)) {
-		if (!ret && !ufshcd_is_link_active(hba)) {
+		if (!ufshcd_is_link_active(hba)) {
 			ret = ufshcd_config_vreg_hpm(hba, hba->vreg_info.vccq);
 			if (ret)
 				goto vcc_disable;
@@ -7857,18 +8764,34 @@
 			/* make sure that auto bkops is disabled */
 			ufshcd_disable_auto_bkops(hba);
 		}
+		/*
+		 * If device needs to do BKOP or WB buffer flush during
+		 * Hibern8, keep device power mode as "active power mode"
+		 * and VCC supply.
+		 */
+		hba->dev_info.b_rpm_dev_flush_capable =
+			hba->auto_bkops_enabled ||
+			(((req_link_state == UIC_LINK_HIBERN8_STATE) ||
+			((req_link_state == UIC_LINK_ACTIVE_STATE) &&
+			ufshcd_is_auto_hibern8_enabled(hba))) &&
+			ufshcd_wb_need_flush(hba));
 	}
 
-	if ((req_dev_pwr_mode != hba->curr_dev_pwr_mode) &&
-	     ((ufshcd_is_runtime_pm(pm_op) && !hba->auto_bkops_enabled) ||
-	       !ufshcd_is_runtime_pm(pm_op))) {
-		/* ensure that bkops is disabled */
-		ufshcd_disable_auto_bkops(hba);
-		ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
-		if (ret)
-			goto enable_gating;
+	if (req_dev_pwr_mode != hba->curr_dev_pwr_mode) {
+		if ((ufshcd_is_runtime_pm(pm_op) && !hba->auto_bkops_enabled) ||
+		    !ufshcd_is_runtime_pm(pm_op)) {
+			/* ensure that bkops is disabled */
+			ufshcd_disable_auto_bkops(hba);
+		}
+
+		if (!hba->dev_info.b_rpm_dev_flush_capable) {
+			ret = ufshcd_set_dev_pwr_mode(hba, req_dev_pwr_mode);
+			if (ret)
+				goto enable_gating;
+		}
 	}
 
+	flush_work(&hba->eeh_work);
 	ret = ufshcd_link_state_transition(hba, req_link_state, 1);
 	if (ret)
 		goto set_dev_active;
@@ -7884,6 +8807,11 @@
 	ret = ufshcd_vops_suspend(hba, pm_op);
 	if (ret)
 		goto set_link_active;
+	/*
+	 * Disable the host irq as host controller as there won't be any
+	 * host controller transaction expected till resume.
+	 */
+	ufshcd_disable_irq(hba);
 
 	if (!ufshcd_is_link_active(hba))
 		ufshcd_setup_clocks(hba, false);
@@ -7891,13 +8819,12 @@
 		/* If link is active, device ref_clk can't be switched off */
 		__ufshcd_setup_clocks(hba, false, true);
 
-	hba->clk_gating.state = CLKS_OFF;
-	trace_ufshcd_clk_gating(dev_name(hba->dev), hba->clk_gating.state);
-	/*
-	 * Disable the host irq as host controller as there won't be any
-	 * host controller transaction expected till resume.
-	 */
-	ufshcd_disable_irq(hba);
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		hba->clk_gating.state = CLKS_OFF;
+		trace_ufshcd_clk_gating(dev_name(hba->dev),
+					hba->clk_gating.state);
+	}
+
 	/* Put the host controller in low power mode if possible */
 	ufshcd_hba_vreg_set_lpm(hba);
 	goto out;
@@ -7917,9 +8844,16 @@
 	if (hba->clk_scaling.is_allowed)
 		ufshcd_resume_clkscaling(hba);
 	hba->clk_gating.is_suspended = false;
+	hba->dev_info.b_rpm_dev_flush_capable = false;
 	ufshcd_release(hba);
 out:
+	if (hba->dev_info.b_rpm_dev_flush_capable) {
+		schedule_delayed_work(&hba->rpm_dev_flush_recheck_work,
+			msecs_to_jiffies(RPM_DEV_FLUSH_RECHECK_WORK_DELAY_MS));
+	}
+
 	hba->pm_op_in_progress = 0;
+
 	if (ret)
 		ufshcd_update_reg_hist(&hba->ufs_stats.suspend_err, (u32)ret);
 	return ret;
@@ -7950,9 +8884,7 @@
 		goto out;
 
 	/* enable the host irq as host controller would be active soon */
-	ret = ufshcd_enable_irq(hba);
-	if (ret)
-		goto disable_irq_and_vops_clks;
+	ufshcd_enable_irq(hba);
 
 	ret = ufshcd_vreg_set_hpm(hba);
 	if (ret)
@@ -7969,14 +8901,21 @@
 
 	if (ufshcd_is_link_hibern8(hba)) {
 		ret = ufshcd_uic_hibern8_exit(hba);
-		if (!ret)
+		if (!ret) {
 			ufshcd_set_link_active(hba);
-		else
+		} else {
+			dev_err(hba->dev, "%s: hibern8 exit failed %d\n",
+					__func__, ret);
 			goto vendor_suspend;
+		}
 	} else if (ufshcd_is_link_off(hba)) {
-		ret = ufshcd_host_reset_and_restore(hba);
 		/*
-		 * ufshcd_host_reset_and_restore() should have already
+		 * A full initialization of the host and the device is required
+		 * since the link was put to off during suspend.
+		 */
+		ret = ufshcd_reset_and_restore(hba);
+		/*
+		 * ufshcd_reset_and_restore() should have already
 		 * set the link state as active
 		 */
 		if (ret || !ufshcd_is_link_active(hba))
@@ -8006,6 +8945,11 @@
 	/* Enable Auto-Hibernate if configured */
 	ufshcd_auto_hibern8_enable(hba);
 
+	if (hba->dev_info.b_rpm_dev_flush_capable) {
+		hba->dev_info.b_rpm_dev_flush_capable = false;
+		cancel_delayed_work(&hba->rpm_dev_flush_recheck_work);
+	}
+
 	/* Schedule clock gating in case of no access to UFS device yet */
 	ufshcd_release(hba);
 
@@ -8022,6 +8966,11 @@
 	if (hba->clk_scaling.is_allowed)
 		ufshcd_suspend_clkscaling(hba);
 	ufshcd_setup_clocks(hba, false);
+	if (ufshcd_is_clkgating_allowed(hba)) {
+		hba->clk_gating.state = CLKS_OFF;
+		trace_ufshcd_clk_gating(dev_name(hba->dev),
+					hba->clk_gating.state);
+	}
 out:
 	hba->pm_op_in_progress = 0;
 	if (ret)
@@ -8045,10 +8994,13 @@
 	if (!hba || !hba->is_powered)
 		return 0;
 
+	cancel_delayed_work_sync(&hba->rpm_dev_flush_recheck_work);
+
 	if ((ufs_get_pm_lvl_to_dev_pwr_mode(hba->spm_lvl) ==
 	     hba->curr_dev_pwr_mode) &&
 	    (ufs_get_pm_lvl_to_link_pwr_state(hba->spm_lvl) ==
-	     hba->uic_link_state))
+	     hba->uic_link_state) &&
+	     !hba->dev_info.b_rpm_dev_flush_capable)
 		goto out;
 
 	if (pm_runtime_suspended(hba->dev)) {
@@ -8226,6 +9178,7 @@
 	blk_mq_free_tag_set(&hba->tmf_tag_set);
 	blk_cleanup_queue(hba->cmd_queue);
 	scsi_remove_host(hba->host);
+	destroy_workqueue(hba->eh_wq);
 	/* disable interrupts */
 	ufshcd_disable_intr(hba, hba->intr_mask);
 	ufshcd_hba_stop(hba, true);
@@ -8295,6 +9248,7 @@
 	hba->dev = dev;
 	*hba_handle = hba;
 	hba->dev_ref_clk_freq = REF_CLK_FREQ_INVAL;
+	hba->sg_entry_size = sizeof(struct ufshcd_sg_entry);
 
 	INIT_LIST_HEAD(&hba->clk_list_head);
 
@@ -8327,6 +9281,7 @@
 	int err;
 	struct Scsi_Host *host = hba->host;
 	struct device *dev = hba->dev;
+	char eh_wq_name[sizeof("ufs_eh_wq_00")];
 
 	if (!mmio_base) {
 		dev_err(hba->dev,
@@ -8337,13 +9292,16 @@
 
 	hba->mmio_base = mmio_base;
 	hba->irq = irq;
+	hba->vps = &ufs_hba_vps;
 
 	err = ufshcd_hba_init(hba);
 	if (err)
 		goto out_error;
 
 	/* Read capabilities registers */
-	ufshcd_hba_capabilities(hba);
+	err = ufshcd_hba_capabilities(hba);
+	if (err)
+		goto out_disable;
 
 	/* Get UFS version supported by the controller */
 	hba->ufs_version = ufshcd_get_ufs_version(hba);
@@ -8385,6 +9343,15 @@
 	hba->max_pwr_info.is_valid = false;
 
 	/* Initialize work queues */
+	snprintf(eh_wq_name, sizeof(eh_wq_name), "ufs_eh_wq_%d",
+		 hba->host->host_no);
+	hba->eh_wq = create_singlethread_workqueue(eh_wq_name);
+	if (!hba->eh_wq) {
+		dev_err(hba->dev, "%s: failed to create eh workqueue\n",
+				__func__);
+		err = -ENOMEM;
+		goto out_disable;
+	}
 	INIT_WORK(&hba->eh_work, ufshcd_err_handler);
 	INIT_WORK(&hba->eeh_work, ufshcd_exception_event_handler);
 
@@ -8453,6 +9420,8 @@
 	/* Reset the attached device */
 	ufshcd_vops_device_reset(hba);
 
+	ufshcd_init_crypto(hba);
+
 	/* Host controller enable */
 	err = ufshcd_hba_enable(hba);
 	if (err) {
@@ -8474,6 +9443,9 @@
 						UFS_SLEEP_PWR_MODE,
 						UIC_LINK_HIBERN8_STATE);
 
+	INIT_DELAYED_WORK(&hba->rpm_dev_flush_recheck_work,
+			  ufshcd_rpm_dev_flush_recheck_work);
+
 	/* Set the default auto-hiberate idle timer value to 150 ms */
 	if (ufshcd_is_auto_hibern8_supported(hba) && !hba->ahit) {
 		hba->ahit = FIELD_PREP(UFSHCI_AHIBERN8_TIMER_MASK, 150) |
@@ -8492,7 +9464,7 @@
 	ufshcd_set_ufs_dev_active(hba);
 
 	async_schedule(ufshcd_async_scan, hba);
-	ufs_sysfs_add_nodes(hba->dev);
+	ufs_sysfs_add_nodes(hba);
 
 	return 0;
 
@@ -8507,6 +9479,7 @@
 exit_gating:
 	ufshcd_exit_clk_scaling(hba);
 	ufshcd_exit_clk_gating(hba);
+	destroy_workqueue(hba->eh_wq);
 out_disable:
 	hba->is_irq_enabled = false;
 	ufshcd_hba_exit(hba);
diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h
index 92ef6e6..b648a0f 100644
--- a/drivers/scsi/ufs/ufshcd.h
+++ b/drivers/scsi/ufs/ufshcd.h
@@ -56,6 +56,8 @@
 #include <linux/completion.h>
 #include <linux/regulator/consumer.h>
 #include <linux/bitfield.h>
+#include <linux/devfreq.h>
+#include <linux/keyslot-manager.h>
 #include "unipro.h"
 
 #include <asm/irq.h>
@@ -66,8 +68,10 @@
 #include <scsi/scsi_tcq.h>
 #include <scsi/scsi_dbg.h>
 #include <scsi/scsi_eh.h>
+#include <linux/android_kabi.h>
 
 #include "ufs.h"
+#include "ufs_quirks.h"
 #include "ufshci.h"
 
 #define UFSHCD "ufshcd"
@@ -116,6 +120,7 @@
 	UIC_LINK_OFF_STATE	= 0, /* Link powered down or disabled */
 	UIC_LINK_ACTIVE_STATE	= 1, /* Link is in Fast/Slow/Sleep state */
 	UIC_LINK_HIBERN8_STATE	= 2, /* Link is in Hibernate state */
+	UIC_LINK_BROKEN_STATE	= 3, /* Link is in broken state */
 };
 
 #define ufshcd_is_link_off(hba) ((hba)->uic_link_state == UIC_LINK_OFF_STATE)
@@ -123,11 +128,28 @@
 				    UIC_LINK_ACTIVE_STATE)
 #define ufshcd_is_link_hibern8(hba) ((hba)->uic_link_state == \
 				    UIC_LINK_HIBERN8_STATE)
+#define ufshcd_is_link_broken(hba) ((hba)->uic_link_state == \
+				   UIC_LINK_BROKEN_STATE)
 #define ufshcd_set_link_off(hba) ((hba)->uic_link_state = UIC_LINK_OFF_STATE)
 #define ufshcd_set_link_active(hba) ((hba)->uic_link_state = \
 				    UIC_LINK_ACTIVE_STATE)
 #define ufshcd_set_link_hibern8(hba) ((hba)->uic_link_state = \
 				    UIC_LINK_HIBERN8_STATE)
+#define ufshcd_set_link_broken(hba) ((hba)->uic_link_state = \
+				    UIC_LINK_BROKEN_STATE)
+
+#define ufshcd_set_ufs_dev_active(h) \
+	((h)->curr_dev_pwr_mode = UFS_ACTIVE_PWR_MODE)
+#define ufshcd_set_ufs_dev_sleep(h) \
+	((h)->curr_dev_pwr_mode = UFS_SLEEP_PWR_MODE)
+#define ufshcd_set_ufs_dev_poweroff(h) \
+	((h)->curr_dev_pwr_mode = UFS_POWERDOWN_PWR_MODE)
+#define ufshcd_is_ufs_dev_active(h) \
+	((h)->curr_dev_pwr_mode == UFS_ACTIVE_PWR_MODE)
+#define ufshcd_is_ufs_dev_sleep(h) \
+	((h)->curr_dev_pwr_mode == UFS_SLEEP_PWR_MODE)
+#define ufshcd_is_ufs_dev_poweroff(h) \
+	((h)->curr_dev_pwr_mode == UFS_POWERDOWN_PWR_MODE)
 
 /*
  * UFS Power management levels.
@@ -168,6 +190,8 @@
  * @intr_cmd: Interrupt command (doesn't participate in interrupt aggregation)
  * @issue_time_stamp: time stamp for debug purposes
  * @compl_time_stamp: time stamp for statistics
+ * @crypto_key_slot: the key slot to use for inline crypto (-1 if none)
+ * @data_unit_num: the data unit number for the first block for inline crypto
  * @req_abort_skip: skip request abort task flag
  */
 struct ufshcd_lrb {
@@ -192,8 +216,14 @@
 	bool intr_cmd;
 	ktime_t issue_time_stamp;
 	ktime_t compl_time_stamp;
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	int crypto_key_slot;
+	u64 data_unit_num;
+#endif
 
 	bool req_abort_skip;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -298,6 +328,7 @@
  * @dbg_register_dump: used to dump controller debug information
  * @phy_initialization: used to initialize phys
  * @device_reset: called to issue a reset pulse on the UFS device
+ * @program_key: program or evict an inline encryption key
  */
 struct ufs_hba_variant_ops {
 	const char *name;
@@ -321,12 +352,23 @@
 	void	(*setup_task_mgmt)(struct ufs_hba *, int, u8);
 	void    (*hibern8_notify)(struct ufs_hba *, enum uic_cmd_dme,
 					enum ufs_notify_change_status);
-	int	(*apply_dev_quirks)(struct ufs_hba *, struct ufs_dev_desc *);
+	int	(*apply_dev_quirks)(struct ufs_hba *hba);
+	void	(*fixup_dev_quirks)(struct ufs_hba *hba);
 	int     (*suspend)(struct ufs_hba *, enum ufs_pm_op);
 	int     (*resume)(struct ufs_hba *, enum ufs_pm_op);
 	void	(*dbg_register_dump)(struct ufs_hba *hba);
 	int	(*phy_initialization)(struct ufs_hba *);
 	void	(*device_reset)(struct ufs_hba *hba);
+	void	(*config_scaling_param)(struct ufs_hba *hba,
+					struct devfreq_dev_profile *profile,
+					void *data);
+	int	(*program_key)(struct ufs_hba *hba,
+			       const union ufs_crypto_cfg_entry *cfg, int slot);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* clock gating state  */
@@ -364,6 +406,8 @@
 	bool is_enabled;
 	int active_reqs;
 	struct workqueue_struct *clk_gating_workq;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct ufs_saved_pwr_info {
@@ -392,7 +436,7 @@
 struct ufs_clk_scaling {
 	int active_reqs;
 	unsigned long tot_busy_t;
-	unsigned long window_start_t;
+	ktime_t window_start_t;
 	ktime_t busy_start_t;
 	struct device_attribute enable_attr;
 	struct ufs_saved_pwr_info saved_pwr_info;
@@ -402,15 +446,8 @@
 	bool is_allowed;
 	bool is_busy_started;
 	bool is_suspended;
-};
 
-/**
- * struct ufs_init_prefetch - contains data that is pre-fetched once during
- * initialization
- * @icc_level: icc level which was read during initialization
- */
-struct ufs_init_prefetch {
-	u32 icc_level;
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define UFS_ERR_REG_HIST_LENGTH 8
@@ -428,6 +465,8 @@
 
 /**
  * struct ufs_stats - keeps usage/err statistics
+ * @last_intr_status: record the last interrupt status.
+ * @last_intr_ts: record the last interrupt timestamp.
  * @hibern8_exit_cnt: Counter to keep track of number of exits,
  *		reset this after link-startup.
  * @last_hibern8_exit_tstamp: Set time after the hibern8 exit.
@@ -447,6 +486,9 @@
  * @tsk_abort: tracks task abort events
  */
 struct ufs_stats {
+	u32 last_intr_status;
+	ktime_t last_intr_ts;
+
 	u32 hibern8_exit_cnt;
 	ktime_t last_hibern8_exit_tstamp;
 
@@ -470,6 +512,13 @@
 	struct ufs_err_reg_hist task_abort;
 };
 
+struct ufs_hba_variant_params {
+	struct devfreq_dev_profile devfreq_profile;
+	struct devfreq_simple_ondemand_data ondemand_data;
+	u16 hba_enable_delay_us;
+	u32 wb_flush_threshold;
+};
+
 /**
  * struct ufs_hba - per adapter private structure
  * @mmio_base: UFSHCI base register address
@@ -491,6 +540,7 @@
  * @ufs_version: UFS Version to which controller complies
  * @vops: pointer to variant specific operations
  * @priv: pointer to variant specific private data
+ * @sg_entry_size: size of struct ufshcd_sg_entry (may include variant fields)
  * @irq: Irq number of the controller
  * @active_uic_cmd: handle of active UIC command
  * @uic_cmd_mutex: mutex for uic command
@@ -502,14 +552,15 @@
  * @intr_mask: Interrupt Mask Bits
  * @ee_ctrl_mask: Exception event control mask
  * @is_powered: flag to check if HBA is powered
- * @is_init_prefetch: flag to check if data was pre-fetched in initialization
- * @init_prefetch_data: data pre-fetched during initialization
+ * @eh_wq: Workqueue that eh_work works on
  * @eh_work: Worker to handle UFS errors that require s/w attention
  * @eeh_work: Worker to handle exception events
  * @errors: HBA errors
  * @uic_error: UFS interconnect layer error status
  * @saved_err: sticky error mask
  * @saved_uic_err: sticky UIC error mask
+ * @force_reset: flag to force eh_work perform a full reset
+ * @force_pmc: flag to force a power mode change
  * @silence_err_logs: flag to silence error logs
  * @dev_cmd: ufs device management command information
  * @last_dme_cmd_tstamp: time stamp of the last completed DME command
@@ -523,6 +574,10 @@
  * @is_urgent_bkops_lvl_checked: keeps track if the urgent bkops level for
  *  device is known or not.
  * @scsi_block_reqs_cnt: reference counting for scsi block requests
+ * @crypto_capabilities: Content of crypto capabilities register (0x100)
+ * @crypto_cap_array: Array of crypto capabilities
+ * @crypto_cfg_register: Start of the crypto cfg array
+ * @ksm: the keyslot manager tied to this hba
  */
 struct ufs_hba {
 	void __iomem *mmio_base;
@@ -569,7 +624,9 @@
 	int nutmrs;
 	u32 ufs_version;
 	const struct ufs_hba_variant_ops *vops;
+	struct ufs_hba_variant_params *vps;
 	void *priv;
+	size_t sg_entry_size;
 	unsigned int irq;
 	bool is_irq_enabled;
 	enum ufs_ref_clk_freq dev_ref_clk_freq;
@@ -636,6 +693,36 @@
 	 * enabled via HCE register.
 	 */
 	#define UFSHCI_QUIRK_BROKEN_HCE				0x400
+
+	/*
+	 * This quirk needs to be enabled if the host controller reports
+	 * OCS FATAL ERROR with device error through sense data
+	 */
+	#define UFSHCD_QUIRK_BROKEN_OCS_FATAL_ERROR		0x1000
+
+	/*
+	 * This quirk needs to be enabled if the host controller supports inline
+	 * encryption, but it needs to initialize the crypto capabilities in a
+	 * nonstandard way and/or it needs to override blk_ksm_ll_ops.  If
+	 * enabled, the standard code won't initialize the blk_keyslot_manager;
+	 * ufs_hba_variant_ops::init() must do it instead.
+	 */
+	#define UFSHCD_QUIRK_CUSTOM_KEYSLOT_MANAGER		0x100000
+
+	/*
+	 * This quirk needs to be enabled if the host controller supports inline
+	 * encryption, but the CRYPTO_GENERAL_ENABLE bit is not implemented and
+	 * breaks the HCE sequence if used.
+	 */
+	#define UFSHCD_QUIRK_BROKEN_CRYPTO_ENABLE		0x200000
+
+	/*
+	 * This quirk needs to be enabled if the host controller requires that
+	 * the PRDT be cleared after each encrypted request because encryption
+	 * keys were stored in it.
+	 */
+	#define UFSHCD_QUIRK_KEYS_IN_PRDT			0x400000
+
 	unsigned int quirks;	/* Deviations from standard UFSHCI spec. */
 
 	/* Device deviations from standard UFS device spec. */
@@ -653,10 +740,9 @@
 	u32 intr_mask;
 	u16 ee_ctrl_mask;
 	bool is_powered;
-	bool is_init_prefetch;
-	struct ufs_init_prefetch init_prefetch_data;
 
 	/* Work Queues */
+	struct workqueue_struct *eh_wq;
 	struct work_struct eh_work;
 	struct work_struct eeh_work;
 
@@ -666,6 +752,8 @@
 	u32 saved_err;
 	u32 saved_uic_err;
 	struct ufs_stats ufs_stats;
+	bool force_reset;
+	bool force_pmc;
 	bool silence_err_logs;
 
 	/* Device management request data */
@@ -713,6 +801,23 @@
 	 * the performance of ongoing read/write operations.
 	 */
 #define UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND (1 << 5)
+	/*
+	 * This capability allows host controller driver to automatically
+	 * enable runtime power management by itself instead of waiting
+	 * for userspace to control the power management.
+	 */
+#define UFSHCD_CAP_RPM_AUTOSUSPEND (1 << 6)
+	/*
+	 * This capability allows the host controller driver to turn-on
+	 * WriteBooster, if the underlying device supports it and is
+	 * provisioned to be used. This would increase the write performance.
+	 */
+#define UFSHCD_CAP_WB_EN (1 << 7)
+	/*
+	 * This capability allows the host controller driver to use the
+	 * inline crypto engine, if it is present
+	 */
+#define UFSHCD_CAP_CRYPTO (1 << 8)
 
 	struct devfreq *devfreq;
 	struct ufs_clk_scaling clk_scaling;
@@ -727,6 +832,22 @@
 
 	struct device		bsg_dev;
 	struct request_queue	*bsg_queue;
+
+	bool wb_buf_flush_enabled;
+	bool wb_enabled;
+	struct delayed_work rpm_dev_flush_recheck_work;
+
+#ifdef CONFIG_SCSI_UFS_CRYPTO
+	union ufs_crypto_capabilities crypto_capabilities;
+	union ufs_crypto_cap_entry *crypto_cap_array;
+	u32 crypto_cfg_register;
+	struct blk_keyslot_manager ksm;
+#endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* Returns true if clocks can be gated. Otherwise false */
@@ -746,6 +867,10 @@
 {
 	return hba->caps & UFSHCD_CAP_AUTO_BKOPS_SUSPEND;
 }
+static inline bool ufshcd_is_rpm_autosuspend_allowed(struct ufs_hba *hba)
+{
+	return hba->caps & UFSHCD_CAP_RPM_AUTOSUSPEND;
+}
 
 static inline bool ufshcd_is_intr_aggr_allowed(struct ufs_hba *hba)
 {
@@ -771,6 +896,11 @@
 	return FIELD_GET(UFSHCI_AHIBERN8_TIMER_MASK, hba->ahit) ? true : false;
 }
 
+static inline bool ufshcd_is_wb_allowed(struct ufs_hba *hba)
+{
+	return hba->caps & UFSHCD_CAP_WB_EN;
+}
+
 #define ufshcd_writel(hba, val, reg)	\
 	writel((val), (hba)->mmio_base + (reg))
 #define ufshcd_readl(hba, reg)	\
@@ -795,12 +925,19 @@
 
 int ufshcd_alloc_host(struct device *, struct ufs_hba **);
 void ufshcd_dealloc_host(struct ufs_hba *);
+int ufshcd_hba_enable(struct ufs_hba *hba);
 int ufshcd_init(struct ufs_hba * , void __iomem * , unsigned int);
+int ufshcd_link_recovery(struct ufs_hba *hba);
+int ufshcd_make_hba_operational(struct ufs_hba *hba);
 void ufshcd_remove(struct ufs_hba *);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
+void ufshcd_delay_us(unsigned long us, unsigned long tolerance);
 int ufshcd_wait_for_register(struct ufs_hba *hba, u32 reg, u32 mask,
 				u32 val, unsigned long interval_us,
 				unsigned long timeout_ms, bool can_sleep);
 void ufshcd_parse_dev_ref_clk_freq(struct ufs_hba *hba, struct clk *refclk);
+void ufshcd_update_reg_hist(struct ufs_err_reg_hist *reg_hist,
+			    u32 reg);
 
 static inline void check_upiu_size(void)
 {
@@ -834,6 +971,13 @@
 	return hba->caps & UFSHCD_CAP_KEEP_AUTO_BKOPS_ENABLED_EXCEPT_SUSPEND;
 }
 
+static inline u8 ufshcd_wb_get_query_index(struct ufs_hba *hba)
+{
+	if (hba->dev_info.b_wb_buffer_type == WB_BUF_MODE_LU_DEDICATED)
+		return hba->dev_info.wb_dedicated_lu;
+	return 0;
+}
+
 extern int ufshcd_runtime_suspend(struct ufs_hba *hba);
 extern int ufshcd_runtime_resume(struct ufs_hba *hba);
 extern int ufshcd_runtime_idle(struct ufs_hba *hba);
@@ -901,6 +1045,11 @@
 		pwr_info->pwr_tx == FASTAUTO_MODE);
 }
 
+static inline int ufshcd_disable_host_tx_lcc(struct ufs_hba *hba)
+{
+	return ufshcd_dme_set(hba, UIC_ARG_MIB(PA_LOCAL_TX_LCC_ENABLE), 0);
+}
+
 /* Expose Query-Request API */
 int ufshcd_query_descriptor_retry(struct ufs_hba *hba,
 				  enum query_opcode opcode,
@@ -915,11 +1064,18 @@
 			   u8 param_size);
 int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode,
 		      enum attr_idn idn, u8 index, u8 selector, u32 *attr_val);
+int ufshcd_query_attr_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum attr_idn idn, u8 index, u8 selector,
+	u32 *attr_val);
 int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode,
-	enum flag_idn idn, bool *flag_res);
+	enum flag_idn idn, u8 index, bool *flag_res);
+int ufshcd_query_flag_retry(struct ufs_hba *hba,
+	enum query_opcode opcode, enum flag_idn idn, u8 index, bool *flag_res);
+int ufshcd_bkops_ctrl(struct ufs_hba *hba, enum bkops_status status);
 
 void ufshcd_auto_hibern8_enable(struct ufs_hba *hba);
-
+void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit);
+void ufshcd_fixup_dev_quirks(struct ufs_hba *hba, struct ufs_dev_fix *fixups);
 #define SD_ASCII_STD true
 #define SD_RAW false
 int ufshcd_read_string_desc(struct ufs_hba *hba, u8 desc_index,
@@ -1047,14 +1203,19 @@
 		return hba->vops->hibern8_notify(hba, cmd, status);
 }
 
-static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba,
-					       struct ufs_dev_desc *card)
+static inline int ufshcd_vops_apply_dev_quirks(struct ufs_hba *hba)
 {
 	if (hba->vops && hba->vops->apply_dev_quirks)
-		return hba->vops->apply_dev_quirks(hba, card);
+		return hba->vops->apply_dev_quirks(hba);
 	return 0;
 }
 
+static inline void ufshcd_vops_fixup_dev_quirks(struct ufs_hba *hba)
+{
+	if (hba->vops && hba->vops->fixup_dev_quirks)
+		hba->vops->fixup_dev_quirks(hba);
+}
+
 static inline int ufshcd_vops_suspend(struct ufs_hba *hba, enum ufs_pm_op op)
 {
 	if (hba->vops && hba->vops->suspend)
@@ -1079,8 +1240,23 @@
 
 static inline void ufshcd_vops_device_reset(struct ufs_hba *hba)
 {
-	if (hba->vops && hba->vops->device_reset)
+	if (hba->vops && hba->vops->device_reset) {
 		hba->vops->device_reset(hba);
+		ufshcd_set_ufs_dev_active(hba);
+		if (ufshcd_is_wb_allowed(hba)) {
+			hba->wb_enabled = false;
+			hba->wb_buf_flush_enabled = false;
+		}
+		ufshcd_update_reg_hist(&hba->ufs_stats.dev_reset, 0);
+	}
+}
+
+static inline void ufshcd_vops_config_scaling_param(struct ufs_hba *hba,
+						    struct devfreq_dev_profile
+						    *profile, void *data)
+{
+	if (hba->vops && hba->vops->config_scaling_param)
+		hba->vops->config_scaling_param(hba, profile, data);
 }
 
 extern struct ufs_pm_lvl_states ufs_pm_lvl_states[];
@@ -1102,5 +1278,6 @@
 
 int ufshcd_dump_regs(struct ufs_hba *hba, size_t offset, size_t len,
 		     const char *prefix);
-
+int ufshcd_uic_hibern8_enter(struct ufs_hba *hba);
+int ufshcd_uic_hibern8_exit(struct ufs_hba *hba);
 #endif /* End of Header */
diff --git a/drivers/scsi/ufs/ufshci.h b/drivers/scsi/ufs/ufshci.h
index c2961d3..a8adfcc 100644
--- a/drivers/scsi/ufs/ufshci.h
+++ b/drivers/scsi/ufs/ufshci.h
@@ -90,6 +90,7 @@
 	MASK_64_ADDRESSING_SUPPORT		= 0x01000000,
 	MASK_OUT_OF_ORDER_DATA_DELIVERY_SUPPORT	= 0x02000000,
 	MASK_UIC_DME_TEST_MODE_SUPPORT		= 0x04000000,
+	MASK_CRYPTO_SUPPORT			= 0x10000000,
 };
 
 #define UFS_MASK(mask, offset)		((mask) << (offset))
@@ -143,6 +144,7 @@
 #define DEVICE_FATAL_ERROR			0x800
 #define CONTROLLER_FATAL_ERROR			0x10000
 #define SYSTEM_BUS_FATAL_ERROR			0x20000
+#define CRYPTO_ENGINE_FATAL_ERROR		0x40000
 
 #define UFSHCD_UIC_HIBERN8_MASK	(UIC_HIBERNATE_ENTER |\
 				UIC_HIBERNATE_EXIT)
@@ -155,11 +157,13 @@
 #define UFSHCD_ERROR_MASK	(UIC_ERROR |\
 				DEVICE_FATAL_ERROR |\
 				CONTROLLER_FATAL_ERROR |\
-				SYSTEM_BUS_FATAL_ERROR)
+				SYSTEM_BUS_FATAL_ERROR |\
+				CRYPTO_ENGINE_FATAL_ERROR)
 
 #define INT_FATAL_ERRORS	(DEVICE_FATAL_ERROR |\
 				CONTROLLER_FATAL_ERROR |\
-				SYSTEM_BUS_FATAL_ERROR)
+				SYSTEM_BUS_FATAL_ERROR |\
+				CRYPTO_ENGINE_FATAL_ERROR)
 
 /* HCS - Host Controller Status 30h */
 #define DEVICE_PRESENT				0x1
@@ -192,6 +196,7 @@
 #define UIC_PHY_ADAPTER_LAYER_ERROR			0x80000000
 #define UIC_PHY_ADAPTER_LAYER_ERROR_CODE_MASK		0x1F
 #define UIC_PHY_ADAPTER_LAYER_LANE_ERR_MASK		0xF
+#define UIC_PHY_ADAPTER_LAYER_GENERIC_ERROR		0x10
 
 /* UECDL - Host UIC Error Code Data Link Layer 3Ch */
 #define UIC_DATA_LINK_LAYER_ERROR		0x80000000
@@ -318,6 +323,61 @@
 	INTERRUPT_MASK_ALL_VER_21	= 0x71FFF,
 };
 
+/* CCAP - Crypto Capability 100h */
+union ufs_crypto_capabilities {
+	__le32 reg_val;
+	struct {
+		u8 num_crypto_cap;
+		u8 config_count;
+		u8 reserved;
+		u8 config_array_ptr;
+	};
+};
+
+enum ufs_crypto_key_size {
+	UFS_CRYPTO_KEY_SIZE_INVALID	= 0x0,
+	UFS_CRYPTO_KEY_SIZE_128		= 0x1,
+	UFS_CRYPTO_KEY_SIZE_192		= 0x2,
+	UFS_CRYPTO_KEY_SIZE_256		= 0x3,
+	UFS_CRYPTO_KEY_SIZE_512		= 0x4,
+};
+
+enum ufs_crypto_alg {
+	UFS_CRYPTO_ALG_AES_XTS			= 0x0,
+	UFS_CRYPTO_ALG_BITLOCKER_AES_CBC	= 0x1,
+	UFS_CRYPTO_ALG_AES_ECB			= 0x2,
+	UFS_CRYPTO_ALG_ESSIV_AES_CBC		= 0x3,
+};
+
+/* x-CRYPTOCAP - Crypto Capability X */
+union ufs_crypto_cap_entry {
+	__le32 reg_val;
+	struct {
+		u8 algorithm_id;
+		u8 sdus_mask; /* Supported data unit size mask */
+		u8 key_size;
+		u8 reserved;
+	};
+};
+
+#define UFS_CRYPTO_CONFIGURATION_ENABLE (1 << 7)
+#define UFS_CRYPTO_KEY_MAX_SIZE 64
+/* x-CRYPTOCFG - Crypto Configuration X */
+union ufs_crypto_cfg_entry {
+	__le32 reg_val[32];
+	struct {
+		u8 crypto_key[UFS_CRYPTO_KEY_MAX_SIZE];
+		u8 data_unit_size;
+		u8 crypto_cap_idx;
+		u8 reserved_1;
+		u8 config_enable;
+		u8 reserved_multi_host;
+		u8 reserved_2;
+		u8 vsb[2];
+		u8 reserved_3[56];
+	};
+};
+
 /*
  * Request Descriptor Definitions
  */
@@ -339,6 +399,7 @@
 	UTP_NATIVE_UFS_COMMAND		= 0x10000000,
 	UTP_DEVICE_MANAGEMENT_FUNCTION	= 0x20000000,
 	UTP_REQ_DESC_INT_CMD		= 0x01000000,
+	UTP_REQ_DESC_CRYPTO_ENABLE_CMD	= 0x00800000,
 };
 
 /* UTP Transfer Request Data Direction (DD) */
@@ -358,6 +419,9 @@
 	OCS_PEER_COMM_FAILURE		= 0x5,
 	OCS_ABORTED			= 0x6,
 	OCS_FATAL_ERROR			= 0x7,
+	OCS_DEVICE_FATAL_ERROR		= 0x8,
+	OCS_INVALID_CRYPTO_CONFIG	= 0x9,
+	OCS_GENERAL_CRYPTO_ERROR	= 0xA,
 	OCS_INVALID_COMMAND_STATUS	= 0x0F,
 	MASK_OCS			= 0x0F,
 };
@@ -379,20 +443,28 @@
 	__le32    upper_addr;
 	__le32    reserved;
 	__le32    size;
+	/*
+	 * followed by variant-specific fields if
+	 * hba->sg_entry_size != sizeof(struct ufshcd_sg_entry)
+	 */
 };
 
 /**
  * struct utp_transfer_cmd_desc - UFS Command Descriptor structure
  * @command_upiu: Command UPIU Frame address
  * @response_upiu: Response UPIU Frame address
- * @prd_table: Physical Region Descriptor
+ * @prd_table: Physical Region Descriptor: an array of SG_ALL struct
+ *	ufshcd_sg_entry's.  Variant-specific fields may be present after each.
  */
 struct utp_transfer_cmd_desc {
 	u8 command_upiu[ALIGNED_UPIU_SIZE];
 	u8 response_upiu[ALIGNED_UPIU_SIZE];
-	struct ufshcd_sg_entry    prd_table[SG_ALL];
+	u8 prd_table[];
 };
 
+#define sizeof_utp_transfer_cmd_desc(hba)	\
+	(sizeof(struct utp_transfer_cmd_desc) + SG_ALL * (hba)->sg_entry_size)
+
 /**
  * struct request_desc_header - Descriptor Header common to both UTRD and UTMRD
  * @dword0: Descriptor Header DW0
diff --git a/drivers/scsi/ufs/unipro.h b/drivers/scsi/ufs/unipro.h
index f539f87..851cebc 100644
--- a/drivers/scsi/ufs/unipro.h
+++ b/drivers/scsi/ufs/unipro.h
@@ -146,6 +146,12 @@
 #define PA_SLEEPNOCONFIGTIME	0x15A2
 #define PA_STALLNOCONFIGTIME	0x15A3
 #define PA_SAVECONFIGTIME	0x15A4
+#define PA_TXHSADAPTTYPE       0x15D4
+
+/* Adpat type for PA_TXHSADAPTTYPE attribute */
+#define PA_REFRESH_ADAPT       0x00
+#define PA_INITIAL_ADAPT       0x01
+#define PA_NO_ADAPT            0x03
 
 #define PA_TACTIVATE_TIME_UNIT_US	10
 #define PA_HIBERN8_TIME_UNIT_US		100
@@ -161,6 +167,17 @@
 /* PHY Adapter Protocol Constants */
 #define PA_MAXDATALANES	4
 
+#define DL_FC0ProtectionTimeOutVal_Default	8191
+#define DL_TC0ReplayTimeOutVal_Default		65535
+#define DL_AFC0ReqTimeOutVal_Default		32767
+#define DL_FC1ProtectionTimeOutVal_Default	8191
+#define DL_TC1ReplayTimeOutVal_Default		65535
+#define DL_AFC1ReqTimeOutVal_Default		32767
+
+#define DME_LocalFC0ProtectionTimeOutVal	0xD041
+#define DME_LocalTC0ReplayTimeOutVal		0xD042
+#define DME_LocalAFC0ReqTimeOutVal		0xD043
+
 /* PA power modes */
 enum {
 	FAST_MODE	= 1,
@@ -170,6 +187,9 @@
 	UNCHANGED	= 7,
 };
 
+#define PWRMODE_MASK		0xF
+#define PWRMODE_RX_OFFSET	4
+
 /* PA TX/RX Frequency Series */
 enum {
 	PA_HS_MODE_A	= 1,
@@ -192,14 +212,17 @@
 	UFS_HS_G1,		/* HS Gear 1 (default for reset) */
 	UFS_HS_G2,		/* HS Gear 2 */
 	UFS_HS_G3,		/* HS Gear 3 */
+	UFS_HS_G4,		/* HS Gear 4 */
 };
 
 enum ufs_unipro_ver {
 	UFS_UNIPRO_VER_RESERVED = 0,
 	UFS_UNIPRO_VER_1_40 = 1, /* UniPro version 1.40 */
 	UFS_UNIPRO_VER_1_41 = 2, /* UniPro version 1.41 */
-	UFS_UNIPRO_VER_1_6 = 3,  /* UniPro version 1.6 */
-	UFS_UNIPRO_VER_MAX = 4,  /* UniPro unsupported version */
+	UFS_UNIPRO_VER_1_6  = 3, /* UniPro version 1.6 */
+	UFS_UNIPRO_VER_1_61 = 4, /* UniPro version 1.61 */
+	UFS_UNIPRO_VER_1_8  = 5, /* UniPro version 1.8 */
+	UFS_UNIPRO_VER_MAX  = 6, /* UniPro unsupported version */
 	/* UniPro version field mask in PA_LOCALVERINFO */
 	UFS_UNIPRO_VER_MASK = 0xF,
 };
diff --git a/drivers/slimbus/core.c b/drivers/slimbus/core.c
index 130c798..1d2bc18 100644
--- a/drivers/slimbus/core.c
+++ b/drivers/slimbus/core.c
@@ -162,9 +162,8 @@
 	sbdev->ctrl = ctrl;
 	INIT_LIST_HEAD(&sbdev->stream_list);
 	spin_lock_init(&sbdev->stream_list_lock);
-
-	if (node)
-		sbdev->dev.of_node = of_node_get(node);
+	sbdev->dev.of_node = of_node_get(node);
+	sbdev->dev.fwnode = of_fwnode_handle(node);
 
 	dev_set_name(&sbdev->dev, "%x:%x:%x:%x",
 				  sbdev->e_addr.manf_id,
diff --git a/drivers/soc/qcom/Kconfig b/drivers/soc/qcom/Kconfig
index 661e47a..68e18c2 100644
--- a/drivers/soc/qcom/Kconfig
+++ b/drivers/soc/qcom/Kconfig
@@ -17,7 +17,7 @@
 	  Subsystem (AOSS) using Qualcomm Messaging Protocol (QMP).
 
 config QCOM_COMMAND_DB
-	bool "Qualcomm Command DB"
+	tristate "Qualcomm Command DB"
 	depends on ARCH_QCOM || COMPILE_TEST
 	depends on OF_RESERVED_MEM
 	help
@@ -102,7 +102,7 @@
 	  Say y here if you intend to boot the modem remoteproc.
 
 config QCOM_RPMH
-	bool "Qualcomm RPM-Hardened (RPMH) Communication"
+	tristate "Qualcomm RPM-Hardened (RPMH) Communication"
 	depends on ARCH_QCOM && ARM64 || COMPILE_TEST
 	help
 	  Support for communication with the hardened-RPM blocks in
@@ -112,7 +112,7 @@
 	  help apply the aggregated state on the resource.
 
 config QCOM_RPMHPD
-	bool "Qualcomm RPMh Power domain driver"
+	tristate "Qualcomm RPMh Power domain driver"
 	depends on QCOM_RPMH && QCOM_COMMAND_DB
 	help
 	  QCOM RPMh Power domain driver to support power-domains with
@@ -121,8 +121,8 @@
 	  for the voltage rail.
 
 config QCOM_RPMPD
-	bool "Qualcomm RPM Power domain driver"
-	depends on QCOM_SMD_RPM=y
+	tristate "Qualcomm RPM Power domain driver"
+	depends on QCOM_SMD_RPM
 	help
 	  QCOM RPM Power domain driver to support power-domains with
 	  performance states. The driver communicates a performance state
diff --git a/drivers/soc/qcom/cmd-db.c b/drivers/soc/qcom/cmd-db.c
index f6c3d17..f79a81a 100644
--- a/drivers/soc/qcom/cmd-db.c
+++ b/drivers/soc/qcom/cmd-db.c
@@ -1,7 +1,8 @@
 /* SPDX-License-Identifier: GPL-2.0 */
-/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. */
+/* Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved. */
 
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
@@ -266,12 +267,14 @@
 	{ .compatible = "qcom,cmd-db" },
 	{ },
 };
+MODULE_DEVICE_TABLE(of, cmd_db_match_table);
 
 static struct platform_driver cmd_db_dev_driver = {
 	.probe  = cmd_db_dev_probe,
 	.driver = {
 		   .name = "cmd-db",
 		   .of_match_table = cmd_db_match_table,
+		   .suppress_bind_attrs = true,
 	},
 };
 
@@ -280,3 +283,6 @@
 	return platform_driver_register(&cmd_db_dev_driver);
 }
 arch_initcall(cmd_db_device_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. Command DB Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
index f9e309f..1a03eaa 100644
--- a/drivers/soc/qcom/qmi_interface.c
+++ b/drivers/soc/qcom/qmi_interface.c
@@ -655,8 +655,12 @@
 
 	qmi->sock = qmi_sock_create(qmi, &qmi->sq);
 	if (IS_ERR(qmi->sock)) {
-		pr_err("failed to create QMI socket\n");
-		ret = PTR_ERR(qmi->sock);
+		if (PTR_ERR(qmi->sock) == -EAFNOSUPPORT) {
+			ret = -EPROBE_DEFER;
+		} else {
+			pr_err("failed to create QMI socket\n");
+			ret = PTR_ERR(qmi->sock);
+		}
 		goto err_destroy_wq;
 	}
 
diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c
index 8924fcd..f3409fe6 100644
--- a/drivers/soc/qcom/rpmh-rsc.c
+++ b/drivers/soc/qcom/rpmh-rsc.c
@@ -11,6 +11,7 @@
 #include <linux/io.h>
 #include <linux/kernel.h>
 #include <linux/list.h>
+#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
@@ -709,6 +710,8 @@
 	{ .compatible = "qcom,rpmh-rsc", },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmh_drv_match);
+
 
 static struct platform_driver rpmh_driver = {
 	.probe = rpmh_rsc_probe,
@@ -724,3 +727,6 @@
 	return platform_driver_register(&rpmh_driver);
 }
 arch_initcall(rpmh_driver_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPMh Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/rpmhpd.c b/drivers/soc/qcom/rpmhpd.c
index aa24237..a181d0a 100644
--- a/drivers/soc/qcom/rpmhpd.c
+++ b/drivers/soc/qcom/rpmhpd.c
@@ -4,6 +4,7 @@
 #include <linux/err.h>
 #include <linux/init.h>
 #include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/pm_domain.h>
 #include <linux/slab.h>
@@ -135,6 +136,7 @@
 	{ .compatible = "qcom,sdm845-rpmhpd", .data = &sdm845_desc },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmhpd_match_table);
 
 static int rpmhpd_send_corner(struct rpmhpd *pd, int state,
 			      unsigned int corner, bool sync)
@@ -405,3 +407,6 @@
 	return platform_driver_register(&rpmhpd_driver);
 }
 core_initcall(rpmhpd_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPMh Power Domain Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/soc/qcom/rpmpd.c b/drivers/soc/qcom/rpmpd.c
index 3c1a55c..32258d8 100644
--- a/drivers/soc/qcom/rpmpd.c
+++ b/drivers/soc/qcom/rpmpd.c
@@ -5,6 +5,7 @@
 #include <linux/init.h>
 #include <linux/kernel.h>
 #include <linux/mutex.h>
+#include <linux/module.h>
 #include <linux/pm_domain.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
@@ -203,6 +204,7 @@
 	{ .compatible = "qcom,qcs404-rpmpd", .data = &qcs404_desc },
 	{ }
 };
+MODULE_DEVICE_TABLE(of, rpmpd_match_table);
 
 static int rpmpd_send_enable(struct rpmpd *pd, bool enable)
 {
@@ -399,3 +401,7 @@
 	return platform_driver_register(&rpmpd_driver);
 }
 core_initcall(rpmpd_init);
+
+MODULE_DESCRIPTION("Qualcomm Technologies, Inc. RPM Power Domain Driver");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:qcom-rpmpd");
diff --git a/drivers/soc/tegra/Kconfig b/drivers/soc/tegra/Kconfig
index 25df4406..ce3f127 100644
--- a/drivers/soc/tegra/Kconfig
+++ b/drivers/soc/tegra/Kconfig
@@ -78,6 +78,7 @@
 	select SOC_TEGRA_FLOWCTRL
 	select SOC_TEGRA_PMC
 	select TEGRA_TIMER
+	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/spi/spi-sprd-adi.c b/drivers/spi/spi-sprd-adi.c
index e804a38..6744452 100644
--- a/drivers/spi/spi-sprd-adi.c
+++ b/drivers/spi/spi-sprd-adi.c
@@ -77,6 +77,7 @@
 
 /* Bits definitions for register REG_WDG_CTRL */
 #define BIT_WDG_RUN			BIT(1)
+#define BIT_WDG_NEW			BIT(2)
 #define BIT_WDG_RST			BIT(3)
 
 /* Registers definitions for PMIC */
@@ -383,6 +384,10 @@
 	/* Unlock the watchdog */
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY);
 
+	sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
+	val |= BIT_WDG_NEW;
+	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val);
+
 	/* Load the watchdog timeout value, 50ms is always enough. */
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index ac05c9c..3cdd3b2 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -3175,7 +3175,29 @@
 	if (spi->controller->setup)
 		status = spi->controller->setup(spi);
 
-	spi_set_cs(spi, false);
+	if (spi->controller->auto_runtime_pm && spi->controller->set_cs) {
+		status = pm_runtime_get_sync(spi->controller->dev.parent);
+		if (status < 0) {
+			pm_runtime_put_noidle(spi->controller->dev.parent);
+			dev_err(&spi->controller->dev, "Failed to power device: %d\n",
+				status);
+			return status;
+		}
+
+		/*
+		 * We do not want to return positive value from pm_runtime_get,
+		 * there are many instances of devices calling spi_setup() and
+		 * checking for a non-zero return value instead of a negative
+		 * return value.
+		 */
+		status = 0;
+
+		spi_set_cs(spi, false);
+		pm_runtime_mark_last_busy(spi->controller->dev.parent);
+		pm_runtime_put_autosuspend(spi->controller->dev.parent);
+	} else {
+		spi_set_cs(spi, false);
+	}
 
 	if (spi->rt && !spi->controller->rt) {
 		spi->controller->rt = true;
diff --git a/drivers/staging/android/ion/Kconfig b/drivers/staging/android/ion/Kconfig
index 989fe84..7b7da97 100644
--- a/drivers/staging/android/ion/Kconfig
+++ b/drivers/staging/android/ion/Kconfig
@@ -11,17 +11,4 @@
 	  If you're not using Android its probably safe to
 	  say N here.
 
-config ION_SYSTEM_HEAP
-	bool "Ion system heap"
-	depends on ION
-	help
-	  Choose this option to enable the Ion system heap. The system heap
-	  is backed by pages from the buddy allocator. If in doubt, say Y.
-
-config ION_CMA_HEAP
-	bool "Ion CMA heap support"
-	depends on ION && DMA_CMA
-	help
-	  Choose this option to enable CMA heaps with Ion. This heap is backed
-	  by the Contiguous Memory Allocator (CMA). If your system has these
-	  regions, you should say Y here.
+source "drivers/staging/android/ion/heaps/Kconfig"
diff --git a/drivers/staging/android/ion/Makefile b/drivers/staging/android/ion/Makefile
index 5f4487b..7f8fd0f 100644
--- a/drivers/staging/android/ion/Makefile
+++ b/drivers/staging/android/ion/Makefile
@@ -1,4 +1,4 @@
 # SPDX-License-Identifier: GPL-2.0
-obj-$(CONFIG_ION) += ion.o ion_heap.o
-obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_system_heap.o ion_page_pool.o
-obj-$(CONFIG_ION_CMA_HEAP) += ion_cma_heap.o
+obj-$(CONFIG_ION)	+= ion.o ion_buffer.o ion_dma_buf.o ion_heap.o
+CFLAGS_ion_buffer.o 	= -I$(src)
+obj-y			+= heaps/
diff --git a/drivers/staging/android/ion/heaps/Kconfig b/drivers/staging/android/ion/heaps/Kconfig
new file mode 100644
index 0000000..5034c45
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/Kconfig
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-2.0
+config ION_SYSTEM_HEAP
+	tristate "Ion system heap"
+	depends on ION
+	help
+	  Choose this option to enable the Ion system heap. The system heap
+	  is backed by pages from the buddy allocator. If in doubt, say Y.
+
+config ION_CMA_HEAP
+	tristate "Ion CMA heap support"
+	depends on ION && DMA_CMA
+	help
+	  Choose this option to enable CMA heaps with Ion. This heap is backed
+	  by the Contiguous Memory Allocator (CMA). If your system has these
+	  regions, you should say Y here.
diff --git a/drivers/staging/android/ion/heaps/Makefile b/drivers/staging/android/ion/heaps/Makefile
new file mode 100644
index 0000000..82e36e8
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_ION_SYSTEM_HEAP) += ion_sys_heap.o
+ion_sys_heap-y := ion_system_heap.o ion_page_pool.o
+
+obj-$(CONFIG_ION_CMA_HEAP) += ion_cma_heap.o
diff --git a/drivers/staging/android/ion/heaps/ion_cma_heap.c b/drivers/staging/android/ion/heaps/ion_cma_heap.c
new file mode 100644
index 0000000..5ae0bac
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_cma_heap.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator CMA heap exporter
+ *
+ * Copyright (C) Linaro 2012
+ * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
+ */
+
+#include <linux/device.h>
+#include <linux/ion.h>
+#include <linux/slab.h>
+#include <linux/errno.h>
+#include <linux/err.h>
+#include <linux/cma.h>
+#include <linux/scatterlist.h>
+#include <linux/highmem.h>
+
+struct ion_cma_heap {
+	struct ion_heap heap;
+	struct cma *cma;
+} cma_heaps[MAX_CMA_AREAS];
+
+#define to_cma_heap(x) container_of(x, struct ion_cma_heap, heap)
+
+/* ION CMA heap operations functions */
+static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
+			    unsigned long len,
+			    unsigned long flags)
+{
+	struct ion_cma_heap *cma_heap = to_cma_heap(heap);
+	struct sg_table *table;
+	struct page *pages;
+	unsigned long size = PAGE_ALIGN(len);
+	unsigned long nr_pages = size >> PAGE_SHIFT;
+	unsigned long align = get_order(size);
+	int ret;
+
+	if (align > CONFIG_CMA_ALIGNMENT)
+		align = CONFIG_CMA_ALIGNMENT;
+
+	pages = cma_alloc(cma_heap->cma, nr_pages, align, false);
+	if (!pages)
+		return -ENOMEM;
+
+	if (PageHighMem(pages)) {
+		unsigned long nr_clear_pages = nr_pages;
+		struct page *page = pages;
+
+		while (nr_clear_pages > 0) {
+			void *vaddr = kmap_atomic(page);
+
+			memset(vaddr, 0, PAGE_SIZE);
+			kunmap_atomic(vaddr);
+			page++;
+			nr_clear_pages--;
+		}
+	} else {
+		memset(page_address(pages), 0, size);
+	}
+
+	table = kmalloc(sizeof(*table), GFP_KERNEL);
+	if (!table)
+		goto err;
+
+	ret = sg_alloc_table(table, 1, GFP_KERNEL);
+	if (ret)
+		goto free_mem;
+
+	sg_set_page(table->sgl, pages, size, 0);
+
+	buffer->priv_virt = pages;
+	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
+	return 0;
+
+free_mem:
+	kfree(table);
+err:
+	cma_release(cma_heap->cma, pages, nr_pages);
+	return -ENOMEM;
+}
+
+static void ion_cma_free(struct ion_buffer *buffer)
+{
+	struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
+	struct page *pages = buffer->priv_virt;
+	unsigned long nr_pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
+
+	/* release memory */
+	cma_release(cma_heap->cma, pages, nr_pages);
+	/* release sg table */
+	sg_free_table(buffer->sg_table);
+	kfree(buffer->sg_table);
+}
+
+static struct ion_heap_ops ion_cma_ops = {
+	.allocate = ion_cma_allocate,
+	.free = ion_cma_free,
+};
+
+static int __ion_add_cma_heap(struct cma *cma, void *data)
+{
+	int *cma_nr = data;
+	struct ion_cma_heap *cma_heap;
+	int ret;
+
+	if (*cma_nr >= MAX_CMA_AREAS)
+		return -EINVAL;
+
+	cma_heap = &cma_heaps[*cma_nr];
+	cma_heap->heap.ops = &ion_cma_ops;
+	cma_heap->heap.type = ION_HEAP_TYPE_DMA;
+	cma_heap->heap.name = cma_get_name(cma);
+
+	ret = ion_device_add_heap(&cma_heap->heap);
+	if (ret)
+		goto out;
+
+	cma_heap->cma = cma;
+	*cma_nr += 1;
+out:
+	return 0;
+}
+
+static int __init ion_cma_heap_init(void)
+{
+	int ret;
+	int nr = 0;
+
+	ret = cma_for_each_area(__ion_add_cma_heap, &nr);
+	if (ret) {
+		for (nr = 0; nr < MAX_CMA_AREAS && cma_heaps[nr].cma; nr++)
+			ion_device_remove_heap(&cma_heaps[nr].heap);
+	}
+
+	return ret;
+}
+
+static void __exit ion_cma_heap_exit(void)
+{
+	int nr;
+
+	for (nr = 0; nr < MAX_CMA_AREAS && cma_heaps[nr].cma; nr++)
+		ion_device_remove_heap(&cma_heaps[nr].heap);
+}
+
+subsys_initcall(ion_cma_heap_init);
+module_exit(ion_cma_heap_exit);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/android/ion/heaps/ion_page_pool.c b/drivers/staging/android/ion/heaps/ion_page_pool.c
new file mode 100644
index 0000000..77c5b79
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_page_pool.c
@@ -0,0 +1,172 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator page pool helpers
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <linux/list.h>
+#include <linux/slab.h>
+#include <linux/swap.h>
+#include <linux/sched/signal.h>
+
+#include "ion_page_pool.h"
+
+static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
+{
+	if (fatal_signal_pending(current))
+		return NULL;
+	return alloc_pages(pool->gfp_mask, pool->order);
+}
+
+static void ion_page_pool_free_pages(struct ion_page_pool *pool,
+				     struct page *page)
+{
+	__free_pages(page, pool->order);
+}
+
+static void ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
+{
+	mutex_lock(&pool->mutex);
+	if (PageHighMem(page)) {
+		list_add_tail(&page->lru, &pool->high_items);
+		pool->high_count++;
+	} else {
+		list_add_tail(&page->lru, &pool->low_items);
+		pool->low_count++;
+	}
+
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							1 << pool->order);
+	mutex_unlock(&pool->mutex);
+}
+
+static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high)
+{
+	struct page *page;
+
+	if (high) {
+		BUG_ON(!pool->high_count);
+		page = list_first_entry(&pool->high_items, struct page, lru);
+		pool->high_count--;
+	} else {
+		BUG_ON(!pool->low_count);
+		page = list_first_entry(&pool->low_items, struct page, lru);
+		pool->low_count--;
+	}
+
+	list_del(&page->lru);
+	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
+							-(1 << pool->order));
+	return page;
+}
+
+struct page *ion_page_pool_alloc(struct ion_page_pool *pool)
+{
+	struct page *page = NULL;
+
+	BUG_ON(!pool);
+
+	mutex_lock(&pool->mutex);
+	if (pool->high_count)
+		page = ion_page_pool_remove(pool, true);
+	else if (pool->low_count)
+		page = ion_page_pool_remove(pool, false);
+	mutex_unlock(&pool->mutex);
+
+	if (!page)
+		page = ion_page_pool_alloc_pages(pool);
+
+	return page;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_alloc);
+
+void ion_page_pool_free(struct ion_page_pool *pool, struct page *page)
+{
+	BUG_ON(pool->order != compound_order(page));
+
+	ion_page_pool_add(pool, page);
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_free);
+
+static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
+{
+	int count = pool->low_count;
+
+	if (high)
+		count += pool->high_count;
+
+	return count << pool->order;
+}
+
+int ion_page_pool_nr_pages(struct ion_page_pool *pool)
+{
+	int nr_total_pages;
+
+	mutex_lock(&pool->mutex);
+	nr_total_pages = ion_page_pool_total(pool, true);
+	mutex_unlock(&pool->mutex);
+
+	return nr_total_pages;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_nr_pages);
+
+int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
+			 int nr_to_scan)
+{
+	int freed = 0;
+	bool high;
+
+	if (current_is_kswapd())
+		high = true;
+	else
+		high = !!(gfp_mask & __GFP_HIGHMEM);
+
+	if (nr_to_scan == 0)
+		return ion_page_pool_total(pool, high);
+
+	while (freed < nr_to_scan) {
+		struct page *page;
+
+		mutex_lock(&pool->mutex);
+		if (pool->low_count) {
+			page = ion_page_pool_remove(pool, false);
+		} else if (high && pool->high_count) {
+			page = ion_page_pool_remove(pool, true);
+		} else {
+			mutex_unlock(&pool->mutex);
+			break;
+		}
+		mutex_unlock(&pool->mutex);
+		ion_page_pool_free_pages(pool, page);
+		freed += (1 << pool->order);
+	}
+
+	return freed;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_shrink);
+
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
+{
+	struct ion_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
+
+	if (!pool)
+		return NULL;
+	pool->high_count = 0;
+	pool->low_count = 0;
+	INIT_LIST_HEAD(&pool->low_items);
+	INIT_LIST_HEAD(&pool->high_items);
+	pool->gfp_mask = gfp_mask | __GFP_COMP;
+	pool->order = order;
+	mutex_init(&pool->mutex);
+	plist_node_init(&pool->list, order);
+
+	return pool;
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_create);
+
+void ion_page_pool_destroy(struct ion_page_pool *pool)
+{
+	kfree(pool);
+}
+EXPORT_SYMBOL_GPL(ion_page_pool_destroy);
diff --git a/drivers/staging/android/ion/heaps/ion_page_pool.h b/drivers/staging/android/ion/heaps/ion_page_pool.h
new file mode 100644
index 0000000..10c7909
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_page_pool.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * ION Page Pool kernel interface header
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#ifndef _ION_PAGE_POOL_H
+#define _ION_PAGE_POOL_H
+
+#include <linux/mm_types.h>
+#include <linux/mutex.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+
+/**
+ * functions for creating and destroying a heap pool -- allows you
+ * to keep a pool of pre allocated memory to use from your heap.  Keeping
+ * a pool of memory that is ready for dma, ie any cached mapping have been
+ * invalidated from the cache, provides a significant performance benefit on
+ * many systems
+ */
+
+/**
+ * struct ion_page_pool - pagepool struct
+ * @high_count:		number of highmem items in the pool
+ * @low_count:		number of lowmem items in the pool
+ * @high_items:		list of highmem items
+ * @low_items:		list of lowmem items
+ * @mutex:		lock protecting this struct and especially the count
+ *			item list
+ * @gfp_mask:		gfp_mask to use from alloc
+ * @order:		order of pages in the pool
+ * @list:		plist node for list of pools
+ *
+ * Allows you to keep a pool of pre allocated pages to use from your heap.
+ * Keeping a pool of pages that is ready for dma, ie any cached mapping have
+ * been invalidated from the cache, provides a significant performance benefit
+ * on many systems
+ */
+struct ion_page_pool {
+	int high_count;
+	int low_count;
+	struct list_head high_items;
+	struct list_head low_items;
+	struct mutex mutex;
+	gfp_t gfp_mask;
+	unsigned int order;
+	struct plist_node list;
+};
+
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order);
+void ion_page_pool_destroy(struct ion_page_pool *pool);
+struct page *ion_page_pool_alloc(struct ion_page_pool *pool);
+void ion_page_pool_free(struct ion_page_pool *pool, struct page *page);
+int ion_page_pool_nr_pages(struct ion_page_pool *pool);
+
+/** ion_page_pool_shrink - shrinks the size of the memory cached in the pool
+ * @pool:		the pool
+ * @gfp_mask:		the memory type to reclaim
+ * @nr_to_scan:		number of items to shrink in pages
+ *
+ * returns the number of items freed in pages
+ */
+int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
+			 int nr_to_scan);
+#endif /* _ION_PAGE_POOL_H */
diff --git a/drivers/staging/android/ion/heaps/ion_system_heap.c b/drivers/staging/android/ion/heaps/ion_system_heap.c
new file mode 100644
index 0000000..7727a2b
--- /dev/null
+++ b/drivers/staging/android/ion/heaps/ion_system_heap.c
@@ -0,0 +1,298 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator system heap exporter
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#include <asm/page.h>
+#include <linux/dma-mapping.h>
+#include <linux/err.h>
+#include <linux/highmem.h>
+#include <linux/ion.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/scatterlist.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "ion_page_pool.h"
+
+#define NUM_ORDERS ARRAY_SIZE(orders)
+
+static gfp_t high_order_gfp_flags = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN |
+				     __GFP_NORETRY) & ~__GFP_RECLAIM;
+static gfp_t low_order_gfp_flags  = GFP_HIGHUSER | __GFP_ZERO;
+static const unsigned int orders[] = {8, 4, 0};
+
+static int order_to_index(unsigned int order)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++)
+		if (order == orders[i])
+			return i;
+	BUG();
+	return -1;
+}
+
+static inline unsigned int order_to_size(int order)
+{
+	return PAGE_SIZE << order;
+}
+
+struct ion_system_heap {
+	struct ion_heap heap;
+	struct ion_page_pool *pools[NUM_ORDERS];
+};
+
+static struct page *alloc_buffer_page(struct ion_system_heap *heap,
+				      struct ion_buffer *buffer,
+				      unsigned long order)
+{
+	struct ion_page_pool *pool = heap->pools[order_to_index(order)];
+
+	return ion_page_pool_alloc(pool);
+}
+
+static void free_buffer_page(struct ion_system_heap *heap,
+			     struct ion_buffer *buffer, struct page *page)
+{
+	struct ion_page_pool *pool;
+	unsigned int order = compound_order(page);
+
+	/* go to system */
+	if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
+		__free_pages(page, order);
+		return;
+	}
+
+	pool = heap->pools[order_to_index(order)];
+
+	ion_page_pool_free(pool, page);
+}
+
+static struct page *alloc_largest_available(struct ion_system_heap *heap,
+					    struct ion_buffer *buffer,
+					    unsigned long size,
+					    unsigned int max_order)
+{
+	struct page *page;
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		if (size < order_to_size(orders[i]))
+			continue;
+		if (max_order < orders[i])
+			continue;
+
+		page = alloc_buffer_page(heap, buffer, orders[i]);
+		if (!page)
+			continue;
+
+		return page;
+	}
+
+	return NULL;
+}
+
+static int ion_system_heap_allocate(struct ion_heap *heap,
+				    struct ion_buffer *buffer,
+				    unsigned long size,
+				    unsigned long flags)
+{
+	struct ion_system_heap *sys_heap = container_of(heap,
+							struct ion_system_heap,
+							heap);
+	struct sg_table *table;
+	struct scatterlist *sg;
+	struct list_head pages;
+	struct page *page, *tmp_page;
+	int i = 0;
+	unsigned long size_remaining = PAGE_ALIGN(size);
+	unsigned int max_order = orders[0];
+
+	if (size / PAGE_SIZE > totalram_pages() / 2)
+		return -ENOMEM;
+
+	INIT_LIST_HEAD(&pages);
+	while (size_remaining > 0) {
+		page = alloc_largest_available(sys_heap, buffer, size_remaining,
+					       max_order);
+		if (!page)
+			goto free_pages;
+		list_add_tail(&page->lru, &pages);
+		size_remaining -= page_size(page);
+		max_order = compound_order(page);
+		i++;
+	}
+	table = kmalloc(sizeof(*table), GFP_KERNEL);
+	if (!table)
+		goto free_pages;
+
+	if (sg_alloc_table(table, i, GFP_KERNEL))
+		goto free_table;
+
+	sg = table->sgl;
+	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
+		sg_set_page(sg, page, page_size(page), 0);
+		sg = sg_next(sg);
+		list_del(&page->lru);
+	}
+
+	buffer->sg_table = table;
+
+	ion_buffer_prep_noncached(buffer);
+
+	return 0;
+
+free_table:
+	kfree(table);
+free_pages:
+	list_for_each_entry_safe(page, tmp_page, &pages, lru)
+		free_buffer_page(sys_heap, buffer, page);
+	return -ENOMEM;
+}
+
+static void ion_system_heap_free(struct ion_buffer *buffer)
+{
+	struct ion_system_heap *sys_heap = container_of(buffer->heap,
+							struct ion_system_heap,
+							heap);
+	struct sg_table *table = buffer->sg_table;
+	struct scatterlist *sg;
+	int i;
+
+	/* zero the buffer before goto page pool */
+	if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
+		ion_buffer_zero(buffer);
+
+	for_each_sg(table->sgl, sg, table->nents, i)
+		free_buffer_page(sys_heap, buffer, sg_page(sg));
+	sg_free_table(table);
+	kfree(table);
+}
+
+static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
+				  int nr_to_scan)
+{
+	struct ion_page_pool *pool;
+	struct ion_system_heap *sys_heap;
+	int nr_total = 0;
+	int i, nr_freed;
+	int only_scan = 0;
+
+	sys_heap = container_of(heap, struct ion_system_heap, heap);
+
+	if (!nr_to_scan)
+		only_scan = 1;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		pool = sys_heap->pools[i];
+
+		if (only_scan) {
+			nr_total += ion_page_pool_shrink(pool,
+							 gfp_mask,
+							 nr_to_scan);
+
+		} else {
+			nr_freed = ion_page_pool_shrink(pool,
+							gfp_mask,
+							nr_to_scan);
+			nr_to_scan -= nr_freed;
+			nr_total += nr_freed;
+			if (nr_to_scan <= 0)
+				break;
+		}
+	}
+	return nr_total;
+}
+
+static long ion_system_get_pool_size(struct ion_heap *heap)
+{
+	struct ion_system_heap *sys_heap;
+	long total_pages = 0;
+	int i;
+
+	sys_heap = container_of(heap, struct ion_system_heap, heap);
+	for (i = 0; i < NUM_ORDERS; i++)
+		total_pages += ion_page_pool_nr_pages(sys_heap->pools[i]);
+
+	return total_pages;
+}
+
+static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++)
+		if (pools[i])
+			ion_page_pool_destroy(pools[i]);
+}
+
+static int ion_system_heap_create_pools(struct ion_page_pool **pools)
+{
+	int i;
+
+	for (i = 0; i < NUM_ORDERS; i++) {
+		struct ion_page_pool *pool;
+		gfp_t gfp_flags = low_order_gfp_flags;
+
+		/*
+		 * Enable NOWARN on larger order allocations, as
+		 * we will fall back to 0-order if things fail.
+		 * This avoids warning noise in dmesg.
+		 */
+		if (orders[i] > 0)
+			gfp_flags |= __GFP_NOWARN;
+
+		if (orders[i] > 4)
+			gfp_flags = high_order_gfp_flags;
+
+		pool = ion_page_pool_create(gfp_flags, orders[i]);
+		if (!pool)
+			goto err_create_pool;
+		pools[i] = pool;
+	}
+
+	return 0;
+
+err_create_pool:
+	ion_system_heap_destroy_pools(pools);
+	return -ENOMEM;
+}
+
+static struct ion_heap_ops system_heap_ops = {
+	.allocate = ion_system_heap_allocate,
+	.free = ion_system_heap_free,
+	.shrink = ion_system_heap_shrink,
+	.get_pool_size = ion_system_get_pool_size,
+};
+
+static struct ion_system_heap system_heap = {
+	.heap = {
+		.ops = &system_heap_ops,
+		.type = ION_HEAP_TYPE_SYSTEM,
+		.flags = ION_HEAP_FLAG_DEFER_FREE,
+		.name = "ion_system_heap",
+	}
+};
+
+static int __init ion_system_heap_init(void)
+{
+	int ret = ion_system_heap_create_pools(system_heap.pools);
+	if (ret)
+		return ret;
+
+	return ion_device_add_heap(&system_heap.heap);
+}
+
+static void __exit ion_system_heap_exit(void)
+{
+	ion_device_remove_heap(&system_heap.heap);
+	ion_system_heap_destroy_pools(system_heap.pools);
+}
+
+subsys_initcall(ion_system_heap_init);
+module_exit(ion_system_heap_exit);
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index e6b1ca1..61d2a8c 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -3,8 +3,11 @@
  * ION Memory Allocator
  *
  * Copyright (C) 2011 Google, Inc.
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
  */
 
+#include <linux/bitmap.h>
 #include <linux/debugfs.h>
 #include <linux/device.h>
 #include <linux/dma-buf.h>
@@ -15,393 +18,42 @@
 #include <linux/fs.h>
 #include <linux/kthread.h>
 #include <linux/list.h>
-#include <linux/miscdevice.h>
 #include <linux/mm.h>
 #include <linux/mm_types.h>
 #include <linux/rbtree.h>
 #include <linux/sched/task.h>
 #include <linux/slab.h>
 #include <linux/uaccess.h>
-#include <linux/vmalloc.h>
 
-#include "ion.h"
+#include "ion_private.h"
+
+#define ION_CURRENT_ABI_VERSION  2
 
 static struct ion_device *internal_dev;
-static int heap_id;
 
-/* this function should only be called while dev->lock is held */
-static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
-					    struct ion_device *dev,
-					    unsigned long len,
-					    unsigned long flags)
+/* Entry into ION allocator for rest of the kernel */
+struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+			  unsigned int flags)
 {
-	struct ion_buffer *buffer;
-	int ret;
-
-	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
-	if (!buffer)
-		return ERR_PTR(-ENOMEM);
-
-	buffer->heap = heap;
-	buffer->flags = flags;
-	buffer->dev = dev;
-	buffer->size = len;
-
-	ret = heap->ops->allocate(heap, buffer, len, flags);
-
-	if (ret) {
-		if (!(heap->flags & ION_HEAP_FLAG_DEFER_FREE))
-			goto err2;
-
-		ion_heap_freelist_drain(heap, 0);
-		ret = heap->ops->allocate(heap, buffer, len, flags);
-		if (ret)
-			goto err2;
-	}
-
-	if (!buffer->sg_table) {
-		WARN_ONCE(1, "This heap needs to set the sgtable");
-		ret = -EINVAL;
-		goto err1;
-	}
-
-	spin_lock(&heap->stat_lock);
-	heap->num_of_buffers++;
-	heap->num_of_alloc_bytes += len;
-	if (heap->num_of_alloc_bytes > heap->alloc_bytes_wm)
-		heap->alloc_bytes_wm = heap->num_of_alloc_bytes;
-	spin_unlock(&heap->stat_lock);
-
-	INIT_LIST_HEAD(&buffer->attachments);
-	mutex_init(&buffer->lock);
-	return buffer;
-
-err1:
-	heap->ops->free(buffer);
-err2:
-	kfree(buffer);
-	return ERR_PTR(ret);
+	return ion_dmabuf_alloc(internal_dev, len, heap_id_mask, flags);
 }
+EXPORT_SYMBOL_GPL(ion_alloc);
 
-void ion_buffer_destroy(struct ion_buffer *buffer)
+int ion_free(struct ion_buffer *buffer)
 {
-	if (buffer->kmap_cnt > 0) {
-		pr_warn_once("%s: buffer still mapped in the kernel\n",
-			     __func__);
-		buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
-	}
-	buffer->heap->ops->free(buffer);
-	spin_lock(&buffer->heap->stat_lock);
-	buffer->heap->num_of_buffers--;
-	buffer->heap->num_of_alloc_bytes -= buffer->size;
-	spin_unlock(&buffer->heap->stat_lock);
-
-	kfree(buffer);
+	return ion_buffer_destroy(internal_dev, buffer);
 }
+EXPORT_SYMBOL_GPL(ion_free);
 
-static void _ion_buffer_destroy(struct ion_buffer *buffer)
+static int ion_alloc_fd(size_t len, unsigned int heap_id_mask,
+			unsigned int flags)
 {
-	struct ion_heap *heap = buffer->heap;
-
-	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
-		ion_heap_freelist_add(heap, buffer);
-	else
-		ion_buffer_destroy(buffer);
-}
-
-static void *ion_buffer_kmap_get(struct ion_buffer *buffer)
-{
-	void *vaddr;
-
-	if (buffer->kmap_cnt) {
-		buffer->kmap_cnt++;
-		return buffer->vaddr;
-	}
-	vaddr = buffer->heap->ops->map_kernel(buffer->heap, buffer);
-	if (WARN_ONCE(!vaddr,
-		      "heap->ops->map_kernel should return ERR_PTR on error"))
-		return ERR_PTR(-EINVAL);
-	if (IS_ERR(vaddr))
-		return vaddr;
-	buffer->vaddr = vaddr;
-	buffer->kmap_cnt++;
-	return vaddr;
-}
-
-static void ion_buffer_kmap_put(struct ion_buffer *buffer)
-{
-	buffer->kmap_cnt--;
-	if (!buffer->kmap_cnt) {
-		buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
-		buffer->vaddr = NULL;
-	}
-}
-
-static struct sg_table *dup_sg_table(struct sg_table *table)
-{
-	struct sg_table *new_table;
-	int ret, i;
-	struct scatterlist *sg, *new_sg;
-
-	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
-	if (!new_table)
-		return ERR_PTR(-ENOMEM);
-
-	ret = sg_alloc_table(new_table, table->nents, GFP_KERNEL);
-	if (ret) {
-		kfree(new_table);
-		return ERR_PTR(-ENOMEM);
-	}
-
-	new_sg = new_table->sgl;
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		memcpy(new_sg, sg, sizeof(*sg));
-		new_sg->dma_address = 0;
-		new_sg = sg_next(new_sg);
-	}
-
-	return new_table;
-}
-
-static void free_duped_table(struct sg_table *table)
-{
-	sg_free_table(table);
-	kfree(table);
-}
-
-struct ion_dma_buf_attachment {
-	struct device *dev;
-	struct sg_table *table;
-	struct list_head list;
-};
-
-static int ion_dma_buf_attach(struct dma_buf *dmabuf,
-			      struct dma_buf_attachment *attachment)
-{
-	struct ion_dma_buf_attachment *a;
-	struct sg_table *table;
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	a = kzalloc(sizeof(*a), GFP_KERNEL);
-	if (!a)
-		return -ENOMEM;
-
-	table = dup_sg_table(buffer->sg_table);
-	if (IS_ERR(table)) {
-		kfree(a);
-		return -ENOMEM;
-	}
-
-	a->table = table;
-	a->dev = attachment->dev;
-	INIT_LIST_HEAD(&a->list);
-
-	attachment->priv = a;
-
-	mutex_lock(&buffer->lock);
-	list_add(&a->list, &buffer->attachments);
-	mutex_unlock(&buffer->lock);
-
-	return 0;
-}
-
-static void ion_dma_buf_detatch(struct dma_buf *dmabuf,
-				struct dma_buf_attachment *attachment)
-{
-	struct ion_dma_buf_attachment *a = attachment->priv;
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	mutex_lock(&buffer->lock);
-	list_del(&a->list);
-	mutex_unlock(&buffer->lock);
-	free_duped_table(a->table);
-
-	kfree(a);
-}
-
-static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
-					enum dma_data_direction direction)
-{
-	struct ion_dma_buf_attachment *a = attachment->priv;
-	struct sg_table *table;
-
-	table = a->table;
-
-	if (!dma_map_sg(attachment->dev, table->sgl, table->nents,
-			direction))
-		return ERR_PTR(-ENOMEM);
-
-	return table;
-}
-
-static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
-			      struct sg_table *table,
-			      enum dma_data_direction direction)
-{
-	dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction);
-}
-
-static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	int ret = 0;
-
-	if (!buffer->heap->ops->map_user) {
-		pr_err("%s: this heap does not define a method for mapping to userspace\n",
-		       __func__);
-		return -EINVAL;
-	}
-
-	if (!(buffer->flags & ION_FLAG_CACHED))
-		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
-
-	mutex_lock(&buffer->lock);
-	/* now map it to userspace */
-	ret = buffer->heap->ops->map_user(buffer->heap, buffer, vma);
-	mutex_unlock(&buffer->lock);
-
-	if (ret)
-		pr_err("%s: failure mapping buffer to userspace\n",
-		       __func__);
-
-	return ret;
-}
-
-static void ion_dma_buf_release(struct dma_buf *dmabuf)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	_ion_buffer_destroy(buffer);
-}
-
-static void *ion_dma_buf_kmap(struct dma_buf *dmabuf, unsigned long offset)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-
-	return buffer->vaddr + offset * PAGE_SIZE;
-}
-
-static void ion_dma_buf_kunmap(struct dma_buf *dmabuf, unsigned long offset,
-			       void *ptr)
-{
-}
-
-static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
-					enum dma_data_direction direction)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	void *vaddr;
-	struct ion_dma_buf_attachment *a;
-	int ret = 0;
-
-	/*
-	 * TODO: Move this elsewhere because we don't always need a vaddr
-	 */
-	if (buffer->heap->ops->map_kernel) {
-		mutex_lock(&buffer->lock);
-		vaddr = ion_buffer_kmap_get(buffer);
-		if (IS_ERR(vaddr)) {
-			ret = PTR_ERR(vaddr);
-			goto unlock;
-		}
-		mutex_unlock(&buffer->lock);
-	}
-
-	mutex_lock(&buffer->lock);
-	list_for_each_entry(a, &buffer->attachments, list) {
-		dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
-				    direction);
-	}
-
-unlock:
-	mutex_unlock(&buffer->lock);
-	return ret;
-}
-
-static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
-				      enum dma_data_direction direction)
-{
-	struct ion_buffer *buffer = dmabuf->priv;
-	struct ion_dma_buf_attachment *a;
-
-	if (buffer->heap->ops->map_kernel) {
-		mutex_lock(&buffer->lock);
-		ion_buffer_kmap_put(buffer);
-		mutex_unlock(&buffer->lock);
-	}
-
-	mutex_lock(&buffer->lock);
-	list_for_each_entry(a, &buffer->attachments, list) {
-		dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents,
-				       direction);
-	}
-	mutex_unlock(&buffer->lock);
-
-	return 0;
-}
-
-static const struct dma_buf_ops dma_buf_ops = {
-	.map_dma_buf = ion_map_dma_buf,
-	.unmap_dma_buf = ion_unmap_dma_buf,
-	.mmap = ion_mmap,
-	.release = ion_dma_buf_release,
-	.attach = ion_dma_buf_attach,
-	.detach = ion_dma_buf_detatch,
-	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
-	.end_cpu_access = ion_dma_buf_end_cpu_access,
-	.map = ion_dma_buf_kmap,
-	.unmap = ion_dma_buf_kunmap,
-};
-
-static int ion_alloc(size_t len, unsigned int heap_id_mask, unsigned int flags)
-{
-	struct ion_device *dev = internal_dev;
-	struct ion_buffer *buffer = NULL;
-	struct ion_heap *heap;
-	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
 	int fd;
 	struct dma_buf *dmabuf;
 
-	pr_debug("%s: len %zu heap_id_mask %u flags %x\n", __func__,
-		 len, heap_id_mask, flags);
-	/*
-	 * traverse the list of heaps available in this system in priority
-	 * order.  If the heap type is supported by the client, and matches the
-	 * request of the caller allocate from it.  Repeat until allocate has
-	 * succeeded or all heaps have been tried
-	 */
-	len = PAGE_ALIGN(len);
-
-	if (!len)
-		return -EINVAL;
-
-	down_read(&dev->lock);
-	plist_for_each_entry(heap, &dev->heaps, node) {
-		/* if the caller didn't specify this heap id */
-		if (!((1 << heap->id) & heap_id_mask))
-			continue;
-		buffer = ion_buffer_create(heap, dev, len, flags);
-		if (!IS_ERR(buffer))
-			break;
-	}
-	up_read(&dev->lock);
-
-	if (!buffer)
-		return -ENODEV;
-
-	if (IS_ERR(buffer))
-		return PTR_ERR(buffer);
-
-	exp_info.ops = &dma_buf_ops;
-	exp_info.size = buffer->size;
-	exp_info.flags = O_RDWR;
-	exp_info.priv = buffer;
-
-	dmabuf = dma_buf_export(&exp_info);
-	if (IS_ERR(dmabuf)) {
-		_ion_buffer_destroy(buffer);
+	dmabuf = ion_dmabuf_alloc(internal_dev, len, heap_id_mask, flags);
+	if (IS_ERR(dmabuf))
 		return PTR_ERR(dmabuf);
-	}
 
 	fd = dma_buf_fd(dmabuf, O_CLOEXEC);
 	if (fd < 0)
@@ -410,6 +62,38 @@
 	return fd;
 }
 
+size_t ion_query_heaps_kernel(struct ion_heap_data *hdata, size_t size)
+{
+	struct ion_device *dev = internal_dev;
+	size_t i = 0, num_heaps = 0;
+	struct ion_heap *heap;
+
+	down_read(&dev->lock);
+
+	// If size is 0, return without updating hdata.
+	if (size == 0) {
+		num_heaps = dev->heap_cnt;
+		goto out;
+	}
+
+	plist_for_each_entry(heap, &dev->heaps, node) {
+		strncpy(hdata[i].name, heap->name, MAX_HEAP_NAME);
+		hdata[i].name[MAX_HEAP_NAME - 1] = '\0';
+		hdata[i].type = heap->type;
+		hdata[i].heap_id = heap->id;
+
+		i++;
+		if (i >= size)
+			break;
+	}
+
+	num_heaps = i;
+out:
+	up_read(&dev->lock);
+	return num_heaps;
+}
+EXPORT_SYMBOL_GPL(ion_query_heaps_kernel);
+
 static int ion_query_heaps(struct ion_heap_query *query)
 {
 	struct ion_device *dev = internal_dev;
@@ -458,6 +142,7 @@
 union ion_ioctl_arg {
 	struct ion_allocation_data allocation;
 	struct ion_heap_query query;
+	u32 ion_abi_version;
 };
 
 static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg)
@@ -506,9 +191,9 @@
 	{
 		int fd;
 
-		fd = ion_alloc(data.allocation.len,
-			       data.allocation.heap_id_mask,
-			       data.allocation.flags);
+		fd = ion_alloc_fd(data.allocation.len,
+				  data.allocation.heap_id_mask,
+				  data.allocation.flags);
 		if (fd < 0)
 			return fd;
 
@@ -519,6 +204,9 @@
 	case ION_IOC_HEAP_QUERY:
 		ret = ion_query_heaps(&data.query);
 		break;
+	case ION_IOC_ABI_VERSION:
+		data.ion_abi_version = ION_CURRENT_ABI_VERSION;
+		break;
 	default:
 		return -ENOTTY;
 	}
@@ -573,31 +261,88 @@
 DEFINE_SIMPLE_ATTRIBUTE(debug_shrink_fops, debug_shrink_get,
 			debug_shrink_set, "%llu\n");
 
-void ion_device_add_heap(struct ion_heap *heap)
+static int ion_assign_heap_id(struct ion_heap *heap, struct ion_device *dev)
+{
+	int id_bit = -EINVAL;
+	int start_bit = -1, end_bit = -1;
+
+	switch (heap->type) {
+	case ION_HEAP_TYPE_SYSTEM:
+		id_bit = __ffs(ION_HEAP_SYSTEM);
+		break;
+	case ION_HEAP_TYPE_DMA:
+		start_bit = __ffs(ION_HEAP_DMA_START);
+		end_bit = __ffs(ION_HEAP_DMA_END);
+		break;
+	case ION_HEAP_TYPE_CUSTOM ... ION_HEAP_TYPE_MAX:
+		start_bit = __ffs(ION_HEAP_CUSTOM_START);
+		end_bit = __ffs(ION_HEAP_CUSTOM_END);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	/* For carveout, dma & custom heaps, we first let the heaps choose their
+	 * own IDs. This allows the old behaviour of knowing the heap ids
+	 * of these type of heaps  in advance in user space. If a heap with
+	 * that ID already exists, it is an error.
+	 *
+	 * If the heap hasn't picked an id by itself, then we assign it
+	 * one.
+	 */
+	if (id_bit < 0) {
+		if (heap->id) {
+			id_bit = __ffs(heap->id);
+			if (id_bit < start_bit || id_bit > end_bit)
+				return -EINVAL;
+		} else {
+			id_bit = find_next_zero_bit(dev->heap_ids, end_bit + 1,
+						    start_bit);
+			if (id_bit > end_bit)
+				return -ENOSPC;
+		}
+	}
+
+	if (test_and_set_bit(id_bit, dev->heap_ids))
+		return -EEXIST;
+	heap->id = id_bit;
+	dev->heap_cnt++;
+
+	return 0;
+}
+
+int __ion_device_add_heap(struct ion_heap *heap, struct module *owner)
 {
 	struct ion_device *dev = internal_dev;
 	int ret;
 	struct dentry *heap_root;
 	char debug_name[64];
 
-	if (!heap->ops->allocate || !heap->ops->free)
-		pr_err("%s: can not add heap with invalid ops struct.\n",
-		       __func__);
+	if (!heap || !heap->ops || !heap->ops->allocate || !heap->ops->free) {
+		pr_err("%s: invalid heap or heap_ops\n", __func__);
+		ret = -EINVAL;
+		goto out;
+	}
 
+	heap->owner = owner;
 	spin_lock_init(&heap->free_lock);
 	spin_lock_init(&heap->stat_lock);
 	heap->free_list_size = 0;
 
-	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
-		ion_heap_init_deferred_free(heap);
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE) {
+		ret = ion_heap_init_deferred_free(heap);
+		if (ret)
+			goto out_heap_cleanup;
+	}
 
 	if ((heap->flags & ION_HEAP_FLAG_DEFER_FREE) || heap->ops->shrink) {
 		ret = ion_heap_init_shrinker(heap);
-		if (ret)
+		if (ret) {
 			pr_err("%s: Failed to register shrinker\n", __func__);
+			goto out_heap_cleanup;
+		}
 	}
 
-	heap->dev = dev;
 	heap->num_of_buffers = 0;
 	heap->num_of_alloc_bytes = 0;
 	heap->alloc_bytes_wm = 0;
@@ -625,8 +370,16 @@
 				    &debug_shrink_fops);
 	}
 
+	heap->debugfs_dir = heap_root;
 	down_write(&dev->lock);
-	heap->id = heap_id++;
+	ret = ion_assign_heap_id(heap, dev);
+	if (ret) {
+		pr_err("%s: Failed to assign heap id for heap type %x\n",
+		       __func__, heap->type);
+		up_write(&dev->lock);
+		goto out_debugfs_cleanup;
+	}
+
 	/*
 	 * use negative heap->id to reverse the priority -- when traversing
 	 * the list later attempt higher id numbers first
@@ -634,10 +387,99 @@
 	plist_node_init(&heap->node, -heap->id);
 	plist_add(&heap->node, &dev->heaps);
 
-	dev->heap_cnt++;
+	up_write(&dev->lock);
+
+	return 0;
+
+out_debugfs_cleanup:
+	debugfs_remove_recursive(heap->debugfs_dir);
+out_heap_cleanup:
+	ion_heap_cleanup(heap);
+out:
+	return ret;
+}
+EXPORT_SYMBOL_GPL(__ion_device_add_heap);
+
+void ion_device_remove_heap(struct ion_heap *heap)
+{
+	struct ion_device *dev = internal_dev;
+
+	if (!heap) {
+		pr_err("%s: Invalid argument\n", __func__);
+		return;
+	}
+
+	// take semaphore and remove the heap from dev->heap list
+	down_write(&dev->lock);
+	/* So no new allocations can happen from this heap */
+	plist_del(&heap->node, &dev->heaps);
+	if (ion_heap_cleanup(heap) != 0) {
+		pr_warn("%s: failed to cleanup heap (%s)\n",
+			__func__, heap->name);
+	}
+	debugfs_remove_recursive(heap->debugfs_dir);
+	clear_bit(heap->id, dev->heap_ids);
+	dev->heap_cnt--;
 	up_write(&dev->lock);
 }
-EXPORT_SYMBOL(ion_device_add_heap);
+EXPORT_SYMBOL_GPL(ion_device_remove_heap);
+
+static ssize_t
+total_heaps_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	return sprintf(buf, "%llu\n",
+		       div_u64(ion_get_total_heap_bytes(), 1024));
+}
+
+static ssize_t
+total_pools_kb_show(struct kobject *kobj, struct kobj_attribute *attr,
+		    char *buf)
+{
+	struct ion_device *dev = internal_dev;
+	struct ion_heap *heap;
+	u64 total_pages = 0;
+
+	down_read(&dev->lock);
+	plist_for_each_entry(heap, &dev->heaps, node)
+		if (heap->ops->get_pool_size)
+			total_pages += heap->ops->get_pool_size(heap);
+	up_read(&dev->lock);
+
+	return sprintf(buf, "%llu\n", total_pages * (PAGE_SIZE / 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;
+}
 
 static int ion_device_create(void)
 {
@@ -655,8 +497,13 @@
 	ret = misc_register(&idev->dev);
 	if (ret) {
 		pr_err("ion: failed to register misc device.\n");
-		kfree(idev);
-		return 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);
@@ -664,5 +511,11 @@
 	plist_head_init(&idev->heaps);
 	internal_dev = idev;
 	return 0;
+
+err_sysfs:
+	misc_deregister(&idev->dev);
+err_reg:
+	kfree(idev);
+	return ret;
 }
 subsys_initcall(ion_device_create);
diff --git a/drivers/staging/android/ion/ion.h b/drivers/staging/android/ion/ion.h
deleted file mode 100644
index 74914a2..0000000
--- a/drivers/staging/android/ion/ion.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * ION Memory Allocator kernel interface header
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#ifndef _ION_H
-#define _ION_H
-
-#include <linux/device.h>
-#include <linux/dma-direction.h>
-#include <linux/kref.h>
-#include <linux/mm_types.h>
-#include <linux/mutex.h>
-#include <linux/rbtree.h>
-#include <linux/sched.h>
-#include <linux/shrinker.h>
-#include <linux/types.h>
-#include <linux/miscdevice.h>
-
-#include "../uapi/ion.h"
-
-/**
- * struct ion_buffer - metadata for a particular buffer
- * @list:		element in list of deferred freeable buffers
- * @dev:		back pointer to the ion_device
- * @heap:		back pointer to the heap the buffer came from
- * @flags:		buffer specific flags
- * @private_flags:	internal buffer specific flags
- * @size:		size of the buffer
- * @priv_virt:		private data to the buffer representable as
- *			a void *
- * @lock:		protects the buffers cnt fields
- * @kmap_cnt:		number of times the buffer is mapped to the kernel
- * @vaddr:		the kernel mapping if kmap_cnt is not zero
- * @sg_table:		the sg table for the buffer
- * @attachments:	list of devices attached to this buffer
- */
-struct ion_buffer {
-	struct list_head list;
-	struct ion_device *dev;
-	struct ion_heap *heap;
-	unsigned long flags;
-	unsigned long private_flags;
-	size_t size;
-	void *priv_virt;
-	struct mutex lock;
-	int kmap_cnt;
-	void *vaddr;
-	struct sg_table *sg_table;
-	struct list_head attachments;
-};
-
-void ion_buffer_destroy(struct ion_buffer *buffer);
-
-/**
- * struct ion_device - the metadata of the ion device node
- * @dev:		the actual misc device
- * @lock:		rwsem protecting the tree of heaps and clients
- */
-struct ion_device {
-	struct miscdevice dev;
-	struct rw_semaphore lock;
-	struct plist_head heaps;
-	struct dentry *debug_root;
-	int heap_cnt;
-};
-
-/**
- * struct ion_heap_ops - ops to operate on a given heap
- * @allocate:		allocate memory
- * @free:		free memory
- * @map_kernel		map memory to the kernel
- * @unmap_kernel	unmap memory to the kernel
- * @map_user		map memory to userspace
- *
- * allocate, phys, and map_user return 0 on success, -errno on error.
- * map_dma and map_kernel return pointer on success, ERR_PTR on
- * error. @free will be called with ION_PRIV_FLAG_SHRINKER_FREE set in
- * the buffer's private_flags when called from a shrinker. In that
- * case, the pages being free'd must be truly free'd back to the
- * system, not put in a page pool or otherwise cached.
- */
-struct ion_heap_ops {
-	int (*allocate)(struct ion_heap *heap,
-			struct ion_buffer *buffer, unsigned long len,
-			unsigned long flags);
-	void (*free)(struct ion_buffer *buffer);
-	void * (*map_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
-	void (*unmap_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
-	int (*map_user)(struct ion_heap *mapper, struct ion_buffer *buffer,
-			struct vm_area_struct *vma);
-	int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan);
-};
-
-/**
- * heap flags - flags between the heaps and core ion code
- */
-#define ION_HEAP_FLAG_DEFER_FREE BIT(0)
-
-/**
- * private flags - flags internal to ion
- */
-/*
- * Buffer is being freed from a shrinker function. Skip any possible
- * heap-specific caching mechanism (e.g. page pools). Guarantees that
- * any buffer storage that came from the system allocator will be
- * returned to the system allocator.
- */
-#define ION_PRIV_FLAG_SHRINKER_FREE BIT(0)
-
-/**
- * struct ion_heap - represents a heap in the system
- * @node:		rb node to put the heap on the device's tree of heaps
- * @dev:		back pointer to the ion_device
- * @type:		type of heap
- * @ops:		ops struct as above
- * @flags:		flags
- * @id:			id of heap, also indicates priority of this heap when
- *			allocating.  These are specified by platform data and
- *			MUST be unique
- * @name:		used for debugging
- * @shrinker:		a shrinker for the heap
- * @free_list:		free list head if deferred free is used
- * @free_list_size	size of the deferred free list in bytes
- * @lock:		protects the free list
- * @waitqueue:		queue to wait on from deferred free thread
- * @task:		task struct of deferred free thread
- * @num_of_buffers	the number of currently allocated buffers
- * @num_of_alloc_bytes	the number of allocated bytes
- * @alloc_bytes_wm	the number of allocated bytes watermark
- *
- * Represents a pool of memory from which buffers can be made.  In some
- * systems the only heap is regular system memory allocated via vmalloc.
- * On others, some blocks might require large physically contiguous buffers
- * that are allocated from a specially reserved heap.
- */
-struct ion_heap {
-	struct plist_node node;
-	struct ion_device *dev;
-	enum ion_heap_type type;
-	struct ion_heap_ops *ops;
-	unsigned long flags;
-	unsigned int id;
-	const char *name;
-
-	/* deferred free support */
-	struct shrinker shrinker;
-	struct list_head free_list;
-	size_t free_list_size;
-	spinlock_t free_lock;
-	wait_queue_head_t waitqueue;
-	struct task_struct *task;
-
-	/* heap statistics */
-	u64 num_of_buffers;
-	u64 num_of_alloc_bytes;
-	u64 alloc_bytes_wm;
-
-	/* protect heap statistics */
-	spinlock_t stat_lock;
-};
-
-/**
- * ion_device_add_heap - adds a heap to the ion device
- * @heap:		the heap to add
- */
-void ion_device_add_heap(struct ion_heap *heap);
-
-/**
- * some helpers for common operations on buffers using the sg_table
- * and vaddr fields
- */
-void *ion_heap_map_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
-void ion_heap_unmap_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
-int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
-		      struct vm_area_struct *vma);
-int ion_heap_buffer_zero(struct ion_buffer *buffer);
-int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot);
-
-/**
- * ion_heap_init_shrinker
- * @heap:		the heap
- *
- * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag or defines the shrink op
- * this function will be called to setup a shrinker to shrink the freelists
- * and call the heap's shrink op.
- */
-int ion_heap_init_shrinker(struct ion_heap *heap);
-
-/**
- * ion_heap_init_deferred_free -- initialize deferred free functionality
- * @heap:		the heap
- *
- * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag this function will
- * be called to setup deferred frees. Calls to free the buffer will
- * return immediately and the actual free will occur some time later
- */
-int ion_heap_init_deferred_free(struct ion_heap *heap);
-
-/**
- * ion_heap_freelist_add - add a buffer to the deferred free list
- * @heap:		the heap
- * @buffer:		the buffer
- *
- * Adds an item to the deferred freelist.
- */
-void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer);
-
-/**
- * ion_heap_freelist_drain - drain the deferred free list
- * @heap:		the heap
- * @size:		amount of memory to drain in bytes
- *
- * Drains the indicated amount of memory from the deferred freelist immediately.
- * Returns the total amount freed.  The total freed may be higher depending
- * on the size of the items in the list, or lower if there is insufficient
- * total memory on the freelist.
- */
-size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size);
-
-/**
- * ion_heap_freelist_shrink - drain the deferred free
- *				list, skipping any heap-specific
- *				pooling or caching mechanisms
- *
- * @heap:		the heap
- * @size:		amount of memory to drain in bytes
- *
- * Drains the indicated amount of memory from the deferred freelist immediately.
- * Returns the total amount freed.  The total freed may be higher depending
- * on the size of the items in the list, or lower if there is insufficient
- * total memory on the freelist.
- *
- * Unlike with @ion_heap_freelist_drain, don't put any pages back into
- * page pools or otherwise cache the pages. Everything must be
- * genuinely free'd back to the system. If you're free'ing from a
- * shrinker you probably want to use this. Note that this relies on
- * the heap.ops.free callback honoring the ION_PRIV_FLAG_SHRINKER_FREE
- * flag.
- */
-size_t ion_heap_freelist_shrink(struct ion_heap *heap,
-				size_t size);
-
-/**
- * ion_heap_freelist_size - returns the size of the freelist in bytes
- * @heap:		the heap
- */
-size_t ion_heap_freelist_size(struct ion_heap *heap);
-
-/**
- * functions for creating and destroying a heap pool -- allows you
- * to keep a pool of pre allocated memory to use from your heap.  Keeping
- * a pool of memory that is ready for dma, ie any cached mapping have been
- * invalidated from the cache, provides a significant performance benefit on
- * many systems
- */
-
-/**
- * struct ion_page_pool - pagepool struct
- * @high_count:		number of highmem items in the pool
- * @low_count:		number of lowmem items in the pool
- * @high_items:		list of highmem items
- * @low_items:		list of lowmem items
- * @mutex:		lock protecting this struct and especially the count
- *			item list
- * @gfp_mask:		gfp_mask to use from alloc
- * @order:		order of pages in the pool
- * @list:		plist node for list of pools
- *
- * Allows you to keep a pool of pre allocated pages to use from your heap.
- * Keeping a pool of pages that is ready for dma, ie any cached mapping have
- * been invalidated from the cache, provides a significant performance benefit
- * on many systems
- */
-struct ion_page_pool {
-	int high_count;
-	int low_count;
-	struct list_head high_items;
-	struct list_head low_items;
-	struct mutex mutex;
-	gfp_t gfp_mask;
-	unsigned int order;
-	struct plist_node list;
-};
-
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order);
-void ion_page_pool_destroy(struct ion_page_pool *pool);
-struct page *ion_page_pool_alloc(struct ion_page_pool *pool);
-void ion_page_pool_free(struct ion_page_pool *pool, struct page *page);
-
-/** ion_page_pool_shrink - shrinks the size of the memory cached in the pool
- * @pool:		the pool
- * @gfp_mask:		the memory type to reclaim
- * @nr_to_scan:		number of items to shrink in pages
- *
- * returns the number of items freed in pages
- */
-int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
-			 int nr_to_scan);
-
-#endif /* _ION_H */
diff --git a/drivers/staging/android/ion/ion_buffer.c b/drivers/staging/android/ion/ion_buffer.c
new file mode 100644
index 0000000..e22330f
--- /dev/null
+++ b/drivers/staging/android/ion/ion_buffer.c
@@ -0,0 +1,278 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator - buffer interface
+ *
+ * Copyright (c) 2019, Google, Inc.
+ */
+
+#include <linux/mm.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/dma-noncoherent.h>
+
+#define CREATE_TRACE_POINTS
+#include "ion_trace.h"
+#include "ion_private.h"
+
+static atomic_long_t total_heap_bytes;
+
+static void track_buffer_created(struct ion_buffer *buffer)
+{
+	long total = atomic_long_add_return(buffer->size, &total_heap_bytes);
+
+	trace_ion_stat(buffer->sg_table, buffer->size, total);
+}
+
+static void track_buffer_destroyed(struct ion_buffer *buffer)
+{
+	long total = atomic_long_sub_return(buffer->size, &total_heap_bytes);
+
+	trace_ion_stat(buffer->sg_table, -buffer->size, total);
+}
+
+/* this function should only be called while dev->lock is held */
+static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
+					    struct ion_device *dev,
+					    unsigned long len,
+					    unsigned long flags)
+{
+	struct ion_buffer *buffer;
+	int ret;
+
+	buffer = kzalloc(sizeof(*buffer), GFP_KERNEL);
+	if (!buffer)
+		return ERR_PTR(-ENOMEM);
+
+	buffer->heap = heap;
+	buffer->flags = flags;
+	buffer->size = len;
+
+	ret = heap->ops->allocate(heap, buffer, len, flags);
+
+	if (ret) {
+		if (!(heap->flags & ION_HEAP_FLAG_DEFER_FREE))
+			goto err2;
+
+		ion_heap_freelist_drain(heap, 0);
+		ret = heap->ops->allocate(heap, buffer, len, flags);
+		if (ret)
+			goto err2;
+	}
+
+	if (!buffer->sg_table) {
+		WARN_ONCE(1, "This heap needs to set the sgtable");
+		ret = -EINVAL;
+		goto err1;
+	}
+
+	spin_lock(&heap->stat_lock);
+	heap->num_of_buffers++;
+	heap->num_of_alloc_bytes += len;
+	if (heap->num_of_alloc_bytes > heap->alloc_bytes_wm)
+		heap->alloc_bytes_wm = heap->num_of_alloc_bytes;
+	if (heap->num_of_buffers == 1) {
+		/* This module reference lasts as long as at least one
+		 * buffer is allocated from the heap. We are protected
+		 * against ion_device_remove_heap() with dev->lock, so we can
+		 * safely assume the module reference is going to* succeed.
+		 */
+		__module_get(heap->owner);
+	}
+	spin_unlock(&heap->stat_lock);
+
+	INIT_LIST_HEAD(&buffer->attachments);
+	mutex_init(&buffer->lock);
+	track_buffer_created(buffer);
+	return buffer;
+
+err1:
+	heap->ops->free(buffer);
+err2:
+	kfree(buffer);
+	return ERR_PTR(ret);
+}
+
+static int ion_clear_pages(struct page **pages, int num, pgprot_t pgprot)
+{
+	void *addr = vmap(pages, num, VM_MAP, pgprot);
+
+	if (!addr)
+		return -ENOMEM;
+	memset(addr, 0, PAGE_SIZE * num);
+	vunmap(addr);
+
+	return 0;
+}
+
+static int ion_sglist_zero(struct scatterlist *sgl, unsigned int nents,
+			   pgprot_t pgprot)
+{
+	int p = 0;
+	int ret = 0;
+	struct sg_page_iter piter;
+	struct page *pages[32];
+
+	for_each_sg_page(sgl, &piter, nents, 0) {
+		pages[p++] = sg_page_iter_page(&piter);
+		if (p == ARRAY_SIZE(pages)) {
+			ret = ion_clear_pages(pages, p, pgprot);
+			if (ret)
+				return ret;
+			p = 0;
+		}
+	}
+	if (p)
+		ret = ion_clear_pages(pages, p, pgprot);
+
+	return ret;
+}
+
+struct ion_buffer *ion_buffer_alloc(struct ion_device *dev, size_t len,
+				    unsigned int heap_id_mask,
+				    unsigned int flags)
+{
+	struct ion_buffer *buffer = NULL;
+	struct ion_heap *heap;
+
+	if (!dev || !len) {
+		return ERR_PTR(-EINVAL);
+	}
+
+	/*
+	 * traverse the list of heaps available in this system in priority
+	 * order.  If the heap type is supported by the client, and matches the
+	 * request of the caller allocate from it.  Repeat until allocate has
+	 * succeeded or all heaps have been tried
+	 */
+	len = PAGE_ALIGN(len);
+	if (!len)
+		return ERR_PTR(-EINVAL);
+
+	down_read(&dev->lock);
+	plist_for_each_entry(heap, &dev->heaps, node) {
+		/* if the caller didn't specify this heap id */
+		if (!((1 << heap->id) & heap_id_mask))
+			continue;
+		buffer = ion_buffer_create(heap, dev, len, flags);
+		if (!IS_ERR(buffer))
+			break;
+	}
+	up_read(&dev->lock);
+
+	if (!buffer)
+		return ERR_PTR(-ENODEV);
+
+	if (IS_ERR(buffer))
+		return ERR_CAST(buffer);
+
+	return buffer;
+}
+
+int ion_buffer_zero(struct ion_buffer *buffer)
+{
+	struct sg_table *table;
+	pgprot_t pgprot;
+
+	if (!buffer)
+		return -EINVAL;
+
+	table = buffer->sg_table;
+	if (buffer->flags & ION_FLAG_CACHED)
+		pgprot = PAGE_KERNEL;
+	else
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	return ion_sglist_zero(table->sgl, table->nents, pgprot);
+}
+EXPORT_SYMBOL_GPL(ion_buffer_zero);
+
+void ion_buffer_prep_noncached(struct ion_buffer *buffer)
+{
+	struct scatterlist *sg;
+	struct sg_table *table;
+	int i;
+
+	if (WARN_ONCE(!buffer || !buffer->sg_table,
+		      "%s needs a buffer and a sg_table", __func__) ||
+	    buffer->flags & ION_FLAG_CACHED)
+		return;
+
+	table = buffer->sg_table;
+
+	for_each_sg(table->sgl, sg, table->orig_nents, i)
+		arch_dma_prep_coherent(sg_page(sg), sg->length);
+}
+EXPORT_SYMBOL_GPL(ion_buffer_prep_noncached);
+
+void ion_buffer_release(struct ion_buffer *buffer)
+{
+	if (buffer->kmap_cnt > 0) {
+		pr_warn_once("%s: buffer still mapped in the kernel\n",
+			     __func__);
+		ion_heap_unmap_kernel(buffer->heap, buffer);
+	}
+	buffer->heap->ops->free(buffer);
+	spin_lock(&buffer->heap->stat_lock);
+	buffer->heap->num_of_buffers--;
+	buffer->heap->num_of_alloc_bytes -= buffer->size;
+	if (buffer->heap->num_of_buffers == 0)
+		module_put(buffer->heap->owner);
+	spin_unlock(&buffer->heap->stat_lock);
+	/* drop reference to the heap module */
+
+	kfree(buffer);
+}
+
+int ion_buffer_destroy(struct ion_device *dev, struct ion_buffer *buffer)
+{
+	struct ion_heap *heap;
+
+	if (!dev || !buffer) {
+		pr_warn("%s: invalid argument\n", __func__);
+		return -EINVAL;
+	}
+
+	heap = buffer->heap;
+	track_buffer_destroyed(buffer);
+
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
+		ion_heap_freelist_add(heap, buffer);
+	else
+		ion_buffer_release(buffer);
+
+	return 0;
+}
+
+void *ion_buffer_kmap_get(struct ion_buffer *buffer)
+{
+	void *vaddr;
+
+	if (buffer->kmap_cnt) {
+		buffer->kmap_cnt++;
+		return buffer->vaddr;
+	}
+	vaddr = ion_heap_map_kernel(buffer->heap, buffer);
+	if (WARN_ONCE(!vaddr,
+		      "heap->ops->map_kernel should return ERR_PTR on error"))
+		return ERR_PTR(-EINVAL);
+	if (IS_ERR(vaddr))
+		return vaddr;
+	buffer->vaddr = vaddr;
+	buffer->kmap_cnt++;
+	return vaddr;
+}
+
+void ion_buffer_kmap_put(struct ion_buffer *buffer)
+{
+	buffer->kmap_cnt--;
+	if (!buffer->kmap_cnt) {
+		ion_heap_unmap_kernel(buffer->heap, buffer);
+		buffer->vaddr = NULL;
+	}
+}
+
+u64 ion_get_total_heap_bytes(void)
+{
+	return atomic_long_read(&total_heap_bytes);
+}
diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c
deleted file mode 100644
index bf65e67..0000000
--- a/drivers/staging/android/ion/ion_cma_heap.c
+++ /dev/null
@@ -1,138 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator CMA heap exporter
- *
- * Copyright (C) Linaro 2012
- * Author: <benjamin.gaignard@linaro.org> for ST-Ericsson.
- */
-
-#include <linux/device.h>
-#include <linux/slab.h>
-#include <linux/errno.h>
-#include <linux/err.h>
-#include <linux/cma.h>
-#include <linux/scatterlist.h>
-#include <linux/highmem.h>
-
-#include "ion.h"
-
-struct ion_cma_heap {
-	struct ion_heap heap;
-	struct cma *cma;
-};
-
-#define to_cma_heap(x) container_of(x, struct ion_cma_heap, heap)
-
-/* ION CMA heap operations functions */
-static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
-			    unsigned long len,
-			    unsigned long flags)
-{
-	struct ion_cma_heap *cma_heap = to_cma_heap(heap);
-	struct sg_table *table;
-	struct page *pages;
-	unsigned long size = PAGE_ALIGN(len);
-	unsigned long nr_pages = size >> PAGE_SHIFT;
-	unsigned long align = get_order(size);
-	int ret;
-
-	if (align > CONFIG_CMA_ALIGNMENT)
-		align = CONFIG_CMA_ALIGNMENT;
-
-	pages = cma_alloc(cma_heap->cma, nr_pages, align, false);
-	if (!pages)
-		return -ENOMEM;
-
-	if (PageHighMem(pages)) {
-		unsigned long nr_clear_pages = nr_pages;
-		struct page *page = pages;
-
-		while (nr_clear_pages > 0) {
-			void *vaddr = kmap_atomic(page);
-
-			memset(vaddr, 0, PAGE_SIZE);
-			kunmap_atomic(vaddr);
-			page++;
-			nr_clear_pages--;
-		}
-	} else {
-		memset(page_address(pages), 0, size);
-	}
-
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table)
-		goto err;
-
-	ret = sg_alloc_table(table, 1, GFP_KERNEL);
-	if (ret)
-		goto free_mem;
-
-	sg_set_page(table->sgl, pages, size, 0);
-
-	buffer->priv_virt = pages;
-	buffer->sg_table = table;
-	return 0;
-
-free_mem:
-	kfree(table);
-err:
-	cma_release(cma_heap->cma, pages, nr_pages);
-	return -ENOMEM;
-}
-
-static void ion_cma_free(struct ion_buffer *buffer)
-{
-	struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
-	struct page *pages = buffer->priv_virt;
-	unsigned long nr_pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
-
-	/* release memory */
-	cma_release(cma_heap->cma, pages, nr_pages);
-	/* release sg table */
-	sg_free_table(buffer->sg_table);
-	kfree(buffer->sg_table);
-}
-
-static struct ion_heap_ops ion_cma_ops = {
-	.allocate = ion_cma_allocate,
-	.free = ion_cma_free,
-	.map_user = ion_heap_map_user,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-};
-
-static struct ion_heap *__ion_cma_heap_create(struct cma *cma)
-{
-	struct ion_cma_heap *cma_heap;
-
-	cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL);
-
-	if (!cma_heap)
-		return ERR_PTR(-ENOMEM);
-
-	cma_heap->heap.ops = &ion_cma_ops;
-	cma_heap->cma = cma;
-	cma_heap->heap.type = ION_HEAP_TYPE_DMA;
-	return &cma_heap->heap;
-}
-
-static int __ion_add_cma_heaps(struct cma *cma, void *data)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_cma_heap_create(cma);
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-
-	heap->name = cma_get_name(cma);
-
-	ion_device_add_heap(heap);
-	return 0;
-}
-
-static int ion_add_cma_heaps(void)
-{
-	cma_for_each_area(__ion_add_cma_heaps, NULL);
-	return 0;
-}
-device_initcall(ion_add_cma_heaps);
diff --git a/drivers/staging/android/ion/ion_dma_buf.c b/drivers/staging/android/ion/ion_dma_buf.c
new file mode 100644
index 0000000..b7295fe
--- /dev/null
+++ b/drivers/staging/android/ion/ion_dma_buf.c
@@ -0,0 +1,383 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * ION Memory Allocator - dmabuf interface
+ *
+ * Copyright (c) 2019, Google, Inc.
+ */
+
+#include <linux/device.h>
+#include <linux/mm.h>
+#include <linux/scatterlist.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+
+#include "ion_private.h"
+
+static struct sg_table *dup_sg_table(struct sg_table *table)
+{
+	struct sg_table *new_table;
+	int ret, i;
+	struct scatterlist *sg, *new_sg;
+
+	new_table = kzalloc(sizeof(*new_table), GFP_KERNEL);
+	if (!new_table)
+		return ERR_PTR(-ENOMEM);
+
+	ret = sg_alloc_table(new_table, table->nents, GFP_KERNEL);
+	if (ret) {
+		kfree(new_table);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	new_sg = new_table->sgl;
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		memcpy(new_sg, sg, sizeof(*sg));
+		new_sg->dma_address = 0;
+		new_sg = sg_next(new_sg);
+	}
+
+	return new_table;
+}
+
+static void free_duped_table(struct sg_table *table)
+{
+	sg_free_table(table);
+	kfree(table);
+}
+
+static int ion_dma_buf_attach(struct dma_buf *dmabuf,
+			      struct dma_buf_attachment *attachment)
+{
+	struct ion_dma_buf_attachment *a;
+	struct sg_table *table;
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.attach)
+		return heap->buf_ops.attach(dmabuf, attachment);
+
+	a = kzalloc(sizeof(*a), GFP_KERNEL);
+	if (!a)
+		return -ENOMEM;
+
+	table = dup_sg_table(buffer->sg_table);
+	if (IS_ERR(table)) {
+		kfree(a);
+		return -ENOMEM;
+	}
+
+	a->table = table;
+	a->dev = attachment->dev;
+	INIT_LIST_HEAD(&a->list);
+	a->mapped = false;
+
+	attachment->priv = a;
+
+	mutex_lock(&buffer->lock);
+	list_add(&a->list, &buffer->attachments);
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static void ion_dma_buf_detatch(struct dma_buf *dmabuf,
+				struct dma_buf_attachment *attachment)
+{
+	struct ion_dma_buf_attachment *a = attachment->priv;
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.detach)
+		return heap->buf_ops.detach(dmabuf, attachment);
+
+	mutex_lock(&buffer->lock);
+	list_del(&a->list);
+	mutex_unlock(&buffer->lock);
+	free_duped_table(a->table);
+
+	kfree(a);
+}
+
+static struct sg_table *ion_map_dma_buf(struct dma_buf_attachment *attachment,
+					enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = attachment->dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+	struct sg_table *table;
+	unsigned long attrs = attachment->dma_map_attrs;
+
+	if (heap->buf_ops.map_dma_buf)
+		return heap->buf_ops.map_dma_buf(attachment, direction);
+
+	a = attachment->priv;
+	table = a->table;
+
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		attrs |= DMA_ATTR_SKIP_CPU_SYNC;
+
+	if (!dma_map_sg_attrs(attachment->dev, table->sgl, table->nents,
+			      direction, attrs))
+		return ERR_PTR(-ENOMEM);
+
+	a->mapped = true;
+
+	return table;
+}
+
+static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
+			      struct sg_table *table,
+			      enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = attachment->dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a = attachment->priv;
+	unsigned long attrs = attachment->dma_map_attrs;
+
+	if (heap->buf_ops.unmap_dma_buf)
+		return heap->buf_ops.unmap_dma_buf(attachment, table,
+						   direction);
+
+	a->mapped = false;
+
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		attrs |= DMA_ATTR_SKIP_CPU_SYNC;
+
+	dma_unmap_sg_attrs(attachment->dev, table->sgl, table->nents,
+			   direction, attrs);
+}
+
+static void ion_dma_buf_release(struct dma_buf *dmabuf)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.release)
+		return heap->buf_ops.release(dmabuf);
+
+	ion_free(buffer);
+}
+
+static int ion_dma_buf_begin_cpu_access(struct dma_buf *dmabuf,
+					enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+
+	if (heap->buf_ops.begin_cpu_access)
+		return heap->buf_ops.begin_cpu_access(dmabuf, direction);
+
+	mutex_lock(&buffer->lock);
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		goto unlock;
+
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sg_for_cpu(a->dev, a->table->sgl, a->table->nents,
+				    direction);
+	}
+
+unlock:
+	mutex_unlock(&buffer->lock);
+	return 0;
+}
+
+static int
+ion_dma_buf_begin_cpu_access_partial(struct dma_buf *dmabuf,
+				     enum dma_data_direction direction,
+				     unsigned int offset, unsigned int len)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	/* This is done to make sure partial buffer cache flush / invalidate is
+	 * allowed. The implementation may be vendor specific in this case, so
+	 * ion core does not provide a default implementation
+	 */
+	if (!heap->buf_ops.begin_cpu_access_partial)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.begin_cpu_access_partial(dmabuf, direction, offset,
+						      len);
+}
+
+static int ion_dma_buf_end_cpu_access(struct dma_buf *dmabuf,
+				      enum dma_data_direction direction)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	struct ion_dma_buf_attachment *a;
+
+	if (heap->buf_ops.end_cpu_access)
+		return heap->buf_ops.end_cpu_access(dmabuf, direction);
+
+	mutex_lock(&buffer->lock);
+	if (!(buffer->flags & ION_FLAG_CACHED))
+		goto unlock;
+
+	list_for_each_entry(a, &buffer->attachments, list) {
+		if (!a->mapped)
+			continue;
+		dma_sync_sg_for_device(a->dev, a->table->sgl, a->table->nents,
+				       direction);
+	}
+unlock:
+	mutex_unlock(&buffer->lock);
+
+	return 0;
+}
+
+static int ion_dma_buf_end_cpu_access_partial(struct dma_buf *dmabuf,
+					      enum dma_data_direction direction,
+					      unsigned int offset,
+					      unsigned int len)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	/* This is done to make sure partial buffer cache flush / invalidate is
+	 * allowed. The implementation may be vendor specific in this case, so
+	 * ion core does not provide a default implementation
+	 */
+	if (!heap->buf_ops.end_cpu_access_partial)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.end_cpu_access_partial(dmabuf, direction, offset,
+						    len);
+}
+
+static void *ion_dma_buf_map(struct dma_buf *dmabuf, unsigned long offset)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.map)
+		return heap->buf_ops.map(dmabuf, offset);
+
+	return ion_buffer_kmap_get(buffer) + offset * PAGE_SIZE;
+}
+
+static int ion_dma_buf_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	int ret;
+
+	/* now map it to userspace */
+	if (heap->buf_ops.mmap) {
+		ret = heap->buf_ops.mmap(dmabuf, vma);
+	} else {
+		mutex_lock(&buffer->lock);
+		if (!(buffer->flags & ION_FLAG_CACHED))
+			vma->vm_page_prot =
+				pgprot_writecombine(vma->vm_page_prot);
+
+		ret = ion_heap_map_user(heap, buffer, vma);
+		mutex_unlock(&buffer->lock);
+	}
+
+	if (ret)
+		pr_err("%s: failure mapping buffer to userspace\n", __func__);
+
+	return ret;
+}
+
+static void ion_dma_buf_unmap(struct dma_buf *dmabuf, unsigned long offset,
+			      void *addr)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (!heap->buf_ops.unmap)
+		return;
+	heap->buf_ops.unmap(dmabuf, offset, addr);
+}
+
+static void *ion_dma_buf_vmap(struct dma_buf *dmabuf)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+	void *vaddr;
+
+	if (heap->buf_ops.vmap)
+		return heap->buf_ops.vmap(dmabuf);
+
+	mutex_lock(&buffer->lock);
+	vaddr = ion_buffer_kmap_get(buffer);
+	mutex_unlock(&buffer->lock);
+
+	return vaddr;
+}
+
+static void ion_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (heap->buf_ops.vunmap) {
+		heap->buf_ops.vunmap(dmabuf, vaddr);
+		return;
+	}
+
+	mutex_lock(&buffer->lock);
+	ion_buffer_kmap_put(buffer);
+	mutex_unlock(&buffer->lock);
+}
+
+static int ion_dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags)
+{
+	struct ion_buffer *buffer = dmabuf->priv;
+	struct ion_heap *heap = buffer->heap;
+
+	if (!heap->buf_ops.get_flags)
+		return -EOPNOTSUPP;
+
+	return heap->buf_ops.get_flags(dmabuf, flags);
+}
+
+static const struct dma_buf_ops dma_buf_ops = {
+	.attach = ion_dma_buf_attach,
+	.detach = ion_dma_buf_detatch,
+	.map_dma_buf = ion_map_dma_buf,
+	.unmap_dma_buf = ion_unmap_dma_buf,
+	.release = ion_dma_buf_release,
+	.begin_cpu_access = ion_dma_buf_begin_cpu_access,
+	.begin_cpu_access_partial = ion_dma_buf_begin_cpu_access_partial,
+	.end_cpu_access = ion_dma_buf_end_cpu_access,
+	.end_cpu_access_partial = ion_dma_buf_end_cpu_access_partial,
+	.mmap = ion_dma_buf_mmap,
+	.map = ion_dma_buf_map,
+	.unmap = ion_dma_buf_unmap,
+	.vmap = ion_dma_buf_vmap,
+	.vunmap = ion_dma_buf_vunmap,
+	.get_flags = ion_dma_buf_get_flags,
+};
+
+struct dma_buf *ion_dmabuf_alloc(struct ion_device *dev, size_t len,
+				 unsigned int heap_id_mask,
+				 unsigned int flags)
+{
+	struct ion_buffer *buffer;
+	DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+	struct dma_buf *dmabuf;
+
+	pr_debug("%s: len %zu heap_id_mask %u flags %x\n", __func__,
+		 len, heap_id_mask, flags);
+
+	buffer = ion_buffer_alloc(dev, len, heap_id_mask, flags);
+	if (IS_ERR(buffer))
+		return ERR_CAST(buffer);
+
+	exp_info.ops = &dma_buf_ops;
+	exp_info.size = buffer->size;
+	exp_info.flags = O_RDWR;
+	exp_info.priv = buffer;
+
+	dmabuf = dma_buf_export(&exp_info);
+	if (IS_ERR(dmabuf))
+		ion_buffer_destroy(dev, buffer);
+
+	return dmabuf;
+}
diff --git a/drivers/staging/android/ion/ion_heap.c b/drivers/staging/android/ion/ion_heap.c
index 0755b11..e102f6a 100644
--- a/drivers/staging/android/ion/ion_heap.c
+++ b/drivers/staging/android/ion/ion_heap.c
@@ -15,250 +15,7 @@
 #include <linux/scatterlist.h>
 #include <linux/vmalloc.h>
 
-#include "ion.h"
-
-void *ion_heap_map_kernel(struct ion_heap *heap,
-			  struct ion_buffer *buffer)
-{
-	struct scatterlist *sg;
-	int i, j;
-	void *vaddr;
-	pgprot_t pgprot;
-	struct sg_table *table = buffer->sg_table;
-	int npages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
-	struct page **pages = vmalloc(array_size(npages,
-						 sizeof(struct page *)));
-	struct page **tmp = pages;
-
-	if (!pages)
-		return ERR_PTR(-ENOMEM);
-
-	if (buffer->flags & ION_FLAG_CACHED)
-		pgprot = PAGE_KERNEL;
-	else
-		pgprot = pgprot_writecombine(PAGE_KERNEL);
-
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		int npages_this_entry = PAGE_ALIGN(sg->length) / PAGE_SIZE;
-		struct page *page = sg_page(sg);
-
-		BUG_ON(i >= npages);
-		for (j = 0; j < npages_this_entry; j++)
-			*(tmp++) = page++;
-	}
-	vaddr = vmap(pages, npages, VM_MAP, pgprot);
-	vfree(pages);
-
-	if (!vaddr)
-		return ERR_PTR(-ENOMEM);
-
-	return vaddr;
-}
-
-void ion_heap_unmap_kernel(struct ion_heap *heap,
-			   struct ion_buffer *buffer)
-{
-	vunmap(buffer->vaddr);
-}
-
-int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
-		      struct vm_area_struct *vma)
-{
-	struct sg_table *table = buffer->sg_table;
-	unsigned long addr = vma->vm_start;
-	unsigned long offset = vma->vm_pgoff * PAGE_SIZE;
-	struct scatterlist *sg;
-	int i;
-	int ret;
-
-	for_each_sg(table->sgl, sg, table->nents, i) {
-		struct page *page = sg_page(sg);
-		unsigned long remainder = vma->vm_end - addr;
-		unsigned long len = sg->length;
-
-		if (offset >= sg->length) {
-			offset -= sg->length;
-			continue;
-		} else if (offset) {
-			page += offset / PAGE_SIZE;
-			len = sg->length - offset;
-			offset = 0;
-		}
-		len = min(len, remainder);
-		ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
-				      vma->vm_page_prot);
-		if (ret)
-			return ret;
-		addr += len;
-		if (addr >= vma->vm_end)
-			return 0;
-	}
-
-	return 0;
-}
-
-static int ion_heap_clear_pages(struct page **pages, int num, pgprot_t pgprot)
-{
-	void *addr = vmap(pages, num, VM_MAP, pgprot);
-
-	if (!addr)
-		return -ENOMEM;
-	memset(addr, 0, PAGE_SIZE * num);
-	vunmap(addr);
-
-	return 0;
-}
-
-static int ion_heap_sglist_zero(struct scatterlist *sgl, unsigned int nents,
-				pgprot_t pgprot)
-{
-	int p = 0;
-	int ret = 0;
-	struct sg_page_iter piter;
-	struct page *pages[32];
-
-	for_each_sg_page(sgl, &piter, nents, 0) {
-		pages[p++] = sg_page_iter_page(&piter);
-		if (p == ARRAY_SIZE(pages)) {
-			ret = ion_heap_clear_pages(pages, p, pgprot);
-			if (ret)
-				return ret;
-			p = 0;
-		}
-	}
-	if (p)
-		ret = ion_heap_clear_pages(pages, p, pgprot);
-
-	return ret;
-}
-
-int ion_heap_buffer_zero(struct ion_buffer *buffer)
-{
-	struct sg_table *table = buffer->sg_table;
-	pgprot_t pgprot;
-
-	if (buffer->flags & ION_FLAG_CACHED)
-		pgprot = PAGE_KERNEL;
-	else
-		pgprot = pgprot_writecombine(PAGE_KERNEL);
-
-	return ion_heap_sglist_zero(table->sgl, table->nents, pgprot);
-}
-
-int ion_heap_pages_zero(struct page *page, size_t size, pgprot_t pgprot)
-{
-	struct scatterlist sg;
-
-	sg_init_table(&sg, 1);
-	sg_set_page(&sg, page, size, 0);
-	return ion_heap_sglist_zero(&sg, 1, pgprot);
-}
-
-void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer)
-{
-	spin_lock(&heap->free_lock);
-	list_add(&buffer->list, &heap->free_list);
-	heap->free_list_size += buffer->size;
-	spin_unlock(&heap->free_lock);
-	wake_up(&heap->waitqueue);
-}
-
-size_t ion_heap_freelist_size(struct ion_heap *heap)
-{
-	size_t size;
-
-	spin_lock(&heap->free_lock);
-	size = heap->free_list_size;
-	spin_unlock(&heap->free_lock);
-
-	return size;
-}
-
-static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
-				       bool skip_pools)
-{
-	struct ion_buffer *buffer;
-	size_t total_drained = 0;
-
-	if (ion_heap_freelist_size(heap) == 0)
-		return 0;
-
-	spin_lock(&heap->free_lock);
-	if (size == 0)
-		size = heap->free_list_size;
-
-	while (!list_empty(&heap->free_list)) {
-		if (total_drained >= size)
-			break;
-		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
-					  list);
-		list_del(&buffer->list);
-		heap->free_list_size -= buffer->size;
-		if (skip_pools)
-			buffer->private_flags |= ION_PRIV_FLAG_SHRINKER_FREE;
-		total_drained += buffer->size;
-		spin_unlock(&heap->free_lock);
-		ion_buffer_destroy(buffer);
-		spin_lock(&heap->free_lock);
-	}
-	spin_unlock(&heap->free_lock);
-
-	return total_drained;
-}
-
-size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
-{
-	return _ion_heap_freelist_drain(heap, size, false);
-}
-
-size_t ion_heap_freelist_shrink(struct ion_heap *heap, size_t size)
-{
-	return _ion_heap_freelist_drain(heap, size, true);
-}
-
-static int ion_heap_deferred_free(void *data)
-{
-	struct ion_heap *heap = data;
-
-	while (true) {
-		struct ion_buffer *buffer;
-
-		wait_event_freezable(heap->waitqueue,
-				     ion_heap_freelist_size(heap) > 0);
-
-		spin_lock(&heap->free_lock);
-		if (list_empty(&heap->free_list)) {
-			spin_unlock(&heap->free_lock);
-			continue;
-		}
-		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
-					  list);
-		list_del(&buffer->list);
-		heap->free_list_size -= buffer->size;
-		spin_unlock(&heap->free_lock);
-		ion_buffer_destroy(buffer);
-	}
-
-	return 0;
-}
-
-int ion_heap_init_deferred_free(struct ion_heap *heap)
-{
-	struct sched_param param = { .sched_priority = 0 };
-
-	INIT_LIST_HEAD(&heap->free_list);
-	init_waitqueue_head(&heap->waitqueue);
-	heap->task = kthread_run(ion_heap_deferred_free, heap,
-				 "%s", heap->name);
-	if (IS_ERR(heap->task)) {
-		pr_err("%s: creating thread for deferred free failed\n",
-		       __func__);
-		return PTR_ERR_OR_ZERO(heap->task);
-	}
-	sched_setscheduler(heap->task, SCHED_IDLE, &param);
-
-	return 0;
-}
+#include "ion_private.h"
 
 static unsigned long ion_heap_shrink_count(struct shrinker *shrinker,
 					   struct shrink_control *sc)
@@ -304,6 +61,198 @@
 	return freed;
 }
 
+static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
+				       bool skip_pools)
+{
+	struct ion_buffer *buffer;
+	size_t total_drained = 0;
+
+	if (ion_heap_freelist_size(heap) == 0)
+		return 0;
+
+	spin_lock(&heap->free_lock);
+	if (size == 0)
+		size = heap->free_list_size;
+
+	while (!list_empty(&heap->free_list)) {
+		if (total_drained >= size)
+			break;
+		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
+					  list);
+		list_del(&buffer->list);
+		heap->free_list_size -= buffer->size;
+		if (skip_pools)
+			buffer->private_flags |= ION_PRIV_FLAG_SHRINKER_FREE;
+		total_drained += buffer->size;
+		spin_unlock(&heap->free_lock);
+		ion_buffer_release(buffer);
+		spin_lock(&heap->free_lock);
+	}
+	spin_unlock(&heap->free_lock);
+
+	return total_drained;
+}
+
+static int ion_heap_deferred_free(void *data)
+{
+	struct ion_heap *heap = data;
+
+	while (true) {
+		struct ion_buffer *buffer;
+
+		wait_event_freezable(heap->waitqueue,
+				     (ion_heap_freelist_size(heap) > 0 ||
+				      kthread_should_stop()));
+
+		spin_lock(&heap->free_lock);
+		if (list_empty(&heap->free_list)) {
+			spin_unlock(&heap->free_lock);
+			if (!kthread_should_stop())
+				continue;
+			break;
+		}
+		buffer = list_first_entry(&heap->free_list, struct ion_buffer,
+					  list);
+		list_del(&buffer->list);
+		heap->free_list_size -= buffer->size;
+		spin_unlock(&heap->free_lock);
+		ion_buffer_release(buffer);
+	}
+
+	return 0;
+}
+
+void *ion_heap_map_kernel(struct ion_heap *heap,
+			  struct ion_buffer *buffer)
+{
+	struct scatterlist *sg;
+	int i, j;
+	void *vaddr;
+	pgprot_t pgprot;
+	struct sg_table *table = buffer->sg_table;
+	int npages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
+	struct page **pages = vmalloc(array_size(npages,
+						 sizeof(struct page *)));
+	struct page **tmp = pages;
+
+	if (!pages)
+		return ERR_PTR(-ENOMEM);
+
+	if (buffer->flags & ION_FLAG_CACHED)
+		pgprot = PAGE_KERNEL;
+	else
+		pgprot = pgprot_writecombine(PAGE_KERNEL);
+
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		int npages_this_entry = PAGE_ALIGN(sg->length) / PAGE_SIZE;
+		struct page *page = sg_page(sg);
+
+		BUG_ON(i >= npages);
+		for (j = 0; j < npages_this_entry; j++)
+			*(tmp++) = page++;
+	}
+	vaddr = vmap(pages, npages, VM_MAP, pgprot);
+	vfree(pages);
+
+	if (!vaddr)
+		return ERR_PTR(-ENOMEM);
+
+	return vaddr;
+}
+EXPORT_SYMBOL_GPL(ion_heap_map_kernel);
+
+void ion_heap_unmap_kernel(struct ion_heap *heap,
+			   struct ion_buffer *buffer)
+{
+	vunmap(buffer->vaddr);
+}
+EXPORT_SYMBOL_GPL(ion_heap_unmap_kernel);
+
+int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
+		      struct vm_area_struct *vma)
+{
+	struct sg_table *table = buffer->sg_table;
+	unsigned long addr = vma->vm_start;
+	unsigned long offset = vma->vm_pgoff * PAGE_SIZE;
+	struct scatterlist *sg;
+	int i;
+	int ret;
+
+	for_each_sg(table->sgl, sg, table->nents, i) {
+		struct page *page = sg_page(sg);
+		unsigned long remainder = vma->vm_end - addr;
+		unsigned long len = sg->length;
+
+		if (offset >= sg->length) {
+			offset -= sg->length;
+			continue;
+		} else if (offset) {
+			page += offset / PAGE_SIZE;
+			len = sg->length - offset;
+			offset = 0;
+		}
+		len = min(len, remainder);
+		ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
+				      vma->vm_page_prot);
+		if (ret)
+			return ret;
+		addr += len;
+		if (addr >= vma->vm_end)
+			return 0;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(ion_heap_map_user);
+
+void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer)
+{
+	spin_lock(&heap->free_lock);
+	list_add(&buffer->list, &heap->free_list);
+	heap->free_list_size += buffer->size;
+	spin_unlock(&heap->free_lock);
+	wake_up(&heap->waitqueue);
+}
+
+size_t ion_heap_freelist_size(struct ion_heap *heap)
+{
+	size_t size;
+
+	spin_lock(&heap->free_lock);
+	size = heap->free_list_size;
+	spin_unlock(&heap->free_lock);
+
+	return size;
+}
+
+size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
+{
+	return _ion_heap_freelist_drain(heap, size, false);
+}
+
+size_t ion_heap_freelist_shrink(struct ion_heap *heap, size_t size)
+{
+	return _ion_heap_freelist_drain(heap, size, true);
+}
+
+int ion_heap_init_deferred_free(struct ion_heap *heap)
+{
+	struct sched_param param = { .sched_priority = 0 };
+
+	INIT_LIST_HEAD(&heap->free_list);
+	init_waitqueue_head(&heap->waitqueue);
+	heap->task = kthread_run(ion_heap_deferred_free, heap,
+				 "%s", heap->name);
+	if (IS_ERR(heap->task)) {
+		pr_err("%s: creating thread for deferred free failed\n",
+		       __func__);
+		return PTR_ERR_OR_ZERO(heap->task);
+	}
+	sched_setscheduler(heap->task, SCHED_IDLE, &param);
+
+	return 0;
+}
+
 int ion_heap_init_shrinker(struct ion_heap *heap)
 {
 	heap->shrinker.count_objects = ion_heap_shrink_count;
@@ -313,3 +262,32 @@
 
 	return register_shrinker(&heap->shrinker);
 }
+
+int ion_heap_cleanup(struct ion_heap *heap)
+{
+	int ret;
+
+	if (heap->flags & ION_HEAP_FLAG_DEFER_FREE &&
+	    !IS_ERR_OR_NULL(heap->task)) {
+		size_t free_list_size = ion_heap_freelist_size(heap);
+		size_t total_drained = ion_heap_freelist_drain(heap, 0);
+
+		if (total_drained != free_list_size) {
+			pr_err("%s: %s heap drained %zu bytes, requested %zu\n",
+			       __func__, heap->name, free_list_size,
+			       total_drained);
+			return -EBUSY;
+		}
+		ret = kthread_stop(heap->task);
+		if (ret < 0) {
+			pr_err("%s: failed to stop heap free thread\n",
+			       __func__);
+			return ret;
+		}
+	}
+
+	if ((heap->flags & ION_HEAP_FLAG_DEFER_FREE) || heap->ops->shrink)
+		unregister_shrinker(&heap->shrinker);
+
+	return 0;
+}
diff --git a/drivers/staging/android/ion/ion_page_pool.c b/drivers/staging/android/ion/ion_page_pool.c
deleted file mode 100644
index f85ec5b..0000000
--- a/drivers/staging/android/ion/ion_page_pool.c
+++ /dev/null
@@ -1,155 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator page pool helpers
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#include <linux/list.h>
-#include <linux/slab.h>
-#include <linux/swap.h>
-#include <linux/sched/signal.h>
-
-#include "ion.h"
-
-static inline struct page *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
-{
-	if (fatal_signal_pending(current))
-		return NULL;
-	return alloc_pages(pool->gfp_mask, pool->order);
-}
-
-static void ion_page_pool_free_pages(struct ion_page_pool *pool,
-				     struct page *page)
-{
-	__free_pages(page, pool->order);
-}
-
-static void ion_page_pool_add(struct ion_page_pool *pool, struct page *page)
-{
-	mutex_lock(&pool->mutex);
-	if (PageHighMem(page)) {
-		list_add_tail(&page->lru, &pool->high_items);
-		pool->high_count++;
-	} else {
-		list_add_tail(&page->lru, &pool->low_items);
-		pool->low_count++;
-	}
-
-	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
-							1 << pool->order);
-	mutex_unlock(&pool->mutex);
-}
-
-static struct page *ion_page_pool_remove(struct ion_page_pool *pool, bool high)
-{
-	struct page *page;
-
-	if (high) {
-		BUG_ON(!pool->high_count);
-		page = list_first_entry(&pool->high_items, struct page, lru);
-		pool->high_count--;
-	} else {
-		BUG_ON(!pool->low_count);
-		page = list_first_entry(&pool->low_items, struct page, lru);
-		pool->low_count--;
-	}
-
-	list_del(&page->lru);
-	mod_node_page_state(page_pgdat(page), NR_KERNEL_MISC_RECLAIMABLE,
-							-(1 << pool->order));
-	return page;
-}
-
-struct page *ion_page_pool_alloc(struct ion_page_pool *pool)
-{
-	struct page *page = NULL;
-
-	BUG_ON(!pool);
-
-	mutex_lock(&pool->mutex);
-	if (pool->high_count)
-		page = ion_page_pool_remove(pool, true);
-	else if (pool->low_count)
-		page = ion_page_pool_remove(pool, false);
-	mutex_unlock(&pool->mutex);
-
-	if (!page)
-		page = ion_page_pool_alloc_pages(pool);
-
-	return page;
-}
-
-void ion_page_pool_free(struct ion_page_pool *pool, struct page *page)
-{
-	BUG_ON(pool->order != compound_order(page));
-
-	ion_page_pool_add(pool, page);
-}
-
-static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
-{
-	int count = pool->low_count;
-
-	if (high)
-		count += pool->high_count;
-
-	return count << pool->order;
-}
-
-int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
-			 int nr_to_scan)
-{
-	int freed = 0;
-	bool high;
-
-	if (current_is_kswapd())
-		high = true;
-	else
-		high = !!(gfp_mask & __GFP_HIGHMEM);
-
-	if (nr_to_scan == 0)
-		return ion_page_pool_total(pool, high);
-
-	while (freed < nr_to_scan) {
-		struct page *page;
-
-		mutex_lock(&pool->mutex);
-		if (pool->low_count) {
-			page = ion_page_pool_remove(pool, false);
-		} else if (high && pool->high_count) {
-			page = ion_page_pool_remove(pool, true);
-		} else {
-			mutex_unlock(&pool->mutex);
-			break;
-		}
-		mutex_unlock(&pool->mutex);
-		ion_page_pool_free_pages(pool, page);
-		freed += (1 << pool->order);
-	}
-
-	return freed;
-}
-
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
-{
-	struct ion_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
-
-	if (!pool)
-		return NULL;
-	pool->high_count = 0;
-	pool->low_count = 0;
-	INIT_LIST_HEAD(&pool->low_items);
-	INIT_LIST_HEAD(&pool->high_items);
-	pool->gfp_mask = gfp_mask | __GFP_COMP;
-	pool->order = order;
-	mutex_init(&pool->mutex);
-	plist_node_init(&pool->list, order);
-
-	return pool;
-}
-
-void ion_page_pool_destroy(struct ion_page_pool *pool)
-{
-	kfree(pool);
-}
diff --git a/drivers/staging/android/ion/ion_private.h b/drivers/staging/android/ion/ion_private.h
new file mode 100644
index 0000000..db4e906
--- /dev/null
+++ b/drivers/staging/android/ion/ion_private.h
@@ -0,0 +1,58 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * ION Memory Allocator - Internal header
+ *
+ * Copyright (C) 2019 Google, Inc.
+ */
+
+#ifndef _ION_PRIVATE_H
+#define _ION_PRIVATE_H
+
+#include <linux/dcache.h>
+#include <linux/dma-buf.h>
+#include <linux/ion.h>
+#include <linux/miscdevice.h>
+#include <linux/mutex.h>
+#include <linux/plist.h>
+#include <linux/rbtree.h>
+#include <linux/rwsem.h>
+#include <linux/types.h>
+
+/**
+ * struct ion_device - the metadata of the ion device node
+ * @dev:		the actual misc device
+ * @lock:		rwsem protecting the tree of heaps, heap_bitmap and
+ *			clients
+ * @heap_ids:		bitmap of register heap ids
+ */
+struct ion_device {
+	struct miscdevice dev;
+	struct rw_semaphore lock;
+	DECLARE_BITMAP(heap_ids, ION_NUM_MAX_HEAPS);
+	struct plist_head heaps;
+	struct dentry *debug_root;
+	int heap_cnt;
+};
+
+/* ion_buffer manipulators */
+extern struct ion_buffer *ion_buffer_alloc(struct ion_device *dev, size_t len,
+					   unsigned int heap_id_mask,
+					   unsigned int flags);
+extern void ion_buffer_release(struct ion_buffer *buffer);
+extern int ion_buffer_destroy(struct ion_device *dev,
+			      struct ion_buffer *buffer);
+extern void *ion_buffer_kmap_get(struct ion_buffer *buffer);
+extern void ion_buffer_kmap_put(struct ion_buffer *buffer);
+
+/* ion dmabuf allocator */
+extern struct dma_buf *ion_dmabuf_alloc(struct ion_device *dev, size_t len,
+					unsigned int heap_id_mask,
+					unsigned int flags);
+extern int ion_free(struct ion_buffer *buffer);
+
+/* ion heap helpers */
+extern int ion_heap_cleanup(struct ion_heap *heap);
+
+u64 ion_get_total_heap_bytes(void);
+
+#endif /* _ION_PRIVATE_H */
diff --git a/drivers/staging/android/ion/ion_system_heap.c b/drivers/staging/android/ion/ion_system_heap.c
deleted file mode 100644
index b83a1d1..0000000
--- a/drivers/staging/android/ion/ion_system_heap.c
+++ /dev/null
@@ -1,377 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * ION Memory Allocator system heap exporter
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#include <asm/page.h>
-#include <linux/dma-mapping.h>
-#include <linux/err.h>
-#include <linux/highmem.h>
-#include <linux/mm.h>
-#include <linux/scatterlist.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-
-#include "ion.h"
-
-#define NUM_ORDERS ARRAY_SIZE(orders)
-
-static gfp_t high_order_gfp_flags = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN |
-				     __GFP_NORETRY) & ~__GFP_RECLAIM;
-static gfp_t low_order_gfp_flags  = GFP_HIGHUSER | __GFP_ZERO;
-static const unsigned int orders[] = {8, 4, 0};
-
-static int order_to_index(unsigned int order)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++)
-		if (order == orders[i])
-			return i;
-	BUG();
-	return -1;
-}
-
-static inline unsigned int order_to_size(int order)
-{
-	return PAGE_SIZE << order;
-}
-
-struct ion_system_heap {
-	struct ion_heap heap;
-	struct ion_page_pool *pools[NUM_ORDERS];
-};
-
-static struct page *alloc_buffer_page(struct ion_system_heap *heap,
-				      struct ion_buffer *buffer,
-				      unsigned long order)
-{
-	struct ion_page_pool *pool = heap->pools[order_to_index(order)];
-
-	return ion_page_pool_alloc(pool);
-}
-
-static void free_buffer_page(struct ion_system_heap *heap,
-			     struct ion_buffer *buffer, struct page *page)
-{
-	struct ion_page_pool *pool;
-	unsigned int order = compound_order(page);
-
-	/* go to system */
-	if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
-		__free_pages(page, order);
-		return;
-	}
-
-	pool = heap->pools[order_to_index(order)];
-
-	ion_page_pool_free(pool, page);
-}
-
-static struct page *alloc_largest_available(struct ion_system_heap *heap,
-					    struct ion_buffer *buffer,
-					    unsigned long size,
-					    unsigned int max_order)
-{
-	struct page *page;
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		if (size < order_to_size(orders[i]))
-			continue;
-		if (max_order < orders[i])
-			continue;
-
-		page = alloc_buffer_page(heap, buffer, orders[i]);
-		if (!page)
-			continue;
-
-		return page;
-	}
-
-	return NULL;
-}
-
-static int ion_system_heap_allocate(struct ion_heap *heap,
-				    struct ion_buffer *buffer,
-				    unsigned long size,
-				    unsigned long flags)
-{
-	struct ion_system_heap *sys_heap = container_of(heap,
-							struct ion_system_heap,
-							heap);
-	struct sg_table *table;
-	struct scatterlist *sg;
-	struct list_head pages;
-	struct page *page, *tmp_page;
-	int i = 0;
-	unsigned long size_remaining = PAGE_ALIGN(size);
-	unsigned int max_order = orders[0];
-
-	if (size / PAGE_SIZE > totalram_pages() / 2)
-		return -ENOMEM;
-
-	INIT_LIST_HEAD(&pages);
-	while (size_remaining > 0) {
-		page = alloc_largest_available(sys_heap, buffer, size_remaining,
-					       max_order);
-		if (!page)
-			goto free_pages;
-		list_add_tail(&page->lru, &pages);
-		size_remaining -= page_size(page);
-		max_order = compound_order(page);
-		i++;
-	}
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table)
-		goto free_pages;
-
-	if (sg_alloc_table(table, i, GFP_KERNEL))
-		goto free_table;
-
-	sg = table->sgl;
-	list_for_each_entry_safe(page, tmp_page, &pages, lru) {
-		sg_set_page(sg, page, page_size(page), 0);
-		sg = sg_next(sg);
-		list_del(&page->lru);
-	}
-
-	buffer->sg_table = table;
-	return 0;
-
-free_table:
-	kfree(table);
-free_pages:
-	list_for_each_entry_safe(page, tmp_page, &pages, lru)
-		free_buffer_page(sys_heap, buffer, page);
-	return -ENOMEM;
-}
-
-static void ion_system_heap_free(struct ion_buffer *buffer)
-{
-	struct ion_system_heap *sys_heap = container_of(buffer->heap,
-							struct ion_system_heap,
-							heap);
-	struct sg_table *table = buffer->sg_table;
-	struct scatterlist *sg;
-	int i;
-
-	/* zero the buffer before goto page pool */
-	if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
-		ion_heap_buffer_zero(buffer);
-
-	for_each_sg(table->sgl, sg, table->nents, i)
-		free_buffer_page(sys_heap, buffer, sg_page(sg));
-	sg_free_table(table);
-	kfree(table);
-}
-
-static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
-				  int nr_to_scan)
-{
-	struct ion_page_pool *pool;
-	struct ion_system_heap *sys_heap;
-	int nr_total = 0;
-	int i, nr_freed;
-	int only_scan = 0;
-
-	sys_heap = container_of(heap, struct ion_system_heap, heap);
-
-	if (!nr_to_scan)
-		only_scan = 1;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		pool = sys_heap->pools[i];
-
-		if (only_scan) {
-			nr_total += ion_page_pool_shrink(pool,
-							 gfp_mask,
-							 nr_to_scan);
-
-		} else {
-			nr_freed = ion_page_pool_shrink(pool,
-							gfp_mask,
-							nr_to_scan);
-			nr_to_scan -= nr_freed;
-			nr_total += nr_freed;
-			if (nr_to_scan <= 0)
-				break;
-		}
-	}
-	return nr_total;
-}
-
-static struct ion_heap_ops system_heap_ops = {
-	.allocate = ion_system_heap_allocate,
-	.free = ion_system_heap_free,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-	.map_user = ion_heap_map_user,
-	.shrink = ion_system_heap_shrink,
-};
-
-static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++)
-		if (pools[i])
-			ion_page_pool_destroy(pools[i]);
-}
-
-static int ion_system_heap_create_pools(struct ion_page_pool **pools)
-{
-	int i;
-
-	for (i = 0; i < NUM_ORDERS; i++) {
-		struct ion_page_pool *pool;
-		gfp_t gfp_flags = low_order_gfp_flags;
-
-		if (orders[i] > 4)
-			gfp_flags = high_order_gfp_flags;
-
-		pool = ion_page_pool_create(gfp_flags, orders[i]);
-		if (!pool)
-			goto err_create_pool;
-		pools[i] = pool;
-	}
-
-	return 0;
-
-err_create_pool:
-	ion_system_heap_destroy_pools(pools);
-	return -ENOMEM;
-}
-
-static struct ion_heap *__ion_system_heap_create(void)
-{
-	struct ion_system_heap *heap;
-
-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
-	if (!heap)
-		return ERR_PTR(-ENOMEM);
-	heap->heap.ops = &system_heap_ops;
-	heap->heap.type = ION_HEAP_TYPE_SYSTEM;
-	heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE;
-
-	if (ion_system_heap_create_pools(heap->pools))
-		goto free_heap;
-
-	return &heap->heap;
-
-free_heap:
-	kfree(heap);
-	return ERR_PTR(-ENOMEM);
-}
-
-static int ion_system_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_system_heap_create();
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-	heap->name = "ion_system_heap";
-
-	ion_device_add_heap(heap);
-
-	return 0;
-}
-device_initcall(ion_system_heap_create);
-
-static int ion_system_contig_heap_allocate(struct ion_heap *heap,
-					   struct ion_buffer *buffer,
-					   unsigned long len,
-					   unsigned long flags)
-{
-	int order = get_order(len);
-	struct page *page;
-	struct sg_table *table;
-	unsigned long i;
-	int ret;
-
-	page = alloc_pages(low_order_gfp_flags | __GFP_NOWARN, order);
-	if (!page)
-		return -ENOMEM;
-
-	split_page(page, order);
-
-	len = PAGE_ALIGN(len);
-	for (i = len >> PAGE_SHIFT; i < (1 << order); i++)
-		__free_page(page + i);
-
-	table = kmalloc(sizeof(*table), GFP_KERNEL);
-	if (!table) {
-		ret = -ENOMEM;
-		goto free_pages;
-	}
-
-	ret = sg_alloc_table(table, 1, GFP_KERNEL);
-	if (ret)
-		goto free_table;
-
-	sg_set_page(table->sgl, page, len, 0);
-
-	buffer->sg_table = table;
-
-	return 0;
-
-free_table:
-	kfree(table);
-free_pages:
-	for (i = 0; i < len >> PAGE_SHIFT; i++)
-		__free_page(page + i);
-
-	return ret;
-}
-
-static void ion_system_contig_heap_free(struct ion_buffer *buffer)
-{
-	struct sg_table *table = buffer->sg_table;
-	struct page *page = sg_page(table->sgl);
-	unsigned long pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
-	unsigned long i;
-
-	for (i = 0; i < pages; i++)
-		__free_page(page + i);
-	sg_free_table(table);
-	kfree(table);
-}
-
-static struct ion_heap_ops kmalloc_ops = {
-	.allocate = ion_system_contig_heap_allocate,
-	.free = ion_system_contig_heap_free,
-	.map_kernel = ion_heap_map_kernel,
-	.unmap_kernel = ion_heap_unmap_kernel,
-	.map_user = ion_heap_map_user,
-};
-
-static struct ion_heap *__ion_system_contig_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = kzalloc(sizeof(*heap), GFP_KERNEL);
-	if (!heap)
-		return ERR_PTR(-ENOMEM);
-	heap->ops = &kmalloc_ops;
-	heap->type = ION_HEAP_TYPE_SYSTEM_CONTIG;
-	heap->name = "ion_system_contig_heap";
-
-	return heap;
-}
-
-static int ion_system_contig_heap_create(void)
-{
-	struct ion_heap *heap;
-
-	heap = __ion_system_contig_heap_create();
-	if (IS_ERR(heap))
-		return PTR_ERR(heap);
-
-	ion_device_add_heap(heap);
-
-	return 0;
-}
-device_initcall(ion_system_contig_heap_create);
diff --git a/drivers/staging/android/ion/ion_trace.h b/drivers/staging/android/ion/ion_trace.h
new file mode 100644
index 0000000..eacb47d
--- /dev/null
+++ b/drivers/staging/android/ion/ion_trace.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * drivers/staging/android/ion/ion-trace.h
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM ion
+
+#if !defined(_ION_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _ION_TRACE_H
+
+#include <linux/tracepoint.h>
+
+#ifndef __ION_PTR_TO_HASHVAL
+static unsigned int __maybe_unused __ion_ptr_to_hash(const void *ptr)
+{
+	unsigned long hashval;
+
+	if (ptr_to_hashval(ptr, &hashval))
+		return 0;
+
+	/* The hashed value is only 32-bit */
+	return (unsigned int)hashval;
+}
+
+#define __ION_PTR_TO_HASHVAL
+#endif
+
+TRACE_EVENT(ion_stat,
+	    TP_PROTO(const void *addr, long len,
+		     unsigned long total_allocated),
+	    TP_ARGS(addr, len, total_allocated),
+	    TP_STRUCT__entry(__field(unsigned int, buffer_id)
+		__field(long, len)
+		__field(unsigned long, total_allocated)
+	    ),
+	    TP_fast_assign(__entry->buffer_id = __ion_ptr_to_hash(addr);
+		__entry->len = len;
+		__entry->total_allocated = total_allocated;
+	    ),
+	    TP_printk("buffer_id=%u len=%ldB total_allocated=%ldB",
+		      __entry->buffer_id,
+		      __entry->len,
+		      __entry->total_allocated)
+	    );
+
+#endif /* _ION_TRACE_H */
+
+/* This part must be outside protection */
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_FILE ion_trace
+#include <trace/define_trace.h>
diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h
deleted file mode 100644
index 46c93fc..0000000
--- a/drivers/staging/android/uapi/ion.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
-/*
- * drivers/staging/android/uapi/ion.h
- *
- * Copyright (C) 2011 Google, Inc.
- */
-
-#ifndef _UAPI_LINUX_ION_H
-#define _UAPI_LINUX_ION_H
-
-#include <linux/ioctl.h>
-#include <linux/types.h>
-
-/**
- * enum ion_heap_types - list of all possible types of heaps
- * @ION_HEAP_TYPE_SYSTEM:	 memory allocated via vmalloc
- * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc
- * @ION_HEAP_TYPE_CARVEOUT:	 memory allocated from a prereserved
- *				 carveout heap, allocations are physically
- *				 contiguous
- * @ION_HEAP_TYPE_DMA:		 memory allocated via DMA API
- * @ION_NUM_HEAPS:		 helper for iterating over heaps, a bit mask
- *				 is used to identify the heaps, so only 32
- *				 total heap types are supported
- */
-enum ion_heap_type {
-	ION_HEAP_TYPE_SYSTEM,
-	ION_HEAP_TYPE_SYSTEM_CONTIG,
-	ION_HEAP_TYPE_CARVEOUT,
-	ION_HEAP_TYPE_CHUNK,
-	ION_HEAP_TYPE_DMA,
-	ION_HEAP_TYPE_CUSTOM, /*
-			       * must be last so device specific heaps always
-			       * are at the end of this enum
-			       */
-};
-
-#define ION_NUM_HEAP_IDS		(sizeof(unsigned int) * 8)
-
-/**
- * allocation flags - the lower 16 bits are used by core ion, the upper 16
- * bits are reserved for use by the heaps themselves.
- */
-
-/*
- * mappings of this buffer should be cached, ion will do cache maintenance
- * when the buffer is mapped for dma
- */
-#define ION_FLAG_CACHED 1
-
-/**
- * DOC: Ion Userspace API
- *
- * create a client by opening /dev/ion
- * most operations handled via following ioctls
- *
- */
-
-/**
- * struct ion_allocation_data - metadata passed from userspace for allocations
- * @len:		size of the allocation
- * @heap_id_mask:	mask of heap ids to allocate from
- * @flags:		flags passed to heap
- * @handle:		pointer that will be populated with a cookie to use to
- *			refer to this allocation
- *
- * Provided by userspace as an argument to the ioctl
- */
-struct ion_allocation_data {
-	__u64 len;
-	__u32 heap_id_mask;
-	__u32 flags;
-	__u32 fd;
-	__u32 unused;
-};
-
-#define MAX_HEAP_NAME			32
-
-/**
- * struct ion_heap_data - data about a heap
- * @name - first 32 characters of the heap name
- * @type - heap type
- * @heap_id - heap id for the heap
- */
-struct ion_heap_data {
-	char name[MAX_HEAP_NAME];
-	__u32 type;
-	__u32 heap_id;
-	__u32 reserved0;
-	__u32 reserved1;
-	__u32 reserved2;
-};
-
-/**
- * struct ion_heap_query - collection of data about all heaps
- * @cnt - total number of heaps to be copied
- * @heaps - buffer to copy heap data
- */
-struct ion_heap_query {
-	__u32 cnt; /* Total number of heaps to be copied */
-	__u32 reserved0; /* align to 64bits */
-	__u64 heaps; /* buffer to be populated */
-	__u32 reserved1;
-	__u32 reserved2;
-};
-
-#define ION_IOC_MAGIC		'I'
-
-/**
- * DOC: ION_IOC_ALLOC - allocate memory
- *
- * Takes an ion_allocation_data struct and returns it with the handle field
- * populated with the opaque handle for the allocation.
- */
-#define ION_IOC_ALLOC		_IOWR(ION_IOC_MAGIC, 0, \
-				      struct ion_allocation_data)
-
-/**
- * DOC: ION_IOC_HEAP_QUERY - information about available heaps
- *
- * Takes an ion_heap_query structure and populates information about
- * available Ion heaps.
- */
-#define ION_IOC_HEAP_QUERY     _IOWR(ION_IOC_MAGIC, 8, \
-					struct ion_heap_query)
-
-#endif /* _UAPI_LINUX_ION_H */
diff --git a/drivers/thermal/Kconfig b/drivers/thermal/Kconfig
index 001a21a..f08f465 100644
--- a/drivers/thermal/Kconfig
+++ b/drivers/thermal/Kconfig
@@ -108,7 +108,7 @@
 
 config THERMAL_DEFAULT_GOV_POWER_ALLOCATOR
 	bool "power_allocator"
-	select THERMAL_GOV_POWER_ALLOCATOR
+	depends on THERMAL_GOV_POWER_ALLOCATOR
 	help
 	  Select this if you want to control temperature based on
 	  system and device power allocation. This governor can only
@@ -417,4 +417,11 @@
 	  Enable this to plug in UniPhier on-chip PVT thermal driver into the
 	  thermal framework. The driver supports CPU thermal zone temperature
 	  reporting and a couple of trip points.
+
+config SPRD_THERMAL
+	tristate "Temperature sensor on Spreadtrum SoCs"
+	depends on ARCH_SPRD || COMPILE_TEST
+	help
+	  Support for the Spreadtrum thermal sensor driver in the Linux thermal
+	  framework.
 endif
diff --git a/drivers/thermal/Makefile b/drivers/thermal/Makefile
index 74a37c7..ef4c032 100644
--- a/drivers/thermal/Makefile
+++ b/drivers/thermal/Makefile
@@ -54,3 +54,4 @@
 obj-$(CONFIG_GENERIC_ADC_THERMAL)	+= thermal-generic-adc.o
 obj-$(CONFIG_ZX2967_THERMAL)	+= zx2967_thermal.o
 obj-$(CONFIG_UNIPHIER_THERMAL)	+= uniphier_thermal.o
+obj-$(CONFIG_SPRD_THERMAL)	+= sprd_thermal.o
diff --git a/drivers/thermal/sprd_thermal.c b/drivers/thermal/sprd_thermal.c
new file mode 100644
index 0000000..05f95c7
--- /dev/null
+++ b/drivers/thermal/sprd_thermal.c
@@ -0,0 +1,553 @@
+// SPDX-License-Identifier: GPL-2.0
+// Copyright (C) 2020 Spreadtrum Communications Inc.
+
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/nvmem-consumer.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/thermal.h>
+
+#define SPRD_THM_CTL			0x0
+#define SPRD_THM_INT_EN			0x4
+#define SPRD_THM_INT_STS		0x8
+#define SPRD_THM_INT_RAW_STS		0xc
+#define SPRD_THM_DET_PERIOD		0x10
+#define SPRD_THM_INT_CLR		0x14
+#define SPRD_THM_INT_CLR_ST		0x18
+#define SPRD_THM_MON_PERIOD		0x4c
+#define SPRD_THM_MON_CTL		0x50
+#define SPRD_THM_INTERNAL_STS1		0x54
+#define SPRD_THM_RAW_READ_MSK		0x3ff
+
+#define SPRD_THM_OFFSET(id)		((id) * 0x4)
+#define SPRD_THM_TEMP(id)		(SPRD_THM_OFFSET(id) + 0x5c)
+#define SPRD_THM_THRES(id)		(SPRD_THM_OFFSET(id) + 0x2c)
+
+#define SPRD_THM_SEN(id)		BIT((id) + 2)
+#define SPRD_THM_SEN_OVERHEAT_EN(id)	BIT((id) + 8)
+#define SPRD_THM_SEN_OVERHEAT_ALARM_EN(id)	BIT((id) + 0)
+
+/* bits definitions for register THM_CTL */
+#define SPRD_THM_SET_RDY_ST		BIT(13)
+#define SPRD_THM_SET_RDY		BIT(12)
+#define SPRD_THM_MON_EN			BIT(1)
+#define SPRD_THM_EN			BIT(0)
+
+/* bits definitions for register THM_INT_CTL */
+#define SPRD_THM_BIT_INT_EN		BIT(26)
+#define SPRD_THM_OVERHEAT_EN		BIT(25)
+#define SPRD_THM_OTP_TRIP_SHIFT		10
+
+/* bits definitions for register SPRD_THM_INTERNAL_STS1 */
+#define SPRD_THM_TEMPER_RDY		BIT(0)
+
+#define SPRD_THM_DET_PERIOD_DATA	0x800
+#define SPRD_THM_DET_PERIOD_MASK	GENMASK(19, 0)
+#define SPRD_THM_MON_MODE		0x7
+#define SPRD_THM_MON_MODE_MASK		GENMASK(3, 0)
+#define SPRD_THM_MON_PERIOD_DATA	0x10
+#define SPRD_THM_MON_PERIOD_MASK	GENMASK(15, 0)
+#define SPRD_THM_THRES_MASK		GENMASK(19, 0)
+#define SPRD_THM_INT_CLR_MASK		GENMASK(24, 0)
+
+/* thermal sensor calibration parameters */
+#define SPRD_THM_TEMP_LOW		-40000
+#define SPRD_THM_TEMP_HIGH		120000
+#define SPRD_THM_OTP_TEMP		120000
+#define SPRD_THM_HOT_TEMP		75000
+#define SPRD_THM_RAW_DATA_LOW		0
+#define SPRD_THM_RAW_DATA_HIGH		1000
+#define SPRD_THM_SEN_NUM		8
+#define SPRD_THM_DT_OFFSET		24
+#define SPRD_THM_RATION_OFFSET		17
+#define SPRD_THM_RATION_SIGN		16
+
+#define SPRD_THM_RDYST_POLLING_TIME	10
+#define SPRD_THM_RDYST_TIMEOUT		700
+#define SPRD_THM_TEMP_READY_POLL_TIME	10000
+#define SPRD_THM_TEMP_READY_TIMEOUT	600000
+#define SPRD_THM_MAX_SENSOR		8
+
+struct sprd_thermal_sensor {
+	struct thermal_zone_device *tzd;
+	struct sprd_thermal_data *data;
+	struct device *dev;
+	int cal_slope;
+	int cal_offset;
+	int id;
+};
+
+struct sprd_thermal_data {
+	const struct sprd_thm_variant_data *var_data;
+	struct sprd_thermal_sensor *sensor[SPRD_THM_MAX_SENSOR];
+	struct clk *clk;
+	void __iomem *base;
+	u32 ratio_off;
+	int ratio_sign;
+	int nr_sensors;
+};
+
+/*
+ * The conversion between ADC and temperature is based on linear relationship,
+ * and use idea_k to specify the slope and ideal_b to specify the offset.
+ *
+ * Since different Spreadtrum SoCs have different ideal_k and ideal_b,
+ * we should save ideal_k and ideal_b in the device data structure.
+ */
+struct sprd_thm_variant_data {
+	u32 ideal_k;
+	u32 ideal_b;
+};
+
+static const struct sprd_thm_variant_data ums512_data = {
+	.ideal_k = 262,
+	.ideal_b = 66400,
+};
+
+static inline void sprd_thm_update_bits(void __iomem *reg, u32 mask, u32 val)
+{
+	u32 tmp, orig;
+
+	orig = readl(reg);
+	tmp = orig & ~mask;
+	tmp |= val & mask;
+	writel(tmp, reg);
+}
+
+static int sprd_thm_cal_read(struct device_node *np, const char *cell_id,
+			     u32 *val)
+{
+	struct nvmem_cell *cell;
+	void *buf;
+	size_t len;
+
+	cell = of_nvmem_cell_get(np, cell_id);
+	if (IS_ERR(cell))
+		return PTR_ERR(cell);
+
+	buf = nvmem_cell_read(cell, &len);
+	nvmem_cell_put(cell);
+	if (IS_ERR(buf))
+		return PTR_ERR(buf);
+
+	if (len > sizeof(u32)) {
+		kfree(buf);
+		return -EINVAL;
+	}
+
+	memcpy(val, buf, len);
+
+	kfree(buf);
+	return 0;
+}
+
+static int sprd_thm_sensor_calibration(struct device_node *np,
+				       struct sprd_thermal_data *thm,
+				       struct sprd_thermal_sensor *sen)
+{
+	int ret;
+	/*
+	 * According to thermal datasheet, the default calibration offset is 64,
+	 * and the default ratio is 1000.
+	 */
+	int dt_offset = 64, ratio = 1000;
+
+	ret = sprd_thm_cal_read(np, "sen_delta_cal", &dt_offset);
+	if (ret)
+		return ret;
+
+	ratio += thm->ratio_sign * thm->ratio_off;
+
+	/*
+	 * According to the ideal slope K and ideal offset B, combined with
+	 * calibration value of thermal from efuse, then calibrate the real
+	 * slope k and offset b:
+	 * k_cal = (k * ratio) / 1000.
+	 * b_cal = b + (dt_offset - 64) * 500.
+	 */
+	sen->cal_slope = (thm->var_data->ideal_k * ratio) / 1000;
+	sen->cal_offset = thm->var_data->ideal_b + (dt_offset - 128) * 250;
+
+	return 0;
+}
+
+static int sprd_thm_rawdata_to_temp(struct sprd_thermal_sensor *sen,
+				    u32 rawdata)
+{
+	clamp(rawdata, (u32)SPRD_THM_RAW_DATA_LOW, (u32)SPRD_THM_RAW_DATA_HIGH);
+
+	/*
+	 * According to the thermal datasheet, the formula of converting
+	 * adc value to the temperature value should be:
+	 * T_final = k_cal * x - b_cal.
+	 */
+	return sen->cal_slope * rawdata - sen->cal_offset;
+}
+
+static int sprd_thm_temp_to_rawdata(int temp, struct sprd_thermal_sensor *sen)
+{
+	u32 val;
+
+	clamp(temp, (int)SPRD_THM_TEMP_LOW, (int)SPRD_THM_TEMP_HIGH);
+
+	/*
+	 * According to the thermal datasheet, the formula of converting
+	 * adc value to the temperature value should be:
+	 * T_final = k_cal * x - b_cal.
+	 */
+	val = (temp + sen->cal_offset) / sen->cal_slope;
+
+	return clamp(val, val, (u32)(SPRD_THM_RAW_DATA_HIGH - 1));
+}
+
+static int sprd_thm_read_temp(void *devdata, int *temp)
+{
+	struct sprd_thermal_sensor *sen = devdata;
+	u32 data;
+
+	data = readl(sen->data->base + SPRD_THM_TEMP(sen->id)) &
+		SPRD_THM_RAW_READ_MSK;
+
+	*temp = sprd_thm_rawdata_to_temp(sen, data);
+
+	return 0;
+}
+
+static const struct thermal_zone_of_device_ops sprd_thm_ops = {
+	.get_temp = sprd_thm_read_temp,
+};
+
+static int sprd_thm_poll_ready_status(struct sprd_thermal_data *thm)
+{
+	u32 val;
+	int ret;
+
+	/*
+	 * Wait for thermal ready status before configuring thermal parameters.
+	 */
+	ret = readl_poll_timeout(thm->base + SPRD_THM_CTL, val,
+				 !(val & SPRD_THM_SET_RDY_ST),
+				 SPRD_THM_RDYST_POLLING_TIME,
+				 SPRD_THM_RDYST_TIMEOUT);
+	if (ret)
+		return ret;
+
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_MON_EN,
+			     SPRD_THM_MON_EN);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_SET_RDY,
+			     SPRD_THM_SET_RDY);
+	return 0;
+}
+
+static int sprd_thm_wait_temp_ready(struct sprd_thermal_data *thm)
+{
+	u32 val;
+
+	/* Wait for first temperature data ready before reading temperature */
+	return readl_poll_timeout(thm->base + SPRD_THM_INTERNAL_STS1, val,
+				  !(val & SPRD_THM_TEMPER_RDY),
+				  SPRD_THM_TEMP_READY_POLL_TIME,
+				  SPRD_THM_TEMP_READY_TIMEOUT);
+}
+
+static int sprd_thm_set_ready(struct sprd_thermal_data *thm)
+{
+	int ret;
+
+	ret = sprd_thm_poll_ready_status(thm);
+	if (ret)
+		return ret;
+
+	/*
+	 * Clear interrupt status, enable thermal interrupt and enable thermal.
+	 *
+	 * The SPRD thermal controller integrates a hardware interrupt signal,
+	 * which means if the temperature is overheat, it will generate an
+	 * interrupt and notify the event to PMIC automatically to shutdown the
+	 * system. So here we should enable the interrupt bits, though we have
+	 * not registered an irq handler.
+	 */
+	writel(SPRD_THM_INT_CLR_MASK, thm->base + SPRD_THM_INT_CLR);
+	sprd_thm_update_bits(thm->base + SPRD_THM_INT_EN,
+			     SPRD_THM_BIT_INT_EN, SPRD_THM_BIT_INT_EN);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, SPRD_THM_EN);
+	return 0;
+}
+
+static void sprd_thm_sensor_init(struct sprd_thermal_data *thm,
+				 struct sprd_thermal_sensor *sen)
+{
+	u32 otp_rawdata, hot_rawdata;
+
+	otp_rawdata = sprd_thm_temp_to_rawdata(SPRD_THM_OTP_TEMP, sen);
+	hot_rawdata = sprd_thm_temp_to_rawdata(SPRD_THM_HOT_TEMP, sen);
+
+	/* Enable the sensor' overheat temperature protection interrupt */
+	sprd_thm_update_bits(thm->base + SPRD_THM_INT_EN,
+			     SPRD_THM_SEN_OVERHEAT_ALARM_EN(sen->id),
+			     SPRD_THM_SEN_OVERHEAT_ALARM_EN(sen->id));
+
+	/* Set the sensor' overheat and hot threshold temperature */
+	sprd_thm_update_bits(thm->base + SPRD_THM_THRES(sen->id),
+			     SPRD_THM_THRES_MASK,
+			     (otp_rawdata << SPRD_THM_OTP_TRIP_SHIFT) |
+			     hot_rawdata);
+
+	/* Enable the corresponding sensor */
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL, SPRD_THM_SEN(sen->id),
+			     SPRD_THM_SEN(sen->id));
+}
+
+static void sprd_thm_para_config(struct sprd_thermal_data *thm)
+{
+	/* Set the period of two valid temperature detection action */
+	sprd_thm_update_bits(thm->base + SPRD_THM_DET_PERIOD,
+			     SPRD_THM_DET_PERIOD_MASK, SPRD_THM_DET_PERIOD);
+
+	/* Set the sensors' monitor mode */
+	sprd_thm_update_bits(thm->base + SPRD_THM_MON_CTL,
+			     SPRD_THM_MON_MODE_MASK, SPRD_THM_MON_MODE);
+
+	/* Set the sensors' monitor period */
+	sprd_thm_update_bits(thm->base + SPRD_THM_MON_PERIOD,
+			     SPRD_THM_MON_PERIOD_MASK, SPRD_THM_MON_PERIOD);
+}
+
+static void sprd_thm_toggle_sensor(struct sprd_thermal_sensor *sen, bool on)
+{
+	struct thermal_zone_device *tzd = sen->tzd;
+
+	tzd->ops->set_mode(tzd,
+		on ? THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED);
+}
+
+static int sprd_thm_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct device_node *sen_child;
+	struct sprd_thermal_data *thm;
+	struct sprd_thermal_sensor *sen;
+	const struct sprd_thm_variant_data *pdata;
+	int ret, i;
+	u32 val;
+
+	pdata = of_device_get_match_data(&pdev->dev);
+	if (!pdata) {
+		dev_err(&pdev->dev, "No matching driver data found\n");
+		return -EINVAL;
+	}
+
+	thm = devm_kzalloc(&pdev->dev, sizeof(*thm), GFP_KERNEL);
+	if (!thm)
+		return -ENOMEM;
+
+	thm->var_data = pdata;
+	thm->base = devm_platform_ioremap_resource(pdev, 0);
+	if (IS_ERR(thm->base))
+		return PTR_ERR(thm->base);
+
+	thm->nr_sensors = of_get_child_count(np);
+	if (thm->nr_sensors == 0 || thm->nr_sensors > SPRD_THM_MAX_SENSOR) {
+		dev_err(&pdev->dev, "incorrect sensor count\n");
+		return -EINVAL;
+	}
+
+	thm->clk = devm_clk_get(&pdev->dev, "enable");
+	if (IS_ERR(thm->clk)) {
+		dev_err(&pdev->dev, "failed to get enable clock\n");
+		return PTR_ERR(thm->clk);
+	}
+
+	ret = clk_prepare_enable(thm->clk);
+	if (ret)
+		return ret;
+
+	sprd_thm_para_config(thm);
+
+	ret = sprd_thm_cal_read(np, "thm_sign_cal", &val);
+	if (ret)
+		goto disable_clk;
+
+	if (val > 0)
+		thm->ratio_sign = -1;
+	else
+		thm->ratio_sign = 1;
+
+	ret = sprd_thm_cal_read(np, "thm_ratio_cal", &thm->ratio_off);
+	if (ret)
+		goto disable_clk;
+
+	for_each_child_of_node(np, sen_child) {
+		sen = devm_kzalloc(&pdev->dev, sizeof(*sen), GFP_KERNEL);
+		if (!sen) {
+			ret = -ENOMEM;
+			goto disable_clk;
+		}
+
+		sen->data = thm;
+		sen->dev = &pdev->dev;
+
+		ret = of_property_read_u32(sen_child, "reg", &sen->id);
+		if (ret) {
+			dev_err(&pdev->dev, "get sensor reg failed");
+			goto disable_clk;
+		}
+
+		ret = sprd_thm_sensor_calibration(sen_child, thm, sen);
+		if (ret) {
+			dev_err(&pdev->dev, "efuse cal analysis failed");
+			goto disable_clk;
+		}
+
+		sprd_thm_sensor_init(thm, sen);
+
+		sen->tzd = devm_thermal_zone_of_sensor_register(sen->dev,
+								sen->id,
+								sen,
+								&sprd_thm_ops);
+		if (IS_ERR(sen->tzd)) {
+			dev_err(&pdev->dev, "register thermal zone failed %d\n",
+				sen->id);
+			ret = PTR_ERR(sen->tzd);
+			goto disable_clk;
+		}
+
+		thm->sensor[sen->id] = sen;
+	}
+
+	ret = sprd_thm_set_ready(thm);
+	if (ret)
+		goto disable_clk;
+
+	ret = sprd_thm_wait_temp_ready(thm);
+	if (ret)
+		goto disable_clk;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], true);
+
+	platform_set_drvdata(pdev, thm);
+	return 0;
+
+disable_clk:
+	clk_disable_unprepare(thm->clk);
+	return ret;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static void sprd_thm_hw_suspend(struct sprd_thermal_data *thm)
+{
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+				     SPRD_THM_SEN(thm->sensor[i]->id), 0);
+	}
+
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, 0x0);
+}
+
+static int sprd_thm_suspend(struct device *dev)
+{
+	struct sprd_thermal_data *thm = dev_get_drvdata(dev);
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], false);
+
+	sprd_thm_hw_suspend(thm);
+	clk_disable_unprepare(thm->clk);
+
+	return 0;
+}
+
+static int sprd_thm_hw_resume(struct sprd_thermal_data *thm)
+{
+	int ret, i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+				     SPRD_THM_SEN(thm->sensor[i]->id),
+				     SPRD_THM_SEN(thm->sensor[i]->id));
+	}
+
+	ret = sprd_thm_poll_ready_status(thm);
+	if (ret)
+		return ret;
+
+	writel(SPRD_THM_INT_CLR_MASK, thm->base + SPRD_THM_INT_CLR);
+	sprd_thm_update_bits(thm->base + SPRD_THM_CTL,
+			     SPRD_THM_EN, SPRD_THM_EN);
+	return sprd_thm_wait_temp_ready(thm);
+}
+
+static int sprd_thm_resume(struct device *dev)
+{
+	struct sprd_thermal_data *thm = dev_get_drvdata(dev);
+	int ret, i;
+
+	ret = clk_prepare_enable(thm->clk);
+	if (ret)
+		return ret;
+
+	ret = sprd_thm_hw_resume(thm);
+	if (ret)
+		goto disable_clk;
+
+	for (i = 0; i < thm->nr_sensors; i++)
+		sprd_thm_toggle_sensor(thm->sensor[i], true);
+
+	return 0;
+
+disable_clk:
+	clk_disable_unprepare(thm->clk);
+	return ret;
+}
+#endif
+
+static int sprd_thm_remove(struct platform_device *pdev)
+{
+	struct sprd_thermal_data *thm = platform_get_drvdata(pdev);
+	int i;
+
+	for (i = 0; i < thm->nr_sensors; i++) {
+		sprd_thm_toggle_sensor(thm->sensor[i], false);
+		devm_thermal_zone_of_sensor_unregister(&pdev->dev,
+						       thm->sensor[i]->tzd);
+	}
+
+	clk_disable_unprepare(thm->clk);
+	return 0;
+}
+
+static const struct of_device_id sprd_thermal_of_match[] = {
+	{ .compatible = "sprd,ums512-thermal", .data = &ums512_data },
+	{ },
+};
+MODULE_DEVICE_TABLE(of, sprd_thermal_of_match);
+
+static const struct dev_pm_ops sprd_thermal_pm_ops = {
+	SET_SYSTEM_SLEEP_PM_OPS(sprd_thm_suspend, sprd_thm_resume)
+};
+
+static struct platform_driver sprd_thermal_driver = {
+	.probe = sprd_thm_probe,
+	.remove = sprd_thm_remove,
+	.driver = {
+		.name = "sprd-thermal",
+		.pm = &sprd_thermal_pm_ops,
+		.of_match_table = sprd_thermal_of_match,
+	},
+};
+
+module_platform_driver(sprd_thermal_driver);
+
+MODULE_AUTHOR("Freeman Liu <freeman.liu@unisoc.com>");
+MODULE_DESCRIPTION("Spreadtrum thermal driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/hvc/hvc_console.h b/drivers/tty/hvc/hvc_console.h
index e931995..e092b8b 100644
--- a/drivers/tty/hvc/hvc_console.h
+++ b/drivers/tty/hvc/hvc_console.h
@@ -30,7 +30,7 @@
  * for the tty device.  Since this driver supports hotplug of vty adapters we
  * need to make sure we have enough allocated.
  */
-#define HVC_ALLOC_TTY_ADAPTERS	8
+#define HVC_ALLOC_TTY_ADAPTERS	64
 
 struct hvc_struct {
 	struct tty_port port;
diff --git a/drivers/tty/serdev/core.c b/drivers/tty/serdev/core.c
index a971985..3ed2fdbd 100644
--- a/drivers/tty/serdev/core.c
+++ b/drivers/tty/serdev/core.c
@@ -31,7 +31,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);
 
@@ -45,13 +56,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)
@@ -87,11 +103,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;
 }
 
 /**
@@ -630,16 +652,45 @@
 }
 #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
+ * serdev_controller_add_platform() - Add an serdev controller
  * @ctrl:	controller to be registered.
+ * @platform:	whether to permit fallthrough to platform device probe
  *
  * Register a controller previously allocated via serdev_controller_alloc() with
- * the serdev core.
+ * the serdev core. Optionally permit probing via a platform device fallback.
  */
-int serdev_controller_add(struct serdev_controller *ctrl)
+int serdev_controller_add_platform(struct serdev_controller *ctrl, bool platform)
 {
-	int ret_of, ret_acpi, ret;
+	int ret, ret_of, ret_acpi, ret_platform = -ENODEV;
 
 	/* Can't register until after driver model init */
 	if (WARN_ON(!is_registered))
@@ -653,9 +704,12 @@
 
 	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);
+	if (platform)
+		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;
 	}
@@ -669,7 +723,7 @@
 	device_del(&ctrl->dev);
 	return ret;
 };
-EXPORT_SYMBOL_GPL(serdev_controller_add);
+EXPORT_SYMBOL_GPL(serdev_controller_add_platform);
 
 /* Remove a device associated with a controller */
 static int serdev_remove_device(struct device *dev, void *data)
diff --git a/drivers/tty/serdev/serdev-ttyport.c b/drivers/tty/serdev/serdev-ttyport.c
index d367803e..6cdffde 100644
--- a/drivers/tty/serdev/serdev-ttyport.c
+++ b/drivers/tty/serdev/serdev-ttyport.c
@@ -7,9 +7,15 @@
 #include <linux/tty.h>
 #include <linux/tty_driver.h>
 #include <linux/poll.h>
+#include <linux/platform_device.h>
+#include <linux/module.h>
 
 #define SERPORT_ACTIVE		1
 
+static char *pdev_tty_port;
+module_param(pdev_tty_port, charp, 0644);
+MODULE_PARM_DESC(pdev_tty_port, "platform device tty port to claim");
+
 struct serport {
 	struct tty_port *port;
 	struct tty_struct *tty;
@@ -267,6 +273,7 @@
 {
 	struct serdev_controller *ctrl;
 	struct serport *serport;
+	bool platform = false;
 	int ret;
 
 	if (!port || !drv || !parent)
@@ -286,7 +293,28 @@
 	port->client_ops = &client_ops;
 	port->client_data = ctrl;
 
-	ret = serdev_controller_add(ctrl);
+	/* There is not always a way to bind specific platform devices because
+	 * they may be defined on platforms without DT or ACPI. When dealing
+	 * with a platform devices, do not allow direct binding unless it is
+	 * whitelisted by module parameter. If a platform device is otherwise
+	 * described by DT or ACPI it will still be bound and this check will
+	 * be ignored.
+	 */
+	if (parent->bus == &platform_bus_type) {
+		if (pdev_tty_port) {
+			unsigned long pdev_idx;
+			int tty_len = strlen(drv->name);
+
+			if (!strncmp(pdev_tty_port, drv->name, tty_len)) {
+				if (!kstrtoul(pdev_tty_port + tty_len, 10,
+					     &pdev_idx) && pdev_idx == idx) {
+					platform = true;
+				}
+			}
+		}
+	}
+
+	ret = serdev_controller_add_platform(ctrl, platform);
 	if (ret)
 		goto err_reset_data;
 
diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
index a9751a8..b1254c0 100644
--- a/drivers/tty/serial/Kconfig
+++ b/drivers/tty/serial/Kconfig
@@ -238,7 +238,6 @@
 
 config SERIAL_SAMSUNG
 	tristate "Samsung SoC serial support"
-	depends on PLAT_SAMSUNG || ARCH_EXYNOS
 	select SERIAL_CORE
 	help
 	  Support for the on-chip UARTs on the Samsung S3C24XX series CPUs,
@@ -261,15 +260,6 @@
 	help
 	  Select the number of available UART ports for the Samsung S3C
 	  serial driver
-	
-config SERIAL_SAMSUNG_DEBUG
-	bool "Samsung SoC serial debug"
-	depends on SERIAL_SAMSUNG && DEBUG_LL
-	help
-	  Add support for debugging the serial driver. Since this is
-	  generally being used as a console, we use our own output
-	  routines that go via the low-level debug printascii()
-	  function.
 
 config SERIAL_SAMSUNG_CONSOLE
 	bool "Support for console on Samsung SoC serial port"
@@ -976,7 +966,7 @@
 
 config SERIAL_QCOM_GENI_CONSOLE
 	bool "QCOM GENI Serial Console support"
-	depends on SERIAL_QCOM_GENI=y
+	depends on SERIAL_QCOM_GENI
 	select SERIAL_CORE_CONSOLE
 	select SERIAL_EARLYCON
 	help
@@ -1453,7 +1443,6 @@
 
 config SERIAL_SPRD
 	tristate "Support for Spreadtrum serial"
-	depends on ARCH_SPRD
 	select SERIAL_CORE
 	help
 	  This enables the driver for the Spreadtrum's serial.
diff --git a/drivers/tty/serial/Makefile b/drivers/tty/serial/Makefile
index 863f470..d056ee6 100644
--- a/drivers/tty/serial/Makefile
+++ b/drivers/tty/serial/Makefile
@@ -30,7 +30,7 @@
 obj-$(CONFIG_SERIAL_PNX8XXX) += pnx8xxx_uart.o
 obj-$(CONFIG_SERIAL_SA1100) += sa1100.o
 obj-$(CONFIG_SERIAL_BCM63XX) += bcm63xx_uart.o
-obj-$(CONFIG_SERIAL_SAMSUNG) += samsung.o
+obj-$(CONFIG_SERIAL_SAMSUNG) += samsung_tty.o
 obj-$(CONFIG_SERIAL_MAX3100) += max3100.o
 obj-$(CONFIG_SERIAL_MAX310X) += max310x.o
 obj-$(CONFIG_SERIAL_IP22_ZILOG) += ip22zilog.o
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
deleted file mode 100644
index c7683be..0000000
--- a/drivers/tty/serial/samsung.c
+++ /dev/null
@@ -1,2597 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * Driver core for Samsung SoC onboard UARTs.
- *
- * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
- *	http://armlinux.simtec.co.uk/
-*/
-
-/* Hote on 2410 error handling
- *
- * The s3c2410 manual has a love/hate affair with the contents of the
- * UERSTAT register in the UART blocks, and keeps marking some of the
- * error bits as reserved. Having checked with the s3c2410x01,
- * it copes with BREAKs properly, so I am happy to ignore the RESERVED
- * feature from the latter versions of the manual.
- *
- * If it becomes aparrent that latter versions of the 2410 remove these
- * bits, then action will have to be taken to differentiate the versions
- * and change the policy on BREAK
- *
- * BJD, 04-Nov-2004
-*/
-
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
-#define SUPPORT_SYSRQ
-#endif
-
-#include <linux/dmaengine.h>
-#include <linux/dma-mapping.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/ioport.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-#include <linux/init.h>
-#include <linux/sysrq.h>
-#include <linux/console.h>
-#include <linux/tty.h>
-#include <linux/tty_flip.h>
-#include <linux/serial_core.h>
-#include <linux/serial.h>
-#include <linux/serial_s3c.h>
-#include <linux/delay.h>
-#include <linux/clk.h>
-#include <linux/cpufreq.h>
-#include <linux/of.h>
-
-#include <asm/irq.h>
-
-#include "samsung.h"
-
-#if	defined(CONFIG_SERIAL_SAMSUNG_DEBUG) &&	\
-	!defined(MODULE)
-
-extern void printascii(const char *);
-
-__printf(1, 2)
-static void dbg(const char *fmt, ...)
-{
-	va_list va;
-	char buff[256];
-
-	va_start(va, fmt);
-	vscnprintf(buff, sizeof(buff), fmt, va);
-	va_end(va);
-
-	printascii(buff);
-}
-
-#else
-#define dbg(fmt, ...) do { if (0) no_printk(fmt, ##__VA_ARGS__); } while (0)
-#endif
-
-/* UART name and device definitions */
-
-#define S3C24XX_SERIAL_NAME	"ttySAC"
-#define S3C24XX_SERIAL_MAJOR	204
-#define S3C24XX_SERIAL_MINOR	64
-
-#define S3C24XX_TX_PIO			1
-#define S3C24XX_TX_DMA			2
-#define S3C24XX_RX_PIO			1
-#define S3C24XX_RX_DMA			2
-/* macros to change one thing to another */
-
-#define tx_enabled(port) ((port)->unused[0])
-#define rx_enabled(port) ((port)->unused[1])
-
-/* flag to ignore all characters coming in */
-#define RXSTAT_DUMMY_READ (0x10000000)
-
-static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port)
-{
-	return container_of(port, struct s3c24xx_uart_port, port);
-}
-
-/* translate a port to the device name */
-
-static inline const char *s3c24xx_serial_portname(struct uart_port *port)
-{
-	return to_platform_device(port->dev)->name;
-}
-
-static int s3c24xx_serial_txempty_nofifo(struct uart_port *port)
-{
-	return rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE;
-}
-
-/*
- * s3c64xx and later SoC's include the interrupt mask and status registers in
- * the controller itself, unlike the s3c24xx SoC's which have these registers
- * in the interrupt controller. Check if the port type is s3c64xx or higher.
- */
-static int s3c24xx_serial_has_interrupt_mask(struct uart_port *port)
-{
-	return to_ourport(port)->info->type == PORT_S3C6400;
-}
-
-static void s3c24xx_serial_rx_enable(struct uart_port *port)
-{
-	unsigned long flags;
-	unsigned int ucon, ufcon;
-	int count = 10000;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	while (--count && !s3c24xx_serial_txempty_nofifo(port))
-		udelay(100);
-
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	ufcon |= S3C2410_UFCON_RESETRX;
-	wr_regl(port, S3C2410_UFCON, ufcon);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon |= S3C2410_UCON_RXIRQMODE;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	rx_enabled(port) = 1;
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c24xx_serial_rx_disable(struct uart_port *port)
-{
-	unsigned long flags;
-	unsigned int ucon;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~S3C2410_UCON_RXIRQMODE;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	rx_enabled(port) = 0;
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c24xx_serial_stop_tx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct dma_tx_state state;
-	int count;
-
-	if (!tx_enabled(port))
-		return;
-
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
-	else
-		disable_irq_nosync(ourport->tx_irq);
-
-	if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) {
-		dmaengine_pause(dma->tx_chan);
-		dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
-		dmaengine_terminate_all(dma->tx_chan);
-		dma_sync_single_for_cpu(ourport->port.dev,
-			dma->tx_transfer_addr, dma->tx_size, DMA_TO_DEVICE);
-		async_tx_ack(dma->tx_desc);
-		count = dma->tx_bytes_requested - state.residue;
-		xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
-		port->icount.tx += count;
-	}
-
-	tx_enabled(port) = 0;
-	ourport->tx_in_progress = 0;
-
-	if (port->flags & UPF_CONS_FLOW)
-		s3c24xx_serial_rx_enable(port);
-
-	ourport->tx_mode = 0;
-}
-
-static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
-
-static void s3c24xx_serial_tx_dma_complete(void *args)
-{
-	struct s3c24xx_uart_port *ourport = args;
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct dma_tx_state state;
-	unsigned long flags;
-	int count;
-
-
-	dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
-	count = dma->tx_bytes_requested - state.residue;
-	async_tx_ack(dma->tx_desc);
-
-	dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr,
-				dma->tx_size, DMA_TO_DEVICE);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
-	port->icount.tx += count;
-	ourport->tx_in_progress = 0;
-
-	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
-		uart_write_wakeup(port);
-
-	s3c24xx_serial_start_next_tx(ourport);
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	u32 ucon;
-
-	/* Mask Tx interrupt */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
-	else
-		disable_irq_nosync(ourport->tx_irq);
-
-	/* Enable tx dma mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
-	ucon |= (dma_get_cache_alignment() >= 16) ?
-		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
-	ucon |= S3C64XX_UCON_TXMODE_DMA;
-	wr_regl(port,  S3C2410_UCON, ucon);
-
-	ourport->tx_mode = S3C24XX_TX_DMA;
-}
-
-static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	u32 ucon, ufcon;
-
-	/* Set ufcon txtrig */
-	ourport->tx_in_progress = S3C24XX_TX_PIO;
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	wr_regl(port,  S3C2410_UFCON, ufcon);
-
-	/* Enable tx pio mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TXMODE_MASK);
-	ucon |= S3C64XX_UCON_TXMODE_CPU;
-	wr_regl(port,  S3C2410_UCON, ucon);
-
-	/* Unmask Tx interrupt */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
-				  S3C64XX_UINTM);
-	else
-		enable_irq(ourport->tx_irq);
-
-	ourport->tx_mode = S3C24XX_TX_PIO;
-}
-
-static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
-{
-	if (ourport->tx_mode != S3C24XX_TX_PIO)
-		enable_tx_pio(ourport);
-}
-
-static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
-				      unsigned int count)
-{
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-
-
-	if (ourport->tx_mode != S3C24XX_TX_DMA)
-		enable_tx_dma(ourport);
-
-	dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
-	dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
-
-	dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr,
-				dma->tx_size, DMA_TO_DEVICE);
-
-	dma->tx_desc = dmaengine_prep_slave_single(dma->tx_chan,
-				dma->tx_transfer_addr, dma->tx_size,
-				DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
-	if (!dma->tx_desc) {
-		dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
-		return -EIO;
-	}
-
-	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
-	dma->tx_desc->callback_param = ourport;
-	dma->tx_bytes_requested = dma->tx_size;
-
-	ourport->tx_in_progress = S3C24XX_TX_DMA;
-	dma->tx_cookie = dmaengine_submit(dma->tx_desc);
-	dma_async_issue_pending(dma->tx_chan);
-	return 0;
-}
-
-static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	unsigned long count;
-
-	/* Get data size up to the end of buffer */
-	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
-
-	if (!count) {
-		s3c24xx_serial_stop_tx(port);
-		return;
-	}
-
-	if (!ourport->dma || !ourport->dma->tx_chan ||
-	    count < ourport->min_dma_size ||
-	    xmit->tail & (dma_get_cache_alignment() - 1))
-		s3c24xx_serial_start_tx_pio(ourport);
-	else
-		s3c24xx_serial_start_tx_dma(ourport, count);
-}
-
-static void s3c24xx_serial_start_tx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct circ_buf *xmit = &port->state->xmit;
-
-	if (!tx_enabled(port)) {
-		if (port->flags & UPF_CONS_FLOW)
-			s3c24xx_serial_rx_disable(port);
-
-		tx_enabled(port) = 1;
-		if (!ourport->dma || !ourport->dma->tx_chan)
-			s3c24xx_serial_start_tx_pio(ourport);
-	}
-
-	if (ourport->dma && ourport->dma->tx_chan) {
-		if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
-			s3c24xx_serial_start_next_tx(ourport);
-	}
-}
-
-static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
-		struct tty_port *tty, int count)
-{
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	int copied;
-
-	if (!count)
-		return;
-
-	dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-
-	ourport->port.icount.rx += count;
-	if (!tty) {
-		dev_err(ourport->port.dev, "No tty port\n");
-		return;
-	}
-	copied = tty_insert_flip_string(tty,
-			((unsigned char *)(ourport->dma->rx_buf)), count);
-	if (copied != count) {
-		WARN_ON(1);
-		dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
-	}
-}
-
-static void s3c24xx_serial_stop_rx(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_port *t = &port->state->port;
-	struct dma_tx_state state;
-	enum dma_status dma_status;
-	unsigned int received;
-
-	if (rx_enabled(port)) {
-		dbg("s3c24xx_serial_stop_rx: port=%p\n", port);
-		if (s3c24xx_serial_has_interrupt_mask(port))
-			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
-					S3C64XX_UINTM);
-		else
-			disable_irq_nosync(ourport->rx_irq);
-		rx_enabled(port) = 0;
-	}
-	if (dma && dma->rx_chan) {
-		dmaengine_pause(dma->tx_chan);
-		dma_status = dmaengine_tx_status(dma->rx_chan,
-				dma->rx_cookie, &state);
-		if (dma_status == DMA_IN_PROGRESS ||
-			dma_status == DMA_PAUSED) {
-			received = dma->rx_bytes_requested - state.residue;
-			dmaengine_terminate_all(dma->rx_chan);
-			s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-		}
-	}
-}
-
-static inline struct s3c24xx_uart_info
-	*s3c24xx_port_to_info(struct uart_port *port)
-{
-	return to_ourport(port)->info;
-}
-
-static inline struct s3c2410_uartcfg
-	*s3c24xx_port_to_cfg(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport;
-
-	if (port->dev == NULL)
-		return NULL;
-
-	ourport = container_of(port, struct s3c24xx_uart_port, port);
-	return ourport->cfg;
-}
-
-static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
-				     unsigned long ufstat)
-{
-	struct s3c24xx_uart_info *info = ourport->info;
-
-	if (ufstat & info->rx_fifofull)
-		return ourport->port.fifosize;
-
-	return (ufstat & info->rx_fifomask) >> info->rx_fifoshift;
-}
-
-static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
-static void s3c24xx_serial_rx_dma_complete(void *args)
-{
-	struct s3c24xx_uart_port *ourport = args;
-	struct uart_port *port = &ourport->port;
-
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_port *t = &port->state->port;
-	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
-
-	struct dma_tx_state state;
-	unsigned long flags;
-	int received;
-
-	dmaengine_tx_status(dma->rx_chan,  dma->rx_cookie, &state);
-	received  = dma->rx_bytes_requested - state.residue;
-	async_tx_ack(dma->rx_desc);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	if (received)
-		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-
-	if (tty) {
-		tty_flip_buffer_push(t);
-		tty_kref_put(tty);
-	}
-
-	s3c64xx_start_rx_dma(ourport);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-
-	dma_sync_single_for_device(ourport->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-
-	dma->rx_desc = dmaengine_prep_slave_single(dma->rx_chan,
-				dma->rx_addr, dma->rx_size, DMA_DEV_TO_MEM,
-				DMA_PREP_INTERRUPT);
-	if (!dma->rx_desc) {
-		dev_err(ourport->port.dev, "Unable to get desc for Rx\n");
-		return;
-	}
-
-	dma->rx_desc->callback = s3c24xx_serial_rx_dma_complete;
-	dma->rx_desc->callback_param = ourport;
-	dma->rx_bytes_requested = dma->rx_size;
-
-	dma->rx_cookie = dmaengine_submit(dma->rx_desc);
-	dma_async_issue_pending(dma->rx_chan);
-}
-
-/* ? - where has parity gone?? */
-#define S3C2410_UERSTAT_PARITY (0x1000)
-
-static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ucon;
-
-	/* set Rx mode to DMA mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_RXBURST_MASK |
-			S3C64XX_UCON_TIMEOUT_MASK |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_DMASUS_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_MASK);
-	ucon |= S3C64XX_UCON_RXBURST_16 |
-			0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_DMA;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	ourport->rx_mode = S3C24XX_RX_DMA;
-}
-
-static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ucon;
-
-	/* set Rx mode to DMA mode */
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= ~(S3C64XX_UCON_TIMEOUT_MASK |
-			S3C64XX_UCON_EMPTYINT_EN |
-			S3C64XX_UCON_DMASUS_EN |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_MASK);
-	ucon |= 0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
-			S3C64XX_UCON_TIMEOUT_EN |
-			S3C64XX_UCON_RXMODE_CPU;
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	ourport->rx_mode = S3C24XX_RX_PIO;
-}
-
-static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
-
-static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
-{
-	unsigned int utrstat, ufstat, received;
-	struct s3c24xx_uart_port *ourport = dev_id;
-	struct uart_port *port = &ourport->port;
-	struct s3c24xx_uart_dma *dma = ourport->dma;
-	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
-	struct tty_port *t = &port->state->port;
-	unsigned long flags;
-	struct dma_tx_state state;
-
-	utrstat = rd_regl(port, S3C2410_UTRSTAT);
-	ufstat = rd_regl(port, S3C2410_UFSTAT);
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	if (!(utrstat & S3C2410_UTRSTAT_TIMEOUT)) {
-		s3c64xx_start_rx_dma(ourport);
-		if (ourport->rx_mode == S3C24XX_RX_PIO)
-			enable_rx_dma(ourport);
-		goto finish;
-	}
-
-	if (ourport->rx_mode == S3C24XX_RX_DMA) {
-		dmaengine_pause(dma->rx_chan);
-		dmaengine_tx_status(dma->rx_chan, dma->rx_cookie, &state);
-		dmaengine_terminate_all(dma->rx_chan);
-		received = dma->rx_bytes_requested - state.residue;
-		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
-
-		enable_rx_pio(ourport);
-	}
-
-	s3c24xx_serial_rx_drain_fifo(ourport);
-
-	if (tty) {
-		tty_flip_buffer_push(t);
-		tty_kref_put(tty);
-	}
-
-	wr_regl(port, S3C2410_UTRSTAT, S3C2410_UTRSTAT_TIMEOUT);
-
-finish:
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	return IRQ_HANDLED;
-}
-
-static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
-{
-	struct uart_port *port = &ourport->port;
-	unsigned int ufcon, ch, flag, ufstat, uerstat;
-	unsigned int fifocnt = 0;
-	int max_count = port->fifosize;
-
-	while (max_count-- > 0) {
-		/*
-		 * Receive all characters known to be in FIFO
-		 * before reading FIFO level again
-		 */
-		if (fifocnt == 0) {
-			ufstat = rd_regl(port, S3C2410_UFSTAT);
-			fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
-			if (fifocnt == 0)
-				break;
-		}
-		fifocnt--;
-
-		uerstat = rd_regl(port, S3C2410_UERSTAT);
-		ch = rd_regb(port, S3C2410_URXH);
-
-		if (port->flags & UPF_CONS_FLOW) {
-			int txe = s3c24xx_serial_txempty_nofifo(port);
-
-			if (rx_enabled(port)) {
-				if (!txe) {
-					rx_enabled(port) = 0;
-					continue;
-				}
-			} else {
-				if (txe) {
-					ufcon = rd_regl(port, S3C2410_UFCON);
-					ufcon |= S3C2410_UFCON_RESETRX;
-					wr_regl(port, S3C2410_UFCON, ufcon);
-					rx_enabled(port) = 1;
-					return;
-				}
-				continue;
-			}
-		}
-
-		/* insert the character into the buffer */
-
-		flag = TTY_NORMAL;
-		port->icount.rx++;
-
-		if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
-			dbg("rxerr: port ch=0x%02x, rxs=0x%08x\n",
-			    ch, uerstat);
-
-			/* check for break */
-			if (uerstat & S3C2410_UERSTAT_BREAK) {
-				dbg("break!\n");
-				port->icount.brk++;
-				if (uart_handle_break(port))
-					continue; /* Ignore character */
-			}
-
-			if (uerstat & S3C2410_UERSTAT_FRAME)
-				port->icount.frame++;
-			if (uerstat & S3C2410_UERSTAT_OVERRUN)
-				port->icount.overrun++;
-
-			uerstat &= port->read_status_mask;
-
-			if (uerstat & S3C2410_UERSTAT_BREAK)
-				flag = TTY_BREAK;
-			else if (uerstat & S3C2410_UERSTAT_PARITY)
-				flag = TTY_PARITY;
-			else if (uerstat & (S3C2410_UERSTAT_FRAME |
-					    S3C2410_UERSTAT_OVERRUN))
-				flag = TTY_FRAME;
-		}
-
-		if (uart_handle_sysrq_char(port, ch))
-			continue; /* Ignore character */
-
-		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,
-				 ch, flag);
-	}
-
-	tty_flip_buffer_push(&port->state->port);
-}
-
-static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id)
-{
-	struct s3c24xx_uart_port *ourport = dev_id;
-	struct uart_port *port = &ourport->port;
-	unsigned long flags;
-
-	spin_lock_irqsave(&port->lock, flags);
-	s3c24xx_serial_rx_drain_fifo(ourport);
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	return IRQ_HANDLED;
-}
-
-
-static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)
-{
-	struct s3c24xx_uart_port *ourport = dev_id;
-
-	if (ourport->dma && ourport->dma->rx_chan)
-		return s3c24xx_serial_rx_chars_dma(dev_id);
-	return s3c24xx_serial_rx_chars_pio(dev_id);
-}
-
-static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
-{
-	struct s3c24xx_uart_port *ourport = id;
-	struct uart_port *port = &ourport->port;
-	struct circ_buf *xmit = &port->state->xmit;
-	unsigned long flags;
-	int count, dma_count = 0;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
-
-	if (ourport->dma && ourport->dma->tx_chan &&
-	    count >= ourport->min_dma_size) {
-		int align = dma_get_cache_alignment() -
-			(xmit->tail & (dma_get_cache_alignment() - 1));
-		if (count-align >= ourport->min_dma_size) {
-			dma_count = count-align;
-			count = align;
-		}
-	}
-
-	if (port->x_char) {
-		wr_regb(port, S3C2410_UTXH, port->x_char);
-		port->icount.tx++;
-		port->x_char = 0;
-		goto out;
-	}
-
-	/* if there isn't anything more to transmit, or the uart is now
-	 * stopped, disable the uart and exit
-	*/
-
-	if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
-		s3c24xx_serial_stop_tx(port);
-		goto out;
-	}
-
-	/* try and drain the buffer... */
-
-	if (count > port->fifosize) {
-		count = port->fifosize;
-		dma_count = 0;
-	}
-
-	while (!uart_circ_empty(xmit) && count > 0) {
-		if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
-			break;
-
-		wr_regb(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
-		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
-		port->icount.tx++;
-		count--;
-	}
-
-	if (!count && dma_count) {
-		s3c24xx_serial_start_tx_dma(ourport, dma_count);
-		goto out;
-	}
-
-	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
-		spin_unlock(&port->lock);
-		uart_write_wakeup(port);
-		spin_lock(&port->lock);
-	}
-
-	if (uart_circ_empty(xmit))
-		s3c24xx_serial_stop_tx(port);
-
-out:
-	spin_unlock_irqrestore(&port->lock, flags);
-	return IRQ_HANDLED;
-}
-
-/* interrupt handler for s3c64xx and later SoC's.*/
-static irqreturn_t s3c64xx_serial_handle_irq(int irq, void *id)
-{
-	struct s3c24xx_uart_port *ourport = id;
-	struct uart_port *port = &ourport->port;
-	unsigned int pend = rd_regl(port, S3C64XX_UINTP);
-	irqreturn_t ret = IRQ_HANDLED;
-
-	if (pend & S3C64XX_UINTM_RXD_MSK) {
-		ret = s3c24xx_serial_rx_chars(irq, id);
-		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_RXD_MSK);
-	}
-	if (pend & S3C64XX_UINTM_TXD_MSK) {
-		ret = s3c24xx_serial_tx_chars(irq, id);
-		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_TXD_MSK);
-	}
-	return ret;
-}
-
-static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT);
-	unsigned long ufcon = rd_regl(port, S3C2410_UFCON);
-
-	if (ufcon & S3C2410_UFCON_FIFOMODE) {
-		if ((ufstat & info->tx_fifomask) != 0 ||
-		    (ufstat & info->tx_fifofull))
-			return 0;
-
-		return 1;
-	}
-
-	return s3c24xx_serial_txempty_nofifo(port);
-}
-
-/* no modem control lines */
-static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
-{
-	unsigned int umstat = rd_regb(port, S3C2410_UMSTAT);
-
-	if (umstat & S3C2410_UMSTAT_CTS)
-		return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
-	else
-		return TIOCM_CAR | TIOCM_DSR;
-}
-
-static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
-{
-	unsigned int umcon = rd_regl(port, S3C2410_UMCON);
-
-	if (mctrl & TIOCM_RTS)
-		umcon |= S3C2410_UMCOM_RTS_LOW;
-	else
-		umcon &= ~S3C2410_UMCOM_RTS_LOW;
-
-	wr_regl(port, S3C2410_UMCON, umcon);
-}
-
-static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
-{
-	unsigned long flags;
-	unsigned int ucon;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ucon = rd_regl(port, S3C2410_UCON);
-
-	if (break_state)
-		ucon |= S3C2410_UCON_SBREAK;
-	else
-		ucon &= ~S3C2410_UCON_SBREAK;
-
-	wr_regl(port, S3C2410_UCON, ucon);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
-{
-	struct s3c24xx_uart_dma	*dma = p->dma;
-	struct dma_slave_caps dma_caps;
-	const char *reason = NULL;
-	int ret;
-
-	/* Default slave configuration parameters */
-	dma->rx_conf.direction		= DMA_DEV_TO_MEM;
-	dma->rx_conf.src_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
-	dma->rx_conf.src_addr		= p->port.mapbase + S3C2410_URXH;
-	dma->rx_conf.src_maxburst	= 1;
-
-	dma->tx_conf.direction		= DMA_MEM_TO_DEV;
-	dma->tx_conf.dst_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
-	dma->tx_conf.dst_addr		= p->port.mapbase + S3C2410_UTXH;
-	dma->tx_conf.dst_maxburst	= 1;
-
-	dma->rx_chan = dma_request_chan(p->port.dev, "rx");
-
-	if (IS_ERR(dma->rx_chan)) {
-		reason = "DMA RX channel request failed";
-		ret = PTR_ERR(dma->rx_chan);
-		goto err_warn;
-	}
-
-	ret = dma_get_slave_caps(dma->rx_chan, &dma_caps);
-	if (ret < 0 ||
-	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
-		reason = "insufficient DMA RX engine capabilities";
-		ret = -EOPNOTSUPP;
-		goto err_release_rx;
-	}
-
-	dmaengine_slave_config(dma->rx_chan, &dma->rx_conf);
-
-	dma->tx_chan = dma_request_chan(p->port.dev, "tx");
-	if (IS_ERR(dma->tx_chan)) {
-		reason = "DMA TX channel request failed";
-		ret = PTR_ERR(dma->tx_chan);
-		goto err_release_rx;
-	}
-
-	ret = dma_get_slave_caps(dma->tx_chan, &dma_caps);
-	if (ret < 0 ||
-	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
-		reason = "insufficient DMA TX engine capabilities";
-		ret = -EOPNOTSUPP;
-		goto err_release_tx;
-	}
-
-	dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
-
-	/* RX buffer */
-	dma->rx_size = PAGE_SIZE;
-
-	dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL);
-	if (!dma->rx_buf) {
-		ret = -ENOMEM;
-		goto err_release_tx;
-	}
-
-	dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf,
-				dma->rx_size, DMA_FROM_DEVICE);
-	if (dma_mapping_error(p->port.dev, dma->rx_addr)) {
-		reason = "DMA mapping error for RX buffer";
-		ret = -EIO;
-		goto err_free_rx;
-	}
-
-	/* TX buffer */
-	dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf,
-				UART_XMIT_SIZE, DMA_TO_DEVICE);
-	if (dma_mapping_error(p->port.dev, dma->tx_addr)) {
-		reason = "DMA mapping error for TX buffer";
-		ret = -EIO;
-		goto err_unmap_rx;
-	}
-
-	return 0;
-
-err_unmap_rx:
-	dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size,
-			 DMA_FROM_DEVICE);
-err_free_rx:
-	kfree(dma->rx_buf);
-err_release_tx:
-	dma_release_channel(dma->tx_chan);
-err_release_rx:
-	dma_release_channel(dma->rx_chan);
-err_warn:
-	if (reason)
-		dev_warn(p->port.dev, "%s, DMA will not be used\n", reason);
-	return ret;
-}
-
-static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p)
-{
-	struct s3c24xx_uart_dma	*dma = p->dma;
-
-	if (dma->rx_chan) {
-		dmaengine_terminate_all(dma->rx_chan);
-		dma_unmap_single(p->port.dev, dma->rx_addr,
-				dma->rx_size, DMA_FROM_DEVICE);
-		kfree(dma->rx_buf);
-		dma_release_channel(dma->rx_chan);
-		dma->rx_chan = NULL;
-	}
-
-	if (dma->tx_chan) {
-		dmaengine_terminate_all(dma->tx_chan);
-		dma_unmap_single(p->port.dev, dma->tx_addr,
-				UART_XMIT_SIZE, DMA_TO_DEVICE);
-		dma_release_channel(dma->tx_chan);
-		dma->tx_chan = NULL;
-	}
-}
-
-static void s3c24xx_serial_shutdown(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (ourport->tx_claimed) {
-		if (!s3c24xx_serial_has_interrupt_mask(port))
-			free_irq(ourport->tx_irq, ourport);
-		tx_enabled(port) = 0;
-		ourport->tx_claimed = 0;
-		ourport->tx_mode = 0;
-	}
-
-	if (ourport->rx_claimed) {
-		if (!s3c24xx_serial_has_interrupt_mask(port))
-			free_irq(ourport->rx_irq, ourport);
-		ourport->rx_claimed = 0;
-		rx_enabled(port) = 0;
-	}
-
-	/* Clear pending interrupts and mask all interrupts */
-	if (s3c24xx_serial_has_interrupt_mask(port)) {
-		free_irq(port->irq, ourport);
-
-		wr_regl(port, S3C64XX_UINTP, 0xf);
-		wr_regl(port, S3C64XX_UINTM, 0xf);
-	}
-
-	if (ourport->dma)
-		s3c24xx_serial_release_dma(ourport);
-
-	ourport->tx_in_progress = 0;
-}
-
-static int s3c24xx_serial_startup(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	int ret;
-
-	dbg("s3c24xx_serial_startup: port=%p (%08llx,%p)\n",
-	    port, (unsigned long long)port->mapbase, port->membase);
-
-	rx_enabled(port) = 1;
-
-	ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
-			  s3c24xx_serial_portname(port), ourport);
-
-	if (ret != 0) {
-		dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
-		return ret;
-	}
-
-	ourport->rx_claimed = 1;
-
-	dbg("requesting tx irq...\n");
-
-	tx_enabled(port) = 1;
-
-	ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
-			  s3c24xx_serial_portname(port), ourport);
-
-	if (ret) {
-		dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
-		goto err;
-	}
-
-	ourport->tx_claimed = 1;
-
-	dbg("s3c24xx_serial_startup ok\n");
-
-	/* the port reset code should have done the correct
-	 * register setup for the port controls */
-
-	return ret;
-
-err:
-	s3c24xx_serial_shutdown(port);
-	return ret;
-}
-
-static int s3c64xx_serial_startup(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	unsigned long flags;
-	unsigned int ufcon;
-	int ret;
-
-	dbg("s3c64xx_serial_startup: port=%p (%08llx,%p)\n",
-	    port, (unsigned long long)port->mapbase, port->membase);
-
-	wr_regl(port, S3C64XX_UINTM, 0xf);
-	if (ourport->dma) {
-		ret = s3c24xx_serial_request_dma(ourport);
-		if (ret < 0) {
-			devm_kfree(port->dev, ourport->dma);
-			ourport->dma = NULL;
-		}
-	}
-
-	ret = request_irq(port->irq, s3c64xx_serial_handle_irq, IRQF_SHARED,
-			  s3c24xx_serial_portname(port), ourport);
-	if (ret) {
-		dev_err(port->dev, "cannot get irq %d\n", port->irq);
-		return ret;
-	}
-
-	/* For compatibility with s3c24xx Soc's */
-	rx_enabled(port) = 1;
-	ourport->rx_claimed = 1;
-	tx_enabled(port) = 0;
-	ourport->tx_claimed = 1;
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	ufcon = rd_regl(port, S3C2410_UFCON);
-	ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
-	if (!uart_console(port))
-		ufcon |= S3C2410_UFCON_RESETTX;
-	wr_regl(port, S3C2410_UFCON, ufcon);
-
-	enable_rx_pio(ourport);
-
-	spin_unlock_irqrestore(&port->lock, flags);
-
-	/* Enable Rx Interrupt */
-	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
-
-	dbg("s3c64xx_serial_startup ok\n");
-	return ret;
-}
-
-/* power power management control */
-
-static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
-			      unsigned int old)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	int timeout = 10000;
-
-	ourport->pm_level = level;
-
-	switch (level) {
-	case 3:
-		while (--timeout && !s3c24xx_serial_txempty_nofifo(port))
-			udelay(100);
-
-		if (!IS_ERR(ourport->baudclk))
-			clk_disable_unprepare(ourport->baudclk);
-
-		clk_disable_unprepare(ourport->clk);
-		break;
-
-	case 0:
-		clk_prepare_enable(ourport->clk);
-
-		if (!IS_ERR(ourport->baudclk))
-			clk_prepare_enable(ourport->baudclk);
-
-		break;
-	default:
-		dev_err(port->dev, "s3c24xx_serial: unknown pm %d\n", level);
-	}
-}
-
-/* baud rate calculation
- *
- * The UARTs on the S3C2410/S3C2440 can take their clocks from a number
- * of different sources, including the peripheral clock ("pclk") and an
- * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk")
- * with a programmable extra divisor.
- *
- * The following code goes through the clock sources, and calculates the
- * baud clocks (and the resultant actual baud rates) and then tries to
- * pick the closest one and select that.
- *
-*/
-
-#define MAX_CLK_NAME_LENGTH 15
-
-static inline int s3c24xx_serial_getsource(struct uart_port *port)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned int ucon;
-
-	if (info->num_clks == 1)
-		return 0;
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	ucon &= info->clksel_mask;
-	return ucon >> info->clksel_shift;
-}
-
-static void s3c24xx_serial_setsource(struct uart_port *port,
-			unsigned int clk_sel)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned int ucon;
-
-	if (info->num_clks == 1)
-		return;
-
-	ucon = rd_regl(port, S3C2410_UCON);
-	if ((ucon & info->clksel_mask) >> info->clksel_shift == clk_sel)
-		return;
-
-	ucon &= ~info->clksel_mask;
-	ucon |= clk_sel << info->clksel_shift;
-	wr_regl(port, S3C2410_UCON, ucon);
-}
-
-static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport,
-			unsigned int req_baud, struct clk **best_clk,
-			unsigned int *clk_num)
-{
-	struct s3c24xx_uart_info *info = ourport->info;
-	struct clk *clk;
-	unsigned long rate;
-	unsigned int cnt, baud, quot, best_quot = 0;
-	char clkname[MAX_CLK_NAME_LENGTH];
-	int calc_deviation, deviation = (1 << 30) - 1;
-
-	for (cnt = 0; cnt < info->num_clks; cnt++) {
-		/* Keep selected clock if provided */
-		if (ourport->cfg->clk_sel &&
-			!(ourport->cfg->clk_sel & (1 << cnt)))
-			continue;
-
-		sprintf(clkname, "clk_uart_baud%d", cnt);
-		clk = clk_get(ourport->port.dev, clkname);
-		if (IS_ERR(clk))
-			continue;
-
-		rate = clk_get_rate(clk);
-		if (!rate)
-			continue;
-
-		if (ourport->info->has_divslot) {
-			unsigned long div = rate / req_baud;
-
-			/* The UDIVSLOT register on the newer UARTs allows us to
-			 * get a divisor adjustment of 1/16th on the baud clock.
-			 *
-			 * We don't keep the UDIVSLOT value (the 16ths we
-			 * calculated by not multiplying the baud by 16) as it
-			 * is easy enough to recalculate.
-			 */
-
-			quot = div / 16;
-			baud = rate / div;
-		} else {
-			quot = (rate + (8 * req_baud)) / (16 * req_baud);
-			baud = rate / (quot * 16);
-		}
-		quot--;
-
-		calc_deviation = req_baud - baud;
-		if (calc_deviation < 0)
-			calc_deviation = -calc_deviation;
-
-		if (calc_deviation < deviation) {
-			*best_clk = clk;
-			best_quot = quot;
-			*clk_num = cnt;
-			deviation = calc_deviation;
-		}
-	}
-
-	return best_quot;
-}
-
-/* udivslot_table[]
- *
- * This table takes the fractional value of the baud divisor and gives
- * the recommended setting for the UDIVSLOT register.
- */
-static u16 udivslot_table[16] = {
-	[0] = 0x0000,
-	[1] = 0x0080,
-	[2] = 0x0808,
-	[3] = 0x0888,
-	[4] = 0x2222,
-	[5] = 0x4924,
-	[6] = 0x4A52,
-	[7] = 0x54AA,
-	[8] = 0x5555,
-	[9] = 0xD555,
-	[10] = 0xD5D5,
-	[11] = 0xDDD5,
-	[12] = 0xDDDD,
-	[13] = 0xDFDD,
-	[14] = 0xDFDF,
-	[15] = 0xFFDF,
-};
-
-static void s3c24xx_serial_set_termios(struct uart_port *port,
-				       struct ktermios *termios,
-				       struct ktermios *old)
-{
-	struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	struct clk *clk = ERR_PTR(-EINVAL);
-	unsigned long flags;
-	unsigned int baud, quot, clk_sel = 0;
-	unsigned int ulcon;
-	unsigned int umcon;
-	unsigned int udivslot = 0;
-
-	/*
-	 * We don't support modem control lines.
-	 */
-	termios->c_cflag &= ~(HUPCL | CMSPAR);
-	termios->c_cflag |= CLOCAL;
-
-	/*
-	 * Ask the core to calculate the divisor for us.
-	 */
-
-	baud = uart_get_baud_rate(port, termios, old, 0, 3000000);
-	quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
-	if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
-		quot = port->custom_divisor;
-	if (IS_ERR(clk))
-		return;
-
-	/* check to see if we need  to change clock source */
-
-	if (ourport->baudclk != clk) {
-		clk_prepare_enable(clk);
-
-		s3c24xx_serial_setsource(port, clk_sel);
-
-		if (!IS_ERR(ourport->baudclk)) {
-			clk_disable_unprepare(ourport->baudclk);
-			ourport->baudclk = ERR_PTR(-EINVAL);
-		}
-
-		ourport->baudclk = clk;
-		ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
-	}
-
-	if (ourport->info->has_divslot) {
-		unsigned int div = ourport->baudclk_rate / baud;
-
-		if (cfg->has_fracval) {
-			udivslot = (div & 15);
-			dbg("fracval = %04x\n", udivslot);
-		} else {
-			udivslot = udivslot_table[div & 15];
-			dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
-		}
-	}
-
-	switch (termios->c_cflag & CSIZE) {
-	case CS5:
-		dbg("config: 5bits/char\n");
-		ulcon = S3C2410_LCON_CS5;
-		break;
-	case CS6:
-		dbg("config: 6bits/char\n");
-		ulcon = S3C2410_LCON_CS6;
-		break;
-	case CS7:
-		dbg("config: 7bits/char\n");
-		ulcon = S3C2410_LCON_CS7;
-		break;
-	case CS8:
-	default:
-		dbg("config: 8bits/char\n");
-		ulcon = S3C2410_LCON_CS8;
-		break;
-	}
-
-	/* preserve original lcon IR settings */
-	ulcon |= (cfg->ulcon & S3C2410_LCON_IRM);
-
-	if (termios->c_cflag & CSTOPB)
-		ulcon |= S3C2410_LCON_STOPB;
-
-	if (termios->c_cflag & PARENB) {
-		if (termios->c_cflag & PARODD)
-			ulcon |= S3C2410_LCON_PODD;
-		else
-			ulcon |= S3C2410_LCON_PEVEN;
-	} else {
-		ulcon |= S3C2410_LCON_PNONE;
-	}
-
-	spin_lock_irqsave(&port->lock, flags);
-
-	dbg("setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
-	    ulcon, quot, udivslot);
-
-	wr_regl(port, S3C2410_ULCON, ulcon);
-	wr_regl(port, S3C2410_UBRDIV, quot);
-
-	port->status &= ~UPSTAT_AUTOCTS;
-
-	umcon = rd_regl(port, S3C2410_UMCON);
-	if (termios->c_cflag & CRTSCTS) {
-		umcon |= S3C2410_UMCOM_AFC;
-		/* Disable RTS when RX FIFO contains 63 bytes */
-		umcon &= ~S3C2412_UMCON_AFC_8;
-		port->status = UPSTAT_AUTOCTS;
-	} else {
-		umcon &= ~S3C2410_UMCOM_AFC;
-	}
-	wr_regl(port, S3C2410_UMCON, umcon);
-
-	if (ourport->info->has_divslot)
-		wr_regl(port, S3C2443_DIVSLOT, udivslot);
-
-	dbg("uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
-	    rd_regl(port, S3C2410_ULCON),
-	    rd_regl(port, S3C2410_UCON),
-	    rd_regl(port, S3C2410_UFCON));
-
-	/*
-	 * Update the per-port timeout.
-	 */
-	uart_update_timeout(port, termios->c_cflag, baud);
-
-	/*
-	 * Which character status flags are we interested in?
-	 */
-	port->read_status_mask = S3C2410_UERSTAT_OVERRUN;
-	if (termios->c_iflag & INPCK)
-		port->read_status_mask |= S3C2410_UERSTAT_FRAME |
-			S3C2410_UERSTAT_PARITY;
-	/*
-	 * Which character status flags should we ignore?
-	 */
-	port->ignore_status_mask = 0;
-	if (termios->c_iflag & IGNPAR)
-		port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN;
-	if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR)
-		port->ignore_status_mask |= S3C2410_UERSTAT_FRAME;
-
-	/*
-	 * Ignore all characters if CREAD is not set.
-	 */
-	if ((termios->c_cflag & CREAD) == 0)
-		port->ignore_status_mask |= RXSTAT_DUMMY_READ;
-
-	spin_unlock_irqrestore(&port->lock, flags);
-}
-
-static const char *s3c24xx_serial_type(struct uart_port *port)
-{
-	switch (port->type) {
-	case PORT_S3C2410:
-		return "S3C2410";
-	case PORT_S3C2440:
-		return "S3C2440";
-	case PORT_S3C2412:
-		return "S3C2412";
-	case PORT_S3C6400:
-		return "S3C6400/10";
-	default:
-		return NULL;
-	}
-}
-
-#define MAP_SIZE (0x100)
-
-static void s3c24xx_serial_release_port(struct uart_port *port)
-{
-	release_mem_region(port->mapbase, MAP_SIZE);
-}
-
-static int s3c24xx_serial_request_port(struct uart_port *port)
-{
-	const char *name = s3c24xx_serial_portname(port);
-	return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY;
-}
-
-static void s3c24xx_serial_config_port(struct uart_port *port, int flags)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-
-	if (flags & UART_CONFIG_TYPE &&
-	    s3c24xx_serial_request_port(port) == 0)
-		port->type = info->type;
-}
-
-/*
- * verify the new serial_struct (for TIOCSSERIAL).
- */
-static int
-s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-
-	if (ser->type != PORT_UNKNOWN && ser->type != info->type)
-		return -EINVAL;
-
-	return 0;
-}
-
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-
-static struct console s3c24xx_serial_console;
-
-static int __init s3c24xx_serial_console_init(void)
-{
-	register_console(&s3c24xx_serial_console);
-	return 0;
-}
-console_initcall(s3c24xx_serial_console_init);
-
-#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
-#else
-#define S3C24XX_SERIAL_CONSOLE NULL
-#endif
-
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
-static int s3c24xx_serial_get_poll_char(struct uart_port *port);
-static void s3c24xx_serial_put_poll_char(struct uart_port *port,
-			 unsigned char c);
-#endif
-
-static struct uart_ops s3c24xx_serial_ops = {
-	.pm		= s3c24xx_serial_pm,
-	.tx_empty	= s3c24xx_serial_tx_empty,
-	.get_mctrl	= s3c24xx_serial_get_mctrl,
-	.set_mctrl	= s3c24xx_serial_set_mctrl,
-	.stop_tx	= s3c24xx_serial_stop_tx,
-	.start_tx	= s3c24xx_serial_start_tx,
-	.stop_rx	= s3c24xx_serial_stop_rx,
-	.break_ctl	= s3c24xx_serial_break_ctl,
-	.startup	= s3c24xx_serial_startup,
-	.shutdown	= s3c24xx_serial_shutdown,
-	.set_termios	= s3c24xx_serial_set_termios,
-	.type		= s3c24xx_serial_type,
-	.release_port	= s3c24xx_serial_release_port,
-	.request_port	= s3c24xx_serial_request_port,
-	.config_port	= s3c24xx_serial_config_port,
-	.verify_port	= s3c24xx_serial_verify_port,
-#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
-	.poll_get_char = s3c24xx_serial_get_poll_char,
-	.poll_put_char = s3c24xx_serial_put_poll_char,
-#endif
-};
-
-static struct uart_driver s3c24xx_uart_drv = {
-	.owner		= THIS_MODULE,
-	.driver_name	= "s3c2410_serial",
-	.nr		= CONFIG_SERIAL_SAMSUNG_UARTS,
-	.cons		= S3C24XX_SERIAL_CONSOLE,
-	.dev_name	= S3C24XX_SERIAL_NAME,
-	.major		= S3C24XX_SERIAL_MAJOR,
-	.minor		= S3C24XX_SERIAL_MINOR,
-};
-
-#define __PORT_LOCK_UNLOCKED(i) \
-	__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[i].port.lock)
-static struct s3c24xx_uart_port
-s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
-	[0] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(0),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 0,
-		}
-	},
-	[1] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(1),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 1,
-		}
-	},
-#if CONFIG_SERIAL_SAMSUNG_UARTS > 2
-
-	[2] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(2),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 2,
-		}
-	},
-#endif
-#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
-	[3] = {
-		.port = {
-			.lock		= __PORT_LOCK_UNLOCKED(3),
-			.iotype		= UPIO_MEM,
-			.uartclk	= 0,
-			.fifosize	= 16,
-			.ops		= &s3c24xx_serial_ops,
-			.flags		= UPF_BOOT_AUTOCONF,
-			.line		= 3,
-		}
-	}
-#endif
-};
-#undef __PORT_LOCK_UNLOCKED
-
-/* s3c24xx_serial_resetport
- *
- * reset the fifos and other the settings.
-*/
-
-static void s3c24xx_serial_resetport(struct uart_port *port,
-				   struct s3c2410_uartcfg *cfg)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ucon = rd_regl(port, S3C2410_UCON);
-	unsigned int ucon_mask;
-
-	ucon_mask = info->clksel_mask;
-	if (info->type == PORT_S3C2440)
-		ucon_mask |= S3C2440_UCON0_DIVMASK;
-
-	ucon &= ucon_mask;
-	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
-
-	/* reset both fifos */
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
-	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
-
-	/* some delay is required after fifo reset */
-	udelay(1);
-}
-
-
-#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
-
-static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
-					     unsigned long val, void *data)
-{
-	struct s3c24xx_uart_port *port;
-	struct uart_port *uport;
-
-	port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
-	uport = &port->port;
-
-	/* check to see if port is enabled */
-
-	if (port->pm_level != 0)
-		return 0;
-
-	/* try and work out if the baudrate is changing, we can detect
-	 * a change in rate, but we do not have support for detecting
-	 * a disturbance in the clock-rate over the change.
-	 */
-
-	if (IS_ERR(port->baudclk))
-		goto exit;
-
-	if (port->baudclk_rate == clk_get_rate(port->baudclk))
-		goto exit;
-
-	if (val == CPUFREQ_PRECHANGE) {
-		/* we should really shut the port down whilst the
-		 * frequency change is in progress. */
-
-	} else if (val == CPUFREQ_POSTCHANGE) {
-		struct ktermios *termios;
-		struct tty_struct *tty;
-
-		if (uport->state == NULL)
-			goto exit;
-
-		tty = uport->state->port.tty;
-
-		if (tty == NULL)
-			goto exit;
-
-		termios = &tty->termios;
-
-		if (termios == NULL) {
-			dev_warn(uport->dev, "%s: no termios?\n", __func__);
-			goto exit;
-		}
-
-		s3c24xx_serial_set_termios(uport, termios, NULL);
-	}
-
-exit:
-	return 0;
-}
-
-static inline int
-s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
-{
-	port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
-
-	return cpufreq_register_notifier(&port->freq_transition,
-					 CPUFREQ_TRANSITION_NOTIFIER);
-}
-
-static inline void
-s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
-{
-	cpufreq_unregister_notifier(&port->freq_transition,
-				    CPUFREQ_TRANSITION_NOTIFIER);
-}
-
-#else
-static inline int
-s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
-{
-	return 0;
-}
-
-static inline void
-s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
-{
-}
-#endif
-
-static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
-{
-	struct device *dev = ourport->port.dev;
-	struct s3c24xx_uart_info *info = ourport->info;
-	char clk_name[MAX_CLK_NAME_LENGTH];
-	unsigned int clk_sel;
-	struct clk *clk;
-	int clk_num;
-	int ret;
-
-	clk_sel = ourport->cfg->clk_sel ? : info->def_clk_sel;
-	for (clk_num = 0; clk_num < info->num_clks; clk_num++) {
-		if (!(clk_sel & (1 << clk_num)))
-			continue;
-
-		sprintf(clk_name, "clk_uart_baud%d", clk_num);
-		clk = clk_get(dev, clk_name);
-		if (IS_ERR(clk))
-			continue;
-
-		ret = clk_prepare_enable(clk);
-		if (ret) {
-			clk_put(clk);
-			continue;
-		}
-
-		ourport->baudclk = clk;
-		ourport->baudclk_rate = clk_get_rate(clk);
-		s3c24xx_serial_setsource(&ourport->port, clk_num);
-
-		return 0;
-	}
-
-	return -EINVAL;
-}
-
-/* s3c24xx_serial_init_port
- *
- * initialise a single serial port from the platform device given
- */
-
-static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
-				    struct platform_device *platdev)
-{
-	struct uart_port *port = &ourport->port;
-	struct s3c2410_uartcfg *cfg = ourport->cfg;
-	struct resource *res;
-	int ret;
-
-	dbg("s3c24xx_serial_init_port: port=%p, platdev=%p\n", port, platdev);
-
-	if (platdev == NULL)
-		return -ENODEV;
-
-	if (port->mapbase != 0)
-		return -EINVAL;
-
-	/* setup info for port */
-	port->dev	= &platdev->dev;
-
-	/* Startup sequence is different for s3c64xx and higher SoC's */
-	if (s3c24xx_serial_has_interrupt_mask(port))
-		s3c24xx_serial_ops.startup = s3c64xx_serial_startup;
-
-	port->uartclk = 1;
-
-	if (cfg->uart_flags & UPF_CONS_FLOW) {
-		dbg("s3c24xx_serial_init_port: enabling flow control\n");
-		port->flags |= UPF_CONS_FLOW;
-	}
-
-	/* sort our the physical and virtual addresses for each UART */
-
-	res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
-	if (res == NULL) {
-		dev_err(port->dev, "failed to find memory resource for uart\n");
-		return -EINVAL;
-	}
-
-	dbg("resource %pR)\n", res);
-
-	port->membase = devm_ioremap(port->dev, res->start, resource_size(res));
-	if (!port->membase) {
-		dev_err(port->dev, "failed to remap controller address\n");
-		return -EBUSY;
-	}
-
-	port->mapbase = res->start;
-	ret = platform_get_irq(platdev, 0);
-	if (ret < 0)
-		port->irq = 0;
-	else {
-		port->irq = ret;
-		ourport->rx_irq = ret;
-		ourport->tx_irq = ret + 1;
-	}
-
-	if (!s3c24xx_serial_has_interrupt_mask(port)) {
-		ret = platform_get_irq(platdev, 1);
-		if (ret > 0)
-			ourport->tx_irq = ret;
-	}
-	/*
-	 * DMA is currently supported only on DT platforms, if DMA properties
-	 * are specified.
-	 */
-	if (platdev->dev.of_node && of_find_property(platdev->dev.of_node,
-						     "dmas", NULL)) {
-		ourport->dma = devm_kzalloc(port->dev,
-					    sizeof(*ourport->dma),
-					    GFP_KERNEL);
-		if (!ourport->dma) {
-			ret = -ENOMEM;
-			goto err;
-		}
-	}
-
-	ourport->clk	= clk_get(&platdev->dev, "uart");
-	if (IS_ERR(ourport->clk)) {
-		pr_err("%s: Controller clock not found\n",
-				dev_name(&platdev->dev));
-		ret = PTR_ERR(ourport->clk);
-		goto err;
-	}
-
-	ret = clk_prepare_enable(ourport->clk);
-	if (ret) {
-		pr_err("uart: clock failed to prepare+enable: %d\n", ret);
-		clk_put(ourport->clk);
-		goto err;
-	}
-
-	ret = s3c24xx_serial_enable_baudclk(ourport);
-	if (ret)
-		pr_warn("uart: failed to enable baudclk\n");
-
-	/* Keep all interrupts masked and cleared */
-	if (s3c24xx_serial_has_interrupt_mask(port)) {
-		wr_regl(port, S3C64XX_UINTM, 0xf);
-		wr_regl(port, S3C64XX_UINTP, 0xf);
-		wr_regl(port, S3C64XX_UINTSP, 0xf);
-	}
-
-	dbg("port: map=%pa, mem=%p, irq=%d (%d,%d), clock=%u\n",
-	    &port->mapbase, port->membase, port->irq,
-	    ourport->rx_irq, ourport->tx_irq, port->uartclk);
-
-	/* reset the fifos (and setup the uart) */
-	s3c24xx_serial_resetport(port, cfg);
-
-	return 0;
-
-err:
-	port->mapbase = 0;
-	return ret;
-}
-
-/* Device driver serial port probe */
-
-static const struct of_device_id s3c24xx_uart_dt_match[];
-static int probe_index;
-
-static inline struct s3c24xx_serial_drv_data *s3c24xx_get_driver_data(
-			struct platform_device *pdev)
-{
-#ifdef CONFIG_OF
-	if (pdev->dev.of_node) {
-		const struct of_device_id *match;
-		match = of_match_node(s3c24xx_uart_dt_match, pdev->dev.of_node);
-		return (struct s3c24xx_serial_drv_data *)match->data;
-	}
-#endif
-	return (struct s3c24xx_serial_drv_data *)
-			platform_get_device_id(pdev)->driver_data;
-}
-
-static int s3c24xx_serial_probe(struct platform_device *pdev)
-{
-	struct device_node *np = pdev->dev.of_node;
-	struct s3c24xx_uart_port *ourport;
-	int index = probe_index;
-	int ret;
-
-	if (np) {
-		ret = of_alias_get_id(np, "serial");
-		if (ret >= 0)
-			index = ret;
-	}
-
-	dbg("s3c24xx_serial_probe(%p) %d\n", pdev, index);
-
-	if (index >= ARRAY_SIZE(s3c24xx_serial_ports)) {
-		dev_err(&pdev->dev, "serial%d out of range\n", index);
-		return -EINVAL;
-	}
-	ourport = &s3c24xx_serial_ports[index];
-
-	ourport->drv_data = s3c24xx_get_driver_data(pdev);
-	if (!ourport->drv_data) {
-		dev_err(&pdev->dev, "could not find driver data\n");
-		return -ENODEV;
-	}
-
-	ourport->baudclk = ERR_PTR(-EINVAL);
-	ourport->info = ourport->drv_data->info;
-	ourport->cfg = (dev_get_platdata(&pdev->dev)) ?
-			dev_get_platdata(&pdev->dev) :
-			ourport->drv_data->def_cfg;
-
-	if (np)
-		of_property_read_u32(np,
-			"samsung,uart-fifosize", &ourport->port.fifosize);
-
-	if (ourport->drv_data->fifosize[index])
-		ourport->port.fifosize = ourport->drv_data->fifosize[index];
-	else if (ourport->info->fifosize)
-		ourport->port.fifosize = ourport->info->fifosize;
-
-	/*
-	 * DMA transfers must be aligned at least to cache line size,
-	 * so find minimal transfer size suitable for DMA mode
-	 */
-	ourport->min_dma_size = max_t(int, ourport->port.fifosize,
-				    dma_get_cache_alignment());
-
-	dbg("%s: initialising port %p...\n", __func__, ourport);
-
-	ret = s3c24xx_serial_init_port(ourport, pdev);
-	if (ret < 0)
-		return ret;
-
-	if (!s3c24xx_uart_drv.state) {
-		ret = uart_register_driver(&s3c24xx_uart_drv);
-		if (ret < 0) {
-			pr_err("Failed to register Samsung UART driver\n");
-			return ret;
-		}
-	}
-
-	dbg("%s: adding port\n", __func__);
-	uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
-	platform_set_drvdata(pdev, &ourport->port);
-
-	/*
-	 * Deactivate the clock enabled in s3c24xx_serial_init_port here,
-	 * so that a potential re-enablement through the pm-callback overlaps
-	 * and keeps the clock enabled in this case.
-	 */
-	clk_disable_unprepare(ourport->clk);
-	if (!IS_ERR(ourport->baudclk))
-		clk_disable_unprepare(ourport->baudclk);
-
-	ret = s3c24xx_serial_cpufreq_register(ourport);
-	if (ret < 0)
-		dev_err(&pdev->dev, "failed to add cpufreq notifier\n");
-
-	probe_index++;
-
-	return 0;
-}
-
-static int s3c24xx_serial_remove(struct platform_device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
-
-	if (port) {
-		s3c24xx_serial_cpufreq_deregister(to_ourport(port));
-		uart_remove_one_port(&s3c24xx_uart_drv, port);
-	}
-
-	uart_unregister_driver(&s3c24xx_uart_drv);
-
-	return 0;
-}
-
-/* UART power management code */
-#ifdef CONFIG_PM_SLEEP
-static int s3c24xx_serial_suspend(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-
-	if (port)
-		uart_suspend_port(&s3c24xx_uart_drv, port);
-
-	return 0;
-}
-
-static int s3c24xx_serial_resume(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (port) {
-		clk_prepare_enable(ourport->clk);
-		if (!IS_ERR(ourport->baudclk))
-			clk_prepare_enable(ourport->baudclk);
-		s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
-		if (!IS_ERR(ourport->baudclk))
-			clk_disable_unprepare(ourport->baudclk);
-		clk_disable_unprepare(ourport->clk);
-
-		uart_resume_port(&s3c24xx_uart_drv, port);
-	}
-
-	return 0;
-}
-
-static int s3c24xx_serial_resume_noirq(struct device *dev)
-{
-	struct uart_port *port = s3c24xx_dev_to_port(dev);
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-
-	if (port) {
-		/* restore IRQ mask */
-		if (s3c24xx_serial_has_interrupt_mask(port)) {
-			unsigned int uintm = 0xf;
-			if (tx_enabled(port))
-				uintm &= ~S3C64XX_UINTM_TXD_MSK;
-			if (rx_enabled(port))
-				uintm &= ~S3C64XX_UINTM_RXD_MSK;
-			clk_prepare_enable(ourport->clk);
-			if (!IS_ERR(ourport->baudclk))
-				clk_prepare_enable(ourport->baudclk);
-			wr_regl(port, S3C64XX_UINTM, uintm);
-			if (!IS_ERR(ourport->baudclk))
-				clk_disable_unprepare(ourport->baudclk);
-			clk_disable_unprepare(ourport->clk);
-		}
-	}
-
-	return 0;
-}
-
-static const struct dev_pm_ops s3c24xx_serial_pm_ops = {
-	.suspend = s3c24xx_serial_suspend,
-	.resume = s3c24xx_serial_resume,
-	.resume_noirq = s3c24xx_serial_resume_noirq,
-};
-#define SERIAL_SAMSUNG_PM_OPS	(&s3c24xx_serial_pm_ops)
-
-#else /* !CONFIG_PM_SLEEP */
-
-#define SERIAL_SAMSUNG_PM_OPS	NULL
-#endif /* CONFIG_PM_SLEEP */
-
-/* Console code */
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-
-static struct uart_port *cons_uart;
-
-static int
-s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
-{
-	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
-	unsigned long ufstat, utrstat;
-
-	if (ufcon & S3C2410_UFCON_FIFOMODE) {
-		/* fifo mode - check amount of data in fifo registers... */
-
-		ufstat = rd_regl(port, S3C2410_UFSTAT);
-		return (ufstat & info->tx_fifofull) ? 0 : 1;
-	}
-
-	/* in non-fifo mode, we go and use the tx buffer empty */
-
-	utrstat = rd_regl(port, S3C2410_UTRSTAT);
-	return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0;
-}
-
-static bool
-s3c24xx_port_configured(unsigned int ucon)
-{
-	/* consider the serial port configured if the tx/rx mode set */
-	return (ucon & 0xf) != 0;
-}
-
-#ifdef CONFIG_CONSOLE_POLL
-/*
- * Console polling routines for writing and reading from the uart while
- * in an interrupt or debug context.
- */
-
-static int s3c24xx_serial_get_poll_char(struct uart_port *port)
-{
-	struct s3c24xx_uart_port *ourport = to_ourport(port);
-	unsigned int ufstat;
-
-	ufstat = rd_regl(port, S3C2410_UFSTAT);
-	if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)
-		return NO_POLL_CHAR;
-
-	return rd_regb(port, S3C2410_URXH);
-}
-
-static void s3c24xx_serial_put_poll_char(struct uart_port *port,
-		unsigned char c)
-{
-	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
-	unsigned int ucon = rd_regl(port, S3C2410_UCON);
-
-	/* not possible to xmit on unconfigured port */
-	if (!s3c24xx_port_configured(ucon))
-		return;
-
-	while (!s3c24xx_serial_console_txrdy(port, ufcon))
-		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, c);
-}
-
-#endif /* CONFIG_CONSOLE_POLL */
-
-static void
-s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
-{
-	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
-
-	while (!s3c24xx_serial_console_txrdy(port, ufcon))
-		cpu_relax();
-	wr_regb(port, S3C2410_UTXH, ch);
-}
-
-static void
-s3c24xx_serial_console_write(struct console *co, const char *s,
-			     unsigned int count)
-{
-	unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON);
-
-	/* not possible to xmit on unconfigured port */
-	if (!s3c24xx_port_configured(ucon))
-		return;
-
-	uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar);
-}
-
-static void __init
-s3c24xx_serial_get_options(struct uart_port *port, int *baud,
-			   int *parity, int *bits)
-{
-	struct clk *clk;
-	unsigned int ulcon;
-	unsigned int ucon;
-	unsigned int ubrdiv;
-	unsigned long rate;
-	unsigned int clk_sel;
-	char clk_name[MAX_CLK_NAME_LENGTH];
-
-	ulcon  = rd_regl(port, S3C2410_ULCON);
-	ucon   = rd_regl(port, S3C2410_UCON);
-	ubrdiv = rd_regl(port, S3C2410_UBRDIV);
-
-	dbg("s3c24xx_serial_get_options: port=%p\n"
-	    "registers: ulcon=%08x, ucon=%08x, ubdriv=%08x\n",
-	    port, ulcon, ucon, ubrdiv);
-
-	if (s3c24xx_port_configured(ucon)) {
-		switch (ulcon & S3C2410_LCON_CSMASK) {
-		case S3C2410_LCON_CS5:
-			*bits = 5;
-			break;
-		case S3C2410_LCON_CS6:
-			*bits = 6;
-			break;
-		case S3C2410_LCON_CS7:
-			*bits = 7;
-			break;
-		case S3C2410_LCON_CS8:
-		default:
-			*bits = 8;
-			break;
-		}
-
-		switch (ulcon & S3C2410_LCON_PMASK) {
-		case S3C2410_LCON_PEVEN:
-			*parity = 'e';
-			break;
-
-		case S3C2410_LCON_PODD:
-			*parity = 'o';
-			break;
-
-		case S3C2410_LCON_PNONE:
-		default:
-			*parity = 'n';
-		}
-
-		/* now calculate the baud rate */
-
-		clk_sel = s3c24xx_serial_getsource(port);
-		sprintf(clk_name, "clk_uart_baud%d", clk_sel);
-
-		clk = clk_get(port->dev, clk_name);
-		if (!IS_ERR(clk))
-			rate = clk_get_rate(clk);
-		else
-			rate = 1;
-
-		*baud = rate / (16 * (ubrdiv + 1));
-		dbg("calculated baud %d\n", *baud);
-	}
-
-}
-
-static int __init
-s3c24xx_serial_console_setup(struct console *co, char *options)
-{
-	struct uart_port *port;
-	int baud = 9600;
-	int bits = 8;
-	int parity = 'n';
-	int flow = 'n';
-
-	dbg("s3c24xx_serial_console_setup: co=%p (%d), %s\n",
-	    co, co->index, options);
-
-	/* is this a valid port */
-
-	if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
-		co->index = 0;
-
-	port = &s3c24xx_serial_ports[co->index].port;
-
-	/* is the port configured? */
-
-	if (port->mapbase == 0x0)
-		return -ENODEV;
-
-	cons_uart = port;
-
-	dbg("s3c24xx_serial_console_setup: port=%p (%d)\n", port, co->index);
-
-	/*
-	 * Check whether an invalid uart number has been specified, and
-	 * if so, search for the first available port that does have
-	 * console support.
-	 */
-	if (options)
-		uart_parse_options(options, &baud, &parity, &bits, &flow);
-	else
-		s3c24xx_serial_get_options(port, &baud, &parity, &bits);
-
-	dbg("s3c24xx_serial_console_setup: baud %d\n", baud);
-
-	return uart_set_options(port, co, baud, parity, bits, flow);
-}
-
-static struct console s3c24xx_serial_console = {
-	.name		= S3C24XX_SERIAL_NAME,
-	.device		= uart_console_device,
-	.flags		= CON_PRINTBUFFER,
-	.index		= -1,
-	.write		= s3c24xx_serial_console_write,
-	.setup		= s3c24xx_serial_console_setup,
-	.data		= &s3c24xx_uart_drv,
-};
-#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
-
-#ifdef CONFIG_CPU_S3C2410
-static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2410 UART",
-		.type		= PORT_S3C2410,
-		.fifosize	= 16,
-		.rx_fifomask	= S3C2410_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2410_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2410_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2410_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2410_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2410_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
-		.num_clks	= 2,
-		.clksel_mask	= S3C2410_UCON_CLKMASK,
-		.clksel_shift	= S3C2410_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2410_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2410_serial_drv_data)
-#else
-#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#ifdef CONFIG_CPU_S3C2412
-static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2412 UART",
-		.type		= PORT_S3C2412,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C2412_UCON_CLKMASK,
-		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2412_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2412_serial_drv_data)
-#else
-#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \
-	defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442)
-static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C2440 UART",
-		.type		= PORT_S3C2440,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C2412_UCON_CLKMASK,
-		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C2440_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2440_serial_drv_data)
-#else
-#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
-static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S3C6400 UART",
-		.type		= PORT_S3C6400,
-		.fifosize	= 64,
-		.has_divslot	= 1,
-		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
-		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
-		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
-		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
-		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
-		.num_clks	= 4,
-		.clksel_mask	= S3C6400_UCON_CLKMASK,
-		.clksel_shift	= S3C6400_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S3C2410_UCON_DEFAULT,
-		.ufcon		= S3C2410_UFCON_DEFAULT,
-	},
-};
-#define S3C6400_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c6400_serial_drv_data)
-#else
-#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-#ifdef CONFIG_CPU_S5PV210
-static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
-	.info = &(struct s3c24xx_uart_info) {
-		.name		= "Samsung S5PV210 UART",
-		.type		= PORT_S3C6400,
-		.has_divslot	= 1,
-		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,
-		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,
-		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,
-		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,
-		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,
-		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
-		.num_clks	= 2,
-		.clksel_mask	= S5PV210_UCON_CLKMASK,
-		.clksel_shift	= S5PV210_UCON_CLKSHIFT,
-	},
-	.def_cfg = &(struct s3c2410_uartcfg) {
-		.ucon		= S5PV210_UCON_DEFAULT,
-		.ufcon		= S5PV210_UFCON_DEFAULT,
-	},
-	.fifosize = { 256, 64, 16, 16 },
-};
-#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data)
-#else
-#define S5PV210_SERIAL_DRV_DATA	(kernel_ulong_t)NULL
-#endif
-
-#if defined(CONFIG_ARCH_EXYNOS)
-#define EXYNOS_COMMON_SERIAL_DRV_DATA				\
-	.info = &(struct s3c24xx_uart_info) {			\
-		.name		= "Samsung Exynos UART",	\
-		.type		= PORT_S3C6400,			\
-		.has_divslot	= 1,				\
-		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,	\
-		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,	\
-		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,	\
-		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,	\
-		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,	\
-		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,	\
-		.def_clk_sel	= S3C2410_UCON_CLKSEL0,		\
-		.num_clks	= 1,				\
-		.clksel_mask	= 0,				\
-		.clksel_shift	= 0,				\
-	},							\
-	.def_cfg = &(struct s3c2410_uartcfg) {			\
-		.ucon		= S5PV210_UCON_DEFAULT,		\
-		.ufcon		= S5PV210_UFCON_DEFAULT,	\
-		.has_fracval	= 1,				\
-	}							\
-
-static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
-	EXYNOS_COMMON_SERIAL_DRV_DATA,
-	.fifosize = { 256, 64, 16, 16 },
-};
-
-static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = {
-	EXYNOS_COMMON_SERIAL_DRV_DATA,
-	.fifosize = { 64, 256, 16, 256 },
-};
-
-#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data)
-#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data)
-#else
-#define EXYNOS4210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL
-#endif
-
-static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
-	{
-		.name		= "s3c2410-uart",
-		.driver_data	= S3C2410_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c2412-uart",
-		.driver_data	= S3C2412_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c2440-uart",
-		.driver_data	= S3C2440_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s3c6400-uart",
-		.driver_data	= S3C6400_SERIAL_DRV_DATA,
-	}, {
-		.name		= "s5pv210-uart",
-		.driver_data	= S5PV210_SERIAL_DRV_DATA,
-	}, {
-		.name		= "exynos4210-uart",
-		.driver_data	= EXYNOS4210_SERIAL_DRV_DATA,
-	}, {
-		.name		= "exynos5433-uart",
-		.driver_data	= EXYNOS5433_SERIAL_DRV_DATA,
-	},
-	{ },
-};
-MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids);
-
-#ifdef CONFIG_OF
-static const struct of_device_id s3c24xx_uart_dt_match[] = {
-	{ .compatible = "samsung,s3c2410-uart",
-		.data = (void *)S3C2410_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c2412-uart",
-		.data = (void *)S3C2412_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c2440-uart",
-		.data = (void *)S3C2440_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s3c6400-uart",
-		.data = (void *)S3C6400_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,s5pv210-uart",
-		.data = (void *)S5PV210_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,exynos4210-uart",
-		.data = (void *)EXYNOS4210_SERIAL_DRV_DATA },
-	{ .compatible = "samsung,exynos5433-uart",
-		.data = (void *)EXYNOS5433_SERIAL_DRV_DATA },
-	{},
-};
-MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
-#endif
-
-static struct platform_driver samsung_serial_driver = {
-	.probe		= s3c24xx_serial_probe,
-	.remove		= s3c24xx_serial_remove,
-	.id_table	= s3c24xx_serial_driver_ids,
-	.driver		= {
-		.name	= "samsung-uart",
-		.pm	= SERIAL_SAMSUNG_PM_OPS,
-		.of_match_table	= of_match_ptr(s3c24xx_uart_dt_match),
-	},
-};
-
-module_platform_driver(samsung_serial_driver);
-
-#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
-/*
- * Early console.
- */
-
-struct samsung_early_console_data {
-	u32 txfull_mask;
-};
-
-static void samsung_early_busyuart(struct uart_port *port)
-{
-	while (!(readl(port->membase + S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXFE))
-		;
-}
-
-static void samsung_early_busyuart_fifo(struct uart_port *port)
-{
-	struct samsung_early_console_data *data = port->private_data;
-
-	while (readl(port->membase + S3C2410_UFSTAT) & data->txfull_mask)
-		;
-}
-
-static void samsung_early_putc(struct uart_port *port, int c)
-{
-	if (readl(port->membase + S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE)
-		samsung_early_busyuart_fifo(port);
-	else
-		samsung_early_busyuart(port);
-
-	writeb(c, port->membase + S3C2410_UTXH);
-}
-
-static void samsung_early_write(struct console *con, const char *s, unsigned n)
-{
-	struct earlycon_device *dev = con->data;
-
-	uart_console_write(&dev->port, s, n, samsung_early_putc);
-}
-
-static int __init samsung_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	if (!device->port.membase)
-		return -ENODEV;
-
-	device->con->write = samsung_early_write;
-	return 0;
-}
-
-/* S3C2410 */
-static struct samsung_early_console_data s3c2410_early_console_data = {
-	.txfull_mask = S3C2410_UFSTAT_TXFULL,
-};
-
-static int __init s3c2410_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s3c2410_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s3c2410, "samsung,s3c2410-uart",
-			s3c2410_early_console_setup);
-
-/* S3C2412, S3C2440, S3C64xx */
-static struct samsung_early_console_data s3c2440_early_console_data = {
-	.txfull_mask = S3C2440_UFSTAT_TXFULL,
-};
-
-static int __init s3c2440_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s3c2440_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s3c2412, "samsung,s3c2412-uart",
-			s3c2440_early_console_setup);
-OF_EARLYCON_DECLARE(s3c2440, "samsung,s3c2440-uart",
-			s3c2440_early_console_setup);
-OF_EARLYCON_DECLARE(s3c6400, "samsung,s3c6400-uart",
-			s3c2440_early_console_setup);
-
-/* S5PV210, EXYNOS */
-static struct samsung_early_console_data s5pv210_early_console_data = {
-	.txfull_mask = S5PV210_UFSTAT_TXFULL,
-};
-
-static int __init s5pv210_early_console_setup(struct earlycon_device *device,
-					      const char *opt)
-{
-	device->port.private_data = &s5pv210_early_console_data;
-	return samsung_early_console_setup(device, opt);
-}
-OF_EARLYCON_DECLARE(s5pv210, "samsung,s5pv210-uart",
-			s5pv210_early_console_setup);
-OF_EARLYCON_DECLARE(exynos4210, "samsung,exynos4210-uart",
-			s5pv210_early_console_setup);
-#endif
-
-MODULE_ALIAS("platform:samsung-uart");
-MODULE_DESCRIPTION("Samsung SoC Serial port driver");
-MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
-MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/samsung.h b/drivers/tty/serial/samsung.h
deleted file mode 100644
index f930221..0000000
--- a/drivers/tty/serial/samsung.h
+++ /dev/null
@@ -1,147 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-#ifndef __SAMSUNG_H
-#define __SAMSUNG_H
-
-/*
- * Driver for Samsung SoC onboard UARTs.
- *
- * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
- *	http://armlinux.simtec.co.uk/
-*/
-
-#include <linux/dmaengine.h>
-
-struct s3c24xx_uart_info {
-	char			*name;
-	unsigned int		type;
-	unsigned int		fifosize;
-	unsigned long		rx_fifomask;
-	unsigned long		rx_fifoshift;
-	unsigned long		rx_fifofull;
-	unsigned long		tx_fifomask;
-	unsigned long		tx_fifoshift;
-	unsigned long		tx_fifofull;
-	unsigned int		def_clk_sel;
-	unsigned long		num_clks;
-	unsigned long		clksel_mask;
-	unsigned long		clksel_shift;
-
-	/* uart port features */
-
-	unsigned int		has_divslot:1;
-
-	/* uart controls */
-	int (*reset_port)(struct uart_port *, struct s3c2410_uartcfg *);
-};
-
-struct s3c24xx_serial_drv_data {
-	struct s3c24xx_uart_info	*info;
-	struct s3c2410_uartcfg		*def_cfg;
-	unsigned int			fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
-};
-
-struct s3c24xx_uart_dma {
-	unsigned int			rx_chan_id;
-	unsigned int			tx_chan_id;
-
-	struct dma_slave_config		rx_conf;
-	struct dma_slave_config		tx_conf;
-
-	struct dma_chan			*rx_chan;
-	struct dma_chan			*tx_chan;
-
-	dma_addr_t			rx_addr;
-	dma_addr_t			tx_addr;
-
-	dma_cookie_t			rx_cookie;
-	dma_cookie_t			tx_cookie;
-
-	char				*rx_buf;
-
-	dma_addr_t			tx_transfer_addr;
-
-	size_t				rx_size;
-	size_t				tx_size;
-
-	struct dma_async_tx_descriptor	*tx_desc;
-	struct dma_async_tx_descriptor	*rx_desc;
-
-	int				tx_bytes_requested;
-	int				rx_bytes_requested;
-};
-
-struct s3c24xx_uart_port {
-	unsigned char			rx_claimed;
-	unsigned char			tx_claimed;
-	unsigned int			pm_level;
-	unsigned long			baudclk_rate;
-	unsigned int			min_dma_size;
-
-	unsigned int			rx_irq;
-	unsigned int			tx_irq;
-
-	unsigned int			tx_in_progress;
-	unsigned int			tx_mode;
-	unsigned int			rx_mode;
-
-	struct s3c24xx_uart_info	*info;
-	struct clk			*clk;
-	struct clk			*baudclk;
-	struct uart_port		port;
-	struct s3c24xx_serial_drv_data	*drv_data;
-
-	/* reference to platform data */
-	struct s3c2410_uartcfg		*cfg;
-
-	struct s3c24xx_uart_dma		*dma;
-
-#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
-	struct notifier_block		freq_transition;
-#endif
-};
-
-/* conversion functions */
-
-#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
-
-/* register access controls */
-
-#define portaddr(port, reg) ((port)->membase + (reg))
-#define portaddrl(port, reg) \
-	((unsigned long *)(unsigned long)((port)->membase + (reg)))
-
-#define rd_regb(port, reg) (readb_relaxed(portaddr(port, reg)))
-#define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg)))
-
-#define wr_regb(port, reg, val) writeb_relaxed(val, portaddr(port, reg))
-#define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
-
-/* Byte-order aware bit setting/clearing functions. */
-
-static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
-				   unsigned int reg)
-{
-	unsigned long flags;
-	u32 val;
-
-	local_irq_save(flags);
-	val = rd_regl(port, reg);
-	val |= (1 << idx);
-	wr_regl(port, reg, val);
-	local_irq_restore(flags);
-}
-
-static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
-				     unsigned int reg)
-{
-	unsigned long flags;
-	u32 val;
-
-	local_irq_save(flags);
-	val = rd_regl(port, reg);
-	val &= ~(1 << idx);
-	wr_regl(port, reg, val);
-	local_irq_restore(flags);
-}
-
-#endif
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c
new file mode 100644
index 0000000..896b573
--- /dev/null
+++ b/drivers/tty/serial/samsung_tty.c
@@ -0,0 +1,2745 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Driver core for Samsung SoC onboard UARTs.
+ *
+ * Ben Dooks, Copyright (c) 2003-2008 Simtec Electronics
+ *	http://armlinux.simtec.co.uk/
+ */
+
+/* Hote on 2410 error handling
+ *
+ * The s3c2410 manual has a love/hate affair with the contents of the
+ * UERSTAT register in the UART blocks, and keeps marking some of the
+ * error bits as reserved. Having checked with the s3c2410x01,
+ * it copes with BREAKs properly, so I am happy to ignore the RESERVED
+ * feature from the latter versions of the manual.
+ *
+ * If it becomes aparrent that latter versions of the 2410 remove these
+ * bits, then action will have to be taken to differentiate the versions
+ * and change the policy on BREAK
+ *
+ * BJD, 04-Nov-2004
+ */
+
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
+#define SUPPORT_SYSRQ
+#endif
+
+#include <linux/dmaengine.h>
+#include <linux/dma-mapping.h>
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/ioport.h>
+#include <linux/io.h>
+#include <linux/platform_device.h>
+#include <linux/init.h>
+#include <linux/sysrq.h>
+#include <linux/console.h>
+#include <linux/tty.h>
+#include <linux/tty_flip.h>
+#include <linux/serial_core.h>
+#include <linux/serial.h>
+#include <linux/serial_s3c.h>
+#include <linux/delay.h>
+#include <linux/clk.h>
+#include <linux/cpufreq.h>
+#include <linux/of.h>
+#include <asm/irq.h>
+
+/* UART name and device definitions */
+
+#define S3C24XX_SERIAL_NAME	"ttySAC"
+#define S3C24XX_SERIAL_MAJOR	204
+#define S3C24XX_SERIAL_MINOR	64
+
+#define S3C24XX_TX_PIO			1
+#define S3C24XX_TX_DMA			2
+#define S3C24XX_RX_PIO			1
+#define S3C24XX_RX_DMA			2
+
+/* flag to ignore all characters coming in */
+#define RXSTAT_DUMMY_READ (0x10000000)
+
+struct s3c24xx_uart_info {
+	char			*name;
+	unsigned int		type;
+	unsigned int		fifosize;
+	unsigned long		rx_fifomask;
+	unsigned long		rx_fifoshift;
+	unsigned long		rx_fifofull;
+	unsigned long		tx_fifomask;
+	unsigned long		tx_fifoshift;
+	unsigned long		tx_fifofull;
+	unsigned int		def_clk_sel;
+	unsigned long		num_clks;
+	unsigned long		clksel_mask;
+	unsigned long		clksel_shift;
+
+	/* uart port features */
+
+	unsigned int		has_divslot:1;
+};
+
+struct s3c24xx_serial_drv_data {
+	struct s3c24xx_uart_info	*info;
+	struct s3c2410_uartcfg		*def_cfg;
+	unsigned int			fifosize[CONFIG_SERIAL_SAMSUNG_UARTS];
+};
+
+struct s3c24xx_uart_dma {
+	unsigned int			rx_chan_id;
+	unsigned int			tx_chan_id;
+
+	struct dma_slave_config		rx_conf;
+	struct dma_slave_config		tx_conf;
+
+	struct dma_chan			*rx_chan;
+	struct dma_chan			*tx_chan;
+
+	dma_addr_t			rx_addr;
+	dma_addr_t			tx_addr;
+
+	dma_cookie_t			rx_cookie;
+	dma_cookie_t			tx_cookie;
+
+	char				*rx_buf;
+
+	dma_addr_t			tx_transfer_addr;
+
+	size_t				rx_size;
+	size_t				tx_size;
+
+	struct dma_async_tx_descriptor	*tx_desc;
+	struct dma_async_tx_descriptor	*rx_desc;
+
+	int				tx_bytes_requested;
+	int				rx_bytes_requested;
+};
+
+struct s3c24xx_uart_port {
+	unsigned char			rx_claimed;
+	unsigned char			tx_claimed;
+	unsigned char			rx_enabled;
+	unsigned char			tx_enabled;
+	unsigned int			pm_level;
+	unsigned long			baudclk_rate;
+	unsigned int			min_dma_size;
+
+	unsigned int			rx_irq;
+	unsigned int			tx_irq;
+
+	unsigned int			tx_in_progress;
+	unsigned int			tx_mode;
+	unsigned int			rx_mode;
+
+	struct s3c24xx_uart_info	*info;
+	struct clk			*clk;
+	struct clk			*baudclk;
+	struct uart_port		port;
+	struct s3c24xx_serial_drv_data	*drv_data;
+
+	/* reference to platform data */
+	struct s3c2410_uartcfg		*cfg;
+
+	struct s3c24xx_uart_dma		*dma;
+
+#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
+	struct notifier_block		freq_transition;
+#endif
+};
+
+/* conversion functions */
+
+#define s3c24xx_dev_to_port(__dev) dev_get_drvdata(__dev)
+
+/* register access controls */
+
+#define portaddr(port, reg) ((port)->membase + (reg))
+#define portaddrl(port, reg) \
+	((unsigned long *)(unsigned long)((port)->membase + (reg)))
+
+static u32 rd_reg(struct uart_port *port, u32 reg)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		return readb_relaxed(portaddr(port, reg));
+	case UPIO_MEM32:
+		return readl_relaxed(portaddr(port, reg));
+	default:
+		return 0;
+	}
+	return 0;
+}
+
+#define rd_regl(port, reg) (readl_relaxed(portaddr(port, reg)))
+
+static void wr_reg(struct uart_port *port, u32 reg, u32 val)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		writeb_relaxed(val, portaddr(port, reg));
+		break;
+	case UPIO_MEM32:
+		writel_relaxed(val, portaddr(port, reg));
+		break;
+	}
+}
+
+#define wr_regl(port, reg, val) writel_relaxed(val, portaddr(port, reg))
+
+/* Byte-order aware bit setting/clearing functions. */
+
+static inline void s3c24xx_set_bit(struct uart_port *port, int idx,
+				   unsigned int reg)
+{
+	unsigned long flags;
+	u32 val;
+
+	local_irq_save(flags);
+	val = rd_regl(port, reg);
+	val |= (1 << idx);
+	wr_regl(port, reg, val);
+	local_irq_restore(flags);
+}
+
+static inline void s3c24xx_clear_bit(struct uart_port *port, int idx,
+				     unsigned int reg)
+{
+	unsigned long flags;
+	u32 val;
+
+	local_irq_save(flags);
+	val = rd_regl(port, reg);
+	val &= ~(1 << idx);
+	wr_regl(port, reg, val);
+	local_irq_restore(flags);
+}
+
+static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port)
+{
+	return container_of(port, struct s3c24xx_uart_port, port);
+}
+
+/* translate a port to the device name */
+
+static inline const char *s3c24xx_serial_portname(struct uart_port *port)
+{
+	return to_platform_device(port->dev)->name;
+}
+
+static int s3c24xx_serial_txempty_nofifo(struct uart_port *port)
+{
+	return rd_regl(port, S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXE;
+}
+
+/*
+ * s3c64xx and later SoC's include the interrupt mask and status registers in
+ * the controller itself, unlike the s3c24xx SoC's which have these registers
+ * in the interrupt controller. Check if the port type is s3c64xx or higher.
+ */
+static int s3c24xx_serial_has_interrupt_mask(struct uart_port *port)
+{
+	return to_ourport(port)->info->type == PORT_S3C6400;
+}
+
+static void s3c24xx_serial_rx_enable(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ucon, ufcon;
+	int count = 10000;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	while (--count && !s3c24xx_serial_txempty_nofifo(port))
+		udelay(100);
+
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	ufcon |= S3C2410_UFCON_RESETRX;
+	wr_regl(port, S3C2410_UFCON, ufcon);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon |= S3C2410_UCON_RXIRQMODE;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_enabled = 1;
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c24xx_serial_rx_disable(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ucon;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~S3C2410_UCON_RXIRQMODE;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_enabled = 0;
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c24xx_serial_stop_tx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct dma_tx_state state;
+	int count;
+
+	if (!ourport->tx_enabled)
+		return;
+
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
+	else
+		disable_irq_nosync(ourport->tx_irq);
+
+	if (dma && dma->tx_chan && ourport->tx_in_progress == S3C24XX_TX_DMA) {
+		dmaengine_pause(dma->tx_chan);
+		dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
+		dmaengine_terminate_all(dma->tx_chan);
+		dma_sync_single_for_cpu(ourport->port.dev,
+			dma->tx_transfer_addr, dma->tx_size, DMA_TO_DEVICE);
+		async_tx_ack(dma->tx_desc);
+		count = dma->tx_bytes_requested - state.residue;
+		xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
+		port->icount.tx += count;
+	}
+
+	ourport->tx_enabled = 0;
+	ourport->tx_in_progress = 0;
+
+	if (port->flags & UPF_CONS_FLOW)
+		s3c24xx_serial_rx_enable(port);
+
+	ourport->tx_mode = 0;
+}
+
+static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport);
+
+static void s3c24xx_serial_tx_dma_complete(void *args)
+{
+	struct s3c24xx_uart_port *ourport = args;
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct dma_tx_state state;
+	unsigned long flags;
+	int count;
+
+
+	dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
+	count = dma->tx_bytes_requested - state.residue;
+	async_tx_ack(dma->tx_desc);
+
+	dma_sync_single_for_cpu(ourport->port.dev, dma->tx_transfer_addr,
+				dma->tx_size, DMA_TO_DEVICE);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
+	port->icount.tx += count;
+	ourport->tx_in_progress = 0;
+
+	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
+		uart_write_wakeup(port);
+
+	s3c24xx_serial_start_next_tx(ourport);
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	u32 ucon;
+
+	/* Mask Tx interrupt */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
+	else
+		disable_irq_nosync(ourport->tx_irq);
+
+	/* Enable tx dma mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
+	ucon |= (dma_get_cache_alignment() >= 16) ?
+		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
+	ucon |= S3C64XX_UCON_TXMODE_DMA;
+	wr_regl(port,  S3C2410_UCON, ucon);
+
+	ourport->tx_mode = S3C24XX_TX_DMA;
+}
+
+static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	u32 ucon, ufcon;
+
+	/* Set ufcon txtrig */
+	ourport->tx_in_progress = S3C24XX_TX_PIO;
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	wr_regl(port,  S3C2410_UFCON, ufcon);
+
+	/* Enable tx pio mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TXMODE_MASK);
+	ucon |= S3C64XX_UCON_TXMODE_CPU;
+	wr_regl(port,  S3C2410_UCON, ucon);
+
+	/* Unmask Tx interrupt */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
+				  S3C64XX_UINTM);
+	else
+		enable_irq(ourport->tx_irq);
+
+	ourport->tx_mode = S3C24XX_TX_PIO;
+}
+
+static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
+{
+	if (ourport->tx_mode != S3C24XX_TX_PIO)
+		enable_tx_pio(ourport);
+}
+
+static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
+				      unsigned int count)
+{
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+
+
+	if (ourport->tx_mode != S3C24XX_TX_DMA)
+		enable_tx_dma(ourport);
+
+	dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
+	dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
+
+	dma_sync_single_for_device(ourport->port.dev, dma->tx_transfer_addr,
+				dma->tx_size, DMA_TO_DEVICE);
+
+	dma->tx_desc = dmaengine_prep_slave_single(dma->tx_chan,
+				dma->tx_transfer_addr, dma->tx_size,
+				DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
+	if (!dma->tx_desc) {
+		dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
+		return -EIO;
+	}
+
+	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
+	dma->tx_desc->callback_param = ourport;
+	dma->tx_bytes_requested = dma->tx_size;
+
+	ourport->tx_in_progress = S3C24XX_TX_DMA;
+	dma->tx_cookie = dmaengine_submit(dma->tx_desc);
+	dma_async_issue_pending(dma->tx_chan);
+	return 0;
+}
+
+static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	unsigned long count;
+
+	/* Get data size up to the end of buffer */
+	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
+
+	if (!count) {
+		s3c24xx_serial_stop_tx(port);
+		return;
+	}
+
+	if (!ourport->dma || !ourport->dma->tx_chan ||
+	    count < ourport->min_dma_size ||
+	    xmit->tail & (dma_get_cache_alignment() - 1))
+		s3c24xx_serial_start_tx_pio(ourport);
+	else
+		s3c24xx_serial_start_tx_dma(ourport, count);
+}
+
+static void s3c24xx_serial_start_tx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct circ_buf *xmit = &port->state->xmit;
+
+	if (!ourport->tx_enabled) {
+		if (port->flags & UPF_CONS_FLOW)
+			s3c24xx_serial_rx_disable(port);
+
+		ourport->tx_enabled = 1;
+		if (!ourport->dma || !ourport->dma->tx_chan)
+			s3c24xx_serial_start_tx_pio(ourport);
+	}
+
+	if (ourport->dma && ourport->dma->tx_chan) {
+		if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
+			s3c24xx_serial_start_next_tx(ourport);
+	}
+}
+
+static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
+		struct tty_port *tty, int count)
+{
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	int copied;
+
+	if (!count)
+		return;
+
+	dma_sync_single_for_cpu(ourport->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+
+	ourport->port.icount.rx += count;
+	if (!tty) {
+		dev_err(ourport->port.dev, "No tty port\n");
+		return;
+	}
+	copied = tty_insert_flip_string(tty,
+			((unsigned char *)(ourport->dma->rx_buf)), count);
+	if (copied != count) {
+		WARN_ON(1);
+		dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
+	}
+}
+
+static void s3c24xx_serial_stop_rx(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_port *t = &port->state->port;
+	struct dma_tx_state state;
+	enum dma_status dma_status;
+	unsigned int received;
+
+	if (ourport->rx_enabled) {
+		dev_dbg(port->dev, "stopping rx\n");
+		if (s3c24xx_serial_has_interrupt_mask(port))
+			s3c24xx_set_bit(port, S3C64XX_UINTM_RXD,
+					S3C64XX_UINTM);
+		else
+			disable_irq_nosync(ourport->rx_irq);
+		ourport->rx_enabled = 0;
+	}
+	if (dma && dma->rx_chan) {
+		dmaengine_pause(dma->tx_chan);
+		dma_status = dmaengine_tx_status(dma->rx_chan,
+				dma->rx_cookie, &state);
+		if (dma_status == DMA_IN_PROGRESS ||
+			dma_status == DMA_PAUSED) {
+			received = dma->rx_bytes_requested - state.residue;
+			dmaengine_terminate_all(dma->rx_chan);
+			s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+		}
+	}
+}
+
+static inline struct s3c24xx_uart_info
+	*s3c24xx_port_to_info(struct uart_port *port)
+{
+	return to_ourport(port)->info;
+}
+
+static inline struct s3c2410_uartcfg
+	*s3c24xx_port_to_cfg(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport;
+
+	if (port->dev == NULL)
+		return NULL;
+
+	ourport = container_of(port, struct s3c24xx_uart_port, port);
+	return ourport->cfg;
+}
+
+static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport,
+				     unsigned long ufstat)
+{
+	struct s3c24xx_uart_info *info = ourport->info;
+
+	if (ufstat & info->rx_fifofull)
+		return ourport->port.fifosize;
+
+	return (ufstat & info->rx_fifomask) >> info->rx_fifoshift;
+}
+
+static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport);
+static void s3c24xx_serial_rx_dma_complete(void *args)
+{
+	struct s3c24xx_uart_port *ourport = args;
+	struct uart_port *port = &ourport->port;
+
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_port *t = &port->state->port;
+	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
+
+	struct dma_tx_state state;
+	unsigned long flags;
+	int received;
+
+	dmaengine_tx_status(dma->rx_chan,  dma->rx_cookie, &state);
+	received  = dma->rx_bytes_requested - state.residue;
+	async_tx_ack(dma->rx_desc);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	if (received)
+		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+
+	if (tty) {
+		tty_flip_buffer_push(t);
+		tty_kref_put(tty);
+	}
+
+	s3c64xx_start_rx_dma(ourport);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+
+	dma_sync_single_for_device(ourport->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+
+	dma->rx_desc = dmaengine_prep_slave_single(dma->rx_chan,
+				dma->rx_addr, dma->rx_size, DMA_DEV_TO_MEM,
+				DMA_PREP_INTERRUPT);
+	if (!dma->rx_desc) {
+		dev_err(ourport->port.dev, "Unable to get desc for Rx\n");
+		return;
+	}
+
+	dma->rx_desc->callback = s3c24xx_serial_rx_dma_complete;
+	dma->rx_desc->callback_param = ourport;
+	dma->rx_bytes_requested = dma->rx_size;
+
+	dma->rx_cookie = dmaengine_submit(dma->rx_desc);
+	dma_async_issue_pending(dma->rx_chan);
+}
+
+/* ? - where has parity gone?? */
+#define S3C2410_UERSTAT_PARITY (0x1000)
+
+static void enable_rx_dma(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ucon;
+
+	/* set Rx mode to DMA mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_RXBURST_MASK |
+			S3C64XX_UCON_TIMEOUT_MASK |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_DMASUS_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_MASK);
+	ucon |= S3C64XX_UCON_RXBURST_16 |
+			0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_DMA;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_mode = S3C24XX_RX_DMA;
+}
+
+static void enable_rx_pio(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ucon;
+
+	/* set Rx mode to DMA mode */
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= ~(S3C64XX_UCON_TIMEOUT_MASK |
+			S3C64XX_UCON_EMPTYINT_EN |
+			S3C64XX_UCON_DMASUS_EN |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_MASK);
+	ucon |= 0xf << S3C64XX_UCON_TIMEOUT_SHIFT |
+			S3C64XX_UCON_TIMEOUT_EN |
+			S3C64XX_UCON_RXMODE_CPU;
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	ourport->rx_mode = S3C24XX_RX_PIO;
+}
+
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport);
+
+static irqreturn_t s3c24xx_serial_rx_chars_dma(void *dev_id)
+{
+	unsigned int utrstat, received;
+	struct s3c24xx_uart_port *ourport = dev_id;
+	struct uart_port *port = &ourport->port;
+	struct s3c24xx_uart_dma *dma = ourport->dma;
+	struct tty_struct *tty = tty_port_tty_get(&ourport->port.state->port);
+	struct tty_port *t = &port->state->port;
+	unsigned long flags;
+	struct dma_tx_state state;
+
+	utrstat = rd_regl(port, S3C2410_UTRSTAT);
+	rd_regl(port, S3C2410_UFSTAT);
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	if (!(utrstat & S3C2410_UTRSTAT_TIMEOUT)) {
+		s3c64xx_start_rx_dma(ourport);
+		if (ourport->rx_mode == S3C24XX_RX_PIO)
+			enable_rx_dma(ourport);
+		goto finish;
+	}
+
+	if (ourport->rx_mode == S3C24XX_RX_DMA) {
+		dmaengine_pause(dma->rx_chan);
+		dmaengine_tx_status(dma->rx_chan, dma->rx_cookie, &state);
+		dmaengine_terminate_all(dma->rx_chan);
+		received = dma->rx_bytes_requested - state.residue;
+		s3c24xx_uart_copy_rx_to_tty(ourport, t, received);
+
+		enable_rx_pio(ourport);
+	}
+
+	s3c24xx_serial_rx_drain_fifo(ourport);
+
+	if (tty) {
+		tty_flip_buffer_push(t);
+		tty_kref_put(tty);
+	}
+
+	wr_regl(port, S3C2410_UTRSTAT, S3C2410_UTRSTAT_TIMEOUT);
+
+finish:
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	return IRQ_HANDLED;
+}
+
+static void s3c24xx_serial_rx_drain_fifo(struct s3c24xx_uart_port *ourport)
+{
+	struct uart_port *port = &ourport->port;
+	unsigned int ufcon, ch, flag, ufstat, uerstat;
+	unsigned int fifocnt = 0;
+	int max_count = port->fifosize;
+
+	while (max_count-- > 0) {
+		/*
+		 * Receive all characters known to be in FIFO
+		 * before reading FIFO level again
+		 */
+		if (fifocnt == 0) {
+			ufstat = rd_regl(port, S3C2410_UFSTAT);
+			fifocnt = s3c24xx_serial_rx_fifocnt(ourport, ufstat);
+			if (fifocnt == 0)
+				break;
+		}
+		fifocnt--;
+
+		uerstat = rd_regl(port, S3C2410_UERSTAT);
+		ch = rd_reg(port, S3C2410_URXH);
+
+		if (port->flags & UPF_CONS_FLOW) {
+			int txe = s3c24xx_serial_txempty_nofifo(port);
+
+			if (ourport->rx_enabled) {
+				if (!txe) {
+					ourport->rx_enabled = 0;
+					continue;
+				}
+			} else {
+				if (txe) {
+					ufcon = rd_regl(port, S3C2410_UFCON);
+					ufcon |= S3C2410_UFCON_RESETRX;
+					wr_regl(port, S3C2410_UFCON, ufcon);
+					ourport->rx_enabled = 1;
+					return;
+				}
+				continue;
+			}
+		}
+
+		/* insert the character into the buffer */
+
+		flag = TTY_NORMAL;
+		port->icount.rx++;
+
+		if (unlikely(uerstat & S3C2410_UERSTAT_ANY)) {
+			dev_dbg(port->dev,
+				"rxerr: port ch=0x%02x, rxs=0x%08x\n",
+				ch, uerstat);
+
+			/* check for break */
+			if (uerstat & S3C2410_UERSTAT_BREAK) {
+				dev_dbg(port->dev, "break!\n");
+				port->icount.brk++;
+				if (uart_handle_break(port))
+					continue; /* Ignore character */
+			}
+
+			if (uerstat & S3C2410_UERSTAT_FRAME)
+				port->icount.frame++;
+			if (uerstat & S3C2410_UERSTAT_OVERRUN)
+				port->icount.overrun++;
+
+			uerstat &= port->read_status_mask;
+
+			if (uerstat & S3C2410_UERSTAT_BREAK)
+				flag = TTY_BREAK;
+			else if (uerstat & S3C2410_UERSTAT_PARITY)
+				flag = TTY_PARITY;
+			else if (uerstat & (S3C2410_UERSTAT_FRAME |
+					    S3C2410_UERSTAT_OVERRUN))
+				flag = TTY_FRAME;
+		}
+
+		if (uart_handle_sysrq_char(port, ch))
+			continue; /* Ignore character */
+
+		uart_insert_char(port, uerstat, S3C2410_UERSTAT_OVERRUN,
+				 ch, flag);
+	}
+
+	tty_flip_buffer_push(&port->state->port);
+}
+
+static irqreturn_t s3c24xx_serial_rx_chars_pio(void *dev_id)
+{
+	struct s3c24xx_uart_port *ourport = dev_id;
+	struct uart_port *port = &ourport->port;
+	unsigned long flags;
+
+	spin_lock_irqsave(&port->lock, flags);
+	s3c24xx_serial_rx_drain_fifo(ourport);
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	return IRQ_HANDLED;
+}
+
+
+static irqreturn_t s3c24xx_serial_rx_chars(int irq, void *dev_id)
+{
+	struct s3c24xx_uart_port *ourport = dev_id;
+
+	if (ourport->dma && ourport->dma->rx_chan)
+		return s3c24xx_serial_rx_chars_dma(dev_id);
+	return s3c24xx_serial_rx_chars_pio(dev_id);
+}
+
+static irqreturn_t s3c24xx_serial_tx_chars(int irq, void *id)
+{
+	struct s3c24xx_uart_port *ourport = id;
+	struct uart_port *port = &ourport->port;
+	struct circ_buf *xmit = &port->state->xmit;
+	unsigned long flags;
+	int count, dma_count = 0;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
+
+	if (ourport->dma && ourport->dma->tx_chan &&
+	    count >= ourport->min_dma_size) {
+		int align = dma_get_cache_alignment() -
+			(xmit->tail & (dma_get_cache_alignment() - 1));
+		if (count-align >= ourport->min_dma_size) {
+			dma_count = count-align;
+			count = align;
+		}
+	}
+
+	if (port->x_char) {
+		wr_reg(port, S3C2410_UTXH, port->x_char);
+		port->icount.tx++;
+		port->x_char = 0;
+		goto out;
+	}
+
+	/* if there isn't anything more to transmit, or the uart is now
+	 * stopped, disable the uart and exit
+	 */
+
+	if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
+		s3c24xx_serial_stop_tx(port);
+		goto out;
+	}
+
+	/* try and drain the buffer... */
+
+	if (count > port->fifosize) {
+		count = port->fifosize;
+		dma_count = 0;
+	}
+
+	while (!uart_circ_empty(xmit) && count > 0) {
+		if (rd_regl(port, S3C2410_UFSTAT) & ourport->info->tx_fifofull)
+			break;
+
+		wr_reg(port, S3C2410_UTXH, xmit->buf[xmit->tail]);
+		xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
+		port->icount.tx++;
+		count--;
+	}
+
+	if (!count && dma_count) {
+		s3c24xx_serial_start_tx_dma(ourport, dma_count);
+		goto out;
+	}
+
+	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
+		spin_unlock(&port->lock);
+		uart_write_wakeup(port);
+		spin_lock(&port->lock);
+	}
+
+	if (uart_circ_empty(xmit))
+		s3c24xx_serial_stop_tx(port);
+
+out:
+	spin_unlock_irqrestore(&port->lock, flags);
+	return IRQ_HANDLED;
+}
+
+/* interrupt handler for s3c64xx and later SoC's.*/
+static irqreturn_t s3c64xx_serial_handle_irq(int irq, void *id)
+{
+	struct s3c24xx_uart_port *ourport = id;
+	struct uart_port *port = &ourport->port;
+	unsigned int pend = rd_regl(port, S3C64XX_UINTP);
+	irqreturn_t ret = IRQ_HANDLED;
+
+	if (pend & S3C64XX_UINTM_RXD_MSK) {
+		ret = s3c24xx_serial_rx_chars(irq, id);
+		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_RXD_MSK);
+	}
+	if (pend & S3C64XX_UINTM_TXD_MSK) {
+		ret = s3c24xx_serial_tx_chars(irq, id);
+		wr_regl(port, S3C64XX_UINTP, S3C64XX_UINTM_TXD_MSK);
+	}
+	return ret;
+}
+
+static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT);
+	unsigned long ufcon = rd_regl(port, S3C2410_UFCON);
+
+	if (ufcon & S3C2410_UFCON_FIFOMODE) {
+		if ((ufstat & info->tx_fifomask) != 0 ||
+		    (ufstat & info->tx_fifofull))
+			return 0;
+
+		return 1;
+	}
+
+	return s3c24xx_serial_txempty_nofifo(port);
+}
+
+/* no modem control lines */
+static unsigned int s3c24xx_serial_get_mctrl(struct uart_port *port)
+{
+	unsigned int umstat = rd_reg(port, S3C2410_UMSTAT);
+
+	if (umstat & S3C2410_UMSTAT_CTS)
+		return TIOCM_CAR | TIOCM_DSR | TIOCM_CTS;
+	else
+		return TIOCM_CAR | TIOCM_DSR;
+}
+
+static void s3c24xx_serial_set_mctrl(struct uart_port *port, unsigned int mctrl)
+{
+	unsigned int umcon = rd_regl(port, S3C2410_UMCON);
+
+	if (mctrl & TIOCM_RTS)
+		umcon |= S3C2410_UMCOM_RTS_LOW;
+	else
+		umcon &= ~S3C2410_UMCOM_RTS_LOW;
+
+	wr_regl(port, S3C2410_UMCON, umcon);
+}
+
+static void s3c24xx_serial_break_ctl(struct uart_port *port, int break_state)
+{
+	unsigned long flags;
+	unsigned int ucon;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ucon = rd_regl(port, S3C2410_UCON);
+
+	if (break_state)
+		ucon |= S3C2410_UCON_SBREAK;
+	else
+		ucon &= ~S3C2410_UCON_SBREAK;
+
+	wr_regl(port, S3C2410_UCON, ucon);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
+{
+	struct s3c24xx_uart_dma	*dma = p->dma;
+	struct dma_slave_caps dma_caps;
+	const char *reason = NULL;
+	int ret;
+
+	/* Default slave configuration parameters */
+	dma->rx_conf.direction		= DMA_DEV_TO_MEM;
+	dma->rx_conf.src_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
+	dma->rx_conf.src_addr		= p->port.mapbase + S3C2410_URXH;
+	dma->rx_conf.src_maxburst	= 1;
+
+	dma->tx_conf.direction		= DMA_MEM_TO_DEV;
+	dma->tx_conf.dst_addr_width	= DMA_SLAVE_BUSWIDTH_1_BYTE;
+	dma->tx_conf.dst_addr		= p->port.mapbase + S3C2410_UTXH;
+	dma->tx_conf.dst_maxburst	= 1;
+
+	dma->rx_chan = dma_request_chan(p->port.dev, "rx");
+
+	if (IS_ERR(dma->rx_chan)) {
+		reason = "DMA RX channel request failed";
+		ret = PTR_ERR(dma->rx_chan);
+		goto err_warn;
+	}
+
+	ret = dma_get_slave_caps(dma->rx_chan, &dma_caps);
+	if (ret < 0 ||
+	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
+		reason = "insufficient DMA RX engine capabilities";
+		ret = -EOPNOTSUPP;
+		goto err_release_rx;
+	}
+
+	dmaengine_slave_config(dma->rx_chan, &dma->rx_conf);
+
+	dma->tx_chan = dma_request_chan(p->port.dev, "tx");
+	if (IS_ERR(dma->tx_chan)) {
+		reason = "DMA TX channel request failed";
+		ret = PTR_ERR(dma->tx_chan);
+		goto err_release_rx;
+	}
+
+	ret = dma_get_slave_caps(dma->tx_chan, &dma_caps);
+	if (ret < 0 ||
+	    dma_caps.residue_granularity < DMA_RESIDUE_GRANULARITY_BURST) {
+		reason = "insufficient DMA TX engine capabilities";
+		ret = -EOPNOTSUPP;
+		goto err_release_tx;
+	}
+
+	dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
+
+	/* RX buffer */
+	dma->rx_size = PAGE_SIZE;
+
+	dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL);
+	if (!dma->rx_buf) {
+		ret = -ENOMEM;
+		goto err_release_tx;
+	}
+
+	dma->rx_addr = dma_map_single(p->port.dev, dma->rx_buf,
+				dma->rx_size, DMA_FROM_DEVICE);
+	if (dma_mapping_error(p->port.dev, dma->rx_addr)) {
+		reason = "DMA mapping error for RX buffer";
+		ret = -EIO;
+		goto err_free_rx;
+	}
+
+	/* TX buffer */
+	dma->tx_addr = dma_map_single(p->port.dev, p->port.state->xmit.buf,
+				UART_XMIT_SIZE, DMA_TO_DEVICE);
+	if (dma_mapping_error(p->port.dev, dma->tx_addr)) {
+		reason = "DMA mapping error for TX buffer";
+		ret = -EIO;
+		goto err_unmap_rx;
+	}
+
+	return 0;
+
+err_unmap_rx:
+	dma_unmap_single(p->port.dev, dma->rx_addr, dma->rx_size,
+			 DMA_FROM_DEVICE);
+err_free_rx:
+	kfree(dma->rx_buf);
+err_release_tx:
+	dma_release_channel(dma->tx_chan);
+err_release_rx:
+	dma_release_channel(dma->rx_chan);
+err_warn:
+	if (reason)
+		dev_warn(p->port.dev, "%s, DMA will not be used\n", reason);
+	return ret;
+}
+
+static void s3c24xx_serial_release_dma(struct s3c24xx_uart_port *p)
+{
+	struct s3c24xx_uart_dma	*dma = p->dma;
+
+	if (dma->rx_chan) {
+		dmaengine_terminate_all(dma->rx_chan);
+		dma_unmap_single(p->port.dev, dma->rx_addr,
+				dma->rx_size, DMA_FROM_DEVICE);
+		kfree(dma->rx_buf);
+		dma_release_channel(dma->rx_chan);
+		dma->rx_chan = NULL;
+	}
+
+	if (dma->tx_chan) {
+		dmaengine_terminate_all(dma->tx_chan);
+		dma_unmap_single(p->port.dev, dma->tx_addr,
+				UART_XMIT_SIZE, DMA_TO_DEVICE);
+		dma_release_channel(dma->tx_chan);
+		dma->tx_chan = NULL;
+	}
+}
+
+static void s3c24xx_serial_shutdown(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (ourport->tx_claimed) {
+		if (!s3c24xx_serial_has_interrupt_mask(port))
+			free_irq(ourport->tx_irq, ourport);
+		ourport->tx_enabled = 0;
+		ourport->tx_claimed = 0;
+		ourport->tx_mode = 0;
+	}
+
+	if (ourport->rx_claimed) {
+		if (!s3c24xx_serial_has_interrupt_mask(port))
+			free_irq(ourport->rx_irq, ourport);
+		ourport->rx_claimed = 0;
+		ourport->rx_enabled = 0;
+	}
+
+	/* Clear pending interrupts and mask all interrupts */
+	if (s3c24xx_serial_has_interrupt_mask(port)) {
+		free_irq(port->irq, ourport);
+
+		wr_regl(port, S3C64XX_UINTP, 0xf);
+		wr_regl(port, S3C64XX_UINTM, 0xf);
+	}
+
+	if (ourport->dma)
+		s3c24xx_serial_release_dma(ourport);
+
+	ourport->tx_in_progress = 0;
+}
+
+static int s3c24xx_serial_startup(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	int ret;
+
+	ourport->rx_enabled = 1;
+
+	ret = request_irq(ourport->rx_irq, s3c24xx_serial_rx_chars, 0,
+			  s3c24xx_serial_portname(port), ourport);
+
+	if (ret != 0) {
+		dev_err(port->dev, "cannot get irq %d\n", ourport->rx_irq);
+		return ret;
+	}
+
+	ourport->rx_claimed = 1;
+
+	dev_dbg(port->dev, "requesting tx irq...\n");
+
+	ourport->tx_enabled = 1;
+
+	ret = request_irq(ourport->tx_irq, s3c24xx_serial_tx_chars, 0,
+			  s3c24xx_serial_portname(port), ourport);
+
+	if (ret) {
+		dev_err(port->dev, "cannot get irq %d\n", ourport->tx_irq);
+		goto err;
+	}
+
+	ourport->tx_claimed = 1;
+
+	/* the port reset code should have done the correct
+	 * register setup for the port controls
+	 */
+
+	return ret;
+
+err:
+	s3c24xx_serial_shutdown(port);
+	return ret;
+}
+
+static int s3c64xx_serial_startup(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned long flags;
+	unsigned int ufcon;
+	int ret;
+
+	wr_regl(port, S3C64XX_UINTM, 0xf);
+	if (ourport->dma) {
+		ret = s3c24xx_serial_request_dma(ourport);
+		if (ret < 0) {
+			devm_kfree(port->dev, ourport->dma);
+			ourport->dma = NULL;
+		}
+	}
+
+	ret = request_irq(port->irq, s3c64xx_serial_handle_irq, IRQF_SHARED,
+			  s3c24xx_serial_portname(port), ourport);
+	if (ret) {
+		dev_err(port->dev, "cannot get irq %d\n", port->irq);
+		return ret;
+	}
+
+	/* For compatibility with s3c24xx Soc's */
+	ourport->rx_enabled = 1;
+	ourport->rx_claimed = 1;
+	ourport->tx_enabled = 0;
+	ourport->tx_claimed = 1;
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	ufcon = rd_regl(port, S3C2410_UFCON);
+	ufcon |= S3C2410_UFCON_RESETRX | S5PV210_UFCON_RXTRIG8;
+	if (!uart_console(port))
+		ufcon |= S3C2410_UFCON_RESETTX;
+	wr_regl(port, S3C2410_UFCON, ufcon);
+
+	enable_rx_pio(ourport);
+
+	spin_unlock_irqrestore(&port->lock, flags);
+
+	/* Enable Rx Interrupt */
+	s3c24xx_clear_bit(port, S3C64XX_UINTM_RXD, S3C64XX_UINTM);
+
+	return ret;
+}
+
+/* power power management control */
+
+static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level,
+			      unsigned int old)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	int timeout = 10000;
+
+	ourport->pm_level = level;
+
+	switch (level) {
+	case 3:
+		while (--timeout && !s3c24xx_serial_txempty_nofifo(port))
+			udelay(100);
+
+		if (!IS_ERR(ourport->baudclk))
+			clk_disable_unprepare(ourport->baudclk);
+
+		clk_disable_unprepare(ourport->clk);
+		break;
+
+	case 0:
+		clk_prepare_enable(ourport->clk);
+
+		if (!IS_ERR(ourport->baudclk))
+			clk_prepare_enable(ourport->baudclk);
+
+		break;
+	default:
+		dev_err(port->dev, "s3c24xx_serial: unknown pm %d\n", level);
+	}
+}
+
+/* baud rate calculation
+ *
+ * The UARTs on the S3C2410/S3C2440 can take their clocks from a number
+ * of different sources, including the peripheral clock ("pclk") and an
+ * external clock ("uclk"). The S3C2440 also adds the core clock ("fclk")
+ * with a programmable extra divisor.
+ *
+ * The following code goes through the clock sources, and calculates the
+ * baud clocks (and the resultant actual baud rates) and then tries to
+ * pick the closest one and select that.
+ *
+ */
+
+#define MAX_CLK_NAME_LENGTH 15
+
+static inline int s3c24xx_serial_getsource(struct uart_port *port)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned int ucon;
+
+	if (info->num_clks == 1)
+		return 0;
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	ucon &= info->clksel_mask;
+	return ucon >> info->clksel_shift;
+}
+
+static void s3c24xx_serial_setsource(struct uart_port *port,
+			unsigned int clk_sel)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned int ucon;
+
+	if (info->num_clks == 1)
+		return;
+
+	ucon = rd_regl(port, S3C2410_UCON);
+	if ((ucon & info->clksel_mask) >> info->clksel_shift == clk_sel)
+		return;
+
+	ucon &= ~info->clksel_mask;
+	ucon |= clk_sel << info->clksel_shift;
+	wr_regl(port, S3C2410_UCON, ucon);
+}
+
+static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport,
+			unsigned int req_baud, struct clk **best_clk,
+			unsigned int *clk_num)
+{
+	struct s3c24xx_uart_info *info = ourport->info;
+	struct clk *clk;
+	unsigned long rate;
+	unsigned int cnt, baud, quot, best_quot = 0;
+	char clkname[MAX_CLK_NAME_LENGTH];
+	int calc_deviation, deviation = (1 << 30) - 1;
+
+	for (cnt = 0; cnt < info->num_clks; cnt++) {
+		/* Keep selected clock if provided */
+		if (ourport->cfg->clk_sel &&
+			!(ourport->cfg->clk_sel & (1 << cnt)))
+			continue;
+
+		sprintf(clkname, "clk_uart_baud%d", cnt);
+		clk = clk_get(ourport->port.dev, clkname);
+		if (IS_ERR(clk))
+			continue;
+
+		rate = clk_get_rate(clk);
+		if (!rate)
+			continue;
+
+		if (ourport->info->has_divslot) {
+			unsigned long div = rate / req_baud;
+
+			/* The UDIVSLOT register on the newer UARTs allows us to
+			 * get a divisor adjustment of 1/16th on the baud clock.
+			 *
+			 * We don't keep the UDIVSLOT value (the 16ths we
+			 * calculated by not multiplying the baud by 16) as it
+			 * is easy enough to recalculate.
+			 */
+
+			quot = div / 16;
+			baud = rate / div;
+		} else {
+			quot = (rate + (8 * req_baud)) / (16 * req_baud);
+			baud = rate / (quot * 16);
+		}
+		quot--;
+
+		calc_deviation = req_baud - baud;
+		if (calc_deviation < 0)
+			calc_deviation = -calc_deviation;
+
+		if (calc_deviation < deviation) {
+			*best_clk = clk;
+			best_quot = quot;
+			*clk_num = cnt;
+			deviation = calc_deviation;
+		}
+	}
+
+	return best_quot;
+}
+
+/* udivslot_table[]
+ *
+ * This table takes the fractional value of the baud divisor and gives
+ * the recommended setting for the UDIVSLOT register.
+ */
+static u16 udivslot_table[16] = {
+	[0] = 0x0000,
+	[1] = 0x0080,
+	[2] = 0x0808,
+	[3] = 0x0888,
+	[4] = 0x2222,
+	[5] = 0x4924,
+	[6] = 0x4A52,
+	[7] = 0x54AA,
+	[8] = 0x5555,
+	[9] = 0xD555,
+	[10] = 0xD5D5,
+	[11] = 0xDDD5,
+	[12] = 0xDDDD,
+	[13] = 0xDFDD,
+	[14] = 0xDFDF,
+	[15] = 0xFFDF,
+};
+
+static void s3c24xx_serial_set_termios(struct uart_port *port,
+				       struct ktermios *termios,
+				       struct ktermios *old)
+{
+	struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	struct clk *clk = ERR_PTR(-EINVAL);
+	unsigned long flags;
+	unsigned int baud, quot, clk_sel = 0;
+	unsigned int ulcon;
+	unsigned int umcon;
+	unsigned int udivslot = 0;
+
+	/*
+	 * We don't support modem control lines.
+	 */
+	termios->c_cflag &= ~(HUPCL | CMSPAR);
+	termios->c_cflag |= CLOCAL;
+
+	/*
+	 * Ask the core to calculate the divisor for us.
+	 */
+
+	baud = uart_get_baud_rate(port, termios, old, 0, 3000000);
+	quot = s3c24xx_serial_getclk(ourport, baud, &clk, &clk_sel);
+	if (baud == 38400 && (port->flags & UPF_SPD_MASK) == UPF_SPD_CUST)
+		quot = port->custom_divisor;
+	if (IS_ERR(clk))
+		return;
+
+	/* check to see if we need  to change clock source */
+
+	if (ourport->baudclk != clk) {
+		clk_prepare_enable(clk);
+
+		s3c24xx_serial_setsource(port, clk_sel);
+
+		if (!IS_ERR(ourport->baudclk)) {
+			clk_disable_unprepare(ourport->baudclk);
+			ourport->baudclk = ERR_PTR(-EINVAL);
+		}
+
+		ourport->baudclk = clk;
+		ourport->baudclk_rate = clk ? clk_get_rate(clk) : 0;
+	}
+
+	if (ourport->info->has_divslot) {
+		unsigned int div = ourport->baudclk_rate / baud;
+
+		if (cfg->has_fracval) {
+			udivslot = (div & 15);
+			dev_dbg(port->dev, "fracval = %04x\n", udivslot);
+		} else {
+			udivslot = udivslot_table[div & 15];
+			dev_dbg(port->dev, "udivslot = %04x (div %d)\n",
+				udivslot, div & 15);
+		}
+	}
+
+	switch (termios->c_cflag & CSIZE) {
+	case CS5:
+		dev_dbg(port->dev, "config: 5bits/char\n");
+		ulcon = S3C2410_LCON_CS5;
+		break;
+	case CS6:
+		dev_dbg(port->dev, "config: 6bits/char\n");
+		ulcon = S3C2410_LCON_CS6;
+		break;
+	case CS7:
+		dev_dbg(port->dev, "config: 7bits/char\n");
+		ulcon = S3C2410_LCON_CS7;
+		break;
+	case CS8:
+	default:
+		dev_dbg(port->dev, "config: 8bits/char\n");
+		ulcon = S3C2410_LCON_CS8;
+		break;
+	}
+
+	/* preserve original lcon IR settings */
+	ulcon |= (cfg->ulcon & S3C2410_LCON_IRM);
+
+	if (termios->c_cflag & CSTOPB)
+		ulcon |= S3C2410_LCON_STOPB;
+
+	if (termios->c_cflag & PARENB) {
+		if (termios->c_cflag & PARODD)
+			ulcon |= S3C2410_LCON_PODD;
+		else
+			ulcon |= S3C2410_LCON_PEVEN;
+	} else {
+		ulcon |= S3C2410_LCON_PNONE;
+	}
+
+	spin_lock_irqsave(&port->lock, flags);
+
+	dev_dbg(port->dev,
+		"setting ulcon to %08x, brddiv to %d, udivslot %08x\n",
+		ulcon, quot, udivslot);
+
+	wr_regl(port, S3C2410_ULCON, ulcon);
+	wr_regl(port, S3C2410_UBRDIV, quot);
+
+	port->status &= ~UPSTAT_AUTOCTS;
+
+	umcon = rd_regl(port, S3C2410_UMCON);
+	if (termios->c_cflag & CRTSCTS) {
+		umcon |= S3C2410_UMCOM_AFC;
+		/* Disable RTS when RX FIFO contains 63 bytes */
+		umcon &= ~S3C2412_UMCON_AFC_8;
+		port->status = UPSTAT_AUTOCTS;
+	} else {
+		umcon &= ~S3C2410_UMCOM_AFC;
+	}
+	wr_regl(port, S3C2410_UMCON, umcon);
+
+	if (ourport->info->has_divslot)
+		wr_regl(port, S3C2443_DIVSLOT, udivslot);
+
+	dev_dbg(port->dev,
+		"uart: ulcon = 0x%08x, ucon = 0x%08x, ufcon = 0x%08x\n",
+		rd_regl(port, S3C2410_ULCON),
+		rd_regl(port, S3C2410_UCON),
+		rd_regl(port, S3C2410_UFCON));
+
+	/*
+	 * Update the per-port timeout.
+	 */
+	uart_update_timeout(port, termios->c_cflag, baud);
+
+	/*
+	 * Which character status flags are we interested in?
+	 */
+	port->read_status_mask = S3C2410_UERSTAT_OVERRUN;
+	if (termios->c_iflag & INPCK)
+		port->read_status_mask |= S3C2410_UERSTAT_FRAME |
+			S3C2410_UERSTAT_PARITY;
+	/*
+	 * Which character status flags should we ignore?
+	 */
+	port->ignore_status_mask = 0;
+	if (termios->c_iflag & IGNPAR)
+		port->ignore_status_mask |= S3C2410_UERSTAT_OVERRUN;
+	if (termios->c_iflag & IGNBRK && termios->c_iflag & IGNPAR)
+		port->ignore_status_mask |= S3C2410_UERSTAT_FRAME;
+
+	/*
+	 * Ignore all characters if CREAD is not set.
+	 */
+	if ((termios->c_cflag & CREAD) == 0)
+		port->ignore_status_mask |= RXSTAT_DUMMY_READ;
+
+	spin_unlock_irqrestore(&port->lock, flags);
+}
+
+static const char *s3c24xx_serial_type(struct uart_port *port)
+{
+	switch (port->type) {
+	case PORT_S3C2410:
+		return "S3C2410";
+	case PORT_S3C2440:
+		return "S3C2440";
+	case PORT_S3C2412:
+		return "S3C2412";
+	case PORT_S3C6400:
+		return "S3C6400/10";
+	default:
+		return NULL;
+	}
+}
+
+#define MAP_SIZE (0x100)
+
+static void s3c24xx_serial_release_port(struct uart_port *port)
+{
+	release_mem_region(port->mapbase, MAP_SIZE);
+}
+
+static int s3c24xx_serial_request_port(struct uart_port *port)
+{
+	const char *name = s3c24xx_serial_portname(port);
+
+	return request_mem_region(port->mapbase, MAP_SIZE, name) ? 0 : -EBUSY;
+}
+
+static void s3c24xx_serial_config_port(struct uart_port *port, int flags)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+
+	if (flags & UART_CONFIG_TYPE &&
+	    s3c24xx_serial_request_port(port) == 0)
+		port->type = info->type;
+}
+
+/*
+ * verify the new serial_struct (for TIOCSSERIAL).
+ */
+static int
+s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+
+	if (ser->type != PORT_UNKNOWN && ser->type != info->type)
+		return -EINVAL;
+
+	return 0;
+}
+
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+
+static struct console s3c24xx_serial_console;
+
+static int __init s3c24xx_serial_console_init(void)
+{
+	register_console(&s3c24xx_serial_console);
+	return 0;
+}
+console_initcall(s3c24xx_serial_console_init);
+
+#define S3C24XX_SERIAL_CONSOLE &s3c24xx_serial_console
+#else
+#define S3C24XX_SERIAL_CONSOLE NULL
+#endif
+
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
+static int s3c24xx_serial_get_poll_char(struct uart_port *port);
+static void s3c24xx_serial_put_poll_char(struct uart_port *port,
+			 unsigned char c);
+#endif
+
+static struct uart_ops s3c24xx_serial_ops = {
+	.pm		= s3c24xx_serial_pm,
+	.tx_empty	= s3c24xx_serial_tx_empty,
+	.get_mctrl	= s3c24xx_serial_get_mctrl,
+	.set_mctrl	= s3c24xx_serial_set_mctrl,
+	.stop_tx	= s3c24xx_serial_stop_tx,
+	.start_tx	= s3c24xx_serial_start_tx,
+	.stop_rx	= s3c24xx_serial_stop_rx,
+	.break_ctl	= s3c24xx_serial_break_ctl,
+	.startup	= s3c24xx_serial_startup,
+	.shutdown	= s3c24xx_serial_shutdown,
+	.set_termios	= s3c24xx_serial_set_termios,
+	.type		= s3c24xx_serial_type,
+	.release_port	= s3c24xx_serial_release_port,
+	.request_port	= s3c24xx_serial_request_port,
+	.config_port	= s3c24xx_serial_config_port,
+	.verify_port	= s3c24xx_serial_verify_port,
+#if defined(CONFIG_SERIAL_SAMSUNG_CONSOLE) && defined(CONFIG_CONSOLE_POLL)
+	.poll_get_char = s3c24xx_serial_get_poll_char,
+	.poll_put_char = s3c24xx_serial_put_poll_char,
+#endif
+};
+
+static struct uart_driver s3c24xx_uart_drv = {
+	.owner		= THIS_MODULE,
+	.driver_name	= "s3c2410_serial",
+	.nr		= CONFIG_SERIAL_SAMSUNG_UARTS,
+	.cons		= S3C24XX_SERIAL_CONSOLE,
+	.dev_name	= S3C24XX_SERIAL_NAME,
+	.major		= S3C24XX_SERIAL_MAJOR,
+	.minor		= S3C24XX_SERIAL_MINOR,
+};
+
+#define __PORT_LOCK_UNLOCKED(i) \
+	__SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[i].port.lock)
+static struct s3c24xx_uart_port
+s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
+	[0] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(0),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 0,
+		}
+	},
+	[1] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(1),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 1,
+		}
+	},
+#if CONFIG_SERIAL_SAMSUNG_UARTS > 2
+
+	[2] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(2),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 2,
+		}
+	},
+#endif
+#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
+	[3] = {
+		.port = {
+			.lock		= __PORT_LOCK_UNLOCKED(3),
+			.iotype		= UPIO_MEM,
+			.uartclk	= 0,
+			.fifosize	= 16,
+			.ops		= &s3c24xx_serial_ops,
+			.flags		= UPF_BOOT_AUTOCONF,
+			.line		= 3,
+		}
+	}
+#endif
+};
+#undef __PORT_LOCK_UNLOCKED
+
+/* s3c24xx_serial_resetport
+ *
+ * reset the fifos and other the settings.
+ */
+
+static void s3c24xx_serial_resetport(struct uart_port *port,
+				   struct s3c2410_uartcfg *cfg)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ucon = rd_regl(port, S3C2410_UCON);
+	unsigned int ucon_mask;
+
+	ucon_mask = info->clksel_mask;
+	if (info->type == PORT_S3C2440)
+		ucon_mask |= S3C2440_UCON0_DIVMASK;
+
+	ucon &= ucon_mask;
+	wr_regl(port, S3C2410_UCON,  ucon | cfg->ucon);
+
+	/* reset both fifos */
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon | S3C2410_UFCON_RESETBOTH);
+	wr_regl(port, S3C2410_UFCON, cfg->ufcon);
+
+	/* some delay is required after fifo reset */
+	udelay(1);
+}
+
+
+#ifdef CONFIG_ARM_S3C24XX_CPUFREQ
+
+static int s3c24xx_serial_cpufreq_transition(struct notifier_block *nb,
+					     unsigned long val, void *data)
+{
+	struct s3c24xx_uart_port *port;
+	struct uart_port *uport;
+
+	port = container_of(nb, struct s3c24xx_uart_port, freq_transition);
+	uport = &port->port;
+
+	/* check to see if port is enabled */
+
+	if (port->pm_level != 0)
+		return 0;
+
+	/* try and work out if the baudrate is changing, we can detect
+	 * a change in rate, but we do not have support for detecting
+	 * a disturbance in the clock-rate over the change.
+	 */
+
+	if (IS_ERR(port->baudclk))
+		goto exit;
+
+	if (port->baudclk_rate == clk_get_rate(port->baudclk))
+		goto exit;
+
+	if (val == CPUFREQ_PRECHANGE) {
+		/* we should really shut the port down whilst the
+		 * frequency change is in progress.
+		 */
+
+	} else if (val == CPUFREQ_POSTCHANGE) {
+		struct ktermios *termios;
+		struct tty_struct *tty;
+
+		if (uport->state == NULL)
+			goto exit;
+
+		tty = uport->state->port.tty;
+
+		if (tty == NULL)
+			goto exit;
+
+		termios = &tty->termios;
+
+		if (termios == NULL) {
+			dev_warn(uport->dev, "%s: no termios?\n", __func__);
+			goto exit;
+		}
+
+		s3c24xx_serial_set_termios(uport, termios, NULL);
+	}
+
+exit:
+	return 0;
+}
+
+static inline int
+s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
+{
+	port->freq_transition.notifier_call = s3c24xx_serial_cpufreq_transition;
+
+	return cpufreq_register_notifier(&port->freq_transition,
+					 CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+static inline void
+s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
+{
+	cpufreq_unregister_notifier(&port->freq_transition,
+				    CPUFREQ_TRANSITION_NOTIFIER);
+}
+
+#else
+static inline int
+s3c24xx_serial_cpufreq_register(struct s3c24xx_uart_port *port)
+{
+	return 0;
+}
+
+static inline void
+s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port)
+{
+}
+#endif
+
+static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport)
+{
+	struct device *dev = ourport->port.dev;
+	struct s3c24xx_uart_info *info = ourport->info;
+	char clk_name[MAX_CLK_NAME_LENGTH];
+	unsigned int clk_sel;
+	struct clk *clk;
+	int clk_num;
+	int ret;
+
+	clk_sel = ourport->cfg->clk_sel ? : info->def_clk_sel;
+	for (clk_num = 0; clk_num < info->num_clks; clk_num++) {
+		if (!(clk_sel & (1 << clk_num)))
+			continue;
+
+		sprintf(clk_name, "clk_uart_baud%d", clk_num);
+		clk = clk_get(dev, clk_name);
+		if (IS_ERR(clk))
+			continue;
+
+		ret = clk_prepare_enable(clk);
+		if (ret) {
+			clk_put(clk);
+			continue;
+		}
+
+		ourport->baudclk = clk;
+		ourport->baudclk_rate = clk_get_rate(clk);
+		s3c24xx_serial_setsource(&ourport->port, clk_num);
+
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+/* s3c24xx_serial_init_port
+ *
+ * initialise a single serial port from the platform device given
+ */
+
+static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
+				    struct platform_device *platdev)
+{
+	struct uart_port *port = &ourport->port;
+	struct s3c2410_uartcfg *cfg = ourport->cfg;
+	struct resource *res;
+	int ret;
+
+	if (platdev == NULL)
+		return -ENODEV;
+
+	if (port->mapbase != 0)
+		return -EINVAL;
+
+	/* setup info for port */
+	port->dev	= &platdev->dev;
+
+	/* Startup sequence is different for s3c64xx and higher SoC's */
+	if (s3c24xx_serial_has_interrupt_mask(port))
+		s3c24xx_serial_ops.startup = s3c64xx_serial_startup;
+
+	port->uartclk = 1;
+
+	if (cfg->uart_flags & UPF_CONS_FLOW) {
+		dev_dbg(port->dev, "enabling flow control\n");
+		port->flags |= UPF_CONS_FLOW;
+	}
+
+	/* sort our the physical and virtual addresses for each UART */
+
+	res = platform_get_resource(platdev, IORESOURCE_MEM, 0);
+	if (res == NULL) {
+		dev_err(port->dev, "failed to find memory resource for uart\n");
+		return -EINVAL;
+	}
+
+	dev_dbg(port->dev, "resource %pR)\n", res);
+
+	port->membase = devm_ioremap(port->dev, res->start, resource_size(res));
+	if (!port->membase) {
+		dev_err(port->dev, "failed to remap controller address\n");
+		return -EBUSY;
+	}
+
+	port->mapbase = res->start;
+	ret = platform_get_irq(platdev, 0);
+	if (ret < 0)
+		port->irq = 0;
+	else {
+		port->irq = ret;
+		ourport->rx_irq = ret;
+		ourport->tx_irq = ret + 1;
+	}
+
+	if (!s3c24xx_serial_has_interrupt_mask(port)) {
+		ret = platform_get_irq(platdev, 1);
+		if (ret > 0)
+			ourport->tx_irq = ret;
+	}
+	/*
+	 * DMA is currently supported only on DT platforms, if DMA properties
+	 * are specified.
+	 */
+	if (platdev->dev.of_node && of_find_property(platdev->dev.of_node,
+						     "dmas", NULL)) {
+		ourport->dma = devm_kzalloc(port->dev,
+					    sizeof(*ourport->dma),
+					    GFP_KERNEL);
+		if (!ourport->dma) {
+			ret = -ENOMEM;
+			goto err;
+		}
+	}
+
+	ourport->clk	= clk_get(&platdev->dev, "uart");
+	if (IS_ERR(ourport->clk)) {
+		pr_err("%s: Controller clock not found\n",
+				dev_name(&platdev->dev));
+		ret = PTR_ERR(ourport->clk);
+		goto err;
+	}
+
+	ret = clk_prepare_enable(ourport->clk);
+	if (ret) {
+		pr_err("uart: clock failed to prepare+enable: %d\n", ret);
+		clk_put(ourport->clk);
+		goto err;
+	}
+
+	ret = s3c24xx_serial_enable_baudclk(ourport);
+	if (ret)
+		pr_warn("uart: failed to enable baudclk\n");
+
+	/* Keep all interrupts masked and cleared */
+	if (s3c24xx_serial_has_interrupt_mask(port)) {
+		wr_regl(port, S3C64XX_UINTM, 0xf);
+		wr_regl(port, S3C64XX_UINTP, 0xf);
+		wr_regl(port, S3C64XX_UINTSP, 0xf);
+	}
+
+	dev_dbg(port->dev, "port: map=%pa, mem=%p, irq=%d (%d,%d), clock=%u\n",
+		&port->mapbase, port->membase, port->irq,
+		ourport->rx_irq, ourport->tx_irq, port->uartclk);
+
+	/* reset the fifos (and setup the uart) */
+	s3c24xx_serial_resetport(port, cfg);
+
+	return 0;
+
+err:
+	port->mapbase = 0;
+	return ret;
+}
+
+/* Device driver serial port probe */
+
+#ifdef CONFIG_OF
+static const struct of_device_id s3c24xx_uart_dt_match[];
+#endif
+
+static int probe_index;
+
+static inline struct s3c24xx_serial_drv_data *s3c24xx_get_driver_data(
+			struct platform_device *pdev)
+{
+#ifdef CONFIG_OF
+	if (pdev->dev.of_node) {
+		const struct of_device_id *match;
+
+		match = of_match_node(s3c24xx_uart_dt_match, pdev->dev.of_node);
+		return (struct s3c24xx_serial_drv_data *)match->data;
+	}
+#endif
+	return (struct s3c24xx_serial_drv_data *)
+			platform_get_device_id(pdev)->driver_data;
+}
+
+static int s3c24xx_serial_probe(struct platform_device *pdev)
+{
+	struct device_node *np = pdev->dev.of_node;
+	struct s3c24xx_uart_port *ourport;
+	int index = probe_index;
+	int ret, prop = 0;
+
+	if (np) {
+		ret = of_alias_get_id(np, "serial");
+		if (ret >= 0)
+			index = ret;
+	}
+
+	if (index >= ARRAY_SIZE(s3c24xx_serial_ports)) {
+		dev_err(&pdev->dev, "serial%d out of range\n", index);
+		return -EINVAL;
+	}
+	ourport = &s3c24xx_serial_ports[index];
+
+	ourport->drv_data = s3c24xx_get_driver_data(pdev);
+	if (!ourport->drv_data) {
+		dev_err(&pdev->dev, "could not find driver data\n");
+		return -ENODEV;
+	}
+
+	ourport->baudclk = ERR_PTR(-EINVAL);
+	ourport->info = ourport->drv_data->info;
+	ourport->cfg = (dev_get_platdata(&pdev->dev)) ?
+			dev_get_platdata(&pdev->dev) :
+			ourport->drv_data->def_cfg;
+
+	if (np) {
+		of_property_read_u32(np,
+			"samsung,uart-fifosize", &ourport->port.fifosize);
+
+		if (of_property_read_u32(np, "reg-io-width", &prop) == 0) {
+			switch (prop) {
+			case 1:
+				ourport->port.iotype = UPIO_MEM;
+				break;
+			case 4:
+				ourport->port.iotype = UPIO_MEM32;
+				break;
+			default:
+				dev_warn(&pdev->dev, "unsupported reg-io-width (%d)\n",
+						prop);
+				ret = -EINVAL;
+				break;
+			}
+		}
+	}
+
+	if (ourport->drv_data->fifosize[index])
+		ourport->port.fifosize = ourport->drv_data->fifosize[index];
+	else if (ourport->info->fifosize)
+		ourport->port.fifosize = ourport->info->fifosize;
+
+	/*
+	 * DMA transfers must be aligned at least to cache line size,
+	 * so find minimal transfer size suitable for DMA mode
+	 */
+	ourport->min_dma_size = max_t(int, ourport->port.fifosize,
+				    dma_get_cache_alignment());
+
+	dev_dbg(&pdev->dev, "%s: initialising port %p...\n", __func__, ourport);
+
+	ret = s3c24xx_serial_init_port(ourport, pdev);
+	if (ret < 0)
+		return ret;
+
+	if (!s3c24xx_uart_drv.state) {
+		ret = uart_register_driver(&s3c24xx_uart_drv);
+		if (ret < 0) {
+			pr_err("Failed to register Samsung UART driver\n");
+			return ret;
+		}
+	}
+
+	dev_dbg(&pdev->dev, "%s: adding port\n", __func__);
+	uart_add_one_port(&s3c24xx_uart_drv, &ourport->port);
+	platform_set_drvdata(pdev, &ourport->port);
+
+	/*
+	 * Deactivate the clock enabled in s3c24xx_serial_init_port here,
+	 * so that a potential re-enablement through the pm-callback overlaps
+	 * and keeps the clock enabled in this case.
+	 */
+	clk_disable_unprepare(ourport->clk);
+	if (!IS_ERR(ourport->baudclk))
+		clk_disable_unprepare(ourport->baudclk);
+
+	ret = s3c24xx_serial_cpufreq_register(ourport);
+	if (ret < 0)
+		dev_err(&pdev->dev, "failed to add cpufreq notifier\n");
+
+	probe_index++;
+
+	return 0;
+}
+
+static int s3c24xx_serial_remove(struct platform_device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(&dev->dev);
+
+	if (port) {
+		s3c24xx_serial_cpufreq_deregister(to_ourport(port));
+		uart_remove_one_port(&s3c24xx_uart_drv, port);
+	}
+
+	uart_unregister_driver(&s3c24xx_uart_drv);
+
+	return 0;
+}
+
+/* UART power management code */
+#ifdef CONFIG_PM_SLEEP
+static int s3c24xx_serial_suspend(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+
+	if (port)
+		uart_suspend_port(&s3c24xx_uart_drv, port);
+
+	return 0;
+}
+
+static int s3c24xx_serial_resume(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (port) {
+		clk_prepare_enable(ourport->clk);
+		if (!IS_ERR(ourport->baudclk))
+			clk_prepare_enable(ourport->baudclk);
+		s3c24xx_serial_resetport(port, s3c24xx_port_to_cfg(port));
+		if (!IS_ERR(ourport->baudclk))
+			clk_disable_unprepare(ourport->baudclk);
+		clk_disable_unprepare(ourport->clk);
+
+		uart_resume_port(&s3c24xx_uart_drv, port);
+	}
+
+	return 0;
+}
+
+static int s3c24xx_serial_resume_noirq(struct device *dev)
+{
+	struct uart_port *port = s3c24xx_dev_to_port(dev);
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+
+	if (port) {
+		/* restore IRQ mask */
+		if (s3c24xx_serial_has_interrupt_mask(port)) {
+			unsigned int uintm = 0xf;
+
+			if (ourport->tx_enabled)
+				uintm &= ~S3C64XX_UINTM_TXD_MSK;
+			if (ourport->rx_enabled)
+				uintm &= ~S3C64XX_UINTM_RXD_MSK;
+			clk_prepare_enable(ourport->clk);
+			if (!IS_ERR(ourport->baudclk))
+				clk_prepare_enable(ourport->baudclk);
+			wr_regl(port, S3C64XX_UINTM, uintm);
+			if (!IS_ERR(ourport->baudclk))
+				clk_disable_unprepare(ourport->baudclk);
+			clk_disable_unprepare(ourport->clk);
+		}
+	}
+
+	return 0;
+}
+
+static const struct dev_pm_ops s3c24xx_serial_pm_ops = {
+	.suspend = s3c24xx_serial_suspend,
+	.resume = s3c24xx_serial_resume,
+	.resume_noirq = s3c24xx_serial_resume_noirq,
+};
+#define SERIAL_SAMSUNG_PM_OPS	(&s3c24xx_serial_pm_ops)
+
+#else /* !CONFIG_PM_SLEEP */
+
+#define SERIAL_SAMSUNG_PM_OPS	NULL
+#endif /* CONFIG_PM_SLEEP */
+
+/* Console code */
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+
+static struct uart_port *cons_uart;
+
+static int
+s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon)
+{
+	struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port);
+	unsigned long ufstat, utrstat;
+
+	if (ufcon & S3C2410_UFCON_FIFOMODE) {
+		/* fifo mode - check amount of data in fifo registers... */
+
+		ufstat = rd_regl(port, S3C2410_UFSTAT);
+		return (ufstat & info->tx_fifofull) ? 0 : 1;
+	}
+
+	/* in non-fifo mode, we go and use the tx buffer empty */
+
+	utrstat = rd_regl(port, S3C2410_UTRSTAT);
+	return (utrstat & S3C2410_UTRSTAT_TXE) ? 1 : 0;
+}
+
+static bool
+s3c24xx_port_configured(unsigned int ucon)
+{
+	/* consider the serial port configured if the tx/rx mode set */
+	return (ucon & 0xf) != 0;
+}
+
+#ifdef CONFIG_CONSOLE_POLL
+/*
+ * Console polling routines for writing and reading from the uart while
+ * in an interrupt or debug context.
+ */
+
+static int s3c24xx_serial_get_poll_char(struct uart_port *port)
+{
+	struct s3c24xx_uart_port *ourport = to_ourport(port);
+	unsigned int ufstat;
+
+	ufstat = rd_regl(port, S3C2410_UFSTAT);
+	if (s3c24xx_serial_rx_fifocnt(ourport, ufstat) == 0)
+		return NO_POLL_CHAR;
+
+	return rd_reg(port, S3C2410_URXH);
+}
+
+static void s3c24xx_serial_put_poll_char(struct uart_port *port,
+		unsigned char c)
+{
+	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
+	unsigned int ucon = rd_regl(port, S3C2410_UCON);
+
+	/* not possible to xmit on unconfigured port */
+	if (!s3c24xx_port_configured(ucon))
+		return;
+
+	while (!s3c24xx_serial_console_txrdy(port, ufcon))
+		cpu_relax();
+	wr_reg(port, S3C2410_UTXH, c);
+}
+
+#endif /* CONFIG_CONSOLE_POLL */
+
+static void
+s3c24xx_serial_console_putchar(struct uart_port *port, int ch)
+{
+	unsigned int ufcon = rd_regl(port, S3C2410_UFCON);
+
+	while (!s3c24xx_serial_console_txrdy(port, ufcon))
+		cpu_relax();
+	wr_reg(port, S3C2410_UTXH, ch);
+}
+
+static void
+s3c24xx_serial_console_write(struct console *co, const char *s,
+			     unsigned int count)
+{
+	unsigned int ucon = rd_regl(cons_uart, S3C2410_UCON);
+
+	/* not possible to xmit on unconfigured port */
+	if (!s3c24xx_port_configured(ucon))
+		return;
+
+	uart_console_write(cons_uart, s, count, s3c24xx_serial_console_putchar);
+}
+
+static void __init
+s3c24xx_serial_get_options(struct uart_port *port, int *baud,
+			   int *parity, int *bits)
+{
+	struct clk *clk;
+	unsigned int ulcon;
+	unsigned int ucon;
+	unsigned int ubrdiv;
+	unsigned long rate;
+	unsigned int clk_sel;
+	char clk_name[MAX_CLK_NAME_LENGTH];
+
+	ulcon  = rd_regl(port, S3C2410_ULCON);
+	ucon   = rd_regl(port, S3C2410_UCON);
+	ubrdiv = rd_regl(port, S3C2410_UBRDIV);
+
+	if (s3c24xx_port_configured(ucon)) {
+		switch (ulcon & S3C2410_LCON_CSMASK) {
+		case S3C2410_LCON_CS5:
+			*bits = 5;
+			break;
+		case S3C2410_LCON_CS6:
+			*bits = 6;
+			break;
+		case S3C2410_LCON_CS7:
+			*bits = 7;
+			break;
+		case S3C2410_LCON_CS8:
+		default:
+			*bits = 8;
+			break;
+		}
+
+		switch (ulcon & S3C2410_LCON_PMASK) {
+		case S3C2410_LCON_PEVEN:
+			*parity = 'e';
+			break;
+
+		case S3C2410_LCON_PODD:
+			*parity = 'o';
+			break;
+
+		case S3C2410_LCON_PNONE:
+		default:
+			*parity = 'n';
+		}
+
+		/* now calculate the baud rate */
+
+		clk_sel = s3c24xx_serial_getsource(port);
+		sprintf(clk_name, "clk_uart_baud%d", clk_sel);
+
+		clk = clk_get(port->dev, clk_name);
+		if (!IS_ERR(clk))
+			rate = clk_get_rate(clk);
+		else
+			rate = 1;
+
+		*baud = rate / (16 * (ubrdiv + 1));
+		dev_dbg(port->dev, "calculated baud %d\n", *baud);
+	}
+
+}
+
+static int __init
+s3c24xx_serial_console_setup(struct console *co, char *options)
+{
+	struct uart_port *port;
+	int baud = 9600;
+	int bits = 8;
+	int parity = 'n';
+	int flow = 'n';
+
+	/* is this a valid port */
+
+	if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
+		co->index = 0;
+
+	port = &s3c24xx_serial_ports[co->index].port;
+
+	/* is the port configured? */
+
+	if (port->mapbase == 0x0)
+		return -ENODEV;
+
+	cons_uart = port;
+
+	/*
+	 * Check whether an invalid uart number has been specified, and
+	 * if so, search for the first available port that does have
+	 * console support.
+	 */
+	if (options)
+		uart_parse_options(options, &baud, &parity, &bits, &flow);
+	else
+		s3c24xx_serial_get_options(port, &baud, &parity, &bits);
+
+	dev_dbg(port->dev, "baud %d\n", baud);
+
+	return uart_set_options(port, co, baud, parity, bits, flow);
+}
+
+static struct console s3c24xx_serial_console = {
+	.name		= S3C24XX_SERIAL_NAME,
+	.device		= uart_console_device,
+	.flags		= CON_PRINTBUFFER,
+	.index		= -1,
+	.write		= s3c24xx_serial_console_write,
+	.setup		= s3c24xx_serial_console_setup,
+	.data		= &s3c24xx_uart_drv,
+};
+#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */
+
+#ifdef CONFIG_CPU_S3C2410
+static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2410 UART",
+		.type		= PORT_S3C2410,
+		.fifosize	= 16,
+		.rx_fifomask	= S3C2410_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2410_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2410_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2410_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2410_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2410_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
+		.num_clks	= 2,
+		.clksel_mask	= S3C2410_UCON_CLKMASK,
+		.clksel_shift	= S3C2410_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2410_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2410_serial_drv_data)
+#else
+#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#ifdef CONFIG_CPU_S3C2412
+static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2412 UART",
+		.type		= PORT_S3C2412,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C2412_UCON_CLKMASK,
+		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2412_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2412_serial_drv_data)
+#else
+#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \
+	defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442)
+static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C2440 UART",
+		.type		= PORT_S3C2440,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C2412_UCON_CLKMASK,
+		.clksel_shift	= S3C2412_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C2440_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2440_serial_drv_data)
+#else
+#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410)
+static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S3C6400 UART",
+		.type		= PORT_S3C6400,
+		.fifosize	= 64,
+		.has_divslot	= 1,
+		.rx_fifomask	= S3C2440_UFSTAT_RXMASK,
+		.rx_fifoshift	= S3C2440_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S3C2440_UFSTAT_RXFULL,
+		.tx_fifofull	= S3C2440_UFSTAT_TXFULL,
+		.tx_fifomask	= S3C2440_UFSTAT_TXMASK,
+		.tx_fifoshift	= S3C2440_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL2,
+		.num_clks	= 4,
+		.clksel_mask	= S3C6400_UCON_CLKMASK,
+		.clksel_shift	= S3C6400_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S3C2410_UCON_DEFAULT,
+		.ufcon		= S3C2410_UFCON_DEFAULT,
+	},
+};
+#define S3C6400_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c6400_serial_drv_data)
+#else
+#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+#ifdef CONFIG_CPU_S5PV210
+static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
+	.info = &(struct s3c24xx_uart_info) {
+		.name		= "Samsung S5PV210 UART",
+		.type		= PORT_S3C6400,
+		.has_divslot	= 1,
+		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,
+		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,
+		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,
+		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,
+		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,
+		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,
+		.num_clks	= 2,
+		.clksel_mask	= S5PV210_UCON_CLKMASK,
+		.clksel_shift	= S5PV210_UCON_CLKSHIFT,
+	},
+	.def_cfg = &(struct s3c2410_uartcfg) {
+		.ucon		= S5PV210_UCON_DEFAULT,
+		.ufcon		= S5PV210_UFCON_DEFAULT,
+	},
+	.fifosize = { 256, 64, 16, 16 },
+};
+#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data)
+#else
+#define S5PV210_SERIAL_DRV_DATA	(kernel_ulong_t)NULL
+#endif
+
+#if defined(CONFIG_ARCH_EXYNOS)
+#define EXYNOS_COMMON_SERIAL_DRV_DATA				\
+	.info = &(struct s3c24xx_uart_info) {			\
+		.name		= "Samsung Exynos UART",	\
+		.type		= PORT_S3C6400,			\
+		.has_divslot	= 1,				\
+		.rx_fifomask	= S5PV210_UFSTAT_RXMASK,	\
+		.rx_fifoshift	= S5PV210_UFSTAT_RXSHIFT,	\
+		.rx_fifofull	= S5PV210_UFSTAT_RXFULL,	\
+		.tx_fifofull	= S5PV210_UFSTAT_TXFULL,	\
+		.tx_fifomask	= S5PV210_UFSTAT_TXMASK,	\
+		.tx_fifoshift	= S5PV210_UFSTAT_TXSHIFT,	\
+		.def_clk_sel	= S3C2410_UCON_CLKSEL0,		\
+		.num_clks	= 1,				\
+		.clksel_mask	= 0,				\
+		.clksel_shift	= 0,				\
+	},							\
+	.def_cfg = &(struct s3c2410_uartcfg) {			\
+		.ucon		= S5PV210_UCON_DEFAULT,		\
+		.ufcon		= S5PV210_UFCON_DEFAULT,	\
+		.has_fracval	= 1,				\
+	}							\
+
+static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
+	EXYNOS_COMMON_SERIAL_DRV_DATA,
+	.fifosize = { 256, 64, 16, 16 },
+};
+
+static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = {
+	EXYNOS_COMMON_SERIAL_DRV_DATA,
+	.fifosize = { 64, 256, 16, 256 },
+};
+
+#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data)
+#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data)
+#else
+#define EXYNOS4210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#define EXYNOS5433_SERIAL_DRV_DATA (kernel_ulong_t)NULL
+#endif
+
+static const struct platform_device_id s3c24xx_serial_driver_ids[] = {
+	{
+		.name		= "s3c2410-uart",
+		.driver_data	= S3C2410_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c2412-uart",
+		.driver_data	= S3C2412_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c2440-uart",
+		.driver_data	= S3C2440_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s3c6400-uart",
+		.driver_data	= S3C6400_SERIAL_DRV_DATA,
+	}, {
+		.name		= "s5pv210-uart",
+		.driver_data	= S5PV210_SERIAL_DRV_DATA,
+	}, {
+		.name		= "exynos4210-uart",
+		.driver_data	= EXYNOS4210_SERIAL_DRV_DATA,
+	}, {
+		.name		= "exynos5433-uart",
+		.driver_data	= EXYNOS5433_SERIAL_DRV_DATA,
+	},
+	{ },
+};
+MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids);
+
+#ifdef CONFIG_OF
+static const struct of_device_id s3c24xx_uart_dt_match[] = {
+	{ .compatible = "samsung,s3c2410-uart",
+		.data = (void *)S3C2410_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c2412-uart",
+		.data = (void *)S3C2412_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c2440-uart",
+		.data = (void *)S3C2440_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s3c6400-uart",
+		.data = (void *)S3C6400_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,s5pv210-uart",
+		.data = (void *)S5PV210_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,exynos4210-uart",
+		.data = (void *)EXYNOS4210_SERIAL_DRV_DATA },
+	{ .compatible = "samsung,exynos5433-uart",
+		.data = (void *)EXYNOS5433_SERIAL_DRV_DATA },
+	{},
+};
+MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
+#endif
+
+static struct platform_driver samsung_serial_driver = {
+	.probe		= s3c24xx_serial_probe,
+	.remove		= s3c24xx_serial_remove,
+	.id_table	= s3c24xx_serial_driver_ids,
+	.driver		= {
+		.name	= "samsung-uart",
+		.pm	= SERIAL_SAMSUNG_PM_OPS,
+		.of_match_table	= of_match_ptr(s3c24xx_uart_dt_match),
+	},
+};
+
+module_platform_driver(samsung_serial_driver);
+
+#ifdef CONFIG_SERIAL_SAMSUNG_CONSOLE
+/*
+ * Early console.
+ */
+
+static void wr_reg_barrier(struct uart_port *port, u32 reg, u32 val)
+{
+	switch (port->iotype) {
+	case UPIO_MEM:
+		writeb(val, portaddr(port, reg));
+		break;
+	case UPIO_MEM32:
+		writel(val, portaddr(port, reg));
+		break;
+	}
+}
+
+struct samsung_early_console_data {
+	u32 txfull_mask;
+};
+
+static void samsung_early_busyuart(struct uart_port *port)
+{
+	while (!(readl(port->membase + S3C2410_UTRSTAT) & S3C2410_UTRSTAT_TXFE))
+		;
+}
+
+static void samsung_early_busyuart_fifo(struct uart_port *port)
+{
+	struct samsung_early_console_data *data = port->private_data;
+
+	while (readl(port->membase + S3C2410_UFSTAT) & data->txfull_mask)
+		;
+}
+
+static void samsung_early_putc(struct uart_port *port, int c)
+{
+	if (readl(port->membase + S3C2410_UFCON) & S3C2410_UFCON_FIFOMODE)
+		samsung_early_busyuart_fifo(port);
+	else
+		samsung_early_busyuart(port);
+
+	wr_reg_barrier(port, S3C2410_UTXH, c);
+}
+
+static void samsung_early_write(struct console *con, const char *s,
+				unsigned int n)
+{
+	struct earlycon_device *dev = con->data;
+
+	uart_console_write(&dev->port, s, n, samsung_early_putc);
+}
+
+static int __init samsung_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	if (!device->port.membase)
+		return -ENODEV;
+
+	device->con->write = samsung_early_write;
+	return 0;
+}
+
+/* S3C2410 */
+static struct samsung_early_console_data s3c2410_early_console_data = {
+	.txfull_mask = S3C2410_UFSTAT_TXFULL,
+};
+
+static int __init s3c2410_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s3c2410_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s3c2410, "samsung,s3c2410-uart",
+			s3c2410_early_console_setup);
+
+/* S3C2412, S3C2440, S3C64xx */
+static struct samsung_early_console_data s3c2440_early_console_data = {
+	.txfull_mask = S3C2440_UFSTAT_TXFULL,
+};
+
+static int __init s3c2440_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s3c2440_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s3c2412, "samsung,s3c2412-uart",
+			s3c2440_early_console_setup);
+OF_EARLYCON_DECLARE(s3c2440, "samsung,s3c2440-uart",
+			s3c2440_early_console_setup);
+OF_EARLYCON_DECLARE(s3c6400, "samsung,s3c6400-uart",
+			s3c2440_early_console_setup);
+
+/* S5PV210, EXYNOS */
+static struct samsung_early_console_data s5pv210_early_console_data = {
+	.txfull_mask = S5PV210_UFSTAT_TXFULL,
+};
+
+static int __init s5pv210_early_console_setup(struct earlycon_device *device,
+					      const char *opt)
+{
+	device->port.private_data = &s5pv210_early_console_data;
+	return samsung_early_console_setup(device, opt);
+}
+OF_EARLYCON_DECLARE(s5pv210, "samsung,s5pv210-uart",
+			s5pv210_early_console_setup);
+OF_EARLYCON_DECLARE(exynos4210, "samsung,exynos4210-uart",
+			s5pv210_early_console_setup);
+#endif
+
+MODULE_ALIAS("platform:samsung-uart");
+MODULE_DESCRIPTION("Samsung SoC Serial port driver");
+MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index aad640b..78b21a9 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -220,11 +220,7 @@
 	if (retval == 0) {
 		if (uart_console(uport) && uport->cons->cflag) {
 			tty->termios.c_cflag = uport->cons->cflag;
-			tty->termios.c_ispeed = uport->cons->ispeed;
-			tty->termios.c_ospeed = uport->cons->ospeed;
 			uport->cons->cflag = 0;
-			uport->cons->ispeed = 0;
-			uport->cons->ospeed = 0;
 		}
 		/*
 		 * Initialise the hardware port settings.
@@ -292,11 +288,8 @@
 		/*
 		 * Turn off DTR and RTS early.
 		 */
-		if (uport && uart_console(uport) && tty) {
+		if (uport && uart_console(uport) && tty)
 			uport->cons->cflag = tty->termios.c_cflag;
-			uport->cons->ispeed = tty->termios.c_ispeed;
-			uport->cons->ospeed = tty->termios.c_ospeed;
-		}
 
 		if (!tty || C_HUPCL(tty))
 			uart_port_dtr_rts(uport, 0);
@@ -2128,11 +2121,8 @@
 	 * Allow the setting of the UART parameters with a NULL console
 	 * too:
 	 */
-	if (co) {
+	if (co)
 		co->cflag = termios.c_cflag;
-		co->ispeed = termios.c_ispeed;
-		co->ospeed = termios.c_ospeed;
-	}
 
 	return 0;
 }
@@ -2266,8 +2256,6 @@
 		 */
 		memset(&termios, 0, sizeof(struct ktermios));
 		termios.c_cflag = uport->cons->cflag;
-		termios.c_ispeed = uport->cons->ispeed;
-		termios.c_ospeed = uport->cons->ospeed;
 
 		/*
 		 * If that's unset, use the tty termios setting.
@@ -2632,6 +2620,7 @@
 	*index = co->index;
 	return p->tty_driver;
 }
+EXPORT_SYMBOL_GPL(uart_console_device);
 
 static ssize_t uart_get_attr_uartclk(struct device *dev,
 	struct device_attribute *attr, char *buf)
diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c
index 07573de..685041d 100644
--- a/drivers/tty/serial/sprd_serial.c
+++ b/drivers/tty/serial/sprd_serial.c
@@ -922,6 +922,34 @@
 	}
 }
 
+#ifdef CONFIG_CONSOLE_POLL
+static int sprd_poll_init(struct uart_port *port)
+{
+	if (port->state->pm_state != UART_PM_STATE_ON) {
+		sprd_pm(port, UART_PM_STATE_ON, 0);
+		port->state->pm_state = UART_PM_STATE_ON;
+	}
+
+	return 0;
+}
+
+static int sprd_poll_get_char(struct uart_port *port)
+{
+	while (!(serial_in(port, SPRD_STS1) & SPRD_RX_FIFO_CNT_MASK))
+		cpu_relax();
+
+	return serial_in(port, SPRD_RXD);
+}
+
+static void sprd_poll_put_char(struct uart_port *port, unsigned char ch)
+{
+	while (serial_in(port, SPRD_STS1) & SPRD_TX_FIFO_CNT_MASK)
+		cpu_relax();
+
+	serial_out(port, SPRD_TXD, ch);
+}
+#endif
+
 static const struct uart_ops serial_sprd_ops = {
 	.tx_empty = sprd_tx_empty,
 	.get_mctrl = sprd_get_mctrl,
@@ -939,6 +967,11 @@
 	.config_port = sprd_config_port,
 	.verify_port = sprd_verify_port,
 	.pm = sprd_pm,
+#ifdef CONFIG_CONSOLE_POLL
+	.poll_init	= sprd_poll_init,
+	.poll_get_char	= sprd_poll_get_char,
+	.poll_put_char	= sprd_poll_put_char,
+#endif
 };
 
 #ifdef CONFIG_SERIAL_SPRD_CONSOLE
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 573b205..0329f5e 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -54,6 +54,8 @@
 #include <asm/ptrace.h>
 #include <asm/irq_regs.h>
 
+#include <trace/hooks/sysrqcrash.h>
+
 /* Whether we react on sysrq keys or just ignore them */
 static int __read_mostly sysrq_enabled = CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE;
 static bool __read_mostly sysrq_always_enabled;
@@ -137,6 +139,8 @@
 	/* release the RCU read lock before crashing */
 	rcu_read_unlock();
 
+	trace_android_vh_sysrq_crash(current);
+
 	panic("sysrq triggered crash\n");
 }
 static struct sysrq_key_op sysrq_crash_op = {
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 69dd48f..1de227c 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -18,6 +18,7 @@
 #include <linux/sched/mm.h>
 #include <linux/list.h>
 #include <linux/slab.h>
+#include <linux/kcov.h>
 #include <linux/ioctl.h>
 #include <linux/usb.h>
 #include <linux/usbdevice_fs.h>
@@ -5458,6 +5459,8 @@
 	hub_dev = hub->intfdev;
 	intf = to_usb_interface(hub_dev);
 
+	kcov_remote_start_usb((u64)hdev->bus->busnum);
+
 	dev_dbg(hub_dev, "state %d ports %d chg %04x evt %04x\n",
 			hdev->state, hdev->maxchild,
 			/* NOTE: expects max 15 ports... */
@@ -5564,6 +5567,8 @@
 	/* Balance the stuff in kick_hub_wq() and allow autosuspend */
 	usb_autopm_put_interface(intf);
 	kref_put(&hub->kref, hub_release);
+
+	kcov_remote_stop();
 }
 
 static const struct usb_device_id hub_id_table[] = {
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index a118c44..40fee8e 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -12,6 +12,8 @@
 #include <linux/usb/hcd.h>
 #include "usb.h"
 
+#include <trace/hooks/usb.h>
+
 struct quirk_entry {
 	u16 vid;
 	u16 pid;
@@ -680,6 +682,8 @@
 	if (udev->descriptor.bDeviceClass == USB_CLASS_HUB)
 		udev->persist_enabled = 1;
 #endif	/* CONFIG_USB_DEFAULT_PERSIST */
+
+	trace_android_vh_usb_persist_overwrite(udev);
 }
 
 void usb_detect_interface_quirks(struct usb_device *udev)
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 2c68ec6..335a13d 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -295,12 +295,6 @@
 	return 0;
 }
 
-static const struct clk_bulk_data dwc3_core_clks[] = {
-	{ .id = "ref" },
-	{ .id = "bus_early" },
-	{ .id = "suspend" },
-};
-
 /*
  * dwc3_frame_length_adjustment - Adjusts frame length if required
  * @dwc3: Pointer to our controller context structure
@@ -1418,11 +1412,6 @@
 	if (!dwc)
 		return -ENOMEM;
 
-	dwc->clks = devm_kmemdup(dev, dwc3_core_clks, sizeof(dwc3_core_clks),
-				 GFP_KERNEL);
-	if (!dwc->clks)
-		return -ENOMEM;
-
 	dwc->dev = dev;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -1453,22 +1442,23 @@
 
 	dwc3_get_properties(dwc);
 
-	dwc->reset = devm_reset_control_get_optional_shared(dev, NULL);
+	dwc->reset = devm_reset_control_array_get(dev, true, true);
 	if (IS_ERR(dwc->reset))
 		return PTR_ERR(dwc->reset);
 
 	if (dev->of_node) {
-		dwc->num_clks = ARRAY_SIZE(dwc3_core_clks);
-
-		ret = devm_clk_bulk_get(dev, dwc->num_clks, dwc->clks);
+		ret = devm_clk_bulk_get_all(dev, &dwc->clks);
 		if (ret == -EPROBE_DEFER)
 			return ret;
 		/*
 		 * Clocks are optional, but new DT platforms should support all
 		 * clocks as required by the DT-binding.
 		 */
-		if (ret)
+		if (ret < 0)
 			dwc->num_clks = 0;
+		else
+			dwc->num_clks = ret;
+
 	}
 
 	ret = reset_control_deassert(dwc->reset);
diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index da296f8..b055f047 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -21,10 +21,12 @@
 #include <linux/debugfs.h>
 #include <linux/wait.h>
 #include <linux/workqueue.h>
+#include <linux/android_kabi.h>
 
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/otg.h>
+#include <linux/usb/role.h>
 #include <linux/ulpi/interface.h>
 
 #include <linux/phy/phy.h>
@@ -643,6 +645,8 @@
 	dma_addr_t		dma;
 
 	struct dwc3		*dwc;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define DWC3_EP_FLAG_STALLED	BIT(0)
@@ -732,6 +736,9 @@
 	/* For isochronous START TRANSFER workaround only */
 	u8			combo_num;
 	int			start_cmd_status;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 enum dwc3_phy {
@@ -841,6 +848,9 @@
 	u32	hwparams6;
 	u32	hwparams7;
 	u32	hwparams8;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* HWPARAMS0 */
@@ -909,6 +919,9 @@
 	unsigned		needs_extra_trb:1;
 	unsigned		direction:1;
 	unsigned		mapped:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /*
@@ -964,6 +977,9 @@
  * @hsphy_mode: UTMI phy mode, one of following:
  *		- USBPHY_INTERFACE_MODE_UTMI
  *		- USBPHY_INTERFACE_MODE_UTMIW
+ * @role_sw: usb_role_switch handle
+ * @role_switch_default_mode: default operation mode of controller while
+ *			usb role is USB_ROLE_NONE.
  * @usb2_phy: pointer to USB2 PHY
  * @usb3_phy: pointer to USB3 PHY
  * @usb2_generic_phy: pointer to USB2 PHY
@@ -1100,6 +1116,8 @@
 	struct extcon_dev	*edev;
 	struct notifier_block	edev_nb;
 	enum usb_phy_interface	hsphy_mode;
+	struct usb_role_switch	*role_sw;
+	enum usb_dr_mode	role_switch_default_mode;
 
 	u32			fladj;
 	u32			irq_gadget;
@@ -1239,6 +1257,11 @@
 	unsigned		dis_split_quirk:1;
 
 	u16			imod_interval;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define INCRX_BURST_MODE 0
diff --git a/drivers/usb/dwc3/drd.c b/drivers/usb/dwc3/drd.c
index c946d64..db68d48 100644
--- a/drivers/usb/dwc3/drd.c
+++ b/drivers/usb/dwc3/drd.c
@@ -476,6 +476,92 @@
 	return edev;
 }
 
+#if IS_ENABLED(CONFIG_USB_ROLE_SWITCH)
+#define ROLE_SWITCH 1
+static int dwc3_usb_role_switch_set(struct device *dev, enum usb_role role)
+{
+	struct dwc3 *dwc = dev_get_drvdata(dev);
+	u32 mode;
+
+	switch (role) {
+	case USB_ROLE_HOST:
+		mode = DWC3_GCTL_PRTCAP_HOST;
+		break;
+	case USB_ROLE_DEVICE:
+		mode = DWC3_GCTL_PRTCAP_DEVICE;
+		break;
+	default:
+		if (dwc->role_switch_default_mode == USB_DR_MODE_HOST)
+			mode = DWC3_GCTL_PRTCAP_HOST;
+		else
+			mode = DWC3_GCTL_PRTCAP_DEVICE;
+		break;
+	}
+
+	dwc3_set_mode(dwc, mode);
+	return 0;
+}
+
+static enum usb_role dwc3_usb_role_switch_get(struct device *dev)
+{
+	struct dwc3 *dwc = dev_get_drvdata(dev);
+	unsigned long flags;
+	enum usb_role role;
+
+	spin_lock_irqsave(&dwc->lock, flags);
+	switch (dwc->current_dr_role) {
+	case DWC3_GCTL_PRTCAP_HOST:
+		role = USB_ROLE_HOST;
+		break;
+	case DWC3_GCTL_PRTCAP_DEVICE:
+		role = USB_ROLE_DEVICE;
+		break;
+	case DWC3_GCTL_PRTCAP_OTG:
+		role = dwc->current_otg_role;
+		break;
+	default:
+		if (dwc->role_switch_default_mode == USB_DR_MODE_HOST)
+			role = USB_ROLE_HOST;
+		else
+			role = USB_ROLE_DEVICE;
+		break;
+	}
+	spin_unlock_irqrestore(&dwc->lock, flags);
+	return role;
+}
+
+static int dwc3_setup_role_switch(struct dwc3 *dwc)
+{
+	struct usb_role_switch_desc dwc3_role_switch = {NULL};
+	const char *str;
+	u32 mode;
+	int ret;
+
+	ret = device_property_read_string(dwc->dev, "role-switch-default-mode",
+					  &str);
+	if (ret >= 0  && !strncmp(str, "host", strlen("host"))) {
+		dwc->role_switch_default_mode = USB_DR_MODE_HOST;
+		mode = DWC3_GCTL_PRTCAP_HOST;
+	} else {
+		dwc->role_switch_default_mode = USB_DR_MODE_PERIPHERAL;
+		mode = DWC3_GCTL_PRTCAP_DEVICE;
+	}
+
+	dwc3_role_switch.fwnode = dev_fwnode(dwc->dev);
+	dwc3_role_switch.set = dwc3_usb_role_switch_set;
+	dwc3_role_switch.get = dwc3_usb_role_switch_get;
+	dwc->role_sw = usb_role_switch_register(dwc->dev, &dwc3_role_switch);
+	if (IS_ERR(dwc->role_sw))
+		return PTR_ERR(dwc->role_sw);
+
+	dwc3_set_mode(dwc, mode);
+	return 0;
+}
+#else
+#define ROLE_SWITCH 0
+#define dwc3_setup_role_switch(x) 0
+#endif
+
 int dwc3_drd_init(struct dwc3 *dwc)
 {
 	int ret, irq;
@@ -484,7 +570,12 @@
 	if (IS_ERR(dwc->edev))
 		return PTR_ERR(dwc->edev);
 
-	if (dwc->edev) {
+	if (ROLE_SWITCH &&
+	    device_property_read_bool(dwc->dev, "usb-role-switch")) {
+		ret = dwc3_setup_role_switch(dwc);
+		if (ret < 0)
+			return ret;
+	} else if (dwc->edev) {
 		dwc->edev_nb.notifier_call = dwc3_drd_notifier;
 		ret = extcon_register_notifier(dwc->edev, EXTCON_USB_HOST,
 					       &dwc->edev_nb);
@@ -531,6 +622,9 @@
 {
 	unsigned long flags;
 
+	if (dwc->role_sw)
+		usb_role_switch_unregister(dwc->role_sw);
+
 	if (dwc->edev)
 		extcon_unregister_notifier(dwc->edev, EXTCON_USB_HOST,
 					   &dwc->edev_nb);
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 09ba3af..35f3090ea 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -216,6 +216,12 @@
 config USB_F_TCM
 	tristate
 
+config USB_F_ACC
+	tristate
+
+config USB_F_AUDIO_SRC
+	tristate
+
 # this first set of drivers all depend on bulk-capable hardware.
 
 config USB_CONFIGFS
@@ -230,6 +236,14 @@
 	  appropriate symbolic links.
 	  For more information see Documentation/usb/gadget_configfs.rst.
 
+config USB_CONFIGFS_UEVENT
+	bool "Uevent notification of Gadget state"
+	depends on USB_CONFIGFS
+	help
+	  Enable uevent notifications to userspace when the gadget
+	  state changes. The gadget can be in any of the following
+	  three states: "CONNECTED/DISCONNECTED/CONFIGURED"
+
 config USB_CONFIGFS_SERIAL
 	bool "Generic serial bulk in/out"
 	depends on USB_CONFIGFS
@@ -371,6 +385,23 @@
 	  implemented in kernel space (for instance Ethernet, serial or
 	  mass storage) and other are implemented in user space.
 
+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
+
+config USB_CONFIGFS_F_AUDIO_SRC
+	bool "Audio Source gadget"
+	depends on USB_CONFIGFS
+	depends on SND
+	select SND_PCM
+	select USB_F_AUDIO_SRC
+	help
+	  USB gadget Audio Source support
+
 config USB_CONFIGFS_F_UAC1
 	bool "Audio Class 1.0"
 	depends on USB_CONFIGFS
@@ -485,34 +516,6 @@
 	  Both protocols can work on USB2.0 and USB3.0.
 	  UAS utilizes the USB 3.0 feature called streams support.
 
-choice
-	tristate "USB Gadget precomposed configurations"
-	default USB_ETH
-	optional
-	help
-	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
-	  driver through the abstract "gadget" API.  Some other operating
-	  systems call these "client" drivers, of which "class drivers"
-	  are a subset (implementing a USB device class specification).
-	  A gadget driver implements one or more USB functions using
-	  the peripheral hardware.
-
-	  Gadget drivers are hardware-neutral, or "platform independent",
-	  except that they sometimes must understand quirks or limitations
-	  of the particular controllers they work with.  For example, when
-	  a controller doesn't support alternate configurations or provide
-	  enough of the right types of endpoints, the gadget driver might
-	  not be able work with that controller, or might need to implement
-	  a less common variant of a device class protocol.
-
-	  The available choices each represent a single precomposed USB
-	  gadget configuration. In the device model, each option contains
-	  both the device instantiation as a child for a USB gadget
-	  controller, and the relevant drivers for each function declared
-	  by the device.
-
 source "drivers/usb/gadget/legacy/Kconfig"
 
-endchoice
-
 endif # USB_GADGET
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 3d4710c..986da7a 100644
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -10,6 +10,32 @@
 #include "u_f.h"
 #include "u_os_desc.h"
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+#include <linux/platform_device.h>
+#include <linux/kdev_t.h>
+#include <linux/usb/ch9.h>
+
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+extern int acc_ctrlrequest(struct usb_composite_dev *cdev,
+				const struct usb_ctrlrequest *ctrl);
+void acc_disconnect(void);
+#endif
+static struct class *android_class;
+static struct device *android_device;
+static int index;
+static int gadget_index;
+
+struct device *create_function_device(char *name)
+{
+	if (android_device && !IS_ERR(android_device))
+		return device_create(android_class, android_device,
+			MKDEV(0, index++), NULL, name);
+	else
+		return ERR_PTR(-EINVAL);
+}
+EXPORT_SYMBOL_GPL(create_function_device);
+#endif
+
 int check_user_usb_string(const char *name,
 		struct usb_gadget_strings *stringtab_dev)
 {
@@ -63,6 +89,12 @@
 	char qw_sign[OS_STRING_QW_SIGN_LEN];
 	spinlock_t spinlock;
 	bool unbind;
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	bool connected;
+	bool sw_connected;
+	struct work_struct work;
+	struct device *dev;
+#endif
 };
 
 static inline struct gadget_info *to_gadget_info(struct config_item *item)
@@ -284,7 +316,7 @@
 
 	mutex_lock(&gi->lock);
 
-	if (!strlen(name)) {
+	if (!strlen(name) || strcmp(name, "none") == 0) {
 		ret = unregister_gadget(gi);
 		if (ret)
 			goto err;
@@ -309,6 +341,36 @@
 	return ret;
 }
 
+static ssize_t gadget_driver_match_existing_only_store(struct config_item *item,
+		const char *page, size_t len)
+{
+	struct gadget_info *gi = to_gadget_info(item);
+	struct usb_gadget_driver *gadget_driver = &(gi->composite.gadget_driver);
+	bool match_existing_only;
+	int ret;
+
+	ret = kstrtobool(page, &match_existing_only);
+	if (ret)
+		return ret;
+
+	if (match_existing_only)
+		gadget_driver->match_existing_only = 1;
+	else
+		gadget_driver->match_existing_only = 0;
+
+	return len;
+}
+
+static ssize_t gadget_driver_match_existing_only_show(struct config_item *item,
+		char *page)
+{
+	struct gadget_info *gi = to_gadget_info(item);
+	struct usb_gadget_driver *gadget_driver = &(gi->composite.gadget_driver);
+	bool match_existing_only = !!gadget_driver->match_existing_only;
+
+	return sprintf(page, "%s\n", match_existing_only ? "true" : "false");
+}
+
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceClass);
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceSubClass);
 CONFIGFS_ATTR(gadget_dev_desc_, bDeviceProtocol);
@@ -318,6 +380,7 @@
 CONFIGFS_ATTR(gadget_dev_desc_, bcdDevice);
 CONFIGFS_ATTR(gadget_dev_desc_, bcdUSB);
 CONFIGFS_ATTR(gadget_dev_desc_, UDC);
+CONFIGFS_ATTR(gadget_, driver_match_existing_only);
 
 static struct configfs_attribute *gadget_root_attrs[] = {
 	&gadget_dev_desc_attr_bDeviceClass,
@@ -329,6 +392,7 @@
 	&gadget_dev_desc_attr_bcdDevice,
 	&gadget_dev_desc_attr_bcdUSB,
 	&gadget_dev_desc_attr_UDC,
+	&gadget_attr_driver_match_existing_only,
 	NULL,
 };
 
@@ -1391,6 +1455,57 @@
 	return ret;
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static void android_work(struct work_struct *data)
+{
+	struct gadget_info *gi = container_of(data, struct gadget_info, work);
+	struct usb_composite_dev *cdev = &gi->cdev;
+	char *disconnected[2] = { "USB_STATE=DISCONNECTED", NULL };
+	char *connected[2]    = { "USB_STATE=CONNECTED", NULL };
+	char *configured[2]   = { "USB_STATE=CONFIGURED", NULL };
+	/* 0-connected 1-configured 2-disconnected*/
+	bool status[3] = { false, false, false };
+	unsigned long flags;
+	bool uevent_sent = false;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (cdev->config)
+		status[1] = true;
+
+	if (gi->connected != gi->sw_connected) {
+		if (gi->connected)
+			status[0] = true;
+		else
+			status[2] = true;
+		gi->sw_connected = gi->connected;
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+
+	if (status[0]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, connected);
+		pr_info("%s: sent uevent %s\n", __func__, connected[0]);
+		uevent_sent = true;
+	}
+
+	if (status[1]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, configured);
+		pr_info("%s: sent uevent %s\n", __func__, configured[0]);
+		uevent_sent = true;
+	}
+
+	if (status[2]) {
+		kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected);
+		pr_info("%s: sent uevent %s\n", __func__, disconnected[0]);
+		uevent_sent = true;
+	}
+
+	if (!uevent_sent) {
+		pr_info("%s: did not send uevent (%d %d %p)\n", __func__,
+			gi->connected, gi->sw_connected, cdev->config);
+	}
+}
+#endif
+
 static void configfs_composite_unbind(struct usb_gadget *gadget)
 {
 	struct usb_composite_dev	*cdev;
@@ -1416,6 +1531,50 @@
 	spin_unlock_irqrestore(&gi->spinlock, flags);
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static int android_setup(struct usb_gadget *gadget,
+			const struct usb_ctrlrequest *c)
+{
+	struct usb_composite_dev *cdev = get_gadget_data(gadget);
+	unsigned long flags;
+	struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev);
+	int value = -EOPNOTSUPP;
+	struct usb_function_instance *fi;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (!gi->connected) {
+		gi->connected = 1;
+		schedule_work(&gi->work);
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+	list_for_each_entry(fi, &gi->available_func, cfs_list) {
+		if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) {
+			value = fi->f->setup(fi->f, c);
+			if (value >= 0)
+				break;
+		}
+	}
+
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+	if (value < 0)
+		value = acc_ctrlrequest(cdev, c);
+#endif
+
+	if (value < 0)
+		value = composite_setup(gadget, c);
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (c->bRequest == USB_REQ_SET_CONFIGURATION &&
+						cdev->config) {
+		schedule_work(&gi->work);
+	}
+	spin_unlock_irqrestore(&cdev->lock, flags);
+
+	return value;
+}
+
+#else // CONFIG_USB_CONFIGFS_UEVENT
+
 static int configfs_composite_setup(struct usb_gadget *gadget,
 		const struct usb_ctrlrequest *ctrl)
 {
@@ -1441,6 +1600,8 @@
 	return ret;
 }
 
+#endif // CONFIG_USB_CONFIGFS_UEVENT
+
 static void configfs_composite_disconnect(struct usb_gadget *gadget)
 {
 	struct usb_composite_dev *cdev;
@@ -1451,6 +1612,14 @@
 	if (!cdev)
 		return;
 
+#ifdef CONFIG_USB_CONFIGFS_F_ACC
+	/*
+	 * accessory HID support can be active while the
+	 * accessory function is not actually enabled,
+	 * so we need to inform it when we are disconnected.
+	 */
+	acc_disconnect();
+#endif
 	gi = container_of(cdev, struct gadget_info, cdev);
 	spin_lock_irqsave(&gi->spinlock, flags);
 	cdev = get_gadget_data(gadget);
@@ -1459,6 +1628,10 @@
 		return;
 	}
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	gi->connected = 0;
+	schedule_work(&gi->work);
+#endif
 	composite_disconnect(gadget);
 	spin_unlock_irqrestore(&gi->spinlock, flags);
 }
@@ -1511,10 +1684,13 @@
 	.bind           = configfs_composite_bind,
 	.unbind         = configfs_composite_unbind,
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	.setup          = android_setup,
+#else
 	.setup          = configfs_composite_setup,
+#endif
 	.reset          = configfs_composite_disconnect,
 	.disconnect     = configfs_composite_disconnect,
-
 	.suspend	= configfs_composite_suspend,
 	.resume		= configfs_composite_resume,
 
@@ -1526,6 +1702,91 @@
 	.match_existing_only = 1,
 };
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+static ssize_t state_show(struct device *pdev, struct device_attribute *attr,
+			char *buf)
+{
+	struct gadget_info *dev = dev_get_drvdata(pdev);
+	struct usb_composite_dev *cdev;
+	char *state = "DISCONNECTED";
+	unsigned long flags;
+
+	if (!dev)
+		goto out;
+
+	cdev = &dev->cdev;
+
+	if (!cdev)
+		goto out;
+
+	spin_lock_irqsave(&cdev->lock, flags);
+	if (cdev->config)
+		state = "CONFIGURED";
+	else if (dev->connected)
+		state = "CONNECTED";
+	spin_unlock_irqrestore(&cdev->lock, flags);
+out:
+	return sprintf(buf, "%s\n", state);
+}
+
+static DEVICE_ATTR(state, S_IRUGO, state_show, NULL);
+
+static struct device_attribute *android_usb_attributes[] = {
+	&dev_attr_state,
+	NULL
+};
+
+static int android_device_create(struct gadget_info *gi)
+{
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+
+	INIT_WORK(&gi->work, android_work);
+	gi->dev = device_create(android_class, NULL,
+			MKDEV(0, 0), NULL, "android%d", gadget_index++);
+	if (IS_ERR(gi->dev))
+		return PTR_ERR(gi->dev);
+
+	dev_set_drvdata(gi->dev, gi);
+	if (!android_device)
+		android_device = gi->dev;
+
+	attrs = android_usb_attributes;
+	while ((attr = *attrs++)) {
+		int err;
+
+		err = device_create_file(gi->dev, attr);
+		if (err) {
+			device_destroy(gi->dev->class,
+				       gi->dev->devt);
+			return err;
+		}
+	}
+
+	return 0;
+}
+
+static void android_device_destroy(struct gadget_info *gi)
+{
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+
+	attrs = android_usb_attributes;
+	while ((attr = *attrs++))
+		device_remove_file(gi->dev, attr);
+	device_destroy(gi->dev->class, gi->dev->devt);
+}
+#else
+static inline int android_device_create(struct gadget_info *gi)
+{
+	return 0;
+}
+
+static inline void android_device_destroy(struct gadget_info *gi)
+{
+}
+#endif
+
 static struct config_group *gadgets_make(
 		struct config_group *group,
 		const char *name)
@@ -1578,7 +1839,11 @@
 	if (!gi->composite.gadget_driver.function)
 		goto err;
 
+	if (android_device_create(gi) < 0)
+		goto err;
+
 	return &gi->group;
+
 err:
 	kfree(gi);
 	return ERR_PTR(-ENOMEM);
@@ -1586,7 +1851,11 @@
 
 static void gadgets_drop(struct config_group *group, struct config_item *item)
 {
+	struct gadget_info *gi;
+
+	gi = container_of(to_config_group(item), struct gadget_info, group);
 	config_item_put(item);
+	android_device_destroy(gi);
 }
 
 static struct configfs_group_operations gadgets_ops = {
@@ -1626,6 +1895,13 @@
 	config_group_init(&gadget_subsys.su_group);
 
 	ret = configfs_register_subsystem(&gadget_subsys);
+
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	android_class = class_create(THIS_MODULE, "android_usb");
+	if (IS_ERR(android_class))
+		return PTR_ERR(android_class);
+#endif
+
 	return ret;
 }
 module_init(gadget_cfs_init);
@@ -1633,5 +1909,10 @@
 static void __exit gadget_cfs_exit(void)
 {
 	configfs_unregister_subsystem(&gadget_subsys);
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+	if (!IS_ERR(android_class))
+		class_destroy(android_class);
+#endif
+
 }
 module_exit(gadget_cfs_exit);
diff --git a/drivers/usb/gadget/function/Makefile b/drivers/usb/gadget/function/Makefile
index 5d3a6cf..dd33a12 100644
--- a/drivers/usb/gadget/function/Makefile
+++ b/drivers/usb/gadget/function/Makefile
@@ -50,3 +50,7 @@
 obj-$(CONFIG_USB_F_PRINTER)	+= usb_f_printer.o
 usb_f_tcm-y			:= f_tcm.o
 obj-$(CONFIG_USB_F_TCM)		+= usb_f_tcm.o
+usb_f_accessory-y		:= f_accessory.o
+obj-$(CONFIG_USB_F_ACC)		+= usb_f_accessory.o
+usb_f_audio_source-y		:= f_audio_source.o
+obj-$(CONFIG_USB_F_AUDIO_SRC)	+= usb_f_audio_source.o
diff --git a/drivers/usb/gadget/function/f_accessory.c b/drivers/usb/gadget/function/f_accessory.c
new file mode 100644
index 0000000..b6adf7d
--- /dev/null
+++ b/drivers/usb/gadget/function/f_accessory.c
@@ -0,0 +1,1446 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * 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 DEBUG */
+/* #define VERBOSE_DEBUG */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/poll.h>
+#include <linux/delay.h>
+#include <linux/wait.h>
+#include <linux/err.h>
+#include <linux/interrupt.h>
+#include <linux/kthread.h>
+#include <linux/freezer.h>
+#include <linux/kref.h>
+
+#include <linux/types.h>
+#include <linux/file.h>
+#include <linux/device.h>
+#include <linux/miscdevice.h>
+
+#include <linux/hid.h>
+#include <linux/hiddev.h>
+#include <linux/usb.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/f_accessory.h>
+
+#include <linux/configfs.h>
+#include <linux/usb/composite.h>
+
+#define MAX_INST_NAME_LEN        40
+#define BULK_BUFFER_SIZE    16384
+#define ACC_STRING_SIZE     256
+
+#define PROTOCOL_VERSION    2
+
+/* String IDs */
+#define INTERFACE_STRING_INDEX	0
+
+/* number of tx and rx requests to allocate */
+#define TX_REQ_MAX 4
+#define RX_REQ_MAX 2
+
+struct acc_hid_dev {
+	struct list_head	list;
+	struct hid_device *hid;
+	struct acc_dev *dev;
+	/* accessory defined ID */
+	int id;
+	/* HID report descriptor */
+	u8 *report_desc;
+	/* length of HID report descriptor */
+	int report_desc_len;
+	/* number of bytes of report_desc we have received so far */
+	int report_desc_offset;
+};
+
+struct acc_dev {
+	struct usb_function function;
+	struct usb_composite_dev *cdev;
+	spinlock_t lock;
+	struct acc_dev_ref *ref;
+
+	struct usb_ep *ep_in;
+	struct usb_ep *ep_out;
+
+	/* online indicates state of function_set_alt & function_unbind
+	 * set to 1 when we connect
+	 */
+	int online;
+
+	/* disconnected indicates state of open & release
+	 * Set to 1 when we disconnect.
+	 * Not cleared until our file is closed.
+	 */
+	int disconnected;
+
+	/* strings sent by the host */
+	char manufacturer[ACC_STRING_SIZE];
+	char model[ACC_STRING_SIZE];
+	char description[ACC_STRING_SIZE];
+	char version[ACC_STRING_SIZE];
+	char uri[ACC_STRING_SIZE];
+	char serial[ACC_STRING_SIZE];
+
+	/* for acc_complete_set_string */
+	int string_index;
+
+	/* set to 1 if we have a pending start request */
+	int start_requested;
+
+	int audio_mode;
+
+	/* synchronize access to our device file */
+	atomic_t open_excl;
+
+	struct list_head tx_idle;
+
+	wait_queue_head_t read_wq;
+	wait_queue_head_t write_wq;
+	struct usb_request *rx_req[RX_REQ_MAX];
+	int rx_done;
+
+	/* delayed work for handling ACCESSORY_START */
+	struct delayed_work start_work;
+
+	/* worker for registering and unregistering hid devices */
+	struct work_struct hid_work;
+
+	/* list of active HID devices */
+	struct list_head	hid_list;
+
+	/* list of new HID devices to register */
+	struct list_head	new_hid_list;
+
+	/* list of dead HID devices to unregister */
+	struct list_head	dead_hid_list;
+};
+
+static struct usb_interface_descriptor acc_interface_desc = {
+	.bLength                = USB_DT_INTERFACE_SIZE,
+	.bDescriptorType        = USB_DT_INTERFACE,
+	.bInterfaceNumber       = 0,
+	.bNumEndpoints          = 2,
+	.bInterfaceClass        = USB_CLASS_VENDOR_SPEC,
+	.bInterfaceSubClass     = USB_SUBCLASS_VENDOR_SPEC,
+	.bInterfaceProtocol     = 0,
+};
+
+static struct usb_endpoint_descriptor acc_highspeed_in_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_IN,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+	.wMaxPacketSize         = __constant_cpu_to_le16(512),
+};
+
+static struct usb_endpoint_descriptor acc_highspeed_out_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_OUT,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+	.wMaxPacketSize         = __constant_cpu_to_le16(512),
+};
+
+static struct usb_endpoint_descriptor acc_fullspeed_in_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_IN,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+};
+
+static struct usb_endpoint_descriptor acc_fullspeed_out_desc = {
+	.bLength                = USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType        = USB_DT_ENDPOINT,
+	.bEndpointAddress       = USB_DIR_OUT,
+	.bmAttributes           = USB_ENDPOINT_XFER_BULK,
+};
+
+static struct usb_descriptor_header *fs_acc_descs[] = {
+	(struct usb_descriptor_header *) &acc_interface_desc,
+	(struct usb_descriptor_header *) &acc_fullspeed_in_desc,
+	(struct usb_descriptor_header *) &acc_fullspeed_out_desc,
+	NULL,
+};
+
+static struct usb_descriptor_header *hs_acc_descs[] = {
+	(struct usb_descriptor_header *) &acc_interface_desc,
+	(struct usb_descriptor_header *) &acc_highspeed_in_desc,
+	(struct usb_descriptor_header *) &acc_highspeed_out_desc,
+	NULL,
+};
+
+static struct usb_string acc_string_defs[] = {
+	[INTERFACE_STRING_INDEX].s	= "Android Accessory Interface",
+	{  },	/* end of list */
+};
+
+static struct usb_gadget_strings acc_string_table = {
+	.language		= 0x0409,	/* en-US */
+	.strings		= acc_string_defs,
+};
+
+static struct usb_gadget_strings *acc_strings[] = {
+	&acc_string_table,
+	NULL,
+};
+
+struct acc_dev_ref {
+	struct kref	kref;
+	struct acc_dev	*acc_dev;
+};
+
+static struct acc_dev_ref _acc_dev_ref = {
+	.kref = KREF_INIT(0),
+};
+
+struct acc_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+};
+
+static struct acc_dev *get_acc_dev(void)
+{
+	struct acc_dev_ref *ref = &_acc_dev_ref;
+
+	return kref_get_unless_zero(&ref->kref) ? ref->acc_dev : NULL;
+}
+
+static void __put_acc_dev(struct kref *kref)
+{
+	struct acc_dev_ref *ref = container_of(kref, struct acc_dev_ref, kref);
+	struct acc_dev *dev = ref->acc_dev;
+
+	/* Cancel any async work */
+	cancel_delayed_work_sync(&dev->start_work);
+	cancel_work_sync(&dev->hid_work);
+
+	ref->acc_dev = NULL;
+	kfree(dev);
+}
+
+static void put_acc_dev(struct acc_dev *dev)
+{
+	struct acc_dev_ref *ref = dev->ref;
+
+	WARN_ON(ref->acc_dev != dev);
+	kref_put(&ref->kref, __put_acc_dev);
+}
+
+static inline struct acc_dev *func_to_dev(struct usb_function *f)
+{
+	return container_of(f, struct acc_dev, function);
+}
+
+static struct usb_request *acc_request_new(struct usb_ep *ep, int buffer_size)
+{
+	struct usb_request *req = usb_ep_alloc_request(ep, GFP_KERNEL);
+
+	if (!req)
+		return NULL;
+
+	/* now allocate buffers for the requests */
+	req->buf = kmalloc(buffer_size, GFP_KERNEL);
+	if (!req->buf) {
+		usb_ep_free_request(ep, req);
+		return NULL;
+	}
+
+	return req;
+}
+
+static void acc_request_free(struct usb_request *req, struct usb_ep *ep)
+{
+	if (req) {
+		kfree(req->buf);
+		usb_ep_free_request(ep, req);
+	}
+}
+
+/* add a request to the tail of a list */
+static void req_put(struct acc_dev *dev, struct list_head *head,
+		struct usb_request *req)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	list_add_tail(&req->list, head);
+	spin_unlock_irqrestore(&dev->lock, flags);
+}
+
+/* remove a request from the head of a list */
+static struct usb_request *req_get(struct acc_dev *dev, struct list_head *head)
+{
+	unsigned long flags;
+	struct usb_request *req;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (list_empty(head)) {
+		req = 0;
+	} else {
+		req = list_first_entry(head, struct usb_request, list);
+		list_del(&req->list);
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return req;
+}
+
+static void acc_set_disconnected(struct acc_dev *dev)
+{
+	dev->disconnected = 1;
+}
+
+static void acc_complete_in(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	if (req->status == -ESHUTDOWN) {
+		pr_debug("acc_complete_in set disconnected");
+		acc_set_disconnected(dev);
+	}
+
+	req_put(dev, &dev->tx_idle, req);
+
+	wake_up(&dev->write_wq);
+	put_acc_dev(dev);
+}
+
+static void acc_complete_out(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	dev->rx_done = 1;
+	if (req->status == -ESHUTDOWN) {
+		pr_debug("acc_complete_out set disconnected");
+		acc_set_disconnected(dev);
+	}
+
+	wake_up(&dev->read_wq);
+	put_acc_dev(dev);
+}
+
+static void acc_complete_set_string(struct usb_ep *ep, struct usb_request *req)
+{
+	struct acc_dev	*dev = ep->driver_data;
+	char *string_dest = NULL;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_set_string, err %d\n", req->status);
+		return;
+	}
+
+	switch (dev->string_index) {
+	case ACCESSORY_STRING_MANUFACTURER:
+		string_dest = dev->manufacturer;
+		break;
+	case ACCESSORY_STRING_MODEL:
+		string_dest = dev->model;
+		break;
+	case ACCESSORY_STRING_DESCRIPTION:
+		string_dest = dev->description;
+		break;
+	case ACCESSORY_STRING_VERSION:
+		string_dest = dev->version;
+		break;
+	case ACCESSORY_STRING_URI:
+		string_dest = dev->uri;
+		break;
+	case ACCESSORY_STRING_SERIAL:
+		string_dest = dev->serial;
+		break;
+	}
+	if (string_dest) {
+		unsigned long flags;
+
+		if (length >= ACC_STRING_SIZE)
+			length = ACC_STRING_SIZE - 1;
+
+		spin_lock_irqsave(&dev->lock, flags);
+		memcpy(string_dest, req->buf, length);
+		/* ensure zero termination */
+		string_dest[length] = 0;
+		spin_unlock_irqrestore(&dev->lock, flags);
+	} else {
+		pr_err("unknown accessory string index %d\n",
+			dev->string_index);
+	}
+}
+
+static void acc_complete_set_hid_report_desc(struct usb_ep *ep,
+		struct usb_request *req)
+{
+	struct acc_hid_dev *hid = req->context;
+	struct acc_dev *dev = hid->dev;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_set_hid_report_desc, err %d\n",
+			req->status);
+		return;
+	}
+
+	memcpy(hid->report_desc + hid->report_desc_offset, req->buf, length);
+	hid->report_desc_offset += length;
+	if (hid->report_desc_offset == hid->report_desc_len) {
+		/* After we have received the entire report descriptor
+		 * we schedule work to initialize the HID device
+		 */
+		schedule_work(&dev->hid_work);
+	}
+}
+
+static void acc_complete_send_hid_event(struct usb_ep *ep,
+		struct usb_request *req)
+{
+	struct acc_hid_dev *hid = req->context;
+	int length = req->actual;
+
+	if (req->status != 0) {
+		pr_err("acc_complete_send_hid_event, err %d\n", req->status);
+		return;
+	}
+
+	hid_report_raw_event(hid->hid, HID_INPUT_REPORT, req->buf, length, 1);
+}
+
+static int acc_hid_parse(struct hid_device *hid)
+{
+	struct acc_hid_dev *hdev = hid->driver_data;
+
+	hid_parse_report(hid, hdev->report_desc, hdev->report_desc_len);
+	return 0;
+}
+
+static int acc_hid_start(struct hid_device *hid)
+{
+	return 0;
+}
+
+static void acc_hid_stop(struct hid_device *hid)
+{
+}
+
+static int acc_hid_open(struct hid_device *hid)
+{
+	return 0;
+}
+
+static void acc_hid_close(struct hid_device *hid)
+{
+}
+
+static int acc_hid_raw_request(struct hid_device *hid, unsigned char reportnum,
+	__u8 *buf, size_t len, unsigned char rtype, int reqtype)
+{
+	return 0;
+}
+
+static struct hid_ll_driver acc_hid_ll_driver = {
+	.parse = acc_hid_parse,
+	.start = acc_hid_start,
+	.stop = acc_hid_stop,
+	.open = acc_hid_open,
+	.close = acc_hid_close,
+	.raw_request = acc_hid_raw_request,
+};
+
+static struct acc_hid_dev *acc_hid_new(struct acc_dev *dev,
+		int id, int desc_len)
+{
+	struct acc_hid_dev *hdev;
+
+	hdev = kzalloc(sizeof(*hdev), GFP_ATOMIC);
+	if (!hdev)
+		return NULL;
+	hdev->report_desc = kzalloc(desc_len, GFP_ATOMIC);
+	if (!hdev->report_desc) {
+		kfree(hdev);
+		return NULL;
+	}
+	hdev->dev = dev;
+	hdev->id = id;
+	hdev->report_desc_len = desc_len;
+
+	return hdev;
+}
+
+static struct acc_hid_dev *acc_hid_get(struct list_head *list, int id)
+{
+	struct acc_hid_dev *hid;
+
+	list_for_each_entry(hid, list, list) {
+		if (hid->id == id)
+			return hid;
+	}
+	return NULL;
+}
+
+static int acc_register_hid(struct acc_dev *dev, int id, int desc_length)
+{
+	struct acc_hid_dev *hid;
+	unsigned long flags;
+
+	/* report descriptor length must be > 0 */
+	if (desc_length <= 0)
+		return -EINVAL;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	/* replace HID if one already exists with this ID */
+	hid = acc_hid_get(&dev->hid_list, id);
+	if (!hid)
+		hid = acc_hid_get(&dev->new_hid_list, id);
+	if (hid)
+		list_move(&hid->list, &dev->dead_hid_list);
+
+	hid = acc_hid_new(dev, id, desc_length);
+	if (!hid) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -ENOMEM;
+	}
+
+	list_add(&hid->list, &dev->new_hid_list);
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* schedule work to register the HID device */
+	schedule_work(&dev->hid_work);
+	return 0;
+}
+
+static int acc_unregister_hid(struct acc_dev *dev, int id)
+{
+	struct acc_hid_dev *hid;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	hid = acc_hid_get(&dev->hid_list, id);
+	if (!hid)
+		hid = acc_hid_get(&dev->new_hid_list, id);
+	if (!hid) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EINVAL;
+	}
+
+	list_move(&hid->list, &dev->dead_hid_list);
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	schedule_work(&dev->hid_work);
+	return 0;
+}
+
+static int create_bulk_endpoints(struct acc_dev *dev,
+				struct usb_endpoint_descriptor *in_desc,
+				struct usb_endpoint_descriptor *out_desc)
+{
+	struct usb_composite_dev *cdev = dev->cdev;
+	struct usb_request *req;
+	struct usb_ep *ep;
+	int i;
+
+	DBG(cdev, "create_bulk_endpoints dev: %p\n", dev);
+
+	ep = usb_ep_autoconfig(cdev->gadget, in_desc);
+	if (!ep) {
+		DBG(cdev, "usb_ep_autoconfig for ep_in failed\n");
+		return -ENODEV;
+	}
+	DBG(cdev, "usb_ep_autoconfig for ep_in got %s\n", ep->name);
+	ep->driver_data = dev;		/* claim the endpoint */
+	dev->ep_in = ep;
+
+	ep = usb_ep_autoconfig(cdev->gadget, out_desc);
+	if (!ep) {
+		DBG(cdev, "usb_ep_autoconfig for ep_out failed\n");
+		return -ENODEV;
+	}
+	DBG(cdev, "usb_ep_autoconfig for ep_out got %s\n", ep->name);
+	ep->driver_data = dev;		/* claim the endpoint */
+	dev->ep_out = ep;
+
+	/* now allocate requests for our endpoints */
+	for (i = 0; i < TX_REQ_MAX; i++) {
+		req = acc_request_new(dev->ep_in, BULK_BUFFER_SIZE);
+		if (!req)
+			goto fail;
+		req->complete = acc_complete_in;
+		req_put(dev, &dev->tx_idle, req);
+	}
+	for (i = 0; i < RX_REQ_MAX; i++) {
+		req = acc_request_new(dev->ep_out, BULK_BUFFER_SIZE);
+		if (!req)
+			goto fail;
+		req->complete = acc_complete_out;
+		dev->rx_req[i] = req;
+	}
+
+	return 0;
+
+fail:
+	pr_err("acc_bind() could not allocate requests\n");
+	while ((req = req_get(dev, &dev->tx_idle)))
+		acc_request_free(req, dev->ep_in);
+	for (i = 0; i < RX_REQ_MAX; i++) {
+		acc_request_free(dev->rx_req[i], dev->ep_out);
+		dev->rx_req[i] = NULL;
+	}
+
+	return -1;
+}
+
+static ssize_t acc_read(struct file *fp, char __user *buf,
+	size_t count, loff_t *pos)
+{
+	struct acc_dev *dev = fp->private_data;
+	struct usb_request *req;
+	ssize_t r = count;
+	ssize_t data_length;
+	unsigned xfer;
+	int ret = 0;
+
+	pr_debug("acc_read(%zu)\n", count);
+
+	if (dev->disconnected) {
+		pr_debug("acc_read disconnected");
+		return -ENODEV;
+	}
+
+	if (count > BULK_BUFFER_SIZE)
+		count = BULK_BUFFER_SIZE;
+
+	/* we will block until we're online */
+	pr_debug("acc_read: waiting for online\n");
+	ret = wait_event_interruptible(dev->read_wq, dev->online);
+	if (ret < 0) {
+		r = ret;
+		goto done;
+	}
+
+	if (!dev->rx_req[0]) {
+		pr_warn("acc_read: USB request already handled/freed");
+		r = -EINVAL;
+		goto done;
+	}
+
+	/*
+	 * Calculate the data length by considering termination character.
+	 * Then compansite the difference of rounding up to
+	 * integer multiple of maxpacket size.
+	 */
+	data_length = count;
+	data_length += dev->ep_out->maxpacket - 1;
+	data_length -= data_length % dev->ep_out->maxpacket;
+
+	if (dev->rx_done) {
+		// last req cancelled. try to get it.
+		req = dev->rx_req[0];
+		goto copy_data;
+	}
+
+requeue_req:
+	/* queue a request */
+	req = dev->rx_req[0];
+	req->length = data_length;
+	dev->rx_done = 0;
+	ret = usb_ep_queue(dev->ep_out, req, GFP_KERNEL);
+	if (ret < 0) {
+		r = -EIO;
+		goto done;
+	} else {
+		pr_debug("rx %p queue\n", req);
+	}
+
+	/* wait for a request to complete */
+	ret = wait_event_interruptible(dev->read_wq, dev->rx_done);
+	if (ret < 0) {
+		r = ret;
+		ret = usb_ep_dequeue(dev->ep_out, req);
+		if (ret != 0) {
+			// cancel failed. There can be a data already received.
+			// it will be retrieved in the next read.
+			pr_debug("acc_read: cancelling failed %d", ret);
+		}
+		goto done;
+	}
+
+copy_data:
+	dev->rx_done = 0;
+	if (dev->online) {
+		/* If we got a 0-len packet, throw it back and try again. */
+		if (req->actual == 0)
+			goto requeue_req;
+
+		pr_debug("rx %p %u\n", req, req->actual);
+		xfer = (req->actual < count) ? req->actual : count;
+		r = xfer;
+		if (copy_to_user(buf, req->buf, xfer))
+			r = -EFAULT;
+	} else
+		r = -EIO;
+
+done:
+	pr_debug("acc_read returning %zd\n", r);
+	return r;
+}
+
+static ssize_t acc_write(struct file *fp, const char __user *buf,
+	size_t count, loff_t *pos)
+{
+	struct acc_dev *dev = fp->private_data;
+	struct usb_request *req = 0;
+	ssize_t r = count;
+	unsigned xfer;
+	int ret;
+
+	pr_debug("acc_write(%zu)\n", count);
+
+	if (!dev->online || dev->disconnected) {
+		pr_debug("acc_write disconnected or not online");
+		return -ENODEV;
+	}
+
+	while (count > 0) {
+		if (!dev->online) {
+			pr_debug("acc_write dev->error\n");
+			r = -EIO;
+			break;
+		}
+
+		/* get an idle tx request to use */
+		req = 0;
+		ret = wait_event_interruptible(dev->write_wq,
+			((req = req_get(dev, &dev->tx_idle)) || !dev->online));
+		if (!req) {
+			r = ret;
+			break;
+		}
+
+		if (count > BULK_BUFFER_SIZE) {
+			xfer = BULK_BUFFER_SIZE;
+			/* ZLP, They will be more TX requests so not yet. */
+			req->zero = 0;
+		} else {
+			xfer = count;
+			/* If the data length is a multple of the
+			 * maxpacket size then send a zero length packet(ZLP).
+			*/
+			req->zero = ((xfer % dev->ep_in->maxpacket) == 0);
+		}
+		if (copy_from_user(req->buf, buf, xfer)) {
+			r = -EFAULT;
+			break;
+		}
+
+		req->length = xfer;
+		ret = usb_ep_queue(dev->ep_in, req, GFP_KERNEL);
+		if (ret < 0) {
+			pr_debug("acc_write: xfer error %d\n", ret);
+			r = -EIO;
+			break;
+		}
+
+		buf += xfer;
+		count -= xfer;
+
+		/* zero this so we don't try to free it on error exit */
+		req = 0;
+	}
+
+	if (req)
+		req_put(dev, &dev->tx_idle, req);
+
+	pr_debug("acc_write returning %zd\n", r);
+	return r;
+}
+
+static long acc_ioctl(struct file *fp, unsigned code, unsigned long value)
+{
+	struct acc_dev *dev = fp->private_data;
+	char *src = NULL;
+	int ret;
+
+	switch (code) {
+	case ACCESSORY_GET_STRING_MANUFACTURER:
+		src = dev->manufacturer;
+		break;
+	case ACCESSORY_GET_STRING_MODEL:
+		src = dev->model;
+		break;
+	case ACCESSORY_GET_STRING_DESCRIPTION:
+		src = dev->description;
+		break;
+	case ACCESSORY_GET_STRING_VERSION:
+		src = dev->version;
+		break;
+	case ACCESSORY_GET_STRING_URI:
+		src = dev->uri;
+		break;
+	case ACCESSORY_GET_STRING_SERIAL:
+		src = dev->serial;
+		break;
+	case ACCESSORY_IS_START_REQUESTED:
+		return dev->start_requested;
+	case ACCESSORY_GET_AUDIO_MODE:
+		return dev->audio_mode;
+	}
+	if (!src)
+		return -EINVAL;
+
+	ret = strlen(src) + 1;
+	if (copy_to_user((void __user *)value, src, ret))
+		ret = -EFAULT;
+	return ret;
+}
+
+static int acc_open(struct inode *ip, struct file *fp)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return -ENODEV;
+
+	if (atomic_xchg(&dev->open_excl, 1)) {
+		put_acc_dev(dev);
+		return -EBUSY;
+	}
+
+	dev->disconnected = 0;
+	fp->private_data = dev;
+	return 0;
+}
+
+static int acc_release(struct inode *ip, struct file *fp)
+{
+	struct acc_dev *dev = fp->private_data;
+
+	if (!dev)
+		return -ENOENT;
+
+	/* indicate that we are disconnected
+	 * still could be online so don't touch online flag
+	 */
+	dev->disconnected = 1;
+
+	fp->private_data = NULL;
+	WARN_ON(!atomic_xchg(&dev->open_excl, 0));
+	put_acc_dev(dev);
+	return 0;
+}
+
+/* file operations for /dev/usb_accessory */
+static const struct file_operations acc_fops = {
+	.owner = THIS_MODULE,
+	.read = acc_read,
+	.write = acc_write,
+	.unlocked_ioctl = acc_ioctl,
+	.open = acc_open,
+	.release = acc_release,
+};
+
+static int acc_hid_probe(struct hid_device *hdev,
+		const struct hid_device_id *id)
+{
+	int ret;
+
+	ret = hid_parse(hdev);
+	if (ret)
+		return ret;
+	return hid_hw_start(hdev, HID_CONNECT_DEFAULT);
+}
+
+static struct miscdevice acc_device = {
+	.minor = MISC_DYNAMIC_MINOR,
+	.name = "usb_accessory",
+	.fops = &acc_fops,
+};
+
+static const struct hid_device_id acc_hid_table[] = {
+	{ HID_USB_DEVICE(HID_ANY_ID, HID_ANY_ID) },
+	{ }
+};
+
+static struct hid_driver acc_hid_driver = {
+	.name = "USB accessory",
+	.id_table = acc_hid_table,
+	.probe = acc_hid_probe,
+};
+
+static void acc_complete_setup_noop(struct usb_ep *ep, struct usb_request *req)
+{
+	/*
+	 * Default no-op function when nothing needs to be done for the
+	 * setup request
+	 */
+}
+
+int acc_ctrlrequest(struct usb_composite_dev *cdev,
+				const struct usb_ctrlrequest *ctrl)
+{
+	struct acc_dev	*dev = get_acc_dev();
+	int	value = -EOPNOTSUPP;
+	struct acc_hid_dev *hid;
+	int offset;
+	u8 b_requestType = ctrl->bRequestType;
+	u8 b_request = ctrl->bRequest;
+	u16	w_index = le16_to_cpu(ctrl->wIndex);
+	u16	w_value = le16_to_cpu(ctrl->wValue);
+	u16	w_length = le16_to_cpu(ctrl->wLength);
+	unsigned long flags;
+
+	/*
+	 * If instance is not created which is the case in power off charging
+	 * mode, dev will be NULL. Hence return error if it is the case.
+	 */
+	if (!dev)
+		return -ENODEV;
+
+	if (b_requestType == (USB_DIR_OUT | USB_TYPE_VENDOR)) {
+		if (b_request == ACCESSORY_START) {
+			dev->start_requested = 1;
+			schedule_delayed_work(
+				&dev->start_work, msecs_to_jiffies(10));
+			value = 0;
+			cdev->req->complete = acc_complete_setup_noop;
+		} else if (b_request == ACCESSORY_SEND_STRING) {
+			dev->string_index = w_index;
+			cdev->gadget->ep0->driver_data = dev;
+			cdev->req->complete = acc_complete_set_string;
+			value = w_length;
+		} else if (b_request == ACCESSORY_SET_AUDIO_MODE &&
+				w_index == 0 && w_length == 0) {
+			dev->audio_mode = w_value;
+			cdev->req->complete = acc_complete_setup_noop;
+			value = 0;
+		} else if (b_request == ACCESSORY_REGISTER_HID) {
+			cdev->req->complete = acc_complete_setup_noop;
+			value = acc_register_hid(dev, w_value, w_index);
+		} else if (b_request == ACCESSORY_UNREGISTER_HID) {
+			cdev->req->complete = acc_complete_setup_noop;
+			value = acc_unregister_hid(dev, w_value);
+		} else if (b_request == ACCESSORY_SET_HID_REPORT_DESC) {
+			spin_lock_irqsave(&dev->lock, flags);
+			hid = acc_hid_get(&dev->new_hid_list, w_value);
+			spin_unlock_irqrestore(&dev->lock, flags);
+			if (!hid) {
+				value = -EINVAL;
+				goto err;
+			}
+			offset = w_index;
+			if (offset != hid->report_desc_offset
+				|| offset + w_length > hid->report_desc_len) {
+				value = -EINVAL;
+				goto err;
+			}
+			cdev->req->context = hid;
+			cdev->req->complete = acc_complete_set_hid_report_desc;
+			value = w_length;
+		} else if (b_request == ACCESSORY_SEND_HID_EVENT) {
+			spin_lock_irqsave(&dev->lock, flags);
+			hid = acc_hid_get(&dev->hid_list, w_value);
+			spin_unlock_irqrestore(&dev->lock, flags);
+			if (!hid) {
+				value = -EINVAL;
+				goto err;
+			}
+			cdev->req->context = hid;
+			cdev->req->complete = acc_complete_send_hid_event;
+			value = w_length;
+		}
+	} else if (b_requestType == (USB_DIR_IN | USB_TYPE_VENDOR)) {
+		if (b_request == ACCESSORY_GET_PROTOCOL) {
+			*((u16 *)cdev->req->buf) = PROTOCOL_VERSION;
+			value = sizeof(u16);
+			cdev->req->complete = acc_complete_setup_noop;
+			/* clear any string left over from a previous session */
+			memset(dev->manufacturer, 0, sizeof(dev->manufacturer));
+			memset(dev->model, 0, sizeof(dev->model));
+			memset(dev->description, 0, sizeof(dev->description));
+			memset(dev->version, 0, sizeof(dev->version));
+			memset(dev->uri, 0, sizeof(dev->uri));
+			memset(dev->serial, 0, sizeof(dev->serial));
+			dev->start_requested = 0;
+			dev->audio_mode = 0;
+		}
+	}
+
+	if (value >= 0) {
+		cdev->req->zero = 0;
+		cdev->req->length = value;
+		value = usb_ep_queue(cdev->gadget->ep0, cdev->req, GFP_ATOMIC);
+		if (value < 0)
+			ERROR(cdev, "%s setup response queue error\n",
+				__func__);
+	}
+
+err:
+	if (value == -EOPNOTSUPP)
+		VDBG(cdev,
+			"unknown class-specific control req "
+			"%02x.%02x v%04x i%04x l%u\n",
+			ctrl->bRequestType, ctrl->bRequest,
+			w_value, w_index, w_length);
+	put_acc_dev(dev);
+	return value;
+}
+EXPORT_SYMBOL_GPL(acc_ctrlrequest);
+
+static int
+__acc_function_bind(struct usb_configuration *c,
+			struct usb_function *f, bool configfs)
+{
+	struct usb_composite_dev *cdev = c->cdev;
+	struct acc_dev	*dev = func_to_dev(f);
+	int			id;
+	int			ret;
+
+	DBG(cdev, "acc_function_bind dev: %p\n", dev);
+
+	if (configfs) {
+		if (acc_string_defs[INTERFACE_STRING_INDEX].id == 0) {
+			ret = usb_string_id(c->cdev);
+			if (ret < 0)
+				return ret;
+			acc_string_defs[INTERFACE_STRING_INDEX].id = ret;
+			acc_interface_desc.iInterface = ret;
+		}
+		dev->cdev = c->cdev;
+	}
+	ret = hid_register_driver(&acc_hid_driver);
+	if (ret)
+		return ret;
+
+	dev->start_requested = 0;
+
+	/* allocate interface ID(s) */
+	id = usb_interface_id(c, f);
+	if (id < 0)
+		return id;
+	acc_interface_desc.bInterfaceNumber = id;
+
+	/* allocate endpoints */
+	ret = create_bulk_endpoints(dev, &acc_fullspeed_in_desc,
+			&acc_fullspeed_out_desc);
+	if (ret)
+		return ret;
+
+	/* support high speed hardware */
+	if (gadget_is_dualspeed(c->cdev->gadget)) {
+		acc_highspeed_in_desc.bEndpointAddress =
+			acc_fullspeed_in_desc.bEndpointAddress;
+		acc_highspeed_out_desc.bEndpointAddress =
+			acc_fullspeed_out_desc.bEndpointAddress;
+	}
+
+	DBG(cdev, "%s speed %s: IN/%s, OUT/%s\n",
+			gadget_is_dualspeed(c->cdev->gadget) ? "dual" : "full",
+			f->name, dev->ep_in->name, dev->ep_out->name);
+	return 0;
+}
+
+static int
+acc_function_bind_configfs(struct usb_configuration *c,
+			struct usb_function *f) {
+	return __acc_function_bind(c, f, true);
+}
+
+static void
+kill_all_hid_devices(struct acc_dev *dev)
+{
+	struct acc_hid_dev *hid;
+	struct list_head *entry, *temp;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	list_for_each_safe(entry, temp, &dev->hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		list_add(&hid->list, &dev->dead_hid_list);
+	}
+	list_for_each_safe(entry, temp, &dev->new_hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		list_add(&hid->list, &dev->dead_hid_list);
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	schedule_work(&dev->hid_work);
+}
+
+static void
+acc_hid_unbind(struct acc_dev *dev)
+{
+	hid_unregister_driver(&acc_hid_driver);
+	kill_all_hid_devices(dev);
+}
+
+static void
+acc_function_unbind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_request *req;
+	int i;
+
+	dev->online = 0;		/* clear online flag */
+	wake_up(&dev->read_wq);		/* unblock reads on closure */
+	wake_up(&dev->write_wq);	/* likewise for writes */
+
+	while ((req = req_get(dev, &dev->tx_idle)))
+		acc_request_free(req, dev->ep_in);
+	for (i = 0; i < RX_REQ_MAX; i++) {
+		acc_request_free(dev->rx_req[i], dev->ep_out);
+		dev->rx_req[i] = NULL;
+	}
+
+	acc_hid_unbind(dev);
+}
+
+static void acc_start_work(struct work_struct *data)
+{
+	char *envp[2] = { "ACCESSORY=START", NULL };
+
+	kobject_uevent_env(&acc_device.this_device->kobj, KOBJ_CHANGE, envp);
+}
+
+static int acc_hid_init(struct acc_hid_dev *hdev)
+{
+	struct hid_device *hid;
+	int ret;
+
+	hid = hid_allocate_device();
+	if (IS_ERR(hid))
+		return PTR_ERR(hid);
+
+	hid->ll_driver = &acc_hid_ll_driver;
+	hid->dev.parent = acc_device.this_device;
+
+	hid->bus = BUS_USB;
+	hid->vendor = HID_ANY_ID;
+	hid->product = HID_ANY_ID;
+	hid->driver_data = hdev;
+	ret = hid_add_device(hid);
+	if (ret) {
+		pr_err("can't add hid device: %d\n", ret);
+		hid_destroy_device(hid);
+		return ret;
+	}
+
+	hdev->hid = hid;
+	return 0;
+}
+
+static void acc_hid_delete(struct acc_hid_dev *hid)
+{
+	kfree(hid->report_desc);
+	kfree(hid);
+}
+
+static void acc_hid_work(struct work_struct *data)
+{
+	struct acc_dev *dev = get_acc_dev();
+	struct list_head	*entry, *temp;
+	struct acc_hid_dev *hid;
+	struct list_head	new_list, dead_list;
+	unsigned long flags;
+
+	if (!dev)
+		return;
+
+	INIT_LIST_HEAD(&new_list);
+
+	spin_lock_irqsave(&dev->lock, flags);
+
+	/* copy hids that are ready for initialization to new_list */
+	list_for_each_safe(entry, temp, &dev->new_hid_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		if (hid->report_desc_offset == hid->report_desc_len)
+			list_move(&hid->list, &new_list);
+	}
+
+	if (list_empty(&dev->dead_hid_list)) {
+		INIT_LIST_HEAD(&dead_list);
+	} else {
+		/* move all of dev->dead_hid_list to dead_list */
+		dead_list.prev = dev->dead_hid_list.prev;
+		dead_list.next = dev->dead_hid_list.next;
+		dead_list.next->prev = &dead_list;
+		dead_list.prev->next = &dead_list;
+		INIT_LIST_HEAD(&dev->dead_hid_list);
+	}
+
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* register new HID devices */
+	list_for_each_safe(entry, temp, &new_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		if (acc_hid_init(hid)) {
+			pr_err("can't add HID device %p\n", hid);
+			acc_hid_delete(hid);
+		} else {
+			spin_lock_irqsave(&dev->lock, flags);
+			list_move(&hid->list, &dev->hid_list);
+			spin_unlock_irqrestore(&dev->lock, flags);
+		}
+	}
+
+	/* remove dead HID devices */
+	list_for_each_safe(entry, temp, &dead_list) {
+		hid = list_entry(entry, struct acc_hid_dev, list);
+		list_del(&hid->list);
+		if (hid->hid)
+			hid_destroy_device(hid->hid);
+		acc_hid_delete(hid);
+	}
+
+	put_acc_dev(dev);
+}
+
+static int acc_function_set_alt(struct usb_function *f,
+		unsigned intf, unsigned alt)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int ret;
+
+	DBG(cdev, "acc_function_set_alt intf: %d alt: %d\n", intf, alt);
+
+	ret = config_ep_by_speed(cdev->gadget, f, dev->ep_in);
+	if (ret)
+		return ret;
+
+	ret = usb_ep_enable(dev->ep_in);
+	if (ret)
+		return ret;
+
+	ret = config_ep_by_speed(cdev->gadget, f, dev->ep_out);
+	if (ret)
+		return ret;
+
+	ret = usb_ep_enable(dev->ep_out);
+	if (ret) {
+		usb_ep_disable(dev->ep_in);
+		return ret;
+	}
+
+	dev->online = 1;
+	dev->disconnected = 0; /* if online then not disconnected */
+
+	/* readers may be blocked waiting for us to go online */
+	wake_up(&dev->read_wq);
+	return 0;
+}
+
+static void acc_function_disable(struct usb_function *f)
+{
+	struct acc_dev	*dev = func_to_dev(f);
+	struct usb_composite_dev	*cdev = dev->cdev;
+
+	DBG(cdev, "acc_function_disable\n");
+	acc_set_disconnected(dev); /* this now only sets disconnected */
+	dev->online = 0; /* so now need to clear online flag here too */
+	usb_ep_disable(dev->ep_in);
+	usb_ep_disable(dev->ep_out);
+
+	/* readers may be blocked waiting for us to go online */
+	wake_up(&dev->read_wq);
+
+	VDBG(cdev, "%s disabled\n", dev->function.name);
+}
+
+static int acc_setup(void)
+{
+	struct acc_dev_ref *ref = &_acc_dev_ref;
+	struct acc_dev *dev;
+	int ret;
+
+	if (kref_read(&ref->kref))
+		return -EBUSY;
+
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	if (!dev)
+		return -ENOMEM;
+
+	spin_lock_init(&dev->lock);
+	init_waitqueue_head(&dev->read_wq);
+	init_waitqueue_head(&dev->write_wq);
+	atomic_set(&dev->open_excl, 0);
+	INIT_LIST_HEAD(&dev->tx_idle);
+	INIT_LIST_HEAD(&dev->hid_list);
+	INIT_LIST_HEAD(&dev->new_hid_list);
+	INIT_LIST_HEAD(&dev->dead_hid_list);
+	INIT_DELAYED_WORK(&dev->start_work, acc_start_work);
+	INIT_WORK(&dev->hid_work, acc_hid_work);
+
+	dev->ref = ref;
+	if (cmpxchg_relaxed(&ref->acc_dev, NULL, dev)) {
+		ret = -EBUSY;
+		goto err_free_dev;
+	}
+
+	ret = misc_register(&acc_device);
+	if (ret)
+		goto err_zap_ptr;
+
+	kref_init(&ref->kref);
+	return 0;
+
+err_zap_ptr:
+	ref->acc_dev = NULL;
+err_free_dev:
+	kfree(dev);
+	pr_err("USB accessory gadget driver failed to initialize\n");
+	return ret;
+}
+
+void acc_disconnect(void)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	if (!dev)
+		return;
+
+	/* unregister all HID devices if USB is disconnected */
+	kill_all_hid_devices(dev);
+	put_acc_dev(dev);
+}
+EXPORT_SYMBOL_GPL(acc_disconnect);
+
+static void acc_cleanup(void)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	misc_deregister(&acc_device);
+	put_acc_dev(dev);
+	put_acc_dev(dev); /* Pairs with kref_init() in acc_setup() */
+}
+static struct acc_instance *to_acc_instance(struct config_item *item)
+{
+	return container_of(to_config_group(item), struct acc_instance,
+		func_inst.group);
+}
+
+static void acc_attr_release(struct config_item *item)
+{
+	struct acc_instance *fi_acc = to_acc_instance(item);
+
+	usb_put_function_instance(&fi_acc->func_inst);
+}
+
+static struct configfs_item_operations acc_item_ops = {
+	.release        = acc_attr_release,
+};
+
+static struct config_item_type acc_func_type = {
+	.ct_item_ops    = &acc_item_ops,
+	.ct_owner       = THIS_MODULE,
+};
+
+static struct acc_instance *to_fi_acc(struct usb_function_instance *fi)
+{
+	return container_of(fi, struct acc_instance, func_inst);
+}
+
+static int acc_set_inst_name(struct usb_function_instance *fi, const char *name)
+{
+	struct acc_instance *fi_acc;
+	char *ptr;
+	int name_len;
+
+	name_len = strlen(name) + 1;
+	if (name_len > MAX_INST_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	ptr = kstrndup(name, name_len, GFP_KERNEL);
+	if (!ptr)
+		return -ENOMEM;
+
+	fi_acc = to_fi_acc(fi);
+	fi_acc->name = ptr;
+	return 0;
+}
+
+static void acc_free_inst(struct usb_function_instance *fi)
+{
+	struct acc_instance *fi_acc;
+
+	fi_acc = to_fi_acc(fi);
+	kfree(fi_acc->name);
+	acc_cleanup();
+}
+
+static struct usb_function_instance *acc_alloc_inst(void)
+{
+	struct acc_instance *fi_acc;
+	int err;
+
+	fi_acc = kzalloc(sizeof(*fi_acc), GFP_KERNEL);
+	if (!fi_acc)
+		return ERR_PTR(-ENOMEM);
+	fi_acc->func_inst.set_inst_name = acc_set_inst_name;
+	fi_acc->func_inst.free_func_inst = acc_free_inst;
+
+	err = acc_setup();
+	if (err) {
+		kfree(fi_acc);
+		return ERR_PTR(err);
+	}
+
+	config_group_init_type_name(&fi_acc->func_inst.group,
+					"", &acc_func_type);
+	return  &fi_acc->func_inst;
+}
+
+static void acc_free(struct usb_function *f)
+{
+	struct acc_dev *dev = func_to_dev(f);
+
+	put_acc_dev(dev);
+}
+
+int acc_ctrlrequest_configfs(struct usb_function *f,
+			const struct usb_ctrlrequest *ctrl) {
+	if (f->config != NULL && f->config->cdev != NULL)
+		return acc_ctrlrequest(f->config->cdev, ctrl);
+	else
+		return -1;
+}
+
+static struct usb_function *acc_alloc(struct usb_function_instance *fi)
+{
+	struct acc_dev *dev = get_acc_dev();
+
+	dev->function.name = "accessory";
+	dev->function.strings = acc_strings,
+	dev->function.fs_descriptors = fs_acc_descs;
+	dev->function.hs_descriptors = hs_acc_descs;
+	dev->function.bind = acc_function_bind_configfs;
+	dev->function.unbind = acc_function_unbind;
+	dev->function.set_alt = acc_function_set_alt;
+	dev->function.disable = acc_function_disable;
+	dev->function.free_func = acc_free;
+	dev->function.setup = acc_ctrlrequest_configfs;
+
+	return &dev->function;
+}
+DECLARE_USB_FUNCTION_INIT(accessory, acc_alloc_inst, acc_alloc);
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/gadget/function/f_audio_source.c b/drivers/usb/gadget/function/f_audio_source.c
new file mode 100644
index 0000000..8124af3
--- /dev/null
+++ b/drivers/usb/gadget/function/f_audio_source.c
@@ -0,0 +1,1071 @@
+/*
+ * Gadget Function Driver for USB audio source device
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * 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.
+ *
+ */
+
+#include <linux/device.h>
+#include <linux/usb/audio.h>
+#include <linux/wait.h>
+#include <linux/pm_qos.h>
+#include <sound/core.h>
+#include <sound/initval.h>
+#include <sound/pcm.h>
+
+#include <linux/usb.h>
+#include <linux/usb_usual.h>
+#include <linux/usb/ch9.h>
+#include <linux/configfs.h>
+#include <linux/usb/composite.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#define SAMPLE_RATE 44100
+#define FRAMES_PER_MSEC (SAMPLE_RATE / 1000)
+
+#define IN_EP_MAX_PACKET_SIZE 256
+
+/* Number of requests to allocate */
+#define IN_EP_REQ_COUNT 4
+
+#define AUDIO_AC_INTERFACE	0
+#define AUDIO_AS_INTERFACE	1
+#define AUDIO_NUM_INTERFACES	2
+#define MAX_INST_NAME_LEN     40
+
+/* B.3.1  Standard AC Interface Descriptor */
+static struct usb_interface_descriptor ac_interface_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bNumEndpoints =	0,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOCONTROL,
+};
+
+DECLARE_UAC_AC_HEADER_DESCRIPTOR(2);
+
+#define UAC_DT_AC_HEADER_LENGTH	UAC_DT_AC_HEADER_SIZE(AUDIO_NUM_INTERFACES)
+/* 1 input terminal, 1 output terminal and 1 feature unit */
+#define UAC_DT_TOTAL_LENGTH (UAC_DT_AC_HEADER_LENGTH \
+	+ UAC_DT_INPUT_TERMINAL_SIZE + UAC_DT_OUTPUT_TERMINAL_SIZE \
+	+ UAC_DT_FEATURE_UNIT_SIZE(0))
+/* B.3.2  Class-Specific AC Interface Descriptor */
+static struct uac1_ac_header_descriptor_2 ac_header_desc = {
+	.bLength =		UAC_DT_AC_HEADER_LENGTH,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_HEADER,
+	.bcdADC =		__constant_cpu_to_le16(0x0100),
+	.wTotalLength =		__constant_cpu_to_le16(UAC_DT_TOTAL_LENGTH),
+	.bInCollection =	AUDIO_NUM_INTERFACES,
+	.baInterfaceNr = {
+		[0] =		AUDIO_AC_INTERFACE,
+		[1] =		AUDIO_AS_INTERFACE,
+	}
+};
+
+#define INPUT_TERMINAL_ID	1
+static struct uac_input_terminal_descriptor input_terminal_desc = {
+	.bLength =		UAC_DT_INPUT_TERMINAL_SIZE,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_INPUT_TERMINAL,
+	.bTerminalID =		INPUT_TERMINAL_ID,
+	.wTerminalType =	UAC_INPUT_TERMINAL_MICROPHONE,
+	.bAssocTerminal =	0,
+	.wChannelConfig =	0x3,
+};
+
+DECLARE_UAC_FEATURE_UNIT_DESCRIPTOR(0);
+
+#define FEATURE_UNIT_ID		2
+static struct uac_feature_unit_descriptor_0 feature_unit_desc = {
+	.bLength		= UAC_DT_FEATURE_UNIT_SIZE(0),
+	.bDescriptorType	= USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype	= UAC_FEATURE_UNIT,
+	.bUnitID		= FEATURE_UNIT_ID,
+	.bSourceID		= INPUT_TERMINAL_ID,
+	.bControlSize		= 2,
+};
+
+#define OUTPUT_TERMINAL_ID	3
+static struct uac1_output_terminal_descriptor output_terminal_desc = {
+	.bLength		= UAC_DT_OUTPUT_TERMINAL_SIZE,
+	.bDescriptorType	= USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype	= UAC_OUTPUT_TERMINAL,
+	.bTerminalID		= OUTPUT_TERMINAL_ID,
+	.wTerminalType		= UAC_TERMINAL_STREAMING,
+	.bAssocTerminal		= FEATURE_UNIT_ID,
+	.bSourceID		= FEATURE_UNIT_ID,
+};
+
+/* B.4.1  Standard AS Interface Descriptor */
+static struct usb_interface_descriptor as_interface_alt_0_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bAlternateSetting =	0,
+	.bNumEndpoints =	0,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
+};
+
+static struct usb_interface_descriptor as_interface_alt_1_desc = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bAlternateSetting =	1,
+	.bNumEndpoints =	1,
+	.bInterfaceClass =	USB_CLASS_AUDIO,
+	.bInterfaceSubClass =	USB_SUBCLASS_AUDIOSTREAMING,
+};
+
+/* B.4.2  Class-Specific AS Interface Descriptor */
+static struct uac1_as_header_descriptor as_header_desc = {
+	.bLength =		UAC_DT_AS_HEADER_SIZE,
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_AS_GENERAL,
+	.bTerminalLink =	INPUT_TERMINAL_ID,
+	.bDelay =		1,
+	.wFormatTag =		UAC_FORMAT_TYPE_I_PCM,
+};
+
+DECLARE_UAC_FORMAT_TYPE_I_DISCRETE_DESC(1);
+
+static struct uac_format_type_i_discrete_descriptor_1 as_type_i_desc = {
+	.bLength =		UAC_FORMAT_TYPE_I_DISCRETE_DESC_SIZE(1),
+	.bDescriptorType =	USB_DT_CS_INTERFACE,
+	.bDescriptorSubtype =	UAC_FORMAT_TYPE,
+	.bFormatType =		UAC_FORMAT_TYPE_I,
+	.bSubframeSize =	2,
+	.bBitResolution =	16,
+	.bSamFreqType =		1,
+};
+
+/* Standard ISO IN Endpoint Descriptor for highspeed */
+static struct usb_endpoint_descriptor hs_as_in_ep_desc  = {
+	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
+	.bDescriptorType =	USB_DT_ENDPOINT,
+	.bEndpointAddress =	USB_DIR_IN,
+	.bmAttributes =		USB_ENDPOINT_SYNC_SYNC
+				| USB_ENDPOINT_XFER_ISOC,
+	.wMaxPacketSize =	__constant_cpu_to_le16(IN_EP_MAX_PACKET_SIZE),
+	.bInterval =		4, /* poll 1 per millisecond */
+};
+
+/* Standard ISO IN Endpoint Descriptor for highspeed */
+static struct usb_endpoint_descriptor fs_as_in_ep_desc  = {
+	.bLength =		USB_DT_ENDPOINT_AUDIO_SIZE,
+	.bDescriptorType =	USB_DT_ENDPOINT,
+	.bEndpointAddress =	USB_DIR_IN,
+	.bmAttributes =		USB_ENDPOINT_SYNC_SYNC
+				| USB_ENDPOINT_XFER_ISOC,
+	.wMaxPacketSize =	__constant_cpu_to_le16(IN_EP_MAX_PACKET_SIZE),
+	.bInterval =		1, /* poll 1 per millisecond */
+};
+
+/* Class-specific AS ISO OUT Endpoint Descriptor */
+static struct uac_iso_endpoint_descriptor as_iso_in_desc = {
+	.bLength =		UAC_ISO_ENDPOINT_DESC_SIZE,
+	.bDescriptorType =	USB_DT_CS_ENDPOINT,
+	.bDescriptorSubtype =	UAC_EP_GENERAL,
+	.bmAttributes =		1,
+	.bLockDelayUnits =	1,
+	.wLockDelay =		__constant_cpu_to_le16(1),
+};
+
+static struct usb_descriptor_header *hs_audio_desc[] = {
+	(struct usb_descriptor_header *)&ac_interface_desc,
+	(struct usb_descriptor_header *)&ac_header_desc,
+
+	(struct usb_descriptor_header *)&input_terminal_desc,
+	(struct usb_descriptor_header *)&output_terminal_desc,
+	(struct usb_descriptor_header *)&feature_unit_desc,
+
+	(struct usb_descriptor_header *)&as_interface_alt_0_desc,
+	(struct usb_descriptor_header *)&as_interface_alt_1_desc,
+	(struct usb_descriptor_header *)&as_header_desc,
+
+	(struct usb_descriptor_header *)&as_type_i_desc,
+
+	(struct usb_descriptor_header *)&hs_as_in_ep_desc,
+	(struct usb_descriptor_header *)&as_iso_in_desc,
+	NULL,
+};
+
+static struct usb_descriptor_header *fs_audio_desc[] = {
+	(struct usb_descriptor_header *)&ac_interface_desc,
+	(struct usb_descriptor_header *)&ac_header_desc,
+
+	(struct usb_descriptor_header *)&input_terminal_desc,
+	(struct usb_descriptor_header *)&output_terminal_desc,
+	(struct usb_descriptor_header *)&feature_unit_desc,
+
+	(struct usb_descriptor_header *)&as_interface_alt_0_desc,
+	(struct usb_descriptor_header *)&as_interface_alt_1_desc,
+	(struct usb_descriptor_header *)&as_header_desc,
+
+	(struct usb_descriptor_header *)&as_type_i_desc,
+
+	(struct usb_descriptor_header *)&fs_as_in_ep_desc,
+	(struct usb_descriptor_header *)&as_iso_in_desc,
+	NULL,
+};
+
+static struct snd_pcm_hardware audio_hw_info = {
+	.info =			SNDRV_PCM_INFO_MMAP |
+				SNDRV_PCM_INFO_MMAP_VALID |
+				SNDRV_PCM_INFO_BATCH |
+				SNDRV_PCM_INFO_INTERLEAVED |
+				SNDRV_PCM_INFO_BLOCK_TRANSFER,
+
+	.formats		= SNDRV_PCM_FMTBIT_S16_LE,
+	.channels_min		= 2,
+	.channels_max		= 2,
+	.rate_min		= SAMPLE_RATE,
+	.rate_max		= SAMPLE_RATE,
+
+	.buffer_bytes_max =	1024 * 1024,
+	.period_bytes_min =	64,
+	.period_bytes_max =	512 * 1024,
+	.periods_min =		2,
+	.periods_max =		1024,
+};
+
+/*-------------------------------------------------------------------------*/
+
+struct audio_source_config {
+	int	card;
+	int	device;
+};
+
+struct audio_dev {
+	struct usb_function		func;
+	struct snd_card			*card;
+	struct snd_pcm			*pcm;
+	struct snd_pcm_substream *substream;
+
+	struct list_head		idle_reqs;
+	struct usb_ep			*in_ep;
+
+	spinlock_t			lock;
+
+	/* beginning, end and current position in our buffer */
+	void				*buffer_start;
+	void				*buffer_end;
+	void				*buffer_pos;
+
+	/* byte size of a "period" */
+	unsigned int			period;
+	/* bytes sent since last call to snd_pcm_period_elapsed */
+	unsigned int			period_offset;
+	/* time we started playing */
+	ktime_t				start_time;
+	/* number of frames sent since start_time */
+	s64				frames_sent;
+	struct audio_source_config	*config;
+	/* for creating and issuing QoS requests */
+	struct pm_qos_request pm_qos;
+};
+
+static inline struct audio_dev *func_to_audio(struct usb_function *f)
+{
+	return container_of(f, struct audio_dev, func);
+}
+
+/*-------------------------------------------------------------------------*/
+
+struct audio_source_instance {
+	struct usb_function_instance func_inst;
+	const char *name;
+	struct audio_source_config *config;
+	struct device *audio_device;
+};
+
+static void audio_source_attr_release(struct config_item *item);
+
+static struct configfs_item_operations audio_source_item_ops = {
+	.release        = audio_source_attr_release,
+};
+
+static struct config_item_type audio_source_func_type = {
+	.ct_item_ops    = &audio_source_item_ops,
+	.ct_owner       = THIS_MODULE,
+};
+
+static ssize_t audio_source_pcm_show(struct device *dev,
+		struct device_attribute *attr, char *buf);
+
+static DEVICE_ATTR(pcm, S_IRUGO, audio_source_pcm_show, NULL);
+
+static struct device_attribute *audio_source_function_attributes[] = {
+	&dev_attr_pcm,
+	NULL
+};
+
+/*--------------------------------------------------------------------------*/
+
+static struct usb_request *audio_request_new(struct usb_ep *ep, int buffer_size)
+{
+	struct usb_request *req = usb_ep_alloc_request(ep, GFP_KERNEL);
+
+	if (!req)
+		return NULL;
+
+	req->buf = kmalloc(buffer_size, GFP_KERNEL);
+	if (!req->buf) {
+		usb_ep_free_request(ep, req);
+		return NULL;
+	}
+	req->length = buffer_size;
+	return req;
+}
+
+static void audio_request_free(struct usb_request *req, struct usb_ep *ep)
+{
+	if (req) {
+		kfree(req->buf);
+		usb_ep_free_request(ep, req);
+	}
+}
+
+static void audio_req_put(struct audio_dev *audio, struct usb_request *req)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	list_add_tail(&req->list, &audio->idle_reqs);
+	spin_unlock_irqrestore(&audio->lock, flags);
+}
+
+static struct usb_request *audio_req_get(struct audio_dev *audio)
+{
+	unsigned long flags;
+	struct usb_request *req;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	if (list_empty(&audio->idle_reqs)) {
+		req = 0;
+	} else {
+		req = list_first_entry(&audio->idle_reqs, struct usb_request,
+				list);
+		list_del(&req->list);
+	}
+	spin_unlock_irqrestore(&audio->lock, flags);
+	return req;
+}
+
+/* send the appropriate number of packets to match our bitrate */
+static void audio_send(struct audio_dev *audio)
+{
+	struct snd_pcm_runtime *runtime;
+	struct usb_request *req;
+	int length, length1, length2, ret;
+	s64 msecs;
+	s64 frames;
+	ktime_t now;
+
+	/* audio->substream will be null if we have been closed */
+	if (!audio->substream)
+		return;
+	/* audio->buffer_pos will be null if we have been stopped */
+	if (!audio->buffer_pos)
+		return;
+
+	runtime = audio->substream->runtime;
+
+	/* compute number of frames to send */
+	now = ktime_get();
+	msecs = div_s64((ktime_to_ns(now) - ktime_to_ns(audio->start_time)),
+			1000000);
+	frames = div_s64((msecs * SAMPLE_RATE), 1000);
+
+	/* Readjust our frames_sent if we fall too far behind.
+	 * If we get too far behind it is better to drop some frames than
+	 * to keep sending data too fast in an attempt to catch up.
+	 */
+	if (frames - audio->frames_sent > 10 * FRAMES_PER_MSEC)
+		audio->frames_sent = frames - FRAMES_PER_MSEC;
+
+	frames -= audio->frames_sent;
+
+	/* We need to send something to keep the pipeline going */
+	if (frames <= 0)
+		frames = FRAMES_PER_MSEC;
+
+	while (frames > 0) {
+		req = audio_req_get(audio);
+		if (!req)
+			break;
+
+		length = frames_to_bytes(runtime, frames);
+		if (length > IN_EP_MAX_PACKET_SIZE)
+			length = IN_EP_MAX_PACKET_SIZE;
+
+		if (audio->buffer_pos + length > audio->buffer_end)
+			length1 = audio->buffer_end - audio->buffer_pos;
+		else
+			length1 = length;
+		memcpy(req->buf, audio->buffer_pos, length1);
+		if (length1 < length) {
+			/* Wrap around and copy remaining length
+			 * at beginning of buffer.
+			 */
+			length2 = length - length1;
+			memcpy(req->buf + length1, audio->buffer_start,
+					length2);
+			audio->buffer_pos = audio->buffer_start + length2;
+		} else {
+			audio->buffer_pos += length1;
+			if (audio->buffer_pos >= audio->buffer_end)
+				audio->buffer_pos = audio->buffer_start;
+		}
+
+		req->length = length;
+		ret = usb_ep_queue(audio->in_ep, req, GFP_ATOMIC);
+		if (ret < 0) {
+			pr_err("usb_ep_queue failed ret: %d\n", ret);
+			audio_req_put(audio, req);
+			break;
+		}
+
+		frames -= bytes_to_frames(runtime, length);
+		audio->frames_sent += bytes_to_frames(runtime, length);
+	}
+}
+
+static void audio_control_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	/* nothing to do here */
+}
+
+static void audio_data_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct audio_dev *audio = req->context;
+
+	pr_debug("audio_data_complete req->status %d req->actual %d\n",
+		req->status, req->actual);
+
+	audio_req_put(audio, req);
+
+	if (!audio->buffer_start || req->status)
+		return;
+
+	audio->period_offset += req->actual;
+	if (audio->period_offset >= audio->period) {
+		snd_pcm_period_elapsed(audio->substream);
+		audio->period_offset = 0;
+	}
+	audio_send(audio);
+}
+
+static int audio_set_endpoint_req(struct usb_function *f,
+		const struct usb_ctrlrequest *ctrl)
+{
+	int value = -EOPNOTSUPP;
+	u16 ep = le16_to_cpu(ctrl->wIndex);
+	u16 len = le16_to_cpu(ctrl->wLength);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+
+	pr_debug("bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
+			ctrl->bRequest, w_value, len, ep);
+
+	switch (ctrl->bRequest) {
+	case UAC_SET_CUR:
+	case UAC_SET_MIN:
+	case UAC_SET_MAX:
+	case UAC_SET_RES:
+		value = len;
+		break;
+	default:
+		break;
+	}
+
+	return value;
+}
+
+static int audio_get_endpoint_req(struct usb_function *f,
+		const struct usb_ctrlrequest *ctrl)
+{
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int value = -EOPNOTSUPP;
+	u8 ep = ((le16_to_cpu(ctrl->wIndex) >> 8) & 0xFF);
+	u16 len = le16_to_cpu(ctrl->wLength);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+	u8 *buf = cdev->req->buf;
+
+	pr_debug("bRequest 0x%x, w_value 0x%04x, len %d, endpoint %d\n",
+			ctrl->bRequest, w_value, len, ep);
+
+	if (w_value == UAC_EP_CS_ATTR_SAMPLE_RATE << 8) {
+		switch (ctrl->bRequest) {
+		case UAC_GET_CUR:
+		case UAC_GET_MIN:
+		case UAC_GET_MAX:
+		case UAC_GET_RES:
+			/* return our sample rate */
+			buf[0] = (u8)SAMPLE_RATE;
+			buf[1] = (u8)(SAMPLE_RATE >> 8);
+			buf[2] = (u8)(SAMPLE_RATE >> 16);
+			value = 3;
+			break;
+		default:
+			break;
+		}
+	}
+
+	return value;
+}
+
+static int
+audio_setup(struct usb_function *f, const struct usb_ctrlrequest *ctrl)
+{
+	struct usb_composite_dev *cdev = f->config->cdev;
+	struct usb_request *req = cdev->req;
+	int value = -EOPNOTSUPP;
+	u16 w_index = le16_to_cpu(ctrl->wIndex);
+	u16 w_value = le16_to_cpu(ctrl->wValue);
+	u16 w_length = le16_to_cpu(ctrl->wLength);
+
+	/* composite driver infrastructure handles everything; interface
+	 * activation uses set_alt().
+	 */
+	switch (ctrl->bRequestType) {
+	case USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
+		value = audio_set_endpoint_req(f, ctrl);
+		break;
+
+	case USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT:
+		value = audio_get_endpoint_req(f, ctrl);
+		break;
+	}
+
+	/* respond with data transfer or status phase? */
+	if (value >= 0) {
+		pr_debug("audio req%02x.%02x v%04x i%04x l%d\n",
+			ctrl->bRequestType, ctrl->bRequest,
+			w_value, w_index, w_length);
+		req->zero = 0;
+		req->length = value;
+		req->complete = audio_control_complete;
+		value = usb_ep_queue(cdev->gadget->ep0, req, GFP_ATOMIC);
+		if (value < 0)
+			pr_err("audio response on err %d\n", value);
+	}
+
+	/* device either stalls (value < 0) or reports success */
+	return value;
+}
+
+static int audio_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
+{
+	struct audio_dev *audio = func_to_audio(f);
+	struct usb_composite_dev *cdev = f->config->cdev;
+	int ret;
+
+	pr_debug("audio_set_alt intf %d, alt %d\n", intf, alt);
+
+	ret = config_ep_by_speed(cdev->gadget, f, audio->in_ep);
+	if (ret)
+		return ret;
+
+	usb_ep_enable(audio->in_ep);
+	return 0;
+}
+
+static void audio_disable(struct usb_function *f)
+{
+	struct audio_dev	*audio = func_to_audio(f);
+
+	pr_debug("audio_disable\n");
+	usb_ep_disable(audio->in_ep);
+}
+
+static void audio_free_func(struct usb_function *f)
+{
+	/* no-op */
+}
+
+/*-------------------------------------------------------------------------*/
+
+static void audio_build_desc(struct audio_dev *audio)
+{
+	u8 *sam_freq;
+	int rate;
+
+	/* Set channel numbers */
+	input_terminal_desc.bNrChannels = 2;
+	as_type_i_desc.bNrChannels = 2;
+
+	/* Set sample rates */
+	rate = SAMPLE_RATE;
+	sam_freq = as_type_i_desc.tSamFreq[0];
+	memcpy(sam_freq, &rate, 3);
+}
+
+
+static int snd_card_setup(struct usb_configuration *c,
+	struct audio_source_config *config);
+static struct audio_source_instance *to_fi_audio_source(
+	const struct usb_function_instance *fi);
+
+
+/* audio function driver setup/binding */
+static int
+audio_bind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct usb_composite_dev *cdev = c->cdev;
+	struct audio_dev *audio = func_to_audio(f);
+	int status;
+	struct usb_ep *ep;
+	struct usb_request *req;
+	int i;
+	int err;
+
+	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
+		struct audio_source_instance *fi_audio =
+				to_fi_audio_source(f->fi);
+		struct audio_source_config *config =
+				fi_audio->config;
+
+		err = snd_card_setup(c, config);
+		if (err)
+			return err;
+	}
+
+	audio_build_desc(audio);
+
+	/* allocate instance-specific interface IDs, and patch descriptors */
+	status = usb_interface_id(c, f);
+	if (status < 0)
+		goto fail;
+	ac_interface_desc.bInterfaceNumber = status;
+
+	/* AUDIO_AC_INTERFACE */
+	ac_header_desc.baInterfaceNr[0] = status;
+
+	status = usb_interface_id(c, f);
+	if (status < 0)
+		goto fail;
+	as_interface_alt_0_desc.bInterfaceNumber = status;
+	as_interface_alt_1_desc.bInterfaceNumber = status;
+
+	/* AUDIO_AS_INTERFACE */
+	ac_header_desc.baInterfaceNr[1] = status;
+
+	status = -ENODEV;
+
+	/* allocate our endpoint */
+	ep = usb_ep_autoconfig(cdev->gadget, &fs_as_in_ep_desc);
+	if (!ep)
+		goto fail;
+	audio->in_ep = ep;
+	ep->driver_data = audio; /* claim */
+
+	if (gadget_is_dualspeed(c->cdev->gadget))
+		hs_as_in_ep_desc.bEndpointAddress =
+			fs_as_in_ep_desc.bEndpointAddress;
+
+	f->fs_descriptors = fs_audio_desc;
+	f->hs_descriptors = hs_audio_desc;
+
+	for (i = 0, status = 0; i < IN_EP_REQ_COUNT && status == 0; i++) {
+		req = audio_request_new(ep, IN_EP_MAX_PACKET_SIZE);
+		if (req) {
+			req->context = audio;
+			req->complete = audio_data_complete;
+			audio_req_put(audio, req);
+		} else
+			status = -ENOMEM;
+	}
+
+fail:
+	return status;
+}
+
+static void
+audio_unbind(struct usb_configuration *c, struct usb_function *f)
+{
+	struct audio_dev *audio = func_to_audio(f);
+	struct usb_request *req;
+
+	while ((req = audio_req_get(audio)))
+		audio_request_free(req, audio->in_ep);
+
+	snd_card_free_when_closed(audio->card);
+	audio->card = NULL;
+	audio->pcm = NULL;
+	audio->substream = NULL;
+	audio->in_ep = NULL;
+
+	if (IS_ENABLED(CONFIG_USB_CONFIGFS)) {
+		struct audio_source_instance *fi_audio =
+				to_fi_audio_source(f->fi);
+		struct audio_source_config *config =
+				fi_audio->config;
+
+		config->card = -1;
+		config->device = -1;
+	}
+}
+
+static void audio_pcm_playback_start(struct audio_dev *audio)
+{
+	audio->start_time = ktime_get();
+	audio->frames_sent = 0;
+	audio_send(audio);
+}
+
+static void audio_pcm_playback_stop(struct audio_dev *audio)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+	audio->buffer_start = 0;
+	audio->buffer_end = 0;
+	audio->buffer_pos = 0;
+	spin_unlock_irqrestore(&audio->lock, flags);
+}
+
+static int audio_pcm_open(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = substream->private_data;
+
+	runtime->private_data = audio;
+	runtime->hw = audio_hw_info;
+	snd_pcm_limit_hw_rates(runtime);
+	runtime->hw.channels_max = 2;
+
+	audio->substream = substream;
+
+	/* Add the QoS request and set the latency to 0 */
+	pm_qos_add_request(&audio->pm_qos, PM_QOS_CPU_DMA_LATENCY, 0);
+
+	return 0;
+}
+
+static int audio_pcm_close(struct snd_pcm_substream *substream)
+{
+	struct audio_dev *audio = substream->private_data;
+	unsigned long flags;
+
+	spin_lock_irqsave(&audio->lock, flags);
+
+	/* Remove the QoS request */
+	pm_qos_remove_request(&audio->pm_qos);
+
+	audio->substream = NULL;
+	spin_unlock_irqrestore(&audio->lock, flags);
+
+	return 0;
+}
+
+static int audio_pcm_hw_params(struct snd_pcm_substream *substream,
+				struct snd_pcm_hw_params *params)
+{
+	unsigned int channels = params_channels(params);
+	unsigned int rate = params_rate(params);
+
+	if (rate != SAMPLE_RATE)
+		return -EINVAL;
+	if (channels != 2)
+		return -EINVAL;
+
+	return snd_pcm_lib_alloc_vmalloc_buffer(substream,
+		params_buffer_bytes(params));
+}
+
+static int audio_pcm_hw_free(struct snd_pcm_substream *substream)
+{
+	return snd_pcm_lib_free_vmalloc_buffer(substream);
+}
+
+static int audio_pcm_prepare(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = runtime->private_data;
+
+	audio->period = snd_pcm_lib_period_bytes(substream);
+	audio->period_offset = 0;
+	audio->buffer_start = runtime->dma_area;
+	audio->buffer_end = audio->buffer_start
+		+ snd_pcm_lib_buffer_bytes(substream);
+	audio->buffer_pos = audio->buffer_start;
+
+	return 0;
+}
+
+static snd_pcm_uframes_t audio_pcm_pointer(struct snd_pcm_substream *substream)
+{
+	struct snd_pcm_runtime *runtime = substream->runtime;
+	struct audio_dev *audio = runtime->private_data;
+	ssize_t bytes = audio->buffer_pos - audio->buffer_start;
+
+	/* return offset of next frame to fill in our buffer */
+	return bytes_to_frames(runtime, bytes);
+}
+
+static int audio_pcm_playback_trigger(struct snd_pcm_substream *substream,
+					int cmd)
+{
+	struct audio_dev *audio = substream->runtime->private_data;
+	int ret = 0;
+
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_RESUME:
+		audio_pcm_playback_start(audio);
+		break;
+
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_SUSPEND:
+		audio_pcm_playback_stop(audio);
+		break;
+
+	default:
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+static struct audio_dev _audio_dev = {
+	.func = {
+		.name = "audio_source",
+		.bind = audio_bind,
+		.unbind = audio_unbind,
+		.set_alt = audio_set_alt,
+		.setup = audio_setup,
+		.disable = audio_disable,
+		.free_func = audio_free_func,
+	},
+	.lock = __SPIN_LOCK_UNLOCKED(_audio_dev.lock),
+	.idle_reqs = LIST_HEAD_INIT(_audio_dev.idle_reqs),
+};
+
+static struct snd_pcm_ops audio_playback_ops = {
+	.open		= audio_pcm_open,
+	.close		= audio_pcm_close,
+	.ioctl		= snd_pcm_lib_ioctl,
+	.hw_params	= audio_pcm_hw_params,
+	.hw_free	= audio_pcm_hw_free,
+	.prepare	= audio_pcm_prepare,
+	.trigger	= audio_pcm_playback_trigger,
+	.pointer	= audio_pcm_pointer,
+};
+
+int audio_source_bind_config(struct usb_configuration *c,
+		struct audio_source_config *config)
+{
+	struct audio_dev *audio;
+	int err;
+
+	config->card = -1;
+	config->device = -1;
+
+	audio = &_audio_dev;
+
+	err = snd_card_setup(c, config);
+	if (err)
+		return err;
+
+	err = usb_add_function(c, &audio->func);
+	if (err)
+		goto add_fail;
+
+	return 0;
+
+add_fail:
+	snd_card_free(audio->card);
+	return err;
+}
+
+static int snd_card_setup(struct usb_configuration *c,
+		struct audio_source_config *config)
+{
+	struct audio_dev *audio;
+	struct snd_card *card;
+	struct snd_pcm *pcm;
+	int err;
+
+	audio = &_audio_dev;
+
+	err = snd_card_new(&c->cdev->gadget->dev,
+			SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
+			THIS_MODULE, 0, &card);
+	if (err)
+		return err;
+
+	err = snd_pcm_new(card, "USB audio source", 0, 1, 0, &pcm);
+	if (err)
+		goto pcm_fail;
+
+	pcm->private_data = audio;
+	pcm->info_flags = 0;
+	audio->pcm = pcm;
+
+	strlcpy(pcm->name, "USB gadget audio", sizeof(pcm->name));
+
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &audio_playback_ops);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+				NULL, 0, 64 * 1024);
+
+	strlcpy(card->driver, "audio_source", sizeof(card->driver));
+	strlcpy(card->shortname, card->driver, sizeof(card->shortname));
+	strlcpy(card->longname, "USB accessory audio source",
+		sizeof(card->longname));
+
+	err = snd_card_register(card);
+	if (err)
+		goto register_fail;
+
+	config->card = pcm->card->number;
+	config->device = pcm->device;
+	audio->card = card;
+	return 0;
+
+register_fail:
+pcm_fail:
+	snd_card_free(audio->card);
+	return err;
+}
+
+static struct audio_source_instance *to_audio_source_instance(
+					struct config_item *item)
+{
+	return container_of(to_config_group(item), struct audio_source_instance,
+		func_inst.group);
+}
+
+static struct audio_source_instance *to_fi_audio_source(
+					const struct usb_function_instance *fi)
+{
+	return container_of(fi, struct audio_source_instance, func_inst);
+}
+
+static void audio_source_attr_release(struct config_item *item)
+{
+	struct audio_source_instance *fi_audio = to_audio_source_instance(item);
+
+	usb_put_function_instance(&fi_audio->func_inst);
+}
+
+static int audio_source_set_inst_name(struct usb_function_instance *fi,
+					const char *name)
+{
+	struct audio_source_instance *fi_audio;
+	char *ptr;
+	int name_len;
+
+	name_len = strlen(name) + 1;
+	if (name_len > MAX_INST_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	ptr = kstrndup(name, name_len, GFP_KERNEL);
+	if (!ptr)
+		return -ENOMEM;
+
+	fi_audio = to_fi_audio_source(fi);
+	fi_audio->name = ptr;
+
+	return 0;
+}
+
+static void audio_source_free_inst(struct usb_function_instance *fi)
+{
+	struct audio_source_instance *fi_audio;
+
+	fi_audio = to_fi_audio_source(fi);
+	device_destroy(fi_audio->audio_device->class,
+			fi_audio->audio_device->devt);
+	kfree(fi_audio->name);
+	kfree(fi_audio->config);
+}
+
+static ssize_t audio_source_pcm_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct audio_source_instance *fi_audio = dev_get_drvdata(dev);
+	struct audio_source_config *config = fi_audio->config;
+
+	/* print PCM card and device numbers */
+	return sprintf(buf, "%d %d\n", config->card, config->device);
+}
+
+struct device *create_function_device(char *name);
+
+static struct usb_function_instance *audio_source_alloc_inst(void)
+{
+	struct audio_source_instance *fi_audio;
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+	struct device *dev;
+	void *err_ptr;
+	int err = 0;
+
+	fi_audio = kzalloc(sizeof(*fi_audio), GFP_KERNEL);
+	if (!fi_audio)
+		return ERR_PTR(-ENOMEM);
+
+	fi_audio->func_inst.set_inst_name = audio_source_set_inst_name;
+	fi_audio->func_inst.free_func_inst = audio_source_free_inst;
+
+	fi_audio->config = kzalloc(sizeof(struct audio_source_config),
+							GFP_KERNEL);
+	if (!fi_audio->config) {
+		err_ptr = ERR_PTR(-ENOMEM);
+		goto fail_audio;
+	}
+
+	config_group_init_type_name(&fi_audio->func_inst.group, "",
+						&audio_source_func_type);
+	dev = create_function_device("f_audio_source");
+
+	if (IS_ERR(dev)) {
+		err_ptr = dev;
+		goto fail_audio_config;
+	}
+
+	fi_audio->config->card = -1;
+	fi_audio->config->device = -1;
+	fi_audio->audio_device = dev;
+
+	attrs = audio_source_function_attributes;
+	if (attrs) {
+		while ((attr = *attrs++) && !err)
+			err = device_create_file(dev, attr);
+		if (err) {
+			err_ptr = ERR_PTR(-EINVAL);
+			goto fail_device;
+		}
+	}
+
+	dev_set_drvdata(dev, fi_audio);
+	_audio_dev.config = fi_audio->config;
+
+	return  &fi_audio->func_inst;
+
+fail_device:
+	device_destroy(dev->class, dev->devt);
+fail_audio_config:
+	kfree(fi_audio->config);
+fail_audio:
+	kfree(fi_audio);
+	return err_ptr;
+
+}
+
+static struct usb_function *audio_source_alloc(struct usb_function_instance *fi)
+{
+	return &_audio_dev.func;
+}
+
+DECLARE_USB_FUNCTION_INIT(audio_source, audio_source_alloc_inst,
+			audio_source_alloc);
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
index 0e083a5..6745919 100644
--- a/drivers/usb/gadget/function/f_midi.c
+++ b/drivers/usb/gadget/function/f_midi.c
@@ -1222,6 +1222,65 @@
 	}
 }
 
+#ifdef CONFIG_USB_CONFIGFS_UEVENT
+extern struct device *create_function_device(char *name);
+static ssize_t alsa_show(struct device *dev,
+		struct device_attribute *attr, char *buf)
+{
+	struct usb_function_instance *fi_midi = dev_get_drvdata(dev);
+	struct f_midi *midi;
+
+	if (!fi_midi->f)
+		dev_warn(dev, "f_midi: function not set\n");
+
+	if (fi_midi && fi_midi->f) {
+		midi = func_to_midi(fi_midi->f);
+		if (midi->rmidi && midi->rmidi->card)
+			return sprintf(buf, "%d %d\n",
+			midi->rmidi->card->number, midi->rmidi->device);
+	}
+
+	/* print PCM card and device numbers */
+	return sprintf(buf, "%d %d\n", -1, -1);
+}
+
+static DEVICE_ATTR(alsa, S_IRUGO, alsa_show, NULL);
+
+static struct device_attribute *alsa_function_attributes[] = {
+	&dev_attr_alsa,
+	NULL
+};
+
+static int create_alsa_device(struct usb_function_instance *fi)
+{
+	struct device *dev;
+	struct device_attribute **attrs;
+	struct device_attribute *attr;
+	int err = 0;
+
+	dev = create_function_device("f_midi");
+	if (IS_ERR(dev))
+		return PTR_ERR(dev);
+
+	attrs = alsa_function_attributes;
+	if (attrs) {
+		while ((attr = *attrs++) && !err)
+			err = device_create_file(dev, attr);
+		if (err) {
+			device_destroy(dev->class, dev->devt);
+			return -EINVAL;
+		}
+	}
+	dev_set_drvdata(dev, fi);
+	return 0;
+}
+#else
+static int create_alsa_device(struct usb_function_instance *fi)
+{
+	return 0;
+}
+#endif
+
 static struct usb_function_instance *f_midi_alloc_inst(void)
 {
 	struct f_midi_opts *opts;
@@ -1240,6 +1299,11 @@
 	opts->out_ports = 1;
 	opts->refcnt = 1;
 
+	if (create_alsa_device(&opts->func_inst)) {
+		kfree(opts);
+		return ERR_PTR(-ENODEV);
+	}
+
 	config_group_init_type_name(&opts->func_inst.group, "",
 				    &midi_func_type);
 
@@ -1260,6 +1324,7 @@
 		kfifo_free(&midi->in_req_fifo);
 		kfree(midi);
 		free = true;
+		opts->func_inst.f = NULL;
 	}
 	mutex_unlock(&opts->lock);
 
@@ -1347,6 +1412,7 @@
 	midi->func.disable	= f_midi_disable;
 	midi->func.free_func	= f_midi_free;
 
+	fi->f = &midi->func;
 	return &midi->func;
 
 midi_free:
diff --git a/drivers/usb/gadget/legacy/Kconfig b/drivers/usb/gadget/legacy/Kconfig
index 69ff7f8..abf7a05 100644
--- a/drivers/usb/gadget/legacy/Kconfig
+++ b/drivers/usb/gadget/legacy/Kconfig
@@ -14,6 +14,32 @@
 # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
 #
 
+choice
+	tristate "USB Gadget precomposed configurations"
+	default USB_ETH
+	optional
+	help
+	  A Linux "Gadget Driver" talks to the USB Peripheral Controller
+	  driver through the abstract "gadget" API.  Some other operating
+	  systems call these "client" drivers, of which "class drivers"
+	  are a subset (implementing a USB device class specification).
+	  A gadget driver implements one or more USB functions using
+	  the peripheral hardware.
+
+	  Gadget drivers are hardware-neutral, or "platform independent",
+	  except that they sometimes must understand quirks or limitations
+	  of the particular controllers they work with.  For example, when
+	  a controller doesn't support alternate configurations or provide
+	  enough of the right types of endpoints, the gadget driver might
+	  not be able work with that controller, or might need to implement
+	  a less common variant of a device class protocol.
+
+	  The available choices each represent a single precomposed USB
+	  gadget configuration. In the device model, each option contains
+	  both the device instantiation as a child for a USB gadget
+	  controller, and the relevant drivers for each function declared
+	  by the device.
+
 config USB_ZERO
 	tristate "Gadget Zero (DEVELOPMENT)"
 	select USB_LIBCOMPOSITE
@@ -489,3 +515,16 @@
 
 	  Say "y" to link the driver statically, or "m" to build a
 	  dynamically linked module called "g_webcam".
+
+config USB_RAW_GADGET
+	tristate "USB Raw Gadget"
+	help
+	  USB Raw Gadget is a kernel module that provides a userspace interface
+	  for the USB Gadget subsystem. Essentially it allows to emulate USB
+	  devices from userspace. See Documentation/usb/raw-gadget.rst for
+	  details.
+
+	  Say "y" to link the driver statically, or "m" to build a
+	  dynamically linked module called "raw_gadget".
+
+endchoice
diff --git a/drivers/usb/gadget/legacy/Makefile b/drivers/usb/gadget/legacy/Makefile
index abd0c3e..4d864bf 100644
--- a/drivers/usb/gadget/legacy/Makefile
+++ b/drivers/usb/gadget/legacy/Makefile
@@ -43,3 +43,4 @@
 obj-$(CONFIG_USB_G_NCM)		+= g_ncm.o
 obj-$(CONFIG_USB_G_ACM_MS)	+= g_acm_ms.o
 obj-$(CONFIG_USB_GADGET_TARGET)	+= tcm_usb_gadget.o
+obj-$(CONFIG_USB_RAW_GADGET)	+= raw_gadget.o
diff --git a/drivers/usb/gadget/legacy/raw_gadget.c b/drivers/usb/gadget/legacy/raw_gadget.c
new file mode 100644
index 0000000..e01e366
--- /dev/null
+++ b/drivers/usb/gadget/legacy/raw_gadget.c
@@ -0,0 +1,1280 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * USB Raw Gadget driver.
+ * See Documentation/usb/raw-gadget.rst for more details.
+ *
+ * Andrey Konovalov <andreyknvl@gmail.com>
+ */
+
+#include <linux/compiler.h>
+#include <linux/ctype.h>
+#include <linux/debugfs.h>
+#include <linux/delay.h>
+#include <linux/kref.h>
+#include <linux/miscdevice.h>
+#include <linux/module.h>
+#include <linux/semaphore.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/wait.h>
+
+#include <linux/usb.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/ch11.h>
+#include <linux/usb/gadget.h>
+
+#include <uapi/linux/usb/raw_gadget.h>
+
+#define	DRIVER_DESC "USB Raw Gadget"
+#define DRIVER_NAME "raw-gadget"
+
+MODULE_DESCRIPTION(DRIVER_DESC);
+MODULE_AUTHOR("Andrey Konovalov");
+MODULE_LICENSE("GPL");
+
+/*----------------------------------------------------------------------*/
+
+#define RAW_EVENT_QUEUE_SIZE	16
+
+struct raw_event_queue {
+	/* See the comment in raw_event_queue_fetch() for locking details. */
+	spinlock_t		lock;
+	struct semaphore	sema;
+	struct usb_raw_event	*events[RAW_EVENT_QUEUE_SIZE];
+	int			size;
+};
+
+static void raw_event_queue_init(struct raw_event_queue *queue)
+{
+	spin_lock_init(&queue->lock);
+	sema_init(&queue->sema, 0);
+	queue->size = 0;
+}
+
+static int raw_event_queue_add(struct raw_event_queue *queue,
+	enum usb_raw_event_type type, size_t length, const void *data)
+{
+	unsigned long flags;
+	struct usb_raw_event *event;
+
+	spin_lock_irqsave(&queue->lock, flags);
+	if (WARN_ON(queue->size >= RAW_EVENT_QUEUE_SIZE)) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return -ENOMEM;
+	}
+	event = kmalloc(sizeof(*event) + length, GFP_ATOMIC);
+	if (!event) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return -ENOMEM;
+	}
+	event->type = type;
+	event->length = length;
+	if (event->length)
+		memcpy(&event->data[0], data, length);
+	queue->events[queue->size] = event;
+	queue->size++;
+	up(&queue->sema);
+	spin_unlock_irqrestore(&queue->lock, flags);
+	return 0;
+}
+
+static struct usb_raw_event *raw_event_queue_fetch(
+				struct raw_event_queue *queue)
+{
+	int ret;
+	unsigned long flags;
+	struct usb_raw_event *event;
+
+	/*
+	 * This function can be called concurrently. We first check that
+	 * there's at least one event queued by decrementing the semaphore,
+	 * and then take the lock to protect queue struct fields.
+	 */
+	ret = down_interruptible(&queue->sema);
+	if (ret)
+		return ERR_PTR(ret);
+	spin_lock_irqsave(&queue->lock, flags);
+	/*
+	 * queue->size must have the same value as queue->sema counter (before
+	 * the down_interruptible() call above), so this check is a fail-safe.
+	 */
+	if (WARN_ON(!queue->size)) {
+		spin_unlock_irqrestore(&queue->lock, flags);
+		return ERR_PTR(-ENODEV);
+	}
+	event = queue->events[0];
+	queue->size--;
+	memmove(&queue->events[0], &queue->events[1],
+			queue->size * sizeof(queue->events[0]));
+	spin_unlock_irqrestore(&queue->lock, flags);
+	return event;
+}
+
+static void raw_event_queue_destroy(struct raw_event_queue *queue)
+{
+	int i;
+
+	for (i = 0; i < queue->size; i++)
+		kfree(queue->events[i]);
+	queue->size = 0;
+}
+
+/*----------------------------------------------------------------------*/
+
+struct raw_dev;
+
+enum ep_state {
+	STATE_EP_DISABLED,
+	STATE_EP_ENABLED,
+};
+
+struct raw_ep {
+	struct raw_dev		*dev;
+	enum ep_state		state;
+	struct usb_ep		*ep;
+	u8			addr;
+	struct usb_request	*req;
+	bool			urb_queued;
+	bool			disabling;
+	ssize_t			status;
+};
+
+enum dev_state {
+	STATE_DEV_INVALID = 0,
+	STATE_DEV_OPENED,
+	STATE_DEV_INITIALIZED,
+	STATE_DEV_RUNNING,
+	STATE_DEV_CLOSED,
+	STATE_DEV_FAILED
+};
+
+struct raw_dev {
+	struct kref			count;
+	spinlock_t			lock;
+
+	const char			*udc_name;
+	struct usb_gadget_driver	driver;
+
+	/* Reference to misc device: */
+	struct device			*dev;
+
+	/* Protected by lock: */
+	enum dev_state			state;
+	bool				gadget_registered;
+	struct usb_gadget		*gadget;
+	struct usb_request		*req;
+	bool				ep0_in_pending;
+	bool				ep0_out_pending;
+	bool				ep0_urb_queued;
+	ssize_t				ep0_status;
+	struct raw_ep			eps[USB_RAW_EPS_NUM_MAX];
+	int				eps_num;
+
+	struct completion		ep0_done;
+	struct raw_event_queue		queue;
+};
+
+static struct raw_dev *dev_new(void)
+{
+	struct raw_dev *dev;
+
+	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
+	if (!dev)
+		return NULL;
+	/* Matches kref_put() in raw_release(). */
+	kref_init(&dev->count);
+	spin_lock_init(&dev->lock);
+	init_completion(&dev->ep0_done);
+	raw_event_queue_init(&dev->queue);
+	return dev;
+}
+
+static void dev_free(struct kref *kref)
+{
+	struct raw_dev *dev = container_of(kref, struct raw_dev, count);
+	int i;
+
+	kfree(dev->udc_name);
+	kfree(dev->driver.udc_name);
+	if (dev->req) {
+		if (dev->ep0_urb_queued)
+			usb_ep_dequeue(dev->gadget->ep0, dev->req);
+		usb_ep_free_request(dev->gadget->ep0, dev->req);
+	}
+	raw_event_queue_destroy(&dev->queue);
+	for (i = 0; i < dev->eps_num; i++) {
+		if (dev->eps[i].state == STATE_EP_DISABLED)
+			continue;
+		usb_ep_disable(dev->eps[i].ep);
+		usb_ep_free_request(dev->eps[i].ep, dev->eps[i].req);
+		kfree(dev->eps[i].ep->desc);
+		dev->eps[i].state = STATE_EP_DISABLED;
+	}
+	kfree(dev);
+}
+
+/*----------------------------------------------------------------------*/
+
+static int raw_queue_event(struct raw_dev *dev,
+	enum usb_raw_event_type type, size_t length, const void *data)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	ret = raw_event_queue_add(&dev->queue, type, length, data);
+	if (ret < 0) {
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		spin_unlock_irqrestore(&dev->lock, flags);
+	}
+	return ret;
+}
+
+static void gadget_ep0_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct raw_dev *dev = req->context;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (req->status)
+		dev->ep0_status = req->status;
+	else
+		dev->ep0_status = req->actual;
+	if (dev->ep0_in_pending)
+		dev->ep0_in_pending = false;
+	else
+		dev->ep0_out_pending = false;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	complete(&dev->ep0_done);
+}
+
+static u8 get_ep_addr(const char *name)
+{
+	/* If the endpoint has fixed function (named as e.g. "ep12out-bulk"),
+	 * parse the endpoint address from its name. We deliberately use
+	 * deprecated simple_strtoul() function here, as the number isn't
+	 * followed by '\0' nor '\n'.
+	 */
+	if (isdigit(name[2]))
+		return simple_strtoul(&name[2], NULL, 10);
+	/* Otherwise the endpoint is configurable (named as e.g. "ep-a"). */
+	return USB_RAW_EP_ADDR_ANY;
+}
+
+static int gadget_bind(struct usb_gadget *gadget,
+			struct usb_gadget_driver *driver)
+{
+	int ret = 0, i = 0;
+	struct raw_dev *dev = container_of(driver, struct raw_dev, driver);
+	struct usb_request *req;
+	struct usb_ep *ep;
+	unsigned long flags;
+
+	if (strcmp(gadget->name, dev->udc_name) != 0)
+		return -ENODEV;
+
+	set_gadget_data(gadget, dev);
+	req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
+	if (!req) {
+		dev_err(&gadget->dev, "usb_ep_alloc_request failed\n");
+		set_gadget_data(gadget, NULL);
+		return -ENOMEM;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	dev->req = req;
+	dev->req->context = dev;
+	dev->req->complete = gadget_ep0_complete;
+	dev->gadget = gadget;
+	gadget_for_each_ep(ep, dev->gadget) {
+		dev->eps[i].ep = ep;
+		dev->eps[i].addr = get_ep_addr(ep->name);
+		dev->eps[i].state = STATE_EP_DISABLED;
+		i++;
+	}
+	dev->eps_num = i;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	/* Matches kref_put() in gadget_unbind(). */
+	kref_get(&dev->count);
+
+	ret = raw_queue_event(dev, USB_RAW_EVENT_CONNECT, 0, NULL);
+	if (ret < 0)
+		dev_err(&gadget->dev, "failed to queue event\n");
+
+	return ret;
+}
+
+static void gadget_unbind(struct usb_gadget *gadget)
+{
+	struct raw_dev *dev = get_gadget_data(gadget);
+
+	set_gadget_data(gadget, NULL);
+	/* Matches kref_get() in gadget_bind(). */
+	kref_put(&dev->count, dev_free);
+}
+
+static int gadget_setup(struct usb_gadget *gadget,
+			const struct usb_ctrlrequest *ctrl)
+{
+	int ret = 0;
+	struct raw_dev *dev = get_gadget_data(gadget);
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_err(&gadget->dev, "ignoring, device is not running\n");
+		ret = -ENODEV;
+		goto out_unlock;
+	}
+	if (dev->ep0_in_pending || dev->ep0_out_pending) {
+		dev_dbg(&gadget->dev, "stalling, request already pending\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((ctrl->bRequestType & USB_DIR_IN) && ctrl->wLength)
+		dev->ep0_in_pending = true;
+	else
+		dev->ep0_out_pending = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = raw_queue_event(dev, USB_RAW_EVENT_CONTROL, sizeof(*ctrl), ctrl);
+	if (ret < 0)
+		dev_err(&gadget->dev, "failed to queue event\n");
+	goto out;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+out:
+	return ret;
+}
+
+/* These are currently unused but present in case UDC driver requires them. */
+static void gadget_disconnect(struct usb_gadget *gadget) { }
+static void gadget_suspend(struct usb_gadget *gadget) { }
+static void gadget_resume(struct usb_gadget *gadget) { }
+static void gadget_reset(struct usb_gadget *gadget) { }
+
+/*----------------------------------------------------------------------*/
+
+static struct miscdevice raw_misc_device;
+
+static int raw_open(struct inode *inode, struct file *fd)
+{
+	struct raw_dev *dev;
+
+	/* Nonblocking I/O is not supported yet. */
+	if (fd->f_flags & O_NONBLOCK)
+		return -EINVAL;
+
+	dev = dev_new();
+	if (!dev)
+		return -ENOMEM;
+	fd->private_data = dev;
+	dev->state = STATE_DEV_OPENED;
+	dev->dev = raw_misc_device.this_device;
+	return 0;
+}
+
+static int raw_release(struct inode *inode, struct file *fd)
+{
+	int ret = 0;
+	struct raw_dev *dev = fd->private_data;
+	unsigned long flags;
+	bool unregister = false;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	dev->state = STATE_DEV_CLOSED;
+	if (!dev->gadget) {
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_put;
+	}
+	if (dev->gadget_registered)
+		unregister = true;
+	dev->gadget_registered = false;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	if (unregister) {
+		ret = usb_gadget_unregister_driver(&dev->driver);
+		if (ret != 0)
+			dev_err(dev->dev,
+				"usb_gadget_unregister_driver() failed with %d\n",
+				ret);
+		/* Matches kref_get() in raw_ioctl_run(). */
+		kref_put(&dev->count, dev_free);
+	}
+
+out_put:
+	/* Matches dev_new() in raw_open(). */
+	kref_put(&dev->count, dev_free);
+	return ret;
+}
+
+/*----------------------------------------------------------------------*/
+
+static int raw_ioctl_init(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	struct usb_raw_init arg;
+	char *udc_driver_name;
+	char *udc_device_name;
+	unsigned long flags;
+
+	if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
+		return -EFAULT;
+
+	switch (arg.speed) {
+	case USB_SPEED_UNKNOWN:
+		arg.speed = USB_SPEED_HIGH;
+		break;
+	case USB_SPEED_LOW:
+	case USB_SPEED_FULL:
+	case USB_SPEED_HIGH:
+	case USB_SPEED_SUPER:
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	udc_driver_name = kmalloc(UDC_NAME_LENGTH_MAX, GFP_KERNEL);
+	if (!udc_driver_name)
+		return -ENOMEM;
+	ret = strscpy(udc_driver_name, &arg.driver_name[0],
+				UDC_NAME_LENGTH_MAX);
+	if (ret < 0) {
+		kfree(udc_driver_name);
+		return ret;
+	}
+	ret = 0;
+
+	udc_device_name = kmalloc(UDC_NAME_LENGTH_MAX, GFP_KERNEL);
+	if (!udc_device_name) {
+		kfree(udc_driver_name);
+		return -ENOMEM;
+	}
+	ret = strscpy(udc_device_name, &arg.device_name[0],
+				UDC_NAME_LENGTH_MAX);
+	if (ret < 0) {
+		kfree(udc_driver_name);
+		kfree(udc_device_name);
+		return ret;
+	}
+	ret = 0;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_OPENED) {
+		dev_dbg(dev->dev, "fail, device is not opened\n");
+		kfree(udc_driver_name);
+		kfree(udc_device_name);
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	dev->udc_name = udc_driver_name;
+
+	dev->driver.function = DRIVER_DESC;
+	dev->driver.max_speed = arg.speed;
+	dev->driver.setup = gadget_setup;
+	dev->driver.disconnect = gadget_disconnect;
+	dev->driver.bind = gadget_bind;
+	dev->driver.unbind = gadget_unbind;
+	dev->driver.suspend = gadget_suspend;
+	dev->driver.resume = gadget_resume;
+	dev->driver.reset = gadget_reset;
+	dev->driver.driver.name = DRIVER_NAME;
+	dev->driver.udc_name = udc_device_name;
+	dev->driver.match_existing_only = 1;
+
+	dev->state = STATE_DEV_INITIALIZED;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_run(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_INITIALIZED) {
+		dev_dbg(dev->dev, "fail, device is not initialized\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_gadget_probe_driver(&dev->driver);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (ret) {
+		dev_err(dev->dev,
+			"fail, usb_gadget_probe_driver returned %d\n", ret);
+		dev->state = STATE_DEV_FAILED;
+		goto out_unlock;
+	}
+	dev->gadget_registered = true;
+	dev->state = STATE_DEV_RUNNING;
+	/* Matches kref_put() in raw_release(). */
+	kref_get(&dev->count);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_event_fetch(struct raw_dev *dev, unsigned long value)
+{
+	struct usb_raw_event arg;
+	unsigned long flags;
+	struct usb_raw_event *event;
+	uint32_t length;
+
+	if (copy_from_user(&arg, (void __user *)value, sizeof(arg)))
+		return -EFAULT;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EINVAL;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -EBUSY;
+	}
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	event = raw_event_queue_fetch(&dev->queue);
+	if (PTR_ERR(event) == -EINTR) {
+		dev_dbg(&dev->gadget->dev, "event fetching interrupted\n");
+		return -EINTR;
+	}
+	if (IS_ERR(event)) {
+		dev_err(&dev->gadget->dev, "failed to fetch event\n");
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		return -ENODEV;
+	}
+	length = min(arg.length, event->length);
+	if (copy_to_user((void __user *)value, event, sizeof(*event) + length))
+		return -EFAULT;
+
+	return 0;
+}
+
+static void *raw_alloc_io_data(struct usb_raw_ep_io *io, void __user *ptr,
+				bool get_from_user)
+{
+	void *data;
+
+	if (copy_from_user(io, ptr, sizeof(*io)))
+		return ERR_PTR(-EFAULT);
+	if (io->ep >= USB_RAW_EPS_NUM_MAX)
+		return ERR_PTR(-EINVAL);
+	if (!usb_raw_io_flags_valid(io->flags))
+		return ERR_PTR(-EINVAL);
+	if (io->length > PAGE_SIZE)
+		return ERR_PTR(-EINVAL);
+	if (get_from_user)
+		data = memdup_user(ptr + sizeof(*io), io->length);
+	else {
+		data = kmalloc(io->length, GFP_KERNEL);
+		if (!data)
+			data = ERR_PTR(-ENOMEM);
+	}
+	return data;
+}
+
+static int raw_process_ep0_io(struct raw_dev *dev, struct usb_raw_ep_io *io,
+				void *data, bool in)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->ep0_urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((in && !dev->ep0_in_pending) ||
+			(!in && !dev->ep0_out_pending)) {
+		dev_dbg(&dev->gadget->dev, "fail, wrong direction\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (WARN_ON(in && dev->ep0_out_pending)) {
+		ret = -ENODEV;
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+	if (WARN_ON(!in && dev->ep0_in_pending)) {
+		ret = -ENODEV;
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	dev->req->buf = data;
+	dev->req->length = io->length;
+	dev->req->zero = usb_raw_io_flags_zero(io->flags);
+	dev->ep0_urb_queued = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_ep_queue(dev->gadget->ep0, dev->req, GFP_KERNEL);
+	if (ret) {
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_queue returned %d\n", ret);
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	ret = wait_for_completion_interruptible(&dev->ep0_done);
+	if (ret) {
+		dev_dbg(&dev->gadget->dev, "wait interrupted\n");
+		usb_ep_dequeue(dev->gadget->ep0, dev->req);
+		wait_for_completion(&dev->ep0_done);
+		spin_lock_irqsave(&dev->lock, flags);
+		goto out_done;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	ret = dev->ep0_status;
+
+out_done:
+	dev->ep0_urb_queued = false;
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep0_write(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	void *data;
+	struct usb_raw_ep_io io;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, true);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep0_io(dev, &io, data, true);
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep0_read(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	void *data;
+	struct usb_raw_ep_io io;
+	unsigned int length;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, false);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep0_io(dev, &io, data, false);
+	if (ret < 0)
+		goto free;
+
+	length = min(io.length, (unsigned int)ret);
+	if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
+		ret = -EFAULT;
+	else
+		ret = length;
+free:
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep0_stall(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->ep0_urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (!dev->ep0_in_pending && !dev->ep0_out_pending) {
+		dev_dbg(&dev->gadget->dev, "fail, no request pending\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+
+	ret = usb_ep_set_halt(dev->gadget->ep0);
+	if (ret < 0)
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_halt returned %d\n", ret);
+
+	if (dev->ep0_in_pending)
+		dev->ep0_in_pending = false;
+	else
+		dev->ep0_out_pending = false;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_enable(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i;
+	unsigned long flags;
+	struct usb_endpoint_descriptor *desc;
+	struct raw_ep *ep;
+
+	desc = memdup_user((void __user *)value, sizeof(*desc));
+	if (IS_ERR(desc))
+		return PTR_ERR(desc);
+
+	/*
+	 * Endpoints with a maxpacket length of 0 can cause crashes in UDC
+	 * drivers.
+	 */
+	if (usb_endpoint_maxp(desc) == 0) {
+		dev_dbg(dev->dev, "fail, bad endpoint maxpacket\n");
+		kfree(desc);
+		return -EINVAL;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_free;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_free;
+	}
+
+	for (i = 0; i < dev->eps_num; i++) {
+		ep = &dev->eps[i];
+		if (ep->state != STATE_EP_DISABLED)
+			continue;
+		if (ep->addr != usb_endpoint_num(desc) &&
+				ep->addr != USB_RAW_EP_ADDR_ANY)
+			continue;
+		if (!usb_gadget_ep_match_desc(dev->gadget, ep->ep, desc, NULL))
+			continue;
+		ep->ep->desc = desc;
+		ret = usb_ep_enable(ep->ep);
+		if (ret < 0) {
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_enable returned %d\n", ret);
+			goto out_free;
+		}
+		ep->req = usb_ep_alloc_request(ep->ep, GFP_ATOMIC);
+		if (!ep->req) {
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_alloc_request failed\n");
+			usb_ep_disable(ep->ep);
+			ret = -ENOMEM;
+			goto out_free;
+		}
+		ep->state = STATE_EP_ENABLED;
+		ep->ep->driver_data = ep;
+		ret = i;
+		goto out_unlock;
+	}
+
+	dev_dbg(&dev->gadget->dev, "fail, no gadget endpoints available\n");
+	ret = -EBUSY;
+
+out_free:
+	kfree(desc);
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_disable(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i = value;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (i < 0 || i >= dev->eps_num) {
+		dev_dbg(dev->dev, "fail, invalid endpoint\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->eps[i].state == STATE_EP_DISABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, disable already in progress\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].urb_queued) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, waiting for urb completion\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	dev->eps[i].disabling = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	usb_ep_disable(dev->eps[i].ep);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	usb_ep_free_request(dev->eps[i].ep, dev->eps[i].req);
+	kfree(dev->eps[i].ep->desc);
+	dev->eps[i].state = STATE_EP_DISABLED;
+	dev->eps[i].disabling = false;
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_set_clear_halt_wedge(struct raw_dev *dev,
+		unsigned long value, bool set, bool halt)
+{
+	int ret = 0, i = value;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (i < 0 || i >= dev->eps_num) {
+		dev_dbg(dev->dev, "fail, invalid endpoint\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (dev->eps[i].state == STATE_EP_DISABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, disable is in progress\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (dev->eps[i].urb_queued) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, waiting for urb completion\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (usb_endpoint_xfer_isoc(dev->eps[i].ep->desc)) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, can't halt/wedge ISO endpoint\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
+	if (set && halt) {
+		ret = usb_ep_set_halt(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_halt returned %d\n", ret);
+	} else if (!set && halt) {
+		ret = usb_ep_clear_halt(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_clear_halt returned %d\n", ret);
+	} else if (set && !halt) {
+		ret = usb_ep_set_wedge(dev->eps[i].ep);
+		if (ret < 0)
+			dev_err(&dev->gadget->dev,
+				"fail, usb_ep_set_wedge returned %d\n", ret);
+	}
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static void gadget_ep_complete(struct usb_ep *ep, struct usb_request *req)
+{
+	struct raw_ep *r_ep = (struct raw_ep *)ep->driver_data;
+	struct raw_dev *dev = r_ep->dev;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (req->status)
+		r_ep->status = req->status;
+	else
+		r_ep->status = req->actual;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	complete((struct completion *)req->context);
+}
+
+static int raw_process_ep_io(struct raw_dev *dev, struct usb_raw_ep_io *io,
+				void *data, bool in)
+{
+	int ret = 0;
+	unsigned long flags;
+	struct raw_ep *ep;
+	DECLARE_COMPLETION_ONSTACK(done);
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (io->ep >= dev->eps_num) {
+		dev_dbg(&dev->gadget->dev, "fail, invalid endpoint\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	ep = &dev->eps[io->ep];
+	if (ep->state != STATE_EP_ENABLED) {
+		dev_dbg(&dev->gadget->dev, "fail, endpoint is not enabled\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (ep->disabling) {
+		dev_dbg(&dev->gadget->dev,
+				"fail, endpoint is already being disabled\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if (ep->urb_queued) {
+		dev_dbg(&dev->gadget->dev, "fail, urb already queued\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	if ((in && !ep->ep->caps.dir_in) || (!in && ep->ep->caps.dir_in)) {
+		dev_dbg(&dev->gadget->dev, "fail, wrong direction\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+
+	ep->dev = dev;
+	ep->req->context = &done;
+	ep->req->complete = gadget_ep_complete;
+	ep->req->buf = data;
+	ep->req->length = io->length;
+	ep->req->zero = usb_raw_io_flags_zero(io->flags);
+	ep->urb_queued = true;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	ret = usb_ep_queue(ep->ep, ep->req, GFP_KERNEL);
+	if (ret) {
+		dev_err(&dev->gadget->dev,
+				"fail, usb_ep_queue returned %d\n", ret);
+		spin_lock_irqsave(&dev->lock, flags);
+		dev->state = STATE_DEV_FAILED;
+		goto out_done;
+	}
+
+	ret = wait_for_completion_interruptible(&done);
+	if (ret) {
+		dev_dbg(&dev->gadget->dev, "wait interrupted\n");
+		usb_ep_dequeue(ep->ep, ep->req);
+		wait_for_completion(&done);
+		spin_lock_irqsave(&dev->lock, flags);
+		goto out_done;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	ret = ep->status;
+
+out_done:
+	ep->urb_queued = false;
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_ep_write(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	char *data;
+	struct usb_raw_ep_io io;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, true);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep_io(dev, &io, data, true);
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_ep_read(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	char *data;
+	struct usb_raw_ep_io io;
+	unsigned int length;
+
+	data = raw_alloc_io_data(&io, (void __user *)value, false);
+	if (IS_ERR(data))
+		return PTR_ERR(data);
+	ret = raw_process_ep_io(dev, &io, data, false);
+	if (ret < 0)
+		goto free;
+
+	length = min(io.length, (unsigned int)ret);
+	if (copy_to_user((void __user *)(value + sizeof(io)), data, length))
+		ret = -EFAULT;
+	else
+		ret = length;
+free:
+	kfree(data);
+	return ret;
+}
+
+static int raw_ioctl_configure(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	if (value)
+		return -EINVAL;
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	usb_gadget_set_state(dev->gadget, USB_STATE_CONFIGURED);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static int raw_ioctl_vbus_draw(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		goto out_unlock;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		goto out_unlock;
+	}
+	usb_gadget_vbus_draw(dev->gadget, 2 * value);
+
+out_unlock:
+	spin_unlock_irqrestore(&dev->lock, flags);
+	return ret;
+}
+
+static void fill_ep_caps(struct usb_ep_caps *caps,
+				struct usb_raw_ep_caps *raw_caps)
+{
+	raw_caps->type_control = caps->type_control;
+	raw_caps->type_iso = caps->type_iso;
+	raw_caps->type_bulk = caps->type_bulk;
+	raw_caps->type_int = caps->type_int;
+	raw_caps->dir_in = caps->dir_in;
+	raw_caps->dir_out = caps->dir_out;
+}
+
+static void fill_ep_limits(struct usb_ep *ep, struct usb_raw_ep_limits *limits)
+{
+	limits->maxpacket_limit = ep->maxpacket_limit;
+	limits->max_streams = ep->max_streams;
+}
+
+static int raw_ioctl_eps_info(struct raw_dev *dev, unsigned long value)
+{
+	int ret = 0, i;
+	unsigned long flags;
+	struct usb_raw_eps_info *info;
+	struct raw_ep *ep;
+
+	info = kmalloc(sizeof(*info), GFP_KERNEL);
+	if (!info) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	spin_lock_irqsave(&dev->lock, flags);
+	if (dev->state != STATE_DEV_RUNNING) {
+		dev_dbg(dev->dev, "fail, device is not running\n");
+		ret = -EINVAL;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_free;
+	}
+	if (!dev->gadget) {
+		dev_dbg(dev->dev, "fail, gadget is not bound\n");
+		ret = -EBUSY;
+		spin_unlock_irqrestore(&dev->lock, flags);
+		goto out_free;
+	}
+
+	memset(info, 0, sizeof(*info));
+	for (i = 0; i < dev->eps_num; i++) {
+		ep = &dev->eps[i];
+		strscpy(&info->eps[i].name[0], ep->ep->name,
+				USB_RAW_EP_NAME_MAX);
+		info->eps[i].addr = ep->addr;
+		fill_ep_caps(&ep->ep->caps, &info->eps[i].caps);
+		fill_ep_limits(ep->ep, &info->eps[i].limits);
+	}
+	ret = dev->eps_num;
+	spin_unlock_irqrestore(&dev->lock, flags);
+
+	if (copy_to_user((void __user *)value, info, sizeof(*info)))
+		ret = -EFAULT;
+
+out_free:
+	kfree(info);
+out:
+	return ret;
+}
+
+static long raw_ioctl(struct file *fd, unsigned int cmd, unsigned long value)
+{
+	struct raw_dev *dev = fd->private_data;
+	int ret = 0;
+
+	if (!dev)
+		return -EBUSY;
+
+	switch (cmd) {
+	case USB_RAW_IOCTL_INIT:
+		ret = raw_ioctl_init(dev, value);
+		break;
+	case USB_RAW_IOCTL_RUN:
+		ret = raw_ioctl_run(dev, value);
+		break;
+	case USB_RAW_IOCTL_EVENT_FETCH:
+		ret = raw_ioctl_event_fetch(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_WRITE:
+		ret = raw_ioctl_ep0_write(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_READ:
+		ret = raw_ioctl_ep0_read(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_ENABLE:
+		ret = raw_ioctl_ep_enable(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_DISABLE:
+		ret = raw_ioctl_ep_disable(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_WRITE:
+		ret = raw_ioctl_ep_write(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_READ:
+		ret = raw_ioctl_ep_read(dev, value);
+		break;
+	case USB_RAW_IOCTL_CONFIGURE:
+		ret = raw_ioctl_configure(dev, value);
+		break;
+	case USB_RAW_IOCTL_VBUS_DRAW:
+		ret = raw_ioctl_vbus_draw(dev, value);
+		break;
+	case USB_RAW_IOCTL_EPS_INFO:
+		ret = raw_ioctl_eps_info(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP0_STALL:
+		ret = raw_ioctl_ep0_stall(dev, value);
+		break;
+	case USB_RAW_IOCTL_EP_SET_HALT:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, true, true);
+		break;
+	case USB_RAW_IOCTL_EP_CLEAR_HALT:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, false, true);
+		break;
+	case USB_RAW_IOCTL_EP_SET_WEDGE:
+		ret = raw_ioctl_ep_set_clear_halt_wedge(
+					dev, value, true, false);
+		break;
+	default:
+		ret = -EINVAL;
+	}
+
+	return ret;
+}
+
+/*----------------------------------------------------------------------*/
+
+static const struct file_operations raw_fops = {
+	.open =			raw_open,
+	.unlocked_ioctl =	raw_ioctl,
+	.compat_ioctl =		raw_ioctl,
+	.release =		raw_release,
+	.llseek =		no_llseek,
+};
+
+static struct miscdevice raw_misc_device = {
+	.minor = MISC_DYNAMIC_MINOR,
+	.name = DRIVER_NAME,
+	.fops = &raw_fops,
+};
+
+module_misc_device(raw_misc_device);
diff --git a/drivers/usb/gadget/udc/dummy_hcd.c b/drivers/usb/gadget/udc/dummy_hcd.c
index 58261ec..730f15f 100644
--- a/drivers/usb/gadget/udc/dummy_hcd.c
+++ b/drivers/usb/gadget/udc/dummy_hcd.c
@@ -187,31 +187,31 @@
 		USB_EP_CAPS(USB_EP_CAPS_TYPE_BULK, USB_EP_CAPS_DIR_IN)),
 
 	/* and now some generic EPs so we have enough in multi config */
-	EP_INFO("ep3out",
+	EP_INFO("ep-aout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep4in",
+	EP_INFO("ep-bin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep5out",
+	EP_INFO("ep-cout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep6out",
+	EP_INFO("ep-dout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep7in",
+	EP_INFO("ep-ein",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep8out",
+	EP_INFO("ep-fout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep9in",
+	EP_INFO("ep-gin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep10out",
+	EP_INFO("ep-hout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep11out",
+	EP_INFO("ep-iout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep12in",
+	EP_INFO("ep-jin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep13out",
+	EP_INFO("ep-kout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
-	EP_INFO("ep14in",
+	EP_INFO("ep-lin",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_IN)),
-	EP_INFO("ep15out",
+	EP_INFO("ep-mout",
 		USB_EP_CAPS(TYPE_BULK_OR_INT, USB_EP_CAPS_DIR_OUT)),
 
 #undef EP_INFO
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
index 79b2e79..ffb8165 100644
--- a/drivers/usb/host/Kconfig
+++ b/drivers/usb/host/Kconfig
@@ -42,6 +42,15 @@
        depends on USB_PCI
        default y
 
+config USB_XHCI_PCI_RENESAS
+	tristate "Renesas USB XHCI Driver"
+	depends on USB_XHCI_PCI
+	---help---
+	  Say 'Y' to enable the support for renesas USB XHCI Driver if
+	  you have such a device. These devices need additional firmware,
+	  make sure that is available.
+	  If unsure, say 'N'.
+
 config USB_XHCI_PLATFORM
 	tristate "Generic xHCI driver for a platform device"
 	select USB_XHCI_RCAR if ARCH_RENESAS
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index b191361..3c7a538 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -19,9 +19,7 @@
 	xhci-hcd-y += xhci-dbgcap.o xhci-dbgtty.o
 endif
 
-ifneq ($(CONFIG_USB_XHCI_MTK), )
-	xhci-hcd-y += xhci-mtk-sch.o
-endif
+xhci-mtk-hcd-y := xhci-mtk.o xhci-mtk-sch.o
 
 xhci-plat-hcd-y := xhci-plat.o
 ifneq ($(CONFIG_USB_XHCI_MVEBU), )
@@ -70,10 +68,11 @@
 obj-$(CONFIG_USB_UHCI_HCD)	+= uhci-hcd.o
 obj-$(CONFIG_USB_FHCI_HCD)	+= fhci.o
 obj-$(CONFIG_USB_XHCI_HCD)	+= xhci-hcd.o
+obj-$(CONFIG_USB_XHCI_PCI_RENESAS)	+= xhci-pci-renesas.o
 obj-$(CONFIG_USB_XHCI_PCI)	+= xhci-pci.o
 obj-$(CONFIG_USB_XHCI_PLATFORM) += xhci-plat-hcd.o
 obj-$(CONFIG_USB_XHCI_HISTB)	+= xhci-histb.o
-obj-$(CONFIG_USB_XHCI_MTK)	+= xhci-mtk.o
+obj-$(CONFIG_USB_XHCI_MTK)	+= xhci-mtk-hcd.o
 obj-$(CONFIG_USB_XHCI_TEGRA)	+= xhci-tegra.o
 obj-$(CONFIG_USB_SL811_HCD)	+= sl811-hcd.o
 obj-$(CONFIG_USB_SL811_CS)	+= sl811_cs.o
diff --git a/drivers/usb/host/xhci-mem.c b/drivers/usb/host/xhci-mem.c
index 160caef..6a8c1ff 100644
--- a/drivers/usb/host/xhci-mem.c
+++ b/drivers/usb/host/xhci-mem.c
@@ -523,7 +523,7 @@
 	return (struct xhci_ep_ctx *)
 		(ctx->bytes + (ep_index * CTX_SIZE(xhci->hcc_params)));
 }
-
+EXPORT_SYMBOL_GPL(xhci_get_ep_ctx);
 
 /***************** Streams structures manipulation *************************/
 
diff --git a/drivers/usb/host/xhci-mtk-sch.c b/drivers/usb/host/xhci-mtk-sch.c
index 8950d1f..59c5789 100644
--- a/drivers/usb/host/xhci-mtk-sch.c
+++ b/drivers/usb/host/xhci-mtk-sch.c
@@ -25,6 +25,13 @@
  */
 #define TT_MICROFRAMES_MAX 9
 
+/* schedule error type */
+#define ESCH_SS_Y6		1001
+#define ESCH_SS_OVERLAP		1002
+#define ESCH_CS_OVERFLOW	1003
+#define ESCH_BW_OVERFLOW	1004
+#define ESCH_FIXME		1005
+
 /* mtk scheduler bitmasks */
 #define EP_BPKTS(p)	((p) & 0x7f)
 #define EP_BCSCOUNT(p)	(((p) & 0x7) << 8)
@@ -32,13 +39,50 @@
 #define EP_BOFFSET(p)	((p) & 0x3fff)
 #define EP_BREPEAT(p)	(((p) & 0x7fff) << 16)
 
+static char *sch_error_string(int err_num)
+{
+	switch (err_num) {
+	case ESCH_SS_Y6:
+		return "Can't schedule Start-Split in Y6";
+	case ESCH_SS_OVERLAP:
+		return "Can't find a suitable Start-Split location";
+	case ESCH_CS_OVERFLOW:
+		return "The last Complete-Split is greater than 7";
+	case ESCH_BW_OVERFLOW:
+		return "Bandwidth exceeds the maximum limit";
+	case ESCH_FIXME:
+		return "FIXME, to be resolved";
+	default:
+		return "Unknown";
+	}
+}
+
 static int is_fs_or_ls(enum usb_device_speed speed)
 {
 	return speed == USB_SPEED_FULL || speed == USB_SPEED_LOW;
 }
 
+static u32 get_bw_boundary(enum usb_device_speed speed)
+{
+	u32 boundary;
+
+	switch (speed) {
+	case USB_SPEED_SUPER_PLUS:
+		boundary = SSP_BW_BOUNDARY;
+		break;
+	case USB_SPEED_SUPER:
+		boundary = SS_BW_BOUNDARY;
+		break;
+	default:
+		boundary = HS_BW_BOUNDARY;
+		break;
+	}
+
+	return boundary;
+}
+
 /*
-* get the index of bandwidth domains array which @ep belongs to.
+* get the bandwidth domain which @ep belongs to.
 *
 * the bandwidth domain array is saved to @sch_array of struct xhci_hcd_mtk,
 * each HS root port is treated as a single bandwidth domain,
@@ -49,9 +93,11 @@
 * so the bandwidth domain array is organized as follow for simplification:
 * SSport0-OUT, SSport0-IN, ..., SSportX-OUT, SSportX-IN, HSport0, ..., HSportY
 */
-static int get_bw_index(struct xhci_hcd *xhci, struct usb_device *udev,
-	struct usb_host_endpoint *ep)
+static struct mu3h_sch_bw_info *
+get_bw_info(struct xhci_hcd_mtk *mtk, struct usb_device *udev,
+	    struct usb_host_endpoint *ep)
 {
+	struct xhci_hcd *xhci = hcd_to_xhci(mtk->hcd);
 	struct xhci_virt_device *virt_dev;
 	int bw_index;
 
@@ -67,7 +113,7 @@
 		bw_index = virt_dev->real_port + xhci->usb3_rhub.num_ports - 1;
 	}
 
-	return bw_index;
+	return &mtk->sch_array[bw_index];
 }
 
 static u32 get_esit(struct xhci_ep_ctx *ep_ctx)
@@ -85,7 +131,6 @@
 {
 	struct usb_tt *utt = udev->tt;
 	struct mu3h_sch_tt *tt, **tt_index, **ptt;
-	unsigned int port;
 	bool allocated_index = false;
 
 	if (!utt)
@@ -107,10 +152,8 @@
 			utt->hcpriv = tt_index;
 			allocated_index = true;
 		}
-		port = udev->ttport - 1;
-		ptt = &tt_index[port];
+		ptt = &tt_index[udev->ttport - 1];
 	} else {
-		port = 0;
 		ptt = (struct mu3h_sch_tt **) &utt->hcpriv;
 	}
 
@@ -125,8 +168,6 @@
 			return ERR_PTR(-ENOMEM);
 		}
 		INIT_LIST_HEAD(&tt->ep_list);
-		tt->usb_tt = utt;
-		tt->tt_port = port;
 		*ptt = tt;
 	}
 
@@ -200,14 +241,15 @@
 
 	sch_ep->sch_tt = tt;
 	sch_ep->ep = ep;
+	sch_ep->speed = udev->speed;
 	INIT_LIST_HEAD(&sch_ep->endpoint);
 	INIT_LIST_HEAD(&sch_ep->tt_endpoint);
 
 	return sch_ep;
 }
 
-static void setup_sch_info(struct usb_device *udev,
-		struct xhci_ep_ctx *ep_ctx, struct mu3h_sch_ep_info *sch_ep)
+static void setup_sch_info(struct xhci_ep_ctx *ep_ctx,
+			   struct mu3h_sch_ep_info *sch_ep)
 {
 	u32 ep_type;
 	u32 maxpkt;
@@ -234,7 +276,7 @@
 	sch_ep->burst_mode = 0;
 	sch_ep->repeat = 0;
 
-	if (udev->speed == USB_SPEED_HIGH) {
+	if (sch_ep->speed == USB_SPEED_HIGH) {
 		sch_ep->cs_count = 0;
 
 		/*
@@ -252,7 +294,7 @@
 		sch_ep->pkts = max_burst + 1;
 		sch_ep->bw_cost_per_microframe = maxpkt * sch_ep->pkts;
 		bwb_table[0] = sch_ep->bw_cost_per_microframe;
-	} else if (udev->speed >= USB_SPEED_SUPER) {
+	} else if (sch_ep->speed >= USB_SPEED_SUPER) {
 		/* usb3_r1 spec section4.4.7 & 4.4.8 */
 		sch_ep->cs_count = 0;
 		sch_ep->burst_mode = 1;
@@ -297,7 +339,7 @@
 			/* last one <= bw_cost_per_microframe */
 			bwb_table[i] = remainder;
 		}
-	} else if (is_fs_or_ls(udev->speed)) {
+	} else if (is_fs_or_ls(sch_ep->speed)) {
 		sch_ep->pkts = 1; /* at most one packet for each microframe */
 
 		/*
@@ -375,7 +417,6 @@
 					sch_ep->bw_budget_table[j];
 		}
 	}
-	sch_ep->allocated = used;
 }
 
 static int check_fs_bus_bw(struct mu3h_sch_ep_info *sch_ep, int offset)
@@ -396,25 +437,22 @@
 		for (j = 0; j < sch_ep->cs_count; j++) {
 			tmp = tt->fs_bus_bw[base + j] + sch_ep->bw_cost_per_microframe;
 			if (tmp > FS_PAYLOAD_MAX)
-				return -ERANGE;
+				return -ESCH_BW_OVERFLOW;
 		}
 	}
 
 	return 0;
 }
 
-static int check_sch_tt(struct usb_device *udev,
-	struct mu3h_sch_ep_info *sch_ep, u32 offset)
+static int check_sch_tt(struct mu3h_sch_ep_info *sch_ep, u32 offset)
 {
 	struct mu3h_sch_tt *tt = sch_ep->sch_tt;
 	u32 extra_cs_count;
-	u32 fs_budget_start;
 	u32 start_ss, last_ss;
 	u32 start_cs, last_cs;
 	int i;
 
 	start_ss = offset % 8;
-	fs_budget_start = (start_ss + 1) % 8;
 
 	if (sch_ep->ep_type == ISOC_OUT_EP) {
 		last_ss = start_ss + sch_ep->cs_count - 1;
@@ -424,11 +462,11 @@
 		 * must never schedule Start-Split in Y6
 		 */
 		if (!(start_ss == 7 || last_ss < 6))
-			return -ERANGE;
+			return -ESCH_SS_Y6;
 
 		for (i = 0; i < sch_ep->cs_count; i++)
 			if (test_bit(offset + i, tt->ss_bit_map))
-				return -ERANGE;
+				return -ESCH_SS_OVERLAP;
 
 	} else {
 		u32 cs_count = DIV_ROUND_UP(sch_ep->maxpkt, FS_PAYLOAD_MAX);
@@ -438,28 +476,26 @@
 		 * must never schedule Start-Split in Y6
 		 */
 		if (start_ss == 6)
-			return -ERANGE;
+			return -ESCH_SS_Y6;
 
 		/* one uframe for ss + one uframe for idle */
 		start_cs = (start_ss + 2) % 8;
 		last_cs = start_cs + cs_count - 1;
 
 		if (last_cs > 7)
-			return -ERANGE;
+			return -ESCH_CS_OVERFLOW;
 
 		if (sch_ep->ep_type == ISOC_IN_EP)
 			extra_cs_count = (last_cs == 7) ? 1 : 2;
 		else /*  ep_type : INTR IN / INTR OUT */
-			extra_cs_count = (fs_budget_start == 6) ? 1 : 2;
+			extra_cs_count = 1;
 
 		cs_count += extra_cs_count;
 		if (cs_count > 7)
 			cs_count = 7; /* HW limit */
 
-		for (i = 0; i < cs_count + 2; i++) {
-			if (test_bit(offset + i, tt->ss_bit_map))
-				return -ERANGE;
-		}
+		if (test_bit(offset, tt->ss_bit_map))
+			return -ESCH_SS_OVERLAP;
 
 		sch_ep->cs_count = cs_count;
 		/* one for ss, the other for idle */
@@ -476,8 +512,7 @@
 	return check_fs_bus_bw(sch_ep, offset);
 }
 
-static void update_sch_tt(struct usb_device *udev,
-	struct mu3h_sch_ep_info *sch_ep, bool used)
+static void update_sch_tt(struct mu3h_sch_ep_info *sch_ep, bool used)
 {
 	struct mu3h_sch_tt *tt = sch_ep->sch_tt;
 	u32 base, num_esit;
@@ -513,21 +548,46 @@
 		list_del(&sch_ep->tt_endpoint);
 }
 
-static int check_sch_bw(struct usb_device *udev,
-	struct mu3h_sch_bw_info *sch_bw, struct mu3h_sch_ep_info *sch_ep)
+static int load_ep_bw(struct mu3h_sch_bw_info *sch_bw,
+		      struct mu3h_sch_ep_info *sch_ep, bool loaded)
+{
+	if (sch_ep->sch_tt)
+		update_sch_tt(sch_ep, loaded);
+
+	/* update bus bandwidth info */
+	update_bus_bw(sch_bw, sch_ep, loaded);
+	sch_ep->allocated = loaded;
+
+	return 0;
+}
+
+static u32 get_esit_boundary(struct mu3h_sch_ep_info *sch_ep)
+{
+	u32 boundary = sch_ep->esit;
+
+	if (sch_ep->sch_tt) { /* LS/FS with TT */
+		/* tune for CS */
+		if (sch_ep->ep_type != ISOC_OUT_EP)
+			boundary++;
+		else if (boundary > 1) /* normally esit >= 8 for FS/LS */
+			boundary--;
+	}
+
+	return boundary;
+}
+
+static int check_sch_bw(struct mu3h_sch_bw_info *sch_bw,
+			struct mu3h_sch_ep_info *sch_ep)
 {
 	u32 offset;
-	u32 esit;
 	u32 min_bw;
 	u32 min_index;
 	u32 worst_bw;
 	u32 bw_boundary;
+	u32 esit_boundary;
 	u32 min_num_budget;
 	u32 min_cs_count;
-	bool tt_offset_ok = false;
-	int ret;
-
-	esit = sch_ep->esit;
+	int ret = 0;
 
 	/*
 	 * Search through all possible schedule microframes.
@@ -537,16 +597,15 @@
 	min_index = 0;
 	min_cs_count = sch_ep->cs_count;
 	min_num_budget = sch_ep->num_budget_microframes;
-	for (offset = 0; offset < esit; offset++) {
-		if (is_fs_or_ls(udev->speed)) {
-			ret = check_sch_tt(udev, sch_ep, offset);
+	esit_boundary = get_esit_boundary(sch_ep);
+	for (offset = 0; offset < sch_ep->esit; offset++) {
+		if (sch_ep->sch_tt) {
+			ret = check_sch_tt(sch_ep, offset);
 			if (ret)
 				continue;
-			else
-				tt_offset_ok = true;
 		}
 
-		if ((offset + sch_ep->num_budget_microframes) > sch_ep->esit)
+		if ((offset + sch_ep->num_budget_microframes) > esit_boundary)
 			break;
 
 		worst_bw = get_max_bw(sch_bw, sch_ep, offset);
@@ -560,44 +619,24 @@
 			break;
 	}
 
-	if (udev->speed == USB_SPEED_SUPER_PLUS)
-		bw_boundary = SSP_BW_BOUNDARY;
-	else if (udev->speed == USB_SPEED_SUPER)
-		bw_boundary = SS_BW_BOUNDARY;
-	else
-		bw_boundary = HS_BW_BOUNDARY;
-
+	bw_boundary = get_bw_boundary(sch_ep->speed);
 	/* check bandwidth */
 	if (min_bw > bw_boundary)
-		return -ERANGE;
+		return ret ? ret : -ESCH_BW_OVERFLOW;
 
 	sch_ep->offset = min_index;
 	sch_ep->cs_count = min_cs_count;
 	sch_ep->num_budget_microframes = min_num_budget;
 
-	if (is_fs_or_ls(udev->speed)) {
-		/* all offset for tt is not ok*/
-		if (!tt_offset_ok)
-			return -ERANGE;
-
-		update_sch_tt(udev, sch_ep, 1);
-	}
-
-	/* update bus bandwidth info */
-	update_bus_bw(sch_bw, sch_ep, 1);
-
-	return 0;
+	return load_ep_bw(sch_bw, sch_ep, true);
 }
 
 static void destroy_sch_ep(struct usb_device *udev,
 	struct mu3h_sch_bw_info *sch_bw, struct mu3h_sch_ep_info *sch_ep)
 {
 	/* only release ep bw check passed by check_sch_bw() */
-	if (sch_ep->allocated) {
-		update_bus_bw(sch_bw, sch_ep, 0);
-		if (sch_ep->sch_tt)
-			update_sch_tt(udev, sch_ep, 0);
-	}
+	if (sch_ep->allocated)
+		load_ep_bw(sch_bw, sch_ep, false);
 
 	if (sch_ep->sch_tt)
 		drop_tt(udev);
@@ -652,29 +691,24 @@
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_sch_init);
 
 void xhci_mtk_sch_exit(struct xhci_hcd_mtk *mtk)
 {
 	kfree(mtk->sch_array);
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_sch_exit);
 
-int xhci_mtk_add_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep)
+static int add_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
+			struct usb_host_endpoint *ep)
 {
 	struct xhci_hcd_mtk *mtk = hcd_to_mtk(hcd);
-	struct xhci_hcd *xhci;
+	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 	struct xhci_ep_ctx *ep_ctx;
-	struct xhci_slot_ctx *slot_ctx;
 	struct xhci_virt_device *virt_dev;
 	struct mu3h_sch_ep_info *sch_ep;
 	unsigned int ep_index;
 
-	xhci = hcd_to_xhci(hcd);
 	virt_dev = xhci->devs[udev->slot_id];
 	ep_index = xhci_get_endpoint_index(&ep->desc);
-	slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->in_ctx);
 	ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
 
 	xhci_dbg(xhci, "%s() type:%d, speed:%d, mpkt:%d, dir:%d, ep:%p\n",
@@ -682,7 +716,7 @@
 		usb_endpoint_maxp(&ep->desc),
 		usb_endpoint_dir_in(&ep->desc), ep);
 
-	if (!need_bw_sch(ep, udev->speed, slot_ctx->tt_info & TT_SLOT)) {
+	if (!need_bw_sch(ep, udev->speed, !!virt_dev->tt_info)) {
 		/*
 		 * set @bpkts to 1 if it is LS or FS periodic endpoint, and its
 		 * device does not connected through an external HS hub
@@ -698,41 +732,33 @@
 	if (IS_ERR_OR_NULL(sch_ep))
 		return -ENOMEM;
 
-	setup_sch_info(udev, ep_ctx, sch_ep);
+	setup_sch_info(ep_ctx, sch_ep);
 
 	list_add_tail(&sch_ep->endpoint, &mtk->bw_ep_chk_list);
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_add_ep_quirk);
 
-void xhci_mtk_drop_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep)
+static void drop_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
+			  struct usb_host_endpoint *ep)
 {
 	struct xhci_hcd_mtk *mtk = hcd_to_mtk(hcd);
-	struct xhci_hcd *xhci;
-	struct xhci_slot_ctx *slot_ctx;
+	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 	struct xhci_virt_device *virt_dev;
-	struct mu3h_sch_bw_info *sch_array;
 	struct mu3h_sch_bw_info *sch_bw;
 	struct mu3h_sch_ep_info *sch_ep, *tmp;
-	int bw_index;
 
-	xhci = hcd_to_xhci(hcd);
 	virt_dev = xhci->devs[udev->slot_id];
-	slot_ctx = xhci_get_slot_ctx(xhci, virt_dev->in_ctx);
-	sch_array = mtk->sch_array;
 
 	xhci_dbg(xhci, "%s() type:%d, speed:%d, mpks:%d, dir:%d, ep:%p\n",
 		__func__, usb_endpoint_type(&ep->desc), udev->speed,
 		usb_endpoint_maxp(&ep->desc),
 		usb_endpoint_dir_in(&ep->desc), ep);
 
-	if (!need_bw_sch(ep, udev->speed, slot_ctx->tt_info & TT_SLOT))
+	if (!need_bw_sch(ep, udev->speed, !!virt_dev->tt_info))
 		return;
 
-	bw_index = get_bw_index(xhci, udev, ep);
-	sch_bw = &sch_array[bw_index];
+	sch_bw = get_bw_info(mtk, udev, ep);
 
 	list_for_each_entry_safe(sch_ep, tmp, &sch_bw->bw_ep_list, endpoint) {
 		if (sch_ep->ep == ep) {
@@ -741,7 +767,6 @@
 		}
 	}
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_drop_ep_quirk);
 
 int xhci_mtk_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
 {
@@ -750,17 +775,17 @@
 	struct xhci_virt_device *virt_dev = xhci->devs[udev->slot_id];
 	struct mu3h_sch_bw_info *sch_bw;
 	struct mu3h_sch_ep_info *sch_ep, *tmp;
-	int bw_index, ret;
+	int ret;
 
 	xhci_dbg(xhci, "%s() udev %s\n", __func__, dev_name(&udev->dev));
 
 	list_for_each_entry(sch_ep, &mtk->bw_ep_chk_list, endpoint) {
-		bw_index = get_bw_index(xhci, udev, sch_ep->ep);
-		sch_bw = &mtk->sch_array[bw_index];
+		sch_bw = get_bw_info(mtk, udev, sch_ep->ep);
 
-		ret = check_sch_bw(udev, sch_bw, sch_ep);
+		ret = check_sch_bw(sch_bw, sch_ep);
 		if (ret) {
-			xhci_err(xhci, "Not enough bandwidth!\n");
+			xhci_err(xhci, "Not enough bandwidth! (%s)\n",
+				 sch_error_string(-ret));
 			return -ENOSPC;
 		}
 	}
@@ -770,9 +795,7 @@
 		struct usb_host_endpoint *ep = sch_ep->ep;
 		unsigned int ep_index = xhci_get_endpoint_index(&ep->desc);
 
-		bw_index = get_bw_index(xhci, udev, ep);
-		sch_bw = &mtk->sch_array[bw_index];
-
+		sch_bw = get_bw_info(mtk, udev, ep);
 		list_move_tail(&sch_ep->endpoint, &sch_bw->bw_ep_list);
 
 		ep_ctx = xhci_get_ep_ctx(xhci, virt_dev->in_ctx, ep_index);
@@ -789,7 +812,6 @@
 
 	return xhci_check_bandwidth(hcd, udev);
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_check_bandwidth);
 
 void xhci_mtk_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
 {
@@ -797,16 +819,43 @@
 	struct xhci_hcd *xhci = hcd_to_xhci(hcd);
 	struct mu3h_sch_bw_info *sch_bw;
 	struct mu3h_sch_ep_info *sch_ep, *tmp;
-	int bw_index;
 
 	xhci_dbg(xhci, "%s() udev %s\n", __func__, dev_name(&udev->dev));
 
 	list_for_each_entry_safe(sch_ep, tmp, &mtk->bw_ep_chk_list, endpoint) {
-		bw_index = get_bw_index(xhci, udev, sch_ep->ep);
-		sch_bw = &mtk->sch_array[bw_index];
+		sch_bw = get_bw_info(mtk, udev, sch_ep->ep);
 		destroy_sch_ep(udev, sch_bw, sch_ep);
 	}
 
 	xhci_reset_bandwidth(hcd, udev);
 }
-EXPORT_SYMBOL_GPL(xhci_mtk_reset_bandwidth);
+
+int xhci_mtk_add_ep(struct usb_hcd *hcd, struct usb_device *udev,
+		    struct usb_host_endpoint *ep)
+{
+	int ret;
+
+	ret = xhci_add_endpoint(hcd, udev, ep);
+	if (ret)
+		return ret;
+
+	if (ep->hcpriv)
+		ret = add_ep_quirk(hcd, udev, ep);
+
+	return ret;
+}
+
+int xhci_mtk_drop_ep(struct usb_hcd *hcd, struct usb_device *udev,
+		     struct usb_host_endpoint *ep)
+{
+	int ret;
+
+	ret = xhci_drop_endpoint(hcd, udev, ep);
+	if (ret)
+		return ret;
+
+	if (ep->hcpriv)
+		drop_ep_quirk(hcd, udev, ep);
+
+	return 0;
+}
diff --git a/drivers/usb/host/xhci-mtk.c b/drivers/usb/host/xhci-mtk.c
index 5c0eb35..4251d26 100644
--- a/drivers/usb/host/xhci-mtk.c
+++ b/drivers/usb/host/xhci-mtk.c
@@ -77,7 +77,7 @@
 {
 	struct mu3c_ippc_regs __iomem *ippc = mtk->ippc_regs;
 	u32 value, check_val;
-	int u3_ports_disabed = 0;
+	int u3_ports_disabled = 0;
 	int ret;
 	int i;
 
@@ -92,7 +92,7 @@
 	/* power on and enable u3 ports except skipped ones */
 	for (i = 0; i < mtk->num_u3_ports; i++) {
 		if ((0x1 << i) & mtk->u3p_dis_msk) {
-			u3_ports_disabed++;
+			u3_ports_disabled++;
 			continue;
 		}
 
@@ -117,7 +117,7 @@
 	check_val = STS1_SYSPLL_STABLE | STS1_REF_RST |
 			STS1_SYS125_RST | STS1_XHCI_RST;
 
-	if (mtk->num_u3_ports > u3_ports_disabed)
+	if (mtk->num_u3_ports > u3_ports_disabled)
 		check_val |= STS1_U3_MAC_RST;
 
 	ret = readl_poll_timeout(&ippc->ip_pw_sts1, value,
@@ -344,15 +344,6 @@
 		usb_wakeup_ip_sleep_set(mtk, enable);
 }
 
-static int xhci_mtk_setup(struct usb_hcd *hcd);
-static const struct xhci_driver_overrides xhci_mtk_overrides __initconst = {
-	.reset = xhci_mtk_setup,
-	.check_bandwidth = xhci_mtk_check_bandwidth,
-	.reset_bandwidth = xhci_mtk_reset_bandwidth,
-};
-
-static struct hc_driver __read_mostly xhci_mtk_hc_driver;
-
 static int xhci_mtk_ldos_enable(struct xhci_hcd_mtk *mtk)
 {
 	int ret;
@@ -433,6 +424,16 @@
 	return ret;
 }
 
+static const struct xhci_driver_overrides xhci_mtk_overrides __initconst = {
+	.reset = xhci_mtk_setup,
+	.add_endpoint = xhci_mtk_add_ep,
+	.drop_endpoint = xhci_mtk_drop_ep,
+	.check_bandwidth = xhci_mtk_check_bandwidth,
+	.reset_bandwidth = xhci_mtk_reset_bandwidth,
+};
+
+static struct hc_driver __read_mostly xhci_mtk_hc_driver;
+
 static int xhci_mtk_probe(struct platform_device *pdev)
 {
 	struct device *dev = &pdev->dev;
diff --git a/drivers/usb/host/xhci-mtk.h b/drivers/usb/host/xhci-mtk.h
index 985e7a1..47876a9 100644
--- a/drivers/usb/host/xhci-mtk.h
+++ b/drivers/usb/host/xhci-mtk.h
@@ -23,15 +23,11 @@
  * @ss_bit_map: used to avoid start split microframes overlay
  * @fs_bus_bw: array to keep track of bandwidth already used for FS
  * @ep_list: Endpoints using this TT
- * @usb_tt: usb TT related
- * @tt_port: TT port number
  */
 struct mu3h_sch_tt {
 	DECLARE_BITMAP(ss_bit_map, XHCI_MTK_MAX_ESIT);
 	u32 fs_bus_bw[XHCI_MTK_MAX_ESIT];
 	struct list_head ep_list;
-	struct usb_tt *usb_tt;
-	int tt_port;
 };
 
 /**
@@ -88,7 +84,8 @@
 	struct mu3h_sch_tt *sch_tt;
 	u32 ep_type;
 	u32 maxpkt;
-	void *ep;
+	struct usb_host_endpoint *ep;
+	enum usb_device_speed speed;
 	bool allocated;
 	/*
 	 * mtk xHCI scheduling information put into reserved DWs
@@ -165,38 +162,13 @@
 	return dev_get_drvdata(hcd->self.controller);
 }
 
-#if IS_ENABLED(CONFIG_USB_XHCI_MTK)
 int xhci_mtk_sch_init(struct xhci_hcd_mtk *mtk);
 void xhci_mtk_sch_exit(struct xhci_hcd_mtk *mtk);
-int xhci_mtk_add_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep);
-void xhci_mtk_drop_ep_quirk(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep);
+int xhci_mtk_add_ep(struct usb_hcd *hcd, struct usb_device *udev,
+		    struct usb_host_endpoint *ep);
+int xhci_mtk_drop_ep(struct usb_hcd *hcd, struct usb_device *udev,
+		     struct usb_host_endpoint *ep);
 int xhci_mtk_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev);
 void xhci_mtk_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev);
 
-#else
-static inline int xhci_mtk_add_ep_quirk(struct usb_hcd *hcd,
-	struct usb_device *udev, struct usb_host_endpoint *ep)
-{
-	return 0;
-}
-
-static inline void xhci_mtk_drop_ep_quirk(struct usb_hcd *hcd,
-	struct usb_device *udev, struct usb_host_endpoint *ep)
-{
-}
-
-static inline int xhci_mtk_check_bandwidth(struct usb_hcd *hcd,
-		struct usb_device *udev)
-{
-	return 0;
-}
-
-static inline void xhci_mtk_reset_bandwidth(struct usb_hcd *hcd,
-		struct usb_device *udev)
-{
-}
-#endif
-
 #endif		/* _XHCI_MTK_H_ */
diff --git a/drivers/usb/host/xhci-pci-renesas.c b/drivers/usb/host/xhci-pci-renesas.c
new file mode 100644
index 0000000..02fcb01
--- /dev/null
+++ b/drivers/usb/host/xhci-pci-renesas.c
@@ -0,0 +1,985 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2019-2020 Linaro Limited */
+
+#include <linux/acpi.h>
+#include <linux/debugfs.h>
+#include <linux/firmware.h>
+#include <linux/module.h>
+#include <linux/pci.h>
+#include <linux/slab.h>
+#include <asm/unaligned.h>
+
+#include "xhci.h"
+#include "xhci-trace.h"
+#include "xhci-pci.h"
+
+#define RENESAS_FW_VERSION				0x6C
+#define RENESAS_ROM_CONFIG				0xF0
+#define RENESAS_FW_STATUS				0xF4
+#define RENESAS_FW_STATUS_MSB				0xF5
+#define RENESAS_ROM_STATUS				0xF6
+#define RENESAS_ROM_STATUS_MSB				0xF7
+#define RENESAS_DATA0					0xF8
+#define RENESAS_DATA1					0xFC
+
+#define RENESAS_FW_VERSION_FIELD			GENMASK(23, 7)
+#define RENESAS_FW_VERSION_OFFSET			8
+
+#define RENESAS_FW_STATUS_DOWNLOAD_ENABLE		BIT(0)
+#define RENESAS_FW_STATUS_LOCK				BIT(1)
+#define RENESAS_FW_STATUS_RESULT			GENMASK(6, 4)
+  #define RENESAS_FW_STATUS_INVALID			0
+  #define RENESAS_FW_STATUS_SUCCESS			BIT(4)
+  #define RENESAS_FW_STATUS_ERROR			BIT(5)
+#define RENESAS_FW_STATUS_SET_DATA0			BIT(8)
+#define RENESAS_FW_STATUS_SET_DATA1			BIT(9)
+
+#define RENESAS_ROM_STATUS_ACCESS			BIT(0)
+#define RENESAS_ROM_STATUS_ERASE			BIT(1)
+#define RENESAS_ROM_STATUS_RELOAD			BIT(2)
+#define RENESAS_ROM_STATUS_RESULT			GENMASK(6, 4)
+  #define RENESAS_ROM_STATUS_INVALID			0
+  #define RENESAS_ROM_STATUS_SUCCESS			BIT(4)
+  #define RENESAS_ROM_STATUS_ERROR			BIT(5)
+#define RENESAS_ROM_STATUS_SET_DATA0			BIT(8)
+#define RENESAS_ROM_STATUS_SET_DATA1			BIT(9)
+#define RENESAS_ROM_STATUS_ROM_EXISTS			BIT(15)
+
+#define RENESAS_ROM_ERASE_MAGIC				0x5A65726F
+#define RENESAS_ROM_WRITE_MAGIC				0x53524F4D
+
+#define RENESAS_RETRY	10000
+#define RENESAS_DELAY	10
+
+static struct hc_driver __read_mostly xhci_pci_hc_driver;
+
+static const struct xhci_driver_overrides xhci_pci_overrides __initconst = {
+	.reset = xhci_pci_setup,
+};
+
+static const struct renesas_fw_entry {
+	const char *firmware_name;
+	u16 device;
+	u8 revision;
+	u16 expected_version;
+} renesas_fw_table[] = {
+	/*
+	 * Only the uPD720201K8-711-BAC-A or uPD720202K8-711-BAA-A
+	 * are listed in R19UH0078EJ0500 Rev.5.00 as devices which
+	 * need the software loader.
+	 *
+	 * PP2U/ReleaseNote_USB3-201-202-FW.txt:
+	 *
+	 * Note: This firmware is for the following devices.
+	 *  - uPD720201 ES 2.0 sample whose revision ID is 2.
+	 *  - uPD720201 ES 2.1 sample & CS sample & Mass product, ID is 3.
+	 *  - uPD720202 ES 2.0 sample & CS sample & Mass product, ID is 2.
+	 *
+	 *  Entry expected_version should be kept in decreasing order for a
+	 *  chip, so that driver will pick latest version and if that fails
+	 *  then next one will be picked
+	 */
+	{ "K2013080.mem", 0x0014, 0x02, 0x2013 },
+	{ "K2026090.mem", 0x0014, 0x03, 0x2026 },
+	{ "K2013080.mem", 0x0014, 0x03, 0x2013 },
+	{ "K2026090.mem", 0x0015, 0x02, 0x2026 },
+	{ "K2013080.mem", 0x0015, 0x02, 0x2013 },
+};
+
+MODULE_FIRMWARE("K2013080.mem");
+MODULE_FIRMWARE("K2026090.mem");
+
+static const struct renesas_fw_entry *renesas_needs_fw_dl(struct pci_dev *dev)
+{
+	const struct renesas_fw_entry *entry;
+	size_t i;
+
+	/* This loader will only work with a RENESAS device. */
+	if (!(dev->vendor == PCI_VENDOR_ID_RENESAS))
+		return NULL;
+
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		entry = &renesas_fw_table[i];
+		if (entry->device == dev->device &&
+		    entry->revision == dev->revision)
+			return entry;
+	}
+
+	return NULL;
+}
+
+static const struct
+renesas_fw_entry *renesas_get_next_entry(struct pci_dev *dev,
+					 const struct renesas_fw_entry *entry)
+{
+	const struct renesas_fw_entry *next_entry;
+	size_t i;
+
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		next_entry = &renesas_fw_table[i];
+		if (next_entry->device == dev->device &&
+		    next_entry->revision == dev->revision &&
+		    next_entry->expected_version < entry->expected_version)
+			return next_entry;
+	}
+
+	return NULL;
+}
+
+static int renesas_fw_download_image(struct pci_dev *dev,
+				     const u32 *fw,
+				     size_t step)
+{
+	size_t i;
+	int err;
+	u8 fw_status;
+	bool data0_or_data1;
+
+	/*
+	 * The hardware does alternate between two 32-bit pages.
+	 * (This is because each row of the firmware is 8 bytes).
+	 *
+	 * for even steps we use DATA0, for odd steps DATA1.
+	 */
+	data0_or_data1 = (step & 1) == 1;
+
+	/* step+1. Read "Set DATAX" and confirm it is cleared. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(dev, RENESAS_FW_STATUS_MSB,
+					   &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (!(fw_status & BIT(data0_or_data1)))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY)
+		return -ETIMEDOUT;
+
+	/*
+	 * step+2. Write FW data to "DATAX".
+	 * "LSB is left" => force little endian
+	 */
+	err = pci_write_config_dword(dev, data0_or_data1 ?
+				     RENESAS_DATA1 : RENESAS_DATA0,
+				     (__force u32)cpu_to_le32(fw[step]));
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	udelay(100);
+
+	/* step+3. Set "Set DATAX". */
+	err = pci_write_config_byte(dev, RENESAS_FW_STATUS_MSB,
+				    BIT(data0_or_data1));
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	return 0;
+}
+
+static int renesas_fw_verify(struct pci_dev *dev,
+			     const void *fw_data,
+			     size_t length)
+{
+	const struct renesas_fw_entry *entry = renesas_needs_fw_dl(dev);
+	u16 fw_version_pointer;
+	u16 fw_version;
+
+	if (!entry)
+		return -EINVAL;
+
+	/*
+	 * The Firmware's Data Format is describe in
+	 * "6.3 Data Format" R19UH0078EJ0500 Rev.5.00 page 124
+	 */
+
+	/*
+	 * The bootrom chips of the big brother have sizes up to 64k, let's
+	 * assume that's the biggest the firmware can get.
+	 */
+	if (length < 0x1000 || length >= 0x10000) {
+		dev_err(&dev->dev, "firmware is size %zd is not (4k - 64k).",
+			length);
+		return -EINVAL;
+	}
+
+	/* The First 2 bytes are fixed value (55aa). "LSB on Left" */
+	if (get_unaligned_le16(fw_data) != 0x55aa) {
+		dev_err(&dev->dev, "no valid firmware header found.");
+		return -EINVAL;
+	}
+
+	/* verify the firmware version position and print it. */
+	fw_version_pointer = get_unaligned_le16(fw_data + 4);
+	if (fw_version_pointer + 2 >= length) {
+		dev_err(&dev->dev,
+			"firmware version pointer is outside of the firmware image.");
+		return -EINVAL;
+	}
+
+	fw_version = get_unaligned_le16(fw_data + fw_version_pointer);
+	dev_dbg(&dev->dev, "got firmware version: %02x.", fw_version);
+
+	if (fw_version != entry->expected_version) {
+		dev_err(&dev->dev,
+			"firmware version mismatch, expected version: %02x.",
+			entry->expected_version);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static void debugfs_init(struct pci_dev *pdev);
+
+static int renesas_check_rom_state(struct pci_dev *pdev)
+{
+	const struct renesas_fw_entry *entry;
+	u16 rom_state;
+	u32 version;
+	bool valid_version = false;
+	int err, i;
+
+	/* check FW version */
+	err = pci_read_config_dword(pdev, RENESAS_FW_VERSION, &version);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	version &= RENESAS_FW_VERSION_FIELD;
+	version = version >> RENESAS_FW_VERSION_OFFSET;
+	dev_dbg(&pdev->dev, "Found FW version loaded is %x\n", version);
+
+	/* treat version in renesas_fw_table as correct ones */
+	for (i = 0; i < ARRAY_SIZE(renesas_fw_table); i++) {
+		entry = &renesas_fw_table[i];
+		if (version == entry->expected_version) {
+			dev_dbg(&pdev->dev, "Detected valid ROM version..\n");
+			valid_version = true;
+			debugfs_init(pdev);
+		}
+	}
+	if (valid_version == false)
+		dev_dbg(&pdev->dev, "Didn't find valid ROM version\n");
+
+	/*
+	 * Test if ROM is present and loaded, if so we can skip everything
+	 */
+	err = pci_read_config_word(pdev, RENESAS_ROM_STATUS, &rom_state);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	if (rom_state & BIT(15)) {
+		/* ROM exists */
+		dev_dbg(&pdev->dev, "ROM exists\n");
+
+		/* Check the "Result Code" Bits (6:4) and act accordingly */
+		switch (rom_state & RENESAS_ROM_STATUS_RESULT) {
+		case RENESAS_ROM_STATUS_SUCCESS:
+			dev_dbg(&pdev->dev, "Success ROM load...");
+			/* we have valid version and status so success */
+			if (valid_version)
+				return 0;
+			break;
+
+		case RENESAS_ROM_STATUS_INVALID: /* No result yet */
+			dev_dbg(&pdev->dev, "No result as it is ROM...");
+			/* we have valid version and status so success */
+			if (valid_version)
+				return 0;
+			break;
+
+		case RENESAS_ROM_STATUS_ERROR: /* Error State */
+		default: /* All other states are marked as "Reserved states" */
+			dev_err(&pdev->dev, "Invalid ROM..");
+			break;
+		}
+	}
+
+	return -EIO;
+}
+
+static int renesas_fw_check_running(struct pci_dev *pdev)
+{
+	int err;
+	u8 fw_state;
+
+	/* Check if device has ROM and loaded, if so skip everything */
+	err = renesas_check_rom_state(pdev);
+	if (!err)
+		return err;
+
+	/*
+	 * Test if the device is actually needing the firmware. As most
+	 * BIOSes will initialize the device for us. If the device is
+	 * initialized.
+	 */
+	err = pci_read_config_byte(pdev, RENESAS_FW_STATUS, &fw_state);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/*
+	 * Check if "FW Download Lock" is locked. If it is and the FW is
+	 * ready we can simply continue. If the FW is not ready, we have
+	 * to give up.
+	 */
+	if (fw_state & RENESAS_FW_STATUS_LOCK) {
+		dev_dbg(&pdev->dev, "FW Download Lock is engaged.");
+
+		if (fw_state & RENESAS_FW_STATUS_SUCCESS)
+			return 0;
+
+		dev_err(&pdev->dev,
+			"FW Download Lock is set and FW is not ready. Giving Up.");
+		return -EIO;
+	}
+
+	/*
+	 * Check if "FW Download Enable" is set. If someone (us?) tampered
+	 * with it and it can't be resetted, we have to give up too... and
+	 * ask for a forgiveness and a reboot.
+	 */
+	if (fw_state & RENESAS_FW_STATUS_DOWNLOAD_ENABLE) {
+		dev_err(&pdev->dev,
+			"FW Download Enable is stale. Giving Up (poweroff/reboot needed).");
+		return -EIO;
+	}
+
+	/* Otherwise, Check the "Result Code" Bits (6:4) and act accordingly */
+	switch (fw_state & RENESAS_FW_STATUS_RESULT) {
+	case 0: /* No result yet */
+		dev_dbg(&pdev->dev, "FW is not ready/loaded yet.");
+
+		/* tell the caller, that this device needs the firmware. */
+		return 1;
+
+	case RENESAS_FW_STATUS_SUCCESS: /* Success, device should be working. */
+		dev_dbg(&pdev->dev, "FW is ready.");
+		return 0;
+
+	case RENESAS_FW_STATUS_ERROR: /* Error State */
+		dev_err(&pdev->dev,
+			"hardware is in an error state. Giving up (poweroff/reboot needed).");
+		return -ENODEV;
+
+	default: /* All other states are marked as "Reserved states" */
+		dev_err(&pdev->dev,
+			"hardware is in an invalid state %lx. Giving up (poweroff/reboot needed).",
+			(fw_state & RENESAS_FW_STATUS_RESULT) >> 4);
+		return -EINVAL;
+	}
+}
+
+static int renesas_fw_download(struct pci_dev *pdev,
+			       const struct firmware *fw)
+{
+	const u32 *fw_data = (const u32 *)fw->data;
+	size_t i;
+	int err;
+	u8 fw_status;
+
+	/*
+	 * For more information and the big picture: please look at the
+	 * "Firmware Download Sequence" in "7.1 FW Download Interface"
+	 * of R19UH0078EJ0500 Rev.5.00 page 131
+	 */
+
+	/*
+	 * 0. Set "FW Download Enable" bit in the
+	 * "FW Download Control & Status Register" at 0xF4
+	 */
+	err = pci_write_config_byte(pdev, RENESAS_FW_STATUS,
+				    RENESAS_FW_STATUS_DOWNLOAD_ENABLE);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/* 1 - 10 follow one step after the other. */
+	for (i = 0; i < fw->size / 4; i++) {
+		err = renesas_fw_download_image(pdev, fw_data, i);
+		if (err) {
+			dev_err(&pdev->dev,
+				"Firmware Download Step %zd failed at position %zd bytes with (%d).",
+				i, i * 4, err);
+			return err;
+		}
+	}
+
+	/*
+	 * This sequence continues until the last data is written to
+	 * "DATA0" or "DATA1". Naturally, we wait until "SET DATA0/1"
+	 * is cleared by the hardware beforehand.
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_FW_STATUS_MSB,
+					   &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (!(fw_status & (BIT(0) | BIT(1))))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY)
+		dev_warn(&pdev->dev, "Final Firmware Download step timed out.");
+
+	/*
+	 * 11. After finishing writing the last data of FW, the
+	 * System Software must clear "FW Download Enable"
+	 */
+	err = pci_write_config_byte(pdev, RENESAS_FW_STATUS, 0);
+	if (err)
+		return pcibios_err_to_errno(err);
+
+	/* 12. Read "Result Code" and confirm it is good. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_FW_STATUS, &fw_status);
+		if (err)
+			return pcibios_err_to_errno(err);
+		if (fw_status & RENESAS_FW_STATUS_SUCCESS)
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		/* Timed out / Error - let's see if we can fix this */
+		err = renesas_fw_check_running(pdev);
+		switch (err) {
+		case 0: /*
+			 * we shouldn't end up here.
+			 * maybe it took a little bit longer.
+			 * But all should be well?
+			 */
+			break;
+
+		case 1: /* (No result yet! */
+			return -ETIMEDOUT;
+
+		default:
+			return err;
+		}
+	}
+	/*
+	 * Optional last step: Engage Firmware Lock
+	 *
+	 * err = pci_write_config_byte(pdev, 0xF4, BIT(2));
+	 * if (err)
+	 *	return pcibios_err_to_errno(err);
+	 */
+
+	return 0;
+}
+
+struct renesas_fw_ctx {
+	struct pci_dev *pdev;
+	const struct pci_device_id *id;
+	bool resume;
+	const struct renesas_fw_entry *entry;
+};
+
+static bool renesas_check_rom(struct pci_dev *pdev)
+{
+	u16 rom_status;
+	int retval;
+
+	/* 1. Check if external ROM exists */
+	retval = pci_read_config_word(pdev, RENESAS_ROM_STATUS, &rom_status);
+	if (retval)
+		return false;
+
+	rom_status &= RENESAS_ROM_STATUS_ROM_EXISTS;
+	if (rom_status) {
+		dev_dbg(&pdev->dev, "External ROM exists\n");
+		return true; /* External ROM exists */
+	}
+
+	return false;
+}
+
+static void renesas_rom_erase(struct pci_dev *pdev)
+{
+	int retval, i;
+	u8 status;
+
+	dev_dbg(&pdev->dev, "Performing ROM Erase...\n");
+	retval = pci_write_config_dword(pdev, RENESAS_DATA0,
+					RENESAS_ROM_ERASE_MAGIC);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM erase, magic word write failed: %d\n",
+			pcibios_err_to_errno(retval));
+		return;
+	}
+
+	retval = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM status read failed: %d\n",
+			pcibios_err_to_errno(retval));
+		return;
+	}
+	status |= RENESAS_ROM_STATUS_ERASE;
+	retval = pci_write_config_byte(pdev, RENESAS_ROM_STATUS, status);
+	if (retval) {
+		dev_err(&pdev->dev, "ROM erase set word write failed\n");
+		return;
+	}
+
+	/* sleep a bit while ROM is erased */
+	msleep(20);
+
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		retval = pci_read_config_byte(pdev, RENESAS_ROM_STATUS,
+					      &status);
+		status &= RENESAS_ROM_STATUS_ERASE;
+		if (!status)
+			break;
+
+		mdelay(RENESAS_DELAY);
+	}
+
+	if (i == RENESAS_RETRY)
+		dev_dbg(&pdev->dev, "Chip erase timedout: %x\n", status);
+
+	dev_dbg(&pdev->dev, "ROM Erase... Done success\n");
+}
+
+static int debugfs_rom_erase(void *data, u64 value)
+{
+	struct pci_dev *pdev = data;
+
+	if (value == 1) {
+		dev_dbg(&pdev->dev, "Userspace requested ROM erase\n");
+		renesas_rom_erase(pdev);
+		return 0;
+	}
+	return -EINVAL;
+}
+DEFINE_DEBUGFS_ATTRIBUTE(rom_erase_ops, NULL, debugfs_rom_erase, "%llu\n");
+
+static struct dentry *debugfs_root;
+
+static void debugfs_init(struct pci_dev *pdev)
+{
+	debugfs_root = debugfs_create_dir("renesas-usb", NULL);
+
+	debugfs_create_file("rom_erase", 0200, debugfs_root,
+			    pdev, &rom_erase_ops);
+}
+
+static void debugfs_exit(void)
+{
+	debugfs_remove_recursive(debugfs_root);
+}
+
+static bool renesas_download_rom(struct pci_dev *pdev,
+				 const u32 *fw, size_t step)
+{
+	bool data0_or_data1;
+	u8 fw_status;
+	size_t i;
+	int err;
+
+	/*
+	 * The hardware does alternate between two 32-bit pages.
+	 * (This is because each row of the firmware is 8 bytes).
+	 *
+	 * for even steps we use DATA0, for odd steps DATA1.
+	 */
+	data0_or_data1 = (step & 1) == 1;
+
+	/* Read "Set DATAX" and confirm it is cleared. */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+					   &fw_status);
+		if (err) {
+			dev_err(&pdev->dev, "Read ROM Status failed: %d\n",
+				pcibios_err_to_errno(err));
+			return false;
+		}
+		if (!(fw_status & BIT(data0_or_data1)))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "Timeout for Set DATAX step: %zd\n", step);
+		return false;
+	}
+
+	/*
+	 * Write FW data to "DATAX".
+	 * "LSB is left" => force little endian
+	 */
+	err = pci_write_config_dword(pdev, data0_or_data1 ?
+				     RENESAS_DATA1 : RENESAS_DATA0,
+				     (__force u32)cpu_to_le32(fw[step]));
+	if (err) {
+		dev_err(&pdev->dev, "Write to DATAX failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	udelay(100);
+
+	/* Set "Set DATAX". */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+				    BIT(data0_or_data1));
+	if (err) {
+		dev_err(&pdev->dev, "Write config for DATAX failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	return true;
+}
+
+static bool renesas_setup_rom(struct pci_dev *pdev, const struct firmware *fw)
+{
+	const u32 *fw_data = (const u32 *)fw->data;
+	int err, i;
+	u8 status;
+
+	/* 2. Write magic word to Data0 */
+	err = pci_write_config_dword(pdev, RENESAS_DATA0,
+				     RENESAS_ROM_WRITE_MAGIC);
+	if (err)
+		return false;
+
+	/* 3. Set External ROM access */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS,
+				    RENESAS_ROM_STATUS_ACCESS);
+	if (err)
+		goto remove_bypass;
+
+	/* 4. Check the result */
+	err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+	if (err)
+		goto remove_bypass;
+	status &= GENMASK(6, 4);
+	if (status) {
+		dev_err(&pdev->dev,
+			"setting external rom failed: %x\n", status);
+		goto remove_bypass;
+	}
+
+	/* 5 to 16 Write FW to DATA0/1 while checking SetData0/1 */
+	for (i = 0; i < fw->size / 4; i++) {
+		err = renesas_download_rom(pdev, fw_data, i);
+		if (!err) {
+			dev_err(&pdev->dev,
+				"ROM Download Step %d failed at position %d bytes\n",
+				 i, i * 4);
+			goto remove_bypass;
+		}
+	}
+
+	/*
+	 * wait till DATA0/1 is cleared
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS_MSB,
+					   &status);
+		if (err)
+			goto remove_bypass;
+		if (!(status & (BIT(0) | BIT(1))))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "Final Firmware ROM Download step timed out\n");
+		goto remove_bypass;
+	}
+
+	/* 17. Remove bypass */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS, 0);
+	if (err)
+		return false;
+
+	udelay(10);
+
+	/* 18. check result */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+		if (err) {
+			dev_err(&pdev->dev, "Read ROM status failed:%d\n",
+				pcibios_err_to_errno(err));
+			return false;
+		}
+		status &= RENESAS_ROM_STATUS_RESULT;
+		if (status ==  RENESAS_ROM_STATUS_SUCCESS) {
+			dev_dbg(&pdev->dev, "Download ROM success\n");
+			break;
+		}
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) { /* Timed out */
+		dev_err(&pdev->dev,
+			"Download to external ROM TO: %x\n", status);
+		return false;
+	}
+
+	dev_dbg(&pdev->dev, "Download to external ROM scuceeded\n");
+
+	/* Last step set Reload */
+	err = pci_write_config_byte(pdev, RENESAS_ROM_STATUS,
+				    RENESAS_ROM_STATUS_RELOAD);
+	if (err) {
+		dev_err(&pdev->dev, "Set ROM execute failed: %d\n",
+			pcibios_err_to_errno(err));
+		return false;
+	}
+
+	/*
+	 * wait till Reload is cleared
+	 */
+	for (i = 0; i < RENESAS_RETRY; i++) {
+		err = pci_read_config_byte(pdev, RENESAS_ROM_STATUS, &status);
+		if (err)
+			return false;
+		if (!(status & RENESAS_ROM_STATUS_RELOAD))
+			break;
+
+		udelay(RENESAS_DELAY);
+	}
+	if (i == RENESAS_RETRY) {
+		dev_err(&pdev->dev, "ROM Exec timed out: %x\n", status);
+		return false;
+	}
+
+	return true;
+
+remove_bypass:
+	pci_write_config_byte(pdev, RENESAS_ROM_STATUS, 0);
+	return false;
+}
+
+static void renesas_fw_callback(const struct firmware *fw,
+				void *context)
+{
+	struct renesas_fw_ctx *ctx = context;
+	struct pci_dev *pdev = ctx->pdev;
+	struct device *parent = pdev->dev.parent;
+	const struct renesas_fw_entry *next_entry;
+	bool rom;
+	int err;
+
+	if (!fw) {
+		dev_err(&pdev->dev, "firmware failed to load\n");
+		/*
+		 * we didn't find firmware, check if we have another
+		 * entry for this device
+		 */
+		next_entry = renesas_get_next_entry(ctx->pdev, ctx->entry);
+		if (next_entry) {
+			ctx->entry = next_entry;
+			dev_dbg(&pdev->dev, "Found next entry, requesting: %s\n",
+				next_entry->firmware_name);
+			request_firmware_nowait(THIS_MODULE, 1,
+						next_entry->firmware_name,
+						&pdev->dev, GFP_KERNEL,
+						ctx, renesas_fw_callback);
+			return;
+		} else {
+			goto cleanup;
+		}
+	}
+
+	err = renesas_fw_verify(pdev, fw->data, fw->size);
+	if (err)
+		goto cleanup;
+
+	/* Check if the device has external ROM */
+	rom = renesas_check_rom(pdev);
+	if (rom) {
+		/* perfrom chip erase first */
+		renesas_rom_erase(pdev);
+
+		/* lets try loading fw on ROM first */
+		rom = renesas_setup_rom(pdev, fw);
+		if (!rom) {
+			dev_err(&pdev->dev,
+				"ROM load failed, falling back on FW load\n");
+		} else {
+			dev_dbg(&pdev->dev, "ROM load done..\n");
+
+			release_firmware(fw);
+			goto do_probe;
+		}
+	}
+
+	err = renesas_fw_download(pdev, fw);
+	release_firmware(fw);
+	if (err) {
+		dev_err(&pdev->dev, "firmware failed to download (%d).", err);
+		goto cleanup;
+	}
+
+do_probe:
+	if (ctx->resume)
+		return;
+
+	err = xhci_pci_probe(pdev, ctx->id);
+	if (!err) {
+		/* everything worked */
+		devm_kfree(&pdev->dev, ctx);
+		return;
+	}
+
+cleanup:
+	/* in case of an error - fall through */
+	dev_info(&pdev->dev, "Unloading driver");
+
+	if (parent)
+		device_lock(parent);
+
+	device_release_driver(&pdev->dev);
+
+	if (parent)
+		device_unlock(parent);
+
+	pci_dev_put(pdev);
+}
+
+static int renesas_fw_alive_check(struct pci_dev *pdev)
+{
+	const struct renesas_fw_entry *entry;
+
+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
+	entry = renesas_needs_fw_dl(pdev);
+	if (!entry)
+		return 0;
+
+	return renesas_fw_check_running(pdev);
+}
+
+static int renesas_fw_download_to_hw(struct pci_dev *pdev,
+				     const struct pci_device_id *id,
+				     bool do_resume)
+{
+	const struct renesas_fw_entry *entry;
+	struct renesas_fw_ctx *ctx;
+	int err;
+
+	/* check if we have a eligible RENESAS' uPD720201/2 w/o FW. */
+	entry = renesas_needs_fw_dl(pdev);
+	if (!entry)
+		return 0;
+
+	err = renesas_fw_check_running(pdev);
+	/* Continue ahead, if the firmware is already running. */
+	if (err == 0)
+		return 0;
+
+	if (err != 1)
+		return err;
+
+	ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
+	if (!ctx)
+		return -ENOMEM;
+	ctx->pdev = pdev;
+	ctx->resume = do_resume;
+	ctx->id = id;
+	ctx->entry = entry;
+
+	pci_dev_get(pdev);
+	err = request_firmware_nowait(THIS_MODULE, 1, entry->firmware_name,
+				      &pdev->dev, GFP_KERNEL,
+				      ctx, renesas_fw_callback);
+	if (err) {
+		pci_dev_put(pdev);
+		return err;
+	}
+
+	/*
+	 * The renesas_fw_callback() callback will continue the probe
+	 * process, once it aquires the firmware.
+	 */
+	return 1;
+}
+
+static int renesas_xhci_pci_probe(struct pci_dev *dev,
+				  const struct pci_device_id *id)
+{
+	int retval;
+
+	/*
+	 * Check if this device is a RENESAS uPD720201/2 device.
+	 * Otherwise, we can continue with xhci_pci_probe as usual.
+	 */
+	retval = renesas_fw_download_to_hw(dev, id, false);
+	switch (retval) {
+	case 0:
+		break;
+
+	case 1: /* let it load the firmware and recontinue the probe. */
+		return 0;
+
+	default:
+		return retval;
+	};
+
+	return xhci_pci_probe(dev, id);
+}
+
+static void renesas_xhci_pci_remove(struct pci_dev *dev)
+{
+	debugfs_exit();
+
+	if (renesas_fw_alive_check(dev)) {
+		/*
+		 * bail out early, if this was a renesas device w/o FW.
+		 * Else we might hit the NMI watchdog in xhci_handsake
+		 * during xhci_reset as part of the driver's unloading.
+		 * which we forced in the renesas_fw_callback().
+		 */
+		return;
+	}
+
+	xhci_pci_remove(dev);
+}
+
+static const struct pci_device_id pci_ids[] = {
+	{ PCI_DEVICE(0x1912, 0x0014),
+		.driver_data =	(unsigned long)&xhci_pci_hc_driver,
+	},
+	{ PCI_DEVICE(0x1912, 0x0015),
+		.driver_data =	(unsigned long)&xhci_pci_hc_driver,
+	},
+	{ /* sentinal */ }
+};
+MODULE_DEVICE_TABLE(pci, pci_ids);
+
+static struct pci_driver renesas_xhci_pci_driver = {
+	.name =		"renesas xhci",
+	.id_table =	pci_ids,
+
+	.probe =	renesas_xhci_pci_probe,
+	.remove =	renesas_xhci_pci_remove,
+	/* suspend and resume implemented later */
+
+	.shutdown =	usb_hcd_pci_shutdown,
+#ifdef CONFIG_PM
+	.driver = {
+		.pm = &usb_hcd_pci_pm_ops
+	},
+#endif
+};
+
+static int __init xhci_pci_init(void)
+{
+	xhci_init_driver(&xhci_pci_hc_driver, &xhci_pci_overrides);
+#ifdef CONFIG_PM
+	xhci_pci_hc_driver.pci_suspend = xhci_pci_suspend;
+	xhci_pci_hc_driver.pci_resume = xhci_pci_resume;
+#endif
+	return pci_register_driver(&renesas_xhci_pci_driver);
+}
+module_init(xhci_pci_init);
+
+static void __exit xhci_pci_exit(void)
+{
+	pci_unregister_driver(&renesas_xhci_pci_driver);
+}
+module_exit(xhci_pci_exit);
+
+MODULE_DESCRIPTION("xHCI PCI Host Controller Driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index e753378..3685bea 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -15,6 +15,7 @@
 
 #include "xhci.h"
 #include "xhci-trace.h"
+#include "xhci-pci.h"
 
 #define SSIC_PORT_NUM		2
 #define SSIC_PORT_CFG2		0x880c
@@ -78,8 +79,6 @@
 
 static struct hc_driver __read_mostly xhci_pci_hc_driver;
 
-static int xhci_pci_setup(struct usb_hcd *hcd);
-
 static const struct xhci_driver_overrides xhci_pci_overrides __initconst = {
 	.reset = xhci_pci_setup,
 };
@@ -335,7 +334,7 @@
 #endif /* CONFIG_ACPI */
 
 /* called during probe() after chip reset completes */
-static int xhci_pci_setup(struct usb_hcd *hcd)
+int xhci_pci_setup(struct usb_hcd *hcd)
 {
 	struct xhci_hcd		*xhci;
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -363,12 +362,13 @@
 	/* Find any debug ports */
 	return xhci_pci_reinit(xhci, pdev);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_setup);
 
 /*
  * We need to register our own PCI probe function (instead of the USB core's
  * function) in order to create a second roothub under xHCI.
  */
-static int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
+int xhci_pci_probe(struct pci_dev *dev, const struct pci_device_id *id)
 {
 	int retval;
 	struct xhci_hcd *xhci;
@@ -431,8 +431,9 @@
 	pm_runtime_put_noidle(&dev->dev);
 	return retval;
 }
+EXPORT_SYMBOL_GPL(xhci_pci_probe);
 
-static void xhci_pci_remove(struct pci_dev *dev)
+void xhci_pci_remove(struct pci_dev *dev)
 {
 	struct xhci_hcd *xhci;
 
@@ -454,6 +455,7 @@
 
 	usb_hcd_pci_remove(dev);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_remove);
 
 #ifdef CONFIG_PM
 /*
@@ -519,7 +521,7 @@
 	writel(reg, hcd->regs + SPARSE_CNTL_ENABLE);
 }
 
-static int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
+int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup)
 {
 	struct xhci_hcd	*xhci = hcd_to_xhci(hcd);
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -547,8 +549,9 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(xhci_pci_suspend);
 
-static int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
+int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated)
 {
 	struct xhci_hcd		*xhci = hcd_to_xhci(hcd);
 	struct pci_dev		*pdev = to_pci_dev(hcd->self.controller);
@@ -596,6 +599,7 @@
 	if (xhci->quirks & XHCI_SPURIOUS_WAKEUP)
 		pci_set_power_state(pdev, PCI_D3hot);
 }
+EXPORT_SYMBOL_GPL(xhci_pci_resume);
 #endif /* CONFIG_PM */
 
 /*-------------------------------------------------------------------------*/
diff --git a/drivers/usb/host/xhci-pci.h b/drivers/usb/host/xhci-pci.h
new file mode 100644
index 0000000..587f71d
--- /dev/null
+++ b/drivers/usb/host/xhci-pci.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (C) 2008 Intel Corp. */
+
+#ifndef XHCI_PCI_H
+#define XHCI_PCI_H
+
+int xhci_pci_setup(struct usb_hcd *hcd);
+
+int xhci_pci_probe(struct pci_dev *pdev,
+		   const struct pci_device_id *id);
+
+void xhci_pci_remove(struct pci_dev *dev);
+
+int xhci_pci_suspend(struct usb_hcd *hcd, bool do_wakeup);
+
+int xhci_pci_resume(struct usb_hcd *hcd, bool hibernated);
+
+#endif
diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
index 7fa27b4..14def71 100644
--- a/drivers/usb/host/xhci-ring.c
+++ b/drivers/usb/host/xhci-ring.c
@@ -57,7 +57,6 @@
 #include <linux/dma-mapping.h>
 #include "xhci.h"
 #include "xhci-trace.h"
-#include "xhci-mtk.h"
 
 /*
  * Returns zero if the TRB isn't in this segment, otherwise it returns the DMA
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
index 1c80700..abf7081 100644
--- a/drivers/usb/host/xhci.c
+++ b/drivers/usb/host/xhci.c
@@ -20,7 +20,6 @@
 
 #include "xhci.h"
 #include "xhci-trace.h"
-#include "xhci-mtk.h"
 #include "xhci-debugfs.h"
 #include "xhci-dbgcap.h"
 
@@ -1306,6 +1305,7 @@
 			(usb_endpoint_dir_in(desc) ? 1 : 0) - 1;
 	return index;
 }
+EXPORT_SYMBOL_GPL(xhci_get_endpoint_index);
 
 /* The reverse operation to xhci_get_endpoint_index. Calculate the USB endpoint
  * address from the XHCI endpoint index.
@@ -1744,8 +1744,8 @@
  * disabled, so there's no need for mutual exclusion to protect
  * the xhci->devs[slot_id] structure.
  */
-static int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep)
+int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
+		       struct usb_host_endpoint *ep)
 {
 	struct xhci_hcd *xhci;
 	struct xhci_container_ctx *in_ctx, *out_ctx;
@@ -1805,9 +1805,6 @@
 
 	xhci_endpoint_zero(xhci, xhci->devs[udev->slot_id], ep);
 
-	if (xhci->quirks & XHCI_MTK_HOST)
-		xhci_mtk_drop_ep_quirk(hcd, udev, ep);
-
 	xhci_dbg(xhci, "drop ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
 			(unsigned int) ep->desc.bEndpointAddress,
 			udev->slot_id,
@@ -1815,6 +1812,7 @@
 			(unsigned int) new_add_flags);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(xhci_drop_endpoint);
 
 /* Add an endpoint to a new possible bandwidth configuration for this device.
  * Only one call to this function is allowed per endpoint before
@@ -1829,8 +1827,8 @@
  * configuration or alt setting is installed in the device, so there's no need
  * for mutual exclusion to protect the xhci->devs[slot_id] structure.
  */
-static int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
-		struct usb_host_endpoint *ep)
+int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
+		      struct usb_host_endpoint *ep)
 {
 	struct xhci_hcd *xhci;
 	struct xhci_container_ctx *in_ctx;
@@ -1904,15 +1902,6 @@
 		return -ENOMEM;
 	}
 
-	if (xhci->quirks & XHCI_MTK_HOST) {
-		ret = xhci_mtk_add_ep_quirk(hcd, udev, ep);
-		if (ret < 0) {
-			xhci_ring_free(xhci, virt_dev->eps[ep_index].new_ring);
-			virt_dev->eps[ep_index].new_ring = NULL;
-			return ret;
-		}
-	}
-
 	ctrl_ctx->add_flags |= cpu_to_le32(added_ctxs);
 	new_add_flags = le32_to_cpu(ctrl_ctx->add_flags);
 
@@ -1937,6 +1926,7 @@
 			(unsigned int) new_add_flags);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(xhci_add_endpoint);
 
 static void xhci_zero_in_ctx(struct xhci_hcd *xhci, struct xhci_virt_device *virt_dev)
 {
@@ -2970,6 +2960,7 @@
 
 	return ret;
 }
+EXPORT_SYMBOL_GPL(xhci_check_bandwidth);
 
 void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev)
 {
@@ -2994,6 +2985,7 @@
 	}
 	xhci_zero_in_ctx(xhci, virt_dev);
 }
+EXPORT_SYMBOL_GPL(xhci_reset_bandwidth);
 
 static void xhci_setup_input_ctx_for_config_ep(struct xhci_hcd *xhci,
 		struct xhci_container_ctx *in_ctx,
@@ -5409,6 +5401,10 @@
 			drv->reset = over->reset;
 		if (over->start)
 			drv->start = over->start;
+		if (over->add_endpoint)
+			drv->add_endpoint = over->add_endpoint;
+		if (over->drop_endpoint)
+			drv->drop_endpoint = over->drop_endpoint;
 		if (over->check_bandwidth)
 			drv->check_bandwidth = over->check_bandwidth;
 		if (over->reset_bandwidth)
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index 02df309..4171d2c 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -17,6 +17,7 @@
 #include <linux/kernel.h>
 #include <linux/usb/hcd.h>
 #include <linux/io-64-nonatomic-lo-hi.h>
+#include <linux/android_kabi.h>
 
 /* Code sharing between pci-quirks and xhci hcd */
 #include	"xhci-ext-caps.h"
@@ -812,6 +813,9 @@
 	struct completion		*completion;
 	union xhci_trb			*command_trb;
 	struct list_head		cmd_list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* drop context bitmasks */
@@ -1533,6 +1537,8 @@
 	void			*bounce_buf;
 	unsigned int		bounce_offs;
 	unsigned int		bounce_len;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct xhci_td {
@@ -1618,6 +1624,9 @@
 	enum xhci_ring_type	type;
 	bool			last_td_was_short;
 	struct radix_tree_root	*trb_address_map;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct xhci_erst_entry {
@@ -1635,6 +1644,8 @@
 	dma_addr_t		erst_dma_addr;
 	/* Num entries the ERST can contain */
 	unsigned int		erst_size;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct xhci_scratchpad {
@@ -1908,6 +1919,12 @@
 	struct list_head	regset_list;
 
 	void			*dbc;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	/* platform-specific data -- must come last */
 	unsigned long		priv[0] __aligned(sizeof(s64));
 };
@@ -1917,6 +1934,10 @@
 	size_t extra_priv_size;
 	int (*reset)(struct usb_hcd *hcd);
 	int (*start)(struct usb_hcd *hcd);
+	int (*add_endpoint)(struct usb_hcd *hcd, struct usb_device *udev,
+			    struct usb_host_endpoint *ep);
+	int (*drop_endpoint)(struct usb_hcd *hcd, struct usb_device *udev,
+			     struct usb_host_endpoint *ep);
 	int (*check_bandwidth)(struct usb_hcd *, struct usb_device *);
 	void (*reset_bandwidth)(struct usb_hcd *, struct usb_device *);
 };
@@ -2071,6 +2092,10 @@
 void xhci_shutdown(struct usb_hcd *hcd);
 void xhci_init_driver(struct hc_driver *drv,
 		      const struct xhci_driver_overrides *over);
+int xhci_add_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
+		      struct usb_host_endpoint *ep);
+int xhci_drop_endpoint(struct usb_hcd *hcd, struct usb_device *udev,
+		       struct usb_host_endpoint *ep);
 int xhci_check_bandwidth(struct usb_hcd *hcd, struct usb_device *udev);
 void xhci_reset_bandwidth(struct usb_hcd *hcd, struct usb_device *udev);
 int xhci_disable_slot(struct xhci_hcd *xhci, u32 slot_id);
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 52f8e2b..767c5da 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -116,6 +116,13 @@
 	depends on USB_MUSB_GADGET
 	depends on USB=n || USB_OTG_BLACKLIST_HUB
 
+config USB_MUSB_MEDIATEK
+	tristate "MediaTek platforms"
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	depends on NOP_USB_XCEIV
+	depends on GENERIC_PHY
+	select USB_ROLE_SWITCH
+
 config USB_MUSB_AM335X_CHILD
 	tristate
 
@@ -142,7 +149,7 @@
 
 config USB_INVENTRA_DMA
 	bool 'Inventra'
-	depends on USB_MUSB_OMAP2PLUS
+	depends on USB_MUSB_OMAP2PLUS || USB_MUSB_MEDIATEK
 	help
 	  Enable DMA transfers using Mentor's engine.
 
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index 3a88c79..63d82d0 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -24,6 +24,7 @@
 obj-$(CONFIG_USB_MUSB_UX500)			+= ux500.o
 obj-$(CONFIG_USB_MUSB_JZ4740)			+= jz4740.o
 obj-$(CONFIG_USB_MUSB_SUNXI)			+= sunxi.o
+obj-$(CONFIG_USB_MUSB_MEDIATEK)      		+= mediatek.o
 
 
 obj-$(CONFIG_USB_MUSB_AM335X_CHILD)		+= musb_am335x.o
diff --git a/drivers/usb/musb/mediatek.c b/drivers/usb/musb/mediatek.c
new file mode 100644
index 0000000..4cc7037
--- /dev/null
+++ b/drivers/usb/musb/mediatek.c
@@ -0,0 +1,588 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2019 MediaTek Inc.
+ *
+ * Author:
+ *  Min Guo <min.guo@mediatek.com>
+ *  Yonglong Wu <yonglong.wu@mediatek.com>
+ */
+
+#include <linux/clk.h>
+#include <linux/dma-mapping.h>
+#include <linux/module.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/usb/role.h>
+#include <linux/usb/usb_phy_generic.h>
+#include "musb_core.h"
+#include "musb_dma.h"
+
+#define USB_L1INTS		0x00a0
+#define USB_L1INTM		0x00a4
+#define MTK_MUSB_TXFUNCADDR	0x0480
+
+/* MediaTek controller toggle enable and status reg */
+#define MUSB_RXTOG		0x80
+#define MUSB_RXTOGEN		0x82
+#define MUSB_TXTOG		0x84
+#define MUSB_TXTOGEN		0x86
+#define MTK_TOGGLE_EN		GENMASK(15, 0)
+
+#define TX_INT_STATUS		BIT(0)
+#define RX_INT_STATUS		BIT(1)
+#define USBCOM_INT_STATUS	BIT(2)
+#define DMA_INT_STATUS		BIT(3)
+
+#define DMA_INTR_STATUS_MSK	GENMASK(7, 0)
+#define DMA_INTR_UNMASK_SET_MSK	GENMASK(31, 24)
+
+struct mtk_glue {
+	struct device *dev;
+	struct musb *musb;
+	struct platform_device *musb_pdev;
+	struct platform_device *usb_phy;
+	struct phy *phy;
+	struct usb_phy *xceiv;
+	enum phy_mode phy_mode;
+	struct clk *main;
+	struct clk *mcu;
+	struct clk *univpll;
+	enum usb_role role;
+	struct usb_role_switch *role_sw;
+};
+
+static int mtk_musb_clks_get(struct mtk_glue *glue)
+{
+	struct device *dev = glue->dev;
+
+	glue->main = devm_clk_get(dev, "main");
+	if (IS_ERR(glue->main)) {
+		dev_err(dev, "fail to get main clock\n");
+		return PTR_ERR(glue->main);
+	}
+
+	glue->mcu = devm_clk_get(dev, "mcu");
+	if (IS_ERR(glue->mcu)) {
+		dev_err(dev, "fail to get mcu clock\n");
+		return PTR_ERR(glue->mcu);
+	}
+
+	glue->univpll = devm_clk_get(dev, "univpll");
+	if (IS_ERR(glue->univpll)) {
+		dev_err(dev, "fail to get univpll clock\n");
+		return PTR_ERR(glue->univpll);
+	}
+
+	return 0;
+}
+
+static int mtk_musb_clks_enable(struct mtk_glue *glue)
+{
+	int ret;
+
+	ret = clk_prepare_enable(glue->main);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable main clock\n");
+		goto err_main_clk;
+	}
+
+	ret = clk_prepare_enable(glue->mcu);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable mcu clock\n");
+		goto err_mcu_clk;
+	}
+
+	ret = clk_prepare_enable(glue->univpll);
+	if (ret) {
+		dev_err(glue->dev, "failed to enable univpll clock\n");
+		goto err_univpll_clk;
+	}
+
+	return 0;
+
+err_univpll_clk:
+	clk_disable_unprepare(glue->mcu);
+err_mcu_clk:
+	clk_disable_unprepare(glue->main);
+err_main_clk:
+	return ret;
+}
+
+static void mtk_musb_clks_disable(struct mtk_glue *glue)
+{
+	clk_disable_unprepare(glue->univpll);
+	clk_disable_unprepare(glue->mcu);
+	clk_disable_unprepare(glue->main);
+}
+
+static int musb_usb_role_sx_set(struct device *dev, enum usb_role role)
+{
+	struct mtk_glue *glue = dev_get_drvdata(dev);
+	struct musb *musb = glue->musb;
+	u8 devctl = readb(musb->mregs + MUSB_DEVCTL);
+	enum usb_role new_role;
+
+	if (role == glue->role)
+		return 0;
+
+	switch (role) {
+	case USB_ROLE_HOST:
+		musb->xceiv->otg->state = OTG_STATE_A_WAIT_VRISE;
+		glue->phy_mode = PHY_MODE_USB_HOST;
+		new_role = USB_ROLE_HOST;
+		if (glue->role == USB_ROLE_NONE)
+			phy_power_on(glue->phy);
+
+		devctl |= MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		MUSB_HST_MODE(musb);
+		break;
+	case USB_ROLE_DEVICE:
+		musb->xceiv->otg->state = OTG_STATE_B_IDLE;
+		glue->phy_mode = PHY_MODE_USB_DEVICE;
+		new_role = USB_ROLE_DEVICE;
+		devctl &= ~MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		if (glue->role == USB_ROLE_NONE)
+			phy_power_on(glue->phy);
+
+		MUSB_DEV_MODE(musb);
+		break;
+	case USB_ROLE_NONE:
+		glue->phy_mode = PHY_MODE_USB_OTG;
+		new_role = USB_ROLE_NONE;
+		devctl &= ~MUSB_DEVCTL_SESSION;
+		musb_writeb(musb->mregs, MUSB_DEVCTL, devctl);
+		if (glue->role != USB_ROLE_NONE)
+			phy_power_off(glue->phy);
+
+		break;
+	default:
+		dev_err(glue->dev, "Invalid State\n");
+		return -EINVAL;
+	}
+
+	glue->role = new_role;
+	phy_set_mode(glue->phy, glue->phy_mode);
+
+	return 0;
+}
+
+static enum usb_role musb_usb_role_sx_get(struct device *dev)
+{
+	struct mtk_glue *glue = dev_get_drvdata(dev);
+
+	return glue->role;
+}
+
+static int mtk_otg_switch_init(struct mtk_glue *glue)
+{
+	struct usb_role_switch_desc role_sx_desc = { 0 };
+
+	role_sx_desc.set = musb_usb_role_sx_set;
+	role_sx_desc.get = musb_usb_role_sx_get;
+	role_sx_desc.fwnode = dev_fwnode(glue->dev);
+	glue->role_sw = usb_role_switch_register(glue->dev, &role_sx_desc);
+
+	return PTR_ERR_OR_ZERO(glue->role_sw);
+}
+
+static void mtk_otg_switch_exit(struct mtk_glue *glue)
+{
+	return usb_role_switch_unregister(glue->role_sw);
+}
+
+static irqreturn_t generic_interrupt(int irq, void *__hci)
+{
+	unsigned long flags;
+	irqreturn_t retval = IRQ_NONE;
+	struct musb *musb = __hci;
+
+	spin_lock_irqsave(&musb->lock, flags);
+	musb->int_usb = musb_clearb(musb->mregs, MUSB_INTRUSB);
+	musb->int_rx = musb_clearw(musb->mregs, MUSB_INTRRX);
+	musb->int_tx = musb_clearw(musb->mregs, MUSB_INTRTX);
+
+	if ((musb->int_usb & MUSB_INTR_RESET) && !is_host_active(musb)) {
+		/* ep0 FADDR must be 0 when (re)entering peripheral mode */
+		musb_ep_select(musb->mregs, 0);
+		musb_writeb(musb->mregs, MUSB_FADDR, 0);
+	}
+
+	if (musb->int_usb || musb->int_tx || musb->int_rx)
+		retval = musb_interrupt(musb);
+
+	spin_unlock_irqrestore(&musb->lock, flags);
+
+	return retval;
+}
+
+static irqreturn_t mtk_musb_interrupt(int irq, void *dev_id)
+{
+	irqreturn_t retval = IRQ_NONE;
+	struct musb *musb = (struct musb *)dev_id;
+	u32 l1_ints;
+
+	l1_ints = musb_readl(musb->mregs, USB_L1INTS) &
+			musb_readl(musb->mregs, USB_L1INTM);
+
+	if (l1_ints & (TX_INT_STATUS | RX_INT_STATUS | USBCOM_INT_STATUS))
+		retval = generic_interrupt(irq, musb);
+
+#if defined(CONFIG_USB_INVENTRA_DMA)
+	if (l1_ints & DMA_INT_STATUS)
+		retval = dma_controller_irq(irq, musb->dma_controller);
+#endif
+	return retval;
+}
+
+static u32 mtk_musb_busctl_offset(u8 epnum, u16 offset)
+{
+	return MTK_MUSB_TXFUNCADDR + offset + 8 * epnum;
+}
+
+static u8 mtk_musb_clearb(void __iomem *addr, unsigned int offset)
+{
+	u8 data;
+
+	/* W1C */
+	data = musb_readb(addr, offset);
+	musb_writeb(addr, offset, data);
+	return data;
+}
+
+static u16 mtk_musb_clearw(void __iomem *addr, unsigned int offset)
+{
+	u16 data;
+
+	/* W1C */
+	data = musb_readw(addr, offset);
+	musb_writew(addr, offset, data);
+	return data;
+}
+
+static int mtk_musb_set_mode(struct musb *musb, u8 mode)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+	enum phy_mode new_mode;
+	enum usb_role new_role;
+
+	switch (mode) {
+	case MUSB_HOST:
+		new_mode = PHY_MODE_USB_HOST;
+		new_role = USB_ROLE_HOST;
+		break;
+	case MUSB_PERIPHERAL:
+		new_mode = PHY_MODE_USB_DEVICE;
+		new_role = USB_ROLE_DEVICE;
+		break;
+	case MUSB_OTG:
+		new_mode = PHY_MODE_USB_OTG;
+		new_role = USB_ROLE_NONE;
+		break;
+	default:
+		dev_err(glue->dev, "Invalid mode request\n");
+		return -EINVAL;
+	}
+
+	if (glue->phy_mode == new_mode)
+		return 0;
+
+	if (musb->port_mode != MUSB_OTG) {
+		dev_err(glue->dev, "Does not support changing modes\n");
+		return -EINVAL;
+	}
+
+	glue->role = new_role;
+	musb_usb_role_sx_set(dev, glue->role);
+	return 0;
+}
+
+static int mtk_musb_init(struct musb *musb)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+	int ret;
+
+	glue->musb = musb;
+	musb->phy = glue->phy;
+	musb->xceiv = glue->xceiv;
+	musb->is_host = false;
+	musb->isr = mtk_musb_interrupt;
+
+	/* Set TX/RX toggle enable */
+	musb_writew(musb->mregs, MUSB_TXTOGEN, MTK_TOGGLE_EN);
+	musb_writew(musb->mregs, MUSB_RXTOGEN, MTK_TOGGLE_EN);
+
+	if (musb->port_mode == MUSB_OTG) {
+		ret = mtk_otg_switch_init(glue);
+		if (ret)
+			return ret;
+	}
+
+	ret = phy_init(glue->phy);
+	if (ret)
+		goto err_phy_init;
+
+	ret = phy_power_on(glue->phy);
+	if (ret)
+		goto err_phy_power_on;
+
+	phy_set_mode(glue->phy, glue->phy_mode);
+
+#if defined(CONFIG_USB_INVENTRA_DMA)
+	musb_writel(musb->mregs, MUSB_HSDMA_INTR,
+		    DMA_INTR_STATUS_MSK | DMA_INTR_UNMASK_SET_MSK);
+#endif
+	musb_writel(musb->mregs, USB_L1INTM, TX_INT_STATUS | RX_INT_STATUS |
+		    USBCOM_INT_STATUS | DMA_INT_STATUS);
+	return 0;
+
+err_phy_power_on:
+	phy_exit(glue->phy);
+err_phy_init:
+	mtk_otg_switch_exit(glue);
+	return ret;
+}
+
+static u16 mtk_musb_get_toggle(struct musb_qh *qh, int is_out)
+{
+	struct musb *musb = qh->hw_ep->musb;
+	u8 epnum = qh->hw_ep->epnum;
+	u16 toggle;
+
+	toggle = musb_readw(musb->mregs, is_out ? MUSB_TXTOG : MUSB_RXTOG);
+	return toggle & (1 << epnum);
+}
+
+static u16 mtk_musb_set_toggle(struct musb_qh *qh, int is_out, struct urb *urb)
+{
+	struct musb *musb = qh->hw_ep->musb;
+	u8 epnum = qh->hw_ep->epnum;
+	u16 value, toggle;
+
+	toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
+
+	if (is_out) {
+		value = musb_readw(musb->mregs, MUSB_TXTOG);
+		value |= toggle << epnum;
+		musb_writew(musb->mregs, MUSB_TXTOG, value);
+	} else {
+		value = musb_readw(musb->mregs, MUSB_RXTOG);
+		value |= toggle << epnum;
+		musb_writew(musb->mregs, MUSB_RXTOG, value);
+	}
+
+	return 0;
+}
+
+static int mtk_musb_exit(struct musb *musb)
+{
+	struct device *dev = musb->controller;
+	struct mtk_glue *glue = dev_get_drvdata(dev->parent);
+
+	mtk_otg_switch_exit(glue);
+	phy_power_off(glue->phy);
+	phy_exit(glue->phy);
+	mtk_musb_clks_disable(glue);
+
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+	return 0;
+}
+
+static const struct musb_platform_ops mtk_musb_ops = {
+	.quirks = MUSB_DMA_INVENTRA,
+	.init = mtk_musb_init,
+	.get_toggle = mtk_musb_get_toggle,
+	.set_toggle = mtk_musb_set_toggle,
+	.exit = mtk_musb_exit,
+#ifdef CONFIG_USB_INVENTRA_DMA
+	.dma_init = musbhs_dma_controller_create_noirq,
+	.dma_exit = musbhs_dma_controller_destroy,
+#endif
+	.clearb = mtk_musb_clearb,
+	.clearw = mtk_musb_clearw,
+	.busctl_offset = mtk_musb_busctl_offset,
+	.set_mode = mtk_musb_set_mode,
+};
+
+#define MTK_MUSB_MAX_EP_NUM	8
+#define MTK_MUSB_RAM_BITS	11
+
+static struct musb_fifo_cfg mtk_musb_mode_cfg[] = {
+	{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 2, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 3, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 4, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 5, .style = FIFO_RX, .maxpacket = 512, },
+	{ .hw_ep_num = 6, .style = FIFO_TX, .maxpacket = 1024, },
+	{ .hw_ep_num = 6, .style = FIFO_RX, .maxpacket = 1024, },
+	{ .hw_ep_num = 7, .style = FIFO_TX, .maxpacket = 512, },
+	{ .hw_ep_num = 7, .style = FIFO_RX, .maxpacket = 64, },
+};
+
+static const struct musb_hdrc_config mtk_musb_hdrc_config = {
+	.fifo_cfg = mtk_musb_mode_cfg,
+	.fifo_cfg_size = ARRAY_SIZE(mtk_musb_mode_cfg),
+	.multipoint = true,
+	.dyn_fifo = true,
+	.num_eps = MTK_MUSB_MAX_EP_NUM,
+	.ram_bits = MTK_MUSB_RAM_BITS,
+};
+
+static const struct platform_device_info mtk_dev_info = {
+	.name = "musb-hdrc",
+	.id = PLATFORM_DEVID_AUTO,
+	.dma_mask = DMA_BIT_MASK(32),
+};
+
+static int mtk_musb_probe(struct platform_device *pdev)
+{
+	struct musb_hdrc_platform_data *pdata;
+	struct mtk_glue *glue;
+	struct platform_device_info pinfo;
+	struct device *dev = &pdev->dev;
+	struct device_node *np = dev->of_node;
+	int ret = -ENOMEM;
+
+	glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
+	if (!glue)
+		return -ENOMEM;
+
+	glue->dev = dev;
+	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+	if (!pdata)
+		return -ENOMEM;
+
+	ret = of_platform_populate(np, NULL, NULL, dev);
+	if (ret) {
+		dev_err(dev, "failed to create child devices at %p\n", np);
+		return ret;
+	}
+
+	ret = mtk_musb_clks_get(glue);
+	if (ret)
+		return ret;
+
+	pdata->config = &mtk_musb_hdrc_config;
+	pdata->platform_ops = &mtk_musb_ops;
+	pdata->mode = usb_get_dr_mode(dev);
+
+	if (IS_ENABLED(CONFIG_USB_MUSB_HOST))
+		pdata->mode = USB_DR_MODE_HOST;
+	else if (IS_ENABLED(CONFIG_USB_MUSB_GADGET))
+		pdata->mode = USB_DR_MODE_PERIPHERAL;
+
+	switch (pdata->mode) {
+	case USB_DR_MODE_HOST:
+		glue->phy_mode = PHY_MODE_USB_HOST;
+		glue->role = USB_ROLE_HOST;
+		break;
+	case USB_DR_MODE_PERIPHERAL:
+		glue->phy_mode = PHY_MODE_USB_DEVICE;
+		glue->role = USB_ROLE_DEVICE;
+		break;
+	case USB_DR_MODE_OTG:
+		glue->phy_mode = PHY_MODE_USB_OTG;
+		glue->role = USB_ROLE_NONE;
+		break;
+	default:
+		dev_err(&pdev->dev, "Error 'dr_mode' property\n");
+		return -EINVAL;
+	}
+
+	glue->phy = devm_of_phy_get_by_index(dev, np, 0);
+	if (IS_ERR(glue->phy)) {
+		dev_err(dev, "fail to getting phy %ld\n",
+			PTR_ERR(glue->phy));
+		return PTR_ERR(glue->phy);
+	}
+
+	glue->usb_phy = usb_phy_generic_register();
+	if (IS_ERR(glue->usb_phy)) {
+		dev_err(dev, "fail to registering usb-phy %ld\n",
+			PTR_ERR(glue->usb_phy));
+		return PTR_ERR(glue->usb_phy);
+	}
+
+	glue->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
+	if (IS_ERR(glue->xceiv)) {
+		ret = PTR_ERR(glue->xceiv);
+		dev_err(dev, "fail to getting usb-phy %d\n", ret);
+		goto err_unregister_usb_phy;
+	}
+
+	platform_set_drvdata(pdev, glue);
+	pm_runtime_enable(dev);
+	pm_runtime_get_sync(dev);
+
+	ret = mtk_musb_clks_enable(glue);
+	if (ret)
+		goto err_enable_clk;
+
+	pinfo = mtk_dev_info;
+	pinfo.parent = dev;
+	pinfo.res = pdev->resource;
+	pinfo.num_res = pdev->num_resources;
+	pinfo.data = pdata;
+	pinfo.size_data = sizeof(*pdata);
+
+	glue->musb_pdev = platform_device_register_full(&pinfo);
+	if (IS_ERR(glue->musb_pdev)) {
+		ret = PTR_ERR(glue->musb_pdev);
+		dev_err(dev, "failed to register musb device: %d\n", ret);
+		goto err_device_register;
+	}
+
+	return 0;
+
+err_device_register:
+	mtk_musb_clks_disable(glue);
+err_enable_clk:
+	pm_runtime_put_sync(dev);
+	pm_runtime_disable(dev);
+err_unregister_usb_phy:
+	usb_phy_generic_unregister(glue->usb_phy);
+	return ret;
+}
+
+static int mtk_musb_remove(struct platform_device *pdev)
+{
+	struct mtk_glue *glue = platform_get_drvdata(pdev);
+	struct platform_device *usb_phy = glue->usb_phy;
+
+	platform_device_unregister(glue->musb_pdev);
+	usb_phy_generic_unregister(usb_phy);
+
+	return 0;
+}
+
+#ifdef CONFIG_OF
+static const struct of_device_id mtk_musb_match[] = {
+	{.compatible = "mediatek,mtk-musb",},
+	{},
+};
+MODULE_DEVICE_TABLE(of, mtk_musb_match);
+#endif
+
+static struct platform_driver mtk_musb_driver = {
+	.probe = mtk_musb_probe,
+	.remove = mtk_musb_remove,
+	.driver = {
+		   .name = "musb-mtk",
+		   .of_match_table = of_match_ptr(mtk_musb_match),
+	},
+};
+
+module_platform_driver(mtk_musb_driver);
+
+MODULE_DESCRIPTION("MediaTek MUSB Glue Layer");
+MODULE_AUTHOR("Min Guo <min.guo@mediatek.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 18c79bc..7b4cd6d 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -246,7 +246,7 @@
 	return 0x80 + (0x08 * epnum) + offset;
 }
 
-static u8 musb_default_readb(const void __iomem *addr, unsigned offset)
+static u8 musb_default_readb(void __iomem *addr, u32 offset)
 {
 	u8 data =  __raw_readb(addr + offset);
 
@@ -254,13 +254,13 @@
 	return data;
 }
 
-static void musb_default_writeb(void __iomem *addr, unsigned offset, u8 data)
+static void musb_default_writeb(void __iomem *addr, u32 offset, u8 data)
 {
 	trace_musb_writeb(__builtin_return_address(0), addr, offset, data);
 	__raw_writeb(data, addr + offset);
 }
 
-static u16 musb_default_readw(const void __iomem *addr, unsigned offset)
+static u16 musb_default_readw(void __iomem *addr, u32 offset)
 {
 	u16 data = __raw_readw(addr + offset);
 
@@ -268,12 +268,44 @@
 	return data;
 }
 
-static void musb_default_writew(void __iomem *addr, unsigned offset, u16 data)
+static void musb_default_writew(void __iomem *addr, u32 offset, u16 data)
 {
 	trace_musb_writew(__builtin_return_address(0), addr, offset, data);
 	__raw_writew(data, addr + offset);
 }
 
+static u16 musb_default_get_toggle(struct musb_qh *qh, int is_out)
+{
+	void __iomem *epio = qh->hw_ep->regs;
+	u16 csr;
+
+	if (is_out)
+		csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
+	else
+		csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
+
+	return csr;
+}
+
+static u16 musb_default_set_toggle(struct musb_qh *qh, int is_out,
+				   struct urb *urb)
+{
+	u16 csr;
+	u16 toggle;
+
+	toggle = usb_gettoggle(urb->dev, qh->epnum, is_out);
+
+	if (is_out)
+		csr = toggle ? (MUSB_TXCSR_H_WR_DATATOGGLE
+				| MUSB_TXCSR_H_DATATOGGLE)
+				: MUSB_TXCSR_CLRDATATOG;
+	else
+		csr = toggle ? (MUSB_RXCSR_H_WR_DATATOGGLE
+				| MUSB_RXCSR_H_DATATOGGLE) : 0;
+
+	return csr;
+}
+
 /*
  * Load an endpoint's FIFO
  */
@@ -364,19 +396,25 @@
 /*
  * Old style IO functions
  */
-u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
+u8 (*musb_readb)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readb);
 
-void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
+void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
 EXPORT_SYMBOL_GPL(musb_writeb);
 
-u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
+u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearb);
+
+u16 (*musb_readw)(void __iomem *addr, u32 offset);
 EXPORT_SYMBOL_GPL(musb_readw);
 
-void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
+void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
 EXPORT_SYMBOL_GPL(musb_writew);
 
-u32 musb_readl(const void __iomem *addr, unsigned offset)
+u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+EXPORT_SYMBOL_GPL(musb_clearw);
+
+u32 musb_readl(void __iomem *addr, u32 offset)
 {
 	u32 data = __raw_readl(addr + offset);
 
@@ -385,7 +423,7 @@
 }
 EXPORT_SYMBOL_GPL(musb_readl);
 
-void musb_writel(void __iomem *addr, unsigned offset, u32 data)
+void musb_writel(void __iomem *addr, u32 offset, u32 data)
 {
 	trace_musb_writel(__builtin_return_address(0), addr, offset, data);
 	__raw_writel(data, addr + offset);
@@ -1015,7 +1053,6 @@
 static void musb_disable_interrupts(struct musb *musb)
 {
 	void __iomem	*mbase = musb->mregs;
-	u16	temp;
 
 	/* disable interrupts */
 	musb_writeb(mbase, MUSB_INTRUSBE, 0);
@@ -1025,9 +1062,9 @@
 	musb_writew(mbase, MUSB_INTRRXE, 0);
 
 	/*  flush pending interrupts */
-	temp = musb_readb(mbase, MUSB_INTRUSB);
-	temp = musb_readw(mbase, MUSB_INTRTX);
-	temp = musb_readw(mbase, MUSB_INTRRX);
+	musb_clearb(mbase, MUSB_INTRUSB);
+	musb_clearw(mbase, MUSB_INTRTX);
+	musb_clearw(mbase, MUSB_INTRRX);
 }
 
 static void musb_enable_interrupts(struct musb *musb)
@@ -2260,10 +2297,19 @@
 		musb_readb = musb->ops->readb;
 	if (musb->ops->writeb)
 		musb_writeb = musb->ops->writeb;
+	if (musb->ops->clearb)
+		musb_clearb = musb->ops->clearb;
+	else
+		musb_clearb = musb_readb;
+
 	if (musb->ops->readw)
 		musb_readw = musb->ops->readw;
 	if (musb->ops->writew)
 		musb_writew = musb->ops->writew;
+	if (musb->ops->clearw)
+		musb_clearw = musb->ops->clearw;
+	else
+		musb_clearw = musb_readw;
 
 #ifndef CONFIG_MUSB_PIO_ONLY
 	if (!musb->ops->dma_init || !musb->ops->dma_exit) {
@@ -2285,6 +2331,16 @@
 	else
 		musb->io.write_fifo = musb_default_write_fifo;
 
+	if (musb->ops->get_toggle)
+		musb->io.get_toggle = musb->ops->get_toggle;
+	else
+		musb->io.get_toggle = musb_default_get_toggle;
+
+	if (musb->ops->set_toggle)
+		musb->io.set_toggle = musb->ops->set_toggle;
+	else
+		musb->io.set_toggle = musb_default_set_toggle;
+
 	if (!musb->xceiv->io_ops) {
 		musb->xceiv->io_dev = musb->controller;
 		musb->xceiv->io_priv = musb->mregs;
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 04203b7..6060a7c 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -27,6 +27,7 @@
 struct musb;
 struct musb_hw_ep;
 struct musb_ep;
+struct musb_qh;
 
 /* Helper defines for struct musb->hwvers */
 #define MUSB_HWVERS_MAJOR(x)	((x >> 10) & 0x1f)
@@ -119,10 +120,14 @@
  * @fifo_offset: returns the fifo offset
  * @readb:	read 8 bits
  * @writeb:	write 8 bits
+ * @clearb:	could be clear-on-readb or W1C
  * @readw:	read 16 bits
  * @writew:	write 16 bits
+ * @clearw:	could be clear-on-readw or W1C
  * @read_fifo:	reads the fifo
  * @write_fifo:	writes to fifo
+ * @get_toggle:	platform specific get toggle function
+ * @set_toggle:	platform specific set toggle function
  * @dma_init:	platform specific dma init function
  * @dma_exit:	platform specific dma exit function
  * @init:	turns on clocks, sets up platform-specific registers, etc
@@ -161,12 +166,16 @@
 	u16	fifo_mode;
 	u32	(*fifo_offset)(u8 epnum);
 	u32	(*busctl_offset)(u8 epnum, u16 offset);
-	u8	(*readb)(const void __iomem *addr, unsigned offset);
-	void	(*writeb)(void __iomem *addr, unsigned offset, u8 data);
-	u16	(*readw)(const void __iomem *addr, unsigned offset);
-	void	(*writew)(void __iomem *addr, unsigned offset, u16 data);
+	u8	(*readb)(void __iomem *addr, u32 offset);
+	void	(*writeb)(void __iomem *addr, u32 offset, u8 data);
+	u8	(*clearb)(void __iomem *addr, u32 offset);
+	u16	(*readw)(void __iomem *addr, u32 offset);
+	void	(*writew)(void __iomem *addr, u32 offset, u16 data);
+	u16	(*clearw)(void __iomem *addr, u32 offset);
 	void	(*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
 	void	(*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
+	u16	(*get_toggle)(struct musb_qh *qh, int is_out);
+	u16	(*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb);
 	struct dma_controller *
 		(*dma_init) (struct musb *musb, void __iomem *base);
 	void	(*dma_exit)(struct dma_controller *c);
diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h
index 8f60271..4b4d8dc 100644
--- a/drivers/usb/musb/musb_dma.h
+++ b/drivers/usb/musb/musb_dma.h
@@ -35,6 +35,12 @@
  *    whether shared with the Inventra core or separate.
  */
 
+#define MUSB_HSDMA_BASE		0x200
+#define MUSB_HSDMA_INTR		(MUSB_HSDMA_BASE + 0)
+#define MUSB_HSDMA_CONTROL	0x4
+#define MUSB_HSDMA_ADDRESS	0x8
+#define MUSB_HSDMA_COUNT	0xc
+
 #define	DMA_ADDR_INVALID	(~(dma_addr_t)0)
 
 #ifdef CONFIG_MUSB_PIO_ONLY
@@ -191,6 +197,9 @@
 extern struct dma_controller *
 musbhs_dma_controller_create(struct musb *musb, void __iomem *base);
 extern void musbhs_dma_controller_destroy(struct dma_controller *c);
+extern struct dma_controller *
+musbhs_dma_controller_create_noirq(struct musb *musb, void __iomem *base);
+extern irqreturn_t dma_controller_irq(int irq, void *private_data);
 
 extern struct dma_controller *
 tusb_dma_controller_create(struct musb *musb, void __iomem *base);
diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c
index fa9922c..5267ad2 100644
--- a/drivers/usb/musb/musb_host.c
+++ b/drivers/usb/musb/musb_host.c
@@ -286,26 +286,6 @@
 	spin_lock(&musb->lock);
 }
 
-/* For bulk/interrupt endpoints only */
-static inline void musb_save_toggle(struct musb_qh *qh, int is_in,
-				    struct urb *urb)
-{
-	void __iomem		*epio = qh->hw_ep->regs;
-	u16			csr;
-
-	/*
-	 * FIXME: the current Mentor DMA code seems to have
-	 * problems getting toggle correct.
-	 */
-
-	if (is_in)
-		csr = musb_readw(epio, MUSB_RXCSR) & MUSB_RXCSR_H_DATATOGGLE;
-	else
-		csr = musb_readw(epio, MUSB_TXCSR) & MUSB_TXCSR_H_DATATOGGLE;
-
-	usb_settoggle(urb->dev, qh->epnum, !is_in, csr ? 1 : 0);
-}
-
 /*
  * Advance this hardware endpoint's queue, completing the specified URB and
  * advancing to either the next URB queued to that qh, or else invalidating
@@ -320,6 +300,7 @@
 	struct musb_hw_ep	*ep = qh->hw_ep;
 	int			ready = qh->is_ready;
 	int			status;
+	u16			toggle;
 
 	status = (urb->status == -EINPROGRESS) ? 0 : urb->status;
 
@@ -327,7 +308,8 @@
 	switch (qh->type) {
 	case USB_ENDPOINT_XFER_BULK:
 	case USB_ENDPOINT_XFER_INT:
-		musb_save_toggle(qh, is_in, urb);
+		toggle = musb->io.get_toggle(qh, !is_in);
+		usb_settoggle(urb->dev, qh->epnum, !is_in, toggle ? 1 : 0);
 		break;
 	case USB_ENDPOINT_XFER_ISOC:
 		if (status == 0 && urb->error_count)
@@ -772,13 +754,8 @@
 					);
 			csr |= MUSB_TXCSR_MODE;
 
-			if (!hw_ep->tx_double_buffered) {
-				if (usb_gettoggle(urb->dev, qh->epnum, 1))
-					csr |= MUSB_TXCSR_H_WR_DATATOGGLE
-						| MUSB_TXCSR_H_DATATOGGLE;
-				else
-					csr |= MUSB_TXCSR_CLRDATATOG;
-			}
+			if (!hw_ep->tx_double_buffered)
+				csr |= musb->io.set_toggle(qh, is_out, urb);
 
 			musb_writew(epio, MUSB_TXCSR, csr);
 			/* REVISIT may need to clear FLUSHFIFO ... */
@@ -860,17 +837,12 @@
 
 	/* IN/receive */
 	} else {
-		u16	csr;
+		u16 csr = 0;
 
 		if (hw_ep->rx_reinit) {
 			musb_rx_reinit(musb, qh, epnum);
+			csr |= musb->io.set_toggle(qh, is_out, urb);
 
-			/* init new state: toggle and NYET, maybe DMA later */
-			if (usb_gettoggle(urb->dev, qh->epnum, 0))
-				csr = MUSB_RXCSR_H_WR_DATATOGGLE
-					| MUSB_RXCSR_H_DATATOGGLE;
-			else
-				csr = 0;
 			if (qh->type == USB_ENDPOINT_XFER_INT)
 				csr |= MUSB_RXCSR_DISNYET;
 
@@ -933,6 +905,7 @@
 	void __iomem		*epio = ep->regs;
 	struct musb_qh		*cur_qh, *next_qh;
 	u16			rx_csr, tx_csr;
+	u16			toggle;
 
 	musb_ep_select(mbase, ep->epnum);
 	if (is_in) {
@@ -970,7 +943,8 @@
 			urb->actual_length += dma->actual_len;
 			dma->actual_len = 0L;
 		}
-		musb_save_toggle(cur_qh, is_in, urb);
+		toggle = musb->io.get_toggle(cur_qh, !is_in);
+		usb_settoggle(urb->dev, cur_qh->epnum, !is_in, toggle ? 1 : 0);
 
 		if (is_in) {
 			/* move cur_qh to end of queue */
diff --git a/drivers/usb/musb/musb_io.h b/drivers/usb/musb/musb_io.h
index 8058a58..f17aabd 100644
--- a/drivers/usb/musb/musb_io.h
+++ b/drivers/usb/musb/musb_io.h
@@ -22,6 +22,8 @@
  * @read_fifo:	platform specific function to read fifo
  * @write_fifo:	platform specific function to write fifo
  * @busctl_offset: platform specific function to get busctl offset
+ * @get_toggle: platform specific function to get toggle
+ * @set_toggle: platform specific function to set toggle
  */
 struct musb_io {
 	u32	(*ep_offset)(u8 epnum, u16 offset);
@@ -30,14 +32,18 @@
 	void	(*read_fifo)(struct musb_hw_ep *hw_ep, u16 len, u8 *buf);
 	void	(*write_fifo)(struct musb_hw_ep *hw_ep, u16 len, const u8 *buf);
 	u32	(*busctl_offset)(u8 epnum, u16 offset);
+	u16	(*get_toggle)(struct musb_qh *qh, int is_out);
+	u16	(*set_toggle)(struct musb_qh *qh, int is_out, struct urb *urb);
 };
 
 /* Do not add new entries here, add them the struct musb_io instead */
-extern u8 (*musb_readb)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writeb)(void __iomem *addr, unsigned offset, u8 data);
-extern u16 (*musb_readw)(const void __iomem *addr, unsigned offset);
-extern void (*musb_writew)(void __iomem *addr, unsigned offset, u16 data);
-extern u32 musb_readl(const void __iomem *addr, unsigned offset);
-extern void musb_writel(void __iomem *addr, unsigned offset, u32 data);
+extern u8 (*musb_readb)(void __iomem *addr, u32 offset);
+extern void (*musb_writeb)(void __iomem *addr, u32 offset, u8 data);
+extern u8 (*musb_clearb)(void __iomem *addr, u32 offset);
+extern u16 (*musb_readw)(void __iomem *addr, u32 offset);
+extern void (*musb_writew)(void __iomem *addr, u32 offset, u16 data);
+extern u16 (*musb_clearw)(void __iomem *addr, u32 offset);
+extern u32 musb_readl(void __iomem *addr, u32 offset);
+extern void musb_writel(void __iomem *addr, u32 offset, u32 data);
 
 #endif
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 2d3751d..0aacfc8 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -10,12 +10,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 #include "musb_core.h"
-
-#define MUSB_HSDMA_BASE		0x200
-#define MUSB_HSDMA_INTR		(MUSB_HSDMA_BASE + 0)
-#define MUSB_HSDMA_CONTROL		0x4
-#define MUSB_HSDMA_ADDRESS		0x8
-#define MUSB_HSDMA_COUNT		0xc
+#include "musb_dma.h"
 
 #define MUSB_HSDMA_CHANNEL_OFFSET(_bchannel, _offset)		\
 		(MUSB_HSDMA_BASE + (_bchannel << 4) + _offset)
@@ -268,7 +263,7 @@
 	return 0;
 }
 
-static irqreturn_t dma_controller_irq(int irq, void *private_data)
+irqreturn_t dma_controller_irq(int irq, void *private_data)
 {
 	struct musb_dma_controller *controller = private_data;
 	struct musb *musb = controller->private_data;
@@ -289,7 +284,7 @@
 
 	spin_lock_irqsave(&musb->lock, flags);
 
-	int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
+	int_hsdma = musb_clearb(mbase, MUSB_HSDMA_INTR);
 
 	if (!int_hsdma) {
 		musb_dbg(musb, "spurious DMA irq");
@@ -383,6 +378,7 @@
 	spin_unlock_irqrestore(&musb->lock, flags);
 	return retval;
 }
+EXPORT_SYMBOL_GPL(dma_controller_irq);
 
 void musbhs_dma_controller_destroy(struct dma_controller *c)
 {
@@ -398,18 +394,10 @@
 }
 EXPORT_SYMBOL_GPL(musbhs_dma_controller_destroy);
 
-struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
-						    void __iomem *base)
+static struct musb_dma_controller *
+dma_controller_alloc(struct musb *musb, void __iomem *base)
 {
 	struct musb_dma_controller *controller;
-	struct device *dev = musb->controller;
-	struct platform_device *pdev = to_platform_device(dev);
-	int irq = platform_get_irq_byname(pdev, "dma");
-
-	if (irq <= 0) {
-		dev_err(dev, "No DMA interrupt line!\n");
-		return NULL;
-	}
 
 	controller = kzalloc(sizeof(*controller), GFP_KERNEL);
 	if (!controller)
@@ -423,6 +411,25 @@
 	controller->controller.channel_release = dma_channel_release;
 	controller->controller.channel_program = dma_channel_program;
 	controller->controller.channel_abort = dma_channel_abort;
+	return controller;
+}
+
+struct dma_controller *
+musbhs_dma_controller_create(struct musb *musb, void __iomem *base)
+{
+	struct musb_dma_controller *controller;
+	struct device *dev = musb->controller;
+	struct platform_device *pdev = to_platform_device(dev);
+	int irq = platform_get_irq_byname(pdev, "dma");
+
+	if (irq <= 0) {
+		dev_err(dev, "No DMA interrupt line!\n");
+		return NULL;
+	}
+
+	controller = dma_controller_alloc(musb, base);
+	if (!controller)
+		return NULL;
 
 	if (request_irq(irq, dma_controller_irq, 0,
 			dev_name(musb->controller), controller)) {
@@ -437,3 +444,16 @@
 	return &controller->controller;
 }
 EXPORT_SYMBOL_GPL(musbhs_dma_controller_create);
+
+struct dma_controller *
+musbhs_dma_controller_create_noirq(struct musb *musb, void __iomem *base)
+{
+	struct musb_dma_controller *controller;
+
+	controller = dma_controller_alloc(musb, base);
+	if (!controller)
+		return NULL;
+
+	return &controller->controller;
+}
+EXPORT_SYMBOL_GPL(musbhs_dma_controller_create_noirq);
diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
index 832a41f..e6b3d71 100644
--- a/drivers/usb/musb/sunxi.c
+++ b/drivers/usb/musb/sunxi.c
@@ -407,7 +407,7 @@
 	return SUNXI_MUSB_TXFUNCADDR + offset;
 }
 
-static u8 sunxi_musb_readb(const void __iomem *addr, unsigned offset)
+static u8 sunxi_musb_readb(void __iomem *addr, u32 offset)
 {
 	struct sunxi_glue *glue;
 
@@ -520,7 +520,7 @@
 		(int)(addr - sunxi_musb->mregs));
 }
 
-static u16 sunxi_musb_readw(const void __iomem *addr, unsigned offset)
+static u16 sunxi_musb_readw(void __iomem *addr, u32 offset)
 {
 	if (addr == sunxi_musb->mregs) {
 		/* generic control or fifo control reg access */
diff --git a/drivers/usb/musb/tusb6010.c b/drivers/usb/musb/tusb6010.c
index 902507d..94ea5e7 100644
--- a/drivers/usb/musb/tusb6010.c
+++ b/drivers/usb/musb/tusb6010.c
@@ -142,7 +142,7 @@
 /*
  * TUSB6010 doesn't allow 8-bit access; 16-bit access is the minimum.
  */
-static u8 tusb_readb(const void __iomem *addr, unsigned offset)
+static u8 tusb_readb(void __iomem *addr, u32 offset)
 {
 	u16 tmp;
 	u8 val;
diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
index 526509e..0539ce4 100644
--- a/drivers/usb/typec/class.c
+++ b/drivers/usb/typec/class.c
@@ -11,6 +11,7 @@
 #include <linux/mutex.h>
 #include <linux/property.h>
 #include <linux/slab.h>
+#include <linux/android_kabi.h>
 
 #include "bus.h"
 
@@ -18,6 +19,7 @@
 	struct device			dev;
 	enum typec_plug_index		index;
 	struct ida			mode_ids;
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct typec_cable {
@@ -25,6 +27,7 @@
 	enum typec_plug_type		type;
 	struct usb_pd_identity		*identity;
 	unsigned int			active:1;
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct typec_partner {
@@ -33,6 +36,7 @@
 	struct usb_pd_identity		*identity;
 	enum typec_accessory		accessory;
 	struct ida			mode_ids;
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct typec_port {
@@ -53,6 +57,8 @@
 	struct typec_mux		*mux;
 
 	const struct typec_capability	*cap;
+	const struct typec_operations   *ops;
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define to_typec_port(_dev_) container_of(_dev_, struct typec_port, dev)
@@ -957,7 +963,7 @@
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->try_role) {
+	if (!port->ops || !port->ops->try_role) {
 		dev_dbg(dev, "Setting preferred role not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -970,7 +976,7 @@
 			return -EINVAL;
 	}
 
-	ret = port->cap->try_role(port->cap, role);
+	ret = port->ops->try_role(port, role);
 	if (ret)
 		return ret;
 
@@ -1001,7 +1007,7 @@
 	struct typec_port *port = to_typec_port(dev);
 	int ret;
 
-	if (!port->cap->dr_set) {
+	if (!port->ops || !port->ops->dr_set) {
 		dev_dbg(dev, "data role swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1016,7 +1022,7 @@
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->dr_set(port->cap, ret);
+	ret = port->ops->dr_set(port, ret);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1051,7 +1057,7 @@
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->pr_set) {
+	if (!port->ops || !port->ops->pr_set) {
 		dev_dbg(dev, "power role swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1073,7 +1079,7 @@
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->pr_set(port->cap, ret);
+	ret = port->ops->pr_set(port, ret);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1104,7 +1110,8 @@
 	int ret;
 	enum typec_port_type type;
 
-	if (!port->cap->port_type_set || port->cap->type != TYPEC_PORT_DRP) {
+	if (port->cap->type != TYPEC_PORT_DRP ||
+	    !port->ops || !port->ops->port_type_set) {
 		dev_dbg(dev, "changing port type not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1121,7 +1128,7 @@
 		goto unlock_and_ret;
 	}
 
-	ret = port->cap->port_type_set(port->cap, type);
+	ret = port->ops->port_type_set(port, type);
 	if (ret)
 		goto unlock_and_ret;
 
@@ -1177,7 +1184,7 @@
 		return -EOPNOTSUPP;
 	}
 
-	if (!port->cap->vconn_set) {
+	if (!port->ops || !port->ops->vconn_set) {
 		dev_dbg(dev, "VCONN swapping not supported\n");
 		return -EOPNOTSUPP;
 	}
@@ -1186,7 +1193,7 @@
 	if (ret)
 		return ret;
 
-	ret = port->cap->vconn_set(port->cap, (enum typec_role)source);
+	ret = port->ops->vconn_set(port, (enum typec_role)source);
 	if (ret)
 		return ret;
 
@@ -1280,6 +1287,7 @@
 	ida_destroy(&port->mode_ids);
 	typec_switch_put(port->sw);
 	typec_mux_put(port->mux);
+	kfree(port->cap);
 	kfree(port);
 }
 
@@ -1489,6 +1497,16 @@
 /* --------------------------------------- */
 
 /**
+ * typec_get_drvdata - Return private driver data pointer
+ * @port: USB Type-C port
+ */
+void *typec_get_drvdata(struct typec_port *port)
+{
+	return dev_get_drvdata(&port->dev);
+}
+EXPORT_SYMBOL_GPL(typec_get_drvdata);
+
+/**
  * typec_port_register_altmode - Register USB Type-C Port Alternate Mode
  * @port: USB Type-C Port that supports the alternate mode
  * @desc: Description of the alternate mode
@@ -1581,7 +1599,7 @@
 	mutex_init(&port->port_type_lock);
 
 	port->id = id;
-	port->cap = cap;
+	port->ops = cap->ops;
 	port->port_type = cap->type;
 	port->prefer_role = cap->prefer_role;
 
@@ -1591,6 +1609,13 @@
 	port->dev.fwnode = cap->fwnode;
 	port->dev.type = &typec_port_dev_type;
 	dev_set_name(&port->dev, "port%d", id);
+	dev_set_drvdata(&port->dev, cap->driver_data);
+
+	port->cap = kmemdup(cap, sizeof(*cap), GFP_KERNEL);
+	if (!port->cap) {
+		put_device(&port->dev);
+		return ERR_PTR(-ENOMEM);
+	}
 
 	port->sw = typec_switch_get(&port->dev);
 	if (IS_ERR(port->sw)) {
diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c
index 1316464..ec7684c 100644
--- a/drivers/usb/typec/tcpm/tcpm.c
+++ b/drivers/usb/typec/tcpm/tcpm.c
@@ -408,12 +408,6 @@
 	return SRC_UNATTACHED;
 }
 
-static inline
-struct tcpm_port *typec_cap_to_tcpm(const struct typec_capability *cap)
-{
-	return container_of(cap, struct tcpm_port, typec_caps);
-}
-
 static bool tcpm_port_is_disconnected(struct tcpm_port *port)
 {
 	return (!port->attached && port->cc1 == TYPEC_CC_OPEN &&
@@ -4017,10 +4011,9 @@
 }
 EXPORT_SYMBOL_GPL(tcpm_pd_hard_reset);
 
-static int tcpm_dr_set(const struct typec_capability *cap,
-		       enum typec_data_role data)
+static int tcpm_dr_set(struct typec_port *p, enum typec_data_role data)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4085,10 +4078,9 @@
 	return ret;
 }
 
-static int tcpm_pr_set(const struct typec_capability *cap,
-		       enum typec_role role)
+static int tcpm_pr_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4129,10 +4121,9 @@
 	return ret;
 }
 
-static int tcpm_vconn_set(const struct typec_capability *cap,
-			  enum typec_role role)
+static int tcpm_vconn_set(struct typec_port *p, enum typec_role role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	int ret;
 
 	mutex_lock(&port->swap_lock);
@@ -4169,9 +4160,9 @@
 	return ret;
 }
 
-static int tcpm_try_role(const struct typec_capability *cap, int role)
+static int tcpm_try_role(struct typec_port *p, int role)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 	struct tcpc_dev	*tcpc = port->tcpc;
 	int ret = 0;
 
@@ -4378,10 +4369,9 @@
 	tcpm_set_state(port, PORT_RESET, 0);
 }
 
-static int tcpm_port_type_set(const struct typec_capability *cap,
-			      enum typec_port_type type)
+static int tcpm_port_type_set(struct typec_port *p, enum typec_port_type type)
 {
-	struct tcpm_port *port = typec_cap_to_tcpm(cap);
+	struct tcpm_port *port = typec_get_drvdata(p);
 
 	mutex_lock(&port->lock);
 	if (type == port->port_type)
@@ -4406,6 +4396,14 @@
 	return 0;
 }
 
+static const struct typec_operations tcpm_ops = {
+	.try_role = tcpm_try_role,
+	.dr_set = tcpm_dr_set,
+	.pr_set = tcpm_pr_set,
+	.vconn_set = tcpm_vconn_set,
+	.port_type_set = tcpm_port_type_set
+};
+
 void tcpm_tcpc_reset(struct tcpm_port *port)
 {
 	mutex_lock(&port->lock);
@@ -4819,11 +4817,8 @@
 	port->typec_caps.fwnode = tcpc->fwnode;
 	port->typec_caps.revision = 0x0120;	/* Type-C spec release 1.2 */
 	port->typec_caps.pd_revision = 0x0300;	/* USB-PD spec release 3.0 */
-	port->typec_caps.dr_set = tcpm_dr_set;
-	port->typec_caps.pr_set = tcpm_pr_set;
-	port->typec_caps.vconn_set = tcpm_vconn_set;
-	port->typec_caps.try_role = tcpm_try_role;
-	port->typec_caps.port_type_set = tcpm_port_type_set;
+	port->typec_caps.driver_data = port;
+	port->typec_caps.ops = &tcpm_ops;
 
 	port->partner_desc.identity = &port->partner_ident;
 	port->port_type = port->typec_caps.type;
diff --git a/drivers/usb/typec/tps6598x.c b/drivers/usb/typec/tps6598x.c
index 67bebee..aaf76de 100644
--- a/drivers/usb/typec/tps6598x.c
+++ b/drivers/usb/typec/tps6598x.c
@@ -94,7 +94,6 @@
 	struct typec_port *port;
 	struct typec_partner *partner;
 	struct usb_pd_identity partner_identity;
-	struct typec_capability typec_cap;
 };
 
 /*
@@ -307,11 +306,10 @@
 	return 0;
 }
 
-static int
-tps6598x_dr_set(const struct typec_capability *cap, enum typec_data_role role)
+static int tps6598x_dr_set(struct typec_port *port, enum typec_data_role role)
 {
-	struct tps6598x *tps = container_of(cap, struct tps6598x, typec_cap);
 	const char *cmd = (role == TYPEC_DEVICE) ? "SWUF" : "SWDF";
+	struct tps6598x *tps = typec_get_drvdata(port);
 	u32 status;
 	int ret;
 
@@ -338,11 +336,10 @@
 	return ret;
 }
 
-static int
-tps6598x_pr_set(const struct typec_capability *cap, enum typec_role role)
+static int tps6598x_pr_set(struct typec_port *port, enum typec_role role)
 {
-	struct tps6598x *tps = container_of(cap, struct tps6598x, typec_cap);
 	const char *cmd = (role == TYPEC_SINK) ? "SWSk" : "SWSr";
+	struct tps6598x *tps = typec_get_drvdata(port);
 	u32 status;
 	int ret;
 
@@ -369,6 +366,11 @@
 	return ret;
 }
 
+static const struct typec_operations tps6598x_ops = {
+	.dr_set = tps6598x_dr_set,
+	.pr_set = tps6598x_pr_set,
+};
+
 static irqreturn_t tps6598x_interrupt(int irq, void *data)
 {
 	struct tps6598x *tps = data;
@@ -448,6 +450,7 @@
 
 static int tps6598x_probe(struct i2c_client *client)
 {
+	struct typec_capability typec_cap = { };
 	struct tps6598x *tps;
 	u32 status;
 	u32 conf;
@@ -492,40 +495,40 @@
 	if (ret < 0)
 		return ret;
 
-	tps->typec_cap.revision = USB_TYPEC_REV_1_2;
-	tps->typec_cap.pd_revision = 0x200;
-	tps->typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
-	tps->typec_cap.pr_set = tps6598x_pr_set;
-	tps->typec_cap.dr_set = tps6598x_dr_set;
+	typec_cap.revision = USB_TYPEC_REV_1_2;
+	typec_cap.pd_revision = 0x200;
+	typec_cap.prefer_role = TYPEC_NO_PREFERRED_ROLE;
+	typec_cap.driver_data = tps;
+	typec_cap.ops = &tps6598x_ops;
 
 	switch (TPS_SYSCONF_PORTINFO(conf)) {
 	case TPS_PORTINFO_SINK_ACCESSORY:
 	case TPS_PORTINFO_SINK:
-		tps->typec_cap.type = TYPEC_PORT_SNK;
-		tps->typec_cap.data = TYPEC_PORT_UFP;
+		typec_cap.type = TYPEC_PORT_SNK;
+		typec_cap.data = TYPEC_PORT_UFP;
 		break;
 	case TPS_PORTINFO_DRP_UFP_DRD:
 	case TPS_PORTINFO_DRP_DFP_DRD:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_DRD;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_DRD;
 		break;
 	case TPS_PORTINFO_DRP_UFP:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_UFP;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_UFP;
 		break;
 	case TPS_PORTINFO_DRP_DFP:
-		tps->typec_cap.type = TYPEC_PORT_DRP;
-		tps->typec_cap.data = TYPEC_PORT_DFP;
+		typec_cap.type = TYPEC_PORT_DRP;
+		typec_cap.data = TYPEC_PORT_DFP;
 		break;
 	case TPS_PORTINFO_SOURCE:
-		tps->typec_cap.type = TYPEC_PORT_SRC;
-		tps->typec_cap.data = TYPEC_PORT_DFP;
+		typec_cap.type = TYPEC_PORT_SRC;
+		typec_cap.data = TYPEC_PORT_DFP;
 		break;
 	default:
 		return -ENODEV;
 	}
 
-	tps->port = typec_register_port(&client->dev, &tps->typec_cap);
+	tps->port = typec_register_port(&client->dev, &typec_cap);
 	if (IS_ERR(tps->port))
 		return PTR_ERR(tps->port);
 
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index f3934f2..a07332895 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -17,9 +17,6 @@
 #include "ucsi.h"
 #include "trace.h"
 
-#define to_ucsi_connector(_cap_) container_of(_cap_, struct ucsi_connector, \
-					      typec_cap)
-
 /*
  * UCSI_TIMEOUT_MS - PPM communication timeout
  *
@@ -723,10 +720,9 @@
 	return ret;
 }
 
-static int
-ucsi_dr_swap(const struct typec_capability *cap, enum typec_data_role role)
+static int ucsi_dr_swap(struct typec_port *port, enum typec_data_role role)
 {
-	struct ucsi_connector *con = to_ucsi_connector(cap);
+	struct ucsi_connector *con = typec_get_drvdata(port);
 	struct ucsi_control ctrl;
 	int ret = 0;
 
@@ -758,10 +754,9 @@
 	return ret < 0 ? ret : 0;
 }
 
-static int
-ucsi_pr_swap(const struct typec_capability *cap, enum typec_role role)
+static int ucsi_pr_swap(struct typec_port *port, enum typec_role role)
 {
-	struct ucsi_connector *con = to_ucsi_connector(cap);
+	struct ucsi_connector *con = typec_get_drvdata(port);
 	struct ucsi_control ctrl;
 	int ret = 0;
 
@@ -798,6 +793,11 @@
 	return ret;
 }
 
+static const struct typec_operations ucsi_ops = {
+	.dr_set = ucsi_dr_swap,
+	.pr_set = ucsi_pr_swap
+};
+
 static struct fwnode_handle *ucsi_find_fwnode(struct ucsi_connector *con)
 {
 	struct fwnode_handle *fwnode;
@@ -853,8 +853,8 @@
 		*accessory = TYPEC_ACCESSORY_DEBUG;
 
 	cap->fwnode = ucsi_find_fwnode(con);
-	cap->dr_set = ucsi_dr_swap;
-	cap->pr_set = ucsi_pr_swap;
+	cap->driver_data = con;
+	cap->ops = &ucsi_ops;
 
 	/* Register the connector */
 	con->port = typec_register_port(ucsi->dev, cap);
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 97be299..0167ba6 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -30,6 +30,7 @@
 #include <linux/sched/signal.h>
 #include <linux/interval_tree_generic.h>
 #include <linux/nospec.h>
+#include <linux/kcov.h>
 
 #include "vhost.h"
 
@@ -357,7 +358,9 @@
 		llist_for_each_entry_safe(work, work_next, node, node) {
 			clear_bit(VHOST_WORK_QUEUED, &work->flags);
 			__set_current_state(TASK_RUNNING);
+			kcov_remote_start_common(dev->kcov_handle);
 			work->fn(work);
+			kcov_remote_stop();
 			if (need_resched())
 				schedule();
 		}
@@ -546,6 +549,7 @@
 
 	/* No owner, become one */
 	dev->mm = get_task_mm(current);
+	dev->kcov_handle = kcov_common_handle();
 	worker = kthread_create(vhost_worker, dev, "vhost-%d", current->pid);
 	if (IS_ERR(worker)) {
 		err = PTR_ERR(worker);
@@ -571,6 +575,7 @@
 	if (dev->mm)
 		mmput(dev->mm);
 	dev->mm = NULL;
+	dev->kcov_handle = 0;
 err_mm:
 	return err;
 }
@@ -682,6 +687,7 @@
 	if (dev->worker) {
 		kthread_stop(dev->worker);
 		dev->worker = NULL;
+		dev->kcov_handle = 0;
 	}
 	if (dev->mm)
 		mmput(dev->mm);
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index e9ed272..a123fd7 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -173,6 +173,7 @@
 	int iov_limit;
 	int weight;
 	int byte_weight;
+	u64 kcov_handle;
 };
 
 bool vhost_exceeds_weight(struct vhost_virtqueue *vq, int pkts, int total_len);
diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
index 2bf7cb0..1952677 100644
--- a/drivers/vhost/vsock.c
+++ b/drivers/vhost/vsock.c
@@ -386,6 +386,8 @@
 
 static struct virtio_transport vhost_transport = {
 	.transport = {
+		.module                   = THIS_MODULE,
+
 		.get_local_cid            = vhost_transport_get_local_cid,
 
 		.init                     = virtio_transport_do_socket_init,
@@ -418,13 +420,8 @@
 		.notify_send_pre_block    = virtio_transport_notify_send_pre_block,
 		.notify_send_pre_enqueue  = virtio_transport_notify_send_pre_enqueue,
 		.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
+		.notify_buffer_size       = virtio_transport_notify_buffer_size,
 
-		.set_buffer_size          = virtio_transport_set_buffer_size,
-		.set_min_buffer_size      = virtio_transport_set_min_buffer_size,
-		.set_max_buffer_size      = virtio_transport_set_max_buffer_size,
-		.get_buffer_size          = virtio_transport_get_buffer_size,
-		.get_min_buffer_size      = virtio_transport_get_min_buffer_size,
-		.get_max_buffer_size      = virtio_transport_get_max_buffer_size,
 	},
 
 	.send_pkt = vhost_transport_send_pkt,
@@ -728,6 +725,12 @@
 	if (guest_cid > U32_MAX)
 		return -EINVAL;
 
+	/* Refuse if CID is assigned to the guest->host transport (i.e. nested
+	 * VM), to make the loopback work.
+	 */
+	if (vsock_find_cid(guest_cid))
+		return -EADDRINUSE;
+
 	/* Refuse if CID is already in use */
 	mutex_lock(&vhost_vsock_mutex);
 	other = vhost_vsock_get(guest_cid);
@@ -843,7 +846,8 @@
 {
 	int ret;
 
-	ret = vsock_core_init(&vhost_transport.transport);
+	ret = vsock_core_register(&vhost_transport.transport,
+				  VSOCK_TRANSPORT_F_H2G);
 	if (ret < 0)
 		return ret;
 	return misc_register(&vhost_vsock_misc);
@@ -852,7 +856,7 @@
 static void __exit vhost_vsock_exit(void)
 {
 	misc_deregister(&vhost_vsock_misc);
-	vsock_core_exit();
+	vsock_core_unregister(&vhost_transport.transport);
 };
 
 module_init(vhost_vsock_init);
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c
index 047f80e..118492b 100644
--- a/drivers/video/backlight/pwm_bl.c
+++ b/drivers/video/backlight/pwm_bl.c
@@ -618,7 +618,8 @@
 		pb->scale = data->max_brightness;
 	}
 
-	pb->lth_brightness = data->lth_brightness * (state.period / pb->scale);
+	pb->lth_brightness = data->lth_brightness * (div_u64(state.period,
+				pb->scale));
 
 	props.type = BACKLIGHT_RAW;
 	props.max_brightness = data->max_brightness;
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c
index 91627e7..6996eee 100644
--- a/drivers/virtio/virtio.c
+++ b/drivers/virtio/virtio.c
@@ -353,7 +353,6 @@
 	virtio_add_status(dev, VIRTIO_CONFIG_S_ACKNOWLEDGE);
 
 	INIT_LIST_HEAD(&dev->vqs);
-	spin_lock_init(&dev->vqs_list_lock);
 
 	/*
 	 * device_add() causes the bus infrastructure to look for a matching
diff --git a/drivers/virtio/virtio_input.c b/drivers/virtio/virtio_input.c
index 5ae5296..8a0b047 100644
--- a/drivers/virtio/virtio_input.c
+++ b/drivers/virtio/virtio_input.c
@@ -3,6 +3,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>
@@ -164,6 +165,15 @@
 	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) {
+		unsigned int slot_flags =
+			test_bit(INPUT_PROP_DIRECT, vi->idev->propbit) ?
+				INPUT_MT_DIRECT : 0;
+
+		input_mt_init_slots(vi->idev,
+				    ma, /* input max finger */
+				    slot_flags);
+	}
 }
 
 static int virtinput_init_vqs(struct virtio_input *vi)
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c
index deb72fd..a336f0a 100644
--- a/drivers/virtio/virtio_ring.c
+++ b/drivers/virtio/virtio_ring.c
@@ -1668,9 +1668,7 @@
 			cpu_to_le16(vq->packed.event_flags_shadow);
 	}
 
-	spin_lock(&vdev->vqs_list_lock);
 	list_add_tail(&vq->vq.list, &vdev->vqs);
-	spin_unlock(&vdev->vqs_list_lock);
 	return &vq->vq;
 
 err_desc_extra:
@@ -2128,9 +2126,7 @@
 	memset(vq->split.desc_state, 0, vring.num *
 			sizeof(struct vring_desc_state_split));
 
-	spin_lock(&vdev->vqs_list_lock);
 	list_add_tail(&vq->vq.list, &vdev->vqs);
-	spin_unlock(&vdev->vqs_list_lock);
 	return &vq->vq;
 }
 EXPORT_SYMBOL_GPL(__vring_new_virtqueue);
@@ -2214,9 +2210,7 @@
 	}
 	if (!vq->packed_ring)
 		kfree(vq->split.desc_state);
-	spin_lock(&vq->vq.vdev->vqs_list_lock);
 	list_del(&_vq->list);
-	spin_unlock(&vq->vq.vdev->vqs_list_lock);
 	kfree(vq);
 }
 EXPORT_SYMBOL_GPL(vring_del_virtqueue);
@@ -2280,14 +2274,12 @@
 {
 	struct virtqueue *_vq;
 
-	spin_lock(&dev->vqs_list_lock);
 	list_for_each_entry(_vq, &dev->vqs, list) {
 		struct vring_virtqueue *vq = to_vvq(_vq);
 
 		/* Pairs with READ_ONCE() in virtqueue_is_broken(). */
 		WRITE_ONCE(vq->broken, true);
 	}
-	spin_unlock(&dev->vqs_list_lock);
 }
 EXPORT_SYMBOL_GPL(virtio_break_device);
 
diff --git a/fs/9p/acl.c b/fs/9p/acl.c
index 6261719..cb14e8b 100644
--- a/fs/9p/acl.c
+++ b/fs/9p/acl.c
@@ -214,7 +214,8 @@
 
 static int v9fs_xattr_get_acl(const struct xattr_handler *handler,
 			      struct dentry *dentry, struct inode *inode,
-			      const char *name, void *buffer, size_t size)
+			      const char *name, void *buffer, size_t size,
+			      int flags)
 {
 	struct v9fs_session_info *v9ses;
 	struct posix_acl *acl;
diff --git a/fs/9p/xattr.c b/fs/9p/xattr.c
index ac8ff8c..5cfa772 100644
--- a/fs/9p/xattr.c
+++ b/fs/9p/xattr.c
@@ -139,7 +139,8 @@
 
 static int v9fs_xattr_handler_get(const struct xattr_handler *handler,
 				  struct dentry *dentry, struct inode *inode,
-				  const char *name, void *buffer, size_t size)
+				  const char *name, void *buffer, size_t size,
+				  int flags)
 {
 	const char *full_name = xattr_full_name(handler, name);
 
diff --git a/fs/Kconfig b/fs/Kconfig
index 2501e6f..1c3298e4 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
@@ -121,6 +121,7 @@
 source "fs/autofs/Kconfig"
 source "fs/fuse/Kconfig"
 source "fs/overlayfs/Kconfig"
+source "fs/incfs/Kconfig"
 
 menu "Caches"
 
diff --git a/fs/Makefile b/fs/Makefile
index 14231b4..3d717a6 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -111,6 +111,7 @@
 obj-$(CONFIG_FUSE_FS)		+= fuse/
 obj-$(CONFIG_OVERLAY_FS)	+= overlayfs/
 obj-$(CONFIG_ORANGEFS_FS)       += orangefs/
+obj-$(CONFIG_INCREMENTAL_FS)	+= incfs/
 obj-$(CONFIG_UDF_FS)		+= udf/
 obj-$(CONFIG_SUN_OPENPROMFS)	+= openpromfs/
 obj-$(CONFIG_OMFS_FS)		+= omfs/
diff --git a/fs/OWNERS b/fs/OWNERS
new file mode 100644
index 0000000..a838344
--- /dev/null
+++ b/fs/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/fs/OWNERS
diff --git a/fs/afs/xattr.c b/fs/afs/xattr.c
index 13292d4..e74342e 100644
--- a/fs/afs/xattr.c
+++ b/fs/afs/xattr.c
@@ -17,7 +17,7 @@
 static int afs_xattr_get_acl(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_fs_cursor fc;
 	struct afs_status_cb *scb;
@@ -140,7 +140,7 @@
 static int afs_xattr_get_yfs(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_fs_cursor fc;
 	struct afs_status_cb *scb;
@@ -205,11 +205,11 @@
 		break;
 	case 1:
 		data = buf;
-		dsize = snprintf(buf, sizeof(buf), "%u", yacl->inherit_flag);
+		dsize = scnprintf(buf, sizeof(buf), "%u", yacl->inherit_flag);
 		break;
 	case 2:
 		data = buf;
-		dsize = snprintf(buf, sizeof(buf), "%u", yacl->num_cleaned);
+		dsize = scnprintf(buf, sizeof(buf), "%u", yacl->num_cleaned);
 		break;
 	case 3:
 		data = yacl->vol_acl->data;
@@ -311,7 +311,7 @@
 static int afs_xattr_get_cell(const struct xattr_handler *handler,
 			      struct dentry *dentry,
 			      struct inode *inode, const char *name,
-			      void *buffer, size_t size)
+			      void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	struct afs_cell *cell = vnode->volume->cell;
@@ -338,7 +338,7 @@
 static int afs_xattr_get_fid(const struct xattr_handler *handler,
 			     struct dentry *dentry,
 			     struct inode *inode, const char *name,
-			     void *buffer, size_t size)
+			     void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	char text[16 + 1 + 24 + 1 + 8 + 1];
@@ -347,13 +347,15 @@
 	/* The volume ID is 64-bit, the vnode ID is 96-bit and the
 	 * uniquifier is 32-bit.
 	 */
-	len = sprintf(text, "%llx:", vnode->fid.vid);
+	len = scnprintf(text, sizeof(text), "%llx:", vnode->fid.vid);
 	if (vnode->fid.vnode_hi)
-		len += sprintf(text + len, "%x%016llx",
-			       vnode->fid.vnode_hi, vnode->fid.vnode);
+		len += scnprintf(text + len, sizeof(text) - len, "%x%016llx",
+				vnode->fid.vnode_hi, vnode->fid.vnode);
 	else
-		len += sprintf(text + len, "%llx", vnode->fid.vnode);
-	len += sprintf(text + len, ":%x", vnode->fid.unique);
+		len += scnprintf(text + len, sizeof(text) - len, "%llx",
+				 vnode->fid.vnode);
+	len += scnprintf(text + len, sizeof(text) - len, ":%x",
+			 vnode->fid.unique);
 
 	if (size == 0)
 		return len;
@@ -374,7 +376,7 @@
 static int afs_xattr_get_volume(const struct xattr_handler *handler,
 			      struct dentry *dentry,
 			      struct inode *inode, const char *name,
-			      void *buffer, size_t size)
+			      void *buffer, size_t size, int flags)
 {
 	struct afs_vnode *vnode = AFS_FS_I(inode);
 	const char *volname = vnode->volume->name;
diff --git a/fs/anon_inodes.c b/fs/anon_inodes.c
index 8971430..a280156 100644
--- a/fs/anon_inodes.c
+++ b/fs/anon_inodes.c
@@ -55,6 +55,75 @@
 	.kill_sb	= kill_anon_super,
 };
 
+static struct inode *anon_inode_make_secure_inode(
+	const char *name,
+	const struct inode *context_inode)
+{
+	struct inode *inode;
+	const struct qstr qname = QSTR_INIT(name, strlen(name));
+	int error;
+
+	inode = alloc_anon_inode(anon_inode_mnt->mnt_sb);
+	if (IS_ERR(inode))
+		return inode;
+	inode->i_flags &= ~S_PRIVATE;
+	error =	security_inode_init_security_anon(inode, &qname, context_inode);
+	if (error) {
+		iput(inode);
+		return ERR_PTR(error);
+	}
+	return inode;
+}
+
+static struct file *__anon_inode_getfile(const char *name,
+					 const struct file_operations *fops,
+					 void *priv, int flags,
+					 const struct inode *context_inode,
+					 bool secure)
+{
+	struct inode *inode;
+	struct file *file;
+
+	if (fops->owner && !try_module_get(fops->owner))
+		return ERR_PTR(-ENOENT);
+
+	if (secure) {
+		inode =	anon_inode_make_secure_inode(name, context_inode);
+		if (IS_ERR(inode)) {
+			file = ERR_CAST(inode);
+			goto err;
+		}
+	} else {
+		inode =	anon_inode_inode;
+		if (IS_ERR(inode)) {
+			file = ERR_PTR(-ENODEV);
+			goto err;
+		}
+		/*
+		 * We know the anon_inode inode count is always
+		 * greater than zero, so ihold() is safe.
+		 */
+		ihold(inode);
+	}
+
+	file = alloc_file_pseudo(inode, anon_inode_mnt, name,
+				 flags & (O_ACCMODE | O_NONBLOCK), fops);
+	if (IS_ERR(file))
+		goto err_iput;
+
+	file->f_mapping = inode->i_mapping;
+
+	file->private_data = priv;
+
+	return file;
+
+err_iput:
+	iput(inode);
+err:
+	module_put(fops->owner);
+	return file;
+}
+
 /**
  * anon_inode_getfile - creates a new file instance by hooking it up to an
  *                      anonymous inode, and a dentry that describe the "class"
@@ -75,55 +144,15 @@
 				const struct file_operations *fops,
 				void *priv, int flags)
 {
-	struct file *file;
-
-	if (IS_ERR(anon_inode_inode))
-		return ERR_PTR(-ENODEV);
-
-	if (fops->owner && !try_module_get(fops->owner))
-		return ERR_PTR(-ENOENT);
-
-	/*
-	 * We know the anon_inode inode count is always greater than zero,
-	 * so ihold() is safe.
-	 */
-	ihold(anon_inode_inode);
-	file = alloc_file_pseudo(anon_inode_inode, anon_inode_mnt, name,
-				 flags & (O_ACCMODE | O_NONBLOCK), fops);
-	if (IS_ERR(file))
-		goto err;
-
-	file->f_mapping = anon_inode_inode->i_mapping;
-
-	file->private_data = priv;
-
-	return file;
-
-err:
-	iput(anon_inode_inode);
-	module_put(fops->owner);
-	return file;
+	return __anon_inode_getfile(name, fops, priv, flags, NULL, false);
 }
 EXPORT_SYMBOL_GPL(anon_inode_getfile);
 
-/**
- * anon_inode_getfd - creates a new file instance by hooking it up to an
- *                    anonymous inode, and a dentry that describe the "class"
- *                    of the file
- *
- * @name:    [in]    name of the "class" of the new file
- * @fops:    [in]    file operations for the new file
- * @priv:    [in]    private data for the new file (will be file's private_data)
- * @flags:   [in]    flags
- *
- * Creates a new file by hooking it on a single inode. This is useful for files
- * that do not need to have a full-fledged inode in order to operate correctly.
- * All the files created with anon_inode_getfd() will share a single inode,
- * hence saving memory and avoiding code duplication for the file/inode/dentry
- * setup.  Returns new descriptor or an error code.
- */
-int anon_inode_getfd(const char *name, const struct file_operations *fops,
-		     void *priv, int flags)
+static int __anon_inode_getfd(const char *name,
+			      const struct file_operations *fops,
+			      void *priv, int flags,
+			      const struct inode *context_inode,
+			      bool secure)
 {
 	int error, fd;
 	struct file *file;
@@ -133,7 +162,8 @@
 		return error;
 	fd = error;
 
-	file = anon_inode_getfile(name, fops, priv, flags);
+	file = __anon_inode_getfile(name, fops, priv, flags, context_inode,
+				    secure);
 	if (IS_ERR(file)) {
 		error = PTR_ERR(file);
 		goto err_put_unused_fd;
@@ -146,8 +176,55 @@
 	put_unused_fd(fd);
 	return error;
 }
+
+/**
+ * anon_inode_getfd - creates a new file instance by hooking it up to
+ *                    an anonymous inode and a dentry that describe
+ *                    the "class" of the file
+ *
+ * @name:    [in]    name of the "class" of the new file
+ * @fops:    [in]    file operations for the new file
+ * @priv:    [in]    private data for the new file (will be file's private_data)
+ * @flags:   [in]    flags
+ *
+ * Creates a new file by hooking it on a single inode. This is
+ * useful for files that do not need to have a full-fledged inode in
+ * order to operate correctly.  All the files created with
+ * anon_inode_getfd() will use the same singleton inode, reducing
+ * memory use and avoiding code duplication for the file/inode/dentry
+ * setup.  Returns a newly created file descriptor or an error code.
+ */
+int anon_inode_getfd(const char *name, const struct file_operations *fops,
+		     void *priv, int flags)
+{
+	return __anon_inode_getfd(name, fops, priv, flags, NULL, false);
+}
 EXPORT_SYMBOL_GPL(anon_inode_getfd);
 
+/**
+ * anon_inode_getfd_secure - Like anon_inode_getfd(), but creates a new
+ * !S_PRIVATE anon inode rather than reuse the singleton anon inode, and calls
+ * the inode_init_security_anon() LSM hook. This allows the inode to have its
+ * own security context and for a LSM to reject creation of the inode.
+ *
+ * @name:    [in]    name of the "class" of the new file
+ * @fops:    [in]    file operations for the new file
+ * @priv:    [in]    private data for the new file (will be file's private_data)
+ * @flags:   [in]    flags
+ * @context_inode:
+ *           [in]    the logical relationship with the new inode (optional)
+ *
+ * The LSM may use @context_inode in inode_init_security_anon(), but a
+ * reference to it is not held.
+ */
+int anon_inode_getfd_secure(const char *name, const struct file_operations *fops,
+			    void *priv, int flags,
+			    const struct inode *context_inode)
+{
+	return __anon_inode_getfd(name, fops, priv, flags, context_inode, true);
+}
+EXPORT_SYMBOL_GPL(anon_inode_getfd_secure);
+
 static int __init anon_inode_init(void)
 {
 	anon_inode_mnt = kern_mount(&anon_inode_fs_type);
diff --git a/fs/btrfs/xattr.c b/fs/btrfs/xattr.c
index 4885851..c359e38 100644
--- a/fs/btrfs/xattr.c
+++ b/fs/btrfs/xattr.c
@@ -376,7 +376,8 @@
 
 static int btrfs_xattr_handler_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	name = xattr_full_name(handler, name);
 	return btrfs_getxattr(inode, name, buffer, size);
diff --git a/fs/buffer.c b/fs/buffer.c
index 0d7bd77..eefc907 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -47,6 +47,7 @@
 #include <linux/pagevec.h>
 #include <linux/sched/mm.h>
 #include <trace/events/block.h>
+#include <linux/fscrypt.h>
 
 static int fsync_buffers_list(spinlock_t *lock, struct list_head *list);
 static int submit_bh_wbc(int op, int op_flags, struct buffer_head *bh,
@@ -3040,6 +3041,8 @@
 	 */
 	bio = bio_alloc(GFP_NOIO, 1);
 
+	fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
+
 	bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
 	bio_set_dev(bio, bh->b_bdev);
 	bio->bi_write_hint = write_hint;
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index cb18ee6..a789f1e 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -1153,7 +1153,8 @@
 
 static int ceph_get_xattr_handler(const struct xattr_handler *handler,
 				  struct dentry *dentry, struct inode *inode,
-				  const char *name, void *value, size_t size)
+				  const char *name, void *value, size_t size,
+				  int flags)
 {
 	if (!ceph_is_valid_xattr(name))
 		return -EOPNOTSUPP;
diff --git a/fs/cifs/xattr.c b/fs/cifs/xattr.c
index db4ba8f..e44e562 100644
--- a/fs/cifs/xattr.c
+++ b/fs/cifs/xattr.c
@@ -199,7 +199,7 @@
 
 static int cifs_xattr_get(const struct xattr_handler *handler,
 			  struct dentry *dentry, struct inode *inode,
-			  const char *name, void *value, size_t size)
+			  const char *name, void *value, size_t size, int flags)
 {
 	ssize_t rc = -EOPNOTSUPP;
 	unsigned int xid;
diff --git a/fs/crypto/Kconfig b/fs/crypto/Kconfig
index ff5a174..c9507eb 100644
--- a/fs/crypto/Kconfig
+++ b/fs/crypto/Kconfig
@@ -2,13 +2,9 @@
 config FS_ENCRYPTION
 	bool "FS Encryption (Per-file encryption)"
 	select CRYPTO
-	select CRYPTO_AES
-	select CRYPTO_CBC
-	select CRYPTO_ECB
-	select CRYPTO_XTS
-	select CRYPTO_CTS
-	select CRYPTO_SHA512
-	select CRYPTO_HMAC
+	select CRYPTO_HASH
+	select CRYPTO_BLKCIPHER
+	select CRYPTO_LIB_SHA256
 	select KEYS
 	help
 	  Enable encryption of files and directories.  This
@@ -16,3 +12,35 @@
 	  efficient since it avoids caching the encrypted and
 	  decrypted pages in the page cache.  Currently Ext4,
 	  F2FS and UBIFS make use of this feature.
+
+# Filesystems supporting encryption must select this if FS_ENCRYPTION.  This
+# allows the algorithms to be built as modules when all the filesystems are,
+# whereas selecting them from FS_ENCRYPTION would force them to be built-in.
+#
+# Note: this option only pulls in the algorithms that filesystem encryption
+# needs "by default".  If userspace will use "non-default" encryption modes such
+# as Adiantum encryption, then those other modes need to be explicitly enabled
+# in the crypto API; see Documentation/filesystems/fscrypt.rst for details.
+#
+# Also note that this option only pulls in the generic implementations of the
+# algorithms, not any per-architecture optimized implementations.  It is
+# strongly recommended to enable optimized implementations too.  It is safe to
+# disable these generic implementations if corresponding optimized
+# implementations will always be available too; for this reason, these are soft
+# dependencies ('imply' rather than 'select').  Only disable these generic
+# implementations if you're sure they will never be needed, though.
+config FS_ENCRYPTION_ALGS
+	tristate
+	imply CRYPTO_AES
+	imply CRYPTO_CBC
+	imply CRYPTO_CTS
+	imply CRYPTO_ECB
+	imply CRYPTO_HMAC
+	imply CRYPTO_SHA512
+	imply CRYPTO_XTS
+
+config FS_ENCRYPTION_INLINE_CRYPT
+	bool "Enable fscrypt to use inline crypto"
+	depends on FS_ENCRYPTION && BLK_INLINE_ENCRYPTION
+	help
+	  Enable fscrypt to use inline encryption hardware if available.
diff --git a/fs/crypto/Makefile b/fs/crypto/Makefile
index 232e2bb..652c718 100644
--- a/fs/crypto/Makefile
+++ b/fs/crypto/Makefile
@@ -11,3 +11,4 @@
 	      policy.o
 
 fscrypto-$(CONFIG_BLOCK) += bio.o
+fscrypto-$(CONFIG_FS_ENCRYPTION_INLINE_CRYPT) += inline_crypt.o
diff --git a/fs/crypto/bio.c b/fs/crypto/bio.c
index 82da251..b048a0e 100644
--- a/fs/crypto/bio.c
+++ b/fs/crypto/bio.c
@@ -26,7 +26,7 @@
 #include <linux/namei.h>
 #include "fscrypt_private.h"
 
-static void __fscrypt_decrypt_bio(struct bio *bio, bool done)
+void fscrypt_decrypt_bio(struct bio *bio)
 {
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
@@ -37,84 +37,156 @@
 							   bv->bv_offset);
 		if (ret)
 			SetPageError(page);
-		else if (done)
-			SetPageUptodate(page);
-		if (done)
-			unlock_page(page);
 	}
 }
-
-void fscrypt_decrypt_bio(struct bio *bio)
-{
-	__fscrypt_decrypt_bio(bio, false);
-}
 EXPORT_SYMBOL(fscrypt_decrypt_bio);
 
-static void completion_pages(struct work_struct *work)
+static int fscrypt_zeroout_range_inline_crypt(const struct inode *inode,
+					      pgoff_t lblk, sector_t pblk,
+					      unsigned int len)
 {
-	struct fscrypt_ctx *ctx = container_of(work, struct fscrypt_ctx, work);
-	struct bio *bio = ctx->bio;
+	const unsigned int blockbits = inode->i_blkbits;
+	const unsigned int blocks_per_page = 1 << (PAGE_SHIFT - blockbits);
+	struct bio *bio;
+	int ret, err = 0;
+	int num_pages = 0;
 
-	__fscrypt_decrypt_bio(bio, true);
-	fscrypt_release_ctx(ctx);
+	/* This always succeeds since __GFP_DIRECT_RECLAIM is set. */
+	bio = bio_alloc(GFP_NOFS, BIO_MAX_PAGES);
+
+	while (len) {
+		unsigned int blocks_this_page = min(len, blocks_per_page);
+		unsigned int bytes_this_page = blocks_this_page << blockbits;
+
+		if (num_pages == 0) {
+			fscrypt_set_bio_crypt_ctx(bio, inode, lblk, GFP_NOFS);
+			bio_set_dev(bio, inode->i_sb->s_bdev);
+			bio->bi_iter.bi_sector =
+					pblk << (blockbits - SECTOR_SHIFT);
+			bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
+		}
+		ret = bio_add_page(bio, ZERO_PAGE(0), bytes_this_page, 0);
+		if (WARN_ON(ret != bytes_this_page)) {
+			err = -EIO;
+			goto out;
+		}
+		num_pages++;
+		len -= blocks_this_page;
+		lblk += blocks_this_page;
+		pblk += blocks_this_page;
+		if (num_pages == BIO_MAX_PAGES || !len ||
+		    !fscrypt_mergeable_bio(bio, inode, lblk)) {
+			err = submit_bio_wait(bio);
+			if (err)
+				goto out;
+			bio_reset(bio);
+			num_pages = 0;
+		}
+	}
+out:
 	bio_put(bio);
+	return err;
 }
 
-void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx, struct bio *bio)
-{
-	INIT_WORK(&ctx->work, completion_pages);
-	ctx->bio = bio;
-	fscrypt_enqueue_decrypt_work(&ctx->work);
-}
-EXPORT_SYMBOL(fscrypt_enqueue_decrypt_bio);
-
+/**
+ * fscrypt_zeroout_range() - zero out a range of blocks in an encrypted file
+ * @inode: the file's inode
+ * @lblk: the first file logical block to zero out
+ * @pblk: the first filesystem physical block to zero out
+ * @len: number of blocks to zero out
+ *
+ * Zero out filesystem blocks in an encrypted regular file on-disk, i.e. write
+ * ciphertext blocks which decrypt to the all-zeroes block.  The blocks must be
+ * both logically and physically contiguous.  It's also assumed that the
+ * filesystem only uses a single block device, ->s_bdev.
+ *
+ * Note that since each block uses a different IV, this involves writing a
+ * different ciphertext to each block; we can't simply reuse the same one.
+ *
+ * Return: 0 on success; -errno on failure.
+ */
 int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
-				sector_t pblk, unsigned int len)
+			  sector_t pblk, unsigned int len)
 {
 	const unsigned int blockbits = inode->i_blkbits;
 	const unsigned int blocksize = 1 << blockbits;
-	struct page *ciphertext_page;
+	const unsigned int blocks_per_page_bits = PAGE_SHIFT - blockbits;
+	const unsigned int blocks_per_page = 1 << blocks_per_page_bits;
+	struct page *pages[16]; /* write up to 16 pages at a time */
+	unsigned int nr_pages;
+	unsigned int i;
+	unsigned int offset;
 	struct bio *bio;
-	int ret, err = 0;
+	int ret, err;
 
-	ciphertext_page = fscrypt_alloc_bounce_page(GFP_NOWAIT);
-	if (!ciphertext_page)
-		return -ENOMEM;
+	if (len == 0)
+		return 0;
 
-	while (len--) {
-		err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk,
-					  ZERO_PAGE(0), ciphertext_page,
-					  blocksize, 0, GFP_NOFS);
-		if (err)
-			goto errout;
+	if (fscrypt_inode_uses_inline_crypto(inode))
+		return fscrypt_zeroout_range_inline_crypt(inode, lblk, pblk,
+							  len);
 
-		bio = bio_alloc(GFP_NOWAIT, 1);
-		if (!bio) {
-			err = -ENOMEM;
-			goto errout;
-		}
+	BUILD_BUG_ON(ARRAY_SIZE(pages) > BIO_MAX_PAGES);
+	nr_pages = min_t(unsigned int, ARRAY_SIZE(pages),
+			 (len + blocks_per_page - 1) >> blocks_per_page_bits);
+
+	/*
+	 * We need at least one page for ciphertext.  Allocate the first one
+	 * from a mempool, with __GFP_DIRECT_RECLAIM set so that it can't fail.
+	 *
+	 * Any additional page allocations are allowed to fail, as they only
+	 * help performance, and waiting on the mempool for them could deadlock.
+	 */
+	for (i = 0; i < nr_pages; i++) {
+		pages[i] = fscrypt_alloc_bounce_page(i == 0 ? GFP_NOFS :
+						     GFP_NOWAIT | __GFP_NOWARN);
+		if (!pages[i])
+			break;
+	}
+	nr_pages = i;
+	if (WARN_ON(nr_pages <= 0))
+		return -EINVAL;
+
+	/* This always succeeds since __GFP_DIRECT_RECLAIM is set. */
+	bio = bio_alloc(GFP_NOFS, nr_pages);
+
+	do {
 		bio_set_dev(bio, inode->i_sb->s_bdev);
 		bio->bi_iter.bi_sector = pblk << (blockbits - 9);
 		bio_set_op_attrs(bio, REQ_OP_WRITE, 0);
-		ret = bio_add_page(bio, ciphertext_page, blocksize, 0);
-		if (WARN_ON(ret != blocksize)) {
-			/* should never happen! */
-			bio_put(bio);
-			err = -EIO;
-			goto errout;
-		}
+
+		i = 0;
+		offset = 0;
+		do {
+			err = fscrypt_crypt_block(inode, FS_ENCRYPT, lblk,
+						  ZERO_PAGE(0), pages[i],
+						  blocksize, offset, GFP_NOFS);
+			if (err)
+				goto out;
+			lblk++;
+			pblk++;
+			len--;
+			offset += blocksize;
+			if (offset == PAGE_SIZE || len == 0) {
+				ret = bio_add_page(bio, pages[i++], offset, 0);
+				if (WARN_ON(ret != offset)) {
+					err = -EIO;
+					goto out;
+				}
+				offset = 0;
+			}
+		} while (i != nr_pages && len != 0);
+
 		err = submit_bio_wait(bio);
-		if (err == 0 && bio->bi_status)
-			err = -EIO;
-		bio_put(bio);
 		if (err)
-			goto errout;
-		lblk++;
-		pblk++;
-	}
+			goto out;
+		bio_reset(bio);
+	} while (len != 0);
 	err = 0;
-errout:
-	fscrypt_free_bounce_page(ciphertext_page);
+out:
+	bio_put(bio);
+	for (i = 0; i < nr_pages; i++)
+		fscrypt_free_bounce_page(pages[i]);
 	return err;
 }
 EXPORT_SYMBOL(fscrypt_zeroout_range);
diff --git a/fs/crypto/crypto.c b/fs/crypto/crypto.c
index 32a7ad0..4fcca79f 100644
--- a/fs/crypto/crypto.c
+++ b/fs/crypto/crypto.c
@@ -25,31 +25,20 @@
 #include <linux/module.h>
 #include <linux/scatterlist.h>
 #include <linux/ratelimit.h>
-#include <linux/dcache.h>
-#include <linux/namei.h>
-#include <crypto/aes.h>
 #include <crypto/skcipher.h>
 #include "fscrypt_private.h"
 
 static unsigned int num_prealloc_crypto_pages = 32;
-static unsigned int num_prealloc_crypto_ctxs = 128;
 
 module_param(num_prealloc_crypto_pages, uint, 0444);
 MODULE_PARM_DESC(num_prealloc_crypto_pages,
 		"Number of crypto pages to preallocate");
-module_param(num_prealloc_crypto_ctxs, uint, 0444);
-MODULE_PARM_DESC(num_prealloc_crypto_ctxs,
-		"Number of crypto contexts to preallocate");
 
 static mempool_t *fscrypt_bounce_page_pool = NULL;
 
-static LIST_HEAD(fscrypt_free_ctxs);
-static DEFINE_SPINLOCK(fscrypt_ctx_lock);
-
 static struct workqueue_struct *fscrypt_read_workqueue;
 static DEFINE_MUTEX(fscrypt_init_mutex);
 
-static struct kmem_cache *fscrypt_ctx_cachep;
 struct kmem_cache *fscrypt_info_cachep;
 
 void fscrypt_enqueue_decrypt_work(struct work_struct *work)
@@ -58,62 +47,6 @@
 }
 EXPORT_SYMBOL(fscrypt_enqueue_decrypt_work);
 
-/**
- * fscrypt_release_ctx() - Release a decryption context
- * @ctx: The decryption context to release.
- *
- * 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_REQUIRES_FREE_ENCRYPT_FL) {
-		kmem_cache_free(fscrypt_ctx_cachep, ctx);
-	} else {
-		spin_lock_irqsave(&fscrypt_ctx_lock, flags);
-		list_add(&ctx->free_list, &fscrypt_free_ctxs);
-		spin_unlock_irqrestore(&fscrypt_ctx_lock, flags);
-	}
-}
-EXPORT_SYMBOL(fscrypt_release_ctx);
-
-/**
- * fscrypt_get_ctx() - Get a decryption context
- * @gfp_flags:   The gfp flag for memory allocation
- *
- * Allocate and initialize a decryption context.
- *
- * Return: A new decryption context on success; an ERR_PTR() otherwise.
- */
-struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
-{
-	struct fscrypt_ctx *ctx;
-	unsigned long flags;
-
-	/*
-	 * 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,
-					struct fscrypt_ctx, free_list);
-	if (ctx)
-		list_del(&ctx->free_list);
-	spin_unlock_irqrestore(&fscrypt_ctx_lock, flags);
-	if (!ctx) {
-		ctx = kmem_cache_zalloc(fscrypt_ctx_cachep, gfp_flags);
-		if (!ctx)
-			return ERR_PTR(-ENOMEM);
-		ctx->flags |= FS_CTX_REQUIRES_FREE_ENCRYPT_FL;
-	} else {
-		ctx->flags &= ~FS_CTX_REQUIRES_FREE_ENCRYPT_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);
@@ -121,6 +54,7 @@
 
 /**
  * fscrypt_free_bounce_page() - free a ciphertext bounce page
+ * @bounce_page: the bounce page to free, or NULL
  *
  * Free a bounce page that was allocated by fscrypt_encrypt_pagecache_blocks(),
  * or by fscrypt_alloc_bounce_page() directly.
@@ -135,17 +69,32 @@
 }
 EXPORT_SYMBOL(fscrypt_free_bounce_page);
 
+/*
+ * Generate the IV for the given logical block number within the given file.
+ * For filenames encryption, lblk_num == 0.
+ *
+ * Keep this in sync with fscrypt_limit_io_blocks().  fscrypt_limit_io_blocks()
+ * needs to know about any IV generation methods where the low bits of IV don't
+ * simply contain the lblk_num (e.g., IV_INO_LBLK_32).
+ */
 void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
 			 const struct fscrypt_info *ci)
 {
+	u8 flags = fscrypt_policy_flags(&ci->ci_policy);
+
 	memset(iv, 0, ci->ci_mode->ivsize);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) {
+		WARN_ON_ONCE(lblk_num > U32_MAX);
+		WARN_ON_ONCE(ci->ci_inode->i_ino > U32_MAX);
+		lblk_num |= (u64)ci->ci_inode->i_ino << 32;
+	} else if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) {
+		WARN_ON_ONCE(lblk_num > U32_MAX);
+		lblk_num = (u32)(ci->ci_hashed_ino + lblk_num);
+	} else if (flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) {
+		memcpy(iv->nonce, ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE);
+	}
 	iv->lblk_num = cpu_to_le64(lblk_num);
-
-	if (fscrypt_is_direct_key_policy(&ci->ci_policy))
-		memcpy(iv->nonce, ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE);
-
-	if (ci->ci_essiv_tfm != NULL)
-		crypto_cipher_encrypt_one(ci->ci_essiv_tfm, iv->raw, iv->raw);
 }
 
 /* Encrypt or decrypt a single filesystem block of file contents */
@@ -159,7 +108,7 @@
 	DECLARE_CRYPTO_WAIT(wait);
 	struct scatterlist dst, src;
 	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	int res = 0;
 
 	if (WARN_ON_ONCE(len <= 0))
@@ -196,13 +145,14 @@
 }
 
 /**
- * fscrypt_encrypt_pagecache_blocks() - Encrypt filesystem blocks from a pagecache page
+ * 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
+ * @gfp_flags: Memory allocation flags.  See details below.
  *
  * 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
@@ -212,6 +162,11 @@
  *
  * This is for use by the filesystem's ->writepages() method.
  *
+ * The bounce page allocation is mempool-backed, so it will always succeed when
+ * @gfp_flags includes __GFP_DIRECT_RECLAIM, e.g. when it's GFP_NOFS.  However,
+ * only the first page of each bio can be allocated this way.  To prevent
+ * deadlocks, for any additional pages a mask like GFP_NOWAIT must be used.
+ *
  * Return: the new encrypted bounce page on success; an ERR_PTR() on failure
  */
 struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
@@ -281,7 +236,8 @@
 EXPORT_SYMBOL(fscrypt_encrypt_block_inplace);
 
 /**
- * fscrypt_decrypt_pagecache_blocks() - Decrypt filesystem blocks in a pagecache page
+ * 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.
@@ -348,65 +304,6 @@
 }
 EXPORT_SYMBOL(fscrypt_decrypt_block_inplace);
 
-/*
- * 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 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);
-	err = fscrypt_get_encryption_info(d_inode(dir));
-	valid = !fscrypt_has_encryption_key(d_inode(dir));
-	dput(dir);
-
-	if (err < 0)
-		return err;
-
-	return valid;
-}
-
-const struct dentry_operations fscrypt_d_ops = {
-	.d_revalidate = fscrypt_d_revalidate,
-};
-
-static void fscrypt_destroy(void)
-{
-	struct fscrypt_ctx *pos, *n;
-
-	list_for_each_entry_safe(pos, n, &fscrypt_free_ctxs, free_list)
-		kmem_cache_free(fscrypt_ctx_cachep, pos);
-	INIT_LIST_HEAD(&fscrypt_free_ctxs);
-	mempool_destroy(fscrypt_bounce_page_pool);
-	fscrypt_bounce_page_pool = NULL;
-}
-
 /**
  * fscrypt_initialize() - allocate major buffers for fs encryption.
  * @cop_flags:  fscrypt operations flags
@@ -414,11 +311,11 @@
  * We only call this when we start accessing encrypted files, since it
  * results in memory getting allocated that wouldn't otherwise be used.
  *
- * Return: Zero on success, non-zero otherwise.
+ * Return: 0 on success; -errno on failure
  */
 int fscrypt_initialize(unsigned int cop_flags)
 {
-	int i, res = -ENOMEM;
+	int err = 0;
 
 	/* No need to allocate a bounce page pool if this FS won't use it. */
 	if (cop_flags & FS_CFLG_OWN_PAGES)
@@ -426,29 +323,18 @@
 
 	mutex_lock(&fscrypt_init_mutex);
 	if (fscrypt_bounce_page_pool)
-		goto already_initialized;
+		goto out_unlock;
 
-	for (i = 0; i < num_prealloc_crypto_ctxs; i++) {
-		struct fscrypt_ctx *ctx;
-
-		ctx = kmem_cache_zalloc(fscrypt_ctx_cachep, GFP_NOFS);
-		if (!ctx)
-			goto fail;
-		list_add(&ctx->free_list, &fscrypt_free_ctxs);
-	}
-
+	err = -ENOMEM;
 	fscrypt_bounce_page_pool =
 		mempool_create_page_pool(num_prealloc_crypto_pages, 0);
 	if (!fscrypt_bounce_page_pool)
-		goto fail;
+		goto out_unlock;
 
-already_initialized:
+	err = 0;
+out_unlock:
 	mutex_unlock(&fscrypt_init_mutex);
-	return 0;
-fail:
-	fscrypt_destroy();
-	mutex_unlock(&fscrypt_init_mutex);
-	return res;
+	return err;
 }
 
 void fscrypt_msg(const struct inode *inode, const char *level,
@@ -465,9 +351,11 @@
 	va_start(args, fmt);
 	vaf.fmt = fmt;
 	vaf.va = &args;
-	if (inode)
+	if (inode && inode->i_ino)
 		printk("%sfscrypt (%s, inode %lu): %pV\n",
 		       level, inode->i_sb->s_id, inode->i_ino, &vaf);
+	else if (inode)
+		printk("%sfscrypt (%s): %pV\n", level, inode->i_sb->s_id, &vaf);
 	else
 		printk("%sfscrypt: %pV\n", level, &vaf);
 	va_end(args);
@@ -475,6 +363,8 @@
 
 /**
  * fscrypt_init() - Set up for fs encryption.
+ *
+ * Return: 0 on success; -errno on failure
  */
 static int __init fscrypt_init(void)
 {
@@ -494,13 +384,9 @@
 	if (!fscrypt_read_workqueue)
 		goto fail;
 
-	fscrypt_ctx_cachep = KMEM_CACHE(fscrypt_ctx, SLAB_RECLAIM_ACCOUNT);
-	if (!fscrypt_ctx_cachep)
-		goto fail_free_queue;
-
 	fscrypt_info_cachep = KMEM_CACHE(fscrypt_info, SLAB_RECLAIM_ACCOUNT);
 	if (!fscrypt_info_cachep)
-		goto fail_free_ctx;
+		goto fail_free_queue;
 
 	err = fscrypt_init_keyring();
 	if (err)
@@ -510,8 +396,6 @@
 
 fail_free_info:
 	kmem_cache_destroy(fscrypt_info_cachep);
-fail_free_ctx:
-	kmem_cache_destroy(fscrypt_ctx_cachep);
 fail_free_queue:
 	destroy_workqueue(fscrypt_read_workqueue);
 fail:
diff --git a/fs/crypto/fname.c b/fs/crypto/fname.c
index 891328f..027b1b6 100644
--- a/fs/crypto/fname.c
+++ b/fs/crypto/fname.c
@@ -11,10 +11,56 @@
  * This has not yet undergone a rigorous security audit.
  */
 
+#include <linux/namei.h>
 #include <linux/scatterlist.h>
+#include <crypto/hash.h>
+#include <crypto/sha.h>
 #include <crypto/skcipher.h>
 #include "fscrypt_private.h"
 
+/*
+ * struct fscrypt_nokey_name - identifier for directory entry when key is absent
+ *
+ * When userspace lists an encrypted directory without access to the key, the
+ * filesystem must present a unique "no-key name" for each filename that allows
+ * it to find the directory entry again if requested.  Naively, that would just
+ * mean using the ciphertext filenames.  However, since the ciphertext filenames
+ * can contain illegal characters ('\0' and '/'), they must be encoded in some
+ * way.  We use base64.  But that can cause names to exceed NAME_MAX (255
+ * bytes), so we also need to use a strong hash to abbreviate long names.
+ *
+ * The filesystem may also need another kind of hash, the "dirhash", to quickly
+ * find the directory entry.  Since filesystems normally compute the dirhash
+ * over the on-disk filename (i.e. the ciphertext), it's not computable from
+ * no-key names that abbreviate the ciphertext using the strong hash to fit in
+ * NAME_MAX.  It's also not computable if it's a keyed hash taken over the
+ * plaintext (but it may still be available in the on-disk directory entry);
+ * casefolded directories use this type of dirhash.  At least in these cases,
+ * each no-key name must include the name's dirhash too.
+ *
+ * To meet all these requirements, we base64-encode the following
+ * variable-length structure.  It contains the dirhash, or 0's if the filesystem
+ * didn't provide one; up to 149 bytes of the ciphertext name; and for
+ * ciphertexts longer than 149 bytes, also the SHA-256 of the remaining bytes.
+ *
+ * This ensures that each no-key name contains everything needed to find the
+ * directory entry again, contains only legal characters, doesn't exceed
+ * NAME_MAX, is unambiguous unless there's a SHA-256 collision, and that we only
+ * take the performance hit of SHA-256 on very long filenames (which are rare).
+ */
+struct fscrypt_nokey_name {
+	u32 dirhash[2];
+	u8 bytes[149];
+	u8 sha256[SHA256_DIGEST_SIZE];
+}; /* 189 bytes => 252 bytes base64-encoded, which is <= NAME_MAX (255) */
+
+/*
+ * Decoded size of max-size nokey name, i.e. a name that was abbreviated using
+ * the strong hash and thus includes the 'sha256' field.  This isn't simply
+ * sizeof(struct fscrypt_nokey_name), as the padding at the end isn't included.
+ */
+#define FSCRYPT_NOKEY_NAME_MAX	offsetofend(struct fscrypt_nokey_name, sha256)
+
 static inline bool fscrypt_is_dot_dotdot(const struct qstr *str)
 {
 	if (str->len == 1 && str->name[0] == '.')
@@ -27,20 +73,23 @@
 }
 
 /**
- * fname_encrypt() - encrypt a filename
- *
- * The output buffer must be at least as large as the input buffer.
- * Any extra space is filled with NUL padding before encryption.
+ * fscrypt_fname_encrypt() - encrypt a filename
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @iname: the filename to encrypt
+ * @out: (output) the encrypted filename
+ * @olen: size of the encrypted filename.  It must be at least @iname->len.
+ *	  Any extra space is filled with NUL padding before encryption.
  *
  * Return: 0 on success, -errno on failure
  */
-int fname_encrypt(struct inode *inode, const struct qstr *iname,
-		  u8 *out, unsigned int olen)
+int fscrypt_fname_encrypt(const struct inode *inode, const struct qstr *iname,
+			  u8 *out, unsigned int olen)
 {
 	struct skcipher_request *req = NULL;
 	DECLARE_CRYPTO_WAIT(wait);
-	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	union fscrypt_iv iv;
 	struct scatterlist sg;
 	int res;
@@ -80,20 +129,23 @@
 
 /**
  * fname_decrypt() - decrypt a filename
- *
- * The caller must have allocated sufficient memory for the @oname string.
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @iname: the encrypted filename to decrypt
+ * @oname: (output) the decrypted filename.  The caller must have allocated
+ *	   enough space for this, e.g. using fscrypt_fname_alloc_buffer().
  *
  * Return: 0 on success, -errno on failure
  */
-static int fname_decrypt(struct inode *inode,
-				const struct fscrypt_str *iname,
-				struct fscrypt_str *oname)
+static int fname_decrypt(const struct inode *inode,
+			 const struct fscrypt_str *iname,
+			 struct fscrypt_str *oname)
 {
 	struct skcipher_request *req = NULL;
 	DECLARE_CRYPTO_WAIT(wait);
 	struct scatterlist src_sg, dst_sg;
-	struct fscrypt_info *ci = inode->i_crypt_info;
-	struct crypto_skcipher *tfm = ci->ci_ctfm;
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	struct crypto_skcipher *tfm = ci->ci_enc_key.tfm;
 	union fscrypt_iv iv;
 	int res;
 
@@ -129,7 +181,10 @@
 #define BASE64_CHARS(nbytes)	DIV_ROUND_UP((nbytes) * 4, 3)
 
 /**
- * base64_encode() -
+ * base64_encode() - base64-encode some bytes
+ * @src: the bytes to encode
+ * @len: number of bytes to encode
+ * @dst: (output) the base64-encoded string.  Not NUL-terminated.
  *
  * Encodes the input string using characters from the set [A-Za-z0-9+,].
  * The encoded string is roughly 4/3 times the size of the input string.
@@ -178,11 +233,11 @@
 	return cp - dst;
 }
 
-bool fscrypt_fname_encrypted_size(const struct inode *inode, u32 orig_len,
-				  u32 max_len, u32 *encrypted_len_ret)
+bool fscrypt_fname_encrypted_size(const union fscrypt_policy *policy,
+				  u32 orig_len, u32 max_len,
+				  u32 *encrypted_len_ret)
 {
-	const struct fscrypt_info *ci = inode->i_crypt_info;
-	int padding = 4 << (fscrypt_policy_flags(&ci->ci_policy) &
+	int padding = 4 << (fscrypt_policy_flags(policy) &
 			    FSCRYPT_POLICY_FLAGS_PAD_MASK);
 	u32 encrypted_len;
 
@@ -195,20 +250,20 @@
 }
 
 /**
- * fscrypt_fname_alloc_buffer - allocate a buffer for presented filenames
+ * fscrypt_fname_alloc_buffer() - allocate a buffer for presented filenames
+ * @max_encrypted_len: maximum length of encrypted filenames the buffer will be
+ *		       used to present
+ * @crypto_str: (output) buffer to allocate
  *
  * Allocate a buffer that is large enough to hold any decrypted or encoded
  * filename (null-terminated), for the given maximum encrypted filename length.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_fname_alloc_buffer(const struct inode *inode,
-			       u32 max_encrypted_len,
+int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
 			       struct fscrypt_str *crypto_str)
 {
-	const u32 max_encoded_len =
-		max_t(u32, BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE),
-		      1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)));
+	const u32 max_encoded_len = BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX);
 	u32 max_presented_len;
 
 	max_presented_len = max(max_encoded_len, max_encrypted_len);
@@ -222,9 +277,10 @@
 EXPORT_SYMBOL(fscrypt_fname_alloc_buffer);
 
 /**
- * fscrypt_fname_free_buffer - free the buffer for presented filenames
+ * fscrypt_fname_free_buffer() - free a buffer for presented filenames
+ * @crypto_str: the buffer to free
  *
- * Free the buffer allocated by fscrypt_fname_alloc_buffer().
+ * Free a buffer that was allocated by fscrypt_fname_alloc_buffer().
  */
 void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str)
 {
@@ -236,24 +292,34 @@
 EXPORT_SYMBOL(fscrypt_fname_free_buffer);
 
 /**
- * fscrypt_fname_disk_to_usr() - converts a filename from disk space to user
- * space
+ * fscrypt_fname_disk_to_usr() - convert an encrypted filename to
+ *				 user-presentable form
+ * @inode: inode of the parent directory (for regular filenames)
+ *	   or of the symlink (for symlink targets)
+ * @hash: first part of the name's dirhash, if applicable.  This only needs to
+ *	  be provided if the filename is located in an indexed directory whose
+ *	  encryption key may be unavailable.  Not needed for symlink targets.
+ * @minor_hash: second part of the name's dirhash, if applicable
+ * @iname: encrypted filename to convert.  May also be "." or "..", which
+ *	   aren't actually encrypted.
+ * @oname: output buffer for the user-presentable filename.  The caller must
+ *	   have allocated enough space for this, e.g. using
+ *	   fscrypt_fname_alloc_buffer().
  *
- * The caller must have allocated sufficient memory for the @oname string.
- *
- * If the key is available, we'll decrypt the disk name; otherwise, we'll encode
- * it for presentation.  Short names are directly base64-encoded, while long
- * names are encoded in fscrypt_digested_name format.
+ * If the key is available, we'll decrypt the disk name.  Otherwise, we'll
+ * encode it for presentation in fscrypt_nokey_name format.
+ * See struct fscrypt_nokey_name for details.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_fname_disk_to_usr(struct inode *inode,
-			u32 hash, u32 minor_hash,
-			const struct fscrypt_str *iname,
-			struct fscrypt_str *oname)
+int fscrypt_fname_disk_to_usr(const struct inode *inode,
+			      u32 hash, u32 minor_hash,
+			      const struct fscrypt_str *iname,
+			      struct fscrypt_str *oname)
 {
 	const struct qstr qname = FSTR_TO_QSTR(iname);
-	struct fscrypt_digested_name digested_name;
+	struct fscrypt_nokey_name nokey_name;
+	u32 size; /* size of the unencoded no-key name */
 
 	if (fscrypt_is_dot_dotdot(&qname)) {
 		oname->name[0] = '.';
@@ -268,19 +334,30 @@
 	if (fscrypt_has_encryption_key(inode))
 		return fname_decrypt(inode, iname, oname);
 
-	if (iname->len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE) {
-		oname->len = base64_encode(iname->name, iname->len,
-					   oname->name);
-		return 0;
+	/*
+	 * Sanity check that struct fscrypt_nokey_name doesn't have padding
+	 * between fields and that its encoded size never exceeds NAME_MAX.
+	 */
+	BUILD_BUG_ON(offsetofend(struct fscrypt_nokey_name, dirhash) !=
+		     offsetof(struct fscrypt_nokey_name, bytes));
+	BUILD_BUG_ON(offsetofend(struct fscrypt_nokey_name, bytes) !=
+		     offsetof(struct fscrypt_nokey_name, sha256));
+	BUILD_BUG_ON(BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX) > NAME_MAX);
+
+	nokey_name.dirhash[0] = hash;
+	nokey_name.dirhash[1] = minor_hash;
+	if (iname->len <= sizeof(nokey_name.bytes)) {
+		memcpy(nokey_name.bytes, iname->name, iname->len);
+		size = offsetof(struct fscrypt_nokey_name, bytes[iname->len]);
+	} else {
+		memcpy(nokey_name.bytes, iname->name, sizeof(nokey_name.bytes));
+		/* Compute strong hash of remaining part of name. */
+		sha256(&iname->name[sizeof(nokey_name.bytes)],
+		       iname->len - sizeof(nokey_name.bytes),
+		       nokey_name.sha256);
+		size = FSCRYPT_NOKEY_NAME_MAX;
 	}
-	digested_name.hash = hash;
-	digested_name.minor_hash = minor_hash;
-	memcpy(digested_name.digest,
-	       FSCRYPT_FNAME_DIGEST(iname->name, iname->len),
-	       FSCRYPT_FNAME_DIGEST_SIZE);
-	oname->name[0] = '_';
-	oname->len = 1 + base64_encode((const u8 *)&digested_name,
-				       sizeof(digested_name), oname->name + 1);
+	oname->len = base64_encode((const u8 *)&nokey_name, size, oname->name);
 	return 0;
 }
 EXPORT_SYMBOL(fscrypt_fname_disk_to_usr);
@@ -300,10 +377,9 @@
  * directory's encryption key, then @iname is the plaintext, so we encrypt it to
  * get the disk_name.
  *
- * Else, for keyless @lookup operations, @iname is the presented ciphertext, so
- * we decode it to get either the ciphertext disk_name (for short names) or the
- * fscrypt_digested_name (for long names).  Non-@lookup operations will be
- * impossible in this case, so we fail them with ENOKEY.
+ * Else, for keyless @lookup operations, @iname should be a no-key name, so we
+ * decode it to get the struct fscrypt_nokey_name.  Non-@lookup operations will
+ * be impossible in this case, so we fail them with ENOKEY.
  *
  * If successful, fscrypt_free_filename() must be called later to clean up.
  *
@@ -312,8 +388,8 @@
 int fscrypt_setup_filename(struct inode *dir, const struct qstr *iname,
 			      int lookup, struct fscrypt_name *fname)
 {
+	struct fscrypt_nokey_name *nokey_name;
 	int ret;
-	int digested;
 
 	memset(fname, 0, sizeof(struct fscrypt_name));
 	fname->usr_fname = iname;
@@ -323,12 +399,13 @@
 		fname->disk_name.len = iname->len;
 		return 0;
 	}
-	ret = fscrypt_get_encryption_info(dir);
+	ret = fscrypt_get_encryption_info(dir, lookup);
 	if (ret)
 		return ret;
 
 	if (fscrypt_has_encryption_key(dir)) {
-		if (!fscrypt_fname_encrypted_size(dir, iname->len,
+		if (!fscrypt_fname_encrypted_size(&dir->i_crypt_info->ci_policy,
+						  iname->len,
 						  dir->i_sb->s_cop->max_namelen,
 						  &fname->crypto_buf.len))
 			return -ENAMETOOLONG;
@@ -337,8 +414,8 @@
 		if (!fname->crypto_buf.name)
 			return -ENOMEM;
 
-		ret = fname_encrypt(dir, iname, fname->crypto_buf.name,
-				    fname->crypto_buf.len);
+		ret = fscrypt_fname_encrypt(dir, iname, fname->crypto_buf.name,
+					    fname->crypto_buf.len);
 		if (ret)
 			goto errout;
 		fname->disk_name.name = fname->crypto_buf.name;
@@ -347,46 +424,37 @@
 	}
 	if (!lookup)
 		return -ENOKEY;
-	fname->is_ciphertext_name = true;
+	fname->is_nokey_name = true;
 
 	/*
 	 * We don't have the key and we are doing a lookup; decode the
 	 * user-supplied name
 	 */
-	if (iname->name[0] == '_') {
-		if (iname->len !=
-		    1 + BASE64_CHARS(sizeof(struct fscrypt_digested_name)))
-			return -ENOENT;
-		digested = 1;
-	} else {
-		if (iname->len >
-		    BASE64_CHARS(FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE))
-			return -ENOENT;
-		digested = 0;
-	}
 
-	fname->crypto_buf.name =
-		kmalloc(max_t(size_t, FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE,
-			      sizeof(struct fscrypt_digested_name)),
-			GFP_KERNEL);
+	if (iname->len > BASE64_CHARS(FSCRYPT_NOKEY_NAME_MAX))
+		return -ENOENT;
+
+	fname->crypto_buf.name = kmalloc(FSCRYPT_NOKEY_NAME_MAX, GFP_KERNEL);
 	if (fname->crypto_buf.name == NULL)
 		return -ENOMEM;
 
-	ret = base64_decode(iname->name + digested, iname->len - digested,
-			    fname->crypto_buf.name);
-	if (ret < 0) {
+	ret = base64_decode(iname->name, iname->len, fname->crypto_buf.name);
+	if (ret < (int)offsetof(struct fscrypt_nokey_name, bytes[1]) ||
+	    (ret > offsetof(struct fscrypt_nokey_name, sha256) &&
+	     ret != FSCRYPT_NOKEY_NAME_MAX)) {
 		ret = -ENOENT;
 		goto errout;
 	}
 	fname->crypto_buf.len = ret;
-	if (digested) {
-		const struct fscrypt_digested_name *n =
-			(const void *)fname->crypto_buf.name;
-		fname->hash = n->hash;
-		fname->minor_hash = n->minor_hash;
-	} else {
-		fname->disk_name.name = fname->crypto_buf.name;
-		fname->disk_name.len = fname->crypto_buf.len;
+
+	nokey_name = (void *)fname->crypto_buf.name;
+	fname->hash = nokey_name->dirhash[0];
+	fname->minor_hash = nokey_name->dirhash[1];
+	if (ret != FSCRYPT_NOKEY_NAME_MAX) {
+		/* The full ciphertext filename is available. */
+		fname->disk_name.name = nokey_name->bytes;
+		fname->disk_name.len =
+			ret - offsetof(struct fscrypt_nokey_name, bytes);
 	}
 	return 0;
 
@@ -395,3 +463,109 @@
 	return ret;
 }
 EXPORT_SYMBOL(fscrypt_setup_filename);
+
+/**
+ * fscrypt_match_name() - test whether the given name matches a directory entry
+ * @fname: the name being searched for
+ * @de_name: the name from the directory entry
+ * @de_name_len: the length of @de_name in bytes
+ *
+ * Normally @fname->disk_name will be set, and in that case we simply compare
+ * that to the name stored in the directory entry.  The only exception is that
+ * if we don't have the key for an encrypted directory and the name we're
+ * looking for is very long, then we won't have the full disk_name and instead
+ * we'll need to match against a fscrypt_nokey_name that includes a strong hash.
+ *
+ * Return: %true if the name matches, otherwise %false.
+ */
+bool fscrypt_match_name(const struct fscrypt_name *fname,
+			const u8 *de_name, u32 de_name_len)
+{
+	const struct fscrypt_nokey_name *nokey_name =
+		(const void *)fname->crypto_buf.name;
+	u8 digest[SHA256_DIGEST_SIZE];
+
+	if (likely(fname->disk_name.name)) {
+		if (de_name_len != fname->disk_name.len)
+			return false;
+		return !memcmp(de_name, fname->disk_name.name, de_name_len);
+	}
+	if (de_name_len <= sizeof(nokey_name->bytes))
+		return false;
+	if (memcmp(de_name, nokey_name->bytes, sizeof(nokey_name->bytes)))
+		return false;
+	sha256(&de_name[sizeof(nokey_name->bytes)],
+	       de_name_len - sizeof(nokey_name->bytes), digest);
+	return !memcmp(digest, nokey_name->sha256, sizeof(digest));
+}
+EXPORT_SYMBOL_GPL(fscrypt_match_name);
+
+/**
+ * fscrypt_fname_siphash() - calculate the SipHash of a filename
+ * @dir: the parent directory
+ * @name: the filename to calculate the SipHash of
+ *
+ * Given a plaintext filename @name and a directory @dir which uses SipHash as
+ * its dirhash method and has had its fscrypt key set up, this function
+ * calculates the SipHash of that name using the directory's secret dirhash key.
+ *
+ * Return: the SipHash of @name using the hash key of @dir
+ */
+u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name)
+{
+	const struct fscrypt_info *ci = dir->i_crypt_info;
+
+	WARN_ON(!ci->ci_dirhash_key_initialized);
+
+	return siphash(name->name, name->len, &ci->ci_dirhash_key);
+}
+EXPORT_SYMBOL_GPL(fscrypt_fname_siphash);
+
+/*
+ * Validate dentries in encrypted directories to make sure we aren't potentially
+ * caching stale dentries after a key has been added.
+ */
+int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags)
+{
+	struct dentry *dir;
+	int err;
+	int valid;
+
+	/*
+	 * Plaintext names are always valid, since fscrypt doesn't support
+	 * reverting to no-key names without evicting the directory's inode
+	 * -- which implies eviction of the dentries in the directory.
+	 */
+	if (!(dentry->d_flags & DCACHE_NOKEY_NAME))
+		return 1;
+
+	/*
+	 * No-key name; valid if the directory's key is still unavailable.
+	 *
+	 * Although fscrypt forbids rename() on no-key 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);
+	/*
+	 * Pass allow_unsupported=true, so that files with an unsupported
+	 * encryption policy can be deleted.
+	 */
+	err = fscrypt_get_encryption_info(d_inode(dir), true);
+	valid = !fscrypt_has_encryption_key(d_inode(dir));
+	dput(dir);
+
+	if (err < 0)
+		return err;
+
+	return valid;
+}
+EXPORT_SYMBOL_GPL(fscrypt_d_revalidate);
diff --git a/fs/crypto/fscrypt_private.h b/fs/crypto/fscrypt_private.h
index ec73872..a455e29e 100644
--- a/fs/crypto/fscrypt_private.h
+++ b/fs/crypto/fscrypt_private.h
@@ -12,13 +12,17 @@
 #define _FSCRYPT_PRIVATE_H
 
 #include <linux/fscrypt.h>
+#include <linux/siphash.h>
 #include <crypto/hash.h>
+#include <linux/blk-crypto.h>
 
 #define CONST_STRLEN(str)	(sizeof(str) - 1)
 
-#define FS_KEY_DERIVATION_NONCE_SIZE	16
+#define FSCRYPT_FILE_NONCE_SIZE	16
 
-#define FSCRYPT_MIN_KEY_SIZE		16
+#define FSCRYPT_MIN_KEY_SIZE	16
+
+#define FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE	128
 
 #define FSCRYPT_CONTEXT_V1	1
 #define FSCRYPT_CONTEXT_V2	2
@@ -32,7 +36,7 @@
 	u8 filenames_encryption_mode;
 	u8 flags;
 	u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
-	u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 };
 
 struct fscrypt_context_v2 {
@@ -42,10 +46,10 @@
 	u8 flags;
 	u8 __reserved[4];
 	u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE];
-	u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 };
 
-/**
+/*
  * fscrypt_context - the encryption context of an inode
  *
  * This is the on-disk equivalent of an fscrypt_policy, stored alongside each
@@ -78,7 +82,26 @@
 	return 0;
 }
 
-#undef fscrypt_policy
+/* Check whether an fscrypt_context has a recognized version number and size */
+static inline bool fscrypt_context_is_valid(const union fscrypt_context *ctx,
+					    int ctx_size)
+{
+	return ctx_size >= 1 && ctx_size == fscrypt_context_size(ctx);
+}
+
+/* Retrieve the context's nonce, assuming the context was already validated */
+static inline const u8 *fscrypt_context_nonce(const union fscrypt_context *ctx)
+{
+	switch (ctx->version) {
+	case FSCRYPT_CONTEXT_V1:
+		return ctx->v1.nonce;
+	case FSCRYPT_CONTEXT_V2:
+		return ctx->v2.nonce;
+	}
+	WARN_ON(1);
+	return NULL;
+}
+
 union fscrypt_policy {
 	u8 version;
 	struct fscrypt_policy_v1 v1;
@@ -139,13 +162,7 @@
 	BUG();
 }
 
-static inline bool
-fscrypt_is_direct_key_policy(const union fscrypt_policy *policy)
-{
-	return fscrypt_policy_flags(policy) & FSCRYPT_POLICY_FLAG_DIRECT_KEY;
-}
-
-/**
+/*
  * For encrypted symlinks, the ciphertext length is stored at the beginning
  * of the string in little-endian format.
  */
@@ -154,6 +171,20 @@
 	char encrypted_path[1];
 } __packed;
 
+/**
+ * struct fscrypt_prepared_key - a key prepared for actual encryption/decryption
+ * @tfm: crypto API transform object
+ * @blk_key: key for blk-crypto
+ *
+ * Normally only one of the fields will be non-NULL.
+ */
+struct fscrypt_prepared_key {
+	struct crypto_skcipher *tfm;
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+	struct fscrypt_blk_crypto_key *blk_key;
+#endif
+};
+
 /*
  * fscrypt_info - the "encryption key" for an inode
  *
@@ -163,14 +194,19 @@
  */
 struct fscrypt_info {
 
-	/* The actual crypto transform used for encryption and decryption */
-	struct crypto_skcipher *ci_ctfm;
+	/* The key in a form prepared for actual encryption/decryption */
+	struct fscrypt_prepared_key ci_enc_key;
 
+	/* True if ci_enc_key should be freed when this fscrypt_info is freed */
+	bool ci_owns_key;
+
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
 	/*
-	 * Cipher for ESSIV IV generation.  Only set for CBC contents
-	 * encryption, otherwise is NULL.
+	 * True if this inode will use inline encryption (blk-crypto) instead of
+	 * the traditional filesystem-layer encryption.
 	 */
-	struct crypto_cipher *ci_essiv_tfm;
+	bool ci_inlinecrypt;
+#endif
 
 	/*
 	 * Encryption mode used for this inode.  It corresponds to either the
@@ -196,15 +232,26 @@
 
 	/*
 	 * If non-NULL, then encryption is done using the master key directly
-	 * and ci_ctfm will equal ci_direct_key->dk_ctfm.
+	 * and ci_enc_key will equal ci_direct_key->dk_key.
 	 */
 	struct fscrypt_direct_key *ci_direct_key;
 
+	/*
+	 * This inode's hash key for filenames.  This is a 128-bit SipHash-2-4
+	 * key.  This is only set for directories that use a keyed dirhash over
+	 * the plaintext filenames -- currently just casefolded directories.
+	 */
+	siphash_key_t ci_dirhash_key;
+	bool ci_dirhash_key_initialized;
+
 	/* The encryption policy used by this inode */
 	union fscrypt_policy ci_policy;
 
 	/* This inode's nonce, copied from the fscrypt_context */
-	u8 ci_nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+	u8 ci_nonce[FSCRYPT_FILE_NONCE_SIZE];
+
+	/* Hashed inode number.  Only set for IV_INO_LBLK_32 */
+	u32 ci_hashed_ino;
 };
 
 typedef enum {
@@ -212,38 +259,16 @@
 	FS_ENCRYPT,
 } fscrypt_direction_t;
 
-#define FS_CTX_REQUIRES_FREE_ENCRYPT_FL		0x00000001
-
-static inline bool fscrypt_valid_enc_modes(u32 contents_mode,
-					   u32 filenames_mode)
-{
-	if (contents_mode == FSCRYPT_MODE_AES_128_CBC &&
-	    filenames_mode == FSCRYPT_MODE_AES_128_CTS)
-		return true;
-
-	if (contents_mode == FSCRYPT_MODE_AES_256_XTS &&
-	    filenames_mode == FSCRYPT_MODE_AES_256_CTS)
-		return true;
-
-	if (contents_mode == FSCRYPT_MODE_ADIANTUM &&
-	    filenames_mode == FSCRYPT_MODE_ADIANTUM)
-		return true;
-
-	return false;
-}
-
 /* crypto.c */
 extern struct kmem_cache *fscrypt_info_cachep;
-extern int fscrypt_initialize(unsigned int cop_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;
+int fscrypt_initialize(unsigned int cop_flags);
+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);
+struct page *fscrypt_alloc_bounce_page(gfp_t gfp_flags);
 
-extern void __printf(3, 4) __cold
+void __printf(3, 4) __cold
 fscrypt_msg(const struct inode *inode, const char *level, const char *fmt, ...);
 
 #define fscrypt_warn(inode, fmt, ...)		\
@@ -259,20 +284,21 @@
 		__le64 lblk_num;
 
 		/* per-file nonce; only set in DIRECT_KEY mode */
-		u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE];
+		u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 	};
 	u8 raw[FSCRYPT_MAX_IV_SIZE];
+	__le64 dun[FSCRYPT_MAX_IV_SIZE / sizeof(__le64)];
 };
 
 void fscrypt_generate_iv(union fscrypt_iv *iv, u64 lblk_num,
 			 const struct fscrypt_info *ci);
 
 /* fname.c */
-extern int fname_encrypt(struct inode *inode, const struct qstr *iname,
-			 u8 *out, unsigned int olen);
-extern bool fscrypt_fname_encrypted_size(const struct inode *inode,
-					 u32 orig_len, u32 max_len,
-					 u32 *encrypted_len_ret);
+int fscrypt_fname_encrypt(const struct inode *inode, const struct qstr *iname,
+			  u8 *out, unsigned int olen);
+bool fscrypt_fname_encrypted_size(const union fscrypt_policy *policy,
+				  u32 orig_len, u32 max_len,
+				  u32 *encrypted_len_ret);
 
 /* hkdf.c */
 
@@ -280,8 +306,8 @@
 	struct crypto_shash *hmac_tfm;
 };
 
-extern int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
-			     unsigned int master_key_size);
+int fscrypt_init_hkdf(struct fscrypt_hkdf *hkdf, const u8 *master_key,
+		      unsigned int master_key_size);
 
 /*
  * The list of contexts in which fscrypt uses HKDF.  These values are used as
@@ -290,15 +316,113 @@
  * outputs are unique and cryptographically isolated, i.e. knowledge of one
  * output doesn't reveal another.
  */
-#define HKDF_CONTEXT_KEY_IDENTIFIER	1
-#define HKDF_CONTEXT_PER_FILE_KEY	2
-#define HKDF_CONTEXT_PER_MODE_KEY	3
+#define HKDF_CONTEXT_KEY_IDENTIFIER	1 /* info=<empty>		*/
+#define HKDF_CONTEXT_PER_FILE_ENC_KEY	2 /* info=file_nonce		*/
+#define HKDF_CONTEXT_DIRECT_KEY		3 /* info=mode_num		*/
+#define HKDF_CONTEXT_IV_INO_LBLK_64_KEY	4 /* info=mode_num||fs_uuid	*/
+#define HKDF_CONTEXT_DIRHASH_KEY	5 /* info=file_nonce		*/
+#define HKDF_CONTEXT_IV_INO_LBLK_32_KEY	6 /* info=mode_num||fs_uuid	*/
+#define HKDF_CONTEXT_INODE_HASH_KEY	7 /* info=<empty>		*/
 
-extern int fscrypt_hkdf_expand(struct fscrypt_hkdf *hkdf, u8 context,
-			       const u8 *info, unsigned int infolen,
-			       u8 *okm, unsigned int okmlen);
+int fscrypt_hkdf_expand(const struct fscrypt_hkdf *hkdf, u8 context,
+			const u8 *info, unsigned int infolen,
+			u8 *okm, unsigned int okmlen);
 
-extern void fscrypt_destroy_hkdf(struct fscrypt_hkdf *hkdf);
+void fscrypt_destroy_hkdf(struct fscrypt_hkdf *hkdf);
+
+/* inline_crypt.c */
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+				   bool is_hw_wrapped_key);
+
+static inline bool
+fscrypt_using_inline_encryption(const struct fscrypt_info *ci)
+{
+	return ci->ci_inlinecrypt;
+}
+
+int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				     const u8 *raw_key,
+				     unsigned int raw_key_size,
+				     bool is_hw_wrapped,
+				     const struct fscrypt_info *ci);
+
+void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key);
+
+extern int fscrypt_derive_raw_secret(struct super_block *sb,
+				     const u8 *wrapped_key,
+				     unsigned int wrapped_key_size,
+				     u8 *raw_secret,
+				     unsigned int raw_secret_size);
+
+/*
+ * Check whether the crypto transform or blk-crypto key has been allocated in
+ * @prep_key, depending on which encryption implementation the file will use.
+ */
+static inline bool
+fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
+			const struct fscrypt_info *ci)
+{
+	/*
+	 * The two smp_load_acquire()'s here pair with the smp_store_release()'s
+	 * in fscrypt_prepare_inline_crypt_key() and fscrypt_prepare_key().
+	 * I.e., in some cases (namely, if this prep_key is a per-mode
+	 * encryption key) another task can publish blk_key or tfm concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	if (fscrypt_using_inline_encryption(ci))
+		return smp_load_acquire(&prep_key->blk_key) != NULL;
+	return smp_load_acquire(&prep_key->tfm) != NULL;
+}
+
+#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+static inline int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+						 bool is_hw_wrapped_key)
+{
+	return 0;
+}
+
+static inline bool
+fscrypt_using_inline_encryption(const struct fscrypt_info *ci)
+{
+	return false;
+}
+
+static inline int
+fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				 const u8 *raw_key, unsigned int raw_key_size,
+				 bool is_hw_wrapped,
+				 const struct fscrypt_info *ci)
+{
+	WARN_ON(1);
+	return -EOPNOTSUPP;
+}
+
+static inline void
+fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key)
+{
+}
+
+static inline int fscrypt_derive_raw_secret(struct super_block *sb,
+					    const u8 *wrapped_key,
+					    unsigned int wrapped_key_size,
+					    u8 *raw_secret,
+					    unsigned int raw_secret_size)
+{
+	fscrypt_warn(NULL,
+		     "kernel built without support for hardware-wrapped keys");
+	return -EOPNOTSUPP;
+}
+
+static inline bool
+fscrypt_is_key_prepared(struct fscrypt_prepared_key *prep_key,
+			const struct fscrypt_info *ci)
+{
+	return smp_load_acquire(&prep_key->tfm) != NULL;
+}
+#endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
 
 /* keyring.c */
 
@@ -316,8 +440,15 @@
 	/* Size of the raw key in bytes.  Set even if ->raw isn't set. */
 	u32			size;
 
-	/* For v1 policy keys: the raw key.  Wiped for v2 policy keys. */
-	u8			raw[FSCRYPT_MAX_KEY_SIZE];
+	/* True if the key in ->raw is a hardware-wrapped key. */
+	bool			is_hw_wrapped;
+
+	/*
+	 * For v1 policy keys: the raw key.  Wiped for v2 policy keys, unless
+	 * ->is_hw_wrapped is true, in which case this contains the wrapped key
+	 * rather than the key with which 'hkdf' was keyed.
+	 */
+	u8			raw[FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE];
 
 } __randomize_layout;
 
@@ -338,16 +469,9 @@
 	 * FS_IOC_REMOVE_ENCRYPTION_KEY can be retried, or
 	 * FS_IOC_ADD_ENCRYPTION_KEY can add the secret again.
 	 *
-	 * Locking: protected by key->sem (outer) and mk_secret_sem (inner).
-	 * The reason for two locks is that key->sem also protects modifying
-	 * mk_users, which ranks it above the semaphore for the keyring key
-	 * type, which is in turn above page faults (via keyring_read).  But
-	 * sometimes filesystems call fscrypt_get_encryption_info() from within
-	 * a transaction, which ranks it below page faults.  So we need a
-	 * separate lock which protects mk_secret but not also mk_users.
+	 * Locking: protected by this master key's key->sem.
 	 */
 	struct fscrypt_master_key_secret	mk_secret;
-	struct rw_semaphore			mk_secret_sem;
 
 	/*
 	 * For v1 policy keys: an arbitrary key descriptor which was assigned by
@@ -366,8 +490,8 @@
 	 *
 	 * This is NULL for v1 policy keys; those can only be added by root.
 	 *
-	 * Locking: in addition to this keyrings own semaphore, this is
-	 * protected by the master key's key->sem, so we can do atomic
+	 * Locking: in addition to this keyring's own semaphore, this is
+	 * protected by this master key's key->sem, so we can do atomic
 	 * search+insert.  It can also be searched without taking any locks, but
 	 * in that case the returned key may have already been removed.
 	 */
@@ -389,8 +513,17 @@
 	struct list_head	mk_decrypted_inodes;
 	spinlock_t		mk_decrypted_inodes_lock;
 
-	/* Per-mode tfms for DIRECT_KEY policies, allocated on-demand */
-	struct crypto_skcipher	*mk_mode_keys[FSCRYPT_MODE_MAX + 1];
+	/*
+	 * Per-mode encryption keys for the various types of encryption policies
+	 * that use them.  Allocated and derived on-demand.
+	 */
+	struct fscrypt_prepared_key mk_direct_keys[FSCRYPT_MODE_MAX + 1];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_64_keys[FSCRYPT_MODE_MAX + 1];
+	struct fscrypt_prepared_key mk_iv_ino_lblk_32_keys[FSCRYPT_MODE_MAX + 1];
+
+	/* Hash key for inode numbers.  Initialized only when needed. */
+	siphash_key_t		mk_ino_hash_key;
+	bool			mk_ino_hash_key_initialized;
 
 } __randomize_layout;
 
@@ -400,9 +533,9 @@
 	/*
 	 * The READ_ONCE() is only necessary for fscrypt_drop_inode() and
 	 * fscrypt_key_describe().  These run in atomic context, so they can't
-	 * take ->mk_secret_sem and thus 'secret' can change concurrently which
-	 * would be a data race.  But they only need to know whether the secret
-	 * *was* present at the time of check, so READ_ONCE() suffices.
+	 * take the key semaphore and thus 'secret' can change concurrently
+	 * which would be a data race.  But they only need to know whether the
+	 * secret *was* present at the time of check, so READ_ONCE() suffices.
 	 */
 	return READ_ONCE(secret->size) != 0;
 }
@@ -430,14 +563,17 @@
 	return 0;
 }
 
-extern struct key *
+struct key *
 fscrypt_find_master_key(struct super_block *sb,
 			const struct fscrypt_key_specifier *mk_spec);
 
-extern int fscrypt_verify_key_added(struct super_block *sb,
-				    const u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]);
+int fscrypt_add_test_dummy_key(struct super_block *sb,
+			       struct fscrypt_key_specifier *key_spec);
 
-extern int __init fscrypt_init_keyring(void);
+int fscrypt_verify_key_added(struct super_block *sb,
+			     const u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]);
+
+int __init fscrypt_init_keyring(void);
 
 /* keysetup.c */
 
@@ -446,40 +582,72 @@
 	const char *cipher_str;
 	int keysize;
 	int ivsize;
-	bool logged_impl_name;
-	bool needs_essiv;
+	int logged_impl_name;
+	enum blk_crypto_mode_num blk_crypto_mode;
 };
 
-static inline bool
-fscrypt_mode_supports_direct_key(const struct fscrypt_mode *mode)
+extern struct fscrypt_mode fscrypt_modes[];
+
+int fscrypt_prepare_key(struct fscrypt_prepared_key *prep_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped, const struct fscrypt_info *ci);
+
+void fscrypt_destroy_prepared_key(struct fscrypt_prepared_key *prep_key);
+
+int fscrypt_set_per_file_enc_key(struct fscrypt_info *ci, const u8 *raw_key);
+
+int fscrypt_derive_dirhash_key(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk);
+
+void fscrypt_hash_inode_number(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk);
+
+int fscrypt_get_encryption_info(struct inode *inode, bool allow_unsupported);
+
+/**
+ * fscrypt_require_key() - require an inode's encryption key
+ * @inode: the inode we need the key for
+ *
+ * If the inode is encrypted, set up its encryption key if not already done.
+ * Then require that the key be present and return -ENOKEY otherwise.
+ *
+ * No locks are needed, and the key will live as long as the struct inode --- so
+ * it won't go away from under you.
+ *
+ * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code
+ * if a problem occurred while setting up the encryption key.
+ */
+static inline int fscrypt_require_key(struct inode *inode)
 {
-	return mode->ivsize >= offsetofend(union fscrypt_iv, nonce);
+	if (IS_ENCRYPTED(inode)) {
+		int err = fscrypt_get_encryption_info(inode, false);
+
+		if (err)
+			return err;
+		if (!fscrypt_has_encryption_key(inode))
+			return -ENOKEY;
+	}
+	return 0;
 }
 
-extern struct crypto_skcipher *
-fscrypt_allocate_skcipher(struct fscrypt_mode *mode, const u8 *raw_key,
-			  const struct inode *inode);
-
-extern int fscrypt_set_derived_key(struct fscrypt_info *ci,
-				   const u8 *derived_key);
-
 /* keysetup_v1.c */
 
-extern void fscrypt_put_direct_key(struct fscrypt_direct_key *dk);
+void fscrypt_put_direct_key(struct fscrypt_direct_key *dk);
 
-extern int fscrypt_setup_v1_file_key(struct fscrypt_info *ci,
-				     const u8 *raw_master_key);
+int fscrypt_setup_v1_file_key(struct fscrypt_info *ci,
+			      const u8 *raw_master_key);
 
-extern int fscrypt_setup_v1_file_key_via_subscribed_keyrings(
-					struct fscrypt_info *ci);
+int fscrypt_setup_v1_file_key_via_subscribed_keyrings(struct fscrypt_info *ci);
+
 /* policy.c */
 
-extern bool fscrypt_policies_equal(const union fscrypt_policy *policy1,
-				   const union fscrypt_policy *policy2);
-extern bool fscrypt_supported_policy(const union fscrypt_policy *policy_u,
-				     const struct inode *inode);
-extern int fscrypt_policy_from_context(union fscrypt_policy *policy_u,
-				       const union fscrypt_context *ctx_u,
-				       int ctx_size);
+bool fscrypt_policies_equal(const union fscrypt_policy *policy1,
+			    const union fscrypt_policy *policy2);
+bool fscrypt_supported_policy(const union fscrypt_policy *policy_u,
+			      const struct inode *inode);
+int fscrypt_policy_from_context(union fscrypt_policy *policy_u,
+				const union fscrypt_context *ctx_u,
+				int ctx_size);
+const union fscrypt_policy *fscrypt_policy_to_inherit(struct inode *dir);
 
 #endif /* _FSCRYPT_PRIVATE_H */
diff --git a/fs/crypto/hkdf.c b/fs/crypto/hkdf.c
index f21873e..efb95bd 100644
--- a/fs/crypto/hkdf.c
+++ b/fs/crypto/hkdf.c
@@ -112,7 +112,7 @@
  * adds to its application-specific info strings to guarantee that it doesn't
  * accidentally repeat an info string when using HKDF for different purposes.)
  */
-int fscrypt_hkdf_expand(struct fscrypt_hkdf *hkdf, u8 context,
+int fscrypt_hkdf_expand(const struct fscrypt_hkdf *hkdf, u8 context,
 			const u8 *info, unsigned int infolen,
 			u8 *okm, unsigned int okmlen)
 {
diff --git a/fs/crypto/hooks.c b/fs/crypto/hooks.c
index 82575cf..af74599 100644
--- a/fs/crypto/hooks.c
+++ b/fs/crypto/hooks.c
@@ -5,10 +5,12 @@
  * Encryption hooks for higher-level filesystem operations.
  */
 
+#include <linux/key.h>
+
 #include "fscrypt_private.h"
 
 /**
- * fscrypt_file_open - prepare to open a possibly-encrypted regular file
+ * fscrypt_file_open() - prepare to open a possibly-encrypted regular file
  * @inode: the inode being opened
  * @filp: the struct file being set up
  *
@@ -52,15 +54,12 @@
 int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
 			   struct dentry *dentry)
 {
-	int err;
-
-	err = fscrypt_require_key(dir);
-	if (err)
-		return err;
-
-	/* ... in case we looked up no-key name before key was added */
 	if (fscrypt_is_nokey_name(dentry))
 		return -ENOKEY;
+	/*
+	 * We don't need to separately check that the directory inode's key is
+	 * available, as it's implied by the dentry not being a no-key name.
+	 */
 
 	if (!fscrypt_has_permitted_context(dir, inode))
 		return -EXDEV;
@@ -73,20 +72,13 @@
 			     struct inode *new_dir, struct dentry *new_dentry,
 			     unsigned int flags)
 {
-	int err;
-
-	err = fscrypt_require_key(old_dir);
-	if (err)
-		return err;
-
-	err = fscrypt_require_key(new_dir);
-	if (err)
-		return err;
-
-	/* ... in case we looked up no-key name(s) before key was added */
 	if (fscrypt_is_nokey_name(old_dentry) ||
 	    fscrypt_is_nokey_name(new_dentry))
 		return -ENOKEY;
+	/*
+	 * We don't need to separately check that the directory inodes' keys are
+	 * available, as it's implied by the dentries not being no-key names.
+	 */
 
 	if (old_dir != new_dir) {
 		if (IS_ENCRYPTED(new_dir) &&
@@ -112,36 +104,118 @@
 	if (err && err != -ENOENT)
 		return err;
 
-	if (fname->is_ciphertext_name) {
+	if (fname->is_nokey_name) {
 		spin_lock(&dentry->d_lock);
-		dentry->d_flags |= DCACHE_ENCRYPTED_NAME;
+		dentry->d_flags |= DCACHE_NOKEY_NAME;
 		spin_unlock(&dentry->d_lock);
-		d_set_d_op(dentry, &fscrypt_d_ops);
 	}
 	return err;
 }
 EXPORT_SYMBOL_GPL(__fscrypt_prepare_lookup);
 
-int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
-			      unsigned int max_len,
-			      struct fscrypt_str *disk_link)
+int __fscrypt_prepare_readdir(struct inode *dir)
 {
+	return fscrypt_get_encryption_info(dir, true);
+}
+EXPORT_SYMBOL_GPL(__fscrypt_prepare_readdir);
+
+int __fscrypt_prepare_setattr(struct dentry *dentry, struct iattr *attr)
+{
+	if (attr->ia_valid & ATTR_SIZE)
+		return fscrypt_require_key(d_inode(dentry));
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__fscrypt_prepare_setattr);
+
+/**
+ * fscrypt_prepare_setflags() - prepare to change flags with FS_IOC_SETFLAGS
+ * @inode: the inode on which flags are being changed
+ * @oldflags: the old flags
+ * @flags: the new flags
+ *
+ * The caller should be holding i_rwsem for write.
+ *
+ * Return: 0 on success; -errno if the flags change isn't allowed or if
+ *	   another error occurs.
+ */
+int fscrypt_prepare_setflags(struct inode *inode,
+			     unsigned int oldflags, unsigned int flags)
+{
+	struct fscrypt_info *ci;
+	struct key *key;
+	struct fscrypt_master_key *mk;
 	int err;
 
 	/*
+	 * When the CASEFOLD flag is set on an encrypted directory, we must
+	 * derive the secret key needed for the dirhash.  This is only possible
+	 * if the directory uses a v2 encryption policy.
+	 */
+	if (IS_ENCRYPTED(inode) && (flags & ~oldflags & FS_CASEFOLD_FL)) {
+		err = fscrypt_require_key(inode);
+		if (err)
+			return err;
+		ci = inode->i_crypt_info;
+		if (ci->ci_policy.version != FSCRYPT_POLICY_V2)
+			return -EINVAL;
+		key = ci->ci_master_key;
+		mk = key->payload.data[0];
+		down_read(&key->sem);
+		if (is_master_key_secret_present(&mk->mk_secret))
+			err = fscrypt_derive_dirhash_key(ci, mk);
+		else
+			err = -ENOKEY;
+		up_read(&key->sem);
+		return err;
+	}
+	return 0;
+}
+
+/**
+ * fscrypt_prepare_symlink() - prepare to create a possibly-encrypted symlink
+ * @dir: directory in which the symlink is being created
+ * @target: plaintext symlink target
+ * @len: length of @target excluding null terminator
+ * @max_len: space the filesystem has available to store the symlink target
+ * @disk_link: (out) the on-disk symlink target being prepared
+ *
+ * This function computes the size the symlink target will require on-disk,
+ * stores it in @disk_link->len, and validates it against @max_len.  An
+ * encrypted symlink may be longer than the original.
+ *
+ * Additionally, @disk_link->name is set to @target if the symlink will be
+ * unencrypted, but left NULL if the symlink will be encrypted.  For encrypted
+ * symlinks, the filesystem must call fscrypt_encrypt_symlink() to create the
+ * on-disk target later.  (The reason for the two-step process is that some
+ * filesystems need to know the size of the symlink target before creating the
+ * inode, e.g. to determine whether it will be a "fast" or "slow" symlink.)
+ *
+ * Return: 0 on success, -ENAMETOOLONG if the symlink target is too long,
+ * -ENOKEY if the encryption key is missing, or another -errno code if a problem
+ * occurred while setting up the encryption key.
+ */
+int fscrypt_prepare_symlink(struct inode *dir, const char *target,
+			    unsigned int len, unsigned int max_len,
+			    struct fscrypt_str *disk_link)
+{
+	const union fscrypt_policy *policy;
+
+	/*
 	 * To calculate the size of the encrypted symlink target we need to know
 	 * the amount of NUL padding, which is determined by the flags set in
 	 * the encryption policy which will be inherited from the directory.
-	 * The easiest way to get access to this is to just load the directory's
-	 * fscrypt_info, since we'll need it to create the dir_entry anyway.
-	 *
-	 * Note: in test_dummy_encryption mode, @dir may be unencrypted.
 	 */
-	err = fscrypt_get_encryption_info(dir);
-	if (err)
-		return err;
-	if (!fscrypt_has_encryption_key(dir))
-		return -ENOKEY;
+	policy = fscrypt_policy_to_inherit(dir);
+	if (policy == NULL) {
+		/* Not encrypted */
+		disk_link->name = (unsigned char *)target;
+		disk_link->len = len + 1;
+		if (disk_link->len > max_len)
+			return -ENAMETOOLONG;
+		return 0;
+	}
+	if (IS_ERR(policy))
+		return PTR_ERR(policy);
 
 	/*
 	 * Calculate the size of the encrypted symlink and verify it won't
@@ -154,7 +228,7 @@
 	 * counting it (even though it is meaningless for ciphertext) is simpler
 	 * for now since filesystems will assume it is there and subtract it.
 	 */
-	if (!fscrypt_fname_encrypted_size(dir, len,
+	if (!fscrypt_fname_encrypted_size(policy, len,
 					  max_len - sizeof(struct fscrypt_symlink_data),
 					  &disk_link->len))
 		return -ENAMETOOLONG;
@@ -163,7 +237,7 @@
 	disk_link->name = NULL;
 	return 0;
 }
-EXPORT_SYMBOL_GPL(__fscrypt_prepare_symlink);
+EXPORT_SYMBOL_GPL(fscrypt_prepare_symlink);
 
 int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
 			      unsigned int len, struct fscrypt_str *disk_link)
@@ -173,9 +247,13 @@
 	struct fscrypt_symlink_data *sd;
 	unsigned int ciphertext_len;
 
-	err = fscrypt_require_key(inode);
-	if (err)
-		return err;
+	/*
+	 * fscrypt_prepare_new_inode() should have already set up the new
+	 * symlink inode's encryption key.  We don't wait until now to do it,
+	 * since we may be in a filesystem transaction now.
+	 */
+	if (WARN_ON_ONCE(!fscrypt_has_encryption_key(inode)))
+		return -ENOKEY;
 
 	if (disk_link->name) {
 		/* filesystem-provided buffer */
@@ -188,7 +266,8 @@
 	ciphertext_len = disk_link->len - sizeof(*sd);
 	sd->len = cpu_to_le16(ciphertext_len);
 
-	err = fname_encrypt(inode, &iname, sd->encrypted_path, ciphertext_len);
+	err = fscrypt_fname_encrypt(inode, &iname, sd->encrypted_path,
+				    ciphertext_len);
 	if (err)
 		goto err_free_sd;
 
@@ -217,7 +296,7 @@
 EXPORT_SYMBOL_GPL(__fscrypt_encrypt_symlink);
 
 /**
- * fscrypt_get_symlink - get the target of an encrypted symlink
+ * fscrypt_get_symlink() - get the target of an encrypted symlink
  * @inode: the symlink inode
  * @caddr: the on-disk contents of the symlink
  * @max_size: size of @caddr buffer
@@ -252,7 +331,7 @@
 	 * Try to set up the symlink's encryption key, but we can continue
 	 * regardless of whether the key is available or not.
 	 */
-	err = fscrypt_get_encryption_info(inode);
+	err = fscrypt_get_encryption_info(inode, false);
 	if (err)
 		return ERR_PTR(err);
 	has_key = fscrypt_has_encryption_key(inode);
@@ -274,7 +353,7 @@
 	if (cstr.len + sizeof(*sd) - 1 > max_size)
 		return ERR_PTR(-EUCLEAN);
 
-	err = fscrypt_fname_alloc_buffer(inode, cstr.len, &pstr);
+	err = fscrypt_fname_alloc_buffer(cstr.len, &pstr);
 	if (err)
 		return ERR_PTR(err);
 
diff --git a/fs/crypto/inline_crypt.c b/fs/crypto/inline_crypt.c
new file mode 100644
index 0000000..5817a04
--- /dev/null
+++ b/fs/crypto/inline_crypt.c
@@ -0,0 +1,474 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Inline encryption support for fscrypt
+ *
+ * Copyright 2019 Google LLC
+ */
+
+/*
+ * With "inline encryption", the block layer handles the decryption/encryption
+ * as part of the bio, instead of the filesystem doing the crypto itself via
+ * crypto API.  See Documentation/block/inline-encryption.rst.  fscrypt still
+ * provides the key and IV to use.
+ */
+
+#include <linux/blk-crypto.h>
+#include <linux/blkdev.h>
+#include <linux/buffer_head.h>
+#include <linux/keyslot-manager.h>
+#include <linux/sched/mm.h>
+#include <linux/uio.h>
+
+#include "fscrypt_private.h"
+
+struct fscrypt_blk_crypto_key {
+	struct blk_crypto_key base;
+	int num_devs;
+	struct request_queue *devs[];
+};
+
+static int fscrypt_get_num_devices(struct super_block *sb)
+{
+	if (sb->s_cop->get_num_devices)
+		return sb->s_cop->get_num_devices(sb);
+	return 1;
+}
+
+static void fscrypt_get_devices(struct super_block *sb, int num_devs,
+				struct request_queue **devs)
+{
+	if (num_devs == 1)
+		devs[0] = bdev_get_queue(sb->s_bdev);
+	else
+		sb->s_cop->get_devices(sb, devs);
+}
+
+static unsigned int fscrypt_get_dun_bytes(const struct fscrypt_info *ci)
+{
+	struct super_block *sb = ci->ci_inode->i_sb;
+	unsigned int flags = fscrypt_policy_flags(&ci->ci_policy);
+	int ino_bits = 64, lblk_bits = 64;
+
+	if (flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY)
+		return offsetofend(union fscrypt_iv, nonce);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64)
+		return sizeof(__le64);
+
+	if (flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)
+		return sizeof(__le32);
+
+	/* Default case: IVs are just the file logical block number */
+	if (sb->s_cop->get_ino_and_lblk_bits)
+		sb->s_cop->get_ino_and_lblk_bits(sb, &ino_bits, &lblk_bits);
+	return DIV_ROUND_UP(lblk_bits, 8);
+}
+
+/* Enable inline encryption for this file if supported. */
+int fscrypt_select_encryption_impl(struct fscrypt_info *ci,
+				   bool is_hw_wrapped_key)
+{
+	const struct inode *inode = ci->ci_inode;
+	struct super_block *sb = inode->i_sb;
+	struct blk_crypto_config crypto_cfg;
+	int num_devs;
+	struct request_queue **devs;
+	int i;
+
+	/* The file must need contents encryption, not filenames encryption */
+	if (!S_ISREG(inode->i_mode))
+		return 0;
+
+	/* The crypto mode must have a blk-crypto counterpart */
+	if (ci->ci_mode->blk_crypto_mode == BLK_ENCRYPTION_MODE_INVALID)
+		return 0;
+
+	/* The filesystem must be mounted with -o inlinecrypt */
+	if (!(sb->s_flags & SB_INLINECRYPT))
+		return 0;
+
+	/*
+	 * When a page contains multiple logically contiguous filesystem blocks,
+	 * some filesystem code only calls fscrypt_mergeable_bio() for the first
+	 * block in the page. This is fine for most of fscrypt's IV generation
+	 * strategies, where contiguous blocks imply contiguous IVs. But it
+	 * doesn't work with IV_INO_LBLK_32. For now, simply exclude
+	 * IV_INO_LBLK_32 with blocksize != PAGE_SIZE from inline encryption.
+	 */
+	if ((fscrypt_policy_flags(&ci->ci_policy) &
+	     FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
+	    sb->s_blocksize != PAGE_SIZE)
+		return 0;
+
+	/*
+	 * On all the filesystem's devices, blk-crypto must support the crypto
+	 * configuration that the file would use.
+	 */
+	crypto_cfg.crypto_mode = ci->ci_mode->blk_crypto_mode;
+	crypto_cfg.data_unit_size = sb->s_blocksize;
+	crypto_cfg.dun_bytes = fscrypt_get_dun_bytes(ci);
+	crypto_cfg.is_hw_wrapped = is_hw_wrapped_key;
+	num_devs = fscrypt_get_num_devices(sb);
+	devs = kmalloc_array(num_devs, sizeof(*devs), GFP_KERNEL);
+	if (!devs)
+		return -ENOMEM;
+	fscrypt_get_devices(sb, num_devs, devs);
+
+	for (i = 0; i < num_devs; i++) {
+		if (!blk_crypto_config_supported(devs[i], &crypto_cfg))
+			goto out_free_devs;
+	}
+
+	ci->ci_inlinecrypt = true;
+out_free_devs:
+	kfree(devs);
+
+	return 0;
+}
+
+int fscrypt_prepare_inline_crypt_key(struct fscrypt_prepared_key *prep_key,
+				     const u8 *raw_key,
+				     unsigned int raw_key_size,
+				     bool is_hw_wrapped,
+				     const struct fscrypt_info *ci)
+{
+	const struct inode *inode = ci->ci_inode;
+	struct super_block *sb = inode->i_sb;
+	enum blk_crypto_mode_num crypto_mode = ci->ci_mode->blk_crypto_mode;
+	int num_devs = fscrypt_get_num_devices(sb);
+	int queue_refs = 0;
+	struct fscrypt_blk_crypto_key *blk_key;
+	int err;
+	int i;
+
+	blk_key = kzalloc(struct_size(blk_key, devs, num_devs), GFP_KERNEL);
+	if (!blk_key)
+		return -ENOMEM;
+
+	blk_key->num_devs = num_devs;
+	fscrypt_get_devices(sb, num_devs, blk_key->devs);
+
+	BUILD_BUG_ON(FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE >
+		     BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE);
+
+	err = blk_crypto_init_key(&blk_key->base, raw_key, raw_key_size,
+				  is_hw_wrapped, crypto_mode,
+				  fscrypt_get_dun_bytes(ci), sb->s_blocksize);
+	if (err) {
+		fscrypt_err(inode, "error %d initializing blk-crypto key", err);
+		goto fail;
+	}
+
+	/*
+	 * We have to start using blk-crypto on all the filesystem's devices.
+	 * We also have to save all the request_queue's for later so that the
+	 * key can be evicted from them.  This is needed because some keys
+	 * aren't destroyed until after the filesystem was already unmounted
+	 * (namely, the per-mode keys in struct fscrypt_master_key).
+	 */
+	for (i = 0; i < num_devs; i++) {
+		if (!blk_get_queue(blk_key->devs[i])) {
+			fscrypt_err(inode, "couldn't get request_queue");
+			err = -EAGAIN;
+			goto fail;
+		}
+		queue_refs++;
+
+		err = blk_crypto_start_using_key(&blk_key->base,
+						 blk_key->devs[i]);
+		if (err) {
+			fscrypt_err(inode,
+				    "error %d starting to use blk-crypto", err);
+			goto fail;
+		}
+	}
+	/*
+	 * Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
+	 * I.e., here we publish ->blk_key with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.  Note that this concurrency is only
+	 * possible for per-mode keys, not for per-file keys.
+	 */
+	smp_store_release(&prep_key->blk_key, blk_key);
+	return 0;
+
+fail:
+	for (i = 0; i < queue_refs; i++)
+		blk_put_queue(blk_key->devs[i]);
+	kzfree(blk_key);
+	return err;
+}
+
+void fscrypt_destroy_inline_crypt_key(struct fscrypt_prepared_key *prep_key)
+{
+	struct fscrypt_blk_crypto_key *blk_key = prep_key->blk_key;
+	int i;
+
+	if (blk_key) {
+		for (i = 0; i < blk_key->num_devs; i++) {
+			blk_crypto_evict_key(blk_key->devs[i], &blk_key->base);
+			blk_put_queue(blk_key->devs[i]);
+		}
+		kzfree(blk_key);
+	}
+}
+
+int fscrypt_derive_raw_secret(struct super_block *sb,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *raw_secret, unsigned int raw_secret_size)
+{
+	struct request_queue *q;
+
+	q = bdev_get_queue(sb->s_bdev);
+	if (!q->ksm)
+		return -EOPNOTSUPP;
+
+	return blk_ksm_derive_raw_secret(q->ksm, wrapped_key, wrapped_key_size,
+					 raw_secret, raw_secret_size);
+}
+
+bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return inode->i_crypt_info->ci_inlinecrypt;
+}
+EXPORT_SYMBOL_GPL(__fscrypt_inode_uses_inline_crypto);
+
+static void fscrypt_generate_dun(const struct fscrypt_info *ci, u64 lblk_num,
+				 u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE])
+{
+	union fscrypt_iv iv;
+	int i;
+
+	fscrypt_generate_iv(&iv, lblk_num, ci);
+
+	BUILD_BUG_ON(FSCRYPT_MAX_IV_SIZE > BLK_CRYPTO_MAX_IV_SIZE);
+	memset(dun, 0, BLK_CRYPTO_MAX_IV_SIZE);
+	for (i = 0; i < ci->ci_mode->ivsize/sizeof(dun[0]); i++)
+		dun[i] = le64_to_cpu(iv.dun[i]);
+}
+
+/**
+ * fscrypt_set_bio_crypt_ctx() - prepare a file contents bio for inline crypto
+ * @bio: a bio which will eventually be submitted to the file
+ * @inode: the file's inode
+ * @first_lblk: the first file logical block number in the I/O
+ * @gfp_mask: memory allocation flags - these must be a waiting mask so that
+ *					bio_crypt_set_ctx can't fail.
+ *
+ * If the contents of the file should be encrypted (or decrypted) with inline
+ * encryption, then assign the appropriate encryption context to the bio.
+ *
+ * Normally the bio should be newly allocated (i.e. no pages added yet), as
+ * otherwise fscrypt_mergeable_bio() won't work as intended.
+ *
+ * The encryption context will be freed automatically when the bio is freed.
+ *
+ * This function also handles setting bi_skip_dm_default_key when needed.
+ */
+void fscrypt_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
+			       u64 first_lblk, gfp_t gfp_mask)
+{
+	const struct fscrypt_info *ci;
+	u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+
+	if (fscrypt_inode_should_skip_dm_default_key(inode))
+		bio_set_skip_dm_default_key(bio);
+
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return;
+	ci = inode->i_crypt_info;
+
+	fscrypt_generate_dun(ci, first_lblk, dun);
+	bio_crypt_set_ctx(bio, &ci->ci_enc_key.blk_key->base, dun, gfp_mask);
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx);
+
+/* Extract the inode and logical block number from a buffer_head. */
+static bool bh_get_inode_and_lblk_num(const struct buffer_head *bh,
+				      const struct inode **inode_ret,
+				      u64 *lblk_num_ret)
+{
+	struct page *page = bh->b_page;
+	const struct address_space *mapping;
+	const struct inode *inode;
+
+	/*
+	 * The ext4 journal (jbd2) can submit a buffer_head it directly created
+	 * for a non-pagecache page.  fscrypt doesn't care about these.
+	 */
+	mapping = page_mapping(page);
+	if (!mapping)
+		return false;
+	inode = mapping->host;
+
+	*inode_ret = inode;
+	*lblk_num_ret = ((u64)page->index << (PAGE_SHIFT - inode->i_blkbits)) +
+			(bh_offset(bh) >> inode->i_blkbits);
+	return true;
+}
+
+/**
+ * fscrypt_set_bio_crypt_ctx_bh() - prepare a file contents bio for inline
+ *				    crypto
+ * @bio: a bio which will eventually be submitted to the file
+ * @first_bh: the first buffer_head for which I/O will be submitted
+ * @gfp_mask: memory allocation flags
+ *
+ * Same as fscrypt_set_bio_crypt_ctx(), except this takes a buffer_head instead
+ * of an inode and block number directly.
+ */
+void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
+				  const struct buffer_head *first_bh,
+				  gfp_t gfp_mask)
+{
+	const struct inode *inode;
+	u64 first_lblk;
+
+	if (bh_get_inode_and_lblk_num(first_bh, &inode, &first_lblk))
+		fscrypt_set_bio_crypt_ctx(bio, inode, first_lblk, gfp_mask);
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_bio_crypt_ctx_bh);
+
+/**
+ * fscrypt_mergeable_bio() - test whether data can be added to a bio
+ * @bio: the bio being built up
+ * @inode: the inode for the next part of the I/O
+ * @next_lblk: the next file logical block number in the I/O
+ *
+ * When building a bio which may contain data which should undergo inline
+ * encryption (or decryption) via fscrypt, filesystems should call this function
+ * to ensure that the resulting bio contains only contiguous data unit numbers.
+ * This will return false if the next part of the I/O cannot be merged with the
+ * bio because either the encryption key would be different or the encryption
+ * data unit numbers would be discontiguous.
+ *
+ * fscrypt_set_bio_crypt_ctx() must have already been called on the bio.
+ *
+ * This function also returns false if the next part of the I/O would need to
+ * have a different value for the bi_skip_dm_default_key flag.
+ *
+ * Return: true iff the I/O is mergeable
+ */
+bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+			   u64 next_lblk)
+{
+	const struct bio_crypt_ctx *bc = bio->bi_crypt_context;
+	u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+
+	if (!!bc != fscrypt_inode_uses_inline_crypto(inode))
+		return false;
+	if (bio_should_skip_dm_default_key(bio) !=
+	    fscrypt_inode_should_skip_dm_default_key(inode))
+		return false;
+	if (!bc)
+		return true;
+
+	/*
+	 * Comparing the key pointers is good enough, as all I/O for each key
+	 * uses the same pointer.  I.e., there's currently no need to support
+	 * merging requests where the keys are the same but the pointers differ.
+	 */
+	if (bc->bc_key != &inode->i_crypt_info->ci_enc_key.blk_key->base)
+		return false;
+
+	fscrypt_generate_dun(inode->i_crypt_info, next_lblk, next_dun);
+	return bio_crypt_dun_is_contiguous(bc, bio->bi_iter.bi_size, next_dun);
+}
+EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio);
+
+/**
+ * fscrypt_mergeable_bio_bh() - test whether data can be added to a bio
+ * @bio: the bio being built up
+ * @next_bh: the next buffer_head for which I/O will be submitted
+ *
+ * Same as fscrypt_mergeable_bio(), except this takes a buffer_head instead of
+ * an inode and block number directly.
+ *
+ * Return: true iff the I/O is mergeable
+ */
+bool fscrypt_mergeable_bio_bh(struct bio *bio,
+			      const struct buffer_head *next_bh)
+{
+	const struct inode *inode;
+	u64 next_lblk;
+
+	if (!bh_get_inode_and_lblk_num(next_bh, &inode, &next_lblk))
+		return !bio->bi_crypt_context &&
+		       !bio_should_skip_dm_default_key(bio);
+
+	return fscrypt_mergeable_bio(bio, inode, next_lblk);
+}
+EXPORT_SYMBOL_GPL(fscrypt_mergeable_bio_bh);
+
+/**
+ * fscrypt_dio_supported() - check whether a direct I/O request is unsupported
+ *			     due to encryption constraints
+ * @iocb: the file and position the I/O is targeting
+ * @iter: the I/O data segment(s)
+ *
+ * Return: true if direct I/O is supported
+ */
+bool fscrypt_dio_supported(struct kiocb *iocb, struct iov_iter *iter)
+{
+	const struct inode *inode = file_inode(iocb->ki_filp);
+	const unsigned int blocksize = i_blocksize(inode);
+
+	/* If the file is unencrypted, no veto from us. */
+	if (!fscrypt_needs_contents_encryption(inode))
+		return true;
+
+	/* We only support direct I/O with inline crypto, not fs-layer crypto */
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return false;
+
+	/*
+	 * Since the granularity of encryption is filesystem blocks, the I/O
+	 * must be block aligned -- not just disk sector aligned.
+	 */
+	if (!IS_ALIGNED(iocb->ki_pos | iov_iter_alignment(iter), blocksize))
+		return false;
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(fscrypt_dio_supported);
+
+/**
+ * fscrypt_limit_io_blocks() - limit I/O blocks to avoid discontiguous DUNs
+ * @inode: the file on which I/O is being done
+ * @lblk: the block at which the I/O is being started from
+ * @nr_blocks: the number of blocks we want to submit starting at @pos
+ *
+ * Determine the limit to the number of blocks that can be submitted in the bio
+ * targeting @pos without causing a data unit number (DUN) discontinuity.
+ *
+ * This is normally just @nr_blocks, as normally the DUNs just increment along
+ * with the logical blocks.  (Or the file is not encrypted.)
+ *
+ * In rare cases, fscrypt can be using an IV generation method that allows the
+ * DUN to wrap around within logically continuous blocks, and that wraparound
+ * will occur.  If this happens, a value less than @nr_blocks will be returned
+ * so that the wraparound doesn't occur in the middle of the bio.
+ *
+ * Return: the actual number of blocks that can be submitted
+ */
+u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 nr_blocks)
+{
+	const struct fscrypt_info *ci = inode->i_crypt_info;
+	u32 dun;
+
+	if (!fscrypt_inode_uses_inline_crypto(inode))
+		return nr_blocks;
+
+	if (nr_blocks <= 1)
+		return nr_blocks;
+
+	if (!(fscrypt_policy_flags(&ci->ci_policy) &
+	      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32))
+		return nr_blocks;
+
+	/* With IV_INO_LBLK_32, the DUN can wrap around from U32_MAX to 0. */
+
+	dun = ci->ci_hashed_ino + lblk;
+
+	return min_t(u64, nr_blocks, (u64)U32_MAX + 1 - dun);
+}
diff --git a/fs/crypto/keyring.c b/fs/crypto/keyring.c
index 4ee65b2..a604ac4 100644
--- a/fs/crypto/keyring.c
+++ b/fs/crypto/keyring.c
@@ -20,6 +20,7 @@
 
 #include <crypto/skcipher.h>
 #include <linux/key-type.h>
+#include <linux/random.h>
 #include <linux/seq_file.h>
 
 #include "fscrypt_private.h"
@@ -43,8 +44,11 @@
 
 	wipe_master_key_secret(&mk->mk_secret);
 
-	for (i = 0; i < ARRAY_SIZE(mk->mk_mode_keys); i++)
-		crypto_free_skcipher(mk->mk_mode_keys[i]);
+	for (i = 0; i <= FSCRYPT_MODE_MAX; i++) {
+		fscrypt_destroy_prepared_key(&mk->mk_direct_keys[i]);
+		fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_64_keys[i]);
+		fscrypt_destroy_prepared_key(&mk->mk_iv_ino_lblk_32_keys[i]);
+	}
 
 	key_put(mk->mk_users);
 	kzfree(mk);
@@ -209,7 +213,11 @@
 	if (IS_ERR(keyring))
 		return PTR_ERR(keyring);
 
-	/* Pairs with READ_ONCE() in fscrypt_find_master_key() */
+	/*
+	 * Pairs with the smp_load_acquire() in fscrypt_find_master_key().
+	 * I.e., here we publish ->s_master_keys with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.
+	 */
 	smp_store_release(&sb->s_master_keys, keyring);
 	return 0;
 }
@@ -230,8 +238,13 @@
 	struct key *keyring;
 	char description[FSCRYPT_MK_DESCRIPTION_SIZE];
 
-	/* pairs with smp_store_release() in allocate_filesystem_keyring() */
-	keyring = READ_ONCE(sb->s_master_keys);
+	/*
+	 * Pairs with the smp_store_release() in allocate_filesystem_keyring().
+	 * I.e., another task can publish ->s_master_keys concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	keyring = smp_load_acquire(&sb->s_master_keys);
 	if (keyring == NULL)
 		return ERR_PTR(-ENOKEY); /* No keyring yet, so no keys yet. */
 
@@ -334,7 +347,6 @@
 	mk->mk_spec = *mk_spec;
 
 	move_master_key_secret(&mk->mk_secret, secret);
-	init_rwsem(&mk->mk_secret_sem);
 
 	refcount_set(&mk->mk_refcount, 1); /* secret is present */
 	INIT_LIST_HEAD(&mk->mk_decrypted_inodes);
@@ -414,17 +426,14 @@
 	}
 
 	/* Re-add the secret if needed. */
-	if (rekey) {
-		down_write(&mk->mk_secret_sem);
+	if (rekey)
 		move_master_key_secret(&mk->mk_secret, secret);
-		up_write(&mk->mk_secret_sem);
-	}
 	return 0;
 }
 
-static int add_master_key(struct super_block *sb,
-			  struct fscrypt_master_key_secret *secret,
-			  const struct fscrypt_key_specifier *mk_spec)
+static int do_add_master_key(struct super_block *sb,
+			     struct fscrypt_master_key_secret *secret,
+			     const struct fscrypt_key_specifier *mk_spec)
 {
 	static DEFINE_MUTEX(fscrypt_add_key_mutex);
 	struct key *key;
@@ -463,6 +472,154 @@
 	return err;
 }
 
+/* Size of software "secret" derived from hardware-wrapped key */
+#define RAW_SECRET_SIZE 32
+
+static int add_master_key(struct super_block *sb,
+			  struct fscrypt_master_key_secret *secret,
+			  struct fscrypt_key_specifier *key_spec)
+{
+	int err;
+
+	if (key_spec->type == FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER) {
+		u8 _kdf_key[RAW_SECRET_SIZE];
+		u8 *kdf_key = secret->raw;
+		unsigned int kdf_key_size = secret->size;
+
+		if (secret->is_hw_wrapped) {
+			kdf_key = _kdf_key;
+			kdf_key_size = RAW_SECRET_SIZE;
+			err = fscrypt_derive_raw_secret(sb, secret->raw,
+							secret->size,
+							kdf_key, kdf_key_size);
+			if (err)
+				return err;
+		}
+		err = fscrypt_init_hkdf(&secret->hkdf, kdf_key, kdf_key_size);
+		/*
+		 * Now that the HKDF context is initialized, the raw HKDF key is
+		 * no longer needed.
+		 */
+		memzero_explicit(kdf_key, kdf_key_size);
+		if (err)
+			return err;
+
+		/* Calculate the key identifier */
+		err = fscrypt_hkdf_expand(&secret->hkdf,
+					  HKDF_CONTEXT_KEY_IDENTIFIER, NULL, 0,
+					  key_spec->u.identifier,
+					  FSCRYPT_KEY_IDENTIFIER_SIZE);
+		if (err)
+			return err;
+	}
+	return do_add_master_key(sb, secret, key_spec);
+}
+
+static int fscrypt_provisioning_key_preparse(struct key_preparsed_payload *prep)
+{
+	const struct fscrypt_provisioning_key_payload *payload = prep->data;
+
+	BUILD_BUG_ON(FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE < FSCRYPT_MAX_KEY_SIZE);
+
+	if (prep->datalen < sizeof(*payload) + FSCRYPT_MIN_KEY_SIZE ||
+	    prep->datalen > sizeof(*payload) + FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE)
+		return -EINVAL;
+
+	if (payload->type != FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR &&
+	    payload->type != FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER)
+		return -EINVAL;
+
+	if (payload->__reserved)
+		return -EINVAL;
+
+	prep->payload.data[0] = kmemdup(payload, prep->datalen, GFP_KERNEL);
+	if (!prep->payload.data[0])
+		return -ENOMEM;
+
+	prep->quotalen = prep->datalen;
+	return 0;
+}
+
+static void fscrypt_provisioning_key_free_preparse(
+					struct key_preparsed_payload *prep)
+{
+	kzfree(prep->payload.data[0]);
+}
+
+static void fscrypt_provisioning_key_describe(const struct key *key,
+					      struct seq_file *m)
+{
+	seq_puts(m, key->description);
+	if (key_is_positive(key)) {
+		const struct fscrypt_provisioning_key_payload *payload =
+			key->payload.data[0];
+
+		seq_printf(m, ": %u [%u]", key->datalen, payload->type);
+	}
+}
+
+static void fscrypt_provisioning_key_destroy(struct key *key)
+{
+	kzfree(key->payload.data[0]);
+}
+
+static struct key_type key_type_fscrypt_provisioning = {
+	.name			= "fscrypt-provisioning",
+	.preparse		= fscrypt_provisioning_key_preparse,
+	.free_preparse		= fscrypt_provisioning_key_free_preparse,
+	.instantiate		= generic_key_instantiate,
+	.describe		= fscrypt_provisioning_key_describe,
+	.destroy		= fscrypt_provisioning_key_destroy,
+};
+
+/*
+ * Retrieve the raw key from the Linux keyring key specified by 'key_id', and
+ * store it into 'secret'.
+ *
+ * The key must be of type "fscrypt-provisioning" and must have the field
+ * fscrypt_provisioning_key_payload::type set to 'type', indicating that it's
+ * only usable with fscrypt with the particular KDF version identified by
+ * 'type'.  We don't use the "logon" key type because there's no way to
+ * completely restrict the use of such keys; they can be used by any kernel API
+ * that accepts "logon" keys and doesn't require a specific service prefix.
+ *
+ * The ability to specify the key via Linux keyring key is intended for cases
+ * where userspace needs to re-add keys after the filesystem is unmounted and
+ * re-mounted.  Most users should just provide the raw key directly instead.
+ */
+static int get_keyring_key(u32 key_id, u32 type,
+			   struct fscrypt_master_key_secret *secret)
+{
+	key_ref_t ref;
+	struct key *key;
+	const struct fscrypt_provisioning_key_payload *payload;
+	int err;
+
+	ref = lookup_user_key(key_id, 0, KEY_NEED_SEARCH);
+	if (IS_ERR(ref))
+		return PTR_ERR(ref);
+	key = key_ref_to_ptr(ref);
+
+	if (key->type != &key_type_fscrypt_provisioning)
+		goto bad_key;
+	payload = key->payload.data[0];
+
+	/* Don't allow fscrypt v1 keys to be used as v2 keys and vice versa. */
+	if (payload->type != type)
+		goto bad_key;
+
+	secret->size = key->datalen - sizeof(*payload);
+	memcpy(secret->raw, payload->raw, secret->size);
+	err = 0;
+	goto out_put;
+
+bad_key:
+	err = -EKEYREJECTED;
+out_put:
+	key_ref_put(ref);
+	return err;
+}
+
 /*
  * Add a master encryption key to the filesystem, causing all files which were
  * encrypted with it to appear "unlocked" (decrypted) when accessed.
@@ -501,61 +658,60 @@
 	if (!valid_key_spec(&arg.key_spec))
 		return -EINVAL;
 
-	if (arg.raw_size < FSCRYPT_MIN_KEY_SIZE ||
-	    arg.raw_size > FSCRYPT_MAX_KEY_SIZE)
-		return -EINVAL;
-
 	if (memchr_inv(arg.__reserved, 0, sizeof(arg.__reserved)))
 		return -EINVAL;
 
+	/*
+	 * Only root can add keys that are identified by an arbitrary descriptor
+	 * rather than by a cryptographic hash --- since otherwise a malicious
+	 * user could add the wrong key.
+	 */
+	if (arg.key_spec.type == FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR &&
+	    !capable(CAP_SYS_ADMIN))
+		return -EACCES;
+
 	memset(&secret, 0, sizeof(secret));
-	secret.size = arg.raw_size;
-	err = -EFAULT;
-	if (copy_from_user(secret.raw, uarg->raw, secret.size))
-		goto out_wipe_secret;
 
-	switch (arg.key_spec.type) {
-	case FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR:
-		/*
-		 * Only root can add keys that are identified by an arbitrary
-		 * descriptor rather than by a cryptographic hash --- since
-		 * otherwise a malicious user could add the wrong key.
-		 */
-		err = -EACCES;
-		if (!capable(CAP_SYS_ADMIN))
-			goto out_wipe_secret;
-		break;
-	case FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER:
-		err = fscrypt_init_hkdf(&secret.hkdf, secret.raw, secret.size);
+	if (arg.__flags) {
+		if (arg.__flags & ~__FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED)
+			return -EINVAL;
+		if (arg.key_spec.type != FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER)
+			return -EINVAL;
+		secret.is_hw_wrapped = true;
+	}
+
+	if (arg.key_id) {
+		if (arg.raw_size != 0)
+			return -EINVAL;
+		err = get_keyring_key(arg.key_id, arg.key_spec.type, &secret);
 		if (err)
 			goto out_wipe_secret;
-
-		/*
-		 * Now that the HKDF context is initialized, the raw key is no
-		 * longer needed.
-		 */
-		memzero_explicit(secret.raw, secret.size);
-
-		/* Calculate the key identifier and return it to userspace. */
-		err = fscrypt_hkdf_expand(&secret.hkdf,
-					  HKDF_CONTEXT_KEY_IDENTIFIER,
-					  NULL, 0, arg.key_spec.u.identifier,
-					  FSCRYPT_KEY_IDENTIFIER_SIZE);
-		if (err)
-			goto out_wipe_secret;
-		err = -EFAULT;
-		if (copy_to_user(uarg->key_spec.u.identifier,
-				 arg.key_spec.u.identifier,
-				 FSCRYPT_KEY_IDENTIFIER_SIZE))
-			goto out_wipe_secret;
-		break;
-	default:
-		WARN_ON(1);
 		err = -EINVAL;
-		goto out_wipe_secret;
+		if (secret.size > FSCRYPT_MAX_KEY_SIZE && !secret.is_hw_wrapped)
+			goto out_wipe_secret;
+	} else {
+		if (arg.raw_size < FSCRYPT_MIN_KEY_SIZE ||
+		    arg.raw_size > (secret.is_hw_wrapped ?
+				    FSCRYPT_MAX_HW_WRAPPED_KEY_SIZE :
+				    FSCRYPT_MAX_KEY_SIZE))
+			return -EINVAL;
+		secret.size = arg.raw_size;
+		err = -EFAULT;
+		if (copy_from_user(secret.raw, uarg->raw, secret.size))
+			goto out_wipe_secret;
 	}
 
 	err = add_master_key(sb, &secret, &arg.key_spec);
+	if (err)
+		goto out_wipe_secret;
+
+	/* Return the key identifier to userspace, if applicable */
+	err = -EFAULT;
+	if (arg.key_spec.type == FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER &&
+	    copy_to_user(uarg->key_spec.u.identifier, arg.key_spec.u.identifier,
+			 FSCRYPT_KEY_IDENTIFIER_SIZE))
+		goto out_wipe_secret;
+	err = 0;
 out_wipe_secret:
 	wipe_master_key_secret(&secret);
 	return err;
@@ -563,6 +719,29 @@
 EXPORT_SYMBOL_GPL(fscrypt_ioctl_add_key);
 
 /*
+ * Add the key for '-o test_dummy_encryption' to the filesystem keyring.
+ *
+ * Use a per-boot random key to prevent people from misusing this option.
+ */
+int fscrypt_add_test_dummy_key(struct super_block *sb,
+			       struct fscrypt_key_specifier *key_spec)
+{
+	static u8 test_key[FSCRYPT_MAX_KEY_SIZE];
+	struct fscrypt_master_key_secret secret;
+	int err;
+
+	get_random_once(test_key, FSCRYPT_MAX_KEY_SIZE);
+
+	memset(&secret, 0, sizeof(secret));
+	secret.size = FSCRYPT_MAX_KEY_SIZE;
+	memcpy(secret.raw, test_key, FSCRYPT_MAX_KEY_SIZE);
+
+	err = add_master_key(sb, &secret, key_spec);
+	wipe_master_key_secret(&secret);
+	return err;
+}
+
+/*
  * Verify that the current user has added a master key with the given identifier
  * (returns -ENOKEY if not).  This is needed to prevent a user from encrypting
  * their files using some other user's key which they don't actually know.
@@ -664,6 +843,7 @@
 	struct list_head *pos;
 	size_t busy_count = 0;
 	unsigned long ino;
+	char ino_str[50] = "";
 
 	spin_lock(&mk->mk_decrypted_inodes_lock);
 
@@ -685,11 +865,15 @@
 	}
 	spin_unlock(&mk->mk_decrypted_inodes_lock);
 
+	/* If the inode is currently being created, ino may still be 0. */
+	if (ino)
+		snprintf(ino_str, sizeof(ino_str), ", including ino %lu", ino);
+
 	fscrypt_warn(NULL,
-		     "%s: %zu inode(s) still busy after removing key with %s %*phN, including ino %lu",
+		     "%s: %zu inode(s) still busy after removing key with %s %*phN%s",
 		     sb->s_id, busy_count, master_key_spec_type(&mk->mk_spec),
 		     master_key_spec_len(&mk->mk_spec), (u8 *)&mk->mk_spec.u,
-		     ino);
+		     ino_str);
 	return -EBUSY;
 }
 
@@ -817,10 +1001,8 @@
 	/* No user claims remaining.  Go ahead and wipe the secret. */
 	dead = false;
 	if (is_master_key_secret_present(&mk->mk_secret)) {
-		down_write(&mk->mk_secret_sem);
 		wipe_master_key_secret(&mk->mk_secret);
 		dead = refcount_dec_and_test(&mk->mk_refcount);
-		up_write(&mk->mk_secret_sem);
 	}
 	up_write(&key->sem);
 	if (dead) {
@@ -965,8 +1147,14 @@
 	if (err)
 		goto err_unregister_fscrypt;
 
+	err = register_key_type(&key_type_fscrypt_provisioning);
+	if (err)
+		goto err_unregister_fscrypt_user;
+
 	return 0;
 
+err_unregister_fscrypt_user:
+	unregister_key_type(&key_type_fscrypt_user);
 err_unregister_fscrypt:
 	unregister_key_type(&key_type_fscrypt);
 	return err;
diff --git a/fs/crypto/keysetup.c b/fs/crypto/keysetup.c
index 3e86f75..163dba6 100644
--- a/fs/crypto/keysetup.c
+++ b/fs/crypto/keysetup.c
@@ -8,21 +8,19 @@
  * Heavily modified since then.
  */
 
-#include <crypto/aes.h>
-#include <crypto/sha.h>
 #include <crypto/skcipher.h>
 #include <linux/key.h>
+#include <linux/random.h>
 
 #include "fscrypt_private.h"
 
-static struct crypto_shash *essiv_hash_tfm;
-
-static struct fscrypt_mode available_modes[] = {
+struct fscrypt_mode fscrypt_modes[] = {
 	[FSCRYPT_MODE_AES_256_XTS] = {
 		.friendly_name = "AES-256-XTS",
 		.cipher_str = "xts(aes)",
 		.keysize = 64,
 		.ivsize = 16,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_AES_256_XTS,
 	},
 	[FSCRYPT_MODE_AES_256_CTS] = {
 		.friendly_name = "AES-256-CTS-CBC",
@@ -31,11 +29,11 @@
 		.ivsize = 16,
 	},
 	[FSCRYPT_MODE_AES_128_CBC] = {
-		.friendly_name = "AES-128-CBC",
-		.cipher_str = "cbc(aes)",
+		.friendly_name = "AES-128-CBC-ESSIV",
+		.cipher_str = "essiv(cbc(aes),sha256)",
 		.keysize = 16,
 		.ivsize = 16,
-		.needs_essiv = true,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV,
 	},
 	[FSCRYPT_MODE_AES_128_CTS] = {
 		.friendly_name = "AES-128-CTS-CBC",
@@ -48,20 +46,23 @@
 		.cipher_str = "adiantum(xchacha12,aes)",
 		.keysize = 32,
 		.ivsize = 32,
+		.blk_crypto_mode = BLK_ENCRYPTION_MODE_ADIANTUM,
 	},
 };
 
+static DEFINE_MUTEX(fscrypt_mode_key_setup_mutex);
+
 static struct fscrypt_mode *
 select_encryption_mode(const union fscrypt_policy *policy,
 		       const struct inode *inode)
 {
-	BUILD_BUG_ON(ARRAY_SIZE(available_modes) != FSCRYPT_MODE_MAX + 1);
+	BUILD_BUG_ON(ARRAY_SIZE(fscrypt_modes) != FSCRYPT_MODE_MAX + 1);
 
 	if (S_ISREG(inode->i_mode))
-		return &available_modes[fscrypt_policy_contents_mode(policy)];
+		return &fscrypt_modes[fscrypt_policy_contents_mode(policy)];
 
 	if (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))
-		return &available_modes[fscrypt_policy_fnames_mode(policy)];
+		return &fscrypt_modes[fscrypt_policy_fnames_mode(policy)];
 
 	WARN_ONCE(1, "fscrypt: filesystem tried to load encryption info for inode %lu, which is not encryptable (file type %d)\n",
 		  inode->i_ino, (inode->i_mode & S_IFMT));
@@ -69,9 +70,9 @@
 }
 
 /* Create a symmetric cipher object for the given encryption mode and key */
-struct crypto_skcipher *fscrypt_allocate_skcipher(struct fscrypt_mode *mode,
-						  const u8 *raw_key,
-						  const struct inode *inode)
+static struct crypto_skcipher *
+fscrypt_allocate_skcipher(struct fscrypt_mode *mode, const u8 *raw_key,
+			  const struct inode *inode)
 {
 	struct crypto_skcipher *tfm;
 	int err;
@@ -88,18 +89,19 @@
 			    mode->cipher_str, PTR_ERR(tfm));
 		return tfm;
 	}
-	if (unlikely(!mode->logged_impl_name)) {
+	if (!xchg(&mode->logged_impl_name, 1)) {
 		/*
 		 * fscrypt performance can vary greatly depending on which
 		 * crypto algorithm implementation is used.  Help people debug
 		 * performance problems by logging the ->cra_driver_name the
-		 * first time a mode is used.  Note that multiple threads can
-		 * race here, but it doesn't really matter.
+		 * first time a mode is used.
 		 */
-		mode->logged_impl_name = true;
 		pr_info("fscrypt: %s using implementation \"%s\"\n",
-			mode->friendly_name,
-			crypto_skcipher_alg(tfm)->base.cra_driver_name);
+			mode->friendly_name, crypto_skcipher_driver_name(tfm));
+	}
+	if (WARN_ON(crypto_skcipher_ivsize(tfm) != mode->ivsize)) {
+		err = -EINVAL;
+		goto err_free_tfm;
 	}
 	crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
 	err = crypto_skcipher_setkey(tfm, raw_key, mode->keysize);
@@ -113,187 +115,275 @@
 	return ERR_PTR(err);
 }
 
-static int derive_essiv_salt(const u8 *key, int keysize, u8 *salt)
+/*
+ * Prepare the crypto transform object or blk-crypto key in @prep_key, given the
+ * raw key, encryption mode, and flag indicating which encryption implementation
+ * (fs-layer or blk-crypto) will be used.
+ */
+int fscrypt_prepare_key(struct fscrypt_prepared_key *prep_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped, const struct fscrypt_info *ci)
 {
-	struct crypto_shash *tfm = READ_ONCE(essiv_hash_tfm);
+	struct crypto_skcipher *tfm;
 
-	/* init hash transform on demand */
-	if (unlikely(!tfm)) {
-		struct crypto_shash *prev_tfm;
+	if (fscrypt_using_inline_encryption(ci))
+		return fscrypt_prepare_inline_crypt_key(prep_key,
+				raw_key, raw_key_size, is_hw_wrapped, ci);
 
-		tfm = crypto_alloc_shash("sha256", 0, 0);
-		if (IS_ERR(tfm)) {
-			if (PTR_ERR(tfm) == -ENOENT) {
-				fscrypt_warn(NULL,
-					     "Missing crypto API support for SHA-256");
-				return -ENOPKG;
-			}
-			fscrypt_err(NULL,
-				    "Error allocating SHA-256 transform: %ld",
-				    PTR_ERR(tfm));
-			return PTR_ERR(tfm);
-		}
-		prev_tfm = cmpxchg(&essiv_hash_tfm, NULL, tfm);
-		if (prev_tfm) {
-			crypto_free_shash(tfm);
-			tfm = prev_tfm;
-		}
-	}
-
-	{
-		SHASH_DESC_ON_STACK(desc, tfm);
-		desc->tfm = tfm;
-
-		return crypto_shash_digest(desc, key, keysize, salt);
-	}
-}
-
-static int init_essiv_generator(struct fscrypt_info *ci, const u8 *raw_key,
-				int keysize)
-{
-	int err;
-	struct crypto_cipher *essiv_tfm;
-	u8 salt[SHA256_DIGEST_SIZE];
-
-	if (WARN_ON(ci->ci_mode->ivsize != AES_BLOCK_SIZE))
+	if (WARN_ON(is_hw_wrapped || raw_key_size != ci->ci_mode->keysize))
 		return -EINVAL;
 
-	essiv_tfm = crypto_alloc_cipher("aes", 0, 0);
-	if (IS_ERR(essiv_tfm))
-		return PTR_ERR(essiv_tfm);
-
-	ci->ci_essiv_tfm = essiv_tfm;
-
-	err = derive_essiv_salt(raw_key, keysize, salt);
-	if (err)
-		goto out;
-
+	tfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key, ci->ci_inode);
+	if (IS_ERR(tfm))
+		return PTR_ERR(tfm);
 	/*
-	 * Using SHA256 to derive the salt/key will result in AES-256 being
-	 * used for IV generation. File contents encryption will still use the
-	 * configured keysize (AES-128) nevertheless.
+	 * Pairs with the smp_load_acquire() in fscrypt_is_key_prepared().
+	 * I.e., here we publish ->tfm with a RELEASE barrier so that
+	 * concurrent tasks can ACQUIRE it.  Note that this concurrency is only
+	 * possible for per-mode keys, not for per-file keys.
 	 */
-	err = crypto_cipher_setkey(essiv_tfm, salt, sizeof(salt));
-	if (err)
-		goto out;
-
-out:
-	memzero_explicit(salt, sizeof(salt));
-	return err;
-}
-
-/* Given the per-file key, set up the file's crypto transform object(s) */
-int fscrypt_set_derived_key(struct fscrypt_info *ci, const u8 *derived_key)
-{
-	struct fscrypt_mode *mode = ci->ci_mode;
-	struct crypto_skcipher *ctfm;
-	int err;
-
-	ctfm = fscrypt_allocate_skcipher(mode, derived_key, ci->ci_inode);
-	if (IS_ERR(ctfm))
-		return PTR_ERR(ctfm);
-
-	ci->ci_ctfm = ctfm;
-
-	if (mode->needs_essiv) {
-		err = init_essiv_generator(ci, derived_key, mode->keysize);
-		if (err) {
-			fscrypt_warn(ci->ci_inode,
-				     "Error initializing ESSIV generator: %d",
-				     err);
-			return err;
-		}
-	}
+	smp_store_release(&prep_key->tfm, tfm);
 	return 0;
 }
 
-static int setup_per_mode_key(struct fscrypt_info *ci,
-			      struct fscrypt_master_key *mk)
+/* Destroy a crypto transform object and/or blk-crypto key. */
+void fscrypt_destroy_prepared_key(struct fscrypt_prepared_key *prep_key)
 {
+	crypto_free_skcipher(prep_key->tfm);
+	fscrypt_destroy_inline_crypt_key(prep_key);
+}
+
+/* Given a per-file encryption key, set up the file's crypto transform object */
+int fscrypt_set_per_file_enc_key(struct fscrypt_info *ci, const u8 *raw_key)
+{
+	ci->ci_owns_key = true;
+	return fscrypt_prepare_key(&ci->ci_enc_key, raw_key,
+				   ci->ci_mode->keysize,
+				   false /*is_hw_wrapped*/, ci);
+}
+
+static int setup_per_mode_enc_key(struct fscrypt_info *ci,
+				  struct fscrypt_master_key *mk,
+				  struct fscrypt_prepared_key *keys,
+				  u8 hkdf_context, bool include_fs_uuid)
+{
+	const struct inode *inode = ci->ci_inode;
+	const struct super_block *sb = inode->i_sb;
 	struct fscrypt_mode *mode = ci->ci_mode;
-	u8 mode_num = mode - available_modes;
-	struct crypto_skcipher *tfm, *prev_tfm;
+	const u8 mode_num = mode - fscrypt_modes;
+	struct fscrypt_prepared_key *prep_key;
 	u8 mode_key[FSCRYPT_MAX_KEY_SIZE];
+	u8 hkdf_info[sizeof(mode_num) + sizeof(sb->s_uuid)];
+	unsigned int hkdf_infolen = 0;
 	int err;
 
-	if (WARN_ON(mode_num >= ARRAY_SIZE(mk->mk_mode_keys)))
+	if (WARN_ON(mode_num > FSCRYPT_MODE_MAX))
 		return -EINVAL;
 
-	/* pairs with cmpxchg() below */
-	tfm = READ_ONCE(mk->mk_mode_keys[mode_num]);
-	if (likely(tfm != NULL))
-		goto done;
+	prep_key = &keys[mode_num];
+	if (fscrypt_is_key_prepared(prep_key, ci)) {
+		ci->ci_enc_key = *prep_key;
+		return 0;
+	}
 
-	BUILD_BUG_ON(sizeof(mode_num) != 1);
-	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
-				  HKDF_CONTEXT_PER_MODE_KEY,
-				  &mode_num, sizeof(mode_num),
-				  mode_key, mode->keysize);
+	mutex_lock(&fscrypt_mode_key_setup_mutex);
+
+	if (fscrypt_is_key_prepared(prep_key, ci))
+		goto done_unlock;
+
+	if (mk->mk_secret.is_hw_wrapped && S_ISREG(inode->i_mode)) {
+		int i;
+
+		if (!fscrypt_using_inline_encryption(ci)) {
+			fscrypt_warn(ci->ci_inode,
+				     "Hardware-wrapped keys require inline encryption (-o inlinecrypt)");
+			err = -EINVAL;
+			goto out_unlock;
+		}
+		for (i = 0; i <= FSCRYPT_MODE_MAX; i++) {
+			if (fscrypt_is_key_prepared(&keys[i], ci)) {
+				fscrypt_warn(ci->ci_inode,
+					     "Each hardware-wrapped key can only be used with one encryption mode");
+				err = -EINVAL;
+				goto out_unlock;
+			}
+		}
+		err = fscrypt_prepare_key(prep_key, mk->mk_secret.raw,
+					  mk->mk_secret.size, true, ci);
+		if (err)
+			goto out_unlock;
+	} else {
+		BUILD_BUG_ON(sizeof(mode_num) != 1);
+		BUILD_BUG_ON(sizeof(sb->s_uuid) != 16);
+		BUILD_BUG_ON(sizeof(hkdf_info) != 17);
+		hkdf_info[hkdf_infolen++] = mode_num;
+		if (include_fs_uuid) {
+			memcpy(&hkdf_info[hkdf_infolen], &sb->s_uuid,
+				   sizeof(sb->s_uuid));
+			hkdf_infolen += sizeof(sb->s_uuid);
+		}
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  hkdf_context, hkdf_info, hkdf_infolen,
+					  mode_key, mode->keysize);
+		if (err)
+			goto out_unlock;
+		err = fscrypt_prepare_key(prep_key, mode_key, mode->keysize,
+					  false /*is_hw_wrapped*/, ci);
+		memzero_explicit(mode_key, mode->keysize);
+		if (err)
+			goto out_unlock;
+	}
+done_unlock:
+	ci->ci_enc_key = *prep_key;
+	err = 0;
+out_unlock:
+	mutex_unlock(&fscrypt_mode_key_setup_mutex);
+	return err;
+}
+
+int fscrypt_derive_dirhash_key(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk)
+{
+	int err;
+
+	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf, HKDF_CONTEXT_DIRHASH_KEY,
+				  ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE,
+				  (u8 *)&ci->ci_dirhash_key,
+				  sizeof(ci->ci_dirhash_key));
 	if (err)
 		return err;
-	tfm = fscrypt_allocate_skcipher(mode, mode_key, ci->ci_inode);
-	memzero_explicit(mode_key, mode->keysize);
-	if (IS_ERR(tfm))
-		return PTR_ERR(tfm);
+	ci->ci_dirhash_key_initialized = true;
+	return 0;
+}
 
-	/* pairs with READ_ONCE() above */
-	prev_tfm = cmpxchg(&mk->mk_mode_keys[mode_num], NULL, tfm);
-	if (prev_tfm != NULL) {
-		crypto_free_skcipher(tfm);
-		tfm = prev_tfm;
+void fscrypt_hash_inode_number(struct fscrypt_info *ci,
+			       const struct fscrypt_master_key *mk)
+{
+	WARN_ON(ci->ci_inode->i_ino == 0);
+	WARN_ON(!mk->mk_ino_hash_key_initialized);
+
+	ci->ci_hashed_ino = (u32)siphash_1u64(ci->ci_inode->i_ino,
+					      &mk->mk_ino_hash_key);
+}
+
+static int fscrypt_setup_iv_ino_lblk_32_key(struct fscrypt_info *ci,
+					    struct fscrypt_master_key *mk)
+{
+	int err;
+
+	err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_32_keys,
+				     HKDF_CONTEXT_IV_INO_LBLK_32_KEY, true);
+	if (err)
+		return err;
+
+	/* pairs with smp_store_release() below */
+	if (!smp_load_acquire(&mk->mk_ino_hash_key_initialized)) {
+
+		mutex_lock(&fscrypt_mode_key_setup_mutex);
+
+		if (mk->mk_ino_hash_key_initialized)
+			goto unlock;
+
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  HKDF_CONTEXT_INODE_HASH_KEY, NULL, 0,
+					  (u8 *)&mk->mk_ino_hash_key,
+					  sizeof(mk->mk_ino_hash_key));
+		if (err)
+			goto unlock;
+		/* pairs with smp_load_acquire() above */
+		smp_store_release(&mk->mk_ino_hash_key_initialized, true);
+unlock:
+		mutex_unlock(&fscrypt_mode_key_setup_mutex);
+		if (err)
+			return err;
 	}
-done:
-	ci->ci_ctfm = tfm;
+
+	/*
+	 * New inodes may not have an inode number assigned yet.
+	 * Hashing their inode number is delayed until later.
+	 */
+	if (ci->ci_inode->i_ino)
+		fscrypt_hash_inode_number(ci, mk);
 	return 0;
 }
 
 static int fscrypt_setup_v2_file_key(struct fscrypt_info *ci,
-				     struct fscrypt_master_key *mk)
+				     struct fscrypt_master_key *mk,
+				     bool need_dirhash_key)
 {
-	u8 derived_key[FSCRYPT_MAX_KEY_SIZE];
 	int err;
 
+	if (mk->mk_secret.is_hw_wrapped &&
+	    !(ci->ci_policy.v2.flags & (FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 |
+					FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32))) {
+		fscrypt_warn(ci->ci_inode,
+			     "Hardware-wrapped keys are only supported with IV_INO_LBLK policies");
+		return -EINVAL;
+	}
+
 	if (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) {
 		/*
-		 * DIRECT_KEY: instead of deriving per-file keys, the per-file
-		 * nonce will be included in all the IVs.  But unlike v1
-		 * policies, for v2 policies in this case we don't encrypt with
-		 * the master key directly but rather derive a per-mode key.
-		 * This ensures that the master key is consistently used only
-		 * for HKDF, avoiding key reuse issues.
+		 * DIRECT_KEY: instead of deriving per-file encryption keys, the
+		 * per-file nonce will be included in all the IVs.  But unlike
+		 * v1 policies, for v2 policies in this case we don't encrypt
+		 * with the master key directly but rather derive a per-mode
+		 * encryption key.  This ensures that the master key is
+		 * consistently used only for HKDF, avoiding key reuse issues.
 		 */
-		if (!fscrypt_mode_supports_direct_key(ci->ci_mode)) {
-			fscrypt_warn(ci->ci_inode,
-				     "Direct key flag not allowed with %s",
-				     ci->ci_mode->friendly_name);
-			return -EINVAL;
-		}
-		return setup_per_mode_key(ci, mk);
-	}
+		err = setup_per_mode_enc_key(ci, mk, mk->mk_direct_keys,
+					     HKDF_CONTEXT_DIRECT_KEY, false);
+	} else if (ci->ci_policy.v2.flags &
+		   FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) {
+		/*
+		 * IV_INO_LBLK_64: encryption keys are derived from (master_key,
+		 * mode_num, filesystem_uuid), and inode number is included in
+		 * the IVs.  This format is optimized for use with inline
+		 * encryption hardware compliant with the UFS standard.
+		 */
+		err = setup_per_mode_enc_key(ci, mk, mk->mk_iv_ino_lblk_64_keys,
+					     HKDF_CONTEXT_IV_INO_LBLK_64_KEY,
+					     true);
+	} else if (ci->ci_policy.v2.flags &
+		   FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) {
+		err = fscrypt_setup_iv_ino_lblk_32_key(ci, mk);
+	} else {
+		u8 derived_key[FSCRYPT_MAX_KEY_SIZE];
 
-	err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
-				  HKDF_CONTEXT_PER_FILE_KEY,
-				  ci->ci_nonce, FS_KEY_DERIVATION_NONCE_SIZE,
-				  derived_key, ci->ci_mode->keysize);
+		err = fscrypt_hkdf_expand(&mk->mk_secret.hkdf,
+					  HKDF_CONTEXT_PER_FILE_ENC_KEY,
+					  ci->ci_nonce, FSCRYPT_FILE_NONCE_SIZE,
+					  derived_key, ci->ci_mode->keysize);
+		if (err)
+			return err;
+
+		err = fscrypt_set_per_file_enc_key(ci, derived_key);
+		memzero_explicit(derived_key, ci->ci_mode->keysize);
+	}
 	if (err)
 		return err;
 
-	err = fscrypt_set_derived_key(ci, derived_key);
-	memzero_explicit(derived_key, ci->ci_mode->keysize);
-	return err;
+	/* Derive a secret dirhash key for directories that need it. */
+	if (need_dirhash_key) {
+		err = fscrypt_derive_dirhash_key(ci, mk);
+		if (err)
+			return err;
+	}
+
+	return 0;
 }
 
 /*
  * Find the master key, then set up the inode's actual encryption key.
  *
  * If the master key is found in the filesystem-level keyring, then the
- * corresponding 'struct key' is returned in *master_key_ret with
- * ->mk_secret_sem read-locked.  This is needed to ensure that only one task
- * links the fscrypt_info into ->mk_decrypted_inodes (as multiple tasks may race
- * to create an fscrypt_info for the same inode), and to synchronize the master
- * key being removed with a new inode starting to use it.
+ * corresponding 'struct key' is returned in *master_key_ret with its semaphore
+ * read-locked.  This is needed to ensure that only one task links the
+ * fscrypt_info into ->mk_decrypted_inodes (as multiple tasks may race to create
+ * an fscrypt_info for the same inode), and to synchronize the master key being
+ * removed with a new inode starting to use it.
  */
 static int setup_file_encryption_key(struct fscrypt_info *ci,
+				     bool need_dirhash_key,
 				     struct key **master_key_ret)
 {
 	struct key *key;
@@ -325,6 +415,10 @@
 		    ci->ci_policy.version != FSCRYPT_POLICY_V1)
 			return PTR_ERR(key);
 
+		err = fscrypt_select_encryption_impl(ci, false);
+		if (err)
+			return err;
+
 		/*
 		 * As a legacy fallback for v1 policies, search for the key in
 		 * the current task's subscribed keyrings too.  Don't move this
@@ -335,7 +429,7 @@
 	}
 
 	mk = key->payload.data[0];
-	down_read(&mk->mk_secret_sem);
+	down_read(&key->sem);
 
 	/* Has the secret been removed (via FS_IOC_REMOVE_ENCRYPTION_KEY)? */
 	if (!is_master_key_secret_present(&mk->mk_secret)) {
@@ -359,12 +453,16 @@
 		goto out_release_key;
 	}
 
+	err = fscrypt_select_encryption_impl(ci, mk->mk_secret.is_hw_wrapped);
+	if (err)
+		goto out_release_key;
+
 	switch (ci->ci_policy.version) {
 	case FSCRYPT_POLICY_V1:
 		err = fscrypt_setup_v1_file_key(ci, mk->mk_secret.raw);
 		break;
 	case FSCRYPT_POLICY_V2:
-		err = fscrypt_setup_v2_file_key(ci, mk);
+		err = fscrypt_setup_v2_file_key(ci, mk, need_dirhash_key);
 		break;
 	default:
 		WARN_ON(1);
@@ -378,7 +476,7 @@
 	return 0;
 
 out_release_key:
-	up_read(&mk->mk_secret_sem);
+	up_read(&key->sem);
 	key_put(key);
 	return err;
 }
@@ -390,13 +488,10 @@
 	if (!ci)
 		return;
 
-	if (ci->ci_direct_key) {
+	if (ci->ci_direct_key)
 		fscrypt_put_direct_key(ci->ci_direct_key);
-	} else if ((ci->ci_ctfm != NULL || ci->ci_essiv_tfm != NULL) &&
-		   !fscrypt_is_direct_key_policy(&ci->ci_policy)) {
-		crypto_free_skcipher(ci->ci_ctfm);
-		crypto_free_cipher(ci->ci_essiv_tfm);
-	}
+	else if (ci->ci_owns_key)
+		fscrypt_destroy_prepared_key(&ci->ci_enc_key);
 
 	key = ci->ci_master_key;
 	if (key) {
@@ -417,75 +512,32 @@
 			key_invalidate(key);
 		key_put(key);
 	}
+	memzero_explicit(ci, sizeof(*ci));
 	kmem_cache_free(fscrypt_info_cachep, ci);
 }
 
-int fscrypt_get_encryption_info(struct inode *inode)
+static int
+fscrypt_setup_encryption_info(struct inode *inode,
+			      const union fscrypt_policy *policy,
+			      const u8 nonce[FSCRYPT_FILE_NONCE_SIZE],
+			      bool need_dirhash_key)
 {
 	struct fscrypt_info *crypt_info;
-	union fscrypt_context ctx;
 	struct fscrypt_mode *mode;
 	struct key *master_key = NULL;
 	int res;
 
-	if (fscrypt_has_encryption_key(inode))
-		return 0;
-
 	res = fscrypt_initialize(inode->i_sb->s_cop->flags);
 	if (res)
 		return res;
 
-	res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
-	if (res < 0) {
-		if (!fscrypt_dummy_context_enabled(inode) ||
-		    IS_ENCRYPTED(inode)) {
-			fscrypt_warn(inode,
-				     "Error %d getting encryption context",
-				     res);
-			return res;
-		}
-		/* Fake up a context for an unencrypted directory */
-		memset(&ctx, 0, sizeof(ctx));
-		ctx.version = FSCRYPT_CONTEXT_V1;
-		ctx.v1.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
-		ctx.v1.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
-		memset(ctx.v1.master_key_descriptor, 0x42,
-		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
-		res = sizeof(ctx.v1);
-	}
-
-	crypt_info = kmem_cache_zalloc(fscrypt_info_cachep, GFP_NOFS);
+	crypt_info = kmem_cache_zalloc(fscrypt_info_cachep, GFP_KERNEL);
 	if (!crypt_info)
 		return -ENOMEM;
 
 	crypt_info->ci_inode = inode;
-
-	res = fscrypt_policy_from_context(&crypt_info->ci_policy, &ctx, res);
-	if (res) {
-		fscrypt_warn(inode,
-			     "Unrecognized or corrupt encryption context");
-		goto out;
-	}
-
-	switch (ctx.version) {
-	case FSCRYPT_CONTEXT_V1:
-		memcpy(crypt_info->ci_nonce, ctx.v1.nonce,
-		       FS_KEY_DERIVATION_NONCE_SIZE);
-		break;
-	case FSCRYPT_CONTEXT_V2:
-		memcpy(crypt_info->ci_nonce, ctx.v2.nonce,
-		       FS_KEY_DERIVATION_NONCE_SIZE);
-		break;
-	default:
-		WARN_ON(1);
-		res = -EINVAL;
-		goto out;
-	}
-
-	if (!fscrypt_supported_policy(&crypt_info->ci_policy, inode)) {
-		res = -EINVAL;
-		goto out;
-	}
+	crypt_info->ci_policy = *policy;
+	memcpy(crypt_info->ci_nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 
 	mode = select_encryption_mode(&crypt_info->ci_policy, inode);
 	if (IS_ERR(mode)) {
@@ -495,11 +547,22 @@
 	WARN_ON(mode->ivsize > FSCRYPT_MAX_IV_SIZE);
 	crypt_info->ci_mode = mode;
 
-	res = setup_file_encryption_key(crypt_info, &master_key);
+	res = setup_file_encryption_key(crypt_info, need_dirhash_key,
+					&master_key);
 	if (res)
 		goto out;
 
+	/*
+	 * For existing inodes, multiple tasks may race to set ->i_crypt_info.
+	 * So use cmpxchg_release().  This pairs with the smp_load_acquire() in
+	 * fscrypt_get_info().  I.e., here we publish ->i_crypt_info with a
+	 * RELEASE barrier so that other tasks can ACQUIRE it.
+	 */
 	if (cmpxchg_release(&inode->i_crypt_info, NULL, crypt_info) == NULL) {
+		/*
+		 * We won the race and set ->i_crypt_info to our crypt_info.
+		 * Now link it into the master key's inode list.
+		 */
 		if (master_key) {
 			struct fscrypt_master_key *mk =
 				master_key->payload.data[0];
@@ -516,20 +579,132 @@
 	res = 0;
 out:
 	if (master_key) {
-		struct fscrypt_master_key *mk = master_key->payload.data[0];
-
-		up_read(&mk->mk_secret_sem);
+		up_read(&master_key->sem);
 		key_put(master_key);
 	}
-	if (res == -ENOKEY)
-		res = 0;
 	put_crypt_info(crypt_info);
 	return res;
 }
-EXPORT_SYMBOL(fscrypt_get_encryption_info);
 
 /**
- * fscrypt_put_encryption_info - free most of an inode's fscrypt data
+ * fscrypt_get_encryption_info() - set up an inode's encryption key
+ * @inode: the inode to set up the key for.  Must be encrypted.
+ * @allow_unsupported: if %true, treat an unsupported encryption policy (or
+ *		       unrecognized encryption context) the same way as the key
+ *		       being unavailable, instead of returning an error.  Use
+ *		       %false unless the operation being performed is needed in
+ *		       order for files (or directories) to be deleted.
+ *
+ * Set up ->i_crypt_info, if it hasn't already been done.
+ *
+ * Note: unless ->i_crypt_info is already set, this isn't %GFP_NOFS-safe.  So
+ * generally this shouldn't be called from within a filesystem transaction.
+ *
+ * Return: 0 if ->i_crypt_info was set or was already set, *or* if the
+ *	   encryption key is unavailable.  (Use fscrypt_has_encryption_key() to
+ *	   distinguish these cases.)  Also can return another -errno code.
+ */
+int fscrypt_get_encryption_info(struct inode *inode, bool allow_unsupported)
+{
+	int res;
+	union fscrypt_context ctx;
+	union fscrypt_policy policy;
+
+	if (fscrypt_has_encryption_key(inode))
+		return 0;
+
+	res = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
+	if (res < 0) {
+		if (res == -ERANGE && allow_unsupported)
+			return 0;
+		fscrypt_warn(inode, "Error %d getting encryption context", res);
+		return res;
+	}
+
+	res = fscrypt_policy_from_context(&policy, &ctx, res);
+	if (res) {
+		if (allow_unsupported)
+			return 0;
+		fscrypt_warn(inode,
+			     "Unrecognized or corrupt encryption context");
+		return res;
+	}
+
+	if (!fscrypt_supported_policy(&policy, inode)) {
+		if (allow_unsupported)
+			return 0;
+		return -EINVAL;
+	}
+
+	res = fscrypt_setup_encryption_info(inode, &policy,
+					    fscrypt_context_nonce(&ctx),
+					    IS_CASEFOLDED(inode) &&
+					    S_ISDIR(inode->i_mode));
+
+	if (res == -ENOPKG && allow_unsupported) /* Algorithm unavailable? */
+		res = 0;
+	if (res == -ENOKEY)
+		res = 0;
+	return res;
+}
+
+/**
+ * fscrypt_prepare_new_inode() - prepare to create a new inode in a directory
+ * @dir: a possibly-encrypted directory
+ * @inode: the new inode.  ->i_mode must be set already.
+ *	   ->i_ino doesn't need to be set yet.
+ * @encrypt_ret: (output) set to %true if the new inode will be encrypted
+ *
+ * If the directory is encrypted, set up its ->i_crypt_info in preparation for
+ * encrypting the name of the new file.  Also, if the new inode will be
+ * encrypted, set up its ->i_crypt_info and set *encrypt_ret=true.
+ *
+ * This isn't %GFP_NOFS-safe, and therefore it should be called before starting
+ * any filesystem transaction to create the inode.  For this reason, ->i_ino
+ * isn't required to be set yet, as the filesystem may not have set it yet.
+ *
+ * This doesn't persist the new inode's encryption context.  That still needs to
+ * be done later by calling fscrypt_set_context().
+ *
+ * Return: 0 on success, -ENOKEY if the encryption key is missing, or another
+ *	   -errno code
+ */
+int fscrypt_prepare_new_inode(struct inode *dir, struct inode *inode,
+			      bool *encrypt_ret)
+{
+	const union fscrypt_policy *policy;
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
+
+	policy = fscrypt_policy_to_inherit(dir);
+	if (policy == NULL)
+		return 0;
+	if (IS_ERR(policy))
+		return PTR_ERR(policy);
+
+	if (WARN_ON_ONCE(inode->i_mode == 0))
+		return -EINVAL;
+
+	/*
+	 * Only regular files, directories, and symlinks are encrypted.
+	 * Special files like device nodes and named pipes aren't.
+	 */
+	if (!S_ISREG(inode->i_mode) &&
+	    !S_ISDIR(inode->i_mode) &&
+	    !S_ISLNK(inode->i_mode))
+		return 0;
+
+	*encrypt_ret = true;
+
+	get_random_bytes(nonce, FSCRYPT_FILE_NONCE_SIZE);
+	return fscrypt_setup_encryption_info(inode, policy, nonce,
+					     IS_CASEFOLDED(dir) &&
+					     S_ISDIR(inode->i_mode));
+}
+EXPORT_SYMBOL_GPL(fscrypt_prepare_new_inode);
+
+/**
+ * fscrypt_put_encryption_info() - free most of an inode's fscrypt data
+ * @inode: an inode being evicted
  *
  * 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.
@@ -542,7 +717,8 @@
 EXPORT_SYMBOL(fscrypt_put_encryption_info);
 
 /**
- * fscrypt_free_inode - free an inode's fscrypt data requiring RCU delay
+ * fscrypt_free_inode() - free an inode's fscrypt data requiring RCU delay
+ * @inode: an inode being freed
  *
  * 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.
@@ -557,7 +733,8 @@
 EXPORT_SYMBOL(fscrypt_free_inode);
 
 /**
- * fscrypt_drop_inode - check whether the inode's master key has been removed
+ * fscrypt_drop_inode() - check whether the inode's master key has been removed
+ * @inode: an inode being considered for eviction
  *
  * Filesystems supporting fscrypt must call this from their ->drop_inode()
  * method so that encrypted inodes are evicted as soon as they're no longer in
@@ -567,7 +744,7 @@
  */
 int fscrypt_drop_inode(struct inode *inode)
 {
-	const struct fscrypt_info *ci = READ_ONCE(inode->i_crypt_info);
+	const struct fscrypt_info *ci = fscrypt_get_info(inode);
 	const struct fscrypt_master_key *mk;
 
 	/*
@@ -590,7 +767,7 @@
 		return 0;
 
 	/*
-	 * Note: since we aren't holding ->mk_secret_sem, the result here can
+	 * Note: since we aren't holding the key semaphore, the result here can
 	 * immediately become outdated.  But there's no correctness problem with
 	 * unnecessarily evicting.  Nor is there a correctness problem with not
 	 * evicting while iput() is racing with the key being removed, since
diff --git a/fs/crypto/keysetup_v1.c b/fs/crypto/keysetup_v1.c
index ad1a36c..c2faa37 100644
--- a/fs/crypto/keysetup_v1.c
+++ b/fs/crypto/keysetup_v1.c
@@ -9,7 +9,7 @@
  * This file implements compatibility functions for the original encryption
  * policy version ("v1"), including:
  *
- * - Deriving per-file keys using the AES-128-ECB based KDF
+ * - Deriving per-file encryption keys using the AES-128-ECB based KDF
  *   (rather than the new method of using HKDF-SHA512)
  *
  * - Retrieving fscrypt master keys from process-subscribed keyrings
@@ -45,7 +45,7 @@
  * key is longer, then only the first 'derived_keysize' bytes are used.
  */
 static int derive_key_aes(const u8 *master_key,
-			  const u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE],
+			  const u8 nonce[FSCRYPT_FILE_NONCE_SIZE],
 			  u8 *derived_key, unsigned int derived_keysize)
 {
 	int res = 0;
@@ -60,7 +60,7 @@
 		goto out;
 	}
 	crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS);
-	req = skcipher_request_alloc(tfm, GFP_NOFS);
+	req = skcipher_request_alloc(tfm, GFP_KERNEL);
 	if (!req) {
 		res = -ENOMEM;
 		goto out;
@@ -68,7 +68,7 @@
 	skcipher_request_set_callback(req,
 			CRYPTO_TFM_REQ_MAY_BACKLOG | CRYPTO_TFM_REQ_MAY_SLEEP,
 			crypto_req_done, &wait);
-	res = crypto_skcipher_setkey(tfm, nonce, FS_KEY_DERIVATION_NONCE_SIZE);
+	res = crypto_skcipher_setkey(tfm, nonce, FSCRYPT_FILE_NONCE_SIZE);
 	if (res < 0)
 		goto out;
 
@@ -99,7 +99,7 @@
 	const struct user_key_payload *ukp;
 	const struct fscrypt_key *payload;
 
-	description = kasprintf(GFP_NOFS, "%s%*phN", prefix,
+	description = kasprintf(GFP_KERNEL, "%s%*phN", prefix,
 				FSCRYPT_KEY_DESCRIPTOR_SIZE, descriptor);
 	if (!description)
 		return ERR_PTR(-ENOMEM);
@@ -146,7 +146,7 @@
 	struct hlist_node		dk_node;
 	refcount_t			dk_refcount;
 	const struct fscrypt_mode	*dk_mode;
-	struct crypto_skcipher		*dk_ctfm;
+	struct fscrypt_prepared_key	dk_key;
 	u8				dk_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
 	u8				dk_raw[FSCRYPT_MAX_KEY_SIZE];
 };
@@ -154,7 +154,7 @@
 static void free_direct_key(struct fscrypt_direct_key *dk)
 {
 	if (dk) {
-		crypto_free_skcipher(dk->dk_ctfm);
+		fscrypt_destroy_prepared_key(&dk->dk_key);
 		kzfree(dk);
 	}
 }
@@ -199,6 +199,8 @@
 			continue;
 		if (ci->ci_mode != dk->dk_mode)
 			continue;
+		if (!fscrypt_is_key_prepared(&dk->dk_key, ci))
+			continue;
 		if (crypto_memneq(raw_key, dk->dk_raw, ci->ci_mode->keysize))
 			continue;
 		/* using existing tfm with same (descriptor, mode, raw_key) */
@@ -226,18 +228,15 @@
 		return dk;
 
 	/* Nope, allocate one. */
-	dk = kzalloc(sizeof(*dk), GFP_NOFS);
+	dk = kzalloc(sizeof(*dk), GFP_KERNEL);
 	if (!dk)
 		return ERR_PTR(-ENOMEM);
 	refcount_set(&dk->dk_refcount, 1);
 	dk->dk_mode = ci->ci_mode;
-	dk->dk_ctfm = fscrypt_allocate_skcipher(ci->ci_mode, raw_key,
-						ci->ci_inode);
-	if (IS_ERR(dk->dk_ctfm)) {
-		err = PTR_ERR(dk->dk_ctfm);
-		dk->dk_ctfm = NULL;
+	err = fscrypt_prepare_key(&dk->dk_key, raw_key, ci->ci_mode->keysize,
+				  false /*is_hw_wrapped*/, ci);
+	if (err)
 		goto err_free_dk;
-	}
 	memcpy(dk->dk_descriptor, ci->ci_policy.v1.master_key_descriptor,
 	       FSCRYPT_KEY_DESCRIPTOR_SIZE);
 	memcpy(dk->dk_raw, raw_key, ci->ci_mode->keysize);
@@ -253,32 +252,13 @@
 static int setup_v1_file_key_direct(struct fscrypt_info *ci,
 				    const u8 *raw_master_key)
 {
-	const struct fscrypt_mode *mode = ci->ci_mode;
 	struct fscrypt_direct_key *dk;
 
-	if (!fscrypt_mode_supports_direct_key(mode)) {
-		fscrypt_warn(ci->ci_inode,
-			     "Direct key mode not allowed with %s",
-			     mode->friendly_name);
-		return -EINVAL;
-	}
-
-	if (ci->ci_policy.v1.contents_encryption_mode !=
-	    ci->ci_policy.v1.filenames_encryption_mode) {
-		fscrypt_warn(ci->ci_inode,
-			     "Direct key mode not allowed with different contents and filenames modes");
-		return -EINVAL;
-	}
-
-	/* ESSIV implies 16-byte IVs which implies !DIRECT_KEY */
-	if (WARN_ON(mode->needs_essiv))
-		return -EINVAL;
-
 	dk = fscrypt_get_direct_key(ci, raw_master_key);
 	if (IS_ERR(dk))
 		return PTR_ERR(dk);
 	ci->ci_direct_key = dk;
-	ci->ci_ctfm = dk->dk_ctfm;
+	ci->ci_enc_key = dk->dk_key;
 	return 0;
 }
 
@@ -293,7 +273,7 @@
 	 * This cannot be a stack buffer because it will be passed to the
 	 * scatterlist crypto API during derive_key_aes().
 	 */
-	derived_key = kmalloc(ci->ci_mode->keysize, GFP_NOFS);
+	derived_key = kmalloc(ci->ci_mode->keysize, GFP_KERNEL);
 	if (!derived_key)
 		return -ENOMEM;
 
@@ -302,7 +282,7 @@
 	if (err)
 		goto out;
 
-	err = fscrypt_set_derived_key(ci, derived_key);
+	err = fscrypt_set_per_file_enc_key(ci, derived_key);
 out:
 	kzfree(derived_key);
 	return err;
diff --git a/fs/crypto/policy.c b/fs/crypto/policy.c
index 8e1b108..a51cef6 100644
--- a/fs/crypto/policy.c
+++ b/fs/crypto/policy.c
@@ -11,12 +11,15 @@
  */
 
 #include <linux/random.h>
+#include <linux/seq_file.h>
 #include <linux/string.h>
 #include <linux/mount.h>
 #include "fscrypt_private.h"
 
 /**
- * fscrypt_policies_equal - check whether two encryption policies are the same
+ * fscrypt_policies_equal() - check whether two encryption policies are the same
+ * @policy1: the first policy
+ * @policy2: the second policy
  *
  * Return: %true if equal, else %false
  */
@@ -29,13 +32,205 @@
 	return !memcmp(policy1, policy2, fscrypt_policy_size(policy1));
 }
 
+static const union fscrypt_policy *
+fscrypt_get_dummy_policy(struct super_block *sb)
+{
+	if (!sb->s_cop->get_dummy_policy)
+		return NULL;
+	return sb->s_cop->get_dummy_policy(sb);
+}
+
+static bool fscrypt_valid_enc_modes(u32 contents_mode, u32 filenames_mode)
+{
+	if (contents_mode == FSCRYPT_MODE_AES_256_XTS &&
+	    filenames_mode == FSCRYPT_MODE_AES_256_CTS)
+		return true;
+
+	if (contents_mode == FSCRYPT_MODE_AES_128_CBC &&
+	    filenames_mode == FSCRYPT_MODE_AES_128_CTS)
+		return true;
+
+	if (contents_mode == FSCRYPT_MODE_ADIANTUM &&
+	    filenames_mode == FSCRYPT_MODE_ADIANTUM)
+		return true;
+
+	return false;
+}
+
+static bool supported_direct_key_modes(const struct inode *inode,
+				       u32 contents_mode, u32 filenames_mode)
+{
+	const struct fscrypt_mode *mode;
+
+	if (contents_mode != filenames_mode) {
+		fscrypt_warn(inode,
+			     "Direct key flag not allowed with different contents and filenames modes");
+		return false;
+	}
+	mode = &fscrypt_modes[contents_mode];
+
+	if (mode->ivsize < offsetofend(union fscrypt_iv, nonce)) {
+		fscrypt_warn(inode, "Direct key flag not allowed with %s",
+			     mode->friendly_name);
+		return false;
+	}
+	return true;
+}
+
+static bool supported_iv_ino_lblk_policy(const struct fscrypt_policy_v2 *policy,
+					 const struct inode *inode,
+					 const char *type,
+					 int max_ino_bits, int max_lblk_bits)
+{
+	struct super_block *sb = inode->i_sb;
+	int ino_bits = 64, lblk_bits = 64;
+
+	/*
+	 * IV_INO_LBLK_* exist only because of hardware limitations, and
+	 * currently the only known use case for them involves AES-256-XTS.
+	 * That's also all we test currently.  For these reasons, for now only
+	 * allow AES-256-XTS here.  This can be relaxed later if a use case for
+	 * IV_INO_LBLK_* with other encryption modes arises.
+	 */
+	if (policy->contents_encryption_mode != FSCRYPT_MODE_AES_256_XTS) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy with contents mode other than AES-256-XTS",
+			     type);
+		return false;
+	}
+
+	/*
+	 * It's unsafe to include inode numbers in the IVs if the filesystem can
+	 * potentially renumber inodes, e.g. via filesystem shrinking.
+	 */
+	if (!sb->s_cop->has_stable_inodes ||
+	    !sb->s_cop->has_stable_inodes(sb)) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because it doesn't have stable inode numbers",
+			     type, sb->s_id);
+		return false;
+	}
+	if (sb->s_cop->get_ino_and_lblk_bits)
+		sb->s_cop->get_ino_and_lblk_bits(sb, &ino_bits, &lblk_bits);
+	if (ino_bits > max_ino_bits) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because its inode numbers are too long",
+			     type, sb->s_id);
+		return false;
+	}
+	if (lblk_bits > max_lblk_bits) {
+		fscrypt_warn(inode,
+			     "Can't use %s policy on filesystem '%s' because its block numbers are too long",
+			     type, sb->s_id);
+		return false;
+	}
+	return true;
+}
+
+static bool fscrypt_supported_v1_policy(const struct fscrypt_policy_v1 *policy,
+					const struct inode *inode)
+{
+	if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
+				     policy->filenames_encryption_mode)) {
+		fscrypt_warn(inode,
+			     "Unsupported encryption modes (contents %d, filenames %d)",
+			     policy->contents_encryption_mode,
+			     policy->filenames_encryption_mode);
+		return false;
+	}
+
+	if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
+			      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
+		fscrypt_warn(inode, "Unsupported encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) &&
+	    !supported_direct_key_modes(inode, policy->contents_encryption_mode,
+					policy->filenames_encryption_mode))
+		return false;
+
+	if (IS_CASEFOLDED(inode)) {
+		/* With v1, there's no way to derive dirhash keys. */
+		fscrypt_warn(inode,
+			     "v1 policies can't be used on casefolded directories");
+		return false;
+	}
+
+	return true;
+}
+
+static bool fscrypt_supported_v2_policy(const struct fscrypt_policy_v2 *policy,
+					const struct inode *inode)
+{
+	int count = 0;
+
+	if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
+				     policy->filenames_encryption_mode)) {
+		fscrypt_warn(inode,
+			     "Unsupported encryption modes (contents %d, filenames %d)",
+			     policy->contents_encryption_mode,
+			     policy->filenames_encryption_mode);
+		return false;
+	}
+
+	if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
+			      FSCRYPT_POLICY_FLAG_DIRECT_KEY |
+			      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 |
+			      FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)) {
+		fscrypt_warn(inode, "Unsupported encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY);
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64);
+	count += !!(policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32);
+	if (count > 1) {
+		fscrypt_warn(inode, "Mutually exclusive encryption flags (0x%02x)",
+			     policy->flags);
+		return false;
+	}
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_DIRECT_KEY) &&
+	    !supported_direct_key_modes(inode, policy->contents_encryption_mode,
+					policy->filenames_encryption_mode))
+		return false;
+
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64) &&
+	    !supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_64",
+					  32, 32))
+		return false;
+
+	/*
+	 * IV_INO_LBLK_32 hashes the inode number, so in principle it can
+	 * support any ino_bits.  However, currently the inode number is gotten
+	 * from inode::i_ino which is 'unsigned long'.  So for now the
+	 * implementation limit is 32 bits.
+	 */
+	if ((policy->flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32) &&
+	    !supported_iv_ino_lblk_policy(policy, inode, "IV_INO_LBLK_32",
+					  32, 32))
+		return false;
+
+	if (memchr_inv(policy->__reserved, 0, sizeof(policy->__reserved))) {
+		fscrypt_warn(inode, "Reserved bits set in encryption policy");
+		return false;
+	}
+
+	return true;
+}
+
 /**
- * fscrypt_supported_policy - check whether an encryption policy is supported
+ * fscrypt_supported_policy() - check whether an encryption policy is supported
+ * @policy_u: the encryption policy
+ * @inode: the inode on which the policy will be used
  *
  * Given an encryption policy, check whether all its encryption modes and other
- * settings are supported by this kernel.  (But we don't currently don't check
- * for crypto API support here, so attempting to use an algorithm not configured
- * into the crypto API will still fail later.)
+ * settings are supported by this kernel on the given inode.  (But we don't
+ * currently don't check for crypto API support here, so attempting to use an
+ * algorithm not configured into the crypto API will still fail later.)
  *
  * Return: %true if supported, else %false
  */
@@ -43,71 +238,28 @@
 			      const struct inode *inode)
 {
 	switch (policy_u->version) {
-	case FSCRYPT_POLICY_V1: {
-		const struct fscrypt_policy_v1 *policy = &policy_u->v1;
-
-		if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
-					     policy->filenames_encryption_mode)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption modes (contents %d, filenames %d)",
-				     policy->contents_encryption_mode,
-				     policy->filenames_encryption_mode);
-			return false;
-		}
-
-		if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
-				      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption flags (0x%02x)",
-				     policy->flags);
-			return false;
-		}
-
-		return true;
-	}
-	case FSCRYPT_POLICY_V2: {
-		const struct fscrypt_policy_v2 *policy = &policy_u->v2;
-
-		if (!fscrypt_valid_enc_modes(policy->contents_encryption_mode,
-					     policy->filenames_encryption_mode)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption modes (contents %d, filenames %d)",
-				     policy->contents_encryption_mode,
-				     policy->filenames_encryption_mode);
-			return false;
-		}
-
-		if (policy->flags & ~(FSCRYPT_POLICY_FLAGS_PAD_MASK |
-				      FSCRYPT_POLICY_FLAG_DIRECT_KEY)) {
-			fscrypt_warn(inode,
-				     "Unsupported encryption flags (0x%02x)",
-				     policy->flags);
-			return false;
-		}
-
-		if (memchr_inv(policy->__reserved, 0,
-			       sizeof(policy->__reserved))) {
-			fscrypt_warn(inode,
-				     "Reserved bits set in encryption policy");
-			return false;
-		}
-
-		return true;
-	}
+	case FSCRYPT_POLICY_V1:
+		return fscrypt_supported_v1_policy(&policy_u->v1, inode);
+	case FSCRYPT_POLICY_V2:
+		return fscrypt_supported_v2_policy(&policy_u->v2, inode);
 	}
 	return false;
 }
 
 /**
- * fscrypt_new_context_from_policy - create a new fscrypt_context from a policy
+ * fscrypt_new_context() - create a new fscrypt_context
+ * @ctx_u: output context
+ * @policy_u: input policy
+ * @nonce: nonce to use
  *
  * Create an fscrypt_context for an inode that is being assigned the given
- * encryption policy.  A new nonce is randomly generated.
+ * encryption policy.  @nonce must be a new random nonce.
  *
  * Return: the size of the new context in bytes.
  */
-static int fscrypt_new_context_from_policy(union fscrypt_context *ctx_u,
-					   const union fscrypt_policy *policy_u)
+static int fscrypt_new_context(union fscrypt_context *ctx_u,
+			       const union fscrypt_policy *policy_u,
+			       const u8 nonce[FSCRYPT_FILE_NONCE_SIZE])
 {
 	memset(ctx_u, 0, sizeof(*ctx_u));
 
@@ -125,7 +277,7 @@
 		memcpy(ctx->master_key_descriptor,
 		       policy->master_key_descriptor,
 		       sizeof(ctx->master_key_descriptor));
-		get_random_bytes(ctx->nonce, sizeof(ctx->nonce));
+		memcpy(ctx->nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 		return sizeof(*ctx);
 	}
 	case FSCRYPT_POLICY_V2: {
@@ -141,7 +293,7 @@
 		memcpy(ctx->master_key_identifier,
 		       policy->master_key_identifier,
 		       sizeof(ctx->master_key_identifier));
-		get_random_bytes(ctx->nonce, sizeof(ctx->nonce));
+		memcpy(ctx->nonce, nonce, FSCRYPT_FILE_NONCE_SIZE);
 		return sizeof(*ctx);
 	}
 	}
@@ -149,7 +301,11 @@
 }
 
 /**
- * fscrypt_policy_from_context - convert an fscrypt_context to an fscrypt_policy
+ * fscrypt_policy_from_context() - convert an fscrypt_context to
+ *				   an fscrypt_policy
+ * @policy_u: output policy
+ * @ctx_u: input context
+ * @ctx_size: size of input context in bytes
  *
  * Given an fscrypt_context, build the corresponding fscrypt_policy.
  *
@@ -165,7 +321,7 @@
 {
 	memset(policy_u, 0, sizeof(*policy_u));
 
-	if (ctx_size <= 0 || ctx_size != fscrypt_context_size(ctx_u))
+	if (!fscrypt_context_is_valid(ctx_u, ctx_size))
 		return -EINVAL;
 
 	switch (ctx_u->version) {
@@ -213,7 +369,7 @@
 	union fscrypt_context ctx;
 	int ret;
 
-	ci = READ_ONCE(inode->i_crypt_info);
+	ci = fscrypt_get_info(inode);
 	if (ci) {
 		/* key available, use the cached policy */
 		*policy = ci->ci_policy;
@@ -233,6 +389,7 @@
 static int set_encryption_policy(struct inode *inode,
 				 const union fscrypt_policy *policy)
 {
+	u8 nonce[FSCRYPT_FILE_NONCE_SIZE];
 	union fscrypt_context ctx;
 	int ctxsize;
 	int err;
@@ -261,13 +418,17 @@
 					       policy->v2.master_key_identifier);
 		if (err)
 			return err;
+		if (policy->v2.flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)
+			pr_warn_once("%s (pid %d) is setting an IV_INO_LBLK_32 encryption policy.  This should only be used if there are certain hardware limitations.\n",
+				     current->comm, current->pid);
 		break;
 	default:
 		WARN_ON(1);
 		return -EINVAL;
 	}
 
-	ctxsize = fscrypt_new_context_from_policy(&ctx, policy);
+	get_random_bytes(nonce, FSCRYPT_FILE_NONCE_SIZE);
+	ctxsize = fscrypt_new_context(&ctx, policy, nonce);
 
 	return inode->i_sb->s_cop->set_context(inode, &ctx, ctxsize, NULL);
 }
@@ -388,6 +549,25 @@
 }
 EXPORT_SYMBOL_GPL(fscrypt_ioctl_get_policy_ex);
 
+/* FS_IOC_GET_ENCRYPTION_NONCE: retrieve file's encryption nonce for testing */
+int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg)
+{
+	struct inode *inode = file_inode(filp);
+	union fscrypt_context ctx;
+	int ret;
+
+	ret = inode->i_sb->s_cop->get_context(inode, &ctx, sizeof(ctx));
+	if (ret < 0)
+		return ret;
+	if (!fscrypt_context_is_valid(&ctx, ret))
+		return -EINVAL;
+	if (copy_to_user(arg, fscrypt_context_nonce(&ctx),
+			 FSCRYPT_FILE_NONCE_SIZE))
+		return -EFAULT;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(fscrypt_ioctl_get_nonce);
+
 /**
  * fscrypt_has_permitted_context() - is a file's encryption policy permitted
  *				     within its directory?
@@ -410,7 +590,7 @@
 int fscrypt_has_permitted_context(struct inode *parent, struct inode *child)
 {
 	union fscrypt_policy parent_policy, child_policy;
-	int err;
+	int err, err1, err2;
 
 	/* No restrictions on file types which are never encrypted */
 	if (!S_ISREG(child->i_mode) && !S_ISDIR(child->i_mode) &&
@@ -440,56 +620,199 @@
 	 * In any case, if an unexpected error occurs, fall back to "forbidden".
 	 */
 
-	err = fscrypt_get_encryption_info(parent);
+	err = fscrypt_get_encryption_info(parent, true);
 	if (err)
 		return 0;
-	err = fscrypt_get_encryption_info(child);
+	err = fscrypt_get_encryption_info(child, true);
 	if (err)
 		return 0;
 
-	err = fscrypt_get_policy(parent, &parent_policy);
-	if (err)
-		return 0;
+	err1 = fscrypt_get_policy(parent, &parent_policy);
+	err2 = fscrypt_get_policy(child, &child_policy);
 
-	err = fscrypt_get_policy(child, &child_policy);
-	if (err)
+	/*
+	 * Allow the case where the parent and child both have an unrecognized
+	 * encryption policy, so that files with an unrecognized encryption
+	 * policy can be deleted.
+	 */
+	if (err1 == -EINVAL && err2 == -EINVAL)
+		return 1;
+
+	if (err1 || err2)
 		return 0;
 
 	return fscrypt_policies_equal(&parent_policy, &child_policy);
 }
 EXPORT_SYMBOL(fscrypt_has_permitted_context);
 
+/*
+ * Return the encryption policy that new files in the directory will inherit, or
+ * NULL if none, or an ERR_PTR() on error.  If the directory is encrypted, also
+ * ensure that its key is set up, so that the new filename can be encrypted.
+ */
+const union fscrypt_policy *fscrypt_policy_to_inherit(struct inode *dir)
+{
+	int err;
+
+	if (IS_ENCRYPTED(dir)) {
+		err = fscrypt_require_key(dir);
+		if (err)
+			return ERR_PTR(err);
+		return &dir->i_crypt_info->ci_policy;
+	}
+
+	return fscrypt_get_dummy_policy(dir->i_sb);
+}
+
 /**
- * fscrypt_inherit_context() - Sets a child context from its parent
- * @parent: Parent inode from which the context is inherited.
- * @child:  Child inode that inherits the context from @parent.
- * @fs_data:  private data given by FS.
- * @preload:  preload child i_crypt_info if true
+ * fscrypt_set_context() - Set the fscrypt context of a new inode
+ * @inode: a new inode
+ * @fs_data: private data given by FS and passed to ->set_context()
+ *
+ * This should be called after fscrypt_prepare_new_inode(), generally during a
+ * filesystem transaction.  Everything here must be %GFP_NOFS-safe.
  *
  * Return: 0 on success, -errno on failure
  */
-int fscrypt_inherit_context(struct inode *parent, struct inode *child,
-						void *fs_data, bool preload)
+int fscrypt_set_context(struct inode *inode, void *fs_data)
 {
+	struct fscrypt_info *ci = inode->i_crypt_info;
 	union fscrypt_context ctx;
 	int ctxsize;
-	struct fscrypt_info *ci;
-	int res;
 
-	res = fscrypt_get_encryption_info(parent);
-	if (res < 0)
-		return res;
-
-	ci = READ_ONCE(parent->i_crypt_info);
-	if (ci == NULL)
+	/* fscrypt_prepare_new_inode() should have set up the key already. */
+	if (WARN_ON_ONCE(!ci))
 		return -ENOKEY;
 
-	ctxsize = fscrypt_new_context_from_policy(&ctx, &ci->ci_policy);
-
 	BUILD_BUG_ON(sizeof(ctx) != FSCRYPT_SET_CONTEXT_MAX_SIZE);
-	res = parent->i_sb->s_cop->set_context(child, &ctx, ctxsize, fs_data);
-	if (res)
-		return res;
-	return preload ? fscrypt_get_encryption_info(child): 0;
+	ctxsize = fscrypt_new_context(&ctx, &ci->ci_policy, ci->ci_nonce);
+
+	/*
+	 * This may be the first time the inode number is available, so do any
+	 * delayed key setup that requires the inode number.
+	 */
+	if (ci->ci_policy.version == FSCRYPT_POLICY_V2 &&
+	    (ci->ci_policy.v2.flags & FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32)) {
+		const struct fscrypt_master_key *mk =
+			ci->ci_master_key->payload.data[0];
+
+		fscrypt_hash_inode_number(ci, mk);
+	}
+
+	return inode->i_sb->s_cop->set_context(inode, &ctx, ctxsize, fs_data);
 }
-EXPORT_SYMBOL(fscrypt_inherit_context);
+EXPORT_SYMBOL_GPL(fscrypt_set_context);
+
+/**
+ * fscrypt_set_test_dummy_encryption() - handle '-o test_dummy_encryption'
+ * @sb: the filesystem on which test_dummy_encryption is being specified
+ * @arg: the argument to the test_dummy_encryption option.  May be NULL.
+ * @dummy_policy: the filesystem's current dummy policy (input/output, see
+ *		  below)
+ *
+ * Handle the test_dummy_encryption mount option by creating a dummy encryption
+ * policy, saving it in @dummy_policy, and adding the corresponding dummy
+ * encryption key to the filesystem.  If the @dummy_policy is already set, then
+ * instead validate that it matches @arg.  Don't support changing it via
+ * remount, as that is difficult to do safely.
+ *
+ * Return: 0 on success (dummy policy set, or the same policy is already set);
+ *         -EEXIST if a different dummy policy is already set;
+ *         or another -errno value.
+ */
+int fscrypt_set_test_dummy_encryption(struct super_block *sb, const char *arg,
+				      struct fscrypt_dummy_policy *dummy_policy)
+{
+	struct fscrypt_key_specifier key_spec = { 0 };
+	int version;
+	union fscrypt_policy *policy = NULL;
+	int err;
+
+	if (!arg)
+		arg = "v2";
+
+	if (!strcmp(arg, "v1")) {
+		version = FSCRYPT_POLICY_V1;
+		key_spec.type = FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR;
+		memset(key_spec.u.descriptor, 0x42,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+	} else if (!strcmp(arg, "v2")) {
+		version = FSCRYPT_POLICY_V2;
+		key_spec.type = FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER;
+		/* key_spec.u.identifier gets filled in when adding the key */
+	} else {
+		err = -EINVAL;
+		goto out;
+	}
+
+	policy = kzalloc(sizeof(*policy), GFP_KERNEL);
+	if (!policy) {
+		err = -ENOMEM;
+		goto out;
+	}
+
+	err = fscrypt_add_test_dummy_key(sb, &key_spec);
+	if (err)
+		goto out;
+
+	policy->version = version;
+	switch (policy->version) {
+	case FSCRYPT_POLICY_V1:
+		policy->v1.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		policy->v1.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(policy->v1.master_key_descriptor, key_spec.u.descriptor,
+		       FSCRYPT_KEY_DESCRIPTOR_SIZE);
+		break;
+	case FSCRYPT_POLICY_V2:
+		policy->v2.contents_encryption_mode = FSCRYPT_MODE_AES_256_XTS;
+		policy->v2.filenames_encryption_mode = FSCRYPT_MODE_AES_256_CTS;
+		memcpy(policy->v2.master_key_identifier, key_spec.u.identifier,
+		       FSCRYPT_KEY_IDENTIFIER_SIZE);
+		break;
+	default:
+		WARN_ON(1);
+		err = -EINVAL;
+		goto out;
+	}
+
+	if (dummy_policy->policy) {
+		if (fscrypt_policies_equal(policy, dummy_policy->policy))
+			err = 0;
+		else
+			err = -EEXIST;
+		goto out;
+	}
+	dummy_policy->policy = policy;
+	policy = NULL;
+	err = 0;
+out:
+	kfree(policy);
+	return err;
+}
+EXPORT_SYMBOL_GPL(fscrypt_set_test_dummy_encryption);
+
+/**
+ * fscrypt_show_test_dummy_encryption() - show '-o test_dummy_encryption'
+ * @seq: the seq_file to print the option to
+ * @sep: the separator character to use
+ * @sb: the filesystem whose options are being shown
+ *
+ * Show the test_dummy_encryption mount option, if it was specified.
+ * This is mainly used for /proc/mounts.
+ */
+void fscrypt_show_test_dummy_encryption(struct seq_file *seq, char sep,
+					struct super_block *sb)
+{
+	const union fscrypt_policy *policy = fscrypt_get_dummy_policy(sb);
+	int vers;
+
+	if (!policy)
+		return;
+
+	vers = policy->version;
+	if (vers == FSCRYPT_POLICY_V1) /* Handle numbering quirk */
+		vers = 1;
+
+	seq_printf(seq, "%ctest_dummy_encryption=v%d", sep, vers);
+}
+EXPORT_SYMBOL_GPL(fscrypt_show_test_dummy_encryption);
diff --git a/fs/direct-io.c b/fs/direct-io.c
index 434cffc..dd5fd4fc 100644
--- a/fs/direct-io.c
+++ b/fs/direct-io.c
@@ -24,6 +24,7 @@
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/mm.h>
 #include <linux/slab.h>
 #include <linux/highmem.h>
@@ -430,6 +431,7 @@
 	      sector_t first_sector, int nr_vecs)
 {
 	struct bio *bio;
+	struct inode *inode = dio->inode;
 
 	/*
 	 * bio_alloc() is guaranteed to return a bio when allowed to sleep and
@@ -437,6 +439,9 @@
 	 */
 	bio = bio_alloc(GFP_KERNEL, nr_vecs);
 
+	fscrypt_set_bio_crypt_ctx(bio, inode,
+				  sdio->cur_page_fs_offset >> inode->i_blkbits,
+				  GFP_KERNEL);
 	bio_set_dev(bio, bdev);
 	bio->bi_iter.bi_sector = first_sector;
 	bio_set_op_attrs(bio, dio->op, dio->op_flags);
@@ -801,9 +806,17 @@
 		 * current logical offset in the file does not equal what would
 		 * be the next logical offset in the bio, submit the bio we
 		 * have.
+		 *
+		 * When fscrypt inline encryption is used, data unit number
+		 * (DUN) contiguity is also required.  Normally that's implied
+		 * by logical contiguity.  However, certain IV generation
+		 * methods (e.g. IV_INO_LBLK_32) don't guarantee it.  So, we
+		 * must explicitly check fscrypt_mergeable_bio() too.
 		 */
 		if (sdio->final_block_in_bio != sdio->cur_page_block ||
-		    cur_offset != bio_next_offset)
+		    cur_offset != bio_next_offset ||
+		    !fscrypt_mergeable_bio(sdio->bio, dio->inode,
+					   cur_offset >> dio->inode->i_blkbits))
 			dio_bio_submit(dio, sdio);
 	}
 
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
index e23752d..12616d5 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
@@ -1040,7 +1040,8 @@
 		goto out;
 	}
 	inode_lock(lower_inode);
-	rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size);
+	rc = __vfs_getxattr(lower_dentry, lower_inode, name, value, size,
+			    XATTR_NOSECURITY);
 	inode_unlock(lower_inode);
 out:
 	return rc;
@@ -1125,7 +1126,8 @@
 
 static int ecryptfs_xattr_get(const struct xattr_handler *handler,
 			      struct dentry *dentry, struct inode *inode,
-			      const char *name, void *buffer, size_t size)
+			      const char *name, void *buffer, size_t size,
+			      int flags)
 {
 	return ecryptfs_getxattr(dentry, inode, name, buffer, size);
 }
diff --git a/fs/ecryptfs/mmap.c b/fs/ecryptfs/mmap.c
index cffa0c1..2362be3 100644
--- a/fs/ecryptfs/mmap.c
+++ b/fs/ecryptfs/mmap.c
@@ -422,7 +422,7 @@
 	}
 	inode_lock(lower_inode);
 	size = __vfs_getxattr(lower_dentry, lower_inode, ECRYPTFS_XATTR_NAME,
-			      xattr_virt, PAGE_SIZE);
+			      xattr_virt, PAGE_SIZE, XATTR_NOSECURITY);
 	if (size < 0)
 		size = 8;
 	put_unaligned_be64(i_size_read(ecryptfs_inode), xattr_virt);
diff --git a/fs/erofs/xattr.c b/fs/erofs/xattr.c
index f784967..7d6e381 100644
--- a/fs/erofs/xattr.c
+++ b/fs/erofs/xattr.c
@@ -471,7 +471,8 @@
 
 static int erofs_xattr_generic_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	struct erofs_sb_info *const sbi = EROFS_I_SB(inode);
 
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index 339453a..2ffc294 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -29,6 +29,7 @@
 #include <linux/mutex.h>
 #include <linux/anon_inodes.h>
 #include <linux/device.h>
+#include <linux/freezer.h>
 #include <linux/uaccess.h>
 #include <asm/io.h>
 #include <asm/mman.h>
@@ -1911,7 +1912,8 @@
 			break;
 		}
 
-		if (!schedule_hrtimeout_range(to, slack, HRTIMER_MODE_ABS)) {
+		if (!freezable_schedule_hrtimeout_range(to, slack,
+						        HRTIMER_MODE_ABS)) {
 			timed_out = 1;
 			break;
 		}
diff --git a/fs/ext2/xattr_security.c b/fs/ext2/xattr_security.c
index 9a682e4..d5f6eb0 100644
--- a/fs/ext2/xattr_security.c
+++ b/fs/ext2/xattr_security.c
@@ -11,7 +11,7 @@
 static int
 ext2_xattr_security_get(const struct xattr_handler *handler,
 			struct dentry *unused, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
 	return ext2_xattr_get(inode, EXT2_XATTR_INDEX_SECURITY, name,
 			      buffer, size);
diff --git a/fs/ext2/xattr_trusted.c b/fs/ext2/xattr_trusted.c
index 49add11..8d31366 100644
--- a/fs/ext2/xattr_trusted.c
+++ b/fs/ext2/xattr_trusted.c
@@ -18,7 +18,7 @@
 static int
 ext2_xattr_trusted_get(const struct xattr_handler *handler,
 		       struct dentry *unused, struct inode *inode,
-		       const char *name, void *buffer, size_t size)
+		       const char *name, void *buffer, size_t size, int flags)
 {
 	return ext2_xattr_get(inode, EXT2_XATTR_INDEX_TRUSTED, name,
 			      buffer, size);
diff --git a/fs/ext2/xattr_user.c b/fs/ext2/xattr_user.c
index c243a3b..712b7c9 100644
--- a/fs/ext2/xattr_user.c
+++ b/fs/ext2/xattr_user.c
@@ -20,7 +20,7 @@
 static int
 ext2_xattr_user_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *buffer, size_t size)
+		    const char *name, void *buffer, size_t size, int flags)
 {
 	if (!test_opt(inode->i_sb, XATTR_USER))
 		return -EOPNOTSUPP;
diff --git a/fs/ext4/Kconfig b/fs/ext4/Kconfig
index cbb5ca8..709f206 100644
--- a/fs/ext4/Kconfig
+++ b/fs/ext4/Kconfig
@@ -39,6 +39,7 @@
 	select CRYPTO
 	select CRYPTO_CRC32C
 	select FS_IOMAP
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
 	help
 	  This is the next generation of the ext3 filesystem.
 
@@ -106,3 +107,19 @@
 	  If you select Y here, then you will be able to turn on debugging
 	  with a command such as:
 		echo 1 > /sys/module/ext4/parameters/mballoc_debug
+
+config EXT4_KUNIT_TESTS
+	tristate "KUnit tests for ext4"
+	depends on EXT4_FS && KUNIT
+	help
+	  This builds the ext4 KUnit tests.
+
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running KUnit test harness and are not for inclusion into a production
+	  build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
diff --git a/fs/ext4/Makefile b/fs/ext4/Makefile
index b17ddc2..4ccb3c9 100644
--- a/fs/ext4/Makefile
+++ b/fs/ext4/Makefile
@@ -13,4 +13,6 @@
 
 ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
 ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
+ext4-inode-test-objs			+= inode-test.o
+obj-$(CONFIG_EXT4_KUNIT_TESTS)		+= ext4-inode-test.o
 ext4-$(CONFIG_FS_VERITY)		+= verity.o
diff --git a/fs/ext4/dir.c b/fs/ext4/dir.c
index e8275b5..104f331 100644
--- a/fs/ext4/dir.c
+++ b/fs/ext4/dir.c
@@ -30,6 +30,8 @@
 #include "ext4.h"
 #include "xattr.h"
 
+#define DOTDOT_OFFSET 12
+
 static int ext4_dx_readdir(struct file *, struct dir_context *);
 
 /**
@@ -55,6 +57,19 @@
 	return 0;
 }
 
+static bool is_fake_entry(struct inode *dir, ext4_lblk_t lblk,
+			  unsigned int offset, unsigned int blocksize)
+{
+	/* Entries in the first block before this value refer to . or .. */
+	if (lblk == 0 && offset <= DOTDOT_OFFSET)
+		return true;
+	/* Check if this is likely the csum entry */
+	if (ext4_has_metadata_csum(dir->i_sb) && offset % blocksize ==
+				blocksize - sizeof(struct ext4_dir_entry_tail))
+		return true;
+	return false;
+}
+
 /*
  * Return 0 if the directory entry is OK, and 1 if there is a problem
  *
@@ -67,25 +82,30 @@
 			   struct inode *dir, struct file *filp,
 			   struct ext4_dir_entry_2 *de,
 			   struct buffer_head *bh, char *buf, int size,
+			   ext4_lblk_t lblk,
 			   unsigned int offset)
 {
 	const char *error_msg = NULL;
 	const int rlen = ext4_rec_len_from_disk(de->rec_len,
 						dir->i_sb->s_blocksize);
+	const int next_offset = ((char *) de - buf) + rlen;
+	unsigned int blocksize = dir->i_sb->s_blocksize;
+	bool fake = is_fake_entry(dir, lblk, offset, blocksize);
+	bool next_fake = is_fake_entry(dir, lblk, next_offset, blocksize);
 
-	if (unlikely(rlen < EXT4_DIR_REC_LEN(1)))
+	if (unlikely(rlen < ext4_dir_rec_len(1, fake ? NULL : dir)))
 		error_msg = "rec_len is smaller than minimal";
 	else if (unlikely(rlen % 4 != 0))
 		error_msg = "rec_len % 4 != 0";
-	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
+	else if (unlikely(rlen < ext4_dir_rec_len(de->name_len,
+							fake ? NULL : dir)))
 		error_msg = "rec_len is too small for name_len";
 	else if (unlikely(((char *) de - buf) + rlen > size))
 		error_msg = "directory entry overrun";
-	else if (unlikely(((char *) de - buf) + rlen >
-			  size - EXT4_DIR_REC_LEN(1) &&
-			  ((char *) de - buf) + rlen != size)) {
+	else if (unlikely(next_offset > size - ext4_dir_rec_len(1,
+						next_fake ? NULL : dir) &&
+			  next_offset != size))
 		error_msg = "directory entry too close to block end";
-	}
 	else if (unlikely(le32_to_cpu(de->inode) >
 			le32_to_cpu(EXT4_SB(dir->i_sb)->s_es->s_inodes_count)))
 		error_msg = "inode out of bounds";
@@ -95,15 +115,15 @@
 	if (filp)
 		ext4_error_file(filp, function, line, bh->b_blocknr,
 				"bad entry in directory: %s - offset=%u, "
-				"inode=%u, rec_len=%d, name_len=%d, size=%d",
+				"inode=%u, rec_len=%d, lblk=%d, size=%d fake=%d",
 				error_msg, offset, le32_to_cpu(de->inode),
-				rlen, de->name_len, size);
+				rlen, lblk, size, fake);
 	else
 		ext4_error_inode(dir, function, line, bh->b_blocknr,
 				"bad entry in directory: %s - offset=%u, "
-				"inode=%u, rec_len=%d, name_len=%d, size=%d",
+				"inode=%u, rec_len=%d, lblk=%d, size=%d fake=%d",
 				 error_msg, offset, le32_to_cpu(de->inode),
-				 rlen, de->name_len, size);
+				 rlen, lblk, size, fake);
 
 	return 1;
 }
@@ -119,11 +139,9 @@
 	struct buffer_head *bh = NULL;
 	struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
 
-	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
-			return err;
-	}
+	err = fscrypt_prepare_readdir(inode);
+	if (err)
+		return err;
 
 	if (is_dx_dir(inode)) {
 		err = ext4_dx_readdir(file, ctx);
@@ -149,7 +167,7 @@
 	}
 
 	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_fname_alloc_buffer(inode, EXT4_NAME_LEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(EXT4_NAME_LEN, &fstr);
 		if (err < 0)
 			return err;
 	}
@@ -227,7 +245,8 @@
 				 * failure will be detected in the
 				 * dirent test below. */
 				if (ext4_rec_len_from_disk(de->rec_len,
-					sb->s_blocksize) < EXT4_DIR_REC_LEN(1))
+					sb->s_blocksize) < ext4_dir_rec_len(1,
+									inode))
 					break;
 				i += ext4_rec_len_from_disk(de->rec_len,
 							    sb->s_blocksize);
@@ -243,7 +262,7 @@
 			de = (struct ext4_dir_entry_2 *) (bh->b_data + offset);
 			if (ext4_check_dir_entry(inode, file, de, bh,
 						 bh->b_data, bh->b_size,
-						 offset)) {
+						 map.m_lblk, offset)) {
 				/*
 				 * On error, skip to the next block
 				 */
@@ -268,7 +287,9 @@
 
 					/* Directory is encrypted */
 					err = fscrypt_fname_disk_to_usr(inode,
-						0, 0, &de_name, &fstr);
+						EXT4_DIRENT_HASH(de),
+						EXT4_DIRENT_MINOR_HASH(de),
+						&de_name, &fstr);
 					de_name = fstr;
 					fstr.len = save_len;
 					if (err)
@@ -618,13 +639,6 @@
 	return ret < 0 ? ret : 0;
 }
 
-static int ext4_dir_open(struct inode * inode, struct file * filp)
-{
-	if (IS_ENCRYPTED(inode))
-		return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
-	return 0;
-}
-
 static int ext4_release_dir(struct inode *inode, struct file *filp)
 {
 	if (filp->private_data)
@@ -645,7 +659,7 @@
 	top = buf + buf_size;
 	while ((char *) de < top) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 buf, buf_size, offset))
+					 buf, buf_size, 0, offset))
 			return -EFSCORRUPTED;
 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 		de = (struct ext4_dir_entry_2 *)((char *)de + rlen);
@@ -666,73 +680,5 @@
 	.compat_ioctl	= ext4_compat_ioctl,
 #endif
 	.fsync		= ext4_sync_file,
-	.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 };
-	const struct dentry *parent = READ_ONCE(dentry->d_parent);
-	const struct inode *inode = READ_ONCE(parent->d_inode);
-	char strbuf[DNAME_INLINE_LEN];
-
-	if (!inode || !IS_CASEFOLDED(inode) ||
-	    !EXT4_SB(inode->i_sb)->s_encoding) {
-		if (len != name->len)
-			return -1;
-		return memcmp(str, name->name, len);
-	}
-
-	/*
-	 * If the dentry name is stored in-line, then it may be concurrently
-	 * modified by a rename.  If this happens, the VFS will eventually retry
-	 * the lookup, so it doesn't matter what ->d_compare() returns.
-	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
-	 * string.  Therefore, we have to copy the name into a temporary buffer.
-	 */
-	if (len <= DNAME_INLINE_LEN - 1) {
-		memcpy(strbuf, str, len);
-		strbuf[len] = 0;
-		qstr.name = strbuf;
-		/* prevent compiler from optimizing out the temporary buffer */
-		barrier();
-	}
-
-	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;
-	const struct inode *inode = READ_ONCE(dentry->d_inode);
-	unsigned char *norm;
-	int len, ret = 0;
-
-	if (!inode || !IS_CASEFOLDED(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 ae2cb15..dfb9d86 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1354,11 +1354,9 @@
  */
 #define EXT4_MF_MNTDIR_SAMPLED		0x0001
 #define EXT4_MF_FS_ABORTED		0x0002	/* Fatal error detected */
-#define EXT4_MF_TEST_DUMMY_ENCRYPTION	0x0004
 
 #ifdef CONFIG_FS_ENCRYPTION
-#define DUMMY_ENCRYPTION_ENABLED(sbi) (unlikely((sbi)->s_mount_flags & \
-						EXT4_MF_TEST_DUMMY_ENCRYPTION))
+#define DUMMY_ENCRYPTION_ENABLED(sbi) ((sbi)->s_dummy_enc_policy.policy != NULL)
 #else
 #define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
 #endif
@@ -1369,14 +1367,6 @@
 #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
  */
 struct ext4_sb_info {
@@ -1426,10 +1416,6 @@
 	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;
@@ -1549,6 +1535,9 @@
 	struct ratelimit_state s_warning_ratelimit_state;
 	struct ratelimit_state s_msg_ratelimit_state;
 
+	/* Encryption policy for '-o test_dummy_encryption' */
+	struct fscrypt_dummy_policy s_dummy_enc_policy;
+
 	/*
 	 * Barrier between writepages ops and changing any inode's JOURNAL_DATA
 	 * or EXTENTS flag.
@@ -1699,6 +1688,7 @@
 #define EXT4_FEATURE_COMPAT_RESIZE_INODE	0x0010
 #define EXT4_FEATURE_COMPAT_DIR_INDEX		0x0020
 #define EXT4_FEATURE_COMPAT_SPARSE_SUPER2	0x0200
+#define EXT4_FEATURE_COMPAT_STABLE_INODES	0x0800
 
 #define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
 #define EXT4_FEATURE_RO_COMPAT_LARGE_FILE	0x0002
@@ -1800,6 +1790,7 @@
 EXT4_FEATURE_COMPAT_FUNCS(resize_inode,		RESIZE_INODE)
 EXT4_FEATURE_COMPAT_FUNCS(dir_index,		DIR_INDEX)
 EXT4_FEATURE_COMPAT_FUNCS(sparse_super2,	SPARSE_SUPER2)
+EXT4_FEATURE_COMPAT_FUNCS(stable_inodes,	STABLE_INODES)
 
 EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super,	SPARSE_SUPER)
 EXT4_FEATURE_RO_COMPAT_FUNCS(large_file,	LARGE_FILE)
@@ -1974,6 +1965,17 @@
 	char	name[EXT4_NAME_LEN];	/* File name */
 };
 
+
+/*
+ * Encrypted Casefolded entries require saving the hash on disk. This structure
+ * followed ext4_dir_entry_2's name[name_len] at the next 4 byte aligned
+ * boundary.
+ */
+struct ext4_dir_entry_hash {
+	__le32 hash;
+	__le32 minor_hash;
+};
+
 /*
  * The new version of the directory entry.  Since EXT4 structures are
  * stored in intel byte order, and the name_len field could never be
@@ -1989,6 +1991,22 @@
 };
 
 /*
+ * Access the hashes at the end of ext4_dir_entry_2
+ */
+#define EXT4_DIRENT_HASHES(entry) \
+	((struct ext4_dir_entry_hash *) \
+		(((void *)(entry)) + \
+		((8 + (entry)->name_len + EXT4_DIR_ROUND) & ~EXT4_DIR_ROUND)))
+#define EXT4_DIRENT_HASH(entry) le32_to_cpu(EXT4_DIRENT_HASHES(de)->hash)
+#define EXT4_DIRENT_MINOR_HASH(entry) \
+		le32_to_cpu(EXT4_DIRENT_HASHES(de)->minor_hash)
+
+static inline bool ext4_hash_in_dirent(const struct inode *inode)
+{
+	return IS_CASEFOLDED(inode) && IS_ENCRYPTED(inode);
+}
+
+/*
  * This is a bogus directory entry at the end of each leaf block that
  * records checksums.
  */
@@ -2029,11 +2047,25 @@
  */
 #define EXT4_DIR_PAD			4
 #define EXT4_DIR_ROUND			(EXT4_DIR_PAD - 1)
-#define EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
-					 ~EXT4_DIR_ROUND)
 #define EXT4_MAX_REC_LEN		((1<<16)-1)
 
 /*
+ * The rec_len is dependent on the type of directory. Directories that are
+ * casefolded and encrypted need to store the hash as well, so we add room for
+ * ext4_extended_dir_entry_2. For all entries related to '.' or '..' you should
+ * pass NULL for dir, as those entries do not use the extra fields.
+ */
+static inline unsigned int ext4_dir_rec_len(__u8 name_len,
+						const struct inode *dir)
+{
+	int rec_len = (name_len + 8 + EXT4_DIR_ROUND);
+
+	if (dir && ext4_hash_in_dirent(dir))
+		rec_len += sizeof(struct ext4_dir_entry_hash);
+	return (rec_len & ~EXT4_DIR_ROUND);
+}
+
+/*
  * If we ever get support for fs block sizes > page_size, we'll need
  * to remove the #if statements in the next two functions...
  */
@@ -2089,6 +2121,7 @@
 #define DX_HASH_LEGACY_UNSIGNED		3
 #define DX_HASH_HALF_MD4_UNSIGNED	4
 #define DX_HASH_TEA_UNSIGNED		5
+#define DX_HASH_SIPHASH			6
 
 static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
 			      const void *address, unsigned int length)
@@ -2143,6 +2176,7 @@
 };
 
 #define fname_name(p) ((p)->disk_name.name)
+#define fname_usr_name(p) ((p)->usr_fname->name)
 #define fname_len(p)  ((p)->disk_name.len)
 
 /*
@@ -2366,9 +2400,9 @@
 ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
 
 #ifdef CONFIG_UNICODE
-extern void ext4_fname_setup_ci_filename(struct inode *dir,
+extern int ext4_fname_setup_ci_filename(struct inode *dir,
 					 const struct qstr *iname,
-					 struct fscrypt_str *fname);
+					 struct ext4_filename *fname);
 #endif
 
 #ifdef CONFIG_FS_ENCRYPTION
@@ -2399,9 +2433,9 @@
 	ext4_fname_from_fscrypt_name(fname, &name);
 
 #ifdef CONFIG_UNICODE
-	ext4_fname_setup_ci_filename(dir, iname, &fname->cf_name);
+	err = ext4_fname_setup_ci_filename(dir, iname, fname);
 #endif
-	return 0;
+	return err;
 }
 
 static inline int ext4_fname_prepare_lookup(struct inode *dir,
@@ -2418,9 +2452,9 @@
 	ext4_fname_from_fscrypt_name(fname, &name);
 
 #ifdef CONFIG_UNICODE
-	ext4_fname_setup_ci_filename(dir, &dentry->d_name, &fname->cf_name);
+	err = ext4_fname_setup_ci_filename(dir, &dentry->d_name, fname);
 #endif
-	return 0;
+	return err;
 }
 
 static inline void ext4_fname_free_filename(struct ext4_filename *fname)
@@ -2445,15 +2479,16 @@
 					    int lookup,
 					    struct ext4_filename *fname)
 {
+	int err = 0;
 	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);
+	err = ext4_fname_setup_ci_filename(dir, iname, fname);
 #endif
 
-	return 0;
+	return err;
 }
 
 static inline int ext4_fname_prepare_lookup(struct inode *dir,
@@ -2477,21 +2512,22 @@
 				  struct file *,
 				  struct ext4_dir_entry_2 *,
 				  struct buffer_head *, char *, int,
-				  unsigned int);
-#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, offset)	\
+				  ext4_lblk_t, unsigned int);
+#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, lblk, offset) \
 	unlikely(__ext4_check_dir_entry(__func__, __LINE__, (dir), (filp), \
-					(de), (bh), (buf), (size), (offset)))
+				(de), (bh), (buf), (size), (lblk), (offset)))
 extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash,
 				__u32 minor_hash,
 				struct ext4_dir_entry_2 *dirent,
 				struct fscrypt_str *ent_name);
 extern void ext4_htree_free_dir_info(struct dir_private_info *p);
 extern int ext4_find_dest_de(struct inode *dir, struct inode *inode,
+			     ext4_lblk_t lblk,
 			     struct buffer_head *bh,
 			     void *buf, int buf_size,
 			     struct ext4_filename *fname,
 			     struct ext4_dir_entry_2 **dest_de);
-void ext4_insert_dentry(struct inode *inode,
+void ext4_insert_dentry(struct inode *dir, struct inode *inode,
 			struct ext4_dir_entry_2 *de,
 			int buf_size,
 			struct ext4_filename *fname);
@@ -2676,11 +2712,12 @@
 			   int buf_size,
 			   struct inode *dir,
 			   struct ext4_filename *fname,
-			   unsigned int offset,
+			   ext4_lblk_t lblk, unsigned int offset,
 			   struct ext4_dir_entry_2 **res_dir);
 extern int ext4_generic_delete_entry(handle_t *handle,
 				     struct inode *dir,
 				     struct ext4_dir_entry_2 *de_del,
+				     ext4_lblk_t lblk,
 				     struct buffer_head *bh,
 				     void *entry_buf,
 				     int buf_size,
@@ -3120,10 +3157,6 @@
 /* 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;
@@ -3215,9 +3248,6 @@
 					unsigned int blocksize);
 extern int ext4_handle_dirty_dirblock(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] = {
diff --git a/fs/ext4/hash.c b/fs/ext4/hash.c
index 3e13379..b929901 100644
--- a/fs/ext4/hash.c
+++ b/fs/ext4/hash.c
@@ -197,7 +197,7 @@
  * represented, and whether or not the returned hash is 32 bits or 64
  * bits.  32 bit hashes will return 0 for the minor hash.
  */
-static int __ext4fs_dirhash(const char *name, int len,
+static int __ext4fs_dirhash(const struct inode *dir, const char *name, int len,
 			    struct dx_hash_info *hinfo)
 {
 	__u32	hash;
@@ -259,6 +259,22 @@
 		hash = buf[0];
 		minor_hash = buf[1];
 		break;
+	case DX_HASH_SIPHASH:
+	{
+		struct qstr qname = QSTR_INIT(name, len);
+		__u64	combined_hash;
+
+		if (fscrypt_has_encryption_key(dir)) {
+			combined_hash = fscrypt_fname_siphash(dir, &qname);
+		} else {
+			ext4_warning_inode(dir, "Siphash requires key");
+			return -1;
+		}
+
+		hash = (__u32)(combined_hash >> 32);
+		minor_hash = (__u32)combined_hash;
+		break;
+	}
 	default:
 		hinfo->hash = 0;
 		return -1;
@@ -275,12 +291,13 @@
 		   struct dx_hash_info *hinfo)
 {
 #ifdef CONFIG_UNICODE
-	const struct unicode_map *um = EXT4_SB(dir->i_sb)->s_encoding;
+	const struct unicode_map *um = dir->i_sb->s_encoding;
 	int r, dlen;
 	unsigned char *buff;
 	struct qstr qstr = {.name = name, .len = len };
 
-	if (len && IS_CASEFOLDED(dir) && um) {
+	if (len && IS_CASEFOLDED(dir) && um &&
+	    (!IS_ENCRYPTED(dir) || fscrypt_has_encryption_key(dir))) {
 		buff = kzalloc(sizeof(char) * PATH_MAX, GFP_KERNEL);
 		if (!buff)
 			return -ENOMEM;
@@ -291,12 +308,12 @@
 			goto opaque_seq;
 		}
 
-		r = __ext4fs_dirhash(buff, dlen, hinfo);
+		r = __ext4fs_dirhash(dir, buff, dlen, hinfo);
 
 		kfree(buff);
 		return r;
 	}
 opaque_seq:
 #endif
-	return __ext4fs_dirhash(name, len, hinfo);
+	return __ext4fs_dirhash(dir, name, len, hinfo);
 }
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 83846cc..7cc5c0e 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -450,7 +450,10 @@
 		int ret = -1;
 
 		if (qstr) {
-			hinfo.hash_version = DX_HASH_HALF_MD4;
+			if (ext4_hash_in_dirent(parent))
+				hinfo.hash_version = DX_HASH_SIPHASH;
+			else
+				hinfo.hash_version = DX_HASH_HALF_MD4;
 			hinfo.seed = sbi->s_hash_seed;
 			ext4fs_dirhash(parent, qstr->name, qstr->len, &hinfo);
 			grp = hinfo.hash;
@@ -726,6 +729,53 @@
 	return 1;
 }
 
+static int ext4_xattr_credits_for_new_inode(struct inode *dir, mode_t mode,
+					    bool encrypt)
+{
+	struct super_block *sb = dir->i_sb;
+	int nblocks = 0;
+#ifdef CONFIG_EXT4_FS_POSIX_ACL
+	struct posix_acl *p = get_acl(dir, ACL_TYPE_DEFAULT);
+
+	if (IS_ERR(p))
+		return PTR_ERR(p);
+	if (p) {
+		int acl_size = p->a_count * sizeof(ext4_acl_entry);
+
+		nblocks += (S_ISDIR(mode) ? 2 : 1) *
+			__ext4_xattr_set_credits(sb, NULL /* inode */,
+						 NULL /* block_bh */, acl_size,
+						 true /* is_create */);
+		posix_acl_release(p);
+	}
+#endif
+
+#ifdef CONFIG_SECURITY
+	{
+		int num_security_xattrs = 1;
+
+#ifdef CONFIG_INTEGRITY
+		num_security_xattrs++;
+#endif
+		/*
+		 * We assume that security xattrs are never more than 1k.
+		 * In practice they are under 128 bytes.
+		 */
+		nblocks += num_security_xattrs *
+			__ext4_xattr_set_credits(sb, NULL /* inode */,
+						 NULL /* block_bh */, 1024,
+						 true /* is_create */);
+	}
+#endif
+	if (encrypt)
+		nblocks += __ext4_xattr_set_credits(sb,
+						    NULL /* inode */,
+						    NULL /* block_bh */,
+						    FSCRYPT_SET_CONTEXT_MAX_SIZE,
+						    true /* is_create */);
+	return nblocks;
+}
+
 /*
  * There are two policies for allocating an inode.  If the new inode is
  * a directory, then a forward search is made for a block group with both
@@ -756,7 +806,7 @@
 	ext4_group_t i;
 	ext4_group_t flex_group;
 	struct ext4_group_info *grp;
-	int encrypt = 0;
+	bool encrypt = false;
 
 	/* Cannot create files in a deleted directory */
 	if (!dir || !dir->i_nlink)
@@ -768,59 +818,6 @@
 	if (unlikely(ext4_forced_shutdown(sbi)))
 		return ERR_PTR(-EIO);
 
-	if ((IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) &&
-	    (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)) &&
-	    !(i_flags & EXT4_EA_INODE_FL)) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err)
-			return ERR_PTR(err);
-		if (!fscrypt_has_encryption_key(dir))
-			return ERR_PTR(-ENOKEY);
-		encrypt = 1;
-	}
-
-	if (!handle && sbi->s_journal && !(i_flags & EXT4_EA_INODE_FL)) {
-#ifdef CONFIG_EXT4_FS_POSIX_ACL
-		struct posix_acl *p = get_acl(dir, ACL_TYPE_DEFAULT);
-
-		if (IS_ERR(p))
-			return ERR_CAST(p);
-		if (p) {
-			int acl_size = p->a_count * sizeof(ext4_acl_entry);
-
-			nblocks += (S_ISDIR(mode) ? 2 : 1) *
-				__ext4_xattr_set_credits(sb, NULL /* inode */,
-					NULL /* block_bh */, acl_size,
-					true /* is_create */);
-			posix_acl_release(p);
-		}
-#endif
-
-#ifdef CONFIG_SECURITY
-		{
-			int num_security_xattrs = 1;
-
-#ifdef CONFIG_INTEGRITY
-			num_security_xattrs++;
-#endif
-			/*
-			 * We assume that security xattrs are never
-			 * more than 1k.  In practice they are under
-			 * 128 bytes.
-			 */
-			nblocks += num_security_xattrs *
-				__ext4_xattr_set_credits(sb, NULL /* inode */,
-					NULL /* block_bh */, 1024,
-					true /* is_create */);
-		}
-#endif
-		if (encrypt)
-			nblocks += __ext4_xattr_set_credits(sb,
-					NULL /* inode */, NULL /* block_bh */,
-					FSCRYPT_SET_CONTEXT_MAX_SIZE,
-					true /* is_create */);
-	}
-
 	ngroups = ext4_get_groups_count(sb);
 	trace_ext4_request_inode(dir, mode);
 	inode = new_inode(sb);
@@ -850,10 +847,25 @@
 	else
 		ei->i_projid = make_kprojid(&init_user_ns, EXT4_DEF_PROJID);
 
+	if (!(i_flags & EXT4_EA_INODE_FL)) {
+		err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
+		if (err)
+			goto out;
+	}
+
 	err = dquot_initialize(inode);
 	if (err)
 		goto out;
 
+	if (!handle && sbi->s_journal && !(i_flags & EXT4_EA_INODE_FL)) {
+		ret2 = ext4_xattr_credits_for_new_inode(dir, mode, encrypt);
+		if (ret2 < 0) {
+			err = ret2;
+			goto out;
+		}
+		nblocks += ret2;
+	}
+
 	if (!goal)
 		goal = sbi->s_inode_goal;
 
@@ -1146,7 +1158,7 @@
 	 * prevent its deduplication.
 	 */
 	if (encrypt) {
-		err = fscrypt_inherit_context(dir, inode, handle, true);
+		err = fscrypt_set_context(inode, handle);
 		if (err)
 			goto fail_free_drop;
 	}
diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c
index cdb10e9..571cb6e 100644
--- a/fs/ext4/inline.c
+++ b/fs/ext4/inline.c
@@ -12,6 +12,7 @@
 #include "ext4.h"
 #include "xattr.h"
 #include "truncate.h"
+#include <trace/events/android_fs.h>
 
 #define EXT4_XATTR_SYSTEM_DATA	"data"
 #define EXT4_MIN_INLINE_DATA_SIZE	((sizeof(__le32) * EXT4_N_BLOCKS))
@@ -505,6 +506,17 @@
 		return -EAGAIN;
 	}
 
+	if (trace_android_fs_dataread_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, page_offset(page),
+						PAGE_SIZE, current->pid,
+						path, current->comm);
+	}
+
 	/*
 	 * Current inline data can only exist in the 1st page,
 	 * So for all the other pages, just set them uptodate.
@@ -516,6 +528,8 @@
 		SetPageUptodate(page);
 	}
 
+	trace_android_fs_dataread_end(inode, page_offset(page), PAGE_SIZE);
+
 	up_read(&EXT4_I(inode)->xattr_sem);
 
 	unlock_page(page);
@@ -997,7 +1011,7 @@
 			     offset, de_len, de->name_len, de->name,
 			     de->name_len, le32_to_cpu(de->inode));
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 inline_start, inline_size, offset))
+					 inline_start, inline_size, 0, offset))
 			BUG();
 
 		offset += de_len;
@@ -1023,7 +1037,7 @@
 	int		err;
 	struct ext4_dir_entry_2 *de;
 
-	err = ext4_find_dest_de(dir, inode, iloc->bh, inline_start,
+	err = ext4_find_dest_de(dir, inode, 0, iloc->bh, inline_start,
 				inline_size, fname, &de);
 	if (err)
 		return err;
@@ -1032,7 +1046,7 @@
 	err = ext4_journal_get_write_access(handle, iloc->bh);
 	if (err)
 		return err;
-	ext4_insert_dentry(inode, de, inline_size, fname);
+	ext4_insert_dentry(dir, inode, de, inline_size, fname);
 
 	ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size);
 
@@ -1101,7 +1115,7 @@
 	int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE;
 	int new_size = get_max_inline_xattr_value_size(dir, iloc);
 
-	if (new_size - old_size <= EXT4_DIR_REC_LEN(1))
+	if (new_size - old_size <= ext4_dir_rec_len(1, NULL))
 		return -ENOSPC;
 
 	ret = ext4_update_inline_data(handle, dir,
@@ -1379,8 +1393,8 @@
 			fake.name_len = 1;
 			strcpy(fake.name, ".");
 			fake.rec_len = ext4_rec_len_to_disk(
-						EXT4_DIR_REC_LEN(fake.name_len),
-						inline_size);
+					  ext4_dir_rec_len(fake.name_len, NULL),
+					  inline_size);
 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
 			de = &fake;
 			pos = EXT4_INLINE_DOTDOT_OFFSET;
@@ -1389,8 +1403,8 @@
 			fake.name_len = 2;
 			strcpy(fake.name, "..");
 			fake.rec_len = ext4_rec_len_to_disk(
-						EXT4_DIR_REC_LEN(fake.name_len),
-						inline_size);
+					  ext4_dir_rec_len(fake.name_len, NULL),
+					  inline_size);
 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
 			de = &fake;
 			pos = EXT4_INLINE_DOTDOT_SIZE;
@@ -1399,13 +1413,18 @@
 			pos += ext4_rec_len_from_disk(de->rec_len, inline_size);
 			if (ext4_check_dir_entry(inode, dir_file, de,
 					 iloc.bh, dir_buf,
-					 inline_size, pos)) {
+					 inline_size, block, pos)) {
 				ret = count;
 				goto out;
 			}
 		}
 
-		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		if (ext4_hash_in_dirent(dir)) {
+			hinfo->hash = EXT4_DIRENT_HASH(de);
+			hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de);
+		} else {
+			ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		}
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
@@ -1487,8 +1506,8 @@
 	 * So we will use extra_offset and extra_size to indicate them
 	 * during the inline dir iteration.
 	 */
-	dotdot_offset = EXT4_DIR_REC_LEN(1);
-	dotdot_size = dotdot_offset + EXT4_DIR_REC_LEN(2);
+	dotdot_offset = ext4_dir_rec_len(1, NULL);
+	dotdot_size = dotdot_offset + ext4_dir_rec_len(2, NULL);
 	extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE;
 	extra_size = extra_offset + inline_size;
 
@@ -1523,7 +1542,7 @@
 			 * failure will be detected in the
 			 * dirent test below. */
 			if (ext4_rec_len_from_disk(de->rec_len, extra_size)
-				< EXT4_DIR_REC_LEN(1))
+				< ext4_dir_rec_len(1, NULL))
 				break;
 			i += ext4_rec_len_from_disk(de->rec_len,
 						    extra_size);
@@ -1551,7 +1570,7 @@
 		de = (struct ext4_dir_entry_2 *)
 			(dir_buf + ctx->pos - extra_offset);
 		if (ext4_check_dir_entry(inode, file, de, iloc.bh, dir_buf,
-					 extra_size, ctx->pos))
+					 extra_size, 0, ctx->pos))
 			goto out;
 		if (le32_to_cpu(de->inode)) {
 			if (!dir_emit(ctx, de->name, de->name_len,
@@ -1643,7 +1662,7 @@
 						EXT4_INLINE_DOTDOT_SIZE;
 	inline_size = EXT4_MIN_INLINE_DATA_SIZE - EXT4_INLINE_DOTDOT_SIZE;
 	ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
-			      dir, fname, 0, res_dir);
+			      dir, fname, 0, 0, res_dir);
 	if (ret == 1)
 		goto out_find;
 	if (ret < 0)
@@ -1656,7 +1675,7 @@
 	inline_size = ext4_get_inline_size(dir) - EXT4_MIN_INLINE_DATA_SIZE;
 
 	ret = ext4_search_dir(iloc.bh, inline_start, inline_size,
-			      dir, fname, 0, res_dir);
+			      dir, fname, 0, 0, res_dir);
 	if (ret == 1)
 		goto out_find;
 
@@ -1705,7 +1724,7 @@
 	if (err)
 		goto out;
 
-	err = ext4_generic_delete_entry(handle, dir, de_del, bh,
+	err = ext4_generic_delete_entry(handle, dir, de_del, 0, bh,
 					inline_start, inline_size, 0);
 	if (err)
 		goto out;
@@ -1789,7 +1808,7 @@
 					   &inline_pos, &inline_size);
 		if (ext4_check_dir_entry(dir, NULL, de,
 					 iloc.bh, inline_pos,
-					 inline_size, offset)) {
+					 inline_size, 0, offset)) {
 			ext4_warning(dir->i_sb,
 				     "bad inline directory (dir #%lu) - "
 				     "inode %u, rec_len %u, name_len %d"
diff --git a/fs/ext4/inode-test.c b/fs/ext4/inode-test.c
new file mode 100644
index 0000000..95620bf
--- /dev/null
+++ b/fs/ext4/inode-test.c
@@ -0,0 +1,274 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test of ext4 inode that verify the seconds part of [a/c/m]
+ * timestamps in ext4 inode structs are decoded correctly.
+ */
+
+#include <kunit/test.h>
+#include <linux/kernel.h>
+#include <linux/time64.h>
+
+#include "ext4.h"
+
+/*
+ * For constructing the nonnegative timestamp lower bound value.
+ * binary: 00000000 00000000 00000000 00000000
+ */
+#define LOWER_MSB_0 0L
+/*
+ * For constructing the nonnegative timestamp upper bound value.
+ * binary: 01111111 11111111 11111111 11111111
+ *
+ */
+#define UPPER_MSB_0 0x7fffffffL
+/*
+ * For constructing the negative timestamp lower bound value.
+ * binary: 10000000 00000000 00000000 00000000
+ */
+#define LOWER_MSB_1 (-0x80000000L)
+/*
+ * For constructing the negative timestamp upper bound value.
+ * binary: 11111111 11111111 11111111 11111111
+ */
+#define UPPER_MSB_1 (-1L)
+/*
+ * Upper bound for nanoseconds value supported by the encoding.
+ * binary: 00111111 11111111 11111111 11111111
+ */
+#define MAX_NANOSECONDS ((1L << 30) - 1)
+
+#define CASE_NAME_FORMAT "%s: msb:%x lower_bound:%x extra_bits: %x"
+
+#define LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE\
+	"1901-12-13 Lower bound of 32bit < 0 timestamp, no extra bits"
+#define UPPER_BOUND_NEG_NO_EXTRA_BITS_CASE\
+	"1969-12-31 Upper bound of 32bit < 0 timestamp, no extra bits"
+#define LOWER_BOUND_NONNEG_NO_EXTRA_BITS_CASE\
+	"1970-01-01 Lower bound of 32bit >=0 timestamp, no extra bits"
+#define UPPER_BOUND_NONNEG_NO_EXTRA_BITS_CASE\
+	"2038-01-19 Upper bound of 32bit >=0 timestamp, no extra bits"
+#define LOWER_BOUND_NEG_LO_1_CASE\
+	"2038-01-19 Lower bound of 32bit <0 timestamp, lo extra sec bit on"
+#define UPPER_BOUND_NEG_LO_1_CASE\
+	"2106-02-07 Upper bound of 32bit <0 timestamp, lo extra sec bit on"
+#define LOWER_BOUND_NONNEG_LO_1_CASE\
+	"2106-02-07 Lower bound of 32bit >=0 timestamp, lo extra sec bit on"
+#define UPPER_BOUND_NONNEG_LO_1_CASE\
+	"2174-02-25 Upper bound of 32bit >=0 timestamp, lo extra sec bit on"
+#define LOWER_BOUND_NEG_HI_1_CASE\
+	"2174-02-25 Lower bound of 32bit <0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NEG_HI_1_CASE\
+	"2242-03-16 Upper bound of 32bit <0 timestamp, hi extra sec bit on"
+#define LOWER_BOUND_NONNEG_HI_1_CASE\
+	"2242-03-16 Lower bound of 32bit >=0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NONNEG_HI_1_CASE\
+	"2310-04-04 Upper bound of 32bit >=0 timestamp, hi extra sec bit on"
+#define UPPER_BOUND_NONNEG_HI_1_NS_1_CASE\
+	"2310-04-04 Upper bound of 32bit>=0 timestamp, hi extra sec bit 1. 1 ns"
+#define LOWER_BOUND_NONNEG_HI_1_NS_MAX_CASE\
+	"2378-04-22 Lower bound of 32bit>= timestamp. Extra sec bits 1. Max ns"
+#define LOWER_BOUND_NONNEG_EXTRA_BITS_1_CASE\
+	"2378-04-22 Lower bound of 32bit >=0 timestamp. All extra sec bits on"
+#define UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE\
+	"2446-05-10 Upper bound of 32bit >=0 timestamp. All extra sec bits on"
+
+struct timestamp_expectation {
+	const char *test_case_name;
+	struct timespec64 expected;
+	u32 extra_bits;
+	bool msb_set;
+	bool lower_bound;
+};
+
+static time64_t get_32bit_time(const struct timestamp_expectation * const test)
+{
+	if (test->msb_set) {
+		if (test->lower_bound)
+			return LOWER_MSB_1;
+
+		return UPPER_MSB_1;
+	}
+
+	if (test->lower_bound)
+		return LOWER_MSB_0;
+	return UPPER_MSB_0;
+}
+
+
+/*
+ *  Test data is derived from the table in the Inode Timestamps section of
+ *  Documentation/filesystems/ext4/inodes.rst.
+ */
+static void inode_test_xtimestamp_decoding(struct kunit *test)
+{
+	const struct timestamp_expectation test_data[] = {
+		{
+			.test_case_name = LOWER_BOUND_NEG_NO_EXTRA_BITS_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits = 0,
+			.expected = {.tv_sec = -0x80000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_NO_EXTRA_BITS_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 0,
+			.expected = {.tv_sec = -1LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 0,
+			.expected = {0LL, 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_NO_EXTRA_BITS_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 0,
+			.expected = {.tv_sec = 0x7fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NEG_LO_1_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x80000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_LO_1_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0xffffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_LO_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x100000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_LO_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 1,
+			.expected = {.tv_sec = 0x17fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NEG_HI_1_CASE,
+			.msb_set = true,
+			.lower_bound = true,
+			.extra_bits =  2,
+			.expected = {.tv_sec = 0x180000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NEG_HI_1_CASE,
+			.msb_set = true,
+			.lower_bound = false,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x1ffffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_HI_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x200000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_HI_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 2,
+			.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_HI_1_NS_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 6,
+			.expected = {.tv_sec = 0x27fffffffLL, .tv_nsec = 1L},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_HI_1_NS_MAX_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 0xFFFFFFFF,
+			.expected = {.tv_sec = 0x300000000LL,
+				     .tv_nsec = MAX_NANOSECONDS},
+		},
+
+		{
+			.test_case_name = LOWER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
+			.msb_set = false,
+			.lower_bound = true,
+			.extra_bits = 3,
+			.expected = {.tv_sec = 0x300000000LL, .tv_nsec = 0L},
+		},
+
+		{
+			.test_case_name = UPPER_BOUND_NONNEG_EXTRA_BITS_1_CASE,
+			.msb_set = false,
+			.lower_bound = false,
+			.extra_bits = 3,
+			.expected = {.tv_sec = 0x37fffffffLL, .tv_nsec = 0L},
+		}
+	};
+
+	struct timespec64 timestamp;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(test_data); ++i) {
+		timestamp.tv_sec = get_32bit_time(&test_data[i]);
+		ext4_decode_extra_time(&timestamp,
+				       cpu_to_le32(test_data[i].extra_bits));
+
+		KUNIT_EXPECT_EQ_MSG(test,
+				    test_data[i].expected.tv_sec,
+				    timestamp.tv_sec,
+				    CASE_NAME_FORMAT,
+				    test_data[i].test_case_name,
+				    test_data[i].msb_set,
+				    test_data[i].lower_bound,
+				    test_data[i].extra_bits);
+		KUNIT_EXPECT_EQ_MSG(test,
+				    test_data[i].expected.tv_nsec,
+				    timestamp.tv_nsec,
+				    CASE_NAME_FORMAT,
+				    test_data[i].test_case_name,
+				    test_data[i].msb_set,
+				    test_data[i].lower_bound,
+				    test_data[i].extra_bits);
+	}
+}
+
+static struct kunit_case ext4_inode_test_cases[] = {
+	KUNIT_CASE(inode_test_xtimestamp_decoding),
+	{}
+};
+
+static struct kunit_suite ext4_inode_test_suite = {
+	.name = "ext4_inode_test",
+	.test_cases = ext4_inode_test_cases,
+};
+
+kunit_test_suites(&ext4_inode_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index dcbd8ac..203d891f 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -47,6 +47,7 @@
 #include "truncate.h"
 
 #include <trace/events/ext4.h>
+#include <trace/events/android_fs.h>
 
 #define MPAGE_DA_EXTENT_TAIL 0x01
 
@@ -1255,7 +1256,7 @@
 	}
 	if (unlikely(err)) {
 		page_zero_new_buffers(page, from, to);
-	} else if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode)) {
+	} else if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
 		for (i = 0; i < nr_wait; i++) {
 			int err2;
 
@@ -1287,6 +1288,16 @@
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
 		return -EIO;
 
+	if (trace_android_fs_datawrite_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_ext4_write_begin(inode, pos, len, flags);
 	/*
 	 * Reserve one block more for addition to orphan list in case
@@ -1429,6 +1440,7 @@
 	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);
 	if (inline_data) {
 		ret = ext4_write_inline_data_end(inode, pos, len,
@@ -1541,6 +1553,7 @@
 	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);
 	from = pos & (PAGE_SIZE - 1);
 	to = from + len;
@@ -3066,6 +3079,16 @@
 					len, flags, pagep, fsdata);
 	}
 	*fsdata = (void *)0;
+	if (trace_android_fs_datawrite_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid,
+						 path, current->comm);
+	}
 	trace_ext4_da_write_begin(inode, pos, len, flags);
 
 	if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
@@ -3184,6 +3207,7 @@
 		return ext4_write_end(file, mapping, pos,
 				      len, copied, page, fsdata);
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_ext4_da_write_end(inode, pos, len, copied);
 	start = pos & (PAGE_SIZE - 1);
 	end = start + copied - 1;
@@ -3889,11 +3913,11 @@
 	size_t count = iov_iter_count(iter);
 	loff_t offset = iocb->ki_pos;
 	ssize_t ret;
+	int rw = iov_iter_rw(iter);
 
-#ifdef CONFIG_FS_ENCRYPTION
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
+	if (!fscrypt_dio_supported(iocb, iter))
 		return 0;
-#endif
+
 	if (fsverity_active(inode))
 		return 0;
 
@@ -3907,12 +3931,42 @@
 	if (ext4_has_inline_data(inode))
 		return 0;
 
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, offset, count,
+						current->pid, path,
+						current->comm);
+	}
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, offset, count,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_ext4_direct_IO_enter(inode, offset, count, iov_iter_rw(iter));
 	if (iov_iter_rw(iter) == READ)
 		ret = ext4_direct_IO_read(iocb, iter);
 	else
 		ret = ext4_direct_IO_write(iocb, iter);
 	trace_ext4_direct_IO_exit(inode, offset, count, iov_iter_rw(iter), ret);
+
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ))
+		trace_android_fs_dataread_end(inode, offset, count);
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE))
+		trace_android_fs_datawrite_end(inode, offset, count);
+
 	return ret;
 }
 
@@ -4077,7 +4131,7 @@
 		/* Uhhuh. Read error. Complain and punt. */
 		if (!buffer_uptodate(bh))
 			goto unlock;
-		if (S_ISREG(inode->i_mode) && IS_ENCRYPTED(inode)) {
+		if (fscrypt_inode_uses_fs_layer_crypto(inode)) {
 			/* We expect the key to be set. */
 			BUG_ON(!fscrypt_has_encryption_key(inode));
 			WARN_ON_ONCE(fscrypt_decrypt_pagecache_blocks(
@@ -5777,12 +5831,15 @@
 		stat->attributes |= STATX_ATTR_IMMUTABLE;
 	if (flags & EXT4_NODUMP_FL)
 		stat->attributes |= STATX_ATTR_NODUMP;
+	if (flags & EXT4_VERITY_FL)
+		stat->attributes |= STATX_ATTR_VERITY;
 
 	stat->attributes_mask |= (STATX_ATTR_APPEND |
 				  STATX_ATTR_COMPRESSED |
 				  STATX_ATTR_ENCRYPTED |
 				  STATX_ATTR_IMMUTABLE |
-				  STATX_ATTR_NODUMP);
+				  STATX_ATTR_NODUMP |
+				  STATX_ATTR_VERITY);
 
 	generic_fillattr(inode, stat);
 	return 0;
diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index ba13fbb..e657e7d 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -1213,6 +1213,11 @@
 			return -EOPNOTSUPP;
 		return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
 
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		if (!ext4_has_feature_encrypt(sb))
+			return -EOPNOTSUPP;
+		return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
+
 	case EXT4_IOC_CLEAR_ES_CACHE:
 	{
 		if (!inode_owner_or_capable(inode))
@@ -1307,6 +1312,12 @@
 			return -EOPNOTSUPP;
 		return fsverity_ioctl_measure(filp, (void __user *)arg);
 
+	case FS_IOC_READ_VERITY_METADATA:
+		if (!ext4_has_feature_verity(sb))
+			return -EOPNOTSUPP;
+		return fsverity_ioctl_read_metadata(filp,
+						    (const void __user *)arg);
+
 	default:
 		return -ENOTTY;
 	}
@@ -1372,13 +1383,17 @@
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 	case EXT4_IOC_SHUTDOWN:
 	case FS_IOC_GETFSMAP:
 	case FS_IOC_ENABLE_VERITY:
 	case FS_IOC_MEASURE_VERITY:
+	case FS_IOC_READ_VERITY_METADATA:
 	case EXT4_IOC_CLEAR_ES_CACHE:
 	case EXT4_IOC_GETSTATE:
 	case EXT4_IOC_GET_ES_CACHE:
+	case EXT4_IOC_FSGETXATTR:
+	case EXT4_IOC_FSSETXATTR:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c
index 9905720..170ec4f 100644
--- a/fs/ext4/namei.c
+++ b/fs/ext4/namei.c
@@ -277,9 +277,11 @@
 		       unsigned blocksize, struct dx_hash_info *hinfo,
 		       struct dx_map_entry map[]);
 static void dx_sort_map(struct dx_map_entry *map, unsigned count);
-static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to,
-		struct dx_map_entry *offsets, int count, unsigned blocksize);
-static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize);
+static struct ext4_dir_entry_2 *dx_move_dirents(struct inode *dir, char *from,
+					char *to, struct dx_map_entry *offsets,
+					int count, unsigned int blocksize);
+static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base,
+						unsigned int blocksize);
 static void dx_insert_block(struct dx_frame *frame,
 					u32 hash, ext4_lblk_t block);
 static int ext4_htree_next_block(struct inode *dir, __u32 hash,
@@ -288,7 +290,7 @@
 				 __u32 *start_hash);
 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 		struct ext4_filename *fname,
-		struct ext4_dir_entry_2 **res_dir);
+		struct ext4_dir_entry_2 **res_dir, ext4_lblk_t *lblk);
 static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 			     struct inode *dir, struct inode *inode);
 
@@ -571,8 +573,9 @@
 
 static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
 {
-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
-		EXT4_DIR_REC_LEN(2) - infosize;
+	unsigned int entry_space = dir->i_sb->s_blocksize -
+			ext4_dir_rec_len(1, NULL) -
+			ext4_dir_rec_len(2, NULL) - infosize;
 
 	if (ext4_has_metadata_csum(dir->i_sb))
 		entry_space -= sizeof(struct dx_tail);
@@ -581,7 +584,8 @@
 
 static inline unsigned dx_node_limit(struct inode *dir)
 {
-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
+	unsigned int entry_space = dir->i_sb->s_blocksize -
+			ext4_dir_rec_len(0, dir);
 
 	if (ext4_has_metadata_csum(dir->i_sb))
 		entry_space -= sizeof(struct dx_tail);
@@ -636,13 +640,7 @@
 
 				name  = de->name;
 				len = de->name_len;
-				if (IS_ENCRYPTED(dir))
-					res = fscrypt_get_encryption_info(dir);
-				if (res) {
-					printk(KERN_WARNING "Error setting up"
-					       " fname crypto: %d\n", res);
-				}
-				if (!fscrypt_has_encryption_key(dir)) {
+				if (!IS_ENCRYPTED(dir)) {
 					/* Directory is not encrypted */
 					ext4fs_dirhash(dir, de->name,
 						de->name_len, &h);
@@ -656,8 +654,7 @@
 
 					/* Directory is encrypted */
 					res = fscrypt_fname_alloc_buffer(
-						dir, len,
-						&fname_crypto_str);
+						len, &fname_crypto_str);
 					if (res)
 						printk(KERN_WARNING "Error "
 							"allocating crypto "
@@ -677,7 +674,10 @@
 						name = fname_crypto_str.name;
 						len = fname_crypto_str.len;
 					}
-					ext4fs_dirhash(dir, de->name,
+					if (IS_CASEFOLDED(dir))
+						h.hash = EXT4_DIRENT_HASH(de);
+					else
+						ext4fs_dirhash(dir, de->name,
 						       de->name_len, &h);
 					printk("%*.s:(E)%x.%u ", len, name,
 					       h.hash, (unsigned) ((char *) de
@@ -693,7 +693,7 @@
 				       (unsigned) ((char *) de - base));
 #endif
 			}
-			space += EXT4_DIR_REC_LEN(de->name_len);
+			space += ext4_dir_rec_len(de->name_len, dir);
 			names++;
 		}
 		de = ext4_next_entry(de, size);
@@ -765,18 +765,34 @@
 	root = (struct dx_root *) frame->bh->b_data;
 	if (root->info.hash_version != DX_HASH_TEA &&
 	    root->info.hash_version != DX_HASH_HALF_MD4 &&
-	    root->info.hash_version != DX_HASH_LEGACY) {
+	    root->info.hash_version != DX_HASH_LEGACY &&
+	    root->info.hash_version != DX_HASH_SIPHASH) {
 		ext4_warning_inode(dir, "Unrecognised inode hash code %u",
 				   root->info.hash_version);
 		goto fail;
 	}
+	if (ext4_hash_in_dirent(dir)) {
+		if (root->info.hash_version != DX_HASH_SIPHASH) {
+			ext4_warning_inode(dir,
+				"Hash in dirent, but hash is not SIPHASH");
+			goto fail;
+		}
+	} else {
+		if (root->info.hash_version == DX_HASH_SIPHASH) {
+			ext4_warning_inode(dir,
+				"Hash code is SIPHASH, but hash not in dirent");
+			goto fail;
+		}
+	}
 	if (fname)
 		hinfo = &fname->hinfo;
 	hinfo->hash_version = root->info.hash_version;
 	if (hinfo->hash_version <= DX_HASH_TEA)
 		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))
+	/* hash is already computed for encrypted casefolded directory */
+	if (fname && fname_name(fname) &&
+				!(IS_ENCRYPTED(dir) && IS_CASEFOLDED(dir)))
 		ext4fs_dirhash(dir, fname_name(fname), fname_len(fname), hinfo);
 	hash = hinfo->hash;
 
@@ -991,6 +1007,7 @@
 	struct ext4_dir_entry_2 *de, *top;
 	int err = 0, count = 0;
 	struct fscrypt_str fname_crypto_str = FSTR_INIT(NULL, 0), tmp_str;
+	int csum = ext4_has_metadata_csum(dir->i_sb);
 
 	dxtrace(printk(KERN_INFO "In htree dirblock_to_tree: block %lu\n",
 							(unsigned long)block));
@@ -999,19 +1016,21 @@
 		return PTR_ERR(bh);
 
 	de = (struct ext4_dir_entry_2 *) bh->b_data;
+	/* csum entries are not larger in the casefolded encrypted case */
 	top = (struct ext4_dir_entry_2 *) ((char *) de +
 					   dir->i_sb->s_blocksize -
-					   EXT4_DIR_REC_LEN(0));
+					   ext4_dir_rec_len(0,
+							   csum ? NULL : dir));
 #ifdef CONFIG_FS_ENCRYPTION
 	/* Check if the directory is encrypted */
 	if (IS_ENCRYPTED(dir)) {
-		err = fscrypt_get_encryption_info(dir);
+		err = fscrypt_prepare_readdir(dir);
 		if (err < 0) {
 			brelse(bh);
 			return err;
 		}
-		err = fscrypt_fname_alloc_buffer(dir, EXT4_NAME_LEN,
-						     &fname_crypto_str);
+		err = fscrypt_fname_alloc_buffer(EXT4_NAME_LEN,
+						 &fname_crypto_str);
 		if (err < 0) {
 			brelse(bh);
 			return err;
@@ -1020,13 +1039,23 @@
 #endif
 	for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-				bh->b_data, bh->b_size,
+				bh->b_data, bh->b_size, block,
 				(block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb))
 					 + ((char *)de - bh->b_data))) {
 			/* silently ignore the rest of the block */
 			break;
 		}
-		ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		if (ext4_hash_in_dirent(dir)) {
+			if (de->name_len && de->inode) {
+				hinfo->hash = EXT4_DIRENT_HASH(de);
+				hinfo->minor_hash = EXT4_DIRENT_MINOR_HASH(de);
+			} else {
+				hinfo->hash = 0;
+				hinfo->minor_hash = 0;
+			}
+		} else {
+			ext4fs_dirhash(dir, de->name, de->name_len, hinfo);
+		}
 		if ((hinfo->hash < start_hash) ||
 		    ((hinfo->hash == start_hash) &&
 		     (hinfo->minor_hash < start_minor_hash)))
@@ -1097,7 +1126,11 @@
 		       start_hash, start_minor_hash));
 	dir = file_inode(dir_file);
 	if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) {
-		hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
+		if (ext4_hash_in_dirent(dir))
+			hinfo.hash_version = DX_HASH_SIPHASH;
+		else
+			hinfo.hash_version =
+					EXT4_SB(dir->i_sb)->s_def_hash_version;
 		if (hinfo.hash_version <= DX_HASH_TEA)
 			hinfo.hash_version +=
 				EXT4_SB(dir->i_sb)->s_hash_unsigned;
@@ -1190,11 +1223,12 @@
 static inline int search_dirblock(struct buffer_head *bh,
 				  struct inode *dir,
 				  struct ext4_filename *fname,
+				  ext4_lblk_t lblk,
 				  unsigned int offset,
 				  struct ext4_dir_entry_2 **res_dir)
 {
 	return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir,
-			       fname, offset, res_dir);
+			       fname, lblk, offset, res_dir);
 }
 
 /*
@@ -1215,7 +1249,10 @@
 
 	while ((char *) de < base + blocksize) {
 		if (de->name_len && de->inode) {
-			ext4fs_dirhash(dir, de->name, de->name_len, &h);
+			if (ext4_hash_in_dirent(dir))
+				h.hash = EXT4_DIRENT_HASH(de);
+			else
+				ext4fs_dirhash(dir, de->name, de->name_len, &h);
 			map_tail--;
 			map_tail->hash = h.hash;
 			map_tail->offs = ((char *) de - base)>>2;
@@ -1279,58 +1316,85 @@
  * 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)
+static int ext4_ci_compare(const struct inode *parent, const struct qstr *name,
+			   u8 *de_name, size_t de_name_len, bool quick)
 {
-	const struct ext4_sb_info *sbi = EXT4_SB(parent->i_sb);
-	const struct unicode_map *um = sbi->s_encoding;
+	const struct super_block *sb = parent->i_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct fscrypt_str decrypted_name = FSTR_INIT(NULL, de_name_len);
+	struct qstr entry = QSTR_INIT(de_name, de_name_len);
 	int ret;
 
-	if (quick)
-		ret = utf8_strncasecmp_folded(um, name, entry);
-	else
-		ret = utf8_strncasecmp(um, name, entry);
+	if (IS_ENCRYPTED(parent)) {
+		const struct fscrypt_str encrypted_name =
+				FSTR_INIT(de_name, de_name_len);
 
+		decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL);
+		if (!decrypted_name.name)
+			return -ENOMEM;
+		ret = fscrypt_fname_disk_to_usr(parent, 0, 0, &encrypted_name,
+						&decrypted_name);
+		if (ret < 0)
+			goto out;
+		entry.name = decrypted_name.name;
+		entry.len = decrypted_name.len;
+	}
+
+	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);
+		if (sb_has_strict_encoding(sb))
+			ret = -EINVAL;
+		else if (name->len != entry.len)
+			ret = 1;
+		else
+			ret = !!memcmp(name->name, entry.name, entry.len);
 	}
-
+out:
+	kfree(decrypted_name.name);
 	return ret;
 }
 
-void ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
-				  struct fscrypt_str *cf_name)
+int ext4_fname_setup_ci_filename(struct inode *dir, const struct qstr *iname,
+				  struct ext4_filename *name)
 {
+	struct fscrypt_str *cf_name = &name->cf_name;
+	struct dx_hash_info *hinfo = &name->hinfo;
 	int len;
 
-	if (!IS_CASEFOLDED(dir) || !EXT4_SB(dir->i_sb)->s_encoding) {
+	if (!IS_CASEFOLDED(dir) || !dir->i_sb->s_encoding ||
+	    (IS_ENCRYPTED(dir) && !fscrypt_has_encryption_key(dir))) {
 		cf_name->name = NULL;
-		return;
+		return 0;
 	}
 
 	cf_name->name = kmalloc(EXT4_NAME_LEN, GFP_NOFS);
 	if (!cf_name->name)
-		return;
+		return -ENOMEM;
 
-	len = utf8_casefold(EXT4_SB(dir->i_sb)->s_encoding,
+	len = utf8_casefold(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;
+	if (!IS_ENCRYPTED(dir))
+		return 0;
 
+	hinfo->hash_version = DX_HASH_SIPHASH;
+	hinfo->seed = NULL;
+	if (cf_name->name)
+		ext4fs_dirhash(dir, cf_name->name, cf_name->len, hinfo);
+	else
+		ext4fs_dirhash(dir, iname->name, iname->len, hinfo);
+	return 0;
 }
 #endif
 
@@ -1339,14 +1403,11 @@
  *
  * Return: %true if the directory entry matches, otherwise %false.
  */
-static inline bool ext4_match(const struct inode *parent,
+static bool ext4_match(struct inode *parent,
 			      const struct ext4_filename *fname,
-			      const struct ext4_dir_entry_2 *de)
+			      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;
@@ -1358,14 +1419,24 @@
 #endif
 
 #ifdef CONFIG_UNICODE
-	if (EXT4_SB(parent->i_sb)->s_encoding && IS_CASEFOLDED(parent)) {
+	if (parent->i_sb->s_encoding && IS_CASEFOLDED(parent) &&
+	    (!IS_ENCRYPTED(parent) || fscrypt_has_encryption_key(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);
+			if (IS_ENCRYPTED(parent)) {
+				if (fname->hinfo.hash != EXT4_DIRENT_HASH(de) ||
+					fname->hinfo.minor_hash !=
+						EXT4_DIRENT_MINOR_HASH(de)) {
+
+					return 0;
+				}
+			}
+			return !ext4_ci_compare(parent, &cf, de->name,
+							de->name_len, true);
 		}
-		return !ext4_ci_compare(parent, fname->usr_fname, &entry,
-					false);
+		return !ext4_ci_compare(parent, fname->usr_fname, de->name,
+						de->name_len, false);
 	}
 #endif
 
@@ -1377,7 +1448,8 @@
  */
 int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
 		    struct inode *dir, struct ext4_filename *fname,
-		    unsigned int offset, struct ext4_dir_entry_2 **res_dir)
+		    ext4_lblk_t lblk, unsigned int offset,
+		    struct ext4_dir_entry_2 **res_dir)
 {
 	struct ext4_dir_entry_2 * de;
 	char * dlimit;
@@ -1393,7 +1465,7 @@
 			/* found a match - just to be sure, do
 			 * a full check */
 			if (ext4_check_dir_entry(dir, NULL, de, bh, search_buf,
-						 buf_size, offset))
+						 buf_size, lblk, offset))
 				return -1;
 			*res_dir = de;
 			return 1;
@@ -1439,7 +1511,7 @@
 static struct buffer_head *__ext4_find_entry(struct inode *dir,
 					     struct ext4_filename *fname,
 					     struct ext4_dir_entry_2 **res_dir,
-					     int *inlined)
+					     int *inlined, ext4_lblk_t *lblk)
 {
 	struct super_block *sb;
 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
@@ -1463,6 +1535,8 @@
 		int has_inline_data = 1;
 		ret = ext4_find_inline_entry(dir, fname, res_dir,
 					     &has_inline_data);
+		if (lblk)
+			*lblk = 0;
 		if (has_inline_data) {
 			if (inlined)
 				*inlined = 1;
@@ -1481,7 +1555,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, lblk);
 		/*
 		 * On success, or if the error was file not found,
 		 * return.  Otherwise, fall back to doing a search the
@@ -1545,9 +1619,11 @@
 			goto cleanup_and_exit;
 		}
 		set_buffer_verified(bh);
-		i = search_dirblock(bh, dir, fname,
+		i = search_dirblock(bh, dir, fname, block,
 			    block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
 		if (i == 1) {
+			if (lblk)
+				*lblk = block;
 			EXT4_I(dir)->i_dir_start_lookup = block;
 			ret = bh;
 			goto cleanup_and_exit;
@@ -1582,7 +1658,7 @@
 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 *inlined, ext4_lblk_t *lblk)
 {
 	int err;
 	struct ext4_filename fname;
@@ -1594,7 +1670,7 @@
 	if (err)
 		return ERR_PTR(err);
 
-	bh = __ext4_find_entry(dir, &fname, res_dir, inlined);
+	bh = __ext4_find_entry(dir, &fname, res_dir, inlined, lblk);
 
 	ext4_fname_free_filename(&fname);
 	return bh;
@@ -1609,12 +1685,13 @@
 	struct buffer_head *bh;
 
 	err = ext4_fname_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		return NULL;
 	if (err)
 		return ERR_PTR(err);
 
-	bh = __ext4_find_entry(dir, &fname, res_dir, NULL);
+	bh = __ext4_find_entry(dir, &fname, res_dir, NULL, NULL);
 
 	ext4_fname_free_filename(&fname);
 	return bh;
@@ -1622,7 +1699,7 @@
 
 static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 			struct ext4_filename *fname,
-			struct ext4_dir_entry_2 **res_dir)
+			struct ext4_dir_entry_2 **res_dir, ext4_lblk_t *lblk)
 {
 	struct super_block * sb = dir->i_sb;
 	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
@@ -1638,11 +1715,13 @@
 		return (struct buffer_head *) frame;
 	do {
 		block = dx_get_block(frame->at);
+		if (lblk)
+			*lblk = block;
 		bh = ext4_read_dirblock(dir, block, DIRENT_HTREE);
 		if (IS_ERR(bh))
 			goto errout;
 
-		retval = search_dirblock(bh, dir, fname,
+		retval = search_dirblock(bh, dir, fname, block,
 					 block << EXT4_BLOCK_SIZE_BITS(sb),
 					 res_dir);
 		if (retval == 1)
@@ -1737,7 +1816,7 @@
 	struct ext4_dir_entry_2 * de;
 	struct buffer_head *bh;
 
-	bh = ext4_find_entry(d_inode(child), &dotdot, &de, NULL);
+	bh = ext4_find_entry(d_inode(child), &dotdot, &de, NULL, NULL);
 	if (IS_ERR(bh))
 		return ERR_CAST(bh);
 	if (!bh)
@@ -1759,7 +1838,8 @@
  * Returns pointer to last entry moved.
  */
 static struct ext4_dir_entry_2 *
-dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
+dx_move_dirents(struct inode *dir, char *from, char *to,
+		struct dx_map_entry *map, int count,
 		unsigned blocksize)
 {
 	unsigned rec_len = 0;
@@ -1767,7 +1847,8 @@
 	while (count--) {
 		struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
 						(from + (map->offs<<2));
-		rec_len = EXT4_DIR_REC_LEN(de->name_len);
+		rec_len = ext4_dir_rec_len(de->name_len, dir);
+
 		memcpy (to, de, rec_len);
 		((struct ext4_dir_entry_2 *) to)->rec_len =
 				ext4_rec_len_to_disk(rec_len, blocksize);
@@ -1782,7 +1863,8 @@
  * Compact each dir entry in the range to the minimal rec_len.
  * Returns pointer to last entry in range.
  */
-static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
+static struct ext4_dir_entry_2 *dx_pack_dirents(struct inode *dir, char *base,
+							unsigned int blocksize)
 {
 	struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base;
 	unsigned rec_len = 0;
@@ -1791,7 +1873,7 @@
 	while ((char*)de < base + blocksize) {
 		next = ext4_next_entry(de, blocksize);
 		if (de->inode && de->name_len) {
-			rec_len = EXT4_DIR_REC_LEN(de->name_len);
+			rec_len = ext4_dir_rec_len(de->name_len, dir);
 			if (de > to)
 				memmove(to, de, rec_len);
 			to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
@@ -1809,13 +1891,12 @@
  * Returns pointer to de in block into which the new entry will be inserted.
  */
 static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-			struct buffer_head **bh,struct dx_frame *frame,
-			struct dx_hash_info *hinfo)
+			struct buffer_head **bh, struct dx_frame *frame,
+			struct dx_hash_info *hinfo, ext4_lblk_t *newblock)
 {
 	unsigned blocksize = dir->i_sb->s_blocksize;
 	unsigned count, continued;
 	struct buffer_head *bh2;
-	ext4_lblk_t newblock;
 	u32 hash2;
 	struct dx_map_entry *map;
 	char *data1 = (*bh)->b_data, *data2;
@@ -1827,7 +1908,7 @@
 	if (ext4_has_metadata_csum(dir->i_sb))
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
-	bh2 = ext4_append(handle, dir, &newblock);
+	bh2 = ext4_append(handle, dir, newblock);
 	if (IS_ERR(bh2)) {
 		brelse(*bh);
 		*bh = NULL;
@@ -1881,9 +1962,9 @@
 					hash2, split, count-split));
 
 	/* Fancy dance to stay within two buffers */
-	de2 = dx_move_dirents(data1, data2, map + split, count - split,
+	de2 = dx_move_dirents(dir, data1, data2, map + split, count - split,
 			      blocksize);
-	de = dx_pack_dirents(data1, blocksize);
+	de = dx_pack_dirents(dir, data1, blocksize);
 	de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
 					   (char *) de,
 					   blocksize);
@@ -1905,7 +1986,7 @@
 		swap(*bh, bh2);
 		de = de2;
 	}
-	dx_insert_block(frame, hash2 + continued, newblock);
+	dx_insert_block(frame, hash2 + continued, *newblock);
 	err = ext4_handle_dirty_dirblock(handle, dir, bh2);
 	if (err)
 		goto journal_error;
@@ -1925,13 +2006,14 @@
 }
 
 int ext4_find_dest_de(struct inode *dir, struct inode *inode,
+		      ext4_lblk_t lblk,
 		      struct buffer_head *bh,
 		      void *buf, int buf_size,
 		      struct ext4_filename *fname,
 		      struct ext4_dir_entry_2 **dest_de)
 {
 	struct ext4_dir_entry_2 *de;
-	unsigned short reclen = EXT4_DIR_REC_LEN(fname_len(fname));
+	unsigned short reclen = ext4_dir_rec_len(fname_len(fname), dir);
 	int nlen, rlen;
 	unsigned int offset = 0;
 	char *top;
@@ -1940,11 +2022,11 @@
 	top = buf + buf_size - reclen;
 	while ((char *) de <= top) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 buf, buf_size, offset))
+					 buf, buf_size, lblk, offset))
 			return -EFSCORRUPTED;
 		if (ext4_match(dir, fname, de))
 			return -EEXIST;
-		nlen = EXT4_DIR_REC_LEN(de->name_len);
+		nlen = ext4_dir_rec_len(de->name_len, dir);
 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 		if ((de->inode ? rlen - nlen : rlen) >= reclen)
 			break;
@@ -1958,7 +2040,8 @@
 	return 0;
 }
 
-void ext4_insert_dentry(struct inode *inode,
+void ext4_insert_dentry(struct inode *dir,
+			struct inode *inode,
 			struct ext4_dir_entry_2 *de,
 			int buf_size,
 			struct ext4_filename *fname)
@@ -1966,7 +2049,7 @@
 
 	int nlen, rlen;
 
-	nlen = EXT4_DIR_REC_LEN(de->name_len);
+	nlen = ext4_dir_rec_len(de->name_len, dir);
 	rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
 	if (de->inode) {
 		struct ext4_dir_entry_2 *de1 =
@@ -1980,6 +2063,13 @@
 	ext4_set_de_type(inode->i_sb, de, inode->i_mode);
 	de->name_len = fname_len(fname);
 	memcpy(de->name, fname_name(fname), fname_len(fname));
+	if (ext4_hash_in_dirent(dir)) {
+		struct dx_hash_info *hinfo = &fname->hinfo;
+
+		EXT4_DIRENT_HASHES(de)->hash = cpu_to_le32(hinfo->hash);
+		EXT4_DIRENT_HASHES(de)->minor_hash =
+						cpu_to_le32(hinfo->minor_hash);
+	}
 }
 
 /*
@@ -1993,6 +2083,7 @@
 static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,
 			     struct inode *dir,
 			     struct inode *inode, struct ext4_dir_entry_2 *de,
+			     ext4_lblk_t blk,
 			     struct buffer_head *bh)
 {
 	unsigned int	blocksize = dir->i_sb->s_blocksize;
@@ -2003,7 +2094,7 @@
 		csum_size = sizeof(struct ext4_dir_entry_tail);
 
 	if (!de) {
-		err = ext4_find_dest_de(dir, inode, bh, bh->b_data,
+		err = ext4_find_dest_de(dir, inode, blk, bh, bh->b_data,
 					blocksize - csum_size, fname, &de);
 		if (err)
 			return err;
@@ -2016,7 +2107,7 @@
 	}
 
 	/* By now the buffer is marked for journaling */
-	ext4_insert_dentry(inode, de, blocksize, fname);
+	ext4_insert_dentry(dir, inode, de, blocksize, fname);
 
 	/*
 	 * XXX shouldn't update any times until successful
@@ -2108,11 +2199,16 @@
 
 	/* Initialize the root; the dot dirents already exist */
 	de = (struct ext4_dir_entry_2 *) (&root->dotdot);
-	de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
-					   blocksize);
+	de->rec_len = ext4_rec_len_to_disk(
+			blocksize - ext4_dir_rec_len(2, NULL), blocksize);
 	memset (&root->info, 0, sizeof(root->info));
 	root->info.info_length = sizeof(root->info);
-	root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
+	if (ext4_hash_in_dirent(dir))
+		root->info.hash_version = DX_HASH_SIPHASH;
+	else
+		root->info.hash_version =
+				EXT4_SB(dir->i_sb)->s_def_hash_version;
+
 	entries = root->entries;
 	dx_set_block(entries, 1);
 	dx_set_count(entries, 1);
@@ -2123,7 +2219,11 @@
 	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(dir, fname_name(fname), fname_len(fname), &fname->hinfo);
+
+	/* casefolded encrypted hashes are computed on fname setup */
+	if (!ext4_hash_in_dirent(dir))
+		ext4fs_dirhash(dir, fname_name(fname),
+				fname_len(fname), &fname->hinfo);
 
 	memset(frames, 0, sizeof(frames));
 	frame = frames;
@@ -2138,13 +2238,13 @@
 	if (retval)
 		goto out_frames;	
 
-	de = do_split(handle,dir, &bh2, frame, &fname->hinfo);
+	de = do_split(handle, dir, &bh2, frame, &fname->hinfo, &block);
 	if (IS_ERR(de)) {
 		retval = PTR_ERR(de);
 		goto out_frames;
 	}
 
-	retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2);
+	retval = add_dirent_to_buf(handle, fname, dir, inode, de, block, bh2);
 out_frames:
 	/*
 	 * Even if the block split failed, we have to properly write
@@ -2175,7 +2275,6 @@
 	struct buffer_head *bh = NULL;
 	struct ext4_dir_entry_2 *de;
 	struct super_block *sb;
-	struct ext4_sb_info *sbi;
 	struct ext4_filename fname;
 	int	retval;
 	int	dx_fallback=0;
@@ -2187,7 +2286,6 @@
 		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;
@@ -2196,8 +2294,8 @@
 		return -ENOKEY;
 
 #ifdef CONFIG_UNICODE
-	if (ext4_has_strict_mode(sbi) && IS_CASEFOLDED(dir) &&
-	    sbi->s_encoding && utf8_validate(sbi->s_encoding, &dentry->d_name))
+	if (sb_has_strict_encoding(sb) && IS_CASEFOLDED(dir) &&
+	    sb->s_encoding && utf8_validate(sb->s_encoding, &dentry->d_name))
 		return -EINVAL;
 #endif
 
@@ -2244,7 +2342,7 @@
 			goto out;
 		}
 		retval = add_dirent_to_buf(handle, &fname, dir, inode,
-					   NULL, bh);
+					   NULL, block, bh);
 		if (retval != -ENOSPC)
 			goto out;
 
@@ -2271,7 +2369,7 @@
 	if (csum_size)
 		ext4_initialize_dirent_tail(bh, blocksize);
 
-	retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh);
+	retval = add_dirent_to_buf(handle, &fname, dir, inode, de, block, bh);
 out:
 	ext4_fname_free_filename(&fname);
 	brelse(bh);
@@ -2293,6 +2391,7 @@
 	struct ext4_dir_entry_2 *de;
 	int restart;
 	int err;
+	ext4_lblk_t lblk;
 
 again:
 	restart = 0;
@@ -2301,7 +2400,8 @@
 		return PTR_ERR(frame);
 	entries = frame->entries;
 	at = frame->at;
-	bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT_HTREE);
+	lblk = dx_get_block(frame->at);
+	bh = ext4_read_dirblock(dir, lblk, DIRENT_HTREE);
 	if (IS_ERR(bh)) {
 		err = PTR_ERR(bh);
 		bh = NULL;
@@ -2313,7 +2413,7 @@
 	if (err)
 		goto journal_error;
 
-	err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh);
+	err = add_dirent_to_buf(handle, fname, dir, inode, NULL, lblk, bh);
 	if (err != -ENOSPC)
 		goto cleanup;
 
@@ -2432,12 +2532,12 @@
 			goto journal_error;
 		}
 	}
-	de = do_split(handle, dir, &bh, frame, &fname->hinfo);
+	de = do_split(handle, dir, &bh, frame, &fname->hinfo, &lblk);
 	if (IS_ERR(de)) {
 		err = PTR_ERR(de);
 		goto cleanup;
 	}
-	err = add_dirent_to_buf(handle, fname, dir, inode, de, bh);
+	err = add_dirent_to_buf(handle, fname, dir, inode, de, lblk, bh);
 	goto cleanup;
 
 journal_error:
@@ -2460,6 +2560,7 @@
 int ext4_generic_delete_entry(handle_t *handle,
 			      struct inode *dir,
 			      struct ext4_dir_entry_2 *de_del,
+			      ext4_lblk_t lblk,
 			      struct buffer_head *bh,
 			      void *entry_buf,
 			      int buf_size,
@@ -2474,7 +2575,7 @@
 	de = (struct ext4_dir_entry_2 *)entry_buf;
 	while (i < buf_size - csum_size) {
 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-					 entry_buf, buf_size, i))
+					 entry_buf, buf_size, lblk, i))
 			return -EFSCORRUPTED;
 		if (de == de_del)  {
 			if (pde)
@@ -2499,6 +2600,7 @@
 static int ext4_delete_entry(handle_t *handle,
 			     struct inode *dir,
 			     struct ext4_dir_entry_2 *de_del,
+			     ext4_lblk_t lblk,
 			     struct buffer_head *bh)
 {
 	int err, csum_size = 0;
@@ -2519,7 +2621,7 @@
 	if (unlikely(err))
 		goto out;
 
-	err = ext4_generic_delete_entry(handle, dir, de_del,
+	err = ext4_generic_delete_entry(handle, dir, de_del, lblk,
 					bh, bh->b_data,
 					dir->i_sb->s_blocksize, csum_size);
 	if (err)
@@ -2702,7 +2804,7 @@
 {
 	de->inode = cpu_to_le32(inode->i_ino);
 	de->name_len = 1;
-	de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
+	de->rec_len = ext4_rec_len_to_disk(ext4_dir_rec_len(de->name_len, NULL),
 					   blocksize);
 	strcpy(de->name, ".");
 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
@@ -2712,11 +2814,12 @@
 	de->name_len = 2;
 	if (!dotdot_real_len)
 		de->rec_len = ext4_rec_len_to_disk(blocksize -
-					(csum_size + EXT4_DIR_REC_LEN(1)),
+					(csum_size + ext4_dir_rec_len(1, NULL)),
 					blocksize);
 	else
 		de->rec_len = ext4_rec_len_to_disk(
-				EXT4_DIR_REC_LEN(de->name_len), blocksize);
+					ext4_dir_rec_len(de->name_len, NULL),
+					blocksize);
 	strcpy(de->name, "..");
 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
 
@@ -2841,7 +2944,8 @@
 	}
 
 	sb = inode->i_sb;
-	if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) {
+	if (inode->i_size < ext4_dir_rec_len(1, NULL) +
+					ext4_dir_rec_len(2, NULL)) {
 		EXT4_ERROR_INODE(inode, "invalid size");
 		return true;
 	}
@@ -2853,7 +2957,7 @@
 		return true;
 
 	de = (struct ext4_dir_entry_2 *) bh->b_data;
-	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size,
+	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size, 0,
 				 0) ||
 	    le32_to_cpu(de->inode) != inode->i_ino || strcmp(".", de->name)) {
 		ext4_warning_inode(inode, "directory missing '.'");
@@ -2862,7 +2966,7 @@
 	}
 	offset = ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize);
 	de = ext4_next_entry(de, sb->s_blocksize);
-	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size,
+	if (ext4_check_dir_entry(inode, NULL, de, bh, bh->b_data, bh->b_size, 0,
 				 offset) ||
 	    le32_to_cpu(de->inode) == 0 || strcmp("..", de->name)) {
 		ext4_warning_inode(inode, "directory missing '..'");
@@ -2886,7 +2990,7 @@
 		de = (struct ext4_dir_entry_2 *) (bh->b_data +
 					(offset & (sb->s_blocksize - 1)));
 		if (ext4_check_dir_entry(inode, NULL, de, bh,
-					 bh->b_data, bh->b_size, offset)) {
+					 bh->b_data, bh->b_size, 0, offset)) {
 			offset = (offset | (sb->s_blocksize - 1)) + 1;
 			continue;
 		}
@@ -3081,6 +3185,8 @@
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	handle_t *handle = NULL;
+	ext4_lblk_t lblk;
+
 
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
 		return -EIO;
@@ -3095,7 +3201,7 @@
 		return retval;
 
 	retval = -ENOENT;
-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (!bh)
@@ -3122,7 +3228,7 @@
 	if (IS_DIRSYNC(dir))
 		ext4_handle_sync(handle);
 
-	retval = ext4_delete_entry(handle, dir, de, bh);
+	retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 	if (retval)
 		goto end_rmdir;
 	if (!EXT4_DIR_LINK_EMPTY(inode))
@@ -3168,6 +3274,7 @@
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	handle_t *handle = NULL;
+	ext4_lblk_t lblk;
 
 	if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
 		return -EIO;
@@ -3183,7 +3290,7 @@
 		return retval;
 
 	retval = -ENOENT;
-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (!bh)
@@ -3206,7 +3313,7 @@
 	if (IS_DIRSYNC(dir))
 		ext4_handle_sync(handle);
 
-	retval = ext4_delete_entry(handle, dir, de, bh);
+	retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 	if (retval)
 		goto end_unlink;
 	dir->i_ctime = dir->i_mtime = current_time(dir);
@@ -3468,6 +3575,7 @@
 	int dir_nlink_delta;
 
 	/* entry for "dentry" */
+	ext4_lblk_t lblk;
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
 	int inlined;
@@ -3558,7 +3666,7 @@
 	 * so the old->de may no longer valid and need to find it again
 	 * before reset old inode info.
 	 */
-	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
+	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL, NULL);
 	if (IS_ERR(old.bh))
 		retval = PTR_ERR(old.bh);
 	if (!old.bh)
@@ -3578,12 +3686,13 @@
 	int retval = -ENOENT;
 	struct buffer_head *bh;
 	struct ext4_dir_entry_2 *de;
+	ext4_lblk_t lblk;
 
-	bh = ext4_find_entry(dir, d_name, &de, NULL);
+	bh = ext4_find_entry(dir, d_name, &de, NULL, &lblk);
 	if (IS_ERR(bh))
 		return PTR_ERR(bh);
 	if (bh) {
-		retval = ext4_delete_entry(handle, dir, de, bh);
+		retval = ext4_delete_entry(handle, dir, de, lblk, bh);
 		brelse(bh);
 	}
 	return retval;
@@ -3607,7 +3716,8 @@
 		retval = ext4_find_delete_entry(handle, ent->dir,
 						&ent->dentry->d_name);
 	} else {
-		retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh);
+		retval = ext4_delete_entry(handle, ent->dir, ent->de,
+						ent->lblk, ent->bh);
 		if (retval == -ENOENT) {
 			retval = ext4_find_delete_entry(handle, ent->dir,
 							&ent->dentry->d_name);
@@ -3720,7 +3830,8 @@
 			return retval;
 	}
 
-	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
+	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL,
+				&old.lblk);
 	if (IS_ERR(old.bh))
 		return PTR_ERR(old.bh);
 	/*
@@ -3734,7 +3845,7 @@
 		goto release_bh;
 
 	new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-				 &new.de, &new.inlined);
+				 &new.de, &new.inlined, NULL);
 	if (IS_ERR(new.bh)) {
 		retval = PTR_ERR(new.bh);
 		new.bh = NULL;
@@ -3918,7 +4029,7 @@
 		return retval;
 
 	old.bh = ext4_find_entry(old.dir, &old.dentry->d_name,
-				 &old.de, &old.inlined);
+				 &old.de, &old.inlined, NULL);
 	if (IS_ERR(old.bh))
 		return PTR_ERR(old.bh);
 	/*
@@ -3932,7 +4043,7 @@
 		goto end_rename;
 
 	new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
-				 &new.de, &new.inlined);
+				 &new.de, &new.inlined, NULL);
 	if (IS_ERR(new.bh)) {
 		retval = PTR_ERR(new.bh);
 		new.bh = NULL;
diff --git a/fs/ext4/page-io.c b/fs/ext4/page-io.c
index 2cc9f21..11a50ba 100644
--- a/fs/ext4/page-io.c
+++ b/fs/ext4/page-io.c
@@ -366,6 +366,7 @@
 	bio = bio_alloc(GFP_NOIO, BIO_MAX_PAGES);
 	if (!bio)
 		return -ENOMEM;
+	fscrypt_set_bio_crypt_ctx_bh(bio, bh, GFP_NOIO);
 	bio->bi_iter.bi_sector = bh->b_blocknr * (bh->b_size >> 9);
 	bio_set_dev(bio, bh->b_bdev);
 	bio->bi_end_io = ext4_end_bio;
@@ -383,7 +384,8 @@
 {
 	int ret;
 
-	if (io->io_bio && bh->b_blocknr != io->io_next_block) {
+	if (io->io_bio && (bh->b_blocknr != io->io_next_block ||
+			   !fscrypt_mergeable_bio_bh(io->io_bio, bh))) {
 submit_and_retry:
 		ext4_io_submit(io);
 	}
@@ -474,7 +476,7 @@
 	 * (e.g. holes) to be unnecessarily encrypted, but this is rare and
 	 * can't happen in the common case of blocksize == PAGE_SIZE.
 	 */
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode) && nr_to_submit) {
+	if (fscrypt_inode_uses_fs_layer_crypto(inode) && nr_to_submit) {
 		gfp_t gfp_flags = GFP_NOFS;
 		unsigned int enc_bytes = round_up(len, i_blocksize(inode));
 
diff --git a/fs/ext4/readpage.c b/fs/ext4/readpage.c
index a5f55fe..fd1a1e2 100644
--- a/fs/ext4/readpage.c
+++ b/fs/ext4/readpage.c
@@ -46,6 +46,7 @@
 #include <linux/cleancache.h>
 
 #include "ext4.h"
+#include <trace/events/android_fs.h>
 
 #define NUM_PREALLOC_POST_READ_CTXS	128
 
@@ -159,6 +160,17 @@
 	return bio->bi_private && !bio->bi_status;
 }
 
+static void
+ext4_trace_read_completion(struct bio *bio)
+{
+	struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+	if (first_page != NULL)
+		trace_android_fs_dataread_end(first_page->mapping->host,
+					      page_offset(first_page),
+					      bio->bi_iter.bi_size);
+}
+
 /*
  * I/O completion handler for multipage BIOs.
  *
@@ -173,6 +185,9 @@
  */
 static void mpage_end_io(struct bio *bio)
 {
+	if (trace_android_fs_dataread_start_enabled())
+		ext4_trace_read_completion(bio);
+
 	if (bio_post_read_required(bio)) {
 		struct bio_post_read_ctx *ctx = bio->bi_private;
 
@@ -196,7 +211,7 @@
 	unsigned int post_read_steps = 0;
 	struct bio_post_read_ctx *ctx = NULL;
 
-	if (IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode))
+	if (fscrypt_inode_uses_fs_layer_crypto(inode))
 		post_read_steps |= 1 << STEP_DECRYPT;
 
 	if (ext4_need_verity(inode, first_idx))
@@ -222,6 +237,30 @@
 	return i_size_read(inode);
 }
 
+static void
+ext4_submit_bio_read(struct bio *bio)
+{
+	if (trace_android_fs_dataread_start_enabled()) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL) {
+			char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+			path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    first_page->mapping->host);
+			trace_android_fs_dataread_start(
+				first_page->mapping->host,
+				page_offset(first_page),
+				bio->bi_iter.bi_size,
+				current->pid,
+				path,
+				current->comm);
+		}
+	}
+	submit_bio(bio);
+}
+
 int ext4_mpage_readpages(struct address_space *mapping,
 			 struct list_head *pages, struct page *page,
 			 unsigned nr_pages, bool is_readahead)
@@ -233,6 +272,7 @@
 	const unsigned blkbits = inode->i_blkbits;
 	const unsigned blocks_per_page = PAGE_SIZE >> blkbits;
 	const unsigned blocksize = 1 << blkbits;
+	sector_t next_block;
 	sector_t block_in_file;
 	sector_t last_block;
 	sector_t last_block_in_file;
@@ -265,7 +305,8 @@
 		if (page_has_buffers(page))
 			goto confused;
 
-		block_in_file = (sector_t)page->index << (PAGE_SHIFT - blkbits);
+		block_in_file = next_block =
+			(sector_t)page->index << (PAGE_SHIFT - blkbits);
 		last_block = block_in_file + nr_pages * blocks_per_page;
 		last_block_in_file = (ext4_readpage_limit(inode) +
 				      blocksize - 1) >> blkbits;
@@ -365,9 +406,10 @@
 		 * This page will go to BIO.  Do we need to send this
 		 * BIO off first?
 		 */
-		if (bio && (last_block_in_bio != blocks[0] - 1)) {
+		if (bio && (last_block_in_bio != blocks[0] - 1 ||
+			    !fscrypt_mergeable_bio(bio, inode, next_block))) {
 		submit_and_realloc:
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		}
 		if (bio == NULL) {
@@ -377,6 +419,8 @@
 				min_t(int, nr_pages, BIO_MAX_PAGES));
 			if (!bio)
 				goto set_error_page;
+			fscrypt_set_bio_crypt_ctx(bio, inode, next_block,
+						  GFP_KERNEL);
 			ctx = get_bio_post_read_ctx(inode, bio, page->index);
 			if (IS_ERR(ctx)) {
 				bio_put(bio);
@@ -398,14 +442,14 @@
 		if (((map.m_flags & EXT4_MAP_BOUNDARY) &&
 		     (relative_block == map.m_len)) ||
 		    (first_hole != blocks_per_page)) {
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		} else
 			last_block_in_bio = blocks[blocks_per_page - 1];
 		goto next_page;
 	confused:
 		if (bio) {
-			submit_bio(bio);
+			ext4_submit_bio_read(bio);
 			bio = NULL;
 		}
 		if (!PageUptodate(page))
@@ -418,7 +462,7 @@
 	}
 	BUG_ON(pages && !list_empty(pages));
 	if (bio)
-		submit_bio(bio);
+		ext4_submit_bio_read(bio);
 	return 0;
 }
 
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index f68dfef..442a18c 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -1065,8 +1065,9 @@
 		crypto_free_shash(sbi->s_chksum_driver);
 	kfree(sbi->s_blockgroup_lock);
 	fs_put_dax(sbi->s_daxdev);
+	fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
 	kfree(sbi);
 }
@@ -1356,18 +1357,32 @@
 	return res;
 }
 
-static bool ext4_dummy_context(struct inode *inode)
+static const union fscrypt_policy *ext4_get_dummy_policy(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(EXT4_SB(inode->i_sb));
+	return EXT4_SB(sb)->s_dummy_enc_policy.policy;
+}
+
+static bool ext4_has_stable_inodes(struct super_block *sb)
+{
+	return ext4_has_feature_stable_inodes(sb);
+}
+
+static void ext4_get_ino_and_lblk_bits(struct super_block *sb,
+				       int *ino_bits_ret, int *lblk_bits_ret)
+{
+	*ino_bits_ret = 8 * sizeof(EXT4_SB(sb)->s_es->s_inodes_count);
+	*lblk_bits_ret = 8 * sizeof(ext4_lblk_t);
 }
 
 static const struct fscrypt_operations ext4_cryptops = {
 	.key_prefix		= "ext4:",
 	.get_context		= ext4_get_context,
 	.set_context		= ext4_set_context,
-	.dummy_context		= ext4_dummy_context,
+	.get_dummy_policy	= ext4_get_dummy_policy,
 	.empty_dir		= ext4_empty_dir,
 	.max_namelen		= EXT4_NAME_LEN,
+	.has_stable_inodes	= ext4_has_stable_inodes,
+	.get_ino_and_lblk_bits	= ext4_get_ino_and_lblk_bits,
 };
 #endif
 
@@ -1463,6 +1478,7 @@
 	Opt_journal_path, Opt_journal_checksum, Opt_journal_async_commit,
 	Opt_abort, Opt_data_journal, Opt_data_ordered, Opt_data_writeback,
 	Opt_data_err_abort, Opt_data_err_ignore, Opt_test_dummy_encryption,
+	Opt_inlinecrypt,
 	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
 	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
 	Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
@@ -1558,7 +1574,9 @@
 	{Opt_init_itable, "init_itable"},
 	{Opt_noinit_itable, "noinit_itable"},
 	{Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
+	{Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
 	{Opt_test_dummy_encryption, "test_dummy_encryption"},
+	{Opt_inlinecrypt, "inlinecrypt"},
 	{Opt_nombcache, "nombcache"},
 	{Opt_nombcache, "no_mbcache"},	/* for backward compatibility */
 	{Opt_removed, "check=none"},	/* mount option from ext2/3 */
@@ -1769,7 +1787,7 @@
 	{Opt_jqfmt_vfsv0, QFMT_VFS_V0, MOPT_QFMT},
 	{Opt_jqfmt_vfsv1, QFMT_VFS_V1, MOPT_QFMT},
 	{Opt_max_dir_size_kb, 0, MOPT_GTE0},
-	{Opt_test_dummy_encryption, 0, MOPT_GTE0},
+	{Opt_test_dummy_encryption, 0, MOPT_STRING},
 	{Opt_nombcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
 	{Opt_err, 0, 0}
 };
@@ -1804,6 +1822,49 @@
 }
 #endif
 
+static int ext4_set_test_dummy_encryption(struct super_block *sb,
+					  const char *opt,
+					  const substring_t *arg,
+					  bool is_remount)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	struct ext4_sb_info *sbi = EXT4_SB(sb);
+	int err;
+
+	/*
+	 * This mount option is just for testing, and it's not worthwhile to
+	 * implement the extra complexity (e.g. RCU protection) that would be
+	 * needed to allow it to be set or changed during remount.  We do allow
+	 * it to be specified during remount, but only if there is no change.
+	 */
+	if (is_remount && !sbi->s_dummy_enc_policy.policy) {
+		ext4_msg(sb, KERN_WARNING,
+			 "Can't set test_dummy_encryption on remount");
+		return -1;
+	}
+	err = fscrypt_set_test_dummy_encryption(sb, arg->from,
+						&sbi->s_dummy_enc_policy);
+	if (err) {
+		if (err == -EEXIST)
+			ext4_msg(sb, KERN_WARNING,
+				 "Can't change test_dummy_encryption on remount");
+		else if (err == -EINVAL)
+			ext4_msg(sb, KERN_WARNING,
+				 "Value of option \"%s\" is unrecognized", opt);
+		else
+			ext4_msg(sb, KERN_WARNING,
+				 "Error processing option \"%s\" [%d]",
+				 opt, err);
+		return -1;
+	}
+	ext4_msg(sb, KERN_WARNING, "Test dummy encryption mode enabled");
+#else
+	ext4_msg(sb, KERN_WARNING,
+		 "Test dummy encryption mount option ignored");
+#endif
+	return 1;
+}
+
 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)
@@ -1846,6 +1907,13 @@
 	case Opt_nolazytime:
 		sb->s_flags &= ~SB_LAZYTIME;
 		return 1;
+	case Opt_inlinecrypt:
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+		sb->s_flags |= SB_INLINECRYPT;
+#else
+		ext4_msg(sb, KERN_ERR, "inline encryption not supported");
+#endif
+		return 1;
 	}
 
 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
@@ -2000,14 +2068,8 @@
 		*journal_ioprio =
 			IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, arg);
 	} else if (token == Opt_test_dummy_encryption) {
-#ifdef CONFIG_FS_ENCRYPTION
-		sbi->s_mount_flags |= EXT4_MF_TEST_DUMMY_ENCRYPTION;
-		ext4_msg(sb, KERN_WARNING,
-			 "Test dummy encryption mode enabled");
-#else
-		ext4_msg(sb, KERN_WARNING,
-			 "Test dummy encryption mount option ignored");
-#endif
+		return ext4_set_test_dummy_encryption(sb, opt, &args[0],
+						      is_remount);
 	} else if (m->flags & MOPT_DATAJ) {
 		if (is_remount) {
 			if (!sbi->s_journal)
@@ -2276,8 +2338,11 @@
 		SEQ_OPTS_PRINT("max_dir_size_kb=%u", sbi->s_max_dir_size_kb);
 	if (test_opt(sb, DATA_ERR_ABORT))
 		SEQ_OPTS_PUTS("data_err=abort");
-	if (DUMMY_ENCRYPTION_ENABLED(sbi))
-		SEQ_OPTS_PUTS("test_dummy_encryption");
+
+	fscrypt_show_test_dummy_encryption(seq, sep, sb);
+
+	if (sb->s_flags & SB_INLINECRYPT)
+		SEQ_OPTS_PUTS("inlinecrypt");
 
 	ext4_show_quota_options(seq, sb);
 	return 0;
@@ -3898,17 +3963,11 @@
 		goto failed_mount;
 
 #ifdef CONFIG_UNICODE
-	if (ext4_has_feature_casefold(sb) && !sbi->s_encoding) {
+	if (ext4_has_feature_casefold(sb) && !sb->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,
@@ -3929,8 +3988,8 @@
 			 "%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;
+		sb->s_encoding = encoding;
+		sb->s_encoding_flags = encoding_flags;
 	}
 #endif
 
@@ -4550,11 +4609,6 @@
 		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");
@@ -4754,13 +4808,14 @@
 		crypto_free_shash(sbi->s_chksum_driver);
 
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
 #endif
 
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < EXT4_MAXQUOTAS; i++)
 		kfree(get_qf_name(sb, sbi, i));
 #endif
+	fscrypt_free_dummy_policy(&sbi->s_dummy_enc_policy);
 	ext4_blkdev_remove(sbi);
 	brelse(bh);
 out_fail:
diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c
index 9394360..477c79d 100644
--- a/fs/ext4/sysfs.c
+++ b/fs/ext4/sysfs.c
@@ -241,6 +241,7 @@
 EXT4_ATTR_FEATURE(meta_bg_resize);
 #ifdef CONFIG_FS_ENCRYPTION
 EXT4_ATTR_FEATURE(encryption);
+EXT4_ATTR_FEATURE(test_dummy_encryption_v2);
 #endif
 #ifdef CONFIG_UNICODE
 EXT4_ATTR_FEATURE(casefold);
@@ -256,6 +257,7 @@
 	ATTR_LIST(meta_bg_resize),
 #ifdef CONFIG_FS_ENCRYPTION
 	ATTR_LIST(encryption),
+	ATTR_LIST(test_dummy_encryption_v2),
 #endif
 #ifdef CONFIG_UNICODE
 	ATTR_LIST(casefold),
diff --git a/fs/ext4/verity.c b/fs/ext4/verity.c
index 6a30e54..4602d38 100644
--- a/fs/ext4/verity.c
+++ b/fs/ext4/verity.c
@@ -363,12 +363,55 @@
 	return desc_size;
 }
 
-static struct page *ext4_read_merkle_tree_page(struct inode *inode,
-					       pgoff_t index)
+/*
+ * Prefetch some pages from the file's Merkle tree.
+ *
+ * This is basically a stripped-down version of __do_page_cache_readahead()
+ * which works on pages past i_size.
+ */
+static void ext4_merkle_tree_readahead(struct address_space *mapping,
+				       pgoff_t start_index, unsigned long count)
 {
+	LIST_HEAD(pages);
+	unsigned int nr_pages = 0;
+	struct page *page;
+	pgoff_t index;
+	struct blk_plug plug;
+
+	for (index = start_index; index < start_index + count; index++) {
+		page = xa_load(&mapping->i_pages, index);
+		if (!page || xa_is_value(page)) {
+			page = __page_cache_alloc(readahead_gfp_mask(mapping));
+			if (!page)
+				break;
+			page->index = index;
+			list_add(&page->lru, &pages);
+			nr_pages++;
+		}
+	}
+	blk_start_plug(&plug);
+	ext4_mpage_readpages(mapping, &pages, NULL, nr_pages, true);
+	blk_finish_plug(&plug);
+}
+
+static struct page *ext4_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index,
+					       unsigned long num_ra_pages)
+{
+	struct page *page;
+
 	index += ext4_verity_metadata_pos(inode) >> PAGE_SHIFT;
 
-	return read_mapping_page(inode->i_mapping, index, NULL);
+	page = find_get_page_flags(inode->i_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else if (num_ra_pages > 1)
+			ext4_merkle_tree_readahead(inode->i_mapping, index,
+						   num_ra_pages);
+		page = read_mapping_page(inode->i_mapping, index, NULL);
+	}
+	return page;
 }
 
 static int ext4_write_merkle_tree_block(struct inode *inode, const void *buf,
diff --git a/fs/ext4/xattr_security.c b/fs/ext4/xattr_security.c
index 197a9d8..50fb713 100644
--- a/fs/ext4/xattr_security.c
+++ b/fs/ext4/xattr_security.c
@@ -15,7 +15,7 @@
 static int
 ext4_xattr_security_get(const struct xattr_handler *handler,
 			struct dentry *unused, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
 	return ext4_xattr_get(inode, EXT4_XATTR_INDEX_SECURITY,
 			      name, buffer, size);
diff --git a/fs/ext4/xattr_trusted.c b/fs/ext4/xattr_trusted.c
index e9389e5..64bd8f8 100644
--- a/fs/ext4/xattr_trusted.c
+++ b/fs/ext4/xattr_trusted.c
@@ -22,7 +22,7 @@
 static int
 ext4_xattr_trusted_get(const struct xattr_handler *handler,
 		       struct dentry *unused, struct inode *inode,
-		       const char *name, void *buffer, size_t size)
+		       const char *name, void *buffer, size_t size, int flags)
 {
 	return ext4_xattr_get(inode, EXT4_XATTR_INDEX_TRUSTED,
 			      name, buffer, size);
diff --git a/fs/ext4/xattr_user.c b/fs/ext4/xattr_user.c
index d454618..b730137 100644
--- a/fs/ext4/xattr_user.c
+++ b/fs/ext4/xattr_user.c
@@ -21,7 +21,7 @@
 static int
 ext4_xattr_user_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *buffer, size_t size)
+		    const char *name, void *buffer, size_t size, int flags)
 {
 	if (!test_opt(inode->i_sb, XATTR_USER))
 		return -EOPNOTSUPP;
diff --git a/fs/f2fs/Kconfig b/fs/f2fs/Kconfig
index 652fd2e..7669de7 100644
--- a/fs/f2fs/Kconfig
+++ b/fs/f2fs/Kconfig
@@ -6,6 +6,14 @@
 	select CRYPTO
 	select CRYPTO_CRC32
 	select F2FS_FS_XATTR if FS_ENCRYPTION
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
+	select LZ4_COMPRESS if F2FS_FS_LZ4
+	select LZ4_DECOMPRESS if F2FS_FS_LZ4
+	select LZ4HC_COMPRESS if F2FS_FS_LZ4HC
+	select LZO_COMPRESS if F2FS_FS_LZO
+	select LZO_DECOMPRESS if F2FS_FS_LZO
+	select ZSTD_COMPRESS if F2FS_FS_ZSTD
+	select ZSTD_DECOMPRESS if F2FS_FS_ZSTD
 	help
 	  F2FS is based on Log-structured File System (LFS), which supports
 	  versatile "flash-friendly" features. The design has been focused on
@@ -21,7 +29,7 @@
 
 config F2FS_STAT_FS
 	bool "F2FS Status Information"
-	depends on F2FS_FS && DEBUG_FS
+	depends on F2FS_FS
 	default y
 	help
 	  /sys/kernel/debug/f2fs/ contains information about all the partitions
@@ -75,16 +83,6 @@
 
 	  If you want to improve the performance, say N.
 
-config F2FS_IO_TRACE
-	bool "F2FS IO tracer"
-	depends on F2FS_FS
-	depends on FUNCTION_TRACER
-	help
-	  F2FS IO trace is based on a function trace, which gathers process
-	  information and block IO patterns in the filesystem level.
-
-	  If unsure, say N.
-
 config F2FS_FAULT_INJECTION
 	bool "F2FS fault injection facility"
 	depends on F2FS_FS
@@ -92,3 +90,48 @@
 	  Test F2FS to inject faults such as ENOMEM, ENOSPC, and so on.
 
 	  If unsure, say N.
+
+config F2FS_FS_COMPRESSION
+	bool "F2FS compression feature"
+	depends on F2FS_FS
+	help
+	  Enable filesystem-level compression on f2fs regular files,
+	  multiple back-end compression algorithms are supported.
+
+config F2FS_FS_LZO
+	bool "LZO compression support"
+	depends on F2FS_FS_COMPRESSION
+	default y
+	help
+	  Support LZO compress algorithm, if unsure, say Y.
+
+config F2FS_FS_LZ4
+	bool "LZ4 compression support"
+	depends on F2FS_FS_COMPRESSION
+	default y
+	help
+	  Support LZ4 compress algorithm, if unsure, say Y.
+
+config F2FS_FS_LZ4HC
+	bool "LZ4HC compression support"
+	depends on F2FS_FS_COMPRESSION
+	depends on F2FS_FS_LZ4
+	default y
+	help
+	  Support LZ4HC compress algorithm, LZ4HC has compatible on-disk
+	  layout with LZ4, if unsure, say Y.
+
+config F2FS_FS_ZSTD
+	bool "ZSTD compression support"
+	depends on F2FS_FS_COMPRESSION
+	default y
+	help
+	  Support ZSTD compress algorithm, if unsure, say Y.
+
+config F2FS_FS_LZORLE
+	bool "LZO-RLE compression support"
+	depends on F2FS_FS_COMPRESSION
+	depends on F2FS_FS_LZO
+	default y
+	help
+	  Support LZO-RLE compress algorithm, if unsure, say Y.
diff --git a/fs/f2fs/Makefile b/fs/f2fs/Makefile
index 2aaecc6..e529574 100644
--- a/fs/f2fs/Makefile
+++ b/fs/f2fs/Makefile
@@ -7,5 +7,5 @@
 f2fs-$(CONFIG_F2FS_STAT_FS) += debug.o
 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
+f2fs-$(CONFIG_F2FS_FS_COMPRESSION) += compress.o
diff --git a/fs/f2fs/OWNERS b/fs/f2fs/OWNERS
new file mode 100644
index 0000000..f981f44
--- /dev/null
+++ b/fs/f2fs/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/fs/f2fs/OWNERS
diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index 217b290..b21b98f 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -29,6 +29,7 @@
 static inline int f2fs_acl_count(size_t size)
 {
 	ssize_t s;
+
 	size -= sizeof(struct f2fs_acl_header);
 	s = size - 4 * sizeof(struct f2fs_acl_entry_short);
 	if (s < 0) {
@@ -160,7 +161,7 @@
 	return (void *)f2fs_acl;
 
 fail:
-	kvfree(f2fs_acl);
+	kfree(f2fs_acl);
 	return ERR_PTR(-EINVAL);
 }
 
@@ -190,7 +191,7 @@
 		acl = NULL;
 	else
 		acl = ERR_PTR(retval);
-	kvfree(value);
+	kfree(value);
 
 	return acl;
 }
@@ -200,6 +201,27 @@
 	return __f2fs_get_acl(inode, type, NULL);
 }
 
+static int f2fs_acl_update_mode(struct inode *inode, umode_t *mode_p,
+			  struct posix_acl **acl)
+{
+	umode_t mode = inode->i_mode;
+	int error;
+
+	if (is_inode_flag_set(inode, FI_ACL_MODE))
+		mode = F2FS_I(inode)->i_acl_mode;
+
+	error = posix_acl_equiv_mode(*acl, &mode);
+	if (error < 0)
+		return error;
+	if (error == 0)
+		*acl = NULL;
+	if (!in_group_p(inode->i_gid) &&
+	    !capable_wrt_inode_uidgid(inode, CAP_FSETID))
+		mode &= ~S_ISGID;
+	*mode_p = mode;
+	return 0;
+}
+
 static int __f2fs_set_acl(struct inode *inode, int type,
 			struct posix_acl *acl, struct page *ipage)
 {
@@ -213,7 +235,7 @@
 	case ACL_TYPE_ACCESS:
 		name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
 		if (acl && !ipage) {
-			error = posix_acl_update_mode(inode, &mode, &acl);
+			error = f2fs_acl_update_mode(inode, &mode, &acl);
 			if (error)
 				return error;
 			set_acl_inode(inode, mode);
@@ -240,7 +262,7 @@
 
 	error = f2fs_setxattr(inode, name_index, "", value, size, ipage, 0);
 
-	kvfree(value);
+	kfree(value);
 	if (!error)
 		set_cached_acl(inode, type, acl);
 
@@ -384,7 +406,7 @@
 							struct page *dpage)
 {
 	struct posix_acl *default_acl = NULL, *acl = NULL;
-	int error = 0;
+	int error;
 
 	error = f2fs_acl_create(dir, &inode->i_mode, &default_acl, &acl, dpage);
 	if (error)
diff --git a/fs/f2fs/acl.h b/fs/f2fs/acl.h
index b96823c..124868c 100644
--- a/fs/f2fs/acl.h
+++ b/fs/f2fs/acl.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/acl.h
  *
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 03dce398..d03c6fc 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -13,13 +13,15 @@
 #include <linux/f2fs_fs.h>
 #include <linux/pagevec.h>
 #include <linux/swap.h>
+#include <linux/kthread.h>
 
 #include "f2fs.h"
 #include "node.h"
 #include "segment.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
+#define DEFAULT_CHECKPOINT_IOPRIO (IOPRIO_PRIO_VALUE(IOPRIO_CLASS_BE, 3))
+
 static struct kmem_cache *ino_entry_slab;
 struct kmem_cache *f2fs_inode_entry_slab;
 
@@ -37,7 +39,7 @@
 struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index)
 {
 	struct address_space *mapping = META_MAPPING(sbi);
-	struct page *page = NULL;
+	struct page *page;
 repeat:
 	page = f2fs_grab_cache_page(mapping, index, false);
 	if (!page) {
@@ -50,9 +52,6 @@
 	return page;
 }
 
-/*
- * We guarantee no failure on the returned page.
- */
 static struct page *__get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index,
 							bool is_meta)
 {
@@ -89,6 +88,8 @@
 		return ERR_PTR(err);
 	}
 
+	f2fs_update_iostat(sbi, FS_META_READ_IO, F2FS_BLKSIZE);
+
 	lock_page(page);
 	if (unlikely(page->mapping != mapping)) {
 		f2fs_put_page(page, 1);
@@ -206,7 +207,7 @@
 }
 
 /*
- * Readahead CP/NAT/SIT/SSA pages
+ * Readahead CP/NAT/SIT/SSA/POR pages
  */
 int f2fs_ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
 							int type, bool sync)
@@ -223,6 +224,7 @@
 		.is_por = (type == META_POR),
 	};
 	struct blk_plug plug;
+	int err;
 
 	if (unlikely(type == META_POR))
 		fio.op_flags &= ~REQ_META;
@@ -268,8 +270,11 @@
 		}
 
 		fio.page = page;
-		f2fs_submit_page_bio(&fio);
-		f2fs_put_page(page, 0);
+		err = f2fs_submit_page_bio(&fio);
+		f2fs_put_page(page, err ? 1 : 0);
+
+		if (!err)
+			f2fs_update_iostat(sbi, FS_META_READ_IO, F2FS_BLKSIZE);
 	}
 out:
 	blk_finish_plug(&plug);
@@ -345,13 +350,13 @@
 		goto skip_write;
 
 	/* if locked failed, cp will flush dirty pages instead */
-	if (!mutex_trylock(&sbi->cp_mutex))
+	if (!down_write_trylock(&sbi->cp_global_sem))
 		goto skip_write;
 
 	trace_f2fs_writepages(mapping->host, wbc, META);
 	diff = nr_pages_to_write(sbi, META, wbc);
 	written = f2fs_sync_meta_pages(sbi, META, wbc->nr_to_write, FS_META_IO);
-	mutex_unlock(&sbi->cp_mutex);
+	up_write(&sbi->cp_global_sem);
 	wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
 	return 0;
 
@@ -439,8 +444,7 @@
 	if (!PageDirty(page)) {
 		__set_page_dirty_nobuffers(page);
 		inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_META);
-		f2fs_set_page_private(page, 0);
-		f2fs_trace_pid(page);
+		set_page_private_reference(page);
 		return 1;
 	}
 	return 0;
@@ -522,7 +526,7 @@
 	__remove_ino_entry(sbi, ino, type);
 }
 
-/* mode should be APPEND_INO or UPDATE_INO */
+/* mode should be APPEND_INO, UPDATE_INO or TRANS_DIR_INO */
 bool f2fs_exist_written_data(struct f2fs_sb_info *sbi, nid_t ino, int mode)
 {
 	struct inode_management *im = &sbi->im[mode];
@@ -715,6 +719,7 @@
 		orphan_blk = (struct f2fs_orphan_block *)page_address(page);
 		for (j = 0; j < le32_to_cpu(orphan_blk->entry_count); j++) {
 			nid_t ino = le32_to_cpu(orphan_blk->ino[j]);
+
 			err = recover_orphan_inode(sbi, ino);
 			if (err) {
 				f2fs_put_page(page, 1);
@@ -900,7 +905,7 @@
 		return -ENOMEM;
 	/*
 	 * Finding out valid cp block involves read both
-	 * sets( cp pack1 and cp pack 2)
+	 * sets( cp pack 1 and cp pack 2)
 	 */
 	cp_start_blk_no = le32_to_cpu(fsb->cp_blkaddr);
 	cp1 = validate_checkpoint(sbi, cp_start_blk_no, &cp1_version);
@@ -1013,8 +1018,7 @@
 	inode_inc_dirty_pages(inode);
 	spin_unlock(&sbi->inode_lock[type]);
 
-	f2fs_set_page_private(page, 0);
-	f2fs_trace_pid(page);
+	set_page_private_reference(page);
 }
 
 void f2fs_remove_dirty_inode(struct inode *inode)
@@ -1170,10 +1174,12 @@
 		.nr_to_write = LONG_MAX,
 		.for_reclaim = 0,
 	};
-	struct blk_plug plug;
 	int err = 0, cnt = 0;
 
-	blk_start_plug(&plug);
+	/*
+	 * Let's flush inline_data in dirty node pages.
+	 */
+	f2fs_flush_inline_data(sbi);
 
 retry_flush_quotas:
 	f2fs_lock_all(sbi);
@@ -1202,7 +1208,7 @@
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_dirty_inodes(sbi, DIR_INODE);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1218,7 +1224,7 @@
 		f2fs_unlock_all(sbi);
 		err = f2fs_sync_inode_meta(sbi);
 		if (err)
-			goto out;
+			return err;
 		cond_resched();
 		goto retry_flush_quotas;
 	}
@@ -1234,7 +1240,7 @@
 		if (err) {
 			up_write(&sbi->node_change);
 			f2fs_unlock_all(sbi);
-			goto out;
+			return err;
 		}
 		cond_resched();
 		goto retry_flush_nodes;
@@ -1246,8 +1252,6 @@
 	 */
 	__prepare_cp_block(sbi);
 	up_write(&sbi->node_change);
-out:
-	blk_finish_plug(&plug);
 	return err;
 }
 
@@ -1262,15 +1266,20 @@
 	DEFINE_WAIT(wait);
 
 	for (;;) {
-		prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
-
 		if (!get_pages(sbi, type))
 			break;
 
 		if (unlikely(f2fs_cp_error(sbi)))
 			break;
 
-		io_schedule_timeout(HZ/50);
+		if (type == F2FS_DIRTY_META)
+			f2fs_sync_meta_pages(sbi, META, LONG_MAX,
+							FS_CP_META_IO);
+		else if (type == F2FS_WB_CP_DATA)
+			f2fs_submit_merged_write(sbi, DATA);
+
+		prepare_to_wait(&sbi->cp_wait, &wait, TASK_UNINTERRUPTIBLE);
+		io_schedule_timeout(DEFAULT_IO_TIMEOUT);
 	}
 	finish_wait(&sbi->cp_wait, &wait);
 }
@@ -1378,6 +1387,26 @@
 	f2fs_submit_merged_write(sbi, META_FLUSH);
 }
 
+static inline u64 get_sectors_written(struct block_device *bdev)
+{
+	return (u64)part_stat_read(bdev->bd_part, sectors[STAT_WRITE]);
+}
+
+u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi)
+{
+	if (f2fs_is_multi_device(sbi)) {
+		u64 sectors = 0;
+		int i;
+
+		for (i = 0; i < sbi->s_ndevs; i++)
+			sectors += get_sectors_written(FDEV(i).bdev);
+
+		return sectors;
+	}
+
+	return get_sectors_written(sbi->sb->s_bdev);
+}
+
 static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
@@ -1388,7 +1417,6 @@
 	__u32 crc32 = 0;
 	int i;
 	int cp_payload_blks = __cp_payload(sbi);
-	struct super_block *sb = sbi->sb;
 	struct curseg_info *seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
 	u64 kbytes_written;
 	int err;
@@ -1396,10 +1424,7 @@
 	/* Flush all the NAT/SIT pages */
 	f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
 
-	/*
-	 * modify checkpoint
-	 * version number is already updated
-	 */
+	/* start to update checkpoint, cp ver is already updated previously */
 	ckpt->elapsed_time = cpu_to_le64(get_mtime(sbi, true));
 	ckpt->free_segment_count = cpu_to_le32(free_segments(sbi));
 	for (i = 0; i < NR_CURSEG_NODE_TYPE; i++) {
@@ -1419,7 +1444,7 @@
 				curseg_alloc_type(sbi, i + CURSEG_HOT_DATA);
 	}
 
-	/* 2 cp  + n data seg summary + orphan inode blocks */
+	/* 2 cp + n data seg summary + orphan inode blocks */
 	data_sum_blocks = f2fs_npages_for_summary_flush(sbi, false);
 	spin_lock_irqsave(&sbi->cp_lock, flags);
 	if (data_sum_blocks < NR_CURSEG_DATA_TYPE)
@@ -1433,7 +1458,7 @@
 			orphan_blocks);
 
 	if (__remain_node_summaries(cpc->reason))
-		ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS+
+		ckpt->cp_pack_total_block_count = cpu_to_le32(F2FS_CP_PACKS +
 				cp_payload_blks + data_sum_blocks +
 				orphan_blocks + NR_CURSEG_NODE_TYPE);
 	else
@@ -1486,9 +1511,8 @@
 
 	/* Record write statistics in the hot node summary */
 	kbytes_written = sbi->kbytes_written;
-	if (sb->s_bdev->bd_part)
-		kbytes_written += BD_PART_WRITTEN(sbi);
-
+	kbytes_written += (f2fs_get_sectors_written(sbi) -
+				sbi->sectors_written_start) >> 1;
 	seg_i->journal->info.kbytes_written = cpu_to_le64(kbytes_written);
 
 	if (__remain_node_summaries(cpc->reason)) {
@@ -1518,10 +1542,11 @@
 	f2fs_wait_on_all_pages(sbi, F2FS_WB_CP_DATA);
 
 	/*
-	 * invalidate intermediate page cache borrowed from meta inode
-	 * which are used for migration of encrypted inode's blocks.
+	 * invalidate intermediate page cache borrowed from meta inode which are
+	 * used for migration of encrypted, verity or compressed inode's blocks.
 	 */
-	if (f2fs_sb_has_encrypt(sbi))
+	if (f2fs_sb_has_encrypt(sbi) || f2fs_sb_has_verity(sbi) ||
+		f2fs_sb_has_compression(sbi))
 		invalidate_mapping_pages(META_MAPPING(sbi),
 				MAIN_BLKADDR(sbi), MAX_BLKADDR(sbi) - 1);
 
@@ -1552,9 +1577,6 @@
 	return unlikely(f2fs_cp_error(sbi)) ? -EIO : 0;
 }
 
-/*
- * We guarantee that this checkpoint procedure will not fail.
- */
 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
@@ -1569,7 +1591,8 @@
 			return 0;
 		f2fs_warn(sbi, "Start checkpoint disabled!");
 	}
-	mutex_lock(&sbi->cp_mutex);
+	if (cpc->reason != CP_RESIZE)
+		down_write(&sbi->cp_global_sem);
 
 	if (!is_sbi_flag_set(sbi, SBI_IS_DIRTY) &&
 		((cpc->reason & CP_FASTBOOT) || (cpc->reason & CP_SYNC) ||
@@ -1622,12 +1645,16 @@
 
 	f2fs_flush_sit_entries(sbi, cpc);
 
-	/* unlock all the fs_lock[] in do_checkpoint() */
+	/* save inmem log status */
+	f2fs_save_inmem_curseg(sbi);
+
 	err = do_checkpoint(sbi, cpc);
 	if (err)
 		f2fs_release_discard_addrs(sbi);
 	else
 		f2fs_clear_prefree_segments(sbi, cpc);
+
+	f2fs_restore_inmem_curseg(sbi);
 stop:
 	unblock_operations(sbi);
 	stat_inc_cp_count(sbi->stat_info);
@@ -1635,11 +1662,12 @@
 	if (cpc->reason & CP_RECOVERY)
 		f2fs_notice(sbi, "checkpoint: version = %llx", ckpt_ver);
 
-	/* do checkpoint periodically */
+	/* update CP_TIME to trigger checkpoint periodically */
 	f2fs_update_time(sbi, CP_TIME);
 	trace_f2fs_write_checkpoint(sbi->sb, cpc->reason, "finish checkpoint");
 out:
-	mutex_unlock(&sbi->cp_mutex);
+	if (cpc->reason != CP_RESIZE)
+		up_write(&sbi->cp_global_sem);
 	return err;
 }
 
@@ -1657,7 +1685,7 @@
 	}
 
 	sbi->max_orphans = (sbi->blocks_per_seg - F2FS_CP_PACKS -
-			NR_CURSEG_TYPE - __cp_payload(sbi)) *
+			NR_CURSEG_PERSIST_TYPE - __cp_payload(sbi)) *
 				F2FS_ORPHANS_PER_BLOCK;
 }
 
@@ -1681,3 +1709,178 @@
 	kmem_cache_destroy(ino_entry_slab);
 	kmem_cache_destroy(f2fs_inode_entry_slab);
 }
+
+static int __write_checkpoint_sync(struct f2fs_sb_info *sbi)
+{
+	struct cp_control cpc = { .reason = CP_SYNC, };
+	int err;
+
+	down_write(&sbi->gc_lock);
+	err = f2fs_write_checkpoint(sbi, &cpc);
+	up_write(&sbi->gc_lock);
+
+	return err;
+}
+
+static void __checkpoint_and_complete_reqs(struct f2fs_sb_info *sbi)
+{
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+	struct ckpt_req *req, *next;
+	struct llist_node *dispatch_list;
+	u64 sum_diff = 0, diff, count = 0;
+	int ret;
+
+	dispatch_list = llist_del_all(&cprc->issue_list);
+	if (!dispatch_list)
+		return;
+	dispatch_list = llist_reverse_order(dispatch_list);
+
+	ret = __write_checkpoint_sync(sbi);
+	atomic_inc(&cprc->issued_ckpt);
+
+	llist_for_each_entry_safe(req, next, dispatch_list, llnode) {
+		diff = (u64)ktime_ms_delta(ktime_get(), req->queue_time);
+		req->ret = ret;
+		complete(&req->wait);
+
+		sum_diff += diff;
+		count++;
+	}
+	atomic_sub(count, &cprc->queued_ckpt);
+	atomic_add(count, &cprc->total_ckpt);
+
+	spin_lock(&cprc->stat_lock);
+	cprc->cur_time = (unsigned int)div64_u64(sum_diff, count);
+	if (cprc->peak_time < cprc->cur_time)
+		cprc->peak_time = cprc->cur_time;
+	spin_unlock(&cprc->stat_lock);
+}
+
+static int issue_checkpoint_thread(void *data)
+{
+	struct f2fs_sb_info *sbi = data;
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+	wait_queue_head_t *q = &cprc->ckpt_wait_queue;
+repeat:
+	if (kthread_should_stop())
+		return 0;
+
+	if (!llist_empty(&cprc->issue_list))
+		__checkpoint_and_complete_reqs(sbi);
+
+	wait_event_interruptible(*q,
+		kthread_should_stop() || !llist_empty(&cprc->issue_list));
+	goto repeat;
+}
+
+static void flush_remained_ckpt_reqs(struct f2fs_sb_info *sbi,
+		struct ckpt_req *wait_req)
+{
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+
+	if (!llist_empty(&cprc->issue_list)) {
+		__checkpoint_and_complete_reqs(sbi);
+	} else {
+		/* already dispatched by issue_checkpoint_thread */
+		if (wait_req)
+			wait_for_completion(&wait_req->wait);
+	}
+}
+
+static void init_ckpt_req(struct ckpt_req *req)
+{
+	memset(req, 0, sizeof(struct ckpt_req));
+
+	init_completion(&req->wait);
+	req->queue_time = ktime_get();
+}
+
+int f2fs_issue_checkpoint(struct f2fs_sb_info *sbi)
+{
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+	struct ckpt_req req;
+	struct cp_control cpc;
+
+	cpc.reason = __get_cp_reason(sbi);
+	if (!test_opt(sbi, MERGE_CHECKPOINT) || cpc.reason != CP_SYNC) {
+		int ret;
+
+		down_write(&sbi->gc_lock);
+		ret = f2fs_write_checkpoint(sbi, &cpc);
+		up_write(&sbi->gc_lock);
+
+		return ret;
+	}
+
+	if (!cprc->f2fs_issue_ckpt)
+		return __write_checkpoint_sync(sbi);
+
+	init_ckpt_req(&req);
+
+	llist_add(&req.llnode, &cprc->issue_list);
+	atomic_inc(&cprc->queued_ckpt);
+
+	/*
+	 * update issue_list before we wake up issue_checkpoint thread,
+	 * this smp_mb() pairs with another barrier in ___wait_event(),
+	 * see more details in comments of waitqueue_active().
+	 */
+	smp_mb();
+
+	if (waitqueue_active(&cprc->ckpt_wait_queue))
+		wake_up(&cprc->ckpt_wait_queue);
+
+	if (cprc->f2fs_issue_ckpt)
+		wait_for_completion(&req.wait);
+	else
+		flush_remained_ckpt_reqs(sbi, &req);
+
+	return req.ret;
+}
+
+int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi)
+{
+	dev_t dev = sbi->sb->s_bdev->bd_dev;
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+
+	if (cprc->f2fs_issue_ckpt)
+		return 0;
+
+	cprc->f2fs_issue_ckpt = kthread_run(issue_checkpoint_thread, sbi,
+			"f2fs_ckpt-%u:%u", MAJOR(dev), MINOR(dev));
+	if (IS_ERR(cprc->f2fs_issue_ckpt)) {
+		cprc->f2fs_issue_ckpt = NULL;
+		return -ENOMEM;
+	}
+
+	set_task_ioprio(cprc->f2fs_issue_ckpt, cprc->ckpt_thread_ioprio);
+
+	return 0;
+}
+
+void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi)
+{
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+
+	if (cprc->f2fs_issue_ckpt) {
+		struct task_struct *ckpt_task = cprc->f2fs_issue_ckpt;
+
+		cprc->f2fs_issue_ckpt = NULL;
+		kthread_stop(ckpt_task);
+
+		flush_remained_ckpt_reqs(sbi, NULL);
+	}
+}
+
+void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi)
+{
+	struct ckpt_req_control *cprc = &sbi->cprc_info;
+
+	atomic_set(&cprc->issued_ckpt, 0);
+	atomic_set(&cprc->total_ckpt, 0);
+	atomic_set(&cprc->queued_ckpt, 0);
+	cprc->ckpt_thread_ioprio = DEFAULT_CHECKPOINT_IOPRIO;
+	init_waitqueue_head(&cprc->ckpt_wait_queue);
+	init_llist_head(&cprc->issue_list);
+	spin_lock_init(&cprc->stat_lock);
+}
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
new file mode 100644
index 0000000..9954990a
--- /dev/null
+++ b/fs/f2fs/compress.c
@@ -0,0 +1,1899 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * f2fs compress support
+ *
+ * Copyright (c) 2019 Chao Yu <chao@kernel.org>
+ */
+
+#include <linux/fs.h>
+#include <linux/f2fs_fs.h>
+#include <linux/writeback.h>
+#include <linux/backing-dev.h>
+#include <linux/lzo.h>
+#include <linux/lz4.h>
+#include <linux/zstd.h>
+#include <linux/moduleparam.h>
+#include <linux/pagevec.h>
+
+#include "f2fs.h"
+#include "node.h"
+#include "segment.h"
+#include <trace/events/f2fs.h>
+
+static struct kmem_cache *cic_entry_slab;
+static struct kmem_cache *dic_entry_slab;
+
+static void *page_array_alloc(struct inode *inode, int nr)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	unsigned int size = sizeof(struct page *) * nr;
+
+	if (likely(size <= sbi->page_array_slab_size))
+		return kmem_cache_zalloc(sbi->page_array_slab, GFP_NOFS);
+	return f2fs_kzalloc(sbi, size, GFP_NOFS);
+}
+
+static void page_array_free(struct inode *inode, void *pages, int nr)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	unsigned int size = sizeof(struct page *) * nr;
+
+	if (!pages)
+		return;
+
+	if (likely(size <= sbi->page_array_slab_size))
+		kmem_cache_free(sbi->page_array_slab, pages);
+	else
+		kfree(pages);
+}
+
+struct f2fs_compress_ops {
+	int (*init_compress_ctx)(struct compress_ctx *cc);
+	void (*destroy_compress_ctx)(struct compress_ctx *cc);
+	int (*compress_pages)(struct compress_ctx *cc);
+	int (*init_decompress_ctx)(struct decompress_io_ctx *dic);
+	void (*destroy_decompress_ctx)(struct decompress_io_ctx *dic);
+	int (*decompress_pages)(struct decompress_io_ctx *dic);
+};
+
+static unsigned int offset_in_cluster(struct compress_ctx *cc, pgoff_t index)
+{
+	return index & (cc->cluster_size - 1);
+}
+
+static pgoff_t cluster_idx(struct compress_ctx *cc, pgoff_t index)
+{
+	return index >> cc->log_cluster_size;
+}
+
+static pgoff_t start_idx_of_cluster(struct compress_ctx *cc)
+{
+	return cc->cluster_idx << cc->log_cluster_size;
+}
+
+bool f2fs_is_compressed_page(struct page *page)
+{
+	if (!PagePrivate(page))
+		return false;
+	if (!page_private(page))
+		return false;
+	if (page_private_nonpointer(page))
+		return false;
+
+	f2fs_bug_on(F2FS_M_SB(page->mapping),
+		*((u32 *)page_private(page)) != F2FS_COMPRESSED_PAGE_MAGIC);
+	return true;
+}
+
+static void f2fs_set_compressed_page(struct page *page,
+		struct inode *inode, pgoff_t index, void *data)
+{
+	attach_page_private(page, (void *)data);
+
+	/* i_crypto_info and iv index */
+	page->index = index;
+	page->mapping = inode->i_mapping;
+}
+
+static void f2fs_drop_rpages(struct compress_ctx *cc, int len, bool unlock)
+{
+	int i;
+
+	for (i = 0; i < len; i++) {
+		if (!cc->rpages[i])
+			continue;
+		if (unlock)
+			unlock_page(cc->rpages[i]);
+		else
+			put_page(cc->rpages[i]);
+	}
+}
+
+static void f2fs_put_rpages(struct compress_ctx *cc)
+{
+	f2fs_drop_rpages(cc, cc->cluster_size, false);
+}
+
+static void f2fs_unlock_rpages(struct compress_ctx *cc, int len)
+{
+	f2fs_drop_rpages(cc, len, true);
+}
+
+static void f2fs_put_rpages_wbc(struct compress_ctx *cc,
+		struct writeback_control *wbc, bool redirty, int unlock)
+{
+	unsigned int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+		if (redirty)
+			redirty_page_for_writepage(wbc, cc->rpages[i]);
+		f2fs_put_page(cc->rpages[i], unlock);
+	}
+}
+
+struct page *f2fs_compress_control_page(struct page *page)
+{
+	return ((struct compress_io_ctx *)page_private(page))->rpages[0];
+}
+
+int f2fs_init_compress_ctx(struct compress_ctx *cc)
+{
+	if (cc->rpages)
+		return 0;
+
+	cc->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	return cc->rpages ? 0 : -ENOMEM;
+}
+
+void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse)
+{
+	page_array_free(cc->inode, cc->rpages, cc->cluster_size);
+	cc->rpages = NULL;
+	cc->nr_rpages = 0;
+	cc->nr_cpages = 0;
+	if (!reuse)
+		cc->cluster_idx = NULL_CLUSTER;
+}
+
+void f2fs_compress_ctx_add_page(struct compress_ctx *cc, struct page *page)
+{
+	unsigned int cluster_ofs;
+
+	if (!f2fs_cluster_can_merge_page(cc, page->index))
+		f2fs_bug_on(F2FS_I_SB(cc->inode), 1);
+
+	cluster_ofs = offset_in_cluster(cc, page->index);
+	cc->rpages[cluster_ofs] = page;
+	cc->nr_rpages++;
+	cc->cluster_idx = cluster_idx(cc, page->index);
+}
+
+#ifdef CONFIG_F2FS_FS_LZO
+static int lzo_init_compress_ctx(struct compress_ctx *cc)
+{
+	cc->private = f2fs_kvmalloc(F2FS_I_SB(cc->inode),
+				LZO1X_MEM_COMPRESS, GFP_NOFS);
+	if (!cc->private)
+		return -ENOMEM;
+
+	cc->clen = lzo1x_worst_compress(PAGE_SIZE << cc->log_cluster_size);
+	return 0;
+}
+
+static void lzo_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+}
+
+static int lzo_compress_pages(struct compress_ctx *cc)
+{
+	int ret;
+
+	ret = lzo1x_1_compress(cc->rbuf, cc->rlen, cc->cbuf->cdata,
+					&cc->clen, cc->private);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo compress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+	return 0;
+}
+
+static int lzo_decompress_pages(struct decompress_io_ctx *dic)
+{
+	int ret;
+
+	ret = lzo1x_decompress_safe(dic->cbuf->cdata, dic->clen,
+						dic->rbuf, &dic->rlen);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo decompress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+
+	if (dic->rlen != PAGE_SIZE << dic->log_cluster_size) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo invalid rlen:%zu, "
+					"expected:%lu\n", KERN_ERR,
+					F2FS_I_SB(dic->inode)->sb->s_id,
+					dic->rlen,
+					PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lzo_ops = {
+	.init_compress_ctx	= lzo_init_compress_ctx,
+	.destroy_compress_ctx	= lzo_destroy_compress_ctx,
+	.compress_pages		= lzo_compress_pages,
+	.decompress_pages	= lzo_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_LZ4
+static int lz4_init_compress_ctx(struct compress_ctx *cc)
+{
+	unsigned int size = LZ4_MEM_COMPRESS;
+
+#ifdef CONFIG_F2FS_FS_LZ4HC
+	if (F2FS_I(cc->inode)->i_compress_flag >> COMPRESS_LEVEL_OFFSET)
+		size = LZ4HC_MEM_COMPRESS;
+#endif
+
+	cc->private = f2fs_kvmalloc(F2FS_I_SB(cc->inode), size, GFP_NOFS);
+	if (!cc->private)
+		return -ENOMEM;
+
+	/*
+	 * we do not change cc->clen to LZ4_compressBound(inputsize) to
+	 * adapt worst compress case, because lz4 compressor can handle
+	 * output budget properly.
+	 */
+	cc->clen = cc->rlen - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	return 0;
+}
+
+static void lz4_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+}
+
+#ifdef CONFIG_F2FS_FS_LZ4HC
+static int lz4hc_compress_pages(struct compress_ctx *cc)
+{
+	unsigned char level = F2FS_I(cc->inode)->i_compress_flag >>
+						COMPRESS_LEVEL_OFFSET;
+	int len;
+
+	if (level)
+		len = LZ4_compress_HC(cc->rbuf, cc->cbuf->cdata, cc->rlen,
+					cc->clen, level, cc->private);
+	else
+		len = LZ4_compress_default(cc->rbuf, cc->cbuf->cdata, cc->rlen,
+						cc->clen, cc->private);
+	if (!len)
+		return -EAGAIN;
+
+	cc->clen = len;
+	return 0;
+}
+#endif
+
+static int lz4_compress_pages(struct compress_ctx *cc)
+{
+	int len;
+
+#ifdef CONFIG_F2FS_FS_LZ4HC
+	return lz4hc_compress_pages(cc);
+#endif
+	len = LZ4_compress_default(cc->rbuf, cc->cbuf->cdata, cc->rlen,
+						cc->clen, cc->private);
+	if (!len)
+		return -EAGAIN;
+
+	cc->clen = len;
+	return 0;
+}
+
+static int lz4_decompress_pages(struct decompress_io_ctx *dic)
+{
+	int ret;
+
+	ret = LZ4_decompress_safe(dic->cbuf->cdata, dic->rbuf,
+						dic->clen, dic->rlen);
+	if (ret < 0) {
+		printk_ratelimited("%sF2FS-fs (%s): lz4 decompress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+
+	if (ret != PAGE_SIZE << dic->log_cluster_size) {
+		printk_ratelimited("%sF2FS-fs (%s): lz4 invalid rlen:%zu, "
+					"expected:%lu\n", KERN_ERR,
+					F2FS_I_SB(dic->inode)->sb->s_id,
+					dic->rlen,
+					PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lz4_ops = {
+	.init_compress_ctx	= lz4_init_compress_ctx,
+	.destroy_compress_ctx	= lz4_destroy_compress_ctx,
+	.compress_pages		= lz4_compress_pages,
+	.decompress_pages	= lz4_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_ZSTD
+#define F2FS_ZSTD_DEFAULT_CLEVEL	1
+
+static int zstd_init_compress_ctx(struct compress_ctx *cc)
+{
+	ZSTD_parameters params;
+	ZSTD_CStream *stream;
+	void *workspace;
+	unsigned int workspace_size;
+	unsigned char level = F2FS_I(cc->inode)->i_compress_flag >>
+						COMPRESS_LEVEL_OFFSET;
+
+	if (!level)
+		level = F2FS_ZSTD_DEFAULT_CLEVEL;
+
+	params = ZSTD_getParams(level, cc->rlen, 0);
+	workspace_size = ZSTD_CStreamWorkspaceBound(params.cParams);
+
+	workspace = f2fs_kvmalloc(F2FS_I_SB(cc->inode),
+					workspace_size, GFP_NOFS);
+	if (!workspace)
+		return -ENOMEM;
+
+	stream = ZSTD_initCStream(params, 0, workspace, workspace_size);
+	if (!stream) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_initCStream failed\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__);
+		kvfree(workspace);
+		return -EIO;
+	}
+
+	cc->private = workspace;
+	cc->private2 = stream;
+
+	cc->clen = cc->rlen - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	return 0;
+}
+
+static void zstd_destroy_compress_ctx(struct compress_ctx *cc)
+{
+	kvfree(cc->private);
+	cc->private = NULL;
+	cc->private2 = NULL;
+}
+
+static int zstd_compress_pages(struct compress_ctx *cc)
+{
+	ZSTD_CStream *stream = cc->private2;
+	ZSTD_inBuffer inbuf;
+	ZSTD_outBuffer outbuf;
+	int src_size = cc->rlen;
+	int dst_size = src_size - PAGE_SIZE - COMPRESS_HEADER_SIZE;
+	int ret;
+
+	inbuf.pos = 0;
+	inbuf.src = cc->rbuf;
+	inbuf.size = src_size;
+
+	outbuf.pos = 0;
+	outbuf.dst = cc->cbuf->cdata;
+	outbuf.size = dst_size;
+
+	ret = ZSTD_compressStream(stream, &outbuf, &inbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_compressStream failed, ret: %d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	ret = ZSTD_endStream(stream, &outbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_endStream returned %d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	/*
+	 * there is compressed data remained in intermediate buffer due to
+	 * no more space in cbuf.cdata
+	 */
+	if (ret)
+		return -EAGAIN;
+
+	cc->clen = outbuf.pos;
+	return 0;
+}
+
+static int zstd_init_decompress_ctx(struct decompress_io_ctx *dic)
+{
+	ZSTD_DStream *stream;
+	void *workspace;
+	unsigned int workspace_size;
+	unsigned int max_window_size =
+			MAX_COMPRESS_WINDOW_SIZE(dic->log_cluster_size);
+
+	workspace_size = ZSTD_DStreamWorkspaceBound(max_window_size);
+
+	workspace = f2fs_kvmalloc(F2FS_I_SB(dic->inode),
+					workspace_size, GFP_NOFS);
+	if (!workspace)
+		return -ENOMEM;
+
+	stream = ZSTD_initDStream(max_window_size, workspace, workspace_size);
+	if (!stream) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_initDStream failed\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__);
+		kvfree(workspace);
+		return -EIO;
+	}
+
+	dic->private = workspace;
+	dic->private2 = stream;
+
+	return 0;
+}
+
+static void zstd_destroy_decompress_ctx(struct decompress_io_ctx *dic)
+{
+	kvfree(dic->private);
+	dic->private = NULL;
+	dic->private2 = NULL;
+}
+
+static int zstd_decompress_pages(struct decompress_io_ctx *dic)
+{
+	ZSTD_DStream *stream = dic->private2;
+	ZSTD_inBuffer inbuf;
+	ZSTD_outBuffer outbuf;
+	int ret;
+
+	inbuf.pos = 0;
+	inbuf.src = dic->cbuf->cdata;
+	inbuf.size = dic->clen;
+
+	outbuf.pos = 0;
+	outbuf.dst = dic->rbuf;
+	outbuf.size = dic->rlen;
+
+	ret = ZSTD_decompressStream(stream, &outbuf, &inbuf);
+	if (ZSTD_isError(ret)) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD_compressStream failed, ret: %d\n",
+				KERN_ERR, F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__, ZSTD_getErrorCode(ret));
+		return -EIO;
+	}
+
+	if (dic->rlen != outbuf.pos) {
+		printk_ratelimited("%sF2FS-fs (%s): %s ZSTD invalid rlen:%zu, "
+				"expected:%lu\n", KERN_ERR,
+				F2FS_I_SB(dic->inode)->sb->s_id,
+				__func__, dic->rlen,
+				PAGE_SIZE << dic->log_cluster_size);
+		return -EIO;
+	}
+
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_zstd_ops = {
+	.init_compress_ctx	= zstd_init_compress_ctx,
+	.destroy_compress_ctx	= zstd_destroy_compress_ctx,
+	.compress_pages		= zstd_compress_pages,
+	.init_decompress_ctx	= zstd_init_decompress_ctx,
+	.destroy_decompress_ctx	= zstd_destroy_decompress_ctx,
+	.decompress_pages	= zstd_decompress_pages,
+};
+#endif
+
+#ifdef CONFIG_F2FS_FS_LZO
+#ifdef CONFIG_F2FS_FS_LZORLE
+static int lzorle_compress_pages(struct compress_ctx *cc)
+{
+	int ret;
+
+	ret = lzorle1x_1_compress(cc->rbuf, cc->rlen, cc->cbuf->cdata,
+					&cc->clen, cc->private);
+	if (ret != LZO_E_OK) {
+		printk_ratelimited("%sF2FS-fs (%s): lzo-rle compress failed, ret:%d\n",
+				KERN_ERR, F2FS_I_SB(cc->inode)->sb->s_id, ret);
+		return -EIO;
+	}
+	return 0;
+}
+
+static const struct f2fs_compress_ops f2fs_lzorle_ops = {
+	.init_compress_ctx	= lzo_init_compress_ctx,
+	.destroy_compress_ctx	= lzo_destroy_compress_ctx,
+	.compress_pages		= lzorle_compress_pages,
+	.decompress_pages	= lzo_decompress_pages,
+};
+#endif
+#endif
+
+static const struct f2fs_compress_ops *f2fs_cops[COMPRESS_MAX] = {
+#ifdef CONFIG_F2FS_FS_LZO
+	&f2fs_lzo_ops,
+#else
+	NULL,
+#endif
+#ifdef CONFIG_F2FS_FS_LZ4
+	&f2fs_lz4_ops,
+#else
+	NULL,
+#endif
+#ifdef CONFIG_F2FS_FS_ZSTD
+	&f2fs_zstd_ops,
+#else
+	NULL,
+#endif
+#if defined(CONFIG_F2FS_FS_LZO) && defined(CONFIG_F2FS_FS_LZORLE)
+	&f2fs_lzorle_ops,
+#else
+	NULL,
+#endif
+};
+
+bool f2fs_is_compress_backend_ready(struct inode *inode)
+{
+	if (!f2fs_compressed_file(inode))
+		return true;
+	return f2fs_cops[F2FS_I(inode)->i_compress_algorithm];
+}
+
+static mempool_t *compress_page_pool;
+static int num_compress_pages = 512;
+module_param(num_compress_pages, uint, 0444);
+MODULE_PARM_DESC(num_compress_pages,
+		"Number of intermediate compress pages to preallocate");
+
+int f2fs_init_compress_mempool(void)
+{
+	compress_page_pool = mempool_create_page_pool(num_compress_pages, 0);
+	if (!compress_page_pool)
+		return -ENOMEM;
+
+	return 0;
+}
+
+void f2fs_destroy_compress_mempool(void)
+{
+	mempool_destroy(compress_page_pool);
+}
+
+static struct page *f2fs_compress_alloc_page(void)
+{
+	struct page *page;
+
+	page = mempool_alloc(compress_page_pool, GFP_NOFS);
+	lock_page(page);
+
+	return page;
+}
+
+static void f2fs_compress_free_page(struct page *page)
+{
+	if (!page)
+		return;
+	detach_page_private(page);
+	page->mapping = NULL;
+	unlock_page(page);
+	mempool_free(page, compress_page_pool);
+}
+
+#define MAX_VMAP_RETRIES	3
+
+static void *f2fs_vmap(struct page **pages, unsigned int count)
+{
+	int i;
+	void *buf = NULL;
+
+	for (i = 0; i < MAX_VMAP_RETRIES; i++) {
+		buf = vm_map_ram(pages, count, -1, PAGE_KERNEL);
+		if (buf)
+			break;
+		vm_unmap_aliases();
+	}
+	return buf;
+}
+
+static int f2fs_compress_pages(struct compress_ctx *cc)
+{
+	struct f2fs_inode_info *fi = F2FS_I(cc->inode);
+	const struct f2fs_compress_ops *cops =
+				f2fs_cops[fi->i_compress_algorithm];
+	unsigned int max_len, new_nr_cpages;
+	struct page **new_cpages;
+	u32 chksum = 0;
+	int i, ret;
+
+	trace_f2fs_compress_pages_start(cc->inode, cc->cluster_idx,
+				cc->cluster_size, fi->i_compress_algorithm);
+
+	if (cops->init_compress_ctx) {
+		ret = cops->init_compress_ctx(cc);
+		if (ret)
+			goto out;
+	}
+
+	max_len = COMPRESS_HEADER_SIZE + cc->clen;
+	cc->nr_cpages = DIV_ROUND_UP(max_len, PAGE_SIZE);
+
+	cc->cpages = page_array_alloc(cc->inode, cc->nr_cpages);
+	if (!cc->cpages) {
+		ret = -ENOMEM;
+		goto destroy_compress_ctx;
+	}
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		cc->cpages[i] = f2fs_compress_alloc_page();
+		if (!cc->cpages[i]) {
+			ret = -ENOMEM;
+			goto out_free_cpages;
+		}
+	}
+
+	cc->rbuf = f2fs_vmap(cc->rpages, cc->cluster_size);
+	if (!cc->rbuf) {
+		ret = -ENOMEM;
+		goto out_free_cpages;
+	}
+
+	cc->cbuf = f2fs_vmap(cc->cpages, cc->nr_cpages);
+	if (!cc->cbuf) {
+		ret = -ENOMEM;
+		goto out_vunmap_rbuf;
+	}
+
+	ret = cops->compress_pages(cc);
+	if (ret)
+		goto out_vunmap_cbuf;
+
+	max_len = PAGE_SIZE * (cc->cluster_size - 1) - COMPRESS_HEADER_SIZE;
+
+	if (cc->clen > max_len) {
+		ret = -EAGAIN;
+		goto out_vunmap_cbuf;
+	}
+
+	cc->cbuf->clen = cpu_to_le32(cc->clen);
+
+	if (fi->i_compress_flag & 1 << COMPRESS_CHKSUM)
+		chksum = f2fs_crc32(F2FS_I_SB(cc->inode),
+					cc->cbuf->cdata, cc->clen);
+	cc->cbuf->chksum = cpu_to_le32(chksum);
+
+	for (i = 0; i < COMPRESS_DATA_RESERVED_SIZE; i++)
+		cc->cbuf->reserved[i] = cpu_to_le32(0);
+
+	new_nr_cpages = DIV_ROUND_UP(cc->clen + COMPRESS_HEADER_SIZE, PAGE_SIZE);
+
+	/* Now we're going to cut unnecessary tail pages */
+	new_cpages = page_array_alloc(cc->inode, new_nr_cpages);
+	if (!new_cpages) {
+		ret = -ENOMEM;
+		goto out_vunmap_cbuf;
+	}
+
+	/* zero out any unused part of the last page */
+	memset(&cc->cbuf->cdata[cc->clen], 0,
+			(new_nr_cpages * PAGE_SIZE) -
+			(cc->clen + COMPRESS_HEADER_SIZE));
+
+	vm_unmap_ram(cc->cbuf, cc->nr_cpages);
+	vm_unmap_ram(cc->rbuf, cc->cluster_size);
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (i < new_nr_cpages) {
+			new_cpages[i] = cc->cpages[i];
+			continue;
+		}
+		f2fs_compress_free_page(cc->cpages[i]);
+		cc->cpages[i] = NULL;
+	}
+
+	if (cops->destroy_compress_ctx)
+		cops->destroy_compress_ctx(cc);
+
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = new_cpages;
+	cc->nr_cpages = new_nr_cpages;
+
+	trace_f2fs_compress_pages_end(cc->inode, cc->cluster_idx,
+							cc->clen, ret);
+	return 0;
+
+out_vunmap_cbuf:
+	vm_unmap_ram(cc->cbuf, cc->nr_cpages);
+out_vunmap_rbuf:
+	vm_unmap_ram(cc->rbuf, cc->cluster_size);
+out_free_cpages:
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (cc->cpages[i])
+			f2fs_compress_free_page(cc->cpages[i]);
+	}
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+destroy_compress_ctx:
+	if (cops->destroy_compress_ctx)
+		cops->destroy_compress_ctx(cc);
+out:
+	trace_f2fs_compress_pages_end(cc->inode, cc->cluster_idx,
+							cc->clen, ret);
+	return ret;
+}
+
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
+	struct f2fs_inode_info *fi = F2FS_I(dic->inode);
+	const struct f2fs_compress_ops *cops =
+			f2fs_cops[fi->i_compress_algorithm];
+	int ret;
+	int i;
+
+	trace_f2fs_decompress_pages_start(dic->inode, dic->cluster_idx,
+				dic->cluster_size, fi->i_compress_algorithm);
+
+	if (dic->failed) {
+		ret = -EIO;
+		goto out_end_io;
+	}
+
+	dic->tpages = page_array_alloc(dic->inode, dic->cluster_size);
+	if (!dic->tpages) {
+		ret = -ENOMEM;
+		goto out_end_io;
+	}
+
+	for (i = 0; i < dic->cluster_size; i++) {
+		if (dic->rpages[i]) {
+			dic->tpages[i] = dic->rpages[i];
+			continue;
+		}
+
+		dic->tpages[i] = f2fs_compress_alloc_page();
+		if (!dic->tpages[i]) {
+			ret = -ENOMEM;
+			goto out_end_io;
+		}
+	}
+
+	if (cops->init_decompress_ctx) {
+		ret = cops->init_decompress_ctx(dic);
+		if (ret)
+			goto out_end_io;
+	}
+
+	dic->rbuf = f2fs_vmap(dic->tpages, dic->cluster_size);
+	if (!dic->rbuf) {
+		ret = -ENOMEM;
+		goto out_destroy_decompress_ctx;
+	}
+
+	dic->cbuf = f2fs_vmap(dic->cpages, dic->nr_cpages);
+	if (!dic->cbuf) {
+		ret = -ENOMEM;
+		goto out_vunmap_rbuf;
+	}
+
+	dic->clen = le32_to_cpu(dic->cbuf->clen);
+	dic->rlen = PAGE_SIZE << dic->log_cluster_size;
+
+	if (dic->clen > PAGE_SIZE * dic->nr_cpages - COMPRESS_HEADER_SIZE) {
+		ret = -EFSCORRUPTED;
+		goto out_vunmap_cbuf;
+	}
+
+	ret = cops->decompress_pages(dic);
+
+	if (!ret && (fi->i_compress_flag & 1 << COMPRESS_CHKSUM)) {
+		u32 provided = le32_to_cpu(dic->cbuf->chksum);
+		u32 calculated = f2fs_crc32(sbi, dic->cbuf->cdata, dic->clen);
+
+		if (provided != calculated) {
+			if (!is_inode_flag_set(dic->inode, FI_COMPRESS_CORRUPT)) {
+				set_inode_flag(dic->inode, FI_COMPRESS_CORRUPT);
+				printk_ratelimited(
+					"%sF2FS-fs (%s): checksum invalid, nid = %lu, %x vs %x",
+					KERN_INFO, sbi->sb->s_id, dic->inode->i_ino,
+					provided, calculated);
+			}
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+		}
+	}
+
+out_vunmap_cbuf:
+	vm_unmap_ram(dic->cbuf, dic->nr_cpages);
+out_vunmap_rbuf:
+	vm_unmap_ram(dic->rbuf, dic->cluster_size);
+out_destroy_decompress_ctx:
+	if (cops->destroy_decompress_ctx)
+		cops->destroy_decompress_ctx(dic);
+out_end_io:
+	trace_f2fs_decompress_pages_end(dic->inode, dic->cluster_idx,
+							dic->clen, ret);
+	f2fs_decompress_end_io(dic, ret);
+}
+
+/*
+ * This is called when a page of a compressed cluster has been read from disk
+ * (or failed to be read from disk).  It checks whether this page was the last
+ * page being waited on in the cluster, and if so, it decompresses the cluster
+ * (or in the case of a failure, cleans up without actually decompressing).
+ */
+void f2fs_end_read_compressed_page(struct page *page, bool failed,
+						block_t blkaddr)
+{
+	struct decompress_io_ctx *dic =
+			(struct decompress_io_ctx *)page_private(page);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
+
+	dec_page_count(sbi, F2FS_RD_DATA);
+
+	if (failed)
+		WRITE_ONCE(dic->failed, true);
+	else if (blkaddr)
+		f2fs_cache_compressed_page(sbi, page,
+					dic->inode->i_ino, blkaddr);
+
+	if (atomic_dec_and_test(&dic->remaining_pages))
+		f2fs_decompress_cluster(dic);
+}
+
+static bool is_page_in_cluster(struct compress_ctx *cc, pgoff_t index)
+{
+	if (cc->cluster_idx == NULL_CLUSTER)
+		return true;
+	return cc->cluster_idx == cluster_idx(cc, index);
+}
+
+bool f2fs_cluster_is_empty(struct compress_ctx *cc)
+{
+	return cc->nr_rpages == 0;
+}
+
+static bool f2fs_cluster_is_full(struct compress_ctx *cc)
+{
+	return cc->cluster_size == cc->nr_rpages;
+}
+
+bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index)
+{
+	if (f2fs_cluster_is_empty(cc))
+		return true;
+	return is_page_in_cluster(cc, index);
+}
+
+static bool cluster_has_invalid_data(struct compress_ctx *cc)
+{
+	loff_t i_size = i_size_read(cc->inode);
+	unsigned nr_pages = DIV_ROUND_UP(i_size, PAGE_SIZE);
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		struct page *page = cc->rpages[i];
+
+		f2fs_bug_on(F2FS_I_SB(cc->inode), !page);
+
+		/* beyond EOF */
+		if (page->index >= nr_pages)
+			return true;
+	}
+	return false;
+}
+
+static int __f2fs_cluster_blocks(struct inode *inode,
+				unsigned int cluster_idx, bool compr)
+{
+	struct dnode_of_data dn;
+	unsigned int cluster_size = F2FS_I(inode)->i_cluster_size;
+	unsigned int start_idx = cluster_idx <<
+				F2FS_I(inode)->i_log_cluster_size;
+	int ret;
+
+	set_new_dnode(&dn, inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (ret) {
+		if (ret == -ENOENT)
+			ret = 0;
+		goto fail;
+	}
+
+	if (dn.data_blkaddr == COMPRESS_ADDR) {
+		int i;
+
+		ret = 1;
+		for (i = 1; i < cluster_size; i++) {
+			block_t blkaddr;
+
+			blkaddr = data_blkaddr(dn.inode,
+					dn.node_page, dn.ofs_in_node + i);
+			if (compr) {
+				if (__is_valid_data_blkaddr(blkaddr))
+					ret++;
+			} else {
+				if (blkaddr != NULL_ADDR)
+					ret++;
+			}
+		}
+
+		f2fs_bug_on(F2FS_I_SB(inode),
+			!compr && ret != cluster_size &&
+			!is_inode_flag_set(inode, FI_COMPRESS_RELEASED));
+	}
+fail:
+	f2fs_put_dnode(&dn);
+	return ret;
+}
+
+/* return # of compressed blocks in compressed cluster */
+static int f2fs_compressed_blocks(struct compress_ctx *cc)
+{
+	return __f2fs_cluster_blocks(cc->inode, cc->cluster_idx, true);
+}
+
+/* return # of valid blocks in compressed cluster */
+int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index)
+{
+	return __f2fs_cluster_blocks(inode,
+		index >> F2FS_I(inode)->i_log_cluster_size,
+		false);
+}
+
+static bool cluster_may_compress(struct compress_ctx *cc)
+{
+	if (!f2fs_need_compress_data(cc->inode))
+		return false;
+	if (f2fs_is_atomic_file(cc->inode))
+		return false;
+	if (!f2fs_cluster_is_full(cc))
+		return false;
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(cc->inode))))
+		return false;
+	return !cluster_has_invalid_data(cc);
+}
+
+static void set_cluster_writeback(struct compress_ctx *cc)
+{
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (cc->rpages[i])
+			set_page_writeback(cc->rpages[i]);
+	}
+}
+
+static void set_cluster_dirty(struct compress_ctx *cc)
+{
+	int i;
+
+	for (i = 0; i < cc->cluster_size; i++)
+		if (cc->rpages[i])
+			set_page_dirty(cc->rpages[i]);
+}
+
+static int prepare_compress_overwrite(struct compress_ctx *cc,
+		struct page **pagep, pgoff_t index, void **fsdata)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+	struct address_space *mapping = cc->inode->i_mapping;
+	struct page *page;
+	sector_t last_block_in_bio;
+	unsigned fgp_flag = FGP_LOCK | FGP_WRITE | FGP_CREAT;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	int i, ret;
+
+retry:
+	ret = f2fs_is_compressed_cluster(cc->inode, start_idx);
+	if (ret <= 0)
+		return ret;
+
+	ret = f2fs_init_compress_ctx(cc);
+	if (ret)
+		return ret;
+
+	/* keep page reference to avoid page reclaim */
+	for (i = 0; i < cc->cluster_size; i++) {
+		page = f2fs_pagecache_get_page(mapping, start_idx + i,
+							fgp_flag, GFP_NOFS);
+		if (!page) {
+			ret = -ENOMEM;
+			goto unlock_pages;
+		}
+
+		if (PageUptodate(page))
+			f2fs_put_page(page, 1);
+		else
+			f2fs_compress_ctx_add_page(cc, page);
+	}
+
+	if (!f2fs_cluster_is_empty(cc)) {
+		struct bio *bio = NULL;
+
+		ret = f2fs_read_multi_pages(cc, &bio, cc->cluster_size,
+					&last_block_in_bio, false, true);
+		f2fs_put_rpages(cc);
+		f2fs_destroy_compress_ctx(cc, true);
+		if (ret)
+			goto out;
+		if (bio)
+			f2fs_submit_bio(sbi, bio, DATA);
+
+		ret = f2fs_init_compress_ctx(cc);
+		if (ret)
+			goto out;
+	}
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		f2fs_bug_on(sbi, cc->rpages[i]);
+
+		page = find_lock_page(mapping, start_idx + i);
+		if (!page) {
+			/* page can be truncated */
+			goto release_and_retry;
+		}
+
+		f2fs_wait_on_page_writeback(page, DATA, true, true);
+		f2fs_compress_ctx_add_page(cc, page);
+
+		if (!PageUptodate(page)) {
+release_and_retry:
+			f2fs_put_rpages(cc);
+			f2fs_unlock_rpages(cc, i + 1);
+			f2fs_destroy_compress_ctx(cc, true);
+			goto retry;
+		}
+	}
+
+	if (likely(!ret)) {
+		*fsdata = cc->rpages;
+		*pagep = cc->rpages[offset_in_cluster(cc, index)];
+		return cc->cluster_size;
+	}
+
+unlock_pages:
+	f2fs_put_rpages(cc);
+	f2fs_unlock_rpages(cc, i);
+	f2fs_destroy_compress_ctx(cc, true);
+out:
+	return ret;
+}
+
+int f2fs_prepare_compress_overwrite(struct inode *inode,
+		struct page **pagep, pgoff_t index, void **fsdata)
+{
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = index >> F2FS_I(inode)->i_log_cluster_size,
+		.rpages = NULL,
+		.nr_rpages = 0,
+	};
+
+	return prepare_compress_overwrite(&cc, pagep, index, fsdata);
+}
+
+bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
+					pgoff_t index, unsigned copied)
+
+{
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.rpages = fsdata,
+	};
+	bool first_index = (index == cc.rpages[0]->index);
+
+	if (copied)
+		set_cluster_dirty(&cc);
+
+	f2fs_put_rpages_wbc(&cc, NULL, false, 1);
+	f2fs_destroy_compress_ctx(&cc, false);
+
+	return first_index;
+}
+
+int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock)
+{
+	void *fsdata = NULL;
+	struct page *pagep;
+	int log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
+	pgoff_t start_idx = from >> (PAGE_SHIFT + log_cluster_size) <<
+							log_cluster_size;
+	int err;
+
+	err = f2fs_is_compressed_cluster(inode, start_idx);
+	if (err < 0)
+		return err;
+
+	/* truncate normal cluster */
+	if (!err)
+		return f2fs_do_truncate_blocks(inode, from, lock);
+
+	/* truncate compressed cluster */
+	err = f2fs_prepare_compress_overwrite(inode, &pagep,
+						start_idx, &fsdata);
+
+	/* should not be a normal cluster */
+	f2fs_bug_on(F2FS_I_SB(inode), err == 0);
+
+	if (err <= 0)
+		return err;
+
+	if (err > 0) {
+		struct page **rpages = fsdata;
+		int cluster_size = F2FS_I(inode)->i_cluster_size;
+		int i;
+
+		for (i = cluster_size - 1; i >= 0; i--) {
+			loff_t start = rpages[i]->index << PAGE_SHIFT;
+
+			if (from <= start) {
+				zero_user_segment(rpages[i], 0, PAGE_SIZE);
+			} else {
+				zero_user_segment(rpages[i], from - start,
+								PAGE_SIZE);
+				break;
+			}
+		}
+
+		f2fs_compress_write_end(inode, fsdata, start_idx, true);
+	}
+	return 0;
+}
+
+static int f2fs_write_compressed_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	struct inode *inode = cc->inode;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	struct f2fs_io_info fio = {
+		.sbi = sbi,
+		.ino = cc->inode->i_ino,
+		.type = DATA,
+		.op = REQ_OP_WRITE,
+		.op_flags = wbc_to_write_flags(wbc),
+		.old_blkaddr = NEW_ADDR,
+		.page = NULL,
+		.encrypted_page = NULL,
+		.compressed_page = NULL,
+		.submitted = false,
+		.io_type = io_type,
+		.io_wbc = wbc,
+		.encrypted = fscrypt_inode_uses_fs_layer_crypto(cc->inode),
+	};
+	struct dnode_of_data dn;
+	struct node_info ni;
+	struct compress_io_ctx *cic;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	unsigned int last_index = cc->cluster_size - 1;
+	loff_t psize;
+	int i, err;
+
+	/* we should bypass data pages to proceed the kworkder jobs */
+	if (unlikely(f2fs_cp_error(sbi))) {
+		mapping_set_error(cc->rpages[0]->mapping, -EIO);
+		goto out_free;
+	}
+
+	if (IS_NOQUOTA(inode)) {
+		/*
+		 * We need to wait for node_write to avoid block allocation during
+		 * checkpoint. This can only happen to quota writes which can cause
+		 * the below discard race condition.
+		 */
+		down_read(&sbi->node_write);
+	} else if (!f2fs_trylock_op(sbi)) {
+		goto out_free;
+	}
+
+	set_new_dnode(&dn, cc->inode, NULL, NULL, 0);
+
+	err = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (err)
+		goto out_unlock_op;
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (data_blkaddr(dn.inode, dn.node_page,
+					dn.ofs_in_node + i) == NULL_ADDR)
+			goto out_put_dnode;
+	}
+
+	psize = (loff_t)(cc->rpages[last_index]->index + 1) << PAGE_SHIFT;
+
+	err = f2fs_get_node_info(fio.sbi, dn.nid, &ni);
+	if (err)
+		goto out_put_dnode;
+
+	fio.version = ni.version;
+
+	cic = kmem_cache_zalloc(cic_entry_slab, GFP_NOFS);
+	if (!cic)
+		goto out_put_dnode;
+
+	cic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	cic->inode = inode;
+	atomic_set(&cic->pending_pages, cc->nr_cpages);
+	cic->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	if (!cic->rpages)
+		goto out_put_cic;
+
+	cic->nr_rpages = cc->cluster_size;
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		f2fs_set_compressed_page(cc->cpages[i], inode,
+					cc->rpages[i + 1]->index, cic);
+		fio.compressed_page = cc->cpages[i];
+
+		fio.old_blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i + 1);
+
+		/* wait for GCed page writeback via META_MAPPING */
+		f2fs_wait_on_block_writeback(inode, fio.old_blkaddr);
+
+		if (fio.encrypted) {
+			fio.page = cc->rpages[i + 1];
+			err = f2fs_encrypt_one_page(&fio);
+			if (err)
+				goto out_destroy_crypt;
+			cc->cpages[i] = fio.encrypted_page;
+		}
+	}
+
+	set_cluster_writeback(cc);
+
+	for (i = 0; i < cc->cluster_size; i++)
+		cic->rpages[i] = cc->rpages[i];
+
+	for (i = 0; i < cc->cluster_size; i++, dn.ofs_in_node++) {
+		block_t blkaddr;
+
+		blkaddr = f2fs_data_blkaddr(&dn);
+		fio.page = cc->rpages[i];
+		fio.old_blkaddr = blkaddr;
+
+		/* cluster header */
+		if (i == 0) {
+			if (blkaddr == COMPRESS_ADDR)
+				fio.compr_blocks++;
+			if (__is_valid_data_blkaddr(blkaddr))
+				f2fs_invalidate_blocks(sbi, blkaddr);
+			f2fs_update_data_blkaddr(&dn, COMPRESS_ADDR);
+			goto unlock_continue;
+		}
+
+		if (fio.compr_blocks && __is_valid_data_blkaddr(blkaddr))
+			fio.compr_blocks++;
+
+		if (i > cc->nr_cpages) {
+			if (__is_valid_data_blkaddr(blkaddr)) {
+				f2fs_invalidate_blocks(sbi, blkaddr);
+				f2fs_update_data_blkaddr(&dn, NEW_ADDR);
+			}
+			goto unlock_continue;
+		}
+
+		f2fs_bug_on(fio.sbi, blkaddr == NULL_ADDR);
+
+		if (fio.encrypted)
+			fio.encrypted_page = cc->cpages[i - 1];
+		else
+			fio.compressed_page = cc->cpages[i - 1];
+
+		cc->cpages[i - 1] = NULL;
+		f2fs_outplace_write_data(&dn, &fio);
+		(*submitted)++;
+unlock_continue:
+		inode_dec_dirty_pages(cc->inode);
+		unlock_page(fio.page);
+	}
+
+	if (fio.compr_blocks)
+		f2fs_i_compr_blocks_update(inode, fio.compr_blocks - 1, false);
+	f2fs_i_compr_blocks_update(inode, cc->nr_cpages, true);
+	add_compr_block_stat(inode, cc->nr_cpages);
+
+	set_inode_flag(cc->inode, FI_APPEND_WRITE);
+	if (cc->cluster_idx == 0)
+		set_inode_flag(inode, FI_FIRST_BLOCK_WRITTEN);
+
+	f2fs_put_dnode(&dn);
+	if (IS_NOQUOTA(inode))
+		up_read(&sbi->node_write);
+	else
+		f2fs_unlock_op(sbi);
+
+	spin_lock(&fi->i_size_lock);
+	if (fi->last_disk_size < psize)
+		fi->last_disk_size = psize;
+	spin_unlock(&fi->i_size_lock);
+
+	f2fs_put_rpages(cc);
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+	f2fs_destroy_compress_ctx(cc, false);
+	return 0;
+
+out_destroy_crypt:
+	page_array_free(cc->inode, cic->rpages, cc->cluster_size);
+
+	for (--i; i >= 0; i--)
+		fscrypt_finalize_bounce_page(&cc->cpages[i]);
+	for (i = 0; i < cc->nr_cpages; i++) {
+		if (!cc->cpages[i])
+			continue;
+		f2fs_compress_free_page(cc->cpages[i]);
+		cc->cpages[i] = NULL;
+	}
+out_put_cic:
+	kmem_cache_free(cic_entry_slab, cic);
+out_put_dnode:
+	f2fs_put_dnode(&dn);
+out_unlock_op:
+	if (IS_NOQUOTA(inode))
+		up_read(&sbi->node_write);
+	else
+		f2fs_unlock_op(sbi);
+out_free:
+	page_array_free(cc->inode, cc->cpages, cc->nr_cpages);
+	cc->cpages = NULL;
+	return -EAGAIN;
+}
+
+void f2fs_compress_write_end_io(struct bio *bio, struct page *page)
+{
+	struct f2fs_sb_info *sbi = bio->bi_private;
+	struct compress_io_ctx *cic =
+			(struct compress_io_ctx *)page_private(page);
+	int i;
+
+	if (unlikely(bio->bi_status))
+		mapping_set_error(cic->inode->i_mapping, -EIO);
+
+	f2fs_compress_free_page(page);
+
+	dec_page_count(sbi, F2FS_WB_DATA);
+
+	if (atomic_dec_return(&cic->pending_pages))
+		return;
+
+	for (i = 0; i < cic->nr_rpages; i++) {
+		WARN_ON(!cic->rpages[i]);
+		clear_page_private_gcing(cic->rpages[i]);
+		end_page_writeback(cic->rpages[i]);
+	}
+
+	page_array_free(cic->inode, cic->rpages, cic->nr_rpages);
+	kmem_cache_free(cic_entry_slab, cic);
+}
+
+static int f2fs_write_raw_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	struct address_space *mapping = cc->inode->i_mapping;
+	int _submitted, compr_blocks, ret;
+	int i = -1, err = 0;
+
+	compr_blocks = f2fs_compressed_blocks(cc);
+	if (compr_blocks < 0) {
+		err = compr_blocks;
+		goto out_err;
+	}
+
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+retry_write:
+		if (cc->rpages[i]->mapping != mapping) {
+			unlock_page(cc->rpages[i]);
+			continue;
+		}
+
+		BUG_ON(!PageLocked(cc->rpages[i]));
+
+		ret = f2fs_write_single_data_page(cc->rpages[i], &_submitted,
+						NULL, NULL, wbc, io_type,
+						compr_blocks, false);
+		if (ret) {
+			if (ret == AOP_WRITEPAGE_ACTIVATE) {
+				unlock_page(cc->rpages[i]);
+				ret = 0;
+			} else if (ret == -EAGAIN) {
+				/*
+				 * for quota file, just redirty left pages to
+				 * avoid deadlock caused by cluster update race
+				 * from foreground operation.
+				 */
+				if (IS_NOQUOTA(cc->inode)) {
+					err = 0;
+					goto out_err;
+				}
+				ret = 0;
+				cond_resched();
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
+				lock_page(cc->rpages[i]);
+
+				if (!PageDirty(cc->rpages[i])) {
+					unlock_page(cc->rpages[i]);
+					continue;
+				}
+
+				clear_page_dirty_for_io(cc->rpages[i]);
+				goto retry_write;
+			}
+			err = ret;
+			goto out_err;
+		}
+
+		*submitted += _submitted;
+	}
+
+	f2fs_balance_fs(F2FS_M_SB(mapping), true);
+
+	return 0;
+out_err:
+	for (++i; i < cc->cluster_size; i++) {
+		if (!cc->rpages[i])
+			continue;
+		redirty_page_for_writepage(wbc, cc->rpages[i]);
+		unlock_page(cc->rpages[i]);
+	}
+	return err;
+}
+
+int f2fs_write_multi_pages(struct compress_ctx *cc,
+					int *submitted,
+					struct writeback_control *wbc,
+					enum iostat_type io_type)
+{
+	int err;
+
+	*submitted = 0;
+	if (cluster_may_compress(cc)) {
+		err = f2fs_compress_pages(cc);
+		if (err == -EAGAIN) {
+			goto write;
+		} else if (err) {
+			f2fs_put_rpages_wbc(cc, wbc, true, 1);
+			goto destroy_out;
+		}
+
+		err = f2fs_write_compressed_pages(cc, submitted,
+							wbc, io_type);
+		if (!err)
+			return 0;
+		f2fs_bug_on(F2FS_I_SB(cc->inode), err != -EAGAIN);
+	}
+write:
+	f2fs_bug_on(F2FS_I_SB(cc->inode), *submitted);
+
+	err = f2fs_write_raw_pages(cc, submitted, wbc, io_type);
+	f2fs_put_rpages_wbc(cc, wbc, false, 0);
+destroy_out:
+	f2fs_destroy_compress_ctx(cc, false);
+	return err;
+}
+
+static void f2fs_free_dic(struct decompress_io_ctx *dic);
+
+struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc)
+{
+	struct decompress_io_ctx *dic;
+	pgoff_t start_idx = start_idx_of_cluster(cc);
+	int i;
+
+	dic = kmem_cache_zalloc(dic_entry_slab, GFP_NOFS);
+	if (!dic)
+		return ERR_PTR(-ENOMEM);
+
+	dic->rpages = page_array_alloc(cc->inode, cc->cluster_size);
+	if (!dic->rpages) {
+		kmem_cache_free(dic_entry_slab, dic);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	dic->magic = F2FS_COMPRESSED_PAGE_MAGIC;
+	dic->inode = cc->inode;
+	atomic_set(&dic->remaining_pages, cc->nr_cpages);
+	dic->cluster_idx = cc->cluster_idx;
+	dic->cluster_size = cc->cluster_size;
+	dic->log_cluster_size = cc->log_cluster_size;
+	dic->nr_cpages = cc->nr_cpages;
+	refcount_set(&dic->refcnt, 1);
+	dic->failed = false;
+	dic->need_verity = f2fs_need_verity(cc->inode, start_idx);
+
+	for (i = 0; i < dic->cluster_size; i++)
+		dic->rpages[i] = cc->rpages[i];
+	dic->nr_rpages = cc->cluster_size;
+
+	dic->cpages = page_array_alloc(dic->inode, dic->nr_cpages);
+	if (!dic->cpages)
+		goto out_free;
+
+	for (i = 0; i < dic->nr_cpages; i++) {
+		struct page *page;
+
+		page = f2fs_compress_alloc_page();
+		if (!page)
+			goto out_free;
+
+		f2fs_set_compressed_page(page, cc->inode,
+					start_idx + i + 1, dic);
+		dic->cpages[i] = page;
+	}
+
+	return dic;
+
+out_free:
+	f2fs_free_dic(dic);
+	return ERR_PTR(-ENOMEM);
+}
+
+static void f2fs_free_dic(struct decompress_io_ctx *dic)
+{
+	int i;
+
+	if (dic->tpages) {
+		for (i = 0; i < dic->cluster_size; i++) {
+			if (dic->rpages[i])
+				continue;
+			if (!dic->tpages[i])
+				continue;
+			f2fs_compress_free_page(dic->tpages[i]);
+		}
+		page_array_free(dic->inode, dic->tpages, dic->cluster_size);
+	}
+
+	if (dic->cpages) {
+		for (i = 0; i < dic->nr_cpages; i++) {
+			if (!dic->cpages[i])
+				continue;
+			f2fs_compress_free_page(dic->cpages[i]);
+		}
+		page_array_free(dic->inode, dic->cpages, dic->nr_cpages);
+	}
+
+	page_array_free(dic->inode, dic->rpages, dic->nr_rpages);
+	kmem_cache_free(dic_entry_slab, dic);
+}
+
+static void f2fs_put_dic(struct decompress_io_ctx *dic)
+{
+	if (refcount_dec_and_test(&dic->refcnt))
+		f2fs_free_dic(dic);
+}
+
+/*
+ * Update and unlock the cluster's pagecache pages, and release the reference to
+ * the decompress_io_ctx that was being held for I/O completion.
+ */
+static void __f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
+{
+	int i;
+
+	for (i = 0; i < dic->cluster_size; i++) {
+		struct page *rpage = dic->rpages[i];
+
+		if (!rpage)
+			continue;
+
+		/* PG_error was set if verity failed. */
+		if (failed || PageError(rpage)) {
+			ClearPageUptodate(rpage);
+			/* will re-read again later */
+			ClearPageError(rpage);
+		} else {
+			SetPageUptodate(rpage);
+		}
+		unlock_page(rpage);
+	}
+
+	f2fs_put_dic(dic);
+}
+
+static void f2fs_verify_cluster(struct work_struct *work)
+{
+	struct decompress_io_ctx *dic =
+		container_of(work, struct decompress_io_ctx, verity_work);
+	int i;
+
+	/* Verify the cluster's decompressed pages with fs-verity. */
+	for (i = 0; i < dic->cluster_size; i++) {
+		struct page *rpage = dic->rpages[i];
+
+		if (rpage && !fsverity_verify_page(rpage))
+			SetPageError(rpage);
+	}
+
+	__f2fs_decompress_end_io(dic, false);
+}
+
+/*
+ * This is called when a compressed cluster has been decompressed
+ * (or failed to be read and/or decompressed).
+ */
+void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
+{
+	if (!failed && dic->need_verity) {
+		/*
+		 * Note that to avoid deadlocks, the verity work can't be done
+		 * on the decompression workqueue.  This is because verifying
+		 * the data pages can involve reading metadata pages from the
+		 * file, and these metadata pages may be compressed.
+		 */
+		INIT_WORK(&dic->verity_work, f2fs_verify_cluster);
+		fsverity_enqueue_verify_work(&dic->verity_work);
+	} else {
+		__f2fs_decompress_end_io(dic, failed);
+	}
+}
+
+/*
+ * Put a reference to a compressed page's decompress_io_ctx.
+ *
+ * This is called when the page is no longer needed and can be freed.
+ */
+void f2fs_put_page_dic(struct page *page)
+{
+	struct decompress_io_ctx *dic =
+			(struct decompress_io_ctx *)page_private(page);
+
+	f2fs_put_dic(dic);
+}
+
+const struct address_space_operations f2fs_compress_aops = {
+	.releasepage = f2fs_release_page,
+	.invalidatepage = f2fs_invalidate_page,
+};
+
+struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi)
+{
+	return sbi->compress_inode->i_mapping;
+}
+
+void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr)
+{
+	if (!sbi->compress_inode)
+		return;
+	invalidate_mapping_pages(COMPRESS_MAPPING(sbi), blkaddr, blkaddr);
+}
+
+void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+						nid_t ino, block_t blkaddr)
+{
+	struct page *cpage;
+	int ret;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return;
+
+	if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE_READ))
+		return;
+
+	if (!f2fs_available_free_memory(sbi, COMPRESS_PAGE))
+		return;
+
+	cpage = find_get_page(COMPRESS_MAPPING(sbi), blkaddr);
+	if (cpage) {
+		f2fs_put_page(cpage, 0);
+		return;
+	}
+
+	cpage = alloc_page(__GFP_NOWARN | __GFP_IO);
+	if (!cpage)
+		return;
+
+	ret = add_to_page_cache_lru(cpage, COMPRESS_MAPPING(sbi),
+						blkaddr, GFP_NOFS);
+	if (ret) {
+		f2fs_put_page(cpage, 0);
+		return;
+	}
+
+	set_page_private_data(cpage, ino);
+
+	if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE_READ))
+		goto out;
+
+	memcpy(page_address(cpage), page_address(page), PAGE_SIZE);
+	SetPageUptodate(cpage);
+out:
+	f2fs_put_page(cpage, 1);
+}
+
+bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+								block_t blkaddr)
+{
+	struct page *cpage;
+	bool hitted = false;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return false;
+
+	cpage = f2fs_pagecache_get_page(COMPRESS_MAPPING(sbi),
+				blkaddr, FGP_LOCK | FGP_NOWAIT, GFP_NOFS);
+	if (cpage) {
+		if (PageUptodate(cpage)) {
+			atomic_inc(&sbi->compress_page_hit);
+			memcpy(page_address(page),
+				page_address(cpage), PAGE_SIZE);
+			hitted = true;
+		}
+		f2fs_put_page(cpage, 1);
+	}
+
+	return hitted;
+}
+
+void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino)
+{
+	struct address_space *mapping = sbi->compress_inode->i_mapping;
+	struct pagevec pvec;
+	pgoff_t index = 0;
+	pgoff_t end = MAX_BLKADDR(sbi);
+
+	if (!mapping->nrpages)
+		return;
+
+	pagevec_init(&pvec);
+
+	do {
+		unsigned int nr_pages;
+		int i;
+
+		nr_pages = pagevec_lookup_range(&pvec, mapping,
+						&index, end - 1);
+		if (!nr_pages)
+			break;
+
+		for (i = 0; i < nr_pages; i++) {
+			struct page *page = pvec.pages[i];
+
+			if (page->index > end)
+				break;
+
+			lock_page(page);
+			if (page->mapping != mapping) {
+				unlock_page(page);
+				continue;
+			}
+
+			if (ino != get_page_private_data(page)) {
+				unlock_page(page);
+				continue;
+			}
+
+			generic_error_remove_page(mapping, page);
+			unlock_page(page);
+		}
+		pagevec_release(&pvec);
+		cond_resched();
+	} while (index < end);
+}
+
+int f2fs_init_compress_inode(struct f2fs_sb_info *sbi)
+{
+	struct inode *inode;
+
+	if (!test_opt(sbi, COMPRESS_CACHE))
+		return 0;
+
+	inode = f2fs_iget(sbi->sb, F2FS_COMPRESS_INO(sbi));
+	if (IS_ERR(inode))
+		return PTR_ERR(inode);
+	sbi->compress_inode = inode;
+
+	sbi->compress_percent = COMPRESS_PERCENT;
+	sbi->compress_watermark = COMPRESS_WATERMARK;
+
+	atomic_set(&sbi->compress_page_hit, 0);
+
+	return 0;
+}
+
+void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi)
+{
+	if (!sbi->compress_inode)
+		return;
+	iput(sbi->compress_inode);
+	sbi->compress_inode = NULL;
+}
+
+int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi)
+{
+	dev_t dev = sbi->sb->s_bdev->bd_dev;
+	char slab_name[32];
+
+	sprintf(slab_name, "f2fs_page_array_entry-%u:%u", MAJOR(dev), MINOR(dev));
+
+	sbi->page_array_slab_size = sizeof(struct page *) <<
+					F2FS_OPTION(sbi).compress_log_size;
+
+	sbi->page_array_slab = f2fs_kmem_cache_create(slab_name,
+					sbi->page_array_slab_size);
+	if (!sbi->page_array_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi)
+{
+	kmem_cache_destroy(sbi->page_array_slab);
+}
+
+static int __init f2fs_init_cic_cache(void)
+{
+	cic_entry_slab = f2fs_kmem_cache_create("f2fs_cic_entry",
+					sizeof(struct compress_io_ctx));
+	if (!cic_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+static void f2fs_destroy_cic_cache(void)
+{
+	kmem_cache_destroy(cic_entry_slab);
+}
+
+static int __init f2fs_init_dic_cache(void)
+{
+	dic_entry_slab = f2fs_kmem_cache_create("f2fs_dic_entry",
+					sizeof(struct decompress_io_ctx));
+	if (!dic_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+static void f2fs_destroy_dic_cache(void)
+{
+	kmem_cache_destroy(dic_entry_slab);
+}
+
+int __init f2fs_init_compress_cache(void)
+{
+	int err;
+
+	err = f2fs_init_cic_cache();
+	if (err)
+		goto out;
+	err = f2fs_init_dic_cache();
+	if (err)
+		goto free_cic;
+	return 0;
+free_cic:
+	f2fs_destroy_cic_cache();
+out:
+	return -ENOMEM;
+}
+
+void f2fs_destroy_compress_cache(void)
+{
+	f2fs_destroy_dic_cache();
+	f2fs_destroy_cic_cache();
+}
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 1679f9c0..cc1efc7 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/blk-crypto.h>
 #include <linux/swap.h>
 #include <linux/prefetch.h>
 #include <linux/uio.h>
@@ -23,13 +24,30 @@
 #include "f2fs.h"
 #include "node.h"
 #include "segment.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
+#include <trace/events/android_fs.h>
 
 #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 struct bio_set f2fs_bioset;
+
+#define	F2FS_BIO_POOL_SIZE	NR_CURSEG_TYPE
+
+int __init f2fs_init_bioset(void)
+{
+	if (bioset_init(&f2fs_bioset, F2FS_BIO_POOL_SIZE,
+					0, BIOSET_NEED_BVECS))
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_bioset(void)
+{
+	bioset_exit(&f2fs_bioset);
+}
 
 static bool __is_cp_guaranteed(struct page *page)
 {
@@ -44,11 +62,15 @@
 	sbi = F2FS_I_SB(inode);
 
 	if (inode->i_ino == F2FS_META_INO(sbi) ||
-			inode->i_ino ==  F2FS_NODE_INO(sbi) ||
-			S_ISDIR(inode->i_mode) ||
-			(S_ISREG(inode->i_mode) &&
+			inode->i_ino == F2FS_NODE_INO(sbi) ||
+			S_ISDIR(inode->i_mode))
+		return true;
+
+	if (f2fs_is_compressed_page(page))
+		return false;
+	if ((S_ISREG(inode->i_mode) &&
 			(f2fs_is_atomic_file(inode) || IS_NOQUOTA(inode))) ||
-			is_cold_data(page))
+			page_private_gcing(page))
 		return true;
 	return false;
 }
@@ -72,28 +94,50 @@
 
 /* postprocessing steps for read bios */
 enum bio_post_read_step {
-	STEP_INITIAL = 0,
-	STEP_DECRYPT,
-	STEP_VERITY,
+#ifdef CONFIG_FS_ENCRYPTION
+	STEP_DECRYPT	= 1 << 0,
+#else
+	STEP_DECRYPT	= 0,	/* compile out the decryption-related code */
+#endif
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	STEP_DECOMPRESS	= 1 << 1,
+#else
+	STEP_DECOMPRESS	= 0,	/* compile out the decompression-related code */
+#endif
+#ifdef CONFIG_FS_VERITY
+	STEP_VERITY	= 1 << 2,
+#else
+	STEP_VERITY	= 0,	/* compile out the verity-related code */
+#endif
 };
 
 struct bio_post_read_ctx {
 	struct bio *bio;
+	struct f2fs_sb_info *sbi;
 	struct work_struct work;
-	unsigned int cur_step;
 	unsigned int enabled_steps;
 };
 
-static void __read_end_io(struct bio *bio)
+static void f2fs_finish_read_bio(struct bio *bio)
 {
-	struct page *page;
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
 
+	/*
+	 * Update and unlock the bio's pagecache pages, and put the
+	 * decompression context for any compressed pages.
+	 */
 	bio_for_each_segment_all(bv, bio, iter_all) {
-		page = bv->bv_page;
+		struct page *page = bv->bv_page;
 
-		/* PG_error was set if any post_read step failed */
+		if (f2fs_is_compressed_page(page)) {
+			if (bio->bi_status)
+				f2fs_end_read_compressed_page(page, true, 0);
+			f2fs_put_page_dic(page);
+			continue;
+		}
+
+		/* PG_error was set if decryption or verity failed. */
 		if (bio->bi_status || PageError(page)) {
 			ClearPageUptodate(page);
 			/* will re-read again later */
@@ -104,85 +148,145 @@
 		dec_page_count(F2FS_P_SB(page), __read_io_type(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)
+static void f2fs_verify_bio(struct work_struct *work)
 {
 	struct bio_post_read_ctx *ctx =
 		container_of(work, struct bio_post_read_ctx, work);
+	struct bio *bio = ctx->bio;
+	bool may_have_compressed_pages = (ctx->enabled_steps & STEP_DECOMPRESS);
 
-	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.
+	 * fsverity_verify_bio() may call readpages() again, and while verity
+	 * will be disabled for this, decryption and/or decompression may still
+	 * be needed, resulting in another bio_post_read_ctx being allocated.
+	 * So to prevent deadlocks we need to release the current ctx to the
+	 * mempool first.  This assumes that verity is the last post-read step.
 	 */
-	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;
+	mempool_free(ctx, bio_post_read_ctx_pool);
+	bio->bi_private = NULL;
+
+	/*
+	 * Verify the bio's pages with fs-verity.  Exclude compressed pages,
+	 * as those were handled separately by f2fs_end_read_compressed_page().
+	 */
+	if (may_have_compressed_pages) {
+		struct bio_vec *bv;
+		struct bvec_iter_all iter_all;
+
+		bio_for_each_segment_all(bv, bio, iter_all) {
+			struct page *page = bv->bv_page;
+
+			if (!f2fs_is_compressed_page(page) &&
+			    !PageError(page) && !fsverity_verify_page(page))
+				SetPageError(page);
 		}
-		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);
+	} else {
+		fsverity_verify_bio(bio);
+	}
+
+	f2fs_finish_read_bio(bio);
+}
+
+/*
+ * If the bio's data needs to be verified with fs-verity, then enqueue the
+ * verity work for the bio.  Otherwise finish the bio now.
+ *
+ * Note that to avoid deadlocks, the verity work can't be done on the
+ * decryption/decompression workqueue.  This is because verifying the data pages
+ * can involve reading verity metadata pages from the file, and these verity
+ * metadata pages may be encrypted and/or compressed.
+ */
+static void f2fs_verify_and_finish_bio(struct bio *bio)
+{
+	struct bio_post_read_ctx *ctx = bio->bi_private;
+
+	if (ctx && (ctx->enabled_steps & STEP_VERITY)) {
+		INIT_WORK(&ctx->work, f2fs_verify_bio);
+		fsverity_enqueue_verify_work(&ctx->work);
+	} else {
+		f2fs_finish_read_bio(bio);
 	}
 }
 
-static bool f2fs_bio_post_read_required(struct bio *bio)
+/*
+ * Handle STEP_DECOMPRESS by decompressing any compressed clusters whose last
+ * remaining page was read by @ctx->bio.
+ *
+ * Note that a bio may span clusters (even a mix of compressed and uncompressed
+ * clusters) or be for just part of a cluster.  STEP_DECOMPRESS just indicates
+ * that the bio includes at least one compressed page.  The actual decompression
+ * is done on a per-cluster basis, not a per-bio basis.
+ */
+static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx)
 {
-	return bio->bi_private && !bio->bi_status;
+	struct bio_vec *bv;
+	struct bvec_iter_all iter_all;
+	bool all_compressed = true;
+	block_t blkaddr = SECTOR_TO_BLOCK(ctx->bio->bi_iter.bi_sector);
+
+	bio_for_each_segment_all(bv, ctx->bio, iter_all) {
+		struct page *page = bv->bv_page;
+
+		/* PG_error was set if decryption failed. */
+		if (f2fs_is_compressed_page(page))
+			f2fs_end_read_compressed_page(page, PageError(page),
+						blkaddr);
+		else
+			all_compressed = false;
+
+		blkaddr++;
+	}
+
+	/*
+	 * Optimization: if all the bio's pages are compressed, then scheduling
+	 * the per-bio verity work is unnecessary, as verity will be fully
+	 * handled at the compression cluster level.
+	 */
+	if (all_compressed)
+		ctx->enabled_steps &= ~STEP_VERITY;
+}
+
+static void f2fs_post_read_work(struct work_struct *work)
+{
+	struct bio_post_read_ctx *ctx =
+		container_of(work, struct bio_post_read_ctx, work);
+
+	if (ctx->enabled_steps & STEP_DECRYPT)
+		fscrypt_decrypt_bio(ctx->bio);
+
+	if (ctx->enabled_steps & STEP_DECOMPRESS)
+		f2fs_handle_step_decompress(ctx);
+
+	f2fs_verify_and_finish_bio(ctx->bio);
 }
 
 static void f2fs_read_end_io(struct bio *bio)
 {
 	struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio));
+	struct bio_post_read_ctx *ctx = bio->bi_private;
 
 	if (time_to_inject(sbi, FAULT_READ_IO)) {
 		f2fs_show_injection_info(sbi, FAULT_READ_IO);
 		bio->bi_status = BLK_STS_IOERR;
 	}
 
-	if (f2fs_bio_post_read_required(bio)) {
-		struct bio_post_read_ctx *ctx = bio->bi_private;
-
-		ctx->cur_step = STEP_INITIAL;
-		bio_post_read_processing(ctx);
+	if (bio->bi_status) {
+		f2fs_finish_read_bio(bio);
 		return;
 	}
 
-	__read_end_io(bio);
+	if (ctx && (ctx->enabled_steps & (STEP_DECRYPT | STEP_DECOMPRESS))) {
+		INIT_WORK(&ctx->work, f2fs_post_read_work);
+		queue_work(ctx->sbi->post_read_wq, &ctx->work);
+	} else {
+		f2fs_verify_and_finish_bio(bio);
+	}
 }
 
 static void f2fs_write_end_io(struct bio *bio)
@@ -200,9 +304,8 @@
 		struct page *page = bvec->bv_page;
 		enum count_type type = WB_DATA_TYPE(page);
 
-		if (IS_DUMMY_WRITTEN_PAGE(page)) {
-			set_page_private(page, (unsigned long)NULL);
-			ClearPagePrivate(page);
+		if (page_private_dummy(page)) {
+			clear_page_private_dummy(page);
 			unlock_page(page);
 			mempool_free(page, sbi->write_io_dummy);
 
@@ -213,6 +316,13 @@
 
 		fscrypt_finalize_bounce_page(&page);
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_is_compressed_page(page)) {
+			f2fs_compress_write_end_io(bio, page);
+			continue;
+		}
+#endif
+
 		if (unlikely(bio->bi_status)) {
 			mapping_set_error(page->mapping, -EIO);
 			if (type == F2FS_WB_CP_DATA)
@@ -225,7 +335,7 @@
 		dec_page_count(sbi, type);
 		if (f2fs_in_warm_node_list(sbi, page))
 			f2fs_del_fsync_node_entry(sbi, page);
-		clear_cold_data(page);
+		clear_page_private_gcing(page);
 		end_page_writeback(page);
 	}
 	if (!get_pages(sbi, F2FS_WB_CP_DATA) &&
@@ -235,9 +345,6 @@
 	bio_put(bio);
 }
 
-/*
- * Return true, if pre_bio's bdev is same as its target device.
- */
 struct block_device *f2fs_target_device(struct f2fs_sb_info *sbi,
 				block_t blk_addr, struct bio *bio)
 {
@@ -274,6 +381,9 @@
 	return 0;
 }
 
+/*
+ * Return true, if pre_bio's bdev is same as its target device.
+ */
 static bool __same_bdev(struct f2fs_sb_info *sbi,
 				block_t blk_addr, struct bio *bio)
 {
@@ -281,15 +391,12 @@
 	return bio->bi_disk == b->bd_disk && bio->bi_partno == b->bd_partno;
 }
 
-/*
- * Low-level block read/write IO operations.
- */
 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);
+	bio = bio_alloc_bioset(GFP_NOIO, npages, &f2fs_bioset);
 
 	f2fs_target_device(sbi, fio->new_blkaddr, bio);
 	if (is_read_io(fio->op)) {
@@ -307,6 +414,37 @@
 	return bio;
 }
 
+static void f2fs_set_bio_crypt_ctx(struct bio *bio, const struct inode *inode,
+				  pgoff_t first_idx,
+				  const struct f2fs_io_info *fio,
+				  gfp_t gfp_mask)
+{
+	/*
+	 * The f2fs garbage collector sets ->encrypted_page when it wants to
+	 * read/write raw data without encryption.
+	 */
+	if (!fio || !fio->encrypted_page)
+		fscrypt_set_bio_crypt_ctx(bio, inode, first_idx, gfp_mask);
+	else if (fscrypt_inode_should_skip_dm_default_key(inode))
+		bio_set_skip_dm_default_key(bio);
+}
+
+static bool f2fs_crypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+				     pgoff_t next_idx,
+				     const struct f2fs_io_info *fio)
+{
+	/*
+	 * The f2fs garbage collector sets ->encrypted_page when it wants to
+	 * read/write raw data without encryption.
+	 */
+	if (fio && fio->encrypted_page)
+		return !bio_has_crypt_ctx(bio) &&
+			(bio_should_skip_dm_default_key(bio) ==
+			 fscrypt_inode_should_skip_dm_default_key(inode));
+
+	return fscrypt_mergeable_bio(bio, inode, next_idx);
+}
+
 static inline void __submit_bio(struct f2fs_sb_info *sbi,
 				struct bio *bio, enum page_type type)
 {
@@ -316,7 +454,7 @@
 		if (type != DATA && type != NODE)
 			goto submit_io;
 
-		if (test_opt(sbi, LFS) && current->plug)
+		if (f2fs_lfs_mode(sbi) && current->plug)
 			blk_finish_plug(current->plug);
 
 		if (!F2FS_IO_ALIGNED(sbi))
@@ -335,10 +473,11 @@
 					      GFP_NOIO | __GFP_NOFAIL);
 			f2fs_bug_on(sbi, !page);
 
-			zero_user_segment(page, 0, PAGE_SIZE);
-			SetPagePrivate(page);
-			set_page_private(page, (unsigned long)DUMMY_WRITTEN_PAGE);
 			lock_page(page);
+
+			zero_user_segment(page, 0, PAGE_SIZE);
+			set_page_private_dummy(page);
+
 			if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE)
 				f2fs_bug_on(sbi, 1);
 		}
@@ -357,6 +496,40 @@
 	submit_bio(bio);
 }
 
+void f2fs_submit_bio(struct f2fs_sb_info *sbi,
+				struct bio *bio, enum page_type type)
+{
+	__submit_bio(sbi, bio, type);
+}
+
+static void __attach_io_flag(struct f2fs_io_info *fio)
+{
+	struct f2fs_sb_info *sbi = fio->sbi;
+	unsigned int temp_mask = (1 << NR_TEMP_TYPE) - 1;
+	unsigned int io_flag, fua_flag, meta_flag;
+
+	if (fio->type == DATA)
+		io_flag = sbi->data_io_flag;
+	else if (fio->type == NODE)
+		io_flag = sbi->node_io_flag;
+	else
+		return;
+
+	fua_flag = io_flag & temp_mask;
+	meta_flag = (io_flag >> NR_TEMP_TYPE) & temp_mask;
+
+	/*
+	 * data/node io flag bits per temp:
+	 *      REQ_META     |      REQ_FUA      |
+	 *    5 |    4 |   3 |    2 |    1 |   0 |
+	 * Cold | Warm | Hot | Cold | Warm | Hot |
+	 */
+	if ((1 << fio->temp) & meta_flag)
+		fio->op_flags |= REQ_META;
+	if ((1 << fio->temp) & fua_flag)
+		fio->op_flags |= REQ_FUA;
+}
+
 static void __submit_merged_bio(struct f2fs_bio_info *io)
 {
 	struct f2fs_io_info *fio = &io->fio;
@@ -364,6 +537,7 @@
 	if (!io->bio)
 		return;
 
+	__attach_io_flag(fio);
 	bio_set_op_attrs(io->bio, fio->op, fio->op_flags);
 
 	if (is_read_io(fio->op))
@@ -379,7 +553,6 @@
 						struct page *page, nid_t ino)
 {
 	struct bio_vec *bvec;
-	struct page *target;
 	struct bvec_iter_all iter_all;
 
 	if (!bio)
@@ -389,10 +562,18 @@
 		return true;
 
 	bio_for_each_segment_all(bvec, bio, iter_all) {
+		struct page *target = bvec->bv_page;
 
-		target = bvec->bv_page;
-		if (fscrypt_is_bounce_page(target))
+		if (fscrypt_is_bounce_page(target)) {
 			target = fscrypt_pagecache_page(target);
+			if (IS_ERR(target))
+				continue;
+		}
+		if (f2fs_is_compressed_page(target)) {
+			target = f2fs_compress_control_page(target);
+			if (IS_ERR(target))
+				continue;
+		}
 
 		if (inode && inode == target->mapping->host)
 			return true;
@@ -485,11 +666,13 @@
 		return -EFSCORRUPTED;
 
 	trace_f2fs_submit_page_bio(page, fio);
-	f2fs_trace_ios(fio, 0);
 
 	/* Allocate a new bio */
 	bio = __bio_alloc(fio, 1);
 
+	f2fs_set_bio_crypt_ctx(bio, fio->page->mapping->host,
+			       fio->page->index, fio, GFP_NOIO);
+
 	if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
 		bio_put(bio);
 		return -EFAULT;
@@ -498,6 +681,7 @@
 	if (fio->io_wbc && !is_read_io(fio->op))
 		wbc_account_cgroup_owner(fio->io_wbc, page, PAGE_SIZE);
 
+	__attach_io_flag(fio);
 	bio_set_op_attrs(bio, fio->op, fio->op_flags);
 
 	inc_page_count(fio->sbi, is_read_io(fio->op) ?
@@ -510,6 +694,9 @@
 static bool page_is_mergeable(struct f2fs_sb_info *sbi, struct bio *bio,
 				block_t last_blkaddr, block_t cur_blkaddr)
 {
+	if (unlikely(sbi->max_io_bytes &&
+			bio->bi_iter.bi_size >= sbi->max_io_bytes))
+		return false;
 	if (last_blkaddr + 1 != cur_blkaddr)
 		return false;
 	return __same_bdev(sbi, cur_blkaddr, bio);
@@ -544,6 +731,134 @@
 	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_io_info *fio, struct bio **bio,
+							struct page *page)
+{
+	struct f2fs_sb_info *sbi = fio->sbi;
+	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;
+
+			f2fs_bug_on(sbi, !page_is_mergeable(sbi, *bio,
+							    *fio->last_block,
+							    fio->new_blkaddr));
+			if (f2fs_crypt_mergeable_bio(*bio,
+					fio->page->mapping->host,
+					fio->page->index, fio) &&
+			    bio_add_page(*bio, page, PAGE_SIZE, 0) ==
+					PAGE_SIZE) {
+				ret = 0;
+				break;
+			}
+
+			/* page can't be merged into bio; submit the bio */
+			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;
@@ -555,23 +870,22 @@
 		return -EFSCORRUPTED;
 
 	trace_f2fs_submit_page_bio(page, fio);
-	f2fs_trace_ios(fio, 0);
 
 	if (bio && !page_is_mergeable(fio->sbi, bio, *fio->last_block,
-						fio->new_blkaddr)) {
-		__submit_bio(fio->sbi, bio, fio->type);
-		bio = NULL;
-	}
+						fio->new_blkaddr))
+		f2fs_submit_merged_ipu_write(fio->sbi, &bio, NULL);
 alloc_new:
 	if (!bio) {
 		bio = __bio_alloc(fio, BIO_MAX_PAGES);
+		__attach_io_flag(fio);
+		f2fs_set_bio_crypt_ctx(bio, fio->page->mapping->host,
+				       fio->page->index, fio, GFP_NOIO);
 		bio_set_op_attrs(bio, fio->op, fio->op_flags);
-	}
 
-	if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
-		__submit_bio(fio->sbi, bio, fio->type);
-		bio = NULL;
-		goto alloc_new;
+		add_bio_entry(fio->sbi, bio, page, fio->temp);
+	} else {
+		if (add_ipu_page(fio, &bio, page))
+			goto alloc_new;
 	}
 
 	if (fio->io_wbc)
@@ -585,19 +899,6 @@
 	return 0;
 }
 
-static void f2fs_submit_ipu_bio(struct f2fs_sb_info *sbi, struct bio **bio,
-							struct page *page)
-{
-	if (!bio)
-		return;
-
-	if (!__has_merged_page(*bio, NULL, page, 0))
-		return;
-
-	__submit_bio(sbi, *bio, DATA);
-	*bio = NULL;
-}
-
 void f2fs_submit_page_write(struct f2fs_io_info *fio)
 {
 	struct f2fs_sb_info *sbi = fio->sbi;
@@ -623,15 +924,23 @@
 
 	verify_fio_blkaddr(fio);
 
-	bio_page = fio->encrypted_page ? fio->encrypted_page : fio->page;
+	if (fio->encrypted_page)
+		bio_page = fio->encrypted_page;
+	else if (fio->compressed_page)
+		bio_page = fio->compressed_page;
+	else
+		bio_page = fio->page;
 
 	/* set submitted = true as a return value */
 	fio->submitted = true;
 
 	inc_page_count(sbi, WB_DATA_TYPE(bio_page));
 
-	if (io->bio && !io_is_mergeable(sbi, io->bio, io, fio,
-			io->last_block_in_bio, fio->new_blkaddr))
+	if (io->bio &&
+	    (!io_is_mergeable(sbi, io->bio, io, fio, io->last_block_in_bio,
+			      fio->new_blkaddr) ||
+	     !f2fs_crypt_mergeable_bio(io->bio, fio->page->mapping->host,
+				       bio_page->index, fio)))
 		__submit_merged_bio(io);
 alloc_new:
 	if (io->bio == NULL) {
@@ -643,6 +952,8 @@
 			goto skip;
 		}
 		io->bio = __bio_alloc(fio, BIO_MAX_PAGES);
+		f2fs_set_bio_crypt_ctx(io->bio, fio->page->mapping->host,
+				       bio_page->index, fio, GFP_NOIO);
 		io->fio = *fio;
 	}
 
@@ -655,7 +966,6 @@
 		wbc_account_cgroup_owner(fio->io_wbc, bio_page, PAGE_SIZE);
 
 	io->last_block_in_bio = fio->new_blkaddr;
-	f2fs_trace_ios(fio, 0);
 
 	trace_f2fs_submit_page_write(fio->page, fio);
 skip:
@@ -668,41 +978,45 @@
 	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,
-				      pgoff_t first_idx)
+				      pgoff_t first_idx, bool for_write)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
 	struct bio_post_read_ctx *ctx;
 	unsigned int post_read_steps = 0;
 
-	bio = f2fs_bio_alloc(sbi, min_t(int, nr_pages, BIO_MAX_PAGES), false);
+	bio = bio_alloc_bioset(for_write ? GFP_NOIO : GFP_KERNEL,
+			       min_t(int, nr_pages, BIO_MAX_PAGES),
+			       &f2fs_bioset);
 	if (!bio)
 		return ERR_PTR(-ENOMEM);
+
+	f2fs_set_bio_crypt_ctx(bio, inode, first_idx, NULL, GFP_NOFS);
+
 	f2fs_target_device(sbi, blkaddr, bio);
 	bio->bi_end_io = f2fs_read_end_io;
 	bio_set_op_attrs(bio, REQ_OP_READ, op_flag);
 
-	if (f2fs_encrypted_file(inode))
-		post_read_steps |= 1 << STEP_DECRYPT;
+	if (fscrypt_inode_uses_fs_layer_crypto(inode))
+		post_read_steps |= STEP_DECRYPT;
 
 	if (f2fs_need_verity(inode, first_idx))
-		post_read_steps |= 1 << STEP_VERITY;
+		post_read_steps |= STEP_VERITY;
 
-	if (post_read_steps) {
+	/*
+	 * STEP_DECOMPRESS is handled specially, since a compressed file might
+	 * contain both compressed and uncompressed clusters.  We'll allocate a
+	 * bio_post_read_ctx if the file is compressed, but the caller is
+	 * responsible for enabling STEP_DECOMPRESS if it's actually needed.
+	 */
+
+	if (post_read_steps || f2fs_compressed_file(inode)) {
+		/* Due to the mempool, this never fails. */
 		ctx = mempool_alloc(bio_post_read_ctx_pool, GFP_NOFS);
-		if (!ctx) {
-			bio_put(bio);
-			return ERR_PTR(-ENOMEM);
-		}
 		ctx->bio = bio;
+		ctx->sbi = sbi;
 		ctx->enabled_steps = post_read_steps;
 		bio->bi_private = ctx;
 	}
@@ -712,12 +1026,13 @@
 
 /* This can handle encryption stuffs */
 static int f2fs_submit_page_read(struct inode *inode, struct page *page,
-							block_t blkaddr)
+				 block_t blkaddr, int op_flags, bool for_write)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct bio *bio;
 
-	bio = f2fs_grab_read_bio(inode, blkaddr, 1, 0, page->index);
+	bio = f2fs_grab_read_bio(inode, blkaddr, 1, op_flags,
+					page->index, for_write);
 	if (IS_ERR(bio))
 		return PTR_ERR(bio);
 
@@ -730,6 +1045,7 @@
 	}
 	ClearPageError(page);
 	inc_page_count(sbi, F2FS_RD_DATA);
+	f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
 	__submit_bio(sbi, bio, DATA);
 	return 0;
 }
@@ -789,8 +1105,8 @@
 	f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true);
 
 	for (; count > 0; dn->ofs_in_node++) {
-		block_t blkaddr = datablock_addr(dn->inode,
-					dn->node_page, dn->ofs_in_node);
+		block_t blkaddr = f2fs_data_blkaddr(dn);
+
 		if (blkaddr == NULL_ADDR) {
 			dn->data_blkaddr = NEW_ADDR;
 			__set_data_blkaddr(dn);
@@ -832,7 +1148,7 @@
 
 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
 {
-	struct extent_info ei  = {0,0,0};
+	struct extent_info ei = {0, 0, 0};
 	struct inode *inode = dn->inode;
 
 	if (f2fs_lookup_extent_cache(inode, index, &ei)) {
@@ -904,7 +1220,8 @@
 		return page;
 	}
 
-	err = f2fs_submit_page_read(inode, page, dn.data_blkaddr);
+	err = f2fs_submit_page_read(inode, page, dn.data_blkaddr,
+						op_flags, for_write);
 	if (err)
 		goto put_err;
 	return page;
@@ -1042,8 +1359,7 @@
 	if (err)
 		return err;
 
-	dn->data_blkaddr = datablock_addr(dn->inode,
-				dn->node_page, dn->ofs_in_node);
+	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 	if (dn->data_blkaddr != NULL_ADDR)
 		goto alloc;
 
@@ -1054,10 +1370,12 @@
 	set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
 	old_blkaddr = dn->data_blkaddr;
 	f2fs_allocate_data_block(sbi, NULL, old_blkaddr, &dn->data_blkaddr,
-					&sum, seg_type, NULL, false);
-	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
+				&sum, seg_type, NULL);
+	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
+		f2fs_invalidate_compress_page(sbi, old_blkaddr);
+	}
 	f2fs_update_data_blkaddr(dn, dn->data_blkaddr);
 
 	/*
@@ -1114,7 +1432,7 @@
 	return err;
 }
 
-void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
+void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
 {
 	if (flag == F2FS_GET_BLOCK_PRE_AIO) {
 		if (lock)
@@ -1130,13 +1448,9 @@
 }
 
 /*
- * f2fs_map_blocks() now supported readahead/bmap/rw direct_IO with
- * f2fs_map_blocks structure.
- * If original data blocks are allocated, then give them to blockdev.
- * Otherwise,
- *     a. preallocate requested block addresses
- *     b. do not use extent cache for better performance
- *     c. give the block addresses to blockdev
+ * f2fs_map_blocks() tries to find or build mapping relationship which
+ * maps continuous logical blocks to physical blocks, and return such
+ * info via f2fs_map_blocks structure.
  */
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 						int create, int flag)
@@ -1164,7 +1478,7 @@
 	end = pgofs + maxblocks;
 
 	if (!create && f2fs_lookup_extent_cache(inode, pgofs, &ei)) {
-		if (test_opt(sbi, LFS) && flag == F2FS_GET_BLOCK_DIO &&
+		if (f2fs_lfs_mode(sbi) && flag == F2FS_GET_BLOCK_DIO &&
 							map->m_may_create)
 			goto next_dnode;
 
@@ -1183,7 +1497,7 @@
 
 next_dnode:
 	if (map->m_may_create)
-		__do_map_lock(sbi, flag, true);
+		f2fs_do_map_lock(sbi, flag, true);
 
 	/* When reading holes, we need its node page */
 	set_new_dnode(&dn, inode, NULL, NULL, 0);
@@ -1223,7 +1537,7 @@
 	end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
 
 next_block:
-	blkaddr = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
+	blkaddr = f2fs_data_blkaddr(&dn);
 
 	if (__is_valid_data_blkaddr(blkaddr) &&
 		!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC_ENHANCE)) {
@@ -1233,7 +1547,7 @@
 
 	if (__is_valid_data_blkaddr(blkaddr)) {
 		/* use out-place-update for driect IO under LFS mode */
-		if (test_opt(sbi, LFS) && flag == F2FS_GET_BLOCK_DIO &&
+		if (f2fs_lfs_mode(sbi) && flag == F2FS_GET_BLOCK_DIO &&
 							map->m_may_create) {
 			err = __allocate_data_block(&dn, map->m_seg_type);
 			if (err)
@@ -1346,7 +1660,7 @@
 	f2fs_put_dnode(&dn);
 
 	if (map->m_may_create) {
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 		f2fs_balance_fs(sbi, dn.node_changed);
 	}
 	goto next_dnode;
@@ -1372,7 +1686,7 @@
 	f2fs_put_dnode(&dn);
 unlock_out:
 	if (map->m_may_create) {
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 		f2fs_balance_fs(sbi, dn.node_changed);
 	}
 out:
@@ -1406,6 +1720,16 @@
 	return true;
 }
 
+static inline u64 bytes_to_blks(struct inode *inode, u64 bytes)
+{
+	return (bytes >> inode->i_blkbits);
+}
+
+static inline u64 blks_to_bytes(struct inode *inode, u64 blks)
+{
+	return (blks << inode->i_blkbits);
+}
+
 static int __get_data_block(struct inode *inode, sector_t iblock,
 			struct buffer_head *bh, int create, int flag,
 			pgoff_t *next_pgofs, int seg_type, bool may_write)
@@ -1414,7 +1738,7 @@
 	int err;
 
 	map.m_lblk = iblock;
-	map.m_len = bh->b_size >> inode->i_blkbits;
+	map.m_len = bytes_to_blks(inode, bh->b_size);
 	map.m_next_pgofs = next_pgofs;
 	map.m_next_extent = NULL;
 	map.m_seg_type = seg_type;
@@ -1424,27 +1748,18 @@
 	if (!err) {
 		map_bh(bh, inode->i_sb, map.m_pblk);
 		bh->b_state = (bh->b_state & ~F2FS_MAP_FLAGS) | map.m_flags;
-		bh->b_size = (u64)map.m_len << inode->i_blkbits;
+		bh->b_size = blks_to_bytes(inode, map.m_len);
 	}
 	return err;
 }
 
-static int get_data_block(struct inode *inode, sector_t iblock,
-			struct buffer_head *bh_result, int create, int flag,
-			pgoff_t *next_pgofs)
-{
-	return __get_data_block(inode, iblock, bh_result, create,
-							flag, next_pgofs,
-							NO_CHECK_TYPE, create);
-}
-
 static int get_data_block_dio_write(struct inode *inode, sector_t iblock,
 			struct buffer_head *bh_result, int create)
 {
 	return __get_data_block(inode, iblock, bh_result, create,
 				F2FS_GET_BLOCK_DIO, NULL,
 				f2fs_rw_hint_to_seg_type(inode->i_write_hint),
-				IS_SWAPFILE(inode) ? false : true);
+				true);
 }
 
 static int get_data_block_dio(struct inode *inode, sector_t iblock,
@@ -1456,28 +1771,6 @@
 				false);
 }
 
-static int get_data_block_bmap(struct inode *inode, sector_t iblock,
-			struct buffer_head *bh_result, int create)
-{
-	/* Block number less than F2FS MAX BLOCKS */
-	if (unlikely(iblock >= F2FS_I_SB(inode)->max_file_blocks))
-		return -EFBIG;
-
-	return __get_data_block(inode, iblock, bh_result, create,
-						F2FS_GET_BLOCK_BMAP, NULL,
-						NO_CHECK_TYPE, create);
-}
-
-static inline sector_t logical_to_blk(struct inode *inode, loff_t offset)
-{
-	return (offset >> inode->i_blkbits);
-}
-
-static inline loff_t blk_to_logical(struct inode *inode, sector_t blk)
-{
-	return (blk << inode->i_blkbits);
-}
-
 static int f2fs_xattr_fiemap(struct inode *inode,
 				struct fiemap_extent_info *fieinfo)
 {
@@ -1503,7 +1796,7 @@
 			return err;
 		}
 
-		phys = (__u64)blk_to_logical(inode, ni.blk_addr);
+		phys = blks_to_bytes(inode, ni.blk_addr);
 		offset = offsetof(struct f2fs_inode, i_addr) +
 					sizeof(__le32) * (DEF_ADDRS_PER_INODE -
 					get_inline_xattr_addrs(inode));
@@ -1519,6 +1812,7 @@
 			flags |= FIEMAP_EXTENT_LAST;
 
 		err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
+		trace_f2fs_fiemap(inode, 0, phys, len, flags, err);
 		if (err || err == 1)
 			return err;
 	}
@@ -1534,7 +1828,7 @@
 			return err;
 		}
 
-		phys = (__u64)blk_to_logical(inode, ni.blk_addr);
+		phys = blks_to_bytes(inode, ni.blk_addr);
 		len = inode->i_sb->s_blocksize;
 
 		f2fs_put_page(page, 1);
@@ -1542,21 +1836,45 @@
 		flags = FIEMAP_EXTENT_LAST;
 	}
 
-	if (phys)
+	if (phys) {
 		err = fiemap_fill_next_extent(fieinfo, 0, phys, len, flags);
+		trace_f2fs_fiemap(inode, 0, phys, len, flags, err);
+	}
 
 	return (err < 0 ? err : 0);
 }
 
+static loff_t max_inode_blocks(struct inode *inode)
+{
+	loff_t result = ADDRS_PER_INODE(inode);
+	loff_t leaf_count = ADDRS_PER_BLOCK(inode);
+
+	/* two direct node blocks */
+	result += (leaf_count * 2);
+
+	/* two indirect node blocks */
+	leaf_count *= NIDS_PER_BLOCK;
+	result += (leaf_count * 2);
+
+	/* one double indirect node block */
+	leaf_count *= NIDS_PER_BLOCK;
+	result += leaf_count;
+
+	return result;
+}
+
 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 		u64 start, u64 len)
 {
-	struct buffer_head map_bh;
+	struct f2fs_map_blocks map;
 	sector_t start_blk, last_blk;
 	pgoff_t next_pgofs;
 	u64 logical = 0, phys = 0, size = 0;
 	u32 flags = 0;
 	int ret = 0;
+	bool compr_cluster = false;
+	unsigned int cluster_size = F2FS_I(inode)->i_cluster_size;
+	loff_t maxbytes;
 
 	if (fieinfo->fi_flags & FIEMAP_FLAG_CACHE) {
 		ret = f2fs_precache_extents(inode);
@@ -1564,12 +1882,22 @@
 			return ret;
 	}
 
-	ret = fiemap_check_flags(fieinfo, FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR);
+	ret = fiemap_prep(inode, fieinfo, start, &len,
+			FIEMAP_FLAG_SYNC | FIEMAP_FLAG_XATTR);
 	if (ret)
 		return ret;
 
 	inode_lock(inode);
 
+	maxbytes = max_file_blocks(inode) << F2FS_BLKSIZE_BITS;
+	if (start > maxbytes) {
+		ret = -EFBIG;
+		goto out;
+	}
+
+	if (len > maxbytes || (maxbytes - len) < start)
+		len = maxbytes - start;
+
 	if (fieinfo->fi_flags & FIEMAP_FLAG_XATTR) {
 		ret = f2fs_xattr_fiemap(inode, fieinfo);
 		goto out;
@@ -1581,51 +1909,85 @@
 			goto out;
 	}
 
-	if (logical_to_blk(inode, len) == 0)
-		len = blk_to_logical(inode, 1);
+	if (bytes_to_blks(inode, len) == 0)
+		len = blks_to_bytes(inode, 1);
 
-	start_blk = logical_to_blk(inode, start);
-	last_blk = logical_to_blk(inode, start + len - 1);
+	start_blk = bytes_to_blks(inode, start);
+	last_blk = bytes_to_blks(inode, start + len - 1);
 
 next:
-	memset(&map_bh, 0, sizeof(struct buffer_head));
-	map_bh.b_size = len;
+	memset(&map, 0, sizeof(map));
+	map.m_lblk = start_blk;
+	map.m_len = bytes_to_blks(inode, len);
+	map.m_next_pgofs = &next_pgofs;
+	map.m_seg_type = NO_CHECK_TYPE;
 
-	ret = get_data_block(inode, start_blk, &map_bh, 0,
-					F2FS_GET_BLOCK_FIEMAP, &next_pgofs);
+	if (compr_cluster)
+		map.m_len = cluster_size - 1;
+
+	ret = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_FIEMAP);
 	if (ret)
 		goto out;
 
 	/* HOLE */
-	if (!buffer_mapped(&map_bh)) {
+	if (!(map.m_flags & F2FS_MAP_FLAGS)) {
 		start_blk = next_pgofs;
 
-		if (blk_to_logical(inode, start_blk) < blk_to_logical(inode,
-					F2FS_I_SB(inode)->max_file_blocks))
+		if (blks_to_bytes(inode, start_blk) < blks_to_bytes(inode,
+						max_inode_blocks(inode)))
 			goto prep_next;
 
 		flags |= FIEMAP_EXTENT_LAST;
 	}
 
 	if (size) {
+		flags |= FIEMAP_EXTENT_MERGED;
 		if (IS_ENCRYPTED(inode))
 			flags |= FIEMAP_EXTENT_DATA_ENCRYPTED;
 
 		ret = fiemap_fill_next_extent(fieinfo, logical,
 				phys, size, flags);
+		trace_f2fs_fiemap(inode, logical, phys, size, flags, ret);
+		if (ret)
+			goto out;
+		size = 0;
 	}
 
-	if (start_blk > last_blk || ret)
+	if (start_blk > last_blk)
 		goto out;
 
-	logical = blk_to_logical(inode, start_blk);
-	phys = blk_to_logical(inode, map_bh.b_blocknr);
-	size = map_bh.b_size;
+	if (compr_cluster) {
+		compr_cluster = false;
+
+
+		logical = blks_to_bytes(inode, start_blk - 1);
+		phys = blks_to_bytes(inode, map.m_pblk);
+		size = blks_to_bytes(inode, cluster_size);
+
+		flags |= FIEMAP_EXTENT_ENCODED;
+
+		start_blk += cluster_size - 1;
+
+		if (start_blk > last_blk)
+			goto out;
+
+		goto prep_next;
+	}
+
+	if (map.m_pblk == COMPRESS_ADDR) {
+		compr_cluster = true;
+		start_blk++;
+		goto prep_next;
+	}
+
+	logical = blks_to_bytes(inode, start_blk);
+	phys = blks_to_bytes(inode, map.m_pblk);
+	size = blks_to_bytes(inode, map.m_len);
 	flags = 0;
-	if (buffer_unwritten(&map_bh))
+	if (map.m_flags & F2FS_MAP_UNWRITTEN)
 		flags = FIEMAP_EXTENT_UNWRITTEN;
 
-	start_blk += logical_to_blk(inode, size);
+	start_blk += bytes_to_blks(inode, size);
 
 prep_next:
 	cond_resched();
@@ -1658,8 +2020,7 @@
 					bool is_readahead)
 {
 	struct bio *bio = *bio_ret;
-	const unsigned blkbits = inode->i_blkbits;
-	const unsigned blocksize = 1 << blkbits;
+	const unsigned blocksize = blks_to_bytes(inode, 1);
 	sector_t block_in_file;
 	sector_t last_block;
 	sector_t last_block_in_file;
@@ -1668,8 +2029,8 @@
 
 	block_in_file = (sector_t)page_index(page);
 	last_block = block_in_file + nr_pages;
-	last_block_in_file = (f2fs_readpage_limit(inode) + blocksize - 1) >>
-							blkbits;
+	last_block_in_file = bytes_to_blks(inode,
+			f2fs_readpage_limit(inode) + blocksize - 1);
 	if (last_block > last_block_in_file)
 		last_block = last_block_in_file;
 
@@ -1728,15 +2089,17 @@
 	 * This page will go to BIO.  Do we need to send this
 	 * BIO off first?
 	 */
-	if (bio && !page_is_mergeable(F2FS_I_SB(inode), bio,
-				*last_block_in_bio, block_nr)) {
+	if (bio && (!page_is_mergeable(F2FS_I_SB(inode), bio,
+				       *last_block_in_bio, block_nr) ||
+		    !f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
 submit_and_realloc:
 		__submit_bio(F2FS_I_SB(inode), bio, DATA);
 		bio = NULL;
 	}
 	if (bio == NULL) {
 		bio = f2fs_grab_read_bio(inode, block_nr, nr_pages,
-				is_readahead ? REQ_RAHEAD : 0, page->index);
+				is_readahead ? REQ_RAHEAD : 0, page->index,
+				false);
 		if (IS_ERR(bio)) {
 			ret = PTR_ERR(bio);
 			bio = NULL;
@@ -1754,6 +2117,7 @@
 		goto submit_and_realloc;
 
 	inc_page_count(F2FS_I_SB(inode), F2FS_RD_DATA);
+	f2fs_update_iostat(F2FS_I_SB(inode), FS_DATA_READ_IO, F2FS_BLKSIZE);
 	ClearPageError(page);
 	*last_block_in_bio = block_nr;
 	goto out;
@@ -1768,6 +2132,155 @@
 	return ret;
 }
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
+				unsigned nr_pages, sector_t *last_block_in_bio,
+				bool is_readahead, bool for_write)
+{
+	struct dnode_of_data dn;
+	struct inode *inode = cc->inode;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct bio *bio = *bio_ret;
+	unsigned int start_idx = cc->cluster_idx << cc->log_cluster_size;
+	sector_t last_block_in_file;
+	const unsigned blocksize = blks_to_bytes(inode, 1);
+	struct decompress_io_ctx *dic = NULL;
+	int i;
+	int ret = 0;
+
+	f2fs_bug_on(sbi, f2fs_cluster_is_empty(cc));
+
+	last_block_in_file = bytes_to_blks(inode,
+			f2fs_readpage_limit(inode) + blocksize - 1);
+
+	/* get rid of pages beyond EOF */
+	for (i = 0; i < cc->cluster_size; i++) {
+		struct page *page = cc->rpages[i];
+
+		if (!page)
+			continue;
+		if ((sector_t)page->index >= last_block_in_file) {
+			zero_user_segment(page, 0, PAGE_SIZE);
+			if (!PageUptodate(page))
+				SetPageUptodate(page);
+		} else if (!PageUptodate(page)) {
+			continue;
+		}
+		unlock_page(page);
+		cc->rpages[i] = NULL;
+		cc->nr_rpages--;
+	}
+
+	/* we are done since all pages are beyond EOF */
+	if (f2fs_cluster_is_empty(cc))
+		goto out;
+
+	set_new_dnode(&dn, inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (ret)
+		goto out;
+
+	f2fs_bug_on(sbi, dn.data_blkaddr != COMPRESS_ADDR);
+
+	for (i = 1; i < cc->cluster_size; i++) {
+		block_t blkaddr;
+
+		blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			break;
+
+		if (!f2fs_is_valid_blkaddr(sbi, blkaddr, DATA_GENERIC)) {
+			ret = -EFAULT;
+			goto out_put_dnode;
+		}
+		cc->nr_cpages++;
+	}
+
+	/* nothing to decompress */
+	if (cc->nr_cpages == 0) {
+		ret = 0;
+		goto out_put_dnode;
+	}
+
+	dic = f2fs_alloc_dic(cc);
+	if (IS_ERR(dic)) {
+		ret = PTR_ERR(dic);
+		goto out_put_dnode;
+	}
+
+	for (i = 0; i < cc->nr_cpages; i++) {
+		struct page *page = dic->cpages[i];
+		block_t blkaddr;
+		struct bio_post_read_ctx *ctx;
+
+		blkaddr = data_blkaddr(dn.inode, dn.node_page,
+						dn.ofs_in_node + i + 1);
+
+		f2fs_wait_on_block_writeback(inode, blkaddr);
+
+		if (f2fs_load_compressed_page(sbi, page, blkaddr)) {
+			if (atomic_dec_and_test(&dic->remaining_pages))
+				f2fs_decompress_cluster(dic);
+			continue;
+		}
+
+		if (bio && (!page_is_mergeable(sbi, bio,
+					*last_block_in_bio, blkaddr) ||
+		    !f2fs_crypt_mergeable_bio(bio, inode, page->index, NULL))) {
+submit_and_realloc:
+			__submit_bio(sbi, bio, DATA);
+			bio = NULL;
+		}
+
+		if (!bio) {
+			bio = f2fs_grab_read_bio(inode, blkaddr, nr_pages,
+					is_readahead ? REQ_RAHEAD : 0,
+					page->index, for_write);
+			if (IS_ERR(bio)) {
+				ret = PTR_ERR(bio);
+				f2fs_decompress_end_io(dic, ret);
+				f2fs_put_dnode(&dn);
+				*bio_ret = NULL;
+				return ret;
+			}
+		}
+
+		if (bio_add_page(bio, page, blocksize, 0) < blocksize)
+			goto submit_and_realloc;
+
+		ctx = bio->bi_private;
+		ctx->enabled_steps |= STEP_DECOMPRESS;
+		refcount_inc(&dic->refcnt);
+
+		inc_page_count(sbi, F2FS_RD_DATA);
+		f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+		f2fs_update_iostat(sbi, FS_CDATA_READ_IO, F2FS_BLKSIZE);
+		ClearPageError(page);
+		*last_block_in_bio = blkaddr;
+	}
+
+	f2fs_put_dnode(&dn);
+
+	*bio_ret = bio;
+	return 0;
+
+out_put_dnode:
+	f2fs_put_dnode(&dn);
+out:
+	for (i = 0; i < cc->cluster_size; i++) {
+		if (cc->rpages[i]) {
+			ClearPageUptodate(cc->rpages[i]);
+			ClearPageError(cc->rpages[i]);
+			unlock_page(cc->rpages[i]);
+		}
+	}
+	*bio_ret = bio;
+	return ret;
+}
+#endif
+
 /*
  * This function was originally taken from fs/mpage.c, and customized for f2fs.
  * Major change was from block_size == page_size in f2fs by default.
@@ -1777,7 +2290,7 @@
  * use ->readpage() or do the necessary surgery to decouple ->readpages()
  * from read-ahead.
  */
-static int f2fs_mpage_readpages(struct address_space *mapping,
+int f2fs_mpage_readpages(struct address_space *mapping,
 			struct list_head *pages, struct page *page,
 			unsigned nr_pages, bool is_readahead)
 {
@@ -1785,7 +2298,25 @@
 	sector_t last_block_in_bio = 0;
 	struct inode *inode = mapping->host;
 	struct f2fs_map_blocks map;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = NULL_CLUSTER,
+		.rpages = NULL,
+		.cpages = NULL,
+		.nr_rpages = 0,
+		.nr_cpages = 0,
+	};
+#endif
+	unsigned max_nr_pages = nr_pages;
 	int ret = 0;
+	bool drop_ra = false;
+
+	/* this is real from f2fs_merkle_tree_readahead() in old kernel only. */
+	if (!nr_pages)
+		return 0;
 
 	map.m_pblk = 0;
 	map.m_lblk = 0;
@@ -1796,21 +2327,65 @@
 	map.m_seg_type = NO_CHECK_TYPE;
 	map.m_may_create = false;
 
+	/*
+	 * Two readahead threads for same address range can cause race condition
+	 * which fragments sequential read IOs. So let's avoid each other.
+	 */
+	if (pages && is_readahead) {
+		page = list_last_entry(pages, struct page, lru);
+		if (READ_ONCE(F2FS_I(inode)->ra_offset) == page_index(page))
+			drop_ra = true;
+		else
+			WRITE_ONCE(F2FS_I(inode)->ra_offset, page_index(page));
+	}
+
 	for (; nr_pages; nr_pages--) {
 		if (pages) {
 			page = list_last_entry(pages, struct page, lru);
 
 			prefetchw(&page->flags);
 			list_del(&page->lru);
-			if (add_to_page_cache_lru(page, mapping,
+			if (drop_ra || add_to_page_cache_lru(page, mapping,
 						  page_index(page),
 						  readahead_gfp_mask(mapping)))
 				goto next_page;
 		}
 
-		ret = f2fs_read_single_page(inode, page, nr_pages, &map, &bio,
-					&last_block_in_bio, is_readahead);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_compressed_file(inode)) {
+			/* there are remained comressed pages, submit them */
+			if (!f2fs_cluster_can_merge_page(&cc, page->index)) {
+				ret = f2fs_read_multi_pages(&cc, &bio,
+							max_nr_pages,
+							&last_block_in_bio,
+							is_readahead, false);
+				f2fs_destroy_compress_ctx(&cc, false);
+				if (ret)
+					goto set_error_page;
+			}
+			ret = f2fs_is_compressed_cluster(inode, page->index);
+			if (ret < 0)
+				goto set_error_page;
+			else if (!ret)
+				goto read_single_page;
+
+			ret = f2fs_init_compress_ctx(&cc);
+			if (ret)
+				goto set_error_page;
+
+			f2fs_compress_ctx_add_page(&cc, page);
+
+			goto next_page;
+		}
+read_single_page:
+#endif
+
+		ret = f2fs_read_single_page(inode, page, max_nr_pages, &map,
+					&bio, &last_block_in_bio, is_readahead);
 		if (ret) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+set_error_page:
+#endif
 			SetPageError(page);
 			zero_user_segment(page, 0, PAGE_SIZE);
 			unlock_page(page);
@@ -1818,10 +2393,26 @@
 next_page:
 		if (pages)
 			put_page(page);
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		if (f2fs_compressed_file(inode)) {
+			/* last page */
+			if (nr_pages == 1 && !f2fs_cluster_is_empty(&cc)) {
+				ret = f2fs_read_multi_pages(&cc, &bio,
+							max_nr_pages,
+							&last_block_in_bio,
+							is_readahead, false);
+				f2fs_destroy_compress_ctx(&cc, false);
+			}
+		}
+#endif
 	}
 	BUG_ON(pages && !list_empty(pages));
 	if (bio)
 		__submit_bio(F2FS_I_SB(inode), bio, DATA);
+
+	if (pages && is_readahead && !drop_ra)
+		WRITE_ONCE(F2FS_I(inode)->ra_offset, -1);
 	return pages ? 0 : ret;
 }
 
@@ -1832,6 +2423,11 @@
 
 	trace_f2fs_readpage(page, DATA);
 
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		unlock_page(page);
+		return -EOPNOTSUPP;
+	}
+
 	/* If the file has inline data, try to read it directly */
 	if (f2fs_has_inline_data(inode))
 		ret = f2fs_read_inline_data(inode, page);
@@ -1850,6 +2446,9 @@
 
 	trace_f2fs_readpages(inode, page, nr_pages);
 
+	if (!f2fs_is_compress_backend_ready(inode))
+		return 0;
+
 	/* If the file has inline data, skip readpages */
 	if (f2fs_has_inline_data(inode))
 		return 0;
@@ -1857,27 +2456,31 @@
 	return f2fs_mpage_readpages(mapping, pages, NULL, nr_pages, true);
 }
 
-static int encrypt_one_page(struct f2fs_io_info *fio)
+int f2fs_encrypt_one_page(struct f2fs_io_info *fio)
 {
 	struct inode *inode = fio->page->mapping->host;
-	struct page *mpage;
+	struct page *mpage, *page;
 	gfp_t gfp_flags = GFP_NOFS;
 
 	if (!f2fs_encrypted_file(inode))
 		return 0;
 
+	page = fio->compressed_page ? fio->compressed_page : fio->page;
+
 	/* wait for GCed page writeback via META_MAPPING */
 	f2fs_wait_on_block_writeback(inode, fio->old_blkaddr);
 
+	if (fscrypt_inode_uses_inline_crypto(inode))
+		return 0;
+
 retry_encrypt:
-	fio->encrypted_page = fscrypt_encrypt_pagecache_blocks(fio->page,
-							       PAGE_SIZE, 0,
-							       gfp_flags);
+	fio->encrypted_page = fscrypt_encrypt_pagecache_blocks(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) {
 			f2fs_flush_merged_writes(fio->sbi);
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			gfp_flags |= __GFP_NOFAIL;
 			goto retry_encrypt;
 		}
@@ -1934,6 +2537,10 @@
 
 bool f2fs_should_update_inplace(struct inode *inode, struct f2fs_io_info *fio)
 {
+	/* swap file is migrating in aligned write mode */
+	if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
+		return false;
+
 	if (f2fs_is_pinned_file(inode))
 		return true;
 
@@ -1948,7 +2555,7 @@
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 
-	if (test_opt(sbi, LFS))
+	if (f2fs_lfs_mode(sbi))
 		return true;
 	if (S_ISDIR(inode->i_mode))
 		return true;
@@ -1956,10 +2563,17 @@
 		return true;
 	if (f2fs_is_atomic_file(inode))
 		return true;
+	if (is_sbi_flag_set(sbi, SBI_NEED_FSCK))
+		return true;
+
+	/* swap file is migrating in aligned write mode */
+	if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
+		return true;
+
 	if (fio) {
-		if (is_cold_data(fio->page))
+		if (page_private_gcing(fio->page))
 			return true;
-		if (IS_ATOMIC_WRITTEN_PAGE(fio->page))
+		if (page_private_dummy(fio->page))
 			return true;
 		if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED) &&
 			f2fs_is_checkpointed_data(sbi, fio->old_blkaddr)))
@@ -2015,7 +2629,7 @@
 	/* This page is already truncated */
 	if (fio->old_blkaddr == NULL_ADDR) {
 		ClearPageUptodate(page);
-		clear_cold_data(page);
+		clear_page_private_gcing(page);
 		goto out_writepage;
 	}
 got_it:
@@ -2032,7 +2646,7 @@
 	if (ipu_force ||
 		(__is_valid_data_blkaddr(fio->old_blkaddr) &&
 					need_inplace_update(fio))) {
-		err = encrypt_one_page(fio);
+		err = f2fs_encrypt_one_page(fio);
 		if (err)
 			goto out_writepage;
 
@@ -2043,7 +2657,7 @@
 			f2fs_unlock_op(fio->sbi);
 		err = f2fs_inplace_write_data(fio);
 		if (err) {
-			if (f2fs_encrypted_file(inode))
+			if (fscrypt_inode_uses_fs_layer_crypto(inode))
 				fscrypt_finalize_bounce_page(&fio->encrypted_page);
 			if (PageWriteback(page))
 				end_page_writeback(page);
@@ -2068,13 +2682,16 @@
 
 	fio->version = ni.version;
 
-	err = encrypt_one_page(fio);
+	err = f2fs_encrypt_one_page(fio);
 	if (err)
 		goto out_writepage;
 
 	set_page_writeback(page);
 	ClearPageError(page);
 
+	if (fio->compr_blocks && fio->old_blkaddr == COMPRESS_ADDR)
+		f2fs_i_compr_blocks_update(inode, fio->compr_blocks - 1, false);
+
 	/* LFS mode write path */
 	f2fs_outplace_write_data(&dn, fio);
 	trace_f2fs_do_write_data_page(page, OPU);
@@ -2089,16 +2706,18 @@
 	return err;
 }
 
-static int __write_data_page(struct page *page, bool *submitted,
+int f2fs_write_single_data_page(struct page *page, int *submitted,
 				struct bio **bio,
 				sector_t *last_block,
 				struct writeback_control *wbc,
-				enum iostat_type io_type)
+				enum iostat_type io_type,
+				int compr_blocks,
+				bool allow_balance)
 {
 	struct inode *inode = page->mapping->host;
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	loff_t i_size = i_size_read(inode);
-	const pgoff_t end_index = ((unsigned long long) i_size)
+	const pgoff_t end_index = ((unsigned long long)i_size)
 							>> PAGE_SHIFT;
 	loff_t psize = (loff_t)(page->index + 1) << PAGE_SHIFT;
 	unsigned offset = 0;
@@ -2114,6 +2733,7 @@
 		.page = page,
 		.encrypted_page = NULL,
 		.submitted = false,
+		.compr_blocks = compr_blocks,
 		.need_lock = LOCK_RETRY,
 		.io_type = io_type,
 		.io_wbc = wbc,
@@ -2138,7 +2758,9 @@
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
 
-	if (page->index < end_index || f2fs_verity_in_progress(inode))
+	if (page->index < end_index ||
+			f2fs_verity_in_progress(inode) ||
+			compr_blocks)
 		goto write;
 
 	/*
@@ -2159,10 +2781,22 @@
 			f2fs_available_free_memory(sbi, BASE_CHECK))))
 		goto redirty_out;
 
-	/* Dentry blocks are controlled by checkpoint */
-	if (S_ISDIR(inode->i_mode)) {
+	/* Dentry/quota blocks are controlled by checkpoint */
+	if (S_ISDIR(inode->i_mode) || IS_NOQUOTA(inode)) {
+		/*
+		 * We need to wait for node_write to avoid block allocation during
+		 * checkpoint. This can only happen to quota writes which can cause
+		 * the below discard race condition.
+		 */
+		if (IS_NOQUOTA(inode))
+			down_read(&sbi->node_write);
+
 		fio.need_lock = LOCK_DONE;
 		err = f2fs_do_write_data_page(&fio);
+
+		if (IS_NOQUOTA(inode))
+			up_read(&sbi->node_write);
+
 		goto done;
 	}
 
@@ -2191,10 +2825,10 @@
 	if (err) {
 		file_set_keep_isize(inode);
 	} else {
-		down_write(&F2FS_I(inode)->i_sem);
+		spin_lock(&F2FS_I(inode)->i_size_lock);
 		if (F2FS_I(inode)->last_disk_size < psize)
 			F2FS_I(inode)->last_disk_size = psize;
-		up_write(&F2FS_I(inode)->i_sem);
+		spin_unlock(&F2FS_I(inode)->i_size_lock);
 	}
 
 done:
@@ -2205,7 +2839,7 @@
 	inode_dec_dirty_pages(inode);
 	if (err) {
 		ClearPageUptodate(page);
-		clear_cold_data(page);
+		clear_page_private_gcing(page);
 	}
 
 	if (wbc->for_reclaim) {
@@ -2214,22 +2848,19 @@
 		f2fs_remove_dirty_inode(inode);
 		submitted = NULL;
 	}
-
 	unlock_page(page);
 	if (!S_ISDIR(inode->i_mode) && !IS_NOQUOTA(inode) &&
-					!F2FS_I(inode)->cp_task) {
-		f2fs_submit_ipu_bio(sbi, bio, page);
+			!F2FS_I(inode)->cp_task && allow_balance)
 		f2fs_balance_fs(sbi, need_balance_fs);
-	}
 
 	if (unlikely(f2fs_cp_error(sbi))) {
-		f2fs_submit_ipu_bio(sbi, bio, page);
 		f2fs_submit_merged_write(sbi, DATA);
+		f2fs_submit_merged_ipu_write(sbi, bio, NULL);
 		submitted = NULL;
 	}
 
 	if (submitted)
-		*submitted = fio.submitted;
+		*submitted = fio.submitted ? 1 : 0;
 
 	return 0;
 
@@ -2250,7 +2881,23 @@
 static int f2fs_write_data_page(struct page *page,
 					struct writeback_control *wbc)
 {
-	return __write_data_page(page, NULL, NULL, NULL, wbc, FS_DATA_IO);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct inode *inode = page->mapping->host;
+
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
+		goto out;
+
+	if (f2fs_compressed_file(inode)) {
+		if (f2fs_is_compressed_cluster(inode, page->index)) {
+			redirty_page_for_writepage(wbc, page);
+			return AOP_WRITEPAGE_ACTIVATE;
+		}
+	}
+out:
+#endif
+
+	return f2fs_write_single_data_page(page, NULL, NULL, NULL,
+						wbc, FS_DATA_IO, 0, true);
 }
 
 /*
@@ -2263,20 +2910,37 @@
 					enum iostat_type io_type)
 {
 	int ret = 0;
-	int done = 0;
+	int done = 0, retry = 0;
 	struct pagevec pvec;
 	struct f2fs_sb_info *sbi = F2FS_M_SB(mapping);
 	struct bio *bio = NULL;
 	sector_t last_block;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct inode *inode = mapping->host;
+	struct compress_ctx cc = {
+		.inode = inode,
+		.log_cluster_size = F2FS_I(inode)->i_log_cluster_size,
+		.cluster_size = F2FS_I(inode)->i_cluster_size,
+		.cluster_idx = NULL_CLUSTER,
+		.rpages = NULL,
+		.nr_rpages = 0,
+		.cpages = NULL,
+		.rbuf = NULL,
+		.cbuf = NULL,
+		.rlen = PAGE_SIZE * F2FS_I(inode)->i_cluster_size,
+		.private = NULL,
+	};
+#endif
 	int nr_pages;
 	pgoff_t uninitialized_var(writeback_index);
 	pgoff_t index;
 	pgoff_t end;		/* Inclusive */
 	pgoff_t done_index;
-	int cycled;
 	int range_whole = 0;
 	xa_mark_t tag;
 	int nwritten = 0;
+	int submitted = 0;
+	int i;
 
 	pagevec_init(&pvec);
 
@@ -2289,29 +2953,23 @@
 	if (wbc->range_cyclic) {
 		writeback_index = mapping->writeback_index; /* prev offset */
 		index = writeback_index;
-		if (index == 0)
-			cycled = 1;
-		else
-			cycled = 0;
 		end = -1;
 	} else {
 		index = wbc->range_start >> PAGE_SHIFT;
 		end = wbc->range_end >> PAGE_SHIFT;
 		if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
 			range_whole = 1;
-		cycled = 1; /* ignore range_cyclic tests */
 	}
 	if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 		tag = PAGECACHE_TAG_TOWRITE;
 	else
 		tag = PAGECACHE_TAG_DIRTY;
 retry:
+	retry = 0;
 	if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages)
 		tag_pages_for_writeback(mapping, index, end);
 	done_index = index;
-	while (!done && (index <= end)) {
-		int i;
-
+	while (!done && !retry && (index <= end)) {
 		nr_pages = pagevec_lookup_range_tag(&pvec, mapping, &index, end,
 				tag);
 		if (nr_pages == 0)
@@ -2319,15 +2977,62 @@
 
 		for (i = 0; i < nr_pages; i++) {
 			struct page *page = pvec.pages[i];
-			bool submitted = false;
+			bool need_readd;
+readd:
+			need_readd = false;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+			if (f2fs_compressed_file(inode)) {
+				ret = f2fs_init_compress_ctx(&cc);
+				if (ret) {
+					done = 1;
+					break;
+				}
 
+				if (!f2fs_cluster_can_merge_page(&cc,
+								page->index)) {
+					ret = f2fs_write_multi_pages(&cc,
+						&submitted, wbc, io_type);
+					if (!ret)
+						need_readd = true;
+					goto result;
+				}
+
+				if (unlikely(f2fs_cp_error(sbi)))
+					goto lock_page;
+
+				if (f2fs_cluster_is_empty(&cc)) {
+					void *fsdata = NULL;
+					struct page *pagep;
+					int ret2;
+
+					ret2 = f2fs_prepare_compress_overwrite(
+							inode, &pagep,
+							page->index, &fsdata);
+					if (ret2 < 0) {
+						ret = ret2;
+						done = 1;
+						break;
+					} else if (ret2 &&
+						!f2fs_compress_write_end(inode,
+								fsdata, page->index,
+								1)) {
+						retry = 1;
+						break;
+					}
+				} else {
+					goto lock_page;
+				}
+			}
+#endif
 			/* give a priority to WB_SYNC threads */
 			if (atomic_read(&sbi->wb_sync_req[DATA]) &&
 					wbc->sync_mode == WB_SYNC_NONE) {
 				done = 1;
 				break;
 			}
-
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+lock_page:
+#endif
 			done_index = page->index;
 retry_write:
 			lock_page(page);
@@ -2344,62 +3049,90 @@
 			}
 
 			if (PageWriteback(page)) {
-				if (wbc->sync_mode != WB_SYNC_NONE) {
+				if (wbc->sync_mode != WB_SYNC_NONE)
 					f2fs_wait_on_page_writeback(page,
 							DATA, true, true);
-					f2fs_submit_ipu_bio(sbi, &bio, page);
-				} else {
+				else
 					goto continue_unlock;
-				}
 			}
 
 			if (!clear_page_dirty_for_io(page))
 				goto continue_unlock;
 
-			ret = __write_data_page(page, &submitted, &bio,
-					&last_block, wbc, io_type);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+			if (f2fs_compressed_file(inode)) {
+				get_page(page);
+				f2fs_compress_ctx_add_page(&cc, page);
+				continue;
+			}
+#endif
+			ret = f2fs_write_single_data_page(page, &submitted,
+					&bio, &last_block, wbc, io_type,
+					0, true);
+			if (ret == AOP_WRITEPAGE_ACTIVATE)
+				unlock_page(page);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+result:
+#endif
+			nwritten += submitted;
+			wbc->nr_to_write -= submitted;
+
 			if (unlikely(ret)) {
 				/*
 				 * keep nr_to_write, since vfs uses this to
 				 * get # of written pages.
 				 */
 				if (ret == AOP_WRITEPAGE_ACTIVATE) {
-					unlock_page(page);
 					ret = 0;
-					continue;
+					goto next;
 				} else if (ret == -EAGAIN) {
 					ret = 0;
 					if (wbc->sync_mode == WB_SYNC_ALL) {
 						cond_resched();
 						congestion_wait(BLK_RW_ASYNC,
-									HZ/50);
+							DEFAULT_IO_TIMEOUT);
 						goto retry_write;
 					}
-					continue;
+					goto next;
 				}
 				done_index = page->index + 1;
 				done = 1;
 				break;
-			} else if (submitted) {
-				nwritten++;
 			}
 
-			if (--wbc->nr_to_write <= 0 &&
+			if (wbc->nr_to_write <= 0 &&
 					wbc->sync_mode == WB_SYNC_NONE) {
 				done = 1;
 				break;
 			}
+next:
+			if (need_readd)
+				goto readd;
 		}
 		pagevec_release(&pvec);
 		cond_resched();
 	}
-
-	if (!cycled && !done) {
-		cycled = 1;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/* flush remained pages in compress cluster */
+	if (f2fs_compressed_file(inode) && !f2fs_cluster_is_empty(&cc)) {
+		ret = f2fs_write_multi_pages(&cc, &submitted, wbc, io_type);
+		nwritten += submitted;
+		wbc->nr_to_write -= submitted;
+		if (ret) {
+			done = 1;
+			retry = 0;
+		}
+	}
+	if (f2fs_compressed_file(inode))
+		f2fs_destroy_compress_ctx(&cc, false);
+#endif
+	if (retry) {
 		index = 0;
-		end = writeback_index - 1;
+		end = -1;
 		goto retry;
 	}
+	if (wbc->range_cyclic && !done)
+		done_index = 0;
 	if (wbc->range_cyclic || (range_whole && wbc->nr_to_write > 0))
 		mapping->writeback_index = done_index;
 
@@ -2408,7 +3141,7 @@
 								NULL, 0, DATA);
 	/* submit cached bio of IPU write */
 	if (bio)
-		__submit_bio(sbi, bio, DATA);
+		f2fs_submit_merged_ipu_write(sbi, &bio, NULL);
 
 	return ret;
 }
@@ -2416,13 +3149,17 @@
 static inline bool __should_serialize_io(struct inode *inode,
 					struct writeback_control *wbc)
 {
+	/* to avoid deadlock in path of data flush */
+	if (F2FS_I(inode)->cp_task)
+		return false;
+
 	if (!S_ISREG(inode->i_mode))
 		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 (f2fs_need_compress_data(inode))
+		return true;
 	if (wbc->sync_mode != WB_SYNC_ALL)
 		return true;
 	if (get_dirty_pages(inode) >= SM_I(F2FS_I_SB(inode))->min_seq_blocks)
@@ -2513,14 +3250,16 @@
 	struct inode *inode = mapping->host;
 	loff_t i_size = i_size_read(inode);
 
+	if (IS_NOQUOTA(inode))
+		return;
+
 	/* 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);
 
 		truncate_pagecache(inode, i_size);
-		if (!IS_NOQUOTA(inode))
-			f2fs_truncate_blocks(inode, i_size, true);
+		f2fs_truncate_blocks(inode, i_size, true);
 
 		up_write(&F2FS_I(inode)->i_mmap_sem);
 		up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
@@ -2557,9 +3296,10 @@
 
 	if (f2fs_has_inline_data(inode) ||
 			(pos & PAGE_MASK) >= i_size_read(inode)) {
-		__do_map_lock(sbi, flag, true);
+		f2fs_do_map_lock(sbi, flag, true);
 		locked = true;
 	}
+
 restart:
 	/* check inline_data */
 	ipage = f2fs_get_node_page(sbi, inode->i_ino);
@@ -2575,7 +3315,7 @@
 			f2fs_do_read_inline_data(page, ipage);
 			set_inode_flag(inode, FI_DATA_EXIST);
 			if (inode->i_nlink)
-				set_inline_node(ipage);
+				set_page_private_inline(ipage);
 		} else {
 			err = f2fs_convert_inline_page(&dn, page);
 			if (err)
@@ -2593,7 +3333,7 @@
 			err = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
 			if (err || dn.data_blkaddr == NULL_ADDR) {
 				f2fs_put_dnode(&dn);
-				__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
+				f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO,
 								true);
 				WARN_ON(flag != F2FS_GET_BLOCK_PRE_AIO);
 				locked = true;
@@ -2609,7 +3349,7 @@
 	f2fs_put_dnode(&dn);
 unlock_out:
 	if (locked)
-		__do_map_lock(sbi, flag, false);
+		f2fs_do_map_lock(sbi, flag, false);
 	return err;
 }
 
@@ -2625,6 +3365,22 @@
 	block_t blkaddr = NULL_ADDR;
 	int err = 0;
 
+	/*
+	 * Should avoid quota operations which can make deadlock:
+	 * kswapd -> f2fs_evict_inode -> dquot_drop ->
+	 *   f2fs_dquot_commit -> f2fs_write_begin ->
+	 *   d_obtain_alias -> __d_alloc -> kmem_cache_alloc(GFP_KERNEL)
+	 */
+	if (trace_android_fs_datawrite_start_enabled() && !IS_NOQUOTA(inode)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, pos, len,
+						 current->pid, path,
+						 current->comm);
+	}
 	trace_f2fs_write_begin(inode, pos, len, flags);
 
 	if (!f2fs_is_checkpoint_ready(sbi)) {
@@ -2650,6 +3406,24 @@
 		if (err)
 			goto fail;
 	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (f2fs_compressed_file(inode)) {
+		int ret;
+
+		*fsdata = NULL;
+
+		ret = f2fs_prepare_compress_overwrite(inode, pagep,
+							index, fsdata);
+		if (ret < 0) {
+			err = ret;
+			goto fail;
+		} else if (ret) {
+			return 0;
+		}
+	}
+#endif
+
 repeat:
 	/*
 	 * Do not use grab_cache_page_write_begin() to avoid deadlock due to
@@ -2662,6 +3436,8 @@
 		goto fail;
 	}
 
+	/* TODO: cluster can be compressed due to race with .writepage */
+
 	*pagep = page;
 
 	err = prepare_write_begin(sbi, page, pos, len,
@@ -2701,7 +3477,7 @@
 			err = -EFSCORRUPTED;
 			goto fail;
 		}
-		err = f2fs_submit_page_read(inode, page, blkaddr);
+		err = f2fs_submit_page_read(inode, page, blkaddr, 0, true);
 		if (err)
 			goto fail;
 
@@ -2732,6 +3508,7 @@
 {
 	struct inode *inode = page->mapping->host;
 
+	trace_android_fs_datawrite_end(inode, pos, len);
 	trace_f2fs_write_end(inode, pos, len, copied);
 
 	/*
@@ -2745,6 +3522,20 @@
 		else
 			SetPageUptodate(page);
 	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/* overwrite compressed file */
+	if (f2fs_compressed_file(inode) && fsdata) {
+		f2fs_compress_write_end(inode, fsdata, page->index, copied);
+		f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
+
+		if (pos + copied > i_size_read(inode) &&
+				!f2fs_verity_in_progress(inode))
+			f2fs_i_size_write(inode, pos + copied);
+		return copied;
+	}
+#endif
+
 	if (!copied)
 		goto unlock_out;
 
@@ -2792,7 +3583,7 @@
 	bio->bi_private = dio->orig_private;
 	bio->bi_end_io = dio->orig_end_io;
 
-	kvfree(dio);
+	kfree(dio);
 
 	bio_endio(bio);
 }
@@ -2851,6 +3642,29 @@
 
 	trace_f2fs_direct_IO_enter(inode, offset, count, rw);
 
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, offset,
+						count, current->pid, path,
+						current->comm);
+	}
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE)) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_datawrite_start(inode, offset, count,
+						 current->pid, path,
+						 current->comm);
+	}
+
 	if (rw == WRITE && whint_mode == WHINT_MODE_OFF)
 		iocb->ki_hint = WRITE_LIFE_NOT_SET;
 
@@ -2875,7 +3689,8 @@
 	err = __blockdev_direct_IO(iocb, inode, inode->i_sb->s_bdev,
 			iter, rw == WRITE ? get_data_block_dio_write :
 			get_data_block_dio, NULL, f2fs_dio_submit_bio,
-			DIO_LOCKING | DIO_SKIP_HOLES);
+			rw == WRITE ? DIO_LOCKING | DIO_SKIP_HOLES :
+			DIO_SKIP_HOLES);
 
 	if (do_opu)
 		up_read(&fi->i_gc_rwsem[READ]);
@@ -2890,12 +3705,28 @@
 									err);
 			if (!do_opu)
 				set_inode_flag(inode, FI_UPDATE_WRITE);
+		} else if (err == -EIOCBQUEUED) {
+			f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_IO,
+						count - iov_iter_count(iter));
 		} else if (err < 0) {
 			f2fs_write_failed(mapping, offset + count);
 		}
+	} else {
+		if (err > 0)
+			f2fs_update_iostat(sbi, APP_DIRECT_READ_IO, err);
+		else if (err == -EIOCBQUEUED)
+			f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_READ_IO,
+						count - iov_iter_count(iter));
 	}
 
 out:
+	if (trace_android_fs_dataread_start_enabled() &&
+	    (rw == READ))
+		trace_android_fs_dataread_end(inode, offset, count);
+	if (trace_android_fs_datawrite_start_enabled() &&
+	    (rw == WRITE))
+		trace_android_fs_datawrite_end(inode, offset, count);
+
 	trace_f2fs_direct_IO_exit(inode, offset, count, rw, err);
 
 	return err;
@@ -2922,12 +3753,20 @@
 		}
 	}
 
-	clear_cold_data(page);
+	clear_page_private_gcing(page);
 
-	if (IS_ATOMIC_WRITTEN_PAGE(page))
+	if (test_opt(sbi, COMPRESS_CACHE)) {
+		if (f2fs_compressed_file(inode))
+			f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+		if (inode->i_ino == F2FS_COMPRESS_INO(sbi))
+			clear_page_private_data(page);
+	}
+
+	if (page_private_atomic(page))
 		return f2fs_drop_inmem_page(inode, page);
 
-	f2fs_clear_page_private(page);
+	detach_page_private(page);
+	set_page_private(page, 0);
 }
 
 int f2fs_release_page(struct page *page, gfp_t wait)
@@ -2937,11 +3776,23 @@
 		return 0;
 
 	/* This is atomic written page, keep Private */
-	if (IS_ATOMIC_WRITTEN_PAGE(page))
+	if (page_private_atomic(page))
 		return 0;
 
-	clear_cold_data(page);
-	f2fs_clear_page_private(page);
+	if (test_opt(F2FS_P_SB(page), COMPRESS_CACHE)) {
+		struct f2fs_sb_info *sbi = F2FS_P_SB(page);
+		struct inode *inode = page->mapping->host;
+
+		if (f2fs_compressed_file(inode))
+			f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+		if (inode->i_ino == F2FS_COMPRESS_INO(sbi))
+			clear_page_private_data(page);
+	}
+
+	clear_page_private_gcing(page);
+
+	detach_page_private(page);
+	set_page_private(page, 0);
 	return 1;
 }
 
@@ -2957,7 +3808,7 @@
 		return __set_page_dirty_nobuffers(page);
 
 	if (f2fs_is_atomic_file(inode) && !f2fs_is_commit_atomic_write(inode)) {
-		if (!IS_ATOMIC_WRITTEN_PAGE(page)) {
+		if (!page_private_atomic(page)) {
 			f2fs_register_inmem_page(inode, page);
 			return 1;
 		}
@@ -2976,18 +3827,69 @@
 	return 0;
 }
 
+
+static sector_t f2fs_bmap_compress(struct inode *inode, sector_t block)
+{
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct dnode_of_data dn;
+	sector_t start_idx, blknr = 0;
+	int ret;
+
+	start_idx = round_down(block, F2FS_I(inode)->i_cluster_size);
+
+	set_new_dnode(&dn, inode, NULL, NULL, 0);
+	ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
+	if (ret)
+		return 0;
+
+	if (dn.data_blkaddr != COMPRESS_ADDR) {
+		dn.ofs_in_node += block - start_idx;
+		blknr = f2fs_data_blkaddr(&dn);
+		if (!__is_valid_data_blkaddr(blknr))
+			blknr = 0;
+	}
+
+	f2fs_put_dnode(&dn);
+	return blknr;
+#else
+	return 0;
+#endif
+}
+
+
 static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
 {
 	struct inode *inode = mapping->host;
+	sector_t blknr = 0;
 
 	if (f2fs_has_inline_data(inode))
-		return 0;
+		goto out;
 
 	/* make sure allocating whole blocks */
 	if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
 		filemap_write_and_wait(mapping);
 
-	return generic_block_bmap(mapping, block, get_data_block_bmap);
+	/* Block number less than F2FS MAX BLOCKS */
+	if (unlikely(block >= max_file_blocks(inode)))
+		goto out;
+
+	if (f2fs_compressed_file(inode)) {
+		blknr = f2fs_bmap_compress(inode, block);
+	} else {
+		struct f2fs_map_blocks map;
+
+		memset(&map, 0, sizeof(map));
+		map.m_lblk = block;
+		map.m_len = 1;
+		map.m_next_pgofs = NULL;
+		map.m_seg_type = NO_CHECK_TYPE;
+
+		if (!f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_BMAP))
+			blknr = map.m_pblk;
+	}
+out:
+	trace_f2fs_bmap(inode, block, blknr);
+	return blknr;
 }
 
 #ifdef CONFIG_MIGRATION
@@ -2998,7 +3900,7 @@
 {
 	int rc, extra_count;
 	struct f2fs_inode_info *fi = F2FS_I(mapping->host);
-	bool atomic_written = IS_ATOMIC_WRITTEN_PAGE(page);
+	bool atomic_written = page_private_atomic(page);
 
 	BUG_ON(PageWriteback(page));
 
@@ -3022,6 +3924,7 @@
 
 	if (atomic_written) {
 		struct inmem_pages *cur;
+
 		list_for_each_entry(cur, &fi->inmem_pages, list)
 			if (cur->page == page) {
 				cur->page = newpage;
@@ -3032,9 +3935,16 @@
 		get_page(newpage);
 	}
 
+	/* guarantee to start from no stale private field */
+	set_page_private(newpage, 0);
 	if (PagePrivate(page)) {
-		f2fs_set_page_private(newpage, page_private(page));
-		f2fs_clear_page_private(page);
+		set_page_private(newpage, page_private(page));
+		SetPagePrivate(newpage);
+		get_page(newpage);
+
+		set_page_private(page, 0);
+		ClearPagePrivate(page);
+		put_page(page);
 	}
 
 	if (mode != MIGRATE_SYNC_NO_COPY)
@@ -3047,97 +3957,170 @@
 #endif
 
 #ifdef CONFIG_SWAP
-/* Copied from generic_swapfile_activate() to check any holes */
+static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk,
+							unsigned int blkcnt)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	unsigned int blkofs;
+	unsigned int blk_per_sec = BLKS_PER_SEC(sbi);
+	unsigned int secidx = start_blk / blk_per_sec;
+	unsigned int end_sec = secidx + blkcnt / blk_per_sec;
+	int ret = 0;
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	set_inode_flag(inode, FI_ALIGNED_WRITE);
+
+	for (; secidx < end_sec; secidx++) {
+		down_write(&sbi->pin_sem);
+
+		f2fs_lock_op(sbi);
+		f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
+		f2fs_unlock_op(sbi);
+
+		set_inode_flag(inode, FI_DO_DEFRAG);
+
+		for (blkofs = 0; blkofs < blk_per_sec; blkofs++) {
+			struct page *page;
+			unsigned int blkidx = secidx * blk_per_sec + blkofs;
+
+			page = f2fs_get_lock_data_page(inode, blkidx, true);
+			if (IS_ERR(page)) {
+				up_write(&sbi->pin_sem);
+				ret = PTR_ERR(page);
+				goto done;
+			}
+
+			set_page_dirty(page);
+			f2fs_put_page(page, 1);
+		}
+
+		clear_inode_flag(inode, FI_DO_DEFRAG);
+
+		ret = filemap_fdatawrite(inode->i_mapping);
+
+		up_write(&sbi->pin_sem);
+
+		if (ret)
+			break;
+	}
+
+done:
+	clear_inode_flag(inode, FI_DO_DEFRAG);
+	clear_inode_flag(inode, FI_ALIGNED_WRITE);
+
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+
+	return ret;
+}
+
 static int check_swap_activate(struct swap_info_struct *sis,
 				struct file *swap_file, sector_t *span)
 {
 	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;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	sector_t cur_lblock;
+	sector_t last_lblock;
+	sector_t pblock;
+	sector_t lowest_pblock = -1;
+	sector_t highest_pblock = 0;
 	int nr_extents = 0;
-	int ret;
-
-	blkbits = inode->i_blkbits;
-	blocks_per_page = PAGE_SIZE >> blkbits;
+	unsigned long nr_pblocks;
+	unsigned int blks_per_sec = BLKS_PER_SEC(sbi);
+	unsigned int sec_blks_mask = BLKS_PER_SEC(sbi) - 1;
+	unsigned int not_aligned = 0;
+	int ret = 0;
 
 	/*
 	 * 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 < sis->max) {
-		unsigned block_in_page;
-		sector_t first_block;
+	cur_lblock = 0;
+	last_lblock = bytes_to_blks(inode, i_size_read(inode));
 
+	while (cur_lblock < last_lblock && cur_lblock < sis->max) {
+		struct f2fs_map_blocks map;
+retry:
 		cond_resched();
 
-		first_block = bmap(inode, probe_block);
-		if (first_block == 0)
-			goto bad_bmap;
+		memset(&map, 0, sizeof(map));
+		map.m_lblk = cur_lblock;
+		map.m_len = last_lblock - cur_lblock;
+		map.m_next_pgofs = NULL;
+		map.m_next_extent = NULL;
+		map.m_seg_type = NO_CHECK_TYPE;
+		map.m_may_create = false;
 
-		/*
-		 * It must be PAGE_SIZE aligned on-disk
-		 */
-		if (first_block & (blocks_per_page - 1)) {
-			probe_block++;
-			goto reprobe;
+		ret = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_FIEMAP);
+		if (ret)
+			goto out;
+
+		/* hole */
+		if (!(map.m_flags & F2FS_MAP_FLAGS)) {
+			f2fs_err(sbi, "Swapfile has holes");
+			ret = -EINVAL;
+			goto out;
 		}
 
-		for (block_in_page = 1; block_in_page < blocks_per_page;
-					block_in_page++) {
-			sector_t block;
+		pblock = map.m_pblk;
+		nr_pblocks = map.m_len;
 
-			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;
+		if ((pblock - SM_I(sbi)->main_blkaddr) & sec_blks_mask ||
+				nr_pblocks & sec_blks_mask) {
+			not_aligned++;
+
+			nr_pblocks = roundup(nr_pblocks, blks_per_sec);
+			if (cur_lblock + nr_pblocks > sis->max)
+				nr_pblocks -= blks_per_sec;
+
+			if (!nr_pblocks) {
+				/* this extent is last one */
+				nr_pblocks = map.m_len;
+				f2fs_warn(sbi, "Swapfile: last extent is not aligned to section");
+				goto next;
 			}
-		}
 
-		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;
+			ret = f2fs_migrate_blocks(inode, cur_lblock,
+							nr_pblocks);
+			if (ret)
+				goto out;
+			goto retry;
+		}
+next:
+		if (cur_lblock + nr_pblocks >= sis->max)
+			nr_pblocks = sis->max - cur_lblock;
+
+		if (cur_lblock) {	/* exclude the header page */
+			if (pblock < lowest_pblock)
+				lowest_pblock = pblock;
+			if (pblock + nr_pblocks - 1 > highest_pblock)
+				highest_pblock = pblock + nr_pblocks - 1;
 		}
 
 		/*
 		 * We found a PAGE_SIZE-length, PAGE_SIZE-aligned run of blocks
 		 */
-		ret = add_swap_extent(sis, page_no, 1, first_block);
+		ret = add_swap_extent(sis, cur_lblock, nr_pblocks, pblock);
 		if (ret < 0)
 			goto out;
 		nr_extents += ret;
-		page_no++;
-		probe_block += blocks_per_page;
-reprobe:
-		continue;
+		cur_lblock += nr_pblocks;
 	}
 	ret = nr_extents;
-	*span = 1 + highest_block - lowest_block;
-	if (page_no == 0)
-		page_no = 1;	/* force Empty message */
-	sis->max = page_no;
-	sis->pages = page_no - 1;
-	sis->highest_bit = page_no - 1;
+	*span = 1 + highest_pblock - lowest_pblock;
+	if (cur_lblock == 0)
+		cur_lblock = 1;	/* force Empty message */
+	sis->max = cur_lblock;
+	sis->pages = cur_lblock - 1;
+	sis->highest_bit = cur_lblock - 1;
 out:
+	if (not_aligned)
+		f2fs_warn(sbi, "Swapfile (%u) is not align to section: 1) creat(), 2) ioctl(F2FS_IOC_SET_PIN_FILE), 3) fallocate(%u * N)",
+			  not_aligned, blks_per_sec * F2FS_BLKSIZE);
 	return ret;
-bad_bmap:
-	pr_err("swapon: swapfile has holes\n");
-	return -EINVAL;
 }
 
 static int f2fs_swap_activate(struct swap_info_struct *sis, struct file *file,
@@ -3152,16 +4135,26 @@
 	if (f2fs_readonly(F2FS_I_SB(inode)->sb))
 		return -EROFS;
 
+	if (f2fs_lfs_mode(F2FS_I_SB(inode))) {
+		f2fs_err(F2FS_I_SB(inode),
+			"Swapfile not supported in LFS mode");
+		return -EINVAL;
+	}
+
 	ret = f2fs_convert_inline_inode(inode);
 	if (ret)
 		return ret;
 
+	if (!f2fs_disable_compressed_file(inode))
+		return -EINVAL;
+
+	f2fs_precache_extents(inode);
+
 	ret = check_swap_activate(sis, file, span);
 	if (ret < 0)
 		return ret;
 
 	set_inode_flag(inode, FI_PIN_FILE);
-	f2fs_precache_extents(inode);
 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 	return ret;
 }
@@ -3234,8 +4227,43 @@
 	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 f2fs_init_post_read_wq(struct f2fs_sb_info *sbi)
+{
+	if (!f2fs_sb_has_encrypt(sbi) &&
+		!f2fs_sb_has_verity(sbi) &&
+		!f2fs_sb_has_compression(sbi))
+		return 0;
+
+	sbi->post_read_wq = alloc_workqueue("f2fs_post_read_wq",
+						 WQ_UNBOUND | WQ_HIGHPRI,
+						 num_online_cpus());
+	if (!sbi->post_read_wq)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi)
+{
+	if (sbi->post_read_wq)
+		destroy_workqueue(sbi->post_read_wq);
+}
+
+int __init f2fs_init_bio_entry_cache(void)
+{
+	bio_entry_slab = f2fs_kmem_cache_create("f2fs_bio_entry_slab",
+			sizeof(struct bio_entry));
+	if (!bio_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void 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 d8d6444..8333250 100644
--- a/fs/f2fs/debug.c
+++ b/fs/f2fs/debug.c
@@ -21,9 +21,45 @@
 #include "gc.h"
 
 static LIST_HEAD(f2fs_stat_list);
-static struct dentry *f2fs_debugfs_root;
 static DEFINE_MUTEX(f2fs_stat_mutex);
+#ifdef CONFIG_DEBUG_FS
+static struct dentry *f2fs_debugfs_root;
+#endif
 
+/*
+ * This function calculates BDF of every segments
+ */
+void f2fs_update_sit_info(struct f2fs_sb_info *sbi)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+	unsigned long long blks_per_sec, hblks_per_sec, total_vblocks;
+	unsigned long long bimodal, dist;
+	unsigned int segno, vblocks;
+	int ndirty = 0;
+
+	bimodal = 0;
+	total_vblocks = 0;
+	blks_per_sec = BLKS_PER_SEC(sbi);
+	hblks_per_sec = blks_per_sec / 2;
+	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
+		vblocks = get_valid_blocks(sbi, segno, true);
+		dist = abs(vblocks - hblks_per_sec);
+		bimodal += dist * dist;
+
+		if (vblocks > 0 && vblocks < blks_per_sec) {
+			total_vblocks += vblocks;
+			ndirty++;
+		}
+	}
+	dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100);
+	si->bimodal = div64_u64(bimodal, dist);
+	if (si->dirty_count)
+		si->avg_vblocks = div_u64(total_vblocks, ndirty);
+	else
+		si->avg_vblocks = 0;
+}
+
+#ifdef CONFIG_DEBUG_FS
 static void update_general_status(struct f2fs_sb_info *sbi)
 {
 	struct f2fs_stat_info *si = F2FS_STAT(sbi);
@@ -56,7 +92,7 @@
 	si->nquota_files = sbi->nquota_files;
 	si->ndirty_all = sbi->ndirty_inode[DIRTY_META];
 	si->inmem_pages = get_pages(sbi, F2FS_INMEM_PAGES);
-	si->aw_cnt = atomic_read(&sbi->aw_cnt);
+	si->aw_cnt = sbi->atomic_files;
 	si->vw_cnt = atomic_read(&sbi->vw_cnt);
 	si->max_aw_cnt = atomic_read(&sbi->max_aw_cnt);
 	si->max_vw_cnt = atomic_read(&sbi->max_vw_cnt);
@@ -84,6 +120,13 @@
 			atomic_read(&SM_I(sbi)->dcc_info->discard_cmd_cnt);
 		si->undiscard_blks = SM_I(sbi)->dcc_info->undiscard_blks;
 	}
+	si->nr_issued_ckpt = atomic_read(&sbi->cprc_info.issued_ckpt);
+	si->nr_total_ckpt = atomic_read(&sbi->cprc_info.total_ckpt);
+	si->nr_queued_ckpt = atomic_read(&sbi->cprc_info.queued_ckpt);
+	spin_lock(&sbi->cprc_info.stat_lock);
+	si->cur_ckpt_time = sbi->cprc_info.cur_time;
+	si->peak_ckpt_time = sbi->cprc_info.peak_time;
+	spin_unlock(&sbi->cprc_info.stat_lock);
 	si->total_count = (int)sbi->user_block_count / sbi->blocks_per_seg;
 	si->rsvd_segs = reserved_segments(sbi);
 	si->overp_segs = overprovision_segments(sbi);
@@ -94,6 +137,8 @@
 	si->inline_xattr = atomic_read(&sbi->inline_xattr);
 	si->inline_inode = atomic_read(&sbi->inline_inode);
 	si->inline_dir = atomic_read(&sbi->inline_dir);
+	si->compr_inode = atomic_read(&sbi->compr_inode);
+	si->compr_blocks = atomic64_read(&sbi->compr_blocks);
 	si->append = sbi->im[APPEND_INO].ino_num;
 	si->update = sbi->im[UPDATE_INO].ino_num;
 	si->orphans = sbi->im[ORPHAN_INO].ino_num;
@@ -107,6 +152,12 @@
 		si->node_pages = NODE_MAPPING(sbi)->nrpages;
 	if (sbi->meta_inode)
 		si->meta_pages = META_MAPPING(sbi)->nrpages;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (sbi->compress_inode) {
+		si->compress_pages = COMPRESS_MAPPING(sbi)->nrpages;
+		si->compress_page_hit = atomic_read(&sbi->compress_page_hit);
+	}
+#endif
 	si->nats = NM_I(sbi)->nat_cnt[TOTAL_NAT];
 	si->dirty_nats = NM_I(sbi)->nat_cnt[DIRTY_NAT];
 	si->sits = MAIN_SEGS(sbi);
@@ -114,7 +165,6 @@
 	si->free_nids = NM_I(sbi)->nid_cnt[FREE_NID];
 	si->avail_nids = NM_I(sbi)->available_nids;
 	si->alloc_nids = NM_I(sbi)->nid_cnt[PREALLOC_NID];
-	si->bg_gc = sbi->bg_gc;
 	si->io_skip_bggc = sbi->io_skip_bggc;
 	si->other_skip_bggc = sbi->other_skip_bggc;
 	si->skipped_atomic_files[BG_GC] = sbi->skipped_atomic_files[BG_GC];
@@ -127,8 +177,9 @@
 		* 100 / (int)(sbi->user_block_count >> sbi->log_blocks_per_seg)
 		/ 2;
 	si->util_invalid = 50 - si->util_free - si->util_valid;
-	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_NODE; i++) {
+	for (i = CURSEG_HOT_DATA; i < NO_CHECK_TYPE; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
+
 		si->curseg[i] = curseg->segno;
 		si->cursec[i] = GET_SEC_FROM_SEG(sbi, curseg->segno);
 		si->curzone[i] = GET_ZONE_FROM_SEC(sbi, si->cursec[i]);
@@ -137,6 +188,26 @@
 	for (i = META_CP; i < META_MAX; i++)
 		si->meta_count[i] = atomic_read(&sbi->meta_count[i]);
 
+	for (i = 0; i < NO_CHECK_TYPE; i++) {
+		si->dirty_seg[i] = 0;
+		si->full_seg[i] = 0;
+		si->valid_blks[i] = 0;
+	}
+
+	for (i = 0; i < MAIN_SEGS(sbi); i++) {
+		int blks = get_seg_entry(sbi, i)->valid_blocks;
+		int type = get_seg_entry(sbi, i)->type;
+
+		if (!blks)
+			continue;
+
+		if (blks == sbi->blocks_per_seg)
+			si->full_seg[type]++;
+		else
+			si->dirty_seg[type]++;
+		si->valid_blks[type] += blks;
+	}
+
 	for (i = 0; i < 2; i++) {
 		si->segment_count[i] = sbi->segment_count[i];
 		si->block_count[i] = sbi->block_count[i];
@@ -146,39 +217,6 @@
 }
 
 /*
- * This function calculates BDF of every segments
- */
-static void update_sit_info(struct f2fs_sb_info *sbi)
-{
-	struct f2fs_stat_info *si = F2FS_STAT(sbi);
-	unsigned long long blks_per_sec, hblks_per_sec, total_vblocks;
-	unsigned long long bimodal, dist;
-	unsigned int segno, vblocks;
-	int ndirty = 0;
-
-	bimodal = 0;
-	total_vblocks = 0;
-	blks_per_sec = BLKS_PER_SEC(sbi);
-	hblks_per_sec = blks_per_sec / 2;
-	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
-		vblocks = get_valid_blocks(sbi, segno, true);
-		dist = abs(vblocks - hblks_per_sec);
-		bimodal += dist * dist;
-
-		if (vblocks > 0 && vblocks < blks_per_sec) {
-			total_vblocks += vblocks;
-			ndirty++;
-		}
-	}
-	dist = div_u64(MAIN_SECS(sbi) * hblks_per_sec * hblks_per_sec, 100);
-	si->bimodal = div64_u64(bimodal, dist);
-	if (si->dirty_count)
-		si->avg_vblocks = div_u64(total_vblocks, ndirty);
-	else
-		si->avg_vblocks = 0;
-}
-
-/*
  * This function calculates memory footprint.
  */
 static void update_mem_info(struct f2fs_sb_info *sbi)
@@ -269,12 +307,20 @@
 	si->page_mem = 0;
 	if (sbi->node_inode) {
 		unsigned npages = NODE_MAPPING(sbi)->nrpages;
+
 		si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
 	}
 	if (sbi->meta_inode) {
 		unsigned npages = META_MAPPING(sbi)->nrpages;
+
 		si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
 	}
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (sbi->compress_inode) {
+		unsigned npages = COMPRESS_MAPPING(sbi)->nrpages;
+		si->page_mem += (unsigned long long)npages << PAGE_SHIFT;
+	}
+#endif
 }
 
 static int stat_show(struct seq_file *s, void *v)
@@ -298,6 +344,9 @@
 			   si->ssa_area_segs, si->main_area_segs);
 		seq_printf(s, "(OverProv:%d Resv:%d)]\n\n",
 			   si->overp_segs, si->rsvd_segs);
+		seq_printf(s, "Current Time Sec: %llu / Mounted Time Sec: %llu\n\n",
+					ktime_get_boottime_seconds(),
+					SIT_I(si->sbi)->mounted_time);
 		if (test_opt(si->sbi, DISCARD))
 			seq_printf(s, "Utilization: %u%% (%u valid blocks, %u discard blocks)\n",
 				si->utilization, si->valid_count, si->discard_blks);
@@ -316,35 +365,65 @@
 			   si->inline_inode);
 		seq_printf(s, "  - Inline_dentry Inode: %u\n",
 			   si->inline_dir);
+		seq_printf(s, "  - Compressed Inode: %u, Blocks: %llu\n",
+			   si->compr_inode, si->compr_blocks);
 		seq_printf(s, "  - Orphan/Append/Update Inode: %u, %u, %u\n",
 			   si->orphans, si->append, si->update);
 		seq_printf(s, "\nMain area: %d segs, %d secs %d zones\n",
 			   si->main_area_segs, si->main_area_sections,
 			   si->main_area_zones);
-		seq_printf(s, "  - COLD  data: %d, %d, %d\n",
+		seq_printf(s, "    TYPE         %8s %8s %8s %10s %10s %10s\n",
+			   "segno", "secno", "zoneno", "dirty_seg", "full_seg", "valid_blk");
+		seq_printf(s, "  - COLD   data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_COLD_DATA],
 			   si->cursec[CURSEG_COLD_DATA],
-			   si->curzone[CURSEG_COLD_DATA]);
-		seq_printf(s, "  - WARM  data: %d, %d, %d\n",
+			   si->curzone[CURSEG_COLD_DATA],
+			   si->dirty_seg[CURSEG_COLD_DATA],
+			   si->full_seg[CURSEG_COLD_DATA],
+			   si->valid_blks[CURSEG_COLD_DATA]);
+		seq_printf(s, "  - WARM   data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_WARM_DATA],
 			   si->cursec[CURSEG_WARM_DATA],
-			   si->curzone[CURSEG_WARM_DATA]);
-		seq_printf(s, "  - HOT   data: %d, %d, %d\n",
+			   si->curzone[CURSEG_WARM_DATA],
+			   si->dirty_seg[CURSEG_WARM_DATA],
+			   si->full_seg[CURSEG_WARM_DATA],
+			   si->valid_blks[CURSEG_WARM_DATA]);
+		seq_printf(s, "  - HOT    data: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_HOT_DATA],
 			   si->cursec[CURSEG_HOT_DATA],
-			   si->curzone[CURSEG_HOT_DATA]);
-		seq_printf(s, "  - Dir   dnode: %d, %d, %d\n",
+			   si->curzone[CURSEG_HOT_DATA],
+			   si->dirty_seg[CURSEG_HOT_DATA],
+			   si->full_seg[CURSEG_HOT_DATA],
+			   si->valid_blks[CURSEG_HOT_DATA]);
+		seq_printf(s, "  - Dir   dnode: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_HOT_NODE],
 			   si->cursec[CURSEG_HOT_NODE],
-			   si->curzone[CURSEG_HOT_NODE]);
-		seq_printf(s, "  - File   dnode: %d, %d, %d\n",
+			   si->curzone[CURSEG_HOT_NODE],
+			   si->dirty_seg[CURSEG_HOT_NODE],
+			   si->full_seg[CURSEG_HOT_NODE],
+			   si->valid_blks[CURSEG_HOT_NODE]);
+		seq_printf(s, "  - File  dnode: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_WARM_NODE],
 			   si->cursec[CURSEG_WARM_NODE],
-			   si->curzone[CURSEG_WARM_NODE]);
-		seq_printf(s, "  - Indir nodes: %d, %d, %d\n",
+			   si->curzone[CURSEG_WARM_NODE],
+			   si->dirty_seg[CURSEG_WARM_NODE],
+			   si->full_seg[CURSEG_WARM_NODE],
+			   si->valid_blks[CURSEG_WARM_NODE]);
+		seq_printf(s, "  - Indir nodes: %8d %8d %8d %10u %10u %10u\n",
 			   si->curseg[CURSEG_COLD_NODE],
 			   si->cursec[CURSEG_COLD_NODE],
-			   si->curzone[CURSEG_COLD_NODE]);
+			   si->curzone[CURSEG_COLD_NODE],
+			   si->dirty_seg[CURSEG_COLD_NODE],
+			   si->full_seg[CURSEG_COLD_NODE],
+			   si->valid_blks[CURSEG_COLD_NODE]);
+		seq_printf(s, "  - Pinned file: %8d %8d %8d\n",
+			   si->curseg[CURSEG_COLD_DATA_PINNED],
+			   si->cursec[CURSEG_COLD_DATA_PINNED],
+			   si->curzone[CURSEG_COLD_DATA_PINNED]);
+		seq_printf(s, "  - ATGC   data: %8d %8d %8d\n",
+			   si->curseg[CURSEG_ALL_DATA_ATGC],
+			   si->cursec[CURSEG_ALL_DATA_ATGC],
+			   si->curzone[CURSEG_ALL_DATA_ATGC]);
 		seq_printf(s, "\n  - Valid: %d\n  - Dirty: %d\n",
 			   si->main_area_segs - si->dirty_count -
 			   si->prefree_count - si->free_segs,
@@ -360,6 +439,11 @@
 				si->meta_count[META_NAT]);
 		seq_printf(s, "  - ssa blocks : %u\n",
 				si->meta_count[META_SSA]);
+		seq_printf(s, "CP merge (Queued: %4d, Issued: %4d, Total: %4d, "
+				"Cur time: %4d(ms), Peak time: %4d(ms))\n",
+				si->nr_queued_ckpt, si->nr_issued_ckpt,
+				si->nr_total_ckpt, si->cur_ckpt_time,
+				si->peak_ckpt_time);
 		seq_printf(s, "GC calls: %d (BG: %d)\n",
 			   si->call_count, si->bg_gc);
 		seq_printf(s, "  - data segments : %d (%d)\n",
@@ -404,6 +488,7 @@
 			"volatile IO: %4d (Max. %4d)\n",
 			   si->inmem_pages, si->aw_cnt, si->max_aw_cnt,
 			   si->vw_cnt, si->max_vw_cnt);
+		seq_printf(s, "  - compress: %4d, hit:%8d\n", si->compress_pages, si->compress_page_hit);
 		seq_printf(s, "  - nodes: %4d in %4d\n",
 			   si->ndirty_node, si->node_pages);
 		seq_printf(s, "  - dents: %4d in dirs:%4d (%4d)\n",
@@ -442,7 +527,7 @@
 			   si->block_count[LFS], si->segment_count[LFS]);
 
 		/* segment usage info */
-		update_sit_info(si->sbi);
+		f2fs_update_sit_info(si->sbi);
 		seq_printf(s, "\nBDF: %u, avg. vblocks: %u\n",
 			   si->bimodal, si->avg_vblocks);
 
@@ -462,6 +547,7 @@
 }
 
 DEFINE_SHOW_ATTRIBUTE(stat);
+#endif
 
 int f2fs_build_stats(struct f2fs_sb_info *sbi)
 {
@@ -492,11 +578,12 @@
 	atomic_set(&sbi->inline_xattr, 0);
 	atomic_set(&sbi->inline_inode, 0);
 	atomic_set(&sbi->inline_dir, 0);
+	atomic_set(&sbi->compr_inode, 0);
+	atomic64_set(&sbi->compr_blocks, 0);
 	atomic_set(&sbi->inplace_count, 0);
 	for (i = META_CP; i < META_MAX; i++)
 		atomic_set(&sbi->meta_count[i], 0);
 
-	atomic_set(&sbi->aw_cnt, 0);
 	atomic_set(&sbi->vw_cnt, 0);
 	atomic_set(&sbi->max_aw_cnt, 0);
 	atomic_set(&sbi->max_vw_cnt, 0);
@@ -516,19 +603,23 @@
 	list_del(&si->stat_list);
 	mutex_unlock(&f2fs_stat_mutex);
 
-	kvfree(si);
+	kfree(si);
 }
 
 void __init f2fs_create_root_stats(void)
 {
+#ifdef CONFIG_DEBUG_FS
 	f2fs_debugfs_root = debugfs_create_dir("f2fs", NULL);
 
 	debugfs_create_file("status", S_IRUGO, f2fs_debugfs_root, NULL,
 			    &stat_fops);
+#endif
 }
 
 void f2fs_destroy_root_stats(void)
 {
+#ifdef CONFIG_DEBUG_FS
 	debugfs_remove_recursive(f2fs_debugfs_root);
 	f2fs_debugfs_root = NULL;
+#endif
 }
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 99c4a86..032ae45 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -5,6 +5,7 @@
  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *             http://www.samsung.com/
  */
+#include <asm/unaligned.h>
 #include <linux/fs.h>
 #include <linux/f2fs_fs.h>
 #include <linux/sched/signal.h>
@@ -15,6 +16,10 @@
 #include "xattr.h"
 #include <trace/events/f2fs.h>
 
+#ifdef CONFIG_UNICODE
+extern struct kmem_cache *f2fs_cf_name_slab;
+#endif
+
 static unsigned long dir_blocks(struct inode *inode)
 {
 	return ((unsigned long long) (i_size_read(inode) + PAGE_SIZE - 1))
@@ -70,6 +75,113 @@
 	return DT_UNKNOWN;
 }
 
+/* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */
+int f2fs_init_casefolded_name(const struct inode *dir,
+			      struct f2fs_filename *fname)
+{
+#ifdef CONFIG_UNICODE
+	struct super_block *sb = dir->i_sb;
+
+	if (IS_CASEFOLDED(dir)) {
+		fname->cf_name.name = kmem_cache_alloc(f2fs_cf_name_slab,
+								GFP_NOFS);
+		if (!fname->cf_name.name)
+			return -ENOMEM;
+		fname->cf_name.len = utf8_casefold(sb->s_encoding,
+						   fname->usr_fname,
+						   fname->cf_name.name,
+						   F2FS_NAME_LEN);
+		if ((int)fname->cf_name.len <= 0) {
+			kmem_cache_free(f2fs_cf_name_slab, fname->cf_name.name);
+			fname->cf_name.name = NULL;
+			if (sb_has_strict_encoding(sb))
+				return -EINVAL;
+			/* fall back to treating name as opaque byte sequence */
+		}
+	}
+#endif
+	return 0;
+}
+
+static int __f2fs_setup_filename(const struct inode *dir,
+				 const struct fscrypt_name *crypt_name,
+				 struct f2fs_filename *fname)
+{
+	int err;
+
+	memset(fname, 0, sizeof(*fname));
+
+	fname->usr_fname = crypt_name->usr_fname;
+	fname->disk_name = crypt_name->disk_name;
+#ifdef CONFIG_FS_ENCRYPTION
+	fname->crypto_buf = crypt_name->crypto_buf;
+#endif
+	if (crypt_name->is_nokey_name) {
+		/* hash was decoded from the no-key name */
+		fname->hash = cpu_to_le32(crypt_name->hash);
+	} else {
+		err = f2fs_init_casefolded_name(dir, fname);
+		if (err) {
+			f2fs_free_filename(fname);
+			return err;
+		}
+		f2fs_hash_filename(dir, fname);
+	}
+	return 0;
+}
+
+/*
+ * Prepare to search for @iname in @dir.  This is similar to
+ * fscrypt_setup_filename(), but this also handles computing the casefolded name
+ * and the f2fs dirhash if needed, then packing all the information about this
+ * filename up into a 'struct f2fs_filename'.
+ */
+int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
+			int lookup, struct f2fs_filename *fname)
+{
+	struct fscrypt_name crypt_name;
+	int err;
+
+	err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name);
+	if (err)
+		return err;
+
+	return __f2fs_setup_filename(dir, &crypt_name, fname);
+}
+
+/*
+ * Prepare to look up @dentry in @dir.  This is similar to
+ * fscrypt_prepare_lookup(), but this also handles computing the casefolded name
+ * and the f2fs dirhash if needed, then packing all the information about this
+ * filename up into a 'struct f2fs_filename'.
+ */
+int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			struct f2fs_filename *fname)
+{
+	struct fscrypt_name crypt_name;
+	int err;
+
+	err = fscrypt_prepare_lookup(dir, dentry, &crypt_name);
+	if (err)
+		return err;
+
+	return __f2fs_setup_filename(dir, &crypt_name, fname);
+}
+
+void f2fs_free_filename(struct f2fs_filename *fname)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	kfree(fname->crypto_buf.name);
+	fname->crypto_buf.name = NULL;
+#endif
+#ifdef CONFIG_UNICODE
+	if (fname->cf_name.name) {
+		kmem_cache_free(f2fs_cf_name_slab, fname->cf_name.name);
+		fname->cf_name.name = NULL;
+	}
+#endif
+}
+
 static unsigned long dir_block_index(unsigned int level,
 				int dir_level, unsigned int idx)
 {
@@ -84,126 +196,98 @@
 
 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,
-				struct page **res_page)
+				const struct f2fs_filename *fname,
+				int *max_slots)
 {
 	struct f2fs_dentry_block *dentry_blk;
-	struct f2fs_dir_entry *de;
 	struct f2fs_dentry_ptr d;
 
 	dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
 
 	make_dentry_ptr_block(dir, &d, dentry_blk);
-	de = f2fs_find_target_dentry(fname, namehash, max_slots, &d);
-	if (de)
-		*res_page = dentry_page;
-
-	return de;
+	return f2fs_find_target_dentry(&d, fname, max_slots);
 }
 
 #ifdef CONFIG_UNICODE
 /*
  * Test whether a case-insensitive directory entry matches the filename
  * being searched for.
+ *
+ * Returns 1 for a match, 0 for no match, and -errno on an error.
  */
-static bool f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
-			       const struct qstr *entry, bool quick)
+static int f2fs_match_ci_name(const struct inode *dir, const struct qstr *name,
+			       const u8 *de_name, u32 de_name_len)
 {
-	const struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
-	const struct unicode_map *um = sbi->s_encoding;
+	const struct super_block *sb = dir->i_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct fscrypt_str decrypted_name = FSTR_INIT(NULL, de_name_len);
+	struct qstr entry = QSTR_INIT(de_name, de_name_len);
 	int res;
 
-	if (quick)
-		res = utf8_strncasecmp_folded(um, name, entry);
-	else
-		res = utf8_strncasecmp(um, name, entry);
-	if (res < 0) {
-		/*
-		 * In strict mode, ignore invalid names.  In non-strict mode,
-		 * fall back to treating them as opaque byte sequences.
-		 */
-		if (f2fs_has_strict_mode(sbi) || name->len != entry->len)
-			return false;
-		return !memcmp(name->name, entry->name, name->len);
+	if (IS_ENCRYPTED(dir)) {
+		const struct fscrypt_str encrypted_name =
+			FSTR_INIT((u8 *)de_name, de_name_len);
+
+		if (WARN_ON_ONCE(!fscrypt_has_encryption_key(dir)))
+			return -EINVAL;
+
+		decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL);
+		if (!decrypted_name.name)
+			return -ENOMEM;
+		res = fscrypt_fname_disk_to_usr(dir, 0, 0, &encrypted_name,
+						&decrypted_name);
+		if (res < 0)
+			goto out;
+		entry.name = decrypted_name.name;
+		entry.len = decrypted_name.len;
 	}
-	return res == 0;
+
+	res = utf8_strncasecmp_folded(um, name, &entry);
+	/*
+	 * In strict mode, ignore invalid names.  In non-strict mode,
+	 * fall back to treating them as opaque byte sequences.
+	 */
+	if (res < 0 && !sb_has_strict_encoding(sb)) {
+		res = name->len == entry.len &&
+				memcmp(name->name, entry.name, name->len) == 0;
+	} else {
+		/* utf8_strncasecmp_folded returns 0 on match */
+		res = (res == 0);
+	}
+out:
+	kfree(decrypted_name.name);
+	return res;
 }
+#endif /* CONFIG_UNICODE */
 
-static void f2fs_fname_setup_ci_filename(struct inode *dir,
-					const struct qstr *iname,
-					struct fscrypt_str *cf_name)
+static inline int f2fs_match_name(const struct inode *dir,
+				   const struct f2fs_filename *fname,
+				   const u8 *de_name, u32 de_name_len)
 {
-	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;
+	struct fscrypt_name f;
 
 #ifdef CONFIG_UNICODE
-	entry.name = d->filename[bit_pos];
-	entry.len = de->name_len;
+	if (fname->cf_name.name) {
+		struct qstr cf = FSTR_TO_QSTR(&fname->cf_name);
 
-	if (sbi->s_encoding && IS_CASEFOLDED(parent)) {
-		if (cf_str->name) {
-			struct qstr cf = {.name = cf_str->name,
-					  .len = cf_str->len};
-			return f2fs_match_ci_name(parent, &cf, &entry, true);
-		}
-		return f2fs_match_ci_name(parent, fname->usr_fname, &entry,
-					  false);
+		return f2fs_match_ci_name(dir, &cf, de_name, de_name_len);
 	}
 #endif
-	if (fscrypt_match_name(fname, d->filename[bit_pos],
-				le16_to_cpu(de->name_len)))
-		return true;
-	return false;
+	f.usr_fname = fname->usr_fname;
+	f.disk_name = fname->disk_name;
+#ifdef CONFIG_FS_ENCRYPTION
+	f.crypto_buf = fname->crypto_buf;
+#endif
+	return fscrypt_match_name(&f, de_name, de_name_len);
 }
 
-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 *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
+			const struct f2fs_filename *fname, int *max_slots)
 {
 	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
+	int res = 0;
 
 	if (max_slots)
 		*max_slots = 0;
@@ -221,8 +305,15 @@
 			continue;
 		}
 
-		if (f2fs_match_name(d, de, fname, &cf_str, bit_pos, namehash))
-			goto found;
+		if (de->hash_code == fname->hash) {
+			res = f2fs_match_name(d->inode, fname,
+					      d->filename[bit_pos],
+					      le16_to_cpu(de->name_len));
+			if (res < 0)
+				return ERR_PTR(res);
+			if (res)
+				goto found;
+		}
 
 		if (max_slots && max_len > *max_slots)
 			*max_slots = max_len;
@@ -235,33 +326,27 @@
 found:
 	if (max_slots && max_len > *max_slots)
 		*max_slots = max_len;
-
-#ifdef CONFIG_UNICODE
-	kvfree(cf_str.name);
-#endif
 	return de;
 }
 
 static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 					unsigned int level,
-					struct fscrypt_name *fname,
+					const struct f2fs_filename *fname,
 					struct page **res_page)
 {
-	struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
-	int s = GET_DENTRY_SLOTS(name.len);
+	int s = GET_DENTRY_SLOTS(fname->disk_name.len);
 	unsigned int nbucket, nblock;
 	unsigned int bidx, end_block;
 	struct page *dentry_page;
 	struct f2fs_dir_entry *de = NULL;
 	bool room = false;
 	int max_slots;
-	f2fs_hash_t namehash = f2fs_dentry_hash(dir, &name, fname);
 
 	nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 	nblock = bucket_blocks(level);
 
 	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
-					le32_to_cpu(namehash) % nbucket);
+			       le32_to_cpu(fname->hash) % nbucket);
 	end_block = bidx + nblock;
 
 	for (; bidx < end_block; bidx++) {
@@ -277,18 +362,23 @@
 			}
 		}
 
-		de = find_in_block(dir, dentry_page, fname, namehash,
-							&max_slots, res_page);
-		if (de)
+		de = find_in_block(dir, dentry_page, fname, &max_slots);
+		if (IS_ERR(de)) {
+			*res_page = ERR_CAST(de);
+			de = NULL;
 			break;
+		} else if (de) {
+			*res_page = dentry_page;
+			break;
+		}
 
 		if (max_slots >= s)
 			room = true;
 		f2fs_put_page(dentry_page, 0);
 	}
 
-	if (!de && room && F2FS_I(dir)->chash != namehash) {
-		F2FS_I(dir)->chash = namehash;
+	if (!de && room && F2FS_I(dir)->chash != fname->hash) {
+		F2FS_I(dir)->chash = fname->hash;
 		F2FS_I(dir)->clevel = level;
 	}
 
@@ -296,7 +386,8 @@
 }
 
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page)
+					 const struct f2fs_filename *fname,
+					 struct page **res_page)
 {
 	unsigned long npages = dir_blocks(dir);
 	struct f2fs_dir_entry *de = NULL;
@@ -343,18 +434,10 @@
 			const struct qstr *child, struct page **res_page)
 {
 	struct f2fs_dir_entry *de = NULL;
-	struct fscrypt_name fname;
+	struct f2fs_filename 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);
+	err = f2fs_setup_filename(dir, child, 1, &fname);
 	if (err) {
 		if (err == -ENOENT)
 			*res_page = NULL;
@@ -365,7 +448,7 @@
 
 	de = __f2fs_find_entry(dir, &fname, res_page);
 
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return de;
 }
 
@@ -395,6 +478,7 @@
 		struct page *page, struct inode *inode)
 {
 	enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
+
 	lock_page(page);
 	f2fs_wait_on_page_writeback(page, type, true, true);
 	de->ino = cpu_to_le32(inode->i_ino);
@@ -406,24 +490,47 @@
 	f2fs_put_page(page, 1);
 }
 
-static void init_dent_inode(const struct qstr *name, struct page *ipage)
+static void init_dent_inode(struct inode *dir, struct inode *inode,
+			    const struct f2fs_filename *fname,
+			    struct page *ipage)
 {
 	struct f2fs_inode *ri;
 
+	if (!fname) /* tmpfile case? */
+		return;
+
 	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 
 	/* copy name info. to this inode page */
 	ri = F2FS_INODE(ipage);
-	ri->i_namelen = cpu_to_le32(name->len);
-	memcpy(ri->i_name, name->name, name->len);
+	ri->i_namelen = cpu_to_le32(fname->disk_name.len);
+	memcpy(ri->i_name, fname->disk_name.name, fname->disk_name.len);
+	if (IS_ENCRYPTED(dir)) {
+		file_set_enc_name(inode);
+		/*
+		 * Roll-forward recovery doesn't have encryption keys available,
+		 * so it can't compute the dirhash for encrypted+casefolded
+		 * filenames.  Append it to i_name if possible.  Else, disable
+		 * roll-forward recovery of the dentry (i.e., make fsync'ing the
+		 * file force a checkpoint) by setting LOST_PINO.
+		 */
+		if (IS_CASEFOLDED(dir)) {
+			if (fname->disk_name.len + sizeof(f2fs_hash_t) <=
+			    F2FS_NAME_LEN)
+				put_unaligned(fname->hash, (f2fs_hash_t *)
+					&ri->i_name[fname->disk_name.len]);
+			else
+				file_lost_pino(inode);
+		}
+	}
 	set_page_dirty(ipage);
 }
 
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 					struct f2fs_dentry_ptr *d)
 {
-	struct qstr dot = QSTR_INIT(".", 1);
-	struct qstr dotdot = QSTR_INIT("..", 2);
+	struct fscrypt_str dot = FSTR_INIT(".", 1);
+	struct fscrypt_str dotdot = FSTR_INIT("..", 2);
 
 	/* update dirent of "." */
 	f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0);
@@ -457,11 +564,9 @@
 }
 
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct qstr *new_name, const struct qstr *orig_name,
-			struct page *dpage)
+			const struct f2fs_filename *fname, struct page *dpage)
 {
 	struct page *page;
-	int dummy_encrypt = DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(dir));
 	int err;
 
 	if (is_inode_flag_set(inode, FI_NEW_INODE)) {
@@ -484,13 +589,13 @@
 		if (err)
 			goto put_error;
 
-		err = f2fs_init_security(inode, dir, orig_name, page);
+		err = f2fs_init_security(inode, dir,
+					 fname ? fname->usr_fname : NULL, page);
 		if (err)
 			goto put_error;
 
-		if ((IS_ENCRYPTED(dir) || dummy_encrypt) &&
-					f2fs_may_encrypt(inode)) {
-			err = fscrypt_inherit_context(dir, inode, page, false);
+		if (IS_ENCRYPTED(inode)) {
+			err = fscrypt_set_context(inode, page);
 			if (err)
 				goto put_error;
 		}
@@ -500,11 +605,7 @@
 			return page;
 	}
 
-	if (new_name) {
-		init_dent_inode(new_name, page);
-		if (IS_ENCRYPTED(dir))
-			file_set_enc_name(inode);
-	}
+	init_dent_inode(dir, inode, fname, page);
 
 	/*
 	 * This file should be checkpointed during fsync.
@@ -568,9 +669,23 @@
 	goto next;
 }
 
+bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+			  const struct f2fs_filename *fname)
+{
+	struct f2fs_dentry_ptr d;
+	unsigned int bit_pos;
+	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
+
+	make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage));
+
+	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
+
+	return bit_pos < d.max;
+}
+
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
-				const struct qstr *name, f2fs_hash_t name_hash,
-				unsigned int bit_pos)
+			const struct fscrypt_str *name, f2fs_hash_t name_hash,
+			unsigned int bit_pos)
 {
 	struct f2fs_dir_entry *de;
 	int slots = GET_DENTRY_SLOTS(name->len);
@@ -590,15 +705,13 @@
 	}
 }
 
-int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
-				const struct qstr *orig_name,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
+			   struct inode *inode, nid_t ino, umode_t mode)
 {
 	unsigned int bit_pos;
 	unsigned int level;
 	unsigned int current_depth;
 	unsigned long bidx, block;
-	f2fs_hash_t dentry_hash;
 	unsigned int nbucket, nblock;
 	struct page *dentry_page = NULL;
 	struct f2fs_dentry_block *dentry_blk = NULL;
@@ -607,11 +720,10 @@
 	int slots, err = 0;
 
 	level = 0;
-	slots = GET_DENTRY_SLOTS(new_name->len);
-	dentry_hash = f2fs_dentry_hash(dir, new_name, NULL);
+	slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 
 	current_depth = F2FS_I(dir)->i_current_depth;
-	if (F2FS_I(dir)->chash == dentry_hash) {
+	if (F2FS_I(dir)->chash == fname->hash) {
 		level = F2FS_I(dir)->clevel;
 		F2FS_I(dir)->chash = 0;
 	}
@@ -633,7 +745,7 @@
 	nblock = bucket_blocks(level);
 
 	bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
-				(le32_to_cpu(dentry_hash) % nbucket));
+				(le32_to_cpu(fname->hash) % nbucket));
 
 	for (block = bidx; block <= (bidx + nblock - 1); block++) {
 		dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
@@ -657,8 +769,7 @@
 
 	if (inode) {
 		down_write(&F2FS_I(inode)->i_sem);
-		page = f2fs_init_inode_metadata(inode, dir, new_name,
-						orig_name, NULL);
+		page = f2fs_init_inode_metadata(inode, dir, fname, NULL);
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto fail;
@@ -666,7 +777,8 @@
 	}
 
 	make_dentry_ptr_block(NULL, &d, dentry_blk);
-	f2fs_update_dentry(ino, mode, &d, new_name, dentry_hash, bit_pos);
+	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
+			   bit_pos);
 
 	set_page_dirty(dentry_page);
 
@@ -690,21 +802,15 @@
 	return err;
 }
 
-int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
+		    struct inode *inode, nid_t ino, umode_t mode)
 {
-	struct qstr new_name;
 	int err = -EAGAIN;
 
-	new_name.name = fname_name(fname);
-	new_name.len = fname_len(fname);
-
 	if (f2fs_has_inline_dentry(dir))
-		err = f2fs_add_inline_entry(dir, &new_name, fname->usr_fname,
-							inode, ino, mode);
+		err = f2fs_add_inline_entry(dir, fname, inode, ino, mode);
 	if (err == -EAGAIN)
-		err = f2fs_add_regular_entry(dir, &new_name, fname->usr_fname,
-							inode, ino, mode);
+		err = f2fs_add_regular_entry(dir, fname, inode, ino, mode);
 
 	f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
 	return err;
@@ -717,17 +823,17 @@
 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 				struct inode *inode, nid_t ino, umode_t mode)
 {
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
 	struct page *page = NULL;
 	struct f2fs_dir_entry *de = NULL;
 	int err;
 
-	err = fscrypt_setup_filename(dir, name, 0, &fname);
+	err = f2fs_setup_filename(dir, name, 0, &fname);
 	if (err)
 		return err;
 
 	/*
-	 * An immature stakable filesystem shows a race condition between lookup
+	 * An immature stackable filesystem shows a race condition between lookup
 	 * and create. If we have same task when doing lookup and create, it's
 	 * definitely fine as expected by VFS normally. Otherwise, let's just
 	 * verify on-disk dentry one more time, which guarantees filesystem
@@ -745,7 +851,7 @@
 	} else {
 		err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
 	}
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 	return err;
 }
 
@@ -755,7 +861,7 @@
 	int err = 0;
 
 	down_write(&F2FS_I(inode)->i_sem);
-	page = f2fs_init_inode_metadata(inode, dir, NULL, NULL, NULL);
+	page = f2fs_init_inode_metadata(inode, dir, NULL, NULL);
 	if (IS_ERR(page)) {
 		err = PTR_ERR(page);
 		goto fail;
@@ -826,23 +932,27 @@
 			0);
 	set_page_dirty(page);
 
+	if (bit_pos == NR_DENTRY_IN_BLOCK &&
+		!f2fs_truncate_hole(dir, page->index, page->index + 1)) {
+		f2fs_clear_page_cache_dirty_tag(page);
+		clear_page_dirty_for_io(page);
+		ClearPageUptodate(page);
+
+		clear_page_private_gcing(page);
+
+		inode_dec_dirty_pages(dir);
+		f2fs_remove_dirty_inode(dir);
+
+		detach_page_private(page);
+		set_page_private(page, 0);
+	}
+	f2fs_put_page(page, 1);
+
 	dir->i_ctime = dir->i_mtime = current_time(dir);
 	f2fs_mark_inode_dirty_sync(dir, false);
 
 	if (inode)
 		f2fs_drop_nlink(dir, inode);
-
-	if (bit_pos == NR_DENTRY_IN_BLOCK &&
-		!f2fs_truncate_hole(dir, page->index, page->index + 1)) {
-		f2fs_clear_page_cache_dirty_tag(page);
-		clear_page_dirty_for_io(page);
-		f2fs_clear_page_private(page);
-		ClearPageUptodate(page);
-		clear_cold_data(page);
-		inode_dec_dirty_pages(dir);
-		f2fs_remove_dirty_inode(dir);
-	}
-	f2fs_put_page(page, 1);
 }
 
 bool f2fs_empty_dir(struct inode *dir)
@@ -980,11 +1090,11 @@
 	int err = 0;
 
 	if (IS_ENCRYPTED(inode)) {
-		err = fscrypt_get_encryption_info(inode);
-		if (err && err != -ENOKEY)
+		err = fscrypt_prepare_readdir(inode);
+		if (err)
 			goto out;
 
-		err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(F2FS_NAME_LEN, &fstr);
 		if (err < 0)
 			goto out;
 	}
@@ -1039,95 +1149,13 @@
 	return err < 0 ? err : 0;
 }
 
-static int f2fs_dir_open(struct inode *inode, struct file *filp)
-{
-	if (IS_ENCRYPTED(inode))
-		return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
-	return 0;
-}
-
 const struct file_operations f2fs_dir_operations = {
 	.llseek		= generic_file_llseek,
 	.read		= generic_read_dir,
 	.iterate_shared	= f2fs_readdir,
 	.fsync		= f2fs_sync_file,
-	.open		= f2fs_dir_open,
 	.unlocked_ioctl	= f2fs_ioctl,
 #ifdef CONFIG_COMPAT
 	.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)
-{
-	const struct dentry *parent = READ_ONCE(dentry->d_parent);
-	const struct inode *dir = READ_ONCE(parent->d_inode);
-	const struct f2fs_sb_info *sbi = F2FS_SB(dentry->d_sb);
-	struct qstr entry = QSTR_INIT(str, len);
-	char strbuf[DNAME_INLINE_LEN];
-	int res;
-
-	if (!dir || !IS_CASEFOLDED(dir))
-		goto fallback;
-
-	/*
-	 * If the dentry name is stored in-line, then it may be concurrently
-	 * modified by a rename.  If this happens, the VFS will eventually retry
-	 * the lookup, so it doesn't matter what ->d_compare() returns.
-	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
-	 * string.  Therefore, we have to copy the name into a temporary buffer.
-	 */
-	if (len <= DNAME_INLINE_LEN - 1) {
-		memcpy(strbuf, str, len);
-		strbuf[len] = 0;
-		entry.name = strbuf;
-		/* prevent compiler from optimizing out the temporary buffer */
-		barrier();
-	}
-
-	res = utf8_strncasecmp(sbi->s_encoding, name, &entry);
-	if (res >= 0)
-		return res;
-
-	if (f2fs_has_strict_mode(sbi))
-		return -EINVAL;
-fallback:
-	if (len != name->len)
-		return 1;
-	return !!memcmp(str, name->name, len);
-}
-
-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;
-	const struct inode *inode = READ_ONCE(dentry->d_inode);
-	unsigned char *norm;
-	int len, ret = 0;
-
-	if (!inode || !IS_CASEFOLDED(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 e600784..3ebf976 100644
--- a/fs/f2fs/extent_cache.c
+++ b/fs/f2fs/extent_cache.c
@@ -58,6 +58,29 @@
 	return re;
 }
 
+struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi,
+					struct rb_root_cached *root,
+					struct rb_node **parent,
+					unsigned long long key, bool *leftmost)
+{
+	struct rb_node **p = &root->rb_root.rb_node;
+	struct rb_entry *re;
+
+	while (*p) {
+		*parent = *p;
+		re = rb_entry(*parent, struct rb_entry, rb_node);
+
+		if (key < re->key) {
+			p = &(*p)->rb_left;
+		} else {
+			p = &(*p)->rb_right;
+			*leftmost = false;
+		}
+	}
+
+	return p;
+}
+
 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
 				struct rb_root_cached *root,
 				struct rb_node **parent,
@@ -166,7 +189,7 @@
 }
 
 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
-						struct rb_root_cached *root)
+				struct rb_root_cached *root, bool check_key)
 {
 #ifdef CONFIG_F2FS_CHECK_FS
 	struct rb_node *cur = rb_first_cached(root), *next;
@@ -183,13 +206,23 @@
 		cur_re = rb_entry(cur, struct rb_entry, rb_node);
 		next_re = rb_entry(next, struct rb_entry, rb_node);
 
+		if (check_key) {
+			if (cur_re->key > next_re->key) {
+				f2fs_info(sbi, "inconsistent rbtree, "
+					"cur(%llu) next(%llu)",
+					cur_re->key, next_re->key);
+				return false;
+			}
+			goto next;
+		}
+
 		if (cur_re->ofs + cur_re->len > next_re->ofs) {
 			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;
 		}
-
+next:
 		cur = next;
 	}
 #endif
@@ -325,9 +358,10 @@
 }
 
 /* return true, if inode page is changed */
-static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext)
+static void __f2fs_init_extent_tree(struct inode *inode, struct page *ipage)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_extent *i_ext = ipage ? &F2FS_INODE(ipage)->i_ext : NULL;
 	struct extent_tree *et;
 	struct extent_node *en;
 	struct extent_info ei;
@@ -335,16 +369,18 @@
 	if (!f2fs_may_extent_tree(inode)) {
 		/* drop largest extent */
 		if (i_ext && i_ext->len) {
+			f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 			i_ext->len = 0;
-			return true;
+			set_page_dirty(ipage);
+			return;
 		}
-		return false;
+		return;
 	}
 
 	et = __grab_extent_tree(inode);
 
 	if (!i_ext || !i_ext->len)
-		return false;
+		return;
 
 	get_extent_info(&ei, i_ext);
 
@@ -360,17 +396,14 @@
 	}
 out:
 	write_unlock(&et->lock);
-	return false;
 }
 
-bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext)
+void f2fs_init_extent_tree(struct inode *inode, struct page *ipage)
 {
-	bool ret =  __f2fs_init_extent_tree(inode, i_ext);
+	__f2fs_init_extent_tree(inode, ipage);
 
 	if (!F2FS_I(inode)->extent_tree)
 		set_inode_flag(inode, FI_NO_EXTENT);
-
-	return ret;
 }
 
 static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs,
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 031a17b..7aa929b 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/f2fs.h
  *
@@ -32,10 +32,8 @@
 #else
 #define f2fs_bug_on(sbi, condition)					\
 	do {								\
-		if (unlikely(condition)) {				\
-			WARN_ON(1);					\
+		if (WARN_ON(condition))					\
 			set_sbi_flag(sbi, SBI_NEED_FSCK);		\
-		}							\
 	} while (0)
 #endif
 
@@ -44,7 +42,6 @@
 	FAULT_KVMALLOC,
 	FAULT_PAGE_ALLOC,
 	FAULT_PAGE_GET,
-	FAULT_ALLOC_BIO,
 	FAULT_ALLOC_NID,
 	FAULT_ORPHAN,
 	FAULT_BLOCK,
@@ -74,7 +71,6 @@
 /*
  * For mount options
  */
-#define F2FS_MOUNT_BG_GC		0x00000001
 #define F2FS_MOUNT_DISABLE_ROLL_FORWARD	0x00000002
 #define F2FS_MOUNT_DISCARD		0x00000004
 #define F2FS_MOUNT_NOHEAP		0x00000008
@@ -88,11 +84,8 @@
 #define F2FS_MOUNT_NOBARRIER		0x00000800
 #define F2FS_MOUNT_FASTBOOT		0x00001000
 #define F2FS_MOUNT_EXTENT_CACHE		0x00002000
-#define F2FS_MOUNT_FORCE_FG_GC		0x00004000
 #define F2FS_MOUNT_DATA_FLUSH		0x00008000
 #define F2FS_MOUNT_FAULT_INJECTION	0x00010000
-#define F2FS_MOUNT_ADAPTIVE		0x00020000
-#define F2FS_MOUNT_LFS			0x00040000
 #define F2FS_MOUNT_USRQUOTA		0x00080000
 #define F2FS_MOUNT_GRPQUOTA		0x00100000
 #define F2FS_MOUNT_PRJQUOTA		0x00200000
@@ -101,6 +94,10 @@
 #define F2FS_MOUNT_RESERVE_ROOT		0x01000000
 #define F2FS_MOUNT_DISABLE_CHECKPOINT	0x02000000
 #define F2FS_MOUNT_NORECOVERY		0x04000000
+#define F2FS_MOUNT_ATGC			0x08000000
+#define F2FS_MOUNT_MERGE_CHECKPOINT	0x10000000
+#define	F2FS_MOUNT_GC_MERGE		0x20000000
+#define F2FS_MOUNT_COMPRESS_CACHE	0x40000000
 
 #define F2FS_OPTION(sbi)	((sbi)->mount_opt)
 #define clear_opt(sbi, option)	(F2FS_OPTION(sbi).opt &= ~F2FS_MOUNT_##option)
@@ -117,6 +114,8 @@
 			 */
 typedef u32 nid_t;
 
+#define COMPRESS_EXT_NUM		16
+
 struct f2fs_mount_info {
 	unsigned int opt;
 	int write_io_size_bits;		/* Write IO size bits */
@@ -137,11 +136,22 @@
 	int whint_mode;
 	int alloc_mode;			/* segment allocation policy */
 	int fsync_mode;			/* fsync policy */
-	bool test_dummy_encryption;	/* test dummy encryption */
+	int fs_mode;			/* fs mode: LFS or ADAPTIVE */
+	int bggc_mode;			/* bggc mode: off, on or sync */
+	struct fscrypt_dummy_policy dummy_enc_policy; /* test dummy encryption */
 	block_t unusable_cap_perc;	/* percentage for cap */
 	block_t unusable_cap;		/* Amount of space allowed to be
 					 * unusable when disabling checkpoint
 					 */
+
+	/* For compression */
+	unsigned char compress_algorithm;	/* algorithm type */
+	unsigned char compress_log_size;	/* cluster log size */
+	unsigned char compress_level;		/* compress level */
+	bool compress_chksum;			/* compressed data chksum */
+	unsigned char compress_ext_cnt;		/* extension count */
+	int compress_mode;			/* compression mode */
+	unsigned char extensions[COMPRESS_EXT_NUM][F2FS_EXTENSION_LEN];	/* extensions */
 };
 
 #define F2FS_FEATURE_ENCRYPT		0x0001
@@ -157,6 +167,8 @@
 #define F2FS_FEATURE_VERITY		0x0400
 #define F2FS_FEATURE_SB_CHKSUM		0x0800
 #define F2FS_FEATURE_CASEFOLD		0x1000
+#define F2FS_FEATURE_COMPRESSION	0x2000
+#define F2FS_FEATURE_RO			0x4000
 
 #define __F2FS_HAS_FEATURE(raw_super, mask)				\
 	((raw_super->feature & cpu_to_le32(mask)) != 0)
@@ -187,6 +199,7 @@
 #define	CP_DISCARD	0x00000010
 #define CP_TRIMMED	0x00000020
 #define CP_PAUSE	0x00000040
+#define CP_RESIZE 	0x00000080
 
 #define MAX_DISCARD_BLOCKS(sbi)		BLKS_PER_SEC(sbi)
 #define DEF_MAX_DISCARD_REQUEST		8	/* issue 8 discards per round */
@@ -256,6 +269,26 @@
 	unsigned int seq_id;	/* sequence id */
 };
 
+struct ckpt_req {
+	struct completion wait;		/* completion for checkpoint done */
+	struct llist_node llnode;	/* llist_node to be linked in wait queue */
+	int ret;			/* return code of checkpoint */
+	ktime_t queue_time;		/* request queued time */
+};
+
+struct ckpt_req_control {
+	struct task_struct *f2fs_issue_ckpt;	/* checkpoint task */
+	int ckpt_thread_ioprio;			/* checkpoint merge thread ioprio */
+	wait_queue_head_t ckpt_wait_queue;	/* waiting queue for wake-up */
+	atomic_t issued_ckpt;		/* # of actually issued ckpts */
+	atomic_t total_ckpt;		/* # of total ckpts */
+	atomic_t queued_ckpt;		/* # of queued ckpts */
+	struct llist_head issue_list;	/* list for command issue */
+	spinlock_t stat_lock;		/* lock for below checkpoint time stats */
+	unsigned int cur_time;		/* cur wait time in msec for currently issued checkpoint */
+	unsigned int peak_time;		/* peak wait time in msec until now */
+};
+
 /* for the bitmap indicate blocks to be discarded */
 struct discard_entry {
 	struct list_head list;	/* list head */
@@ -324,8 +357,8 @@
 	bool io_aware;			/* issue discard in idle time */
 	bool sync;			/* submit discard with REQ_SYNC flag */
 	bool ordered;			/* issue discard by lba order */
+	bool timeout;			/* discard timeout for put_super */
 	unsigned int granularity;	/* discard granularity */
-	int timeout;			/* discard timeout for put_super */
 };
 
 struct discard_cmd_control {
@@ -392,88 +425,6 @@
 	return size <= MAX_SIT_JENTRIES(journal);
 }
 
-/*
- * ioctl commands
- */
-#define F2FS_IOC_GETFLAGS		FS_IOC_GETFLAGS
-#define F2FS_IOC_SETFLAGS		FS_IOC_SETFLAGS
-#define F2FS_IOC_GETVERSION		FS_IOC_GETVERSION
-
-#define F2FS_IOCTL_MAGIC		0xf5
-#define F2FS_IOC_START_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 1)
-#define F2FS_IOC_COMMIT_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 2)
-#define F2FS_IOC_START_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 3)
-#define F2FS_IOC_RELEASE_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 4)
-#define F2FS_IOC_ABORT_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 5)
-#define F2FS_IOC_GARBAGE_COLLECT	_IOW(F2FS_IOCTL_MAGIC, 6, __u32)
-#define F2FS_IOC_WRITE_CHECKPOINT	_IO(F2FS_IOCTL_MAGIC, 7)
-#define F2FS_IOC_DEFRAGMENT		_IOWR(F2FS_IOCTL_MAGIC, 8,	\
-						struct f2fs_defragment)
-#define F2FS_IOC_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
-						struct f2fs_move_range)
-#define F2FS_IOC_FLUSH_DEVICE		_IOW(F2FS_IOCTL_MAGIC, 10,	\
-						struct f2fs_flush_device)
-#define F2FS_IOC_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,	\
-						struct f2fs_gc_range)
-#define F2FS_IOC_GET_FEATURES		_IOR(F2FS_IOCTL_MAGIC, 12, __u32)
-#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
-#define F2FS_IOC_GET_ENCRYPTION_PWSALT	FS_IOC_GET_ENCRYPTION_PWSALT
-
-/*
- * should be same as XFS_IOC_GOINGDOWN.
- * Flags for going down operation used by FS_IOC_GOINGDOWN
- */
-#define F2FS_IOC_SHUTDOWN	_IOR('X', 125, __u32)	/* Shutdown */
-#define F2FS_GOING_DOWN_FULLSYNC	0x0	/* going down with full sync */
-#define F2FS_GOING_DOWN_METASYNC	0x1	/* going down with metadata */
-#define F2FS_GOING_DOWN_NOSYNC		0x2	/* going down */
-#define F2FS_GOING_DOWN_METAFLUSH	0x3	/* going down with meta flush */
-#define F2FS_GOING_DOWN_NEED_FSCK	0x4	/* going down to trigger fsck */
-
-#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
-/*
- * ioctl commands in 32 bit emulation
- */
-#define F2FS_IOC32_GETFLAGS		FS_IOC32_GETFLAGS
-#define F2FS_IOC32_SETFLAGS		FS_IOC32_SETFLAGS
-#define F2FS_IOC32_GETVERSION		FS_IOC32_GETVERSION
-#endif
-
-#define F2FS_IOC_FSGETXATTR		FS_IOC_FSGETXATTR
-#define F2FS_IOC_FSSETXATTR		FS_IOC_FSSETXATTR
-
-struct f2fs_gc_range {
-	u32 sync;
-	u64 start;
-	u64 len;
-};
-
-struct f2fs_defragment {
-	u64 start;
-	u64 len;
-};
-
-struct f2fs_move_range {
-	u32 dst_fd;		/* destination fd */
-	u64 pos_in;		/* start position in src_fd */
-	u64 pos_out;		/* start position in dst_fd */
-	u64 len;		/* size to move */
-};
-
-struct f2fs_flush_device {
-	u32 dev_num;		/* device number to flush */
-	u32 segments;		/* # of segments to flush */
-};
-
 /* for inline stuff */
 #define DEF_INLINE_RESERVED_SIZE	1
 static inline int get_extra_isize(struct inode *inode);
@@ -498,6 +449,44 @@
  * For INODE and NODE manager
  */
 /* for directory operations */
+
+struct f2fs_filename {
+	/*
+	 * The filename the user specified.  This is NULL for some
+	 * filesystem-internal operations, e.g. converting an inline directory
+	 * to a non-inline one, or roll-forward recovering an encrypted dentry.
+	 */
+	const struct qstr *usr_fname;
+
+	/*
+	 * The on-disk filename.  For encrypted directories, this is encrypted.
+	 * This may be NULL for lookups in an encrypted dir without the key.
+	 */
+	struct fscrypt_str disk_name;
+
+	/* The dirhash of this filename */
+	f2fs_hash_t hash;
+
+#ifdef CONFIG_FS_ENCRYPTION
+	/*
+	 * For lookups in encrypted directories: either the buffer backing
+	 * disk_name, or a buffer that holds the decoded no-key name.
+	 */
+	struct fscrypt_str crypto_buf;
+#endif
+#ifdef CONFIG_UNICODE
+	/*
+	 * For casefolded directories: the casefolded name, but it's left NULL
+	 * if the original name is not valid Unicode, if the directory is both
+	 * casefolded and encrypted and its encryption key is unavailable, or if
+	 * the filesystem is doing an internal operation where usr_fname is also
+	 * NULL.  In all these cases we fall back to treating the name as an
+	 * opaque byte sequence.
+	 */
+	struct fscrypt_str cf_name;
+#endif
+};
+
 struct f2fs_dentry_ptr {
 	struct inode *inode;
 	void *bitmap;
@@ -552,6 +541,9 @@
 
 #define DEFAULT_RETRY_IO_COUNT	8	/* maximum retry read IO count */
 
+/* congestion wait timeout value, default: 20ms */
+#define	DEFAULT_IO_TIMEOUT	(msecs_to_jiffies(20))
+
 /* maximum retry quota flush count */
 #define DEFAULT_RETRY_QUOTA_FLUSH_COUNT		8
 
@@ -567,8 +559,13 @@
 
 struct rb_entry {
 	struct rb_node rb_node;		/* rb node located in rb-tree */
-	unsigned int ofs;		/* start offset of the entry */
-	unsigned int len;		/* length of the entry */
+	union {
+		struct {
+			unsigned int ofs;	/* start offset of the entry */
+			unsigned int len;	/* length of the entry */
+		};
+		unsigned long long key;		/* 64-bits key */
+	} __packed;
 };
 
 struct extent_info {
@@ -642,21 +639,26 @@
 #define FADVISE_MODIFIABLE_BITS	(FADVISE_COLD_BIT | FADVISE_HOT_BIT)
 
 #define file_is_cold(inode)	is_file(inode, FADVISE_COLD_BIT)
-#define file_wrong_pino(inode)	is_file(inode, FADVISE_LOST_PINO_BIT)
 #define file_set_cold(inode)	set_file(inode, FADVISE_COLD_BIT)
-#define file_lost_pino(inode)	set_file(inode, FADVISE_LOST_PINO_BIT)
 #define file_clear_cold(inode)	clear_file(inode, FADVISE_COLD_BIT)
+
+#define file_wrong_pino(inode)	is_file(inode, FADVISE_LOST_PINO_BIT)
+#define file_lost_pino(inode)	set_file(inode, FADVISE_LOST_PINO_BIT)
 #define file_got_pino(inode)	clear_file(inode, FADVISE_LOST_PINO_BIT)
+
 #define file_is_encrypt(inode)	is_file(inode, FADVISE_ENCRYPT_BIT)
 #define file_set_encrypt(inode)	set_file(inode, FADVISE_ENCRYPT_BIT)
-#define file_clear_encrypt(inode) clear_file(inode, FADVISE_ENCRYPT_BIT)
+
 #define file_enc_name(inode)	is_file(inode, FADVISE_ENC_NAME_BIT)
 #define file_set_enc_name(inode) set_file(inode, FADVISE_ENC_NAME_BIT)
+
 #define file_keep_isize(inode)	is_file(inode, FADVISE_KEEP_SIZE_BIT)
 #define file_set_keep_isize(inode) set_file(inode, FADVISE_KEEP_SIZE_BIT)
+
 #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)
 
@@ -668,6 +670,48 @@
 	MAX_GC_FAILURE
 };
 
+/* used for f2fs_inode_info->flags */
+enum {
+	FI_NEW_INODE,		/* indicate newly allocated inode */
+	FI_DIRTY_INODE,		/* indicate inode is dirty or not */
+	FI_AUTO_RECOVER,	/* indicate inode is recoverable */
+	FI_DIRTY_DIR,		/* indicate directory has dirty pages */
+	FI_INC_LINK,		/* need to increment i_nlink */
+	FI_ACL_MODE,		/* indicate acl mode */
+	FI_NO_ALLOC,		/* should not allocate any blocks */
+	FI_FREE_NID,		/* free allocated nide */
+	FI_NO_EXTENT,		/* not to use the extent cache */
+	FI_INLINE_XATTR,	/* used for inline xattr */
+	FI_INLINE_DATA,		/* used for inline data*/
+	FI_INLINE_DENTRY,	/* used for inline dentry */
+	FI_APPEND_WRITE,	/* inode has appended data */
+	FI_UPDATE_WRITE,	/* inode has in-place-update data */
+	FI_NEED_IPU,		/* used for ipu per file */
+	FI_ATOMIC_FILE,		/* indicate atomic file */
+	FI_ATOMIC_COMMIT,	/* indicate the state of atomical committing */
+	FI_VOLATILE_FILE,	/* indicate volatile file */
+	FI_FIRST_BLOCK_WRITTEN,	/* indicate #0 data block was written */
+	FI_DROP_CACHE,		/* drop dirty page cache */
+	FI_DATA_EXIST,		/* indicate data exists */
+	FI_INLINE_DOTS,		/* indicate inline dot dentries */
+	FI_DO_DEFRAG,		/* indicate defragment is running */
+	FI_DIRTY_FILE,		/* indicate regular/symlink has dirty pages */
+	FI_NO_PREALLOC,		/* indicate skipped preallocated blocks */
+	FI_HOT_DATA,		/* indicate file is hot */
+	FI_EXTRA_ATTR,		/* indicate file has extra attribute */
+	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 */
+	FI_COMPRESSED_FILE,	/* indicate file's data can be compressed */
+	FI_COMPRESS_CORRUPT,	/* indicate compressed cluster is corrupted */
+	FI_MMAP_FILE,		/* indicate file was mmapped */
+	FI_ENABLE_COMPRESS,	/* enable compression in "user" compression mode */
+	FI_COMPRESS_RELEASED,	/* compressed blocks were released */
+	FI_ALIGNED_WRITE,	/* enable aligned write */
+	FI_MAX,			/* max flag, never be used */
+};
+
 struct f2fs_inode_info {
 	struct inode vfs_inode;		/* serve a vfs inode */
 	unsigned long i_flags;		/* keep an inode flags for ioctl */
@@ -680,7 +724,7 @@
 	umode_t i_acl_mode;		/* keep file acl mode temporarily */
 
 	/* Use below internally in f2fs*/
-	unsigned long flags;		/* use to pass per-file flags */
+	unsigned long flags[BITS_TO_LONGS(FI_MAX)];	/* use to pass per-file flags */
 	struct rw_semaphore i_sem;	/* protect fi info */
 	atomic_t dirty_pages;		/* # of dirty pages */
 	f2fs_hash_t chash;		/* hash value of given file name */
@@ -689,6 +733,7 @@
 	struct task_struct *cp_task;	/* separate cp/wb IO stats*/
 	nid_t i_xattr_nid;		/* node id that contains xattrs */
 	loff_t	last_disk_size;		/* lastly written file size */
+	spinlock_t i_size_lock;		/* protect last_disk_size */
 
 #ifdef CONFIG_QUOTA
 	struct dquot *i_dquot[MAXQUOTAS];
@@ -702,6 +747,7 @@
 	struct list_head inmem_pages;	/* inmemory pages managed by f2fs */
 	struct task_struct *inmem_task;	/* store inmemory task */
 	struct mutex inmem_lock;	/* lock for inmemory pages */
+	pgoff_t ra_offset;		/* ongoing readahead offset */
 	struct extent_tree *extent_tree;	/* cached extent_tree entry */
 
 	/* avoid racing between foreground op and gc */
@@ -714,6 +760,14 @@
 	int i_inline_xattr_size;	/* inline xattr size */
 	struct timespec64 i_crtime;	/* inode creation time */
 	struct timespec64 i_disk_time[4];/* inode disk times */
+
+	/* for file compress */
+	atomic_t i_compr_blocks;		/* # of compressed blocks */
+	unsigned char i_compress_algorithm;	/* algorithm type */
+	unsigned char i_log_cluster_size;	/* log of cluster size */
+	unsigned char i_compress_level;		/* compress level (lz4hc,zstd) */
+	unsigned short i_compress_flag;		/* compress flag */
+	unsigned int i_cluster_size;		/* cluster size */
 };
 
 static inline void get_extent_info(struct extent_info *ext,
@@ -816,7 +870,7 @@
 	/* NAT cache management */
 	struct radix_tree_root nat_root;/* root of the nat entry cache */
 	struct radix_tree_root nat_set_root;/* root of the nat set cache */
-	struct rw_semaphore nat_tree_lock;	/* protect nat_tree_lock */
+	struct rw_semaphore nat_tree_lock;	/* protect nat entry tree */
 	struct list_head nat_entries;	/* cached nat entry list (clean) */
 	spinlock_t nat_list_lock;	/* protect clean nat entry list */
 	unsigned int nat_cnt[MAX_NAT_STATE]; /* the # of cached nat entries */
@@ -888,7 +942,10 @@
  */
 #define	NR_CURSEG_DATA_TYPE	(3)
 #define NR_CURSEG_NODE_TYPE	(3)
-#define NR_CURSEG_TYPE	(NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
+#define NR_CURSEG_INMEM_TYPE	(2)
+#define NR_CURSEG_RO_TYPE	(2)
+#define NR_CURSEG_PERSIST_TYPE	(NR_CURSEG_DATA_TYPE + NR_CURSEG_NODE_TYPE)
+#define NR_CURSEG_TYPE		(NR_CURSEG_INMEM_TYPE + NR_CURSEG_PERSIST_TYPE)
 
 enum {
 	CURSEG_HOT_DATA	= 0,	/* directory entry blocks */
@@ -897,7 +954,11 @@
 	CURSEG_HOT_NODE,	/* direct node blocks of directory files */
 	CURSEG_WARM_NODE,	/* direct node blocks of normal files */
 	CURSEG_COLD_NODE,	/* indirect node blocks */
-	NO_CHECK_TYPE,
+	NR_PERSISTENT_LOG,	/* number of persistent log */
+	CURSEG_COLD_DATA_PINNED = NR_PERSISTENT_LOG,
+				/* pinned file that needs consecutive block address */
+	CURSEG_ALL_DATA_ATGC,	/* SSR alloctor in hot/warm/cold data area */
+	NO_CHECK_TYPE,		/* number of persistent & inmem log */
 };
 
 struct flush_cmd {
@@ -1025,6 +1086,7 @@
 enum cp_reason_type {
 	CP_NO_NEEDED,
 	CP_NON_REGULAR,
+	CP_COMPRESSED,
 	CP_HARDLINK,
 	CP_SB_NEED_CP,
 	CP_WRONG_PINO,
@@ -1036,8 +1098,9 @@
 };
 
 enum iostat_type {
-	APP_DIRECT_IO,			/* app direct IOs */
-	APP_BUFFERED_IO,		/* app buffered IOs */
+	/* WRITE IO */
+	APP_DIRECT_IO,			/* app direct write IOs */
+	APP_BUFFERED_IO,		/* app buffered write IOs */
 	APP_WRITE_IO,			/* app write IOs */
 	APP_MAPPED_IO,			/* app mapped IOs */
 	FS_DATA_IO,			/* data IOs from kworker/fsync/reclaimer */
@@ -1048,6 +1111,19 @@
 	FS_CP_DATA_IO,			/* data IOs from checkpoint */
 	FS_CP_NODE_IO,			/* node IOs from checkpoint */
 	FS_CP_META_IO,			/* meta IOs from checkpoint */
+
+	/* READ IO */
+	APP_DIRECT_READ_IO,		/* app direct read IOs */
+	APP_BUFFERED_READ_IO,		/* app buffered read IOs */
+	APP_READ_IO,			/* app read IOs */
+	APP_MAPPED_READ_IO,		/* app mapped read IOs */
+	FS_DATA_READ_IO,		/* data read IOs */
+	FS_GDATA_READ_IO,		/* data read IOs from background gc */
+	FS_CDATA_READ_IO,		/* compressed data read IOs */
+	FS_NODE_READ_IO,		/* node read IOs */
+	FS_META_READ_IO,		/* meta read IOs */
+
+	/* other */
 	FS_DISCARD,			/* discard */
 	NR_IO_TYPE,
 };
@@ -1063,12 +1139,15 @@
 	block_t old_blkaddr;	/* old block address before Cow */
 	struct page *page;	/* page to be written */
 	struct page *encrypted_page;	/* encrypted page */
+	struct page *compressed_page;	/* compressed page */
 	struct list_head list;		/* serialize IOs */
 	bool submitted;		/* indicate IO submission */
 	int need_lock;		/* indicate we need to lock cp_rwsem */
 	bool in_list;		/* indicate fio is in io_list */
 	bool is_por;		/* indicate IO is from recovery or not */
 	bool retry;		/* need to reallocate block address */
+	int compr_blocks;	/* # of compressed block addresses */
+	bool encrypted;		/* indicate file is encrypted */
 	enum iostat_type io_type;	/* io type */
 	struct writeback_control *io_wbc; /* writeback control */
 	struct bio **bio;		/* bio for ipu */
@@ -1076,6 +1155,11 @@
 	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 */
@@ -1085,6 +1169,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])
@@ -1098,6 +1184,7 @@
 #ifdef CONFIG_BLK_DEV_ZONED
 	unsigned int nr_blkz;		/* Total number of zones */
 	unsigned long *blkz_seq;	/* Bitmap indicating sequential zones */
+	block_t *zone_capacity_blocks;  /* Array of zone capacity in blks */
 #endif
 };
 
@@ -1117,6 +1204,18 @@
 	unsigned long ino_num;			/* number of entries */
 };
 
+/* for GC_AT */
+struct atgc_management {
+	bool atgc_enabled;			/* ATGC is enabled or not */
+	struct rb_root_cached root;		/* root of victim rb-tree */
+	struct list_head victim_list;		/* linked with all victim entries */
+	unsigned int victim_count;		/* victim count in rb-tree */
+	unsigned int candidate_ratio;		/* candidate ratio */
+	unsigned int max_candidate_count;	/* max candidate count */
+	unsigned int age_weight;		/* age weight, vblock_weight = 100 - age_weight */
+	unsigned long long age_threshold;	/* age threshold */
+};
+
 /* For s_flag in struct f2fs_sb_info */
 enum {
 	SBI_IS_DIRTY,				/* dirty flag for checkpoint */
@@ -1149,7 +1248,23 @@
 	GC_NORMAL,
 	GC_IDLE_CB,
 	GC_IDLE_GREEDY,
-	GC_URGENT,
+	GC_IDLE_AT,
+	GC_URGENT_HIGH,
+	GC_URGENT_LOW,
+};
+
+enum {
+	BGGC_MODE_ON,		/* background gc is on */
+	BGGC_MODE_OFF,		/* background gc is off */
+	BGGC_MODE_SYNC,		/*
+				 * background gc is on, migrating blocks
+				 * like foreground gc
+				 */
+};
+
+enum {
+	FS_MODE_ADAPTIVE,	/* use both lfs/ssr allocation */
+	FS_MODE_LFS,		/* use lfs allocation only */
 };
 
 enum {
@@ -1169,12 +1284,243 @@
 	FSYNC_MODE_NOBARRIER,	/* fsync behaves nobarrier based on posix */
 };
 
-#ifdef CONFIG_FS_ENCRYPTION
-#define DUMMY_ENCRYPTION_ENABLED(sbi) \
-			(unlikely(F2FS_OPTION(sbi).test_dummy_encryption))
-#else
-#define DUMMY_ENCRYPTION_ENABLED(sbi) (0)
-#endif
+enum {
+	COMPR_MODE_FS,		/*
+				 * automatically compress compression
+				 * enabled files
+				 */
+	COMPR_MODE_USER,	/*
+				 * automatical compression is disabled.
+				 * user can control the file compression
+				 * using ioctls
+				 */
+};
+
+static inline int f2fs_test_bit(unsigned int nr, char *addr);
+static inline void f2fs_set_bit(unsigned int nr, char *addr);
+static inline void f2fs_clear_bit(unsigned int nr, char *addr);
+
+/*
+ * Layout of f2fs page.private:
+ *
+ * Layout A: lowest bit should be 1
+ * | bit0 = 1 | bit1 | bit2 | ... | bit MAX | private data .... |
+ * bit 0	PAGE_PRIVATE_NOT_POINTER
+ * bit 1	PAGE_PRIVATE_ATOMIC_WRITE
+ * bit 2	PAGE_PRIVATE_DUMMY_WRITE
+ * bit 3	PAGE_PRIVATE_ONGOING_MIGRATION
+ * bit 4	PAGE_PRIVATE_INLINE_INODE
+ * bit 5	PAGE_PRIVATE_REF_RESOURCE
+ * bit 6-	f2fs private data
+ *
+ * Layout B: lowest bit should be 0
+ * page.private is a wrapped pointer.
+ */
+enum {
+	PAGE_PRIVATE_NOT_POINTER,		/* private contains non-pointer data */
+	PAGE_PRIVATE_ATOMIC_WRITE,		/* data page from atomic write path */
+	PAGE_PRIVATE_DUMMY_WRITE,		/* data page for padding aligned IO */
+	PAGE_PRIVATE_ONGOING_MIGRATION,		/* data page which is on-going migrating */
+	PAGE_PRIVATE_INLINE_INODE,		/* inode page contains inline data */
+	PAGE_PRIVATE_REF_RESOURCE,		/* dirty page has referenced resources */
+	PAGE_PRIVATE_MAX
+};
+
+#define PAGE_PRIVATE_GET_FUNC(name, flagname) \
+static inline bool page_private_##name(struct page *page) \
+{ \
+	return PagePrivate(page) && \
+		test_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)) && \
+		test_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
+}
+
+#define PAGE_PRIVATE_SET_FUNC(name, flagname) \
+static inline void set_page_private_##name(struct page *page) \
+{ \
+	if (!PagePrivate(page)) { \
+		get_page(page); \
+		SetPagePrivate(page); \
+		set_page_private(page, 0); \
+	} \
+	set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page)); \
+	set_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
+}
+
+#define PAGE_PRIVATE_CLEAR_FUNC(name, flagname) \
+static inline void clear_page_private_##name(struct page *page) \
+{ \
+	clear_bit(PAGE_PRIVATE_##flagname, &page_private(page)); \
+	if (page_private(page) == 1 << PAGE_PRIVATE_NOT_POINTER) { \
+		set_page_private(page, 0); \
+		if (PagePrivate(page)) { \
+			ClearPagePrivate(page); \
+			put_page(page); \
+		}\
+	} \
+}
+
+PAGE_PRIVATE_GET_FUNC(nonpointer, NOT_POINTER);
+PAGE_PRIVATE_GET_FUNC(reference, REF_RESOURCE);
+PAGE_PRIVATE_GET_FUNC(inline, INLINE_INODE);
+PAGE_PRIVATE_GET_FUNC(gcing, ONGOING_MIGRATION);
+PAGE_PRIVATE_GET_FUNC(atomic, ATOMIC_WRITE);
+PAGE_PRIVATE_GET_FUNC(dummy, DUMMY_WRITE);
+
+PAGE_PRIVATE_SET_FUNC(reference, REF_RESOURCE);
+PAGE_PRIVATE_SET_FUNC(inline, INLINE_INODE);
+PAGE_PRIVATE_SET_FUNC(gcing, ONGOING_MIGRATION);
+PAGE_PRIVATE_SET_FUNC(atomic, ATOMIC_WRITE);
+PAGE_PRIVATE_SET_FUNC(dummy, DUMMY_WRITE);
+
+PAGE_PRIVATE_CLEAR_FUNC(reference, REF_RESOURCE);
+PAGE_PRIVATE_CLEAR_FUNC(inline, INLINE_INODE);
+PAGE_PRIVATE_CLEAR_FUNC(gcing, ONGOING_MIGRATION);
+PAGE_PRIVATE_CLEAR_FUNC(atomic, ATOMIC_WRITE);
+PAGE_PRIVATE_CLEAR_FUNC(dummy, DUMMY_WRITE);
+
+static inline unsigned long get_page_private_data(struct page *page)
+{
+	unsigned long data = page_private(page);
+
+	if (!test_bit(PAGE_PRIVATE_NOT_POINTER, &data))
+		return 0;
+	return data >> PAGE_PRIVATE_MAX;
+}
+
+static inline void set_page_private_data(struct page *page, unsigned long data)
+{
+	if (!PagePrivate(page)) {
+		get_page(page);
+		SetPagePrivate(page);
+		set_page_private(page, 0);
+	}
+	set_bit(PAGE_PRIVATE_NOT_POINTER, &page_private(page));
+	page_private(page) |= data << PAGE_PRIVATE_MAX;
+}
+
+static inline void clear_page_private_data(struct page *page)
+{
+	page_private(page) &= (1 << PAGE_PRIVATE_MAX) - 1;
+	if (page_private(page) == 1 << PAGE_PRIVATE_NOT_POINTER) {
+		set_page_private(page, 0);
+		if (PagePrivate(page)) {
+			ClearPagePrivate(page);
+			put_page(page);
+		}
+	}
+}
+
+/* For compression */
+enum compress_algorithm_type {
+	COMPRESS_LZO,
+	COMPRESS_LZ4,
+	COMPRESS_ZSTD,
+	COMPRESS_LZORLE,
+	COMPRESS_MAX,
+};
+
+enum compress_flag {
+	COMPRESS_CHKSUM,
+	COMPRESS_MAX_FLAG,
+};
+
+#define	COMPRESS_WATERMARK			20
+#define	COMPRESS_PERCENT			20
+
+#define COMPRESS_DATA_RESERVED_SIZE		4
+struct compress_data {
+	__le32 clen;			/* compressed data size */
+	__le32 chksum;			/* compressed data chksum */
+	__le32 reserved[COMPRESS_DATA_RESERVED_SIZE];	/* reserved */
+	u8 cdata[];			/* compressed data */
+};
+
+#define COMPRESS_HEADER_SIZE	(sizeof(struct compress_data))
+
+#define F2FS_COMPRESSED_PAGE_MAGIC	0xF5F2C000
+
+#define	COMPRESS_LEVEL_OFFSET	8
+
+/* compress context */
+struct compress_ctx {
+	struct inode *inode;		/* inode the context belong to */
+	pgoff_t cluster_idx;		/* cluster index number */
+	unsigned int cluster_size;	/* page count in cluster */
+	unsigned int log_cluster_size;	/* log of cluster size */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	struct page **cpages;		/* pages store compressed data in cluster */
+	unsigned int nr_cpages;		/* total page number in cpages */
+	void *rbuf;			/* virtual mapped address on rpages */
+	struct compress_data *cbuf;	/* virtual mapped address on cpages */
+	size_t rlen;			/* valid data length in rbuf */
+	size_t clen;			/* valid data length in cbuf */
+	void *private;			/* payload buffer for specified compression algorithm */
+	void *private2;			/* extra payload buffer */
+};
+
+/* compress context for write IO path */
+struct compress_io_ctx {
+	u32 magic;			/* magic number to indicate page is compressed */
+	struct inode *inode;		/* inode the context belong to */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	atomic_t pending_pages;		/* in-flight compressed page count */
+};
+
+/* Context for decompressing one cluster on the read IO path */
+struct decompress_io_ctx {
+	u32 magic;			/* magic number to indicate page is compressed */
+	struct inode *inode;		/* inode the context belong to */
+	pgoff_t cluster_idx;		/* cluster index number */
+	unsigned int cluster_size;	/* page count in cluster */
+	unsigned int log_cluster_size;	/* log of cluster size */
+	struct page **rpages;		/* pages store raw data in cluster */
+	unsigned int nr_rpages;		/* total page number in rpages */
+	struct page **cpages;		/* pages store compressed data in cluster */
+	unsigned int nr_cpages;		/* total page number in cpages */
+	struct page **tpages;		/* temp pages to pad holes in cluster */
+	void *rbuf;			/* virtual mapped address on rpages */
+	struct compress_data *cbuf;	/* virtual mapped address on cpages */
+	size_t rlen;			/* valid data length in rbuf */
+	size_t clen;			/* valid data length in cbuf */
+
+	/*
+	 * The number of compressed pages remaining to be read in this cluster.
+	 * This is initially nr_cpages.  It is decremented by 1 each time a page
+	 * has been read (or failed to be read).  When it reaches 0, the cluster
+	 * is decompressed (or an error is reported).
+	 *
+	 * If an error occurs before all the pages have been submitted for I/O,
+	 * then this will never reach 0.  In this case the I/O submitter is
+	 * responsible for calling f2fs_decompress_end_io() instead.
+	 */
+	atomic_t remaining_pages;
+
+	/*
+	 * Number of references to this decompress_io_ctx.
+	 *
+	 * One reference is held for I/O completion.  This reference is dropped
+	 * after the pagecache pages are updated and unlocked -- either after
+	 * decompression (and verity if enabled), or after an error.
+	 *
+	 * In addition, each compressed page holds a reference while it is in a
+	 * bio.  These references are necessary prevent compressed pages from
+	 * being freed while they are still in a bio.
+	 */
+	refcount_t refcnt;
+
+	bool failed;			/* IO error occurred before decompression? */
+	bool need_verity;		/* need fs-verity verification after decompression? */
+	void *private;			/* payload buffer for specified decompression algorithm */
+	void *private2;			/* extra payload buffer */
+	struct work_struct verity_work;	/* work to verify the decompressed pages */
+};
+
+#define NULL_CLUSTER			((unsigned int)(~0))
+#define MIN_COMPRESS_LOG_SIZE		2
+#define MAX_COMPRESS_LOG_SIZE		8
+#define MAX_COMPRESS_WINDOW_SIZE(log_size)	((PAGE_SIZE) << (log_size))
 
 struct f2fs_sb_info {
 	struct super_block *sb;			/* pointer to VFS super block */
@@ -1184,10 +1530,6 @@
 	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 */
@@ -1212,15 +1554,16 @@
 	int cur_cp_pack;			/* remain current cp pack */
 	spinlock_t cp_lock;			/* for flag in ckpt */
 	struct inode *meta_inode;		/* cache meta blocks */
-	struct mutex cp_mutex;			/* checkpoint procedure lock */
+	struct rw_semaphore cp_global_sem;	/* checkpoint procedure lock */
 	struct rw_semaphore cp_rwsem;		/* blocking FS operations */
 	struct rw_semaphore node_write;		/* locking node writes */
 	struct rw_semaphore node_change;	/* locking node change */
 	wait_queue_head_t cp_wait;
 	unsigned long last_time[MAX_TIME];	/* to store time in jiffies */
 	long interval_time[MAX_TIME];		/* to store thresholds */
+	struct ckpt_req_control cprc_info;	/* for checkpoint request control */
 
-	struct inode_management im[MAX_INO_ENTRY];      /* manage inode cache */
+	struct inode_management im[MAX_INO_ENTRY];	/* manage inode cache */
 
 	spinlock_t fsync_node_lock;		/* for node entry lock */
 	struct list_head fsync_node_list;	/* node list head */
@@ -1257,12 +1600,11 @@
 	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 */
 	int dir_level;				/* directory level */
 	int readdir_ra;				/* readahead inode in readdir */
+	u64 max_io_bytes;			/* max io bytes to merge IOs */
 
 	block_t user_block_count;		/* # of user blocks */
 	block_t total_valid_block_count;	/* # of valid blocks */
@@ -1291,18 +1633,24 @@
 	struct f2fs_mount_info mount_opt;	/* mount options */
 
 	/* for cleaning operations */
-	struct mutex gc_mutex;			/* mutex for GC */
+	struct rw_semaphore gc_lock;		/*
+						 * semaphore for GC, avoid
+						 * race between GC and GC or CP
+						 */
 	struct f2fs_gc_kthread	*gc_thread;	/* GC thread */
+	struct atgc_management am;		/* atgc management */
 	unsigned int cur_victim_sec;		/* current victim section num */
 	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 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;
@@ -1326,11 +1674,11 @@
 	atomic_t inline_xattr;			/* # of inline_xattr inodes */
 	atomic_t inline_inode;			/* # of inline_data inodes */
 	atomic_t inline_dir;			/* # of inline_dentry inodes */
-	atomic_t aw_cnt;			/* # of atomic writes */
+	atomic_t compr_inode;			/* # of compressed inodes */
+	atomic64_t compr_blocks;		/* # of compressed blocks */
 	atomic_t vw_cnt;			/* # of volatile writes */
 	atomic_t max_aw_cnt;			/* max # of atomic writes */
 	atomic_t max_vw_cnt;			/* max # of volatile writes */
-	int bg_gc;				/* background gc calls */
 	unsigned int io_skip_bggc;		/* skip background gc for in-flight IO */
 	unsigned int other_skip_bggc;		/* skip background gc for other reasons */
 	unsigned int ndirty_inode[NR_INODE_TYPE];	/* # of dirty inodes */
@@ -1339,13 +1687,26 @@
 
 	/* For app/fs IO statistics */
 	spinlock_t iostat_lock;
-	unsigned long long write_iostat[NR_IO_TYPE];
+	unsigned long long rw_iostat[NR_IO_TYPE];
+	unsigned long long prev_rw_iostat[NR_IO_TYPE];
 	bool iostat_enable;
+	unsigned long iostat_next_period;
+	unsigned int iostat_period_ms;
+
+	/* to attach REQ_META|REQ_FUA flags */
+	unsigned int data_io_flag;
+	unsigned int node_io_flag;
 
 	/* For sysfs suppport */
-	struct kobject s_kobj;
+	struct kobject s_kobj;			/* /sys/fs/f2fs/<devname> */
 	struct completion s_kobj_unregister;
 
+	struct kobject s_stat_kobj;		/* /sys/fs/f2fs/<devname>/stat */
+	struct completion s_stat_kobj_unregister;
+
+	struct kobject s_feature_list_kobj;		/* /sys/fs/f2fs/<devname>/feature_list */
+	struct completion s_feature_list_kobj_unregister;
+
 	/* For shrinker support */
 	struct list_head s_list;
 	int s_ndevs;				/* number of devices */
@@ -1364,6 +1725,27 @@
 
 	/* Precomputed FS UUID checksum for seeding other checksums */
 	__u32 s_chksum_seed;
+
+	struct workqueue_struct *post_read_wq;	/* post read workqueue */
+
+	struct kmem_cache *inline_xattr_slab;	/* inline xattr entry */
+	unsigned int inline_xattr_slab_size;	/* default inline xattr slab size */
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	struct kmem_cache *page_array_slab;	/* page array entry */
+	unsigned int page_array_slab_size;	/* default page array slab size */
+
+	/* For runtime compression statistics */
+	u64 compr_written_block;
+	u64 compr_saved_block;
+	u32 compr_new_inode;
+
+	/* For compressed block cache */
+	struct inode *compress_inode;		/* cache compressed blocks */
+	unsigned int compress_percent;		/* cache page percentage */
+	unsigned int compress_watermark;	/* cache page watermark */
+	atomic_t compress_page_hit;		/* cache hit count */
+#endif
 };
 
 struct f2fs_private_dio {
@@ -1415,13 +1797,6 @@
 	return sbi->s_ndevs > 1;
 }
 
-/* For write statistics. Suppose sector size is 512 bytes,
- * and the return value is in kbytes. s is of struct f2fs_sb_info.
- */
-#define BD_PART_WRITTEN(s)						 \
-(((u64)part_stat_read((s)->sb->s_bdev->bd_part, sectors[STAT_WRITE]) -   \
-		(s)->sectors_written_start) >> 1)
-
 static inline void f2fs_update_time(struct f2fs_sb_info *sbi, int type)
 {
 	unsigned long now = jiffies;
@@ -1962,6 +2337,7 @@
 static inline void *__bitmap_ptr(struct f2fs_sb_info *sbi, int flag)
 {
 	struct f2fs_checkpoint *ckpt = F2FS_CKPT(sbi);
+	void *tmp_ptr = &ckpt->sit_nat_version_bitmap;
 	int offset;
 
 	if (is_set_ckpt_flags(sbi, CP_LARGE_NAT_BITMAP_FLAG)) {
@@ -1971,7 +2347,7 @@
 		 * if large_nat_bitmap feature is enabled, leave checksum
 		 * protection for all nat/sit bitmaps.
 		 */
-		return &ckpt->sit_nat_version_bitmap + offset + sizeof(__le32);
+		return tmp_ptr + offset + sizeof(__le32);
 	}
 
 	if (__cp_payload(sbi) > 0) {
@@ -1982,7 +2358,7 @@
 	} else {
 		offset = (flag == NAT_BITMAP) ?
 			le32_to_cpu(ckpt->sit_ver_bitmap_bytesize) : 0;
-		return &ckpt->sit_nat_version_bitmap + offset;
+		return tmp_ptr + offset;
 	}
 }
 
@@ -2104,7 +2480,7 @@
 		dquot_free_inode(inode);
 	} else {
 		if (unlikely(inode->i_blocks == 0)) {
-			f2fs_warn(sbi, "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
+			f2fs_warn(sbi, "dec_valid_node_count: inconsistent i_blocks, ino:%lu, iblocks:%llu",
 				  inode->i_ino,
 				  (unsigned long long)inode->i_blocks);
 			set_sbi_flag(sbi, SBI_NEED_FSCK);
@@ -2221,46 +2597,37 @@
 	return entry;
 }
 
-static inline struct bio *f2fs_bio_alloc(struct f2fs_sb_info *sbi,
-						int npages, bool no_fail)
+static inline bool is_inflight_io(struct f2fs_sb_info *sbi, int type)
 {
-	struct bio *bio;
-
-	if (no_fail) {
-		/* No failure on bio allocation */
-		bio = bio_alloc(GFP_NOIO, npages);
-		if (!bio)
-			bio = bio_alloc(GFP_NOIO | __GFP_NOFAIL, npages);
-		return bio;
-	}
-	if (time_to_inject(sbi, FAULT_ALLOC_BIO)) {
-		f2fs_show_injection_info(sbi, FAULT_ALLOC_BIO);
-		return NULL;
-	}
-
-	return bio_alloc(GFP_KERNEL, npages);
-}
-
-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) ||
 		get_pages(sbi, F2FS_DIO_READ) ||
 		get_pages(sbi, F2FS_DIO_WRITE))
-		return false;
+		return true;
 
 	if (type != DISCARD_TIME && SM_I(sbi) && SM_I(sbi)->dcc_info &&
 			atomic_read(&SM_I(sbi)->dcc_info->queued_discard))
-		return false;
+		return true;
 
 	if (SM_I(sbi) && SM_I(sbi)->fcc_info &&
 			atomic_read(&SM_I(sbi)->fcc_info->queued_flush))
+		return true;
+	return false;
+}
+
+static inline bool is_idle(struct f2fs_sb_info *sbi, int type)
+{
+	if (sbi->gc_mode == GC_URGENT_HIGH)
+		return true;
+
+	if (is_inflight_io(sbi, type))
 		return false;
 
+	if (sbi->gc_mode == GC_URGENT_LOW &&
+			(type == DISCARD_TIME || type == GC_TIME))
+		return true;
+
 	return f2fs_time_over(sbi, type);
 }
 
@@ -2292,7 +2659,7 @@
 }
 
 static inline int f2fs_has_extra_attr(struct inode *inode);
-static inline block_t datablock_addr(struct inode *inode,
+static inline block_t data_blkaddr(struct inode *inode,
 			struct page *node_page, unsigned int offset)
 {
 	struct f2fs_node *raw_node;
@@ -2302,9 +2669,9 @@
 
 	raw_node = F2FS_NODE(node_page);
 
-	/* from GC path only */
 	if (is_inode) {
 		if (!inode)
+			/* from GC path only */
 			base = offset_in_addr(&raw_node->i);
 		else if (f2fs_has_extra_attr(inode))
 			base = get_extra_isize(inode);
@@ -2314,6 +2681,11 @@
 	return le32_to_cpu(addr_array[base + offset]);
 }
 
+static inline block_t f2fs_data_blkaddr(struct dnode_of_data *dn)
+{
+	return data_blkaddr(dn->inode, dn->node_page, dn->ofs_in_node);
+}
+
 static inline int f2fs_test_bit(unsigned int nr, char *addr)
 {
 	int mask;
@@ -2377,11 +2749,13 @@
 /*
  * On-disk inode flags (f2fs_inode::i_flags)
  */
+#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 */
+#define F2FS_NOCOMP_FL			0x00000400 /* Don't compress */
 #define F2FS_INDEX_FL			0x00001000 /* hash-indexed directory */
 #define F2FS_DIRSYNC_FL			0x00010000 /* dirsync behaviour (directories only) */
 #define F2FS_PROJINHERIT_FL		0x20000000 /* Create with parents projid */
@@ -2390,7 +2764,7 @@
 /* Flags that should be inherited by new inodes from their parent. */
 #define F2FS_FL_INHERITED (F2FS_SYNC_FL | F2FS_NODUMP_FL | F2FS_NOATIME_FL | \
 			   F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
-			   F2FS_CASEFOLD_FL)
+			   F2FS_CASEFOLD_FL | F2FS_COMPR_FL | F2FS_NOCOMP_FL)
 
 /* Flags that are appropriate for regular files (all but dir-specific ones). */
 #define F2FS_REG_FLMASK		(~(F2FS_DIRSYNC_FL | F2FS_PROJINHERIT_FL | \
@@ -2409,41 +2783,6 @@
 		return flags & F2FS_OTHER_FLMASK;
 }
 
-/* used for f2fs_inode_info->flags */
-enum {
-	FI_NEW_INODE,		/* indicate newly allocated inode */
-	FI_DIRTY_INODE,		/* indicate inode is dirty or not */
-	FI_AUTO_RECOVER,	/* indicate inode is recoverable */
-	FI_DIRTY_DIR,		/* indicate directory has dirty pages */
-	FI_INC_LINK,		/* need to increment i_nlink */
-	FI_ACL_MODE,		/* indicate acl mode */
-	FI_NO_ALLOC,		/* should not allocate any blocks */
-	FI_FREE_NID,		/* free allocated nide */
-	FI_NO_EXTENT,		/* not to use the extent cache */
-	FI_INLINE_XATTR,	/* used for inline xattr */
-	FI_INLINE_DATA,		/* used for inline data*/
-	FI_INLINE_DENTRY,	/* used for inline dentry */
-	FI_APPEND_WRITE,	/* inode has appended data */
-	FI_UPDATE_WRITE,	/* inode has in-place-update data */
-	FI_NEED_IPU,		/* used for ipu per file */
-	FI_ATOMIC_FILE,		/* indicate atomic file */
-	FI_ATOMIC_COMMIT,	/* indicate the state of atomical committing */
-	FI_VOLATILE_FILE,	/* indicate volatile file */
-	FI_FIRST_BLOCK_WRITTEN,	/* indicate #0 data block was written */
-	FI_DROP_CACHE,		/* drop dirty page cache */
-	FI_DATA_EXIST,		/* indicate data exists */
-	FI_INLINE_DOTS,		/* indicate inline dot dentries */
-	FI_DO_DEFRAG,		/* indicate defragment is running */
-	FI_DIRTY_FILE,		/* indicate regular/symlink has dirty pages */
-	FI_NO_PREALLOC,		/* indicate skipped preallocated blocks */
-	FI_HOT_DATA,		/* indicate file is hot */
-	FI_EXTRA_ATTR,		/* indicate file has extra attribute */
-	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,
 						int flag, bool set)
 {
@@ -2458,26 +2797,25 @@
 	case FI_DATA_EXIST:
 	case FI_INLINE_DOTS:
 	case FI_PIN_FILE:
+	case FI_COMPRESS_RELEASED:
 		f2fs_mark_inode_dirty_sync(inode, true);
 	}
 }
 
 static inline void set_inode_flag(struct inode *inode, int flag)
 {
-	if (!test_bit(flag, &F2FS_I(inode)->flags))
-		set_bit(flag, &F2FS_I(inode)->flags);
+	set_bit(flag, F2FS_I(inode)->flags);
 	__mark_inode_dirty_flag(inode, flag, true);
 }
 
 static inline int is_inode_flag_set(struct inode *inode, int flag)
 {
-	return test_bit(flag, &F2FS_I(inode)->flags);
+	return test_bit(flag, F2FS_I(inode)->flags);
 }
 
 static inline void clear_inode_flag(struct inode *inode, int flag)
 {
-	if (test_bit(flag, &F2FS_I(inode)->flags))
-		clear_bit(flag, &F2FS_I(inode)->flags);
+	clear_bit(flag, F2FS_I(inode)->flags);
 	__mark_inode_dirty_flag(inode, flag, false);
 }
 
@@ -2568,19 +2906,21 @@
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 
 	if (ri->i_inline & F2FS_INLINE_XATTR)
-		set_bit(FI_INLINE_XATTR, &fi->flags);
+		set_bit(FI_INLINE_XATTR, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DATA)
-		set_bit(FI_INLINE_DATA, &fi->flags);
+		set_bit(FI_INLINE_DATA, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DENTRY)
-		set_bit(FI_INLINE_DENTRY, &fi->flags);
+		set_bit(FI_INLINE_DENTRY, fi->flags);
 	if (ri->i_inline & F2FS_DATA_EXIST)
-		set_bit(FI_DATA_EXIST, &fi->flags);
+		set_bit(FI_DATA_EXIST, fi->flags);
 	if (ri->i_inline & F2FS_INLINE_DOTS)
-		set_bit(FI_INLINE_DOTS, &fi->flags);
+		set_bit(FI_INLINE_DOTS, fi->flags);
 	if (ri->i_inline & F2FS_EXTRA_ATTR)
-		set_bit(FI_EXTRA_ATTR, &fi->flags);
+		set_bit(FI_EXTRA_ATTR, fi->flags);
 	if (ri->i_inline & F2FS_PIN_FILE)
-		set_bit(FI_PIN_FILE, &fi->flags);
+		set_bit(FI_PIN_FILE, fi->flags);
+	if (ri->i_inline & F2FS_COMPRESS_RELEASED)
+		set_bit(FI_COMPRESS_RELEASED, fi->flags);
 }
 
 static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri)
@@ -2601,6 +2941,8 @@
 		ri->i_inline |= F2FS_EXTRA_ATTR;
 	if (is_inode_flag_set(inode, FI_PIN_FILE))
 		ri->i_inline |= F2FS_PIN_FILE;
+	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
+		ri->i_inline |= F2FS_COMPRESS_RELEASED;
 }
 
 static inline int f2fs_has_extra_attr(struct inode *inode)
@@ -2613,16 +2955,43 @@
 	return is_inode_flag_set(inode, FI_INLINE_XATTR);
 }
 
+static inline int f2fs_compressed_file(struct inode *inode)
+{
+	return S_ISREG(inode->i_mode) &&
+		is_inode_flag_set(inode, FI_COMPRESSED_FILE);
+}
+
+static inline bool f2fs_need_compress_data(struct inode *inode)
+{
+	int compress_mode = F2FS_OPTION(F2FS_I_SB(inode)).compress_mode;
+
+	if (!f2fs_compressed_file(inode))
+		return false;
+
+	if (compress_mode == COMPR_MODE_FS)
+		return true;
+	else if (compress_mode == COMPR_MODE_USER &&
+			is_inode_flag_set(inode, FI_ENABLE_COMPRESS))
+		return true;
+
+	return false;
+}
+
 static inline unsigned int addrs_per_inode(struct inode *inode)
 {
 	unsigned int addrs = CUR_ADDRS_PER_INODE(inode) -
 				get_inline_xattr_addrs(inode);
-	return ALIGN_DOWN(addrs, 1);
+
+	if (!f2fs_compressed_file(inode))
+		return addrs;
+	return ALIGN_DOWN(addrs, F2FS_I(inode)->i_cluster_size);
 }
 
 static inline unsigned int addrs_per_block(struct inode *inode)
 {
-	return ALIGN_DOWN(DEF_ADDRS_PER_BLOCK, 1);
+	if (!f2fs_compressed_file(inode))
+		return DEF_ADDRS_PER_BLOCK;
+	return ALIGN_DOWN(DEF_ADDRS_PER_BLOCK, F2FS_I(inode)->i_cluster_size);
 }
 
 static inline void *inline_xattr_addr(struct inode *inode, struct page *page)
@@ -2655,6 +3024,11 @@
 	return is_inode_flag_set(inode, FI_INLINE_DOTS);
 }
 
+static inline int f2fs_is_mmap_file(struct inode *inode)
+{
+	return is_inode_flag_set(inode, FI_MMAP_FILE);
+}
+
 static inline bool f2fs_is_pinned_file(struct inode *inode)
 {
 	return is_inode_flag_set(inode, FI_PIN_FILE);
@@ -2749,9 +3123,9 @@
 	if (!f2fs_is_time_consistent(inode))
 		return false;
 
-	down_read(&F2FS_I(inode)->i_sem);
+	spin_lock(&F2FS_I(inode)->i_size_lock);
 	ret = F2FS_I(inode)->last_disk_size == i_size_read(inode);
-	up_read(&F2FS_I(inode)->i_sem);
+	spin_unlock(&F2FS_I(inode)->i_size_lock);
 
 	return ret;
 }
@@ -2766,35 +3140,17 @@
 	return is_set_ckpt_flags(sbi, CP_ERROR_FLAG);
 }
 
-static inline bool is_dot_dotdot(const struct qstr *str)
+static inline bool is_dot_dotdot(const u8 *name, size_t len)
 {
-	if (str->len == 1 && str->name[0] == '.')
+	if (len == 1 && name[0] == '.')
 		return true;
 
-	if (str->len == 2 && str->name[0] == '.' && str->name[1] == '.')
+	if (len == 2 && name[0] == '.' && name[1] == '.')
 		return true;
 
 	return false;
 }
 
-static inline bool f2fs_may_extent_tree(struct inode *inode)
-{
-	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-
-	if (!test_opt(sbi, EXTENT_CACHE) ||
-			is_inode_flag_set(inode, FI_NO_EXTENT))
-		return false;
-
-	/*
-	 * for recovered files during mount do not create extents
-	 * if shrinker is not registered.
-	 */
-	if (list_empty(&sbi->s_list))
-		return false;
-
-	return S_ISREG(inode->i_mode);
-}
-
 static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
 					size_t size, gfp_t flags)
 {
@@ -2853,29 +3209,45 @@
 		sizeof((f2fs_inode)->field))			\
 		<= (F2FS_OLD_ATTRIBUTE_SIZE + (extra_isize)))	\
 
+#define DEFAULT_IOSTAT_PERIOD_MS	3000
+#define MIN_IOSTAT_PERIOD_MS		100
+/* maximum period of iostat tracing is 1 day */
+#define MAX_IOSTAT_PERIOD_MS		8640000
+
 static inline void f2fs_reset_iostat(struct f2fs_sb_info *sbi)
 {
 	int i;
 
 	spin_lock(&sbi->iostat_lock);
-	for (i = 0; i < NR_IO_TYPE; i++)
-		sbi->write_iostat[i] = 0;
+	for (i = 0; i < NR_IO_TYPE; i++) {
+		sbi->rw_iostat[i] = 0;
+		sbi->prev_rw_iostat[i] = 0;
+	}
 	spin_unlock(&sbi->iostat_lock);
 }
 
+extern void f2fs_record_iostat(struct f2fs_sb_info *sbi);
+
 static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi,
 			enum iostat_type type, unsigned long long io_bytes)
 {
 	if (!sbi->iostat_enable)
 		return;
 	spin_lock(&sbi->iostat_lock);
-	sbi->write_iostat[type] += io_bytes;
+	sbi->rw_iostat[type] += io_bytes;
 
 	if (type == APP_WRITE_IO || type == APP_DIRECT_IO)
-		sbi->write_iostat[APP_BUFFERED_IO] =
-			sbi->write_iostat[APP_WRITE_IO] -
-			sbi->write_iostat[APP_DIRECT_IO];
+		sbi->rw_iostat[APP_BUFFERED_IO] =
+			sbi->rw_iostat[APP_WRITE_IO] -
+			sbi->rw_iostat[APP_DIRECT_IO];
+
+	if (type == APP_READ_IO || type == APP_DIRECT_READ_IO)
+		sbi->rw_iostat[APP_BUFFERED_READ_IO] =
+			sbi->rw_iostat[APP_READ_IO] -
+			sbi->rw_iostat[APP_DIRECT_READ_IO];
 	spin_unlock(&sbi->iostat_lock);
+
+	f2fs_record_iostat(sbi);
 }
 
 #define __is_large_section(sbi)		((sbi)->segs_per_sec > 1)
@@ -2896,30 +3268,47 @@
 
 static inline bool __is_valid_data_blkaddr(block_t blkaddr)
 {
-	if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR)
+	if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR ||
+			blkaddr == COMPRESS_ADDR)
 		return false;
 	return true;
 }
 
-static inline void f2fs_set_page_private(struct page *page,
-						unsigned long data)
+/**
+ * attach_page_private - Attach private data to a page.
+ * @page: Page to attach data to.
+ * @data: Data to attach to page.
+ *
+ * Attaching private data to a page increments the page's reference count.
+ * The data must be detached before the page will be freed.
+ */
+static inline void attach_page_private(struct page *page, void *data)
 {
-	if (PagePrivate(page))
-		return;
-
 	get_page(page);
+	set_page_private(page, (unsigned long)data);
 	SetPagePrivate(page);
-	set_page_private(page, data);
 }
 
-static inline void f2fs_clear_page_private(struct page *page)
+/**
+ * detach_page_private - Detach private data from a page.
+ * @page: Page to detach data from.
+ *
+ * Removes the data that was previously attached to the page and decrements
+ * the refcount on the page.
+ *
+ * Return: Data that was attached to the page.
+ */
+static inline void *detach_page_private(struct page *page)
 {
-	if (!PagePrivate(page))
-		return;
+	void *data = (void *)page_private(page);
 
-	set_page_private(page, 0);
+	if (!PagePrivate(page))
+		return NULL;
 	ClearPagePrivate(page);
-	f2fs_put_page(page, 0);
+	set_page_private(page, 0);
+	put_page(page);
+
+	return data;
 }
 
 /*
@@ -2927,6 +3316,7 @@
  */
 int f2fs_sync_file(struct file *file, loff_t start, loff_t end, int datasync);
 void f2fs_truncate_data_blocks(struct dnode_of_data *dn);
+int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock);
 int f2fs_truncate(struct inode *inode);
 int f2fs_getattr(const struct path *path, struct kstat *stat,
@@ -2966,22 +3356,28 @@
  * dir.c
  */
 unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de);
-struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
-			f2fs_hash_t namehash, int *max_slots,
-			struct f2fs_dentry_ptr *d);
+int f2fs_init_casefolded_name(const struct inode *dir,
+			      struct f2fs_filename *fname);
+int f2fs_setup_filename(struct inode *dir, const struct qstr *iname,
+			int lookup, struct f2fs_filename *fname);
+int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			struct f2fs_filename *fname);
+void f2fs_free_filename(struct f2fs_filename *fname);
+struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d,
+			const struct f2fs_filename *fname, int *max_slots);
 int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 			unsigned int start_pos, struct fscrypt_str *fstr);
 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 			struct f2fs_dentry_ptr *d);
 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
-			const struct qstr *new_name,
-			const struct qstr *orig_name, struct page *dpage);
+			const struct f2fs_filename *fname, struct page *dpage);
 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 			unsigned int current_depth);
 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots);
 void f2fs_drop_nlink(struct inode *dir, struct inode *inode);
 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page);
+					 const struct f2fs_filename *fname,
+					 struct page **res_page);
 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 			const struct qstr *child, struct page **res_page);
 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p);
@@ -2989,13 +3385,14 @@
 			struct page **page);
 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 			struct page *page, struct inode *inode);
+bool f2fs_has_enough_room(struct inode *dir, struct page *ipage,
+			  const struct f2fs_filename *fname);
 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
-			const struct qstr *name, f2fs_hash_t name_hash,
+			const struct fscrypt_str *name, f2fs_hash_t name_hash,
 			unsigned int bit_pos);
-int f2fs_add_regular_entry(struct inode *dir, const struct qstr *new_name,
-			const struct qstr *orig_name,
+int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
-int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
+int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 			struct inode *inode, nid_t ino, umode_t mode);
@@ -3019,6 +3416,7 @@
 void f2fs_inode_synced(struct inode *inode);
 int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
 int f2fs_quota_sync(struct super_block *sb, int type);
+loff_t max_file_blocks(struct inode *inode);
 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);
@@ -3027,13 +3425,11 @@
 /*
  * hash.c
  */
-f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
-		const struct qstr *name_info, struct fscrypt_name *fname);
+void f2fs_hash_filename(const struct inode *dir, struct f2fs_filename *fname);
 
 /*
  * node.c
  */
-struct dnode_of_data;
 struct node_info;
 
 int f2fs_check_nid_range(struct f2fs_sb_info *sbi, nid_t nid);
@@ -3060,6 +3456,7 @@
 struct page *f2fs_get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
 struct page *f2fs_get_node_page_ra(struct page *parent, int start);
 int f2fs_move_node_page(struct page *node_page, int gc_type);
+void f2fs_flush_inline_data(struct f2fs_sb_info *sbi);
 int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
 			struct writeback_control *wbc, bool atomic,
 			unsigned int *seq_id);
@@ -3092,7 +3489,7 @@
 void f2fs_drop_inmem_page(struct inode *inode, struct page *page);
 int f2fs_commit_inmem_pages(struct inode *inode);
 void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need);
-void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi);
+void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg);
 int f2fs_issue_flush(struct f2fs_sb_info *sbi, nid_t ino);
 int f2fs_create_flush_cmd_control(struct f2fs_sb_info *sbi);
 int f2fs_flush_device_cache(struct f2fs_sb_info *sbi);
@@ -3109,8 +3506,15 @@
 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 allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno);
+void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi);
+void f2fs_get_new_segment(struct f2fs_sb_info *sbi,
+			unsigned int *newseg, bool new_sec, int dir);
+void f2fs_allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
 					unsigned int start, unsigned int end);
+void f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type, bool force);
 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi);
 int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
 bool f2fs_exist_trim_candidates(struct f2fs_sb_info *sbi,
@@ -3126,7 +3530,8 @@
 int f2fs_inplace_write_data(struct f2fs_io_info *fio);
 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 			block_t old_blkaddr, block_t new_blkaddr,
-			bool recover_curseg, bool recover_newaddr);
+			bool recover_curseg, bool recover_newaddr,
+			bool from_gc);
 void f2fs_replace_block(struct f2fs_sb_info *sbi, struct dnode_of_data *dn,
 			block_t old_addr, block_t new_addr,
 			unsigned char version, bool recover_curseg,
@@ -3134,7 +3539,7 @@
 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 			block_t old_blkaddr, block_t *new_blkaddr,
 			struct f2fs_summary *sum, int type,
-			struct f2fs_io_info *fio, bool add_list);
+			struct f2fs_io_info *fio);
 void f2fs_wait_on_page_writeback(struct page *page,
 			enum page_type type, bool ordered, bool locked);
 void f2fs_wait_on_block_writeback(struct inode *inode, block_t blkaddr);
@@ -3145,6 +3550,8 @@
 int f2fs_lookup_journal_in_cursum(struct f2fs_journal *journal, int type,
 			unsigned int val, int alloc);
 void f2fs_flush_sit_entries(struct f2fs_sb_info *sbi, struct cp_control *cpc);
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi);
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi);
 int f2fs_build_segment_manager(struct f2fs_sb_info *sbi);
 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi);
 int __init f2fs_create_segment_manager_caches(void);
@@ -3152,6 +3559,10 @@
 int f2fs_rw_hint_to_seg_type(enum rw_hint hint);
 enum rw_hint f2fs_io_type_to_rw_hint(struct f2fs_sb_info *sbi,
 			enum page_type type, enum temp_type temp);
+unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
+			unsigned int segno);
+unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
+			unsigned int segno);
 
 /*
  * checkpoint.c
@@ -3187,20 +3598,31 @@
 void f2fs_remove_dirty_inode(struct inode *inode);
 int f2fs_sync_dirty_inodes(struct f2fs_sb_info *sbi, enum inode_type type);
 void f2fs_wait_on_all_pages(struct f2fs_sb_info *sbi, int type);
+u64 f2fs_get_sectors_written(struct f2fs_sb_info *sbi);
 int f2fs_write_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc);
 void f2fs_init_ino_entry_info(struct f2fs_sb_info *sbi);
 int __init f2fs_create_checkpoint_caches(void);
 void f2fs_destroy_checkpoint_caches(void);
+int f2fs_issue_checkpoint(struct f2fs_sb_info *sbi);
+int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi);
+void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi);
+void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi);
 
 /*
  * data.c
  */
-int f2fs_init_post_read_processing(void);
-void f2fs_destroy_post_read_processing(void);
+int __init f2fs_init_bioset(void);
+void f2fs_destroy_bioset(void);
+int f2fs_init_bio_entry_cache(void);
+void f2fs_destroy_bio_entry_cache(void);
+void f2fs_submit_bio(struct f2fs_sb_info *sbi,
+				struct bio *bio, enum page_type type);
 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);
@@ -3215,6 +3637,9 @@
 int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index);
 int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from);
 int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index);
+int f2fs_mpage_readpages(struct address_space *mapping,
+			struct list_head *pages, struct page *page,
+			unsigned nr_pages, bool is_readahead);
 struct page *f2fs_get_read_data_page(struct inode *inode, pgoff_t index,
 			int op_flags, bool for_write);
 struct page *f2fs_find_data_page(struct inode *inode, pgoff_t index);
@@ -3223,13 +3648,19 @@
 struct page *f2fs_get_new_data_page(struct inode *inode,
 			struct page *ipage, pgoff_t index, bool new_i_size);
 int f2fs_do_write_data_page(struct f2fs_io_info *fio);
-void __do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
+void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock);
 int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
 			int create, int flag);
 int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
 			u64 start, u64 len);
+int f2fs_encrypt_one_page(struct f2fs_io_info *fio);
 bool f2fs_should_update_inplace(struct inode *inode, struct f2fs_io_info *fio);
 bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio);
+int f2fs_write_single_data_page(struct page *page, int *submitted,
+				struct bio **bio, sector_t *last_block,
+				struct writeback_control *wbc,
+				enum iostat_type io_type,
+				int compr_blocks, bool allow_balance);
 void f2fs_invalidate_page(struct page *page, unsigned int offset,
 			unsigned int length);
 int f2fs_release_page(struct page *page, gfp_t wait);
@@ -3239,6 +3670,10 @@
 #endif
 bool f2fs_overwrite_io(struct inode *inode, loff_t pos, size_t len);
 void f2fs_clear_page_cache_dirty_tag(struct page *page);
+int f2fs_init_post_read_processing(void);
+void f2fs_destroy_post_read_processing(void);
+int f2fs_init_post_read_wq(struct f2fs_sb_info *sbi);
+void f2fs_destroy_post_read_wq(struct f2fs_sb_info *sbi);
 
 /*
  * gc.c
@@ -3246,16 +3681,20 @@
 int f2fs_start_gc_thread(struct f2fs_sb_info *sbi);
 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi);
 block_t f2fs_start_bidx_of_node(unsigned int node_ofs, struct inode *inode);
-int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background,
+int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, bool background, bool force,
 			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);
+int __init f2fs_create_garbage_collection_cache(void);
+void f2fs_destroy_garbage_collection_cache(void);
 
 /*
  * recovery.c
  */
 int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only);
 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi);
+int __init f2fs_create_recovery_cache(void);
+void f2fs_destroy_recovery_cache(void);
 
 /*
  * debug.c
@@ -3284,13 +3723,18 @@
 	int nr_discarding, nr_discarded;
 	int nr_discard_cmd;
 	unsigned int undiscard_blks;
+	int nr_issued_ckpt, nr_total_ckpt, nr_queued_ckpt;
+	unsigned int cur_ckpt_time, peak_ckpt_time;
 	int inline_xattr, inline_inode, inline_dir, append, update, orphans;
+	int compr_inode;
+	unsigned long long compr_blocks;
 	int aw_cnt, max_aw_cnt, vw_cnt, max_vw_cnt;
 	unsigned int valid_count, valid_node_count, valid_inode_count, discard_blks;
 	unsigned int bimodal, avg_vblocks;
 	int util_free, util_valid, util_invalid;
 	int rsvd_segs, overp_segs;
-	int dirty_count, node_pages, meta_pages;
+	int dirty_count, node_pages, meta_pages, compress_pages;
+	int compress_page_hit;
 	int prefree_count, call_count, cp_count, bg_cp_count;
 	int tot_segs, node_segs, data_segs, free_segs, free_secs;
 	int bg_node_segs, bg_data_segs;
@@ -3300,6 +3744,9 @@
 	int curseg[NR_CURSEG_TYPE];
 	int cursec[NR_CURSEG_TYPE];
 	int curzone[NR_CURSEG_TYPE];
+	unsigned int dirty_seg[NR_CURSEG_TYPE];
+	unsigned int full_seg[NR_CURSEG_TYPE];
+	unsigned int valid_blks[NR_CURSEG_TYPE];
 
 	unsigned int meta_count[META_MAX];
 	unsigned int segment_count[2];
@@ -3316,7 +3763,7 @@
 #define stat_inc_cp_count(si)		((si)->cp_count++)
 #define stat_inc_bg_cp_count(si)	((si)->bg_cp_count++)
 #define stat_inc_call_count(si)		((si)->call_count++)
-#define stat_inc_bggc_count(sbi)	((sbi)->bg_gc++)
+#define stat_inc_bggc_count(si)		((si)->bg_gc++)
 #define stat_io_skip_bggc_count(sbi)	((sbi)->io_skip_bggc++)
 #define stat_other_skip_bggc_count(sbi)	((sbi)->other_skip_bggc++)
 #define stat_inc_dirty_inode(sbi, type)	((sbi)->ndirty_inode[type]++)
@@ -3355,6 +3802,20 @@
 		if (f2fs_has_inline_dentry(inode))			\
 			(atomic_dec(&F2FS_I_SB(inode)->inline_dir));	\
 	} while (0)
+#define stat_inc_compr_inode(inode)					\
+	do {								\
+		if (f2fs_compressed_file(inode))			\
+			(atomic_inc(&F2FS_I_SB(inode)->compr_inode));	\
+	} while (0)
+#define stat_dec_compr_inode(inode)					\
+	do {								\
+		if (f2fs_compressed_file(inode))			\
+			(atomic_dec(&F2FS_I_SB(inode)->compr_inode));	\
+	} while (0)
+#define stat_add_compr_blocks(inode, blocks)				\
+		(atomic64_add(blocks, &F2FS_I_SB(inode)->compr_blocks))
+#define stat_sub_compr_blocks(inode, blocks)				\
+		(atomic64_sub(blocks, &F2FS_I_SB(inode)->compr_blocks))
 #define stat_inc_meta_count(sbi, blkaddr)				\
 	do {								\
 		if (blkaddr < SIT_I(sbi)->sit_base_addr)		\
@@ -3372,13 +3833,9 @@
 		((sbi)->block_count[(curseg)->alloc_type]++)
 #define stat_inc_inplace_blocks(sbi)					\
 		(atomic_inc(&(sbi)->inplace_count))
-#define stat_inc_atomic_write(inode)					\
-		(atomic_inc(&F2FS_I_SB(inode)->aw_cnt))
-#define stat_dec_atomic_write(inode)					\
-		(atomic_dec(&F2FS_I_SB(inode)->aw_cnt))
 #define stat_update_max_atomic_write(inode)				\
 	do {								\
-		int cur = atomic_read(&F2FS_I_SB(inode)->aw_cnt);	\
+		int cur = F2FS_I_SB(inode)->atomic_files;	\
 		int max = atomic_read(&F2FS_I_SB(inode)->max_aw_cnt);	\
 		if (cur > max)						\
 			atomic_set(&F2FS_I_SB(inode)->max_aw_cnt, cur);	\
@@ -3430,6 +3887,7 @@
 void f2fs_destroy_stats(struct f2fs_sb_info *sbi);
 void __init f2fs_create_root_stats(void);
 void f2fs_destroy_root_stats(void);
+void f2fs_update_sit_info(struct f2fs_sb_info *sbi);
 #else
 #define stat_inc_cp_count(si)				do { } while (0)
 #define stat_inc_bg_cp_count(si)			do { } while (0)
@@ -3439,8 +3897,8 @@
 #define stat_other_skip_bggc_count(sbi)			do { } while (0)
 #define stat_inc_dirty_inode(sbi, type)			do { } while (0)
 #define stat_dec_dirty_inode(sbi, type)			do { } while (0)
-#define stat_inc_total_hit(sb)				do { } while (0)
-#define stat_inc_rbtree_node_hit(sb)			do { } while (0)
+#define stat_inc_total_hit(sbi)				do { } while (0)
+#define stat_inc_rbtree_node_hit(sbi)			do { } while (0)
 #define stat_inc_largest_node_hit(sbi)			do { } while (0)
 #define stat_inc_cached_node_hit(sbi)			do { } while (0)
 #define stat_inc_inline_xattr(inode)			do { } while (0)
@@ -3449,8 +3907,10 @@
 #define stat_dec_inline_inode(inode)			do { } while (0)
 #define stat_inc_inline_dir(inode)			do { } while (0)
 #define stat_dec_inline_dir(inode)			do { } while (0)
-#define stat_inc_atomic_write(inode)			do { } while (0)
-#define stat_dec_atomic_write(inode)			do { } while (0)
+#define stat_inc_compr_inode(inode)			do { } while (0)
+#define stat_dec_compr_inode(inode)			do { } while (0)
+#define stat_add_compr_blocks(inode, blocks)		do { } while (0)
+#define stat_sub_compr_blocks(inode, blocks)		do { } while (0)
 #define stat_update_max_atomic_write(inode)		do { } while (0)
 #define stat_inc_volatile_write(inode)			do { } while (0)
 #define stat_dec_volatile_write(inode)			do { } while (0)
@@ -3468,12 +3928,10 @@
 static inline void f2fs_destroy_stats(struct f2fs_sb_info *sbi) { }
 static inline void __init f2fs_create_root_stats(void) { }
 static inline void f2fs_destroy_root_stats(void) { }
+static inline void f2fs_update_sit_info(struct f2fs_sb_info *sbi) {}
 #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;
@@ -3496,14 +3954,15 @@
 int f2fs_read_inline_data(struct inode *inode, struct page *page);
 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page);
 int f2fs_convert_inline_inode(struct inode *inode);
+int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry);
 int f2fs_write_inline_data(struct inode *inode, struct page *page);
 int f2fs_recover_inline_data(struct inode *inode, struct page *npage);
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page);
+					const struct f2fs_filename *fname,
+					struct page **res_page);
 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
 			struct page *ipage);
-int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
-			const struct qstr *orig_name,
+int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
 			struct inode *inode, nid_t ino, umode_t mode);
 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry,
 				struct page *page, struct inode *dir,
@@ -3530,6 +3989,10 @@
  */
 struct rb_entry *f2fs_lookup_rb_tree(struct rb_root_cached *root,
 				struct rb_entry *cached_re, unsigned int ofs);
+struct rb_node **f2fs_lookup_rb_tree_ext(struct f2fs_sb_info *sbi,
+				struct rb_root_cached *root,
+				struct rb_node **parent,
+				unsigned long long key, bool *left_most);
 struct rb_node **f2fs_lookup_rb_tree_for_insert(struct f2fs_sb_info *sbi,
 				struct rb_root_cached *root,
 				struct rb_node **parent,
@@ -3540,9 +4003,9 @@
 		struct rb_node ***insert_p, struct rb_node **insert_parent,
 		bool force, bool *leftmost);
 bool f2fs_check_rb_tree_consistence(struct f2fs_sb_info *sbi,
-						struct rb_root_cached *root);
+				struct rb_root_cached *root, bool check_key);
 unsigned int f2fs_shrink_extent_tree(struct f2fs_sb_info *sbi, int nr_shrink);
-bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext);
+void f2fs_init_extent_tree(struct inode *inode, struct page *ipage);
 void f2fs_drop_extent_tree(struct inode *inode);
 unsigned int f2fs_destroy_extent_node(struct inode *inode);
 void f2fs_destroy_extent_tree(struct inode *inode);
@@ -3588,7 +4051,153 @@
  */
 static inline bool f2fs_post_read_required(struct inode *inode)
 {
-	return f2fs_encrypted_file(inode) || fsverity_active(inode);
+	return f2fs_encrypted_file(inode) || fsverity_active(inode) ||
+		f2fs_compressed_file(inode);
+}
+
+/*
+ * compress.c
+ */
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+bool f2fs_is_compressed_page(struct page *page);
+struct page *f2fs_compress_control_page(struct page *page);
+int f2fs_prepare_compress_overwrite(struct inode *inode,
+			struct page **pagep, pgoff_t index, void **fsdata);
+bool f2fs_compress_write_end(struct inode *inode, void *fsdata,
+					pgoff_t index, unsigned copied);
+int f2fs_truncate_partial_cluster(struct inode *inode, u64 from, bool lock);
+void f2fs_compress_write_end_io(struct bio *bio, struct page *page);
+bool f2fs_is_compress_backend_ready(struct inode *inode);
+int f2fs_init_compress_mempool(void);
+void f2fs_destroy_compress_mempool(void);
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic);
+void f2fs_end_read_compressed_page(struct page *page, bool failed,
+							block_t blkaddr);
+bool f2fs_cluster_is_empty(struct compress_ctx *cc);
+bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index);
+void f2fs_compress_ctx_add_page(struct compress_ctx *cc, struct page *page);
+int f2fs_write_multi_pages(struct compress_ctx *cc,
+						int *submitted,
+						struct writeback_control *wbc,
+						enum iostat_type io_type);
+int f2fs_is_compressed_cluster(struct inode *inode, pgoff_t index);
+int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
+				unsigned nr_pages, sector_t *last_block_in_bio,
+				bool is_readahead, bool for_write);
+struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
+void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed);
+void f2fs_put_page_dic(struct page *page);
+int f2fs_init_compress_ctx(struct compress_ctx *cc);
+void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse);
+void f2fs_init_compress_info(struct f2fs_sb_info *sbi);
+int f2fs_init_compress_inode(struct f2fs_sb_info *sbi);
+void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi);
+int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi);
+void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi);
+int __init f2fs_init_compress_cache(void);
+void f2fs_destroy_compress_cache(void);
+struct address_space *COMPRESS_MAPPING(struct f2fs_sb_info *sbi);
+void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi, block_t blkaddr);
+void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+						nid_t ino, block_t blkaddr);
+bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi, struct page *page,
+								block_t blkaddr);
+void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi, nid_t ino);
+#define inc_compr_inode_stat(inode)					\
+	do {								\
+		struct f2fs_sb_info *sbi = F2FS_I_SB(inode);		\
+		sbi->compr_new_inode++;					\
+	} while (0)
+#define add_compr_block_stat(inode, blocks)				\
+	do {								\
+		struct f2fs_sb_info *sbi = F2FS_I_SB(inode);		\
+		int diff = F2FS_I(inode)->i_cluster_size - blocks;	\
+		sbi->compr_written_block += blocks;			\
+		sbi->compr_saved_block += diff;				\
+	} while (0)
+#else
+static inline bool f2fs_is_compressed_page(struct page *page) { return false; }
+static inline bool f2fs_is_compress_backend_ready(struct inode *inode)
+{
+	if (!f2fs_compressed_file(inode))
+		return true;
+	/* not support compression */
+	return false;
+}
+static inline struct page *f2fs_compress_control_page(struct page *page)
+{
+	WARN_ON_ONCE(1);
+	return ERR_PTR(-EINVAL);
+}
+static inline int f2fs_init_compress_mempool(void) { return 0; }
+static inline void f2fs_destroy_compress_mempool(void) { }
+static inline void f2fs_decompress_cluster(struct decompress_io_ctx *dic) { }
+static inline void f2fs_end_read_compressed_page(struct page *page,
+						bool failed, block_t blkaddr)
+{
+	WARN_ON_ONCE(1);
+}
+static inline void f2fs_put_page_dic(struct page *page)
+{
+	WARN_ON_ONCE(1);
+}
+static inline int f2fs_init_compress_inode(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_compress_inode(struct f2fs_sb_info *sbi) { }
+static inline int f2fs_init_page_array_cache(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_page_array_cache(struct f2fs_sb_info *sbi) { }
+static inline int __init f2fs_init_compress_cache(void) { return 0; }
+static inline void f2fs_destroy_compress_cache(void) { }
+static inline void f2fs_invalidate_compress_page(struct f2fs_sb_info *sbi,
+				block_t blkaddr) { }
+static inline void f2fs_cache_compressed_page(struct f2fs_sb_info *sbi,
+				struct page *page, nid_t ino, block_t blkaddr) { }
+static inline bool f2fs_load_compressed_page(struct f2fs_sb_info *sbi,
+				struct page *page, block_t blkaddr) { return false; }
+static inline void f2fs_invalidate_compress_pages(struct f2fs_sb_info *sbi,
+							nid_t ino) { }
+#define inc_compr_inode_stat(inode)		do { } while (0)
+#endif
+
+static inline void set_compress_context(struct inode *inode)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+
+	F2FS_I(inode)->i_compress_algorithm =
+			F2FS_OPTION(sbi).compress_algorithm;
+	F2FS_I(inode)->i_log_cluster_size =
+			F2FS_OPTION(sbi).compress_log_size;
+	F2FS_I(inode)->i_compress_flag =
+			F2FS_OPTION(sbi).compress_chksum ?
+				1 << COMPRESS_CHKSUM : 0;
+	F2FS_I(inode)->i_cluster_size =
+			1 << F2FS_I(inode)->i_log_cluster_size;
+	if (F2FS_I(inode)->i_compress_algorithm == COMPRESS_LZ4 &&
+			F2FS_OPTION(sbi).compress_level)
+		F2FS_I(inode)->i_compress_flag |=
+				F2FS_OPTION(sbi).compress_level <<
+				COMPRESS_LEVEL_OFFSET;
+	F2FS_I(inode)->i_flags |= F2FS_COMPR_FL;
+	set_inode_flag(inode, FI_COMPRESSED_FILE);
+	stat_inc_compr_inode(inode);
+	inc_compr_inode_stat(inode);
+	f2fs_mark_inode_dirty_sync(inode, true);
+}
+
+static inline bool f2fs_disable_compressed_file(struct inode *inode)
+{
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	if (!f2fs_compressed_file(inode))
+		return true;
+	if (S_ISREG(inode->i_mode) &&
+		(get_dirty_pages(inode) || atomic_read(&fi->i_compr_blocks)))
+		return false;
+
+	fi->i_flags &= ~F2FS_COMPR_FL;
+	stat_dec_compr_inode(inode);
+	clear_inode_flag(inode, FI_COMPRESSED_FILE);
+	f2fs_mark_inode_dirty_sync(inode, true);
+	return true;
 }
 
 #define F2FS_FEATURE_FUNCS(name, flagname) \
@@ -3609,6 +4218,28 @@
 F2FS_FEATURE_FUNCS(verity, VERITY);
 F2FS_FEATURE_FUNCS(sb_chksum, SB_CHKSUM);
 F2FS_FEATURE_FUNCS(casefold, CASEFOLD);
+F2FS_FEATURE_FUNCS(compression, COMPRESSION);
+F2FS_FEATURE_FUNCS(readonly, RO);
+
+static inline bool f2fs_may_extent_tree(struct inode *inode)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+
+	if (!test_opt(sbi, EXTENT_CACHE) ||
+			is_inode_flag_set(inode, FI_NO_EXTENT) ||
+			(is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
+			 !f2fs_sb_has_readonly(sbi)))
+		return false;
+
+	/*
+	 * for recovered files during mount do not create extents
+	 * if shrinker is not registered.
+	 */
+	if (list_empty(&sbi->s_list))
+		return false;
+
+	return S_ISREG(inode->i_mode);
+}
 
 #ifdef CONFIG_BLK_DEV_ZONED
 static inline bool f2fs_blkz_is_seq(struct f2fs_sb_info *sbi, int devi,
@@ -3663,31 +4294,38 @@
 	return false;
 }
 
-
-static inline void set_opt_mode(struct f2fs_sb_info *sbi, unsigned int mt)
+static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi)
 {
-	clear_opt(sbi, ADAPTIVE);
-	clear_opt(sbi, LFS);
-
-	switch (mt) {
-	case F2FS_MOUNT_ADAPTIVE:
-		set_opt(sbi, ADAPTIVE);
-		break;
-	case F2FS_MOUNT_LFS:
-		set_opt(sbi, LFS);
-		break;
-	}
+	return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS;
 }
 
-static inline bool f2fs_may_encrypt(struct inode *inode)
+static inline bool f2fs_may_compress(struct inode *inode)
 {
-#ifdef CONFIG_FS_ENCRYPTION
-	umode_t mode = inode->i_mode;
+	if (IS_SWAPFILE(inode) || f2fs_is_pinned_file(inode) ||
+				f2fs_is_atomic_file(inode) ||
+				f2fs_is_volatile_file(inode))
+		return false;
+	return S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode);
+}
 
-	return (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode));
-#else
-	return false;
-#endif
+static inline void f2fs_i_compr_blocks_update(struct inode *inode,
+						u64 blocks, bool add)
+{
+	int diff = F2FS_I(inode)->i_cluster_size - blocks;
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+
+	/* don't update i_compr_blocks if saved blocks were released */
+	if (!add && !atomic_read(&fi->i_compr_blocks))
+		return;
+
+	if (add) {
+		atomic_add(diff, &fi->i_compr_blocks);
+		stat_add_compr_blocks(inode, diff);
+	} else {
+		atomic_sub(diff, &fi->i_compr_blocks);
+		stat_sub_compr_blocks(inode, diff);
+	}
+	f2fs_mark_inode_dirty_sync(inode, true);
 }
 
 static inline int block_unaligned_IO(struct inode *inode,
@@ -3707,7 +4345,7 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int rw = iov_iter_rw(iter);
 
-	return (test_opt(sbi, LFS) && (rw == WRITE) &&
+	return (f2fs_lfs_mode(sbi) && (rw == WRITE) &&
 				!block_unaligned_IO(inode, iocb, iter));
 }
 
@@ -3717,7 +4355,11 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	int rw = iov_iter_rw(iter);
 
-	if (f2fs_post_read_required(inode))
+	if (!fscrypt_dio_supported(iocb, iter))
+		return true;
+	if (fsverity_active(inode))
+		return true;
+	if (f2fs_compressed_file(inode))
 		return true;
 	if (f2fs_is_multi_device(sbi))
 		return true;
@@ -3727,19 +4369,24 @@
 	 */
 	if (f2fs_sb_has_blkzoned(sbi))
 		return true;
-	if (test_opt(sbi, LFS) && (rw == WRITE)) {
+	if (f2fs_lfs_mode(sbi) && (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))
+	if (is_sbi_flag_set(F2FS_I_SB(inode), SBI_CP_DISABLED))
 		return true;
 
 	return false;
 }
 
+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);
+}
+
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 extern void f2fs_build_fault_attr(struct f2fs_sb_info *sbi, unsigned int rate,
 							unsigned int type);
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 516007b..9aa35261 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -21,6 +21,7 @@
 #include <linux/uuid.h>
 #include <linux/file.h>
 #include <linux/nls.h>
+#include <linux/sched/signal.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -28,8 +29,8 @@
 #include "xattr.h"
 #include "acl.h"
 #include "gc.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
+#include <uapi/linux/f2fs.h>
 
 static vm_fault_t f2fs_filemap_fault(struct vm_fault *vmf)
 {
@@ -40,6 +41,10 @@
 	ret = filemap_fault(vmf);
 	up_read(&F2FS_I(inode)->i_mmap_sem);
 
+	if (!ret)
+		f2fs_update_iostat(F2FS_I_SB(inode), APP_MAPPED_READ_IO,
+							F2FS_BLKSIZE);
+
 	trace_f2fs_filemap_fault(inode, vmf->pgoff, (unsigned long)ret);
 
 	return ret;
@@ -51,7 +56,14 @@
 	struct inode *inode = file_inode(vmf->vma->vm_file);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
-	int err;
+	bool need_alloc = true;
+	int err = 0;
+
+	if (unlikely(IS_IMMUTABLE(inode)))
+		return VM_FAULT_SIGBUS;
+
+	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED))
+		return VM_FAULT_SIGBUS;
 
 	if (unlikely(f2fs_cp_error(sbi))) {
 		err = -EIO;
@@ -63,8 +75,25 @@
 		goto err;
 	}
 
+	err = f2fs_convert_inline_inode(inode);
+	if (err)
+		goto err;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (f2fs_compressed_file(inode)) {
+		int ret = f2fs_is_compressed_cluster(inode, page->index);
+
+		if (ret < 0) {
+			err = ret;
+			goto err;
+		} else if (ret) {
+			need_alloc = false;
+		}
+	}
+#endif
 	/* should do out of any locked page */
-	f2fs_balance_fs(sbi, true);
+	if (need_alloc)
+		f2fs_balance_fs(sbi, true);
 
 	sb_start_pagefault(inode->i_sb);
 
@@ -81,18 +110,26 @@
 		goto out_sem;
 	}
 
-	/* block allocation */
-	__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
-	set_new_dnode(&dn, inode, NULL, NULL, 0);
-	err = f2fs_get_block(&dn, page->index);
-	f2fs_put_dnode(&dn);
-	__do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
+	if (need_alloc) {
+		/* block allocation */
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, true);
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		err = f2fs_get_block(&dn, page->index);
+		f2fs_do_map_lock(sbi, F2FS_GET_BLOCK_PRE_AIO, false);
+	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (!need_alloc) {
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		err = f2fs_get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
+		f2fs_put_dnode(&dn);
+	}
+#endif
 	if (err) {
 		unlock_page(page);
 		goto out_sem;
 	}
 
-	/* fill the page */
 	f2fs_wait_on_page_writeback(page, DATA, false, true);
 
 	/* wait for GCed page writeback via META_MAPPING */
@@ -138,9 +175,11 @@
 {
 	struct dentry *dentry;
 
-	inode = igrab(inode);
-	dentry = d_find_any_alias(inode);
-	iput(inode);
+	/*
+	 * Make sure to get the non-deleted alias.  The alias associated with
+	 * the open file descriptor being fsync()'ed may be deleted already.
+	 */
+	dentry = d_find_alias(inode);
 	if (!dentry)
 		return 0;
 
@@ -156,6 +195,8 @@
 
 	if (!S_ISREG(inode->i_mode))
 		cp_reason = CP_NON_REGULAR;
+	else if (f2fs_compressed_file(inode))
+		cp_reason = CP_COMPRESSED;
 	else if (inode->i_nlink != 1)
 		cp_reason = CP_HARDLINK;
 	else if (is_sbi_flag_set(sbi, SBI_NEED_CP))
@@ -219,8 +260,7 @@
 	};
 	unsigned int seq_id = 0;
 
-	if (unlikely(f2fs_readonly(inode->i_sb) ||
-				is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
+	if (unlikely(f2fs_readonly(inode->i_sb)))
 		return 0;
 
 	trace_f2fs_sync_file_enter(inode);
@@ -234,7 +274,7 @@
 	ret = file_write_and_wait_range(file, start, end);
 	clear_inode_flag(inode, FI_NEED_IPU);
 
-	if (ret) {
+	if (ret || is_sbi_flag_set(sbi, SBI_CP_DISABLED)) {
 		trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
 		return ret;
 	}
@@ -329,7 +369,6 @@
 	f2fs_update_time(sbi, REQ_TIME);
 out:
 	trace_f2fs_sync_file_exit(inode, cp_reason, datasync, ret);
-	f2fs_trace_ios(NULL, 1);
 	return ret;
 }
 
@@ -340,32 +379,15 @@
 	return f2fs_do_sync_file(file, start, end, datasync, false);
 }
 
-static pgoff_t __get_first_dirty_index(struct address_space *mapping,
-						pgoff_t pgofs, int whence)
-{
-	struct page *page;
-	int nr_pages;
-
-	if (whence != SEEK_DATA)
-		return 0;
-
-	/* find first dirty page index */
-	nr_pages = find_get_pages_tag(mapping, &pgofs, PAGECACHE_TAG_DIRTY,
-				      1, &page);
-	if (!nr_pages)
-		return ULONG_MAX;
-	pgofs = page->index;
-	put_page(page);
-	return pgofs;
-}
-
-static bool __found_offset(struct f2fs_sb_info *sbi, block_t blkaddr,
-				pgoff_t dirty, pgoff_t pgofs, int whence)
+static bool __found_offset(struct address_space *mapping, block_t blkaddr,
+				pgoff_t index, int whence)
 {
 	switch (whence) {
 	case SEEK_DATA:
-		if ((blkaddr == NEW_ADDR && dirty == pgofs) ||
-			__is_valid_data_blkaddr(blkaddr))
+		if (__is_valid_data_blkaddr(blkaddr))
+			return true;
+		if (blkaddr == NEW_ADDR &&
+		    xa_get_mark(&mapping->i_pages, index, PAGECACHE_TAG_DIRTY))
 			return true;
 		break;
 	case SEEK_HOLE:
@@ -381,7 +403,7 @@
 	struct inode *inode = file->f_mapping->host;
 	loff_t maxbytes = inode->i_sb->s_maxbytes;
 	struct dnode_of_data dn;
-	pgoff_t pgofs, end_offset, dirty;
+	pgoff_t pgofs, end_offset;
 	loff_t data_ofs = offset;
 	loff_t isize;
 	int err = 0;
@@ -393,16 +415,18 @@
 		goto fail;
 
 	/* handle inline data case */
-	if (f2fs_has_inline_data(inode) || f2fs_has_inline_dentry(inode)) {
-		if (whence == SEEK_HOLE)
+	if (f2fs_has_inline_data(inode)) {
+		if (whence == SEEK_HOLE) {
 			data_ofs = isize;
-		goto found;
+			goto found;
+		} else if (whence == SEEK_DATA) {
+			data_ofs = offset;
+			goto found;
+		}
 	}
 
 	pgofs = (pgoff_t)(offset >> PAGE_SHIFT);
 
-	dirty = __get_first_dirty_index(inode->i_mapping, pgofs, whence);
-
 	for (; data_ofs < isize; data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
 		set_new_dnode(&dn, inode, NULL, NULL, 0);
 		err = f2fs_get_dnode_of_data(&dn, pgofs, LOOKUP_NODE);
@@ -426,8 +450,7 @@
 				data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
 			block_t blkaddr;
 
-			blkaddr = datablock_addr(dn.inode,
-					dn.node_page, dn.ofs_in_node);
+			blkaddr = f2fs_data_blkaddr(&dn);
 
 			if (__is_valid_data_blkaddr(blkaddr) &&
 				!f2fs_is_valid_blkaddr(F2FS_I_SB(inode),
@@ -436,7 +459,7 @@
 				goto fail;
 			}
 
-			if (__found_offset(F2FS_I_SB(inode), blkaddr, dirty,
+			if (__found_offset(file->f_mapping, blkaddr,
 							pgofs, whence)) {
 				f2fs_put_dnode(&dn);
 				goto found;
@@ -462,6 +485,9 @@
 	struct inode *inode = file->f_mapping->host;
 	loff_t maxbytes = inode->i_sb->s_maxbytes;
 
+	if (f2fs_compressed_file(inode))
+		maxbytes = max_file_blocks(inode) << F2FS_BLKSIZE_BITS;
+
 	switch (whence) {
 	case SEEK_SET:
 	case SEEK_CUR:
@@ -481,18 +507,16 @@
 static int f2fs_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
 	struct inode *inode = file_inode(file);
-	int err;
 
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
 		return -EIO;
 
-	/* we don't need to use inline_data strictly */
-	err = f2fs_convert_inline_inode(inode);
-	if (err)
-		return err;
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
 
 	file_accessed(file);
 	vma->vm_ops = &f2fs_file_vm_ops;
+	set_inode_flag(inode, FI_MMAP_FILE);
 	return 0;
 }
 
@@ -503,6 +527,9 @@
 	if (err)
 		return err;
 
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
 	err = fsverity_file_open(inode, filp);
 	if (err)
 		return err;
@@ -519,6 +546,10 @@
 	int nr_free = 0, ofs = dn->ofs_in_node, len = count;
 	__le32 *addr;
 	int base = 0;
+	bool compressed_cluster = false;
+	int cluster_index = 0, valid_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	bool released = !atomic_read(&F2FS_I(dn->inode)->i_compr_blocks);
 
 	if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
 		base = get_extra_isize(dn->inode);
@@ -526,26 +557,45 @@
 	raw_node = F2FS_NODE(dn->node_page);
 	addr = blkaddr_in_node(raw_node) + base + ofs;
 
-	for (; count > 0; count--, addr++, dn->ofs_in_node++) {
+	/* Assumption: truncateion starts with cluster */
+	for (; count > 0; count--, addr++, dn->ofs_in_node++, cluster_index++) {
 		block_t blkaddr = le32_to_cpu(*addr);
 
+		if (f2fs_compressed_file(dn->inode) &&
+					!(cluster_index & (cluster_size - 1))) {
+			if (compressed_cluster)
+				f2fs_i_compr_blocks_update(dn->inode,
+							valid_blocks, false);
+			compressed_cluster = (blkaddr == COMPRESS_ADDR);
+			valid_blocks = 0;
+		}
+
 		if (blkaddr == NULL_ADDR)
 			continue;
 
 		dn->data_blkaddr = NULL_ADDR;
 		f2fs_set_data_blkaddr(dn);
 
-		if (__is_valid_data_blkaddr(blkaddr) &&
-			!f2fs_is_valid_blkaddr(sbi, blkaddr,
+		if (__is_valid_data_blkaddr(blkaddr)) {
+			if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
 					DATA_GENERIC_ENHANCE))
-			continue;
+				continue;
+			if (compressed_cluster)
+				valid_blocks++;
+		}
 
-		f2fs_invalidate_blocks(sbi, blkaddr);
 		if (dn->ofs_in_node == 0 && IS_INODE(dn->node_page))
 			clear_inode_flag(dn->inode, FI_FIRST_BLOCK_WRITTEN);
-		nr_free++;
+
+		f2fs_invalidate_blocks(sbi, blkaddr);
+
+		if (!released || blkaddr != COMPRESS_ADDR)
+			nr_free++;
 	}
 
+	if (compressed_cluster)
+		f2fs_i_compr_blocks_update(dn->inode, valid_blocks, false);
+
 	if (nr_free) {
 		pgoff_t fofs;
 		/*
@@ -603,7 +653,7 @@
 	return 0;
 }
 
-int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
+int f2fs_do_truncate_blocks(struct inode *inode, u64 from, bool lock)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct dnode_of_data dn;
@@ -616,7 +666,7 @@
 
 	free_from = (pgoff_t)F2FS_BLK_ALIGN(from);
 
-	if (free_from >= sbi->max_file_blocks)
+	if (free_from >= max_file_blocks(inode))
 		goto free_partial;
 
 	if (lock)
@@ -668,6 +718,36 @@
 	return err;
 }
 
+int f2fs_truncate_blocks(struct inode *inode, u64 from, bool lock)
+{
+	u64 free_from = from;
+	int err;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	/*
+	 * for compressed file, only support cluster size
+	 * aligned truncation.
+	 */
+	if (f2fs_compressed_file(inode))
+		free_from = round_up(from,
+				F2FS_I(inode)->i_cluster_size << PAGE_SHIFT);
+#endif
+
+	err = f2fs_do_truncate_blocks(inode, free_from, lock);
+	if (err)
+		return err;
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (from != free_from) {
+		err = f2fs_truncate_partial_cluster(inode, from, lock);
+		if (err)
+			return err;
+	}
+#endif
+
+	return 0;
+}
+
 int f2fs_truncate(struct inode *inode)
 {
 	int err;
@@ -723,6 +803,8 @@
 	}
 
 	flags = fi->i_flags;
+	if (flags & F2FS_COMPR_FL)
+		stat->attributes |= STATX_ATTR_COMPRESSED;
 	if (flags & F2FS_APPEND_FL)
 		stat->attributes |= STATX_ATTR_APPEND;
 	if (IS_ENCRYPTED(inode))
@@ -731,11 +813,15 @@
 		stat->attributes |= STATX_ATTR_IMMUTABLE;
 	if (flags & F2FS_NODUMP_FL)
 		stat->attributes |= STATX_ATTR_NODUMP;
+	if (IS_VERITY(inode))
+		stat->attributes |= STATX_ATTR_VERITY;
 
-	stat->attributes_mask |= (STATX_ATTR_APPEND |
+	stat->attributes_mask |= (STATX_ATTR_COMPRESSED |
+				  STATX_ATTR_APPEND |
 				  STATX_ATTR_ENCRYPTED |
 				  STATX_ATTR_IMMUTABLE |
-				  STATX_ATTR_NODUMP);
+				  STATX_ATTR_NODUMP |
+				  STATX_ATTR_VERITY);
 
 	generic_fillattr(inode, stat);
 
@@ -783,6 +869,18 @@
 	if (unlikely(f2fs_cp_error(F2FS_I_SB(inode))))
 		return -EIO;
 
+	if (unlikely(IS_IMMUTABLE(inode)))
+		return -EPERM;
+
+	if (unlikely(IS_APPEND(inode) &&
+			(attr->ia_valid & (ATTR_MODE | ATTR_UID |
+				  ATTR_GID | ATTR_TIMES_SET))))
+		return -EPERM;
+
+	if ((attr->ia_valid & ATTR_SIZE) &&
+		!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
 	err = setattr_prepare(dentry, attr);
 	if (err)
 		return err;
@@ -853,18 +951,20 @@
 		if (err)
 			return err;
 
-		down_write(&F2FS_I(inode)->i_sem);
+		spin_lock(&F2FS_I(inode)->i_size_lock);
 		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);
+		spin_unlock(&F2FS_I(inode)->i_size_lock);
 	}
 
 	__setattr_copy(inode, attr);
 
 	if (attr->ia_valid & ATTR_MODE) {
 		err = posix_acl_chmod(inode, f2fs_get_inode_mode(inode));
-		if (err || is_inode_flag_set(inode, FI_ACL_MODE)) {
-			inode->i_mode = F2FS_I(inode)->i_acl_mode;
+
+		if (is_inode_flag_set(inode, FI_ACL_MODE)) {
+			if (!err)
+				inode->i_mode = F2FS_I(inode)->i_acl_mode;
 			clear_inode_flag(inode, FI_ACL_MODE);
 		}
 	}
@@ -883,9 +983,7 @@
 	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 	.fiemap		= f2fs_fiemap,
 };
 
@@ -1021,8 +1119,8 @@
 	} else if (ret == -ENOENT) {
 		if (dn.max_level == 0)
 			return -ENOENT;
-		done = min((pgoff_t)ADDRS_PER_BLOCK(inode) - dn.ofs_in_node,
-									len);
+		done = min((pgoff_t)ADDRS_PER_BLOCK(inode) -
+						dn.ofs_in_node, len);
 		blkaddr += done;
 		do_replace += done;
 		goto next;
@@ -1031,8 +1129,7 @@
 	done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) -
 							dn.ofs_in_node, len);
 	for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
-		*blkaddr = datablock_addr(dn.inode,
-					dn.node_page, dn.ofs_in_node);
+		*blkaddr = f2fs_data_blkaddr(&dn);
 
 		if (__is_valid_data_blkaddr(*blkaddr) &&
 			!f2fs_is_valid_blkaddr(sbi, *blkaddr,
@@ -1043,7 +1140,7 @@
 
 		if (!f2fs_is_checkpointed_data(sbi, *blkaddr)) {
 
-			if (test_opt(sbi, LFS)) {
+			if (f2fs_lfs_mode(sbi)) {
 				f2fs_put_dnode(&dn);
 				return -EOPNOTSUPP;
 			}
@@ -1121,8 +1218,7 @@
 				ADDRS_PER_PAGE(dn.node_page, dst_inode) -
 						dn.ofs_in_node, len - i);
 			do {
-				dn.data_blkaddr = datablock_addr(dn.inode,
-						dn.node_page, dn.ofs_in_node);
+				dn.data_blkaddr = f2fs_data_blkaddr(&dn);
 				f2fs_truncate_data_blocks_range(&dn, 1);
 
 				if (do_replace[i]) {
@@ -1185,13 +1281,13 @@
 
 		src_blkaddr = f2fs_kvzalloc(F2FS_I_SB(src_inode),
 					array_size(olen, sizeof(block_t)),
-					GFP_KERNEL);
+					GFP_NOFS);
 		if (!src_blkaddr)
 			return -ENOMEM;
 
 		do_replace = f2fs_kvzalloc(F2FS_I_SB(src_inode),
 					array_size(olen, sizeof(int)),
-					GFP_KERNEL);
+					GFP_NOFS);
 		if (!do_replace) {
 			kvfree(src_blkaddr);
 			return -ENOMEM;
@@ -1279,8 +1375,6 @@
 	truncate_pagecache(inode, offset);
 
 	new_size = i_size_read(inode) - len;
-	truncate_pagecache(inode, new_size);
-
 	ret = f2fs_truncate_blocks(inode, new_size, true);
 	up_write(&F2FS_I(inode)->i_mmap_sem);
 	if (!ret)
@@ -1298,8 +1392,7 @@
 	int ret;
 
 	for (; index < end; index++, dn->ofs_in_node++) {
-		if (datablock_addr(dn->inode, dn->node_page,
-					dn->ofs_in_node) == NULL_ADDR)
+		if (f2fs_data_blkaddr(dn) == NULL_ADDR)
 			count++;
 	}
 
@@ -1310,8 +1403,7 @@
 
 	dn->ofs_in_node = ofs_in_node;
 	for (index = start; index < end; index++, dn->ofs_in_node++) {
-		dn->data_blkaddr = datablock_addr(dn->inode,
-					dn->node_page, dn->ofs_in_node);
+		dn->data_blkaddr = f2fs_data_blkaddr(dn);
 		/*
 		 * f2fs_reserve_new_blocks will not guarantee entire block
 		 * allocation.
@@ -1520,9 +1612,10 @@
 	struct f2fs_map_blocks map = { .m_next_pgofs = NULL,
 			.m_next_extent = NULL, .m_seg_type = NO_CHECK_TYPE,
 			.m_may_create = true };
-	pgoff_t pg_end;
+	pgoff_t pg_start, pg_end;
 	loff_t new_size = i_size_read(inode);
 	loff_t off_end;
+	block_t expanded = 0;
 	int err;
 
 	err = inode_newsize_ok(inode, (len + offset));
@@ -1535,27 +1628,62 @@
 
 	f2fs_balance_fs(sbi, true);
 
+	pg_start = ((unsigned long long)offset) >> PAGE_SHIFT;
 	pg_end = ((unsigned long long)offset + len) >> PAGE_SHIFT;
 	off_end = (offset + len) & (PAGE_SIZE - 1);
 
-	map.m_lblk = ((unsigned long long)offset) >> PAGE_SHIFT;
-	map.m_len = pg_end - map.m_lblk;
+	map.m_lblk = pg_start;
+	map.m_len = pg_end - pg_start;
 	if (off_end)
 		map.m_len++;
 
-	if (f2fs_is_pinned_file(inode))
-		map.m_seg_type = CURSEG_COLD_DATA;
+	if (!map.m_len)
+		return 0;
 
-	err = f2fs_map_blocks(inode, &map, 1, (f2fs_is_pinned_file(inode) ?
-						F2FS_GET_BLOCK_PRE_DIO :
-						F2FS_GET_BLOCK_PRE_AIO));
+	if (f2fs_is_pinned_file(inode)) {
+		block_t sec_blks = BLKS_PER_SEC(sbi);
+		block_t sec_len = roundup(map.m_len, sec_blks);
+
+		map.m_len = sec_blks;
+next_alloc:
+		if (has_not_enough_free_secs(sbi, 0,
+			GET_SEC_FROM_SEG(sbi, overprovision_segments(sbi)))) {
+			down_write(&sbi->gc_lock);
+			err = f2fs_gc(sbi, true, false, false, NULL_SEGNO);
+			if (err && err != -ENODATA && err != -EAGAIN)
+				goto out_err;
+		}
+
+		down_write(&sbi->pin_sem);
+
+		f2fs_lock_op(sbi);
+		f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
+		f2fs_unlock_op(sbi);
+
+		map.m_seg_type = CURSEG_COLD_DATA_PINNED;
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_DIO);
+
+		up_write(&sbi->pin_sem);
+
+		expanded += map.m_len;
+		sec_len -= map.m_len;
+		map.m_lblk += map.m_len;
+		if (!err && sec_len)
+			goto next_alloc;
+
+		map.m_len = expanded;
+	} else {
+		err = f2fs_map_blocks(inode, &map, 1, F2FS_GET_BLOCK_PRE_AIO);
+		expanded = map.m_len;
+	}
+out_err:
 	if (err) {
 		pgoff_t last_off;
 
-		if (!map.m_len)
+		if (!expanded)
 			return err;
 
-		last_off = map.m_lblk + map.m_len - 1;
+		last_off = pg_start + expanded - 1;
 
 		/* update new size to the failed position */
 		new_size = (last_off == pg_end) ? offset + len :
@@ -1584,6 +1712,8 @@
 		return -EIO;
 	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(inode)))
 		return -ENOSPC;
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
 
 	/* f2fs only support ->fallocate for regular file */
 	if (!S_ISREG(inode->i_mode))
@@ -1593,6 +1723,11 @@
 		(mode & (FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_INSERT_RANGE)))
 		return -EOPNOTSUPP;
 
+	if (f2fs_compressed_file(inode) &&
+		(mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE |
+			FALLOC_FL_ZERO_RANGE | FALLOC_FL_INSERT_RANGE)))
+		return -EOPNOTSUPP;
+
 	if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE |
 			FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE |
 			FALLOC_FL_INSERT_RANGE))
@@ -1670,19 +1805,53 @@
 static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask)
 {
 	struct f2fs_inode_info *fi = F2FS_I(inode);
+	u32 masked_flags = fi->i_flags & mask;
+
+	/* mask can be shrunk by flags_valid selector */
+	iflags &= mask;
 
 	/* Is it quota file? Do not allow user to mess with it */
 	if (IS_NOQUOTA(inode))
 		return -EPERM;
 
-	if ((iflags ^ fi->i_flags) & F2FS_CASEFOLD_FL) {
+	if ((iflags ^ masked_flags) & F2FS_CASEFOLD_FL) {
 		if (!f2fs_sb_has_casefold(F2FS_I_SB(inode)))
 			return -EOPNOTSUPP;
 		if (!f2fs_empty_dir(inode))
 			return -ENOTEMPTY;
 	}
 
+	if (iflags & (F2FS_COMPR_FL | F2FS_NOCOMP_FL)) {
+		if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+			return -EOPNOTSUPP;
+		if ((iflags & F2FS_COMPR_FL) && (iflags & F2FS_NOCOMP_FL))
+			return -EINVAL;
+	}
+
+	if ((iflags ^ masked_flags) & F2FS_COMPR_FL) {
+		if (masked_flags & F2FS_COMPR_FL) {
+			if (!f2fs_disable_compressed_file(inode))
+				return -EINVAL;
+		}
+		if (iflags & F2FS_NOCOMP_FL)
+			return -EINVAL;
+		if (iflags & F2FS_COMPR_FL) {
+			if (!f2fs_may_compress(inode))
+				return -EINVAL;
+			if (S_ISREG(inode->i_mode) && inode->i_size)
+				return -EINVAL;
+
+			set_compress_context(inode);
+		}
+	}
+	if ((iflags ^ masked_flags) & F2FS_NOCOMP_FL) {
+		if (masked_flags & F2FS_COMPR_FL)
+			return -EINVAL;
+	}
+
 	fi->i_flags = iflags | (fi->i_flags & ~mask);
+	f2fs_bug_on(F2FS_I_SB(inode), (fi->i_flags & F2FS_COMPR_FL) &&
+					(fi->i_flags & F2FS_NOCOMP_FL));
 
 	if (fi->i_flags & F2FS_PROJINHERIT_FL)
 		set_inode_flag(inode, FI_PROJ_INHERIT);
@@ -1708,11 +1877,13 @@
 	u32 iflag;
 	u32 fsflag;
 } f2fs_fsflags_map[] = {
+	{ F2FS_COMPR_FL,	FS_COMPR_FL },
 	{ 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_NOCOMP_FL,	FS_NOCOMP_FL },
 	{ F2FS_INDEX_FL,	FS_INDEX_FL },
 	{ F2FS_DIRSYNC_FL,	FS_DIRSYNC_FL },
 	{ F2FS_PROJINHERIT_FL,	FS_PROJINHERIT_FL },
@@ -1720,11 +1891,13 @@
 };
 
 #define F2FS_GETTABLE_FS_FL (		\
+		FS_COMPR_FL |		\
 		FS_SYNC_FL |		\
 		FS_IMMUTABLE_FL |	\
 		FS_APPEND_FL |		\
 		FS_NODUMP_FL |		\
 		FS_NOATIME_FL |		\
+		FS_NOCOMP_FL |		\
 		FS_INDEX_FL |		\
 		FS_DIRSYNC_FL |		\
 		FS_PROJINHERIT_FL |	\
@@ -1735,11 +1908,13 @@
 		FS_CASEFOLD_FL)
 
 #define F2FS_SETTABLE_FS_FL (		\
+		FS_COMPR_FL |		\
 		FS_SYNC_FL |		\
 		FS_IMMUTABLE_FL |	\
 		FS_APPEND_FL |		\
 		FS_NODUMP_FL |		\
 		FS_NOATIME_FL |		\
+		FS_NOCOMP_FL |		\
 		FS_DIRSYNC_FL |		\
 		FS_PROJINHERIT_FL |	\
 		FS_CASEFOLD_FL)
@@ -1860,6 +2035,8 @@
 
 	inode_lock(inode);
 
+	f2fs_disable_compressed_file(inode);
+
 	if (f2fs_is_atomic_file(inode)) {
 		if (is_inode_flag_set(inode, FI_ATOMIC_REVOKE_REQUEST))
 			ret = -EINVAL;
@@ -1898,7 +2075,6 @@
 
 	f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 	F2FS_I(inode)->inmem_task = current;
-	stat_inc_atomic_write(inode);
 	stat_update_max_atomic_write(inode);
 out:
 	inode_unlock(inode);
@@ -2273,6 +2449,14 @@
 	return fscrypt_ioctl_get_key_status(filp, (void __user *)arg);
 }
 
+static int f2fs_ioc_get_encryption_nonce(struct file *filp, unsigned long arg)
+{
+	if (!f2fs_sb_has_encrypt(F2FS_I_SB(file_inode(filp))))
+		return -EOPNOTSUPP;
+
+	return fscrypt_ioctl_get_nonce(filp, (void __user *)arg);
+}
+
 static int f2fs_ioc_gc(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2294,40 +2478,33 @@
 		return ret;
 
 	if (!sync) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
 	} else {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 	}
 
-	ret = f2fs_gc(sbi, sync, true, NULL_SEGNO);
+	ret = f2fs_gc(sbi, sync, true, false, NULL_SEGNO);
 out:
 	mnt_drop_write_file(filp);
 	return ret;
 }
 
-static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
+static int __f2fs_ioc_gc_range(struct file *filp, struct f2fs_gc_range *range)
 {
-	struct inode *inode = file_inode(filp);
-	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-	struct f2fs_gc_range range;
+	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
 	u64 end;
 	int ret;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
-
-	if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
-							sizeof(range)))
-		return -EFAULT;
-
 	if (f2fs_readonly(sbi->sb))
 		return -EROFS;
 
-	end = range.start + range.len;
-	if (end < range.start || range.start < MAIN_BLKADDR(sbi) ||
+	end = range->start + range->len;
+	if (end < range->start || range->start < MAIN_BLKADDR(sbi) ||
 					end >= MAX_BLKADDR(sbi))
 		return -EINVAL;
 
@@ -2336,24 +2513,40 @@
 		return ret;
 
 do_more:
-	if (!range.sync) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+	if (!range->sync) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
 	} else {
-		mutex_lock(&sbi->gc_mutex);
+		down_write(&sbi->gc_lock);
 	}
 
-	ret = f2fs_gc(sbi, range.sync, true, GET_SEGNO(sbi, range.start));
-	range.start += BLKS_PER_SEC(sbi);
-	if (range.start <= end)
+	ret = f2fs_gc(sbi, range->sync, true, false,
+				GET_SEGNO(sbi, range->start));
+	if (ret) {
+		if (ret == -EBUSY)
+			ret = -EAGAIN;
+		goto out;
+	}
+	range->start += BLKS_PER_SEC(sbi);
+	if (range->start <= end)
 		goto do_more;
 out:
 	mnt_drop_write_file(filp);
 	return ret;
 }
 
+static int f2fs_ioc_gc_range(struct file *filp, unsigned long arg)
+{
+	struct f2fs_gc_range range;
+
+	if (copy_from_user(&range, (struct f2fs_gc_range __user *)arg,
+							sizeof(range)))
+		return -EFAULT;
+	return __f2fs_ioc_gc_range(filp, &range);
+}
+
 static int f2fs_ioc_write_checkpoint(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2387,7 +2580,7 @@
 {
 	struct inode *inode = file_inode(filp);
 	struct f2fs_map_blocks map = { .m_next_extent = NULL,
-					.m_seg_type = NO_CHECK_TYPE ,
+					.m_seg_type = NO_CHECK_TYPE,
 					.m_may_create = false };
 	struct extent_info ei = {0, 0, 0};
 	pgoff_t pg_start, pg_end, next_pgofs;
@@ -2554,7 +2747,7 @@
 		return -EINVAL;
 
 	if (unlikely((range.start + range.len) >> PAGE_SHIFT >
-					sbi->max_file_blocks))
+					max_file_blocks(inode)))
 		return -EINVAL;
 
 	err = mnt_want_write_file(filp);
@@ -2598,6 +2791,9 @@
 	if (IS_ENCRYPTED(src) || IS_ENCRYPTED(dst))
 		return -EOPNOTSUPP;
 
+	if (pos_out < 0 || pos_in < 0)
+		return -EINVAL;
+
 	if (src == dst) {
 		if (pos_in == pos_out)
 			return 0;
@@ -2687,9 +2883,9 @@
 	return ret;
 }
 
-static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
+static int __f2fs_ioc_move_range(struct file *filp,
+				struct f2fs_move_range *range)
 {
-	struct f2fs_move_range range;
 	struct fd dst;
 	int err;
 
@@ -2697,11 +2893,7 @@
 			!(filp->f_mode & FMODE_WRITE))
 		return -EBADF;
 
-	if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
-							sizeof(range)))
-		return -EFAULT;
-
-	dst = fdget(range.dst_fd);
+	dst = fdget(range->dst_fd);
 	if (!dst.file)
 		return -EBADF;
 
@@ -2714,21 +2906,25 @@
 	if (err)
 		goto err_out;
 
-	err = f2fs_move_file_range(filp, range.pos_in, dst.file,
-					range.pos_out, range.len);
+	err = f2fs_move_file_range(filp, range->pos_in, dst.file,
+					range->pos_out, range->len);
 
 	mnt_drop_write_file(filp);
-	if (err)
-		goto err_out;
-
-	if (copy_to_user((struct f2fs_move_range __user *)arg,
-						&range, sizeof(range)))
-		err = -EFAULT;
 err_out:
 	fdput(dst);
 	return err;
 }
 
+static int f2fs_ioc_move_range(struct file *filp, unsigned long arg)
+{
+	struct f2fs_move_range range;
+
+	if (copy_from_user(&range, (struct f2fs_move_range __user *)arg,
+							sizeof(range)))
+		return -EFAULT;
+	return __f2fs_ioc_move_range(filp, &range);
+}
+
 static int f2fs_ioc_flush_device(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
@@ -2773,14 +2969,14 @@
 	end_segno = min(start_segno + range.segments, dev_end_segno);
 
 	while (start_segno < end_segno) {
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (!down_write_trylock(&sbi->gc_lock)) {
 			ret = -EBUSY;
 			goto out;
 		}
 		sm->last_victim[GC_CB] = end_segno + 1;
 		sm->last_victim[GC_GREEDY] = end_segno + 1;
 		sm->last_victim[ALLOC_NEXT] = end_segno + 1;
-		ret = f2fs_gc(sbi, true, true, start_segno);
+		ret = f2fs_gc(sbi, true, true, true, start_segno);
 		if (ret == -EAGAIN)
 			ret = 0;
 		else if (ret < 0)
@@ -3068,10 +3264,16 @@
 		ret = -EAGAIN;
 		goto out;
 	}
+
 	ret = f2fs_convert_inline_inode(inode);
 	if (ret)
 		goto out;
 
+	if (!f2fs_disable_compressed_file(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
 	set_inode_flag(inode, FI_PIN_FILE);
 	ret = F2FS_I(inode)->i_gc_failures[GC_FAILURE_PIN];
 done:
@@ -3108,7 +3310,7 @@
 	map.m_next_extent = &m_next_extent;
 	map.m_seg_type = NO_CHECK_TYPE;
 	map.m_may_create = false;
-	end = F2FS_I_SB(inode)->max_file_blocks;
+	end = max_file_blocks(inode);
 
 	while (map.m_lblk < end) {
 		map.m_len = end - map.m_lblk;
@@ -3122,7 +3324,7 @@
 		map.m_lblk = m_next_extent;
 	}
 
-	return err;
+	return 0;
 }
 
 static int f2fs_ioc_precache_extents(struct file *filp, unsigned long arg)
@@ -3134,7 +3336,6 @@
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(file_inode(filp));
 	__u64 block_count;
-	int ret;
 
 	if (!capable(CAP_SYS_ADMIN))
 		return -EPERM;
@@ -3146,9 +3347,7 @@
 			   sizeof(block_count)))
 		return -EFAULT;
 
-	ret = f2fs_resize_fs(sbi, block_count);
-
-	return ret;
+	return f2fs_resize_fs(sbi, block_count);
 }
 
 static int f2fs_ioc_enable_verity(struct file *filp, unsigned long arg)
@@ -3159,7 +3358,7 @@
 
 	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",
+			  "Can't enable fs-verity on inode %lu: the verity feature is not enabled on this filesystem",
 			  inode->i_ino);
 		return -EOPNOTSUPP;
 	}
@@ -3175,7 +3374,15 @@
 	return fsverity_ioctl_measure(filp, (void __user *)arg);
 }
 
-static int f2fs_get_volume_name(struct file *filp, unsigned long arg)
+static int f2fs_ioc_read_verity_metadata(struct file *filp, unsigned long arg)
+{
+	if (!f2fs_sb_has_verity(F2FS_I_SB(file_inode(filp))))
+		return -EOPNOTSUPP;
+
+	return fsverity_ioctl_read_metadata(filp, (const void __user *)arg);
+}
+
+static int f2fs_ioc_getfslabel(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -3197,11 +3404,11 @@
 				min(FSLABEL_MAX, count)))
 		err = -EFAULT;
 
-	kvfree(vbuf);
+	kfree(vbuf);
 	return err;
 }
 
-static int f2fs_set_volume_name(struct file *filp, unsigned long arg)
+static int f2fs_ioc_setfslabel(struct file *filp, unsigned long arg)
 {
 	struct inode *inode = file_inode(filp);
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -3237,19 +3444,791 @@
 	return err;
 }
 
-long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+static int f2fs_get_compress_blocks(struct file *filp, 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;
+	struct inode *inode = file_inode(filp);
+	__u64 blocks;
 
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	blocks = atomic_read(&F2FS_I(inode)->i_compr_blocks);
+	return put_user(blocks, (u64 __user *)arg);
+}
+
+static int release_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
+	unsigned int released_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	block_t blkaddr;
+	int i;
+
+	for (i = 0; i < count; i++) {
+		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+						dn->ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			continue;
+		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
+					DATA_GENERIC_ENHANCE)))
+			return -EFSCORRUPTED;
+	}
+
+	while (count) {
+		int compr_blocks = 0;
+
+		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
+			blkaddr = f2fs_data_blkaddr(dn);
+
+			if (i == 0) {
+				if (blkaddr == COMPRESS_ADDR)
+					continue;
+				dn->ofs_in_node += cluster_size;
+				goto next;
+			}
+
+			if (__is_valid_data_blkaddr(blkaddr))
+				compr_blocks++;
+
+			if (blkaddr != NEW_ADDR)
+				continue;
+
+			dn->data_blkaddr = NULL_ADDR;
+			f2fs_set_data_blkaddr(dn);
+		}
+
+		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, false);
+		dec_valid_block_count(sbi, dn->inode,
+					cluster_size - compr_blocks);
+
+		released_blocks += cluster_size - compr_blocks;
+next:
+		count -= cluster_size;
+	}
+
+	return released_blocks;
+}
+
+static int f2fs_release_compress_blocks(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int released_blocks = 0;
+	int ret;
+	int writecount;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	if (f2fs_readonly(sbi->sb))
+		return -EROFS;
+
+	ret = mnt_want_write_file(filp);
+	if (ret)
+		return ret;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	inode_lock(inode);
+
+	writecount = atomic_read(&inode->i_writecount);
+	if ((filp->f_mode & FMODE_WRITE && writecount != 1) ||
+			(!(filp->f_mode & FMODE_WRITE) && writecount)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	set_inode_flag(inode, FI_COMPRESS_RELEASED);
+	inode->i_ctime = current_time(inode);
+	f2fs_mark_inode_dirty_sync(inode, true);
+
+	if (!atomic_read(&F2FS_I(inode)->i_compr_blocks))
+		goto out;
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	while (page_idx < last_idx) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				page_idx = f2fs_get_next_page_offset(&dn,
+								page_idx);
+				ret = 0;
+				continue;
+			}
+			break;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
+		count = round_up(count, F2FS_I(inode)->i_cluster_size);
+
+		ret = release_compress_blocks(&dn, count);
+
+		f2fs_put_dnode(&dn);
+
+		if (ret < 0)
+			break;
+
+		page_idx += count;
+		released_blocks += ret;
+	}
+
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+out:
+	inode_unlock(inode);
+
+	mnt_drop_write_file(filp);
+
+	if (ret >= 0) {
+		ret = put_user(released_blocks, (u64 __user *)arg);
+	} else if (released_blocks &&
+			atomic_read(&F2FS_I(inode)->i_compr_blocks)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: partial blocks were released i_ino=%lx "
+			"iblocks=%llu, released=%u, compr_blocks=%u, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			released_blocks,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
+	}
+
+	return ret;
+}
+
+static int reserve_compress_blocks(struct dnode_of_data *dn, pgoff_t count)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
+	unsigned int reserved_blocks = 0;
+	int cluster_size = F2FS_I(dn->inode)->i_cluster_size;
+	block_t blkaddr;
+	int i;
+
+	for (i = 0; i < count; i++) {
+		blkaddr = data_blkaddr(dn->inode, dn->node_page,
+						dn->ofs_in_node + i);
+
+		if (!__is_valid_data_blkaddr(blkaddr))
+			continue;
+		if (unlikely(!f2fs_is_valid_blkaddr(sbi, blkaddr,
+					DATA_GENERIC_ENHANCE)))
+			return -EFSCORRUPTED;
+	}
+
+	while (count) {
+		int compr_blocks = 0;
+		blkcnt_t reserved;
+		int ret;
+
+		for (i = 0; i < cluster_size; i++, dn->ofs_in_node++) {
+			blkaddr = f2fs_data_blkaddr(dn);
+
+			if (i == 0) {
+				if (blkaddr == COMPRESS_ADDR)
+					continue;
+				dn->ofs_in_node += cluster_size;
+				goto next;
+			}
+
+			if (__is_valid_data_blkaddr(blkaddr)) {
+				compr_blocks++;
+				continue;
+			}
+
+			dn->data_blkaddr = NEW_ADDR;
+			f2fs_set_data_blkaddr(dn);
+		}
+
+		reserved = cluster_size - compr_blocks;
+		ret = inc_valid_block_count(sbi, dn->inode, &reserved);
+		if (ret)
+			return ret;
+
+		if (reserved != cluster_size - compr_blocks)
+			return -ENOSPC;
+
+		f2fs_i_compr_blocks_update(dn->inode, compr_blocks, true);
+
+		reserved_blocks += reserved;
+next:
+		count -= cluster_size;
+	}
+
+	return reserved_blocks;
+}
+
+static int f2fs_reserve_compress_blocks(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int reserved_blocks = 0;
+	int ret;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	if (f2fs_readonly(sbi->sb))
+		return -EROFS;
+
+	ret = mnt_want_write_file(filp);
+	if (ret)
+		return ret;
+
+	if (atomic_read(&F2FS_I(inode)->i_compr_blocks))
+		goto out;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	inode_lock(inode);
+
+	if (!is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
+		ret = -EINVAL;
+		goto unlock_inode;
+	}
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	while (page_idx < last_idx) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, page_idx, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				page_idx = f2fs_get_next_page_offset(&dn,
+								page_idx);
+				ret = 0;
+				continue;
+			}
+			break;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, last_idx - page_idx);
+		count = round_up(count, F2FS_I(inode)->i_cluster_size);
+
+		ret = reserve_compress_blocks(&dn, count);
+
+		f2fs_put_dnode(&dn);
+
+		if (ret < 0)
+			break;
+
+		page_idx += count;
+		reserved_blocks += ret;
+	}
+
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+
+	if (ret >= 0) {
+		clear_inode_flag(inode, FI_COMPRESS_RELEASED);
+		inode->i_ctime = current_time(inode);
+		f2fs_mark_inode_dirty_sync(inode, true);
+	}
+unlock_inode:
+	inode_unlock(inode);
+out:
+	mnt_drop_write_file(filp);
+
+	if (ret >= 0) {
+		ret = put_user(reserved_blocks, (u64 __user *)arg);
+	} else if (reserved_blocks &&
+			atomic_read(&F2FS_I(inode)->i_compr_blocks)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: partial blocks were released i_ino=%lx "
+			"iblocks=%llu, reserved=%u, compr_blocks=%u, "
+			"run fsck to fix.",
+			__func__, inode->i_ino, inode->i_blocks,
+			reserved_blocks,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
+	}
+
+	return ret;
+}
+
+static int f2fs_secure_erase(struct block_device *bdev, struct inode *inode,
+		pgoff_t off, block_t block, block_t len, u32 flags)
+{
+	struct request_queue *q = bdev_get_queue(bdev);
+	sector_t sector = SECTOR_FROM_BLOCK(block);
+	sector_t nr_sects = SECTOR_FROM_BLOCK(len);
+	int ret = 0;
+
+	if (!q)
+		return -ENXIO;
+
+	if (flags & F2FS_TRIM_FILE_DISCARD)
+		ret = blkdev_issue_discard(bdev, sector, nr_sects, GFP_NOFS,
+						blk_queue_secure_erase(q) ?
+						BLKDEV_DISCARD_SECURE : 0);
+
+	if (!ret && (flags & F2FS_TRIM_FILE_ZEROOUT)) {
+		if (IS_ENCRYPTED(inode))
+			ret = fscrypt_zeroout_range(inode, off, block, len);
+		else
+			ret = blkdev_issue_zeroout(bdev, sector, nr_sects,
+					GFP_NOFS, 0);
+	}
+
+	return ret;
+}
+
+static int f2fs_sec_trim_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct address_space *mapping = inode->i_mapping;
+	struct block_device *prev_bdev = NULL;
+	struct f2fs_sectrim_range range;
+	pgoff_t index, pg_end, prev_index = 0;
+	block_t prev_block = 0, len = 0;
+	loff_t end_addr;
+	bool to_end = false;
+	int ret = 0;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (copy_from_user(&range, (struct f2fs_sectrim_range __user *)arg,
+				sizeof(range)))
+		return -EFAULT;
+
+	if (range.flags == 0 || (range.flags & ~F2FS_TRIM_FILE_MASK) ||
+			!S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	if (((range.flags & F2FS_TRIM_FILE_DISCARD) &&
+			!f2fs_hw_support_discard(sbi)) ||
+			((range.flags & F2FS_TRIM_FILE_ZEROOUT) &&
+			 IS_ENCRYPTED(inode) && f2fs_is_multi_device(sbi)))
+		return -EOPNOTSUPP;
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (f2fs_is_atomic_file(inode) || f2fs_compressed_file(inode) ||
+			range.start >= inode->i_size) {
+		ret = -EINVAL;
+		goto err;
+	}
+
+	if (range.len == 0)
+		goto err;
+
+	if (inode->i_size - range.start > range.len) {
+		end_addr = range.start + range.len;
+	} else {
+		end_addr = range.len == (u64)-1 ?
+			sbi->sb->s_maxbytes : inode->i_size;
+		to_end = true;
+	}
+
+	if (!IS_ALIGNED(range.start, F2FS_BLKSIZE) ||
+			(!to_end && !IS_ALIGNED(end_addr, F2FS_BLKSIZE))) {
+		ret = -EINVAL;
+		goto err;
+	}
+
+	index = F2FS_BYTES_TO_BLK(range.start);
+	pg_end = DIV_ROUND_UP(end_addr, F2FS_BLKSIZE);
+
+	ret = f2fs_convert_inline_inode(inode);
+	if (ret)
+		goto err;
+
+	down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+	down_write(&F2FS_I(inode)->i_mmap_sem);
+
+	ret = filemap_write_and_wait_range(mapping, range.start,
+			to_end ? LLONG_MAX : end_addr - 1);
+	if (ret)
+		goto out;
+
+	truncate_inode_pages_range(mapping, range.start,
+			to_end ? -1 : end_addr - 1);
+
+	while (index < pg_end) {
+		struct dnode_of_data dn;
+		pgoff_t end_offset, count;
+		int i;
+
+		set_new_dnode(&dn, inode, NULL, NULL, 0);
+		ret = f2fs_get_dnode_of_data(&dn, index, LOOKUP_NODE);
+		if (ret) {
+			if (ret == -ENOENT) {
+				index = f2fs_get_next_page_offset(&dn, index);
+				continue;
+			}
+			goto out;
+		}
+
+		end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
+		count = min(end_offset - dn.ofs_in_node, pg_end - index);
+		for (i = 0; i < count; i++, index++, dn.ofs_in_node++) {
+			struct block_device *cur_bdev;
+			block_t blkaddr = f2fs_data_blkaddr(&dn);
+
+			if (!__is_valid_data_blkaddr(blkaddr))
+				continue;
+
+			if (!f2fs_is_valid_blkaddr(sbi, blkaddr,
+						DATA_GENERIC_ENHANCE)) {
+				ret = -EFSCORRUPTED;
+				f2fs_put_dnode(&dn);
+				goto out;
+			}
+
+			cur_bdev = f2fs_target_device(sbi, blkaddr, NULL);
+			if (f2fs_is_multi_device(sbi)) {
+				int di = f2fs_target_device_index(sbi, blkaddr);
+
+				blkaddr -= FDEV(di).start_blk;
+			}
+
+			if (len) {
+				if (prev_bdev == cur_bdev &&
+						index == prev_index + len &&
+						blkaddr == prev_block + len) {
+					len++;
+				} else {
+					ret = f2fs_secure_erase(prev_bdev,
+						inode, prev_index, prev_block,
+						len, range.flags);
+					if (ret) {
+						f2fs_put_dnode(&dn);
+						goto out;
+					}
+
+					len = 0;
+				}
+			}
+
+			if (!len) {
+				prev_bdev = cur_bdev;
+				prev_index = index;
+				prev_block = blkaddr;
+				len = 1;
+			}
+		}
+
+		f2fs_put_dnode(&dn);
+
+		if (fatal_signal_pending(current)) {
+			ret = -EINTR;
+			goto out;
+		}
+		cond_resched();
+	}
+
+	if (len)
+		ret = f2fs_secure_erase(prev_bdev, inode, prev_index,
+				prev_block, len, range.flags);
+out:
+	up_write(&F2FS_I(inode)->i_mmap_sem);
+	up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+err:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int f2fs_ioc_get_compress_option(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_comp_option option;
+
+	if (!f2fs_sb_has_compression(F2FS_I_SB(inode)))
+		return -EOPNOTSUPP;
+
+	inode_lock_shared(inode);
+
+	if (!f2fs_compressed_file(inode)) {
+		inode_unlock_shared(inode);
+		return -ENODATA;
+	}
+
+	option.algorithm = F2FS_I(inode)->i_compress_algorithm;
+	option.log_cluster_size = F2FS_I(inode)->i_log_cluster_size;
+
+	inode_unlock_shared(inode);
+
+	if (copy_to_user((struct f2fs_comp_option __user *)arg, &option,
+				sizeof(option)))
+		return -EFAULT;
+
+	return 0;
+}
+
+static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_comp_option option;
+	int ret = 0;
+
+	if (!f2fs_sb_has_compression(sbi))
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (copy_from_user(&option, (struct f2fs_comp_option __user *)arg,
+				sizeof(option)))
+		return -EFAULT;
+
+	if (!f2fs_compressed_file(inode) ||
+			option.log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
+			option.log_cluster_size > MAX_COMPRESS_LOG_SIZE ||
+			option.algorithm >= COMPRESS_MAX)
+		return -EINVAL;
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (f2fs_is_mmap_file(inode) || get_dirty_pages(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	if (inode->i_size != 0) {
+		ret = -EFBIG;
+		goto out;
+	}
+
+	F2FS_I(inode)->i_compress_algorithm = option.algorithm;
+	F2FS_I(inode)->i_log_cluster_size = option.log_cluster_size;
+	F2FS_I(inode)->i_cluster_size = 1 << option.log_cluster_size;
+	f2fs_mark_inode_dirty_sync(inode, true);
+
+	if (!f2fs_is_compress_backend_ready(inode))
+		f2fs_warn(sbi, "compression algorithm is successfully set, "
+			"but current kernel doesn't support this algorithm.");
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int redirty_blocks(struct inode *inode, pgoff_t page_idx, int len)
+{
+	struct address_space *mapping = inode->i_mapping;
+	struct page *page;
+	pgoff_t redirty_idx = page_idx;
+	int i, page_len = 0, ret = 0;
+
+	for (i = 0; i < len; i++, page_idx++) {
+		page = read_cache_page(mapping, page_idx, NULL, NULL);
+		if (IS_ERR(page)) {
+			ret = PTR_ERR(page);
+			break;
+		}
+		page_len++;
+	}
+
+	for (i = 0; i < page_len; i++, redirty_idx++) {
+		page = find_lock_page(mapping, redirty_idx);
+		if (!page) {
+			ret = -ENOMEM;
+			break;
+		}
+		set_page_dirty(page);
+		f2fs_put_page(page, 1);
+		f2fs_put_page(page, 0);
+	}
+
+	return ret;
+}
+
+static int f2fs_ioc_decompress_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	struct f2fs_inode_info *fi = F2FS_I(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int blk_per_seg = sbi->blocks_per_seg;
+	int cluster_size = F2FS_I(inode)->i_cluster_size;
+	int count, ret;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
+	if (f2fs_is_mmap_file(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	if (!atomic_read(&fi->i_compr_blocks))
+		goto out;
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	count = last_idx - page_idx;
+	while (count) {
+		int len = min(cluster_size, count);
+
+		ret = redirty_blocks(inode, page_idx, len);
+		if (ret < 0)
+			break;
+
+		if (get_dirty_pages(inode) >= blk_per_seg)
+			filemap_fdatawrite(inode->i_mapping);
+
+		count -= len;
+		page_idx += len;
+	}
+
+	if (!ret)
+		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
+							LLONG_MAX);
+
+	if (ret)
+		f2fs_warn(sbi, "%s: The file might be partially decompressed (errno=%d). Please delete the file.",
+			  __func__, ret);
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static int f2fs_ioc_compress_file(struct file *filp, unsigned long arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+	pgoff_t page_idx = 0, last_idx;
+	unsigned int blk_per_seg = sbi->blocks_per_seg;
+	int cluster_size = F2FS_I(inode)->i_cluster_size;
+	int count, ret;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER)
+		return -EOPNOTSUPP;
+
+	if (!(filp->f_mode & FMODE_WRITE))
+		return -EBADF;
+
+	if (!f2fs_compressed_file(inode))
+		return -EINVAL;
+
+	f2fs_balance_fs(F2FS_I_SB(inode), true);
+
+	file_start_write(filp);
+	inode_lock(inode);
+
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
+	if (f2fs_is_mmap_file(inode)) {
+		ret = -EBUSY;
+		goto out;
+	}
+
+	ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
+	if (ret)
+		goto out;
+
+	set_inode_flag(inode, FI_ENABLE_COMPRESS);
+
+	last_idx = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+
+	count = last_idx - page_idx;
+	while (count) {
+		int len = min(cluster_size, count);
+
+		ret = redirty_blocks(inode, page_idx, len);
+		if (ret < 0)
+			break;
+
+		if (get_dirty_pages(inode) >= blk_per_seg)
+			filemap_fdatawrite(inode->i_mapping);
+
+		count -= len;
+		page_idx += len;
+	}
+
+	if (!ret)
+		ret = filemap_write_and_wait_range(inode->i_mapping, 0,
+							LLONG_MAX);
+
+	clear_inode_flag(inode, FI_ENABLE_COMPRESS);
+
+	if (ret)
+		f2fs_warn(sbi, "%s: The file might be partially compressed (errno=%d). Please delete the file.",
+			  __func__, ret);
+out:
+	inode_unlock(inode);
+	file_end_write(filp);
+
+	return ret;
+}
+
+static long __f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
 	switch (cmd) {
-	case F2FS_IOC_GETFLAGS:
+	case FS_IOC_GETFLAGS:
 		return f2fs_ioc_getflags(filp, arg);
-	case F2FS_IOC_SETFLAGS:
+	case FS_IOC_SETFLAGS:
 		return f2fs_ioc_setflags(filp, arg);
-	case F2FS_IOC_GETVERSION:
+	case FS_IOC_GETVERSION:
 		return f2fs_ioc_getversion(filp, arg);
 	case F2FS_IOC_START_ATOMIC_WRITE:
 		return f2fs_ioc_start_atomic_write(filp);
@@ -3265,11 +4244,11 @@
 		return f2fs_ioc_shutdown(filp, arg);
 	case FITRIM:
 		return f2fs_ioc_fitrim(filp, arg);
-	case F2FS_IOC_SET_ENCRYPTION_POLICY:
+	case FS_IOC_SET_ENCRYPTION_POLICY:
 		return f2fs_ioc_set_encryption_policy(filp, arg);
-	case F2FS_IOC_GET_ENCRYPTION_POLICY:
+	case FS_IOC_GET_ENCRYPTION_POLICY:
 		return f2fs_ioc_get_encryption_policy(filp, arg);
-	case F2FS_IOC_GET_ENCRYPTION_PWSALT:
+	case FS_IOC_GET_ENCRYPTION_PWSALT:
 		return f2fs_ioc_get_encryption_pwsalt(filp, arg);
 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
 		return f2fs_ioc_get_encryption_policy_ex(filp, arg);
@@ -3281,6 +4260,8 @@
 		return f2fs_ioc_remove_encryption_key_all_users(filp, arg);
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
 		return f2fs_ioc_get_encryption_key_status(filp, arg);
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		return f2fs_ioc_get_encryption_nonce(filp, arg);
 	case F2FS_IOC_GARBAGE_COLLECT:
 		return f2fs_ioc_gc(filp, arg);
 	case F2FS_IOC_GARBAGE_COLLECT_RANGE:
@@ -3295,9 +4276,9 @@
 		return f2fs_ioc_flush_device(filp, arg);
 	case F2FS_IOC_GET_FEATURES:
 		return f2fs_ioc_get_features(filp, arg);
-	case F2FS_IOC_FSGETXATTR:
+	case FS_IOC_FSGETXATTR:
 		return f2fs_ioc_fsgetxattr(filp, arg);
-	case F2FS_IOC_FSSETXATTR:
+	case FS_IOC_FSSETXATTR:
 		return f2fs_ioc_fssetxattr(filp, arg);
 	case F2FS_IOC_GET_PIN_FILE:
 		return f2fs_ioc_get_pin_file(filp, arg);
@@ -3311,15 +4292,60 @@
 		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);
+	case FS_IOC_READ_VERITY_METADATA:
+		return f2fs_ioc_read_verity_metadata(filp, arg);
+	case FS_IOC_GETFSLABEL:
+		return f2fs_ioc_getfslabel(filp, arg);
+	case FS_IOC_SETFSLABEL:
+		return f2fs_ioc_setfslabel(filp, arg);
+	case F2FS_IOC_GET_COMPRESS_BLOCKS:
+		return f2fs_get_compress_blocks(filp, arg);
+	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
+		return f2fs_release_compress_blocks(filp, arg);
+	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
+		return f2fs_reserve_compress_blocks(filp, arg);
+	case F2FS_IOC_SEC_TRIM_FILE:
+		return f2fs_sec_trim_file(filp, arg);
+	case F2FS_IOC_GET_COMPRESS_OPTION:
+		return f2fs_ioc_get_compress_option(filp, arg);
+	case F2FS_IOC_SET_COMPRESS_OPTION:
+		return f2fs_ioc_set_compress_option(filp, arg);
+	case F2FS_IOC_DECOMPRESS_FILE:
+		return f2fs_ioc_decompress_file(filp, arg);
+	case F2FS_IOC_COMPRESS_FILE:
+		return f2fs_ioc_compress_file(filp, arg);
 	default:
 		return -ENOTTY;
 	}
 }
 
+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;
+
+	return __f2fs_ioctl(filp, cmd, arg);
+}
+
+static ssize_t f2fs_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
+{
+	struct file *file = iocb->ki_filp;
+	struct inode *inode = file_inode(file);
+	int ret;
+
+	if (!f2fs_is_compress_backend_ready(inode))
+		return -EOPNOTSUPP;
+
+	ret = generic_file_read_iter(iocb, iter);
+
+	if (ret > 0)
+		f2fs_update_iostat(F2FS_I_SB(inode), APP_READ_IO, ret);
+
+	return ret;
+}
+
 static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
 {
 	struct file *file = iocb->ki_filp;
@@ -3331,6 +4357,11 @@
 		goto out;
 	}
 
+	if (!f2fs_is_compress_backend_ready(inode)) {
+		ret = -EOPNOTSUPP;
+		goto out;
+	}
+
 	if (iocb->ki_flags & IOCB_NOWAIT) {
 		if (!inode_trylock(inode)) {
 			ret = -EAGAIN;
@@ -3340,6 +4371,16 @@
 		inode_lock(inode);
 	}
 
+	if (unlikely(IS_IMMUTABLE(inode))) {
+		ret = -EPERM;
+		goto unlock;
+	}
+
+	if (is_inode_flag_set(inode, FI_COMPRESS_RELEASED)) {
+		ret = -EPERM;
+		goto unlock;
+	}
+
 	ret = generic_write_checks(iocb, from);
 	if (ret > 0) {
 		bool preallocated = false;
@@ -3398,12 +4439,18 @@
 		clear_inode_flag(inode, FI_NO_PREALLOC);
 
 		/* if we couldn't write data, we should deallocate blocks. */
-		if (preallocated && i_size_read(inode) < target_size)
+		if (preallocated && i_size_read(inode) < target_size) {
+			down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+			down_write(&F2FS_I(inode)->i_mmap_sem);
 			f2fs_truncate(inode);
+			up_write(&F2FS_I(inode)->i_mmap_sem);
+			up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
+		}
 
 		if (ret > 0)
 			f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret);
 	}
+unlock:
 	inode_unlock(inode);
 out:
 	trace_f2fs_file_write_iter(inode, iocb->ki_pos,
@@ -3414,60 +4461,127 @@
 }
 
 #ifdef CONFIG_COMPAT
+struct compat_f2fs_gc_range {
+	u32 sync;
+	compat_u64 start;
+	compat_u64 len;
+};
+#define F2FS_IOC32_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,\
+						struct compat_f2fs_gc_range)
+
+static int f2fs_compat_ioc_gc_range(struct file *file, unsigned long arg)
+{
+	struct compat_f2fs_gc_range __user *urange;
+	struct f2fs_gc_range range;
+	int err;
+
+	urange = compat_ptr(arg);
+	err = get_user(range.sync, &urange->sync);
+	err |= get_user(range.start, &urange->start);
+	err |= get_user(range.len, &urange->len);
+	if (err)
+		return -EFAULT;
+
+	return __f2fs_ioc_gc_range(file, &range);
+}
+
+struct compat_f2fs_move_range {
+	u32 dst_fd;
+	compat_u64 pos_in;
+	compat_u64 pos_out;
+	compat_u64 len;
+};
+#define F2FS_IOC32_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
+					struct compat_f2fs_move_range)
+
+static int f2fs_compat_ioc_move_range(struct file *file, unsigned long arg)
+{
+	struct compat_f2fs_move_range __user *urange;
+	struct f2fs_move_range range;
+	int err;
+
+	urange = compat_ptr(arg);
+	err = get_user(range.dst_fd, &urange->dst_fd);
+	err |= get_user(range.pos_in, &urange->pos_in);
+	err |= get_user(range.pos_out, &urange->pos_out);
+	err |= get_user(range.len, &urange->len);
+	if (err)
+		return -EFAULT;
+
+	return __f2fs_ioc_move_range(file, &range);
+}
+
 long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 {
+	if (unlikely(f2fs_cp_error(F2FS_I_SB(file_inode(file)))))
+		return -EIO;
+	if (!f2fs_is_checkpoint_ready(F2FS_I_SB(file_inode(file))))
+		return -ENOSPC;
+
 	switch (cmd) {
-	case F2FS_IOC32_GETFLAGS:
-		cmd = F2FS_IOC_GETFLAGS;
+	case FS_IOC32_GETFLAGS:
+		cmd = FS_IOC_GETFLAGS;
 		break;
-	case F2FS_IOC32_SETFLAGS:
-		cmd = F2FS_IOC_SETFLAGS;
+	case FS_IOC32_SETFLAGS:
+		cmd = FS_IOC_SETFLAGS;
 		break;
-	case F2FS_IOC32_GETVERSION:
-		cmd = F2FS_IOC_GETVERSION;
+	case FS_IOC32_GETVERSION:
+		cmd = FS_IOC_GETVERSION;
 		break;
+	case F2FS_IOC32_GARBAGE_COLLECT_RANGE:
+		return f2fs_compat_ioc_gc_range(file, arg);
+	case F2FS_IOC32_MOVE_RANGE:
+		return f2fs_compat_ioc_move_range(file, arg);
 	case F2FS_IOC_START_ATOMIC_WRITE:
 	case F2FS_IOC_COMMIT_ATOMIC_WRITE:
 	case F2FS_IOC_START_VOLATILE_WRITE:
 	case F2FS_IOC_RELEASE_VOLATILE_WRITE:
 	case F2FS_IOC_ABORT_VOLATILE_WRITE:
 	case F2FS_IOC_SHUTDOWN:
-	case F2FS_IOC_SET_ENCRYPTION_POLICY:
-	case F2FS_IOC_GET_ENCRYPTION_PWSALT:
-	case F2FS_IOC_GET_ENCRYPTION_POLICY:
+	case FS_IOC_SET_ENCRYPTION_POLICY:
+	case FS_IOC_GET_ENCRYPTION_PWSALT:
+	case FS_IOC_GET_ENCRYPTION_POLICY:
 	case FS_IOC_GET_ENCRYPTION_POLICY_EX:
 	case FS_IOC_ADD_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 	case F2FS_IOC_GARBAGE_COLLECT:
-	case F2FS_IOC_GARBAGE_COLLECT_RANGE:
 	case F2FS_IOC_WRITE_CHECKPOINT:
 	case F2FS_IOC_DEFRAGMENT:
-	case F2FS_IOC_MOVE_RANGE:
 	case F2FS_IOC_FLUSH_DEVICE:
 	case F2FS_IOC_GET_FEATURES:
-	case F2FS_IOC_FSGETXATTR:
-	case F2FS_IOC_FSSETXATTR:
+	case FS_IOC_FSGETXATTR:
+	case FS_IOC_FSSETXATTR:
 	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:
+	case FS_IOC_READ_VERITY_METADATA:
+	case FS_IOC_GETFSLABEL:
+	case FS_IOC_SETFSLABEL:
+	case F2FS_IOC_GET_COMPRESS_BLOCKS:
+	case F2FS_IOC_RELEASE_COMPRESS_BLOCKS:
+	case F2FS_IOC_RESERVE_COMPRESS_BLOCKS:
+	case F2FS_IOC_SEC_TRIM_FILE:
+	case F2FS_IOC_GET_COMPRESS_OPTION:
+	case F2FS_IOC_SET_COMPRESS_OPTION:
+	case F2FS_IOC_DECOMPRESS_FILE:
+	case F2FS_IOC_COMPRESS_FILE:
 		break;
 	default:
 		return -ENOIOCTLCMD;
 	}
-	return f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
+	return __f2fs_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
 }
 #endif
 
 const struct file_operations f2fs_file_operations = {
 	.llseek		= f2fs_llseek,
-	.read_iter	= generic_file_read_iter,
+	.read_iter	= f2fs_file_read_iter,
 	.write_iter	= f2fs_file_write_iter,
 	.open		= f2fs_file_open,
 	.release	= f2fs_release_file,
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 4b6c362..70234a7 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -13,6 +13,7 @@
 #include <linux/kthread.h>
 #include <linux/delay.h>
 #include <linux/freezer.h>
+#include <linux/sched/signal.h>
 
 #include "f2fs.h"
 #include "node.h"
@@ -20,22 +21,34 @@
 #include "gc.h"
 #include <trace/events/f2fs.h>
 
+static struct kmem_cache *victim_entry_slab;
+
+static unsigned int count_bits(const unsigned long *addr,
+				unsigned int offset, unsigned int len);
+
 static int gc_thread_func(void *data)
 {
 	struct f2fs_sb_info *sbi = data;
 	struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
 	wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head;
+	wait_queue_head_t *fggc_wq = &sbi->gc_thread->fggc_wq;
 	unsigned int wait_ms;
 
 	wait_ms = gc_th->min_sleep_time;
 
 	set_freezable();
 	do {
+		bool sync_mode, foreground = false;
+
 		wait_event_interruptible_timeout(*wq,
 				kthread_should_stop() || freezing(current) ||
+				waitqueue_active(fggc_wq) ||
 				gc_th->gc_wake,
 				msecs_to_jiffies(wait_ms));
 
+		if (test_opt(sbi, GC_MERGE) && waitqueue_active(fggc_wq))
+			foreground = true;
+
 		/* give it a try one time */
 		if (gc_th->gc_wake)
 			gc_th->gc_wake = 0;
@@ -76,20 +89,23 @@
 		 * invalidated soon after by user update or deletion.
 		 * So, I'd like to wait some time to collect dirty segments.
 		 */
-		if (sbi->gc_mode == GC_URGENT) {
+		if (sbi->gc_mode == GC_URGENT_HIGH) {
 			wait_ms = gc_th->urgent_sleep_time;
-			mutex_lock(&sbi->gc_mutex);
+			down_write(&sbi->gc_lock);
 			goto do_gc;
 		}
 
-		if (!mutex_trylock(&sbi->gc_mutex)) {
+		if (foreground) {
+			down_write(&sbi->gc_lock);
+			goto do_gc;
+		} else if (!down_write_trylock(&sbi->gc_lock)) {
 			stat_other_skip_bggc_count(sbi);
 			goto next;
 		}
 
 		if (!is_idle(sbi, GC_TIME)) {
 			increase_sleep_time(gc_th, &wait_ms);
-			mutex_unlock(&sbi->gc_mutex);
+			up_write(&sbi->gc_lock);
 			stat_io_skip_bggc_count(sbi);
 			goto next;
 		}
@@ -99,17 +115,27 @@
 		else
 			increase_sleep_time(gc_th, &wait_ms);
 do_gc:
-		stat_inc_bggc_count(sbi);
+		if (!foreground)
+			stat_inc_bggc_count(sbi->stat_info);
+
+		sync_mode = F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC;
+
+		/* foreground GC was been triggered via f2fs_balance_fs() */
+		if (foreground)
+			sync_mode = false;
 
 		/* if return value is not zero, no victim was selected */
-		if (f2fs_gc(sbi, test_opt(sbi, FORCE_FG_GC), true, NULL_SEGNO))
+		if (f2fs_gc(sbi, sync_mode, !foreground, false, NULL_SEGNO))
 			wait_ms = gc_th->no_gc_sleep_time;
 
+		if (foreground)
+			wake_up_all(&gc_th->fggc_wq);
+
 		trace_f2fs_background_gc(sbi->sb, wait_ms,
 				prefree_segments(sbi), free_segments(sbi));
 
 		/* balancing f2fs's metadata periodically */
-		f2fs_balance_fs_bg(sbi);
+		f2fs_balance_fs_bg(sbi, true);
 next:
 		sb_end_write(sbi->sb);
 
@@ -134,15 +160,16 @@
 	gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
 	gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME;
 
-	gc_th->gc_wake= 0;
+	gc_th->gc_wake = 0;
 
 	sbi->gc_thread = gc_th;
 	init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
+	init_waitqueue_head(&sbi->gc_thread->fggc_wq);
 	sbi->gc_thread->f2fs_gc_task = kthread_run(gc_thread_func, sbi,
 			"f2fs_gc-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(gc_th->f2fs_gc_task)) {
 		err = PTR_ERR(gc_th->f2fs_gc_task);
-		kvfree(gc_th);
+		kfree(gc_th);
 		sbi->gc_thread = NULL;
 	}
 out:
@@ -152,26 +179,41 @@
 void f2fs_stop_gc_thread(struct f2fs_sb_info *sbi)
 {
 	struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
+
 	if (!gc_th)
 		return;
 	kthread_stop(gc_th->f2fs_gc_task);
-	kvfree(gc_th);
+	wake_up_all(&gc_th->fggc_wq);
+	kfree(gc_th);
 	sbi->gc_thread = NULL;
 }
 
 static int select_gc_type(struct f2fs_sb_info *sbi, int gc_type)
 {
-	int gc_mode = (gc_type == BG_GC) ? GC_CB : GC_GREEDY;
+	int gc_mode;
+
+	if (gc_type == BG_GC) {
+		if (sbi->am.atgc_enabled)
+			gc_mode = GC_AT;
+		else
+			gc_mode = GC_CB;
+	} else {
+		gc_mode = GC_GREEDY;
+	}
 
 	switch (sbi->gc_mode) {
 	case GC_IDLE_CB:
 		gc_mode = GC_CB;
 		break;
 	case GC_IDLE_GREEDY:
-	case GC_URGENT:
+	case GC_URGENT_HIGH:
 		gc_mode = GC_GREEDY;
 		break;
+	case GC_IDLE_AT:
+		gc_mode = GC_AT;
+		break;
 	}
+
 	return gc_mode;
 }
 
@@ -182,19 +224,34 @@
 
 	if (p->alloc_mode == SSR) {
 		p->gc_mode = GC_GREEDY;
-		p->dirty_segmap = dirty_i->dirty_segmap[type];
+		p->dirty_bitmap = dirty_i->dirty_segmap[type];
+		p->max_search = dirty_i->nr_dirty[type];
+		p->ofs_unit = 1;
+	} else if (p->alloc_mode == AT_SSR) {
+		p->gc_mode = GC_GREEDY;
+		p->dirty_bitmap = dirty_i->dirty_segmap[type];
 		p->max_search = dirty_i->nr_dirty[type];
 		p->ofs_unit = 1;
 	} else {
 		p->gc_mode = select_gc_type(sbi, gc_type);
-		p->dirty_segmap = dirty_i->dirty_segmap[DIRTY];
-		p->max_search = dirty_i->nr_dirty[DIRTY];
 		p->ofs_unit = sbi->segs_per_sec;
+		if (__is_large_section(sbi)) {
+			p->dirty_bitmap = dirty_i->dirty_secmap;
+			p->max_search = count_bits(p->dirty_bitmap,
+						0, MAIN_SECS(sbi));
+		} else {
+			p->dirty_bitmap = dirty_i->dirty_segmap[DIRTY];
+			p->max_search = dirty_i->nr_dirty[DIRTY];
+		}
 	}
 
-	/* we need to check every dirty segments in the FG_GC case */
+	/*
+	 * adjust candidates range, should select all dirty segments for
+	 * foreground GC and urgent GC cases.
+	 */
 	if (gc_type != FG_GC &&
-			(sbi->gc_mode != GC_URGENT) &&
+			(sbi->gc_mode != GC_URGENT_HIGH) &&
+			(p->gc_mode != GC_AT && p->alloc_mode != AT_SSR) &&
 			p->max_search > sbi->max_victim_search)
 		p->max_search = sbi->max_victim_search;
 
@@ -212,10 +269,16 @@
 	/* SSR allocates in a segment unit */
 	if (p->alloc_mode == SSR)
 		return sbi->blocks_per_seg;
+	else if (p->alloc_mode == AT_SSR)
+		return UINT_MAX;
+
+	/* LFS */
 	if (p->gc_mode == GC_GREEDY)
 		return 2 * sbi->blocks_per_seg * p->ofs_unit;
 	else if (p->gc_mode == GC_CB)
 		return UINT_MAX;
+	else if (p->gc_mode == GC_AT)
+		return UINT_MAX;
 	else /* No other gc_mode */
 		return 0;
 }
@@ -249,13 +312,14 @@
 	unsigned char age = 0;
 	unsigned char u;
 	unsigned int i;
+	unsigned int usable_segs_per_sec = f2fs_usable_segs_in_sec(sbi, segno);
 
-	for (i = 0; i < sbi->segs_per_sec; i++)
+	for (i = 0; i < usable_segs_per_sec; i++)
 		mtime += get_seg_entry(sbi, start + i)->mtime;
 	vblocks = get_valid_blocks(sbi, segno, true);
 
-	mtime = div_u64(mtime, sbi->segs_per_sec);
-	vblocks = div_u64(vblocks, sbi->segs_per_sec);
+	mtime = div_u64(mtime, usable_segs_per_sec);
+	vblocks = div_u64(vblocks, usable_segs_per_sec);
 
 	u = (vblocks * 100) >> sbi->log_blocks_per_seg;
 
@@ -280,8 +344,11 @@
 	/* alloc_mode == LFS */
 	if (p->gc_mode == GC_GREEDY)
 		return get_valid_blocks(sbi, segno, true);
-	else
+	else if (p->gc_mode == GC_CB)
 		return get_cb_cost(sbi, segno);
+
+	f2fs_bug_on(sbi, 1);
+	return 0;
 }
 
 static unsigned int count_bits(const unsigned long *addr,
@@ -296,6 +363,269 @@
 	return sum;
 }
 
+static struct victim_entry *attach_victim_entry(struct f2fs_sb_info *sbi,
+				unsigned long long mtime, unsigned int segno,
+				struct rb_node *parent, struct rb_node **p,
+				bool left_most)
+{
+	struct atgc_management *am = &sbi->am;
+	struct victim_entry *ve;
+
+	ve =  f2fs_kmem_cache_alloc(victim_entry_slab, GFP_NOFS);
+
+	ve->mtime = mtime;
+	ve->segno = segno;
+
+	rb_link_node(&ve->rb_node, parent, p);
+	rb_insert_color_cached(&ve->rb_node, &am->root, left_most);
+
+	list_add_tail(&ve->list, &am->victim_list);
+
+	am->victim_count++;
+
+	return ve;
+}
+
+static void insert_victim_entry(struct f2fs_sb_info *sbi,
+				unsigned long long mtime, unsigned int segno)
+{
+	struct atgc_management *am = &sbi->am;
+	struct rb_node **p;
+	struct rb_node *parent = NULL;
+	bool left_most = true;
+
+	p = f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, mtime, &left_most);
+	attach_victim_entry(sbi, mtime, segno, parent, p, left_most);
+}
+
+static void add_victim_entry(struct f2fs_sb_info *sbi,
+				struct victim_sel_policy *p, unsigned int segno)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+	unsigned int start = GET_SEG_FROM_SEC(sbi, secno);
+	unsigned long long mtime = 0;
+	unsigned int i;
+
+	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+		if (p->gc_mode == GC_AT &&
+			get_valid_blocks(sbi, segno, true) == 0)
+			return;
+	}
+
+	for (i = 0; i < sbi->segs_per_sec; i++)
+		mtime += get_seg_entry(sbi, start + i)->mtime;
+	mtime = div_u64(mtime, sbi->segs_per_sec);
+
+	/* Handle if the system time has changed by the user */
+	if (mtime < sit_i->min_mtime)
+		sit_i->min_mtime = mtime;
+	if (mtime > sit_i->max_mtime)
+		sit_i->max_mtime = mtime;
+	if (mtime < sit_i->dirty_min_mtime)
+		sit_i->dirty_min_mtime = mtime;
+	if (mtime > sit_i->dirty_max_mtime)
+		sit_i->dirty_max_mtime = mtime;
+
+	/* don't choose young section as candidate */
+	if (sit_i->dirty_max_mtime - mtime < p->age_threshold)
+		return;
+
+	insert_victim_entry(sbi, mtime, segno);
+}
+
+static struct rb_node *lookup_central_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct atgc_management *am = &sbi->am;
+	struct rb_node *parent = NULL;
+	bool left_most;
+
+	f2fs_lookup_rb_tree_ext(sbi, &am->root, &parent, p->age, &left_most);
+
+	return parent;
+}
+
+static void atgc_lookup_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	struct atgc_management *am = &sbi->am;
+	struct rb_root_cached *root = &am->root;
+	struct rb_node *node;
+	struct rb_entry *re;
+	struct victim_entry *ve;
+	unsigned long long total_time;
+	unsigned long long age, u, accu;
+	unsigned long long max_mtime = sit_i->dirty_max_mtime;
+	unsigned long long min_mtime = sit_i->dirty_min_mtime;
+	unsigned int sec_blocks = BLKS_PER_SEC(sbi);
+	unsigned int vblocks;
+	unsigned int dirty_threshold = max(am->max_candidate_count,
+					am->candidate_ratio *
+					am->victim_count / 100);
+	unsigned int age_weight = am->age_weight;
+	unsigned int cost;
+	unsigned int iter = 0;
+
+	if (max_mtime < min_mtime)
+		return;
+
+	max_mtime += 1;
+	total_time = max_mtime - min_mtime;
+
+	accu = div64_u64(ULLONG_MAX, total_time);
+	accu = min_t(unsigned long long, div_u64(accu, 100),
+					DEFAULT_ACCURACY_CLASS);
+
+	node = rb_first_cached(root);
+next:
+	re = rb_entry_safe(node, struct rb_entry, rb_node);
+	if (!re)
+		return;
+
+	ve = (struct victim_entry *)re;
+
+	if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
+		goto skip;
+
+	/* age = 10000 * x% * 60 */
+	age = div64_u64(accu * (max_mtime - ve->mtime), total_time) *
+								age_weight;
+
+	vblocks = get_valid_blocks(sbi, ve->segno, true);
+	f2fs_bug_on(sbi, !vblocks || vblocks == sec_blocks);
+
+	/* u = 10000 * x% * 40 */
+	u = div64_u64(accu * (sec_blocks - vblocks), sec_blocks) *
+							(100 - age_weight);
+
+	f2fs_bug_on(sbi, age + u >= UINT_MAX);
+
+	cost = UINT_MAX - (age + u);
+	iter++;
+
+	if (cost < p->min_cost ||
+			(cost == p->min_cost && age > p->oldest_age)) {
+		p->min_cost = cost;
+		p->oldest_age = age;
+		p->min_segno = ve->segno;
+	}
+skip:
+	if (iter < dirty_threshold) {
+		node = rb_next(node);
+		goto next;
+	}
+}
+
+/*
+ * select candidates around source section in range of
+ * [target - dirty_threshold, target + dirty_threshold]
+ */
+static void atssr_lookup_victim(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	struct sit_info *sit_i = SIT_I(sbi);
+	struct atgc_management *am = &sbi->am;
+	struct rb_node *node;
+	struct rb_entry *re;
+	struct victim_entry *ve;
+	unsigned long long age;
+	unsigned long long max_mtime = sit_i->dirty_max_mtime;
+	unsigned long long min_mtime = sit_i->dirty_min_mtime;
+	unsigned int seg_blocks = sbi->blocks_per_seg;
+	unsigned int vblocks;
+	unsigned int dirty_threshold = max(am->max_candidate_count,
+					am->candidate_ratio *
+					am->victim_count / 100);
+	unsigned int cost;
+	unsigned int iter = 0;
+	int stage = 0;
+
+	if (max_mtime < min_mtime)
+		return;
+	max_mtime += 1;
+next_stage:
+	node = lookup_central_victim(sbi, p);
+next_node:
+	re = rb_entry_safe(node, struct rb_entry, rb_node);
+	if (!re) {
+		if (stage == 0)
+			goto skip_stage;
+		return;
+	}
+
+	ve = (struct victim_entry *)re;
+
+	if (ve->mtime >= max_mtime || ve->mtime < min_mtime)
+		goto skip_node;
+
+	age = max_mtime - ve->mtime;
+
+	vblocks = get_seg_entry(sbi, ve->segno)->ckpt_valid_blocks;
+	f2fs_bug_on(sbi, !vblocks);
+
+	/* rare case */
+	if (vblocks == seg_blocks)
+		goto skip_node;
+
+	iter++;
+
+	age = max_mtime - abs(p->age - age);
+	cost = UINT_MAX - vblocks;
+
+	if (cost < p->min_cost ||
+			(cost == p->min_cost && age > p->oldest_age)) {
+		p->min_cost = cost;
+		p->oldest_age = age;
+		p->min_segno = ve->segno;
+	}
+skip_node:
+	if (iter < dirty_threshold) {
+		if (stage == 0)
+			node = rb_prev(node);
+		else if (stage == 1)
+			node = rb_next(node);
+		goto next_node;
+	}
+skip_stage:
+	if (stage < 1) {
+		stage++;
+		iter = 0;
+		goto next_stage;
+	}
+}
+static void lookup_victim_by_age(struct f2fs_sb_info *sbi,
+						struct victim_sel_policy *p)
+{
+	f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
+						&sbi->am.root, true));
+
+	if (p->gc_mode == GC_AT)
+		atgc_lookup_victim(sbi, p);
+	else if (p->alloc_mode == AT_SSR)
+		atssr_lookup_victim(sbi, p);
+	else
+		f2fs_bug_on(sbi, 1);
+}
+
+static void release_victim_entry(struct f2fs_sb_info *sbi)
+{
+	struct atgc_management *am = &sbi->am;
+	struct victim_entry *ve, *tmp;
+
+	list_for_each_entry_safe(ve, tmp, &am->victim_list, list) {
+		list_del(&ve->list);
+		kmem_cache_free(victim_entry_slab, ve);
+		am->victim_count--;
+	}
+
+	am->root = RB_ROOT_CACHED;
+
+	f2fs_bug_on(sbi, am->victim_count);
+	f2fs_bug_on(sbi, !list_empty(&am->victim_list));
+}
+
 /*
  * This function is called from two paths.
  * One is garbage collection and the other is SSR segment selection.
@@ -305,31 +635,51 @@
  * which has minimum valid blocks and removes it from dirty seglist.
  */
 static int get_victim_by_default(struct f2fs_sb_info *sbi,
-		unsigned int *result, int gc_type, int type, char alloc_mode)
+			unsigned int *result, int gc_type, int type,
+			char alloc_mode, unsigned long long age)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct sit_info *sm = SIT_I(sbi);
 	struct victim_sel_policy p;
 	unsigned int secno, last_victim;
 	unsigned int last_segment;
-	unsigned int nsearched = 0;
+	unsigned int nsearched;
+	bool is_atgc;
+	int ret = 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);
+	p.age = age;
+	p.age_threshold = sbi->am.age_threshold;
 
+retry:
+	select_policy(sbi, gc_type, type, &p);
 	p.min_segno = NULL_SEGNO;
+	p.oldest_age = 0;
 	p.min_cost = get_max_cost(sbi, &p);
 
+	is_atgc = (p.gc_mode == GC_AT || p.alloc_mode == AT_SSR);
+	nsearched = 0;
+
+	if (is_atgc)
+		SIT_I(sbi)->dirty_min_mtime = ULLONG_MAX;
+
 	if (*result != NULL_SEGNO) {
-		if (get_valid_blocks(sbi, *result, false) &&
-			!sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
+		if (!get_valid_blocks(sbi, *result, false)) {
+			ret = -ENODATA;
+			goto out;
+		}
+
+		if (sec_usage_check(sbi, GET_SEC_FROM_SEG(sbi, *result)))
+			ret = -EBUSY;
+		else
 			p.min_segno = *result;
 		goto out;
 	}
 
+	ret = -ENODATA;
 	if (p.max_search == 0)
 		goto out;
 
@@ -357,10 +707,14 @@
 	}
 
 	while (1) {
-		unsigned long cost;
-		unsigned int segno;
+		unsigned long cost, *dirty_bitmap;
+		unsigned int unit_no, segno;
 
-		segno = find_next_bit(p.dirty_segmap, last_segment, p.offset);
+		dirty_bitmap = p.dirty_bitmap;
+		unit_no = find_next_bit(dirty_bitmap,
+				last_segment / p.ofs_unit,
+				p.offset / p.ofs_unit);
+		segno = unit_no * p.ofs_unit;
 		if (segno >= last_segment) {
 			if (sm->last_victim[p.gc_mode]) {
 				last_segment =
@@ -373,14 +727,7 @@
 		}
 
 		p.offset = segno + p.ofs_unit;
-		if (p.ofs_unit > 1) {
-			p.offset -= segno % p.ofs_unit;
-			nsearched += count_bits(p.dirty_segmap,
-						p.offset - p.ofs_unit,
-						p.ofs_unit);
-		} else {
-			nsearched++;
-		}
+		nsearched++;
 
 #ifdef CONFIG_F2FS_CHECK_FS
 		/*
@@ -396,14 +743,35 @@
 
 		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) &&
-					p.alloc_mode != SSR))
-			goto next;
+		if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED))) {
+			if (p.alloc_mode == LFS) {
+				/*
+				 * LFS is set to find source section during GC.
+				 * The victim should have no checkpointed data.
+				 */
+				if (get_ckpt_valid_blocks(sbi, segno, true))
+					goto next;
+			} else {
+				/*
+				 * SSR | AT_SSR are set to find target segment
+				 * for writes which can be full by checkpointed
+				 * and newly written blocks.
+				 */
+				if (!f2fs_segment_has_free_slot(sbi, segno))
+					goto next;
+			}
+		}
+
 		if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap))
 			goto next;
 
+		if (is_atgc) {
+			add_victim_entry(sbi, &p, segno);
+			goto next;
+		}
+
 		cost = get_gc_cost(sbi, segno, &p);
 
 		if (p.min_cost > cost) {
@@ -413,14 +781,28 @@
 next:
 		if (nsearched >= p.max_search) {
 			if (!sm->last_victim[p.gc_mode] && segno <= last_victim)
-				sm->last_victim[p.gc_mode] = last_victim + 1;
+				sm->last_victim[p.gc_mode] =
+					last_victim + p.ofs_unit;
 			else
-				sm->last_victim[p.gc_mode] = segno + 1;
+				sm->last_victim[p.gc_mode] = segno + p.ofs_unit;
 			sm->last_victim[p.gc_mode] %=
 				(MAIN_SECS(sbi) * sbi->segs_per_sec);
 			break;
 		}
 	}
+
+	/* get victim for GC_AT/AT_SSR */
+	if (is_atgc) {
+		lookup_victim_by_age(sbi, &p);
+		release_victim_entry(sbi);
+	}
+
+	if (is_atgc && p.min_segno == NULL_SEGNO &&
+			sm->elapsed_time < p.age_threshold) {
+		p.age_threshold = 0;
+		goto retry;
+	}
+
 	if (p.min_segno != NULL_SEGNO) {
 got_it:
 		*result = (p.min_segno / p.ofs_unit) * p.ofs_unit;
@@ -432,6 +814,7 @@
 			else
 				set_bit(secno, dirty_i->victim_secmap);
 		}
+		ret = 0;
 
 	}
 out:
@@ -441,7 +824,7 @@
 				prefree_segments(sbi), free_segments(sbi));
 	mutex_unlock(&dirty_i->seglist_lock);
 
-	return (p.min_segno == NULL_SEGNO) ? 0 : 1;
+	return ret;
 }
 
 static const struct victim_selection default_v_ops = {
@@ -476,6 +859,7 @@
 static void put_gc_inode(struct gc_inode_list *gc_list)
 {
 	struct inode_entry *ie, *next_ie;
+
 	list_for_each_entry_safe(ie, next_ie, &gc_list->ilist, list) {
 		radix_tree_delete(&gc_list->iroot, ie->inode->i_ino);
 		iput(ie->inode);
@@ -512,6 +896,7 @@
 	int phase = 0;
 	bool fggc = (gc_type == FG_GC);
 	int submitted = 0;
+	unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	start_addr = START_BLOCK(sbi, segno);
 
@@ -521,7 +906,7 @@
 	if (fggc && phase == 2)
 		atomic_inc(&sbi->wb_sync_req[NODE]);
 
-	for (off = 0; off < sbi->blocks_per_seg; off++, entry++) {
+	for (off = 0; off < usable_blks_in_seg; off++, entry++) {
 		nid_t nid = le32_to_cpu(entry->nid);
 		struct page *node_page;
 		struct node_info ni;
@@ -599,9 +984,11 @@
 		bidx = node_ofs - 1;
 	} else if (node_ofs <= indirect_blks) {
 		int dec = (node_ofs - 4) / (NIDS_PER_BLOCK + 1);
+
 		bidx = node_ofs - 2 - dec;
 	} else {
 		int dec = (node_ofs - indirect_blks - 3) / (NIDS_PER_BLOCK + 1);
+
 		bidx = node_ofs - 5 - dec;
 	}
 	return bidx * ADDRS_PER_BLOCK(inode) + ADDRS_PER_INODE(inode);
@@ -634,7 +1021,7 @@
 	}
 
 	*nofs = ofs_of_node(node_page);
-	source_blkaddr = datablock_addr(NULL, node_page, ofs_in_node);
+	source_blkaddr = data_blkaddr(NULL, node_page, ofs_in_node);
 	f2fs_put_page(node_page, 1);
 
 	if (source_blkaddr != blkaddr) {
@@ -644,8 +1031,8 @@
 
 		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_err(sbi, "mismatched blkaddr %u (source_blkaddr %u) in seg %u",
+					 blkaddr, source_blkaddr, segno);
 				f2fs_bug_on(sbi, 1);
 			}
 		}
@@ -730,6 +1117,10 @@
 		goto put_encrypted_page;
 	f2fs_put_page(fio.encrypted_page, 0);
 	f2fs_put_page(page, 1);
+
+	f2fs_update_iostat(sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+	f2fs_update_iostat(sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
+
 	return 0;
 put_encrypted_page:
 	f2fs_put_page(fio.encrypted_page, 1);
@@ -762,7 +1153,10 @@
 	struct page *page, *mpage;
 	block_t newaddr;
 	int err = 0;
-	bool lfs_mode = test_opt(fio.sbi, LFS);
+	bool lfs_mode = f2fs_lfs_mode(fio.sbi);
+	int type = fio.sbi->am.atgc_enabled && (gc_type == BG_GC) &&
+				(fio.sbi->gc_mode != GC_URGENT_HIGH) ?
+				CURSEG_ALL_DATA_ATGC : CURSEG_COLD_DATA;
 
 	/* do not read out */
 	page = f2fs_grab_cache_page(inode->i_mapping, bidx, false);
@@ -810,8 +1204,6 @@
 	if (err)
 		goto put_out;
 
-	set_summary(&sum, dn.nid, dn.ofs_in_node, ni.version);
-
 	/* read page */
 	fio.page = page;
 	fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
@@ -821,8 +1213,10 @@
 
 	mpage = f2fs_grab_cache_page(META_MAPPING(fio.sbi),
 					fio.old_blkaddr, false);
-	if (!mpage)
+	if (!mpage) {
+		err = -ENOMEM;
 		goto up_out;
+	}
 
 	fio.encrypted_page = mpage;
 
@@ -833,6 +1227,10 @@
 			f2fs_put_page(mpage, 1);
 			goto up_out;
 		}
+
+		f2fs_update_iostat(fio.sbi, FS_DATA_READ_IO, F2FS_BLKSIZE);
+		f2fs_update_iostat(fio.sbi, FS_GDATA_READ_IO, F2FS_BLKSIZE);
+
 		lock_page(mpage);
 		if (unlikely(mpage->mapping != META_MAPPING(fio.sbi) ||
 						!PageUptodate(mpage))) {
@@ -842,8 +1240,11 @@
 		}
 	}
 
+	set_summary(&sum, dn.nid, dn.ofs_in_node, ni.version);
+
+	/* allocate block address */
 	f2fs_allocate_data_block(fio.sbi, NULL, fio.old_blkaddr, &newaddr,
-					&sum, CURSEG_COLD_DATA, NULL, false);
+				&sum, type, NULL);
 
 	fio.encrypted_page = f2fs_pagecache_get_page(META_MAPPING(fio.sbi),
 				newaddr, FGP_LOCK | FGP_CREAT, GFP_NOFS);
@@ -860,6 +1261,7 @@
 	f2fs_put_page(mpage, 1);
 	invalidate_mapping_pages(META_MAPPING(fio.sbi),
 				fio.old_blkaddr, fio.old_blkaddr);
+	f2fs_invalidate_compress_page(fio.sbi, fio.old_blkaddr);
 
 	set_page_dirty(fio.encrypted_page);
 	if (clear_page_dirty_for_io(fio.encrypted_page))
@@ -868,9 +1270,6 @@
 	set_page_writeback(fio.encrypted_page);
 	ClearPageError(page);
 
-	/* allocate block address */
-	f2fs_wait_on_page_writeback(dn.node_page, NODE, true, true);
-
 	fio.op = REQ_OP_WRITE;
 	fio.op_flags = REQ_SYNC;
 	fio.new_blkaddr = newaddr;
@@ -893,7 +1292,7 @@
 recover_block:
 	if (err)
 		f2fs_do_replace_block(fio.sbi, &sum, newaddr, fio.old_blkaddr,
-								true, true);
+							true, true, true);
 up_out:
 	if (lfs_mode)
 		up_write(&fio.sbi->io_order_lock);
@@ -938,7 +1337,7 @@
 			goto out;
 		}
 		set_page_dirty(page);
-		set_cold_data(page);
+		set_page_private_gcing(page);
 	} else {
 		struct f2fs_io_info fio = {
 			.sbi = F2FS_I_SB(inode),
@@ -964,13 +1363,14 @@
 			f2fs_remove_dirty_inode(inode);
 		}
 
-		set_cold_data(page);
+		set_page_private_gcing(page);
 
 		err = f2fs_do_write_data_page(&fio);
 		if (err) {
-			clear_cold_data(page);
+			clear_page_private_gcing(page);
 			if (err == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto retry;
 			}
 			if (is_dirty)
@@ -990,7 +1390,8 @@
  * the victim data block is ignored.
  */
 static int gc_data_segment(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
-		struct gc_inode_list *gc_list, unsigned int segno, int gc_type)
+		struct gc_inode_list *gc_list, unsigned int segno, int gc_type,
+		bool force_migrate)
 {
 	struct super_block *sb = sbi->sb;
 	struct f2fs_summary *entry;
@@ -998,13 +1399,14 @@
 	int off;
 	int phase = 0;
 	int submitted = 0;
+	unsigned int usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	start_addr = START_BLOCK(sbi, segno);
 
 next_step:
 	entry = sum;
 
-	for (off = 0; off < sbi->blocks_per_seg; off++, entry++) {
+	for (off = 0; off < usable_blks_in_seg; off++, entry++) {
 		struct page *data_page;
 		struct inode *inode;
 		struct node_info dni; /* dnode info for the data */
@@ -1018,8 +1420,8 @@
 		 * 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)
+			(!force_migrate && get_valid_blocks(sbi, segno, true) ==
+							BLKS_PER_SEC(sbi)))
 			return submitted;
 
 		if (check_valid_map(sbi, segno, off) == 0)
@@ -1147,14 +1549,15 @@
 
 	down_write(&sit_i->sentry_lock);
 	ret = DIRTY_I(sbi)->v_ops->get_victim(sbi, victim, gc_type,
-					      NO_CHECK_TYPE, LFS);
+					      NO_CHECK_TYPE, LFS, 0);
 	up_write(&sit_i->sentry_lock);
 	return ret;
 }
 
 static int do_garbage_collect(struct f2fs_sb_info *sbi,
 				unsigned int start_segno,
-				struct gc_inode_list *gc_list, int gc_type)
+				struct gc_inode_list *gc_list, int gc_type,
+				bool force_migrate)
 {
 	struct page *sum_page;
 	struct f2fs_summary_block *sum;
@@ -1169,6 +1572,17 @@
 	if (__is_large_section(sbi))
 		end_segno = rounddown(end_segno, sbi->segs_per_sec);
 
+	/*
+	 * zone-capacity can be less than zone-size in zoned devices,
+	 * resulting in less than expected usable segments in the zone,
+	 * calculate the end segno in the zone which can be garbage collected
+	 */
+	if (f2fs_sb_has_blkzoned(sbi))
+		end_segno -= sbi->segs_per_sec -
+					f2fs_usable_segs_in_sec(sbi, segno);
+
+	sanity_check_seg_type(sbi, get_seg_entry(sbi, segno)->type);
+
 	/* readahead multi ssa blocks those have contiguous address */
 	if (__is_large_section(sbi))
 		f2fs_ra_meta_pages(sbi, GET_SUM_BLOCK(sbi, segno),
@@ -1203,7 +1617,7 @@
 
 		if (get_valid_blocks(sbi, segno, false) == 0)
 			goto freed;
-		if (__is_large_section(sbi) &&
+		if (gc_type == BG_GC && __is_large_section(sbi) &&
 				migrated >= sbi->migration_granularity)
 			goto skip;
 		if (!PageUptodate(sum_page) || unlikely(f2fs_cp_error(sbi)))
@@ -1230,15 +1644,16 @@
 								gc_type);
 		else
 			submitted += gc_data_segment(sbi, sum->entries, gc_list,
-							segno, gc_type);
+							segno, gc_type,
+							force_migrate);
 
 		stat_inc_seg_count(sbi, type, gc_type);
+		migrated++;
 
 freed:
 		if (gc_type == FG_GC &&
 				get_valid_blocks(sbi, segno, false) == 0)
 			seg_freed++;
-		migrated++;
 
 		if (__is_large_section(sbi) && segno + 1 < end_segno)
 			sbi->next_victim_seg[gc_type] = segno + 1;
@@ -1258,7 +1673,7 @@
 }
 
 int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
-			bool background, unsigned int segno)
+			bool background, bool force, unsigned int segno)
 {
 	int gc_type = sync ? FG_GC : BG_GC;
 	int sec_freed = 0, seg_freed = 0, total_freed = 0;
@@ -1316,13 +1731,13 @@
 		ret = -EINVAL;
 		goto stop;
 	}
-	if (!__get_victim(sbi, &segno, gc_type)) {
-		ret = -ENODATA;
+	ret = __get_victim(sbi, &segno, gc_type);
+	if (ret)
 		goto stop;
-	}
 
-	seg_freed = do_garbage_collect(sbi, segno, &gc_list, gc_type);
-	if (gc_type == FG_GC && seg_freed == sbi->segs_per_sec)
+	seg_freed = do_garbage_collect(sbi, segno, &gc_list, gc_type, force);
+	if (gc_type == FG_GC &&
+		seg_freed == f2fs_usable_segs_in_sec(sbi, segno))
 		sec_freed++;
 	total_freed += seg_freed;
 
@@ -1370,7 +1785,7 @@
 				reserved_segments(sbi),
 				prefree_segments(sbi));
 
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 
 	put_gc_inode(&gc_list);
 
@@ -1379,6 +1794,38 @@
 	return ret;
 }
 
+int __init f2fs_create_garbage_collection_cache(void)
+{
+	victim_entry_slab = f2fs_kmem_cache_create("f2fs_victim_entry",
+					sizeof(struct victim_entry));
+	if (!victim_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_garbage_collection_cache(void)
+{
+	kmem_cache_destroy(victim_entry_slab);
+}
+
+static void init_atgc_management(struct f2fs_sb_info *sbi)
+{
+	struct atgc_management *am = &sbi->am;
+
+	if (test_opt(sbi, ATGC) &&
+		SIT_I(sbi)->elapsed_time >= DEF_GC_THREAD_AGE_THRESHOLD)
+		am->atgc_enabled = true;
+
+	am->root = RB_ROOT_CACHED;
+	INIT_LIST_HEAD(&am->victim_list);
+	am->victim_count = 0;
+
+	am->candidate_ratio = DEF_GC_THREAD_CANDIDATE_RATIO;
+	am->max_candidate_count = DEF_GC_THREAD_MAX_CANDIDATE_COUNT;
+	am->age_weight = DEF_GC_THREAD_AGE_WEIGHT;
+	am->age_threshold = DEF_GC_THREAD_AGE_THRESHOLD;
+}
+
 void f2fs_build_gc_manager(struct f2fs_sb_info *sbi)
 {
 	DIRTY_I(sbi)->v_ops = &default_v_ops;
@@ -1389,18 +1836,37 @@
 	if (f2fs_is_multi_device(sbi) && !__is_large_section(sbi))
 		SIT_I(sbi)->last_victim[ALLOC_NEXT] =
 				GET_SEGNO(sbi, FDEV(0).end_blk) + 1;
+
+	init_atgc_management(sbi);
 }
 
-static int free_segment_range(struct f2fs_sb_info *sbi, unsigned int start,
-							unsigned int end)
+static int free_segment_range(struct f2fs_sb_info *sbi,
+				unsigned int secs, bool gc_only)
 {
-	int type;
-	unsigned int segno, next_inuse;
+	unsigned int segno, next_inuse, start, end;
+	struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
+	int gc_mode, gc_type;
 	int err = 0;
+	int type;
+
+	/* Force block allocation for GC */
+	MAIN_SECS(sbi) -= secs;
+	start = MAIN_SECS(sbi) * sbi->segs_per_sec;
+	end = MAIN_SEGS(sbi) - 1;
+
+	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+	for (gc_mode = 0; gc_mode < MAX_GC_POLICY; gc_mode++)
+		if (SIT_I(sbi)->last_victim[gc_mode] >= start)
+			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] >= start)
+			sbi->next_victim_seg[gc_type] = NULL_SEGNO;
+	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
 
 	/* 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);
+	for (type = CURSEG_HOT_DATA; type < NR_CURSEG_PERSIST_TYPE; type++)
+		f2fs_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) {
@@ -1409,18 +1875,24 @@
 			.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);
+		do_garbage_collect(sbi, segno, &gc_list, FG_GC, true);
 		put_gc_inode(&gc_list);
 
-		if (get_valid_blocks(sbi, segno, true))
-			return -EAGAIN;
+		if (!gc_only && get_valid_blocks(sbi, segno, true)) {
+			err = -EAGAIN;
+			goto out;
+		}
+		if (fatal_signal_pending(current)) {
+			err = -ERESTARTSYS;
+			goto out;
+		}
 	}
+	if (gc_only)
+		goto out;
 
-	err = f2fs_sync_fs(sbi->sb, 1);
+	err = f2fs_write_checkpoint(sbi, &cpc);
 	if (err)
-		return err;
+		goto out;
 
 	next_inuse = find_next_inuse(FREE_I(sbi), end + 1, start);
 	if (next_inuse <= end) {
@@ -1428,44 +1900,77 @@
 			 next_inuse);
 		f2fs_bug_on(sbi, 1);
 	}
+out:
+	MAIN_SECS(sbi) += secs;
 	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 section_count;
+	int segment_count;
+	int segment_count_main;
+	long long block_count;
 	int segs = secs * sbi->segs_per_sec;
 
+	down_write(&sbi->sb_lock);
+
+	section_count = le32_to_cpu(raw_sb->section_count);
+	segment_count = le32_to_cpu(raw_sb->segment_count);
+	segment_count_main = le32_to_cpu(raw_sb->segment_count_main);
+	block_count = le64_to_cpu(raw_sb->block_count);
+
 	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);
+	}
+
+	up_write(&sbi->sb_lock);
 }
 
 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;
+	MAIN_SECS(sbi) += secs;
 	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 +
-					(long long)segs * sbi->blocks_per_seg);
+	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;
+	struct cp_control cpc = { CP_RESIZE, 0, 0, 0 };
 	unsigned int secs;
-	int gc_mode, gc_type;
 	int err = 0;
 	__u32 rem;
 
@@ -1473,6 +1978,15 @@
 	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)
@@ -1491,10 +2005,40 @@
 		return -EINVAL;
 	}
 
-	freeze_bdev(sbi->sb->s_bdev);
-
 	shrunk_blocks = old_block_count - block_count;
 	secs = div_u64(shrunk_blocks, BLKS_PER_SEC(sbi));
+
+	/* stop other GC */
+	if (!down_write_trylock(&sbi->gc_lock))
+		return -EAGAIN;
+
+	/* stop CP to protect MAIN_SEC in free_segment_range */
+	f2fs_lock_op(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;
+	spin_unlock(&sbi->stat_lock);
+
+	if (err)
+		goto out_unlock;
+
+	err = free_segment_range(sbi, secs, true);
+
+out_unlock:
+	f2fs_unlock_op(sbi);
+	up_write(&sbi->gc_lock);
+	if (err)
+		return err;
+
+	set_sbi_flag(sbi, SBI_IS_RESIZEFS);
+
+	freeze_super(sbi->sb);
+	down_write(&sbi->gc_lock);
+	down_write(&sbi->cp_global_sem);
+
 	spin_lock(&sbi->stat_lock);
 	if (shrunk_blocks + valid_user_blocks(sbi) +
 		sbi->current_reserved_blocks + sbi->unusable_block_count +
@@ -1503,69 +2047,44 @@
 	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;
+		goto out_err;
+
+	err = free_segment_range(sbi, secs, false);
+	if (err)
+		goto recover_out;
 
 	update_sb_metadata(sbi, -secs);
 
 	err = f2fs_commit_super(sbi, false);
 	if (err) {
 		update_sb_metadata(sbi, secs);
-		goto out;
+		goto recover_out;
 	}
 
-	mutex_lock(&sbi->cp_mutex);
 	update_fs_metadata(sbi, -secs);
 	clear_sbi_flag(sbi, SBI_IS_RESIZEFS);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
-	mutex_unlock(&sbi->cp_mutex);
 
-	err = f2fs_sync_fs(sbi->sb, 1);
+	err = f2fs_write_checkpoint(sbi, &cpc);
 	if (err) {
-		mutex_lock(&sbi->cp_mutex);
 		update_fs_metadata(sbi, secs);
-		mutex_unlock(&sbi->cp_mutex);
 		update_sb_metadata(sbi, secs);
 		f2fs_commit_super(sbi, false);
 	}
-out:
+recover_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);
 	}
+out_err:
+	up_write(&sbi->cp_global_sem);
+	up_write(&sbi->gc_lock);
+	thaw_super(sbi->sb);
 	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/gc.h b/fs/f2fs/gc.h
index bbac9d3..3fe145e 100644
--- a/fs/f2fs/gc.h
+++ b/fs/f2fs/gc.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/gc.h
  *
@@ -14,6 +14,14 @@
 #define DEF_GC_THREAD_MIN_SLEEP_TIME	30000	/* milliseconds */
 #define DEF_GC_THREAD_MAX_SLEEP_TIME	60000
 #define DEF_GC_THREAD_NOGC_SLEEP_TIME	300000	/* wait 5 min */
+
+/* choose candidates from sections which has age of more than 7 days */
+#define DEF_GC_THREAD_AGE_THRESHOLD		(60 * 60 * 24 * 7)
+#define DEF_GC_THREAD_CANDIDATE_RATIO		20	/* select 20% oldest sections as candidates */
+#define DEF_GC_THREAD_MAX_CANDIDATE_COUNT	10	/* select at most 10 sections as candidates */
+#define DEF_GC_THREAD_AGE_WEIGHT		60	/* age weight */
+#define DEFAULT_ACCURACY_CLASS			10000	/* accuracy class */
+
 #define LIMIT_INVALID_BLOCK	40 /* percentage over total user space */
 #define LIMIT_FREE_BLOCK	40 /* percentage over invalid + free space */
 
@@ -34,6 +42,12 @@
 
 	/* for changing gc mode */
 	unsigned int gc_wake;
+
+	/* for GC_MERGE mount option */
+	wait_queue_head_t fggc_wq;		/*
+						 * caller of f2fs_balance_fs()
+						 * will wait on this wait queue.
+						 */
 };
 
 struct gc_inode_list {
@@ -41,16 +55,69 @@
 	struct radix_tree_root iroot;
 };
 
+struct victim_info {
+	unsigned long long mtime;	/* mtime of section */
+	unsigned int segno;		/* section No. */
+};
+
+struct victim_entry {
+	struct rb_node rb_node;		/* rb node located in rb-tree */
+	union {
+		struct {
+			unsigned long long mtime;	/* mtime of section */
+			unsigned int segno;		/* segment No. */
+		};
+		struct victim_info vi;	/* victim info */
+	};
+	struct list_head list;
+};
+
 /*
  * inline functions
  */
+
+/*
+ * On a Zoned device zone-capacity can be less than zone-size and if
+ * zone-capacity is not aligned to f2fs segment size(2MB), then the segment
+ * starting just before zone-capacity has some blocks spanning across the
+ * zone-capacity, these blocks are not usable.
+ * Such spanning segments can be in free list so calculate the sum of usable
+ * blocks in currently free segments including normal and spanning segments.
+ */
+static inline block_t free_segs_blk_count_zoned(struct f2fs_sb_info *sbi)
+{
+	block_t free_seg_blks = 0;
+	struct free_segmap_info *free_i = FREE_I(sbi);
+	int j;
+
+	spin_lock(&free_i->segmap_lock);
+	for (j = 0; j < MAIN_SEGS(sbi); j++)
+		if (!test_bit(j, free_i->free_segmap))
+			free_seg_blks += f2fs_usable_blks_in_seg(sbi, j);
+	spin_unlock(&free_i->segmap_lock);
+
+	return free_seg_blks;
+}
+
+static inline block_t free_segs_blk_count(struct f2fs_sb_info *sbi)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return free_segs_blk_count_zoned(sbi);
+
+	return free_segments(sbi) << sbi->log_blocks_per_seg;
+}
+
 static inline block_t free_user_blocks(struct f2fs_sb_info *sbi)
 {
-	if (free_segments(sbi) < overprovision_segments(sbi))
+	block_t free_blks, ovp_blks;
+
+	free_blks = free_segs_blk_count(sbi);
+	ovp_blks = overprovision_segments(sbi) << sbi->log_blocks_per_seg;
+
+	if (free_blks < ovp_blks)
 		return 0;
-	else
-		return (free_segments(sbi) - overprovision_segments(sbi))
-			<< sbi->log_blocks_per_seg;
+
+	return free_blks - ovp_blks;
 }
 
 static inline block_t limit_invalid_user_blocks(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/hash.c b/fs/f2fs/hash.c
index 5bc4dcd..f9b7064 100644
--- a/fs/f2fs/hash.c
+++ b/fs/f2fs/hash.c
@@ -68,22 +68,9 @@
 		*buf++ = pad;
 }
 
-static f2fs_hash_t __f2fs_dentry_hash(const struct qstr *name_info,
-				struct fscrypt_name *fname)
+static u32 TEA_hash_name(const u8 *p, size_t len)
 {
-	__u32 hash;
-	f2fs_hash_t f2fs_hash;
-	const unsigned char *p;
 	__u32 in[8], buf[4];
-	const unsigned char *name = name_info->name;
-	size_t len = name_info->len;
-
-	/* encrypted bigname case */
-	if (fname && !fname->disk_name.name)
-		return cpu_to_le32(fname->hash);
-
-	if (is_dot_dotdot(name_info))
-		return 0;
 
 	/* Initialize the default seed for the hash checksum functions */
 	buf[0] = 0x67452301;
@@ -91,7 +78,6 @@
 	buf[2] = 0x98badcfe;
 	buf[3] = 0x10325476;
 
-	p = name;
 	while (1) {
 		str2hashbuf(p, len, in, 4);
 		TEA_transform(buf, in);
@@ -100,41 +86,52 @@
 			break;
 		len -= 16;
 	}
-	hash = buf[0];
-	f2fs_hash = cpu_to_le32(hash & ~F2FS_HASH_COL_BIT);
-	return f2fs_hash;
+	return buf[0] & ~F2FS_HASH_COL_BIT;
 }
 
-f2fs_hash_t f2fs_dentry_hash(const struct inode *dir,
-		const struct qstr *name_info, struct fscrypt_name *fname)
+/*
+ * Compute @fname->hash.  For all directories, @fname->disk_name must be set.
+ * For casefolded directories, @fname->usr_fname must be set, and also
+ * @fname->cf_name if the filename is valid Unicode.
+ */
+void f2fs_hash_filename(const struct inode *dir, struct f2fs_filename *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;
+	const u8 *name = fname->disk_name.name;
+	size_t len = fname->disk_name.len;
 
-	if (!name_info->len || !IS_CASEFOLDED(dir))
-		goto opaque_seq;
+	WARN_ON_ONCE(!name);
 
-	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;
+	if (is_dot_dotdot(name, len)) {
+		fname->hash = 0;
+		return;
 	}
-	folded.name = buff;
-	folded.len = dlen;
-	r = __f2fs_dentry_hash(&folded, fname);
 
-	kvfree(buff);
-	return r;
+#ifdef CONFIG_UNICODE
+	if (IS_CASEFOLDED(dir)) {
+		/*
+		 * If the casefolded name is provided, hash it instead of the
+		 * on-disk name.  If the casefolded name is *not* provided, that
+		 * should only be because the name wasn't valid Unicode, so fall
+		 * back to treating the name as an opaque byte sequence.  Note
+		 * that to handle encrypted directories, the fallback must use
+		 * usr_fname (plaintext) rather than disk_name (ciphertext).
+		 */
+		WARN_ON_ONCE(!fname->usr_fname->name);
+		if (fname->cf_name.name) {
+			name = fname->cf_name.name;
+			len = fname->cf_name.len;
+		} else {
+			name = fname->usr_fname->name;
+			len = fname->usr_fname->len;
+		}
+		if (IS_ENCRYPTED(dir)) {
+			struct qstr tmp = QSTR_INIT(name, len);
 
-opaque_seq:
+			fname->hash =
+				cpu_to_le32(fscrypt_fname_siphash(dir, &tmp));
+			return;
+		}
+	}
 #endif
-	return __f2fs_dentry_hash(name_info, fname);
+	fname->hash = cpu_to_le32(TEA_hash_name(name, len));
 }
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index c6bd669..61c0727 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -11,6 +11,8 @@
 
 #include "f2fs.h"
 #include "node.h"
+#include <trace/events/f2fs.h>
+#include <trace/events/android_fs.h>
 
 bool f2fs_may_inline_data(struct inode *inode)
 {
@@ -84,14 +86,29 @@
 {
 	struct page *ipage;
 
+	if (trace_android_fs_dataread_start_enabled()) {
+		char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+		path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    inode);
+		trace_android_fs_dataread_start(inode, page_offset(page),
+						PAGE_SIZE, current->pid,
+						path, current->comm);
+	}
+
 	ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
 	if (IS_ERR(ipage)) {
+		trace_android_fs_dataread_end(inode, page_offset(page),
+					      PAGE_SIZE);
 		unlock_page(page);
 		return PTR_ERR(ipage);
 	}
 
 	if (!f2fs_has_inline_data(inode)) {
 		f2fs_put_page(ipage, 1);
+		trace_android_fs_dataread_end(inode, page_offset(page),
+					      PAGE_SIZE);
 		return -EAGAIN;
 	}
 
@@ -103,6 +120,8 @@
 	if (!PageUptodate(page))
 		SetPageUptodate(page);
 	f2fs_put_page(ipage, 1);
+	trace_android_fs_dataread_end(inode, page_offset(page),
+				      PAGE_SIZE);
 	unlock_page(page);
 	return 0;
 }
@@ -171,7 +190,7 @@
 
 	/* clear inline data and flag after data writeback */
 	f2fs_truncate_inline_inode(dn->inode, dn->inode_page, 0);
-	clear_inline_node(dn->inode_page);
+	clear_page_private_inline(dn->inode_page);
 clear_out:
 	stat_dec_inline_inode(dn->inode);
 	clear_inode_flag(dn->inode, FI_INLINE_DATA);
@@ -186,7 +205,8 @@
 	struct page *ipage, *page;
 	int err = 0;
 
-	if (!f2fs_has_inline_data(inode))
+	if (!f2fs_has_inline_data(inode) ||
+			f2fs_hw_is_readonly(sbi) || f2fs_readonly(sbi->sb))
 		return 0;
 
 	err = dquot_initialize(inode);
@@ -252,7 +272,7 @@
 	set_inode_flag(inode, FI_APPEND_WRITE);
 	set_inode_flag(inode, FI_DATA_EXIST);
 
-	clear_inline_node(dn.inode_page);
+	clear_page_private_inline(dn.inode_page);
 	f2fs_put_dnode(&dn);
 	return 0;
 }
@@ -269,7 +289,7 @@
 	 * [prev.] [next] of inline_data flag
 	 *    o       o  -> recover inline_data
 	 *    o       x  -> remove inline_data, and then recover data blocks
-	 *    x       o  -> remove inline_data, and then recover inline_data
+	 *    x       o  -> remove data blocks, and then recover inline_data
 	 *    x       x  -> recover data blocks
 	 */
 	if (IS_INODE(npage))
@@ -301,6 +321,7 @@
 		if (IS_ERR(ipage))
 			return PTR_ERR(ipage);
 		f2fs_truncate_inline_inode(inode, ipage, 0);
+		stat_dec_inline_inode(inode);
 		clear_inode_flag(inode, FI_INLINE_DATA);
 		f2fs_put_page(ipage, 1);
 	} else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
@@ -309,21 +330,21 @@
 		ret = f2fs_truncate_blocks(inode, 0, false);
 		if (ret)
 			return ret;
+		stat_inc_inline_inode(inode);
 		goto process_inline;
 	}
 	return 0;
 }
 
 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
-			struct fscrypt_name *fname, struct page **res_page)
+					const struct f2fs_filename *fname,
+					struct page **res_page)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
-	struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
 	struct f2fs_dir_entry *de;
 	struct f2fs_dentry_ptr d;
 	struct page *ipage;
 	void *inline_dentry;
-	f2fs_hash_t namehash;
 
 	ipage = f2fs_get_node_page(sbi, dir->i_ino);
 	if (IS_ERR(ipage)) {
@@ -331,13 +352,15 @@
 		return NULL;
 	}
 
-	namehash = f2fs_dentry_hash(dir, &name, fname);
-
 	inline_dentry = inline_data_addr(dir, ipage);
 
 	make_dentry_ptr_inline(dir, &d, inline_dentry);
-	de = f2fs_find_target_dentry(fname, namehash, NULL, &d);
+	de = f2fs_find_target_dentry(&d, fname, NULL);
 	unlock_page(ipage);
+	if (IS_ERR(de)) {
+		*res_page = ERR_CAST(de);
+		de = NULL;
+	}
 	if (de)
 		*res_page = ipage;
 	else
@@ -378,7 +401,7 @@
 	struct f2fs_dentry_ptr src, dst;
 	int err;
 
-	page = f2fs_grab_cache_page(dir->i_mapping, 0, false);
+	page = f2fs_grab_cache_page(dir->i_mapping, 0, true);
 	if (!page) {
 		f2fs_put_page(ipage, 1);
 		return -ENOMEM;
@@ -453,7 +476,7 @@
 
 	while (bit_pos < d.max) {
 		struct f2fs_dir_entry *de;
-		struct qstr new_name;
+		struct f2fs_filename fname;
 		nid_t ino;
 		umode_t fake_mode;
 
@@ -469,14 +492,19 @@
 			continue;
 		}
 
-		new_name.name = d.filename[bit_pos];
-		new_name.len = le16_to_cpu(de->name_len);
+		/*
+		 * We only need the disk_name and hash to move the dentry.
+		 * We don't need the original or casefolded filenames.
+		 */
+		memset(&fname, 0, sizeof(fname));
+		fname.disk_name.name = d.filename[bit_pos];
+		fname.disk_name.len = le16_to_cpu(de->name_len);
+		fname.hash = de->hash_code;
 
 		ino = le32_to_cpu(de->ino);
 		fake_mode = f2fs_get_de_type(de) << S_SHIFT;
 
-		err = f2fs_add_regular_entry(dir, &new_name, NULL, NULL,
-							ino, fake_mode);
+		err = f2fs_add_regular_entry(dir, &fname, NULL, ino, fake_mode);
 		if (err)
 			goto punch_dentry_pages;
 
@@ -525,7 +553,7 @@
 			!f2fs_has_inline_xattr(dir))
 		F2FS_I(dir)->i_inline_xattr_size = 0;
 
-	kvfree(backup_dentry);
+	kfree(backup_dentry);
 	return 0;
 recover:
 	lock_page(ipage);
@@ -536,11 +564,11 @@
 	set_page_dirty(ipage);
 	f2fs_put_page(ipage, 1);
 
-	kvfree(backup_dentry);
+	kfree(backup_dentry);
 	return err;
 }
 
-static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
+static int do_convert_inline_dir(struct inode *dir, struct page *ipage,
 							void *inline_dentry)
 {
 	if (!F2FS_I(dir)->i_dir_level)
@@ -549,17 +577,55 @@
 		return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
 }
 
-int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
-				const struct qstr *orig_name,
-				struct inode *inode, nid_t ino, umode_t mode)
+int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
+{
+	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
+	struct page *ipage;
+	struct f2fs_filename fname;
+	void *inline_dentry = NULL;
+	int err = 0;
+
+	if (!f2fs_has_inline_dentry(dir))
+		return 0;
+
+	f2fs_lock_op(sbi);
+
+	err = f2fs_setup_filename(dir, &dentry->d_name, 0, &fname);
+	if (err)
+		goto out;
+
+	ipage = f2fs_get_node_page(sbi, dir->i_ino);
+	if (IS_ERR(ipage)) {
+		err = PTR_ERR(ipage);
+		goto out_fname;
+	}
+
+	if (f2fs_has_enough_room(dir, ipage, &fname)) {
+		f2fs_put_page(ipage, 1);
+		goto out_fname;
+	}
+
+	inline_dentry = inline_data_addr(dir, ipage);
+
+	err = do_convert_inline_dir(dir, ipage, inline_dentry);
+	if (!err)
+		f2fs_put_page(ipage, 1);
+out_fname:
+	f2fs_free_filename(&fname);
+out:
+	f2fs_unlock_op(sbi);
+	return err;
+}
+
+int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
+			  struct inode *inode, nid_t ino, umode_t mode)
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 	struct page *ipage;
 	unsigned int bit_pos;
-	f2fs_hash_t name_hash;
 	void *inline_dentry = NULL;
 	struct f2fs_dentry_ptr d;
-	int slots = GET_DENTRY_SLOTS(new_name->len);
+	int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
 	struct page *page = NULL;
 	int err = 0;
 
@@ -572,7 +638,7 @@
 
 	bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
 	if (bit_pos >= d.max) {
-		err = f2fs_convert_inline_dir(dir, ipage, inline_dentry);
+		err = do_convert_inline_dir(dir, ipage, inline_dentry);
 		if (err)
 			return err;
 		err = -EAGAIN;
@@ -581,8 +647,7 @@
 
 	if (inode) {
 		down_write(&F2FS_I(inode)->i_sem);
-		page = f2fs_init_inode_metadata(inode, dir, new_name,
-						orig_name, ipage);
+		page = f2fs_init_inode_metadata(inode, dir, fname, ipage);
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto fail;
@@ -591,8 +656,8 @@
 
 	f2fs_wait_on_page_writeback(ipage, NODE, true, true);
 
-	name_hash = f2fs_dentry_hash(dir, new_name, NULL);
-	f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
+	f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
+			   bit_pos);
 
 	set_page_dirty(ipage);
 
@@ -746,6 +811,7 @@
 	byteaddr += (char *)inline_data_addr(inode, ipage) -
 					(char *)F2FS_INODE(ipage);
 	err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
+	trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
 out:
 	f2fs_put_page(ipage, 1);
 	return err;
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 2383d52..1213f15 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -18,6 +18,10 @@
 
 #include <trace/events/f2fs.h>
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+extern const struct address_space_operations f2fs_compress_aops;
+#endif
+
 void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync)
 {
 	if (is_inode_flag_set(inode, FI_NEW_INODE))
@@ -200,6 +204,7 @@
 {
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
+	struct f2fs_inode *ri = F2FS_INODE(node_page);
 	unsigned long long iblocks;
 
 	iblocks = le64_to_cpu(F2FS_INODE(node_page)->i_blocks);
@@ -286,6 +291,46 @@
 		return false;
 	}
 
+	if ((fi->i_flags & F2FS_CASEFOLD_FL) && !f2fs_sb_has_casefold(sbi)) {
+		set_sbi_flag(sbi, SBI_NEED_FSCK);
+		f2fs_warn(sbi, "%s: inode (ino=%lx) has casefold flag, but casefold feature is off",
+			  __func__, inode->i_ino);
+		return false;
+	}
+
+	if (f2fs_has_extra_attr(inode) && f2fs_sb_has_compression(sbi) &&
+			fi->i_flags & F2FS_COMPR_FL &&
+			F2FS_FITS_IN_INODE(ri, fi->i_extra_isize,
+						i_log_cluster_size)) {
+		if (ri->i_compress_algorithm >= COMPRESS_MAX) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported "
+				"compress algorithm: %u, run fsck to fix",
+				  __func__, inode->i_ino,
+				  ri->i_compress_algorithm);
+			return false;
+		}
+		if (le64_to_cpu(ri->i_compr_blocks) >
+				SECTOR_TO_BLOCK(inode->i_blocks)) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has inconsistent "
+				"i_compr_blocks:%llu, i_blocks:%llu, run fsck to fix",
+				  __func__, inode->i_ino,
+				  le64_to_cpu(ri->i_compr_blocks),
+				  SECTOR_TO_BLOCK(inode->i_blocks));
+			return false;
+		}
+		if (ri->i_log_cluster_size < MIN_COMPRESS_LOG_SIZE ||
+			ri->i_log_cluster_size > MAX_COMPRESS_LOG_SIZE) {
+			set_sbi_flag(sbi, SBI_NEED_FSCK);
+			f2fs_warn(sbi, "%s: inode (ino=%lx) has unsupported "
+				"log cluster size: %u, run fsck to fix",
+				  __func__, inode->i_ino,
+				  ri->i_log_cluster_size);
+			return false;
+		}
+	}
+
 	return true;
 }
 
@@ -331,13 +376,12 @@
 	fi->i_flags = le32_to_cpu(ri->i_flags);
 	if (S_ISREG(inode->i_mode))
 		fi->i_flags &= ~F2FS_PROJINHERIT_FL;
-	fi->flags = 0;
+	bitmap_zero(fi->flags, FI_MAX);
 	fi->i_advise = ri->i_advise;
 	fi->i_pino = le32_to_cpu(ri->i_pino);
 	fi->i_dir_level = ri->i_dir_level;
 
-	if (f2fs_init_extent_tree(inode, &ri->i_ext))
-		set_page_dirty(node_page);
+	f2fs_init_extent_tree(inode, node_page);
 
 	get_inline_info(inode, ri);
 
@@ -371,6 +415,7 @@
 
 	/* try to recover cold bit for non-dir inode */
 	if (!S_ISDIR(inode->i_mode) && !is_cold_node(node_page)) {
+		f2fs_wait_on_page_writeback(node_page, NODE, true, true);
 		set_cold_node(node_page, false);
 		set_page_dirty(node_page);
 	}
@@ -407,6 +452,20 @@
 		fi->i_crtime.tv_nsec = le32_to_cpu(ri->i_crtime_nsec);
 	}
 
+	if (f2fs_has_extra_attr(inode) && f2fs_sb_has_compression(sbi) &&
+					(fi->i_flags & F2FS_COMPR_FL)) {
+		if (F2FS_FITS_IN_INODE(ri, fi->i_extra_isize,
+					i_log_cluster_size)) {
+			atomic_set(&fi->i_compr_blocks,
+					le64_to_cpu(ri->i_compr_blocks));
+			fi->i_compress_algorithm = ri->i_compress_algorithm;
+			fi->i_log_cluster_size = ri->i_log_cluster_size;
+			fi->i_compress_flag = le16_to_cpu(ri->i_compress_flag);
+			fi->i_cluster_size = 1 << fi->i_log_cluster_size;
+			set_inode_flag(inode, FI_COMPRESSED_FILE);
+		}
+	}
+
 	F2FS_I(inode)->i_disk_time[0] = inode->i_atime;
 	F2FS_I(inode)->i_disk_time[1] = inode->i_ctime;
 	F2FS_I(inode)->i_disk_time[2] = inode->i_mtime;
@@ -416,6 +475,8 @@
 	stat_inc_inline_xattr(inode);
 	stat_inc_inline_inode(inode);
 	stat_inc_inline_dir(inode);
+	stat_inc_compr_inode(inode);
+	stat_add_compr_blocks(inode, atomic_read(&fi->i_compr_blocks));
 
 	return 0;
 }
@@ -437,6 +498,11 @@
 	if (ino == F2FS_NODE_INO(sbi) || ino == F2FS_META_INO(sbi))
 		goto make_now;
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (ino == F2FS_COMPRESS_INO(sbi))
+		goto make_now;
+#endif
+
 	ret = do_read_inode(inode);
 	if (ret)
 		goto bad_inode;
@@ -447,6 +513,12 @@
 	} else if (ino == F2FS_META_INO(sbi)) {
 		inode->i_mapping->a_ops = &f2fs_meta_aops;
 		mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
+	} else if (ino == F2FS_COMPRESS_INO(sbi)) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		inode->i_mapping->a_ops = &f2fs_compress_aops;
+#endif
+		mapping_set_gfp_mask(inode->i_mapping,
+			GFP_NOFS | __GFP_HIGHMEM | __GFP_MOVABLE);
 	} else if (S_ISREG(inode->i_mode)) {
 		inode->i_op = &f2fs_file_inode_operations;
 		inode->i_fop = &f2fs_file_operations;
@@ -490,7 +562,7 @@
 	inode = f2fs_iget(sb, ino);
 	if (IS_ERR(inode)) {
 		if (PTR_ERR(inode) == -ENOMEM) {
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto retry;
 		}
 	}
@@ -569,13 +641,27 @@
 			ri->i_crtime_nsec =
 				cpu_to_le32(F2FS_I(inode)->i_crtime.tv_nsec);
 		}
+
+		if (f2fs_sb_has_compression(F2FS_I_SB(inode)) &&
+			F2FS_FITS_IN_INODE(ri, F2FS_I(inode)->i_extra_isize,
+							i_log_cluster_size)) {
+			ri->i_compr_blocks =
+				cpu_to_le64(atomic_read(
+					&F2FS_I(inode)->i_compr_blocks));
+			ri->i_compress_algorithm =
+				F2FS_I(inode)->i_compress_algorithm;
+			ri->i_compress_flag =
+				cpu_to_le16(F2FS_I(inode)->i_compress_flag);
+			ri->i_log_cluster_size =
+				F2FS_I(inode)->i_log_cluster_size;
+		}
 	}
 
 	__set_inode_rdev(inode, ri);
 
 	/* deleted inode */
 	if (inode->i_nlink == 0)
-		clear_inline_node(node_page);
+		clear_page_private_inline(node_page);
 
 	F2FS_I(inode)->i_disk_time[0] = inode->i_atime;
 	F2FS_I(inode)->i_disk_time[1] = inode->i_ctime;
@@ -595,6 +681,7 @@
 	node_page = f2fs_get_node_page(sbi, inode->i_ino);
 	if (IS_ERR(node_page)) {
 		int err = PTR_ERR(node_page);
+
 		if (err == -ENOMEM) {
 			cond_resched();
 			goto retry;
@@ -627,7 +714,7 @@
 
 	/*
 	 * We need to balance fs here to prevent from producing dirty node pages
-	 * during the urgent cleaning time when runing out of free sections.
+	 * during the urgent cleaning time when running out of free sections.
 	 */
 	f2fs_update_inode_page(inode);
 	if (wbc && wbc->nr_to_write)
@@ -651,8 +738,12 @@
 	trace_f2fs_evict_inode(inode);
 	truncate_inode_pages_final(&inode->i_data);
 
+	if (test_opt(sbi, COMPRESS_CACHE) && f2fs_compressed_file(inode))
+		f2fs_invalidate_compress_pages(sbi, inode->i_ino);
+
 	if (inode->i_ino == F2FS_NODE_INO(sbi) ||
-			inode->i_ino == F2FS_META_INO(sbi))
+			inode->i_ino == F2FS_META_INO(sbi) ||
+			inode->i_ino == F2FS_COMPRESS_INO(sbi))
 		goto out_clear;
 
 	f2fs_bug_on(sbi, get_dirty_pages(inode));
@@ -711,6 +802,9 @@
 	stat_dec_inline_xattr(inode);
 	stat_dec_inline_dir(inode);
 	stat_dec_inline_inode(inode);
+	stat_dec_compr_inode(inode);
+	stat_sub_compr_blocks(inode,
+			atomic_read(&F2FS_I(inode)->i_compr_blocks));
 
 	if (likely(!f2fs_cp_error(sbi) &&
 				!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
@@ -718,7 +812,7 @@
 	else
 		f2fs_inode_synced(inode);
 
-	/* ino == 0, if f2fs_new_inode() was failed t*/
+	/* for the case f2fs_new_inode() was failed, .i_ino is zero, skip it */
 	if (inode->i_ino)
 		invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino,
 							inode->i_ino);
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index ed95c27..8e7aa2b 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -28,6 +28,7 @@
 	nid_t ino;
 	struct inode *inode;
 	bool nid_free = false;
+	bool encrypt = false;
 	int xattr_size = 0;
 	int err;
 
@@ -69,15 +70,17 @@
 		F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
 							F2FS_DEF_PROJID);
 
+	err = fscrypt_prepare_new_inode(dir, inode, &encrypt);
+	if (err)
+		goto fail_drop;
+
 	err = dquot_initialize(inode);
 	if (err)
 		goto fail_drop;
 
 	set_inode_flag(inode, FI_NEW_INODE);
 
-	/* If the directory encrypted, then we should encrypt the inode. */
-	if ((IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) &&
-				f2fs_may_encrypt(inode))
+	if (encrypt)
 		f2fs_set_encrypted_inode(inode);
 
 	if (f2fs_sb_has_extra_attr(sbi)) {
@@ -119,6 +122,13 @@
 	if (F2FS_I(inode)->i_flags & F2FS_PROJINHERIT_FL)
 		set_inode_flag(inode, FI_PROJ_INHERIT);
 
+	if (f2fs_sb_has_compression(sbi)) {
+		/* Inherit the compression flag in directory */
+		if ((F2FS_I(dir)->i_flags & F2FS_COMPR_FL) &&
+					f2fs_may_compress(inode))
+			set_compress_context(inode);
+	}
+
 	f2fs_set_inode_flags(inode);
 
 	trace_f2fs_new_inode(inode, 0);
@@ -143,12 +153,16 @@
 	return ERR_PTR(err);
 }
 
-static inline int is_extension_exist(const unsigned char *s, const char *sub)
+static inline int is_extension_exist(const unsigned char *s, const char *sub,
+						bool tmp_ext)
 {
 	size_t slen = strlen(s);
 	size_t sublen = strlen(sub);
 	int i;
 
+	if (sublen == 1 && *sub == '*')
+		return 1;
+
 	/*
 	 * filename format of multimedia file should be defined as:
 	 * "filename + '.' + extension + (optional: '.' + temp extension)".
@@ -156,6 +170,13 @@
 	if (slen < sublen + 2)
 		return 0;
 
+	if (!tmp_ext) {
+		/* file has no temp extension */
+		if (s[slen - sublen - 1] != '.')
+			return 0;
+		return !strncasecmp(s + slen - sublen, sub, sublen);
+	}
+
 	for (i = 1; i < slen - sublen; i++) {
 		if (s[i] != '.')
 			continue;
@@ -167,7 +188,7 @@
 }
 
 /*
- * Set multimedia files as cold files for hot/cold data separation
+ * Set file's temperature for hot/cold data separation
  */
 static inline void set_file_temperature(struct f2fs_sb_info *sbi, struct inode *inode,
 		const unsigned char *name)
@@ -181,7 +202,7 @@
 	hot_count = sbi->raw_super->hot_ext_count;
 
 	for (i = 0; i < cold_count + hot_count; i++) {
-		if (is_extension_exist(name, extlist[i]))
+		if (is_extension_exist(name, extlist[i], true))
 			break;
 	}
 
@@ -262,6 +283,45 @@
 	return 0;
 }
 
+static void set_compress_inode(struct f2fs_sb_info *sbi, struct inode *inode,
+						const unsigned char *name)
+{
+	__u8 (*extlist)[F2FS_EXTENSION_LEN] = sbi->raw_super->extension_list;
+	unsigned char (*ext)[F2FS_EXTENSION_LEN];
+	unsigned int ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
+	int i, cold_count, hot_count;
+
+	if (!f2fs_sb_has_compression(sbi) ||
+			is_inode_flag_set(inode, FI_COMPRESSED_FILE) ||
+			F2FS_I(inode)->i_flags & F2FS_NOCOMP_FL ||
+			!f2fs_may_compress(inode))
+		return;
+
+	down_read(&sbi->sb_lock);
+
+	cold_count = le32_to_cpu(sbi->raw_super->extension_count);
+	hot_count = sbi->raw_super->hot_ext_count;
+
+	for (i = cold_count; i < cold_count + hot_count; i++) {
+		if (is_extension_exist(name, extlist[i], false)) {
+			up_read(&sbi->sb_lock);
+			return;
+		}
+	}
+
+	up_read(&sbi->sb_lock);
+
+	ext = F2FS_OPTION(sbi).extensions;
+
+	for (i = 0; i < ext_cnt; i++) {
+		if (!is_extension_exist(name, ext[i], false))
+			continue;
+
+		set_compress_context(inode);
+		return;
+	}
+}
+
 static int f2fs_create(struct inode *dir, struct dentry *dentry, umode_t mode,
 						bool excl)
 {
@@ -286,6 +346,8 @@
 	if (!test_opt(sbi, DISABLE_EXT_IDENTIFY))
 		set_file_temperature(sbi, inode, dentry->d_name.name);
 
+	set_compress_inode(sbi, inode, dentry->d_name.name);
+
 	inode->i_op = &f2fs_file_inode_operations;
 	inode->i_fop = &f2fs_file_operations;
 	inode->i_mapping->a_ops = &f2fs_dblock_aops;
@@ -365,6 +427,7 @@
 	struct qstr dotdot = QSTR_INIT("..", 2);
 	struct page *page;
 	unsigned long ino = f2fs_inode_by_name(d_inode(child), &dotdot, &page);
+
 	if (!ino) {
 		if (IS_ERR(page))
 			return ERR_CAST(page);
@@ -433,7 +496,7 @@
 	nid_t ino = -1;
 	int err = 0;
 	unsigned int root_ino = F2FS_ROOT_INO(F2FS_I_SB(dir));
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
 
 	trace_f2fs_lookup_start(dir, dentry, flags);
 
@@ -442,19 +505,21 @@
 		goto out;
 	}
 
-	err = fscrypt_prepare_lookup(dir, dentry, &fname);
+	err = f2fs_prepare_lookup(dir, dentry, &fname);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		goto out_splice;
 	if (err)
 		goto out;
 	de = __f2fs_find_entry(dir, &fname, &page);
-	fscrypt_free_filename(&fname);
+	f2fs_free_filename(&fname);
 
 	if (!de) {
 		if (IS_ERR(page)) {
 			err = PTR_ERR(page);
 			goto out;
 		}
+		err = -ENOENT;
 		goto out_splice;
 	}
 
@@ -500,7 +565,7 @@
 #endif
 	new = d_splice_alias(inode, dentry);
 	err = PTR_ERR_OR_ZERO(new);
-	trace_f2fs_lookup_end(dir, dentry, ino, err);
+	trace_f2fs_lookup_end(dir, dentry, ino, !new ? -ENOENT : err);
 	return new;
 out_iput:
 	iput(inode);
@@ -515,19 +580,21 @@
 	struct inode *inode = d_inode(dentry);
 	struct f2fs_dir_entry *de;
 	struct page *page;
-	int err = -ENOENT;
+	int err;
 
 	trace_f2fs_unlink_enter(dir, dentry);
 
-	if (unlikely(f2fs_cp_error(sbi)))
-		return -EIO;
+	if (unlikely(f2fs_cp_error(sbi))) {
+		err = -EIO;
+		goto fail;
+	}
 
 	err = dquot_initialize(dir);
 	if (err)
-		return err;
+		goto fail;
 	err = dquot_initialize(inode);
 	if (err)
-		return err;
+		goto fail;
 
 	de = f2fs_find_entry(dir, &dentry->d_name, &page);
 	if (!de) {
@@ -550,7 +617,7 @@
 	/* 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
+	 * negative dentries at f2fs_lookup(), when it is better
 	 * supported by the VFS for the CI case.
 	 */
 	if (IS_CASEFOLDED(dir))
@@ -570,6 +637,7 @@
 				 struct delayed_call *done)
 {
 	const char *link = page_get_link(dentry, inode, done);
+
 	if (!IS_ERR(link) && !*link) {
 		/* this is broken symlink case */
 		do_delayed_call(done);
@@ -655,7 +723,7 @@
 	f2fs_handle_failed_inode(inode);
 out_free_encrypted_link:
 	if (disk_link.name != (unsigned char *)symname)
-		kvfree(disk_link.name);
+		kfree(disk_link.name);
 	return err;
 }
 
@@ -707,6 +775,7 @@
 static int f2fs_rmdir(struct inode *dir, struct dentry *dentry)
 {
 	struct inode *inode = d_inode(dentry);
+
 	if (f2fs_empty_dir(inode))
 		return f2fs_unlink(dir, dentry);
 	return -ENOTEMPTY;
@@ -829,12 +898,6 @@
 	if (!f2fs_is_checkpoint_ready(sbi))
 		return -ENOSPC;
 
-	if (IS_ENCRYPTED(dir) || DUMMY_ENCRYPTION_ENABLED(sbi)) {
-		int err = fscrypt_get_encryption_info(dir);
-		if (err)
-			return err;
-	}
-
 	return __f2fs_tmpfile(dir, dentry, mode, NULL);
 }
 
@@ -854,12 +917,11 @@
 	struct inode *old_inode = d_inode(old_dentry);
 	struct inode *new_inode = d_inode(new_dentry);
 	struct inode *whiteout = NULL;
-	struct page *old_dir_page;
+	struct page *old_dir_page = NULL;
 	struct page *old_page, *new_page = NULL;
 	struct f2fs_dir_entry *old_dir_entry = NULL;
 	struct f2fs_dir_entry *old_entry;
 	struct f2fs_dir_entry *new_entry;
-	bool is_old_inline = f2fs_has_inline_dentry(old_dir);
 	int err;
 
 	if (unlikely(f2fs_cp_error(sbi)))
@@ -872,6 +934,20 @@
 			F2FS_I(old_dentry->d_inode)->i_projid)))
 		return -EXDEV;
 
+	/*
+	 * If new_inode is null, the below renaming flow will
+	 * add a link in old_dir which can conver inline_dir.
+	 * After then, if we failed to get the entry due to other
+	 * reasons like ENOMEM, we had to remove the new entry.
+	 * Instead of adding such the error handling routine, let's
+	 * simply convert first here.
+	 */
+	if (old_dir == new_dir && !new_inode) {
+		err = f2fs_try_convert_inline_dir(old_dir, new_dentry);
+		if (err)
+			return err;
+	}
+
 	if (flags & RENAME_WHITEOUT) {
 		err = f2fs_create_whiteout(old_dir, &whiteout);
 		if (err)
@@ -933,6 +1009,7 @@
 			goto put_out_dir;
 
 		f2fs_set_link(new_dir, new_entry, new_page, old_inode);
+		new_page = NULL;
 
 		new_inode->i_ctime = current_time(new_inode);
 		down_write(&F2FS_I(new_inode)->i_sem);
@@ -958,28 +1035,6 @@
 
 		if (old_dir_entry)
 			f2fs_i_links_write(new_dir, true);
-
-		/*
-		 * old entry and new entry can locate in the same inline
-		 * dentry in inode, when attaching new entry in inline dentry,
-		 * it could force inline dentry conversion, after that,
-		 * old_entry and old_page will point to wrong address, in
-		 * order to avoid this, let's do the check and update here.
-		 */
-		if (is_old_inline && !f2fs_has_inline_dentry(old_dir)) {
-			f2fs_put_page(old_page, 0);
-			old_page = NULL;
-
-			old_entry = f2fs_find_entry(old_dir,
-						&old_dentry->d_name, &old_page);
-			if (!old_entry) {
-				err = -ENOENT;
-				if (IS_ERR(old_page))
-					err = PTR_ERR(old_page);
-				f2fs_unlock_op(sbi);
-				goto out_dir;
-			}
-		}
 	}
 
 	down_write(&F2FS_I(old_inode)->i_sem);
@@ -994,6 +1049,7 @@
 	f2fs_mark_inode_dirty_sync(old_inode, false);
 
 	f2fs_delete_entry(old_entry, old_page, old_dir, NULL);
+	old_page = NULL;
 
 	if (whiteout) {
 		set_inode_flag(whiteout, FI_INC_LINK);
@@ -1033,8 +1089,7 @@
 
 put_out_dir:
 	f2fs_unlock_op(sbi);
-	if (new_page)
-		f2fs_put_page(new_page, 0);
+	f2fs_put_page(new_page, 0);
 out_dir:
 	if (old_dir_entry)
 		f2fs_put_page(old_dir_page, 0);
@@ -1266,12 +1321,10 @@
 }
 
 const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
-	.get_link       = f2fs_encrypted_get_link,
+	.get_link	= f2fs_encrypted_get_link,
 	.getattr	= f2fs_encrypted_symlink_getattr,
 	.setattr	= f2fs_setattr,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
 
 const struct inode_operations f2fs_dir_inode_operations = {
@@ -1289,27 +1342,21 @@
 	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 	.fiemap		= f2fs_fiemap,
 };
 
 const struct inode_operations f2fs_symlink_inode_operations = {
-	.get_link       = f2fs_get_link,
+	.get_link	= f2fs_get_link,
 	.getattr	= f2fs_getattr,
 	.setattr	= f2fs_setattr,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
 
 const struct inode_operations f2fs_special_inode_operations = {
 	.getattr	= f2fs_getattr,
-	.setattr        = f2fs_setattr,
+	.setattr	= f2fs_setattr,
 	.get_acl	= f2fs_get_acl,
 	.set_acl	= f2fs_set_acl,
-#ifdef CONFIG_F2FS_FS_XATTR
 	.listxattr	= f2fs_listxattr,
-#endif
 };
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index 0cd1d51..f7b836bc 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -17,7 +17,6 @@
 #include "node.h"
 #include "segment.h"
 #include "xattr.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 #define on_f2fs_build_free_nids(nmi) mutex_is_locked(&(nm_i)->build_lock)
@@ -44,11 +43,15 @@
 bool f2fs_available_free_memory(struct f2fs_sb_info *sbi, int type)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
+	struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
 	struct sysinfo val;
 	unsigned long avail_ram;
 	unsigned long mem_size = 0;
 	bool res = false;
 
+	if (!nm_i)
+		return true;
+
 	si_meminfo(&val);
 
 	/* only uses low memory */
@@ -90,6 +93,24 @@
 		/* it allows 20% / total_ram for inmemory pages */
 		mem_size = get_pages(sbi, F2FS_INMEM_PAGES);
 		res = mem_size < (val.totalram / 5);
+	} else if (type == DISCARD_CACHE) {
+		mem_size = (atomic_read(&dcc->discard_cmd_cnt) *
+				sizeof(struct discard_cmd)) >> PAGE_SHIFT;
+		res = mem_size < (avail_ram * nm_i->ram_thresh / 100);
+	} else if (type == COMPRESS_PAGE) {
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		unsigned long free_ram = val.freeram;
+
+		/*
+		 * free memory is lower than watermark or cached page count
+		 * exceed threshold, deny caching compress page.
+		 */
+		res = (free_ram > avail_ram * sbi->compress_watermark / 100) &&
+			(COMPRESS_MAPPING(sbi)->nrpages <
+			 free_ram * sbi->compress_percent / 100);
+#else
+		res = false;
+#endif
 	} else {
 		if (!sbi->sb->s_bdi->wb.dirty_exceeded)
 			return true;
@@ -463,6 +484,7 @@
 	/* increment version no as node is removed */
 	if (nat_get_blkaddr(e) != NEW_ADDR && new_blkaddr == NULL_ADDR) {
 		unsigned char version = nat_get_version(e);
+
 		nat_set_version(e, inc_node_version(version));
 	}
 
@@ -514,9 +536,6 @@
 	return nr - nr_shrink;
 }
 
-/*
- * This function always returns success
- */
 int f2fs_get_node_info(struct f2fs_sb_info *sbi, nid_t nid,
 						struct node_info *ni)
 {
@@ -720,8 +739,7 @@
 /*
  * Caller should call f2fs_put_dnode(dn).
  * Also, it should grab and release a rwsem by calling f2fs_lock_op() and
- * f2fs_unlock_op() only if ro is not set RDONLY_NODE.
- * In the case of RDONLY_NODE, we don't need to care about mutex.
+ * f2fs_unlock_op() only if mode is set with ALLOC_NODE.
  */
 int f2fs_get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
 {
@@ -813,8 +831,7 @@
 	dn->nid = nids[level];
 	dn->ofs_in_node = offset[level];
 	dn->node_page = npage[level];
-	dn->data_blkaddr = datablock_addr(dn->inode,
-				dn->node_page, dn->ofs_in_node);
+	dn->data_blkaddr = f2fs_data_blkaddr(dn);
 	return 0;
 
 release_pages:
@@ -1050,8 +1067,10 @@
 	trace_f2fs_truncate_inode_blocks_enter(inode, from);
 
 	level = get_node_path(inode, from, offset, noffset);
-	if (level < 0)
+	if (level < 0) {
+		trace_f2fs_truncate_inode_blocks_exit(inode, level);
 		return level;
+	}
 
 	page = f2fs_get_node_page(sbi, inode->i_ino);
 	if (IS_ERR(page)) {
@@ -1192,8 +1211,9 @@
 	}
 
 	if (unlikely(inode->i_blocks != 0 && inode->i_blocks != 8)) {
-		f2fs_warn(F2FS_I_SB(inode), "Inconsistent i_blocks, ino:%lu, iblocks:%llu",
-			  inode->i_ino, (unsigned long long)inode->i_blocks);
+		f2fs_warn(F2FS_I_SB(inode),
+			"f2fs_remove_inode_page: 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);
 	}
 
@@ -1308,7 +1328,13 @@
 	}
 
 	fio.new_blkaddr = fio.old_blkaddr = ni.blk_addr;
-	return f2fs_submit_page_bio(&fio);
+
+	err = f2fs_submit_page_bio(&fio);
+
+	if (!err)
+		f2fs_update_iostat(sbi, FS_NODE_READ_IO, F2FS_BLKSIZE);
+
+	return err;
 }
 
 /*
@@ -1380,7 +1406,7 @@
 		goto out_err;
 	}
 page_hit:
-	if(unlikely(nid != nid_of_node(page))) {
+	if (unlikely(nid != nid_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),
@@ -1523,8 +1549,15 @@
 
 	trace_f2fs_writepage(page, NODE);
 
-	if (unlikely(f2fs_cp_error(sbi)))
+	if (unlikely(f2fs_cp_error(sbi))) {
+		if (is_sbi_flag_set(sbi, SBI_IS_CLOSE)) {
+			ClearPageUptodate(page);
+			dec_page_count(sbi, F2FS_DIRTY_NODES);
+			unlock_page(page);
+			return 0;
+		}
 		goto redirty_out;
+	}
 
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		goto redirty_out;
@@ -1722,7 +1755,7 @@
 					set_dentry_mark(page,
 						f2fs_need_dentry_mark(sbi, ino));
 				}
-				/*  may be written by other thread */
+				/* may be written by other thread */
 				if (!PageDirty(page))
 					set_page_dirty(page);
 			}
@@ -1766,7 +1799,7 @@
 out:
 	if (nwritten)
 		f2fs_submit_merged_write_cond(sbi, NULL, NULL, ino, NODE);
-	return ret ? -EIO: 0;
+	return ret ? -EIO : 0;
 }
 
 static int f2fs_match_ino(struct inode *inode, unsigned long ino, void *data)
@@ -1810,6 +1843,51 @@
 	return true;
 }
 
+void f2fs_flush_inline_data(struct f2fs_sb_info *sbi)
+{
+	pgoff_t index = 0;
+	struct pagevec pvec;
+	int nr_pages;
+
+	pagevec_init(&pvec);
+
+	while ((nr_pages = pagevec_lookup_tag(&pvec,
+			NODE_MAPPING(sbi), &index, PAGECACHE_TAG_DIRTY))) {
+		int i;
+
+		for (i = 0; i < nr_pages; i++) {
+			struct page *page = pvec.pages[i];
+
+			if (!IS_DNODE(page))
+				continue;
+
+			lock_page(page);
+
+			if (unlikely(page->mapping != NODE_MAPPING(sbi))) {
+continue_unlock:
+				unlock_page(page);
+				continue;
+			}
+
+			if (!PageDirty(page)) {
+				/* someone wrote it for us */
+				goto continue_unlock;
+			}
+
+			/* flush inline_data, if it's async context. */
+			if (page_private_inline(page)) {
+				clear_page_private_inline(page);
+				unlock_page(page);
+				flush_inline_data(sbi, ino_of_node(page));
+				continue;
+			}
+			unlock_page(page);
+		}
+		pagevec_release(&pvec);
+		cond_resched();
+	}
+}
+
 int f2fs_sync_node_pages(struct f2fs_sb_info *sbi,
 				struct writeback_control *wbc,
 				bool do_balance, enum iostat_type io_type)
@@ -1873,9 +1951,13 @@
 				goto continue_unlock;
 			}
 
+			/* flush inline_data/inode, if it's async context. */
+			if (!do_balance)
+				goto write_node;
+
 			/* flush inline_data */
-			if (is_inline_node(page)) {
-				clear_inline_node(page);
+			if (page_private_inline(page)) {
+				clear_page_private_inline(page);
 				unlock_page(page);
 				flush_inline_data(sbi, ino_of_node(page));
 				goto lock_node;
@@ -1887,7 +1969,7 @@
 				if (flush_dirty_inode(page))
 					goto lock_node;
 			}
-
+write_node:
 			f2fs_wait_on_page_writeback(page, NODE, true, true);
 
 			if (!clear_page_dirty_for_io(page))
@@ -1985,7 +2067,7 @@
 		goto skip_write;
 
 	/* balancing f2fs's metadata in background */
-	f2fs_balance_fs_bg(sbi);
+	f2fs_balance_fs_bg(sbi, true);
 
 	/* collect a number of dirty node pages and write together */
 	if (wbc->sync_mode != WB_SYNC_ALL &&
@@ -2029,8 +2111,7 @@
 	if (!PageDirty(page)) {
 		__set_page_dirty_nobuffers(page);
 		inc_page_count(F2FS_P_SB(page), F2FS_DIRTY_NODES);
-		f2fs_set_page_private(page, 0);
-		f2fs_trace_pid(page);
+		set_page_private_reference(page);
 		return 1;
 	}
 	return 0;
@@ -2046,7 +2127,7 @@
 	.invalidatepage	= f2fs_invalidate_page,
 	.releasepage	= f2fs_release_page,
 #ifdef CONFIG_MIGRATION
-	.migratepage    = f2fs_migrate_page,
+	.migratepage	= f2fs_migrate_page,
 #endif
 };
 
@@ -2057,18 +2138,16 @@
 }
 
 static int __insert_free_nid(struct f2fs_sb_info *sbi,
-			struct free_nid *i, enum nid_state state)
+				struct free_nid *i)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
-
 	int err = radix_tree_insert(&nm_i->free_nid_root, i->nid, i);
+
 	if (err)
 		return err;
 
-	f2fs_bug_on(sbi, state != i->state);
-	nm_i->nid_cnt[state]++;
-	if (state == FREE_NID)
-		list_add_tail(&i->list, &nm_i->free_nid_list);
+	nm_i->nid_cnt[FREE_NID]++;
+	list_add_tail(&i->list, &nm_i->free_nid_list);
 	return 0;
 }
 
@@ -2190,7 +2269,7 @@
 		}
 	}
 	ret = true;
-	err = __insert_free_nid(sbi, i, FREE_NID);
+	err = __insert_free_nid(sbi, i);
 err_out:
 	if (update) {
 		update_free_nid_bitmap(sbi, nid, ret, build);
@@ -2494,7 +2573,6 @@
 int f2fs_try_to_free_nids(struct f2fs_sb_info *sbi, int nr_shrink)
 {
 	struct f2fs_nm_info *nm_i = NM_I(sbi);
-	struct free_nid *i, *next;
 	int nr = nr_shrink;
 
 	if (nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
@@ -2503,17 +2581,23 @@
 	if (!mutex_trylock(&nm_i->build_lock))
 		return 0;
 
-	spin_lock(&nm_i->nid_list_lock);
-	list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) {
-		if (nr_shrink <= 0 ||
-				nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
-			break;
+	while (nr_shrink && nm_i->nid_cnt[FREE_NID] > MAX_FREE_NIDS) {
+		struct free_nid *i, *next;
+		unsigned int batch = SHRINK_NID_BATCH_SIZE;
 
-		__remove_free_nid(sbi, i, FREE_NID);
-		kmem_cache_free(free_nid_slab, i);
-		nr_shrink--;
+		spin_lock(&nm_i->nid_list_lock);
+		list_for_each_entry_safe(i, next, &nm_i->free_nid_list, list) {
+			if (!nr_shrink || !batch ||
+				nm_i->nid_cnt[FREE_NID] <= MAX_FREE_NIDS)
+				break;
+			__remove_free_nid(sbi, i, FREE_NID);
+			kmem_cache_free(free_nid_slab, i);
+			nr_shrink--;
+			batch--;
+		}
+		spin_unlock(&nm_i->nid_list_lock);
 	}
-	spin_unlock(&nm_i->nid_list_lock);
+
 	mutex_unlock(&nm_i->build_lock);
 
 	return nr - nr_shrink;
@@ -2532,9 +2616,15 @@
 
 	ri = F2FS_INODE(page);
 	if (ri->i_inline & F2FS_INLINE_XATTR) {
-		set_inode_flag(inode, FI_INLINE_XATTR);
+		if (!f2fs_has_inline_xattr(inode)) {
+			set_inode_flag(inode, FI_INLINE_XATTR);
+			stat_inc_inline_xattr(inode);
+		}
 	} else {
-		clear_inode_flag(inode, FI_INLINE_XATTR);
+		if (f2fs_has_inline_xattr(inode)) {
+			stat_dec_inline_xattr(inode);
+			clear_inode_flag(inode, FI_INLINE_XATTR);
+		}
 		goto update_inode;
 	}
 
@@ -2613,7 +2703,7 @@
 retry:
 	ipage = f2fs_grab_cache_page(NODE_MAPPING(sbi), ino, false);
 	if (!ipage) {
-		congestion_wait(BLK_RW_ASYNC, HZ/50);
+		congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 		goto retry;
 	}
 
@@ -2628,7 +2718,7 @@
 	src = F2FS_INODE(page);
 	dst = F2FS_INODE(ipage);
 
-	memcpy(dst, src, (unsigned long)&src->i_ext - (unsigned long)src);
+	memcpy(dst, src, offsetof(struct f2fs_inode, i_ext));
 	dst->i_size = 0;
 	dst->i_blocks = cpu_to_le64(1);
 	dst->i_links = cpu_to_le32(1);
@@ -2917,6 +3007,7 @@
 	while ((found = __gang_lookup_nat_set(nm_i,
 					set_idx, SETVEC_SIZE, setvec))) {
 		unsigned idx;
+
 		set_idx = setvec[found - 1]->set + 1;
 		for (idx = 0; idx < found; idx++)
 			__adjust_nat_entry_set(setvec[idx], &sets,
@@ -3053,9 +3144,6 @@
 	nm_i->next_scan_nid = le32_to_cpu(sbi->ckpt->next_free_nid);
 	nm_i->bitmap_size = __bitmap_size(sbi, NAT_BITMAP);
 	version_bitmap = __bitmap_ptr(sbi, NAT_BITMAP);
-	if (!version_bitmap)
-		return -EFAULT;
-
 	nm_i->nat_bitmap = kmemdup(version_bitmap, nm_i->bitmap_size,
 					GFP_KERNEL);
 	if (!nm_i->nat_bitmap)
@@ -3205,27 +3293,27 @@
 	kvfree(nm_i->nat_bitmap_mir);
 #endif
 	sbi->nm_info = NULL;
-	kvfree(nm_i);
+	kfree(nm_i);
 }
 
 int __init f2fs_create_node_manager_caches(void)
 {
-	nat_entry_slab = f2fs_kmem_cache_create("nat_entry",
+	nat_entry_slab = f2fs_kmem_cache_create("f2fs_nat_entry",
 			sizeof(struct nat_entry));
 	if (!nat_entry_slab)
 		goto fail;
 
-	free_nid_slab = f2fs_kmem_cache_create("free_nid",
+	free_nid_slab = f2fs_kmem_cache_create("f2fs_free_nid",
 			sizeof(struct free_nid));
 	if (!free_nid_slab)
 		goto destroy_nat_entry;
 
-	nat_entry_set_slab = f2fs_kmem_cache_create("nat_entry_set",
+	nat_entry_set_slab = f2fs_kmem_cache_create("f2fs_nat_entry_set",
 			sizeof(struct nat_entry_set));
 	if (!nat_entry_set_slab)
 		goto destroy_free_nid;
 
-	fsync_node_entry_slab = f2fs_kmem_cache_create("fsync_node_entry",
+	fsync_node_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_node_entry",
 			sizeof(struct fsync_node_entry));
 	if (!fsync_node_entry_slab)
 		goto destroy_nat_entry_set;
diff --git a/fs/f2fs/node.h b/fs/f2fs/node.h
index 4a2e7ea..ff14a6e 100644
--- a/fs/f2fs/node.h
+++ b/fs/f2fs/node.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/node.h
  *
@@ -15,6 +15,9 @@
 #define FREE_NID_PAGES	8
 #define MAX_FREE_NIDS	(NAT_ENTRY_PER_BLOCK * FREE_NID_PAGES)
 
+/* size of free nid batch when shrinking */
+#define SHRINK_NID_BATCH_SIZE	8
+
 #define DEF_RA_NID_PAGES	0	/* # of nid pages to be readaheaded */
 
 /* maximum readahead size for node during getting data blocks */
@@ -35,6 +38,9 @@
 /* return value for read_node_page */
 #define LOCKED_PAGE	1
 
+/* check pinned file's alignment status of physical blocks */
+#define FILE_NOT_ALIGNED	1
+
 /* For flag in struct node_info */
 enum {
 	IS_CHECKPOINTED,	/* is it checkpointed before? */
@@ -144,6 +150,8 @@
 	INO_ENTRIES,	/* indicates inode entries */
 	EXTENT_CACHE,	/* indicates extent cache */
 	INMEM_PAGES,	/* indicates inmemory pages */
+	DISCARD_CACHE,	/* indicates memory of cached discard cmds */
+	COMPRESS_PAGE,	/* indicates memory of cached compressed pages */
 	BASE_CHECK,	/* check kernel status */
 };
 
@@ -385,20 +393,6 @@
  *  - Mark cold node blocks in their node footer
  *  - Mark cold data pages in page cache
  */
-static inline int is_cold_data(struct page *page)
-{
-	return PageChecked(page);
-}
-
-static inline void set_cold_data(struct page *page)
-{
-	SetPageChecked(page);
-}
-
-static inline void clear_cold_data(struct page *page)
-{
-	ClearPageChecked(page);
-}
 
 static inline int is_node(struct page *page, int type)
 {
@@ -410,21 +404,6 @@
 #define is_fsync_dnode(page)	is_node(page, FSYNC_BIT_SHIFT)
 #define is_dent_dnode(page)	is_node(page, DENT_BIT_SHIFT)
 
-static inline int is_inline_node(struct page *page)
-{
-	return PageChecked(page);
-}
-
-static inline void set_inline_node(struct page *page)
-{
-	SetPageChecked(page);
-}
-
-static inline void clear_inline_node(struct page *page)
-{
-	ClearPageChecked(page);
-}
-
 static inline void set_cold_node(struct page *page, bool is_dir)
 {
 	struct f2fs_node *rn = F2FS_NODE(page);
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 5f230e9..695eacf 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -5,6 +5,7 @@
  * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  *             http://www.samsung.com/
  */
+#include <asm/unaligned.h>
 #include <linux/fs.h>
 #include <linux/f2fs_fs.h>
 #include "f2fs.h"
@@ -44,6 +45,10 @@
 
 static struct kmem_cache *fsync_entry_slab;
 
+#ifdef CONFIG_UNICODE
+extern struct kmem_cache *f2fs_cf_name_slab;
+#endif
+
 bool f2fs_space_for_roll_forward(struct f2fs_sb_info *sbi)
 {
 	s64 nalloc = percpu_counter_sum_positive(&sbi->alloc_valid_block_count);
@@ -107,13 +112,60 @@
 	kmem_cache_free(fsync_entry_slab, entry);
 }
 
+static int init_recovered_filename(const struct inode *dir,
+				   struct f2fs_inode *raw_inode,
+				   struct f2fs_filename *fname,
+				   struct qstr *usr_fname)
+{
+	int err;
+
+	memset(fname, 0, sizeof(*fname));
+	fname->disk_name.len = le32_to_cpu(raw_inode->i_namelen);
+	fname->disk_name.name = raw_inode->i_name;
+
+	if (WARN_ON(fname->disk_name.len > F2FS_NAME_LEN))
+		return -ENAMETOOLONG;
+
+	if (!IS_ENCRYPTED(dir)) {
+		usr_fname->name = fname->disk_name.name;
+		usr_fname->len = fname->disk_name.len;
+		fname->usr_fname = usr_fname;
+	}
+
+	/* Compute the hash of the filename */
+	if (IS_ENCRYPTED(dir) && IS_CASEFOLDED(dir)) {
+		/*
+		 * In this case the hash isn't computable without the key, so it
+		 * was saved on-disk.
+		 */
+		if (fname->disk_name.len + sizeof(f2fs_hash_t) > F2FS_NAME_LEN)
+			return -EINVAL;
+		fname->hash = get_unaligned((f2fs_hash_t *)
+				&raw_inode->i_name[fname->disk_name.len]);
+	} else if (IS_CASEFOLDED(dir)) {
+		err = f2fs_init_casefolded_name(dir, fname);
+		if (err)
+			return err;
+		f2fs_hash_filename(dir, fname);
+#ifdef CONFIG_UNICODE
+		/* Case-sensitive match is fine for recovery */
+		kmem_cache_free(f2fs_cf_name_slab, fname->cf_name.name);
+		fname->cf_name.name = NULL;
+#endif
+	} else {
+		f2fs_hash_filename(dir, fname);
+	}
+	return 0;
+}
+
 static int recover_dentry(struct inode *inode, struct page *ipage,
 						struct list_head *dir_list)
 {
 	struct f2fs_inode *raw_inode = F2FS_INODE(ipage);
 	nid_t pino = le32_to_cpu(raw_inode->i_pino);
 	struct f2fs_dir_entry *de;
-	struct fscrypt_name fname;
+	struct f2fs_filename fname;
+	struct qstr usr_fname;
 	struct page *page;
 	struct inode *dir, *einode;
 	struct fsync_inode_entry *entry;
@@ -132,16 +184,9 @@
 	}
 
 	dir = entry->inode;
-
-	memset(&fname, 0, sizeof(struct fscrypt_name));
-	fname.disk_name.len = le32_to_cpu(raw_inode->i_namelen);
-	fname.disk_name.name = raw_inode->i_name;
-
-	if (unlikely(fname.disk_name.len > F2FS_NAME_LEN)) {
-		WARN_ON(1);
-		err = -ENAMETOOLONG;
+	err = init_recovered_filename(dir, raw_inode, &fname, &usr_fname);
+	if (err)
 		goto out;
-	}
 retry:
 	de = __f2fs_find_entry(dir, &fname, &page);
 	if (de && inode->i_ino == le32_to_cpu(de->ino))
@@ -417,6 +462,7 @@
 	/* Get the previous summary */
 	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
+
 		if (curseg->segno == segno) {
 			sum = curseg->sum_blk->entries[blkoff];
 			goto got_it;
@@ -496,8 +542,7 @@
 	return 0;
 
 truncate_out:
-	if (datablock_addr(tdn.inode, tdn.node_page,
-					tdn.ofs_in_node) == blkaddr)
+	if (f2fs_data_blkaddr(&tdn) == blkaddr)
 		f2fs_truncate_data_blocks_range(&tdn, 1);
 	if (dn->inode->i_ino == nid && !dn->inode_page_locked)
 		unlock_page(dn->inode_page);
@@ -541,7 +586,7 @@
 	err = f2fs_get_dnode_of_data(&dn, start, ALLOC_NODE);
 	if (err) {
 		if (err == -ENOMEM) {
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto retry_dn;
 		}
 		goto out;
@@ -566,8 +611,8 @@
 	for (; start < end; start++, dn.ofs_in_node++) {
 		block_t src, dest;
 
-		src = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
-		dest = datablock_addr(dn.inode, page, dn.ofs_in_node);
+		src = f2fs_data_blkaddr(&dn);
+		dest = data_blkaddr(dn.inode, page, dn.ofs_in_node);
 
 		if (__is_valid_data_blkaddr(src) &&
 			!f2fs_is_valid_blkaddr(sbi, src, META_POR)) {
@@ -624,7 +669,8 @@
 			err = check_index_in_prev_nodes(sbi, dest, &dn);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					goto retry_prev;
 				}
 				goto err;
@@ -729,6 +775,7 @@
 	int ret = 0;
 	unsigned long s_flags = sbi->sb->s_flags;
 	bool need_writecp = false;
+	bool fix_curseg_write_pointer = false;
 #ifdef CONFIG_QUOTA
 	int quota_enabled;
 #endif
@@ -745,19 +792,12 @@
 	quota_enabled = f2fs_enable_quota_files(sbi, s_flags & SB_RDONLY);
 #endif
 
-	fsync_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_inode_entry",
-			sizeof(struct fsync_inode_entry));
-	if (!fsync_entry_slab) {
-		err = -ENOMEM;
-		goto out;
-	}
-
 	INIT_LIST_HEAD(&inode_list);
 	INIT_LIST_HEAD(&tmp_inode_list);
 	INIT_LIST_HEAD(&dir_list);
 
 	/* prevent checkpoint */
-	mutex_lock(&sbi->cp_mutex);
+	down_write(&sbi->cp_global_sem);
 
 	/* step #1: find fsynced inode numbers */
 	err = find_fsync_dnodes(sbi, &inode_list, check_only);
@@ -780,6 +820,8 @@
 		sbi->sb->s_flags = s_flags;
 	}
 skip:
+	fix_curseg_write_pointer = !check_only || list_empty(&inode_list);
+
 	destroy_fsync_dnodes(&inode_list, err);
 	destroy_fsync_dnodes(&tmp_inode_list, err);
 
@@ -790,10 +832,23 @@
 	if (err) {
 		truncate_inode_pages_final(NODE_MAPPING(sbi));
 		truncate_inode_pages_final(META_MAPPING(sbi));
-	} else {
-		clear_sbi_flag(sbi, SBI_POR_DOING);
 	}
-	mutex_unlock(&sbi->cp_mutex);
+
+	/*
+	 * If fsync data succeeds or there is no fsync data to recover,
+	 * and the f2fs is not read only, check and fix zoned block devices'
+	 * write pointer consistency.
+	 */
+	if (!err && fix_curseg_write_pointer && !f2fs_readonly(sbi->sb) &&
+			f2fs_sb_has_blkzoned(sbi)) {
+		err = f2fs_fix_curseg_write_pointer(sbi);
+		ret = err;
+	}
+
+	if (!err)
+		clear_sbi_flag(sbi, SBI_POR_DOING);
+
+	up_write(&sbi->cp_global_sem);
 
 	/* let's drop all the directory inodes for clean checkpoint */
 	destroy_fsync_dnodes(&dir_list, err);
@@ -809,8 +864,6 @@
 		}
 	}
 
-	kmem_cache_destroy(fsync_entry_slab);
-out:
 #ifdef CONFIG_QUOTA
 	/* Turn quotas off */
 	if (quota_enabled)
@@ -818,5 +871,19 @@
 #endif
 	sbi->sb->s_flags = s_flags; /* Restore SB_RDONLY status */
 
-	return ret ? ret: err;
+	return ret ? ret : err;
+}
+
+int __init f2fs_create_recovery_cache(void)
+{
+	fsync_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_inode_entry",
+					sizeof(struct fsync_inode_entry));
+	if (!fsync_entry_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+void f2fs_destroy_recovery_cache(void)
+{
+	kmem_cache_destroy(fsync_entry_slab);
 }
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 78c54bb7..efc042f 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -20,7 +20,6 @@
 #include "segment.h"
 #include "node.h"
 #include "gc.h"
-#include "trace.h"
 #include <trace/events/f2fs.h>
 
 #define __reverse_ffz(x) __reverse_ffs(~(x))
@@ -172,9 +171,9 @@
 	int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
 	int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
 
-	if (test_opt(sbi, LFS))
+	if (f2fs_lfs_mode(sbi))
 		return false;
-	if (sbi->gc_mode == GC_URGENT)
+	if (sbi->gc_mode == GC_URGENT_HIGH)
 		return true;
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		return true;
@@ -187,9 +186,7 @@
 {
 	struct inmem_pages *new;
 
-	f2fs_trace_pid(page);
-
-	f2fs_set_page_private(page, (unsigned long)ATOMIC_WRITTEN_PAGE);
+	set_page_private_atomic(page);
 
 	new = f2fs_kmem_cache_alloc(inmem_entry_slab, GFP_NOFS);
 
@@ -245,7 +242,8 @@
 								LOOKUP_NODE);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					cond_resched();
 					goto retry;
 				}
@@ -271,9 +269,10 @@
 		/* we don't need to invalidate this in the sccessful status */
 		if (drop || recover) {
 			ClearPageUptodate(page);
-			clear_cold_data(page);
+			clear_page_private_gcing(page);
 		}
-		f2fs_clear_page_private(page);
+		detach_page_private(page);
+		set_page_private(page, 0);
 		f2fs_put_page(page, 1);
 
 		list_del(&cur->list);
@@ -312,7 +311,7 @@
 skip:
 		iput(inode);
 	}
-	congestion_wait(BLK_RW_ASYNC, HZ/50);
+	congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 	cond_resched();
 	if (gc_failure) {
 		if (++looped >= count)
@@ -326,24 +325,27 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	struct f2fs_inode_info *fi = F2FS_I(inode);
 
-	while (!list_empty(&fi->inmem_pages)) {
+	do {
 		mutex_lock(&fi->inmem_lock);
+		if (list_empty(&fi->inmem_pages)) {
+			fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0;
+
+			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]);
+
+			mutex_unlock(&fi->inmem_lock);
+			break;
+		}
 		__revoke_inmem_pages(inode, &fi->inmem_pages,
 						true, false, true);
 		mutex_unlock(&fi->inmem_lock);
-	}
-
-	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]);
+	} while (1);
 }
 
 void f2fs_drop_inmem_page(struct inode *inode, struct page *page)
@@ -353,7 +355,7 @@
 	struct list_head *head = &fi->inmem_pages;
 	struct inmem_pages *cur = NULL;
 
-	f2fs_bug_on(sbi, !IS_ATOMIC_WRITTEN_PAGE(page));
+	f2fs_bug_on(sbi, !page_private_atomic(page));
 
 	mutex_lock(&fi->inmem_lock);
 	list_for_each_entry(cur, head, list) {
@@ -369,9 +371,12 @@
 	kmem_cache_free(inmem_entry_slab, cur);
 
 	ClearPageUptodate(page);
-	f2fs_clear_page_private(page);
+	clear_page_private_atomic(page);
 	f2fs_put_page(page, 0);
 
+	detach_page_private(page);
+	set_page_private(page, 0);
+
 	trace_f2fs_commit_inmem_page(page, INMEM_INVALIDATE);
 }
 
@@ -416,7 +421,8 @@
 			err = f2fs_do_write_data_page(&fio);
 			if (err) {
 				if (err == -ENOMEM) {
-					congestion_wait(BLK_RW_ASYNC, HZ/50);
+					congestion_wait(BLK_RW_ASYNC,
+							DEFAULT_IO_TIMEOUT);
 					cond_resched();
 					goto retry;
 				}
@@ -495,7 +501,7 @@
 
 	/* balance_fs_bg is able to be pending */
 	if (need && excess_cached_nats(sbi))
-		f2fs_balance_fs_bg(sbi);
+		f2fs_balance_fs_bg(sbi, false);
 
 	if (!f2fs_is_checkpoint_ready(sbi))
 		return;
@@ -505,12 +511,23 @@
 	 * dir/node pages without enough free segments.
 	 */
 	if (has_not_enough_free_secs(sbi, 0, 0)) {
-		mutex_lock(&sbi->gc_mutex);
-		f2fs_gc(sbi, false, false, NULL_SEGNO);
+		if (test_opt(sbi, GC_MERGE) && sbi->gc_thread &&
+					sbi->gc_thread->f2fs_gc_task) {
+			DEFINE_WAIT(wait);
+
+			prepare_to_wait(&sbi->gc_thread->fggc_wq, &wait,
+						TASK_UNINTERRUPTIBLE);
+			wake_up(&sbi->gc_thread->gc_wait_queue_head);
+			io_schedule();
+			finish_wait(&sbi->gc_thread->fggc_wq, &wait);
+		} else {
+			down_write(&sbi->gc_lock);
+			f2fs_gc(sbi, false, false, false, NULL_SEGNO);
+		}
 	}
 }
 
-void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi)
+void f2fs_balance_fs_bg(struct f2fs_sb_info *sbi, bool from_bg)
 {
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		return;
@@ -528,47 +545,44 @@
 	else
 		f2fs_build_free_nids(sbi, false, false);
 
-	if (!is_idle(sbi, REQ_TIME) &&
-		(!excess_dirty_nats(sbi) && !excess_dirty_nodes(sbi)))
+	if (excess_dirty_nats(sbi) || excess_dirty_nodes(sbi) ||
+		excess_prefree_segs(sbi))
+		goto do_sync;
+
+	/* there is background inflight IO or foreground operation recently */
+	if (is_inflight_io(sbi, REQ_TIME) ||
+		(!f2fs_time_over(sbi, REQ_TIME) && rwsem_is_locked(&sbi->cp_rwsem)))
 		return;
 
+	/* exceed periodical checkpoint timeout threshold */
+	if (f2fs_time_over(sbi, CP_TIME))
+		goto do_sync;
+
 	/* checkpoint is the only way to shrink partial cached entries */
-	if (!f2fs_available_free_memory(sbi, NAT_ENTRIES) ||
-			!f2fs_available_free_memory(sbi, INO_ENTRIES) ||
-			excess_prefree_segs(sbi) ||
-			excess_dirty_nats(sbi) ||
-			excess_dirty_nodes(sbi) ||
-			f2fs_time_over(sbi, CP_TIME)) {
-		if (test_opt(sbi, DATA_FLUSH)) {
-			struct blk_plug plug;
+	if (f2fs_available_free_memory(sbi, NAT_ENTRIES) ||
+		f2fs_available_free_memory(sbi, INO_ENTRIES))
+		return;
 
-			mutex_lock(&sbi->flush_lock);
+do_sync:
+	if (test_opt(sbi, DATA_FLUSH) && from_bg) {
+		struct blk_plug plug;
 
-			blk_start_plug(&plug);
-			f2fs_sync_dirty_inodes(sbi, FILE_INODE);
-			blk_finish_plug(&plug);
+		mutex_lock(&sbi->flush_lock);
 
-			mutex_unlock(&sbi->flush_lock);
-		}
-		f2fs_sync_fs(sbi->sb, true);
-		stat_inc_bg_cp_count(sbi->stat_info);
+		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);
 }
 
 static int __submit_flush_wait(struct f2fs_sb_info *sbi,
 				struct block_device *bdev)
 {
-	struct bio *bio;
-	int ret;
-
-	bio = f2fs_bio_alloc(sbi, 0, false);
-	if (!bio)
-		return -ENOMEM;
-
-	bio->bi_opf = REQ_OP_WRITE | REQ_SYNC | REQ_PREFLUSH;
-	bio_set_dev(bio, bdev);
-	ret = submit_bio_wait(bio);
-	bio_put(bio);
+	int ret = blkdev_issue_flush(bdev, GFP_NOFS, NULL);
 
 	trace_f2fs_issue_flush(bdev, test_opt(sbi, NOBARRIER),
 				test_opt(sbi, FLUSH_MERGE), ret);
@@ -602,8 +616,6 @@
 	if (kthread_should_stop())
 		return 0;
 
-	sb_start_intwrite(sbi->sb);
-
 	if (!llist_empty(&fcc->issue_list)) {
 		struct flush_cmd *cmd, *next;
 		int ret;
@@ -624,8 +636,6 @@
 		fcc->dispatch_list = NULL;
 	}
 
-	sb_end_intwrite(sbi->sb);
-
 	wait_event_interruptible(*q,
 		kthread_should_stop() || !llist_empty(&fcc->issue_list));
 	goto repeat;
@@ -662,7 +672,11 @@
 
 	llist_add(&cmd.llnode, &fcc->issue_list);
 
-	/* update issue_list before we wake up issue_flush thread */
+	/*
+	 * update issue_list before we wake up issue_flush thread, this
+	 * smp_mb() pairs with another barrier in ___wait_event(), see
+	 * more details in comments of waitqueue_active().
+	 */
 	smp_mb();
 
 	if (waitqueue_active(&fcc->flush_wait_queue))
@@ -727,7 +741,7 @@
 				"f2fs_flush-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(fcc->f2fs_issue_flush)) {
 		err = PTR_ERR(fcc->f2fs_issue_flush);
-		kvfree(fcc);
+		kfree(fcc);
 		SM_I(sbi)->fcc_info = NULL;
 		return err;
 	}
@@ -746,7 +760,7 @@
 		kthread_stop(flush_thread);
 	}
 	if (free) {
-		kvfree(fcc);
+		kfree(fcc);
 		SM_I(sbi)->fcc_info = NULL;
 	}
 }
@@ -758,6 +772,9 @@
 	if (!f2fs_is_multi_device(sbi))
 		return 0;
 
+	if (test_opt(sbi, NOBARRIER))
+		return 0;
+
 	for (i = 1; i < sbi->s_ndevs; i++) {
 		if (!f2fs_test_bit(i, (char *)&sbi->dirty_device))
 			continue;
@@ -795,6 +812,18 @@
 		}
 		if (!test_and_set_bit(segno, dirty_i->dirty_segmap[t]))
 			dirty_i->nr_dirty[t]++;
+
+		if (__is_large_section(sbi)) {
+			unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+			block_t valid_blocks =
+				get_valid_blocks(sbi, segno, true);
+
+			f2fs_bug_on(sbi, unlikely(!valid_blocks ||
+					valid_blocks == BLKS_PER_SEC(sbi)));
+
+			if (!IS_CURSEC(sbi, secno))
+				set_bit(secno, dirty_i->dirty_secmap);
+		}
 	}
 }
 
@@ -802,6 +831,7 @@
 		enum dirty_type dirty_type)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
+	block_t valid_blocks;
 
 	if (test_and_clear_bit(segno, dirty_i->dirty_segmap[dirty_type]))
 		dirty_i->nr_dirty[dirty_type]--;
@@ -813,13 +843,26 @@
 		if (test_and_clear_bit(segno, dirty_i->dirty_segmap[t]))
 			dirty_i->nr_dirty[t]--;
 
-		if (get_valid_blocks(sbi, segno, true) == 0) {
+		valid_blocks = get_valid_blocks(sbi, segno, true);
+		if (valid_blocks == 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
 		}
+		if (__is_large_section(sbi)) {
+			unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
+
+			if (!valid_blocks ||
+					valid_blocks == BLKS_PER_SEC(sbi)) {
+				clear_bit(secno, dirty_i->dirty_secmap);
+				return;
+			}
+
+			if (!IS_CURSEC(sbi, secno))
+				set_bit(secno, dirty_i->dirty_secmap);
+		}
 	}
 }
 
@@ -832,20 +875,22 @@
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	unsigned short valid_blocks, ckpt_valid_blocks;
+	unsigned int usable_blocks;
 
 	if (segno == NULL_SEGNO || IS_CURSEG(sbi, segno))
 		return;
 
+	usable_blocks = f2fs_usable_blks_in_seg(sbi, segno);
 	mutex_lock(&dirty_i->seglist_lock);
 
 	valid_blocks = get_valid_blocks(sbi, segno, false);
-	ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno);
+	ckpt_valid_blocks = get_ckpt_valid_blocks(sbi, segno, false);
 
 	if (valid_blocks == 0 && (!is_sbi_flag_set(sbi, SBI_CP_DISABLED) ||
-				ckpt_valid_blocks == sbi->blocks_per_seg)) {
+		ckpt_valid_blocks == usable_blocks)) {
 		__locate_dirty_segment(sbi, segno, PRE);
 		__remove_dirty_segment(sbi, segno, DIRTY);
-	} else if (valid_blocks < sbi->blocks_per_seg) {
+	} else if (valid_blocks < usable_blocks) {
 		__locate_dirty_segment(sbi, segno, DIRTY);
 	} else {
 		/* Recovery routine with SSR needs this */
@@ -888,9 +933,11 @@
 	for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
 		se = get_seg_entry(sbi, segno);
 		if (IS_NODESEG(se->type))
-			holes[NODE] += sbi->blocks_per_seg - se->valid_blocks;
+			holes[NODE] += f2fs_usable_blks_in_seg(sbi, segno) -
+							se->valid_blocks;
 		else
-			holes[DATA] += sbi->blocks_per_seg - se->valid_blocks;
+			holes[DATA] += f2fs_usable_blks_in_seg(sbi, segno) -
+							se->valid_blocks;
 	}
 	mutex_unlock(&dirty_i->seglist_lock);
 
@@ -922,7 +969,7 @@
 	for_each_set_bit(segno, dirty_i->dirty_segmap[DIRTY], MAIN_SEGS(sbi)) {
 		if (get_valid_blocks(sbi, segno, false))
 			continue;
-		if (get_ckpt_valid_blocks(sbi, segno))
+		if (get_ckpt_valid_blocks(sbi, segno, false))
 			continue;
 		mutex_unlock(&dirty_i->seglist_lock);
 		return segno;
@@ -1028,9 +1075,9 @@
 	struct discard_cmd *dc = (struct discard_cmd *)bio->bi_private;
 	unsigned long flags;
 
-	dc->error = blk_status_to_errno(bio->bi_status);
-
 	spin_lock_irqsave(&dc->lock, flags);
+	if (!dc->error)
+		dc->error = blk_status_to_errno(bio->bi_status);
 	dc->bio_ref--;
 	if (!dc->bio_ref && dc->state == D_SUBMIT) {
 		dc->state = D_DONE;
@@ -1071,6 +1118,8 @@
 				struct discard_policy *dpolicy,
 				int discard_type, unsigned int granularity)
 {
+	struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+
 	/* common policy */
 	dpolicy->type = discard_type;
 	dpolicy->sync = true;
@@ -1079,7 +1128,7 @@
 
 	dpolicy->max_requests = DEF_MAX_DISCARD_REQUEST;
 	dpolicy->io_aware_gran = MAX_PLIST_NUM;
-	dpolicy->timeout = 0;
+	dpolicy->timeout = false;
 
 	if (discard_type == DPOLICY_BG) {
 		dpolicy->min_interval = DEF_MIN_DISCARD_ISSUE_TIME;
@@ -1090,7 +1139,9 @@
 		dpolicy->ordered = true;
 		if (utilization(sbi) > DEF_DISCARD_URGENT_UTIL) {
 			dpolicy->granularity = 1;
-			dpolicy->max_interval = DEF_MIN_DISCARD_ISSUE_TIME;
+			if (atomic_read(&dcc->discard_cmd_cnt))
+				dpolicy->max_interval =
+					DEF_MIN_DISCARD_ISSUE_TIME;
 		}
 	} else if (discard_type == DPOLICY_FORCE) {
 		dpolicy->min_interval = DEF_MIN_DISCARD_ISSUE_TIME;
@@ -1100,10 +1151,10 @@
 	} else if (discard_type == DPOLICY_FSTRIM) {
 		dpolicy->io_aware = false;
 	} else if (discard_type == DPOLICY_UMOUNT) {
-		dpolicy->max_requests = UINT_MAX;
 		dpolicy->io_aware = false;
 		/* we need to issue all to keep CP_TRIMMED_FLAG */
 		dpolicy->granularity = 1;
+		dpolicy->timeout = true;
 	}
 }
 
@@ -1213,12 +1264,14 @@
 		len = total_len;
 	}
 
-	if (!err && len)
+	if (!err && len) {
+		dcc->undiscard_blks -= len;
 		__update_discard_tree_range(sbi, bdev, lstart, start, len);
+	}
 	return err;
 }
 
-static struct discard_cmd *__insert_discard_tree(struct f2fs_sb_info *sbi,
+static void __insert_discard_tree(struct f2fs_sb_info *sbi,
 				struct block_device *bdev, block_t lstart,
 				block_t start, block_t len,
 				struct rb_node **insert_p,
@@ -1227,7 +1280,6 @@
 	struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
 	struct rb_node **p;
 	struct rb_node *parent = NULL;
-	struct discard_cmd *dc = NULL;
 	bool leftmost = true;
 
 	if (insert_p && insert_parent) {
@@ -1239,12 +1291,8 @@
 	p = f2fs_lookup_rb_tree_for_insert(sbi, &dcc->root, &parent,
 							lstart, &leftmost);
 do_insert:
-	dc = __attach_discard_cmd(sbi, bdev, lstart, start, len, parent,
+	__attach_discard_cmd(sbi, bdev, lstart, start, len, parent,
 								p, leftmost);
-	if (!dc)
-		return NULL;
-
-	return dc;
 }
 
 static void __relocate_discard_cmd(struct discard_cmd_control *dcc,
@@ -1461,6 +1509,8 @@
 
 	return issued;
 }
+static unsigned int __wait_all_discard_cmd(struct f2fs_sb_info *sbi,
+					struct discard_policy *dpolicy);
 
 static int __issue_discard_cmd(struct f2fs_sb_info *sbi,
 					struct discard_policy *dpolicy)
@@ -1469,15 +1519,17 @@
 	struct list_head *pend_list;
 	struct discard_cmd *dc, *tmp;
 	struct blk_plug plug;
-	int i, issued = 0;
+	int i, issued;
 	bool io_interrupted = false;
 
-	if (dpolicy->timeout != 0)
-		f2fs_update_time(sbi, dpolicy->timeout);
+	if (dpolicy->timeout)
+		f2fs_update_time(sbi, UMOUNT_DISCARD_TIMEOUT);
 
+retry:
+	issued = 0;
 	for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
-		if (dpolicy->timeout != 0 &&
-				f2fs_time_over(sbi, dpolicy->timeout))
+		if (dpolicy->timeout &&
+				f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
 			break;
 
 		if (i + 1 < dpolicy->granularity)
@@ -1493,13 +1545,13 @@
 			goto next;
 		if (unlikely(dcc->rbtree_check))
 			f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
-								&dcc->root));
+							&dcc->root, false));
 		blk_start_plug(&plug);
 		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))
+			if (dpolicy->timeout &&
+				f2fs_time_over(sbi, UMOUNT_DISCARD_TIMEOUT))
 				break;
 
 			if (dpolicy->io_aware && i < dpolicy->io_aware_gran &&
@@ -1521,6 +1573,11 @@
 			break;
 	}
 
+	if (dpolicy->type == DPOLICY_UMOUNT && issued) {
+		__wait_all_discard_cmd(sbi, dpolicy);
+		goto retry;
+	}
+
 	if (!issued && io_interrupted)
 		issued = -1;
 
@@ -1678,7 +1735,6 @@
 
 	__init_discard_policy(sbi, &dpolicy, DPOLICY_UMOUNT,
 					dcc->discard_granularity);
-	dpolicy.timeout = UMOUNT_DISCARD_TIMEOUT;
 	__issue_discard_cmd(sbi, &dpolicy);
 	dropped = __drop_discard_cmd(sbi);
 
@@ -1701,8 +1757,15 @@
 	set_freezable();
 
 	do {
-		__init_discard_policy(sbi, &dpolicy, DPOLICY_BG,
-					dcc->discard_granularity);
+		if (sbi->gc_mode == GC_URGENT_HIGH ||
+			!f2fs_available_free_memory(sbi, DISCARD_CACHE))
+			__init_discard_policy(sbi, &dpolicy, DPOLICY_FORCE, 1);
+		else
+			__init_discard_policy(sbi, &dpolicy, DPOLICY_BG,
+						dcc->discard_granularity);
+
+		if (!atomic_read(&dcc->discard_cmd_cnt))
+		       wait_ms = dpolicy.max_interval;
 
 		wait_event_interruptible_timeout(*q,
 				kthread_should_stop() || freezing(current) ||
@@ -1726,9 +1789,8 @@
 			wait_ms = dpolicy.max_interval;
 			continue;
 		}
-
-		if (sbi->gc_mode == GC_URGENT)
-			__init_discard_policy(sbi, &dpolicy, DPOLICY_FORCE, 1);
+		if (!atomic_read(&dcc->discard_cmd_cnt))
+			continue;
 
 		sb_start_intwrite(sbi->sb);
 
@@ -1736,7 +1798,7 @@
 		if (issued > 0) {
 			__wait_all_discard_cmd(sbi, &dpolicy);
 			wait_ms = dpolicy.min_interval;
-		} else if (issued == -1){
+		} else if (issued == -1) {
 			wait_ms = f2fs_time_to_wait(sbi, DISCARD_TIME);
 			if (!wait_ms)
 				wait_ms = dpolicy.mid_interval;
@@ -1781,7 +1843,8 @@
 			return -EIO;
 		}
 		trace_f2fs_issue_reset_zone(bdev, blkstart);
-		return blkdev_reset_zones(bdev, sector, nr_sects, GFP_NOFS);
+		return blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
+					sector, nr_sects, GFP_NOFS);
 	}
 
 	/* For conventional zones, use regular discard if supported */
@@ -1925,7 +1988,7 @@
 
 	mutex_lock(&dirty_i->seglist_lock);
 	for_each_set_bit(segno, dirty_i->dirty_segmap[PRE], MAIN_SEGS(sbi))
-		__set_test_and_free(sbi, segno);
+		__set_test_and_free(sbi, segno, false);
 	mutex_unlock(&dirty_i->seglist_lock);
 }
 
@@ -1940,7 +2003,7 @@
 	unsigned int start = 0, end = -1;
 	unsigned int secno, start_segno;
 	bool force = (cpc->reason & CP_DISCARD);
-	bool need_align = test_opt(sbi, LFS) && __is_large_section(sbi);
+	bool need_align = f2fs_lfs_mode(sbi) && __is_large_section(sbi);
 
 	mutex_lock(&dirty_i->seglist_lock);
 
@@ -1972,7 +2035,7 @@
 					(end - 1) <= cpc->trim_end)
 				continue;
 
-		if (!test_opt(sbi, LFS) || !__is_large_section(sbi)) {
+		if (!f2fs_lfs_mode(sbi) || !__is_large_section(sbi)) {
 			f2fs_issue_discard(sbi, START_BLOCK(sbi, start),
 				(end - start) << sbi->log_blocks_per_seg);
 			continue;
@@ -2068,7 +2131,7 @@
 				"f2fs_discard-%u:%u", MAJOR(dev), MINOR(dev));
 	if (IS_ERR(dcc->f2fs_issue_discard)) {
 		err = PTR_ERR(dcc->f2fs_issue_discard);
-		kvfree(dcc);
+		kfree(dcc);
 		SM_I(sbi)->dcc_info = NULL;
 		return err;
 	}
@@ -2092,7 +2155,7 @@
 	if (unlikely(atomic_read(&dcc->discard_cmd_cnt)))
 		f2fs_issue_discard_timeout(sbi);
 
-	kvfree(dcc);
+	kfree(dcc);
 	SM_I(sbi)->dcc_info = NULL;
 }
 
@@ -2112,11 +2175,45 @@
 					unsigned int segno, int modified)
 {
 	struct seg_entry *se = get_seg_entry(sbi, segno);
+
 	se->type = type;
 	if (modified)
 		__mark_sit_entry_dirty(sbi, segno);
 }
 
+static inline unsigned long long get_segment_mtime(struct f2fs_sb_info *sbi,
+								block_t blkaddr)
+{
+	unsigned int segno = GET_SEGNO(sbi, blkaddr);
+
+	if (segno == NULL_SEGNO)
+		return 0;
+	return get_seg_entry(sbi, segno)->mtime;
+}
+
+static void update_segment_mtime(struct f2fs_sb_info *sbi, block_t blkaddr,
+						unsigned long long old_mtime)
+{
+	struct seg_entry *se;
+	unsigned int segno = GET_SEGNO(sbi, blkaddr);
+	unsigned long long ctime = get_mtime(sbi, false);
+	unsigned long long mtime = old_mtime ? old_mtime : ctime;
+
+	if (segno == NULL_SEGNO)
+		return;
+
+	se = get_seg_entry(sbi, segno);
+
+	if (!se->mtime)
+		se->mtime = mtime;
+	else
+		se->mtime = div_u64(se->mtime * se->valid_blocks + mtime,
+						se->valid_blocks + 1);
+
+	if (ctime > SIT_I(sbi)->max_mtime)
+		SIT_I(sbi)->max_mtime = ctime;
+}
+
 static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
 {
 	struct seg_entry *se;
@@ -2133,13 +2230,10 @@
 	new_vblocks = se->valid_blocks + del;
 	offset = GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
 
-	f2fs_bug_on(sbi, (new_vblocks >> (sizeof(unsigned short) << 3) ||
-				(new_vblocks > sbi->blocks_per_seg)));
+	f2fs_bug_on(sbi, (new_vblocks < 0 ||
+			(new_vblocks > f2fs_usable_blks_in_seg(sbi, segno))));
 
 	se->valid_blocks = new_vblocks;
-	se->mtime = get_mtime(sbi, false);
-	if (se->mtime > SIT_I(sbi)->max_mtime)
-		SIT_I(sbi)->max_mtime = se->mtime;
 
 	/* Update valid block bitmap */
 	if (del > 0) {
@@ -2224,14 +2318,16 @@
 	struct sit_info *sit_i = SIT_I(sbi);
 
 	f2fs_bug_on(sbi, addr == NULL_ADDR);
-	if (addr == NEW_ADDR)
+	if (addr == NEW_ADDR || addr == COMPRESS_ADDR)
 		return;
 
 	invalidate_mapping_pages(META_MAPPING(sbi), addr, addr);
+	f2fs_invalidate_compress_page(sbi, addr);
 
 	/* add it into sit main buffer */
 	down_write(&sit_i->sentry_lock);
 
+	update_segment_mtime(sbi, addr, 0);
 	update_sit_entry(sbi, addr, -1);
 
 	/* add it into dirty seglist */
@@ -2272,6 +2368,7 @@
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	void *addr = curseg->sum_blk;
+
 	addr += curseg->next_blkoff * sizeof(struct f2fs_summary);
 	memcpy(addr, sum, sizeof(struct f2fs_summary));
 }
@@ -2358,9 +2455,9 @@
 	f2fs_put_page(page, 1);
 }
 
-static int is_next_segment_free(struct f2fs_sb_info *sbi, int type)
+static int is_next_segment_free(struct f2fs_sb_info *sbi,
+				struct curseg_info *curseg, int type)
 {
-	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	unsigned int segno = curseg->segno + 1;
 	struct free_segmap_info *free_i = FREE_I(sbi);
 
@@ -2464,7 +2561,9 @@
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	struct summary_footer *sum_footer;
+	unsigned short seg_type = curseg->seg_type;
 
+	curseg->inited = true;
 	curseg->segno = curseg->next_segno;
 	curseg->zone = GET_ZONE_FROM_SEG(sbi, curseg->segno);
 	curseg->next_blkoff = 0;
@@ -2472,24 +2571,36 @@
 
 	sum_footer = &(curseg->sum_blk->footer);
 	memset(sum_footer, 0, sizeof(struct summary_footer));
-	if (IS_DATASEG(type))
+
+	sanity_check_seg_type(sbi, seg_type);
+
+	if (IS_DATASEG(seg_type))
 		SET_SUM_TYPE(sum_footer, SUM_TYPE_DATA);
-	if (IS_NODESEG(type))
+	if (IS_NODESEG(seg_type))
 		SET_SUM_TYPE(sum_footer, SUM_TYPE_NODE);
-	__set_sit_entry_type(sbi, type, curseg->segno, modified);
+	__set_sit_entry_type(sbi, seg_type, curseg->segno, modified);
 }
 
 static unsigned int __get_next_segno(struct f2fs_sb_info *sbi, int type)
 {
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned short seg_type = curseg->seg_type;
+
+	sanity_check_seg_type(sbi, seg_type);
+
 	/* if segs_per_sec is large than 1, we need to keep original policy. */
 	if (__is_large_section(sbi))
-		return CURSEG_I(sbi, type)->segno;
+		return curseg->segno;
+
+	/* inmem log may not locate on any segment after mount */
+	if (!curseg->inited)
+		return 0;
 
 	if (unlikely(is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		return 0;
 
 	if (test_opt(sbi, NOHEAP) &&
-		(type == CURSEG_HOT_DATA || IS_NODESEG(type)))
+		(seg_type == CURSEG_HOT_DATA || IS_NODESEG(seg_type)))
 		return 0;
 
 	if (SIT_I(sbi)->last_victim[ALLOC_NEXT])
@@ -2499,7 +2610,7 @@
 	if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_REUSE)
 		return 0;
 
-	return CURSEG_I(sbi, type)->segno;
+	return curseg->segno;
 }
 
 /*
@@ -2509,12 +2620,14 @@
 static void new_curseg(struct f2fs_sb_info *sbi, int type, bool new_sec)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned short seg_type = curseg->seg_type;
 	unsigned int segno = curseg->segno;
 	int dir = ALLOC_LEFT;
 
-	write_sum_page(sbi, curseg->sum_blk,
+	if (curseg->inited)
+		write_sum_page(sbi, curseg->sum_blk,
 				GET_SUM_BLOCK(sbi, segno));
-	if (type == CURSEG_WARM_DATA || type == CURSEG_COLD_DATA)
+	if (seg_type == CURSEG_WARM_DATA || seg_type == CURSEG_COLD_DATA)
 		dir = ALLOC_RIGHT;
 
 	if (test_opt(sbi, NOHEAP))
@@ -2527,22 +2640,20 @@
 	curseg->alloc_type = LFS;
 }
 
-static void __next_free_blkoff(struct f2fs_sb_info *sbi,
-			struct curseg_info *seg, block_t start)
+static int __next_free_blkoff(struct f2fs_sb_info *sbi,
+					int segno, block_t start)
 {
-	struct seg_entry *se = get_seg_entry(sbi, seg->segno);
+	struct seg_entry *se = get_seg_entry(sbi, segno);
 	int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long);
 	unsigned long *target_map = SIT_I(sbi)->tmp_map;
 	unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map;
 	unsigned long *cur_map = (unsigned long *)se->cur_valid_map;
-	int i, pos;
+	int i;
 
 	for (i = 0; i < entries; i++)
 		target_map[i] = ckpt_map[i] | cur_map[i];
 
-	pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start);
-
-	seg->next_blkoff = pos;
+	return __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start);
 }
 
 /*
@@ -2554,16 +2665,23 @@
 				struct curseg_info *seg)
 {
 	if (seg->alloc_type == SSR)
-		__next_free_blkoff(sbi, seg, seg->next_blkoff + 1);
+		seg->next_blkoff =
+			__next_free_blkoff(sbi, seg->segno,
+						seg->next_blkoff + 1);
 	else
 		seg->next_blkoff++;
 }
 
+bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno)
+{
+	return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg;
+}
+
 /*
  * This function always allocates a used segment(from dirty seglist) by SSR
  * manner, so it should recover the existing segment information of valid blocks
  */
-static void change_curseg(struct f2fs_sb_info *sbi, int type)
+static void change_curseg(struct f2fs_sb_info *sbi, int type, bool flush)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
@@ -2571,8 +2689,10 @@
 	struct f2fs_summary_block *sum_node;
 	struct page *sum_page;
 
-	write_sum_page(sbi, curseg->sum_blk,
-				GET_SUM_BLOCK(sbi, curseg->segno));
+	if (flush)
+		write_sum_page(sbi, curseg->sum_blk,
+					GET_SUM_BLOCK(sbi, curseg->segno));
+
 	__set_test_and_inuse(sbi, new_segno);
 
 	mutex_lock(&dirty_i->seglist_lock);
@@ -2582,7 +2702,7 @@
 
 	reset_curseg(sbi, type, 1);
 	curseg->alloc_type = SSR;
-	__next_free_blkoff(sbi, curseg, 0);
+	curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0);
 
 	sum_page = f2fs_get_sum_page(sbi, new_segno);
 	if (IS_ERR(sum_page)) {
@@ -2595,23 +2715,129 @@
 	f2fs_put_page(sum_page, 1);
 }
 
-static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
+static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
+				int alloc_mode, unsigned long long age);
+
+static void get_atssr_segment(struct f2fs_sb_info *sbi, int type,
+					int target_type, int alloc_mode,
+					unsigned long long age)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	curseg->seg_type = target_type;
+
+	if (get_ssr_segment(sbi, type, alloc_mode, age)) {
+		struct seg_entry *se = get_seg_entry(sbi, curseg->next_segno);
+
+		curseg->seg_type = se->type;
+		change_curseg(sbi, type, true);
+	} else {
+		/* allocate cold segment by default */
+		curseg->seg_type = CURSEG_COLD_DATA;
+		new_curseg(sbi, type, true);
+	}
+	stat_inc_seg_type(sbi, curseg);
+}
+
+static void __f2fs_init_atgc_curseg(struct f2fs_sb_info *sbi)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC);
+
+	if (!sbi->am.atgc_enabled)
+		return;
+
+	down_read(&SM_I(sbi)->curseg_lock);
+
+	mutex_lock(&curseg->curseg_mutex);
+	down_write(&SIT_I(sbi)->sentry_lock);
+
+	get_atssr_segment(sbi, CURSEG_ALL_DATA_ATGC, CURSEG_COLD_DATA, SSR, 0);
+
+	up_write(&SIT_I(sbi)->sentry_lock);
+	mutex_unlock(&curseg->curseg_mutex);
+
+	up_read(&SM_I(sbi)->curseg_lock);
+
+}
+void f2fs_init_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_init_atgc_curseg(sbi);
+}
+
+static void __f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	mutex_lock(&curseg->curseg_mutex);
+	if (!curseg->inited)
+		goto out;
+
+	if (get_valid_blocks(sbi, curseg->segno, false)) {
+		write_sum_page(sbi, curseg->sum_blk,
+				GET_SUM_BLOCK(sbi, curseg->segno));
+	} else {
+		mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+		__set_test_and_free(sbi, curseg->segno, true);
+		mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
+	}
+out:
+	mutex_unlock(&curseg->curseg_mutex);
+}
+
+void f2fs_save_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_save_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
+
+	if (sbi->am.atgc_enabled)
+		__f2fs_save_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
+}
+
+static void __f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+
+	mutex_lock(&curseg->curseg_mutex);
+	if (!curseg->inited)
+		goto out;
+	if (get_valid_blocks(sbi, curseg->segno, false))
+		goto out;
+
+	mutex_lock(&DIRTY_I(sbi)->seglist_lock);
+	__set_test_and_inuse(sbi, curseg->segno);
+	mutex_unlock(&DIRTY_I(sbi)->seglist_lock);
+out:
+	mutex_unlock(&curseg->curseg_mutex);
+}
+
+void f2fs_restore_inmem_curseg(struct f2fs_sb_info *sbi)
+{
+	__f2fs_restore_inmem_curseg(sbi, CURSEG_COLD_DATA_PINNED);
+
+	if (sbi->am.atgc_enabled)
+		__f2fs_restore_inmem_curseg(sbi, CURSEG_ALL_DATA_ATGC);
+}
+
+static int get_ssr_segment(struct f2fs_sb_info *sbi, int type,
+				int alloc_mode, unsigned long long age)
 {
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
 	const struct victim_selection *v_ops = DIRTY_I(sbi)->v_ops;
 	unsigned segno = NULL_SEGNO;
+	unsigned short seg_type = curseg->seg_type;
 	int i, cnt;
 	bool reversed = false;
 
+	sanity_check_seg_type(sbi, seg_type);
+
 	/* f2fs_need_SSR() already forces to do this */
-	if (v_ops->get_victim(sbi, &segno, BG_GC, type, SSR)) {
+	if (!v_ops->get_victim(sbi, &segno, BG_GC, seg_type, alloc_mode, age)) {
 		curseg->next_segno = segno;
 		return 1;
 	}
 
 	/* For node segments, let's do SSR more intensively */
-	if (IS_NODESEG(type)) {
-		if (type >= CURSEG_WARM_NODE) {
+	if (IS_NODESEG(seg_type)) {
+		if (seg_type >= CURSEG_WARM_NODE) {
 			reversed = true;
 			i = CURSEG_COLD_NODE;
 		} else {
@@ -2619,7 +2845,7 @@
 		}
 		cnt = NR_CURSEG_NODE_TYPE;
 	} else {
-		if (type >= CURSEG_WARM_DATA) {
+		if (seg_type >= CURSEG_WARM_DATA) {
 			reversed = true;
 			i = CURSEG_COLD_DATA;
 		} else {
@@ -2629,9 +2855,9 @@
 	}
 
 	for (; cnt-- > 0; reversed ? i-- : i++) {
-		if (i == type)
+		if (i == seg_type)
 			continue;
-		if (v_ops->get_victim(sbi, &segno, BG_GC, i, SSR)) {
+		if (!v_ops->get_victim(sbi, &segno, BG_GC, i, alloc_mode, age)) {
 			curseg->next_segno = segno;
 			return 1;
 		}
@@ -2660,20 +2886,22 @@
 	if (force)
 		new_curseg(sbi, type, true);
 	else if (!is_set_ckpt_flags(sbi, CP_CRC_RECOVERY_FLAG) &&
-					type == CURSEG_WARM_NODE)
+					curseg->seg_type == CURSEG_WARM_NODE)
 		new_curseg(sbi, type, false);
-	else if (curseg->alloc_type == LFS && is_next_segment_free(sbi, type) &&
+	else if (curseg->alloc_type == LFS &&
+			is_next_segment_free(sbi, curseg, type) &&
 			likely(!is_sbi_flag_set(sbi, SBI_CP_DISABLED)))
 		new_curseg(sbi, type, false);
-	else if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type))
-		change_curseg(sbi, type);
+	else if (f2fs_need_SSR(sbi) &&
+			get_ssr_segment(sbi, type, SSR, 0))
+		change_curseg(sbi, type, true);
 	else
 		new_curseg(sbi, type, false);
 
 	stat_inc_seg_type(sbi, curseg);
 }
 
-void allocate_segment_for_resize(struct f2fs_sb_info *sbi, int type,
+void f2fs_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);
@@ -2687,8 +2915,8 @@
 	if (segno < start || segno > end)
 		goto unlock;
 
-	if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type))
-		change_curseg(sbi, type);
+	if (f2fs_need_SSR(sbi) && get_ssr_segment(sbi, type, SSR, 0))
+		change_curseg(sbi, type, true);
 	else
 		new_curseg(sbi, type, true);
 
@@ -2706,22 +2934,52 @@
 	up_read(&SM_I(sbi)->curseg_lock);
 }
 
+static void __allocate_new_segment(struct f2fs_sb_info *sbi, int type,
+						bool new_sec, bool force)
+{
+	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned int old_segno;
+
+	if (!curseg->inited)
+		goto alloc;
+
+	if (force || curseg->next_blkoff ||
+		get_valid_blocks(sbi, curseg->segno, new_sec))
+		goto alloc;
+
+	if (!get_ckpt_valid_blocks(sbi, curseg->segno, new_sec))
+		return;
+alloc:
+	old_segno = curseg->segno;
+	SIT_I(sbi)->s_ops->allocate_segment(sbi, type, true);
+	locate_dirty_segment(sbi, old_segno);
+}
+
+static void __allocate_new_section(struct f2fs_sb_info *sbi,
+						int type, bool force)
+{
+	__allocate_new_segment(sbi, type, true, force);
+}
+
+void f2fs_allocate_new_section(struct f2fs_sb_info *sbi, int type, bool force)
+{
+	down_read(&SM_I(sbi)->curseg_lock);
+	down_write(&SIT_I(sbi)->sentry_lock);
+	__allocate_new_section(sbi, type, force);
+	up_write(&SIT_I(sbi)->sentry_lock);
+	up_read(&SM_I(sbi)->curseg_lock);
+}
+
 void f2fs_allocate_new_segments(struct f2fs_sb_info *sbi)
 {
-	struct curseg_info *curseg;
-	unsigned int old_segno;
 	int i;
 
+	down_read(&SM_I(sbi)->curseg_lock);
 	down_write(&SIT_I(sbi)->sentry_lock);
-
-	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
-		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);
-	}
-
+	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++)
+		__allocate_new_segment(sbi, i, false, false);
 	up_write(&SIT_I(sbi)->sentry_lock);
+	up_read(&SM_I(sbi)->curseg_lock);
 }
 
 static const struct segment_allocation default_salloc_ops = {
@@ -2765,7 +3023,7 @@
 	mutex_lock(&dcc->cmd_lock);
 	if (unlikely(dcc->rbtree_check))
 		f2fs_bug_on(sbi, !f2fs_check_rb_tree_consistence(sbi,
-								&dcc->root));
+							&dcc->root, false));
 
 	dc = (struct discard_cmd *)f2fs_lookup_rb_tree_ret(&dcc->root,
 					NULL, start,
@@ -2800,7 +3058,7 @@
 			blk_finish_plug(&plug);
 			mutex_unlock(&dcc->cmd_lock);
 			trimmed += __wait_all_discard_cmd(sbi, NULL);
-			congestion_wait(BLK_RW_ASYNC, HZ/50);
+			congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
 			goto next;
 		}
 skip:
@@ -2829,7 +3087,7 @@
 	struct discard_policy dpolicy;
 	unsigned long long trimmed = 0;
 	int err = 0;
-	bool need_align = test_opt(sbi, LFS) && __is_large_section(sbi);
+	bool need_align = f2fs_lfs_mode(sbi) && __is_large_section(sbi);
 
 	if (start >= MAX_BLKADDR(sbi) || range->len < sbi->blocksize)
 		return -EINVAL;
@@ -2859,9 +3117,9 @@
 	if (sbi->discard_blks == 0)
 		goto out;
 
-	mutex_lock(&sbi->gc_mutex);
+	down_write(&sbi->gc_lock);
 	err = f2fs_write_checkpoint(sbi, &cpc);
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 	if (err)
 		goto out;
 
@@ -2889,12 +3147,11 @@
 	return err;
 }
 
-static bool __has_curseg_space(struct f2fs_sb_info *sbi, int type)
+static bool __has_curseg_space(struct f2fs_sb_info *sbi,
+					struct curseg_info *curseg)
 {
-	struct curseg_info *curseg = CURSEG_I(sbi, type);
-	if (curseg->next_blkoff < sbi->blocks_per_seg)
-		return true;
-	return false;
+	return curseg->next_blkoff < f2fs_usable_blks_in_seg(sbi,
+							curseg->segno);
 }
 
 int f2fs_rw_hint_to_seg_type(enum rw_hint hint)
@@ -3034,7 +3291,18 @@
 	if (fio->type == DATA) {
 		struct inode *inode = fio->page->mapping->host;
 
-		if (is_cold_data(fio->page) || file_is_cold(inode))
+		if (is_inode_flag_set(inode, FI_ALIGNED_WRITE))
+			return CURSEG_COLD_DATA_PINNED;
+
+		if (page_private_gcing(fio->page)) {
+			if (fio->sbi->am.atgc_enabled &&
+				(fio->io_type == FS_DATA_IO) &&
+				(fio->sbi->gc_mode != GC_URGENT_HIGH))
+				return CURSEG_ALL_DATA_ATGC;
+			else
+				return CURSEG_COLD_DATA;
+		}
+		if (file_is_cold(inode) || f2fs_need_compress_data(inode))
 			return CURSEG_COLD_DATA;
 		if (file_is_hot(inode) ||
 				is_inode_flag_set(inode, FI_HOT_DATA) ||
@@ -3080,18 +3348,29 @@
 void f2fs_allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
 		block_t old_blkaddr, block_t *new_blkaddr,
 		struct f2fs_summary *sum, int type,
-		struct f2fs_io_info *fio, bool add_list)
+		struct f2fs_io_info *fio)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
 	struct curseg_info *curseg = CURSEG_I(sbi, type);
+	unsigned long long old_mtime;
+	bool from_gc = (type == CURSEG_ALL_DATA_ATGC);
+	struct seg_entry *se = NULL;
 
 	down_read(&SM_I(sbi)->curseg_lock);
 
 	mutex_lock(&curseg->curseg_mutex);
 	down_write(&sit_i->sentry_lock);
 
+	if (from_gc) {
+		f2fs_bug_on(sbi, GET_SEGNO(sbi, old_blkaddr) == NULL_SEGNO);
+		se = get_seg_entry(sbi, GET_SEGNO(sbi, old_blkaddr));
+		sanity_check_seg_type(sbi, se->type);
+		f2fs_bug_on(sbi, IS_NODESEG(se->type));
+	}
 	*new_blkaddr = NEXT_FREE_BLKADDR(sbi, curseg);
 
+	f2fs_bug_on(sbi, curseg->next_blkoff >= sbi->blocks_per_seg);
+
 	f2fs_wait_discard_bio(sbi, *new_blkaddr);
 
 	/*
@@ -3105,6 +3384,14 @@
 
 	stat_inc_block_count(sbi, curseg);
 
+	if (from_gc) {
+		old_mtime = get_segment_mtime(sbi, old_blkaddr);
+	} else {
+		update_segment_mtime(sbi, old_blkaddr, 0);
+		old_mtime = 0;
+	}
+	update_segment_mtime(sbi, *new_blkaddr, old_mtime);
+
 	/*
 	 * SIT information should be updated before segment allocation,
 	 * since SSR needs latest valid block information.
@@ -3113,9 +3400,13 @@
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO)
 		update_sit_entry(sbi, old_blkaddr, -1);
 
-	if (!__has_curseg_space(sbi, type))
-		sit_i->s_ops->allocate_segment(sbi, type, false);
-
+	if (!__has_curseg_space(sbi, curseg)) {
+		if (from_gc)
+			get_atssr_segment(sbi, type, se->type,
+						AT_SSR, se->mtime);
+		else
+			sit_i->s_ops->allocate_segment(sbi, type, false);
+	}
 	/*
 	 * segment dirty status should be updated after segment allocation,
 	 * so we just need to update status only one time after previous
@@ -3132,12 +3423,12 @@
 		f2fs_inode_chksum_set(sbi, page);
 	}
 
-	if (F2FS_IO_ALIGNED(sbi))
-		fio->retry = false;
-
-	if (add_list) {
+	if (fio) {
 		struct f2fs_bio_info *io;
 
+		if (F2FS_IO_ALIGNED(sbi))
+			fio->retry = false;
+
 		INIT_LIST_HEAD(&fio->list);
 		fio->in_list = true;
 		io = sbi->write_io[fio->type] + fio->temp;
@@ -3175,16 +3466,18 @@
 static void do_write_page(struct f2fs_summary *sum, struct f2fs_io_info *fio)
 {
 	int type = __get_segment_type(fio);
-	bool keep_order = (test_opt(fio->sbi, LFS) && type == CURSEG_COLD_DATA);
+	bool keep_order = (f2fs_lfs_mode(fio->sbi) && type == CURSEG_COLD_DATA);
 
 	if (keep_order)
 		down_read(&fio->sbi->io_order_lock);
 reallocate:
 	f2fs_allocate_data_block(fio->sbi, fio->page, fio->old_blkaddr,
-			&fio->new_blkaddr, sum, type, fio, true);
-	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO)
+			&fio->new_blkaddr, sum, type, fio);
+	if (GET_SEGNO(fio->sbi, fio->old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(fio->sbi),
 					fio->old_blkaddr, fio->old_blkaddr);
+		f2fs_invalidate_compress_page(fio->sbi, fio->old_blkaddr);
+	}
 
 	/* writeout dirty page into bdev */
 	f2fs_submit_page_write(fio);
@@ -3266,12 +3559,18 @@
 		set_sbi_flag(sbi, SBI_NEED_FSCK);
 		f2fs_warn(sbi, "%s: incorrect segment(%u) type, run fsck to fix.",
 			  __func__, segno);
-		return -EFSCORRUPTED;
+		err = -EFSCORRUPTED;
+		goto drop_bio;
+	}
+
+	if (f2fs_cp_error(sbi)) {
+		err = -EIO;
+		goto drop_bio;
 	}
 
 	stat_inc_inplace_blocks(fio->sbi);
 
-	if (fio->bio)
+	if (fio->bio && !(SM_I(sbi)->ipu_policy & (1 << F2FS_IPU_NOCACHE)))
 		err = f2fs_merge_page_bio(fio);
 	else
 		err = f2fs_submit_page_bio(fio);
@@ -3281,6 +3580,15 @@
 	}
 
 	return err;
+drop_bio:
+	if (fio->bio && *(fio->bio)) {
+		struct bio *bio = *(fio->bio);
+
+		bio->bi_status = BLK_STS_IOERR;
+		bio_endio(bio);
+		*(fio->bio) = NULL;
+	}
+	return err;
 }
 
 static inline int __f2fs_get_curseg(struct f2fs_sb_info *sbi,
@@ -3297,7 +3605,8 @@
 
 void f2fs_do_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
 				block_t old_blkaddr, block_t new_blkaddr,
-				bool recover_curseg, bool recover_newaddr)
+				bool recover_curseg, bool recover_newaddr,
+				bool from_gc)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
 	struct curseg_info *curseg;
@@ -3305,6 +3614,7 @@
 	struct seg_entry *se;
 	int type;
 	unsigned short old_blkoff;
+	unsigned char old_alloc_type;
 
 	segno = GET_SEGNO(sbi, new_blkaddr);
 	se = get_seg_entry(sbi, segno);
@@ -3338,21 +3648,28 @@
 
 	old_cursegno = curseg->segno;
 	old_blkoff = curseg->next_blkoff;
+	old_alloc_type = curseg->alloc_type;
 
 	/* change the current segment */
 	if (segno != curseg->segno) {
 		curseg->next_segno = segno;
-		change_curseg(sbi, type);
+		change_curseg(sbi, type, true);
 	}
 
 	curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr);
 	__add_sum_entry(sbi, type, sum);
 
-	if (!recover_curseg || recover_newaddr)
+	if (!recover_curseg || recover_newaddr) {
+		if (!from_gc)
+			update_segment_mtime(sbi, new_blkaddr, 0);
 		update_sit_entry(sbi, new_blkaddr, 1);
+	}
 	if (GET_SEGNO(sbi, old_blkaddr) != NULL_SEGNO) {
 		invalidate_mapping_pages(META_MAPPING(sbi),
 					old_blkaddr, old_blkaddr);
+		f2fs_invalidate_compress_page(sbi, old_blkaddr);
+		if (!from_gc)
+			update_segment_mtime(sbi, old_blkaddr, 0);
 		update_sit_entry(sbi, old_blkaddr, -1);
 	}
 
@@ -3364,9 +3681,10 @@
 	if (recover_curseg) {
 		if (old_cursegno != curseg->segno) {
 			curseg->next_segno = old_cursegno;
-			change_curseg(sbi, type);
+			change_curseg(sbi, type, true);
 		}
 		curseg->next_blkoff = old_blkoff;
+		curseg->alloc_type = old_alloc_type;
 	}
 
 	up_write(&sit_i->sentry_lock);
@@ -3384,7 +3702,7 @@
 	set_summary(&sum, dn->nid, dn->ofs_in_node, version);
 
 	f2fs_do_replace_block(sbi, &sum, old_addr, new_addr,
-					recover_curseg, recover_newaddr);
+					recover_curseg, recover_newaddr, false);
 
 	f2fs_update_data_blkaddr(dn, new_addr);
 }
@@ -3395,7 +3713,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));
@@ -3475,6 +3796,7 @@
 
 		for (j = 0; j < blk_off; j++) {
 			struct f2fs_summary *s;
+
 			s = (struct f2fs_summary *)(kaddr + offset);
 			seg_i->sum_blk->entries[j] = *s;
 			offset += SUMMARY_SIZE;
@@ -3513,7 +3835,7 @@
 		blk_off = le16_to_cpu(ckpt->cur_data_blkoff[type -
 							CURSEG_HOT_DATA]);
 		if (__exist_node_summaries(sbi))
-			blk_addr = sum_blk_addr(sbi, NR_CURSEG_TYPE, type);
+			blk_addr = sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type);
 		else
 			blk_addr = sum_blk_addr(sbi, NR_CURSEG_DATA_TYPE, type);
 	} else {
@@ -3537,6 +3859,7 @@
 		if (__exist_node_summaries(sbi)) {
 			struct f2fs_summary *ns = &sum->entries[0];
 			int i;
+
 			for (i = 0; i < sbi->blocks_per_seg; i++, ns++) {
 				ns->version = 0;
 				ns->ofs_in_node = 0;
@@ -3591,8 +3914,9 @@
 	}
 
 	if (__exist_node_summaries(sbi))
-		f2fs_ra_meta_pages(sbi, sum_blk_addr(sbi, NR_CURSEG_TYPE, type),
-					NR_CURSEG_TYPE - type, META_CP, true);
+		f2fs_ra_meta_pages(sbi,
+				sum_blk_addr(sbi, NR_CURSEG_PERSIST_TYPE, type),
+				NR_CURSEG_PERSIST_TYPE - type, META_CP, true);
 
 	for (; type <= CURSEG_COLD_NODE; type++) {
 		err = read_normal_summaries(sbi, type);
@@ -3603,7 +3927,7 @@
 	/* sanity check for summary blocks */
 	if (nats_in_cursum(nat_j) > NAT_JOURNAL_ENTRIES ||
 			sits_in_cursum(sit_j) > SIT_JOURNAL_ENTRIES) {
-		f2fs_err(sbi, "invalid journal entries nats %u sits %u\n",
+		f2fs_err(sbi, "invalid journal entries nats %u sits %u",
 			 nats_in_cursum(nat_j), sits_in_cursum(sit_j));
 		return -EINVAL;
 	}
@@ -3637,6 +3961,7 @@
 	/* Step 3: write summary entries */
 	for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
 		unsigned short blkoff;
+
 		seg_i = CURSEG_I(sbi, i);
 		if (sbi->ckpt->alloc_type[i] == SSR)
 			blkoff = sbi->blocks_per_seg;
@@ -3673,6 +3998,7 @@
 					block_t blkaddr, int type)
 {
 	int i, end;
+
 	if (IS_DATASEG(type))
 		end = type + NR_CURSEG_DATA_TYPE;
 	else
@@ -4050,7 +4376,7 @@
 	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);
-	sit_i->mounted_time = ktime_get_real_seconds();
+	sit_i->mounted_time = ktime_get_boottime_seconds();
 	init_rwsem(&sit_i->sentry_lock);
 	return 0;
 }
@@ -4094,14 +4420,14 @@
 	struct curseg_info *array;
 	int i;
 
-	array = f2fs_kzalloc(sbi, array_size(NR_CURSEG_TYPE, sizeof(*array)),
-			     GFP_KERNEL);
+	array = f2fs_kzalloc(sbi, array_size(NR_CURSEG_TYPE,
+					sizeof(*array)), GFP_KERNEL);
 	if (!array)
 		return -ENOMEM;
 
 	SM_I(sbi)->curseg_array = array;
 
-	for (i = 0; i < NR_CURSEG_TYPE; i++) {
+	for (i = 0; i < NO_CHECK_TYPE; i++) {
 		mutex_init(&array[i].curseg_mutex);
 		array[i].sum_blk = f2fs_kzalloc(sbi, PAGE_SIZE, GFP_KERNEL);
 		if (!array[i].sum_blk)
@@ -4111,8 +4437,15 @@
 				sizeof(struct f2fs_journal), GFP_KERNEL);
 		if (!array[i].journal)
 			return -ENOMEM;
+		if (i < NR_PERSISTENT_LOG)
+			array[i].seg_type = CURSEG_HOT_DATA + i;
+		else if (i == CURSEG_COLD_DATA_PINNED)
+			array[i].seg_type = CURSEG_COLD_DATA;
+		else if (i == CURSEG_ALL_DATA_ATGC)
+			array[i].seg_type = CURSEG_COLD_DATA;
 		array[i].segno = NULL_SEGNO;
 		array[i].next_blkoff = 0;
+		array[i].inited = false;
 	}
 	return restore_curseg_summaries(sbi);
 }
@@ -4233,9 +4566,12 @@
 {
 	unsigned int start;
 	int type;
+	struct seg_entry *sentry;
 
 	for (start = 0; start < MAIN_SEGS(sbi); start++) {
-		struct seg_entry *sentry = get_seg_entry(sbi, start);
+		if (f2fs_usable_blks_in_seg(sbi, start) == 0)
+			continue;
+		sentry = get_seg_entry(sbi, start);
 		if (!sentry->valid_blocks)
 			__set_free(sbi, start);
 		else
@@ -4246,6 +4582,7 @@
 	/* set use the current segments */
 	for (type = CURSEG_HOT_DATA; type <= CURSEG_COLD_NODE; type++) {
 		struct curseg_info *curseg_t = CURSEG_I(sbi, type);
+
 		__set_test_and_inuse(sbi, curseg_t->segno);
 	}
 }
@@ -4254,8 +4591,9 @@
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
 	struct free_segmap_info *free_i = FREE_I(sbi);
-	unsigned int segno = 0, offset = 0;
-	unsigned short valid_blocks;
+	unsigned int segno = 0, offset = 0, secno;
+	block_t valid_blocks, usable_blks_in_seg;
+	block_t blks_per_sec = BLKS_PER_SEC(sbi);
 
 	while (1) {
 		/* find dirty segment based on free segmap */
@@ -4264,9 +4602,10 @@
 			break;
 		offset = segno + 1;
 		valid_blocks = get_valid_blocks(sbi, segno, false);
-		if (valid_blocks == sbi->blocks_per_seg || !valid_blocks)
+		usable_blks_in_seg = f2fs_usable_blks_in_seg(sbi, segno);
+		if (valid_blocks == usable_blks_in_seg || !valid_blocks)
 			continue;
-		if (valid_blocks > sbi->blocks_per_seg) {
+		if (valid_blocks > usable_blks_in_seg) {
 			f2fs_bug_on(sbi, 1);
 			continue;
 		}
@@ -4274,6 +4613,22 @@
 		__locate_dirty_segment(sbi, segno, DIRTY);
 		mutex_unlock(&dirty_i->seglist_lock);
 	}
+
+	if (!__is_large_section(sbi))
+		return;
+
+	mutex_lock(&dirty_i->seglist_lock);
+	for (segno = 0; segno < MAIN_SEGS(sbi); segno += sbi->segs_per_sec) {
+		valid_blocks = get_valid_blocks(sbi, segno, true);
+		secno = GET_SEC_FROM_SEG(sbi, segno);
+
+		if (!valid_blocks || valid_blocks == blks_per_sec)
+			continue;
+		if (IS_CURSEC(sbi, secno))
+			continue;
+		set_bit(secno, dirty_i->dirty_secmap);
+	}
+	mutex_unlock(&dirty_i->seglist_lock);
 }
 
 static int init_victim_secmap(struct f2fs_sb_info *sbi)
@@ -4310,6 +4665,14 @@
 			return -ENOMEM;
 	}
 
+	if (__is_large_section(sbi)) {
+		bitmap_size = f2fs_bitmap_size(MAIN_SECS(sbi));
+		dirty_i->dirty_secmap = f2fs_kvzalloc(sbi,
+						bitmap_size, GFP_KERNEL);
+		if (!dirty_i->dirty_secmap)
+			return -ENOMEM;
+	}
+
 	init_dirty_segmap(sbi);
 	return init_victim_secmap(sbi);
 }
@@ -4322,11 +4685,17 @@
 	 * In LFS/SSR curseg, .next_blkoff should point to an unused blkaddr;
 	 * In LFS curseg, all blkaddr after .next_blkoff should be unused.
 	 */
-	for (i = 0; i < NO_CHECK_TYPE; i++) {
+	for (i = 0; i < NR_PERSISTENT_LOG; i++) {
 		struct curseg_info *curseg = CURSEG_I(sbi, i);
 		struct seg_entry *se = get_seg_entry(sbi, curseg->segno);
 		unsigned int blkofs = curseg->next_blkoff;
 
+		if (f2fs_sb_has_readonly(sbi) &&
+			i != CURSEG_HOT_DATA && i != CURSEG_HOT_NODE)
+			continue;
+
+		sanity_check_seg_type(sbi, curseg->seg_type);
+
 		if (f2fs_test_bit(blkofs, se->cur_valid_map))
 			goto out;
 
@@ -4347,6 +4716,391 @@
 	return 0;
 }
 
+#ifdef CONFIG_BLK_DEV_ZONED
+
+static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
+				    struct f2fs_dev_info *fdev,
+				    struct blk_zone *zone)
+{
+	unsigned int wp_segno, wp_blkoff, zone_secno, zone_segno, segno;
+	block_t zone_block, wp_block, last_valid_block;
+	unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
+	int i, s, b, ret;
+	struct seg_entry *se;
+
+	if (zone->type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	wp_block = fdev->start_blk + (zone->wp >> log_sectors_per_block);
+	wp_segno = GET_SEGNO(sbi, wp_block);
+	wp_blkoff = wp_block - START_BLOCK(sbi, wp_segno);
+	zone_block = fdev->start_blk + (zone->start >> log_sectors_per_block);
+	zone_segno = GET_SEGNO(sbi, zone_block);
+	zone_secno = GET_SEC_FROM_SEG(sbi, zone_segno);
+
+	if (zone_segno >= MAIN_SEGS(sbi))
+		return 0;
+
+	/*
+	 * Skip check of zones cursegs point to, since
+	 * fix_curseg_write_pointer() checks them.
+	 */
+	for (i = 0; i < NO_CHECK_TYPE; i++)
+		if (zone_secno == GET_SEC_FROM_SEG(sbi,
+						   CURSEG_I(sbi, i)->segno))
+			return 0;
+
+	/*
+	 * Get last valid block of the zone.
+	 */
+	last_valid_block = zone_block - 1;
+	for (s = sbi->segs_per_sec - 1; s >= 0; s--) {
+		segno = zone_segno + s;
+		se = get_seg_entry(sbi, segno);
+		for (b = sbi->blocks_per_seg - 1; b >= 0; b--)
+			if (f2fs_test_bit(b, se->cur_valid_map)) {
+				last_valid_block = START_BLOCK(sbi, segno) + b;
+				break;
+			}
+		if (last_valid_block >= zone_block)
+			break;
+	}
+
+	/*
+	 * If last valid block is beyond the write pointer, report the
+	 * inconsistency. This inconsistency does not cause write error
+	 * because the zone will not be selected for write operation until
+	 * it get discarded. Just report it.
+	 */
+	if (last_valid_block >= wp_block) {
+		f2fs_notice(sbi, "Valid block beyond write pointer: "
+			    "valid block[0x%x,0x%x] wp[0x%x,0x%x]",
+			    GET_SEGNO(sbi, last_valid_block),
+			    GET_BLKOFF_FROM_SEG0(sbi, last_valid_block),
+			    wp_segno, wp_blkoff);
+		return 0;
+	}
+
+	/*
+	 * If there is no valid block in the zone and if write pointer is
+	 * not at zone start, reset the write pointer.
+	 */
+	if (last_valid_block + 1 == zone_block && zone->wp != zone->start) {
+		f2fs_notice(sbi,
+			    "Zone without valid block has non-zero write "
+			    "pointer. Reset the write pointer: wp[0x%x,0x%x]",
+			    wp_segno, wp_blkoff);
+		ret = __f2fs_issue_discard_zone(sbi, fdev->bdev, zone_block,
+					zone->len >> log_sectors_per_block);
+		if (ret) {
+			f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
+				 fdev->path, ret);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static struct f2fs_dev_info *get_target_zoned_dev(struct f2fs_sb_info *sbi,
+						  block_t zone_blkaddr)
+{
+	int i;
+
+	for (i = 0; i < sbi->s_ndevs; i++) {
+		if (!bdev_is_zoned(FDEV(i).bdev))
+			continue;
+		if (sbi->s_ndevs == 1 || (FDEV(i).start_blk <= zone_blkaddr &&
+				zone_blkaddr <= FDEV(i).end_blk))
+			return &FDEV(i);
+	}
+
+	return NULL;
+}
+
+static int report_one_zone_cb(struct blk_zone *zone, unsigned int idx,
+			      void *data)
+{
+	memcpy(data, zone, sizeof(struct blk_zone));
+	return 0;
+}
+
+static int fix_curseg_write_pointer(struct f2fs_sb_info *sbi, int type)
+{
+	struct curseg_info *cs = CURSEG_I(sbi, type);
+	struct f2fs_dev_info *zbd;
+	struct blk_zone zone;
+	unsigned int cs_section, wp_segno, wp_blkoff, wp_sector_off;
+	block_t cs_zone_block, wp_block;
+	unsigned int log_sectors_per_block = sbi->log_blocksize - SECTOR_SHIFT;
+	sector_t zone_sector;
+	int err;
+
+	cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
+	cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
+
+	zbd = get_target_zoned_dev(sbi, cs_zone_block);
+	if (!zbd)
+		return 0;
+
+	/* report zone for the sector the curseg points to */
+	zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
+		<< log_sectors_per_block;
+	err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
+				  report_one_zone_cb, &zone);
+	if (err != 1) {
+		f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
+			 zbd->path, err);
+		return err;
+	}
+
+	if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	wp_block = zbd->start_blk + (zone.wp >> log_sectors_per_block);
+	wp_segno = GET_SEGNO(sbi, wp_block);
+	wp_blkoff = wp_block - START_BLOCK(sbi, wp_segno);
+	wp_sector_off = zone.wp & GENMASK(log_sectors_per_block - 1, 0);
+
+	if (cs->segno == wp_segno && cs->next_blkoff == wp_blkoff &&
+		wp_sector_off == 0)
+		return 0;
+
+	f2fs_notice(sbi, "Unaligned curseg[%d] with write pointer: "
+		    "curseg[0x%x,0x%x] wp[0x%x,0x%x]",
+		    type, cs->segno, cs->next_blkoff, wp_segno, wp_blkoff);
+
+	f2fs_notice(sbi, "Assign new section to curseg[%d]: "
+		    "curseg[0x%x,0x%x]", type, cs->segno, cs->next_blkoff);
+
+	f2fs_allocate_new_section(sbi, type, true);
+
+	/* check consistency of the zone curseg pointed to */
+	if (check_zone_write_pointer(sbi, zbd, &zone))
+		return -EIO;
+
+	/* check newly assigned zone */
+	cs_section = GET_SEC_FROM_SEG(sbi, cs->segno);
+	cs_zone_block = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, cs_section));
+
+	zbd = get_target_zoned_dev(sbi, cs_zone_block);
+	if (!zbd)
+		return 0;
+
+	zone_sector = (sector_t)(cs_zone_block - zbd->start_blk)
+		<< log_sectors_per_block;
+	err = blkdev_report_zones(zbd->bdev, zone_sector, 1,
+				  report_one_zone_cb, &zone);
+	if (err != 1) {
+		f2fs_err(sbi, "Report zone failed: %s errno=(%d)",
+			 zbd->path, err);
+		return err;
+	}
+
+	if (zone.type != BLK_ZONE_TYPE_SEQWRITE_REQ)
+		return 0;
+
+	if (zone.wp != zone.start) {
+		f2fs_notice(sbi,
+			    "New zone for curseg[%d] is not yet discarded. "
+			    "Reset the zone: curseg[0x%x,0x%x]",
+			    type, cs->segno, cs->next_blkoff);
+		err = __f2fs_issue_discard_zone(sbi, zbd->bdev,
+				zone_sector >> log_sectors_per_block,
+				zone.len >> log_sectors_per_block);
+		if (err) {
+			f2fs_err(sbi, "Discard zone failed: %s (errno=%d)",
+				 zbd->path, err);
+			return err;
+		}
+	}
+
+	return 0;
+}
+
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
+{
+	int i, ret;
+
+	for (i = 0; i < NR_PERSISTENT_LOG; i++) {
+		ret = fix_curseg_write_pointer(sbi, i);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+struct check_zone_write_pointer_args {
+	struct f2fs_sb_info *sbi;
+	struct f2fs_dev_info *fdev;
+};
+
+static int check_zone_write_pointer_cb(struct blk_zone *zone, unsigned int idx,
+				      void *data)
+{
+	struct check_zone_write_pointer_args *args;
+
+	args = (struct check_zone_write_pointer_args *)data;
+
+	return check_zone_write_pointer(args->sbi, args->fdev, zone);
+}
+
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
+{
+	int i, ret;
+	struct check_zone_write_pointer_args args;
+
+	for (i = 0; i < sbi->s_ndevs; i++) {
+		if (!bdev_is_zoned(FDEV(i).bdev))
+			continue;
+
+		args.sbi = sbi;
+		args.fdev = &FDEV(i);
+		ret = blkdev_report_zones(FDEV(i).bdev, 0, BLK_ALL_ZONES,
+					  check_zone_write_pointer_cb, &args);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+
+static bool is_conv_zone(struct f2fs_sb_info *sbi, unsigned int zone_idx,
+						unsigned int dev_idx)
+{
+	if (!bdev_is_zoned(FDEV(dev_idx).bdev))
+		return true;
+	return !test_bit(zone_idx, FDEV(dev_idx).blkz_seq);
+}
+
+/* Return the zone index in the given device */
+static unsigned int get_zone_idx(struct f2fs_sb_info *sbi, unsigned int secno,
+					int dev_idx)
+{
+	block_t sec_start_blkaddr = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, secno));
+
+	return (sec_start_blkaddr - FDEV(dev_idx).start_blk) >>
+						sbi->log_blocks_per_blkz;
+}
+
+/*
+ * Return the usable segments in a section based on the zone's
+ * corresponding zone capacity. Zone is equal to a section.
+ */
+static inline unsigned int f2fs_usable_zone_segs_in_sec(
+		struct f2fs_sb_info *sbi, unsigned int segno)
+{
+	unsigned int dev_idx, zone_idx, unusable_segs_in_sec;
+
+	dev_idx = f2fs_target_device_index(sbi, START_BLOCK(sbi, segno));
+	zone_idx = get_zone_idx(sbi, GET_SEC_FROM_SEG(sbi, segno), dev_idx);
+
+	/* Conventional zone's capacity is always equal to zone size */
+	if (is_conv_zone(sbi, zone_idx, dev_idx))
+		return sbi->segs_per_sec;
+
+	/*
+	 * If the zone_capacity_blocks array is NULL, then zone capacity
+	 * is equal to the zone size for all zones
+	 */
+	if (!FDEV(dev_idx).zone_capacity_blocks)
+		return sbi->segs_per_sec;
+
+	/* Get the segment count beyond zone capacity block */
+	unusable_segs_in_sec = (sbi->blocks_per_blkz -
+				FDEV(dev_idx).zone_capacity_blocks[zone_idx]) >>
+				sbi->log_blocks_per_seg;
+	return sbi->segs_per_sec - unusable_segs_in_sec;
+}
+
+/*
+ * Return the number of usable blocks in a segment. The number of blocks
+ * returned is always equal to the number of blocks in a segment for
+ * segments fully contained within a sequential zone capacity or a
+ * conventional zone. For segments partially contained in a sequential
+ * zone capacity, the number of usable blocks up to the zone capacity
+ * is returned. 0 is returned in all other cases.
+ */
+static inline unsigned int f2fs_usable_zone_blks_in_seg(
+			struct f2fs_sb_info *sbi, unsigned int segno)
+{
+	block_t seg_start, sec_start_blkaddr, sec_cap_blkaddr;
+	unsigned int zone_idx, dev_idx, secno;
+
+	secno = GET_SEC_FROM_SEG(sbi, segno);
+	seg_start = START_BLOCK(sbi, segno);
+	dev_idx = f2fs_target_device_index(sbi, seg_start);
+	zone_idx = get_zone_idx(sbi, secno, dev_idx);
+
+	/*
+	 * Conventional zone's capacity is always equal to zone size,
+	 * so, blocks per segment is unchanged.
+	 */
+	if (is_conv_zone(sbi, zone_idx, dev_idx))
+		return sbi->blocks_per_seg;
+
+	if (!FDEV(dev_idx).zone_capacity_blocks)
+		return sbi->blocks_per_seg;
+
+	sec_start_blkaddr = START_BLOCK(sbi, GET_SEG_FROM_SEC(sbi, secno));
+	sec_cap_blkaddr = sec_start_blkaddr +
+				FDEV(dev_idx).zone_capacity_blocks[zone_idx];
+
+	/*
+	 * If segment starts before zone capacity and spans beyond
+	 * zone capacity, then usable blocks are from seg start to
+	 * zone capacity. If the segment starts after the zone capacity,
+	 * then there are no usable blocks.
+	 */
+	if (seg_start >= sec_cap_blkaddr)
+		return 0;
+	if (seg_start + sbi->blocks_per_seg > sec_cap_blkaddr)
+		return sec_cap_blkaddr - seg_start;
+
+	return sbi->blocks_per_seg;
+}
+#else
+int f2fs_fix_curseg_write_pointer(struct f2fs_sb_info *sbi)
+{
+	return 0;
+}
+
+int f2fs_check_write_pointer(struct f2fs_sb_info *sbi)
+{
+	return 0;
+}
+
+static inline unsigned int f2fs_usable_zone_blks_in_seg(struct f2fs_sb_info *sbi,
+							unsigned int segno)
+{
+	return 0;
+}
+
+static inline unsigned int f2fs_usable_zone_segs_in_sec(struct f2fs_sb_info *sbi,
+							unsigned int segno)
+{
+	return 0;
+}
+#endif
+unsigned int f2fs_usable_blks_in_seg(struct f2fs_sb_info *sbi,
+					unsigned int segno)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return f2fs_usable_zone_blks_in_seg(sbi, segno);
+
+	return sbi->blocks_per_seg;
+}
+
+unsigned int f2fs_usable_segs_in_sec(struct f2fs_sb_info *sbi,
+					unsigned int segno)
+{
+	if (f2fs_sb_has_blkzoned(sbi))
+		return f2fs_usable_zone_segs_in_sec(sbi, segno);
+
+	return sbi->segs_per_sec;
+}
+
 /*
  * Update min, max modified time for cost-benefit GC algorithm
  */
@@ -4372,6 +5126,7 @@
 			sit_i->min_mtime = mtime;
 	}
 	sit_i->max_mtime = get_mtime(sbi, false);
+	sit_i->dirty_max_mtime = 0;
 	up_write(&sit_i->sentry_lock);
 }
 
@@ -4400,7 +5155,7 @@
 	if (sm_info->rec_prefree_segments > DEF_MAX_RECLAIM_PREFREE_SEGMENTS)
 		sm_info->rec_prefree_segments = DEF_MAX_RECLAIM_PREFREE_SEGMENTS;
 
-	if (!test_opt(sbi, LFS))
+	if (!f2fs_lfs_mode(sbi))
 		sm_info->ipu_policy = 1 << F2FS_IPU_FSYNC;
 	sm_info->min_ipu_util = DEF_MIN_IPU_UTIL;
 	sm_info->min_fsync_blocks = DEF_MIN_FSYNC_BLOCKS;
@@ -4464,6 +5219,7 @@
 static void destroy_victim_secmap(struct f2fs_sb_info *sbi)
 {
 	struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
+
 	kvfree(dirty_i->victim_secmap);
 }
 
@@ -4479,9 +5235,15 @@
 	for (i = 0; i < NR_DIRTY_TYPE; i++)
 		discard_dirty_segmap(sbi, i);
 
+	if (__is_large_section(sbi)) {
+		mutex_lock(&dirty_i->seglist_lock);
+		kvfree(dirty_i->dirty_secmap);
+		mutex_unlock(&dirty_i->seglist_lock);
+	}
+
 	destroy_victim_secmap(sbi);
 	SM_I(sbi)->dirty_info = NULL;
-	kvfree(dirty_i);
+	kfree(dirty_i);
 }
 
 static void destroy_curseg(struct f2fs_sb_info *sbi)
@@ -4493,21 +5255,22 @@
 		return;
 	SM_I(sbi)->curseg_array = NULL;
 	for (i = 0; i < NR_CURSEG_TYPE; i++) {
-		kvfree(array[i].sum_blk);
-		kvfree(array[i].journal);
+		kfree(array[i].sum_blk);
+		kfree(array[i].journal);
 	}
-	kvfree(array);
+	kfree(array);
 }
 
 static void destroy_free_segmap(struct f2fs_sb_info *sbi)
 {
 	struct free_segmap_info *free_i = SM_I(sbi)->free_info;
+
 	if (!free_i)
 		return;
 	SM_I(sbi)->free_info = NULL;
 	kvfree(free_i->free_segmap);
 	kvfree(free_i->free_secmap);
-	kvfree(free_i);
+	kfree(free_i);
 }
 
 static void destroy_sit_info(struct f2fs_sb_info *sbi)
@@ -4519,7 +5282,7 @@
 
 	if (sit_i->sentries)
 		kvfree(sit_i->bitmap);
-	kvfree(sit_i->tmp_map);
+	kfree(sit_i->tmp_map);
 
 	kvfree(sit_i->sentries);
 	kvfree(sit_i->sec_entries);
@@ -4531,7 +5294,7 @@
 	kvfree(sit_i->sit_bitmap_mir);
 	kvfree(sit_i->invalid_segmap);
 #endif
-	kvfree(sit_i);
+	kfree(sit_i);
 }
 
 void f2fs_destroy_segment_manager(struct f2fs_sb_info *sbi)
@@ -4547,27 +5310,27 @@
 	destroy_free_segmap(sbi);
 	destroy_sit_info(sbi);
 	sbi->sm_info = NULL;
-	kvfree(sm_info);
+	kfree(sm_info);
 }
 
 int __init f2fs_create_segment_manager_caches(void)
 {
-	discard_entry_slab = f2fs_kmem_cache_create("discard_entry",
+	discard_entry_slab = f2fs_kmem_cache_create("f2fs_discard_entry",
 			sizeof(struct discard_entry));
 	if (!discard_entry_slab)
 		goto fail;
 
-	discard_cmd_slab = f2fs_kmem_cache_create("discard_cmd",
+	discard_cmd_slab = f2fs_kmem_cache_create("f2fs_discard_cmd",
 			sizeof(struct discard_cmd));
 	if (!discard_cmd_slab)
 		goto destroy_discard_entry;
 
-	sit_entry_set_slab = f2fs_kmem_cache_create("sit_entry_set",
+	sit_entry_set_slab = f2fs_kmem_cache_create("f2fs_sit_entry_set",
 			sizeof(struct sit_entry_set));
 	if (!sit_entry_set_slab)
 		goto destroy_discard_cmd;
 
-	inmem_entry_slab = f2fs_kmem_cache_create("inmem_page_entry",
+	inmem_entry_slab = f2fs_kmem_cache_create("f2fs_inmem_page_entry",
 			sizeof(struct inmem_pages));
 	if (!inmem_entry_slab)
 		goto destroy_sit_entry_set;
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 2034b9a..dab87ec 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/segment.h
  *
@@ -16,13 +16,20 @@
 #define DEF_MAX_RECLAIM_PREFREE_SEGMENTS	4096	/* 8GB in maximum */
 
 #define F2FS_MIN_SEGMENTS	9 /* SB + 2 (CP + SIT + NAT) + SSA + MAIN */
+#define F2FS_MIN_META_SEGMENTS	8 /* SB + 2 (CP + SIT + NAT) + SSA */
 
 /* L: Logical segment # in volume, R: Relative segment # in main area */
 #define GET_L2R_SEGNO(free_i, segno)	((segno) - (free_i)->start_segno)
 #define GET_R2L_SEGNO(free_i, segno)	((segno) + (free_i)->start_segno)
 
 #define IS_DATASEG(t)	((t) <= CURSEG_COLD_DATA)
-#define IS_NODESEG(t)	((t) >= CURSEG_HOT_NODE)
+#define IS_NODESEG(t)	((t) >= CURSEG_HOT_NODE && (t) <= CURSEG_COLD_NODE)
+
+static inline void sanity_check_seg_type(struct f2fs_sb_info *sbi,
+						unsigned short seg_type)
+{
+	f2fs_bug_on(sbi, seg_type >= NR_PERSISTENT_LOG);
+}
 
 #define IS_HOT(t)	((t) == CURSEG_HOT_NODE || (t) == CURSEG_HOT_DATA)
 #define IS_WARM(t)	((t) == CURSEG_WARM_NODE || (t) == CURSEG_WARM_DATA)
@@ -34,7 +41,9 @@
 	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA)->segno) ||	\
 	 ((seg) == CURSEG_I(sbi, CURSEG_HOT_NODE)->segno) ||	\
 	 ((seg) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno) ||	\
-	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno))
+	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno) ||	\
+	 ((seg) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno) ||	\
+	 ((seg) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno))
 
 #define IS_CURSEC(sbi, secno)						\
 	(((secno) == CURSEG_I(sbi, CURSEG_HOT_DATA)->segno /		\
@@ -48,7 +57,11 @@
 	 ((secno) == CURSEG_I(sbi, CURSEG_WARM_NODE)->segno /		\
 	  (sbi)->segs_per_sec) ||	\
 	 ((secno) == CURSEG_I(sbi, CURSEG_COLD_NODE)->segno /		\
-	  (sbi)->segs_per_sec))	\
+	  (sbi)->segs_per_sec) ||	\
+	 ((secno) == CURSEG_I(sbi, CURSEG_COLD_DATA_PINNED)->segno /	\
+	  (sbi)->segs_per_sec) ||	\
+	 ((secno) == CURSEG_I(sbi, CURSEG_ALL_DATA_ATGC)->segno /	\
+	  (sbi)->segs_per_sec))
 
 #define MAIN_BLKADDR(sbi)						\
 	(SM_I(sbi) ? SM_I(sbi)->main_blkaddr : 				\
@@ -132,20 +145,25 @@
  * In the victim_sel_policy->alloc_mode, there are two block allocation modes.
  * LFS writes data sequentially with cleaning operations.
  * SSR (Slack Space Recycle) reuses obsolete space without cleaning operations.
+ * AT_SSR (Age Threshold based Slack Space Recycle) merges fragments into
+ * fragmented segment which has similar aging degree.
  */
 enum {
 	LFS = 0,
-	SSR
+	SSR,
+	AT_SSR,
 };
 
 /*
  * In the victim_sel_policy->gc_mode, there are two gc, aka cleaning, modes.
  * GC_CB is based on cost-benefit algorithm.
  * GC_GREEDY is based on greedy algorithm.
+ * GC_AT is based on age-threshold algorithm.
  */
 enum {
 	GC_CB = 0,
 	GC_GREEDY,
+	GC_AT,
 	ALLOC_NEXT,
 	FLUSH_DEVICE,
 	MAX_GC_POLICY,
@@ -154,24 +172,28 @@
 /*
  * BG_GC means the background cleaning job.
  * FG_GC means the on-demand cleaning job.
- * FORCE_FG_GC means on-demand cleaning job in background.
  */
 enum {
 	BG_GC = 0,
 	FG_GC,
-	FORCE_FG_GC,
 };
 
 /* for a function parameter to select a victim segment */
 struct victim_sel_policy {
 	int alloc_mode;			/* LFS or SSR */
 	int gc_mode;			/* GC_CB or GC_GREEDY */
-	unsigned long *dirty_segmap;	/* dirty segment bitmap */
-	unsigned int max_search;	/* maximum # of segments to search */
+	unsigned long *dirty_bitmap;	/* dirty segment/section bitmap */
+	unsigned int max_search;	/*
+					 * maximum # of segments/sections
+					 * to search
+					 */
 	unsigned int offset;		/* last scanned bitmap offset */
 	unsigned int ofs_unit;		/* bitmap search unit */
 	unsigned int min_cost;		/* minimum cost */
+	unsigned long long oldest_age;	/* oldest age of segments having the same min cost */
 	unsigned int min_segno;		/* segment # having min. cost */
+	unsigned long long age;		/* mtime of GCed section*/
+	unsigned long long age_threshold;/* age threshold */
 };
 
 struct seg_entry {
@@ -184,7 +206,7 @@
 	unsigned char *cur_valid_map_mir;	/* mirror of current valid bitmap */
 #endif
 	/*
-	 * # of valid blocks and the validity bitmap stored in the the last
+	 * # of valid blocks and the validity bitmap stored in the last
 	 * checkpoint pack. This information is used by the SSR mode.
 	 */
 	unsigned char *ckpt_valid_map;	/* validity bitmap of blocks last cp */
@@ -200,18 +222,6 @@
 	void (*allocate_segment)(struct f2fs_sb_info *, int, bool);
 };
 
-/*
- * this value is set in page as a private data which indicate that
- * the page is atomically written, and it is in inmem_pages list.
- */
-#define ATOMIC_WRITTEN_PAGE		((unsigned long)-1)
-#define DUMMY_WRITTEN_PAGE		((unsigned long)-2)
-
-#define IS_ATOMIC_WRITTEN_PAGE(page)			\
-		(page_private(page) == (unsigned long)ATOMIC_WRITTEN_PAGE)
-#define IS_DUMMY_WRITTEN_PAGE(page)			\
-		(page_private(page) == (unsigned long)DUMMY_WRITTEN_PAGE)
-
 #define MAX_SKIP_GC_COUNT			16
 
 struct inmem_pages {
@@ -249,6 +259,8 @@
 	unsigned long long mounted_time;	/* mount time */
 	unsigned long long min_mtime;		/* min. modification time */
 	unsigned long long max_mtime;		/* max. modification time */
+	unsigned long long dirty_min_mtime;	/* rerange candidates in GC_AT */
+	unsigned long long dirty_max_mtime;	/* rerange candidates in GC_AT */
 
 	unsigned int last_victim[MAX_GC_POLICY]; /* last victim segment # */
 };
@@ -278,6 +290,7 @@
 struct dirty_seglist_info {
 	const struct victim_selection *v_ops;	/* victim selction operation */
 	unsigned long *dirty_segmap[NR_DIRTY_TYPE];
+	unsigned long *dirty_secmap;
 	struct mutex seglist_lock;		/* lock for segment bitmaps */
 	int nr_dirty[NR_DIRTY_TYPE];		/* # of dirty segments */
 	unsigned long *victim_secmap;		/* background GC victims */
@@ -286,7 +299,7 @@
 /* victim selection function for cleaning and SSR */
 struct victim_selection {
 	int (*get_victim)(struct f2fs_sb_info *, unsigned int *,
-							int, int, char);
+					int, int, char, unsigned long long);
 };
 
 /* for active log information */
@@ -296,10 +309,12 @@
 	struct rw_semaphore journal_rwsem;	/* protect journal area */
 	struct f2fs_journal *journal;		/* cached journal info */
 	unsigned char alloc_type;		/* current allocation type */
+	unsigned short seg_type;		/* segment type like CURSEG_XXX_TYPE */
 	unsigned int segno;			/* current segment number */
 	unsigned short next_blkoff;		/* next block offset to write */
 	unsigned int zone;			/* current zone number */
 	unsigned int next_segno;		/* preallocated segment */
+	bool inited;				/* indicate inmem log is inited */
 };
 
 struct sit_entry_set {
@@ -344,8 +359,20 @@
 }
 
 static inline unsigned int get_ckpt_valid_blocks(struct f2fs_sb_info *sbi,
-				unsigned int segno)
+				unsigned int segno, bool use_section)
 {
+	if (use_section && __is_large_section(sbi)) {
+		unsigned int start_segno = START_SEGNO(segno);
+		unsigned int blocks = 0;
+		int i;
+
+		for (i = 0; i < sbi->segs_per_sec; i++, start_segno++) {
+			struct seg_entry *se = get_seg_entry(sbi, start_segno);
+
+			blocks += se->ckpt_valid_blocks;
+		}
+		return blocks;
+	}
 	return get_seg_entry(sbi, segno)->ckpt_valid_blocks;
 }
 
@@ -417,6 +444,7 @@
 	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
 	unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
 	unsigned int next;
+	unsigned int usable_segs = f2fs_usable_segs_in_sec(sbi, segno);
 
 	spin_lock(&free_i->segmap_lock);
 	clear_bit(segno, free_i->free_segmap);
@@ -424,7 +452,7 @@
 
 	next = find_next_bit(free_i->free_segmap,
 			start_segno + sbi->segs_per_sec, start_segno);
-	if (next >= start_segno + sbi->segs_per_sec) {
+	if (next >= start_segno + usable_segs) {
 		clear_bit(secno, free_i->free_secmap);
 		free_i->free_sections++;
 	}
@@ -444,22 +472,23 @@
 }
 
 static inline void __set_test_and_free(struct f2fs_sb_info *sbi,
-		unsigned int segno)
+		unsigned int segno, bool inmem)
 {
 	struct free_segmap_info *free_i = FREE_I(sbi);
 	unsigned int secno = GET_SEC_FROM_SEG(sbi, segno);
 	unsigned int start_segno = GET_SEG_FROM_SEC(sbi, secno);
 	unsigned int next;
+	unsigned int usable_segs = f2fs_usable_segs_in_sec(sbi, segno);
 
 	spin_lock(&free_i->segmap_lock);
 	if (test_and_clear_bit(segno, free_i->free_segmap)) {
 		free_i->free_segments++;
 
-		if (IS_CURSEC(sbi, secno))
+		if (!inmem && IS_CURSEC(sbi, secno))
 			goto skip_free;
 		next = find_next_bit(free_i->free_segmap,
 				start_segno + sbi->segs_per_sec, start_segno);
-		if (next >= start_segno + sbi->segs_per_sec) {
+		if (next >= start_segno + usable_segs) {
 			if (test_and_clear_bit(secno, free_i->free_secmap))
 				free_i->free_sections++;
 		}
@@ -506,7 +535,7 @@
 	return FREE_I(sbi)->free_segments;
 }
 
-static inline int reserved_segments(struct f2fs_sb_info *sbi)
+static inline unsigned int reserved_segments(struct f2fs_sb_info *sbi)
 {
 	return SM_I(sbi)->reserved_segments;
 }
@@ -538,7 +567,7 @@
 
 static inline int reserved_sections(struct f2fs_sb_info *sbi)
 {
-	return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi));
+	return GET_SEC_FROM_SEG(sbi, reserved_segments(sbi));
 }
 
 static inline bool has_curseg_enough_space(struct f2fs_sb_info *sbi)
@@ -552,8 +581,8 @@
 	/* check current node segment */
 	for (i = CURSEG_HOT_NODE; i <= CURSEG_COLD_NODE; i++) {
 		segno = CURSEG_I(sbi, i)->segno;
-		left_blocks = sbi->blocks_per_seg -
-			get_seg_entry(sbi, segno)->ckpt_valid_blocks;
+		left_blocks = f2fs_usable_blks_in_seg(sbi, segno) -
+				get_seg_entry(sbi, segno)->ckpt_valid_blocks;
 
 		if (node_blocks > left_blocks)
 			return false;
@@ -561,7 +590,7 @@
 
 	/* check current data segment */
 	segno = CURSEG_I(sbi, CURSEG_HOT_DATA)->segno;
-	left_blocks = sbi->blocks_per_seg -
+	left_blocks = f2fs_usable_blks_in_seg(sbi, segno) -
 			get_seg_entry(sbi, segno)->ckpt_valid_blocks;
 	if (dent_blocks > left_blocks)
 		return false;
@@ -617,8 +646,10 @@
  *                     threashold,
  * F2FS_IPU_FSYNC - activated in fsync path only for high performance flash
  *                     storages. IPU will be triggered only if the # of dirty
- *                     pages over min_fsync_blocks.
- * F2FS_IPUT_DISABLE - disable IPU. (=default option)
+ *                     pages over min_fsync_blocks. (=default option)
+ * F2FS_IPU_ASYNC - do IPU given by asynchronous write requests.
+ * F2FS_IPU_NOCACHE - disable IPU bio cache.
+ * F2FS_IPUT_DISABLE - disable IPU. (=default option in LFS mode)
  */
 #define DEF_MIN_IPU_UTIL	70
 #define DEF_MIN_FSYNC_BLOCKS	8
@@ -633,6 +664,7 @@
 	F2FS_IPU_SSR_UTIL,
 	F2FS_IPU_FSYNC,
 	F2FS_IPU_ASYNC,
+	F2FS_IPU_NOCACHE,
 };
 
 static inline unsigned int curseg_segno(struct f2fs_sb_info *sbi,
@@ -680,21 +712,22 @@
 	bool is_valid  = test_bit_le(0, raw_sit->valid_map) ? true : false;
 	int valid_blocks = 0;
 	int cur_pos = 0, next_pos;
+	unsigned int usable_blks_per_seg = f2fs_usable_blks_in_seg(sbi, segno);
 
 	/* check bitmap with valid block count */
 	do {
 		if (is_valid) {
 			next_pos = find_next_zero_bit_le(&raw_sit->valid_map,
-					sbi->blocks_per_seg,
+					usable_blks_per_seg,
 					cur_pos);
 			valid_blocks += next_pos - cur_pos;
 		} else
 			next_pos = find_next_bit_le(&raw_sit->valid_map,
-					sbi->blocks_per_seg,
+					usable_blks_per_seg,
 					cur_pos);
 		cur_pos = next_pos;
 		is_valid = !is_valid;
-	} while (cur_pos < sbi->blocks_per_seg);
+	} while (cur_pos < usable_blks_per_seg);
 
 	if (unlikely(GET_SIT_VBLOCKS(raw_sit) != valid_blocks)) {
 		f2fs_err(sbi, "Mismatch valid blocks %d vs. %d",
@@ -703,8 +736,13 @@
 		return -EFSCORRUPTED;
 	}
 
+	if (usable_blks_per_seg < sbi->blocks_per_seg)
+		f2fs_bug_on(sbi, find_next_bit_le(&raw_sit->valid_map,
+				sbi->blocks_per_seg,
+				usable_blks_per_seg) != sbi->blocks_per_seg);
+
 	/* check segment usage, and check boundary of a given segment number */
-	if (unlikely(GET_SIT_VBLOCKS(raw_sit) > sbi->blocks_per_seg
+	if (unlikely(GET_SIT_VBLOCKS(raw_sit) > usable_blks_per_seg
 					|| segno > TOTAL_SEGS(sbi) - 1)) {
 		f2fs_err(sbi, "Wrong valid blocks %d or segno %u",
 			 GET_SIT_VBLOCKS(raw_sit), segno);
@@ -763,7 +801,7 @@
 						bool base_time)
 {
 	struct sit_info *sit_i = SIT_I(sbi);
-	time64_t diff, now = ktime_get_real_seconds();
+	time64_t diff, now = ktime_get_boottime_seconds();
 
 	if (now >= sit_i->mounted_time)
 		return sit_i->elapsed_time + now - sit_i->mounted_time;
diff --git a/fs/f2fs/shrinker.c b/fs/f2fs/shrinker.c
index 3ceebaa..dd3c3c7 100644
--- a/fs/f2fs/shrinker.c
+++ b/fs/f2fs/shrinker.c
@@ -56,7 +56,7 @@
 		/* count extent cache entries */
 		count += __count_extent_cache(sbi);
 
-		/* shrink clean nat cache entries */
+		/* count clean nat cache entries */
 		count += __count_nat_entries(sbi);
 
 		/* count free nids cache entries */
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 41bf656..15dd209 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -24,13 +24,14 @@
 #include <linux/sysfs.h>
 #include <linux/quota.h>
 #include <linux/unicode.h>
+#include <linux/zstd.h>
+#include <linux/lz4.h>
 
 #include "f2fs.h"
 #include "node.h"
 #include "segment.h"
 #include "xattr.h"
 #include "gc.h"
-#include "trace.h"
 
 #define CREATE_TRACE_POINTS
 #include <trace/events/f2fs.h>
@@ -44,7 +45,6 @@
 	[FAULT_KVMALLOC]	= "kvmalloc",
 	[FAULT_PAGE_ALLOC]	= "page alloc",
 	[FAULT_PAGE_GET]	= "page get",
-	[FAULT_ALLOC_BIO]	= "alloc bio",
 	[FAULT_ALLOC_NID]	= "alloc nid",
 	[FAULT_ORPHAN]		= "orphan",
 	[FAULT_BLOCK]		= "no more block",
@@ -137,10 +137,22 @@
 	Opt_alloc,
 	Opt_fsync,
 	Opt_test_dummy_encryption,
+	Opt_inlinecrypt,
 	Opt_checkpoint_disable,
 	Opt_checkpoint_disable_cap,
 	Opt_checkpoint_disable_cap_perc,
 	Opt_checkpoint_enable,
+	Opt_checkpoint_merge,
+	Opt_nocheckpoint_merge,
+	Opt_compress_algorithm,
+	Opt_compress_log_size,
+	Opt_compress_extension,
+	Opt_compress_chksum,
+	Opt_compress_mode,
+	Opt_compress_cache,
+	Opt_atgc,
+	Opt_gc_merge,
+	Opt_nogc_merge,
 	Opt_err,
 };
 
@@ -198,11 +210,24 @@
 	{Opt_whint, "whint_mode=%s"},
 	{Opt_alloc, "alloc_mode=%s"},
 	{Opt_fsync, "fsync_mode=%s"},
+	{Opt_test_dummy_encryption, "test_dummy_encryption=%s"},
 	{Opt_test_dummy_encryption, "test_dummy_encryption"},
+	{Opt_inlinecrypt, "inlinecrypt"},
 	{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_checkpoint_merge, "checkpoint_merge"},
+	{Opt_nocheckpoint_merge, "nocheckpoint_merge"},
+	{Opt_compress_algorithm, "compress_algorithm=%s"},
+	{Opt_compress_log_size, "compress_log_size=%u"},
+	{Opt_compress_extension, "compress_extension=%s"},
+	{Opt_compress_chksum, "compress_chksum"},
+	{Opt_compress_mode, "compress_mode=%s"},
+	{Opt_compress_cache, "compress_cache"},
+	{Opt_atgc, "atgc"},
+	{Opt_gc_merge, "gc_merge"},
+	{Opt_nogc_merge, "nogc_merge"},
 	{Opt_err, NULL},
 };
 
@@ -251,6 +276,24 @@
 
 	return 0;
 }
+
+struct kmem_cache *f2fs_cf_name_slab;
+static int __init f2fs_create_casefold_cache(void)
+{
+	f2fs_cf_name_slab = f2fs_kmem_cache_create("f2fs_casefolded_name",
+							F2FS_NAME_LEN);
+	if (!f2fs_cf_name_slab)
+		return -ENOMEM;
+	return 0;
+}
+
+static void f2fs_destroy_casefold_cache(void)
+{
+	kmem_cache_destroy(f2fs_cf_name_slab);
+}
+#else
+static int __init f2fs_create_casefold_cache(void) { return 0; }
+static void f2fs_destroy_casefold_cache(void) { }
 #endif
 
 static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
@@ -340,7 +383,7 @@
 	set_opt(sbi, QUOTA);
 	return 0;
 errout:
-	kvfree(qname);
+	kfree(qname);
 	return ret;
 }
 
@@ -352,7 +395,7 @@
 		f2fs_err(sbi, "Cannot change journaled quota options when quota turned on");
 		return -EINVAL;
 	}
-	kvfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
+	kfree(F2FS_OPTION(sbi).s_qf_names[qtype]);
 	F2FS_OPTION(sbi).s_qf_names[qtype] = NULL;
 	return 0;
 }
@@ -403,23 +446,139 @@
 }
 #endif
 
-static int parse_options(struct super_block *sb, char *options)
+static int f2fs_set_test_dummy_encryption(struct super_block *sb,
+					  const char *opt,
+					  const substring_t *arg,
+					  bool is_remount)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+#ifdef CONFIG_FS_ENCRYPTION
+	int err;
+
+	if (!f2fs_sb_has_encrypt(sbi)) {
+		f2fs_err(sbi, "Encrypt feature is off");
+		return -EINVAL;
+	}
+
+	/*
+	 * This mount option is just for testing, and it's not worthwhile to
+	 * implement the extra complexity (e.g. RCU protection) that would be
+	 * needed to allow it to be set or changed during remount.  We do allow
+	 * it to be specified during remount, but only if there is no change.
+	 */
+	if (is_remount && !F2FS_OPTION(sbi).dummy_enc_policy.policy) {
+		f2fs_warn(sbi, "Can't set test_dummy_encryption on remount");
+		return -EINVAL;
+	}
+	err = fscrypt_set_test_dummy_encryption(
+		sb, arg->from, &F2FS_OPTION(sbi).dummy_enc_policy);
+	if (err) {
+		if (err == -EEXIST)
+			f2fs_warn(sbi,
+				  "Can't change test_dummy_encryption on remount");
+		else if (err == -EINVAL)
+			f2fs_warn(sbi, "Value of option \"%s\" is unrecognized",
+				  opt);
+		else
+			f2fs_warn(sbi, "Error processing option \"%s\" [%d]",
+				  opt, err);
+		return -EINVAL;
+	}
+	f2fs_warn(sbi, "Test dummy encryption mode enabled");
+#else
+	f2fs_warn(sbi, "Test dummy encryption mount option ignored");
+#endif
+	return 0;
+}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+#ifdef CONFIG_F2FS_FS_LZ4
+static int f2fs_set_lz4hc_level(struct f2fs_sb_info *sbi, const char *str)
+{
+#ifdef CONFIG_F2FS_FS_LZ4HC
+	unsigned int level;
+#endif
+
+	if (strlen(str) == 3) {
+		F2FS_OPTION(sbi).compress_level = 0;
+		return 0;
+	}
+
+#ifdef CONFIG_F2FS_FS_LZ4HC
+	str += 3;
+
+	if (str[0] != ':') {
+		f2fs_info(sbi, "wrong format, e.g. <alg_name>:<compr_level>");
+		return -EINVAL;
+	}
+	if (kstrtouint(str + 1, 10, &level))
+		return -EINVAL;
+
+	if (level < LZ4HC_MIN_CLEVEL || level > LZ4HC_MAX_CLEVEL) {
+		f2fs_info(sbi, "invalid lz4hc compress level: %d", level);
+		return -EINVAL;
+	}
+
+	F2FS_OPTION(sbi).compress_level = level;
+	return 0;
+#else
+	f2fs_info(sbi, "kernel doesn't support lz4hc compression");
+	return -EINVAL;
+#endif
+}
+#endif
+
+#ifdef CONFIG_F2FS_FS_ZSTD
+static int f2fs_set_zstd_level(struct f2fs_sb_info *sbi, const char *str)
+{
+	unsigned int level;
+	int len = 4;
+
+	if (strlen(str) == len) {
+		F2FS_OPTION(sbi).compress_level = 0;
+		return 0;
+	}
+
+	str += len;
+
+	if (str[0] != ':') {
+		f2fs_info(sbi, "wrong format, e.g. <alg_name>:<compr_level>");
+		return -EINVAL;
+	}
+	if (kstrtouint(str + 1, 10, &level))
+		return -EINVAL;
+
+	if (!level || level > ZSTD_maxCLevel()) {
+		f2fs_info(sbi, "invalid zstd compress level: %d", level);
+		return -EINVAL;
+	}
+
+	F2FS_OPTION(sbi).compress_level = level;
+	return 0;
+}
+#endif
+#endif
+
+static int parse_options(struct super_block *sb, char *options, bool is_remount)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
 	substring_t args[MAX_OPT_ARGS];
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	unsigned char (*ext)[F2FS_EXTENSION_LEN];
+	int ext_cnt;
+#endif
 	char *p, *name;
 	int arg = 0;
 	kuid_t uid;
 	kgid_t gid;
-#ifdef CONFIG_QUOTA
 	int ret;
-#endif
 
 	if (!options)
-		return 0;
+		goto default_check;
 
 	while ((p = strsep(&options, ",")) != NULL) {
 		int token;
+
 		if (!*p)
 			continue;
 		/*
@@ -435,20 +594,17 @@
 
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 2 && !strncmp(name, "on", 2)) {
-				set_opt(sbi, BG_GC);
-				clear_opt(sbi, FORCE_FG_GC);
-			} else if (strlen(name) == 3 && !strncmp(name, "off", 3)) {
-				clear_opt(sbi, BG_GC);
-				clear_opt(sbi, FORCE_FG_GC);
-			} else if (strlen(name) == 4 && !strncmp(name, "sync", 4)) {
-				set_opt(sbi, BG_GC);
-				set_opt(sbi, FORCE_FG_GC);
+			if (!strcmp(name, "on")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
+			} else if (!strcmp(name, "off")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_OFF;
+			} else if (!strcmp(name, "sync")) {
+				F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_SYNC;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_disable_roll_forward:
 			set_opt(sbi, DISABLE_ROLL_FORWARD);
@@ -526,7 +682,8 @@
 		case Opt_active_logs:
 			if (args->from && match_int(args, &arg))
 				return -EINVAL;
-			if (arg != 2 && arg != 4 && arg != NR_CURSEG_TYPE)
+			if (arg != 2 && arg != 4 &&
+				arg != NR_CURSEG_PERSIST_TYPE)
 				return -EINVAL;
 			F2FS_OPTION(sbi).active_logs = arg;
 			break;
@@ -602,22 +759,20 @@
 
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 8 &&
-					!strncmp(name, "adaptive", 8)) {
+			if (!strcmp(name, "adaptive")) {
 				if (f2fs_sb_has_blkzoned(sbi)) {
 					f2fs_warn(sbi, "adaptive mode is not allowed with zoned block device feature");
-					kvfree(name);
+					kfree(name);
 					return -EINVAL;
 				}
-				set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
-			} else if (strlen(name) == 3 &&
-					!strncmp(name, "lfs", 3)) {
-				set_opt_mode(sbi, F2FS_MOUNT_LFS);
+				F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
+			} else if (!strcmp(name, "lfs")) {
+				F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_io_size_bits:
 			if (args->from && match_int(args, &arg))
@@ -736,69 +891,61 @@
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 10 &&
-					!strncmp(name, "user-based", 10)) {
+			if (!strcmp(name, "user-based")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_USER;
-			} else if (strlen(name) == 3 &&
-					!strncmp(name, "off", 3)) {
+			} else if (!strcmp(name, "off")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
-			} else if (strlen(name) == 8 &&
-					!strncmp(name, "fs-based", 8)) {
+			} else if (!strcmp(name, "fs-based")) {
 				F2FS_OPTION(sbi).whint_mode = WHINT_MODE_FS;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_alloc:
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
 
-			if (strlen(name) == 7 &&
-					!strncmp(name, "default", 7)) {
+			if (!strcmp(name, "default")) {
 				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
-			} else if (strlen(name) == 5 &&
-					!strncmp(name, "reuse", 5)) {
+			} else if (!strcmp(name, "reuse")) {
 				F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_REUSE;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_fsync:
 			name = match_strdup(&args[0]);
 			if (!name)
 				return -ENOMEM;
-			if (strlen(name) == 5 &&
-					!strncmp(name, "posix", 5)) {
+			if (!strcmp(name, "posix")) {
 				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
-			} else if (strlen(name) == 6 &&
-					!strncmp(name, "strict", 6)) {
+			} else if (!strcmp(name, "strict")) {
 				F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_STRICT;
-			} else if (strlen(name) == 9 &&
-					!strncmp(name, "nobarrier", 9)) {
+			} else if (!strcmp(name, "nobarrier")) {
 				F2FS_OPTION(sbi).fsync_mode =
 							FSYNC_MODE_NOBARRIER;
 			} else {
-				kvfree(name);
+				kfree(name);
 				return -EINVAL;
 			}
-			kvfree(name);
+			kfree(name);
 			break;
 		case Opt_test_dummy_encryption:
-#ifdef CONFIG_FS_ENCRYPTION
-			if (!f2fs_sb_has_encrypt(sbi)) {
-				f2fs_err(sbi, "Encrypt feature is off");
-				return -EINVAL;
-			}
-
-			F2FS_OPTION(sbi).test_dummy_encryption = true;
-			f2fs_info(sbi, "Test dummy encryption mode enabled");
+			ret = f2fs_set_test_dummy_encryption(sb, p, &args[0],
+							     is_remount);
+			if (ret)
+				return ret;
+			break;
+		case Opt_inlinecrypt:
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
+			sb->s_flags |= SB_INLINECRYPT;
 #else
-			f2fs_info(sbi, "Test dummy encryption mount option ignored");
+			f2fs_info(sbi, "inline encryption not supported");
 #endif
 			break;
 		case Opt_checkpoint_disable_cap_perc:
@@ -821,12 +968,152 @@
 		case Opt_checkpoint_enable:
 			clear_opt(sbi, DISABLE_CHECKPOINT);
 			break;
+		case Opt_checkpoint_merge:
+			set_opt(sbi, MERGE_CHECKPOINT);
+			break;
+		case Opt_nocheckpoint_merge:
+			clear_opt(sbi, MERGE_CHECKPOINT);
+			break;
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		case Opt_compress_algorithm:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+			if (!strcmp(name, "lzo")) {
+#ifdef CONFIG_F2FS_FS_LZO
+				F2FS_OPTION(sbi).compress_level = 0;
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZO;
+#else
+				f2fs_info(sbi, "kernel doesn't support lzo compression");
+#endif
+			} else if (!strncmp(name, "lz4", 3)) {
+#ifdef CONFIG_F2FS_FS_LZ4
+				ret = f2fs_set_lz4hc_level(sbi, name);
+				if (ret) {
+					kfree(name);
+					return -EINVAL;
+				}
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZ4;
+#else
+				f2fs_info(sbi, "kernel doesn't support lz4 compression");
+#endif
+			} else if (!strncmp(name, "zstd", 4)) {
+#ifdef CONFIG_F2FS_FS_ZSTD
+				ret = f2fs_set_zstd_level(sbi, name);
+				if (ret) {
+					kfree(name);
+					return -EINVAL;
+				}
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_ZSTD;
+#else
+				f2fs_info(sbi, "kernel doesn't support zstd compression");
+#endif
+			} else if (!strcmp(name, "lzo-rle")) {
+#ifdef CONFIG_F2FS_FS_LZORLE
+				F2FS_OPTION(sbi).compress_level = 0;
+				F2FS_OPTION(sbi).compress_algorithm =
+								COMPRESS_LZORLE;
+#else
+				f2fs_info(sbi, "kernel doesn't support lzorle compression");
+#endif
+			} else {
+				kfree(name);
+				return -EINVAL;
+			}
+			kfree(name);
+			break;
+		case Opt_compress_log_size:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			if (args->from && match_int(args, &arg))
+				return -EINVAL;
+			if (arg < MIN_COMPRESS_LOG_SIZE ||
+				arg > MAX_COMPRESS_LOG_SIZE) {
+				f2fs_err(sbi,
+					"Compress cluster log size is out of range");
+				return -EINVAL;
+			}
+			F2FS_OPTION(sbi).compress_log_size = arg;
+			break;
+		case Opt_compress_extension:
+			if (!f2fs_sb_has_compression(sbi)) {
+				f2fs_info(sbi, "Image doesn't support compression");
+				break;
+			}
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+
+			ext = F2FS_OPTION(sbi).extensions;
+			ext_cnt = F2FS_OPTION(sbi).compress_ext_cnt;
+
+			if (strlen(name) >= F2FS_EXTENSION_LEN ||
+				ext_cnt >= COMPRESS_EXT_NUM) {
+				f2fs_err(sbi,
+					"invalid extension length/number");
+				kfree(name);
+				return -EINVAL;
+			}
+
+			strcpy(ext[ext_cnt], name);
+			F2FS_OPTION(sbi).compress_ext_cnt++;
+			kfree(name);
+			break;
+		case Opt_compress_chksum:
+			F2FS_OPTION(sbi).compress_chksum = true;
+			break;
+		case Opt_compress_mode:
+			name = match_strdup(&args[0]);
+			if (!name)
+				return -ENOMEM;
+			if (!strcmp(name, "fs")) {
+				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
+			} else if (!strcmp(name, "user")) {
+				F2FS_OPTION(sbi).compress_mode = COMPR_MODE_USER;
+			} else {
+				kfree(name);
+				return -EINVAL;
+			}
+			kfree(name);
+			break;
+		case Opt_compress_cache:
+			set_opt(sbi, COMPRESS_CACHE);
+			break;
+#else
+		case Opt_compress_algorithm:
+		case Opt_compress_log_size:
+		case Opt_compress_extension:
+		case Opt_compress_chksum:
+		case Opt_compress_mode:
+		case Opt_compress_cache:
+			f2fs_info(sbi, "compression options not supported");
+			break;
+#endif
+		case Opt_atgc:
+			set_opt(sbi, ATGC);
+			break;
+		case Opt_gc_merge:
+			set_opt(sbi, GC_MERGE);
+			break;
+		case Opt_nogc_merge:
+			clear_opt(sbi, GC_MERGE);
+			break;
 		default:
 			f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
 				 p);
 			return -EINVAL;
 		}
 	}
+default_check:
 #ifdef CONFIG_QUOTA
 	if (f2fs_check_quota_options(sbi))
 		return -EINVAL;
@@ -847,8 +1134,19 @@
 		return -EINVAL;
 	}
 #endif
+	/*
+	 * The BLKZONED feature indicates that the drive was formatted with
+	 * zone alignment optimization. This is optional for host-aware
+	 * devices, but mandatory for host-managed zoned block devices.
+	 */
+#ifndef CONFIG_BLK_DEV_ZONED
+	if (f2fs_sb_has_blkzoned(sbi)) {
+		f2fs_err(sbi, "Zoned block device support is not enabled");
+		return -EINVAL;
+	}
+#endif
 
-	if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
+	if (F2FS_IO_SIZE_BITS(sbi) && !f2fs_lfs_mode(sbi)) {
 		f2fs_err(sbi, "Should set mode=lfs with %uKB-sized IO",
 			 F2FS_IO_SIZE_KB(sbi));
 		return -EINVAL;
@@ -878,16 +1176,21 @@
 		}
 	}
 
-	if (test_opt(sbi, DISABLE_CHECKPOINT) && test_opt(sbi, LFS)) {
-		f2fs_err(sbi, "LFS not compatible with checkpoint=disable\n");
+	if (test_opt(sbi, DISABLE_CHECKPOINT) && f2fs_lfs_mode(sbi)) {
+		f2fs_err(sbi, "LFS not compatible with checkpoint=disable");
 		return -EINVAL;
 	}
 
 	/* Not pass down write hints if the number of active logs is lesser
-	 * than NR_CURSEG_TYPE.
+	 * than NR_CURSEG_PERSIST_TYPE.
 	 */
-	if (F2FS_OPTION(sbi).active_logs != NR_CURSEG_TYPE)
+	if (F2FS_OPTION(sbi).active_logs != NR_CURSEG_PERSIST_TYPE)
 		F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
+
+	if (f2fs_sb_has_readonly(sbi) && !f2fs_readonly(sbi->sb)) {
+		f2fs_err(sbi, "Allow to mount readonly mode only");
+		return -EROFS;
+	}
 	return 0;
 }
 
@@ -903,7 +1206,9 @@
 
 	/* Initialize f2fs-specific inode info */
 	atomic_set(&fi->dirty_pages, 0);
+	atomic_set(&fi->i_compr_blocks, 0);
 	init_rwsem(&fi->i_sem);
+	spin_lock_init(&fi->i_size_lock);
 	INIT_LIST_HEAD(&fi->dirty_list);
 	INIT_LIST_HEAD(&fi->gdirty_list);
 	INIT_LIST_HEAD(&fi->inmem_ilist);
@@ -917,6 +1222,8 @@
 	/* Will be used by directory only */
 	fi->i_dir_level = F2FS_SB(sb)->dir_level;
 
+	fi->ra_offset = -1;
+
 	return &fi->vfs_inode;
 }
 
@@ -1064,6 +1371,7 @@
 		blkdev_put(FDEV(i).bdev, FMODE_EXCL);
 #ifdef CONFIG_BLK_DEV_ZONED
 		kvfree(FDEV(i).blkz_seq);
+		kfree(FDEV(i).zone_capacity_blocks);
 #endif
 	}
 	kvfree(sbi->devs);
@@ -1084,6 +1392,12 @@
 	mutex_lock(&sbi->umount_mutex);
 
 	/*
+	 * flush all issued checkpoints and stop checkpoint issue thread.
+	 * after then, all checkpoints should be done by each process context.
+	 */
+	f2fs_stop_ckpt_thread(sbi);
+
+	/*
 	 * We don't need to do checkpoint when superblock is clean.
 	 * But, the previous checkpoint was not done by umount, it needs to do
 	 * clean checkpoint again.
@@ -1123,6 +1437,8 @@
 
 	f2fs_bug_on(sbi, sbi->fsync_node_num);
 
+	f2fs_destroy_compress_inode(sbi);
+
 	iput(sbi->node_inode);
 	sbi->node_inode = NULL;
 
@@ -1139,26 +1455,31 @@
 	f2fs_destroy_node_manager(sbi);
 	f2fs_destroy_segment_manager(sbi);
 
+	f2fs_destroy_post_read_wq(sbi);
+
 	kvfree(sbi->ckpt);
 
 	sb->s_fs_info = NULL;
 	if (sbi->s_chksum_driver)
 		crypto_free_shash(sbi->s_chksum_driver);
-	kvfree(sbi->raw_super);
+	kfree(sbi->raw_super);
 
 	destroy_device_list(sbi);
+	f2fs_destroy_page_array_cache(sbi);
+	f2fs_destroy_xattr_caches(sbi);
 	mempool_destroy(sbi->write_io_dummy);
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 #endif
+	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
 	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);
+	utf8_unload(sb->s_encoding);
 #endif
-	kvfree(sbi);
+	kfree(sbi);
 }
 
 int f2fs_sync_fs(struct super_block *sb, int sync)
@@ -1176,16 +1497,8 @@
 	if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
 		return -EAGAIN;
 
-	if (sync) {
-		struct cp_control cpc;
-
-		cpc.reason = __get_cp_reason(sbi);
-
-		mutex_lock(&sbi->gc_mutex);
-		err = f2fs_write_checkpoint(sbi, &cpc);
-		mutex_unlock(&sbi->gc_mutex);
-	}
-	f2fs_trace_ios(NULL, 1);
+	if (sync)
+		err = f2fs_issue_checkpoint(sbi);
 
 	return err;
 }
@@ -1202,6 +1515,10 @@
 	/* must be clean, since sync_filesystem() was already called */
 	if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
 		return -EINVAL;
+
+	/* ensure no checkpoint required */
+	if (!llist_empty(&F2FS_SB(sb)->cprc_info.issue_list))
+		return -EINVAL;
 	return 0;
 }
 
@@ -1347,18 +1664,71 @@
 #endif
 }
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+static inline void f2fs_show_compress_options(struct seq_file *seq,
+							struct super_block *sb)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+	char *algtype = "";
+	int i;
+
+	if (!f2fs_sb_has_compression(sbi))
+		return;
+
+	switch (F2FS_OPTION(sbi).compress_algorithm) {
+	case COMPRESS_LZO:
+		algtype = "lzo";
+		break;
+	case COMPRESS_LZ4:
+		algtype = "lz4";
+		break;
+	case COMPRESS_ZSTD:
+		algtype = "zstd";
+		break;
+	case COMPRESS_LZORLE:
+		algtype = "lzo-rle";
+		break;
+	}
+	seq_printf(seq, ",compress_algorithm=%s", algtype);
+
+	if (F2FS_OPTION(sbi).compress_level)
+		seq_printf(seq, ":%d", F2FS_OPTION(sbi).compress_level);
+
+	seq_printf(seq, ",compress_log_size=%u",
+			F2FS_OPTION(sbi).compress_log_size);
+
+	for (i = 0; i < F2FS_OPTION(sbi).compress_ext_cnt; i++) {
+		seq_printf(seq, ",compress_extension=%s",
+			F2FS_OPTION(sbi).extensions[i]);
+	}
+
+	if (F2FS_OPTION(sbi).compress_chksum)
+		seq_puts(seq, ",compress_chksum");
+
+	if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_FS)
+		seq_printf(seq, ",compress_mode=%s", "fs");
+	else if (F2FS_OPTION(sbi).compress_mode == COMPR_MODE_USER)
+		seq_printf(seq, ",compress_mode=%s", "user");
+
+	if (test_opt(sbi, COMPRESS_CACHE))
+		seq_puts(seq, ",compress_cache");
+}
+#endif
+
 static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
 
-	if (!f2fs_readonly(sbi->sb) && test_opt(sbi, BG_GC)) {
-		if (test_opt(sbi, FORCE_FG_GC))
-			seq_printf(seq, ",background_gc=%s", "sync");
-		else
-			seq_printf(seq, ",background_gc=%s", "on");
-	} else {
+	if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_SYNC)
+		seq_printf(seq, ",background_gc=%s", "sync");
+	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_ON)
+		seq_printf(seq, ",background_gc=%s", "on");
+	else if (F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF)
 		seq_printf(seq, ",background_gc=%s", "off");
-	}
+
+	if (test_opt(sbi, GC_MERGE))
+		seq_puts(seq, ",gc_merge");
+
 	if (test_opt(sbi, DISABLE_ROLL_FORWARD))
 		seq_puts(seq, ",disable_roll_forward");
 	if (test_opt(sbi, NORECOVERY))
@@ -1414,9 +1784,9 @@
 		seq_puts(seq, ",data_flush");
 
 	seq_puts(seq, ",mode=");
-	if (test_opt(sbi, ADAPTIVE))
+	if (F2FS_OPTION(sbi).fs_mode == FS_MODE_ADAPTIVE)
 		seq_puts(seq, "adaptive");
-	else if (test_opt(sbi, LFS))
+	else if (F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS)
 		seq_puts(seq, "lfs");
 	seq_printf(seq, ",active_logs=%u", F2FS_OPTION(sbi).active_logs);
 	if (test_opt(sbi, RESERVE_ROOT))
@@ -1452,10 +1822,11 @@
 		seq_printf(seq, ",whint_mode=%s", "user-based");
 	else if (F2FS_OPTION(sbi).whint_mode == WHINT_MODE_FS)
 		seq_printf(seq, ",whint_mode=%s", "fs-based");
-#ifdef CONFIG_FS_ENCRYPTION
-	if (F2FS_OPTION(sbi).test_dummy_encryption)
-		seq_puts(seq, ",test_dummy_encryption");
-#endif
+
+	fscrypt_show_test_dummy_encryption(seq, ',', sbi->sb);
+
+	if (sbi->sb->s_flags & SB_INLINECRYPT)
+		seq_puts(seq, ",inlinecrypt");
 
 	if (F2FS_OPTION(sbi).alloc_mode == ALLOC_MODE_DEFAULT)
 		seq_printf(seq, ",alloc_mode=%s", "default");
@@ -1465,42 +1836,63 @@
 	if (test_opt(sbi, DISABLE_CHECKPOINT))
 		seq_printf(seq, ",checkpoint=disable:%u",
 				F2FS_OPTION(sbi).unusable_cap);
+	if (test_opt(sbi, MERGE_CHECKPOINT))
+		seq_puts(seq, ",checkpoint_merge");
+	else
+		seq_puts(seq, ",nocheckpoint_merge");
 	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)
 		seq_printf(seq, ",fsync_mode=%s", "strict");
 	else if (F2FS_OPTION(sbi).fsync_mode == FSYNC_MODE_NOBARRIER)
 		seq_printf(seq, ",fsync_mode=%s", "nobarrier");
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	f2fs_show_compress_options(seq, sbi->sb);
+#endif
+
+	if (test_opt(sbi, ATGC))
+		seq_puts(seq, ",atgc");
 	return 0;
 }
 
 static void default_options(struct f2fs_sb_info *sbi)
 {
 	/* init some FS parameters */
-	F2FS_OPTION(sbi).active_logs = NR_CURSEG_TYPE;
+	if (f2fs_sb_has_readonly(sbi))
+		F2FS_OPTION(sbi).active_logs = NR_CURSEG_RO_TYPE;
+	else
+		F2FS_OPTION(sbi).active_logs = NR_CURSEG_PERSIST_TYPE;
+
 	F2FS_OPTION(sbi).inline_xattr_size = DEFAULT_INLINE_XATTR_ADDRS;
 	F2FS_OPTION(sbi).whint_mode = WHINT_MODE_OFF;
 	F2FS_OPTION(sbi).alloc_mode = ALLOC_MODE_DEFAULT;
 	F2FS_OPTION(sbi).fsync_mode = FSYNC_MODE_POSIX;
-	F2FS_OPTION(sbi).test_dummy_encryption = false;
 	F2FS_OPTION(sbi).s_resuid = make_kuid(&init_user_ns, F2FS_DEF_RESUID);
 	F2FS_OPTION(sbi).s_resgid = make_kgid(&init_user_ns, F2FS_DEF_RESGID);
+	F2FS_OPTION(sbi).compress_algorithm = COMPRESS_LZ4;
+	F2FS_OPTION(sbi).compress_log_size = MIN_COMPRESS_LOG_SIZE;
+	F2FS_OPTION(sbi).compress_ext_cnt = 0;
+	F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
+	F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
 
-	set_opt(sbi, BG_GC);
+	sbi->sb->s_flags &= ~SB_INLINECRYPT;
+
 	set_opt(sbi, INLINE_XATTR);
 	set_opt(sbi, INLINE_DATA);
 	set_opt(sbi, INLINE_DENTRY);
 	set_opt(sbi, EXTENT_CACHE);
 	set_opt(sbi, NOHEAP);
 	clear_opt(sbi, DISABLE_CHECKPOINT);
+	set_opt(sbi, MERGE_CHECKPOINT);
 	F2FS_OPTION(sbi).unusable_cap = 0;
 	sbi->sb->s_flags |= SB_LAZYTIME;
 	set_opt(sbi, FLUSH_MERGE);
 	set_opt(sbi, DISCARD);
 	if (f2fs_sb_has_blkzoned(sbi))
-		set_opt_mode(sbi, F2FS_MOUNT_LFS);
+		F2FS_OPTION(sbi).fs_mode = FS_MODE_LFS;
 	else
-		set_opt_mode(sbi, F2FS_MOUNT_ADAPTIVE);
+		F2FS_OPTION(sbi).fs_mode = FS_MODE_ADAPTIVE;
 
 #ifdef CONFIG_F2FS_FS_XATTR
 	set_opt(sbi, XATTR_USER);
@@ -1533,8 +1925,8 @@
 	f2fs_update_time(sbi, DISABLE_TIME);
 
 	while (!f2fs_time_over(sbi, DISABLE_TIME)) {
-		mutex_lock(&sbi->gc_mutex);
-		err = f2fs_gc(sbi, true, false, NULL_SEGNO);
+		down_write(&sbi->gc_lock);
+		err = f2fs_gc(sbi, true, false, false, NULL_SEGNO);
 		if (err == -ENODATA) {
 			err = 0;
 			break;
@@ -1545,7 +1937,7 @@
 
 	ret = sync_filesystem(sbi->sb);
 	if (ret || err) {
-		err = ret ? ret: err;
+		err = ret ? ret : err;
 		goto restore_flag;
 	}
 
@@ -1555,7 +1947,7 @@
 		goto restore_flag;
 	}
 
-	mutex_lock(&sbi->gc_mutex);
+	down_write(&sbi->gc_lock);
 	cpc.reason = CP_PAUSE;
 	set_sbi_flag(sbi, SBI_CP_DISABLED);
 	err = f2fs_write_checkpoint(sbi, &cpc);
@@ -1567,20 +1959,32 @@
 	spin_unlock(&sbi->stat_lock);
 
 out_unlock:
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 restore_flag:
-	sbi->sb->s_flags = s_flags;	/* Restore MS_RDONLY status */
+	sbi->sb->s_flags = s_flags;	/* Restore SB_RDONLY status */
 	return err;
 }
 
 static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
 {
-	mutex_lock(&sbi->gc_mutex);
+	int retry = DEFAULT_RETRY_IO_COUNT;
+
+	/* we should flush all the data to keep data consistency */
+	do {
+		sync_inodes_sb(sbi->sb);
+		cond_resched();
+		congestion_wait(BLK_RW_ASYNC, DEFAULT_IO_TIMEOUT);
+	} while (get_pages(sbi, F2FS_DIRTY_DATA) && retry--);
+
+	if (unlikely(retry < 0))
+		f2fs_warn(sbi, "checkpoint=enable has some unwritten data.");
+
+	down_write(&sbi->gc_lock);
 	f2fs_dirty_to_prefree(sbi);
 
 	clear_sbi_flag(sbi, SBI_CP_DISABLED);
 	set_sbi_flag(sbi, SBI_IS_DIRTY);
-	mutex_unlock(&sbi->gc_mutex);
+	up_write(&sbi->gc_lock);
 
 	f2fs_sync_fs(sbi->sb, 1);
 }
@@ -1591,11 +1995,14 @@
 	struct f2fs_mount_info org_mount_opt;
 	unsigned long old_sb_flags;
 	int err;
-	bool need_restart_gc = false;
-	bool need_stop_gc = false;
+	bool need_restart_gc = false, need_stop_gc = false;
+	bool need_restart_ckpt = false, need_stop_ckpt = false;
+	bool need_restart_flush = false, need_stop_flush = 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 no_atgc = !test_opt(sbi, ATGC);
+	bool no_compress_cache = !test_opt(sbi, COMPRESS_CACHE);
 	bool checkpoint_changed;
 #ifdef CONFIG_QUOTA
 	int i, j;
@@ -1617,7 +2024,7 @@
 				GFP_KERNEL);
 			if (!org_mount_opt.s_qf_names[i]) {
 				for (j = 0; j < i; j++)
-					kvfree(org_mount_opt.s_qf_names[j]);
+					kfree(org_mount_opt.s_qf_names[j]);
 				return -ENOMEM;
 			}
 		} else {
@@ -1638,7 +2045,7 @@
 	default_options(sbi);
 
 	/* parse mount options */
-	err = parse_options(sb, data);
+	err = parse_options(sb, data, true);
 	if (err)
 		goto restore_opts;
 	checkpoint_changed =
@@ -1651,6 +2058,11 @@
 	if (f2fs_readonly(sb) && (*flags & SB_RDONLY))
 		goto skip;
 
+	if (f2fs_sb_has_readonly(sbi) && !(*flags & SB_RDONLY)) {
+		err = -EROFS;
+		goto restore_opts;
+	}
+
 #ifdef CONFIG_QUOTA
 	if (!f2fs_readonly(sb) && (*flags & SB_RDONLY)) {
 		err = dquot_suspend(sb, -1);
@@ -1668,6 +2080,13 @@
 		}
 	}
 #endif
+	/* disallow enable atgc dynamically */
+	if (no_atgc == !!test_opt(sbi, ATGC)) {
+		err = -EINVAL;
+		f2fs_warn(sbi, "switch atgc option is not allowed");
+		goto restore_opts;
+	}
+
 	/* disallow enable/disable extent_cache dynamically */
 	if (no_extent_cache == !!test_opt(sbi, EXTENT_CACHE)) {
 		err = -EINVAL;
@@ -1681,6 +2100,12 @@
 		goto restore_opts;
 	}
 
+	if (no_compress_cache == !!test_opt(sbi, COMPRESS_CACHE)) {
+		err = -EINVAL;
+		f2fs_warn(sbi, "switch compress_cache option is not allowed");
+		goto restore_opts;
+	}
+
 	if ((*flags & SB_RDONLY) && test_opt(sbi, DISABLE_CHECKPOINT)) {
 		err = -EINVAL;
 		f2fs_warn(sbi, "disabling checkpoint not compatible with read-only");
@@ -1692,7 +2117,9 @@
 	 * or if background_gc = off is passed in mount
 	 * option. Also sync the filesystem.
 	 */
-	if ((*flags & SB_RDONLY) || !test_opt(sbi, BG_GC)) {
+	if ((*flags & SB_RDONLY) ||
+			(F2FS_OPTION(sbi).bggc_mode == BGGC_MODE_OFF &&
+			!test_opt(sbi, GC_MERGE))) {
 		if (sbi->gc_thread) {
 			f2fs_stop_gc_thread(sbi);
 			need_restart_gc = true;
@@ -1706,7 +2133,6 @@
 
 	if (*flags & SB_RDONLY ||
 		F2FS_OPTION(sbi).whint_mode != org_mount_opt.whint_mode) {
-		writeback_inodes_sb(sb, WB_REASON_SYNC);
 		sync_inodes_sb(sb);
 
 		set_sbi_flag(sbi, SBI_IS_DIRTY);
@@ -1715,14 +2141,19 @@
 		clear_sbi_flag(sbi, SBI_IS_CLOSE);
 	}
 
-	if (checkpoint_changed) {
-		if (test_opt(sbi, DISABLE_CHECKPOINT)) {
-			err = f2fs_disable_checkpoint(sbi);
-			if (err)
-				goto restore_gc;
-		} else {
-			f2fs_enable_checkpoint(sbi);
+	if ((*flags & SB_RDONLY) || test_opt(sbi, DISABLE_CHECKPOINT) ||
+			!test_opt(sbi, MERGE_CHECKPOINT)) {
+		f2fs_stop_ckpt_thread(sbi);
+		need_restart_ckpt = true;
+	} else {
+		err = f2fs_start_ckpt_thread(sbi);
+		if (err) {
+			f2fs_err(sbi,
+			    "Failed to start F2FS issue_checkpoint_thread (%d)",
+			    err);
+			goto restore_gc;
 		}
+		need_stop_ckpt = true;
 	}
 
 	/*
@@ -1732,16 +2163,29 @@
 	if ((*flags & SB_RDONLY) || !test_opt(sbi, FLUSH_MERGE)) {
 		clear_opt(sbi, FLUSH_MERGE);
 		f2fs_destroy_flush_cmd_control(sbi, false);
+		need_restart_flush = true;
 	} else {
 		err = f2fs_create_flush_cmd_control(sbi);
 		if (err)
-			goto restore_gc;
+			goto restore_ckpt;
+		need_stop_flush = true;
 	}
+
+	if (checkpoint_changed) {
+		if (test_opt(sbi, DISABLE_CHECKPOINT)) {
+			err = f2fs_disable_checkpoint(sbi);
+			if (err)
+				goto restore_flush;
+		} else {
+			f2fs_enable_checkpoint(sbi);
+		}
+	}
+
 skip:
 #ifdef CONFIG_QUOTA
 	/* Release old quota file names */
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(org_mount_opt.s_qf_names[i]);
+		kfree(org_mount_opt.s_qf_names[i]);
 #endif
 	/* Update the POSIXACL Flag */
 	sb->s_flags = (sb->s_flags & ~SB_POSIXACL) |
@@ -1751,6 +2195,21 @@
 	adjust_unusable_cap_perc(sbi);
 	*flags = (*flags & ~SB_LAZYTIME) | (sb->s_flags & SB_LAZYTIME);
 	return 0;
+restore_flush:
+	if (need_restart_flush) {
+		if (f2fs_create_flush_cmd_control(sbi))
+			f2fs_warn(sbi, "background flush thread has stopped");
+	} else if (need_stop_flush) {
+		clear_opt(sbi, FLUSH_MERGE);
+		f2fs_destroy_flush_cmd_control(sbi, false);
+	}
+restore_ckpt:
+	if (need_restart_ckpt) {
+		if (f2fs_start_ckpt_thread(sbi))
+			f2fs_warn(sbi, "background ckpt thread has stopped");
+	} else if (need_stop_ckpt) {
+		f2fs_stop_ckpt_thread(sbi);
+	}
 restore_gc:
 	if (need_restart_gc) {
 		if (f2fs_start_gc_thread(sbi))
@@ -1762,7 +2221,7 @@
 #ifdef CONFIG_QUOTA
 	F2FS_OPTION(sbi).s_jquota_fmt = org_mount_opt.s_jquota_fmt;
 	for (i = 0; i < MAXQUOTAS; i++) {
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 		F2FS_OPTION(sbi).s_qf_names[i] = org_mount_opt.s_qf_names[i];
 	}
 #endif
@@ -1798,7 +2257,8 @@
 		page = read_cache_page_gfp(mapping, blkidx, GFP_NOFS);
 		if (IS_ERR(page)) {
 			if (PTR_ERR(page) == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto repeat;
 			}
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
@@ -1853,7 +2313,8 @@
 							&page, &fsdata);
 		if (unlikely(err)) {
 			if (err == -ENOMEM) {
-				congestion_wait(BLK_RW_ASYNC, HZ/50);
+				congestion_wait(BLK_RW_ASYNC,
+						DEFAULT_IO_TIMEOUT);
 				goto retry;
 			}
 			set_sbi_flag(F2FS_SB(sb), SBI_QUOTA_NEED_REPAIR);
@@ -2181,7 +2642,7 @@
 	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
 	int ret;
 
-	down_read(&sbi->quota_sem);
+	down_read_nested(&sbi->quota_sem, SINGLE_DEPTH_NESTING);
 	ret = dquot_commit(dquot);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
@@ -2205,13 +2666,10 @@
 static int f2fs_dquot_release(struct dquot *dquot)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(dquot->dq_sb);
-	int ret;
+	int ret = dquot_release(dquot);
 
-	down_read(&sbi->quota_sem);
-	ret = dquot_release(dquot);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
-	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2219,29 +2677,22 @@
 {
 	struct super_block *sb = dquot->dq_sb;
 	struct f2fs_sb_info *sbi = F2FS_SB(sb);
-	int ret;
-
-	down_read(&sbi->quota_sem);
-	ret = dquot_mark_dquot_dirty(dquot);
+	int 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;
+	int ret = dquot_commit_info(sb, type);
 
-	down_read(&sbi->quota_sem);
-	ret = dquot_commit_info(sb, type);
 	if (ret < 0)
 		set_sbi_flag(sbi, SBI_QUOTA_NEED_REPAIR);
-	up_read(&sbi->quota_sem);
 	return ret;
 }
 
@@ -2334,18 +2785,53 @@
 				ctx, len, fs_data, XATTR_CREATE);
 }
 
-static bool f2fs_dummy_context(struct inode *inode)
+static const union fscrypt_policy *f2fs_get_dummy_policy(struct super_block *sb)
 {
-	return DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(inode));
+	return F2FS_OPTION(F2FS_SB(sb)).dummy_enc_policy.policy;
+}
+
+static bool f2fs_has_stable_inodes(struct super_block *sb)
+{
+	return true;
+}
+
+static void f2fs_get_ino_and_lblk_bits(struct super_block *sb,
+				       int *ino_bits_ret, int *lblk_bits_ret)
+{
+	*ino_bits_ret = 8 * sizeof(nid_t);
+	*lblk_bits_ret = 8 * sizeof(block_t);
+}
+
+static int f2fs_get_num_devices(struct super_block *sb)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+
+	if (f2fs_is_multi_device(sbi))
+		return sbi->s_ndevs;
+	return 1;
+}
+
+static void f2fs_get_devices(struct super_block *sb,
+			     struct request_queue **devs)
+{
+	struct f2fs_sb_info *sbi = F2FS_SB(sb);
+	int i;
+
+	for (i = 0; i < sbi->s_ndevs; i++)
+		devs[i] = bdev_get_queue(FDEV(i).bdev);
 }
 
 static const struct fscrypt_operations f2fs_cryptops = {
-	.key_prefix	= "f2fs:",
-	.get_context	= f2fs_get_context,
-	.set_context	= f2fs_set_context,
-	.dummy_context	= f2fs_dummy_context,
-	.empty_dir	= f2fs_empty_dir,
-	.max_namelen	= F2FS_NAME_LEN,
+	.key_prefix		= "f2fs:",
+	.get_context		= f2fs_get_context,
+	.set_context		= f2fs_set_context,
+	.get_dummy_policy	= f2fs_get_dummy_policy,
+	.empty_dir		= f2fs_empty_dir,
+	.max_namelen		= F2FS_NAME_LEN,
+	.has_stable_inodes	= f2fs_has_stable_inodes,
+	.get_ino_and_lblk_bits	= f2fs_get_ino_and_lblk_bits,
+	.get_num_devices	= f2fs_get_num_devices,
+	.get_devices		= f2fs_get_devices,
 };
 #endif
 
@@ -2394,10 +2880,10 @@
 	.get_parent = f2fs_get_parent,
 };
 
-static loff_t max_file_blocks(void)
+loff_t max_file_blocks(struct inode *inode)
 {
 	loff_t result = 0;
-	loff_t leaf_count = DEF_ADDRS_PER_BLOCK;
+	loff_t leaf_count;
 
 	/*
 	 * note: previously, result is equal to (DEF_ADDRS_PER_INODE -
@@ -2406,6 +2892,11 @@
 	 * result as zero.
 	 */
 
+	if (inode && f2fs_compressed_file(inode))
+		leaf_count = ADDRS_PER_BLOCK(inode);
+	else
+		leaf_count = DEF_ADDRS_PER_BLOCK;
+
 	/* two direct node blocks */
 	result += (leaf_count * 2);
 
@@ -2496,10 +2987,8 @@
 	}
 
 	if (main_end_blkaddr > seg_end_blkaddr) {
-		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%u) block(%u)",
-			  main_blkaddr,
-			  segment0_blkaddr +
-			  (segment_count << log_blocks_per_seg),
+		f2fs_info(sbi, "Wrong MAIN_AREA boundary, start(%u) end(%llu) block(%u)",
+			  main_blkaddr, seg_end_blkaddr,
 			  segment_count_main << log_blocks_per_seg);
 		return true;
 	} else if (main_end_blkaddr < seg_end_blkaddr) {
@@ -2517,10 +3006,8 @@
 			err = __f2fs_commit_super(bh, NULL);
 			res = err ? "failed" : "done";
 		}
-		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%u) block(%u)",
-			  res, main_blkaddr,
-			  segment0_blkaddr +
-			  (segment_count << log_blocks_per_seg),
+		f2fs_info(sbi, "Fix alignment : %s, start(%u) end(%llu) block(%u)",
+			  res, main_blkaddr, seg_end_blkaddr,
 			  segment_count_main << log_blocks_per_seg);
 		if (err)
 			return true;
@@ -2531,7 +3018,7 @@
 static int sanity_check_raw_super(struct f2fs_sb_info *sbi,
 				struct buffer_head *bh)
 {
-	block_t segment_count, segs_per_sec, secs_per_zone;
+	block_t segment_count, segs_per_sec, secs_per_zone, segment_count_main;
 	block_t total_sections, blocks_per_seg;
 	struct f2fs_super_block *raw_super = (struct f2fs_super_block *)
 					(bh->b_data + F2FS_SUPER_OFFSET);
@@ -2560,13 +3047,6 @@
 		}
 	}
 
-	/* Currently, support only 4KB page cache size */
-	if (F2FS_BLKSIZE != PAGE_SIZE) {
-		f2fs_info(sbi, "Invalid page_cache_size (%lu), supports only 4KB",
-			  PAGE_SIZE);
-		return -EFSCORRUPTED;
-	}
-
 	/* Currently, support only 4KB block size */
 	if (le32_to_cpu(raw_super->log_blocksize) != F2FS_BLKSIZE_BITS) {
 		f2fs_info(sbi, "Invalid log_blocksize (%u), supports only %u",
@@ -2601,6 +3081,7 @@
 	}
 
 	segment_count = le32_to_cpu(raw_super->segment_count);
+	segment_count_main = le32_to_cpu(raw_super->segment_count_main);
 	segs_per_sec = le32_to_cpu(raw_super->segs_per_sec);
 	secs_per_zone = le32_to_cpu(raw_super->secs_per_zone);
 	total_sections = le32_to_cpu(raw_super->section_count);
@@ -2614,14 +3095,19 @@
 		return -EFSCORRUPTED;
 	}
 
-	if (total_sections > segment_count ||
-			total_sections < F2FS_MIN_SEGMENTS ||
+	if (total_sections > segment_count_main || total_sections < 1 ||
 			segs_per_sec > segment_count || !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_main != total_sections * segs_per_sec) {
+		f2fs_info(sbi, "Invalid segment/section count (%u != %u * %u)",
+			  segment_count_main, total_sections, segs_per_sec);
+		return -EFSCORRUPTED;
+	}
+
 	if ((segment_count / segs_per_sec) < total_sections) {
 		f2fs_info(sbi, "Small segment_count (%u < %u * %u)",
 			  segment_count, segs_per_sec, total_sections);
@@ -2634,6 +3120,27 @@
 		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;
+		}
+	} else {
+		if (__F2FS_HAS_FEATURE(raw_super, F2FS_FEATURE_BLKZONED) &&
+					!bdev_is_zoned(sbi->sb->s_bdev)) {
+			f2fs_info(sbi, "Zoned block device path is missing");
+			return -EFSCORRUPTED;
+		}
+	}
+
 	if (secs_per_zone > total_sections || !secs_per_zone) {
 		f2fs_info(sbi, "Wrong secs_per_zone / total_sections (%u, %u)",
 			  secs_per_zone, total_sections);
@@ -2707,14 +3214,15 @@
 	ovp_segments = le32_to_cpu(ckpt->overprov_segment_count);
 	reserved_segments = le32_to_cpu(ckpt->rsvd_segment_count);
 
-	if (unlikely(fsmeta < F2FS_MIN_SEGMENTS ||
+	if (!f2fs_sb_has_readonly(sbi) &&
+			unlikely(fsmeta < F2FS_MIN_META_SEGMENTS ||
 			ovp_segments == 0 || reserved_segments == 0)) {
 		f2fs_err(sbi, "Wrong layout: check mkfs.f2fs version");
 		return 1;
 	}
-
 	user_block_count = le64_to_cpu(ckpt->user_block_count);
-	segment_count_main = le32_to_cpu(raw_super->segment_count_main);
+	segment_count_main = le32_to_cpu(raw_super->segment_count_main) +
+			(f2fs_sb_has_readonly(sbi) ? 1 : 0);
 	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) {
@@ -2745,6 +3253,10 @@
 		if (le32_to_cpu(ckpt->cur_node_segno[i]) >= main_segs ||
 			le16_to_cpu(ckpt->cur_node_blkoff[i]) >= blocks_per_seg)
 			return 1;
+
+		if (f2fs_sb_has_readonly(sbi))
+			goto check_data;
+
 		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])) {
@@ -2755,10 +3267,15 @@
 			}
 		}
 	}
+check_data:
 	for (i = 0; i < NR_CURSEG_DATA_TYPE; i++) {
 		if (le32_to_cpu(ckpt->cur_data_segno[i]) >= main_segs ||
 			le16_to_cpu(ckpt->cur_data_blkoff[i]) >= blocks_per_seg)
 			return 1;
+
+		if (f2fs_sb_has_readonly(sbi))
+			goto skip_cross;
+
 		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])) {
@@ -2780,7 +3297,7 @@
 			}
 		}
 	}
-
+skip_cross:
 	sit_bitmap_size = le32_to_cpu(ckpt->sit_ver_bitmap_bytesize);
 	nat_bitmap_size = le32_to_cpu(ckpt->nat_ver_bitmap_bytesize);
 
@@ -2795,7 +3312,7 @@
 	cp_payload = __cp_payload(sbi);
 	if (cp_pack_start_sum < cp_payload + 1 ||
 		cp_pack_start_sum > blocks_per_seg - 1 -
-			NR_CURSEG_TYPE) {
+			NR_CURSEG_PERSIST_TYPE) {
 		f2fs_err(sbi, "Wrong cp_pack_start_sum: %u",
 			 cp_pack_start_sum);
 		return 1;
@@ -2834,9 +3351,9 @@
 	sbi->total_node_count =
 		(le32_to_cpu(raw_super->segment_count_nat) / 2)
 			* sbi->blocks_per_seg * NAT_ENTRY_PER_BLOCK;
-	sbi->root_ino_num = le32_to_cpu(raw_super->root_ino);
-	sbi->node_ino_num = le32_to_cpu(raw_super->node_ino);
-	sbi->meta_ino_num = le32_to_cpu(raw_super->meta_ino);
+	F2FS_ROOT_INO(sbi) = le32_to_cpu(raw_super->root_ino);
+	F2FS_NODE_INO(sbi) = le32_to_cpu(raw_super->node_ino);
+	F2FS_META_INO(sbi) = le32_to_cpu(raw_super->meta_ino);
 	sbi->cur_victim_sec = NULL_SECNO;
 	sbi->next_victim_seg[BG_GC] = NULL_SEGNO;
 	sbi->next_victim_seg[FG_GC] = NULL_SEGNO;
@@ -2868,6 +3385,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)
@@ -2887,15 +3405,35 @@
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
+
+struct f2fs_report_zones_args {
+	struct f2fs_dev_info *dev;
+	bool zone_cap_mismatch;
+};
+
+static int f2fs_report_zone_cb(struct blk_zone *zone, unsigned int idx,
+			      void *data)
+{
+	struct f2fs_report_zones_args *rz_args = data;
+
+	if (zone->type == BLK_ZONE_TYPE_CONVENTIONAL)
+		return 0;
+
+	set_bit(idx, rz_args->dev->blkz_seq);
+	rz_args->dev->zone_capacity_blocks[idx] = zone->capacity >>
+						F2FS_LOG_SECTORS_PER_BLOCK;
+	if (zone->len != zone->capacity && !rz_args->zone_cap_mismatch)
+		rz_args->zone_cap_mismatch = true;
+
+	return 0;
+}
+
 static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)
 {
 	struct block_device *bdev = FDEV(devi).bdev;
 	sector_t nr_sectors = bdev->bd_part->nr_sects;
-	sector_t sector = 0;
-	struct blk_zone *zones;
-	unsigned int i, nr_zones;
-	unsigned int n = 0;
-	int err = -EIO;
+	struct f2fs_report_zones_args rep_zone_arg;
+	int ret;
 
 	if (!f2fs_sb_has_blkzoned(sbi))
 		return 0;
@@ -2920,38 +3458,27 @@
 	if (!FDEV(devi).blkz_seq)
 		return -ENOMEM;
 
-#define F2FS_REPORT_NR_ZONES   4096
-
-	zones = f2fs_kzalloc(sbi,
-			     array_size(F2FS_REPORT_NR_ZONES,
-					sizeof(struct blk_zone)),
-			     GFP_KERNEL);
-	if (!zones)
+	/* Get block zones type and zone-capacity */
+	FDEV(devi).zone_capacity_blocks = f2fs_kzalloc(sbi,
+					FDEV(devi).nr_blkz * sizeof(block_t),
+					GFP_KERNEL);
+	if (!FDEV(devi).zone_capacity_blocks)
 		return -ENOMEM;
 
-	/* Get block zones type */
-	while (zones && sector < nr_sectors) {
+	rep_zone_arg.dev = &FDEV(devi);
+	rep_zone_arg.zone_cap_mismatch = false;
 
-		nr_zones = F2FS_REPORT_NR_ZONES;
-		err = blkdev_report_zones(bdev, sector, zones, &nr_zones);
-		if (err)
-			break;
-		if (!nr_zones) {
-			err = -EIO;
-			break;
-		}
+	ret = blkdev_report_zones(bdev, 0, BLK_ALL_ZONES, f2fs_report_zone_cb,
+				  &rep_zone_arg);
+	if (ret < 0)
+		return ret;
 
-		for (i = 0; i < nr_zones; i++) {
-			if (zones[i].type != BLK_ZONE_TYPE_CONVENTIONAL)
-				set_bit(n, FDEV(devi).blkz_seq);
-			sector += zones[i].len;
-			n++;
-		}
+	if (!rep_zone_arg.zone_cap_mismatch) {
+		kfree(FDEV(devi).zone_capacity_blocks);
+		FDEV(devi).zone_capacity_blocks = NULL;
 	}
 
-	kvfree(zones);
-
-	return err;
+	return 0;
 }
 #endif
 
@@ -2981,6 +3508,7 @@
 			f2fs_err(sbi, "Unable to read %dth superblock",
 				 block + 1);
 			err = -EIO;
+			*recovery = 1;
 			continue;
 		}
 
@@ -2990,6 +3518,7 @@
 			f2fs_err(sbi, "Can't find valid F2FS filesystem in %dth superblock",
 				 block + 1);
 			brelse(bh);
+			*recovery = 1;
 			continue;
 		}
 
@@ -3002,13 +3531,9 @@
 		brelse(bh);
 	}
 
-	/* Fail to read any one of the superblocks*/
-	if (err < 0)
-		*recovery = 1;
-
 	/* No valid superblock */
 	if (!*raw_super)
-		kvfree(super);
+		kfree(super);
 	else
 		err = 0;
 
@@ -3117,7 +3642,7 @@
 #ifdef CONFIG_BLK_DEV_ZONED
 		if (bdev_zoned_model(FDEV(i).bdev) == BLK_ZONED_HM &&
 				!f2fs_sb_has_blkzoned(sbi)) {
-			f2fs_err(sbi, "Zoned block device feature not enabled\n");
+			f2fs_err(sbi, "Zoned block device feature not enabled");
 			return -EINVAL;
 		}
 		if (bdev_zoned_model(FDEV(i).bdev) != BLK_ZONED_NONE) {
@@ -3149,17 +3674,11 @@
 static int f2fs_setup_casefold(struct f2fs_sb_info *sbi)
 {
 #ifdef CONFIG_UNICODE
-	if (f2fs_sb_has_casefold(sbi) && !sbi->s_encoding) {
+	if (f2fs_sb_has_casefold(sbi) && !sbi->sb->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,
@@ -3180,9 +3699,8 @@
 			 "%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;
+		sbi->sb->s_encoding = encoding;
+		sbi->sb->s_encoding_flags = encoding_flags;
 	}
 #else
 	if (f2fs_sb_has_casefold(sbi)) {
@@ -3260,18 +3778,6 @@
 		sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
 						sizeof(raw_super->uuid));
 
-	/*
-	 * The BLKZONED feature indicates that the drive was formatted with
-	 * zone alignment optimization. This is optional for host-aware
-	 * devices, but mandatory for host-managed zoned block devices.
-	 */
-#ifndef CONFIG_BLK_DEV_ZONED
-	if (f2fs_sb_has_blkzoned(sbi)) {
-		f2fs_err(sbi, "Zoned block device support is not enabled");
-		err = -EOPNOTSUPP;
-		goto free_sb_buf;
-	}
-#endif
 	default_options(sbi);
 	/* parse mount options */
 	options = kstrdup((const char *)data, GFP_KERNEL);
@@ -3280,12 +3786,11 @@
 		goto free_sb_buf;
 	}
 
-	err = parse_options(sb, options);
+	err = parse_options(sb, options, false);
 	if (err)
 		goto free_options;
 
-	sbi->max_file_blocks = max_file_blocks();
-	sb->s_maxbytes = sbi->max_file_blocks <<
+	sb->s_maxbytes = max_file_blocks(NULL) <<
 				le32_to_cpu(raw_super->log_blocksize);
 	sb->s_max_links = F2FS_LINK_MAX;
 
@@ -3324,10 +3829,9 @@
 
 	/* init f2fs-specific super block info */
 	sbi->valid_super_block = valid_super_block;
-	mutex_init(&sbi->gc_mutex);
+	init_rwsem(&sbi->gc_lock);
 	mutex_init(&sbi->writepages);
-	mutex_init(&sbi->cp_mutex);
-	mutex_init(&sbi->resize_mutex);
+	init_rwsem(&sbi->cp_global_sem);
 	init_rwsem(&sbi->node_write);
 	init_rwsem(&sbi->node_change);
 
@@ -3338,9 +3842,10 @@
 	/* init iostat info */
 	spin_lock_init(&sbi->iostat_lock);
 	sbi->iostat_enable = false;
+	sbi->iostat_period_ms = DEFAULT_IOSTAT_PERIOD_MS;
 
 	for (i = 0; i < NR_PAGE_TYPE; i++) {
-		int n = (i == META) ? 1: NR_TEMP_TYPE;
+		int n = (i == META) ? 1 : NR_TEMP_TYPE;
 		int j;
 
 		sbi->write_io[i] =
@@ -3359,6 +3864,8 @@
 			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);
 		}
 	}
 
@@ -3380,12 +3887,20 @@
 		}
 	}
 
+	/* init per sbi slab cache */
+	err = f2fs_init_xattr_caches(sbi);
+	if (err)
+		goto free_io_dummy;
+	err = f2fs_init_page_array_cache(sbi);
+	if (err)
+		goto free_xattr_cache;
+
 	/* get an inode for meta space */
 	sbi->meta_inode = f2fs_iget(sb, F2FS_META_INO(sbi));
 	if (IS_ERR(sbi->meta_inode)) {
 		f2fs_err(sbi, "Failed to read F2FS meta data inode");
 		err = PTR_ERR(sbi->meta_inode);
-		goto free_io_dummy;
+		goto free_page_array_cache;
 	}
 
 	err = f2fs_get_valid_checkpoint(sbi);
@@ -3411,6 +3926,12 @@
 		goto free_devices;
 	}
 
+	err = f2fs_init_post_read_wq(sbi);
+	if (err) {
+		f2fs_err(sbi, "Failed to initialize post read workqueue");
+		goto free_devices;
+	}
+
 	sbi->total_valid_node_count =
 				le32_to_cpu(sbi->ckpt->valid_node_count);
 	percpu_counter_set(&sbi->total_valid_inode_count,
@@ -3436,6 +3957,19 @@
 
 	f2fs_init_fsync_node_info(sbi);
 
+	/* setup checkpoint request control and start checkpoint issue thread */
+	f2fs_init_ckpt_req_control(sbi);
+	if (!f2fs_readonly(sb) && !test_opt(sbi, DISABLE_CHECKPOINT) &&
+			test_opt(sbi, MERGE_CHECKPOINT)) {
+		err = f2fs_start_ckpt_thread(sbi);
+		if (err) {
+			f2fs_err(sbi,
+			    "Failed to start F2FS issue_checkpoint_thread (%d)",
+			    err);
+			goto stop_ckpt_thread;
+		}
+	}
+
 	/* setup f2fs internal modules */
 	err = f2fs_build_segment_manager(sbi);
 	if (err) {
@@ -3451,10 +3985,7 @@
 	}
 
 	/* For write statistics */
-	if (sb->s_bdev->bd_part)
-		sbi->sectors_written_start =
-			(u64)part_stat_read(sb->s_bdev->bd_part,
-					    sectors[STAT_WRITE]);
+	sbi->sectors_written_start = f2fs_get_sectors_written(sbi);
 
 	/* Read accumulated write IO statistics if exists */
 	seg_i = CURSEG_I(sbi, CURSEG_HOT_NODE);
@@ -3496,10 +4027,14 @@
 		goto free_node_inode;
 	}
 
-	err = f2fs_register_sysfs(sbi);
+	err = f2fs_init_compress_inode(sbi);
 	if (err)
 		goto free_root_inode;
 
+	err = f2fs_register_sysfs(sbi);
+	if (err)
+		goto free_compress_inode;
+
 #ifdef CONFIG_QUOTA
 	/* Enable quota usage during mount */
 	if (f2fs_sb_has_quota_ino(sbi) && !f2fs_readonly(sb)) {
@@ -3508,7 +4043,7 @@
 			f2fs_err(sbi, "Cannot turn on quotas: error %d", err);
 	}
 #endif
-	/* if there are nt orphan nodes free them */
+	/* if there are any orphan inodes, free them */
 	err = f2fs_recover_orphan_inodes(sbi);
 	if (err)
 		goto free_meta;
@@ -3525,9 +4060,15 @@
 		 */
 		if (f2fs_hw_is_readonly(sbi)) {
 			if (!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
-				err = -EROFS;
-				f2fs_err(sbi, "Need to recover fsync data, but write access unavailable");
-				goto free_meta;
+				err = f2fs_recover_fsync_data(sbi, true);
+				if (err > 0) {
+					err = -EROFS;
+					f2fs_err(sbi, "Need to recover fsync data, but "
+						"write access unavailable, please try "
+						"mount w/ disable_roll_forward or norecovery");
+				}
+				if (err < 0)
+					goto free_meta;
 			}
 			f2fs_info(sbi, "write access unavailable, skipping recovery");
 			goto reset_checkpoint;
@@ -3557,7 +4098,20 @@
 			goto free_meta;
 		}
 	}
+
+	/*
+	 * If the f2fs is not readonly and fsync data recovery succeeds,
+	 * check zoned block devices' write pointer consistency.
+	 */
+	if (!err && !f2fs_readonly(sb) && f2fs_sb_has_blkzoned(sbi)) {
+		err = f2fs_check_write_pointer(sbi);
+		if (err)
+			goto free_meta;
+	}
+
 reset_checkpoint:
+	f2fs_init_inmem_curseg(sbi);
+
 	/* f2fs_recover_fsync_data() cleared this already */
 	clear_sbi_flag(sbi, SBI_POR_DOING);
 
@@ -3573,7 +4127,8 @@
 	 * If filesystem is not mounted as read-only then
 	 * do start the gc_thread.
 	 */
-	if (test_opt(sbi, BG_GC) && !f2fs_readonly(sb)) {
+	if ((F2FS_OPTION(sbi).bggc_mode != BGGC_MODE_OFF ||
+		test_opt(sbi, GC_MERGE)) && !f2fs_readonly(sb)) {
 		/* After POR, we can run background GC thread.*/
 		err = f2fs_start_gc_thread(sbi);
 		if (err)
@@ -3620,6 +4175,8 @@
 	/* evict some inodes being cached by GC */
 	evict_inodes(sb);
 	f2fs_unregister_sysfs(sbi);
+free_compress_inode:
+	f2fs_destroy_compress_inode(sbi);
 free_root_inode:
 	dput(sb->s_root);
 	sb->s_root = NULL;
@@ -3634,6 +4191,9 @@
 	f2fs_destroy_node_manager(sbi);
 free_sm:
 	f2fs_destroy_segment_manager(sbi);
+	f2fs_destroy_post_read_wq(sbi);
+stop_ckpt_thread:
+	f2fs_stop_ckpt_thread(sbi);
 free_devices:
 	destroy_device_list(sbi);
 	kvfree(sbi->ckpt);
@@ -3641,6 +4201,10 @@
 	make_bad_inode(sbi->meta_inode);
 	iput(sbi->meta_inode);
 	sbi->meta_inode = NULL;
+free_page_array_cache:
+	f2fs_destroy_page_array_cache(sbi);
+free_xattr_cache:
+	f2fs_destroy_xattr_caches(sbi);
 free_io_dummy:
 	mempool_destroy(sbi->write_io_dummy);
 free_percpu:
@@ -3650,20 +4214,22 @@
 		kvfree(sbi->write_io[i]);
 
 #ifdef CONFIG_UNICODE
-	utf8_unload(sbi->s_encoding);
+	utf8_unload(sb->s_encoding);
+	sb->s_encoding = NULL;
 #endif
 free_options:
 #ifdef CONFIG_QUOTA
 	for (i = 0; i < MAXQUOTAS; i++)
-		kvfree(F2FS_OPTION(sbi).s_qf_names[i]);
+		kfree(F2FS_OPTION(sbi).s_qf_names[i]);
 #endif
+	fscrypt_free_dummy_policy(&F2FS_OPTION(sbi).dummy_enc_policy);
 	kvfree(options);
 free_sb_buf:
-	kvfree(raw_super);
+	kfree(raw_super);
 free_sbi:
 	if (sbi->s_chksum_driver)
 		crypto_free_shash(sbi->s_chksum_driver);
-	kvfree(sbi);
+	kfree(sbi);
 
 	/* give only one another chance */
 	if (retry_cnt > 0 && skip_recovery) {
@@ -3689,6 +4255,15 @@
 		f2fs_stop_gc_thread(sbi);
 		f2fs_stop_discard_thread(sbi);
 
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+		/*
+		 * latter evict_inode() can bypass checking and invalidating
+		 * compress inode cache.
+		 */
+		if (test_opt(sbi, COMPRESS_CACHE))
+			truncate_inode_pages_final(COMPRESS_MAPPING(sbi));
+#endif
+
 		if (is_sbi_flag_set(sbi, SBI_IS_DIRTY) ||
 				!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
 			struct cp_control cpc = {
@@ -3742,8 +4317,6 @@
 		return -EINVAL;
 	}
 
-	f2fs_build_trace_ios();
-
 	err = init_inodecache();
 	if (err)
 		goto fail;
@@ -3756,12 +4329,18 @@
 	err = f2fs_create_checkpoint_caches();
 	if (err)
 		goto free_segment_manager_caches;
-	err = f2fs_create_extent_cache();
+	err = f2fs_create_recovery_cache();
 	if (err)
 		goto free_checkpoint_caches;
-	err = f2fs_init_sysfs();
+	err = f2fs_create_extent_cache();
+	if (err)
+		goto free_recovery_cache;
+	err = f2fs_create_garbage_collection_cache();
 	if (err)
 		goto free_extent_cache;
+	err = f2fs_init_sysfs();
+	if (err)
+		goto free_garbage_collection_cache;
 	err = register_shrinker(&f2fs_shrinker_info);
 	if (err)
 		goto free_sysfs;
@@ -3772,8 +4351,32 @@
 	err = f2fs_init_post_read_processing();
 	if (err)
 		goto free_root_stats;
+	err = f2fs_init_bio_entry_cache();
+	if (err)
+		goto free_post_read;
+	err = f2fs_init_bioset();
+	if (err)
+		goto free_bio_enrty_cache;
+	err = f2fs_init_compress_mempool();
+	if (err)
+		goto free_bioset;
+	err = f2fs_init_compress_cache();
+	if (err)
+		goto free_compress_mempool;
+	err = f2fs_create_casefold_cache();
+	if (err)
+		goto free_compress_cache;
 	return 0;
-
+free_compress_cache:
+	f2fs_destroy_compress_cache();
+free_compress_mempool:
+	f2fs_destroy_compress_mempool();
+free_bioset:
+	f2fs_destroy_bioset();
+free_bio_enrty_cache:
+	f2fs_destroy_bio_entry_cache();
+free_post_read:
+	f2fs_destroy_post_read_processing();
 free_root_stats:
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
@@ -3781,8 +4384,12 @@
 	unregister_shrinker(&f2fs_shrinker_info);
 free_sysfs:
 	f2fs_exit_sysfs();
+free_garbage_collection_cache:
+	f2fs_destroy_garbage_collection_cache();
 free_extent_cache:
 	f2fs_destroy_extent_cache();
+free_recovery_cache:
+	f2fs_destroy_recovery_cache();
 free_checkpoint_caches:
 	f2fs_destroy_checkpoint_caches();
 free_segment_manager_caches:
@@ -3797,17 +4404,23 @@
 
 static void __exit exit_f2fs_fs(void)
 {
+	f2fs_destroy_casefold_cache();
+	f2fs_destroy_compress_cache();
+	f2fs_destroy_compress_mempool();
+	f2fs_destroy_bioset();
+	f2fs_destroy_bio_entry_cache();
 	f2fs_destroy_post_read_processing();
 	f2fs_destroy_root_stats();
 	unregister_filesystem(&f2fs_fs_type);
 	unregister_shrinker(&f2fs_shrinker_info);
 	f2fs_exit_sysfs();
+	f2fs_destroy_garbage_collection_cache();
 	f2fs_destroy_extent_cache();
+	f2fs_destroy_recovery_cache();
 	f2fs_destroy_checkpoint_caches();
 	f2fs_destroy_segment_manager_caches();
 	f2fs_destroy_node_manager_caches();
 	destroy_inodecache();
-	f2fs_destroy_trace_ios();
 }
 
 module_init(init_f2fs_fs)
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 3a5360e..3ce2eac 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -11,10 +11,13 @@
 #include <linux/f2fs_fs.h>
 #include <linux/seq_file.h>
 #include <linux/unicode.h>
+#include <linux/ioprio.h>
+#include <linux/sysfs.h>
 
 #include "f2fs.h"
 #include "segment.h"
 #include "gc.h"
+#include <trace/events/f2fs.h>
 
 static struct proc_dir_entry *f2fs_proc_root;
 
@@ -25,11 +28,16 @@
 	DCC_INFO,	/* struct discard_cmd_control */
 	NM_INFO,	/* struct f2fs_nm_info */
 	F2FS_SBI,	/* struct f2fs_sb_info */
+#ifdef CONFIG_F2FS_STAT_FS
+	STAT_INFO,	/* struct f2fs_stat_info */
+#endif
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 	FAULT_INFO_RATE,	/* struct f2fs_fault_info */
 	FAULT_INFO_TYPE,	/* struct f2fs_fault_info */
 #endif
 	RESERVED_BLOCKS,	/* struct f2fs_sb_info */
+	CPRC_INFO,	/* struct ckpt_req_control */
+	ATGC_INFO,	/* struct atgc_management */
 };
 
 struct f2fs_attr {
@@ -42,6 +50,9 @@
 	int id;
 };
 
+static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
+			     struct f2fs_sb_info *sbi, char *buf);
+
 static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
 {
 	if (struct_type == GC_THREAD)
@@ -59,14 +70,110 @@
 					struct_type == FAULT_INFO_TYPE)
 		return (unsigned char *)&F2FS_OPTION(sbi).fault_info;
 #endif
+#ifdef CONFIG_F2FS_STAT_FS
+	else if (struct_type == STAT_INFO)
+		return (unsigned char *)F2FS_STAT(sbi);
+#endif
+	else if (struct_type == CPRC_INFO)
+		return (unsigned char *)&sbi->cprc_info;
+	else if (struct_type == ATGC_INFO)
+		return (unsigned char *)&sbi->am;
 	return NULL;
 }
 
 static ssize_t dirty_segments_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
-	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)(dirty_segments(sbi)));
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(dirty_segments(sbi)));
+}
+
+static ssize_t free_segments_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(free_segments(sbi)));
+}
+
+static ssize_t ovp_segments_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(overprovision_segments(sbi)));
+}
+
+static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%llu\n",
+			(unsigned long long)(sbi->kbytes_written +
+			((f2fs_get_sectors_written(sbi) -
+				sbi->sectors_written_start) >> 1)));
+}
+
+static ssize_t sb_status_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%lx\n", sbi->s_flag);
+}
+
+static ssize_t features_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	int len = 0;
+
+	if (f2fs_sb_has_encrypt(sbi))
+		len += scnprintf(buf, PAGE_SIZE - len, "%s",
+						"encryption");
+	if (f2fs_sb_has_blkzoned(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "blkzoned");
+	if (f2fs_sb_has_extra_attr(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "extra_attr");
+	if (f2fs_sb_has_project_quota(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "projquota");
+	if (f2fs_sb_has_inode_chksum(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "inode_checksum");
+	if (f2fs_sb_has_flexible_inline_xattr(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "flexible_inline_xattr");
+	if (f2fs_sb_has_quota_ino(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "quota_ino");
+	if (f2fs_sb_has_inode_crtime(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "inode_crtime");
+	if (f2fs_sb_has_lost_found(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "lost_found");
+	if (f2fs_sb_has_verity(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "verity");
+	if (f2fs_sb_has_sb_chksum(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "sb_checksum");
+	if (f2fs_sb_has_casefold(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "casefold");
+	if (f2fs_sb_has_readonly(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "readonly");
+	if (f2fs_sb_has_compression(sbi))
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "compression");
+	len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
+				len ? ", " : "", "pin_file");
+	len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
+	return len;
+}
+
+static ssize_t current_reserved_blocks_show(struct f2fs_attr *a,
+					struct f2fs_sb_info *sbi, char *buf)
+{
+	return sprintf(buf, "%u\n", sbi->current_reserved_blocks);
 }
 
 static ssize_t unusable_show(struct f2fs_attr *a,
@@ -78,90 +185,67 @@
 		unusable = sbi->unusable_block_count;
 	else
 		unusable = f2fs_get_unusable_blocks(sbi);
-	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)unusable);
+	return sprintf(buf, "%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
+	struct super_block *sb = sbi->sb;
+
 	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);
+			sb->s_encoding->charset,
+			(sb->s_encoding->version >> 16) & 0xff,
+			(sb->s_encoding->version >> 8) & 0xff,
+			sb->s_encoding->version & 0xff);
 #endif
-	return snprintf(buf, PAGE_SIZE, "(none)");
+	return sprintf(buf, "(none)");
 }
 
-static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
+static ssize_t mounted_time_sec_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
-	struct super_block *sb = sbi->sb;
+	return sprintf(buf, "%llu", SIT_I(sbi)->mounted_time);
+}
 
-	if (!sb->s_bdev->bd_part)
-		return snprintf(buf, PAGE_SIZE, "0\n");
+#ifdef CONFIG_F2FS_STAT_FS
+static ssize_t moved_blocks_foreground_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
 
+	return sprintf(buf, "%llu\n",
+		(unsigned long long)(si->tot_blks -
+			(si->bg_data_blks + si->bg_node_blks)));
+}
+
+static ssize_t moved_blocks_background_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+
+	return sprintf(buf, "%llu\n",
+		(unsigned long long)(si->bg_data_blks + si->bg_node_blks));
+}
+
+static ssize_t avg_vblocks_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	struct f2fs_stat_info *si = F2FS_STAT(sbi);
+
+	si->dirty_count = dirty_segments(sbi);
+	f2fs_update_sit_info(sbi);
+	return sprintf(buf, "%llu\n", (unsigned long long)(si->avg_vblocks));
+}
+#endif
+
+static ssize_t main_blkaddr_show(struct f2fs_attr *a,
+				struct f2fs_sb_info *sbi, char *buf)
+{
 	return snprintf(buf, PAGE_SIZE, "%llu\n",
-		(unsigned long long)(sbi->kbytes_written +
-			BD_PART_WRITTEN(sbi)));
-}
-
-static ssize_t features_show(struct f2fs_attr *a,
-		struct f2fs_sb_info *sbi, char *buf)
-{
-	struct super_block *sb = sbi->sb;
-	int len = 0;
-
-	if (!sb->s_bdev->bd_part)
-		return snprintf(buf, PAGE_SIZE, "0\n");
-
-	if (f2fs_sb_has_encrypt(sbi))
-		len += snprintf(buf, PAGE_SIZE - len, "%s",
-						"encryption");
-	if (f2fs_sb_has_blkzoned(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "blkzoned");
-	if (f2fs_sb_has_extra_attr(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "extra_attr");
-	if (f2fs_sb_has_project_quota(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "projquota");
-	if (f2fs_sb_has_inode_chksum(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "inode_checksum");
-	if (f2fs_sb_has_flexible_inline_xattr(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "flexible_inline_xattr");
-	if (f2fs_sb_has_quota_ino(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "quota_ino");
-	if (f2fs_sb_has_inode_crtime(sbi))
-		len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
-				len ? ", " : "", "inode_crtime");
-	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, "\n");
-	return len;
-}
-
-static ssize_t current_reserved_blocks_show(struct f2fs_attr *a,
-					struct f2fs_sb_info *sbi, char *buf)
-{
-	return snprintf(buf, PAGE_SIZE, "%u\n", sbi->current_reserved_blocks);
+			(unsigned long long)MAIN_BLKADDR(sbi));
 }
 
 static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
@@ -181,23 +265,54 @@
 		int hot_count = sbi->raw_super->hot_ext_count;
 		int len = 0, i;
 
-		len += snprintf(buf + len, PAGE_SIZE - len,
+		len += scnprintf(buf + len, PAGE_SIZE - len,
 						"cold file extension:\n");
 		for (i = 0; i < cold_count; i++)
-			len += snprintf(buf + len, PAGE_SIZE - len, "%s\n",
+			len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n",
 								extlist[i]);
 
-		len += snprintf(buf + len, PAGE_SIZE - len,
+		len += scnprintf(buf + len, PAGE_SIZE - len,
 						"hot file extension:\n");
 		for (i = cold_count; i < cold_count + hot_count; i++)
-			len += snprintf(buf + len, PAGE_SIZE - len, "%s\n",
+			len += scnprintf(buf + len, PAGE_SIZE - len, "%s\n",
 								extlist[i]);
 		return len;
 	}
 
+	if (!strcmp(a->attr.name, "ckpt_thread_ioprio")) {
+		struct ckpt_req_control *cprc = &sbi->cprc_info;
+		int len = 0;
+		int class = IOPRIO_PRIO_CLASS(cprc->ckpt_thread_ioprio);
+		int data = IOPRIO_PRIO_DATA(cprc->ckpt_thread_ioprio);
+
+		if (class == IOPRIO_CLASS_RT)
+			len += scnprintf(buf + len, PAGE_SIZE - len, "rt,");
+		else if (class == IOPRIO_CLASS_BE)
+			len += scnprintf(buf + len, PAGE_SIZE - len, "be,");
+		else
+			return -EINVAL;
+
+		len += scnprintf(buf + len, PAGE_SIZE - len, "%d\n", data);
+		return len;
+	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (!strcmp(a->attr.name, "compr_written_block"))
+		return snprintf(buf, PAGE_SIZE, "%llu\n",
+						sbi->compr_written_block);
+
+	if (!strcmp(a->attr.name, "compr_saved_block"))
+		return snprintf(buf, PAGE_SIZE, "%llu\n",
+						sbi->compr_saved_block);
+
+	if (!strcmp(a->attr.name, "compr_new_inode"))
+		return snprintf(buf, PAGE_SIZE, "%u\n",
+						sbi->compr_new_inode);
+#endif
+
 	ui = (unsigned int *)(ptr + a->offset);
 
-	return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
+	return sprintf(buf, "%u\n", *ui);
 }
 
 static ssize_t __sbi_store(struct f2fs_attr *a,
@@ -248,6 +363,38 @@
 		return ret ? ret : count;
 	}
 
+	if (!strcmp(a->attr.name, "ckpt_thread_ioprio")) {
+		const char *name = strim((char *)buf);
+		struct ckpt_req_control *cprc = &sbi->cprc_info;
+		int class;
+		long data;
+		int ret;
+
+		if (!strncmp(name, "rt,", 3))
+			class = IOPRIO_CLASS_RT;
+		else if (!strncmp(name, "be,", 3))
+			class = IOPRIO_CLASS_BE;
+		else
+			return -EINVAL;
+
+		name += 3;
+		ret = kstrtol(name, 10, &data);
+		if (ret)
+			return ret;
+		if (data >= IOPRIO_BE_NR || data < 0)
+			return -EINVAL;
+
+		cprc->ckpt_thread_ioprio = IOPRIO_PRIO_VALUE(class, data);
+		if (test_opt(sbi, MERGE_CHECKPOINT)) {
+			ret = set_task_ioprio(cprc->f2fs_issue_ckpt,
+					cprc->ckpt_thread_ioprio);
+			if (ret)
+				return ret;
+		}
+
+		return count;
+	}
+
 	ui = (unsigned int *)(ptr + a->offset);
 
 	ret = kstrtoul(skip_spaces(buf), 0, &t);
@@ -291,29 +438,37 @@
 		return -EINVAL;
 
 	if (!strcmp(a->attr.name, "gc_urgent")) {
-		if (t >= 1) {
-			sbi->gc_mode = GC_URGENT;
+		if (t == 0) {
+			sbi->gc_mode = GC_NORMAL;
+		} else if (t == 1) {
+			sbi->gc_mode = GC_URGENT_HIGH;
 			if (sbi->gc_thread) {
 				sbi->gc_thread->gc_wake = 1;
 				wake_up_interruptible_all(
 					&sbi->gc_thread->gc_wait_queue_head);
 				wake_up_discard_thread(sbi, true);
 			}
+		} else if (t == 2) {
+			sbi->gc_mode = GC_URGENT_LOW;
+		} else {
+			return -EINVAL;
+		}
+		return count;
+	}
+	if (!strcmp(a->attr.name, "gc_idle")) {
+		if (t == GC_IDLE_CB) {
+			sbi->gc_mode = GC_IDLE_CB;
+		} else if (t == GC_IDLE_GREEDY) {
+			sbi->gc_mode = GC_IDLE_GREEDY;
+		} else if (t == GC_IDLE_AT) {
+			if (!sbi->am.atgc_enabled)
+				return -EINVAL;
+			sbi->gc_mode = GC_AT;
 		} else {
 			sbi->gc_mode = GC_NORMAL;
 		}
 		return count;
 	}
-	if (!strcmp(a->attr.name, "gc_idle")) {
-		if (t == GC_IDLE_CB)
-			sbi->gc_mode = GC_IDLE_CB;
-		else if (t == GC_IDLE_GREEDY)
-			sbi->gc_mode = GC_IDLE_GREEDY;
-		else
-			sbi->gc_mode = GC_NORMAL;
-		return count;
-	}
-
 
 	if (!strcmp(a->attr.name, "iostat_enable")) {
 		sbi->iostat_enable = !!t;
@@ -322,6 +477,47 @@
 		return count;
 	}
 
+	if (!strcmp(a->attr.name, "iostat_period_ms")) {
+		if (t < MIN_IOSTAT_PERIOD_MS || t > MAX_IOSTAT_PERIOD_MS)
+			return -EINVAL;
+		spin_lock(&sbi->iostat_lock);
+		sbi->iostat_period_ms = (unsigned int)t;
+		spin_unlock(&sbi->iostat_lock);
+		return count;
+	}
+
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	if (!strcmp(a->attr.name, "compr_written_block") ||
+		!strcmp(a->attr.name, "compr_saved_block")) {
+		if (t != 0)
+			return -EINVAL;
+		sbi->compr_written_block = 0;
+		sbi->compr_saved_block = 0;
+		return count;
+	}
+
+	if (!strcmp(a->attr.name, "compr_new_inode")) {
+		if (t != 0)
+			return -EINVAL;
+		sbi->compr_new_inode = 0;
+		return count;
+	}
+#endif
+
+	if (!strcmp(a->attr.name, "atgc_candidate_ratio")) {
+		if (t > 100)
+			return -EINVAL;
+		sbi->am.candidate_ratio = t;
+		return count;
+	}
+
+	if (!strcmp(a->attr.name, "atgc_age_weight")) {
+		if (t > 100)
+			return -EINVAL;
+		sbi->am.age_weight = t;
+		return count;
+	}
+
 	*ui = (unsigned int)t;
 
 	return count;
@@ -373,42 +569,49 @@
 	complete(&sbi->s_kobj_unregister);
 }
 
-enum feat_id {
-	FEAT_CRYPTO = 0,
-	FEAT_BLKZONED,
-	FEAT_ATOMIC_WRITE,
-	FEAT_EXTRA_ATTR,
-	FEAT_PROJECT_QUOTA,
-	FEAT_INODE_CHECKSUM,
-	FEAT_FLEXIBLE_INLINE_XATTR,
-	FEAT_QUOTA_INO,
-	FEAT_INODE_CRTIME,
-	FEAT_LOST_FOUND,
-	FEAT_VERITY,
-	FEAT_SB_CHECKSUM,
-	FEAT_CASEFOLD,
-};
-
+/*
+ * Note that there are three feature list entries:
+ * 1) /sys/fs/f2fs/features
+ *   : shows runtime features supported by in-kernel f2fs along with Kconfig.
+ *     - ref. F2FS_FEATURE_RO_ATTR()
+ *
+ * 2) /sys/fs/f2fs/$s_id/features <deprecated>
+ *   : shows on-disk features enabled by mkfs.f2fs, used for old kernels. This
+ *     won't add new feature anymore, and thus, users should check entries in 3)
+ *     instead of this 2).
+ *
+ * 3) /sys/fs/f2fs/$s_id/feature_list
+ *   : shows on-disk features enabled by mkfs.f2fs per instance, which follows
+ *     sysfs entry rule where each entry should expose single value.
+ *     This list covers old feature list provided by 2) and beyond. Therefore,
+ *     please add new on-disk feature in this list only.
+ *     - ref. F2FS_SB_FEATURE_RO_ATTR()
+ */
 static ssize_t f2fs_feature_show(struct f2fs_attr *a,
 		struct f2fs_sb_info *sbi, char *buf)
 {
-	switch (a->id) {
-	case FEAT_CRYPTO:
-	case FEAT_BLKZONED:
-	case FEAT_ATOMIC_WRITE:
-	case FEAT_EXTRA_ATTR:
-	case FEAT_PROJECT_QUOTA:
-	case FEAT_INODE_CHECKSUM:
-	case FEAT_FLEXIBLE_INLINE_XATTR:
-	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;
+	return sprintf(buf, "supported\n");
+}
+
+#define F2FS_FEATURE_RO_ATTR(_name)				\
+static struct f2fs_attr f2fs_attr_##_name = {			\
+	.attr = {.name = __stringify(_name), .mode = 0444 },	\
+	.show	= f2fs_feature_show,				\
+}
+
+static ssize_t f2fs_sb_feature_show(struct f2fs_attr *a,
+		struct f2fs_sb_info *sbi, char *buf)
+{
+	if (F2FS_HAS_FEATURE(sbi, a->id))
+		return sprintf(buf, "supported\n");
+	return sprintf(buf, "unsupported\n");
+}
+
+#define F2FS_SB_FEATURE_RO_ATTR(_name, _feat)			\
+static struct f2fs_attr f2fs_attr_sb_##_name = {		\
+	.attr = {.name = __stringify(_name), .mode = 0444 },	\
+	.show	= f2fs_sb_feature_show,				\
+	.id	= F2FS_FEATURE_##_feat,				\
 }
 
 #define F2FS_ATTR_OFFSET(_struct_type, _name, _mode, _show, _store, _offset) \
@@ -428,11 +631,12 @@
 #define F2FS_GENERAL_RO_ATTR(name) \
 static struct f2fs_attr f2fs_attr_##name = __ATTR(name, 0444, name##_show, NULL)
 
-#define F2FS_FEATURE_RO_ATTR(_name, _id)			\
+#define F2FS_STAT_ATTR(_struct_type, _struct_name, _name, _elname)	\
 static struct f2fs_attr f2fs_attr_##_name = {			\
 	.attr = {.name = __stringify(_name), .mode = 0444 },	\
-	.show	= f2fs_feature_show,				\
-	.id	= _id,						\
+	.show = f2fs_sbi_show,					\
+	.struct_type = _struct_type,				\
+	.offset = offsetof(struct _struct_name, _elname),       \
 }
 
 F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_urgent_sleep_time,
@@ -467,41 +671,77 @@
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info,
 		umount_discard_timeout, interval_time[UMOUNT_DISCARD_TIMEOUT]);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_enable, iostat_enable);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_period_ms, iostat_period_ms);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, readdir_ra, readdir_ra);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_io_bytes, max_io_bytes);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_pin_file_thresh, gc_pin_file_threshold);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_super_block, extension_list, extension_list);
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 F2FS_RW_ATTR(FAULT_INFO_RATE, f2fs_fault_info, inject_rate, inject_rate);
 F2FS_RW_ATTR(FAULT_INFO_TYPE, f2fs_fault_info, inject_type, inject_type);
 #endif
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, data_io_flag, data_io_flag);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, node_io_flag, node_io_flag);
+F2FS_RW_ATTR(CPRC_INFO, ckpt_req_control, ckpt_thread_ioprio, ckpt_thread_ioprio);
 F2FS_GENERAL_RO_ATTR(dirty_segments);
+F2FS_GENERAL_RO_ATTR(free_segments);
+F2FS_GENERAL_RO_ATTR(ovp_segments);
 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);
+F2FS_GENERAL_RO_ATTR(mounted_time_sec);
+F2FS_GENERAL_RO_ATTR(main_blkaddr);
+#ifdef CONFIG_F2FS_STAT_FS
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_foreground_calls, cp_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, cp_background_calls, bg_cp_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, gc_foreground_calls, call_count);
+F2FS_STAT_ATTR(STAT_INFO, f2fs_stat_info, gc_background_calls, bg_gc);
+F2FS_GENERAL_RO_ATTR(moved_blocks_background);
+F2FS_GENERAL_RO_ATTR(moved_blocks_foreground);
+F2FS_GENERAL_RO_ATTR(avg_vblocks);
+#endif
 
 #ifdef CONFIG_FS_ENCRYPTION
-F2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);
-#endif
-#ifdef CONFIG_BLK_DEV_ZONED
-F2FS_FEATURE_RO_ATTR(block_zoned, FEAT_BLKZONED);
-#endif
-F2FS_FEATURE_RO_ATTR(atomic_write, FEAT_ATOMIC_WRITE);
-F2FS_FEATURE_RO_ATTR(extra_attr, FEAT_EXTRA_ATTR);
-F2FS_FEATURE_RO_ATTR(project_quota, FEAT_PROJECT_QUOTA);
-F2FS_FEATURE_RO_ATTR(inode_checksum, FEAT_INODE_CHECKSUM);
-F2FS_FEATURE_RO_ATTR(flexible_inline_xattr, FEAT_FLEXIBLE_INLINE_XATTR);
-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(encryption);
+F2FS_FEATURE_RO_ATTR(test_dummy_encryption_v2);
 #ifdef CONFIG_UNICODE
-F2FS_FEATURE_RO_ATTR(casefold, FEAT_CASEFOLD);
+F2FS_FEATURE_RO_ATTR(encrypted_casefold);
 #endif
+#endif /* CONFIG_FS_ENCRYPTION */
+#ifdef CONFIG_BLK_DEV_ZONED
+F2FS_FEATURE_RO_ATTR(block_zoned);
+#endif
+F2FS_FEATURE_RO_ATTR(atomic_write);
+F2FS_FEATURE_RO_ATTR(extra_attr);
+F2FS_FEATURE_RO_ATTR(project_quota);
+F2FS_FEATURE_RO_ATTR(inode_checksum);
+F2FS_FEATURE_RO_ATTR(flexible_inline_xattr);
+F2FS_FEATURE_RO_ATTR(quota_ino);
+F2FS_FEATURE_RO_ATTR(inode_crtime);
+F2FS_FEATURE_RO_ATTR(lost_found);
+#ifdef CONFIG_FS_VERITY
+F2FS_FEATURE_RO_ATTR(verity);
+#endif
+F2FS_FEATURE_RO_ATTR(sb_checksum);
+#ifdef CONFIG_UNICODE
+F2FS_FEATURE_RO_ATTR(casefold);
+#endif
+F2FS_FEATURE_RO_ATTR(readonly);
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+F2FS_FEATURE_RO_ATTR(compression);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_written_block, compr_written_block);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_saved_block, compr_saved_block);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_new_inode, compr_new_inode);
+#endif
+F2FS_FEATURE_RO_ATTR(pin_file);
+
+/* For ATGC */
+F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_candidate_ratio, candidate_ratio);
+F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_candidate_count, max_candidate_count);
+F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_weight, age_weight);
+F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_threshold, age_threshold);
 
 #define ATTR_LIST(name) (&f2fs_attr_##name.attr)
 static struct attribute *f2fs_attrs[] = {
@@ -512,6 +752,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),
@@ -533,20 +774,47 @@
 	ATTR_LIST(gc_idle_interval),
 	ATTR_LIST(umount_discard_timeout),
 	ATTR_LIST(iostat_enable),
+	ATTR_LIST(iostat_period_ms),
 	ATTR_LIST(readdir_ra),
+	ATTR_LIST(max_io_bytes),
 	ATTR_LIST(gc_pin_file_thresh),
 	ATTR_LIST(extension_list),
 #ifdef CONFIG_F2FS_FAULT_INJECTION
 	ATTR_LIST(inject_rate),
 	ATTR_LIST(inject_type),
 #endif
+	ATTR_LIST(data_io_flag),
+	ATTR_LIST(node_io_flag),
+	ATTR_LIST(ckpt_thread_ioprio),
 	ATTR_LIST(dirty_segments),
+	ATTR_LIST(free_segments),
+	ATTR_LIST(ovp_segments),
 	ATTR_LIST(unusable),
 	ATTR_LIST(lifetime_write_kbytes),
 	ATTR_LIST(features),
 	ATTR_LIST(reserved_blocks),
 	ATTR_LIST(current_reserved_blocks),
 	ATTR_LIST(encoding),
+	ATTR_LIST(mounted_time_sec),
+#ifdef CONFIG_F2FS_STAT_FS
+	ATTR_LIST(cp_foreground_calls),
+	ATTR_LIST(cp_background_calls),
+	ATTR_LIST(gc_foreground_calls),
+	ATTR_LIST(gc_background_calls),
+	ATTR_LIST(moved_blocks_foreground),
+	ATTR_LIST(moved_blocks_background),
+	ATTR_LIST(avg_vblocks),
+#endif
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	ATTR_LIST(compr_written_block),
+	ATTR_LIST(compr_saved_block),
+	ATTR_LIST(compr_new_inode),
+#endif
+	/* For ATGC */
+	ATTR_LIST(atgc_candidate_ratio),
+	ATTR_LIST(atgc_candidate_count),
+	ATTR_LIST(atgc_age_weight),
+	ATTR_LIST(atgc_age_threshold),
 	NULL,
 };
 ATTRIBUTE_GROUPS(f2fs);
@@ -554,7 +822,11 @@
 static struct attribute *f2fs_feat_attrs[] = {
 #ifdef CONFIG_FS_ENCRYPTION
 	ATTR_LIST(encryption),
+	ATTR_LIST(test_dummy_encryption_v2),
+#ifdef CONFIG_UNICODE
+	ATTR_LIST(encrypted_casefold),
 #endif
+#endif /* CONFIG_FS_ENCRYPTION */
 #ifdef CONFIG_BLK_DEV_ZONED
 	ATTR_LIST(block_zoned),
 #endif
@@ -573,10 +845,56 @@
 #ifdef CONFIG_UNICODE
 	ATTR_LIST(casefold),
 #endif
+	ATTR_LIST(readonly),
+#ifdef CONFIG_F2FS_FS_COMPRESSION
+	ATTR_LIST(compression),
+#endif
+	ATTR_LIST(pin_file),
 	NULL,
 };
 ATTRIBUTE_GROUPS(f2fs_feat);
 
+F2FS_GENERAL_RO_ATTR(sb_status);
+static struct attribute *f2fs_stat_attrs[] = {
+	ATTR_LIST(sb_status),
+	NULL,
+};
+ATTRIBUTE_GROUPS(f2fs_stat);
+
+F2FS_SB_FEATURE_RO_ATTR(encryption, ENCRYPT);
+F2FS_SB_FEATURE_RO_ATTR(block_zoned, BLKZONED);
+F2FS_SB_FEATURE_RO_ATTR(extra_attr, EXTRA_ATTR);
+F2FS_SB_FEATURE_RO_ATTR(project_quota, PRJQUOTA);
+F2FS_SB_FEATURE_RO_ATTR(inode_checksum, INODE_CHKSUM);
+F2FS_SB_FEATURE_RO_ATTR(flexible_inline_xattr, FLEXIBLE_INLINE_XATTR);
+F2FS_SB_FEATURE_RO_ATTR(quota_ino, QUOTA_INO);
+F2FS_SB_FEATURE_RO_ATTR(inode_crtime, INODE_CRTIME);
+F2FS_SB_FEATURE_RO_ATTR(lost_found, LOST_FOUND);
+F2FS_SB_FEATURE_RO_ATTR(verity, VERITY);
+F2FS_SB_FEATURE_RO_ATTR(sb_checksum, SB_CHKSUM);
+F2FS_SB_FEATURE_RO_ATTR(casefold, CASEFOLD);
+F2FS_SB_FEATURE_RO_ATTR(compression, COMPRESSION);
+F2FS_SB_FEATURE_RO_ATTR(readonly, RO);
+
+static struct attribute *f2fs_sb_feat_attrs[] = {
+	ATTR_LIST(sb_encryption),
+	ATTR_LIST(sb_block_zoned),
+	ATTR_LIST(sb_extra_attr),
+	ATTR_LIST(sb_project_quota),
+	ATTR_LIST(sb_inode_checksum),
+	ATTR_LIST(sb_flexible_inline_xattr),
+	ATTR_LIST(sb_quota_ino),
+	ATTR_LIST(sb_inode_crtime),
+	ATTR_LIST(sb_lost_found),
+	ATTR_LIST(sb_verity),
+	ATTR_LIST(sb_sb_checksum),
+	ATTR_LIST(sb_casefold),
+	ATTR_LIST(sb_compression),
+	ATTR_LIST(sb_readonly),
+	NULL,
+};
+ATTRIBUTE_GROUPS(f2fs_sb_feat);
+
 static const struct sysfs_ops f2fs_attr_ops = {
 	.show	= f2fs_attr_show,
 	.store	= f2fs_attr_store,
@@ -593,7 +911,7 @@
 };
 
 static struct kset f2fs_kset = {
-	.kobj   = {.ktype = &f2fs_ktype},
+	.kobj	= {.ktype = &f2fs_ktype},
 };
 
 static struct kobj_type f2fs_feat_ktype = {
@@ -605,6 +923,71 @@
 	.kset	= &f2fs_kset,
 };
 
+static ssize_t f2fs_stat_attr_show(struct kobject *kobj,
+				struct attribute *attr, char *buf)
+{
+	struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+								s_stat_kobj);
+	struct f2fs_attr *a = container_of(attr, struct f2fs_attr, attr);
+
+	return a->show ? a->show(a, sbi, buf) : 0;
+}
+
+static ssize_t f2fs_stat_attr_store(struct kobject *kobj, struct attribute *attr,
+						const char *buf, size_t len)
+{
+	struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+								s_stat_kobj);
+	struct f2fs_attr *a = container_of(attr, struct f2fs_attr, attr);
+
+	return a->store ? a->store(a, sbi, buf, len) : 0;
+}
+
+static void f2fs_stat_kobj_release(struct kobject *kobj)
+{
+	struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+								s_stat_kobj);
+	complete(&sbi->s_stat_kobj_unregister);
+}
+
+static const struct sysfs_ops f2fs_stat_attr_ops = {
+	.show	= f2fs_stat_attr_show,
+	.store	= f2fs_stat_attr_store,
+};
+
+static struct kobj_type f2fs_stat_ktype = {
+	.default_groups = f2fs_stat_groups,
+	.sysfs_ops	= &f2fs_stat_attr_ops,
+	.release	= f2fs_stat_kobj_release,
+};
+
+static ssize_t f2fs_sb_feat_attr_show(struct kobject *kobj,
+				struct attribute *attr, char *buf)
+{
+	struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+							s_feature_list_kobj);
+	struct f2fs_attr *a = container_of(attr, struct f2fs_attr, attr);
+
+	return a->show ? a->show(a, sbi, buf) : 0;
+}
+
+static void f2fs_feature_list_kobj_release(struct kobject *kobj)
+{
+	struct f2fs_sb_info *sbi = container_of(kobj, struct f2fs_sb_info,
+							s_feature_list_kobj);
+	complete(&sbi->s_feature_list_kobj_unregister);
+}
+
+static const struct sysfs_ops f2fs_feature_list_attr_ops = {
+	.show	= f2fs_sb_feat_attr_show,
+};
+
+static struct kobj_type f2fs_feature_list_ktype = {
+	.default_groups = f2fs_sb_feat_groups,
+	.sysfs_ops	= &f2fs_feature_list_attr_ops,
+	.release	= f2fs_feature_list_kobj_release,
+};
+
 static int __maybe_unused segment_info_seq_show(struct seq_file *seq,
 						void *offset)
 {
@@ -656,6 +1039,33 @@
 	return 0;
 }
 
+void f2fs_record_iostat(struct f2fs_sb_info *sbi)
+{
+	unsigned long long iostat_diff[NR_IO_TYPE];
+	int i;
+
+	if (time_is_after_jiffies(sbi->iostat_next_period))
+		return;
+
+	/* Need double check under the lock */
+	spin_lock(&sbi->iostat_lock);
+	if (time_is_after_jiffies(sbi->iostat_next_period)) {
+		spin_unlock(&sbi->iostat_lock);
+		return;
+	}
+	sbi->iostat_next_period = jiffies +
+				msecs_to_jiffies(sbi->iostat_period_ms);
+
+	for (i = 0; i < NR_IO_TYPE; i++) {
+		iostat_diff[i] = sbi->rw_iostat[i] -
+				sbi->prev_rw_iostat[i];
+		sbi->prev_rw_iostat[i] = sbi->rw_iostat[i];
+	}
+	spin_unlock(&sbi->iostat_lock);
+
+	trace_f2fs_iostat(sbi, iostat_diff);
+}
+
 static int __maybe_unused iostat_info_seq_show(struct seq_file *seq,
 					       void *offset)
 {
@@ -668,33 +1078,58 @@
 
 	seq_printf(seq, "time:		%-16llu\n", now);
 
-	/* print app IOs */
+	/* print app write IOs */
+	seq_puts(seq, "[WRITE]\n");
 	seq_printf(seq, "app buffered:	%-16llu\n",
-				sbi->write_iostat[APP_BUFFERED_IO]);
+				sbi->rw_iostat[APP_BUFFERED_IO]);
 	seq_printf(seq, "app direct:	%-16llu\n",
-				sbi->write_iostat[APP_DIRECT_IO]);
+				sbi->rw_iostat[APP_DIRECT_IO]);
 	seq_printf(seq, "app mapped:	%-16llu\n",
-				sbi->write_iostat[APP_MAPPED_IO]);
+				sbi->rw_iostat[APP_MAPPED_IO]);
 
-	/* print fs IOs */
+	/* print fs write IOs */
 	seq_printf(seq, "fs data:	%-16llu\n",
-				sbi->write_iostat[FS_DATA_IO]);
+				sbi->rw_iostat[FS_DATA_IO]);
 	seq_printf(seq, "fs node:	%-16llu\n",
-				sbi->write_iostat[FS_NODE_IO]);
+				sbi->rw_iostat[FS_NODE_IO]);
 	seq_printf(seq, "fs meta:	%-16llu\n",
-				sbi->write_iostat[FS_META_IO]);
+				sbi->rw_iostat[FS_META_IO]);
 	seq_printf(seq, "fs gc data:	%-16llu\n",
-				sbi->write_iostat[FS_GC_DATA_IO]);
+				sbi->rw_iostat[FS_GC_DATA_IO]);
 	seq_printf(seq, "fs gc node:	%-16llu\n",
-				sbi->write_iostat[FS_GC_NODE_IO]);
+				sbi->rw_iostat[FS_GC_NODE_IO]);
 	seq_printf(seq, "fs cp data:	%-16llu\n",
-				sbi->write_iostat[FS_CP_DATA_IO]);
+				sbi->rw_iostat[FS_CP_DATA_IO]);
 	seq_printf(seq, "fs cp node:	%-16llu\n",
-				sbi->write_iostat[FS_CP_NODE_IO]);
+				sbi->rw_iostat[FS_CP_NODE_IO]);
 	seq_printf(seq, "fs cp meta:	%-16llu\n",
-				sbi->write_iostat[FS_CP_META_IO]);
+				sbi->rw_iostat[FS_CP_META_IO]);
+
+	/* print app read IOs */
+	seq_puts(seq, "[READ]\n");
+	seq_printf(seq, "app buffered:	%-16llu\n",
+				sbi->rw_iostat[APP_BUFFERED_READ_IO]);
+	seq_printf(seq, "app direct:	%-16llu\n",
+				sbi->rw_iostat[APP_DIRECT_READ_IO]);
+	seq_printf(seq, "app mapped:	%-16llu\n",
+				sbi->rw_iostat[APP_MAPPED_READ_IO]);
+
+	/* print fs read IOs */
+	seq_printf(seq, "fs data:	%-16llu\n",
+				sbi->rw_iostat[FS_DATA_READ_IO]);
+	seq_printf(seq, "fs gc data:	%-16llu\n",
+				sbi->rw_iostat[FS_GDATA_READ_IO]);
+	seq_printf(seq, "fs compr_data:	%-16llu\n",
+				sbi->rw_iostat[FS_CDATA_READ_IO]);
+	seq_printf(seq, "fs node:	%-16llu\n",
+				sbi->rw_iostat[FS_NODE_READ_IO]);
+	seq_printf(seq, "fs meta:	%-16llu\n",
+				sbi->rw_iostat[FS_META_READ_IO]);
+
+	/* print other IOs */
+	seq_puts(seq, "[OTHER]\n");
 	seq_printf(seq, "fs discard:	%-16llu\n",
-				sbi->write_iostat[FS_DISCARD]);
+				sbi->rw_iostat[FS_DISCARD]);
 
 	return 0;
 }
@@ -759,11 +1194,23 @@
 	init_completion(&sbi->s_kobj_unregister);
 	err = kobject_init_and_add(&sbi->s_kobj, &f2fs_sb_ktype, NULL,
 				"%s", sb->s_id);
-	if (err) {
-		kobject_put(&sbi->s_kobj);
-		wait_for_completion(&sbi->s_kobj_unregister);
-		return err;
-	}
+	if (err)
+		goto put_sb_kobj;
+
+	sbi->s_stat_kobj.kset = &f2fs_kset;
+	init_completion(&sbi->s_stat_kobj_unregister);
+	err = kobject_init_and_add(&sbi->s_stat_kobj, &f2fs_stat_ktype,
+						&sbi->s_kobj, "stat");
+	if (err)
+		goto put_stat_kobj;
+
+	sbi->s_feature_list_kobj.kset = &f2fs_kset;
+	init_completion(&sbi->s_feature_list_kobj_unregister);
+	err = kobject_init_and_add(&sbi->s_feature_list_kobj,
+					&f2fs_feature_list_ktype,
+					&sbi->s_kobj, "feature_list");
+	if (err)
+		goto put_feature_list_kobj;
 
 	if (f2fs_proc_root)
 		sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root);
@@ -779,6 +1226,16 @@
 				victim_bits_seq_show, sb);
 	}
 	return 0;
+put_feature_list_kobj:
+	kobject_put(&sbi->s_feature_list_kobj);
+	wait_for_completion(&sbi->s_feature_list_kobj_unregister);
+put_stat_kobj:
+	kobject_put(&sbi->s_stat_kobj);
+	wait_for_completion(&sbi->s_stat_kobj_unregister);
+put_sb_kobj:
+	kobject_put(&sbi->s_kobj);
+	wait_for_completion(&sbi->s_kobj_unregister);
+	return err;
 }
 
 void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi)
@@ -790,6 +1247,14 @@
 		remove_proc_entry("victim_bits", sbi->s_proc);
 		remove_proc_entry(sbi->sb->s_id, f2fs_proc_root);
 	}
+
+	kobject_del(&sbi->s_stat_kobj);
+	kobject_put(&sbi->s_stat_kobj);
+	wait_for_completion(&sbi->s_stat_kobj_unregister);
+	kobject_del(&sbi->s_feature_list_kobj);
+	kobject_put(&sbi->s_feature_list_kobj);
+	wait_for_completion(&sbi->s_feature_list_kobj_unregister);
+
 	kobject_del(&sbi->s_kobj);
 	kobject_put(&sbi->s_kobj);
 	wait_for_completion(&sbi->s_kobj_unregister);
diff --git a/fs/f2fs/trace.c b/fs/f2fs/trace.c
deleted file mode 100644
index d0ab533..0000000
--- a/fs/f2fs/trace.c
+++ /dev/null
@@ -1,165 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * f2fs IO tracer
- *
- * Copyright (c) 2014 Motorola Mobility
- * Copyright (c) 2014 Jaegeuk Kim <jaegeuk@kernel.org>
- */
-#include <linux/fs.h>
-#include <linux/f2fs_fs.h>
-#include <linux/sched.h>
-#include <linux/radix-tree.h>
-
-#include "f2fs.h"
-#include "trace.h"
-
-static RADIX_TREE(pids, GFP_ATOMIC);
-static spinlock_t pids_lock;
-static struct last_io_info last_io;
-
-static inline void __print_last_io(void)
-{
-	if (!last_io.len)
-		return;
-
-	trace_printk("%3x:%3x %4x %-16s %2x %5x %5x %12x %4x\n",
-			last_io.major, last_io.minor,
-			last_io.pid, "----------------",
-			last_io.type,
-			last_io.fio.op, last_io.fio.op_flags,
-			last_io.fio.new_blkaddr,
-			last_io.len);
-	memset(&last_io, 0, sizeof(last_io));
-}
-
-static int __file_type(struct inode *inode, pid_t pid)
-{
-	if (f2fs_is_atomic_file(inode))
-		return __ATOMIC_FILE;
-	else if (f2fs_is_volatile_file(inode))
-		return __VOLATILE_FILE;
-	else if (S_ISDIR(inode->i_mode))
-		return __DIR_FILE;
-	else if (inode->i_ino == F2FS_NODE_INO(F2FS_I_SB(inode)))
-		return __NODE_FILE;
-	else if (inode->i_ino == F2FS_META_INO(F2FS_I_SB(inode)))
-		return __META_FILE;
-	else if (pid)
-		return __NORMAL_FILE;
-	else
-		return __MISC_FILE;
-}
-
-void f2fs_trace_pid(struct page *page)
-{
-	struct inode *inode = page->mapping->host;
-	pid_t pid = task_pid_nr(current);
-	void *p;
-
-	set_page_private(page, (unsigned long)pid);
-
-retry:
-	if (radix_tree_preload(GFP_NOFS))
-		return;
-
-	spin_lock(&pids_lock);
-	p = radix_tree_lookup(&pids, pid);
-	if (p == current)
-		goto out;
-	if (p)
-		radix_tree_delete(&pids, pid);
-
-	if (radix_tree_insert(&pids, pid, current)) {
-		spin_unlock(&pids_lock);
-		radix_tree_preload_end();
-		cond_resched();
-		goto retry;
-	}
-
-	trace_printk("%3x:%3x %4x %-16s\n",
-			MAJOR(inode->i_sb->s_dev), MINOR(inode->i_sb->s_dev),
-			pid, current->comm);
-out:
-	spin_unlock(&pids_lock);
-	radix_tree_preload_end();
-}
-
-void f2fs_trace_ios(struct f2fs_io_info *fio, int flush)
-{
-	struct inode *inode;
-	pid_t pid;
-	int major, minor;
-
-	if (flush) {
-		__print_last_io();
-		return;
-	}
-
-	inode = fio->page->mapping->host;
-	pid = page_private(fio->page);
-
-	major = MAJOR(inode->i_sb->s_dev);
-	minor = MINOR(inode->i_sb->s_dev);
-
-	if (last_io.major == major && last_io.minor == minor &&
-			last_io.pid == pid &&
-			last_io.type == __file_type(inode, pid) &&
-			last_io.fio.op == fio->op &&
-			last_io.fio.op_flags == fio->op_flags &&
-			last_io.fio.new_blkaddr + last_io.len ==
-							fio->new_blkaddr) {
-		last_io.len++;
-		return;
-	}
-
-	__print_last_io();
-
-	last_io.major = major;
-	last_io.minor = minor;
-	last_io.pid = pid;
-	last_io.type = __file_type(inode, pid);
-	last_io.fio = *fio;
-	last_io.len = 1;
-	return;
-}
-
-void f2fs_build_trace_ios(void)
-{
-	spin_lock_init(&pids_lock);
-}
-
-#define PIDVEC_SIZE	128
-static unsigned int gang_lookup_pids(pid_t *results, unsigned long first_index,
-							unsigned int max_items)
-{
-	struct radix_tree_iter iter;
-	void **slot;
-	unsigned int ret = 0;
-
-	if (unlikely(!max_items))
-		return 0;
-
-	radix_tree_for_each_slot(slot, &pids, &iter, first_index) {
-		results[ret] = iter.index;
-		if (++ret == max_items)
-			break;
-	}
-	return ret;
-}
-
-void f2fs_destroy_trace_ios(void)
-{
-	pid_t pid[PIDVEC_SIZE];
-	pid_t next_pid = 0;
-	unsigned int found;
-
-	spin_lock(&pids_lock);
-	while ((found = gang_lookup_pids(pid, next_pid, PIDVEC_SIZE))) {
-		unsigned idx;
-
-		next_pid = pid[found - 1] + 1;
-		for (idx = 0; idx < found; idx++)
-			radix_tree_delete(&pids, pid[idx]);
-	}
-	spin_unlock(&pids_lock);
-}
diff --git a/fs/f2fs/trace.h b/fs/f2fs/trace.h
deleted file mode 100644
index e8075fc..0000000
--- a/fs/f2fs/trace.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0
-/*
- * f2fs IO tracer
- *
- * Copyright (c) 2014 Motorola Mobility
- * Copyright (c) 2014 Jaegeuk Kim <jaegeuk@kernel.org>
- */
-#ifndef __F2FS_TRACE_H__
-#define __F2FS_TRACE_H__
-
-#ifdef CONFIG_F2FS_IO_TRACE
-#include <trace/events/f2fs.h>
-
-enum file_type {
-	__NORMAL_FILE,
-	__DIR_FILE,
-	__NODE_FILE,
-	__META_FILE,
-	__ATOMIC_FILE,
-	__VOLATILE_FILE,
-	__MISC_FILE,
-};
-
-struct last_io_info {
-	int major, minor;
-	pid_t pid;
-	enum file_type type;
-	struct f2fs_io_info fio;
-	block_t len;
-};
-
-extern void f2fs_trace_pid(struct page *);
-extern void f2fs_trace_ios(struct f2fs_io_info *, int);
-extern void f2fs_build_trace_ios(void);
-extern void f2fs_destroy_trace_ios(void);
-#else
-#define f2fs_trace_pid(p)
-#define f2fs_trace_ios(i, n)
-#define f2fs_build_trace_ios()
-#define f2fs_destroy_trace_ios()
-
-#endif
-#endif /* __F2FS_TRACE_H__ */
diff --git a/fs/f2fs/verity.c b/fs/f2fs/verity.c
index 7944a08..ffd95b0 100644
--- a/fs/f2fs/verity.c
+++ b/fs/f2fs/verity.c
@@ -29,6 +29,8 @@
 #include "f2fs.h"
 #include "xattr.h"
 
+#define F2FS_VERIFY_VER	(1)
+
 static inline loff_t f2fs_verity_metadata_pos(const struct inode *inode)
 {
 	return round_up(inode->i_size, 65536);
@@ -153,7 +155,7 @@
 	struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
 	u64 desc_pos = f2fs_verity_metadata_pos(inode) + merkle_tree_size;
 	struct fsverity_descriptor_location dloc = {
-		.version = cpu_to_le32(1),
+		.version = cpu_to_le32(F2FS_VERIFY_VER),
 		.size = cpu_to_le32(desc_size),
 		.pos = cpu_to_le64(desc_pos),
 	};
@@ -232,7 +234,7 @@
 			    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)) {
+	if (res != sizeof(dloc) || dloc.version != cpu_to_le32(F2FS_VERIFY_VER)) {
 		f2fs_warn(F2FS_I_SB(inode), "unknown verity xattr format");
 		return -EINVAL;
 	}
@@ -255,12 +257,55 @@
 	return size;
 }
 
-static struct page *f2fs_read_merkle_tree_page(struct inode *inode,
-					       pgoff_t index)
+/*
+ * Prefetch some pages from the file's Merkle tree.
+ *
+ * This is basically a stripped-down version of __do_page_cache_readahead()
+ * which works on pages past i_size.
+ */
+static void f2fs_merkle_tree_readahead(struct address_space *mapping,
+				       pgoff_t start_index, unsigned long count)
 {
+	LIST_HEAD(pages);
+	unsigned int nr_pages = 0;
+	struct page *page;
+	pgoff_t index;
+	struct blk_plug plug;
+
+	for (index = start_index; index < start_index + count; index++) {
+		page = xa_load(&mapping->i_pages, index);
+		if (!page || xa_is_value(page)) {
+			page = __page_cache_alloc(readahead_gfp_mask(mapping));
+			if (!page)
+				break;
+			page->index = index;
+			list_add(&page->lru, &pages);
+			nr_pages++;
+		}
+	}
+	blk_start_plug(&plug);
+	f2fs_mpage_readpages(mapping, &pages, NULL, nr_pages, true);
+	blk_finish_plug(&plug);
+}
+
+static struct page *f2fs_read_merkle_tree_page(struct inode *inode,
+					       pgoff_t index,
+					       unsigned long num_ra_pages)
+{
+	struct page *page;
+
 	index += f2fs_verity_metadata_pos(inode) >> PAGE_SHIFT;
 
-	return read_mapping_page(inode->i_mapping, index, NULL);
+	page = find_get_page_flags(inode->i_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else if (num_ra_pages > 1)
+			f2fs_merkle_tree_readahead(inode->i_mapping, index,
+						   num_ra_pages);
+		page = read_mapping_page(inode->i_mapping, index, NULL);
+	}
+	return page;
 }
 
 static int f2fs_write_merkle_tree_block(struct inode *inode, const void *buf,
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index cf1bfed..f738993 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -23,9 +23,28 @@
 #include "xattr.h"
 #include "segment.h"
 
+static void *xattr_alloc(struct f2fs_sb_info *sbi, int size, bool *is_inline)
+{
+	if (likely(size == sbi->inline_xattr_slab_size)) {
+		*is_inline = true;
+		return kmem_cache_zalloc(sbi->inline_xattr_slab, GFP_NOFS);
+	}
+	*is_inline = false;
+	return f2fs_kzalloc(sbi, size, GFP_NOFS);
+}
+
+static void xattr_free(struct f2fs_sb_info *sbi, void *xattr_addr,
+							bool is_inline)
+{
+	if (is_inline)
+		kmem_cache_free(sbi->inline_xattr_slab, xattr_addr);
+	else
+		kfree(xattr_addr);
+}
+
 static int f2fs_xattr_generic_get(const struct xattr_handler *handler,
 		struct dentry *unused, struct inode *inode,
-		const char *name, void *buffer, size_t size)
+		const char *name, void *buffer, size_t size, int flags)
 {
 	struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
 
@@ -80,7 +99,7 @@
 
 static int f2fs_xattr_advise_get(const struct xattr_handler *handler,
 		struct dentry *unused, struct inode *inode,
-		const char *name, void *buffer, size_t size)
+		const char *name, void *buffer, size_t size, int flags)
 {
 	if (buffer)
 		*((char *)buffer) = F2FS_I(inode)->i_advise;
@@ -156,8 +175,8 @@
 const struct xattr_handler f2fs_xattr_advise_handler = {
 	.name	= F2FS_SYSTEM_ADVISE_NAME,
 	.flags	= F2FS_XATTR_INDEX_ADVISE,
-	.get    = f2fs_xattr_advise_get,
-	.set    = f2fs_xattr_advise_set,
+	.get	= f2fs_xattr_advise_get,
+	.set	= f2fs_xattr_advise_set,
 };
 
 const struct xattr_handler f2fs_xattr_security_handler = {
@@ -301,23 +320,24 @@
 static int lookup_all_xattrs(struct inode *inode, struct page *ipage,
 				unsigned int index, unsigned int len,
 				const char *name, struct f2fs_xattr_entry **xe,
-				void **base_addr, int *base_size)
+				void **base_addr, int *base_size,
+				bool *is_inline)
 {
 	void *cur_addr, *txattr_addr, *last_txattr_addr;
 	void *last_addr = NULL;
 	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	unsigned int inline_size = inline_xattr_size(inode);
-	int err = 0;
+	int err;
 
 	if (!xnid && !inline_size)
 		return -ENODATA;
 
-	*base_size = XATTR_SIZE(xnid, inode) + XATTR_PADDING_SIZE;
-	txattr_addr = f2fs_kzalloc(F2FS_I_SB(inode), *base_size, GFP_NOFS);
+	*base_size = XATTR_SIZE(inode) + XATTR_PADDING_SIZE;
+	txattr_addr = xattr_alloc(F2FS_I_SB(inode), *base_size, is_inline);
 	if (!txattr_addr)
 		return -ENOMEM;
 
-	last_txattr_addr = (void *)txattr_addr + XATTR_SIZE(xnid, inode);
+	last_txattr_addr = (void *)txattr_addr + XATTR_SIZE(inode);
 
 	/* read from inline xattr */
 	if (inline_size) {
@@ -362,7 +382,7 @@
 	*base_addr = txattr_addr;
 	return 0;
 out:
-	kvfree(txattr_addr);
+	xattr_free(F2FS_I_SB(inode), txattr_addr, *is_inline);
 	return err;
 }
 
@@ -405,7 +425,7 @@
 	*base_addr = txattr_addr;
 	return 0;
 fail:
-	kvfree(txattr_addr);
+	kfree(txattr_addr);
 	return err;
 }
 
@@ -466,6 +486,7 @@
 		f2fs_wait_on_page_writeback(xpage, NODE, true, true);
 	} else {
 		struct dnode_of_data dn;
+
 		set_new_dnode(&dn, inode, NULL, NULL, new_nid);
 		xpage = f2fs_new_node_page(&dn, XATTR_NODE_OFFSET);
 		if (IS_ERR(xpage)) {
@@ -495,10 +516,11 @@
 		void *buffer, size_t buffer_size, struct page *ipage)
 {
 	struct f2fs_xattr_entry *entry = NULL;
-	int error = 0;
+	int error;
 	unsigned int size, len;
 	void *base_addr = NULL;
 	int base_size;
+	bool is_inline;
 
 	if (name == NULL)
 		return -EINVAL;
@@ -509,7 +531,7 @@
 
 	down_read(&F2FS_I(inode)->i_xattr_sem);
 	error = lookup_all_xattrs(inode, ipage, index, len, name,
-				&entry, &base_addr, &base_size);
+				&entry, &base_addr, &base_size, &is_inline);
 	up_read(&F2FS_I(inode)->i_xattr_sem);
 	if (error)
 		return error;
@@ -532,17 +554,16 @@
 	}
 	error = size;
 out:
-	kvfree(base_addr);
+	xattr_free(F2FS_I_SB(inode), base_addr, is_inline);
 	return error;
 }
 
 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, *last_base_addr;
-	int error = 0;
+	int error;
 	size_t rest = buffer_size;
 
 	down_read(&F2FS_I(inode)->i_xattr_sem);
@@ -551,7 +572,7 @@
 	if (error)
 		return error;
 
-	last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
+	last_base_addr = (void *)base_addr + XATTR_SIZE(inode);
 
 	list_for_each_xattr(entry, base_addr) {
 		const struct xattr_handler *handler =
@@ -590,7 +611,7 @@
 	}
 	error = buffer_size - rest;
 cleanup:
-	kvfree(base_addr);
+	kfree(base_addr);
 	return error;
 }
 
@@ -609,11 +630,10 @@
 {
 	struct f2fs_xattr_entry *here, *last;
 	void *base_addr, *last_base_addr;
-	nid_t xnid = F2FS_I(inode)->i_xattr_nid;
 	int found, newsize;
 	size_t len;
 	__u32 new_hsize;
-	int error = 0;
+	int error;
 
 	if (name == NULL)
 		return -EINVAL;
@@ -633,7 +653,7 @@
 	if (error)
 		return error;
 
-	last_base_addr = (void *)base_addr + XATTR_SIZE(xnid, inode);
+	last_base_addr = (void *)base_addr + XATTR_SIZE(inode);
 
 	/* find entry with wanted name. */
 	here = __find_xattr(base_addr, last_base_addr, index, len, name);
@@ -654,7 +674,7 @@
 		}
 
 		if (value && f2fs_xattr_value_same(here, value, size))
-			goto exit;
+			goto same;
 	} else if ((flags & XATTR_REPLACE)) {
 		error = -ENODATA;
 		goto exit;
@@ -728,19 +748,22 @@
 	if (error)
 		goto exit;
 
-	if (is_inode_flag_set(inode, FI_ACL_MODE)) {
-		inode->i_mode = F2FS_I(inode)->i_acl_mode;
-		inode->i_ctime = current_time(inode);
-		clear_inode_flag(inode, FI_ACL_MODE);
-	}
 	if (index == F2FS_XATTR_INDEX_ENCRYPTION &&
 			!strcmp(name, F2FS_XATTR_NAME_ENCRYPTION_CONTEXT))
 		f2fs_set_encrypted_inode(inode);
 	f2fs_mark_inode_dirty_sync(inode, true);
 	if (!error && S_ISDIR(inode->i_mode))
 		set_sbi_flag(F2FS_I_SB(inode), SBI_NEED_CP);
+
+same:
+	if (is_inode_flag_set(inode, FI_ACL_MODE)) {
+		inode->i_mode = F2FS_I(inode)->i_acl_mode;
+		inode->i_ctime = current_time(inode);
+		clear_inode_flag(inode, FI_ACL_MODE);
+	}
+
 exit:
-	kvfree(base_addr);
+	kfree(base_addr);
 	return error;
 }
 
@@ -767,14 +790,34 @@
 	f2fs_balance_fs(sbi, true);
 
 	f2fs_lock_op(sbi);
-	/* protect xattr_ver */
-	down_write(&F2FS_I(inode)->i_sem);
 	down_write(&F2FS_I(inode)->i_xattr_sem);
 	err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
 	up_write(&F2FS_I(inode)->i_xattr_sem);
-	up_write(&F2FS_I(inode)->i_sem);
 	f2fs_unlock_op(sbi);
 
 	f2fs_update_time(sbi, REQ_TIME);
 	return err;
 }
+
+int f2fs_init_xattr_caches(struct f2fs_sb_info *sbi)
+{
+	dev_t dev = sbi->sb->s_bdev->bd_dev;
+	char slab_name[32];
+
+	sprintf(slab_name, "f2fs_xattr_entry-%u:%u", MAJOR(dev), MINOR(dev));
+
+	sbi->inline_xattr_slab_size = F2FS_OPTION(sbi).inline_xattr_size *
+					sizeof(__le32) + XATTR_PADDING_SIZE;
+
+	sbi->inline_xattr_slab = f2fs_kmem_cache_create(slab_name,
+					sbi->inline_xattr_slab_size);
+	if (!sbi->inline_xattr_slab)
+		return -ENOMEM;
+
+	return 0;
+}
+
+void f2fs_destroy_xattr_caches(struct f2fs_sb_info *sbi)
+{
+	kmem_cache_destroy(sbi->inline_xattr_slab);
+}
diff --git a/fs/f2fs/xattr.h b/fs/f2fs/xattr.h
index de0c600..416d6527 100644
--- a/fs/f2fs/xattr.h
+++ b/fs/f2fs/xattr.h
@@ -1,4 +1,4 @@
-// SPDX-License-Identifier: GPL-2.0
+/* SPDX-License-Identifier: GPL-2.0 */
 /*
  * fs/f2fs/xattr.h
  *
@@ -49,7 +49,7 @@
 	__u8    e_name_index;
 	__u8    e_name_len;
 	__le16  e_value_size;   /* size of attribute value */
-	char    e_name[0];      /* attribute name */
+	char    e_name[];      /* attribute name */
 };
 
 #define XATTR_HDR(ptr)		((struct f2fs_xattr_header *)(ptr))
@@ -73,7 +73,8 @@
 				entry = XATTR_NEXT_ENTRY(entry))
 #define VALID_XATTR_BLOCK_SIZE	(PAGE_SIZE - sizeof(struct node_footer))
 #define XATTR_PADDING_SIZE	(sizeof(__u32))
-#define XATTR_SIZE(x,i)		(((x) ? VALID_XATTR_BLOCK_SIZE : 0) +	\
+#define XATTR_SIZE(i)		((F2FS_I(i)->i_xattr_nid ?		\
+					VALID_XATTR_BLOCK_SIZE : 0) +	\
 						(inline_xattr_size(i)))
 #define MIN_OFFSET(i)		XATTR_ALIGN(inline_xattr_size(i) +	\
 						VALID_XATTR_BLOCK_SIZE)
@@ -130,9 +131,12 @@
 extern int f2fs_getxattr(struct inode *, int, const char *, void *,
 						size_t, struct page *);
 extern ssize_t f2fs_listxattr(struct dentry *, char *, size_t);
+extern int f2fs_init_xattr_caches(struct f2fs_sb_info *);
+extern void f2fs_destroy_xattr_caches(struct f2fs_sb_info *);
 #else
 
 #define f2fs_xattr_handlers	NULL
+#define f2fs_listxattr		NULL
 static inline int f2fs_setxattr(struct inode *inode, int index,
 		const char *name, const void *value, size_t size,
 		struct page *page, int flags)
@@ -145,11 +149,8 @@
 {
 	return -EOPNOTSUPP;
 }
-static inline ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer,
-		size_t buffer_size)
-{
-	return -EOPNOTSUPP;
-}
+static inline int f2fs_init_xattr_caches(struct f2fs_sb_info *sbi) { return 0; }
+static inline void f2fs_destroy_xattr_caches(struct f2fs_sb_info *sbi) { }
 #endif
 
 #ifdef CONFIG_F2FS_FS_SECURITY
diff --git a/fs/file_table.c b/fs/file_table.c
index 30d55c9..676e620 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -198,6 +198,7 @@
 	file->f_inode = path->dentry->d_inode;
 	file->f_mapping = path->dentry->d_inode->i_mapping;
 	file->f_wb_err = filemap_sample_wb_err(file->f_mapping);
+	file->f_sb_err = file_sample_sb_err(file);
 	if ((file->f_mode & FMODE_READ) &&
 	     likely(fop->read || fop->read_iter))
 		file->f_mode |= FMODE_CAN_READ;
diff --git a/fs/fuse/Makefile b/fs/fuse/Makefile
index 3e8cebf..6971454 100644
--- a/fs/fuse/Makefile
+++ b/fs/fuse/Makefile
@@ -8,4 +8,5 @@
 obj-$(CONFIG_VIRTIO_FS) += virtiofs.o
 
 fuse-objs := dev.o dir.o file.o inode.o control.o xattr.o acl.o readdir.o
+fuse-objs += passthrough.o
 virtiofs-y += virtio_fs.o
diff --git a/fs/fuse/OWNERS b/fs/fuse/OWNERS
new file mode 100644
index 0000000..6c04da7
--- /dev/null
+++ b/fs/fuse/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/fs/fuse/OWNERS
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index 64d6c8c..7044c0c 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -14,6 +14,7 @@
 #include <linux/sched/signal.h>
 #include <linux/uio.h>
 #include <linux/miscdevice.h>
+#include <linux/namei.h>
 #include <linux/pagemap.h>
 #include <linux/file.h>
 #include <linux/slab.h>
@@ -1922,6 +1923,14 @@
 		err = copy_out_args(cs, req->args, nbytes);
 	fuse_copy_finish(cs);
 
+	if (!err && req->in.h.opcode == FUSE_CANONICAL_PATH) {
+		char *path = (char *)req->args->out_args[0].value;
+
+		path[req->args->out_args[0].size - 1] = 0;
+		req->out.h.error =
+			kern_path(path, 0, req->args->canonical_path);
+	}
+
 	spin_lock(&fpq->lock);
 	clear_bit(FR_LOCKED, &req->flags);
 	if (!fpq->connected)
@@ -2245,37 +2254,50 @@
 static long fuse_dev_ioctl(struct file *file, unsigned int cmd,
 			   unsigned long arg)
 {
-	int err = -ENOTTY;
+	int res;
+	int oldfd;
+	struct fuse_dev *fud = NULL;
 
-	if (cmd == FUSE_DEV_IOC_CLONE) {
-		int oldfd;
-
-		err = -EFAULT;
-		if (!get_user(oldfd, (__u32 __user *) arg)) {
+	switch (cmd) {
+	case FUSE_DEV_IOC_CLONE:
+		res = -EFAULT;
+		if (!get_user(oldfd, (__u32 __user *)arg)) {
 			struct file *old = fget(oldfd);
 
-			err = -EINVAL;
+			res = -EINVAL;
 			if (old) {
-				struct fuse_dev *fud = NULL;
-
 				/*
 				 * Check against file->f_op because CUSE
 				 * uses the same ioctl handler.
 				 */
 				if (old->f_op == file->f_op &&
-				    old->f_cred->user_ns == file->f_cred->user_ns)
+				    old->f_cred->user_ns ==
+					    file->f_cred->user_ns)
 					fud = fuse_get_dev(old);
 
 				if (fud) {
 					mutex_lock(&fuse_mutex);
-					err = fuse_device_clone(fud->fc, file);
+					res = fuse_device_clone(fud->fc, file);
 					mutex_unlock(&fuse_mutex);
 				}
 				fput(old);
 			}
 		}
+		break;
+	case FUSE_DEV_IOC_PASSTHROUGH_OPEN:
+		res = -EFAULT;
+		if (!get_user(oldfd, (__u32 __user *)arg)) {
+			res = -EINVAL;
+			fud = fuse_get_dev(file);
+			if (fud)
+				res = fuse_passthrough_open(fud, oldfd);
+		}
+		break;
+	default:
+		res = -ENOTTY;
+		break;
 	}
-	return err;
+	return res;
 }
 
 const struct file_operations fuse_dev_operations = {
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 34487bf..dca5470 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -298,6 +298,44 @@
 	return time_before64(fuse_dentry_time(dentry), get_jiffies_64());
 }
 
+/*
+ * Get the canonical path. Since we must translate to a path, this must be done
+ * in the context of the userspace daemon, however, the userspace daemon cannot
+ * look up paths on its own. Instead, we handle the lookup as a special case
+ * inside of the write request.
+ */
+static void fuse_dentry_canonical_path(const struct path *path,
+				       struct path *canonical_path)
+{
+	struct inode *inode = d_inode(path->dentry);
+	struct fuse_conn *fc = get_fuse_conn(inode);
+	FUSE_ARGS(args);
+	char *path_name;
+	int err;
+
+	path_name = (char *)get_zeroed_page(GFP_KERNEL);
+	if (!path_name)
+		goto default_path;
+
+	args.opcode = FUSE_CANONICAL_PATH;
+	args.nodeid = get_node_id(inode);
+	args.in_numargs = 0;
+	args.out_numargs = 1;
+	args.out_args[0].size = PATH_MAX;
+	args.out_args[0].value = path_name;
+	args.canonical_path = canonical_path;
+	args.out_argvar = 1;
+
+	err = fuse_simple_request(fc, &args);
+	free_page((unsigned long)path_name);
+	if (err > 0)
+		return;
+default_path:
+	canonical_path->dentry = path->dentry;
+	canonical_path->mnt = path->mnt;
+	path_get(canonical_path);
+}
+
 const struct dentry_operations fuse_dentry_operations = {
 	.d_revalidate	= fuse_dentry_revalidate,
 	.d_delete	= fuse_dentry_delete,
@@ -305,6 +343,7 @@
 	.d_init		= fuse_dentry_init,
 	.d_release	= fuse_dentry_release,
 #endif
+	.d_canonical_path = fuse_dentry_canonical_path,
 };
 
 const struct dentry_operations fuse_root_dentry_operations = {
@@ -492,6 +531,7 @@
 	ff->fh = outopen.fh;
 	ff->nodeid = outentry.nodeid;
 	ff->open_flags = outopen.open_flags;
+	fuse_passthrough_setup(fc, ff, &outopen);
 	inode = fuse_iget(dir->i_sb, outentry.nodeid, outentry.generation,
 			  &outentry.attr, entry_attr_timeout(&outentry), 0);
 	if (!inode) {
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 1de5999..fe07168 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -151,7 +151,7 @@
 		if (!err) {
 			ff->fh = outarg.fh;
 			ff->open_flags = outarg.open_flags;
-
+			fuse_passthrough_setup(fc, ff, &outarg);
 		} else if (err != -ENOSYS) {
 			fuse_file_free(ff);
 			return err;
@@ -287,6 +287,8 @@
 	struct fuse_release_args *ra = ff->release_args;
 	int opcode = isdir ? FUSE_RELEASEDIR : FUSE_RELEASE;
 
+	fuse_passthrough_release(&ff->passthrough);
+
 	fuse_prepare_release(fi, ff, file->f_flags, opcode);
 
 	if (ff->flock) {
@@ -1595,7 +1597,9 @@
 	if (fuse_is_bad(file_inode(file)))
 		return -EIO;
 
-	if (!(ff->open_flags & FOPEN_DIRECT_IO))
+	if (ff->passthrough.filp)
+		return fuse_passthrough_read_iter(iocb, to);
+	else if (!(ff->open_flags & FOPEN_DIRECT_IO))
 		return fuse_cache_read_iter(iocb, to);
 	else
 		return fuse_direct_read_iter(iocb, to);
@@ -1609,7 +1613,9 @@
 	if (fuse_is_bad(file_inode(file)))
 		return -EIO;
 
-	if (!(ff->open_flags & FOPEN_DIRECT_IO))
+	if (ff->passthrough.filp)
+		return fuse_passthrough_write_iter(iocb, from);
+	else if (!(ff->open_flags & FOPEN_DIRECT_IO))
 		return fuse_cache_write_iter(iocb, from);
 	else
 		return fuse_direct_write_iter(iocb, from);
@@ -2323,6 +2329,9 @@
 {
 	struct fuse_file *ff = file->private_data;
 
+	if (ff->passthrough.filp)
+		return fuse_passthrough_mmap(file, vma);
+
 	if (ff->open_flags & FOPEN_DIRECT_IO) {
 		/* Can't provide the coherency needed for MAP_SHARED */
 		if (vma->vm_flags & VM_MAYSHARE)
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index d8789264..d794614 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -165,6 +165,17 @@
 struct fuse_conn;
 struct fuse_release_args;
 
+/**
+ * Reference to lower filesystem file for read/write operations handled in
+ * passthrough mode.
+ * This struct also tracks the credentials to be used for handling read/write
+ * operations.
+ */
+struct fuse_passthrough {
+	struct file *filp;
+	struct cred *cred;
+};
+
 /** FUSE specific file data */
 struct fuse_file {
 	/** Fuse connection for this file */
@@ -210,6 +221,9 @@
 
 	} readdir;
 
+	/** Container for data related to the passthrough functionality */
+	struct fuse_passthrough passthrough;
+
 	/** RB node to be linked on fuse_conn->polled_files */
 	struct rb_node polled_node;
 
@@ -255,6 +269,9 @@
 	struct fuse_in_arg in_args[3];
 	struct fuse_arg out_args[2];
 	void (*end)(struct fuse_conn *fc, struct fuse_args *args, int error);
+
+	/* Path used for completing d_canonical_path */
+	struct path *canonical_path;
 };
 
 struct fuse_args_pages {
@@ -358,10 +375,8 @@
 	/** Used to wake up the task waiting for completion of request*/
 	wait_queue_head_t waitq;
 
-#if IS_ENABLED(CONFIG_VIRTIO_FS)
 	/** virtio-fs's physically contiguous buffer for in and out args */
 	void *argbuf;
-#endif
 };
 
 struct fuse_iqueue;
@@ -722,6 +737,9 @@
 	/* Do not show mount options */
 	unsigned int no_mount_options:1;
 
+	/** Passthrough mode for read/write IO */
+	unsigned int passthrough:1;
+
 	/** The number of requests waiting for completion */
 	atomic_t num_waiting;
 
@@ -757,6 +775,12 @@
 
 	/** List of device instances belonging to this connection */
 	struct list_head devices;
+
+	/** IDR for passthrough requests */
+	struct idr passthrough_req;
+
+	/** Protects passthrough_req */
+	spinlock_t passthrough_req_lock;
 };
 
 static inline struct fuse_conn *get_fuse_conn_super(struct super_block *sb)
@@ -1107,4 +1131,13 @@
 u64 fuse_get_unique(struct fuse_iqueue *fiq);
 void fuse_free_conn(struct fuse_conn *fc);
 
+/* passthrough.c */
+int fuse_passthrough_open(struct fuse_dev *fud, u32 lower_fd);
+int fuse_passthrough_setup(struct fuse_conn *fc, struct fuse_file *ff,
+			   struct fuse_open_out *openarg);
+void fuse_passthrough_release(struct fuse_passthrough *passthrough);
+ssize_t fuse_passthrough_read_iter(struct kiocb *iocb, struct iov_iter *to);
+ssize_t fuse_passthrough_write_iter(struct kiocb *iocb, struct iov_iter *from);
+ssize_t fuse_passthrough_mmap(struct file *file, struct vm_area_struct *vma);
+
 #endif /* _FS_FUSE_I_H */
diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c
index aa1d5cf..cbe6d01 100644
--- a/fs/fuse/inode.c
+++ b/fs/fuse/inode.c
@@ -622,6 +622,7 @@
 	memset(fc, 0, sizeof(*fc));
 	spin_lock_init(&fc->lock);
 	spin_lock_init(&fc->bg_lock);
+	spin_lock_init(&fc->passthrough_req_lock);
 	init_rwsem(&fc->killsb);
 	refcount_set(&fc->count, 1);
 	atomic_set(&fc->dev_count, 1);
@@ -630,6 +631,7 @@
 	INIT_LIST_HEAD(&fc->bg_queue);
 	INIT_LIST_HEAD(&fc->entry);
 	INIT_LIST_HEAD(&fc->devices);
+	idr_init(&fc->passthrough_req);
 	atomic_set(&fc->num_waiting, 0);
 	fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND;
 	fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD;
@@ -966,6 +968,12 @@
 					min_t(unsigned int, FUSE_MAX_MAX_PAGES,
 					max_t(unsigned int, arg->max_pages, 1));
 			}
+			if (arg->flags & FUSE_PASSTHROUGH) {
+				fc->passthrough = 1;
+				/* Prevent further stacking */
+				fc->sb->s_stack_depth =
+					FILESYSTEM_MAX_STACK_DEPTH;
+			}
 		} else {
 			ra_pages = fc->max_read / PAGE_SIZE;
 			fc->no_lock = 1;
@@ -1003,7 +1011,8 @@
 		FUSE_WRITEBACK_CACHE | FUSE_NO_OPEN_SUPPORT |
 		FUSE_PARALLEL_DIROPS | FUSE_HANDLE_KILLPRIV | FUSE_POSIX_ACL |
 		FUSE_ABORT_ERROR | FUSE_MAX_PAGES | FUSE_CACHE_SYMLINKS |
-		FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA;
+		FUSE_NO_OPENDIR_SUPPORT | FUSE_EXPLICIT_INVAL_DATA |
+		FUSE_PASSTHROUGH;
 	ia->args.opcode = FUSE_INIT;
 	ia->args.in_numargs = 1;
 	ia->args.in_args[0].size = sizeof(ia->in);
@@ -1024,9 +1033,21 @@
 }
 EXPORT_SYMBOL_GPL(fuse_send_init);
 
+static int free_fuse_passthrough(int id, void *p, void *data)
+{
+	struct fuse_passthrough *passthrough = (struct fuse_passthrough *)p;
+
+	fuse_passthrough_release(passthrough);
+	kfree(p);
+
+	return 0;
+}
+
 void fuse_free_conn(struct fuse_conn *fc)
 {
 	WARN_ON(!list_empty(&fc->devices));
+	idr_for_each(&fc->passthrough_req, free_fuse_passthrough, NULL);
+	idr_destroy(&fc->passthrough_req);
 	kfree_rcu(fc, rcu);
 }
 EXPORT_SYMBOL_GPL(fuse_free_conn);
diff --git a/fs/fuse/passthrough.c b/fs/fuse/passthrough.c
new file mode 100644
index 0000000..95368dd
--- /dev/null
+++ b/fs/fuse/passthrough.c
@@ -0,0 +1,305 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include "fuse_i.h"
+
+#include <linux/fuse.h>
+#include <linux/idr.h>
+#include <linux/uio.h>
+
+#define PASSTHROUGH_IOCB_MASK                                                  \
+	(IOCB_APPEND | IOCB_DSYNC | IOCB_HIPRI | IOCB_NOWAIT | IOCB_SYNC)
+
+struct fuse_aio_req {
+	struct kiocb iocb;
+	struct kiocb *iocb_fuse;
+};
+
+static inline void kiocb_clone(struct kiocb *kiocb, struct kiocb *kiocb_src,
+			       struct file *filp)
+{
+	*kiocb = (struct kiocb){
+		.ki_filp = filp,
+		.ki_flags = kiocb_src->ki_flags,
+		.ki_hint = kiocb_src->ki_hint,
+		.ki_ioprio = kiocb_src->ki_ioprio,
+		.ki_pos = kiocb_src->ki_pos,
+	};
+}
+
+static void fuse_file_accessed(struct file *dst_file, struct file *src_file)
+{
+	struct inode *dst_inode;
+	struct inode *src_inode;
+
+	if (dst_file->f_flags & O_NOATIME)
+		return;
+
+	dst_inode = file_inode(dst_file);
+	src_inode = file_inode(src_file);
+
+	if ((!timespec64_equal(&dst_inode->i_mtime, &src_inode->i_mtime) ||
+	     !timespec64_equal(&dst_inode->i_ctime, &src_inode->i_ctime))) {
+		dst_inode->i_mtime = src_inode->i_mtime;
+		dst_inode->i_ctime = src_inode->i_ctime;
+	}
+
+	touch_atime(&dst_file->f_path);
+}
+
+static void fuse_copyattr(struct file *dst_file, struct file *src_file)
+{
+	struct inode *dst = file_inode(dst_file);
+	struct inode *src = file_inode(src_file);
+
+	dst->i_atime = src->i_atime;
+	dst->i_mtime = src->i_mtime;
+	dst->i_ctime = src->i_ctime;
+	i_size_write(dst, i_size_read(src));
+}
+
+static void fuse_aio_cleanup_handler(struct fuse_aio_req *aio_req)
+{
+	struct kiocb *iocb = &aio_req->iocb;
+	struct kiocb *iocb_fuse = aio_req->iocb_fuse;
+
+	if (iocb->ki_flags & IOCB_WRITE) {
+		__sb_writers_acquired(file_inode(iocb->ki_filp)->i_sb,
+				      SB_FREEZE_WRITE);
+		file_end_write(iocb->ki_filp);
+		fuse_copyattr(iocb_fuse->ki_filp, iocb->ki_filp);
+	}
+
+	iocb_fuse->ki_pos = iocb->ki_pos;
+	kfree(aio_req);
+}
+
+static void fuse_aio_rw_complete(struct kiocb *iocb, long res, long res2)
+{
+	struct fuse_aio_req *aio_req =
+		container_of(iocb, struct fuse_aio_req, iocb);
+	struct kiocb *iocb_fuse = aio_req->iocb_fuse;
+
+	fuse_aio_cleanup_handler(aio_req);
+	iocb_fuse->ki_complete(iocb_fuse, res, res2);
+}
+
+ssize_t fuse_passthrough_read_iter(struct kiocb *iocb_fuse,
+				   struct iov_iter *iter)
+{
+	ssize_t ret;
+	const struct cred *old_cred;
+	struct file *fuse_filp = iocb_fuse->ki_filp;
+	struct fuse_file *ff = fuse_filp->private_data;
+	struct file *passthrough_filp = ff->passthrough.filp;
+
+	if (!iov_iter_count(iter))
+		return 0;
+
+	old_cred = override_creds(ff->passthrough.cred);
+	if (is_sync_kiocb(iocb_fuse)) {
+		ret = vfs_iter_read(passthrough_filp, iter, &iocb_fuse->ki_pos,
+				    iocb_to_rw_flags(iocb_fuse->ki_flags,
+						     PASSTHROUGH_IOCB_MASK));
+	} else {
+		struct fuse_aio_req *aio_req;
+
+		aio_req = kmalloc(sizeof(struct fuse_aio_req), GFP_KERNEL);
+		if (!aio_req) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		aio_req->iocb_fuse = iocb_fuse;
+		kiocb_clone(&aio_req->iocb, iocb_fuse, passthrough_filp);
+		aio_req->iocb.ki_complete = fuse_aio_rw_complete;
+		ret = call_read_iter(passthrough_filp, &aio_req->iocb, iter);
+		if (ret != -EIOCBQUEUED)
+			fuse_aio_cleanup_handler(aio_req);
+	}
+out:
+	revert_creds(old_cred);
+
+	fuse_file_accessed(fuse_filp, passthrough_filp);
+
+	return ret;
+}
+
+ssize_t fuse_passthrough_write_iter(struct kiocb *iocb_fuse,
+				    struct iov_iter *iter)
+{
+	ssize_t ret;
+	const struct cred *old_cred;
+	struct file *fuse_filp = iocb_fuse->ki_filp;
+	struct fuse_file *ff = fuse_filp->private_data;
+	struct inode *fuse_inode = file_inode(fuse_filp);
+	struct file *passthrough_filp = ff->passthrough.filp;
+	struct inode *passthrough_inode = file_inode(passthrough_filp);
+
+	if (!iov_iter_count(iter))
+		return 0;
+
+	inode_lock(fuse_inode);
+
+	fuse_copyattr(fuse_filp, passthrough_filp);
+
+	old_cred = override_creds(ff->passthrough.cred);
+	if (is_sync_kiocb(iocb_fuse)) {
+		file_start_write(passthrough_filp);
+		ret = vfs_iter_write(passthrough_filp, iter, &iocb_fuse->ki_pos,
+				     iocb_to_rw_flags(iocb_fuse->ki_flags,
+						      PASSTHROUGH_IOCB_MASK));
+		file_end_write(passthrough_filp);
+		if (ret > 0)
+			fuse_copyattr(fuse_filp, passthrough_filp);
+	} else {
+		struct fuse_aio_req *aio_req;
+
+		aio_req = kmalloc(sizeof(struct fuse_aio_req), GFP_KERNEL);
+		if (!aio_req) {
+			ret = -ENOMEM;
+			goto out;
+		}
+
+		file_start_write(passthrough_filp);
+		__sb_writers_release(passthrough_inode->i_sb, SB_FREEZE_WRITE);
+
+		aio_req->iocb_fuse = iocb_fuse;
+		kiocb_clone(&aio_req->iocb, iocb_fuse, passthrough_filp);
+		aio_req->iocb.ki_complete = fuse_aio_rw_complete;
+		ret = call_write_iter(passthrough_filp, &aio_req->iocb, iter);
+		if (ret != -EIOCBQUEUED)
+			fuse_aio_cleanup_handler(aio_req);
+	}
+out:
+	revert_creds(old_cred);
+	inode_unlock(fuse_inode);
+
+	return ret;
+}
+
+ssize_t fuse_passthrough_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	int ret;
+	const struct cred *old_cred;
+	struct fuse_file *ff = file->private_data;
+	struct file *passthrough_filp = ff->passthrough.filp;
+
+	if (!passthrough_filp->f_op->mmap)
+		return -ENODEV;
+
+	if (WARN_ON(file != vma->vm_file))
+		return -EIO;
+
+	vma->vm_file = get_file(passthrough_filp);
+
+	old_cred = override_creds(ff->passthrough.cred);
+	ret = call_mmap(vma->vm_file, vma);
+	revert_creds(old_cred);
+
+	if (ret)
+		fput(passthrough_filp);
+	else
+		fput(file);
+
+	fuse_file_accessed(file, passthrough_filp);
+
+	return ret;
+}
+
+int fuse_passthrough_open(struct fuse_dev *fud, u32 lower_fd)
+{
+	int res;
+	struct file *passthrough_filp;
+	struct fuse_conn *fc = fud->fc;
+	struct inode *passthrough_inode;
+	struct super_block *passthrough_sb;
+	struct fuse_passthrough *passthrough;
+
+	if (!fc->passthrough)
+		return -EPERM;
+
+	passthrough_filp = fget(lower_fd);
+	if (!passthrough_filp) {
+		pr_err("FUSE: invalid file descriptor for passthrough.\n");
+		return -EBADF;
+	}
+
+	if (!passthrough_filp->f_op->read_iter ||
+	    !passthrough_filp->f_op->write_iter) {
+		pr_err("FUSE: passthrough file misses file operations.\n");
+		res = -EBADF;
+		goto err_free_file;
+	}
+
+	passthrough_inode = file_inode(passthrough_filp);
+	passthrough_sb = passthrough_inode->i_sb;
+	if (passthrough_sb->s_stack_depth >= FILESYSTEM_MAX_STACK_DEPTH) {
+		pr_err("FUSE: fs stacking depth exceeded for passthrough\n");
+		res = -EINVAL;
+		goto err_free_file;
+	}
+
+	passthrough = kmalloc(sizeof(struct fuse_passthrough), GFP_KERNEL);
+	if (!passthrough) {
+		res = -ENOMEM;
+		goto err_free_file;
+	}
+
+	passthrough->filp = passthrough_filp;
+	passthrough->cred = prepare_creds();
+
+	idr_preload(GFP_KERNEL);
+	spin_lock(&fc->passthrough_req_lock);
+	res = idr_alloc(&fc->passthrough_req, passthrough, 1, 0, GFP_ATOMIC);
+	spin_unlock(&fc->passthrough_req_lock);
+	idr_preload_end();
+
+	if (res > 0)
+		return res;
+
+	fuse_passthrough_release(passthrough);
+	kfree(passthrough);
+
+err_free_file:
+	fput(passthrough_filp);
+
+	return res;
+}
+
+int fuse_passthrough_setup(struct fuse_conn *fc, struct fuse_file *ff,
+			   struct fuse_open_out *openarg)
+{
+	struct fuse_passthrough *passthrough;
+	int passthrough_fh = openarg->passthrough_fh;
+
+	if (!fc->passthrough)
+		return -EPERM;
+
+	/* Default case, passthrough is not requested */
+	if (passthrough_fh <= 0)
+		return -EINVAL;
+
+	spin_lock(&fc->passthrough_req_lock);
+	passthrough = idr_remove(&fc->passthrough_req, passthrough_fh);
+	spin_unlock(&fc->passthrough_req_lock);
+
+	if (!passthrough)
+		return -EINVAL;
+
+	ff->passthrough = *passthrough;
+	kfree(passthrough);
+
+	return 0;
+}
+
+void fuse_passthrough_release(struct fuse_passthrough *passthrough)
+{
+	if (passthrough->filp) {
+		fput(passthrough->filp);
+		passthrough->filp = NULL;
+	}
+	if (passthrough->cred) {
+		put_cred(passthrough->cred);
+		passthrough->cred = NULL;
+	}
+}
diff --git a/fs/fuse/xattr.c b/fs/fuse/xattr.c
index 28fed52..046b017 100644
--- a/fs/fuse/xattr.c
+++ b/fs/fuse/xattr.c
@@ -179,7 +179,7 @@
 
 static int fuse_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *dentry, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	if (fuse_is_bad(inode))
 		return -EIO;
@@ -208,7 +208,7 @@
 
 static int no_xattr_get(const struct xattr_handler *handler,
 			struct dentry *dentry, struct inode *inode,
-			const char *name, void *value, size_t size)
+			const char *name, void *value, size_t size, int flags)
 {
 	return -EOPNOTSUPP;
 }
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
index bbe593d..a9db067 100644
--- a/fs/gfs2/xattr.c
+++ b/fs/gfs2/xattr.c
@@ -588,7 +588,8 @@
 
 static int gfs2_xattr_get(const struct xattr_handler *handler,
 			  struct dentry *unused, struct inode *inode,
-			  const char *name, void *buffer, size_t size)
+			  const char *name, void *buffer, size_t size,
+			  int flags)
 {
 	struct gfs2_inode *ip = GFS2_I(inode);
 	struct gfs2_holder gh;
diff --git a/fs/hfs/attr.c b/fs/hfs/attr.c
index 74fa6264..08222a9 100644
--- a/fs/hfs/attr.c
+++ b/fs/hfs/attr.c
@@ -115,7 +115,7 @@
 
 static int hfs_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *unused, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	return __hfs_getxattr(inode, handler->flags, value, size);
 }
diff --git a/fs/hfsplus/xattr.c b/fs/hfsplus/xattr.c
index bb0b27d8..381c2aa 100644
--- a/fs/hfsplus/xattr.c
+++ b/fs/hfsplus/xattr.c
@@ -839,7 +839,8 @@
 
 static int hfsplus_osx_getxattr(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *name, void *buffer, size_t size)
+				const char *name, void *buffer, size_t size,
+				int flags)
 {
 	/*
 	 * Don't allow retrieving properly prefixed attributes
diff --git a/fs/hfsplus/xattr_security.c b/fs/hfsplus/xattr_security.c
index cfbe6a3..43e28b3 100644
--- a/fs/hfsplus/xattr_security.c
+++ b/fs/hfsplus/xattr_security.c
@@ -15,7 +15,8 @@
 
 static int hfsplus_security_getxattr(const struct xattr_handler *handler,
 				     struct dentry *unused, struct inode *inode,
-				     const char *name, void *buffer, size_t size)
+				     const char *name, void *buffer,
+				     size_t size, int flags)
 {
 	return hfsplus_getxattr(inode, name, buffer, size,
 				XATTR_SECURITY_PREFIX,
diff --git a/fs/hfsplus/xattr_trusted.c b/fs/hfsplus/xattr_trusted.c
index fbad91e..54d9263 100644
--- a/fs/hfsplus/xattr_trusted.c
+++ b/fs/hfsplus/xattr_trusted.c
@@ -14,7 +14,8 @@
 
 static int hfsplus_trusted_getxattr(const struct xattr_handler *handler,
 				    struct dentry *unused, struct inode *inode,
-				    const char *name, void *buffer, size_t size)
+				    const char *name, void *buffer,
+				    size_t size, int flags)
 {
 	return hfsplus_getxattr(inode, name, buffer, size,
 				XATTR_TRUSTED_PREFIX,
diff --git a/fs/hfsplus/xattr_user.c b/fs/hfsplus/xattr_user.c
index 74d19fa..4d2b1ff 100644
--- a/fs/hfsplus/xattr_user.c
+++ b/fs/hfsplus/xattr_user.c
@@ -14,7 +14,8 @@
 
 static int hfsplus_user_getxattr(const struct xattr_handler *handler,
 				 struct dentry *unused, struct inode *inode,
-				 const char *name, void *buffer, size_t size)
+				 const char *name, void *buffer, size_t size,
+				 int flags)
 {
 
 	return hfsplus_getxattr(inode, name, buffer, size,
diff --git a/fs/incfs/Kconfig b/fs/incfs/Kconfig
new file mode 100644
index 0000000..8f7d522
--- /dev/null
+++ b/fs/incfs/Kconfig
@@ -0,0 +1,14 @@
+config INCREMENTAL_FS
+	tristate "Incremental file system support"
+	depends on BLOCK
+	select DECOMPRESS_LZ4
+	select DECOMPRESS_ZSTD
+	select CRYPTO_ZSTD
+	select CRYPTO_SHA256
+	help
+	  Incremental FS is a read-only virtual file system that facilitates execution
+	  of programs while their binaries are still being lazily downloaded over the
+	  network, USB or pigeon post.
+
+	  To compile this file system support as a module, choose M here: the
+	  module will be called incrementalfs.
diff --git a/fs/incfs/Makefile b/fs/incfs/Makefile
new file mode 100644
index 0000000..05795d1
--- /dev/null
+++ b/fs/incfs/Makefile
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: GPL-2.0
+obj-$(CONFIG_INCREMENTAL_FS)	+= incrementalfs.o
+
+incrementalfs-y := \
+	data_mgmt.o \
+	format.o \
+	integrity.o \
+	main.o \
+	pseudo_files.o \
+	sysfs.o \
+	vfs.o
+
+incrementalfs-$(CONFIG_FS_VERITY) += verity.o
diff --git a/fs/incfs/OWNERS b/fs/incfs/OWNERS
new file mode 100644
index 0000000..17131f3
--- /dev/null
+++ b/fs/incfs/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/fs/incfs/OWNERS
diff --git a/fs/incfs/data_mgmt.c b/fs/incfs/data_mgmt.c
new file mode 100644
index 0000000..fbab68a
--- /dev/null
+++ b/fs/incfs/data_mgmt.c
@@ -0,0 +1,1890 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <linux/crc32.h>
+#include <linux/delay.h>
+#include <linux/file.h>
+#include <linux/fsverity.h>
+#include <linux/gfp.h>
+#include <linux/kobject.h>
+#include <linux/ktime.h>
+#include <linux/lz4.h>
+#include <linux/mm.h>
+#include <linux/namei.h>
+#include <linux/pagemap.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+#include <linux/workqueue.h>
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+#include "sysfs.h"
+#include "verity.h"
+
+static int incfs_scan_metadata_chain(struct data_file *df);
+
+static void log_wake_up_all(struct work_struct *work)
+{
+	struct delayed_work *dw = container_of(work, struct delayed_work, work);
+	struct read_log *rl = container_of(dw, struct read_log, ml_wakeup_work);
+	wake_up_all(&rl->ml_notif_wq);
+}
+
+static void zstd_free_workspace(struct work_struct *work)
+{
+	struct delayed_work *dw = container_of(work, struct delayed_work, work);
+	struct mount_info *mi =
+		container_of(dw, struct mount_info, mi_zstd_cleanup_work);
+
+	mutex_lock(&mi->mi_zstd_workspace_mutex);
+	kvfree(mi->mi_zstd_workspace);
+	mi->mi_zstd_workspace = NULL;
+	mi->mi_zstd_stream = NULL;
+	mutex_unlock(&mi->mi_zstd_workspace_mutex);
+}
+
+struct mount_info *incfs_alloc_mount_info(struct super_block *sb,
+					  struct mount_options *options,
+					  struct path *backing_dir_path)
+{
+	struct mount_info *mi = NULL;
+	int error = 0;
+	struct incfs_sysfs_node *node;
+
+	mi = kzalloc(sizeof(*mi), GFP_NOFS);
+	if (!mi)
+		return ERR_PTR(-ENOMEM);
+
+	mi->mi_sb = sb;
+	mi->mi_backing_dir_path = *backing_dir_path;
+	mi->mi_owner = get_current_cred();
+	path_get(&mi->mi_backing_dir_path);
+	mutex_init(&mi->mi_dir_struct_mutex);
+	init_waitqueue_head(&mi->mi_pending_reads_notif_wq);
+	init_waitqueue_head(&mi->mi_log.ml_notif_wq);
+	init_waitqueue_head(&mi->mi_blocks_written_notif_wq);
+	atomic_set(&mi->mi_blocks_written, 0);
+	INIT_DELAYED_WORK(&mi->mi_log.ml_wakeup_work, log_wake_up_all);
+	spin_lock_init(&mi->mi_log.rl_lock);
+	spin_lock_init(&mi->pending_read_lock);
+	INIT_LIST_HEAD(&mi->mi_reads_list_head);
+	spin_lock_init(&mi->mi_per_uid_read_timeouts_lock);
+	mutex_init(&mi->mi_zstd_workspace_mutex);
+	INIT_DELAYED_WORK(&mi->mi_zstd_cleanup_work, zstd_free_workspace);
+	mutex_init(&mi->mi_le_mutex);
+
+	node = incfs_add_sysfs_node(options->sysfs_name, mi);
+	if (IS_ERR(node)) {
+		error = PTR_ERR(node);
+		goto err;
+	}
+	mi->mi_sysfs_node = node;
+
+	error = incfs_realloc_mount_info(mi, options);
+	if (error)
+		goto err;
+
+	return mi;
+
+err:
+	incfs_free_mount_info(mi);
+	return ERR_PTR(error);
+}
+
+int incfs_realloc_mount_info(struct mount_info *mi,
+			     struct mount_options *options)
+{
+	void *new_buffer = NULL;
+	void *old_buffer;
+	size_t new_buffer_size = 0;
+
+	if (options->read_log_pages != mi->mi_options.read_log_pages) {
+		struct read_log_state log_state;
+		/*
+		 * Even though having two buffers allocated at once isn't
+		 * usually good, allocating a multipage buffer under a spinlock
+		 * is even worse, so let's optimize for the shorter lock
+		 * duration. It's not end of the world if we fail to increase
+		 * the buffer size anyway.
+		 */
+		if (options->read_log_pages > 0) {
+			new_buffer_size = PAGE_SIZE * options->read_log_pages;
+			new_buffer = kzalloc(new_buffer_size, GFP_NOFS);
+			if (!new_buffer)
+				return -ENOMEM;
+		}
+
+		spin_lock(&mi->mi_log.rl_lock);
+		old_buffer = mi->mi_log.rl_ring_buf;
+		mi->mi_log.rl_ring_buf = new_buffer;
+		mi->mi_log.rl_size = new_buffer_size;
+		log_state = (struct read_log_state){
+			.generation_id = mi->mi_log.rl_head.generation_id + 1,
+		};
+		mi->mi_log.rl_head = log_state;
+		mi->mi_log.rl_tail = log_state;
+		spin_unlock(&mi->mi_log.rl_lock);
+
+		kfree(old_buffer);
+	}
+
+	if (options->sysfs_name && !mi->mi_sysfs_node)
+		mi->mi_sysfs_node = incfs_add_sysfs_node(options->sysfs_name,
+							 mi);
+	else if (!options->sysfs_name && mi->mi_sysfs_node) {
+		incfs_free_sysfs_node(mi->mi_sysfs_node);
+		mi->mi_sysfs_node = NULL;
+	} else if (options->sysfs_name &&
+		strcmp(options->sysfs_name,
+		       kobject_name(&mi->mi_sysfs_node->isn_sysfs_node))) {
+		incfs_free_sysfs_node(mi->mi_sysfs_node);
+		mi->mi_sysfs_node = incfs_add_sysfs_node(options->sysfs_name,
+							 mi);
+	}
+
+	if (IS_ERR(mi->mi_sysfs_node)) {
+		int err = PTR_ERR(mi->mi_sysfs_node);
+
+		mi->mi_sysfs_node = NULL;
+		return err;
+	}
+
+	mi->mi_options = *options;
+	return 0;
+}
+
+void incfs_free_mount_info(struct mount_info *mi)
+{
+	int i;
+	if (!mi)
+		return;
+
+	flush_delayed_work(&mi->mi_log.ml_wakeup_work);
+	flush_delayed_work(&mi->mi_zstd_cleanup_work);
+
+	dput(mi->mi_index_dir);
+	dput(mi->mi_incomplete_dir);
+	path_put(&mi->mi_backing_dir_path);
+	mutex_destroy(&mi->mi_dir_struct_mutex);
+	mutex_destroy(&mi->mi_zstd_workspace_mutex);
+	put_cred(mi->mi_owner);
+	kfree(mi->mi_log.rl_ring_buf);
+	for (i = 0; i < ARRAY_SIZE(mi->pseudo_file_xattr); ++i)
+		kfree(mi->pseudo_file_xattr[i].data);
+	kfree(mi->mi_per_uid_read_timeouts);
+	incfs_free_sysfs_node(mi->mi_sysfs_node);
+	kfree(mi);
+}
+
+static void data_file_segment_init(struct data_file_segment *segment)
+{
+	init_waitqueue_head(&segment->new_data_arrival_wq);
+	init_rwsem(&segment->rwsem);
+	INIT_LIST_HEAD(&segment->reads_list_head);
+}
+
+char *file_id_to_str(incfs_uuid_t id)
+{
+	char *result = kmalloc(1 + sizeof(id.bytes) * 2, GFP_NOFS);
+	char *end;
+
+	if (!result)
+		return NULL;
+
+	end = bin2hex(result, id.bytes, sizeof(id.bytes));
+	*end = 0;
+	return result;
+}
+
+struct dentry *incfs_lookup_dentry(struct dentry *parent, const char *name)
+{
+	struct inode *inode;
+	struct dentry *result = NULL;
+
+	if (!parent)
+		return ERR_PTR(-EFAULT);
+
+	inode = d_inode(parent);
+	inode_lock_nested(inode, I_MUTEX_PARENT);
+	result = lookup_one_len(name, parent, strlen(name));
+	inode_unlock(inode);
+
+	if (IS_ERR(result))
+		pr_warn("%s err:%ld\n", __func__, PTR_ERR(result));
+
+	return result;
+}
+
+static struct data_file *handle_mapped_file(struct mount_info *mi,
+					    struct data_file *df)
+{
+	char *file_id_str;
+	struct dentry *index_file_dentry;
+	struct path path;
+	struct file *bf;
+	struct data_file *result = NULL;
+	const struct cred *old_cred;
+
+	file_id_str = file_id_to_str(df->df_id);
+	if (!file_id_str)
+		return ERR_PTR(-ENOENT);
+
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir,
+						file_id_str);
+	kfree(file_id_str);
+	if (!index_file_dentry)
+		return ERR_PTR(-ENOENT);
+	if (IS_ERR(index_file_dentry))
+		return (struct data_file *)index_file_dentry;
+	if (!d_really_is_positive(index_file_dentry)) {
+		result = ERR_PTR(-ENOENT);
+		goto out;
+	}
+
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = index_file_dentry
+	};
+
+	old_cred = override_creds(mi->mi_owner);
+	bf = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			 current_cred());
+	revert_creds(old_cred);
+
+	if (IS_ERR(bf)) {
+		result = (struct data_file *)bf;
+		goto out;
+	}
+
+	result = incfs_open_data_file(mi, bf);
+	fput(bf);
+	if (IS_ERR(result))
+		goto out;
+
+	result->df_mapped_offset = df->df_metadata_off;
+
+out:
+	dput(index_file_dentry);
+	return result;
+}
+
+struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf)
+{
+	struct data_file *df = NULL;
+	struct backing_file_context *bfc = NULL;
+	int md_records;
+	u64 size;
+	int error = 0;
+	int i;
+
+	if (!bf || !mi)
+		return ERR_PTR(-EFAULT);
+
+	if (!S_ISREG(bf->f_inode->i_mode))
+		return ERR_PTR(-EBADF);
+
+	bfc = incfs_alloc_bfc(mi, bf);
+	if (IS_ERR(bfc))
+		return ERR_CAST(bfc);
+
+	df = kzalloc(sizeof(*df), GFP_NOFS);
+	if (!df) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	mutex_init(&df->df_enable_verity);
+
+	df->df_backing_file_context = bfc;
+	df->df_mount_info = mi;
+	for (i = 0; i < ARRAY_SIZE(df->df_segments); i++)
+		data_file_segment_init(&df->df_segments[i]);
+
+	error = incfs_read_file_header(bfc, &df->df_metadata_off, &df->df_id,
+				       &size, &df->df_header_flags);
+
+	if (error)
+		goto out;
+
+	df->df_size = size;
+	if (size > 0)
+		df->df_data_block_count = get_blocks_count_for_size(size);
+
+	if (df->df_header_flags & INCFS_FILE_MAPPED) {
+		struct data_file *mapped_df = handle_mapped_file(mi, df);
+
+		incfs_free_data_file(df);
+		return mapped_df;
+	}
+
+	md_records = incfs_scan_metadata_chain(df);
+	if (md_records < 0)
+		error = md_records;
+
+out:
+	if (error) {
+		incfs_free_bfc(bfc);
+		if (df)
+			df->df_backing_file_context = NULL;
+		incfs_free_data_file(df);
+		return ERR_PTR(error);
+	}
+	return df;
+}
+
+void incfs_free_data_file(struct data_file *df)
+{
+	u32 data_blocks_written, hash_blocks_written;
+
+	if (!df)
+		return;
+
+	data_blocks_written = atomic_read(&df->df_data_blocks_written);
+	hash_blocks_written = atomic_read(&df->df_hash_blocks_written);
+
+	if (data_blocks_written != df->df_initial_data_blocks_written ||
+	    hash_blocks_written != df->df_initial_hash_blocks_written) {
+		struct backing_file_context *bfc = df->df_backing_file_context;
+		int error = -1;
+
+		if (bfc && !mutex_lock_interruptible(&bfc->bc_mutex)) {
+			error = incfs_write_status_to_backing_file(
+						df->df_backing_file_context,
+						df->df_status_offset,
+						data_blocks_written,
+						hash_blocks_written);
+			mutex_unlock(&bfc->bc_mutex);
+		}
+
+		if (error)
+			/* Nothing can be done, just warn */
+			pr_warn("incfs: failed to write status to backing file\n");
+	}
+
+	incfs_free_mtree(df->df_hash_tree);
+	incfs_free_bfc(df->df_backing_file_context);
+	kfree(df->df_signature);
+	kfree(df->df_verity_file_digest.data);
+	kfree(df->df_verity_signature);
+	mutex_destroy(&df->df_enable_verity);
+	kfree(df);
+}
+
+int make_inode_ready_for_data_ops(struct mount_info *mi,
+				struct inode *inode,
+				struct file *backing_file)
+{
+	struct inode_info *node = get_incfs_node(inode);
+	struct data_file *df = NULL;
+	int err = 0;
+
+	inode_lock(inode);
+	if (S_ISREG(inode->i_mode)) {
+		if (!node->n_file) {
+			df = incfs_open_data_file(mi, backing_file);
+
+			if (IS_ERR(df))
+				err = PTR_ERR(df);
+			else
+				node->n_file = df;
+		}
+	} else
+		err = -EBADF;
+	inode_unlock(inode);
+	return err;
+}
+
+struct dir_file *incfs_open_dir_file(struct mount_info *mi, struct file *bf)
+{
+	struct dir_file *dir = NULL;
+
+	if (!S_ISDIR(bf->f_inode->i_mode))
+		return ERR_PTR(-EBADF);
+
+	dir = kzalloc(sizeof(*dir), GFP_NOFS);
+	if (!dir)
+		return ERR_PTR(-ENOMEM);
+
+	dir->backing_dir = get_file(bf);
+	dir->mount_info = mi;
+	return dir;
+}
+
+void incfs_free_dir_file(struct dir_file *dir)
+{
+	if (!dir)
+		return;
+	if (dir->backing_dir)
+		fput(dir->backing_dir);
+	kfree(dir);
+}
+
+static ssize_t zstd_decompress_safe(struct mount_info *mi,
+				    struct mem_range src, struct mem_range dst)
+{
+	ssize_t result;
+	ZSTD_inBuffer inbuf = {.src = src.data,	.size = src.len};
+	ZSTD_outBuffer outbuf = {.dst = dst.data, .size = dst.len};
+
+	result = mutex_lock_interruptible(&mi->mi_zstd_workspace_mutex);
+	if (result)
+		return result;
+
+	if (!mi->mi_zstd_stream) {
+		unsigned int workspace_size = ZSTD_DStreamWorkspaceBound(
+						INCFS_DATA_FILE_BLOCK_SIZE);
+		void *workspace = kvmalloc(workspace_size, GFP_NOFS);
+		ZSTD_DStream *stream;
+
+		if (!workspace) {
+			result = -ENOMEM;
+			goto out;
+		}
+
+		stream = ZSTD_initDStream(INCFS_DATA_FILE_BLOCK_SIZE, workspace,
+				  workspace_size);
+		if (!stream) {
+			kvfree(workspace);
+			result = -EIO;
+			goto out;
+		}
+
+		mi->mi_zstd_workspace = workspace;
+		mi->mi_zstd_stream = stream;
+	}
+
+	result = ZSTD_decompressStream(mi->mi_zstd_stream, &outbuf, &inbuf) ?
+		-EBADMSG : outbuf.pos;
+
+	mod_delayed_work(system_wq, &mi->mi_zstd_cleanup_work,
+			 msecs_to_jiffies(5000));
+
+out:
+	mutex_unlock(&mi->mi_zstd_workspace_mutex);
+	return result;
+}
+
+static ssize_t decompress(struct mount_info *mi,
+			  struct mem_range src, struct mem_range dst, int alg)
+{
+	int result;
+
+	switch (alg) {
+	case INCFS_BLOCK_COMPRESSED_LZ4:
+		result = LZ4_decompress_safe(src.data, dst.data, src.len,
+					     dst.len);
+		if (result < 0)
+			return -EBADMSG;
+		return result;
+
+	case INCFS_BLOCK_COMPRESSED_ZSTD:
+		return zstd_decompress_safe(mi, src, dst);
+
+	default:
+		WARN_ON(true);
+		return -EOPNOTSUPP;
+	}
+}
+
+static void log_read_one_record(struct read_log *rl, struct read_log_state *rs)
+{
+	union log_record *record =
+		(union log_record *)((u8 *)rl->rl_ring_buf + rs->next_offset);
+	size_t record_size;
+
+	switch (record->full_record.type) {
+	case FULL:
+		rs->base_record = record->full_record;
+		record_size = sizeof(record->full_record);
+		break;
+
+	case SAME_FILE:
+		rs->base_record.block_index =
+			record->same_file.block_index;
+		rs->base_record.absolute_ts_us +=
+			record->same_file.relative_ts_us;
+		rs->base_record.uid = record->same_file.uid;
+		record_size = sizeof(record->same_file);
+		break;
+
+	case SAME_FILE_CLOSE_BLOCK:
+		rs->base_record.block_index +=
+			record->same_file_close_block.block_index_delta;
+		rs->base_record.absolute_ts_us +=
+			record->same_file_close_block.relative_ts_us;
+		record_size = sizeof(record->same_file_close_block);
+		break;
+
+	case SAME_FILE_CLOSE_BLOCK_SHORT:
+		rs->base_record.block_index +=
+			record->same_file_close_block_short.block_index_delta;
+		rs->base_record.absolute_ts_us +=
+		   record->same_file_close_block_short.relative_ts_tens_us * 10;
+		record_size = sizeof(record->same_file_close_block_short);
+		break;
+
+	case SAME_FILE_NEXT_BLOCK:
+		++rs->base_record.block_index;
+		rs->base_record.absolute_ts_us +=
+			record->same_file_next_block.relative_ts_us;
+		record_size = sizeof(record->same_file_next_block);
+		break;
+
+	case SAME_FILE_NEXT_BLOCK_SHORT:
+		++rs->base_record.block_index;
+		rs->base_record.absolute_ts_us +=
+		    record->same_file_next_block_short.relative_ts_tens_us * 10;
+		record_size = sizeof(record->same_file_next_block_short);
+		break;
+	}
+
+	rs->next_offset += record_size;
+	if (rs->next_offset > rl->rl_size - sizeof(*record)) {
+		rs->next_offset = 0;
+		++rs->current_pass_no;
+	}
+	++rs->current_record_no;
+}
+
+static void log_block_read(struct mount_info *mi, incfs_uuid_t *id,
+			   int block_index)
+{
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state *head, *tail;
+	s64 now_us;
+	s64 relative_us;
+	union log_record record;
+	size_t record_size;
+	uid_t uid = current_uid().val;
+	int block_delta;
+	bool same_file, same_uid;
+	bool next_block, close_block, very_close_block;
+	bool close_time, very_close_time, very_very_close_time;
+
+	/*
+	 * This may read the old value, but it's OK to delay the logging start
+	 * right after the configuration update.
+	 */
+	if (READ_ONCE(log->rl_size) == 0)
+		return;
+
+	now_us = ktime_to_us(ktime_get());
+
+	spin_lock(&log->rl_lock);
+	if (log->rl_size == 0) {
+		spin_unlock(&log->rl_lock);
+		return;
+	}
+
+	head = &log->rl_head;
+	tail = &log->rl_tail;
+	relative_us = now_us - head->base_record.absolute_ts_us;
+
+	same_file = !memcmp(id, &head->base_record.file_id,
+			    sizeof(incfs_uuid_t));
+	same_uid = uid == head->base_record.uid;
+
+	block_delta = block_index - head->base_record.block_index;
+	next_block = block_delta == 1;
+	very_close_block = block_delta >= S8_MIN && block_delta <= S8_MAX;
+	close_block = block_delta >= S16_MIN && block_delta <= S16_MAX;
+
+	very_very_close_time = relative_us < (1 << 5) * 10;
+	very_close_time = relative_us < (1 << 13);
+	close_time = relative_us < (1 << 16);
+
+	if (same_file && same_uid && next_block && very_very_close_time) {
+		record.same_file_next_block_short =
+			(struct same_file_next_block_short){
+				.type = SAME_FILE_NEXT_BLOCK_SHORT,
+				.relative_ts_tens_us = div_s64(relative_us, 10),
+			};
+		record_size = sizeof(struct same_file_next_block_short);
+	} else if (same_file && same_uid && next_block && very_close_time) {
+		record.same_file_next_block = (struct same_file_next_block){
+			.type = SAME_FILE_NEXT_BLOCK,
+			.relative_ts_us = relative_us,
+		};
+		record_size = sizeof(struct same_file_next_block);
+	} else if (same_file && same_uid && very_close_block &&
+		   very_very_close_time) {
+		record.same_file_close_block_short =
+			(struct same_file_close_block_short){
+				.type = SAME_FILE_CLOSE_BLOCK_SHORT,
+				.relative_ts_tens_us = div_s64(relative_us, 10),
+				.block_index_delta = block_delta,
+			};
+		record_size = sizeof(struct same_file_close_block_short);
+	} else if (same_file && same_uid && close_block && very_close_time) {
+		record.same_file_close_block = (struct same_file_close_block){
+				.type = SAME_FILE_CLOSE_BLOCK,
+				.relative_ts_us = relative_us,
+				.block_index_delta = block_delta,
+			};
+		record_size = sizeof(struct same_file_close_block);
+	} else if (same_file && close_time) {
+		record.same_file = (struct same_file){
+			.type = SAME_FILE,
+			.block_index = block_index,
+			.relative_ts_us = relative_us,
+			.uid = uid,
+		};
+		record_size = sizeof(struct same_file);
+	} else {
+		record.full_record = (struct full_record){
+			.type = FULL,
+			.block_index = block_index,
+			.file_id = *id,
+			.absolute_ts_us = now_us,
+			.uid = uid,
+		};
+		head->base_record.file_id = *id;
+		record_size = sizeof(struct full_record);
+	}
+
+	head->base_record.block_index = block_index;
+	head->base_record.absolute_ts_us = now_us;
+
+	/* Advance tail beyond area we are going to overwrite */
+	while (tail->current_pass_no < head->current_pass_no &&
+	       tail->next_offset < head->next_offset + record_size)
+		log_read_one_record(log, tail);
+
+	memcpy(((u8 *)log->rl_ring_buf) + head->next_offset, &record,
+	       record_size);
+	head->next_offset += record_size;
+	if (head->next_offset > log->rl_size - sizeof(record)) {
+		head->next_offset = 0;
+		++head->current_pass_no;
+	}
+	++head->current_record_no;
+
+	spin_unlock(&log->rl_lock);
+	schedule_delayed_work(&log->ml_wakeup_work, msecs_to_jiffies(16));
+}
+
+static int validate_hash_tree(struct backing_file_context *bfc, struct file *f,
+			      int block_index, struct mem_range data, u8 *buf)
+{
+	struct data_file *df = get_incfs_data_file(f);
+	u8 stored_digest[INCFS_MAX_HASH_SIZE] = {};
+	u8 calculated_digest[INCFS_MAX_HASH_SIZE] = {};
+	struct mtree *tree = NULL;
+	struct incfs_df_signature *sig = NULL;
+	int digest_size;
+	int hash_block_index = block_index;
+	int lvl;
+	int res;
+	loff_t hash_block_offset[INCFS_MAX_MTREE_LEVELS];
+	size_t hash_offset_in_block[INCFS_MAX_MTREE_LEVELS];
+	int hash_per_block;
+	pgoff_t file_pages;
+
+	/*
+	 * Memory barrier to make sure tree is fully present if added via enable
+	 * verity
+	 */
+	tree = smp_load_acquire(&df->df_hash_tree);
+	sig = df->df_signature;
+	if (!tree || !sig)
+		return 0;
+
+	digest_size = tree->alg->digest_size;
+	hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	for (lvl = 0; lvl < tree->depth; lvl++) {
+		loff_t lvl_off = tree->hash_level_suboffset[lvl];
+
+		hash_block_offset[lvl] =
+			lvl_off + round_down(hash_block_index * digest_size,
+					     INCFS_DATA_FILE_BLOCK_SIZE);
+		hash_offset_in_block[lvl] = hash_block_index * digest_size %
+					    INCFS_DATA_FILE_BLOCK_SIZE;
+		hash_block_index /= hash_per_block;
+	}
+
+	memcpy(stored_digest, tree->root_hash, digest_size);
+
+	file_pages = DIV_ROUND_UP(df->df_size, INCFS_DATA_FILE_BLOCK_SIZE);
+	for (lvl = tree->depth - 1; lvl >= 0; lvl--) {
+		pgoff_t hash_page =
+			file_pages +
+			hash_block_offset[lvl] / INCFS_DATA_FILE_BLOCK_SIZE;
+		struct page *page = find_get_page_flags(
+			f->f_inode->i_mapping, hash_page, FGP_ACCESSED);
+
+		if (page && PageChecked(page)) {
+			u8 *addr = kmap_atomic(page);
+
+			memcpy(stored_digest, addr + hash_offset_in_block[lvl],
+			       digest_size);
+			kunmap_atomic(addr);
+			put_page(page);
+			continue;
+		}
+
+		if (page)
+			put_page(page);
+
+		res = incfs_kread(bfc, buf, INCFS_DATA_FILE_BLOCK_SIZE,
+				  hash_block_offset[lvl] + sig->hash_offset);
+		if (res < 0)
+			return res;
+		if (res != INCFS_DATA_FILE_BLOCK_SIZE)
+			return -EIO;
+		res = incfs_calc_digest(tree->alg,
+					range(buf, INCFS_DATA_FILE_BLOCK_SIZE),
+					range(calculated_digest, digest_size));
+		if (res)
+			return res;
+
+		if (memcmp(stored_digest, calculated_digest, digest_size)) {
+			int i;
+			bool zero = true;
+
+			pr_warn("incfs: Hash mismatch lvl:%d blk:%d\n",
+				lvl, block_index);
+			for (i = 0; i < digest_size; i++)
+				if (stored_digest[i]) {
+					zero = false;
+					break;
+				}
+
+			if (zero)
+				pr_debug("Note saved_digest all zero - did you forget to load the hashes?\n");
+			return -EBADMSG;
+		}
+
+		memcpy(stored_digest, buf + hash_offset_in_block[lvl],
+		       digest_size);
+
+		page = grab_cache_page(f->f_inode->i_mapping, hash_page);
+		if (page) {
+			u8 *addr = kmap_atomic(page);
+
+			memcpy(addr, buf, INCFS_DATA_FILE_BLOCK_SIZE);
+			kunmap_atomic(addr);
+			SetPageChecked(page);
+			unlock_page(page);
+			put_page(page);
+		}
+	}
+
+	res = incfs_calc_digest(tree->alg, data,
+				range(calculated_digest, digest_size));
+	if (res)
+		return res;
+
+	if (memcmp(stored_digest, calculated_digest, digest_size)) {
+		pr_debug("Leaf hash mismatch blk:%d\n", block_index);
+		return -EBADMSG;
+	}
+
+	return 0;
+}
+
+static struct data_file_segment *get_file_segment(struct data_file *df,
+						  int block_index)
+{
+	int seg_idx = block_index % ARRAY_SIZE(df->df_segments);
+
+	return &df->df_segments[seg_idx];
+}
+
+static bool is_data_block_present(struct data_file_block *block)
+{
+	return (block->db_backing_file_data_offset != 0) &&
+	       (block->db_stored_size != 0);
+}
+
+static void convert_data_file_block(struct incfs_blockmap_entry *bme,
+				    struct data_file_block *res_block)
+{
+	u16 flags = le16_to_cpu(bme->me_flags);
+
+	res_block->db_backing_file_data_offset =
+		le16_to_cpu(bme->me_data_offset_hi);
+	res_block->db_backing_file_data_offset <<= 32;
+	res_block->db_backing_file_data_offset |=
+		le32_to_cpu(bme->me_data_offset_lo);
+	res_block->db_stored_size = le16_to_cpu(bme->me_data_size);
+	res_block->db_comp_alg = flags & INCFS_BLOCK_COMPRESSED_MASK;
+}
+
+static int get_data_file_block(struct data_file *df, int index,
+			       struct data_file_block *res_block)
+{
+	struct incfs_blockmap_entry bme = {};
+	struct backing_file_context *bfc = NULL;
+	loff_t blockmap_off = 0;
+	int error = 0;
+
+	if (!df || !res_block)
+		return -EFAULT;
+
+	blockmap_off = df->df_blockmap_off;
+	bfc = df->df_backing_file_context;
+
+	if (index < 0 || blockmap_off == 0)
+		return -EINVAL;
+
+	error = incfs_read_blockmap_entry(bfc, index, blockmap_off, &bme);
+	if (error)
+		return error;
+
+	convert_data_file_block(&bme, res_block);
+	return 0;
+}
+
+static int check_room_for_one_range(u32 size, u32 size_out)
+{
+	if (size_out + sizeof(struct incfs_filled_range) > size)
+		return -ERANGE;
+	return 0;
+}
+
+static int copy_one_range(struct incfs_filled_range *range, void __user *buffer,
+			  u32 size, u32 *size_out)
+{
+	int error = check_room_for_one_range(size, *size_out);
+	if (error)
+		return error;
+
+	if (copy_to_user(((char __user *)buffer) + *size_out, range,
+				sizeof(*range)))
+		return -EFAULT;
+
+	*size_out += sizeof(*range);
+	return 0;
+}
+
+#define READ_BLOCKMAP_ENTRIES 512
+int incfs_get_filled_blocks(struct data_file *df,
+			    struct incfs_file_data *fd,
+			    struct incfs_get_filled_blocks_args *arg)
+{
+	int error = 0;
+	bool in_range = false;
+	struct incfs_filled_range range;
+	void __user *buffer = u64_to_user_ptr(arg->range_buffer);
+	u32 size = arg->range_buffer_size;
+	u32 end_index =
+		arg->end_index ? arg->end_index : df->df_total_block_count;
+	u32 *size_out = &arg->range_buffer_size_out;
+	int i = READ_BLOCKMAP_ENTRIES - 1;
+	int entries_read = 0;
+	struct incfs_blockmap_entry *bme;
+	int data_blocks_filled = 0;
+	int hash_blocks_filled = 0;
+
+	*size_out = 0;
+	if (end_index > df->df_total_block_count)
+		end_index = df->df_total_block_count;
+	arg->total_blocks_out = df->df_total_block_count;
+	arg->data_blocks_out = df->df_data_block_count;
+
+	if (atomic_read(&df->df_data_blocks_written) ==
+	    df->df_data_block_count) {
+		pr_debug("File marked full, fast get_filled_blocks");
+		if (arg->start_index > end_index) {
+			arg->index_out = arg->start_index;
+			return 0;
+		}
+		arg->index_out = arg->start_index;
+
+		error = check_room_for_one_range(size, *size_out);
+		if (error)
+			return error;
+
+		range = (struct incfs_filled_range){
+			.begin = arg->start_index,
+			.end = end_index,
+		};
+
+		error = copy_one_range(&range, buffer, size, size_out);
+		if (error)
+			return error;
+		arg->index_out = end_index;
+		return 0;
+	}
+
+	bme = kzalloc(sizeof(*bme) * READ_BLOCKMAP_ENTRIES,
+		      GFP_NOFS | __GFP_COMP);
+	if (!bme)
+		return -ENOMEM;
+
+	for (arg->index_out = arg->start_index; arg->index_out < end_index;
+	     ++arg->index_out) {
+		struct data_file_block dfb;
+
+		if (++i == READ_BLOCKMAP_ENTRIES) {
+			entries_read = incfs_read_blockmap_entries(
+				df->df_backing_file_context, bme,
+				arg->index_out, READ_BLOCKMAP_ENTRIES,
+				df->df_blockmap_off);
+			if (entries_read < 0) {
+				error = entries_read;
+				break;
+			}
+
+			i = 0;
+		}
+
+		if (i >= entries_read) {
+			error = -EIO;
+			break;
+		}
+
+		convert_data_file_block(bme + i, &dfb);
+
+		if (is_data_block_present(&dfb)) {
+			if (arg->index_out >= df->df_data_block_count)
+				++hash_blocks_filled;
+			else
+				++data_blocks_filled;
+		}
+
+		if (is_data_block_present(&dfb) == in_range)
+			continue;
+
+		if (!in_range) {
+			error = check_room_for_one_range(size, *size_out);
+			if (error)
+				break;
+			in_range = true;
+			range.begin = arg->index_out;
+		} else {
+			range.end = arg->index_out;
+			error = copy_one_range(&range, buffer, size, size_out);
+			if (error) {
+				/* there will be another try out of the loop,
+				 * it will reset the index_out if it fails too
+				 */
+				break;
+			}
+			in_range = false;
+		}
+	}
+
+	if (in_range) {
+		range.end = arg->index_out;
+		error = copy_one_range(&range, buffer, size, size_out);
+		if (error)
+			arg->index_out = range.begin;
+	}
+
+	if (arg->start_index == 0) {
+		fd->fd_get_block_pos = 0;
+		fd->fd_filled_data_blocks = 0;
+		fd->fd_filled_hash_blocks = 0;
+	}
+
+	if (arg->start_index == fd->fd_get_block_pos) {
+		fd->fd_get_block_pos = arg->index_out + 1;
+		fd->fd_filled_data_blocks += data_blocks_filled;
+		fd->fd_filled_hash_blocks += hash_blocks_filled;
+	}
+
+	if (fd->fd_get_block_pos == df->df_total_block_count + 1) {
+		if (fd->fd_filled_data_blocks >
+		   atomic_read(&df->df_data_blocks_written))
+			atomic_set(&df->df_data_blocks_written,
+				   fd->fd_filled_data_blocks);
+
+		if (fd->fd_filled_hash_blocks >
+		   atomic_read(&df->df_hash_blocks_written))
+			atomic_set(&df->df_hash_blocks_written,
+				   fd->fd_filled_hash_blocks);
+	}
+
+	kfree(bme);
+	return error;
+}
+
+static bool is_read_done(struct pending_read *read)
+{
+	return atomic_read_acquire(&read->done) != 0;
+}
+
+static void set_read_done(struct pending_read *read)
+{
+	atomic_set_release(&read->done, 1);
+}
+
+/*
+ * Notifies a given data file about pending read from a given block.
+ * Returns a new pending read entry.
+ */
+static struct pending_read *add_pending_read(struct data_file *df,
+					     int block_index)
+{
+	struct pending_read *result = NULL;
+	struct data_file_segment *segment = NULL;
+	struct mount_info *mi = NULL;
+
+	segment = get_file_segment(df, block_index);
+	mi = df->df_mount_info;
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return NULL;
+
+	result->file_id = df->df_id;
+	result->block_index = block_index;
+	result->timestamp_us = ktime_to_us(ktime_get());
+	result->uid = current_uid().val;
+
+	spin_lock(&mi->pending_read_lock);
+
+	result->serial_number = ++mi->mi_last_pending_read_number;
+	mi->mi_pending_reads_count++;
+
+	list_add_rcu(&result->mi_reads_list, &mi->mi_reads_list_head);
+	list_add_rcu(&result->segment_reads_list, &segment->reads_list_head);
+
+	spin_unlock(&mi->pending_read_lock);
+
+	wake_up_all(&mi->mi_pending_reads_notif_wq);
+	return result;
+}
+
+static void free_pending_read_entry(struct rcu_head *entry)
+{
+	struct pending_read *read;
+
+	read = container_of(entry, struct pending_read, rcu);
+
+	kfree(read);
+}
+
+/* Notifies a given data file that pending read is completed. */
+static void remove_pending_read(struct data_file *df, struct pending_read *read)
+{
+	struct mount_info *mi = NULL;
+
+	if (!df || !read) {
+		WARN_ON(!df);
+		WARN_ON(!read);
+		return;
+	}
+
+	mi = df->df_mount_info;
+
+	spin_lock(&mi->pending_read_lock);
+
+	list_del_rcu(&read->mi_reads_list);
+	list_del_rcu(&read->segment_reads_list);
+
+	mi->mi_pending_reads_count--;
+
+	spin_unlock(&mi->pending_read_lock);
+
+	/* Don't free. Wait for readers */
+	call_rcu(&read->rcu, free_pending_read_entry);
+}
+
+static void notify_pending_reads(struct mount_info *mi,
+		struct data_file_segment *segment,
+		int index)
+{
+	struct pending_read *entry = NULL;
+
+	/* Notify pending reads waiting for this block. */
+	rcu_read_lock();
+	list_for_each_entry_rcu(entry, &segment->reads_list_head,
+						segment_reads_list) {
+		if (entry->block_index == index)
+			set_read_done(entry);
+	}
+	rcu_read_unlock();
+	wake_up_all(&segment->new_data_arrival_wq);
+
+	atomic_inc(&mi->mi_blocks_written);
+	wake_up_all(&mi->mi_blocks_written_notif_wq);
+}
+
+static int usleep_interruptible(u32 us)
+{
+	/* See:
+	 * https://www.kernel.org/doc/Documentation/timers/timers-howto.txt
+	 * for explanation
+	 */
+	if (us < 10) {
+		udelay(us);
+		return 0;
+	} else if (us < 20000) {
+		usleep_range(us, us + us / 10);
+		return 0;
+	} else
+		return msleep_interruptible(us / 1000);
+}
+
+static int wait_for_data_block(struct data_file *df, int block_index,
+			       struct data_file_block *res_block,
+			       struct incfs_read_data_file_timeouts *timeouts)
+{
+	struct data_file_block block = {};
+	struct data_file_segment *segment = NULL;
+	struct pending_read *read = NULL;
+	struct mount_info *mi = NULL;
+	int error;
+	int wait_res = 0;
+	unsigned int delayed_pending_us = 0, delayed_min_us = 0;
+	bool delayed_pending = false;
+
+	if (!df || !res_block)
+		return -EFAULT;
+
+	if (block_index < 0 || block_index >= df->df_data_block_count)
+		return -EINVAL;
+
+	if (df->df_blockmap_off <= 0 || !df->df_mount_info)
+		return -ENODATA;
+
+	mi = df->df_mount_info;
+	segment = get_file_segment(df, block_index);
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	/* Look up the given block */
+	error = get_data_file_block(df, block_index, &block);
+
+	up_read(&segment->rwsem);
+
+	if (error)
+		return error;
+
+	/* If the block was found, just return it. No need to wait. */
+	if (is_data_block_present(&block)) {
+		*res_block = block;
+		if (timeouts && timeouts->min_time_us) {
+			delayed_min_us = timeouts->min_time_us;
+			error = usleep_interruptible(delayed_min_us);
+			goto out;
+		}
+		return 0;
+	} else {
+		/* If it's not found, create a pending read */
+		if (timeouts && timeouts->max_pending_time_us) {
+			read = add_pending_read(df, block_index);
+			if (!read)
+				return -ENOMEM;
+		} else {
+			log_block_read(mi, &df->df_id, block_index);
+			return -ETIME;
+		}
+	}
+
+	/* Rest of function only applies if timeouts != NULL */
+	if (!timeouts) {
+		pr_warn("incfs: timeouts unexpectedly NULL\n");
+		return -EFSCORRUPTED;
+	}
+
+	/* Wait for notifications about block's arrival */
+	wait_res =
+		wait_event_interruptible_timeout(segment->new_data_arrival_wq,
+			(is_read_done(read)),
+			usecs_to_jiffies(timeouts->max_pending_time_us));
+
+	/* Woke up, the pending read is no longer needed. */
+	remove_pending_read(df, read);
+
+	if (wait_res == 0) {
+		/* Wait has timed out */
+		log_block_read(mi, &df->df_id, block_index);
+		return -ETIME;
+	}
+	if (wait_res < 0) {
+		/*
+		 * Only ERESTARTSYS is really expected here when a signal
+		 * comes while we wait.
+		 */
+		return wait_res;
+	}
+
+	delayed_pending = true;
+	delayed_pending_us = timeouts->max_pending_time_us -
+				jiffies_to_usecs(wait_res);
+	if (timeouts->min_pending_time_us > delayed_pending_us) {
+		delayed_min_us = timeouts->min_pending_time_us -
+					     delayed_pending_us;
+		error = usleep_interruptible(delayed_min_us);
+		if (error)
+			return error;
+	}
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	/*
+	 * Re-read blocks info now, it has just arrived and
+	 * should be available.
+	 */
+	error = get_data_file_block(df, block_index, &block);
+	if (!error) {
+		if (is_data_block_present(&block))
+			*res_block = block;
+		else {
+			/*
+			 * Somehow wait finished successfully but block still
+			 * can't be found. It's not normal.
+			 */
+			pr_warn("incfs: Wait succeeded but block not found.\n");
+			error = -ENODATA;
+		}
+	}
+	up_read(&segment->rwsem);
+
+out:
+	if (error)
+		return error;
+
+	if (delayed_pending) {
+		mi->mi_reads_delayed_pending++;
+		mi->mi_reads_delayed_pending_us +=
+			delayed_pending_us;
+	}
+
+	if (delayed_min_us) {
+		mi->mi_reads_delayed_min++;
+		mi->mi_reads_delayed_min_us += delayed_min_us;
+	}
+
+	return 0;
+}
+
+static int incfs_update_sysfs_error(struct file *file, int index, int result,
+				struct mount_info *mi, struct data_file *df)
+{
+	int error;
+
+	if (result >= 0)
+		return 0;
+
+	error = mutex_lock_interruptible(&mi->mi_le_mutex);
+	if (error)
+		return error;
+
+	mi->mi_le_file_id = df->df_id;
+	mi->mi_le_time_us = ktime_to_us(ktime_get());
+	mi->mi_le_page = index;
+	mi->mi_le_errno = result;
+	mi->mi_le_uid = current_uid().val;
+	mutex_unlock(&mi->mi_le_mutex);
+
+	return 0;
+}
+
+ssize_t incfs_read_data_file_block(struct mem_range dst, struct file *f,
+			int index, struct mem_range tmp,
+			struct incfs_read_data_file_timeouts *timeouts)
+{
+	loff_t pos;
+	ssize_t result;
+	size_t bytes_to_read;
+	struct mount_info *mi = NULL;
+	struct backing_file_context *bfc = NULL;
+	struct data_file_block block = {};
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!dst.data || !df || !tmp.data)
+		return -EFAULT;
+
+	if (tmp.len < 2 * INCFS_DATA_FILE_BLOCK_SIZE)
+		return -ERANGE;
+
+	mi = df->df_mount_info;
+	bfc = df->df_backing_file_context;
+
+	result = wait_for_data_block(df, index, &block, timeouts);
+	if (result < 0)
+		goto out;
+
+	pos = block.db_backing_file_data_offset;
+	if (block.db_comp_alg == COMPRESSION_NONE) {
+		bytes_to_read = min(dst.len, block.db_stored_size);
+		result = incfs_kread(bfc, dst.data, bytes_to_read, pos);
+
+		/* Some data was read, but not enough */
+		if (result >= 0 && result != bytes_to_read)
+			result = -EIO;
+	} else {
+		bytes_to_read = min(tmp.len, block.db_stored_size);
+		result = incfs_kread(bfc, tmp.data, bytes_to_read, pos);
+		if (result == bytes_to_read) {
+			result =
+				decompress(mi, range(tmp.data, bytes_to_read),
+					   dst, block.db_comp_alg);
+			if (result < 0) {
+				const char *name =
+				    bfc->bc_file->f_path.dentry->d_name.name;
+
+				pr_warn_once("incfs: Decompression error. %s",
+					     name);
+			}
+		} else if (result >= 0) {
+			/* Some data was read, but not enough */
+			result = -EIO;
+		}
+	}
+
+	if (result > 0) {
+		int err = validate_hash_tree(bfc, f, index, dst, tmp.data);
+
+		if (err < 0)
+			result = err;
+	}
+
+	if (result >= 0)
+		log_block_read(mi, &df->df_id, index);
+
+out:
+	if (result == -ETIME)
+		mi->mi_reads_failed_timed_out++;
+	else if (result == -EBADMSG)
+		mi->mi_reads_failed_hash_verification++;
+	else if (result < 0)
+		mi->mi_reads_failed_other++;
+
+	incfs_update_sysfs_error(f, index, result, mi, df);
+
+	return result;
+}
+
+ssize_t incfs_read_merkle_tree_blocks(struct mem_range dst,
+				      struct data_file *df, size_t offset)
+{
+	struct backing_file_context *bfc = NULL;
+	struct incfs_df_signature *sig = NULL;
+	size_t to_read = dst.len;
+
+	if (!dst.data || !df)
+		return -EFAULT;
+
+	sig = df->df_signature;
+	bfc = df->df_backing_file_context;
+
+	if (offset > sig->hash_size)
+		return -ERANGE;
+
+	if (offset + to_read > sig->hash_size)
+		to_read = sig->hash_size - offset;
+
+	return incfs_kread(bfc, dst.data, to_read, sig->hash_offset + offset);
+}
+
+int incfs_process_new_data_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data)
+{
+	struct mount_info *mi = NULL;
+	struct backing_file_context *bfc = NULL;
+	struct data_file_segment *segment = NULL;
+	struct data_file_block existing_block = {};
+	u16 flags = 0;
+	int error = 0;
+
+	if (!df || !block)
+		return -EFAULT;
+
+	bfc = df->df_backing_file_context;
+	mi = df->df_mount_info;
+
+	if (block->block_index >= df->df_data_block_count)
+		return -ERANGE;
+
+	segment = get_file_segment(df, block->block_index);
+	if (!segment)
+		return -EFAULT;
+
+	if (block->compression == COMPRESSION_LZ4)
+		flags |= INCFS_BLOCK_COMPRESSED_LZ4;
+	else if (block->compression == COMPRESSION_ZSTD)
+		flags |= INCFS_BLOCK_COMPRESSED_ZSTD;
+	else if (block->compression)
+		return -EINVAL;
+
+	error = down_read_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	error = get_data_file_block(df, block->block_index, &existing_block);
+
+	up_read(&segment->rwsem);
+
+	if (error)
+		return error;
+	if (is_data_block_present(&existing_block)) {
+		/* Block is already present, nothing to do here */
+		return 0;
+	}
+
+	error = down_write_killable(&segment->rwsem);
+	if (error)
+		return error;
+
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (!error) {
+		error = incfs_write_data_block_to_backing_file(
+			bfc, range(data, block->data_len), block->block_index,
+			df->df_blockmap_off, flags);
+		mutex_unlock(&bfc->bc_mutex);
+	}
+	if (!error) {
+		notify_pending_reads(mi, segment, block->block_index);
+		atomic_inc(&df->df_data_blocks_written);
+	}
+
+	up_write(&segment->rwsem);
+
+	if (error)
+		pr_debug("%d error: %d\n", block->block_index, error);
+	return error;
+}
+
+int incfs_read_file_signature(struct data_file *df, struct mem_range dst)
+{
+	struct backing_file_context *bfc = df->df_backing_file_context;
+	struct incfs_df_signature *sig;
+	int read_res = 0;
+
+	if (!dst.data)
+		return -EFAULT;
+
+	sig = df->df_signature;
+	if (!sig)
+		return 0;
+
+	if (dst.len < sig->sig_size)
+		return -E2BIG;
+
+	read_res = incfs_kread(bfc, dst.data, sig->sig_size, sig->sig_offset);
+
+	if (read_res < 0)
+		return read_res;
+
+	if (read_res != sig->sig_size)
+		return -EIO;
+
+	return read_res;
+}
+
+int incfs_process_new_hash_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data)
+{
+	struct backing_file_context *bfc = NULL;
+	struct mount_info *mi = NULL;
+	struct mtree *hash_tree = NULL;
+	struct incfs_df_signature *sig = NULL;
+	loff_t hash_area_base = 0;
+	loff_t hash_area_size = 0;
+	int error = 0;
+
+	if (!df || !block)
+		return -EFAULT;
+
+	if (!(block->flags & INCFS_BLOCK_FLAGS_HASH))
+		return -EINVAL;
+
+	bfc = df->df_backing_file_context;
+	mi = df->df_mount_info;
+
+	if (!df)
+		return -ENOENT;
+
+	hash_tree = df->df_hash_tree;
+	sig = df->df_signature;
+	if (!hash_tree || !sig || sig->hash_offset == 0)
+		return -ENOTSUPP;
+
+	hash_area_base = sig->hash_offset;
+	hash_area_size = sig->hash_size;
+	if (hash_area_size < block->block_index * INCFS_DATA_FILE_BLOCK_SIZE
+				+ block->data_len) {
+		/* Hash block goes beyond dedicated hash area of this file. */
+		return -ERANGE;
+	}
+
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (!error) {
+		error = incfs_write_hash_block_to_backing_file(
+			bfc, range(data, block->data_len), block->block_index,
+			hash_area_base, df->df_blockmap_off, df->df_size);
+		mutex_unlock(&bfc->bc_mutex);
+	}
+	if (!error)
+		atomic_inc(&df->df_hash_blocks_written);
+
+	return error;
+}
+
+static int process_blockmap_md(struct incfs_blockmap *bm,
+			       struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	int error = 0;
+	loff_t base_off = le64_to_cpu(bm->m_base_offset);
+	u32 block_count = le32_to_cpu(bm->m_block_count);
+
+	if (!df)
+		return -EFAULT;
+
+	if (df->df_data_block_count > block_count)
+		return -EBADMSG;
+
+	df->df_total_block_count = block_count;
+	df->df_blockmap_off = base_off;
+	return error;
+}
+
+static int process_file_signature_md(struct incfs_file_signature *sg,
+				struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	struct mtree *hash_tree = NULL;
+	int error = 0;
+	struct incfs_df_signature *signature =
+		kzalloc(sizeof(*signature), GFP_NOFS);
+	void *buf = NULL;
+	ssize_t read;
+
+	if (!signature)
+		return -ENOMEM;
+
+	if (!df || !df->df_backing_file_context ||
+	    !df->df_backing_file_context->bc_file) {
+		error = -ENOENT;
+		goto out;
+	}
+
+	signature->hash_offset = le64_to_cpu(sg->sg_hash_tree_offset);
+	signature->hash_size = le32_to_cpu(sg->sg_hash_tree_size);
+	signature->sig_offset = le64_to_cpu(sg->sg_sig_offset);
+	signature->sig_size = le32_to_cpu(sg->sg_sig_size);
+
+	buf = kzalloc(signature->sig_size, GFP_NOFS);
+	if (!buf) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	read = incfs_kread(df->df_backing_file_context, buf,
+			   signature->sig_size, signature->sig_offset);
+	if (read < 0) {
+		error = read;
+		goto out;
+	}
+
+	if (read != signature->sig_size) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	hash_tree = incfs_alloc_mtree(range(buf, signature->sig_size),
+				      df->df_data_block_count);
+	if (IS_ERR(hash_tree)) {
+		error = PTR_ERR(hash_tree);
+		hash_tree = NULL;
+		goto out;
+	}
+	if (hash_tree->hash_tree_area_size != signature->hash_size) {
+		error = -EINVAL;
+		goto out;
+	}
+	if (signature->hash_size > 0 &&
+	    handler->md_record_offset <= signature->hash_offset) {
+		error = -EINVAL;
+		goto out;
+	}
+	if (handler->md_record_offset <= signature->sig_offset) {
+		error = -EINVAL;
+		goto out;
+	}
+	df->df_hash_tree = hash_tree;
+	hash_tree = NULL;
+	df->df_signature = signature;
+	signature = NULL;
+out:
+	incfs_free_mtree(hash_tree);
+	kfree(signature);
+	kfree(buf);
+
+	return error;
+}
+
+static int process_status_md(struct incfs_status *is,
+			     struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+
+	df->df_initial_data_blocks_written =
+		le32_to_cpu(is->is_data_blocks_written);
+	atomic_set(&df->df_data_blocks_written,
+		   df->df_initial_data_blocks_written);
+
+	df->df_initial_hash_blocks_written =
+		le32_to_cpu(is->is_hash_blocks_written);
+	atomic_set(&df->df_hash_blocks_written,
+		   df->df_initial_hash_blocks_written);
+
+	df->df_status_offset = handler->md_record_offset;
+	return 0;
+}
+
+static int process_file_verity_signature_md(
+		struct incfs_file_verity_signature *vs,
+		struct metadata_handler *handler)
+{
+	struct data_file *df = handler->context;
+	struct incfs_df_verity_signature *verity_signature;
+
+	if (!df)
+		return -EFAULT;
+
+	verity_signature = kzalloc(sizeof(*verity_signature), GFP_NOFS);
+	if (!verity_signature)
+		return -ENOMEM;
+
+	verity_signature->offset = le64_to_cpu(vs->vs_offset);
+	verity_signature->size = le32_to_cpu(vs->vs_size);
+	if (verity_signature->size > FS_VERITY_MAX_SIGNATURE_SIZE) {
+		kfree(verity_signature);
+		return -EFAULT;
+	}
+
+	df->df_verity_signature = verity_signature;
+	return 0;
+}
+
+static int incfs_scan_metadata_chain(struct data_file *df)
+{
+	struct metadata_handler *handler = NULL;
+	int result = 0;
+	int records_count = 0;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+	int nondata_block_count;
+
+	if (!df || !df->df_backing_file_context)
+		return -EFAULT;
+
+	bfc = df->df_backing_file_context;
+
+	handler = kzalloc(sizeof(*handler), GFP_NOFS);
+	if (!handler)
+		return -ENOMEM;
+
+	handler->md_record_offset = df->df_metadata_off;
+	handler->context = df;
+	handler->handle_blockmap = process_blockmap_md;
+	handler->handle_signature = process_file_signature_md;
+	handler->handle_status = process_status_md;
+	handler->handle_verity_signature = process_file_verity_signature_md;
+
+	while (handler->md_record_offset > 0) {
+		error = incfs_read_next_metadata_record(bfc, handler);
+		if (error) {
+			pr_warn("incfs: Error during reading incfs-metadata record. Offset: %lld Record #%d Error code: %d\n",
+				handler->md_record_offset, records_count + 1,
+				-error);
+			break;
+		}
+		records_count++;
+	}
+	if (error) {
+		pr_warn("incfs: Error %d after reading %d incfs-metadata records.\n",
+			 -error, records_count);
+		result = error;
+	} else
+		result = records_count;
+
+	nondata_block_count = df->df_total_block_count -
+		df->df_data_block_count;
+	if (df->df_hash_tree) {
+		int hash_block_count = get_blocks_count_for_size(
+			df->df_hash_tree->hash_tree_area_size);
+
+		/*
+		 * Files that were created with a hash tree have the hash tree
+		 * included in the block map, i.e. nondata_block_count ==
+		 * hash_block_count.  Files whose hash tree was added by
+		 * FS_IOC_ENABLE_VERITY will still have the original block
+		 * count, i.e. nondata_block_count == 0.
+		 */
+		if (nondata_block_count != hash_block_count &&
+		    nondata_block_count != 0)
+			result = -EINVAL;
+	} else if (nondata_block_count != 0) {
+		result = -EINVAL;
+	}
+
+	kfree(handler);
+	return result;
+}
+
+/*
+ * Quickly checks if there are pending reads with a serial number larger
+ * than a given one.
+ */
+bool incfs_fresh_pending_reads_exist(struct mount_info *mi, int last_number)
+{
+	bool result = false;
+
+	spin_lock(&mi->pending_read_lock);
+	result = (mi->mi_last_pending_read_number > last_number) &&
+		(mi->mi_pending_reads_count > 0);
+	spin_unlock(&mi->pending_read_lock);
+	return result;
+}
+
+int incfs_collect_pending_reads(struct mount_info *mi, int sn_lowerbound,
+				struct incfs_pending_read_info *reads,
+				struct incfs_pending_read_info2 *reads2,
+				int reads_size, int *new_max_sn)
+{
+	int reported_reads = 0;
+	struct pending_read *entry = NULL;
+
+	if (!mi)
+		return -EFAULT;
+
+	if (reads_size <= 0)
+		return 0;
+
+	if (!incfs_fresh_pending_reads_exist(mi, sn_lowerbound))
+		return 0;
+
+	rcu_read_lock();
+
+	list_for_each_entry_rcu(entry, &mi->mi_reads_list_head, mi_reads_list) {
+		if (entry->serial_number <= sn_lowerbound)
+			continue;
+
+		if (reads) {
+			reads[reported_reads].file_id = entry->file_id;
+			reads[reported_reads].block_index = entry->block_index;
+			reads[reported_reads].serial_number =
+				entry->serial_number;
+			reads[reported_reads].timestamp_us =
+				entry->timestamp_us;
+		}
+
+		if (reads2) {
+			reads2[reported_reads].file_id = entry->file_id;
+			reads2[reported_reads].block_index = entry->block_index;
+			reads2[reported_reads].serial_number =
+				entry->serial_number;
+			reads2[reported_reads].timestamp_us =
+				entry->timestamp_us;
+			reads2[reported_reads].uid = entry->uid;
+		}
+
+		if (entry->serial_number > *new_max_sn)
+			*new_max_sn = entry->serial_number;
+
+		reported_reads++;
+		if (reported_reads >= reads_size)
+			break;
+	}
+
+	rcu_read_unlock();
+
+	return reported_reads;
+}
+
+struct read_log_state incfs_get_log_state(struct mount_info *mi)
+{
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state result;
+
+	spin_lock(&log->rl_lock);
+	result = log->rl_head;
+	spin_unlock(&log->rl_lock);
+	return result;
+}
+
+int incfs_get_uncollected_logs_count(struct mount_info *mi,
+				     const struct read_log_state *state)
+{
+	struct read_log *log = &mi->mi_log;
+	u32 generation;
+	u64 head_no, tail_no;
+
+	spin_lock(&log->rl_lock);
+	tail_no = log->rl_tail.current_record_no;
+	head_no = log->rl_head.current_record_no;
+	generation = log->rl_head.generation_id;
+	spin_unlock(&log->rl_lock);
+
+	if (generation != state->generation_id)
+		return head_no - tail_no;
+	else
+		return head_no - max_t(u64, tail_no, state->current_record_no);
+}
+
+int incfs_collect_logged_reads(struct mount_info *mi,
+			       struct read_log_state *state,
+			       struct incfs_pending_read_info *reads,
+			       struct incfs_pending_read_info2 *reads2,
+			       int reads_size)
+{
+	int dst_idx;
+	struct read_log *log = &mi->mi_log;
+	struct read_log_state *head, *tail;
+
+	spin_lock(&log->rl_lock);
+	head = &log->rl_head;
+	tail = &log->rl_tail;
+
+	if (state->generation_id != head->generation_id) {
+		pr_debug("read ptr is wrong generation: %u/%u",
+			 state->generation_id, head->generation_id);
+
+		*state = (struct read_log_state){
+			.generation_id = head->generation_id,
+		};
+	}
+
+	if (state->current_record_no < tail->current_record_no) {
+		pr_debug("read ptr is behind, moving: %u/%u -> %u/%u\n",
+			 (u32)state->next_offset,
+			 (u32)state->current_pass_no,
+			 (u32)tail->next_offset, (u32)tail->current_pass_no);
+
+		*state = *tail;
+	}
+
+	for (dst_idx = 0; dst_idx < reads_size; dst_idx++) {
+		if (state->current_record_no == head->current_record_no)
+			break;
+
+		log_read_one_record(log, state);
+
+		if (reads)
+			reads[dst_idx] = (struct incfs_pending_read_info) {
+				.file_id = state->base_record.file_id,
+				.block_index = state->base_record.block_index,
+				.serial_number = state->current_record_no,
+				.timestamp_us =
+					state->base_record.absolute_ts_us,
+			};
+
+		if (reads2)
+			reads2[dst_idx] = (struct incfs_pending_read_info2) {
+				.file_id = state->base_record.file_id,
+				.block_index = state->base_record.block_index,
+				.serial_number = state->current_record_no,
+				.timestamp_us =
+					state->base_record.absolute_ts_us,
+				.uid = state->base_record.uid,
+			};
+	}
+
+	spin_unlock(&log->rl_lock);
+	return dst_idx;
+}
+
diff --git a/fs/incfs/data_mgmt.h b/fs/incfs/data_mgmt.h
new file mode 100644
index 0000000..84db038
--- /dev/null
+++ b/fs/incfs/data_mgmt.h
@@ -0,0 +1,543 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#ifndef _INCFS_DATA_MGMT_H
+#define _INCFS_DATA_MGMT_H
+
+#include <linux/cred.h>
+#include <linux/fs.h>
+#include <linux/types.h>
+#include <linux/mutex.h>
+#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
+#include <linux/completion.h>
+#include <linux/wait.h>
+#include <linux/zstd.h>
+#include <crypto/hash.h>
+#include <linux/rwsem.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+#include "pseudo_files.h"
+
+#define SEGMENTS_PER_FILE 3
+
+enum LOG_RECORD_TYPE {
+	FULL,
+	SAME_FILE,
+	SAME_FILE_CLOSE_BLOCK,
+	SAME_FILE_CLOSE_BLOCK_SHORT,
+	SAME_FILE_NEXT_BLOCK,
+	SAME_FILE_NEXT_BLOCK_SHORT,
+};
+
+struct full_record {
+	enum LOG_RECORD_TYPE type : 3; /* FULL */
+	u32 block_index : 29;
+	incfs_uuid_t file_id;
+	u64 absolute_ts_us;
+	uid_t uid;
+} __packed; /* 32 bytes */
+
+struct same_file {
+	enum LOG_RECORD_TYPE type : 3; /* SAME_FILE */
+	u32 block_index : 29;
+	uid_t uid;
+	u16 relative_ts_us; /* max 2^16 us ~= 64 ms */
+} __packed; /* 10 bytes */
+
+struct same_file_close_block {
+	enum LOG_RECORD_TYPE type : 3; /* SAME_FILE_CLOSE_BLOCK */
+	u16 relative_ts_us : 13; /* max 2^13 us ~= 8 ms */
+	s16 block_index_delta;
+} __packed; /* 4 bytes */
+
+struct same_file_close_block_short {
+	enum LOG_RECORD_TYPE type : 3; /* SAME_FILE_CLOSE_BLOCK_SHORT */
+	u8 relative_ts_tens_us : 5; /* max 2^5*10 us ~= 320 us */
+	s8 block_index_delta;
+} __packed; /* 2 bytes */
+
+struct same_file_next_block {
+	enum LOG_RECORD_TYPE type : 3; /* SAME_FILE_NEXT_BLOCK */
+	u16 relative_ts_us : 13; /* max 2^13 us ~= 8 ms */
+} __packed; /* 2 bytes */
+
+struct same_file_next_block_short {
+	enum LOG_RECORD_TYPE type : 3; /* SAME_FILE_NEXT_BLOCK_SHORT */
+	u8 relative_ts_tens_us : 5; /* max 2^5*10 us ~= 320 us */
+} __packed; /* 1 byte */
+
+union log_record {
+	struct full_record full_record;
+	struct same_file same_file;
+	struct same_file_close_block same_file_close_block;
+	struct same_file_close_block_short same_file_close_block_short;
+	struct same_file_next_block same_file_next_block;
+	struct same_file_next_block_short same_file_next_block_short;
+};
+
+struct read_log_state {
+	/* Log buffer generation id, incremented on configuration changes */
+	u32 generation_id;
+
+	/* Offset in rl_ring_buf to write into. */
+	u32 next_offset;
+
+	/* Current number of writer passes over rl_ring_buf */
+	u32 current_pass_no;
+
+	/* Current full_record to diff against */
+	struct full_record base_record;
+
+	/* Current record number counting from configuration change */
+	u64 current_record_no;
+};
+
+/* A ring buffer to save records about data blocks which were recently read. */
+struct read_log {
+	void *rl_ring_buf;
+
+	int rl_size;
+
+	struct read_log_state rl_head;
+
+	struct read_log_state rl_tail;
+
+	/* A lock to protect the above fields */
+	spinlock_t rl_lock;
+
+	/* A queue of waiters who want to be notified about reads */
+	wait_queue_head_t ml_notif_wq;
+
+	/* A work item to wake up those waiters without slowing down readers */
+	struct delayed_work ml_wakeup_work;
+};
+
+struct mount_options {
+	unsigned int read_timeout_ms;
+	unsigned int readahead_pages;
+	unsigned int read_log_pages;
+	unsigned int read_log_wakeup_count;
+	bool report_uid;
+	char *sysfs_name;
+};
+
+struct mount_info {
+	struct super_block *mi_sb;
+
+	struct path mi_backing_dir_path;
+
+	struct dentry *mi_index_dir;
+
+	struct dentry *mi_incomplete_dir;
+
+	const struct cred *mi_owner;
+
+	struct mount_options mi_options;
+
+	/* This mutex is to be taken before create, rename, delete */
+	struct mutex mi_dir_struct_mutex;
+
+	/*
+	 * A queue of waiters who want to be notified about new pending reads.
+	 */
+	wait_queue_head_t mi_pending_reads_notif_wq;
+
+	/*
+	 * Protects - RCU safe:
+	 *  - reads_list_head
+	 *  - mi_pending_reads_count
+	 *  - mi_last_pending_read_number
+	 *  - data_file_segment.reads_list_head
+	 */
+	spinlock_t pending_read_lock;
+
+	/* List of active pending_read objects */
+	struct list_head mi_reads_list_head;
+
+	/* Total number of items in reads_list_head */
+	int mi_pending_reads_count;
+
+	/*
+	 * Last serial number that was assigned to a pending read.
+	 * 0 means no pending reads have been seen yet.
+	 */
+	int mi_last_pending_read_number;
+
+	/* Temporary buffer for read logger. */
+	struct read_log mi_log;
+
+	/* SELinux needs special xattrs on our pseudo files */
+	struct mem_range pseudo_file_xattr[PSEUDO_FILE_COUNT];
+
+	/* A queue of waiters who want to be notified about blocks_written */
+	wait_queue_head_t mi_blocks_written_notif_wq;
+
+	/* Number of blocks written since mount */
+	atomic_t mi_blocks_written;
+
+	/* Per UID read timeouts */
+	spinlock_t mi_per_uid_read_timeouts_lock;
+	struct incfs_per_uid_read_timeouts *mi_per_uid_read_timeouts;
+	int mi_per_uid_read_timeouts_size;
+
+	/* zstd workspace */
+	struct mutex mi_zstd_workspace_mutex;
+	void *mi_zstd_workspace;
+	ZSTD_DStream *mi_zstd_stream;
+	struct delayed_work mi_zstd_cleanup_work;
+
+	/* sysfs node */
+	struct incfs_sysfs_node *mi_sysfs_node;
+
+	/* Last error information */
+	struct mutex	mi_le_mutex;
+	incfs_uuid_t	mi_le_file_id;
+	u64		mi_le_time_us;
+	u32		mi_le_page;
+	u32		mi_le_errno;
+	uid_t		mi_le_uid;
+
+	/* Number of reads timed out */
+	u32 mi_reads_failed_timed_out;
+
+	/* Number of reads failed because hash verification failed */
+	u32 mi_reads_failed_hash_verification;
+
+	/* Number of reads failed for another reason */
+	u32 mi_reads_failed_other;
+
+	/* Number of reads delayed because page had to be fetched */
+	u32 mi_reads_delayed_pending;
+
+	/* Total time waiting for pages to be fetched */
+	u64 mi_reads_delayed_pending_us;
+
+	/*
+	 * Number of reads delayed because of per-uid min_time_us or
+	 * min_pending_time_us settings
+	 */
+	u32 mi_reads_delayed_min;
+
+	/* Total time waiting because of per-uid min_time_us or
+	 * min_pending_time_us settings.
+	 *
+	 * Note that if a read is initially delayed because we have to wait for
+	 * the page, then further delayed because of min_pending_time_us
+	 * setting, this counter gets incremented by only the further delay
+	 * time.
+	 */
+	u64 mi_reads_delayed_min_us;
+};
+
+struct data_file_block {
+	loff_t db_backing_file_data_offset;
+
+	size_t db_stored_size;
+
+	enum incfs_compression_alg db_comp_alg;
+};
+
+struct pending_read {
+	incfs_uuid_t file_id;
+
+	s64 timestamp_us;
+
+	atomic_t done;
+
+	int block_index;
+
+	int serial_number;
+
+	uid_t uid;
+
+	struct list_head mi_reads_list;
+
+	struct list_head segment_reads_list;
+
+	struct rcu_head rcu;
+};
+
+struct data_file_segment {
+	wait_queue_head_t new_data_arrival_wq;
+
+	/* Protects reads and writes from the blockmap */
+	struct rw_semaphore rwsem;
+
+	/* List of active pending_read objects belonging to this segment */
+	/* Protected by mount_info.pending_reads_mutex */
+	struct list_head reads_list_head;
+};
+
+/*
+ * Extra info associated with a file. Just a few bytes set by a user.
+ */
+struct file_attr {
+	loff_t fa_value_offset;
+
+	size_t fa_value_size;
+
+	u32 fa_crc;
+};
+
+
+struct data_file {
+	struct backing_file_context *df_backing_file_context;
+
+	struct mount_info *df_mount_info;
+
+	incfs_uuid_t df_id;
+
+	/*
+	 * Array of segments used to reduce lock contention for the file.
+	 * Segment is chosen for a block depends on the block's index.
+	 */
+	struct data_file_segment df_segments[SEGMENTS_PER_FILE];
+
+	/* Base offset of the first metadata record. */
+	loff_t df_metadata_off;
+
+	/* Base offset of the block map. */
+	loff_t df_blockmap_off;
+
+	/* File size in bytes */
+	loff_t df_size;
+
+	/* File header flags */
+	u32 df_header_flags;
+
+	/* File size in DATA_FILE_BLOCK_SIZE blocks */
+	int df_data_block_count;
+
+	/* Total number of blocks, data + hash */
+	int df_total_block_count;
+
+	/* For mapped files, the offset into the actual file */
+	loff_t df_mapped_offset;
+
+	/* Number of data blocks written to file */
+	atomic_t df_data_blocks_written;
+
+	/* Number of data blocks in the status block */
+	u32 df_initial_data_blocks_written;
+
+	/* Number of hash blocks written to file */
+	atomic_t df_hash_blocks_written;
+
+	/* Number of hash blocks in the status block */
+	u32 df_initial_hash_blocks_written;
+
+	/* Offset to status metadata header */
+	loff_t df_status_offset;
+
+	/*
+	 * Mutex acquired while enabling verity. Note that df_hash_tree is set
+	 * by enable verity.
+	 *
+	 * The backing file mutex bc_mutex  may be taken while this mutex is
+	 * held.
+	 */
+	struct mutex df_enable_verity;
+
+	/*
+	 * Set either at construction time or during enabling verity. In the
+	 * latter case, set via smp_store_release, so use smp_load_acquire to
+	 * read it.
+	 */
+	struct mtree *df_hash_tree;
+
+	/* Guaranteed set if df_hash_tree is set. */
+	struct incfs_df_signature *df_signature;
+
+	/*
+	 * The verity file digest, set when verity is enabled and the file has
+	 * been opened
+	 */
+	struct mem_range df_verity_file_digest;
+
+	struct incfs_df_verity_signature *df_verity_signature;
+};
+
+struct dir_file {
+	struct mount_info *mount_info;
+
+	struct file *backing_dir;
+};
+
+struct inode_info {
+	struct mount_info *n_mount_info; /* A mount, this file belongs to */
+
+	struct inode *n_backing_inode;
+
+	struct data_file *n_file;
+
+	struct inode n_vfs_inode;
+};
+
+struct dentry_info {
+	struct path backing_path;
+};
+
+enum FILL_PERMISSION {
+	CANT_FILL = 0,
+	CAN_FILL = 1,
+};
+
+struct incfs_file_data {
+	/* Does this file handle have INCFS_IOC_FILL_BLOCKS permission */
+	enum FILL_PERMISSION fd_fill_permission;
+
+	/* If INCFS_IOC_GET_FILLED_BLOCKS has been called, where are we */
+	int fd_get_block_pos;
+
+	/* And how many filled blocks are there up to that point */
+	int fd_filled_data_blocks;
+	int fd_filled_hash_blocks;
+};
+
+struct mount_info *incfs_alloc_mount_info(struct super_block *sb,
+					  struct mount_options *options,
+					  struct path *backing_dir_path);
+
+int incfs_realloc_mount_info(struct mount_info *mi,
+			     struct mount_options *options);
+
+void incfs_free_mount_info(struct mount_info *mi);
+
+char *file_id_to_str(incfs_uuid_t id);
+struct dentry *incfs_lookup_dentry(struct dentry *parent, const char *name);
+struct data_file *incfs_open_data_file(struct mount_info *mi, struct file *bf);
+void incfs_free_data_file(struct data_file *df);
+
+struct dir_file *incfs_open_dir_file(struct mount_info *mi, struct file *bf);
+void incfs_free_dir_file(struct dir_file *dir);
+
+struct incfs_read_data_file_timeouts {
+	u32 min_time_us;
+	u32 min_pending_time_us;
+	u32 max_pending_time_us;
+};
+
+ssize_t incfs_read_data_file_block(struct mem_range dst, struct file *f,
+			int index, struct mem_range tmp,
+			struct incfs_read_data_file_timeouts *timeouts);
+
+ssize_t incfs_read_merkle_tree_blocks(struct mem_range dst,
+				      struct data_file *df, size_t offset);
+
+int incfs_get_filled_blocks(struct data_file *df,
+			    struct incfs_file_data *fd,
+			    struct incfs_get_filled_blocks_args *arg);
+
+int incfs_read_file_signature(struct data_file *df, struct mem_range dst);
+
+int incfs_process_new_data_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data);
+
+int incfs_process_new_hash_block(struct data_file *df,
+				 struct incfs_fill_block *block, u8 *data);
+
+bool incfs_fresh_pending_reads_exist(struct mount_info *mi, int last_number);
+
+/*
+ * Collects pending reads and saves them into the array (reads/reads_size).
+ * Only reads with serial_number > sn_lowerbound are reported.
+ * Returns how many reads were saved into the array.
+ */
+int incfs_collect_pending_reads(struct mount_info *mi, int sn_lowerbound,
+				struct incfs_pending_read_info *reads,
+				struct incfs_pending_read_info2 *reads2,
+				int reads_size, int *new_max_sn);
+
+int incfs_collect_logged_reads(struct mount_info *mi,
+			       struct read_log_state *start_state,
+			       struct incfs_pending_read_info *reads,
+			       struct incfs_pending_read_info2 *reads2,
+			       int reads_size);
+struct read_log_state incfs_get_log_state(struct mount_info *mi);
+int incfs_get_uncollected_logs_count(struct mount_info *mi,
+				     const struct read_log_state *state);
+
+static inline struct inode_info *get_incfs_node(struct inode *inode)
+{
+	if (!inode)
+		return NULL;
+
+	if (inode->i_sb->s_magic != INCFS_MAGIC_NUMBER) {
+		/* This inode doesn't belong to us. */
+		pr_warn_once("incfs: %s on an alien inode.", __func__);
+		return NULL;
+	}
+
+	return container_of(inode, struct inode_info, n_vfs_inode);
+}
+
+static inline struct data_file *get_incfs_data_file(struct file *f)
+{
+	struct inode_info *node = NULL;
+
+	if (!f)
+		return NULL;
+
+	if (!S_ISREG(f->f_inode->i_mode))
+		return NULL;
+
+	node = get_incfs_node(f->f_inode);
+	if (!node)
+		return NULL;
+
+	return node->n_file;
+}
+
+static inline struct dir_file *get_incfs_dir_file(struct file *f)
+{
+	if (!f)
+		return NULL;
+
+	if (!S_ISDIR(f->f_inode->i_mode))
+		return NULL;
+
+	return (struct dir_file *)f->private_data;
+}
+
+/*
+ * Make sure that inode_info.n_file is initialized and inode can be used
+ * for reading and writing data from/to the backing file.
+ */
+int make_inode_ready_for_data_ops(struct mount_info *mi,
+				struct inode *inode,
+				struct file *backing_file);
+
+static inline struct dentry_info *get_incfs_dentry(const struct dentry *d)
+{
+	if (!d)
+		return NULL;
+
+	return (struct dentry_info *)d->d_fsdata;
+}
+
+static inline void get_incfs_backing_path(const struct dentry *d,
+					  struct path *path)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (!di) {
+		*path = (struct path) {};
+		return;
+	}
+
+	*path = di->backing_path;
+	path_get(path);
+}
+
+static inline int get_blocks_count_for_size(u64 size)
+{
+	if (size == 0)
+		return 0;
+	return 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+}
+
+#endif /* _INCFS_DATA_MGMT_H */
diff --git a/fs/incfs/format.c b/fs/incfs/format.c
new file mode 100644
index 0000000..9128cd2
--- /dev/null
+++ b/fs/incfs/format.c
@@ -0,0 +1,752 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <linux/fs.h>
+#include <linux/file.h>
+#include <linux/types.h>
+#include <linux/mutex.h>
+#include <linux/mm.h>
+#include <linux/falloc.h>
+#include <linux/slab.h>
+#include <linux/crc32.h>
+#include <linux/kernel.h>
+
+#include "format.h"
+#include "data_mgmt.h"
+
+struct backing_file_context *incfs_alloc_bfc(struct mount_info *mi,
+					     struct file *backing_file)
+{
+	struct backing_file_context *result = NULL;
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return ERR_PTR(-ENOMEM);
+
+	result->bc_file = get_file(backing_file);
+	result->bc_cred = mi->mi_owner;
+	mutex_init(&result->bc_mutex);
+	return result;
+}
+
+void incfs_free_bfc(struct backing_file_context *bfc)
+{
+	if (!bfc)
+		return;
+
+	if (bfc->bc_file)
+		fput(bfc->bc_file);
+
+	mutex_destroy(&bfc->bc_mutex);
+	kfree(bfc);
+}
+
+static loff_t incfs_get_end_offset(struct file *f)
+{
+	/*
+	 * This function assumes that file size and the end-offset
+	 * are the same. This is not always true.
+	 */
+	return i_size_read(file_inode(f));
+}
+
+/*
+ * Truncate the tail of the file to the given length.
+ * Used to rollback partially successful multistep writes.
+ */
+static int truncate_backing_file(struct backing_file_context *bfc,
+				loff_t new_end)
+{
+	struct inode *inode = NULL;
+	struct dentry *dentry = NULL;
+	loff_t old_end = 0;
+	struct iattr attr;
+	int result = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	if (!bfc->bc_file)
+		return -EFAULT;
+
+	old_end = incfs_get_end_offset(bfc->bc_file);
+	if (old_end == new_end)
+		return 0;
+	if (old_end < new_end)
+		return -EINVAL;
+
+	inode = bfc->bc_file->f_inode;
+	dentry = bfc->bc_file->f_path.dentry;
+
+	attr.ia_size = new_end;
+	attr.ia_valid = ATTR_SIZE;
+
+	inode_lock(inode);
+	result = notify_change(dentry, &attr, NULL);
+	inode_unlock(inode);
+
+	return result;
+}
+
+static int write_to_bf(struct backing_file_context *bfc, const void *buf,
+			size_t count, loff_t pos)
+{
+	ssize_t res = incfs_kwrite(bfc, buf, count, pos);
+
+	if (res < 0)
+		return res;
+	if (res != count)
+		return -EIO;
+	return 0;
+}
+
+static int append_zeros_no_fallocate(struct backing_file_context *bfc,
+				     size_t file_size, size_t len)
+{
+	u8 buffer[256] = {};
+	size_t i;
+
+	for (i = 0; i < len; i += sizeof(buffer)) {
+		int to_write = len - i > sizeof(buffer)
+			? sizeof(buffer) : len - i;
+		int err = write_to_bf(bfc, buffer, to_write, file_size + i);
+
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
+/* Append a given number of zero bytes to the end of the backing file. */
+static int append_zeros(struct backing_file_context *bfc, size_t len)
+{
+	loff_t file_size = 0;
+	loff_t new_last_byte_offset = 0;
+	int result;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (len == 0)
+		return 0;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	/*
+	 * Allocate only one byte at the new desired end of the file.
+	 * It will increase file size and create a zeroed area of
+	 * a given size.
+	 */
+	file_size = incfs_get_end_offset(bfc->bc_file);
+	new_last_byte_offset = file_size + len - 1;
+	result = vfs_fallocate(bfc->bc_file, 0, new_last_byte_offset, 1);
+	if (result != -EOPNOTSUPP)
+		return result;
+
+	return append_zeros_no_fallocate(bfc, file_size, len);
+}
+
+/*
+ * Append a given metadata record to the backing file and update a previous
+ * record to add the new record the the metadata list.
+ */
+static int append_md_to_backing_file(struct backing_file_context *bfc,
+			      struct incfs_md_header *record)
+{
+	int result = 0;
+	loff_t record_offset;
+	loff_t file_pos;
+	__le64 new_md_offset;
+	size_t record_size;
+
+	if (!bfc || !record)
+		return -EFAULT;
+
+	if (bfc->bc_last_md_record_offset < 0)
+		return -EINVAL;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	record_size = le16_to_cpu(record->h_record_size);
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	record->h_next_md_offset = 0;
+
+	/* Write the metadata record to the end of the backing file */
+	record_offset = file_pos;
+	new_md_offset = cpu_to_le64(record_offset);
+	result = write_to_bf(bfc, record, record_size, file_pos);
+	if (result)
+		return result;
+
+	/* Update next metadata offset in a previous record or a superblock. */
+	if (bfc->bc_last_md_record_offset) {
+		/*
+		 * Find a place in the previous md record where new record's
+		 * offset needs to be saved.
+		 */
+		file_pos = bfc->bc_last_md_record_offset +
+			offsetof(struct incfs_md_header, h_next_md_offset);
+	} else {
+		/*
+		 * No metadata yet, file a place to update in the
+		 * file_header.
+		 */
+		file_pos = offsetof(struct incfs_file_header,
+				    fh_first_md_offset);
+	}
+	result = write_to_bf(bfc, &new_md_offset, sizeof(new_md_offset),
+			     file_pos);
+	if (result)
+		return result;
+
+	bfc->bc_last_md_record_offset = record_offset;
+	return result;
+}
+
+/*
+ * Reserve 0-filled space for the blockmap body, and append
+ * incfs_blockmap metadata record pointing to it.
+ */
+int incfs_write_blockmap_to_backing_file(struct backing_file_context *bfc,
+					 u32 block_count)
+{
+	struct incfs_blockmap blockmap = {};
+	int result = 0;
+	loff_t file_end = 0;
+	size_t map_size = block_count * sizeof(struct incfs_blockmap_entry);
+
+	if (!bfc)
+		return -EFAULT;
+
+	blockmap.m_header.h_md_entry_type = INCFS_MD_BLOCK_MAP;
+	blockmap.m_header.h_record_size = cpu_to_le16(sizeof(blockmap));
+	blockmap.m_header.h_next_md_offset = cpu_to_le64(0);
+	blockmap.m_block_count = cpu_to_le32(block_count);
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	/* Reserve 0-filled space for the blockmap body in the backing file. */
+	file_end = incfs_get_end_offset(bfc->bc_file);
+	result = append_zeros(bfc, map_size);
+	if (result)
+		return result;
+
+	/* Write blockmap metadata record pointing to the body written above. */
+	blockmap.m_base_offset = cpu_to_le64(file_end);
+	result = append_md_to_backing_file(bfc, &blockmap.m_header);
+	if (result)
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, file_end);
+
+	return result;
+}
+
+int incfs_write_signature_to_backing_file(struct backing_file_context *bfc,
+					struct mem_range sig, u32 tree_size,
+					loff_t *tree_offset, loff_t *sig_offset)
+{
+	struct incfs_file_signature sg = {};
+	int result = 0;
+	loff_t rollback_pos = 0;
+	loff_t tree_area_pos = 0;
+	size_t alignment = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	rollback_pos = incfs_get_end_offset(bfc->bc_file);
+
+	sg.sg_header.h_md_entry_type = INCFS_MD_SIGNATURE;
+	sg.sg_header.h_record_size = cpu_to_le16(sizeof(sg));
+	sg.sg_header.h_next_md_offset = cpu_to_le64(0);
+	if (sig.data != NULL && sig.len > 0) {
+		sg.sg_sig_size = cpu_to_le32(sig.len);
+		sg.sg_sig_offset = cpu_to_le64(rollback_pos);
+
+		result = write_to_bf(bfc, sig.data, sig.len, rollback_pos);
+		if (result)
+			goto err;
+	}
+
+	tree_area_pos = incfs_get_end_offset(bfc->bc_file);
+	if (tree_size > 0) {
+		if (tree_size > 5 * INCFS_DATA_FILE_BLOCK_SIZE) {
+			/*
+			 * If hash tree is big enough, it makes sense to
+			 * align in the backing file for faster access.
+			 */
+			loff_t offset = round_up(tree_area_pos, PAGE_SIZE);
+
+			alignment = offset - tree_area_pos;
+			tree_area_pos = offset;
+		}
+
+		/*
+		 * If root hash is not the only hash in the tree.
+		 * reserve 0-filled space for the tree.
+		 */
+		result = append_zeros(bfc, tree_size + alignment);
+		if (result)
+			goto err;
+
+		sg.sg_hash_tree_size = cpu_to_le32(tree_size);
+		sg.sg_hash_tree_offset = cpu_to_le64(tree_area_pos);
+	}
+
+	/* Write a hash tree metadata record pointing to the hash tree above. */
+	result = append_md_to_backing_file(bfc, &sg.sg_header);
+err:
+	if (result)
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, rollback_pos);
+	else {
+		if (tree_offset)
+			*tree_offset = tree_area_pos;
+		if (sig_offset)
+			*sig_offset = rollback_pos;
+	}
+
+	return result;
+}
+
+static int write_new_status_to_backing_file(struct backing_file_context *bfc,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written)
+{
+	int result;
+	loff_t rollback_pos;
+	struct incfs_status is = {
+		.is_header = {
+			.h_md_entry_type = INCFS_MD_STATUS,
+			.h_record_size = cpu_to_le16(sizeof(is)),
+		},
+		.is_data_blocks_written = cpu_to_le32(data_blocks_written),
+		.is_hash_blocks_written = cpu_to_le32(hash_blocks_written),
+	};
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+	rollback_pos = incfs_get_end_offset(bfc->bc_file);
+	result = append_md_to_backing_file(bfc, &is.is_header);
+	if (result)
+		truncate_backing_file(bfc, rollback_pos);
+
+	return result;
+}
+
+int incfs_write_status_to_backing_file(struct backing_file_context *bfc,
+				       loff_t status_offset,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written)
+{
+	struct incfs_status is;
+	int result;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (status_offset == 0)
+		return write_new_status_to_backing_file(bfc,
+				data_blocks_written, hash_blocks_written);
+
+	result = incfs_kread(bfc, &is, sizeof(is), status_offset);
+	if (result != sizeof(is))
+		return -EIO;
+
+	is.is_data_blocks_written = cpu_to_le32(data_blocks_written);
+	is.is_hash_blocks_written = cpu_to_le32(hash_blocks_written);
+	result = incfs_kwrite(bfc, &is, sizeof(is), status_offset);
+	if (result != sizeof(is))
+		return -EIO;
+
+	return 0;
+}
+
+int incfs_write_verity_signature_to_backing_file(
+		struct backing_file_context *bfc, struct mem_range signature,
+		loff_t *offset)
+{
+	struct incfs_file_verity_signature vs = {};
+	int result;
+	loff_t pos;
+
+	/* No verity signature section is equivalent to an empty section */
+	if (signature.data == NULL || signature.len == 0)
+		return 0;
+
+	pos = incfs_get_end_offset(bfc->bc_file);
+
+	vs = (struct incfs_file_verity_signature) {
+		.vs_header = (struct incfs_md_header) {
+			.h_md_entry_type = INCFS_MD_VERITY_SIGNATURE,
+			.h_record_size = cpu_to_le16(sizeof(vs)),
+			.h_next_md_offset = cpu_to_le64(0),
+		},
+		.vs_size = cpu_to_le32(signature.len),
+		.vs_offset = cpu_to_le64(pos),
+	};
+
+	result = write_to_bf(bfc, signature.data, signature.len, pos);
+	if (result)
+		goto err;
+
+	result = append_md_to_backing_file(bfc, &vs.vs_header);
+	if (result)
+		goto err;
+
+	*offset = pos;
+err:
+	if (result)
+		/* Error, rollback file changes */
+		truncate_backing_file(bfc, pos);
+	return result;
+}
+
+/*
+ * Write a backing file header
+ * It should always be called only on empty file.
+ * fh.fh_first_md_offset is 0 for now, but will be updated
+ * once first metadata record is added.
+ */
+int incfs_write_fh_to_backing_file(struct backing_file_context *bfc,
+				   incfs_uuid_t *uuid, u64 file_size)
+{
+	struct incfs_file_header fh = {};
+	loff_t file_pos = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	fh.fh_magic = cpu_to_le64(INCFS_MAGIC_NUMBER);
+	fh.fh_version = cpu_to_le64(INCFS_FORMAT_CURRENT_VER);
+	fh.fh_header_size = cpu_to_le16(sizeof(fh));
+	fh.fh_first_md_offset = cpu_to_le64(0);
+	fh.fh_data_block_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	fh.fh_file_size = cpu_to_le64(file_size);
+	fh.fh_uuid = *uuid;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	if (file_pos != 0)
+		return -EEXIST;
+
+	return write_to_bf(bfc, &fh, sizeof(fh), file_pos);
+}
+
+/*
+ * Write a backing file header for a mapping file
+ * It should always be called only on empty file.
+ */
+int incfs_write_mapping_fh_to_backing_file(struct backing_file_context *bfc,
+				incfs_uuid_t *uuid, u64 file_size, u64 offset)
+{
+	struct incfs_file_header fh = {};
+	loff_t file_pos = 0;
+
+	if (!bfc)
+		return -EFAULT;
+
+	fh.fh_magic = cpu_to_le64(INCFS_MAGIC_NUMBER);
+	fh.fh_version = cpu_to_le64(INCFS_FORMAT_CURRENT_VER);
+	fh.fh_header_size = cpu_to_le16(sizeof(fh));
+	fh.fh_original_offset = cpu_to_le64(offset);
+	fh.fh_data_block_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	fh.fh_mapped_file_size = cpu_to_le64(file_size);
+	fh.fh_original_uuid = *uuid;
+	fh.fh_flags = cpu_to_le32(INCFS_FILE_MAPPED);
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	file_pos = incfs_get_end_offset(bfc->bc_file);
+	if (file_pos != 0)
+		return -EEXIST;
+
+	return write_to_bf(bfc, &fh, sizeof(fh), file_pos);
+}
+
+/* Write a given data block and update file's blockmap to point it. */
+int incfs_write_data_block_to_backing_file(struct backing_file_context *bfc,
+				     struct mem_range block, int block_index,
+				     loff_t bm_base_off, u16 flags)
+{
+	struct incfs_blockmap_entry bm_entry = {};
+	int result = 0;
+	loff_t data_offset = 0;
+	loff_t bm_entry_off =
+		bm_base_off + sizeof(struct incfs_blockmap_entry) * block_index;
+
+	if (!bfc)
+		return -EFAULT;
+
+	if (block.len >= (1 << 16) || block_index < 0)
+		return -EINVAL;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	data_offset = incfs_get_end_offset(bfc->bc_file);
+	if (data_offset <= bm_entry_off) {
+		/* Blockmap entry is beyond the file's end. It is not normal. */
+		return -EINVAL;
+	}
+
+	/* Write the block data at the end of the backing file. */
+	result = write_to_bf(bfc, block.data, block.len, data_offset);
+	if (result)
+		return result;
+
+	/* Update the blockmap to point to the newly written data. */
+	bm_entry.me_data_offset_lo = cpu_to_le32((u32)data_offset);
+	bm_entry.me_data_offset_hi = cpu_to_le16((u16)(data_offset >> 32));
+	bm_entry.me_data_size = cpu_to_le16((u16)block.len);
+	bm_entry.me_flags = cpu_to_le16(flags);
+
+	return write_to_bf(bfc, &bm_entry, sizeof(bm_entry),
+				bm_entry_off);
+}
+
+int incfs_write_hash_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index,
+					   loff_t hash_area_off,
+					   loff_t bm_base_off,
+					   loff_t file_size)
+{
+	struct incfs_blockmap_entry bm_entry = {};
+	int result;
+	loff_t data_offset = 0;
+	loff_t file_end = 0;
+	loff_t bm_entry_off =
+		bm_base_off +
+		sizeof(struct incfs_blockmap_entry) *
+			(block_index + get_blocks_count_for_size(file_size));
+
+	if (!bfc)
+		return -EFAULT;
+
+	LOCK_REQUIRED(bfc->bc_mutex);
+
+	data_offset = hash_area_off + block_index * INCFS_DATA_FILE_BLOCK_SIZE;
+	file_end = incfs_get_end_offset(bfc->bc_file);
+	if (data_offset + block.len > file_end) {
+		/* Block is located beyond the file's end. It is not normal. */
+		return -EINVAL;
+	}
+
+	result = write_to_bf(bfc, block.data, block.len, data_offset);
+	if (result)
+		return result;
+
+	bm_entry.me_data_offset_lo = cpu_to_le32((u32)data_offset);
+	bm_entry.me_data_offset_hi = cpu_to_le16((u16)(data_offset >> 32));
+	bm_entry.me_data_size = cpu_to_le16(INCFS_DATA_FILE_BLOCK_SIZE);
+
+	return write_to_bf(bfc, &bm_entry, sizeof(bm_entry), bm_entry_off);
+}
+
+int incfs_read_blockmap_entry(struct backing_file_context *bfc, int block_index,
+			loff_t bm_base_off,
+			struct incfs_blockmap_entry *bm_entry)
+{
+	int error = incfs_read_blockmap_entries(bfc, bm_entry, block_index, 1,
+						bm_base_off);
+
+	if (error < 0)
+		return error;
+
+	if (error == 0)
+		return -EIO;
+
+	if (error != 1)
+		return -EFAULT;
+
+	return 0;
+}
+
+int incfs_read_blockmap_entries(struct backing_file_context *bfc,
+		struct incfs_blockmap_entry *entries,
+		int start_index, int blocks_number,
+		loff_t bm_base_off)
+{
+	loff_t bm_entry_off =
+		bm_base_off + sizeof(struct incfs_blockmap_entry) * start_index;
+	const size_t bytes_to_read = sizeof(struct incfs_blockmap_entry)
+					* blocks_number;
+	int result = 0;
+
+	if (!bfc || !entries)
+		return -EFAULT;
+
+	if (start_index < 0 || bm_base_off <= 0)
+		return -ENODATA;
+
+	result = incfs_kread(bfc, entries, bytes_to_read, bm_entry_off);
+	if (result < 0)
+		return result;
+	return result / sizeof(*entries);
+}
+
+int incfs_read_file_header(struct backing_file_context *bfc,
+			   loff_t *first_md_off, incfs_uuid_t *uuid,
+			   u64 *file_size, u32 *flags)
+{
+	ssize_t bytes_read = 0;
+	struct incfs_file_header fh = {};
+
+	if (!bfc || !first_md_off)
+		return -EFAULT;
+
+	bytes_read = incfs_kread(bfc, &fh, sizeof(fh), 0);
+	if (bytes_read < 0)
+		return bytes_read;
+
+	if (bytes_read < sizeof(fh))
+		return -EBADMSG;
+
+	if (le64_to_cpu(fh.fh_magic) != INCFS_MAGIC_NUMBER)
+		return -EILSEQ;
+
+	if (le64_to_cpu(fh.fh_version) > INCFS_FORMAT_CURRENT_VER)
+		return -EILSEQ;
+
+	if (le16_to_cpu(fh.fh_data_block_size) != INCFS_DATA_FILE_BLOCK_SIZE)
+		return -EILSEQ;
+
+	if (le16_to_cpu(fh.fh_header_size) != sizeof(fh))
+		return -EILSEQ;
+
+	if (first_md_off)
+		*first_md_off = le64_to_cpu(fh.fh_first_md_offset);
+	if (uuid)
+		*uuid = fh.fh_uuid;
+	if (file_size)
+		*file_size = le64_to_cpu(fh.fh_file_size);
+	if (flags)
+		*flags = le32_to_cpu(fh.fh_flags);
+	return 0;
+}
+
+/*
+ * Read through metadata records from the backing file one by one
+ * and call provided metadata handlers.
+ */
+int incfs_read_next_metadata_record(struct backing_file_context *bfc,
+			      struct metadata_handler *handler)
+{
+	const ssize_t max_md_size = INCFS_MAX_METADATA_RECORD_SIZE;
+	ssize_t bytes_read = 0;
+	size_t md_record_size = 0;
+	loff_t next_record = 0;
+	int res = 0;
+	struct incfs_md_header *md_hdr = NULL;
+
+	if (!bfc || !handler)
+		return -EFAULT;
+
+	if (handler->md_record_offset == 0)
+		return -EPERM;
+
+	memset(&handler->md_buffer, 0, max_md_size);
+	bytes_read = incfs_kread(bfc, &handler->md_buffer, max_md_size,
+				 handler->md_record_offset);
+	if (bytes_read < 0)
+		return bytes_read;
+	if (bytes_read < sizeof(*md_hdr))
+		return -EBADMSG;
+
+	md_hdr = &handler->md_buffer.md_header;
+	next_record = le64_to_cpu(md_hdr->h_next_md_offset);
+	md_record_size = le16_to_cpu(md_hdr->h_record_size);
+
+	if (md_record_size > max_md_size) {
+		pr_warn("incfs: The record is too large. Size: %zu",
+				md_record_size);
+		return -EBADMSG;
+	}
+
+	if (bytes_read < md_record_size) {
+		pr_warn("incfs: The record hasn't been fully read.");
+		return -EBADMSG;
+	}
+
+	if (next_record <= handler->md_record_offset && next_record != 0) {
+		pr_warn("incfs: Next record (%lld) points back in file.",
+			next_record);
+		return -EBADMSG;
+	}
+
+	switch (md_hdr->h_md_entry_type) {
+	case INCFS_MD_NONE:
+		break;
+	case INCFS_MD_BLOCK_MAP:
+		if (handler->handle_blockmap)
+			res = handler->handle_blockmap(
+				&handler->md_buffer.blockmap, handler);
+		break;
+	case INCFS_MD_FILE_ATTR:
+		/*
+		 * File attrs no longer supported, ignore section for
+		 * compatibility
+		 */
+		break;
+	case INCFS_MD_SIGNATURE:
+		if (handler->handle_signature)
+			res = handler->handle_signature(
+				&handler->md_buffer.signature, handler);
+		break;
+	case INCFS_MD_STATUS:
+		if (handler->handle_status)
+			res = handler->handle_status(
+				&handler->md_buffer.status, handler);
+		break;
+	case INCFS_MD_VERITY_SIGNATURE:
+		if (handler->handle_verity_signature)
+			res = handler->handle_verity_signature(
+				&handler->md_buffer.verity_signature, handler);
+		break;
+	default:
+		res = -ENOTSUPP;
+		break;
+	}
+
+	if (!res) {
+		if (next_record == 0) {
+			/*
+			 * Zero offset for the next record means that the last
+			 * metadata record has just been processed.
+			 */
+			bfc->bc_last_md_record_offset =
+				handler->md_record_offset;
+		}
+		handler->md_prev_record_offset = handler->md_record_offset;
+		handler->md_record_offset = next_record;
+	}
+	return res;
+}
+
+ssize_t incfs_kread(struct backing_file_context *bfc, void *buf, size_t size,
+		    loff_t pos)
+{
+	const struct cred *old_cred = override_creds(bfc->bc_cred);
+	int ret = kernel_read(bfc->bc_file, buf, size, &pos);
+
+	revert_creds(old_cred);
+	return ret;
+}
+
+ssize_t incfs_kwrite(struct backing_file_context *bfc, const void *buf,
+		     size_t size, loff_t pos)
+{
+	const struct cred *old_cred = override_creds(bfc->bc_cred);
+	int ret = kernel_write(bfc->bc_file, buf, size, &pos);
+
+	revert_creds(old_cred);
+	return ret;
+}
diff --git a/fs/incfs/format.h b/fs/incfs/format.h
new file mode 100644
index 0000000..1b9231b8b
--- /dev/null
+++ b/fs/incfs/format.h
@@ -0,0 +1,407 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+
+/*
+ * Overview
+ * --------
+ * The backbone of the incremental-fs ondisk format is an append only linked
+ * list of metadata blocks. Each metadata block contains an offset of the next
+ * one. These blocks describe files and directories on the
+ * file system. They also represent actions of adding and removing file names
+ * (hard links).
+ *
+ * Every time incremental-fs instance is mounted, it reads through this list
+ * to recreate filesystem's state in memory. An offset of the first record in
+ * the metadata list is stored in the superblock at the beginning of the backing
+ * file.
+ *
+ * Most of the backing file is taken by data areas and blockmaps.
+ * Since data blocks can be compressed and have different sizes,
+ * single per-file data area can't be pre-allocated. That's why blockmaps are
+ * needed in order to find a location and size of each data block in
+ * the backing file. Each time a file is created, a corresponding block map is
+ * allocated to store future offsets of data blocks.
+ *
+ * Whenever a data block is given by data loader to incremental-fs:
+ *   - A data area with the given block is appended to the end of
+ *     the backing file.
+ *   - A record in the blockmap for the given block index is updated to reflect
+ *     its location, size, and compression algorithm.
+
+ * Metadata records
+ * ----------------
+ * incfs_blockmap - metadata record that specifies size and location
+ *                           of a blockmap area for a given file. This area
+ *                           contains an array of incfs_blockmap_entry-s.
+ * incfs_file_signature - metadata record that specifies where file signature
+ *                           and its hash tree can be found in the backing file.
+ *
+ * incfs_file_attr - metadata record that specifies where additional file
+ *		        attributes blob can be found.
+ *
+ * Metadata header
+ * ---------------
+ * incfs_md_header - header of a metadata record. It's always a part
+ *                   of other structures and served purpose of metadata
+ *                   bookkeeping.
+ *
+ *              +-----------------------------------------------+       ^
+ *              |            incfs_md_header                    |       |
+ *              | 1. type of body(BLOCKMAP, FILE_ATTR..)        |       |
+ *              | 2. size of the whole record header + body     |       |
+ *              | 3. CRC the whole record header + body         |       |
+ *              | 4. offset of the previous md record           |]------+
+ *              | 5. offset of the next md record (md link)     |]---+
+ *              +-----------------------------------------------+    |
+ *              |  Metadata record body with useful data        |    |
+ *              +-----------------------------------------------+    |
+ *                                                                   +--->
+ *
+ * Other ondisk structures
+ * -----------------------
+ * incfs_super_block - backing file header
+ * incfs_blockmap_entry - a record in a blockmap area that describes size
+ *                       and location of a data block.
+ * Data blocks dont have any particular structure, they are written to the
+ * backing file in a raw form as they come from a data loader.
+ *
+ * Backing file layout
+ * -------------------
+ *
+ *
+ *              +-------------------------------------------+
+ *              |            incfs_file_header              |]---+
+ *              +-------------------------------------------+    |
+ *              |                 metadata                  |<---+
+ *              |           incfs_file_signature            |]---+
+ *              +-------------------------------------------+    |
+ *                        .........................              |
+ *              +-------------------------------------------+    |   metadata
+ *     +------->|               blockmap area               |    |  list links
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |        |          [incfs_blockmap_entry]           |    |
+ *     |    +--[|          [incfs_blockmap_entry]           |    |
+ *     |    |   |          [incfs_blockmap_entry]           |    |
+ *     |    |   |          [incfs_blockmap_entry]           |    |
+ *     |    |   +-------------------------------------------+    |
+ *     |    |             .........................              |
+ *     |    |   +-------------------------------------------+    |
+ *     |    |   |                 metadata                  |<---+
+ *     +----|--[|               incfs_blockmap              |]---+
+ *          |   +-------------------------------------------+    |
+ *          |             .........................              |
+ *          |   +-------------------------------------------+    |
+ *          +-->|                 data block                |    |
+ *              +-------------------------------------------+    |
+ *                        .........................              |
+ *              +-------------------------------------------+    |
+ *              |                 metadata                  |<---+
+ *              |              incfs_file_attr              |
+ *              +-------------------------------------------+
+ */
+#ifndef _INCFS_FORMAT_H
+#define _INCFS_FORMAT_H
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+
+#define INCFS_MAX_NAME_LEN 255
+#define INCFS_FORMAT_V1 1
+#define INCFS_FORMAT_CURRENT_VER INCFS_FORMAT_V1
+
+enum incfs_metadata_type {
+	INCFS_MD_NONE = 0,
+	INCFS_MD_BLOCK_MAP = 1,
+	INCFS_MD_FILE_ATTR = 2,
+	INCFS_MD_SIGNATURE = 3,
+	INCFS_MD_STATUS = 4,
+	INCFS_MD_VERITY_SIGNATURE = 5,
+};
+
+enum incfs_file_header_flags {
+	INCFS_FILE_MAPPED = 1 << 1,
+};
+
+/* Header included at the beginning of all metadata records on the disk. */
+struct incfs_md_header {
+	__u8 h_md_entry_type;
+
+	/*
+	 * Size of the metadata record.
+	 * (e.g. inode, dir entry etc) not just this struct.
+	 */
+	__le16 h_record_size;
+
+	/*
+	 * Was: CRC32 of the metadata record.
+	 * (e.g. inode, dir entry etc) not just this struct.
+	 */
+	__le32 h_unused1;
+
+	/* Offset of the next metadata entry if any */
+	__le64 h_next_md_offset;
+
+	/* Was: Offset of the previous metadata entry if any */
+	__le64 h_unused2;
+
+} __packed;
+
+/* Backing file header */
+struct incfs_file_header {
+	/* Magic number: INCFS_MAGIC_NUMBER */
+	__le64 fh_magic;
+
+	/* Format version: INCFS_FORMAT_CURRENT_VER */
+	__le64 fh_version;
+
+	/* sizeof(incfs_file_header) */
+	__le16 fh_header_size;
+
+	/* INCFS_DATA_FILE_BLOCK_SIZE */
+	__le16 fh_data_block_size;
+
+	/* File flags, from incfs_file_header_flags */
+	__le32 fh_flags;
+
+	union {
+		/* Standard incfs file */
+		struct {
+			/* Offset of the first metadata record */
+			__le64 fh_first_md_offset;
+
+			/* Full size of the file's content */
+			__le64 fh_file_size;
+
+			/* File uuid */
+			incfs_uuid_t fh_uuid;
+		};
+
+		/* Mapped file - INCFS_FILE_MAPPED set in fh_flags */
+		struct {
+			/* Offset in original file */
+			__le64 fh_original_offset;
+
+			/* Full size of the file's content */
+			__le64 fh_mapped_file_size;
+
+			/* Original file's uuid */
+			incfs_uuid_t fh_original_uuid;
+		};
+	};
+} __packed;
+
+enum incfs_block_map_entry_flags {
+	INCFS_BLOCK_COMPRESSED_LZ4 = 1,
+	INCFS_BLOCK_COMPRESSED_ZSTD = 2,
+
+	/* Reserve 3 bits for compression alg */
+	INCFS_BLOCK_COMPRESSED_MASK = 7,
+};
+
+/* Block map entry pointing to an actual location of the data block. */
+struct incfs_blockmap_entry {
+	/* Offset of the actual data block. Lower 32 bits */
+	__le32 me_data_offset_lo;
+
+	/* Offset of the actual data block. Higher 16 bits */
+	__le16 me_data_offset_hi;
+
+	/* How many bytes the data actually occupies in the backing file */
+	__le16 me_data_size;
+
+	/* Block flags from incfs_block_map_entry_flags */
+	__le16 me_flags;
+} __packed;
+
+/* Metadata record for locations of file blocks. Type = INCFS_MD_BLOCK_MAP */
+struct incfs_blockmap {
+	struct incfs_md_header m_header;
+
+	/* Base offset of the array of incfs_blockmap_entry */
+	__le64 m_base_offset;
+
+	/* Size of the map entry array in blocks */
+	__le32 m_block_count;
+} __packed;
+
+/*
+ * Metadata record for file signature. Type = INCFS_MD_SIGNATURE
+ *
+ * The signature stored here is the APK V4 signature data blob. See the
+ * definition of incfs_new_file_args::signature_info for an explanation of this
+ * blob. Specifically, it contains the root hash, but it does *not* contain
+ * anything that the kernel treats as a signature.
+ *
+ * When FS_IOC_ENABLE_VERITY is called on a file without this record, an APK V4
+ * signature blob and a hash tree are added to the file, and then this metadata
+ * record is created to record their locations.
+ */
+struct incfs_file_signature {
+	struct incfs_md_header sg_header;
+
+	__le32 sg_sig_size; /* The size of the signature. */
+
+	__le64 sg_sig_offset; /* Signature's offset in the backing file */
+
+	__le32 sg_hash_tree_size; /* The size of the hash tree. */
+
+	__le64 sg_hash_tree_offset; /* Hash tree offset in the backing file */
+} __packed;
+
+/* In memory version of above */
+struct incfs_df_signature {
+	u32 sig_size;
+	u64 sig_offset;
+	u32 hash_size;
+	u64 hash_offset;
+};
+
+struct incfs_status {
+	struct incfs_md_header is_header;
+
+	__le32 is_data_blocks_written; /* Number of data blocks written */
+
+	__le32 is_hash_blocks_written; /* Number of hash blocks written */
+
+	__le32 is_dummy[6]; /* Spare fields */
+} __packed;
+
+/*
+ * Metadata record for verity signature. Type = INCFS_MD_VERITY_SIGNATURE
+ *
+ * This record will only exist for verity-enabled files with signatures. Verity
+ * enabled files without signatures do not have this record. This signature is
+ * checked by fs-verity identically to any other fs-verity signature.
+ */
+struct incfs_file_verity_signature {
+	struct incfs_md_header vs_header;
+
+	 /* The size of the signature */
+	__le32 vs_size;
+
+	 /* Signature's offset in the backing file */
+	__le64 vs_offset;
+} __packed;
+
+/* In memory version of above */
+struct incfs_df_verity_signature {
+	u32 size;
+	u64 offset;
+};
+
+/* State of the backing file. */
+struct backing_file_context {
+	/* Protects writes to bc_file */
+	struct mutex bc_mutex;
+
+	/* File object to read data from */
+	struct file *bc_file;
+
+	/*
+	 * Offset of the last known metadata record in the backing file.
+	 * 0 means there are no metadata records.
+	 */
+	loff_t bc_last_md_record_offset;
+
+	/*
+	 * Credentials to set before reads/writes
+	 * Note that this is a pointer to the mount_info mi_owner field so
+	 * there is no need to get/put the creds
+	 */
+	const struct cred *bc_cred;
+};
+
+struct metadata_handler {
+	loff_t md_record_offset;
+	loff_t md_prev_record_offset;
+	void *context;
+
+	union {
+		struct incfs_md_header md_header;
+		struct incfs_blockmap blockmap;
+		struct incfs_file_signature signature;
+		struct incfs_status status;
+		struct incfs_file_verity_signature verity_signature;
+	} md_buffer;
+
+	int (*handle_blockmap)(struct incfs_blockmap *bm,
+			       struct metadata_handler *handler);
+	int (*handle_signature)(struct incfs_file_signature *sig,
+				 struct metadata_handler *handler);
+	int (*handle_status)(struct incfs_status *sig,
+				 struct metadata_handler *handler);
+	int (*handle_verity_signature)(struct incfs_file_verity_signature *s,
+					struct metadata_handler *handler);
+};
+#define INCFS_MAX_METADATA_RECORD_SIZE \
+	FIELD_SIZEOF(struct metadata_handler, md_buffer)
+
+/* Backing file context management */
+struct mount_info;
+struct backing_file_context *incfs_alloc_bfc(struct mount_info *mi,
+					     struct file *backing_file);
+
+void incfs_free_bfc(struct backing_file_context *bfc);
+
+/* Writing stuff */
+int incfs_write_blockmap_to_backing_file(struct backing_file_context *bfc,
+					 u32 block_count);
+
+int incfs_write_fh_to_backing_file(struct backing_file_context *bfc,
+				   incfs_uuid_t *uuid, u64 file_size);
+
+int incfs_write_mapping_fh_to_backing_file(struct backing_file_context *bfc,
+				incfs_uuid_t *uuid, u64 file_size, u64 offset);
+
+int incfs_write_data_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index, loff_t bm_base_off,
+					   u16 flags);
+
+int incfs_write_hash_block_to_backing_file(struct backing_file_context *bfc,
+					   struct mem_range block,
+					   int block_index,
+					   loff_t hash_area_off,
+					   loff_t bm_base_off,
+					   loff_t file_size);
+
+int incfs_write_signature_to_backing_file(struct backing_file_context *bfc,
+				struct mem_range sig, u32 tree_size,
+				loff_t *tree_offset, loff_t *sig_offset);
+
+int incfs_write_status_to_backing_file(struct backing_file_context *bfc,
+				       loff_t status_offset,
+				       u32 data_blocks_written,
+				       u32 hash_blocks_written);
+int incfs_write_verity_signature_to_backing_file(
+		struct backing_file_context *bfc, struct mem_range signature,
+		loff_t *offset);
+
+/* Reading stuff */
+int incfs_read_file_header(struct backing_file_context *bfc,
+			   loff_t *first_md_off, incfs_uuid_t *uuid,
+			   u64 *file_size, u32 *flags);
+
+int incfs_read_blockmap_entry(struct backing_file_context *bfc, int block_index,
+			      loff_t bm_base_off,
+			      struct incfs_blockmap_entry *bm_entry);
+
+int incfs_read_blockmap_entries(struct backing_file_context *bfc,
+		struct incfs_blockmap_entry *entries,
+		int start_index, int blocks_number,
+		loff_t bm_base_off);
+
+int incfs_read_next_metadata_record(struct backing_file_context *bfc,
+				    struct metadata_handler *handler);
+
+ssize_t incfs_kread(struct backing_file_context *bfc, void *buf, size_t size,
+		    loff_t pos);
+ssize_t incfs_kwrite(struct backing_file_context *bfc, const void *buf,
+		     size_t size, loff_t pos);
+
+#endif /* _INCFS_FORMAT_H */
diff --git a/fs/incfs/integrity.c b/fs/incfs/integrity.c
new file mode 100644
index 0000000..bce319e
--- /dev/null
+++ b/fs/incfs/integrity.c
@@ -0,0 +1,235 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <crypto/sha.h>
+#include <crypto/hash.h>
+#include <linux/err.h>
+#include <linux/version.h>
+
+#include "integrity.h"
+
+struct incfs_hash_alg *incfs_get_hash_alg(enum incfs_hash_tree_algorithm id)
+{
+	static struct incfs_hash_alg sha256 = {
+		.name = "sha256",
+		.digest_size = SHA256_DIGEST_SIZE,
+		.id = INCFS_HASH_TREE_SHA256
+	};
+	struct incfs_hash_alg *result = NULL;
+	struct crypto_shash *shash;
+
+	if (id == INCFS_HASH_TREE_SHA256) {
+		BUILD_BUG_ON(INCFS_MAX_HASH_SIZE < SHA256_DIGEST_SIZE);
+		result = &sha256;
+	}
+
+	if (result == NULL)
+		return ERR_PTR(-ENOENT);
+
+	/* pairs with cmpxchg_release() below */
+	shash = smp_load_acquire(&result->shash);
+	if (shash)
+		return result;
+
+	shash = crypto_alloc_shash(result->name, 0, 0);
+	if (IS_ERR(shash)) {
+		int err = PTR_ERR(shash);
+
+		pr_err("Can't allocate hash alg %s, error code:%d",
+			result->name, err);
+		return ERR_PTR(err);
+	}
+
+	/* pairs with smp_load_acquire() above */
+	if (cmpxchg_release(&result->shash, NULL, shash) != NULL)
+		crypto_free_shash(shash);
+
+	return result;
+}
+
+struct signature_info {
+	u32 version;
+	enum incfs_hash_tree_algorithm hash_algorithm;
+	u8 log2_blocksize;
+	struct mem_range salt;
+	struct mem_range root_hash;
+};
+
+static bool read_u32(u8 **p, u8 *top, u32 *result)
+{
+	if (*p + sizeof(u32) > top)
+		return false;
+
+	*result = le32_to_cpu(*(__le32 *)*p);
+	*p += sizeof(u32);
+	return true;
+}
+
+static bool read_u8(u8 **p, u8 *top, u8 *result)
+{
+	if (*p + sizeof(u8) > top)
+		return false;
+
+	*result = *(u8 *)*p;
+	*p += sizeof(u8);
+	return true;
+}
+
+static bool read_mem_range(u8 **p, u8 *top, struct mem_range *range)
+{
+	u32 len;
+
+	if (!read_u32(p, top, &len) || *p + len > top)
+		return false;
+
+	range->len = len;
+	range->data = *p;
+	*p += len;
+	return true;
+}
+
+static int incfs_parse_signature(struct mem_range signature,
+				 struct signature_info *si)
+{
+	u8 *p = signature.data;
+	u8 *top = signature.data + signature.len;
+	u32 hash_section_size;
+
+	if (signature.len > INCFS_MAX_SIGNATURE_SIZE)
+		return -EINVAL;
+
+	if (!read_u32(&p, top, &si->version) ||
+	    si->version != INCFS_SIGNATURE_VERSION)
+		return -EINVAL;
+
+	if (!read_u32(&p, top, &hash_section_size) ||
+	    p + hash_section_size > top)
+		return -EINVAL;
+	top = p + hash_section_size;
+
+	if (!read_u32(&p, top, &si->hash_algorithm) ||
+	    si->hash_algorithm != INCFS_HASH_TREE_SHA256)
+		return -EINVAL;
+
+	if (!read_u8(&p, top, &si->log2_blocksize) || si->log2_blocksize != 12)
+		return -EINVAL;
+
+	if (!read_mem_range(&p, top, &si->salt))
+		return -EINVAL;
+
+	if (!read_mem_range(&p, top, &si->root_hash))
+		return -EINVAL;
+
+	if (p != top)
+		return -EINVAL;
+
+	return 0;
+}
+
+struct mtree *incfs_alloc_mtree(struct mem_range signature,
+				int data_block_count)
+{
+	int error;
+	struct signature_info si;
+	struct mtree *result = NULL;
+	struct incfs_hash_alg *hash_alg = NULL;
+	int hash_per_block;
+	int lvl;
+	int total_blocks = 0;
+	int blocks_in_level[INCFS_MAX_MTREE_LEVELS];
+	int blocks = data_block_count;
+
+	if (data_block_count <= 0)
+		return ERR_PTR(-EINVAL);
+
+	error = incfs_parse_signature(signature, &si);
+	if (error)
+		return ERR_PTR(error);
+
+	hash_alg = incfs_get_hash_alg(si.hash_algorithm);
+	if (IS_ERR(hash_alg))
+		return ERR_PTR(PTR_ERR(hash_alg));
+
+	if (si.root_hash.len < hash_alg->digest_size)
+		return ERR_PTR(-EINVAL);
+
+	result = kzalloc(sizeof(*result), GFP_NOFS);
+	if (!result)
+		return ERR_PTR(-ENOMEM);
+
+	result->alg = hash_alg;
+	hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / result->alg->digest_size;
+
+	/* Calculating tree geometry. */
+	/* First pass: calculate how many blocks in each tree level. */
+	for (lvl = 0; blocks > 1; lvl++) {
+		if (lvl >= INCFS_MAX_MTREE_LEVELS) {
+			pr_err("incfs: too much data in mtree");
+			goto err;
+		}
+
+		blocks = (blocks + hash_per_block - 1) / hash_per_block;
+		blocks_in_level[lvl] = blocks;
+		total_blocks += blocks;
+	}
+	result->depth = lvl;
+	result->hash_tree_area_size = total_blocks * INCFS_DATA_FILE_BLOCK_SIZE;
+	if (result->hash_tree_area_size > INCFS_MAX_HASH_AREA_SIZE)
+		goto err;
+
+	blocks = 0;
+	/* Second pass: calculate offset of each level. 0th level goes last. */
+	for (lvl = 0; lvl < result->depth; lvl++) {
+		u32 suboffset;
+
+		blocks += blocks_in_level[lvl];
+		suboffset = (total_blocks - blocks)
+					* INCFS_DATA_FILE_BLOCK_SIZE;
+
+		result->hash_level_suboffset[lvl] = suboffset;
+	}
+
+	/* Root hash is stored separately from the rest of the tree. */
+	memcpy(result->root_hash, si.root_hash.data, hash_alg->digest_size);
+	return result;
+
+err:
+	kfree(result);
+	return ERR_PTR(-E2BIG);
+}
+
+void incfs_free_mtree(struct mtree *tree)
+{
+	kfree(tree);
+}
+
+int incfs_calc_digest(struct incfs_hash_alg *alg, struct mem_range data,
+			struct mem_range digest)
+{
+	SHASH_DESC_ON_STACK(desc, alg->shash);
+
+	if (!alg || !alg->shash || !data.data || !digest.data)
+		return -EFAULT;
+
+	if (alg->digest_size > digest.len)
+		return -EINVAL;
+
+	desc->tfm = alg->shash;
+
+	if (data.len < INCFS_DATA_FILE_BLOCK_SIZE) {
+		int err;
+		void *buf = kzalloc(INCFS_DATA_FILE_BLOCK_SIZE, GFP_NOFS);
+
+		if (!buf)
+			return -ENOMEM;
+
+		memcpy(buf, data.data, data.len);
+		err = crypto_shash_digest(desc, buf, INCFS_DATA_FILE_BLOCK_SIZE,
+					  digest.data);
+		kfree(buf);
+		return err;
+	}
+	return crypto_shash_digest(desc, data.data, data.len, digest.data);
+}
+
diff --git a/fs/incfs/integrity.h b/fs/incfs/integrity.h
new file mode 100644
index 0000000..cf79b64
--- /dev/null
+++ b/fs/incfs/integrity.h
@@ -0,0 +1,56 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#ifndef _INCFS_INTEGRITY_H
+#define _INCFS_INTEGRITY_H
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <crypto/hash.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "internal.h"
+
+#define INCFS_MAX_MTREE_LEVELS 8
+#define INCFS_MAX_HASH_AREA_SIZE (1280 * 1024 * 1024)
+
+struct incfs_hash_alg {
+	const char *name;
+	int digest_size;
+	enum incfs_hash_tree_algorithm id;
+
+	struct crypto_shash *shash;
+};
+
+/* Merkle tree structure. */
+struct mtree {
+	struct incfs_hash_alg *alg;
+
+	u8 root_hash[INCFS_MAX_HASH_SIZE];
+
+	/* Offset of each hash level in the hash area. */
+	u32 hash_level_suboffset[INCFS_MAX_MTREE_LEVELS];
+
+	u32 hash_tree_area_size;
+
+	/* Number of levels in hash_level_suboffset */
+	int depth;
+};
+
+struct incfs_hash_alg *incfs_get_hash_alg(enum incfs_hash_tree_algorithm id);
+
+struct mtree *incfs_alloc_mtree(struct mem_range signature,
+				int data_block_count);
+
+void incfs_free_mtree(struct mtree *tree);
+
+size_t incfs_get_mtree_depth(enum incfs_hash_tree_algorithm alg, loff_t size);
+
+size_t incfs_get_mtree_hash_count(enum incfs_hash_tree_algorithm alg,
+					loff_t size);
+
+int incfs_calc_digest(struct incfs_hash_alg *alg, struct mem_range data,
+			struct mem_range digest);
+
+#endif /* _INCFS_INTEGRITY_H */
diff --git a/fs/incfs/internal.h b/fs/incfs/internal.h
new file mode 100644
index 0000000..c2df8bf
--- /dev/null
+++ b/fs/incfs/internal.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+#ifndef _INCFS_INTERNAL_H
+#define _INCFS_INTERNAL_H
+#include <linux/types.h>
+
+struct mem_range {
+	u8 *data;
+	size_t len;
+};
+
+static inline struct mem_range range(u8 *data, size_t len)
+{
+	return (struct mem_range){ .data = data, .len = len };
+}
+
+#define LOCK_REQUIRED(lock)  WARN_ON_ONCE(!mutex_is_locked(&lock))
+
+#define EFSCORRUPTED EUCLEAN
+
+#endif /* _INCFS_INTERNAL_H */
diff --git a/fs/incfs/main.c b/fs/incfs/main.c
new file mode 100644
index 0000000..23347ac
--- /dev/null
+++ b/fs/incfs/main.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/module.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "sysfs.h"
+#include "vfs.h"
+
+static struct file_system_type incfs_fs_type = {
+	.owner = THIS_MODULE,
+	.name = INCFS_NAME,
+	.mount = incfs_mount_fs,
+	.kill_sb = incfs_kill_sb,
+	.fs_flags = 0
+};
+
+static int __init init_incfs_module(void)
+{
+	int err = 0;
+
+	err = incfs_init_sysfs();
+	if (err)
+		return err;
+
+	err = register_filesystem(&incfs_fs_type);
+	if (err)
+		incfs_cleanup_sysfs();
+
+	return err;
+}
+
+static void __exit cleanup_incfs_module(void)
+{
+	incfs_cleanup_sysfs();
+	unregister_filesystem(&incfs_fs_type);
+}
+
+module_init(init_incfs_module);
+module_exit(cleanup_incfs_module);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Eugene Zemtsov <ezemtsov@google.com>");
+MODULE_DESCRIPTION("Incremental File System");
diff --git a/fs/incfs/pseudo_files.c b/fs/incfs/pseudo_files.c
new file mode 100644
index 0000000..1a664f1
--- /dev/null
+++ b/fs/incfs/pseudo_files.c
@@ -0,0 +1,1387 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fsnotify.h>
+#include <linux/namei.h>
+#include <linux/poll.h>
+#include <linux/syscalls.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "pseudo_files.h"
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+#include "vfs.h"
+
+#define READ_WRITE_FILE_MODE 0666
+
+static bool is_pseudo_filename(struct mem_range name);
+
+/*******************************************************************************
+ * .pending_reads pseudo file definition
+ ******************************************************************************/
+#define INCFS_PENDING_READS_INODE 2
+static const char pending_reads_file_name[] = INCFS_PENDING_READS_FILENAME;
+
+/* State of an open .pending_reads file, unique for each file descriptor. */
+struct pending_reads_state {
+	/* A serial number of the last pending read obtained from this file. */
+	int last_pending_read_sn;
+};
+
+static ssize_t pending_reads_read(struct file *f, char __user *buf, size_t len,
+			    loff_t *ppos)
+{
+	struct pending_reads_state *pr_state = f->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	bool report_uid;
+	unsigned long page = 0;
+	struct incfs_pending_read_info *reads_buf = NULL;
+	struct incfs_pending_read_info2 *reads_buf2 = NULL;
+	size_t record_size;
+	size_t reads_to_collect;
+	int last_known_read_sn = READ_ONCE(pr_state->last_pending_read_sn);
+	int new_max_sn = last_known_read_sn;
+	int reads_collected = 0;
+	ssize_t result = 0;
+
+	if (!mi)
+		return -EFAULT;
+
+	report_uid = mi->mi_options.report_uid;
+	record_size = report_uid ? sizeof(*reads_buf2) : sizeof(*reads_buf);
+	reads_to_collect = len / record_size;
+
+	if (!incfs_fresh_pending_reads_exist(mi, last_known_read_sn))
+		return 0;
+
+	page = get_zeroed_page(GFP_NOFS);
+	if (!page)
+		return -ENOMEM;
+
+	if (report_uid)
+		reads_buf2 = (struct incfs_pending_read_info2 *) page;
+	else
+		reads_buf = (struct incfs_pending_read_info *) page;
+
+	reads_to_collect =
+		min_t(size_t, PAGE_SIZE / record_size, reads_to_collect);
+
+	reads_collected = incfs_collect_pending_reads(mi, last_known_read_sn,
+				reads_buf, reads_buf2, reads_to_collect,
+				&new_max_sn);
+
+	if (reads_collected < 0) {
+		result = reads_collected;
+		goto out;
+	}
+
+	/*
+	 * Just to make sure that we don't accidentally copy more data
+	 * to reads buffer than userspace can handle.
+	 */
+	reads_collected = min_t(size_t, reads_collected, reads_to_collect);
+	result = reads_collected * record_size;
+
+	/* Copy reads info to the userspace buffer */
+	if (copy_to_user(buf, (void *)page, result)) {
+		result = -EFAULT;
+		goto out;
+	}
+
+	WRITE_ONCE(pr_state->last_pending_read_sn, new_max_sn);
+	*ppos = 0;
+
+out:
+	free_page(page);
+	return result;
+}
+
+static __poll_t pending_reads_poll(struct file *file, poll_table *wait)
+{
+	struct pending_reads_state *state = file->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	__poll_t ret = 0;
+
+	poll_wait(file, &mi->mi_pending_reads_notif_wq, wait);
+	if (incfs_fresh_pending_reads_exist(mi,
+					    state->last_pending_read_sn))
+		ret = EPOLLIN | EPOLLRDNORM;
+
+	return ret;
+}
+
+static int pending_reads_open(struct inode *inode, struct file *file)
+{
+	struct pending_reads_state *state = NULL;
+
+	state = kzalloc(sizeof(*state), GFP_NOFS);
+	if (!state)
+		return -ENOMEM;
+
+	file->private_data = state;
+	return 0;
+}
+
+static int pending_reads_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static long ioctl_permit_fill(struct file *f, void __user *arg)
+{
+	struct incfs_permit_fill __user *usr_permit_fill = arg;
+	struct incfs_permit_fill permit_fill;
+	long error = 0;
+	struct file *file = NULL;
+	struct incfs_file_data *fd;
+
+	if (copy_from_user(&permit_fill, usr_permit_fill, sizeof(permit_fill)))
+		return -EFAULT;
+
+	file = fget(permit_fill.file_descriptor);
+	if (IS_ERR(file))
+		return PTR_ERR(file);
+
+	if (file->f_op != &incfs_file_ops) {
+		error = -EPERM;
+		goto out;
+	}
+
+	if (file->f_inode->i_sb != f->f_inode->i_sb) {
+		error = -EPERM;
+		goto out;
+	}
+
+	fd = file->private_data;
+
+	switch (fd->fd_fill_permission) {
+	case CANT_FILL:
+		fd->fd_fill_permission = CAN_FILL;
+		break;
+
+	case CAN_FILL:
+		pr_debug("CAN_FILL already set");
+		break;
+
+	default:
+		pr_warn("Invalid file private data");
+		error = -EFAULT;
+		goto out;
+	}
+
+out:
+	fput(file);
+	return error;
+}
+
+static int chmod(struct dentry *dentry, umode_t mode)
+{
+	struct inode *inode = dentry->d_inode;
+	struct inode *delegated_inode = NULL;
+	struct iattr newattrs;
+	int error;
+
+retry_deleg:
+	inode_lock(inode);
+	newattrs.ia_mode = (mode & S_IALLUGO) | (inode->i_mode & ~S_IALLUGO);
+	newattrs.ia_valid = ATTR_MODE | ATTR_CTIME;
+	error = notify_change(dentry, &newattrs, &delegated_inode);
+	inode_unlock(inode);
+	if (delegated_inode) {
+		error = break_deleg_wait(&delegated_inode);
+		if (!error)
+			goto retry_deleg;
+	}
+	return error;
+}
+
+static bool incfs_equal_ranges(struct mem_range lhs, struct mem_range rhs)
+{
+	if (lhs.len != rhs.len)
+		return false;
+	return memcmp(lhs.data, rhs.data, lhs.len) == 0;
+}
+
+static int validate_name(char *file_name)
+{
+	struct mem_range name = range(file_name, strlen(file_name));
+	int i = 0;
+
+	if (name.len > INCFS_MAX_NAME_LEN)
+		return -ENAMETOOLONG;
+
+	if (is_pseudo_filename(name))
+		return -EINVAL;
+
+	for (i = 0; i < name.len; i++)
+		if (name.data[i] == '/')
+			return -EINVAL;
+
+	return 0;
+}
+
+static int dir_relative_path_resolve(
+			struct mount_info *mi,
+			const char __user *relative_path,
+			struct path *result_path,
+			struct path *base_path)
+{
+	int dir_fd = get_unused_fd_flags(0);
+	struct file *dir_f = NULL;
+	int error = 0;
+
+	if (!base_path)
+		base_path = &mi->mi_backing_dir_path;
+
+	if (dir_fd < 0)
+		return dir_fd;
+
+	dir_f = dentry_open(base_path, O_RDONLY | O_NOATIME, current_cred());
+
+	if (IS_ERR(dir_f)) {
+		error = PTR_ERR(dir_f);
+		goto out;
+	}
+	fd_install(dir_fd, dir_f);
+
+	if (!relative_path) {
+		/* No relative path given, just return the base dir. */
+		*result_path = *base_path;
+		path_get(result_path);
+		goto out;
+	}
+
+	error = user_path_at_empty(dir_fd, relative_path,
+		LOOKUP_FOLLOW | LOOKUP_DIRECTORY, result_path, NULL);
+
+out:
+	ksys_close(dir_fd);
+	if (error)
+		pr_debug("Error: %d\n", error);
+	return error;
+}
+
+static struct mem_range incfs_copy_signature_info_from_user(u8 __user *original,
+							    u64 size)
+{
+	u8 *result;
+
+	if (!original)
+		return range(NULL, 0);
+
+	if (size > INCFS_MAX_SIGNATURE_SIZE)
+		return range(ERR_PTR(-EFAULT), 0);
+
+	result = kzalloc(size, GFP_NOFS | __GFP_COMP);
+	if (!result)
+		return range(ERR_PTR(-ENOMEM), 0);
+
+	if (copy_from_user(result, original, size)) {
+		kfree(result);
+		return range(ERR_PTR(-EFAULT), 0);
+	}
+
+	return range(result, size);
+}
+
+static int init_new_file(struct mount_info *mi, struct dentry *dentry,
+			 incfs_uuid_t *uuid, u64 size, struct mem_range attr,
+			 u8 __user *user_signature_info, u64 signature_size)
+{
+	struct path path = {};
+	struct file *new_file;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+	u32 block_count;
+	struct mem_range raw_signature = { NULL };
+	struct mtree *hash_tree = NULL;
+
+	if (!mi || !dentry || !uuid)
+		return -EFAULT;
+
+	/* Resize newly created file to its true size. */
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = dentry
+	};
+
+	new_file = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			       current_cred());
+
+	if (IS_ERR(new_file)) {
+		error = PTR_ERR(new_file);
+		goto out;
+	}
+
+	bfc = incfs_alloc_bfc(mi, new_file);
+	fput(new_file);
+	if (IS_ERR(bfc)) {
+		error = PTR_ERR(bfc);
+		bfc = NULL;
+		goto out;
+	}
+
+	mutex_lock(&bfc->bc_mutex);
+	error = incfs_write_fh_to_backing_file(bfc, uuid, size);
+	if (error)
+		goto out;
+
+	block_count = (u32)get_blocks_count_for_size(size);
+
+	if (user_signature_info) {
+		raw_signature = incfs_copy_signature_info_from_user(
+			user_signature_info, signature_size);
+
+		if (IS_ERR(raw_signature.data)) {
+			error = PTR_ERR(raw_signature.data);
+			raw_signature.data = NULL;
+			goto out;
+		}
+
+		hash_tree = incfs_alloc_mtree(raw_signature, block_count);
+		if (IS_ERR(hash_tree)) {
+			error = PTR_ERR(hash_tree);
+			hash_tree = NULL;
+			goto out;
+		}
+
+		error = incfs_write_signature_to_backing_file(bfc,
+				raw_signature, hash_tree->hash_tree_area_size,
+				NULL, NULL);
+		if (error)
+			goto out;
+
+		block_count += get_blocks_count_for_size(
+			hash_tree->hash_tree_area_size);
+	}
+
+	if (block_count)
+		error = incfs_write_blockmap_to_backing_file(bfc, block_count);
+
+	if (error)
+		goto out;
+
+out:
+	if (bfc) {
+		mutex_unlock(&bfc->bc_mutex);
+		incfs_free_bfc(bfc);
+	}
+	incfs_free_mtree(hash_tree);
+	kfree(raw_signature.data);
+
+	if (error)
+		pr_debug("incfs: %s error: %d\n", __func__, error);
+	return error;
+}
+
+static void notify_create(struct file *pending_reads_file,
+			  const char  __user *dir_name, const char *file_name,
+			  const char *file_id_str, bool incomplete_file)
+{
+	struct mount_info *mi =
+		get_mount_info(file_superblock(pending_reads_file));
+	struct path base_path = {
+		.mnt = pending_reads_file->f_path.mnt,
+		.dentry = pending_reads_file->f_path.dentry->d_parent,
+	};
+	struct path dir_path = {};
+	struct dentry *file = NULL;
+	struct dentry *dir = NULL;
+	int error;
+
+	error = dir_relative_path_resolve(mi, dir_name, &dir_path, &base_path);
+	if (error)
+		goto out;
+
+	file = incfs_lookup_dentry(dir_path.dentry, file_name);
+	if (IS_ERR(file)) {
+		error = PTR_ERR(file);
+		file = NULL;
+		goto out;
+	}
+
+	fsnotify_create(d_inode(dir_path.dentry), file);
+
+	if (file_id_str) {
+		dir = incfs_lookup_dentry(base_path.dentry, INCFS_INDEX_NAME);
+		if (IS_ERR(dir)) {
+			error = PTR_ERR(dir);
+			dir = NULL;
+			goto out;
+		}
+
+		dput(file);
+		file = incfs_lookup_dentry(dir, file_id_str);
+		if (IS_ERR(file)) {
+			error = PTR_ERR(file);
+			file = NULL;
+			goto out;
+		}
+
+		fsnotify_create(d_inode(dir), file);
+
+		if (incomplete_file) {
+			dput(dir);
+			dir = incfs_lookup_dentry(base_path.dentry,
+						  INCFS_INCOMPLETE_NAME);
+			if (IS_ERR(dir)) {
+				error = PTR_ERR(dir);
+				dir = NULL;
+				goto out;
+			}
+
+			dput(file);
+			file = incfs_lookup_dentry(dir, file_id_str);
+			if (IS_ERR(file)) {
+				error = PTR_ERR(file);
+				file = NULL;
+				goto out;
+			}
+
+			fsnotify_create(d_inode(dir), file);
+		}
+	}
+out:
+	if (error)
+		pr_warn("%s failed with error %d\n", __func__, error);
+
+	dput(dir);
+	dput(file);
+	path_put(&dir_path);
+}
+
+static long ioctl_create_file(struct file *file,
+			struct incfs_new_file_args __user *usr_args)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	struct incfs_new_file_args args;
+	char *file_id_str = NULL;
+	struct dentry *index_file_dentry = NULL;
+	struct dentry *named_file_dentry = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	struct path parent_dir_path = {};
+	struct inode *index_dir_inode = NULL;
+	__le64 size_attr_value = 0;
+	char *file_name = NULL;
+	char *attr_value = NULL;
+	int error = 0;
+	bool locked = false;
+	bool index_linked = false;
+	bool name_linked = false;
+	bool incomplete_linked = false;
+
+	if (!mi || !mi->mi_index_dir || !mi->mi_incomplete_dir) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	if (copy_from_user(&args, usr_args, sizeof(args)) > 0) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX);
+	if (IS_ERR(file_name)) {
+		error = PTR_ERR(file_name);
+		file_name = NULL;
+		goto out;
+	}
+
+	error = validate_name(file_name);
+	if (error)
+		goto out;
+
+	file_id_str = file_id_to_str(args.file_id);
+	if (!file_id_str) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		goto out;
+	locked = true;
+
+	/* Find a directory to put the file into. */
+	error = dir_relative_path_resolve(mi,
+			u64_to_user_ptr(args.directory_path),
+			&parent_dir_path, NULL);
+	if (error)
+		goto out;
+
+	if (parent_dir_path.dentry == mi->mi_index_dir) {
+		/* Can't create a file directly inside .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	if (parent_dir_path.dentry == mi->mi_incomplete_dir) {
+		/* Can't create a file directly inside .incomplete */
+		error = -EBUSY;
+		goto out;
+	}
+
+	/* Look up a dentry in the parent dir. It should be negative. */
+	named_file_dentry = incfs_lookup_dentry(parent_dir_path.dentry,
+					file_name);
+	if (!named_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(named_file_dentry)) {
+		error = PTR_ERR(named_file_dentry);
+		named_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(named_file_dentry)) {
+		/* File with this path already exists. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Look up a dentry in the incomplete dir. It should be negative. */
+	incomplete_file_dentry = incfs_lookup_dentry(mi->mi_incomplete_dir,
+					file_id_str);
+	if (!incomplete_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(incomplete_file_dentry)) {
+		error = PTR_ERR(incomplete_file_dentry);
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(incomplete_file_dentry)) {
+		/* File with this path already exists. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Look up a dentry in the .index dir. It should be negative. */
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str);
+	if (!index_file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(index_file_dentry)) {
+		error = PTR_ERR(index_file_dentry);
+		index_file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(index_file_dentry)) {
+		/* File with this ID already exists in index. */
+		error = -EEXIST;
+		goto out;
+	}
+
+	/* Creating a file in the .index dir. */
+	index_dir_inode = d_inode(mi->mi_index_dir);
+	inode_lock_nested(index_dir_inode, I_MUTEX_PARENT);
+	error = vfs_create(index_dir_inode, index_file_dentry, args.mode | 0222,
+			   true);
+	inode_unlock(index_dir_inode);
+
+	if (error)
+		goto out;
+	if (!d_really_is_positive(index_file_dentry)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	error = chmod(index_file_dentry, args.mode | 0222);
+	if (error) {
+		pr_debug("incfs: chmod err: %d\n", error);
+		goto out;
+	}
+
+	/* Save the file's ID as an xattr for easy fetching in future. */
+	error = vfs_setxattr(index_file_dentry, INCFS_XATTR_ID_NAME,
+		file_id_str, strlen(file_id_str), XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto out;
+	}
+
+	/* Save the file's size as an xattr for easy fetching in future. */
+	size_attr_value = cpu_to_le64(args.size);
+	error = vfs_setxattr(index_file_dentry, INCFS_XATTR_SIZE_NAME,
+		(char *)&size_attr_value, sizeof(size_attr_value),
+		XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto out;
+	}
+
+	/* Save the file's attribute as an xattr */
+	if (args.file_attr_len && args.file_attr) {
+		if (args.file_attr_len > INCFS_MAX_FILE_ATTR_SIZE) {
+			error = -E2BIG;
+			goto out;
+		}
+
+		attr_value = kmalloc(args.file_attr_len, GFP_NOFS);
+		if (!attr_value) {
+			error = -ENOMEM;
+			goto out;
+		}
+
+		if (copy_from_user(attr_value,
+				u64_to_user_ptr(args.file_attr),
+				args.file_attr_len) > 0) {
+			error = -EFAULT;
+			goto out;
+		}
+
+		error = vfs_setxattr(index_file_dentry,
+				INCFS_XATTR_METADATA_NAME,
+				attr_value, args.file_attr_len,
+				XATTR_CREATE);
+
+		if (error)
+			goto out;
+	}
+
+	/* Initializing a newly created file. */
+	error = init_new_file(mi, index_file_dentry, &args.file_id, args.size,
+			      range(attr_value, args.file_attr_len),
+			      u64_to_user_ptr(args.signature_info),
+			      args.signature_size);
+	if (error)
+		goto out;
+	index_linked = true;
+
+	/* Linking a file with its real name from the requested dir. */
+	error = incfs_link(index_file_dentry, named_file_dentry);
+	if (error)
+		goto out;
+	name_linked = true;
+
+	if (args.size) {
+		/* Linking a file with its incomplete entry */
+		error = incfs_link(index_file_dentry, incomplete_file_dentry);
+		if (error)
+			goto out;
+		incomplete_linked = true;
+	}
+
+	notify_create(file, u64_to_user_ptr(args.directory_path), file_name,
+		      file_id_str, args.size != 0);
+
+out:
+	if (error) {
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+		if (index_linked)
+			incfs_unlink(index_file_dentry);
+		if (name_linked)
+			incfs_unlink(named_file_dentry);
+		if (incomplete_linked)
+			incfs_unlink(incomplete_file_dentry);
+	}
+
+	kfree(file_id_str);
+	kfree(file_name);
+	kfree(attr_value);
+	dput(named_file_dentry);
+	dput(index_file_dentry);
+	dput(incomplete_file_dentry);
+	path_put(&parent_dir_path);
+	if (locked)
+		mutex_unlock(&mi->mi_dir_struct_mutex);
+
+	return error;
+}
+
+static int init_new_mapped_file(struct mount_info *mi, struct dentry *dentry,
+			 incfs_uuid_t *uuid, u64 size, u64 offset)
+{
+	struct path path = {};
+	struct file *new_file;
+	int error = 0;
+	struct backing_file_context *bfc = NULL;
+
+	if (!mi || !dentry || !uuid)
+		return -EFAULT;
+
+	/* Resize newly created file to its true size. */
+	path = (struct path) {
+		.mnt = mi->mi_backing_dir_path.mnt,
+		.dentry = dentry
+	};
+	new_file = dentry_open(&path, O_RDWR | O_NOATIME | O_LARGEFILE,
+			       current_cred());
+
+	if (IS_ERR(new_file)) {
+		error = PTR_ERR(new_file);
+		goto out;
+	}
+
+	bfc = incfs_alloc_bfc(mi, new_file);
+	fput(new_file);
+	if (IS_ERR(bfc)) {
+		error = PTR_ERR(bfc);
+		bfc = NULL;
+		goto out;
+	}
+
+	mutex_lock(&bfc->bc_mutex);
+	error = incfs_write_mapping_fh_to_backing_file(bfc, uuid, size, offset);
+	if (error)
+		goto out;
+
+out:
+	if (bfc) {
+		mutex_unlock(&bfc->bc_mutex);
+		incfs_free_bfc(bfc);
+	}
+
+	if (error)
+		pr_debug("incfs: %s error: %d\n", __func__, error);
+	return error;
+}
+
+static long ioctl_create_mapped_file(struct file *file, void __user *arg)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	struct incfs_create_mapped_file_args __user *args_usr_ptr = arg;
+	struct incfs_create_mapped_file_args args = {};
+	char *file_name;
+	int error = 0;
+	struct path parent_dir_path = {};
+	char *source_file_name = NULL;
+	struct dentry *source_file_dentry = NULL;
+	u64 source_file_size;
+	struct dentry *file_dentry = NULL;
+	struct inode *parent_inode;
+	__le64 size_attr_value;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	file_name = strndup_user(u64_to_user_ptr(args.file_name), PATH_MAX);
+	if (IS_ERR(file_name)) {
+		error = PTR_ERR(file_name);
+		file_name = NULL;
+		goto out;
+	}
+
+	error = validate_name(file_name);
+	if (error)
+		goto out;
+
+	if (args.source_offset % INCFS_DATA_FILE_BLOCK_SIZE) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	/* Validate file mapping is in range */
+	source_file_name = file_id_to_str(args.source_file_id);
+	if (!source_file_name) {
+		pr_warn("Failed to alloc source_file_name\n");
+		error = -ENOMEM;
+		goto out;
+	}
+
+	source_file_dentry = incfs_lookup_dentry(mi->mi_index_dir,
+						       source_file_name);
+	if (!source_file_dentry) {
+		pr_warn("Source file does not exist\n");
+		error = -EINVAL;
+		goto out;
+	}
+	if (IS_ERR(source_file_dentry)) {
+		pr_warn("Error opening source file\n");
+		error = PTR_ERR(source_file_dentry);
+		source_file_dentry = NULL;
+		goto out;
+	}
+	if (!d_really_is_positive(source_file_dentry)) {
+		pr_warn("Source file dentry negative\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	error = vfs_getxattr(source_file_dentry, INCFS_XATTR_SIZE_NAME,
+			     (char *)&size_attr_value, sizeof(size_attr_value));
+	if (error < 0)
+		goto out;
+
+	if (error != sizeof(size_attr_value)) {
+		pr_warn("Mapped file has no size attr\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	source_file_size = le64_to_cpu(size_attr_value);
+	if (args.source_offset + args.size > source_file_size) {
+		pr_warn("Mapped file out of range\n");
+		error = -EINVAL;
+		goto out;
+	}
+
+	/* Find a directory to put the file into. */
+	error = dir_relative_path_resolve(mi,
+			u64_to_user_ptr(args.directory_path),
+			&parent_dir_path, NULL);
+	if (error)
+		goto out;
+
+	if (parent_dir_path.dentry == mi->mi_index_dir) {
+		/* Can't create a file directly inside .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	/* Look up a dentry in the parent dir. It should be negative. */
+	file_dentry = incfs_lookup_dentry(parent_dir_path.dentry,
+					file_name);
+	if (!file_dentry) {
+		error = -EFAULT;
+		goto out;
+	}
+	if (IS_ERR(file_dentry)) {
+		error = PTR_ERR(file_dentry);
+		file_dentry = NULL;
+		goto out;
+	}
+	if (d_really_is_positive(file_dentry)) {
+		error = -EEXIST;
+		goto out;
+	}
+
+	parent_inode = d_inode(parent_dir_path.dentry);
+	inode_lock_nested(parent_inode, I_MUTEX_PARENT);
+	error = vfs_create(parent_inode, file_dentry, args.mode | 0222, true);
+	inode_unlock(parent_inode);
+	if (error)
+		goto out;
+
+	error = chmod(file_dentry, args.mode | 0222);
+	if (error) {
+		pr_debug("incfs: chmod err: %d\n", error);
+		goto delete_file;
+	}
+
+	/* Save the file's size as an xattr for easy fetching in future. */
+	size_attr_value = cpu_to_le64(args.size);
+	error = vfs_setxattr(file_dentry, INCFS_XATTR_SIZE_NAME,
+		(char *)&size_attr_value, sizeof(size_attr_value),
+		XATTR_CREATE);
+	if (error) {
+		pr_debug("incfs: vfs_setxattr err:%d\n", error);
+		goto delete_file;
+	}
+
+	error = init_new_mapped_file(mi, file_dentry, &args.source_file_id,
+			args.size, args.source_offset);
+	if (error)
+		goto delete_file;
+
+	notify_create(file, u64_to_user_ptr(args.directory_path), file_name,
+		      NULL, false);
+
+	goto out;
+
+delete_file:
+	incfs_unlink(file_dentry);
+
+out:
+	dput(file_dentry);
+	dput(source_file_dentry);
+	path_put(&parent_dir_path);
+	kfree(file_name);
+	kfree(source_file_name);
+	return error;
+}
+
+static long ioctl_get_read_timeouts(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_get_read_timeouts_args __user *args_usr_ptr = arg;
+	struct incfs_get_read_timeouts_args args = {};
+	int error = 0;
+	struct incfs_per_uid_read_timeouts *buffer;
+	int size;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)))
+		return -EINVAL;
+
+	if (args.timeouts_array_size_out > INCFS_DATA_FILE_BLOCK_SIZE)
+		return -EINVAL;
+
+	buffer = kzalloc(args.timeouts_array_size_out, GFP_NOFS);
+	if (!buffer)
+		return -ENOMEM;
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	size = mi->mi_per_uid_read_timeouts_size;
+	if (args.timeouts_array_size < size)
+		error = -E2BIG;
+	else if (size)
+		memcpy(buffer, mi->mi_per_uid_read_timeouts, size);
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+
+	args.timeouts_array_size_out = size;
+	if (!error && size)
+		if (copy_to_user(u64_to_user_ptr(args.timeouts_array), buffer,
+				 size))
+			error = -EFAULT;
+
+	if (!error || error == -E2BIG)
+		if (copy_to_user(args_usr_ptr, &args, sizeof(args)) > 0)
+			error = -EFAULT;
+
+	kfree(buffer);
+	return error;
+}
+
+static long ioctl_set_read_timeouts(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_set_read_timeouts_args __user *args_usr_ptr = arg;
+	struct incfs_set_read_timeouts_args args = {};
+	int error = 0;
+	int size;
+	struct incfs_per_uid_read_timeouts *buffer = NULL, *tmp;
+	int i;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)))
+		return -EINVAL;
+
+	size = args.timeouts_array_size;
+	if (size) {
+		if (size > INCFS_DATA_FILE_BLOCK_SIZE ||
+		    size % sizeof(*buffer) != 0)
+			return -EINVAL;
+
+		buffer = kzalloc(size, GFP_NOFS);
+		if (!buffer)
+			return -ENOMEM;
+
+		if (copy_from_user(buffer, u64_to_user_ptr(args.timeouts_array),
+				   size)) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		for (i = 0; i < size / sizeof(*buffer); ++i) {
+			struct incfs_per_uid_read_timeouts *t = &buffer[i];
+
+			if (t->min_pending_time_us > t->max_pending_time_us) {
+				error = -EINVAL;
+				goto out;
+			}
+		}
+	}
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	mi->mi_per_uid_read_timeouts_size = size;
+	tmp = mi->mi_per_uid_read_timeouts;
+	mi->mi_per_uid_read_timeouts = buffer;
+	buffer = tmp;
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+
+out:
+	kfree(buffer);
+	return error;
+}
+
+static long ioctl_get_last_read_error(struct mount_info *mi, void __user *arg)
+{
+	struct incfs_get_last_read_error_args __user *args_usr_ptr = arg;
+	struct incfs_get_last_read_error_args args = {};
+	int error;
+
+	error = mutex_lock_interruptible(&mi->mi_le_mutex);
+	if (error)
+		return error;
+
+	args.file_id_out = mi->mi_le_file_id;
+	args.time_us_out = mi->mi_le_time_us;
+	args.page_out = mi->mi_le_page;
+	args.errno_out = mi->mi_le_errno;
+	args.uid_out = mi->mi_le_uid;
+
+	mutex_unlock(&mi->mi_le_mutex);
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)) > 0)
+		error = -EFAULT;
+
+	return error;
+}
+
+static long pending_reads_dispatch_ioctl(struct file *f, unsigned int req,
+					unsigned long arg)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+
+	switch (req) {
+	case INCFS_IOC_CREATE_FILE:
+		return ioctl_create_file(f, (void __user *)arg);
+	case INCFS_IOC_PERMIT_FILL:
+		return ioctl_permit_fill(f, (void __user *)arg);
+	case INCFS_IOC_CREATE_MAPPED_FILE:
+		return ioctl_create_mapped_file(f, (void __user *)arg);
+	case INCFS_IOC_GET_READ_TIMEOUTS:
+		return ioctl_get_read_timeouts(mi, (void __user *)arg);
+	case INCFS_IOC_SET_READ_TIMEOUTS:
+		return ioctl_set_read_timeouts(mi, (void __user *)arg);
+	case INCFS_IOC_GET_LAST_READ_ERROR:
+		return ioctl_get_last_read_error(mi, (void __user *)arg);
+	default:
+		return -EINVAL;
+	}
+}
+
+static const struct file_operations incfs_pending_reads_file_ops = {
+	.read = pending_reads_read,
+	.poll = pending_reads_poll,
+	.open = pending_reads_open,
+	.release = pending_reads_release,
+	.llseek = noop_llseek,
+	.unlocked_ioctl = pending_reads_dispatch_ioctl,
+	.compat_ioctl = pending_reads_dispatch_ioctl
+};
+
+/*******************************************************************************
+ * .log pseudo file definition
+ ******************************************************************************/
+#define INCFS_LOG_INODE 3
+static const char log_file_name[] = INCFS_LOG_FILENAME;
+
+/* State of an open .log file, unique for each file descriptor. */
+struct log_file_state {
+	struct read_log_state state;
+};
+
+static ssize_t log_read(struct file *f, char __user *buf, size_t len,
+			loff_t *ppos)
+{
+	struct log_file_state *log_state = f->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	int total_reads_collected = 0;
+	int rl_size;
+	ssize_t result = 0;
+	bool report_uid;
+	unsigned long page = 0;
+	struct incfs_pending_read_info *reads_buf = NULL;
+	struct incfs_pending_read_info2 *reads_buf2 = NULL;
+	size_t record_size;
+	ssize_t reads_to_collect;
+	ssize_t reads_per_page;
+
+	if (!mi)
+		return -EFAULT;
+
+	report_uid = mi->mi_options.report_uid;
+	record_size = report_uid ? sizeof(*reads_buf2) : sizeof(*reads_buf);
+	reads_to_collect = len / record_size;
+	reads_per_page = PAGE_SIZE / record_size;
+
+	rl_size = READ_ONCE(mi->mi_log.rl_size);
+	if (rl_size == 0)
+		return 0;
+
+	page = __get_free_page(GFP_NOFS);
+	if (!page)
+		return -ENOMEM;
+
+	if (report_uid)
+		reads_buf2 = (struct incfs_pending_read_info2 *)page;
+	else
+		reads_buf = (struct incfs_pending_read_info *)page;
+
+	reads_to_collect = min_t(ssize_t, rl_size, reads_to_collect);
+	while (reads_to_collect > 0) {
+		struct read_log_state next_state;
+		int reads_collected;
+
+		memcpy(&next_state, &log_state->state, sizeof(next_state));
+		reads_collected = incfs_collect_logged_reads(
+			mi, &next_state, reads_buf, reads_buf2,
+			min_t(ssize_t, reads_to_collect, reads_per_page));
+		if (reads_collected <= 0) {
+			result = total_reads_collected ?
+				       total_reads_collected * record_size :
+				       reads_collected;
+			goto out;
+		}
+		if (copy_to_user(buf, (void *)page,
+				 reads_collected * record_size)) {
+			result = total_reads_collected ?
+				       total_reads_collected * record_size :
+				       -EFAULT;
+			goto out;
+		}
+
+		memcpy(&log_state->state, &next_state, sizeof(next_state));
+		total_reads_collected += reads_collected;
+		buf += reads_collected * record_size;
+		reads_to_collect -= reads_collected;
+	}
+
+	result = total_reads_collected * record_size;
+	*ppos = 0;
+out:
+	free_page(page);
+	return result;
+}
+
+static __poll_t log_poll(struct file *file, poll_table *wait)
+{
+	struct log_file_state *log_state = file->private_data;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	int count;
+	__poll_t ret = 0;
+
+	poll_wait(file, &mi->mi_log.ml_notif_wq, wait);
+	count = incfs_get_uncollected_logs_count(mi, &log_state->state);
+	if (count >= mi->mi_options.read_log_wakeup_count)
+		ret = EPOLLIN | EPOLLRDNORM;
+
+	return ret;
+}
+
+static int log_open(struct inode *inode, struct file *file)
+{
+	struct log_file_state *log_state = NULL;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+
+	log_state = kzalloc(sizeof(*log_state), GFP_NOFS);
+	if (!log_state)
+		return -ENOMEM;
+
+	log_state->state = incfs_get_log_state(mi);
+	file->private_data = log_state;
+	return 0;
+}
+
+static int log_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static const struct file_operations incfs_log_file_ops = {
+	.read = log_read,
+	.poll = log_poll,
+	.open = log_open,
+	.release = log_release,
+	.llseek = noop_llseek,
+};
+
+/*******************************************************************************
+ * .blocks_written pseudo file definition
+ ******************************************************************************/
+#define INCFS_BLOCKS_WRITTEN_INODE 4
+static const char blocks_written_file_name[] = INCFS_BLOCKS_WRITTEN_FILENAME;
+
+/* State of an open .blocks_written file, unique for each file descriptor. */
+struct blocks_written_file_state {
+	unsigned long blocks_written;
+};
+
+static ssize_t blocks_written_read(struct file *f, char __user *buf, size_t len,
+			loff_t *ppos)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	struct blocks_written_file_state *state = f->private_data;
+	unsigned long blocks_written;
+	char string[21];
+	int result = 0;
+
+	if (!mi)
+		return -EFAULT;
+
+	blocks_written = atomic_read(&mi->mi_blocks_written);
+	if (state->blocks_written == blocks_written)
+		return 0;
+
+	result = snprintf(string, sizeof(string), "%lu", blocks_written);
+	if (result > len)
+		result = len;
+	if (copy_to_user(buf, string, result))
+		return -EFAULT;
+
+	state->blocks_written = blocks_written;
+	return result;
+}
+
+static __poll_t blocks_written_poll(struct file *f, poll_table *wait)
+{
+	struct mount_info *mi = get_mount_info(file_superblock(f));
+	struct blocks_written_file_state *state = f->private_data;
+	unsigned long blocks_written;
+
+	if (!mi)
+		return 0;
+
+	poll_wait(f, &mi->mi_blocks_written_notif_wq, wait);
+	blocks_written = atomic_read(&mi->mi_blocks_written);
+	if (state->blocks_written == blocks_written)
+		return 0;
+
+	return EPOLLIN | EPOLLRDNORM;
+}
+
+static int blocks_written_open(struct inode *inode, struct file *file)
+{
+	struct blocks_written_file_state *state =
+		kzalloc(sizeof(*state), GFP_NOFS);
+
+	if (!state)
+		return -ENOMEM;
+
+	state->blocks_written = -1;
+	file->private_data = state;
+	return 0;
+}
+
+static int blocks_written_release(struct inode *inode, struct file *file)
+{
+	kfree(file->private_data);
+	return 0;
+}
+
+static const struct file_operations incfs_blocks_written_file_ops = {
+	.read = blocks_written_read,
+	.poll = blocks_written_poll,
+	.open = blocks_written_open,
+	.release = blocks_written_release,
+	.llseek = noop_llseek,
+};
+
+/*******************************************************************************
+ * Generic inode lookup functionality
+ ******************************************************************************/
+
+const struct mem_range incfs_pseudo_file_names[] = {
+	{ .data = (u8 *)pending_reads_file_name,
+	  .len = ARRAY_SIZE(pending_reads_file_name) - 1 },
+	{ .data = (u8 *)log_file_name, .len = ARRAY_SIZE(log_file_name) - 1 },
+	{ .data = (u8 *)blocks_written_file_name,
+	  .len = ARRAY_SIZE(blocks_written_file_name) - 1 }
+};
+
+const unsigned long incfs_pseudo_file_inodes[] = { INCFS_PENDING_READS_INODE,
+						   INCFS_LOG_INODE,
+						   INCFS_BLOCKS_WRITTEN_INODE };
+
+static const struct file_operations *const pseudo_file_operations[] = {
+	&incfs_pending_reads_file_ops, &incfs_log_file_ops,
+	&incfs_blocks_written_file_ops
+};
+
+static bool is_pseudo_filename(struct mem_range name)
+{
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i)
+		if (incfs_equal_ranges(incfs_pseudo_file_names[i], name))
+			return true;
+	return false;
+}
+
+static bool get_pseudo_inode(int ino, struct inode *inode)
+{
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_inodes); ++i)
+		if (ino == incfs_pseudo_file_inodes[i])
+			break;
+	if (i == ARRAY_SIZE(incfs_pseudo_file_inodes))
+		return false;
+
+	inode->i_ctime = (struct timespec64){};
+	inode->i_mtime = inode->i_ctime;
+	inode->i_atime = inode->i_ctime;
+	inode->i_size = 0;
+	inode->i_ino = ino;
+	inode->i_private = NULL;
+	inode_init_owner(inode, NULL, S_IFREG | READ_WRITE_FILE_MODE);
+	inode->i_op = &incfs_file_inode_ops;
+	inode->i_fop = pseudo_file_operations[i];
+	return true;
+}
+
+struct inode_search {
+	unsigned long ino;
+};
+
+static int inode_test(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+
+	return inode->i_ino == search->ino;
+}
+
+static int inode_set(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+
+	if (get_pseudo_inode(search->ino, inode))
+		return 0;
+
+	/* Unknown inode requested. */
+	return -EINVAL;
+}
+
+static struct inode *fetch_inode(struct super_block *sb, unsigned long ino)
+{
+	struct inode_search search = {
+		.ino = ino
+	};
+	struct inode *inode = iget5_locked(sb, search.ino, inode_test,
+				inode_set, &search);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	if (inode->i_state & I_NEW)
+		unlock_new_inode(inode);
+
+	return inode;
+}
+
+int dir_lookup_pseudo_files(struct super_block *sb, struct dentry *dentry)
+{
+	struct mem_range name_range =
+			range((u8 *)dentry->d_name.name, dentry->d_name.len);
+	unsigned long ino;
+	struct inode *inode;
+	int i = 0;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i)
+		if (incfs_equal_ranges(incfs_pseudo_file_names[i], name_range))
+			break;
+	if (i == ARRAY_SIZE(incfs_pseudo_file_names))
+		return -ENOENT;
+
+	ino = incfs_pseudo_file_inodes[i];
+
+	inode = fetch_inode(sb, ino);
+	if (IS_ERR(inode))
+		return PTR_ERR(inode);
+
+	d_add(dentry, inode);
+	return 0;
+}
+
+int emit_pseudo_files(struct dir_context *ctx)
+{
+	loff_t i = ctx->pos;
+
+	for (; i < ARRAY_SIZE(incfs_pseudo_file_names); ++i) {
+		if (!dir_emit(ctx, incfs_pseudo_file_names[i].data,
+			      incfs_pseudo_file_names[i].len,
+			      incfs_pseudo_file_inodes[i], DT_REG))
+			return -EINVAL;
+
+		ctx->pos++;
+	}
+	return 0;
+}
diff --git a/fs/incfs/pseudo_files.h b/fs/incfs/pseudo_files.h
new file mode 100644
index 0000000..1887218
--- /dev/null
+++ b/fs/incfs/pseudo_files.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef _INCFS_PSEUDO_FILES_H
+#define _INCFS_PSEUDO_FILES_H
+
+#include "internal.h"
+
+#define PSEUDO_FILE_COUNT 3
+#define INCFS_START_INO_RANGE 10
+
+extern const struct mem_range incfs_pseudo_file_names[PSEUDO_FILE_COUNT];
+extern const unsigned long incfs_pseudo_file_inodes[PSEUDO_FILE_COUNT];
+
+int dir_lookup_pseudo_files(struct super_block *sb, struct dentry *dentry);
+int emit_pseudo_files(struct dir_context *ctx);
+
+#endif
diff --git a/fs/incfs/sysfs.c b/fs/incfs/sysfs.c
new file mode 100644
index 0000000..360f03c
--- /dev/null
+++ b/fs/incfs/sysfs.c
@@ -0,0 +1,201 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2021 Google LLC
+ */
+#include <linux/fs.h>
+#include <linux/kobject.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "sysfs.h"
+#include "data_mgmt.h"
+#include "vfs.h"
+
+/******************************************************************************
+ * Define sys/fs/incrementalfs & sys/fs/incrementalfs/features
+ *****************************************************************************/
+#define INCFS_NODE_FEATURES "features"
+#define INCFS_NODE_INSTANCES "instances"
+
+static struct kobject *sysfs_root;
+static struct kobject *features_node;
+static struct kobject *instances_node;
+
+#define DECLARE_FEATURE_FLAG(name)					\
+	static ssize_t name##_show(struct kobject *kobj,		\
+			 struct kobj_attribute *attr, char *buff)	\
+{									\
+	return sysfs_emit(buff, "supported\n");				\
+}									\
+									\
+static struct kobj_attribute name##_attr = __ATTR_RO(name)
+
+DECLARE_FEATURE_FLAG(corefs);
+DECLARE_FEATURE_FLAG(zstd);
+DECLARE_FEATURE_FLAG(v2);
+
+static struct attribute *attributes[] = {
+	&corefs_attr.attr,
+	&zstd_attr.attr,
+	&v2_attr.attr,
+	NULL,
+};
+
+static const struct attribute_group attr_group = {
+	.attrs = attributes,
+};
+
+int __init incfs_init_sysfs(void)
+{
+	int res = -ENOMEM;
+
+	sysfs_root = kobject_create_and_add(INCFS_NAME, fs_kobj);
+	if (!sysfs_root)
+		return -ENOMEM;
+
+	instances_node = kobject_create_and_add(INCFS_NODE_INSTANCES,
+						sysfs_root);
+	if (!instances_node)
+		goto err_put_root;
+
+	features_node = kobject_create_and_add(INCFS_NODE_FEATURES,
+						sysfs_root);
+	if (!features_node)
+		goto err_put_instances;
+
+	res = sysfs_create_group(features_node, &attr_group);
+	if (res)
+		goto err_put_features;
+
+	return 0;
+
+err_put_features:
+	kobject_put(features_node);
+err_put_instances:
+	kobject_put(instances_node);
+err_put_root:
+	kobject_put(sysfs_root);
+
+	return res;
+}
+
+void incfs_cleanup_sysfs(void)
+{
+	if (features_node) {
+		sysfs_remove_group(features_node, &attr_group);
+		kobject_put(features_node);
+	}
+
+	kobject_put(instances_node);
+	kobject_put(sysfs_root);
+}
+
+/******************************************************************************
+ * Define sys/fs/incrementalfs/instances/<name>/
+ *****************************************************************************/
+#define __DECLARE_STATUS_FLAG(name)					\
+static ssize_t name##_show(struct kobject *kobj,			\
+			 struct kobj_attribute *attr, char *buff)	\
+{									\
+	struct incfs_sysfs_node *node = container_of(kobj,		\
+			struct incfs_sysfs_node, isn_sysfs_node);	\
+									\
+	return sysfs_emit(buff, "%d\n", node->isn_mi->mi_##name);	\
+}									\
+									\
+static struct kobj_attribute name##_attr = __ATTR_RO(name)
+
+#define __DECLARE_STATUS_FLAG64(name)					\
+static ssize_t name##_show(struct kobject *kobj,			\
+			 struct kobj_attribute *attr, char *buff)	\
+{									\
+	struct incfs_sysfs_node *node = container_of(kobj,		\
+			struct incfs_sysfs_node, isn_sysfs_node);	\
+									\
+	return sysfs_emit(buff, "%lld\n", node->isn_mi->mi_##name);	\
+}									\
+									\
+static struct kobj_attribute name##_attr = __ATTR_RO(name)
+
+__DECLARE_STATUS_FLAG(reads_failed_timed_out);
+__DECLARE_STATUS_FLAG(reads_failed_hash_verification);
+__DECLARE_STATUS_FLAG(reads_failed_other);
+__DECLARE_STATUS_FLAG(reads_delayed_pending);
+__DECLARE_STATUS_FLAG64(reads_delayed_pending_us);
+__DECLARE_STATUS_FLAG(reads_delayed_min);
+__DECLARE_STATUS_FLAG64(reads_delayed_min_us);
+
+static struct attribute *mount_attributes[] = {
+	&reads_failed_timed_out_attr.attr,
+	&reads_failed_hash_verification_attr.attr,
+	&reads_failed_other_attr.attr,
+	&reads_delayed_pending_attr.attr,
+	&reads_delayed_pending_us_attr.attr,
+	&reads_delayed_min_attr.attr,
+	&reads_delayed_min_us_attr.attr,
+	NULL,
+};
+
+static void incfs_sysfs_release(struct kobject *kobj)
+{
+	struct incfs_sysfs_node *node = container_of(kobj,
+				struct incfs_sysfs_node, isn_sysfs_node);
+
+	complete(&node->isn_completion);
+}
+
+static const struct attribute_group mount_attr_group = {
+	.attrs = mount_attributes,
+};
+
+static struct kobj_type incfs_kobj_node_ktype = {
+	.sysfs_ops	= &kobj_sysfs_ops,
+	.release	= &incfs_sysfs_release,
+};
+
+struct incfs_sysfs_node *incfs_add_sysfs_node(const char *name,
+					      struct mount_info *mi)
+{
+	struct incfs_sysfs_node *node = NULL;
+	int error;
+
+	if (!name)
+		return NULL;
+
+	node = kzalloc(sizeof(*node), GFP_NOFS);
+	if (!node)
+		return ERR_PTR(-ENOMEM);
+
+	node->isn_mi = mi;
+
+	init_completion(&node->isn_completion);
+	kobject_init(&node->isn_sysfs_node, &incfs_kobj_node_ktype);
+	error = kobject_add(&node->isn_sysfs_node, instances_node, "%s", name);
+	if (error)
+		goto err;
+
+	error = sysfs_create_group(&node->isn_sysfs_node, &mount_attr_group);
+	if (error)
+		goto err;
+
+	return node;
+
+err:
+	/*
+	 * Note kobject_put always calls release, so incfs_sysfs_release will
+	 * free node
+	 */
+	kobject_put(&node->isn_sysfs_node);
+	return ERR_PTR(error);
+}
+
+void incfs_free_sysfs_node(struct incfs_sysfs_node *node)
+{
+	if (!node)
+		return;
+
+	sysfs_remove_group(&node->isn_sysfs_node, &mount_attr_group);
+	kobject_put(&node->isn_sysfs_node);
+	wait_for_completion_interruptible(&node->isn_completion);
+	kfree(node);
+}
diff --git a/fs/incfs/sysfs.h b/fs/incfs/sysfs.h
new file mode 100644
index 0000000..65bf554
--- /dev/null
+++ b/fs/incfs/sysfs.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2021 Google LLC
+ */
+#ifndef _INCFS_SYSFS_H
+#define _INCFS_SYSFS_H
+
+struct incfs_sysfs_node {
+	struct kobject isn_sysfs_node;
+
+	struct completion isn_completion;
+
+	struct mount_info *isn_mi;
+};
+
+int incfs_init_sysfs(void);
+void incfs_cleanup_sysfs(void);
+struct incfs_sysfs_node *incfs_add_sysfs_node(const char *name,
+					      struct mount_info *mi);
+void incfs_free_sysfs_node(struct incfs_sysfs_node *node);
+
+#endif
diff --git a/fs/incfs/verity.c b/fs/incfs/verity.c
new file mode 100644
index 0000000..a3dc94b
--- /dev/null
+++ b/fs/incfs/verity.c
@@ -0,0 +1,851 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+
+/*
+ * fs-verity integration into incfs
+ *
+ * Since incfs has its own merkle tree implementation, most of fs-verity code
+ * is not needed. The key part that is needed is the signature check, since
+ * that is based on the private /proc/sys/fs/verity/require_signatures value
+ * and a private keyring. Thus the first change is to modify verity code to
+ * export a version of fsverity_verify_signature.
+ *
+ * fs-verity integration then consists of the following modifications:
+ *
+ * 1. Add the (optional) verity signature to the incfs file format
+ * 2. Add a pointer to the digest of the fs-verity descriptor struct to the
+ *    data_file struct that incfs attaches to each file inode.
+ * 3. Add the following ioclts:
+ *  - FS_IOC_ENABLE_VERITY
+ *  - FS_IOC_GETFLAGS
+ *  - FS_IOC_MEASURE_VERITY
+ * 4. When FS_IOC_ENABLE_VERITY is called on a non-verity file, the
+ *    fs-verity descriptor struct is populated and digested. If it passes the
+ *    signature check or the signature is NULL and
+ *    fs.verity.require_signatures=0, then the S_VERITY flag is set and the
+ *    xattr incfs.verity is set. If the signature is non-NULL, an
+ *    INCFS_MD_VERITY_SIGNATURE is added to the backing file containing the
+ *    signature.
+ * 5. When a file with an incfs.verity xattr's inode is initialized, the
+ *    inode’s S_VERITY flag is set.
+ * 6. When a file with the S_VERITY flag set on its inode is opened, the
+ *    data_file is checked for its verity digest. If the file doesn’t have a
+ *    digest, the file’s digest is calculated as above, checked, and set, or the
+ *    open is denied if it is not valid.
+ * 7. FS_IOC_GETFLAGS simply returns the value of the S_VERITY flag
+ * 8. FS_IOC_MEASURE_VERITY simply returns the cached digest
+ * 9. The final complication is that if FS_IOC_ENABLE_VERITY is called on a file
+ *    which doesn’t have a merkle tree, the merkle tree is calculated before the
+ *    rest of the process is completed.
+ */
+
+#include <crypto/hash.h>
+#include <crypto/sha.h>
+#include <linux/fsverity.h>
+#include <linux/mount.h>
+
+#include "verity.h"
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "integrity.h"
+#include "vfs.h"
+
+#define FS_VERITY_MAX_SIGNATURE_SIZE	16128
+
+static int incfs_get_root_hash(struct file *filp, u8 *root_hash)
+{
+	struct data_file *df = get_incfs_data_file(filp);
+
+	if (!df)
+		return -EINVAL;
+
+	memcpy(root_hash, df->df_hash_tree->root_hash,
+	       df->df_hash_tree->alg->digest_size);
+
+	return 0;
+}
+
+static int incfs_end_enable_verity(struct file *filp, u8 *sig, size_t sig_size)
+{
+	struct inode *inode = file_inode(filp);
+	struct mem_range signature = {
+		.data = sig,
+		.len = sig_size,
+	};
+	struct data_file *df = get_incfs_data_file(filp);
+	struct backing_file_context *bfc;
+	int error;
+	struct incfs_df_verity_signature *vs = NULL;
+	loff_t offset;
+
+	if (!df || !df->df_backing_file_context)
+		return -EFSCORRUPTED;
+
+	if (sig) {
+		vs = kzalloc(sizeof(*vs), GFP_NOFS);
+		if (!vs)
+			return -ENOMEM;
+	}
+
+	bfc = df->df_backing_file_context;
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (error)
+		goto out;
+
+	error = incfs_write_verity_signature_to_backing_file(bfc, signature,
+							     &offset);
+	mutex_unlock(&bfc->bc_mutex);
+	if (error)
+		goto out;
+
+	/*
+	 * Set verity xattr so we can set S_VERITY without opening backing file
+	 */
+	error = vfs_setxattr(bfc->bc_file->f_path.dentry,
+			     INCFS_XATTR_VERITY_NAME, NULL, 0, XATTR_CREATE);
+	if (error) {
+		pr_warn("incfs: error setting verity xattr: %d\n", error);
+		goto out;
+	}
+
+	if (sig) {
+		*vs = (struct incfs_df_verity_signature) {
+			.size = signature.len,
+			.offset = offset,
+		};
+
+		df->df_verity_signature = vs;
+		vs = NULL;
+	}
+
+	inode_set_flags(inode, S_VERITY, S_VERITY);
+
+out:
+	kfree(vs);
+	return error;
+}
+
+static int incfs_compute_file_digest(struct incfs_hash_alg *alg,
+				struct fsverity_descriptor *desc,
+				u8 *digest)
+{
+	SHASH_DESC_ON_STACK(d, alg->shash);
+
+	d->tfm = alg->shash;
+	return crypto_shash_digest(d, (u8 *)desc, sizeof(*desc), digest);
+}
+
+static enum incfs_hash_tree_algorithm incfs_convert_fsverity_hash_alg(
+								int hash_alg)
+{
+	switch (hash_alg) {
+	case FS_VERITY_HASH_ALG_SHA256:
+		return INCFS_HASH_TREE_SHA256;
+	default:
+		return -EINVAL;
+	}
+}
+
+static struct mem_range incfs_get_verity_digest(struct inode *inode)
+{
+	struct inode_info *node = get_incfs_node(inode);
+	struct data_file *df;
+	struct mem_range verity_file_digest;
+
+	if (!node) {
+		pr_warn("Invalid inode\n");
+		return range(NULL, 0);
+	}
+
+	df = node->n_file;
+
+	/*
+	 * Pairs with the cmpxchg_release() in incfs_set_verity_digest().
+	 * I.e., another task may publish ->df_verity_file_digest concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	verity_file_digest.data = smp_load_acquire(
+					&df->df_verity_file_digest.data);
+	verity_file_digest.len = df->df_verity_file_digest.len;
+	return verity_file_digest;
+}
+
+static void incfs_set_verity_digest(struct inode *inode,
+				     struct mem_range verity_file_digest)
+{
+	struct inode_info *node = get_incfs_node(inode);
+	struct data_file *df;
+
+	if (!node) {
+		pr_warn("Invalid inode\n");
+		kfree(verity_file_digest.data);
+		return;
+	}
+
+	df = node->n_file;
+	df->df_verity_file_digest.len = verity_file_digest.len;
+
+	/*
+	 * Multiple tasks may race to set ->df_verity_file_digest.data, so use
+	 * cmpxchg_release().  This pairs with the smp_load_acquire() in
+	 * incfs_get_verity_digest().  I.e., here we publish
+	 * ->df_verity_file_digest.data, with a RELEASE barrier so that other
+	 * tasks can ACQUIRE it.
+	 */
+	if (cmpxchg_release(&df->df_verity_file_digest.data, NULL,
+			    verity_file_digest.data) != NULL)
+		/* Lost the race, so free the file_digest we allocated. */
+		kfree(verity_file_digest.data);
+}
+
+/*
+ * Calculate the digest of the fsverity_descriptor. The signature (if present)
+ * is also checked.
+ */
+static struct mem_range incfs_calc_verity_digest_from_desc(
+					const struct inode *inode,
+					struct fsverity_descriptor *desc,
+					u8 *signature, size_t sig_size)
+{
+	enum incfs_hash_tree_algorithm incfs_hash_alg;
+	struct mem_range verity_file_digest;
+	int err;
+	struct incfs_hash_alg *hash_alg;
+
+	incfs_hash_alg = incfs_convert_fsverity_hash_alg(desc->hash_algorithm);
+	if (incfs_hash_alg < 0)
+		return range(ERR_PTR(incfs_hash_alg), 0);
+
+	hash_alg = incfs_get_hash_alg(incfs_hash_alg);
+	if (IS_ERR(hash_alg))
+		return range((u8 *)hash_alg, 0);
+
+	verity_file_digest = range(kzalloc(hash_alg->digest_size, GFP_KERNEL),
+				   hash_alg->digest_size);
+	if (!verity_file_digest.data)
+		return range(ERR_PTR(-ENOMEM), 0);
+
+	err = incfs_compute_file_digest(hash_alg, desc,
+					verity_file_digest.data);
+	if (err) {
+		pr_err("Error %d computing file digest", err);
+		goto out;
+	}
+	pr_debug("Computed file digest: %s:%*phN\n",
+		 hash_alg->name, (int) verity_file_digest.len,
+		 verity_file_digest.data);
+
+	err = __fsverity_verify_signature(inode, signature, sig_size,
+					  verity_file_digest.data,
+					  desc->hash_algorithm);
+out:
+	if (err) {
+		kfree(verity_file_digest.data);
+		verity_file_digest = range(ERR_PTR(err), 0);
+	}
+	return verity_file_digest;
+}
+
+static struct fsverity_descriptor *incfs_get_fsverity_descriptor(
+					struct file *filp, int hash_algorithm)
+{
+	struct inode *inode = file_inode(filp);
+	struct fsverity_descriptor *desc = kzalloc(sizeof(*desc), GFP_KERNEL);
+	int err;
+
+	if (!desc)
+		return ERR_PTR(-ENOMEM);
+
+	*desc = (struct fsverity_descriptor) {
+		.version = 1,
+		.hash_algorithm = hash_algorithm,
+		.log_blocksize = ilog2(INCFS_DATA_FILE_BLOCK_SIZE),
+		.data_size = cpu_to_le64(inode->i_size),
+	};
+
+	err = incfs_get_root_hash(filp, desc->root_hash);
+	if (err) {
+		kfree(desc);
+		return ERR_PTR(err);
+	}
+
+	return desc;
+}
+
+static struct mem_range incfs_calc_verity_digest(
+					struct inode *inode, struct file *filp,
+					u8 *signature, size_t signature_size,
+					int hash_algorithm)
+{
+	struct fsverity_descriptor *desc = incfs_get_fsverity_descriptor(filp,
+							hash_algorithm);
+	struct mem_range verity_file_digest;
+
+	if (IS_ERR(desc))
+		return range((u8 *)desc, 0);
+	verity_file_digest = incfs_calc_verity_digest_from_desc(inode, desc,
+						signature, signature_size);
+	kfree(desc);
+	return verity_file_digest;
+}
+
+static int incfs_build_merkle_tree(struct file *f, struct data_file *df,
+			     struct backing_file_context *bfc,
+			     struct mtree *hash_tree, loff_t hash_offset,
+			     struct incfs_hash_alg *alg, struct mem_range hash)
+{
+	int error = 0;
+	int limit, lvl, i, result;
+	struct mem_range buf = {.len = INCFS_DATA_FILE_BLOCK_SIZE};
+	struct mem_range tmp = {.len = 2 * INCFS_DATA_FILE_BLOCK_SIZE};
+
+	buf.data = (u8 *)__get_free_pages(GFP_NOFS, get_order(buf.len));
+	tmp.data = (u8 *)__get_free_pages(GFP_NOFS, get_order(tmp.len));
+	if (!buf.data || !tmp.data) {
+		error = -ENOMEM;
+		goto out;
+	}
+
+	/*
+	 * lvl - 1 is the level we are reading, lvl the level we are writing
+	 * lvl == -1 means actual blocks
+	 * lvl == hash_tree->depth means root hash
+	 */
+	limit = df->df_data_block_count;
+	for (lvl = 0; lvl <= hash_tree->depth; lvl++) {
+		for (i = 0; i < limit; ++i) {
+			loff_t hash_level_offset;
+			struct mem_range partial_buf = buf;
+
+			if (lvl == 0)
+				result = incfs_read_data_file_block(partial_buf,
+						f, i, tmp, NULL);
+			else {
+				hash_level_offset = hash_offset +
+				       hash_tree->hash_level_suboffset[lvl - 1];
+
+				result = incfs_kread(bfc, partial_buf.data,
+						partial_buf.len,
+						hash_level_offset + i *
+						INCFS_DATA_FILE_BLOCK_SIZE);
+			}
+
+			if (result < 0) {
+				error = result;
+				goto out;
+			}
+
+			partial_buf.len = result;
+			error = incfs_calc_digest(alg, partial_buf, hash);
+			if (error)
+				goto out;
+
+			/*
+			 * last level - only one hash to take and it is stored
+			 * in the incfs signature record
+			 */
+			if (lvl == hash_tree->depth)
+				break;
+
+			hash_level_offset = hash_offset +
+				hash_tree->hash_level_suboffset[lvl];
+
+			result = incfs_kwrite(bfc, hash.data, hash.len,
+					hash_level_offset + hash.len * i);
+
+			if (result < 0) {
+				error = result;
+				goto out;
+			}
+
+			if (result != hash.len) {
+				error = -EIO;
+				goto out;
+			}
+		}
+		limit = DIV_ROUND_UP(limit,
+				     INCFS_DATA_FILE_BLOCK_SIZE / hash.len);
+	}
+
+out:
+	free_pages((unsigned long)tmp.data, get_order(tmp.len));
+	free_pages((unsigned long)buf.data, get_order(buf.len));
+	return error;
+}
+
+/*
+ * incfs files have a signature record that is separate from the
+ * verity_signature record. The signature record does not actually contain a
+ * signature, rather it contains the size/offset of the hash tree, and a binary
+ * blob which contains the root hash and potentially a signature.
+ *
+ * If the file was created with a signature record, then this function simply
+ * returns.
+ *
+ * Otherwise it will create a signature record with a minimal binary blob as
+ * defined by the structure below, create space for the hash tree and then
+ * populate it using incfs_build_merkle_tree
+ */
+static int incfs_add_signature_record(struct file *f)
+{
+	/* See incfs_parse_signature */
+	struct {
+		__le32 version;
+		__le32 size_of_hash_info_section;
+		struct {
+			__le32 hash_algorithm;
+			u8 log2_blocksize;
+			__le32 salt_size;
+			u8 salt[0];
+			__le32 hash_size;
+			u8 root_hash[32];
+		} __packed hash_section;
+		__le32 size_of_signing_info_section;
+		u8 signing_info_section[0];
+	} __packed sig = {
+		.version = cpu_to_le32(INCFS_SIGNATURE_VERSION),
+		.size_of_hash_info_section =
+			cpu_to_le32(sizeof(sig.hash_section)),
+		.hash_section = {
+			.hash_algorithm = cpu_to_le32(INCFS_HASH_TREE_SHA256),
+			.log2_blocksize = ilog2(INCFS_DATA_FILE_BLOCK_SIZE),
+			.hash_size = cpu_to_le32(SHA256_DIGEST_SIZE),
+		},
+	};
+
+	struct data_file *df = get_incfs_data_file(f);
+	struct mtree *hash_tree = NULL;
+	struct backing_file_context *bfc;
+	int error;
+	loff_t hash_offset, sig_offset;
+	struct incfs_hash_alg *alg = incfs_get_hash_alg(INCFS_HASH_TREE_SHA256);
+	u8 hash_buf[INCFS_MAX_HASH_SIZE];
+	int hash_size = alg->digest_size;
+	struct mem_range hash = range(hash_buf, hash_size);
+	int result;
+	struct incfs_df_signature *signature = NULL;
+
+	if (!df)
+		return -EINVAL;
+
+	if (df->df_header_flags & INCFS_FILE_MAPPED)
+		return -EINVAL;
+
+	/* Already signed? */
+	if (df->df_signature && df->df_hash_tree)
+		return 0;
+
+	if (df->df_signature || df->df_hash_tree)
+		return -EFSCORRUPTED;
+
+	/* Add signature metadata record to file */
+	hash_tree = incfs_alloc_mtree(range((u8 *)&sig, sizeof(sig)),
+				      df->df_data_block_count);
+	if (IS_ERR(hash_tree))
+		return PTR_ERR(hash_tree);
+
+	bfc = df->df_backing_file_context;
+	if (!bfc) {
+		error = -EFSCORRUPTED;
+		goto out;
+	}
+
+	error = mutex_lock_interruptible(&bfc->bc_mutex);
+	if (error)
+		goto out;
+
+	error = incfs_write_signature_to_backing_file(bfc,
+				range((u8 *)&sig, sizeof(sig)),
+				hash_tree->hash_tree_area_size,
+				&hash_offset, &sig_offset);
+	mutex_unlock(&bfc->bc_mutex);
+	if (error)
+		goto out;
+
+	/* Populate merkle tree */
+	error = incfs_build_merkle_tree(f, df, bfc, hash_tree, hash_offset, alg,
+				  hash);
+	if (error)
+		goto out;
+
+	/* Update signature metadata record */
+	memcpy(sig.hash_section.root_hash, hash.data, alg->digest_size);
+	result = incfs_kwrite(bfc, &sig, sizeof(sig), sig_offset);
+	if (result < 0) {
+		error = result;
+		goto out;
+	}
+
+	if (result != sizeof(sig)) {
+		error = -EIO;
+		goto out;
+	}
+
+	/* Update in-memory records */
+	memcpy(hash_tree->root_hash, hash.data, alg->digest_size);
+	signature = kzalloc(sizeof(*signature), GFP_NOFS);
+	if (!signature) {
+		error = -ENOMEM;
+		goto out;
+	}
+	*signature = (struct incfs_df_signature) {
+		.hash_offset = hash_offset,
+		.hash_size = hash_tree->hash_tree_area_size,
+		.sig_offset = sig_offset,
+		.sig_size = sizeof(sig),
+	};
+	df->df_signature = signature;
+	signature = NULL;
+
+	/*
+	 * Use memory barrier to prevent readpage seeing the hash tree until
+	 * it's fully there
+	 */
+	smp_store_release(&df->df_hash_tree, hash_tree);
+	hash_tree = NULL;
+
+out:
+	kfree(signature);
+	kfree(hash_tree);
+	return error;
+}
+
+static int incfs_enable_verity(struct file *filp,
+			 const struct fsverity_enable_arg *arg)
+{
+	struct inode *inode = file_inode(filp);
+	struct data_file *df = get_incfs_data_file(filp);
+	u8 *signature = NULL;
+	struct mem_range verity_file_digest = range(NULL, 0);
+	int err;
+
+	if (!df)
+		return -EFSCORRUPTED;
+
+	err = mutex_lock_interruptible(&df->df_enable_verity);
+	if (err)
+		return err;
+
+	if (IS_VERITY(inode)) {
+		err = -EEXIST;
+		goto out;
+	}
+
+	err = incfs_add_signature_record(filp);
+	if (err)
+		goto out;
+
+	/* Get the signature if the user provided one */
+	if (arg->sig_size) {
+		signature = memdup_user(u64_to_user_ptr(arg->sig_ptr),
+					arg->sig_size);
+		if (IS_ERR(signature)) {
+			err = PTR_ERR(signature);
+			signature = NULL;
+			goto out;
+		}
+	}
+
+	verity_file_digest = incfs_calc_verity_digest(inode, filp, signature,
+					arg->sig_size, arg->hash_algorithm);
+	if (IS_ERR(verity_file_digest.data)) {
+		err = PTR_ERR(verity_file_digest.data);
+		verity_file_digest.data = NULL;
+		goto out;
+	}
+
+	err = incfs_end_enable_verity(filp, signature, arg->sig_size);
+	if (err)
+		goto out;
+
+	/* Successfully enabled verity */
+	incfs_set_verity_digest(inode, verity_file_digest);
+	verity_file_digest.data = NULL;
+out:
+	mutex_unlock(&df->df_enable_verity);
+	kfree(signature);
+	kfree(verity_file_digest.data);
+	if (err)
+		pr_err("%s failed with err %d\n", __func__, err);
+	return err;
+}
+
+int incfs_ioctl_enable_verity(struct file *filp, const void __user *uarg)
+{
+	struct inode *inode = file_inode(filp);
+	struct fsverity_enable_arg arg;
+
+	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.hash_algorithm != FS_VERITY_HASH_ALG_SHA256)
+		return -EINVAL;
+
+	if (arg.block_size != PAGE_SIZE)
+		return -EINVAL;
+
+	if (arg.salt_size)
+		return -EINVAL;
+
+	if (arg.sig_size > FS_VERITY_MAX_SIGNATURE_SIZE)
+		return -EMSGSIZE;
+
+	if (S_ISDIR(inode->i_mode))
+		return -EISDIR;
+
+	if (!S_ISREG(inode->i_mode))
+		return -EINVAL;
+
+	return incfs_enable_verity(filp, &arg);
+}
+
+static u8 *incfs_get_verity_signature(struct file *filp, size_t *sig_size)
+{
+	struct data_file *df = get_incfs_data_file(filp);
+	struct incfs_df_verity_signature *vs;
+	u8 *signature;
+	int res;
+
+	if (!df || !df->df_backing_file_context)
+		return ERR_PTR(-EFSCORRUPTED);
+
+	vs = df->df_verity_signature;
+	if (!vs) {
+		*sig_size = 0;
+		return NULL;
+	}
+
+	if (!vs->size) {
+		*sig_size = 0;
+		return ERR_PTR(-EFSCORRUPTED);
+	}
+
+	signature = kzalloc(vs->size, GFP_KERNEL);
+	if (!signature)
+		return ERR_PTR(-ENOMEM);
+
+	res = incfs_kread(df->df_backing_file_context,
+			  signature, vs->size, vs->offset);
+
+	if (res < 0)
+		goto err_out;
+
+	if (res != vs->size) {
+		res = -EINVAL;
+		goto err_out;
+	}
+
+	*sig_size = vs->size;
+	return signature;
+
+err_out:
+	kfree(signature);
+	return ERR_PTR(res);
+}
+
+/* Ensure data_file->df_verity_file_digest is populated */
+static int ensure_verity_info(struct inode *inode, struct file *filp)
+{
+	struct mem_range verity_file_digest;
+	u8 *signature = NULL;
+	size_t sig_size;
+	int err = 0;
+
+	/* See if this file's verity file digest is already cached */
+	verity_file_digest = incfs_get_verity_digest(inode);
+	if (verity_file_digest.data)
+		return 0;
+
+	signature = incfs_get_verity_signature(filp, &sig_size);
+	if (IS_ERR(signature))
+		return PTR_ERR(signature);
+
+	verity_file_digest = incfs_calc_verity_digest(inode, filp, signature,
+						     sig_size,
+						     FS_VERITY_HASH_ALG_SHA256);
+	if (IS_ERR(verity_file_digest.data)) {
+		err = PTR_ERR(verity_file_digest.data);
+		goto out;
+	}
+
+	incfs_set_verity_digest(inode, verity_file_digest);
+
+out:
+	kfree(signature);
+	return err;
+}
+
+/**
+ * incfs_fsverity_file_open() - prepare to open a file that may be
+ * verity-enabled
+ * @inode: the inode being opened
+ * @filp: the struct file being set up
+ *
+ * When opening a verity file, set up data_file->df_verity_file_digest if not
+ * already done. Note that incfs does not allow opening for writing, so there is
+ * no need for that check.
+ *
+ * Return: 0 on success, -errno on failure
+ */
+int incfs_fsverity_file_open(struct inode *inode, struct file *filp)
+{
+	if (IS_VERITY(inode))
+		return ensure_verity_info(inode, filp);
+
+	return 0;
+}
+
+int incfs_ioctl_measure_verity(struct file *filp, void __user *_uarg)
+{
+	struct inode *inode = file_inode(filp);
+	struct mem_range verity_file_digest = incfs_get_verity_digest(inode);
+	struct fsverity_digest __user *uarg = _uarg;
+	struct fsverity_digest arg;
+
+	if (!verity_file_digest.data || !verity_file_digest.len)
+		return -ENODATA; /* not a verity file */
+
+	/*
+	 * 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 < verity_file_digest.len)
+		return -EOVERFLOW;
+
+	memset(&arg, 0, sizeof(arg));
+	arg.digest_algorithm = FS_VERITY_HASH_ALG_SHA256;
+	arg.digest_size = verity_file_digest.len;
+
+	if (copy_to_user(uarg, &arg, sizeof(arg)))
+		return -EFAULT;
+
+	if (copy_to_user(uarg->digest, verity_file_digest.data,
+			 verity_file_digest.len))
+		return -EFAULT;
+
+	return 0;
+}
+
+static int incfs_read_merkle_tree(struct file *filp, void __user *buf,
+				  u64 start_offset, int length)
+{
+	struct mem_range tmp_buf;
+	size_t offset;
+	int retval = 0;
+	int err = 0;
+	struct data_file *df = get_incfs_data_file(filp);
+
+	if (!df)
+		return -EINVAL;
+
+	tmp_buf = (struct mem_range) {
+		.data = kzalloc(INCFS_DATA_FILE_BLOCK_SIZE, GFP_NOFS),
+		.len = INCFS_DATA_FILE_BLOCK_SIZE,
+	};
+	if (!tmp_buf.data)
+		return -ENOMEM;
+
+	for (offset = start_offset; offset < start_offset + length;
+	     offset += tmp_buf.len) {
+		err = incfs_read_merkle_tree_blocks(tmp_buf, df, offset);
+
+		if (err < 0)
+			break;
+
+		if (err != tmp_buf.len)
+			break;
+
+		if (copy_to_user(buf, tmp_buf.data, tmp_buf.len))
+			break;
+
+		buf += tmp_buf.len;
+		retval += tmp_buf.len;
+	}
+
+	kfree(tmp_buf.data);
+	return retval ? retval : err;
+}
+
+static int incfs_read_descriptor(struct file *filp,
+				 void __user *buf, u64 offset, int length)
+{
+	int err;
+	struct fsverity_descriptor *desc = incfs_get_fsverity_descriptor(filp,
+						FS_VERITY_HASH_ALG_SHA256);
+
+	if (IS_ERR(desc))
+		return PTR_ERR(desc);
+	length = min_t(u64, length, sizeof(*desc));
+	err = copy_to_user(buf, desc, length);
+	kfree(desc);
+	return err ? err : length;
+}
+
+static int incfs_read_signature(struct file *filp,
+				void __user *buf, u64 offset, int length)
+{
+	size_t sig_size;
+	static u8 *signature;
+	int err;
+
+	signature = incfs_get_verity_signature(filp, &sig_size);
+	if (IS_ERR(signature))
+		return PTR_ERR(signature);
+
+	if (!signature)
+		return -ENODATA;
+
+	length = min_t(u64, length, sig_size);
+	err = copy_to_user(buf, signature, length);
+	kfree(signature);
+	return err ? err : length;
+}
+
+int incfs_ioctl_read_verity_metadata(struct file *filp,
+				     const void __user *uarg)
+{
+	struct fsverity_read_metadata_arg arg;
+	int length;
+	void __user *buf;
+
+	if (copy_from_user(&arg, uarg, sizeof(arg)))
+		return -EFAULT;
+
+	if (arg.__reserved)
+		return -EINVAL;
+
+	/* offset + length must not overflow. */
+	if (arg.offset + arg.length < arg.offset)
+		return -EINVAL;
+
+	/* Ensure that the return value will fit in INT_MAX. */
+	length = min_t(u64, arg.length, INT_MAX);
+
+	buf = u64_to_user_ptr(arg.buf_ptr);
+
+	switch (arg.metadata_type) {
+	case FS_VERITY_METADATA_TYPE_MERKLE_TREE:
+		return incfs_read_merkle_tree(filp, buf, arg.offset, length);
+	case FS_VERITY_METADATA_TYPE_DESCRIPTOR:
+		return incfs_read_descriptor(filp, buf, arg.offset, length);
+	case FS_VERITY_METADATA_TYPE_SIGNATURE:
+		return incfs_read_signature(filp, buf, arg.offset, length);
+	default:
+		return -EINVAL;
+	}
+}
diff --git a/fs/incfs/verity.h b/fs/incfs/verity.h
new file mode 100644
index 0000000..8fcdbc8
--- /dev/null
+++ b/fs/incfs/verity.h
@@ -0,0 +1,49 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2020 Google LLC
+ */
+
+#ifndef _INCFS_VERITY_H
+#define _INCFS_VERITY_H
+
+/* Arbitrary limit to bound the kmalloc() size.  Can be changed. */
+#define FS_VERITY_MAX_SIGNATURE_SIZE	16128
+
+#ifdef CONFIG_FS_VERITY
+
+int incfs_ioctl_enable_verity(struct file *filp, const void __user *uarg);
+int incfs_ioctl_measure_verity(struct file *filp, void __user *_uarg);
+
+int incfs_fsverity_file_open(struct inode *inode, struct file *filp);
+int incfs_ioctl_read_verity_metadata(struct file *filp,
+				     const void __user *uarg);
+
+#else /* !CONFIG_FS_VERITY */
+
+static inline int incfs_ioctl_enable_verity(struct file *filp,
+					    const void __user *uarg)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int incfs_ioctl_measure_verity(struct file *filp,
+					     void __user *_uarg)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int incfs_fsverity_file_open(struct inode *inode,
+					   struct file *filp)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int incfs_ioctl_read_verity_metadata(struct file *filp,
+						const void __user *uarg)
+{
+	return -EOPNOTSUPP;
+}
+
+#endif /* !CONFIG_FS_VERITY */
+
+#endif
diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c
new file mode 100644
index 0000000..eae0fb25
--- /dev/null
+++ b/fs/incfs/vfs.c
@@ -0,0 +1,1905 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#include <linux/blkdev.h>
+#include <linux/compat.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/fs_stack.h>
+#include <linux/fsnotify.h>
+#include <linux/fsverity.h>
+#include <linux/namei.h>
+#include <linux/parser.h>
+#include <linux/seq_file.h>
+
+#include <uapi/linux/incrementalfs.h>
+
+#include "vfs.h"
+
+#include "data_mgmt.h"
+#include "format.h"
+#include "internal.h"
+#include "pseudo_files.h"
+#include "sysfs.h"
+#include "verity.h"
+
+static int incfs_remount_fs(struct super_block *sb, int *flags, char *data);
+
+static int dentry_revalidate(struct dentry *dentry, unsigned int flags);
+static void dentry_release(struct dentry *d);
+
+static int iterate_incfs_dir(struct file *file, struct dir_context *ctx);
+static struct dentry *dir_lookup(struct inode *dir_inode,
+		struct dentry *dentry, unsigned int flags);
+static int dir_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode);
+static int dir_unlink(struct inode *dir, struct dentry *dentry);
+static int dir_link(struct dentry *old_dentry, struct inode *dir,
+			 struct dentry *new_dentry);
+static int dir_rmdir(struct inode *dir, struct dentry *dentry);
+static int dir_rename(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry);
+
+static int file_open(struct inode *inode, struct file *file);
+static int file_release(struct inode *inode, struct file *file);
+static int read_single_page(struct file *f, struct page *page);
+static long dispatch_ioctl(struct file *f, unsigned int req, unsigned long arg);
+
+#ifdef CONFIG_COMPAT
+static long incfs_compat_ioctl(struct file *file, unsigned int cmd,
+			 unsigned long arg);
+#endif
+
+static struct inode *alloc_inode(struct super_block *sb);
+static void free_inode(struct inode *inode);
+static void evict_inode(struct inode *inode);
+
+static int incfs_setattr(struct dentry *dentry, struct iattr *ia);
+static int incfs_getattr(const struct path *path,
+			 struct kstat *stat, u32 request_mask,
+			 unsigned int query_flags);
+static ssize_t incfs_getxattr(struct dentry *d, const char *name,
+			void *value, size_t size);
+static ssize_t incfs_setxattr(struct dentry *d, const char *name,
+			const void *value, size_t size, int flags);
+static ssize_t incfs_listxattr(struct dentry *d, char *list, size_t size);
+
+static int show_options(struct seq_file *, struct dentry *);
+
+static const struct super_operations incfs_super_ops = {
+	.statfs = simple_statfs,
+	.remount_fs = incfs_remount_fs,
+	.alloc_inode	= alloc_inode,
+	.destroy_inode	= free_inode,
+	.evict_inode = evict_inode,
+	.show_options = show_options
+};
+
+static int dir_rename_wrap(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry,
+		unsigned int flags)
+{
+	return dir_rename(old_dir, old_dentry, new_dir, new_dentry);
+}
+
+static const struct inode_operations incfs_dir_inode_ops = {
+	.lookup = dir_lookup,
+	.mkdir = dir_mkdir,
+	.rename = dir_rename_wrap,
+	.unlink = dir_unlink,
+	.link = dir_link,
+	.rmdir = dir_rmdir,
+	.setattr = incfs_setattr,
+};
+
+static const struct file_operations incfs_dir_fops = {
+	.llseek = generic_file_llseek,
+	.read = generic_read_dir,
+	.iterate = iterate_incfs_dir,
+	.open = file_open,
+	.release = file_release,
+};
+
+static const struct dentry_operations incfs_dentry_ops = {
+	.d_revalidate = dentry_revalidate,
+	.d_release = dentry_release
+};
+
+static const struct address_space_operations incfs_address_space_ops = {
+	.readpage = read_single_page,
+	/* .readpages = readpages */
+};
+
+static vm_fault_t incfs_fault(struct vm_fault *vmf)
+{
+	vmf->flags &= ~FAULT_FLAG_ALLOW_RETRY;
+	return filemap_fault(vmf);
+}
+
+static const struct vm_operations_struct incfs_file_vm_ops = {
+	.fault		= incfs_fault,
+	.map_pages	= filemap_map_pages,
+	.page_mkwrite	= filemap_page_mkwrite,
+};
+
+/* This is used for a general mmap of a disk file */
+
+static int incfs_file_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	struct address_space *mapping = file->f_mapping;
+
+	if (!mapping->a_ops->readpage)
+		return -ENOEXEC;
+	file_accessed(file);
+	vma->vm_ops = &incfs_file_vm_ops;
+	return 0;
+}
+
+const struct file_operations incfs_file_ops = {
+	.open = file_open,
+	.release = file_release,
+	.read_iter = generic_file_read_iter,
+	.mmap = incfs_file_mmap,
+	.splice_read = generic_file_splice_read,
+	.llseek = generic_file_llseek,
+	.unlocked_ioctl = dispatch_ioctl,
+#ifdef CONFIG_COMPAT
+	.compat_ioctl = incfs_compat_ioctl,
+#endif
+};
+
+const struct inode_operations incfs_file_inode_ops = {
+	.setattr = incfs_setattr,
+	.getattr = incfs_getattr,
+	.listxattr = incfs_listxattr
+};
+
+static int incfs_handler_getxattr(const struct xattr_handler *xh,
+				  struct dentry *d, struct inode *inode,
+				  const char *name, void *buffer, size_t size,
+                                  int flags)
+{
+	return incfs_getxattr(d, name, buffer, size);
+}
+
+static int incfs_handler_setxattr(const struct xattr_handler *xh,
+				  struct dentry *d, struct inode *inode,
+				  const char *name, const void *buffer,
+				  size_t size, int flags)
+{
+	return incfs_setxattr(d, name, buffer, size, flags);
+}
+
+static const struct xattr_handler incfs_xattr_handler = {
+	.prefix = "",	/* AKA all attributes */
+	.get = incfs_handler_getxattr,
+	.set = incfs_handler_setxattr,
+};
+
+static const struct xattr_handler *incfs_xattr_ops[] = {
+	&incfs_xattr_handler,
+	NULL,
+};
+
+struct inode_search {
+	unsigned long ino;
+
+	struct dentry *backing_dentry;
+
+	size_t size;
+
+	bool verity;
+};
+
+enum parse_parameter {
+	Opt_read_timeout,
+	Opt_readahead_pages,
+	Opt_rlog_pages,
+	Opt_rlog_wakeup_cnt,
+	Opt_report_uid,
+	Opt_sysfs_name,
+	Opt_err
+};
+
+static const match_table_t option_tokens = {
+	{ Opt_read_timeout, "read_timeout_ms=%u" },
+	{ Opt_readahead_pages, "readahead=%u" },
+	{ Opt_rlog_pages, "rlog_pages=%u" },
+	{ Opt_rlog_wakeup_cnt, "rlog_wakeup_cnt=%u" },
+	{ Opt_report_uid, "report_uid" },
+	{ Opt_sysfs_name, "sysfs_name=%s" },
+	{ Opt_err, NULL }
+};
+
+static void free_options(struct mount_options *opts)
+{
+	kfree(opts->sysfs_name);
+	opts->sysfs_name = NULL;
+}
+
+static int parse_options(struct mount_options *opts, char *str)
+{
+	substring_t args[MAX_OPT_ARGS];
+	int value;
+	char *position;
+
+	if (opts == NULL)
+		return -EFAULT;
+
+	*opts = (struct mount_options) {
+		.read_timeout_ms = 1000, /* Default: 1s */
+		.readahead_pages = 10,
+		.read_log_pages = 2,
+		.read_log_wakeup_count = 10,
+	};
+
+	if (str == NULL || *str == 0)
+		return 0;
+
+	while ((position = strsep(&str, ",")) != NULL) {
+		int token;
+
+		if (!*position)
+			continue;
+
+		token = match_token(position, option_tokens, args);
+
+		switch (token) {
+		case Opt_read_timeout:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			if (value > 3600000)
+				return -EINVAL;
+			opts->read_timeout_ms = value;
+			break;
+		case Opt_readahead_pages:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->readahead_pages = value;
+			break;
+		case Opt_rlog_pages:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->read_log_pages = value;
+			break;
+		case Opt_rlog_wakeup_cnt:
+			if (match_int(&args[0], &value))
+				return -EINVAL;
+			opts->read_log_wakeup_count = value;
+			break;
+		case Opt_report_uid:
+			opts->report_uid = true;
+			break;
+		case Opt_sysfs_name:
+			opts->sysfs_name = match_strdup(&args[0]);
+			break;
+		default:
+			free_options(opts);
+			return -EINVAL;
+		}
+	}
+
+	return 0;
+}
+
+/* Read file size from the attribute. Quicker than reading the header */
+static u64 read_size_attr(struct dentry *backing_dentry)
+{
+	__le64 attr_value;
+	ssize_t bytes_read;
+
+	bytes_read = vfs_getxattr(backing_dentry, INCFS_XATTR_SIZE_NAME,
+			(char *)&attr_value, sizeof(attr_value));
+
+	if (bytes_read != sizeof(attr_value))
+		return 0;
+
+	return le64_to_cpu(attr_value);
+}
+
+/* Read verity flag from the attribute. Quicker than reading the header */
+static bool read_verity_attr(struct dentry *backing_dentry)
+{
+	return vfs_getxattr(backing_dentry, INCFS_XATTR_VERITY_NAME, NULL, 0)
+		>= 0;
+}
+
+static int inode_test(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+	struct inode_info *node = get_incfs_node(inode);
+	struct inode *backing_inode = d_inode(search->backing_dentry);
+
+	if (!node)
+		return 0;
+
+	return node->n_backing_inode == backing_inode &&
+		inode->i_ino == search->ino;
+}
+
+static int inode_set(struct inode *inode, void *opaque)
+{
+	struct inode_search *search = opaque;
+	struct inode_info *node = get_incfs_node(inode);
+	struct dentry *backing_dentry = search->backing_dentry;
+	struct inode *backing_inode = d_inode(backing_dentry);
+
+	fsstack_copy_attr_all(inode, backing_inode);
+	if (S_ISREG(inode->i_mode)) {
+		u64 size = search->size;
+
+		inode->i_size = size;
+		inode->i_blocks = get_blocks_count_for_size(size);
+		inode->i_mapping->a_ops = &incfs_address_space_ops;
+		inode->i_op = &incfs_file_inode_ops;
+		inode->i_fop = &incfs_file_ops;
+		inode->i_mode &= ~0222;
+		if (search->verity)
+			inode_set_flags(inode, S_VERITY, S_VERITY);
+	} else if (S_ISDIR(inode->i_mode)) {
+		inode->i_size = 0;
+		inode->i_blocks = 1;
+		inode->i_mapping->a_ops = &incfs_address_space_ops;
+		inode->i_op = &incfs_dir_inode_ops;
+		inode->i_fop = &incfs_dir_fops;
+	} else {
+		pr_warn_once("incfs: Unexpected inode type\n");
+		return -EBADF;
+	}
+
+	ihold(backing_inode);
+	node->n_backing_inode = backing_inode;
+	node->n_mount_info = get_mount_info(inode->i_sb);
+	inode->i_ctime = backing_inode->i_ctime;
+	inode->i_mtime = backing_inode->i_mtime;
+	inode->i_atime = backing_inode->i_atime;
+	inode->i_ino = backing_inode->i_ino;
+	if (backing_inode->i_ino < INCFS_START_INO_RANGE) {
+		pr_warn("incfs: ino conflict with backing FS %ld\n",
+			backing_inode->i_ino);
+	}
+
+	return 0;
+}
+
+static struct inode *fetch_regular_inode(struct super_block *sb,
+					struct dentry *backing_dentry)
+{
+	struct inode *backing_inode = d_inode(backing_dentry);
+	struct inode_search search = {
+		.ino = backing_inode->i_ino,
+		.backing_dentry = backing_dentry,
+		.size = read_size_attr(backing_dentry),
+		.verity = read_verity_attr(backing_dentry),
+	};
+	struct inode *inode = iget5_locked(sb, search.ino, inode_test,
+				inode_set, &search);
+
+	if (!inode)
+		return ERR_PTR(-ENOMEM);
+
+	if (inode->i_state & I_NEW)
+		unlock_new_inode(inode);
+
+	return inode;
+}
+
+static int iterate_incfs_dir(struct file *file, struct dir_context *ctx)
+{
+	struct dir_file *dir = get_incfs_dir_file(file);
+	int error = 0;
+	struct mount_info *mi = get_mount_info(file_superblock(file));
+	bool root;
+
+	if (!dir) {
+		error = -EBADF;
+		goto out;
+	}
+
+	root = dir->backing_dir->f_inode
+			== d_inode(mi->mi_backing_dir_path.dentry);
+
+	if (root) {
+		error = emit_pseudo_files(ctx);
+		if (error)
+			goto out;
+	}
+
+	ctx->pos -= PSEUDO_FILE_COUNT;
+	error = iterate_dir(dir->backing_dir, ctx);
+	ctx->pos += PSEUDO_FILE_COUNT;
+	file->f_pos = dir->backing_dir->f_pos;
+out:
+	if (error)
+		pr_warn("incfs: %s %s %d\n", __func__,
+			file->f_path.dentry->d_name.name, error);
+	return error;
+}
+
+static int incfs_init_dentry(struct dentry *dentry, struct path *path)
+{
+	struct dentry_info *d_info = NULL;
+
+	if (!dentry || !path)
+		return -EFAULT;
+
+	d_info = kzalloc(sizeof(*d_info), GFP_NOFS);
+	if (!d_info)
+		return -ENOMEM;
+
+	d_info->backing_path = *path;
+	path_get(path);
+
+	dentry->d_fsdata = d_info;
+	return 0;
+}
+
+static struct dentry *open_or_create_special_dir(struct dentry *backing_dir,
+						 const char *name)
+{
+	struct dentry *index_dentry;
+	struct inode *backing_inode = d_inode(backing_dir);
+	int err = 0;
+
+	index_dentry = incfs_lookup_dentry(backing_dir, name);
+	if (!index_dentry) {
+		return ERR_PTR(-EINVAL);
+	} else if (IS_ERR(index_dentry)) {
+		return index_dentry;
+	} else if (d_really_is_positive(index_dentry)) {
+		/* Index already exists. */
+		return index_dentry;
+	}
+
+	/* Index needs to be created. */
+	inode_lock_nested(backing_inode, I_MUTEX_PARENT);
+	err = vfs_mkdir(backing_inode, index_dentry, 0777);
+	inode_unlock(backing_inode);
+
+	if (err) {
+		dput(index_dentry);
+		return ERR_PTR(err);
+	}
+
+	if (!d_really_is_positive(index_dentry) ||
+		unlikely(d_unhashed(index_dentry))) {
+		dput(index_dentry);
+		return ERR_PTR(-EINVAL);
+	}
+
+	return index_dentry;
+}
+
+static int read_single_page_timeouts(struct data_file *df, struct file *f,
+				     int block_index, struct mem_range range,
+				     struct mem_range tmp)
+{
+	struct mount_info *mi = df->df_mount_info;
+	struct incfs_read_data_file_timeouts timeouts = {
+		.max_pending_time_us = U32_MAX,
+	};
+	int uid = current_uid().val;
+	int i;
+
+	spin_lock(&mi->mi_per_uid_read_timeouts_lock);
+	for (i = 0; i < mi->mi_per_uid_read_timeouts_size /
+		sizeof(*mi->mi_per_uid_read_timeouts); ++i) {
+		struct incfs_per_uid_read_timeouts *t =
+			&mi->mi_per_uid_read_timeouts[i];
+
+		if(t->uid == uid) {
+			timeouts.min_time_us = t->min_time_us;
+			timeouts.min_pending_time_us = t->min_pending_time_us;
+			timeouts.max_pending_time_us = t->max_pending_time_us;
+			break;
+		}
+	}
+	spin_unlock(&mi->mi_per_uid_read_timeouts_lock);
+	if (timeouts.max_pending_time_us == U32_MAX) {
+		u64 read_timeout_us = (u64)mi->mi_options.read_timeout_ms *
+					1000;
+
+		timeouts.max_pending_time_us = read_timeout_us <= U32_MAX ?
+					       read_timeout_us : U32_MAX;
+	}
+
+	return incfs_read_data_file_block(range, f, block_index, tmp,
+					  &timeouts);
+}
+
+static int read_single_page(struct file *f, struct page *page)
+{
+	loff_t offset = 0;
+	loff_t size = 0;
+	ssize_t bytes_to_read = 0;
+	ssize_t read_result = 0;
+	struct data_file *df = get_incfs_data_file(f);
+	int result = 0;
+	void *page_start;
+	int block_index;
+
+	if (!df) {
+		SetPageError(page);
+		unlock_page(page);
+		return -EBADF;
+	}
+
+	page_start = kmap(page);
+	offset = page_offset(page);
+	block_index = (offset + df->df_mapped_offset) /
+		INCFS_DATA_FILE_BLOCK_SIZE;
+	size = df->df_size;
+
+	if (offset < size) {
+		struct mem_range tmp = {
+			.len = 2 * INCFS_DATA_FILE_BLOCK_SIZE
+		};
+		tmp.data = (u8 *)__get_free_pages(GFP_NOFS, get_order(tmp.len));
+		if (!tmp.data) {
+			read_result = -ENOMEM;
+			goto err;
+		}
+		bytes_to_read = min_t(loff_t, size - offset, PAGE_SIZE);
+
+		read_result = read_single_page_timeouts(df, f, block_index,
+					range(page_start, bytes_to_read), tmp);
+
+		free_pages((unsigned long)tmp.data, get_order(tmp.len));
+	} else {
+		bytes_to_read = 0;
+		read_result = 0;
+	}
+
+err:
+	if (read_result < 0)
+		result = read_result;
+	else if (read_result < PAGE_SIZE)
+		zero_user(page, read_result, PAGE_SIZE - read_result);
+
+	if (result == 0)
+		SetPageUptodate(page);
+	else
+		SetPageError(page);
+
+	flush_dcache_page(page);
+	kunmap(page);
+	unlock_page(page);
+	return result;
+}
+
+int incfs_link(struct dentry *what, struct dentry *where)
+{
+	struct dentry *parent_dentry = dget_parent(where);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_link(what, pinode, where, NULL);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+int incfs_unlink(struct dentry *dentry)
+{
+	struct dentry *parent_dentry = dget_parent(dentry);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_unlink(pinode, dentry, NULL);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+static int incfs_rmdir(struct dentry *dentry)
+{
+	struct dentry *parent_dentry = dget_parent(dentry);
+	struct inode *pinode = d_inode(parent_dentry);
+	int error = 0;
+
+	inode_lock_nested(pinode, I_MUTEX_PARENT);
+	error = vfs_rmdir(pinode, dentry);
+	inode_unlock(pinode);
+
+	dput(parent_dentry);
+	return error;
+}
+
+static void notify_unlink(struct dentry *dentry, const char *file_id_str,
+			  const char *special_directory)
+{
+	struct dentry *root = dentry;
+	struct dentry *file = NULL;
+	struct dentry *dir = NULL;
+	int error = 0;
+	bool take_lock = root->d_parent != root->d_parent->d_parent;
+
+	while (root != root->d_parent)
+		root = root->d_parent;
+
+	if (take_lock)
+		dir = incfs_lookup_dentry(root, special_directory);
+	else
+		dir = lookup_one_len(special_directory, root,
+				     strlen(special_directory));
+
+	if (IS_ERR(dir)) {
+		error = PTR_ERR(dir);
+		goto out;
+	}
+	if (d_is_negative(dir)) {
+		error = -ENOENT;
+		goto out;
+	}
+
+	file = incfs_lookup_dentry(dir, file_id_str);
+	if (IS_ERR(file)) {
+		error = PTR_ERR(file);
+		goto out;
+	}
+	if (d_is_negative(file)) {
+		error = -ENOENT;
+		goto out;
+	}
+
+	fsnotify_unlink(d_inode(dir), file);
+	d_delete(file);
+
+out:
+	if (error)
+		pr_warn("%s failed with error %d\n", __func__, error);
+
+	dput(dir);
+	dput(file);
+}
+
+static void maybe_delete_incomplete_file(struct file *f,
+					 struct data_file *df)
+{
+	struct backing_file_context *bfc;
+	struct mount_info *mi = df->df_mount_info;
+	char *file_id_str = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	const struct cred *old_cred = override_creds(mi->mi_owner);
+	int error;
+
+	if (atomic_read(&df->df_data_blocks_written) < df->df_data_block_count)
+		goto out;
+
+	/* Truncate file to remove any preallocated space */
+	bfc = df->df_backing_file_context;
+	if (bfc) {
+		struct file *f = bfc->bc_file;
+
+		if (f) {
+			loff_t size = i_size_read(file_inode(f));
+
+			error = vfs_truncate(&f->f_path, size);
+			if (error)
+				/* No useful action on failure */
+				pr_warn("incfs: Failed to truncate complete file: %d\n",
+					error);
+		}
+	}
+
+	/* This is best effort - there is no useful action to take on failure */
+	file_id_str = file_id_to_str(df->df_id);
+	if (!file_id_str)
+		goto out;
+
+	incomplete_file_dentry = incfs_lookup_dentry(
+					df->df_mount_info->mi_incomplete_dir,
+					file_id_str);
+	if (!incomplete_file_dentry || IS_ERR(incomplete_file_dentry)) {
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+
+	if (!d_really_is_positive(incomplete_file_dentry))
+		goto out;
+
+	vfs_fsync(df->df_backing_file_context->bc_file, 0);
+	error = incfs_unlink(incomplete_file_dentry);
+	if (error) {
+		pr_warn("incfs: Deleting incomplete file failed: %d\n", error);
+		goto out;
+	}
+
+	notify_unlink(f->f_path.dentry, file_id_str, INCFS_INCOMPLETE_NAME);
+
+out:
+	dput(incomplete_file_dentry);
+	kfree(file_id_str);
+	revert_creds(old_cred);
+}
+
+static long ioctl_fill_blocks(struct file *f, void __user *arg)
+{
+	struct incfs_fill_blocks __user *usr_fill_blocks = arg;
+	struct incfs_fill_blocks fill_blocks;
+	struct incfs_fill_block __user *usr_fill_block_array;
+	struct data_file *df = get_incfs_data_file(f);
+	struct incfs_file_data *fd = f->private_data;
+	const ssize_t data_buf_size = 2 * INCFS_DATA_FILE_BLOCK_SIZE;
+	u8 *data_buf = NULL;
+	ssize_t error = 0;
+	int i = 0;
+
+	if (!df)
+		return -EBADF;
+
+	if (!fd || fd->fd_fill_permission != CAN_FILL)
+		return -EPERM;
+
+	if (copy_from_user(&fill_blocks, usr_fill_blocks, sizeof(fill_blocks)))
+		return -EFAULT;
+
+	usr_fill_block_array = u64_to_user_ptr(fill_blocks.fill_blocks);
+	data_buf = (u8 *)__get_free_pages(GFP_NOFS | __GFP_COMP,
+					  get_order(data_buf_size));
+	if (!data_buf)
+		return -ENOMEM;
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		struct incfs_fill_block fill_block = {};
+
+		if (copy_from_user(&fill_block, &usr_fill_block_array[i],
+				   sizeof(fill_block)) > 0) {
+			error = -EFAULT;
+			break;
+		}
+
+		if (fill_block.data_len > data_buf_size) {
+			error = -E2BIG;
+			break;
+		}
+
+		if (copy_from_user(data_buf, u64_to_user_ptr(fill_block.data),
+				   fill_block.data_len) > 0) {
+			error = -EFAULT;
+			break;
+		}
+		fill_block.data = 0; /* To make sure nobody uses it. */
+		if (fill_block.flags & INCFS_BLOCK_FLAGS_HASH) {
+			error = incfs_process_new_hash_block(df, &fill_block,
+							     data_buf);
+		} else {
+			error = incfs_process_new_data_block(df, &fill_block,
+							     data_buf);
+		}
+		if (error)
+			break;
+	}
+
+	if (data_buf)
+		free_pages((unsigned long)data_buf, get_order(data_buf_size));
+
+	maybe_delete_incomplete_file(f, df);
+
+	/*
+	 * Only report the error if no records were processed, otherwise
+	 * just return how many were processed successfully.
+	 */
+	if (i == 0)
+		return error;
+
+	return i;
+}
+
+static long ioctl_read_file_signature(struct file *f, void __user *arg)
+{
+	struct incfs_get_file_sig_args __user *args_usr_ptr = arg;
+	struct incfs_get_file_sig_args args = {};
+	u8 *sig_buffer = NULL;
+	size_t sig_buf_size = 0;
+	int error = 0;
+	int read_result = 0;
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!df)
+		return -EINVAL;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	sig_buf_size = args.file_signature_buf_size;
+	if (sig_buf_size > INCFS_MAX_SIGNATURE_SIZE)
+		return -E2BIG;
+
+	sig_buffer = kzalloc(sig_buf_size, GFP_NOFS | __GFP_COMP);
+	if (!sig_buffer)
+		return -ENOMEM;
+
+	read_result = incfs_read_file_signature(df,
+			range(sig_buffer, sig_buf_size));
+
+	if (read_result < 0) {
+		error = read_result;
+		goto out;
+	}
+
+	if (copy_to_user(u64_to_user_ptr(args.file_signature), sig_buffer,
+			read_result)) {
+		error = -EFAULT;
+		goto out;
+	}
+
+	args.file_signature_len_out = read_result;
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		error = -EFAULT;
+
+out:
+	kfree(sig_buffer);
+
+	return error;
+}
+
+static long ioctl_get_filled_blocks(struct file *f, void __user *arg)
+{
+	struct incfs_get_filled_blocks_args __user *args_usr_ptr = arg;
+	struct incfs_get_filled_blocks_args args = {};
+	struct data_file *df = get_incfs_data_file(f);
+	struct incfs_file_data *fd = f->private_data;
+	int error;
+
+	if (!df || !fd)
+		return -EINVAL;
+
+	if (fd->fd_fill_permission != CAN_FILL)
+		return -EPERM;
+
+	if (copy_from_user(&args, args_usr_ptr, sizeof(args)) > 0)
+		return -EINVAL;
+
+	error = incfs_get_filled_blocks(df, fd, &args);
+
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		return -EFAULT;
+
+	return error;
+}
+
+static long ioctl_get_block_count(struct file *f, void __user *arg)
+{
+	struct incfs_get_block_count_args __user *args_usr_ptr = arg;
+	struct incfs_get_block_count_args args = {};
+	struct data_file *df = get_incfs_data_file(f);
+
+	if (!df)
+		return -EINVAL;
+
+	args.total_data_blocks_out = df->df_data_block_count;
+	args.filled_data_blocks_out = atomic_read(&df->df_data_blocks_written);
+	args.total_hash_blocks_out = df->df_total_block_count -
+		df->df_data_block_count;
+	args.filled_hash_blocks_out = atomic_read(&df->df_hash_blocks_written);
+
+	if (copy_to_user(args_usr_ptr, &args, sizeof(args)))
+		return -EFAULT;
+
+	return 0;
+}
+
+static int incfs_ioctl_get_flags(struct file *f, void __user *arg)
+{
+	u32 flags = IS_VERITY(file_inode(f)) ? FS_VERITY_FL : 0;
+
+	return put_user(flags, (int __user *) arg);
+}
+
+static long dispatch_ioctl(struct file *f, unsigned int req, unsigned long arg)
+{
+	switch (req) {
+	case INCFS_IOC_FILL_BLOCKS:
+		return ioctl_fill_blocks(f, (void __user *)arg);
+	case INCFS_IOC_READ_FILE_SIGNATURE:
+		return ioctl_read_file_signature(f, (void __user *)arg);
+	case INCFS_IOC_GET_FILLED_BLOCKS:
+		return ioctl_get_filled_blocks(f, (void __user *)arg);
+	case INCFS_IOC_GET_BLOCK_COUNT:
+		return ioctl_get_block_count(f, (void __user *)arg);
+	case FS_IOC_ENABLE_VERITY:
+		return incfs_ioctl_enable_verity(f, (const void __user *)arg);
+	case FS_IOC_GETFLAGS:
+		return incfs_ioctl_get_flags(f, (void __user *) arg);
+	case FS_IOC_MEASURE_VERITY:
+		return incfs_ioctl_measure_verity(f, (void __user *)arg);
+	case FS_IOC_READ_VERITY_METADATA:
+		return incfs_ioctl_read_verity_metadata(f, (void __user *)arg);
+	default:
+		return -EINVAL;
+	}
+}
+
+#ifdef CONFIG_COMPAT
+static long incfs_compat_ioctl(struct file *file, unsigned int cmd,
+			       unsigned long arg)
+{
+	switch (cmd) {
+	case FS_IOC32_GETFLAGS:
+		cmd = FS_IOC_GETFLAGS;
+		break;
+	case INCFS_IOC_FILL_BLOCKS:
+	case INCFS_IOC_READ_FILE_SIGNATURE:
+	case INCFS_IOC_GET_FILLED_BLOCKS:
+	case INCFS_IOC_GET_BLOCK_COUNT:
+	case FS_IOC_ENABLE_VERITY:
+	case FS_IOC_MEASURE_VERITY:
+	case FS_IOC_READ_VERITY_METADATA:
+		break;
+	default:
+		return -ENOIOCTLCMD;
+	}
+	return dispatch_ioctl(file, cmd, (unsigned long) compat_ptr(arg));
+}
+#endif
+
+static struct dentry *dir_lookup(struct inode *dir_inode, struct dentry *dentry,
+				 unsigned int flags)
+{
+	struct mount_info *mi = get_mount_info(dir_inode->i_sb);
+	struct dentry *dir_dentry = NULL;
+	struct dentry *backing_dentry = NULL;
+	struct path dir_backing_path = {};
+	struct inode_info *dir_info = get_incfs_node(dir_inode);
+	int err = 0;
+
+	if (!mi || !dir_info || !dir_info->n_backing_inode)
+		return ERR_PTR(-EBADF);
+
+	if (d_inode(mi->mi_backing_dir_path.dentry) ==
+		dir_info->n_backing_inode) {
+		/* We do lookup in the FS root. Show pseudo files. */
+		err = dir_lookup_pseudo_files(dir_inode->i_sb, dentry);
+		if (err != -ENOENT)
+			goto out;
+		err = 0;
+	}
+
+	dir_dentry = dget_parent(dentry);
+	get_incfs_backing_path(dir_dentry, &dir_backing_path);
+	backing_dentry = incfs_lookup_dentry(dir_backing_path.dentry,
+						dentry->d_name.name);
+
+	if (!backing_dentry || IS_ERR(backing_dentry)) {
+		err = IS_ERR(backing_dentry)
+			? PTR_ERR(backing_dentry)
+			: -EFAULT;
+		backing_dentry = NULL;
+		goto out;
+	} else {
+		struct inode *inode = NULL;
+		struct path backing_path = {
+			.mnt = dir_backing_path.mnt,
+			.dentry = backing_dentry
+		};
+
+		err = incfs_init_dentry(dentry, &backing_path);
+		if (err)
+			goto out;
+
+		if (!d_really_is_positive(backing_dentry)) {
+			/*
+			 * No such entry found in the backing dir.
+			 * Create a negative entry.
+			 */
+			d_add(dentry, NULL);
+			err = 0;
+			goto out;
+		}
+
+		if (d_inode(backing_dentry)->i_sb !=
+				dir_info->n_backing_inode->i_sb) {
+			/*
+			 * Somehow after the path lookup we ended up in a
+			 * different fs mount. If we keep going it's going
+			 * to end badly.
+			 */
+			err = -EXDEV;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir_inode->i_sb, backing_dentry);
+		if (IS_ERR(inode)) {
+			err = PTR_ERR(inode);
+			goto out;
+		}
+
+		d_add(dentry, inode);
+	}
+
+out:
+	dput(dir_dentry);
+	dput(backing_dentry);
+	path_put(&dir_backing_path);
+	if (err)
+		pr_debug("incfs: %s %s %d\n", __func__,
+			 dentry->d_name.name, err);
+	return ERR_PTR(err);
+}
+
+static int dir_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct inode_info *dir_node = get_incfs_node(dir);
+	struct dentry *backing_dentry = NULL;
+	struct path backing_path = {};
+	int err = 0;
+
+
+	if (!mi || !dir_node || !dir_node->n_backing_inode)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	backing_dentry = backing_path.dentry;
+
+	if (!backing_dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_dentry->d_parent == mi->mi_index_dir) {
+		/* Can't create a subdir inside .index */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Can't create a subdir inside .incomplete */
+		err = -EBUSY;
+		goto out;
+	}
+	inode_lock_nested(dir_node->n_backing_inode, I_MUTEX_PARENT);
+	err = vfs_mkdir(dir_node->n_backing_inode, backing_dentry, mode | 0222);
+	inode_unlock(dir_node->n_backing_inode);
+	if (!err) {
+		struct inode *inode = NULL;
+
+		if (d_really_is_negative(backing_dentry) ||
+			unlikely(d_unhashed(backing_dentry))) {
+			err = -EINVAL;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir->i_sb, backing_dentry);
+		if (IS_ERR(inode)) {
+			err = PTR_ERR(inode);
+			goto out;
+		}
+		d_instantiate(dentry, inode);
+	}
+
+out:
+	if (d_really_is_negative(dentry))
+		d_drop(dentry);
+	path_put(&backing_path);
+
+path_err:
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	return err;
+}
+
+/*
+ * Delete file referenced by backing_dentry and if appropriate its hardlink
+ * from .index and .incomplete
+ */
+static int file_delete(struct mount_info *mi, struct dentry *dentry,
+			struct dentry *backing_dentry, int nlink)
+{
+	struct dentry *index_file_dentry = NULL;
+	struct dentry *incomplete_file_dentry = NULL;
+	/* 2 chars per byte of file ID + 1 char for \0 */
+	char file_id_str[2 * sizeof(incfs_uuid_t) + 1] = {0};
+	ssize_t uuid_size = 0;
+	int error = 0;
+
+	WARN_ON(!mutex_is_locked(&mi->mi_dir_struct_mutex));
+
+	if (nlink > 3)
+		goto just_unlink;
+
+	uuid_size = vfs_getxattr(backing_dentry, INCFS_XATTR_ID_NAME,
+			file_id_str, 2 * sizeof(incfs_uuid_t));
+	if (uuid_size < 0) {
+		error = uuid_size;
+		goto out;
+	}
+
+	if (uuid_size != 2 * sizeof(incfs_uuid_t)) {
+		error = -EBADMSG;
+		goto out;
+	}
+
+	index_file_dentry = incfs_lookup_dentry(mi->mi_index_dir, file_id_str);
+	if (IS_ERR(index_file_dentry)) {
+		error = PTR_ERR(index_file_dentry);
+		index_file_dentry = NULL;
+		goto out;
+	}
+
+	if (d_really_is_positive(index_file_dentry) && nlink > 0)
+		nlink--;
+
+	if (nlink > 2)
+		goto just_unlink;
+
+	incomplete_file_dentry = incfs_lookup_dentry(mi->mi_incomplete_dir,
+						     file_id_str);
+	if (IS_ERR(incomplete_file_dentry)) {
+		error = PTR_ERR(incomplete_file_dentry);
+		incomplete_file_dentry = NULL;
+		goto out;
+	}
+
+	if (d_really_is_positive(incomplete_file_dentry) && nlink > 0)
+		nlink--;
+
+	if (nlink > 1)
+		goto just_unlink;
+
+	if (d_really_is_positive(index_file_dentry)) {
+		error = incfs_unlink(index_file_dentry);
+		if (error)
+			goto out;
+		notify_unlink(dentry, file_id_str, INCFS_INDEX_NAME);
+	}
+
+	if (d_really_is_positive(incomplete_file_dentry)) {
+		error = incfs_unlink(incomplete_file_dentry);
+		if (error)
+			goto out;
+		notify_unlink(dentry, file_id_str, INCFS_INCOMPLETE_NAME);
+	}
+
+just_unlink:
+	error = incfs_unlink(backing_dentry);
+
+out:
+	dput(index_file_dentry);
+	dput(incomplete_file_dentry);
+	if (error)
+		pr_debug("incfs: delete_file_from_index err:%d\n", error);
+	return error;
+}
+
+static int dir_unlink(struct inode *dir, struct dentry *dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_path = {};
+	struct kstat stat;
+	int err = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	if (!backing_path.dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_path.dentry->d_parent == mi->mi_index_dir) {
+		/* Direct unlink from .index are not allowed. */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_path.dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Direct unlink from .incomplete are not allowed. */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = vfs_getattr(&backing_path, &stat, STATX_NLINK,
+			  AT_STATX_SYNC_AS_STAT);
+	if (err)
+		goto out;
+
+	err = file_delete(mi, dentry, backing_path.dentry, stat.nlink);
+
+	d_drop(dentry);
+out:
+	path_put(&backing_path);
+path_err:
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return err;
+}
+
+static int dir_link(struct dentry *old_dentry, struct inode *dir,
+			 struct dentry *new_dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_old_path = {};
+	struct path backing_new_path = {};
+	int error = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		return error;
+
+	get_incfs_backing_path(old_dentry, &backing_old_path);
+	get_incfs_backing_path(new_dentry, &backing_new_path);
+
+	if (backing_new_path.dentry->d_parent == mi->mi_index_dir) {
+		/* Can't link to .index */
+		error = -EBUSY;
+		goto out;
+	}
+
+	if (backing_new_path.dentry->d_parent == mi->mi_incomplete_dir) {
+		/* Can't link to .incomplete */
+		error = -EBUSY;
+		goto out;
+	}
+
+	error = incfs_link(backing_old_path.dentry, backing_new_path.dentry);
+	if (!error) {
+		struct inode *inode = NULL;
+		struct dentry *bdentry = backing_new_path.dentry;
+
+		if (d_really_is_negative(bdentry)) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		inode = fetch_regular_inode(dir->i_sb, bdentry);
+		if (IS_ERR(inode)) {
+			error = PTR_ERR(inode);
+			goto out;
+		}
+		d_instantiate(new_dentry, inode);
+	}
+
+out:
+	path_put(&backing_old_path);
+	path_put(&backing_new_path);
+	if (error)
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return error;
+}
+
+static int dir_rmdir(struct inode *dir, struct dentry *dentry)
+{
+	struct mount_info *mi = get_mount_info(dir->i_sb);
+	struct path backing_path = {};
+	int err = 0;
+
+	if (!mi)
+		return -EBADF;
+
+	err = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (err)
+		return err;
+
+	get_incfs_backing_path(dentry, &backing_path);
+	if (!backing_path.dentry) {
+		err = -EBADF;
+		goto path_err;
+	}
+
+	if (backing_path.dentry == mi->mi_index_dir) {
+		/* Can't delete .index */
+		err = -EBUSY;
+		goto out;
+	}
+
+	if (backing_path.dentry == mi->mi_incomplete_dir) {
+		/* Can't delete .incomplete */
+		err = -EBUSY;
+		goto out;
+	}
+
+	err = incfs_rmdir(backing_path.dentry);
+	if (!err)
+		d_drop(dentry);
+out:
+	path_put(&backing_path);
+
+path_err:
+	if (err)
+		pr_debug("incfs: %s err:%d\n", __func__, err);
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	return err;
+}
+
+static int dir_rename(struct inode *old_dir, struct dentry *old_dentry,
+		struct inode *new_dir, struct dentry *new_dentry)
+{
+	struct mount_info *mi = get_mount_info(old_dir->i_sb);
+	struct dentry *backing_old_dentry;
+	struct dentry *backing_new_dentry;
+	struct dentry *backing_old_dir_dentry;
+	struct dentry *backing_new_dir_dentry;
+	struct inode *target_inode;
+	struct dentry *trap;
+	int error = 0;
+
+	error = mutex_lock_interruptible(&mi->mi_dir_struct_mutex);
+	if (error)
+		return error;
+
+	backing_old_dentry = get_incfs_dentry(old_dentry)->backing_path.dentry;
+
+	if (!backing_old_dentry || backing_old_dentry == mi->mi_index_dir ||
+	    backing_old_dentry == mi->mi_incomplete_dir) {
+		/* Renaming .index or .incomplete not allowed */
+		error = -EBUSY;
+		goto exit;
+	}
+
+	backing_new_dentry = get_incfs_dentry(new_dentry)->backing_path.dentry;
+	dget(backing_old_dentry);
+	dget(backing_new_dentry);
+
+	backing_old_dir_dentry = dget_parent(backing_old_dentry);
+	backing_new_dir_dentry = dget_parent(backing_new_dentry);
+	target_inode = d_inode(new_dentry);
+
+	if (backing_old_dir_dentry == mi->mi_index_dir ||
+	    backing_old_dir_dentry == mi->mi_incomplete_dir) {
+		/* Direct moves from .index or .incomplete are not allowed. */
+		error = -EBUSY;
+		goto out;
+	}
+
+	trap = lock_rename(backing_old_dir_dentry, backing_new_dir_dentry);
+
+	if (trap == backing_old_dentry) {
+		error = -EINVAL;
+		goto unlock_out;
+	}
+	if (trap == backing_new_dentry) {
+		error = -ENOTEMPTY;
+		goto unlock_out;
+	}
+
+	error = vfs_rename(d_inode(backing_old_dir_dentry), backing_old_dentry,
+			d_inode(backing_new_dir_dentry), backing_new_dentry,
+			NULL, 0);
+	if (error)
+		goto unlock_out;
+	if (target_inode)
+		fsstack_copy_attr_all(target_inode,
+			get_incfs_node(target_inode)->n_backing_inode);
+	fsstack_copy_attr_all(new_dir, d_inode(backing_new_dir_dentry));
+	if (new_dir != old_dir)
+		fsstack_copy_attr_all(old_dir, d_inode(backing_old_dir_dentry));
+
+unlock_out:
+	unlock_rename(backing_old_dir_dentry, backing_new_dir_dentry);
+
+out:
+	dput(backing_new_dir_dentry);
+	dput(backing_old_dir_dentry);
+	dput(backing_new_dentry);
+	dput(backing_old_dentry);
+
+exit:
+	mutex_unlock(&mi->mi_dir_struct_mutex);
+	if (error)
+		pr_debug("incfs: %s err:%d\n", __func__, error);
+	return error;
+}
+
+
+static int file_open(struct inode *inode, struct file *file)
+{
+	struct mount_info *mi = get_mount_info(inode->i_sb);
+	struct file *backing_file = NULL;
+	struct path backing_path = {};
+	int err = 0;
+	int flags = O_NOATIME | O_LARGEFILE |
+		(S_ISDIR(inode->i_mode) ? O_RDONLY : O_RDWR);
+	const struct cred *old_cred;
+
+	WARN_ON(file->private_data);
+
+	if (!mi)
+		return -EBADF;
+
+	get_incfs_backing_path(file->f_path.dentry, &backing_path);
+	if (!backing_path.dentry)
+		return -EBADF;
+
+	old_cred = override_creds(mi->mi_owner);
+	backing_file = dentry_open(&backing_path, flags, current_cred());
+	revert_creds(old_cred);
+	path_put(&backing_path);
+
+	if (IS_ERR(backing_file)) {
+		err = PTR_ERR(backing_file);
+		backing_file = NULL;
+		goto out;
+	}
+
+	if (S_ISREG(inode->i_mode)) {
+		struct incfs_file_data *fd = kzalloc(sizeof(*fd), GFP_NOFS);
+
+		if (!fd) {
+			err = -ENOMEM;
+			goto out;
+		}
+
+		*fd = (struct incfs_file_data) {
+			.fd_fill_permission = CANT_FILL,
+		};
+		file->private_data = fd;
+
+		err = make_inode_ready_for_data_ops(mi, inode, backing_file);
+		if (err)
+			goto out;
+
+		err = incfs_fsverity_file_open(inode, file);
+		if (err)
+			goto out;
+	} else if (S_ISDIR(inode->i_mode)) {
+		struct dir_file *dir = NULL;
+
+		dir = incfs_open_dir_file(mi, backing_file);
+		if (IS_ERR(dir))
+			err = PTR_ERR(dir);
+		else
+			file->private_data = dir;
+	} else
+		err = -EBADF;
+
+out:
+	if (err) {
+		pr_debug("name:%s err: %d\n",
+			 file->f_path.dentry->d_name.name, err);
+		if (S_ISREG(inode->i_mode))
+			kfree(file->private_data);
+		else if (S_ISDIR(inode->i_mode))
+			incfs_free_dir_file(file->private_data);
+
+		file->private_data = NULL;
+	}
+
+	if (backing_file)
+		fput(backing_file);
+	return err;
+}
+
+static int file_release(struct inode *inode, struct file *file)
+{
+	if (S_ISREG(inode->i_mode)) {
+		kfree(file->private_data);
+		file->private_data = NULL;
+	} else if (S_ISDIR(inode->i_mode)) {
+		struct dir_file *dir = get_incfs_dir_file(file);
+
+		incfs_free_dir_file(dir);
+	}
+
+	return 0;
+}
+
+static int dentry_revalidate(struct dentry *d, unsigned int flags)
+{
+	struct path backing_path = {};
+	struct inode_info *info = get_incfs_node(d_inode(d));
+	struct inode *binode = (info == NULL) ? NULL : info->n_backing_inode;
+	struct dentry *backing_dentry = NULL;
+	int result = 0;
+
+	if (flags & LOOKUP_RCU)
+		return -ECHILD;
+
+	get_incfs_backing_path(d, &backing_path);
+	backing_dentry = backing_path.dentry;
+	if (!backing_dentry)
+		goto out;
+
+	if (d_inode(backing_dentry) != binode) {
+		/*
+		 * Backing inodes obtained via dentry and inode don't match.
+		 * It indicates that most likely backing dir has changed
+		 * directly bypassing Incremental FS interface.
+		 */
+		goto out;
+	}
+
+	if (backing_dentry->d_flags & DCACHE_OP_REVALIDATE) {
+		result = backing_dentry->d_op->d_revalidate(backing_dentry,
+				flags);
+	} else
+		result = 1;
+
+out:
+	path_put(&backing_path);
+	return result;
+}
+
+static void dentry_release(struct dentry *d)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (di)
+		path_put(&di->backing_path);
+	kfree(d->d_fsdata);
+	d->d_fsdata = NULL;
+}
+
+static struct inode *alloc_inode(struct super_block *sb)
+{
+	struct inode_info *node = kzalloc(sizeof(*node), GFP_NOFS);
+
+	/* TODO: add a slab-based cache here. */
+	if (!node)
+		return NULL;
+	inode_init_once(&node->n_vfs_inode);
+	return &node->n_vfs_inode;
+}
+
+static void free_inode(struct inode *inode)
+{
+	struct inode_info *node = get_incfs_node(inode);
+
+	kfree(node);
+}
+
+static void evict_inode(struct inode *inode)
+{
+	struct inode_info *node = get_incfs_node(inode);
+
+	if (node) {
+		if (node->n_backing_inode) {
+			iput(node->n_backing_inode);
+			node->n_backing_inode = NULL;
+		}
+		if (node->n_file) {
+			incfs_free_data_file(node->n_file);
+			node->n_file = NULL;
+		}
+	}
+
+	truncate_inode_pages(&inode->i_data, 0);
+	clear_inode(inode);
+}
+
+static int incfs_setattr(struct dentry *dentry, struct iattr *ia)
+{
+	struct dentry_info *di = get_incfs_dentry(dentry);
+	struct dentry *backing_dentry;
+	struct inode *backing_inode;
+	int error;
+
+	if (ia->ia_valid & ATTR_SIZE)
+		return -EINVAL;
+
+	if (!di)
+		return -EINVAL;
+	backing_dentry = di->backing_path.dentry;
+	if (!backing_dentry)
+		return -EINVAL;
+
+	backing_inode = d_inode(backing_dentry);
+
+	/* incfs files are readonly, but the backing files must be writeable */
+	if (S_ISREG(backing_inode->i_mode)) {
+		if ((ia->ia_valid & ATTR_MODE) && (ia->ia_mode & 0222))
+			return -EINVAL;
+
+		ia->ia_mode |= 0222;
+	}
+
+	inode_lock(d_inode(backing_dentry));
+	error = notify_change(backing_dentry, ia, NULL);
+	inode_unlock(d_inode(backing_dentry));
+
+	if (error)
+		return error;
+
+	if (S_ISREG(backing_inode->i_mode))
+		ia->ia_mode &= ~0222;
+
+	return simple_setattr(dentry, ia);
+}
+
+
+static int incfs_getattr(const struct path *path,
+			 struct kstat *stat, u32 request_mask,
+			 unsigned int query_flags)
+{
+	struct inode *inode = d_inode(path->dentry);
+
+	generic_fillattr(inode, stat);
+
+	if (inode->i_ino < INCFS_START_INO_RANGE)
+		return 0;
+
+	stat->attributes &= ~STATX_ATTR_VERITY;
+	if (IS_VERITY(inode))
+		stat->attributes |= STATX_ATTR_VERITY;
+	stat->attributes_mask |= STATX_ATTR_VERITY;
+
+	if (request_mask & STATX_BLOCKS) {
+		struct kstat backing_kstat;
+		struct dentry_info *di = get_incfs_dentry(path->dentry);
+		int error = 0;
+		struct path *backing_path;
+
+		if (!di)
+			return -EFSCORRUPTED;
+		backing_path = &di->backing_path;
+		error = vfs_getattr(backing_path, &backing_kstat, STATX_BLOCKS,
+				    AT_STATX_SYNC_AS_STAT);
+		if (error)
+			return error;
+
+		stat->blocks = backing_kstat.blocks;
+	}
+
+	return 0;
+}
+
+static ssize_t incfs_getxattr(struct dentry *d, const char *name,
+			void *value, size_t size)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+	struct mount_info *mi = get_mount_info(d->d_sb);
+	char *stored_value;
+	size_t stored_size;
+	int i;
+
+	if (di && di->backing_path.dentry)
+		return vfs_getxattr(di->backing_path.dentry, name, value, size);
+
+	if (strcmp(name, "security.selinux"))
+		return -ENODATA;
+
+	for (i = 0; i < PSEUDO_FILE_COUNT; ++i)
+		if (!strcmp(d->d_iname, incfs_pseudo_file_names[i].data))
+			break;
+	if (i == PSEUDO_FILE_COUNT)
+		return -ENODATA;
+
+	stored_value = mi->pseudo_file_xattr[i].data;
+	stored_size = mi->pseudo_file_xattr[i].len;
+	if (!stored_value)
+		return -ENODATA;
+
+	if (stored_size > size)
+		return -E2BIG;
+
+	memcpy(value, stored_value, stored_size);
+	return stored_size;
+}
+
+
+static ssize_t incfs_setxattr(struct dentry *d, const char *name,
+			const void *value, size_t size, int flags)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+	struct mount_info *mi = get_mount_info(d->d_sb);
+	u8 **stored_value;
+	size_t *stored_size;
+	int i;
+
+	if (di && di->backing_path.dentry)
+		return vfs_setxattr(di->backing_path.dentry, name, value, size,
+				    flags);
+
+	if (strcmp(name, "security.selinux"))
+		return -ENODATA;
+
+	if (size > INCFS_MAX_FILE_ATTR_SIZE)
+		return -E2BIG;
+
+	for (i = 0; i < PSEUDO_FILE_COUNT; ++i)
+		if (!strcmp(d->d_iname, incfs_pseudo_file_names[i].data))
+			break;
+	if (i == PSEUDO_FILE_COUNT)
+		return -ENODATA;
+
+	stored_value = &mi->pseudo_file_xattr[i].data;
+	stored_size = &mi->pseudo_file_xattr[i].len;
+	kfree (*stored_value);
+	*stored_value = kzalloc(size, GFP_NOFS);
+	if (!*stored_value)
+		return -ENOMEM;
+
+	memcpy(*stored_value, value, size);
+	*stored_size = size;
+	return 0;
+}
+
+static ssize_t incfs_listxattr(struct dentry *d, char *list, size_t size)
+{
+	struct dentry_info *di = get_incfs_dentry(d);
+
+	if (!di || !di->backing_path.dentry)
+		return -ENODATA;
+
+	return vfs_listxattr(di->backing_path.dentry, list, size);
+}
+
+struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
+			      const char *dev_name, void *data)
+{
+	struct mount_options options = {};
+	struct mount_info *mi = NULL;
+	struct path backing_dir_path = {};
+	struct dentry *index_dir = NULL;
+	struct dentry *incomplete_dir = NULL;
+	struct super_block *src_fs_sb = NULL;
+	struct inode *root_inode = NULL;
+	struct super_block *sb = sget(type, NULL, set_anon_super, flags, NULL);
+	int error = 0;
+
+	if (IS_ERR(sb))
+		return ERR_CAST(sb);
+
+	sb->s_op = &incfs_super_ops;
+	sb->s_d_op = &incfs_dentry_ops;
+	sb->s_flags |= S_NOATIME;
+	sb->s_magic = INCFS_MAGIC_NUMBER;
+	sb->s_time_gran = 1;
+	sb->s_blocksize = INCFS_DATA_FILE_BLOCK_SIZE;
+	sb->s_blocksize_bits = blksize_bits(sb->s_blocksize);
+	sb->s_xattr = incfs_xattr_ops;
+
+	BUILD_BUG_ON(PAGE_SIZE != INCFS_DATA_FILE_BLOCK_SIZE);
+
+	error = parse_options(&options, (char *)data);
+	if (error != 0) {
+		pr_err("incfs: Options parsing error. %d\n", error);
+		goto err;
+	}
+
+	sb->s_bdi->ra_pages = options.readahead_pages;
+	if (!dev_name) {
+		pr_err("incfs: Backing dir is not set, filesystem can't be mounted.\n");
+		error = -ENOENT;
+		goto err;
+	}
+
+	error = kern_path(dev_name, LOOKUP_FOLLOW | LOOKUP_DIRECTORY,
+			&backing_dir_path);
+	if (error || backing_dir_path.dentry == NULL ||
+		!d_really_is_positive(backing_dir_path.dentry)) {
+		pr_err("incfs: Error accessing: %s.\n",
+			dev_name);
+		goto err;
+	}
+	src_fs_sb = backing_dir_path.dentry->d_sb;
+	sb->s_maxbytes = src_fs_sb->s_maxbytes;
+
+	mi = incfs_alloc_mount_info(sb, &options, &backing_dir_path);
+
+	if (IS_ERR_OR_NULL(mi)) {
+		error = PTR_ERR(mi);
+		pr_err("incfs: Error allocating mount info. %d\n", error);
+		mi = NULL;
+		goto err;
+	}
+
+	index_dir = open_or_create_special_dir(backing_dir_path.dentry,
+					       INCFS_INDEX_NAME);
+	if (IS_ERR_OR_NULL(index_dir)) {
+		error = PTR_ERR(index_dir);
+		pr_err("incfs: Can't find or create .index dir in %s\n",
+			dev_name);
+		/* No need to null index_dir since we don't put it */
+		goto err;
+	}
+	mi->mi_index_dir = index_dir;
+
+	incomplete_dir = open_or_create_special_dir(backing_dir_path.dentry,
+						    INCFS_INCOMPLETE_NAME);
+	if (IS_ERR_OR_NULL(incomplete_dir)) {
+		error = PTR_ERR(incomplete_dir);
+		pr_err("incfs: Can't find or create .incomplete dir in %s\n",
+			dev_name);
+		/* No need to null incomplete_dir since we don't put it */
+		goto err;
+	}
+	mi->mi_incomplete_dir = incomplete_dir;
+
+	sb->s_fs_info = mi;
+	root_inode = fetch_regular_inode(sb, backing_dir_path.dentry);
+	if (IS_ERR(root_inode)) {
+		error = PTR_ERR(root_inode);
+		goto err;
+	}
+
+	sb->s_root = d_make_root(root_inode);
+	if (!sb->s_root) {
+		error = -ENOMEM;
+		goto err;
+	}
+	error = incfs_init_dentry(sb->s_root, &backing_dir_path);
+	if (error)
+		goto err;
+
+	path_put(&backing_dir_path);
+	sb->s_flags |= SB_ACTIVE;
+
+	pr_debug("incfs: mount\n");
+	return dget(sb->s_root);
+err:
+	sb->s_fs_info = NULL;
+	path_put(&backing_dir_path);
+	incfs_free_mount_info(mi);
+	deactivate_locked_super(sb);
+	free_options(&options);
+	return ERR_PTR(error);
+}
+
+static int incfs_remount_fs(struct super_block *sb, int *flags, char *data)
+{
+	struct mount_options options;
+	struct mount_info *mi = get_mount_info(sb);
+	int err = 0;
+
+	sync_filesystem(sb);
+	err = parse_options(&options, (char *)data);
+	if (err)
+		return err;
+
+	if (options.report_uid != mi->mi_options.report_uid) {
+		pr_err("incfs: Can't change report_uid mount option on remount\n");
+		err = -EOPNOTSUPP;
+		goto out;
+	}
+
+	err = incfs_realloc_mount_info(mi, &options);
+	if (err)
+		goto out;
+
+	pr_debug("incfs: remount\n");
+
+out:
+	free_options(&options);
+	return err;
+}
+
+void incfs_kill_sb(struct super_block *sb)
+{
+	struct mount_info *mi = sb->s_fs_info;
+
+	pr_debug("incfs: unmount\n");
+	generic_shutdown_super(sb);
+	incfs_free_mount_info(mi);
+}
+
+static int show_options(struct seq_file *m, struct dentry *root)
+{
+	struct mount_info *mi = get_mount_info(root->d_sb);
+
+	seq_printf(m, ",read_timeout_ms=%u", mi->mi_options.read_timeout_ms);
+	seq_printf(m, ",readahead=%u", mi->mi_options.readahead_pages);
+	if (mi->mi_options.read_log_pages != 0) {
+		seq_printf(m, ",rlog_pages=%u", mi->mi_options.read_log_pages);
+		seq_printf(m, ",rlog_wakeup_cnt=%u",
+			   mi->mi_options.read_log_wakeup_count);
+	}
+	if (mi->mi_options.report_uid)
+		seq_puts(m, ",report_uid");
+
+	if (mi->mi_sysfs_node)
+		seq_printf(m, ",sysfs_name=%s",
+			   kobject_name(&mi->mi_sysfs_node->isn_sysfs_node));
+	return 0;
+}
diff --git a/fs/incfs/vfs.h b/fs/incfs/vfs.h
new file mode 100644
index 0000000..79fdf24
--- /dev/null
+++ b/fs/incfs/vfs.h
@@ -0,0 +1,33 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2018 Google LLC
+ */
+
+#ifndef _INCFS_VFS_H
+#define _INCFS_VFS_H
+
+extern const struct file_operations incfs_file_ops;
+extern const struct inode_operations incfs_file_inode_ops;
+
+void incfs_kill_sb(struct super_block *sb);
+struct dentry *incfs_mount_fs(struct file_system_type *type, int flags,
+			      const char *dev_name, void *data);
+int incfs_link(struct dentry *what, struct dentry *where);
+int incfs_unlink(struct dentry *dentry);
+
+static inline struct mount_info *get_mount_info(struct super_block *sb)
+{
+	struct mount_info *result = sb->s_fs_info;
+
+	WARN_ON(!result);
+	return result;
+}
+
+static inline struct super_block *file_superblock(struct file *f)
+{
+	struct inode *inode = file_inode(f);
+
+	return inode->i_sb;
+}
+
+#endif
diff --git a/fs/inode.c b/fs/inode.c
index c5267a4..3af6e6e 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -12,6 +12,7 @@
 #include <linux/security.h>
 #include <linux/cdev.h>
 #include <linux/memblock.h>
+#include <linux/fscrypt.h>
 #include <linux/fsnotify.h>
 #include <linux/mount.h>
 #include <linux/posix_acl.h>
@@ -1599,25 +1600,31 @@
 }
 EXPORT_SYMBOL(iput);
 
+#ifdef CONFIG_BLOCK
 /**
  *	bmap	- find a block number in a file
- *	@inode: inode of file
- *	@block: block to find
+ *	@inode:  inode owning the block number being requested
+ *	@block: pointer containing the block to find
  *
- *	Returns the block number on the device holding the inode that
- *	is the disk block number for the block of the file requested.
- *	That is, asked for block 4 of inode 1 the function will return the
- *	disk block relative to the disk start that holds that block of the
- *	file.
+ *	Replaces the value in *block with the block number on the device holding
+ *	corresponding to the requested block number in the file.
+ *	That is, asked for block 4 of inode 1 the function will replace the
+ *	4 in *block, with disk block relative to the disk start that holds that
+ *	block of the file.
+ *
+ *	Returns -EINVAL in case of error, 0 otherwise. If mapping falls into a
+ *	hole, returns 0 and *block is also set to 0.
  */
-sector_t bmap(struct inode *inode, sector_t block)
+int bmap(struct inode *inode, sector_t *block)
 {
-	sector_t res = 0;
-	if (inode->i_mapping->a_ops->bmap)
-		res = inode->i_mapping->a_ops->bmap(inode->i_mapping, block);
-	return res;
+	if (!inode->i_mapping->a_ops->bmap)
+		return -EINVAL;
+
+	*block = inode->i_mapping->a_ops->bmap(inode->i_mapping, *block);
+	return 0;
 }
 EXPORT_SYMBOL(bmap);
+#endif
 
 /*
  * With relative atime, only update atime if the previous atime is
@@ -2253,7 +2260,7 @@
 	    !capable(CAP_LINUX_IMMUTABLE))
 		return -EPERM;
 
-	return 0;
+	return fscrypt_prepare_setflags(inode, oldflags, flags);
 }
 EXPORT_SYMBOL(vfs_ioc_setflags_prepare);
 
diff --git a/fs/ioctl.c b/fs/ioctl.c
index 3118da0..63efa7c 100644
--- a/fs/ioctl.c
+++ b/fs/ioctl.c
@@ -175,6 +175,34 @@
 	return 0;
 }
 
+int fiemap_prep(struct inode *inode, struct fiemap_extent_info *fieinfo,
+		u64 start, u64 *len, u32 supported_flags)
+{
+	u64 maxbytes = inode->i_sb->s_maxbytes;
+	u32 incompat_flags;
+
+	if (*len == 0)
+		return -EINVAL;
+
+	if (start > maxbytes)
+		return -EFBIG;
+
+	/*
+	 * Shrink request scope to what the fs can actually handle.
+	 */
+	if (*len > maxbytes || (maxbytes - *len) < start)
+		*len = maxbytes - start;
+
+	supported_flags &= FIEMAP_FLAGS_COMPAT;
+	incompat_flags = fieinfo->fi_flags & ~supported_flags;
+	if (incompat_flags) {
+		fieinfo->fi_flags = incompat_flags;
+		return -EBADR;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(fiemap_prep);
+
 static int ioctl_fiemap(struct file *filp, unsigned long arg)
 {
 	struct fiemap fiemap;
diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c
index 8c98fd9..cdd039a 100644
--- a/fs/iomap/direct-io.c
+++ b/fs/iomap/direct-io.c
@@ -6,6 +6,7 @@
 #include <linux/module.h>
 #include <linux/compiler.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/iomap.h>
 #include <linux/backing-dev.h>
 #include <linux/uio.h>
@@ -178,11 +179,14 @@
 iomap_dio_zero(struct iomap_dio *dio, struct iomap *iomap, loff_t pos,
 		unsigned len)
 {
+	struct inode *inode = file_inode(dio->iocb->ki_filp);
 	struct page *page = ZERO_PAGE(0);
 	int flags = REQ_SYNC | REQ_IDLE;
 	struct bio *bio;
 
 	bio = bio_alloc(GFP_KERNEL, 1);
+	fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+				  GFP_KERNEL);
 	bio_set_dev(bio, iomap->bdev);
 	bio->bi_iter.bi_sector = iomap_sector(iomap, pos);
 	bio->bi_private = dio;
@@ -261,6 +265,8 @@
 		}
 
 		bio = bio_alloc(GFP_KERNEL, nr_pages);
+		fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+					  GFP_KERNEL);
 		bio_set_dev(bio, iomap->bdev);
 		bio->bi_iter.bi_sector = iomap_sector(iomap, pos);
 		bio->bi_write_hint = dio->iocb->ki_hint;
diff --git a/fs/jbd2/journal.c b/fs/jbd2/journal.c
index b7c5819..837edda 100644
--- a/fs/jbd2/journal.c
+++ b/fs/jbd2/journal.c
@@ -794,18 +794,23 @@
 {
 	int err = 0;
 	unsigned long long ret;
+	sector_t block = 0;
 
 	if (journal->j_inode) {
-		ret = bmap(journal->j_inode, blocknr);
-		if (ret)
-			*retp = ret;
-		else {
+		block = blocknr;
+		ret = bmap(journal->j_inode, &block);
+
+		if (ret || !block) {
 			printk(KERN_ALERT "%s: journal block not found "
 					"at offset %lu on %s\n",
 			       __func__, blocknr, journal->j_devname);
 			err = -EIO;
 			jbd2_journal_abort(journal, err);
+
+		} else {
+			*retp = block;
 		}
+
 	} else {
 		*retp = blocknr; /* +journal->j_blk_offset */
 	}
@@ -1232,11 +1237,14 @@
 journal_t *jbd2_journal_init_inode(struct inode *inode)
 {
 	journal_t *journal;
+	sector_t blocknr;
 	char *p;
-	unsigned long long blocknr;
+	int err = 0;
 
-	blocknr = bmap(inode, 0);
-	if (!blocknr) {
+	blocknr = 0;
+	err = bmap(inode, &blocknr);
+
+	if (err || !blocknr) {
 		pr_err("%s: Cannot locate journal superblock\n",
 			__func__);
 		return NULL;
diff --git a/fs/jffs2/security.c b/fs/jffs2/security.c
index c2332e3..e6f42fe4 100644
--- a/fs/jffs2/security.c
+++ b/fs/jffs2/security.c
@@ -50,7 +50,8 @@
 /* ---- XATTR Handler for "security.*" ----------------- */
 static int jffs2_security_getxattr(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_SECURITY,
 				 name, buffer, size);
diff --git a/fs/jffs2/xattr_trusted.c b/fs/jffs2/xattr_trusted.c
index 5d60308..9dccaae 100644
--- a/fs/jffs2/xattr_trusted.c
+++ b/fs/jffs2/xattr_trusted.c
@@ -18,7 +18,8 @@
 
 static int jffs2_trusted_getxattr(const struct xattr_handler *handler,
 				  struct dentry *unused, struct inode *inode,
-				  const char *name, void *buffer, size_t size)
+				  const char *name, void *buffer, size_t size,
+				  int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_TRUSTED,
 				 name, buffer, size);
diff --git a/fs/jffs2/xattr_user.c b/fs/jffs2/xattr_user.c
index 9d027b4..c0983a3 100644
--- a/fs/jffs2/xattr_user.c
+++ b/fs/jffs2/xattr_user.c
@@ -18,7 +18,8 @@
 
 static int jffs2_user_getxattr(const struct xattr_handler *handler,
 			       struct dentry *unused, struct inode *inode,
-			       const char *name, void *buffer, size_t size)
+			       const char *name, void *buffer, size_t size,
+			       int flags)
 {
 	return do_jffs2_getxattr(inode, JFFS2_XPREFIX_USER,
 				 name, buffer, size);
diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c
index db41e78..5c79a35 100644
--- a/fs/jfs/xattr.c
+++ b/fs/jfs/xattr.c
@@ -925,7 +925,7 @@
 
 static int jfs_xattr_get(const struct xattr_handler *handler,
 			 struct dentry *unused, struct inode *inode,
-			 const char *name, void *value, size_t size)
+			 const char *name, void *value, size_t size, int flags)
 {
 	name = xattr_full_name(handler, name);
 	return __jfs_getxattr(inode, name, value, size);
@@ -942,7 +942,8 @@
 
 static int jfs_xattr_get_os2(const struct xattr_handler *handler,
 			     struct dentry *unused, struct inode *inode,
-			     const char *name, void *value, size_t size)
+			     const char *name, void *value, size_t size,
+			     int flags)
 {
 	if (is_known_namespace(name))
 		return -EOPNOTSUPP;
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c
index f3eaa88..22357c6 100644
--- a/fs/kernfs/inode.c
+++ b/fs/kernfs/inode.c
@@ -308,7 +308,8 @@
 
 static int kernfs_vfs_xattr_get(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *suffix, void *value, size_t size)
+				const char *suffix, void *value, size_t size,
+				int flags)
 {
 	const char *name = xattr_full_name(handler, suffix);
 	struct kernfs_node *kn = inode->i_private;
diff --git a/fs/libfs.c b/fs/libfs.c
index 247b58a..d058128 100644
--- a/fs/libfs.c
+++ b/fs/libfs.c
@@ -19,6 +19,8 @@
 #include <linux/buffer_head.h> /* sync_mapping_buffers */
 #include <linux/fs_context.h>
 #include <linux/pseudo_fs.h>
+#include <linux/unicode.h>
+#include <linux/fscrypt.h>
 
 #include <linux/uaccess.h>
 
@@ -1142,11 +1144,6 @@
 	return 0;
 };
 
-/*
- * A single inode exists for all anon_inode files. Contrary to pipes,
- * anon_inode inodes have no associated per-instance data, so we need
- * only allocate one of them.
- */
 struct inode *alloc_anon_inode(struct super_block *s)
 {
 	static const struct address_space_operations anon_aops = {
@@ -1295,3 +1292,156 @@
 	return (inode->i_fop == &empty_dir_operations) &&
 		(inode->i_op == &empty_dir_inode_operations);
 }
+
+#ifdef CONFIG_UNICODE
+/*
+ * Determine if the name of a dentry should be casefolded.
+ *
+ * Return: if names will need casefolding
+ */
+static bool needs_casefold(const struct inode *dir)
+{
+	return IS_CASEFOLDED(dir) && dir->i_sb->s_encoding;
+}
+
+/**
+ * generic_ci_d_compare - generic d_compare implementation for casefolding filesystems
+ * @dentry:	dentry whose name we are checking against
+ * @len:	len of name of dentry
+ * @str:	str pointer to name of dentry
+ * @name:	Name to compare against
+ *
+ * Return: 0 if names match, 1 if mismatch, or -ERRNO
+ */
+static int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
+				const char *str, const struct qstr *name)
+{
+	const struct dentry *parent = READ_ONCE(dentry->d_parent);
+	const struct inode *dir = READ_ONCE(parent->d_inode);
+	const struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	struct qstr qstr = QSTR_INIT(str, len);
+	char strbuf[DNAME_INLINE_LEN];
+	int ret;
+
+	if (!dir || !needs_casefold(dir))
+		goto fallback;
+	/*
+	 * If the dentry name is stored in-line, then it may be concurrently
+	 * modified by a rename.  If this happens, the VFS will eventually retry
+	 * the lookup, so it doesn't matter what ->d_compare() returns.
+	 * However, it's unsafe to call utf8_strncasecmp() with an unstable
+	 * string.  Therefore, we have to copy the name into a temporary buffer.
+	 */
+	if (len <= DNAME_INLINE_LEN - 1) {
+		memcpy(strbuf, str, len);
+		strbuf[len] = 0;
+		qstr.name = strbuf;
+		/* prevent compiler from optimizing out the temporary buffer */
+		barrier();
+	}
+	ret = utf8_strncasecmp(um, name, &qstr);
+	if (ret >= 0)
+		return ret;
+
+	if (sb_has_strict_encoding(sb))
+		return -EINVAL;
+fallback:
+	if (len != name->len)
+		return 1;
+	return !!memcmp(str, name->name, len);
+}
+
+/**
+ * generic_ci_d_hash - generic d_hash implementation for casefolding filesystems
+ * @dentry:	dentry of the parent directory
+ * @str:	qstr of name whose hash we should fill in
+ *
+ * Return: 0 if hash was successful or unchanged, and -EINVAL on error
+ */
+static int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str)
+{
+	const struct inode *dir = READ_ONCE(dentry->d_inode);
+	struct super_block *sb = dentry->d_sb;
+	const struct unicode_map *um = sb->s_encoding;
+	int ret = 0;
+
+	if (!dir || !needs_casefold(dir))
+		return 0;
+
+	ret = utf8_casefold_hash(um, dentry, str);
+	if (ret < 0 && sb_has_strict_encoding(sb))
+		return -EINVAL;
+	return 0;
+}
+
+static const struct dentry_operations generic_ci_dentry_ops = {
+	.d_hash = generic_ci_d_hash,
+	.d_compare = generic_ci_d_compare,
+};
+#endif
+
+#ifdef CONFIG_FS_ENCRYPTION
+static const struct dentry_operations generic_encrypted_dentry_ops = {
+	.d_revalidate = fscrypt_d_revalidate,
+};
+#endif
+
+#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
+static const struct dentry_operations generic_encrypted_ci_dentry_ops = {
+	.d_hash = generic_ci_d_hash,
+	.d_compare = generic_ci_d_compare,
+	.d_revalidate = fscrypt_d_revalidate,
+};
+#endif
+
+/**
+ * generic_set_encrypted_ci_d_ops - helper for setting d_ops for given dentry
+ * @dentry:	dentry to set ops on
+ *
+ * Casefolded directories need d_hash and d_compare set, so that the dentries
+ * contained in them are handled case-insensitively.  Note that these operations
+ * are needed on the parent directory rather than on the dentries in it, and
+ * while the casefolding flag can be toggled on and off on an empty directory,
+ * dentry_operations can't be changed later.  As a result, if the filesystem has
+ * casefolding support enabled at all, we have to give all dentries the
+ * casefolding operations even if their inode doesn't have the casefolding flag
+ * currently (and thus the casefolding ops would be no-ops for now).
+ *
+ * Encryption works differently in that the only dentry operation it needs is
+ * d_revalidate, which it only needs on dentries that have the no-key name flag.
+ * The no-key flag can't be set "later", so we don't have to worry about that.
+ *
+ * Finally, to maximize compatibility with overlayfs (which isn't compatible
+ * with certain dentry operations) and to avoid taking an unnecessary
+ * performance hit, we use custom dentry_operations for each possible
+ * combination rather than always installing all operations.
+ */
+void generic_set_encrypted_ci_d_ops(struct dentry *dentry)
+{
+#ifdef CONFIG_FS_ENCRYPTION
+	bool needs_encrypt_ops = dentry->d_flags & DCACHE_NOKEY_NAME;
+#endif
+#ifdef CONFIG_UNICODE
+	bool needs_ci_ops = dentry->d_sb->s_encoding;
+#endif
+#if defined(CONFIG_FS_ENCRYPTION) && defined(CONFIG_UNICODE)
+	if (needs_encrypt_ops && needs_ci_ops) {
+		d_set_d_op(dentry, &generic_encrypted_ci_dentry_ops);
+		return;
+	}
+#endif
+#ifdef CONFIG_FS_ENCRYPTION
+	if (needs_encrypt_ops) {
+		d_set_d_op(dentry, &generic_encrypted_dentry_ops);
+		return;
+	}
+#endif
+#ifdef CONFIG_UNICODE
+	if (needs_ci_ops) {
+		d_set_d_op(dentry, &generic_ci_dentry_ops);
+		return;
+	}
+#endif
+}
+EXPORT_SYMBOL(generic_set_encrypted_ci_d_ops);
diff --git a/fs/mpage.c b/fs/mpage.c
index ccba3c4..f48de1f 100644
--- a/fs/mpage.c
+++ b/fs/mpage.c
@@ -32,6 +32,14 @@
 #include <linux/cleancache.h>
 #include "internal.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/android_fs.h>
+
+EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_start);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_datawrite_end);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_start);
+EXPORT_TRACEPOINT_SYMBOL(android_fs_dataread_end);
+
 /*
  * I/O completion handler for multipage BIOs.
  *
@@ -49,6 +57,16 @@
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
 
+	if (trace_android_fs_dataread_end_enabled() &&
+	    (bio_data_dir(bio) == READ)) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL)
+			trace_android_fs_dataread_end(first_page->mapping->host,
+						      page_offset(first_page),
+						      bio->bi_iter.bi_size);
+	}
+
 	bio_for_each_segment_all(bv, bio, iter_all) {
 		struct page *page = bv->bv_page;
 		page_endio(page, bio_op(bio),
@@ -60,6 +78,24 @@
 
 static struct bio *mpage_bio_submit(int op, int op_flags, struct bio *bio)
 {
+	if (trace_android_fs_dataread_start_enabled() && (op == REQ_OP_READ)) {
+		struct page *first_page = bio->bi_io_vec[0].bv_page;
+
+		if (first_page != NULL) {
+			char *path, pathbuf[MAX_TRACE_PATHBUF_LEN];
+
+			path = android_fstrace_get_pathname(pathbuf,
+						    MAX_TRACE_PATHBUF_LEN,
+						    first_page->mapping->host);
+			trace_android_fs_dataread_start(
+				first_page->mapping->host,
+				page_offset(first_page),
+				bio->bi_iter.bi_size,
+				current->pid,
+				path,
+				current->comm);
+		}
+	}
 	bio->bi_end_io = mpage_end_io;
 	bio_set_op_attrs(bio, op, op_flags);
 	guard_bio_eod(bio);
diff --git a/fs/namei.c b/fs/namei.c
index 5b5759d..8a57cfd 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -43,6 +43,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
@@ -760,6 +763,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
@@ -782,15 +860,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;
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index fb3d1532..05706ac 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -7370,7 +7370,8 @@
 
 static int nfs4_xattr_get_nfs4_acl(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *key, void *buf, size_t buflen)
+				   const char *key, void *buf, size_t buflen,
+				   int flags)
 {
 	return nfs4_proc_get_acl(inode, buf, buflen);
 }
@@ -7395,7 +7396,8 @@
 
 static int nfs4_xattr_get_nfs4_label(const struct xattr_handler *handler,
 				     struct dentry *unused, struct inode *inode,
-				     const char *key, void *buf, size_t buflen)
+				     const char *key, void *buf, size_t buflen,
+				     int flags)
 {
 	if (security_ismaclabel(key))
 		return nfs4_get_security_label(inode, buf, buflen);
diff --git a/fs/notify/inotify/inotify_user.c b/fs/notify/inotify/inotify_user.c
index 81ffc86..a8c3f31 100644
--- a/fs/notify/inotify/inotify_user.c
+++ b/fs/notify/inotify/inotify_user.c
@@ -701,6 +701,8 @@
 	struct fsnotify_group *group;
 	struct inode *inode;
 	struct path path;
+	struct path alteredpath;
+	struct path *canonical_path = &path;
 	struct fd f;
 	int ret;
 	unsigned flags = 0;
@@ -747,13 +749,23 @@
 	if (ret)
 		goto fput_and_out;
 
+	/* support stacked filesystems */
+	if (path.dentry && path.dentry->d_op) {
+		if (path.dentry->d_op->d_canonical_path) {
+			path.dentry->d_op->d_canonical_path(&path,
+							    &alteredpath);
+			canonical_path = &alteredpath;
+			path_put(&path);
+		}
+	}
+
 	/* inode held in place by reference to path; group by fget on fd */
-	inode = path.dentry->d_inode;
+	inode = canonical_path->dentry->d_inode;
 	group = f.file->private_data;
 
 	/* create/update an inode mark */
 	ret = inotify_update_watch(group, inode, mask);
-	path_put(&path);
+	path_put(canonical_path);
 fput_and_out:
 	fdput(f);
 	return ret;
diff --git a/fs/ocfs2/xattr.c b/fs/ocfs2/xattr.c
index 90c830e3..5258358 100644
--- a/fs/ocfs2/xattr.c
+++ b/fs/ocfs2/xattr.c
@@ -7242,7 +7242,8 @@
  */
 static int ocfs2_xattr_security_get(const struct xattr_handler *handler,
 				    struct dentry *unused, struct inode *inode,
-				    const char *name, void *buffer, size_t size)
+				    const char *name, void *buffer, size_t size,
+				    int flags)
 {
 	return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_SECURITY,
 			       name, buffer, size);
@@ -7314,7 +7315,8 @@
  */
 static int ocfs2_xattr_trusted_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	return ocfs2_xattr_get(inode, OCFS2_XATTR_INDEX_TRUSTED,
 			       name, buffer, size);
@@ -7340,7 +7342,8 @@
  */
 static int ocfs2_xattr_user_get(const struct xattr_handler *handler,
 				struct dentry *unused, struct inode *inode,
-				const char *name, void *buffer, size_t size)
+				const char *name, void *buffer, size_t size,
+				int flags)
 {
 	struct ocfs2_super *osb = OCFS2_SB(inode->i_sb);
 
diff --git a/fs/open.c b/fs/open.c
index dcbd016..d7aab4a 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -743,9 +743,8 @@
 	path_get(&f->f_path);
 	f->f_inode = inode;
 	f->f_mapping = inode->i_mapping;
-
-	/* Ensure that we skip any errors that predate opening of the file */
 	f->f_wb_err = filemap_sample_wb_err(f->f_mapping);
+	f->f_sb_err = file_sample_sb_err(f);
 
 	if (unlikely(f->f_flags & O_PATH)) {
 		f->f_mode = FMODE_PATH | FMODE_OPENED;
@@ -1065,6 +1064,26 @@
 }
 EXPORT_SYMBOL(filp_open);
 
+/* ANDROID: Allow drivers to open only block files from kernel mode */
+struct file *filp_open_block(const char *filename, int flags, umode_t mode)
+{
+	struct file *file;
+
+	file = filp_open(filename, flags, mode);
+	if (IS_ERR(file))
+		goto err_out;
+
+	/* Drivers should only be allowed to open block devices */
+	if (!S_ISBLK(file->f_mapping->host->i_mode)) {
+		filp_close(file, NULL);
+		file = ERR_PTR(-ENOTBLK);
+	}
+
+err_out:
+	return file;
+}
+EXPORT_SYMBOL_GPL(filp_open_block);
+
 struct file *file_open_root(struct dentry *dentry, struct vfsmount *mnt,
 			    const char *filename, int flags, umode_t mode)
 {
diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index bdc285a..ef4180b 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -541,7 +541,8 @@
 				      struct inode *inode,
 				      const char *name,
 				      void *buffer,
-				      size_t size)
+				      size_t size,
+				      int flags)
 {
 	return orangefs_inode_getxattr(inode, name, buffer, size);
 
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 143c52d..8709cb4 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -888,7 +888,7 @@
 		dput(parent);
 		dput(next);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 8c89eae..7a70ace 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -537,7 +537,7 @@
 			      struct ovl_cattr *attr, bool origin)
 {
 	int err;
-	const struct cred *old_cred;
+	const struct cred *old_cred, *hold_cred = NULL;
 	struct cred *override_cred;
 	struct dentry *parent = dentry->d_parent;
 
@@ -564,14 +564,15 @@
 		override_cred->fsgid = inode->i_gid;
 		if (!attr->hardlink) {
 			err = security_dentry_create_files_as(dentry,
-					attr->mode, &dentry->d_name, old_cred,
+					attr->mode, &dentry->d_name,
+					old_cred ? old_cred : current_cred(),
 					override_cred);
 			if (err) {
 				put_cred(override_cred);
 				goto out_revert_creds;
 			}
 		}
-		put_cred(override_creds(override_cred));
+		hold_cred = override_creds(override_cred);
 		put_cred(override_cred);
 
 		if (!ovl_dentry_is_whiteout(dentry))
@@ -580,7 +581,9 @@
 			err = ovl_create_over_whiteout(dentry, inode, attr);
 	}
 out_revert_creds:
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred ?: hold_cred);
+	if (old_cred && hold_cred)
+		put_cred(hold_cred);
 	return err;
 }
 
@@ -656,7 +659,7 @@
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	err = ovl_set_redirect(dentry, false);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -852,7 +855,7 @@
 		err = ovl_remove_upper(dentry, is_dir, &list);
 	else
 		err = ovl_remove_and_whiteout(dentry, &list);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (!err) {
 		if (is_dir)
 			clear_nlink(dentry->d_inode);
@@ -1226,7 +1229,7 @@
 out_unlock:
 	unlock_rename(new_upperdir, old_upperdir);
 out_revert_creds:
-	revert_creds(old_cred);
+	ovl_revert_creds(old->d_sb, old_cred);
 	if (update_nlink)
 		ovl_nlink_end(new);
 out_drop_write:
diff --git a/fs/overlayfs/file.c b/fs/overlayfs/file.c
index 6bf5fb1..f596384 100644
--- a/fs/overlayfs/file.c
+++ b/fs/overlayfs/file.c
@@ -14,6 +14,8 @@
 #include <linux/fs.h>
 #include "overlayfs.h"
 
+#define OVL_IOCB_MASK (IOCB_DSYNC | IOCB_HIPRI | IOCB_NOWAIT | IOCB_SYNC)
+
 static char ovl_whatisit(struct inode *inode, struct inode *realinode)
 {
 	if (realinode != ovl_inode_upper(inode))
@@ -38,7 +40,7 @@
 	old_cred = ovl_override_creds(inode->i_sb);
 	realfile = open_with_fake_path(&file->f_path, flags, realinode,
 				       current_cred());
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	pr_debug("open(%p[%pD2/%c], 0%o) -> (%p, 0%o)\n",
 		 file, file, ovl_whatisit(inode, realinode), file->f_flags,
@@ -181,7 +183,7 @@
 
 	old_cred = ovl_override_creds(inode->i_sb);
 	ret = vfs_llseek(real.file, offset, whence);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	file->f_pos = real.file->f_pos;
 	inode_unlock(inode);
@@ -213,23 +215,6 @@
 	touch_atime(&file->f_path);
 }
 
-static rwf_t ovl_iocb_to_rwf(struct kiocb *iocb)
-{
-	int ifl = iocb->ki_flags;
-	rwf_t flags = 0;
-
-	if (ifl & IOCB_NOWAIT)
-		flags |= RWF_NOWAIT;
-	if (ifl & IOCB_HIPRI)
-		flags |= RWF_HIPRI;
-	if (ifl & IOCB_DSYNC)
-		flags |= RWF_DSYNC;
-	if (ifl & IOCB_SYNC)
-		flags |= RWF_SYNC;
-
-	return flags;
-}
-
 static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)
 {
 	struct file *file = iocb->ki_filp;
@@ -246,8 +231,8 @@
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_iter_read(real.file, iter, &iocb->ki_pos,
-			    ovl_iocb_to_rwf(iocb));
-	revert_creds(old_cred);
+			    iocb_to_rw_flags(iocb->ki_flags, OVL_IOCB_MASK));
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	ovl_file_accessed(file);
 
@@ -281,9 +266,9 @@
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	file_start_write(real.file);
 	ret = vfs_iter_write(real.file, iter, &iocb->ki_pos,
-			     ovl_iocb_to_rwf(iocb));
+			     iocb_to_rw_flags(iocb->ki_flags, OVL_IOCB_MASK));
 	file_end_write(real.file);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode), inode);
@@ -355,7 +340,7 @@
 	if (file_inode(real.file) == ovl_inode_upper(file_inode(file))) {
 		old_cred = ovl_override_creds(file_inode(file)->i_sb);
 		ret = vfs_fsync_range(real.file, start, end, datasync);
-		revert_creds(old_cred);
+		ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 	}
 
 	fdput(real);
@@ -379,7 +364,7 @@
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = call_mmap(vma->vm_file, vma);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	if (ret) {
 		/* Drop reference count from new vm_file value */
@@ -407,7 +392,7 @@
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_fallocate(real.file, mode, offset, len);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode), inode);
@@ -429,7 +414,7 @@
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_fadvise(real.file, offset, len, advice);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	fdput(real);
 
@@ -449,7 +434,7 @@
 
 	old_cred = ovl_override_creds(file_inode(file)->i_sb);
 	ret = vfs_ioctl(real.file, cmd, arg);
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file)->i_sb, old_cred);
 
 	fdput(real);
 
@@ -639,7 +624,7 @@
 						flags);
 		break;
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(file_inode(file_out)->i_sb, old_cred);
 
 	/* Update size */
 	ovl_copyattr(ovl_inode_real(inode_out), inode_out);
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 56b5539..b5dd049 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -61,7 +61,7 @@
 		inode_lock(upperdentry->d_inode);
 		old_cred = ovl_override_creds(dentry->d_sb);
 		err = notify_change(upperdentry, attr, NULL);
-		revert_creds(old_cred);
+		ovl_revert_creds(dentry->d_sb, old_cred);
 		if (!err)
 			ovl_copyattr(upperdentry->d_inode, dentry->d_inode);
 		inode_unlock(upperdentry->d_inode);
@@ -263,7 +263,7 @@
 		stat->nlink = dentry->d_inode->i_nlink;
 
 out:
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -297,7 +297,7 @@
 		mask |= MAY_READ;
 	}
 	err = inode_permission(realinode, mask);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return err;
 }
@@ -314,7 +314,7 @@
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	p = vfs_get_link(ovl_dentry_real(dentry), done);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return p;
 }
 
@@ -359,7 +359,7 @@
 		WARN_ON(flags != XATTR_REPLACE);
 		err = vfs_removexattr(realdentry, name);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	/* copy c/mtime */
 	ovl_copyattr(d_inode(realdentry), inode);
@@ -371,7 +371,7 @@
 }
 
 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
-		  void *value, size_t size)
+		  void *value, size_t size, int flags)
 {
 	ssize_t res;
 	const struct cred *old_cred;
@@ -379,8 +379,9 @@
 		ovl_i_dentry_upper(inode) ?: ovl_dentry_lower(dentry);
 
 	old_cred = ovl_override_creds(dentry->d_sb);
-	res = vfs_getxattr(realdentry, name, value, size);
-	revert_creds(old_cred);
+	res = __vfs_getxattr(realdentry, d_inode(realdentry), name,
+			     value, size, flags);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return res;
 }
 
@@ -405,7 +406,7 @@
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	res = vfs_listxattr(realdentry, list, size);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (res <= 0 || size == 0)
 		return res;
 
@@ -440,7 +441,7 @@
 
 	old_cred = ovl_override_creds(inode->i_sb);
 	acl = get_acl(realinode, type);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return acl;
 }
@@ -478,7 +479,7 @@
 		filemap_write_and_wait(realinode->i_mapping);
 
 	err = realinode->i_op->fiemap(realinode, fieinfo, start, len);
-	revert_creds(old_cred);
+	ovl_revert_creds(inode->i_sb, old_cred);
 
 	return err;
 }
diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index f47c591..4c4de7a 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -106,10 +106,11 @@
 
 static struct ovl_fh *ovl_get_fh(struct dentry *dentry, const char *name)
 {
-	int res, err;
+	ssize_t res;
+	int err;
 	struct ovl_fh *fh = NULL;
 
-	res = vfs_getxattr(dentry, name, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, name, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return NULL;
@@ -123,7 +124,7 @@
 	if (!fh)
 		return ERR_PTR(-ENOMEM);
 
-	res = vfs_getxattr(dentry, name, fh, res);
+	res = ovl_do_vfs_getxattr(dentry, name, fh, res);
 	if (res < 0)
 		goto fail;
 
@@ -141,10 +142,11 @@
 	return NULL;
 
 fail:
-	pr_warn_ratelimited("overlayfs: failed to get origin (%i)\n", res);
+	pr_warn_ratelimited("overlayfs: failed to get origin (%zi)\n", res);
 	goto out;
 invalid:
-	pr_warn_ratelimited("overlayfs: invalid origin (%*phN)\n", res, fh);
+	pr_warn_ratelimited("overlayfs: invalid origin (%*phN)\n",
+			    (int)res, fh);
 	goto out;
 }
 
@@ -1082,7 +1084,7 @@
 			goto out_free_oe;
 	}
 
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (origin_path) {
 		dput(origin_path->dentry);
 		kfree(origin_path);
@@ -1109,7 +1111,7 @@
 	kfree(upperredirect);
 out:
 	kfree(d.redirect);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	return ERR_PTR(err);
 }
 
@@ -1163,7 +1165,7 @@
 			dput(this);
 		}
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 	return positive;
 }
diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
index a8e9da5..de124e4 100644
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
@@ -200,11 +200,20 @@
 	return ((OPEN_FMODE(flags) & FMODE_WRITE) || (flags & O_TRUNC));
 }
 
+static inline ssize_t ovl_do_vfs_getxattr(struct dentry *dentry,
+					  const char *name, void *buf,
+					  size_t size)
+{
+	return __vfs_getxattr(dentry, d_inode(dentry), name, buf, size,
+			      XATTR_NOSECURITY);
+}
+
 /* util.c */
 int ovl_want_write(struct dentry *dentry);
 void ovl_drop_write(struct dentry *dentry);
 struct dentry *ovl_workdir(struct dentry *dentry);
 const struct cred *ovl_override_creds(struct super_block *sb);
+void ovl_revert_creds(struct super_block *sb, const struct cred *oldcred);
 struct super_block *ovl_same_sb(struct super_block *sb);
 int ovl_can_decode_fh(struct super_block *sb);
 struct dentry *ovl_indexdir(struct super_block *sb);
@@ -356,7 +365,7 @@
 int ovl_xattr_set(struct dentry *dentry, struct inode *inode, const char *name,
 		  const void *value, size_t size, int flags);
 int ovl_xattr_get(struct dentry *dentry, struct inode *inode, const char *name,
-		  void *value, size_t size);
+		  void *value, size_t size, int flags);
 ssize_t ovl_listxattr(struct dentry *dentry, char *list, size_t size);
 struct posix_acl *ovl_get_acl(struct inode *inode, int type);
 int ovl_update_time(struct inode *inode, struct timespec64 *ts, int flags);
diff --git a/fs/overlayfs/ovl_entry.h b/fs/overlayfs/ovl_entry.h
index 28348c4..e3b30f5 100644
--- a/fs/overlayfs/ovl_entry.h
+++ b/fs/overlayfs/ovl_entry.h
@@ -17,6 +17,7 @@
 	bool nfs_export;
 	int xino;
 	bool metacopy;
+	bool override_creds;
 };
 
 struct ovl_sb {
diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index 7255e6a5..a32399d 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -286,7 +286,7 @@
 		}
 		inode_unlock(dir->d_inode);
 	}
-	revert_creds(old_cred);
+	ovl_revert_creds(rdd->dentry->d_sb, old_cred);
 
 	return err;
 }
@@ -924,7 +924,7 @@
 
 	old_cred = ovl_override_creds(dentry->d_sb);
 	err = ovl_dir_read_merged(dentry, list, &root);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 	if (err)
 		return err;
 
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index f5cf093..a66453f 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -53,6 +53,11 @@
 MODULE_PARM_DESC(xino_auto,
 		 "Auto enable xino feature");
 
+static bool __read_mostly ovl_override_creds_def = true;
+module_param_named(override_creds, ovl_override_creds_def, bool, 0644);
+MODULE_PARM_DESC(ovl_override_creds_def,
+		 "Use mounter's credentials for accesses");
+
 static void ovl_entry_stack_free(struct ovl_entry *oe)
 {
 	unsigned int i;
@@ -366,6 +371,9 @@
 	if (ofs->config.metacopy != ovl_metacopy_def)
 		seq_printf(m, ",metacopy=%s",
 			   ofs->config.metacopy ? "on" : "off");
+	if (ofs->config.override_creds != ovl_override_creds_def)
+		seq_show_option(m, "override_creds",
+				ofs->config.override_creds ? "on" : "off");
 	return 0;
 }
 
@@ -406,6 +414,8 @@
 	OPT_XINO_AUTO,
 	OPT_METACOPY_ON,
 	OPT_METACOPY_OFF,
+	OPT_OVERRIDE_CREDS_ON,
+	OPT_OVERRIDE_CREDS_OFF,
 	OPT_ERR,
 };
 
@@ -424,6 +434,8 @@
 	{OPT_XINO_AUTO,			"xino=auto"},
 	{OPT_METACOPY_ON,		"metacopy=on"},
 	{OPT_METACOPY_OFF,		"metacopy=off"},
+	{OPT_OVERRIDE_CREDS_ON,		"override_creds=on"},
+	{OPT_OVERRIDE_CREDS_OFF,	"override_creds=off"},
 	{OPT_ERR,			NULL}
 };
 
@@ -482,6 +494,7 @@
 	config->redirect_mode = kstrdup(ovl_redirect_mode_def(), GFP_KERNEL);
 	if (!config->redirect_mode)
 		return -ENOMEM;
+	config->override_creds = ovl_override_creds_def;
 
 	while ((p = ovl_next_opt(&opt)) != NULL) {
 		int token;
@@ -562,6 +575,14 @@
 			config->metacopy = false;
 			break;
 
+		case OPT_OVERRIDE_CREDS_ON:
+			config->override_creds = true;
+			break;
+
+		case OPT_OVERRIDE_CREDS_OFF:
+			config->override_creds = false;
+			break;
+
 		default:
 			pr_err("overlayfs: unrecognized mount option \"%s\" or missing value\n", p);
 			return -EINVAL;
@@ -862,9 +883,9 @@
 static int __maybe_unused
 ovl_posix_acl_xattr_get(const struct xattr_handler *handler,
 			struct dentry *dentry, struct inode *inode,
-			const char *name, void *buffer, size_t size)
+			const char *name, void *buffer, size_t size, int flags)
 {
-	return ovl_xattr_get(dentry, inode, handler->name, buffer, size);
+	return ovl_xattr_get(dentry, inode, handler->name, buffer, size, flags);
 }
 
 static int __maybe_unused
@@ -927,7 +948,8 @@
 
 static int ovl_own_xattr_get(const struct xattr_handler *handler,
 			     struct dentry *dentry, struct inode *inode,
-			     const char *name, void *buffer, size_t size)
+			     const char *name, void *buffer, size_t size,
+			     int flags)
 {
 	return -EOPNOTSUPP;
 }
@@ -942,9 +964,10 @@
 
 static int ovl_other_xattr_get(const struct xattr_handler *handler,
 			       struct dentry *dentry, struct inode *inode,
-			       const char *name, void *buffer, size_t size)
+			       const char *name, void *buffer, size_t size,
+			       int flags)
 {
-	return ovl_xattr_get(dentry, inode, name, buffer, size);
+	return ovl_xattr_get(dentry, inode, name, buffer, size, flags);
 }
 
 static int ovl_other_xattr_set(const struct xattr_handler *handler,
@@ -1733,7 +1756,6 @@
 		       ovl_dentry_lower(root_dentry), NULL);
 
 	sb->s_root = root_dentry;
-
 	return 0;
 
 out_free_oe:
diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index f5678a3..e1fd97fe 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -37,9 +37,17 @@
 {
 	struct ovl_fs *ofs = sb->s_fs_info;
 
+	if (!ofs->config.override_creds)
+		return NULL;
 	return override_creds(ofs->creator_cred);
 }
 
+void ovl_revert_creds(struct super_block *sb, const struct cred *old_cred)
+{
+	if (old_cred)
+		revert_creds(old_cred);
+}
+
 struct super_block *ovl_same_sb(struct super_block *sb)
 {
 	struct ovl_fs *ofs = sb->s_fs_info;
@@ -537,9 +545,9 @@
 
 bool ovl_check_origin_xattr(struct dentry *dentry)
 {
-	int res;
+	ssize_t res;
 
-	res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
 
 	/* Zero size value means "copied up but origin unknown" */
 	if (res >= 0)
@@ -550,13 +558,13 @@
 
 bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
 {
-	int res;
+	ssize_t res;
 	char val;
 
 	if (!d_is_dir(dentry))
 		return false;
 
-	res = vfs_getxattr(dentry, name, &val, 1);
+	res = ovl_do_vfs_getxattr(dentry, name, &val, 1);
 	if (res == 1 && val == 'y')
 		return true;
 
@@ -791,7 +799,7 @@
 	 * value relative to the upper inode nlink in an upper inode xattr.
 	 */
 	err = ovl_set_nlink_upper(dentry);
-	revert_creds(old_cred);
+	ovl_revert_creds(dentry->d_sb, old_cred);
 
 out:
 	if (err)
@@ -809,7 +817,7 @@
 
 		old_cred = ovl_override_creds(dentry->d_sb);
 		ovl_cleanup_index(dentry);
-		revert_creds(old_cred);
+		ovl_revert_creds(dentry->d_sb, old_cred);
 	}
 
 	ovl_inode_unlock(inode);
@@ -837,13 +845,13 @@
 /* err < 0, 0 if no metacopy xattr, 1 if metacopy xattr found */
 int ovl_check_metacopy_xattr(struct dentry *dentry)
 {
-	int res;
+	ssize_t res;
 
 	/* Only regular files can have metacopy xattr */
 	if (!S_ISREG(d_inode(dentry)->i_mode))
 		return 0;
 
-	res = vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return 0;
@@ -852,7 +860,7 @@
 
 	return 1;
 out:
-	pr_warn_ratelimited("overlayfs: failed to get metacopy (%i)\n", res);
+	pr_warn_ratelimited("overlayfs: failed to get metacopy (%zi)\n", res);
 	return res;
 }
 
@@ -878,7 +886,7 @@
 	ssize_t res;
 	char *buf = NULL;
 
-	res = vfs_getxattr(dentry, name, NULL, 0);
+	res = ovl_do_vfs_getxattr(dentry, name, NULL, 0);
 	if (res < 0) {
 		if (res == -ENODATA || res == -EOPNOTSUPP)
 			return -ENODATA;
@@ -890,7 +898,7 @@
 		if (!buf)
 			return -ENOMEM;
 
-		res = vfs_getxattr(dentry, name, buf, res);
+		res = ovl_do_vfs_getxattr(dentry, name, buf, res);
 		if (res < 0)
 			goto fail;
 	}
diff --git a/fs/posix_acl.c b/fs/posix_acl.c
index 84ad1c9..cd55621 100644
--- a/fs/posix_acl.c
+++ b/fs/posix_acl.c
@@ -832,7 +832,7 @@
 static int
 posix_acl_xattr_get(const struct xattr_handler *handler,
 		    struct dentry *unused, struct inode *inode,
-		    const char *name, void *value, size_t size)
+		    const char *name, void *value, size_t size, int flags)
 {
 	struct posix_acl *acl;
 	int error;
diff --git a/fs/proc/Makefile b/fs/proc/Makefile
index ead487e..bd08616 100644
--- a/fs/proc/Makefile
+++ b/fs/proc/Makefile
@@ -33,3 +33,4 @@
 proc-$(CONFIG_PROC_VMCORE)	+= vmcore.o
 proc-$(CONFIG_PRINTK)	+= kmsg.o
 proc-$(CONFIG_PROC_PAGE_MONITOR)	+= page.o
+proc-$(CONFIG_BOOT_CONFIG)	+= bootconfig.o
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 46dcb6f0..be8a186 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -342,6 +342,10 @@
 	seq_put_decimal_ull(m, "NoNewPrivs:\t", task_no_new_privs(p));
 #ifdef CONFIG_SECCOMP
 	seq_put_decimal_ull(m, "\nSeccomp:\t", p->seccomp.mode);
+#ifdef CONFIG_SECCOMP_FILTER
+	seq_put_decimal_ull(m, "\nSeccomp_filters:\t",
+			    atomic_read(&p->seccomp.filter_count));
+#endif
 #endif
 	seq_puts(m, "\nSpeculation_Store_Bypass:\t");
 	switch (arch_prctl_spec_ctrl_get(p, PR_SPEC_STORE_BYPASS)) {
diff --git a/fs/proc/base.c b/fs/proc/base.c
index 5a187e9..da2b22e 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -94,6 +94,7 @@
 #include <linux/sched/debug.h>
 #include <linux/sched/stat.h>
 #include <linux/posix-timers.h>
+#include <linux/cpufreq_times.h>
 #include <trace/events/oom.h>
 #include "internal.h"
 #include "fd.h"
@@ -3021,7 +3022,7 @@
 	DIR("task",       S_IRUGO|S_IXUGO, proc_task_inode_operations, proc_task_operations),
 	DIR("fd",         S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
 	DIR("map_files",  S_IRUSR|S_IXUSR, proc_map_files_inode_operations, proc_map_files_operations),
-	DIR("fdinfo",     S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
+	DIR("fdinfo",     S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
 	DIR("ns",	  S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
 #ifdef CONFIG_NET
 	DIR("net",        S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
@@ -3112,6 +3113,9 @@
 #ifdef CONFIG_LIVEPATCH
 	ONE("patch_state",  S_IRUSR, proc_pid_patch_state),
 #endif
+#ifdef CONFIG_CPU_FREQ_TIMES
+	ONE("time_in_state", 0444, proc_time_in_state_show),
+#endif
 #ifdef CONFIG_STACKLEAK_METRICS
 	ONE("stack_depth", S_IRUGO, proc_stack_depth),
 #endif
@@ -3420,7 +3424,7 @@
  */
 static const struct pid_entry tid_base_stuff[] = {
 	DIR("fd",        S_IRUSR|S_IXUSR, proc_fd_inode_operations, proc_fd_operations),
-	DIR("fdinfo",    S_IRUSR|S_IXUSR, proc_fdinfo_inode_operations, proc_fdinfo_operations),
+	DIR("fdinfo",    S_IRUGO|S_IXUGO, proc_fdinfo_inode_operations, proc_fdinfo_operations),
 	DIR("ns",	 S_IRUSR|S_IXUGO, proc_ns_dir_inode_operations, proc_ns_dir_operations),
 #ifdef CONFIG_NET
 	DIR("net",        S_IRUGO|S_IXUGO, proc_net_inode_operations, proc_net_operations),
@@ -3508,6 +3512,9 @@
 #ifdef CONFIG_PROC_PID_ARCH_STATUS
 	ONE("arch_status", S_IRUGO, proc_pid_arch_status),
 #endif
+#ifdef CONFIG_CPU_FREQ_TIMES
+	ONE("time_in_state", 0444, proc_time_in_state_show),
+#endif
 };
 
 static int proc_tid_base_readdir(struct file *file, struct dir_context *ctx)
diff --git a/fs/proc/bootconfig.c b/fs/proc/bootconfig.c
new file mode 100644
index 0000000..6d8d4bf
--- /dev/null
+++ b/fs/proc/bootconfig.c
@@ -0,0 +1,94 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * /proc/bootconfig - Extra boot configuration
+ */
+#include <linux/fs.h>
+#include <linux/init.h>
+#include <linux/printk.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <linux/bootconfig.h>
+#include <linux/slab.h>
+
+static char *saved_boot_config;
+
+static int boot_config_proc_show(struct seq_file *m, void *v)
+{
+	if (saved_boot_config)
+		seq_puts(m, saved_boot_config);
+	return 0;
+}
+
+/* Rest size of buffer */
+#define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
+
+/* Return the needed total length if @size is 0 */
+static int __init copy_xbc_key_value_list(char *dst, size_t size)
+{
+	struct xbc_node *leaf, *vnode;
+	char *key, *end = dst + size;
+	const char *val;
+	char q;
+	int ret = 0;
+
+	key = kzalloc(XBC_KEYLEN_MAX, GFP_KERNEL);
+
+	xbc_for_each_key_value(leaf, val) {
+		ret = xbc_node_compose_key(leaf, key, XBC_KEYLEN_MAX);
+		if (ret < 0)
+			break;
+		ret = snprintf(dst, rest(dst, end), "%s = ", key);
+		if (ret < 0)
+			break;
+		dst += ret;
+		vnode = xbc_node_get_child(leaf);
+		if (vnode) {
+			xbc_array_for_each_value(vnode, val) {
+				if (strchr(val, '"'))
+					q = '\'';
+				else
+					q = '"';
+				ret = snprintf(dst, rest(dst, end), "%c%s%c%s",
+					q, val, q, xbc_node_is_array(vnode) ? ", " : "\n");
+				if (ret < 0)
+					goto out;
+				dst += ret;
+			}
+		} else {
+			ret = snprintf(dst, rest(dst, end), "\"\"\n");
+			if (ret < 0)
+				break;
+			dst += ret;
+		}
+	}
+out:
+	kfree(key);
+
+	return ret < 0 ? ret : dst - (end - size);
+}
+
+static int __init proc_boot_config_init(void)
+{
+	int len;
+
+	len = copy_xbc_key_value_list(NULL, 0);
+	if (len < 0)
+		return len;
+
+	if (len > 0) {
+		saved_boot_config = kzalloc(len + 1, GFP_KERNEL);
+		if (!saved_boot_config)
+			return -ENOMEM;
+
+		len = copy_xbc_key_value_list(saved_boot_config, len + 1);
+		if (len < 0) {
+			kfree(saved_boot_config);
+			return len;
+		}
+	}
+
+	proc_create_single("bootconfig", 0, NULL, boot_config_proc_show);
+
+	return 0;
+}
+fs_initcall(proc_boot_config_init);
diff --git a/fs/proc/fd.c b/fs/proc/fd.c
index 81882a1..6b634c0 100644
--- a/fs/proc/fd.c
+++ b/fs/proc/fd.c
@@ -6,6 +6,7 @@
 #include <linux/fdtable.h>
 #include <linux/namei.h>
 #include <linux/pid.h>
+#include <linux/ptrace.h>
 #include <linux/security.h>
 #include <linux/file.h>
 #include <linux/seq_file.h>
@@ -53,9 +54,10 @@
 	if (ret)
 		return ret;
 
-	seq_printf(m, "pos:\t%lli\nflags:\t0%o\nmnt_id:\t%i\n",
+	seq_printf(m, "pos:\t%lli\nflags:\t0%o\nmnt_id:\t%i\nino:\t%lu\n",
 		   (long long)file->f_pos, f_flags,
-		   real_mount(file->f_path.mnt)->mnt_id);
+		   real_mount(file->f_path.mnt)->mnt_id,
+		   file_inode(file)->i_ino);
 
 	show_fd_locks(m, file, files);
 	if (seq_has_overflowed(m))
@@ -69,8 +71,30 @@
 	return 0;
 }
 
+static int proc_fdinfo_access_allowed(struct inode *inode)
+{
+	bool allowed = false;
+	struct task_struct *task = get_proc_task(inode);
+
+	if (!task)
+		return -ESRCH;
+
+	allowed = ptrace_may_access(task, PTRACE_MODE_READ_FSCREDS);
+	put_task_struct(task);
+
+	if (!allowed)
+		return -EACCES;
+
+	return 0;
+}
+
 static int seq_fdinfo_open(struct inode *inode, struct file *file)
 {
+	int ret = proc_fdinfo_access_allowed(inode);
+
+	if (ret)
+		return ret;
+
 	return single_open(file, seq_show, inode);
 }
 
@@ -325,7 +349,7 @@
 	struct proc_inode *ei;
 	struct inode *inode;
 
-	inode = proc_pid_make_inode(dentry->d_sb, task, S_IFREG | S_IRUSR);
+	inode = proc_pid_make_inode(dentry->d_sb, task, S_IFREG | S_IRUGO);
 	if (!inode)
 		return ERR_PTR(-ENOENT);
 
@@ -351,12 +375,23 @@
 				  proc_fdinfo_instantiate);
 }
 
+static int proc_open_fdinfo(struct inode *inode, struct file *file)
+{
+	int ret = proc_fdinfo_access_allowed(inode);
+
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
 const struct inode_operations proc_fdinfo_inode_operations = {
 	.lookup		= proc_lookupfdinfo,
 	.setattr	= proc_setattr,
 };
 
 const struct file_operations proc_fdinfo_operations = {
+	.open		= proc_open_fdinfo,
 	.read		= generic_read_dir,
 	.iterate_shared	= proc_readfdinfo,
 	.llseek		= generic_file_llseek,
diff --git a/fs/proc/meminfo.c b/fs/proc/meminfo.c
index 8c1f1bb..4976800 100644
--- a/fs/proc/meminfo.c
+++ b/fs/proc/meminfo.c
@@ -103,6 +103,10 @@
 	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));
 
diff --git a/fs/proc/root.c b/fs/proc/root.c
index 0b7c8df..44f78d3 100644
--- a/fs/proc/root.c
+++ b/fs/proc/root.c
@@ -82,8 +82,7 @@
 	return 0;
 }
 
-static void proc_apply_options(struct super_block *s,
-			       struct fs_context *fc,
+static void proc_apply_options(struct fs_context *fc,
 			       struct pid_namespace *pid_ns,
 			       struct user_namespace *user_ns)
 {
@@ -101,7 +100,7 @@
 	struct inode *root_inode;
 	int ret;
 
-	proc_apply_options(s, fc, pid_ns, current_user_ns());
+	proc_apply_options(fc, pid_ns, current_user_ns());
 
 	/* User space would break if executables or devices appear on proc */
 	s->s_iflags |= SB_I_USERNS_VISIBLE | SB_I_NOEXEC | SB_I_NODEV;
@@ -149,7 +148,7 @@
 
 	sync_filesystem(sb);
 
-	proc_apply_options(sb, fc, pid, current_user_ns());
+	proc_apply_options(fc, pid, current_user_ns());
 	return 0;
 }
 
@@ -157,6 +156,7 @@
 {
 	struct proc_fs_context *ctx = fc->fs_private;
 
+	proc_apply_options(fc, ctx->pid_ns, current_user_ns());
 	return get_tree_keyed(fc, proc_fill_super, ctx->pid_ns);
 }
 
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index f51dadd1..6074ed2 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -123,6 +123,56 @@
 }
 #endif
 
+static void seq_print_vma_name(struct seq_file *m, struct vm_area_struct *vma)
+{
+	const char __user *name = vma_get_anon_name(vma);
+	struct mm_struct *mm = vma->vm_mm;
+
+	unsigned long page_start_vaddr;
+	unsigned long page_offset;
+	unsigned long num_pages;
+	unsigned long max_len = NAME_MAX;
+	int i;
+
+	page_start_vaddr = (unsigned long)name & PAGE_MASK;
+	page_offset = (unsigned long)name - page_start_vaddr;
+	num_pages = DIV_ROUND_UP(page_offset + max_len, PAGE_SIZE);
+
+	seq_puts(m, "[anon:");
+
+	for (i = 0; i < num_pages; i++) {
+		int len;
+		int write_len;
+		const char *kaddr;
+		long pages_pinned;
+		struct page *page;
+
+		pages_pinned = get_user_pages_remote(current, mm,
+				page_start_vaddr, 1, 0, &page, NULL, NULL);
+		if (pages_pinned < 1) {
+			seq_puts(m, "<fault>]");
+			return;
+		}
+
+		kaddr = (const char *)kmap(page);
+		len = min(max_len, PAGE_SIZE - page_offset);
+		write_len = strnlen(kaddr + page_offset, len);
+		seq_write(m, kaddr + page_offset, write_len);
+		kunmap(page);
+		put_page(page);
+
+		/* if strnlen hit a null terminator then we're done */
+		if (write_len != len)
+			break;
+
+		max_len -= len;
+		page_offset = 0;
+		page_start_vaddr += PAGE_SIZE;
+	}
+
+	seq_putc(m, ']');
+}
+
 static void vma_stop(struct proc_maps_private *priv)
 {
 	struct mm_struct *mm = priv->mm;
@@ -348,8 +398,15 @@
 			goto done;
 		}
 
-		if (is_stack(vma))
+		if (is_stack(vma)) {
 			name = "[stack]";
+			goto done;
+		}
+
+		if (vma_get_anon_name(vma)) {
+			seq_pad(m, ' ');
+			seq_print_vma_name(m, vma);
+		}
 	}
 
 done:
@@ -687,6 +744,9 @@
 		[ilog2(VM_PKEY_BIT4)]	= "",
 #endif
 #endif /* CONFIG_ARCH_HAS_PKEYS */
+#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
+		[ilog2(VM_UFFD_MINOR)]	= "ui",
+#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */
 	};
 	size_t i;
 
@@ -832,6 +892,11 @@
 	smap_gather_stats(vma, &mss);
 
 	show_map_vma(m, vma);
+	if (vma_get_anon_name(vma)) {
+		seq_puts(m, "Name:           ");
+		seq_print_vma_name(m, vma);
+		seq_putc(m, '\n');
+	}
 
 	SEQ_PUT_DEC("Size:           ", vma->vm_end - vma->vm_start);
 	SEQ_PUT_DEC(" kB\nKernelPageSize: ", vma_kernel_pagesize(vma));
diff --git a/fs/pstore/Kconfig b/fs/pstore/Kconfig
index 8f0369a..e16a49e 100644
--- a/fs/pstore/Kconfig
+++ b/fs/pstore/Kconfig
@@ -153,3 +153,112 @@
 	  "ramoops.ko".
 
 	  For more information, see Documentation/admin-guide/ramoops.rst.
+
+config PSTORE_ZONE
+	tristate
+	depends on PSTORE
+	help
+	  The common layer for pstore/blk (and pstore/ram in the future)
+	  to manage storage in zones.
+
+config PSTORE_BLK
+	tristate "Log panic/oops to a block device"
+	depends on PSTORE
+	depends on BLOCK
+	select PSTORE_ZONE
+	default n
+	help
+	  This enables panic and oops message to be logged to a block dev
+	  where it can be read back at some later point.
+
+	  For more information, see Documentation/admin-guide/pstore-blk.rst
+
+	  If unsure, say N.
+
+config PSTORE_BLK_BLKDEV
+	string "block device identifier"
+	depends on PSTORE_BLK
+	default ""
+	help
+	  Which block device should be used for pstore/blk.
+
+	  It accepts the following variants:
+	  1) <hex_major><hex_minor> device number in hexadecimal representation,
+	     with no leading 0x, for example b302.
+	  2) /dev/<disk_name> represents the device name of disk
+	  3) /dev/<disk_name><decimal> represents the device name and number
+	     of partition - device number of disk plus the partition number
+	  4) /dev/<disk_name>p<decimal> - same as the above, this form is
+	     used when disk name of partitioned disk ends with a digit.
+	  5) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
+	     unique id of a partition if the partition table provides it.
+	     The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
+	     partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
+	     filled hex representation of the 32-bit "NT disk signature", and PP
+	     is a zero-filled hex representation of the 1-based partition number.
+	  6) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation
+	     to a partition with a known unique id.
+	  7) <major>:<minor> major and minor number of the device separated by
+	     a colon.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
+
+config PSTORE_BLK_KMSG_SIZE
+	int "Size in Kbytes of kmsg dump log to store"
+	depends on PSTORE_BLK
+	default 64
+	help
+	  This just sets size of kmsg dump (oops, panic, etc) log for
+	  pstore/blk. The size is in KB and must be a multiple of 4.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
+
+config PSTORE_BLK_MAX_REASON
+	int "Maximum kmsg dump reason to store"
+	depends on PSTORE_BLK
+	default 2
+	help
+	  The maximum reason for kmsg dumps to store. The default is
+	  2 (KMSG_DUMP_OOPS), see include/linux/kmsg_dump.h's
+	  enum kmsg_dump_reason for more details.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
+
+config PSTORE_BLK_PMSG_SIZE
+	int "Size in Kbytes of pmsg to store"
+	depends on PSTORE_BLK
+	depends on PSTORE_PMSG
+	default 64
+	help
+	  This just sets size of pmsg (pmsg_size) for pstore/blk. The size is
+	  in KB and must be a multiple of 4.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
+
+config PSTORE_BLK_CONSOLE_SIZE
+	int "Size in Kbytes of console log to store"
+	depends on PSTORE_BLK
+	depends on PSTORE_CONSOLE
+	default 64
+	help
+	  This just sets size of console log (console_size) to store via
+	  pstore/blk. The size is in KB and must be a multiple of 4.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
+
+config PSTORE_BLK_FTRACE_SIZE
+	int "Size in Kbytes of ftrace log to store"
+	depends on PSTORE_BLK
+	depends on PSTORE_FTRACE
+	default 64
+	help
+	  This just sets size of ftrace log (ftrace_size) for pstore/blk. The
+	  size is in KB and must be a multiple of 4.
+
+	  NOTE that, both Kconfig and module parameters can configure
+	  pstore/blk, but module parameters have priority over Kconfig.
diff --git a/fs/pstore/Makefile b/fs/pstore/Makefile
index 967b589..c270467 100644
--- a/fs/pstore/Makefile
+++ b/fs/pstore/Makefile
@@ -12,3 +12,9 @@
 
 ramoops-objs += ram.o ram_core.o
 obj-$(CONFIG_PSTORE_RAM)	+= ramoops.o
+
+pstore_zone-objs += zone.o
+obj-$(CONFIG_PSTORE_ZONE)	+= pstore_zone.o
+
+pstore_blk-objs += blk.o
+obj-$(CONFIG_PSTORE_BLK)	+= pstore_blk.o
diff --git a/fs/pstore/blk.c b/fs/pstore/blk.c
new file mode 100644
index 0000000..fcd5563
--- /dev/null
+++ b/fs/pstore/blk.c
@@ -0,0 +1,517 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Implements pstore backend driver that write to block (or non-block) storage
+ * devices, using the pstore/zone API.
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include "../../block/blk.h"
+#include <linux/blkdev.h>
+#include <linux/string.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/pstore_blk.h>
+#include <linux/mount.h>
+#include <linux/uio.h>
+
+static long kmsg_size = CONFIG_PSTORE_BLK_KMSG_SIZE;
+module_param(kmsg_size, long, 0400);
+MODULE_PARM_DESC(kmsg_size, "kmsg dump record size in kbytes");
+
+static int max_reason = CONFIG_PSTORE_BLK_MAX_REASON;
+module_param(max_reason, int, 0400);
+MODULE_PARM_DESC(max_reason,
+		 "maximum reason for kmsg dump (default 2: Oops and Panic)");
+
+#if IS_ENABLED(CONFIG_PSTORE_PMSG)
+static long pmsg_size = CONFIG_PSTORE_BLK_PMSG_SIZE;
+#else
+static long pmsg_size = -1;
+#endif
+module_param(pmsg_size, long, 0400);
+MODULE_PARM_DESC(pmsg_size, "pmsg size in kbytes");
+
+#if IS_ENABLED(CONFIG_PSTORE_CONSOLE)
+static long console_size = CONFIG_PSTORE_BLK_CONSOLE_SIZE;
+#else
+static long console_size = -1;
+#endif
+module_param(console_size, long, 0400);
+MODULE_PARM_DESC(console_size, "console size in kbytes");
+
+#if IS_ENABLED(CONFIG_PSTORE_FTRACE)
+static long ftrace_size = CONFIG_PSTORE_BLK_FTRACE_SIZE;
+#else
+static long ftrace_size = -1;
+#endif
+module_param(ftrace_size, long, 0400);
+MODULE_PARM_DESC(ftrace_size, "ftrace size in kbytes");
+
+static bool best_effort;
+module_param(best_effort, bool, 0400);
+MODULE_PARM_DESC(best_effort, "use best effort to write (i.e. do not require storage driver pstore support, default: off)");
+
+/*
+ * blkdev - the block device to use for pstore storage
+ *
+ * Usually, this will be a partition of a block device.
+ *
+ * blkdev accepts the following variants:
+ * 1) <hex_major><hex_minor> device number in hexadecimal representation,
+ *    with no leading 0x, for example b302.
+ * 2) /dev/<disk_name> represents the device number of disk
+ * 3) /dev/<disk_name><decimal> represents the device number
+ *    of partition - device number of disk plus the partition number
+ * 4) /dev/<disk_name>p<decimal> - same as the above, that form is
+ *    used when disk name of partitioned disk ends on a digit.
+ * 5) PARTUUID=00112233-4455-6677-8899-AABBCCDDEEFF representing the
+ *    unique id of a partition if the partition table provides it.
+ *    The UUID may be either an EFI/GPT UUID, or refer to an MSDOS
+ *    partition using the format SSSSSSSS-PP, where SSSSSSSS is a zero-
+ *    filled hex representation of the 32-bit "NT disk signature", and PP
+ *    is a zero-filled hex representation of the 1-based partition number.
+ * 6) PARTUUID=<UUID>/PARTNROFF=<int> to select a partition in relation to
+ *    a partition with a known unique id.
+ * 7) <major>:<minor> major and minor number of the device separated by
+ *    a colon.
+ */
+static char blkdev[80] = CONFIG_PSTORE_BLK_BLKDEV;
+module_param_string(blkdev, blkdev, 80, 0400);
+MODULE_PARM_DESC(blkdev, "block device for pstore storage");
+
+/*
+ * All globals must only be accessed under the pstore_blk_lock
+ * during the register/unregister functions.
+ */
+static DEFINE_MUTEX(pstore_blk_lock);
+static struct block_device *psblk_bdev;
+static struct pstore_zone_info *pstore_zone_info;
+static pstore_blk_panic_write_op blkdev_panic_write;
+
+struct bdev_info {
+	dev_t devt;
+	sector_t nr_sects;
+	sector_t start_sect;
+};
+
+#define check_size(name, alignsize) ({				\
+	long _##name_ = (name);					\
+	_##name_ = _##name_ <= 0 ? 0 : (_##name_ * 1024);	\
+	if (_##name_ & ((alignsize) - 1)) {			\
+		pr_info(#name " must align to %d\n",		\
+				(alignsize));			\
+		_##name_ = ALIGN(name, (alignsize));		\
+	}							\
+	_##name_;						\
+})
+
+static int __register_pstore_device(struct pstore_device_info *dev)
+{
+	int ret;
+
+	lockdep_assert_held(&pstore_blk_lock);
+
+	if (!dev || !dev->total_size || !dev->read || !dev->write)
+		return -EINVAL;
+
+	/* someone already registered before */
+	if (pstore_zone_info)
+		return -EBUSY;
+
+	pstore_zone_info = kzalloc(sizeof(struct pstore_zone_info), GFP_KERNEL);
+	if (!pstore_zone_info)
+		return -ENOMEM;
+
+	/* zero means not limit on which backends to attempt to store. */
+	if (!dev->flags)
+		dev->flags = UINT_MAX;
+
+#define verify_size(name, alignsize, enabled) {				\
+		long _##name_;						\
+		if (enabled)						\
+			_##name_ = check_size(name, alignsize);		\
+		else							\
+			_##name_ = 0;					\
+		name = _##name_ / 1024;					\
+		pstore_zone_info->name = _##name_;			\
+	}
+
+	verify_size(kmsg_size, 4096, dev->flags & PSTORE_FLAGS_DMESG);
+	verify_size(pmsg_size, 4096, dev->flags & PSTORE_FLAGS_PMSG);
+	verify_size(console_size, 4096, dev->flags & PSTORE_FLAGS_CONSOLE);
+	verify_size(ftrace_size, 4096, dev->flags & PSTORE_FLAGS_FTRACE);
+#undef verify_size
+
+	pstore_zone_info->total_size = dev->total_size;
+	pstore_zone_info->max_reason = max_reason;
+	pstore_zone_info->read = dev->read;
+	pstore_zone_info->write = dev->write;
+	pstore_zone_info->erase = dev->erase;
+	pstore_zone_info->panic_write = dev->panic_write;
+	pstore_zone_info->name = KBUILD_MODNAME;
+	pstore_zone_info->owner = THIS_MODULE;
+
+	ret = register_pstore_zone(pstore_zone_info);
+	if (ret) {
+		kfree(pstore_zone_info);
+		pstore_zone_info = NULL;
+	}
+	return ret;
+}
+/**
+ * register_pstore_device() - register non-block device to pstore/blk
+ *
+ * @dev: non-block device information
+ *
+ * Return:
+ * * 0		- OK
+ * * Others	- something error.
+ */
+int register_pstore_device(struct pstore_device_info *dev)
+{
+	int ret;
+
+	mutex_lock(&pstore_blk_lock);
+	ret = __register_pstore_device(dev);
+	mutex_unlock(&pstore_blk_lock);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(register_pstore_device);
+
+static void __unregister_pstore_device(struct pstore_device_info *dev)
+{
+	lockdep_assert_held(&pstore_blk_lock);
+	if (pstore_zone_info && pstore_zone_info->read == dev->read) {
+		unregister_pstore_zone(pstore_zone_info);
+		kfree(pstore_zone_info);
+		pstore_zone_info = NULL;
+	}
+}
+
+/**
+ * unregister_pstore_device() - unregister non-block device from pstore/blk
+ *
+ * @dev: non-block device information
+ */
+void unregister_pstore_device(struct pstore_device_info *dev)
+{
+	mutex_lock(&pstore_blk_lock);
+	__unregister_pstore_device(dev);
+	mutex_unlock(&pstore_blk_lock);
+}
+EXPORT_SYMBOL_GPL(unregister_pstore_device);
+
+/**
+ * psblk_get_bdev() - open block device
+ *
+ * @holder:	Exclusive holder identifier
+ * @info:	Information about bdev to fill in
+ *
+ * Return: pointer to block device on success and others on error.
+ *
+ * On success, the returned block_device has reference count of one.
+ */
+static struct block_device *psblk_get_bdev(void *holder,
+					   struct bdev_info *info)
+{
+	struct block_device *bdev = ERR_PTR(-ENODEV);
+	fmode_t mode = FMODE_READ | FMODE_WRITE;
+	sector_t nr_sects;
+
+	lockdep_assert_held(&pstore_blk_lock);
+
+	if (pstore_zone_info)
+		return ERR_PTR(-EBUSY);
+
+	if (!blkdev[0])
+		return ERR_PTR(-ENODEV);
+
+	if (holder)
+		mode |= FMODE_EXCL;
+	bdev = blkdev_get_by_path(blkdev, mode, holder);
+	if (IS_ERR(bdev)) {
+		dev_t devt;
+
+		devt = name_to_dev_t(blkdev);
+		if (devt == 0)
+			return ERR_PTR(-ENODEV);
+		bdev = blkdev_get_by_dev(devt, mode, holder);
+		if (IS_ERR(bdev))
+			return bdev;
+	}
+
+	nr_sects = part_nr_sects_read(bdev->bd_part);
+	if (!nr_sects) {
+		pr_err("not enough space for '%s'\n", blkdev);
+		blkdev_put(bdev, mode);
+		return ERR_PTR(-ENOSPC);
+	}
+
+	if (info) {
+		info->devt = bdev->bd_dev;
+		info->nr_sects = nr_sects;
+		info->start_sect = get_start_sect(bdev);
+	}
+
+	return bdev;
+}
+
+static void psblk_put_bdev(struct block_device *bdev, void *holder)
+{
+	fmode_t mode = FMODE_READ | FMODE_WRITE;
+
+	lockdep_assert_held(&pstore_blk_lock);
+
+	if (!bdev)
+		return;
+
+	if (holder)
+		mode |= FMODE_EXCL;
+	blkdev_put(bdev, mode);
+}
+
+static ssize_t psblk_generic_blk_read(char *buf, size_t bytes, loff_t pos)
+{
+	struct block_device *bdev = psblk_bdev;
+	struct file file;
+	struct kiocb kiocb;
+	struct iov_iter iter;
+	struct kvec iov = {.iov_base = buf, .iov_len = bytes};
+
+	if (!bdev)
+		return -ENODEV;
+
+	memset(&file, 0, sizeof(struct file));
+	file.f_mapping = bdev->bd_inode->i_mapping;
+	file.f_flags = O_DSYNC | __O_SYNC | O_NOATIME;
+	file.f_inode = bdev->bd_inode;
+	file_ra_state_init(&file.f_ra, file.f_mapping);
+
+	init_sync_kiocb(&kiocb, &file);
+	kiocb.ki_pos = pos;
+	iov_iter_kvec(&iter, READ, &iov, 1, bytes);
+
+	return generic_file_read_iter(&kiocb, &iter);
+}
+
+static ssize_t psblk_generic_blk_write(const char *buf, size_t bytes,
+		loff_t pos)
+{
+	struct block_device *bdev = psblk_bdev;
+	struct iov_iter iter;
+	struct kiocb kiocb;
+	struct file file;
+	ssize_t ret;
+	struct kvec iov = {.iov_base = (void *)buf, .iov_len = bytes};
+
+	if (!bdev)
+		return -ENODEV;
+
+	/* Console/Ftrace backend may handle buffer until flush dirty zones */
+	if (in_interrupt() || irqs_disabled())
+		return -EBUSY;
+
+	memset(&file, 0, sizeof(struct file));
+	file.f_mapping = bdev->bd_inode->i_mapping;
+	file.f_flags = O_DSYNC | __O_SYNC | O_NOATIME;
+	file.f_inode = bdev->bd_inode;
+
+	init_sync_kiocb(&kiocb, &file);
+	kiocb.ki_pos = pos;
+	iov_iter_kvec(&iter, WRITE, &iov, 1, bytes);
+
+	inode_lock(bdev->bd_inode);
+	ret = generic_write_checks(&kiocb, &iter);
+	if (ret > 0)
+		ret = generic_perform_write(&file, &iter, pos);
+	inode_unlock(bdev->bd_inode);
+
+	if (likely(ret > 0)) {
+		const struct file_operations f_op = {.fsync = blkdev_fsync};
+
+		file.f_op = &f_op;
+		kiocb.ki_pos += ret;
+		ret = generic_write_sync(&kiocb, ret);
+	}
+	return ret;
+}
+
+static ssize_t psblk_blk_panic_write(const char *buf, size_t size,
+		loff_t off)
+{
+	int ret;
+
+	if (!blkdev_panic_write)
+		return -EOPNOTSUPP;
+
+	/* size and off must align to SECTOR_SIZE for block device */
+	ret = blkdev_panic_write(buf, off >> SECTOR_SHIFT,
+			size >> SECTOR_SHIFT);
+	/* try next zone */
+	if (ret == -ENOMSG)
+		return ret;
+	return ret ? -EIO : size;
+}
+
+static int __register_pstore_blk(struct pstore_blk_info *info)
+{
+	char bdev_name[BDEVNAME_SIZE];
+	struct block_device *bdev;
+	struct pstore_device_info dev;
+	struct bdev_info binfo;
+	void *holder = blkdev;
+	int ret = -ENODEV;
+
+	lockdep_assert_held(&pstore_blk_lock);
+
+	/* hold bdev exclusively */
+	memset(&binfo, 0, sizeof(binfo));
+	bdev = psblk_get_bdev(holder, &binfo);
+	if (IS_ERR(bdev)) {
+		pr_err("failed to open '%s'!\n", blkdev);
+		return PTR_ERR(bdev);
+	}
+
+	/* only allow driver matching the @blkdev */
+	if (!binfo.devt || (!best_effort &&
+			    MAJOR(binfo.devt) != info->major)) {
+		pr_debug("invalid major %u (expect %u)\n",
+				info->major, MAJOR(binfo.devt));
+		ret = -ENODEV;
+		goto err_put_bdev;
+	}
+
+	/* psblk_bdev must be assigned before register to pstore/blk */
+	psblk_bdev = bdev;
+	blkdev_panic_write = info->panic_write;
+
+	/* Copy back block device details. */
+	info->devt = binfo.devt;
+	info->nr_sects = binfo.nr_sects;
+	info->start_sect = binfo.start_sect;
+
+	memset(&dev, 0, sizeof(dev));
+	dev.total_size = info->nr_sects << SECTOR_SHIFT;
+	dev.flags = info->flags;
+	dev.read = psblk_generic_blk_read;
+	dev.write = psblk_generic_blk_write;
+	dev.erase = NULL;
+	dev.panic_write = info->panic_write ? psblk_blk_panic_write : NULL;
+
+	ret = __register_pstore_device(&dev);
+	if (ret)
+		goto err_put_bdev;
+
+	bdevname(bdev, bdev_name);
+	pr_info("attached %s%s\n", bdev_name,
+		info->panic_write ? "" : " (no dedicated panic_write!)");
+	return 0;
+
+err_put_bdev:
+	psblk_bdev = NULL;
+	blkdev_panic_write = NULL;
+	psblk_put_bdev(bdev, holder);
+	return ret;
+}
+
+/**
+ * register_pstore_blk() - register block device to pstore/blk
+ *
+ * @info: details on the desired block device interface
+ *
+ * Return:
+ * * 0		- OK
+ * * Others	- something error.
+ */
+int register_pstore_blk(struct pstore_blk_info *info)
+{
+	int ret;
+
+	mutex_lock(&pstore_blk_lock);
+	ret = __register_pstore_blk(info);
+	mutex_unlock(&pstore_blk_lock);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(register_pstore_blk);
+
+static void __unregister_pstore_blk(unsigned int major)
+{
+	struct pstore_device_info dev = { .read = psblk_generic_blk_read };
+	void *holder = blkdev;
+
+	lockdep_assert_held(&pstore_blk_lock);
+	if (psblk_bdev && MAJOR(psblk_bdev->bd_dev) == major) {
+		__unregister_pstore_device(&dev);
+		psblk_put_bdev(psblk_bdev, holder);
+		blkdev_panic_write = NULL;
+		psblk_bdev = NULL;
+	}
+}
+
+/**
+ * unregister_pstore_blk() - unregister block device from pstore/blk
+ *
+ * @major: the major device number of device
+ */
+void unregister_pstore_blk(unsigned int major)
+{
+	mutex_lock(&pstore_blk_lock);
+	__unregister_pstore_blk(major);
+	mutex_unlock(&pstore_blk_lock);
+}
+EXPORT_SYMBOL_GPL(unregister_pstore_blk);
+
+/* get information of pstore/blk */
+int pstore_blk_get_config(struct pstore_blk_config *info)
+{
+	strncpy(info->device, blkdev, 80);
+	info->max_reason = max_reason;
+	info->kmsg_size = check_size(kmsg_size, 4096);
+	info->pmsg_size = check_size(pmsg_size, 4096);
+	info->ftrace_size = check_size(ftrace_size, 4096);
+	info->console_size = check_size(console_size, 4096);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(pstore_blk_get_config);
+
+static int __init pstore_blk_init(void)
+{
+	struct pstore_blk_info info = { };
+	int ret = 0;
+
+	mutex_lock(&pstore_blk_lock);
+	if (!pstore_zone_info && best_effort && blkdev[0])
+		ret = __register_pstore_blk(&info);
+	mutex_unlock(&pstore_blk_lock);
+
+	return ret;
+}
+late_initcall(pstore_blk_init);
+
+static void __exit pstore_blk_exit(void)
+{
+	mutex_lock(&pstore_blk_lock);
+	if (psblk_bdev)
+		__unregister_pstore_blk(MAJOR(psblk_bdev->bd_dev));
+	else {
+		struct pstore_device_info dev = { };
+
+		if (pstore_zone_info)
+			dev.read = pstore_zone_info->read;
+		__unregister_pstore_device(&dev);
+	}
+	mutex_unlock(&pstore_blk_lock);
+}
+module_exit(pstore_blk_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("WeiXiong Liao <liaoweixiong@allwinnertech.com>");
+MODULE_AUTHOR("Kees Cook <keescook@chromium.org>");
+MODULE_DESCRIPTION("pstore backend for block devices");
diff --git a/fs/pstore/ftrace.c b/fs/pstore/ftrace.c
index bfbfc26..5c04507 100644
--- a/fs/pstore/ftrace.c
+++ b/fs/pstore/ftrace.c
@@ -16,6 +16,7 @@
 #include <linux/debugfs.h>
 #include <linux/err.h>
 #include <linux/cache.h>
+#include <linux/slab.h>
 #include <asm/barrier.h>
 #include "internal.h"
 
@@ -132,3 +133,56 @@
 
 	debugfs_remove_recursive(pstore_ftrace_dir);
 }
+
+ssize_t pstore_ftrace_combine_log(char **dest_log, size_t *dest_log_size,
+				  const char *src_log, size_t src_log_size)
+{
+	size_t dest_size, src_size, total, dest_off, src_off;
+	size_t dest_idx = 0, src_idx = 0, merged_idx = 0;
+	void *merged_buf;
+	struct pstore_ftrace_record *drec, *srec, *mrec;
+	size_t record_size = sizeof(struct pstore_ftrace_record);
+
+	dest_off = *dest_log_size % record_size;
+	dest_size = *dest_log_size - dest_off;
+
+	src_off = src_log_size % record_size;
+	src_size = src_log_size - src_off;
+
+	total = dest_size + src_size;
+	merged_buf = kmalloc(total, GFP_KERNEL);
+	if (!merged_buf)
+		return -ENOMEM;
+
+	drec = (struct pstore_ftrace_record *)(*dest_log + dest_off);
+	srec = (struct pstore_ftrace_record *)(src_log + src_off);
+	mrec = (struct pstore_ftrace_record *)(merged_buf);
+
+	while (dest_size > 0 && src_size > 0) {
+		if (pstore_ftrace_read_timestamp(&drec[dest_idx]) <
+		    pstore_ftrace_read_timestamp(&srec[src_idx])) {
+			mrec[merged_idx++] = drec[dest_idx++];
+			dest_size -= record_size;
+		} else {
+			mrec[merged_idx++] = srec[src_idx++];
+			src_size -= record_size;
+		}
+	}
+
+	while (dest_size > 0) {
+		mrec[merged_idx++] = drec[dest_idx++];
+		dest_size -= record_size;
+	}
+
+	while (src_size > 0) {
+		mrec[merged_idx++] = srec[src_idx++];
+		src_size -= record_size;
+	}
+
+	kfree(*dest_log);
+	*dest_log = merged_buf;
+	*dest_log_size = total;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(pstore_ftrace_combine_log);
diff --git a/fs/pstore/inode.c b/fs/pstore/inode.c
index d99b5d3..c331efe 100644
--- a/fs/pstore/inode.c
+++ b/fs/pstore/inode.c
@@ -22,18 +22,21 @@
 #include <linux/magic.h>
 #include <linux/pstore.h>
 #include <linux/slab.h>
-#include <linux/spinlock.h>
 #include <linux/uaccess.h>
 
 #include "internal.h"
 
 #define	PSTORE_NAMELEN	64
 
-static DEFINE_SPINLOCK(allpstore_lock);
-static LIST_HEAD(allpstore);
+static DEFINE_MUTEX(records_list_lock);
+static LIST_HEAD(records_list);
+
+static DEFINE_MUTEX(pstore_sb_lock);
+static struct super_block *pstore_sb;
 
 struct pstore_private {
 	struct list_head list;
+	struct dentry *dentry;
 	struct pstore_record *record;
 	size_t total_size;
 };
@@ -178,10 +181,22 @@
 {
 	struct pstore_private *p = d_inode(dentry)->i_private;
 	struct pstore_record *record = p->record;
+	int rc = 0;
 
 	if (!record->psi->erase)
 		return -EPERM;
 
+	/* Make sure we can't race while removing this file. */
+	mutex_lock(&records_list_lock);
+	if (!list_empty(&p->list))
+		list_del_init(&p->list);
+	else
+		rc = -ENOENT;
+	p->dentry = NULL;
+	mutex_unlock(&records_list_lock);
+	if (rc)
+		return rc;
+
 	mutex_lock(&record->psi->read_mutex);
 	record->psi->erase(record);
 	mutex_unlock(&record->psi->read_mutex);
@@ -192,15 +207,9 @@
 static void pstore_evict_inode(struct inode *inode)
 {
 	struct pstore_private	*p = inode->i_private;
-	unsigned long		flags;
 
 	clear_inode(inode);
-	if (p) {
-		spin_lock_irqsave(&allpstore_lock, flags);
-		list_del(&p->list);
-		spin_unlock_irqrestore(&allpstore_lock, flags);
-		free_pstore_private(p);
-	}
+	free_pstore_private(p);
 }
 
 static const struct inode_operations pstore_dir_inode_operations = {
@@ -278,11 +287,54 @@
 	.show_options	= pstore_show_options,
 };
 
-static struct super_block *pstore_sb;
-
-bool pstore_is_mounted(void)
+static struct dentry *psinfo_lock_root(void)
 {
-	return pstore_sb != NULL;
+	struct dentry *root;
+
+	mutex_lock(&pstore_sb_lock);
+	/*
+	 * Having no backend is fine -- no records appear.
+	 * Not being mounted is fine -- nothing to do.
+	 */
+	if (!psinfo || !pstore_sb) {
+		mutex_unlock(&pstore_sb_lock);
+		return NULL;
+	}
+
+	root = pstore_sb->s_root;
+	inode_lock(d_inode(root));
+	mutex_unlock(&pstore_sb_lock);
+
+	return root;
+}
+
+int pstore_put_backend_records(struct pstore_info *psi)
+{
+	struct pstore_private *pos, *tmp;
+	struct dentry *root;
+	int rc = 0;
+
+	root = psinfo_lock_root();
+	if (!root)
+		return 0;
+
+	mutex_lock(&records_list_lock);
+	list_for_each_entry_safe(pos, tmp, &records_list, list) {
+		if (pos->record->psi == psi) {
+			list_del_init(&pos->list);
+			rc = simple_unlink(d_inode(root), pos->dentry);
+			if (WARN_ON(rc))
+				break;
+			d_drop(pos->dentry);
+			dput(pos->dentry);
+			pos->dentry = NULL;
+		}
+	}
+	mutex_unlock(&records_list_lock);
+
+	inode_unlock(d_inode(root));
+
+	return rc;
 }
 
 /*
@@ -297,23 +349,20 @@
 	int			rc = 0;
 	char			name[PSTORE_NAMELEN];
 	struct pstore_private	*private, *pos;
-	unsigned long		flags;
 	size_t			size = record->size + record->ecc_notice_size;
 
-	WARN_ON(!inode_is_locked(d_inode(root)));
+	if (WARN_ON(!inode_is_locked(d_inode(root))))
+		return -EINVAL;
 
-	spin_lock_irqsave(&allpstore_lock, flags);
-	list_for_each_entry(pos, &allpstore, list) {
+	rc = -EEXIST;
+	/* Skip records that are already present in the filesystem. */
+	mutex_lock(&records_list_lock);
+	list_for_each_entry(pos, &records_list, list) {
 		if (pos->record->type == record->type &&
 		    pos->record->id == record->id &&
-		    pos->record->psi == record->psi) {
-			rc = -EEXIST;
-			break;
-		}
+		    pos->record->psi == record->psi)
+			goto fail;
 	}
-	spin_unlock_irqrestore(&allpstore_lock, flags);
-	if (rc)
-		return rc;
 
 	rc = -ENOMEM;
 	inode = pstore_get_inode(root->d_sb);
@@ -334,6 +383,7 @@
 	if (!dentry)
 		goto fail_private;
 
+	private->dentry = dentry;
 	private->record = record;
 	inode->i_size = private->total_size = size;
 	inode->i_private = private;
@@ -343,9 +393,8 @@
 
 	d_add(dentry, inode);
 
-	spin_lock_irqsave(&allpstore_lock, flags);
-	list_add(&private->list, &allpstore);
-	spin_unlock_irqrestore(&allpstore_lock, flags);
+	list_add(&private->list, &records_list);
+	mutex_unlock(&records_list_lock);
 
 	return 0;
 
@@ -353,8 +402,8 @@
 	free_pstore_private(private);
 fail_inode:
 	iput(inode);
-
 fail:
+	mutex_unlock(&records_list_lock);
 	return rc;
 }
 
@@ -366,16 +415,13 @@
  */
 void pstore_get_records(int quiet)
 {
-	struct pstore_info *psi = psinfo;
 	struct dentry *root;
 
-	if (!psi || !pstore_sb)
+	root = psinfo_lock_root();
+	if (!root)
 		return;
 
-	root = pstore_sb->s_root;
-
-	inode_lock(d_inode(root));
-	pstore_get_backend_records(psi, root, quiet);
+	pstore_get_backend_records(psinfo, root, quiet);
 	inode_unlock(d_inode(root));
 }
 
@@ -383,8 +429,6 @@
 {
 	struct inode *inode;
 
-	pstore_sb = sb;
-
 	sb->s_maxbytes		= MAX_LFS_FILESIZE;
 	sb->s_blocksize		= PAGE_SIZE;
 	sb->s_blocksize_bits	= PAGE_SHIFT;
@@ -405,6 +449,10 @@
 	if (!sb->s_root)
 		return -ENOMEM;
 
+	mutex_lock(&pstore_sb_lock);
+	pstore_sb = sb;
+	mutex_unlock(&pstore_sb_lock);
+
 	pstore_get_records(0);
 
 	return 0;
@@ -418,8 +466,17 @@
 
 static void pstore_kill_sb(struct super_block *sb)
 {
+	mutex_lock(&pstore_sb_lock);
+	WARN_ON(pstore_sb != sb);
+
 	kill_litter_super(sb);
 	pstore_sb = NULL;
+
+	mutex_lock(&records_list_lock);
+	INIT_LIST_HEAD(&records_list);
+	mutex_unlock(&records_list_lock);
+
+	mutex_unlock(&pstore_sb_lock);
 }
 
 static struct file_system_type pstore_fs_type = {
diff --git a/fs/pstore/internal.h b/fs/pstore/internal.h
index 7062ea4..7fb2190 100644
--- a/fs/pstore/internal.h
+++ b/fs/pstore/internal.h
@@ -12,9 +12,18 @@
 #ifdef CONFIG_PSTORE_FTRACE
 extern void pstore_register_ftrace(void);
 extern void pstore_unregister_ftrace(void);
+ssize_t pstore_ftrace_combine_log(char **dest_log, size_t *dest_log_size,
+				  const char *src_log, size_t src_log_size);
 #else
 static inline void pstore_register_ftrace(void) {}
 static inline void pstore_unregister_ftrace(void) {}
+static inline ssize_t
+pstore_ftrace_combine_log(char **dest_log, size_t *dest_log_size,
+			  const char *src_log, size_t src_log_size)
+{
+	*dest_log_size = 0;
+	return 0;
+}
 #endif
 
 #ifdef CONFIG_PSTORE_PMSG
@@ -31,9 +40,9 @@
 extern void	pstore_get_records(int);
 extern void	pstore_get_backend_records(struct pstore_info *psi,
 					   struct dentry *root, int quiet);
+extern int	pstore_put_backend_records(struct pstore_info *psi);
 extern int	pstore_mkfile(struct dentry *root,
 			      struct pstore_record *record);
-extern bool	pstore_is_mounted(void);
 extern void	pstore_record_init(struct pstore_record *record,
 				   struct pstore_info *psi);
 
diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
index 705b79b..b1ebf7b 100644
--- a/fs/pstore/platform.c
+++ b/fs/pstore/platform.c
@@ -44,7 +44,7 @@
 module_param_named(update_ms, pstore_update_ms, int, 0600);
 MODULE_PARM_DESC(update_ms, "milliseconds before pstore updates its content "
 		 "(default is -1, which means runtime updates are disabled; "
-		 "enabling this option is not safe, it may lead to further "
+		 "enabling this option may not be safe; it may lead to further "
 		 "corruption on Oopses)");
 
 /* Names should be in the same order as the enum pstore_type_id */
@@ -69,19 +69,25 @@
 static DECLARE_WORK(pstore_work, pstore_dowork);
 
 /*
- * pstore_lock just protects "psinfo" during
- * calls to pstore_register()
+ * psinfo_lock protects "psinfo" during calls to
+ * pstore_register(), pstore_unregister(), and
+ * the filesystem mount/unmount routines.
  */
-static DEFINE_SPINLOCK(pstore_lock);
+static DEFINE_MUTEX(psinfo_lock);
 struct pstore_info *psinfo;
 
 static char *backend;
+module_param(backend, charp, 0444);
+MODULE_PARM_DESC(backend, "specific backend to use");
+
 static char *compress =
 #ifdef CONFIG_PSTORE_COMPRESS_DEFAULT
 		CONFIG_PSTORE_COMPRESS_DEFAULT;
 #else
 		NULL;
 #endif
+module_param(compress, charp, 0444);
+MODULE_PARM_DESC(compress, "compression to use");
 
 /* Compression parameters */
 static struct crypto_comp *tfm;
@@ -129,24 +135,12 @@
 }
 EXPORT_SYMBOL_GPL(pstore_name_to_type);
 
-static const char *get_reason_str(enum kmsg_dump_reason reason)
+static void pstore_timer_kick(void)
 {
-	switch (reason) {
-	case KMSG_DUMP_PANIC:
-		return "Panic";
-	case KMSG_DUMP_OOPS:
-		return "Oops";
-	case KMSG_DUMP_EMERG:
-		return "Emergency";
-	case KMSG_DUMP_RESTART:
-		return "Restart";
-	case KMSG_DUMP_HALT:
-		return "Halt";
-	case KMSG_DUMP_POWEROFF:
-		return "Poweroff";
-	default:
-		return "Unknown";
-	}
+	if (pstore_update_ms < 0)
+		return;
+
+	mod_timer(&pstore_timer, jiffies + msecs_to_jiffies(pstore_update_ms));
 }
 
 /*
@@ -396,7 +390,7 @@
 	unsigned int	part = 1;
 	int		ret;
 
-	why = get_reason_str(reason);
+	why = kmsg_dump_reason_str(reason);
 
 	if (down_trylock(&psinfo->buf_lock)) {
 		/* Failed to acquire lock: give up if we cannot wait. */
@@ -462,8 +456,10 @@
 		}
 
 		ret = psinfo->write(&record);
-		if (ret == 0 && reason == KMSG_DUMP_OOPS && pstore_is_mounted())
+		if (ret == 0 && reason == KMSG_DUMP_OOPS) {
 			pstore_new_entry = 1;
+			pstore_timer_kick();
+		}
 
 		total += record.size;
 		part++;
@@ -506,14 +502,20 @@
 }
 
 static struct console pstore_console = {
-	.name	= "pstore",
 	.write	= pstore_console_write,
-	.flags	= CON_PRINTBUFFER | CON_ENABLED | CON_ANYTIME,
 	.index	= -1,
 };
 
 static void pstore_register_console(void)
 {
+	/* Show which backend is going to get console writes. */
+	strscpy(pstore_console.name, psinfo->name,
+		sizeof(pstore_console.name));
+	/*
+	 * Always initialize flags here since prior unregister_console()
+	 * calls may have changed settings (specifically CON_ENABLED).
+	 */
+	pstore_console.flags = CON_PRINTBUFFER | CON_ENABLED | CON_ANYTIME;
 	register_console(&pstore_console);
 }
 
@@ -558,8 +560,6 @@
  */
 int pstore_register(struct pstore_info *psi)
 {
-	struct module *owner = psi->owner;
-
 	if (backend && strcmp(backend, psi->name)) {
 		pr_warn("ignoring unexpected backend '%s'\n", psi->name);
 		return -EPERM;
@@ -579,11 +579,11 @@
 		return -EINVAL;
 	}
 
-	spin_lock(&pstore_lock);
+	mutex_lock(&psinfo_lock);
 	if (psinfo) {
 		pr_warn("backend '%s' already loaded: ignoring '%s'\n",
 			psinfo->name, psi->name);
-		spin_unlock(&pstore_lock);
+		mutex_unlock(&psinfo_lock);
 		return -EBUSY;
 	}
 
@@ -592,21 +592,16 @@
 	psinfo = psi;
 	mutex_init(&psinfo->read_mutex);
 	sema_init(&psinfo->buf_lock, 1);
-	spin_unlock(&pstore_lock);
-
-	if (owner && !try_module_get(owner)) {
-		psinfo = NULL;
-		return -EINVAL;
-	}
 
 	if (psi->flags & PSTORE_FLAGS_DMESG)
 		allocate_buf_for_compression();
 
-	if (pstore_is_mounted())
-		pstore_get_records(0);
+	pstore_get_records(0);
 
-	if (psi->flags & PSTORE_FLAGS_DMESG)
+	if (psi->flags & PSTORE_FLAGS_DMESG) {
+		pstore_dumper.max_reason = psinfo->max_reason;
 		pstore_register_kmsg();
+	}
 	if (psi->flags & PSTORE_FLAGS_CONSOLE)
 		pstore_register_console();
 	if (psi->flags & PSTORE_FLAGS_FTRACE)
@@ -615,33 +610,36 @@
 		pstore_register_pmsg();
 
 	/* Start watching for new records, if desired. */
-	if (pstore_update_ms >= 0) {
-		pstore_timer.expires = jiffies +
-			msecs_to_jiffies(pstore_update_ms);
-		add_timer(&pstore_timer);
-	}
+	pstore_timer_kick();
 
 	/*
 	 * Update the module parameter backend, so it is visible
 	 * through /sys/module/pstore/parameters/backend
 	 */
-	backend = psi->name;
+	backend = kstrdup(psi->name, GFP_KERNEL);
 
 	pr_info("Registered %s as persistent store backend\n", psi->name);
 
-	module_put(owner);
-
+	mutex_unlock(&psinfo_lock);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(pstore_register);
 
 void pstore_unregister(struct pstore_info *psi)
 {
-	/* Stop timer and make sure all work has finished. */
-	pstore_update_ms = -1;
-	del_timer_sync(&pstore_timer);
-	flush_work(&pstore_work);
+	/* It's okay to unregister nothing. */
+	if (!psi)
+		return;
 
+	mutex_lock(&psinfo_lock);
+
+	/* Only one backend can be registered at a time. */
+	if (WARN_ON(psi != psinfo)) {
+		mutex_unlock(&psinfo_lock);
+		return;
+	}
+
+	/* Unregister all callbacks. */
 	if (psi->flags & PSTORE_FLAGS_PMSG)
 		pstore_unregister_pmsg();
 	if (psi->flags & PSTORE_FLAGS_FTRACE)
@@ -651,10 +649,19 @@
 	if (psi->flags & PSTORE_FLAGS_DMESG)
 		pstore_unregister_kmsg();
 
+	/* Stop timer and make sure all work has finished. */
+	del_timer_sync(&pstore_timer);
+	flush_work(&pstore_work);
+
+	/* Remove all backend records from filesystem tree. */
+	pstore_put_backend_records(psi);
+
 	free_buf_for_compression();
 
 	psinfo = NULL;
+	kfree(backend);
 	backend = NULL;
+	mutex_unlock(&psinfo_lock);
 }
 EXPORT_SYMBOL_GPL(pstore_unregister);
 
@@ -791,12 +798,10 @@
 		schedule_work(&pstore_work);
 	}
 
-	if (pstore_update_ms >= 0)
-		mod_timer(&pstore_timer,
-			  jiffies + msecs_to_jiffies(pstore_update_ms));
+	pstore_timer_kick();
 }
 
-void __init pstore_choose_compression(void)
+static void __init pstore_choose_compression(void)
 {
 	const struct pstore_zbackend *step;
 
@@ -838,11 +843,5 @@
 }
 module_exit(pstore_exit)
 
-module_param(compress, charp, 0444);
-MODULE_PARM_DESC(compress, "Pstore compression to use");
-
-module_param(backend, charp, 0444);
-MODULE_PARM_DESC(backend, "Pstore backend to use");
-
 MODULE_AUTHOR("Tony Luck <tony.luck@intel.com>");
 MODULE_LICENSE("GPL");
diff --git a/fs/pstore/ram.c b/fs/pstore/ram.c
index 013486b..ca6d8a8 100644
--- a/fs/pstore/ram.c
+++ b/fs/pstore/ram.c
@@ -21,6 +21,7 @@
 #include <linux/pstore_ram.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
+#include "internal.h"
 
 #define RAMOOPS_KERNMSG_HDR "===="
 #define MIN_MEM_SIZE 4096UL
@@ -53,22 +54,27 @@
 		"size of reserved RAM used to store oops/panic logs");
 
 static unsigned int mem_type;
-module_param(mem_type, uint, 0600);
+module_param(mem_type, uint, 0400);
 MODULE_PARM_DESC(mem_type,
 		"set to 1 to try to use unbuffered memory (default 0)");
 
-static int dump_oops = 1;
-module_param(dump_oops, int, 0600);
-MODULE_PARM_DESC(dump_oops,
-		"set to 1 to dump oopses, 0 to only dump panics (default 1)");
+static int ramoops_max_reason = -1;
+module_param_named(max_reason, ramoops_max_reason, int, 0400);
+MODULE_PARM_DESC(max_reason,
+		 "maximum reason for kmsg dump (default 2: Oops and Panic) ");
 
 static int ramoops_ecc;
-module_param_named(ecc, ramoops_ecc, int, 0600);
+module_param_named(ecc, ramoops_ecc, int, 0400);
 MODULE_PARM_DESC(ramoops_ecc,
 		"if non-zero, the option enables ECC support and specifies "
 		"ECC buffer size in bytes (1 is a special value, means 16 "
 		"bytes ECC)");
 
+static int ramoops_dump_oops = -1;
+module_param_named(dump_oops, ramoops_dump_oops, int, 0400);
+MODULE_PARM_DESC(dump_oops,
+		 "(deprecated: use max_reason instead) set to 1 to dump oopses & panics, 0 to only dump panics");
+
 struct ramoops_context {
 	struct persistent_ram_zone **dprzs;	/* Oops dump zones */
 	struct persistent_ram_zone *cprz;	/* Console zone */
@@ -81,7 +87,6 @@
 	size_t console_size;
 	size_t ftrace_size;
 	size_t pmsg_size;
-	int dump_oops;
 	u32 flags;
 	struct persistent_ram_ecc_info ecc_info;
 	unsigned int max_dump_cnt;
@@ -168,58 +173,6 @@
 			   persistent_ram_ecc_string(prz, NULL, 0));
 }
 
-static ssize_t ftrace_log_combine(struct persistent_ram_zone *dest,
-				  struct persistent_ram_zone *src)
-{
-	size_t dest_size, src_size, total, dest_off, src_off;
-	size_t dest_idx = 0, src_idx = 0, merged_idx = 0;
-	void *merged_buf;
-	struct pstore_ftrace_record *drec, *srec, *mrec;
-	size_t record_size = sizeof(struct pstore_ftrace_record);
-
-	dest_off = dest->old_log_size % record_size;
-	dest_size = dest->old_log_size - dest_off;
-
-	src_off = src->old_log_size % record_size;
-	src_size = src->old_log_size - src_off;
-
-	total = dest_size + src_size;
-	merged_buf = kmalloc(total, GFP_KERNEL);
-	if (!merged_buf)
-		return -ENOMEM;
-
-	drec = (struct pstore_ftrace_record *)(dest->old_log + dest_off);
-	srec = (struct pstore_ftrace_record *)(src->old_log + src_off);
-	mrec = (struct pstore_ftrace_record *)(merged_buf);
-
-	while (dest_size > 0 && src_size > 0) {
-		if (pstore_ftrace_read_timestamp(&drec[dest_idx]) <
-		    pstore_ftrace_read_timestamp(&srec[src_idx])) {
-			mrec[merged_idx++] = drec[dest_idx++];
-			dest_size -= record_size;
-		} else {
-			mrec[merged_idx++] = srec[src_idx++];
-			src_size -= record_size;
-		}
-	}
-
-	while (dest_size > 0) {
-		mrec[merged_idx++] = drec[dest_idx++];
-		dest_size -= record_size;
-	}
-
-	while (src_size > 0) {
-		mrec[merged_idx++] = srec[src_idx++];
-		src_size -= record_size;
-	}
-
-	kfree(dest->old_log);
-	dest->old_log = merged_buf;
-	dest->old_log_size = total;
-
-	return 0;
-}
-
 static ssize_t ramoops_pstore_read(struct pstore_record *record)
 {
 	ssize_t size = 0;
@@ -291,7 +244,12 @@
 				tmp_prz->corrected_bytes +=
 						prz_next->corrected_bytes;
 				tmp_prz->bad_blocks += prz_next->bad_blocks;
-				size = ftrace_log_combine(tmp_prz, prz_next);
+
+				size = pstore_ftrace_combine_log(
+						&tmp_prz->old_log,
+						&tmp_prz->old_log_size,
+						prz_next->old_log,
+						prz_next->old_log_size);
 				if (size)
 					goto out;
 			}
@@ -382,16 +340,14 @@
 		return -EINVAL;
 
 	/*
-	 * Out of the various dmesg dump types, ramoops is currently designed
-	 * to only store crash logs, rather than storing general kernel logs.
+	 * We could filter on record->reason here if we wanted to (which
+	 * would duplicate what happened before the "max_reason" setting
+	 * was added), but that would defeat the purpose of a system
+	 * changing printk.always_kmsg_dump, so instead log everything that
+	 * the kmsg dumper sends us, since it should be doing the filtering
+	 * based on the combination of printk.always_kmsg_dump and our
+	 * requested "max_reason".
 	 */
-	if (record->reason != KMSG_DUMP_OOPS &&
-	    record->reason != KMSG_DUMP_PANIC)
-		return -EINVAL;
-
-	/* Skip Oopes when configured to do so. */
-	if (record->reason == KMSG_DUMP_OOPS && !cxt->dump_oops)
-		return -EINVAL;
 
 	/*
 	 * Explicitly only take the first part of any new crash.
@@ -644,19 +600,25 @@
 	return 0;
 }
 
-static int ramoops_parse_dt_size(struct platform_device *pdev,
-				 const char *propname, u32 *value)
+/* Read a u32 from a dt property and make sure it's safe for an int. */
+static int ramoops_parse_dt_u32(struct platform_device *pdev,
+				const char *propname,
+				u32 default_value, u32 *value)
 {
 	u32 val32 = 0;
 	int ret;
 
 	ret = of_property_read_u32(pdev->dev.of_node, propname, &val32);
-	if (ret < 0 && ret != -EINVAL) {
+	if (ret == -EINVAL) {
+		/* field is missing, use default value. */
+		val32 = default_value;
+	} else if (ret < 0) {
 		dev_err(&pdev->dev, "failed to parse property %s: %d\n",
 			propname, ret);
 		return ret;
 	}
 
+	/* Sanity check our results. */
 	if (val32 > INT_MAX) {
 		dev_err(&pdev->dev, "%s %u > INT_MAX\n", propname, val32);
 		return -EOVERFLOW;
@@ -687,23 +649,32 @@
 	pdata->mem_size = resource_size(res);
 	pdata->mem_address = res->start;
 	pdata->mem_type = of_property_read_bool(of_node, "unbuffered");
-	pdata->dump_oops = !of_property_read_bool(of_node, "no-dump-oops");
+	/*
+	 * Setting "no-dump-oops" is deprecated and will be ignored if
+	 * "max_reason" is also specified.
+	 */
+	if (of_property_read_bool(of_node, "no-dump-oops"))
+		pdata->max_reason = KMSG_DUMP_PANIC;
+	else
+		pdata->max_reason = KMSG_DUMP_OOPS;
 
-#define parse_size(name, field) {					\
-		ret = ramoops_parse_dt_size(pdev, name, &value);	\
+#define parse_u32(name, field, default_value) {				\
+		ret = ramoops_parse_dt_u32(pdev, name, default_value,	\
+					    &value);			\
 		if (ret < 0)						\
 			return ret;					\
 		field = value;						\
 	}
 
-	parse_size("record-size", pdata->record_size);
-	parse_size("console-size", pdata->console_size);
-	parse_size("ftrace-size", pdata->ftrace_size);
-	parse_size("pmsg-size", pdata->pmsg_size);
-	parse_size("ecc-size", pdata->ecc_info.ecc_size);
-	parse_size("flags", pdata->flags);
+	parse_u32("record-size", pdata->record_size, 0);
+	parse_u32("console-size", pdata->console_size, 0);
+	parse_u32("ftrace-size", pdata->ftrace_size, 0);
+	parse_u32("pmsg-size", pdata->pmsg_size, 0);
+	parse_u32("ecc-size", pdata->ecc_info.ecc_size, 0);
+	parse_u32("flags", pdata->flags, 0);
+	parse_u32("max-reason", pdata->max_reason, pdata->max_reason);
 
-#undef parse_size
+#undef parse_u32
 
 	/*
 	 * Some old Chromebooks relied on the kernel setting the
@@ -785,7 +756,6 @@
 	cxt->console_size = pdata->console_size;
 	cxt->ftrace_size = pdata->ftrace_size;
 	cxt->pmsg_size = pdata->pmsg_size;
-	cxt->dump_oops = pdata->dump_oops;
 	cxt->flags = pdata->flags;
 	cxt->ecc_info = pdata->ecc_info;
 
@@ -828,8 +798,10 @@
 	 * the single region size is how to check.
 	 */
 	cxt->pstore.flags = 0;
-	if (cxt->max_dump_cnt)
+	if (cxt->max_dump_cnt) {
 		cxt->pstore.flags |= PSTORE_FLAGS_DMESG;
+		cxt->pstore.max_reason = pdata->max_reason;
+	}
 	if (cxt->console_size)
 		cxt->pstore.flags |= PSTORE_FLAGS_CONSOLE;
 	if (cxt->max_ftrace_cnt)
@@ -865,7 +837,7 @@
 	mem_size = pdata->mem_size;
 	mem_address = pdata->mem_address;
 	record_size = pdata->record_size;
-	dump_oops = pdata->dump_oops;
+	ramoops_max_reason = pdata->max_reason;
 	ramoops_console_size = pdata->console_size;
 	ramoops_pmsg_size = pdata->pmsg_size;
 	ramoops_ftrace_size = pdata->ftrace_size;
@@ -948,7 +920,16 @@
 	pdata.console_size = ramoops_console_size;
 	pdata.ftrace_size = ramoops_ftrace_size;
 	pdata.pmsg_size = ramoops_pmsg_size;
-	pdata.dump_oops = dump_oops;
+	/* If "max_reason" is set, its value has priority over "dump_oops". */
+	if (ramoops_max_reason >= 0)
+		pdata.max_reason = ramoops_max_reason;
+	/* Otherwise, if "dump_oops" is set, parse it into "max_reason". */
+	else if (ramoops_dump_oops != -1)
+		pdata.max_reason = ramoops_dump_oops ? KMSG_DUMP_OOPS
+						     : KMSG_DUMP_PANIC;
+	/* And if neither are explicitly set, use the default. */
+	else
+		pdata.max_reason = KMSG_DUMP_OOPS;
 	pdata.flags = RAMOOPS_FLAG_FTRACE_PER_CPU;
 
 	/*
@@ -963,7 +944,6 @@
 		pr_info("could not create platform device: %ld\n",
 			PTR_ERR(dummy));
 		dummy = NULL;
-		ramoops_unregister_dummy();
 	}
 }
 
diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index 1f4d8c0..c917c19 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -34,7 +34,7 @@
 	uint32_t    sig;
 	atomic_t    start;
 	atomic_t    size;
-	uint8_t     data[0];
+	uint8_t     data[];
 };
 
 #define PERSISTENT_RAM_SIG (0x43474244) /* DBGC */
diff --git a/fs/pstore/zone.c b/fs/pstore/zone.c
new file mode 100644
index 0000000..819428d
--- /dev/null
+++ b/fs/pstore/zone.c
@@ -0,0 +1,1465 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Provide a pstore intermediate backend, organized into kernel memory
+ * allocated zones that are then mapped and flushed into a single
+ * contiguous region on a storage backend of some kind (block, mtd, etc).
+ */
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/mount.h>
+#include <linux/printk.h>
+#include <linux/fs.h>
+#include <linux/pstore_zone.h>
+#include <linux/kdev_t.h>
+#include <linux/device.h>
+#include <linux/namei.h>
+#include <linux/fcntl.h>
+#include <linux/uio.h>
+#include <linux/writeback.h>
+#include "internal.h"
+
+/**
+ * struct psz_head - header of zone to flush to storage
+ *
+ * @sig: signature to indicate header (PSZ_SIG xor PSZONE-type value)
+ * @datalen: length of data in @data
+ * @start: offset into @data where the beginning of the stored bytes begin
+ * @data: zone data.
+ */
+struct psz_buffer {
+#define PSZ_SIG (0x43474244) /* DBGC */
+	uint32_t sig;
+	atomic_t datalen;
+	atomic_t start;
+	uint8_t data[];
+};
+
+/**
+ * struct psz_kmsg_header - kmsg dump-specific header to flush to storage
+ *
+ * @magic: magic num for kmsg dump header
+ * @time: kmsg dump trigger time
+ * @compressed: whether conpressed
+ * @counter: kmsg dump counter
+ * @reason: the kmsg dump reason (e.g. oops, panic, etc)
+ * @data: pointer to log data
+ *
+ * This is a sub-header for a kmsg dump, trailing after &psz_buffer.
+ */
+struct psz_kmsg_header {
+#define PSTORE_KMSG_HEADER_MAGIC 0x4dfc3ae5 /* Just a random number */
+	uint32_t magic;
+	struct timespec64 time;
+	bool compressed;
+	uint32_t counter;
+	enum kmsg_dump_reason reason;
+	uint8_t data[];
+};
+
+/**
+ * struct pstore_zone - single stored buffer
+ *
+ * @off: zone offset of storage
+ * @type: front-end type for this zone
+ * @name: front-end name for this zone
+ * @buffer: pointer to data buffer managed by this zone
+ * @oldbuf: pointer to old data buffer
+ * @buffer_size: bytes in @buffer->data
+ * @should_recover: whether this zone should recover from storage
+ * @dirty: whether the data in @buffer dirty
+ *
+ * zone structure in memory.
+ */
+struct pstore_zone {
+	loff_t off;
+	const char *name;
+	enum pstore_type_id type;
+
+	struct psz_buffer *buffer;
+	struct psz_buffer *oldbuf;
+	size_t buffer_size;
+	bool should_recover;
+	atomic_t dirty;
+};
+
+/**
+ * struct psz_context - all about running state of pstore/zone
+ *
+ * @kpszs: kmsg dump storage zones
+ * @ppsz: pmsg storage zone
+ * @cpsz: console storage zone
+ * @fpszs: ftrace storage zones
+ * @kmsg_max_cnt: max count of @kpszs
+ * @kmsg_read_cnt: counter of total read kmsg dumps
+ * @kmsg_write_cnt: counter of total kmsg dump writes
+ * @pmsg_read_cnt: counter of total read pmsg zone
+ * @console_read_cnt: counter of total read console zone
+ * @ftrace_max_cnt: max count of @fpszs
+ * @ftrace_read_cnt: counter of max read ftrace zone
+ * @oops_counter: counter of oops dumps
+ * @panic_counter: counter of panic dumps
+ * @recovered: whether finished recovering data from storage
+ * @on_panic: whether panic is happening
+ * @pstore_zone_info_lock: lock to @pstore_zone_info
+ * @pstore_zone_info: information from backend
+ * @pstore: structure for pstore
+ */
+struct psz_context {
+	struct pstore_zone **kpszs;
+	struct pstore_zone *ppsz;
+	struct pstore_zone *cpsz;
+	struct pstore_zone **fpszs;
+	unsigned int kmsg_max_cnt;
+	unsigned int kmsg_read_cnt;
+	unsigned int kmsg_write_cnt;
+	unsigned int pmsg_read_cnt;
+	unsigned int console_read_cnt;
+	unsigned int ftrace_max_cnt;
+	unsigned int ftrace_read_cnt;
+	/*
+	 * These counters should be calculated during recovery.
+	 * It records the oops/panic times after crashes rather than boots.
+	 */
+	unsigned int oops_counter;
+	unsigned int panic_counter;
+	atomic_t recovered;
+	atomic_t on_panic;
+
+	/*
+	 * pstore_zone_info_lock protects this entire structure during calls
+	 * to register_pstore_zone()/unregister_pstore_zone().
+	 */
+	struct mutex pstore_zone_info_lock;
+	struct pstore_zone_info *pstore_zone_info;
+	struct pstore_info pstore;
+};
+static struct psz_context pstore_zone_cxt;
+
+static void psz_flush_all_dirty_zones(struct work_struct *);
+static DECLARE_DELAYED_WORK(psz_cleaner, psz_flush_all_dirty_zones);
+
+/**
+ * enum psz_flush_mode - flush mode for psz_zone_write()
+ *
+ * @FLUSH_NONE: do not flush to storage but update data on memory
+ * @FLUSH_PART: just flush part of data including meta data to storage
+ * @FLUSH_META: just flush meta data of zone to storage
+ * @FLUSH_ALL: flush all of zone
+ */
+enum psz_flush_mode {
+	FLUSH_NONE = 0,
+	FLUSH_PART,
+	FLUSH_META,
+	FLUSH_ALL,
+};
+
+static inline int buffer_datalen(struct pstore_zone *zone)
+{
+	return atomic_read(&zone->buffer->datalen);
+}
+
+static inline int buffer_start(struct pstore_zone *zone)
+{
+	return atomic_read(&zone->buffer->start);
+}
+
+static inline bool is_on_panic(void)
+{
+	return atomic_read(&pstore_zone_cxt.on_panic);
+}
+
+static ssize_t psz_zone_read_buffer(struct pstore_zone *zone, char *buf,
+		size_t len, unsigned long off)
+{
+	if (!buf || !zone || !zone->buffer)
+		return -EINVAL;
+	if (off > zone->buffer_size)
+		return -EINVAL;
+	len = min_t(size_t, len, zone->buffer_size - off);
+	memcpy(buf, zone->buffer->data + off, len);
+	return len;
+}
+
+static int psz_zone_read_oldbuf(struct pstore_zone *zone, char *buf,
+		size_t len, unsigned long off)
+{
+	if (!buf || !zone || !zone->oldbuf)
+		return -EINVAL;
+	if (off > zone->buffer_size)
+		return -EINVAL;
+	len = min_t(size_t, len, zone->buffer_size - off);
+	memcpy(buf, zone->oldbuf->data + off, len);
+	return 0;
+}
+
+static int psz_zone_write(struct pstore_zone *zone,
+		enum psz_flush_mode flush_mode, const char *buf,
+		size_t len, unsigned long off)
+{
+	struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info;
+	ssize_t wcnt = 0;
+	ssize_t (*writeop)(const char *buf, size_t bytes, loff_t pos);
+	size_t wlen;
+
+	if (off > zone->buffer_size)
+		return -EINVAL;
+
+	wlen = min_t(size_t, len, zone->buffer_size - off);
+	if (buf && wlen) {
+		memcpy(zone->buffer->data + off, buf, wlen);
+		atomic_set(&zone->buffer->datalen, wlen + off);
+	}
+
+	/* avoid to damage old records */
+	if (!is_on_panic() && !atomic_read(&pstore_zone_cxt.recovered))
+		goto dirty;
+
+	writeop = is_on_panic() ? info->panic_write : info->write;
+	if (!writeop)
+		goto dirty;
+
+	switch (flush_mode) {
+	case FLUSH_NONE:
+		if (unlikely(buf && wlen))
+			goto dirty;
+		return 0;
+	case FLUSH_PART:
+		wcnt = writeop((const char *)zone->buffer->data + off, wlen,
+				zone->off + sizeof(*zone->buffer) + off);
+		if (wcnt != wlen)
+			goto dirty;
+		fallthrough;
+	case FLUSH_META:
+		wlen = sizeof(struct psz_buffer);
+		wcnt = writeop((const char *)zone->buffer, wlen, zone->off);
+		if (wcnt != wlen)
+			goto dirty;
+		break;
+	case FLUSH_ALL:
+		wlen = zone->buffer_size + sizeof(*zone->buffer);
+		wcnt = writeop((const char *)zone->buffer, wlen, zone->off);
+		if (wcnt != wlen)
+			goto dirty;
+		break;
+	}
+
+	return 0;
+dirty:
+	/* no need to mark dirty if going to try next zone */
+	if (wcnt == -ENOMSG)
+		return -ENOMSG;
+	atomic_set(&zone->dirty, true);
+	/* flush dirty zones nicely */
+	if (wcnt == -EBUSY && !is_on_panic())
+		schedule_delayed_work(&psz_cleaner, msecs_to_jiffies(500));
+	return -EBUSY;
+}
+
+static int psz_flush_dirty_zone(struct pstore_zone *zone)
+{
+	int ret;
+
+	if (unlikely(!zone))
+		return -EINVAL;
+
+	if (unlikely(!atomic_read(&pstore_zone_cxt.recovered)))
+		return -EBUSY;
+
+	if (!atomic_xchg(&zone->dirty, false))
+		return 0;
+
+	ret = psz_zone_write(zone, FLUSH_ALL, NULL, 0, 0);
+	if (ret)
+		atomic_set(&zone->dirty, true);
+	return ret;
+}
+
+static int psz_flush_dirty_zones(struct pstore_zone **zones, unsigned int cnt)
+{
+	int i, ret;
+	struct pstore_zone *zone;
+
+	if (!zones)
+		return -EINVAL;
+
+	for (i = 0; i < cnt; i++) {
+		zone = zones[i];
+		if (!zone)
+			return -EINVAL;
+		ret = psz_flush_dirty_zone(zone);
+		if (ret)
+			return ret;
+	}
+	return 0;
+}
+
+static int psz_move_zone(struct pstore_zone *old, struct pstore_zone *new)
+{
+	const char *data = (const char *)old->buffer->data;
+	int ret;
+
+	ret = psz_zone_write(new, FLUSH_ALL, data, buffer_datalen(old), 0);
+	if (ret) {
+		atomic_set(&new->buffer->datalen, 0);
+		atomic_set(&new->dirty, false);
+		return ret;
+	}
+	atomic_set(&old->buffer->datalen, 0);
+	return 0;
+}
+
+static void psz_flush_all_dirty_zones(struct work_struct *work)
+{
+	struct psz_context *cxt = &pstore_zone_cxt;
+	int ret = 0;
+
+	if (cxt->ppsz)
+		ret |= psz_flush_dirty_zone(cxt->ppsz);
+	if (cxt->cpsz)
+		ret |= psz_flush_dirty_zone(cxt->cpsz);
+	if (cxt->kpszs)
+		ret |= psz_flush_dirty_zones(cxt->kpszs, cxt->kmsg_max_cnt);
+	if (cxt->fpszs)
+		ret |= psz_flush_dirty_zones(cxt->fpszs, cxt->ftrace_max_cnt);
+	if (ret && cxt->pstore_zone_info)
+		schedule_delayed_work(&psz_cleaner, msecs_to_jiffies(1000));
+}
+
+static int psz_kmsg_recover_data(struct psz_context *cxt)
+{
+	struct pstore_zone_info *info = cxt->pstore_zone_info;
+	struct pstore_zone *zone = NULL;
+	struct psz_buffer *buf;
+	unsigned long i;
+	ssize_t rcnt;
+
+	if (!info->read)
+		return -EINVAL;
+
+	for (i = 0; i < cxt->kmsg_max_cnt; i++) {
+		zone = cxt->kpszs[i];
+		if (unlikely(!zone))
+			return -EINVAL;
+		if (atomic_read(&zone->dirty)) {
+			unsigned int wcnt = cxt->kmsg_write_cnt;
+			struct pstore_zone *new = cxt->kpszs[wcnt];
+			int ret;
+
+			ret = psz_move_zone(zone, new);
+			if (ret) {
+				pr_err("move zone from %lu to %d failed\n",
+						i, wcnt);
+				return ret;
+			}
+			cxt->kmsg_write_cnt = (wcnt + 1) % cxt->kmsg_max_cnt;
+		}
+		if (!zone->should_recover)
+			continue;
+		buf = zone->buffer;
+		rcnt = info->read((char *)buf, zone->buffer_size + sizeof(*buf),
+				zone->off);
+		if (rcnt != zone->buffer_size + sizeof(*buf))
+			return (int)rcnt < 0 ? (int)rcnt : -EIO;
+	}
+	return 0;
+}
+
+static int psz_kmsg_recover_meta(struct psz_context *cxt)
+{
+	struct pstore_zone_info *info = cxt->pstore_zone_info;
+	struct pstore_zone *zone;
+	size_t rcnt, len;
+	struct psz_buffer *buf;
+	struct psz_kmsg_header *hdr;
+	struct timespec64 time = { };
+	unsigned long i;
+	/*
+	 * Recover may on panic, we can't allocate any memory by kmalloc.
+	 * So, we use local array instead.
+	 */
+	char buffer_header[sizeof(*buf) + sizeof(*hdr)] = {0};
+
+	if (!info->read)
+		return -EINVAL;
+
+	len = sizeof(*buf) + sizeof(*hdr);
+	buf = (struct psz_buffer *)buffer_header;
+	for (i = 0; i < cxt->kmsg_max_cnt; i++) {
+		zone = cxt->kpszs[i];
+		if (unlikely(!zone))
+			return -EINVAL;
+
+		rcnt = info->read((char *)buf, len, zone->off);
+		if (rcnt == -ENOMSG) {
+			pr_debug("%s with id %lu may be broken, skip\n",
+					zone->name, i);
+			continue;
+		} else if (rcnt != len) {
+			pr_err("read %s with id %lu failed\n", zone->name, i);
+			return (int)rcnt < 0 ? (int)rcnt : -EIO;
+		}
+
+		if (buf->sig != zone->buffer->sig) {
+			pr_debug("no valid data in kmsg dump zone %lu\n", i);
+			continue;
+		}
+
+		if (zone->buffer_size < atomic_read(&buf->datalen)) {
+			pr_info("found overtop zone: %s: id %lu, off %lld, size %zu\n",
+					zone->name, i, zone->off,
+					zone->buffer_size);
+			continue;
+		}
+
+		hdr = (struct psz_kmsg_header *)buf->data;
+		if (hdr->magic != PSTORE_KMSG_HEADER_MAGIC) {
+			pr_info("found invalid zone: %s: id %lu, off %lld, size %zu\n",
+					zone->name, i, zone->off,
+					zone->buffer_size);
+			continue;
+		}
+
+		/*
+		 * we get the newest zone, and the next one must be the oldest
+		 * or unused zone, because we do write one by one like a circle.
+		 */
+		if (hdr->time.tv_sec >= time.tv_sec) {
+			time.tv_sec = hdr->time.tv_sec;
+			cxt->kmsg_write_cnt = (i + 1) % cxt->kmsg_max_cnt;
+		}
+
+		if (hdr->reason == KMSG_DUMP_OOPS)
+			cxt->oops_counter =
+				max(cxt->oops_counter, hdr->counter);
+		else if (hdr->reason == KMSG_DUMP_PANIC)
+			cxt->panic_counter =
+				max(cxt->panic_counter, hdr->counter);
+
+		if (!atomic_read(&buf->datalen)) {
+			pr_debug("found erased zone: %s: id %lu, off %lld, size %zu, datalen %d\n",
+					zone->name, i, zone->off,
+					zone->buffer_size,
+					atomic_read(&buf->datalen));
+			continue;
+		}
+
+		if (!is_on_panic())
+			zone->should_recover = true;
+		pr_debug("found nice zone: %s: id %lu, off %lld, size %zu, datalen %d\n",
+				zone->name, i, zone->off,
+				zone->buffer_size, atomic_read(&buf->datalen));
+	}
+
+	return 0;
+}
+
+static int psz_kmsg_recover(struct psz_context *cxt)
+{
+	int ret;
+
+	if (!cxt->kpszs)
+		return 0;
+
+	ret = psz_kmsg_recover_meta(cxt);
+	if (ret)
+		goto recover_fail;
+
+	ret = psz_kmsg_recover_data(cxt);
+	if (ret)
+		goto recover_fail;
+
+	return 0;
+recover_fail:
+	pr_debug("psz_recover_kmsg failed\n");
+	return ret;
+}
+
+static int psz_recover_zone(struct psz_context *cxt, struct pstore_zone *zone)
+{
+	struct pstore_zone_info *info = cxt->pstore_zone_info;
+	struct psz_buffer *oldbuf, tmpbuf;
+	int ret = 0;
+	char *buf;
+	ssize_t rcnt, len, start, off;
+
+	if (!zone || zone->oldbuf)
+		return 0;
+
+	if (is_on_panic()) {
+		/* save data as much as possible */
+		psz_flush_dirty_zone(zone);
+		return 0;
+	}
+
+	if (unlikely(!info->read))
+		return -EINVAL;
+
+	len = sizeof(struct psz_buffer);
+	rcnt = info->read((char *)&tmpbuf, len, zone->off);
+	if (rcnt != len) {
+		pr_debug("read zone %s failed\n", zone->name);
+		return (int)rcnt < 0 ? (int)rcnt : -EIO;
+	}
+
+	if (tmpbuf.sig != zone->buffer->sig) {
+		pr_debug("no valid data in zone %s\n", zone->name);
+		return 0;
+	}
+
+	if (zone->buffer_size < atomic_read(&tmpbuf.datalen) ||
+		zone->buffer_size < atomic_read(&tmpbuf.start)) {
+		pr_info("found overtop zone: %s: off %lld, size %zu\n",
+				zone->name, zone->off, zone->buffer_size);
+		/* just keep going */
+		return 0;
+	}
+
+	if (!atomic_read(&tmpbuf.datalen)) {
+		pr_debug("found erased zone: %s: off %lld, size %zu, datalen %d\n",
+				zone->name, zone->off, zone->buffer_size,
+				atomic_read(&tmpbuf.datalen));
+		return 0;
+	}
+
+	pr_debug("found nice zone: %s: off %lld, size %zu, datalen %d\n",
+			zone->name, zone->off, zone->buffer_size,
+			atomic_read(&tmpbuf.datalen));
+
+	len = atomic_read(&tmpbuf.datalen) + sizeof(*oldbuf);
+	oldbuf = kzalloc(len, GFP_KERNEL);
+	if (!oldbuf)
+		return -ENOMEM;
+
+	memcpy(oldbuf, &tmpbuf, sizeof(*oldbuf));
+	buf = (char *)oldbuf + sizeof(*oldbuf);
+	len = atomic_read(&oldbuf->datalen);
+	start = atomic_read(&oldbuf->start);
+	off = zone->off + sizeof(*oldbuf);
+
+	/* get part of data */
+	rcnt = info->read(buf, len - start, off + start);
+	if (rcnt != len - start) {
+		pr_err("read zone %s failed\n", zone->name);
+		ret = (int)rcnt < 0 ? (int)rcnt : -EIO;
+		goto free_oldbuf;
+	}
+
+	/* get the rest of data */
+	rcnt = info->read(buf + len - start, start, off);
+	if (rcnt != start) {
+		pr_err("read zone %s failed\n", zone->name);
+		ret = (int)rcnt < 0 ? (int)rcnt : -EIO;
+		goto free_oldbuf;
+	}
+
+	zone->oldbuf = oldbuf;
+	psz_flush_dirty_zone(zone);
+	return 0;
+
+free_oldbuf:
+	kfree(oldbuf);
+	return ret;
+}
+
+static int psz_recover_zones(struct psz_context *cxt,
+		struct pstore_zone **zones, unsigned int cnt)
+{
+	int ret;
+	unsigned int i;
+	struct pstore_zone *zone;
+
+	if (!zones)
+		return 0;
+
+	for (i = 0; i < cnt; i++) {
+		zone = zones[i];
+		if (unlikely(!zone))
+			continue;
+		ret = psz_recover_zone(cxt, zone);
+		if (ret)
+			goto recover_fail;
+	}
+
+	return 0;
+recover_fail:
+	pr_debug("recover %s[%u] failed\n", zone->name, i);
+	return ret;
+}
+
+/**
+ * psz_recovery() - recover data from storage
+ * @cxt: the context of pstore/zone
+ *
+ * recovery means reading data back from storage after rebooting
+ *
+ * Return: 0 on success, others on failure.
+ */
+static inline int psz_recovery(struct psz_context *cxt)
+{
+	int ret;
+
+	if (atomic_read(&cxt->recovered))
+		return 0;
+
+	ret = psz_kmsg_recover(cxt);
+	if (ret)
+		goto out;
+
+	ret = psz_recover_zone(cxt, cxt->ppsz);
+	if (ret)
+		goto out;
+
+	ret = psz_recover_zone(cxt, cxt->cpsz);
+	if (ret)
+		goto out;
+
+	ret = psz_recover_zones(cxt, cxt->fpszs, cxt->ftrace_max_cnt);
+
+out:
+	if (unlikely(ret))
+		pr_err("recover failed\n");
+	else {
+		pr_debug("recover end!\n");
+		atomic_set(&cxt->recovered, 1);
+	}
+	return ret;
+}
+
+static int psz_pstore_open(struct pstore_info *psi)
+{
+	struct psz_context *cxt = psi->data;
+
+	cxt->kmsg_read_cnt = 0;
+	cxt->pmsg_read_cnt = 0;
+	cxt->console_read_cnt = 0;
+	cxt->ftrace_read_cnt = 0;
+	return 0;
+}
+
+static inline bool psz_old_ok(struct pstore_zone *zone)
+{
+	if (zone && zone->oldbuf && atomic_read(&zone->oldbuf->datalen))
+		return true;
+	return false;
+}
+
+static inline bool psz_ok(struct pstore_zone *zone)
+{
+	if (zone && zone->buffer && buffer_datalen(zone))
+		return true;
+	return false;
+}
+
+static inline int psz_kmsg_erase(struct psz_context *cxt,
+		struct pstore_zone *zone, struct pstore_record *record)
+{
+	struct psz_buffer *buffer = zone->buffer;
+	struct psz_kmsg_header *hdr =
+		(struct psz_kmsg_header *)buffer->data;
+	size_t size;
+
+	if (unlikely(!psz_ok(zone)))
+		return 0;
+
+	/* this zone is already updated, no need to erase */
+	if (record->count != hdr->counter)
+		return 0;
+
+	size = buffer_datalen(zone) + sizeof(*zone->buffer);
+	atomic_set(&zone->buffer->datalen, 0);
+	if (cxt->pstore_zone_info->erase)
+		return cxt->pstore_zone_info->erase(size, zone->off);
+	else
+		return psz_zone_write(zone, FLUSH_META, NULL, 0, 0);
+}
+
+static inline int psz_record_erase(struct psz_context *cxt,
+		struct pstore_zone *zone)
+{
+	if (unlikely(!psz_old_ok(zone)))
+		return 0;
+
+	kfree(zone->oldbuf);
+	zone->oldbuf = NULL;
+	/*
+	 * if there are new data in zone buffer, that means the old data
+	 * are already invalid. It is no need to flush 0 (erase) to
+	 * block device.
+	 */
+	if (!buffer_datalen(zone))
+		return psz_zone_write(zone, FLUSH_META, NULL, 0, 0);
+	psz_flush_dirty_zone(zone);
+	return 0;
+}
+
+static int psz_pstore_erase(struct pstore_record *record)
+{
+	struct psz_context *cxt = record->psi->data;
+
+	switch (record->type) {
+	case PSTORE_TYPE_DMESG:
+		if (record->id >= cxt->kmsg_max_cnt)
+			return -EINVAL;
+		return psz_kmsg_erase(cxt, cxt->kpszs[record->id], record);
+	case PSTORE_TYPE_PMSG:
+		return psz_record_erase(cxt, cxt->ppsz);
+	case PSTORE_TYPE_CONSOLE:
+		return psz_record_erase(cxt, cxt->cpsz);
+	case PSTORE_TYPE_FTRACE:
+		if (record->id >= cxt->ftrace_max_cnt)
+			return -EINVAL;
+		return psz_record_erase(cxt, cxt->fpszs[record->id]);
+	default: return -EINVAL;
+	}
+}
+
+static void psz_write_kmsg_hdr(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	struct psz_context *cxt = record->psi->data;
+	struct psz_buffer *buffer = zone->buffer;
+	struct psz_kmsg_header *hdr =
+		(struct psz_kmsg_header *)buffer->data;
+
+	hdr->magic = PSTORE_KMSG_HEADER_MAGIC;
+	hdr->compressed = record->compressed;
+	hdr->time.tv_sec = record->time.tv_sec;
+	hdr->time.tv_nsec = record->time.tv_nsec;
+	hdr->reason = record->reason;
+	if (hdr->reason == KMSG_DUMP_OOPS)
+		hdr->counter = ++cxt->oops_counter;
+	else if (hdr->reason == KMSG_DUMP_PANIC)
+		hdr->counter = ++cxt->panic_counter;
+	else
+		hdr->counter = 0;
+}
+
+/*
+ * In case zone is broken, which may occur to MTD device, we try each zones,
+ * start at cxt->kmsg_write_cnt.
+ */
+static inline int notrace psz_kmsg_write_record(struct psz_context *cxt,
+		struct pstore_record *record)
+{
+	size_t size, hlen;
+	struct pstore_zone *zone;
+	unsigned int i;
+
+	for (i = 0; i < cxt->kmsg_max_cnt; i++) {
+		unsigned int zonenum, len;
+		int ret;
+
+		zonenum = (cxt->kmsg_write_cnt + i) % cxt->kmsg_max_cnt;
+		zone = cxt->kpszs[zonenum];
+		if (unlikely(!zone))
+			return -ENOSPC;
+
+		/* avoid destroying old data, allocate a new one */
+		len = zone->buffer_size + sizeof(*zone->buffer);
+		zone->oldbuf = zone->buffer;
+		zone->buffer = kzalloc(len, GFP_KERNEL);
+		if (!zone->buffer) {
+			zone->buffer = zone->oldbuf;
+			return -ENOMEM;
+		}
+		zone->buffer->sig = zone->oldbuf->sig;
+
+		pr_debug("write %s to zone id %d\n", zone->name, zonenum);
+		psz_write_kmsg_hdr(zone, record);
+		hlen = sizeof(struct psz_kmsg_header);
+		size = min_t(size_t, record->size, zone->buffer_size - hlen);
+		ret = psz_zone_write(zone, FLUSH_ALL, record->buf, size, hlen);
+		if (likely(!ret || ret != -ENOMSG)) {
+			cxt->kmsg_write_cnt = zonenum + 1;
+			cxt->kmsg_write_cnt %= cxt->kmsg_max_cnt;
+			/* no need to try next zone, free last zone buffer */
+			kfree(zone->oldbuf);
+			zone->oldbuf = NULL;
+			return ret;
+		}
+
+		pr_debug("zone %u may be broken, try next dmesg zone\n",
+				zonenum);
+		kfree(zone->buffer);
+		zone->buffer = zone->oldbuf;
+		zone->oldbuf = NULL;
+	}
+
+	return -EBUSY;
+}
+
+static int notrace psz_kmsg_write(struct psz_context *cxt,
+		struct pstore_record *record)
+{
+	int ret;
+
+	/*
+	 * Explicitly only take the first part of any new crash.
+	 * If our buffer is larger than kmsg_bytes, this can never happen,
+	 * and if our buffer is smaller than kmsg_bytes, we don't want the
+	 * report split across multiple records.
+	 */
+	if (record->part != 1)
+		return -ENOSPC;
+
+	if (!cxt->kpszs)
+		return -ENOSPC;
+
+	ret = psz_kmsg_write_record(cxt, record);
+	if (!ret && is_on_panic()) {
+		/* ensure all data are flushed to storage when panic */
+		pr_debug("try to flush other dirty zones\n");
+		psz_flush_all_dirty_zones(NULL);
+	}
+
+	/* always return 0 as we had handled it on buffer */
+	return 0;
+}
+
+static int notrace psz_record_write(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	size_t start, rem;
+	bool is_full_data = false;
+	char *buf;
+	int cnt;
+
+	if (!zone || !record)
+		return -ENOSPC;
+
+	if (atomic_read(&zone->buffer->datalen) >= zone->buffer_size)
+		is_full_data = true;
+
+	cnt = record->size;
+	buf = record->buf;
+	if (unlikely(cnt > zone->buffer_size)) {
+		buf += cnt - zone->buffer_size;
+		cnt = zone->buffer_size;
+	}
+
+	start = buffer_start(zone);
+	rem = zone->buffer_size - start;
+	if (unlikely(rem < cnt)) {
+		psz_zone_write(zone, FLUSH_PART, buf, rem, start);
+		buf += rem;
+		cnt -= rem;
+		start = 0;
+		is_full_data = true;
+	}
+
+	atomic_set(&zone->buffer->start, cnt + start);
+	psz_zone_write(zone, FLUSH_PART, buf, cnt, start);
+
+	/**
+	 * psz_zone_write will set datalen as start + cnt.
+	 * It work if actual data length lesser than buffer size.
+	 * If data length greater than buffer size, pmsg will rewrite to
+	 * beginning of zone, which make buffer->datalen wrongly.
+	 * So we should reset datalen as buffer size once actual data length
+	 * greater than buffer size.
+	 */
+	if (is_full_data) {
+		atomic_set(&zone->buffer->datalen, zone->buffer_size);
+		psz_zone_write(zone, FLUSH_META, NULL, 0, 0);
+	}
+	return 0;
+}
+
+static int notrace psz_pstore_write(struct pstore_record *record)
+{
+	struct psz_context *cxt = record->psi->data;
+
+	if (record->type == PSTORE_TYPE_DMESG &&
+			record->reason == KMSG_DUMP_PANIC)
+		atomic_set(&cxt->on_panic, 1);
+
+	/*
+	 * if on panic, do not write except panic records
+	 * Fix case that panic_write prints log which wakes up console backend.
+	 */
+	if (is_on_panic() && record->type != PSTORE_TYPE_DMESG)
+		return -EBUSY;
+
+	switch (record->type) {
+	case PSTORE_TYPE_DMESG:
+		return psz_kmsg_write(cxt, record);
+	case PSTORE_TYPE_CONSOLE:
+		return psz_record_write(cxt->cpsz, record);
+	case PSTORE_TYPE_PMSG:
+		return psz_record_write(cxt->ppsz, record);
+	case PSTORE_TYPE_FTRACE: {
+		int zonenum = smp_processor_id();
+
+		if (!cxt->fpszs)
+			return -ENOSPC;
+		return psz_record_write(cxt->fpszs[zonenum], record);
+	}
+	default:
+		return -EINVAL;
+	}
+}
+
+static struct pstore_zone *psz_read_next_zone(struct psz_context *cxt)
+{
+	struct pstore_zone *zone = NULL;
+
+	while (cxt->kmsg_read_cnt < cxt->kmsg_max_cnt) {
+		zone = cxt->kpszs[cxt->kmsg_read_cnt++];
+		if (psz_ok(zone))
+			return zone;
+	}
+
+	if (cxt->ftrace_read_cnt < cxt->ftrace_max_cnt)
+		/*
+		 * No need psz_old_ok(). Let psz_ftrace_read() do so for
+		 * combination. psz_ftrace_read() should traverse over
+		 * all zones in case of some zone without data.
+		 */
+		return cxt->fpszs[cxt->ftrace_read_cnt++];
+
+	if (cxt->pmsg_read_cnt == 0) {
+		cxt->pmsg_read_cnt++;
+		zone = cxt->ppsz;
+		if (psz_old_ok(zone))
+			return zone;
+	}
+
+	if (cxt->console_read_cnt == 0) {
+		cxt->console_read_cnt++;
+		zone = cxt->cpsz;
+		if (psz_old_ok(zone))
+			return zone;
+	}
+
+	return NULL;
+}
+
+static int psz_kmsg_read_hdr(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	struct psz_buffer *buffer = zone->buffer;
+	struct psz_kmsg_header *hdr =
+		(struct psz_kmsg_header *)buffer->data;
+
+	if (hdr->magic != PSTORE_KMSG_HEADER_MAGIC)
+		return -EINVAL;
+	record->compressed = hdr->compressed;
+	record->time.tv_sec = hdr->time.tv_sec;
+	record->time.tv_nsec = hdr->time.tv_nsec;
+	record->reason = hdr->reason;
+	record->count = hdr->counter;
+	return 0;
+}
+
+static ssize_t psz_kmsg_read(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	ssize_t size, hlen = 0;
+
+	size = buffer_datalen(zone);
+	/* Clear and skip this kmsg dump record if it has no valid header */
+	if (psz_kmsg_read_hdr(zone, record)) {
+		atomic_set(&zone->buffer->datalen, 0);
+		atomic_set(&zone->dirty, 0);
+		return -ENOMSG;
+	}
+	size -= sizeof(struct psz_kmsg_header);
+
+	if (!record->compressed) {
+		char *buf = kasprintf(GFP_KERNEL, "%s: Total %d times\n",
+				      kmsg_dump_reason_str(record->reason),
+				      record->count);
+		hlen = strlen(buf);
+		record->buf = krealloc(buf, hlen + size, GFP_KERNEL);
+		if (!record->buf) {
+			kfree(buf);
+			return -ENOMEM;
+		}
+	} else {
+		record->buf = kmalloc(size, GFP_KERNEL);
+		if (!record->buf)
+			return -ENOMEM;
+	}
+
+	size = psz_zone_read_buffer(zone, record->buf + hlen, size,
+			sizeof(struct psz_kmsg_header));
+	if (unlikely(size < 0)) {
+		kfree(record->buf);
+		return -ENOMSG;
+	}
+
+	return size + hlen;
+}
+
+/* try to combine all ftrace zones */
+static ssize_t psz_ftrace_read(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	struct psz_context *cxt;
+	struct psz_buffer *buf;
+	int ret;
+
+	if (!zone || !record)
+		return -ENOSPC;
+
+	if (!psz_old_ok(zone))
+		goto out;
+
+	buf = (struct psz_buffer *)zone->oldbuf;
+	if (!buf)
+		return -ENOMSG;
+
+	ret = pstore_ftrace_combine_log(&record->buf, &record->size,
+			(char *)buf->data, atomic_read(&buf->datalen));
+	if (unlikely(ret))
+		return ret;
+
+out:
+	cxt = record->psi->data;
+	if (cxt->ftrace_read_cnt < cxt->ftrace_max_cnt)
+		/* then, read next ftrace zone */
+		return -ENOMSG;
+	record->id = 0;
+	return record->size ? record->size : -ENOMSG;
+}
+
+static ssize_t psz_record_read(struct pstore_zone *zone,
+		struct pstore_record *record)
+{
+	size_t len;
+	struct psz_buffer *buf;
+
+	if (!zone || !record)
+		return -ENOSPC;
+
+	buf = (struct psz_buffer *)zone->oldbuf;
+	if (!buf)
+		return -ENOMSG;
+
+	len = atomic_read(&buf->datalen);
+	record->buf = kmalloc(len, GFP_KERNEL);
+	if (!record->buf)
+		return -ENOMEM;
+
+	if (unlikely(psz_zone_read_oldbuf(zone, record->buf, len, 0))) {
+		kfree(record->buf);
+		return -ENOMSG;
+	}
+
+	return len;
+}
+
+static ssize_t psz_pstore_read(struct pstore_record *record)
+{
+	struct psz_context *cxt = record->psi->data;
+	ssize_t (*readop)(struct pstore_zone *zone,
+			struct pstore_record *record);
+	struct pstore_zone *zone;
+	ssize_t ret;
+
+	/* before read, we must recover from storage */
+	ret = psz_recovery(cxt);
+	if (ret)
+		return ret;
+
+next_zone:
+	zone = psz_read_next_zone(cxt);
+	if (!zone)
+		return 0;
+
+	record->type = zone->type;
+	switch (record->type) {
+	case PSTORE_TYPE_DMESG:
+		readop = psz_kmsg_read;
+		record->id = cxt->kmsg_read_cnt - 1;
+		break;
+	case PSTORE_TYPE_FTRACE:
+		readop = psz_ftrace_read;
+		break;
+	case PSTORE_TYPE_CONSOLE:
+		fallthrough;
+	case PSTORE_TYPE_PMSG:
+		readop = psz_record_read;
+		break;
+	default:
+		goto next_zone;
+	}
+
+	ret = readop(zone, record);
+	if (ret == -ENOMSG)
+		goto next_zone;
+	return ret;
+}
+
+static struct psz_context pstore_zone_cxt = {
+	.pstore_zone_info_lock =
+		__MUTEX_INITIALIZER(pstore_zone_cxt.pstore_zone_info_lock),
+	.recovered = ATOMIC_INIT(0),
+	.on_panic = ATOMIC_INIT(0),
+	.pstore = {
+		.owner = THIS_MODULE,
+		.open = psz_pstore_open,
+		.read = psz_pstore_read,
+		.write = psz_pstore_write,
+		.erase = psz_pstore_erase,
+	},
+};
+
+static void psz_free_zone(struct pstore_zone **pszone)
+{
+	struct pstore_zone *zone = *pszone;
+
+	if (!zone)
+		return;
+
+	kfree(zone->buffer);
+	kfree(zone);
+	*pszone = NULL;
+}
+
+static void psz_free_zones(struct pstore_zone ***pszones, unsigned int *cnt)
+{
+	struct pstore_zone **zones = *pszones;
+
+	if (!zones)
+		return;
+
+	while (*cnt > 0) {
+		(*cnt)--;
+		psz_free_zone(&(zones[*cnt]));
+	}
+	kfree(zones);
+	*pszones = NULL;
+}
+
+static void psz_free_all_zones(struct psz_context *cxt)
+{
+	if (cxt->kpszs)
+		psz_free_zones(&cxt->kpszs, &cxt->kmsg_max_cnt);
+	if (cxt->ppsz)
+		psz_free_zone(&cxt->ppsz);
+	if (cxt->cpsz)
+		psz_free_zone(&cxt->cpsz);
+	if (cxt->fpszs)
+		psz_free_zones(&cxt->fpszs, &cxt->ftrace_max_cnt);
+}
+
+static struct pstore_zone *psz_init_zone(enum pstore_type_id type,
+		loff_t *off, size_t size)
+{
+	struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info;
+	struct pstore_zone *zone;
+	const char *name = pstore_type_to_name(type);
+
+	if (!size)
+		return NULL;
+
+	if (*off + size > info->total_size) {
+		pr_err("no room for %s (0x%zx@0x%llx over 0x%lx)\n",
+			name, size, *off, info->total_size);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	zone = kzalloc(sizeof(struct pstore_zone), GFP_KERNEL);
+	if (!zone)
+		return ERR_PTR(-ENOMEM);
+
+	zone->buffer = kmalloc(size, GFP_KERNEL);
+	if (!zone->buffer) {
+		kfree(zone);
+		return ERR_PTR(-ENOMEM);
+	}
+	memset(zone->buffer, 0xFF, size);
+	zone->off = *off;
+	zone->name = name;
+	zone->type = type;
+	zone->buffer_size = size - sizeof(struct psz_buffer);
+	zone->buffer->sig = type ^ PSZ_SIG;
+	zone->oldbuf = NULL;
+	atomic_set(&zone->dirty, 0);
+	atomic_set(&zone->buffer->datalen, 0);
+	atomic_set(&zone->buffer->start, 0);
+
+	*off += size;
+
+	pr_debug("pszone %s: off 0x%llx, %zu header, %zu data\n", zone->name,
+			zone->off, sizeof(*zone->buffer), zone->buffer_size);
+	return zone;
+}
+
+static struct pstore_zone **psz_init_zones(enum pstore_type_id type,
+	loff_t *off, size_t total_size, ssize_t record_size,
+	unsigned int *cnt)
+{
+	struct pstore_zone_info *info = pstore_zone_cxt.pstore_zone_info;
+	struct pstore_zone **zones, *zone;
+	const char *name = pstore_type_to_name(type);
+	int c, i;
+
+	*cnt = 0;
+	if (!total_size || !record_size)
+		return NULL;
+
+	if (*off + total_size > info->total_size) {
+		pr_err("no room for zones %s (0x%zx@0x%llx over 0x%lx)\n",
+			name, total_size, *off, info->total_size);
+		return ERR_PTR(-ENOMEM);
+	}
+
+	c = total_size / record_size;
+	zones = kcalloc(c, sizeof(*zones), GFP_KERNEL);
+	if (!zones) {
+		pr_err("allocate for zones %s failed\n", name);
+		return ERR_PTR(-ENOMEM);
+	}
+	memset(zones, 0, c * sizeof(*zones));
+
+	for (i = 0; i < c; i++) {
+		zone = psz_init_zone(type, off, record_size);
+		if (!zone || IS_ERR(zone)) {
+			pr_err("initialize zones %s failed\n", name);
+			psz_free_zones(&zones, &i);
+			return (void *)zone;
+		}
+		zones[i] = zone;
+	}
+
+	*cnt = c;
+	return zones;
+}
+
+static int psz_alloc_zones(struct psz_context *cxt)
+{
+	struct pstore_zone_info *info = cxt->pstore_zone_info;
+	loff_t off = 0;
+	int err;
+	size_t off_size = 0;
+
+	off_size += info->pmsg_size;
+	cxt->ppsz = psz_init_zone(PSTORE_TYPE_PMSG, &off, info->pmsg_size);
+	if (IS_ERR(cxt->ppsz)) {
+		err = PTR_ERR(cxt->ppsz);
+		cxt->ppsz = NULL;
+		goto free_out;
+	}
+
+	off_size += info->console_size;
+	cxt->cpsz = psz_init_zone(PSTORE_TYPE_CONSOLE, &off,
+			info->console_size);
+	if (IS_ERR(cxt->cpsz)) {
+		err = PTR_ERR(cxt->cpsz);
+		cxt->cpsz = NULL;
+		goto free_out;
+	}
+
+	off_size += info->ftrace_size;
+	cxt->fpszs = psz_init_zones(PSTORE_TYPE_FTRACE, &off,
+			info->ftrace_size,
+			info->ftrace_size / nr_cpu_ids,
+			&cxt->ftrace_max_cnt);
+	if (IS_ERR(cxt->fpszs)) {
+		err = PTR_ERR(cxt->fpszs);
+		cxt->fpszs = NULL;
+		goto free_out;
+	}
+
+	cxt->kpszs = psz_init_zones(PSTORE_TYPE_DMESG, &off,
+			info->total_size - off_size,
+			info->kmsg_size, &cxt->kmsg_max_cnt);
+	if (IS_ERR(cxt->kpszs)) {
+		err = PTR_ERR(cxt->kpszs);
+		cxt->kpszs = NULL;
+		goto free_out;
+	}
+
+	return 0;
+free_out:
+	psz_free_all_zones(cxt);
+	return err;
+}
+
+/**
+ * register_pstore_zone() - register to pstore/zone
+ *
+ * @info: back-end driver information. See &struct pstore_zone_info.
+ *
+ * Only one back-end at one time.
+ *
+ * Return: 0 on success, others on failure.
+ */
+int register_pstore_zone(struct pstore_zone_info *info)
+{
+	int err = -EINVAL;
+	struct psz_context *cxt = &pstore_zone_cxt;
+
+	if (info->total_size < 4096) {
+		pr_warn("total_size must be >= 4096\n");
+		return -EINVAL;
+	}
+
+	if (!info->kmsg_size && !info->pmsg_size && !info->console_size &&
+	    !info->ftrace_size) {
+		pr_warn("at least one record size must be non-zero\n");
+		return -EINVAL;
+	}
+
+	if (!info->name || !info->name[0])
+		return -EINVAL;
+
+#define check_size(name, size) {					\
+		if (info->name > 0 && info->name < (size)) {		\
+			pr_err(#name " must be over %d\n", (size));	\
+			return -EINVAL;					\
+		}							\
+		if (info->name & (size - 1)) {				\
+			pr_err(#name " must be a multiple of %d\n",	\
+					(size));			\
+			return -EINVAL;					\
+		}							\
+	}
+
+	check_size(total_size, 4096);
+	check_size(kmsg_size, SECTOR_SIZE);
+	check_size(pmsg_size, SECTOR_SIZE);
+	check_size(console_size, SECTOR_SIZE);
+	check_size(ftrace_size, SECTOR_SIZE);
+
+#undef check_size
+
+	/*
+	 * the @read and @write must be applied.
+	 * if no @read, pstore may mount failed.
+	 * if no @write, pstore do not support to remove record file.
+	 */
+	if (!info->read || !info->write) {
+		pr_err("no valid general read/write interface\n");
+		return -EINVAL;
+	}
+
+	mutex_lock(&cxt->pstore_zone_info_lock);
+	if (cxt->pstore_zone_info) {
+		pr_warn("'%s' already loaded: ignoring '%s'\n",
+				cxt->pstore_zone_info->name, info->name);
+		mutex_unlock(&cxt->pstore_zone_info_lock);
+		return -EBUSY;
+	}
+	cxt->pstore_zone_info = info;
+
+	pr_debug("register %s with properties:\n", info->name);
+	pr_debug("\ttotal size : %ld Bytes\n", info->total_size);
+	pr_debug("\tkmsg size : %ld Bytes\n", info->kmsg_size);
+	pr_debug("\tpmsg size : %ld Bytes\n", info->pmsg_size);
+	pr_debug("\tconsole size : %ld Bytes\n", info->console_size);
+	pr_debug("\tftrace size : %ld Bytes\n", info->ftrace_size);
+
+	err = psz_alloc_zones(cxt);
+	if (err) {
+		pr_err("alloc zones failed\n");
+		goto fail_out;
+	}
+
+	if (info->kmsg_size) {
+		cxt->pstore.bufsize = cxt->kpszs[0]->buffer_size -
+			sizeof(struct psz_kmsg_header);
+		cxt->pstore.buf = kzalloc(cxt->pstore.bufsize, GFP_KERNEL);
+		if (!cxt->pstore.buf) {
+			err = -ENOMEM;
+			goto fail_free;
+		}
+	}
+	cxt->pstore.data = cxt;
+
+	pr_info("registered %s as backend for", info->name);
+	cxt->pstore.max_reason = info->max_reason;
+	cxt->pstore.name = info->name;
+	if (info->kmsg_size) {
+		cxt->pstore.flags |= PSTORE_FLAGS_DMESG;
+		pr_cont(" kmsg(%s",
+			kmsg_dump_reason_str(cxt->pstore.max_reason));
+		if (cxt->pstore_zone_info->panic_write)
+			pr_cont(",panic_write");
+		pr_cont(")");
+	}
+	if (info->pmsg_size) {
+		cxt->pstore.flags |= PSTORE_FLAGS_PMSG;
+		pr_cont(" pmsg");
+	}
+	if (info->console_size) {
+		cxt->pstore.flags |= PSTORE_FLAGS_CONSOLE;
+		pr_cont(" console");
+	}
+	if (info->ftrace_size) {
+		cxt->pstore.flags |= PSTORE_FLAGS_FTRACE;
+		pr_cont(" ftrace");
+	}
+	pr_cont("\n");
+
+	err = pstore_register(&cxt->pstore);
+	if (err) {
+		pr_err("registering with pstore failed\n");
+		goto fail_free;
+	}
+	mutex_unlock(&pstore_zone_cxt.pstore_zone_info_lock);
+
+	return 0;
+
+fail_free:
+	kfree(cxt->pstore.buf);
+	cxt->pstore.buf = NULL;
+	cxt->pstore.bufsize = 0;
+	psz_free_all_zones(cxt);
+fail_out:
+	pstore_zone_cxt.pstore_zone_info = NULL;
+	mutex_unlock(&pstore_zone_cxt.pstore_zone_info_lock);
+	return err;
+}
+EXPORT_SYMBOL_GPL(register_pstore_zone);
+
+/**
+ * unregister_pstore_zone() - unregister to pstore/zone
+ *
+ * @info: back-end driver information. See struct pstore_zone_info.
+ */
+void unregister_pstore_zone(struct pstore_zone_info *info)
+{
+	struct psz_context *cxt = &pstore_zone_cxt;
+
+	mutex_lock(&cxt->pstore_zone_info_lock);
+	if (!cxt->pstore_zone_info) {
+		mutex_unlock(&cxt->pstore_zone_info_lock);
+		return;
+	}
+
+	/* Stop incoming writes from pstore. */
+	pstore_unregister(&cxt->pstore);
+
+	/* Flush any pending writes. */
+	psz_flush_all_dirty_zones(NULL);
+	flush_delayed_work(&psz_cleaner);
+
+	/* Clean up allocations. */
+	kfree(cxt->pstore.buf);
+	cxt->pstore.buf = NULL;
+	cxt->pstore.bufsize = 0;
+	cxt->pstore_zone_info = NULL;
+
+	psz_free_all_zones(cxt);
+
+	/* Clear counters and zone state. */
+	cxt->oops_counter = 0;
+	cxt->panic_counter = 0;
+	atomic_set(&cxt->recovered, 0);
+	atomic_set(&cxt->on_panic, 0);
+
+	mutex_unlock(&cxt->pstore_zone_info_lock);
+}
+EXPORT_SYMBOL_GPL(unregister_pstore_zone);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("WeiXiong Liao <liaoweixiong@allwinnertech.com>");
+MODULE_AUTHOR("Kees Cook <keescook@chromium.org>");
+MODULE_DESCRIPTION("Storage Manager for pstore/blk");
diff --git a/fs/reiserfs/xattr_security.c b/fs/reiserfs/xattr_security.c
index 20be9a0..eedfa07 100644
--- a/fs/reiserfs/xattr_security.c
+++ b/fs/reiserfs/xattr_security.c
@@ -11,7 +11,8 @@
 
 static int
 security_get(const struct xattr_handler *handler, struct dentry *unused,
-	     struct inode *inode, const char *name, void *buffer, size_t size)
+	     struct inode *inode, const char *name, void *buffer, size_t size,
+	     int flags)
 {
 	if (IS_PRIVATE(inode))
 		return -EPERM;
diff --git a/fs/reiserfs/xattr_trusted.c b/fs/reiserfs/xattr_trusted.c
index 5ed48da..2d11d98 100644
--- a/fs/reiserfs/xattr_trusted.c
+++ b/fs/reiserfs/xattr_trusted.c
@@ -10,7 +10,8 @@
 
 static int
 trusted_get(const struct xattr_handler *handler, struct dentry *unused,
-	    struct inode *inode, const char *name, void *buffer, size_t size)
+	    struct inode *inode, const char *name, void *buffer, size_t size,
+	    int flags)
 {
 	if (!capable(CAP_SYS_ADMIN) || IS_PRIVATE(inode))
 		return -EPERM;
diff --git a/fs/reiserfs/xattr_user.c b/fs/reiserfs/xattr_user.c
index a573ca4..2a59d85 100644
--- a/fs/reiserfs/xattr_user.c
+++ b/fs/reiserfs/xattr_user.c
@@ -9,7 +9,8 @@
 
 static int
 user_get(const struct xattr_handler *handler, struct dentry *unused,
-	 struct inode *inode, const char *name, void *buffer, size_t size)
+	 struct inode *inode, const char *name, void *buffer, size_t size,
+	 int flags)
 {
 	if (!reiserfs_xattrs_user(inode->i_sb))
 		return -EOPNOTSUPP;
diff --git a/fs/squashfs/xattr.c b/fs/squashfs/xattr.c
index e1e3f3d..d8d58c9 100644
--- a/fs/squashfs/xattr.c
+++ b/fs/squashfs/xattr.c
@@ -204,7 +204,7 @@
 				      struct dentry *unused,
 				      struct inode *inode,
 				      const char *name,
-				      void *buffer, size_t size)
+				      void *buffer, size_t size, int flags)
 {
 	return squashfs_xattr_get(inode, handler->flags, name,
 		buffer, size);
diff --git a/fs/sync.c b/fs/sync.c
index 4d1ff01..863e257 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -9,7 +9,7 @@
 #include <linux/slab.h>
 #include <linux/export.h>
 #include <linux/namei.h>
-#include <linux/sched.h>
+#include <linux/sched/xacct.h>
 #include <linux/writeback.h>
 #include <linux/syscalls.h>
 #include <linux/linkage.h>
@@ -161,7 +161,7 @@
 {
 	struct fd f = fdget(fd);
 	struct super_block *sb;
-	int ret;
+	int ret, ret2;
 
 	if (!f.file)
 		return -EBADF;
@@ -171,8 +171,10 @@
 	ret = sync_filesystem(sb);
 	up_read(&sb->s_umount);
 
+	ret2 = errseq_check_and_advance(&sb->s_wb_err, &f.file->f_sb_err);
+
 	fdput(f);
-	return ret;
+	return ret ? ret : ret2;
 }
 
 /**
@@ -220,6 +222,7 @@
 	if (f.file) {
 		ret = vfs_fsync(f.file, datasync);
 		fdput(f);
+		inc_syscfs(current);
 	}
 	return ret;
 }
diff --git a/fs/ubifs/Kconfig b/fs/ubifs/Kconfig
index 69932bc..45d3d20 100644
--- a/fs/ubifs/Kconfig
+++ b/fs/ubifs/Kconfig
@@ -12,6 +12,7 @@
 	select CRYPTO_ZSTD if UBIFS_FS_ZSTD
 	select CRYPTO_HASH_INFO
 	select UBIFS_FS_XATTR if FS_ENCRYPTION
+	select FS_ENCRYPTION_ALGS if FS_ENCRYPTION
 	depends on MTD_UBI
 	help
 	  UBIFS is a file system for flash devices which works on top of UBI.
diff --git a/fs/ubifs/dir.c b/fs/ubifs/dir.c
index eeb93f0..fe16152 100644
--- a/fs/ubifs/dir.c
+++ b/fs/ubifs/dir.c
@@ -81,19 +81,6 @@
 	struct ubifs_inode *ui;
 	bool encrypted = false;
 
-	if (ubifs_crypt_is_encrypted(dir)) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err) {
-			ubifs_err(c, "fscrypt_get_encryption_info failed: %i", err);
-			return ERR_PTR(err);
-		}
-
-		if (!fscrypt_has_encryption_key(dir))
-			return ERR_PTR(-EPERM);
-
-		encrypted = true;
-	}
-
 	inode = new_inode(c->vfs_sb);
 	ui = ubifs_inode(inode);
 	if (!inode)
@@ -112,6 +99,12 @@
 			 current_time(inode);
 	inode->i_mapping->nrpages = 0;
 
+	err = fscrypt_prepare_new_inode(dir, inode, &encrypted);
+	if (err) {
+		ubifs_err(c, "fscrypt_prepare_new_inode failed: %i", err);
+		goto out_iput;
+	}
+
 	switch (mode & S_IFMT) {
 	case S_IFREG:
 		inode->i_mapping->a_ops = &ubifs_file_address_operations;
@@ -131,7 +124,6 @@
 	case S_IFBLK:
 	case S_IFCHR:
 		inode->i_op  = &ubifs_file_inode_operations;
-		encrypted = false;
 		break;
 	default:
 		BUG();
@@ -151,9 +143,8 @@
 		if (c->highest_inum >= INUM_WATERMARK) {
 			spin_unlock(&c->cnt_lock);
 			ubifs_err(c, "out of inode numbers");
-			make_bad_inode(inode);
-			iput(inode);
-			return ERR_PTR(-EINVAL);
+			err = -EINVAL;
+			goto out_iput;
 		}
 		ubifs_warn(c, "running out of inode numbers (current %lu, max %u)",
 			   (unsigned long)c->highest_inum, INUM_WATERMARK);
@@ -171,16 +162,19 @@
 	spin_unlock(&c->cnt_lock);
 
 	if (encrypted) {
-		err = fscrypt_inherit_context(dir, inode, &encrypted, true);
+		err = fscrypt_set_context(inode, NULL);
 		if (err) {
-			ubifs_err(c, "fscrypt_inherit_context failed: %i", err);
-			make_bad_inode(inode);
-			iput(inode);
-			return ERR_PTR(err);
+			ubifs_err(c, "fscrypt_set_context failed: %i", err);
+			goto out_iput;
 		}
 	}
 
 	return inode;
+
+out_iput:
+	make_bad_inode(inode);
+	iput(inode);
+	return ERR_PTR(err);
 }
 
 static int dbg_check_name(const struct ubifs_info *c,
@@ -209,6 +203,7 @@
 	dbg_gen("'%pd' in dir ino %lu", dentry, dir->i_ino);
 
 	err = fscrypt_prepare_lookup(dir, dentry, &nm);
+	generic_set_encrypted_ci_d_ops(dentry);
 	if (err == -ENOENT)
 		return d_splice_alias(NULL, dentry);
 	if (err)
@@ -225,9 +220,7 @@
 		goto done;
 	}
 
-	if (nm.hash) {
-		ubifs_assert(c, fname_len(&nm) == 0);
-		ubifs_assert(c, fname_name(&nm) == NULL);
+	if (fname_name(&nm) == NULL) {
 		if (nm.hash & ~UBIFS_S_KEY_HASH_MASK)
 			goto done; /* ENOENT */
 		dent_key_init_hash(c, &key, dir->i_ino, nm.hash);
@@ -263,7 +256,7 @@
 		goto done;
 	}
 
-	if (ubifs_crypt_is_encrypted(dir) &&
+	if (IS_ENCRYPTED(dir) &&
 	    (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
 	    !fscrypt_has_permitted_context(dir, inode)) {
 		ubifs_warn(c, "Inconsistent encryption contexts: %lu/%lu",
@@ -510,7 +503,7 @@
 	struct ubifs_dent_node *dent;
 	struct inode *dir = file_inode(file);
 	struct ubifs_info *c = dir->i_sb->s_fs_info;
-	bool encrypted = ubifs_crypt_is_encrypted(dir);
+	bool encrypted = IS_ENCRYPTED(dir);
 
 	dbg_gen("dir ino %lu, f_pos %#llx", dir->i_ino, ctx->pos);
 
@@ -522,11 +515,11 @@
 		return 0;
 
 	if (encrypted) {
-		err = fscrypt_get_encryption_info(dir);
-		if (err && err != -ENOKEY)
+		err = fscrypt_prepare_readdir(dir);
+		if (err)
 			return err;
 
-		err = fscrypt_fname_alloc_buffer(dir, UBIFS_MAX_NLEN, &fstr);
+		err = fscrypt_fname_alloc_buffer(UBIFS_MAX_NLEN, &fstr);
 		if (err)
 			return err;
 
@@ -1634,14 +1627,6 @@
 	return 0;
 }
 
-static int ubifs_dir_open(struct inode *dir, struct file *file)
-{
-	if (ubifs_crypt_is_encrypted(dir))
-		return fscrypt_get_encryption_info(dir) ? -EACCES : 0;
-
-	return 0;
-}
-
 const struct inode_operations ubifs_dir_inode_operations = {
 	.lookup      = ubifs_lookup,
 	.create      = ubifs_create,
@@ -1668,7 +1653,6 @@
 	.iterate_shared = ubifs_readdir,
 	.fsync          = ubifs_fsync,
 	.unlocked_ioctl = ubifs_ioctl,
-	.open		= ubifs_dir_open,
 #ifdef CONFIG_COMPAT
 	.compat_ioctl   = ubifs_compat_ioctl,
 #endif
diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c
index 6069c63..6156724 100644
--- a/fs/ubifs/file.c
+++ b/fs/ubifs/file.c
@@ -67,7 +67,7 @@
 
 	dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_decrypt(inode, dn, &dlen, block);
 		if (err)
 			goto dump;
@@ -647,7 +647,7 @@
 			dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 			out_len = UBIFS_BLOCK_SIZE;
 
-			if (ubifs_crypt_is_encrypted(inode)) {
+			if (IS_ENCRYPTED(inode)) {
 				err = ubifs_decrypt(inode, dn, &dlen, page_block);
 				if (err)
 					goto out_err;
diff --git a/fs/ubifs/ioctl.c b/fs/ubifs/ioctl.c
index eeb1be2..89712c9 100644
--- a/fs/ubifs/ioctl.c
+++ b/fs/ubifs/ioctl.c
@@ -201,6 +201,9 @@
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
 		return fscrypt_ioctl_get_key_status(file, (void __user *)arg);
 
+	case FS_IOC_GET_ENCRYPTION_NONCE:
+		return fscrypt_ioctl_get_nonce(file, (void __user *)arg);
+
 	default:
 		return -ENOTTY;
 	}
@@ -223,6 +226,7 @@
 	case FS_IOC_REMOVE_ENCRYPTION_KEY:
 	case FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS:
 	case FS_IOC_GET_ENCRYPTION_KEY_STATUS:
+	case FS_IOC_GET_ENCRYPTION_NONCE:
 		break;
 	default:
 		return -ENOIOCTLCMD;
diff --git a/fs/ubifs/journal.c b/fs/ubifs/journal.c
index f78c3e3..2f2b6e9 100644
--- a/fs/ubifs/journal.c
+++ b/fs/ubifs/journal.c
@@ -588,7 +588,7 @@
 
 	if (!xent) {
 		dent->ch.node_type = UBIFS_DENT_NODE;
-		if (nm->hash)
+		if (fname_name(nm) == NULL)
 			dent_key_init_hash(c, &dent_key, dir->i_ino, nm->hash);
 		else
 			dent_key_init(c, &dent_key, dir->i_ino, nm);
@@ -647,7 +647,7 @@
 	ubifs_add_auth_dirt(c, lnum);
 
 	if (deletion) {
-		if (nm->hash)
+		if (fname_name(nm) == NULL)
 			err = ubifs_tnc_remove_dh(c, &dent_key, nm->minor_hash);
 		else
 			err = ubifs_tnc_remove_nm(c, &dent_key, nm);
@@ -728,7 +728,7 @@
 	int dlen = COMPRESSED_DATA_NODE_BUF_SZ, allocated = 1;
 	int write_len;
 	struct ubifs_inode *ui = ubifs_inode(inode);
-	bool encrypted = ubifs_crypt_is_encrypted(inode);
+	bool encrypted = IS_ENCRYPTED(inode);
 	u8 hash[UBIFS_HASH_ARR_SZ];
 
 	dbg_jnlk(key, "ino %lu, blk %u, len %d, key ",
@@ -1454,7 +1454,7 @@
 	dlen = old_dlen = le32_to_cpu(dn->ch.len) - UBIFS_DATA_NODE_SZ;
 	compr_type = le16_to_cpu(dn->compr_type);
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_decrypt(inode, dn, &dlen, block);
 		if (err)
 			goto out;
@@ -1470,7 +1470,7 @@
 		ubifs_compress(c, buf, *new_len, &dn->data, &out_len, &compr_type);
 	}
 
-	if (ubifs_crypt_is_encrypted(inode)) {
+	if (IS_ENCRYPTED(inode)) {
 		err = ubifs_encrypt(inode, dn, out_len, &old_dlen, block);
 		if (err)
 			goto out;
diff --git a/fs/ubifs/key.h b/fs/ubifs/key.h
index afa704f..8142d9d 100644
--- a/fs/ubifs/key.h
+++ b/fs/ubifs/key.h
@@ -150,7 +150,6 @@
 	uint32_t hash = c->key_hash(fname_name(nm), fname_len(nm));
 
 	ubifs_assert(c, !(hash & ~UBIFS_S_KEY_HASH_MASK));
-	ubifs_assert(c, !nm->hash && !nm->minor_hash);
 	key->u32[0] = inum;
 	key->u32[1] = hash | (UBIFS_DENT_KEY << UBIFS_S_KEY_HASH_BITS);
 }
diff --git a/fs/ubifs/ubifs.h b/fs/ubifs/ubifs.h
index b3b7e35..0eca220 100644
--- a/fs/ubifs/ubifs.h
+++ b/fs/ubifs/ubifs.h
@@ -2097,13 +2097,6 @@
 
 extern const struct fscrypt_operations ubifs_crypt_operations;
 
-static inline bool ubifs_crypt_is_encrypted(const struct inode *inode)
-{
-	const struct ubifs_inode *ui = ubifs_inode(inode);
-
-	return ui->flags & UBIFS_CRYPT_FL;
-}
-
 /* Normal UBIFS messages */
 __printf(2, 3)
 void ubifs_msg(const struct ubifs_info *c, const char *fmt, ...);
diff --git a/fs/ubifs/xattr.c b/fs/ubifs/xattr.c
index 0928079..d410fa49 100644
--- a/fs/ubifs/xattr.c
+++ b/fs/ubifs/xattr.c
@@ -693,7 +693,8 @@
 
 static int xattr_get(const struct xattr_handler *handler,
 			   struct dentry *dentry, struct inode *inode,
-			   const char *name, void *buffer, size_t size)
+			   const char *name, void *buffer, size_t size,
+			   int flags)
 {
 	dbg_gen("xattr '%s', ino %lu ('%pd'), buf size %zd", name,
 		inode->i_ino, dentry, size);
diff --git a/fs/unicode/utf8-core.c b/fs/unicode/utf8-core.c
index 2a878b7..dc25823 100644
--- a/fs/unicode/utf8-core.c
+++ b/fs/unicode/utf8-core.c
@@ -6,6 +6,7 @@
 #include <linux/parser.h>
 #include <linux/errno.h>
 #include <linux/unicode.h>
+#include <linux/stringhash.h>
 
 #include "utf8n.h"
 
@@ -122,9 +123,29 @@
 	}
 	return -EINVAL;
 }
-
 EXPORT_SYMBOL(utf8_casefold);
 
+int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
+		       struct qstr *str)
+{
+	const struct utf8data *data = utf8nfdicf(um->version);
+	struct utf8cursor cur;
+	int c;
+	unsigned long hash = init_name_hash(salt);
+
+	if (utf8ncursor(&cur, data, str->name, str->len) < 0)
+		return -EINVAL;
+
+	while ((c = utf8byte(&cur))) {
+		if (c < 0)
+			return -EINVAL;
+		hash = partial_name_hash((unsigned char)c, hash);
+	}
+	str->hash = end_name_hash(hash);
+	return 0;
+}
+EXPORT_SYMBOL(utf8_casefold_hash);
+
 int utf8_normalize(const struct unicode_map *um, const struct qstr *str,
 		   unsigned char *dest, size_t dlen)
 {
diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
index ec57bbb..e6442c9 100644
--- a/fs/userfaultfd.c
+++ b/fs/userfaultfd.c
@@ -15,6 +15,7 @@
 #include <linux/sched/signal.h>
 #include <linux/sched/mm.h>
 #include <linux/mm.h>
+#include <linux/mmu_notifier.h>
 #include <linux/poll.h>
 #include <linux/slab.h>
 #include <linux/seq_file.h>
@@ -28,7 +29,7 @@
 #include <linux/security.h>
 #include <linux/hugetlb.h>
 
-int sysctl_unprivileged_userfaultfd __read_mostly = 1;
+int sysctl_unprivileged_userfaultfd __read_mostly;
 
 static struct kmem_cache *userfaultfd_ctx_cachep __read_mostly;
 
@@ -197,24 +198,21 @@
 	msg_init(&msg);
 	msg.event = UFFD_EVENT_PAGEFAULT;
 	msg.arg.pagefault.address = address;
+	/*
+	 * These flags indicate why the userfault occurred:
+	 * - UFFD_PAGEFAULT_FLAG_WP indicates a write protect fault.
+	 * - UFFD_PAGEFAULT_FLAG_MINOR indicates a minor fault.
+	 * - Neither of these flags being set indicates a MISSING fault.
+	 *
+	 * Separately, UFFD_PAGEFAULT_FLAG_WRITE indicates it was a write
+	 * fault. Otherwise, it was a read fault.
+	 */
 	if (flags & FAULT_FLAG_WRITE)
-		/*
-		 * If UFFD_FEATURE_PAGEFAULT_FLAG_WP was set in the
-		 * uffdio_api.features and UFFD_PAGEFAULT_FLAG_WRITE
-		 * was not set in a UFFD_EVENT_PAGEFAULT, it means it
-		 * was a read fault, otherwise if set it means it's
-		 * a write fault.
-		 */
 		msg.arg.pagefault.flags |= UFFD_PAGEFAULT_FLAG_WRITE;
 	if (reason & VM_UFFD_WP)
-		/*
-		 * If UFFD_FEATURE_PAGEFAULT_FLAG_WP was set in the
-		 * uffdio_api.features and UFFD_PAGEFAULT_FLAG_WP was
-		 * not set in a UFFD_EVENT_PAGEFAULT, it means it was
-		 * a missing fault, otherwise if set it means it's a
-		 * write protect fault.
-		 */
 		msg.arg.pagefault.flags |= UFFD_PAGEFAULT_FLAG_WP;
+	if (reason & VM_UFFD_MINOR)
+		msg.arg.pagefault.flags |= UFFD_PAGEFAULT_FLAG_MINOR;
 	if (features & UFFD_FEATURE_THREAD_ID)
 		msg.arg.pagefault.feat.ptid = task_pid_vnr(current);
 	return msg;
@@ -335,6 +333,30 @@
 	return ret;
 }
 
+/* Should pair with userfaultfd_signal_pending() */
+static inline long userfaultfd_get_blocking_state(unsigned int flags)
+{
+	if (flags & FAULT_FLAG_INTERRUPTIBLE)
+		return TASK_INTERRUPTIBLE;
+
+	if (flags & FAULT_FLAG_KILLABLE)
+		return TASK_KILLABLE;
+
+	return TASK_UNINTERRUPTIBLE;
+}
+
+/* Should pair with userfaultfd_get_blocking_state() */
+static inline bool userfaultfd_signal_pending(unsigned int flags)
+{
+	if (flags & FAULT_FLAG_INTERRUPTIBLE)
+		return signal_pending(current);
+
+	if (flags & FAULT_FLAG_KILLABLE)
+		return fatal_signal_pending(current);
+
+	return false;
+}
+
 /*
  * The locking rules involved in returning VM_FAULT_RETRY depending on
  * FAULT_FLAG_ALLOW_RETRY, FAULT_FLAG_RETRY_NOWAIT and
@@ -356,7 +378,7 @@
 	struct userfaultfd_ctx *ctx;
 	struct userfaultfd_wait_queue uwq;
 	vm_fault_t ret = VM_FAULT_SIGBUS;
-	bool must_wait, return_to_userland;
+	bool must_wait;
 	long blocking_state;
 
 	/*
@@ -385,11 +407,20 @@
 
 	BUG_ON(ctx->mm != mm);
 
-	VM_BUG_ON(reason & ~(VM_UFFD_MISSING|VM_UFFD_WP));
-	VM_BUG_ON(!(reason & VM_UFFD_MISSING) ^ !!(reason & VM_UFFD_WP));
+	/* Any unrecognized flag is a bug. */
+	VM_BUG_ON(reason & ~__VM_UFFD_FLAGS);
+	/* 0 or > 1 flags set is a bug; we expect exactly 1. */
+	VM_BUG_ON(!reason || (reason & (reason - 1)));
 
 	if (ctx->features & UFFD_FEATURE_SIGBUS)
 		goto out;
+	if ((vmf->flags & FAULT_FLAG_USER) == 0 &&
+	    ctx->flags & UFFD_USER_MODE_ONLY) {
+		printk_once(KERN_WARNING "uffd: Set unprivileged_userfaultfd "
+			"sysctl knob to 1 if kernel faults must be handled "
+			"without obtaining CAP_SYS_PTRACE capability\n");
+		goto out;
+	}
 
 	/*
 	 * If it's already released don't get it. This avoids to loop
@@ -463,11 +494,7 @@
 	uwq.ctx = ctx;
 	uwq.waken = false;
 
-	return_to_userland =
-		(vmf->flags & (FAULT_FLAG_USER|FAULT_FLAG_KILLABLE)) ==
-		(FAULT_FLAG_USER|FAULT_FLAG_KILLABLE);
-	blocking_state = return_to_userland ? TASK_INTERRUPTIBLE :
-			 TASK_KILLABLE;
+	blocking_state = userfaultfd_get_blocking_state(vmf->flags);
 
 	spin_lock_irq(&ctx->fault_pending_wqh.lock);
 	/*
@@ -493,8 +520,7 @@
 	up_read(&mm->mmap_sem);
 
 	if (likely(must_wait && !READ_ONCE(ctx->released) &&
-		   (return_to_userland ? !signal_pending(current) :
-		    !fatal_signal_pending(current)))) {
+		   !userfaultfd_signal_pending(vmf->flags))) {
 		wake_up_poll(&ctx->fd_wqh, EPOLLIN);
 		schedule();
 		ret |= VM_FAULT_MAJOR;
@@ -516,8 +542,7 @@
 			set_current_state(blocking_state);
 			if (READ_ONCE(uwq.waken) ||
 			    READ_ONCE(ctx->released) ||
-			    (return_to_userland ? signal_pending(current) :
-			     fatal_signal_pending(current)))
+			    userfaultfd_signal_pending(vmf->flags))
 				break;
 			schedule();
 		}
@@ -525,30 +550,6 @@
 
 	__set_current_state(TASK_RUNNING);
 
-	if (return_to_userland) {
-		if (signal_pending(current) &&
-		    !fatal_signal_pending(current)) {
-			/*
-			 * If we got a SIGSTOP or SIGCONT and this is
-			 * a normal userland page fault, just let
-			 * userland return so the signal will be
-			 * handled and gdb debugging works.  The page
-			 * fault code immediately after we return from
-			 * this function is going to release the
-			 * mmap_sem and it's not depending on it
-			 * (unlike gup would if we were not to return
-			 * VM_FAULT_RETRY).
-			 *
-			 * If a fatal signal is pending we still take
-			 * the streamlined VM_FAULT_RETRY failure path
-			 * and there's no need to retake the mmap_sem
-			 * in such case.
-			 */
-			down_read(&mm->mmap_sem);
-			ret = VM_FAULT_NOPAGE;
-		}
-	}
-
 	/*
 	 * Here we race with the list_del; list_add in
 	 * userfaultfd_ctx_read(), however because we don't ever run
@@ -645,7 +646,7 @@
 		for (vma = mm->mmap; vma; vma = vma->vm_next)
 			if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) {
 				vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
-				vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING);
+				vma->vm_flags &= ~__VM_UFFD_FLAGS;
 			}
 		up_write(&mm->mmap_sem);
 
@@ -677,7 +678,7 @@
 	octx = vma->vm_userfaultfd_ctx.ctx;
 	if (!octx || !(octx->features & UFFD_FEATURE_EVENT_FORK)) {
 		vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
-		vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING);
+		vma->vm_flags &= ~__VM_UFFD_FLAGS;
 		return 0;
 	}
 
@@ -758,7 +759,7 @@
 	} else {
 		/* Drop uffd context if remap feature not enabled */
 		vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX;
-		vma->vm_flags &= ~(VM_UFFD_WP | VM_UFFD_MISSING);
+		vma->vm_flags &= ~__VM_UFFD_FLAGS;
 	}
 }
 
@@ -901,18 +902,19 @@
 	for (vma = mm->mmap; vma; vma = vma->vm_next) {
 		cond_resched();
 		BUG_ON(!!vma->vm_userfaultfd_ctx.ctx ^
-		       !!(vma->vm_flags & (VM_UFFD_MISSING | VM_UFFD_WP)));
+		       !!(vma->vm_flags & __VM_UFFD_FLAGS));
 		if (vma->vm_userfaultfd_ctx.ctx != ctx) {
 			prev = vma;
 			continue;
 		}
-		new_flags = vma->vm_flags & ~(VM_UFFD_MISSING | VM_UFFD_WP);
+		new_flags = vma->vm_flags & ~__VM_UFFD_FLAGS;
 		if (still_valid) {
 			prev = vma_merge(mm, prev, vma->vm_start, vma->vm_end,
 					 new_flags, vma->anon_vma,
 					 vma->vm_file, vma->vm_pgoff,
 					 vma_policy(vma),
-					 NULL_VM_UFFD_CTX);
+					 NULL_VM_UFFD_CTX,
+					 vma_get_anon_name(vma));
 			if (prev)
 				vma = prev;
 			else
@@ -1011,14 +1013,14 @@
 
 static const struct file_operations userfaultfd_fops;
 
-static int resolve_userfault_fork(struct userfaultfd_ctx *ctx,
-				  struct userfaultfd_ctx *new,
+static int resolve_userfault_fork(struct userfaultfd_ctx *new,
+				  struct inode *inode,
 				  struct uffd_msg *msg)
 {
 	int fd;
 
-	fd = anon_inode_getfd("[userfaultfd]", &userfaultfd_fops, new,
-			      O_RDWR | (new->flags & UFFD_SHARED_FCNTL_FLAGS));
+	fd = anon_inode_getfd_secure("[userfaultfd]", &userfaultfd_fops, new,
+			O_RDWR | (new->flags & UFFD_SHARED_FCNTL_FLAGS), inode);
 	if (fd < 0)
 		return fd;
 
@@ -1028,7 +1030,7 @@
 }
 
 static ssize_t userfaultfd_ctx_read(struct userfaultfd_ctx *ctx, int no_wait,
-				    struct uffd_msg *msg)
+				    struct uffd_msg *msg, struct inode *inode)
 {
 	ssize_t ret;
 	DECLARE_WAITQUEUE(wait, current);
@@ -1139,7 +1141,7 @@
 	spin_unlock_irq(&ctx->fd_wqh.lock);
 
 	if (!ret && msg->event == UFFD_EVENT_FORK) {
-		ret = resolve_userfault_fork(ctx, fork_nctx, msg);
+		ret = resolve_userfault_fork(fork_nctx, inode, msg);
 		spin_lock_irq(&ctx->event_wqh.lock);
 		if (!list_empty(&fork_event)) {
 			/*
@@ -1199,6 +1201,7 @@
 	ssize_t _ret, ret = 0;
 	struct uffd_msg msg;
 	int no_wait = file->f_flags & O_NONBLOCK;
+	struct inode *inode = file_inode(file);
 
 	if (!userfaultfd_is_initialized(ctx))
 		return -EINVAL;
@@ -1206,7 +1209,7 @@
 	for (;;) {
 		if (count < sizeof(msg))
 			return ret ? ret : -EINVAL;
-		_ret = userfaultfd_ctx_read(ctx, no_wait, &msg);
+		_ret = userfaultfd_ctx_read(ctx, no_wait, &msg, inode);
 		if (_ret < 0)
 			return ret ? ret : _ret;
 		if (copy_to_user((__u64 __user *) buf, &msg, sizeof(msg)))
@@ -1286,10 +1289,16 @@
 	return 0;
 }
 
-static inline bool vma_can_userfault(struct vm_area_struct *vma)
+static inline bool vma_can_userfault(struct vm_area_struct *vma,
+				     unsigned long vm_flags)
 {
+	if (vm_flags & VM_UFFD_MINOR) {
+		if (!(is_vm_hugetlb_page(vma) || vma_is_shmem(vma)))
+			return false;
+	}
+
 	return vma_is_anonymous(vma) || is_vm_hugetlb_page(vma) ||
-		vma_is_shmem(vma);
+	       vma_is_shmem(vma);
 }
 
 static int userfaultfd_register(struct userfaultfd_ctx *ctx,
@@ -1315,8 +1324,7 @@
 	ret = -EINVAL;
 	if (!uffdio_register.mode)
 		goto out;
-	if (uffdio_register.mode & ~(UFFDIO_REGISTER_MODE_MISSING|
-				     UFFDIO_REGISTER_MODE_WP))
+	if (uffdio_register.mode & ~UFFD_API_REGISTER_MODES)
 		goto out;
 	vm_flags = 0;
 	if (uffdio_register.mode & UFFDIO_REGISTER_MODE_MISSING)
@@ -1330,6 +1338,12 @@
 		ret = -EINVAL;
 		goto out;
 	}
+	if (uffdio_register.mode & UFFDIO_REGISTER_MODE_MINOR) {
+#ifndef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
+		goto out;
+#endif
+		vm_flags |= VM_UFFD_MINOR;
+	}
 
 	ret = validate_range(mm, uffdio_register.range.start,
 			     uffdio_register.range.len);
@@ -1375,11 +1389,11 @@
 		cond_resched();
 
 		BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^
-		       !!(cur->vm_flags & (VM_UFFD_MISSING | VM_UFFD_WP)));
+		       !!(cur->vm_flags & __VM_UFFD_FLAGS));
 
 		/* check not compatible vmas */
 		ret = -EINVAL;
-		if (!vma_can_userfault(cur))
+		if (!vma_can_userfault(cur, vm_flags))
 			goto out_unlock;
 
 		/*
@@ -1436,7 +1450,7 @@
 	do {
 		cond_resched();
 
-		BUG_ON(!vma_can_userfault(vma));
+		BUG_ON(!vma_can_userfault(vma, vm_flags));
 		BUG_ON(vma->vm_userfaultfd_ctx.ctx &&
 		       vma->vm_userfaultfd_ctx.ctx != ctx);
 		WARN_ON(!(vma->vm_flags & VM_MAYWRITE));
@@ -1453,11 +1467,12 @@
 			start = vma->vm_start;
 		vma_end = min(end, vma->vm_end);
 
-		new_flags = (vma->vm_flags & ~vm_flags) | vm_flags;
+		new_flags = (vma->vm_flags & ~__VM_UFFD_FLAGS) | vm_flags;
 		prev = vma_merge(mm, prev, start, vma_end, new_flags,
 				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
 				 vma_policy(vma),
-				 ((struct vm_userfaultfd_ctx){ ctx }));
+				 ((struct vm_userfaultfd_ctx){ ctx }),
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			goto next;
@@ -1481,6 +1496,9 @@
 		vma->vm_flags = new_flags;
 		vma->vm_userfaultfd_ctx.ctx = ctx;
 
+		if (is_vm_hugetlb_page(vma) && uffd_disable_huge_pmd_share(vma))
+			hugetlb_unshare_all_pmds(vma);
+
 	skip:
 		prev = vma;
 		start = vma->vm_end;
@@ -1490,6 +1508,15 @@
 	up_write(&mm->mmap_sem);
 	mmput(mm);
 	if (!ret) {
+		__u64 ioctls_out;
+
+		ioctls_out = basic_ioctls ? UFFD_API_RANGE_IOCTLS_BASIC :
+		    UFFD_API_RANGE_IOCTLS;
+
+		/* CONTINUE ioctl is only supported for MINOR ranges. */
+		if (!(uffdio_register.mode & UFFDIO_REGISTER_MODE_MINOR))
+			ioctls_out &= ~((__u64)1 << _UFFDIO_CONTINUE);
+
 		/*
 		 * Now that we scanned all vmas we can already tell
 		 * userland which ioctls methods are guaranteed to
@@ -1564,7 +1591,7 @@
 		cond_resched();
 
 		BUG_ON(!!cur->vm_userfaultfd_ctx.ctx ^
-		       !!(cur->vm_flags & (VM_UFFD_MISSING | VM_UFFD_WP)));
+		       !!(cur->vm_flags & __VM_UFFD_FLAGS));
 
 		/*
 		 * Check not compatible vmas, not strictly required
@@ -1573,7 +1600,7 @@
 		 * provides for more strict behavior to notice
 		 * unregistration errors.
 		 */
-		if (!vma_can_userfault(cur))
+		if (!vma_can_userfault(cur, cur->vm_flags))
 			goto out_unlock;
 
 		found = true;
@@ -1587,7 +1614,7 @@
 	do {
 		cond_resched();
 
-		BUG_ON(!vma_can_userfault(vma));
+		BUG_ON(!vma_can_userfault(vma, vma->vm_flags));
 
 		/*
 		 * Nothing to do: this vma is already registered into this
@@ -1615,11 +1642,12 @@
 			wake_userfault(vma->vm_userfaultfd_ctx.ctx, &range);
 		}
 
-		new_flags = vma->vm_flags & ~(VM_UFFD_MISSING | VM_UFFD_WP);
+		new_flags = vma->vm_flags & ~__VM_UFFD_FLAGS;
 		prev = vma_merge(mm, prev, start, vma_end, new_flags,
 				 vma->anon_vma, vma->vm_file, vma->vm_pgoff,
 				 vma_policy(vma),
-				 NULL_VM_UFFD_CTX);
+				 NULL_VM_UFFD_CTX,
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			goto next;
@@ -1799,6 +1827,66 @@
 	return ret;
 }
 
+static int userfaultfd_continue(struct userfaultfd_ctx *ctx, unsigned long arg)
+{
+	__s64 ret;
+	struct uffdio_continue uffdio_continue;
+	struct uffdio_continue __user *user_uffdio_continue;
+	struct userfaultfd_wake_range range;
+
+	user_uffdio_continue = (struct uffdio_continue __user *)arg;
+
+	ret = -EAGAIN;
+	if (READ_ONCE(ctx->mmap_changing))
+		goto out;
+
+	ret = -EFAULT;
+	if (copy_from_user(&uffdio_continue, user_uffdio_continue,
+			   /* don't copy the output fields */
+			   sizeof(uffdio_continue) - (sizeof(__s64))))
+		goto out;
+
+	ret = validate_range(ctx->mm, uffdio_continue.range.start,
+			     uffdio_continue.range.len);
+	if (ret)
+		goto out;
+
+	ret = -EINVAL;
+	/* double check for wraparound just in case. */
+	if (uffdio_continue.range.start + uffdio_continue.range.len <=
+	    uffdio_continue.range.start) {
+		goto out;
+	}
+	if (uffdio_continue.mode & ~UFFDIO_CONTINUE_MODE_DONTWAKE)
+		goto out;
+
+	if (mmget_not_zero(ctx->mm)) {
+		ret = mcopy_continue(ctx->mm, uffdio_continue.range.start,
+				     uffdio_continue.range.len,
+				     &ctx->mmap_changing);
+		mmput(ctx->mm);
+	} else {
+		return -ESRCH;
+	}
+
+	if (unlikely(put_user(ret, &user_uffdio_continue->mapped)))
+		return -EFAULT;
+	if (ret < 0)
+		goto out;
+
+	/* len == 0 would wake all */
+	BUG_ON(!ret);
+	range.len = ret;
+	if (!(uffdio_continue.mode & UFFDIO_CONTINUE_MODE_DONTWAKE)) {
+		range.start = uffdio_continue.range.start;
+		wake_userfault(ctx, &range);
+	}
+	ret = range.len == uffdio_continue.range.len ? 0 : -EAGAIN;
+
+out:
+	return ret;
+}
+
 static inline unsigned int uffd_ctx_features(__u64 user_features)
 {
 	/*
@@ -1834,6 +1922,10 @@
 		goto err_out;
 	/* report all available features and ioctls to userland */
 	uffdio_api.features = UFFD_API_FEATURES;
+#ifndef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
+	uffdio_api.features &=
+		~(UFFD_FEATURE_MINOR_HUGETLBFS | UFFD_FEATURE_MINOR_SHMEM);
+#endif
 	uffdio_api.ioctls = UFFD_API_IOCTLS;
 	ret = -EFAULT;
 	if (copy_to_user(buf, &uffdio_api, sizeof(uffdio_api)))
@@ -1883,6 +1975,9 @@
 	case UFFDIO_ZEROPAGE:
 		ret = userfaultfd_zeropage(ctx, arg);
 		break;
+	case UFFDIO_CONTINUE:
+		ret = userfaultfd_continue(ctx, arg);
+		break;
 	}
 	return ret;
 }
@@ -1943,16 +2038,23 @@
 	struct userfaultfd_ctx *ctx;
 	int fd;
 
-	if (!sysctl_unprivileged_userfaultfd && !capable(CAP_SYS_PTRACE))
+	if (!sysctl_unprivileged_userfaultfd &&
+	    (flags & UFFD_USER_MODE_ONLY) == 0 &&
+	    !capable(CAP_SYS_PTRACE)) {
+		printk_once(KERN_WARNING "uffd: Set unprivileged_userfaultfd "
+			"sysctl knob to 1 if kernel faults must be handled "
+			"without obtaining CAP_SYS_PTRACE capability\n");
 		return -EPERM;
+	}
 
 	BUG_ON(!current->mm);
 
 	/* Check the UFFD_* constants for consistency.  */
+	BUILD_BUG_ON(UFFD_USER_MODE_ONLY & UFFD_SHARED_FCNTL_FLAGS);
 	BUILD_BUG_ON(UFFD_CLOEXEC != O_CLOEXEC);
 	BUILD_BUG_ON(UFFD_NONBLOCK != O_NONBLOCK);
 
-	if (flags & ~UFFD_SHARED_FCNTL_FLAGS)
+	if (flags & ~(UFFD_SHARED_FCNTL_FLAGS | UFFD_USER_MODE_ONLY))
 		return -EINVAL;
 
 	ctx = kmem_cache_alloc(userfaultfd_ctx_cachep, GFP_KERNEL);
@@ -1968,8 +2070,8 @@
 	/* prevent the mm struct to be freed */
 	mmgrab(ctx->mm);
 
-	fd = anon_inode_getfd("[userfaultfd]", &userfaultfd_fops, ctx,
-			      O_RDWR | (flags & UFFD_SHARED_FCNTL_FLAGS));
+	fd = anon_inode_getfd_secure("[userfaultfd]", &userfaultfd_fops, ctx,
+			O_RDWR | (flags & UFFD_SHARED_FCNTL_FLAGS), NULL);
 	if (fd < 0) {
 		mmdrop(ctx->mm);
 		kmem_cache_free(userfaultfd_ctx_cachep, ctx);
diff --git a/fs/verity/Kconfig b/fs/verity/Kconfig
index 88fb251..24d1b54 100644
--- a/fs/verity/Kconfig
+++ b/fs/verity/Kconfig
@@ -3,9 +3,13 @@
 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.
+	# SHA-256 is implied as it's intended to be the default hash algorithm.
 	# To avoid bloat, other wanted algorithms must be selected explicitly.
-	select CRYPTO_SHA256
+	# Note that CRYPTO_SHA256 denotes the generic C implementation, but
+	# some architectures provided optimized implementations of the same
+	# algorithm that may be used instead. In this case, CRYPTO_SHA256 may
+	# be omitted even if SHA-256 is being used.
+	imply CRYPTO_SHA256
 	help
 	  This option enables fs-verity.  fs-verity is the dm-verity
 	  mechanism implemented at the file level.  On supported
diff --git a/fs/verity/Makefile b/fs/verity/Makefile
index 570e913..435559a 100644
--- a/fs/verity/Makefile
+++ b/fs/verity/Makefile
@@ -5,6 +5,7 @@
 			   init.o \
 			   measure.o \
 			   open.o \
+			   read_metadata.o \
 			   verify.o
 
 obj-$(CONFIG_FS_VERITY_BUILTIN_SIGNATURES) += signature.o
diff --git a/fs/verity/enable.c b/fs/verity/enable.c
index 1370bfd..d988e8c 100644
--- a/fs/verity/enable.c
+++ b/fs/verity/enable.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/enable.c: ioctl to enable verity on a file
+ * Ioctl to enable verity on a file
  *
  * Copyright 2019 Google LLC
  */
@@ -8,18 +8,48 @@
 #include "fsverity_private.h"
 
 #include <crypto/hash.h>
+#include <linux/backing-dev.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,
+/*
+ * Read a file data page for Merkle tree construction.  Do aggressive readahead,
+ * since we're sequentially reading the entire file.
+ */
+static struct page *read_file_data_page(struct file *filp, pgoff_t index,
+					struct file_ra_state *ra,
+					unsigned long remaining_pages)
+{
+	struct page *page;
+
+	page = find_get_page_flags(filp->f_mapping, index, FGP_ACCESSED);
+	if (!page || !PageUptodate(page)) {
+		if (page)
+			put_page(page);
+		else
+			page_cache_sync_readahead(filp->f_mapping, ra, filp,
+						  index, remaining_pages);
+		page = read_mapping_page(filp->f_mapping, index, NULL);
+		if (IS_ERR(page))
+			return page;
+	}
+	if (PageReadahead(page))
+		page_cache_async_readahead(filp->f_mapping, ra, filp, page,
+					   index, remaining_pages);
+	return page;
+}
+
+static int build_merkle_tree_level(struct file *filp, unsigned int level,
 				   u64 num_blocks_to_hash,
 				   const struct merkle_tree_params *params,
 				   u8 *pending_hashes,
 				   struct ahash_request *req)
 {
+	struct inode *inode = file_inode(filp);
 	const struct fsverity_operations *vops = inode->i_sb->s_vop;
+	struct file_ra_state ra = { 0 };
 	unsigned int pending_size = 0;
 	u64 dst_block_num;
 	u64 i;
@@ -36,6 +66,8 @@
 		dst_block_num = 0; /* unused */
 	}
 
+	file_ra_state_init(&ra, filp->f_mapping);
+
 	for (i = 0; i < num_blocks_to_hash; i++) {
 		struct page *src_page;
 
@@ -45,7 +77,8 @@
 
 		if (level == 0) {
 			/* Leaf: hashing a data block */
-			src_page = read_mapping_page(inode->i_mapping, i, NULL);
+			src_page = read_file_data_page(filp, i, &ra,
+						       num_blocks_to_hash - i);
 			if (IS_ERR(src_page)) {
 				err = PTR_ERR(src_page);
 				fsverity_err(inode,
@@ -54,9 +87,14 @@
 				return err;
 			}
 		} else {
+			unsigned long num_ra_pages =
+				min_t(unsigned long, num_blocks_to_hash - i,
+				      inode->i_sb->s_bdi->io_pages);
+
 			/* Non-leaf: hashing hash block from level below */
 			src_page = vops->read_merkle_tree_page(inode,
-					params->level_start[level - 1] + i);
+					params->level_start[level - 1] + i,
+					num_ra_pages);
 			if (IS_ERR(src_page)) {
 				err = PTR_ERR(src_page);
 				fsverity_err(inode,
@@ -103,17 +141,18 @@
 }
 
 /*
- * Build the Merkle tree for the given inode using the given parameters, and
+ * Build the Merkle tree for the given file 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,
+static int build_merkle_tree(struct file *filp,
 			     const struct merkle_tree_params *params,
 			     u8 *root_hash)
 {
+	struct inode *inode = file_inode(filp);
 	u8 *pending_hashes;
 	struct ahash_request *req;
 	u64 blocks;
@@ -126,9 +165,11 @@
 		return 0;
 	}
 
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(params->hash_alg, GFP_KERNEL);
+
 	pending_hashes = kmalloc(params->block_size, GFP_KERNEL);
-	req = ahash_request_alloc(params->hash_alg->tfm, GFP_KERNEL);
-	if (!pending_hashes || !req)
+	if (!pending_hashes)
 		goto out;
 
 	/*
@@ -139,7 +180,7 @@
 	blocks = ((u64)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,
+		err = build_merkle_tree_level(filp, level, blocks, params,
 					      pending_hashes, req);
 		if (err)
 			goto out;
@@ -150,7 +191,7 @@
 	err = 0;
 out:
 	kfree(pending_hashes);
-	ahash_request_free(req);
+	fsverity_free_hash_request(params->hash_alg, req);
 	return err;
 }
 
@@ -175,8 +216,7 @@
 
 	/* 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,
+	    copy_from_user(desc->salt, u64_to_user_ptr(arg->salt_ptr),
 			   arg->salt_size)) {
 		err = -EFAULT;
 		goto out;
@@ -185,8 +225,7 @@
 
 	/* 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,
+	    copy_from_user(desc->signature, u64_to_user_ptr(arg->sig_ptr),
 			   arg->sig_size)) {
 		err = -EFAULT;
 		goto out;
@@ -227,7 +266,7 @@
 	 */
 	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);
+	err = build_merkle_tree(filp, &params, desc->root_hash);
 	if (err) {
 		fsverity_err(inode, "Error %d building Merkle tree", err);
 		goto rollback;
@@ -290,6 +329,8 @@
 
 /**
  * fsverity_ioctl_enable() - enable verity on a file
+ * @filp: file to enable verity on
+ * @uarg: user pointer to fsverity_enable_arg
  *
  * Enable fs-verity on a file.  See the "FS_IOC_ENABLE_VERITY" section of
  * Documentation/filesystems/fsverity.rst for the documentation.
@@ -357,9 +398,9 @@
 	 * 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.
+	 * these pages didn't undergo verification against the file digest 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);
diff --git a/fs/verity/fsverity_private.h b/fs/verity/fsverity_private.h
index e74c79b..a275cad 100644
--- a/fs/verity/fsverity_private.h
+++ b/fs/verity/fsverity_private.h
@@ -16,6 +16,7 @@
 
 #include <crypto/sha.h>
 #include <linux/fsverity.h>
+#include <linux/mempool.h>
 
 struct ahash_request;
 
@@ -37,11 +38,12 @@
 	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 */
+	mempool_t req_pool;	  /* mempool with a preallocated hash request */
 };
 
 /* Merkle tree parameters: hash algorithm, initial hash state, and topology */
 struct merkle_tree_params {
-	const struct fsverity_hash_alg *hash_alg; /* the hash algorithm */
+	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 */
@@ -50,6 +52,7 @@
 	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 */
+	unsigned long level0_blocks;	/* number of blocks in tree level 0 */
 
 	/*
 	 * Starting block index for each tree level, ordered from leaf level (0)
@@ -58,76 +61,50 @@
 	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.
+ * data read from the file.  It also caches the file digest.  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];
+	u8 file_digest[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,
+struct fsverity_hash_alg *fsverity_get_hash_alg(const struct inode *inode,
+						unsigned int num);
+struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg,
+						  gfp_t gfp_flags);
+void fsverity_free_hash_request(struct fsverity_hash_alg *alg,
+				struct ahash_request *req);
+const u8 *fsverity_prepare_hash_state(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,
+int fsverity_hash_buffer(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
+void __printf(3, 4) __cold
 fsverity_msg(const struct inode *inode, const char *level,
 	     const char *fmt, ...);
 
@@ -145,12 +122,17 @@
 				     const u8 *salt, size_t salt_size);
 
 struct fsverity_info *fsverity_create_info(const struct inode *inode,
-					   void *desc, size_t desc_size);
+					   struct fsverity_descriptor *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 fsverity_get_descriptor(struct inode *inode,
+			    struct fsverity_descriptor **desc_ret,
+			    size_t *desc_size_ret);
+
 int __init fsverity_init_info_cache(void);
 void __init fsverity_exit_info_cache(void);
 
@@ -158,15 +140,13 @@
 
 #ifdef CONFIG_FS_VERITY_BUILTIN_SIGNATURES
 int fsverity_verify_signature(const struct fsverity_info *vi,
-			      const struct fsverity_descriptor *desc,
-			      size_t desc_size);
+			      const u8 *signature, size_t sig_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)
+			  const u8 *signature, size_t sig_size)
 {
 	return 0;
 }
diff --git a/fs/verity/hash_algs.c b/fs/verity/hash_algs.c
index 31e6d7d..71d0fcc 100644
--- a/fs/verity/hash_algs.c
+++ b/fs/verity/hash_algs.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/hash_algs.c: fs-verity hash algorithms
+ * fs-verity hash algorithms
  *
  * Copyright 2019 Google LLC
  */
@@ -24,6 +24,8 @@
 	},
 };
 
+static DEFINE_MUTEX(fsverity_hash_alg_init_mutex);
+
 /**
  * fsverity_get_hash_alg() - validate and prepare a hash algorithm
  * @inode: optional inode for logging purposes
@@ -36,8 +38,8 @@
  *
  * 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 *fsverity_get_hash_alg(const struct inode *inode,
+						unsigned int num)
 {
 	struct fsverity_hash_alg *alg;
 	struct crypto_ahash *tfm;
@@ -50,10 +52,15 @@
 	}
 	alg = &fsverity_hash_algs[num];
 
-	/* pairs with cmpxchg() below */
-	tfm = READ_ONCE(alg->tfm);
-	if (likely(tfm != NULL))
+	/* pairs with smp_store_release() below */
+	if (likely(smp_load_acquire(&alg->tfm) != NULL))
 		return alg;
+
+	mutex_lock(&fsverity_hash_alg_init_mutex);
+
+	if (alg->tfm != NULL)
+		goto out_unlock;
+
 	/*
 	 * Using the shash API would make things a bit simpler, but the ahash
 	 * API is preferable as it allows the use of crypto accelerators.
@@ -64,12 +71,14 @@
 			fsverity_warn(inode,
 				      "Missing crypto API support for hash algorithm \"%s\"",
 				      alg->name);
-			return ERR_PTR(-ENOPKG);
+			alg = ERR_PTR(-ENOPKG);
+			goto out_unlock;
 		}
 		fsverity_err(inode,
 			     "Error allocating hash algorithm \"%s\": %ld",
 			     alg->name, PTR_ERR(tfm));
-		return ERR_CAST(tfm);
+		alg = ERR_CAST(tfm);
+		goto out_unlock;
 	}
 
 	err = -EINVAL;
@@ -78,18 +87,61 @@
 	if (WARN_ON(alg->block_size != crypto_ahash_blocksize(tfm)))
 		goto err_free_tfm;
 
+	err = mempool_init_kmalloc_pool(&alg->req_pool, 1,
+					sizeof(struct ahash_request) +
+					crypto_ahash_reqsize(tfm));
+	if (err)
+		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;
+	/* pairs with smp_load_acquire() above */
+	smp_store_release(&alg->tfm, tfm);
+	goto out_unlock;
 
 err_free_tfm:
 	crypto_free_ahash(tfm);
-	return ERR_PTR(err);
+	alg = ERR_PTR(err);
+out_unlock:
+	mutex_unlock(&fsverity_hash_alg_init_mutex);
+	return alg;
+}
+
+/**
+ * fsverity_alloc_hash_request() - allocate a hash request object
+ * @alg: the hash algorithm for which to allocate the request
+ * @gfp_flags: memory allocation flags
+ *
+ * This is mempool-backed, so this never fails if __GFP_DIRECT_RECLAIM is set in
+ * @gfp_flags.  However, in that case this might need to wait for all
+ * previously-allocated requests to be freed.  So to avoid deadlocks, callers
+ * must never need multiple requests at a time to make forward progress.
+ *
+ * Return: the request object on success; NULL on failure (but see above)
+ */
+struct ahash_request *fsverity_alloc_hash_request(struct fsverity_hash_alg *alg,
+						  gfp_t gfp_flags)
+{
+	struct ahash_request *req = mempool_alloc(&alg->req_pool, gfp_flags);
+
+	if (req)
+		ahash_request_set_tfm(req, alg->tfm);
+	return req;
+}
+
+/**
+ * fsverity_free_hash_request() - free a hash request object
+ * @alg: the hash algorithm
+ * @req: the hash request object to free
+ */
+void fsverity_free_hash_request(struct fsverity_hash_alg *alg,
+				struct ahash_request *req)
+{
+	if (req) {
+		ahash_request_zero(req);
+		mempool_free(req, &alg->req_pool);
+	}
 }
 
 /**
@@ -101,7 +153,7 @@
  * 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 *fsverity_prepare_hash_state(struct fsverity_hash_alg *alg,
 				      const u8 *salt, size_t salt_size)
 {
 	u8 *hashstate = NULL;
@@ -119,11 +171,8 @@
 	if (!hashstate)
 		return ERR_PTR(-ENOMEM);
 
-	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
-	if (!req) {
-		err = -ENOMEM;
-		goto err_free;
-	}
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(alg, GFP_KERNEL);
 
 	/*
 	 * Zero-pad the salt to the next multiple of the input size of the hash
@@ -158,7 +207,7 @@
 	if (err)
 		goto err_free;
 out:
-	ahash_request_free(req);
+	fsverity_free_hash_request(alg, req);
 	kfree(padded_salt);
 	return hashstate;
 
@@ -229,7 +278,7 @@
  *
  * Return: 0 on success, -errno on failure
  */
-int fsverity_hash_buffer(const struct fsverity_hash_alg *alg,
+int fsverity_hash_buffer(struct fsverity_hash_alg *alg,
 			 const void *data, size_t size, u8 *out)
 {
 	struct ahash_request *req;
@@ -237,9 +286,8 @@
 	DECLARE_CRYPTO_WAIT(wait);
 	int err;
 
-	req = ahash_request_alloc(alg->tfm, GFP_KERNEL);
-	if (!req)
-		return -ENOMEM;
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(alg, GFP_KERNEL);
 
 	sg_init_one(&sg, data, size);
 	ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_SLEEP |
@@ -249,7 +297,7 @@
 
 	err = crypto_wait_req(crypto_ahash_digest(req), &wait);
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(alg, req);
 	return err;
 }
 
diff --git a/fs/verity/init.c b/fs/verity/init.c
index 94c104e..c98b701 100644
--- a/fs/verity/init.c
+++ b/fs/verity/init.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/init.c: fs-verity module initialization and logging
+ * fs-verity module initialization and logging
  *
  * Copyright 2019 Google LLC
  */
diff --git a/fs/verity/measure.c b/fs/verity/measure.c
index 05049b6..f0d7b30 100644
--- a/fs/verity/measure.c
+++ b/fs/verity/measure.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/measure.c: ioctl to get a verity file's measurement
+ * Ioctl to get a verity file's digest
  *
  * Copyright 2019 Google LLC
  */
@@ -10,10 +10,12 @@
 #include <linux/uaccess.h>
 
 /**
- * fsverity_ioctl_measure() - get a verity file's measurement
+ * fsverity_ioctl_measure() - get a verity file's digest
+ * @filp: file to get digest of
+ * @_uarg: user pointer to fsverity_digest
  *
- * Retrieve the file measurement that the kernel is enforcing for reads from a
- * verity file.  See the "FS_IOC_MEASURE_VERITY" section of
+ * Retrieve the file digest 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
@@ -49,7 +51,7 @@
 	if (copy_to_user(uarg, &arg, sizeof(arg)))
 		return -EFAULT;
 
-	if (copy_to_user(uarg->digest, vi->measurement, hash_alg->digest_size))
+	if (copy_to_user(uarg->digest, vi->file_digest, hash_alg->digest_size))
 		return -EFAULT;
 
 	return 0;
diff --git a/fs/verity/open.c b/fs/verity/open.c
index 6200826..92df87f5 100644
--- a/fs/verity/open.c
+++ b/fs/verity/open.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/open.c: opening fs-verity files
+ * Opening fs-verity files
  *
  * Copyright 2019 Google LLC
  */
@@ -31,7 +31,7 @@
 				     unsigned int log_blocksize,
 				     const u8 *salt, size_t salt_size)
 {
-	const struct fsverity_hash_alg *hash_alg;
+	struct fsverity_hash_alg *hash_alg;
 	int err;
 	u64 blocks;
 	u64 offset;
@@ -102,6 +102,7 @@
 		/* temporarily using level_start[] to store blocks in level */
 		params->level_start[params->num_levels++] = blocks;
 	}
+	params->level0_blocks = params->level_start[0];
 
 	/* Compute the starting block of each level */
 	offset = 0;
@@ -123,63 +124,35 @@
 }
 
 /*
- * Compute the file measurement by hashing the fsverity_descriptor excluding the
+ * Compute the file digest 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)
+static int compute_file_digest(struct fsverity_hash_alg *hash_alg,
+			       struct fsverity_descriptor *desc,
+			       u8 *file_digest)
 {
 	__le32 sig_size = desc->sig_size;
 	int err;
 
 	desc->sig_size = 0;
-	err = fsverity_hash_buffer(hash_alg, desc, sizeof(*desc), measurement);
+	err = fsverity_hash_buffer(hash_alg, desc, sizeof(*desc), file_digest);
 	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.
+ * Create a new fsverity_info from the given fsverity_descriptor (with optional
+ * appended signature), and check the signature if present.  The
+ * fsverity_descriptor must have already undergone basic validation.
  */
 struct fsverity_info *fsverity_create_info(const struct inode *inode,
-					   void *_desc, size_t desc_size)
+					   struct fsverity_descriptor *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);
@@ -198,17 +171,18 @@
 
 	memcpy(vi->root_hash, desc->root_hash, vi->tree_params.digest_size);
 
-	err = compute_file_measurement(vi->tree_params.hash_alg, desc,
-				       vi->measurement);
+	err = compute_file_digest(vi->tree_params.hash_alg, desc,
+				  vi->file_digest);
 	if (err) {
-		fsverity_err(inode, "Error %d computing file measurement", err);
+		fsverity_err(inode, "Error %d computing file digest", err);
 		goto out;
 	}
-	pr_debug("Computed file measurement: %s:%*phN\n",
+	pr_debug("Computed file digest: %s:%*phN\n",
 		 vi->tree_params.hash_alg->name,
-		 vi->tree_params.digest_size, vi->measurement);
+		 vi->tree_params.digest_size, vi->file_digest);
 
-	err = fsverity_verify_signature(vi, desc, desc_size);
+	err = fsverity_verify_signature(vi, desc->signature,
+					le32_to_cpu(desc->sig_size));
 out:
 	if (err) {
 		fsverity_free_info(vi);
@@ -220,11 +194,20 @@
 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().
+	 * Multiple tasks may race to set ->i_verity_info, so use
+	 * cmpxchg_release().  This pairs with the smp_load_acquire() in
+	 * fsverity_get_info().  I.e., here we publish ->i_verity_info with a
+	 * RELEASE barrier so that other tasks can ACQUIRE it.
 	 */
-	if (cmpxchg(&inode->i_verity_info, NULL, vi) != NULL)
+	if (cmpxchg_release(&inode->i_verity_info, NULL, vi) != NULL) {
+		/* Lost the race, so free the fsverity_info we allocated. */
 		fsverity_free_info(vi);
+		/*
+		 * Afterwards, the caller may access ->i_verity_info directly,
+		 * so make sure to ACQUIRE the winning fsverity_info.
+		 */
+		(void)fsverity_get_info(inode);
+	}
 }
 
 void fsverity_free_info(struct fsverity_info *vi)
@@ -235,15 +218,57 @@
 	kmem_cache_free(fsverity_info_cachep, vi);
 }
 
-/* Ensure the inode has an ->i_verity_info */
-static int ensure_verity_info(struct inode *inode)
+static bool validate_fsverity_descriptor(struct inode *inode,
+					 const struct fsverity_descriptor *desc,
+					 size_t desc_size)
 {
-	struct fsverity_info *vi = fsverity_get_info(inode);
-	struct fsverity_descriptor *desc;
-	int res;
+	if (desc_size < sizeof(*desc)) {
+		fsverity_err(inode, "Unrecognized descriptor size: %zu bytes",
+			     desc_size);
+		return false;
+	}
 
-	if (vi)
-		return 0;
+	if (desc->version != 1) {
+		fsverity_err(inode, "Unrecognized descriptor version: %u",
+			     desc->version);
+		return false;
+	}
+
+	if (memchr_inv(desc->__reserved, 0, sizeof(desc->__reserved))) {
+		fsverity_err(inode, "Reserved bits set in descriptor");
+		return false;
+	}
+
+	if (desc->salt_size > sizeof(desc->salt)) {
+		fsverity_err(inode, "Invalid salt_size: %u", desc->salt_size);
+		return false;
+	}
+
+	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 false;
+	}
+
+	if (le32_to_cpu(desc->sig_size) > desc_size - sizeof(*desc)) {
+		fsverity_err(inode, "Signature overflows verity descriptor");
+		return false;
+	}
+
+	return true;
+}
+
+/*
+ * Read the inode's fsverity_descriptor (with optional appended signature) from
+ * the filesystem, and do basic validation of it.
+ */
+int fsverity_get_descriptor(struct inode *inode,
+			    struct fsverity_descriptor **desc_ret,
+			    size_t *desc_size_ret)
+{
+	int res;
+	struct fsverity_descriptor *desc;
 
 	res = inode->i_sb->s_vop->get_verity_descriptor(inode, NULL, 0);
 	if (res < 0) {
@@ -262,20 +287,46 @@
 	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;
+		kfree(desc);
+		return res;
 	}
 
-	vi = fsverity_create_info(inode, desc, res);
+	if (!validate_fsverity_descriptor(inode, desc, res)) {
+		kfree(desc);
+		return -EINVAL;
+	}
+
+	*desc_ret = desc;
+	*desc_size_ret = res;
+	return 0;
+}
+
+/* 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;
+	size_t desc_size;
+	int err;
+
+	if (vi)
+		return 0;
+
+	err = fsverity_get_descriptor(inode, &desc, &desc_size);
+	if (err)
+		return err;
+
+	vi = fsverity_create_info(inode, desc, desc_size);
 	if (IS_ERR(vi)) {
-		res = PTR_ERR(vi);
+		err = PTR_ERR(vi);
 		goto out_free_desc;
 	}
 
 	fsverity_set_info(inode, vi);
-	res = 0;
+	err = 0;
 out_free_desc:
 	kfree(desc);
-	return res;
+	return err;
 }
 
 /**
@@ -329,6 +380,7 @@
 
 /**
  * fsverity_cleanup_inode() - free the inode's verity info, if present
+ * @inode: an inode being evicted
  *
  * Filesystems must call this on inode eviction to free ->i_verity_info.
  */
@@ -343,7 +395,7 @@
 {
 	fsverity_info_cachep = KMEM_CACHE_USERCOPY(fsverity_info,
 						   SLAB_RECLAIM_ACCOUNT,
-						   measurement);
+						   file_digest);
 	if (!fsverity_info_cachep)
 		return -ENOMEM;
 	return 0;
diff --git a/fs/verity/read_metadata.c b/fs/verity/read_metadata.c
new file mode 100644
index 0000000..7e2d0c7
--- /dev/null
+++ b/fs/verity/read_metadata.c
@@ -0,0 +1,195 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Ioctl to read verity metadata
+ *
+ * Copyright 2021 Google LLC
+ */
+
+#include "fsverity_private.h"
+
+#include <linux/backing-dev.h>
+#include <linux/highmem.h>
+#include <linux/sched/signal.h>
+#include <linux/uaccess.h>
+
+static int fsverity_read_merkle_tree(struct inode *inode,
+				     const struct fsverity_info *vi,
+				     void __user *buf, u64 offset, int length)
+{
+	const struct fsverity_operations *vops = inode->i_sb->s_vop;
+	u64 end_offset;
+	unsigned int offs_in_page;
+	pgoff_t index, last_index;
+	int retval = 0;
+	int err = 0;
+
+	end_offset = min(offset + length, vi->tree_params.tree_size);
+	if (offset >= end_offset)
+		return 0;
+	offs_in_page = offset_in_page(offset);
+	last_index = (end_offset - 1) >> PAGE_SHIFT;
+
+	/*
+	 * Iterate through each Merkle tree page in the requested range and copy
+	 * the requested portion to userspace.  Note that the Merkle tree block
+	 * size isn't important here, as we are returning a byte stream; i.e.,
+	 * we can just work with pages even if the tree block size != PAGE_SIZE.
+	 */
+	for (index = offset >> PAGE_SHIFT; index <= last_index; index++) {
+		unsigned long num_ra_pages =
+			min_t(unsigned long, last_index - index + 1,
+			      inode->i_sb->s_bdi->io_pages);
+		unsigned int bytes_to_copy = min_t(u64, end_offset - offset,
+						   PAGE_SIZE - offs_in_page);
+		struct page *page;
+		const void *virt;
+
+		page = vops->read_merkle_tree_page(inode, index, num_ra_pages);
+		if (IS_ERR(page)) {
+			err = PTR_ERR(page);
+			fsverity_err(inode,
+				     "Error %d reading Merkle tree page %lu",
+				     err, index);
+			break;
+		}
+
+		virt = kmap(page);
+		if (copy_to_user(buf, virt + offs_in_page, bytes_to_copy)) {
+			kunmap(page);
+			put_page(page);
+			err = -EFAULT;
+			break;
+		}
+		kunmap(page);
+		put_page(page);
+
+		retval += bytes_to_copy;
+		buf += bytes_to_copy;
+		offset += bytes_to_copy;
+
+		if (fatal_signal_pending(current))  {
+			err = -EINTR;
+			break;
+		}
+		cond_resched();
+		offs_in_page = 0;
+	}
+	return retval ? retval : err;
+}
+
+/* Copy the requested portion of the buffer to userspace. */
+static int fsverity_read_buffer(void __user *dst, u64 offset, int length,
+				const void *src, size_t src_length)
+{
+	if (offset >= src_length)
+		return 0;
+	src += offset;
+	src_length -= offset;
+
+	length = min_t(size_t, length, src_length);
+
+	if (copy_to_user(dst, src, length))
+		return -EFAULT;
+
+	return length;
+}
+
+static int fsverity_read_descriptor(struct inode *inode,
+				    void __user *buf, u64 offset, int length)
+{
+	struct fsverity_descriptor *desc;
+	size_t desc_size;
+	int res;
+
+	res = fsverity_get_descriptor(inode, &desc, &desc_size);
+	if (res)
+		return res;
+
+	/* don't include the signature */
+	desc_size = offsetof(struct fsverity_descriptor, signature);
+	desc->sig_size = 0;
+
+	res = fsverity_read_buffer(buf, offset, length, desc, desc_size);
+
+	kfree(desc);
+	return res;
+}
+
+static int fsverity_read_signature(struct inode *inode,
+				   void __user *buf, u64 offset, int length)
+{
+	struct fsverity_descriptor *desc;
+	size_t desc_size;
+	int res;
+
+	res = fsverity_get_descriptor(inode, &desc, &desc_size);
+	if (res)
+		return res;
+
+	if (desc->sig_size == 0) {
+		res = -ENODATA;
+		goto out;
+	}
+
+	/*
+	 * Include only the signature.  Note that fsverity_get_descriptor()
+	 * already verified that sig_size is in-bounds.
+	 */
+	res = fsverity_read_buffer(buf, offset, length, desc->signature,
+				   le32_to_cpu(desc->sig_size));
+out:
+	kfree(desc);
+	return res;
+}
+
+/**
+ * fsverity_ioctl_read_metadata() - read verity metadata from a file
+ * @filp: file to read the metadata from
+ * @uarg: user pointer to fsverity_read_metadata_arg
+ *
+ * Return: length read on success, 0 on EOF, -errno on failure
+ */
+int fsverity_ioctl_read_metadata(struct file *filp, const void __user *uarg)
+{
+	struct inode *inode = file_inode(filp);
+	const struct fsverity_info *vi;
+	struct fsverity_read_metadata_arg arg;
+	int length;
+	void __user *buf;
+
+	vi = fsverity_get_info(inode);
+	if (!vi)
+		return -ENODATA; /* not a verity file */
+	/*
+	 * Note that we don't have to explicitly check that the file is open for
+	 * reading, since verity files can only be opened for reading.
+	 */
+
+	if (copy_from_user(&arg, uarg, sizeof(arg)))
+		return -EFAULT;
+
+	if (arg.__reserved)
+		return -EINVAL;
+
+	/* offset + length must not overflow. */
+	if (arg.offset + arg.length < arg.offset)
+		return -EINVAL;
+
+	/* Ensure that the return value will fit in INT_MAX. */
+	length = min_t(u64, arg.length, INT_MAX);
+
+	buf = u64_to_user_ptr(arg.buf_ptr);
+
+	switch (arg.metadata_type) {
+	case FS_VERITY_METADATA_TYPE_MERKLE_TREE:
+		return fsverity_read_merkle_tree(inode, vi, buf, arg.offset,
+						 length);
+	case FS_VERITY_METADATA_TYPE_DESCRIPTOR:
+		return fsverity_read_descriptor(inode, buf, arg.offset, length);
+	case FS_VERITY_METADATA_TYPE_SIGNATURE:
+		return fsverity_read_signature(inode, buf, arg.offset, length);
+	default:
+		return -EINVAL;
+	}
+}
+EXPORT_SYMBOL_GPL(fsverity_ioctl_read_metadata);
diff --git a/fs/verity/signature.c b/fs/verity/signature.c
index c8b2552..e33f6c4 100644
--- a/fs/verity/signature.c
+++ b/fs/verity/signature.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/signature.c: verification of builtin signatures
+ * Verification of builtin signatures
  *
  * Copyright 2019 Google LLC
  */
@@ -28,22 +28,50 @@
 
 /**
  * fsverity_verify_signature() - check a verity file's signature
+ * @vi: the file's fsverity_info
+ * @signature: the file's built-in signature
+ * @sig_size: size of signature in bytes, or 0 if no 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.
+ * If the file includes a signature of its fs-verity file digest, 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 u8 *signature, size_t sig_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;
+	unsigned int digest_algorithm =
+		vi->tree_params.hash_alg - fsverity_hash_algs;
+
+	return __fsverity_verify_signature(vi->inode, signature, sig_size,
+					   vi->file_digest, digest_algorithm);
+}
+
+/**
+ * __fsverity_verify_signature() - check a verity file's signature
+ * @inode: the file's inode
+ * @signature: the file's signature
+ * @sig_size: size of @signature. Can be 0 if there is no signature
+ * @file_digest: the file's digest
+ * @digest_algorithm: the digest algorithm used
+ *
+ * Takes the file's digest and optional signature and verifies the signature
+ * against the digest and the fs-verity keyring if appropriate
+ *
+ * Return: 0 on success (signature valid or not required); -errno on failure
+ */
+int __fsverity_verify_signature(const struct inode *inode, const u8 *signature,
+				size_t sig_size, const u8 *file_digest,
+				unsigned int digest_algorithm)
+{
+	struct fsverity_formatted_digest *d;
+	struct fsverity_hash_alg *hash_alg = fsverity_get_hash_alg(inode,
+							digest_algorithm);
 	int err;
 
+	if (IS_ERR(hash_alg))
+		return PTR_ERR(hash_alg);
+
 	if (sig_size == 0) {
 		if (fsverity_require_signatures) {
 			fsverity_err(inode,
@@ -53,22 +81,16 @@
 		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);
+	memcpy(d->digest, file_digest, hash_alg->digest_size);
 
 	err = verify_pkcs7_signature(d, sizeof(*d) + hash_alg->digest_size,
-				     desc->signature, sig_size,
-				     fsverity_keyring,
+				     signature, sig_size, fsverity_keyring,
 				     VERIFYING_UNSPECIFIED_SIGNATURE,
 				     NULL, NULL);
 	kfree(d);
@@ -87,10 +109,11 @@
 		return err;
 	}
 
-	pr_debug("Valid signature for file measurement %s:%*phN\n",
-		 hash_alg->name, hash_alg->digest_size, vi->measurement);
+	pr_debug("Valid signature for file digest %s:%*phN\n",
+		 hash_alg->name, hash_alg->digest_size, file_digest);
 	return 0;
 }
+EXPORT_SYMBOL_GPL(__fsverity_verify_signature);
 
 #ifdef CONFIG_SYSCTL
 static struct ctl_table_header *fsverity_sysctl_header;
diff --git a/fs/verity/verify.c b/fs/verity/verify.c
index 3e8f2de..0adb970f 100644
--- a/fs/verity/verify.c
+++ b/fs/verity/verify.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * fs/verity/verify.c: data verification functions, i.e. hooks for ->readpages()
+ * Data verification functions, i.e. hooks for ->readpages()
  *
  * Copyright 2019 Google LLC
  */
@@ -84,7 +84,8 @@
  * 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)
+			struct ahash_request *req, struct page *data_page,
+			unsigned long level0_ra_pages)
 {
 	const struct merkle_tree_params *params = &vi->tree_params;
 	const unsigned int hsize = params->digest_size;
@@ -117,8 +118,8 @@
 		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);
+		hpage = inode->i_sb->s_vop->read_merkle_tree_page(inode, hindex,
+				level == 0 ? level0_ra_pages : 0);
 		if (IS_ERR(hpage)) {
 			err = PTR_ERR(hpage);
 			fsverity_err(inode,
@@ -178,6 +179,7 @@
 
 /**
  * fsverity_verify_page() - verify a data page
+ * @page: the page to verity
  *
  * 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.
@@ -191,13 +193,12 @@
 	struct ahash_request *req;
 	bool valid;
 
-	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
-	if (unlikely(!req))
-		return false;
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(vi->tree_params.hash_alg, GFP_NOFS);
 
-	valid = verify_page(inode, vi, req, page);
+	valid = verify_page(inode, vi, req, page, 0);
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(vi->tree_params.hash_alg, req);
 
 	return valid;
 }
@@ -206,6 +207,7 @@
 #ifdef CONFIG_BLOCK
 /**
  * fsverity_verify_bio() - verify a 'read' bio that has just completed
+ * @bio: the bio to verify
  *
  * 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
@@ -222,31 +224,49 @@
 {
 	struct inode *inode = bio_first_page_all(bio)->mapping->host;
 	const struct fsverity_info *vi = inode->i_verity_info;
+	const struct merkle_tree_params *params = &vi->tree_params;
 	struct ahash_request *req;
 	struct bio_vec *bv;
 	struct bvec_iter_all iter_all;
+	unsigned long max_ra_pages = 0;
 
-	req = ahash_request_alloc(vi->tree_params.hash_alg->tfm, GFP_NOFS);
-	if (unlikely(!req)) {
+	/* This allocation never fails, since it's mempool-backed. */
+	req = fsverity_alloc_hash_request(params->hash_alg, GFP_NOFS);
+
+	if (bio->bi_opf & REQ_RAHEAD) {
+		/*
+		 * If this bio is for data readahead, then we also do readahead
+		 * of the first (largest) level of the Merkle tree.  Namely,
+		 * when a Merkle tree page is read, we also try to piggy-back on
+		 * some additional pages -- up to 1/4 the number of data pages.
+		 *
+		 * This improves sequential read performance, as it greatly
+		 * reduces the number of I/O requests made to the Merkle tree.
+		 */
 		bio_for_each_segment_all(bv, bio, iter_all)
-			SetPageError(bv->bv_page);
-		return;
+			max_ra_pages++;
+		max_ra_pages /= 4;
 	}
 
 	bio_for_each_segment_all(bv, bio, iter_all) {
 		struct page *page = bv->bv_page;
+		unsigned long level0_index = page->index >> params->log_arity;
+		unsigned long level0_ra_pages =
+			min(max_ra_pages, params->level0_blocks - level0_index);
 
-		if (!PageError(page) && !verify_page(inode, vi, req, page))
+		if (!PageError(page) &&
+		    !verify_page(inode, vi, req, page, level0_ra_pages))
 			SetPageError(page);
 	}
 
-	ahash_request_free(req);
+	fsverity_free_hash_request(params->hash_alg, req);
 }
 EXPORT_SYMBOL_GPL(fsverity_verify_bio);
 #endif /* CONFIG_BLOCK */
 
 /**
  * fsverity_enqueue_verify_work() - enqueue work on the fs-verity workqueue
+ * @work: the work to enqueue
  *
  * Enqueue verification work for asynchronous processing.
  */
diff --git a/fs/xattr.c b/fs/xattr.c
index f285457..81f0fb6 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -318,7 +318,7 @@
 		return PTR_ERR(handler);
 	if (!handler->get)
 		return -EOPNOTSUPP;
-	error = handler->get(handler, dentry, inode, name, NULL, 0);
+	error = handler->get(handler, dentry, inode, name, NULL, 0, 0);
 	if (error < 0)
 		return error;
 
@@ -329,32 +329,20 @@
 		memset(value, 0, error + 1);
 	}
 
-	error = handler->get(handler, dentry, inode, name, value, error);
+	error = handler->get(handler, dentry, inode, name, value, error, 0);
 	*xattr_value = value;
 	return error;
 }
 
 ssize_t
 __vfs_getxattr(struct dentry *dentry, struct inode *inode, const char *name,
-	       void *value, size_t size)
+	       void *value, size_t size, int flags)
 {
 	const struct xattr_handler *handler;
-
-	handler = xattr_resolve_name(inode, &name);
-	if (IS_ERR(handler))
-		return PTR_ERR(handler);
-	if (!handler->get)
-		return -EOPNOTSUPP;
-	return handler->get(handler, dentry, inode, name, value, size);
-}
-EXPORT_SYMBOL(__vfs_getxattr);
-
-ssize_t
-vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
-{
-	struct inode *inode = dentry->d_inode;
 	int error;
 
+	if (flags & XATTR_NOSECURITY)
+		goto nolsm;
 	error = xattr_permission(inode, name, MAY_READ);
 	if (error)
 		return error;
@@ -376,7 +364,19 @@
 		return ret;
 	}
 nolsm:
-	return __vfs_getxattr(dentry, inode, name, value, size);
+	handler = xattr_resolve_name(inode, &name);
+	if (IS_ERR(handler))
+		return PTR_ERR(handler);
+	if (!handler->get)
+		return -EOPNOTSUPP;
+	return handler->get(handler, dentry, inode, name, value, size, flags);
+}
+EXPORT_SYMBOL(__vfs_getxattr);
+
+ssize_t
+vfs_getxattr(struct dentry *dentry, const char *name, void *value, size_t size)
+{
+	return __vfs_getxattr(dentry, dentry->d_inode, name, value, size, 0);
 }
 EXPORT_SYMBOL_GPL(vfs_getxattr);
 
diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c
index cb895b1..9d2030e 100644
--- a/fs/xfs/xfs_xattr.c
+++ b/fs/xfs/xfs_xattr.c
@@ -18,7 +18,8 @@
 
 static int
 xfs_xattr_get(const struct xattr_handler *handler, struct dentry *unused,
-		struct inode *inode, const char *name, void *value, size_t size)
+		struct inode *inode, const char *name, void *value, size_t size,
+		int flags)
 {
 	int xflags = handler->flags;
 	struct xfs_inode *ip = XFS_I(inode);
diff --git a/include/OWNERS b/include/OWNERS
new file mode 100644
index 0000000..ab8142b
--- /dev/null
+++ b/include/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/include/OWNERS
diff --git a/include/asm-generic/seccomp.h b/include/asm-generic/seccomp.h
index 1321ac7..6b6f42b 100644
--- a/include/asm-generic/seccomp.h
+++ b/include/asm-generic/seccomp.h
@@ -33,7 +33,7 @@
 	static const int mode1_syscalls_32[] = {
 		__NR_seccomp_read_32, __NR_seccomp_write_32,
 		__NR_seccomp_exit_32, __NR_seccomp_sigreturn_32,
-		0, /* null terminated */
+		-1, /* negative terminated */
 	};
 	return mode1_syscalls_32;
 }
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h
index 8a5ced9..d1bdab8 100644
--- a/include/asm-generic/vmlinux.lds.h
+++ b/include/asm-generic/vmlinux.lds.h
@@ -63,18 +63,23 @@
  * .data. We don't want to pull in .data..other sections, which Linux
  * has defined. Same for text and bss.
  *
+ * With LTO_CLANG, the linker also splits sections by default, so we need
+ * these macros to combine the sections during the final link.
+ *
  * RODATA_MAIN is not used because existing code already defines .rodata.x
  * sections to be brought in with rodata.
  */
-#ifdef CONFIG_LD_DEAD_CODE_DATA_ELIMINATION
+#if defined(CONFIG_LD_DEAD_CODE_DATA_ELIMINATION) || defined(CONFIG_LTO_CLANG)
 #define TEXT_MAIN .text .text.[0-9a-zA-Z_]*
-#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..LPBX*
+#define TEXT_CFI_MAIN .text.[0-9a-zA-Z_]*.cfi
+#define DATA_MAIN .data .data.[0-9a-zA-Z_]* .data..L* .data..compoundliteral*
 #define SDATA_MAIN .sdata .sdata.[0-9a-zA-Z_]*
-#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]*
-#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]*
+#define RODATA_MAIN .rodata .rodata.[0-9a-zA-Z_]* .rodata..L*
+#define BSS_MAIN .bss .bss.[0-9a-zA-Z_]* .bss..compoundliteral*
 #define SBSS_MAIN .sbss .sbss.[0-9a-zA-Z_]*
 #else
 #define TEXT_MAIN .text
+#define TEXT_CFI_MAIN .text.cfi
 #define DATA_MAIN .data
 #define SDATA_MAIN .sdata
 #define RODATA_MAIN .rodata
@@ -533,8 +538,10 @@
 		*(TEXT_MAIN .text.fixup)				\
 		*(.text.unlikely .text.unlikely.*)			\
 		*(.text.unknown .text.unknown.*)			\
+		*(TEXT_CFI_MAIN)					\
 		NOINSTR_TEXT						\
 		*(.text..refcount)					\
+		*(.text..ftrace)					\
 		*(.ref.text)						\
 		*(.text.asan.* .text.tsan.*)				\
 	MEM_KEEP(init.text*)						\
diff --git a/include/crypto/blake2b.h b/include/crypto/blake2b.h
new file mode 100644
index 0000000..18875f1
--- /dev/null
+++ b/include/crypto/blake2b.h
@@ -0,0 +1,67 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+
+#ifndef _CRYPTO_BLAKE2B_H
+#define _CRYPTO_BLAKE2B_H
+
+#include <linux/bug.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+enum blake2b_lengths {
+	BLAKE2B_BLOCK_SIZE = 128,
+	BLAKE2B_HASH_SIZE = 64,
+	BLAKE2B_KEY_SIZE = 64,
+
+	BLAKE2B_160_HASH_SIZE = 20,
+	BLAKE2B_256_HASH_SIZE = 32,
+	BLAKE2B_384_HASH_SIZE = 48,
+	BLAKE2B_512_HASH_SIZE = 64,
+};
+
+struct blake2b_state {
+	/* 'h', 't', and 'f' are used in assembly code, so keep them as-is. */
+	u64 h[8];
+	u64 t[2];
+	u64 f[2];
+	u8 buf[BLAKE2B_BLOCK_SIZE];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2b_iv {
+	BLAKE2B_IV0 = 0x6A09E667F3BCC908ULL,
+	BLAKE2B_IV1 = 0xBB67AE8584CAA73BULL,
+	BLAKE2B_IV2 = 0x3C6EF372FE94F82BULL,
+	BLAKE2B_IV3 = 0xA54FF53A5F1D36F1ULL,
+	BLAKE2B_IV4 = 0x510E527FADE682D1ULL,
+	BLAKE2B_IV5 = 0x9B05688C2B3E6C1FULL,
+	BLAKE2B_IV6 = 0x1F83D9ABFB41BD6BULL,
+	BLAKE2B_IV7 = 0x5BE0CD19137E2179ULL,
+};
+
+static inline void __blake2b_init(struct blake2b_state *state, size_t outlen,
+				  const void *key, size_t keylen)
+{
+	state->h[0] = BLAKE2B_IV0 ^ (0x01010000 | keylen << 8 | outlen);
+	state->h[1] = BLAKE2B_IV1;
+	state->h[2] = BLAKE2B_IV2;
+	state->h[3] = BLAKE2B_IV3;
+	state->h[4] = BLAKE2B_IV4;
+	state->h[5] = BLAKE2B_IV5;
+	state->h[6] = BLAKE2B_IV6;
+	state->h[7] = BLAKE2B_IV7;
+	state->t[0] = 0;
+	state->t[1] = 0;
+	state->f[0] = 0;
+	state->f[1] = 0;
+	state->buflen = 0;
+	state->outlen = outlen;
+	if (keylen) {
+		memcpy(state->buf, key, keylen);
+		memset(&state->buf[keylen], 0, BLAKE2B_BLOCK_SIZE - keylen);
+		state->buflen = BLAKE2B_BLOCK_SIZE;
+	}
+}
+
+#endif /* _CRYPTO_BLAKE2B_H */
diff --git a/include/crypto/blake2s.h b/include/crypto/blake2s.h
new file mode 100644
index 0000000..bc3fb59
--- /dev/null
+++ b/include/crypto/blake2s.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef _CRYPTO_BLAKE2S_H
+#define _CRYPTO_BLAKE2S_H
+
+#include <linux/bug.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+
+enum blake2s_lengths {
+	BLAKE2S_BLOCK_SIZE = 64,
+	BLAKE2S_HASH_SIZE = 32,
+	BLAKE2S_KEY_SIZE = 32,
+
+	BLAKE2S_128_HASH_SIZE = 16,
+	BLAKE2S_160_HASH_SIZE = 20,
+	BLAKE2S_224_HASH_SIZE = 28,
+	BLAKE2S_256_HASH_SIZE = 32,
+};
+
+struct blake2s_state {
+	/* 'h', 't', and 'f' are used in assembly code, so keep them as-is. */
+	u32 h[8];
+	u32 t[2];
+	u32 f[2];
+	u8 buf[BLAKE2S_BLOCK_SIZE];
+	unsigned int buflen;
+	unsigned int outlen;
+};
+
+enum blake2s_iv {
+	BLAKE2S_IV0 = 0x6A09E667UL,
+	BLAKE2S_IV1 = 0xBB67AE85UL,
+	BLAKE2S_IV2 = 0x3C6EF372UL,
+	BLAKE2S_IV3 = 0xA54FF53AUL,
+	BLAKE2S_IV4 = 0x510E527FUL,
+	BLAKE2S_IV5 = 0x9B05688CUL,
+	BLAKE2S_IV6 = 0x1F83D9ABUL,
+	BLAKE2S_IV7 = 0x5BE0CD19UL,
+};
+
+static inline void __blake2s_init(struct blake2s_state *state, size_t outlen,
+				  const void *key, size_t keylen)
+{
+	state->h[0] = BLAKE2S_IV0 ^ (0x01010000 | keylen << 8 | outlen);
+	state->h[1] = BLAKE2S_IV1;
+	state->h[2] = BLAKE2S_IV2;
+	state->h[3] = BLAKE2S_IV3;
+	state->h[4] = BLAKE2S_IV4;
+	state->h[5] = BLAKE2S_IV5;
+	state->h[6] = BLAKE2S_IV6;
+	state->h[7] = BLAKE2S_IV7;
+	state->t[0] = 0;
+	state->t[1] = 0;
+	state->f[0] = 0;
+	state->f[1] = 0;
+	state->buflen = 0;
+	state->outlen = outlen;
+	if (keylen) {
+		memcpy(state->buf, key, keylen);
+		memset(&state->buf[keylen], 0, BLAKE2S_BLOCK_SIZE - keylen);
+		state->buflen = BLAKE2S_BLOCK_SIZE;
+	}
+}
+
+static inline void blake2s_init(struct blake2s_state *state,
+				const size_t outlen)
+{
+	__blake2s_init(state, outlen, NULL, 0);
+}
+
+static inline void blake2s_init_key(struct blake2s_state *state,
+				    const size_t outlen, const void *key,
+				    const size_t keylen)
+{
+	WARN_ON(IS_ENABLED(DEBUG) && (!outlen || outlen > BLAKE2S_HASH_SIZE ||
+		!key || !keylen || keylen > BLAKE2S_KEY_SIZE));
+
+	__blake2s_init(state, outlen, key, keylen);
+}
+
+void blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen);
+void blake2s_final(struct blake2s_state *state, u8 *out);
+
+static inline void blake2s(u8 *out, const u8 *in, const u8 *key,
+			   const size_t outlen, const size_t inlen,
+			   const size_t keylen)
+{
+	struct blake2s_state state;
+
+	WARN_ON(IS_ENABLED(DEBUG) && ((!in && inlen > 0) || !out || !outlen ||
+		outlen > BLAKE2S_HASH_SIZE || keylen > BLAKE2S_KEY_SIZE ||
+		(!key && keylen)));
+
+	__blake2s_init(&state, outlen, key, keylen);
+	blake2s_update(&state, in, inlen);
+	blake2s_final(&state, out);
+}
+
+void blake2s256_hmac(u8 *out, const u8 *in, const u8 *key, const size_t inlen,
+		     const size_t keylen);
+
+#endif /* _CRYPTO_BLAKE2S_H */
diff --git a/include/crypto/chacha.h b/include/crypto/chacha.h
index d1e723c..3a1c72f 100644
--- a/include/crypto/chacha.h
+++ b/include/crypto/chacha.h
@@ -15,9 +15,8 @@
 #ifndef _CRYPTO_CHACHA_H
 #define _CRYPTO_CHACHA_H
 
-#include <crypto/skcipher.h>
+#include <asm/unaligned.h>
 #include <linux/types.h>
-#include <linux/crypto.h>
 
 /* 32-bit stream position, then 96-bit nonce (RFC7539 convention) */
 #define CHACHA_IV_SIZE		16
@@ -26,29 +25,75 @@
 #define CHACHA_BLOCK_SIZE	64
 #define CHACHAPOLY_IV_SIZE	12
 
+#define CHACHA_STATE_WORDS	(CHACHA_BLOCK_SIZE / sizeof(u32))
+
 /* 192-bit nonce, then 64-bit stream position */
 #define XCHACHA_IV_SIZE		32
 
-struct chacha_ctx {
-	u32 key[8];
-	int nrounds;
-};
-
-void chacha_block(u32 *state, u8 *stream, int nrounds);
+void chacha_block_generic(u32 *state, u8 *stream, int nrounds);
 static inline void chacha20_block(u32 *state, u8 *stream)
 {
-	chacha_block(state, stream, 20);
+	chacha_block_generic(state, stream, 20);
 }
-void hchacha_block(const u32 *in, u32 *out, int nrounds);
 
-void crypto_chacha_init(u32 *state, const struct chacha_ctx *ctx, const u8 *iv);
+void hchacha_block_arch(const u32 *state, u32 *out, int nrounds);
+void hchacha_block_generic(const u32 *state, u32 *out, int nrounds);
 
-int crypto_chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize);
-int crypto_chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
-			   unsigned int keysize);
+static inline void hchacha_block(const u32 *state, u32 *out, int nrounds)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		hchacha_block_arch(state, out, nrounds);
+	else
+		hchacha_block_generic(state, out, nrounds);
+}
 
-int crypto_chacha_crypt(struct skcipher_request *req);
-int crypto_xchacha_crypt(struct skcipher_request *req);
+void chacha_init_arch(u32 *state, const u32 *key, const u8 *iv);
+static inline void chacha_init_generic(u32 *state, const u32 *key, const u8 *iv)
+{
+	state[0]  = 0x61707865; /* "expa" */
+	state[1]  = 0x3320646e; /* "nd 3" */
+	state[2]  = 0x79622d32; /* "2-by" */
+	state[3]  = 0x6b206574; /* "te k" */
+	state[4]  = key[0];
+	state[5]  = key[1];
+	state[6]  = key[2];
+	state[7]  = key[3];
+	state[8]  = key[4];
+	state[9]  = key[5];
+	state[10] = key[6];
+	state[11] = key[7];
+	state[12] = get_unaligned_le32(iv +  0);
+	state[13] = get_unaligned_le32(iv +  4);
+	state[14] = get_unaligned_le32(iv +  8);
+	state[15] = get_unaligned_le32(iv + 12);
+}
+
+static inline void chacha_init(u32 *state, const u32 *key, const u8 *iv)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		chacha_init_arch(state, key, iv);
+	else
+		chacha_init_generic(state, key, iv);
+}
+
+void chacha_crypt_arch(u32 *state, u8 *dst, const u8 *src,
+		       unsigned int bytes, int nrounds);
+void chacha_crypt_generic(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds);
+
+static inline void chacha_crypt(u32 *state, u8 *dst, const u8 *src,
+				unsigned int bytes, int nrounds)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA))
+		chacha_crypt_arch(state, dst, src, bytes, nrounds);
+	else
+		chacha_crypt_generic(state, dst, src, bytes, nrounds);
+}
+
+static inline void chacha20_crypt(u32 *state, u8 *dst, const u8 *src,
+				  unsigned int bytes)
+{
+	chacha_crypt(state, dst, src, bytes, 20);
+}
 
 #endif /* _CRYPTO_CHACHA_H */
diff --git a/include/crypto/chacha20poly1305.h b/include/crypto/chacha20poly1305.h
new file mode 100644
index 0000000..d2ac3ff7d
--- /dev/null
+++ b/include/crypto/chacha20poly1305.h
@@ -0,0 +1,50 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef __CHACHA20POLY1305_H
+#define __CHACHA20POLY1305_H
+
+#include <linux/types.h>
+#include <linux/scatterlist.h>
+
+enum chacha20poly1305_lengths {
+	XCHACHA20POLY1305_NONCE_SIZE = 24,
+	CHACHA20POLY1305_KEY_SIZE = 32,
+	CHACHA20POLY1305_AUTHTAG_SIZE = 16
+};
+
+void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool __must_check
+chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			 const u8 *ad, const size_t ad_len, const u64 nonce,
+			 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool __must_check xchacha20poly1305_decrypt(
+	u8 *dst, const u8 *src, const size_t src_len, const u8 *ad,
+	const size_t ad_len, const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+	const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE]);
+
+bool chacha20poly1305_selftest(void);
+
+#endif /* __CHACHA20POLY1305_H */
diff --git a/include/crypto/curve25519.h b/include/crypto/curve25519.h
new file mode 100644
index 0000000..9ecb3c1
--- /dev/null
+++ b/include/crypto/curve25519.h
@@ -0,0 +1,73 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#ifndef CURVE25519_H
+#define CURVE25519_H
+
+#include <crypto/algapi.h> // For crypto_memneq.
+#include <linux/types.h>
+#include <linux/random.h>
+
+enum curve25519_lengths {
+	CURVE25519_KEY_SIZE = 32
+};
+
+extern const u8 curve25519_null_point[];
+extern const u8 curve25519_base_point[];
+
+void curve25519_generic(u8 out[CURVE25519_KEY_SIZE],
+			const u8 scalar[CURVE25519_KEY_SIZE],
+			const u8 point[CURVE25519_KEY_SIZE]);
+
+void curve25519_arch(u8 out[CURVE25519_KEY_SIZE],
+		     const u8 scalar[CURVE25519_KEY_SIZE],
+		     const u8 point[CURVE25519_KEY_SIZE]);
+
+void curve25519_base_arch(u8 pub[CURVE25519_KEY_SIZE],
+			  const u8 secret[CURVE25519_KEY_SIZE]);
+
+static inline
+bool __must_check curve25519(u8 mypublic[CURVE25519_KEY_SIZE],
+			     const u8 secret[CURVE25519_KEY_SIZE],
+			     const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
+	    (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
+		curve25519_arch(mypublic, secret, basepoint);
+	else
+		curve25519_generic(mypublic, secret, basepoint);
+	return crypto_memneq(mypublic, curve25519_null_point,
+			     CURVE25519_KEY_SIZE);
+}
+
+static inline bool
+__must_check curve25519_generate_public(u8 pub[CURVE25519_KEY_SIZE],
+					const u8 secret[CURVE25519_KEY_SIZE])
+{
+	if (unlikely(!crypto_memneq(secret, curve25519_null_point,
+				    CURVE25519_KEY_SIZE)))
+		return false;
+
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_CURVE25519) &&
+	    (!IS_ENABLED(CONFIG_CRYPTO_CURVE25519_X86) || IS_ENABLED(CONFIG_AS_ADX)))
+		curve25519_base_arch(pub, secret);
+	else
+		curve25519_generic(pub, secret, curve25519_base_point);
+	return crypto_memneq(pub, curve25519_null_point, CURVE25519_KEY_SIZE);
+}
+
+static inline void curve25519_clamp_secret(u8 secret[CURVE25519_KEY_SIZE])
+{
+	secret[0] &= 248;
+	secret[31] = (secret[31] & 127) | 64;
+}
+
+static inline void curve25519_generate_secret(u8 secret[CURVE25519_KEY_SIZE])
+{
+	get_random_bytes_wait(secret, CURVE25519_KEY_SIZE);
+	curve25519_clamp_secret(secret);
+}
+
+#endif /* CURVE25519_H */
diff --git a/include/crypto/drbg.h b/include/crypto/drbg.h
index 8c9af21..c416512 100644
--- a/include/crypto/drbg.h
+++ b/include/crypto/drbg.h
@@ -184,11 +184,7 @@
 static inline size_t drbg_max_requests(struct drbg_state *drbg)
 {
 	/* SP800-90A requires 2**48 maximum requests before reseeding */
-#if (__BITS_PER_LONG == 32)
-	return SIZE_MAX;
-#else
-	return (1UL<<48);
-#endif
+	return (1<<20);
 }
 
 /*
diff --git a/include/crypto/internal/blake2b.h b/include/crypto/internal/blake2b.h
new file mode 100644
index 0000000..982fe5e
--- /dev/null
+++ b/include/crypto/internal/blake2b.h
@@ -0,0 +1,115 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Helper functions for BLAKE2b implementations.
+ * Keep this in sync with the corresponding BLAKE2s header.
+ */
+
+#ifndef _CRYPTO_INTERNAL_BLAKE2B_H
+#define _CRYPTO_INTERNAL_BLAKE2B_H
+
+#include <crypto/blake2b.h>
+#include <crypto/internal/hash.h>
+#include <linux/string.h>
+
+void blake2b_compress_generic(struct blake2b_state *state,
+			      const u8 *block, size_t nblocks, u32 inc);
+
+static inline void blake2b_set_lastblock(struct blake2b_state *state)
+{
+	state->f[0] = -1;
+}
+
+typedef void (*blake2b_compress_t)(struct blake2b_state *state,
+				   const u8 *block, size_t nblocks, u32 inc);
+
+static inline void __blake2b_update(struct blake2b_state *state,
+				    const u8 *in, size_t inlen,
+				    blake2b_compress_t compress)
+{
+	const size_t fill = BLAKE2B_BLOCK_SIZE - state->buflen;
+
+	if (unlikely(!inlen))
+		return;
+	if (inlen > fill) {
+		memcpy(state->buf + state->buflen, in, fill);
+		(*compress)(state, state->buf, 1, BLAKE2B_BLOCK_SIZE);
+		state->buflen = 0;
+		in += fill;
+		inlen -= fill;
+	}
+	if (inlen > BLAKE2B_BLOCK_SIZE) {
+		const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2B_BLOCK_SIZE);
+		/* Hash one less (full) block than strictly possible */
+		(*compress)(state, in, nblocks - 1, BLAKE2B_BLOCK_SIZE);
+		in += BLAKE2B_BLOCK_SIZE * (nblocks - 1);
+		inlen -= BLAKE2B_BLOCK_SIZE * (nblocks - 1);
+	}
+	memcpy(state->buf + state->buflen, in, inlen);
+	state->buflen += inlen;
+}
+
+static inline void __blake2b_final(struct blake2b_state *state, u8 *out,
+				   blake2b_compress_t compress)
+{
+	int i;
+
+	blake2b_set_lastblock(state);
+	memset(state->buf + state->buflen, 0,
+	       BLAKE2B_BLOCK_SIZE - state->buflen); /* Padding */
+	(*compress)(state, state->buf, 1, state->buflen);
+	for (i = 0; i < ARRAY_SIZE(state->h); i++)
+		__cpu_to_le64s(&state->h[i]);
+	memcpy(out, state->h, state->outlen);
+}
+
+/* Helper functions for shash implementations of BLAKE2b */
+
+struct blake2b_tfm_ctx {
+	u8 key[BLAKE2B_KEY_SIZE];
+	unsigned int keylen;
+};
+
+static inline int crypto_blake2b_setkey(struct crypto_shash *tfm,
+					const u8 *key, unsigned int keylen)
+{
+	struct blake2b_tfm_ctx *tctx = crypto_shash_ctx(tfm);
+
+	if (keylen == 0 || keylen > BLAKE2B_KEY_SIZE)
+		return -EINVAL;
+
+	memcpy(tctx->key, key, keylen);
+	tctx->keylen = keylen;
+
+	return 0;
+}
+
+static inline int crypto_blake2b_init(struct shash_desc *desc)
+{
+	const struct blake2b_tfm_ctx *tctx = crypto_shash_ctx(desc->tfm);
+	struct blake2b_state *state = shash_desc_ctx(desc);
+	unsigned int outlen = crypto_shash_digestsize(desc->tfm);
+
+	__blake2b_init(state, outlen, tctx->key, tctx->keylen);
+	return 0;
+}
+
+static inline int crypto_blake2b_update(struct shash_desc *desc,
+					const u8 *in, unsigned int inlen,
+					blake2b_compress_t compress)
+{
+	struct blake2b_state *state = shash_desc_ctx(desc);
+
+	__blake2b_update(state, in, inlen, compress);
+	return 0;
+}
+
+static inline int crypto_blake2b_final(struct shash_desc *desc, u8 *out,
+				       blake2b_compress_t compress)
+{
+	struct blake2b_state *state = shash_desc_ctx(desc);
+
+	__blake2b_final(state, out, compress);
+	return 0;
+}
+
+#endif /* _CRYPTO_INTERNAL_BLAKE2B_H */
diff --git a/include/crypto/internal/blake2s.h b/include/crypto/internal/blake2s.h
new file mode 100644
index 0000000..8e50d48
--- /dev/null
+++ b/include/crypto/internal/blake2s.h
@@ -0,0 +1,119 @@
+/* SPDX-License-Identifier: GPL-2.0 OR MIT */
+/*
+ * Helper functions for BLAKE2s implementations.
+ * Keep this in sync with the corresponding BLAKE2b header.
+ */
+
+#ifndef _CRYPTO_INTERNAL_BLAKE2S_H
+#define _CRYPTO_INTERNAL_BLAKE2S_H
+
+#include <crypto/blake2s.h>
+#include <crypto/internal/hash.h>
+#include <linux/string.h>
+
+void blake2s_compress_generic(struct blake2s_state *state,const u8 *block,
+			      size_t nblocks, const u32 inc);
+
+void blake2s_compress_arch(struct blake2s_state *state,const u8 *block,
+			   size_t nblocks, const u32 inc);
+
+bool blake2s_selftest(void);
+
+static inline void blake2s_set_lastblock(struct blake2s_state *state)
+{
+	state->f[0] = -1;
+}
+
+typedef void (*blake2s_compress_t)(struct blake2s_state *state,
+				   const u8 *block, size_t nblocks, u32 inc);
+
+/* Helper functions for BLAKE2s shared by the library and shash APIs */
+
+static inline void __blake2s_update(struct blake2s_state *state,
+				    const u8 *in, size_t inlen,
+				    blake2s_compress_t compress)
+{
+	const size_t fill = BLAKE2S_BLOCK_SIZE - state->buflen;
+
+	if (unlikely(!inlen))
+		return;
+	if (inlen > fill) {
+		memcpy(state->buf + state->buflen, in, fill);
+		(*compress)(state, state->buf, 1, BLAKE2S_BLOCK_SIZE);
+		state->buflen = 0;
+		in += fill;
+		inlen -= fill;
+	}
+	if (inlen > BLAKE2S_BLOCK_SIZE) {
+		const size_t nblocks = DIV_ROUND_UP(inlen, BLAKE2S_BLOCK_SIZE);
+		/* Hash one less (full) block than strictly possible */
+		(*compress)(state, in, nblocks - 1, BLAKE2S_BLOCK_SIZE);
+		in += BLAKE2S_BLOCK_SIZE * (nblocks - 1);
+		inlen -= BLAKE2S_BLOCK_SIZE * (nblocks - 1);
+	}
+	memcpy(state->buf + state->buflen, in, inlen);
+	state->buflen += inlen;
+}
+
+static inline void __blake2s_final(struct blake2s_state *state, u8 *out,
+				   blake2s_compress_t compress)
+{
+	blake2s_set_lastblock(state);
+	memset(state->buf + state->buflen, 0,
+	       BLAKE2S_BLOCK_SIZE - state->buflen); /* Padding */
+	(*compress)(state, state->buf, 1, state->buflen);
+	cpu_to_le32_array(state->h, ARRAY_SIZE(state->h));
+	memcpy(out, state->h, state->outlen);
+}
+
+/* Helper functions for shash implementations of BLAKE2s */
+
+struct blake2s_tfm_ctx {
+	u8 key[BLAKE2S_KEY_SIZE];
+	unsigned int keylen;
+};
+
+static inline int crypto_blake2s_setkey(struct crypto_shash *tfm,
+					const u8 *key, unsigned int keylen)
+{
+	struct blake2s_tfm_ctx *tctx = crypto_shash_ctx(tfm);
+
+	if (keylen == 0 || keylen > BLAKE2S_KEY_SIZE)
+		return -EINVAL;
+
+	memcpy(tctx->key, key, keylen);
+	tctx->keylen = keylen;
+
+	return 0;
+}
+
+static inline int crypto_blake2s_init(struct shash_desc *desc)
+{
+	const struct blake2s_tfm_ctx *tctx = crypto_shash_ctx(desc->tfm);
+	struct blake2s_state *state = shash_desc_ctx(desc);
+	unsigned int outlen = crypto_shash_digestsize(desc->tfm);
+
+	__blake2s_init(state, outlen, tctx->key, tctx->keylen);
+	return 0;
+}
+
+static inline int crypto_blake2s_update(struct shash_desc *desc,
+					const u8 *in, unsigned int inlen,
+					blake2s_compress_t compress)
+{
+	struct blake2s_state *state = shash_desc_ctx(desc);
+
+	__blake2s_update(state, in, inlen, compress);
+	return 0;
+}
+
+static inline int crypto_blake2s_final(struct shash_desc *desc, u8 *out,
+				       blake2s_compress_t compress)
+{
+	struct blake2s_state *state = shash_desc_ctx(desc);
+
+	__blake2s_final(state, out, compress);
+	return 0;
+}
+
+#endif /* _CRYPTO_INTERNAL_BLAKE2S_H */
diff --git a/include/crypto/internal/chacha.h b/include/crypto/internal/chacha.h
new file mode 100644
index 0000000..b085dc1
--- /dev/null
+++ b/include/crypto/internal/chacha.h
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef _CRYPTO_INTERNAL_CHACHA_H
+#define _CRYPTO_INTERNAL_CHACHA_H
+
+#include <crypto/chacha.h>
+#include <crypto/internal/skcipher.h>
+#include <linux/crypto.h>
+
+struct chacha_ctx {
+	u32 key[8];
+	int nrounds;
+};
+
+static inline int chacha_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				unsigned int keysize, int nrounds)
+{
+	struct chacha_ctx *ctx = crypto_skcipher_ctx(tfm);
+	int i;
+
+	if (keysize != CHACHA_KEY_SIZE)
+		return -EINVAL;
+
+	for (i = 0; i < ARRAY_SIZE(ctx->key); i++)
+		ctx->key[i] = get_unaligned_le32(key + i * sizeof(u32));
+
+	ctx->nrounds = nrounds;
+	return 0;
+}
+
+static inline int chacha20_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				  unsigned int keysize)
+{
+	return chacha_setkey(tfm, key, keysize, 20);
+}
+
+static inline int chacha12_setkey(struct crypto_skcipher *tfm, const u8 *key,
+				  unsigned int keysize)
+{
+	return chacha_setkey(tfm, key, keysize, 12);
+}
+
+#endif /* _CRYPTO_CHACHA_H */
diff --git a/include/crypto/internal/poly1305.h b/include/crypto/internal/poly1305.h
new file mode 100644
index 0000000..196aa76
--- /dev/null
+++ b/include/crypto/internal/poly1305.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Common values for the Poly1305 algorithm
+ */
+
+#ifndef _CRYPTO_INTERNAL_POLY1305_H
+#define _CRYPTO_INTERNAL_POLY1305_H
+
+#include <asm/unaligned.h>
+#include <linux/types.h>
+#include <crypto/poly1305.h>
+
+/*
+ * Poly1305 core functions.  These only accept whole blocks; the caller must
+ * handle any needed block buffering and padding.  'hibit' must be 1 for any
+ * full blocks, or 0 for the final block if it had to be padded.  If 'nonce' is
+ * non-NULL, then it's added at the end to compute the Poly1305 MAC.  Otherwise,
+ * only the ε-almost-∆-universal hash function (not the full MAC) is computed.
+ */
+
+void poly1305_core_setkey(struct poly1305_core_key *key,
+			  const u8 raw_key[POLY1305_BLOCK_SIZE]);
+static inline void poly1305_core_init(struct poly1305_state *state)
+{
+	*state = (struct poly1305_state){};
+}
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit);
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst);
+
+#endif
diff --git a/include/crypto/nhpoly1305.h b/include/crypto/nhpoly1305.h
index 53c0442..306925f 100644
--- a/include/crypto/nhpoly1305.h
+++ b/include/crypto/nhpoly1305.h
@@ -7,7 +7,7 @@
 #define _NHPOLY1305_H
 
 #include <crypto/hash.h>
-#include <crypto/poly1305.h>
+#include <crypto/internal/poly1305.h>
 
 /* NH parameterization: */
 
@@ -33,7 +33,7 @@
 #define NHPOLY1305_KEY_SIZE	(POLY1305_BLOCK_SIZE + NH_KEY_BYTES)
 
 struct nhpoly1305_key {
-	struct poly1305_key poly_key;
+	struct poly1305_core_key poly_key;
 	u32 nh_key[NH_KEY_WORDS];
 };
 
diff --git a/include/crypto/poly1305.h b/include/crypto/poly1305.h
index 34317ed..090692e 100644
--- a/include/crypto/poly1305.h
+++ b/include/crypto/poly1305.h
@@ -13,52 +13,87 @@
 #define POLY1305_KEY_SIZE	32
 #define POLY1305_DIGEST_SIZE	16
 
+/* The poly1305_key and poly1305_state types are mostly opaque and
+ * implementation-defined. Limbs might be in base 2^64 or base 2^26, or
+ * different yet. The union type provided keeps these 64-bit aligned for the
+ * case in which this is implemented using 64x64 multiplies.
+ */
+
 struct poly1305_key {
-	u32 r[5];	/* key, base 2^26 */
+	union {
+		u32 r[5];
+		u64 r64[3];
+	};
+};
+
+struct poly1305_core_key {
+	struct poly1305_key key;
+	struct poly1305_key precomputed_s;
 };
 
 struct poly1305_state {
-	u32 h[5];	/* accumulator, base 2^26 */
+	union {
+		u32 h[5];
+		u64 h64[3];
+	};
 };
 
 struct poly1305_desc_ctx {
-	/* key */
-	struct poly1305_key r;
-	/* finalize key */
-	u32 s[4];
-	/* accumulator */
-	struct poly1305_state h;
 	/* partial buffer */
 	u8 buf[POLY1305_BLOCK_SIZE];
 	/* bytes used in partial buffer */
 	unsigned int buflen;
-	/* r key has been set */
-	bool rset;
-	/* s key has been set */
+	/* how many keys have been set in r[] */
+	unsigned short rset;
+	/* whether s[] has been set */
 	bool sset;
+	/* finalize key */
+	u32 s[4];
+	/* accumulator */
+	struct poly1305_state h;
+	/* key */
+	union {
+		struct poly1305_key opaque_r[CONFIG_CRYPTO_LIB_POLY1305_RSIZE];
+		struct poly1305_core_key core_r;
+	};
 };
 
-/*
- * Poly1305 core functions.  These implement the ε-almost-∆-universal hash
- * function underlying the Poly1305 MAC, i.e. they don't add an encrypted nonce
- * ("s key") at the end.  They also only support block-aligned inputs.
- */
-void poly1305_core_setkey(struct poly1305_key *key, const u8 *raw_key);
-static inline void poly1305_core_init(struct poly1305_state *state)
-{
-	memset(state->h, 0, sizeof(state->h));
-}
-void poly1305_core_blocks(struct poly1305_state *state,
-			  const struct poly1305_key *key,
-			  const void *src, unsigned int nblocks);
-void poly1305_core_emit(const struct poly1305_state *state, void *dst);
+void poly1305_init_arch(struct poly1305_desc_ctx *desc,
+			const u8 key[POLY1305_KEY_SIZE]);
+void poly1305_init_generic(struct poly1305_desc_ctx *desc,
+			   const u8 key[POLY1305_KEY_SIZE]);
 
-/* Crypto API helper functions for the Poly1305 MAC */
-int crypto_poly1305_init(struct shash_desc *desc);
-unsigned int crypto_poly1305_setdesckey(struct poly1305_desc_ctx *dctx,
-					const u8 *src, unsigned int srclen);
-int crypto_poly1305_update(struct shash_desc *desc,
-			   const u8 *src, unsigned int srclen);
-int crypto_poly1305_final(struct shash_desc *desc, u8 *dst);
+static inline void poly1305_init(struct poly1305_desc_ctx *desc, const u8 *key)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_init_arch(desc, key);
+	else
+		poly1305_init_generic(desc, key);
+}
+
+void poly1305_update_arch(struct poly1305_desc_ctx *desc, const u8 *src,
+			  unsigned int nbytes);
+void poly1305_update_generic(struct poly1305_desc_ctx *desc, const u8 *src,
+			     unsigned int nbytes);
+
+static inline void poly1305_update(struct poly1305_desc_ctx *desc,
+				   const u8 *src, unsigned int nbytes)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_update_arch(desc, src, nbytes);
+	else
+		poly1305_update_generic(desc, src, nbytes);
+}
+
+void poly1305_final_arch(struct poly1305_desc_ctx *desc, u8 *digest);
+void poly1305_final_generic(struct poly1305_desc_ctx *desc, u8 *digest);
+
+static inline void poly1305_final(struct poly1305_desc_ctx *desc, u8 *digest)
+{
+	if (IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305))
+		poly1305_final_arch(desc, digest);
+	else
+		poly1305_final_generic(desc, digest);
+}
 
 #endif
diff --git a/include/crypto/sha.h b/include/crypto/sha.h
index 5c2132c..8efa780 100644
--- a/include/crypto/sha.h
+++ b/include/crypto/sha.h
@@ -123,7 +123,7 @@
  * For details see lib/crypto/sha256.c
  */
 
-static inline int sha256_init(struct sha256_state *sctx)
+static inline void sha256_init(struct sha256_state *sctx)
 {
 	sctx->state[0] = SHA256_H0;
 	sctx->state[1] = SHA256_H1;
@@ -134,14 +134,12 @@
 	sctx->state[6] = SHA256_H6;
 	sctx->state[7] = SHA256_H7;
 	sctx->count = 0;
-
-	return 0;
 }
-extern int sha256_update(struct sha256_state *sctx, const u8 *input,
-			 unsigned int length);
-extern int sha256_final(struct sha256_state *sctx, u8 *hash);
+void sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len);
+void sha256_final(struct sha256_state *sctx, u8 *out);
+void sha256(const u8 *data, unsigned int len, u8 *out);
 
-static inline int sha224_init(struct sha256_state *sctx)
+static inline void sha224_init(struct sha256_state *sctx)
 {
 	sctx->state[0] = SHA224_H0;
 	sctx->state[1] = SHA224_H1;
@@ -152,11 +150,8 @@
 	sctx->state[6] = SHA224_H6;
 	sctx->state[7] = SHA224_H7;
 	sctx->count = 0;
-
-	return 0;
 }
-extern int sha224_update(struct sha256_state *sctx, const u8 *input,
-			 unsigned int length);
-extern int sha224_final(struct sha256_state *sctx, u8 *hash);
+void sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len);
+void sha224_final(struct sha256_state *sctx, u8 *out);
 
 #endif
diff --git a/include/crypto/sha256_base.h b/include/crypto/sha256_base.h
index cea60cf..6ded110 100644
--- a/include/crypto/sha256_base.h
+++ b/include/crypto/sha256_base.h
@@ -22,14 +22,16 @@
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
-	return sha224_init(sctx);
+	sha224_init(sctx);
+	return 0;
 }
 
 static inline int sha256_base_init(struct shash_desc *desc)
 {
 	struct sha256_state *sctx = shash_desc_ctx(desc);
 
-	return sha256_init(sctx);
+	sha256_init(sctx);
+	return 0;
 }
 
 static inline int sha256_base_do_update(struct shash_desc *desc,
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index 681cb59..1b4bf51 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -40,6 +40,7 @@
 struct drm_property;
 struct drm_property_blob;
 struct drm_printer;
+struct drm_panel;
 struct edid;
 struct i2c_adapter;
 
@@ -281,6 +282,10 @@
 /* Additional Colorimetry extension added as part of CTA 861.G */
 #define DRM_MODE_COLORIMETRY_DCI_P3_RGB_D65		11
 #define DRM_MODE_COLORIMETRY_DCI_P3_RGB_THEATER		12
+/* Additional Colorimetry Options added for DP 1.4a VSC Colorimetry Format */
+#define DRM_MODE_COLORIMETRY_RGB_WIDE_FIXED		13
+#define DRM_MODE_COLORIMETRY_RGB_WIDE_FLOAT		14
+#define DRM_MODE_COLORIMETRY_BT601_YCC			15
 
 /**
  * enum drm_bus_flags - bus_flags info for &drm_display_info
@@ -1345,6 +1350,12 @@
 	 * rev1.1 4.2.2.6
 	 */
 	bool edid_corrupt;
+	/**
+	 * @real_edid_checksum: real edid checksum for corrupted edid block.
+	 * Required in Displayport 1.4 compliance testing
+	 * rev1.1 4.2.2.6
+	 */
+	u8 real_edid_checksum;
 
 	/** @debugfs_entry: debugfs directory for this connector */
 	struct dentry *debugfs_entry;
@@ -1410,6 +1421,13 @@
 
 	/** @hdr_sink_metadata: HDR Metadata Information read from sink */
 	struct hdr_sink_metadata hdr_sink_metadata;
+
+	/**
+	 * @panel:
+	 *
+	 * Can find the panel which connected to drm_connector.
+	 */
+	struct drm_panel *panel;
 };
 
 #define obj_to_connector(x) container_of(x, struct drm_connector, base)
@@ -1523,7 +1541,8 @@
 int drm_connector_attach_vrr_capable_property(
 		struct drm_connector *connector);
 int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
-int drm_mode_create_colorspace_property(struct drm_connector *connector);
+int drm_mode_create_hdmi_colorspace_property(struct drm_connector *connector);
+int drm_mode_create_dp_colorspace_property(struct drm_connector *connector);
 int drm_mode_create_content_type_property(struct drm_device *dev);
 void drm_hdmi_avi_infoframe_content_type(struct hdmi_avi_infoframe *frame,
 					 const struct drm_connector_state *conn_state);
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 8364502..02ecfdc 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -649,6 +649,14 @@
 # define DP_TEST_COUNT_MASK		    0xf
 
 #define DP_TEST_PHY_PATTERN                 0x248
+# define DP_TEST_PHY_PATTERN_NONE			0x0
+# define DP_TEST_PHY_PATTERN_D10_2_NO_SCRAMBLING	0x1
+# define DP_TEST_PHY_PATTERN_SYMBOL_ERR_MEASUREMENT_CNT 0x2
+# define DP_TEST_PHY_PATTERN_PRBS7			0x3
+# define DP_TEST_PHY_PATTERN_80_BIT_CUSTOM_PATTERN	0x4
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_1		0x5
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_2		0x6
+# define DP_TEST_PHY_PATTERN_CP2520_PATTERN_3		0x7
 #define DP_TEST_80BIT_CUSTOM_PATTERN_7_0    0x250
 #define	DP_TEST_80BIT_CUSTOM_PATTERN_15_8   0x251
 #define	DP_TEST_80BIT_CUSTOM_PATTERN_23_16  0x252
@@ -1353,6 +1361,8 @@
 int drm_dp_dpcd_read_link_status(struct drm_dp_aux *aux,
 				 u8 status[DP_LINK_STATUS_SIZE]);
 
+bool drm_dp_send_real_edid_checksum(struct drm_dp_aux *aux,
+		u8 real_edid_checksum);
 /*
  * DisplayPort link
  */
diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h
index 8976afe..7e8ddea 100644
--- a/include/drm/drm_drv.h
+++ b/include/drm/drm_drv.h
@@ -29,6 +29,7 @@
 
 #include <linux/list.h>
 #include <linux/irqreturn.h>
+#include <linux/uuid.h>
 
 #include <drm/drm_device.h>
 
@@ -654,6 +655,15 @@
 				struct vm_area_struct *vma);
 
 	/**
+	 * @gem_prime_get_uuid
+	 *
+	 * get_uuid hook for GEM drivers. Retrieves the virtio uuid of the
+	 * given GEM buffer.
+	 */
+	int (*gem_prime_get_uuid)(struct drm_gem_object *obj,
+				  uuid_t *uuid);
+
+	/**
 	 * @dumb_create:
 	 *
 	 * This creates a new dumb buffer in the driver's backing storage manager (GEM,
diff --git a/include/drm/drm_mipi_dsi.h b/include/drm/drm_mipi_dsi.h
index 13cf2ae..efd0590 100644
--- a/include/drm/drm_mipi_dsi.h
+++ b/include/drm/drm_mipi_dsi.h
@@ -18,12 +18,18 @@
 #define MIPI_DSI_MSG_REQ_ACK	BIT(0)
 /* use Low Power Mode to transmit message */
 #define MIPI_DSI_MSG_USE_LPM	BIT(1)
+/* read mipi_dsi_msg.ctrl and unicast to only that ctrls */
+#define MIPI_DSI_MSG_UNICAST	BIT(2)
+/* Stack all commands until lastcommand bit and trigger all in one go */
+#define MIPI_DSI_MSG_LASTCOMMAND BIT(3)
 
 /**
  * struct mipi_dsi_msg - read/write DSI buffer
  * @channel: virtual channel id
  * @type: payload data type
  * @flags: flags controlling this message transmission
+ * @ctrl: ctrl index to transmit on
+ * @wait_ms: duration in ms to wait after message transmission
  * @tx_len: length of @tx_buf
  * @tx_buf: data to be written
  * @rx_len: length of @rx_buf
@@ -33,6 +39,8 @@
 	u8 channel;
 	u8 type;
 	u16 flags;
+	u32 ctrl;
+	u32 wait_ms;
 
 	size_t tx_len;
 	const void *tx_buf;
@@ -131,6 +139,10 @@
 #define MIPI_DSI_CLOCK_NON_CONTINUOUS	BIT(10)
 /* transmit data in low power */
 #define MIPI_DSI_MODE_LPM		BIT(11)
+/* disable BLLP area */
+#define MIPI_DSI_MODE_VIDEO_BLLP	BIT(12)
+/* disable EOF BLLP area */
+#define MIPI_DSI_MODE_VIDEO_EOF_BLLP	BIT(13)
 
 enum mipi_dsi_pixel_format {
 	MIPI_DSI_FMT_RGB888,
diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
index 198b9d0..3bcbe30 100644
--- a/include/drm/drm_mode_config.h
+++ b/include/drm/drm_mode_config.h
@@ -866,18 +866,6 @@
 	bool prefer_shadow_fbdev;
 
 	/**
-	 * @fbdev_use_iomem:
-	 *
-	 * Set to true if framebuffer reside in iomem.
-	 * When set to true memcpy_toio() is used when copying the framebuffer in
-	 * drm_fb_helper.drm_fb_helper_dirty_blit_real().
-	 *
-	 * FIXME: This should be replaced with a per-mapping is_iomem
-	 * flag (like ttm does), and then used everywhere in fbdev code.
-	 */
-	bool fbdev_use_iomem;
-
-	/**
 	 * @quirk_addfb_prefer_xbgr_30bpp:
 	 *
 	 * Special hack for legacy ADDFB to keep nouveau userspace happy. Should
diff --git a/include/drm/drm_mode_object.h b/include/drm/drm_mode_object.h
index c34a3e8..6292fa6 100644
--- a/include/drm/drm_mode_object.h
+++ b/include/drm/drm_mode_object.h
@@ -60,7 +60,7 @@
 	void (*free_cb)(struct kref *kref);
 };
 
-#define DRM_OBJECT_MAX_PROPERTY 24
+#define DRM_OBJECT_MAX_PROPERTY 64
 /**
  * struct drm_object_properties - property tracking for &drm_mode_object
  */
diff --git a/include/drm/drm_panel.h b/include/drm/drm_panel.h
index 624bd15..8997244 100644
--- a/include/drm/drm_panel.h
+++ b/include/drm/drm_panel.h
@@ -27,6 +27,23 @@
 #include <linux/err.h>
 #include <linux/errno.h>
 #include <linux/list.h>
+#include <linux/notifier.h>
+
+/* A hardware display blank change occurred */
+#define DRM_PANEL_EVENT_BLANK		0x01
+/* A hardware display blank early change occurred */
+#define DRM_PANEL_EARLY_EVENT_BLANK	0x02
+
+enum {
+	/* panel: power on */
+	DRM_PANEL_BLANK_UNBLANK,
+	/* panel: power off */
+	DRM_PANEL_BLANK_POWERDOWN,
+};
+
+struct drm_panel_notifier {
+	void *data;
+};
 
 struct device_node;
 struct drm_connector;
@@ -145,6 +162,13 @@
 	 * Panel entry in registry.
 	 */
 	struct list_head list;
+
+	/**
+	 * @nh:
+	 *
+	 * panel notifier list head
+	 */
+	struct blocking_notifier_head nh;
 };
 
 void drm_panel_init(struct drm_panel *panel);
@@ -155,6 +179,13 @@
 int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector);
 void drm_panel_detach(struct drm_panel *panel);
 
+int drm_panel_notifier_register(struct drm_panel *panel,
+	struct notifier_block *nb);
+int drm_panel_notifier_unregister(struct drm_panel *panel,
+	struct notifier_block *nb);
+int drm_panel_notifier_call_chain(struct drm_panel *panel,
+	unsigned long val, void *v);
+
 int drm_panel_prepare(struct drm_panel *panel);
 int drm_panel_unprepare(struct drm_panel *panel);
 
diff --git a/include/drm/drm_prime.h b/include/drm/drm_prime.h
index d89311b..d920bc4 100644
--- a/include/drm/drm_prime.h
+++ b/include/drm/drm_prime.h
@@ -106,5 +106,6 @@
 int drm_prime_sg_to_page_addr_arrays(struct sg_table *sgt, struct page **pages,
 				     dma_addr_t *addrs, int max_pages);
 
+int drm_gem_dmabuf_get_uuid(struct dma_buf *dma_buf, uuid_t *uuid);
 
 #endif /* __DRM_PRIME_H__ */
diff --git a/include/dt-bindings/clock/sun50i-a100-ccu.h b/include/dt-bindings/clock/sun50i-a100-ccu.h
new file mode 100644
index 0000000..28dc36e
--- /dev/null
+++ b/include/dt-bindings/clock/sun50i-a100-ccu.h
@@ -0,0 +1,116 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN50I_A100_H_
+#define _DT_BINDINGS_CLK_SUN50I_A100_H_
+
+#define CLK_PLL_PERIPH0		3
+
+#define CLK_CPUX		24
+
+#define CLK_APB1		29
+
+#define CLK_MBUS		31
+#define CLK_DE			32
+#define CLK_BUS_DE		33
+#define CLK_G2D			34
+#define CLK_BUS_G2D		35
+#define CLK_GPU			36
+#define CLK_BUS_GPU		37
+#define CLK_CE			38
+#define CLK_BUS_CE		39
+#define CLK_VE			40
+#define CLK_BUS_VE		41
+#define CLK_BUS_DMA		42
+#define CLK_BUS_MSGBOX		43
+#define CLK_BUS_SPINLOCK	44
+#define CLK_BUS_HSTIMER		45
+#define CLK_AVS			46
+#define CLK_BUS_DBG		47
+#define CLK_BUS_PSI		48
+#define CLK_BUS_PWM		49
+#define CLK_BUS_IOMMU		50
+#define CLK_MBUS_DMA		51
+#define CLK_MBUS_VE		52
+#define CLK_MBUS_CE		53
+#define CLK_MBUS_NAND		54
+#define CLK_MBUS_CSI		55
+#define CLK_MBUS_ISP		56
+#define CLK_MBUS_G2D		57
+
+#define CLK_NAND0		59
+#define CLK_NAND1		60
+#define CLK_BUS_NAND		61
+#define CLK_MMC0		62
+#define CLK_MMC1		63
+#define CLK_MMC2		64
+#define CLK_MMC3		65
+#define CLK_BUS_MMC0		66
+#define CLK_BUS_MMC1		67
+#define CLK_BUS_MMC2		68
+#define CLK_BUS_UART0		69
+#define CLK_BUS_UART1		70
+#define CLK_BUS_UART2		71
+#define CLK_BUS_UART3		72
+#define CLK_BUS_UART4		73
+#define CLK_BUS_I2C0		74
+#define CLK_BUS_I2C1		75
+#define CLK_BUS_I2C2		76
+#define CLK_BUS_I2C3		77
+#define CLK_SPI0		78
+#define CLK_SPI1		79
+#define CLK_SPI2		80
+#define CLK_BUS_SPI0		81
+#define CLK_BUS_SPI1		82
+#define CLK_BUS_SPI2		83
+#define CLK_EMAC_25M		84
+#define CLK_BUS_EMAC		85
+#define CLK_IR_RX		86
+#define CLK_BUS_IR_RX		87
+#define CLK_IR_TX		88
+#define CLK_BUS_IR_TX		89
+#define CLK_BUS_GPADC		90
+#define CLK_BUS_THS		91
+#define CLK_I2S0		92
+#define CLK_I2S1		93
+#define CLK_I2S2		94
+#define CLK_I2S3		95
+#define CLK_BUS_I2S0		96
+#define CLK_BUS_I2S1		97
+#define CLK_BUS_I2S2		98
+#define CLK_BUS_I2S3		99
+#define CLK_SPDIF		100
+#define CLK_BUS_SPDIF		101
+#define CLK_DMIC		102
+#define CLK_BUS_DMIC		103
+#define CLK_AUDIO_DAC		104
+#define CLK_AUDIO_ADC		105
+#define CLK_AUDIO_4X		106
+#define CLK_BUS_AUDIO_CODEC	107
+#define CLK_USB_OHCI0		108
+#define CLK_USB_PHY0		109
+#define CLK_USB_OHCI1		110
+#define CLK_USB_PHY1		111
+#define CLK_BUS_OHCI0		112
+#define CLK_BUS_OHCI1		113
+#define CLK_BUS_EHCI0		114
+#define CLK_BUS_EHCI1		115
+#define CLK_BUS_OTG		116
+#define CLK_BUS_LRADC		117
+#define CLK_BUS_DPSS_TOP0	118
+#define CLK_BUS_DPSS_TOP1	119
+#define CLK_MIPI_DSI		120
+#define CLK_BUS_MIPI_DSI	121
+#define CLK_TCON_LCD		122
+#define CLK_BUS_TCON_LCD	123
+#define CLK_LEDC		124
+#define CLK_BUS_LEDC		125
+#define CLK_CSI_TOP		126
+#define CLK_CSI0_MCLK		127
+#define CLK_CSI1_MCLK		128
+#define CLK_BUS_CSI		129
+#define CLK_CSI_ISP		130
+
+#endif /* _DT_BINDINGS_CLK_SUN50I_A100_H_ */
diff --git a/include/dt-bindings/clock/sun50i-a100-r-ccu.h b/include/dt-bindings/clock/sun50i-a100-r-ccu.h
new file mode 100644
index 0000000..07312e7
--- /dev/null
+++ b/include/dt-bindings/clock/sun50i-a100-r-ccu.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_
+#define _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_
+
+#define CLK_R_APB1		2
+
+#define CLK_R_APB1_TIMER	4
+#define CLK_R_APB1_TWD		5
+#define CLK_R_APB1_PWM		6
+#define CLK_R_APB1_BUS_PWM	7
+#define CLK_R_APB1_PPU		8
+#define CLK_R_APB2_UART		9
+#define CLK_R_APB2_I2C0		10
+#define CLK_R_APB2_I2C1		11
+#define CLK_R_APB1_IR		12
+#define CLK_R_APB1_BUS_IR	13
+#define CLK_R_AHB_BUS_RTC	14
+
+#endif /* _DT_BINDINGS_CLK_SUN50I_A100_R_CCU_H_ */
diff --git a/include/dt-bindings/reset/sun50i-a100-ccu.h b/include/dt-bindings/reset/sun50i-a100-ccu.h
new file mode 100644
index 0000000..55c0ada
--- /dev/null
+++ b/include/dt-bindings/reset/sun50i-a100-ccu.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_RESET_SUN50I_A100_H_
+#define _DT_BINDINGS_RESET_SUN50I_A100_H_
+
+#define RST_MBUS		0
+#define RST_BUS_DE		1
+#define RST_BUS_G2D		2
+#define RST_BUS_GPU		3
+#define RST_BUS_CE		4
+#define RST_BUS_VE		5
+#define RST_BUS_DMA		6
+#define RST_BUS_MSGBOX		7
+#define RST_BUS_SPINLOCK	8
+#define RST_BUS_HSTIMER		9
+#define RST_BUS_DBG		10
+#define RST_BUS_PSI		11
+#define RST_BUS_PWM		12
+#define RST_BUS_DRAM		13
+#define RST_BUS_NAND		14
+#define RST_BUS_MMC0		15
+#define RST_BUS_MMC1		16
+#define RST_BUS_MMC2		17
+#define RST_BUS_UART0		18
+#define RST_BUS_UART1		19
+#define RST_BUS_UART2		20
+#define RST_BUS_UART3		21
+#define RST_BUS_UART4		22
+#define RST_BUS_I2C0		23
+#define RST_BUS_I2C1		24
+#define RST_BUS_I2C2		25
+#define RST_BUS_I2C3		26
+#define RST_BUS_SPI0		27
+#define RST_BUS_SPI1		28
+#define RST_BUS_SPI2		29
+#define RST_BUS_EMAC		30
+#define RST_BUS_IR_RX		31
+#define RST_BUS_IR_TX		32
+#define RST_BUS_GPADC		33
+#define RST_BUS_THS		34
+#define RST_BUS_I2S0		35
+#define RST_BUS_I2S1		36
+#define RST_BUS_I2S2		37
+#define RST_BUS_I2S3		38
+#define RST_BUS_SPDIF		39
+#define RST_BUS_DMIC		40
+#define RST_BUS_AUDIO_CODEC	41
+#define RST_USB_PHY0		42
+#define RST_USB_PHY1		43
+#define RST_BUS_OHCI0		44
+#define RST_BUS_OHCI1		45
+#define RST_BUS_EHCI0		46
+#define RST_BUS_EHCI1		47
+#define RST_BUS_OTG		48
+#define RST_BUS_LRADC		49
+#define RST_BUS_DPSS_TOP0	50
+#define RST_BUS_DPSS_TOP1	51
+#define RST_BUS_MIPI_DSI	52
+#define RST_BUS_TCON_LCD	53
+#define RST_BUS_LVDS		54
+#define RST_BUS_LEDC		55
+#define RST_BUS_CSI		56
+#define RST_BUS_CSI_ISP		57
+
+#endif /* _DT_BINDINGS_RESET_SUN50I_A100_H_ */
diff --git a/include/dt-bindings/reset/sun50i-a100-r-ccu.h b/include/dt-bindings/reset/sun50i-a100-r-ccu.h
new file mode 100644
index 0000000..737bf6f
--- /dev/null
+++ b/include/dt-bindings/reset/sun50i-a100-r-ccu.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: (GPL-2.0+ or MIT) */
+/*
+ * Copyright (c) 2020 Yangtao Li <frank@allwinnertech.com>
+ */
+
+#ifndef _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_
+#define _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_
+
+#define RST_R_APB1_TIMER	0
+#define RST_R_APB1_BUS_PWM	1
+#define RST_R_APB1_PPU		2
+#define RST_R_APB2_UART		3
+#define RST_R_APB2_I2C0		4
+#define RST_R_APB2_I2C1		5
+#define RST_R_APB1_BUS_IR	6
+#define RST_R_AHB_BUS_RTC	7
+
+#endif /* _DT_BINDINGS_RST_SUN50I_A100_R_CCU_H_ */
diff --git a/include/kunit/assert.h b/include/kunit/assert.h
new file mode 100644
index 0000000..ad889b5
--- /dev/null
+++ b/include/kunit/assert.h
@@ -0,0 +1,357 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Assertion and expectation serialization API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_ASSERT_H
+#define _KUNIT_ASSERT_H
+
+#include <linux/err.h>
+#include <linux/kernel.h>
+
+struct kunit;
+struct string_stream;
+
+/**
+ * enum kunit_assert_type - Type of expectation/assertion.
+ * @KUNIT_ASSERTION: Used to denote that a kunit_assert represents an assertion.
+ * @KUNIT_EXPECTATION: Denotes that a kunit_assert represents an expectation.
+ *
+ * Used in conjunction with a &struct kunit_assert to denote whether it
+ * represents an expectation or an assertion.
+ */
+enum kunit_assert_type {
+	KUNIT_ASSERTION,
+	KUNIT_EXPECTATION,
+};
+
+/**
+ * struct kunit_assert - Data for printing a failed assertion or expectation.
+ * @test: the test case this expectation/assertion is associated with.
+ * @type: the type (either an expectation or an assertion) of this kunit_assert.
+ * @line: the source code line number that the expectation/assertion is at.
+ * @file: the file path of the source file that the expectation/assertion is in.
+ * @message: an optional message to provide additional context.
+ * @format: a function which formats the data in this kunit_assert to a string.
+ *
+ * Represents a failed expectation/assertion. Contains all the data necessary to
+ * format a string to a user reporting the failure.
+ */
+struct kunit_assert {
+	struct kunit *test;
+	enum kunit_assert_type type;
+	int line;
+	const char *file;
+	struct va_format message;
+	void (*format)(const struct kunit_assert *assert,
+		       struct string_stream *stream);
+};
+
+/**
+ * KUNIT_INIT_VA_FMT_NULL - Default initializer for struct va_format.
+ *
+ * Used inside a struct initialization block to initialize struct va_format to
+ * default values where fmt and va are null.
+ */
+#define KUNIT_INIT_VA_FMT_NULL { .fmt = NULL, .va = NULL }
+
+/**
+ * KUNIT_INIT_ASSERT_STRUCT() - Initializer for a &struct kunit_assert.
+ * @kunit: The test case that this expectation/assertion is associated with.
+ * @assert_type: The type (assertion or expectation) of this kunit_assert.
+ * @fmt: The formatting function which builds a string out of this kunit_assert.
+ *
+ * The base initializer for a &struct kunit_assert.
+ */
+#define KUNIT_INIT_ASSERT_STRUCT(kunit, assert_type, fmt) {		       \
+	.test = kunit,							       \
+	.type = assert_type,						       \
+	.file = __FILE__,						       \
+	.line = __LINE__,						       \
+	.message = KUNIT_INIT_VA_FMT_NULL,				       \
+	.format = fmt							       \
+}
+
+void kunit_base_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream);
+
+void kunit_assert_print_msg(const struct kunit_assert *assert,
+			    struct string_stream *stream);
+
+/**
+ * struct kunit_fail_assert - Represents a plain fail expectation/assertion.
+ * @assert: The parent of this type.
+ *
+ * Represents a simple KUNIT_FAIL/KUNIT_ASSERT_FAILURE that always fails.
+ */
+struct kunit_fail_assert {
+	struct kunit_assert assert;
+};
+
+void kunit_fail_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_FAIL_ASSERT_STRUCT() - Initializer for &struct kunit_fail_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ *
+ * Initializes a &struct kunit_fail_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_FAIL_ASSERT_STRUCT(test, type) {			       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_fail_assert_format)	       \
+}
+
+/**
+ * struct kunit_unary_assert - Represents a KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE}
+ * @assert: The parent of this type.
+ * @condition: A string representation of a conditional expression.
+ * @expected_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise.
+ *
+ * Represents a simple expectation or assertion that simply asserts something is
+ * true or false. In other words, represents the expectations:
+ * KUNIT_{EXPECT|ASSERT}_{TRUE|FALSE}
+ */
+struct kunit_unary_assert {
+	struct kunit_assert assert;
+	const char *condition;
+	bool expected_true;
+};
+
+void kunit_unary_assert_format(const struct kunit_assert *assert,
+			       struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_UNARY_ASSERT_STRUCT() - Initializes &struct kunit_unary_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @cond: A string representation of the expression asserted true or false.
+ * @expect_true: True if of type KUNIT_{EXPECT|ASSERT}_TRUE, false otherwise.
+ *
+ * Initializes a &struct kunit_unary_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_UNARY_ASSERT_STRUCT(test, type, cond, expect_true) {	       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_unary_assert_format),	       \
+	.condition = cond,						       \
+	.expected_true = expect_true					       \
+}
+
+/**
+ * struct kunit_ptr_not_err_assert - An expectation/assertion that a pointer is
+ *	not NULL and not a -errno.
+ * @assert: The parent of this type.
+ * @text: A string representation of the expression passed to the expectation.
+ * @value: The actual evaluated pointer value of the expression.
+ *
+ * Represents an expectation/assertion that a pointer is not null and is does
+ * not contain a -errno. (See IS_ERR_OR_NULL().)
+ */
+struct kunit_ptr_not_err_assert {
+	struct kunit_assert assert;
+	const char *text;
+	const void *value;
+};
+
+void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
+				     struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_PTR_NOT_ERR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_ptr_not_err_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @txt: A string representation of the expression passed to the expectation.
+ * @val: The actual evaluated pointer value of the expression.
+ *
+ * Initializes a &struct kunit_ptr_not_err_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_PTR_NOT_ERR_STRUCT(test, type, txt, val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_ptr_not_err_assert_format),   \
+	.text = txt,							       \
+	.value = val							       \
+}
+
+/**
+ * struct kunit_binary_assert - An expectation/assertion that compares two
+ *	non-pointer values (for example, KUNIT_EXPECT_EQ(test, 1 + 1, 2)).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two non-pointer values. For
+ * example, to expect that 1 + 1 == 2, you can use the expectation
+ * KUNIT_EXPECT_EQ(test, 1 + 1, 2);
+ */
+struct kunit_binary_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	long long left_value;
+	const char *right_text;
+	long long right_value;
+};
+
+void kunit_binary_assert_format(const struct kunit_assert *assert,
+				struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_ASSERT_STRUCT(test,				       \
+					type,				       \
+					op_str,				       \
+					left_str,			       \
+					left_val,			       \
+					right_str,			       \
+					right_val) {			       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_assert_format),	       \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+/**
+ * struct kunit_binary_ptr_assert - An expectation/assertion that compares two
+ *	pointer values (for example, KUNIT_EXPECT_PTR_EQ(test, foo, bar)).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two pointer values. For
+ * example, to expect that foo and bar point to the same thing, you can use the
+ * expectation KUNIT_EXPECT_PTR_EQ(test, foo, bar);
+ */
+struct kunit_binary_ptr_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	const void *left_value;
+	const char *right_text;
+	const void *right_value;
+};
+
+void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_ptr_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_ptr_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT(test,			       \
+					    type,			       \
+					    op_str,			       \
+					    left_str,			       \
+					    left_val,			       \
+					    right_str,			       \
+					    right_val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_ptr_assert_format),    \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+/**
+ * struct kunit_binary_str_assert - An expectation/assertion that compares two
+ *	string values (for example, KUNIT_EXPECT_STREQ(test, foo, "bar")).
+ * @assert: The parent of this type.
+ * @operation: A string representation of the comparison operator (e.g. "==").
+ * @left_text: A string representation of the expression in the left slot.
+ * @left_value: The actual evaluated value of the expression in the left slot.
+ * @right_text: A string representation of the expression in the right slot.
+ * @right_value: The actual evaluated value of the expression in the right slot.
+ *
+ * Represents an expectation/assertion that compares two string values. For
+ * example, to expect that the string in foo is equal to "bar", you can use the
+ * expectation KUNIT_EXPECT_STREQ(test, foo, "bar");
+ */
+struct kunit_binary_str_assert {
+	struct kunit_assert assert;
+	const char *operation;
+	const char *left_text;
+	const char *left_value;
+	const char *right_text;
+	const char *right_value;
+};
+
+void kunit_binary_str_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream);
+
+/**
+ * KUNIT_INIT_BINARY_STR_ASSERT_STRUCT() - Initializes a
+ *	&struct kunit_binary_str_assert.
+ * @test: The test case that this expectation/assertion is associated with.
+ * @type: The type (assertion or expectation) of this kunit_assert.
+ * @op_str: A string representation of the comparison operator (e.g. "==").
+ * @left_str: A string representation of the expression in the left slot.
+ * @left_val: The actual evaluated value of the expression in the left slot.
+ * @right_str: A string representation of the expression in the right slot.
+ * @right_val: The actual evaluated value of the expression in the right slot.
+ *
+ * Initializes a &struct kunit_binary_str_assert. Intended to be used in
+ * KUNIT_EXPECT_* and KUNIT_ASSERT_* macros.
+ */
+#define KUNIT_INIT_BINARY_STR_ASSERT_STRUCT(test,			       \
+					    type,			       \
+					    op_str,			       \
+					    left_str,			       \
+					    left_val,			       \
+					    right_str,			       \
+					    right_val) {		       \
+	.assert = KUNIT_INIT_ASSERT_STRUCT(test,			       \
+					   type,			       \
+					   kunit_binary_str_assert_format),    \
+	.operation = op_str,						       \
+	.left_text = left_str,						       \
+	.left_value = left_val,						       \
+	.right_text = right_str,					       \
+	.right_value = right_val					       \
+}
+
+#endif /*  _KUNIT_ASSERT_H */
diff --git a/include/kunit/test.h b/include/kunit/test.h
new file mode 100644
index 0000000..f7b2ed4c
--- /dev/null
+++ b/include/kunit/test.h
@@ -0,0 +1,1545 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Base unit test (KUnit) API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TEST_H
+#define _KUNIT_TEST_H
+
+#include <kunit/assert.h>
+#include <kunit/try-catch.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/types.h>
+
+struct kunit_resource;
+
+typedef int (*kunit_resource_init_t)(struct kunit_resource *, void *);
+typedef void (*kunit_resource_free_t)(struct kunit_resource *);
+
+/**
+ * struct kunit_resource - represents a *test managed resource*
+ * @allocation: for the user to store arbitrary data.
+ * @free: a user supplied function to free the resource. Populated by
+ * kunit_alloc_resource().
+ *
+ * Represents a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	struct kunit_kmalloc_params {
+ *		size_t size;
+ *		gfp_t gfp;
+ *	};
+ *
+ *	static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+ *	{
+ *		struct kunit_kmalloc_params *params = context;
+ *		res->allocation = kmalloc(params->size, params->gfp);
+ *
+ *		if (!res->allocation)
+ *			return -ENOMEM;
+ *
+ *		return 0;
+ *	}
+ *
+ *	static void kunit_kmalloc_free(struct kunit_resource *res)
+ *	{
+ *		kfree(res->allocation);
+ *	}
+ *
+ *	void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+ *	{
+ *		struct kunit_kmalloc_params params;
+ *		struct kunit_resource *res;
+ *
+ *		params.size = size;
+ *		params.gfp = gfp;
+ *
+ *		res = kunit_alloc_resource(test, kunit_kmalloc_init,
+ *			kunit_kmalloc_free, &params);
+ *		if (res)
+ *			return res->allocation;
+ *
+ *		return NULL;
+ *	}
+ */
+struct kunit_resource {
+	void *allocation;
+	kunit_resource_free_t free;
+
+	/* private: internal use only. */
+	struct list_head node;
+};
+
+struct kunit;
+
+/* Size of log associated with test. */
+#define KUNIT_LOG_SIZE	512
+
+/**
+ * struct kunit_case - represents an individual test case.
+ *
+ * @run_case: the function representing the actual test case.
+ * @name:     the name of the test case.
+ *
+ * A test case is a function with the signature,
+ * ``void (*)(struct kunit *)``
+ * that makes expectations and assertions (see KUNIT_EXPECT_TRUE() and
+ * KUNIT_ASSERT_TRUE()) about code under test. Each test case is associated
+ * with a &struct kunit_suite and will be run after the suite's init
+ * function and followed by the suite's exit function.
+ *
+ * A test case should be static and should only be created with the
+ * KUNIT_CASE() macro; additionally, every array of test cases should be
+ * terminated with an empty test case.
+ *
+ * Example:
+ *
+ * .. code-block:: c
+ *
+ *	void add_test_basic(struct kunit *test)
+ *	{
+ *		KUNIT_EXPECT_EQ(test, 1, add(1, 0));
+ *		KUNIT_EXPECT_EQ(test, 2, add(1, 1));
+ *		KUNIT_EXPECT_EQ(test, 0, add(-1, 1));
+ *		KUNIT_EXPECT_EQ(test, INT_MAX, add(0, INT_MAX));
+ *		KUNIT_EXPECT_EQ(test, -1, add(INT_MAX, INT_MIN));
+ *	}
+ *
+ *	static struct kunit_case example_test_cases[] = {
+ *		KUNIT_CASE(add_test_basic),
+ *		{}
+ *	};
+ *
+ */
+struct kunit_case {
+	void (*run_case)(struct kunit *test);
+	const char *name;
+
+	/* private: internal use only. */
+	bool success;
+	char *log;
+};
+
+static inline char *kunit_status_to_string(bool status)
+{
+	return status ? "ok" : "not ok";
+}
+
+/**
+ * KUNIT_CASE - A helper for creating a &struct kunit_case
+ *
+ * @test_name: a reference to a test case function.
+ *
+ * Takes a symbol for a function representing a test case and creates a
+ * &struct kunit_case object from it. See the documentation for
+ * &struct kunit_case for an example on how to use it.
+ */
+#define KUNIT_CASE(test_name) { .run_case = test_name, .name = #test_name }
+
+/**
+ * struct kunit_suite - describes a related collection of &struct kunit_case
+ *
+ * @name:	the name of the test. Purely informational.
+ * @init:	called before every test case.
+ * @exit:	called after every test case.
+ * @test_cases:	a null terminated array of test cases.
+ *
+ * A kunit_suite is a collection of related &struct kunit_case s, such that
+ * @init is called before every test case and @exit is called after every
+ * test case, similar to the notion of a *test fixture* or a *test class*
+ * in other unit testing frameworks like JUnit or Googletest.
+ *
+ * Every &struct kunit_case must be associated with a kunit_suite for KUnit
+ * to run it.
+ */
+struct kunit_suite {
+	const char name[256];
+	int (*init)(struct kunit *test);
+	void (*exit)(struct kunit *test);
+	struct kunit_case *test_cases;
+
+	/* private - internal use only */
+	struct dentry *debugfs;
+	char *log;
+};
+
+/**
+ * struct kunit - represents a running instance of a test.
+ *
+ * @priv: for user to store arbitrary data. Commonly used to pass data
+ *	  created in the init function (see &struct kunit_suite).
+ *
+ * Used to store information about the current context under which the test
+ * is running. Most of this data is private and should only be accessed
+ * indirectly via public functions; the one exception is @priv which can be
+ * used by the test writer to store arbitrary data.
+ */
+struct kunit {
+	void *priv;
+
+	/* private: internal use only. */
+	const char *name; /* Read only after initialization! */
+	char *log; /* Points at case log after initialization */
+	struct kunit_try_catch try_catch;
+	/*
+	 * success starts as true, and may only be set to false during a
+	 * test case; thus, it is safe to update this across multiple
+	 * threads using WRITE_ONCE; however, as a consequence, it may only
+	 * be read after the test case finishes once all threads associated
+	 * with the test case have terminated.
+	 */
+	bool success; /* Read only after test_case finishes! */
+	spinlock_t lock; /* Guards all mutable test state. */
+	/*
+	 * Because resources is a list that may be updated multiple times (with
+	 * new resources) from any thread associated with a test case, we must
+	 * protect it with some type of lock.
+	 */
+	struct list_head resources; /* Protected by lock. */
+};
+
+void kunit_init_test(struct kunit *test, const char *name, char *log);
+
+int kunit_run_tests(struct kunit_suite *suite);
+
+size_t kunit_suite_num_test_cases(struct kunit_suite *suite);
+
+unsigned int kunit_test_case_num(struct kunit_suite *suite,
+				 struct kunit_case *test_case);
+
+int __kunit_test_suites_init(struct kunit_suite **suites);
+
+void __kunit_test_suites_exit(struct kunit_suite **suites);
+
+/**
+ * kunit_test_suites() - used to register one or more &struct kunit_suite
+ *			 with KUnit.
+ *
+ * @suites: a statically allocated list of &struct kunit_suite.
+ *
+ * Registers @suites with the test framework. See &struct kunit_suite for
+ * more information.
+ *
+ * When builtin,  KUnit tests are all run as late_initcalls; this means
+ * that they cannot test anything where tests must run at a different init
+ * phase. One significant restriction resulting from this is that KUnit
+ * cannot reliably test anything that is initialize in the late_init phase;
+ * another is that KUnit is useless to test things that need to be run in
+ * an earlier init phase.
+ *
+ * An alternative is to build the tests as a module.  Because modules
+ * do not support multiple late_initcall()s, we need to initialize an
+ * array of suites for a module.
+ *
+ * TODO(brendanhiggins@google.com): Don't run all KUnit tests as
+ * late_initcalls.  I have some future work planned to dispatch all KUnit
+ * tests from the same place, and at the very least to do so after
+ * everything else is definitely initialized.
+ */
+#define kunit_test_suites(...)						\
+	static struct kunit_suite *suites[] = { __VA_ARGS__, NULL};	\
+	static int kunit_test_suites_init(void)				\
+	{								\
+		return __kunit_test_suites_init(suites);		\
+	}								\
+	late_initcall(kunit_test_suites_init);				\
+	static void __exit kunit_test_suites_exit(void)			\
+	{								\
+		return __kunit_test_suites_exit(suites);		\
+	}								\
+	module_exit(kunit_test_suites_exit)
+
+#define kunit_test_suite(suite)	kunit_test_suites(&suite)
+
+#define kunit_suite_for_each_test_case(suite, test_case)		\
+	for (test_case = suite->test_cases; test_case->run_case; test_case++)
+
+bool kunit_suite_has_succeeded(struct kunit_suite *suite);
+
+/*
+ * Like kunit_alloc_resource() below, but returns the struct kunit_resource
+ * object that contains the allocation. This is mostly for testing purposes.
+ */
+struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
+						    kunit_resource_init_t init,
+						    kunit_resource_free_t free,
+						    gfp_t internal_gfp,
+						    void *context);
+
+/**
+ * kunit_alloc_resource() - Allocates a *test managed resource*.
+ * @test: The test context object.
+ * @init: a user supplied function to initialize the resource.
+ * @free: a user supplied function to free the resource.
+ * @internal_gfp: gfp to use for internal allocations, if unsure, use GFP_KERNEL
+ * @context: for the user to pass in arbitrary data to the init function.
+ *
+ * Allocates a *test managed resource*, a resource which will automatically be
+ * cleaned up at the end of a test case. See &struct kunit_resource for an
+ * example.
+ *
+ * NOTE: KUnit needs to allocate memory for each kunit_resource object. You must
+ * specify an @internal_gfp that is compatible with the use context of your
+ * resource.
+ */
+static inline void *kunit_alloc_resource(struct kunit *test,
+					 kunit_resource_init_t init,
+					 kunit_resource_free_t free,
+					 gfp_t internal_gfp,
+					 void *context)
+{
+	struct kunit_resource *res;
+
+	res = kunit_alloc_and_get_resource(test, init, free, internal_gfp,
+					   context);
+
+	if (res)
+		return res->allocation;
+
+	return NULL;
+}
+
+typedef bool (*kunit_resource_match_t)(struct kunit *test,
+				       const void *res,
+				       void *match_data);
+
+/**
+ * kunit_resource_instance_match() - Match a resource with the same instance.
+ * @test: Test case to which the resource belongs.
+ * @res: The data stored in kunit_resource->allocation.
+ * @match_data: The resource pointer to match against.
+ *
+ * An instance of kunit_resource_match_t that matches a resource whose
+ * allocation matches @match_data.
+ */
+static inline bool kunit_resource_instance_match(struct kunit *test,
+						 const void *res,
+						 void *match_data)
+{
+	return res == match_data;
+}
+
+/**
+ * kunit_resource_destroy() - Find a kunit_resource and destroy it.
+ * @test: Test case to which the resource belongs.
+ * @match: Match function. Returns whether a given resource matches @match_data.
+ * @free: Must match free on the kunit_resource to free.
+ * @match_data: Data passed into @match.
+ *
+ * Free the latest kunit_resource of @test for which @free matches the
+ * kunit_resource_free_t associated with the resource and for which @match
+ * returns true.
+ *
+ * RETURNS:
+ * 0 if kunit_resource is found and freed, -ENOENT if not found.
+ */
+int kunit_resource_destroy(struct kunit *test,
+			   kunit_resource_match_t match,
+			   kunit_resource_free_t free,
+			   void *match_data);
+
+/**
+ * kunit_kmalloc() - Like kmalloc() except the allocation is *test managed*.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * Just like `kmalloc(...)`, except the allocation is managed by the test case
+ * and is automatically cleaned up after the test case concludes. See &struct
+ * kunit_resource for more information.
+ */
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp);
+
+/**
+ * kunit_kfree() - Like kfree except for allocations managed by KUnit.
+ * @test: The test case to which the resource belongs.
+ * @ptr: The memory allocation to free.
+ */
+void kunit_kfree(struct kunit *test, const void *ptr);
+
+/**
+ * kunit_kzalloc() - Just like kunit_kmalloc(), but zeroes the allocation.
+ * @test: The test context object.
+ * @size: The size in bytes of the desired memory.
+ * @gfp: flags passed to underlying kmalloc().
+ *
+ * See kzalloc() and kunit_kmalloc() for more information.
+ */
+static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	return kunit_kmalloc(test, size, gfp | __GFP_ZERO);
+}
+
+void kunit_cleanup(struct kunit *test);
+
+void kunit_log_append(char *log, const char *fmt, ...);
+
+/*
+ * printk and log to per-test or per-suite log buffer.  Logging only done
+ * if CONFIG_KUNIT_DEBUGFS is 'y'; if it is 'n', no log is allocated/used.
+ */
+#define kunit_log(lvl, test_or_suite, fmt, ...)				\
+	do {								\
+		printk(lvl fmt, ##__VA_ARGS__);				\
+		kunit_log_append((test_or_suite)->log,	fmt "\n",	\
+				 ##__VA_ARGS__);			\
+	} while (0)
+
+#define kunit_printk(lvl, test, fmt, ...)				\
+	kunit_log(lvl, test, "\t# %s: " fmt, (test)->name, ##__VA_ARGS__)
+
+/**
+ * kunit_info() - Prints an INFO level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints an info level message associated with the test suite being run.
+ * Takes a variable number of format parameters just like printk().
+ */
+#define kunit_info(test, fmt, ...) \
+	kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
+
+/**
+ * kunit_warn() - Prints a WARN level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints a warning level message.
+ */
+#define kunit_warn(test, fmt, ...) \
+	kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
+
+/**
+ * kunit_err() - Prints an ERROR level message associated with @test.
+ *
+ * @test: The test context object.
+ * @fmt:  A printk() style format string.
+ *
+ * Prints an error level message.
+ */
+#define kunit_err(test, fmt, ...) \
+	kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
+
+/**
+ * KUNIT_SUCCEED() - A no-op expectation. Only exists for code clarity.
+ * @test: The test context object.
+ *
+ * The opposite of KUNIT_FAIL(), it is an expectation that cannot fail. In other
+ * words, it does nothing and only exists for code clarity. See
+ * KUNIT_EXPECT_TRUE() for more information.
+ */
+#define KUNIT_SUCCEED(test) do {} while (0)
+
+void kunit_do_assertion(struct kunit *test,
+			struct kunit_assert *assert,
+			bool pass,
+			const char *fmt, ...);
+
+#define KUNIT_ASSERTION(test, pass, assert_class, INITIALIZER, fmt, ...) do {  \
+	struct assert_class __assertion = INITIALIZER;			       \
+	kunit_do_assertion(test,					       \
+			   &__assertion.assert,				       \
+			   pass,					       \
+			   fmt,						       \
+			   ##__VA_ARGS__);				       \
+} while (0)
+
+
+#define KUNIT_FAIL_ASSERTION(test, assert_type, fmt, ...)		       \
+	KUNIT_ASSERTION(test,						       \
+			false,						       \
+			kunit_fail_assert,				       \
+			KUNIT_INIT_FAIL_ASSERT_STRUCT(test, assert_type),      \
+			fmt,						       \
+			##__VA_ARGS__)
+
+/**
+ * KUNIT_FAIL() - Always causes a test to fail when evaluated.
+ * @test: The test context object.
+ * @fmt: an informational message to be printed when the assertion is made.
+ * @...: string format arguments.
+ *
+ * The opposite of KUNIT_SUCCEED(), it is an expectation that always fails. In
+ * other words, it always results in a failed expectation, and consequently
+ * always causes the test case to fail when evaluated. See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_FAIL(test, fmt, ...)					       \
+	KUNIT_FAIL_ASSERTION(test,					       \
+			     KUNIT_EXPECTATION,				       \
+			     fmt,					       \
+			     ##__VA_ARGS__)
+
+#define KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      expected_true,				       \
+			      fmt,					       \
+			      ...)					       \
+	KUNIT_ASSERTION(test,						       \
+			!!(condition) == !!expected_true,		       \
+			kunit_unary_assert,				       \
+			KUNIT_INIT_UNARY_ASSERT_STRUCT(test,		       \
+						       assert_type,	       \
+						       #condition,	       \
+						       expected_true),	       \
+			fmt,						       \
+			##__VA_ARGS__)
+
+#define KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, fmt, ...)       \
+	KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      true,					       \
+			      fmt,					       \
+			      ##__VA_ARGS__)
+
+#define KUNIT_TRUE_ASSERTION(test, assert_type, condition) \
+	KUNIT_TRUE_MSG_ASSERTION(test, assert_type, condition, NULL)
+
+#define KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, fmt, ...)      \
+	KUNIT_UNARY_ASSERTION(test,					       \
+			      assert_type,				       \
+			      condition,				       \
+			      false,					       \
+			      fmt,					       \
+			      ##__VA_ARGS__)
+
+#define KUNIT_FALSE_ASSERTION(test, assert_type, condition) \
+	KUNIT_FALSE_MSG_ASSERTION(test, assert_type, condition, NULL)
+
+/*
+ * A factory macro for defining the assertions and expectations for the basic
+ * comparisons defined for the built in types.
+ *
+ * Unfortunately, there is no common type that all types can be promoted to for
+ * which all the binary operators behave the same way as for the actual types
+ * (for example, there is no type that long long and unsigned long long can
+ * both be cast to where the comparison result is preserved for all values). So
+ * the best we can do is do the comparison in the original types and then coerce
+ * everything to long long for printing; this way, the comparison behaves
+ * correctly and the printed out value usually makes sense without
+ * interpretation, but can always be interpreted to figure out the actual
+ * value.
+ */
+#define KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    op,					       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+do {									       \
+	typeof(left) __left = (left);					       \
+	typeof(right) __right = (right);				       \
+	((void)__typecheck(__left, __right));				       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			__left op __right,				       \
+			assert_class,					       \
+			ASSERT_CLASS_INIT(test,				       \
+					  assert_type,			       \
+					  #op,				       \
+					  #left,			       \
+					  __left,			       \
+					  #right,			       \
+					  __right),			       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, ==, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, !=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, <, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, <=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, >, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ...)				       \
+	KUNIT_BASE_BINARY_ASSERTION(test,				       \
+				    assert_class,			       \
+				    ASSERT_CLASS_INIT,			       \
+				    assert_type,			       \
+				    left, >=, right,			       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_EQ_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_EQ_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_NE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_NE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_LT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_LT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_LT_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_LT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_LT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_LE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_LE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_LE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_LE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_LE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_GT_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_GT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_GT_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_GT_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_GT_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_GE_MSG_ASSERTION(test, assert_type, left, right, fmt, ...)\
+	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    kunit_binary_assert,		       \
+				    KUNIT_INIT_BINARY_ASSERT_STRUCT,	       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_GE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      assert_type,			       \
+				      left,				       \
+				      right,				       \
+				      NULL)
+
+#define KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BASE_GE_MSG_ASSERTION(test,				       \
+				    kunit_binary_ptr_assert,		       \
+				    KUNIT_INIT_BINARY_PTR_ASSERT_STRUCT,       \
+				    assert_type,			       \
+				    left,				       \
+				    right,				       \
+				    fmt,				       \
+				    ##__VA_ARGS__)
+
+#define KUNIT_BINARY_PTR_GE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_PTR_GE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left,				       \
+				   op,					       \
+				   right,				       \
+				   fmt,					       \
+				   ...)					       \
+do {									       \
+	typeof(left) __left = (left);					       \
+	typeof(right) __right = (right);				       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			strcmp(__left, __right) op 0,			       \
+			kunit_binary_str_assert,			       \
+			KUNIT_INIT_BINARY_ASSERT_STRUCT(test,		       \
+							assert_type,	       \
+							#op,		       \
+							#left,		       \
+							__left,		       \
+							#right,		       \
+							__right),	       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left, ==, right,			       \
+				   fmt,					       \
+				   ##__VA_ARGS__)
+
+#define KUNIT_BINARY_STR_EQ_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ...)				       \
+	KUNIT_BINARY_STR_ASSERTION(test,				       \
+				   assert_type,				       \
+				   left, !=, right,			       \
+				   fmt,					       \
+				   ##__VA_ARGS__)
+
+#define KUNIT_BINARY_STR_NE_ASSERTION(test, assert_type, left, right)	       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  assert_type,			       \
+					  left,				       \
+					  right,			       \
+					  NULL)
+
+#define KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						assert_type,		       \
+						ptr,			       \
+						fmt,			       \
+						...)			       \
+do {									       \
+	typeof(ptr) __ptr = (ptr);					       \
+									       \
+	KUNIT_ASSERTION(test,						       \
+			!IS_ERR_OR_NULL(__ptr),				       \
+			kunit_ptr_not_err_assert,			       \
+			KUNIT_INIT_PTR_NOT_ERR_STRUCT(test,		       \
+						      assert_type,	       \
+						      #ptr,		       \
+						      __ptr),		       \
+			fmt,						       \
+			##__VA_ARGS__);					       \
+} while (0)
+
+#define KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, assert_type, ptr)	       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						assert_type,		       \
+						ptr,			       \
+						NULL)
+
+/**
+ * KUNIT_EXPECT_TRUE() - Causes a test failure when the expression is not true.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails when this does
+ * not evaluate to true.
+ *
+ * This and expectations of the form `KUNIT_EXPECT_*` will cause the test case
+ * to fail when the specified condition is not met; however, it will not prevent
+ * the test case from continuing to run; this is otherwise known as an
+ * *expectation failure*.
+ */
+#define KUNIT_EXPECT_TRUE(test, condition) \
+	KUNIT_TRUE_ASSERTION(test, KUNIT_EXPECTATION, condition)
+
+#define KUNIT_EXPECT_TRUE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_TRUE_MSG_ASSERTION(test,					       \
+				 KUNIT_EXPECTATION,			       \
+				 condition,				       \
+				 fmt,					       \
+				 ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_FALSE() - Makes a test failure when the expression is not false.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails when this does
+ * not evaluate to false.
+ *
+ * Sets an expectation that @condition evaluates to false. See
+ * KUNIT_EXPECT_TRUE() for more information.
+ */
+#define KUNIT_EXPECT_FALSE(test, condition) \
+	KUNIT_FALSE_ASSERTION(test, KUNIT_EXPECTATION, condition)
+
+#define KUNIT_EXPECT_FALSE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_FALSE_MSG_ASSERTION(test,					       \
+				  KUNIT_EXPECTATION,			       \
+				  condition,				       \
+				  fmt,					       \
+				  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_EQ() - Sets an expectation that @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_EQ(test, left, right) \
+	KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_PTR_EQ() - Expects that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) == (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_PTR_EQ(test, left, right)				       \
+	KUNIT_BINARY_PTR_EQ_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right)
+
+#define KUNIT_EXPECT_PTR_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_NE() - An expectation that @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are not
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_NE(test, left, right) \
+	KUNIT_BINARY_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_PTR_NE() - Expects that pointers @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are not
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) != (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_PTR_NE(test, left, right)				       \
+	KUNIT_BINARY_PTR_NE_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right)
+
+#define KUNIT_EXPECT_PTR_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_LT() - An expectation that @left is less than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is less than the
+ * value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) < (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_LT(test, left, right) \
+	KUNIT_BINARY_LT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_LT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_LE() - Expects that @left is less than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is less than or
+ * equal to the value that @right evaluates to. Semantically this is equivalent
+ * to KUNIT_EXPECT_TRUE(@test, (@left) <= (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_LE(test, left, right) \
+	KUNIT_BINARY_LE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_LE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_GT() - An expectation that @left is greater than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is greater than
+ * the value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) > (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_GT(test, left, right) \
+	KUNIT_BINARY_GT_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_GT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_GE() - Expects that @left is greater than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an expectation that the value that @left evaluates to is greater than
+ * the value that @right evaluates to. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, (@left) >= (@right)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_GE(test, left, right) \
+	KUNIT_BINARY_GE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_GE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      KUNIT_EXPECTATION,		       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_STREQ() - Expects that strings @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, !strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_EXPECT_STREQ(test, left, right) \
+	KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_STREQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_STRNEQ() - Expects that strings @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * not equal. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_EXPECT_TRUE()
+ * for more information.
+ */
+#define KUNIT_EXPECT_STRNEQ(test, left, right) \
+	KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_EXPECTATION, left, right)
+
+#define KUNIT_EXPECT_STRNEQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_EXPECTATION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_EXPECT_NOT_ERR_OR_NULL() - Expects that @ptr is not null and not err.
+ * @test: The test context object.
+ * @ptr: an arbitrary pointer.
+ *
+ * Sets an expectation that the value that @ptr evaluates to is not null and not
+ * an errno stored in a pointer. This is semantically equivalent to
+ * KUNIT_EXPECT_TRUE(@test, !IS_ERR_OR_NULL(@ptr)). See KUNIT_EXPECT_TRUE() for
+ * more information.
+ */
+#define KUNIT_EXPECT_NOT_ERR_OR_NULL(test, ptr) \
+	KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_EXPECTATION, ptr)
+
+#define KUNIT_EXPECT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...)		       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						KUNIT_EXPECTATION,	       \
+						ptr,			       \
+						fmt,			       \
+						##__VA_ARGS__)
+
+#define KUNIT_ASSERT_FAILURE(test, fmt, ...) \
+	KUNIT_FAIL_ASSERTION(test, KUNIT_ASSERTION, fmt, ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_TRUE() - Sets an assertion that @condition is true.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression. The test fails and aborts when
+ * this does not evaluate to true.
+ *
+ * This and assertions of the form `KUNIT_ASSERT_*` will cause the test case to
+ * fail *and immediately abort* when the specified condition is not met. Unlike
+ * an expectation failure, it will prevent the test case from continuing to run;
+ * this is otherwise known as an *assertion failure*.
+ */
+#define KUNIT_ASSERT_TRUE(test, condition) \
+	KUNIT_TRUE_ASSERTION(test, KUNIT_ASSERTION, condition)
+
+#define KUNIT_ASSERT_TRUE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_TRUE_MSG_ASSERTION(test,					       \
+				 KUNIT_ASSERTION,			       \
+				 condition,				       \
+				 fmt,					       \
+				 ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_FALSE() - Sets an assertion that @condition is false.
+ * @test: The test context object.
+ * @condition: an arbitrary boolean expression.
+ *
+ * Sets an assertion that the value that @condition evaluates to is false. This
+ * is the same as KUNIT_EXPECT_FALSE(), except it causes an assertion failure
+ * (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_FALSE(test, condition) \
+	KUNIT_FALSE_ASSERTION(test, KUNIT_ASSERTION, condition)
+
+#define KUNIT_ASSERT_FALSE_MSG(test, condition, fmt, ...)		       \
+	KUNIT_FALSE_MSG_ASSERTION(test,					       \
+				  KUNIT_ASSERTION,			       \
+				  condition,				       \
+				  fmt,					       \
+				  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_EQ() - Sets an assertion that @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_EQ(test, left, right) \
+	KUNIT_BINARY_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_EQ_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_EQ(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_PTR_EQ(test, left, right) \
+	KUNIT_BINARY_PTR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_PTR_EQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_NE() - An assertion that @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are not
+ * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_NE(test, left, right) \
+	KUNIT_BINARY_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_NE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_PTR_NE() - Asserts that pointers @left and @right are not equal.
+ * KUNIT_ASSERT_PTR_EQ() - Asserts that pointers @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a pointer.
+ * @right: an arbitrary expression that evaluates to a pointer.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are not
+ * equal. This is the same as KUNIT_EXPECT_NE(), except it causes an assertion
+ * failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_PTR_NE(test, left, right) \
+	KUNIT_BINARY_PTR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_PTR_NE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_PTR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+/**
+ * KUNIT_ASSERT_LT() - An assertion that @left is less than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is less than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_LT(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_LT(test, left, right) \
+	KUNIT_BINARY_LT_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_LT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LT_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+/**
+ * KUNIT_ASSERT_LE() - An assertion that @left is less than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is less than or
+ * equal to the value that @right evaluates to. This is the same as
+ * KUNIT_EXPECT_LE(), except it causes an assertion failure (see
+ * KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_LE(test, left, right) \
+	KUNIT_BINARY_LE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_LE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_LE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_GT() - An assertion that @left is greater than @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is greater than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_GT(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_GT(test, left, right) \
+	KUNIT_BINARY_GT_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_GT_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GT_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_GE() - Assertion that @left is greater than or equal to @right.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a primitive C type.
+ * @right: an arbitrary expression that evaluates to a primitive C type.
+ *
+ * Sets an assertion that the value that @left evaluates to is greater than the
+ * value that @right evaluates to. This is the same as KUNIT_EXPECT_GE(), except
+ * it causes an assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion
+ * is not met.
+ */
+#define KUNIT_ASSERT_GE(test, left, right) \
+	KUNIT_BINARY_GE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_GE_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_GE_MSG_ASSERTION(test,				       \
+				      KUNIT_ASSERTION,			       \
+				      left,				       \
+				      right,				       \
+				      fmt,				       \
+				      ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_STREQ() - An assertion that strings @left and @right are equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an assertion that the values that @left and @right evaluate to are
+ * equal. This is the same as KUNIT_EXPECT_STREQ(), except it causes an
+ * assertion failure (see KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_STREQ(test, left, right) \
+	KUNIT_BINARY_STR_EQ_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_STREQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_EQ_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_STRNEQ() - Expects that strings @left and @right are not equal.
+ * @test: The test context object.
+ * @left: an arbitrary expression that evaluates to a null terminated string.
+ * @right: an arbitrary expression that evaluates to a null terminated string.
+ *
+ * Sets an expectation that the values that @left and @right evaluate to are
+ * not equal. This is semantically equivalent to
+ * KUNIT_ASSERT_TRUE(@test, strcmp((@left), (@right))). See KUNIT_ASSERT_TRUE()
+ * for more information.
+ */
+#define KUNIT_ASSERT_STRNEQ(test, left, right) \
+	KUNIT_BINARY_STR_NE_ASSERTION(test, KUNIT_ASSERTION, left, right)
+
+#define KUNIT_ASSERT_STRNEQ_MSG(test, left, right, fmt, ...)		       \
+	KUNIT_BINARY_STR_NE_MSG_ASSERTION(test,				       \
+					  KUNIT_ASSERTION,		       \
+					  left,				       \
+					  right,			       \
+					  fmt,				       \
+					  ##__VA_ARGS__)
+
+/**
+ * KUNIT_ASSERT_NOT_ERR_OR_NULL() - Assertion that @ptr is not null and not err.
+ * @test: The test context object.
+ * @ptr: an arbitrary pointer.
+ *
+ * Sets an assertion that the value that @ptr evaluates to is not null and not
+ * an errno stored in a pointer. This is the same as
+ * KUNIT_EXPECT_NOT_ERR_OR_NULL(), except it causes an assertion failure (see
+ * KUNIT_ASSERT_TRUE()) when the assertion is not met.
+ */
+#define KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr) \
+	KUNIT_PTR_NOT_ERR_OR_NULL_ASSERTION(test, KUNIT_ASSERTION, ptr)
+
+#define KUNIT_ASSERT_NOT_ERR_OR_NULL_MSG(test, ptr, fmt, ...)		       \
+	KUNIT_PTR_NOT_ERR_OR_NULL_MSG_ASSERTION(test,			       \
+						KUNIT_ASSERTION,	       \
+						ptr,			       \
+						fmt,			       \
+						##__VA_ARGS__)
+
+#endif /* _KUNIT_TEST_H */
diff --git a/include/kunit/try-catch.h b/include/kunit/try-catch.h
new file mode 100644
index 0000000..c507dd4
--- /dev/null
+++ b/include/kunit/try-catch.h
@@ -0,0 +1,65 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * An API to allow a function, that may fail, to be executed, and recover in a
+ * controlled manner.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TRY_CATCH_H
+#define _KUNIT_TRY_CATCH_H
+
+#include <linux/types.h>
+
+typedef void (*kunit_try_catch_func_t)(void *);
+
+struct completion;
+struct kunit;
+
+/**
+ * struct kunit_try_catch - provides a generic way to run code which might fail.
+ * @test: The test case that is currently being executed.
+ * @try_completion: Completion that the control thread waits on while test runs.
+ * @try_result: Contains any errno obtained while running test case.
+ * @try: The function, the test case, to attempt to run.
+ * @catch: The function called if @try bails out.
+ * @context: used to pass user data to the try and catch functions.
+ *
+ * kunit_try_catch provides a generic, architecture independent way to execute
+ * an arbitrary function of type kunit_try_catch_func_t which may bail out by
+ * calling kunit_try_catch_throw(). If kunit_try_catch_throw() is called, @try
+ * is stopped at the site of invocation and @catch is called.
+ *
+ * struct kunit_try_catch provides a generic interface for the functionality
+ * needed to implement kunit->abort() which in turn is needed for implementing
+ * assertions. Assertions allow stating a precondition for a test simplifying
+ * how test cases are written and presented.
+ *
+ * Assertions are like expectations, except they abort (call
+ * kunit_try_catch_throw()) when the specified condition is not met. This is
+ * useful when you look at a test case as a logical statement about some piece
+ * of code, where assertions are the premises for the test case, and the
+ * conclusion is a set of predicates, rather expectations, that must all be
+ * true. If your premises are violated, it does not makes sense to continue.
+ */
+struct kunit_try_catch {
+	/* private: internal use only. */
+	struct kunit *test;
+	struct completion *try_completion;
+	int try_result;
+	kunit_try_catch_func_t try;
+	kunit_try_catch_func_t catch;
+	void *context;
+};
+
+void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context);
+
+void __noreturn kunit_try_catch_throw(struct kunit_try_catch *try_catch);
+
+static inline int kunit_try_catch_get_result(struct kunit_try_catch *try_catch)
+{
+	return try_catch->try_result;
+}
+
+#endif /* _KUNIT_TRY_CATCH_H */
diff --git a/include/linux/OWNERS b/include/linux/OWNERS
new file mode 100644
index 0000000..c88808c
--- /dev/null
+++ b/include/linux/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/include/linux/OWNERS
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h
index 26f0ecf..ba025f4 100644
--- a/include/linux/amba/bus.h
+++ b/include/linux/amba/bus.h
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 #include <linux/resource.h>
 #include <linux/regulator/consumer.h>
+#include <linux/android_kabi.h>
 
 #define AMBA_NR_IRQS	9
 #define AMBA_CID	0xb105f00d
@@ -70,6 +71,8 @@
 	struct amba_cs_uci_id	uci;
 	unsigned int		irq[AMBA_NR_IRQS];
 	char			*driver_override;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct amba_driver {
@@ -78,6 +81,8 @@
 	int			(*remove)(struct amba_device *);
 	void			(*shutdown)(struct amba_device *);
 	const struct amba_id	*id_table;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
diff --git a/include/linux/android_kabi.h b/include/linux/android_kabi.h
new file mode 100644
index 0000000..9c7b6c0
--- /dev/null
+++ b/include/linux/android_kabi.h
@@ -0,0 +1,113 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * android_kabi.h - Android kernel abi abstraction header
+ *
+ * Copyright (C) 2020 Google, Inc.
+ *
+ * Heavily influenced by rh_kabi.h which came from the RHEL/CENTOS kernel and
+ * was:
+ *	Copyright (c) 2014 Don Zickus
+ *	Copyright (c) 2015-2018 Jiri Benc
+ *	Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa
+ *	Copyright (c) 2016-2018 Prarit Bhargava
+ *	Copyright (c) 2017 Paolo Abeni, Larry Woodman
+ *
+ * These macros are to be used to try to help alleviate future kernel abi
+ * changes that will occur as LTS and other kernel patches are merged into the
+ * tree during a period in which the kernel abi is wishing to not be disturbed.
+ *
+ * There are two times these macros should be used:
+ *  - Before the kernel abi is "frozen"
+ *    Padding can be added to various kernel structures that have in the past
+ *    been known to change over time.  That will give "room" in the structure
+ *    that can then be used when fields are added so that the structure size
+ *    will not change.
+ *
+ *  - After the kernel abi is "frozen"
+ *    If a structure's field is changed to a type that is identical in size to
+ *    the previous type, it can be changed with a union macro
+ *    If a field is added to a structure, the padding fields can be used to add
+ *    the new field in a "safe" way.
+ */
+#ifndef _ANDROID_KABI_H
+#define _ANDROID_KABI_H
+
+#include <linux/compiler.h>
+
+/*
+ * Worker macros, don't use these, use the ones without a leading '_'
+ */
+
+#define __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new)				\
+	union {									\
+		_Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),	\
+			       __FILE__ ":" __stringify(__LINE__) ": "		\
+			       __stringify(_new)				\
+			       " is larger than "				\
+			       __stringify(_orig) );				\
+		_Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}),	\
+			       __FILE__ ":" __stringify(__LINE__) ": "		\
+			       __stringify(_orig)				\
+			       " is not aligned the same as "			\
+			       __stringify(_new) );				\
+	}
+
+#ifdef __GENKSYMS__
+
+#define _ANDROID_KABI_REPLACE(_orig, _new)		_orig
+
+#else
+
+#define _ANDROID_KABI_REPLACE(_orig, _new)			\
+	union {							\
+		_new;						\
+		struct {					\
+			_orig;					\
+		};						\
+		__ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);	\
+	}
+
+#endif /* __GENKSYMS__ */
+
+#define _ANDROID_KABI_RESERVE(n)		u64 android_kabi_reserved##n
+
+
+/*
+ * Macros to use _before_ the ABI is frozen
+ */
+
+/*
+ * ANDROID_KABI_RESERVE
+ *   Reserve some "padding" in a structure for potential future use.
+ *   This normally placed at the end of a structure.
+ *   number: the "number" of the padding variable in the structure.  Start with
+ *   1 and go up.
+ */
+#define ANDROID_KABI_RESERVE(number)	_ANDROID_KABI_RESERVE(number)
+
+
+/*
+ * Macros to use _after_ the ABI is frozen
+ */
+
+/*
+ * ANDROID_KABI_USE(number, _new)
+ *   Use a previous padding entry that was defined with ANDROID_KABI_RESERVE
+ *   number: the previous "number" of the padding variable
+ *   _new: the variable to use now instead of the padding variable
+ */
+#define ANDROID_KABI_USE(number, _new)		\
+	_ANDROID_KABI_REPLACE(_ANDROID_KABI_RESERVE(number), _new)
+
+/*
+ * ANDROID_KABI_USE2(number, _new1, _new2)
+ *   Use a previous padding entry that was defined with ANDROID_KABI_RESERVE for
+ *   two new variables that fit into 64 bits.  This is good for when you do not
+ *   want to "burn" a 64bit padding variable for a smaller variable size if not
+ *   needed.
+ */
+#define ANDROID_KABI_USE2(number, _new1, _new2)			\
+	_ANDROID_KABI_REPLACE(_ANDROID_KABI_RESERVE(number), struct{ _new1; _new2; })
+
+
+#endif /* _ANDROID_KABI_H */
diff --git a/include/linux/android_vendor.h b/include/linux/android_vendor.h
new file mode 100644
index 0000000..59fc573
--- /dev/null
+++ b/include/linux/android_vendor.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * android_vendor.h - Android vendor data
+ *
+ * Copyright 2020 Google LLC
+ *
+ * These macros are to be used to reserve space in kernel data structures
+ * for use by vendor modules.
+ *
+ * These macros should be used before the kernel abi is "frozen".
+ * Fields can be added to various kernel structures that need space
+ * for functionality implemented in vendor modules. The use of
+ * these fields is vendor specific.
+ */
+#ifndef _ANDROID_VENDOR_H
+#define _ANDROID_VENDOR_H
+
+/*
+ * ANDROID_VENDOR_DATA
+ *   Reserve some "padding" in a structure for potential future use.
+ *   This normally placed at the end of a structure.
+ *   number: the "number" of the padding variable in the structure.  Start with
+ *   1 and go up.
+ *
+ * ANDROID_VENDOR_DATA_ARRAY
+ *   Same as ANDROID_VENDOR_DATA but allocates an array of u64 with
+ *   the specified size
+ */
+#define ANDROID_VENDOR_DATA(n)		u64 android_vendor_data##n
+#define ANDROID_VENDOR_DATA_ARRAY(n, s)	u64 android_vendor_data##n[s]
+
+#define ANDROID_OEM_DATA(n)		u64 android_oem_data##n
+#define ANDROID_OEM_DATA_ARRAY(n, s)	u64 android_oem_data##n[s]
+
+#endif /* _ANDROID_VENDOR_H */
diff --git a/include/linux/anon_inodes.h b/include/linux/anon_inodes.h
index d0d7d96..71881a2b 100644
--- a/include/linux/anon_inodes.h
+++ b/include/linux/anon_inodes.h
@@ -10,12 +10,17 @@
 #define _LINUX_ANON_INODES_H
 
 struct file_operations;
+struct inode;
 
 struct file *anon_inode_getfile(const char *name,
 				const struct file_operations *fops,
 				void *priv, int flags);
 int anon_inode_getfd(const char *name, const struct file_operations *fops,
 		     void *priv, int flags);
+int anon_inode_getfd_secure(const char *name,
+			    const struct file_operations *fops,
+			    void *priv, int flags,
+			    const struct inode *context_inode);
 
 #endif /* _LINUX_ANON_INODES_H */
 
diff --git a/include/linux/arch_topology.h b/include/linux/arch_topology.h
index 42f2b51..5402bc0 100644
--- a/include/linux/arch_topology.h
+++ b/include/linux/arch_topology.h
@@ -33,6 +33,14 @@
 	return per_cpu(freq_scale, cpu);
 }
 
+DECLARE_PER_CPU(unsigned long, max_freq_scale);
+
+static inline
+unsigned long topology_get_max_freq_scale(struct sched_domain *sd, int cpu)
+{
+	return per_cpu(max_freq_scale, cpu);
+}
+
 struct cpu_topology {
 	int thread_id;
 	int core_id;
diff --git a/include/linux/backing-dev-defs.h b/include/linux/backing-dev-defs.h
index 2849bdb..dc59f35 100644
--- a/include/linux/backing-dev-defs.h
+++ b/include/linux/backing-dev-defs.h
@@ -13,6 +13,7 @@
 #include <linux/workqueue.h>
 #include <linux/kref.h>
 #include <linux/refcount.h>
+#include <linux/android_kabi.h>
 
 struct page;
 struct device;
@@ -183,6 +184,9 @@
 		struct rcu_head rcu;
 	};
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct backing_dev_info {
@@ -228,6 +232,9 @@
 #ifdef CONFIG_DEBUG_FS
 	struct dentry *debug_dir;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 enum {
diff --git a/include/linux/bio.h b/include/linux/bio.h
index b0927b2..696a208 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -8,6 +8,7 @@
 #include <linux/highmem.h>
 #include <linux/mempool.h>
 #include <linux/ioprio.h>
+#include <linux/android_kabi.h>
 
 #ifdef CONFIG_BLOCK
 /* struct bio, bio_vec and BIO_* flags are defined in blk_types.h */
@@ -315,6 +316,10 @@
 	struct work_struct	bip_work;	/* I/O completion */
 
 	struct bio_vec		*bip_vec;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	struct bio_vec		bip_inline_vecs[0];/* embedded bvec array */
 };
 
@@ -715,6 +720,11 @@
 	struct bio_list		rescue_list;
 	struct work_struct	rescue_work;
 	struct workqueue_struct	*rescue_workqueue;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct biovec_slab {
diff --git a/include/linux/bits.h b/include/linux/bits.h
index 669d694..a740bbc 100644
--- a/include/linux/bits.h
+++ b/include/linux/bits.h
@@ -3,9 +3,9 @@
 #define __LINUX_BITS_H
 
 #include <linux/const.h>
+#include <vdso/bits.h>
 #include <asm/bitsperlong.h>
 
-#define BIT(nr)			(UL(1) << (nr))
 #define BIT_ULL(nr)		(ULL(1) << (nr))
 #define BIT_MASK(nr)		(UL(1) << ((nr) % BITS_PER_LONG))
 #define BIT_WORD(nr)		((nr) / BITS_PER_LONG)
diff --git a/include/linux/blk-crypto.h b/include/linux/blk-crypto.h
new file mode 100644
index 0000000..c495572
--- /dev/null
+++ b/include/linux/blk-crypto.h
@@ -0,0 +1,178 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_BLK_CRYPTO_H
+#define __LINUX_BLK_CRYPTO_H
+
+#include <linux/types.h>
+
+enum blk_crypto_mode_num {
+	BLK_ENCRYPTION_MODE_INVALID,
+	BLK_ENCRYPTION_MODE_AES_256_XTS,
+	BLK_ENCRYPTION_MODE_AES_128_CBC_ESSIV,
+	BLK_ENCRYPTION_MODE_ADIANTUM,
+	BLK_ENCRYPTION_MODE_MAX,
+};
+
+#define BLK_CRYPTO_MAX_KEY_SIZE		64
+#define BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE                128
+
+/**
+ * struct blk_crypto_config - an inline encryption key's crypto configuration
+ * @crypto_mode: encryption algorithm this key is for
+ * @data_unit_size: the data unit size for all encryption/decryptions with this
+ *	key.  This is the size in bytes of each individual plaintext and
+ *	ciphertext.  This is always a power of 2.  It might be e.g. the
+ *	filesystem block size or the disk sector size.
+ * @dun_bytes: the maximum number of bytes of DUN used when using this key
+ * @is_hw_wrapped: @raw points to a wrapped key to be used by an inline
+ *	encryption hardware that accepts wrapped keys.
+ */
+struct blk_crypto_config {
+	enum blk_crypto_mode_num crypto_mode;
+	unsigned int data_unit_size;
+	unsigned int dun_bytes;
+	bool is_hw_wrapped;
+};
+
+/**
+ * struct blk_crypto_key - an inline encryption key
+ * @crypto_cfg: the crypto configuration (like crypto_mode, key size) for this
+ *		key
+ * @data_unit_size_bits: log2 of data_unit_size
+ * @size: size of this key in bytes (determined by @crypto_cfg.crypto_mode)
+ * @raw: the raw bytes of this key.  Only the first @size bytes are used.
+ *
+ * A blk_crypto_key is immutable once created, and many bios can reference it at
+ * the same time.  It must not be freed until all bios using it have completed
+ * and it has been evicted from all devices on which it may have been used.
+ */
+struct blk_crypto_key {
+	struct blk_crypto_config crypto_cfg;
+	unsigned int data_unit_size_bits;
+	unsigned int size;
+	u8 raw[BLK_CRYPTO_MAX_WRAPPED_KEY_SIZE];
+};
+
+#define BLK_CRYPTO_MAX_IV_SIZE		32
+#define BLK_CRYPTO_DUN_ARRAY_SIZE	(BLK_CRYPTO_MAX_IV_SIZE / sizeof(u64))
+
+/**
+ * struct bio_crypt_ctx - an inline encryption context
+ * @bc_key: the key, algorithm, and data unit size to use
+ * @bc_dun: the data unit number (starting IV) to use
+ *
+ * A bio_crypt_ctx specifies that the contents of the bio will be encrypted (for
+ * write requests) or decrypted (for read requests) inline by the storage device
+ * or controller, or by the crypto API fallback.
+ */
+struct bio_crypt_ctx {
+	const struct blk_crypto_key	*bc_key;
+	u64				bc_dun[BLK_CRYPTO_DUN_ARRAY_SIZE];
+};
+
+#include <linux/blk_types.h>
+#include <linux/blkdev.h>
+
+struct request;
+struct request_queue;
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+static inline bool bio_has_crypt_ctx(struct bio *bio)
+{
+	return bio->bi_crypt_context;
+}
+
+void bio_crypt_set_ctx(struct bio *bio, const struct blk_crypto_key *key,
+		       const u64 dun[BLK_CRYPTO_DUN_ARRAY_SIZE],
+		       gfp_t gfp_mask);
+
+bool bio_crypt_dun_is_contiguous(const struct bio_crypt_ctx *bc,
+				 unsigned int bytes,
+				 const u64 next_dun[BLK_CRYPTO_DUN_ARRAY_SIZE]);
+
+int blk_crypto_init_key(struct blk_crypto_key *blk_key,
+			const u8 *raw_key, unsigned int raw_key_size,
+			bool is_hw_wrapped,
+			enum blk_crypto_mode_num crypto_mode,
+			unsigned int dun_bytes,
+			unsigned int data_unit_size);
+
+int blk_crypto_start_using_key(const struct blk_crypto_key *key,
+			       struct request_queue *q);
+
+int blk_crypto_evict_key(struct request_queue *q,
+			 const struct blk_crypto_key *key);
+
+bool blk_crypto_config_supported(struct request_queue *q,
+				 const struct blk_crypto_config *cfg);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool bio_has_crypt_ctx(struct bio *bio)
+{
+	return false;
+}
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src);
+
+int __bio_crypt_clone(struct bio *dst, struct bio *src, gfp_t gfp_mask);
+/**
+ * bio_crypt_clone - clone bio encryption context
+ * @dst: destination bio
+ * @src: source bio
+ * @gfp_mask: memory allocation flags
+ *
+ * If @src has an encryption context, clone it to @dst.
+ *
+ * Return: 0 on success, -ENOMEM if out of memory.  -ENOMEM is only possible if
+ *	   @gfp_mask doesn't include %__GFP_DIRECT_RECLAIM.
+ */
+static inline int bio_crypt_clone(struct bio *dst, struct bio *src,
+				  gfp_t gfp_mask)
+{
+	bio_clone_skip_dm_default_key(dst, src);
+	if (bio_has_crypt_ctx(src))
+		return __bio_crypt_clone(dst, src, gfp_mask);
+	return 0;
+}
+
+#if IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+static inline void bio_set_skip_dm_default_key(struct bio *bio)
+{
+	bio->bi_skip_dm_default_key = true;
+}
+
+static inline bool bio_should_skip_dm_default_key(const struct bio *bio)
+{
+	return bio->bi_skip_dm_default_key;
+}
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src)
+{
+	dst->bi_skip_dm_default_key = src->bi_skip_dm_default_key;
+}
+#else /* CONFIG_DM_DEFAULT_KEY */
+static inline void bio_set_skip_dm_default_key(struct bio *bio)
+{
+}
+
+static inline bool bio_should_skip_dm_default_key(const struct bio *bio)
+{
+	return false;
+}
+
+static inline void bio_clone_skip_dm_default_key(struct bio *dst,
+						 const struct bio *src)
+{
+}
+#endif /* !CONFIG_DM_DEFAULT_KEY */
+
+#endif /* __LINUX_BLK_CRYPTO_H */
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
index d688b96..fc422173 100644
--- a/include/linux/blk_types.h
+++ b/include/linux/blk_types.h
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 #include <linux/bvec.h>
 #include <linux/ktime.h>
+#include <linux/android_kabi.h>
 
 struct bio_set;
 struct bio;
@@ -18,6 +19,7 @@
 struct io_context;
 struct cgroup_subsys_state;
 typedef void (bio_end_io_t) (struct bio *);
+struct bio_crypt_ctx;
 
 /*
  * Block error status values.  See block/blk-core:blk_errors for the details.
@@ -173,6 +175,14 @@
 	u64			bi_iocost_cost;
 #endif
 #endif
+
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct bio_crypt_ctx	*bi_crypt_context;
+#if IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+	bool			bi_skip_dm_default_key;
+#endif
+#endif
+
 	union {
 #if defined(CONFIG_BLK_DEV_INTEGRITY)
 		struct bio_integrity_payload *bi_integrity; /* data integrity */
@@ -193,6 +203,9 @@
 
 	struct bio_set		*bi_pool;
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/*
 	 * We can inline a number of vecs at the end of the bio, to avoid
 	 * double allocations for a small number of bio_vecs. This member
@@ -290,6 +303,12 @@
 	REQ_OP_ZONE_RESET_ALL	= 8,
 	/* write the zero filled sector many times */
 	REQ_OP_WRITE_ZEROES	= 9,
+	/* Open a zone */
+	REQ_OP_ZONE_OPEN	= 10,
+	/* Close a zone */
+	REQ_OP_ZONE_CLOSE	= 11,
+	/* Transition a zone to full */
+	REQ_OP_ZONE_FINISH	= 12,
 
 	/* SCSI passthrough using struct scsi_request */
 	REQ_OP_SCSI_IN		= 32,
@@ -417,6 +436,25 @@
 	return (op & REQ_OP_MASK) == REQ_OP_DISCARD;
 }
 
+/*
+ * Check if a bio or request operation is a zone management operation, with
+ * the exception of REQ_OP_ZONE_RESET_ALL which is treated as a special case
+ * due to its different handling in the block layer and device response in
+ * case of command failure.
+ */
+static inline bool op_is_zone_mgmt(enum req_opf op)
+{
+	switch (op & REQ_OP_MASK) {
+	case REQ_OP_ZONE_RESET:
+	case REQ_OP_ZONE_OPEN:
+	case REQ_OP_ZONE_CLOSE:
+	case REQ_OP_ZONE_FINISH:
+		return true;
+	default:
+		return false;
+	}
+}
+
 static inline int op_stat_group(unsigned int op)
 {
 	if (op_is_discard(op))
diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
index d5338b9..82d3a0e 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -27,6 +27,7 @@
 #include <linux/percpu-refcount.h>
 #include <linux/scatterlist.h>
 #include <linux/blkzoned.h>
+#include <linux/android_kabi.h>
 
 struct module;
 struct scsi_ioctl_command;
@@ -43,6 +44,7 @@
 struct rq_qos;
 struct blk_queue_stats;
 struct blk_stat_callback;
+struct blk_keyslot_manager;
 
 #define BLKDEV_MIN_RQ	4
 #define BLKDEV_MAX_RQ	128	/* Default maximum */
@@ -223,6 +225,11 @@
 	unsigned short nr_integrity_segments;
 #endif
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	struct bio_crypt_ctx *crypt_ctx;
+	struct blk_ksm_keyslot *crypt_keyslot;
+#endif
+
 	unsigned short write_hint;
 	unsigned short ioprio;
 
@@ -244,6 +251,8 @@
 	 */
 	rq_end_io_fn *end_io;
 	void *end_io_data;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline bool blk_op_is_scsi(unsigned int op)
@@ -347,36 +356,32 @@
 	unsigned char		discard_misaligned;
 	unsigned char		raid_partial_stripes_expensive;
 	enum blk_zoned_model	zoned;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
+typedef int (*report_zones_cb)(struct blk_zone *zone, unsigned int idx,
+			       void *data);
+
 #ifdef CONFIG_BLK_DEV_ZONED
 
-/*
- * Maximum number of zones to report with a single report zones command.
- */
-#define BLK_ZONED_REPORT_MAX_ZONES	8192U
-
-extern unsigned int blkdev_nr_zones(struct block_device *bdev);
-extern int blkdev_report_zones(struct block_device *bdev,
-			       sector_t sector, struct blk_zone *zones,
-			       unsigned int *nr_zones);
-extern int blkdev_reset_zones(struct block_device *bdev, sector_t sectors,
-			      sector_t nr_sectors, gfp_t gfp_mask);
+#define BLK_ALL_ZONES  ((unsigned int)-1)
+int blkdev_report_zones(struct block_device *bdev, sector_t sector,
+			unsigned int nr_zones, report_zones_cb cb, void *data);
+unsigned int blkdev_nr_zones(struct gendisk *disk);
+extern int blkdev_zone_mgmt(struct block_device *bdev, enum req_opf op,
+			    sector_t sectors, sector_t nr_sectors,
+			    gfp_t gfp_mask);
 extern int blk_revalidate_disk_zones(struct gendisk *disk);
 
 extern int blkdev_report_zones_ioctl(struct block_device *bdev, fmode_t mode,
 				     unsigned int cmd, unsigned long arg);
-extern int blkdev_reset_zones_ioctl(struct block_device *bdev, fmode_t mode,
-				    unsigned int cmd, unsigned long arg);
+extern int blkdev_zone_mgmt_ioctl(struct block_device *bdev, fmode_t mode,
+				  unsigned int cmd, unsigned long arg);
 
 #else /* CONFIG_BLK_DEV_ZONED */
 
-static inline unsigned int blkdev_nr_zones(struct block_device *bdev)
-{
-	return 0;
-}
-
-static inline int blk_revalidate_disk_zones(struct gendisk *disk)
+static inline unsigned int blkdev_nr_zones(struct gendisk *disk)
 {
 	return 0;
 }
@@ -388,9 +393,9 @@
 	return -ENOTTY;
 }
 
-static inline int blkdev_reset_zones_ioctl(struct block_device *bdev,
-					   fmode_t mode, unsigned int cmd,
-					   unsigned long arg)
+static inline int blkdev_zone_mgmt_ioctl(struct block_device *bdev,
+					 fmode_t mode, unsigned int cmd,
+					 unsigned long arg)
 {
 	return -ENOTTY;
 }
@@ -481,6 +486,11 @@
 	unsigned int		dma_pad_mask;
 	unsigned int		dma_alignment;
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+	/* Inline crypto capabilities */
+	struct blk_keyslot_manager *ksm;
+#endif
+
 	unsigned int		rq_timeout;
 	int			poll_nsec;
 
@@ -505,9 +515,9 @@
 	/*
 	 * Zoned block device information for request dispatch control.
 	 * nr_zones is the total number of zones of the device. This is always
-	 * 0 for regular block devices. seq_zones_bitmap is a bitmap of nr_zones
-	 * bits which indicates if a zone is conventional (bit clear) or
-	 * sequential (bit set). seq_zones_wlock is a bitmap of nr_zones
+	 * 0 for regular block devices. conv_zones_bitmap is a bitmap of nr_zones
+	 * bits which indicates if a zone is conventional (bit set) or
+	 * sequential (bit clear). seq_zones_wlock is a bitmap of nr_zones
 	 * bits which indicates if a zone is write locked, that is, if a write
 	 * request targeting the zone was dispatched. All three fields are
 	 * initialized by the low level device driver (e.g. scsi/sd.c).
@@ -520,7 +530,7 @@
 	 * blk_mq_unfreeze_queue().
 	 */
 	unsigned int		nr_zones;
-	unsigned long		*seq_zones_bitmap;
+	unsigned long		*conv_zones_bitmap;
 	unsigned long		*seq_zones_wlock;
 #endif /* CONFIG_BLK_DEV_ZONED */
 
@@ -590,6 +600,11 @@
 
 #define BLK_MAX_WRITE_HINTS	5
 	u64			write_hints[BLK_MAX_WRITE_HINTS];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /* Keep blk_queue_flag_name[] in sync with the definitions below */
@@ -726,9 +741,11 @@
 static inline bool blk_queue_zone_is_seq(struct request_queue *q,
 					 sector_t sector)
 {
-	if (!blk_queue_is_zoned(q) || !q->seq_zones_bitmap)
+	if (!blk_queue_is_zoned(q))
 		return false;
-	return test_bit(blk_queue_zone_no(q, sector), q->seq_zones_bitmap);
+	if (!q->conv_zones_bitmap)
+		return true;
+	return !test_bit(blk_queue_zone_no(q, sector), q->conv_zones_bitmap);
 }
 #else /* CONFIG_BLK_DEV_ZONED */
 static inline unsigned int blk_queue_nr_zones(struct request_queue *q)
@@ -1563,6 +1580,12 @@
 	return blk_get_integrity(bdev->bd_disk);
 }
 
+static inline bool
+blk_integrity_queue_supports_integrity(struct request_queue *q)
+{
+	return q->integrity.profile;
+}
+
 static inline bool blk_integrity_rq(struct request *rq)
 {
 	return rq->cmd_flags & REQ_INTEGRITY;
@@ -1643,6 +1666,11 @@
 {
 	return NULL;
 }
+static inline bool
+blk_integrity_queue_supports_integrity(struct request_queue *q)
+{
+	return false;
+}
 static inline int blk_integrity_compare(struct gendisk *a, struct gendisk *b)
 {
 	return 0;
@@ -1694,6 +1722,25 @@
 
 #endif /* CONFIG_BLK_DEV_INTEGRITY */
 
+#ifdef CONFIG_BLK_INLINE_ENCRYPTION
+
+bool blk_ksm_register(struct blk_keyslot_manager *ksm, struct request_queue *q);
+
+void blk_ksm_unregister(struct request_queue *q);
+
+#else /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+static inline bool blk_ksm_register(struct blk_keyslot_manager *ksm,
+				    struct request_queue *q)
+{
+	return true;
+}
+
+static inline void blk_ksm_unregister(struct request_queue *q) { }
+
+#endif /* CONFIG_BLK_INLINE_ENCRYPTION */
+
+
 struct block_device_operations {
 	int (*open) (struct block_device *, fmode_t);
 	void (*release) (struct gendisk *, fmode_t);
@@ -1710,9 +1757,12 @@
 	/* this callback is with swap_lock and sometimes page table lock held */
 	void (*swap_slot_free_notify) (struct block_device *, unsigned long);
 	int (*report_zones)(struct gendisk *, sector_t sector,
-			    struct blk_zone *zones, unsigned int *nr_zones);
+			unsigned int nr_zones, report_zones_cb cb, void *data);
 	struct module *owner;
 	const struct pr_ops *pr_ops;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 extern int __blkdev_driver_ioctl(struct block_device *, fmode_t, unsigned int,
diff --git a/include/linux/bootconfig.h b/include/linux/bootconfig.h
new file mode 100644
index 0000000..6bdd94c
--- /dev/null
+++ b/include/linux/bootconfig.h
@@ -0,0 +1,283 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_XBC_H
+#define _LINUX_XBC_H
+/*
+ * Extra Boot Config
+ * Copyright (C) 2019 Linaro Ltd.
+ * Author: Masami Hiramatsu <mhiramat@kernel.org>
+ */
+
+#include <linux/kernel.h>
+#include <linux/types.h>
+
+#define BOOTCONFIG_MAGIC	"#BOOTCONFIG\n"
+#define BOOTCONFIG_MAGIC_LEN	12
+#define BOOTCONFIG_ALIGN_SHIFT	2
+#define BOOTCONFIG_ALIGN	(1 << BOOTCONFIG_ALIGN_SHIFT)
+#define BOOTCONFIG_ALIGN_MASK	(BOOTCONFIG_ALIGN - 1)
+
+/**
+ * xbc_calc_checksum() - Calculate checksum of bootconfig
+ * @data: Bootconfig data.
+ * @size: The size of the bootconfig data.
+ *
+ * Calculate the checksum value of the bootconfig data.
+ * The checksum will be used with the BOOTCONFIG_MAGIC and the size for
+ * embedding the bootconfig in the initrd image.
+ */
+static inline __init u32 xbc_calc_checksum(void *data, u32 size)
+{
+	unsigned char *p = data;
+	u32 ret = 0;
+
+	while (size--)
+		ret += *p++;
+
+	return ret;
+}
+
+/* XBC tree node */
+struct xbc_node {
+	u16 next;
+	u16 child;
+	u16 parent;
+	u16 data;
+} __attribute__ ((__packed__));
+
+#define XBC_KEY		0
+#define XBC_VALUE	(1 << 15)
+/* Maximum size of boot config is 32KB - 1 */
+#define XBC_DATA_MAX	(XBC_VALUE - 1)
+
+#define XBC_NODE_MAX	1024
+#define XBC_KEYLEN_MAX	256
+#define XBC_DEPTH_MAX	16
+
+/* Node tree access raw APIs */
+struct xbc_node * __init xbc_root_node(void);
+int __init xbc_node_index(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_parent(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_child(struct xbc_node *node);
+struct xbc_node * __init xbc_node_get_next(struct xbc_node *node);
+const char * __init xbc_node_get_data(struct xbc_node *node);
+
+/**
+ * xbc_node_is_value() - Test the node is a value node
+ * @node: An XBC node.
+ *
+ * Test the @node is a value node and return true if a value node, false if not.
+ */
+static inline __init bool xbc_node_is_value(struct xbc_node *node)
+{
+	return node->data & XBC_VALUE;
+}
+
+/**
+ * xbc_node_is_key() - Test the node is a key node
+ * @node: An XBC node.
+ *
+ * Test the @node is a key node and return true if a key node, false if not.
+ */
+static inline __init bool xbc_node_is_key(struct xbc_node *node)
+{
+	return !xbc_node_is_value(node);
+}
+
+/**
+ * xbc_node_is_array() - Test the node is an arraied value node
+ * @node: An XBC node.
+ *
+ * Test the @node is an arraied value node.
+ */
+static inline __init bool xbc_node_is_array(struct xbc_node *node)
+{
+	return xbc_node_is_value(node) && node->child != 0;
+}
+
+/**
+ * xbc_node_is_leaf() - Test the node is a leaf key node
+ * @node: An XBC node.
+ *
+ * Test the @node is a leaf key node which is a key node and has a value node
+ * or no child. Returns true if it is a leaf node, or false if not.
+ * Note that the leaf node can have subkey nodes in addition to the
+ * value node.
+ */
+static inline __init bool xbc_node_is_leaf(struct xbc_node *node)
+{
+	return xbc_node_is_key(node) &&
+		(!node->child || xbc_node_is_value(xbc_node_get_child(node)));
+}
+
+/* Tree-based key-value access APIs */
+struct xbc_node * __init xbc_node_find_child(struct xbc_node *parent,
+					     const char *key);
+
+const char * __init xbc_node_find_value(struct xbc_node *parent,
+					const char *key,
+					struct xbc_node **vnode);
+
+struct xbc_node * __init xbc_node_find_next_leaf(struct xbc_node *root,
+						 struct xbc_node *leaf);
+
+const char * __init xbc_node_find_next_key_value(struct xbc_node *root,
+						 struct xbc_node **leaf);
+
+/**
+ * xbc_find_value() - Find a value which matches the key
+ * @key: Search key
+ * @vnode: A container pointer of XBC value node.
+ *
+ * Search a value whose key matches @key from whole of XBC tree and return
+ * the value if found. Found value node is stored in *@vnode.
+ * Note that this can return 0-length string and store NULL in *@vnode for
+ * key-only (non-value) entry.
+ */
+static inline const char * __init
+xbc_find_value(const char *key, struct xbc_node **vnode)
+{
+	return xbc_node_find_value(NULL, key, vnode);
+}
+
+/**
+ * xbc_find_node() - Find a node which matches the key
+ * @key: Search key
+ *
+ * Search a (key) node whose key matches @key from whole of XBC tree and
+ * return the node if found. If not found, returns NULL.
+ */
+static inline struct xbc_node * __init xbc_find_node(const char *key)
+{
+	return xbc_node_find_child(NULL, key);
+}
+
+/**
+ * xbc_node_get_subkey() - Return the first subkey node if exists
+ * @node: Parent node
+ *
+ * Return the first subkey node of the @node. If the @node has no child
+ * or only value node, this will return NULL.
+ */
+static inline struct xbc_node * __init xbc_node_get_subkey(struct xbc_node *node)
+{
+	struct xbc_node *child = xbc_node_get_child(node);
+
+	if (child && xbc_node_is_value(child))
+		return xbc_node_get_next(child);
+	else
+		return child;
+}
+
+/**
+ * xbc_array_for_each_value() - Iterate value nodes on an array
+ * @anode: An XBC arraied value node
+ * @value: A value
+ *
+ * Iterate array value nodes and values starts from @anode. This is expected to
+ * be used with xbc_find_value() and xbc_node_find_value(), so that user can
+ * process each array entry node.
+ */
+#define xbc_array_for_each_value(anode, value)				\
+	for (value = xbc_node_get_data(anode); anode != NULL ;		\
+	     anode = xbc_node_get_child(anode),				\
+	     value = anode ? xbc_node_get_data(anode) : NULL)
+
+/**
+ * xbc_node_for_each_child() - Iterate child nodes
+ * @parent: An XBC node.
+ * @child: Iterated XBC node.
+ *
+ * Iterate child nodes of @parent. Each child nodes are stored to @child.
+ * The @child can be mixture of a value node and subkey nodes.
+ */
+#define xbc_node_for_each_child(parent, child)				\
+	for (child = xbc_node_get_child(parent); child != NULL ;	\
+	     child = xbc_node_get_next(child))
+
+/**
+ * xbc_node_for_each_subkey() - Iterate child subkey nodes
+ * @parent: An XBC node.
+ * @child: Iterated XBC node.
+ *
+ * Iterate subkey nodes of @parent. Each child nodes are stored to @child.
+ * The @child is only the subkey node.
+ */
+#define xbc_node_for_each_subkey(parent, child)				\
+	for (child = xbc_node_get_subkey(parent); child != NULL ;	\
+	     child = xbc_node_get_next(child))
+
+/**
+ * xbc_node_for_each_array_value() - Iterate array entries of geven key
+ * @node: An XBC node.
+ * @key: A key string searched under @node
+ * @anode: Iterated XBC node of array entry.
+ * @value: Iterated value of array entry.
+ *
+ * Iterate array entries of given @key under @node. Each array entry node
+ * is stroed to @anode and @value. If the @node doesn't have @key node,
+ * it does nothing.
+ * Note that even if the found key node has only one value (not array)
+ * this executes block once. Hoever, if the found key node has no value
+ * (key-only node), this does nothing. So don't use this for testing the
+ * key-value pair existence.
+ */
+#define xbc_node_for_each_array_value(node, key, anode, value)		\
+	for (value = xbc_node_find_value(node, key, &anode); value != NULL; \
+	     anode = xbc_node_get_child(anode),				\
+	     value = anode ? xbc_node_get_data(anode) : NULL)
+
+/**
+ * xbc_node_for_each_key_value() - Iterate key-value pairs under a node
+ * @node: An XBC node.
+ * @knode: Iterated key node
+ * @value: Iterated value string
+ *
+ * Iterate key-value pairs under @node. Each key node and value string are
+ * stored in @knode and @value respectively.
+ */
+#define xbc_node_for_each_key_value(node, knode, value)			\
+	for (knode = NULL, value = xbc_node_find_next_key_value(node, &knode);\
+	     knode != NULL; value = xbc_node_find_next_key_value(node, &knode))
+
+/**
+ * xbc_for_each_key_value() - Iterate key-value pairs
+ * @knode: Iterated key node
+ * @value: Iterated value string
+ *
+ * Iterate key-value pairs in whole XBC tree. Each key node and value string
+ * are stored in @knode and @value respectively.
+ */
+#define xbc_for_each_key_value(knode, value)				\
+	xbc_node_for_each_key_value(NULL, knode, value)
+
+/* Compose partial key */
+int __init xbc_node_compose_key_after(struct xbc_node *root,
+			struct xbc_node *node, char *buf, size_t size);
+
+/**
+ * xbc_node_compose_key() - Compose full key string of the XBC node
+ * @node: An XBC node.
+ * @buf: A buffer to store the key.
+ * @size: The size of the @buf.
+ *
+ * Compose the full-length key of the @node into @buf. Returns the total
+ * length of the key stored in @buf. Or returns -EINVAL if @node is NULL,
+ * and -ERANGE if the key depth is deeper than max depth.
+ */
+static inline int __init xbc_node_compose_key(struct xbc_node *node,
+					      char *buf, size_t size)
+{
+	return xbc_node_compose_key_after(NULL, node, buf, size);
+}
+
+/* XBC node initializer */
+int __init xbc_init(char *buf, const char **emsg, int *epos);
+
+
+/* XBC cleanup data structures */
+void __init xbc_destroy_all(void);
+
+/* Debug dump functions */
+void __init xbc_debug_dump(void);
+
+#endif
diff --git a/include/linux/bpf.h b/include/linux/bpf.h
index 66590ae..2a0fb48 100644
--- a/include/linux/bpf.h
+++ b/include/linux/bpf.h
@@ -14,6 +14,7 @@
 #include <linux/numa.h>
 #include <linux/wait.h>
 #include <linux/u64_stats_sync.h>
+#include <linux/android_kabi.h>
 
 struct bpf_verifier_env;
 struct perf_event;
@@ -64,6 +65,9 @@
 				     u64 *imm, u32 off);
 	int (*map_direct_value_meta)(const struct bpf_map *map,
 				     u64 imm, u32 *off);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct bpf_map_memory {
@@ -146,6 +150,8 @@
 	int (*map_update_elem)(struct bpf_offloaded_map *map,
 			       void *key, void *value, u64 flags);
 	int (*map_delete_elem)(struct bpf_offloaded_map *map, void *key);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct bpf_offloaded_map {
@@ -322,6 +328,7 @@
 				  const struct bpf_insn *src,
 				  struct bpf_insn *dst,
 				  struct bpf_prog *prog, u32 *target_size);
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct bpf_prog_offload_ops {
@@ -337,6 +344,7 @@
 	int (*prepare)(struct bpf_prog *prog);
 	int (*translate)(struct bpf_prog *prog);
 	void (*destroy)(struct bpf_prog *prog);
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct bpf_prog_offload {
@@ -421,6 +429,7 @@
 		struct work_struct work;
 		struct rcu_head	rcu;
 	};
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct bpf_array {
@@ -1050,6 +1059,7 @@
 extern const struct bpf_func_proto bpf_get_numa_node_id_proto;
 extern const struct bpf_func_proto bpf_tail_call_proto;
 extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
+extern const struct bpf_func_proto bpf_ktime_get_boot_ns_proto;
 extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
 extern const struct bpf_func_proto bpf_get_current_uid_gid_proto;
 extern const struct bpf_func_proto bpf_get_current_comm_proto;
diff --git a/include/linux/bpf_verifier.h b/include/linux/bpf_verifier.h
index ee10a9f..b40acb2 100644
--- a/include/linux/bpf_verifier.h
+++ b/include/linux/bpf_verifier.h
@@ -7,6 +7,7 @@
 #include <linux/bpf.h> /* for enum bpf_reg_type */
 #include <linux/filter.h> /* for MAX_BPF_STACK */
 #include <linux/tnum.h>
+#include <linux/android_kabi.h>
 
 /* Maximum variable offset umax_value permitted when resolving memory accesses.
  * In practice this is far bigger than any realistic pointer offset; this limit
@@ -351,6 +352,8 @@
 	u32 linfo_idx; /* The idx to the main_prog->aux->linfo */
 	u16 stack_depth; /* max. stack depth used by this function */
 	bool has_tail_call;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* single container for all structs
@@ -402,6 +405,9 @@
 	u32 peak_states;
 	/* longest register parentage chain walked for liveness marking */
 	u32 longest_mark_read_walk;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 __printf(2, 0) void bpf_verifier_vlog(struct bpf_verifier_log *log,
diff --git a/include/linux/cfi.h b/include/linux/cfi.h
new file mode 100644
index 0000000..6ef37b3
--- /dev/null
+++ b/include/linux/cfi.h
@@ -0,0 +1,44 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Clang Control Flow Integrity (CFI) support.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+#ifndef _LINUX_CFI_H
+#define _LINUX_CFI_H
+
+#include <linux/stringify.h>
+
+#ifdef CONFIG_CFI_CLANG
+#ifdef CONFIG_MODULES
+
+typedef void (*cfi_check_fn)(uint64_t id, void *ptr, void *diag);
+
+/* Compiler-generated function in each module, and the kernel */
+#define CFI_CHECK_FN		__cfi_check
+#define CFI_CHECK_FN_NAME	__stringify(CFI_CHECK_FN)
+
+extern void CFI_CHECK_FN(uint64_t id, void *ptr, void *diag);
+
+#ifdef CONFIG_CFI_CLANG_SHADOW
+extern void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr);
+
+extern void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr);
+#else
+static inline void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+}
+
+static inline void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+}
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+#endif /* CONFIG_MODULES */
+#endif /* CONFIG_CFI_CLANG */
+
+#endif /* _LINUX_CFI_H */
diff --git a/include/linux/cgroup-defs.h b/include/linux/cgroup-defs.h
index 1ccfa37..22ba342 100644
--- a/include/linux/cgroup-defs.h
+++ b/include/linux/cgroup-defs.h
@@ -105,6 +105,7 @@
 	CFTYPE_NO_PREFIX	= (1 << 3),	/* (DON'T USE FOR NEW FILES) no subsys prefix */
 	CFTYPE_WORLD_WRITABLE	= (1 << 4),	/* (DON'T USE FOR NEW FILES) S_IWUGO */
 	CFTYPE_DEBUG		= (1 << 5),	/* create when cgroup_debug */
+	CFTYPE_PRESSURE		= (1 << 6),	/* only if pressure feature is enabled */
 
 	/* internal flags, do not use outside cgroup core proper */
 	__CFTYPE_ONLY_ON_DFL	= (1 << 16),	/* only on default hierarchy */
diff --git a/include/linux/cgroup.h b/include/linux/cgroup.h
index 20285238..4a368d3 100644
--- a/include/linux/cgroup.h
+++ b/include/linux/cgroup.h
@@ -24,6 +24,7 @@
 #include <linux/user_namespace.h>
 #include <linux/refcount.h>
 #include <linux/kernel_stat.h>
+#include <linux/android_kabi.h>
 
 #include <linux/cgroup-defs.h>
 
@@ -67,6 +68,8 @@
 	struct css_set			*cur_dcset;
 	struct task_struct		*cur_task;
 	struct list_head		iters_node;	/* css_set->task_iters */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern struct cgroup_root cgrp_dfl_root;
@@ -670,6 +673,8 @@
 	return &cgrp->psi;
 }
 
+bool cgroup_psi_enabled(void);
+
 static inline void cgroup_init_kthreadd(void)
 {
 	/*
@@ -735,6 +740,11 @@
 	return NULL;
 }
 
+static inline bool cgroup_psi_enabled(void)
+{
+	return false;
+}
+
 static inline bool task_under_cgroup_hierarchy(struct task_struct *task,
 					       struct cgroup *ancestor)
 {
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index 2fdfe80..a789b23 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -32,6 +32,7 @@
 #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_DONT_HOLD_STATE	BIT(14) /* Don't hold state */
 
 struct clk;
 struct clk_hw;
@@ -199,6 +200,13 @@
  *		directory is provided as an argument.  Called with
  *		prepare_lock held.  Returns 0 on success, -EERROR otherwise.
  *
+ * @pre_rate_change: Optional callback for a clock to fulfill its rate
+ *		change requirements before any rate change has occurred in
+ *		its clock tree. Returns 0 on success, -EERROR otherwise.
+ *
+ * @post_rate_change: Optional callback for a clock to clean up any
+ *		requirements that were needed while the clock and its tree
+ *		was changing states. Returns 0 on success, -EERROR otherwise.
  *
  * The clk_enable/clk_disable and clk_prepare/clk_unprepare pairs allow
  * implementations to split any work between atomic (enable) and sleepable
@@ -245,6 +253,12 @@
 					  struct clk_duty *duty);
 	void		(*init)(struct clk_hw *hw);
 	void		(*debug_init)(struct clk_hw *hw, struct dentry *dentry);
+	int		(*pre_rate_change)(struct clk_hw *hw,
+					   unsigned long rate,
+					   unsigned long new_rate);
+	int		(*post_rate_change)(struct clk_hw *hw,
+					    unsigned long old_rate,
+					    unsigned long rate);
 };
 
 /**
@@ -802,6 +816,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/clocksource.h b/include/linux/clocksource.h
index b21db53..a781edc 100644
--- a/include/linux/clocksource.h
+++ b/include/linux/clocksource.h
@@ -27,6 +27,8 @@
 #include <asm/clocksource.h>
 #endif
 
+#include <vdso/clocksource.h>
+
 /**
  * struct clocksource - hardware abstraction for a free running counter
  *	Provides mostly state-free accessors to the underlying hardware.
diff --git a/include/linux/compat.h b/include/linux/compat.h
index c4c389c..f5420bb 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -965,4 +965,22 @@
 
 #endif /* CONFIG_COMPAT */
 
+/*
+ * A pointer passed in from user mode. This should not
+ * be used for syscall parameters, just declare them
+ * as pointers because the syscall entry code will have
+ * appropriately converted them already.
+ */
+#ifndef compat_ptr
+static inline void __user *compat_ptr(compat_uptr_t uptr)
+{
+	return (void __user *)(unsigned long)uptr;
+}
+#endif
+
+static inline compat_uptr_t ptr_to_compat(void __user *uptr)
+{
+	return (u32)(unsigned long)uptr;
+}
+
 #endif /* _LINUX_COMPAT_H */
diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h
index 0e06df2..ed99a09 100644
--- a/include/linux/compiler-clang.h
+++ b/include/linux/compiler-clang.h
@@ -36,3 +36,19 @@
     __has_builtin(__builtin_sub_overflow)
 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
 #endif
+
+#if __has_feature(shadow_call_stack)
+# define __noscs	__attribute__((__no_sanitize__("shadow-call-stack")))
+#else
+# define __noscs
+#endif
+
+#ifdef CONFIG_LTO_CLANG
+#ifdef CONFIG_FTRACE_MCOUNT_RECORD
+#define __norecordmcount \
+	__attribute__((__section__(".text..ftrace")))
+#endif
+
+
+#define __nocfi		__attribute__((__no_sanitize__("cfi")))
+#endif
diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h
index b94d08d..884d84a 100644
--- a/include/linux/compiler_types.h
+++ b/include/linux/compiler_types.h
@@ -104,7 +104,7 @@
 	unsigned long			constant;
 };
 
-#ifdef CONFIG_ENABLE_MUST_CHECK
+#if defined(CONFIG_ENABLE_MUST_CHECK) && !defined(__GENKSYMS__)
 #define __must_check		__attribute__((__warn_unused_result__))
 #else
 #define __must_check
@@ -206,6 +206,18 @@
 # define randomized_struct_fields_end
 #endif
 
+#ifndef __noscs
+# define __noscs
+#endif
+
+#ifndef __norecordmcount
+# define __norecordmcount
+#endif
+
+#ifndef __nocfi
+# define __nocfi
+#endif
+
 #ifndef asm_volatile_goto
 #define asm_volatile_goto(x...) asm goto(x)
 #endif
diff --git a/include/linux/console.h b/include/linux/console.h
index d1d03c9..d09951d 100644
--- a/include/linux/console.h
+++ b/include/linux/console.h
@@ -153,8 +153,6 @@
 	short	flags;
 	short	index;
 	int	cflag;
-	uint	ispeed;
-	uint	ospeed;
 	void	*data;
 	struct	 console *next;
 };
diff --git a/include/linux/const.h b/include/linux/const.h
index 7b55a55..81b8aae 100644
--- a/include/linux/const.h
+++ b/include/linux/const.h
@@ -1,9 +1,6 @@
 #ifndef _LINUX_CONST_H
 #define _LINUX_CONST_H
 
-#include <uapi/linux/const.h>
-
-#define UL(x)		(_UL(x))
-#define ULL(x)		(_ULL(x))
+#include <vdso/const.h>
 
 #endif /* _LINUX_CONST_H */
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 018dce8..486c1dd 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -201,9 +201,6 @@
 	return cpumask_weight(policy->cpus) > 1;
 }
 
-/* /sys/devices/system/cpu/cpufreq: entry point for global variables */
-extern struct kobject *cpufreq_global_kobject;
-
 #ifdef CONFIG_CPU_FREQ
 unsigned int cpufreq_get(unsigned int cpu);
 unsigned int cpufreq_quick_get(unsigned int cpu);
@@ -990,6 +987,8 @@
 
 extern void arch_set_freq_scale(struct cpumask *cpus, unsigned long cur_freq,
 				unsigned long max_freq);
+extern void arch_set_max_freq_scale(struct cpumask *cpus,
+				    unsigned long policy_max_freq);
 
 /* the following are really really optional */
 extern struct freq_attr cpufreq_freq_attr_scaling_available_freqs;
diff --git a/include/linux/cpufreq_times.h b/include/linux/cpufreq_times.h
new file mode 100644
index 0000000..38272a5
--- /dev/null
+++ b/include/linux/cpufreq_times.h
@@ -0,0 +1,42 @@
+/* drivers/cpufreq/cpufreq_times.c
+ *
+ * Copyright (C) 2018 Google, Inc.
+ *
+ * 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.
+ *
+ */
+
+#ifndef _LINUX_CPUFREQ_TIMES_H
+#define _LINUX_CPUFREQ_TIMES_H
+
+#include <linux/cpufreq.h>
+#include <linux/pid.h>
+
+#ifdef CONFIG_CPU_FREQ_TIMES
+void cpufreq_task_times_init(struct task_struct *p);
+void cpufreq_task_times_alloc(struct task_struct *p);
+void cpufreq_task_times_exit(struct task_struct *p);
+int proc_time_in_state_show(struct seq_file *m, struct pid_namespace *ns,
+			    struct pid *pid, struct task_struct *p);
+void cpufreq_acct_update_power(struct task_struct *p, u64 cputime);
+void cpufreq_times_create_policy(struct cpufreq_policy *policy);
+void cpufreq_times_record_transition(struct cpufreq_policy *policy,
+                                     unsigned int new_freq);
+#else
+static inline void cpufreq_task_times_init(struct task_struct *p) {}
+static inline void cpufreq_task_times_alloc(struct task_struct *p) {}
+static inline void cpufreq_task_times_exit(struct task_struct *p) {}
+static inline void cpufreq_acct_update_power(struct task_struct *p,
+					     u64 cputime) {}
+static inline void cpufreq_times_create_policy(struct cpufreq_policy *policy) {}
+static inline void cpufreq_times_record_transition(
+	struct cpufreq_policy *policy, unsigned int new_freq) {}
+#endif /* CONFIG_CPU_FREQ_TIMES */
+#endif /* _LINUX_CPUFREQ_TIMES_H */
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index bd1f235..97955ca 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -119,7 +119,6 @@
 	CPUHP_AP_ARM_L2X0_STARTING,
 	CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING,
 	CPUHP_AP_ARM_ARCH_TIMER_STARTING,
-	CPUHP_AP_OMAP_DM_TIMER_STARTING,
 	CPUHP_AP_ARM_GLOBAL_TIMER_STARTING,
 	CPUHP_AP_JCORE_TIMER_STARTING,
 	CPUHP_AP_ARM_TWD_STARTING,
@@ -184,6 +183,10 @@
 	CPUHP_AP_X86_HPET_ONLINE,
 	CPUHP_AP_X86_KVM_CLK_ONLINE,
 	CPUHP_AP_ACTIVE,
+	CPUHP_ANDROID_RESERVED_1,
+	CPUHP_ANDROID_RESERVED_2,
+	CPUHP_ANDROID_RESERVED_3,
+	CPUHP_ANDROID_RESERVED_4,
 	CPUHP_ONLINE,
 };
 
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index 4b6b5be..3f3753b 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -14,6 +14,7 @@
 #include <linux/percpu.h>
 #include <linux/list.h>
 #include <linux/hrtimer.h>
+#include <linux/android_kabi.h>
 
 #define CPUIDLE_STATE_MAX	10
 #define CPUIDLE_NAME_LEN	16
@@ -61,10 +62,13 @@
 	 * CPUs execute ->enter_s2idle with the local tick or entire timekeeping
 	 * suspended, so it must not re-enable interrupts at any point (even
 	 * temporarily) or attempt to change states of clock event devices.
+	 *
+	 * This callback may point to the same function as ->enter if all of
+	 * the above requirements are met by it.
 	 */
-	void (*enter_s2idle) (struct cpuidle_device *dev,
-			      struct cpuidle_driver *drv,
-			      int index);
+	int (*enter_s2idle)(struct cpuidle_device *dev,
+			    struct cpuidle_driver *drv,
+			    int index);
 };
 
 /* Idle State Flags */
@@ -98,6 +102,8 @@
 	cpumask_t		coupled_cpus;
 	struct cpuidle_coupled	*coupled;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices);
@@ -124,6 +130,8 @@
 
 	/* preferred governor to switch at register time */
 	const char		*governor;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_CPU_IDLE
diff --git a/include/linux/cpuset.h b/include/linux/cpuset.h
index 04c20de66..7f1478c 100644
--- a/include/linux/cpuset.h
+++ b/include/linux/cpuset.h
@@ -55,8 +55,6 @@
 extern void cpuset_force_rebuild(void);
 extern void cpuset_update_active_cpus(void);
 extern void cpuset_wait_for_hotplug(void);
-extern void cpuset_read_lock(void);
-extern void cpuset_read_unlock(void);
 extern void cpuset_cpus_allowed(struct task_struct *p, struct cpumask *mask);
 extern void cpuset_cpus_allowed_fallback(struct task_struct *p);
 extern nodemask_t cpuset_mems_allowed(struct task_struct *p);
@@ -178,9 +176,6 @@
 
 static inline void cpuset_wait_for_hotplug(void) { }
 
-static inline void cpuset_read_lock(void) { }
-static inline void cpuset_read_unlock(void) { }
-
 static inline void cpuset_cpus_allowed(struct task_struct *p,
 				       struct cpumask *mask)
 {
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index 10090f1..f2feba2 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -13,6 +13,7 @@
 #include <linux/lockref.h>
 #include <linux/stringhash.h>
 #include <linux/wait.h>
+#include <linux/android_kabi.h>
 
 struct path;
 struct vfsmount;
@@ -118,6 +119,9 @@
 		struct hlist_bl_node d_in_lookup_hash;	/* only for in-lookup ones */
 	 	struct rcu_head d_rcu;
 	} d_u;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 /*
@@ -147,6 +151,12 @@
 	struct vfsmount *(*d_automount)(struct path *);
 	int (*d_manage)(const struct path *, bool);
 	struct dentry *(*d_real)(struct dentry *, const struct inode *);
+	void (*d_canonical_path)(const struct path *, struct path *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned;
 
 /*
@@ -211,7 +221,7 @@
 
 #define DCACHE_MAY_FREE			0x00800000
 #define DCACHE_FALLTHRU			0x01000000 /* Fall through to lower layer */
-#define DCACHE_ENCRYPTED_NAME		0x02000000 /* Encrypted name (dir key was unavailable) */
+#define DCACHE_NOKEY_NAME		0x02000000 /* Encrypted name encoded without key */
 #define DCACHE_OP_REAL			0x04000000
 
 #define DCACHE_PAR_LOOKUP		0x10000000 /* being looked up (with parent locked shared) */
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index a53d7d2..a3a9eaf 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -13,10 +13,12 @@
 #include <linux/dm-ioctl.h>
 #include <linux/math64.h>
 #include <linux/ratelimit.h>
+#include <linux/android_kabi.h>
 
 struct dm_dev;
 struct dm_target;
 struct dm_table;
+struct dm_report_zones_args;
 struct mapped_device;
 struct bio_vec;
 
@@ -93,9 +95,9 @@
 
 typedef int (*dm_prepare_ioctl_fn) (struct dm_target *ti, struct block_device **bdev);
 
-typedef int (*dm_report_zones_fn) (struct dm_target *ti, sector_t sector,
-				   struct blk_zone *zones,
-				   unsigned int *nr_zones);
+typedef int (*dm_report_zones_fn) (struct dm_target *ti,
+				   struct dm_report_zones_args *args,
+				   unsigned int nr_zones);
 
 /*
  * These iteration functions are typically used to check (and combine)
@@ -195,6 +197,9 @@
 	dm_dax_copy_iter_fn dax_copy_from_iter;
 	dm_dax_copy_iter_fn dax_copy_to_iter;
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/* For internal device-mapper use. */
 	struct list_head list;
 };
@@ -248,6 +253,12 @@
 #define DM_TARGET_ZONED_HM		0x00000040
 #define dm_target_supports_zoned_hm(type) ((type)->features & DM_TARGET_ZONED_HM)
 
+/*
+ * A target supports passing through inline crypto support.
+ */
+#define DM_TARGET_PASSES_CRYPTO		0x00000100
+#define dm_target_passes_crypto(type) ((type)->features & DM_TARGET_PASSES_CRYPTO)
+
 struct dm_target {
 	struct dm_table *table;
 	struct target_type *type;
@@ -321,6 +332,9 @@
 	 * Set if we need to limit the number of in-flight bios when swapping.
 	 */
 	bool limit_swap_bios:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* Each target can link one of these into the table */
@@ -428,10 +442,23 @@
 int dm_post_suspending(struct dm_target *ti);
 int dm_noflush_suspending(struct dm_target *ti);
 void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors);
-void dm_remap_zone_report(struct dm_target *ti, sector_t start,
-			  struct blk_zone *zones, unsigned int *nr_zones);
 union map_info *dm_get_rq_mapinfo(struct request *rq);
 
+#ifdef CONFIG_BLK_DEV_ZONED
+struct dm_report_zones_args {
+	struct dm_target *tgt;
+	sector_t next_sector;
+
+	void *orig_data;
+	report_zones_cb orig_cb;
+	unsigned int zone_idx;
+
+	/* must be filled by ->report_zones before calling dm_report_zones_cb */
+	sector_t start;
+};
+int dm_report_zones_cb(struct blk_zone *zone, unsigned int idx, void *data);
+#endif /* CONFIG_BLK_DEV_ZONED */
+
 /*
  * Device mapper functions to parse and create devices specified by the
  * parameter "dm-mod.create="
@@ -526,6 +553,11 @@
 			       struct dm_table *t);
 
 /*
+ * Table keyslot manager functions
+ */
+void dm_destroy_keyslot_manager(struct blk_keyslot_manager *ksm);
+
+/*
  * A wrapper around vmalloc.
  */
 void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
diff --git a/include/linux/device.h b/include/linux/device.h
index 3414b5a..f303561 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -26,6 +26,7 @@
 #include <linux/uidgid.h>
 #include <linux/gfp.h>
 #include <linux/overflow.h>
+#include <linux/android_kabi.h>
 #include <asm/device.h>
 
 struct device;
@@ -80,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.
  *
@@ -123,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);
 
@@ -144,6 +153,11 @@
 	struct lock_class_key lock_key;
 
 	bool need_parent_lock;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern int __must_check bus_register(struct bus_type *bus);
@@ -340,6 +354,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.
@@ -379,6 +400,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);
@@ -390,6 +412,11 @@
 	void (*coredump) (struct device *dev);
 
 	struct driver_private *p;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 
@@ -594,6 +621,11 @@
 	const struct dev_pm_ops *pm;
 
 	struct subsys_private *p;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct class_dev_iter {
@@ -1080,6 +1112,7 @@
  * AUTOREMOVE_SUPPLIER: Remove the link automatically on supplier driver unbind.
  * AUTOPROBE_CONSUMER: Probe consumer driver automatically after supplier binds.
  * MANAGED: The core tracks presence of supplier/consumer drivers (internal).
+ * SYNC_STATE_ONLY: Link only affects sync_state() behavior.
  */
 #define DL_FLAG_STATELESS		BIT(0)
 #define DL_FLAG_AUTOREMOVE_CONSUMER	BIT(1)
@@ -1088,34 +1121,7 @@
 #define DL_FLAG_AUTOREMOVE_SUPPLIER	BIT(4)
 #define DL_FLAG_AUTOPROBE_CONSUMER	BIT(5)
 #define DL_FLAG_MANAGED			BIT(6)
-
-/**
- * struct device_link - Device link representation.
- * @supplier: The device on the supplier end of the link.
- * @s_node: Hook to the supplier device's list of links to consumers.
- * @consumer: The device on the consumer end of the link.
- * @c_node: Hook to the consumer device's list of links to suppliers.
- * @status: The state of the link (with respect to the presence of drivers).
- * @flags: Link flags.
- * @rpm_active: Whether or not the consumer device is runtime-PM-active.
- * @kref: Count repeated addition of the same link.
- * @rcu_head: An RCU head to use for deferred execution of SRCU callbacks.
- * @supplier_preactivated: Supplier has been made active before consumer probe.
- */
-struct device_link {
-	struct device *supplier;
-	struct list_head s_node;
-	struct device *consumer;
-	struct list_head c_node;
-	enum device_link_state status;
-	u32 flags;
-	refcount_t rpm_active;
-	struct kref kref;
-#ifdef CONFIG_SRCU
-	struct rcu_head rcu_head;
-#endif
-	bool supplier_preactivated; /* Owned by consumer probe. */
-};
+#define DL_FLAG_SYNC_STATE_ONLY		BIT(7)
 
 /**
  * enum dl_dev_state - Device driver presence tracking information.
@@ -1135,12 +1141,25 @@
  * 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_hook: Hook to global list of devices that have deferred sync_state or
+ *		deferred fw_devlink.
+ * @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_hook;
+	bool need_for_probe;
 	enum dl_dev_state status;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -1215,6 +1234,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.
  * @dma_coherent: this particular device is dma coherent, even if the
  *		architecture supports non-coherent devices.
  *
@@ -1260,7 +1282,6 @@
 	struct dev_pin_info	*pins;
 #endif
 #ifdef CONFIG_GENERIC_MSI_IRQ
-	raw_spinlock_t		msi_lock;
 	struct list_head	msi_list;
 #endif
 
@@ -1312,11 +1333,57 @@
 	bool			offline_disabled:1;
 	bool			offline:1;
 	bool			of_node_reused:1;
+	bool			state_synced:1;
 #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU) || \
     defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_CPU_ALL)
 	bool			dma_coherent:1;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+};
+
+/**
+ * struct device_link - Device link representation.
+ * @supplier: The device on the supplier end of the link.
+ * @s_node: Hook to the supplier device's list of links to consumers.
+ * @consumer: The device on the consumer end of the link.
+ * @c_node: Hook to the consumer device's list of links to suppliers.
+ * @link_dev: device used to expose link details in sysfs
+ * @status: The state of the link (with respect to the presence of drivers).
+ * @flags: Link flags.
+ * @rpm_active: Whether or not the consumer device is runtime-PM-active.
+ * @kref: Count repeated addition of the same link.
+ * @rm_work: Work structure used for removing the link.
+ * @supplier_preactivated: Supplier has been made active before consumer probe.
+ */
+struct device_link {
+	struct device *supplier;
+	struct list_head s_node;
+	struct device *consumer;
+	struct list_head c_node;
+	struct device link_dev;
+	enum device_link_state status;
+	u32 flags;
+	refcount_t rpm_active;
+	struct kref kref;
+#ifdef CONFIG_SRCU
+	/* Not currently used, here for potential abi issues in the future */
+	struct rcu_head rcu_head;
+#endif
+	struct work_struct rm_work;
+	bool supplier_preactivated; /* Owned by consumer probe. */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct device *kobj_to_dev(struct kobject *kobj)
@@ -1490,6 +1557,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);
 
 /*
@@ -1654,6 +1732,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
@@ -1747,7 +1827,8 @@
 #define dev_info(dev, fmt, ...)						\
 	_dev_info(dev, dev_fmt(fmt), ##__VA_ARGS__)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define dev_dbg(dev, fmt, ...)						\
 	dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
 #elif defined(DEBUG)
@@ -1819,7 +1900,8 @@
 	dev_level_ratelimited(dev_notice, dev, fmt, ##__VA_ARGS__)
 #define dev_info_ratelimited(dev, fmt, ...)				\
 	dev_level_ratelimited(dev_info, dev, fmt, ##__VA_ARGS__)
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define dev_dbg_ratelimited(dev, fmt, ...)				\
 do {									\
diff --git a/include/linux/dma-buf.h b/include/linux/dma-buf.h
index 12eac42..36db0870 100644
--- a/include/linux/dma-buf.h
+++ b/include/linux/dma-buf.h
@@ -21,6 +21,7 @@
 #include <linux/fs.h>
 #include <linux/dma-fence.h>
 #include <linux/wait.h>
+#include <linux/android_kabi.h>
 
 struct device;
 struct dma_buf;
@@ -179,6 +180,41 @@
 	int (*begin_cpu_access)(struct dma_buf *, enum dma_data_direction);
 
 	/**
+	 * @begin_cpu_access_partial:
+	 *
+	 * This is called from dma_buf_begin_cpu_access_partial() and allows the
+	 * exporter to ensure that the memory specified in the range is
+	 * available for cpu access - the exporter might need to allocate or
+	 * swap-in and pin the backing storage.
+	 * The exporter also needs to ensure that cpu access is
+	 * coherent for the access direction. The direction can be used by the
+	 * exporter to optimize the cache flushing, i.e. access with a different
+	 * direction (read instead of write) might return stale or even bogus
+	 * data (e.g. when the exporter needs to copy the data to temporary
+	 * storage).
+	 *
+	 * This callback is optional.
+	 *
+	 * FIXME: This is both called through the DMA_BUF_IOCTL_SYNC command
+	 * from userspace (where storage shouldn't be pinned to avoid handing
+	 * de-factor mlock rights to userspace) and for the kernel-internal
+	 * users of the various kmap interfaces, where the backing storage must
+	 * be pinned to guarantee that the atomic kmap calls can succeed. Since
+	 * there's no in-kernel users of the kmap interfaces yet this isn't a
+	 * real problem.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. This can for
+	 * example fail when the backing storage can't be allocated. Can also
+	 * return -ERESTARTSYS or -EINTR when the call has been interrupted and
+	 * needs to be restarted.
+	 */
+	int (*begin_cpu_access_partial)(struct dma_buf *dmabuf,
+					enum dma_data_direction,
+					unsigned int offset, unsigned int len);
+
+	/**
 	 * @end_cpu_access:
 	 *
 	 * This is called from dma_buf_end_cpu_access() when the importer is
@@ -198,6 +234,28 @@
 	int (*end_cpu_access)(struct dma_buf *, enum dma_data_direction);
 
 	/**
+	 * @end_cpu_access_partial:
+	 *
+	 * This is called from dma_buf_end_cpu_access_partial() when the
+	 * importer is done accessing the CPU. The exporter can use to limit
+	 * cache flushing to only the range specefied and to unpin any
+	 * resources pinned in @begin_cpu_access_umapped.
+	 * The result of any dma_buf kmap calls after end_cpu_access_partial is
+	 * undefined.
+	 *
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. Can return
+	 * -ERESTARTSYS or -EINTR when the call has been interrupted and needs
+	 * to be restarted.
+	 */
+	int (*end_cpu_access_partial)(struct dma_buf *dmabuf,
+				      enum dma_data_direction,
+				      unsigned int offset, unsigned int len);
+
+	/**
 	 * @mmap:
 	 *
 	 * This callback is used by the dma_buf_mmap() function
@@ -261,6 +319,38 @@
 
 	void *(*vmap)(struct dma_buf *);
 	void (*vunmap)(struct dma_buf *, void *vaddr);
+
+	/**
+	 * @get_uuid
+	 *
+	 * This is called by dma_buf_get_uuid to get the UUID which identifies
+	 * the buffer to virtio devices.
+	 *
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. On success uuid
+	 * will be populated with the buffer's UUID.
+	 */
+	int (*get_uuid)(struct dma_buf *dmabuf, uuid_t *uuid);
+
+	/**
+	 * @get_flags:
+	 *
+	 * This is called by dma_buf_get_flags and is used to get the buffer's
+	 * flags.
+	 * This callback is optional.
+	 *
+	 * Returns:
+	 *
+	 * 0 on success or a negative error code on failure. On success flags
+	 * will be populated with the buffer's flags.
+	 */
+	int (*get_flags)(struct dma_buf *dmabuf, unsigned long *flags);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -283,6 +373,7 @@
  * @poll: for userspace poll support
  * @cb_excl: for userspace poll support
  * @cb_shared: for userspace poll support
+ * @sysfs_entry: for exposing information about this buffer in sysfs.
  *
  * This represents a shared buffer, created by calling dma_buf_export(). The
  * userspace representation is a normal file descriptor, which can be created by
@@ -318,6 +409,16 @@
 
 		__poll_t active;
 	} cb_excl, cb_shared;
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+	/* for sysfs stats */
+	struct dma_buf_sysfs_entry {
+		struct kobject kobj;
+		struct dma_buf *dmabuf;
+	} *sysfs_entry;
+#endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -328,6 +429,8 @@
  * @sgt: cached mapping.
  * @dir: direction of cached mapping.
  * @priv: exporter specific attachment data.
+ * @dma_map_attrs: DMA attributes to be used when the exporter maps the buffer
+ * through dma_buf_map_attachment.
  *
  * This structure holds the attachment information between the dma_buf buffer
  * and its user device(s). The list contains one attachment struct per device
@@ -345,6 +448,17 @@
 	struct sg_table *sgt;
 	enum dma_data_direction dir;
 	void *priv;
+	unsigned long dma_map_attrs;
+#ifdef CONFIG_DMABUF_SYSFS_STATS
+	/* for sysfs stats */
+	struct dma_buf_attach_sysfs_entry {
+		struct kobject kobj;
+		unsigned int map_counter;
+	} *sysfs_entry;
+#endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -368,6 +482,9 @@
 	int flags;
 	struct dma_resv *resv;
 	void *priv;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -412,8 +529,14 @@
 				enum dma_data_direction);
 int dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
 			     enum dma_data_direction dir);
+int dma_buf_begin_cpu_access_partial(struct dma_buf *dma_buf,
+				     enum dma_data_direction dir,
+				     unsigned int offset, unsigned int len);
 int dma_buf_end_cpu_access(struct dma_buf *dma_buf,
 			   enum dma_data_direction dir);
+int dma_buf_end_cpu_access_partial(struct dma_buf *dma_buf,
+				     enum dma_data_direction dir,
+				     unsigned int offset, unsigned int len);
 void *dma_buf_kmap(struct dma_buf *, unsigned long);
 void dma_buf_kunmap(struct dma_buf *, unsigned long, void *);
 
@@ -421,4 +544,7 @@
 		 unsigned long);
 void *dma_buf_vmap(struct dma_buf *);
 void dma_buf_vunmap(struct dma_buf *, void *vaddr);
+int dma_buf_get_flags(struct dma_buf *dmabuf, unsigned long *flags);
+int dma_buf_get_uuid(struct dma_buf *dmabuf, uuid_t *uuid);
+
 #endif /* __DMA_BUF_H__ */
diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h
new file mode 100644
index 0000000..47ffce6
--- /dev/null
+++ b/include/linux/dma-heap.h
@@ -0,0 +1,122 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * DMABUF Heaps Allocation Infrastructure
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+
+#ifndef _DMA_HEAPS_H
+#define _DMA_HEAPS_H
+
+#include <linux/cdev.h>
+#include <linux/types.h>
+
+struct dma_heap;
+
+/**
+ * struct dma_heap_ops - ops to operate on a given heap
+ * @allocate:		allocate dmabuf and return struct dma_buf ptr
+ *
+ * allocate returns dmabuf on success, ERR_PTR(-errno) on error.
+ */
+struct dma_heap_ops {
+	struct dma_buf *(*allocate)(struct dma_heap *heap,
+			unsigned long len,
+			unsigned long fd_flags,
+			unsigned long heap_flags);
+};
+
+/**
+ * struct dma_heap_export_info - information needed to export a new dmabuf heap
+ * @name:	used for debugging/device-node name
+ * @ops:	ops struct for this heap
+ * @priv:	heap exporter private data
+ *
+ * Information needed to export a new dmabuf heap.
+ */
+struct dma_heap_export_info {
+	const char *name;
+	const struct dma_heap_ops *ops;
+	void *priv;
+};
+
+/**
+ * dma_heap_get_drvdata() - get per-heap driver data
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The per-heap data for the heap.
+ */
+void *dma_heap_get_drvdata(struct dma_heap *heap);
+
+/**
+ * dma_heap_get_dev() - get device struct for the heap
+ * @heap: DMA-Heap to retrieve device struct from
+ *
+ * Returns:
+ * The device struct for the heap.
+ */
+struct device *dma_heap_get_dev(struct dma_heap *heap);
+
+/**
+ * dma_heap_get_name() - get heap name
+ * @heap: DMA-Heap to retrieve private data for
+ *
+ * Returns:
+ * The char* for the heap name.
+ */
+const char *dma_heap_get_name(struct dma_heap *heap);
+
+/**
+ * dma_heap_add - adds a heap to dmabuf heaps
+ * @exp_info:		information needed to register this heap
+ */
+struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info);
+
+/**
+ * dma_heap_put - drops a reference to a dmabuf heaps, potentially freeing it
+ * @heap:		heap pointer
+ */
+void dma_heap_put(struct dma_heap *heap);
+
+/**
+ * dma_heap_find - Returns the registered dma_heap with the specified name
+ * @name: Name of the heap to find
+ *
+ * NOTE: dma_heaps returned from this function MUST be released
+ * using dma_heap_put() when the user is done.
+ */
+struct dma_heap *dma_heap_find(const char *name);
+
+/**
+ * dma_heap_buffer_alloc - Allocate dma-buf from a dma_heap
+ * @heap:	dma_heap to allocate from
+ * @len:	size to allocate
+ * @fd_flags:	flags to set on returned dma-buf fd
+ * @heap_flags:	flags to pass to the dma heap
+ *
+ * This is for internal dma-buf allocations only.
+ */
+struct dma_buf *dma_heap_buffer_alloc(struct dma_heap *heap, size_t len,
+				      unsigned int fd_flags,
+				      unsigned int heap_flags);
+
+/** dma_heap_buffer_free - Free dma_buf allocated by dma_heap_buffer_alloc
+ * @dma_buf:	dma_buf to free
+ *
+ * This is really only a simple wrapper to dma_buf_put()
+ */
+void dma_heap_buffer_free(struct dma_buf *);
+
+/**
+ * dma_heap_bufferfd_alloc - Allocate dma-buf fd from a dma_heap
+ * @heap:	dma_heap to allocate from
+ * @len:	size to allocate
+ * @fd_flags:	flags to set on returned dma-buf fd
+ * @heap_flags:	flags to pass to the dma heap
+ */
+int dma_heap_bufferfd_alloc(struct dma_heap *heap, size_t len,
+			    unsigned int fd_flags,
+			    unsigned int heap_flags);
+#endif /* _DMA_HEAPS_H */
diff --git a/include/linux/dma-iommu.h b/include/linux/dma-iommu.h
index 2112f21..f51561ed 100644
--- a/include/linux/dma-iommu.h
+++ b/include/linux/dma-iommu.h
@@ -37,6 +37,11 @@
 
 void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list);
 
+int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+			   u64 size);
+
+int iommu_dma_enable_best_fit_algo(struct device *dev);
+
 #else /* CONFIG_IOMMU_DMA */
 
 struct iommu_domain;
@@ -78,5 +83,16 @@
 {
 }
 
+static inline int iommu_dma_reserve_iova(struct device *dev, dma_addr_t base,
+					 u64 size)
+{
+	return -ENODEV;
+}
+
+static inline int iommu_dma_enable_best_fit_algo(struct device *dev)
+{
+	return -ENODEV;
+}
+
 #endif	/* CONFIG_IOMMU_DMA */
 #endif	/* __DMA_IOMMU_H */
diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 4d450672..6e119c3 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -11,6 +11,7 @@
 #include <linux/scatterlist.h>
 #include <linux/bug.h>
 #include <linux/mem_encrypt.h>
+#include <linux/android_kabi.h>
 
 /**
  * List of possible attributes associated with a DMA mapping. The semantics
@@ -132,6 +133,11 @@
 	u64 (*get_required_mask)(struct device *dev);
 	size_t (*max_mapping_size)(struct device *dev);
 	unsigned long (*get_merge_boundary)(struct device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define DMA_MAPPING_ERROR		(~(dma_addr_t)0)
@@ -612,6 +618,86 @@
 	return dma_sync_single_for_device(dev, addr + offset, size, dir);
 }
 
+/**
+ * dma_map_sgtable - Map the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the map operation
+ *
+ * Maps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After success the
+ * ownership for the buffer is transferred to the DMA domain.  One has to
+ * call dma_sync_sgtable_for_cpu() or dma_unmap_sgtable() to move the
+ * ownership of the buffer back to the CPU domain before touching the
+ * buffer by the CPU.
+ *
+ * Returns 0 on success or -EINVAL on error during mapping the buffer.
+ */
+static inline int dma_map_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	int nents;
+
+	nents = dma_map_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+	if (nents <= 0)
+		return -EINVAL;
+	sgt->nents = nents;
+	return 0;
+}
+
+/**
+ * dma_unmap_sgtable - Unmap the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ * @attrs:	Optional DMA attributes for the unmap operation
+ *
+ * Unmaps a buffer described by a scatterlist stored in the given sg_table
+ * object for the @dir DMA operation by the @dev device. After this function
+ * the ownership of the buffer is transferred back to the CPU domain.
+ */
+static inline void dma_unmap_sgtable(struct device *dev, struct sg_table *sgt,
+		enum dma_data_direction dir, unsigned long attrs)
+{
+	dma_unmap_sg_attrs(dev, sgt->sgl, sgt->orig_nents, dir, attrs);
+}
+
+/**
+ * dma_sync_sgtable_for_cpu - Synchronize the given buffer for CPU access
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the CPU domain, so it is safe to perform any access to it
+ * by the CPU. Before doing any further DMA operations, one has to transfer
+ * the ownership of the buffer back to the DMA domain by calling the
+ * dma_sync_sgtable_for_device().
+ */
+static inline void dma_sync_sgtable_for_cpu(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_cpu(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
+/**
+ * dma_sync_sgtable_for_device - Synchronize the given buffer for DMA
+ * @dev:	The device for which to perform the DMA operation
+ * @sgt:	The sg_table object describing the buffer
+ * @dir:	DMA direction
+ *
+ * Performs the needed cache synchronization and moves the ownership of the
+ * buffer back to the DMA domain, so it is safe to perform the DMA operation.
+ * Once finished, one has to call dma_sync_sgtable_for_cpu() or
+ * dma_unmap_sgtable().
+ */
+static inline void dma_sync_sgtable_for_device(struct device *dev,
+		struct sg_table *sgt, enum dma_data_direction dir)
+{
+	dma_sync_sg_for_device(dev, sgt->sgl, sgt->orig_nents, dir);
+}
+
 #define dma_map_single(d, a, s, r) dma_map_single_attrs(d, a, s, r, 0)
 #define dma_unmap_single(d, a, s, r) dma_unmap_single_attrs(d, a, s, r, 0)
 #define dma_map_sg(d, s, n, r) dma_map_sg_attrs(d, s, n, r, 0)
diff --git a/include/linux/dma/sprd-dma.h b/include/linux/dma/sprd-dma.h
index ab82df6..d09c6f6 100644
--- a/include/linux/dma/sprd-dma.h
+++ b/include/linux/dma/sprd-dma.h
@@ -118,6 +118,9 @@
  * struct sprd_dma_linklist - DMA link-list address structure
  * @virt_addr: link-list virtual address to configure link-list node
  * @phy_addr: link-list physical address to link DMA transfer
+ * @wrap_addr: the wrap address for link-list mode, which means once the
+ * transfer address reaches the wrap address, the next transfer address
+ * will jump to the address specified by wrap_to register.
  *
  * The Spreadtrum DMA controller supports the link-list mode, that means slaves
  * can supply several groups configurations (each configuration represents one
@@ -181,6 +184,7 @@
 struct sprd_dma_linklist {
 	unsigned long virt_addr;
 	phys_addr_t phy_addr;
+	phys_addr_t wrap_addr;
 };
 
 #endif
diff --git a/include/linux/dmaengine.h b/include/linux/dmaengine.h
index 8013562..e5eb2c6 100644
--- a/include/linux/dmaengine.h
+++ b/include/linux/dmaengine.h
@@ -12,6 +12,7 @@
 #include <linux/scatterlist.h>
 #include <linux/bitmap.h>
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 #include <asm/page.h>
 
 /**
@@ -802,6 +803,11 @@
 					    dma_cookie_t cookie,
 					    struct dma_tx_state *txstate);
 	void (*device_issue_pending)(struct dma_chan *chan);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline int dmaengine_slave_config(struct dma_chan *chan,
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 4cf02ec..abcd5fd 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h
@@ -48,7 +48,7 @@
 
 
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG_CORE)
 int ddebug_add_module(struct _ddebug *tab, unsigned int n,
 				const char *modname);
 extern int ddebug_remove_module(const char *mod_name);
diff --git a/include/linux/elevator.h b/include/linux/elevator.h
index 7b4d5fa..61f14e7 100644
--- a/include/linux/elevator.h
+++ b/include/linux/elevator.h
@@ -4,6 +4,7 @@
 
 #include <linux/percpu.h>
 #include <linux/hashtable.h>
+#include <linux/android_kabi.h>
 
 #ifdef CONFIG_BLOCK
 
@@ -50,6 +51,11 @@
 	struct request *(*next_request)(struct request_queue *, struct request *);
 	void (*init_icq)(struct io_cq *);
 	void (*exit_icq)(struct io_cq *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define ELV_NAME_MAX	(16)
@@ -86,6 +92,9 @@
 	/* managed by elevator core */
 	char icq_cache_name[ELV_NAME_MAX + 6];	/* elvname + "_io_cq" */
 	struct list_head list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define ELV_HASH_BITS 6
diff --git a/include/linux/elfnote.h b/include/linux/elfnote.h
index 7fdd7f3..69b136e 100644
--- a/include/linux/elfnote.h
+++ b/include/linux/elfnote.h
@@ -59,7 +59,7 @@
 	ELFNOTE_END
 
 #else	/* !__ASSEMBLER__ */
-#include <linux/elf.h>
+#include <uapi/linux/elf.h>
 /*
  * Use an anonymous structure which matches the shape of
  * Elf{32,64}_Nhdr, but includes the name and desc data.  The size and
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
index 95991e43..75e0b00 100644
--- a/include/linux/ethtool.h
+++ b/include/linux/ethtool.h
@@ -15,6 +15,7 @@
 
 #include <linux/bitmap.h>
 #include <linux/compat.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/ethtool.h>
 
 #ifdef CONFIG_COMPAT
@@ -404,6 +405,11 @@
 				      struct ethtool_fecparam *);
 	void	(*get_ethtool_phy_stats)(struct net_device *,
 					 struct ethtool_stats *, u64 *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct ethtool_rx_flow_rule {
diff --git a/include/linux/export.h b/include/linux/export.h
index 941d075..7383078 100644
--- a/include/linux/export.h
+++ b/include/linux/export.h
@@ -129,7 +129,7 @@
 #define __EXPORT_SYMBOL_NS(sym, sec, ns)
 #define __EXPORT_SYMBOL(sym, sec)
 
-#elif defined(CONFIG_TRIM_UNUSED_KSYMS)
+#elif defined(CONFIG_TRIM_UNUSED_KSYMS) && !defined(MODULE)
 
 #include <generated/autoksyms.h>
 
@@ -151,7 +151,12 @@
 #define ___cond_export_sym(sym, sec, enabled)			\
 	__cond_export_sym_##enabled(sym, sec)
 #define __cond_export_sym_1(sym, sec) ___EXPORT_SYMBOL(sym, sec)
+
+#ifdef __GENKSYMS__
+#define __cond_export_sym_0(sym, sec) __GENKSYMS_EXPORT_SYMBOL(sym)
+#else
 #define __cond_export_sym_0(sym, sec) /* nothing */
+#endif
 
 #define __EXPORT_SYMBOL_NS(sym, sec, ns)				\
 	__ksym_marker(sym);						\
@@ -161,7 +166,12 @@
 #define ___cond_export_ns_sym(sym, sec, ns, enabled)			\
 	__cond_export_ns_sym_##enabled(sym, sec, ns)
 #define __cond_export_ns_sym_1(sym, sec, ns) ___EXPORT_SYMBOL_NS(sym, sec, ns)
+
+#ifdef __GENKSYMS__
+#define __cond_export_ns_sym_0(sym, sec, ns) __GENKSYMS_EXPORT_SYMBOL(sym)
+#else
 #define __cond_export_ns_sym_0(sym, sec, ns) /* nothing */
+#endif
 
 #else
 
diff --git a/include/linux/extcon.h b/include/linux/extcon.h
index 47d3e19..b0b4abb 100644
--- a/include/linux/extcon.h
+++ b/include/linux/extcon.h
@@ -309,6 +309,11 @@
 {
 	return ERR_PTR(-ENODEV);
 }
+
+static inline const char *extcon_get_edev_name(struct extcon_dev *edev)
+{
+	return NULL;
+}
 #endif /* CONFIG_EXTCON */
 
 /*
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index 6bb6f71..d445150 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -23,6 +23,7 @@
 
 #define NULL_ADDR		((block_t)0)	/* used as block_t addresses */
 #define NEW_ADDR		((block_t)-1)	/* used as block_t addresses */
+#define COMPRESS_ADDR		((block_t)-2)	/* used as compressed data flag */
 
 #define F2FS_BYTES_TO_BLK(bytes)	((bytes) >> F2FS_BLKSIZE_BITS)
 #define F2FS_BLK_TO_BYTES(blk)		((blk) << F2FS_BLKSIZE_BITS)
@@ -33,13 +34,11 @@
 #define F2FS_ROOT_INO(sbi)	((sbi)->root_ino_num)
 #define F2FS_NODE_INO(sbi)	((sbi)->node_ino_num)
 #define F2FS_META_INO(sbi)	((sbi)->meta_ino_num)
+#define F2FS_COMPRESS_INO(sbi)	(NM_I(sbi)->max_nid)
 
 #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 */
@@ -170,7 +169,7 @@
 	unsigned char alloc_type[MAX_ACTIVE_LOGS];
 
 	/* SIT and NAT version bitmap */
-	unsigned char sit_nat_version_bitmap[1];
+	unsigned char sit_nat_version_bitmap[];
 } __packed;
 
 #define CP_CHKSUM_OFFSET	4092	/* default chksum offset in checkpoint */
@@ -231,6 +230,7 @@
 #define F2FS_INLINE_DOTS	0x10	/* file having implicit dot dentries */
 #define F2FS_EXTRA_ATTR		0x20	/* file having extra attribute */
 #define F2FS_PIN_FILE		0x40	/* file should not be gced */
+#define F2FS_COMPRESS_RELEASED	0x80	/* file released compressed blocks */
 
 struct f2fs_inode {
 	__le16 i_mode;			/* file mode */
@@ -272,6 +272,13 @@
 			__le32 i_inode_checksum;/* inode meta checksum */
 			__le64 i_crtime;	/* creation time */
 			__le32 i_crtime_nsec;	/* creation time in nano scale */
+			__le64 i_compr_blocks;	/* # of compressed blocks */
+			__u8 i_compress_algorithm;	/* compress algorithm */
+			__u8 i_log_cluster_size;	/* log of cluster size */
+			__le16 i_compress_flag;		/* compress flag */
+						/* 0 bit: chksum flag
+						 * [10,15] bits: compress level
+						 */
 			__le32 i_extra_end[0];	/* for attribute size calculation */
 		} __packed;
 		__le32 i_addr[DEF_ADDRS_PER_INODE];	/* Pointers to data blocks */
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 4400148..68b29fb 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -526,7 +526,12 @@
 	struct sock_filter	*filter;
 };
 
+#define BPF_BINARY_HEADER_MAGIC	0x05de0e82
+
 struct bpf_binary_header {
+#ifdef CONFIG_CFI_CLANG
+	u32 magic;
+#endif
 	u32 pages;
 	/* Some arches need word alignment for their instructions */
 	u8 image[] __aligned(4);
@@ -568,20 +573,75 @@
 
 DECLARE_STATIC_KEY_FALSE(bpf_stats_enabled_key);
 
+#if IS_ENABLED(CONFIG_BPF_JIT) && IS_ENABLED(CONFIG_CFI_CLANG)
+/*
+ * With JIT, the kernel makes an indirect call to dynamically generated
+ * code. Use bpf_call_func to perform additional validation of the call
+ * target to narrow down attack surface. Architectures implementing BPF
+ * JIT can override arch_bpf_jit_check_func for arch-specific checking.
+ */
+extern bool arch_bpf_jit_check_func(const struct bpf_prog *prog);
+
+static inline unsigned int __bpf_call_func(const struct bpf_prog *prog,
+					   const void *ctx)
+{
+	/* Call interpreter with CFI checking. */
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline struct bpf_binary_header *
+bpf_jit_binary_hdr(const struct bpf_prog *fp);
+
+static inline unsigned int __nocfi bpf_call_func(const struct bpf_prog *prog,
+						 const void *ctx)
+{
+	const struct bpf_binary_header *hdr = bpf_jit_binary_hdr(prog);
+
+	if (!IS_ENABLED(CONFIG_BPF_JIT_ALWAYS_ON) && !prog->jited)
+		return __bpf_call_func(prog, ctx);
+
+	/*
+	 * We are about to call dynamically generated code. Check that the
+	 * page has bpf_binary_header with a valid magic to limit possible
+	 * call targets.
+	 */
+	BUG_ON(hdr->magic != BPF_BINARY_HEADER_MAGIC ||
+		!arch_bpf_jit_check_func(prog));
+
+	/* Call jited function without CFI checking. */
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline void bpf_jit_set_header_magic(struct bpf_binary_header *hdr)
+{
+	hdr->magic = BPF_BINARY_HEADER_MAGIC;
+}
+#else
+static inline unsigned int bpf_call_func(const struct bpf_prog *prog,
+					 const void *ctx)
+{
+	return prog->bpf_func(ctx, prog->insnsi);
+}
+
+static inline void bpf_jit_set_header_magic(struct bpf_binary_header *hdr)
+{
+}
+#endif
+
 #define BPF_PROG_RUN(prog, ctx)	({				\
 	u32 ret;						\
 	cant_sleep();						\
 	if (static_branch_unlikely(&bpf_stats_enabled_key)) {	\
 		struct bpf_prog_stats *stats;			\
 		u64 start = sched_clock();			\
-		ret = (*(prog)->bpf_func)(ctx, (prog)->insnsi);	\
+		ret = bpf_call_func(prog, ctx);			\
 		stats = this_cpu_ptr(prog->aux->stats);		\
 		u64_stats_update_begin(&stats->syncp);		\
 		stats->cnt++;					\
 		stats->nsecs += sched_clock() - start;		\
 		u64_stats_update_end(&stats->syncp);		\
 	} else {						\
-		ret = (*(prog)->bpf_func)(ctx, (prog)->insnsi);	\
+		ret = bpf_call_func(prog, ctx);			\
 	}							\
 	ret; })
 
diff --git a/include/linux/fs.h b/include/linux/fs.h
index ef118b8..f0c0c4d 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -40,9 +40,11 @@
 #include <linux/fs_types.h>
 #include <linux/build_bug.h>
 #include <linux/stddef.h>
+#include <linux/android_kabi.h>
 
 #include <asm/byteorder.h>
 #include <uapi/linux/fs.h>
+#include <linux/android_vendor.h>
 
 struct backing_dev_info;
 struct bdi_writeback;
@@ -306,14 +308,20 @@
 	WRITE_LIFE_EXTREME	= RWH_WRITE_LIFE_EXTREME,
 };
 
-#define IOCB_EVENTFD		(1 << 0)
-#define IOCB_APPEND		(1 << 1)
-#define IOCB_DIRECT		(1 << 2)
-#define IOCB_HIPRI		(1 << 3)
-#define IOCB_DSYNC		(1 << 4)
-#define IOCB_SYNC		(1 << 5)
-#define IOCB_WRITE		(1 << 6)
-#define IOCB_NOWAIT		(1 << 7)
+/* Match RWF_* bits to IOCB bits */
+#define IOCB_HIPRI		(__force int) RWF_HIPRI
+#define IOCB_DSYNC		(__force int) RWF_DSYNC
+#define IOCB_SYNC		(__force int) RWF_SYNC
+#define IOCB_NOWAIT		(__force int) RWF_NOWAIT
+#define IOCB_APPEND		(__force int) RWF_APPEND
+
+/* non-RWF related bits - start at 16 */
+#define IOCB_EVENTFD		(1 << 16)
+#define IOCB_DIRECT		(1 << 17)
+#define IOCB_WRITE		(1 << 18)
+/* iocb->ki_waitq is valid */
+#define IOCB_WAITQ		(1 << 19)
+#define IOCB_NOIO		(1 << 20)
 
 struct kiocb {
 	struct file		*ki_filp;
@@ -407,6 +415,11 @@
 	int (*swap_activate)(struct swap_info_struct *sis, struct file *file,
 				sector_t *span);
 	void (*swap_deactivate)(struct file *file);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern const struct address_space_operations empty_aops;
@@ -462,6 +475,11 @@
 	spinlock_t		private_lock;
 	struct list_head	private_list;
 	void			*private_data;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __attribute__((aligned(sizeof(long)))) __randomize_layout;
 	/*
 	 * On most architectures that alignment is already the case; but
@@ -506,6 +524,11 @@
 	int			bd_fsfreeze_count;
 	/* Mutex for freeze */
 	struct mutex		bd_fsfreeze_mutex;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /* XArray tags, for tagging dirty and writeback pages in the pagecache. */
@@ -736,6 +759,9 @@
 #endif
 
 	void			*i_private; /* fs or device private pointer */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct timespec64 timestamp_truncate(struct timespec64 t, struct inode *inode);
@@ -971,6 +997,11 @@
 #endif /* #ifdef CONFIG_EPOLL */
 	struct address_space	*f_mapping;
 	errseq_t		f_wb_err;
+	errseq_t		f_sb_err; /* for syncfs */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_OEM_DATA(1);
 } __randomize_layout
   __attribute__((aligned(4)));	/* lest something weird decides that 2 is OK */
 
@@ -1030,6 +1061,9 @@
 struct file_lock_operations {
 	void (*fl_copy_lock)(struct file_lock *, struct file_lock *);
 	void (*fl_release_private)(struct file_lock *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct lock_manager_operations {
@@ -1040,6 +1074,9 @@
 	bool (*lm_break)(struct file_lock *);
 	int (*lm_change)(struct file_lock *, int, struct list_head *);
 	void (*lm_setup)(struct file_lock *, void **);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct lock_manager {
@@ -1113,6 +1150,10 @@
 			unsigned int	debug_id;
 		} afs;
 	} fl_u;
+
+	struct list_head android_reserved1;	/* not a macro as we might just need it as-is */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct file_lock_context {
@@ -1371,6 +1412,7 @@
 #define SB_NODIRATIME	2048	/* Do not update directory access times */
 #define SB_SILENT	32768
 #define SB_POSIXACL	(1<<16)	/* VFS does not apply the umask */
+#define SB_INLINECRYPT	(1<<17)	/* Use blk-crypto for encrypted files */
 #define SB_KERNMOUNT	(1<<22) /* this is a kern_mount call */
 #define SB_I_VERSION	(1<<23) /* Update inode I_version field */
 #define SB_LAZYTIME	(1<<25) /* Update the on-disk [acm]times lazily */
@@ -1383,6 +1425,12 @@
 #define SB_ACTIVE	(1<<30)
 #define SB_NOUSER	(1<<31)
 
+/* These flags relate to encoding and casefolding */
+#define SB_ENC_STRICT_MODE_FL	(1 << 0)
+
+#define sb_has_strict_encoding(sb) \
+	(sb->s_encoding_flags & SB_ENC_STRICT_MODE_FL)
+
 /*
  *	Umount options
  */
@@ -1451,6 +1499,10 @@
 #ifdef CONFIG_FS_VERITY
 	const struct fsverity_operations *s_vop;
 #endif
+#ifdef CONFIG_UNICODE
+	struct unicode_map *s_encoding;
+	__u16 s_encoding_flags;
+#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;
@@ -1515,6 +1567,9 @@
 	/* Being remounted read-only */
 	int s_readonly_remount;
 
+	/* per-sb errseq_t for reporting writeback errors via syncfs */
+	errseq_t s_wb_err;
+
 	/* AIO completions deferred from interrupt context */
 	struct workqueue_struct *s_dio_done_wq;
 	struct hlist_head s_pins;
@@ -1549,6 +1604,11 @@
 
 	spinlock_t		s_inode_wblist_lock;
 	struct list_head	s_inodes_wb;	/* writeback inodes */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /* Helper functions so that in most cases filesystems will
@@ -1751,6 +1811,9 @@
 	struct fiemap_extent __user *fi_extents_start; /* Start of
 							fiemap_extent array */
 };
+
+int fiemap_prep(struct inode *inode, struct fiemap_extent_info *fieinfo,
+		u64 start, u64 *len, u32 supported_flags);
 int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
 			    u64 phys, u64 len, u32 flags);
 int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
@@ -1859,6 +1922,11 @@
 				   struct file *file_out, loff_t pos_out,
 				   loff_t len, unsigned int remap_flags);
 	int (*fadvise)(struct file *, loff_t, loff_t, int);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct inode_operations {
@@ -1889,6 +1957,11 @@
 			   umode_t create_mode);
 	int (*tmpfile) (struct inode *, struct dentry *, umode_t);
 	int (*set_acl)(struct inode *, struct posix_acl *, int);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned;
 
 static inline ssize_t call_read_iter(struct file *file, struct kiocb *kio,
@@ -1973,6 +2046,11 @@
 				  struct shrink_control *);
 	long (*free_cached_objects)(struct super_block *,
 				    struct shrink_control *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -2244,6 +2322,11 @@
 	struct lock_class_key i_lock_key;
 	struct lock_class_key i_mutex_key;
 	struct lock_class_key i_mutex_dir_key;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define MODULE_ALIAS_FS(NAME) MODULE_ALIAS("fs-" NAME)
@@ -2536,6 +2619,7 @@
 			umode_t mode);
 extern struct file *file_open_name(struct filename *, int, umode_t);
 extern struct file *filp_open(const char *, int, umode_t);
+extern struct file *filp_open_block(const char *, int, umode_t);
 extern struct file *file_open_root(struct dentry *, struct vfsmount *,
 				   const char *, int, umode_t);
 extern struct file * dentry_open(const struct path *, int, const struct cred *);
@@ -2819,6 +2903,18 @@
 	return errseq_sample(&mapping->wb_err);
 }
 
+/**
+ * file_sample_sb_err - sample the current errseq_t to test for later errors
+ * @mapping: mapping to be sampled
+ *
+ * Grab the most current superblock-level errseq_t value for the given
+ * struct file.
+ */
+static inline errseq_t file_sample_sb_err(struct file *file)
+{
+	return errseq_sample(&file->f_path.dentry->d_sb->s_wb_err);
+}
+
 static inline int filemap_nr_thps(struct address_space *mapping)
 {
 #ifdef CONFIG_READ_ONLY_THP_FOR_FS
@@ -2873,9 +2969,16 @@
 
 extern void emergency_sync(void);
 extern void emergency_remount(void);
+
 #ifdef CONFIG_BLOCK
-extern sector_t bmap(struct inode *, sector_t);
+extern int bmap(struct inode *inode, sector_t *block);
+#else
+static inline int bmap(struct inode *inode,  sector_t *block)
+{
+	return -EINVAL;
+}
 #endif
+
 extern int notify_change(struct dentry *, struct iattr *, struct inode **);
 extern int inode_permission(struct inode *, int);
 extern int generic_permission(struct inode *, int);
@@ -3348,6 +3451,8 @@
 
 extern int generic_check_addressable(unsigned, u64);
 
+extern void generic_set_encrypted_ci_d_ops(struct dentry *dentry);
+
 #ifdef CONFIG_MIGRATION
 extern int buffer_migrate_page(struct address_space *,
 				struct page *, struct page *,
@@ -3406,25 +3511,34 @@
 
 static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
 {
+	int kiocb_flags = 0;
+
+	/* make sure there's no overlap between RWF and private IOCB flags */
+	BUILD_BUG_ON((__force int)RWF_SUPPORTED & IOCB_EVENTFD);
+
+	if (!flags)
+		return 0;
 	if (unlikely(flags & ~RWF_SUPPORTED))
 		return -EOPNOTSUPP;
 
 	if (flags & RWF_NOWAIT) {
 		if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
 			return -EOPNOTSUPP;
-		ki->ki_flags |= IOCB_NOWAIT;
+		kiocb_flags |= IOCB_NOIO;
 	}
-	if (flags & RWF_HIPRI)
-		ki->ki_flags |= IOCB_HIPRI;
-	if (flags & RWF_DSYNC)
-		ki->ki_flags |= IOCB_DSYNC;
+	kiocb_flags |= (__force int)(flags & RWF_SUPPORTED);
 	if (flags & RWF_SYNC)
-		ki->ki_flags |= (IOCB_DSYNC | IOCB_SYNC);
-	if (flags & RWF_APPEND)
-		ki->ki_flags |= IOCB_APPEND;
+		kiocb_flags |= IOCB_DSYNC;
+
+	ki->ki_flags |= kiocb_flags;
 	return 0;
 }
 
+static inline rwf_t iocb_to_rw_flags(int ifl, int iocb_mask)
+{
+	return ifl & iocb_mask;
+}
+
 static inline ino_t parent_ino(struct dentry *dentry)
 {
 	ino_t res;
diff --git a/include/linux/fscrypt.h b/include/linux/fscrypt.h
index 0d1a53d..219f28b 100644
--- a/include/linux/fscrypt.h
+++ b/include/linux/fscrypt.h
@@ -20,8 +20,9 @@
 
 #define FS_CRYPTO_BLOCK_SIZE		16
 
-struct fscrypt_ctx;
+union fscrypt_policy;
 struct fscrypt_info;
+struct seq_file;
 
 struct fscrypt_str {
 	unsigned char *name;
@@ -34,7 +35,7 @@
 	u32 hash;
 	u32 minor_hash;
 	struct fscrypt_str crypto_buf;
-	bool is_ciphertext_name;
+	bool is_nokey_name;
 };
 
 #define FSTR_INIT(n, l)		{ .name = n, .len = l }
@@ -57,47 +58,64 @@
 struct fscrypt_operations {
 	unsigned int flags;
 	const char *key_prefix;
-	int (*get_context)(struct inode *, void *, size_t);
-	int (*set_context)(struct inode *, const void *, size_t, void *);
-	bool (*dummy_context)(struct inode *);
-	bool (*empty_dir)(struct inode *);
+	int (*get_context)(struct inode *inode, void *ctx, size_t len);
+	int (*set_context)(struct inode *inode, const void *ctx, size_t len,
+			   void *fs_data);
+	const union fscrypt_policy *(*get_dummy_policy)(struct super_block *sb);
+	bool (*empty_dir)(struct inode *inode);
 	unsigned int max_namelen;
+	bool (*has_stable_inodes)(struct super_block *sb);
+	void (*get_ino_and_lblk_bits)(struct super_block *sb,
+				      int *ino_bits_ret, int *lblk_bits_ret);
+	int (*get_num_devices)(struct super_block *sb);
+	void (*get_devices)(struct super_block *sb,
+			    struct request_queue **devs);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
+	ANDROID_OEM_DATA_ARRAY(1, 4);
 };
 
-/* Decryption work */
-struct fscrypt_ctx {
-	union {
-		struct {
-			struct bio *bio;
-			struct work_struct work;
-		};
-		struct list_head free_list;	/* Free list */
-	};
-	u8 flags;				/* Flags */
-};
-
-static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+static inline struct fscrypt_info *fscrypt_get_info(const struct inode *inode)
 {
-	/* pairs with cmpxchg_release() in fscrypt_get_encryption_info() */
-	return READ_ONCE(inode->i_crypt_info) != NULL;
+	/*
+	 * Pairs with the cmpxchg_release() in fscrypt_setup_encryption_info().
+	 * I.e., another task may publish ->i_crypt_info concurrently, executing
+	 * a RELEASE barrier.  We need to use smp_load_acquire() here to safely
+	 * ACQUIRE the memory the other task published.
+	 */
+	return smp_load_acquire(&inode->i_crypt_info);
 }
 
-static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
+/**
+ * fscrypt_needs_contents_encryption() - check whether an inode needs
+ *					 contents encryption
+ * @inode: the inode to check
+ *
+ * Return: %true iff the inode is an encrypted regular file and the kernel was
+ * built with fscrypt support.
+ *
+ * If you need to know whether the encrypt bit is set even when the kernel was
+ * built without fscrypt support, you must use IS_ENCRYPTED() directly instead.
+ */
+static inline bool fscrypt_needs_contents_encryption(const struct inode *inode)
 {
-	return inode->i_sb->s_cop->dummy_context &&
-		inode->i_sb->s_cop->dummy_context(inode);
+	return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode);
 }
 
 /*
- * 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().
+ * When d_splice_alias() moves a directory's no-key alias to its plaintext alias
+ * as a result of the encryption key being added, DCACHE_NOKEY_NAME must be
+ * cleared.  Note that we don't have to support arbitrary moves of this flag
+ * because fscrypt doesn't allow no-key names to be the source or target of a
+ * rename().
  */
 static inline void fscrypt_handle_d_move(struct dentry *dentry)
 {
-	dentry->d_flags &= ~DCACHE_ENCRYPTED_NAME;
+	dentry->d_flags &= ~DCACHE_NOKEY_NAME;
 }
 
 /**
@@ -126,28 +144,25 @@
  */
 static inline bool fscrypt_is_nokey_name(const struct dentry *dentry)
 {
-	return dentry->d_flags & DCACHE_ENCRYPTED_NAME;
+	return dentry->d_flags & DCACHE_NOKEY_NAME;
 }
 
 /* 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 *);
+void fscrypt_enqueue_decrypt_work(struct work_struct *);
 
-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);
+struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
+					      unsigned int len,
+					      unsigned int offs,
+					      gfp_t gfp_flags);
+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);
+int fscrypt_decrypt_pagecache_blocks(struct page *page, unsigned int len,
+				     unsigned int offs);
+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)
 {
@@ -159,145 +174,92 @@
 	return (struct page *)page_private(bounce_page);
 }
 
-extern void fscrypt_free_bounce_page(struct page *bounce_page);
+void fscrypt_free_bounce_page(struct page *bounce_page);
 
 /* policy.c */
-extern int fscrypt_ioctl_set_policy(struct file *, const void __user *);
-extern int fscrypt_ioctl_get_policy(struct file *, void __user *);
-extern int fscrypt_ioctl_get_policy_ex(struct file *, void __user *);
-extern int fscrypt_has_permitted_context(struct inode *, struct inode *);
-extern int fscrypt_inherit_context(struct inode *, struct inode *,
-					void *, bool);
+int fscrypt_ioctl_set_policy(struct file *filp, const void __user *arg);
+int fscrypt_ioctl_get_policy(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_policy_ex(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg);
+int fscrypt_has_permitted_context(struct inode *parent, struct inode *child);
+int fscrypt_set_context(struct inode *inode, void *fs_data);
+
+struct fscrypt_dummy_policy {
+	const union fscrypt_policy *policy;
+};
+
+int fscrypt_set_test_dummy_encryption(struct super_block *sb, const char *arg,
+				struct fscrypt_dummy_policy *dummy_policy);
+void fscrypt_show_test_dummy_encryption(struct seq_file *seq, char sep,
+					struct super_block *sb);
+static inline void
+fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
+{
+	kfree(dummy_policy->policy);
+	dummy_policy->policy = NULL;
+}
+
 /* keyring.c */
-extern void fscrypt_sb_free(struct super_block *sb);
-extern int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
-extern int fscrypt_ioctl_remove_key(struct file *filp, void __user *arg);
-extern int fscrypt_ioctl_remove_key_all_users(struct file *filp,
-					      void __user *arg);
-extern int fscrypt_ioctl_get_key_status(struct file *filp, void __user *arg);
+void fscrypt_sb_free(struct super_block *sb);
+int fscrypt_ioctl_add_key(struct file *filp, void __user *arg);
+int fscrypt_ioctl_remove_key(struct file *filp, void __user *arg);
+int fscrypt_ioctl_remove_key_all_users(struct file *filp, void __user *arg);
+int fscrypt_ioctl_get_key_status(struct file *filp, void __user *arg);
 
 /* keysetup.c */
-extern int fscrypt_get_encryption_info(struct inode *);
-extern void fscrypt_put_encryption_info(struct inode *);
-extern void fscrypt_free_inode(struct inode *);
-extern int fscrypt_drop_inode(struct inode *inode);
+int fscrypt_prepare_new_inode(struct inode *dir, struct inode *inode,
+			      bool *encrypt_ret);
+void fscrypt_put_encryption_info(struct inode *inode);
+void fscrypt_free_inode(struct inode *inode);
+int fscrypt_drop_inode(struct inode *inode);
 
 /* fname.c */
-extern int fscrypt_setup_filename(struct inode *, const struct qstr *,
-				int lookup, struct fscrypt_name *);
+int fscrypt_setup_filename(struct inode *inode, const struct qstr *iname,
+			   int lookup, struct fscrypt_name *fname);
 
 static inline void fscrypt_free_filename(struct fscrypt_name *fname)
 {
 	kfree(fname->crypto_buf.name);
 }
 
-extern int fscrypt_fname_alloc_buffer(const struct inode *, u32,
-				struct fscrypt_str *);
-extern void fscrypt_fname_free_buffer(struct fscrypt_str *);
-extern int fscrypt_fname_disk_to_usr(struct inode *, u32, u32,
-			const struct fscrypt_str *, struct fscrypt_str *);
-
-#define FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE	32
-
-/* Extracts the second-to-last ciphertext block; see explanation below */
-#define FSCRYPT_FNAME_DIGEST(name, len)	\
-	((name) + round_down((len) - FS_CRYPTO_BLOCK_SIZE - 1, \
-			     FS_CRYPTO_BLOCK_SIZE))
-
-#define FSCRYPT_FNAME_DIGEST_SIZE	FS_CRYPTO_BLOCK_SIZE
-
-/**
- * fscrypt_digested_name - alternate identifier for an on-disk filename
- *
- * When userspace lists an encrypted directory without access to the key,
- * filenames whose ciphertext is longer than FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE
- * bytes are shown in this abbreviated form (base64-encoded) rather than as the
- * full ciphertext (base64-encoded).  This is necessary to allow supporting
- * filenames up to NAME_MAX bytes, since base64 encoding expands the length.
- *
- * To make it possible for filesystems to still find the correct directory entry
- * despite not knowing the full on-disk name, we encode any filesystem-specific
- * 'hash' and/or 'minor_hash' which the filesystem may need for its lookups,
- * followed by the second-to-last ciphertext block of the filename.  Due to the
- * use of the CBC-CTS encryption mode, the second-to-last ciphertext block
- * depends on the full plaintext.  (Note that ciphertext stealing causes the
- * last two blocks to appear "flipped".)  This makes accidental collisions very
- * unlikely: just a 1 in 2^128 chance for two filenames to collide even if they
- * share the same filesystem-specific hashes.
- *
- * However, this scheme isn't immune to intentional collisions, which can be
- * created by anyone able to create arbitrary plaintext filenames and view them
- * without the key.  Making the "digest" be a real cryptographic hash like
- * SHA-256 over the full ciphertext would prevent this, although it would be
- * less efficient and harder to implement, especially since the filesystem would
- * need to calculate it for each directory entry examined during a search.
- */
-struct fscrypt_digested_name {
-	u32 hash;
-	u32 minor_hash;
-	u8 digest[FSCRYPT_FNAME_DIGEST_SIZE];
-};
-
-/**
- * fscrypt_match_name() - test whether the given name matches a directory entry
- * @fname: the name being searched for
- * @de_name: the name from the directory entry
- * @de_name_len: the length of @de_name in bytes
- *
- * Normally @fname->disk_name will be set, and in that case we simply compare
- * that to the name stored in the directory entry.  The only exception is that
- * if we don't have the key for an encrypted directory and a filename in it is
- * very long, then we won't have the full disk_name and we'll instead need to
- * match against the fscrypt_digested_name.
- *
- * Return: %true if the name matches, otherwise %false.
- */
-static inline bool fscrypt_match_name(const struct fscrypt_name *fname,
-				      const u8 *de_name, u32 de_name_len)
-{
-	if (unlikely(!fname->disk_name.name)) {
-		const struct fscrypt_digested_name *n =
-			(const void *)fname->crypto_buf.name;
-		if (WARN_ON_ONCE(fname->usr_fname->name[0] != '_'))
-			return false;
-		if (de_name_len <= FSCRYPT_FNAME_MAX_UNDIGESTED_SIZE)
-			return false;
-		return !memcmp(FSCRYPT_FNAME_DIGEST(de_name, de_name_len),
-			       n->digest, FSCRYPT_FNAME_DIGEST_SIZE);
-	}
-
-	if (de_name_len != fname->disk_name.len)
-		return false;
-	return !memcmp(de_name, fname->disk_name.name, fname->disk_name.len);
-}
+int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
+			       struct fscrypt_str *crypto_str);
+void fscrypt_fname_free_buffer(struct fscrypt_str *crypto_str);
+int fscrypt_fname_disk_to_usr(const struct inode *inode,
+			      u32 hash, u32 minor_hash,
+			      const struct fscrypt_str *iname,
+			      struct fscrypt_str *oname);
+bool fscrypt_match_name(const struct fscrypt_name *fname,
+			const u8 *de_name, u32 de_name_len);
+u64 fscrypt_fname_siphash(const struct inode *dir, const struct qstr *name);
+int fscrypt_d_revalidate(struct dentry *dentry, unsigned int flags);
 
 /* bio.c */
-extern void fscrypt_decrypt_bio(struct bio *);
-extern void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx,
-					struct bio *bio);
-extern int fscrypt_zeroout_range(const struct inode *, pgoff_t, sector_t,
-				 unsigned int);
+void fscrypt_decrypt_bio(struct bio *bio);
+int fscrypt_zeroout_range(const struct inode *inode, pgoff_t lblk,
+			  sector_t pblk, unsigned int len);
 
 /* hooks.c */
-extern int fscrypt_file_open(struct inode *inode, struct file *filp);
-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,
-				    struct fscrypt_name *fname);
-extern int __fscrypt_prepare_symlink(struct inode *dir, unsigned int len,
-				     unsigned int max_len,
-				     struct fscrypt_str *disk_link);
-extern int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
-				     unsigned int len,
-				     struct fscrypt_str *disk_link);
-extern const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
-				       unsigned int max_size,
-				       struct delayed_call *done);
+int fscrypt_file_open(struct inode *inode, struct file *filp);
+int __fscrypt_prepare_link(struct inode *inode, struct inode *dir,
+			   struct dentry *dentry);
+int __fscrypt_prepare_rename(struct inode *old_dir, struct dentry *old_dentry,
+			     struct inode *new_dir, struct dentry *new_dentry,
+			     unsigned int flags);
+int __fscrypt_prepare_lookup(struct inode *dir, struct dentry *dentry,
+			     struct fscrypt_name *fname);
+int __fscrypt_prepare_readdir(struct inode *dir);
+int __fscrypt_prepare_setattr(struct dentry *dentry, struct iattr *attr);
+int fscrypt_prepare_setflags(struct inode *inode,
+			     unsigned int oldflags, unsigned int flags);
+int fscrypt_prepare_symlink(struct inode *dir, const char *target,
+			    unsigned int len, unsigned int max_len,
+			    struct fscrypt_str *disk_link);
+int __fscrypt_encrypt_symlink(struct inode *inode, const char *target,
+			      unsigned int len, struct fscrypt_str *disk_link);
+const char *fscrypt_get_symlink(struct inode *inode, const void *caddr,
+				unsigned int max_size,
+				struct delayed_call *done);
 int fscrypt_symlink_getattr(const struct path *path, struct kstat *stat);
 static inline void fscrypt_set_ops(struct super_block *sb,
 				   const struct fscrypt_operations *s_cop)
@@ -306,12 +268,12 @@
 }
 #else  /* !CONFIG_FS_ENCRYPTION */
 
-static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+static inline struct fscrypt_info *fscrypt_get_info(const struct inode *inode)
 {
-	return false;
+	return NULL;
 }
 
-static inline bool fscrypt_dummy_context_enabled(struct inode *inode)
+static inline bool fscrypt_needs_contents_encryption(const struct inode *inode)
 {
 	return false;
 }
@@ -330,16 +292,6 @@
 {
 }
 
-static inline struct fscrypt_ctx *fscrypt_get_ctx(gfp_t gfp_flags)
-{
-	return ERR_PTR(-EOPNOTSUPP);
-}
-
-static inline void fscrypt_release_ctx(struct fscrypt_ctx *ctx)
-{
-	return;
-}
-
 static inline struct page *fscrypt_encrypt_pagecache_blocks(struct page *page,
 							    unsigned int len,
 							    unsigned int offs,
@@ -405,19 +357,36 @@
 	return -EOPNOTSUPP;
 }
 
+static inline int fscrypt_ioctl_get_nonce(struct file *filp, void __user *arg)
+{
+	return -EOPNOTSUPP;
+}
+
 static inline int fscrypt_has_permitted_context(struct inode *parent,
 						struct inode *child)
 {
 	return 0;
 }
 
-static inline int fscrypt_inherit_context(struct inode *parent,
-					  struct inode *child,
-					  void *fs_data, bool preload)
+static inline int fscrypt_set_context(struct inode *inode, void *fs_data)
 {
 	return -EOPNOTSUPP;
 }
 
+struct fscrypt_dummy_policy {
+};
+
+static inline void fscrypt_show_test_dummy_encryption(struct seq_file *seq,
+						      char sep,
+						      struct super_block *sb)
+{
+}
+
+static inline void
+fscrypt_free_dummy_policy(struct fscrypt_dummy_policy *dummy_policy)
+{
+}
+
 /* keyring.c */
 static inline void fscrypt_sb_free(struct super_block *sb)
 {
@@ -446,9 +415,14 @@
 }
 
 /* keysetup.c */
-static inline int fscrypt_get_encryption_info(struct inode *inode)
+
+static inline int fscrypt_prepare_new_inode(struct inode *dir,
+					    struct inode *inode,
+					    bool *encrypt_ret)
 {
-	return -EOPNOTSUPP;
+	if (IS_ENCRYPTED(dir))
+		return -EOPNOTSUPP;
+	return 0;
 }
 
 static inline void fscrypt_put_encryption_info(struct inode *inode)
@@ -485,8 +459,7 @@
 	return;
 }
 
-static inline int fscrypt_fname_alloc_buffer(const struct inode *inode,
-					     u32 max_encrypted_len,
+static inline int fscrypt_fname_alloc_buffer(u32 max_encrypted_len,
 					     struct fscrypt_str *crypto_str)
 {
 	return -EOPNOTSUPP;
@@ -497,7 +470,7 @@
 	return;
 }
 
-static inline int fscrypt_fname_disk_to_usr(struct inode *inode,
+static inline int fscrypt_fname_disk_to_usr(const struct inode *inode,
 					    u32 hash, u32 minor_hash,
 					    const struct fscrypt_str *iname,
 					    struct fscrypt_str *oname)
@@ -514,13 +487,21 @@
 	return !memcmp(de_name, fname->disk_name.name, fname->disk_name.len);
 }
 
-/* bio.c */
-static inline void fscrypt_decrypt_bio(struct bio *bio)
+static inline u64 fscrypt_fname_siphash(const struct inode *dir,
+					const struct qstr *name)
 {
+	WARN_ON_ONCE(1);
+	return 0;
 }
 
-static inline void fscrypt_enqueue_decrypt_bio(struct fscrypt_ctx *ctx,
-					       struct bio *bio)
+static inline int fscrypt_d_revalidate(struct dentry *dentry,
+				       unsigned int flags)
+{
+	return 1;
+}
+
+/* bio.c */
+static inline void fscrypt_decrypt_bio(struct bio *bio)
 {
 }
 
@@ -561,14 +542,38 @@
 	return -EOPNOTSUPP;
 }
 
-static inline int __fscrypt_prepare_symlink(struct inode *dir,
-					    unsigned int len,
-					    unsigned int max_len,
-					    struct fscrypt_str *disk_link)
+static inline int __fscrypt_prepare_readdir(struct inode *dir)
 {
 	return -EOPNOTSUPP;
 }
 
+static inline int __fscrypt_prepare_setattr(struct dentry *dentry,
+					    struct iattr *attr)
+{
+	return -EOPNOTSUPP;
+}
+
+static inline int fscrypt_prepare_setflags(struct inode *inode,
+					   unsigned int oldflags,
+					   unsigned int flags)
+{
+	return 0;
+}
+
+static inline int fscrypt_prepare_symlink(struct inode *dir,
+					  const char *target,
+					  unsigned int len,
+					  unsigned int max_len,
+					  struct fscrypt_str *disk_link)
+{
+	if (IS_ENCRYPTED(dir))
+		return -EOPNOTSUPP;
+	disk_link->name = (unsigned char *)target;
+	disk_link->len = len + 1;
+	if (disk_link->len > max_len)
+		return -ENAMETOOLONG;
+	return 0;
+}
 
 static inline int __fscrypt_encrypt_symlink(struct inode *inode,
 					    const char *target,
@@ -599,42 +604,141 @@
 
 #endif	/* !CONFIG_FS_ENCRYPTION */
 
-/**
- * fscrypt_require_key - require an inode's encryption key
- * @inode: the inode we need the key for
- *
- * If the inode is encrypted, set up its encryption key if not already done.
- * Then require that the key be present and return -ENOKEY otherwise.
- *
- * No locks are needed, and the key will live as long as the struct inode --- so
- * it won't go away from under you.
- *
- * Return: 0 on success, -ENOKEY if the key is missing, or another -errno code
- * if a problem occurred while setting up the encryption key.
- */
-static inline int fscrypt_require_key(struct inode *inode)
-{
-	if (IS_ENCRYPTED(inode)) {
-		int err = fscrypt_get_encryption_info(inode);
+/* inline_crypt.c */
+#ifdef CONFIG_FS_ENCRYPTION_INLINE_CRYPT
 
-		if (err)
-			return err;
-		if (!fscrypt_has_encryption_key(inode))
-			return -ENOKEY;
-	}
-	return 0;
+bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode);
+
+void fscrypt_set_bio_crypt_ctx(struct bio *bio,
+			       const struct inode *inode, u64 first_lblk,
+			       gfp_t gfp_mask);
+
+void fscrypt_set_bio_crypt_ctx_bh(struct bio *bio,
+				  const struct buffer_head *first_bh,
+				  gfp_t gfp_mask);
+
+bool fscrypt_mergeable_bio(struct bio *bio, const struct inode *inode,
+			   u64 next_lblk);
+
+bool fscrypt_mergeable_bio_bh(struct bio *bio,
+			      const struct buffer_head *next_bh);
+
+bool fscrypt_dio_supported(struct kiocb *iocb, struct iov_iter *iter);
+
+u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk, u64 nr_blocks);
+
+#else /* CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+static inline bool __fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return false;
+}
+
+static inline void fscrypt_set_bio_crypt_ctx(struct bio *bio,
+					     const struct inode *inode,
+					     u64 first_lblk, gfp_t gfp_mask) { }
+
+static inline void fscrypt_set_bio_crypt_ctx_bh(
+					 struct bio *bio,
+					 const struct buffer_head *first_bh,
+					 gfp_t gfp_mask) { }
+
+static inline bool fscrypt_mergeable_bio(struct bio *bio,
+					 const struct inode *inode,
+					 u64 next_lblk)
+{
+	return true;
+}
+
+static inline bool fscrypt_mergeable_bio_bh(struct bio *bio,
+					    const struct buffer_head *next_bh)
+{
+	return true;
+}
+
+static inline bool fscrypt_dio_supported(struct kiocb *iocb,
+					 struct iov_iter *iter)
+{
+	const struct inode *inode = file_inode(iocb->ki_filp);
+
+	return !fscrypt_needs_contents_encryption(inode);
+}
+
+static inline u64 fscrypt_limit_io_blocks(const struct inode *inode, u64 lblk,
+					  u64 nr_blocks)
+{
+	return nr_blocks;
+}
+#endif /* !CONFIG_FS_ENCRYPTION_INLINE_CRYPT */
+
+#if IS_ENABLED(CONFIG_FS_ENCRYPTION) && IS_ENABLED(CONFIG_DM_DEFAULT_KEY)
+static inline bool
+fscrypt_inode_should_skip_dm_default_key(const struct inode *inode)
+{
+	return IS_ENCRYPTED(inode) && S_ISREG(inode->i_mode);
+}
+#else
+static inline bool
+fscrypt_inode_should_skip_dm_default_key(const struct inode *inode)
+{
+	return false;
+}
+#endif
+
+/**
+ * fscrypt_inode_uses_inline_crypto() - test whether an inode uses inline
+ *					encryption
+ * @inode: an inode. If encrypted, its key must be set up.
+ *
+ * Return: true if the inode requires file contents encryption and if the
+ *	   encryption should be done in the block layer via blk-crypto rather
+ *	   than in the filesystem layer.
+ */
+static inline bool fscrypt_inode_uses_inline_crypto(const struct inode *inode)
+{
+	return fscrypt_needs_contents_encryption(inode) &&
+	       __fscrypt_inode_uses_inline_crypto(inode);
 }
 
 /**
- * fscrypt_prepare_link - prepare to link an inode into a possibly-encrypted directory
+ * fscrypt_inode_uses_fs_layer_crypto() - test whether an inode uses fs-layer
+ *					  encryption
+ * @inode: an inode. If encrypted, its key must be set up.
+ *
+ * Return: true if the inode requires file contents encryption and if the
+ *	   encryption should be done in the filesystem layer rather than in the
+ *	   block layer via blk-crypto.
+ */
+static inline bool fscrypt_inode_uses_fs_layer_crypto(const struct inode *inode)
+{
+	return fscrypt_needs_contents_encryption(inode) &&
+	       !__fscrypt_inode_uses_inline_crypto(inode);
+}
+
+/**
+ * fscrypt_has_encryption_key() - check whether an inode has had its key set up
+ * @inode: the inode to check
+ *
+ * Return: %true if the inode has had its encryption key set up, else %false.
+ *
+ * Usually this should be preceded by fscrypt_get_encryption_info() to try to
+ * set up the key first.
+ */
+static inline bool fscrypt_has_encryption_key(const struct inode *inode)
+{
+	return fscrypt_get_info(inode) != NULL;
+}
+
+/**
+ * fscrypt_prepare_link() - prepare to link an inode into a possibly-encrypted
+ *			    directory
  * @old_dentry: an existing dentry for the inode being linked
  * @dir: the target directory
  * @dentry: negative dentry for the target filename
  *
  * A new link can only be added to an encrypted directory if the directory's
  * encryption key is available --- since otherwise we'd have no way to encrypt
- * the filename.  Therefore, we first set up the directory's encryption key (if
- * not already done) and return an error if it's unavailable.
+ * the filename.
  *
  * We also verify that the link will not violate the constraint that all files
  * in an encrypted directory tree use the same encryption policy.
@@ -653,7 +757,8 @@
 }
 
 /**
- * fscrypt_prepare_rename - prepare for a rename between possibly-encrypted directories
+ * fscrypt_prepare_rename() - prepare for a rename between possibly-encrypted
+ *			      directories
  * @old_dir: source directory
  * @old_dentry: dentry for source file
  * @new_dir: target directory
@@ -686,23 +791,27 @@
 }
 
 /**
- * fscrypt_prepare_lookup - prepare to lookup a name in a possibly-encrypted directory
+ * fscrypt_prepare_lookup() - prepare to lookup a name in a possibly-encrypted
+ *			      directory
  * @dir: directory being searched
  * @dentry: filename being looked up
  * @fname: (output) the name to use to search the on-disk directory
  *
  * 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.
+ * the name that will actually be used to search the directory on-disk.  If the
+ * directory's encryption policy is supported by this kernel and its encryption
+ * key is available, then the lookup is assumed to be by plaintext name;
+ * otherwise, it is assumed to be by no-key name.
  *
- * 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.
+ * This will set DCACHE_NOKEY_NAME on the dentry if the lookup is by no-key
+ * name.  In this case the filesystem must assign the dentry a dentry_operations
+ * which contains fscrypt_d_revalidate (or contains a d_revalidate method that
+ * calls fscrypt_d_revalidate), so that the dentry will be invalidated if the
+ * directory's encryption key is later added.
  *
- * 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.
+ * Return: 0 on success; -ENOENT if the directory's key is unavailable but the
+ * filename isn't a valid no-key name, so a negative dentry should be created;
+ * or another -errno code.
  */
 static inline int fscrypt_prepare_lookup(struct inode *dir,
 					 struct dentry *dentry,
@@ -719,7 +828,28 @@
 }
 
 /**
- * fscrypt_prepare_setattr - prepare to change a possibly-encrypted inode's attributes
+ * fscrypt_prepare_readdir() - prepare to read a possibly-encrypted directory
+ * @dir: the directory inode
+ *
+ * If the directory is encrypted and it doesn't already have its encryption key
+ * set up, try to set it up so that the filenames will be listed in plaintext
+ * form rather than in no-key form.
+ *
+ * Return: 0 on success; -errno on error.  Note that the encryption key being
+ *	   unavailable is not considered an error.  It is also not an error if
+ *	   the encryption policy is unsupported by this kernel; that is treated
+ *	   like the key being unavailable, so that files can still be deleted.
+ */
+static inline int fscrypt_prepare_readdir(struct inode *dir)
+{
+	if (IS_ENCRYPTED(dir))
+		return __fscrypt_prepare_readdir(dir);
+	return 0;
+}
+
+/**
+ * fscrypt_prepare_setattr() - prepare to change a possibly-encrypted inode's
+ *			       attributes
  * @dentry: dentry through which the inode is being changed
  * @attr: attributes to change
  *
@@ -738,52 +868,13 @@
 static inline int fscrypt_prepare_setattr(struct dentry *dentry,
 					  struct iattr *attr)
 {
-	if (attr->ia_valid & ATTR_SIZE)
-		return fscrypt_require_key(d_inode(dentry));
+	if (IS_ENCRYPTED(d_inode(dentry)))
+		return __fscrypt_prepare_setattr(dentry, attr);
 	return 0;
 }
 
 /**
- * fscrypt_prepare_symlink - prepare to create a possibly-encrypted symlink
- * @dir: directory in which the symlink is being created
- * @target: plaintext symlink target
- * @len: length of @target excluding null terminator
- * @max_len: space the filesystem has available to store the symlink target
- * @disk_link: (out) the on-disk symlink target being prepared
- *
- * This function computes the size the symlink target will require on-disk,
- * stores it in @disk_link->len, and validates it against @max_len.  An
- * encrypted symlink may be longer than the original.
- *
- * Additionally, @disk_link->name is set to @target if the symlink will be
- * unencrypted, but left NULL if the symlink will be encrypted.  For encrypted
- * symlinks, the filesystem must call fscrypt_encrypt_symlink() to create the
- * on-disk target later.  (The reason for the two-step process is that some
- * filesystems need to know the size of the symlink target before creating the
- * inode, e.g. to determine whether it will be a "fast" or "slow" symlink.)
- *
- * Return: 0 on success, -ENAMETOOLONG if the symlink target is too long,
- * -ENOKEY if the encryption key is missing, or another -errno code if a problem
- * occurred while setting up the encryption key.
- */
-static inline int fscrypt_prepare_symlink(struct inode *dir,
-					  const char *target,
-					  unsigned int len,
-					  unsigned int max_len,
-					  struct fscrypt_str *disk_link)
-{
-	if (IS_ENCRYPTED(dir) || fscrypt_dummy_context_enabled(dir))
-		return __fscrypt_prepare_symlink(dir, len, max_len, disk_link);
-
-	disk_link->name = (unsigned char *)target;
-	disk_link->len = len + 1;
-	if (disk_link->len > max_len)
-		return -ENAMETOOLONG;
-	return 0;
-}
-
-/**
- * fscrypt_encrypt_symlink - encrypt the symlink target if needed
+ * fscrypt_encrypt_symlink() - encrypt the symlink target if needed
  * @inode: symlink inode
  * @target: plaintext symlink target
  * @len: length of @target excluding null terminator
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h
index a2d5d17..0b33cf3 100644
--- a/include/linux/fsnotify.h
+++ b/include/linux/fsnotify.h
@@ -263,6 +263,7 @@
 {
 	const struct path *path = &file->f_path;
 	struct inode *inode = file_inode(file);
+	struct path lower_path;
 	__u32 mask = FS_OPEN;
 
 	if (S_ISDIR(inode->i_mode))
@@ -270,6 +271,13 @@
 	if (file->f_flags & __FMODE_EXEC)
 		mask |= FS_OPEN_EXEC;
 
+	if (path->dentry->d_op && path->dentry->d_op->d_canonical_path) {
+		path->dentry->d_op->d_canonical_path(path, &lower_path);
+		fsnotify_parent(&lower_path, NULL, mask);
+		fsnotify(lower_path.dentry->d_inode, mask, &lower_path,
+			 FSNOTIFY_EVENT_PATH, NULL, 0);
+		path_put(&lower_path);
+	}
 	fsnotify_path(inode, path, mask);
 }
 
diff --git a/include/linux/fsverity.h b/include/linux/fsverity.h
index 3b6b8cc..19c118e 100644
--- a/include/linux/fsverity.h
+++ b/include/linux/fsverity.h
@@ -77,6 +77,10 @@
 	 *
 	 * @inode: the inode
 	 * @index: 0-based index of the page within the Merkle tree
+	 * @num_ra_pages: The number of Merkle tree pages that should be
+	 *		  prefetched starting at @index if the page at @index
+	 *		  isn't already cached.  Implementations may ignore this
+	 *		  argument; it's only a performance optimization.
 	 *
 	 * 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
@@ -87,7 +91,8 @@
 	 * Return: the page on success, ERR_PTR() on failure
 	 */
 	struct page *(*read_merkle_tree_page)(struct inode *inode,
-					      pgoff_t index);
+					      pgoff_t index,
+					      unsigned long num_ra_pages);
 
 	/**
 	 * Write a Merkle tree block to the given inode.
@@ -110,29 +115,38 @@
 
 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);
+	/*
+	 * Pairs with the cmpxchg_release() in fsverity_set_info().
+	 * I.e., another task may publish ->i_verity_info concurrently,
+	 * executing a RELEASE barrier.  We need to use smp_load_acquire() here
+	 * to safely ACQUIRE the memory the other task published.
+	 */
+	return smp_load_acquire(&inode->i_verity_info);
 }
 
 /* enable.c */
 
-extern int fsverity_ioctl_enable(struct file *filp, const void __user *arg);
+int fsverity_ioctl_enable(struct file *filp, const void __user *arg);
 
 /* measure.c */
 
-extern int fsverity_ioctl_measure(struct file *filp, void __user *arg);
+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);
+int fsverity_file_open(struct inode *inode, struct file *filp);
+int fsverity_prepare_setattr(struct dentry *dentry, struct iattr *attr);
+void fsverity_cleanup_inode(struct inode *inode);
+
+/* read_metadata.c */
+
+int fsverity_ioctl_read_metadata(struct file *filp, const void __user *uarg);
 
 /* 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);
+bool fsverity_verify_page(struct page *page);
+void fsverity_verify_bio(struct bio *bio);
+void fsverity_enqueue_verify_work(struct work_struct *work);
 
 #else /* !CONFIG_FS_VERITY */
 
@@ -173,6 +187,14 @@
 {
 }
 
+/* read_metadata.c */
+
+static inline int fsverity_ioctl_read_metadata(struct file *filp,
+					       const void __user *uarg)
+{
+	return -EOPNOTSUPP;
+}
+
 /* verify.c */
 
 static inline bool fsverity_verify_page(struct page *page)
@@ -195,6 +217,7 @@
 
 /**
  * fsverity_active() - do reads from the inode need to go through fs-verity?
+ * @inode: inode to check
  *
  * This checks whether ->i_verity_info has been set.
  *
@@ -202,10 +225,26 @@
  * 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.)
+ *
+ * Return: true if reads need to go through fs-verity, otherwise false
  */
 static inline bool fsverity_active(const struct inode *inode)
 {
 	return fsverity_get_info(inode) != NULL;
 }
 
+#ifdef CONFIG_FS_VERITY_BUILTIN_SIGNATURES
+int __fsverity_verify_signature(const struct inode *inode, const u8 *signature,
+				size_t sig_size, const u8 *file_digest,
+				unsigned int digest_algorithm);
+#else /* !CONFIG_FS_VERITY_BUILTIN_SIGNATURES */
+static inline int __fsverity_verify_signature(const struct inode *inode,
+				const u8 *signature, size_t sig_size,
+				const u8 *file_digest,
+				unsigned int digest_algorithm)
+{
+	return 0;
+}
+#endif /* !CONFIG_FS_VERITY_BUILTIN_SIGNATURES */
+
 #endif	/* _LINUX_FSVERITY_H */
diff --git a/include/linux/fwnode.h b/include/linux/fwnode.h
index ababd6b..3ee8bbd 100644
--- a/include/linux/fwnode.h
+++ b/include/linux/fwnode.h
@@ -10,6 +10,7 @@
 #define _LINUX_FWNODE_H_
 
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 
 struct fwnode_operations;
 struct device;
@@ -17,6 +18,12 @@
 struct fwnode_handle {
 	struct fwnode_handle *secondary;
 	const struct fwnode_operations *ops;
+	struct device *dev;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -65,6 +72,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);
@@ -102,6 +147,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)				\
@@ -123,5 +170,8 @@
 		if (fwnode_has_op(fwnode, op))				\
 			(fwnode)->ops->op(fwnode, ## __VA_ARGS__);	\
 	} while (false)
+#define get_dev_from_fwnode(fwnode)	get_device((fwnode)->dev)
 
+void fw_devlink_pause(void);
+void fw_devlink_resume(void);
 #endif
diff --git a/include/linux/genhd.h b/include/linux/genhd.h
index c1bf995..eb5ba63 100644
--- a/include/linux/genhd.h
+++ b/include/linux/genhd.h
@@ -17,6 +17,7 @@
 #include <linux/percpu-refcount.h>
 #include <linux/uuid.h>
 #include <linux/blk_types.h>
+#include <linux/android_kabi.h>
 #include <asm/local.h>
 
 #ifdef CONFIG_BLOCK
@@ -131,6 +132,11 @@
 #endif
 	struct percpu_ref ref;
 	struct rcu_work rcu_work;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define GENHD_FL_REMOVABLE			1
@@ -175,6 +181,9 @@
 	unsigned char				tuple_size;
 	unsigned char				interval_exp;
 	unsigned char				tag_size;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #endif	/* CONFIG_BLK_DEV_INTEGRITY */
@@ -219,6 +228,12 @@
 	int node_id;
 	struct badblocks *bb;
 	struct lockdep_map lockdep_map;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 };
 
 static inline struct gendisk *part_to_disk(struct hd_struct *part)
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index 61f2f6f..d8a9836 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -44,6 +44,7 @@
 #else
 #define ___GFP_NOLOCKDEP	0
 #endif
+#define ___GFP_CMA		0x1000000u
 /* If the above are modified, __GFP_BITS_SHIFT may need updating */
 
 /*
@@ -57,6 +58,7 @@
 #define __GFP_HIGHMEM	((__force gfp_t)___GFP_HIGHMEM)
 #define __GFP_DMA32	((__force gfp_t)___GFP_DMA32)
 #define __GFP_MOVABLE	((__force gfp_t)___GFP_MOVABLE)  /* ZONE_MOVABLE allowed */
+#define __GFP_CMA	((__force gfp_t)___GFP_CMA)
 #define GFP_ZONEMASK	(__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
 
 /**
@@ -217,8 +219,13 @@
 #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP)
 
 /* Room for N __GFP_FOO bits */
-#define __GFP_BITS_SHIFT (23 + IS_ENABLED(CONFIG_LOCKDEP))
+#define __GFP_BITS_SHIFT (25)
+#ifdef CONFIG_LOCKDEP
 #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1))
+#else
+#define __GFP_BITS_MASK (((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) & \
+				~0x800000u)
+#endif
 
 /**
  * DOC: Useful GFP flag combinations
diff --git a/include/linux/gpio/driver.h b/include/linux/gpio/driver.h
index 5dd9c98..5c832b7 100644
--- a/include/linux/gpio/driver.h
+++ b/include/linux/gpio/driver.h
@@ -10,6 +10,7 @@
 #include <linux/lockdep.h>
 #include <linux/pinctrl/pinctrl.h>
 #include <linux/pinctrl/pinconf-generic.h>
+#include <linux/android_kabi.h>
 
 struct gpio_desc;
 struct of_phandle_args;
@@ -251,6 +252,9 @@
 	 * Store old irq_chip irq_disable callback
 	 */
 	void		(*irq_disable)(struct irq_data *data);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -449,6 +453,9 @@
 	int (*of_xlate)(struct gpio_chip *gc,
 			const struct of_phandle_args *gpiospec, u32 *flags);
 #endif /* CONFIG_OF_GPIO */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 extern const char *gpiochip_is_requested(struct gpio_chip *chip,
diff --git a/include/linux/hdmi.h b/include/linux/hdmi.h
index 9918a6c..216e25e 100644
--- a/include/linux/hdmi.h
+++ b/include/linux/hdmi.h
@@ -155,7 +155,7 @@
 };
 
 enum hdmi_metadata_type {
-	HDMI_STATIC_METADATA_TYPE1 = 1,
+	HDMI_STATIC_METADATA_TYPE1 = 0,
 };
 
 enum hdmi_eotf {
diff --git a/include/linux/hid.h b/include/linux/hid.h
index ad46ed4..783cc534 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -26,6 +26,7 @@
 #include <linux/mutex.h>
 #include <linux/power_supply.h>
 #include <uapi/linux/hid.h>
+#include <linux/android_kabi.h>
 
 /*
  * We parse each description item into this structure. Short items data
@@ -620,6 +621,9 @@
 	struct list_head debug_list;
 	spinlock_t  debug_list_lock;
 	wait_queue_head_t debug_wait;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define to_hid_device(pdev) \
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index ea5cdbd8c..9d6afc3 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -205,7 +205,12 @@
 alloc_zeroed_user_highpage_movable(struct vm_area_struct *vma,
 					unsigned long vaddr)
 {
+#ifndef CONFIG_CMA
 	return __alloc_zeroed_user_highpage(__GFP_MOVABLE, vma, vaddr);
+#else
+	return __alloc_zeroed_user_highpage(__GFP_MOVABLE|__GFP_CMA, vma,
+						vaddr);
+#endif
 }
 
 static inline void clear_highpage(struct page *page)
diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h
index 48be92a..1bb5848 100644
--- a/include/linux/hrtimer.h
+++ b/include/linux/hrtimer.h
@@ -19,6 +19,7 @@
 #include <linux/percpu.h>
 #include <linux/timer.h>
 #include <linux/timerqueue.h>
+#include <linux/android_kabi.h>
 
 struct hrtimer_clock_base;
 struct hrtimer_cpu_base;
@@ -123,6 +124,8 @@
 	u8				is_rel;
 	u8				is_soft;
 	u8				is_hard;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index cef70d6e1..db16dee 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -10,6 +10,7 @@
 #include <linux/list.h>
 #include <linux/kref.h>
 #include <asm/pgtable.h>
+#include <linux/userfaultfd_k.h>
 
 struct ctl_table;
 struct user_struct;
@@ -89,11 +90,14 @@
 unsigned long hugetlb_total_pages(void);
 vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long address, unsigned int flags);
+#ifdef CONFIG_USERFAULTFD
 int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_mm, pte_t *dst_pte,
 				struct vm_area_struct *dst_vma,
 				unsigned long dst_addr,
 				unsigned long src_addr,
+				enum mcopy_atomic_mode mode,
 				struct page **pagep);
+#endif /* CONFIG_USERFAULTFD */
 int hugetlb_reserve_pages(struct inode *inode, long from, long to,
 						struct vm_area_struct *vma,
 						vm_flags_t vm_flags);
@@ -108,14 +112,15 @@
 u32 hugetlb_fault_mutex_hash(struct hstate *h, struct address_space *mapping,
 				pgoff_t idx);
 
-pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud);
+pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct *vma,
+		      unsigned long addr, pud_t *pud);
 
 extern int sysctl_hugetlb_shm_group;
 extern struct list_head huge_boot_pages;
 
 /* arch callbacks */
 
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz);
 pte_t *huge_pte_offset(struct mm_struct *mm,
 		       unsigned long addr, unsigned long sz);
@@ -140,6 +145,7 @@
 		unsigned long address, unsigned long end, pgprot_t newprot);
 
 bool is_hugetlb_entry_migration(pte_t pte);
+void hugetlb_unshare_all_pmds(struct vm_area_struct *vma);
 
 #else /* !CONFIG_HUGETLB_PAGE */
 
@@ -183,8 +189,10 @@
 #define pud_huge(x)	0
 #define is_hugepage_only_range(mm, addr, len)	0
 #define hugetlb_free_pgd_range(tlb, addr, end, floor, ceiling) ({BUG(); 0; })
+#ifdef CONFIG_USERFAULTFD
 #define hugetlb_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma, dst_addr, \
-				src_addr, pagep)	({ BUG(); 0; })
+				src_addr, mode, pagep)	({ BUG(); 0; })
+#endif /* CONFIG_USERFAULTFD */
 #define huge_pte_offset(mm, address, sz)	0
 
 static inline bool isolate_huge_page(struct page *page, struct list_head *list)
@@ -221,6 +229,8 @@
 	return 0;
 }
 
+static inline void hugetlb_unshare_all_pmds(struct vm_area_struct *vma) { }
+
 #endif /* !CONFIG_HUGETLB_PAGE */
 /*
  * hugepages at page global directory. If arch support
@@ -744,4 +754,14 @@
 	return ptl;
 }
 
+bool want_pmd_share(struct vm_area_struct *vma, unsigned long addr);
+
+#ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE
+/*
+ * ARCHes with special requirements for evicting HUGETLB backing TLB entries can
+ * implement this.
+ */
+#define flush_hugetlb_tlb_range(vma, addr, end)	flush_tlb_range(vma, addr, end)
+#endif
+
 #endif /* _LINUX_HUGETLB_H */
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h
index 624d264..a048586 100644
--- a/include/linux/ieee80211.h
+++ b/include/linux/ieee80211.h
@@ -2060,6 +2060,28 @@
 #define IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR		0x40000000
 #define IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED		0x80000000
 
+/**
+ * ieee80211_he_6ghz_oper - HE 6 GHz operation Information field
+ * @primary: primary channel
+ * @control: control flags
+ * @ccfs0: channel center frequency segment 0
+ * @ccfs1: channel center frequency segment 1
+ * @minrate: minimum rate (in 1 Mbps units)
+ */
+struct ieee80211_he_6ghz_oper {
+	u8 primary;
+#define IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH	0x3
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_20MHZ	0
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_40MHZ	1
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_80MHZ	2
+#define		IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_160MHZ	3
+#define IEEE80211_HE_6GHZ_OPER_CTRL_DUP_BEACON	0x4
+	u8 control;
+	u8 ccfs0;
+	u8 ccfs1;
+	u8 minrate;
+} __packed;
+
 /*
  * ieee80211_he_oper_size - calculate 802.11ax HE Operations IE size
  * @he_oper_ie: byte data of the He Operations IE, stating from the the byte
@@ -2086,7 +2108,7 @@
 	if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
 		oper_len++;
 	if (he_oper_params & IEEE80211_HE_OPERATION_6GHZ_OP_INFO)
-		oper_len += 4;
+		oper_len += sizeof(struct ieee80211_he_6ghz_oper);
 
 	/* Add the first byte (extension ID) to the total length */
 	oper_len++;
@@ -2094,6 +2116,34 @@
 	return oper_len;
 }
 
+/**
+ * ieee80211_he_6ghz_oper - obtain 6 GHz operation field
+ * @he_oper: HE operation element (must be pre-validated for size)
+ *	but may be %NULL
+ *
+ * Return: a pointer to the 6 GHz operation field, or %NULL
+ */
+static inline const struct ieee80211_he_6ghz_oper *
+ieee80211_he_6ghz_oper(const struct ieee80211_he_operation *he_oper)
+{
+	const u8 *ret = (void *)&he_oper->optional;
+	u32 he_oper_params;
+
+	if (!he_oper)
+		return NULL;
+
+	he_oper_params = le32_to_cpu(he_oper->he_oper_params);
+
+	if (!(he_oper_params & IEEE80211_HE_OPERATION_6GHZ_OP_INFO))
+		return NULL;
+	if (he_oper_params & IEEE80211_HE_OPERATION_VHT_OPER_INFO)
+		ret += 3;
+	if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
+		ret++;
+
+	return (void *)ret;
+}
+
 /* HE Spatial Reuse defines */
 #define IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT			0x4
 #define IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT		0x8
@@ -2553,9 +2603,19 @@
 	WLAN_EID_EXT_UORA = 37,
 	WLAN_EID_EXT_HE_MU_EDCA = 38,
 	WLAN_EID_EXT_HE_SPR = 39,
+	WLAN_EID_EXT_NDP_FEEDBACK_REPORT_PARAMSET = 41,
+	WLAN_EID_EXT_BSS_COLOR_CHG_ANN = 42,
+	WLAN_EID_EXT_QUIET_TIME_PERIOD_SETUP = 43,
+	WLAN_EID_EXT_ESS_REPORT = 45,
+	WLAN_EID_EXT_OPS = 46,
+	WLAN_EID_EXT_HE_BSS_LOAD = 47,
 	WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME = 52,
 	WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION = 55,
 	WLAN_EID_EXT_NON_INHERITANCE = 56,
+	WLAN_EID_EXT_KNOWN_BSSID = 57,
+	WLAN_EID_EXT_SHORT_SSID_LIST = 58,
+	WLAN_EID_EXT_HE_6GHZ_CAPA = 59,
+	WLAN_EID_EXT_UL_MU_POWER_CAPA = 60,
 };
 
 /* Action category code */
@@ -3097,6 +3157,24 @@
 	__le16 medium_time;
 } __packed;
 
+struct ieee80211_he_6ghz_capa {
+	/* uses IEEE80211_HE_6GHZ_CAP_* below */
+	__le16 capa;
+} __packed;
+
+/* HE 6 GHz band capabilities */
+/* uses enum ieee80211_min_mpdu_spacing values */
+#define IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START	0x0007
+/* uses enum ieee80211_vht_max_ampdu_length_exp values */
+#define IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP	0x0038
+/* uses IEEE80211_VHT_CAP_MAX_MPDU_LENGTH_* values */
+#define IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN	0x00c0
+/* WLAN_HT_CAP_SM_PS_* values */
+#define IEEE80211_HE_6GHZ_CAP_SM_PS		0x0600
+#define IEEE80211_HE_6GHZ_CAP_RD_RESPONDER	0x0800
+#define IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS	0x1000
+#define IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS	0x2000
+
 /**
  * ieee80211_get_qos_ctl - get pointer to qos control bytes
  * @hdr: the frame
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h
index b68fca0..3515ca6 100644
--- a/include/linux/inetdevice.h
+++ b/include/linux/inetdevice.h
@@ -41,7 +41,7 @@
 	unsigned long		mr_qri;		/* Query Response Interval */
 	unsigned char		mr_qrv;		/* Query Robustness Variable */
 	unsigned char		mr_gq_running;
-	u32			mr_ifc_count;
+	unsigned char		mr_ifc_count;
 	struct timer_list	mr_gq_timer;	/* general query timer */
 	struct timer_list	mr_ifc_timer;	/* interface change timer */
 
diff --git a/include/linux/init.h b/include/linux/init.h
index 212fc9e2..32633ea 100644
--- a/include/linux/init.h
+++ b/include/linux/init.h
@@ -47,7 +47,7 @@
 
 /* These are for everybody (although not all archs will actually
    discard it in modules) */
-#define __init		__section(.init.text) __cold  __latent_entropy __noinitretpoline
+#define __init		__section(.init.text) __cold  __latent_entropy __noinitretpoline __nocfi
 #define __initdata	__section(.init.data)
 #define __initconst	__section(.init.rodata)
 #define __exitdata	__section(.exit.data)
@@ -192,10 +192,32 @@
 	    ".long	" #fn " - .			\n"	\
 	    ".previous					\n");
 #else
-#define ___define_initcall(fn, id, __sec) \
+#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)
 
@@ -236,7 +258,7 @@
 #define __exitcall(fn)						\
 	static exitcall_t __exitcall_##fn __exit_call = fn
 
-#define console_initcall(fn)	___define_initcall(fn,, .con_initcall)
+#define console_initcall(fn)	___define_initcall(fn, con, .con_initcall)
 
 struct obs_kernel_param {
 	const char *str;
diff --git a/include/linux/input.h b/include/linux/input.h
index 94f277c..c65fc02 100644
--- a/include/linux/input.h
+++ b/include/linux/input.h
@@ -7,6 +7,7 @@
 
 #include <linux/time.h>
 #include <linux/list.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/input.h>
 /* Implementation details, userspace should not care about these */
 #define ABS_MT_FIRST		ABS_MT_TOUCH_MAJOR
@@ -201,6 +202,11 @@
 	bool devres_managed;
 
 	ktime_t timestamp[INPUT_CLK_MAX];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define to_input_dev(d) container_of(d, struct input_dev, dev)
 
@@ -320,6 +326,8 @@
 
 	struct list_head	h_list;
 	struct list_head	node;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -346,6 +354,8 @@
 
 	struct list_head	d_node;
 	struct list_head	h_node;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct input_dev __must_check *input_allocate_device(void);
@@ -549,6 +559,9 @@
 
 	int max_effects;
 	struct ff_effect *effects;
+
+	ANDROID_KABI_RESERVE(1);
+
 	struct file *effect_owners[];
 };
 
diff --git a/include/linux/io-pgtable.h b/include/linux/io-pgtable.h
index ec7a134..e1efb2e 100644
--- a/include/linux/io-pgtable.h
+++ b/include/linux/io-pgtable.h
@@ -77,8 +77,8 @@
 	 *	TLB maintenance when mapping as well as when unmapping.
 	 *
 	 * IO_PGTABLE_QUIRK_ARM_MTK_EXT: (ARM v7s format) MediaTek IOMMUs extend
-	 *	to support up to 34 bits PA where the bit32 and bit33 are
-	 *	encoded in the bit9 and bit4 of the PTE respectively.
+	 *	to support up to 35 bits PA where the bit32, bit33 and bit34 are
+	 *	encoded in the bit9, bit4 and bit5 of the PTE respectively.
 	 *
 	 * IO_PGTABLE_QUIRK_NON_STRICT: Skip issuing synchronous leaf TLBIs
 	 *	on unmap, for DMA domains using the flush queue mechanism for
@@ -191,14 +191,16 @@
 
 static inline void io_pgtable_tlb_flush_all(struct io_pgtable *iop)
 {
-	iop->cfg.tlb->tlb_flush_all(iop->cookie);
+	if (iop->cfg.tlb && iop->cfg.tlb->tlb_flush_all)
+		iop->cfg.tlb->tlb_flush_all(iop->cookie);
 }
 
 static inline void
 io_pgtable_tlb_flush_walk(struct io_pgtable *iop, unsigned long iova,
 			  size_t size, size_t granule)
 {
-	iop->cfg.tlb->tlb_flush_walk(iova, size, granule, iop->cookie);
+	if (iop->cfg.tlb && iop->cfg.tlb->tlb_flush_walk)
+		iop->cfg.tlb->tlb_flush_walk(iova, size, granule, iop->cookie);
 }
 
 static inline void
@@ -213,7 +215,7 @@
 			struct iommu_iotlb_gather * gather, unsigned long iova,
 			size_t granule)
 {
-	if (iop->cfg.tlb->tlb_add_page)
+	if (iop->cfg.tlb && iop->cfg.tlb->tlb_add_page)
 		iop->cfg.tlb->tlb_add_page(gather, iova, granule, iop->cookie);
 }
 
diff --git a/include/linux/iomap.h b/include/linux/iomap.h
index 53b16f1..a04c9ff 100644
--- a/include/linux/iomap.h
+++ b/include/linux/iomap.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/mm_types.h>
 #include <linux/blkdev.h>
+#include <linux/android_kabi.h>
 
 struct address_space;
 struct fiemap_extent_info;
@@ -68,6 +69,8 @@
 	void			*inline_data;
 	void			*private; /* filesystem private */
 	const struct iomap_page_ops *page_ops;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline sector_t
@@ -120,6 +123,9 @@
 	 */
 	int (*iomap_end)(struct inode *inode, loff_t pos, loff_t length,
 			ssize_t written, unsigned flags, struct iomap *iomap);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /*
diff --git a/include/linux/iommu.h b/include/linux/iommu.h
index 29bac53..2488dab 100644
--- a/include/linux/iommu.h
+++ b/include/linux/iommu.h
@@ -195,7 +195,7 @@
  * struct iommu_iotlb_gather - Range information for a pending IOTLB flush
  *
  * @start: IOVA representing the start of the range to be flushed
- * @end: IOVA representing the end of the range to be flushed (exclusive)
+ * @end: IOVA representing the end of the range to be flushed (inclusive)
  * @pgsize: The interval at which to perform the flush
  *
  * This structure is intended to be updated by multiple calls to the
@@ -245,6 +245,7 @@
  * @sva_get_pasid: Get PASID associated to a SVA handle
  * @page_response: handle page request response
  * @pgsize_bitmap: bitmap of all possible supported page sizes
+ * @owner: Driver module providing these ops
  */
 struct iommu_ops {
 	bool (*capable)(enum iommu_cap);
@@ -256,11 +257,12 @@
 	int (*attach_dev)(struct iommu_domain *domain, struct device *dev);
 	void (*detach_dev)(struct iommu_domain *domain, struct device *dev);
 	int (*map)(struct iommu_domain *domain, unsigned long iova,
-		   phys_addr_t paddr, size_t size, int prot);
+		   phys_addr_t paddr, size_t size, int prot, gfp_t gfp);
 	size_t (*unmap)(struct iommu_domain *domain, unsigned long iova,
 		     size_t size, struct iommu_iotlb_gather *iotlb_gather);
 	void (*flush_iotlb_all)(struct iommu_domain *domain);
-	void (*iotlb_sync_map)(struct iommu_domain *domain);
+	void (*iotlb_sync_map)(struct iommu_domain *domain, unsigned long iova,
+			       size_t size);
 	void (*iotlb_sync)(struct iommu_domain *domain,
 			   struct iommu_iotlb_gather *iotlb_gather);
 	phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, dma_addr_t iova);
@@ -308,6 +310,7 @@
 			     struct iommu_page_response *msg);
 
 	unsigned long pgsize_bitmap;
+	struct module *owner;
 };
 
 /**
@@ -376,12 +379,19 @@
 int  iommu_device_link(struct iommu_device   *iommu, struct device *link);
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link);
 
-static inline void iommu_device_set_ops(struct iommu_device *iommu,
-					const struct iommu_ops *ops)
+static inline void __iommu_device_set_ops(struct iommu_device *iommu,
+					  const struct iommu_ops *ops)
 {
 	iommu->ops = ops;
 }
 
+#define iommu_device_set_ops(iommu, ops)				\
+do {									\
+	struct iommu_ops *__ops = (struct iommu_ops *)(ops);		\
+	__ops->owner = THIS_MODULE;					\
+	__iommu_device_set_ops(iommu, __ops);				\
+} while (0)
+
 static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
 					   struct fwnode_handle *fwnode)
 {
@@ -421,6 +431,8 @@
 extern struct iommu_domain *iommu_get_dma_domain(struct device *dev);
 extern int iommu_map(struct iommu_domain *domain, unsigned long iova,
 		     phys_addr_t paddr, size_t size, int prot);
+extern int iommu_map_atomic(struct iommu_domain *domain, unsigned long iova,
+			    phys_addr_t paddr, size_t size, int prot);
 extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,
 			  size_t size);
 extern size_t iommu_unmap_fast(struct iommu_domain *domain,
@@ -428,6 +440,9 @@
 			       struct iommu_iotlb_gather *iotlb_gather);
 extern size_t iommu_map_sg(struct iommu_domain *domain, unsigned long iova,
 			   struct scatterlist *sg,unsigned int nents, int prot);
+extern size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				  unsigned long iova, 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 void iommu_set_fault_handler(struct iommu_domain *domain,
 			iommu_fault_handler_t handler, void *token);
@@ -515,7 +530,7 @@
 					       struct iommu_iotlb_gather *gather,
 					       unsigned long iova, size_t size)
 {
-	unsigned long start = iova, end = start + size;
+	unsigned long start = iova, end = start + size - 1;
 
 	/*
 	 * If the new page is disjoint from the current range or is mapped at
@@ -523,7 +538,7 @@
 	 * structure can be rewritten.
 	 */
 	if (gather->pgsize != size ||
-	    end < gather->start || start > gather->end) {
+	    end + 1 < gather->start || start > gather->end + 1) {
 		if (gather->pgsize)
 			iommu_tlb_sync(domain, gather);
 		gather->pgsize = size;
@@ -662,6 +677,13 @@
 	return -ENODEV;
 }
 
+static inline int iommu_map_atomic(struct iommu_domain *domain,
+				   unsigned long iova, phys_addr_t paddr,
+				   size_t size, int prot)
+{
+	return -ENODEV;
+}
+
 static inline size_t iommu_unmap(struct iommu_domain *domain,
 				 unsigned long iova, size_t size)
 {
@@ -682,6 +704,13 @@
 	return 0;
 }
 
+static inline size_t iommu_map_sg_atomic(struct iommu_domain *domain,
+				  unsigned long iova, struct scatterlist *sg,
+				  unsigned int nents, int prot)
+{
+	return 0;
+}
+
 static inline void iommu_flush_tlb_all(struct iommu_domain *domain)
 {
 }
diff --git a/include/linux/ion.h b/include/linux/ion.h
new file mode 100644
index 0000000..80c6fde
--- /dev/null
+++ b/include/linux/ion.h
@@ -0,0 +1,419 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ */
+
+#ifndef _ION_KERNEL_H
+#define _ION_KERNEL_H
+
+#include <linux/dma-buf.h>
+#include <linux/err.h>
+#include <linux/device.h>
+#include <linux/dma-direction.h>
+#include <linux/kref.h>
+#include <linux/mm_types.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/rbtree.h>
+#include <linux/sched.h>
+#include <linux/shrinker.h>
+#include <linux/types.h>
+#include <uapi/linux/ion.h>
+
+/**
+ * struct ion_buffer - metadata for a particular buffer
+ * @list:		element in list of deferred freeable buffers
+ * @heap:		back pointer to the heap the buffer came from
+ * @flags:		buffer specific flags
+ * @private_flags:	internal buffer specific flags
+ * @size:		size of the buffer
+ * @priv_virt:		private data to the buffer representable as
+ *			a void *
+ * @lock:		protects the buffers cnt fields
+ * @kmap_cnt:		number of times the buffer is mapped to the kernel
+ * @vaddr:		the kernel mapping if kmap_cnt is not zero
+ * @sg_table:		the sg table for the buffer
+ * @attachments:	list of devices attached to this buffer
+ */
+struct ion_buffer {
+	struct list_head list;
+	struct ion_heap *heap;
+	unsigned long flags;
+	unsigned long private_flags;
+	size_t size;
+	void *priv_virt;
+	struct mutex lock;
+	int kmap_cnt;
+	void *vaddr;
+	struct sg_table *sg_table;
+	struct list_head attachments;
+};
+
+/**
+ * struct ion_heap_ops - ops to operate on a given heap
+ * @allocate:		allocate memory
+ * @free:		free memory
+ * @get_pool_size:	get pool size in pages
+ *
+ * allocate returns 0 on success, -errno on error.
+ * map_dma and map_kernel return pointer on success, ERR_PTR on
+ * error. @free will be called with ION_PRIV_FLAG_SHRINKER_FREE set in
+ * the buffer's private_flags when called from a shrinker. In that
+ * case, the pages being free'd must be truly free'd back to the
+ * system, not put in a page pool or otherwise cached.
+ */
+struct ion_heap_ops {
+	int (*allocate)(struct ion_heap *heap,
+			struct ion_buffer *buffer, unsigned long len,
+			unsigned long flags);
+	void (*free)(struct ion_buffer *buffer);
+	int (*shrink)(struct ion_heap *heap, gfp_t gfp_mask, int nr_to_scan);
+	long (*get_pool_size)(struct ion_heap *heap);
+};
+
+/**
+ * heap flags - flags between the heaps and core ion code
+ */
+#define ION_HEAP_FLAG_DEFER_FREE BIT(0)
+
+/**
+ * private flags - flags internal to ion
+ */
+/*
+ * Buffer is being freed from a shrinker function. Skip any possible
+ * heap-specific caching mechanism (e.g. page pools). Guarantees that
+ * any buffer storage that came from the system allocator will be
+ * returned to the system allocator.
+ */
+#define ION_PRIV_FLAG_SHRINKER_FREE BIT(0)
+
+/**
+ * struct ion_heap - represents a heap in the system
+ * @node:		rb node to put the heap on the device's tree of heaps
+ * @type:		type of heap
+ * @ops:		ops struct as above
+ * @buf_ops:		dma_buf ops specific to the heap implementation.
+ * @flags:		flags
+ * @id:			id of heap, also indicates priority of this heap when
+ *			allocating.  These are specified by platform data and
+ *			MUST be unique
+ * @name:		used for debugging
+ * @owner:		kernel module that implements this heap
+ * @shrinker:		a shrinker for the heap
+ * @free_list:		free list head if deferred free is used
+ * @free_list_size	size of the deferred free list in bytes
+ * @lock:		protects the free list
+ * @waitqueue:		queue to wait on from deferred free thread
+ * @task:		task struct of deferred free thread
+ * @num_of_buffers	the number of currently allocated buffers
+ * @num_of_alloc_bytes	the number of allocated bytes
+ * @alloc_bytes_wm	the number of allocated bytes watermark
+ *
+ * Represents a pool of memory from which buffers can be made.  In some
+ * systems the only heap is regular system memory allocated via vmalloc.
+ * On others, some blocks might require large physically contiguous buffers
+ * that are allocated from a specially reserved heap.
+ */
+struct ion_heap {
+	struct plist_node node;
+	enum ion_heap_type type;
+	struct ion_heap_ops *ops;
+	struct dma_buf_ops buf_ops;
+	unsigned long flags;
+	unsigned int id;
+	const char *name;
+	struct module *owner;
+
+	/* deferred free support */
+	struct shrinker shrinker;
+	struct list_head free_list;
+	size_t free_list_size;
+	spinlock_t free_lock;
+	wait_queue_head_t waitqueue;
+	struct task_struct *task;
+
+	/* heap statistics */
+	u64 num_of_buffers;
+	u64 num_of_alloc_bytes;
+	u64 alloc_bytes_wm;
+
+	/* protect heap statistics */
+	spinlock_t stat_lock;
+
+	/* heap's debugfs root */
+	struct dentry *debugfs_dir;
+};
+
+#define ion_device_add_heap(heap) __ion_device_add_heap(heap, THIS_MODULE)
+
+/**
+ * struct ion_dma_buf_attachment - hold device-table attachment data for buffer
+ * @dev:	device attached to the buffer.
+ * @table:	cached mapping.
+ * @list:	list of ion_dma_buf_attachment.
+ */
+struct ion_dma_buf_attachment {
+	struct device *dev;
+	struct sg_table *table;
+	struct list_head list;
+	bool mapped:1;
+};
+
+#ifdef CONFIG_ION
+
+/**
+ * __ion_device_add_heap - adds a heap to the ion device
+ *
+ * @heap:               the heap to add
+ *
+ * Returns 0 on success, negative error otherwise.
+ */
+int __ion_device_add_heap(struct ion_heap *heap, struct module *owner);
+
+/**
+ * ion_device_remove_heap - removes a heap from ion device
+ *
+ * @heap:		pointer to the heap to be removed
+ */
+void ion_device_remove_heap(struct ion_heap *heap);
+
+/**
+ * ion_heap_init_shrinker
+ * @heap:		the heap
+ *
+ * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag or defines the shrink op
+ * this function will be called to setup a shrinker to shrink the freelists
+ * and call the heap's shrink op.
+ */
+int ion_heap_init_shrinker(struct ion_heap *heap);
+
+/**
+ * ion_heap_init_deferred_free -- initialize deferred free functionality
+ * @heap:		the heap
+ *
+ * If a heap sets the ION_HEAP_FLAG_DEFER_FREE flag this function will
+ * be called to setup deferred frees. Calls to free the buffer will
+ * return immediately and the actual free will occur some time later
+ */
+int ion_heap_init_deferred_free(struct ion_heap *heap);
+
+/**
+ * ion_heap_freelist_add - add a buffer to the deferred free list
+ * @heap:		the heap
+ * @buffer:		the buffer
+ *
+ * Adds an item to the deferred freelist.
+ */
+void ion_heap_freelist_add(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_freelist_drain - drain the deferred free list
+ * @heap:		the heap
+ * @size:		amount of memory to drain in bytes
+ *
+ * Drains the indicated amount of memory from the deferred freelist immediately.
+ * Returns the total amount freed.  The total freed may be higher depending
+ * on the size of the items in the list, or lower if there is insufficient
+ * total memory on the freelist.
+ */
+size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size);
+
+/**
+ * ion_heap_freelist_shrink - drain the deferred free
+ *				list, skipping any heap-specific
+ *				pooling or caching mechanisms
+ *
+ * @heap:		the heap
+ * @size:		amount of memory to drain in bytes
+ *
+ * Drains the indicated amount of memory from the deferred freelist immediately.
+ * Returns the total amount freed.  The total freed may be higher depending
+ * on the size of the items in the list, or lower if there is insufficient
+ * total memory on the freelist.
+ *
+ * Unlike with @ion_heap_freelist_drain, don't put any pages back into
+ * page pools or otherwise cache the pages. Everything must be
+ * genuinely free'd back to the system. If you're free'ing from a
+ * shrinker you probably want to use this. Note that this relies on
+ * the heap.ops.free callback honoring the ION_PRIV_FLAG_SHRINKER_FREE
+ * flag.
+ */
+size_t ion_heap_freelist_shrink(struct ion_heap *heap,
+				size_t size);
+
+/**
+ * ion_heap_freelist_size - returns the size of the freelist in bytes
+ * @heap:		the heap
+ */
+size_t ion_heap_freelist_size(struct ion_heap *heap);
+
+/**
+ * ion_heap_map_kernel - map the ion_buffer in kernel virtual address space.
+ *
+ * @heap:               the heap
+ * @buffer:             buffer to be mapped
+ *
+ * Maps the buffer using vmap(). The function respects cache flags for the
+ * buffer and creates the page table entries accordingly. Returns virtual
+ * address at the beginning of the buffer or ERR_PTR.
+ */
+void *ion_heap_map_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_unmap_kernel - unmap ion_buffer
+ *
+ * @buffer:             buffer to be unmapped
+ *
+ * ION wrapper for vunmap() of the ion buffer.
+ */
+void ion_heap_unmap_kernel(struct ion_heap *heap, struct ion_buffer *buffer);
+
+/**
+ * ion_heap_map_user - map given ion buffer in provided vma
+ *
+ * @heap:               the heap this buffer belongs to
+ * @buffer:             Ion buffer to be mapped
+ * @vma:                vma of the process where buffer should be mapped.
+ *
+ * Maps the buffer using remap_pfn_range() into specific process's vma starting
+ * with vma->vm_start. The vma size is expected to be >= ion buffer size.
+ * If not, a partial buffer mapping may be created. Returns 0 on success.
+ */
+int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
+		      struct vm_area_struct *vma);
+
+/* ion_buffer_zero - zeroes out an ion buffer respecting the ION_FLAGs.
+ *
+ * @buffer:		ion_buffer to zero
+ *
+ * Returns 0 on success, negative error otherwise.
+ */
+int ion_buffer_zero(struct ion_buffer *buffer);
+
+/**
+ * ion_buffer_prep_noncached - flush cache before non-cached mapping
+ *
+ * @buffer:		ion_buffer to flush
+ *
+ * The memory allocated by the heap could be in the CPU cache. To map
+ * this memory as non-cached, we need to flush the associated cache
+ * first. Without the flush, it is possible for stale dirty cache lines
+ * to be evicted after the ION client started writing into this buffer,
+ * leading to data corruption.
+ */
+void ion_buffer_prep_noncached(struct ion_buffer *buffer);
+
+/**
+ * ion_alloc - Allocates an ion buffer of given size from given heap
+ *
+ * @len:               size of the buffer to be allocated.
+ * @heap_id_mask:      a bitwise maks of heap ids to allocate from
+ * @flags:             ION_BUFFER_XXXX flags for the new buffer.
+ *
+ * The function exports a dma_buf object for the new ion buffer internally
+ * and returns that to the caller. So, the buffer is ready to be used by other
+ * drivers immediately. Returns ERR_PTR in case of failure.
+ */
+struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+			  unsigned int flags);
+
+/**
+ * ion_free - Releases the ion buffer.
+ *
+ * @buffer:             ion buffer to be released
+ */
+int ion_free(struct ion_buffer *buffer);
+
+/**
+ * ion_query_heaps_kernel - Returns information about available heaps to
+ * in-kernel clients.
+ *
+ * @hdata:             pointer to array of struct ion_heap_data.
+ * @size:             size of @hdata array.
+ *
+ * Returns the number of available heaps and populates @hdata with information
+ * regarding the same. When invoked with @size as 0, the function with return
+ * the number of available heaps without modifying @hdata. When the number of
+ * available heaps is higher than @size, @size is returned instead of the
+ * actual number of available heaps.
+ */
+
+size_t ion_query_heaps_kernel(struct ion_heap_data *hdata, size_t size);
+#else
+
+static inline int __ion_device_add_heap(struct ion_heap *heap,
+				      struct module *owner)
+{
+	return -ENODEV;
+}
+
+static inline int ion_heap_init_shrinker(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline int ion_heap_init_deferred_free(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline void ion_heap_freelist_add(struct ion_heap *heap,
+					 struct ion_buffer *buffer) {}
+
+static inline size_t ion_heap_freelist_drain(struct ion_heap *heap, size_t size)
+{
+	return -ENODEV;
+}
+
+static inline size_t ion_heap_freelist_shrink(struct ion_heap *heap,
+					      size_t size)
+{
+	return -ENODEV;
+}
+
+static inline size_t ion_heap_freelist_size(struct ion_heap *heap)
+{
+	return -ENODEV;
+}
+
+static inline void *ion_heap_map_kernel(struct ion_heap *heap,
+					struct ion_buffer *buffer)
+{
+	return ERR_PTR(-ENODEV);
+}
+
+static inline void ion_heap_unmap_kernel(struct ion_heap *heap,
+					 struct ion_buffer *buffer) {}
+
+static inline int ion_heap_map_user(struct ion_heap *heap,
+				    struct ion_buffer *buffer,
+				    struct vm_area_struct *vma)
+{
+	return -ENODEV;
+}
+
+static inline int ion_buffer_zero(struct ion_buffer *buffer)
+{
+	return -EINVAL;
+}
+
+static inline void ion_buffer_prep_noncached(struct ion_buffer *buffer) {}
+
+static inline struct dma_buf *ion_alloc(size_t len, unsigned int heap_id_mask,
+					unsigned int flags)
+{
+	return ERR_PTR(-ENOMEM);
+}
+
+static inline int ion_free(struct ion_buffer *buffer)
+{
+	return 0;
+}
+
+static inline size_t ion_query_heaps_kernel(struct ion_heap_data *hdata,
+					 size_t size)
+{
+	return 0;
+}
+#endif /* CONFIG_ION */
+#endif /* _ION_KERNEL_H */
diff --git a/include/linux/ioport.h b/include/linux/ioport.h
index fdc201d..692e2c5 100644
--- a/include/linux/ioport.h
+++ b/include/linux/ioport.h
@@ -13,6 +13,7 @@
 #include <linux/compiler.h>
 #include <linux/types.h>
 #include <linux/bits.h>
+#include <linux/android_kabi.h>
 /*
  * Resources are tree-like, allowing
  * nesting etc..
@@ -24,6 +25,11 @@
 	unsigned long flags;
 	unsigned long desc;
 	struct resource *parent, *sibling, *child;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
diff --git a/include/linux/iova.h b/include/linux/iova.h
index a0637ab..58713bb 100644
--- a/include/linux/iova.h
+++ b/include/linux/iova.h
@@ -95,6 +95,7 @@
 						   flush-queues */
 	atomic_t fq_timer_on;			/* 1 when timer is active, 0
 						   when not */
+	bool best_fit;
 };
 
 static inline unsigned long iova_size(struct iova *iova)
diff --git a/include/linux/ipv6.h b/include/linux/ipv6.h
index bbe297b..4ef9459 100644
--- a/include/linux/ipv6.h
+++ b/include/linux/ipv6.h
@@ -3,6 +3,7 @@
 #define _IPV6_H
 
 #include <uapi/linux/ipv6.h>
+#include <linux/android_kabi.h>
 
 #define ipv6_optlen(p)  (((p)->hdrlen+1) << 3)
 #define ipv6_authlen(p) (((p)->hdrlen+2) << 2)
@@ -42,6 +43,7 @@
 	__s32		accept_ra_rt_info_max_plen;
 #endif
 #endif
+	__s32		accept_ra_rt_table;
 	__s32		proxy_ndp;
 	__s32		accept_source_route;
 	__s32		accept_ra_from_local;
@@ -76,6 +78,11 @@
 	__s32           ndisc_tclass;
 
 	struct ctl_table_header *sysctl_header;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct ipv6_params {
diff --git a/include/linux/irq.h b/include/linux/irq.h
index 5655da9e..bff0768 100644
--- a/include/linux/irq.h
+++ b/include/linux/irq.h
@@ -71,6 +71,7 @@
  *				  it from the spurious interrupt detection
  *				  mechanism and from core side polling.
  * IRQ_DISABLE_UNLAZY		- Disable lazy irq disable
+ * IRQ_HIDDEN			- Don't show up in /proc/interrupts
  */
 enum {
 	IRQ_TYPE_NONE		= 0x00000000,
@@ -97,13 +98,14 @@
 	IRQ_PER_CPU_DEVID	= (1 << 17),
 	IRQ_IS_POLLED		= (1 << 18),
 	IRQ_DISABLE_UNLAZY	= (1 << 19),
+	IRQ_HIDDEN		= (1 << 20),
 };
 
 #define IRQF_MODIFY_MASK	\
 	(IRQ_TYPE_SENSE_MASK | IRQ_NOPROBE | IRQ_NOREQUEST | \
 	 IRQ_NOAUTOEN | IRQ_MOVE_PCNTXT | IRQ_LEVEL | IRQ_NO_BALANCING | \
 	 IRQ_PER_CPU | IRQ_NESTED_THREAD | IRQ_NOTHREAD | IRQ_PER_CPU_DEVID | \
-	 IRQ_IS_POLLED | IRQ_DISABLE_UNLAZY)
+	 IRQ_IS_POLLED | IRQ_DISABLE_UNLAZY | IRQ_HIDDEN)
 
 #define IRQ_NO_BALANCING_MASK	(IRQ_PER_CPU | IRQ_NO_BALANCING)
 
@@ -625,6 +627,7 @@
  */
 extern void handle_level_irq(struct irq_desc *desc);
 extern void handle_fasteoi_irq(struct irq_desc *desc);
+extern void handle_percpu_devid_fasteoi_ipi(struct irq_desc *desc);
 extern void handle_edge_irq(struct irq_desc *desc);
 extern void handle_edge_eoi_irq(struct irq_desc *desc);
 extern void handle_simple_irq(struct irq_desc *desc);
@@ -643,6 +646,12 @@
 #ifdef	CONFIG_IRQ_DOMAIN_HIERARCHY
 extern void handle_fasteoi_ack_irq(struct irq_desc *desc);
 extern void handle_fasteoi_mask_irq(struct irq_desc *desc);
+extern int irq_chip_set_parent_state(struct irq_data *data,
+				     enum irqchip_irq_state which,
+				     bool val);
+extern int irq_chip_get_parent_state(struct irq_data *data,
+				     enum irqchip_irq_state which,
+				     bool *state);
 extern void irq_chip_enable_parent(struct irq_data *data);
 extern void irq_chip_disable_parent(struct irq_data *data);
 extern void irq_chip_ack_parent(struct irq_data *data);
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index 824d7a1..add3408 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -35,6 +35,7 @@
 #include <linux/of.h>
 #include <linux/mutex.h>
 #include <linux/radix-tree.h>
+#include <linux/android_kabi.h>
 
 struct device_node;
 struct irq_domain;
@@ -83,6 +84,7 @@
 	DOMAIN_BUS_IPI,
 	DOMAIN_BUS_FSL_MC_MSI,
 	DOMAIN_BUS_TI_SCI_INTA_MSI,
+	DOMAIN_BUS_WAKEUP,
 };
 
 /**
@@ -176,6 +178,11 @@
 	struct dentry		*debugfs_file;
 #endif
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	/* reverse map data. The linear map gets appended to the irq_domain */
 	irq_hw_number_t hwirq_max;
 	unsigned int revmap_direct_max_irq;
diff --git a/include/linux/jiffies.h b/include/linux/jiffies.h
index 1b6d31d..235f94c 100644
--- a/include/linux/jiffies.h
+++ b/include/linux/jiffies.h
@@ -8,6 +8,7 @@
 #include <linux/types.h>
 #include <linux/time.h>
 #include <linux/timex.h>
+#include <vdso/jiffies.h>
 #include <asm/param.h>			/* for HZ */
 #include <generated/timeconst.h>
 
@@ -59,9 +60,6 @@
 
 extern int register_refined_jiffies(long clock_tick_rate);
 
-/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
-#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
-
 /* TICK_USEC is the time between ticks in usec assuming SHIFTED_HZ */
 #define TICK_USEC ((USEC_PER_SEC + HZ/2) / HZ)
 
diff --git a/include/linux/kallsyms.h b/include/linux/kallsyms.h
index 1f96ce2..a45f5c0b 100644
--- a/include/linux/kallsyms.h
+++ b/include/linux/kallsyms.h
@@ -14,7 +14,7 @@
 
 #include <asm/sections.h>
 
-#define KSYM_NAME_LEN 128
+#define KSYM_NAME_LEN 192
 #define KSYM_SYMBOL_LEN (sizeof("%s+%#lx/%#lx [%s]") + (KSYM_NAME_LEN - 1) + \
 			 2*(BITS_PER_LONG*3/10) + (MODULE_NAME_LEN - 1) + 1)
 
diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index cc8fa10..9d12c97 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -2,6 +2,8 @@
 #ifndef __LINUX_KCONFIG_H
 #define __LINUX_KCONFIG_H
 
+/* CONFIG_CC_VERSION_TEXT (Do not delete this comment. See help in Kconfig) */
+
 #include <generated/autoconf.h>
 
 #ifdef CONFIG_CPU_BIG_ENDIAN
diff --git a/include/linux/kcov.h b/include/linux/kcov.h
index b76a180..a10e847 100644
--- a/include/linux/kcov.h
+++ b/include/linux/kcov.h
@@ -37,12 +37,35 @@
 	(t)->kcov_mode &= ~KCOV_IN_CTXSW;	\
 } while (0)
 
+/* See Documentation/dev-tools/kcov.rst for usage details. */
+void kcov_remote_start(u64 handle);
+void kcov_remote_stop(void);
+u64 kcov_common_handle(void);
+
+static inline void kcov_remote_start_common(u64 id)
+{
+	kcov_remote_start(kcov_remote_handle(KCOV_SUBSYSTEM_COMMON, id));
+}
+
+static inline void kcov_remote_start_usb(u64 id)
+{
+	kcov_remote_start(kcov_remote_handle(KCOV_SUBSYSTEM_USB, id));
+}
+
 #else
 
 static inline void kcov_task_init(struct task_struct *t) {}
 static inline void kcov_task_exit(struct task_struct *t) {}
 static inline void kcov_prepare_switch(struct task_struct *t) {}
 static inline void kcov_finish_switch(struct task_struct *t) {}
+static inline void kcov_remote_start(u64 handle) {}
+static inline void kcov_remote_stop(void) {}
+static inline u64 kcov_common_handle(void)
+{
+	return 0;
+}
+static inline void kcov_remote_start_common(u64 id) {}
+static inline void kcov_remote_start_usb(u64 id) {}
 
 #endif /* CONFIG_KCOV */
 #endif /* _LINUX_KCOV_H */
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h
index f797ccc..0a9c15a 100644
--- a/include/linux/kernfs.h
+++ b/include/linux/kernfs.h
@@ -16,6 +16,7 @@
 #include <linux/atomic.h>
 #include <linux/uidgid.h>
 #include <linux/wait.h>
+#include <linux/android_kabi.h>
 
 struct file;
 struct dentry;
@@ -159,6 +160,8 @@
 	unsigned short		flags;
 	umode_t			mode;
 	struct kernfs_iattrs	*iattr;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -178,6 +181,11 @@
 		      const char *new_name);
 	int (*show_path)(struct seq_file *sf, struct kernfs_node *kn,
 			 struct kernfs_root *root);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct kernfs_root {
@@ -195,6 +203,8 @@
 	struct list_head	supers;
 
 	wait_queue_head_t	deactivate_waitq;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct kernfs_open_file {
@@ -215,6 +225,8 @@
 	bool			mmapped:1;
 	bool			released:1;
 	const struct vm_operations_struct *vm_ops;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct kernfs_ops {
@@ -271,6 +283,9 @@
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 	struct lock_class_key	lockdep_key;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /*
diff --git a/include/linux/key-type.h b/include/linux/key-type.h
index 2ab2d6d..5e85fe0 100644
--- a/include/linux/key-type.h
+++ b/include/linux/key-type.h
@@ -10,6 +10,7 @@
 
 #include <linux/key.h>
 #include <linux/errno.h>
+#include <linux/android_kabi.h>
 
 #ifdef CONFIG_KEYS
 
@@ -155,6 +156,9 @@
 	int (*asym_verify_signature)(struct kernel_pkey_params *params,
 				     const void *in, const void *in2);
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/* internal fields */
 	struct list_head	link;		/* link in types list */
 	struct lock_class_key	lock_class;	/* key->sem lock class */
diff --git a/include/linux/keyslot-manager.h b/include/linux/keyslot-manager.h
new file mode 100644
index 0000000..2eb44e2
--- /dev/null
+++ b/include/linux/keyslot-manager.h
@@ -0,0 +1,147 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+
+#ifndef __LINUX_KEYSLOT_MANAGER_H
+#define __LINUX_KEYSLOT_MANAGER_H
+
+#include <linux/bio.h>
+#include <linux/blk-crypto.h>
+
+/* Inline crypto feature bits.  Must set at least one. */
+enum {
+	/* Support for standard software-specified keys */
+	BLK_CRYPTO_FEATURE_STANDARD_KEYS = BIT(0),
+
+	/* Support for hardware-wrapped keys */
+	BLK_CRYPTO_FEATURE_WRAPPED_KEYS = BIT(1),
+};
+
+struct blk_keyslot_manager;
+
+/**
+ * struct blk_ksm_ll_ops - functions to manage keyslots in hardware
+ * @keyslot_program:	Program the specified key into the specified slot in the
+ *			inline encryption hardware.
+ * @keyslot_evict:	Evict key from the specified keyslot in the hardware.
+ *			The key is provided so that e.g. dm layers can evict
+ *			keys from the devices that they map over.
+ *			Returns 0 on success, -errno otherwise.
+ * @derive_raw_secret:	(Optional) Derive a software secret from a
+ *			hardware-wrapped key.  Returns 0 on success, -EOPNOTSUPP
+ *			if unsupported on the hardware, or another -errno code.
+ *
+ * This structure should be provided by storage device drivers when they set up
+ * a keyslot manager - this structure holds the function ptrs that the keyslot
+ * manager will use to manipulate keyslots in the hardware.
+ */
+struct blk_ksm_ll_ops {
+	int (*keyslot_program)(struct blk_keyslot_manager *ksm,
+			       const struct blk_crypto_key *key,
+			       unsigned int slot);
+	int (*keyslot_evict)(struct blk_keyslot_manager *ksm,
+			     const struct blk_crypto_key *key,
+			     unsigned int slot);
+	int (*derive_raw_secret)(struct blk_keyslot_manager *ksm,
+				 const u8 *wrapped_key,
+				 unsigned int wrapped_key_size,
+				 u8 *secret, unsigned int secret_size);
+};
+
+struct blk_keyslot_manager {
+	/*
+	 * The struct blk_ksm_ll_ops that this keyslot manager will use
+	 * to perform operations like programming and evicting keys on the
+	 * device
+	 */
+	struct blk_ksm_ll_ops ksm_ll_ops;
+
+	/*
+	 * The maximum number of bytes supported for specifying the data unit
+	 * number.
+	 */
+	unsigned int max_dun_bytes_supported;
+
+	/*
+	 * The supported features as a bitmask of BLK_CRYPTO_FEATURE_* flags.
+	 * Most drivers should set BLK_CRYPTO_FEATURE_STANDARD_KEYS here.
+	 */
+	unsigned int features;
+
+	/*
+	 * Array of size BLK_ENCRYPTION_MODE_MAX of bitmasks that represents
+	 * whether a crypto mode and data unit size are supported. The i'th
+	 * bit of crypto_mode_supported[crypto_mode] is set iff a data unit
+	 * size of (1 << i) is supported. We only support data unit sizes
+	 * that are powers of 2.
+	 */
+	unsigned int crypto_modes_supported[BLK_ENCRYPTION_MODE_MAX];
+
+	/* Device for runtime power management (NULL if none) */
+	struct device *dev;
+
+	/* Here onwards are *private* fields for internal keyslot manager use */
+
+	unsigned int num_slots;
+
+	/* Protects programming and evicting keys from the device */
+	struct rw_semaphore lock;
+
+	/* List of idle slots, with least recently used slot at front */
+	wait_queue_head_t idle_slots_wait_queue;
+	struct list_head idle_slots;
+	spinlock_t idle_slots_lock;
+
+	/*
+	 * Hash table which maps struct *blk_crypto_key to keyslots, so that we
+	 * can find a key's keyslot in O(1) time rather than O(num_slots).
+	 * Protected by 'lock'.
+	 */
+	struct hlist_head *slot_hashtable;
+	unsigned int log_slot_ht_size;
+
+	/* Per-keyslot data */
+	struct blk_ksm_keyslot *slots;
+};
+
+int blk_ksm_init(struct blk_keyslot_manager *ksm, unsigned int num_slots);
+
+int devm_blk_ksm_init(struct device *dev, struct blk_keyslot_manager *ksm,
+		      unsigned int num_slots);
+
+blk_status_t blk_ksm_get_slot_for_key(struct blk_keyslot_manager *ksm,
+				      const struct blk_crypto_key *key,
+				      struct blk_ksm_keyslot **slot_ptr);
+
+unsigned int blk_ksm_get_slot_idx(struct blk_ksm_keyslot *slot);
+
+void blk_ksm_put_slot(struct blk_ksm_keyslot *slot);
+
+bool blk_ksm_crypto_cfg_supported(struct blk_keyslot_manager *ksm,
+				  const struct blk_crypto_config *cfg);
+
+int blk_ksm_evict_key(struct blk_keyslot_manager *ksm,
+		      const struct blk_crypto_key *key);
+
+void blk_ksm_reprogram_all_keys(struct blk_keyslot_manager *ksm);
+
+void blk_ksm_destroy(struct blk_keyslot_manager *ksm);
+
+int blk_ksm_derive_raw_secret(struct blk_keyslot_manager *ksm,
+			      const u8 *wrapped_key,
+			      unsigned int wrapped_key_size,
+			      u8 *secret, unsigned int secret_size);
+
+void blk_ksm_intersect_modes(struct blk_keyslot_manager *parent,
+			     const struct blk_keyslot_manager *child);
+
+void blk_ksm_init_passthrough(struct blk_keyslot_manager *ksm);
+
+bool blk_ksm_is_superset(struct blk_keyslot_manager *ksm_superset,
+			 struct blk_keyslot_manager *ksm_subset);
+
+void blk_ksm_update_capabilities(struct blk_keyslot_manager *target_ksm,
+				 struct blk_keyslot_manager *reference_ksm);
+
+#endif /* __LINUX_KEYSLOT_MANAGER_H */
diff --git a/include/linux/kfence.h b/include/linux/kfence.h
new file mode 100644
index 0000000..3fe6dd8
--- /dev/null
+++ b/include/linux/kfence.h
@@ -0,0 +1,223 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Kernel Electric-Fence (KFENCE). Public interface for allocator and fault
+ * handler integration. For more info see Documentation/dev-tools/kfence.rst.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef _LINUX_KFENCE_H
+#define _LINUX_KFENCE_H
+
+#include <linux/mm.h>
+#include <linux/types.h>
+
+#ifdef CONFIG_KFENCE
+
+/*
+ * We allocate an even number of pages, as it simplifies calculations to map
+ * address to metadata indices; effectively, the very first page serves as an
+ * extended guard page, but otherwise has no special purpose.
+ */
+#define KFENCE_POOL_SIZE ((CONFIG_KFENCE_NUM_OBJECTS + 1) * 2 * PAGE_SIZE)
+extern char *__kfence_pool;
+
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+#include <linux/static_key.h>
+DECLARE_STATIC_KEY_FALSE(kfence_allocation_key);
+#else
+#include <linux/atomic.h>
+extern atomic_t kfence_allocation_gate;
+#endif
+
+/**
+ * is_kfence_address() - check if an address belongs to KFENCE pool
+ * @addr: address to check
+ *
+ * Return: true or false depending on whether the address is within the KFENCE
+ * object range.
+ *
+ * KFENCE objects live in a separate page range and are not to be intermixed
+ * with regular heap objects (e.g. KFENCE objects must never be added to the
+ * allocator freelists). Failing to do so may and will result in heap
+ * corruptions, therefore is_kfence_address() must be used to check whether
+ * an object requires specific handling.
+ *
+ * Note: This function may be used in fast-paths, and is performance critical.
+ * Future changes should take this into account; for instance, we want to avoid
+ * introducing another load and therefore need to keep KFENCE_POOL_SIZE a
+ * constant (until immediate patching support is added to the kernel).
+ */
+static __always_inline bool is_kfence_address(const void *addr)
+{
+	/*
+	 * The __kfence_pool != NULL check is required to deal with the case
+	 * where __kfence_pool == NULL && addr < KFENCE_POOL_SIZE. Keep it in
+	 * the slow-path after the range-check!
+	 */
+	return unlikely((unsigned long)((char *)addr - __kfence_pool) < KFENCE_POOL_SIZE && __kfence_pool);
+}
+
+/**
+ * kfence_alloc_pool() - allocate the KFENCE pool via memblock
+ */
+void __init kfence_alloc_pool(void);
+
+/**
+ * kfence_init() - perform KFENCE initialization at boot time
+ *
+ * Requires that kfence_alloc_pool() was called before. This sets up the
+ * allocation gate timer, and requires that workqueues are available.
+ */
+void __init kfence_init(void);
+
+/**
+ * kfence_shutdown_cache() - handle shutdown_cache() for KFENCE objects
+ * @s: cache being shut down
+ *
+ * Before shutting down a cache, one must ensure there are no remaining objects
+ * allocated from it. Because KFENCE objects are not referenced from the cache
+ * directly, we need to check them here.
+ *
+ * Note that shutdown_cache() is internal to SL*B, and kmem_cache_destroy() does
+ * not return if allocated objects still exist: it prints an error message and
+ * simply aborts destruction of a cache, leaking memory.
+ *
+ * If the only such objects are KFENCE objects, we will not leak the entire
+ * cache, but instead try to provide more useful debug info by making allocated
+ * objects "zombie allocations". Objects may then still be used or freed (which
+ * is handled gracefully), but usage will result in showing KFENCE error reports
+ * which include stack traces to the user of the object, the original allocation
+ * site, and caller to shutdown_cache().
+ */
+void kfence_shutdown_cache(struct kmem_cache *s);
+
+/*
+ * Allocate a KFENCE object. Allocators must not call this function directly,
+ * use kfence_alloc() instead.
+ */
+void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags);
+
+/**
+ * kfence_alloc() - allocate a KFENCE object with a low probability
+ * @s:     struct kmem_cache with object requirements
+ * @size:  exact size of the object to allocate (can be less than @s->size
+ *         e.g. for kmalloc caches)
+ * @flags: GFP flags
+ *
+ * Return:
+ * * NULL     - must proceed with allocating as usual,
+ * * non-NULL - pointer to a KFENCE object.
+ *
+ * kfence_alloc() should be inserted into the heap allocation fast path,
+ * allowing it to transparently return KFENCE-allocated objects with a low
+ * probability using a static branch (the probability is controlled by the
+ * kfence.sample_interval boot parameter).
+ */
+static __always_inline void *kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
+{
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+	if (static_branch_unlikely(&kfence_allocation_key))
+#else
+	if (unlikely(!atomic_read(&kfence_allocation_gate)))
+#endif
+		return __kfence_alloc(s, size, flags);
+	return NULL;
+}
+
+/**
+ * kfence_ksize() - get actual amount of memory allocated for a KFENCE object
+ * @addr: pointer to a heap object
+ *
+ * Return:
+ * * 0     - not a KFENCE object, must call __ksize() instead,
+ * * non-0 - this many bytes can be accessed without causing a memory error.
+ *
+ * kfence_ksize() returns the number of bytes requested for a KFENCE object at
+ * allocation time. This number may be less than the object size of the
+ * corresponding struct kmem_cache.
+ */
+size_t kfence_ksize(const void *addr);
+
+/**
+ * kfence_object_start() - find the beginning of a KFENCE object
+ * @addr: address within a KFENCE-allocated object
+ *
+ * Return: address of the beginning of the object.
+ *
+ * SL[AU]B-allocated objects are laid out within a page one by one, so it is
+ * easy to calculate the beginning of an object given a pointer inside it and
+ * the object size. The same is not true for KFENCE, which places a single
+ * object at either end of the page. This helper function is used to find the
+ * beginning of a KFENCE-allocated object.
+ */
+void *kfence_object_start(const void *addr);
+
+/**
+ * __kfence_free() - release a KFENCE heap object to KFENCE pool
+ * @addr: object to be freed
+ *
+ * Requires: is_kfence_address(addr)
+ *
+ * Release a KFENCE object and mark it as freed.
+ */
+void __kfence_free(void *addr);
+
+/**
+ * kfence_free() - try to release an arbitrary heap object to KFENCE pool
+ * @addr: object to be freed
+ *
+ * Return:
+ * * false - object doesn't belong to KFENCE pool and was ignored,
+ * * true  - object was released to KFENCE pool.
+ *
+ * Release a KFENCE object and mark it as freed. May be called on any object,
+ * even non-KFENCE objects, to simplify integration of the hooks into the
+ * allocator's free codepath. The allocator must check the return value to
+ * determine if it was a KFENCE object or not.
+ */
+static __always_inline __must_check bool kfence_free(void *addr)
+{
+	if (!is_kfence_address(addr))
+		return false;
+	__kfence_free(addr);
+	return true;
+}
+
+/**
+ * kfence_handle_page_fault() - perform page fault handling for KFENCE pages
+ * @addr: faulting address
+ * @is_write: is access a write
+ * @regs: current struct pt_regs (can be NULL, but shows full stack trace)
+ *
+ * Return:
+ * * false - address outside KFENCE pool,
+ * * true  - page fault handled by KFENCE, no additional handling required.
+ *
+ * A page fault inside KFENCE pool indicates a memory error, such as an
+ * out-of-bounds access, a use-after-free or an invalid memory access. In these
+ * cases KFENCE prints an error message and marks the offending page as
+ * present, so that the kernel can proceed.
+ */
+bool __must_check kfence_handle_page_fault(unsigned long addr, bool is_write, struct pt_regs *regs);
+
+#else /* CONFIG_KFENCE */
+
+static inline bool is_kfence_address(const void *addr) { return false; }
+static inline void kfence_alloc_pool(void) { }
+static inline void kfence_init(void) { }
+static inline void kfence_shutdown_cache(struct kmem_cache *s) { }
+static inline void *kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags) { return NULL; }
+static inline size_t kfence_ksize(const void *addr) { return 0; }
+static inline void *kfence_object_start(const void *addr) { return NULL; }
+static inline void __kfence_free(void *addr) { }
+static inline bool __must_check kfence_free(void *addr) { return false; }
+static inline bool __must_check kfence_handle_page_fault(unsigned long addr, bool is_write,
+							 struct pt_regs *regs)
+{
+	return false;
+}
+
+#endif
+
+#endif /* _LINUX_KFENCE_H */
diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
index 2e7a1e0..3378bcb 100644
--- a/include/linux/kmsg_dump.h
+++ b/include/linux/kmsg_dump.h
@@ -25,9 +25,8 @@
 	KMSG_DUMP_PANIC,
 	KMSG_DUMP_OOPS,
 	KMSG_DUMP_EMERG,
-	KMSG_DUMP_RESTART,
-	KMSG_DUMP_HALT,
-	KMSG_DUMP_POWEROFF,
+	KMSG_DUMP_SHUTDOWN,
+	KMSG_DUMP_MAX
 };
 
 /**
@@ -71,6 +70,8 @@
 int kmsg_dump_register(struct kmsg_dumper *dumper);
 
 int kmsg_dump_unregister(struct kmsg_dumper *dumper);
+
+const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason);
 #else
 static inline void kmsg_dump(enum kmsg_dump_reason reason)
 {
@@ -112,6 +113,11 @@
 {
 	return -EINVAL;
 }
+
+static inline const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
+{
+	return "Disabled";
+}
 #endif
 
 #endif /* _LINUX_KMSG_DUMP_H */
diff --git a/include/linux/kobject.h b/include/linux/kobject.h
index e2ca0a2..f249c00 100644
--- a/include/linux/kobject.h
+++ b/include/linux/kobject.h
@@ -27,6 +27,7 @@
 #include <linux/atomic.h>
 #include <linux/workqueue.h>
 #include <linux/uidgid.h>
+#include <linux/android_kabi.h>
 
 #define UEVENT_HELPER_PATH_LEN		256
 #define UEVENT_NUM_ENVP			32	/* number of env pointers */
@@ -78,6 +79,11 @@
 	unsigned int state_add_uevent_sent:1;
 	unsigned int state_remove_uevent_sent:1;
 	unsigned int uevent_suppress:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern __printf(2, 3)
@@ -144,6 +150,11 @@
 	const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
 	const void *(*namespace)(struct kobject *kobj);
 	void (*get_ownership)(struct kobject *kobj, kuid_t *uid, kgid_t *gid);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct kobj_uevent_env {
@@ -195,6 +206,11 @@
 	spinlock_t list_lock;
 	struct kobject kobj;
 	const struct kset_uevent_ops *uevent_ops;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 extern void kset_init(struct kset *kset);
diff --git a/include/linux/ksm.h b/include/linux/ksm.h
index e48b1e4..161e816 100644
--- a/include/linux/ksm.h
+++ b/include/linux/ksm.h
@@ -53,8 +53,6 @@
 
 void rmap_walk_ksm(struct page *page, struct rmap_walk_control *rwc);
 void ksm_migrate_page(struct page *newpage, struct page *oldpage);
-bool reuse_ksm_page(struct page *page,
-			struct vm_area_struct *vma, unsigned long address);
 
 #else  /* !CONFIG_KSM */
 
@@ -88,11 +86,6 @@
 static inline void ksm_migrate_page(struct page *newpage, struct page *oldpage)
 {
 }
-static inline bool reuse_ksm_page(struct page *page,
-			struct vm_area_struct *vma, unsigned long address)
-{
-	return false;
-}
 #endif /* CONFIG_MMU */
 #endif /* !CONFIG_KSM */
 
diff --git a/include/linux/ktime.h b/include/linux/ktime.h
index b2bb44f..1fcfce97 100644
--- a/include/linux/ktime.h
+++ b/include/linux/ktime.h
@@ -253,14 +253,7 @@
 	}
 }
 
-/*
- * The resolution of the clocks. The resolution value is returned in
- * the clock_getres() system call to give application programmers an
- * idea of the (in)accuracy of timers. Timer values are rounded up to
- * this resolution values.
- */
-#define LOW_RES_NSEC		TICK_NSEC
-#define KTIME_LOW_RES		(LOW_RES_NSEC)
+#include <vdso/ktime.h>
 
 static inline ktime_t ns_to_ktime(u64 ns)
 {
diff --git a/include/linux/limits.h b/include/linux/limits.h
index 76afcd2..7fc497e 100644
--- a/include/linux/limits.h
+++ b/include/linux/limits.h
@@ -4,19 +4,8 @@
 
 #include <uapi/linux/limits.h>
 #include <linux/types.h>
+#include <vdso/limits.h>
 
-#define USHRT_MAX	((unsigned short)~0U)
-#define SHRT_MAX	((short)(USHRT_MAX >> 1))
-#define SHRT_MIN	((short)(-SHRT_MAX - 1))
-#define INT_MAX		((int)(~0U >> 1))
-#define INT_MIN		(-INT_MAX - 1)
-#define UINT_MAX	(~0U)
-#define LONG_MAX	((long)(~0UL >> 1))
-#define LONG_MIN	(-LONG_MAX - 1)
-#define ULONG_MAX	(~0UL)
-#define LLONG_MAX	((long long)(~0ULL >> 1))
-#define LLONG_MIN	(-LLONG_MAX - 1)
-#define ULLONG_MAX	(~0ULL)
 #define SIZE_MAX	(~(size_t)0)
 #define PHYS_ADDR_MAX	(~(phys_addr_t)0)
 
diff --git a/include/linux/lsm_hooks.h b/include/linux/lsm_hooks.h
index a21dc54..37238a9 100644
--- a/include/linux/lsm_hooks.h
+++ b/include/linux/lsm_hooks.h
@@ -215,6 +215,15 @@
  *	Returns 0 if @name and @value have been successfully set,
  *	-EOPNOTSUPP if no security attribute is needed, or
  *	-ENOMEM on memory allocation failure.
+ * @inode_init_security_anon:
+ *      Set up the incore security field for the new anonymous inode
+ *      and return whether the inode creation is permitted by the security
+ *      module or not.
+ *      @inode contains the inode structure
+ *      @name name of the anonymous inode class
+ *      @context_inode optional related inode
+ *	Returns 0 on success, -EACCES if the security module denies the
+ *	creation of this inode, or another -errno upon other errors.
  * @inode_create:
  *	Check permission to create a regular file.
  *	@dir contains inode structure of the parent of the new file.
@@ -1552,6 +1561,9 @@
 					const struct qstr *qstr,
 					const char **name, void **value,
 					size_t *len);
+	int (*inode_init_security_anon)(struct inode *inode,
+					const struct qstr *name,
+					const struct inode *context_inode);
 	int (*inode_create)(struct inode *dir, struct dentry *dentry,
 				umode_t mode);
 	int (*inode_link)(struct dentry *old_dentry, struct inode *dir,
@@ -1818,6 +1830,14 @@
 	void (*bpf_prog_free_security)(struct bpf_prog_aux *aux);
 #endif /* CONFIG_BPF_SYSCALL */
 	int (*locked_down)(enum lockdown_reason what);
+#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 {
@@ -1876,6 +1896,7 @@
 	struct hlist_head inode_alloc_security;
 	struct hlist_head inode_free_security;
 	struct hlist_head inode_init_security;
+	struct hlist_head inode_init_security_anon;
 	struct hlist_head inode_create;
 	struct hlist_head inode_link;
 	struct hlist_head inode_unlink;
@@ -2060,6 +2081,13 @@
 	struct hlist_head bpf_prog_free_security;
 #endif /* CONFIG_BPF_SYSCALL */
 	struct hlist_head locked_down;
+#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/math64.h b/include/linux/math64.h
index 65bef21..11a2674 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -3,6 +3,7 @@
 #define _LINUX_MATH64_H
 
 #include <linux/types.h>
+#include <vdso/math64.h>
 #include <asm/div64.h>
 
 #if BITS_PER_LONG == 64
@@ -142,25 +143,6 @@
 
 u32 iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder);
 
-static __always_inline u32
-__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
-{
-	u32 ret = 0;
-
-	while (dividend >= divisor) {
-		/* The following asm() prevents the compiler from
-		   optimising this loop into a modulo operation.  */
-		asm("" : "+rm"(dividend));
-
-		dividend -= divisor;
-		ret++;
-	}
-
-	*remainder = dividend;
-
-	return ret;
-}
-
 #ifndef mul_u32_u32
 /*
  * Many a GCC version messes this up and generates a 64x64 mult :-(
diff --git a/include/linux/mfd/sc27xx-pmic.h b/include/linux/mfd/sc27xx-pmic.h
new file mode 100644
index 0000000..57e45c0
--- /dev/null
+++ b/include/linux/mfd/sc27xx-pmic.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __LINUX_MFD_SC27XX_PMIC_H
+#define __LINUX_MFD_SC27XX_PMIC_H
+
+extern enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev);
+
+#endif /* __LINUX_MFD_SC27XX_PMIC_H */
diff --git a/include/linux/mfd/syscon.h b/include/linux/mfd/syscon.h
index 112dc66..7f20e9b 100644
--- a/include/linux/mfd/syscon.h
+++ b/include/linux/mfd/syscon.h
@@ -23,6 +23,11 @@
 extern struct regmap *syscon_regmap_lookup_by_phandle(
 					struct device_node *np,
 					const char *property);
+extern struct regmap *syscon_regmap_lookup_by_phandle_args(
+					struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args);
 #else
 static inline struct regmap *device_node_to_regmap(struct device_node *np)
 {
@@ -45,6 +50,15 @@
 {
 	return ERR_PTR(-ENOTSUPP);
 }
+
+static inline struct regmap *syscon_regmap_lookup_by_phandle_args(
+					struct device_node *np,
+					const char *property,
+					int arg_count,
+					unsigned int *out_args)
+{
+	return ERR_PTR(-ENOTSUPP);
+}
 #endif
 
 #endif /* __LINUX_MFD_SYSCON_H__ */
diff --git a/include/linux/mm.h b/include/linux/mm.h
index a7d626b..9882da4 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -27,6 +27,8 @@
 #include <linux/memremap.h>
 #include <linux/overflow.h>
 #include <linux/sizes.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 struct mempolicy;
 struct anon_vma;
@@ -114,6 +116,14 @@
 #define __pa_symbol(x)  __pa(RELOC_HIDE((unsigned long)(x), 0))
 #endif
 
+#ifndef __va_function
+#define __va_function(x) (x)
+#endif
+
+#ifndef __pa_function
+#define __pa_function(x) __pa_symbol(x)
+#endif
+
 #ifndef page_to_virt
 #define page_to_virt(x)	__va(PFN_PHYS(page_to_pfn(x)))
 #endif
@@ -344,6 +354,13 @@
 # define VM_GROWSUP	VM_NONE
 #endif
 
+#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
+# define VM_UFFD_MINOR_BIT	37
+# define VM_UFFD_MINOR		BIT(VM_UFFD_MINOR_BIT)	/* UFFD minor faults */
+#else /* !CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */
+# define VM_UFFD_MINOR		VM_NONE
+#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */
+
 /* Bits set in the VMA until the stack is in its final location */
 #define VM_STACK_INCOMPLETE_SETUP	(VM_RAND_READ | VM_SEQ_READ)
 
@@ -383,15 +400,75 @@
  */
 extern pgprot_t protection_map[16];
 
-#define FAULT_FLAG_WRITE	0x01	/* Fault was a write access */
-#define FAULT_FLAG_MKWRITE	0x02	/* Fault was mkwrite of existing pte */
-#define FAULT_FLAG_ALLOW_RETRY	0x04	/* Retry fault if blocking */
-#define FAULT_FLAG_RETRY_NOWAIT	0x08	/* Don't drop mmap_sem and wait when retrying */
-#define FAULT_FLAG_KILLABLE	0x10	/* The fault task is in SIGKILL killable region */
-#define FAULT_FLAG_TRIED	0x20	/* Second try */
-#define FAULT_FLAG_USER		0x40	/* The fault originated in userspace */
-#define FAULT_FLAG_REMOTE	0x80	/* faulting for non current tsk/mm */
-#define FAULT_FLAG_INSTRUCTION  0x100	/* The fault was during an instruction fetch */
+/**
+ * Fault flag definitions.
+ *
+ * @FAULT_FLAG_WRITE: Fault was a write fault.
+ * @FAULT_FLAG_MKWRITE: Fault was mkwrite of existing PTE.
+ * @FAULT_FLAG_ALLOW_RETRY: Allow to retry the fault if blocked.
+ * @FAULT_FLAG_RETRY_NOWAIT: Don't drop mmap_sem and wait when retrying.
+ * @FAULT_FLAG_KILLABLE: The fault task is in SIGKILL killable region.
+ * @FAULT_FLAG_TRIED: The fault has been tried once.
+ * @FAULT_FLAG_USER: The fault originated in userspace.
+ * @FAULT_FLAG_REMOTE: The fault is not for current task/mm.
+ * @FAULT_FLAG_INSTRUCTION: The fault was during an instruction fetch.
+ * @FAULT_FLAG_INTERRUPTIBLE: The fault can be interrupted by non-fatal signals.
+ *
+ * About @FAULT_FLAG_ALLOW_RETRY and @FAULT_FLAG_TRIED: we can specify
+ * whether we would allow page faults to retry by specifying these two
+ * fault flags correctly.  Currently there can be three legal combinations:
+ *
+ * (a) ALLOW_RETRY and !TRIED:  this means the page fault allows retry, and
+ *                              this is the first try
+ *
+ * (b) ALLOW_RETRY and TRIED:   this means the page fault allows retry, and
+ *                              we've already tried at least once
+ *
+ * (c) !ALLOW_RETRY and !TRIED: this means the page fault does not allow retry
+ *
+ * The unlisted combination (!ALLOW_RETRY && TRIED) is illegal and should never
+ * be used.  Note that page faults can be allowed to retry for multiple times,
+ * in which case we'll have an initial fault with flags (a) then later on
+ * continuous faults with flags (b).  We should always try to detect pending
+ * signals before a retry to make sure the continuous page faults can still be
+ * interrupted if necessary.
+ */
+#define FAULT_FLAG_WRITE			0x01
+#define FAULT_FLAG_MKWRITE			0x02
+#define FAULT_FLAG_ALLOW_RETRY			0x04
+#define FAULT_FLAG_RETRY_NOWAIT			0x08
+#define FAULT_FLAG_KILLABLE			0x10
+#define FAULT_FLAG_TRIED			0x20
+#define FAULT_FLAG_USER				0x40
+#define FAULT_FLAG_REMOTE			0x80
+#define FAULT_FLAG_INSTRUCTION  		0x100
+#define FAULT_FLAG_INTERRUPTIBLE		0x200
+
+/*
+ * The default fault flags that should be used by most of the
+ * arch-specific page fault handlers.
+ */
+#define FAULT_FLAG_DEFAULT  (FAULT_FLAG_ALLOW_RETRY | \
+			     FAULT_FLAG_KILLABLE | \
+			     FAULT_FLAG_INTERRUPTIBLE)
+
+/**
+ * fault_flag_allow_retry_first - check ALLOW_RETRY the first time
+ *
+ * This is mostly used for places where we want to try to avoid taking
+ * the mmap_sem for too long a time when waiting for another condition
+ * to change, in which case we can try to be polite to release the
+ * mmap_sem in the first round to avoid potential starvation of other
+ * processes that would also want the mmap_sem.
+ *
+ * Return: true if the page fault allows retry and this is the first
+ * attempt of the fault handling; false otherwise.
+ */
+static inline bool fault_flag_allow_retry_first(unsigned int flags)
+{
+	return (flags & FAULT_FLAG_ALLOW_RETRY) &&
+	    (!(flags & FAULT_FLAG_TRIED));
+}
 
 #define FAULT_FLAG_TRACE \
 	{ FAULT_FLAG_WRITE,		"WRITE" }, \
@@ -402,7 +479,8 @@
 	{ FAULT_FLAG_TRIED,		"TRIED" }, \
 	{ FAULT_FLAG_USER,		"USER" }, \
 	{ FAULT_FLAG_REMOTE,		"REMOTE" }, \
-	{ FAULT_FLAG_INSTRUCTION,	"INSTRUCTION" }
+	{ FAULT_FLAG_INSTRUCTION,	"INSTRUCTION" }, \
+	{ FAULT_FLAG_INTERRUPTIBLE,	"INTERRUPTIBLE" }
 
 /*
  * vm_fault is filled by the the pagefault handler and passed to the vma's
@@ -450,6 +528,10 @@
 					 * page table to avoid allocation from
 					 * atomic context.
 					 */
+	unsigned long vma_flags;	/* Speculative Page Fault field */
+	pgprot_t vma_page_prot;		/* Speculative Page Fault field */
+	ANDROID_VENDOR_DATA(1);
+	ANDROID_VENDOR_DATA(2);
 };
 
 /* page entry size for vm->huge_fault() */
@@ -468,7 +550,7 @@
 	void (*open)(struct vm_area_struct * area);
 	void (*close)(struct vm_area_struct * area);
 	int (*split)(struct vm_area_struct * area, unsigned long addr);
-	int (*mremap)(struct vm_area_struct * area);
+	int (*mremap)(struct vm_area_struct *area);
 	vm_fault_t (*fault)(struct vm_fault *vmf);
 	vm_fault_t (*huge_fault)(struct vm_fault *vmf,
 			enum page_entry_size pe_size);
@@ -524,6 +606,12 @@
 	 */
 	struct page *(*find_special_page)(struct vm_area_struct *vma,
 					  unsigned long addr);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_VENDOR_DATA(1);
 };
 
 static inline void vma_init(struct vm_area_struct *vma, struct mm_struct *mm)
@@ -1673,19 +1761,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 */
@@ -2303,7 +2400,7 @@
 extern struct vm_area_struct *vma_merge(struct mm_struct *,
 	struct vm_area_struct *prev, unsigned long addr, unsigned long end,
 	unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
-	struct mempolicy *, struct vm_userfaultfd_ctx);
+	struct mempolicy *, struct vm_userfaultfd_ctx, const char __user *);
 extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
 extern int __split_vma(struct mm_struct *, struct vm_area_struct *,
 	unsigned long addr, int new_below);
@@ -2368,6 +2465,7 @@
 		       struct list_head *uf, bool downgrade);
 extern int do_munmap(struct mm_struct *, unsigned long, size_t,
 		     struct list_head *uf);
+extern int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior);
 
 static inline unsigned long
 do_mmap_pgoff(struct file *file, unsigned long addr,
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 2b3b2fc..1a2558d 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
@@ -14,6 +14,8 @@
 #include <linux/uprobes.h>
 #include <linux/page-flags-layout.h>
 #include <linux/workqueue.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 #include <asm/mmu.h>
 
@@ -318,11 +320,18 @@
 	/*
 	 * For areas with an address space and backing store,
 	 * linkage into the address_space->i_mmap interval tree.
+	 *
+	 * For private anonymous mappings, a pointer to a null terminated string
+	 * in the user process containing the name given to the vma, or NULL
+	 * if unnamed.
 	 */
-	struct {
-		struct rb_node rb;
-		unsigned long rb_subtree_last;
-	} shared;
+	union {
+		struct {
+			struct rb_node rb;
+			unsigned long rb_subtree_last;
+		} shared;
+		const char __user *anon_name;
+	};
 
 	/*
 	 * A file's MAP_PRIVATE vma can be in both i_mmap tree and anon_vma
@@ -353,6 +362,12 @@
 	struct mempolicy *vm_policy;	/* NUMA policy for the VMA */
 #endif
 	struct vm_userfaultfd_ctx vm_userfaultfd_ctx;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_VENDOR_DATA(1);
 } __randomize_layout;
 
 struct core_thread {
@@ -524,6 +539,9 @@
 		atomic_long_t hugetlb_usage;
 #endif
 		struct work_struct async_put_work;
+
+		ANDROID_KABI_RESERVE(1);
+		ANDROID_VENDOR_DATA(1);
 	} __randomize_layout;
 
 	/*
@@ -754,4 +772,13 @@
 	unsigned long val;
 } swp_entry_t;
 
+/* Return the name for an anonymous mapping or NULL for a file-backed mapping */
+static inline const char __user *vma_get_anon_name(struct vm_area_struct *vma)
+{
+	if (vma->vm_file)
+		return NULL;
+
+	return vma->anon_name;
+}
+
 #endif /* _LINUX_MM_TYPES_H */
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
index cf3780a..14b9e6f 100644
--- a/include/linux/mmc/card.h
+++ b/include/linux/mmc/card.h
@@ -9,6 +9,7 @@
 
 #include <linux/device.h>
 #include <linux/mod_devicetable.h>
+#include <linux/android_kabi.h>
 
 struct mmc_cid {
 	unsigned int		manfid;
@@ -48,6 +49,7 @@
 	u8			sec_feature_support;
 	u8			rel_sectors;
 	u8			rel_param;
+	bool			enhanced_rpmb_supported;
 	u8			part_config;
 	u8			cache_ctrl;
 	u8			rst_n_function;
@@ -235,6 +237,8 @@
 #define MMC_BLK_DATA_AREA_BOOT	(1<<1)
 #define MMC_BLK_DATA_AREA_GP	(1<<2)
 #define MMC_BLK_DATA_AREA_RPMB	(1<<3)
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -310,6 +314,9 @@
 
 	unsigned int		bouncesz;	/* Bounce buffer size */
 	struct workqueue_struct *complete_wq;	/* Private workqueue */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline bool mmc_large_sector(struct mmc_card *card)
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h
index b7ba881..29fea6d 100644
--- a/include/linux/mmc/core.h
+++ b/include/linux/mmc/core.h
@@ -165,6 +165,11 @@
 	bool			cap_cmd_during_tfr;
 
 	int			tag;
+
+#ifdef CONFIG_MMC_CRYPTO
+	const struct bio_crypt_ctx *crypto_ctx;
+	int			crypto_key_slot;
+#endif
 };
 
 struct mmc_card;
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h
index a0e1cf1..08b0c7f 100644
--- a/include/linux/mmc/host.h
+++ b/include/linux/mmc/host.h
@@ -15,6 +15,8 @@
 #include <linux/mmc/card.h>
 #include <linux/mmc/pm.h>
 #include <linux/dma-direction.h>
+#include <linux/keyslot-manager.h>
+#include <linux/android_kabi.h>
 
 struct mmc_ios {
 	unsigned int	clock;			/* clock rate */
@@ -92,6 +94,9 @@
 			    int err);
 	void	(*pre_req)(struct mmc_host *host, struct mmc_request *req);
 	void	(*request)(struct mmc_host *host, struct mmc_request *req);
+	/* Submit one request to host in atomic context. */
+	int	(*request_atomic)(struct mmc_host *host,
+				  struct mmc_request *req);
 
 	/*
 	 * Avoid calling the next three functions too often or in a "fast
@@ -169,6 +174,9 @@
 	 */
 	int	(*multi_io_quirk)(struct mmc_card *card,
 				  unsigned int direction, int blk_size);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct mmc_cqe_ops {
@@ -213,6 +221,9 @@
 	 * will have zero data bytes transferred.
 	 */
 	void	(*cqe_recovery_finish)(struct mmc_host *host);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct mmc_async_req {
@@ -367,6 +378,11 @@
 #define MMC_CAP2_CQE_DCMD	(1 << 24)	/* CQE can issue a direct command */
 #define MMC_CAP2_AVOID_3_3V	(1 << 25)	/* Host must negotiate down from 3.3V */
 #define MMC_CAP2_MERGE_CAPABLE	(1 << 26)	/* Host can merge a segment over the segment size */
+#ifdef CONFIG_MMC_CRYPTO
+#define MMC_CAP2_CRYPTO		(1 << 27)	/* Host supports inline encryption */
+#else
+#define MMC_CAP2_CRYPTO		0
+#endif
 
 	int			fixed_drv_type;	/* fixed driver type for non-removable media */
 
@@ -460,6 +476,17 @@
 	bool			cqe_enabled;
 	bool			cqe_on;
 
+	/* Inline encryption support */
+#ifdef CONFIG_MMC_CRYPTO
+	struct blk_keyslot_manager ksm;
+#endif
+
+	/* Host Software Queue support */
+	bool			hsq_enabled;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	unsigned long		private[0] ____cacheline_aligned;
 };
 
diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h
index 897a87c..3219304f 100644
--- a/include/linux/mmc/mmc.h
+++ b/include/linux/mmc/mmc.h
@@ -315,6 +315,7 @@
  */
 
 #define EXT_CSD_WR_REL_PARAM_EN		(1<<2)
+#define EXT_CSD_WR_REL_PARAM_EN_RPMB_REL_WR	(1<<4)
 
 #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS	(0x40)
 #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS	(0x10)
diff --git a/include/linux/mmc/pm.h b/include/linux/mmc/pm.h
index 3549f80..1d554b8 100644
--- a/include/linux/mmc/pm.h
+++ b/include/linux/mmc/pm.h
@@ -23,5 +23,6 @@
 
 #define MMC_PM_KEEP_POWER	(1 << 0)	/* preserve card power during suspend */
 #define MMC_PM_WAKE_SDIO_IRQ	(1 << 1)	/* wake up host system on SDIO IRQ assertion */
+#define MMC_PM_IGNORE_PM_NOTIFY	(1 << 2)	/* ignore mmc pm notify */
 
 #endif /* LINUX_MMC_PM_H */
diff --git a/include/linux/mmu_notifier.h b/include/linux/mmu_notifier.h
index 1bd8e6a..ca953d5 100644
--- a/include/linux/mmu_notifier.h
+++ b/include/linux/mmu_notifier.h
@@ -6,6 +6,7 @@
 #include <linux/spinlock.h>
 #include <linux/mm_types.h>
 #include <linux/srcu.h>
+#include <linux/android_kabi.h>
 
 struct mmu_notifier;
 struct mmu_notifier_ops;
@@ -228,6 +229,11 @@
 	 */
 	struct mmu_notifier *(*alloc_notifier)(struct mm_struct *mm);
 	void (*free_notifier)(struct mmu_notifier *mn);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -247,6 +253,9 @@
 	struct mm_struct *mm;
 	struct rcu_head rcu;
 	unsigned int users;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline int mm_has_notifiers(struct mm_struct *mm)
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index a90aba3..9ac53dd 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -20,6 +20,7 @@
 #include <linux/atomic.h>
 #include <linux/mm_types.h>
 #include <linux/page-flags.h>
+#include <linux/android_kabi.h>
 #include <asm/page.h>
 
 /* Free memory management - zoned buddy allocator.  */
@@ -42,8 +43,6 @@
 	MIGRATE_UNMOVABLE,
 	MIGRATE_MOVABLE,
 	MIGRATE_RECLAIMABLE,
-	MIGRATE_PCPTYPES,	/* the number of types on the pcp lists */
-	MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
 #ifdef CONFIG_CMA
 	/*
 	 * MIGRATE_CMA migration type is designed to mimic the way
@@ -60,6 +59,8 @@
 	 */
 	MIGRATE_CMA,
 #endif
+	MIGRATE_PCPTYPES, /* the number of types on the pcp lists */
+	MIGRATE_HIGHATOMIC = MIGRATE_PCPTYPES,
 #ifdef CONFIG_MEMORY_ISOLATION
 	MIGRATE_ISOLATE,	/* can't allocate from here */
 #endif
@@ -72,9 +73,11 @@
 #ifdef CONFIG_CMA
 #  define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
 #  define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
+#  define get_cma_migrate_type() MIGRATE_CMA
 #else
 #  define is_migrate_cma(migratetype) false
 #  define is_migrate_cma_page(_page) false
+#  define get_cma_migrate_type() MIGRATE_MOVABLE
 #endif
 
 static inline bool is_migrate_movable(int mt)
@@ -200,11 +203,12 @@
 	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)
 	NR_ZSPAGES,		/* allocated in zsmalloc */
-#endif
 	NR_FREE_CMA_PAGES,
 	NR_VM_ZONE_STAT_ITEMS };
 
@@ -440,6 +444,10 @@
 	struct pglist_data	*zone_pgdat;
 	struct per_cpu_pageset __percpu *pageset;
 
+#ifdef CONFIG_CMA
+	bool			cma_alloc;
+#endif
+
 #ifndef CONFIG_SPARSEMEM
 	/*
 	 * Flags for a pageblock_nr_pages block. See pageblock-flags.h.
@@ -561,6 +569,11 @@
 	/* Zone statistics */
 	atomic_long_t		vm_stat[NR_VM_ZONE_STAT_ITEMS];
 	atomic_long_t		vm_numa_stat[NR_VM_NUMA_STAT_ITEMS];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_internodealigned_in_smp;
 
 enum pgdat_flags {
@@ -948,6 +961,8 @@
 struct ctl_table;
 int min_free_kbytes_sysctl_handler(struct ctl_table *, int,
 					void __user *, size_t *, loff_t *);
+int extra_free_kbytes_sysctl_handler(struct ctl_table *, int,
+					void __user *, size_t *, loff_t *);
 int watermark_boost_factor_sysctl_handler(struct ctl_table *, int,
 					void __user *, size_t *, loff_t *);
 int watermark_scale_factor_sysctl_handler(struct ctl_table *, int,
diff --git a/include/linux/module.h b/include/linux/module.h
index 3e01e01..4f71785 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -22,6 +22,8 @@
 #include <linux/error-injection.h>
 #include <linux/tracepoint-defs.h>
 #include <linux/srcu.h>
+#include <linux/cfi.h>
+#include <linux/android_kabi.h>
 
 #include <linux/percpu.h>
 #include <asm/module.h>
@@ -365,6 +367,10 @@
 	const s32 *crcs;
 	unsigned int num_syms;
 
+#ifdef CONFIG_CFI_CLANG
+	cfi_check_fn cfi_check;
+#endif
+
 	/* Kernel parameters. */
 #ifdef CONFIG_SYSFS
 	struct mutex param_lock;
@@ -390,10 +396,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;
 
@@ -508,6 +516,10 @@
 	struct error_injection_entry *ei_funcs;
 	unsigned int num_ei_funcs;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned __randomize_layout;
 #ifndef MODULE_ARCH_INIT
 #define MODULE_ARCH_INIT {}
diff --git a/include/linux/mount.h b/include/linux/mount.h
index bf8cc41..ca388cc 100644
--- a/include/linux/mount.h
+++ b/include/linux/mount.h
@@ -16,6 +16,7 @@
 #include <linux/spinlock.h>
 #include <linux/seqlock.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 struct super_block;
 struct vfsmount;
@@ -69,6 +70,10 @@
 	struct dentry *mnt_root;	/* root of the mounted tree */
 	struct super_block *mnt_sb;	/* pointer to superblock */
 	int mnt_flags;
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct file; /* forward dec */
diff --git a/include/linux/msi.h b/include/linux/msi.h
index 758e32f..d695e2e 100644
--- a/include/linux/msi.h
+++ b/include/linux/msi.h
@@ -194,7 +194,7 @@
 void __pci_write_msi_msg(struct msi_desc *entry, struct msi_msg *msg);
 
 u32 __pci_msix_desc_mask_irq(struct msi_desc *desc, u32 flag);
-void __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag);
+u32 __pci_msi_desc_mask_irq(struct msi_desc *desc, u32 mask, u32 flag);
 void pci_msi_mask_irq(struct irq_data *data);
 void pci_msi_unmask_irq(struct irq_data *data);
 
diff --git a/include/linux/net.h b/include/linux/net.h
index 47dd797..7b63520c 100644
--- a/include/linux/net.h
+++ b/include/linux/net.h
@@ -22,6 +22,7 @@
 #include <linux/once.h>
 #include <linux/fs.h>
 #include <linux/mm.h>
+#include <linux/android_kabi.h>
 
 #include <uapi/linux/net.h>
 
@@ -203,6 +204,11 @@
 	int		(*sendmsg_locked)(struct sock *sk, struct msghdr *msg,
 					  size_t size);
 	int		(*set_rcvlowat)(struct sock *sk, int val);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define DECLARE_SOCKADDR(type, dst, src)	\
@@ -264,7 +270,8 @@
 	net_ratelimited_function(pr_warn, fmt, ##__VA_ARGS__)
 #define net_info_ratelimited(fmt, ...)				\
 	net_ratelimited_function(pr_info, fmt, ##__VA_ARGS__)
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define net_dbg_ratelimited(fmt, ...)					\
 do {									\
 	DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt);			\
diff --git a/include/linux/netdev_features.h b/include/linux/netdev_features.h
index 640e727..6a55176 100644
--- a/include/linux/netdev_features.h
+++ b/include/linux/netdev_features.h
@@ -53,8 +53,9 @@
 	NETIF_F_GSO_ESP_BIT,		/* ... ESP with TSO */
 	NETIF_F_GSO_UDP_BIT,		/* ... UFO, deprecated except tuntap */
 	NETIF_F_GSO_UDP_L4_BIT,		/* ... UDP payload GSO (not UFO) */
+	NETIF_F_GSO_FRAGLIST_BIT,		/* ... Fraglist GSO */
 	/**/NETIF_F_GSO_LAST =		/* last bit, see GSO_MASK */
-		NETIF_F_GSO_UDP_L4_BIT,
+		NETIF_F_GSO_FRAGLIST_BIT,
 
 	NETIF_F_FCOE_CRC_BIT,		/* FCoE CRC32 */
 	NETIF_F_SCTP_CRC_BIT,		/* SCTP checksum offload */
@@ -80,6 +81,7 @@
 
 	NETIF_F_GRO_HW_BIT,		/* Hardware Generic receive offload */
 	NETIF_F_HW_TLS_RECORD_BIT,	/* Offload TLS record */
+	NETIF_F_GRO_FRAGLIST_BIT,	/* Fraglist GRO */
 
 	/*
 	 * Add your fresh new feature above and remember to update
@@ -150,6 +152,8 @@
 #define NETIF_F_GSO_UDP_L4	__NETIF_F(GSO_UDP_L4)
 #define NETIF_F_HW_TLS_TX	__NETIF_F(HW_TLS_TX)
 #define NETIF_F_HW_TLS_RX	__NETIF_F(HW_TLS_RX)
+#define NETIF_F_GRO_FRAGLIST	__NETIF_F(GRO_FRAGLIST)
+#define NETIF_F_GSO_FRAGLIST	__NETIF_F(GSO_FRAGLIST)
 
 /* Finds the next feature with the highest number of the range of start till 0.
  */
@@ -226,6 +230,9 @@
 /* changeable features with no special hardware requirements */
 #define NETIF_F_SOFT_FEATURES	(NETIF_F_GSO | NETIF_F_GRO)
 
+/* Changeable features with no special hardware requirements that defaults to off. */
+#define NETIF_F_SOFT_FEATURES_OFF	NETIF_F_GRO_FRAGLIST
+
 #define NETIF_F_VLAN_FEATURES	(NETIF_F_HW_VLAN_CTAG_FILTER | \
 				 NETIF_F_HW_VLAN_CTAG_RX | \
 				 NETIF_F_HW_VLAN_CTAG_TX | \
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 4860944..ca24550 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -48,6 +48,7 @@
 #include <uapi/linux/if_bonding.h>
 #include <uapi/linux/pkt_cls.h>
 #include <linux/hashtable.h>
+#include <linux/android_kabi.h>
 
 struct netpoll_info;
 struct device;
@@ -273,6 +274,9 @@
 				const unsigned char *haddr);
 	bool	(*validate)(const char *ll_header, unsigned int len);
 	__be16	(*parse_protocol)(const struct sk_buff *skb);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* These flag bits are private to the generic network queueing
@@ -340,6 +344,11 @@
 	struct list_head	dev_list;
 	struct hlist_node	napi_hash_node;
 	unsigned int		napi_id;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 enum {
@@ -628,6 +637,11 @@
 #ifdef CONFIG_BQL
 	struct dql		dql;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned_in_smp;
 
 extern int sysctl_fb_tunnels_only_for_init_net;
@@ -746,6 +760,11 @@
 #ifdef CONFIG_XDP_SOCKETS
 	struct xdp_umem                 *umem;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } ____cacheline_aligned_in_smp;
 
 /*
@@ -916,6 +935,11 @@
 	bool	(*xdo_dev_offload_ok) (struct sk_buff *skb,
 				       struct xfrm_state *x);
 	void	(*xdo_dev_state_advance_esn) (struct xfrm_state *x);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #endif
 
@@ -1442,6 +1466,15 @@
 	int			(*ndo_xsk_wakeup)(struct net_device *dev,
 						  u32 queue_id, u32 flags);
 	struct devlink_port *	(*ndo_get_devlink_port)(struct net_device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
 };
 
 /**
@@ -2075,6 +2108,16 @@
 	struct lock_class_key	addr_list_lock_key;
 	bool			proto_down;
 	unsigned		wol_enabled:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+
 };
 #define to_net_dev(d) container_of(d, struct net_device, dev)
 
@@ -2339,7 +2382,8 @@
 	/* Number of gro_receive callbacks this packet already went through */
 	u8 recursion_counter:4;
 
-	/* 1 bit hole */
+	/* GRO is done by frag_list pointer chaining. */
+	u8	is_flist:1;
 
 	/* used to support CHECKSUM_COMPLETE for tunneling protocols */
 	__wsum	csum;
@@ -2399,6 +2443,11 @@
 					    struct sock *sk);
 	void			*af_packet_priv;
 	struct list_head	list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct offload_callbacks {
@@ -2689,6 +2738,7 @@
 int netdev_get_name(struct net *net, char *name, int ifindex);
 int dev_restart(struct net_device *dev);
 int skb_gro_receive(struct sk_buff *p, struct sk_buff *skb);
+int skb_gro_receive_list(struct sk_buff *p, struct sk_buff *skb);
 
 static inline unsigned int skb_gro_offset(const struct sk_buff *skb)
 {
@@ -4572,6 +4622,7 @@
 	BUILD_BUG_ON(SKB_GSO_ESP != (NETIF_F_GSO_ESP >> NETIF_F_GSO_SHIFT));
 	BUILD_BUG_ON(SKB_GSO_UDP != (NETIF_F_GSO_UDP >> NETIF_F_GSO_SHIFT));
 	BUILD_BUG_ON(SKB_GSO_UDP_L4 != (NETIF_F_GSO_UDP_L4 >> NETIF_F_GSO_SHIFT));
+	BUILD_BUG_ON(SKB_GSO_FRAGLIST != (NETIF_F_GSO_FRAGLIST >> NETIF_F_GSO_SHIFT));
 
 	return (features & feature) == feature;
 }
@@ -4801,7 +4852,8 @@
 #define MODULE_ALIAS_NETDEV(device) \
 	MODULE_ALIAS("netdev-" device)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define netdev_dbg(__dev, format, args...)			\
 do {								\
 	dynamic_netdev_dbg(__dev, format, ##args);		\
@@ -4871,7 +4923,8 @@
 #define netif_info(priv, type, dev, fmt, args...)		\
 	netif_level(info, priv, type, dev, fmt, ##args)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define netif_dbg(priv, type, netdev, format, args...)		\
 do {								\
 	if (netif_msg_##type(priv))				\
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h
index 4c0e653..4462679 100644
--- a/include/linux/netfilter.h
+++ b/include/linux/netfilter.h
@@ -13,6 +13,7 @@
 #include <linux/static_key.h>
 #include <linux/netfilter_defs.h>
 #include <linux/netdevice.h>
+#include <linux/android_kabi.h>
 #include <net/net_namespace.h>
 
 static inline int NF_DROP_GETERR(int verdict)
@@ -177,6 +178,8 @@
 #endif
 	/* Use the module struct to lock set/get code in place */
 	struct module *owner;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Function to register/unregister hook points. */
@@ -364,6 +367,8 @@
 	unsigned int (*manip_pkt)(struct sk_buff *skb, struct nf_conn *ct,
 				  enum nf_nat_manip_type mtype,
 				  enum ip_conntrack_dir dir);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern struct nf_nat_hook __rcu *nf_nat_hook;
@@ -448,6 +453,8 @@
 	void (*destroy)(struct nf_conntrack *);
 	bool (*get_tuple_skb)(struct nf_conntrack_tuple *,
 			      const struct sk_buff *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 extern struct nf_ct_hook __rcu *nf_ct_hook;
 
@@ -465,6 +472,8 @@
 			     u32 portid, u32 report);
 	void (*seq_adjust)(struct sk_buff *skb, struct nf_conn *ct,
 			   enum ip_conntrack_info ctinfo, s32 off);
+
+	ANDROID_KABI_RESERVE(1);
 };
 extern struct nfnl_ct_hook __rcu *nfnl_ct_hook;
 
diff --git a/include/linux/netfilter/ipset/ip_set.h b/include/linux/netfilter/ipset/ip_set.h
index 3265874..85c3cd6 100644
--- a/include/linux/netfilter/ipset/ip_set.h
+++ b/include/linux/netfilter/ipset/ip_set.h
@@ -14,6 +14,7 @@
 #include <linux/netfilter/x_tables.h>
 #include <linux/stringify.h>
 #include <linux/vmalloc.h>
+#include <linux/android_kabi.h>
 #include <net/netlink.h>
 #include <uapi/linux/netfilter/ipset/ip_set.h>
 
@@ -190,6 +191,8 @@
 	bool (*same_set)(const struct ip_set *a, const struct ip_set *b);
 	/* Region-locking is used */
 	bool region_lock;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct ip_set_region {
@@ -228,6 +231,8 @@
 
 	/* Set this to THIS_MODULE if you are a module, otherwise NULL */
 	struct module *me;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* register and unregister set type */
@@ -270,6 +275,8 @@
 	size_t offset[IPSET_EXT_ID_MAX];
 	/* The type specific data */
 	void *data;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline void
diff --git a/include/linux/netfilter/nfnetlink.h b/include/linux/netfilter/nfnetlink.h
index f6267e2..15775bc 100644
--- a/include/linux/netfilter/nfnetlink.h
+++ b/include/linux/netfilter/nfnetlink.h
@@ -4,6 +4,7 @@
 
 #include <linux/netlink.h>
 #include <linux/capability.h>
+#include <linux/android_kabi.h>
 #include <net/netlink.h>
 #include <uapi/linux/netfilter/nfnetlink.h>
 
@@ -22,6 +23,8 @@
 			  struct netlink_ext_ack *extack);
 	const struct nla_policy *policy;	/* netlink attribute policy */
 	const u_int16_t attr_count;		/* number of nlattr's */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 enum nfnl_abort_action {
@@ -41,6 +44,8 @@
 		     enum nfnl_abort_action action);
 	void (*cleanup)(struct net *net);
 	bool (*valid_genid)(struct net *net, u32 genid);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 int nfnetlink_subsys_register(const struct nfnetlink_subsystem *n);
diff --git a/include/linux/netfilter/xt_quota2.h b/include/linux/netfilter/xt_quota2.h
new file mode 100644
index 0000000..a391871
--- /dev/null
+++ b/include/linux/netfilter/xt_quota2.h
@@ -0,0 +1,26 @@
+#ifndef _XT_QUOTA_H
+#define _XT_QUOTA_H
+#include <linux/types.h>
+
+enum xt_quota_flags {
+	XT_QUOTA_INVERT    = 1 << 0,
+	XT_QUOTA_GROW      = 1 << 1,
+	XT_QUOTA_PACKET    = 1 << 2,
+	XT_QUOTA_NO_CHANGE = 1 << 3,
+	XT_QUOTA_MASK      = 0x0F,
+};
+
+struct xt_quota_counter;
+
+struct xt_quota_mtinfo2 {
+	char name[15];
+	u_int8_t flags;
+
+	/* Comparison-invariant */
+	aligned_u64 quota;
+
+	/* Used internally by the kernel */
+	struct xt_quota_counter *master __attribute__((aligned(8)));
+};
+
+#endif /* _XT_QUOTA_H */
diff --git a/include/linux/netfilter_ipv6.h b/include/linux/netfilter_ipv6.h
index 48314ad..c3d17fe 100644
--- a/include/linux/netfilter_ipv6.h
+++ b/include/linux/netfilter_ipv6.h
@@ -7,6 +7,7 @@
 #ifndef __LINUX_IP6_NETFILTER_H
 #define __LINUX_IP6_NETFILTER_H
 
+#include <linux/android_kabi.h>
 #include <uapi/linux/netfilter_ipv6.h>
 #include <net/tcp.h>
 
@@ -65,6 +66,8 @@
 					 const struct nf_bridge_frag_data *data,
 					 struct sk_buff *));
 #endif
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_NETFILTER
diff --git a/include/linux/of_address.h b/include/linux/of_address.h
index 30e40fb..3ecc3fb 100644
--- a/include/linux/of_address.h
+++ b/include/linux/of_address.h
@@ -12,6 +12,7 @@
 	const __be32 *end;
 	int np;
 	int pna;
+	bool dma;
 };
 
 struct of_pci_range {
@@ -55,8 +56,6 @@
 extern struct of_pci_range *of_pci_range_parser_one(
 					struct of_pci_range_parser *parser,
 					struct of_pci_range *range);
-extern int of_dma_get_range(struct device_node *np, u64 *dma_addr,
-				u64 *paddr, u64 *size);
 extern bool of_dma_is_coherent(struct device_node *np);
 #else /* CONFIG_OF_ADDRESS */
 static inline void __iomem *of_io_request_and_map(struct device_node *device,
@@ -104,12 +103,6 @@
 	return NULL;
 }
 
-static inline int of_dma_get_range(struct device_node *np, u64 *dma_addr,
-				u64 *paddr, u64 *size)
-{
-	return -ENODEV;
-}
-
 static inline bool of_dma_is_coherent(struct device_node *np)
 {
 	return false;
diff --git a/include/linux/of_fdt.h b/include/linux/of_fdt.h
index acf820e..9bbd5c0 100644
--- a/include/linux/of_fdt.h
+++ b/include/linux/of_fdt.h
@@ -58,6 +58,27 @@
 extern unsigned long of_get_flat_dt_root(void);
 extern uint32_t of_get_flat_dt_phandle(unsigned long node);
 
+/*
+ * early_init_dt_scan_chosen - scan the device tree for ramdisk and bootargs
+ *
+ * The boot arguments will be placed into the memory pointed to by @data.
+ * That memory should be COMMAND_LINE_SIZE big and initialized to be a valid
+ * (possibly empty) string.  Logic for what will be in @data after this
+ * function finishes:
+ *
+ * - CONFIG_CMDLINE_FORCE=true
+ *     CONFIG_CMDLINE
+ * - CONFIG_CMDLINE_EXTEND=true, @data is non-empty string
+ *     @data + dt bootargs (even if dt bootargs are empty)
+ * - CONFIG_CMDLINE_EXTEND=true, @data is empty string
+ *     CONFIG_CMDLINE + dt bootargs (even if dt bootargs are empty)
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=non-empty:
+ *     dt bootargs
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is non-empty string
+ *     @data is left unchanged
+ * - CMDLINE_FROM_BOOTLOADER=true, dt bootargs=empty, @data is empty string
+ *     CONFIG_CMDLINE (or "" if that's not defined)
+ */
 extern int early_init_dt_scan_chosen(unsigned long node, const char *uname,
 				     int depth, void *data);
 extern int early_init_dt_scan_memory(unsigned long node, const char *uname,
diff --git a/include/linux/once.h b/include/linux/once.h
index ae6f4eb..9225ee6d 100644
--- a/include/linux/once.h
+++ b/include/linux/once.h
@@ -7,7 +7,7 @@
 
 bool __do_once_start(bool *done, unsigned long *flags);
 void __do_once_done(bool *done, struct static_key_true *once_key,
-		    unsigned long *flags, struct module *mod);
+		    unsigned long *flags);
 
 /* Call a function exactly once. The idea of DO_ONCE() is to perform
  * a function call such as initialization of random seeds, etc, only
@@ -46,7 +46,7 @@
 			if (unlikely(___ret)) {				     \
 				func(__VA_ARGS__);			     \
 				__do_once_done(&___done, &___once_key,	     \
-					       &___flags, THIS_MODULE);	     \
+					       &___flags);		     \
 			}						     \
 		}							     \
 		___ret;							     \
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h
index 8543b1a..c069da0 100644
--- a/include/linux/pagemap.h
+++ b/include/linux/pagemap.h
@@ -51,7 +51,10 @@
 		return;
 
 	/* Record in wb_err for checkers using errseq_t based tracking */
-	filemap_set_wb_err(mapping, error);
+	__filemap_set_wb_err(mapping, error);
+
+	/* Record it in superblock */
+	errseq_set(&mapping->host->i_sb->s_wb_err, error);
 
 	/* Record it in flags for now, for legacy callers */
 	if (error == -ENOSPC)
diff --git a/include/linux/parser.h b/include/linux/parser.h
index 12fc348..89e2b23 100644
--- a/include/linux/parser.h
+++ b/include/linux/parser.h
@@ -7,7 +7,8 @@
  * but could potentially be used anywhere else that simple option=arg
  * parsing is required.
  */
-
+#ifndef _LINUX_PARSER_H
+#define _LINUX_PARSER_H
 
 /* associates an integer enumerator with a pattern string. */
 struct match_token {
@@ -34,3 +35,5 @@
 bool match_wildcard(const char *pattern, const char *str);
 size_t match_strlcpy(char *, const substring_t *, size_t);
 char *match_strdup(const substring_t *);
+
+#endif /* _LINUX_PARSER_H */
diff --git a/include/linux/pci.h b/include/linux/pci.h
index bc35b15..c81adf3 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -41,6 +41,7 @@
 #include <uapi/linux/pci.h>
 
 #include <linux/pci_ids.h>
+#include <linux/android_kabi.h>
 
 /*
  * The PCI interface treats multi-function devices as independent
@@ -471,6 +472,11 @@
 	char		*driver_override; /* Driver name to force a match */
 
 	unsigned long	priv_flags;	/* Private flags for the PCI driver */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct pci_dev *pci_physfn(struct pci_dev *dev)
@@ -520,6 +526,10 @@
 			resource_size_t start,
 			resource_size_t size,
 			resource_size_t align);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	unsigned long	private[0] ____cacheline_aligned;
 };
 
@@ -604,6 +614,11 @@
 	struct bin_attribute	*legacy_io;	/* Legacy I/O for this bus */
 	struct bin_attribute	*legacy_mem;	/* Legacy mem */
 	unsigned int		is_added:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define to_pci_bus(n)	container_of(n, struct pci_bus, dev)
@@ -702,6 +717,8 @@
 	void __iomem *(*map_bus)(struct pci_bus *bus, unsigned int devfn, int where);
 	int (*read)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *val);
 	int (*write)(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 val);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -777,6 +794,8 @@
 
 	/* Device driver may resume normal operations */
 	void (*resume)(struct pci_dev *dev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 
@@ -841,6 +860,11 @@
 	const struct attribute_group **groups;
 	struct device_driver	driver;
 	struct pci_dynids	dynids;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define	to_pci_driver(drv) container_of(drv, struct pci_driver, driver)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 4258864..635e8da 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2423,6 +2423,8 @@
 #define PCI_VENDOR_ID_LENOVO		0x17aa
 
 #define PCI_VENDOR_ID_QCOM		0x17cb
+#define PCIE_DEVICE_ID_QCOM_PCIE20	0x0106
+#define PCIE_DEVICE_ID_QCOM_PCIE30	0x0107
 
 #define PCI_VENDOR_ID_CDNS		0x17cd
 
diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h
index b7ac395..6fc704f 100644
--- a/include/linux/perf_event.h
+++ b/include/linux/perf_event.h
@@ -56,6 +56,7 @@
 #include <linux/perf_regs.h>
 #include <linux/cgroup.h>
 #include <linux/refcount.h>
+#include <linux/security.h>
 #include <asm/local.h>
 
 struct perf_callchain_entry {
@@ -721,6 +722,9 @@
 	struct perf_cgroup		*cgrp; /* cgroup event is attach to */
 #endif
 
+#ifdef CONFIG_SECURITY
+	void *security;
+#endif
 	struct list_head		sb_list;
 #endif /* CONFIG_PERF_EVENTS */
 };
@@ -1252,19 +1256,41 @@
 int perf_event_max_stack_handler(struct ctl_table *table, int write,
 				 void __user *buffer, size_t *lenp, loff_t *ppos);
 
-static inline bool perf_paranoid_tracepoint_raw(void)
+/* 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 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/phy.h b/include/linux/phy.h
index 8075078..2b3726f 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -21,6 +21,7 @@
 #include <linux/timer.h>
 #include <linux/workqueue.h>
 #include <linux/mod_devicetable.h>
+#include <linux/android_kabi.h>
 
 #include <linux/atomic.h>
 
@@ -442,6 +443,11 @@
 
 	void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier);
 	void (*adjust_link)(struct net_device *dev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define to_phy_device(d) container_of(to_mdio_device(d), \
 				      struct phy_device, mdio)
@@ -631,6 +637,10 @@
 			    struct ethtool_tunable *tuna,
 			    const void *data);
 	int (*set_loopback)(struct phy_device *dev, bool enable);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 };
 #define to_phy_driver(d) container_of(to_mdio_common_driver(d),		\
 				      struct phy_driver, mdiodrv)
diff --git a/include/linux/pid.h b/include/linux/pid.h
index 9645b11..132d106 100644
--- a/include/linux/pid.h
+++ b/include/linux/pid.h
@@ -75,6 +75,7 @@
 struct file;
 
 extern struct pid *pidfd_pid(const struct file *file);
+struct pid *pidfd_get_pid(unsigned int fd, unsigned int *flags);
 
 static inline struct pid *get_pid(struct pid *pid)
 {
diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h
index 569f446..b3b0c4c 100644
--- a/include/linux/platform_device.h
+++ b/include/linux/platform_device.h
@@ -11,6 +11,7 @@
 #define _PLATFORM_DEVICE_H_
 
 #include <linux/device.h>
+#include <linux/android_kabi.h>
 
 #define PLATFORM_DEVID_NONE	(-1)
 #define PLATFORM_DEVID_AUTO	(-2)
@@ -36,6 +37,9 @@
 
 	/* arch specific additions */
 	struct pdev_archdata	archdata;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define platform_get_device_id(pdev)	((pdev)->id_entry)
@@ -84,6 +88,8 @@
 		u64 dma_mask;
 
 		struct property_entry *properties;
+
+		ANDROID_KABI_RESERVE(1);
 };
 extern struct platform_device *platform_device_register_full(
 		const struct platform_device_info *pdevinfo);
@@ -196,6 +202,8 @@
 	struct device_driver driver;
 	const struct platform_device_id *id_table;
 	bool prevent_deferred_probe;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define to_platform_driver(drv)	(container_of((drv), struct platform_driver, \
@@ -302,6 +310,8 @@
 	int requested_id;
 	char *buffer;
 	int bufsize;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define EARLY_PLATFORM_ID_UNSET -2
diff --git a/include/linux/pm.h b/include/linux/pm.h
index eb28c80..9e83798 100644
--- a/include/linux/pm.h
+++ b/include/linux/pm.h
@@ -15,6 +15,7 @@
 #include <linux/timer.h>
 #include <linux/hrtimer.h>
 #include <linux/completion.h>
+#include <linux/android_kabi.h>
 
 /*
  * Callbacks for platform drivers to implement.
@@ -299,6 +300,8 @@
 	int (*runtime_suspend)(struct device *dev);
 	int (*runtime_resume)(struct device *dev);
 	int (*runtime_idle)(struct device *dev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_PM_SLEEP
@@ -629,6 +632,9 @@
 	struct pm_subsys_data	*subsys_data;  /* Owned by the subsystem. */
 	void (*set_latency_tolerance)(struct device *, s32);
 	struct dev_pm_qos	*qos;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 extern int dev_pm_get_subsys_data(struct device *dev);
@@ -653,6 +659,8 @@
 	int (*activate)(struct device *dev);
 	void (*sync)(struct device *dev);
 	void (*dismiss)(struct device *dev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 24a6263..19eafca 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -34,6 +34,8 @@
 #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT	PM_QOS_LATENCY_ANY
 #define PM_QOS_RESUME_LATENCY_NO_CONSTRAINT_NS	PM_QOS_LATENCY_ANY_NS
 #define PM_QOS_LATENCY_TOLERANCE_DEFAULT_VALUE	0
+#define PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE	0
+#define PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE	FREQ_QOS_MAX_DEFAULT_VALUE
 #define PM_QOS_LATENCY_TOLERANCE_NO_CONSTRAINT	(-1)
 
 #define PM_QOS_FLAG_NO_POWER_OFF	(1 << 0)
@@ -49,21 +51,6 @@
 	s32 flags;	/* Do not change to 64 bit */
 };
 
-enum dev_pm_qos_req_type {
-	DEV_PM_QOS_RESUME_LATENCY = 1,
-	DEV_PM_QOS_LATENCY_TOLERANCE,
-	DEV_PM_QOS_FLAGS,
-};
-
-struct dev_pm_qos_request {
-	enum dev_pm_qos_req_type type;
-	union {
-		struct plist_node pnode;
-		struct pm_qos_flags_request flr;
-	} data;
-	struct device *dev;
-};
-
 enum pm_qos_type {
 	PM_QOS_UNITIALIZED,
 	PM_QOS_MAX,		/* return the largest value */
@@ -90,9 +77,51 @@
 	s32 effective_flags;	/* Do not change to 64 bit */
 };
 
+
+#define FREQ_QOS_MIN_DEFAULT_VALUE	0
+#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX
+
+enum freq_qos_req_type {
+	FREQ_QOS_MIN = 1,
+	FREQ_QOS_MAX,
+};
+
+struct freq_constraints {
+	struct pm_qos_constraints min_freq;
+	struct blocking_notifier_head min_freq_notifiers;
+	struct pm_qos_constraints max_freq;
+	struct blocking_notifier_head max_freq_notifiers;
+};
+
+struct freq_qos_request {
+	enum freq_qos_req_type type;
+	struct plist_node pnode;
+	struct freq_constraints *qos;
+};
+
+
+enum dev_pm_qos_req_type {
+	DEV_PM_QOS_RESUME_LATENCY = 1,
+	DEV_PM_QOS_LATENCY_TOLERANCE,
+	DEV_PM_QOS_MIN_FREQUENCY,
+	DEV_PM_QOS_MAX_FREQUENCY,
+	DEV_PM_QOS_FLAGS,
+};
+
+struct dev_pm_qos_request {
+	enum dev_pm_qos_req_type type;
+	union {
+		struct plist_node pnode;
+		struct pm_qos_flags_request flr;
+		struct freq_qos_request freq;
+	} data;
+	struct device *dev;
+};
+
 struct dev_pm_qos {
 	struct pm_qos_constraints resume_latency;
 	struct pm_qos_constraints latency_tolerance;
+	struct freq_constraints freq;
 	struct pm_qos_flags flags;
 	struct dev_pm_qos_request *resume_latency_req;
 	struct dev_pm_qos_request *latency_tolerance_req;
@@ -191,6 +220,10 @@
 	switch (type) {
 	case DEV_PM_QOS_RESUME_LATENCY:
 		return PM_QOS_RESUME_LATENCY_NO_CONSTRAINT;
+	case DEV_PM_QOS_MIN_FREQUENCY:
+		return PM_QOS_MIN_FREQUENCY_DEFAULT_VALUE;
+	case DEV_PM_QOS_MAX_FREQUENCY:
+		return PM_QOS_MAX_FREQUENCY_DEFAULT_VALUE;
 	default:
 		WARN_ON(1);
 		return 0;
@@ -255,27 +288,6 @@
 }
 #endif
 
-#define FREQ_QOS_MIN_DEFAULT_VALUE	0
-#define FREQ_QOS_MAX_DEFAULT_VALUE	S32_MAX
-
-enum freq_qos_req_type {
-	FREQ_QOS_MIN = 1,
-	FREQ_QOS_MAX,
-};
-
-struct freq_constraints {
-	struct pm_qos_constraints min_freq;
-	struct blocking_notifier_head min_freq_notifiers;
-	struct pm_qos_constraints max_freq;
-	struct blocking_notifier_head max_freq_notifiers;
-};
-
-struct freq_qos_request {
-	enum freq_qos_req_type type;
-	struct plist_node pnode;
-	struct freq_constraints *qos;
-};
-
 static inline int freq_qos_request_active(struct freq_qos_request *req)
 {
 	return !IS_ERR_OR_NULL(req->qos);
@@ -291,6 +303,8 @@
 			 enum freq_qos_req_type type, s32 value);
 int freq_qos_update_request(struct freq_qos_request *req, s32 new_value);
 int freq_qos_remove_request(struct freq_qos_request *req);
+int freq_qos_apply(struct freq_qos_request *req,
+		   enum pm_qos_req_action action, s32 value);
 
 int freq_qos_add_notifier(struct freq_constraints *qos,
 			  enum freq_qos_req_type type,
diff --git a/include/linux/power/charger-manager.h b/include/linux/power/charger-manager.h
index ad19e68..ae94dce 100644
--- a/include/linux/power/charger-manager.h
+++ b/include/linux/power/charger-manager.h
@@ -248,7 +248,7 @@
 	u64 charging_end_time;
 };
 
-#ifdef CONFIG_CHARGER_MANAGER
+#if IS_ENABLED(CONFIG_CHARGER_MANAGER)
 extern void cm_notify_event(struct power_supply *psy,
 				enum cm_event_types type, char *msg);
 #else
diff --git a/include/linux/power_supply.h b/include/linux/power_supply.h
index 28413f73..ff99236 100644
--- a/include/linux/power_supply.h
+++ b/include/linux/power_supply.h
@@ -17,6 +17,7 @@
 #include <linux/leds.h>
 #include <linux/spinlock.h>
 #include <linux/notifier.h>
+#include <linux/android_kabi.h>
 
 /*
  * All voltages, currents, charges, energies, time and temperatures in uV,
@@ -48,6 +49,12 @@
 	POWER_SUPPLY_CHARGE_TYPE_STANDARD,	/* normal speed */
 	POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE,	/* dynamically adjusted speed */
 	POWER_SUPPLY_CHARGE_TYPE_CUSTOM,	/* use CHARGE_CONTROL_* props */
+
+	/*
+	 * force to 50 to minimize the chances of userspace binary
+	 * incompatibility on newer upstream kernels
+	 */
+	POWER_SUPPLY_CHARGE_TYPE_TAPER = 50, 	/* charging in CV phase */
 };
 
 enum {
@@ -61,6 +68,10 @@
 	POWER_SUPPLY_HEALTH_WATCHDOG_TIMER_EXPIRE,
 	POWER_SUPPLY_HEALTH_SAFETY_TIMER_EXPIRE,
 	POWER_SUPPLY_HEALTH_OVERCURRENT,
+	POWER_SUPPLY_HEALTH_CALIBRATION_REQUIRED,
+	POWER_SUPPLY_HEALTH_WARM,
+	POWER_SUPPLY_HEALTH_COOL,
+	POWER_SUPPLY_HEALTH_HOT,
 };
 
 enum {
@@ -139,6 +150,7 @@
 	POWER_SUPPLY_PROP_CAPACITY, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_ALERT_MIN, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_ALERT_MAX, /* in percents! */
+	POWER_SUPPLY_PROP_CAPACITY_ERROR_MARGIN, /* in percents! */
 	POWER_SUPPLY_PROP_CAPACITY_LEVEL,
 	POWER_SUPPLY_PROP_TEMP,
 	POWER_SUPPLY_PROP_TEMP_MAX,
@@ -158,6 +170,9 @@
 	POWER_SUPPLY_PROP_PRECHARGE_CURRENT,
 	POWER_SUPPLY_PROP_CHARGE_TERM_CURRENT,
 	POWER_SUPPLY_PROP_CALIBRATE,
+	POWER_SUPPLY_PROP_MANUFACTURE_YEAR,
+	POWER_SUPPLY_PROP_MANUFACTURE_MONTH,
+	POWER_SUPPLY_PROP_MANUFACTURE_DAY,
 	/* Properties of type `const char *' */
 	POWER_SUPPLY_PROP_MODEL_NAME,
 	POWER_SUPPLY_PROP_MANUFACTURER,
@@ -177,6 +192,7 @@
 	POWER_SUPPLY_TYPE_USB_PD,		/* Power Delivery Port */
 	POWER_SUPPLY_TYPE_USB_PD_DRP,		/* PD Dual Role Port */
 	POWER_SUPPLY_TYPE_APPLE_BRICK_ID,	/* Apple Charging Method */
+	POWER_SUPPLY_TYPE_WIRELESS,		/* Wireless */
 };
 
 enum power_supply_usb_type {
@@ -217,6 +233,8 @@
 
 	char **supplied_to;
 	size_t num_supplicants;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Description of power supply */
@@ -258,6 +276,8 @@
 	bool no_thermal;
 	/* For APM emulation, think legacy userspace. */
 	int use_for_apm;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct power_supply {
@@ -299,6 +319,8 @@
 	struct led_trigger *charging_blink_full_solid_trig;
 	char *charging_blink_full_solid_trig_name;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -325,6 +347,11 @@
 	int capacity;	/* percent */
 };
 
+struct power_supply_resistance_temp_table {
+	int temp;	/* celsius */
+	int resistance;	/* internal resistance percent */
+};
+
 #define POWER_SUPPLY_OCV_TEMP_MAX 20
 
 /*
@@ -349,6 +376,10 @@
 	int ocv_temp[POWER_SUPPLY_OCV_TEMP_MAX];/* celsius */
 	struct power_supply_battery_ocv_table *ocv_table[POWER_SUPPLY_OCV_TEMP_MAX];
 	int ocv_table_size[POWER_SUPPLY_OCV_TEMP_MAX];
+	struct power_supply_resistance_temp_table *resist_table;
+	int resist_table_size;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern struct atomic_notifier_head power_supply_notifier;
@@ -359,12 +390,22 @@
 #ifdef CONFIG_OF
 extern struct power_supply *power_supply_get_by_phandle(struct device_node *np,
 							const char *property);
+extern int power_supply_get_by_phandle_array(struct device_node *np,
+					     const char *property,
+					     struct power_supply **psy,
+					     ssize_t size);
 extern struct power_supply *devm_power_supply_get_by_phandle(
 				    struct device *dev, const char *property);
 #else /* !CONFIG_OF */
 static inline struct power_supply *
 power_supply_get_by_phandle(struct device_node *np, const char *property)
 { return NULL; }
+static inline int
+power_supply_get_by_phandle_array(struct device_node *np,
+				  const char *property,
+				  struct power_supply **psy,
+				  int size)
+{ return 0; }
 static inline struct power_supply *
 devm_power_supply_get_by_phandle(struct device *dev, const char *property)
 { return NULL; }
@@ -381,6 +422,9 @@
 				int temp, int *table_len);
 extern int power_supply_batinfo_ocv2cap(struct power_supply_battery_info *info,
 					int ocv, int temp);
+extern int
+power_supply_temp2resist_simple(struct power_supply_resistance_temp_table *table,
+				int table_len, int temp);
 extern void power_supply_changed(struct power_supply *psy);
 extern int power_supply_am_i_supplied(struct power_supply *psy);
 extern int power_supply_set_input_current_limit_from_supplier(
diff --git a/include/linux/printk.h b/include/linux/printk.h
index 3b5cb66..2efa602 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -286,8 +286,9 @@
 /*
  * These can be used to print at the various log levels.
  * All of these will print unconditionally, although note that pr_debug()
- * and other debug macros are compiled out unless either DEBUG is defined
- * or CONFIG_DYNAMIC_DEBUG is set.
+ * and other debug macros are compiled out unless either DEBUG is defined,
+ * CONFIG_DYNAMIC_DEBUG is set, or CONFIG_DYNAMIC_DEBUG_CORE is set when
+ * DYNAMIC_DEBUG_MODULE being defined for any modules.
  */
 #define pr_emerg(fmt, ...) \
 	printk(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
@@ -323,7 +324,8 @@
 
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #include <linux/dynamic_debug.h>
 
 /* dynamic_pr_debug() uses pr_fmt() internally so we don't need it here */
@@ -449,7 +451,8 @@
 #endif
 
 /* If you are writing a driver, please use dev_dbg instead */
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define pr_debug_ratelimited(fmt, ...)					\
 do {									\
@@ -496,7 +499,8 @@
 
 #endif
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define print_hex_dump_debug(prefix_str, prefix_type, rowsize,	\
 			     groupsize, buf, len, ascii)	\
 	dynamic_hex_dump(prefix_str, prefix_type, rowsize,	\
diff --git a/include/linux/psi_types.h b/include/linux/psi_types.h
index 07aaf9b..fc18e72 100644
--- a/include/linux/psi_types.h
+++ b/include/linux/psi_types.h
@@ -145,9 +145,10 @@
 	unsigned long avg[NR_PSI_STATES - 1][3];
 
 	/* Monitor work control */
-	atomic_t poll_scheduled;
-	struct kthread_worker __rcu *poll_kworker;
-	struct kthread_delayed_work poll_work;
+	struct task_struct __rcu *poll_task;
+	struct timer_list poll_timer;
+	wait_queue_head_t poll_wait;
+	atomic_t poll_wakeup;
 
 	/* Protects data used by the monitor */
 	struct mutex trigger_lock;
diff --git a/include/linux/pstore.h b/include/linux/pstore.h
index e779441..eb93a54 100644
--- a/include/linux/pstore.h
+++ b/include/linux/pstore.h
@@ -96,6 +96,12 @@
  *
  * @read_mutex:	serializes @open, @read, @close, and @erase callbacks
  * @flags:	bitfield of frontends the backend can accept writes for
+ * @max_reason:	Used when PSTORE_FLAGS_DMESG is set. Contains the
+ *		kmsg_dump_reason enum value. KMSG_DUMP_UNDEF means
+ *		"use existing kmsg_dump() filtering, based on the
+ *		printk.always_kmsg_dump boot param" (which is either
+ *		KMSG_DUMP_OOPS when false, or KMSG_DUMP_MAX when
+ *		true); see printk.always_kmsg_dump for more details.
  * @data:	backend-private pointer passed back during callbacks
  *
  * Callbacks:
@@ -170,7 +176,7 @@
  */
 struct pstore_info {
 	struct module	*owner;
-	char		*name;
+	const char	*name;
 
 	struct semaphore buf_lock;
 	char		*buf;
@@ -179,6 +185,7 @@
 	struct mutex	read_mutex;
 
 	int		flags;
+	int		max_reason;
 	void		*data;
 
 	int		(*open)(struct pstore_info *psi);
diff --git a/include/linux/pstore_blk.h b/include/linux/pstore_blk.h
new file mode 100644
index 0000000..61e9145
--- /dev/null
+++ b/include/linux/pstore_blk.h
@@ -0,0 +1,118 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __PSTORE_BLK_H_
+#define __PSTORE_BLK_H_
+
+#include <linux/types.h>
+#include <linux/pstore.h>
+#include <linux/pstore_zone.h>
+
+/**
+ * typedef pstore_blk_panic_write_op - panic write operation to block device
+ *
+ * @buf: the data to write
+ * @start_sect: start sector to block device
+ * @sects: sectors count on buf
+ *
+ * Return: On success, zero should be returned. Others excluding -ENOMSG
+ * mean error. -ENOMSG means to try next zone.
+ *
+ * Panic write to block device must be aligned to SECTOR_SIZE.
+ */
+typedef int (*pstore_blk_panic_write_op)(const char *buf, sector_t start_sect,
+		sector_t sects);
+
+/**
+ * struct pstore_blk_info - pstore/blk registration details
+ *
+ * @major:	Which major device number to support with pstore/blk
+ * @flags:	The supported PSTORE_FLAGS_* from linux/pstore.h.
+ * @panic_write:The write operation only used for the panic case.
+ *		This can be NULL, but is recommended to avoid losing
+ *		crash data if the kernel's IO path or work queues are
+ *		broken during a panic.
+ * @devt:	The dev_t that pstore/blk has attached to.
+ * @nr_sects:	Number of sectors on @devt.
+ * @start_sect:	Starting sector on @devt.
+ */
+struct pstore_blk_info {
+	unsigned int major;
+	unsigned int flags;
+	pstore_blk_panic_write_op panic_write;
+
+	/* Filled in by pstore/blk after registration. */
+	dev_t devt;
+	sector_t nr_sects;
+	sector_t start_sect;
+};
+
+int  register_pstore_blk(struct pstore_blk_info *info);
+void unregister_pstore_blk(unsigned int major);
+
+/**
+ * struct pstore_device_info - back-end pstore/blk driver structure.
+ *
+ * @total_size: The total size in bytes pstore/blk can use. It must be greater
+ *		than 4096 and be multiple of 4096.
+ * @flags:	Refer to macro starting with PSTORE_FLAGS defined in
+ *		linux/pstore.h. It means what front-ends this device support.
+ *		Zero means all backends for compatible.
+ * @read:	The general read operation. Both of the function parameters
+ *		@size and @offset are relative value to bock device (not the
+ *		whole disk).
+ *		On success, the number of bytes should be returned, others
+ *		means error.
+ * @write:	The same as @read, but the following error number:
+ *		-EBUSY means try to write again later.
+ *		-ENOMSG means to try next zone.
+ * @erase:	The general erase operation for device with special removing
+ *		job. Both of the function parameters @size and @offset are
+ *		relative value to storage.
+ *		Return 0 on success and others on failure.
+ * @panic_write:The write operation only used for panic case. It's optional
+ *		if you do not care panic log. The parameters are relative
+ *		value to storage.
+ *		On success, the number of bytes should be returned, others
+ *		excluding -ENOMSG mean error. -ENOMSG means to try next zone.
+ */
+struct pstore_device_info {
+	unsigned long total_size;
+	unsigned int flags;
+	pstore_zone_read_op read;
+	pstore_zone_write_op write;
+	pstore_zone_erase_op erase;
+	pstore_zone_write_op panic_write;
+};
+
+int  register_pstore_device(struct pstore_device_info *dev);
+void unregister_pstore_device(struct pstore_device_info *dev);
+
+/**
+ * struct pstore_blk_config - the pstore_blk backend configuration
+ *
+ * @device:		Name of the desired block device
+ * @max_reason:		Maximum kmsg dump reason to store to block device
+ * @kmsg_size:		Total size of for kmsg dumps
+ * @pmsg_size:		Total size of the pmsg storage area
+ * @console_size:	Total size of the console storage area
+ * @ftrace_size:	Total size for ftrace logging data (for all CPUs)
+ */
+struct pstore_blk_config {
+	char device[80];
+	enum kmsg_dump_reason max_reason;
+	unsigned long kmsg_size;
+	unsigned long pmsg_size;
+	unsigned long console_size;
+	unsigned long ftrace_size;
+};
+
+/**
+ * pstore_blk_get_config - get a copy of the pstore_blk backend configuration
+ *
+ * @info:	The sturct pstore_blk_config to be filled in
+ *
+ * Failure returns negative error code, and success returns 0.
+ */
+int pstore_blk_get_config(struct pstore_blk_config *info);
+
+#endif
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
index 9cb9b90..9f16afe 100644
--- a/include/linux/pstore_ram.h
+++ b/include/linux/pstore_ram.h
@@ -133,7 +133,7 @@
 	unsigned long	console_size;
 	unsigned long	ftrace_size;
 	unsigned long	pmsg_size;
-	int		dump_oops;
+	int		max_reason;
 	u32		flags;
 	struct persistent_ram_ecc_info ecc_info;
 };
diff --git a/include/linux/pstore_zone.h b/include/linux/pstore_zone.h
new file mode 100644
index 0000000..1e35eaa3
--- /dev/null
+++ b/include/linux/pstore_zone.h
@@ -0,0 +1,60 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#ifndef __PSTORE_ZONE_H_
+#define __PSTORE_ZONE_H_
+
+#include <linux/types.h>
+
+typedef ssize_t (*pstore_zone_read_op)(char *, size_t, loff_t);
+typedef ssize_t (*pstore_zone_write_op)(const char *, size_t, loff_t);
+typedef ssize_t (*pstore_zone_erase_op)(size_t, loff_t);
+/**
+ * struct pstore_zone_info - pstore/zone back-end driver structure
+ *
+ * @owner:	Module which is responsible for this back-end driver.
+ * @name:	Name of the back-end driver.
+ * @total_size: The total size in bytes pstore/zone can use. It must be greater
+ *		than 4096 and be multiple of 4096.
+ * @kmsg_size:	The size of oops/panic zone. Zero means disabled, otherwise,
+ *		it must be multiple of SECTOR_SIZE(512 Bytes).
+ * @max_reason: Maximum kmsg dump reason to store.
+ * @pmsg_size:	The size of pmsg zone which is the same as @kmsg_size.
+ * @console_size:The size of console zone which is the same as @kmsg_size.
+ * @ftrace_size:The size of ftrace zone which is the same as @kmsg_size.
+ * @read:	The general read operation. Both of the function parameters
+ *		@size and @offset are relative value to storage.
+ *		On success, the number of bytes should be returned, others
+ *		mean error.
+ * @write:	The same as @read, but the following error number:
+ *		-EBUSY means try to write again later.
+ *		-ENOMSG means to try next zone.
+ * @erase:	The general erase operation for device with special removing
+ *		job. Both of the function parameters @size and @offset are
+ *		relative value to storage.
+ *		Return 0 on success and others on failure.
+ * @panic_write:The write operation only used for panic case. It's optional
+ *		if you do not care panic log. The parameters are relative
+ *		value to storage.
+ *		On success, the number of bytes should be returned, others
+ *		excluding -ENOMSG mean error. -ENOMSG means to try next zone.
+ */
+struct pstore_zone_info {
+	struct module *owner;
+	const char *name;
+
+	unsigned long total_size;
+	unsigned long kmsg_size;
+	int max_reason;
+	unsigned long pmsg_size;
+	unsigned long console_size;
+	unsigned long ftrace_size;
+	pstore_zone_read_op read;
+	pstore_zone_write_op write;
+	pstore_zone_erase_op erase;
+	pstore_zone_write_op panic_write;
+};
+
+extern int register_pstore_zone(struct pstore_zone_info *info);
+extern void unregister_pstore_zone(struct pstore_zone_info *info);
+
+#endif
diff --git a/include/linux/pwm.h b/include/linux/pwm.h
index b2c9c46..7378dd3 100644
--- a/include/linux/pwm.h
+++ b/include/linux/pwm.h
@@ -5,6 +5,7 @@
 #include <linux/err.h>
 #include <linux/mutex.h>
 #include <linux/of.h>
+#include <linux/android_kabi.h>
 
 struct pwm_capture;
 struct seq_file;
@@ -39,7 +40,7 @@
  * current PWM hardware state.
  */
 struct pwm_args {
-	unsigned int period;
+	u64 period;
 	enum pwm_polarity polarity;
 };
 
@@ -48,6 +49,17 @@
 	PWMF_EXPORTED = 1 << 1,
 };
 
+/**
+ * enum pwm_output_type - output type of the PWM signal
+ * @PWM_OUTPUT_FIXED: PWM output is fixed until a change request
+ * @PWM_OUTPUT_MODULATED: PWM output is modulated in hardware
+ * autonomously with a predefined pattern
+ */
+enum pwm_output_type {
+	PWM_OUTPUT_FIXED = 1 << 0,
+	PWM_OUTPUT_MODULATED = 1 << 1,
+};
+
 /*
  * struct pwm_state - state of a PWM channel
  * @period: PWM period (in nanoseconds)
@@ -56,9 +68,10 @@
  * @enabled: PWM enabled status
  */
 struct pwm_state {
-	unsigned int period;
-	unsigned int duty_cycle;
+	u64 period;
+	u64 duty_cycle;
 	enum pwm_polarity polarity;
+	enum pwm_output_type output_type;
 	bool enabled;
 };
 
@@ -83,6 +96,8 @@
 
 	struct pwm_args args;
 	struct pwm_state state;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -105,13 +120,13 @@
 	return state.enabled;
 }
 
-static inline void pwm_set_period(struct pwm_device *pwm, unsigned int period)
+static inline void pwm_set_period(struct pwm_device *pwm, u64 period)
 {
 	if (pwm)
 		pwm->state.period = period;
 }
 
-static inline unsigned int pwm_get_period(const struct pwm_device *pwm)
+static inline u64 pwm_get_period(const struct pwm_device *pwm)
 {
 	struct pwm_state state;
 
@@ -126,7 +141,7 @@
 		pwm->state.duty_cycle = duty;
 }
 
-static inline unsigned int pwm_get_duty_cycle(const struct pwm_device *pwm)
+static inline u64 pwm_get_duty_cycle(const struct pwm_device *pwm)
 {
 	struct pwm_state state;
 
@@ -144,6 +159,16 @@
 	return state.polarity;
 }
 
+static inline enum pwm_output_type pwm_get_output_type(
+		const struct pwm_device *pwm)
+{
+	struct pwm_state state;
+
+	pwm_get_state(pwm, &state);
+
+	return state.output_type;
+}
+
 static inline void pwm_get_args(const struct pwm_device *pwm,
 				struct pwm_args *args)
 {
@@ -250,6 +275,7 @@
  * @get_state: get the current PWM state. This function is only
  *	       called once per PWM device when the PWM chip is
  *	       registered.
+ * @get_output_type_supported: get the supported output type of this PWM
  * @owner: helps prevent removal of modules exporting active PWMs
  * @config: configure duty cycles and period length for this PWM
  * @set_polarity: configure the polarity of this PWM
@@ -265,6 +291,8 @@
 		     const struct pwm_state *state);
 	void (*get_state)(struct pwm_chip *chip, struct pwm_device *pwm,
 			  struct pwm_state *state);
+	int (*get_output_type_supported)(struct pwm_chip *chip,
+			struct pwm_device *pwm);
 	struct module *owner;
 
 	/* Only used by legacy drivers */
@@ -274,6 +302,8 @@
 			    enum pwm_polarity polarity);
 	int (*enable)(struct pwm_chip *chip, struct pwm_device *pwm);
 	void (*disable)(struct pwm_chip *chip, struct pwm_device *pwm);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -300,6 +330,8 @@
 	/* only used internally by the PWM framework */
 	struct list_head list;
 	struct pwm_device *pwms;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -308,8 +340,8 @@
  * @duty_cycle: duty cycle of the PWM signal (in nanoseconds)
  */
 struct pwm_capture {
-	unsigned int period;
-	unsigned int duty_cycle;
+	u64 period;
+	u64 duty_cycle;
 };
 
 #if IS_ENABLED(CONFIG_PWM)
@@ -320,6 +352,24 @@
 int pwm_adjust_config(struct pwm_device *pwm);
 
 /**
+ * pwm_get_output_type_supported() - obtain output type of a PWM device.
+ * @pwm: PWM device
+ *
+ * Returns:  output type supported by the PWM device
+ */
+static inline int pwm_get_output_type_supported(struct pwm_device *pwm)
+{
+	if (!pwm)
+		return -EINVAL;
+
+	if (pwm->chip->ops->get_output_type_supported)
+		return pwm->chip->ops->get_output_type_supported(pwm->chip,
+				pwm);
+
+	return PWM_OUTPUT_FIXED;
+}
+
+/**
  * pwm_config() - change a PWM device configuration
  * @pwm: PWM device
  * @duty_ns: "on" time (in nanoseconds)
@@ -437,6 +487,11 @@
 	return -ENOTSUPP;
 }
 
+static inline int pwm_get_output_type_supported(struct pwm_device *pwm)
+{
+	return -EINVAL;
+}
+
 static inline int pwm_config(struct pwm_device *pwm, int duty_ns,
 			     int period_ns)
 {
diff --git a/include/linux/qcom_scm.h b/include/linux/qcom_scm.h
index 2d5eff50..c4dc33a 100644
--- a/include/linux/qcom_scm.h
+++ b/include/linux/qcom_scm.h
@@ -24,6 +24,13 @@
 	int perm;
 };
 
+enum qcom_scm_ice_cipher {
+	QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
+	QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
+	QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
+	QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
+};
+
 #define QCOM_SCM_VMID_HLOS       0x3
 #define QCOM_SCM_VMID_MSS_MSA    0xF
 #define QCOM_SCM_VMID_WLAN       0x18
@@ -48,6 +55,11 @@
 				  phys_addr_t size);
 extern int qcom_scm_pas_auth_and_reset(u32 peripheral);
 extern int qcom_scm_pas_shutdown(u32 peripheral);
+extern bool qcom_scm_ice_available(void);
+extern int qcom_scm_ice_invalidate_key(u32 index);
+extern int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+				enum qcom_scm_ice_cipher cipher,
+				u32 data_unit_size);
 extern int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
 			       unsigned int *src,
 			       const struct qcom_scm_vmperm *newvm,
@@ -58,6 +70,7 @@
 extern int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare);
 extern int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size);
 extern int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare);
+extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en);
 extern int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val);
 extern int qcom_scm_io_writel(phys_addr_t addr, unsigned int val);
 #else
@@ -86,6 +99,11 @@
 static inline int
 qcom_scm_pas_auth_and_reset(u32 peripheral) { return -ENODEV; }
 static inline int qcom_scm_pas_shutdown(u32 peripheral) { return -ENODEV; }
+static inline bool qcom_scm_ice_available(void) { return false; }
+static inline int qcom_scm_ice_invalidate_key(u32 index) { return -ENODEV; }
+static inline int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
+				       enum qcom_scm_ice_cipher cipher,
+				       u32 data_unit_size) { return -ENODEV; }
 static inline int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
 				      unsigned int *src,
 				      const struct qcom_scm_vmperm *newvm,
@@ -97,6 +115,7 @@
 static inline int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare) { return -ENODEV; }
 static inline int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size) { return -ENODEV; }
 static inline int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare) { return -ENODEV; }
+static inline int qcom_scm_qsmmu500_wait_safe_toggle(bool en) { return -ENODEV; }
 static inline int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val) { return -ENODEV; }
 static inline int qcom_scm_io_writel(phys_addr_t addr, unsigned int val) { return -ENODEV; }
 #endif
diff --git a/include/linux/quota.h b/include/linux/quota.h
index 27aab84..3088ac9 100644
--- a/include/linux/quota.h
+++ b/include/linux/quota.h
@@ -316,6 +316,9 @@
 	int (*commit_dqblk)(struct dquot *dquot);	/* Write structure for one user */
 	int (*release_dqblk)(struct dquot *dquot);	/* Called when last reference to dquot is being dropped */
 	int (*get_next_id)(struct super_block *sb, struct kqid *qid);	/* Get next ID with existing structure in the quota file */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* Operations working with dquots */
@@ -335,6 +338,9 @@
 	int (*get_inode_usage) (struct inode *, qsize_t *);
 	/* Get next ID with active quota structure */
 	int (*get_next_id) (struct super_block *sb, struct kqid *qid);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct path;
@@ -438,6 +444,9 @@
 	int (*set_dqblk)(struct super_block *, struct kqid, struct qc_dqblk *);
 	int (*get_state)(struct super_block *, struct qc_state *);
 	int (*rm_xquota)(struct super_block *, unsigned int);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct quota_format_type {
diff --git a/include/linux/random.h b/include/linux/random.h
index 5b3ec7d..0efabaa 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -118,29 +118,21 @@
 #ifdef CONFIG_ARCH_RANDOM
 # include <asm/archrandom.h>
 #else
-static inline bool arch_get_random_long(unsigned long *v)
+static inline bool __must_check arch_get_random_long(unsigned long *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_get_random_int(unsigned int *v)
+static inline bool __must_check arch_get_random_int(unsigned int *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_has_random(void)
+static inline bool __must_check arch_get_random_seed_long(unsigned long *v)
 {
-	return 0;
+	return false;
 }
-static inline bool arch_get_random_seed_long(unsigned long *v)
+static inline bool __must_check arch_get_random_seed_int(unsigned int *v)
 {
-	return 0;
-}
-static inline bool arch_get_random_seed_int(unsigned int *v)
-{
-	return 0;
-}
-static inline bool arch_has_random_seed(void)
-{
-	return 0;
+	return false;
 }
 #endif
 
diff --git a/include/linux/regmap.h b/include/linux/regmap.h
index dfe493a..d01d4e5 100644
--- a/include/linux/regmap.h
+++ b/include/linux/regmap.h
@@ -17,6 +17,7 @@
 #include <linux/err.h>
 #include <linux/bug.h>
 #include <linux/lockdep.h>
+#include <linux/android_kabi.h>
 
 struct module;
 struct clk;
@@ -404,6 +405,8 @@
 	bool use_hwlock;
 	unsigned int hwlock_id;
 	unsigned int hwlock_mode;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -441,6 +444,8 @@
 	/* Data window (per each page) */
 	unsigned int window_start;
 	unsigned int window_len;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct regmap_async;
@@ -517,6 +522,8 @@
 	enum regmap_endian val_format_endian_default;
 	size_t max_raw_read;
 	size_t max_raw_write;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
diff --git a/include/linux/regulator/driver.h b/include/linux/regulator/driver.h
index 9a911bb..400c47a 100644
--- a/include/linux/regulator/driver.h
+++ b/include/linux/regulator/driver.h
@@ -16,6 +16,7 @@
 #include <linux/notifier.h>
 #include <linux/regulator/consumer.h>
 #include <linux/ww_mutex.h>
+#include <linux/android_kabi.h>
 
 struct gpio_desc;
 struct regmap;
@@ -219,6 +220,8 @@
 	int (*resume)(struct regulator_dev *rdev);
 
 	int (*set_pull_down) (struct regulator_dev *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -390,6 +393,8 @@
 	unsigned int off_on_delay;
 
 	unsigned int (*of_map_mode)(unsigned int mode);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -482,6 +487,8 @@
 
 	/* time when this regulator was disabled last time */
 	unsigned long last_off_jiffy;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct regulator_dev *
diff --git a/include/linux/remoteproc.h b/include/linux/remoteproc.h
index 16ad666..215f2e68 100644
--- a/include/linux/remoteproc.h
+++ b/include/linux/remoteproc.h
@@ -357,6 +357,7 @@
  * struct rproc_ops - platform-specific device handlers
  * @start:	power on the device and boot it
  * @stop:	power off the device
+ * @attach:	attach to a device that his already powered up
  * @kick:	kick a virtqueue (virtqueue id given as a parameter)
  * @da_to_va:	optional platform hook to perform address translations
  * @parse_fw:	parse firmware to extract information (e.g. resource table)
@@ -373,6 +374,7 @@
 struct rproc_ops {
 	int (*start)(struct rproc *rproc);
 	int (*stop)(struct rproc *rproc);
+	int (*attach)(struct rproc *rproc);
 	void (*kick)(struct rproc *rproc, int vqid);
 	void * (*da_to_va)(struct rproc *rproc, u64 da, int len);
 	int (*parse_fw)(struct rproc *rproc, const struct firmware *fw);
@@ -393,6 +395,8 @@
  * @RPROC_RUNNING:	device is up and running
  * @RPROC_CRASHED:	device has crashed; need to start recovery
  * @RPROC_DELETED:	device is deleted
+ * @RPROC_DETACHED:	device has been booted by another entity and waiting
+ *			for the core to attach to it
  * @RPROC_LAST:		just keep this one at the end
  *
  * Please note that the values of these states are used as indices
@@ -407,7 +411,8 @@
 	RPROC_RUNNING	= 2,
 	RPROC_CRASHED	= 3,
 	RPROC_DELETED	= 4,
-	RPROC_LAST	= 5,
+	RPROC_DETACHED	= 5,
+	RPROC_LAST	= 6,
 };
 
 /**
@@ -479,6 +484,7 @@
  * @table_sz: size of @cached_table
  * @has_iommu: flag to indicate if remote processor is behind an MMU
  * @auto_boot: flag to indicate if remote processor should be auto-started
+ * @autonomous: true if an external entity has booted the remote processor
  * @dump_segments: list of segments in the firmware
  * @nb_vdev: number of vdev currently handled by rproc
  */
@@ -512,6 +518,7 @@
 	size_t table_sz;
 	bool has_iommu;
 	bool auto_boot;
+	bool autonomous;
 	struct list_head dump_segments;
 	int nb_vdev;
 };
diff --git a/include/linux/rpmsg.h b/include/linux/rpmsg.h
index a68972b..7cbb0fb 100644
--- a/include/linux/rpmsg.h
+++ b/include/linux/rpmsg.h
@@ -2,6 +2,7 @@
 /*
  * Remote processor messaging
  *
+ * Copyright (c) 2020 The Linux Foundation.
  * Copyright (C) 2011 Texas Instruments, Inc.
  * Copyright (C) 2011 Google, Inc.
  * All rights reserved.
@@ -60,6 +61,7 @@
 };
 
 typedef int (*rpmsg_rx_cb_t)(struct rpmsg_device *, void *, int, void *, u32);
+typedef int (*rpmsg_rx_sig_t)(struct rpmsg_device *, void *, u32, u32);
 
 /**
  * struct rpmsg_endpoint - binds a local rpmsg address to its user
@@ -67,6 +69,7 @@
  * @refcount: when this drops to zero, the ept is deallocated
  * @cb: rx callback handler
  * @cb_lock: must be taken before accessing/changing @cb
+ * @sig_cb: rx serial signal handler
  * @addr: local rpmsg address
  * @priv: private data for the driver's use
  *
@@ -89,6 +92,7 @@
 	struct kref refcount;
 	rpmsg_rx_cb_t cb;
 	struct mutex cb_lock;
+	rpmsg_rx_sig_t sig_cb;
 	u32 addr;
 	void *priv;
 
@@ -102,6 +106,7 @@
  * @probe: invoked when a matching rpmsg channel (i.e. device) is found
  * @remove: invoked when the rpmsg channel is removed
  * @callback: invoked when an inbound message is received on the channel
+ * @signals: invoked when a serial signal change is received on the channel
  */
 struct rpmsg_driver {
 	struct device_driver drv;
@@ -109,6 +114,8 @@
 	int (*probe)(struct rpmsg_device *dev);
 	void (*remove)(struct rpmsg_device *dev);
 	int (*callback)(struct rpmsg_device *, void *, int, void *, u32);
+	int (*signals)(struct rpmsg_device *rpdev,
+		       void *priv, u32 old, u32 new);
 };
 
 #if IS_ENABLED(CONFIG_RPMSG)
@@ -135,6 +142,9 @@
 __poll_t rpmsg_poll(struct rpmsg_endpoint *ept, struct file *filp,
 			poll_table *wait);
 
+int rpmsg_get_signals(struct rpmsg_endpoint *ept);
+int rpmsg_set_signals(struct rpmsg_endpoint *ept, u32 set, u32 clear);
+
 #else
 
 static inline int register_rpmsg_device(struct rpmsg_device *dev)
@@ -242,6 +252,23 @@
 	return 0;
 }
 
+static inline int rpmsg_get_signals(struct rpmsg_endpoint *ept)
+{
+	/* This shouldn't be possible */
+	WARN_ON(1);
+
+	return -ENXIO;
+}
+
+static inline int rpmsg_set_signals(struct rpmsg_endpoint *ept,
+				    u32 set, u32 clear)
+{
+	/* This shouldn't be possible */
+	WARN_ON(1);
+
+	return -ENXIO;
+}
+
 #endif /* IS_ENABLED(CONFIG_RPMSG) */
 
 /* use a macro to avoid include chaining to get THIS_MODULE */
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index df666cf..a71539c 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -16,6 +16,7 @@
 #include <linux/types.h>
 #include <linux/interrupt.h>
 #include <linux/nvmem-provider.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/rtc.h>
 
 extern int rtc_month_days(unsigned int month, unsigned int year);
@@ -82,6 +83,8 @@
 	int (*alarm_irq_enable)(struct device *, unsigned int enabled);
 	int (*read_offset)(struct device *, long *offset);
 	int (*set_offset)(struct device *, long offset);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct rtc_device;
@@ -156,6 +159,8 @@
 	unsigned int uie_task_active:1;
 	unsigned int uie_timer_active:1;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
 };
 #define to_rtc_device(d) container_of(d, struct rtc_device, dev)
 
diff --git a/include/linux/rwsem.h b/include/linux/rwsem.h
index 8a36063..72996508 100644
--- a/include/linux/rwsem.h
+++ b/include/linux/rwsem.h
@@ -19,6 +19,7 @@
 #ifdef CONFIG_RWSEM_SPIN_ON_OWNER
 #include <linux/osq_lock.h>
 #endif
+#include <linux/android_vendor.h>
 
 /*
  * For an uncontended rwsem, count and owner are the only fields a task
@@ -51,6 +52,7 @@
 #ifdef CONFIG_DEBUG_LOCK_ALLOC
 	struct lockdep_map	dep_map;
 #endif
+	ANDROID_VENDOR_DATA(1);
 };
 
 /*
diff --git a/include/linux/scatterlist.h b/include/linux/scatterlist.h
index 6eec50f..45cf7b6 100644
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -151,6 +151,20 @@
 #define for_each_sg(sglist, sg, nr, __i)	\
 	for (__i = 0, sg = (sglist); __i < (nr); __i++, sg = sg_next(sg))
 
+/*
+ * Loop over each sg element in the given sg_table object.
+ */
+#define for_each_sgtable_sg(sgt, sg, i)		\
+	for_each_sg((sgt)->sgl, sg, (sgt)->orig_nents, i)
+
+/*
+ * Loop over each sg element in the given *DMA mapped* sg_table object.
+ * Please use sg_dma_address(sg) and sg_dma_len(sg) to extract DMA addresses
+ * of the each element.
+ */
+#define for_each_sgtable_dma_sg(sgt, sg, i)	\
+	for_each_sg((sgt)->sgl, sg, (sgt)->nents, i)
+
 /**
  * sg_chain - Chain two sglists together
  * @prv:	First scatterlist
@@ -401,9 +415,10 @@
  * @sglist:	sglist to iterate over
  * @piter:	page iterator to hold current page, sg, sg_pgoffset
  * @nents:	maximum number of sg entries to iterate over
- * @pgoffset:	starting page offset
+ * @pgoffset:	starting page offset (in pages)
  *
  * Callers may use sg_page_iter_page() to get each page pointer.
+ * In each loop it operates on PAGE_SIZE unit.
  */
 #define for_each_sg_page(sglist, piter, nents, pgoffset)		   \
 	for (__sg_page_iter_start((piter), (sglist), (nents), (pgoffset)); \
@@ -412,18 +427,47 @@
 /**
  * for_each_sg_dma_page - iterate over the pages of the given sg list
  * @sglist:	sglist to iterate over
- * @dma_iter:	page iterator to hold current page
+ * @dma_iter:	DMA page iterator to hold current page
  * @dma_nents:	maximum number of sg entries to iterate over, this is the value
  *              returned from dma_map_sg
- * @pgoffset:	starting page offset
+ * @pgoffset:	starting page offset (in pages)
  *
  * Callers may use sg_page_iter_dma_address() to get each page's DMA address.
+ * In each loop it operates on PAGE_SIZE unit.
  */
 #define for_each_sg_dma_page(sglist, dma_iter, dma_nents, pgoffset)            \
 	for (__sg_page_iter_start(&(dma_iter)->base, sglist, dma_nents,        \
 				  pgoffset);                                   \
 	     __sg_page_iter_dma_next(dma_iter);)
 
+/**
+ * for_each_sgtable_page - iterate over all pages in the sg_table object
+ * @sgt:	sg_table object to iterate over
+ * @piter:	page iterator to hold current page
+ * @pgoffset:	starting page offset (in pages)
+ *
+ * Iterates over the all memory pages in the buffer described by
+ * a scatterlist stored in the given sg_table object.
+ * See also for_each_sg_page(). In each loop it operates on PAGE_SIZE unit.
+ */
+#define for_each_sgtable_page(sgt, piter, pgoffset)	\
+	for_each_sg_page((sgt)->sgl, piter, (sgt)->orig_nents, pgoffset)
+
+/**
+ * for_each_sgtable_dma_page - iterate over the DMA mapped sg_table object
+ * @sgt:	sg_table object to iterate over
+ * @dma_iter:	DMA page iterator to hold current page
+ * @pgoffset:	starting page offset (in pages)
+ *
+ * Iterates over the all DMA mapped pages in the buffer described by
+ * a scatterlist stored in the given sg_table object.
+ * See also for_each_sg_dma_page(). In each loop it operates on PAGE_SIZE
+ * unit.
+ */
+#define for_each_sgtable_dma_page(sgt, dma_iter, pgoffset)	\
+	for_each_sg_dma_page((sgt)->sgl, dma_iter, (sgt)->nents, pgoffset)
+
+
 /*
  * Mapping sg iterator
  *
diff --git a/include/linux/sched.h b/include/linux/sched.h
index afee5d5..f83d607 100644
--- a/include/linux/sched.h
+++ b/include/linux/sched.h
@@ -31,6 +31,8 @@
 #include <linux/task_io_accounting.h>
 #include <linux/posix-timers.h>
 #include <linux/rseq.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 /* task_struct member predeclarations (sorted alphabetically): */
 struct audit_context;
@@ -476,6 +478,11 @@
 	 */
 	struct sched_avg		avg;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct sched_rt_entity {
@@ -494,6 +501,11 @@
 	/* rq "owned" by this entity/group: */
 	struct rt_rq			*my_q;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 struct sched_dl_entity {
@@ -681,9 +693,15 @@
 	struct sched_dl_entity		dl;
 
 #ifdef CONFIG_UCLAMP_TASK
-	/* Clamp values requested for a scheduling entity */
+	/*
+	 * Clamp values requested for a scheduling entity.
+	 * Must be updated with task_rq_lock() held.
+	 */
 	struct uclamp_se		uclamp_req[UCLAMP_CNT];
-	/* Effective clamp values used for a scheduling entity */
+	/*
+	 * Effective clamp values used for a scheduling entity.
+	 * Must be updated with task_rq_lock() held.
+	 */
 	struct uclamp_se		uclamp[UCLAMP_CNT];
 #endif
 
@@ -841,6 +859,10 @@
 	u64				stimescaled;
 #endif
 	u64				gtime;
+#ifdef CONFIG_CPU_FREQ_TIMES
+	u64				*time_in_state;
+	unsigned int			max_state;
+#endif
 	struct prev_cputime		prev_cputime;
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
 	struct vtime			vtime;
@@ -987,7 +1009,7 @@
 	struct held_lock		held_locks[MAX_LOCK_DEPTH];
 #endif
 
-#ifdef CONFIG_UBSAN
+#if defined(CONFIG_UBSAN) && !defined(CONFIG_UBSAN_TRAP)
 	unsigned int			in_ubsan;
 #endif
 
@@ -1205,6 +1227,8 @@
 #endif /* CONFIG_TRACING */
 
 #ifdef CONFIG_KCOV
+	/* See kernel/kcov.c for more details. */
+
 	/* Coverage collection mode enabled for this task (0 if disabled): */
 	unsigned int			kcov_mode;
 
@@ -1216,6 +1240,12 @@
 
 	/* KCOV descriptor wired with this task or NULL: */
 	struct kcov			*kcov;
+
+	/* KCOV common handle for remote coverage collection: */
+	u64				kcov_handle;
+
+	/* KCOV sequence number: */
+	int				kcov_sequence;
 #endif
 
 #ifdef CONFIG_MEMCG
@@ -1268,6 +1298,18 @@
 	unsigned long			prev_lowest_stack;
 #endif
 
+	ANDROID_VENDOR_DATA_ARRAY(1, 2);
+	ANDROID_OEM_DATA_ARRAY(1, 3);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+
 	/*
 	 * New fields for task_struct should be added above here, so that
 	 * they are included in the randomized portion of task_struct.
diff --git a/include/linux/sched/signal.h b/include/linux/sched/signal.h
index b3f8847..18a2148 100644
--- a/include/linux/sched/signal.h
+++ b/include/linux/sched/signal.h
@@ -10,6 +10,9 @@
 #include <linux/cred.h>
 #include <linux/refcount.h>
 #include <linux/posix-timers.h>
+#include <linux/android_kabi.h>
+#include <linux/mm_types.h>
+#include <asm/ptrace.h>
 
 /*
  * Types defining task->signal and task->sighand and APIs using them:
@@ -233,6 +236,10 @@
 						 * and may have inconsistent
 						 * permissions.
 						 */
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 } __randomize_layout;
 
 /*
@@ -378,6 +385,20 @@
 }
 
 /*
+ * This should only be used in fault handlers to decide whether we
+ * should stop the current fault routine to handle the signals
+ * instead, especially with the case where we've got interrupted with
+ * a VM_FAULT_RETRY.
+ */
+static inline bool fault_signal_pending(vm_fault_t fault_flags,
+					struct pt_regs *regs)
+{
+	return unlikely((fault_flags & VM_FAULT_RETRY) &&
+			(fatal_signal_pending(current) ||
+			 (user_mode(regs) && signal_pending(current))));
+}
+
+/*
  * Reevaluate whether the task has signals pending delivery.
  * Wake the task if so.
  * This is required every time the blocked sigset_t changes.
diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h
index d4f6215..e62cef0 100644
--- a/include/linux/sched/sysctl.h
+++ b/include/linux/sched/sysctl.h
@@ -59,6 +59,7 @@
 #ifdef CONFIG_UCLAMP_TASK
 extern unsigned int sysctl_sched_uclamp_util_min;
 extern unsigned int sysctl_sched_uclamp_util_max;
+extern unsigned int sysctl_sched_uclamp_util_min_rt_default;
 #endif
 
 #ifdef CONFIG_CFS_BANDWIDTH
diff --git a/include/linux/sched/task.h b/include/linux/sched/task.h
index 36f3011..a7bfe6b 100644
--- a/include/linux/sched/task.h
+++ b/include/linux/sched/task.h
@@ -48,6 +48,7 @@
 extern void init_idle(struct task_struct *idle, int cpu);
 
 extern int sched_fork(unsigned long clone_flags, struct task_struct *p);
+extern void sched_post_fork(struct task_struct *p);
 extern void sched_dead(struct task_struct *p);
 
 void __noreturn do_task_dead(void);
diff --git a/include/linux/sched/topology.h b/include/linux/sched/topology.h
index f341163..509c0d1 100644
--- a/include/linux/sched/topology.h
+++ b/include/linux/sched/topology.h
@@ -3,6 +3,7 @@
 #define _LINUX_SCHED_TOPOLOGY_H
 
 #include <linux/topology.h>
+#include <linux/android_kabi.h>
 
 #include <linux/sched/idle.h>
 
@@ -135,6 +136,10 @@
 	struct sched_domain_shared *shared;
 
 	unsigned int span_weight;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/*
 	 * Span of all CPUs in this domain.
 	 *
diff --git a/include/linux/sched/user.h b/include/linux/sched/user.h
index 917d88e..573b448 100644
--- a/include/linux/sched/user.h
+++ b/include/linux/sched/user.h
@@ -6,6 +6,7 @@
 #include <linux/atomic.h>
 #include <linux/refcount.h>
 #include <linux/ratelimit.h>
+#include <linux/android_kabi.h>
 
 /*
  * Some day this will be a full-fledged user tracking system..
@@ -39,6 +40,9 @@
 
 	/* Miscellaneous per-user rate limit */
 	struct ratelimit_state ratelimit;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 extern int uids_sysfs_init(void);
diff --git a/include/linux/sched/xacct.h b/include/linux/sched/xacct.h
index c078f0a..9544c9d 100644
--- a/include/linux/sched/xacct.h
+++ b/include/linux/sched/xacct.h
@@ -28,6 +28,11 @@
 {
 	tsk->ioac.syscw++;
 }
+
+static inline void inc_syscfs(struct task_struct *tsk)
+{
+	tsk->ioac.syscfs++;
+}
 #else
 static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
 {
@@ -44,6 +49,10 @@
 static inline void inc_syscw(struct task_struct *tsk)
 {
 }
+
+static inline void inc_syscfs(struct task_struct *tsk)
+{
+}
 #endif
 
 #endif /* _LINUX_SCHED_XACCT_H */
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
index 881fea4..3d39d24 100644
--- a/include/linux/scmi_protocol.h
+++ b/include/linux/scmi_protocol.h
@@ -6,6 +6,7 @@
  */
 #include <linux/device.h>
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 
 #define SCMI_MAX_STR_SIZE	16
 #define SCMI_MAX_NUM_RATES	16
@@ -74,6 +75,8 @@
 			u64 rate);
 	int (*enable)(const struct scmi_handle *handle, u32 clk_id);
 	int (*disable)(const struct scmi_handle *handle, u32 clk_id);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -114,6 +117,8 @@
 			unsigned long *rate, bool poll);
 	int (*est_power_get)(const struct scmi_handle *handle, u32 domain,
 			     unsigned long *rate, unsigned long *power);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -139,6 +144,8 @@
 			 u32 state);
 	int (*state_get)(const struct scmi_handle *handle, u32 domain,
 			 u32 *state);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct scmi_sensor_info {
@@ -148,6 +155,8 @@
 	u8 num_trip_points;
 	bool async;
 	char name[SCMI_MAX_STR_SIZE];
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -185,6 +194,8 @@
 				 u32 sensor_id, u8 trip_id, u64 trip_value);
 	int (*reading_get)(const struct scmi_handle *handle, u32 sensor_id,
 			   u64 *value);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -205,6 +216,8 @@
 	int (*reset)(const struct scmi_handle *handle, u32 domain);
 	int (*assert)(const struct scmi_handle *handle, u32 domain);
 	int (*deassert)(const struct scmi_handle *handle, u32 domain);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -242,6 +255,8 @@
 	void *power_priv;
 	void *sensor_priv;
 	void *reset_priv;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 enum scmi_std_protocol {
@@ -259,6 +274,8 @@
 	u8 protocol_id;
 	struct device dev;
 	struct scmi_handle *handle;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define to_scmi_dev(d) container_of(d, struct scmi_device, dev)
diff --git a/include/linux/scs.h b/include/linux/scs.h
new file mode 100644
index 0000000..f8c8bef
--- /dev/null
+++ b/include/linux/scs.h
@@ -0,0 +1,62 @@
+/* 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
+
+#ifdef CONFIG_SHADOW_CALL_STACK_VMAP
+#define SCS_SIZE	PAGE_SIZE
+#else
+/*
+ * 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
+#endif
+
+#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/seccomp.h b/include/linux/seccomp.h
index 84868d3..a6f90d9 100644
--- a/include/linux/seccomp.h
+++ b/include/linux/seccomp.h
@@ -12,6 +12,7 @@
 #ifdef CONFIG_SECCOMP
 
 #include <linux/thread_info.h>
+#include <linux/atomic.h>
 #include <asm/seccomp.h>
 
 struct seccomp_filter;
@@ -28,6 +29,7 @@
  */
 struct seccomp {
 	int mode;
+	atomic_t filter_count;
 	struct seccomp_filter *filter;
 };
 
@@ -81,10 +83,10 @@
 #endif /* CONFIG_SECCOMP */
 
 #ifdef CONFIG_SECCOMP_FILTER
-extern void put_seccomp_filter(struct task_struct *tsk);
+extern void seccomp_filter_release(struct task_struct *tsk);
 extern void get_seccomp_filter(struct task_struct *tsk);
 #else  /* CONFIG_SECCOMP_FILTER */
-static inline void put_seccomp_filter(struct task_struct *tsk)
+static inline void seccomp_filter_release(struct task_struct *tsk)
 {
 	return;
 }
diff --git a/include/linux/security.h b/include/linux/security.h
index 3f6b819..faa5f9e 100644
--- a/include/linux/security.h
+++ b/include/linux/security.h
@@ -318,6 +318,9 @@
 int security_inode_init_security(struct inode *inode, struct inode *dir,
 				 const struct qstr *qstr,
 				 initxattrs initxattrs, void *fs_data);
+int security_inode_init_security_anon(struct inode *inode,
+				      const struct qstr *name,
+				      const struct inode *context_inode);
 int security_old_inode_init_security(struct inode *inode, struct inode *dir,
 				     const struct qstr *qstr, const char **name,
 				     void **value, size_t *len);
@@ -720,6 +723,13 @@
 	return 0;
 }
 
+static inline int security_inode_init_security_anon(struct inode *inode,
+						    const struct qstr *name,
+						    const struct inode *context_inode)
+{
+	return 0;
+}
+
 static inline int security_old_inode_init_security(struct inode *inode,
 						   struct inode *dir,
 						   const struct qstr *qstr,
@@ -1902,5 +1912,42 @@
 #endif /* CONFIG_SECURITY */
 #endif /* CONFIG_BPF_SYSCALL */
 
-#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/serdev.h b/include/linux/serdev.h
index 9f14f9c..54df861 100644
--- a/include/linux/serdev.h
+++ b/include/linux/serdev.h
@@ -165,9 +165,21 @@
 void serdev_device_remove(struct serdev_device *);
 
 struct serdev_controller *serdev_controller_alloc(struct device *, size_t);
-int serdev_controller_add(struct serdev_controller *);
+int serdev_controller_add_platform(struct serdev_controller *, bool);
 void serdev_controller_remove(struct serdev_controller *);
 
+/**
+ * serdev_controller_add() - Add an serdev controller
+ * @ctrl:	controller to be registered.
+ *
+ * Register a controller previously allocated via serdev_controller_alloc() with
+ * the serdev core.
+ */
+static inline int serdev_controller_add(struct serdev_controller *ctrl)
+{
+	return serdev_controller_add_platform(ctrl, false);
+}
+
 static inline void serdev_controller_write_wakeup(struct serdev_controller *ctrl)
 {
 	struct serdev_device *serdev = ctrl->serdev;
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 2b78cc7..29c3325 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -17,6 +17,7 @@
 #include <linux/tty.h>
 #include <linux/mutex.h>
 #include <linux/sysrq.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/serial_core.h>
 
 #ifdef CONFIG_SERIAL_CORE_CONSOLE
@@ -79,6 +80,9 @@
 	void		(*poll_put_char)(struct uart_port *, unsigned char);
 	int		(*poll_get_char)(struct uart_port *);
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define NO_POLL_CHAR		0x00ff0000
@@ -253,6 +257,9 @@
 	struct serial_rs485     rs485;
 	struct serial_iso7816   iso7816;
 	void			*private_data;		/* generic platform data pointer */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline int serial_port_in(struct uart_port *up, int offset)
@@ -315,6 +322,8 @@
 	 */
 	struct uart_state	*state;
 	struct tty_driver	*tty_driver;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 void uart_write_wakeup(struct uart_port *port);
diff --git a/include/linux/serio.h b/include/linux/serio.h
index 6c27d41..25d638f5 100644
--- a/include/linux/serio.h
+++ b/include/linux/serio.h
@@ -13,6 +13,7 @@
 #include <linux/mutex.h>
 #include <linux/device.h>
 #include <linux/mod_devicetable.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/serio.h>
 
 extern struct bus_type serio_bus;
@@ -61,6 +62,8 @@
 	 * may get indigestion when exposed to concurrent access (i8042).
 	 */
 	struct mutex *ps2_cmd_mutex;
+
+	ANDROID_KABI_RESERVE(1);
 };
 #define to_serio_port(d)	container_of(d, struct serio, dev)
 
@@ -79,6 +82,8 @@
 	void (*cleanup)(struct serio *);
 
 	struct device_driver driver;
+
+	ANDROID_KABI_RESERVE(1);
 };
 #define to_serio_driver(d)	container_of(d, struct serio_driver, driver)
 
diff --git a/include/linux/shmem_fs.h b/include/linux/shmem_fs.h
index de8e4b7..cc10bf8 100644
--- a/include/linux/shmem_fs.h
+++ b/include/linux/shmem_fs.h
@@ -122,21 +122,18 @@
 }
 #endif
 
+#ifdef CONFIG_USERFAULTFD
 #ifdef CONFIG_SHMEM
-extern int shmem_mcopy_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd,
+extern int shmem_mfill_atomic_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd,
 				  struct vm_area_struct *dst_vma,
 				  unsigned long dst_addr,
 				  unsigned long src_addr,
+				  bool zeropage,
 				  struct page **pagep);
-extern int shmem_mfill_zeropage_pte(struct mm_struct *dst_mm,
-				    pmd_t *dst_pmd,
-				    struct vm_area_struct *dst_vma,
-				    unsigned long dst_addr);
-#else
-#define shmem_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma, dst_addr, \
-			       src_addr, pagep)        ({ BUG(); 0; })
-#define shmem_mfill_zeropage_pte(dst_mm, dst_pmd, dst_vma, \
-				 dst_addr)      ({ BUG(); 0; })
-#endif
+#else /* !CONFIG_SHMEM */
+#define shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr, \
+			       src_addr, zeropage, pagep)       ({ BUG(); 0; })
+#endif /* CONFIG_SHMEM */
+#endif /* CONFIG_USERFAULTFD */
 
 #endif
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index b04b5bd..9de5cced 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -40,6 +40,8 @@
 #if IS_ENABLED(CONFIG_NF_CONNTRACK)
 #include <linux/netfilter/nf_conntrack_common.h>
 #endif
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 /* The interface for checksum offload between the stack and networking drivers
  * is as follows...
@@ -529,6 +531,8 @@
 	 * remains valid until skb destructor */
 	void *		destructor_arg;
 
+	ANDROID_OEM_DATA_ARRAY(1, 3);
+
 	/* must be last field, see pskb_expand_head() */
 	skb_frag_t	frags[MAX_SKB_FRAGS];
 };
@@ -592,6 +596,8 @@
 	SKB_GSO_UDP = 1 << 16,
 
 	SKB_GSO_UDP_L4 = 1 << 17,
+
+	SKB_GSO_FRAGLIST = 1 << 18,
 };
 
 #if BITS_PER_LONG > 32
@@ -874,6 +880,9 @@
 	__u32			headers_end[0];
 	/* public: */
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/* These elements must be at the end, see alloc_skb() for details.  */
 	sk_buff_data_t		tail;
 	sk_buff_data_t		end;
@@ -3543,6 +3552,8 @@
 bool skb_gso_validate_network_len(const struct sk_buff *skb, unsigned int mtu);
 bool skb_gso_validate_mac_len(const struct sk_buff *skb, unsigned int len);
 struct sk_buff *skb_segment(struct sk_buff *skb, netdev_features_t features);
+struct sk_buff *skb_segment_list(struct sk_buff *skb, netdev_features_t features,
+				 unsigned int offset);
 struct sk_buff *skb_vlan_untag(struct sk_buff *skb);
 int skb_ensure_writable(struct sk_buff *skb, int write_len);
 int __skb_vlan_pop(struct sk_buff *skb, u16 *vlan_tci);
@@ -4109,6 +4120,7 @@
 #if IS_ENABLED(CONFIG_NET_TC_SKB_EXT)
 	TC_SKB_EXT,
 #endif
+	SKB_EXT_ANDROID_VENDOR1, /* reserved for android vendor only */
 	SKB_EXT_NUM, /* must be last */
 };
 
diff --git a/include/linux/soc/mediatek/mtk_sip_svc.h b/include/linux/soc/mediatek/mtk_sip_svc.h
new file mode 100644
index 0000000..082398e
--- /dev/null
+++ b/include/linux/soc/mediatek/mtk_sip_svc.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2019 MediaTek Inc.
+ */
+#ifndef __MTK_SIP_SVC_H
+#define __MTK_SIP_SVC_H
+
+/* Error Code */
+#define SIP_SVC_E_SUCCESS               0
+#define SIP_SVC_E_NOT_SUPPORTED         -1
+#define SIP_SVC_E_INVALID_PARAMS        -2
+#define SIP_SVC_E_INVALID_RANGE         -3
+#define SIP_SVC_E_PERMISSION_DENIED     -4
+
+#ifdef CONFIG_ARM64
+#define MTK_SIP_SMC_CONVENTION          ARM_SMCCC_SMC_64
+#else
+#define MTK_SIP_SMC_CONVENTION          ARM_SMCCC_SMC_32
+#endif
+
+#define MTK_SIP_SMC_CMD(fn_id) \
+	ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, MTK_SIP_SMC_CONVENTION, \
+			   ARM_SMCCC_OWNER_SIP, fn_id)
+
+#endif
diff --git a/include/linux/soc/qcom/irq.h b/include/linux/soc/qcom/irq.h
new file mode 100644
index 0000000..fcb799c
--- /dev/null
+++ b/include/linux/soc/qcom/irq.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __QCOM_IRQ_H
+#define __QCOM_IRQ_H
+
+#include <linux/irqdomain.h>
+
+#define GPIO_NO_WAKE_IRQ	~0U
+
+/**
+ * QCOM specific IRQ domain flags that distinguishes the handling of wakeup
+ * capable interrupts by different interrupt controllers.
+ *
+ * IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP: Line must be masked at TLMM and the
+ *                                  interrupt configuration is done at PDC
+ * IRQ_DOMAIN_FLAG_QCOM_MPM_WAKEUP: Interrupt configuration is handled at TLMM
+ */
+#define IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP		(IRQ_DOMAIN_FLAG_NONCORE << 0)
+#define IRQ_DOMAIN_FLAG_QCOM_MPM_WAKEUP		(IRQ_DOMAIN_FLAG_NONCORE << 1)
+
+/**
+ * irq_domain_qcom_handle_wakeup: Return if the domain handles interrupt
+ *                                configuration
+ * @parent: irq domain
+ *
+ * This QCOM specific irq domain call returns if the interrupt controller
+ * requires the interrupt be masked at the child interrupt controller.
+ */
+static inline bool irq_domain_qcom_handle_wakeup(struct irq_domain *parent)
+{
+	return (parent->flags & IRQ_DOMAIN_FLAG_QCOM_PDC_WAKEUP);
+}
+
+#endif
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 7067f85..488d0ab8 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -13,6 +13,7 @@
 #include <linux/completion.h>
 #include <linux/scatterlist.h>
 #include <linux/gpio/consumer.h>
+#include <linux/android_kabi.h>
 
 struct dma_chan;
 struct property_entry;
@@ -178,6 +179,9 @@
 	/* the statistics */
 	struct spi_statistics	statistics;
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
 	/*
 	 * likely need more hooks for more protocol options affecting how
 	 * the controller talks to each chip, like:
@@ -262,6 +266,8 @@
 	int			(*remove)(struct spi_device *spi);
 	void			(*shutdown)(struct spi_device *spi);
 	struct device_driver	driver;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline struct spi_driver *to_spi_driver(struct device_driver *drv)
@@ -607,6 +613,9 @@
 	void			*dummy_tx;
 
 	int (*fw_translate_cs)(struct spi_controller *ctlr, unsigned cs);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline void *spi_controller_get_devdata(struct spi_controller *ctlr)
@@ -865,6 +874,8 @@
 	u32		effective_speed_hz;
 
 	struct list_head transfer_list;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -931,6 +942,8 @@
 
 	/* list of spi_res reources when the spi message is processed */
 	struct list_head        resources;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline void spi_message_init_no_memset(struct spi_message *m)
@@ -1352,6 +1365,8 @@
 	 */
 	u32		mode;
 
+	ANDROID_KABI_RESERVE(1);
+
 	/* ... may need additional spi_device chip config data here.
 	 * avoid stuff protocol drivers can set; but include stuff
 	 * needed to behave without being bound to a driver:
diff --git a/include/linux/spmi.h b/include/linux/spmi.h
index 394a3f6..6744f7c 100644
--- a/include/linux/spmi.h
+++ b/include/linux/spmi.h
@@ -7,6 +7,7 @@
 #include <linux/types.h>
 #include <linux/device.h>
 #include <linux/mod_devicetable.h>
+#include <linux/android_kabi.h>
 
 /* Maximum slave identifier */
 #define SPMI_MAX_SLAVE_ID		16
@@ -85,6 +86,7 @@
 			    u8 sid, u16 addr, u8 *buf, size_t len);
 	int	(*write_cmd)(struct spmi_controller *ctrl, u8 opcode,
 			     u8 sid, u16 addr, const u8 *buf, size_t len);
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline struct spmi_controller *to_spmi_controller(struct device *d)
@@ -138,6 +140,7 @@
 	struct device_driver driver;
 	int	(*probe)(struct spmi_device *sdev);
 	void	(*remove)(struct spmi_device *sdev);
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline struct spmi_driver *to_spmi_driver(struct device_driver *d)
diff --git a/include/linux/stat.h b/include/linux/stat.h
index 765573d..528c4ba 100644
--- a/include/linux/stat.h
+++ b/include/linux/stat.h
@@ -33,7 +33,8 @@
 	 STATX_ATTR_IMMUTABLE |				\
 	 STATX_ATTR_APPEND |				\
 	 STATX_ATTR_NODUMP |				\
-	 STATX_ATTR_ENCRYPTED				\
+	 STATX_ATTR_ENCRYPTED |				\
+	 STATX_ATTR_VERITY				\
 	 )/* Attrs corresponding to FS_*_FL flags */
 	u64		ino;
 	dev_t		dev;
diff --git a/include/linux/string.h b/include/linux/string.h
index b226435..32ef8b9 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -216,6 +216,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/suspend.h b/include/linux/suspend.h
index cd97d2c..a447d01 100644
--- a/include/linux/suspend.h
+++ b/include/linux/suspend.h
@@ -8,6 +8,7 @@
 #include <linux/pm.h>
 #include <linux/mm.h>
 #include <linux/freezer.h>
+#include <linux/android_kabi.h>
 #include <asm/errno.h>
 
 #ifdef CONFIG_VT
@@ -185,6 +186,8 @@
 	bool (*suspend_again)(void);
 	void (*end)(void);
 	void (*recover)(void);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct platform_s2idle_ops {
@@ -195,6 +198,8 @@
 	void (*restore_early)(void);
 	void (*restore)(void);
 	void (*end)(void);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_SUSPEND
@@ -424,6 +429,8 @@
 	int (*pre_restore)(void);
 	void (*restore_cleanup)(void);
 	void (*recover)(void);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_HIBERNATION
@@ -503,6 +510,7 @@
 extern bool pm_save_wakeup_count(unsigned int count);
 extern void pm_wakep_autosleep_enabled(bool set);
 extern void pm_print_active_wakeup_sources(void);
+extern void pm_get_active_wakeup_sources(char *pending_sources, size_t max);
 
 extern void lock_system_sleep(void);
 extern void unlock_system_sleep(void);
diff --git a/include/linux/sys_soc.h b/include/linux/sys_soc.h
index 48ceea8..d9b3cf0f 100644
--- a/include/linux/sys_soc.h
+++ b/include/linux/sys_soc.h
@@ -15,6 +15,7 @@
 	const char *serial_number;
 	const char *soc_id;
 	const void *data;
+	const struct attribute_group *custom_attr_group;
 };
 
 /**
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index f7c561c..d2bf439 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -874,6 +874,8 @@
 asmlinkage long sys_mincore(unsigned long start, size_t len,
 				unsigned char __user * vec);
 asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior);
+asmlinkage long sys_process_madvise(int pidfd, const struct iovec __user *vec,
+				size_t vlen, int behavior, unsigned int flags);
 asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size,
 			unsigned long prot, unsigned long pgoff,
 			unsigned long flags);
diff --git a/include/linux/task_io_accounting.h b/include/linux/task_io_accounting.h
index 6f6acce..bb26108 100644
--- a/include/linux/task_io_accounting.h
+++ b/include/linux/task_io_accounting.h
@@ -19,6 +19,8 @@
 	u64 syscr;
 	/* # of write syscalls */
 	u64 syscw;
+	/* # of fsync syscalls */
+	u64 syscfs;
 #endif /* CONFIG_TASK_XACCT */
 
 #ifdef CONFIG_TASK_IO_ACCOUNTING
diff --git a/include/linux/task_io_accounting_ops.h b/include/linux/task_io_accounting_ops.h
index bb5498b..733ab62 100644
--- a/include/linux/task_io_accounting_ops.h
+++ b/include/linux/task_io_accounting_ops.h
@@ -97,6 +97,7 @@
 	dst->wchar += src->wchar;
 	dst->syscr += src->syscr;
 	dst->syscw += src->syscw;
+	dst->syscfs += src->syscfs;
 }
 #else
 static inline void task_chr_io_accounting_add(struct task_io_accounting *dst,
diff --git a/include/linux/tcp.h b/include/linux/tcp.h
index 358deb4f..a4253fa 100644
--- a/include/linux/tcp.h
+++ b/include/linux/tcp.h
@@ -16,6 +16,7 @@
 
 #include <linux/skbuff.h>
 #include <linux/win_minmax.h>
+#include <linux/android_kabi.h>
 #include <net/sock.h>
 #include <net/inet_connection_sock.h>
 #include <net/inet_timewait_sock.h>
@@ -397,6 +398,8 @@
 	 */
 	struct request_sock __rcu *fastopen_rsk;
 	u32	*saved_syn;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 enum tsq_enum {
diff --git a/include/linux/thermal.h b/include/linux/thermal.h
index a41378b..14e92da 100644
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
@@ -15,6 +15,7 @@
 #include <linux/device.h>
 #include <linux/sysfs.h>
 #include <linux/workqueue.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/thermal.h>
 
 #define THERMAL_TRIPS_NONE	-1
@@ -113,6 +114,7 @@
 			  enum thermal_trend *);
 	int (*notify) (struct thermal_zone_device *, int,
 		       enum thermal_trip_type);
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct thermal_cooling_device_ops {
@@ -125,6 +127,8 @@
 			   struct thermal_zone_device *, unsigned long, u32 *);
 	int (*power2state)(struct thermal_cooling_device *,
 			   struct thermal_zone_device *, u32, unsigned long *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct thermal_cooling_device {
@@ -139,6 +143,8 @@
 	struct mutex lock; /* protect thermal_instances list */
 	struct list_head thermal_instances;
 	struct list_head node;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct thermal_attr {
@@ -219,6 +225,8 @@
 	struct list_head node;
 	struct delayed_work poll_queue;
 	enum thermal_notify_event notify_event;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -239,6 +247,8 @@
 	void (*unbind_from_tz)(struct thermal_zone_device *tz);
 	int (*throttle)(struct thermal_zone_device *tz, int trip);
 	struct list_head	governor_list;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Structure that holds binding parameters for a zone */
@@ -274,6 +284,8 @@
 	unsigned long *binding_limits;
 	int (*match) (struct thermal_zone_device *tz,
 			struct thermal_cooling_device *cdev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Structure to define Thermal Zone parameters */
@@ -327,6 +339,8 @@
 	 * 		Used by thermal zone drivers (default 0).
 	 */
 	int offset;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct thermal_genl_event {
@@ -356,6 +370,8 @@
 	int (*set_trips)(void *, int, int);
 	int (*set_emul_temp)(void *, int);
 	int (*set_trip_temp)(void *, int, int);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -371,6 +387,8 @@
 	int temperature;
 	int hysteresis;
 	enum thermal_trip_type type;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Function declarations */
diff --git a/include/linux/time.h b/include/linux/time.h
index 5f3e499..47ed31f 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -109,4 +109,7 @@
  * Equivalent to !(time_before32(@t, @l) || time_after32(@t, @h)).
  */
 #define time_between32(t, l, h) ((u32)(h) - (u32)(l) >= (u32)(t) - (u32)(l))
+
+# include <vdso/time.h>
+
 #endif
diff --git a/include/linux/time32.h b/include/linux/time32.h
index 0a1f302..a6a4711 100644
--- a/include/linux/time32.h
+++ b/include/linux/time32.h
@@ -12,20 +12,10 @@
 #include <linux/time64.h>
 #include <linux/timex.h>
 
+#include <vdso/time32.h>
+
 #define TIME_T_MAX	(time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
 
-typedef s32		old_time32_t;
-
-struct old_timespec32 {
-	old_time32_t	tv_sec;
-	s32		tv_nsec;
-};
-
-struct old_timeval32 {
-	old_time32_t	tv_sec;
-	s32		tv_usec;
-};
-
 struct old_itimerspec32 {
 	struct old_timespec32 it_interval;
 	struct old_timespec32 it_value;
diff --git a/include/linux/time64.h b/include/linux/time64.h
index 5eab3f2..5117cb5 100644
--- a/include/linux/time64.h
+++ b/include/linux/time64.h
@@ -3,6 +3,7 @@
 #define _LINUX_TIME64_H
 
 #include <linux/math64.h>
+#include <vdso/time64.h>
 
 typedef __s64 time64_t;
 typedef __u64 timeu64_t;
@@ -19,15 +20,6 @@
 	struct timespec64 it_value;
 };
 
-/* Parameters used to convert the timespec values: */
-#define MSEC_PER_SEC	1000L
-#define USEC_PER_MSEC	1000L
-#define NSEC_PER_USEC	1000L
-#define NSEC_PER_MSEC	1000000L
-#define USEC_PER_SEC	1000000L
-#define NSEC_PER_SEC	1000000000L
-#define FSEC_PER_SEC	1000000000000000LL
-
 /* Located here for timespec[64]_valid_strict */
 #define TIME64_MAX			((s64)~((u64)1 << 63))
 #define TIME64_MIN			(-TIME64_MAX - 1)
diff --git a/include/linux/timer.h b/include/linux/timer.h
index 1e6650e..4184069 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -7,6 +7,7 @@
 #include <linux/stddef.h>
 #include <linux/debugobjects.h>
 #include <linux/stringify.h>
+#include <linux/android_kabi.h>
 
 struct timer_list {
 	/*
@@ -21,6 +22,9 @@
 #ifdef CONFIG_LOCKDEP
 	struct lockdep_map	lockdep_map;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #ifdef CONFIG_LOCKDEP
diff --git a/include/linux/trace.h b/include/linux/trace.h
index b95ffb2..8b31713 100644
--- a/include/linux/trace.h
+++ b/include/linux/trace.h
@@ -24,6 +24,14 @@
 int register_ftrace_export(struct trace_export *export);
 int unregister_ftrace_export(struct trace_export *export);
 
+struct trace_array;
+
+void trace_printk_init_buffers(void);
+int trace_array_printk(struct trace_array *tr, unsigned long ip,
+		const char *fmt, ...);
+struct trace_array *trace_array_create(const char *name);
+int trace_array_init_printk(struct trace_array *tr);
+int trace_array_destroy(struct trace_array *tr);
 #endif	/* CONFIG_TRACING */
 
 #endif	/* _LINUX_TRACE_H */
diff --git a/include/linux/tty.h b/include/linux/tty.h
index eb33d94..56ea85dd 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -14,6 +14,7 @@
 #include <uapi/linux/tty.h>
 #include <linux/rwsem.h>
 #include <linux/llist.h>
+#include <linux/android_kabi.h>
 
 
 /*
@@ -218,6 +219,8 @@
 	int (*activate)(struct tty_port *port, struct tty_struct *tty);
 	/* Called on the final put of a port */
 	void (*destruct)(struct tty_port *port);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct tty_port_client_operations {
@@ -252,6 +255,8 @@
 						   set to size of fifo */
 	struct kref		kref;		/* Ref counter */
 	void 			*client_data;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* tty_port::iflags bits -- use atomic bit ops */
@@ -342,6 +347,9 @@
 	/* If the tty has a pending do_SAK, queue it here - akpm */
 	struct work_struct SAK_work;
 	struct tty_port *port;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 /* Each of a tty's open files has private_data pointing to tty_file_private */
diff --git a/include/linux/tty_driver.h b/include/linux/tty_driver.h
index 7186d77..fd5699e 100644
--- a/include/linux/tty_driver.h
+++ b/include/linux/tty_driver.h
@@ -245,6 +245,7 @@
 #include <linux/cdev.h>
 #include <linux/termios.h>
 #include <linux/seq_file.h>
+#include <linux/android_kabi.h>
 
 struct tty_struct;
 struct tty_driver;
@@ -297,6 +298,9 @@
 	void (*poll_put_char)(struct tty_driver *driver, int line, char ch);
 #endif
 	int (*proc_show)(struct seq_file *, void *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct tty_driver {
@@ -331,6 +335,9 @@
 
 	const struct tty_operations *ops;
 	struct list_head tty_drivers;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 extern struct list_head tty_drivers;
diff --git a/include/linux/tty_ldisc.h b/include/linux/tty_ldisc.h
index b1e6043..3be8636 100644
--- a/include/linux/tty_ldisc.h
+++ b/include/linux/tty_ldisc.h
@@ -126,6 +126,7 @@
 #include <linux/fs.h>
 #include <linux/wait.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 /*
  * the semaphore definition
@@ -210,6 +211,9 @@
 	struct  module *owner;
 
 	int refcount;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct tty_ldisc {
diff --git a/include/linux/udp.h b/include/linux/udp.h
index aa84597..ae58ff3 100644
--- a/include/linux/udp.h
+++ b/include/linux/udp.h
@@ -51,7 +51,9 @@
 					   * different encapsulation layer set
 					   * this
 					   */
-			 gro_enabled:1;	/* Can accept GRO packets */
+			 gro_enabled:1,	/* Request GRO aggregation */
+			 accept_udp_l4:1,
+			 accept_udp_fraglist:1;
 	/*
 	 * Following member retains the information to create a UDP header
 	 * when the socket is uncorked.
@@ -131,8 +133,16 @@
 
 static inline bool udp_unexpected_gso(struct sock *sk, struct sk_buff *skb)
 {
-	return !udp_sk(sk)->gro_enabled && skb_is_gso(skb) &&
-	       skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4;
+	if (!skb_is_gso(skb))
+		return false;
+
+	if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4 && !udp_sk(sk)->accept_udp_l4)
+		return true;
+
+	if (skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST && !udp_sk(sk)->accept_udp_fraglist)
+		return true;
+
+	return false;
 }
 
 #define udp_portaddr_for_each_entry(__sk, list) \
diff --git a/include/linux/uio_driver.h b/include/linux/uio_driver.h
index 01081c4..701ae1e 100644
--- a/include/linux/uio_driver.h
+++ b/include/linux/uio_driver.h
@@ -16,6 +16,7 @@
 #include <linux/device.h>
 #include <linux/fs.h>
 #include <linux/interrupt.h>
+#include <linux/android_kabi.h>
 
 struct module;
 struct uio_map;
@@ -77,6 +78,7 @@
 	struct mutex		info_lock;
         struct kobject          *map_dir;
         struct kobject          *portio_dir;
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -109,6 +111,7 @@
 	int (*open)(struct uio_info *info, struct inode *inode);
 	int (*release)(struct uio_info *info, struct inode *inode);
 	int (*irqcontrol)(struct uio_info *info, s32 irq_on);
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern int __must_check
diff --git a/include/linux/unicode.h b/include/linux/unicode.h
index 990aa97..74484d4 100644
--- a/include/linux/unicode.h
+++ b/include/linux/unicode.h
@@ -27,6 +27,9 @@
 int utf8_casefold(const struct unicode_map *um, const struct qstr *str,
 		  unsigned char *dest, size_t dlen);
 
+int utf8_casefold_hash(const struct unicode_map *um, const void *salt,
+		       struct qstr *str);
+
 struct unicode_map *utf8_load(const char *version);
 void utf8_unload(struct unicode_map *um);
 
diff --git a/include/linux/usb.h b/include/linux/usb.h
index e656e7b..6a40de6 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -22,6 +22,7 @@
 #include <linux/sched.h>	/* for current && schedule_timeout */
 #include <linux/mutex.h>	/* for struct mutex */
 #include <linux/pm_runtime.h>	/* for runtime PM */
+#include <linux/android_kabi.h>
 
 struct usb_device;
 struct usb_driver;
@@ -257,6 +258,11 @@
 	struct device dev;		/* interface specific device info */
 	struct device *usb_dev;
 	struct work_struct reset_ws;	/* for resets in atomic context */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_interface(d) container_of(d, struct usb_interface, dev)
 
@@ -402,6 +408,11 @@
 	struct usb_ssp_cap_descriptor	*ssp_cap;
 	struct usb_ss_container_id_descriptor	*ss_id;
 	struct usb_ptm_cap_descriptor	*ptm_cap;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 int __usb_get_extra_descriptor(char *buffer, unsigned size,
@@ -465,6 +476,11 @@
 	struct mon_bus *mon_bus;	/* non-null when associated */
 	int monitored;			/* non-zero when monitored */
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct usb_dev_state;
@@ -708,6 +724,11 @@
 	unsigned lpm_disable_count;
 
 	u16 hub_delay;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_device(d) container_of(d, struct usb_device, dev)
 
@@ -1207,6 +1228,11 @@
 	unsigned int supports_autosuspend:1;
 	unsigned int disable_hub_initiated_lpm:1;
 	unsigned int soft_unbind:1;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define	to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)
 
@@ -1582,6 +1608,12 @@
 	int error_count;		/* (return) number of ISO errors */
 	void *context;			/* (in) context for completion */
 	usb_complete_t complete;	/* (in) completion routine */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	struct usb_iso_packet_descriptor iso_frame_desc[0];
 					/* (in) ISO ONLY */
 };
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
index 2040696..d667100 100644
--- a/include/linux/usb/composite.h
+++ b/include/linux/usb/composite.h
@@ -590,6 +590,7 @@
 	struct config_group group;
 	struct list_head cfs_list;
 	struct usb_function_driver *fd;
+	struct usb_function *f;
 	int (*set_inst_name)(struct usb_function_instance *inst,
 			      const char *name);
 	void (*free_func_inst)(struct usb_function_instance *inst);
diff --git a/include/linux/usb/f_accessory.h b/include/linux/usb/f_accessory.h
new file mode 100644
index 0000000..ebe3c4d
--- /dev/null
+++ b/include/linux/usb/f_accessory.h
@@ -0,0 +1,23 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * 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.
+ *
+ */
+
+#ifndef __LINUX_USB_F_ACCESSORY_H
+#define __LINUX_USB_F_ACCESSORY_H
+
+#include <uapi/linux/usb/f_accessory.h>
+
+#endif /* __LINUX_USB_F_ACCESSORY_H */
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 67f5adc..ef3de06 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -25,6 +25,7 @@
 #include <linux/types.h>
 #include <linux/workqueue.h>
 #include <linux/usb/ch9.h>
+#include <linux/android_kabi.h>
 
 #define UDC_TRACE_STR_MAX	512
 
@@ -118,6 +119,8 @@
 
 	int			status;
 	unsigned		actual;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*-------------------------------------------------------------------------*/
@@ -148,6 +151,8 @@
 
 	int (*fifo_status) (struct usb_ep *ep);
 	void (*fifo_flush) (struct usb_ep *ep);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -236,6 +241,8 @@
 	u8			address;
 	const struct usb_endpoint_descriptor	*desc;
 	const struct usb_ss_ep_comp_descriptor	*comp_desc;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*-------------------------------------------------------------------------*/
@@ -322,6 +329,11 @@
 	struct usb_ep *(*match_ep)(struct usb_gadget *,
 			struct usb_endpoint_descriptor *,
 			struct usb_ss_ep_comp_descriptor *);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -429,6 +441,11 @@
 	unsigned			connected:1;
 	unsigned			lpm_capable:1;
 	int				irq;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define work_to_gadget(w)	(container_of((w), struct usb_gadget, work))
 
diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h
index 712b2a6..6cb2d18 100644
--- a/include/linux/usb/hcd.h
+++ b/include/linux/usb/hcd.h
@@ -25,6 +25,8 @@
 #include <linux/rwsem.h>
 #include <linux/interrupt.h>
 #include <linux/idr.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 #define MAX_TOPO_LEVEL		6
 
@@ -225,6 +227,11 @@
 	 * (ohci 32, uhci 1024, ehci 256/512/1024).
 	 */
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	/* The HC driver's private data is stored at the end of
 	 * this structure.
 	 */
@@ -409,7 +416,12 @@
 	int	(*find_raw_port_number)(struct usb_hcd *, int);
 	/* Call for power on/off the port if necessary */
 	int	(*port_power)(struct usb_hcd *hcd, int portnum, bool enable);
-
+	/* Android vendor reserved */
+	ANDROID_VENDOR_DATA_ARRAY(1, 2);
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline int hcd_giveback_urb_in_bh(struct usb_hcd *hcd)
@@ -560,6 +572,11 @@
 	spinlock_t		lock;
 	struct list_head	clear_list;	/* of usb_tt_clear */
 	struct work_struct	clear_work;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct usb_tt_clear {
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index 69f1b63..10cb3d1 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -12,6 +12,7 @@
 
 #include <linux/phy/phy.h>
 #include <linux/usb/phy.h>
+#include <linux/android_kabi.h>
 
 struct usb_otg {
 	u8			default_a;
@@ -40,6 +41,7 @@
 	/* start or continue HNP role switch */
 	int	(*start_hnp)(struct usb_otg *otg);
 
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
index e4de6bc..888d2fd 100644
--- a/include/linux/usb/phy.h
+++ b/include/linux/usb/phy.h
@@ -13,6 +13,7 @@
 #include <linux/extcon.h>
 #include <linux/notifier.h>
 #include <linux/usb.h>
+#include <linux/android_kabi.h>
 #include <uapi/linux/usb/charger.h>
 
 enum usb_phy_interface {
@@ -155,6 +156,8 @@
 	 * manually detect the charger type.
 	 */
 	enum usb_charger_type (*charger_detect)(struct usb_phy *x);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* for board-specific init logic */
diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
index 7df4eca..7868b07 100644
--- a/include/linux/usb/typec.h
+++ b/include/linux/usb/typec.h
@@ -4,6 +4,7 @@
 #define __LINUX_USB_TYPEC_H
 
 #include <linux/types.h>
+#include <linux/android_kabi.h>
 
 /* USB Type-C Specification releases */
 #define USB_TYPEC_REV_1_0	0x100 /* 1.0 */
@@ -168,6 +169,24 @@
 	struct usb_pd_identity	*identity;
 };
 
+/**
+ * struct typec_operations - USB Type-C Port Operations
+ * @try_role: Set data role preference for DRP port
+ * @dr_set: Set Data Role
+ * @pr_set: Set Power Role
+ * @vconn_set: Source VCONN
+ * @port_type_set: Set port type
+ */
+struct typec_operations {
+	int (*try_role)(struct typec_port *port, int role);
+	int (*dr_set)(struct typec_port *port, enum typec_data_role role);
+	int (*pr_set)(struct typec_port *port, enum typec_role role);
+	int (*vconn_set)(struct typec_port *port, enum typec_role role);
+	int (*port_type_set)(struct typec_port *port,
+			     enum typec_port_type type);
+	ANDROID_KABI_RESERVE(1);
+};
+
 /*
  * struct typec_capability - USB Type-C Port Capabilities
  * @type: Supported power role of the port
@@ -179,11 +198,8 @@
  * @sw: Cable plug orientation switch
  * @mux: Multiplexer switch for Alternate/Accessory Modes
  * @fwnode: Optional fwnode of the port
- * @try_role: Set data role preference for DRP port
- * @dr_set: Set Data Role
- * @pr_set: Set Power Role
- * @vconn_set: Set VCONN Role
- * @port_type_set: Set port type
+ * @driver_data: Private pointer for driver specific info
+ * @ops: Port operations vector
  *
  * Static capabilities of a single USB Type-C port.
  */
@@ -198,18 +214,10 @@
 	struct typec_switch	*sw;
 	struct typec_mux	*mux;
 	struct fwnode_handle	*fwnode;
+	void			*driver_data;
 
-	int		(*try_role)(const struct typec_capability *,
-				    int role);
-
-	int		(*dr_set)(const struct typec_capability *,
-				  enum typec_data_role);
-	int		(*pr_set)(const struct typec_capability *,
-				  enum typec_role);
-	int		(*vconn_set)(const struct typec_capability *,
-				     enum typec_role);
-	int		(*port_type_set)(const struct typec_capability *,
-					 enum typec_port_type);
+	const struct typec_operations	*ops;
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Specific to try_role(). Indicates the user want's to clear the preference. */
@@ -241,6 +249,8 @@
 enum typec_orientation typec_get_orientation(struct typec_port *port);
 int typec_set_mode(struct typec_port *port, int mode);
 
+void *typec_get_drvdata(struct typec_port *port);
+
 int typec_find_port_power_role(const char *name);
 int typec_find_power_role(const char *name);
 int typec_find_port_data_role(const char *name);
diff --git a/include/linux/usb/typec_altmode.h b/include/linux/usb/typec_altmode.h
index 9a88c74..3422df2 100644
--- a/include/linux/usb/typec_altmode.h
+++ b/include/linux/usb/typec_altmode.h
@@ -30,6 +30,7 @@
 
 	char				*desc;
 	const struct typec_altmode_ops	*ops;
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define to_typec_altmode(d) container_of(d, struct typec_altmode, dev)
@@ -63,6 +64,7 @@
 	int (*notify)(struct typec_altmode *altmode, unsigned long conf,
 		      void *data);
 	int (*activate)(struct typec_altmode *altmode, int activate);
+	ANDROID_KABI_RESERVE(1);
 };
 
 int typec_altmode_enter(struct typec_altmode *altmode);
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index fc6ed13..0179419 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -23,6 +23,8 @@
 #ifndef	__LINUX_USB_USBNET_H
 #define	__LINUX_USB_USBNET_H
 
+#include <linux/android_kabi.h>
+
 /* interface from usbnet core to each USB networking link we handle */
 struct usbnet {
 	/* housekeeping */
@@ -85,6 +87,11 @@
 #		define EVENT_NO_IP_ALIGN	13
 	u32			rx_speed;	/* in bps - NOT Mbps */
 	u32			tx_speed;	/* in bps - NOT Mbps */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline struct usb_driver *driver_of(struct usb_interface *intf)
@@ -174,6 +181,9 @@
 	int		out;		/* tx endpoint */
 
 	unsigned long	data;		/* Misc driver specific data */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* Minidrivers are just drivers using the "usbnet" core as a powerful
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
index fb9f4f7..a8cb8b1 100644
--- a/include/linux/user_namespace.h
+++ b/include/linux/user_namespace.h
@@ -10,6 +10,7 @@
 #include <linux/rwsem.h>
 #include <linux/sysctl.h>
 #include <linux/err.h>
+#include <linux/android_kabi.h>
 
 #define UID_GID_MAP_MAX_BASE_EXTENTS 5
 #define UID_GID_MAP_MAX_EXTENTS 340
@@ -86,6 +87,9 @@
 #endif
 	struct ucounts		*ucounts;
 	int ucount_max[UCOUNT_COUNTS];
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 } __randomize_layout;
 
 struct ucounts {
diff --git a/include/linux/userfaultfd_k.h b/include/linux/userfaultfd_k.h
index ac9d71e2..ca9fab5 100644
--- a/include/linux/userfaultfd_k.h
+++ b/include/linux/userfaultfd_k.h
@@ -14,6 +14,10 @@
 #include <linux/userfaultfd.h> /* linux/include/uapi/linux/userfaultfd.h */
 
 #include <linux/fcntl.h>
+#include <linux/mm.h>
+
+/* The set of all possible UFFD-related VM flags. */
+#define __VM_UFFD_FLAGS (VM_UFFD_MISSING | VM_UFFD_WP | VM_UFFD_MINOR)
 
 /*
  * CAREFUL: Check include/uapi/asm-generic/fcntl.h when defining
@@ -32,6 +36,27 @@
 
 extern vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason);
 
+/*
+ * The mode of operation for __mcopy_atomic and its helpers.
+ *
+ * This is almost an implementation detail (mcopy_atomic below doesn't take this
+ * as a parameter), but it's exposed here because memory-kind-specific
+ * implementations (e.g. hugetlbfs) need to know the mode of operation.
+ */
+enum mcopy_atomic_mode {
+	/* A normal copy_from_user into the destination range. */
+	MCOPY_ATOMIC_NORMAL,
+	/* Don't copy; map the destination range to the zero page. */
+	MCOPY_ATOMIC_ZEROPAGE,
+	/* Just install pte(s) with the existing page(s) in the page cache. */
+	MCOPY_ATOMIC_CONTINUE,
+};
+
+extern int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd,
+				    struct vm_area_struct *dst_vma,
+				    unsigned long dst_addr, struct page *page,
+				    bool newly_allocated);
+
 extern ssize_t mcopy_atomic(struct mm_struct *dst_mm, unsigned long dst_start,
 			    unsigned long src_start, unsigned long len,
 			    bool *mmap_changing);
@@ -39,6 +64,8 @@
 			      unsigned long dst_start,
 			      unsigned long len,
 			      bool *mmap_changing);
+extern ssize_t mcopy_continue(struct mm_struct *dst_mm, unsigned long dst_start,
+			      unsigned long len, bool *mmap_changing);
 
 /* mm helpers */
 static inline bool is_mergeable_vm_userfaultfd_ctx(struct vm_area_struct *vma,
@@ -47,14 +74,35 @@
 	return vma->vm_userfaultfd_ctx.ctx == vm_ctx.ctx;
 }
 
+/*
+ * Never enable huge pmd sharing on some uffd registered vmas:
+ *
+ * - VM_UFFD_WP VMAs, because write protect information is per pgtable entry.
+ *
+ * - VM_UFFD_MINOR VMAs, because otherwise we would never get minor faults for
+ *   VMAs which share huge pmds. (If you have two mappings to the same
+ *   underlying pages, and fault in the non-UFFD-registered one with a write,
+ *   with huge pmd sharing this would *also* setup the second UFFD-registered
+ *   mapping, and we'd not get minor faults.)
+ */
+static inline bool uffd_disable_huge_pmd_share(struct vm_area_struct *vma)
+{
+	return vma->vm_flags & (VM_UFFD_WP | VM_UFFD_MINOR);
+}
+
 static inline bool userfaultfd_missing(struct vm_area_struct *vma)
 {
 	return vma->vm_flags & VM_UFFD_MISSING;
 }
 
+static inline bool userfaultfd_minor(struct vm_area_struct *vma)
+{
+	return vma->vm_flags & VM_UFFD_MINOR;
+}
+
 static inline bool userfaultfd_armed(struct vm_area_struct *vma)
 {
-	return vma->vm_flags & (VM_UFFD_MISSING | VM_UFFD_WP);
+	return vma->vm_flags & __VM_UFFD_FLAGS;
 }
 
 extern int dup_userfaultfd(struct vm_area_struct *, struct list_head *);
@@ -96,6 +144,11 @@
 	return false;
 }
 
+static inline bool userfaultfd_minor(struct vm_area_struct *vma)
+{
+	return false;
+}
+
 static inline bool userfaultfd_armed(struct vm_area_struct *vma)
 {
 	return false;
diff --git a/include/linux/virtio.h b/include/linux/virtio.h
index 7c07546..15f906e4 100644
--- a/include/linux/virtio.h
+++ b/include/linux/virtio.h
@@ -111,7 +111,6 @@
 	bool config_enabled;
 	bool config_change_pending;
 	spinlock_t config_lock;
-	spinlock_t vqs_list_lock; /* Protects VQs list access */
 	struct device dev;
 	struct virtio_device_id id;
 	const struct virtio_config_ops *config;
diff --git a/include/linux/virtio_vsock.h b/include/linux/virtio_vsock.h
index b139f760..cee1dda 100644
--- a/include/linux/virtio_vsock.h
+++ b/include/linux/virtio_vsock.h
@@ -7,12 +7,10 @@
 #include <net/sock.h>
 #include <net/af_vsock.h>
 
-#define VIRTIO_VSOCK_DEFAULT_MIN_BUF_SIZE	128
-#define VIRTIO_VSOCK_DEFAULT_BUF_SIZE		(1024 * 256)
-#define VIRTIO_VSOCK_DEFAULT_MAX_BUF_SIZE	(1024 * 256)
 #define VIRTIO_VSOCK_DEFAULT_RX_BUF_SIZE	(1024 * 4)
 #define VIRTIO_VSOCK_MAX_BUF_SIZE		0xFFFFFFFFUL
-#define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE		(1024 * 64)
+#define VIRTIO_VSOCK_MAX_PKT_BUF_SIZE		virtio_transport_max_vsock_pkt_buf_size
+extern uint virtio_transport_max_vsock_pkt_buf_size;
 
 enum {
 	VSOCK_VQ_RX     = 0, /* for host to guest data */
@@ -25,11 +23,6 @@
 struct virtio_vsock_sock {
 	struct vsock_sock *vsk;
 
-	/* Protected by lock_sock(sk_vsock(trans->vsk)) */
-	u32 buf_size;
-	u32 buf_size_min;
-	u32 buf_size_max;
-
 	spinlock_t tx_lock;
 	spinlock_t rx_lock;
 
@@ -92,12 +85,6 @@
 
 int virtio_transport_do_socket_init(struct vsock_sock *vsk,
 				 struct vsock_sock *psk);
-u64 virtio_transport_get_buffer_size(struct vsock_sock *vsk);
-u64 virtio_transport_get_min_buffer_size(struct vsock_sock *vsk);
-u64 virtio_transport_get_max_buffer_size(struct vsock_sock *vsk);
-void virtio_transport_set_buffer_size(struct vsock_sock *vsk, u64 val);
-void virtio_transport_set_min_buffer_size(struct vsock_sock *vsk, u64 val);
-void virtio_transport_set_max_buffer_size(struct vsock_sock *vs, u64 val);
 int
 virtio_transport_notify_poll_in(struct vsock_sock *vsk,
 				size_t target,
@@ -124,6 +111,7 @@
 	struct vsock_transport_send_notify_data *data);
 int virtio_transport_notify_send_post_enqueue(struct vsock_sock *vsk,
 	ssize_t written, struct vsock_transport_send_notify_data *data);
+void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val);
 
 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk);
 bool virtio_transport_stream_is_active(struct vsock_sock *vsk);
diff --git a/include/linux/vm_sockets.h b/include/linux/vm_sockets.h
deleted file mode 100644
index 33f1a2e..0000000
--- a/include/linux/vm_sockets.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0-only */
-/*
- * VMware vSockets Driver
- *
- * Copyright (C) 2007-2013 VMware, Inc. All rights reserved.
- */
-
-#ifndef _VM_SOCKETS_H
-#define _VM_SOCKETS_H
-
-#include <uapi/linux/vm_sockets.h>
-
-int vm_sockets_get_local_cid(void);
-
-#endif /* _VM_SOCKETS_H */
diff --git a/include/linux/vmw_vmci_api.h b/include/linux/vmw_vmci_api.h
index acd9faf..f2890734 100644
--- a/include/linux/vmw_vmci_api.h
+++ b/include/linux/vmw_vmci_api.h
@@ -19,6 +19,7 @@
 struct msghdr;
 typedef void (vmci_device_shutdown_fn) (void *device_registration,
 					void *user_data);
+typedef void (*vmci_vsock_cb) (bool is_host);
 
 int vmci_datagram_create_handle(u32 resource_id, u32 flags,
 				vmci_datagram_recv_cb recv_cb,
@@ -37,6 +38,7 @@
 int vmci_doorbell_notify(struct vmci_handle handle, u32 priv_flags);
 u32 vmci_get_context_id(void);
 bool vmci_is_context_owner(u32 context_id, kuid_t uid);
+int vmci_register_vsock_callback(vmci_vsock_cb callback);
 
 int vmci_event_subscribe(u32 event,
 			 vmci_event_cb callback, void *callback_data,
diff --git a/include/linux/wakeup_reason.h b/include/linux/wakeup_reason.h
new file mode 100644
index 0000000..54f5caa
--- /dev/null
+++ b/include/linux/wakeup_reason.h
@@ -0,0 +1,37 @@
+/*
+ * include/linux/wakeup_reason.h
+ *
+ * Logs the reason which caused the kernel to resume
+ * from the suspend mode.
+ *
+ * Copyright (C) 2014 Google, Inc.
+ * 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.
+ */
+
+#ifndef _LINUX_WAKEUP_REASON_H
+#define _LINUX_WAKEUP_REASON_H
+
+#define MAX_SUSPEND_ABORT_LEN 256
+
+#ifdef CONFIG_SUSPEND
+void log_irq_wakeup_reason(int irq);
+void log_threaded_irq_wakeup_reason(int irq, int parent_irq);
+void log_suspend_abort_reason(const char *fmt, ...);
+void log_abnormal_wakeup_reason(const char *fmt, ...);
+void clear_wakeup_reasons(void);
+#else
+static inline void log_irq_wakeup_reason(int irq) { }
+static inline void log_threaded_irq_wakeup_reason(int irq, int parent_irq) { }
+static inline void log_suspend_abort_reason(const char *fmt, ...) { }
+static inline void log_abnormal_wakeup_reason(const char *fmt, ...) { }
+static inline void clear_wakeup_reasons(void) { }
+#endif
+
+#endif /* _LINUX_WAKEUP_REASON_H */
diff --git a/include/linux/workqueue.h b/include/linux/workqueue.h
index 4261d1c6..71726c9 100644
--- a/include/linux/workqueue.h
+++ b/include/linux/workqueue.h
@@ -14,6 +14,7 @@
 #include <linux/atomic.h>
 #include <linux/cpumask.h>
 #include <linux/rcupdate.h>
+#include <linux/android_kabi.h>
 
 struct workqueue_struct;
 
@@ -106,6 +107,8 @@
 #ifdef CONFIG_LOCKDEP
 	struct lockdep_map lockdep_map;
 #endif
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define WORK_DATA_INIT()	ATOMIC_LONG_INIT((unsigned long)WORK_STRUCT_NO_POOL)
@@ -119,6 +122,9 @@
 	/* target workqueue and CPU ->timer uses to queue ->work */
 	struct workqueue_struct *wq;
 	int cpu;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct rcu_work {
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
index 3a71ad7..0d970fd 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
@@ -30,10 +30,10 @@
 	const char *prefix;
 	int flags;      /* fs private flags */
 	bool (*list)(struct dentry *dentry);
-	int (*get)(const struct xattr_handler *, struct dentry *dentry,
+	int (*get)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, void *buffer,
-		   size_t size);
-	int (*set)(const struct xattr_handler *, struct dentry *dentry,
+		   size_t size, int flags);
+	int (*set)(const struct xattr_handler *handler, struct dentry *dentry,
 		   struct inode *inode, const char *name, const void *buffer,
 		   size_t size, int flags);
 };
@@ -46,7 +46,8 @@
 	size_t value_len;
 };
 
-ssize_t __vfs_getxattr(struct dentry *, struct inode *, const char *, void *, size_t);
+ssize_t __vfs_getxattr(struct dentry *dentry, struct inode *inode,
+		       const char *name, void *buffer, size_t size, int flags);
 ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
 ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
 int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
new file mode 100644
index 0000000..1009cf0
--- /dev/null
+++ b/include/media/hevc-ctrls.h
@@ -0,0 +1,212 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * These are the HEVC state controls for use with stateless HEVC
+ * codec drivers.
+ *
+ * It turns out that these structs are not stable yet and will undergo
+ * more changes. So keep them private until they are stable and ready to
+ * become part of the official public API.
+ */
+
+#ifndef _HEVC_CTRLS_H_
+#define _HEVC_CTRLS_H_
+
+#include <linux/videodev2.h>
+
+/* The pixel format isn't stable at the moment and will likely be renamed. */
+#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
+
+#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_MPEG_BASE + 1008)
+#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_MPEG_BASE + 1009)
+#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_MPEG_BASE + 1010)
+#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_MPEG_BASE + 1015)
+#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_MPEG_BASE + 1016)
+
+/* enum v4l2_ctrl_type type values */
+#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
+#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
+#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
+
+enum v4l2_mpeg_video_hevc_decode_mode {
+	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
+	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+};
+
+enum v4l2_mpeg_video_hevc_start_code {
+	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
+	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+};
+
+#define V4L2_HEVC_SLICE_TYPE_B	0
+#define V4L2_HEVC_SLICE_TYPE_P	1
+#define V4L2_HEVC_SLICE_TYPE_I	2
+
+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE		(1ULL << 0)
+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED			(1ULL << 1)
+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED				(1ULL << 2)
+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET		(1ULL << 3)
+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED				(1ULL << 4)
+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED		(1ULL << 5)
+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT		(1ULL << 6)
+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
+
+/* The controls are not stable at the moment and will likely be reworked. */
+struct v4l2_ctrl_hevc_sps {
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
+	__u16	pic_width_in_luma_samples;
+	__u16	pic_height_in_luma_samples;
+	__u8	bit_depth_luma_minus8;
+	__u8	bit_depth_chroma_minus8;
+	__u8	log2_max_pic_order_cnt_lsb_minus4;
+	__u8	sps_max_dec_pic_buffering_minus1;
+	__u8	sps_max_num_reorder_pics;
+	__u8	sps_max_latency_increase_plus1;
+	__u8	log2_min_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_luma_coding_block_size;
+	__u8	log2_min_luma_transform_block_size_minus2;
+	__u8	log2_diff_max_min_luma_transform_block_size;
+	__u8	max_transform_hierarchy_depth_inter;
+	__u8	max_transform_hierarchy_depth_intra;
+	__u8	pcm_sample_bit_depth_luma_minus1;
+	__u8	pcm_sample_bit_depth_chroma_minus1;
+	__u8	log2_min_pcm_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_pcm_luma_coding_block_size;
+	__u8	num_short_term_ref_pic_sets;
+	__u8	num_long_term_ref_pics_sps;
+	__u8	chroma_format_idc;
+
+	__u8	padding;
+
+	__u64	flags;
+};
+
+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT		(1ULL << 0)
+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT			(1ULL << 1)
+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED		(1ULL << 2)
+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT			(1ULL << 3)
+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED		(1ULL << 4)
+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED		(1ULL << 5)
+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED			(1ULL << 6)
+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT	(1ULL << 7)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED			(1ULL << 8)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED			(1ULL << 9)
+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED		(1ULL << 10)
+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED			(1ULL << 11)
+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED		(1ULL << 12)
+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	(1ULL << 13)
+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED	(1ULL << 15)
+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER	(1ULL << 16)
+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT		(1ULL << 17)
+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
+
+struct v4l2_ctrl_hevc_pps {
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
+	__u8	num_extra_slice_header_bits;
+	__s8	init_qp_minus26;
+	__u8	diff_cu_qp_delta_depth;
+	__s8	pps_cb_qp_offset;
+	__s8	pps_cr_qp_offset;
+	__u8	num_tile_columns_minus1;
+	__u8	num_tile_rows_minus1;
+	__u8	column_width_minus1[20];
+	__u8	row_height_minus1[22];
+	__s8	pps_beta_offset_div2;
+	__s8	pps_tc_offset_div2;
+	__u8	log2_parallel_merge_level_minus2;
+
+	__u8	padding[4];
+	__u64	flags;
+};
+
+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE	0x01
+#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER	0x02
+#define V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR		0x03
+
+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
+
+struct v4l2_hevc_dpb_entry {
+	__u64	timestamp;
+	__u8	rps;
+	__u8	field_pic;
+	__u16	pic_order_cnt[2];
+	__u8	padding[2];
+};
+
+struct v4l2_hevc_pred_weight_table {
+	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__s8	delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__u8	padding[6];
+
+	__u8	luma_log2_weight_denom;
+	__s8	delta_chroma_log2_weight_denom;
+};
+
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA		(1ULL << 0)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA		(1ULL << 1)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED	(1ULL << 2)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO			(1ULL << 3)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT			(1ULL << 4)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0		(1ULL << 5)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV		(1ULL << 6)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
+
+struct v4l2_ctrl_hevc_slice_params {
+	__u32	bit_size;
+	__u32	data_bit_offset;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
+	__u8	nal_unit_type;
+	__u8	nuh_temporal_id_plus1;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u8	slice_type;
+	__u8	colour_plane_id;
+	__u16	slice_pic_order_cnt;
+	__u8	num_ref_idx_l0_active_minus1;
+	__u8	num_ref_idx_l1_active_minus1;
+	__u8	collocated_ref_idx;
+	__u8	five_minus_max_num_merge_cand;
+	__s8	slice_qp_delta;
+	__s8	slice_cb_qp_offset;
+	__s8	slice_cr_qp_offset;
+	__s8	slice_act_y_qp_offset;
+	__s8	slice_act_cb_qp_offset;
+	__s8	slice_act_cr_qp_offset;
+	__s8	slice_beta_offset_div2;
+	__s8	slice_tc_offset_div2;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
+	__u8	pic_struct;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u8	num_active_dpb_entries;
+	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+
+	__u8	num_rps_poc_st_curr_before;
+	__u8	num_rps_poc_st_curr_after;
+	__u8	num_rps_poc_lt_curr;
+
+	__u8	padding;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	struct v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
+	struct v4l2_hevc_pred_weight_table pred_weight_table;
+
+	__u64	flags;
+};
+
+#endif
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h
index c070d8a..d8c29e0 100644
--- a/include/media/v4l2-common.h
+++ b/include/media/v4l2-common.h
@@ -457,8 +457,24 @@
 /* Pixel format and FourCC helpers */
 
 /**
+ * enum v4l2_pixel_encoding - specifies the pixel encoding value
+ *
+ * @V4L2_PIXEL_ENC_UNKNOWN:	Pixel encoding is unknown/un-initialized
+ * @V4L2_PIXEL_ENC_YUV:		Pixel encoding is YUV
+ * @V4L2_PIXEL_ENC_RGB:		Pixel encoding is RGB
+ * @V4L2_PIXEL_ENC_BAYER:	Pixel encoding is Bayer
+ */
+enum v4l2_pixel_encoding {
+	V4L2_PIXEL_ENC_UNKNOWN = 0,
+	V4L2_PIXEL_ENC_YUV = 1,
+	V4L2_PIXEL_ENC_RGB = 2,
+	V4L2_PIXEL_ENC_BAYER = 3,
+};
+
+/**
  * struct v4l2_format_info - information about a V4L2 format
  * @format: 4CC format identifier (V4L2_PIX_FMT_*)
+ * @pixel_enc: Pixel encoding (see enum v4l2_pixel_encoding above)
  * @mem_planes: Number of memory planes, which includes the alpha plane (1 to 4).
  * @comp_planes: Number of component planes, which includes the alpha plane (1 to 4).
  * @bpp: Array of per-plane bytes per pixel
@@ -469,6 +485,7 @@
  */
 struct v4l2_format_info {
 	u32 format;
+	u8 pixel_enc;
 	u8 mem_planes;
 	u8 comp_planes;
 	u8 bpp[4];
@@ -478,8 +495,22 @@
 	u8 block_h[4];
 };
 
-const struct v4l2_format_info *v4l2_format_info(u32 format);
+static inline bool v4l2_is_format_rgb(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_RGB;
+}
 
+static inline bool v4l2_is_format_yuv(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_YUV;
+}
+
+static inline bool v4l2_is_format_bayer(const struct v4l2_format_info *f)
+{
+	return f && f->pixel_enc == V4L2_PIXEL_ENC_BAYER;
+}
+
+const struct v4l2_format_info *v4l2_format_info(u32 format);
 void v4l2_apply_frmsize_constraints(u32 *width, u32 *height,
 				    const struct v4l2_frmsize_stepwise *frmsize);
 int v4l2_fill_pixfmt(struct v4l2_pix_format *pixfmt, u32 pixelformat,
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index 570ff4b..fd188ae 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -11,6 +11,7 @@
 #include <linux/list.h>
 #include <linux/mutex.h>
 #include <linux/videodev2.h>
+#include <linux/android_kabi.h>
 #include <media/media-request.h>
 
 /*
@@ -21,6 +22,7 @@
 #include <media/fwht-ctrls.h>
 #include <media/h264-ctrls.h>
 #include <media/vp8-ctrls.h>
+#include <media/hevc-ctrls.h>
 
 /* forward references */
 struct file;
@@ -50,7 +52,12 @@
  * @p_h264_slice_params:	Pointer to a struct v4l2_ctrl_h264_slice_params.
  * @p_h264_decode_params:	Pointer to a struct v4l2_ctrl_h264_decode_params.
  * @p_vp8_frame_header:		Pointer to a VP8 frame header structure.
+ * @p_hevc_sps:			Pointer to an HEVC sequence parameter set structure.
+ * @p_hevc_pps:			Pointer to an HEVC picture parameter set structure.
+ * @p_hevc_slice_params:	Pointer to an HEVC slice parameters structure.
+ * @p_area:			Pointer to an area.
  * @p:				Pointer to a compound value.
+ * @p_const:			Pointer to a constant compound value.
  */
 union v4l2_ctrl_ptr {
 	s32 *p_s32;
@@ -68,7 +75,15 @@
 	struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
 	struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
 	struct v4l2_ctrl_vp8_frame_header *p_vp8_frame_header;
+	struct v4l2_ctrl_hevc_sps *p_hevc_sps;
+	struct v4l2_ctrl_hevc_pps *p_hevc_pps;
+	struct v4l2_ctrl_hevc_slice_params *p_hevc_slice_params;
+	struct v4l2_area *p_area;
 	void *p;
+	const void *p_const;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
@@ -89,6 +104,8 @@
 	int (*g_volatile_ctrl)(struct v4l2_ctrl *ctrl);
 	int (*try_ctrl)(struct v4l2_ctrl *ctrl);
 	int (*s_ctrl)(struct v4l2_ctrl *ctrl);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -110,6 +127,8 @@
 	void (*log)(const struct v4l2_ctrl *ctrl);
 	int (*validate)(const struct v4l2_ctrl *ctrl, u32 idx,
 			union v4l2_ctrl_ptr ptr);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -200,6 +219,9 @@
  *		not freed when the control is deleted. Should this be needed
  *		then a new internal bitfield can be added to tell the framework
  *		to free this pointer.
+ * @p_def:	The control's default value represented via a union which
+ *		provides a standard way of accessing control types
+ *		through a pointer (for compound controls only).
  * @p_cur:	The control's current value represented via a union which
  *		provides a standard way of accessing control types
  *		through a pointer.
@@ -254,8 +276,11 @@
 		s32 val;
 	} cur;
 
+	union v4l2_ctrl_ptr p_def;
 	union v4l2_ctrl_ptr p_new;
 	union v4l2_ctrl_ptr p_cur;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -293,6 +318,8 @@
 	bool req_done;
 	struct v4l2_ctrl_ref *req;
 	union v4l2_ctrl_ptr p_req;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -343,6 +370,8 @@
 	struct list_head requests;
 	struct list_head requests_queued;
 	struct media_request_object req_obj;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -357,6 +386,7 @@
  * @max:	The control's maximum value.
  * @step:	The control's step value for non-menu controls.
  * @def:	The control's default value.
+ * @p_def:	The control's default value for compound controls.
  * @dims:	The size of each dimension.
  * @elem_size:	The size in bytes of the control.
  * @flags:	The control's flags.
@@ -385,6 +415,7 @@
 	s64 max;
 	u64 step;
 	s64 def;
+	union v4l2_ctrl_ptr p_def;
 	u32 dims[V4L2_CTRL_MAX_DIMS];
 	u32 elem_size;
 	u32 flags;
@@ -392,6 +423,8 @@
 	const char * const *qmenu;
 	const s64 *qmenu_int;
 	unsigned int is_private:1;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -647,6 +680,24 @@
 					       const char * const *qmenu);
 
 /**
+ * v4l2_ctrl_new_std_compound() - Allocate and initialize a new standard V4L2
+ *      compound control.
+ *
+ * @hdl:       The control handler.
+ * @ops:       The control ops.
+ * @id:        The control ID.
+ * @p_def:     The control's default value.
+ *
+ * Sames as v4l2_ctrl_new_std(), but with support to compound controls, thanks
+ * to the @p_def field.
+ *
+ */
+struct v4l2_ctrl *v4l2_ctrl_new_std_compound(struct v4l2_ctrl_handler *hdl,
+					     const struct v4l2_ctrl_ops *ops,
+					     u32 id,
+					     const union v4l2_ctrl_ptr p_def);
+
+/**
  * v4l2_ctrl_new_int_menu() - Create a new standard V4L2 integer menu control.
  *
  * @hdl:	The control handler.
@@ -1065,6 +1116,46 @@
 	return rval;
 }
 
+/**
+ * __v4l2_ctrl_s_ctrl_area() - Unlocked variant of v4l2_ctrl_s_ctrl_area().
+ *
+ * @ctrl:	The control.
+ * @area:	The new area.
+ *
+ * This sets the control's new area safely by going through the control
+ * framework. This function assumes the control's handler is already locked,
+ * allowing it to be used from within the &v4l2_ctrl_ops functions.
+ *
+ * This function is for area type controls only.
+ */
+int __v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+			    const struct v4l2_area *area);
+
+/**
+ * v4l2_ctrl_s_ctrl_area() - Helper function to set a control's area value
+ *	 from within a driver.
+ *
+ * @ctrl:	The control.
+ * @area:	The new area.
+ *
+ * This sets the control's new area safely by going through the control
+ * framework. This function will lock the control's handler, so it cannot be
+ * used from within the &v4l2_ctrl_ops functions.
+ *
+ * This function is for area type controls only.
+ */
+static inline int v4l2_ctrl_s_ctrl_area(struct v4l2_ctrl *ctrl,
+					const struct v4l2_area *area)
+{
+	int rval;
+
+	v4l2_ctrl_lock(ctrl);
+	rval = __v4l2_ctrl_s_ctrl_area(ctrl, area);
+	v4l2_ctrl_unlock(ctrl);
+
+	return rval;
+}
+
 /* Internal helper functions that deal with control events. */
 extern const struct v4l2_subscribed_event_ops v4l2_ctrl_sub_ev_ops;
 
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h
index 48531e5..fca5f72 100644
--- a/include/media/v4l2-dev.h
+++ b/include/media/v4l2-dev.h
@@ -16,6 +16,7 @@
 #include <linux/cdev.h>
 #include <linux/mutex.h>
 #include <linux/videodev2.h>
+#include <linux/android_kabi.h>
 
 #include <media/media-entity.h>
 
@@ -204,6 +205,8 @@
 	int (*mmap) (struct file *, struct vm_area_struct *);
 	int (*open) (struct file *);
 	int (*release) (struct file *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
@@ -300,6 +303,9 @@
 	DECLARE_BITMAP(valid_ioctls, BASE_VIDIOC_PRIVATE);
 
 	struct mutex *lock;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /**
diff --git a/include/media/v4l2-fh.h b/include/media/v4l2-fh.h
index 53b4dbb..b5b3e00 100644
--- a/include/media/v4l2-fh.h
+++ b/include/media/v4l2-fh.h
@@ -53,9 +53,7 @@
 	unsigned int		navailable;
 	u32			sequence;
 
-#if IS_ENABLED(CONFIG_V4L2_MEM2MEM_DEV)
 	struct v4l2_m2m_ctx	*m2m_ctx;
-#endif
 };
 
 /**
diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h
index 0b9c3a2..98753f0 100644
--- a/include/media/v4l2-mem2mem.h
+++ b/include/media/v4l2-mem2mem.h
@@ -21,7 +21,8 @@
  *		callback.
  *		The job does NOT have to end before this callback returns
  *		(and it will be the usual case). When the job finishes,
- *		v4l2_m2m_job_finish() has to be called.
+ *		v4l2_m2m_job_finish() or v4l2_m2m_buf_done_and_job_finish()
+ *		has to be called.
  * @job_ready:	optional. Should return 0 if the driver does not have a job
  *		fully prepared to run yet (i.e. it will not be able to finish a
  *		transaction without sleeping). If not provided, it will be
@@ -33,7 +34,8 @@
  *		stop the device safely; e.g. in the next interrupt handler),
  *		even if the transaction would not have been finished by then.
  *		After the driver performs the necessary steps, it has to call
- *		v4l2_m2m_job_finish() (as if the transaction ended normally).
+ *		v4l2_m2m_job_finish() or v4l2_m2m_buf_done_and_job_finish() as
+ *		if the transaction ended normally.
  *		This function does not have to (and will usually not) wait
  *		until the device enters a state when it can be stopped.
  */
@@ -73,6 +75,15 @@
  * struct v4l2_m2m_ctx - Memory to memory context structure
  *
  * @q_lock: struct &mutex lock
+ * @new_frame: valid in the device_run callback: if true, then this
+ *		starts a new frame; if false, then this is a new slice
+ *		for an existing frame. This is always true unless
+ *		V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF is set, which
+ *		indicates slicing support.
+ * @is_draining: indicates device is in draining phase
+ * @last_src_buf: indicate the last source buffer for draining
+ * @next_buf_last: next capture queud buffer will be tagged as last
+ * @has_stopped: indicate the device has been stopped
  * @m2m_dev: opaque pointer to the internal data to handle M2M context
  * @cap_q_ctx: Capture (output to memory) queue context
  * @out_q_ctx: Output (input from memory) queue context
@@ -89,6 +100,13 @@
 	/* optional cap/out vb2 queues lock */
 	struct mutex			*q_lock;
 
+	bool				new_frame;
+
+	bool				is_draining;
+	struct vb2_v4l2_buffer		*last_src_buf;
+	bool				next_buf_last;
+	bool				has_stopped;
+
 	/* internal use only */
 	struct v4l2_m2m_dev		*m2m_dev;
 
@@ -173,6 +191,33 @@
 void v4l2_m2m_job_finish(struct v4l2_m2m_dev *m2m_dev,
 			 struct v4l2_m2m_ctx *m2m_ctx);
 
+/**
+ * v4l2_m2m_buf_done_and_job_finish() - return source/destination buffers with
+ * state and inform the framework that a job has been finished and have it
+ * clean up
+ *
+ * @m2m_dev: opaque pointer to the internal data to handle M2M context
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @state: vb2 buffer state passed to v4l2_m2m_buf_done().
+ *
+ * Drivers that set V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF must use this
+ * function instead of job_finish() to take held buffers into account. It is
+ * optional for other drivers.
+ *
+ * This function removes the source buffer from the ready list and returns
+ * it with the given state. The same is done for the destination buffer, unless
+ * it is marked 'held'. In that case the buffer is kept on the ready list.
+ *
+ * After that the job is finished (see job_finish()).
+ *
+ * This allows for multiple output buffers to be used to fill in a single
+ * capture buffer. This is typically used by stateless decoders where
+ * multiple e.g. H.264 slices contribute to a single decoded frame.
+ */
+void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev,
+				      struct v4l2_m2m_ctx *m2m_ctx,
+				      enum vb2_buffer_state state);
+
 static inline void
 v4l2_m2m_buf_done(struct vb2_v4l2_buffer *buf, enum vb2_buffer_state state)
 {
@@ -180,6 +225,86 @@
 }
 
 /**
+ * v4l2_m2m_clear_state() - clear encoding/decoding state
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline void
+v4l2_m2m_clear_state(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	m2m_ctx->next_buf_last = false;
+	m2m_ctx->is_draining = false;
+	m2m_ctx->has_stopped = false;
+}
+
+/**
+ * v4l2_m2m_mark_stopped() - set current encoding/decoding state as stopped
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline void
+v4l2_m2m_mark_stopped(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	m2m_ctx->next_buf_last = false;
+	m2m_ctx->is_draining = false;
+	m2m_ctx->has_stopped = true;
+}
+
+/**
+ * v4l2_m2m_dst_buf_is_last() - return the current encoding/decoding session
+ * draining management state of next queued capture buffer
+ *
+ * This last capture buffer should be tagged with V4L2_BUF_FLAG_LAST to notify
+ * the end of the capture session.
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline bool
+v4l2_m2m_dst_buf_is_last(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	return m2m_ctx->is_draining && m2m_ctx->next_buf_last;
+}
+
+/**
+ * v4l2_m2m_has_stopped() - return the current encoding/decoding session
+ * stopped state
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ */
+static inline bool
+v4l2_m2m_has_stopped(struct v4l2_m2m_ctx *m2m_ctx)
+{
+	return m2m_ctx->has_stopped;
+}
+
+/**
+ * v4l2_m2m_is_last_draining_src_buf() - return the output buffer draining
+ * state in the current encoding/decoding session
+ *
+ * This will identify the last output buffer queued before a session stop
+ * was required, leading to an actual encoding/decoding session stop state
+ * in the encoding/decoding process after being processed.
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @vbuf: pointer to struct &v4l2_buffer
+ */
+static inline bool
+v4l2_m2m_is_last_draining_src_buf(struct v4l2_m2m_ctx *m2m_ctx,
+				  struct vb2_v4l2_buffer *vbuf)
+{
+	return m2m_ctx->is_draining && vbuf == m2m_ctx->last_src_buf;
+}
+
+/**
+ * v4l2_m2m_last_buffer_done() - marks the buffer with LAST flag and DONE
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @vbuf: pointer to struct &v4l2_buffer
+ */
+void v4l2_m2m_last_buffer_done(struct v4l2_m2m_ctx *m2m_ctx,
+			       struct vb2_v4l2_buffer *vbuf);
+
+/**
  * v4l2_m2m_reqbufs() - multi-queue-aware REQBUFS multiplexer
  *
  * @file: pointer to struct &file
@@ -277,6 +402,46 @@
 		       enum v4l2_buf_type type);
 
 /**
+ * v4l2_m2m_update_start_streaming_state() - update the encoding/decoding
+ * session state when a start of streaming of a video queue is requested
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @q: queue
+ */
+void v4l2_m2m_update_start_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					   struct vb2_queue *q);
+
+/**
+ * v4l2_m2m_update_stop_streaming_state() -  update the encoding/decoding
+ * session state when a stop of streaming of a video queue is requested
+ *
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @q: queue
+ */
+void v4l2_m2m_update_stop_streaming_state(struct v4l2_m2m_ctx *m2m_ctx,
+					  struct vb2_queue *q);
+
+/**
+ * v4l2_m2m_encoder_cmd() - execute an encoder command
+ *
+ * @file: pointer to struct &file
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @ec: pointer to the encoder command
+ */
+int v4l2_m2m_encoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_encoder_cmd *ec);
+
+/**
+ * v4l2_m2m_decoder_cmd() - execute a decoder command
+ *
+ * @file: pointer to struct &file
+ * @m2m_ctx: m2m context assigned to the instance given by struct &v4l2_m2m_ctx
+ * @dc: pointer to the decoder command
+ */
+int v4l2_m2m_decoder_cmd(struct file *file, struct v4l2_m2m_ctx *m2m_ctx,
+			 struct v4l2_decoder_cmd *dc);
+
+/**
  * v4l2_m2m_poll() - poll replacement, for destination buffers only
  *
  * @file: pointer to struct &file
@@ -668,10 +833,18 @@
 				enum v4l2_buf_type type);
 int v4l2_m2m_ioctl_streamoff(struct file *file, void *fh,
 				enum v4l2_buf_type type);
+int v4l2_m2m_ioctl_encoder_cmd(struct file *file, void *fh,
+			       struct v4l2_encoder_cmd *ec);
+int v4l2_m2m_ioctl_decoder_cmd(struct file *file, void *fh,
+			       struct v4l2_decoder_cmd *dc);
 int v4l2_m2m_ioctl_try_encoder_cmd(struct file *file, void *fh,
 				   struct v4l2_encoder_cmd *ec);
 int v4l2_m2m_ioctl_try_decoder_cmd(struct file *file, void *fh,
 				   struct v4l2_decoder_cmd *dc);
+int v4l2_m2m_ioctl_stateless_try_decoder_cmd(struct file *file, void *fh,
+					     struct v4l2_decoder_cmd *dc);
+int v4l2_m2m_ioctl_stateless_decoder_cmd(struct file *file, void *priv,
+					 struct v4l2_decoder_cmd *dc);
 int v4l2_m2m_fop_mmap(struct file *file, struct vm_area_struct *vma);
 __poll_t v4l2_m2m_fop_poll(struct file *file, poll_table *wait);
 
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index d4ac251..71f1f2f 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -162,9 +162,6 @@
  * @s_gpio: set GPIO pins. Very simple right now, might need to be extended with
  *	a direction argument if needed.
  *
- * @command: called by in-kernel drivers in order to call functions internal
- *	   to subdev drivers driver that have a separate callback.
- *
  * @ioctl: called at the end of ioctl() syscall handler at the V4L2 core.
  *	   used to provide support for private ioctls used on the driver.
  *
@@ -196,7 +193,6 @@
 	int (*load_fw)(struct v4l2_subdev *sd);
 	int (*reset)(struct v4l2_subdev *sd, u32 val);
 	int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
-	long (*command)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 	long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
 #ifdef CONFIG_COMPAT
 	long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,
diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
index 640aabe..6a5025a5 100644
--- a/include/media/videobuf2-core.h
+++ b/include/media/videobuf2-core.h
@@ -19,7 +19,7 @@
 #include <linux/bitops.h>
 #include <media/media-request.h>
 
-#define VB2_MAX_FRAME	(32)
+#define VB2_MAX_FRAME	(64)
 #define VB2_MAX_PLANES	(8)
 
 /**
@@ -505,6 +505,8 @@
  * @buf_ops:	callbacks to deliver buffer information.
  *		between user-space and kernel-space.
  * @drv_priv:	driver private data.
+ * @subsystem_flags: Flags specific to the subsystem (V4L2/DVB/etc.). Not used
+ *		by the vb2 core.
  * @buf_struct_size: size of the driver-specific buffer structure;
  *		"0" indicates the driver doesn't want to use a custom buffer
  *		structure type. for example, ``sizeof(struct vb2_v4l2_buffer)``
@@ -571,6 +573,7 @@
 	const struct vb2_buf_ops	*buf_ops;
 
 	void				*drv_priv;
+	u32				subsystem_flags;
 	unsigned int			buf_struct_size;
 	u32				timestamp_flags;
 	gfp_t				gfp_flags;
diff --git a/include/media/videobuf2-v4l2.h b/include/media/videobuf2-v4l2.h
index 8a10889..06f7058 100644
--- a/include/media/videobuf2-v4l2.h
+++ b/include/media/videobuf2-v4l2.h
@@ -13,6 +13,7 @@
 #define _MEDIA_VIDEOBUF2_V4L2_H
 
 #include <linux/videodev2.h>
+#include <linux/android_kabi.h>
 #include <media/videobuf2-core.h>
 
 #if VB2_MAX_FRAME != VIDEO_MAX_FRAME
@@ -33,6 +34,7 @@
  * @timecode:	frame timecode.
  * @sequence:	sequence count of this frame.
  * @request_fd:	the request_fd associated with this buffer
+ * @is_held:	if true, then this capture buffer was held
  * @planes:	plane information (userptr/fd, length, bytesused, data_offset).
  *
  * Should contain enough information to be able to cover all the fields
@@ -46,9 +48,15 @@
 	struct v4l2_timecode	timecode;
 	__u32			sequence;
 	__s32			request_fd;
+	bool			is_held;
 	struct vb2_plane	planes[VB2_MAX_PLANES];
+
+	ANDROID_KABI_RESERVE(1);
 };
 
+/* VB2 V4L2 flags as set in vb2_queue.subsystem_flags */
+#define VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 0)
+
 /*
  * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
  */
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 8d90fb9..6ac09f5 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -265,6 +265,18 @@
 void addrconf_prefix_rcv(struct net_device *dev,
 			 u8 *opt, int len, bool sllao);
 
+/* Determines into what table to put autoconf PIO/RIO/default routes
+ * learned on this device.
+ *
+ * - If 0, use the same table for every device. This puts routes into
+ *   one of RT_TABLE_{PREFIX,INFO,DFLT} depending on the type of route
+ *   (but note that these three are currently all equal to
+ *   RT6_TABLE_MAIN).
+ * - If > 0, use the specified table.
+ * - If < 0, put routes into table dev->ifindex + (-rt_table).
+ */
+u32 addrconf_rt_table(const struct net_device *dev, u32 default_table);
+
 /*
  *	anycast prototypes (anycast.c)
  */
diff --git a/include/net/af_vsock.h b/include/net/af_vsock.h
index 80ea0f9..4206dc6d 100644
--- a/include/net/af_vsock.h
+++ b/include/net/af_vsock.h
@@ -10,7 +10,7 @@
 
 #include <linux/kernel.h>
 #include <linux/workqueue.h>
-#include <linux/vm_sockets.h>
+#include <uapi/linux/vm_sockets.h>
 
 #include "vsock_addr.h"
 
@@ -27,6 +27,7 @@
 struct vsock_sock {
 	/* sk must be the first member. */
 	struct sock sk;
+	const struct vsock_transport *transport;
 	struct sockaddr_vm local_addr;
 	struct sockaddr_vm remote_addr;
 	/* Links for the global tables of bound and connected sockets. */
@@ -64,16 +65,18 @@
 	bool sent_request;
 	bool ignore_connecting_rst;
 
+	/* Protected by lock_sock(sk) */
+	u64 buffer_size;
+	u64 buffer_min_size;
+	u64 buffer_max_size;
+
 	/* Private to transport. */
 	void *trans;
 };
 
 s64 vsock_stream_has_data(struct vsock_sock *vsk);
 s64 vsock_stream_has_space(struct vsock_sock *vsk);
-struct sock *__vsock_create(struct net *net,
-			    struct socket *sock,
-			    struct sock *parent,
-			    gfp_t priority, unsigned short type, int kern);
+struct sock *vsock_create_connected(struct sock *parent);
 
 /**** TRANSPORT ****/
 
@@ -88,7 +91,17 @@
 	u64 data2; /* Transport-defined. */
 };
 
+/* Transport features flags */
+/* Transport provides host->guest communication */
+#define VSOCK_TRANSPORT_F_H2G		0x00000001
+/* Transport provides guest->host communication */
+#define VSOCK_TRANSPORT_F_G2H		0x00000002
+/* Transport provides DGRAM communication */
+#define VSOCK_TRANSPORT_F_DGRAM		0x00000004
+
 struct vsock_transport {
+	struct module *module;
+
 	/* Initialize/tear-down socket. */
 	int (*init)(struct vsock_sock *, struct vsock_sock *);
 	void (*destruct)(struct vsock_sock *);
@@ -139,33 +152,23 @@
 		struct vsock_transport_send_notify_data *);
 	int (*notify_send_post_enqueue)(struct vsock_sock *, ssize_t,
 		struct vsock_transport_send_notify_data *);
+	/* sk_lock held by the caller */
+	void (*notify_buffer_size)(struct vsock_sock *, u64 *);
 
 	/* Shutdown. */
 	int (*shutdown)(struct vsock_sock *, int);
 
-	/* Buffer sizes. */
-	void (*set_buffer_size)(struct vsock_sock *, u64);
-	void (*set_min_buffer_size)(struct vsock_sock *, u64);
-	void (*set_max_buffer_size)(struct vsock_sock *, u64);
-	u64 (*get_buffer_size)(struct vsock_sock *);
-	u64 (*get_min_buffer_size)(struct vsock_sock *);
-	u64 (*get_max_buffer_size)(struct vsock_sock *);
-
 	/* Addressing. */
 	u32 (*get_local_cid)(void);
 };
 
 /**** CORE ****/
 
-int __vsock_core_init(const struct vsock_transport *t, struct module *owner);
-static inline int vsock_core_init(const struct vsock_transport *t)
-{
-	return __vsock_core_init(t, THIS_MODULE);
-}
-void vsock_core_exit(void);
+int vsock_core_register(const struct vsock_transport *t, int features);
+void vsock_core_unregister(const struct vsock_transport *t);
 
 /* The transport may downcast this to access transport-specific functions */
-const struct vsock_transport *vsock_core_get_transport(void);
+const struct vsock_transport *vsock_core_get_transport(struct vsock_sock *vsk);
 
 /**** UTILS ****/
 
@@ -193,6 +196,8 @@
 					 struct sockaddr_vm *dst);
 void vsock_remove_sock(struct vsock_sock *vsk);
 void vsock_for_each_connected_socket(void (*fn)(struct sock *sk));
+int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk);
+bool vsock_find_cid(unsigned int cid);
 
 /**** TAP ****/
 
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index 14d00cc..02c5cca 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -27,6 +27,7 @@
 
 #include <linux/leds.h>
 #include <linux/rculist.h>
+#include <linux/android_kabi.h>
 
 #include <net/bluetooth/hci.h>
 #include <net/bluetooth/hci_sock.h>
@@ -445,6 +446,11 @@
 	int (*set_diag)(struct hci_dev *hdev, bool enable);
 	int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
 	void (*cmd_timeout)(struct hci_dev *hdev);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define HCI_PHY_HANDLE(handle)	(handle & 0xff)
@@ -531,6 +537,11 @@
 	void (*connect_cfm_cb)	(struct hci_conn *conn, u8 status);
 	void (*security_cfm_cb)	(struct hci_conn *conn, u8 status);
 	void (*disconn_cfm_cb)	(struct hci_conn *conn, u8 reason);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct hci_chan {
@@ -541,6 +552,8 @@
 	unsigned int	sent;
 	__u8		state;
 	bool		amp;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct hci_conn_params {
@@ -566,6 +579,8 @@
 
 	struct hci_conn *conn;
 	bool explicit_connect;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern struct list_head hci_dev_list;
@@ -1257,6 +1272,8 @@
 								__u8 encrypt);
 	void (*key_change_cfm)	(struct hci_conn *conn, __u8 status);
 	void (*role_switch_cfm)	(struct hci_conn *conn, __u8 status, __u8 role);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
@@ -1514,6 +1531,8 @@
 	size_t handler_count;
 	const struct hci_mgmt_handler *handlers;
 	void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index 8efc241..e73c206 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -29,6 +29,7 @@
 
 #include <asm/unaligned.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 /* L2CAP defaults */
 #define L2CAP_DEFAULT_MTU		672
@@ -602,6 +603,9 @@
 	void			*data;
 	const struct l2cap_ops	*ops;
 	struct mutex		lock;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct l2cap_ops {
@@ -625,6 +629,9 @@
 					       unsigned long len, int nb);
 	int			(*filter) (struct l2cap_chan * chan,
 					   struct sk_buff *skb);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct l2cap_conn {
@@ -660,6 +667,9 @@
 	struct mutex		chan_lock;
 	struct kref		ref;
 	struct list_head	users;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 struct l2cap_user {
diff --git a/include/net/bluetooth/rfcomm.h b/include/net/bluetooth/rfcomm.h
index da4acef..73ed036 100644
--- a/include/net/bluetooth/rfcomm.h
+++ b/include/net/bluetooth/rfcomm.h
@@ -22,6 +22,7 @@
 */
 
 #include <linux/refcount.h>
+#include <linux/android_kabi.h>
 
 #ifndef __RFCOMM_H
 #define __RFCOMM_H
@@ -165,6 +166,8 @@
 	uint   mtu;
 
 	struct list_head dlcs;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct rfcomm_dlc {
@@ -198,6 +201,9 @@
 	void (*data_ready)(struct rfcomm_dlc *d, struct sk_buff *skb);
 	void (*state_change)(struct rfcomm_dlc *d, int err);
 	void (*modem_status)(struct rfcomm_dlc *d, u8 v24_sig);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 /* DLC and session flags */
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 69b9ccb..3296d91 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -20,6 +20,7 @@
 #include <linux/if_ether.h>
 #include <linux/ieee80211.h>
 #include <linux/net.h>
+#include <linux/android_kabi.h>
 #include <net/regulatory.h>
 
 /**
@@ -126,6 +127,7 @@
  * with cfg80211.
  *
  * @center_freq: center frequency in MHz
+ * @freq_offset: offset from @center_freq, in KHz
  * @hw_value: hardware-specific value for the channel
  * @flags: channel flags from &enum ieee80211_channel_flags.
  * @orig_flags: channel flags at registration time, used by regulatory
@@ -147,6 +149,7 @@
 struct ieee80211_channel {
 	enum nl80211_band band;
 	u32 center_freq;
+	u16 freq_offset;
 	u16 hw_value;
 	u32 flags;
 	int max_antenna_gain;
@@ -324,10 +327,13 @@
  *
  * @types_mask: interface types mask
  * @he_cap: holds the HE capabilities
+ * @he_6ghz_capa: HE 6 GHz capabilities, must be filled in for a
+ *	6 GHz band channel (and 0 may be valid value).
  */
 struct ieee80211_sband_iftype_data {
 	u16 types_mask;
 	struct ieee80211_sta_he_cap he_cap;
+	struct ieee80211_he_6ghz_capa he_6ghz_capa;
 };
 
 /**
@@ -480,6 +486,26 @@
 }
 
 /**
+ * ieee80211_get_he_6ghz_capa - return HE 6 GHz capabilities
+ * @sband: the sband to search for the STA on
+ * @iftype: the iftype to search for
+ *
+ * Return: the 6GHz capabilities
+ */
+static inline __le16
+ieee80211_get_he_6ghz_capa(const struct ieee80211_supported_band *sband,
+			   enum nl80211_iftype iftype)
+{
+	const struct ieee80211_sband_iftype_data *data =
+		ieee80211_get_sband_iftype_data(sband, iftype);
+
+	if (WARN_ON(!data || !data->he_cap.has_he))
+		return 0;
+
+	return data->he_6ghz_capa.capa;
+}
+
+/**
  * wiphy_read_of_freq_limits - read frequency limits from device tree
  *
  * @wiphy: the wireless device to get extra limits for
@@ -587,6 +613,7 @@
  *	If edmg is requested (i.e. the .channels member is non-zero),
  *	chan will define the primary channel and all other
  *	parameters are ignored.
+ * @freq1_offset: offset from @center_freq1, in KHz
  */
 struct cfg80211_chan_def {
 	struct ieee80211_channel *chan;
@@ -594,6 +621,7 @@
 	u32 center_freq1;
 	u32 center_freq2;
 	struct ieee80211_edmg edmg;
+	u16 freq1_offset;
 };
 
 /**
@@ -648,6 +676,7 @@
 	return (chandef1->chan == chandef2->chan &&
 		chandef1->width == chandef2->width &&
 		chandef1->center_freq1 == chandef2->center_freq1 &&
+		chandef1->freq1_offset == chandef2->freq1_offset &&
 		chandef1->center_freq2 == chandef2->center_freq2);
 }
 
@@ -864,6 +893,8 @@
 	const u8 *psk;
 	const u8 *sae_pwd;
 	u8 sae_pwd_len;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -910,6 +941,8 @@
 	size_t probe_resp_len;
 	size_t lci_len;
 	size_t civicloc_len;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct mac_address {
@@ -1016,6 +1049,8 @@
 	bool twt_responder;
 	u32 flags;
 	struct ieee80211_he_obss_pd he_obss_pd;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1045,6 +1080,8 @@
 	bool radar_required;
 	bool block_tx;
 	u8 count;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10
@@ -1151,6 +1188,7 @@
  * @he_capa: HE capabilities of station
  * @he_capa_len: the length of the HE capabilities
  * @airtime_weight: airtime scheduler weight for this station
+ * @he_6ghz_capa: HE 6 GHz Band capabilities of station
  */
 struct station_parameters {
 	const u8 *supported_rates;
@@ -1182,6 +1220,9 @@
 	u8 he_capa_len;
 	u16 airtime_weight;
 	struct sta_txpwr txpwr;
+	const struct ieee80211_he_6ghz_capa *he_6ghz_capa;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1525,6 +1566,8 @@
 	u32 fcs_err_count;
 
 	u32 airtime_link_metric;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #if IS_ENABLED(CONFIG_CFG80211)
@@ -1771,6 +1814,8 @@
 	enum nl80211_mesh_power_mode power_mode;
 	u16 dot11MeshAwakeWindowDuration;
 	u32 plink_timeout;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1820,6 +1865,8 @@
 	struct cfg80211_bitrate_mask beacon_rate;
 	bool userspace_handles_dfs;
 	bool control_port_over_nl80211;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1953,6 +2000,8 @@
 	bool notified;
 	bool no_cck;
 
+	ANDROID_KABI_RESERVE(1);
+
 	/* keep last */
 	struct ieee80211_channel *channels[0];
 };
@@ -2099,6 +2148,8 @@
 	bool nl_owner_dead;
 	struct list_head list;
 
+	ANDROID_KABI_RESERVE(1);
+
 	/* keep last */
 	struct ieee80211_channel *channels[0];
 };
@@ -2222,6 +2273,8 @@
 	u8 bssid_index;
 	u8 max_bssid_indicator;
 
+	ANDROID_KABI_RESERVE(1);
+
 	u8 priv[0] __aligned(sizeof(void *));
 };
 
@@ -2345,6 +2398,8 @@
 	const u8 *fils_kek;
 	size_t fils_kek_len;
 	const u8 *fils_nonces;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -2443,6 +2498,8 @@
 	struct ieee80211_ht_cap ht_capa_mask;
 	struct key_params *wep_keys;
 	int wep_tx_key;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -2557,6 +2614,8 @@
 	size_t fils_erp_rrk_len;
 	bool want_1x;
 	struct ieee80211_edmg edmg;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -2989,6 +3048,8 @@
 	u8 num_rx_filters;
 	u8 instance_id;
 	u64 cookie;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -3149,6 +3210,8 @@
 	    dist_avg_valid:1,
 	    dist_variance_valid:1,
 	    dist_spread_valid:1;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -3948,6 +4011,11 @@
 				   struct cfg80211_update_owe_info *owe_info);
 	int	(*probe_mesh_link)(struct wiphy *wiphy, struct net_device *dev,
 				   const u8 *buf, size_t len);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -4308,6 +4376,8 @@
 		      unsigned long *storage);
 	const struct nla_policy *policy;
 	unsigned int maxattr;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -4681,6 +4751,8 @@
 
 	const struct cfg80211_pmsr_capabilities *pmsr_capa;
 
+	ANDROID_KABI_RESERVE(1);
+
 	char priv[0] __aligned(NETDEV_ALIGN);
 };
 
@@ -4973,6 +5045,9 @@
 	struct list_head pmsr_list;
 	spinlock_t pmsr_lock;
 	struct work_struct pmsr_free_wk;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 static inline u8 *wdev_address(struct wireless_dev *wdev)
@@ -5008,29 +5083,106 @@
  */
 
 /**
+ * ieee80211_channel_equal - compare two struct ieee80211_channel
+ *
+ * @a: 1st struct ieee80211_channel
+ * @b: 2nd struct ieee80211_channel
+ * Return: true if center frequency of @a == @b
+ */
+static inline bool
+ieee80211_channel_equal(struct ieee80211_channel *a,
+			struct ieee80211_channel *b)
+{
+	return (a->center_freq == b->center_freq &&
+		a->freq_offset == b->freq_offset);
+}
+
+/**
+ * ieee80211_channel_to_khz - convert ieee80211_channel to frequency in KHz
+ * @chan: struct ieee80211_channel to convert
+ * Return: The corresponding frequency (in KHz)
+ */
+static inline u32
+ieee80211_channel_to_khz(const struct ieee80211_channel *chan)
+{
+	return MHZ_TO_KHZ(chan->center_freq) + chan->freq_offset;
+}
+
+/**
+ * ieee80211_channel_to_freq_khz - convert channel number to frequency
+ * @chan: channel number
+ * @band: band, necessary due to channel number overlap
+ * Return: The corresponding frequency (in KHz), or 0 if the conversion failed.
+ */
+u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band);
+
+/**
  * ieee80211_channel_to_frequency - convert channel number to frequency
  * @chan: channel number
  * @band: band, necessary due to channel number overlap
  * Return: The corresponding frequency (in MHz), or 0 if the conversion failed.
  */
-int ieee80211_channel_to_frequency(int chan, enum nl80211_band band);
+static inline int
+ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
+{
+	return KHZ_TO_MHZ(ieee80211_channel_to_freq_khz(chan, band));
+}
+
+/**
+ * ieee80211_freq_khz_to_channel - convert frequency to channel number
+ * @freq: center frequency in KHz
+ * Return: The corresponding channel, or 0 if the conversion failed.
+ */
+int ieee80211_freq_khz_to_channel(u32 freq);
 
 /**
  * ieee80211_frequency_to_channel - convert frequency to channel number
- * @freq: center frequency
+ * @freq: center frequency in MHz
  * Return: The corresponding channel, or 0 if the conversion failed.
  */
-int ieee80211_frequency_to_channel(int freq);
+static inline int
+ieee80211_frequency_to_channel(int freq)
+{
+	return ieee80211_freq_khz_to_channel(MHZ_TO_KHZ(freq));
+}
+
+/**
+ * ieee80211_get_channel_khz - get channel struct from wiphy for specified
+ * frequency
+ * @wiphy: the struct wiphy to get the channel for
+ * @freq: the center frequency (in KHz) of the channel
+ * Return: The channel struct from @wiphy at @freq.
+ */
+struct ieee80211_channel *
+ieee80211_get_channel_khz(struct wiphy *wiphy, u32 freq);
 
 /**
  * ieee80211_get_channel - get channel struct from wiphy for specified frequency
  *
  * @wiphy: the struct wiphy to get the channel for
- * @freq: the center frequency of the channel
- *
+ * @freq: the center frequency (in MHz) of the channel
  * Return: The channel struct from @wiphy at @freq.
  */
-struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq);
+static inline struct ieee80211_channel *
+ieee80211_get_channel(struct wiphy *wiphy, int freq)
+{
+	return ieee80211_get_channel_khz(wiphy, MHZ_TO_KHZ(freq));
+}
+
+/**
+ * cfg80211_channel_is_psc - Check if the channel is a 6 GHz PSC
+ * @chan: control channel to check
+ *
+ * The Preferred Scanning Channels (PSC) are defined in
+ * Draft IEEE P802.11ax/D5.0, 26.17.2.3.3
+ */
+static inline bool cfg80211_channel_is_psc(struct ieee80211_channel *chan)
+{
+	if (chan->band != NL80211_BAND_6GHZ)
+		return false;
+
+	return ieee80211_frequency_to_channel(chan->center_freq) % 16 == 5;
+}
 
 /**
  * ieee80211_get_response_rate - get basic rate for a given rate
@@ -7054,6 +7206,19 @@
 bool ieee80211_chandef_to_operating_class(struct cfg80211_chan_def *chandef,
 					  u8 *op_class);
 
+/**
+ * ieee80211_chandef_to_khz - convert chandef to frequency in KHz
+ *
+ * @chandef: the chandef to convert
+ *
+ * Returns the center frequency of chandef (1st segment) in KHz.
+ */
+static inline u32
+ieee80211_chandef_to_khz(const struct cfg80211_chan_def *chandef)
+{
+	return MHZ_TO_KHZ(chandef->center_freq1) + chandef->freq1_offset;
+}
+
 /*
  * cfg80211_tdls_oper_request - request userspace to perform TDLS operation
  * @dev: the device on which the operation is requested
diff --git a/include/net/fib_rules.h b/include/net/fib_rules.h
index 25eae5c..5e06f0b 100644
--- a/include/net/fib_rules.h
+++ b/include/net/fib_rules.h
@@ -68,7 +68,14 @@
 	int			(*action)(struct fib_rule *,
 					  struct flowi *, int,
 					  struct fib_lookup_arg *);
+	/* __GENKSYMS__ hack to preserve the abi change that happened in
+	 * cdef485217d3 ("ipv6: fix memory leak in fib6_rule_suppress")
+	 */
+#ifdef __GENKSYMS__
+	bool			(*suppress)(struct fib_rule *,
+#else
 	bool			(*suppress)(struct fib_rule *, int,
+#endif
 					    struct fib_lookup_arg *);
 	int			(*match)(struct fib_rule *,
 					 struct flowi *, int);
diff --git a/include/net/genetlink.h b/include/net/genetlink.h
index 2d9e67a69..02d600c 100644
--- a/include/net/genetlink.h
+++ b/include/net/genetlink.h
@@ -3,6 +3,7 @@
 #define __NET_GENERIC_NETLINK_H
 
 #include <linux/genetlink.h>
+#include <linux/android_kabi.h>
 #include <net/netlink.h>
 #include <net/net_namespace.h>
 
@@ -65,6 +66,8 @@
 	unsigned int		n_mcgrps;
 	unsigned int		mcgrp_offset;	/* private */
 	struct module		*module;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct nlattr **genl_family_attrbuf(const struct genl_family *family);
@@ -140,6 +143,8 @@
 	u8			internal_flags;
 	u8			flags;
 	u8			validate;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 int genl_register_family(struct genl_family *family);
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h
index 13792c0..9cf20a4 100644
--- a/include/net/inet_connection_sock.h
+++ b/include/net/inet_connection_sock.h
@@ -16,6 +16,7 @@
 #include <linux/timer.h>
 #include <linux/poll.h>
 #include <linux/kernel.h>
+#include <linux/android_kabi.h>
 
 #include <net/inet_sock.h>
 #include <net/request_sock.h>
@@ -58,6 +59,8 @@
 #endif
 	void	    (*addr2sockaddr)(struct sock *sk, struct sockaddr *);
 	void	    (*mtu_reduced)(struct sock *sk);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /** inet_connection_sock - INET connection oriented sock
@@ -138,6 +141,8 @@
 	u32			  icsk_probes_tstamp;
 	u32			  icsk_user_timeout;
 
+	ANDROID_KABI_RESERVE(1);
+
 	u64			  icsk_ca_priv[104 / sizeof(u64)];
 #define ICSK_CA_PRIV_SIZE      (13 * sizeof(u64))
 };
diff --git a/include/net/ip.h b/include/net/ip.h
index 52abfc0..f283656 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -30,7 +30,9 @@
 #include <net/flow.h>
 #include <net/flow_dissector.h>
 #include <net/netns/hash.h>
+#ifndef __GENKSYMS__
 #include <net/lwtunnel.h>
+#endif
 
 #define IPV4_MAX_PMTU		65535U		/* RFC 2675, Section 5.1 */
 #define IPV4_MIN_MTU		68			/* RFC 791 */
@@ -347,6 +349,13 @@
 	return test_bit(port, net->ipv4.sysctl_local_reserved_ports);
 }
 
+static inline bool inet_is_local_unbindable_port(struct net *net, unsigned short port)
+{
+	if (!net->ipv4.sysctl_local_unbindable_ports)
+		return false;
+	return test_bit(port, net->ipv4.sysctl_local_unbindable_ports);
+}
+
 static inline bool sysctl_dev_name_is_allowed(const char *name)
 {
 	return strcmp(name, "default") != 0  && strcmp(name, "all") != 0;
@@ -363,6 +372,11 @@
 	return 0;
 }
 
+static inline bool inet_is_local_unbindable_port(struct net *net, unsigned short port)
+{
+	return false;
+}
+
 static inline int inet_prot_sock(struct net *net)
 {
 	return PROT_SOCK;
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h
index 05ecaef..326604d 100644
--- a/include/net/ip6_fib.h
+++ b/include/net/ip6_fib.h
@@ -13,6 +13,7 @@
 #include <linux/rtnetlink.h>
 #include <linux/spinlock.h>
 #include <linux/notifier.h>
+#include <linux/android_kabi.h>
 #include <net/dst.h>
 #include <net/flow.h>
 #include <net/ip_fib.h>
@@ -65,6 +66,8 @@
 	struct nl_info	fc_nlinfo;
 	struct nlattr	*fc_encap;
 	u16		fc_encap_type;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct fib6_node {
@@ -81,6 +84,8 @@
 	int			fn_sernum;
 	struct fib6_info __rcu	*rr_ptr;
 	struct rcu_head		rcu;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct fib6_gc_args {
@@ -171,6 +176,9 @@
 
 	struct rcu_head			rcu;
 	struct nexthop			*nh;
+
+	ANDROID_KABI_RESERVE(1);
+
 	struct fib6_nh			fib6_nh[0];
 };
 
@@ -190,6 +198,8 @@
 
 	/* more non-fragment space at head required */
 	unsigned short			rt6i_nfheader_len;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct fib6_result {
@@ -451,7 +461,6 @@
 		 struct fib6_config *cfg, gfp_t gfp_flags,
 		 struct netlink_ext_ack *extack);
 void fib6_nh_release(struct fib6_nh *fib6_nh);
-void fib6_nh_release_dsts(struct fib6_nh *fib6_nh);
 
 int call_fib6_entry_notifiers(struct net *net,
 			      enum fib_event_type event_type,
diff --git a/include/net/ip_tunnels.h b/include/net/ip_tunnels.h
index 56deb25..8545fa2 100644
--- a/include/net/ip_tunnels.h
+++ b/include/net/ip_tunnels.h
@@ -289,6 +289,9 @@
 		      struct ip_tunnel_parm *p, __u32 fwmark);
 void ip_tunnel_setup(struct net_device *dev, unsigned int net_id);
 
+extern const struct header_ops ip_tunnel_header_ops;
+__be16 ip_tunnel_parse_protocol(const struct sk_buff *skb);
+
 struct ip_tunnel_encap_ops {
 	size_t (*encap_hlen)(struct ip_tunnel_encap *e);
 	int (*build_header)(struct sk_buff *skb, struct ip_tunnel_encap *e,
diff --git a/include/net/ipv6_stubs.h b/include/net/ipv6_stubs.h
index af9e127..3e7d2c0 100644
--- a/include/net/ipv6_stubs.h
+++ b/include/net/ipv6_stubs.h
@@ -47,7 +47,6 @@
 			    struct fib6_config *cfg, gfp_t gfp_flags,
 			    struct netlink_ext_ack *extack);
 	void (*fib6_nh_release)(struct fib6_nh *fib6_nh);
-	void (*fib6_nh_release_dsts)(struct fib6_nh *fib6_nh);
 	void (*fib6_update_sernum)(struct net *net, struct fib6_info *rt);
 	int (*ip6_del_rt)(struct net *net, struct fib6_info *rt);
 	void (*fib6_rt_update)(struct net *net, struct fib6_info *rt,
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index d9ba9a7..0356b21 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -18,6 +18,7 @@
 #include <linux/if_ether.h>
 #include <linux/skbuff.h>
 #include <linux/ieee80211.h>
+#include <linux/android_kabi.h>
 #include <net/cfg80211.h>
 #include <net/codel.h>
 #include <net/ieee80211_radiotap.h>
@@ -667,6 +668,8 @@
 	u8 profile_periodicity;
 	struct ieee80211_he_operation he_operation;
 	struct ieee80211_he_obss_pd he_obss_pd;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1053,6 +1056,9 @@
 			void *rate_driver_data[
 				IEEE80211_TX_INFO_RATE_DRIVER_DATA_SIZE / sizeof(void *)];
 		};
+
+		ANDROID_KABI_RESERVE(1);
+
 		void *driver_data[
 			IEEE80211_TX_INFO_DRIVER_DATA_SIZE / sizeof(void *)];
 	};
@@ -1513,6 +1519,8 @@
 	struct cfg80211_chan_def chandef;
 	bool radar_enabled;
 	enum ieee80211_smps_mode smps_mode;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -1631,6 +1639,8 @@
 
 	bool txqs_stopped[IEEE80211_NUM_ACS];
 
+	ANDROID_KABI_RESERVE(1);
+
 	/* must be last */
 	u8 drv_priv[0] __aligned(sizeof(void *));
 };
@@ -2013,6 +2023,8 @@
 
 	struct ieee80211_txq *txq[IEEE80211_NUM_TIDS + 1];
 
+	ANDROID_KABI_RESERVE(1);
+
 	/* must be last */
 	u8 drv_priv[0] __aligned(sizeof(void *));
 };
@@ -2503,6 +2515,8 @@
 	u8 tx_sk_pacing_shift;
 	u8 weight_multiplier;
 	u32 max_mtu;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline bool _ieee80211_hw_check(struct ieee80211_hw *hw,
@@ -4053,6 +4067,11 @@
 			  struct cfg80211_pmsr_request *request);
 	void (*abort_pmsr)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 			   struct cfg80211_pmsr_request *request);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /**
@@ -5962,6 +5981,11 @@
 				struct dentry *dir);
 
 	u32 (*get_expected_throughput)(void *priv_sta);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 static inline int rate_supported(struct ieee80211_sta *sta,
diff --git a/include/net/ndisc.h b/include/net/ndisc.h
index b5ebeb3..6cb3e6c 100644
--- a/include/net/ndisc.h
+++ b/include/net/ndisc.h
@@ -41,6 +41,7 @@
 	ND_OPT_DNSSL = 31,		/* RFC6106 */
 	ND_OPT_6CO = 34,		/* RFC6775 */
 	ND_OPT_CAPTIVE_PORTAL = 37,	/* RFC7710 */
+	ND_OPT_PREF64 = 38,		/* RFC8781 */
 	__ND_OPT_MAX
 };
 
diff --git a/include/net/neighbour.h b/include/net/neighbour.h
index b6494e8..163e1cb 100644
--- a/include/net/neighbour.h
+++ b/include/net/neighbour.h
@@ -28,6 +28,7 @@
 #include <linux/err.h>
 #include <linux/sysctl.h>
 #include <linux/workqueue.h>
+#include <linux/android_kabi.h>
 #include <net/rtnetlink.h>
 
 /*
@@ -83,6 +84,8 @@
 	int	reachable_time;
 	int	data[NEIGH_VAR_DATA_MAX];
 	DECLARE_BITMAP(data_state, NEIGH_VAR_DATA_MAX);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline void neigh_var_set(struct neigh_parms *p, int index, int val)
@@ -157,6 +160,9 @@
 	struct list_head	gc_list;
 	struct rcu_head		rcu;
 	struct net_device	*dev;
+
+	ANDROID_KABI_RESERVE(1);
+
 	u8			primary_key[0];
 } __randomize_layout;
 
@@ -226,6 +232,8 @@
 	struct neigh_statistics	__percpu *stats;
 	struct neigh_hash_table __rcu *nht;
 	struct pneigh_entry	**phash_buckets;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 enum {
diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h
index 90690e3..03bdc1b 100644
--- a/include/net/netfilter/nf_conntrack.h
+++ b/include/net/netfilter/nf_conntrack.h
@@ -15,6 +15,8 @@
 
 #include <linux/bitops.h>
 #include <linux/compiler.h>
+#include <linux/android_vendor.h>
+#include <linux/android_kabi.h>
 
 #include <linux/netfilter/nf_conntrack_common.h>
 #include <linux/netfilter/nf_conntrack_tcp.h>
@@ -105,6 +107,11 @@
 
 	/* Storage reserved for other modules, must be the last member */
 	union nf_conntrack_proto proto;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+
+	ANDROID_OEM_DATA(1);
 };
 
 static inline struct nf_conn *
diff --git a/include/net/netns/can.h b/include/net/netns/can.h
index b6ab7d1..951ca6b 100644
--- a/include/net/netns/can.h
+++ b/include/net/netns/can.h
@@ -7,6 +7,7 @@
 #define __NETNS_CAN_H__
 
 #include <linux/spinlock.h>
+#include <linux/android_kabi.h>
 
 struct can_dev_rcv_lists;
 struct can_pkg_stats;
@@ -36,6 +37,8 @@
 
 	/* CAN GW per-net gateway jobs */
 	struct hlist_head cgw_list;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #endif /* __NETNS_CAN_H__ */
diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h
index da17154..1844af8 100644
--- a/include/net/netns/ipv4.h
+++ b/include/net/netns/ipv4.h
@@ -10,6 +10,7 @@
 #include <net/inet_frag.h>
 #include <linux/rcupdate.h>
 #include <linux/siphash.h>
+#include <linux/android_kabi.h>
 
 struct tcpm_hash_bucket;
 struct ctl_table_header;
@@ -197,6 +198,7 @@
 
 #ifdef CONFIG_SYSCTL
 	unsigned long *sysctl_local_reserved_ports;
+	unsigned long *sysctl_local_unbindable_ports;
 	int sysctl_ip_prot_sock;
 #endif
 
@@ -221,5 +223,7 @@
 
 	atomic_t	rt_genid;
 	siphash_key_t	ip_id_key;
+
+	ANDROID_KABI_RESERVE(1);
 };
 #endif
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
index 022a0fd..82204b4 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -7,6 +7,7 @@
 
 #ifndef __NETNS_IPV6_H__
 #define __NETNS_IPV6_H__
+#include <linux/android_kabi.h>
 #include <net/dst_ops.h>
 #include <uapi/linux/icmpv6.h>
 
@@ -112,6 +113,8 @@
 		spinlock_t	lock;
 		u32		seq;
 	} ip6addrlbl_table;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
diff --git a/include/net/netns/netfilter.h b/include/net/netns/netfilter.h
index ca04334..fa26637 100644
--- a/include/net/netns/netfilter.h
+++ b/include/net/netns/netfilter.h
@@ -3,6 +3,7 @@
 #define __NETNS_NETFILTER_H
 
 #include <linux/netfilter_defs.h>
+#include <linux/android_kabi.h>
 
 struct proc_dir_entry;
 struct nf_logger;
@@ -34,5 +35,7 @@
 #if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
 	bool			defrag_ipv6;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
 };
 #endif
diff --git a/include/net/netns/nftables.h b/include/net/netns/nftables.h
index a1a8d45..dd21584 100644
--- a/include/net/netns/nftables.h
+++ b/include/net/netns/nftables.h
@@ -3,6 +3,7 @@
 #define _NETNS_NFTABLES_H_
 
 #include <linux/list.h>
+#include <linux/android_kabi.h>
 
 struct netns_nftables {
 	struct list_head	tables;
@@ -12,6 +13,8 @@
 	unsigned int		base_seq;
 	u8			gencursor;
 	u8			validate_state;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #endif
diff --git a/include/net/netns/xfrm.h b/include/net/netns/xfrm.h
index b59d73d..93d74c68 100644
--- a/include/net/netns/xfrm.h
+++ b/include/net/netns/xfrm.h
@@ -7,6 +7,7 @@
 #include <linux/workqueue.h>
 #include <linux/rhashtable-types.h>
 #include <linux/xfrm.h>
+#include <linux/android_kabi.h>
 #include <net/dst_ops.h>
 
 struct ctl_table_header;
@@ -77,6 +78,8 @@
 
 	spinlock_t xfrm_policy_lock;
 	struct mutex xfrm_cfg_mutex;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #endif
diff --git a/include/net/page_pool.h b/include/net/page_pool.h
index cf086e1..148e34a 100644
--- a/include/net/page_pool.h
+++ b/include/net/page_pool.h
@@ -33,6 +33,7 @@
 #include <linux/mm.h> /* Needed by ptr_ring */
 #include <linux/ptr_ring.h>
 #include <linux/dma-direction.h>
+#include <linux/android_kabi.h>
 
 #define PP_FLAG_DMA_MAP 1 /* Should page_pool do the DMA map/unmap */
 #define PP_FLAG_ALL	PP_FLAG_DMA_MAP
@@ -112,6 +113,8 @@
 	 * refcnt serves purpose is to simplify drivers error handling.
 	 */
 	refcount_t user_cnt;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct page *page_pool_alloc_pages(struct page_pool *pool, gfp_t gfp);
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
index 939fda8..27aefcb 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
@@ -16,6 +16,7 @@
 #include <linux/rwsem.h>
 #include <linux/atomic.h>
 #include <linux/hashtable.h>
+#include <linux/android_kabi.h>
 #include <net/gen_stats.h>
 #include <net/rtnetlink.h>
 #include <net/flow_offload.h>
@@ -113,6 +114,8 @@
 	/* for NOLOCK qdisc, true if there are no enqueued skbs */
 	bool			empty;
 	struct rcu_head		rcu;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 static inline void qdisc_refcount_inc(struct Qdisc *qdisc)
@@ -268,6 +271,8 @@
 					struct sk_buff *skb, struct tcmsg*);
 	int			(*dump_stats)(struct Qdisc *, unsigned long,
 					struct gnet_dump *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* Qdisc_class_ops flag values */
@@ -299,8 +304,6 @@
 					  struct netlink_ext_ack *extack);
 	void			(*attach)(struct Qdisc *sch);
 	int			(*change_tx_queue_len)(struct Qdisc *, unsigned int);
-	void			(*change_real_num_tx)(struct Qdisc *sch,
-						      unsigned int new_real_tx);
 
 	int			(*dump)(struct Qdisc *, struct sk_buff *);
 	int			(*dump_stats)(struct Qdisc *, struct gnet_dump *);
@@ -313,6 +316,8 @@
 	u32			(*egress_block_get)(struct Qdisc *sch);
 
 	struct module		*owner;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 
@@ -677,8 +682,6 @@
 void qdisc_class_hash_destroy(struct Qdisc_class_hash *);
 
 int dev_qdisc_change_tx_queue_len(struct net_device *dev);
-void dev_qdisc_change_real_num_tx(struct net_device *dev,
-				  unsigned int new_real_tx);
 void dev_init_scheduler(struct net_device *dev);
 void dev_shutdown(struct net_device *dev);
 void dev_activate(struct net_device *dev);
diff --git a/include/net/sock.h b/include/net/sock.h
index 079b5f6..16d752c 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -68,6 +68,8 @@
 #include <linux/net_tstamp.h>
 #include <net/smc.h>
 #include <net/l3mdev.h>
+#include <linux/android_kabi.h>
+#include <linux/android_vendor.h>
 
 /*
  * This structure really needs to be cleaned up.
@@ -470,7 +472,11 @@
 	u32			sk_ack_backlog;
 	u32			sk_max_ack_backlog;
 	kuid_t			sk_uid;
+#if IS_ENABLED(CONFIG_DEBUG_SPINLOCK) || IS_ENABLED(CONFIG_DEBUG_LOCK_ALLOC)
 	spinlock_t		sk_peer_lock;
+#else
+	/* sk_peer_lock is in the ANDROID_KABI_RESERVE(1) field below */
+#endif
 	struct pid		*sk_peer_pid;
 	const struct cred	*sk_peer_cred;
 
@@ -513,6 +519,21 @@
 	struct bpf_sk_storage __rcu	*sk_bpf_storage;
 #endif
 	struct rcu_head		sk_rcu;
+
+#if IS_ENABLED(CONFIG_DEBUG_SPINLOCK) || IS_ENABLED(CONFIG_DEBUG_LOCK_ALLOC)
+	ANDROID_KABI_RESERVE(1);
+#else
+	ANDROID_KABI_USE(1, spinlock_t sk_peer_lock);
+#endif
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+	ANDROID_KABI_RESERVE(5);
+	ANDROID_KABI_RESERVE(6);
+	ANDROID_KABI_RESERVE(7);
+	ANDROID_KABI_RESERVE(8);
+
+	ANDROID_OEM_DATA(1);
 };
 
 enum sk_pacing {
diff --git a/include/net/tls.h b/include/net/tls.h
index 7f220e0..2af2c66 100644
--- a/include/net/tls.h
+++ b/include/net/tls.h
@@ -43,6 +43,7 @@
 #include <linux/mutex.h>
 #include <linux/netdevice.h>
 #include <linux/rcupdate.h>
+#include <linux/android_kabi.h>
 
 #include <net/tcp.h>
 #include <net/strparser.h>
@@ -104,6 +105,8 @@
 	void (*unhash)(struct tls_device *device, struct sock *sk);
 	void (*release)(struct kref *kref);
 	struct kref kref;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 enum {
@@ -137,6 +140,9 @@
 	char aad_space[TLS_AAD_SPACE_SIZE];
 	u8 iv_data[MAX_IV_SIZE];
 	struct aead_request aead_req;
+
+	ANDROID_KABI_RESERVE(1);
+
 	u8 aead_req_ctx[];
 };
 
@@ -165,6 +171,8 @@
 #define BIT_TX_SCHEDULED	0
 #define BIT_TX_CLOSING		1
 	unsigned long tx_bitmask;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct tls_sw_context_rx {
@@ -182,6 +190,8 @@
 	/* protect crypto_wait with decrypt_pending*/
 	spinlock_t decrypt_compl_lock;
 	bool async_notify;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct tls_record_info {
@@ -314,6 +324,12 @@
 	int (*tls_dev_resync)(struct net_device *netdev,
 			      struct sock *sk, u32 seq, u8 *rcd_sn,
 			      enum tls_offload_ctx_dir direction);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 };
 
 enum tls_offload_sync_type {
diff --git a/include/net/udp.h b/include/net/udp.h
index d9d39cc..fed2ecd 100644
--- a/include/net/udp.h
+++ b/include/net/udp.h
@@ -167,11 +167,11 @@
 				     __be16 dport);
 
 struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
-				struct udphdr *uh, udp_lookup_t lookup);
+				struct udphdr *uh, struct sock *sk);
 int udp_gro_complete(struct sk_buff *skb, int nhoff, udp_lookup_t lookup);
 
 struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
-				  netdev_features_t features);
+				  netdev_features_t features, bool is_ipv6);
 
 static inline struct udphdr *udp_gro_udphdr(struct sk_buff *skb)
 {
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/net/vsock_addr.h b/include/net/vsock_addr.h
index 57d2db5..cf8cc14 100644
--- a/include/net/vsock_addr.h
+++ b/include/net/vsock_addr.h
@@ -8,7 +8,7 @@
 #ifndef _VSOCK_ADDR_H_
 #define _VSOCK_ADDR_H_
 
-#include <linux/vm_sockets.h>
+#include <uapi/linux/vm_sockets.h>
 
 void vsock_addr_init(struct sockaddr_vm *addr, u32 cid, u32 port);
 int vsock_addr_validate(const struct sockaddr_vm *addr);
diff --git a/include/net/xfrm.h b/include/net/xfrm.h
index 8ce6385..46e0e38 100644
--- a/include/net/xfrm.h
+++ b/include/net/xfrm.h
@@ -1996,4 +1996,38 @@
 
 	return 0;
 }
+
+extern const int xfrm_msg_min[XFRM_NR_MSGTYPES];
+extern const struct nla_policy xfrma_policy[XFRMA_MAX+1];
+
+struct xfrm_translator {
+	/* Allocate frag_list and put compat translation there */
+	int (*alloc_compat)(struct sk_buff *skb, const struct nlmsghdr *src);
+
+	/* Allocate nlmsg with 64-bit translaton of received 32-bit message */
+	struct nlmsghdr *(*rcv_msg_compat)(const struct nlmsghdr *nlh,
+			int maxtype, const struct nla_policy *policy,
+			struct netlink_ext_ack *extack);
+
+	/* Translate 32-bit user_policy from sockptr */
+	int (*xlate_user_policy_sockptr)(u8 **pdata32, int optlen);
+
+	struct module *owner;
+};
+
+#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
+extern int xfrm_register_translator(struct xfrm_translator *xtr);
+extern int xfrm_unregister_translator(struct xfrm_translator *xtr);
+extern struct xfrm_translator *xfrm_get_translator(void);
+extern void xfrm_put_translator(struct xfrm_translator *xtr);
+#else
+static inline struct xfrm_translator *xfrm_get_translator(void)
+{
+	return NULL;
+}
+static inline void xfrm_put_translator(struct xfrm_translator *xtr)
+{
+}
+#endif
+
 #endif	/* _NET_XFRM_H */
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 30d5052..83a66c9 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -95,7 +95,8 @@
 __printf(2, 3) __cold
 void ibdev_info(const struct ib_device *ibdev, const char *format, ...);
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 #define ibdev_dbg(__dev, format, args...)                       \
 	dynamic_ibdev_dbg(__dev, format, ##args)
 #else
@@ -128,7 +129,8 @@
 #define ibdev_info_ratelimited(ibdev, fmt, ...) \
 	ibdev_level_ratelimited(ibdev_info, ibdev, fmt, ##__VA_ARGS__)
 
-#if defined(CONFIG_DYNAMIC_DEBUG)
+#if defined(CONFIG_DYNAMIC_DEBUG) || \
+	(defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE))
 /* descriptor check is first to prevent flooding with "callbacks suppressed" */
 #define ibdev_dbg_ratelimited(ibdev, fmt, ...)                          \
 do {                                                                    \
diff --git a/include/scsi/scsi_cmnd.h b/include/scsi/scsi_cmnd.h
index 91bd749..e998148 100644
--- a/include/scsi/scsi_cmnd.h
+++ b/include/scsi/scsi_cmnd.h
@@ -11,6 +11,7 @@
 #include <linux/scatterlist.h>
 #include <scsi/scsi_device.h>
 #include <scsi/scsi_request.h>
+#include <linux/android_kabi.h>
 
 struct Scsi_Host;
 struct scsi_driver;
@@ -141,6 +142,11 @@
 	unsigned long state;	/* Command completion state */
 
 	unsigned char tag;	/* SCSI-II queued command tag */
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
diff --git a/include/scsi/scsi_device.h b/include/scsi/scsi_device.h
index 202f4d6..db6efca 100644
--- a/include/scsi/scsi_device.h
+++ b/include/scsi/scsi_device.h
@@ -8,6 +8,7 @@
 #include <linux/blkdev.h>
 #include <scsi/scsi.h>
 #include <linux/atomic.h>
+#include <linux/android_kabi.h>
 
 struct device;
 struct request_queue;
@@ -170,6 +171,7 @@
 				     * because we did a bus reset. */
 	unsigned use_10_for_rw:1; /* first try 10-byte read / write */
 	unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
+	unsigned set_dbd_for_ms:1; /* Set "DBD" field in mode sense */
 	unsigned no_report_opcodes:1;	/* no REPORT SUPPORTED OPERATION CODES */
 	unsigned no_write_same:1;	/* no WRITE SAME command */
 	unsigned use_16_for_rw:1; /* Use read/write(16) over read/write(10) */
@@ -199,7 +201,8 @@
 	unsigned broken_fua:1;		/* Don't set FUA bit */
 	unsigned lun_in_cdb:1;		/* Store LUN bits in CDB[1] */
 	unsigned unmap_limit_for_ws:1;	/* Use the UNMAP limit for WRITE SAME */
-
+	unsigned rpm_autosuspend:1;	/* Enable runtime autosuspend at device
+					 * creation time */
 	atomic_t disk_events_disable_depth; /* disable depth for disk events */
 
 	DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
@@ -227,6 +230,12 @@
 	struct mutex		state_mutex;
 	enum scsi_device_state sdev_state;
 	struct task_struct	*quiesced_by;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
+
 	unsigned long		sdev_data[0];
 } __attribute__((aligned(sizeof(unsigned long))));
 
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index 31e0d6c..90ff12e 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -10,6 +10,7 @@
 #include <linux/seq_file.h>
 #include <linux/blk-mq.h>
 #include <scsi/scsi.h>
+#include <linux/android_kabi.h>
 
 struct block_device;
 struct completion;
@@ -486,6 +487,14 @@
 	 */
 	unsigned int cmd_size;
 	struct scsi_host_cmd_pool *cmd_pool;
+
+	/* Delay for runtime autosuspend */
+	int rpm_autosuspend_delay;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 /*
@@ -691,6 +700,8 @@
 	 */
 	struct device *dma_dev;
 
+	ANDROID_KABI_RESERVE(1);
+
 	/*
 	 * We should ensure that this is aligned, both for better performance
 	 * and also because some compilers (m68k) don't automatically force
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
index 006f0192..14897ae 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -12,6 +12,7 @@
 
 #include <linux/types.h>
 #include <linux/sched.h>
+#include <linux/android_kabi.h>
 #include <sound/core.h>
 #include <sound/compress_offload.h>
 #include <sound/asound.h>
@@ -47,6 +48,8 @@
 	u64 total_bytes_transferred;
 	wait_queue_head_t sleep;
 	void *private_data;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -73,6 +76,8 @@
 	bool next_track;
 	bool partial_drain;
 	void *private_data;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -121,6 +126,8 @@
 			struct snd_compr_caps *caps);
 	int (*get_codec_caps) (struct snd_compr_stream *stream,
 			struct snd_compr_codec_caps *codec);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /**
@@ -149,6 +156,7 @@
 	struct snd_info_entry *proc_root;
 	struct snd_info_entry *proc_info_entry;
 #endif
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* compress device register APIs */
diff --git a/include/sound/core.h b/include/sound/core.h
index ee238f1..b3cc03a 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -14,6 +14,7 @@
 #include <linux/pm.h>			/* pm_message_t */
 #include <linux/stringify.h>
 #include <linux/printk.h>
+#include <linux/android_kabi.h>
 
 /* number of supported soundcards */
 #ifdef CONFIG_SND_DYNAMIC_MINORS
@@ -61,6 +62,8 @@
 	int (*dev_free)(struct snd_device *dev);
 	int (*dev_register)(struct snd_device *dev);
 	int (*dev_disconnect)(struct snd_device *dev);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_device {
@@ -70,6 +73,8 @@
 	enum snd_device_type type;	/* device type */
 	void *device_data;		/* device structure */
 	struct snd_device_ops *ops;	/* operations */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #define snd_device(n) list_entry(n, struct snd_device, list)
@@ -128,6 +133,9 @@
 	struct snd_mixer_oss *mixer_oss;
 	int mixer_oss_change_count;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
 };
 
 #define dev_to_snd_card(p)	container_of(p, struct snd_card, card_dev)
@@ -163,6 +171,8 @@
 	void *private_data;		/* private data for f_ops->open */
 	struct device *dev;		/* device for sysfs */
 	struct snd_card *card_ptr;	/* assigned card instance */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* return a device pointer linked to each sound device as a parent */
diff --git a/include/sound/hwdep.h b/include/sound/hwdep.h
index 8d6cdb2..d99a530 100644
--- a/include/sound/hwdep.h
+++ b/include/sound/hwdep.h
@@ -9,6 +9,7 @@
 
 #include <sound/asound.h>
 #include <linux/poll.h>
+#include <linux/android_kabi.h>
 
 struct snd_hwdep;
 
@@ -34,6 +35,8 @@
 			  struct snd_hwdep_dsp_status *status);
 	int (*dsp_load)(struct snd_hwdep *hw,
 			struct snd_hwdep_dsp_image *image);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_hwdep {
@@ -59,6 +62,8 @@
 	int used;			/* reference counter */
 	unsigned int dsp_loaded;	/* bit fields of loaded dsp indices */
 	unsigned int exclusive:1;	/* exclusive access mode */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 extern int snd_hwdep_new(struct snd_card *card, char *id, int device,
diff --git a/include/sound/info.h b/include/sound/info.h
index b01a229..02cfba9 100644
--- a/include/sound/info.h
+++ b/include/sound/info.h
@@ -9,6 +9,7 @@
 
 #include <linux/poll.h>
 #include <linux/seq_file.h>
+#include <linux/android_kabi.h>
 #include <sound/core.h>
 
 /* buffer for information */
@@ -55,6 +56,8 @@
 	int (*mmap)(struct snd_info_entry *entry, void *file_private_data,
 		    struct inode *inode, struct file *file,
 		    struct vm_area_struct *vma);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_info_entry {
@@ -74,6 +77,8 @@
 	struct mutex access;
 	struct list_head children;
 	struct list_head list;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #if defined(CONFIG_SND_OSSEMUL) && defined(CONFIG_SND_PROC_FS)
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 9eb2b5e..70400b2 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -9,6 +9,7 @@
  */
 
 #include <sound/core.h>
+#include <linux/android_kabi.h>
 
 struct input_dev;
 
@@ -69,6 +70,8 @@
 #endif /* CONFIG_SND_JACK_INPUT_DEV */
 	void *private_data;
 	void (*private_free)(struct snd_jack *);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 #ifdef CONFIG_SND_JACK
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index bbe6eb1..b8f638e0 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -475,6 +475,7 @@
 #endif /* CONFIG_SND_VERBOSE_PROCFS */
 	/* misc flags */
 	unsigned int hw_opened: 1;
+	unsigned int hw_no_buffer: 1; /* substream may not have a buffer */
 };
 
 #define SUBSTREAM_BUSY(substream) ((substream)->ref_count > 0)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 6d2662c..9733e70 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -19,6 +19,7 @@
 #include <linux/kernel.h>
 #include <linux/regmap.h>
 #include <linux/log2.h>
+#include <linux/android_kabi.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/compress_driver.h>
@@ -239,6 +240,14 @@
 	.get = xhandler_get, .put = xhandler_put, \
 	.private_value = SOC_DOUBLE_R_VALUE(reg_left, reg_right, xshift, \
 					    xmax, xinvert) }
+#define SOC_SINGLE_MULTI_EXT(xname, xreg, xshift, xmax, xinvert, xcount,\
+	xhandler_get, xhandler_put) \
+{	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
+	.info = snd_soc_info_multi_ext, \
+	.get = xhandler_get, .put = xhandler_put, \
+	.private_value = (unsigned long)&(struct soc_multi_mixer_control) \
+		{.reg = xreg, .shift = xshift, .rshift = xshift, .max = xmax, \
+		.count = xcount, .platform_max = xmax, .invert = xinvert} }
 #define SOC_SINGLE_EXT_TLV(xname, xreg, xshift, xmax, xinvert,\
 	 xhandler_get, xhandler_put, tlv_array) \
 {	.iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
@@ -362,6 +371,10 @@
 #define SOC_ENUM_SINGLE_VIRT_DECL(name, xtexts) \
 	const struct soc_enum name = SOC_ENUM_SINGLE_VIRT(ARRAY_SIZE(xtexts), xtexts)
 
+/* DAI Link Host Mode Support */
+#define SND_SOC_DAI_LINK_NO_HOST		0x1
+#define SND_SOC_DAI_LINK_OPT_HOST		0x2
+
 /*
  * Bias levels
  *
@@ -621,6 +634,8 @@
 	struct snd_ctl_elem_value *ucontrol);
 int snd_soc_put_strobe(struct snd_kcontrol *kcontrol,
 	struct snd_ctl_elem_value *ucontrol);
+int snd_soc_info_multi_ext(struct snd_kcontrol *kcontrol,
+	struct snd_ctl_elem_info *uinfo);
 
 /**
  * struct snd_soc_jack_pin - Describes a pin to update based on jack detection
@@ -713,6 +728,7 @@
 	unsigned int channels_min;	/* min channels */
 	unsigned int channels_max;	/* max channels */
 	unsigned int sig_bits;		/* number of bits of content */
+	const char *aif_name;		/* DAPM AIF widget name */
 };
 
 /* SoC audio ops */
@@ -827,6 +843,12 @@
 	/* This DAI link can route to other DAI links at runtime (Frontend)*/
 	unsigned int dynamic:1;
 
+	/*
+	 * This DAI can support no host IO (no pcm data is
+	 * copied to from host)
+	 */
+	unsigned int no_host_mode:2;
+
 	/* DPCM capture and Playback support */
 	unsigned int dpcm_capture:1;
 	unsigned int dpcm_playback:1;
@@ -846,6 +868,8 @@
 
 	struct list_head list; /* DAI link list of the soc card */
 	struct snd_soc_dobj dobj; /* For topology */
+
+	ANDROID_KABI_RESERVE(1);
 };
 #define for_each_link_codecs(link, i, codec)				\
 	for ((i) = 0;							\
@@ -1087,6 +1111,11 @@
 	u32 pop_time;
 
 	void *drvdata;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 #define for_each_card_prelinks(card, i, link)				\
 	for ((i) = 0;							\
@@ -1152,6 +1181,8 @@
 	unsigned int dev_registered:1;
 	unsigned int pop_wait:1;
 	unsigned int fe_compr:1; /* for Dynamic PCM */
+
+	ANDROID_KABI_RESERVE(1);
 };
 #define for_each_rtd_codec_dai(rtd, i, dai)\
 	for ((i) = 0;						       \
@@ -1170,6 +1201,8 @@
 	unsigned int invert:1;
 	unsigned int autodisable:1;
 	struct snd_soc_dobj dobj;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct soc_bytes {
@@ -1195,6 +1228,11 @@
 	unsigned int regbase, regcount, nbits, invert;
 };
 
+struct soc_multi_mixer_control {
+	int min, max, platform_max, count;
+	unsigned int reg, rreg, shift, rshift, invert;
+};
+
 /* enumerated kcontrol */
 struct soc_enum {
 	int reg;
@@ -1206,6 +1244,8 @@
 	const unsigned int *values;
 	unsigned int autodisable:1;
 	struct snd_soc_dobj dobj;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /* device driver data */
diff --git a/include/sound/timer.h b/include/sound/timer.h
index 199c362..c86abea 100644
--- a/include/sound/timer.h
+++ b/include/sound/timer.h
@@ -10,6 +10,7 @@
 
 #include <sound/asound.h>
 #include <linux/interrupt.h>
+#include <linux/android_kabi.h>
 
 #define snd_timer_chip(timer) ((timer)->private_data)
 
@@ -52,6 +53,8 @@
 	int (*stop) (struct snd_timer * timer);
 	int (*set_period) (struct snd_timer * timer, unsigned long period_num, unsigned long period_den);
 	int (*precise_resolution) (struct snd_timer * timer, unsigned long *num, unsigned long *den);
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_timer {
@@ -77,6 +80,8 @@
 	struct tasklet_struct task_queue;
 	int max_instances;	/* upper limit of timer instances */
 	int num_instances;	/* current number of timer instances */
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_timer_instance {
@@ -106,6 +111,8 @@
 	struct list_head slave_list_head;
 	struct list_head slave_active_head;
 	struct snd_timer_instance *master;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 /*
diff --git a/include/trace/events/OWNERS b/include/trace/events/OWNERS
new file mode 100644
index 0000000..de3838b
--- /dev/null
+++ b/include/trace/events/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/include/trace/events/OWNERS
diff --git a/include/trace/events/android_fs.h b/include/trace/events/android_fs.h
new file mode 100644
index 0000000..7edb6bc
--- /dev/null
+++ b/include/trace/events/android_fs.h
@@ -0,0 +1,66 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM android_fs
+
+#if !defined(_TRACE_ANDROID_FS_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ANDROID_FS_H
+
+#include <linux/fs.h>
+#include <linux/tracepoint.h>
+#include <trace/events/android_fs_template.h>
+
+DEFINE_EVENT(android_fs_data_start_template, android_fs_dataread_start,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command));
+
+DEFINE_EVENT(android_fs_data_end_template, android_fs_dataread_end,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	TP_ARGS(inode, offset, bytes));
+
+DEFINE_EVENT(android_fs_data_start_template, android_fs_datawrite_start,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command));
+
+DEFINE_EVENT(android_fs_data_end_template, android_fs_datawrite_end,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	     TP_ARGS(inode, offset, bytes));
+
+#endif /* _TRACE_ANDROID_FS_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
+
+#ifndef ANDROID_FSTRACE_GET_PATHNAME
+#define ANDROID_FSTRACE_GET_PATHNAME
+
+/* Sizes an on-stack array, so careful if sizing this up ! */
+#define MAX_TRACE_PATHBUF_LEN	256
+
+static inline char *
+android_fstrace_get_pathname(char *buf, int buflen, struct inode *inode)
+{
+	char *path;
+	struct dentry *d;
+
+	/*
+	 * d_obtain_alias() will either iput() if it locates an existing
+	 * dentry or transfer the reference to the new dentry created.
+	 * So get an extra reference here.
+	 */
+	ihold(inode);
+	d = d_obtain_alias(inode);
+	if (likely(!IS_ERR(d))) {
+		path = dentry_path_raw(d, buf, buflen);
+		if (unlikely(IS_ERR(path))) {
+			strcpy(buf, "ERROR");
+			path = buf;
+		}
+		dput(d);
+	} else {
+		strcpy(buf, "ERROR");
+		path = buf;
+	}
+	return path;
+}
+#endif
diff --git a/include/trace/events/android_fs_template.h b/include/trace/events/android_fs_template.h
new file mode 100644
index 0000000..b23d17b
--- /dev/null
+++ b/include/trace/events/android_fs_template.h
@@ -0,0 +1,64 @@
+#if !defined(_TRACE_ANDROID_FS_TEMPLATE_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ANDROID_FS_TEMPLATE_H
+
+#include <linux/tracepoint.h>
+
+DECLARE_EVENT_CLASS(android_fs_data_start_template,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes,
+		 pid_t pid, char *pathname, char *command),
+	TP_ARGS(inode, offset, bytes, pid, pathname, command),
+	TP_STRUCT__entry(
+		__string(pathbuf, pathname);
+		__field(loff_t,	offset);
+		__field(int,	bytes);
+		__field(loff_t,	i_size);
+		__string(cmdline, command);
+		__field(pid_t,	pid);
+		__field(ino_t,	ino);
+	),
+	TP_fast_assign(
+		{
+			/*
+			 * Replace the spaces in filenames and cmdlines
+			 * because this screws up the tooling that parses
+			 * the traces.
+			 */
+			__assign_str(pathbuf, pathname);
+			(void)strreplace(__get_str(pathbuf), ' ', '_');
+			__entry->offset		= offset;
+			__entry->bytes		= bytes;
+			__entry->i_size		= i_size_read(inode);
+			__assign_str(cmdline, command);
+			(void)strreplace(__get_str(cmdline), ' ', '_');
+			__entry->pid		= pid;
+			__entry->ino		= inode->i_ino;
+		}
+	),
+	TP_printk("entry_name %s, offset %llu, bytes %d, cmdline %s,"
+		  " pid %d, i_size %llu, ino %lu",
+		  __get_str(pathbuf), __entry->offset, __entry->bytes,
+		  __get_str(cmdline), __entry->pid, __entry->i_size,
+		  (unsigned long) __entry->ino)
+);
+
+DECLARE_EVENT_CLASS(android_fs_data_end_template,
+	TP_PROTO(struct inode *inode, loff_t offset, int bytes),
+	TP_ARGS(inode, offset, bytes),
+	TP_STRUCT__entry(
+		__field(ino_t,	ino);
+		__field(loff_t,	offset);
+		__field(int,	bytes);
+	),
+	TP_fast_assign(
+		{
+			__entry->ino		= inode->i_ino;
+			__entry->offset		= offset;
+			__entry->bytes		= bytes;
+		}
+	),
+	TP_printk("ino %lu, offset %llu, bytes %d",
+		  (unsigned long) __entry->ino,
+		  __entry->offset, __entry->bytes)
+);
+
+#endif /* _TRACE_ANDROID_FS_TEMPLATE_H */
diff --git a/include/trace/events/avc.h b/include/trace/events/avc.h
new file mode 100644
index 0000000..b55fda2
--- /dev/null
+++ b/include/trace/events/avc.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Authors:	Thiébaud Weksteen <tweek@google.com>
+ *		Peter Enderborg <Peter.Enderborg@sony.com>
+ */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM avc
+
+#if !defined(_TRACE_SELINUX_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_SELINUX_H
+
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(selinux_audited,
+
+	TP_PROTO(struct selinux_audit_data *sad,
+		char *scontext,
+		char *tcontext,
+		const char *tclass
+	),
+
+	TP_ARGS(sad, scontext, tcontext, tclass),
+
+	TP_STRUCT__entry(
+		__field(u32, requested)
+		__field(u32, denied)
+		__field(u32, audited)
+		__field(int, result)
+		__string(scontext, scontext)
+		__string(tcontext, tcontext)
+		__string(tclass, tclass)
+	),
+
+	TP_fast_assign(
+		__entry->requested	= sad->requested;
+		__entry->denied		= sad->denied;
+		__entry->audited	= sad->audited;
+		__entry->result		= sad->result;
+		__assign_str(tcontext, tcontext);
+		__assign_str(scontext, scontext);
+		__assign_str(tclass, tclass);
+	),
+
+	TP_printk("requested=0x%x denied=0x%x audited=0x%x result=%d scontext=%s tcontext=%s tclass=%s",
+		__entry->requested, __entry->denied, __entry->audited, __entry->result,
+		__get_str(scontext), __get_str(tcontext), __get_str(tclass)
+	)
+);
+
+#endif
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/error_report.h b/include/trace/events/error_report.h
new file mode 100644
index 0000000..96f64bf2
--- /dev/null
+++ b/include/trace/events/error_report.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Declarations for error reporting tracepoints.
+ *
+ * Copyright (C) 2021, Google LLC.
+ */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM error_report
+
+#if !defined(_TRACE_ERROR_REPORT_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_ERROR_REPORT_H
+
+#include <linux/tracepoint.h>
+
+#ifndef __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
+#define __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY
+
+enum error_detector {
+	ERROR_DETECTOR_KFENCE,
+	ERROR_DETECTOR_KASAN
+};
+
+#endif /* __ERROR_REPORT_DECLARE_TRACE_ENUMS_ONCE_ONLY */
+
+#define error_detector_list	\
+	EM(ERROR_DETECTOR_KFENCE, "kfence")	\
+	EMe(ERROR_DETECTOR_KASAN, "kasan")
+/* Always end the list with an EMe. */
+
+#undef EM
+#undef EMe
+
+#define EM(a, b)	TRACE_DEFINE_ENUM(a);
+#define EMe(a, b)	TRACE_DEFINE_ENUM(a);
+
+error_detector_list
+
+#undef EM
+#undef EMe
+
+#define EM(a, b) { a, b },
+#define EMe(a, b) { a, b }
+
+#define show_error_detector_list(val) \
+	__print_symbolic(val, error_detector_list)
+
+DECLARE_EVENT_CLASS(error_report_template,
+		    TP_PROTO(enum error_detector error_detector, unsigned long id),
+		    TP_ARGS(error_detector, id),
+		    TP_STRUCT__entry(__field(enum error_detector, error_detector)
+					     __field(unsigned long, id)),
+		    TP_fast_assign(__entry->error_detector = error_detector;
+				   __entry->id = id;),
+		    TP_printk("[%s] %lx",
+			      show_error_detector_list(__entry->error_detector),
+			      __entry->id));
+
+/**
+ * error_report_end - called after printing the error report
+ * @error_detector:	short string describing the error detection tool
+ * @id:			pseudo-unique descriptor identifying the report
+ *			(e.g. the memory access address)
+ *
+ * This event occurs right after a debugging tool finishes printing the error
+ * report.
+ */
+DEFINE_EVENT(error_report_template, error_report_end,
+	     TP_PROTO(enum error_detector error_detector, unsigned long id),
+	     TP_ARGS(error_detector, id));
+
+#endif /* _TRACE_ERROR_REPORT_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index a7613ef..ffcc4ea 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -6,6 +6,7 @@
 #define _TRACE_F2FS_H
 
 #include <linux/tracepoint.h>
+#include <uapi/linux/f2fs.h>
 
 #define show_dev(dev)		MAJOR(dev), MINOR(dev)
 #define show_dev_ino(entry)	show_dev(entry->dev), (unsigned long)entry->ino
@@ -49,6 +50,8 @@
 TRACE_DEFINE_ENUM(CP_RECOVERY);
 TRACE_DEFINE_ENUM(CP_DISCARD);
 TRACE_DEFINE_ENUM(CP_TRIMMED);
+TRACE_DEFINE_ENUM(CP_PAUSE);
+TRACE_DEFINE_ENUM(CP_RESIZE);
 
 #define show_block_type(type)						\
 	__print_symbolic(type,						\
@@ -109,13 +112,15 @@
 
 #define show_alloc_mode(type)						\
 	__print_symbolic(type,						\
-		{ LFS,	"LFS-mode" },					\
-		{ SSR,	"SSR-mode" })
+		{ LFS,		"LFS-mode" },				\
+		{ SSR,		"SSR-mode" },				\
+		{ AT_SSR,	"AT_SSR-mode" })
 
 #define show_victim_policy(type)					\
 	__print_symbolic(type,						\
 		{ GC_GREEDY,	"Greedy" },				\
-		{ GC_CB,	"Cost-Benefit" })
+		{ GC_CB,	"Cost-Benefit" },			\
+		{ GC_AT,	"Age-threshold" })
 
 #define show_cpreason(type)						\
 	__print_flags(type, "|",					\
@@ -124,13 +129,15 @@
 		{ CP_SYNC,	"Sync" },				\
 		{ CP_RECOVERY,	"Recovery" },				\
 		{ CP_DISCARD,	"Discard" },				\
-		{ CP_UMOUNT,	"Umount" },				\
-		{ CP_TRIMMED,	"Trimmed" })
+		{ CP_PAUSE,	"Pause" },				\
+		{ CP_TRIMMED,	"Trimmed" },				\
+		{ CP_RESIZE,	"Resize" })
 
 #define show_fsync_cpreason(type)					\
 	__print_symbolic(type,						\
 		{ CP_NO_NEEDED,		"no needed" },			\
 		{ CP_NON_REGULAR,	"non regular" },		\
+		{ CP_COMPRESSED,	"compressed" },			\
 		{ CP_HARDLINK,		"hardlink" },			\
 		{ CP_SB_NEED_CP,	"sb needs cp" },		\
 		{ CP_WRONG_PINO,	"wrong pino" },			\
@@ -148,6 +155,13 @@
 		{ F2FS_GOING_DOWN_METAFLUSH,	"meta flush" },		\
 		{ F2FS_GOING_DOWN_NEED_FSCK,	"need fsck" })
 
+#define show_compress_algorithm(type)					\
+	__print_symbolic(type,						\
+		{ COMPRESS_LZO,		"LZO" },			\
+		{ COMPRESS_LZ4,		"LZ4" },			\
+		{ COMPRESS_ZSTD,	"ZSTD" },			\
+		{ COMPRESS_LZORLE,	"LZO-RLE" })
+
 struct f2fs_sb_info;
 struct f2fs_io_info;
 struct extent_info;
@@ -1710,6 +1724,239 @@
 		__entry->ret)
 );
 
+DECLARE_EVENT_CLASS(f2fs_zip_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(ino_t,	ino)
+		__field(pgoff_t, idx)
+		__field(unsigned int, size)
+		__field(unsigned int, algtype)
+	),
+
+	TP_fast_assign(
+		__entry->dev = inode->i_sb->s_dev;
+		__entry->ino = inode->i_ino;
+		__entry->idx = cluster_idx;
+		__entry->size = cluster_size;
+		__entry->algtype = algtype;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
+		"cluster_size = %u, algorithm = %s",
+		show_dev_ino(__entry),
+		__entry->idx,
+		__entry->size,
+		show_compress_algorithm(__entry->algtype))
+);
+
+DECLARE_EVENT_CLASS(f2fs_zip_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(ino_t,	ino)
+		__field(pgoff_t, idx)
+		__field(unsigned int, size)
+		__field(unsigned int, ret)
+	),
+
+	TP_fast_assign(
+		__entry->dev = inode->i_sb->s_dev;
+		__entry->ino = inode->i_ino;
+		__entry->idx = cluster_idx;
+		__entry->size = compressed_size;
+		__entry->ret = ret;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, cluster_idx:%lu, "
+		"compressed_size = %u, ret = %d",
+		show_dev_ino(__entry),
+		__entry->idx,
+		__entry->size,
+		__entry->ret)
+);
+
+DEFINE_EVENT(f2fs_zip_start, f2fs_compress_pages_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+		unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
+);
+
+DEFINE_EVENT(f2fs_zip_start, f2fs_decompress_pages_start,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+		unsigned int cluster_size, unsigned char algtype),
+
+	TP_ARGS(inode, cluster_idx, cluster_size, algtype)
+);
+
+DEFINE_EVENT(f2fs_zip_end, f2fs_compress_pages_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret)
+);
+
+DEFINE_EVENT(f2fs_zip_end, f2fs_decompress_pages_end,
+
+	TP_PROTO(struct inode *inode, pgoff_t cluster_idx,
+			unsigned int compressed_size, int ret),
+
+	TP_ARGS(inode, cluster_idx, compressed_size, ret)
+);
+
+TRACE_EVENT(f2fs_iostat,
+
+	TP_PROTO(struct f2fs_sb_info *sbi, unsigned long long *iostat),
+
+	TP_ARGS(sbi, iostat),
+
+	TP_STRUCT__entry(
+		__field(dev_t,	dev)
+		__field(unsigned long long,	app_dio)
+		__field(unsigned long long,	app_bio)
+		__field(unsigned long long,	app_wio)
+		__field(unsigned long long,	app_mio)
+		__field(unsigned long long,	fs_dio)
+		__field(unsigned long long,	fs_nio)
+		__field(unsigned long long,	fs_mio)
+		__field(unsigned long long,	fs_gc_dio)
+		__field(unsigned long long,	fs_gc_nio)
+		__field(unsigned long long,	fs_cp_dio)
+		__field(unsigned long long,	fs_cp_nio)
+		__field(unsigned long long,	fs_cp_mio)
+		__field(unsigned long long,	app_drio)
+		__field(unsigned long long,	app_brio)
+		__field(unsigned long long,	app_rio)
+		__field(unsigned long long,	app_mrio)
+		__field(unsigned long long,	fs_drio)
+		__field(unsigned long long,	fs_gdrio)
+		__field(unsigned long long,	fs_cdrio)
+		__field(unsigned long long,	fs_nrio)
+		__field(unsigned long long,	fs_mrio)
+		__field(unsigned long long,	fs_discard)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= sbi->sb->s_dev;
+		__entry->app_dio	= iostat[APP_DIRECT_IO];
+		__entry->app_bio	= iostat[APP_BUFFERED_IO];
+		__entry->app_wio	= iostat[APP_WRITE_IO];
+		__entry->app_mio	= iostat[APP_MAPPED_IO];
+		__entry->fs_dio		= iostat[FS_DATA_IO];
+		__entry->fs_nio		= iostat[FS_NODE_IO];
+		__entry->fs_mio		= iostat[FS_META_IO];
+		__entry->fs_gc_dio	= iostat[FS_GC_DATA_IO];
+		__entry->fs_gc_nio	= iostat[FS_GC_NODE_IO];
+		__entry->fs_cp_dio	= iostat[FS_CP_DATA_IO];
+		__entry->fs_cp_nio	= iostat[FS_CP_NODE_IO];
+		__entry->fs_cp_mio	= iostat[FS_CP_META_IO];
+		__entry->app_drio	= iostat[APP_DIRECT_READ_IO];
+		__entry->app_brio	= iostat[APP_BUFFERED_READ_IO];
+		__entry->app_rio	= iostat[APP_READ_IO];
+		__entry->app_mrio	= iostat[APP_MAPPED_READ_IO];
+		__entry->fs_drio	= iostat[FS_DATA_READ_IO];
+		__entry->fs_gdrio	= iostat[FS_GDATA_READ_IO];
+		__entry->fs_cdrio	= iostat[FS_CDATA_READ_IO];
+		__entry->fs_nrio	= iostat[FS_NODE_READ_IO];
+		__entry->fs_mrio	= iostat[FS_META_READ_IO];
+		__entry->fs_discard	= iostat[FS_DISCARD];
+	),
+
+	TP_printk("dev = (%d,%d), "
+		"app [write=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
+		"fs [data=%llu, node=%llu, meta=%llu, discard=%llu], "
+		"gc [data=%llu, node=%llu], "
+		"cp [data=%llu, node=%llu, meta=%llu], "
+		"app [read=%llu (direct=%llu, buffered=%llu), mapped=%llu], "
+		"fs [data=%llu, (gc_data=%llu, compr_data=%llu), "
+		"node=%llu, meta=%llu]",
+		show_dev(__entry->dev), __entry->app_wio, __entry->app_dio,
+		__entry->app_bio, __entry->app_mio, __entry->fs_dio,
+		__entry->fs_nio, __entry->fs_mio, __entry->fs_discard,
+		__entry->fs_gc_dio, __entry->fs_gc_nio, __entry->fs_cp_dio,
+		__entry->fs_cp_nio, __entry->fs_cp_mio,
+		__entry->app_rio, __entry->app_drio, __entry->app_brio,
+		__entry->app_mrio, __entry->fs_drio, __entry->fs_gdrio,
+		__entry->fs_cdrio, __entry->fs_nrio, __entry->fs_mrio)
+);
+
+TRACE_EVENT(f2fs_bmap,
+
+	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock),
+
+	TP_ARGS(inode, lblock, pblock),
+
+	TP_STRUCT__entry(
+		__field(dev_t, dev)
+		__field(ino_t, ino)
+		__field(sector_t, lblock)
+		__field(sector_t, pblock)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= inode->i_sb->s_dev;
+		__entry->ino		= inode->i_ino;
+		__entry->lblock		= lblock;
+		__entry->pblock		= pblock;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld",
+		show_dev_ino(__entry),
+		(unsigned long long)__entry->lblock,
+		(unsigned long long)__entry->pblock)
+);
+
+TRACE_EVENT(f2fs_fiemap,
+
+	TP_PROTO(struct inode *inode, sector_t lblock, sector_t pblock,
+		unsigned long long len, unsigned int flags, int ret),
+
+	TP_ARGS(inode, lblock, pblock, len, flags, ret),
+
+	TP_STRUCT__entry(
+		__field(dev_t, dev)
+		__field(ino_t, ino)
+		__field(sector_t, lblock)
+		__field(sector_t, pblock)
+		__field(unsigned long long, len)
+		__field(unsigned int, flags)
+		__field(int, ret)
+	),
+
+	TP_fast_assign(
+		__entry->dev		= inode->i_sb->s_dev;
+		__entry->ino		= inode->i_ino;
+		__entry->lblock		= lblock;
+		__entry->pblock		= pblock;
+		__entry->len		= len;
+		__entry->flags		= flags;
+		__entry->ret		= ret;
+	),
+
+	TP_printk("dev = (%d,%d), ino = %lu, lblock:%lld, pblock:%lld, "
+		"len:%llu, flags:%u, ret:%d",
+		show_dev_ino(__entry),
+		(unsigned long long)__entry->lblock,
+		(unsigned long long)__entry->pblock,
+		__entry->len,
+		__entry->flags,
+		__entry->ret)
+);
+
 #endif /* _TRACE_F2FS_H */
 
  /* This part must be outside protection */
diff --git a/include/trace/events/gpu_mem.h b/include/trace/events/gpu_mem.h
new file mode 100644
index 0000000..1897822
--- /dev/null
+++ b/include/trace/events/gpu_mem.h
@@ -0,0 +1,57 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * GPU memory trace points
+ *
+ * Copyright (C) 2020 Google, Inc.
+ */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM gpu_mem
+
+#if !defined(_TRACE_GPU_MEM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_GPU_MEM_H
+
+#include <linux/tracepoint.h>
+
+/*
+ * The gpu_memory_total event indicates that there's an update to either the
+ * global or process total gpu memory counters.
+ *
+ * This event should be emitted whenever the kernel device driver allocates,
+ * frees, imports, unimports memory in the GPU addressable space.
+ *
+ * @gpu_id: This is the gpu id.
+ *
+ * @pid: Put 0 for global total, while positive pid for process total.
+ *
+ * @size: Virtual size of the allocation in bytes.
+ *
+ */
+TRACE_EVENT(gpu_mem_total,
+
+	TP_PROTO(uint32_t gpu_id, uint32_t pid, uint64_t size),
+
+	TP_ARGS(gpu_id, pid, size),
+
+	TP_STRUCT__entry(
+		__field(uint32_t, gpu_id)
+		__field(uint32_t, pid)
+		__field(uint64_t, size)
+	),
+
+	TP_fast_assign(
+		__entry->gpu_id = gpu_id;
+		__entry->pid = pid;
+		__entry->size = size;
+	),
+
+	TP_printk("gpu_id=%u pid=%u size=%llu",
+		__entry->gpu_id,
+		__entry->pid,
+		__entry->size)
+);
+
+#endif /* _TRACE_GPU_MEM_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h
index 69e8bb8..ad7e642b 100644
--- a/include/trace/events/kmem.h
+++ b/include/trace/events/kmem.h
@@ -316,6 +316,53 @@
 		__entry->change_ownership)
 );
 
+/*
+ * 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/mmflags.h b/include/trace/events/mmflags.h
index a1675d4..f9f8a32 100644
--- a/include/trace/events/mmflags.h
+++ b/include/trace/events/mmflags.h
@@ -130,6 +130,12 @@
 #define IF_HAVE_VM_SOFTDIRTY(flag,name)
 #endif
 
+#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
+# define IF_HAVE_UFFD_MINOR(flag, name) {flag, name},
+#else
+# define IF_HAVE_UFFD_MINOR(flag, name)
+#endif
+
 #define __def_vmaflag_names						\
 	{VM_READ,			"read"		},		\
 	{VM_WRITE,			"write"		},		\
@@ -141,6 +147,7 @@
 	{VM_MAYSHARE,			"mayshare"	},		\
 	{VM_GROWSDOWN,			"growsdown"	},		\
 	{VM_UFFD_MISSING,		"uffd_missing"	},		\
+IF_HAVE_UFFD_MINOR(VM_UFFD_MINOR,	"uffd_minor"	)		\
 	{VM_PFNMAP,			"pfnmap"	},		\
 	{VM_DENYWRITE,			"denywrite"	},		\
 	{VM_UFFD_WP,			"uffd_wp"	},		\
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 420e80e..202676b 100644
--- a/include/trace/events/sched.h
+++ b/include/trace/events/sched.h
@@ -403,6 +403,30 @@
 	     TP_ARGS(tsk, delay));
 
 /*
+ * Tracepoint for recording the cause of uninterruptible sleep.
+ */
+TRACE_EVENT(sched_blocked_reason,
+
+	TP_PROTO(struct task_struct *tsk),
+
+	TP_ARGS(tsk),
+
+	TP_STRUCT__entry(
+		__field( pid_t,	pid	)
+		__field( void*, caller	)
+		__field( bool, io_wait	)
+	),
+
+	TP_fast_assign(
+		__entry->pid	= tsk->pid;
+		__entry->caller = (void *)get_wchan(tsk);
+		__entry->io_wait = tsk->in_iowait;
+	),
+
+	TP_printk("pid=%d iowait=%d caller=%pS", __entry->pid, __entry->io_wait, __entry->caller)
+);
+
+/*
  * Tracepoint for accounting runtime (time the task is executing
  * on a CPU).
  */
diff --git a/include/trace/events/ufs.h b/include/trace/events/ufs.h
index 5f30073..50654f3 100644
--- a/include/trace/events/ufs.h
+++ b/include/trace/events/ufs.h
@@ -11,6 +11,15 @@
 
 #include <linux/tracepoint.h>
 
+#define str_opcode(opcode)						\
+	__print_symbolic(opcode,					\
+		{ WRITE_16,		"WRITE_16" },			\
+		{ WRITE_10,		"WRITE_10" },			\
+		{ READ_16,		"READ_16" },			\
+		{ READ_10,		"READ_10" },			\
+		{ SYNCHRONIZE_CACHE,	"SYNC" },			\
+		{ UNMAP,		"UNMAP" })
+
 #define UFS_LINK_STATES			\
 	EM(UIC_LINK_OFF_STATE)		\
 	EM(UIC_LINK_ACTIVE_STATE)	\
@@ -215,9 +224,10 @@
 TRACE_EVENT(ufshcd_command,
 	TP_PROTO(const char *dev_name, const char *str, unsigned int tag,
 			u32 doorbell, int transfer_len, u32 intr, u64 lba,
-			u8 opcode),
+			u8 opcode, u8 group_id),
 
-	TP_ARGS(dev_name, str, tag, doorbell, transfer_len, intr, lba, opcode),
+	TP_ARGS(dev_name, str, tag, doorbell, transfer_len,
+				intr, lba, opcode, group_id),
 
 	TP_STRUCT__entry(
 		__string(dev_name, dev_name)
@@ -228,6 +238,7 @@
 		__field(u32, intr)
 		__field(u64, lba)
 		__field(u8, opcode)
+		__field(u8, group_id)
 	),
 
 	TP_fast_assign(
@@ -239,13 +250,46 @@
 		__entry->intr = intr;
 		__entry->lba = lba;
 		__entry->opcode = opcode;
+		__entry->group_id = group_id;
 	),
 
 	TP_printk(
-		"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x",
+		"%s: %s: tag: %u, DB: 0x%x, size: %d, IS: %u, LBA: %llu, opcode: 0x%x (%s), group_id: 0x%x",
 		__get_str(str), __get_str(dev_name), __entry->tag,
 		__entry->doorbell, __entry->transfer_len,
-		__entry->intr, __entry->lba, (u32)__entry->opcode
+		__entry->intr, __entry->lba, (u32)__entry->opcode,
+		str_opcode(__entry->opcode), (u32)__entry->group_id
+	)
+);
+
+TRACE_EVENT(ufshcd_uic_command,
+	TP_PROTO(const char *dev_name, const char *str, u32 cmd,
+		 u32 arg1, u32 arg2, u32 arg3),
+
+	TP_ARGS(dev_name, str, cmd, arg1, arg2, arg3),
+
+	TP_STRUCT__entry(
+		__string(dev_name, dev_name)
+		__string(str, str)
+		__field(u32, cmd)
+		__field(u32, arg1)
+		__field(u32, arg2)
+		__field(u32, arg3)
+	),
+
+	TP_fast_assign(
+		__assign_str(dev_name, dev_name);
+		__assign_str(str, str);
+		__entry->cmd = cmd;
+		__entry->arg1 = arg1;
+		__entry->arg2 = arg2;
+		__entry->arg3 = arg3;
+	),
+
+	TP_printk(
+		"%s: %s: cmd: 0x%x, arg1: 0x%x, arg2: 0x%x, arg3: 0x%x",
+		__get_str(str), __get_str(dev_name), __entry->cmd,
+		__entry->arg1, __entry->arg2, __entry->arg3
 	)
 );
 
diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h
new file mode 100644
index 0000000..4f18859
--- /dev/null
+++ b/include/trace/hooks/binder.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM binder
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_BINDER_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_BINDER_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct binder_transaction;
+struct task_struct;
+DECLARE_HOOK(android_vh_binder_transaction_init,
+	TP_PROTO(struct binder_transaction *t),
+	TP_ARGS(t));
+DECLARE_HOOK(android_vh_binder_set_priority,
+	TP_PROTO(struct binder_transaction *t, struct task_struct *task),
+	TP_ARGS(t, task));
+DECLARE_HOOK(android_vh_binder_restore_priority,
+	TP_PROTO(struct binder_transaction *t, struct task_struct *task),
+	TP_ARGS(t, task));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_BINDER_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h
new file mode 100644
index 0000000..cc44ccf
--- /dev/null
+++ b/include/trace/hooks/cgroup.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM cgroup
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_CGROUP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_CGROUP_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+struct task_struct;
+DECLARE_HOOK(android_vh_cgroup_set_task,
+	TP_PROTO(int ret, struct task_struct *task),
+	TP_ARGS(ret, task));
+#endif
+
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/debug.h b/include/trace/hooks/debug.h
new file mode 100644
index 0000000..3d309cc
--- /dev/null
+++ b/include/trace/hooks/debug.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM debug
+
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_DEBUG_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_DEBUG_H
+
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+struct pt_regs;
+DECLARE_HOOK(android_vh_ipi_stop,
+	TP_PROTO(struct pt_regs *regs),
+	TP_ARGS(regs))
+#else
+#define trace_android_vh_ipi_stop(regs)
+#define trace_android_vh_ipi_stop_rcuidle(regs)
+#endif
+
+#endif /* _TRACE_HOOK_DEBUG_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h
new file mode 100644
index 0000000..422cb01
--- /dev/null
+++ b/include/trace/hooks/dtask.h
@@ -0,0 +1,45 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM dtask
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_DTASK_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_DTASK_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct mutex;
+DECLARE_HOOK(android_vh_mutex_wait_start,
+	TP_PROTO(struct mutex *lock),
+	TP_ARGS(lock));
+DECLARE_HOOK(android_vh_mutex_wait_finish,
+	TP_PROTO(struct mutex *lock),
+	TP_ARGS(lock));
+
+struct rw_semaphore;
+DECLARE_HOOK(android_vh_rwsem_read_wait_start,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_read_wait_finish,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_wait_start,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_wait_finish,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+
+struct task_struct;
+DECLARE_HOOK(android_vh_sched_show_task,
+	TP_PROTO(struct task_struct *task),
+	TP_ARGS(task));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_DTASK_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/futex.h b/include/trace/hooks/futex.h
new file mode 100644
index 0000000..0692dd6
--- /dev/null
+++ b/include/trace/hooks/futex.h
@@ -0,0 +1,25 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM futex
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_FUTEX_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_FUTEX_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+#include <linux/plist.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_alter_futex_plist_add,
+	TP_PROTO(struct plist_node *node,
+		 struct plist_head *head,
+		 bool *already_on_hb),
+	TP_ARGS(node, head, already_on_hb));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_FUTEX_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h
new file mode 100644
index 0000000..841ded0
--- /dev/null
+++ b/include/trace/hooks/net.h
@@ -0,0 +1,35 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM net
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_NET_VH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_NET_VH_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+struct packet_type;
+struct list_head;
+struct sk_buff;
+struct nf_conn;
+struct sock;
+DECLARE_HOOK(android_vh_ptype_head,
+	TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt),
+	TP_ARGS(pt, vendor_pt));
+DECLARE_HOOK(android_vh_kfree_skb,
+	TP_PROTO(struct sk_buff *skb), TP_ARGS(skb));
+DECLARE_RESTRICTED_HOOK(android_rvh_nf_conn_alloc,
+	TP_PROTO(struct nf_conn *nf_conn), TP_ARGS(nf_conn), 1);
+DECLARE_RESTRICTED_HOOK(android_rvh_nf_conn_free,
+	TP_PROTO(struct nf_conn *nf_conn), TP_ARGS(nf_conn), 1);
+DECLARE_RESTRICTED_HOOK(android_rvh_sk_alloc,
+	TP_PROTO(struct sock *sock), TP_ARGS(sock), 1);
+DECLARE_RESTRICTED_HOOK(android_rvh_sk_free,
+	TP_PROTO(struct sock *sock), TP_ARGS(sock), 1);
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_NET_VH_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/psci.h b/include/trace/hooks/psci.h
new file mode 100644
index 0000000..7ca2c71
--- /dev/null
+++ b/include/trace/hooks/psci.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM psci
+#undef TRACE_INCLUDE_PATH
+
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_PSCI_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_PSCI_H
+
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+DECLARE_HOOK(android_vh_psci_tos_resident_on,
+	TP_PROTO(int cpu, bool *resident),
+	TP_ARGS(cpu, resident));
+
+DECLARE_HOOK(android_vh_psci_cpu_suspend,
+	TP_PROTO(u32 state, bool *deny),
+	TP_ARGS(state, deny));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_PSCI_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h
new file mode 100644
index 0000000..4ec420d
--- /dev/null
+++ b/include/trace/hooks/rwsem.h
@@ -0,0 +1,34 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM rwsem
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_RWSEM_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_RWSEM_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct rw_semaphore;
+struct rwsem_waiter;
+DECLARE_HOOK(android_vh_rwsem_init,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_wake,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_rwsem_write_finished,
+	TP_PROTO(struct rw_semaphore *sem),
+	TP_ARGS(sem));
+DECLARE_HOOK(android_vh_alter_rwsem_list_add,
+	TP_PROTO(struct rwsem_waiter *waiter,
+		 struct rw_semaphore *sem,
+		 bool *already_on_list),
+	TP_ARGS(waiter, sem, already_on_list));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_RWSEM_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h
new file mode 100644
index 0000000..fa3636d
--- /dev/null
+++ b/include/trace/hooks/sched.h
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sched
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_SCHED_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_SCHED_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct task_struct;
+DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair,
+	TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
+	TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_rt,
+	TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
+	TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_select_fallback_rq,
+	TP_PROTO(int cpu, struct task_struct *p, int *new_cpu),
+	TP_ARGS(cpu, p, new_cpu), 1);
+
+struct rq;
+DECLARE_HOOK(android_vh_scheduler_tick,
+	TP_PROTO(struct rq *rq),
+	TP_ARGS(rq));
+
+DECLARE_RESTRICTED_HOOK(android_rvh_enqueue_task,
+	TP_PROTO(struct rq *rq, struct task_struct *p),
+	TP_ARGS(rq, p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_dequeue_task,
+	TP_PROTO(struct rq *rq, struct task_struct *p),
+	TP_ARGS(rq, p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_can_migrate_task,
+	TP_PROTO(struct task_struct *p, int dst_cpu, int *can_migrate),
+	TP_ARGS(p, dst_cpu, can_migrate), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_find_lowest_rq,
+	TP_PROTO(struct task_struct *p, struct cpumask *local_cpu_mask,
+			int *lowest_cpu),
+	TP_ARGS(p, local_cpu_mask, lowest_cpu), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_prepare_prio_fork,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_finish_prio_fork,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_prepare_setprio,
+	TP_PROTO(struct task_struct *p, struct task_struct *pi_task),
+	TP_ARGS(p, pi_task), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice,
+	TP_PROTO(struct task_struct *p, long *nice, bool *allowed),
+	TP_ARGS(p, nice, allowed), 1);
+
+DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler,
+	TP_PROTO(struct task_struct *p),
+	TP_ARGS(p), 1);
+
+struct sched_group;
+DECLARE_RESTRICTED_HOOK(android_rvh_find_busiest_group,
+	TP_PROTO(struct sched_group *busiest, struct rq *dst_rq, int *out_balance),
+		TP_ARGS(busiest, dst_rq, out_balance), 1);
+
+DECLARE_HOOK(android_vh_map_util_freq,
+	TP_PROTO(unsigned long util, unsigned long freq,
+		unsigned long cap, unsigned long *next_freq),
+	TP_ARGS(util, freq, cap, next_freq));
+
+struct em_perf_domain;
+DECLARE_HOOK(android_vh_em_pd_energy,
+	TP_PROTO(struct em_perf_domain *pd,
+		unsigned long max_util, unsigned long sum_util,
+		unsigned long *energy),
+	TP_ARGS(pd, max_util, sum_util, energy));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_SCHED_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/sys.h b/include/trace/hooks/sys.h
new file mode 100644
index 0000000..9e5d7a5
--- /dev/null
+++ b/include/trace/hooks/sys.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sys
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_SYS_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_SYS_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+
+struct task_struct;
+DECLARE_HOOK(android_vh_syscall_prctl_finished,
+	TP_PROTO(int option, struct task_struct *task),
+	TP_ARGS(option, task));
+#endif
+
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/sysrqcrash.h b/include/trace/hooks/sysrqcrash.h
new file mode 100644
index 0000000..d163f89
--- /dev/null
+++ b/include/trace/hooks/sysrqcrash.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM sysrqcrash
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_SYSRQCRASH_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_SYSRQCRASH_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_sysrq_crash,
+	TP_PROTO(void *data),
+	TP_ARGS(data));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_SYSRQCRASH_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/topology.h b/include/trace/hooks/topology.h
new file mode 100644
index 0000000..be180b5
--- /dev/null
+++ b/include/trace/hooks/topology.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM topology
+
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_TOPOLOGY_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_TOPOLOGY_H
+
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+#include <linux/cpumask.h>
+
+DECLARE_HOOK(android_vh_arch_set_freq_scale,
+	TP_PROTO(struct cpumask *cpus, unsigned long freq, unsigned long max,
+		unsigned long *scale),
+	TP_ARGS(cpus, freq, max, scale));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_TOPOLOGY_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/ufshcd.h b/include/trace/hooks/ufshcd.h
new file mode 100644
index 0000000..e2b7552
--- /dev/null
+++ b/include/trace/hooks/ufshcd.h
@@ -0,0 +1,55 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM ufshcd
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_UFSHCD_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_UFSHCD_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+struct ufs_hba;
+struct request;
+struct ufshcd_lrb;
+
+DECLARE_HOOK(android_vh_ufs_fill_prdt,
+	TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
+		 unsigned int segments, int *err),
+	TP_ARGS(hba, lrbp, segments, err));
+
+DECLARE_HOOK(android_vh_ufs_prepare_command,
+	TP_PROTO(struct ufs_hba *hba, struct request *rq,
+		 struct ufshcd_lrb *lrbp, int *err),
+	TP_ARGS(hba, rq, lrbp, err));
+
+DECLARE_HOOK(android_vh_ufs_update_sysfs,
+	TP_PROTO(struct ufs_hba *hba),
+	TP_ARGS(hba));
+
+DECLARE_HOOK(android_vh_ufs_send_command,
+	TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp),
+	TP_ARGS(hba, lrbp));
+
+DECLARE_HOOK(android_vh_ufs_compl_command,
+	TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp),
+	TP_ARGS(hba, lrbp));
+
+struct uic_command;
+DECLARE_HOOK(android_vh_ufs_send_uic_command,
+	TP_PROTO(struct ufs_hba *hba, struct uic_command *ucmd,
+		 const char *str),
+	TP_ARGS(hba, ucmd, str));
+
+DECLARE_HOOK(android_vh_ufs_send_tm_command,
+	TP_PROTO(struct ufs_hba *hba, int tag, const char *str),
+	TP_ARGS(hba, tag, str));
+
+DECLARE_HOOK(android_vh_ufs_check_int_errors,
+	TP_PROTO(struct ufs_hba *hba, bool queue_eh_work),
+	TP_ARGS(hba, queue_eh_work));
+
+#endif /* _TRACE_HOOK_UFSHCD_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/usb.h b/include/trace/hooks/usb.h
new file mode 100644
index 0000000..bf67972
--- /dev/null
+++ b/include/trace/hooks/usb.h
@@ -0,0 +1,20 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM usb
+#undef TRACE_INCLUDE_PATH
+#define TRACE_INCLUDE_PATH trace/hooks
+#if !defined(_TRACE_HOOK_USB_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_USB_H
+#include <linux/tracepoint.h>
+#include <linux/usb.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_usb_persist_overwrite,
+	TP_PROTO(struct usb_device *udev),
+	TP_ARGS(udev));
+#endif /* _TRACE_HOOK_USB_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/trace/hooks/vendor_hooks.h b/include/trace/hooks/vendor_hooks.h
new file mode 100644
index 0000000..de7f843
--- /dev/null
+++ b/include/trace/hooks/vendor_hooks.h
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/*
+ * Note: we intentionally omit include file ifdef protection
+ *  This is due to the way trace events work. If a file includes two
+ *  trace event headers under one "CREATE_TRACE_POINTS" the first include
+ *  will override the DECLARE_RESTRICTED_HOOK and break the second include.
+ */
+
+#include <linux/tracepoint.h>
+
+#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+
+#define DECLARE_HOOK DECLARE_TRACE
+
+#ifdef TRACE_HEADER_MULTI_READ
+
+#undef DECLARE_RESTRICTED_HOOK
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond) \
+	DEFINE_TRACE(name)
+
+
+/* prevent additional recursion */
+#undef TRACE_HEADER_MULTI_READ
+#else /* TRACE_HEADER_MULTI_READ */
+
+#define DO_HOOK(tp, proto, args, cond)					\
+	do {								\
+		struct tracepoint_func *it_func_ptr;			\
+		void *it_func;						\
+		void *__data;						\
+									\
+		if (!(cond))						\
+			return;						\
+									\
+		it_func_ptr = (tp)->funcs;				\
+		if (it_func_ptr) {					\
+			it_func = (it_func_ptr)->func;			\
+			__data = (it_func_ptr)->data;			\
+			((void(*)(proto))(it_func))(args);		\
+			WARN_ON(((++it_func_ptr)->func));		\
+		}							\
+	} while (0)
+
+#define __DECLARE_HOOK(name, proto, args, cond, data_proto, data_args)	\
+	extern struct tracepoint __tracepoint_##name;			\
+	static inline void __nocfi trace_##name(proto)			\
+	{								\
+		if (static_key_false(&__tracepoint_##name.key))		\
+			DO_HOOK(&__tracepoint_##name,			\
+				TP_PROTO(data_proto),			\
+				TP_ARGS(data_args),			\
+				TP_CONDITION(cond));			\
+	}								\
+	static inline bool						\
+	trace_##name##_enabled(void)					\
+	{								\
+		return static_key_false(&__tracepoint_##name.key);	\
+	}								\
+	static inline int						\
+	register_trace_##name(void (*probe)(data_proto), void *data) 	\
+	{								\
+		/* only allow a single attachment */			\
+		if (trace_##name##_enabled())				\
+			return -EBUSY;					\
+		return tracepoint_probe_register(&__tracepoint_##name,	\
+						(void *)probe, data);	\
+	}								\
+	/* vendor hooks cannot be unregistered */			\
+
+#undef DECLARE_RESTRICTED_HOOK
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond)		\
+	__DECLARE_HOOK(name, PARAMS(proto), PARAMS(args),		\
+			cond,						\
+			PARAMS(void *__data, proto),			\
+			PARAMS(__data, args))
+
+#endif /* TRACE_HEADER_MULTI_READ */
+
+#else /* !CONFIG_TRACEPOINTS || !CONFIG_ANDROID_VENDOR_HOOKS */
+/* suppress trace hooks */
+#define DECLARE_HOOK DECLARE_EVENT_NOP
+#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond)		\
+	DECLARE_EVENT_NOP(name, PARAMS(proto), PARAMS(args))
+#endif
diff --git a/include/trace/hooks/wqlockup.h b/include/trace/hooks/wqlockup.h
new file mode 100644
index 0000000..21e23ad
--- /dev/null
+++ b/include/trace/hooks/wqlockup.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM wqlockup
+#define TRACE_INCLUDE_PATH trace/hooks
+
+#if !defined(_TRACE_HOOK_WQLOCKUP_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_HOOK_WQLOCKUP_H
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+/*
+ * Following tracepoints are not exported in tracefs and provide a
+ * mechanism for vendor modules to hook and extend functionality
+ */
+DECLARE_HOOK(android_vh_wq_lockup_pool,
+	TP_PROTO(int cpu, unsigned long pool_ts),
+	TP_ARGS(cpu, pool_ts));
+
+/* macro versions of hooks are no longer required */
+
+#endif /* _TRACE_HOOK_WQLOCKUP_H */
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
index 1fc8faa..674a0b0 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -850,9 +850,11 @@
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
 #endif
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 #undef __NR_syscalls
-#define __NR_syscalls 436
+#define __NR_syscalls 441
 
 /*
  * 32 bit systems traditionally used different
diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h
index 3feeaa3..32b4d1e 100644
--- a/include/uapi/drm/drm_fourcc.h
+++ b/include/uapi/drm/drm_fourcc.h
@@ -447,6 +447,30 @@
  */
 #define DRM_FORMAT_MOD_QCOM_COMPRESSED	fourcc_mod_code(QCOM, 1)
 
+/*
+ * QTI DX Format
+ *
+ * Refers to a DX variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_DX	fourcc_mod_code(QCOM, 0x2)
+
+/*
+ * QTI Tight Format
+ *
+ * Refers to a tightly packed variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_TIGHT	fourcc_mod_code(QCOM, 0x4)
+
+/*
+ * QTI Tile Format
+ *
+ * Refers to a tile variant of the base format.
+ * Implementation may be platform and base-format specific.
+ */
+#define DRM_FORMAT_MOD_QCOM_TILE	fourcc_mod_code(QCOM, 0x8)
+
 /* Vivante framebuffer modifiers */
 
 /*
diff --git a/include/uapi/drm/drm_mode.h b/include/uapi/drm/drm_mode.h
index 735c8cf..7043c57 100644
--- a/include/uapi/drm/drm_mode.h
+++ b/include/uapi/drm/drm_mode.h
@@ -41,7 +41,6 @@
  * Userspace can refer to these structure definitions and UAPI formats
  * to communicate to driver
  */
-
 #define DRM_CONNECTOR_NAME_LEN	32
 #define DRM_DISPLAY_MODE_LEN	32
 #define DRM_PROP_NAME_LEN	32
@@ -124,6 +123,13 @@
 #define  DRM_MODE_FLAG_PIC_AR_256_135 \
 			(DRM_MODE_PICTURE_ASPECT_256_135<<19)
 
+#define  DRM_MODE_FLAG_SUPPORTS_RGB		(1<<27)
+
+#define  DRM_MODE_FLAG_SUPPORTS_YUV		(1<<28)
+#define  DRM_MODE_FLAG_VID_MODE_PANEL	(1<<29)
+#define  DRM_MODE_FLAG_CMD_MODE_PANEL	(1<<30)
+#define  DRM_MODE_FLAG_SEAMLESS			(1<<31)
+
 #define  DRM_MODE_FLAG_ALL	(DRM_MODE_FLAG_PHSYNC |		\
 				 DRM_MODE_FLAG_NHSYNC |		\
 				 DRM_MODE_FLAG_PVSYNC |		\
@@ -136,6 +142,10 @@
 				 DRM_MODE_FLAG_HSKEW |		\
 				 DRM_MODE_FLAG_DBLCLK |		\
 				 DRM_MODE_FLAG_CLKDIV2 |	\
+				 DRM_MODE_FLAG_SUPPORTS_RGB |	\
+				 DRM_MODE_FLAG_SUPPORTS_YUV |	\
+				 DRM_MODE_FLAG_VID_MODE_PANEL |	\
+				 DRM_MODE_FLAG_CMD_MODE_PANEL |	\
 				 DRM_MODE_FLAG_3D_MASK)
 
 /* DPMS flags */
@@ -485,6 +495,7 @@
 
 #define DRM_MODE_FB_INTERLACED	(1<<0) /* for interlaced framebuffers */
 #define DRM_MODE_FB_MODIFIERS	(1<<1) /* enables ->modifer[] */
+#define DRM_MODE_FB_SECURE	(1<<2) /* for secure framebuffers */
 
 struct drm_mode_fb_cmd2 {
 	__u32 fb_id;
diff --git a/include/uapi/linux/OWNERS b/include/uapi/linux/OWNERS
new file mode 100644
index 0000000..1130468
--- /dev/null
+++ b/include/uapi/linux/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/include/uapi/linux/OWNERS
diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/android/binder.h
index 7317808..5d894de 100644
--- a/include/uapi/linux/android/binder.h
+++ b/include/uapi/linux/android/binder.h
@@ -38,11 +38,59 @@
 	BINDER_TYPE_PTR		= B_PACK_CHARS('p', 't', '*', B_TYPE_LARGE),
 };
 
-enum {
+/**
+ * enum flat_binder_object_shifts: shift values for flat_binder_object_flags
+ * @FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT: shift for getting scheduler policy.
+ *
+ */
+enum flat_binder_object_shifts {
+	FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT = 9,
+};
+
+/**
+ * enum flat_binder_object_flags - flags for use in flat_binder_object.flags
+ */
+enum flat_binder_object_flags {
+	/**
+	 * @FLAT_BINDER_FLAG_PRIORITY_MASK: bit-mask for min scheduler priority
+	 *
+	 * These bits can be used to set the minimum scheduler priority
+	 * at which transactions into this node should run. Valid values
+	 * in these bits depend on the scheduler policy encoded in
+	 * @FLAT_BINDER_FLAG_SCHED_POLICY_MASK.
+	 *
+	 * For SCHED_NORMAL/SCHED_BATCH, the valid range is between [-20..19]
+	 * For SCHED_FIFO/SCHED_RR, the value can run between [1..99]
+	 */
 	FLAT_BINDER_FLAG_PRIORITY_MASK = 0xff,
+	/**
+	 * @FLAT_BINDER_FLAG_ACCEPTS_FDS: whether the node accepts fds.
+	 */
 	FLAT_BINDER_FLAG_ACCEPTS_FDS = 0x100,
 
 	/**
+	 * @FLAT_BINDER_FLAG_SCHED_POLICY_MASK: bit-mask for scheduling policy
+	 *
+	 * These two bits can be used to set the min scheduling policy at which
+	 * transactions on this node should run. These match the UAPI
+	 * scheduler policy values, eg:
+	 * 00b: SCHED_NORMAL
+	 * 01b: SCHED_FIFO
+	 * 10b: SCHED_RR
+	 * 11b: SCHED_BATCH
+	 */
+	FLAT_BINDER_FLAG_SCHED_POLICY_MASK =
+		3U << FLAT_BINDER_FLAG_SCHED_POLICY_SHIFT,
+
+	/**
+	 * @FLAT_BINDER_FLAG_INHERIT_RT: whether the node inherits RT policy
+	 *
+	 * Only when set, calls into this node will inherit a real-time
+	 * scheduling policy from the caller (for synchronous transactions).
+	 */
+	FLAT_BINDER_FLAG_INHERIT_RT = 0x800,
+
+	/**
 	 * @FLAT_BINDER_FLAG_TXN_SECURITY_CTX: request security contexts
 	 *
 	 * Only when set, causes senders to include their security
@@ -217,6 +265,25 @@
 	__u32            reserved3;
 };
 
+struct binder_freeze_info {
+	__u32            pid;
+	__u32            enable;
+	__u32            timeout_ms;
+};
+
+struct binder_frozen_status_info {
+	__u32            pid;
+
+	/* process received sync transactions since last frozen
+	 * bit 0: received sync transaction after being frozen
+	 * bit 1: new pending sync transaction during freezing
+	 */
+	__u32            sync_recv;
+
+	/* process received async transactions since last frozen */
+	__u32            async_recv;
+};
+
 #define BINDER_WRITE_READ		_IOWR('b', 1, struct binder_write_read)
 #define BINDER_SET_IDLE_TIMEOUT		_IOW('b', 3, __s64)
 #define BINDER_SET_MAX_THREADS		_IOW('b', 5, __u32)
@@ -227,6 +294,9 @@
 #define BINDER_GET_NODE_DEBUG_INFO	_IOWR('b', 11, struct binder_node_debug_info)
 #define BINDER_GET_NODE_INFO_FOR_REF	_IOWR('b', 12, struct binder_node_info_for_ref)
 #define BINDER_SET_CONTEXT_MGR_EXT	_IOW('b', 13, struct flat_binder_object)
+#define BINDER_FREEZE			_IOW('b', 14, struct binder_freeze_info)
+#define BINDER_GET_FROZEN_INFO		_IOWR('b', 15, struct binder_frozen_status_info)
+#define BINDER_ENABLE_ONEWAY_SPAM_DETECTION	_IOW('b', 16, __u32)
 
 /*
  * NOTE: Two special error codes you should check for when calling
@@ -408,6 +478,19 @@
 	 * The the last transaction (either a bcTRANSACTION or
 	 * a bcATTEMPT_ACQUIRE) failed (e.g. out of memory).  No parameters.
 	 */
+
+	BR_FROZEN_REPLY = _IO('r', 18),
+	/*
+	 * The target of the last transaction (either a bcTRANSACTION or
+	 * a bcATTEMPT_ACQUIRE) is frozen.  No parameters.
+	 */
+
+	BR_ONEWAY_SPAM_SUSPECT = _IO('r', 19),
+	/*
+	 * Current process sent too many oneway calls to target, and the last
+	 * asynchronous transaction makes the allocated async buffer size exceed
+	 * detection threshold.  No parameters.
+	 */
 };
 
 enum binder_driver_command_protocol {
diff --git a/include/uapi/linux/blkzoned.h b/include/uapi/linux/blkzoned.h
index 498eec8..42c3366 100644
--- a/include/uapi/linux/blkzoned.h
+++ b/include/uapi/linux/blkzoned.h
@@ -74,6 +74,15 @@
 };
 
 /**
+ * enum blk_zone_report_flags - Feature flags of reported zone descriptors.
+ *
+ * @BLK_ZONE_REP_CAPACITY: Zone descriptor has capacity field.
+ */
+enum blk_zone_report_flags {
+	BLK_ZONE_REP_CAPACITY	= (1 << 0),
+};
+
+/**
  * struct blk_zone - Zone descriptor for BLKREPORTZONE ioctl.
  *
  * @start: Zone start in 512 B sector units
@@ -99,7 +108,9 @@
 	__u8	cond;		/* Zone condition */
 	__u8	non_seq;	/* Non-sequential write resources active */
 	__u8	reset;		/* Reset write pointer recommended */
-	__u8	reserved[36];
+	__u8	resv[4];
+	__u64	capacity;	/* Zone capacity in number of sectors */
+	__u8	reserved[24];
 };
 
 /**
@@ -115,14 +126,16 @@
 struct blk_zone_report {
 	__u64		sector;
 	__u32		nr_zones;
-	__u8		reserved[4];
+	__u32		flags;
 	struct blk_zone zones[0];
 };
 
 /**
- * struct blk_zone_range - BLKRESETZONE ioctl request
- * @sector: starting sector of the first zone to issue reset write pointer
- * @nr_sectors: Total number of sectors of 1 or more zones to reset
+ * struct blk_zone_range - BLKRESETZONE/BLKOPENZONE/
+ *                         BLKCLOSEZONE/BLKFINISHZONE ioctl
+ *                         requests
+ * @sector: Starting sector of the first zone to operate on.
+ * @nr_sectors: Total number of sectors of all zones to operate on.
  */
 struct blk_zone_range {
 	__u64		sector;
@@ -139,10 +152,19 @@
  *                sector range. The sector range must be zone aligned.
  * @BLKGETZONESZ: Get the device zone size in number of 512 B sectors.
  * @BLKGETNRZONES: Get the total number of zones of the device.
+ * @BLKOPENZONE: Open the zones in the specified sector range.
+ *               The 512 B sector range must be zone aligned.
+ * @BLKCLOSEZONE: Close the zones in the specified sector range.
+ *                The 512 B sector range must be zone aligned.
+ * @BLKFINISHZONE: Mark the zones as full in the specified sector range.
+ *                 The 512 B sector range must be zone aligned.
  */
 #define BLKREPORTZONE	_IOWR(0x12, 130, struct blk_zone_report)
 #define BLKRESETZONE	_IOW(0x12, 131, struct blk_zone_range)
 #define BLKGETZONESZ	_IOR(0x12, 132, __u32)
 #define BLKGETNRZONES	_IOR(0x12, 133, __u32)
+#define BLKOPENZONE	_IOW(0x12, 134, struct blk_zone_range)
+#define BLKCLOSEZONE	_IOW(0x12, 135, struct blk_zone_range)
+#define BLKFINISHZONE	_IOW(0x12, 136, struct blk_zone_range)
 
 #endif /* _UAPI_BLKZONED_H */
diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 63038eb..aa0a04e 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -570,6 +570,8 @@
  * u64 bpf_ktime_get_ns(void)
  * 	Description
  * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does not include time the system was suspended.
+ * 		See: clock_gettime(CLOCK_MONOTONIC)
  * 	Return
  * 		Current *ktime*.
  *
@@ -2750,6 +2752,14 @@
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ *
+ * u64 bpf_ktime_get_boot_ns(void)
+ * 	Description
+ * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does include the time the system was suspended.
+ * 		See: clock_gettime(CLOCK_BOOTTIME)
+ * 	Return
+ * 		Current *ktime*.
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
@@ -2862,7 +2872,22 @@
 	FN(sk_storage_get),		\
 	FN(sk_storage_delete),		\
 	FN(send_signal),		\
-	FN(tcp_gen_syncookie),
+	FN(tcp_gen_syncookie),		\
+	FN(skb_output),			\
+	FN(probe_read_user),		\
+	FN(probe_read_kernel),		\
+	FN(probe_read_user_str),	\
+	FN(probe_read_kernel_str),	\
+	FN(tcp_send_ack),		\
+	FN(send_signal_thread),		\
+	FN(jiffies64),			\
+	FN(read_branch_records),	\
+	FN(get_ns_current_pid_tgid),	\
+	FN(xdp_output),			\
+	FN(get_netns_cookie),		\
+	FN(get_current_ancestor_cgroup_id),	\
+	FN(sk_assign),			\
+	FN(ktime_get_boot_ns),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
@@ -3005,6 +3030,7 @@
 	__u32 wire_len;
 	__u32 gso_segs;
 	__bpf_md_ptr(struct bpf_sock *, sk);
+	__u32 gso_size;
 };
 
 struct bpf_tunnel_key {
diff --git a/include/uapi/linux/dm-user.h b/include/uapi/linux/dm-user.h
new file mode 100644
index 0000000..6d8f535b
--- /dev/null
+++ b/include/uapi/linux/dm-user.h
@@ -0,0 +1,68 @@
+/* SPDX-License-Identifier: LGPL-2.0+ WITH Linux-syscall-note */
+/*
+ * Copyright (C) 2020 Google, Inc
+ * Copyright (C) 2020 Palmer Dabbelt <palmerdabbelt@google.com>
+ */
+
+#ifndef _LINUX_DM_USER_H
+#define _LINUX_DM_USER_H
+
+#include <linux/types.h>
+
+/*
+ * dm-user proxies device mapper ops between the kernel and userspace.  It's
+ * essentially just an RPC mechanism: all kernel calls create a request,
+ * userspace handles that with a response.  Userspace obtains requests via
+ * read() and provides responses via write().
+ *
+ * See Documentation/block/dm-user.rst for more information.
+ */
+
+#define DM_USER_REQ_MAP_READ 0
+#define DM_USER_REQ_MAP_WRITE 1
+#define DM_USER_REQ_MAP_FLUSH 2
+#define DM_USER_REQ_MAP_DISCARD 3
+#define DM_USER_REQ_MAP_SECURE_ERASE 4
+#define DM_USER_REQ_MAP_WRITE_SAME 5
+#define DM_USER_REQ_MAP_WRITE_ZEROES 6
+#define DM_USER_REQ_MAP_ZONE_OPEN 7
+#define DM_USER_REQ_MAP_ZONE_CLOSE 8
+#define DM_USER_REQ_MAP_ZONE_FINISH 9
+#define DM_USER_REQ_MAP_ZONE_APPEND 10
+#define DM_USER_REQ_MAP_ZONE_RESET 11
+#define DM_USER_REQ_MAP_ZONE_RESET_ALL 12
+
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_DEV 0x00001
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_TRANSPORT 0x00002
+#define DM_USER_REQ_MAP_FLAG_FAILFAST_DRIVER 0x00004
+#define DM_USER_REQ_MAP_FLAG_SYNC 0x00008
+#define DM_USER_REQ_MAP_FLAG_META 0x00010
+#define DM_USER_REQ_MAP_FLAG_PRIO 0x00020
+#define DM_USER_REQ_MAP_FLAG_NOMERGE 0x00040
+#define DM_USER_REQ_MAP_FLAG_IDLE 0x00080
+#define DM_USER_REQ_MAP_FLAG_INTEGRITY 0x00100
+#define DM_USER_REQ_MAP_FLAG_FUA 0x00200
+#define DM_USER_REQ_MAP_FLAG_PREFLUSH 0x00400
+#define DM_USER_REQ_MAP_FLAG_RAHEAD 0x00800
+#define DM_USER_REQ_MAP_FLAG_BACKGROUND 0x01000
+#define DM_USER_REQ_MAP_FLAG_NOWAIT 0x02000
+#define DM_USER_REQ_MAP_FLAG_CGROUP_PUNT 0x04000
+#define DM_USER_REQ_MAP_FLAG_NOUNMAP 0x08000
+#define DM_USER_REQ_MAP_FLAG_HIPRI 0x10000
+#define DM_USER_REQ_MAP_FLAG_DRV 0x20000
+#define DM_USER_REQ_MAP_FLAG_SWAP 0x40000
+
+#define DM_USER_RESP_SUCCESS 0
+#define DM_USER_RESP_ERROR 1
+#define DM_USER_RESP_UNSUPPORTED 2
+
+struct dm_user_message {
+	__u64 seq;
+	__u64 type;
+	__u64 flags;
+	__u64 sector;
+	__u64 len;
+	__u8 buf[];
+};
+
+#endif
diff --git a/include/uapi/linux/dma-heap.h b/include/uapi/linux/dma-heap.h
new file mode 100644
index 0000000..6f84fa0
--- /dev/null
+++ b/include/uapi/linux/dma-heap.h
@@ -0,0 +1,53 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * DMABUF Heaps Userspace API
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2019 Linaro Ltd.
+ */
+#ifndef _UAPI_LINUX_DMABUF_POOL_H
+#define _UAPI_LINUX_DMABUF_POOL_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * DOC: DMABUF Heaps Userspace API
+ */
+
+/* Valid FD_FLAGS are O_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR */
+#define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE)
+
+/* Currently no heap flags */
+#define DMA_HEAP_VALID_HEAP_FLAGS (0)
+
+/**
+ * struct dma_heap_allocation_data - metadata passed from userspace for
+ *                                      allocations
+ * @len:		size of the allocation
+ * @fd:			will be populated with a fd which provides the
+ *			handle to the allocated dma-buf
+ * @fd_flags:		file descriptor flags used when allocating
+ * @heap_flags:		flags passed to heap
+ *
+ * Provided by userspace as an argument to the ioctl
+ */
+struct dma_heap_allocation_data {
+	__u64 len;
+	__u32 fd;
+	__u32 fd_flags;
+	__u64 heap_flags;
+};
+
+#define DMA_HEAP_IOC_MAGIC		'H'
+
+/**
+ * DOC: DMA_HEAP_IOCTL_ALLOC - allocate memory from pool
+ *
+ * Takes a dma_heap_allocation_data struct and returns it with the fd field
+ * populated with the dmabuf handle of the allocation.
+ */
+#define DMA_HEAP_IOCTL_ALLOC	_IOWR(DMA_HEAP_IOC_MAGIC, 0x0,\
+				      struct dma_heap_allocation_data)
+
+#endif /* _UAPI_LINUX_DMABUF_POOL_H */
diff --git a/include/uapi/linux/f2fs.h b/include/uapi/linux/f2fs.h
new file mode 100644
index 0000000..352a822
--- /dev/null
+++ b/include/uapi/linux/f2fs.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+
+#ifndef _UAPI_LINUX_F2FS_H
+#define _UAPI_LINUX_F2FS_H
+#include <linux/types.h>
+#include <linux/ioctl.h>
+
+/*
+ * f2fs-specific ioctl commands
+ */
+#define F2FS_IOCTL_MAGIC		0xf5
+#define F2FS_IOC_START_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 1)
+#define F2FS_IOC_COMMIT_ATOMIC_WRITE	_IO(F2FS_IOCTL_MAGIC, 2)
+#define F2FS_IOC_START_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 3)
+#define F2FS_IOC_RELEASE_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 4)
+#define F2FS_IOC_ABORT_VOLATILE_WRITE	_IO(F2FS_IOCTL_MAGIC, 5)
+#define F2FS_IOC_GARBAGE_COLLECT	_IOW(F2FS_IOCTL_MAGIC, 6, __u32)
+#define F2FS_IOC_WRITE_CHECKPOINT	_IO(F2FS_IOCTL_MAGIC, 7)
+#define F2FS_IOC_DEFRAGMENT		_IOWR(F2FS_IOCTL_MAGIC, 8,	\
+						struct f2fs_defragment)
+#define F2FS_IOC_MOVE_RANGE		_IOWR(F2FS_IOCTL_MAGIC, 9,	\
+						struct f2fs_move_range)
+#define F2FS_IOC_FLUSH_DEVICE		_IOW(F2FS_IOCTL_MAGIC, 10,	\
+						struct f2fs_flush_device)
+#define F2FS_IOC_GARBAGE_COLLECT_RANGE	_IOW(F2FS_IOCTL_MAGIC, 11,	\
+						struct f2fs_gc_range)
+#define F2FS_IOC_GET_FEATURES		_IOR(F2FS_IOCTL_MAGIC, 12, __u32)
+#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_COMPRESS_BLOCKS	_IOR(F2FS_IOCTL_MAGIC, 17, __u64)
+#define F2FS_IOC_RELEASE_COMPRESS_BLOCKS				\
+					_IOR(F2FS_IOCTL_MAGIC, 18, __u64)
+#define F2FS_IOC_RESERVE_COMPRESS_BLOCKS				\
+					_IOR(F2FS_IOCTL_MAGIC, 19, __u64)
+#define F2FS_IOC_SEC_TRIM_FILE		_IOW(F2FS_IOCTL_MAGIC, 20,	\
+						struct f2fs_sectrim_range)
+#define F2FS_IOC_GET_COMPRESS_OPTION	_IOR(F2FS_IOCTL_MAGIC, 21,	\
+						struct f2fs_comp_option)
+#define F2FS_IOC_SET_COMPRESS_OPTION	_IOW(F2FS_IOCTL_MAGIC, 22,	\
+						struct f2fs_comp_option)
+#define F2FS_IOC_DECOMPRESS_FILE	_IO(F2FS_IOCTL_MAGIC, 23)
+#define F2FS_IOC_COMPRESS_FILE		_IO(F2FS_IOCTL_MAGIC, 24)
+
+/*
+ * should be same as XFS_IOC_GOINGDOWN.
+ * Flags for going down operation used by FS_IOC_GOINGDOWN
+ */
+#define F2FS_IOC_SHUTDOWN	_IOR('X', 125, __u32)	/* Shutdown */
+#define F2FS_GOING_DOWN_FULLSYNC	0x0	/* going down with full sync */
+#define F2FS_GOING_DOWN_METASYNC	0x1	/* going down with metadata */
+#define F2FS_GOING_DOWN_NOSYNC		0x2	/* going down */
+#define F2FS_GOING_DOWN_METAFLUSH	0x3	/* going down with meta flush */
+#define F2FS_GOING_DOWN_NEED_FSCK	0x4	/* going down to trigger fsck */
+
+/*
+ * Flags used by F2FS_IOC_SEC_TRIM_FILE
+ */
+#define F2FS_TRIM_FILE_DISCARD		0x1	/* send discard command */
+#define F2FS_TRIM_FILE_ZEROOUT		0x2	/* zero out */
+#define F2FS_TRIM_FILE_MASK		0x3
+
+struct f2fs_gc_range {
+	__u32 sync;
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_defragment {
+	__u64 start;
+	__u64 len;
+};
+
+struct f2fs_move_range {
+	__u32 dst_fd;		/* destination fd */
+	__u64 pos_in;		/* start position in src_fd */
+	__u64 pos_out;		/* start position in dst_fd */
+	__u64 len;		/* size to move */
+};
+
+struct f2fs_flush_device {
+	__u32 dev_num;		/* device number to flush */
+	__u32 segments;		/* # of segments to flush */
+};
+
+struct f2fs_sectrim_range {
+	__u64 start;
+	__u64 len;
+	__u64 flags;
+};
+
+struct f2fs_comp_option {
+	__u8 algorithm;
+	__u8 log_cluster_size;
+};
+
+#endif /* _UAPI_LINUX_F2FS_H */
diff --git a/include/uapi/linux/fscrypt.h b/include/uapi/linux/fscrypt.h
index b14f436..fceafb5 100644
--- a/include/uapi/linux/fscrypt.h
+++ b/include/uapi/linux/fscrypt.h
@@ -8,6 +8,7 @@
 #ifndef _UAPI_LINUX_FSCRYPT_H
 #define _UAPI_LINUX_FSCRYPT_H
 
+#include <linux/ioctl.h>
 #include <linux/types.h>
 
 /* Encryption policy flags */
@@ -17,6 +18,8 @@
 #define FSCRYPT_POLICY_FLAGS_PAD_32		0x03
 #define FSCRYPT_POLICY_FLAGS_PAD_MASK		0x03
 #define FSCRYPT_POLICY_FLAG_DIRECT_KEY		0x04
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64	0x08
+#define FSCRYPT_POLICY_FLAG_IV_INO_LBLK_32	0x10
 
 /* Encryption algorithms */
 #define FSCRYPT_MODE_AES_256_XTS		1
@@ -41,7 +44,6 @@
 	__u8 flags;
 	__u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE];
 };
-#define fscrypt_policy	fscrypt_policy_v1
 
 /*
  * Process-subscribed "logon" key description prefix and payload format.
@@ -107,11 +109,25 @@
 	} u;
 };
 
+/*
+ * Payload of Linux keyring key of type "fscrypt-provisioning", referenced by
+ * fscrypt_add_key_arg::key_id as an alternative to fscrypt_add_key_arg::raw.
+ */
+struct fscrypt_provisioning_key_payload {
+	__u32 type;
+	__u32 __reserved;
+	__u8 raw[];
+};
+
 /* Struct passed to FS_IOC_ADD_ENCRYPTION_KEY */
 struct fscrypt_add_key_arg {
 	struct fscrypt_key_specifier key_spec;
 	__u32 raw_size;
-	__u32 __reserved[9];
+	__u32 key_id;
+	__u32 __reserved[7];
+	/* N.B.: "temporary" flag, not reserved upstream */
+#define __FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED		0x00000001
+	__u32 __flags;
 	__u8 raw[];
 };
 
@@ -141,19 +157,21 @@
 	__u32 __out_reserved[13];
 };
 
-#define FS_IOC_SET_ENCRYPTION_POLICY		_IOR('f', 19, struct fscrypt_policy)
+#define FS_IOC_SET_ENCRYPTION_POLICY		_IOR('f', 19, struct fscrypt_policy_v1)
 #define FS_IOC_GET_ENCRYPTION_PWSALT		_IOW('f', 20, __u8[16])
-#define FS_IOC_GET_ENCRYPTION_POLICY		_IOW('f', 21, struct fscrypt_policy)
+#define FS_IOC_GET_ENCRYPTION_POLICY		_IOW('f', 21, struct fscrypt_policy_v1)
 #define FS_IOC_GET_ENCRYPTION_POLICY_EX		_IOWR('f', 22, __u8[9]) /* size + version */
 #define FS_IOC_ADD_ENCRYPTION_KEY		_IOWR('f', 23, struct fscrypt_add_key_arg)
 #define FS_IOC_REMOVE_ENCRYPTION_KEY		_IOWR('f', 24, struct fscrypt_remove_key_arg)
 #define FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS	_IOWR('f', 25, struct fscrypt_remove_key_arg)
 #define FS_IOC_GET_ENCRYPTION_KEY_STATUS	_IOWR('f', 26, struct fscrypt_get_key_status_arg)
+#define FS_IOC_GET_ENCRYPTION_NONCE		_IOR('f', 27, __u8[16])
 
 /**********************************************************************/
 
 /* old names; don't add anything new here! */
 #ifndef __KERNEL__
+#define fscrypt_policy			fscrypt_policy_v1
 #define FS_KEY_DESCRIPTOR_SIZE		FSCRYPT_KEY_DESCRIPTOR_SIZE
 #define FS_POLICY_FLAGS_PAD_4		FSCRYPT_POLICY_FLAGS_PAD_4
 #define FS_POLICY_FLAGS_PAD_8		FSCRYPT_POLICY_FLAGS_PAD_8
diff --git a/include/uapi/linux/fsverity.h b/include/uapi/linux/fsverity.h
index da0daf6..15384e2 100644
--- a/include/uapi/linux/fsverity.h
+++ b/include/uapi/linux/fsverity.h
@@ -34,7 +34,70 @@
 	__u8 digest[];
 };
 
+/*
+ * Struct containing a file's Merkle tree properties.  The fs-verity file digest
+ * is the hash of this struct.  A userspace program needs this struct only if it
+ * needs to compute fs-verity file digests itself, e.g. in order to sign files.
+ * It isn't needed just to enable fs-verity on a file.
+ *
+ * Note: when computing the file digest, 'sig_size' and 'signature' must be left
+ * zero and empty, respectively.  These fields are present only because some
+ * filesystems reuse this struct as part of their on-disk format.
+ */
+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 */
+#ifdef __KERNEL__
+	__le32 sig_size;
+#else
+	__le32 __reserved_0x04;	/* must be 0 */
+#endif
+	__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 */
+#ifdef __KERNEL__
+	__u8 signature[];
+#endif
+};
+
+/*
+ * Format in which fs-verity file digests are signed in built-in signatures.
+ * 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.
+ *
+ * This struct is specific to the built-in signature verification support, which
+ * is optional.  fs-verity users may also verify signatures in userspace, in
+ * which case userspace is responsible for deciding on what bytes are signed.
+ * This struct may still be used, but it doesn't have to be.  For example,
+ * userspace could instead use a string like "sha256:$digest_as_hex_string".
+ */
+struct fsverity_formatted_digest {
+	char magic[8];			/* must be "FSVerity" */
+	__le16 digest_algorithm;
+	__le16 digest_size;
+	__u8 digest[];
+};
+
+#define FS_VERITY_METADATA_TYPE_MERKLE_TREE	1
+#define FS_VERITY_METADATA_TYPE_DESCRIPTOR	2
+#define FS_VERITY_METADATA_TYPE_SIGNATURE	3
+
+struct fsverity_read_metadata_arg {
+	__u64 metadata_type;
+	__u64 offset;
+	__u64 length;
+	__u64 buf_ptr;
+	__u64 __reserved;
+};
+
 #define FS_IOC_ENABLE_VERITY	_IOW('f', 133, struct fsverity_enable_arg)
 #define FS_IOC_MEASURE_VERITY	_IOWR('f', 134, struct fsverity_digest)
+#define FS_IOC_READ_VERITY_METADATA \
+	_IOWR('f', 135, struct fsverity_read_metadata_arg)
 
 #endif /* _UAPI_LINUX_FSVERITY_H */
diff --git a/include/uapi/linux/fuse.h b/include/uapi/linux/fuse.h
index 373cada..a62498f 100644
--- a/include/uapi/linux/fuse.h
+++ b/include/uapi/linux/fuse.h
@@ -342,6 +342,7 @@
 #define FUSE_NO_OPENDIR_SUPPORT (1 << 24)
 #define FUSE_EXPLICIT_INVAL_DATA (1 << 25)
 #define FUSE_MAP_ALIGNMENT	(1 << 26)
+#define FUSE_PASSTHROUGH	(1 << 31)
 
 /**
  * CUSE INIT request/reply flags
@@ -465,6 +466,7 @@
 	FUSE_COPY_FILE_RANGE	= 47,
 	FUSE_SETUPMAPPING	= 48,
 	FUSE_REMOVEMAPPING	= 49,
+	FUSE_CANONICAL_PATH	= 2016,
 
 	/* CUSE specific operations */
 	CUSE_INIT		= 4096,
@@ -591,7 +593,7 @@
 struct fuse_open_out {
 	uint64_t	fh;
 	uint32_t	open_flags;
-	uint32_t	padding;
+	uint32_t	passthrough_fh;
 };
 
 struct fuse_release_in {
@@ -869,7 +871,11 @@
 };
 
 /* Device ioctls: */
-#define FUSE_DEV_IOC_CLONE	_IOR(229, 0, uint32_t)
+#define FUSE_DEV_IOC_MAGIC		229
+#define FUSE_DEV_IOC_CLONE		_IOR(FUSE_DEV_IOC_MAGIC, 0, uint32_t)
+/* 127 is reserved for the V1 interface implementation in Android (deprecated) */
+/* 126 is reserved for the V2 interface implementation in Android */
+#define FUSE_DEV_IOC_PASSTHROUGH_OPEN	_IOW(FUSE_DEV_IOC_MAGIC, 126, __u32)
 
 struct fuse_lseek_in {
 	uint64_t	fh;
diff --git a/include/uapi/linux/incrementalfs.h b/include/uapi/linux/incrementalfs.h
new file mode 100644
index 0000000..f8338af
--- /dev/null
+++ b/include/uapi/linux/incrementalfs.h
@@ -0,0 +1,590 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Userspace interface for Incremental FS.
+ *
+ * Incremental FS is special-purpose Linux virtual file system that allows
+ * execution of a program while its binary and resource files are still being
+ * lazily downloaded over the network, USB etc.
+ *
+ * Copyright 2019 Google LLC
+ */
+#ifndef _UAPI_LINUX_INCREMENTALFS_H
+#define _UAPI_LINUX_INCREMENTALFS_H
+
+#include <linux/limits.h>
+#include <linux/ioctl.h>
+#include <linux/types.h>
+#include <linux/xattr.h>
+
+/* ===== constants ===== */
+#define INCFS_NAME "incremental-fs"
+
+/*
+ * Magic number used in file header and in memory superblock
+ * Note that it is a 5 byte unsigned long. Thus on 32 bit kernels, it is
+ * truncated to a 4 byte number
+ */
+#define INCFS_MAGIC_NUMBER (0x5346434e49ul & ULONG_MAX)
+
+#define INCFS_DATA_FILE_BLOCK_SIZE 4096
+#define INCFS_HEADER_VER 1
+
+/* TODO: This value is assumed in incfs_copy_signature_info_from_user to be the
+ * actual signature length. Set back to 64 when fixed.
+ */
+#define INCFS_MAX_HASH_SIZE 32
+#define INCFS_MAX_FILE_ATTR_SIZE 512
+
+#define INCFS_INDEX_NAME ".index"
+#define INCFS_INCOMPLETE_NAME ".incomplete"
+#define INCFS_PENDING_READS_FILENAME ".pending_reads"
+#define INCFS_LOG_FILENAME ".log"
+#define INCFS_BLOCKS_WRITTEN_FILENAME ".blocks_written"
+#define INCFS_XATTR_ID_NAME (XATTR_USER_PREFIX "incfs.id")
+#define INCFS_XATTR_SIZE_NAME (XATTR_USER_PREFIX "incfs.size")
+#define INCFS_XATTR_METADATA_NAME (XATTR_USER_PREFIX "incfs.metadata")
+#define INCFS_XATTR_VERITY_NAME (XATTR_USER_PREFIX "incfs.verity")
+
+#define INCFS_MAX_SIGNATURE_SIZE 8096
+#define INCFS_SIGNATURE_VERSION 2
+#define INCFS_SIGNATURE_SECTIONS 2
+
+#define INCFS_IOCTL_BASE_CODE 'g'
+
+/* ===== ioctl requests on the command dir ===== */
+
+/*
+ * Create a new file
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_CREATE_FILE \
+	_IOWR(INCFS_IOCTL_BASE_CODE, 30, struct incfs_new_file_args)
+
+/* Read file signature */
+#define INCFS_IOC_READ_FILE_SIGNATURE                                          \
+	_IOR(INCFS_IOCTL_BASE_CODE, 31, struct incfs_get_file_sig_args)
+
+/*
+ * Fill in one or more data block. This may only be called on a handle
+ * passed as a parameter to INCFS_IOC_PERMIT_FILLING
+ *
+ * Returns number of blocks filled in, or error if none were
+ */
+#define INCFS_IOC_FILL_BLOCKS                                                  \
+	_IOR(INCFS_IOCTL_BASE_CODE, 32, struct incfs_fill_blocks)
+
+/*
+ * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
+ * May only be called on .pending_reads file
+ *
+ * Returns 0 on success or error
+ */
+#define INCFS_IOC_PERMIT_FILL                                                  \
+	_IOW(INCFS_IOCTL_BASE_CODE, 33, struct incfs_permit_fill)
+
+/*
+ * Fills buffer with ranges of populated blocks
+ *
+ * Returns 0 if all ranges written
+ *	   error otherwise
+ *
+ *	   Either way, range_buffer_size_out is set to the number
+ *	   of bytes written. Should be set to 0 by caller. The ranges
+ *	   filled are valid, but if an error was returned there might
+ *	   be more ranges to come.
+ *
+ *	   Ranges are ranges of filled blocks:
+ *
+ *	   1 2 7 9
+ *
+ *	   means blocks 1, 2, 7, 8, 9 are filled, 0, 3, 4, 5, 6 and 10 on
+ *	   are not
+ *
+ *	   If hashing is enabled for the file, the hash blocks are simply
+ *	   treated as though they immediately followed the data blocks.
+ */
+#define INCFS_IOC_GET_FILLED_BLOCKS                                            \
+	_IOR(INCFS_IOCTL_BASE_CODE, 34, struct incfs_get_filled_blocks_args)
+
+/*
+ * Creates a new mapped file
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_CREATE_MAPPED_FILE \
+	_IOWR(INCFS_IOCTL_BASE_CODE, 35, struct incfs_create_mapped_file_args)
+
+/*
+ * Get number of blocks, total and filled
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_GET_BLOCK_COUNT \
+	_IOR(INCFS_IOCTL_BASE_CODE, 36, struct incfs_get_block_count_args)
+
+/*
+ * Get per UID read timeouts
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_GET_READ_TIMEOUTS \
+	_IOR(INCFS_IOCTL_BASE_CODE, 37, struct incfs_get_read_timeouts_args)
+
+/*
+ * Set per UID read timeouts
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_SET_READ_TIMEOUTS \
+	_IOW(INCFS_IOCTL_BASE_CODE, 38, struct incfs_set_read_timeouts_args)
+
+/*
+ * Get last read error
+ * May only be called on .pending_reads file
+ */
+#define INCFS_IOC_GET_LAST_READ_ERROR \
+	_IOW(INCFS_IOCTL_BASE_CODE, 39, struct incfs_get_last_read_error_args)
+
+/* ===== sysfs feature flags ===== */
+/*
+ * Each flag is represented by a file in /sys/fs/incremental-fs/features
+ * If the file exists the feature is supported
+ * Also the file contents will be the line "supported"
+ */
+
+/*
+ * Basic flag stating that the core incfs file system is available
+ */
+#define INCFS_FEATURE_FLAG_COREFS "corefs"
+
+/*
+ * zstd compression support
+ */
+#define INCFS_FEATURE_FLAG_ZSTD "zstd"
+
+/*
+ * v2 feature set support. Covers:
+ *   INCFS_IOC_CREATE_MAPPED_FILE
+ *   INCFS_IOC_GET_BLOCK_COUNT
+ *   INCFS_IOC_GET_READ_TIMEOUTS/INCFS_IOC_SET_READ_TIMEOUTS
+ *   .blocks_written status file
+ *   .incomplete folder
+ *   report_uid mount option
+ */
+#define INCFS_FEATURE_FLAG_V2 "v2"
+
+enum incfs_compression_alg {
+	COMPRESSION_NONE = 0,
+	COMPRESSION_LZ4 = 1,
+	COMPRESSION_ZSTD = 2,
+};
+
+enum incfs_block_flags {
+	INCFS_BLOCK_FLAGS_NONE = 0,
+	INCFS_BLOCK_FLAGS_HASH = 1,
+};
+
+typedef struct {
+	__u8 bytes[16];
+} incfs_uuid_t __attribute__((aligned (8)));
+
+/*
+ * Description of a pending read. A pending read - a read call by
+ * a userspace program for which the filesystem currently doesn't have data.
+ *
+ * Reads from .pending_reads and .log return an array of these structure
+ */
+struct incfs_pending_read_info {
+	/* Id of a file that is being read from. */
+	incfs_uuid_t file_id;
+
+	/* A number of microseconds since system boot to the read. */
+	__aligned_u64 timestamp_us;
+
+	/* Index of a file block that is being read. */
+	__u32 block_index;
+
+	/* A serial number of this pending read. */
+	__u32 serial_number;
+};
+
+/*
+ * Description of a pending read. A pending read - a read call by
+ * a userspace program for which the filesystem currently doesn't have data.
+ *
+ * This version of incfs_pending_read_info is used whenever the file system is
+ * mounted with the report_uid flag
+ */
+struct incfs_pending_read_info2 {
+	/* Id of a file that is being read from. */
+	incfs_uuid_t file_id;
+
+	/* A number of microseconds since system boot to the read. */
+	__aligned_u64 timestamp_us;
+
+	/* Index of a file block that is being read. */
+	__u32 block_index;
+
+	/* A serial number of this pending read. */
+	__u32 serial_number;
+
+	/* The UID of the reading process */
+	__u32 uid;
+
+	__u32 reserved;
+};
+
+/*
+ * Description of a data or hash block to add to a data file.
+ */
+struct incfs_fill_block {
+	/* Index of a data block. */
+	__u32 block_index;
+
+	/* Length of data */
+	__u32 data_len;
+
+	/*
+	 * A pointer to an actual data for the block.
+	 *
+	 * Equivalent to: __u8 *data;
+	 */
+	__aligned_u64 data;
+
+	/*
+	 * Compression algorithm used to compress the data block.
+	 * Values from enum incfs_compression_alg.
+	 */
+	__u8 compression;
+
+	/* Values from enum incfs_block_flags */
+	__u8 flags;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	__aligned_u64 reserved3;
+};
+
+/*
+ * Description of a number of blocks to add to a data file
+ *
+ * Argument for INCFS_IOC_FILL_BLOCKS
+ */
+struct incfs_fill_blocks {
+	/* Number of blocks */
+	__u64 count;
+
+	/* A pointer to an array of incfs_fill_block structs */
+	__aligned_u64 fill_blocks;
+};
+
+/*
+ * Permit INCFS_IOC_FILL_BLOCKS on the given file descriptor
+ * May only be called on .pending_reads file
+ *
+ * Argument for INCFS_IOC_PERMIT_FILL
+ */
+struct incfs_permit_fill {
+	/* File to permit fills on */
+	__u32 file_descriptor;
+};
+
+enum incfs_hash_tree_algorithm {
+	INCFS_HASH_TREE_NONE = 0,
+	INCFS_HASH_TREE_SHA256 = 1
+};
+
+/*
+ * Create a new file or directory.
+ */
+struct incfs_new_file_args {
+	/* Id of a file to create. */
+	incfs_uuid_t file_id;
+
+	/*
+	 * Total size of the new file. Ignored if S_ISDIR(mode).
+	 */
+	__aligned_u64 size;
+
+	/*
+	 * File mode. Permissions and dir flag.
+	 */
+	__u16 mode;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	/*
+	 * A pointer to a null-terminated relative path to the file's parent
+	 * dir.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *directory_path;
+	 */
+	__aligned_u64 directory_path;
+
+	/*
+	 * A pointer to a null-terminated file's name.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *file_name;
+	 */
+	__aligned_u64 file_name;
+
+	/*
+	 * A pointer to a file attribute to be set on creation.
+	 *
+	 * Equivalent to: u8 *file_attr;
+	 */
+	__aligned_u64 file_attr;
+
+	/*
+	 * Length of the data buffer specfied by file_attr.
+	 * Max value: INCFS_MAX_FILE_ATTR_SIZE
+	 */
+	__u32 file_attr_len;
+
+	__u32 reserved4;
+
+	/*
+	 * Points to an APK V4 Signature data blob
+	 * Signature must have two sections
+	 * Format is:
+	 *	u32 version
+	 *	u32 size_of_hash_info_section
+	 *	u8 hash_info_section[]
+	 *	u32 size_of_signing_info_section
+	 *	u8 signing_info_section[]
+	 *
+	 * Note that incfs does not care about what is in signing_info_section
+	 *
+	 * hash_info_section has following format:
+	 *	u32 hash_algorithm; // Must be SHA256 == 1
+	 *	u8 log2_blocksize;  // Must be 12 for 4096 byte blocks
+	 *	u32 salt_size;
+	 *	u8 salt[];
+	 *	u32 hash_size;
+	 *	u8 root_hash[];
+	 */
+	__aligned_u64 signature_info;
+
+	/* Size of signature_info */
+	__aligned_u64 signature_size;
+
+	__aligned_u64 reserved6;
+};
+
+/*
+ * Request a digital signature blob for a given file.
+ * Argument for INCFS_IOC_READ_FILE_SIGNATURE ioctl
+ */
+struct incfs_get_file_sig_args {
+	/*
+	 * A pointer to the data buffer to save an signature blob to.
+	 *
+	 * Equivalent to: u8 *file_signature;
+	 */
+	__aligned_u64 file_signature;
+
+	/* Size of the buffer at file_signature. */
+	__u32 file_signature_buf_size;
+
+	/*
+	 * Number of bytes save file_signature buffer.
+	 * It is set after ioctl done.
+	 */
+	__u32 file_signature_len_out;
+};
+
+struct incfs_filled_range {
+	__u32 begin;
+	__u32 end;
+};
+
+/*
+ * Request ranges of filled blocks
+ * Argument for INCFS_IOC_GET_FILLED_BLOCKS
+ */
+struct incfs_get_filled_blocks_args {
+	/*
+	 * A buffer to populate with ranges of filled blocks
+	 *
+	 * Equivalent to struct incfs_filled_ranges *range_buffer
+	 */
+	__aligned_u64 range_buffer;
+
+	/* Size of range_buffer */
+	__u32 range_buffer_size;
+
+	/* Start index to read from */
+	__u32 start_index;
+
+	/*
+	 * End index to read to. 0 means read to end. This is a range,
+	 * so incfs will read from start_index to end_index - 1
+	 */
+	__u32 end_index;
+
+	/* Actual number of blocks in file */
+	__u32 total_blocks_out;
+
+	/* The  number of data blocks in file */
+	__u32 data_blocks_out;
+
+	/* Number of bytes written to range buffer */
+	__u32 range_buffer_size_out;
+
+	/* Sector scanned up to, if the call was interrupted */
+	__u32 index_out;
+};
+
+/*
+ * Create a new mapped file
+ * Argument for INCFS_IOC_CREATE_MAPPED_FILE
+ */
+struct incfs_create_mapped_file_args {
+	/*
+	 * Total size of the new file.
+	 */
+	__aligned_u64 size;
+
+	/*
+	 * File mode. Permissions and dir flag.
+	 */
+	__u16 mode;
+
+	__u16 reserved1;
+
+	__u32 reserved2;
+
+	/*
+	 * A pointer to a null-terminated relative path to the incfs mount
+	 * point
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *directory_path;
+	 */
+	__aligned_u64 directory_path;
+
+	/*
+	 * A pointer to a null-terminated file name.
+	 * Max length: PATH_MAX
+	 *
+	 * Equivalent to: char *file_name;
+	 */
+	__aligned_u64 file_name;
+
+	/* Id of source file to map. */
+	incfs_uuid_t source_file_id;
+
+	/*
+	 * Offset in source file to start mapping. Must be a multiple of
+	 * INCFS_DATA_FILE_BLOCK_SIZE
+	 */
+	__aligned_u64 source_offset;
+};
+
+/*
+ * Get information about the blocks in this file
+ * Argument for INCFS_IOC_GET_BLOCK_COUNT
+ */
+struct incfs_get_block_count_args {
+	/* Total number of data blocks in the file */
+	__u32 total_data_blocks_out;
+
+	/* Number of filled data blocks in the file */
+	__u32 filled_data_blocks_out;
+
+	/* Total number of hash blocks in the file */
+	__u32 total_hash_blocks_out;
+
+	/* Number of filled hash blocks in the file */
+	__u32 filled_hash_blocks_out;
+};
+
+/* Description of timeouts for one UID */
+struct incfs_per_uid_read_timeouts {
+	/* UID to apply these timeouts to */
+	__u32 uid;
+
+	/*
+	 * Min time in microseconds to read any block. Note that this doesn't
+	 * apply to reads which are satisfied from the page cache.
+	 */
+	__u32 min_time_us;
+
+	/*
+	 * Min time in microseconds to satisfy a pending read. Any pending read
+	 * which is filled before this time will be delayed so that the total
+	 * read time >= this value.
+	 */
+	__u32 min_pending_time_us;
+
+	/*
+	 * Max time in microseconds to satisfy a pending read before the read
+	 * times out. If set to U32_MAX, defaults to mount options
+	 * read_timeout_ms * 1000. Must be >= min_pending_time_us
+	 */
+	__u32 max_pending_time_us;
+};
+
+/*
+ * Get the read timeouts array
+ * Argument for INCFS_IOC_GET_READ_TIMEOUTS
+ */
+struct incfs_get_read_timeouts_args {
+	/*
+	 * A pointer to a buffer to fill with the current timeouts
+	 *
+	 * Equivalent to struct incfs_per_uid_read_timeouts *
+	 */
+	__aligned_u64 timeouts_array;
+
+	/* Size of above buffer in bytes */
+	__u32 timeouts_array_size;
+
+	/* Size used in bytes, or size needed if -ENOMEM returned */
+	__u32 timeouts_array_size_out;
+};
+
+/*
+ * Set the read timeouts array
+ * Arguments for INCFS_IOC_SET_READ_TIMEOUTS
+ */
+struct incfs_set_read_timeouts_args {
+	/*
+	 * A pointer to an array containing the new timeouts
+	 * This will replace any existing timeouts
+	 *
+	 * Equivalent to struct incfs_per_uid_read_timeouts *
+	 */
+	__aligned_u64 timeouts_array;
+
+	/* Size of above array in bytes. Must be < 256 */
+	__u32 timeouts_array_size;
+};
+
+/*
+ * Get last read error struct
+ * Arguments for INCFS_IOC_GET_LAST_READ_ERROR
+ */
+struct incfs_get_last_read_error_args {
+	/* File id of last file that had a read error */
+	incfs_uuid_t	file_id_out;
+
+	/* Time of last read error, in us, from CLOCK_MONOTONIC */
+	__u64	time_us_out;
+
+	/* Index of page that was being read at last read error */
+	__u32	page_out;
+
+	/* errno of last read error */
+	__u32	errno_out;
+
+	/* uid of last read error */
+	__u32	uid_out;
+
+	__u32	reserved1;
+	__u64	reserved2;
+};
+
+#endif /* _UAPI_LINUX_INCREMENTALFS_H */
diff --git a/include/uapi/linux/ion.h b/include/uapi/linux/ion.h
new file mode 100644
index 0000000..371e446
--- /dev/null
+++ b/include/uapi/linux/ion.h
@@ -0,0 +1,150 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * drivers/staging/android/uapi/ion.h
+ *
+ * Copyright (C) 2011 Google, Inc.
+ */
+
+#ifndef _UAPI_LINUX_ION_H
+#define _UAPI_LINUX_ION_H
+
+#include <linux/ioctl.h>
+#include <linux/types.h>
+
+/**
+ * ion_heap_types - list of all possible types of heaps that Android can use
+ *
+ * @ION_HEAP_TYPE_SYSTEM:        Reserved heap id for ion heap that allocates
+ *				 memory using alloc_page(). Also, supports
+ *				 deferred free and allocation pools.
+* @ION_HEAP_TYPE_DMA:		 Reserved heap id for ion heap that manages
+ * 				 single CMA (contiguous memory allocator)
+ * 				 region. Uses standard DMA APIs for
+ *				 managing memory within the CMA region.
+ */
+enum ion_heap_type {
+	ION_HEAP_TYPE_SYSTEM = 0,
+	ION_HEAP_TYPE_DMA = 2,
+	/* reserved range for future standard heap types */
+	ION_HEAP_TYPE_CUSTOM = 16,
+	ION_HEAP_TYPE_MAX = 31,
+};
+
+/**
+ * ion_heap_id - list of standard heap ids that Android can use
+ *
+ * @ION_HEAP_SYSTEM		Id for the ION_HEAP_TYPE_SYSTEM
+ * @ION_HEAP_DMA_START 		Start of reserved id range for heaps of type
+ *				ION_HEAP_TYPE_DMA
+ * @ION_HEAP_DMA_END		End of reserved id range for heaps of type
+ *				ION_HEAP_TYPE_DMA
+ * @ION_HEAP_CUSTOM_START	Start of reserved id range for heaps of custom
+ *				type
+ * @ION_HEAP_CUSTOM_END		End of reserved id range for heaps of custom
+ *				type
+ */
+enum ion_heap_id {
+	ION_HEAP_SYSTEM = (1 << ION_HEAP_TYPE_SYSTEM),
+	ION_HEAP_DMA_START = (ION_HEAP_SYSTEM << 1),
+	ION_HEAP_DMA_END = (ION_HEAP_DMA_START << 7),
+	ION_HEAP_CUSTOM_START = (ION_HEAP_DMA_END << 1),
+	ION_HEAP_CUSTOM_END = (ION_HEAP_CUSTOM_START << 22),
+};
+
+#define ION_NUM_MAX_HEAPS	(32)
+
+/**
+ * allocation flags - the lower 16 bits are used by core ion, the upper 16
+ * bits are reserved for use by the heaps themselves.
+ */
+
+/*
+ * mappings of this buffer should be cached, ion will do cache maintenance
+ * when the buffer is mapped for dma
+ */
+#define ION_FLAG_CACHED		1
+
+/**
+ * DOC: Ion Userspace API
+ *
+ * create a client by opening /dev/ion
+ * most operations handled via following ioctls
+ *
+ */
+
+/**
+ * struct ion_allocation_data - metadata passed from userspace for allocations
+ * @len:		size of the allocation
+ * @heap_id_mask:	mask of heap ids to allocate from
+ * @flags:		flags passed to heap
+ * @handle:		pointer that will be populated with a cookie to use to
+ *			refer to this allocation
+ *
+ * Provided by userspace as an argument to the ioctl
+ */
+struct ion_allocation_data {
+	__u64 len;
+	__u32 heap_id_mask;
+	__u32 flags;
+	__u32 fd;
+	__u32 unused;
+};
+
+#define MAX_HEAP_NAME			32
+
+/**
+ * struct ion_heap_data - data about a heap
+ * @name - first 32 characters of the heap name
+ * @type - heap type
+ * @heap_id - heap id for the heap
+ */
+struct ion_heap_data {
+	char name[MAX_HEAP_NAME];
+	__u32 type;
+	__u32 heap_id;
+	__u32 reserved0;
+	__u32 reserved1;
+	__u32 reserved2;
+};
+
+/**
+ * struct ion_heap_query - collection of data about all heaps
+ * @cnt - total number of heaps to be copied
+ * @heaps - buffer to copy heap data
+ */
+struct ion_heap_query {
+	__u32 cnt; /* Total number of heaps to be copied */
+	__u32 reserved0; /* align to 64bits */
+	__u64 heaps; /* buffer to be populated */
+	__u32 reserved1;
+	__u32 reserved2;
+};
+
+#define ION_IOC_MAGIC		'I'
+
+/**
+ * DOC: ION_IOC_ALLOC - allocate memory
+ *
+ * Takes an ion_allocation_data struct and returns it with the handle field
+ * populated with the opaque handle for the allocation.
+ */
+#define ION_IOC_ALLOC		_IOWR(ION_IOC_MAGIC, 0, \
+				      struct ion_allocation_data)
+
+/**
+ * DOC: ION_IOC_HEAP_QUERY - information about available heaps
+ *
+ * Takes an ion_heap_query structure and populates information about
+ * available Ion heaps.
+ */
+#define ION_IOC_HEAP_QUERY     _IOWR(ION_IOC_MAGIC, 8, \
+					struct ion_heap_query)
+
+/**
+ * DOC: ION_IOC_HEAP_ABI_VERSION - return ABI version
+ *
+ * Returns ABI version for this driver
+ */
+#define ION_IOC_ABI_VERSION    _IOR(ION_IOC_MAGIC, 9, \
+					__u32)
+#endif /* _UAPI_LINUX_ION_H */
diff --git a/include/uapi/linux/kcov.h b/include/uapi/linux/kcov.h
index 9529867..1d0350e 100644
--- a/include/uapi/linux/kcov.h
+++ b/include/uapi/linux/kcov.h
@@ -4,9 +4,24 @@
 
 #include <linux/types.h>
 
+/*
+ * Argument for KCOV_REMOTE_ENABLE ioctl, see Documentation/dev-tools/kcov.rst
+ * and the comment before kcov_remote_start() for usage details.
+ */
+struct kcov_remote_arg {
+	__u32		trace_mode;	/* KCOV_TRACE_PC or KCOV_TRACE_CMP */
+	__u32		area_size;	/* Length of coverage buffer in words */
+	__u32		num_handles;	/* Size of handles array */
+	__aligned_u64	common_handle;
+	__aligned_u64	handles[0];
+};
+
+#define KCOV_REMOTE_MAX_HANDLES		0x100
+
 #define KCOV_INIT_TRACE			_IOR('c', 1, unsigned long)
 #define KCOV_ENABLE			_IO('c', 100)
 #define KCOV_DISABLE			_IO('c', 101)
+#define KCOV_REMOTE_ENABLE		_IOW('c', 102, struct kcov_remote_arg)
 
 enum {
 	/*
@@ -32,4 +47,17 @@
 #define KCOV_CMP_SIZE(n)        ((n) << 1)
 #define KCOV_CMP_MASK           KCOV_CMP_SIZE(3)
 
+#define KCOV_SUBSYSTEM_COMMON	(0x00ull << 56)
+#define KCOV_SUBSYSTEM_USB	(0x01ull << 56)
+
+#define KCOV_SUBSYSTEM_MASK	(0xffull << 56)
+#define KCOV_INSTANCE_MASK	(0xffffffffull)
+
+static inline __u64 kcov_remote_handle(__u64 subsys, __u64 inst)
+{
+	if (subsys & ~KCOV_SUBSYSTEM_MASK || inst & ~KCOV_INSTANCE_MASK)
+		return 0;
+	return subsys | inst;
+}
+
 #endif /* _LINUX_KCOV_IOCTLS_H */
diff --git a/include/uapi/linux/loop.h b/include/uapi/linux/loop.h
index 080a8df..24a1c45 100644
--- a/include/uapi/linux/loop.h
+++ b/include/uapi/linux/loop.h
@@ -25,6 +25,16 @@
 	LO_FLAGS_DIRECT_IO	= 16,
 };
 
+/* LO_FLAGS that can be set using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_SETTABLE_FLAGS (LO_FLAGS_AUTOCLEAR | LO_FLAGS_PARTSCAN)
+
+/* LO_FLAGS that can be cleared using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_CLEARABLE_FLAGS (LO_FLAGS_AUTOCLEAR)
+
+/* LO_FLAGS that can be set using LOOP_CONFIGURE */
+#define LOOP_CONFIGURE_SETTABLE_FLAGS (LO_FLAGS_READ_ONLY | LO_FLAGS_AUTOCLEAR \
+				       | LO_FLAGS_PARTSCAN | LO_FLAGS_DIRECT_IO)
+
 #include <asm/posix_types.h>	/* for __kernel_old_dev_t */
 #include <linux/types.h>	/* for __u64 */
 
@@ -37,7 +47,7 @@
 	int		   lo_offset;
 	int		   lo_encrypt_type;
 	int		   lo_encrypt_key_size; 	/* ioctl w/o */
-	int		   lo_flags;			/* ioctl r/o */
+	int		   lo_flags;
 	char		   lo_name[LO_NAME_SIZE];
 	unsigned char	   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
 	unsigned long	   lo_init[2];
@@ -53,13 +63,29 @@
 	__u32		   lo_number;			/* ioctl r/o */
 	__u32		   lo_encrypt_type;
 	__u32		   lo_encrypt_key_size;		/* ioctl w/o */
-	__u32		   lo_flags;			/* ioctl r/o */
+	__u32		   lo_flags;
 	__u8		   lo_file_name[LO_NAME_SIZE];
 	__u8		   lo_crypt_name[LO_NAME_SIZE];
 	__u8		   lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
 	__u64		   lo_init[2];
 };
 
+/**
+ * struct loop_config - Complete configuration for a loop device.
+ * @fd: fd of the file to be used as a backing file for the loop device.
+ * @block_size: block size to use; ignored if 0.
+ * @info: struct loop_info64 to configure the loop device with.
+ *
+ * This structure is used with the LOOP_CONFIGURE ioctl, and can be used to
+ * atomically setup and configure all loop device parameters at once.
+ */
+struct loop_config {
+	__u32			fd;
+	__u32                   block_size;
+	struct loop_info64	info;
+	__u64			__reserved[8];
+};
+
 /*
  * Loop filter types
  */
@@ -90,6 +116,7 @@
 #define LOOP_SET_CAPACITY	0x4C07
 #define LOOP_SET_DIRECT_IO	0x4C08
 #define LOOP_SET_BLOCK_SIZE	0x4C09
+#define LOOP_CONFIGURE		0x4C0A
 
 /* /dev/loop-control interface */
 #define LOOP_CTL_ADD		0x4C80
diff --git a/include/uapi/linux/magic.h b/include/uapi/linux/magic.h
index 84ae605..85f539a 100644
--- a/include/uapi/linux/magic.h
+++ b/include/uapi/linux/magic.h
@@ -58,6 +58,8 @@
 #define REISER2FS_SUPER_MAGIC_STRING	"ReIsEr2Fs"
 #define REISER2FS_JR_SUPER_MAGIC_STRING	"ReIsEr3Fs"
 
+#define SDCARDFS_SUPER_MAGIC	0x5dca2df5
+
 #define SMB_SUPER_MAGIC		0x517B
 #define CGROUP_SUPER_MAGIC	0x27e0eb
 #define CGROUP2_SUPER_MAGIC	0x63677270
diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h
index fc1a64c..923cc16 100644
--- a/include/uapi/linux/mman.h
+++ b/include/uapi/linux/mman.h
@@ -5,8 +5,9 @@
 #include <asm/mman.h>
 #include <asm-generic/hugetlb_encode.h>
 
-#define MREMAP_MAYMOVE	1
-#define MREMAP_FIXED	2
+#define MREMAP_MAYMOVE		1
+#define MREMAP_FIXED		2
+#define MREMAP_DONTUNMAP	4
 
 #define OVERCOMMIT_GUESS		0
 #define OVERCOMMIT_ALWAYS		1
diff --git a/include/uapi/linux/netfilter/xt_IDLETIMER.h b/include/uapi/linux/netfilter/xt_IDLETIMER.h
index 3c586a1..c82a1c1 100644
--- a/include/uapi/linux/netfilter/xt_IDLETIMER.h
+++ b/include/uapi/linux/netfilter/xt_IDLETIMER.h
@@ -5,6 +5,7 @@
  * Header file for Xtables timer target module.
  *
  * Copyright (C) 2004, 2010 Nokia Corporation
+ *
  * Written by Timo Teras <ext-timo.teras@nokia.com>
  *
  * Converted to x_tables and forward-ported to 2.6.34
@@ -33,12 +34,19 @@
 #include <linux/types.h>
 
 #define MAX_IDLETIMER_LABEL_SIZE 28
+#define NLMSG_MAX_SIZE 64
+
+#define NL_EVENT_TYPE_INACTIVE 0
+#define NL_EVENT_TYPE_ACTIVE 1
 
 struct idletimer_tg_info {
 	__u32 timeout;
 
 	char label[MAX_IDLETIMER_LABEL_SIZE];
 
+	/* Use netlink messages for notification in addition to sysfs */
+	__u8 send_nl_msg;
+
 	/* for kernel module internal use only */
 	struct idletimer_tg *timer __attribute__((aligned(8)));
 };
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index beee59c..3043c9af 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -2373,6 +2373,9 @@
  *	the allowed channel bandwidth configurations. (u8 attribute)
  *	Defined by IEEE P802.11ay/D4.0 section 9.4.2.251, Table 13.
  *
+ * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from
+ *	association request when used with NL80211_CMD_NEW_STATION).
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2835,6 +2838,8 @@
 	NL80211_ATTR_WIPHY_EDMG_CHANNELS,
 	NL80211_ATTR_WIPHY_EDMG_BW_CONFIG,
 
+	NL80211_ATTR_HE_6GHZ_CAPABILITY,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
@@ -3413,6 +3418,8 @@
  *     defined in HE capabilities IE
  * @NL80211_BAND_IFTYPE_ATTR_MAX: highest band HE capability attribute currently
  *     defined
+ * @NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA: HE 6GHz band capabilities (__le16),
+ *	given for all 6 GHz band channels
  * @__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST: internal use
  */
 enum nl80211_band_iftype_attr {
@@ -3423,6 +3430,7 @@
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PHY,
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_MCS_SET,
 	NL80211_BAND_IFTYPE_ATTR_HE_CAP_PPE,
+	NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
 
 	/* keep last */
 	__NL80211_BAND_IFTYPE_ATTR_AFTER_LAST,
diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h
index 7da1b37..bc4a5d9 100644
--- a/include/uapi/linux/prctl.h
+++ b/include/uapi/linux/prctl.h
@@ -234,4 +234,7 @@
 #define PR_GET_TAGGED_ADDR_CTRL		56
 # define PR_TAGGED_ADDR_ENABLE		(1UL << 0)
 
+#define PR_SET_VMA		0x53564d41
+# define PR_SET_VMA_ANON_NAME		0
+
 #endif /* _LINUX_PRCTL_H */
diff --git a/include/uapi/linux/random.h b/include/uapi/linux/random.h
index 26ee913..dcc1b3e 100644
--- a/include/uapi/linux/random.h
+++ b/include/uapi/linux/random.h
@@ -48,9 +48,11 @@
  * Flags for getrandom(2)
  *
  * GRND_NONBLOCK	Don't block and return EAGAIN instead
- * GRND_RANDOM		Use the /dev/random pool instead of /dev/urandom
+ * GRND_RANDOM		No effect
+ * GRND_INSECURE	Return non-cryptographic random bytes
  */
 #define GRND_NONBLOCK	0x0001
 #define GRND_RANDOM	0x0002
+#define GRND_INSECURE	0x0004
 
 #endif /* _UAPI_LINUX_RANDOM_H */
diff --git a/include/uapi/linux/seccomp.h b/include/uapi/linux/seccomp.h
index b5f901a..df1f471 100644
--- a/include/uapi/linux/seccomp.h
+++ b/include/uapi/linux/seccomp.h
@@ -76,6 +76,35 @@
 	struct seccomp_data data;
 };
 
+/*
+ * Valid flags for struct seccomp_notif_resp
+ *
+ * Note, the SECCOMP_USER_NOTIF_FLAG_CONTINUE flag must be used with caution!
+ * If set by the process supervising the syscalls of another process the
+ * syscall will continue. This is problematic because of an inherent TOCTOU.
+ * An attacker can exploit the time while the supervised process is waiting on
+ * a response from the supervising process to rewrite syscall arguments which
+ * are passed as pointers of the intercepted syscall.
+ * It should be absolutely clear that this means that the seccomp notifier
+ * _cannot_ be used to implement a security policy! It should only ever be used
+ * in scenarios where a more privileged process supervises the syscalls of a
+ * lesser privileged process to get around kernel-enforced security
+ * restrictions when the privileged process deems this safe. In other words,
+ * in order to continue a syscall the supervising process should be sure that
+ * another security mechanism or the kernel itself will sufficiently block
+ * syscalls if arguments are rewritten to something unsafe.
+ *
+ * Similar precautions should be applied when stacking SECCOMP_RET_USER_NOTIF
+ * or SECCOMP_RET_TRACE. For SECCOMP_RET_USER_NOTIF filters acting on the
+ * same syscall, the most recently added filter takes precedence. This means
+ * that the new SECCOMP_RET_USER_NOTIF filter can override any
+ * SECCOMP_IOCTL_NOTIF_SEND from earlier filters, essentially allowing all
+ * such filtered syscalls to be executed by sending the response
+ * SECCOMP_USER_NOTIF_FLAG_CONTINUE. Note that SECCOMP_RET_TRACE can equally
+ * be overriden by SECCOMP_USER_NOTIF_FLAG_CONTINUE.
+ */
+#define SECCOMP_USER_NOTIF_FLAG_CONTINUE BIT(0)
+
 struct seccomp_notif_resp {
 	__u64 id;
 	__s64 val;
diff --git a/include/uapi/linux/stat.h b/include/uapi/linux/stat.h
index 7b35e98..ad80a5c 100644
--- a/include/uapi/linux/stat.h
+++ b/include/uapi/linux/stat.h
@@ -167,8 +167,8 @@
 #define STATX_ATTR_APPEND		0x00000020 /* [I] File is append-only */
 #define STATX_ATTR_NODUMP		0x00000040 /* [I] File is not to be dumped */
 #define STATX_ATTR_ENCRYPTED		0x00000800 /* [I] File requires key to decrypt in fs */
-
 #define STATX_ATTR_AUTOMOUNT		0x00001000 /* Dir: Automount trigger */
+#define STATX_ATTR_VERITY		0x00100000 /* [I] Verity protected file */
 
 
 #endif /* _UAPI_LINUX_STAT_H */
diff --git a/include/uapi/linux/usb/f_accessory.h b/include/uapi/linux/usb/f_accessory.h
new file mode 100644
index 0000000..0baeb7d
--- /dev/null
+++ b/include/uapi/linux/usb/f_accessory.h
@@ -0,0 +1,146 @@
+/*
+ * Gadget Function Driver for Android USB accessories
+ *
+ * Copyright (C) 2011 Google, Inc.
+ * Author: Mike Lockwood <lockwood@android.com>
+ *
+ * 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.
+ *
+ */
+
+#ifndef _UAPI_LINUX_USB_F_ACCESSORY_H
+#define _UAPI_LINUX_USB_F_ACCESSORY_H
+
+/* Use Google Vendor ID when in accessory mode */
+#define USB_ACCESSORY_VENDOR_ID 0x18D1
+
+
+/* Product ID to use when in accessory mode */
+#define USB_ACCESSORY_PRODUCT_ID 0x2D00
+
+/* Product ID to use when in accessory mode and adb is enabled */
+#define USB_ACCESSORY_ADB_PRODUCT_ID 0x2D01
+
+/* Indexes for strings sent by the host via ACCESSORY_SEND_STRING */
+#define ACCESSORY_STRING_MANUFACTURER   0
+#define ACCESSORY_STRING_MODEL          1
+#define ACCESSORY_STRING_DESCRIPTION    2
+#define ACCESSORY_STRING_VERSION        3
+#define ACCESSORY_STRING_URI            4
+#define ACCESSORY_STRING_SERIAL         5
+
+/* Control request for retrieving device's protocol version
+ *
+ *	requestType:    USB_DIR_IN | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_GET_PROTOCOL
+ *	value:          0
+ *	index:          0
+ *	data            version number (16 bits little endian)
+ *                     1 for original accessory support
+ *                     2 adds HID and device to host audio support
+ */
+#define ACCESSORY_GET_PROTOCOL  51
+
+/* Control request for host to send a string to the device
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SEND_STRING
+ *	value:          0
+ *	index:          string ID
+ *	data            zero terminated UTF8 string
+ *
+ *  The device can later retrieve these strings via the
+ *  ACCESSORY_GET_STRING_* ioctls
+ */
+#define ACCESSORY_SEND_STRING   52
+
+/* Control request for starting device in accessory mode.
+ * The host sends this after setting all its strings to the device.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_START
+ *	value:          0
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_START         53
+
+/* Control request for registering a HID device.
+ * Upon registering, a unique ID is sent by the accessory in the
+ * value parameter. This ID will be used for future commands for
+ * the device
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_REGISTER_HID_DEVICE
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          total length of the HID report descriptor
+ *	data            none
+ */
+#define ACCESSORY_REGISTER_HID         54
+
+/* Control request for unregistering a HID device.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_REGISTER_HID
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_UNREGISTER_HID         55
+
+/* Control request for sending the HID report descriptor.
+ * If the HID descriptor is longer than the endpoint zero max packet size,
+ * the descriptor will be sent in multiple ACCESSORY_SET_HID_REPORT_DESC
+ * commands. The data for the descriptor must be sent sequentially
+ * if multiple packets are needed.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SET_HID_REPORT_DESC
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          offset of data in descriptor
+ *                      (needed when HID descriptor is too big for one packet)
+ *	data            the HID report descriptor
+ */
+#define ACCESSORY_SET_HID_REPORT_DESC         56
+
+/* Control request for sending HID events.
+ *
+ *	requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SEND_HID_EVENT
+ *	value:          Accessory assigned ID for the HID device
+ *	index:          0
+ *	data            the HID report for the event
+ */
+#define ACCESSORY_SEND_HID_EVENT         57
+
+/* Control request for setting the audio mode.
+ *
+ *	requestType:	USB_DIR_OUT | USB_TYPE_VENDOR
+ *	request:        ACCESSORY_SET_AUDIO_MODE
+ *	value:          0 - no audio
+ *                     1 - device to host, 44100 16-bit stereo PCM
+ *	index:          0
+ *	data            none
+ */
+#define ACCESSORY_SET_AUDIO_MODE         58
+
+/* ioctls for retrieving strings set by the host */
+#define ACCESSORY_GET_STRING_MANUFACTURER   _IOW('M', 1, char[256])
+#define ACCESSORY_GET_STRING_MODEL          _IOW('M', 2, char[256])
+#define ACCESSORY_GET_STRING_DESCRIPTION    _IOW('M', 3, char[256])
+#define ACCESSORY_GET_STRING_VERSION        _IOW('M', 4, char[256])
+#define ACCESSORY_GET_STRING_URI            _IOW('M', 5, char[256])
+#define ACCESSORY_GET_STRING_SERIAL         _IOW('M', 6, char[256])
+/* returns 1 if there is a start request pending */
+#define ACCESSORY_IS_START_REQUESTED        _IO('M', 7)
+/* returns audio mode (set via the ACCESSORY_SET_AUDIO_MODE control request) */
+#define ACCESSORY_GET_AUDIO_MODE            _IO('M', 8)
+
+#endif /* _UAPI_LINUX_USB_F_ACCESSORY_H */
diff --git a/include/uapi/linux/usb/raw_gadget.h b/include/uapi/linux/usb/raw_gadget.h
new file mode 100644
index 0000000..0be6852
--- /dev/null
+++ b/include/uapi/linux/usb/raw_gadget.h
@@ -0,0 +1,249 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * USB Raw Gadget driver.
+ *
+ * See Documentation/usb/raw-gadget.rst for more details.
+ */
+
+#ifndef _UAPI__LINUX_USB_RAW_GADGET_H
+#define _UAPI__LINUX_USB_RAW_GADGET_H
+
+#include <asm/ioctl.h>
+#include <linux/types.h>
+#include <linux/usb/ch9.h>
+
+/* Maximum length of driver_name/device_name in the usb_raw_init struct. */
+#define UDC_NAME_LENGTH_MAX 128
+
+/*
+ * struct usb_raw_init - argument for USB_RAW_IOCTL_INIT ioctl.
+ * @speed: The speed of the emulated USB device, takes the same values as
+ *     the usb_device_speed enum: USB_SPEED_FULL, USB_SPEED_HIGH, etc.
+ * @driver_name: The name of the UDC driver.
+ * @device_name: The name of a UDC instance.
+ *
+ * The last two fields identify a UDC the gadget driver should bind to.
+ * For example, Dummy UDC has "dummy_udc" as its driver_name and "dummy_udc.N"
+ * as its device_name, where N in the index of the Dummy UDC instance.
+ * At the same time the dwc2 driver that is used on Raspberry Pi Zero, has
+ * "20980000.usb" as both driver_name and device_name.
+ */
+struct usb_raw_init {
+	__u8	driver_name[UDC_NAME_LENGTH_MAX];
+	__u8	device_name[UDC_NAME_LENGTH_MAX];
+	__u8	speed;
+};
+
+/* The type of event fetched with the USB_RAW_IOCTL_EVENT_FETCH ioctl. */
+enum usb_raw_event_type {
+	USB_RAW_EVENT_INVALID = 0,
+
+	/* This event is queued when the driver has bound to a UDC. */
+	USB_RAW_EVENT_CONNECT = 1,
+
+	/* This event is queued when a new control request arrived to ep0. */
+	USB_RAW_EVENT_CONTROL = 2,
+
+	/* The list might grow in the future. */
+};
+
+/*
+ * struct usb_raw_event - argument for USB_RAW_IOCTL_EVENT_FETCH ioctl.
+ * @type: The type of the fetched event.
+ * @length: Length of the data buffer. Updated by the driver and set to the
+ *     actual length of the fetched event data.
+ * @data: A buffer to store the fetched event data.
+ *
+ * Currently the fetched data buffer is empty for USB_RAW_EVENT_CONNECT,
+ * and contains struct usb_ctrlrequest for USB_RAW_EVENT_CONTROL.
+ */
+struct usb_raw_event {
+	__u32		type;
+	__u32		length;
+	__u8		data[0];
+};
+
+#define USB_RAW_IO_FLAGS_ZERO	0x0001
+#define USB_RAW_IO_FLAGS_MASK	0x0001
+
+static inline int usb_raw_io_flags_valid(__u16 flags)
+{
+	return (flags & ~USB_RAW_IO_FLAGS_MASK) == 0;
+}
+
+static inline int usb_raw_io_flags_zero(__u16 flags)
+{
+	return (flags & USB_RAW_IO_FLAGS_ZERO);
+}
+
+/*
+ * struct usb_raw_ep_io - argument for USB_RAW_IOCTL_EP0/EP_WRITE/READ ioctls.
+ * @ep: Endpoint handle as returned by USB_RAW_IOCTL_EP_ENABLE for
+ *     USB_RAW_IOCTL_EP_WRITE/READ. Ignored for USB_RAW_IOCTL_EP0_WRITE/READ.
+ * @flags: When USB_RAW_IO_FLAGS_ZERO is specified, the zero flag is set on
+ *     the submitted USB request, see include/linux/usb/gadget.h for details.
+ * @length: Length of data.
+ * @data: Data to send for USB_RAW_IOCTL_EP0/EP_WRITE. Buffer to store received
+ *     data for USB_RAW_IOCTL_EP0/EP_READ.
+ */
+struct usb_raw_ep_io {
+	__u16		ep;
+	__u16		flags;
+	__u32		length;
+	__u8		data[0];
+};
+
+/* Maximum number of non-control endpoints in struct usb_raw_eps_info. */
+#define USB_RAW_EPS_NUM_MAX	30
+
+/* Maximum length of UDC endpoint name in struct usb_raw_ep_info. */
+#define USB_RAW_EP_NAME_MAX	16
+
+/* Used as addr in struct usb_raw_ep_info if endpoint accepts any address. */
+#define USB_RAW_EP_ADDR_ANY	0xff
+
+/*
+ * struct usb_raw_ep_caps - exposes endpoint capabilities from struct usb_ep
+ *     (technically from its member struct usb_ep_caps).
+ */
+struct usb_raw_ep_caps {
+	__u32	type_control	: 1;
+	__u32	type_iso	: 1;
+	__u32	type_bulk	: 1;
+	__u32	type_int	: 1;
+	__u32	dir_in		: 1;
+	__u32	dir_out		: 1;
+};
+
+/*
+ * struct usb_raw_ep_limits - exposes endpoint limits from struct usb_ep.
+ * @maxpacket_limit: Maximum packet size value supported by this endpoint.
+ * @max_streams: maximum number of streams supported by this endpoint
+ *     (actual number is 2^n).
+ * @reserved: Empty, reserved for potential future extensions.
+ */
+struct usb_raw_ep_limits {
+	__u16	maxpacket_limit;
+	__u16	max_streams;
+	__u32	reserved;
+};
+
+/*
+ * struct usb_raw_ep_info - stores information about a gadget endpoint.
+ * @name: Name of the endpoint as it is defined in the UDC driver.
+ * @addr: Address of the endpoint that must be specified in the endpoint
+ *     descriptor passed to USB_RAW_IOCTL_EP_ENABLE ioctl.
+ * @caps: Endpoint capabilities.
+ * @limits: Endpoint limits.
+ */
+struct usb_raw_ep_info {
+	__u8				name[USB_RAW_EP_NAME_MAX];
+	__u32				addr;
+	struct usb_raw_ep_caps		caps;
+	struct usb_raw_ep_limits	limits;
+};
+
+/*
+ * struct usb_raw_eps_info - argument for USB_RAW_IOCTL_EPS_INFO ioctl.
+ * eps: Structures that store information about non-control endpoints.
+ */
+struct usb_raw_eps_info {
+	struct usb_raw_ep_info	eps[USB_RAW_EPS_NUM_MAX];
+};
+
+/*
+ * Initializes a Raw Gadget instance.
+ * Accepts a pointer to the usb_raw_init struct as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_INIT		_IOW('U', 0, struct usb_raw_init)
+
+/*
+ * Instructs Raw Gadget to bind to a UDC and start emulating a USB device.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_RUN		_IO('U', 1)
+
+/*
+ * A blocking ioctl that waits for an event and returns fetched event data to
+ * the user.
+ * Accepts a pointer to the usb_raw_event struct.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EVENT_FETCH	_IOR('U', 2, struct usb_raw_event)
+
+/*
+ * Queues an IN (OUT for READ) request as a response to the last setup request
+ * received on endpoint 0 (provided that was an IN (OUT for READ) request), and
+ * waits until the request is completed. Copies received data to user for READ.
+ * Accepts a pointer to the usb_raw_ep_io struct as an argument.
+ * Returns length of transferred data on success or negative error code on
+ * failure.
+ */
+#define USB_RAW_IOCTL_EP0_WRITE		_IOW('U', 3, struct usb_raw_ep_io)
+#define USB_RAW_IOCTL_EP0_READ		_IOWR('U', 4, struct usb_raw_ep_io)
+
+/*
+ * Finds an endpoint that satisfies the parameters specified in the provided
+ * descriptors (address, transfer type, etc.) and enables it.
+ * Accepts a pointer to the usb_raw_ep_descs struct as an argument.
+ * Returns enabled endpoint handle on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_ENABLE		_IOW('U', 5, struct usb_endpoint_descriptor)
+
+/*
+ * Disables specified endpoint.
+ * Accepts endpoint handle as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_DISABLE	_IOW('U', 6, __u32)
+
+/*
+ * Queues an IN (OUT for READ) request as a response to the last setup request
+ * received on endpoint usb_raw_ep_io.ep (provided that was an IN (OUT for READ)
+ * request), and waits until the request is completed. Copies received data to
+ * user for READ.
+ * Accepts a pointer to the usb_raw_ep_io struct as an argument.
+ * Returns length of transferred data on success or negative error code on
+ * failure.
+ */
+#define USB_RAW_IOCTL_EP_WRITE		_IOW('U', 7, struct usb_raw_ep_io)
+#define USB_RAW_IOCTL_EP_READ		_IOWR('U', 8, struct usb_raw_ep_io)
+
+/*
+ * Switches the gadget into the configured state.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_CONFIGURE		_IO('U', 9)
+
+/*
+ * Constrains UDC VBUS power usage.
+ * Accepts current limit in 2 mA units as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_VBUS_DRAW		_IOW('U', 10, __u32)
+
+/*
+ * Fills in the usb_raw_eps_info structure with information about non-control
+ * endpoints available for the currently connected UDC.
+ * Returns the number of available endpoints on success or negative error code
+ * on failure.
+ */
+#define USB_RAW_IOCTL_EPS_INFO		_IOR('U', 11, struct usb_raw_eps_info)
+
+/*
+ * Stalls a pending control request on endpoint 0.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP0_STALL		_IO('U', 12)
+
+/*
+ * Sets or clears halt or wedge status of the endpoint.
+ * Accepts endpoint handle as an argument.
+ * Returns 0 on success or negative error code on failure.
+ */
+#define USB_RAW_IOCTL_EP_SET_HALT	_IOW('U', 13, __u32)
+#define USB_RAW_IOCTL_EP_CLEAR_HALT	_IOW('U', 14, __u32)
+#define USB_RAW_IOCTL_EP_SET_WEDGE	_IOW('U', 15, __u32)
+
+#endif /* _UAPI__LINUX_USB_RAW_GADGET_H */
diff --git a/include/uapi/linux/userfaultfd.h b/include/uapi/linux/userfaultfd.h
index 48f1a7c..39d1147 100644
--- a/include/uapi/linux/userfaultfd.h
+++ b/include/uapi/linux/userfaultfd.h
@@ -19,14 +19,19 @@
  * means the userland is reading).
  */
 #define UFFD_API ((__u64)0xAA)
+#define UFFD_API_REGISTER_MODES (UFFDIO_REGISTER_MODE_MISSING |	\
+				 UFFDIO_REGISTER_MODE_WP |	\
+				 UFFDIO_REGISTER_MODE_MINOR)
 #define UFFD_API_FEATURES (UFFD_FEATURE_EVENT_FORK |		\
 			   UFFD_FEATURE_EVENT_REMAP |		\
-			   UFFD_FEATURE_EVENT_REMOVE |	\
+			   UFFD_FEATURE_EVENT_REMOVE |		\
 			   UFFD_FEATURE_EVENT_UNMAP |		\
 			   UFFD_FEATURE_MISSING_HUGETLBFS |	\
 			   UFFD_FEATURE_MISSING_SHMEM |		\
 			   UFFD_FEATURE_SIGBUS |		\
-			   UFFD_FEATURE_THREAD_ID)
+			   UFFD_FEATURE_THREAD_ID |		\
+			   UFFD_FEATURE_MINOR_HUGETLBFS |	\
+			   UFFD_FEATURE_MINOR_SHMEM)
 #define UFFD_API_IOCTLS				\
 	((__u64)1 << _UFFDIO_REGISTER |		\
 	 (__u64)1 << _UFFDIO_UNREGISTER |	\
@@ -34,10 +39,12 @@
 #define UFFD_API_RANGE_IOCTLS			\
 	((__u64)1 << _UFFDIO_WAKE |		\
 	 (__u64)1 << _UFFDIO_COPY |		\
-	 (__u64)1 << _UFFDIO_ZEROPAGE)
+	 (__u64)1 << _UFFDIO_ZEROPAGE |		\
+	 (__u64)1 << _UFFDIO_CONTINUE)
 #define UFFD_API_RANGE_IOCTLS_BASIC		\
 	((__u64)1 << _UFFDIO_WAKE |		\
-	 (__u64)1 << _UFFDIO_COPY)
+	 (__u64)1 << _UFFDIO_COPY |		\
+	 (__u64)1 << _UFFDIO_CONTINUE)
 
 /*
  * Valid ioctl command number range with this API is from 0x00 to
@@ -52,6 +59,7 @@
 #define _UFFDIO_WAKE			(0x02)
 #define _UFFDIO_COPY			(0x03)
 #define _UFFDIO_ZEROPAGE		(0x04)
+#define _UFFDIO_CONTINUE		(0x07)
 #define _UFFDIO_API			(0x3F)
 
 /* userfaultfd ioctl ids */
@@ -68,6 +76,8 @@
 				      struct uffdio_copy)
 #define UFFDIO_ZEROPAGE		_IOWR(UFFDIO, _UFFDIO_ZEROPAGE,	\
 				      struct uffdio_zeropage)
+#define UFFDIO_CONTINUE		_IOWR(UFFDIO, _UFFDIO_CONTINUE,	\
+				      struct uffdio_continue)
 
 /* read() structure */
 struct uffd_msg {
@@ -122,6 +132,7 @@
 /* flags for UFFD_EVENT_PAGEFAULT */
 #define UFFD_PAGEFAULT_FLAG_WRITE	(1<<0)	/* If this was a write fault */
 #define UFFD_PAGEFAULT_FLAG_WP		(1<<1)	/* If reason is VM_UFFD_WP */
+#define UFFD_PAGEFAULT_FLAG_MINOR	(1<<2)	/* If reason is VM_UFFD_MINOR */
 
 struct uffdio_api {
 	/* userland asks for an API number and the features to enable */
@@ -166,6 +177,13 @@
 	 *
 	 * UFFD_FEATURE_THREAD_ID pid of the page faulted task_struct will
 	 * be returned, if feature is not requested 0 will be returned.
+	 *
+	 * UFFD_FEATURE_MINOR_HUGETLBFS indicates that minor faults
+	 * can be intercepted (via REGISTER_MODE_MINOR) for
+	 * hugetlbfs-backed pages.
+	 *
+	 * UFFD_FEATURE_MINOR_SHMEM indicates the same support as
+	 * UFFD_FEATURE_MINOR_HUGETLBFS, but for shmem-backed pages instead.
 	 */
 #define UFFD_FEATURE_PAGEFAULT_FLAG_WP		(1<<0)
 #define UFFD_FEATURE_EVENT_FORK			(1<<1)
@@ -176,6 +194,8 @@
 #define UFFD_FEATURE_EVENT_UNMAP		(1<<6)
 #define UFFD_FEATURE_SIGBUS			(1<<7)
 #define UFFD_FEATURE_THREAD_ID			(1<<8)
+#define UFFD_FEATURE_MINOR_HUGETLBFS		(1<<9)
+#define UFFD_FEATURE_MINOR_SHMEM		(1<<10)
 	__u64 features;
 
 	__u64 ioctls;
@@ -190,6 +210,7 @@
 	struct uffdio_range range;
 #define UFFDIO_REGISTER_MODE_MISSING	((__u64)1<<0)
 #define UFFDIO_REGISTER_MODE_WP		((__u64)1<<1)
+#define UFFDIO_REGISTER_MODE_MINOR	((__u64)1<<2)
 	__u64 mode;
 
 	/*
@@ -231,4 +252,25 @@
 	__s64 zeropage;
 };
 
+struct uffdio_continue {
+	struct uffdio_range range;
+#define UFFDIO_CONTINUE_MODE_DONTWAKE		((__u64)1<<0)
+	__u64 mode;
+
+	/*
+	 * Fields below here are written by the ioctl and must be at the end:
+	 * the copy_from_user will not read past here.
+	 */
+	__s64 mapped;
+};
+
+/*
+ * Flags for the userfaultfd(2) system call itself.
+ */
+
+/*
+ * Create a userfaultfd that can handle page faults only in user mode.
+ */
+#define UFFD_USER_MODE_ONLY 1
+
 #endif /* _LINUX_USERFAULTFD_H */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index a2669b7..fbe3f82d 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -467,6 +467,10 @@
 	V4L2_MPEG_VIDEO_H264_LEVEL_4_2	= 13,
 	V4L2_MPEG_VIDEO_H264_LEVEL_5_0	= 14,
 	V4L2_MPEG_VIDEO_H264_LEVEL_5_1	= 15,
+	V4L2_MPEG_VIDEO_H264_LEVEL_5_2	= 16,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_0	= 17,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_1	= 18,
+	V4L2_MPEG_VIDEO_H264_LEVEL_6_2	= 19,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA	(V4L2_CID_MPEG_BASE+360)
 #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA	(V4L2_CID_MPEG_BASE+361)
@@ -495,6 +499,7 @@
 	V4L2_MPEG_VIDEO_H264_PROFILE_SCALABLE_HIGH_INTRA	= 14,
 	V4L2_MPEG_VIDEO_H264_PROFILE_STEREO_HIGH		= 15,
 	V4L2_MPEG_VIDEO_H264_PROFILE_MULTIVIEW_HIGH		= 16,
+	V4L2_MPEG_VIDEO_H264_PROFILE_CONSTRAINED_HIGH		= 17,
 };
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_HEIGHT	(V4L2_CID_MPEG_BASE+364)
 #define V4L2_CID_MPEG_VIDEO_H264_VUI_EXT_SAR_WIDTH	(V4L2_CID_MPEG_BASE+365)
@@ -1034,6 +1039,7 @@
 #define V4L2_CID_TEST_PATTERN_GREENR		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 5)
 #define V4L2_CID_TEST_PATTERN_BLUE		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 6)
 #define V4L2_CID_TEST_PATTERN_GREENB		(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 7)
+#define V4L2_CID_UNIT_CELL_SIZE			(V4L2_CID_IMAGE_SOURCE_CLASS_BASE + 8)
 
 
 /* Image processing controls */
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 3210b3c..b1ee5a8 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -70,7 +70,7 @@
  * Common stuff for both V4L1 and V4L2
  * Moved from videodev.h
  */
-#define VIDEO_MAX_FRAME               32
+#define VIDEO_MAX_FRAME               64
 #define VIDEO_MAX_PLANES               8
 
 /*
@@ -421,6 +421,11 @@
 	__u32   denominator;
 };
 
+struct v4l2_area {
+	__u32   width;
+	__u32   height;
+};
+
 /**
   * struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
   *
@@ -914,11 +919,12 @@
 };
 
 /* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
-#define V4L2_BUF_CAP_SUPPORTS_MMAP	(1 << 0)
-#define V4L2_BUF_CAP_SUPPORTS_USERPTR	(1 << 1)
-#define V4L2_BUF_CAP_SUPPORTS_DMABUF	(1 << 2)
-#define V4L2_BUF_CAP_SUPPORTS_REQUESTS	(1 << 3)
-#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_MMAP			(1 << 0)
+#define V4L2_BUF_CAP_SUPPORTS_USERPTR			(1 << 1)
+#define V4L2_BUF_CAP_SUPPORTS_DMABUF			(1 << 2)
+#define V4L2_BUF_CAP_SUPPORTS_REQUESTS			(1 << 3)
+#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS		(1 << 4)
+#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF	(1 << 5)
 
 /**
  * struct v4l2_plane - plane info for multi-planar buffers
@@ -934,7 +940,9 @@
  *			descriptor associated with this plane
  * @data_offset:	offset in the plane to the start of data; usually 0,
  *			unless there is a header in front of the data
- *
+ * @reserved:		few userspace clients and drivers use reserved fields
+ *			and it is up to them how these fields are used. v4l2
+ *			simply copy reserved fields between them.
  * Multi-planar buffers consist of one or more planes, e.g. an YCbCr buffer
  * with two planes can have one plane for Y, and another for interleaved CbCr
  * components. Each plane can reside in a separate memory buffer, or even in
@@ -949,6 +957,7 @@
 		__s32		fd;
 	} m;
 	__u32			data_offset;
+	/* reserved fields used by few userspace clients and drivers */
 	__u32			reserved[11];
 };
 
@@ -1040,6 +1049,8 @@
 #define V4L2_BUF_FLAG_IN_REQUEST		0x00000080
 /* timecode field is valid */
 #define V4L2_BUF_FLAG_TIMECODE			0x00000100
+/* Don't return the capture buffer until OUTPUT timestamp changes */
+#define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF	0x00000200
 /* Buffer is prepared for queuing */
 #define V4L2_BUF_FLAG_PREPARED			0x00000400
 /* Cache handling flags */
@@ -1674,6 +1685,7 @@
 		__u8 __user *p_u8;
 		__u16 __user *p_u16;
 		__u32 __user *p_u32;
+		struct v4l2_area __user *p_area;
 		void __user *ptr;
 	};
 } __attribute__ ((packed));
@@ -1719,6 +1731,7 @@
 	V4L2_CTRL_TYPE_U8	     = 0x0100,
 	V4L2_CTRL_TYPE_U16	     = 0x0101,
 	V4L2_CTRL_TYPE_U32	     = 0x0102,
+	V4L2_CTRL_TYPE_AREA          = 0x0106,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
@@ -1974,6 +1987,7 @@
 #define V4L2_DEC_CMD_STOP        (1)
 #define V4L2_DEC_CMD_PAUSE       (2)
 #define V4L2_DEC_CMD_RESUME      (3)
+#define V4L2_DEC_CMD_FLUSH       (4)
 
 /* Flags for V4L2_DEC_CMD_START */
 #define V4L2_DEC_CMD_START_MUTE_AUDIO	(1 << 0)
diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h
index 585e07b..ecc27a1 100644
--- a/include/uapi/linux/virtio_ids.h
+++ b/include/uapi/linux/virtio_ids.h
@@ -46,5 +46,6 @@
 #define VIRTIO_ID_IOMMU        23 /* virtio IOMMU */
 #define VIRTIO_ID_FS           26 /* virtio filesystem */
 #define VIRTIO_ID_PMEM         27 /* virtio pmem */
+#define VIRTIO_ID_MAC80211_HWSIM 29 /* virtio mac80211-hwsim */
 
 #endif /* _LINUX_VIRTIO_IDS_H */
diff --git a/include/uapi/linux/wireguard.h b/include/uapi/linux/wireguard.h
new file mode 100644
index 0000000..ae88be14
--- /dev/null
+++ b/include/uapi/linux/wireguard.h
@@ -0,0 +1,196 @@
+/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * Documentation
+ * =============
+ *
+ * The below enums and macros are for interfacing with WireGuard, using generic
+ * netlink, with family WG_GENL_NAME and version WG_GENL_VERSION. It defines two
+ * methods: get and set. Note that while they share many common attributes,
+ * these two functions actually accept a slightly different set of inputs and
+ * outputs.
+ *
+ * WG_CMD_GET_DEVICE
+ * -----------------
+ *
+ * May only be called via NLM_F_REQUEST | NLM_F_DUMP. The command should contain
+ * one but not both of:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *
+ * The kernel will then return several messages (NLM_F_MULTI) containing the
+ * following tree of nested items:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *    WGDEVICE_A_PRIVATE_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *    WGDEVICE_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *    WGDEVICE_A_LISTEN_PORT: NLA_U16
+ *    WGDEVICE_A_FWMARK: NLA_U32
+ *    WGDEVICE_A_PEERS: NLA_NESTED
+ *        0: NLA_NESTED
+ *            WGPEER_A_PUBLIC_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *            WGPEER_A_PRESHARED_KEY: NLA_EXACT_LEN, len WG_KEY_LEN
+ *            WGPEER_A_ENDPOINT: NLA_MIN_LEN(struct sockaddr), struct sockaddr_in or struct sockaddr_in6
+ *            WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL: NLA_U16
+ *            WGPEER_A_LAST_HANDSHAKE_TIME: NLA_EXACT_LEN, struct __kernel_timespec
+ *            WGPEER_A_RX_BYTES: NLA_U64
+ *            WGPEER_A_TX_BYTES: NLA_U64
+ *            WGPEER_A_ALLOWEDIPS: NLA_NESTED
+ *                0: NLA_NESTED
+ *                    WGALLOWEDIP_A_FAMILY: NLA_U16
+ *                    WGALLOWEDIP_A_IPADDR: NLA_MIN_LEN(struct in_addr), struct in_addr or struct in6_addr
+ *                    WGALLOWEDIP_A_CIDR_MASK: NLA_U8
+ *                0: NLA_NESTED
+ *                    ...
+ *                0: NLA_NESTED
+ *                    ...
+ *                ...
+ *            WGPEER_A_PROTOCOL_VERSION: NLA_U32
+ *        0: NLA_NESTED
+ *            ...
+ *        ...
+ *
+ * It is possible that all of the allowed IPs of a single peer will not
+ * fit within a single netlink message. In that case, the same peer will
+ * be written in the following message, except it will only contain
+ * WGPEER_A_PUBLIC_KEY and WGPEER_A_ALLOWEDIPS. This may occur several
+ * times in a row for the same peer. It is then up to the receiver to
+ * coalesce adjacent peers. Likewise, it is possible that all peers will
+ * not fit within a single message. So, subsequent peers will be sent
+ * in following messages, except those will only contain WGDEVICE_A_IFNAME
+ * and WGDEVICE_A_PEERS. It is then up to the receiver to coalesce these
+ * messages to form the complete list of peers.
+ *
+ * Since this is an NLA_F_DUMP command, the final message will always be
+ * NLMSG_DONE, even if an error occurs. However, this NLMSG_DONE message
+ * contains an integer error code. It is either zero or a negative error
+ * code corresponding to the errno.
+ *
+ * WG_CMD_SET_DEVICE
+ * -----------------
+ *
+ * May only be called via NLM_F_REQUEST. The command should contain the
+ * following tree of nested items, containing one but not both of
+ * WGDEVICE_A_IFINDEX and WGDEVICE_A_IFNAME:
+ *
+ *    WGDEVICE_A_IFINDEX: NLA_U32
+ *    WGDEVICE_A_IFNAME: NLA_NUL_STRING, maxlen IFNAMSIZ - 1
+ *    WGDEVICE_A_FLAGS: NLA_U32, 0 or WGDEVICE_F_REPLACE_PEERS if all current
+ *                      peers should be removed prior to adding the list below.
+ *    WGDEVICE_A_PRIVATE_KEY: len WG_KEY_LEN, all zeros to remove
+ *    WGDEVICE_A_LISTEN_PORT: NLA_U16, 0 to choose randomly
+ *    WGDEVICE_A_FWMARK: NLA_U32, 0 to disable
+ *    WGDEVICE_A_PEERS: NLA_NESTED
+ *        0: NLA_NESTED
+ *            WGPEER_A_PUBLIC_KEY: len WG_KEY_LEN
+ *            WGPEER_A_FLAGS: NLA_U32, 0 and/or WGPEER_F_REMOVE_ME if the
+ *                            specified peer should not exist at the end of the
+ *                            operation, rather than added/updated and/or
+ *                            WGPEER_F_REPLACE_ALLOWEDIPS if all current allowed
+ *                            IPs of this peer should be removed prior to adding
+ *                            the list below and/or WGPEER_F_UPDATE_ONLY if the
+ *                            peer should only be set if it already exists.
+ *            WGPEER_A_PRESHARED_KEY: len WG_KEY_LEN, all zeros to remove
+ *            WGPEER_A_ENDPOINT: struct sockaddr_in or struct sockaddr_in6
+ *            WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL: NLA_U16, 0 to disable
+ *            WGPEER_A_ALLOWEDIPS: NLA_NESTED
+ *                0: NLA_NESTED
+ *                    WGALLOWEDIP_A_FAMILY: NLA_U16
+ *                    WGALLOWEDIP_A_IPADDR: struct in_addr or struct in6_addr
+ *                    WGALLOWEDIP_A_CIDR_MASK: NLA_U8
+ *                0: NLA_NESTED
+ *                    ...
+ *                0: NLA_NESTED
+ *                    ...
+ *                ...
+ *            WGPEER_A_PROTOCOL_VERSION: NLA_U32, should not be set or used at
+ *                                       all by most users of this API, as the
+ *                                       most recent protocol will be used when
+ *                                       this is unset. Otherwise, must be set
+ *                                       to 1.
+ *        0: NLA_NESTED
+ *            ...
+ *        ...
+ *
+ * It is possible that the amount of configuration data exceeds that of
+ * the maximum message length accepted by the kernel. In that case, several
+ * messages should be sent one after another, with each successive one
+ * filling in information not contained in the prior. Note that if
+ * WGDEVICE_F_REPLACE_PEERS is specified in the first message, it probably
+ * should not be specified in fragments that come after, so that the list
+ * of peers is only cleared the first time but appended after. Likewise for
+ * peers, if WGPEER_F_REPLACE_ALLOWEDIPS is specified in the first message
+ * of a peer, it likely should not be specified in subsequent fragments.
+ *
+ * If an error occurs, NLMSG_ERROR will reply containing an errno.
+ */
+
+#ifndef _WG_UAPI_WIREGUARD_H
+#define _WG_UAPI_WIREGUARD_H
+
+#define WG_GENL_NAME "wireguard"
+#define WG_GENL_VERSION 1
+
+#define WG_KEY_LEN 32
+
+enum wg_cmd {
+	WG_CMD_GET_DEVICE,
+	WG_CMD_SET_DEVICE,
+	__WG_CMD_MAX
+};
+#define WG_CMD_MAX (__WG_CMD_MAX - 1)
+
+enum wgdevice_flag {
+	WGDEVICE_F_REPLACE_PEERS = 1U << 0,
+	__WGDEVICE_F_ALL = WGDEVICE_F_REPLACE_PEERS
+};
+enum wgdevice_attribute {
+	WGDEVICE_A_UNSPEC,
+	WGDEVICE_A_IFINDEX,
+	WGDEVICE_A_IFNAME,
+	WGDEVICE_A_PRIVATE_KEY,
+	WGDEVICE_A_PUBLIC_KEY,
+	WGDEVICE_A_FLAGS,
+	WGDEVICE_A_LISTEN_PORT,
+	WGDEVICE_A_FWMARK,
+	WGDEVICE_A_PEERS,
+	__WGDEVICE_A_LAST
+};
+#define WGDEVICE_A_MAX (__WGDEVICE_A_LAST - 1)
+
+enum wgpeer_flag {
+	WGPEER_F_REMOVE_ME = 1U << 0,
+	WGPEER_F_REPLACE_ALLOWEDIPS = 1U << 1,
+	WGPEER_F_UPDATE_ONLY = 1U << 2,
+	__WGPEER_F_ALL = WGPEER_F_REMOVE_ME | WGPEER_F_REPLACE_ALLOWEDIPS |
+			 WGPEER_F_UPDATE_ONLY
+};
+enum wgpeer_attribute {
+	WGPEER_A_UNSPEC,
+	WGPEER_A_PUBLIC_KEY,
+	WGPEER_A_PRESHARED_KEY,
+	WGPEER_A_FLAGS,
+	WGPEER_A_ENDPOINT,
+	WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL,
+	WGPEER_A_LAST_HANDSHAKE_TIME,
+	WGPEER_A_RX_BYTES,
+	WGPEER_A_TX_BYTES,
+	WGPEER_A_ALLOWEDIPS,
+	WGPEER_A_PROTOCOL_VERSION,
+	__WGPEER_A_LAST
+};
+#define WGPEER_A_MAX (__WGPEER_A_LAST - 1)
+
+enum wgallowedip_attribute {
+	WGALLOWEDIP_A_UNSPEC,
+	WGALLOWEDIP_A_FAMILY,
+	WGALLOWEDIP_A_IPADDR,
+	WGALLOWEDIP_A_CIDR_MASK,
+	__WGALLOWEDIP_A_LAST
+};
+#define WGALLOWEDIP_A_MAX (__WGALLOWEDIP_A_LAST - 1)
+
+#endif /* _WG_UAPI_WIREGUARD_H */
diff --git a/include/uapi/linux/xattr.h b/include/uapi/linux/xattr.h
index c1395b5..1eba026 100644
--- a/include/uapi/linux/xattr.h
+++ b/include/uapi/linux/xattr.h
@@ -17,8 +17,11 @@
 #if __UAPI_DEF_XATTR
 #define __USE_KERNEL_XATTR_DEFS
 
-#define XATTR_CREATE	0x1	/* set value, fail if attr already exists */
-#define XATTR_REPLACE	0x2	/* set value, fail if attr does not exist */
+#define XATTR_CREATE	 0x1	/* set value, fail if attr already exists */
+#define XATTR_REPLACE	 0x2	/* set value, fail if attr does not exist */
+#ifdef __KERNEL__ /* following is kernel internal, colocated for maintenance */
+#define XATTR_NOSECURITY 0x4	/* get value, do not involve security check */
+#endif
 #endif
 
 /* Namespaces */
diff --git a/include/vdso/bits.h b/include/vdso/bits.h
new file mode 100644
index 0000000..6d005a1
--- /dev/null
+++ b/include/vdso/bits.h
@@ -0,0 +1,9 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_BITS_H
+#define __VDSO_BITS_H
+
+#include <vdso/const.h>
+
+#define BIT(nr)			(UL(1) << (nr))
+
+#endif	/* __VDSO_BITS_H */
diff --git a/include/vdso/clocksource.h b/include/vdso/clocksource.h
new file mode 100644
index 0000000..c682e7c
--- /dev/null
+++ b/include/vdso/clocksource.h
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_CLOCKSOURCE_H
+#define __VDSO_CLOCKSOURCE_H
+
+#include <vdso/limits.h>
+
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
+#include <asm/vdso/clocksource.h>
+#endif /* CONFIG_GENERIC_GETTIMEOFDAY */
+
+enum vdso_clock_mode {
+	VDSO_CLOCKMODE_NONE,
+#ifdef CONFIG_GENERIC_GETTIMEOFDAY
+	VDSO_ARCH_CLOCKMODES,
+#endif
+	VDSO_CLOCKMODE_MAX,
+
+	/* Indicator for time namespace VDSO */
+	VDSO_CLOCKMODE_TIMENS = INT_MAX
+};
+
+#endif /* __VDSO_CLOCKSOURCE_H */
diff --git a/include/vdso/const.h b/include/vdso/const.h
new file mode 100644
index 0000000..94b385a
--- /dev/null
+++ b/include/vdso/const.h
@@ -0,0 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_CONST_H
+#define __VDSO_CONST_H
+
+#include <uapi/linux/const.h>
+
+#define UL(x)		(_UL(x))
+#define ULL(x)		(_ULL(x))
+
+#endif /* __VDSO_CONST_H */
diff --git a/include/vdso/datapage.h b/include/vdso/datapage.h
index 2e302c0..6248411 100644
--- a/include/vdso/datapage.h
+++ b/include/vdso/datapage.h
@@ -4,9 +4,20 @@
 
 #ifndef __ASSEMBLY__
 
-#include <linux/bits.h>
-#include <linux/time.h>
-#include <linux/types.h>
+#include <linux/compiler.h>
+#include <uapi/linux/time.h>
+#include <uapi/linux/types.h>
+#include <uapi/asm-generic/errno-base.h>
+
+#include <vdso/bits.h>
+#include <vdso/clocksource.h>
+#include <vdso/ktime.h>
+#include <vdso/limits.h>
+#include <vdso/math64.h>
+#include <vdso/processor.h>
+#include <vdso/time.h>
+#include <vdso/time32.h>
+#include <vdso/time64.h>
 
 #define VDSO_BASES	(CLOCK_TAI + 1)
 #define VDSO_HRES	(BIT(CLOCK_REALTIME)		| \
@@ -84,6 +95,22 @@
  */
 extern struct vdso_data _vdso_data[CS_BASES] __attribute__((visibility("hidden")));
 
+/*
+ * The generic vDSO implementation requires that gettimeofday.h
+ * provides:
+ * - __arch_get_vdso_data(): to get the vdso datapage.
+ * - __arch_get_hw_counter(): to get the hw counter based on the
+ *   clock_mode.
+ * - gettimeofday_fallback(): fallback for gettimeofday.
+ * - clock_gettime_fallback(): fallback for clock_gettime.
+ * - clock_getres_fallback(): fallback for clock_getres.
+ */
+#ifdef ENABLE_COMPAT_VDSO
+#include <asm/vdso/compat_gettimeofday.h>
+#else
+#include <asm/vdso/gettimeofday.h>
+#endif /* ENABLE_COMPAT_VDSO */
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* __VDSO_DATAPAGE_H */
diff --git a/include/vdso/jiffies.h b/include/vdso/jiffies.h
new file mode 100644
index 0000000..2f9d596
--- /dev/null
+++ b/include/vdso/jiffies.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_JIFFIES_H
+#define __VDSO_JIFFIES_H
+
+#include <asm/param.h>			/* for HZ */
+#include <vdso/time64.h>
+
+/* TICK_NSEC is the time between ticks in nsec assuming SHIFTED_HZ */
+#define TICK_NSEC ((NSEC_PER_SEC+HZ/2)/HZ)
+
+#endif /* __VDSO_JIFFIES_H */
diff --git a/include/vdso/ktime.h b/include/vdso/ktime.h
new file mode 100644
index 0000000..a0fd072
--- /dev/null
+++ b/include/vdso/ktime.h
@@ -0,0 +1,16 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_KTIME_H
+#define __VDSO_KTIME_H
+
+#include <vdso/jiffies.h>
+
+/*
+ * The resolution of the clocks. The resolution value is returned in
+ * the clock_getres() system call to give application programmers an
+ * idea of the (in)accuracy of timers. Timer values are rounded up to
+ * this resolution values.
+ */
+#define LOW_RES_NSEC		TICK_NSEC
+#define KTIME_LOW_RES		(LOW_RES_NSEC)
+
+#endif /* __VDSO_KTIME_H */
diff --git a/include/vdso/limits.h b/include/vdso/limits.h
new file mode 100644
index 0000000..0197888
--- /dev/null
+++ b/include/vdso/limits.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_LIMITS_H
+#define __VDSO_LIMITS_H
+
+#define USHRT_MAX	((unsigned short)~0U)
+#define SHRT_MAX	((short)(USHRT_MAX >> 1))
+#define SHRT_MIN	((short)(-SHRT_MAX - 1))
+#define INT_MAX		((int)(~0U >> 1))
+#define INT_MIN		(-INT_MAX - 1)
+#define UINT_MAX	(~0U)
+#define LONG_MAX	((long)(~0UL >> 1))
+#define LONG_MIN	(-LONG_MAX - 1)
+#define ULONG_MAX	(~0UL)
+#define LLONG_MAX	((long long)(~0ULL >> 1))
+#define LLONG_MIN	(-LLONG_MAX - 1)
+#define ULLONG_MAX	(~0ULL)
+#define UINTPTR_MAX	ULONG_MAX
+
+#endif /* __VDSO_LIMITS_H */
diff --git a/include/vdso/math64.h b/include/vdso/math64.h
new file mode 100644
index 0000000..7da703e
--- /dev/null
+++ b/include/vdso/math64.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_MATH64_H
+#define __VDSO_MATH64_H
+
+static __always_inline u32
+__iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder)
+{
+	u32 ret = 0;
+
+	while (dividend >= divisor) {
+		/* The following asm() prevents the compiler from
+		   optimising this loop into a modulo operation.  */
+		asm("" : "+rm"(dividend));
+
+		dividend -= divisor;
+		ret++;
+	}
+
+	*remainder = dividend;
+
+	return ret;
+}
+
+#endif /* __VDSO_MATH64_H */
diff --git a/include/vdso/processor.h b/include/vdso/processor.h
new file mode 100644
index 0000000..fbe8265
--- /dev/null
+++ b/include/vdso/processor.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 ARM Ltd.
+ */
+#ifndef __VDSO_PROCESSOR_H
+#define __VDSO_PROCESSOR_H
+
+#ifndef __ASSEMBLY__
+
+#include <asm/vdso/processor.h>
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* __VDSO_PROCESSOR_H */
diff --git a/include/vdso/time.h b/include/vdso/time.h
new file mode 100644
index 0000000..e5afa84
--- /dev/null
+++ b/include/vdso/time.h
@@ -0,0 +1,5 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME_H
+#define __VDSO_TIME_H
+
+#endif /* __VDSO_TIME_H */
diff --git a/include/vdso/time32.h b/include/vdso/time32.h
new file mode 100644
index 0000000..fdf56f9
--- /dev/null
+++ b/include/vdso/time32.h
@@ -0,0 +1,17 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME32_H
+#define __VDSO_TIME32_H
+
+typedef s32		old_time32_t;
+
+struct old_timespec32 {
+	old_time32_t	tv_sec;
+	s32		tv_nsec;
+};
+
+struct old_timeval32 {
+	old_time32_t	tv_sec;
+	s32		tv_usec;
+};
+
+#endif /* __VDSO_TIME32_H */
diff --git a/include/vdso/time64.h b/include/vdso/time64.h
new file mode 100644
index 0000000..9d43c3f5
--- /dev/null
+++ b/include/vdso/time64.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __VDSO_TIME64_H
+#define __VDSO_TIME64_H
+
+/* Parameters used to convert the timespec values: */
+#define MSEC_PER_SEC	1000L
+#define USEC_PER_MSEC	1000L
+#define NSEC_PER_USEC	1000L
+#define NSEC_PER_MSEC	1000000L
+#define USEC_PER_SEC	1000000L
+#define NSEC_PER_SEC	1000000000L
+#define FSEC_PER_SEC	1000000000000000LL
+
+#endif /* __VDSO_TIME64_H */
diff --git a/init/Kconfig b/init/Kconfig
index f23e90d..3fda274 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -9,6 +9,23 @@
 	default ARCH_DEFCONFIG
 	default "arch/$(ARCH)/defconfig"
 
+config CC_VERSION_TEXT
+	string
+	default "$(CC_VERSION_TEXT)"
+	help
+	  This is used in unclear ways:
+
+	  - Re-run Kconfig when the compiler is updated
+	    The 'default' property references the environment variable,
+	    CC_VERSION_TEXT so it is recorded in include/config/auto.conf.cmd.
+	    When the compiler is updated, Kconfig will be invoked.
+
+	  - Ensure full rebuild when the compier is updated
+	    include/linux/kconfig.h contains this option in the comment line so
+	    fixdep adds include/config/cc/version/text.h into the auto-generated
+	    dependency. When the compiler is updated, syncconfig will touch it
+	    and then every file will be rebuilt.
+
 config CC_IS_GCC
 	def_bool $(success,$(CC) --version | head -n 1 | grep -q gcc)
 
@@ -27,6 +44,10 @@
 	int
 	default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
 
+config LLD_VERSION
+	int
+	default $(shell,$(srctree)/scripts/lld-version.sh $(LD))
+
 config CC_CAN_LINK
 	def_bool $(success,$(srctree)/scripts/cc-can-link.sh $(CC))
 
@@ -1199,6 +1220,18 @@
 
 endif
 
+config BOOT_CONFIG
+	bool "Boot config support"
+	depends on BLK_DEV_INITRD
+	help
+	  Extra boot config allows system admin to pass a config file as
+	  complemental extension of kernel cmdline when booting.
+	  The boot config file must be attached at the end of initramfs
+	  with checksum, size and magic word.
+	  See <file:Documentation/admin-guide/bootconfig.rst> for details.
+
+	  If unsure, say Y.
+
 choice
 	prompt "Compiler optimization level"
 	default CC_OPTIMIZE_FOR_PERFORMANCE
@@ -1530,6 +1563,11 @@
 	  applications use these syscalls, you can disable this option to save
 	  space.
 
+config HAVE_ARCH_USERFAULTFD_MINOR
+	bool
+	help
+	  Arch has userfaultfd minor fault support
+
 config MEMBARRIER
 	bool "Enable membarrier() system call" if EXPERT
 	default y
@@ -2178,11 +2216,24 @@
 
 	  If unsure, or if you need to build out-of-tree modules, say N.
 
+config UNUSED_KSYMS_WHITELIST
+	string "Whitelist of symbols to keep in ksymtab"
+	depends on TRIM_UNUSED_KSYMS
+	help
+	  By default, all unused exported symbols will be un-exported from the
+	  build when TRIM_UNUSED_KSYMS is selected.
+
+	  UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept
+	  exported at all times, even in absence of in-tree users. The value to
+	  set here is the path to a text file containing the list of symbols,
+	  one per line. The path can be absolute, or relative to the kernel
+	  source tree.
+
 endif # MODULES
 
 config MODULES_TREE_LOOKUP
 	def_bool y
-	depends on PERF_EVENTS || TRACING
+	depends on PERF_EVENTS || TRACING || CFI_CLANG
 
 config INIT_ALL_POSSIBLE
 	bool
@@ -2224,3 +2275,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..010d858
--- /dev/null
+++ b/init/Kconfig.gki
@@ -0,0 +1,220 @@
+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 DRM_TTM if (HAS_IOMEM && DRM)
+	select VIDEOMODE_HELPERS
+	select WANT_DEV_COREDUMP
+	select INTERVAL_TREE
+	help
+	  Dummy config option used to enable hidden DRM configs.
+	  These are normally selected implicitly 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
+	select REGMAP_MMIO
+	help
+	  Dummy config option used to enable hidden regmap configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_CRYPTO_CONFIGS
+	bool "Hidden CRYPTO configs needed for GKI"
+	select CRYPTO_ENGINE
+	help
+	  Dummy config option used to enable hidden CRYPTO configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_SND_CONFIGS
+	bool "Hidden SND configs needed for GKI"
+	select SND_VMASTER
+	select SND_PCM_ELD
+	select SND_JACK
+	select SND_JACK_INPUT_DEV
+	help
+	  Dummy config option used to enable hidden SND configs.
+	  These are normally selected implicitly 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)
+	select SND_PCM_IEC958
+	select SND_SOC_COMPRESS if (SND_SOC && SND)
+	select SND_SOC_TOPOLOGY if (SND_SOC && SND)
+	help
+	  Dummy config option used to enable hidden SND_SOC configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_MMC_CONFIGS
+	bool "Hidden MMC configs needed for GKI"
+	select MMC_SDHCI_IO_ACCESSORS if (MMC_SDHCI)
+	help
+	  Dummy config option used to enable hidden MMC configs.
+	  These are normally selected implicitly 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 implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_QCOM_CONFIGS
+	bool "Hidden QCOM configs needed for GKI"
+	select QCOM_SMEM_STATE
+	select QCOM_GDSC if (ARCH_QCOM)
+	select PINCTRL_MSM if (PINCTRL && ARCH_QCOM)
+	select IOMMU_IO_PGTABLE_LPAE if (ARCH_QCOM)
+
+	help
+	  Dummy config option used to enable hidden QCOM configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_MEDIA_CONFIGS
+	bool "Hidden Media configs needed for GKI"
+	select VIDEOBUF2_CORE
+	select MEDIA_SUPPORT
+	select FRAME_VECTOR
+	select VIDEOBUF2_DMA_CONTIG
+	select CEC_CORE
+	select CEC_NOTIFIER
+	select CEC_PIN
+	help
+	  Dummy config option used to enable hidden media configs.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_VIRTUAL_CONFIGS
+	bool "Hidden Virtual configs needed for GKI"
+	select HVC_DRIVER
+	help
+	  Dummy config option used to enable hidden virtual device configs.
+	  These are normally selected implicitly 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
+	  Placeholder 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.
+
+config GKI_HIDDEN_USB_CONFIGS
+	bool "Hiddel USB configurations needed for GKI"
+	select USB_PHY
+	help
+	  Dummy config option used to enable all USB related hidden configs.
+	  These configurations are usually only selected by another config
+	  option or a combination of them.
+
+	  If you are not building a kernel to be used for a variety of
+	  out-of-kernel build USB drivers, say N here.
+
+config GKI_HIDDEN_SOC_BUS_CONFIGS
+	bool "Hidden SoC bus configuration needed for GKI"
+	select SOC_BUS
+	  help
+	    Dummy config option used to enable SOC_BUS hidden Kconfig.
+	    The configuration is required for SoCs to register themselves to the bus.
+
+	    If you are not building a kernel to be used for a variety of SoCs and
+	    out-of-tree drivers, say N here.
+
+config GKI_HIDDEN_RPMSG_CONFIGS
+	bool "Hidden RPMSG configuration needed for GKI"
+	select RPMSG
+	help
+	  Dummy config option used to enable the hidden RPMSG config.
+	  This configuration is usually only selected by another config
+	  option or a combination of them.
+
+	  If you are not building a kernel to be used for a variety of
+	  out-of-kernel build RPMSG drivers, say N here.
+
+config GKI_HIDDEN_GPU_CONFIGS
+	bool "Hidden GPU configuration needed for GKI"
+	select TRACE_GPU_MEM
+	help
+	  Dummy config option used to enable the hidden GPU config.
+	  These are normally selected implicitly when a module
+	  that relies on it is configured.
+
+config GKI_HIDDEN_IRQ_CONFIGS
+	bool "Hidden IRQ configuration needed for GKI"
+	select GENERIC_IRQ_CHIP
+	help
+	  Dummy config option used to enable GENERIC_IRQ_CHIP hidden
+	  config, required by various SoC platforms. This is usually
+	  selected by ARCH_*.
+
+config GKI_HIDDEN_HYPERVISOR_CONFIGS
+	bool "Hidden hypervisor configuration needed for GKI"
+	select SYS_HYPERVISOR
+	help
+	  Dummy config option used to enable the SYS_HYPERVISOR hidden
+	  config, required by various SoC platforms. This is usually
+	  selected by XEN or S390.
+
+config GKI_HIDDEN_MM_CONFIGS
+	bool "Hidden MM configuration needed for GKI"
+	select MEMORY_BALLOON
+	select BALLOON_COMPACTION
+	select PAGE_REPORTING
+	help
+	  Dummy config option used to enable hidden MM configs,
+	  currently required for VIRTIO_BALLOON
+
+# 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_CRYPTO_CONFIGS
+	select GKI_HIDDEN_DRM_CONFIGS
+	select GKI_HIDDEN_REGMAP_CONFIGS
+	select GKI_HIDDEN_SND_CONFIGS
+	select GKI_HIDDEN_SND_SOC_CONFIGS
+	select GKI_HIDDEN_MMC_CONFIGS
+	select GKI_HIDDEN_GPIO_CONFIGS
+	select GKI_HIDDEN_QCOM_CONFIGS
+	select GKI_LEGACY_WEXT_ALLCONFIG
+	select GKI_HIDDEN_MEDIA_CONFIGS
+	select GKI_HIDDEN_VIRTUAL_CONFIGS
+	select GKI_HIDDEN_USB_CONFIGS
+	select GKI_HIDDEN_SOC_BUS_CONFIGS
+	select GKI_HIDDEN_RPMSG_CONFIGS
+	select GKI_HIDDEN_GPU_CONFIGS
+	select GKI_HIDDEN_IRQ_CONFIGS
+	select GKI_HIDDEN_HYPERVISOR_CONFIGS
+	select GKI_HIDDEN_MM_CONFIGS
+	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/Makefile b/init/Makefile
index 6246a06..57499b1 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -35,4 +35,4 @@
 	@$($(quiet)chk_compile.h)
 	$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@	\
 	"$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)"	\
-	"$(CONFIG_PREEMPT_RT)" "$(CC) $(KBUILD_CFLAGS)"
+	"$(CONFIG_PREEMPT_RT)" $(CONFIG_CC_VERSION_TEXT) "$(LD)"
diff --git a/init/init_task.c b/init/init_task.c
index 5d8359c..c8b0dc0 100644
--- a/init/init_task.c
+++ b/init/init_task.c
@@ -11,6 +11,7 @@
 #include <linux/mm.h>
 #include <linux/audit.h>
 #include <linux/numa.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <linux/uaccess.h>
@@ -183,9 +184,19 @@
 #ifdef CONFIG_SECURITY
 	.security	= NULL,
 #endif
+#ifdef CONFIG_SECCOMP_FILTER
+	.seccomp	= { .filter_count = ATOMIC_INIT(0) },
+#endif
 };
 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 e6a1fb1..073f7629 100644
--- a/init/main.c
+++ b/init/main.c
@@ -28,6 +28,7 @@
 #include <linux/initrd.h>
 #include <linux/memblock.h>
 #include <linux/acpi.h>
+#include <linux/bootconfig.h>
 #include <linux/console.h>
 #include <linux/nmi.h>
 #include <linux/percpu.h>
@@ -39,6 +40,7 @@
 #include <linux/security.h>
 #include <linux/smp.h>
 #include <linux/profile.h>
+#include <linux/kfence.h>
 #include <linux/rcupdate.h>
 #include <linux/moduleparam.h>
 #include <linux/kallsyms.h>
@@ -137,8 +139,19 @@
 char *saved_command_line;
 /* Command line for parameter parsing */
 static char *static_command_line;
-/* Command line for per-initcall parameter parsing */
-static char *initcall_command_line;
+/* Untouched extra command line */
+static char *extra_command_line;
+/* Extra init arguments */
+static char *extra_init_args;
+
+#ifdef CONFIG_BOOT_CONFIG
+/* Is bootconfig on command line? */
+static bool bootconfig_found;
+static bool initargs_found;
+#else
+# define bootconfig_found false
+# define initargs_found false
+#endif
 
 static char *execute_command;
 static char *ramdisk_execute_command;
@@ -246,6 +259,220 @@
 
 early_param("loglevel", loglevel);
 
+#ifdef CONFIG_BLK_DEV_INITRD
+static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+{
+	u32 size, csum;
+	char *data;
+	u32 *hdr;
+	int i;
+
+	if (!initrd_end)
+		return NULL;
+
+	data = (char *)initrd_end - BOOTCONFIG_MAGIC_LEN;
+	/*
+	 * Since Grub may align the size of initrd to 4, we must
+	 * check the preceding 3 bytes as well.
+	 */
+	for (i = 0; i < 4; i++) {
+		if (!memcmp(data, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN))
+			goto found;
+		data--;
+	}
+	return NULL;
+
+found:
+	hdr = (u32 *)(data - 8);
+	size = hdr[0];
+	csum = hdr[1];
+
+	data = ((void *)hdr) - size;
+	if ((unsigned long)data < initrd_start) {
+		pr_err("bootconfig size %d is greater than initrd size %ld\n",
+			size, initrd_end - initrd_start);
+		return NULL;
+	}
+
+	/* Remove bootconfig from initramfs/initrd */
+	initrd_end = (unsigned long)data;
+	if (_size)
+		*_size = size;
+	if (_csum)
+		*_csum = csum;
+
+	return data;
+}
+#else
+static void * __init get_boot_config_from_initrd(u32 *_size, u32 *_csum)
+{
+	return NULL;
+}
+#endif
+
+#ifdef CONFIG_BOOT_CONFIG
+
+char xbc_namebuf[XBC_KEYLEN_MAX] __initdata;
+
+#define rest(dst, end) ((end) > (dst) ? (end) - (dst) : 0)
+
+static int __init xbc_snprint_cmdline(char *buf, size_t size,
+				      struct xbc_node *root)
+{
+	struct xbc_node *knode, *vnode;
+	char *end = buf + size;
+	const char *val;
+	int ret;
+
+	xbc_node_for_each_key_value(root, knode, val) {
+		ret = xbc_node_compose_key_after(root, knode,
+					xbc_namebuf, XBC_KEYLEN_MAX);
+		if (ret < 0)
+			return ret;
+
+		vnode = xbc_node_get_child(knode);
+		if (!vnode) {
+			ret = snprintf(buf, rest(buf, end), "%s ", xbc_namebuf);
+			if (ret < 0)
+				return ret;
+			buf += ret;
+			continue;
+		}
+		xbc_array_for_each_value(vnode, val) {
+			ret = snprintf(buf, rest(buf, end), "%s=\"%s\" ",
+				       xbc_namebuf, val);
+			if (ret < 0)
+				return ret;
+			buf += ret;
+		}
+	}
+
+	return buf - (end - size);
+}
+#undef rest
+
+/* Make an extra command line under given key word */
+static char * __init xbc_make_cmdline(const char *key)
+{
+	struct xbc_node *root;
+	char *new_cmdline;
+	int ret, len = 0;
+
+	root = xbc_find_node(key);
+	if (!root)
+		return NULL;
+
+	/* Count required buffer size */
+	len = xbc_snprint_cmdline(NULL, 0, root);
+	if (len <= 0)
+		return NULL;
+
+	new_cmdline = memblock_alloc(len + 1, SMP_CACHE_BYTES);
+	if (!new_cmdline) {
+		pr_err("Failed to allocate memory for extra kernel cmdline.\n");
+		return NULL;
+	}
+
+	ret = xbc_snprint_cmdline(new_cmdline, len + 1, root);
+	if (ret < 0 || ret > len) {
+		pr_err("Failed to print extra kernel cmdline.\n");
+		return NULL;
+	}
+
+	return new_cmdline;
+}
+
+static int __init bootconfig_params(char *param, char *val,
+				    const char *unused, void *arg)
+{
+	if (strcmp(param, "bootconfig") == 0) {
+		bootconfig_found = true;
+	}
+	return 0;
+}
+
+static void __init setup_boot_config(const char *cmdline)
+{
+	static char tmp_cmdline[COMMAND_LINE_SIZE] __initdata;
+	const char *msg;
+	int pos;
+	u32 size, csum;
+	char *data, *copy, *err;
+	int ret;
+
+	/* Cut out the bootconfig data even if we have no bootconfig option */
+	data = get_boot_config_from_initrd(&size, &csum);
+
+	strlcpy(tmp_cmdline, boot_command_line, COMMAND_LINE_SIZE);
+	err = parse_args("bootconfig", tmp_cmdline, NULL, 0, 0, 0, NULL,
+			 bootconfig_params);
+
+	if (IS_ERR(err) || !bootconfig_found)
+		return;
+
+	/* parse_args() stops at '--' and returns an address */
+	if (err)
+		initargs_found = true;
+
+	if (!data) {
+		pr_err("'bootconfig' found on command line, but no bootconfig found\n");
+		return;
+	}
+
+	if (size >= XBC_DATA_MAX) {
+		pr_err("bootconfig size %d greater than max size %d\n",
+			size, XBC_DATA_MAX);
+		return;
+	}
+
+	if (xbc_calc_checksum(data, size) != csum) {
+		pr_err("bootconfig checksum failed\n");
+		return;
+	}
+
+	copy = memblock_alloc(size + 1, SMP_CACHE_BYTES);
+	if (!copy) {
+		pr_err("Failed to allocate memory for bootconfig\n");
+		return;
+	}
+
+	memcpy(copy, data, size);
+	copy[size] = '\0';
+
+	ret = xbc_init(copy, &msg, &pos);
+	if (ret < 0) {
+		if (pos < 0)
+			pr_err("Failed to init bootconfig: %s.\n", msg);
+		else
+			pr_err("Failed to parse bootconfig: %s at %d.\n",
+				msg, pos);
+	} else {
+		pr_info("Load bootconfig: %d bytes %d nodes\n", size, ret);
+		/* keys starting with "kernel." are passed via cmdline */
+		extra_command_line = xbc_make_cmdline("kernel");
+		/* Also, "init." keys are init arguments */
+		extra_init_args = xbc_make_cmdline("init");
+	}
+	return;
+}
+
+#else
+
+static void __init setup_boot_config(const char *cmdline)
+{
+	/* Remove bootconfig data from initrd */
+	get_boot_config_from_initrd(NULL, NULL);
+}
+
+static int __init warn_bootconfig(char *str)
+{
+	pr_warn("WARNING: 'bootconfig' found on the kernel command line but CONFIG_BOOTCONFIG is not set.\n");
+	return 0;
+}
+early_param("bootconfig", warn_bootconfig);
+
+#endif
+
 /* Change NUL term back to "=", to make "param" the whole string. */
 static int __init repair_env_string(char *param, char *val,
 				    const char *unused, void *arg)
@@ -375,22 +602,51 @@
  */
 static void __init setup_command_line(char *command_line)
 {
-	size_t len = strlen(boot_command_line) + 1;
+	size_t len, xlen = 0, ilen = 0;
 
-	saved_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
+	if (extra_command_line)
+		xlen = strlen(extra_command_line);
+	if (extra_init_args)
+		ilen = strlen(extra_init_args) + 4; /* for " -- " */
+
+	len = xlen + strlen(boot_command_line) + 1;
+
+	saved_command_line = memblock_alloc(len + ilen, SMP_CACHE_BYTES);
 	if (!saved_command_line)
-		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
-
-	initcall_command_line =	memblock_alloc(len, SMP_CACHE_BYTES);
-	if (!initcall_command_line)
-		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
+		panic("%s: Failed to allocate %zu bytes\n", __func__, len + ilen);
 
 	static_command_line = memblock_alloc(len, SMP_CACHE_BYTES);
 	if (!static_command_line)
 		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
 
-	strcpy(saved_command_line, boot_command_line);
-	strcpy(static_command_line, command_line);
+	if (xlen) {
+		/*
+		 * We have to put extra_command_line before boot command
+		 * lines because there could be dashes (separator of init
+		 * command line) in the command lines.
+		 */
+		strcpy(saved_command_line, extra_command_line);
+		strcpy(static_command_line, extra_command_line);
+	}
+	strcpy(saved_command_line + xlen, boot_command_line);
+	strcpy(static_command_line + xlen, command_line);
+
+	if (ilen) {
+		/*
+		 * Append supplemental init boot args to saved_command_line
+		 * so that user can check what command line options passed
+		 * to init.
+		 */
+		len = strlen(saved_command_line);
+		if (initargs_found) {
+			saved_command_line[len++] = ' ';
+		} else {
+			strcpy(saved_command_line + len, " -- ");
+			len += 4;
+		}
+
+		strcpy(saved_command_line + len, extra_init_args);
+	}
 }
 
 /*
@@ -526,14 +782,16 @@
 {
 	const char *stack;
 
-	if (IS_ENABLED(CONFIG_INIT_STACK_ALL))
-		stack = "all";
+	if (IS_ENABLED(CONFIG_INIT_STACK_ALL_PATTERN))
+		stack = "all(pattern)";
+	else if (IS_ENABLED(CONFIG_INIT_STACK_ALL_ZERO))
+		stack = "all(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL))
-		stack = "byref_all";
+		stack = "byref_all(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF))
-		stack = "byref";
+		stack = "byref(zero)";
 	else if (IS_ENABLED(CONFIG_GCC_PLUGIN_STRUCTLEAK_USER))
-		stack = "__user";
+		stack = "__user(zero)";
 	else
 		stack = "off";
 
@@ -555,6 +813,7 @@
 	 */
 	page_ext_init_flatmem();
 	init_debug_pagealloc();
+	kfence_alloc_pool();
 	report_meminit();
 	mem_init();
 	kmem_cache_init();
@@ -597,6 +856,7 @@
 	pr_notice("%s", linux_banner);
 	early_security_init();
 	setup_arch(&command_line);
+	setup_boot_config(command_line);
 	setup_command_line(command_line);
 	setup_nr_cpu_ids();
 	setup_per_cpu_areas();
@@ -606,7 +866,7 @@
 	build_all_zonelists(NULL);
 	page_alloc_init();
 
-	pr_notice("Kernel command line: %s\n", boot_command_line);
+	pr_notice("Kernel command line: %s\n", saved_command_line);
 	/* parameters may set static keys */
 	jump_label_init();
 	parse_early_param();
@@ -617,6 +877,9 @@
 	if (!IS_ERR_OR_NULL(after_dashes))
 		parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
 			   NULL, set_init_arg);
+	if (extra_init_args)
+		parse_args("Setting extra init args", extra_init_args,
+			   NULL, 0, -1, -1, NULL, set_init_arg);
 
 	/*
 	 * These use large bootmem allocations and must precede
@@ -680,6 +943,7 @@
 	hrtimers_init();
 	softirq_init();
 	timekeeping_init();
+	kfence_init();
 
 	/*
 	 * For best initial stack canary entropy, prepare it after:
@@ -993,13 +1257,12 @@
 	"late",
 };
 
-static void __init do_initcall_level(int level)
+static void __init do_initcall_level(int level, char *command_line)
 {
 	initcall_entry_t *fn;
 
-	strcpy(initcall_command_line, saved_command_line);
 	parse_args(initcall_level_names[level],
-		   initcall_command_line, __start___param,
+		   command_line, __start___param,
 		   __stop___param - __start___param,
 		   level, level,
 		   NULL, &repair_env_string);
@@ -1012,9 +1275,20 @@
 static void __init do_initcalls(void)
 {
 	int level;
+	size_t len = strlen(saved_command_line) + 1;
+	char *command_line;
 
-	for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++)
-		do_initcall_level(level);
+	command_line = kzalloc(len, GFP_KERNEL);
+	if (!command_line)
+		panic("%s: Failed to allocate %zu bytes\n", __func__, len);
+
+	for (level = 0; level < ARRAY_SIZE(initcall_levels) - 1; level++) {
+		/* Parser modifies command_line, restore it each time */
+		strcpy(command_line, saved_command_line);
+		do_initcall_level(level, command_line);
+	}
+
+	kfree(command_line);
 }
 
 /*
diff --git a/kernel/.gitignore b/kernel/.gitignore
index 0f0dba6..7655681 100644
--- a/kernel/.gitignore
+++ b/kernel/.gitignore
@@ -2,6 +2,7 @@
 /config_data
 # Generated files
 #
+config_data
 kheaders.md5
 timeconst.h
 hz.bc
diff --git a/kernel/Makefile b/kernel/Makefile
index d038b0d..54a4b33 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -35,6 +35,9 @@
 # cond_syscall is currently not LTO compatible
 CFLAGS_sys_ni.o = $(DISABLE_LTO)
 
+# Don't instrument error handlers
+CFLAGS_REMOVE_cfi.o := $(CC_FLAGS_CFI)
+
 obj-y += sched/
 obj-y += locking/
 obj-y += power/
@@ -101,6 +104,8 @@
 obj-$(CONFIG_IRQ_WORK) += irq_work.o
 obj-$(CONFIG_CPU_PM) += cpu_pm.o
 obj-$(CONFIG_BPF) += bpf/
+obj-$(CONFIG_SHADOW_CALL_STACK) += scs.o
+obj-$(CONFIG_CFI_CLANG) += cfi.o
 
 obj-$(CONFIG_PERF_EVENTS) += events/
 
diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c
index 1238ef9..97105ca 100644
--- a/kernel/bpf/core.c
+++ b/kernel/bpf/core.c
@@ -795,6 +795,14 @@
 	module_memfree(addr);
 }
 
+#if IS_ENABLED(CONFIG_BPF_JIT) && IS_ENABLED(CONFIG_CFI_CLANG)
+bool __weak arch_bpf_jit_check_func(const struct bpf_prog *prog)
+{
+	return true;
+}
+EXPORT_SYMBOL_GPL(arch_bpf_jit_check_func);
+#endif
+
 struct bpf_binary_header *
 bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr,
 		     unsigned int alignment,
@@ -821,6 +829,7 @@
 	/* Fill space with illegal/arch-dep instructions. */
 	bpf_fill_ill_insns(hdr, size);
 
+	bpf_jit_set_header_magic(hdr);
 	hdr->pages = pages;
 	hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)),
 		     PAGE_SIZE - sizeof(*hdr));
@@ -2079,6 +2088,7 @@
 const struct bpf_func_proto bpf_get_smp_processor_id_proto __weak;
 const struct bpf_func_proto bpf_get_numa_node_id_proto __weak;
 const struct bpf_func_proto bpf_ktime_get_ns_proto __weak;
+const struct bpf_func_proto bpf_ktime_get_boot_ns_proto __weak;
 
 const struct bpf_func_proto bpf_get_current_pid_tgid_proto __weak;
 const struct bpf_func_proto bpf_get_current_uid_gid_proto __weak;
diff --git a/kernel/bpf/helpers.c b/kernel/bpf/helpers.c
index a77d281..e178f18 100644
--- a/kernel/bpf/helpers.c
+++ b/kernel/bpf/helpers.c
@@ -148,7 +148,19 @@
 
 const struct bpf_func_proto bpf_ktime_get_ns_proto = {
 	.func		= bpf_ktime_get_ns,
-	.gpl_only	= true,
+	.gpl_only	= false,
+	.ret_type	= RET_INTEGER,
+};
+
+BPF_CALL_0(bpf_ktime_get_boot_ns)
+{
+	/* NMI safe access to clock boottime */
+	return ktime_get_boot_fast_ns();
+}
+
+const struct bpf_func_proto bpf_ktime_get_boot_ns_proto = {
+	.func		= bpf_ktime_get_boot_ns,
+	.gpl_only	= false,
 	.ret_type	= RET_INTEGER,
 };
 
diff --git a/kernel/cfi.c b/kernel/cfi.c
new file mode 100644
index 0000000..3141974
--- /dev/null
+++ b/kernel/cfi.c
@@ -0,0 +1,317 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Clang Control Flow Integrity (CFI) error and slowpath handling.
+ *
+ * Copyright (C) 2019 Google LLC
+ */
+
+#include <linux/gfp.h>
+#include <linux/hardirq.h>
+#include <linux/module.h>
+#include <linux/mutex.h>
+#include <linux/printk.h>
+#include <linux/ratelimit.h>
+#include <linux/rcupdate.h>
+#include <asm/cacheflush.h>
+#include <asm/set_memory.h>
+
+/* Compiler-defined handler names */
+#ifdef CONFIG_CFI_PERMISSIVE
+#define cfi_failure_handler	__ubsan_handle_cfi_check_fail
+#define cfi_slowpath_handler	__cfi_slowpath_diag
+#else /* enforcing */
+#define cfi_failure_handler	__ubsan_handle_cfi_check_fail_abort
+#define cfi_slowpath_handler	__cfi_slowpath
+#endif /* CONFIG_CFI_PERMISSIVE */
+
+static inline void handle_cfi_failure(void *ptr)
+{
+	if (IS_ENABLED(CONFIG_CFI_PERMISSIVE))
+		WARN_RATELIMIT(1, "CFI failure (target: %pS):\n", ptr);
+	else
+		panic("CFI failure (target: %pS)\n", ptr);
+}
+
+#ifdef CONFIG_MODULES
+#ifdef CONFIG_CFI_CLANG_SHADOW
+struct shadow_range {
+	/* Module address range */
+	unsigned long mod_min_addr;
+	unsigned long mod_max_addr;
+	/* Module page range */
+	unsigned long min_page;
+	unsigned long max_page;
+};
+
+#define SHADOW_ORDER	2
+#define SHADOW_PAGES	(1 << SHADOW_ORDER)
+#define SHADOW_SIZE \
+	((SHADOW_PAGES * PAGE_SIZE - sizeof(struct shadow_range)) / sizeof(u16))
+#define SHADOW_INVALID	0xFFFF
+
+struct cfi_shadow {
+	/* Page range covered by the shadow */
+	struct shadow_range r;
+	/* Page offsets to __cfi_check functions in modules */
+	u16 shadow[SHADOW_SIZE];
+};
+
+static DEFINE_MUTEX(shadow_update_lock);
+static struct cfi_shadow __rcu *cfi_shadow __read_mostly;
+
+static inline int ptr_to_shadow(const struct cfi_shadow *s, unsigned long ptr)
+{
+	unsigned long index;
+	unsigned long page = ptr >> PAGE_SHIFT;
+
+	if (unlikely(page < s->r.min_page))
+		return -1; /* Outside of module area */
+
+	index = page - s->r.min_page;
+
+	if (index >= SHADOW_SIZE)
+		return -1; /* Cannot be addressed with shadow */
+
+	return (int)index;
+}
+
+static inline unsigned long shadow_to_ptr(const struct cfi_shadow *s,
+	int index)
+{
+	if (unlikely(index < 0 || index >= SHADOW_SIZE))
+		return 0;
+
+	if (unlikely(s->shadow[index] == SHADOW_INVALID))
+		return 0;
+
+	return (s->r.min_page + s->shadow[index]) << PAGE_SHIFT;
+}
+
+static inline unsigned long shadow_to_page(const struct cfi_shadow *s,
+	int index)
+{
+	if (unlikely(index < 0 || index >= SHADOW_SIZE))
+		return 0;
+
+	return (s->r.min_page + index) << PAGE_SHIFT;
+}
+
+static void prepare_next_shadow(const struct cfi_shadow __rcu *prev,
+		struct cfi_shadow *next)
+{
+	int i, index, check;
+
+	/* Mark everything invalid */
+	memset(next->shadow, 0xFF, sizeof(next->shadow));
+
+	if (!prev)
+		return; /* No previous shadow */
+
+	/* If the base address didn't change, update is not needed */
+	if (prev->r.min_page == next->r.min_page) {
+		memcpy(next->shadow, prev->shadow, sizeof(next->shadow));
+		return;
+	}
+
+	/* Convert the previous shadow to the new address range */
+	for (i = 0; i < SHADOW_SIZE; ++i) {
+		if (prev->shadow[i] == SHADOW_INVALID)
+			continue;
+
+		index = ptr_to_shadow(next, shadow_to_page(prev, i));
+		if (index < 0)
+			continue;
+
+		check = ptr_to_shadow(next,
+				shadow_to_ptr(prev, prev->shadow[i]));
+		if (check < 0)
+			continue;
+
+		next->shadow[index] = (u16)check;
+	}
+}
+
+static void add_module_to_shadow(struct cfi_shadow *s, struct module *mod)
+{
+	unsigned long ptr;
+	unsigned long min_page_addr;
+	unsigned long max_page_addr;
+	unsigned long check = (unsigned long)mod->cfi_check;
+	int check_index = ptr_to_shadow(s, check);
+
+	if (unlikely((check & PAGE_MASK) != check))
+		return; /* Must be page aligned */
+
+	if (check_index < 0)
+		return; /* Module not addressable with shadow */
+
+	min_page_addr = (unsigned long)mod->core_layout.base & PAGE_MASK;
+	max_page_addr = (unsigned long)mod->core_layout.base +
+				       mod->core_layout.text_size;
+	max_page_addr &= PAGE_MASK;
+
+	/* For each page, store the check function index in the shadow */
+	for (ptr = min_page_addr; ptr <= max_page_addr; ptr += PAGE_SIZE) {
+		int index = ptr_to_shadow(s, ptr);
+
+		if (index >= 0) {
+			/* Each page must only contain one module */
+			WARN_ON(s->shadow[index] != SHADOW_INVALID);
+			s->shadow[index] = (u16)check_index;
+		}
+	}
+}
+
+static void remove_module_from_shadow(struct cfi_shadow *s, struct module *mod)
+{
+	unsigned long ptr;
+	unsigned long min_page_addr;
+	unsigned long max_page_addr;
+
+	min_page_addr = (unsigned long)mod->core_layout.base & PAGE_MASK;
+	max_page_addr = (unsigned long)mod->core_layout.base +
+				       mod->core_layout.text_size;
+	max_page_addr &= PAGE_MASK;
+
+	for (ptr = min_page_addr; ptr <= max_page_addr; ptr += PAGE_SIZE) {
+		int index = ptr_to_shadow(s, ptr);
+
+		if (index >= 0)
+			s->shadow[index] = SHADOW_INVALID;
+	}
+}
+
+typedef void (*update_shadow_fn)(struct cfi_shadow *, struct module *);
+
+static void update_shadow(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr, update_shadow_fn fn)
+{
+	struct cfi_shadow *prev;
+	struct cfi_shadow *next = (struct cfi_shadow *)
+		__get_free_pages(GFP_KERNEL, SHADOW_ORDER);
+
+	next->r.mod_min_addr = min_addr;
+	next->r.mod_max_addr = max_addr;
+	next->r.min_page = min_addr >> PAGE_SHIFT;
+	next->r.max_page = max_addr >> PAGE_SHIFT;
+
+	mutex_lock(&shadow_update_lock);
+	prev = rcu_dereference_protected(cfi_shadow, 1);
+	prepare_next_shadow(prev, next);
+
+	fn(next, mod);
+	set_memory_ro((unsigned long)next, SHADOW_PAGES);
+	rcu_assign_pointer(cfi_shadow, next);
+
+	mutex_unlock(&shadow_update_lock);
+	synchronize_rcu();
+
+	if (prev) {
+		set_memory_rw((unsigned long)prev, SHADOW_PAGES);
+		free_pages((unsigned long)prev, SHADOW_ORDER);
+	}
+}
+
+void cfi_module_add(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+	update_shadow(mod, min_addr, max_addr, add_module_to_shadow);
+}
+EXPORT_SYMBOL_GPL(cfi_module_add);
+
+void cfi_module_remove(struct module *mod, unsigned long min_addr,
+	unsigned long max_addr)
+{
+	update_shadow(mod, min_addr, max_addr, remove_module_from_shadow);
+}
+EXPORT_SYMBOL_GPL(cfi_module_remove);
+
+static inline cfi_check_fn ptr_to_check_fn(const struct cfi_shadow __rcu *s,
+	unsigned long ptr)
+{
+	int index;
+
+	if (unlikely(!s))
+		return NULL; /* No shadow available */
+
+	if (ptr < s->r.mod_min_addr || ptr > s->r.mod_max_addr)
+		return NULL; /* Not in a mapped module */
+
+	index = ptr_to_shadow(s, ptr);
+	if (index < 0)
+		return NULL; /* Cannot be addressed with shadow */
+
+	return (cfi_check_fn)shadow_to_ptr(s, index);
+}
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+static inline cfi_check_fn find_module_cfi_check(void *ptr)
+{
+	cfi_check_fn f = CFI_CHECK_FN;
+	struct module *mod;
+
+	preempt_disable();
+	mod = __module_address((unsigned long)ptr);
+	if (mod)
+		f = mod->cfi_check;
+	preempt_enable();
+
+	return f;
+}
+
+static inline cfi_check_fn find_cfi_check(void *ptr)
+{
+	bool rcu;
+	cfi_check_fn f;
+
+	rcu = rcu_is_watching();
+	if (!rcu)
+		rcu_nmi_enter();
+
+#ifdef CONFIG_CFI_CLANG_SHADOW
+	/* Look up the __cfi_check function to use */
+	rcu_read_lock_sched();
+	f = ptr_to_check_fn(rcu_dereference_sched(cfi_shadow),
+			    (unsigned long)ptr);
+	rcu_read_unlock_sched();
+
+	if (f)
+		goto out;
+
+	/*
+	 * Fall back to find_module_cfi_check, which works also for a larger
+	 * module address space, but is slower.
+	 */
+#endif /* CONFIG_CFI_CLANG_SHADOW */
+
+	f = find_module_cfi_check(ptr);
+
+out:
+	if (!rcu)
+		rcu_nmi_exit();
+
+	return f;
+}
+
+void cfi_slowpath_handler(uint64_t id, void *ptr, void *diag)
+{
+	cfi_check_fn check = find_cfi_check(ptr);
+
+	if (likely(check))
+		check(id, ptr, diag);
+	else /* Don't allow unchecked modules */
+		handle_cfi_failure(ptr);
+}
+EXPORT_SYMBOL_GPL(cfi_slowpath_handler);
+#endif /* CONFIG_MODULES */
+
+void cfi_failure_handler(void *data, void *ptr, void *vtable)
+{
+	handle_cfi_failure(ptr);
+}
+EXPORT_SYMBOL_GPL(cfi_failure_handler);
+
+void __cfi_check_fail(void *data, void *ptr)
+{
+	handle_cfi_failure(ptr);
+}
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 2d0ef613..b513f70 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -17,6 +17,7 @@
 #include <linux/fs_parser.h>
 
 #include <trace/events/cgroup.h>
+#include <trace/hooks/cgroup.h>
 
 #define cg_invalf(fc, fmt, ...) invalf(fc, fmt, ## __VA_ARGS__)
 
@@ -514,13 +515,15 @@
 	tcred = get_task_cred(task);
 	if (!uid_eq(cred->euid, GLOBAL_ROOT_UID) &&
 	    !uid_eq(cred->euid, tcred->uid) &&
-	    !uid_eq(cred->euid, tcred->suid))
+	    !uid_eq(cred->euid, tcred->suid) &&
+	    !ns_capable(tcred->user_ns, CAP_SYS_NICE))
 		ret = -EACCES;
 	put_cred(tcred);
 	if (ret)
 		goto out_finish;
 
 	ret = cgroup_attach_task(cgrp, task, threadgroup);
+	trace_android_vh_cgroup_set_task(ret, task);
 
 out_finish:
 	cgroup_procs_write_finish(task);
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
index 1904ffc..f8a0fbd 100644
--- a/kernel/cgroup/cgroup.c
+++ b/kernel/cgroup/cgroup.c
@@ -213,6 +213,22 @@
 static struct file_system_type cgroup2_fs_type;
 static struct cftype cgroup_base_files[];
 
+/* cgroup optional features */
+enum cgroup_opt_features {
+#ifdef CONFIG_PSI
+	OPT_FEATURE_PRESSURE,
+#endif
+	OPT_FEATURE_COUNT
+};
+
+static const char *cgroup_opt_feature_names[OPT_FEATURE_COUNT] = {
+#ifdef CONFIG_PSI
+	"pressure",
+#endif
+};
+
+static u16 cgroup_feature_disable_mask __read_mostly;
+
 static int cgroup_apply_control(struct cgroup *cgrp);
 static void cgroup_finalize_control(struct cgroup *cgrp, int ret);
 static void css_task_iter_skip(struct css_task_iter *it,
@@ -3704,6 +3720,18 @@
 {
 	psi_trigger_replace(&of->priv, NULL);
 }
+
+bool cgroup_psi_enabled(void)
+{
+	return (cgroup_feature_disable_mask & (1 << OPT_FEATURE_PRESSURE)) == 0;
+}
+
+#else /* CONFIG_PSI */
+bool cgroup_psi_enabled(void)
+{
+	return false;
+}
+
 #endif /* CONFIG_PSI */
 
 static int cgroup_freeze_show(struct seq_file *seq, void *v)
@@ -3951,6 +3979,8 @@
 restart:
 	for (cft = cfts; cft != cft_end && cft->name[0] != '\0'; cft++) {
 		/* does cft->flags tell us to skip this file on @cgrp? */
+		if ((cft->flags & CFTYPE_PRESSURE) && !cgroup_psi_enabled())
+			continue;
 		if ((cft->flags & __CFTYPE_ONLY_ON_DFL) && !cgroup_on_dfl(cgrp))
 			continue;
 		if ((cft->flags & __CFTYPE_NOT_ON_DFL) && cgroup_on_dfl(cgrp))
@@ -4028,6 +4058,9 @@
 
 		WARN_ON(cft->ss || cft->kf_ops);
 
+		if ((cft->flags & CFTYPE_PRESSURE) && !cgroup_psi_enabled())
+			continue;
+
 		if (cft->seq_start)
 			kf_ops = &cgroup_kf_ops;
 		else
@@ -4944,6 +4977,7 @@
 #ifdef CONFIG_PSI
 	{
 		.name = "io.pressure",
+		.flags = CFTYPE_PRESSURE,
 		.seq_show = cgroup_io_pressure_show,
 		.write = cgroup_io_pressure_write,
 		.poll = cgroup_pressure_poll,
@@ -4951,6 +4985,7 @@
 	},
 	{
 		.name = "memory.pressure",
+		.flags = CFTYPE_PRESSURE,
 		.seq_show = cgroup_memory_pressure_show,
 		.write = cgroup_memory_pressure_write,
 		.poll = cgroup_pressure_poll,
@@ -4958,6 +4993,7 @@
 	},
 	{
 		.name = "cpu.pressure",
+		.flags = CFTYPE_PRESSURE,
 		.seq_show = cgroup_cpu_pressure_show,
 		.write = cgroup_cpu_pressure_write,
 		.poll = cgroup_pressure_poll,
@@ -6195,6 +6231,15 @@
 			pr_info("Disabling %s control group subsystem\n",
 				ss->name);
 		}
+
+		for (i = 0; i < OPT_FEATURE_COUNT; i++) {
+			if (strcmp(token, cgroup_opt_feature_names[i]))
+				continue;
+			cgroup_feature_disable_mask |= 1 << i;
+			pr_info("Disabling %s control group feature\n",
+				cgroup_opt_feature_names[i]);
+			break;
+		}
 	}
 	return 1;
 }
@@ -6498,6 +6543,9 @@
 		if (!(cft->flags & CFTYPE_NS_DELEGATABLE))
 			continue;
 
+		if ((cft->flags & CFTYPE_PRESSURE) && !cgroup_psi_enabled())
+			continue;
+
 		if (prefix)
 			ret += snprintf(buf + ret, size - ret, "%s.", prefix);
 
diff --git a/kernel/cgroup/cpuset.c b/kernel/cgroup/cpuset.c
index badfa8f..5e8aa75 100644
--- a/kernel/cgroup/cpuset.c
+++ b/kernel/cgroup/cpuset.c
@@ -334,17 +334,6 @@
  */
 
 DEFINE_STATIC_PERCPU_RWSEM(cpuset_rwsem);
-
-void cpuset_read_lock(void)
-{
-	percpu_down_read(&cpuset_rwsem);
-}
-
-void cpuset_read_unlock(void)
-{
-	percpu_up_read(&cpuset_rwsem);
-}
-
 static DEFINE_SPINLOCK(callback_lock);
 
 static struct workqueue_struct *cpuset_migrate_mm_wq;
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 06c0094..9d17af2 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1350,6 +1350,7 @@
 void enable_nonboot_cpus(void)
 {
 	int cpu, error;
+	struct device *cpu_device;
 
 	/* Allow everyone to use the CPU hotplug again */
 	cpu_maps_update_begin();
@@ -1367,6 +1368,12 @@
 		trace_suspend_resume(TPS("CPU_ON"), cpu, false);
 		if (!error) {
 			pr_info("CPU%d is up\n", cpu);
+			cpu_device = get_cpu_device(cpu);
+			if (!cpu_device)
+				pr_err("%s: failed to get cpu%d device\n",
+				       __func__, cpu);
+			else
+				kobject_uevent(&cpu_device->kobj, KOBJ_ONLINE);
 			continue;
 		}
 		pr_warn("Error taking CPU%d up: %d\n", cpu, error);
diff --git a/kernel/dma/contiguous.c b/kernel/dma/contiguous.c
index 69cfb43..cb600bb 100644
--- a/kernel/dma/contiguous.c
+++ b/kernel/dma/contiguous.c
@@ -31,6 +31,7 @@
 #endif
 
 struct cma *dma_contiguous_default_area;
+EXPORT_SYMBOL_GPL(dma_contiguous_default_area);
 
 /*
  * Default global CMA area size can be defined in kernel's .config.
diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
index 0a093a6..05482fe 100644
--- a/kernel/dma/direct.c
+++ b/kernel/dma/direct.c
@@ -50,6 +50,7 @@
 
 	return (1ULL << (fls64(max_dma) - 1)) * 2 - 1;
 }
+EXPORT_SYMBOL_GPL(dma_direct_get_required_mask);
 
 static gfp_t __dma_direct_optimal_gfp_mask(struct device *dev, u64 dma_mask,
 		u64 *phys_mask)
@@ -210,6 +211,7 @@
 		return arch_dma_alloc(dev, size, dma_handle, gfp, attrs);
 	return dma_direct_alloc_pages(dev, size, dma_handle, gfp, attrs);
 }
+EXPORT_SYMBOL_GPL(dma_direct_alloc);
 
 void dma_direct_free(struct device *dev, size_t size,
 		void *cpu_addr, dma_addr_t dma_addr, unsigned long attrs)
@@ -220,6 +222,7 @@
 	else
 		dma_direct_free_pages(dev, size, cpu_addr, dma_addr, attrs);
 }
+EXPORT_SYMBOL_GPL(dma_direct_free);
 
 #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
     defined(CONFIG_SWIOTLB)
diff --git a/kernel/dma/mapping.c b/kernel/dma/mapping.c
index 8682a53..839e736 100644
--- a/kernel/dma/mapping.c
+++ b/kernel/dma/mapping.c
@@ -135,6 +135,7 @@
 		sg_set_page(sgt->sgl, page, PAGE_ALIGN(size), 0);
 	return ret;
 }
+EXPORT_SYMBOL_GPL(dma_common_get_sgtable);
 
 /*
  * The whole dma_get_sgtable() idea is fundamentally unsafe - it seems
@@ -223,6 +224,7 @@
 	return -ENXIO;
 #endif /* CONFIG_MMU */
 }
+EXPORT_SYMBOL_GPL(dma_common_mmap);
 
 /**
  * dma_can_mmap - check if a given device supports dma_mmap_*
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 7e124f9..8d723e6 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -4243,8 +4243,9 @@
 
 	if (!task) {
 		/* Must be root to operate on a CPU event: */
-		if (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;
@@ -4555,6 +4556,8 @@
 
 	unaccount_event(event);
 
+	security_perf_event_free(event);
+
 	if (event->rb) {
 		/*
 		 * Can happen when we close an event with re-directed output.
@@ -5008,6 +5011,10 @@
 	struct perf_event_context *ctx;
 	int ret;
 
+	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);
@@ -5272,6 +5279,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);
@@ -5736,6 +5748,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) {
@@ -5869,7 +5885,7 @@
 	lock_limit >>= PAGE_SHIFT;
 	locked = atomic64_read(&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;
@@ -10627,11 +10643,20 @@
 		}
 	}
 
+	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_filter_ranges);
 
@@ -10720,9 +10745,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) {
@@ -10935,13 +10962,19 @@
 	if (flags & ~PERF_FLAG_ALL)
 		return -EINVAL;
 
+	/* 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) {
@@ -10958,9 +10991,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;
+	}
 
 	/* REGS_INTR can leak data, lockdown must prevent this */
 	if (attr.sample_type & PERF_SAMPLE_REGS_INTR) {
diff --git a/kernel/exit.c b/kernel/exit.c
index ece6477..37bfafdd 100644
--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -226,6 +226,7 @@
 	}
 
 	write_unlock_irq(&tasklist_lock);
+	seccomp_filter_release(p);
 	release_thread(p);
 	put_task_struct_rcu_user(p);
 
@@ -1480,23 +1481,6 @@
 	return retval;
 }
 
-static struct pid *pidfd_get_pid(unsigned int fd)
-{
-	struct fd f;
-	struct pid *pid;
-
-	f = fdget(fd);
-	if (!f.file)
-		return ERR_PTR(-EBADF);
-
-	pid = pidfd_pid(f.file);
-	if (!IS_ERR(pid))
-		get_pid(pid);
-
-	fdput(f);
-	return pid;
-}
-
 static long kernel_waitid(int which, pid_t upid, struct waitid_info *infop,
 			  int options, struct rusage *ru)
 {
@@ -1504,6 +1488,7 @@
 	struct pid *pid = NULL;
 	enum pid_type type;
 	long ret;
+	unsigned int f_flags;
 
 	if (options & ~(WNOHANG|WNOWAIT|WEXITED|WSTOPPED|WCONTINUED|
 			__WNOTHREAD|__WCLONE|__WALL))
@@ -1537,7 +1522,7 @@
 		if (upid < 0)
 			return -EINVAL;
 
-		pid = pidfd_get_pid(upid);
+		pid = pidfd_get_pid(upid, &f_flags);
 		if (IS_ERR(pid))
 			return PTR_ERR(pid);
 		break;
diff --git a/kernel/fork.c b/kernel/fork.c
index cf2cebd..f4456a3 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -93,7 +93,9 @@
 #include <linux/kcov.h>
 #include <linux/livepatch.h>
 #include <linux/thread_info.h>
+#include <linux/cpufreq_times.h>
 #include <linux/stackleak.h>
+#include <linux/scs.h>
 
 #include <asm/pgtable.h>
 #include <asm/pgalloc.h>
@@ -451,6 +453,9 @@
 
 void free_task(struct task_struct *tsk)
 {
+	cpufreq_task_times_exit(tsk);
+	scs_release(tsk);
+
 #ifndef CONFIG_THREAD_INFO_IN_TASK
 	/*
 	 * The task is finally done with both the stack and thread_info,
@@ -466,7 +471,6 @@
 #endif
 	rt_mutex_debug_task_free(tsk);
 	ftrace_graph_exit_task(tsk);
-	put_seccomp_filter(tsk);
 	arch_release_task_struct(tsk);
 	if (tsk->flags & PF_KTHREAD)
 		free_kthread_struct(tsk);
@@ -834,6 +838,8 @@
 			  NULL, free_vm_stack_cache);
 #endif
 
+	scs_init();
+
 	lockdep_init_task(&init_task);
 	uprobes_init();
 }
@@ -893,6 +899,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
@@ -1869,6 +1879,8 @@
 	if (!p)
 		goto fork_out;
 
+	cpufreq_task_times_init(p);
+
 	/*
 	 * This _must_ happen before we call free_task(), i.e. before we jump
 	 * to any of the bad_fork_* labels. This is to avoid freeing
@@ -2235,6 +2247,7 @@
 	write_unlock_irq(&tasklist_lock);
 
 	proc_fork_connector(p);
+	sched_post_fork(p);
 	cgroup_post_fork(p);
 	cgroup_threadgroup_change_end(current);
 	perf_event_fork(p);
@@ -2382,6 +2395,8 @@
 	if (IS_ERR(p))
 		return PTR_ERR(p);
 
+	cpufreq_task_times_alloc(p);
+
 	/*
 	 * Do this prior waking up the new thread - the thread pointer
 	 * might get invalid after that point, if the thread exits quickly.
diff --git a/kernel/futex.c b/kernel/futex.c
index f82879a..1503889 100644
--- a/kernel/futex.c
+++ b/kernel/futex.c
@@ -60,6 +60,7 @@
 #include <asm/futex.h>
 
 #include "locking/rtmutex_common.h"
+#include <trace/hooks/futex.h>
 
 /*
  * READ this before attempting to hack on futexes!
@@ -2356,6 +2357,7 @@
 static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
 {
 	int prio;
+	bool already_on_hb = false;
 
 	/*
 	 * The priority used to register this element is
@@ -2368,7 +2370,9 @@
 	prio = min(current->normal_prio, MAX_RT_PRIO);
 
 	plist_node_init(&q->list, prio);
-	plist_add(&q->list, &hb->chain);
+	trace_android_vh_alter_futex_plist_add(&q->list, &hb->chain, &already_on_hb);
+	if (!already_on_hb)
+		plist_add(&q->list, &hb->chain);
 	q->task = current;
 }
 
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index 856f029..2e014ca 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -14,6 +14,7 @@
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
 #include <linux/irqdomain.h>
+#include <linux/wakeup_reason.h>
 
 #include <trace/events/irq.h>
 
@@ -510,8 +511,22 @@
 	 * If the interrupt is not in progress and is not an armed
 	 * wakeup interrupt, proceed.
 	 */
-	if (!irqd_has_set(&desc->irq_data, mask))
+	if (!irqd_has_set(&desc->irq_data, mask)) {
+#ifdef CONFIG_PM_SLEEP
+		if (unlikely(desc->no_suspend_depth &&
+			     irqd_is_wakeup_set(&desc->irq_data))) {
+			unsigned int irq = irq_desc_get_irq(desc);
+			const char *name = "(unnamed)";
+
+			if (desc->action && desc->action->name)
+				name = desc->action->name;
+
+			log_abnormal_wakeup_reason("misconfigured IRQ %u %s",
+						   irq, name);
+		}
+#endif
 		return true;
+	}
 
 	/*
 	 * If the interrupt is an armed wakeup source, mark it pending
@@ -959,6 +974,33 @@
 }
 
 /**
+ * handle_percpu_devid_fasteoi_ipi - Per CPU local IPI handler with per cpu
+ *				     dev ids
+ * @desc:	the interrupt description structure for this irq
+ *
+ * The biggest difference with the IRQ version is that the interrupt is
+ * EOIed early, as the IPI could result in a context switch, and we need to
+ * make sure the IPI can fire again. We also assume that the arch code has
+ * registered an action. If not, we are positively doomed.
+ */
+void handle_percpu_devid_fasteoi_ipi(struct irq_desc *desc)
+{
+	struct irq_chip *chip = irq_desc_get_chip(desc);
+	struct irqaction *action = desc->action;
+	unsigned int irq = irq_desc_get_irq(desc);
+	irqreturn_t res;
+
+	__kstat_incr_irqs_this_cpu(desc);
+
+	if (chip->irq_eoi)
+		chip->irq_eoi(&desc->irq_data);
+
+	trace_irq_handler_entry(irq, action);
+	res = action->handler(irq, raw_cpu_ptr(action->percpu_dev_id));
+	trace_irq_handler_exit(irq, action, res);
+}
+
+/**
  * handle_percpu_devid_fasteoi_nmi - Per CPU local NMI handler with per cpu
  *				     dev ids
  * @desc:	the interrupt description structure for this irq
@@ -1301,6 +1343,50 @@
 #endif /* CONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS */
 
 /**
+ * irq_chip_set_parent_state - set the state of a parent interrupt.
+ *
+ * @data: Pointer to interrupt specific data
+ * @which: State to be restored (one of IRQCHIP_STATE_*)
+ * @val: Value corresponding to @which
+ *
+ * Conditional success, if the underlying irqchip does not implement it.
+ */
+int irq_chip_set_parent_state(struct irq_data *data,
+			      enum irqchip_irq_state which,
+			      bool val)
+{
+	data = data->parent_data;
+
+	if (!data || !data->chip->irq_set_irqchip_state)
+		return 0;
+
+	return data->chip->irq_set_irqchip_state(data, which, val);
+}
+EXPORT_SYMBOL_GPL(irq_chip_set_parent_state);
+
+/**
+ * irq_chip_get_parent_state - get the state of a parent interrupt.
+ *
+ * @data: Pointer to interrupt specific data
+ * @which: one of IRQCHIP_STATE_* the caller wants to know
+ * @state: a pointer to a boolean where the state is to be stored
+ *
+ * Conditional success, if the underlying irqchip does not implement it.
+ */
+int irq_chip_get_parent_state(struct irq_data *data,
+			      enum irqchip_irq_state which,
+			      bool *state)
+{
+	data = data->parent_data;
+
+	if (!data || !data->chip->irq_get_irqchip_state)
+		return 0;
+
+	return data->chip->irq_get_irqchip_state(data, which, state);
+}
+EXPORT_SYMBOL_GPL(irq_chip_get_parent_state);
+
+/**
  * irq_chip_enable_parent - Enable the parent interrupt (defaults to unmask if
  * NULL)
  * @data:	Pointer to interrupt specific data
@@ -1437,6 +1523,7 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(irq_chip_retrigger_hierarchy);
 
 /**
  * irq_chip_set_vcpu_affinity_parent - Set vcpu affinity on the parent interrupt
@@ -1451,7 +1538,7 @@
 
 	return -ENOSYS;
 }
-
+EXPORT_SYMBOL_GPL(irq_chip_set_vcpu_affinity_parent);
 /**
  * irq_chip_set_wake_parent - Set/reset wake-up on the parent interrupt
  * @data:	Pointer to interrupt specific data
diff --git a/kernel/irq/debugfs.c b/kernel/irq/debugfs.c
index d44c8fd..d7f9713 100644
--- a/kernel/irq/debugfs.c
+++ b/kernel/irq/debugfs.c
@@ -131,6 +131,7 @@
 	BIT_MASK_DESCR(_IRQ_PER_CPU_DEVID),
 	BIT_MASK_DESCR(_IRQ_IS_POLLED),
 	BIT_MASK_DESCR(_IRQ_DISABLE_UNLAZY),
+	BIT_MASK_DESCR(_IRQ_HIDDEN),
 };
 
 static const struct irq_bit_descr irqdesc_istates[] = {
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index 5e03cbe..f7c98c3 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -296,6 +296,7 @@
 
 	mutex_unlock(&irq_domain_mutex);
 }
+EXPORT_SYMBOL_GPL(irq_domain_update_bus_token);
 
 /**
  * irq_domain_add_simple() - Register an irq_domain and optionally map a range of irqs
diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c
index f5958c5..9b316152 100644
--- a/kernel/irq/proc.c
+++ b/kernel/irq/proc.c
@@ -485,7 +485,7 @@
 
 	rcu_read_lock();
 	desc = irq_to_desc(i);
-	if (!desc)
+	if (!desc || irq_settings_is_hidden(desc))
 		goto outsparse;
 
 	if (desc->kstat_irqs)
diff --git a/kernel/irq/settings.h b/kernel/irq/settings.h
index e43795c..403378b 100644
--- a/kernel/irq/settings.h
+++ b/kernel/irq/settings.h
@@ -17,6 +17,7 @@
 	_IRQ_PER_CPU_DEVID	= IRQ_PER_CPU_DEVID,
 	_IRQ_IS_POLLED		= IRQ_IS_POLLED,
 	_IRQ_DISABLE_UNLAZY	= IRQ_DISABLE_UNLAZY,
+	_IRQ_HIDDEN		= IRQ_HIDDEN,
 	_IRQF_MODIFY_MASK	= IRQF_MODIFY_MASK,
 };
 
@@ -31,6 +32,7 @@
 #define IRQ_PER_CPU_DEVID	GOT_YOU_MORON
 #define IRQ_IS_POLLED		GOT_YOU_MORON
 #define IRQ_DISABLE_UNLAZY	GOT_YOU_MORON
+#define IRQ_HIDDEN		GOT_YOU_MORON
 #undef IRQF_MODIFY_MASK
 #define IRQF_MODIFY_MASK	GOT_YOU_MORON
 
@@ -167,3 +169,8 @@
 {
 	desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY;
 }
+
+static inline bool irq_settings_is_hidden(struct irq_desc *desc)
+{
+	return desc->status_use_accessors & _IRQ_HIDDEN;
+}
diff --git a/kernel/kallsyms.c b/kernel/kallsyms.c
index 61f9d78..14de0c7 100644
--- a/kernel/kallsyms.c
+++ b/kernel/kallsyms.c
@@ -159,6 +159,26 @@
 	return kallsyms_relative_base - 1 - kallsyms_offsets[idx];
 }
 
+#if defined(CONFIG_CFI_CLANG) && defined(CONFIG_THINLTO)
+/*
+ * LLVM appends a hash to static function names when ThinLTO and CFI are
+ * both enabled, which causes confusion and potentially breaks user space
+ * tools, so we will strip the postfix from expanded symbol names.
+ */
+static inline char *cleanup_symbol_name(char *s)
+{
+	char *res = NULL;
+
+	res = strrchr(s, '$');
+	if (res)
+		*res = '\0';
+
+	return res;
+}
+#else
+static inline char *cleanup_symbol_name(char *s) { return NULL; }
+#endif
+
 /* Lookup the address for this symbol. Returns 0 if not found. */
 unsigned long kallsyms_lookup_name(const char *name)
 {
@@ -171,10 +191,12 @@
 
 		if (strcmp(namebuf, name) == 0)
 			return kallsyms_sym_address(i);
+
+		if (cleanup_symbol_name(namebuf) && strcmp(namebuf, name) == 0)
+			return kallsyms_sym_address(i);
 	}
 	return module_kallsyms_lookup_name(name);
 }
-EXPORT_SYMBOL_GPL(kallsyms_lookup_name);
 
 int kallsyms_on_each_symbol(int (*fn)(void *, const char *, struct module *,
 				      unsigned long),
@@ -193,7 +215,6 @@
 	}
 	return module_kallsyms_on_each_symbol(fn, data);
 }
-EXPORT_SYMBOL_GPL(kallsyms_on_each_symbol);
 
 static unsigned long get_symbol_pos(unsigned long addr,
 				    unsigned long *symbolsize,
@@ -297,7 +318,9 @@
 				       namebuf, KSYM_NAME_LEN);
 		if (modname)
 			*modname = NULL;
-		return namebuf;
+
+		ret = namebuf;
+		goto found;
 	}
 
 	/* See if it's in a module or a BPF JITed image. */
@@ -310,11 +333,16 @@
 	if (!ret)
 		ret = ftrace_mod_address_lookup(addr, symbolsize,
 						offset, modname, namebuf);
+
+found:
+	cleanup_symbol_name(namebuf);
 	return ret;
 }
 
 int lookup_symbol_name(unsigned long addr, char *symname)
 {
+	int res;
+
 	symname[0] = '\0';
 	symname[KSYM_NAME_LEN - 1] = '\0';
 
@@ -325,15 +353,23 @@
 		/* Grab name */
 		kallsyms_expand_symbol(get_symbol_offset(pos),
 				       symname, KSYM_NAME_LEN);
-		return 0;
+		goto found;
 	}
 	/* See if it's in a module. */
-	return lookup_module_symbol_name(addr, symname);
+	res = lookup_module_symbol_name(addr, symname);
+	if (res)
+		return res;
+
+found:
+	cleanup_symbol_name(symname);
+	return 0;
 }
 
 int lookup_symbol_attrs(unsigned long addr, unsigned long *size,
 			unsigned long *offset, char *modname, char *name)
 {
+	int res;
+
 	name[0] = '\0';
 	name[KSYM_NAME_LEN - 1] = '\0';
 
@@ -345,10 +381,16 @@
 		kallsyms_expand_symbol(get_symbol_offset(pos),
 				       name, KSYM_NAME_LEN);
 		modname[0] = '\0';
-		return 0;
+		goto found;
 	}
 	/* See if it's in a module. */
-	return lookup_module_symbol_attrs(addr, size, offset, modname, name);
+	res = lookup_module_symbol_attrs(addr, size, offset, modname, name);
+	if (res)
+		return res;
+
+found:
+	cleanup_symbol_name(name);
+	return 0;
 }
 
 /* Look up a kernel symbol and return it in a text buffer. */
diff --git a/kernel/kcov.c b/kernel/kcov.c
index 2ee38727..f503542 100644
--- a/kernel/kcov.c
+++ b/kernel/kcov.c
@@ -9,6 +9,7 @@
 #include <linux/types.h>
 #include <linux/file.h>
 #include <linux/fs.h>
+#include <linux/hashtable.h>
 #include <linux/init.h>
 #include <linux/mm.h>
 #include <linux/preempt.h>
@@ -21,8 +22,11 @@
 #include <linux/uaccess.h>
 #include <linux/kcov.h>
 #include <linux/refcount.h>
+#include <linux/log2.h>
 #include <asm/setup.h>
 
+#define kcov_debug(fmt, ...) pr_debug("%s: " fmt, __func__, ##__VA_ARGS__)
+
 /* Number of 64-bit words written per one comparison: */
 #define KCOV_WORDS_PER_CMP 4
 
@@ -44,19 +48,100 @@
 	 * Reference counter. We keep one for:
 	 *  - opened file descriptor
 	 *  - task with enabled coverage (we can't unwire it from another task)
+	 *  - each code section for remote coverage collection
 	 */
 	refcount_t		refcount;
 	/* The lock protects mode, size, area and t. */
 	spinlock_t		lock;
 	enum kcov_mode		mode;
-	/* Size of arena (in long's for KCOV_MODE_TRACE). */
-	unsigned		size;
+	/* Size of arena (in long's). */
+	unsigned int		size;
 	/* Coverage buffer shared with user space. */
 	void			*area;
 	/* Task for which we collect coverage, or NULL. */
 	struct task_struct	*t;
+	/* Collecting coverage from remote (background) threads. */
+	bool			remote;
+	/* Size of remote area (in long's). */
+	unsigned int		remote_size;
+	/*
+	 * Sequence is incremented each time kcov is reenabled, used by
+	 * kcov_remote_stop(), see the comment there.
+	 */
+	int			sequence;
 };
 
+struct kcov_remote_area {
+	struct list_head	list;
+	unsigned int		size;
+};
+
+struct kcov_remote {
+	u64			handle;
+	struct kcov		*kcov;
+	struct hlist_node	hnode;
+};
+
+static DEFINE_SPINLOCK(kcov_remote_lock);
+static DEFINE_HASHTABLE(kcov_remote_map, 4);
+static struct list_head kcov_remote_areas = LIST_HEAD_INIT(kcov_remote_areas);
+
+/* Must be called with kcov_remote_lock locked. */
+static struct kcov_remote *kcov_remote_find(u64 handle)
+{
+	struct kcov_remote *remote;
+
+	hash_for_each_possible(kcov_remote_map, remote, hnode, handle) {
+		if (remote->handle == handle)
+			return remote;
+	}
+	return NULL;
+}
+
+static struct kcov_remote *kcov_remote_add(struct kcov *kcov, u64 handle)
+{
+	struct kcov_remote *remote;
+
+	if (kcov_remote_find(handle))
+		return ERR_PTR(-EEXIST);
+	remote = kmalloc(sizeof(*remote), GFP_ATOMIC);
+	if (!remote)
+		return ERR_PTR(-ENOMEM);
+	remote->handle = handle;
+	remote->kcov = kcov;
+	hash_add(kcov_remote_map, &remote->hnode, handle);
+	return remote;
+}
+
+/* Must be called with kcov_remote_lock locked. */
+static struct kcov_remote_area *kcov_remote_area_get(unsigned int size)
+{
+	struct kcov_remote_area *area;
+	struct list_head *pos;
+
+	kcov_debug("size = %u\n", size);
+	list_for_each(pos, &kcov_remote_areas) {
+		area = list_entry(pos, struct kcov_remote_area, list);
+		if (area->size == size) {
+			list_del(&area->list);
+			kcov_debug("rv = %px\n", area);
+			return area;
+		}
+	}
+	kcov_debug("rv = NULL\n");
+	return NULL;
+}
+
+/* Must be called with kcov_remote_lock locked. */
+static void kcov_remote_area_put(struct kcov_remote_area *area,
+					unsigned int size)
+{
+	kcov_debug("area = %px, size = %u\n", area, size);
+	INIT_LIST_HEAD(&area->list);
+	area->size = size;
+	list_add(&area->list, &kcov_remote_areas);
+}
+
 static notrace bool check_kcov_mode(enum kcov_mode needed_mode, struct task_struct *t)
 {
 	unsigned int mode;
@@ -73,7 +158,7 @@
 	 * in_interrupt() returns false (e.g. preempt_schedule_irq()).
 	 * READ_ONCE()/barrier() effectively provides load-acquire wrt
 	 * interrupts, there are paired barrier()/WRITE_ONCE() in
-	 * kcov_ioctl_locked().
+	 * kcov_start().
 	 */
 	barrier();
 	return mode == needed_mode;
@@ -227,6 +312,78 @@
 EXPORT_SYMBOL(__sanitizer_cov_trace_switch);
 #endif /* ifdef CONFIG_KCOV_ENABLE_COMPARISONS */
 
+static void kcov_start(struct task_struct *t, unsigned int size,
+			void *area, enum kcov_mode mode, int sequence)
+{
+	kcov_debug("t = %px, size = %u, area = %px\n", t, size, area);
+	/* Cache in task struct for performance. */
+	t->kcov_size = size;
+	t->kcov_area = area;
+	/* See comment in check_kcov_mode(). */
+	barrier();
+	WRITE_ONCE(t->kcov_mode, mode);
+	t->kcov_sequence = sequence;
+}
+
+static void kcov_stop(struct task_struct *t)
+{
+	WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED);
+	barrier();
+	t->kcov_size = 0;
+	t->kcov_area = NULL;
+}
+
+static void kcov_task_reset(struct task_struct *t)
+{
+	kcov_stop(t);
+	t->kcov = NULL;
+	t->kcov_sequence = 0;
+	t->kcov_handle = 0;
+}
+
+void kcov_task_init(struct task_struct *t)
+{
+	kcov_task_reset(t);
+	t->kcov_handle = current->kcov_handle;
+}
+
+static void kcov_reset(struct kcov *kcov)
+{
+	kcov->t = NULL;
+	kcov->mode = KCOV_MODE_INIT;
+	kcov->remote = false;
+	kcov->remote_size = 0;
+	kcov->sequence++;
+}
+
+static void kcov_remote_reset(struct kcov *kcov)
+{
+	int bkt;
+	struct kcov_remote *remote;
+	struct hlist_node *tmp;
+
+	spin_lock(&kcov_remote_lock);
+	hash_for_each_safe(kcov_remote_map, bkt, tmp, remote, hnode) {
+		if (remote->kcov != kcov)
+			continue;
+		kcov_debug("removing handle %llx\n", remote->handle);
+		hash_del(&remote->hnode);
+		kfree(remote);
+	}
+	/* Do reset before unlock to prevent races with kcov_remote_start(). */
+	kcov_reset(kcov);
+	spin_unlock(&kcov_remote_lock);
+}
+
+static void kcov_disable(struct task_struct *t, struct kcov *kcov)
+{
+	kcov_task_reset(t);
+	if (kcov->remote)
+		kcov_remote_reset(kcov);
+	else
+		kcov_reset(kcov);
+}
+
 static void kcov_get(struct kcov *kcov)
 {
 	refcount_inc(&kcov->refcount);
@@ -235,20 +392,12 @@
 static void kcov_put(struct kcov *kcov)
 {
 	if (refcount_dec_and_test(&kcov->refcount)) {
+		kcov_remote_reset(kcov);
 		vfree(kcov->area);
 		kfree(kcov);
 	}
 }
 
-void kcov_task_init(struct task_struct *t)
-{
-	WRITE_ONCE(t->kcov_mode, KCOV_MODE_DISABLED);
-	barrier();
-	t->kcov_size = 0;
-	t->kcov_area = NULL;
-	t->kcov = NULL;
-}
-
 void kcov_task_exit(struct task_struct *t)
 {
 	struct kcov *kcov;
@@ -256,15 +405,36 @@
 	kcov = t->kcov;
 	if (kcov == NULL)
 		return;
+
 	spin_lock(&kcov->lock);
+	kcov_debug("t = %px, kcov->t = %px\n", t, kcov->t);
+	/*
+	 * For KCOV_ENABLE devices we want to make sure that t->kcov->t == t,
+	 * which comes down to:
+	 *        WARN_ON(!kcov->remote && kcov->t != t);
+	 *
+	 * For KCOV_REMOTE_ENABLE devices, the exiting task is either:
+	 * 2. A remote task between kcov_remote_start() and kcov_remote_stop().
+	 *    In this case we should print a warning right away, since a task
+	 *    shouldn't be exiting when it's in a kcov coverage collection
+	 *    section. Here t points to the task that is collecting remote
+	 *    coverage, and t->kcov->t points to the thread that created the
+	 *    kcov device. Which means that to detect this case we need to
+	 *    check that t != t->kcov->t, and this gives us the following:
+	 *        WARN_ON(kcov->remote && kcov->t != t);
+	 *
+	 * 2. The task that created kcov exiting without calling KCOV_DISABLE,
+	 *    and then again we can make sure that t->kcov->t == t:
+	 *        WARN_ON(kcov->remote && kcov->t != t);
+	 *
+	 * By combining all three checks into one we get:
+	 */
 	if (WARN_ON(kcov->t != t)) {
 		spin_unlock(&kcov->lock);
 		return;
 	}
 	/* Just to not leave dangling references behind. */
-	kcov_task_init(t);
-	kcov->t = NULL;
-	kcov->mode = KCOV_MODE_INIT;
+	kcov_disable(t, kcov);
 	spin_unlock(&kcov->lock);
 	kcov_put(kcov);
 }
@@ -313,6 +483,7 @@
 	if (!kcov)
 		return -ENOMEM;
 	kcov->mode = KCOV_MODE_DISABLED;
+	kcov->sequence = 1;
 	refcount_set(&kcov->refcount, 1);
 	spin_lock_init(&kcov->lock);
 	filep->private_data = kcov;
@@ -325,6 +496,20 @@
 	return 0;
 }
 
+static int kcov_get_mode(unsigned long arg)
+{
+	if (arg == KCOV_TRACE_PC)
+		return KCOV_MODE_TRACE_PC;
+	else if (arg == KCOV_TRACE_CMP)
+#ifdef CONFIG_KCOV_ENABLE_COMPARISONS
+		return KCOV_MODE_TRACE_CMP;
+#else
+		return -ENOTSUPP;
+#endif
+	else
+		return -EINVAL;
+}
+
 /*
  * Fault in a lazily-faulted vmalloc area before it can be used by
  * __santizer_cov_trace_pc(), to avoid recursion issues if any code on the
@@ -340,14 +525,35 @@
 		READ_ONCE(area[offset]);
 }
 
+static inline bool kcov_check_handle(u64 handle, bool common_valid,
+				bool uncommon_valid, bool zero_valid)
+{
+	if (handle & ~(KCOV_SUBSYSTEM_MASK | KCOV_INSTANCE_MASK))
+		return false;
+	switch (handle & KCOV_SUBSYSTEM_MASK) {
+	case KCOV_SUBSYSTEM_COMMON:
+		return (handle & KCOV_INSTANCE_MASK) ?
+			common_valid : zero_valid;
+	case KCOV_SUBSYSTEM_USB:
+		return uncommon_valid;
+	default:
+		return false;
+	}
+	return false;
+}
+
 static int kcov_ioctl_locked(struct kcov *kcov, unsigned int cmd,
 			     unsigned long arg)
 {
 	struct task_struct *t;
 	unsigned long size, unused;
+	int mode, i;
+	struct kcov_remote_arg *remote_arg;
+	struct kcov_remote *remote;
 
 	switch (cmd) {
 	case KCOV_INIT_TRACE:
+		kcov_debug("KCOV_INIT_TRACE\n");
 		/*
 		 * Enable kcov in trace mode and setup buffer size.
 		 * Must happen before anything else.
@@ -366,6 +572,7 @@
 		kcov->mode = KCOV_MODE_INIT;
 		return 0;
 	case KCOV_ENABLE:
+		kcov_debug("KCOV_ENABLE\n");
 		/*
 		 * Enable coverage for the current task.
 		 * At this point user must have been enabled trace mode,
@@ -378,29 +585,20 @@
 		t = current;
 		if (kcov->t != NULL || t->kcov != NULL)
 			return -EBUSY;
-		if (arg == KCOV_TRACE_PC)
-			kcov->mode = KCOV_MODE_TRACE_PC;
-		else if (arg == KCOV_TRACE_CMP)
-#ifdef CONFIG_KCOV_ENABLE_COMPARISONS
-			kcov->mode = KCOV_MODE_TRACE_CMP;
-#else
-		return -ENOTSUPP;
-#endif
-		else
-			return -EINVAL;
+		mode = kcov_get_mode(arg);
+		if (mode < 0)
+			return mode;
 		kcov_fault_in_area(kcov);
-		/* Cache in task struct for performance. */
-		t->kcov_size = kcov->size;
-		t->kcov_area = kcov->area;
-		/* See comment in check_kcov_mode(). */
-		barrier();
-		WRITE_ONCE(t->kcov_mode, kcov->mode);
+		kcov->mode = mode;
+		kcov_start(t, kcov->size, kcov->area, kcov->mode,
+				kcov->sequence);
 		t->kcov = kcov;
 		kcov->t = t;
-		/* This is put either in kcov_task_exit() or in KCOV_DISABLE. */
+		/* Put either in kcov_task_exit() or in KCOV_DISABLE. */
 		kcov_get(kcov);
 		return 0;
 	case KCOV_DISABLE:
+		kcov_debug("KCOV_DISABLE\n");
 		/* Disable coverage for the current task. */
 		unused = arg;
 		if (unused != 0 || current->kcov != kcov)
@@ -408,11 +606,65 @@
 		t = current;
 		if (WARN_ON(kcov->t != t))
 			return -EINVAL;
-		kcov_task_init(t);
-		kcov->t = NULL;
-		kcov->mode = KCOV_MODE_INIT;
+		kcov_disable(t, kcov);
 		kcov_put(kcov);
 		return 0;
+	case KCOV_REMOTE_ENABLE:
+		kcov_debug("KCOV_REMOTE_ENABLE\n");
+		if (kcov->mode != KCOV_MODE_INIT || !kcov->area)
+			return -EINVAL;
+		t = current;
+		if (kcov->t != NULL || t->kcov != NULL)
+			return -EBUSY;
+		remote_arg = (struct kcov_remote_arg *)arg;
+		mode = kcov_get_mode(remote_arg->trace_mode);
+		if (mode < 0)
+			return mode;
+		if (remote_arg->area_size > LONG_MAX / sizeof(unsigned long))
+			return -EINVAL;
+		kcov->mode = mode;
+		t->kcov = kcov;
+		kcov->t = t;
+		kcov->remote = true;
+		kcov->remote_size = remote_arg->area_size;
+		spin_lock(&kcov_remote_lock);
+		for (i = 0; i < remote_arg->num_handles; i++) {
+			kcov_debug("handle %llx\n", remote_arg->handles[i]);
+			if (!kcov_check_handle(remote_arg->handles[i],
+						false, true, false)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return -EINVAL;
+			}
+			remote = kcov_remote_add(kcov, remote_arg->handles[i]);
+			if (IS_ERR(remote)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return PTR_ERR(remote);
+			}
+		}
+		if (remote_arg->common_handle) {
+			kcov_debug("common handle %llx\n",
+					remote_arg->common_handle);
+			if (!kcov_check_handle(remote_arg->common_handle,
+						true, false, false)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return -EINVAL;
+			}
+			remote = kcov_remote_add(kcov,
+					remote_arg->common_handle);
+			if (IS_ERR(remote)) {
+				spin_unlock(&kcov_remote_lock);
+				kcov_disable(t, kcov);
+				return PTR_ERR(remote);
+			}
+			t->kcov_handle = remote_arg->common_handle;
+		}
+		spin_unlock(&kcov_remote_lock);
+		/* Put either in kcov_task_exit() or in KCOV_DISABLE. */
+		kcov_get(kcov);
+		return 0;
 	default:
 		return -ENOTTY;
 	}
@@ -422,11 +674,35 @@
 {
 	struct kcov *kcov;
 	int res;
+	struct kcov_remote_arg *remote_arg = NULL;
+	unsigned int remote_num_handles;
+	unsigned long remote_arg_size;
+
+	if (cmd == KCOV_REMOTE_ENABLE) {
+		if (get_user(remote_num_handles, (unsigned __user *)(arg +
+				offsetof(struct kcov_remote_arg, num_handles))))
+			return -EFAULT;
+		if (remote_num_handles > KCOV_REMOTE_MAX_HANDLES)
+			return -EINVAL;
+		remote_arg_size = struct_size(remote_arg, handles,
+					remote_num_handles);
+		remote_arg = memdup_user((void __user *)arg, remote_arg_size);
+		if (IS_ERR(remote_arg))
+			return PTR_ERR(remote_arg);
+		if (remote_arg->num_handles != remote_num_handles) {
+			kfree(remote_arg);
+			return -EINVAL;
+		}
+		arg = (unsigned long)remote_arg;
+	}
 
 	kcov = filep->private_data;
 	spin_lock(&kcov->lock);
 	res = kcov_ioctl_locked(kcov, cmd, arg);
 	spin_unlock(&kcov->lock);
+
+	kfree(remote_arg);
+
 	return res;
 }
 
@@ -438,6 +714,207 @@
 	.release        = kcov_close,
 };
 
+/*
+ * kcov_remote_start() and kcov_remote_stop() can be used to annotate a section
+ * of code in a kernel background thread to allow kcov to be used to collect
+ * coverage from that part of code.
+ *
+ * The handle argument of kcov_remote_start() identifies a code section that is
+ * used for coverage collection. A userspace process passes this handle to
+ * KCOV_REMOTE_ENABLE ioctl to make the used kcov device start collecting
+ * coverage for the code section identified by this handle.
+ *
+ * The usage of these annotations in the kernel code is different depending on
+ * the type of the kernel thread whose code is being annotated.
+ *
+ * For global kernel threads that are spawned in a limited number of instances
+ * (e.g. one USB hub_event() worker thread is spawned per USB HCD), each
+ * instance must be assigned a unique 4-byte instance id. The instance id is
+ * then combined with a 1-byte subsystem id to get a handle via
+ * kcov_remote_handle(subsystem_id, instance_id).
+ *
+ * For local kernel threads that are spawned from system calls handler when a
+ * user interacts with some kernel interface (e.g. vhost workers), a handle is
+ * passed from a userspace process as the common_handle field of the
+ * kcov_remote_arg struct (note, that the user must generate a handle by using
+ * kcov_remote_handle() with KCOV_SUBSYSTEM_COMMON as the subsystem id and an
+ * arbitrary 4-byte non-zero number as the instance id). This common handle
+ * then gets saved into the task_struct of the process that issued the
+ * KCOV_REMOTE_ENABLE ioctl. When this proccess issues system calls that spawn
+ * kernel threads, the common handle must be retrived via kcov_common_handle()
+ * and passed to the spawned threads via custom annotations. Those kernel
+ * threads must in turn be annotated with kcov_remote_start(common_handle) and
+ * kcov_remote_stop(). All of the threads that are spawned by the same process
+ * obtain the same handle, hence the name "common".
+ *
+ * See Documentation/dev-tools/kcov.rst for more details.
+ *
+ * Internally, this function looks up the kcov device associated with the
+ * provided handle, allocates an area for coverage collection, and saves the
+ * pointers to kcov and area into the current task_struct to allow coverage to
+ * be collected via __sanitizer_cov_trace_pc()
+ * In turns kcov_remote_stop() clears those pointers from task_struct to stop
+ * collecting coverage and copies all collected coverage into the kcov area.
+ */
+void kcov_remote_start(u64 handle)
+{
+	struct kcov_remote *remote;
+	void *area;
+	struct task_struct *t;
+	unsigned int size;
+	enum kcov_mode mode;
+	int sequence;
+
+	if (WARN_ON(!kcov_check_handle(handle, true, true, true)))
+		return;
+	if (WARN_ON(!in_task()))
+		return;
+	t = current;
+	/*
+	 * Check that kcov_remote_start is not called twice
+	 * nor called by user tasks (with enabled kcov).
+	 */
+	if (WARN_ON(t->kcov))
+		return;
+
+	kcov_debug("handle = %llx\n", handle);
+
+	spin_lock(&kcov_remote_lock);
+	remote = kcov_remote_find(handle);
+	if (!remote) {
+		kcov_debug("no remote found");
+		spin_unlock(&kcov_remote_lock);
+		return;
+	}
+	/* Put in kcov_remote_stop(). */
+	kcov_get(remote->kcov);
+	t->kcov = remote->kcov;
+	/*
+	 * Read kcov fields before unlock to prevent races with
+	 * KCOV_DISABLE / kcov_remote_reset().
+	 */
+	size = remote->kcov->remote_size;
+	mode = remote->kcov->mode;
+	sequence = remote->kcov->sequence;
+	area = kcov_remote_area_get(size);
+	spin_unlock(&kcov_remote_lock);
+
+	if (!area) {
+		area = vmalloc(size * sizeof(unsigned long));
+		if (!area) {
+			t->kcov = NULL;
+			kcov_put(remote->kcov);
+			return;
+		}
+	}
+	/* Reset coverage size. */
+	*(u64 *)area = 0;
+
+	kcov_debug("area = %px, size = %u", area, size);
+
+	kcov_start(t, size, area, mode, sequence);
+
+}
+EXPORT_SYMBOL(kcov_remote_start);
+
+static void kcov_move_area(enum kcov_mode mode, void *dst_area,
+				unsigned int dst_area_size, void *src_area)
+{
+	u64 word_size = sizeof(unsigned long);
+	u64 count_size, entry_size_log;
+	u64 dst_len, src_len;
+	void *dst_entries, *src_entries;
+	u64 dst_occupied, dst_free, bytes_to_move, entries_moved;
+
+	kcov_debug("%px %u <= %px %lu\n",
+		dst_area, dst_area_size, src_area, *(unsigned long *)src_area);
+
+	switch (mode) {
+	case KCOV_MODE_TRACE_PC:
+		dst_len = READ_ONCE(*(unsigned long *)dst_area);
+		src_len = *(unsigned long *)src_area;
+		count_size = sizeof(unsigned long);
+		entry_size_log = __ilog2_u64(sizeof(unsigned long));
+		break;
+	case KCOV_MODE_TRACE_CMP:
+		dst_len = READ_ONCE(*(u64 *)dst_area);
+		src_len = *(u64 *)src_area;
+		count_size = sizeof(u64);
+		BUILD_BUG_ON(!is_power_of_2(KCOV_WORDS_PER_CMP));
+		entry_size_log = __ilog2_u64(sizeof(u64) * KCOV_WORDS_PER_CMP);
+		break;
+	default:
+		WARN_ON(1);
+		return;
+	}
+
+	/* As arm can't divide u64 integers use log of entry size. */
+	if (dst_len > ((dst_area_size * word_size - count_size) >>
+				entry_size_log))
+		return;
+	dst_occupied = count_size + (dst_len << entry_size_log);
+	dst_free = dst_area_size * word_size - dst_occupied;
+	bytes_to_move = min(dst_free, src_len << entry_size_log);
+	dst_entries = dst_area + dst_occupied;
+	src_entries = src_area + count_size;
+	memcpy(dst_entries, src_entries, bytes_to_move);
+	entries_moved = bytes_to_move >> entry_size_log;
+
+	switch (mode) {
+	case KCOV_MODE_TRACE_PC:
+		WRITE_ONCE(*(unsigned long *)dst_area, dst_len + entries_moved);
+		break;
+	case KCOV_MODE_TRACE_CMP:
+		WRITE_ONCE(*(u64 *)dst_area, dst_len + entries_moved);
+		break;
+	default:
+		break;
+	}
+}
+
+/* See the comment before kcov_remote_start() for usage details. */
+void kcov_remote_stop(void)
+{
+	struct task_struct *t = current;
+	struct kcov *kcov = t->kcov;
+	void *area = t->kcov_area;
+	unsigned int size = t->kcov_size;
+	int sequence = t->kcov_sequence;
+
+	if (!kcov) {
+		kcov_debug("no kcov found\n");
+		return;
+	}
+
+	kcov_stop(t);
+	t->kcov = NULL;
+
+	spin_lock(&kcov->lock);
+	/*
+	 * KCOV_DISABLE could have been called between kcov_remote_start()
+	 * and kcov_remote_stop(), hence the check.
+	 */
+	kcov_debug("move if: %d == %d && %d\n",
+		sequence, kcov->sequence, (int)kcov->remote);
+	if (sequence == kcov->sequence && kcov->remote)
+		kcov_move_area(kcov->mode, kcov->area, kcov->size, area);
+	spin_unlock(&kcov->lock);
+
+	spin_lock(&kcov_remote_lock);
+	kcov_remote_area_put(area, size);
+	spin_unlock(&kcov_remote_lock);
+
+	kcov_put(kcov);
+}
+EXPORT_SYMBOL(kcov_remote_stop);
+
+/* See the comment before kcov_remote_start() for usage details. */
+u64 kcov_common_handle(void)
+{
+	return current->kcov_handle;
+}
+EXPORT_SYMBOL(kcov_common_handle);
+
 static int __init kcov_init(void)
 {
 	/*
diff --git a/kernel/kthread.c b/kernel/kthread.c
index 63f7eb3..0d9884a 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -932,7 +932,9 @@
 	struct timer_list *timer = &dwork->timer;
 	struct kthread_work *work = &dwork->work;
 
+#ifndef CONFIG_CFI_CLANG
 	WARN_ON_ONCE(timer->function != kthread_delayed_work_timer_fn);
+#endif
 
 	/*
 	 * If @delay is 0, queue @dwork->work immediately.  This is for
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c
index ab4a460..1a9827a 100644
--- a/kernel/livepatch/core.c
+++ b/kernel/livepatch/core.c
@@ -210,7 +210,7 @@
 	 * we use the smallest/strictest upper bound possible (56, based on
 	 * the current definition of MODULE_NAME_LEN) to prevent overflows.
 	 */
-	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 128);
+	BUILD_BUG_ON(MODULE_NAME_LEN < 56 || KSYM_NAME_LEN != 192);
 
 	relas = (Elf_Rela *) relasec->sh_addr;
 	/* For each rela in this klp relocation section */
@@ -224,7 +224,7 @@
 
 		/* Format: .klp.sym.objname.symname,sympos */
 		cnt = sscanf(strtab + sym->st_name,
-			     ".klp.sym.%55[^.].%127[^,],%lu",
+			     ".klp.sym.%55[^.].%191[^,],%lu",
 			     objname, symname, &sympos);
 		if (cnt != 3) {
 			pr_err("symbol %s has an incorrectly formatted name\n",
diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c
index b02fff2..6ccf00c 100644
--- a/kernel/locking/mutex.c
+++ b/kernel/locking/mutex.c
@@ -36,6 +36,8 @@
 # include "mutex.h"
 #endif
 
+#include <trace/hooks/dtask.h>
+
 void
 __mutex_init(struct mutex *lock, const char *name, struct lock_class_key *key)
 {
@@ -1014,6 +1016,7 @@
 
 	waiter.task = current;
 
+	trace_android_vh_mutex_wait_start(lock);
 	set_current_state(state);
 	for (;;) {
 		bool first;
@@ -1065,6 +1068,7 @@
 	spin_lock(&lock->wait_lock);
 acquired:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_mutex_wait_finish(lock);
 
 	if (ww_ctx) {
 		/*
@@ -1093,6 +1097,7 @@
 
 err:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_mutex_wait_finish(lock);
 	__mutex_remove_waiter(lock, &waiter);
 err_early_kill:
 	spin_unlock(&lock->wait_lock);
diff --git a/kernel/locking/rwsem.c b/kernel/locking/rwsem.c
index 5d54ff3..b91c0cb 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -31,6 +31,9 @@
 #include "rwsem.h"
 #include "lock_events.h"
 
+#include <trace/hooks/dtask.h>
+#include <trace/hooks/rwsem.h>
+
 /*
  * The least significant 3 bits of the owner value has the following
  * meanings when set.
@@ -341,6 +344,7 @@
 #ifdef CONFIG_RWSEM_SPIN_ON_OWNER
 	osq_lock_init(&sem->osq);
 #endif
+	trace_android_vh_rwsem_init(sem);
 }
 EXPORT_SYMBOL(__init_rwsem);
 
@@ -998,6 +1002,7 @@
 	struct rwsem_waiter waiter;
 	DEFINE_WAKE_Q(wake_q);
 	bool wake = false;
+	bool already_on_list = false;
 
 	/*
 	 * Save the current read-owner of rwsem, if available, and the
@@ -1059,7 +1064,11 @@
 		}
 		adjustment += RWSEM_FLAG_WAITERS;
 	}
-	list_add_tail(&waiter.list, &sem->wait_list);
+	trace_android_vh_alter_rwsem_list_add(
+					&waiter,
+					sem, &already_on_list);
+	if (!already_on_list)
+		list_add_tail(&waiter.list, &sem->wait_list);
 
 	/* we're now waiting on the lock, but no longer actively locking */
 	if (adjustment)
@@ -1081,10 +1090,12 @@
 		    (adjustment & RWSEM_FLAG_WAITERS)))
 		rwsem_mark_wake(sem, RWSEM_WAKE_ANY, &wake_q);
 
+	trace_android_vh_rwsem_wake(sem);
 	raw_spin_unlock_irq(&sem->wait_lock);
 	wake_up_q(&wake_q);
 
 	/* wait to be given the lock */
+	trace_android_vh_rwsem_read_wait_start(sem);
 	for (;;) {
 		set_current_state(state);
 		if (!smp_load_acquire(&waiter.task)) {
@@ -1104,6 +1115,7 @@
 	}
 
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_read_wait_finish(sem);
 	lockevent_inc(rwsem_rlock);
 	return sem;
 
@@ -1115,6 +1127,7 @@
 	}
 	raw_spin_unlock_irq(&sem->wait_lock);
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_read_wait_finish(sem);
 	lockevent_inc(rwsem_rlock_fail);
 	return ERR_PTR(-EINTR);
 }
@@ -1144,6 +1157,7 @@
 	struct rwsem_waiter waiter;
 	struct rw_semaphore *ret = sem;
 	DEFINE_WAKE_Q(wake_q);
+	bool already_on_list = false;
 
 	/* do optimistic spinning and steal lock if possible */
 	if (rwsem_can_spin_on_owner(sem, RWSEM_WR_NONSPINNABLE) &&
@@ -1172,7 +1186,11 @@
 	/* account for this before adding a new element to the list */
 	wstate = list_empty(&sem->wait_list) ? WRITER_FIRST : WRITER_NOT_FIRST;
 
-	list_add_tail(&waiter.list, &sem->wait_list);
+	trace_android_vh_alter_rwsem_list_add(
+					&waiter,
+					sem, &already_on_list);
+	if (!already_on_list)
+		list_add_tail(&waiter.list, &sem->wait_list);
 
 	/* we're now waiting on the lock */
 	if (wstate == WRITER_NOT_FIRST) {
@@ -1208,7 +1226,9 @@
 	}
 
 wait:
+	trace_android_vh_rwsem_wake(sem);
 	/* wait until we successfully acquire the lock */
+	trace_android_vh_rwsem_write_wait_start(sem);
 	set_current_state(state);
 	for (;;) {
 		if (rwsem_try_write_lock(sem, wstate)) {
@@ -1268,6 +1288,7 @@
 		raw_spin_lock_irq(&sem->wait_lock);
 	}
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_write_wait_finish(sem);
 	list_del(&waiter.list);
 	rwsem_disable_reader_optspin(sem, disable_rspin);
 	raw_spin_unlock_irq(&sem->wait_lock);
@@ -1277,6 +1298,7 @@
 
 out_nolock:
 	__set_current_state(TASK_RUNNING);
+	trace_android_vh_rwsem_write_wait_finish(sem);
 	raw_spin_lock_irq(&sem->wait_lock);
 	list_del(&waiter.list);
 
@@ -1610,6 +1632,7 @@
 void up_write(struct rw_semaphore *sem)
 {
 	rwsem_release(&sem->dep_map, 1, _RET_IP_);
+	trace_android_vh_rwsem_write_finished(sem);
 	__up_write(sem);
 }
 EXPORT_SYMBOL(up_write);
@@ -1620,6 +1643,7 @@
 void downgrade_write(struct rw_semaphore *sem)
 {
 	lock_downgrade(&sem->dep_map, _RET_IP_);
+	trace_android_vh_rwsem_write_finished(sem);
 	__downgrade_write(sem);
 }
 EXPORT_SYMBOL(downgrade_write);
diff --git a/kernel/module.c b/kernel/module.c
index 59d487b..5bfc2d1 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2236,6 +2236,8 @@
 {
 }
 
+static void cfi_cleanup(struct module *mod);
+
 /* Free a module, remove from lists, etc. */
 static void free_module(struct module *mod)
 {
@@ -2275,6 +2277,9 @@
 	synchronize_rcu();
 	mutex_unlock(&module_mutex);
 
+	/* Clean up CFI for the module. */
+	cfi_cleanup(mod);
+
 	/* This may be empty, but that's OK */
 	module_arch_freeing_init(mod);
 	module_memfree(mod->init_layout.base);
@@ -3624,6 +3629,8 @@
 	return 0;
 }
 
+static void cfi_init(struct module *mod);
+
 static int post_relocation(struct module *mod, const struct load_info *info)
 {
 	/* Sort exception table now relocations are done. */
@@ -3636,6 +3643,9 @@
 	/* Setup kallsyms-specific fields. */
 	add_kallsyms(mod, info);
 
+	/* Setup CFI for the module. */
+	cfi_init(mod);
+
 	/* Arch-specific module finalizing. */
 	return module_finalize(info->hdr, info->sechdrs, mod);
 }
@@ -4461,6 +4471,24 @@
 }
 #endif /* CONFIG_KALLSYMS */
 
+static void cfi_init(struct module *mod)
+{
+#ifdef CONFIG_CFI_CLANG
+	rcu_read_lock_sched();
+	mod->cfi_check = (cfi_check_fn)find_kallsyms_symbol_value(mod,
+						CFI_CHECK_FN_NAME);
+	rcu_read_unlock_sched();
+	cfi_module_add(mod, module_addr_min, module_addr_max);
+#endif
+}
+
+static void cfi_cleanup(struct module *mod)
+{
+#ifdef CONFIG_CFI_CLANG
+	cfi_module_remove(mod, module_addr_min, module_addr_max);
+#endif
+}
+
 /* Maximum number of characters written by module_flags() */
 #define MODULE_FLAGS_BUF_SIZE (TAINT_FLAGS_COUNT + 4)
 
diff --git a/kernel/pid.c b/kernel/pid.c
index 0a9f2e4..bf2c8b8 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -41,6 +41,7 @@
 #include <linux/anon_inodes.h>
 #include <linux/sched/signal.h>
 #include <linux/sched/task.h>
+#include <linux/file.h>
 #include <linux/idr.h>
 
 struct pid init_struct_pid = {
@@ -354,6 +355,7 @@
 {
 	return find_task_by_pid_ns(vnr, task_active_pid_ns(current));
 }
+EXPORT_SYMBOL_GPL(find_task_by_vpid);
 
 struct task_struct *find_get_task_by_vpid(pid_t nr)
 {
@@ -454,6 +456,25 @@
 	return idr_get_next(&ns->idr, &nr);
 }
 
+struct pid *pidfd_get_pid(unsigned int fd, unsigned int *flags)
+{
+	struct fd f;
+	struct pid *pid;
+
+	f = fdget(fd);
+	if (!f.file)
+		return ERR_PTR(-EBADF);
+
+	pid = pidfd_pid(f.file);
+	if (!IS_ERR(pid)) {
+		get_pid(pid);
+		*flags = f.file->f_flags;
+	}
+
+	fdput(f);
+	return pid;
+}
+
 /**
  * pidfd_create() - Create a new pid file descriptor.
  *
diff --git a/kernel/power/Makefile b/kernel/power/Makefile
index e7e47d9..c673a1b 100644
--- a/kernel/power/Makefile
+++ b/kernel/power/Makefile
@@ -16,4 +16,5 @@
 
 obj-$(CONFIG_MAGIC_SYSRQ)	+= poweroff.o
 
+obj-$(CONFIG_SUSPEND)		+= wakeup_reason.o
 obj-$(CONFIG_ENERGY_MODEL)	+= energy_model.o
diff --git a/kernel/power/process.c b/kernel/power/process.c
index 4b6a54d..da378ac 100644
--- a/kernel/power/process.c
+++ b/kernel/power/process.c
@@ -85,18 +85,21 @@
 	elapsed = ktime_sub(end, start);
 	elapsed_msecs = ktime_to_ms(elapsed);
 
-	if (todo) {
+	if (wakeup) {
 		pr_cont("\n");
-		pr_err("Freezing of tasks %s after %d.%03d seconds "
-		       "(%d tasks refusing to freeze, wq_busy=%d):\n",
-		       wakeup ? "aborted" : "failed",
+		pr_err("Freezing of tasks aborted after %d.%03d seconds",
+		       elapsed_msecs / 1000, elapsed_msecs % 1000);
+	} else if (todo) {
+		pr_cont("\n");
+		pr_err("Freezing of tasks failed after %d.%03d seconds"
+		       " (%d tasks refusing to freeze, wq_busy=%d):\n",
 		       elapsed_msecs / 1000, elapsed_msecs % 1000,
 		       todo - wq_busy, wq_busy);
 
 		if (wq_busy)
 			show_workqueue_state();
 
-		if (!wakeup || pm_debug_messages_on) {
+		if (pm_debug_messages_on) {
 			read_lock(&tasklist_lock);
 			for_each_process_thread(g, p) {
 				if (p != current && !freezer_should_skip(p)
diff --git a/kernel/power/qos.c b/kernel/power/qos.c
index a45cba7..83edf86 100644
--- a/kernel/power/qos.c
+++ b/kernel/power/qos.c
@@ -714,8 +714,10 @@
  * @req: Constraint request to apply.
  * @action: Action to perform (add/update/remove).
  * @value: Value to assign to the QoS request.
+ *
+ * This is only meant to be called from inside pm_qos, not drivers.
  */
-static int freq_qos_apply(struct freq_qos_request *req,
+int freq_qos_apply(struct freq_qos_request *req,
 			  enum pm_qos_req_action action, s32 value)
 {
 	int ret;
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c
index 27f149f..44dfe0b 100644
--- a/kernel/power/suspend.c
+++ b/kernel/power/suspend.c
@@ -30,6 +30,7 @@
 #include <trace/events/power.h>
 #include <linux/compiler.h>
 #include <linux/moduleparam.h>
+#include <linux/wakeup_reason.h>
 
 #include "power.h"
 
@@ -139,6 +140,7 @@
 		}
 
 		pm_wakeup_clear(false);
+		clear_wakeup_reasons();
 
 		s2idle_enter();
 	}
@@ -361,6 +363,7 @@
 	if (!error)
 		return 0;
 
+	log_suspend_abort_reason("One or more tasks refusing to freeze");
 	suspend_stats.failed_freeze++;
 	dpm_save_failed_step(SUSPEND_FREEZE);
  Finish:
@@ -390,7 +393,7 @@
  */
 static int suspend_enter(suspend_state_t state, bool *wakeup)
 {
-	int error;
+	int error, last_dev;
 
 	error = platform_suspend_prepare(state);
 	if (error)
@@ -398,7 +401,11 @@
 
 	error = dpm_suspend_late(PMSG_SUSPEND);
 	if (error) {
+		last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+		last_dev %= REC_FAILED_NUM;
 		pr_err("late suspend of devices failed\n");
+		log_suspend_abort_reason("late suspend of %s device failed",
+					 suspend_stats.failed_devs[last_dev]);
 		goto Platform_finish;
 	}
 	error = platform_suspend_prepare_late(state);
@@ -407,7 +414,11 @@
 
 	error = dpm_suspend_noirq(PMSG_SUSPEND);
 	if (error) {
+		last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
+		last_dev %= REC_FAILED_NUM;
 		pr_err("noirq suspend of devices failed\n");
+		log_suspend_abort_reason("noirq suspend of %s device failed",
+					 suspend_stats.failed_devs[last_dev]);
 		goto Platform_early_resume;
 	}
 	error = platform_suspend_prepare_noirq(state);
@@ -423,8 +434,10 @@
 	}
 
 	error = suspend_disable_secondary_cpus();
-	if (error || suspend_test(TEST_CPUS))
+	if (error || suspend_test(TEST_CPUS)) {
+		log_suspend_abort_reason("Disabling non-boot cpus failed");
 		goto Enable_cpus;
+	}
 
 	arch_suspend_disable_irqs();
 	BUG_ON(!irqs_disabled());
@@ -495,6 +508,8 @@
 	error = dpm_suspend_start(PMSG_SUSPEND);
 	if (error) {
 		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");
 		goto Recover_platform;
 	}
 	suspend_test_finish("suspend devices");
diff --git a/kernel/power/wakeup_reason.c b/kernel/power/wakeup_reason.c
new file mode 100644
index 0000000..8fefaa3
--- /dev/null
+++ b/kernel/power/wakeup_reason.c
@@ -0,0 +1,438 @@
+/*
+ * kernel/power/wakeup_reason.c
+ *
+ * Logs the reasons which caused the kernel to resume from
+ * the suspend mode.
+ *
+ * Copyright (C) 2020 Google, Inc.
+ * 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.
+ */
+
+#include <linux/wakeup_reason.h>
+#include <linux/kernel.h>
+#include <linux/irq.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/kobject.h>
+#include <linux/sysfs.h>
+#include <linux/init.h>
+#include <linux/spinlock.h>
+#include <linux/notifier.h>
+#include <linux/suspend.h>
+#include <linux/slab.h>
+
+/*
+ * struct wakeup_irq_node - stores data and relationships for IRQs logged as
+ * either base or nested wakeup reasons during suspend/resume flow.
+ * @siblings - for membership on leaf or parent IRQ lists
+ * @irq      - the IRQ number
+ * @irq_name - the name associated with the IRQ, or a default if none
+ */
+struct wakeup_irq_node {
+	struct list_head siblings;
+	int irq;
+	const char *irq_name;
+};
+
+enum wakeup_reason_flag {
+	RESUME_NONE = 0,
+	RESUME_IRQ,
+	RESUME_ABORT,
+	RESUME_ABNORMAL,
+};
+
+static DEFINE_SPINLOCK(wakeup_reason_lock);
+
+static LIST_HEAD(leaf_irqs);   /* kept in ascending IRQ sorted order */
+static LIST_HEAD(parent_irqs); /* unordered */
+
+static struct kmem_cache *wakeup_irq_nodes_cache;
+
+static const char *default_irq_name = "(unnamed)";
+
+static struct kobject *kobj;
+
+static bool capture_reasons;
+static int wakeup_reason;
+static char non_irq_wake_reason[MAX_SUSPEND_ABORT_LEN];
+
+static ktime_t last_monotime; /* monotonic time before last suspend */
+static ktime_t curr_monotime; /* monotonic time after last suspend */
+static ktime_t last_stime; /* monotonic boottime offset before last suspend */
+static ktime_t curr_stime; /* monotonic boottime offset after last suspend */
+
+static void init_node(struct wakeup_irq_node *p, int irq)
+{
+	struct irq_desc *desc;
+
+	INIT_LIST_HEAD(&p->siblings);
+
+	p->irq = irq;
+	desc = irq_to_desc(irq);
+	if (desc && desc->action && desc->action->name)
+		p->irq_name = desc->action->name;
+	else
+		p->irq_name = default_irq_name;
+}
+
+static struct wakeup_irq_node *create_node(int irq)
+{
+	struct wakeup_irq_node *result;
+
+	result = kmem_cache_alloc(wakeup_irq_nodes_cache, GFP_ATOMIC);
+	if (unlikely(!result))
+		pr_warn("Failed to log wakeup IRQ %d\n", irq);
+	else
+		init_node(result, irq);
+
+	return result;
+}
+
+static void delete_list(struct list_head *head)
+{
+	struct wakeup_irq_node *n;
+
+	while (!list_empty(head)) {
+		n = list_first_entry(head, struct wakeup_irq_node, siblings);
+		list_del(&n->siblings);
+		kmem_cache_free(wakeup_irq_nodes_cache, n);
+	}
+}
+
+static bool add_sibling_node_sorted(struct list_head *head, int irq)
+{
+	struct wakeup_irq_node *n = NULL;
+	struct list_head *predecessor = head;
+
+	if (unlikely(WARN_ON(!head)))
+		return NULL;
+
+	if (!list_empty(head))
+		list_for_each_entry(n, head, siblings) {
+			if (n->irq < irq)
+				predecessor = &n->siblings;
+			else if (n->irq == irq)
+				return true;
+			else
+				break;
+		}
+
+	n = create_node(irq);
+	if (n) {
+		list_add(&n->siblings, predecessor);
+		return true;
+	}
+
+	return false;
+}
+
+static struct wakeup_irq_node *find_node_in_list(struct list_head *head,
+						 int irq)
+{
+	struct wakeup_irq_node *n;
+
+	if (unlikely(WARN_ON(!head)))
+		return NULL;
+
+	list_for_each_entry(n, head, siblings)
+		if (n->irq == irq)
+			return n;
+
+	return NULL;
+}
+
+void log_irq_wakeup_reason(int irq)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+	if (wakeup_reason == RESUME_ABNORMAL || wakeup_reason == RESUME_ABORT) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (!capture_reasons) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (find_node_in_list(&parent_irqs, irq) == NULL)
+		add_sibling_node_sorted(&leaf_irqs, irq);
+
+	wakeup_reason = RESUME_IRQ;
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+void log_threaded_irq_wakeup_reason(int irq, int parent_irq)
+{
+	struct wakeup_irq_node *parent;
+	unsigned long flags;
+
+	/*
+	 * Intentionally unsynchronized.  Calls that come in after we have
+	 * resumed should have a fast exit path since there's no work to be
+	 * done, any any coherence issue that could cause a wrong value here is
+	 * both highly improbable - given the set/clear timing - and very low
+	 * impact (parent IRQ gets logged instead of the specific child).
+	 */
+	if (!capture_reasons)
+		return;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	if (wakeup_reason == RESUME_ABNORMAL || wakeup_reason == RESUME_ABORT) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (!capture_reasons || (find_node_in_list(&leaf_irqs, irq) != NULL)) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	parent = find_node_in_list(&parent_irqs, parent_irq);
+	if (parent != NULL)
+		add_sibling_node_sorted(&leaf_irqs, irq);
+	else {
+		parent = find_node_in_list(&leaf_irqs, parent_irq);
+		if (parent != NULL) {
+			list_del_init(&parent->siblings);
+			list_add_tail(&parent->siblings, &parent_irqs);
+			add_sibling_node_sorted(&leaf_irqs, irq);
+		}
+	}
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+EXPORT_SYMBOL_GPL(log_threaded_irq_wakeup_reason);
+
+static void __log_abort_or_abnormal_wake(bool abort, const char *fmt,
+					 va_list args)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	/* Suspend abort or abnormal wake reason has already been logged. */
+	if (wakeup_reason != RESUME_NONE) {
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (abort)
+		wakeup_reason = RESUME_ABORT;
+	else
+		wakeup_reason = RESUME_ABNORMAL;
+
+	vsnprintf(non_irq_wake_reason, MAX_SUSPEND_ABORT_LEN, fmt, args);
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+void log_suspend_abort_reason(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	__log_abort_or_abnormal_wake(true, fmt, args);
+	va_end(args);
+}
+EXPORT_SYMBOL_GPL(log_suspend_abort_reason);
+
+void log_abnormal_wakeup_reason(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	__log_abort_or_abnormal_wake(false, fmt, args);
+	va_end(args);
+}
+EXPORT_SYMBOL_GPL(log_abnormal_wakeup_reason);
+
+void clear_wakeup_reasons(void)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	delete_list(&leaf_irqs);
+	delete_list(&parent_irqs);
+	wakeup_reason = RESUME_NONE;
+	capture_reasons = true;
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+static void print_wakeup_sources(void)
+{
+	struct wakeup_irq_node *n;
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	capture_reasons = false;
+
+	if (wakeup_reason == RESUME_ABORT) {
+		pr_info("Abort: %s\n", non_irq_wake_reason);
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return;
+	}
+
+	if (wakeup_reason == RESUME_IRQ && !list_empty(&leaf_irqs))
+		list_for_each_entry(n, &leaf_irqs, siblings)
+			pr_info("Resume caused by IRQ %d, %s\n", n->irq,
+				n->irq_name);
+	else if (wakeup_reason == RESUME_ABNORMAL)
+		pr_info("Resume caused by %s\n", non_irq_wake_reason);
+	else
+		pr_info("Resume cause unknown\n");
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+}
+
+static ssize_t last_resume_reason_show(struct kobject *kobj,
+				       struct kobj_attribute *attr, char *buf)
+{
+	ssize_t buf_offset = 0;
+	struct wakeup_irq_node *n;
+	unsigned long flags;
+
+	spin_lock_irqsave(&wakeup_reason_lock, flags);
+
+	if (wakeup_reason == RESUME_ABORT) {
+		buf_offset = scnprintf(buf, PAGE_SIZE, "Abort: %s",
+				       non_irq_wake_reason);
+		spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+		return buf_offset;
+	}
+
+	if (wakeup_reason == RESUME_IRQ && !list_empty(&leaf_irqs))
+		list_for_each_entry(n, &leaf_irqs, siblings)
+			buf_offset += scnprintf(buf + buf_offset,
+						PAGE_SIZE - buf_offset,
+						"%d %s\n", n->irq, n->irq_name);
+	else if (wakeup_reason == RESUME_ABNORMAL)
+		buf_offset = scnprintf(buf, PAGE_SIZE, "-1 %s",
+				       non_irq_wake_reason);
+
+	spin_unlock_irqrestore(&wakeup_reason_lock, flags);
+
+	return buf_offset;
+}
+
+static ssize_t last_suspend_time_show(struct kobject *kobj,
+			struct kobj_attribute *attr, char *buf)
+{
+	struct timespec64 sleep_time;
+	struct timespec64 total_time;
+	struct timespec64 suspend_resume_time;
+
+	/*
+	 * total_time is calculated from monotonic bootoffsets because
+	 * unlike CLOCK_MONOTONIC it include the time spent in suspend state.
+	 */
+	total_time = ktime_to_timespec64(ktime_sub(curr_stime, last_stime));
+
+	/*
+	 * suspend_resume_time is calculated as monotonic (CLOCK_MONOTONIC)
+	 * time interval before entering suspend and post suspend.
+	 */
+	suspend_resume_time =
+		ktime_to_timespec64(ktime_sub(curr_monotime, last_monotime));
+
+	/* sleep_time = total_time - suspend_resume_time */
+	sleep_time = timespec64_sub(total_time, suspend_resume_time);
+
+	/* Export suspend_resume_time and sleep_time in pair here. */
+	return sprintf(buf, "%llu.%09lu %llu.%09lu\n",
+		       (unsigned long long)suspend_resume_time.tv_sec,
+		       suspend_resume_time.tv_nsec,
+		       (unsigned long long)sleep_time.tv_sec,
+		       sleep_time.tv_nsec);
+}
+
+static struct kobj_attribute resume_reason = __ATTR_RO(last_resume_reason);
+static struct kobj_attribute suspend_time = __ATTR_RO(last_suspend_time);
+
+static struct attribute *attrs[] = {
+	&resume_reason.attr,
+	&suspend_time.attr,
+	NULL,
+};
+static struct attribute_group attr_group = {
+	.attrs = attrs,
+};
+
+/* Detects a suspend and clears all the previous wake up reasons*/
+static int wakeup_reason_pm_event(struct notifier_block *notifier,
+		unsigned long pm_event, void *unused)
+{
+	switch (pm_event) {
+	case PM_SUSPEND_PREPARE:
+		/* monotonic time since boot */
+		last_monotime = ktime_get();
+		/* monotonic time since boot including the time spent in suspend */
+		last_stime = ktime_get_boottime();
+		clear_wakeup_reasons();
+		break;
+	case PM_POST_SUSPEND:
+		/* monotonic time since boot */
+		curr_monotime = ktime_get();
+		/* monotonic time since boot including the time spent in suspend */
+		curr_stime = ktime_get_boottime();
+		print_wakeup_sources();
+		break;
+	default:
+		break;
+	}
+	return NOTIFY_DONE;
+}
+
+static struct notifier_block wakeup_reason_pm_notifier_block = {
+	.notifier_call = wakeup_reason_pm_event,
+};
+
+static int __init wakeup_reason_init(void)
+{
+	if (register_pm_notifier(&wakeup_reason_pm_notifier_block)) {
+		pr_warn("[%s] failed to register PM notifier\n", __func__);
+		goto fail;
+	}
+
+	kobj = kobject_create_and_add("wakeup_reasons", kernel_kobj);
+	if (!kobj) {
+		pr_warn("[%s] failed to create a sysfs kobject\n", __func__);
+		goto fail_unregister_pm_notifier;
+	}
+
+	if (sysfs_create_group(kobj, &attr_group)) {
+		pr_warn("[%s] failed to create a sysfs group\n", __func__);
+		goto fail_kobject_put;
+	}
+
+	wakeup_irq_nodes_cache =
+		kmem_cache_create("wakeup_irq_node_cache",
+				  sizeof(struct wakeup_irq_node), 0, 0, NULL);
+	if (!wakeup_irq_nodes_cache)
+		goto fail_remove_group;
+
+	return 0;
+
+fail_remove_group:
+	sysfs_remove_group(kobj, &attr_group);
+fail_kobject_put:
+	kobject_put(kobj);
+fail_unregister_pm_notifier:
+	unregister_pm_notifier(&wakeup_reason_pm_notifier_block);
+fail:
+	return 1;
+}
+
+late_initcall(wakeup_reason_init);
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 23e26a2..ba77bc3 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -3145,6 +3145,23 @@
 static bool always_kmsg_dump;
 module_param_named(always_kmsg_dump, always_kmsg_dump, bool, S_IRUGO | S_IWUSR);
 
+const char *kmsg_dump_reason_str(enum kmsg_dump_reason reason)
+{
+	switch (reason) {
+	case KMSG_DUMP_PANIC:
+		return "Panic";
+	case KMSG_DUMP_OOPS:
+		return "Oops";
+	case KMSG_DUMP_EMERG:
+		return "Emergency";
+	case KMSG_DUMP_SHUTDOWN:
+		return "Shutdown";
+	default:
+		return "Unknown";
+	}
+}
+EXPORT_SYMBOL_GPL(kmsg_dump_reason_str);
+
 /**
  * kmsg_dump - dump kernel log to kernel message dumpers.
  * @reason: the reason (oops, panic etc) for dumping
@@ -3158,12 +3175,19 @@
 	struct kmsg_dumper *dumper;
 	unsigned long flags;
 
-	if ((reason > KMSG_DUMP_OOPS) && !always_kmsg_dump)
-		return;
-
 	rcu_read_lock();
 	list_for_each_entry_rcu(dumper, &dump_list, list) {
-		if (dumper->max_reason && reason > dumper->max_reason)
+		enum kmsg_dump_reason max_reason = dumper->max_reason;
+
+		/*
+		 * If client has not provided a specific max_reason, default
+		 * to KMSG_DUMP_OOPS, unless always_kmsg_dump was set.
+		 */
+		if (max_reason == KMSG_DUMP_UNDEF) {
+			max_reason = always_kmsg_dump ? KMSG_DUMP_MAX :
+							KMSG_DUMP_OOPS;
+		}
+		if (reason > max_reason)
 			continue;
 
 		/* initialize iterator with data about the stored records */
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index 7777c35..48e5131 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -602,6 +602,7 @@
 	lockdep_assert_irqs_disabled();
 	rcu_eqs_enter(false);
 }
+EXPORT_SYMBOL_GPL(rcu_idle_enter);
 
 #ifdef CONFIG_NO_HZ_FULL
 /**
@@ -774,6 +775,7 @@
 	rcu_eqs_exit(false);
 	local_irq_restore(flags);
 }
+EXPORT_SYMBOL_GPL(rcu_idle_exit);
 
 #ifdef CONFIG_NO_HZ_FULL
 /**
diff --git a/kernel/reboot.c b/kernel/reboot.c
index ac19159..9c1fee6 100644
--- a/kernel/reboot.c
+++ b/kernel/reboot.c
@@ -32,7 +32,9 @@
 #define DEFAULT_REBOOT_MODE
 #endif
 enum reboot_mode reboot_mode DEFAULT_REBOOT_MODE;
+EXPORT_SYMBOL_GPL(reboot_mode);
 enum reboot_mode panic_reboot_mode = REBOOT_UNDEFINED;
+EXPORT_SYMBOL_GPL(panic_reboot_mode);
 
 /*
  * This variable is used privately to keep track of whether or not
@@ -250,7 +252,7 @@
 		pr_emerg("Restarting system\n");
 	else
 		pr_emerg("Restarting system with command '%s'\n", cmd);
-	kmsg_dump(KMSG_DUMP_RESTART);
+	kmsg_dump(KMSG_DUMP_SHUTDOWN);
 	machine_restart(cmd);
 }
 EXPORT_SYMBOL_GPL(kernel_restart);
@@ -274,7 +276,7 @@
 	migrate_to_reboot_cpu();
 	syscore_shutdown();
 	pr_emerg("System halted\n");
-	kmsg_dump(KMSG_DUMP_HALT);
+	kmsg_dump(KMSG_DUMP_SHUTDOWN);
 	machine_halt();
 }
 EXPORT_SYMBOL_GPL(kernel_halt);
@@ -292,7 +294,7 @@
 	migrate_to_reboot_cpu();
 	syscore_shutdown();
 	pr_emerg("Power down\n");
-	kmsg_dump(KMSG_DUMP_POWEROFF);
+	kmsg_dump(KMSG_DUMP_SHUTDOWN);
 	machine_power_off();
 }
 EXPORT_SYMBOL_GPL(kernel_power_off);
diff --git a/kernel/sched/OWNERS b/kernel/sched/OWNERS
new file mode 100644
index 0000000..fc027b6
--- /dev/null
+++ b/kernel/sched/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/kernel/sched/OWNERS
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 5befdec..232d649 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -11,6 +11,7 @@
 #include <linux/nospec.h>
 
 #include <linux/kcov.h>
+#include <linux/scs.h>
 
 #include <asm/switch_to.h>
 #include <asm/tlb.h>
@@ -23,6 +24,12 @@
 #define CREATE_TRACE_POINTS
 #include <trace/events/sched.h>
 
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/dtask.h>
+
+#undef CREATE_TRACE_POINTS
+#include <trace/hooks/sched.h>
+
 /*
  * Export tracepoints that act as a bare tracehook (ie: have no trace event
  * associated with them) to allow external modules to probe them.
@@ -35,6 +42,7 @@
 EXPORT_TRACEPOINT_SYMBOL_GPL(sched_overutilized_tp);
 
 DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
+EXPORT_SYMBOL_GPL(runqueues);
 
 #ifdef CONFIG_SCHED_DEBUG
 /*
@@ -789,6 +797,23 @@
 /* Max allowed maximum utilization */
 unsigned int sysctl_sched_uclamp_util_max = SCHED_CAPACITY_SCALE;
 
+/*
+ * By default RT tasks run at the maximum performance point/capacity of the
+ * system. Uclamp enforces this by always setting UCLAMP_MIN of RT tasks to
+ * SCHED_CAPACITY_SCALE.
+ *
+ * This knob allows admins to change the default behavior when uclamp is being
+ * used. In battery powered devices, particularly, running at the maximum
+ * capacity and frequency will increase energy consumption and shorten the
+ * battery life.
+ *
+ * This knob only affects RT tasks that their uclamp_se->user_defined == false.
+ *
+ * This knob will not override the system default sched_util_clamp_min defined
+ * above.
+ */
+unsigned int sysctl_sched_uclamp_util_min_rt_default = SCHED_CAPACITY_SCALE;
+
 /* All clamps are required to be less or equal than these values */
 static struct uclamp_se uclamp_default[UCLAMP_CNT];
 
@@ -891,6 +916,64 @@
 	return uclamp_idle_value(rq, clamp_id, clamp_value);
 }
 
+static void __uclamp_update_util_min_rt_default(struct task_struct *p)
+{
+	unsigned int default_util_min;
+	struct uclamp_se *uc_se;
+
+	lockdep_assert_held(&p->pi_lock);
+
+	uc_se = &p->uclamp_req[UCLAMP_MIN];
+
+	/* Only sync if user didn't override the default */
+	if (uc_se->user_defined)
+		return;
+
+	default_util_min = sysctl_sched_uclamp_util_min_rt_default;
+	uclamp_se_set(uc_se, default_util_min, false);
+}
+
+static void uclamp_update_util_min_rt_default(struct task_struct *p)
+{
+	struct rq_flags rf;
+	struct rq *rq;
+
+	if (!rt_task(p))
+		return;
+
+	/* Protect updates to p->uclamp_* */
+	rq = task_rq_lock(p, &rf);
+	__uclamp_update_util_min_rt_default(p);
+	task_rq_unlock(rq, p, &rf);
+}
+
+static void uclamp_sync_util_min_rt_default(void)
+{
+	struct task_struct *g, *p;
+
+	/*
+	 * copy_process()			sysctl_uclamp
+	 *					  uclamp_min_rt = X;
+	 *   write_lock(&tasklist_lock)		  read_lock(&tasklist_lock)
+	 *   // link thread			  smp_mb__after_spinlock()
+	 *   write_unlock(&tasklist_lock)	  read_unlock(&tasklist_lock);
+	 *   sched_post_fork()			  for_each_process_thread()
+	 *     __uclamp_sync_rt()		    __uclamp_sync_rt()
+	 *
+	 * Ensures that either sched_post_fork() will observe the new
+	 * uclamp_min_rt or for_each_process_thread() will observe the new
+	 * task.
+	 */
+	read_lock(&tasklist_lock);
+	smp_mb__after_spinlock();
+	read_unlock(&tasklist_lock);
+
+	rcu_read_lock();
+	for_each_process_thread(g, p)
+		uclamp_update_util_min_rt_default(p);
+	rcu_read_unlock();
+}
+
 static inline struct uclamp_se
 uclamp_tg_restrict(struct task_struct *p, enum uclamp_id clamp_id)
 {
@@ -939,17 +1022,17 @@
 	return uc_req;
 }
 
-unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
+unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id)
 {
 	struct uclamp_se uc_eff;
 
 	/* Task currently refcounted: use back-annotated (effective) value */
 	if (p->uclamp[clamp_id].active)
-		return p->uclamp[clamp_id].value;
+		return (unsigned long)p->uclamp[clamp_id].value;
 
 	uc_eff = uclamp_eff_get(p, clamp_id);
 
-	return uc_eff.value;
+	return (unsigned long)uc_eff.value;
 }
 
 /*
@@ -1192,12 +1275,13 @@
 				loff_t *ppos)
 {
 	bool update_root_tg = false;
-	int old_min, old_max;
+	int old_min, old_max, old_min_rt;
 	int result;
 
 	mutex_lock(&uclamp_mutex);
 	old_min = sysctl_sched_uclamp_util_min;
 	old_max = sysctl_sched_uclamp_util_max;
+	old_min_rt = sysctl_sched_uclamp_util_min_rt_default;
 
 	result = proc_dointvec(table, write, buffer, lenp, ppos);
 	if (result)
@@ -1206,7 +1290,9 @@
 		goto done;
 
 	if (sysctl_sched_uclamp_util_min > sysctl_sched_uclamp_util_max ||
-	    sysctl_sched_uclamp_util_max > SCHED_CAPACITY_SCALE) {
+	    sysctl_sched_uclamp_util_max > SCHED_CAPACITY_SCALE	||
+	    sysctl_sched_uclamp_util_min_rt_default > SCHED_CAPACITY_SCALE) {
+
 		result = -EINVAL;
 		goto undo;
 	}
@@ -1227,6 +1313,11 @@
 		uclamp_update_root_tg();
 	}
 
+	if (old_min_rt != sysctl_sched_uclamp_util_min_rt_default) {
+		static_branch_enable(&sched_uclamp_used);
+		uclamp_sync_util_min_rt_default();
+	}
+
 	/*
 	 * We update all RUNNABLE tasks only when task groups are in use.
 	 * Otherwise, keep it simple and do just a lazy update at each next
@@ -1238,6 +1329,7 @@
 undo:
 	sysctl_sched_uclamp_util_min = old_min;
 	sysctl_sched_uclamp_util_max = old_max;
+	sysctl_sched_uclamp_util_min_rt_default = old_min_rt;
 done:
 	mutex_unlock(&uclamp_mutex);
 
@@ -1283,17 +1375,20 @@
 	 */
 	for_each_clamp_id(clamp_id) {
 		struct uclamp_se *uc_se = &p->uclamp_req[clamp_id];
-		unsigned int clamp_value = uclamp_none(clamp_id);
 
 		/* Keep using defined clamps across class changes */
 		if (uc_se->user_defined)
 			continue;
 
-		/* By default, RT tasks always get 100% boost */
+		/*
+		 * RT by default have a 100% boost value that could be modified
+		 * at runtime.
+		 */
 		if (unlikely(rt_task(p) && clamp_id == UCLAMP_MIN))
-			clamp_value = uclamp_none(UCLAMP_MAX);
+			__uclamp_update_util_min_rt_default(p);
+		else
+			uclamp_se_set(uc_se, uclamp_none(clamp_id), false);
 
-		uclamp_se_set(uc_se, clamp_value, false);
 	}
 
 	if (likely(!(attr->sched_flags & SCHED_FLAG_UTIL_CLAMP)))
@@ -1314,6 +1409,10 @@
 {
 	enum uclamp_id clamp_id;
 
+	/*
+	 * We don't need to hold task_rq_lock() when updating p->uclamp_* here
+	 * as the task is still at its early fork stages.
+	 */
 	for_each_clamp_id(clamp_id)
 		p->uclamp[clamp_id].active = false;
 
@@ -1326,6 +1425,11 @@
 	}
 }
 
+static void uclamp_post_fork(struct task_struct *p)
+{
+	uclamp_update_util_min_rt_default(p);
+}
+
 static void __init init_uclamp_rq(struct rq *rq)
 {
 	enum uclamp_id clamp_id;
@@ -1378,6 +1482,7 @@
 static void __setscheduler_uclamp(struct task_struct *p,
 				  const struct sched_attr *attr) { }
 static inline void uclamp_fork(struct task_struct *p) { }
+static inline void uclamp_post_fork(struct task_struct *p) { }
 static inline void init_uclamp(void) { }
 #endif /* CONFIG_UCLAMP_TASK */
 
@@ -1393,6 +1498,8 @@
 
 	uclamp_rq_inc(rq, p);
 	p->sched_class->enqueue_task(rq, p, flags);
+
+	trace_android_rvh_enqueue_task(rq, p);
 }
 
 static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
@@ -1407,6 +1514,8 @@
 
 	uclamp_rq_dec(rq, p);
 	p->sched_class->dequeue_task(rq, p, flags);
+
+	trace_android_rvh_dequeue_task(rq, p);
 }
 
 void activate_task(struct rq *rq, struct task_struct *p, int flags)
@@ -2127,7 +2236,11 @@
 	int nid = cpu_to_node(cpu);
 	const struct cpumask *nodemask = NULL;
 	enum { cpuset, possible, fail } state = cpuset;
-	int dest_cpu;
+	int dest_cpu = -1;
+
+	trace_android_rvh_select_fallback_rq(cpu, p, &dest_cpu);
+	if (dest_cpu >= 0)
+		return dest_cpu;
 
 	/*
 	 * If the node that the CPU is on has been offlined, cpu_to_node()
@@ -2950,6 +3063,7 @@
 	 * Make sure we do not leak PI boosting priority to the child.
 	 */
 	p->prio = current->normal_prio;
+	trace_android_rvh_prepare_prio_fork(p);
 
 	uclamp_fork(p);
 
@@ -2982,6 +3096,7 @@
 		p->sched_class = &fair_sched_class;
 
 	init_entity_runnable_average(&p->se);
+	trace_android_rvh_finish_prio_fork(p);
 
 	/*
 	 * The child is not yet in the pid-hash so no cgroup attach races,
@@ -3016,6 +3131,11 @@
 	return 0;
 }
 
+void sched_post_fork(struct task_struct *p)
+{
+	uclamp_post_fork(p);
+}
+
 unsigned long to_ratio(u64 period, u64 runtime)
 {
 	if (runtime == RUNTIME_INF)
@@ -3710,6 +3830,8 @@
 	rq->idle_balance = idle_cpu(cpu);
 	trigger_load_balance(rq);
 #endif
+
+	trace_android_vh_scheduler_tick(rq);
 }
 
 #ifdef CONFIG_NO_HZ_FULL
@@ -4480,6 +4602,7 @@
 	struct rq_flags rf;
 	struct rq *rq;
 
+	trace_android_rvh_rtmutex_prepare_setprio(p, pi_task);
 	/* XXX used to be waiter->prio, not waiter->task->prio */
 	prio = __rt_effective_prio(pi_task, p->normal_prio);
 
@@ -4598,12 +4721,13 @@
 
 void set_user_nice(struct task_struct *p, long nice)
 {
-	bool queued, running;
+	bool queued, running, allowed = false;
 	int old_prio, delta;
 	struct rq_flags rf;
 	struct rq *rq;
 
-	if (task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE)
+	trace_android_rvh_set_user_nice(p, &nice, &allowed);
+	if ((task_nice(p) == nice || nice < MIN_NICE || nice > MAX_NICE) && !allowed)
 		return;
 	/*
 	 * We have to be careful, if called from sys_setpriority(),
@@ -4834,6 +4958,8 @@
 		p->sched_class = &rt_sched_class;
 	else
 		p->sched_class = &fair_sched_class;
+
+	trace_android_rvh_setscheduler(p);
 }
 
 /*
@@ -4962,9 +5088,6 @@
 			return retval;
 	}
 
-	if (pi)
-		cpuset_read_lock();
-
 	/*
 	 * Make sure no PI-waiters arrive (or leave) while we are
 	 * changing the priority of the task:
@@ -5039,8 +5162,6 @@
 	if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
 		policy = oldpolicy = -1;
 		task_rq_unlock(rq, p, &rf);
-		if (pi)
-			cpuset_read_unlock();
 		goto recheck;
 	}
 
@@ -5101,10 +5222,8 @@
 	preempt_disable();
 	task_rq_unlock(rq, p, &rf);
 
-	if (pi) {
-		cpuset_read_unlock();
+	if (pi)
 		rt_mutex_adjust_pi(p);
-	}
 
 	/* Run balance callbacks after we've adjusted the PI chain: */
 	balance_callback(rq);
@@ -5114,8 +5233,6 @@
 
 unlock:
 	task_rq_unlock(rq, p, &rf);
-	if (pi)
-		cpuset_read_unlock();
 	return retval;
 }
 
@@ -5164,6 +5281,7 @@
 {
 	return __sched_setscheduler(p, attr, false, true);
 }
+EXPORT_SYMBOL_GPL(sched_setattr_nocheck);
 
 /**
  * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace.
@@ -5200,14 +5318,9 @@
 	rcu_read_lock();
 	retval = -ESRCH;
 	p = find_process_by_pid(pid);
-	if (likely(p))
-		get_task_struct(p);
-	rcu_read_unlock();
-
-	if (likely(p)) {
+	if (p != NULL)
 		retval = sched_setscheduler(p, policy, &lparam);
-		put_task_struct(p);
-	}
+	rcu_read_unlock();
 
 	return retval;
 }
@@ -5474,6 +5587,11 @@
 		kattr.sched_nice = task_nice(p);
 
 #ifdef CONFIG_UCLAMP_TASK
+	/*
+	 * This could race with another potential updater, but this is fine
+	 * because it'll correctly read the old or the new value. We don't need
+	 * to guarantee who wins the race as long as it doesn't return garbage.
+	 */
 	kattr.sched_util_min = p->uclamp_req[UCLAMP_MIN].value;
 	kattr.sched_util_max = p->uclamp_req[UCLAMP_MAX].value;
 #endif
@@ -6042,6 +6160,7 @@
 		(unsigned long)task_thread_info(p)->flags);
 
 	print_worker_info(KERN_INFO, p);
+	trace_android_vh_sched_show_task(p);
 	show_stack(p, NULL);
 	put_task_stack(p);
 }
@@ -6129,6 +6248,7 @@
 	idle->se.exec_start = sched_clock();
 	idle->flags |= PF_IDLE;
 
+	scs_task_reset(idle);
 	kasan_unpoison_task_stack(idle);
 
 #ifdef CONFIG_SMP
@@ -7461,6 +7581,27 @@
 	cpu_uclamp_print(sf, UCLAMP_MAX);
 	return 0;
 }
+
+static int cpu_uclamp_ls_write_u64(struct cgroup_subsys_state *css,
+				   struct cftype *cftype, u64 ls)
+{
+	struct task_group *tg;
+
+	if (ls > 1)
+		return -EINVAL;
+	tg = css_tg(css);
+	tg->latency_sensitive = (unsigned int) ls;
+
+	return 0;
+}
+
+static u64 cpu_uclamp_ls_read_u64(struct cgroup_subsys_state *css,
+				  struct cftype *cft)
+{
+	struct task_group *tg = css_tg(css);
+
+	return (u64) tg->latency_sensitive;
+}
 #endif /* CONFIG_UCLAMP_TASK_GROUP */
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
@@ -7829,6 +7970,12 @@
 		.seq_show = cpu_uclamp_max_show,
 		.write = cpu_uclamp_max_write,
 	},
+	{
+		.name = "uclamp.latency_sensitive",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.read_u64 = cpu_uclamp_ls_read_u64,
+		.write_u64 = cpu_uclamp_ls_write_u64,
+	},
 #endif
 	{ }	/* Terminate */
 };
@@ -8010,6 +8157,12 @@
 		.seq_show = cpu_uclamp_max_show,
 		.write = cpu_uclamp_max_write,
 	},
+	{
+		.name = "uclamp.latency_sensitive",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.read_u64 = cpu_uclamp_ls_read_u64,
+		.write_u64 = cpu_uclamp_ls_write_u64,
+	},
 #endif
 	{ }	/* terminate */
 };
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 831fee5..4052aa4 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -12,6 +12,7 @@
 
 #include <linux/sched/cpufreq.h>
 #include <trace/events/power.h>
+#include <trace/hooks/sched.h>
 
 #define IOWAIT_BOOST_MIN	(SCHED_CAPACITY_SCALE / 8)
 
@@ -172,8 +173,13 @@
 	struct cpufreq_policy *policy = sg_policy->policy;
 	unsigned int freq = arch_scale_freq_invariant() ?
 				policy->cpuinfo.max_freq : policy->cur;
+	unsigned long next_freq = 0;
 
-	freq = map_util_freq(util, freq, max);
+	trace_android_vh_map_util_freq(util, freq, max, &next_freq);
+	if (next_freq)
+		freq = next_freq;
+	else
+		freq = map_util_freq(util, freq, max);
 
 	if (freq == sg_policy->cached_raw_freq && !sg_policy->need_freq_update)
 		return sg_policy->next_freq;
@@ -238,7 +244,7 @@
 	 */
 	util = util_cfs + cpu_util_rt(rq);
 	if (type == FREQUENCY_UTIL)
-		util = uclamp_util_with(rq, util, p);
+		util = uclamp_rq_util_with(rq, util, p);
 
 	dl_util = cpu_util_dl(rq);
 
@@ -919,7 +925,7 @@
 {
 	return cpufreq_register_governor(&schedutil_gov);
 }
-fs_initcall(sugov_register);
+core_initcall(sugov_register);
 
 #ifdef CONFIG_ENERGY_MODEL
 extern bool sched_energy_update;
diff --git a/kernel/sched/cpupri.c b/kernel/sched/cpupri.c
index b7abca9..0033731 100644
--- a/kernel/sched/cpupri.c
+++ b/kernel/sched/cpupri.c
@@ -41,11 +41,72 @@
 	return cpupri;
 }
 
+static inline int __cpupri_find(struct cpupri *cp, struct task_struct *p,
+				struct cpumask *lowest_mask, int idx)
+{
+	struct cpupri_vec *vec  = &cp->pri_to_cpu[idx];
+	int skip = 0;
+
+	if (!atomic_read(&(vec)->count))
+		skip = 1;
+	/*
+	 * When looking at the vector, we need to read the counter,
+	 * do a memory barrier, then read the mask.
+	 *
+	 * Note: This is still all racey, but we can deal with it.
+	 *  Ideally, we only want to look at masks that are set.
+	 *
+	 *  If a mask is not set, then the only thing wrong is that we
+	 *  did a little more work than necessary.
+	 *
+	 *  If we read a zero count but the mask is set, because of the
+	 *  memory barriers, that can only happen when the highest prio
+	 *  task for a run queue has left the run queue, in which case,
+	 *  it will be followed by a pull. If the task we are processing
+	 *  fails to find a proper place to go, that pull request will
+	 *  pull this task if the run queue is running at a lower
+	 *  priority.
+	 */
+	smp_rmb();
+
+	/* Need to do the rmb for every iteration */
+	if (skip)
+		return 0;
+
+	if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids)
+		return 0;
+
+	if (lowest_mask) {
+		cpumask_and(lowest_mask, p->cpus_ptr, vec->mask);
+
+		/*
+		 * We have to ensure that we have at least one bit
+		 * still set in the array, since the map could have
+		 * been concurrently emptied between the first and
+		 * second reads of vec->mask.  If we hit this
+		 * condition, simply act as though we never hit this
+		 * priority level and continue on.
+		 */
+		if (cpumask_empty(lowest_mask))
+			return 0;
+	}
+
+	return 1;
+}
+
+int cpupri_find(struct cpupri *cp, struct task_struct *p,
+		struct cpumask *lowest_mask)
+{
+	return cpupri_find_fitness(cp, p, lowest_mask, NULL);
+}
+
 /**
- * cpupri_find - find the best (lowest-pri) CPU in the system
+ * cpupri_find_fitness - find the best (lowest-pri) CPU in the system
  * @cp: The cpupri context
  * @p: The task
  * @lowest_mask: A mask to fill in with selected CPUs (or NULL)
+ * @fitness_fn: A pointer to a function to do custom checks whether the CPU
+ *              fits a specific criteria so that we only return those CPUs.
  *
  * Note: This function returns the recommended CPUs as calculated during the
  * current invocation.  By the time the call returns, the CPUs may have in
@@ -56,65 +117,59 @@
  *
  * Return: (int)bool - CPUs were found
  */
-int cpupri_find(struct cpupri *cp, struct task_struct *p,
-		struct cpumask *lowest_mask)
+int cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
+		struct cpumask *lowest_mask,
+		bool (*fitness_fn)(struct task_struct *p, int cpu))
 {
-	int idx = 0;
 	int task_pri = convert_prio(p->prio);
+	int idx, cpu;
 
 	BUG_ON(task_pri >= CPUPRI_NR_PRIORITIES);
 
 	for (idx = 0; idx < task_pri; idx++) {
-		struct cpupri_vec *vec  = &cp->pri_to_cpu[idx];
-		int skip = 0;
 
-		if (!atomic_read(&(vec)->count))
-			skip = 1;
-		/*
-		 * When looking at the vector, we need to read the counter,
-		 * do a memory barrier, then read the mask.
-		 *
-		 * Note: This is still all racey, but we can deal with it.
-		 *  Ideally, we only want to look at masks that are set.
-		 *
-		 *  If a mask is not set, then the only thing wrong is that we
-		 *  did a little more work than necessary.
-		 *
-		 *  If we read a zero count but the mask is set, because of the
-		 *  memory barriers, that can only happen when the highest prio
-		 *  task for a run queue has left the run queue, in which case,
-		 *  it will be followed by a pull. If the task we are processing
-		 *  fails to find a proper place to go, that pull request will
-		 *  pull this task if the run queue is running at a lower
-		 *  priority.
-		 */
-		smp_rmb();
-
-		/* Need to do the rmb for every iteration */
-		if (skip)
+		if (!__cpupri_find(cp, p, lowest_mask, idx))
 			continue;
 
-		if (cpumask_any_and(p->cpus_ptr, vec->mask) >= nr_cpu_ids)
-			continue;
+		if (!lowest_mask || !fitness_fn)
+			return 1;
 
-		if (lowest_mask) {
-			cpumask_and(lowest_mask, p->cpus_ptr, vec->mask);
-
-			/*
-			 * We have to ensure that we have at least one bit
-			 * still set in the array, since the map could have
-			 * been concurrently emptied between the first and
-			 * second reads of vec->mask.  If we hit this
-			 * condition, simply act as though we never hit this
-			 * priority level and continue on.
-			 */
-			if (cpumask_any(lowest_mask) >= nr_cpu_ids)
-				continue;
+		/* Ensure the capacity of the CPUs fit the task */
+		for_each_cpu(cpu, lowest_mask) {
+			if (!fitness_fn(p, cpu))
+				cpumask_clear_cpu(cpu, lowest_mask);
 		}
 
+		/*
+		 * If no CPU at the current priority can fit the task
+		 * continue looking
+		 */
+		if (cpumask_empty(lowest_mask))
+			continue;
+
 		return 1;
 	}
 
+	/*
+	 * If we failed to find a fitting lowest_mask, kick off a new search
+	 * but without taking into account any fitness criteria this time.
+	 *
+	 * This rule favours honouring priority over fitting the task in the
+	 * correct CPU (Capacity Awareness being the only user now).
+	 * The idea is that if a higher priority task can run, then it should
+	 * run even if this ends up being on unfitting CPU.
+	 *
+	 * The cost of this trade-off is not entirely clear and will probably
+	 * be good for some workloads and bad for others.
+	 *
+	 * The main idea here is that if some CPUs were overcommitted, we try
+	 * to spread which is what the scheduler traditionally did. Sys admins
+	 * must do proper RT planning to avoid overloading the system if they
+	 * really care.
+	 */
+	if (fitness_fn)
+		return cpupri_find(cp, p, lowest_mask);
+
 	return 0;
 }
 
diff --git a/kernel/sched/cpupri.h b/kernel/sched/cpupri.h
index 7dc20a3..efbb492 100644
--- a/kernel/sched/cpupri.h
+++ b/kernel/sched/cpupri.h
@@ -18,7 +18,11 @@
 };
 
 #ifdef CONFIG_SMP
-int  cpupri_find(struct cpupri *cp, struct task_struct *p, struct cpumask *lowest_mask);
+int  cpupri_find(struct cpupri *cp, struct task_struct *p,
+		 struct cpumask *lowest_mask);
+int  cpupri_find_fitness(struct cpupri *cp, struct task_struct *p,
+			 struct cpumask *lowest_mask,
+			 bool (*fitness_fn)(struct task_struct *p, int cpu));
 void cpupri_set(struct cpupri *cp, int cpu, int pri);
 int  cpupri_init(struct cpupri *cp);
 void cpupri_cleanup(struct cpupri *cp);
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index 46ed4e1..a147909 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -2,6 +2,7 @@
 /*
  * Simple CPU accounting cgroup controller
  */
+#include <linux/cpufreq_times.h>
 #include "sched.h"
 
 #ifdef CONFIG_IRQ_TIME_ACCOUNTING
@@ -129,6 +130,9 @@
 
 	/* Account for user time used */
 	acct_account_cputime(p);
+
+	/* Account power usage for user time */
+	cpufreq_acct_update_power(p, cputime);
 }
 
 /*
@@ -173,6 +177,9 @@
 
 	/* Account for system time used */
 	acct_account_cputime(p);
+
+	/* Account power usage for system time */
+	cpufreq_acct_update_power(p, cputime);
 }
 
 /*
@@ -464,6 +471,7 @@
 	*ut = cputime.utime;
 	*st = cputime.stime;
 }
+EXPORT_SYMBOL_GPL(thread_group_cputime_adjusted);
 
 #else /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE: */
 
@@ -678,6 +686,8 @@
 	thread_group_cputime(p, &cputime);
 	cputime_adjust(&cputime, &p->signal->prev_cputime, ut, st);
 }
+EXPORT_SYMBOL_GPL(thread_group_cputime_adjusted);
+
 #endif /* !CONFIG_VIRT_CPU_ACCOUNTING_NATIVE */
 
 #ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 87d9fad..ae5abcf 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -23,6 +23,7 @@
 #include "sched.h"
 
 #include <trace/events/sched.h>
+#include <trace/hooks/sched.h>
 
 /*
  * Targeted preemption latency for CPU-bound tasks:
@@ -972,6 +973,7 @@
 			}
 
 			trace_sched_stat_blocked(tsk, delta);
+			trace_sched_blocked_reason(tsk);
 
 			/*
 			 * Blocking time is in units of nanosecs, so shift by
@@ -3707,6 +3709,20 @@
 	return max(task_util(p), _task_util_est(p));
 }
 
+#ifdef CONFIG_UCLAMP_TASK
+static inline unsigned long uclamp_task_util(struct task_struct *p)
+{
+	return clamp(task_util_est(p),
+		     uclamp_eff_value(p, UCLAMP_MIN),
+		     uclamp_eff_value(p, UCLAMP_MAX));
+}
+#else
+static inline unsigned long uclamp_task_util(struct task_struct *p)
+{
+	return task_util_est(p);
+}
+#endif
+
 static inline void util_est_enqueue(struct cfs_rq *cfs_rq,
 				    struct task_struct *p)
 {
@@ -3765,10 +3781,21 @@
 		return;
 
 	/*
+	 * Reset EWMA on utilization increases, the moving average is used only
+	 * to smooth utilization decreases.
+	 */
+	ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
+	if (sched_feat(UTIL_EST_FASTUP)) {
+		if (ue.ewma < ue.enqueued) {
+			ue.ewma = ue.enqueued;
+			goto done;
+		}
+	}
+
+	/*
 	 * Skip update of task's estimated utilization when its EWMA is
 	 * already ~1% close to its last activation value.
 	 */
-	ue.enqueued = (task_util(p) | UTIL_AVG_UNCHANGED);
 	last_ewma_diff = ue.enqueued - ue.ewma;
 	if (within_margin(last_ewma_diff, (SCHED_CAPACITY_SCALE / 100)))
 		return;
@@ -3801,12 +3828,13 @@
 	ue.ewma <<= UTIL_EST_WEIGHT_SHIFT;
 	ue.ewma  += last_ewma_diff;
 	ue.ewma >>= UTIL_EST_WEIGHT_SHIFT;
+done:
 	WRITE_ONCE(p->se.avg.util_est, ue);
 }
 
 static inline int task_fits_capacity(struct task_struct *p, long capacity)
 {
-	return fits_capacity(task_util_est(p), capacity);
+	return fits_capacity(uclamp_task_util(p), capacity);
 }
 
 static inline void update_misfit_status(struct task_struct *p, struct rq *rq)
@@ -6050,21 +6078,75 @@
 }
 
 /*
+ * Scan the asym_capacity domain for idle CPUs; pick the first idle one on which
+ * the task fits. If no CPU is big enough, but there are idle ones, try to
+ * maximize capacity.
+ */
+static int
+select_idle_capacity(struct task_struct *p, struct sched_domain *sd, int target)
+{
+	unsigned long task_util, best_cap = 0;
+	int cpu, best_cpu = -1;
+	struct cpumask *cpus;
+
+	cpus = this_cpu_cpumask_var_ptr(select_idle_mask);
+	cpumask_and(cpus, sched_domain_span(sd), p->cpus_ptr);
+
+	task_util = uclamp_task_util(p);
+
+	for_each_cpu_wrap(cpu, cpus, target) {
+		unsigned long cpu_cap = capacity_of(cpu);
+
+		if (!available_idle_cpu(cpu) && !sched_idle_cpu(cpu))
+			continue;
+		if (fits_capacity(task_util, cpu_cap))
+			return cpu;
+
+		if (cpu_cap > best_cap) {
+			best_cap = cpu_cap;
+			best_cpu = cpu;
+		}
+	}
+
+	return best_cpu;
+}
+
+static inline bool asym_fits_capacity(int task_util, int cpu)
+{
+	if (static_branch_unlikely(&sched_asym_cpucapacity))
+		return fits_capacity(task_util, capacity_of(cpu));
+
+	return true;
+}
+
+/*
  * Try and locate an idle core/thread in the LLC cache domain.
  */
 static int select_idle_sibling(struct task_struct *p, int prev, int target)
 {
 	struct sched_domain *sd;
+	unsigned long task_util;
 	int i, recent_used_cpu;
 
-	if (available_idle_cpu(target) || sched_idle_cpu(target))
+	/*
+	 * On asymmetric system, update task utilization because we will check
+	 * that the task fits with cpu's capacity.
+	 */
+	if (static_branch_unlikely(&sched_asym_cpucapacity)) {
+		sync_entity_load_avg(&p->se);
+		task_util = uclamp_task_util(p);
+	}
+
+	if ((available_idle_cpu(target) || sched_idle_cpu(target)) &&
+	    asym_fits_capacity(task_util, target))
 		return target;
 
 	/*
 	 * If the previous CPU is cache affine and idle, don't be stupid:
 	 */
 	if (prev != target && cpus_share_cache(prev, target) &&
-	    (available_idle_cpu(prev) || sched_idle_cpu(prev)))
+	    (available_idle_cpu(prev) || sched_idle_cpu(prev)) &&
+	    asym_fits_capacity(task_util, prev))
 		return prev;
 
 	/* Check a recently used CPU as a potential idle candidate: */
@@ -6073,7 +6155,8 @@
 	    recent_used_cpu != target &&
 	    cpus_share_cache(recent_used_cpu, target) &&
 	    (available_idle_cpu(recent_used_cpu) || sched_idle_cpu(recent_used_cpu)) &&
-	    cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr)) {
+	    cpumask_test_cpu(p->recent_used_cpu, p->cpus_ptr) &&
+	    asym_fits_capacity(task_util, recent_used_cpu)) {
 		/*
 		 * Replace recent_used_cpu with prev as it is a potential
 		 * candidate for the next wake:
@@ -6082,6 +6165,26 @@
 		return recent_used_cpu;
 	}
 
+	/*
+	 * For asymmetric CPU capacity systems, our domain of interest is
+	 * sd_asym_cpucapacity rather than sd_llc.
+	 */
+	if (static_branch_unlikely(&sched_asym_cpucapacity)) {
+		sd = rcu_dereference(per_cpu(sd_asym_cpucapacity, target));
+		/*
+		 * On an asymmetric CPU capacity system where an exclusive
+		 * cpuset defines a symmetric island (i.e. one unique
+		 * capacity_orig value through the cpuset), the key will be set
+		 * but the CPUs within that cpuset will not have a domain with
+		 * SD_ASYM_CPUCAPACITY. These should follow the usual symmetric
+		 * capacity path.
+		 */
+		if (sd) {
+			i = select_idle_capacity(p, sd, target);
+			return ((unsigned)i < nr_cpumask_bits) ? i : target;
+		}
+	}
+
 	sd = rcu_dereference(per_cpu(sd_llc, target));
 	if (!sd)
 		return target;
@@ -6243,33 +6346,6 @@
 }
 
 /*
- * Disable WAKE_AFFINE in the case where task @p doesn't fit in the
- * capacity of either the waking CPU @cpu or the previous CPU @prev_cpu.
- *
- * In that case WAKE_AFFINE doesn't make sense and we'll let
- * BALANCE_WAKE sort things out.
- */
-static int wake_cap(struct task_struct *p, int cpu, int prev_cpu)
-{
-	long min_cap, max_cap;
-
-	if (!static_branch_unlikely(&sched_asym_cpucapacity))
-		return 0;
-
-	min_cap = min(capacity_orig_of(prev_cpu), capacity_orig_of(cpu));
-	max_cap = cpu_rq(cpu)->rd->max_cpu_capacity;
-
-	/* Minimum capacity is close to max, no need to abort wake_affine */
-	if (max_cap - min_cap < max_cap >> 3)
-		return 0;
-
-	/* Bring task utilization in sync with prev_cpu */
-	sync_entity_load_avg(&p->se);
-
-	return !task_fits_capacity(p, min_cap);
-}
-
-/*
  * Predicts what cpu_util(@cpu) would return if @p was migrated (and enqueued)
  * to @dst_cpu.
  */
@@ -6320,6 +6396,7 @@
 	struct cpumask *pd_mask = perf_domain_span(pd);
 	unsigned long cpu_cap = arch_scale_cpu_capacity(cpumask_first(pd_mask));
 	unsigned long max_util = 0, sum_util = 0;
+	unsigned long energy = 0;
 	int cpu;
 
 	/*
@@ -6356,7 +6433,11 @@
 		max_util = max(max_util, cpu_util);
 	}
 
-	return em_pd_energy(pd->em_pd, max_util, sum_util);
+	trace_android_vh_em_pd_energy(pd->em_pd, max_util, sum_util, &energy);
+	if (!energy)
+		energy = em_pd_energy(pd->em_pd, max_util, sum_util);
+
+	return energy;
 }
 
 /*
@@ -6398,12 +6479,17 @@
  * other use-cases too. So, until someone finds a better way to solve this,
  * let's keep things simple by re-using the existing slow path.
  */
-static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
+static int find_energy_efficient_cpu(struct task_struct *p, int prev_cpu, int sync)
 {
 	unsigned long prev_delta = ULONG_MAX, best_delta = ULONG_MAX;
 	struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
+	int max_spare_cap_cpu_ls = prev_cpu, best_idle_cpu = -1;
+	unsigned long max_spare_cap_ls = 0, target_cap;
 	unsigned long cpu_cap, util, base_energy = 0;
+	bool boosted, latency_sensitive = false;
+	unsigned int min_exit_lat = UINT_MAX;
 	int cpu, best_energy_cpu = prev_cpu;
+	struct cpuidle_state *idle;
 	struct sched_domain *sd;
 	struct perf_domain *pd;
 
@@ -6412,6 +6498,13 @@
 	if (!pd || READ_ONCE(rd->overutilized))
 		goto fail;
 
+	cpu = smp_processor_id();
+	if (sync && cpu_rq(cpu)->nr_running == 1 &&
+	    cpumask_test_cpu(cpu, p->cpus_ptr)) {
+		rcu_read_unlock();
+		return cpu;
+	}
+
 	/*
 	 * Energy-aware wake-up happens on the lowest sched_domain starting
 	 * from sd_asym_cpucapacity spanning over this_cpu and prev_cpu.
@@ -6426,6 +6519,10 @@
 	if (!task_util_est(p))
 		goto unlock;
 
+	latency_sensitive = uclamp_latency_sensitive(p);
+	boosted = uclamp_boosted(p);
+	target_cap = boosted ? 0 : ULONG_MAX;
+
 	for (; pd; pd = pd->next) {
 		unsigned long cur_delta, spare_cap, max_spare_cap = 0;
 		unsigned long base_energy_pd;
@@ -6439,14 +6536,24 @@
 			if (!cpumask_test_cpu(cpu, p->cpus_ptr))
 				continue;
 
-			/* Skip CPUs that will be overutilized. */
 			util = cpu_util_next(cpu, p, cpu);
 			cpu_cap = capacity_of(cpu);
+			spare_cap = cpu_cap;
+			lsub_positive(&spare_cap, util);
+
+			/*
+			 * Skip CPUs that cannot satisfy the capacity request.
+			 * IOW, placing the task there would make the CPU
+			 * overutilized. Take uclamp into account to see how
+			 * much capacity we can get out of the CPU; this is
+			 * aligned with schedutil_cpu_util().
+			 */
+			util = uclamp_rq_util_with(cpu_rq(cpu), util, p);
 			if (!fits_capacity(util, cpu_cap))
 				continue;
 
 			/* Always use prev_cpu as a candidate. */
-			if (cpu == prev_cpu) {
+			if (!latency_sensitive && cpu == prev_cpu) {
 				prev_delta = compute_energy(p, prev_cpu, pd);
 				prev_delta -= base_energy_pd;
 				best_delta = min(best_delta, prev_delta);
@@ -6456,15 +6563,38 @@
 			 * Find the CPU with the maximum spare capacity in
 			 * the performance domain
 			 */
-			spare_cap = cpu_cap - util;
 			if (spare_cap > max_spare_cap) {
 				max_spare_cap = spare_cap;
 				max_spare_cap_cpu = cpu;
 			}
+
+			if (!latency_sensitive)
+				continue;
+
+			if (idle_cpu(cpu)) {
+				cpu_cap = capacity_orig_of(cpu);
+				if (boosted && cpu_cap < target_cap)
+					continue;
+				if (!boosted && cpu_cap > target_cap)
+					continue;
+				idle = idle_get_state(cpu_rq(cpu));
+				if (idle && idle->exit_latency > min_exit_lat &&
+						cpu_cap == target_cap)
+					continue;
+
+				if (idle)
+					min_exit_lat = idle->exit_latency;
+				target_cap = cpu_cap;
+				best_idle_cpu = cpu;
+			} else if (spare_cap > max_spare_cap_ls) {
+				max_spare_cap_ls = spare_cap;
+				max_spare_cap_cpu_ls = cpu;
+			}
 		}
 
 		/* Evaluate the energy impact of using this CPU. */
-		if (max_spare_cap_cpu >= 0 && max_spare_cap_cpu != prev_cpu) {
+		if (!latency_sensitive && max_spare_cap_cpu >= 0 &&
+						max_spare_cap_cpu != prev_cpu) {
 			cur_delta = compute_energy(p, max_spare_cap_cpu, pd);
 			cur_delta -= base_energy_pd;
 			if (cur_delta < best_delta) {
@@ -6476,6 +6606,9 @@
 unlock:
 	rcu_read_unlock();
 
+	if (latency_sensitive)
+		return best_idle_cpu >= 0 ? best_idle_cpu : max_spare_cap_cpu_ls;
+
 	/*
 	 * Pick the best CPU if prev_cpu cannot be used, or if it saves at
 	 * least 6% of the energy used by prev_cpu.
@@ -6514,19 +6647,24 @@
 	int new_cpu = prev_cpu;
 	int want_affine = 0;
 	int sync = (wake_flags & WF_SYNC) && !(current->flags & PF_EXITING);
+	int target_cpu = -1;
+
+	trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag,
+			wake_flags, &target_cpu);
+	if (target_cpu >= 0)
+		return target_cpu;
 
 	if (sd_flag & SD_BALANCE_WAKE) {
 		record_wakee(p);
 
 		if (sched_energy_enabled()) {
-			new_cpu = find_energy_efficient_cpu(p, prev_cpu);
+			new_cpu = find_energy_efficient_cpu(p, prev_cpu, sync);
 			if (new_cpu >= 0)
 				return new_cpu;
 			new_cpu = prev_cpu;
 		}
 
-		want_affine = !wake_wide(p) && !wake_cap(p, cpu, prev_cpu) &&
-			      cpumask_test_cpu(cpu, p->cpus_ptr);
+		want_affine = !wake_wide(p) && cpumask_test_cpu(cpu, p->cpus_ptr);
 	}
 
 	rcu_read_lock();
@@ -7173,6 +7311,7 @@
 	int			new_dst_cpu;
 	enum cpu_idle_type	idle;
 	long			imbalance;
+	unsigned int		src_grp_nr_running;
 	/* The set of CPUs under consideration for load-balancing */
 	struct cpumask		*cpus;
 
@@ -7287,9 +7426,14 @@
 int can_migrate_task(struct task_struct *p, struct lb_env *env)
 {
 	int tsk_cache_hot;
+	int can_migrate = 1;
 
 	lockdep_assert_held(&env->src_rq->lock);
 
+	trace_android_rvh_can_migrate_task(p, env->dst_cpu, &can_migrate);
+	if (!can_migrate)
+		return 0;
+
 	/*
 	 * We do not migrate tasks that are:
 	 * 1) throttled_lb_pair, or
@@ -7821,10 +7965,9 @@
 	};
 }
 
-static unsigned long scale_rt_capacity(struct sched_domain *sd, int cpu)
+static unsigned long scale_rt_capacity(int cpu, unsigned long max)
 {
 	struct rq *rq = cpu_rq(cpu);
-	unsigned long max = arch_scale_cpu_capacity(cpu);
 	unsigned long used, free;
 	unsigned long irq;
 
@@ -7844,12 +7987,47 @@
 	return scale_irq_capacity(free, irq, max);
 }
 
+void init_max_cpu_capacity(struct max_cpu_capacity *mcc) {
+	raw_spin_lock_init(&mcc->lock);
+	mcc->val = 0;
+	mcc->cpu = -1;
+}
+
 static void update_cpu_capacity(struct sched_domain *sd, int cpu)
 {
-	unsigned long capacity = scale_rt_capacity(sd, cpu);
+	unsigned long capacity = arch_scale_cpu_capacity(cpu);
 	struct sched_group *sdg = sd->groups;
+	struct max_cpu_capacity *mcc;
+	unsigned long max_capacity;
+	int max_cap_cpu;
+	unsigned long flags;
 
-	cpu_rq(cpu)->cpu_capacity_orig = arch_scale_cpu_capacity(cpu);
+	cpu_rq(cpu)->cpu_capacity_orig = capacity;
+
+	capacity *= arch_scale_max_freq_capacity(sd, cpu);
+	capacity >>= SCHED_CAPACITY_SHIFT;
+
+	mcc = &cpu_rq(cpu)->rd->max_cpu_capacity;
+
+	raw_spin_lock_irqsave(&mcc->lock, flags);
+	max_capacity = mcc->val;
+	max_cap_cpu = mcc->cpu;
+
+	if ((max_capacity > capacity && max_cap_cpu == cpu) ||
+	    (max_capacity < capacity)) {
+		mcc->val = capacity;
+		mcc->cpu = cpu;
+#ifdef CONFIG_SCHED_DEBUG
+		raw_spin_unlock_irqrestore(&mcc->lock, flags);
+		printk_deferred(KERN_INFO "CPU%d: update max cpu_capacity %lu\n",
+				cpu, capacity);
+		goto skip_unlock;
+#endif
+	}
+	raw_spin_unlock_irqrestore(&mcc->lock, flags);
+
+skip_unlock: __attribute__ ((unused));
+	capacity = scale_rt_capacity(cpu, capacity);
 
 	if (!capacity)
 		capacity = 1;
@@ -7953,7 +8131,7 @@
 static inline int check_misfit_status(struct rq *rq, struct sched_domain *sd)
 {
 	return rq->misfit_task_load &&
-		(rq->cpu_capacity_orig < rq->rd->max_cpu_capacity ||
+		(rq->cpu_capacity_orig < rq->rd->max_cpu_capacity.val ||
 		 check_cpu_capacity(rq, sd));
 }
 
@@ -8356,6 +8534,8 @@
 	if (env->sd->flags & SD_NUMA)
 		env->fbq_type = fbq_classify_group(&sds->busiest_stat);
 
+	env->src_grp_nr_running = sds->busiest_stat.sum_nr_running;
+
 	if (!env->sd->parent) {
 		struct root_domain *rd = env->dst_rq->rd;
 
@@ -8484,7 +8664,22 @@
 	capa_move /= SCHED_CAPACITY_SCALE;
 
 	/* Move if we gain throughput */
-	if (capa_move > capa_now)
+	if (capa_move > capa_now) {
+		env->imbalance = busiest->load_per_task;
+		return;
+	}
+
+	/* We can't see throughput improvement with the load-based
+	 * method, but it is possible depending upon group size and
+	 * capacity range that there might still be an underutilized
+	 * cpu available in an asymmetric capacity system. Do one last
+	 * check just in case.
+	 */
+	if (env->sd->flags & SD_ASYM_CPUCAPACITY &&
+		busiest->group_type == group_overloaded &&
+		busiest->sum_nr_running > busiest->group_weight &&
+		local->sum_nr_running < local->group_weight &&
+		local->group_capacity < busiest->group_capacity)
 		env->imbalance = busiest->load_per_task;
 }
 
@@ -8553,8 +8748,18 @@
 		(sds->avg_load - local->avg_load) * local->group_capacity
 	) / SCHED_CAPACITY_SCALE;
 
-	/* Boost imbalance to allow misfit task to be balanced. */
-	if (busiest->group_type == group_misfit_task) {
+	/* Boost imbalance to allow misfit task to be balanced.
+	 * Always do this if we are doing a NEWLY_IDLE balance
+	 * on the assumption that any tasks we have must not be
+	 * long-running (and hence we cannot rely upon load).
+	 * However if we are not idle, we should assume the tasks
+	 * we have are longer running and not override load-based
+	 * calculations above unless we are sure that the local
+	 * group is underutilized.
+	 */
+	if (busiest->group_type == group_misfit_task &&
+		(env->idle == CPU_NEWLY_IDLE ||
+		local->sum_nr_running < local->group_weight)) {
 		env->imbalance = max_t(long, env->imbalance,
 				       busiest->group_misfit_task_load);
 	}
@@ -8597,8 +8802,12 @@
 
 	if (sched_energy_enabled()) {
 		struct root_domain *rd = env->dst_rq->rd;
+		int out_balance = 1;
 
-		if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized))
+		trace_android_rvh_find_busiest_group(sds.busiest, env->dst_rq,
+					&out_balance);
+		if (rcu_dereference(rd->pd) && !READ_ONCE(rd->overutilized)
+					&& out_balance)
 			goto out_balanced;
 	}
 
@@ -8832,6 +9041,9 @@
 	if (voluntary_active_balance(env))
 		return 1;
 
+	if (env->src_grp_type == group_overloaded && env->src_rq->misfit_task_load)
+		return 1;
+
 	return unlikely(sd->nr_balance_failed > sd->cache_nice_tries+2);
 }
 
@@ -9050,7 +9262,8 @@
 		 * excessive cache_hot migrations and active balances.
 		 */
 		if (idle != CPU_NEWLY_IDLE)
-			sd->nr_balance_failed++;
+			if (env.src_grp_nr_running > 1)
+				sd->nr_balance_failed++;
 
 		if (need_active_balance(&env)) {
 			unsigned long flags;
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
index 2410db5..7481cd9 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -89,3 +89,4 @@
  * UtilEstimation. Use estimated CPU utilization.
  */
 SCHED_FEAT(UTIL_EST, true)
+SCHED_FEAT(UTIL_EST_FASTUP, true)
diff --git a/kernel/sched/loadavg.c b/kernel/sched/loadavg.c
index de22da6..b1dfb50f 100644
--- a/kernel/sched/loadavg.c
+++ b/kernel/sched/loadavg.c
@@ -75,6 +75,7 @@
 	loads[1] = (avenrun[1] + offset) << shift;
 	loads[2] = (avenrun[2] + offset) << shift;
 }
+EXPORT_SYMBOL_GPL(get_avenrun);
 
 long calc_load_fold_active(struct rq *this_rq, long adjust)
 {
diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c
index 9154e74..34d1d7f 100644
--- a/kernel/sched/psi.c
+++ b/kernel/sched/psi.c
@@ -145,6 +145,7 @@
 static int psi_bug __read_mostly;
 
 DEFINE_STATIC_KEY_FALSE(psi_disabled);
+DEFINE_STATIC_KEY_TRUE(psi_cgroups_enabled);
 
 #ifdef CONFIG_PSI_DEFAULT_DISABLED
 static bool psi_enable;
@@ -179,6 +180,8 @@
 
 static void psi_avgs_work(struct work_struct *work);
 
+static void poll_timer_fn(struct timer_list *t);
+
 static void group_init(struct psi_group *group)
 {
 	int cpu;
@@ -190,7 +193,6 @@
 	INIT_DELAYED_WORK(&group->avgs_work, psi_avgs_work);
 	mutex_init(&group->avgs_lock);
 	/* Init trigger-related members */
-	atomic_set(&group->poll_scheduled, 0);
 	mutex_init(&group->trigger_lock);
 	INIT_LIST_HEAD(&group->triggers);
 	memset(group->nr_triggers, 0, sizeof(group->nr_triggers));
@@ -199,7 +201,9 @@
 	memset(group->polling_total, 0, sizeof(group->polling_total));
 	group->polling_next_update = ULLONG_MAX;
 	group->polling_until = 0;
-	rcu_assign_pointer(group->poll_kworker, NULL);
+	init_waitqueue_head(&group->poll_wait);
+	timer_setup(&group->poll_timer, poll_timer_fn, 0);
+	rcu_assign_pointer(group->poll_task, NULL);
 }
 
 void __init psi_init(void)
@@ -209,6 +213,9 @@
 		return;
 	}
 
+	if (!cgroup_psi_enabled())
+		static_branch_disable(&psi_cgroups_enabled);
+
 	psi_period = jiffies_to_nsecs(PSI_FREQ);
 	group_init(&psi_system);
 }
@@ -547,47 +554,38 @@
 	return now + group->poll_min_period;
 }
 
-/*
- * Schedule polling if it's not already scheduled. It's safe to call even from
- * hotpath because even though kthread_queue_delayed_work takes worker->lock
- * spinlock that spinlock is never contended due to poll_scheduled atomic
- * preventing such competition.
- */
+/* Schedule polling if it's not already scheduled. */
 static void psi_schedule_poll_work(struct psi_group *group, unsigned long delay)
 {
-	struct kthread_worker *kworker;
+	struct task_struct *task;
 
-	/* Do not reschedule if already scheduled */
-	if (atomic_cmpxchg(&group->poll_scheduled, 0, 1) != 0)
+	/*
+	 * Do not reschedule if already scheduled.
+	 * Possible race with a timer scheduled after this check but before
+	 * mod_timer below can be tolerated because group->polling_next_update
+	 * will keep updates on schedule.
+	 */
+	if (timer_pending(&group->poll_timer))
 		return;
 
 	rcu_read_lock();
 
-	kworker = rcu_dereference(group->poll_kworker);
+	task = rcu_dereference(group->poll_task);
 	/*
 	 * kworker might be NULL in case psi_trigger_destroy races with
 	 * psi_task_change (hotpath) which can't use locks
 	 */
-	if (likely(kworker))
-		kthread_queue_delayed_work(kworker, &group->poll_work, delay);
-	else
-		atomic_set(&group->poll_scheduled, 0);
+	if (likely(task))
+		mod_timer(&group->poll_timer, jiffies + delay);
 
 	rcu_read_unlock();
 }
 
-static void psi_poll_work(struct kthread_work *work)
+static void psi_poll_work(struct psi_group *group)
 {
-	struct kthread_delayed_work *dwork;
-	struct psi_group *group;
 	u32 changed_states;
 	u64 now;
 
-	dwork = container_of(work, struct kthread_delayed_work, work);
-	group = container_of(dwork, struct psi_group, poll_work);
-
-	atomic_set(&group->poll_scheduled, 0);
-
 	mutex_lock(&group->trigger_lock);
 
 	now = sched_clock();
@@ -623,6 +621,35 @@
 	mutex_unlock(&group->trigger_lock);
 }
 
+static int psi_poll_worker(void *data)
+{
+	struct psi_group *group = (struct psi_group *)data;
+	struct sched_param param = {
+		.sched_priority = 1,
+	};
+
+	sched_setscheduler_nocheck(current, SCHED_FIFO, &param);
+
+	while (true) {
+		wait_event_interruptible(group->poll_wait,
+				atomic_cmpxchg(&group->poll_wakeup, 1, 0) ||
+				kthread_should_stop());
+		if (kthread_should_stop())
+			break;
+
+		psi_poll_work(group);
+	}
+	return 0;
+}
+
+static void poll_timer_fn(struct timer_list *t)
+{
+	struct psi_group *group = from_timer(group, t, poll_timer);
+
+	atomic_set(&group->poll_wakeup, 1);
+	wake_up_interruptible(&group->poll_wait);
+}
+
 static void record_times(struct psi_group_cpu *groupc, int cpu,
 			 bool memstall_tick)
 {
@@ -722,23 +749,23 @@
 
 static struct psi_group *iterate_groups(struct task_struct *task, void **iter)
 {
+	if (*iter == &psi_system)
+		return NULL;
+
 #ifdef CONFIG_CGROUPS
-	struct cgroup *cgroup = NULL;
+	if (static_branch_likely(&psi_cgroups_enabled)) {
+		struct cgroup *cgroup = NULL;
 
-	if (!*iter)
-		cgroup = task->cgroups->dfl_cgrp;
-	else if (*iter == &psi_system)
-		return NULL;
-	else
-		cgroup = cgroup_parent(*iter);
+		if (!*iter)
+			cgroup = task->cgroups->dfl_cgrp;
+		else
+			cgroup = cgroup_parent(*iter);
 
-	if (cgroup && cgroup_parent(cgroup)) {
-		*iter = cgroup;
-		return cgroup_psi(cgroup);
+		if (cgroup && cgroup_parent(cgroup)) {
+			*iter = cgroup;
+			return cgroup_psi(cgroup);
+		}
 	}
-#else
-	if (*iter)
-		return NULL;
 #endif
 	*iter = &psi_system;
 	return &psi_system;
@@ -1050,22 +1077,18 @@
 
 	mutex_lock(&group->trigger_lock);
 
-	if (!rcu_access_pointer(group->poll_kworker)) {
-		struct sched_param param = {
-			.sched_priority = 1,
-		};
-		struct kthread_worker *kworker;
+	if (!rcu_access_pointer(group->poll_task)) {
+		struct task_struct *task;
 
-		kworker = kthread_create_worker(0, "psimon");
-		if (IS_ERR(kworker)) {
+		task = kthread_create(psi_poll_worker, group, "psimon");
+		if (IS_ERR(task)) {
 			kfree(t);
 			mutex_unlock(&group->trigger_lock);
-			return ERR_CAST(kworker);
+			return ERR_CAST(task);
 		}
-		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);
+		atomic_set(&group->poll_wakeup, 0);
+		wake_up_process(task);
+		rcu_assign_pointer(group->poll_task, task);
 	}
 
 	list_add(&t->node, &group->triggers);
@@ -1083,7 +1106,7 @@
 {
 	struct psi_trigger *t = container_of(ref, struct psi_trigger, refcount);
 	struct psi_group *group = t->group;
-	struct kthread_worker *kworker_to_destroy = NULL;
+	struct task_struct *task_to_destroy = NULL;
 
 	if (static_branch_likely(&psi_disabled))
 		return;
@@ -1109,13 +1132,14 @@
 			period = min(period, div_u64(tmp->win.size,
 					UPDATES_PER_WINDOW));
 		group->poll_min_period = period;
-		/* Destroy poll_kworker when the last trigger is destroyed */
+		/* Destroy poll_task when the last trigger is destroyed */
 		if (group->poll_states == 0) {
 			group->polling_until = 0;
-			kworker_to_destroy = rcu_dereference_protected(
-					group->poll_kworker,
+			task_to_destroy = rcu_dereference_protected(
+					group->poll_task,
 					lockdep_is_held(&group->trigger_lock));
-			rcu_assign_pointer(group->poll_kworker, NULL);
+			rcu_assign_pointer(group->poll_task, NULL);
+			del_timer(&group->poll_timer);
 		}
 	}
 
@@ -1123,25 +1147,20 @@
 
 	/*
 	 * Wait for both *trigger_ptr from psi_trigger_replace and
-	 * poll_kworker RCUs to complete their read-side critical sections
-	 * before destroying the trigger and optionally the poll_kworker
+	 * poll_task RCUs to complete their read-side critical sections
+	 * before destroying the trigger and optionally the poll_task
 	 */
 	synchronize_rcu();
 	/*
-	 * Destroy the kworker after releasing trigger_lock to prevent a
+	 * Stop kthread 'psimon' after releasing trigger_lock to prevent a
 	 * deadlock while waiting for psi_poll_work to acquire trigger_lock
 	 */
-	if (kworker_to_destroy) {
+	if (task_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.
+		 * can no longer be found through group->poll_task.
 		 */
-		kthread_cancel_delayed_work_sync(&group->poll_work);
-		atomic_set(&group->poll_scheduled, 0);
-
-		kthread_destroy_worker(kworker_to_destroy);
+		kthread_stop(task_to_destroy);
 	}
 	kfree(t);
 }
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 2dffb876..9a9bff3 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -7,6 +7,8 @@
 
 #include "pelt.h"
 
+#include <trace/hooks/sched.h>
+
 int sched_rr_timeslice = RR_TIMESLICE;
 int sysctl_sched_rr_timeslice = (MSEC_PER_SEC / HZ) * RR_TIMESLICE;
 /* More than 4 hours if BW_SHIFT equals 20. */
@@ -439,6 +441,45 @@
 	return rt_se->on_rq;
 }
 
+#ifdef CONFIG_UCLAMP_TASK
+/*
+ * Verify the fitness of task @p to run on @cpu taking into account the uclamp
+ * settings.
+ *
+ * This check is only important for heterogeneous systems where uclamp_min value
+ * is higher than the capacity of a @cpu. For non-heterogeneous system this
+ * function will always return true.
+ *
+ * The function will return true if the capacity of the @cpu is >= the
+ * uclamp_min and false otherwise.
+ *
+ * Note that uclamp_min will be clamped to uclamp_max if uclamp_min
+ * > uclamp_max.
+ */
+static inline bool rt_task_fits_capacity(struct task_struct *p, int cpu)
+{
+	unsigned int min_cap;
+	unsigned int max_cap;
+	unsigned int cpu_cap;
+
+	/* Only heterogeneous systems can benefit from this check */
+	if (!static_branch_unlikely(&sched_asym_cpucapacity))
+		return true;
+
+	min_cap = uclamp_eff_value(p, UCLAMP_MIN);
+	max_cap = uclamp_eff_value(p, UCLAMP_MAX);
+
+	cpu_cap = capacity_orig_of(cpu);
+
+	return cpu_cap >= min(min_cap, max_cap);
+}
+#else
+static inline bool rt_task_fits_capacity(struct task_struct *p, int cpu)
+{
+	return true;
+}
+#endif
+
 #ifdef CONFIG_RT_GROUP_SCHED
 
 static inline u64 sched_rt_runtime(struct rt_rq *rt_rq)
@@ -1393,6 +1434,13 @@
 {
 	struct task_struct *curr;
 	struct rq *rq;
+	bool test;
+	int target_cpu = -1;
+
+	trace_android_rvh_select_task_rq_rt(p, cpu, sd_flag,
+					flags, &target_cpu);
+	if (target_cpu >= 0)
+		return target_cpu;
 
 	/* For anything but wake ups, just return the task_cpu */
 	if (sd_flag != SD_BALANCE_WAKE && sd_flag != SD_BALANCE_FORK)
@@ -1424,13 +1472,26 @@
 	 *
 	 * This test is optimistic, if we get it wrong the load-balancer
 	 * will have to sort it out.
+	 *
+	 * We take into account the capacity of the CPU to ensure it fits the
+	 * requirement of the task - which is only important on heterogeneous
+	 * systems like big.LITTLE.
 	 */
-	if (curr && unlikely(rt_task(curr)) &&
-	    (curr->nr_cpus_allowed < 2 ||
-	     curr->prio <= p->prio)) {
+	test = curr &&
+	       unlikely(rt_task(curr)) &&
+	       (curr->nr_cpus_allowed < 2 || curr->prio <= p->prio);
+
+	if (test || !rt_task_fits_capacity(p, cpu)) {
 		int target = find_lowest_rq(p);
 
 		/*
+		 * Bail out if we were forcing a migration to find a better
+		 * fitting CPU but our search failed.
+		 */
+		if (!test && target != -1 && !rt_task_fits_capacity(p, target))
+			goto out_unlock;
+
+		/*
 		 * Don't bother moving it if the destination CPU is
 		 * not running a lower priority task.
 		 */
@@ -1438,6 +1499,8 @@
 		    p->prio < cpu_rq(target)->rt.highest_prio.curr)
 			cpu = target;
 	}
+
+out_unlock:
 	rcu_read_unlock();
 
 out:
@@ -1458,8 +1521,8 @@
 	 * p is migratable, so let's not schedule it and
 	 * see if it is pushed or pulled somewhere else.
 	 */
-	if (p->nr_cpus_allowed != 1
-	    && cpupri_find(&rq->rd->cpupri, p, NULL))
+	if (p->nr_cpus_allowed != 1 &&
+	    cpupri_find(&rq->rd->cpupri, p, NULL))
 		return;
 
 	/*
@@ -1640,6 +1703,12 @@
 	struct cpumask *lowest_mask = this_cpu_cpumask_var_ptr(local_cpu_mask);
 	int this_cpu = smp_processor_id();
 	int cpu      = task_cpu(task);
+	int ret;
+	int lowest_cpu = -1;
+
+	trace_android_rvh_find_lowest_rq(task, lowest_mask, &lowest_cpu);
+	if (lowest_cpu >= 0)
+		return lowest_cpu;
 
 	/* Make sure the mask is initialized first */
 	if (unlikely(!lowest_mask))
@@ -1648,7 +1717,22 @@
 	if (task->nr_cpus_allowed == 1)
 		return -1; /* No other targets possible */
 
-	if (!cpupri_find(&task_rq(task)->rd->cpupri, task, lowest_mask))
+	/*
+	 * If we're on asym system ensure we consider the different capacities
+	 * of the CPUs when searching for the lowest_mask.
+	 */
+	if (static_branch_unlikely(&sched_asym_cpucapacity)) {
+
+		ret = cpupri_find_fitness(&task_rq(task)->rd->cpupri,
+					  task, lowest_mask,
+					  rt_task_fits_capacity);
+	} else {
+
+		ret = cpupri_find(&task_rq(task)->rd->cpupri,
+				  task, lowest_mask);
+	}
+
+	if (!ret)
 		return -1; /* No targets found */
 
 	/*
@@ -2152,12 +2236,14 @@
  */
 static void task_woken_rt(struct rq *rq, struct task_struct *p)
 {
-	if (!task_running(rq, p) &&
-	    !test_tsk_need_resched(rq->curr) &&
-	    p->nr_cpus_allowed > 1 &&
-	    (dl_task(rq->curr) || rt_task(rq->curr)) &&
-	    (rq->curr->nr_cpus_allowed < 2 ||
-	     rq->curr->prio <= p->prio))
+	bool need_to_push = !task_running(rq, p) &&
+			    !test_tsk_need_resched(rq->curr) &&
+			    p->nr_cpus_allowed > 1 &&
+			    (dl_task(rq->curr) || rt_task(rq->curr)) &&
+			    (rq->curr->nr_cpus_allowed < 2 ||
+			     rq->curr->prio <= p->prio);
+
+	if (need_to_push)
 		push_rt_tasks(rq);
 }
 
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index fe755c1a..f057618 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -65,6 +65,7 @@
 #include <linux/syscalls.h>
 #include <linux/task_work.h>
 #include <linux/tsacct_kern.h>
+#include <linux/android_kabi.h>
 
 #include <asm/tlb.h>
 
@@ -401,8 +402,14 @@
 	struct uclamp_se	uclamp_req[UCLAMP_CNT];
 	/* Effective clamp values used for a task group */
 	struct uclamp_se	uclamp[UCLAMP_CNT];
+	/* Latency-sensitive flag used for a task group */
+	unsigned int		latency_sensitive;
 #endif
 
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
@@ -719,6 +726,12 @@
 	struct rcu_head rcu;
 };
 
+struct max_cpu_capacity {
+	raw_spinlock_t lock;
+	unsigned long val;
+	int cpu;
+};
+
 /* Scheduling group status flags */
 #define SG_OVERLOAD		0x1 /* More than one runnable task on a CPU. */
 #define SG_OVERUTILIZED		0x2 /* One or more CPUs are over-utilized. */
@@ -777,16 +790,23 @@
 	cpumask_var_t		rto_mask;
 	struct cpupri		cpupri;
 
-	unsigned long		max_cpu_capacity;
+	/* Maximum cpu capacity in the system. */
+	struct max_cpu_capacity max_cpu_capacity;
 
 	/*
 	 * NULL-terminated list of performance domains intersecting with the
 	 * CPUs of the rd. Protected by RCU.
 	 */
 	struct perf_domain __rcu *pd;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 extern void init_defrootdomain(void);
+extern void init_max_cpu_capacity(struct max_cpu_capacity *mcc);
 extern int sched_init_domains(const struct cpumask *cpu_map);
 extern void rq_attach_root(struct rq *rq, struct root_domain *rd);
 extern void sched_get_rd(struct root_domain *rd);
@@ -1004,6 +1024,11 @@
 	/* Must be inspected within a rcu lock section */
 	struct cpuidle_state	*idle_state;
 #endif
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #ifdef CONFIG_FAIR_GROUP_SCHED
@@ -1342,8 +1367,6 @@
 	for (__sd = rcu_dereference_check_sched_domain(cpu_rq(cpu)->sd); \
 			__sd; __sd = __sd->parent)
 
-#define for_each_lower_domain(sd) for (; sd; sd = sd->child)
-
 /**
  * highest_flag_domain - Return highest sched_domain containing flag.
  * @cpu:	The CPU whose highest level of sched domain is to
@@ -1999,6 +2022,15 @@
 }
 #endif
 
+#ifndef arch_scale_max_freq_capacity
+struct sched_domain;
+static __always_inline
+unsigned long arch_scale_max_freq_capacity(struct sched_domain *sd, int cpu)
+{
+	return SCHED_CAPACITY_SCALE;
+}
+#endif
+
 #ifdef CONFIG_SMP
 #ifdef CONFIG_PREEMPTION
 
@@ -2323,7 +2355,7 @@
 #endif /* CONFIG_CPU_FREQ */
 
 #ifdef CONFIG_UCLAMP_TASK
-unsigned int uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
+unsigned long uclamp_eff_value(struct task_struct *p, enum uclamp_id clamp_id);
 
 /**
  * uclamp_util_with - clamp @util with @rq and @p effective uclamp values.
@@ -2343,11 +2375,11 @@
  * static key is disabled.
  */
 static __always_inline
-unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
-			      struct task_struct *p)
+unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
+				  struct task_struct *p)
 {
-	unsigned int min_util;
-	unsigned int max_util;
+	unsigned long min_util;
+	unsigned long max_util;
 
 	if (!static_branch_likely(&sched_uclamp_used))
 		return util;
@@ -2371,9 +2403,9 @@
 	return clamp(util, min_util, max_util);
 }
 
-static inline unsigned int uclamp_util(struct rq *rq, unsigned int util)
+static inline bool uclamp_boosted(struct task_struct *p)
 {
-	return uclamp_util_with(rq, util, NULL);
+	return uclamp_eff_value(p, UCLAMP_MIN) > 0;
 }
 
 /*
@@ -2389,14 +2421,15 @@
 	return static_branch_likely(&sched_uclamp_used);
 }
 #else /* CONFIG_UCLAMP_TASK */
-static inline unsigned int uclamp_util_with(struct rq *rq, unsigned int util,
-					    struct task_struct *p)
+static inline
+unsigned long uclamp_rq_util_with(struct rq *rq, unsigned long util,
+				  struct task_struct *p)
 {
 	return util;
 }
-static inline unsigned int uclamp_util(struct rq *rq, unsigned int util)
+static inline bool uclamp_boosted(struct task_struct *p)
 {
-	return util;
+	return false;
 }
 
 static inline bool uclamp_is_used(void)
@@ -2405,6 +2438,25 @@
 }
 #endif /* CONFIG_UCLAMP_TASK */
 
+#ifdef CONFIG_UCLAMP_TASK_GROUP
+static inline bool uclamp_latency_sensitive(struct task_struct *p)
+{
+	struct cgroup_subsys_state *css = task_css(p, cpu_cgrp_id);
+	struct task_group *tg;
+
+	if (!css)
+		return false;
+	tg = container_of(css, struct task_group, css);
+
+	return tg->latency_sensitive;
+}
+#else
+static inline bool uclamp_latency_sensitive(struct task_struct *p)
+{
+	return false;
+}
+#endif /* CONFIG_UCLAMP_TASK_GROUP */
+
 #ifdef arch_scale_freq_capacity
 # ifndef arch_scale_freq_invariant
 #  define arch_scale_freq_invariant()	true
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index ffaa97a..cd3a58c 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -510,6 +510,9 @@
 
 	if (cpupri_init(&rd->cpupri) != 0)
 		goto free_cpudl;
+
+	init_max_cpu_capacity(&rd->max_cpu_capacity);
+
 	return 0;
 
 free_cpudl:
@@ -1377,18 +1380,9 @@
 	 * Convert topological properties into behaviour.
 	 */
 
-	if (sd->flags & SD_ASYM_CPUCAPACITY) {
-		struct sched_domain *t = sd;
-
-		/*
-		 * Don't attempt to spread across CPUs of different capacities.
-		 */
-		if (sd->child)
-			sd->child->flags &= ~SD_PREFER_SIBLING;
-
-		for_each_lower_domain(t)
-			t->flags |= SD_BALANCE_WAKE;
-	}
+	/* Don't attempt to spread across CPUs of different capacities. */
+	if ((sd->flags & SD_ASYM_CPUCAPACITY) && sd->child)
+		sd->child->flags &= ~SD_PREFER_SIBLING;
 
 	if (sd->flags & SD_SHARE_CPUCAPACITY) {
 		sd->imbalance_pct = 110;
@@ -1987,7 +1981,6 @@
 	enum s_alloc alloc_state = sa_none;
 	struct sched_domain *sd;
 	struct s_data d;
-	struct rq *rq = NULL;
 	int i, ret = -ENOMEM;
 	struct sched_domain_topology_level *tl_asym;
 	bool has_asym = false;
@@ -2056,13 +2049,7 @@
 	/* Attach the domains */
 	rcu_read_lock();
 	for_each_cpu(i, cpu_map) {
-		rq = cpu_rq(i);
 		sd = *per_cpu_ptr(d.sd, i);
-
-		/* Use READ_ONCE()/WRITE_ONCE() to avoid load/store tearing: */
-		if (rq->cpu_capacity_orig > READ_ONCE(d.rd->max_cpu_capacity))
-			WRITE_ONCE(d.rd->max_cpu_capacity, rq->cpu_capacity_orig);
-
 		cpu_attach_domain(sd, d.rd, i);
 	}
 	rcu_read_unlock();
@@ -2070,11 +2057,6 @@
 	if (has_asym)
 		static_branch_inc_cpuslocked(&sched_asym_cpucapacity);
 
-	if (rq && sched_debug_enabled) {
-		pr_info("root domain span: %*pbl (max cpu_capacity = %lu)\n",
-			cpumask_pr_args(cpu_map), rq->rd->max_cpu_capacity);
-	}
-
 	ret = 0;
 error:
 	__free_domain_allocs(&d, alloc_state, cpu_map);
diff --git a/kernel/scs.c b/kernel/scs.c
new file mode 100644
index 0000000..c8e5335
--- /dev/null
+++ b/kernel/scs.c
@@ -0,0 +1,241 @@
+// 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 void scs_check_usage(struct task_struct *tsk)
+{
+	static unsigned long highest;
+
+	unsigned long *p = __scs_base(tsk);
+	unsigned long *end = scs_magic(p);
+	unsigned long prev, curr = highest, used = 0;
+
+	for (; p < end; ++p) {
+		if (!READ_ONCE_NOCHECK(*p))
+			break;
+		used += sizeof(*p);
+	}
+
+	while (used > curr) {
+		prev = cmpxchg_relaxed(&highest, curr, used);
+
+		if (prev == curr) {
+			pr_info("%s (%d): highest shadow stack usage: %lu bytes\n",
+				tsk->comm, task_pid_nr(tsk), used);
+			break;
+		}
+
+		curr = prev;
+	}
+}
+#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/seccomp.c b/kernel/seccomp.c
index 1d62fa2..ae9746f 100644
--- a/kernel/seccomp.c
+++ b/kernel/seccomp.c
@@ -13,6 +13,7 @@
  * Mode 2 allows user-defined system call filters in the form
  *        of Berkeley Packet Filters/Linux Socket Filters.
  */
+#define pr_fmt(fmt) "seccomp: " fmt
 
 #include <linux/refcount.h>
 #include <linux/audit.h>
@@ -41,6 +42,7 @@
 #include <linux/tracehook.h>
 #include <linux/uaccess.h>
 #include <linux/anon_inodes.h>
+#include <linux/lockdep.h>
 
 /*
  * When SECCOMP_IOCTL_NOTIF_ID_VALID was first introduced, it had the
@@ -83,6 +85,7 @@
 	/* The return values, only valid when in SECCOMP_NOTIFY_REPLIED */
 	int error;
 	long val;
+	u32 flags;
 
 	/* Signals when this has entered SECCOMP_NOTIFY_REPLIED */
 	struct completion ready;
@@ -101,27 +104,68 @@
  *           filter->notify_lock.
  * @next_id: The id of the next request.
  * @notifications: A list of struct seccomp_knotif elements.
- * @wqh: A wait queue for poll.
  */
 struct notification {
 	struct semaphore request;
 	u64 next_id;
 	struct list_head notifications;
-	wait_queue_head_t wqh;
 };
 
+#ifdef SECCOMP_ARCH_NATIVE
+/**
+ * struct action_cache - per-filter cache of seccomp actions per
+ * arch/syscall pair
+ *
+ * @allow_native: A bitmap where each bit represents whether the
+ *		  filter will always allow the syscall, for the
+ *		  native architecture.
+ * @allow_compat: A bitmap where each bit represents whether the
+ *		  filter will always allow the syscall, for the
+ *		  compat architecture.
+ */
+struct action_cache {
+	DECLARE_BITMAP(allow_native, SECCOMP_ARCH_NATIVE_NR);
+#ifdef SECCOMP_ARCH_COMPAT
+	DECLARE_BITMAP(allow_compat, SECCOMP_ARCH_COMPAT_NR);
+#endif
+};
+#else
+struct action_cache { };
+
+static inline bool seccomp_cache_check_allow(const struct seccomp_filter *sfilter,
+					     const struct seccomp_data *sd)
+{
+	return false;
+}
+
+static inline void seccomp_cache_prepare(struct seccomp_filter *sfilter)
+{
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * struct seccomp_filter - container for seccomp BPF programs
  *
- * @usage: reference count to manage the object lifetime.
- *         get/put helpers should be used when accessing an instance
- *         outside of a lifetime-guarded section.  In general, this
- *         is only needed for handling filters shared across tasks.
+ * @refs: Reference count to manage the object lifetime.
+ *	  A filter's reference count is incremented for each directly
+ *	  attached task, once for the dependent filter, and if
+ *	  requested for the user notifier. When @refs reaches zero,
+ *	  the filter can be freed.
+ * @users: A filter's @users count is incremented for each directly
+ *         attached task (filter installation, fork(), thread_sync),
+ *	   and once for the dependent filter (tracked in filter->prev).
+ *	   When it reaches zero it indicates that no direct or indirect
+ *	   users of that filter exist. No new tasks can get associated with
+ *	   this filter after reaching 0. The @users count is always smaller
+ *	   or equal to @refs. Hence, reaching 0 for @users does not mean
+ *	   the filter can be freed.
+ * @cache: cache of arch/syscall mappings to actions
  * @log: true if all actions except for SECCOMP_RET_ALLOW should be logged
  * @prev: points to a previously installed, or inherited, filter
  * @prog: the BPF program to evaluate
  * @notif: the struct that holds all notification related information
  * @notify_lock: A lock for all notification-related accesses.
+ * @wqh: A wait queue for poll if a notifier is in use.
  *
  * seccomp_filter objects are organized in a tree linked via the @prev
  * pointer.  For any task, it appears to be a singly-linked list starting
@@ -131,15 +175,18 @@
  * how namespaces work.
  *
  * seccomp_filter objects should never be modified after being attached
- * to a task_struct (other than @usage).
+ * to a task_struct (other than @refs).
  */
 struct seccomp_filter {
-	refcount_t usage;
+	refcount_t refs;
+	refcount_t users;
 	bool log;
+	struct action_cache cache;
 	struct seccomp_filter *prev;
 	struct bpf_prog *prog;
 	struct notification *notif;
 	struct mutex notify_lock;
+	wait_queue_head_t wqh;
 };
 
 /* Limit any path through the tree to 256KB worth of instructions. */
@@ -151,6 +198,10 @@
  */
 static void populate_seccomp_data(struct seccomp_data *sd)
 {
+	/*
+	 * Instead of using current_pt_reg(), we're already doing the work
+	 * to safely fetch "current", so just use "task" everywhere below.
+	 */
 	struct task_struct *task = current;
 	struct pt_regs *regs = task_pt_regs(task);
 	unsigned long args[6];
@@ -249,6 +300,52 @@
 	return 0;
 }
 
+#ifdef SECCOMP_ARCH_NATIVE
+static inline bool seccomp_cache_check_allow_bitmap(const void *bitmap,
+						    size_t bitmap_size,
+						    int syscall_nr)
+{
+	if (unlikely(syscall_nr < 0 || syscall_nr >= bitmap_size))
+		return false;
+	syscall_nr = array_index_nospec(syscall_nr, bitmap_size);
+
+	return test_bit(syscall_nr, bitmap);
+}
+
+/**
+ * seccomp_cache_check_allow - lookup seccomp cache
+ * @sfilter: The seccomp filter
+ * @sd: The seccomp data to lookup the cache with
+ *
+ * Returns true if the seccomp_data is cached and allowed.
+ */
+static inline bool seccomp_cache_check_allow(const struct seccomp_filter *sfilter,
+					     const struct seccomp_data *sd)
+{
+	int syscall_nr = sd->nr;
+	const struct action_cache *cache = &sfilter->cache;
+
+#ifndef SECCOMP_ARCH_COMPAT
+	/* A native-only architecture doesn't need to check sd->arch. */
+	return seccomp_cache_check_allow_bitmap(cache->allow_native,
+						SECCOMP_ARCH_NATIVE_NR,
+						syscall_nr);
+#else
+	if (likely(sd->arch == SECCOMP_ARCH_NATIVE))
+		return seccomp_cache_check_allow_bitmap(cache->allow_native,
+							SECCOMP_ARCH_NATIVE_NR,
+							syscall_nr);
+	if (likely(sd->arch == SECCOMP_ARCH_COMPAT))
+		return seccomp_cache_check_allow_bitmap(cache->allow_compat,
+							SECCOMP_ARCH_COMPAT_NR,
+							syscall_nr);
+#endif /* SECCOMP_ARCH_COMPAT */
+
+	WARN_ON_ONCE(true);
+	return false;
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * seccomp_run_filters - evaluates all seccomp filters against @sd
  * @sd: optional seccomp data to be passed to filters
@@ -271,6 +368,9 @@
 	if (WARN_ON(f == NULL))
 		return SECCOMP_RET_KILL_PROCESS;
 
+	if (seccomp_cache_check_allow(f, sd))
+		return SECCOMP_RET_ALLOW;
+
 	/*
 	 * All filters in the list are evaluated and the lowest BPF return
 	 * value always takes priority (ignoring the DATA).
@@ -375,6 +475,59 @@
 	return 0;
 }
 
+static inline void seccomp_filter_free(struct seccomp_filter *filter)
+{
+	if (filter) {
+		bpf_prog_destroy(filter->prog);
+		kfree(filter);
+	}
+}
+
+static void __seccomp_filter_orphan(struct seccomp_filter *orig)
+{
+	while (orig && refcount_dec_and_test(&orig->users)) {
+		if (waitqueue_active(&orig->wqh))
+			wake_up_poll(&orig->wqh, EPOLLHUP);
+		orig = orig->prev;
+	}
+}
+
+static void __put_seccomp_filter(struct seccomp_filter *orig)
+{
+	/* Clean up single-reference branches iteratively. */
+	while (orig && refcount_dec_and_test(&orig->refs)) {
+		struct seccomp_filter *freeme = orig;
+		orig = orig->prev;
+		seccomp_filter_free(freeme);
+	}
+}
+
+static void __seccomp_filter_release(struct seccomp_filter *orig)
+{
+	/* Notify about any unused filters in the task's former filter tree. */
+	__seccomp_filter_orphan(orig);
+	/* Finally drop all references to the task's former tree. */
+	__put_seccomp_filter(orig);
+}
+
+/**
+ * seccomp_filter_release - Detach the task from its filter tree,
+ *			    drop its reference count, and notify
+ *			    about unused filters
+ *
+ * This function should only be called when the task is exiting as
+ * it detaches it from its filter tree. As such, READ_ONCE() and
+ * barriers are not needed here, as would normally be needed.
+ */
+void seccomp_filter_release(struct task_struct *tsk)
+{
+	struct seccomp_filter *orig = tsk->seccomp.filter;
+
+	/* Detach task from its filter tree. */
+	tsk->seccomp.filter = NULL;
+	__seccomp_filter_release(orig);
+}
+
 /**
  * seccomp_sync_threads: sets all threads to use current's filter
  *
@@ -399,14 +552,19 @@
 
 		/* Get a task reference for the new leaf node. */
 		get_seccomp_filter(caller);
+
 		/*
 		 * Drop the task reference to the shared ancestor since
 		 * current's path will hold a reference.  (This also
 		 * allows a put before the assignment.)
 		 */
-		put_seccomp_filter(thread);
+		__seccomp_filter_release(thread->seccomp.filter);
+
+		/* Make our new filter tree visible. */
 		smp_store_release(&thread->seccomp.filter,
 				  caller->seccomp.filter);
+		atomic_set(&thread->seccomp.filter_count,
+			   atomic_read(&caller->seccomp.filter_count));
 
 		/*
 		 * Don't let an unprivileged task work around
@@ -439,7 +597,12 @@
 {
 	struct seccomp_filter *sfilter;
 	int ret;
-	const bool save_orig = IS_ENABLED(CONFIG_CHECKPOINT_RESTORE);
+	const bool save_orig =
+#if defined(CONFIG_CHECKPOINT_RESTORE) || defined(SECCOMP_ARCH_NATIVE)
+		true;
+#else
+		false;
+#endif
 
 	if (fprog->len == 0 || fprog->len > BPF_MAXINSNS)
 		return ERR_PTR(-EINVAL);
@@ -469,7 +632,9 @@
 		return ERR_PTR(ret);
 	}
 
-	refcount_set(&sfilter->usage, 1);
+	refcount_set(&sfilter->refs, 1);
+	refcount_set(&sfilter->users, 1);
+	init_waitqueue_head(&sfilter->wqh);
 
 	return sfilter;
 }
@@ -502,6 +667,148 @@
 	return filter;
 }
 
+#ifdef SECCOMP_ARCH_NATIVE
+/**
+ * seccomp_is_const_allow - check if filter is constant allow with given data
+ * @fprog: The BPF programs
+ * @sd: The seccomp data to check against, only syscall number and arch
+ *      number are considered constant.
+ */
+static bool seccomp_is_const_allow(struct sock_fprog_kern *fprog,
+				   struct seccomp_data *sd)
+{
+	unsigned int reg_value = 0;
+	unsigned int pc;
+	bool op_res;
+
+	if (WARN_ON_ONCE(!fprog))
+		return false;
+
+	for (pc = 0; pc < fprog->len; pc++) {
+		struct sock_filter *insn = &fprog->filter[pc];
+		u16 code = insn->code;
+		u32 k = insn->k;
+
+		switch (code) {
+		case BPF_LD | BPF_W | BPF_ABS:
+			switch (k) {
+			case offsetof(struct seccomp_data, nr):
+				reg_value = sd->nr;
+				break;
+			case offsetof(struct seccomp_data, arch):
+				reg_value = sd->arch;
+				break;
+			default:
+				/* can't optimize (non-constant value load) */
+				return false;
+			}
+			break;
+		case BPF_RET | BPF_K:
+			/* reached return with constant values only, check allow */
+			return k == SECCOMP_RET_ALLOW;
+		case BPF_JMP | BPF_JA:
+			pc += insn->k;
+			break;
+		case BPF_JMP | BPF_JEQ | BPF_K:
+		case BPF_JMP | BPF_JGE | BPF_K:
+		case BPF_JMP | BPF_JGT | BPF_K:
+		case BPF_JMP | BPF_JSET | BPF_K:
+			switch (BPF_OP(code)) {
+			case BPF_JEQ:
+				op_res = reg_value == k;
+				break;
+			case BPF_JGE:
+				op_res = reg_value >= k;
+				break;
+			case BPF_JGT:
+				op_res = reg_value > k;
+				break;
+			case BPF_JSET:
+				op_res = !!(reg_value & k);
+				break;
+			default:
+				/* can't optimize (unknown jump) */
+				return false;
+			}
+
+			pc += op_res ? insn->jt : insn->jf;
+			break;
+		case BPF_ALU | BPF_AND | BPF_K:
+			reg_value &= k;
+			break;
+		default:
+			/* can't optimize (unknown insn) */
+			return false;
+		}
+	}
+
+	/* ran off the end of the filter?! */
+	WARN_ON(1);
+	return false;
+}
+
+static void seccomp_cache_prepare_bitmap(struct seccomp_filter *sfilter,
+					 void *bitmap, const void *bitmap_prev,
+					 size_t bitmap_size, int arch)
+{
+	struct sock_fprog_kern *fprog = sfilter->prog->orig_prog;
+	struct seccomp_data sd;
+	int nr;
+
+	if (bitmap_prev) {
+		/* The new filter must be as restrictive as the last. */
+		bitmap_copy(bitmap, bitmap_prev, bitmap_size);
+	} else {
+		/* Before any filters, all syscalls are always allowed. */
+		bitmap_fill(bitmap, bitmap_size);
+	}
+
+	for (nr = 0; nr < bitmap_size; nr++) {
+		/* No bitmap change: not a cacheable action. */
+		if (!test_bit(nr, bitmap))
+			continue;
+
+		sd.nr = nr;
+		sd.arch = arch;
+
+		/* No bitmap change: continue to always allow. */
+		if (seccomp_is_const_allow(fprog, &sd))
+			continue;
+
+		/*
+		 * Not a cacheable action: always run filters.
+		 * atomic clear_bit() not needed, filter not visible yet.
+		 */
+		__clear_bit(nr, bitmap);
+	}
+}
+
+/**
+ * seccomp_cache_prepare - emulate the filter to find cachable syscalls
+ * @sfilter: The seccomp filter
+ *
+ * Returns 0 if successful or -errno if error occurred.
+ */
+static void seccomp_cache_prepare(struct seccomp_filter *sfilter)
+{
+	struct action_cache *cache = &sfilter->cache;
+	const struct action_cache *cache_prev =
+		sfilter->prev ? &sfilter->prev->cache : NULL;
+
+	seccomp_cache_prepare_bitmap(sfilter, cache->allow_native,
+				     cache_prev ? cache_prev->allow_native : NULL,
+				     SECCOMP_ARCH_NATIVE_NR,
+				     SECCOMP_ARCH_NATIVE);
+
+#ifdef SECCOMP_ARCH_COMPAT
+	seccomp_cache_prepare_bitmap(sfilter, cache->allow_compat,
+				     cache_prev ? cache_prev->allow_compat : NULL,
+				     SECCOMP_ARCH_COMPAT_NR,
+				     SECCOMP_ARCH_COMPAT);
+#endif /* SECCOMP_ARCH_COMPAT */
+}
+#endif /* SECCOMP_ARCH_NATIVE */
+
 /**
  * seccomp_attach_filter: validate and attach filter
  * @flags:  flags to change filter behavior
@@ -547,7 +854,9 @@
 	 * task reference.
 	 */
 	filter->prev = current->seccomp.filter;
+	seccomp_cache_prepare(filter);
 	current->seccomp.filter = filter;
+	atomic_inc(&current->seccomp.filter_count);
 
 	/* Now that the new filter is in place, synchronize to all threads. */
 	if (flags & SECCOMP_FILTER_FLAG_TSYNC)
@@ -558,7 +867,7 @@
 
 static void __get_seccomp_filter(struct seccomp_filter *filter)
 {
-	refcount_inc(&filter->usage);
+	refcount_inc(&filter->refs);
 }
 
 /* get_seccomp_filter - increments the reference count of the filter on @tsk */
@@ -568,30 +877,7 @@
 	if (!orig)
 		return;
 	__get_seccomp_filter(orig);
-}
-
-static inline void seccomp_filter_free(struct seccomp_filter *filter)
-{
-	if (filter) {
-		bpf_prog_destroy(filter->prog);
-		kfree(filter);
-	}
-}
-
-static void __put_seccomp_filter(struct seccomp_filter *orig)
-{
-	/* Clean up single-reference branches iteratively. */
-	while (orig && refcount_dec_and_test(&orig->usage)) {
-		struct seccomp_filter *freeme = orig;
-		orig = orig->prev;
-		seccomp_filter_free(freeme);
-	}
-}
-
-/* put_seccomp_filter - decrements the ref count of tsk->seccomp.filter */
-void put_seccomp_filter(struct task_struct *tsk)
-{
-	__put_seccomp_filter(tsk->seccomp.filter);
+	refcount_inc(&orig->users);
 }
 
 static void seccomp_init_siginfo(kernel_siginfo_t *info, int syscall, int reason)
@@ -688,20 +974,20 @@
  */
 static const int mode1_syscalls[] = {
 	__NR_seccomp_read, __NR_seccomp_write, __NR_seccomp_exit, __NR_seccomp_sigreturn,
-	0, /* null terminated */
+	-1, /* negative terminated */
 };
 
 static void __secure_computing_strict(int this_syscall)
 {
-	const int *syscall_whitelist = mode1_syscalls;
+	const int *allowed_syscalls = mode1_syscalls;
 #ifdef CONFIG_COMPAT
 	if (in_compat_syscall())
-		syscall_whitelist = get_compat_mode1_syscalls();
+		allowed_syscalls = get_compat_mode1_syscalls();
 #endif
 	do {
-		if (*syscall_whitelist == this_syscall)
+		if (*allowed_syscalls == this_syscall)
 			return;
-	} while (*++syscall_whitelist);
+	} while (*++allowed_syscalls != -1);
 
 #ifdef SECCOMP_DEBUG
 	dump_stack();
@@ -739,11 +1025,12 @@
 	return filter->notif->next_id++;
 }
 
-static void seccomp_do_user_notification(int this_syscall,
-					 struct seccomp_filter *match,
-					 const struct seccomp_data *sd)
+static int seccomp_do_user_notification(int this_syscall,
+					struct seccomp_filter *match,
+					const struct seccomp_data *sd)
 {
 	int err;
+	u32 flags = 0;
 	long ret = 0;
 	struct seccomp_knotif n = {};
 
@@ -760,7 +1047,7 @@
 	list_add(&n.list, &match->notif->notifications);
 
 	up(&match->notif->request);
-	wake_up_poll(&match->notif->wqh, EPOLLIN | EPOLLRDNORM);
+	wake_up_poll(&match->wqh, EPOLLIN | EPOLLRDNORM);
 	mutex_unlock(&match->notify_lock);
 
 	/*
@@ -771,6 +1058,7 @@
 	if (err == 0) {
 		ret = n.val;
 		err = n.error;
+		flags = n.flags;
 	}
 
 	/*
@@ -787,8 +1075,14 @@
 		list_del(&n.list);
 out:
 	mutex_unlock(&match->notify_lock);
-	syscall_set_return_value(current, task_pt_regs(current),
+
+	/* Userspace requests to continue the syscall. */
+	if (flags & SECCOMP_USER_NOTIF_FLAG_CONTINUE)
+		return 0;
+
+	syscall_set_return_value(current, current_pt_regs(),
 				 err, ret);
+	return -1;
 }
 
 static int __seccomp_filter(int this_syscall, const struct seccomp_data *sd,
@@ -819,13 +1113,13 @@
 		/* Set low-order bits as an errno, capped at MAX_ERRNO. */
 		if (data > MAX_ERRNO)
 			data = MAX_ERRNO;
-		syscall_set_return_value(current, task_pt_regs(current),
+		syscall_set_return_value(current, current_pt_regs(),
 					 -data, 0);
 		goto skip;
 
 	case SECCOMP_RET_TRAP:
 		/* Show the handler the original registers. */
-		syscall_rollback(current, task_pt_regs(current));
+		syscall_rollback(current, current_pt_regs());
 		/* Let the filter pass back 16 bits of data. */
 		seccomp_send_sigsys(this_syscall, data);
 		goto skip;
@@ -838,7 +1132,7 @@
 		/* ENOSYS these calls if there is no tracer attached. */
 		if (!ptrace_event_enabled(current, PTRACE_EVENT_SECCOMP)) {
 			syscall_set_return_value(current,
-						 task_pt_regs(current),
+						 current_pt_regs(),
 						 -ENOSYS, 0);
 			goto skip;
 		}
@@ -858,7 +1152,7 @@
 		if (fatal_signal_pending(current))
 			goto skip;
 		/* Check if the tracer forced the syscall to be skipped. */
-		this_syscall = syscall_get_nr(current, task_pt_regs(current));
+		this_syscall = syscall_get_nr(current, current_pt_regs());
 		if (this_syscall < 0)
 			goto skip;
 
@@ -874,8 +1168,10 @@
 		return 0;
 
 	case SECCOMP_RET_USER_NOTIF:
-		seccomp_do_user_notification(this_syscall, match, sd);
-		goto skip;
+		if (seccomp_do_user_notification(this_syscall, match, sd))
+			goto skip;
+
+		return 0;
 
 	case SECCOMP_RET_LOG:
 		seccomp_log(this_syscall, 0, action, true);
@@ -894,20 +1190,20 @@
 	default:
 		seccomp_log(this_syscall, SIGSYS, action, true);
 		/* Dump core only if this is the last remaining thread. */
-		if (action == SECCOMP_RET_KILL_PROCESS ||
+		if (action != SECCOMP_RET_KILL_THREAD ||
 		    get_nr_threads(current) == 1) {
 			kernel_siginfo_t info;
 
 			/* Show the original registers in the dump. */
-			syscall_rollback(current, task_pt_regs(current));
+			syscall_rollback(current, current_pt_regs());
 			/* Trigger a manual coredump since do_exit skips it. */
 			seccomp_init_siginfo(&info, this_syscall, data);
 			do_coredump(&info);
 		}
-		if (action == SECCOMP_RET_KILL_PROCESS)
-			do_group_exit(SIGSYS);
-		else
+		if (action == SECCOMP_RET_KILL_THREAD)
 			do_exit(SIGSYS);
+		else
+			do_group_exit(SIGSYS);
 	}
 
 	unreachable();
@@ -936,7 +1232,7 @@
 		return 0;
 
 	this_syscall = sd ? sd->nr :
-		syscall_get_nr(current, task_pt_regs(current));
+		syscall_get_nr(current, current_pt_regs());
 
 	switch (mode) {
 	case SECCOMP_MODE_STRICT:
@@ -985,13 +1281,18 @@
 }
 
 #ifdef CONFIG_SECCOMP_FILTER
-static int seccomp_notify_release(struct inode *inode, struct file *file)
+static void seccomp_notify_free(struct seccomp_filter *filter)
 {
-	struct seccomp_filter *filter = file->private_data;
+	kfree(filter->notif);
+	filter->notif = NULL;
+}
+
+static void seccomp_notify_detach(struct seccomp_filter *filter)
+{
 	struct seccomp_knotif *knotif;
 
 	if (!filter)
-		return 0;
+		return;
 
 	mutex_lock(&filter->notify_lock);
 
@@ -1010,13 +1311,36 @@
 		complete(&knotif->ready);
 	}
 
-	kfree(filter->notif);
-	filter->notif = NULL;
+	seccomp_notify_free(filter);
 	mutex_unlock(&filter->notify_lock);
+}
+
+static int seccomp_notify_release(struct inode *inode, struct file *file)
+{
+	struct seccomp_filter *filter = file->private_data;
+
+	seccomp_notify_detach(filter);
 	__put_seccomp_filter(filter);
 	return 0;
 }
 
+/* must be called with notif_lock held */
+static inline struct seccomp_knotif *
+find_notification(struct seccomp_filter *filter, u64 id)
+{
+	struct seccomp_knotif *cur;
+
+	lockdep_assert_held(&filter->notify_lock);
+
+	list_for_each_entry(cur, &filter->notif->notifications, list) {
+		if (cur->id == id)
+			return cur;
+	}
+
+	return NULL;
+}
+
+
 static long seccomp_notify_recv(struct seccomp_filter *filter,
 				void __user *buf)
 {
@@ -1060,7 +1384,7 @@
 	unotif.data = *(knotif->data);
 
 	knotif->state = SECCOMP_NOTIFY_SENT;
-	wake_up_poll(&filter->notif->wqh, EPOLLOUT | EPOLLWRNORM);
+	wake_up_poll(&filter->wqh, EPOLLOUT | EPOLLWRNORM);
 	ret = 0;
 out:
 	mutex_unlock(&filter->notify_lock);
@@ -1074,15 +1398,8 @@
 		 * may have died when we released the lock, so we need to make
 		 * sure it's still around.
 		 */
-		knotif = NULL;
 		mutex_lock(&filter->notify_lock);
-		list_for_each_entry(cur, &filter->notif->notifications, list) {
-			if (cur->id == unotif.id) {
-				knotif = cur;
-				break;
-			}
-		}
-
+		knotif = find_notification(filter, unotif.id);
 		if (knotif) {
 			knotif->state = SECCOMP_NOTIFY_INIT;
 			up(&filter->notif->request);
@@ -1097,26 +1414,24 @@
 				void __user *buf)
 {
 	struct seccomp_notif_resp resp = {};
-	struct seccomp_knotif *knotif = NULL, *cur;
+	struct seccomp_knotif *knotif;
 	long ret;
 
 	if (copy_from_user(&resp, buf, sizeof(resp)))
 		return -EFAULT;
 
-	if (resp.flags)
+	if (resp.flags & ~SECCOMP_USER_NOTIF_FLAG_CONTINUE)
+		return -EINVAL;
+
+	if ((resp.flags & SECCOMP_USER_NOTIF_FLAG_CONTINUE) &&
+	    (resp.error || resp.val))
 		return -EINVAL;
 
 	ret = mutex_lock_interruptible(&filter->notify_lock);
 	if (ret < 0)
 		return ret;
 
-	list_for_each_entry(cur, &filter->notif->notifications, list) {
-		if (cur->id == resp.id) {
-			knotif = cur;
-			break;
-		}
-	}
-
+	knotif = find_notification(filter, resp.id);
 	if (!knotif) {
 		ret = -ENOENT;
 		goto out;
@@ -1132,6 +1447,7 @@
 	knotif->state = SECCOMP_NOTIFY_REPLIED;
 	knotif->error = resp.error;
 	knotif->val = resp.val;
+	knotif->flags = resp.flags;
 	complete(&knotif->ready);
 out:
 	mutex_unlock(&filter->notify_lock);
@@ -1141,7 +1457,7 @@
 static long seccomp_notify_id_valid(struct seccomp_filter *filter,
 				    void __user *buf)
 {
-	struct seccomp_knotif *knotif = NULL;
+	struct seccomp_knotif *knotif;
 	u64 id;
 	long ret;
 
@@ -1152,16 +1468,12 @@
 	if (ret < 0)
 		return ret;
 
-	ret = -ENOENT;
-	list_for_each_entry(knotif, &filter->notif->notifications, list) {
-		if (knotif->id == id) {
-			if (knotif->state == SECCOMP_NOTIFY_SENT)
-				ret = 0;
-			goto out;
-		}
-	}
+	knotif = find_notification(filter, id);
+	if (knotif && knotif->state == SECCOMP_NOTIFY_SENT)
+		ret = 0;
+	else
+		ret = -ENOENT;
 
-out:
 	mutex_unlock(&filter->notify_lock);
 	return ret;
 }
@@ -1192,7 +1504,7 @@
 	__poll_t ret = 0;
 	struct seccomp_knotif *cur;
 
-	poll_wait(file, &filter->notif->wqh, poll_tab);
+	poll_wait(file, &filter->wqh, poll_tab);
 
 	if (mutex_lock_interruptible(&filter->notify_lock) < 0)
 		return EPOLLERR;
@@ -1208,6 +1520,9 @@
 
 	mutex_unlock(&filter->notify_lock);
 
+	if (refcount_read(&filter->users) == 0)
+		ret |= EPOLLHUP;
+
 	return ret;
 }
 
@@ -1230,7 +1545,6 @@
 	sema_init(&filter->notif->request, 0);
 	filter->notif->next_id = get_random_u64();
 	INIT_LIST_HEAD(&filter->notif->notifications);
-	init_waitqueue_head(&filter->notif->wqh);
 
 	ret = anon_inode_getfile("seccomp notify", &seccomp_notify_ops,
 				 filter, O_RDWR);
@@ -1242,7 +1556,7 @@
 
 out_notif:
 	if (IS_ERR(ret))
-		kfree(filter->notif);
+		seccomp_notify_free(filter);
 out:
 	return ret;
 }
@@ -1363,6 +1677,7 @@
 			listener_f->private_data = NULL;
 			fput(listener_f);
 			put_unused_fd(listener);
+			seccomp_notify_detach(prepared);
 		} else {
 			fd_install(listener, listener_f);
 			ret = listener;
@@ -1710,7 +2025,7 @@
 	return true;
 }
 
-static int read_actions_logged(struct ctl_table *ro_table, void __user *buffer,
+static int read_actions_logged(struct ctl_table *ro_table, void *buffer,
 			       size_t *lenp, loff_t *ppos)
 {
 	char names[sizeof(seccomp_actions_avail)];
@@ -1728,7 +2043,7 @@
 	return proc_dostring(&table, 0, buffer, lenp, ppos);
 }
 
-static int write_actions_logged(struct ctl_table *ro_table, void __user *buffer,
+static int write_actions_logged(struct ctl_table *ro_table, void *buffer,
 				size_t *lenp, loff_t *ppos, u32 *actions_logged)
 {
 	char names[sizeof(seccomp_actions_avail)];
@@ -1836,7 +2151,7 @@
 
 	hdr = register_sysctl_paths(seccomp_sysctl_path, seccomp_sysctl_table);
 	if (!hdr)
-		pr_warn("seccomp: sysctl registration failed\n");
+		pr_warn("sysctl registration failed\n");
 	else
 		kmemleak_not_leak(hdr);
 
diff --git a/kernel/signal.c b/kernel/signal.c
index 3f61367..5cfcd14 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -1397,6 +1397,7 @@
 
 	return sighand;
 }
+EXPORT_SYMBOL_GPL(__lock_task_sighand);
 
 /*
  * send signal info to all the members of a group
diff --git a/kernel/sys.c b/kernel/sys.c
index b075fe8..0394658 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -42,6 +42,8 @@
 #include <linux/syscore_ops.h>
 #include <linux/version.h>
 #include <linux/ctype.h>
+#include <linux/mm.h>
+#include <linux/mempolicy.h>
 
 #include <linux/compat.h>
 #include <linux/syscalls.h>
@@ -73,6 +75,8 @@
 
 #include "uid16.h"
 
+#include <trace/hooks/sys.h>
+
 #ifndef SET_UNALIGN_CTL
 # define SET_UNALIGN_CTL(a, b)	(-EINVAL)
 #endif
@@ -2254,6 +2258,153 @@
 	return -EINVAL;
 }
 
+#ifdef CONFIG_MMU
+static int prctl_update_vma_anon_name(struct vm_area_struct *vma,
+		struct vm_area_struct **prev,
+		unsigned long start, unsigned long end,
+		const char __user *name_addr)
+{
+	struct mm_struct *mm = vma->vm_mm;
+	int error = 0;
+	pgoff_t pgoff;
+
+	if (name_addr == vma_get_anon_name(vma)) {
+		*prev = vma;
+		goto out;
+	}
+
+	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
+	*prev = vma_merge(mm, *prev, start, end, vma->vm_flags, vma->anon_vma,
+				vma->vm_file, pgoff, vma_policy(vma),
+				vma->vm_userfaultfd_ctx, name_addr);
+	if (*prev) {
+		vma = *prev;
+		goto success;
+	}
+
+	*prev = vma;
+
+	if (start != vma->vm_start) {
+		error = split_vma(mm, vma, start, 1);
+		if (error)
+			goto out;
+	}
+
+	if (end != vma->vm_end) {
+		error = split_vma(mm, vma, end, 0);
+		if (error)
+			goto out;
+	}
+
+success:
+	if (!vma->vm_file)
+		vma->anon_name = name_addr;
+
+out:
+	if (error == -ENOMEM)
+		error = -EAGAIN;
+	return error;
+}
+
+static int prctl_set_vma_anon_name(unsigned long start, unsigned long end,
+			unsigned long arg)
+{
+	unsigned long tmp;
+	struct vm_area_struct *vma, *prev;
+	int unmapped_error = 0;
+	int error = -EINVAL;
+
+	/*
+	 * If the interval [start,end) covers some unmapped address
+	 * ranges, just ignore them, but return -ENOMEM at the end.
+	 * - this matches the handling in madvise.
+	 */
+	vma = find_vma_prev(current->mm, start, &prev);
+	if (vma && start > vma->vm_start)
+		prev = vma;
+
+	for (;;) {
+		/* Still start < end. */
+		error = -ENOMEM;
+		if (!vma)
+			return error;
+
+		/* Here start < (end|vma->vm_end). */
+		if (start < vma->vm_start) {
+			unmapped_error = -ENOMEM;
+			start = vma->vm_start;
+			if (start >= end)
+				return error;
+		}
+
+		/* Here vma->vm_start <= start < (end|vma->vm_end) */
+		tmp = vma->vm_end;
+		if (end < tmp)
+			tmp = end;
+
+		/* Here vma->vm_start <= start < tmp <= (end|vma->vm_end). */
+		error = prctl_update_vma_anon_name(vma, &prev, start, tmp,
+				(const char __user *)arg);
+		if (error)
+			return error;
+		start = tmp;
+		if (prev && start < prev->vm_end)
+			start = prev->vm_end;
+		error = unmapped_error;
+		if (start >= end)
+			return error;
+		if (prev)
+			vma = prev->vm_next;
+		else	/* madvise_remove dropped mmap_sem */
+			vma = find_vma(current->mm, start);
+	}
+}
+
+static int prctl_set_vma(unsigned long opt, unsigned long start,
+		unsigned long len_in, unsigned long arg)
+{
+	struct mm_struct *mm = current->mm;
+	int error;
+	unsigned long len;
+	unsigned long end;
+
+	if (start & ~PAGE_MASK)
+		return -EINVAL;
+	len = (len_in + ~PAGE_MASK) & PAGE_MASK;
+
+	/* Check to see whether len was rounded up from small -ve to zero */
+	if (len_in && !len)
+		return -EINVAL;
+
+	end = start + len;
+	if (end < start)
+		return -EINVAL;
+
+	if (end == start)
+		return 0;
+
+	down_write(&mm->mmap_sem);
+
+	switch (opt) {
+	case PR_SET_VMA_ANON_NAME:
+		error = prctl_set_vma_anon_name(start, end, arg);
+		break;
+	default:
+		error = -EINVAL;
+	}
+
+	up_write(&mm->mmap_sem);
+
+	return error;
+}
+#else /* CONFIG_MMU */
+static int prctl_set_vma(unsigned long opt, unsigned long start,
+		unsigned long len_in, unsigned long arg)
+{
+	return -EINVAL;
+}
+#endif
+
 SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3,
 		unsigned long, arg4, unsigned long, arg5)
 {
@@ -2466,6 +2617,9 @@
 			return -EINVAL;
 		error = arch_prctl_spec_ctrl_set(me, arg2, arg3);
 		break;
+	case PR_SET_VMA:
+		error = prctl_set_vma(arg2, arg3, arg4, arg5);
+		break;
 	case PR_PAC_RESET_KEYS:
 		if (arg3 || arg4 || arg5)
 			return -EINVAL;
@@ -2485,6 +2639,7 @@
 		error = -EINVAL;
 		break;
 	}
+	trace_android_vh_syscall_prctl_finished(option, me);
 	return error;
 }
 
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index 34b7689..8159cdb 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -280,6 +280,7 @@
 COND_SYSCALL(munlockall);
 COND_SYSCALL(mincore);
 COND_SYSCALL(madvise);
+COND_SYSCALL(process_madvise);
 COND_SYSCALL(remap_file_pages);
 COND_SYSCALL(mbind);
 COND_SYSCALL_COMPAT(mbind);
diff --git a/kernel/sysctl-test.c b/kernel/sysctl-test.c
index 2a63241..ccb7850 100644
--- a/kernel/sysctl-test.c
+++ b/kernel/sysctl-test.c
@@ -389,4 +389,6 @@
 	.test_cases = sysctl_test_cases,
 };
 
-kunit_test_suite(sysctl_test_suite);
+kunit_test_suites(&sysctl_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index eae6a07..8a098896 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -111,6 +111,7 @@
 extern unsigned int core_pipe_limit;
 #endif
 extern int pid_max;
+extern int extra_free_kbytes;
 extern int pid_max_min, pid_max_max;
 extern int percpu_pagelist_fraction;
 extern int latencytop_enabled;
@@ -465,6 +466,13 @@
 		.mode		= 0644,
 		.proc_handler	= sysctl_sched_uclamp_handler,
 	},
+	{
+		.procname	= "sched_util_clamp_min_rt_default",
+		.data		= &sysctl_sched_uclamp_util_min_rt_default,
+		.maxlen		= sizeof(unsigned int),
+		.mode		= 0644,
+		.proc_handler	= sysctl_sched_uclamp_handler,
+	},
 #endif
 #ifdef CONFIG_SCHED_AUTOGROUP
 	{
@@ -1525,6 +1533,14 @@
 		.extra2		= &one_thousand,
 	},
 	{
+		.procname	= "extra_free_kbytes",
+		.data		= &extra_free_kbytes,
+		.maxlen		= sizeof(extra_free_kbytes),
+		.mode		= 0644,
+		.proc_handler	= extra_free_kbytes_sysctl_handler,
+		.extra1		= SYSCTL_ZERO,
+	},
+	{
 		.procname	= "percpu_pagelist_fraction",
 		.data		= &percpu_pagelist_fraction,
 		.maxlen		= sizeof(percpu_pagelist_fraction),
diff --git a/kernel/time/time.c b/kernel/time/time.c
index 83f403e..7353f04 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -776,6 +776,7 @@
 	return div_u64(x * 9, (9ull * NSEC_PER_SEC + (USER_HZ / 2)) / USER_HZ);
 #endif
 }
+EXPORT_SYMBOL_GPL(nsec_to_clock_t);
 
 u64 jiffies64_to_nsecs(u64 j)
 {
diff --git a/kernel/trace/Kconfig b/kernel/trace/Kconfig
index 9fa01da..aff75a0 100644
--- a/kernel/trace/Kconfig
+++ b/kernel/trace/Kconfig
@@ -106,7 +106,6 @@
 
 config TRACING
 	bool
-	select DEBUG_FS
 	select RING_BUFFER
 	select STACKTRACE if STACKTRACE_SUPPORT
 	select TRACEPOINTS
diff --git a/kernel/trace/Makefile b/kernel/trace/Makefile
index c2b2148..bb10341 100644
--- a/kernel/trace/Makefile
+++ b/kernel/trace/Makefile
@@ -72,6 +72,7 @@
 obj-$(CONFIG_HIST_TRIGGERS) += trace_events_hist.o
 obj-$(CONFIG_BPF_EVENTS) += bpf_trace.o
 obj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe.o
+obj-$(CONFIG_TRACEPOINTS) += error_report-traces.o
 obj-$(CONFIG_TRACEPOINTS) += power-traces.o
 ifeq ($(CONFIG_PM),y)
 obj-$(CONFIG_TRACEPOINTS) += rpm-traces.o
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 4d9f818..45abbde 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -701,6 +701,8 @@
 		return &bpf_probe_read_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	case BPF_FUNC_tail_call:
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_get_current_pid_tgid:
diff --git a/kernel/trace/error_report-traces.c b/kernel/trace/error_report-traces.c
new file mode 100644
index 0000000..632c8c7
--- /dev/null
+++ b/kernel/trace/error_report-traces.c
@@ -0,0 +1,12 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Error reporting trace points.
+ *
+ * Copyright (C) 2021, Google LLC.
+ */
+
+#define CREATE_TRACE_POINTS
+#include <trace/events/error_report.h>
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(error_report_end);
+
diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c
index efc3389..d86fb1e 100644
--- a/kernel/trace/ftrace.c
+++ b/kernel/trace/ftrace.c
@@ -5600,9 +5600,9 @@
 	return 0;
 }
 
-static int ftrace_process_locs(struct module *mod,
-			       unsigned long *start,
-			       unsigned long *end)
+static int __norecordmcount ftrace_process_locs(struct module *mod,
+						unsigned long *start,
+						unsigned long *end)
 {
 	struct ftrace_page *start_pg;
 	struct ftrace_page *pg;
diff --git a/kernel/trace/power-traces.c b/kernel/trace/power-traces.c
index 21bb161..3ca551c 100644
--- a/kernel/trace/power-traces.c
+++ b/kernel/trace/power-traces.c
@@ -18,4 +18,6 @@
 EXPORT_TRACEPOINT_SYMBOL_GPL(cpu_idle);
 EXPORT_TRACEPOINT_SYMBOL_GPL(cpu_frequency);
 EXPORT_TRACEPOINT_SYMBOL_GPL(powernv_throttle);
-
+EXPORT_TRACEPOINT_SYMBOL_GPL(device_pm_callback_start);
+EXPORT_TRACEPOINT_SYMBOL_GPL(device_pm_callback_end);
+EXPORT_TRACEPOINT_SYMBOL_GPL(clock_set_rate);
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 54f5b2f..d91e2dd 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3038,6 +3038,9 @@
 {
 	struct trace_buffer_struct __percpu *buffers;
 
+	if (trace_percpu_buffer)
+		return 0;
+
 	buffers = alloc_percpu(struct trace_buffer_struct);
 	if (WARN(!buffers, "Could not allocate percpu trace_printk buffer"))
 		return -ENOMEM;
@@ -3235,6 +3238,26 @@
 	return __trace_array_vprintk(tr->trace_buffer.buffer, ip, fmt, args);
 }
 
+/**
+ * trace_array_printk - Print a message to a specific instance
+ * @tr: The instance trace_array descriptor
+ * @ip: The instruction pointer that this is called from.
+ * @fmt: The format to print (printf format)
+ *
+ * If a subsystem sets up its own instance, they have the right to
+ * printk strings into their tracing instance buffer using this
+ * function. Note, this function will not write into the top level
+ * buffer (use trace_printk() for that), as writing into the top level
+ * buffer should only have events that can be individually disabled.
+ * trace_printk() is only used for debugging a kernel, and should not
+ * be ever encorporated in normal use.
+ *
+ * trace_array_printk() can be used, as it will not add noise to the
+ * top level tracing buffer.
+ *
+ * Note, trace_array_init_printk() must be called on @tr before this
+ * can be used.
+ */
 __printf(3, 0)
 int trace_array_printk(struct trace_array *tr,
 		       unsigned long ip, const char *fmt, ...)
@@ -3255,6 +3278,27 @@
 }
 EXPORT_SYMBOL_GPL(trace_array_printk);
 
+/**
+ * trace_array_init_printk - Initialize buffers for trace_array_printk()
+ * @tr: The trace array to initialize the buffers for
+ *
+ * As trace_array_printk() only writes into instances, they are OK to
+ * have in the kernel (unlike trace_printk()). This needs to be called
+ * before trace_array_printk() can be used on a trace_array.
+ */
+int trace_array_init_printk(struct trace_array *tr)
+{
+	if (!tr)
+		return -ENOENT;
+
+	/* This is only allowed for created instances */
+	if (tr == &global_trace)
+		return -EINVAL;
+
+	return alloc_percpu_trace_buffer();
+}
+EXPORT_SYMBOL_GPL(trace_array_init_printk);
+
 __printf(3, 4)
 int trace_array_printk_buf(struct ring_buffer *buffer,
 			   unsigned long ip, const char *fmt, ...)
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 1d514a1..dead0a5 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -11,6 +11,7 @@
 #include <linux/mmiotrace.h>
 #include <linux/tracepoint.h>
 #include <linux/ftrace.h>
+#include <linux/trace.h>
 #include <linux/hw_breakpoint.h>
 #include <linux/trace_seq.h>
 #include <linux/trace_events.h>
@@ -849,8 +850,6 @@
 extern int
 trace_array_vprintk(struct trace_array *tr,
 		    unsigned long ip, const char *fmt, va_list args);
-int trace_array_printk(struct trace_array *tr,
-		       unsigned long ip, const char *fmt, ...);
 int trace_array_printk_buf(struct ring_buffer *buffer,
 			   unsigned long ip, const char *fmt, ...);
 void trace_printk_seq(struct trace_seq *s);
@@ -1897,7 +1896,6 @@
 extern const char *__stop___tracepoint_str[];
 
 void trace_printk_control(bool enabled);
-void trace_printk_init_buffers(void);
 void trace_printk_start_comm(void);
 int trace_keep_overwrite(struct tracer *tracer, u32 mask, int set);
 int set_tracer_flag(struct trace_array *tr, unsigned int mask, int enabled);
diff --git a/kernel/trace/trace_event_perf.c b/kernel/trace/trace_event_perf.c
index a9dfa04..643e0b1 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/workqueue.c b/kernel/workqueue.c
index e90f37e..bd2e459 100644
--- a/kernel/workqueue.c
+++ b/kernel/workqueue.c
@@ -54,6 +54,10 @@
 
 #include "workqueue_internal.h"
 
+#include <trace/hooks/wqlockup.h>
+/* events/workqueue.h uses default TRACE_INCLUDE_PATH */
+#undef TRACE_INCLUDE_PATH
+
 enum {
 	/*
 	 * worker_pool flags
@@ -1639,7 +1643,9 @@
 	struct work_struct *work = &dwork->work;
 
 	WARN_ON_ONCE(!wq);
+#ifndef CONFIG_CFI_CLANG
 	WARN_ON_ONCE(timer->function != delayed_work_timer_fn);
+#endif
 	WARN_ON_ONCE(timer_pending(timer));
 	WARN_ON_ONCE(!list_empty(&work->entry));
 
@@ -5802,6 +5808,7 @@
 			pr_cont_pool_info(pool);
 			pr_cont(" stuck for %us!\n",
 				jiffies_to_msecs(now - pool_ts) / 1000);
+			trace_android_vh_wq_lockup_pool(pool->cpu, pool_ts);
 		}
 	}
 
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index a846f03..c8a7543 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -98,7 +98,8 @@
 	bool "Enable dynamic printk() support"
 	default n
 	depends on PRINTK
-	depends on DEBUG_FS
+	depends on (DEBUG_FS || PROC_FS)
+	select DYNAMIC_DEBUG_CORE
 	help
 
 	  Compiles debug level messages into the kernel, which would not
@@ -116,8 +117,9 @@
 	  Usage:
 
 	  Dynamic debugging is controlled via the 'dynamic_debug/control' file,
-	  which is contained in the 'debugfs' filesystem. Thus, the debugfs
-	  filesystem must first be mounted before making use of this feature.
+	  which is contained in the 'debugfs' filesystem or procfs.
+	  Thus, the debugfs or procfs filesystem must first be mounted before
+	  making use of this feature.
 	  We refer the control file as: <debugfs>/dynamic_debug/control. This
 	  file contains a list of the debug statements that can be enabled. The
 	  format for each line of the file is:
@@ -164,6 +166,17 @@
 	  See Documentation/admin-guide/dynamic-debug-howto.rst for additional
 	  information.
 
+config DYNAMIC_DEBUG_CORE
+	bool "Enable core function of dynamic debug support"
+	depends on PRINTK
+	depends on (DEBUG_FS || PROC_FS)
+	help
+	  Enable core functional support of dynamic debug. It is useful
+	  when you want to tie dynamic debug to your kernel modules with
+	  DYNAMIC_DEBUG_MODULE defined for each of them, especially for
+	  the case of embedded system where the kernel image size is
+	  sensitive for people.
+
 endmenu # "printk and dmesg options"
 
 menu "Compile-time checks and compiler options"
@@ -746,6 +759,7 @@
 	  If in doubt, say "N".
 
 source "lib/Kconfig.kasan"
+source "lib/Kconfig.kfence"
 
 endmenu # "Memory Debugging"
 
@@ -1654,6 +1668,8 @@
 
 	  See Documentation/debugging-via-ohci1394.txt for more information.
 
+source "lib/kunit/Kconfig"
+
 menuconfig RUNTIME_TESTING_MENU
 	bool "Runtime Testing"
 	def_bool y
@@ -1939,7 +1955,7 @@
 	  If unsure, say N.
 
 config SYSCTL_KUNIT_TEST
-	bool "KUnit test for sysctl"
+	tristate "KUnit test for sysctl"
 	depends on KUNIT
 	help
 	  This builds the proc sysctl unit test, which runs on boot.
@@ -1949,6 +1965,24 @@
 
 	  If unsure, say N.
 
+config LIST_KUNIT_TEST
+	tristate "KUnit Test for Kernel Linked-list structures"
+	depends on KUNIT
+	help
+	  This builds the linked list KUnit test suite.
+	  It tests that the API and basic functionality of the list_head type
+	  and associated macros.
+
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running the KUnit test harness, and not intended for inclusion into a
+	  production build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
+
 config TEST_UDELAY
 	tristate "udelay test driver"
 	help
diff --git a/lib/Kconfig.kfence b/lib/Kconfig.kfence
new file mode 100644
index 0000000..e641add3
--- /dev/null
+++ b/lib/Kconfig.kfence
@@ -0,0 +1,83 @@
+# SPDX-License-Identifier: GPL-2.0-only
+
+config HAVE_ARCH_KFENCE
+	bool
+
+menuconfig KFENCE
+	bool "KFENCE: low-overhead sampling-based memory safety error detector"
+	depends on HAVE_ARCH_KFENCE && (SLAB || SLUB)
+	select STACKTRACE
+	select IRQ_WORK
+	help
+	  KFENCE is a low-overhead sampling-based detector of heap out-of-bounds
+	  access, use-after-free, and invalid-free errors. KFENCE is designed
+	  to have negligible cost to permit enabling it in production
+	  environments.
+
+	  See <file:Documentation/dev-tools/kfence.rst> for more details.
+
+	  Note that, KFENCE is not a substitute for explicit testing with tools
+	  such as KASAN. KFENCE can detect a subset of bugs that KASAN can
+	  detect, albeit at very different performance profiles. If you can
+	  afford to use KASAN, continue using KASAN, for example in test
+	  environments. If your kernel targets production use, and cannot
+	  enable KASAN due to its cost, consider using KFENCE.
+
+if KFENCE
+
+config KFENCE_STATIC_KEYS
+	bool "Use static keys to set up allocations"
+	default y
+	depends on JUMP_LABEL # To ensure performance, require jump labels
+	help
+	  Use static keys (static branches) to set up KFENCE allocations. Using
+	  static keys is normally recommended, because it avoids a dynamic
+	  branch in the allocator's fast path. However, with very low sample
+	  intervals, or on systems that do not support jump labels, a dynamic
+	  branch may still be an acceptable performance trade-off.
+
+config KFENCE_SAMPLE_INTERVAL
+	int "Default sample interval in milliseconds"
+	default 100
+	help
+	  The KFENCE sample interval determines the frequency with which heap
+	  allocations will be guarded by KFENCE. May be overridden via boot
+	  parameter "kfence.sample_interval".
+
+	  Set this to 0 to disable KFENCE by default, in which case only
+	  setting "kfence.sample_interval" to a non-zero value enables KFENCE.
+
+config KFENCE_NUM_OBJECTS
+	int "Number of guarded objects available"
+	range 1 65535
+	default 255
+	help
+	  The number of guarded objects available. For each KFENCE object, 2
+	  pages are required; with one containing the object and two adjacent
+	  ones used as guard pages.
+
+config KFENCE_STRESS_TEST_FAULTS
+	int "Stress testing of fault handling and error reporting" if EXPERT
+	default 0
+	help
+	  The inverse probability with which to randomly protect KFENCE object
+	  pages, resulting in spurious use-after-frees. The main purpose of
+	  this option is to stress test KFENCE with concurrent error reports
+	  and allocations/frees. A value of 0 disables stress testing logic.
+
+	  Only for KFENCE testing; set to 0 if you are not a KFENCE developer.
+
+config KFENCE_KUNIT_TEST
+	tristate "KFENCE integration test suite" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	depends on TRACEPOINTS && KUNIT
+	help
+	  Test suite for KFENCE, testing various error detection scenarios with
+	  various allocation types, and checking that reports are correctly
+	  output to console.
+
+	  Say Y here if you want the test to be built into the kernel and run
+	  during boot; say M if you want the test to build as a module; say N
+	  if you are unsure.
+
+endif # KFENCE
diff --git a/lib/Kconfig.ubsan b/lib/Kconfig.ubsan
index 0e04fcb..76021bb 100644
--- a/lib/Kconfig.ubsan
+++ b/lib/Kconfig.ubsan
@@ -2,18 +2,65 @@
 config ARCH_HAS_UBSAN_SANITIZE_ALL
 	bool
 
-config UBSAN
+menuconfig UBSAN
 	bool "Undefined behaviour sanity checker"
 	help
-	  This option enables undefined behaviour sanity checker
+	  This option enables the Undefined Behaviour sanity checker.
 	  Compile-time instrumentation is used to detect various undefined
-	  behaviours in runtime. Various types of checks may be enabled
-	  via boot parameter ubsan_handle
-	  (see: Documentation/dev-tools/ubsan.rst).
+	  behaviours at runtime. For more details, see:
+	  Documentation/dev-tools/ubsan.rst
+
+config UBSAN_TRAP
+	bool "On Sanitizer warnings, abort the running kernel code"
+	depends on UBSAN
+	depends on $(cc-option, -fsanitize-undefined-trap-on-error)
+	help
+	  Building kernels with Sanitizer features enabled tends to grow
+	  the kernel size by around 5%, due to adding all the debugging
+	  text on failure paths. To avoid this, Sanitizer instrumentation
+	  can just issue a trap. This reduces the kernel size overhead but
+	  turns all warnings (including potentially harmless conditions)
+	  into full exceptions that abort the running kernel code
+	  (regardless of context, locks held, etc), which may destabilize
+	  the system. For some system builders this is an acceptable
+	  trade-off.
+
+if UBSAN
+
+config UBSAN_TRAP
+	bool "On Sanitizer warnings, abort the running kernel code"
+	depends on $(cc-option, -fsanitize-undefined-trap-on-error)
+	help
+	  Building kernels with Sanitizer features enabled tends to grow
+	  the kernel size by around 5%, due to adding all the debugging
+	  text on failure paths. To avoid this, Sanitizer instrumentation
+	  can just issue a trap. This reduces the kernel size overhead but
+	  turns all warnings (including potentially harmless conditions)
+	  into full exceptions that abort the running kernel code
+	  (regardless of context, locks held, etc), which may destabilize
+	  the system. For some system builders this is an acceptable
+	  trade-off.
+
+config UBSAN_BOUNDS
+	bool "Perform array index bounds checking"
+	default UBSAN
+	help
+	  This option enables detection of directly indexed out of bounds
+	  array accesses, where the array size is known at compile time.
+	  Note that this does not protect array overflows via bad calls
+	  to the {str,mem}*cpy() family of functions (that is addressed
+	  by CONFIG_FORTIFY_SOURCE).
+
+config UBSAN_MISC
+	bool "Enable all other Undefined Behavior sanity checks"
+	default UBSAN
+	help
+	  This option enables all sanity checks that don't have their
+	  own Kconfig options. Disable this if you only want to have
+	  individually selected checks.
 
 config UBSAN_SANITIZE_ALL
 	bool "Enable instrumentation for the entire kernel"
-	depends on UBSAN
 	depends on ARCH_HAS_UBSAN_SANITIZE_ALL
 
 	# We build with -Wno-maybe-uninitilzed, but we still want to
@@ -28,22 +75,20 @@
 	  Enabling this option will get kernel image size increased
 	  significantly.
 
-config UBSAN_NO_ALIGNMENT
-	bool "Disable checking of pointers alignment"
-	depends on UBSAN
-	default y if HAVE_EFFICIENT_UNALIGNED_ACCESS
-	help
-	  This option disables the check of unaligned memory accesses.
-	  This option should be used when building allmodconfig.
-	  Disabling this option on architectures that support unaligned
-	  accesses may produce a lot of false positives.
-
 config UBSAN_ALIGNMENT
-	def_bool !UBSAN_NO_ALIGNMENT
+	bool "Enable checks for pointers alignment"
+	default !HAVE_EFFICIENT_UNALIGNED_ACCESS
+	depends on !UBSAN_TRAP
+	help
+	  This option enables the check of unaligned memory accesses.
+	  Enabling this option on architectures that support unaligned
+	  accesses may produce a lot of false positives.
 
 config TEST_UBSAN
 	tristate "Module for testing for undefined behavior detection"
-	depends on m && UBSAN
+	depends on m
 	help
 	  This is a test module for UBSAN.
 	  It triggers various undefined behavior, and detect it.
+
+endif	# if UBSAN
diff --git a/lib/Makefile b/lib/Makefile
index 3b8977a..6ce115c 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -26,8 +26,7 @@
 
 lib-y := ctype.o string.o vsprintf.o cmdline.o \
 	 rbtree.o radix-tree.o timerqueue.o xarray.o \
-	 idr.o extable.o \
-	 sha1.o chacha.o irq_regs.o argv_split.o \
+	 idr.o extable.o sha1.o irq_regs.o argv_split.o \
 	 flex_proportions.o ratelimit.o show_mem.o \
 	 is_single_threaded.o plist.o decompress.o kobject_uevent.o \
 	 earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
@@ -86,12 +85,15 @@
 obj-$(CONFIG_TEST_DEBUG_VIRTUAL) += test_debug_virtual.o
 obj-$(CONFIG_TEST_MEMCAT_P) += test_memcat_p.o
 obj-$(CONFIG_TEST_OBJAGG) += test_objagg.o
+CFLAGS_test_stackinit.o += $(call cc-disable-warning, switch-unreachable)
 obj-$(CONFIG_TEST_STACKINIT) += test_stackinit.o
 obj-$(CONFIG_TEST_BLACKHOLE_DEV) += test_blackhole_dev.o
 obj-$(CONFIG_TEST_MEMINIT) += test_meminit.o
 
 obj-$(CONFIG_TEST_LIVEPATCH) += livepatch/
 
+obj-$(CONFIG_KUNIT) += kunit/
+
 ifeq ($(CONFIG_DEBUG_KOBJECT),y)
 CFLAGS_kobject.o += -DDEBUG
 CFLAGS_kobject_uevent.o += -DDEBUG
@@ -180,7 +182,7 @@
 
 obj-$(CONFIG_HAVE_ARCH_TRACEHOOK) += syscall.o
 
-obj-$(CONFIG_DYNAMIC_DEBUG) += dynamic_debug.o
+obj-$(CONFIG_DYNAMIC_DEBUG_CORE) += dynamic_debug.o
 
 obj-$(CONFIG_NLATTR) += nlattr.o
 
@@ -225,6 +227,8 @@
 	$(eval CFLAGS_$(file) = -I $(srctree)/scripts/dtc/libfdt))
 lib-$(CONFIG_LIBFDT) += $(libfdt_files)
 
+lib-$(CONFIG_BOOT_CONFIG) += bootconfig.o
+
 obj-$(CONFIG_RBTREE_TEST) += rbtree_test.o
 obj-$(CONFIG_INTERVAL_TREE_TEST) += interval_tree_test.o
 
@@ -272,7 +276,9 @@
 clean-files	+= oid_registry_data.c
 
 obj-$(CONFIG_UCS2_STRING) += ucs2_string.o
+ifneq ($(CONFIG_UBSAN_TRAP),y)
 obj-$(CONFIG_UBSAN) += ubsan.o
+endif
 
 UBSAN_SANITIZE_ubsan.o := n
 KASAN_SANITIZE_ubsan.o := n
@@ -290,3 +296,6 @@
 obj-$(CONFIG_GENERIC_LIB_CMPDI2) += cmpdi2.o
 obj-$(CONFIG_GENERIC_LIB_UCMPDI2) += ucmpdi2.o
 obj-$(CONFIG_OBJAGG) += objagg.o
+
+# KUnit tests
+obj-$(CONFIG_LIST_KUNIT_TEST) += list-test.o
diff --git a/lib/bootconfig.c b/lib/bootconfig.c
new file mode 100644
index 0000000..7f2c58e8
--- /dev/null
+++ b/lib/bootconfig.c
@@ -0,0 +1,921 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Extra Boot Config
+ * Masami Hiramatsu <mhiramat@kernel.org>
+ */
+
+#define pr_fmt(fmt)    "bootconfig: " fmt
+
+#include <linux/bootconfig.h>
+#include <linux/bug.h>
+#include <linux/ctype.h>
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/memblock.h>
+#include <linux/printk.h>
+#include <linux/string.h>
+
+/*
+ * Extra Boot Config (XBC) is given as tree-structured ascii text of
+ * key-value pairs on memory.
+ * xbc_parse() parses the text to build a simple tree. Each tree node is
+ * simply a key word or a value. A key node may have a next key node or/and
+ * a child node (both key and value). A value node may have a next value
+ * node (for array).
+ */
+
+static struct xbc_node *xbc_nodes __initdata;
+static int xbc_node_num __initdata;
+static char *xbc_data __initdata;
+static size_t xbc_data_size __initdata;
+static struct xbc_node *last_parent __initdata;
+static const char *xbc_err_msg __initdata;
+static int xbc_err_pos __initdata;
+static int open_brace[XBC_DEPTH_MAX] __initdata;
+static int brace_index __initdata;
+
+static int __init xbc_parse_error(const char *msg, const char *p)
+{
+	xbc_err_msg = msg;
+	xbc_err_pos = (int)(p - xbc_data);
+
+	return -EINVAL;
+}
+
+/**
+ * xbc_root_node() - Get the root node of extended boot config
+ *
+ * Return the address of root node of extended boot config. If the
+ * extended boot config is not initiized, return NULL.
+ */
+struct xbc_node * __init xbc_root_node(void)
+{
+	if (unlikely(!xbc_data))
+		return NULL;
+
+	return xbc_nodes;
+}
+
+/**
+ * xbc_node_index() - Get the index of XBC node
+ * @node: A target node of getting index.
+ *
+ * Return the index number of @node in XBC node list.
+ */
+int __init xbc_node_index(struct xbc_node *node)
+{
+	return node - &xbc_nodes[0];
+}
+
+/**
+ * xbc_node_get_parent() - Get the parent XBC node
+ * @node: An XBC node.
+ *
+ * Return the parent node of @node. If the node is top node of the tree,
+ * return NULL.
+ */
+struct xbc_node * __init xbc_node_get_parent(struct xbc_node *node)
+{
+	return node->parent == XBC_NODE_MAX ? NULL : &xbc_nodes[node->parent];
+}
+
+/**
+ * xbc_node_get_child() - Get the child XBC node
+ * @node: An XBC node.
+ *
+ * Return the first child node of @node. If the node has no child, return
+ * NULL.
+ */
+struct xbc_node * __init xbc_node_get_child(struct xbc_node *node)
+{
+	return node->child ? &xbc_nodes[node->child] : NULL;
+}
+
+/**
+ * xbc_node_get_next() - Get the next sibling XBC node
+ * @node: An XBC node.
+ *
+ * Return the NEXT sibling node of @node. If the node has no next sibling,
+ * return NULL. Note that even if this returns NULL, it doesn't mean @node
+ * has no siblings. (You also has to check whether the parent's child node
+ * is @node or not.)
+ */
+struct xbc_node * __init xbc_node_get_next(struct xbc_node *node)
+{
+	return node->next ? &xbc_nodes[node->next] : NULL;
+}
+
+/**
+ * xbc_node_get_data() - Get the data of XBC node
+ * @node: An XBC node.
+ *
+ * Return the data (which is always a null terminated string) of @node.
+ * If the node has invalid data, warn and return NULL.
+ */
+const char * __init xbc_node_get_data(struct xbc_node *node)
+{
+	int offset = node->data & ~XBC_VALUE;
+
+	if (WARN_ON(offset >= xbc_data_size))
+		return NULL;
+
+	return xbc_data + offset;
+}
+
+static bool __init
+xbc_node_match_prefix(struct xbc_node *node, const char **prefix)
+{
+	const char *p = xbc_node_get_data(node);
+	int len = strlen(p);
+
+	if (strncmp(*prefix, p, len))
+		return false;
+
+	p = *prefix + len;
+	if (*p == '.')
+		p++;
+	else if (*p != '\0')
+		return false;
+	*prefix = p;
+
+	return true;
+}
+
+/**
+ * xbc_node_find_child() - Find a child node which matches given key
+ * @parent: An XBC node.
+ * @key: A key string.
+ *
+ * Search a node under @parent which matches @key. The @key can contain
+ * several words jointed with '.'. If @parent is NULL, this searches the
+ * node from whole tree. Return NULL if no node is matched.
+ */
+struct xbc_node * __init
+xbc_node_find_child(struct xbc_node *parent, const char *key)
+{
+	struct xbc_node *node;
+
+	if (parent)
+		node = xbc_node_get_subkey(parent);
+	else
+		node = xbc_root_node();
+
+	while (node && xbc_node_is_key(node)) {
+		if (!xbc_node_match_prefix(node, &key))
+			node = xbc_node_get_next(node);
+		else if (*key != '\0')
+			node = xbc_node_get_subkey(node);
+		else
+			break;
+	}
+
+	return node;
+}
+
+/**
+ * xbc_node_find_value() - Find a value node which matches given key
+ * @parent: An XBC node.
+ * @key: A key string.
+ * @vnode: A container pointer of found XBC node.
+ *
+ * Search a value node under @parent whose (parent) key node matches @key,
+ * store it in *@vnode, and returns the value string.
+ * The @key can contain several words jointed with '.'. If @parent is NULL,
+ * this searches the node from whole tree. Return the value string if a
+ * matched key found, return NULL if no node is matched.
+ * Note that this returns 0-length string and stores NULL in *@vnode if the
+ * key has no value. And also it will return the value of the first entry if
+ * the value is an array.
+ */
+const char * __init
+xbc_node_find_value(struct xbc_node *parent, const char *key,
+		    struct xbc_node **vnode)
+{
+	struct xbc_node *node = xbc_node_find_child(parent, key);
+
+	if (!node || !xbc_node_is_key(node))
+		return NULL;
+
+	node = xbc_node_get_child(node);
+	if (node && !xbc_node_is_value(node))
+		return NULL;
+
+	if (vnode)
+		*vnode = node;
+
+	return node ? xbc_node_get_data(node) : "";
+}
+
+/**
+ * xbc_node_compose_key_after() - Compose partial key string of the XBC node
+ * @root: Root XBC node
+ * @node: Target XBC node.
+ * @buf: A buffer to store the key.
+ * @size: The size of the @buf.
+ *
+ * Compose the partial key of the @node into @buf, which is starting right
+ * after @root (@root is not included.) If @root is NULL, this returns full
+ * key words of @node.
+ * Returns the total length of the key stored in @buf. Returns -EINVAL
+ * if @node is NULL or @root is not the ancestor of @node or @root is @node,
+ * or returns -ERANGE if the key depth is deeper than max depth.
+ * This is expected to be used with xbc_find_node() to list up all (child)
+ * keys under given key.
+ */
+int __init xbc_node_compose_key_after(struct xbc_node *root,
+				      struct xbc_node *node,
+				      char *buf, size_t size)
+{
+	u16 keys[XBC_DEPTH_MAX];
+	int depth = 0, ret = 0, total = 0;
+
+	if (!node || node == root)
+		return -EINVAL;
+
+	if (xbc_node_is_value(node))
+		node = xbc_node_get_parent(node);
+
+	while (node && node != root) {
+		keys[depth++] = xbc_node_index(node);
+		if (depth == XBC_DEPTH_MAX)
+			return -ERANGE;
+		node = xbc_node_get_parent(node);
+	}
+	if (!node && root)
+		return -EINVAL;
+
+	while (--depth >= 0) {
+		node = xbc_nodes + keys[depth];
+		ret = snprintf(buf, size, "%s%s", xbc_node_get_data(node),
+			       depth ? "." : "");
+		if (ret < 0)
+			return ret;
+		if (ret > size) {
+			size = 0;
+		} else {
+			size -= ret;
+			buf += ret;
+		}
+		total += ret;
+	}
+
+	return total;
+}
+
+/**
+ * xbc_node_find_next_leaf() - Find the next leaf node under given node
+ * @root: An XBC root node
+ * @node: An XBC node which starts from.
+ *
+ * Search the next leaf node (which means the terminal key node) of @node
+ * under @root node (including @root node itself).
+ * Return the next node or NULL if next leaf node is not found.
+ */
+struct xbc_node * __init xbc_node_find_next_leaf(struct xbc_node *root,
+						 struct xbc_node *node)
+{
+	struct xbc_node *next;
+
+	if (unlikely(!xbc_data))
+		return NULL;
+
+	if (!node) {	/* First try */
+		node = root;
+		if (!node)
+			node = xbc_nodes;
+	} else {
+		/* Leaf node may have a subkey */
+		next = xbc_node_get_subkey(node);
+		if (next) {
+			node = next;
+			goto found;
+		}
+
+		if (node == root)	/* @root was a leaf, no child node. */
+			return NULL;
+
+		while (!node->next) {
+			node = xbc_node_get_parent(node);
+			if (node == root)
+				return NULL;
+			/* User passed a node which is not uder parent */
+			if (WARN_ON(!node))
+				return NULL;
+		}
+		node = xbc_node_get_next(node);
+	}
+
+found:
+	while (node && !xbc_node_is_leaf(node))
+		node = xbc_node_get_child(node);
+
+	return node;
+}
+
+/**
+ * xbc_node_find_next_key_value() - Find the next key-value pair nodes
+ * @root: An XBC root node
+ * @leaf: A container pointer of XBC node which starts from.
+ *
+ * Search the next leaf node (which means the terminal key node) of *@leaf
+ * under @root node. Returns the value and update *@leaf if next leaf node
+ * is found, or NULL if no next leaf node is found.
+ * Note that this returns 0-length string if the key has no value, or
+ * the value of the first entry if the value is an array.
+ */
+const char * __init xbc_node_find_next_key_value(struct xbc_node *root,
+						 struct xbc_node **leaf)
+{
+	/* tip must be passed */
+	if (WARN_ON(!leaf))
+		return NULL;
+
+	*leaf = xbc_node_find_next_leaf(root, *leaf);
+	if (!*leaf)
+		return NULL;
+	if ((*leaf)->child)
+		return xbc_node_get_data(xbc_node_get_child(*leaf));
+	else
+		return "";	/* No value key */
+}
+
+/* XBC parse and tree build */
+
+static int __init xbc_init_node(struct xbc_node *node, char *data, u32 flag)
+{
+	unsigned long offset = data - xbc_data;
+
+	if (WARN_ON(offset >= XBC_DATA_MAX))
+		return -EINVAL;
+
+	node->data = (u16)offset | flag;
+	node->child = 0;
+	node->next = 0;
+
+	return 0;
+}
+
+static struct xbc_node * __init xbc_add_node(char *data, u32 flag)
+{
+	struct xbc_node *node;
+
+	if (xbc_node_num == XBC_NODE_MAX)
+		return NULL;
+
+	node = &xbc_nodes[xbc_node_num++];
+	if (xbc_init_node(node, data, flag) < 0)
+		return NULL;
+
+	return node;
+}
+
+static inline __init struct xbc_node *xbc_last_sibling(struct xbc_node *node)
+{
+	while (node->next)
+		node = xbc_node_get_next(node);
+
+	return node;
+}
+
+static inline __init struct xbc_node *xbc_last_child(struct xbc_node *node)
+{
+	while (node->child)
+		node = xbc_node_get_child(node);
+
+	return node;
+}
+
+static struct xbc_node * __init __xbc_add_sibling(char *data, u32 flag, bool head)
+{
+	struct xbc_node *sib, *node = xbc_add_node(data, flag);
+
+	if (node) {
+		if (!last_parent) {
+			/* Ignore @head in this case */
+			node->parent = XBC_NODE_MAX;
+			sib = xbc_last_sibling(xbc_nodes);
+			sib->next = xbc_node_index(node);
+		} else {
+			node->parent = xbc_node_index(last_parent);
+			if (!last_parent->child || head) {
+				node->next = last_parent->child;
+				last_parent->child = xbc_node_index(node);
+			} else {
+				sib = xbc_node_get_child(last_parent);
+				sib = xbc_last_sibling(sib);
+				sib->next = xbc_node_index(node);
+			}
+		}
+	} else
+		xbc_parse_error("Too many nodes", data);
+
+	return node;
+}
+
+static inline struct xbc_node * __init xbc_add_sibling(char *data, u32 flag)
+{
+	return __xbc_add_sibling(data, flag, false);
+}
+
+static inline struct xbc_node * __init xbc_add_head_sibling(char *data, u32 flag)
+{
+	return __xbc_add_sibling(data, flag, true);
+}
+
+static inline __init struct xbc_node *xbc_add_child(char *data, u32 flag)
+{
+	struct xbc_node *node = xbc_add_sibling(data, flag);
+
+	if (node)
+		last_parent = node;
+
+	return node;
+}
+
+static inline __init bool xbc_valid_keyword(char *key)
+{
+	if (key[0] == '\0')
+		return false;
+
+	while (isalnum(*key) || *key == '-' || *key == '_')
+		key++;
+
+	return *key == '\0';
+}
+
+static char *skip_comment(char *p)
+{
+	char *ret;
+
+	ret = strchr(p, '\n');
+	if (!ret)
+		ret = p + strlen(p);
+	else
+		ret++;
+
+	return ret;
+}
+
+static char *skip_spaces_until_newline(char *p)
+{
+	while (isspace(*p) && *p != '\n')
+		p++;
+	return p;
+}
+
+static int __init __xbc_open_brace(char *p)
+{
+	/* Push the last key as open brace */
+	open_brace[brace_index++] = xbc_node_index(last_parent);
+	if (brace_index >= XBC_DEPTH_MAX)
+		return xbc_parse_error("Exceed max depth of braces", p);
+
+	return 0;
+}
+
+static int __init __xbc_close_brace(char *p)
+{
+	brace_index--;
+	if (!last_parent || brace_index < 0 ||
+	    (open_brace[brace_index] != xbc_node_index(last_parent)))
+		return xbc_parse_error("Unexpected closing brace", p);
+
+	if (brace_index == 0)
+		last_parent = NULL;
+	else
+		last_parent = &xbc_nodes[open_brace[brace_index - 1]];
+
+	return 0;
+}
+
+/*
+ * Return delimiter or error, no node added. As same as lib/cmdline.c,
+ * you can use " around spaces, but can't escape " for value.
+ */
+static int __init __xbc_parse_value(char **__v, char **__n)
+{
+	char *p, *v = *__v;
+	int c, quotes = 0;
+
+	v = skip_spaces(v);
+	while (*v == '#') {
+		v = skip_comment(v);
+		v = skip_spaces(v);
+	}
+	if (*v == '"' || *v == '\'') {
+		quotes = *v;
+		v++;
+	}
+	p = v - 1;
+	while ((c = *++p)) {
+		if (!isprint(c) && !isspace(c))
+			return xbc_parse_error("Non printable value", p);
+		if (quotes) {
+			if (c != quotes)
+				continue;
+			quotes = 0;
+			*p++ = '\0';
+			p = skip_spaces_until_newline(p);
+			c = *p;
+			if (c && !strchr(",;\n#}", c))
+				return xbc_parse_error("No value delimiter", p);
+			if (*p)
+				p++;
+			break;
+		}
+		if (strchr(",;\n#}", c)) {
+			*p++ = '\0';
+			v = strim(v);
+			break;
+		}
+	}
+	if (quotes)
+		return xbc_parse_error("No closing quotes", p);
+	if (c == '#') {
+		p = skip_comment(p);
+		c = '\n';	/* A comment must be treated as a newline */
+	}
+	*__n = p;
+	*__v = v;
+
+	return c;
+}
+
+static int __init xbc_parse_array(char **__v)
+{
+	struct xbc_node *node;
+	char *next;
+	int c = 0;
+
+	if (last_parent->child)
+		last_parent = xbc_node_get_child(last_parent);
+
+	do {
+		c = __xbc_parse_value(__v, &next);
+		if (c < 0)
+			return c;
+
+		node = xbc_add_child(*__v, XBC_VALUE);
+		if (!node)
+			return -ENOMEM;
+		*__v = next;
+	} while (c == ',');
+	node->child = 0;
+
+	return c;
+}
+
+static inline __init
+struct xbc_node *find_match_node(struct xbc_node *node, char *k)
+{
+	while (node) {
+		if (!strcmp(xbc_node_get_data(node), k))
+			break;
+		node = xbc_node_get_next(node);
+	}
+	return node;
+}
+
+static int __init __xbc_add_key(char *k)
+{
+	struct xbc_node *node, *child;
+
+	if (!xbc_valid_keyword(k))
+		return xbc_parse_error("Invalid keyword", k);
+
+	if (unlikely(xbc_node_num == 0))
+		goto add_node;
+
+	if (!last_parent)	/* the first level */
+		node = find_match_node(xbc_nodes, k);
+	else {
+		child = xbc_node_get_child(last_parent);
+		/* Since the value node is the first child, skip it. */
+		if (child && xbc_node_is_value(child))
+			child = xbc_node_get_next(child);
+		node = find_match_node(child, k);
+	}
+
+	if (node)
+		last_parent = node;
+	else {
+add_node:
+		node = xbc_add_child(k, XBC_KEY);
+		if (!node)
+			return -ENOMEM;
+	}
+	return 0;
+}
+
+static int __init __xbc_parse_keys(char *k)
+{
+	char *p;
+	int ret;
+
+	k = strim(k);
+	while ((p = strchr(k, '.'))) {
+		*p++ = '\0';
+		ret = __xbc_add_key(k);
+		if (ret)
+			return ret;
+		k = p;
+	}
+
+	return __xbc_add_key(k);
+}
+
+static int __init xbc_parse_kv(char **k, char *v, int op)
+{
+	struct xbc_node *prev_parent = last_parent;
+	struct xbc_node *child;
+	char *next;
+	int c, ret;
+
+	ret = __xbc_parse_keys(*k);
+	if (ret)
+		return ret;
+
+	c = __xbc_parse_value(&v, &next);
+	if (c < 0)
+		return c;
+
+	child = xbc_node_get_child(last_parent);
+	if (child && xbc_node_is_value(child)) {
+		if (op == '=')
+			return xbc_parse_error("Value is redefined", v);
+		if (op == ':') {
+			unsigned short nidx = child->next;
+
+			xbc_init_node(child, v, XBC_VALUE);
+			child->next = nidx;	/* keep subkeys */
+			goto array;
+		}
+		/* op must be '+' */
+		last_parent = xbc_last_child(child);
+	}
+	/* The value node should always be the first child */
+	if (!xbc_add_head_sibling(v, XBC_VALUE))
+		return -ENOMEM;
+
+array:
+	if (c == ',') {	/* Array */
+		c = xbc_parse_array(&next);
+		if (c < 0)
+			return c;
+	}
+
+	last_parent = prev_parent;
+
+	if (c == '}') {
+		ret = __xbc_close_brace(next - 1);
+		if (ret < 0)
+			return ret;
+	}
+
+	*k = next;
+
+	return 0;
+}
+
+static int __init xbc_parse_key(char **k, char *n)
+{
+	struct xbc_node *prev_parent = last_parent;
+	int ret;
+
+	*k = strim(*k);
+	if (**k != '\0') {
+		ret = __xbc_parse_keys(*k);
+		if (ret)
+			return ret;
+		last_parent = prev_parent;
+	}
+	*k = n;
+
+	return 0;
+}
+
+static int __init xbc_open_brace(char **k, char *n)
+{
+	int ret;
+
+	ret = __xbc_parse_keys(*k);
+	if (ret)
+		return ret;
+	*k = n;
+
+	return __xbc_open_brace(n - 1);
+}
+
+static int __init xbc_close_brace(char **k, char *n)
+{
+	int ret;
+
+	ret = xbc_parse_key(k, n);
+	if (ret)
+		return ret;
+	/* k is updated in xbc_parse_key() */
+
+	return __xbc_close_brace(n - 1);
+}
+
+static int __init xbc_verify_tree(void)
+{
+	int i, depth, len, wlen;
+	struct xbc_node *n, *m;
+
+	/* Brace closing */
+	if (brace_index) {
+		n = &xbc_nodes[open_brace[brace_index]];
+		return xbc_parse_error("Brace is not closed",
+					xbc_node_get_data(n));
+	}
+
+	/* Empty tree */
+	if (xbc_node_num == 0) {
+		xbc_parse_error("Empty config", xbc_data);
+		return -ENOENT;
+	}
+
+	for (i = 0; i < xbc_node_num; i++) {
+		if (xbc_nodes[i].next > xbc_node_num) {
+			return xbc_parse_error("No closing brace",
+				xbc_node_get_data(xbc_nodes + i));
+		}
+	}
+
+	/* Key tree limitation check */
+	n = &xbc_nodes[0];
+	depth = 1;
+	len = 0;
+
+	while (n) {
+		wlen = strlen(xbc_node_get_data(n)) + 1;
+		len += wlen;
+		if (len > XBC_KEYLEN_MAX)
+			return xbc_parse_error("Too long key length",
+				xbc_node_get_data(n));
+
+		m = xbc_node_get_child(n);
+		if (m && xbc_node_is_key(m)) {
+			n = m;
+			depth++;
+			if (depth > XBC_DEPTH_MAX)
+				return xbc_parse_error("Too many key words",
+						xbc_node_get_data(n));
+			continue;
+		}
+		len -= wlen;
+		m = xbc_node_get_next(n);
+		while (!m) {
+			n = xbc_node_get_parent(n);
+			if (!n)
+				break;
+			len -= strlen(xbc_node_get_data(n)) + 1;
+			depth--;
+			m = xbc_node_get_next(n);
+		}
+		n = m;
+	}
+
+	return 0;
+}
+
+/**
+ * xbc_destroy_all() - Clean up all parsed bootconfig
+ *
+ * This clears all data structures of parsed bootconfig on memory.
+ * If you need to reuse xbc_init() with new boot config, you can
+ * use this.
+ */
+void __init xbc_destroy_all(void)
+{
+	xbc_data = NULL;
+	xbc_data_size = 0;
+	xbc_node_num = 0;
+	memblock_free(__pa(xbc_nodes), sizeof(struct xbc_node) * XBC_NODE_MAX);
+	xbc_nodes = NULL;
+	brace_index = 0;
+}
+
+/**
+ * xbc_init() - Parse given XBC file and build XBC internal tree
+ * @buf: boot config text
+ * @emsg: A pointer of const char * to store the error message
+ * @epos: A pointer of int to store the error position
+ *
+ * This parses the boot config text in @buf. @buf must be a
+ * null terminated string and smaller than XBC_DATA_MAX.
+ * Return the number of stored nodes (>0) if succeeded, or -errno
+ * if there is any error.
+ * In error cases, @emsg will be updated with an error message and
+ * @epos will be updated with the error position which is the byte offset
+ * of @buf. If the error is not a parser error, @epos will be -1.
+ */
+int __init xbc_init(char *buf, const char **emsg, int *epos)
+{
+	char *p, *q;
+	int ret, c;
+
+	if (epos)
+		*epos = -1;
+
+	if (xbc_data) {
+		if (emsg)
+			*emsg = "Bootconfig is already initialized";
+		return -EBUSY;
+	}
+
+	ret = strlen(buf);
+	if (ret > XBC_DATA_MAX - 1 || ret == 0) {
+		if (emsg)
+			*emsg = ret ? "Config data is too big" :
+				"Config data is empty";
+		return -ERANGE;
+	}
+
+	xbc_nodes = memblock_alloc(sizeof(struct xbc_node) * XBC_NODE_MAX,
+				   SMP_CACHE_BYTES);
+	if (!xbc_nodes) {
+		if (emsg)
+			*emsg = "Failed to allocate bootconfig nodes";
+		return -ENOMEM;
+	}
+	memset(xbc_nodes, 0, sizeof(struct xbc_node) * XBC_NODE_MAX);
+	xbc_data = buf;
+	xbc_data_size = ret + 1;
+	last_parent = NULL;
+
+	p = buf;
+	do {
+		q = strpbrk(p, "{}=+;:\n#");
+		if (!q) {
+			p = skip_spaces(p);
+			if (*p != '\0')
+				ret = xbc_parse_error("No delimiter", p);
+			break;
+		}
+
+		c = *q;
+		*q++ = '\0';
+		switch (c) {
+		case ':':
+		case '+':
+			if (*q++ != '=') {
+				ret = xbc_parse_error(c == '+' ?
+						"Wrong '+' operator" :
+						"Wrong ':' operator",
+							q - 2);
+				break;
+			}
+			/* Fall through */
+		case '=':
+			ret = xbc_parse_kv(&p, q, c);
+			break;
+		case '{':
+			ret = xbc_open_brace(&p, q);
+			break;
+		case '#':
+			q = skip_comment(q);
+			/* fall through */
+		case ';':
+		case '\n':
+			ret = xbc_parse_key(&p, q);
+			break;
+		case '}':
+			ret = xbc_close_brace(&p, q);
+			break;
+		}
+	} while (!ret);
+
+	if (!ret)
+		ret = xbc_verify_tree();
+
+	if (ret < 0) {
+		if (epos)
+			*epos = xbc_err_pos;
+		if (emsg)
+			*emsg = xbc_err_msg;
+		xbc_destroy_all();
+	} else
+		ret = xbc_node_num;
+
+	return ret;
+}
+
+/**
+ * xbc_debug_dump() - Dump current XBC node list
+ *
+ * Dump the current XBC node list on printk buffer for debug.
+ */
+void __init xbc_debug_dump(void)
+{
+	int i;
+
+	for (i = 0; i < xbc_node_num; i++) {
+		pr_debug("[%d] %s (%s) .next=%d, .child=%d .parent=%d\n", i,
+			xbc_node_get_data(xbc_nodes + i),
+			xbc_node_is_value(xbc_nodes + i) ? "value" : "key",
+			xbc_nodes[i].next, xbc_nodes[i].child,
+			xbc_nodes[i].parent);
+	}
+}
diff --git a/lib/chacha.c b/lib/chacha.c
deleted file mode 100644
index c7c9826..0000000
--- a/lib/chacha.c
+++ /dev/null
@@ -1,113 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-or-later
-/*
- * The "hash function" used as the core of the ChaCha stream cipher (RFC7539)
- *
- * Copyright (C) 2015 Martin Willi
- */
-
-#include <linux/kernel.h>
-#include <linux/export.h>
-#include <linux/bitops.h>
-#include <linux/cryptohash.h>
-#include <asm/unaligned.h>
-#include <crypto/chacha.h>
-
-static void chacha_permute(u32 *x, int nrounds)
-{
-	int i;
-
-	/* whitelist the allowed round counts */
-	WARN_ON_ONCE(nrounds != 20 && nrounds != 12);
-
-	for (i = 0; i < nrounds; i += 2) {
-		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],  16);
-		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],  16);
-		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],  16);
-		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],  16);
-
-		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],  12);
-		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],  12);
-		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10], 12);
-		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11], 12);
-
-		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],   8);
-		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],   8);
-		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],   8);
-		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],   8);
-
-		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],   7);
-		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],   7);
-		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10],  7);
-		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11],  7);
-
-		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],  16);
-		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],  16);
-		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],  16);
-		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],  16);
-
-		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10], 12);
-		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11], 12);
-		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],  12);
-		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],  12);
-
-		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],   8);
-		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],   8);
-		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],   8);
-		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],   8);
-
-		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10],  7);
-		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11],  7);
-		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],   7);
-		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],   7);
-	}
-}
-
-/**
- * chacha_block - generate one keystream block and increment block counter
- * @state: input state matrix (16 32-bit words)
- * @stream: output keystream block (64 bytes)
- * @nrounds: number of rounds (20 or 12; 20 is recommended)
- *
- * This is the ChaCha core, a function from 64-byte strings to 64-byte strings.
- * The caller has already converted the endianness of the input.  This function
- * also handles incrementing the block counter in the input matrix.
- */
-void chacha_block(u32 *state, u8 *stream, int nrounds)
-{
-	u32 x[16];
-	int i;
-
-	memcpy(x, state, 64);
-
-	chacha_permute(x, nrounds);
-
-	for (i = 0; i < ARRAY_SIZE(x); i++)
-		put_unaligned_le32(x[i] + state[i], &stream[i * sizeof(u32)]);
-
-	state[12]++;
-}
-EXPORT_SYMBOL(chacha_block);
-
-/**
- * hchacha_block - abbreviated ChaCha core, for XChaCha
- * @in: input state matrix (16 32-bit words)
- * @out: output (8 32-bit words)
- * @nrounds: number of rounds (20 or 12; 20 is recommended)
- *
- * HChaCha is the ChaCha equivalent of HSalsa and is an intermediate step
- * towards XChaCha (see https://cr.yp.to/snuffle/xsalsa-20081128.pdf).  HChaCha
- * skips the final addition of the initial state, and outputs only certain words
- * of the state.  It should not be used for streaming directly.
- */
-void hchacha_block(const u32 *in, u32 *out, int nrounds)
-{
-	u32 x[16];
-
-	memcpy(x, in, 64);
-
-	chacha_permute(x, nrounds);
-
-	memcpy(&out[0], &x[0], 16);
-	memcpy(&out[4], &x[12], 16);
-}
-EXPORT_SYMBOL(hchacha_block);
diff --git a/lib/crypto/Kconfig b/lib/crypto/Kconfig
new file mode 100644
index 0000000..14c032d
--- /dev/null
+++ b/lib/crypto/Kconfig
@@ -0,0 +1,130 @@
+# SPDX-License-Identifier: GPL-2.0
+
+comment "Crypto library routines"
+
+config CRYPTO_LIB_AES
+	tristate
+
+config CRYPTO_LIB_ARC4
+	tristate
+
+config CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Blake2s library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_BLAKE2S_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Blake2s library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_BLAKE2S.
+
+config CRYPTO_LIB_BLAKE2S
+	tristate "BLAKE2s hash function library"
+	depends on CRYPTO_ARCH_HAVE_LIB_BLAKE2S || !CRYPTO_ARCH_HAVE_LIB_BLAKE2S
+	select CRYPTO_LIB_BLAKE2S_GENERIC if CRYPTO_ARCH_HAVE_LIB_BLAKE2S=n
+	help
+	  Enable the Blake2s library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_ARCH_HAVE_LIB_CHACHA
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the ChaCha library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_CHACHA_GENERIC
+	tristate
+	select CRYPTO_ALGAPI
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  ChaCha library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_CHACHA.
+
+config CRYPTO_LIB_CHACHA
+	tristate "ChaCha library interface"
+	depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA
+	select CRYPTO_LIB_CHACHA_GENERIC if CRYPTO_ARCH_HAVE_LIB_CHACHA=n
+	help
+	  Enable the ChaCha library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_ARCH_HAVE_LIB_CURVE25519
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Curve25519 library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_CURVE25519_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Curve25519 library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_CURVE25519.
+
+config CRYPTO_LIB_CURVE25519
+	tristate "Curve25519 scalar multiplication library"
+	depends on CRYPTO_ARCH_HAVE_LIB_CURVE25519 || !CRYPTO_ARCH_HAVE_LIB_CURVE25519
+	select CRYPTO_LIB_CURVE25519_GENERIC if CRYPTO_ARCH_HAVE_LIB_CURVE25519=n
+	help
+	  Enable the Curve25519 library interface. This interface may be
+	  fulfilled by either the generic implementation or an arch-specific
+	  one, if one is available and enabled.
+
+config CRYPTO_LIB_DES
+	tristate
+
+config CRYPTO_LIB_POLY1305_RSIZE
+	int
+	default 2 if MIPS
+	default 11 if X86_64
+	default 9 if ARM || ARM64
+	default 1
+
+config CRYPTO_ARCH_HAVE_LIB_POLY1305
+	tristate
+	help
+	  Declares whether the architecture provides an arch-specific
+	  accelerated implementation of the Poly1305 library interface,
+	  either builtin or as a module.
+
+config CRYPTO_LIB_POLY1305_GENERIC
+	tristate
+	help
+	  This symbol can be depended upon by arch implementations of the
+	  Poly1305 library interface that require the generic code as a
+	  fallback, e.g., for SIMD implementations. If no arch specific
+	  implementation is enabled, this implementation serves the users
+	  of CRYPTO_LIB_POLY1305.
+
+config CRYPTO_LIB_POLY1305
+	tristate "Poly1305 library interface"
+	depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305
+	select CRYPTO_LIB_POLY1305_GENERIC if CRYPTO_ARCH_HAVE_LIB_POLY1305=n
+	help
+	  Enable the Poly1305 library interface. This interface may be fulfilled
+	  by either the generic implementation or an arch-specific one, if one
+	  is available and enabled.
+
+config CRYPTO_LIB_CHACHA20POLY1305
+	tristate "ChaCha20-Poly1305 AEAD support (8-byte nonce library version)"
+	depends on CRYPTO_ARCH_HAVE_LIB_CHACHA || !CRYPTO_ARCH_HAVE_LIB_CHACHA
+	depends on CRYPTO_ARCH_HAVE_LIB_POLY1305 || !CRYPTO_ARCH_HAVE_LIB_POLY1305
+	select CRYPTO_LIB_CHACHA
+	select CRYPTO_LIB_POLY1305
+
+config CRYPTO_LIB_SHA256
+	tristate
diff --git a/lib/crypto/Makefile b/lib/crypto/Makefile
index cbe0b6a..3a43562 100644
--- a/lib/crypto/Makefile
+++ b/lib/crypto/Makefile
@@ -1,13 +1,45 @@
 # SPDX-License-Identifier: GPL-2.0
 
-obj-$(CONFIG_CRYPTO_LIB_AES) += libaes.o
-libaes-y := aes.o
+# chacha is used by the /dev/random driver which is always builtin
+obj-y						+= chacha.o
+obj-$(CONFIG_CRYPTO_LIB_CHACHA_GENERIC)		+= libchacha.o
 
-obj-$(CONFIG_CRYPTO_LIB_ARC4) += libarc4.o
-libarc4-y := arc4.o
+obj-$(CONFIG_CRYPTO_LIB_AES)			+= libaes.o
+libaes-y					:= aes.o
 
-obj-$(CONFIG_CRYPTO_LIB_DES) += libdes.o
-libdes-y := des.o
+obj-$(CONFIG_CRYPTO_LIB_ARC4)			+= libarc4.o
+libarc4-y					:= arc4.o
 
-obj-$(CONFIG_CRYPTO_LIB_SHA256) += libsha256.o
-libsha256-y := sha256.o
+obj-$(CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC)	+= libblake2s-generic.o
+libblake2s-generic-y				+= blake2s-generic.o
+
+obj-$(CONFIG_CRYPTO_LIB_BLAKE2S)		+= libblake2s.o
+libblake2s-y					+= blake2s.o
+
+obj-$(CONFIG_CRYPTO_LIB_CHACHA20POLY1305)	+= libchacha20poly1305.o
+libchacha20poly1305-y				+= chacha20poly1305.o
+
+obj-$(CONFIG_CRYPTO_LIB_CURVE25519_GENERIC)	+= libcurve25519-generic.o
+libcurve25519-generic-y				:= curve25519-fiat32.o
+libcurve25519-generic-$(CONFIG_ARCH_SUPPORTS_INT128)	:= curve25519-hacl64.o
+libcurve25519-generic-y				+= curve25519-generic.o
+
+obj-$(CONFIG_CRYPTO_LIB_CURVE25519)		+= libcurve25519.o
+libcurve25519-y					+= curve25519.o
+
+obj-$(CONFIG_CRYPTO_LIB_DES)			+= libdes.o
+libdes-y					:= des.o
+
+obj-$(CONFIG_CRYPTO_LIB_POLY1305_GENERIC)	+= libpoly1305.o
+libpoly1305-y					:= poly1305-donna32.o
+libpoly1305-$(CONFIG_ARCH_SUPPORTS_INT128)	:= poly1305-donna64.o
+libpoly1305-y					+= poly1305.o
+
+obj-$(CONFIG_CRYPTO_LIB_SHA256)			+= libsha256.o
+libsha256-y					:= sha256.o
+
+ifneq ($(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS),y)
+libblake2s-y					+= blake2s-selftest.o
+libchacha20poly1305-y				+= chacha20poly1305-selftest.o
+libcurve25519-y					+= curve25519-selftest.o
+endif
diff --git a/lib/crypto/blake2s-generic.c b/lib/crypto/blake2s-generic.c
new file mode 100644
index 0000000..04ff8df
--- /dev/null
+++ b/lib/crypto/blake2s-generic.c
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the BLAKE2s hash and PRF functions.
+ *
+ * Information: https://blake2.net/
+ *
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/bug.h>
+#include <asm/unaligned.h>
+
+static const u8 blake2s_sigma[10][16] = {
+	{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
+	{ 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3 },
+	{ 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4 },
+	{ 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8 },
+	{ 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13 },
+	{ 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9 },
+	{ 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11 },
+	{ 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10 },
+	{ 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5 },
+	{ 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0 },
+};
+
+static inline void blake2s_increment_counter(struct blake2s_state *state,
+					     const u32 inc)
+{
+	state->t[0] += inc;
+	state->t[1] += (state->t[0] < inc);
+}
+
+void blake2s_compress_generic(struct blake2s_state *state,const u8 *block,
+			      size_t nblocks, const u32 inc)
+{
+	u32 m[16];
+	u32 v[16];
+	int i;
+
+	WARN_ON(IS_ENABLED(DEBUG) &&
+		(nblocks > 1 && inc != BLAKE2S_BLOCK_SIZE));
+
+	while (nblocks > 0) {
+		blake2s_increment_counter(state, inc);
+		memcpy(m, block, BLAKE2S_BLOCK_SIZE);
+		le32_to_cpu_array(m, ARRAY_SIZE(m));
+		memcpy(v, state->h, 32);
+		v[ 8] = BLAKE2S_IV0;
+		v[ 9] = BLAKE2S_IV1;
+		v[10] = BLAKE2S_IV2;
+		v[11] = BLAKE2S_IV3;
+		v[12] = BLAKE2S_IV4 ^ state->t[0];
+		v[13] = BLAKE2S_IV5 ^ state->t[1];
+		v[14] = BLAKE2S_IV6 ^ state->f[0];
+		v[15] = BLAKE2S_IV7 ^ state->f[1];
+
+#define G(r, i, a, b, c, d) do { \
+	a += b + m[blake2s_sigma[r][2 * i + 0]]; \
+	d = ror32(d ^ a, 16); \
+	c += d; \
+	b = ror32(b ^ c, 12); \
+	a += b + m[blake2s_sigma[r][2 * i + 1]]; \
+	d = ror32(d ^ a, 8); \
+	c += d; \
+	b = ror32(b ^ c, 7); \
+} while (0)
+
+#define ROUND(r) do { \
+	G(r, 0, v[0], v[ 4], v[ 8], v[12]); \
+	G(r, 1, v[1], v[ 5], v[ 9], v[13]); \
+	G(r, 2, v[2], v[ 6], v[10], v[14]); \
+	G(r, 3, v[3], v[ 7], v[11], v[15]); \
+	G(r, 4, v[0], v[ 5], v[10], v[15]); \
+	G(r, 5, v[1], v[ 6], v[11], v[12]); \
+	G(r, 6, v[2], v[ 7], v[ 8], v[13]); \
+	G(r, 7, v[3], v[ 4], v[ 9], v[14]); \
+} while (0)
+		ROUND(0);
+		ROUND(1);
+		ROUND(2);
+		ROUND(3);
+		ROUND(4);
+		ROUND(5);
+		ROUND(6);
+		ROUND(7);
+		ROUND(8);
+		ROUND(9);
+
+#undef G
+#undef ROUND
+
+		for (i = 0; i < 8; ++i)
+			state->h[i] ^= v[i] ^ v[i + 8];
+
+		block += BLAKE2S_BLOCK_SIZE;
+		--nblocks;
+	}
+}
+
+EXPORT_SYMBOL(blake2s_compress_generic);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("BLAKE2s hash function");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/blake2s-selftest.c b/lib/crypto/blake2s-selftest.c
new file mode 100644
index 0000000..5d9ea53
--- /dev/null
+++ b/lib/crypto/blake2s-selftest.c
@@ -0,0 +1,622 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/string.h>
+
+/*
+ * blake2s_testvecs[] generated with the program below (using libb2-dev and
+ * libssl-dev [OpenSSL])
+ *
+ * #include <blake2.h>
+ * #include <stdint.h>
+ * #include <stdio.h>
+ *
+ * #include <openssl/evp.h>
+ * #include <openssl/hmac.h>
+ *
+ * #define BLAKE2S_TESTVEC_COUNT	256
+ *
+ * static void print_vec(const uint8_t vec[], int len)
+ * {
+ *	int i;
+ *
+ *	printf("  { ");
+ *	for (i = 0; i < len; i++) {
+ *		if (i && (i % 12) == 0)
+ *			printf("\n    ");
+ *		printf("0x%02x, ", vec[i]);
+ *	}
+ *	printf("},\n");
+ * }
+ *
+ * int main(void)
+ * {
+ *	uint8_t key[BLAKE2S_KEYBYTES];
+ *	uint8_t buf[BLAKE2S_TESTVEC_COUNT];
+ *	uint8_t hash[BLAKE2S_OUTBYTES];
+ *	int i, j;
+ *
+ *	key[0] = key[1] = 1;
+ *	for (i = 2; i < BLAKE2S_KEYBYTES; ++i)
+ *		key[i] = key[i - 2] + key[i - 1];
+ *
+ *	for (i = 0; i < BLAKE2S_TESTVEC_COUNT; ++i)
+ *		buf[i] = (uint8_t)i;
+ *
+ *	printf("static const u8 blake2s_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {\n");
+ *
+ *	for (i = 0; i < BLAKE2S_TESTVEC_COUNT; ++i) {
+ *		int outlen = 1 + i % BLAKE2S_OUTBYTES;
+ *		int keylen = (13 * i) % (BLAKE2S_KEYBYTES + 1);
+ *
+ *		blake2s(hash, buf, key + BLAKE2S_KEYBYTES - keylen, outlen, i,
+ *			keylen);
+ *		print_vec(hash, outlen);
+ *	}
+ *	printf("};\n\n");
+ *
+ *	printf("static const u8 blake2s_hmac_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {\n");
+ *
+ *	HMAC(EVP_blake2s256(), key, sizeof(key), buf, sizeof(buf), hash, NULL);
+ *	print_vec(hash, BLAKE2S_OUTBYTES);
+ *
+ *	HMAC(EVP_blake2s256(), buf, sizeof(buf), key, sizeof(key), hash, NULL);
+ *	print_vec(hash, BLAKE2S_OUTBYTES);
+ *
+ *	printf("};\n");
+ *
+ *	return 0;
+ *}
+ */
+static const u8 blake2s_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {
+  { 0xa1, },
+  { 0x7c, 0x89, },
+  { 0x74, 0x0e, 0xd4, },
+  { 0x47, 0x0c, 0x21, 0x15, },
+  { 0x18, 0xd6, 0x9c, 0xa6, 0xc4, },
+  { 0x13, 0x5d, 0x16, 0x63, 0x2e, 0xf9, },
+  { 0x2c, 0xb5, 0x04, 0xb7, 0x99, 0xe2, 0x73, },
+  { 0x9a, 0x0f, 0xd2, 0x39, 0xd6, 0x68, 0x1b, 0x92, },
+  { 0xc8, 0xde, 0x7a, 0xea, 0x2f, 0xf4, 0xd2, 0xe3, 0x2b, },
+  { 0x5b, 0xf9, 0x43, 0x52, 0x0c, 0x12, 0xba, 0xb5, 0x93, 0x9f, },
+  { 0xc6, 0x2c, 0x4e, 0x80, 0xfc, 0x32, 0x5b, 0x33, 0xb8, 0xb8, 0x0a, },
+  { 0xa7, 0x5c, 0xfd, 0x3a, 0xcc, 0xbf, 0x90, 0xca, 0xb7, 0x97, 0xde, 0xd8, },
+  { 0x66, 0xca, 0x3c, 0xc4, 0x19, 0xef, 0x92, 0x66, 0x3f, 0x21, 0x8f, 0xda,
+    0xb7, },
+  { 0xba, 0xe5, 0xbb, 0x30, 0x25, 0x94, 0x6d, 0xc3, 0x89, 0x09, 0xc4, 0x25,
+    0x52, 0x3e, },
+  { 0xa2, 0xef, 0x0e, 0x52, 0x0b, 0x5f, 0xa2, 0x01, 0x6d, 0x0a, 0x25, 0xbc,
+    0x57, 0xe2, 0x27, },
+  { 0x4f, 0xe0, 0xf9, 0x52, 0x12, 0xda, 0x84, 0xb7, 0xab, 0xae, 0xb0, 0xa6,
+    0x47, 0x2a, 0xc7, 0xf5, },
+  { 0x56, 0xe7, 0xa8, 0x1c, 0x4c, 0xca, 0xed, 0x90, 0x31, 0xec, 0x87, 0x43,
+    0xe7, 0x72, 0x08, 0xec, 0xbe, },
+  { 0x7e, 0xdf, 0x80, 0x1c, 0x93, 0x33, 0xfd, 0x53, 0x44, 0xba, 0xfd, 0x96,
+    0xe1, 0xbb, 0xb5, 0x65, 0xa5, 0x00, },
+  { 0xec, 0x6b, 0xed, 0xf7, 0x7b, 0x62, 0x1d, 0x7d, 0xf4, 0x82, 0xf3, 0x1e,
+    0x18, 0xff, 0x2b, 0xc4, 0x06, 0x20, 0x2a, },
+  { 0x74, 0x98, 0xd7, 0x68, 0x63, 0xed, 0x87, 0xe4, 0x5d, 0x8d, 0x9e, 0x1d,
+    0xfd, 0x2a, 0xbb, 0x86, 0xac, 0xe9, 0x2a, 0x89, },
+  { 0x89, 0xc3, 0x88, 0xce, 0x2b, 0x33, 0x1e, 0x10, 0xd1, 0x37, 0x20, 0x86,
+    0x28, 0x43, 0x70, 0xd9, 0xfb, 0x96, 0xd9, 0xb5, 0xd3, },
+  { 0xcb, 0x56, 0x74, 0x41, 0x8d, 0x80, 0x01, 0x9a, 0x6b, 0x38, 0xe1, 0x41,
+    0xad, 0x9c, 0x62, 0x74, 0xce, 0x35, 0xd5, 0x6c, 0x89, 0x6e, },
+  { 0x79, 0xaf, 0x94, 0x59, 0x99, 0x26, 0xe1, 0xc9, 0x34, 0xfe, 0x7c, 0x22,
+    0xf7, 0x43, 0xd7, 0x65, 0xd4, 0x48, 0x18, 0xac, 0x3d, 0xfd, 0x93, },
+  { 0x85, 0x0d, 0xff, 0xb8, 0x3e, 0x87, 0x41, 0xb0, 0x95, 0xd3, 0x3d, 0x00,
+    0x47, 0x55, 0x9e, 0xd2, 0x69, 0xea, 0xbf, 0xe9, 0x7a, 0x2d, 0x61, 0x45, },
+  { 0x03, 0xe0, 0x85, 0xec, 0x54, 0xb5, 0x16, 0x53, 0xa8, 0xc4, 0x71, 0xe9,
+    0x6a, 0xe7, 0xcb, 0xc4, 0x15, 0x02, 0xfc, 0x34, 0xa4, 0xa4, 0x28, 0x13,
+    0xd1, },
+  { 0xe3, 0x34, 0x4b, 0xe1, 0xd0, 0x4b, 0x55, 0x61, 0x8f, 0xc0, 0x24, 0x05,
+    0xe6, 0xe0, 0x3d, 0x70, 0x24, 0x4d, 0xda, 0xb8, 0x91, 0x05, 0x29, 0x07,
+    0x01, 0x3e, },
+  { 0x61, 0xff, 0x01, 0x72, 0xb1, 0x4d, 0xf6, 0xfe, 0xd1, 0xd1, 0x08, 0x74,
+    0xe6, 0x91, 0x44, 0xeb, 0x61, 0xda, 0x40, 0xaf, 0xfc, 0x8c, 0x91, 0x6b,
+    0xec, 0x13, 0xed, },
+  { 0xd4, 0x40, 0xd2, 0xa0, 0x7f, 0xc1, 0x58, 0x0c, 0x85, 0xa0, 0x86, 0xc7,
+    0x86, 0xb9, 0x61, 0xc9, 0xea, 0x19, 0x86, 0x1f, 0xab, 0x07, 0xce, 0x37,
+    0x72, 0x67, 0x09, 0xfc, },
+  { 0x9e, 0xf8, 0x18, 0x67, 0x93, 0x10, 0x9b, 0x39, 0x75, 0xe8, 0x8b, 0x38,
+    0x82, 0x7d, 0xb8, 0xb7, 0xa5, 0xaf, 0xe6, 0x6a, 0x22, 0x5e, 0x1f, 0x9c,
+    0x95, 0x29, 0x19, 0xf2, 0x4b, },
+  { 0xc8, 0x62, 0x25, 0xf5, 0x98, 0xc9, 0xea, 0xe5, 0x29, 0x3a, 0xd3, 0x22,
+    0xeb, 0xeb, 0x07, 0x7c, 0x15, 0x07, 0xee, 0x15, 0x61, 0xbb, 0x05, 0x30,
+    0x99, 0x7f, 0x11, 0xf6, 0x0a, 0x1d, },
+  { 0x68, 0x70, 0xf7, 0x90, 0xa1, 0x8b, 0x1f, 0x0f, 0xbb, 0xce, 0xd2, 0x0e,
+    0x33, 0x1f, 0x7f, 0xa9, 0x78, 0xa8, 0xa6, 0x81, 0x66, 0xab, 0x8d, 0xcd,
+    0x58, 0x55, 0x3a, 0x0b, 0x7a, 0xdb, 0xb5, },
+  { 0xdd, 0x35, 0xd2, 0xb4, 0xf6, 0xc7, 0xea, 0xab, 0x64, 0x24, 0x4e, 0xfe,
+    0xe5, 0x3d, 0x4e, 0x95, 0x8b, 0x6d, 0x6c, 0xbc, 0xb0, 0xf8, 0x88, 0x61,
+    0x09, 0xb7, 0x78, 0xa3, 0x31, 0xfe, 0xd9, 0x2f, },
+  { 0x0a, },
+  { 0x6e, 0xd4, },
+  { 0x64, 0xe9, 0xd1, },
+  { 0x30, 0xdd, 0x71, 0xef, },
+  { 0x11, 0xb5, 0x0c, 0x87, 0xc9, },
+  { 0x06, 0x1c, 0x6d, 0x04, 0x82, 0xd0, },
+  { 0x5c, 0x42, 0x0b, 0xee, 0xc5, 0x9c, 0xb2, },
+  { 0xe8, 0x29, 0xd6, 0xb4, 0x5d, 0xf7, 0x2b, 0x93, },
+  { 0x18, 0xca, 0x27, 0x72, 0x43, 0x39, 0x16, 0xbc, 0x6a, },
+  { 0x39, 0x8f, 0xfd, 0x64, 0xf5, 0x57, 0x23, 0xb0, 0x45, 0xf8, },
+  { 0xbb, 0x3a, 0x78, 0x6b, 0x02, 0x1d, 0x0b, 0x16, 0xe3, 0xb2, 0x9a, },
+  { 0xb8, 0xb4, 0x0b, 0xe5, 0xd4, 0x1d, 0x0d, 0x85, 0x49, 0x91, 0x35, 0xfa, },
+  { 0x6d, 0x48, 0x2a, 0x0c, 0x42, 0x08, 0xbd, 0xa9, 0x78, 0x6f, 0x18, 0xaf,
+    0xe2, },
+  { 0x10, 0x45, 0xd4, 0x58, 0x88, 0xec, 0x4e, 0x1e, 0xf6, 0x14, 0x92, 0x64,
+    0x7e, 0xb0, },
+  { 0x8b, 0x0b, 0x95, 0xee, 0x92, 0xc6, 0x3b, 0x91, 0xf1, 0x1e, 0xeb, 0x51,
+    0x98, 0x0a, 0x8d, },
+  { 0xa3, 0x50, 0x4d, 0xa5, 0x1d, 0x03, 0x68, 0xe9, 0x57, 0x78, 0xd6, 0x04,
+    0xf1, 0xc3, 0x94, 0xd8, },
+  { 0xb8, 0x66, 0x6e, 0xdd, 0x46, 0x15, 0xae, 0x3d, 0x83, 0x7e, 0xcf, 0xe7,
+    0x2c, 0xe8, 0x8f, 0xc7, 0x34, },
+  { 0x2e, 0xc0, 0x1f, 0x29, 0xea, 0xf6, 0xb9, 0xe2, 0xc2, 0x93, 0xeb, 0x41,
+    0x0d, 0xf0, 0x0a, 0x13, 0x0e, 0xa2, },
+  { 0x71, 0xb8, 0x33, 0xa9, 0x1b, 0xac, 0xf1, 0xb5, 0x42, 0x8f, 0x5e, 0x81,
+    0x34, 0x43, 0xb7, 0xa4, 0x18, 0x5c, 0x47, },
+  { 0xda, 0x45, 0xb8, 0x2e, 0x82, 0x1e, 0xc0, 0x59, 0x77, 0x9d, 0xfa, 0xb4,
+    0x1c, 0x5e, 0xa0, 0x2b, 0x33, 0x96, 0x5a, 0x58, },
+  { 0xe3, 0x09, 0x05, 0xa9, 0xeb, 0x48, 0x13, 0xad, 0x71, 0x88, 0x81, 0x9a,
+    0x3e, 0x2c, 0xe1, 0x23, 0x99, 0x13, 0x35, 0x9f, 0xb5, },
+  { 0xb7, 0x86, 0x2d, 0x16, 0xe1, 0x04, 0x00, 0x47, 0x47, 0x61, 0x31, 0xfb,
+    0x14, 0xac, 0xd8, 0xe9, 0xe3, 0x49, 0xbd, 0xf7, 0x9c, 0x3f, },
+  { 0x7f, 0xd9, 0x95, 0xa8, 0xa7, 0xa0, 0xcc, 0xba, 0xef, 0xb1, 0x0a, 0xa9,
+    0x21, 0x62, 0x08, 0x0f, 0x1b, 0xff, 0x7b, 0x9d, 0xae, 0xb2, 0x95, },
+  { 0x85, 0x99, 0xea, 0x33, 0xe0, 0x56, 0xff, 0x13, 0xc6, 0x61, 0x8c, 0xf9,
+    0x57, 0x05, 0x03, 0x11, 0xf9, 0xfb, 0x3a, 0xf7, 0xce, 0xbb, 0x52, 0x30, },
+  { 0xb2, 0x72, 0x9c, 0xf8, 0x77, 0x4e, 0x8f, 0x6b, 0x01, 0x6c, 0xff, 0x4e,
+    0x4f, 0x02, 0xd2, 0xbc, 0xeb, 0x51, 0x28, 0x99, 0x50, 0xab, 0xc4, 0x42,
+    0xe3, },
+  { 0x8b, 0x0a, 0xb5, 0x90, 0x8f, 0xf5, 0x7b, 0xdd, 0xba, 0x47, 0x37, 0xc9,
+    0x2a, 0xd5, 0x4b, 0x25, 0x08, 0x8b, 0x02, 0x17, 0xa7, 0x9e, 0x6b, 0x6e,
+    0xe3, 0x90, },
+  { 0x90, 0xdd, 0xf7, 0x75, 0xa7, 0xa3, 0x99, 0x5e, 0x5b, 0x7d, 0x75, 0xc3,
+    0x39, 0x6b, 0xa0, 0xe2, 0x44, 0x53, 0xb1, 0x9e, 0xc8, 0xf1, 0x77, 0x10,
+    0x58, 0x06, 0x9a, },
+  { 0x99, 0x52, 0xf0, 0x49, 0xa8, 0x8c, 0xec, 0xa6, 0x97, 0x32, 0x13, 0xb5,
+    0xf7, 0xa3, 0x8e, 0xfb, 0x4b, 0x59, 0x31, 0x3d, 0x01, 0x59, 0x98, 0x5d,
+    0x53, 0x03, 0x1a, 0x39, },
+  { 0x9f, 0xe0, 0xc2, 0xe5, 0x5d, 0x93, 0xd6, 0x9b, 0x47, 0x8f, 0x9b, 0xe0,
+    0x26, 0x35, 0x84, 0x20, 0x1d, 0xc5, 0x53, 0x10, 0x0f, 0x22, 0xb9, 0xb5,
+    0xd4, 0x36, 0xb1, 0xac, 0x73, },
+  { 0x30, 0x32, 0x20, 0x3b, 0x10, 0x28, 0xec, 0x1f, 0x4f, 0x9b, 0x47, 0x59,
+    0xeb, 0x7b, 0xee, 0x45, 0xfb, 0x0c, 0x49, 0xd8, 0x3d, 0x69, 0xbd, 0x90,
+    0x2c, 0xf0, 0x9e, 0x8d, 0xbf, 0xd5, },
+  { 0x2a, 0x37, 0x73, 0x7f, 0xf9, 0x96, 0x19, 0xaa, 0x25, 0xd8, 0x13, 0x28,
+    0x01, 0x29, 0x89, 0xdf, 0x6e, 0x0c, 0x9b, 0x43, 0x44, 0x51, 0xe9, 0x75,
+    0x26, 0x0c, 0xb7, 0x87, 0x66, 0x0b, 0x5f, },
+  { 0x23, 0xdf, 0x96, 0x68, 0x91, 0x86, 0xd0, 0x93, 0x55, 0x33, 0x24, 0xf6,
+    0xba, 0x08, 0x75, 0x5b, 0x59, 0x11, 0x69, 0xb8, 0xb9, 0xe5, 0x2c, 0x77,
+    0x02, 0xf6, 0x47, 0xee, 0x81, 0xdd, 0xb9, 0x06, },
+  { 0x9d, },
+  { 0x9d, 0x7d, },
+  { 0xfd, 0xc3, 0xda, },
+  { 0xe8, 0x82, 0xcd, 0x21, },
+  { 0xc3, 0x1d, 0x42, 0x4c, 0x74, },
+  { 0xe9, 0xda, 0xf1, 0xa2, 0xe5, 0x7c, },
+  { 0x52, 0xb8, 0x6f, 0x81, 0x5c, 0x3a, 0x4c, },
+  { 0x5b, 0x39, 0x26, 0xfc, 0x92, 0x5e, 0xe0, 0x49, },
+  { 0x59, 0xe4, 0x7c, 0x93, 0x1c, 0xf9, 0x28, 0x93, 0xde, },
+  { 0xde, 0xdf, 0xb2, 0x43, 0x61, 0x0b, 0x86, 0x16, 0x4c, 0x2e, },
+  { 0x14, 0x8f, 0x75, 0x51, 0xaf, 0xb9, 0xee, 0x51, 0x5a, 0xae, 0x23, },
+  { 0x43, 0x5f, 0x50, 0xd5, 0x70, 0xb0, 0x5b, 0x87, 0xf5, 0xd9, 0xb3, 0x6d, },
+  { 0x66, 0x0a, 0x64, 0x93, 0x79, 0x71, 0x94, 0x40, 0xb7, 0x68, 0x2d, 0xd3,
+    0x63, },
+  { 0x15, 0x00, 0xc4, 0x0c, 0x7d, 0x1b, 0x10, 0xa9, 0x73, 0x1b, 0x90, 0x6f,
+    0xe6, 0xa9, },
+  { 0x34, 0x75, 0xf3, 0x86, 0x8f, 0x56, 0xcf, 0x2a, 0x0a, 0xf2, 0x62, 0x0a,
+    0xf6, 0x0e, 0x20, },
+  { 0xb1, 0xde, 0xc9, 0xf5, 0xdb, 0xf3, 0x2f, 0x4c, 0xd6, 0x41, 0x7d, 0x39,
+    0x18, 0x3e, 0xc7, 0xc3, },
+  { 0xc5, 0x89, 0xb2, 0xf8, 0xb8, 0xc0, 0xa3, 0xb9, 0x3b, 0x10, 0x6d, 0x7c,
+    0x92, 0xfc, 0x7f, 0x34, 0x41, },
+  { 0xc4, 0xd8, 0xef, 0xba, 0xef, 0xd2, 0xaa, 0xc5, 0x6c, 0x8e, 0x3e, 0xbb,
+    0x12, 0xfc, 0x0f, 0x72, 0xbf, 0x0f, },
+  { 0xdd, 0x91, 0xd1, 0x15, 0x9e, 0x7d, 0xf8, 0xc1, 0xb9, 0x14, 0x63, 0x96,
+    0xb5, 0xcb, 0x83, 0x1d, 0x35, 0x1c, 0xec, },
+  { 0xa9, 0xf8, 0x52, 0xc9, 0x67, 0x76, 0x2b, 0xad, 0xfb, 0xd8, 0x3a, 0xa6,
+    0x74, 0x02, 0xae, 0xb8, 0x25, 0x2c, 0x63, 0x49, },
+  { 0x77, 0x1f, 0x66, 0x70, 0xfd, 0x50, 0x29, 0xaa, 0xeb, 0xdc, 0xee, 0xba,
+    0x75, 0x98, 0xdc, 0x93, 0x12, 0x3f, 0xdc, 0x7c, 0x38, },
+  { 0xe2, 0xe1, 0x89, 0x5c, 0x37, 0x38, 0x6a, 0xa3, 0x40, 0xac, 0x3f, 0xb0,
+    0xca, 0xfc, 0xa7, 0xf3, 0xea, 0xf9, 0x0f, 0x5d, 0x8e, 0x39, },
+  { 0x0f, 0x67, 0xc8, 0x38, 0x01, 0xb1, 0xb7, 0xb8, 0xa2, 0xe7, 0x0a, 0x6d,
+    0xd2, 0x63, 0x69, 0x9e, 0xcc, 0xf0, 0xf2, 0xbe, 0x9b, 0x98, 0xdd, },
+  { 0x13, 0xe1, 0x36, 0x30, 0xfe, 0xc6, 0x01, 0x8a, 0xa1, 0x63, 0x96, 0x59,
+    0xc2, 0xa9, 0x68, 0x3f, 0x58, 0xd4, 0x19, 0x0c, 0x40, 0xf3, 0xde, 0x02, },
+  { 0xa3, 0x9e, 0xce, 0xda, 0x42, 0xee, 0x8c, 0x6c, 0x5a, 0x7d, 0xdc, 0x89,
+    0x02, 0x77, 0xdd, 0xe7, 0x95, 0xbb, 0xff, 0x0d, 0xa4, 0xb5, 0x38, 0x1e,
+    0xaf, },
+  { 0x9a, 0xf6, 0xb5, 0x9a, 0x4f, 0xa9, 0x4f, 0x2c, 0x35, 0x3c, 0x24, 0xdc,
+    0x97, 0x6f, 0xd9, 0xa1, 0x7d, 0x1a, 0x85, 0x0b, 0xf5, 0xda, 0x2e, 0xe7,
+    0xb1, 0x1d, },
+  { 0x84, 0x1e, 0x8e, 0x3d, 0x45, 0xa5, 0xf2, 0x27, 0xf3, 0x31, 0xfe, 0xb9,
+    0xfb, 0xc5, 0x45, 0x99, 0x99, 0xdd, 0x93, 0x43, 0x02, 0xee, 0x58, 0xaf,
+    0xee, 0x6a, 0xbe, },
+  { 0x07, 0x2f, 0xc0, 0xa2, 0x04, 0xc4, 0xab, 0x7c, 0x26, 0xbb, 0xa8, 0xd8,
+    0xe3, 0x1c, 0x75, 0x15, 0x64, 0x5d, 0x02, 0x6a, 0xf0, 0x86, 0xe9, 0xcd,
+    0x5c, 0xef, 0xa3, 0x25, },
+  { 0x2f, 0x3b, 0x1f, 0xb5, 0x91, 0x8f, 0x86, 0xe0, 0xdc, 0x31, 0x48, 0xb6,
+    0xa1, 0x8c, 0xfd, 0x75, 0xbb, 0x7d, 0x3d, 0xc1, 0xf0, 0x10, 0x9a, 0xd8,
+    0x4b, 0x0e, 0xe3, 0x94, 0x9f, },
+  { 0x29, 0xbb, 0x8f, 0x6c, 0xd1, 0xf2, 0xb6, 0xaf, 0xe5, 0xe3, 0x2d, 0xdc,
+    0x6f, 0xa4, 0x53, 0x88, 0xd8, 0xcf, 0x4d, 0x45, 0x42, 0x62, 0xdb, 0xdf,
+    0xf8, 0x45, 0xc2, 0x13, 0xec, 0x35, },
+  { 0x06, 0x3c, 0xe3, 0x2c, 0x15, 0xc6, 0x43, 0x03, 0x81, 0xfb, 0x08, 0x76,
+    0x33, 0xcb, 0x02, 0xc1, 0xba, 0x33, 0xe5, 0xe0, 0xd1, 0x92, 0xa8, 0x46,
+    0x28, 0x3f, 0x3e, 0x9d, 0x2c, 0x44, 0x54, },
+  { 0xea, 0xbb, 0x96, 0xf8, 0xd1, 0x8b, 0x04, 0x11, 0x40, 0x78, 0x42, 0x02,
+    0x19, 0xd1, 0xbc, 0x65, 0x92, 0xd3, 0xc3, 0xd6, 0xd9, 0x19, 0xe7, 0xc3,
+    0x40, 0x97, 0xbd, 0xd4, 0xed, 0xfa, 0x5e, 0x28, },
+  { 0x02, },
+  { 0x52, 0xa8, },
+  { 0x38, 0x25, 0x0d, },
+  { 0xe3, 0x04, 0xd4, 0x92, },
+  { 0x97, 0xdb, 0xf7, 0x81, 0xca, },
+  { 0x8a, 0x56, 0x9d, 0x62, 0x56, 0xcc, },
+  { 0xa1, 0x8e, 0x3c, 0x72, 0x8f, 0x63, 0x03, },
+  { 0xf7, 0xf3, 0x39, 0x09, 0x0a, 0xa1, 0xbb, 0x23, },
+  { 0x6b, 0x03, 0xc0, 0xe9, 0xd9, 0x83, 0x05, 0x22, 0x01, },
+  { 0x1b, 0x4b, 0xf5, 0xd6, 0x4f, 0x05, 0x75, 0x91, 0x4c, 0x7f, },
+  { 0x4c, 0x8c, 0x25, 0x20, 0x21, 0xcb, 0xc2, 0x4b, 0x3a, 0x5b, 0x8d, },
+  { 0x56, 0xe2, 0x77, 0xa0, 0xb6, 0x9f, 0x81, 0xec, 0x83, 0x75, 0xc4, 0xf9, },
+  { 0x71, 0x70, 0x0f, 0xad, 0x4d, 0x35, 0x81, 0x9d, 0x88, 0x69, 0xf9, 0xaa,
+    0xd3, },
+  { 0x50, 0x6e, 0x86, 0x6e, 0x43, 0xc0, 0xc2, 0x44, 0xc2, 0xe2, 0xa0, 0x1c,
+    0xb7, 0x9a, },
+  { 0xe4, 0x7e, 0x72, 0xc6, 0x12, 0x8e, 0x7c, 0xfc, 0xbd, 0xe2, 0x08, 0x31,
+    0x3d, 0x47, 0x3d, },
+  { 0x08, 0x97, 0x5b, 0x80, 0xae, 0xc4, 0x1d, 0x50, 0x77, 0xdf, 0x1f, 0xd0,
+    0x24, 0xf0, 0x17, 0xc0, },
+  { 0x01, 0xb6, 0x29, 0xf4, 0xaf, 0x78, 0x5f, 0xb6, 0x91, 0xdd, 0x76, 0x76,
+    0xd2, 0xfd, 0x0c, 0x47, 0x40, },
+  { 0xa1, 0xd8, 0x09, 0x97, 0x7a, 0xa6, 0xc8, 0x94, 0xf6, 0x91, 0x7b, 0xae,
+    0x2b, 0x9f, 0x0d, 0x83, 0x48, 0xf7, },
+  { 0x12, 0xd5, 0x53, 0x7d, 0x9a, 0xb0, 0xbe, 0xd9, 0xed, 0xe9, 0x9e, 0xee,
+    0x61, 0x5b, 0x42, 0xf2, 0xc0, 0x73, 0xc0, },
+  { 0xd5, 0x77, 0xd6, 0x5c, 0x6e, 0xa5, 0x69, 0x2b, 0x3b, 0x8c, 0xd6, 0x7d,
+    0x1d, 0xbe, 0x2c, 0xa1, 0x02, 0x21, 0xcd, 0x29, },
+  { 0xa4, 0x98, 0x80, 0xca, 0x22, 0xcf, 0x6a, 0xab, 0x5e, 0x40, 0x0d, 0x61,
+    0x08, 0x21, 0xef, 0xc0, 0x6c, 0x52, 0xb4, 0xb0, 0x53, },
+  { 0xbf, 0xaf, 0x8f, 0x3b, 0x7a, 0x97, 0x33, 0xe5, 0xca, 0x07, 0x37, 0xfd,
+    0x15, 0xdf, 0xce, 0x26, 0x2a, 0xb1, 0xa7, 0x0b, 0xb3, 0xac, },
+  { 0x16, 0x22, 0xe1, 0xbc, 0x99, 0x4e, 0x01, 0xf0, 0xfa, 0xff, 0x8f, 0xa5,
+    0x0c, 0x61, 0xb0, 0xad, 0xcc, 0xb1, 0xe1, 0x21, 0x46, 0xfa, 0x2e, },
+  { 0x11, 0x5b, 0x0b, 0x2b, 0xe6, 0x14, 0xc1, 0xd5, 0x4d, 0x71, 0x5e, 0x17,
+    0xea, 0x23, 0xdd, 0x6c, 0xbd, 0x1d, 0xbe, 0x12, 0x1b, 0xee, 0x4c, 0x1a, },
+  { 0x40, 0x88, 0x22, 0xf3, 0x20, 0x6c, 0xed, 0xe1, 0x36, 0x34, 0x62, 0x2c,
+    0x98, 0x83, 0x52, 0xe2, 0x25, 0xee, 0xe9, 0xf5, 0xe1, 0x17, 0xf0, 0x5c,
+    0xae, },
+  { 0xc3, 0x76, 0x37, 0xde, 0x95, 0x8c, 0xca, 0x2b, 0x0c, 0x23, 0xe7, 0xb5,
+    0x38, 0x70, 0x61, 0xcc, 0xff, 0xd3, 0x95, 0x7b, 0xf3, 0xff, 0x1f, 0x9d,
+    0x59, 0x00, },
+  { 0x0c, 0x19, 0x52, 0x05, 0x22, 0x53, 0xcb, 0x48, 0xd7, 0x10, 0x0e, 0x7e,
+    0x14, 0x69, 0xb5, 0xa2, 0x92, 0x43, 0xa3, 0x9e, 0x4b, 0x8f, 0x51, 0x2c,
+    0x5a, 0x2c, 0x3b, },
+  { 0xe1, 0x9d, 0x70, 0x70, 0x28, 0xec, 0x86, 0x40, 0x55, 0x33, 0x56, 0xda,
+    0x88, 0xca, 0xee, 0xc8, 0x6a, 0x20, 0xb1, 0xe5, 0x3d, 0x57, 0xf8, 0x3c,
+    0x10, 0x07, 0x2a, 0xc4, },
+  { 0x0b, 0xae, 0xf1, 0xc4, 0x79, 0xee, 0x1b, 0x3d, 0x27, 0x35, 0x8d, 0x14,
+    0xd6, 0xae, 0x4e, 0x3c, 0xe9, 0x53, 0x50, 0xb5, 0xcc, 0x0c, 0xf7, 0xdf,
+    0xee, 0xa1, 0x74, 0xd6, 0x71, },
+  { 0xe6, 0xa4, 0xf4, 0x99, 0x98, 0xb9, 0x80, 0xea, 0x96, 0x7f, 0x4f, 0x33,
+    0xcf, 0x74, 0x25, 0x6f, 0x17, 0x6c, 0xbf, 0xf5, 0x5c, 0x38, 0xd0, 0xff,
+    0x96, 0xcb, 0x13, 0xf9, 0xdf, 0xfd, },
+  { 0xbe, 0x92, 0xeb, 0xba, 0x44, 0x2c, 0x24, 0x74, 0xd4, 0x03, 0x27, 0x3c,
+    0x5d, 0x5b, 0x03, 0x30, 0x87, 0x63, 0x69, 0xe0, 0xb8, 0x94, 0xf4, 0x44,
+    0x7e, 0xad, 0xcd, 0x20, 0x12, 0x16, 0x79, },
+  { 0x30, 0xf1, 0xc4, 0x8e, 0x05, 0x90, 0x2a, 0x97, 0x63, 0x94, 0x46, 0xff,
+    0xce, 0xd8, 0x67, 0xa7, 0xac, 0x33, 0x8c, 0x95, 0xb7, 0xcd, 0xa3, 0x23,
+    0x98, 0x9d, 0x76, 0x6c, 0x9d, 0xa8, 0xd6, 0x8a, },
+  { 0xbe, },
+  { 0x17, 0x6c, },
+  { 0x1a, 0x42, 0x4f, },
+  { 0xba, 0xaf, 0xb7, 0x65, },
+  { 0xc2, 0x63, 0x43, 0x6a, 0xea, },
+  { 0xe4, 0x4d, 0xad, 0xf2, 0x0b, 0x02, },
+  { 0x04, 0xc7, 0xc4, 0x7f, 0xa9, 0x2b, 0xce, },
+  { 0x66, 0xf6, 0x67, 0xcb, 0x03, 0x53, 0xc8, 0xf1, },
+  { 0x56, 0xa3, 0x60, 0x78, 0xc9, 0x5f, 0x70, 0x1b, 0x5e, },
+  { 0x99, 0xff, 0x81, 0x7c, 0x13, 0x3c, 0x29, 0x79, 0x4b, 0x65, },
+  { 0x51, 0x10, 0x50, 0x93, 0x01, 0x93, 0xb7, 0x01, 0xc9, 0x18, 0xb7, },
+  { 0x8e, 0x3c, 0x42, 0x1e, 0x5e, 0x7d, 0xc1, 0x50, 0x70, 0x1f, 0x00, 0x98, },
+  { 0x5f, 0xd9, 0x9b, 0xc8, 0xd7, 0xb2, 0x72, 0x62, 0x1a, 0x1e, 0xba, 0x92,
+    0xe9, },
+  { 0x70, 0x2b, 0xba, 0xfe, 0xad, 0x5d, 0x96, 0x3f, 0x27, 0xc2, 0x41, 0x6d,
+    0xc4, 0xb3, },
+  { 0xae, 0xe0, 0xd5, 0xd4, 0xc7, 0xae, 0x15, 0x5e, 0xdc, 0xdd, 0x33, 0x60,
+    0xd7, 0xd3, 0x5e, },
+  { 0x79, 0x8e, 0xbc, 0x9e, 0x20, 0xb9, 0x19, 0x4b, 0x63, 0x80, 0xf3, 0x16,
+    0xaf, 0x39, 0xbd, 0x92, },
+  { 0xc2, 0x0e, 0x85, 0xa0, 0x0b, 0x9a, 0xb0, 0xec, 0xde, 0x38, 0xd3, 0x10,
+    0xd9, 0xa7, 0x66, 0x27, 0xcf, },
+  { 0x0e, 0x3b, 0x75, 0x80, 0x67, 0x14, 0x0c, 0x02, 0x90, 0xd6, 0xb3, 0x02,
+    0x81, 0xf6, 0xa6, 0x87, 0xce, 0x58, },
+  { 0x79, 0xb5, 0xe9, 0x5d, 0x52, 0x4d, 0xf7, 0x59, 0xf4, 0x2e, 0x27, 0xdd,
+    0xb3, 0xed, 0x57, 0x5b, 0x82, 0xea, 0x6f, },
+  { 0xa2, 0x97, 0xf5, 0x80, 0x02, 0x3d, 0xde, 0xa3, 0xf9, 0xf6, 0xab, 0xe3,
+    0x57, 0x63, 0x7b, 0x9b, 0x10, 0x42, 0x6f, 0xf2, },
+  { 0x12, 0x7a, 0xfc, 0xb7, 0x67, 0x06, 0x0c, 0x78, 0x1a, 0xfe, 0x88, 0x4f,
+    0xc6, 0xac, 0x52, 0x96, 0x64, 0x28, 0x97, 0x84, 0x06, },
+  { 0xc5, 0x04, 0x44, 0x6b, 0xb2, 0xa5, 0xa4, 0x66, 0xe1, 0x76, 0xa2, 0x51,
+    0xf9, 0x59, 0x69, 0x97, 0x56, 0x0b, 0xbf, 0x50, 0xb3, 0x34, },
+  { 0x21, 0x32, 0x6b, 0x42, 0xb5, 0xed, 0x71, 0x8d, 0xf7, 0x5a, 0x35, 0xe3,
+    0x90, 0xe2, 0xee, 0xaa, 0x89, 0xf6, 0xc9, 0x9c, 0x4d, 0x73, 0xf4, },
+  { 0x4c, 0xa6, 0x09, 0xf4, 0x48, 0xe7, 0x46, 0xbc, 0x49, 0xfc, 0xe5, 0xda,
+    0xd1, 0x87, 0x13, 0x17, 0x4c, 0x59, 0x71, 0x26, 0x5b, 0x2c, 0x42, 0xb7, },
+  { 0x13, 0x63, 0xf3, 0x40, 0x02, 0xe5, 0xa3, 0x3a, 0x5e, 0x8e, 0xf8, 0xb6,
+    0x8a, 0x49, 0x60, 0x76, 0x34, 0x72, 0x94, 0x73, 0xf6, 0xd9, 0x21, 0x6a,
+    0x26, },
+  { 0xdf, 0x75, 0x16, 0x10, 0x1b, 0x5e, 0x81, 0xc3, 0xc8, 0xde, 0x34, 0x24,
+    0xb0, 0x98, 0xeb, 0x1b, 0x8f, 0xa1, 0x9b, 0x05, 0xee, 0xa5, 0xe9, 0x35,
+    0xf4, 0x1d, },
+  { 0xcd, 0x21, 0x93, 0x6e, 0x5b, 0xa0, 0x26, 0x2b, 0x21, 0x0e, 0xa0, 0xb9,
+    0x1c, 0xb5, 0xbb, 0xb8, 0xf8, 0x1e, 0xff, 0x5c, 0xa8, 0xf9, 0x39, 0x46,
+    0x4e, 0x29, 0x26, },
+  { 0x73, 0x7f, 0x0e, 0x3b, 0x0b, 0x5c, 0xf9, 0x60, 0xaa, 0x88, 0xa1, 0x09,
+    0xb1, 0x5d, 0x38, 0x7b, 0x86, 0x8f, 0x13, 0x7a, 0x8d, 0x72, 0x7a, 0x98,
+    0x1a, 0x5b, 0xff, 0xc9, },
+  { 0xd3, 0x3c, 0x61, 0x71, 0x44, 0x7e, 0x31, 0x74, 0x98, 0x9d, 0x9a, 0xd2,
+    0x27, 0xf3, 0x46, 0x43, 0x42, 0x51, 0xd0, 0x5f, 0xe9, 0x1c, 0x5c, 0x69,
+    0xbf, 0xf6, 0xbe, 0x3c, 0x40, },
+  { 0x31, 0x99, 0x31, 0x9f, 0xaa, 0x43, 0x2e, 0x77, 0x3e, 0x74, 0x26, 0x31,
+    0x5e, 0x61, 0xf1, 0x87, 0xe2, 0xeb, 0x9b, 0xcd, 0xd0, 0x3a, 0xee, 0x20,
+    0x7e, 0x10, 0x0a, 0x0b, 0x7e, 0xfa, },
+  { 0xa4, 0x27, 0x80, 0x67, 0x81, 0x2a, 0xa7, 0x62, 0xf7, 0x6e, 0xda, 0xd4,
+    0x5c, 0x39, 0x74, 0xad, 0x7e, 0xbe, 0xad, 0xa5, 0x84, 0x7f, 0xa9, 0x30,
+    0x5d, 0xdb, 0xe2, 0x05, 0x43, 0xf7, 0x1b, },
+  { 0x0b, 0x37, 0xd8, 0x02, 0xe1, 0x83, 0xd6, 0x80, 0xf2, 0x35, 0xc2, 0xb0,
+    0x37, 0xef, 0xef, 0x5e, 0x43, 0x93, 0xf0, 0x49, 0x45, 0x0a, 0xef, 0xb5,
+    0x76, 0x70, 0x12, 0x44, 0xc4, 0xdb, 0xf5, 0x7a, },
+  { 0x1f, },
+  { 0x82, 0x60, },
+  { 0xcc, 0xe3, 0x08, },
+  { 0x56, 0x17, 0xe4, 0x59, },
+  { 0xe2, 0xd7, 0x9e, 0xc4, 0x4c, },
+  { 0xb2, 0xad, 0xd3, 0x78, 0x58, 0x5a, },
+  { 0xce, 0x43, 0xb4, 0x02, 0x96, 0xab, 0x3c, },
+  { 0xe6, 0x05, 0x1a, 0x73, 0x22, 0x32, 0xbb, 0x77, },
+  { 0x23, 0xe7, 0xda, 0xfe, 0x2c, 0xef, 0x8c, 0x22, 0xec, },
+  { 0xe9, 0x8e, 0x55, 0x38, 0xd1, 0xd7, 0x35, 0x23, 0x98, 0xc7, },
+  { 0xb5, 0x81, 0x1a, 0xe5, 0xb5, 0xa5, 0xd9, 0x4d, 0xca, 0x41, 0xe7, },
+  { 0x41, 0x16, 0x16, 0x95, 0x8d, 0x9e, 0x0c, 0xea, 0x8c, 0x71, 0x9a, 0xc1, },
+  { 0x7c, 0x33, 0xc0, 0xa4, 0x00, 0x62, 0xea, 0x60, 0x67, 0xe4, 0x20, 0xbc,
+    0x5b, },
+  { 0xdb, 0xb1, 0xdc, 0xfd, 0x08, 0xc0, 0xde, 0x82, 0xd1, 0xde, 0x38, 0xc0,
+    0x90, 0x48, },
+  { 0x37, 0x18, 0x2e, 0x0d, 0x61, 0xaa, 0x61, 0xd7, 0x86, 0x20, 0x16, 0x60,
+    0x04, 0xd9, 0xd5, },
+  { 0xb0, 0xcf, 0x2c, 0x4c, 0x5e, 0x5b, 0x4f, 0x2a, 0x23, 0x25, 0x58, 0x47,
+    0xe5, 0x31, 0x06, 0x70, },
+  { 0x91, 0xa0, 0xa3, 0x86, 0x4e, 0xe0, 0x72, 0x38, 0x06, 0x67, 0x59, 0x5c,
+    0x70, 0x25, 0xdb, 0x33, 0x27, },
+  { 0x44, 0x58, 0x66, 0xb8, 0x58, 0xc7, 0x13, 0xed, 0x4c, 0xc0, 0xf4, 0x9a,
+    0x1e, 0x67, 0x75, 0x33, 0xb6, 0xb8, },
+  { 0x7f, 0x98, 0x4a, 0x8e, 0x50, 0xa2, 0x5c, 0xcd, 0x59, 0xde, 0x72, 0xb3,
+    0x9d, 0xc3, 0x09, 0x8a, 0xab, 0x56, 0xf1, },
+  { 0x80, 0x96, 0x49, 0x1a, 0x59, 0xa2, 0xc5, 0xd5, 0xa7, 0x20, 0x8a, 0xb7,
+    0x27, 0x62, 0x84, 0x43, 0xc6, 0xe1, 0x1b, 0x5d, },
+  { 0x6b, 0xb7, 0x2b, 0x26, 0x62, 0x14, 0x70, 0x19, 0x3d, 0x4d, 0xac, 0xac,
+    0x63, 0x58, 0x5e, 0x94, 0xb5, 0xb7, 0xe8, 0xe8, 0xa2, },
+  { 0x20, 0xa8, 0xc0, 0xfd, 0x63, 0x3d, 0x6e, 0x98, 0xcf, 0x0c, 0x49, 0x98,
+    0xe4, 0x5a, 0xfe, 0x8c, 0xaa, 0x70, 0x82, 0x1c, 0x7b, 0x74, },
+  { 0xc8, 0xe8, 0xdd, 0xdf, 0x69, 0x30, 0x01, 0xc2, 0x0f, 0x7e, 0x2f, 0x11,
+    0xcc, 0x3e, 0x17, 0xa5, 0x69, 0x40, 0x3f, 0x0e, 0x79, 0x7f, 0xcf, },
+  { 0xdb, 0x61, 0xc0, 0xe2, 0x2e, 0x49, 0x07, 0x31, 0x1d, 0x91, 0x42, 0x8a,
+    0xfc, 0x5e, 0xd3, 0xf8, 0x56, 0x1f, 0x2b, 0x73, 0xfd, 0x9f, 0xb2, 0x8e, },
+  { 0x0c, 0x89, 0x55, 0x0c, 0x1f, 0x59, 0x2c, 0x9d, 0x1b, 0x29, 0x1d, 0x41,
+    0x1d, 0xe6, 0x47, 0x8f, 0x8c, 0x2b, 0xea, 0x8f, 0xf0, 0xff, 0x21, 0x70,
+    0x88, },
+  { 0x12, 0x18, 0x95, 0xa6, 0x59, 0xb1, 0x31, 0x24, 0x45, 0x67, 0x55, 0xa4,
+    0x1a, 0x2d, 0x48, 0x67, 0x1b, 0x43, 0x88, 0x2d, 0x8e, 0xa0, 0x70, 0xb3,
+    0xc6, 0xbb, },
+  { 0xe7, 0xb1, 0x1d, 0xb2, 0x76, 0x4d, 0x68, 0x68, 0x68, 0x23, 0x02, 0x55,
+    0x3a, 0xe2, 0xe5, 0xd5, 0x4b, 0x43, 0xf9, 0x34, 0x77, 0x5c, 0xa1, 0xf5,
+    0x55, 0xfd, 0x4f, },
+  { 0x8c, 0x87, 0x5a, 0x08, 0x3a, 0x73, 0xad, 0x61, 0xe1, 0xe7, 0x99, 0x7e,
+    0xf0, 0x5d, 0xe9, 0x5d, 0x16, 0x43, 0x80, 0x2f, 0xd0, 0x66, 0x34, 0xe2,
+    0x42, 0x64, 0x3b, 0x1a, },
+  { 0x39, 0xc1, 0x99, 0xcf, 0x22, 0xbf, 0x16, 0x8f, 0x9f, 0x80, 0x7f, 0x95,
+    0x0a, 0x05, 0x67, 0x27, 0xe7, 0x15, 0xdf, 0x9d, 0xb2, 0xfe, 0x1c, 0xb5,
+    0x1d, 0x60, 0x8f, 0x8a, 0x1d, },
+  { 0x9b, 0x6e, 0x08, 0x09, 0x06, 0x73, 0xab, 0x68, 0x02, 0x62, 0x1a, 0xe4,
+    0xd4, 0xdf, 0xc7, 0x02, 0x4c, 0x6a, 0x5f, 0xfd, 0x23, 0xac, 0xae, 0x6d,
+    0x43, 0xa4, 0x7a, 0x50, 0x60, 0x3c, },
+  { 0x1d, 0xb4, 0xc6, 0xe1, 0xb1, 0x4b, 0xe3, 0xf2, 0xe2, 0x1a, 0x73, 0x1b,
+    0xa0, 0x92, 0xa7, 0xf5, 0xff, 0x8f, 0x8b, 0x5d, 0xdf, 0xa8, 0x04, 0xb3,
+    0xb0, 0xf7, 0xcc, 0x12, 0xfa, 0x35, 0x46, },
+  { 0x49, 0x45, 0x97, 0x11, 0x0f, 0x1c, 0x60, 0x8e, 0xe8, 0x47, 0x30, 0xcf,
+    0x60, 0xa8, 0x71, 0xc5, 0x1b, 0xe9, 0x39, 0x4d, 0x49, 0xb6, 0x12, 0x1f,
+    0x24, 0xab, 0x37, 0xff, 0x83, 0xc2, 0xe1, 0x3a, },
+  { 0x60, },
+  { 0x24, 0x26, },
+  { 0x47, 0xeb, 0xc9, },
+  { 0x4a, 0xd0, 0xbc, 0xf0, },
+  { 0x8e, 0x2b, 0xc9, 0x85, 0x3c, },
+  { 0xa2, 0x07, 0x15, 0xb8, 0x12, 0x74, },
+  { 0x0f, 0xdb, 0x5b, 0x33, 0x69, 0xfe, 0x4b, },
+  { 0xa2, 0x86, 0x54, 0xf4, 0xfd, 0xb2, 0xd4, 0xe6, },
+  { 0xbb, 0x84, 0x78, 0x49, 0x27, 0x8e, 0x61, 0xda, 0x60, },
+  { 0x04, 0xc3, 0xcd, 0xaa, 0x8f, 0xa7, 0x03, 0xc9, 0xf9, 0xb6, },
+  { 0xf8, 0x27, 0x1d, 0x61, 0xdc, 0x21, 0x42, 0xdd, 0xad, 0x92, 0x40, },
+  { 0x12, 0x87, 0xdf, 0xc2, 0x41, 0x45, 0x5a, 0x36, 0x48, 0x5b, 0x51, 0x2b, },
+  { 0xbb, 0x37, 0x5d, 0x1f, 0xf1, 0x68, 0x7a, 0xc4, 0xa5, 0xd2, 0xa4, 0x91,
+    0x8d, },
+  { 0x5b, 0x27, 0xd1, 0x04, 0x54, 0x52, 0x9f, 0xa3, 0x47, 0x86, 0x33, 0x33,
+    0xbf, 0xa0, },
+  { 0xcf, 0x04, 0xea, 0xf8, 0x03, 0x2a, 0x43, 0xff, 0xa6, 0x68, 0x21, 0x4c,
+    0xd5, 0x4b, 0xed, },
+  { 0xaf, 0xb8, 0xbc, 0x63, 0x0f, 0x18, 0x4d, 0xe2, 0x7a, 0xdd, 0x46, 0x44,
+    0xc8, 0x24, 0x0a, 0xb7, },
+  { 0x3e, 0xdc, 0x36, 0xe4, 0x89, 0xb1, 0xfa, 0xc6, 0x40, 0x93, 0x2e, 0x75,
+    0xb2, 0x15, 0xd1, 0xb1, 0x10, },
+  { 0x6c, 0xd8, 0x20, 0x3b, 0x82, 0x79, 0xf9, 0xc8, 0xbc, 0x9d, 0xe0, 0x35,
+    0xbe, 0x1b, 0x49, 0x1a, 0xbc, 0x3a, },
+  { 0x78, 0x65, 0x2c, 0xbe, 0x35, 0x67, 0xdc, 0x78, 0xd4, 0x41, 0xf6, 0xc9,
+    0xde, 0xde, 0x1f, 0x18, 0x13, 0x31, 0x11, },
+  { 0x8a, 0x7f, 0xb1, 0x33, 0x8f, 0x0c, 0x3c, 0x0a, 0x06, 0x61, 0xf0, 0x47,
+    0x29, 0x1b, 0x29, 0xbc, 0x1c, 0x47, 0xef, 0x7a, },
+  { 0x65, 0x91, 0xf1, 0xe6, 0xb3, 0x96, 0xd3, 0x8c, 0xc2, 0x4a, 0x59, 0x35,
+    0x72, 0x8e, 0x0b, 0x9a, 0x87, 0xca, 0x34, 0x7b, 0x63, },
+  { 0x5f, 0x08, 0x87, 0x80, 0x56, 0x25, 0x89, 0x77, 0x61, 0x8c, 0x64, 0xa1,
+    0x59, 0x6d, 0x59, 0x62, 0xe8, 0x4a, 0xc8, 0x58, 0x99, 0xd1, },
+  { 0x23, 0x87, 0x1d, 0xed, 0x6f, 0xf2, 0x91, 0x90, 0xe2, 0xfe, 0x43, 0x21,
+    0xaf, 0x97, 0xc6, 0xbc, 0xd7, 0x15, 0xc7, 0x2d, 0x08, 0x77, 0x91, },
+  { 0x90, 0x47, 0x9a, 0x9e, 0x3a, 0xdf, 0xf3, 0xc9, 0x4c, 0x1e, 0xa7, 0xd4,
+    0x6a, 0x32, 0x90, 0xfe, 0xb7, 0xb6, 0x7b, 0xfa, 0x96, 0x61, 0xfb, 0xa4, },
+  { 0xb1, 0x67, 0x60, 0x45, 0xb0, 0x96, 0xc5, 0x15, 0x9f, 0x4d, 0x26, 0xd7,
+    0x9d, 0xf1, 0xf5, 0x6d, 0x21, 0x00, 0x94, 0x31, 0x64, 0x94, 0xd3, 0xa7,
+    0xd3, },
+  { 0x02, 0x3e, 0xaf, 0xf3, 0x79, 0x73, 0xa5, 0xf5, 0xcc, 0x7a, 0x7f, 0xfb,
+    0x79, 0x2b, 0x85, 0x8c, 0x88, 0x72, 0x06, 0xbe, 0xfe, 0xaf, 0xc1, 0x16,
+    0xa6, 0xd6, },
+  { 0x2a, 0xb0, 0x1a, 0xe5, 0xaa, 0x6e, 0xb3, 0xae, 0x53, 0x85, 0x33, 0x80,
+    0x75, 0xae, 0x30, 0xe6, 0xb8, 0x72, 0x42, 0xf6, 0x25, 0x4f, 0x38, 0x88,
+    0x55, 0xd1, 0xa9, },
+  { 0x90, 0xd8, 0x0c, 0xc0, 0x93, 0x4b, 0x4f, 0x9e, 0x65, 0x6c, 0xa1, 0x54,
+    0xa6, 0xf6, 0x6e, 0xca, 0xd2, 0xbb, 0x7e, 0x6a, 0x1c, 0xd3, 0xce, 0x46,
+    0xef, 0xb0, 0x00, 0x8d, },
+  { 0xed, 0x9c, 0x49, 0xcd, 0xc2, 0xde, 0x38, 0x0e, 0xe9, 0x98, 0x6c, 0xc8,
+    0x90, 0x9e, 0x3c, 0xd4, 0xd3, 0xeb, 0x88, 0x32, 0xc7, 0x28, 0xe3, 0x94,
+    0x1c, 0x9f, 0x8b, 0xf3, 0xcb, },
+  { 0xac, 0xe7, 0x92, 0x16, 0xb4, 0x14, 0xa0, 0xe4, 0x04, 0x79, 0xa2, 0xf4,
+    0x31, 0xe6, 0x0c, 0x26, 0xdc, 0xbf, 0x2f, 0x69, 0x1b, 0x55, 0x94, 0x67,
+    0xda, 0x0c, 0xd7, 0x32, 0x1f, 0xef, },
+  { 0x68, 0x63, 0x85, 0x57, 0x95, 0x9e, 0x42, 0x27, 0x41, 0x43, 0x42, 0x02,
+    0xa5, 0x78, 0xa7, 0xc6, 0x43, 0xc1, 0x6a, 0xba, 0x70, 0x80, 0xcd, 0x04,
+    0xb6, 0x78, 0x76, 0x29, 0xf3, 0xe8, 0xa0, },
+  { 0xe6, 0xac, 0x8d, 0x9d, 0xf0, 0xc0, 0xf7, 0xf7, 0xe3, 0x3e, 0x4e, 0x28,
+    0x0f, 0x59, 0xb2, 0x67, 0x9e, 0x84, 0x34, 0x42, 0x96, 0x30, 0x2b, 0xca,
+    0x49, 0xb6, 0xc5, 0x9a, 0x84, 0x59, 0xa7, 0x81, },
+  { 0x7e, },
+  { 0x1e, 0x21, },
+  { 0x26, 0xd3, 0xdd, },
+  { 0x2c, 0xd4, 0xb3, 0x3d, },
+  { 0x86, 0x7b, 0x76, 0x3c, 0xf0, },
+  { 0x12, 0xc3, 0x70, 0x1d, 0x55, 0x18, },
+  { 0x96, 0xc2, 0xbd, 0x61, 0x55, 0xf4, 0x24, },
+  { 0x20, 0x51, 0xf7, 0x86, 0x58, 0x8f, 0x07, 0x2a, },
+  { 0x93, 0x15, 0xa8, 0x1d, 0xda, 0x97, 0xee, 0x0e, 0x6c, },
+  { 0x39, 0x93, 0xdf, 0xd5, 0x0e, 0xca, 0xdc, 0x7a, 0x92, 0xce, },
+  { 0x60, 0xd5, 0xfd, 0xf5, 0x1b, 0x26, 0x82, 0x26, 0x73, 0x02, 0xbc, },
+  { 0x98, 0xf2, 0x34, 0xe1, 0xf5, 0xfb, 0x00, 0xac, 0x10, 0x4a, 0x38, 0x9f, },
+  { 0xda, 0x3a, 0x92, 0x8a, 0xd0, 0xcd, 0x12, 0xcd, 0x15, 0xbb, 0xab, 0x77,
+    0x66, },
+  { 0xa2, 0x92, 0x1a, 0xe5, 0xca, 0x0c, 0x30, 0x75, 0xeb, 0xaf, 0x00, 0x31,
+    0x55, 0x66, },
+  { 0x06, 0xea, 0xfd, 0x3e, 0x86, 0x38, 0x62, 0x4e, 0xa9, 0x12, 0xa4, 0x12,
+    0x43, 0xbf, 0xa1, },
+  { 0xe4, 0x71, 0x7b, 0x94, 0xdb, 0xa0, 0xd2, 0xff, 0x9b, 0xeb, 0xad, 0x8e,
+    0x95, 0x8a, 0xc5, 0xed, },
+  { 0x25, 0x5a, 0x77, 0x71, 0x41, 0x0e, 0x7a, 0xe9, 0xed, 0x0c, 0x10, 0xef,
+    0xf6, 0x2b, 0x3a, 0xba, 0x60, },
+  { 0xee, 0xe2, 0xa3, 0x67, 0x64, 0x1d, 0xc6, 0x04, 0xc4, 0xe1, 0x68, 0xd2,
+    0x6e, 0xd2, 0x91, 0x75, 0x53, 0x07, },
+  { 0xe0, 0xf6, 0x4d, 0x8f, 0x68, 0xfc, 0x06, 0x7e, 0x18, 0x79, 0x7f, 0x2b,
+    0x6d, 0xef, 0x46, 0x7f, 0xab, 0xb2, 0xad, },
+  { 0x3d, 0x35, 0x88, 0x9f, 0x2e, 0xcf, 0x96, 0x45, 0x07, 0x60, 0x71, 0x94,
+    0x00, 0x8d, 0xbf, 0xf4, 0xef, 0x46, 0x2e, 0x3c, },
+  { 0x43, 0xcf, 0x98, 0xf7, 0x2d, 0xf4, 0x17, 0xe7, 0x8c, 0x05, 0x2d, 0x9b,
+    0x24, 0xfb, 0x4d, 0xea, 0x4a, 0xec, 0x01, 0x25, 0x29, },
+  { 0x8e, 0x73, 0x9a, 0x78, 0x11, 0xfe, 0x48, 0xa0, 0x3b, 0x1a, 0x26, 0xdf,
+    0x25, 0xe9, 0x59, 0x1c, 0x70, 0x07, 0x9f, 0xdc, 0xa0, 0xa6, },
+  { 0xe8, 0x47, 0x71, 0xc7, 0x3e, 0xdf, 0xb5, 0x13, 0xb9, 0x85, 0x13, 0xa8,
+    0x54, 0x47, 0x6e, 0x59, 0x96, 0x09, 0x13, 0x5f, 0x82, 0x16, 0x0b, },
+  { 0xfb, 0xc0, 0x8c, 0x03, 0x21, 0xb3, 0xc4, 0xb5, 0x43, 0x32, 0x6c, 0xea,
+    0x7f, 0xa8, 0x43, 0x91, 0xe8, 0x4e, 0x3f, 0xbf, 0x45, 0x58, 0x6a, 0xa3, },
+  { 0x55, 0xf8, 0xf3, 0x00, 0x76, 0x09, 0xef, 0x69, 0x5d, 0xd2, 0x8a, 0xf2,
+    0x65, 0xc3, 0xcb, 0x9b, 0x43, 0xfd, 0xb1, 0x7e, 0x7f, 0xa1, 0x94, 0xb0,
+    0xd7, },
+  { 0xaa, 0x13, 0xc1, 0x51, 0x40, 0x6d, 0x8d, 0x4c, 0x0a, 0x95, 0x64, 0x7b,
+    0xd1, 0x96, 0xb6, 0x56, 0xb4, 0x5b, 0xcf, 0xd6, 0xd9, 0x15, 0x97, 0xdd,
+    0xb6, 0xef, },
+  { 0xaf, 0xb7, 0x36, 0xb0, 0x04, 0xdb, 0xd7, 0x9c, 0x9a, 0x44, 0xc4, 0xf6,
+    0x1f, 0x12, 0x21, 0x2d, 0x59, 0x30, 0x54, 0xab, 0x27, 0x61, 0xa3, 0x57,
+    0xef, 0xf8, 0x53, },
+  { 0x97, 0x34, 0x45, 0x3e, 0xce, 0x7c, 0x35, 0xa2, 0xda, 0x9f, 0x4b, 0x46,
+    0x6c, 0x11, 0x67, 0xff, 0x2f, 0x76, 0x58, 0x15, 0x71, 0xfa, 0x44, 0x89,
+    0x89, 0xfd, 0xf7, 0x99, },
+  { 0x1f, 0xb1, 0x62, 0xeb, 0x83, 0xc5, 0x9c, 0x89, 0xf9, 0x2c, 0xd2, 0x03,
+    0x61, 0xbc, 0xbb, 0xa5, 0x74, 0x0e, 0x9b, 0x7e, 0x82, 0x3e, 0x70, 0x0a,
+    0xa9, 0x8f, 0x2b, 0x59, 0xfb, },
+  { 0xf8, 0xca, 0x5e, 0x3a, 0x4f, 0x9e, 0x10, 0x69, 0x10, 0xd5, 0x4c, 0xeb,
+    0x1a, 0x0f, 0x3c, 0x6a, 0x98, 0xf5, 0xb0, 0x97, 0x5b, 0x37, 0x2f, 0x0d,
+    0xbd, 0x42, 0x4b, 0x69, 0xa1, 0x82, },
+  { 0x12, 0x8c, 0x6d, 0x52, 0x08, 0xef, 0x74, 0xb2, 0xe6, 0xaa, 0xd3, 0xb0,
+    0x26, 0xb0, 0xd9, 0x94, 0xb6, 0x11, 0x45, 0x0e, 0x36, 0x71, 0x14, 0x2d,
+    0x41, 0x8c, 0x21, 0x53, 0x31, 0xe9, 0x68, },
+  { 0xee, 0xea, 0x0d, 0x89, 0x47, 0x7e, 0x72, 0xd1, 0xd8, 0xce, 0x58, 0x4c,
+    0x94, 0x1f, 0x0d, 0x51, 0x08, 0xa3, 0xb6, 0x3d, 0xe7, 0x82, 0x46, 0x92,
+    0xd6, 0x98, 0x6b, 0x07, 0x10, 0x65, 0x52, 0x65, },
+};
+
+static const u8 blake2s_hmac_testvecs[][BLAKE2S_HASH_SIZE] __initconst = {
+  { 0xce, 0xe1, 0x57, 0x69, 0x82, 0xdc, 0xbf, 0x43, 0xad, 0x56, 0x4c, 0x70,
+    0xed, 0x68, 0x16, 0x96, 0xcf, 0xa4, 0x73, 0xe8, 0xe8, 0xfc, 0x32, 0x79,
+    0x08, 0x0a, 0x75, 0x82, 0xda, 0x3f, 0x05, 0x11, },
+  { 0x77, 0x2f, 0x0c, 0x71, 0x41, 0xf4, 0x4b, 0x2b, 0xb3, 0xc6, 0xb6, 0xf9,
+    0x60, 0xde, 0xe4, 0x52, 0x38, 0x66, 0xe8, 0xbf, 0x9b, 0x96, 0xc4, 0x9f,
+    0x60, 0xd9, 0x24, 0x37, 0x99, 0xd6, 0xec, 0x31, },
+};
+
+bool __init blake2s_selftest(void)
+{
+	u8 key[BLAKE2S_KEY_SIZE];
+	u8 buf[ARRAY_SIZE(blake2s_testvecs)];
+	u8 hash[BLAKE2S_HASH_SIZE];
+	struct blake2s_state state;
+	bool success = true;
+	int i, l;
+
+	key[0] = key[1] = 1;
+	for (i = 2; i < sizeof(key); ++i)
+		key[i] = key[i - 2] + key[i - 1];
+
+	for (i = 0; i < sizeof(buf); ++i)
+		buf[i] = (u8)i;
+
+	for (i = l = 0; i < ARRAY_SIZE(blake2s_testvecs); l = (l + 37) % ++i) {
+		int outlen = 1 + i % BLAKE2S_HASH_SIZE;
+		int keylen = (13 * i) % (BLAKE2S_KEY_SIZE + 1);
+
+		blake2s(hash, buf, key + BLAKE2S_KEY_SIZE - keylen, outlen, i,
+			keylen);
+		if (memcmp(hash, blake2s_testvecs[i], outlen)) {
+			pr_err("blake2s self-test %d: FAIL\n", i + 1);
+			success = false;
+		}
+
+		if (!keylen)
+			blake2s_init(&state, outlen);
+		else
+			blake2s_init_key(&state, outlen,
+					 key + BLAKE2S_KEY_SIZE - keylen,
+					 keylen);
+
+		blake2s_update(&state, buf, l);
+		blake2s_update(&state, buf + l, i - l);
+		blake2s_final(&state, hash);
+		if (memcmp(hash, blake2s_testvecs[i], outlen)) {
+			pr_err("blake2s init/update/final self-test %d: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	if (success) {
+		blake2s256_hmac(hash, buf, key, sizeof(buf), sizeof(key));
+		success &= !memcmp(hash, blake2s_hmac_testvecs[0], BLAKE2S_HASH_SIZE);
+
+		blake2s256_hmac(hash, key, buf, sizeof(key), sizeof(buf));
+		success &= !memcmp(hash, blake2s_hmac_testvecs[1], BLAKE2S_HASH_SIZE);
+
+		if (!success)
+			pr_err("blake2s256_hmac self-test: FAIL\n");
+	}
+
+	return success;
+}
diff --git a/lib/crypto/blake2s.c b/lib/crypto/blake2s.c
new file mode 100644
index 0000000..c64ac8b
--- /dev/null
+++ b/lib/crypto/blake2s.c
@@ -0,0 +1,92 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the BLAKE2s hash and PRF functions.
+ *
+ * Information: https://blake2.net/
+ *
+ */
+
+#include <crypto/internal/blake2s.h>
+#include <linux/types.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/bug.h>
+
+#if IS_ENABLED(CONFIG_CRYPTO_ARCH_HAVE_LIB_BLAKE2S)
+#  define blake2s_compress blake2s_compress_arch
+#else
+#  define blake2s_compress blake2s_compress_generic
+#endif
+
+void blake2s_update(struct blake2s_state *state, const u8 *in, size_t inlen)
+{
+	__blake2s_update(state, in, inlen, blake2s_compress);
+}
+EXPORT_SYMBOL(blake2s_update);
+
+void blake2s_final(struct blake2s_state *state, u8 *out)
+{
+	WARN_ON(IS_ENABLED(DEBUG) && !out);
+	__blake2s_final(state, out, blake2s_compress);
+	memzero_explicit(state, sizeof(*state));
+}
+EXPORT_SYMBOL(blake2s_final);
+
+void blake2s256_hmac(u8 *out, const u8 *in, const u8 *key, const size_t inlen,
+		     const size_t keylen)
+{
+	struct blake2s_state state;
+	u8 x_key[BLAKE2S_BLOCK_SIZE] __aligned(__alignof__(u32)) = { 0 };
+	u8 i_hash[BLAKE2S_HASH_SIZE] __aligned(__alignof__(u32));
+	int i;
+
+	if (keylen > BLAKE2S_BLOCK_SIZE) {
+		blake2s_init(&state, BLAKE2S_HASH_SIZE);
+		blake2s_update(&state, key, keylen);
+		blake2s_final(&state, x_key);
+	} else
+		memcpy(x_key, key, keylen);
+
+	for (i = 0; i < BLAKE2S_BLOCK_SIZE; ++i)
+		x_key[i] ^= 0x36;
+
+	blake2s_init(&state, BLAKE2S_HASH_SIZE);
+	blake2s_update(&state, x_key, BLAKE2S_BLOCK_SIZE);
+	blake2s_update(&state, in, inlen);
+	blake2s_final(&state, i_hash);
+
+	for (i = 0; i < BLAKE2S_BLOCK_SIZE; ++i)
+		x_key[i] ^= 0x5c ^ 0x36;
+
+	blake2s_init(&state, BLAKE2S_HASH_SIZE);
+	blake2s_update(&state, x_key, BLAKE2S_BLOCK_SIZE);
+	blake2s_update(&state, i_hash, BLAKE2S_HASH_SIZE);
+	blake2s_final(&state, i_hash);
+
+	memcpy(out, i_hash, BLAKE2S_HASH_SIZE);
+	memzero_explicit(x_key, BLAKE2S_BLOCK_SIZE);
+	memzero_explicit(i_hash, BLAKE2S_HASH_SIZE);
+}
+EXPORT_SYMBOL(blake2s256_hmac);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!blake2s_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("BLAKE2s hash function");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/chacha.c b/lib/crypto/chacha.c
new file mode 100644
index 0000000..65ead6b
--- /dev/null
+++ b/lib/crypto/chacha.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The "hash function" used as the core of the ChaCha stream cipher (RFC7539)
+ *
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <linux/bug.h>
+#include <linux/kernel.h>
+#include <linux/export.h>
+#include <linux/bitops.h>
+#include <linux/string.h>
+#include <linux/cryptohash.h>
+#include <asm/unaligned.h>
+#include <crypto/chacha.h>
+
+static void chacha_permute(u32 *x, int nrounds)
+{
+	int i;
+
+	/* whitelist the allowed round counts */
+	WARN_ON_ONCE(nrounds != 20 && nrounds != 12);
+
+	for (i = 0; i < nrounds; i += 2) {
+		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],  16);
+		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],  16);
+		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],  16);
+		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],  16);
+
+		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],  12);
+		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],  12);
+		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10], 12);
+		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11], 12);
+
+		x[0]  += x[4];    x[12] = rol32(x[12] ^ x[0],   8);
+		x[1]  += x[5];    x[13] = rol32(x[13] ^ x[1],   8);
+		x[2]  += x[6];    x[14] = rol32(x[14] ^ x[2],   8);
+		x[3]  += x[7];    x[15] = rol32(x[15] ^ x[3],   8);
+
+		x[8]  += x[12];   x[4]  = rol32(x[4]  ^ x[8],   7);
+		x[9]  += x[13];   x[5]  = rol32(x[5]  ^ x[9],   7);
+		x[10] += x[14];   x[6]  = rol32(x[6]  ^ x[10],  7);
+		x[11] += x[15];   x[7]  = rol32(x[7]  ^ x[11],  7);
+
+		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],  16);
+		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],  16);
+		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],  16);
+		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],  16);
+
+		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10], 12);
+		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11], 12);
+		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],  12);
+		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],  12);
+
+		x[0]  += x[5];    x[15] = rol32(x[15] ^ x[0],   8);
+		x[1]  += x[6];    x[12] = rol32(x[12] ^ x[1],   8);
+		x[2]  += x[7];    x[13] = rol32(x[13] ^ x[2],   8);
+		x[3]  += x[4];    x[14] = rol32(x[14] ^ x[3],   8);
+
+		x[10] += x[15];   x[5]  = rol32(x[5]  ^ x[10],  7);
+		x[11] += x[12];   x[6]  = rol32(x[6]  ^ x[11],  7);
+		x[8]  += x[13];   x[7]  = rol32(x[7]  ^ x[8],   7);
+		x[9]  += x[14];   x[4]  = rol32(x[4]  ^ x[9],   7);
+	}
+}
+
+/**
+ * chacha_block - generate one keystream block and increment block counter
+ * @state: input state matrix (16 32-bit words)
+ * @stream: output keystream block (64 bytes)
+ * @nrounds: number of rounds (20 or 12; 20 is recommended)
+ *
+ * This is the ChaCha core, a function from 64-byte strings to 64-byte strings.
+ * The caller has already converted the endianness of the input.  This function
+ * also handles incrementing the block counter in the input matrix.
+ */
+void chacha_block_generic(u32 *state, u8 *stream, int nrounds)
+{
+	u32 x[16];
+	int i;
+
+	memcpy(x, state, 64);
+
+	chacha_permute(x, nrounds);
+
+	for (i = 0; i < ARRAY_SIZE(x); i++)
+		put_unaligned_le32(x[i] + state[i], &stream[i * sizeof(u32)]);
+
+	state[12]++;
+}
+EXPORT_SYMBOL(chacha_block_generic);
+
+/**
+ * hchacha_block_generic - abbreviated ChaCha core, for XChaCha
+ * @state: input state matrix (16 32-bit words)
+ * @out: output (8 32-bit words)
+ * @nrounds: number of rounds (20 or 12; 20 is recommended)
+ *
+ * HChaCha is the ChaCha equivalent of HSalsa and is an intermediate step
+ * towards XChaCha (see https://cr.yp.to/snuffle/xsalsa-20081128.pdf).  HChaCha
+ * skips the final addition of the initial state, and outputs only certain words
+ * of the state.  It should not be used for streaming directly.
+ */
+void hchacha_block_generic(const u32 *state, u32 *stream, int nrounds)
+{
+	u32 x[16];
+
+	memcpy(x, state, 64);
+
+	chacha_permute(x, nrounds);
+
+	memcpy(&stream[0], &x[0], 16);
+	memcpy(&stream[4], &x[12], 16);
+}
+EXPORT_SYMBOL(hchacha_block_generic);
diff --git a/lib/crypto/chacha20poly1305-selftest.c b/lib/crypto/chacha20poly1305-selftest.c
new file mode 100644
index 0000000..fa43ded
--- /dev/null
+++ b/lib/crypto/chacha20poly1305-selftest.c
@@ -0,0 +1,9082 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/chacha20poly1305.h>
+#include <crypto/chacha.h>
+#include <crypto/poly1305.h>
+
+#include <asm/unaligned.h>
+#include <linux/bug.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+
+struct chacha20poly1305_testvec {
+	const u8 *input, *output, *assoc, *nonce, *key;
+	size_t ilen, alen, nlen;
+	bool failure;
+};
+
+/* The first of these are the ChaCha20-Poly1305 AEAD test vectors from RFC7539
+ * 2.8.2. After they are generated by reference implementations. And the final
+ * marked ones are taken from wycheproof, but we only do these for the encrypt
+ * side, because mostly we're stressing the primitives rather than the actual
+ * chapoly construction.
+ */
+
+static const u8 enc_input001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 enc_output001[] __initconst = {
+	0x64, 0xa0, 0x86, 0x15, 0x75, 0x86, 0x1a, 0xf4,
+	0x60, 0xf0, 0x62, 0xc7, 0x9b, 0xe6, 0x43, 0xbd,
+	0x5e, 0x80, 0x5c, 0xfd, 0x34, 0x5c, 0xf3, 0x89,
+	0xf1, 0x08, 0x67, 0x0a, 0xc7, 0x6c, 0x8c, 0xb2,
+	0x4c, 0x6c, 0xfc, 0x18, 0x75, 0x5d, 0x43, 0xee,
+	0xa0, 0x9e, 0xe9, 0x4e, 0x38, 0x2d, 0x26, 0xb0,
+	0xbd, 0xb7, 0xb7, 0x3c, 0x32, 0x1b, 0x01, 0x00,
+	0xd4, 0xf0, 0x3b, 0x7f, 0x35, 0x58, 0x94, 0xcf,
+	0x33, 0x2f, 0x83, 0x0e, 0x71, 0x0b, 0x97, 0xce,
+	0x98, 0xc8, 0xa8, 0x4a, 0xbd, 0x0b, 0x94, 0x81,
+	0x14, 0xad, 0x17, 0x6e, 0x00, 0x8d, 0x33, 0xbd,
+	0x60, 0xf9, 0x82, 0xb1, 0xff, 0x37, 0xc8, 0x55,
+	0x97, 0x97, 0xa0, 0x6e, 0xf4, 0xf0, 0xef, 0x61,
+	0xc1, 0x86, 0x32, 0x4e, 0x2b, 0x35, 0x06, 0x38,
+	0x36, 0x06, 0x90, 0x7b, 0x6a, 0x7c, 0x02, 0xb0,
+	0xf9, 0xf6, 0x15, 0x7b, 0x53, 0xc8, 0x67, 0xe4,
+	0xb9, 0x16, 0x6c, 0x76, 0x7b, 0x80, 0x4d, 0x46,
+	0xa5, 0x9b, 0x52, 0x16, 0xcd, 0xe7, 0xa4, 0xe9,
+	0x90, 0x40, 0xc5, 0xa4, 0x04, 0x33, 0x22, 0x5e,
+	0xe2, 0x82, 0xa1, 0xb0, 0xa0, 0x6c, 0x52, 0x3e,
+	0xaf, 0x45, 0x34, 0xd7, 0xf8, 0x3f, 0xa1, 0x15,
+	0x5b, 0x00, 0x47, 0x71, 0x8c, 0xbc, 0x54, 0x6a,
+	0x0d, 0x07, 0x2b, 0x04, 0xb3, 0x56, 0x4e, 0xea,
+	0x1b, 0x42, 0x22, 0x73, 0xf5, 0x48, 0x27, 0x1a,
+	0x0b, 0xb2, 0x31, 0x60, 0x53, 0xfa, 0x76, 0x99,
+	0x19, 0x55, 0xeb, 0xd6, 0x31, 0x59, 0x43, 0x4e,
+	0xce, 0xbb, 0x4e, 0x46, 0x6d, 0xae, 0x5a, 0x10,
+	0x73, 0xa6, 0x72, 0x76, 0x27, 0x09, 0x7a, 0x10,
+	0x49, 0xe6, 0x17, 0xd9, 0x1d, 0x36, 0x10, 0x94,
+	0xfa, 0x68, 0xf0, 0xff, 0x77, 0x98, 0x71, 0x30,
+	0x30, 0x5b, 0xea, 0xba, 0x2e, 0xda, 0x04, 0xdf,
+	0x99, 0x7b, 0x71, 0x4d, 0x6c, 0x6f, 0x2c, 0x29,
+	0xa6, 0xad, 0x5c, 0xb4, 0x02, 0x2b, 0x02, 0x70,
+	0x9b, 0xee, 0xad, 0x9d, 0x67, 0x89, 0x0c, 0xbb,
+	0x22, 0x39, 0x23, 0x36, 0xfe, 0xa1, 0x85, 0x1f,
+	0x38
+};
+static const u8 enc_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 enc_nonce001[] __initconst = {
+	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+};
+static const u8 enc_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const u8 enc_input002[] __initconst = { };
+static const u8 enc_output002[] __initconst = {
+	0xea, 0xe0, 0x1e, 0x9e, 0x2c, 0x91, 0xaa, 0xe1,
+	0xdb, 0x5d, 0x99, 0x3f, 0x8a, 0xf7, 0x69, 0x92
+};
+static const u8 enc_assoc002[] __initconst = { };
+static const u8 enc_nonce002[] __initconst = {
+	0xca, 0xbf, 0x33, 0x71, 0x32, 0x45, 0x77, 0x8e
+};
+static const u8 enc_key002[] __initconst = {
+	0x4c, 0xf5, 0x96, 0x83, 0x38, 0xe6, 0xae, 0x7f,
+	0x2d, 0x29, 0x25, 0x76, 0xd5, 0x75, 0x27, 0x86,
+	0x91, 0x9a, 0x27, 0x7a, 0xfb, 0x46, 0xc5, 0xef,
+	0x94, 0x81, 0x79, 0x57, 0x14, 0x59, 0x40, 0x68
+};
+
+static const u8 enc_input003[] __initconst = { };
+static const u8 enc_output003[] __initconst = {
+	0xdd, 0x6b, 0x3b, 0x82, 0xce, 0x5a, 0xbd, 0xd6,
+	0xa9, 0x35, 0x83, 0xd8, 0x8c, 0x3d, 0x85, 0x77
+};
+static const u8 enc_assoc003[] __initconst = {
+	0x33, 0x10, 0x41, 0x12, 0x1f, 0xf3, 0xd2, 0x6b
+};
+static const u8 enc_nonce003[] __initconst = {
+	0x3d, 0x86, 0xb5, 0x6b, 0xc8, 0xa3, 0x1f, 0x1d
+};
+static const u8 enc_key003[] __initconst = {
+	0x2d, 0xb0, 0x5d, 0x40, 0xc8, 0xed, 0x44, 0x88,
+	0x34, 0xd1, 0x13, 0xaf, 0x57, 0xa1, 0xeb, 0x3a,
+	0x2a, 0x80, 0x51, 0x36, 0xec, 0x5b, 0xbc, 0x08,
+	0x93, 0x84, 0x21, 0xb5, 0x13, 0x88, 0x3c, 0x0d
+};
+
+static const u8 enc_input004[] __initconst = {
+	0xa4
+};
+static const u8 enc_output004[] __initconst = {
+	0xb7, 0x1b, 0xb0, 0x73, 0x59, 0xb0, 0x84, 0xb2,
+	0x6d, 0x8e, 0xab, 0x94, 0x31, 0xa1, 0xae, 0xac,
+	0x89
+};
+static const u8 enc_assoc004[] __initconst = {
+	0x6a, 0xe2, 0xad, 0x3f, 0x88, 0x39, 0x5a, 0x40
+};
+static const u8 enc_nonce004[] __initconst = {
+	0xd2, 0x32, 0x1f, 0x29, 0x28, 0xc6, 0xc4, 0xc4
+};
+static const u8 enc_key004[] __initconst = {
+	0x4b, 0x28, 0x4b, 0xa3, 0x7b, 0xbe, 0xe9, 0xf8,
+	0x31, 0x80, 0x82, 0xd7, 0xd8, 0xe8, 0xb5, 0xa1,
+	0xe2, 0x18, 0x18, 0x8a, 0x9c, 0xfa, 0xa3, 0x3d,
+	0x25, 0x71, 0x3e, 0x40, 0xbc, 0x54, 0x7a, 0x3e
+};
+
+static const u8 enc_input005[] __initconst = {
+	0x2d
+};
+static const u8 enc_output005[] __initconst = {
+	0xbf, 0xe1, 0x5b, 0x0b, 0xdb, 0x6b, 0xf5, 0x5e,
+	0x6c, 0x5d, 0x84, 0x44, 0x39, 0x81, 0xc1, 0x9c,
+	0xac
+};
+static const u8 enc_assoc005[] __initconst = { };
+static const u8 enc_nonce005[] __initconst = {
+	0x20, 0x1c, 0xaa, 0x5f, 0x9c, 0xbf, 0x92, 0x30
+};
+static const u8 enc_key005[] __initconst = {
+	0x66, 0xca, 0x9c, 0x23, 0x2a, 0x4b, 0x4b, 0x31,
+	0x0e, 0x92, 0x89, 0x8b, 0xf4, 0x93, 0xc7, 0x87,
+	0x98, 0xa3, 0xd8, 0x39, 0xf8, 0xf4, 0xa7, 0x01,
+	0xc0, 0x2e, 0x0a, 0xa6, 0x7e, 0x5a, 0x78, 0x87
+};
+
+static const u8 enc_input006[] __initconst = {
+	0x33, 0x2f, 0x94, 0xc1, 0xa4, 0xef, 0xcc, 0x2a,
+	0x5b, 0xa6, 0xe5, 0x8f, 0x1d, 0x40, 0xf0, 0x92,
+	0x3c, 0xd9, 0x24, 0x11, 0xa9, 0x71, 0xf9, 0x37,
+	0x14, 0x99, 0xfa, 0xbe, 0xe6, 0x80, 0xde, 0x50,
+	0xc9, 0x96, 0xd4, 0xb0, 0xec, 0x9e, 0x17, 0xec,
+	0xd2, 0x5e, 0x72, 0x99, 0xfc, 0x0a, 0xe1, 0xcb,
+	0x48, 0xd2, 0x85, 0xdd, 0x2f, 0x90, 0xe0, 0x66,
+	0x3b, 0xe6, 0x20, 0x74, 0xbe, 0x23, 0x8f, 0xcb,
+	0xb4, 0xe4, 0xda, 0x48, 0x40, 0xa6, 0xd1, 0x1b,
+	0xc7, 0x42, 0xce, 0x2f, 0x0c, 0xa6, 0x85, 0x6e,
+	0x87, 0x37, 0x03, 0xb1, 0x7c, 0x25, 0x96, 0xa3,
+	0x05, 0xd8, 0xb0, 0xf4, 0xed, 0xea, 0xc2, 0xf0,
+	0x31, 0x98, 0x6c, 0xd1, 0x14, 0x25, 0xc0, 0xcb,
+	0x01, 0x74, 0xd0, 0x82, 0xf4, 0x36, 0xf5, 0x41,
+	0xd5, 0xdc, 0xca, 0xc5, 0xbb, 0x98, 0xfe, 0xfc,
+	0x69, 0x21, 0x70, 0xd8, 0xa4, 0x4b, 0xc8, 0xde,
+	0x8f
+};
+static const u8 enc_output006[] __initconst = {
+	0x8b, 0x06, 0xd3, 0x31, 0xb0, 0x93, 0x45, 0xb1,
+	0x75, 0x6e, 0x26, 0xf9, 0x67, 0xbc, 0x90, 0x15,
+	0x81, 0x2c, 0xb5, 0xf0, 0xc6, 0x2b, 0xc7, 0x8c,
+	0x56, 0xd1, 0xbf, 0x69, 0x6c, 0x07, 0xa0, 0xda,
+	0x65, 0x27, 0xc9, 0x90, 0x3d, 0xef, 0x4b, 0x11,
+	0x0f, 0x19, 0x07, 0xfd, 0x29, 0x92, 0xd9, 0xc8,
+	0xf7, 0x99, 0x2e, 0x4a, 0xd0, 0xb8, 0x2c, 0xdc,
+	0x93, 0xf5, 0x9e, 0x33, 0x78, 0xd1, 0x37, 0xc3,
+	0x66, 0xd7, 0x5e, 0xbc, 0x44, 0xbf, 0x53, 0xa5,
+	0xbc, 0xc4, 0xcb, 0x7b, 0x3a, 0x8e, 0x7f, 0x02,
+	0xbd, 0xbb, 0xe7, 0xca, 0xa6, 0x6c, 0x6b, 0x93,
+	0x21, 0x93, 0x10, 0x61, 0xe7, 0x69, 0xd0, 0x78,
+	0xf3, 0x07, 0x5a, 0x1a, 0x8f, 0x73, 0xaa, 0xb1,
+	0x4e, 0xd3, 0xda, 0x4f, 0xf3, 0x32, 0xe1, 0x66,
+	0x3e, 0x6c, 0xc6, 0x13, 0xba, 0x06, 0x5b, 0xfc,
+	0x6a, 0xe5, 0x6f, 0x60, 0xfb, 0x07, 0x40, 0xb0,
+	0x8c, 0x9d, 0x84, 0x43, 0x6b, 0xc1, 0xf7, 0x8d,
+	0x8d, 0x31, 0xf7, 0x7a, 0x39, 0x4d, 0x8f, 0x9a,
+	0xeb
+};
+static const u8 enc_assoc006[] __initconst = {
+	0x70, 0xd3, 0x33, 0xf3, 0x8b, 0x18, 0x0b
+};
+static const u8 enc_nonce006[] __initconst = {
+	0xdf, 0x51, 0x84, 0x82, 0x42, 0x0c, 0x75, 0x9c
+};
+static const u8 enc_key006[] __initconst = {
+	0x68, 0x7b, 0x8d, 0x8e, 0xe3, 0xc4, 0xdd, 0xae,
+	0xdf, 0x72, 0x7f, 0x53, 0x72, 0x25, 0x1e, 0x78,
+	0x91, 0xcb, 0x69, 0x76, 0x1f, 0x49, 0x93, 0xf9,
+	0x6f, 0x21, 0xcc, 0x39, 0x9c, 0xad, 0xb1, 0x01
+};
+
+static const u8 enc_input007[] __initconst = {
+	0x9b, 0x18, 0xdb, 0xdd, 0x9a, 0x0f, 0x3e, 0xa5,
+	0x15, 0x17, 0xde, 0xdf, 0x08, 0x9d, 0x65, 0x0a,
+	0x67, 0x30, 0x12, 0xe2, 0x34, 0x77, 0x4b, 0xc1,
+	0xd9, 0xc6, 0x1f, 0xab, 0xc6, 0x18, 0x50, 0x17,
+	0xa7, 0x9d, 0x3c, 0xa6, 0xc5, 0x35, 0x8c, 0x1c,
+	0xc0, 0xa1, 0x7c, 0x9f, 0x03, 0x89, 0xca, 0xe1,
+	0xe6, 0xe9, 0xd4, 0xd3, 0x88, 0xdb, 0xb4, 0x51,
+	0x9d, 0xec, 0xb4, 0xfc, 0x52, 0xee, 0x6d, 0xf1,
+	0x75, 0x42, 0xc6, 0xfd, 0xbd, 0x7a, 0x8e, 0x86,
+	0xfc, 0x44, 0xb3, 0x4f, 0xf3, 0xea, 0x67, 0x5a,
+	0x41, 0x13, 0xba, 0xb0, 0xdc, 0xe1, 0xd3, 0x2a,
+	0x7c, 0x22, 0xb3, 0xca, 0xac, 0x6a, 0x37, 0x98,
+	0x3e, 0x1d, 0x40, 0x97, 0xf7, 0x9b, 0x1d, 0x36,
+	0x6b, 0xb3, 0x28, 0xbd, 0x60, 0x82, 0x47, 0x34,
+	0xaa, 0x2f, 0x7d, 0xe9, 0xa8, 0x70, 0x81, 0x57,
+	0xd4, 0xb9, 0x77, 0x0a, 0x9d, 0x29, 0xa7, 0x84,
+	0x52, 0x4f, 0xc2, 0x4a, 0x40, 0x3b, 0x3c, 0xd4,
+	0xc9, 0x2a, 0xdb, 0x4a, 0x53, 0xc4, 0xbe, 0x80,
+	0xe9, 0x51, 0x7f, 0x8f, 0xc7, 0xa2, 0xce, 0x82,
+	0x5c, 0x91, 0x1e, 0x74, 0xd9, 0xd0, 0xbd, 0xd5,
+	0xf3, 0xfd, 0xda, 0x4d, 0x25, 0xb4, 0xbb, 0x2d,
+	0xac, 0x2f, 0x3d, 0x71, 0x85, 0x7b, 0xcf, 0x3c,
+	0x7b, 0x3e, 0x0e, 0x22, 0x78, 0x0c, 0x29, 0xbf,
+	0xe4, 0xf4, 0x57, 0xb3, 0xcb, 0x49, 0xa0, 0xfc,
+	0x1e, 0x05, 0x4e, 0x16, 0xbc, 0xd5, 0xa8, 0xa3,
+	0xee, 0x05, 0x35, 0xc6, 0x7c, 0xab, 0x60, 0x14,
+	0x55, 0x1a, 0x8e, 0xc5, 0x88, 0x5d, 0xd5, 0x81,
+	0xc2, 0x81, 0xa5, 0xc4, 0x60, 0xdb, 0xaf, 0x77,
+	0x91, 0xe1, 0xce, 0xa2, 0x7e, 0x7f, 0x42, 0xe3,
+	0xb0, 0x13, 0x1c, 0x1f, 0x25, 0x60, 0x21, 0xe2,
+	0x40, 0x5f, 0x99, 0xb7, 0x73, 0xec, 0x9b, 0x2b,
+	0xf0, 0x65, 0x11, 0xc8, 0xd0, 0x0a, 0x9f, 0xd3
+};
+static const u8 enc_output007[] __initconst = {
+	0x85, 0x04, 0xc2, 0xed, 0x8d, 0xfd, 0x97, 0x5c,
+	0xd2, 0xb7, 0xe2, 0xc1, 0x6b, 0xa3, 0xba, 0xf8,
+	0xc9, 0x50, 0xc3, 0xc6, 0xa5, 0xe3, 0xa4, 0x7c,
+	0xc3, 0x23, 0x49, 0x5e, 0xa9, 0xb9, 0x32, 0xeb,
+	0x8a, 0x7c, 0xca, 0xe5, 0xec, 0xfb, 0x7c, 0xc0,
+	0xcb, 0x7d, 0xdc, 0x2c, 0x9d, 0x92, 0x55, 0x21,
+	0x0a, 0xc8, 0x43, 0x63, 0x59, 0x0a, 0x31, 0x70,
+	0x82, 0x67, 0x41, 0x03, 0xf8, 0xdf, 0xf2, 0xac,
+	0xa7, 0x02, 0xd4, 0xd5, 0x8a, 0x2d, 0xc8, 0x99,
+	0x19, 0x66, 0xd0, 0xf6, 0x88, 0x2c, 0x77, 0xd9,
+	0xd4, 0x0d, 0x6c, 0xbd, 0x98, 0xde, 0xe7, 0x7f,
+	0xad, 0x7e, 0x8a, 0xfb, 0xe9, 0x4b, 0xe5, 0xf7,
+	0xe5, 0x50, 0xa0, 0x90, 0x3f, 0xd6, 0x22, 0x53,
+	0xe3, 0xfe, 0x1b, 0xcc, 0x79, 0x3b, 0xec, 0x12,
+	0x47, 0x52, 0xa7, 0xd6, 0x04, 0xe3, 0x52, 0xe6,
+	0x93, 0x90, 0x91, 0x32, 0x73, 0x79, 0xb8, 0xd0,
+	0x31, 0xde, 0x1f, 0x9f, 0x2f, 0x05, 0x38, 0x54,
+	0x2f, 0x35, 0x04, 0x39, 0xe0, 0xa7, 0xba, 0xc6,
+	0x52, 0xf6, 0x37, 0x65, 0x4c, 0x07, 0xa9, 0x7e,
+	0xb3, 0x21, 0x6f, 0x74, 0x8c, 0xc9, 0xde, 0xdb,
+	0x65, 0x1b, 0x9b, 0xaa, 0x60, 0xb1, 0x03, 0x30,
+	0x6b, 0xb2, 0x03, 0xc4, 0x1c, 0x04, 0xf8, 0x0f,
+	0x64, 0xaf, 0x46, 0xe4, 0x65, 0x99, 0x49, 0xe2,
+	0xea, 0xce, 0x78, 0x00, 0xd8, 0x8b, 0xd5, 0x2e,
+	0xcf, 0xfc, 0x40, 0x49, 0xe8, 0x58, 0xdc, 0x34,
+	0x9c, 0x8c, 0x61, 0xbf, 0x0a, 0x8e, 0xec, 0x39,
+	0xa9, 0x30, 0x05, 0x5a, 0xd2, 0x56, 0x01, 0xc7,
+	0xda, 0x8f, 0x4e, 0xbb, 0x43, 0xa3, 0x3a, 0xf9,
+	0x15, 0x2a, 0xd0, 0xa0, 0x7a, 0x87, 0x34, 0x82,
+	0xfe, 0x8a, 0xd1, 0x2d, 0x5e, 0xc7, 0xbf, 0x04,
+	0x53, 0x5f, 0x3b, 0x36, 0xd4, 0x25, 0x5c, 0x34,
+	0x7a, 0x8d, 0xd5, 0x05, 0xce, 0x72, 0xca, 0xef,
+	0x7a, 0x4b, 0xbc, 0xb0, 0x10, 0x5c, 0x96, 0x42,
+	0x3a, 0x00, 0x98, 0xcd, 0x15, 0xe8, 0xb7, 0x53
+};
+static const u8 enc_assoc007[] __initconst = { };
+static const u8 enc_nonce007[] __initconst = {
+	0xde, 0x7b, 0xef, 0xc3, 0x65, 0x1b, 0x68, 0xb0
+};
+static const u8 enc_key007[] __initconst = {
+	0x8d, 0xb8, 0x91, 0x48, 0xf0, 0xe7, 0x0a, 0xbd,
+	0xf9, 0x3f, 0xcd, 0xd9, 0xa0, 0x1e, 0x42, 0x4c,
+	0xe7, 0xde, 0x25, 0x3d, 0xa3, 0xd7, 0x05, 0x80,
+	0x8d, 0xf2, 0x82, 0xac, 0x44, 0x16, 0x51, 0x01
+};
+
+static const u8 enc_input008[] __initconst = {
+	0xc3, 0x09, 0x94, 0x62, 0xe6, 0x46, 0x2e, 0x10,
+	0xbe, 0x00, 0xe4, 0xfc, 0xf3, 0x40, 0xa3, 0xe2,
+	0x0f, 0xc2, 0x8b, 0x28, 0xdc, 0xba, 0xb4, 0x3c,
+	0xe4, 0x21, 0x58, 0x61, 0xcd, 0x8b, 0xcd, 0xfb,
+	0xac, 0x94, 0xa1, 0x45, 0xf5, 0x1c, 0xe1, 0x12,
+	0xe0, 0x3b, 0x67, 0x21, 0x54, 0x5e, 0x8c, 0xaa,
+	0xcf, 0xdb, 0xb4, 0x51, 0xd4, 0x13, 0xda, 0xe6,
+	0x83, 0x89, 0xb6, 0x92, 0xe9, 0x21, 0x76, 0xa4,
+	0x93, 0x7d, 0x0e, 0xfd, 0x96, 0x36, 0x03, 0x91,
+	0x43, 0x5c, 0x92, 0x49, 0x62, 0x61, 0x7b, 0xeb,
+	0x43, 0x89, 0xb8, 0x12, 0x20, 0x43, 0xd4, 0x47,
+	0x06, 0x84, 0xee, 0x47, 0xe9, 0x8a, 0x73, 0x15,
+	0x0f, 0x72, 0xcf, 0xed, 0xce, 0x96, 0xb2, 0x7f,
+	0x21, 0x45, 0x76, 0xeb, 0x26, 0x28, 0x83, 0x6a,
+	0xad, 0xaa, 0xa6, 0x81, 0xd8, 0x55, 0xb1, 0xa3,
+	0x85, 0xb3, 0x0c, 0xdf, 0xf1, 0x69, 0x2d, 0x97,
+	0x05, 0x2a, 0xbc, 0x7c, 0x7b, 0x25, 0xf8, 0x80,
+	0x9d, 0x39, 0x25, 0xf3, 0x62, 0xf0, 0x66, 0x5e,
+	0xf4, 0xa0, 0xcf, 0xd8, 0xfd, 0x4f, 0xb1, 0x1f,
+	0x60, 0x3a, 0x08, 0x47, 0xaf, 0xe1, 0xf6, 0x10,
+	0x77, 0x09, 0xa7, 0x27, 0x8f, 0x9a, 0x97, 0x5a,
+	0x26, 0xfa, 0xfe, 0x41, 0x32, 0x83, 0x10, 0xe0,
+	0x1d, 0xbf, 0x64, 0x0d, 0xf4, 0x1c, 0x32, 0x35,
+	0xe5, 0x1b, 0x36, 0xef, 0xd4, 0x4a, 0x93, 0x4d,
+	0x00, 0x7c, 0xec, 0x02, 0x07, 0x8b, 0x5d, 0x7d,
+	0x1b, 0x0e, 0xd1, 0xa6, 0xa5, 0x5d, 0x7d, 0x57,
+	0x88, 0xa8, 0xcc, 0x81, 0xb4, 0x86, 0x4e, 0xb4,
+	0x40, 0xe9, 0x1d, 0xc3, 0xb1, 0x24, 0x3e, 0x7f,
+	0xcc, 0x8a, 0x24, 0x9b, 0xdf, 0x6d, 0xf0, 0x39,
+	0x69, 0x3e, 0x4c, 0xc0, 0x96, 0xe4, 0x13, 0xda,
+	0x90, 0xda, 0xf4, 0x95, 0x66, 0x8b, 0x17, 0x17,
+	0xfe, 0x39, 0x43, 0x25, 0xaa, 0xda, 0xa0, 0x43,
+	0x3c, 0xb1, 0x41, 0x02, 0xa3, 0xf0, 0xa7, 0x19,
+	0x59, 0xbc, 0x1d, 0x7d, 0x6c, 0x6d, 0x91, 0x09,
+	0x5c, 0xb7, 0x5b, 0x01, 0xd1, 0x6f, 0x17, 0x21,
+	0x97, 0xbf, 0x89, 0x71, 0xa5, 0xb0, 0x6e, 0x07,
+	0x45, 0xfd, 0x9d, 0xea, 0x07, 0xf6, 0x7a, 0x9f,
+	0x10, 0x18, 0x22, 0x30, 0x73, 0xac, 0xd4, 0x6b,
+	0x72, 0x44, 0xed, 0xd9, 0x19, 0x9b, 0x2d, 0x4a,
+	0x41, 0xdd, 0xd1, 0x85, 0x5e, 0x37, 0x19, 0xed,
+	0xd2, 0x15, 0x8f, 0x5e, 0x91, 0xdb, 0x33, 0xf2,
+	0xe4, 0xdb, 0xff, 0x98, 0xfb, 0xa3, 0xb5, 0xca,
+	0x21, 0x69, 0x08, 0xe7, 0x8a, 0xdf, 0x90, 0xff,
+	0x3e, 0xe9, 0x20, 0x86, 0x3c, 0xe9, 0xfc, 0x0b,
+	0xfe, 0x5c, 0x61, 0xaa, 0x13, 0x92, 0x7f, 0x7b,
+	0xec, 0xe0, 0x6d, 0xa8, 0x23, 0x22, 0xf6, 0x6b,
+	0x77, 0xc4, 0xfe, 0x40, 0x07, 0x3b, 0xb6, 0xf6,
+	0x8e, 0x5f, 0xd4, 0xb9, 0xb7, 0x0f, 0x21, 0x04,
+	0xef, 0x83, 0x63, 0x91, 0x69, 0x40, 0xa3, 0x48,
+	0x5c, 0xd2, 0x60, 0xf9, 0x4f, 0x6c, 0x47, 0x8b,
+	0x3b, 0xb1, 0x9f, 0x8e, 0xee, 0x16, 0x8a, 0x13,
+	0xfc, 0x46, 0x17, 0xc3, 0xc3, 0x32, 0x56, 0xf8,
+	0x3c, 0x85, 0x3a, 0xb6, 0x3e, 0xaa, 0x89, 0x4f,
+	0xb3, 0xdf, 0x38, 0xfd, 0xf1, 0xe4, 0x3a, 0xc0,
+	0xe6, 0x58, 0xb5, 0x8f, 0xc5, 0x29, 0xa2, 0x92,
+	0x4a, 0xb6, 0xa0, 0x34, 0x7f, 0xab, 0xb5, 0x8a,
+	0x90, 0xa1, 0xdb, 0x4d, 0xca, 0xb6, 0x2c, 0x41,
+	0x3c, 0xf7, 0x2b, 0x21, 0xc3, 0xfd, 0xf4, 0x17,
+	0x5c, 0xb5, 0x33, 0x17, 0x68, 0x2b, 0x08, 0x30,
+	0xf3, 0xf7, 0x30, 0x3c, 0x96, 0xe6, 0x6a, 0x20,
+	0x97, 0xe7, 0x4d, 0x10, 0x5f, 0x47, 0x5f, 0x49,
+	0x96, 0x09, 0xf0, 0x27, 0x91, 0xc8, 0xf8, 0x5a,
+	0x2e, 0x79, 0xb5, 0xe2, 0xb8, 0xe8, 0xb9, 0x7b,
+	0xd5, 0x10, 0xcb, 0xff, 0x5d, 0x14, 0x73, 0xf3
+};
+static const u8 enc_output008[] __initconst = {
+	0x14, 0xf6, 0x41, 0x37, 0xa6, 0xd4, 0x27, 0xcd,
+	0xdb, 0x06, 0x3e, 0x9a, 0x4e, 0xab, 0xd5, 0xb1,
+	0x1e, 0x6b, 0xd2, 0xbc, 0x11, 0xf4, 0x28, 0x93,
+	0x63, 0x54, 0xef, 0xbb, 0x5e, 0x1d, 0x3a, 0x1d,
+	0x37, 0x3c, 0x0a, 0x6c, 0x1e, 0xc2, 0xd1, 0x2c,
+	0xb5, 0xa3, 0xb5, 0x7b, 0xb8, 0x8f, 0x25, 0xa6,
+	0x1b, 0x61, 0x1c, 0xec, 0x28, 0x58, 0x26, 0xa4,
+	0xa8, 0x33, 0x28, 0x25, 0x5c, 0x45, 0x05, 0xe5,
+	0x6c, 0x99, 0xe5, 0x45, 0xc4, 0xa2, 0x03, 0x84,
+	0x03, 0x73, 0x1e, 0x8c, 0x49, 0xac, 0x20, 0xdd,
+	0x8d, 0xb3, 0xc4, 0xf5, 0xe7, 0x4f, 0xf1, 0xed,
+	0xa1, 0x98, 0xde, 0xa4, 0x96, 0xdd, 0x2f, 0xab,
+	0xab, 0x97, 0xcf, 0x3e, 0xd2, 0x9e, 0xb8, 0x13,
+	0x07, 0x28, 0x29, 0x19, 0xaf, 0xfd, 0xf2, 0x49,
+	0x43, 0xea, 0x49, 0x26, 0x91, 0xc1, 0x07, 0xd6,
+	0xbb, 0x81, 0x75, 0x35, 0x0d, 0x24, 0x7f, 0xc8,
+	0xda, 0xd4, 0xb7, 0xeb, 0xe8, 0x5c, 0x09, 0xa2,
+	0x2f, 0xdc, 0x28, 0x7d, 0x3a, 0x03, 0xfa, 0x94,
+	0xb5, 0x1d, 0x17, 0x99, 0x36, 0xc3, 0x1c, 0x18,
+	0x34, 0xe3, 0x9f, 0xf5, 0x55, 0x7c, 0xb0, 0x60,
+	0x9d, 0xff, 0xac, 0xd4, 0x61, 0xf2, 0xad, 0xf8,
+	0xce, 0xc7, 0xbe, 0x5c, 0xd2, 0x95, 0xa8, 0x4b,
+	0x77, 0x13, 0x19, 0x59, 0x26, 0xc9, 0xb7, 0x8f,
+	0x6a, 0xcb, 0x2d, 0x37, 0x91, 0xea, 0x92, 0x9c,
+	0x94, 0x5b, 0xda, 0x0b, 0xce, 0xfe, 0x30, 0x20,
+	0xf8, 0x51, 0xad, 0xf2, 0xbe, 0xe7, 0xc7, 0xff,
+	0xb3, 0x33, 0x91, 0x6a, 0xc9, 0x1a, 0x41, 0xc9,
+	0x0f, 0xf3, 0x10, 0x0e, 0xfd, 0x53, 0xff, 0x6c,
+	0x16, 0x52, 0xd9, 0xf3, 0xf7, 0x98, 0x2e, 0xc9,
+	0x07, 0x31, 0x2c, 0x0c, 0x72, 0xd7, 0xc5, 0xc6,
+	0x08, 0x2a, 0x7b, 0xda, 0xbd, 0x7e, 0x02, 0xea,
+	0x1a, 0xbb, 0xf2, 0x04, 0x27, 0x61, 0x28, 0x8e,
+	0xf5, 0x04, 0x03, 0x1f, 0x4c, 0x07, 0x55, 0x82,
+	0xec, 0x1e, 0xd7, 0x8b, 0x2f, 0x65, 0x56, 0xd1,
+	0xd9, 0x1e, 0x3c, 0xe9, 0x1f, 0x5e, 0x98, 0x70,
+	0x38, 0x4a, 0x8c, 0x49, 0xc5, 0x43, 0xa0, 0xa1,
+	0x8b, 0x74, 0x9d, 0x4c, 0x62, 0x0d, 0x10, 0x0c,
+	0xf4, 0x6c, 0x8f, 0xe0, 0xaa, 0x9a, 0x8d, 0xb7,
+	0xe0, 0xbe, 0x4c, 0x87, 0xf1, 0x98, 0x2f, 0xcc,
+	0xed, 0xc0, 0x52, 0x29, 0xdc, 0x83, 0xf8, 0xfc,
+	0x2c, 0x0e, 0xa8, 0x51, 0x4d, 0x80, 0x0d, 0xa3,
+	0xfe, 0xd8, 0x37, 0xe7, 0x41, 0x24, 0xfc, 0xfb,
+	0x75, 0xe3, 0x71, 0x7b, 0x57, 0x45, 0xf5, 0x97,
+	0x73, 0x65, 0x63, 0x14, 0x74, 0xb8, 0x82, 0x9f,
+	0xf8, 0x60, 0x2f, 0x8a, 0xf2, 0x4e, 0xf1, 0x39,
+	0xda, 0x33, 0x91, 0xf8, 0x36, 0xe0, 0x8d, 0x3f,
+	0x1f, 0x3b, 0x56, 0xdc, 0xa0, 0x8f, 0x3c, 0x9d,
+	0x71, 0x52, 0xa7, 0xb8, 0xc0, 0xa5, 0xc6, 0xa2,
+	0x73, 0xda, 0xf4, 0x4b, 0x74, 0x5b, 0x00, 0x3d,
+	0x99, 0xd7, 0x96, 0xba, 0xe6, 0xe1, 0xa6, 0x96,
+	0x38, 0xad, 0xb3, 0xc0, 0xd2, 0xba, 0x91, 0x6b,
+	0xf9, 0x19, 0xdd, 0x3b, 0xbe, 0xbe, 0x9c, 0x20,
+	0x50, 0xba, 0xa1, 0xd0, 0xce, 0x11, 0xbd, 0x95,
+	0xd8, 0xd1, 0xdd, 0x33, 0x85, 0x74, 0xdc, 0xdb,
+	0x66, 0x76, 0x44, 0xdc, 0x03, 0x74, 0x48, 0x35,
+	0x98, 0xb1, 0x18, 0x47, 0x94, 0x7d, 0xff, 0x62,
+	0xe4, 0x58, 0x78, 0xab, 0xed, 0x95, 0x36, 0xd9,
+	0x84, 0x91, 0x82, 0x64, 0x41, 0xbb, 0x58, 0xe6,
+	0x1c, 0x20, 0x6d, 0x15, 0x6b, 0x13, 0x96, 0xe8,
+	0x35, 0x7f, 0xdc, 0x40, 0x2c, 0xe9, 0xbc, 0x8a,
+	0x4f, 0x92, 0xec, 0x06, 0x2d, 0x50, 0xdf, 0x93,
+	0x5d, 0x65, 0x5a, 0xa8, 0xfc, 0x20, 0x50, 0x14,
+	0xa9, 0x8a, 0x7e, 0x1d, 0x08, 0x1f, 0xe2, 0x99,
+	0xd0, 0xbe, 0xfb, 0x3a, 0x21, 0x9d, 0xad, 0x86,
+	0x54, 0xfd, 0x0d, 0x98, 0x1c, 0x5a, 0x6f, 0x1f,
+	0x9a, 0x40, 0xcd, 0xa2, 0xff, 0x6a, 0xf1, 0x54
+};
+static const u8 enc_assoc008[] __initconst = { };
+static const u8 enc_nonce008[] __initconst = {
+	0x0e, 0x0d, 0x57, 0xbb, 0x7b, 0x40, 0x54, 0x02
+};
+static const u8 enc_key008[] __initconst = {
+	0xf2, 0xaa, 0x4f, 0x99, 0xfd, 0x3e, 0xa8, 0x53,
+	0xc1, 0x44, 0xe9, 0x81, 0x18, 0xdc, 0xf5, 0xf0,
+	0x3e, 0x44, 0x15, 0x59, 0xe0, 0xc5, 0x44, 0x86,
+	0xc3, 0x91, 0xa8, 0x75, 0xc0, 0x12, 0x46, 0xba
+};
+
+static const u8 enc_input009[] __initconst = {
+	0xe6, 0xc3, 0xdb, 0x63, 0x55, 0x15, 0xe3, 0x5b,
+	0xb7, 0x4b, 0x27, 0x8b, 0x5a, 0xdd, 0xc2, 0xe8,
+	0x3a, 0x6b, 0xd7, 0x81, 0x96, 0x35, 0x97, 0xca,
+	0xd7, 0x68, 0xe8, 0xef, 0xce, 0xab, 0xda, 0x09,
+	0x6e, 0xd6, 0x8e, 0xcb, 0x55, 0xb5, 0xe1, 0xe5,
+	0x57, 0xfd, 0xc4, 0xe3, 0xe0, 0x18, 0x4f, 0x85,
+	0xf5, 0x3f, 0x7e, 0x4b, 0x88, 0xc9, 0x52, 0x44,
+	0x0f, 0xea, 0xaf, 0x1f, 0x71, 0x48, 0x9f, 0x97,
+	0x6d, 0xb9, 0x6f, 0x00, 0xa6, 0xde, 0x2b, 0x77,
+	0x8b, 0x15, 0xad, 0x10, 0xa0, 0x2b, 0x7b, 0x41,
+	0x90, 0x03, 0x2d, 0x69, 0xae, 0xcc, 0x77, 0x7c,
+	0xa5, 0x9d, 0x29, 0x22, 0xc2, 0xea, 0xb4, 0x00,
+	0x1a, 0xd2, 0x7a, 0x98, 0x8a, 0xf9, 0xf7, 0x82,
+	0xb0, 0xab, 0xd8, 0xa6, 0x94, 0x8d, 0x58, 0x2f,
+	0x01, 0x9e, 0x00, 0x20, 0xfc, 0x49, 0xdc, 0x0e,
+	0x03, 0xe8, 0x45, 0x10, 0xd6, 0xa8, 0xda, 0x55,
+	0x10, 0x9a, 0xdf, 0x67, 0x22, 0x8b, 0x43, 0xab,
+	0x00, 0xbb, 0x02, 0xc8, 0xdd, 0x7b, 0x97, 0x17,
+	0xd7, 0x1d, 0x9e, 0x02, 0x5e, 0x48, 0xde, 0x8e,
+	0xcf, 0x99, 0x07, 0x95, 0x92, 0x3c, 0x5f, 0x9f,
+	0xc5, 0x8a, 0xc0, 0x23, 0xaa, 0xd5, 0x8c, 0x82,
+	0x6e, 0x16, 0x92, 0xb1, 0x12, 0x17, 0x07, 0xc3,
+	0xfb, 0x36, 0xf5, 0x6c, 0x35, 0xd6, 0x06, 0x1f,
+	0x9f, 0xa7, 0x94, 0xa2, 0x38, 0x63, 0x9c, 0xb0,
+	0x71, 0xb3, 0xa5, 0xd2, 0xd8, 0xba, 0x9f, 0x08,
+	0x01, 0xb3, 0xff, 0x04, 0x97, 0x73, 0x45, 0x1b,
+	0xd5, 0xa9, 0x9c, 0x80, 0xaf, 0x04, 0x9a, 0x85,
+	0xdb, 0x32, 0x5b, 0x5d, 0x1a, 0xc1, 0x36, 0x28,
+	0x10, 0x79, 0xf1, 0x3c, 0xbf, 0x1a, 0x41, 0x5c,
+	0x4e, 0xdf, 0xb2, 0x7c, 0x79, 0x3b, 0x7a, 0x62,
+	0x3d, 0x4b, 0xc9, 0x9b, 0x2a, 0x2e, 0x7c, 0xa2,
+	0xb1, 0x11, 0x98, 0xa7, 0x34, 0x1a, 0x00, 0xf3,
+	0xd1, 0xbc, 0x18, 0x22, 0xba, 0x02, 0x56, 0x62,
+	0x31, 0x10, 0x11, 0x6d, 0xe0, 0x54, 0x9d, 0x40,
+	0x1f, 0x26, 0x80, 0x41, 0xca, 0x3f, 0x68, 0x0f,
+	0x32, 0x1d, 0x0a, 0x8e, 0x79, 0xd8, 0xa4, 0x1b,
+	0x29, 0x1c, 0x90, 0x8e, 0xc5, 0xe3, 0xb4, 0x91,
+	0x37, 0x9a, 0x97, 0x86, 0x99, 0xd5, 0x09, 0xc5,
+	0xbb, 0xa3, 0x3f, 0x21, 0x29, 0x82, 0x14, 0x5c,
+	0xab, 0x25, 0xfb, 0xf2, 0x4f, 0x58, 0x26, 0xd4,
+	0x83, 0xaa, 0x66, 0x89, 0x67, 0x7e, 0xc0, 0x49,
+	0xe1, 0x11, 0x10, 0x7f, 0x7a, 0xda, 0x29, 0x04,
+	0xff, 0xf0, 0xcb, 0x09, 0x7c, 0x9d, 0xfa, 0x03,
+	0x6f, 0x81, 0x09, 0x31, 0x60, 0xfb, 0x08, 0xfa,
+	0x74, 0xd3, 0x64, 0x44, 0x7c, 0x55, 0x85, 0xec,
+	0x9c, 0x6e, 0x25, 0xb7, 0x6c, 0xc5, 0x37, 0xb6,
+	0x83, 0x87, 0x72, 0x95, 0x8b, 0x9d, 0xe1, 0x69,
+	0x5c, 0x31, 0x95, 0x42, 0xa6, 0x2c, 0xd1, 0x36,
+	0x47, 0x1f, 0xec, 0x54, 0xab, 0xa2, 0x1c, 0xd8,
+	0x00, 0xcc, 0xbc, 0x0d, 0x65, 0xe2, 0x67, 0xbf,
+	0xbc, 0xea, 0xee, 0x9e, 0xe4, 0x36, 0x95, 0xbe,
+	0x73, 0xd9, 0xa6, 0xd9, 0x0f, 0xa0, 0xcc, 0x82,
+	0x76, 0x26, 0xad, 0x5b, 0x58, 0x6c, 0x4e, 0xab,
+	0x29, 0x64, 0xd3, 0xd9, 0xa9, 0x08, 0x8c, 0x1d,
+	0xa1, 0x4f, 0x80, 0xd8, 0x3f, 0x94, 0xfb, 0xd3,
+	0x7b, 0xfc, 0xd1, 0x2b, 0xc3, 0x21, 0xeb, 0xe5,
+	0x1c, 0x84, 0x23, 0x7f, 0x4b, 0xfa, 0xdb, 0x34,
+	0x18, 0xa2, 0xc2, 0xe5, 0x13, 0xfe, 0x6c, 0x49,
+	0x81, 0xd2, 0x73, 0xe7, 0xe2, 0xd7, 0xe4, 0x4f,
+	0x4b, 0x08, 0x6e, 0xb1, 0x12, 0x22, 0x10, 0x9d,
+	0xac, 0x51, 0x1e, 0x17, 0xd9, 0x8a, 0x0b, 0x42,
+	0x88, 0x16, 0x81, 0x37, 0x7c, 0x6a, 0xf7, 0xef,
+	0x2d, 0xe3, 0xd9, 0xf8, 0x5f, 0xe0, 0x53, 0x27,
+	0x74, 0xb9, 0xe2, 0xd6, 0x1c, 0x80, 0x2c, 0x52,
+	0x65
+};
+static const u8 enc_output009[] __initconst = {
+	0xfd, 0x81, 0x8d, 0xd0, 0x3d, 0xb4, 0xd5, 0xdf,
+	0xd3, 0x42, 0x47, 0x5a, 0x6d, 0x19, 0x27, 0x66,
+	0x4b, 0x2e, 0x0c, 0x27, 0x9c, 0x96, 0x4c, 0x72,
+	0x02, 0xa3, 0x65, 0xc3, 0xb3, 0x6f, 0x2e, 0xbd,
+	0x63, 0x8a, 0x4a, 0x5d, 0x29, 0xa2, 0xd0, 0x28,
+	0x48, 0xc5, 0x3d, 0x98, 0xa3, 0xbc, 0xe0, 0xbe,
+	0x3b, 0x3f, 0xe6, 0x8a, 0xa4, 0x7f, 0x53, 0x06,
+	0xfa, 0x7f, 0x27, 0x76, 0x72, 0x31, 0xa1, 0xf5,
+	0xd6, 0x0c, 0x52, 0x47, 0xba, 0xcd, 0x4f, 0xd7,
+	0xeb, 0x05, 0x48, 0x0d, 0x7c, 0x35, 0x4a, 0x09,
+	0xc9, 0x76, 0x71, 0x02, 0xa3, 0xfb, 0xb7, 0x1a,
+	0x65, 0xb7, 0xed, 0x98, 0xc6, 0x30, 0x8a, 0x00,
+	0xae, 0xa1, 0x31, 0xe5, 0xb5, 0x9e, 0x6d, 0x62,
+	0xda, 0xda, 0x07, 0x0f, 0x38, 0x38, 0xd3, 0xcb,
+	0xc1, 0xb0, 0xad, 0xec, 0x72, 0xec, 0xb1, 0xa2,
+	0x7b, 0x59, 0xf3, 0x3d, 0x2b, 0xef, 0xcd, 0x28,
+	0x5b, 0x83, 0xcc, 0x18, 0x91, 0x88, 0xb0, 0x2e,
+	0xf9, 0x29, 0x31, 0x18, 0xf9, 0x4e, 0xe9, 0x0a,
+	0x91, 0x92, 0x9f, 0xae, 0x2d, 0xad, 0xf4, 0xe6,
+	0x1a, 0xe2, 0xa4, 0xee, 0x47, 0x15, 0xbf, 0x83,
+	0x6e, 0xd7, 0x72, 0x12, 0x3b, 0x2d, 0x24, 0xe9,
+	0xb2, 0x55, 0xcb, 0x3c, 0x10, 0xf0, 0x24, 0x8a,
+	0x4a, 0x02, 0xea, 0x90, 0x25, 0xf0, 0xb4, 0x79,
+	0x3a, 0xef, 0x6e, 0xf5, 0x52, 0xdf, 0xb0, 0x0a,
+	0xcd, 0x24, 0x1c, 0xd3, 0x2e, 0x22, 0x74, 0xea,
+	0x21, 0x6f, 0xe9, 0xbd, 0xc8, 0x3e, 0x36, 0x5b,
+	0x19, 0xf1, 0xca, 0x99, 0x0a, 0xb4, 0xa7, 0x52,
+	0x1a, 0x4e, 0xf2, 0xad, 0x8d, 0x56, 0x85, 0xbb,
+	0x64, 0x89, 0xba, 0x26, 0xf9, 0xc7, 0xe1, 0x89,
+	0x19, 0x22, 0x77, 0xc3, 0xa8, 0xfc, 0xff, 0xad,
+	0xfe, 0xb9, 0x48, 0xae, 0x12, 0x30, 0x9f, 0x19,
+	0xfb, 0x1b, 0xef, 0x14, 0x87, 0x8a, 0x78, 0x71,
+	0xf3, 0xf4, 0xb7, 0x00, 0x9c, 0x1d, 0xb5, 0x3d,
+	0x49, 0x00, 0x0c, 0x06, 0xd4, 0x50, 0xf9, 0x54,
+	0x45, 0xb2, 0x5b, 0x43, 0xdb, 0x6d, 0xcf, 0x1a,
+	0xe9, 0x7a, 0x7a, 0xcf, 0xfc, 0x8a, 0x4e, 0x4d,
+	0x0b, 0x07, 0x63, 0x28, 0xd8, 0xe7, 0x08, 0x95,
+	0xdf, 0xa6, 0x72, 0x93, 0x2e, 0xbb, 0xa0, 0x42,
+	0x89, 0x16, 0xf1, 0xd9, 0x0c, 0xf9, 0xa1, 0x16,
+	0xfd, 0xd9, 0x03, 0xb4, 0x3b, 0x8a, 0xf5, 0xf6,
+	0xe7, 0x6b, 0x2e, 0x8e, 0x4c, 0x3d, 0xe2, 0xaf,
+	0x08, 0x45, 0x03, 0xff, 0x09, 0xb6, 0xeb, 0x2d,
+	0xc6, 0x1b, 0x88, 0x94, 0xac, 0x3e, 0xf1, 0x9f,
+	0x0e, 0x0e, 0x2b, 0xd5, 0x00, 0x4d, 0x3f, 0x3b,
+	0x53, 0xae, 0xaf, 0x1c, 0x33, 0x5f, 0x55, 0x6e,
+	0x8d, 0xaf, 0x05, 0x7a, 0x10, 0x34, 0xc9, 0xf4,
+	0x66, 0xcb, 0x62, 0x12, 0xa6, 0xee, 0xe8, 0x1c,
+	0x5d, 0x12, 0x86, 0xdb, 0x6f, 0x1c, 0x33, 0xc4,
+	0x1c, 0xda, 0x82, 0x2d, 0x3b, 0x59, 0xfe, 0xb1,
+	0xa4, 0x59, 0x41, 0x86, 0xd0, 0xef, 0xae, 0xfb,
+	0xda, 0x6d, 0x11, 0xb8, 0xca, 0xe9, 0x6e, 0xff,
+	0xf7, 0xa9, 0xd9, 0x70, 0x30, 0xfc, 0x53, 0xe2,
+	0xd7, 0xa2, 0x4e, 0xc7, 0x91, 0xd9, 0x07, 0x06,
+	0xaa, 0xdd, 0xb0, 0x59, 0x28, 0x1d, 0x00, 0x66,
+	0xc5, 0x54, 0xc2, 0xfc, 0x06, 0xda, 0x05, 0x90,
+	0x52, 0x1d, 0x37, 0x66, 0xee, 0xf0, 0xb2, 0x55,
+	0x8a, 0x5d, 0xd2, 0x38, 0x86, 0x94, 0x9b, 0xfc,
+	0x10, 0x4c, 0xa1, 0xb9, 0x64, 0x3e, 0x44, 0xb8,
+	0x5f, 0xb0, 0x0c, 0xec, 0xe0, 0xc9, 0xe5, 0x62,
+	0x75, 0x3f, 0x09, 0xd5, 0xf5, 0xd9, 0x26, 0xba,
+	0x9e, 0xd2, 0xf4, 0xb9, 0x48, 0x0a, 0xbc, 0xa2,
+	0xd6, 0x7c, 0x36, 0x11, 0x7d, 0x26, 0x81, 0x89,
+	0xcf, 0xa4, 0xad, 0x73, 0x0e, 0xee, 0xcc, 0x06,
+	0xa9, 0xdb, 0xb1, 0xfd, 0xfb, 0x09, 0x7f, 0x90,
+	0x42, 0x37, 0x2f, 0xe1, 0x9c, 0x0f, 0x6f, 0xcf,
+	0x43, 0xb5, 0xd9, 0x90, 0xe1, 0x85, 0xf5, 0xa8,
+	0xae
+};
+static const u8 enc_assoc009[] __initconst = {
+	0x5a, 0x27, 0xff, 0xeb, 0xdf, 0x84, 0xb2, 0x9e,
+	0xef
+};
+static const u8 enc_nonce009[] __initconst = {
+	0xef, 0x2d, 0x63, 0xee, 0x6b, 0x80, 0x8b, 0x78
+};
+static const u8 enc_key009[] __initconst = {
+	0xea, 0xbc, 0x56, 0x99, 0xe3, 0x50, 0xff, 0xc5,
+	0xcc, 0x1a, 0xd7, 0xc1, 0x57, 0x72, 0xea, 0x86,
+	0x5b, 0x89, 0x88, 0x61, 0x3d, 0x2f, 0x9b, 0xb2,
+	0xe7, 0x9c, 0xec, 0x74, 0x6e, 0x3e, 0xf4, 0x3b
+};
+
+static const u8 enc_input010[] __initconst = {
+	0x42, 0x93, 0xe4, 0xeb, 0x97, 0xb0, 0x57, 0xbf,
+	0x1a, 0x8b, 0x1f, 0xe4, 0x5f, 0x36, 0x20, 0x3c,
+	0xef, 0x0a, 0xa9, 0x48, 0x5f, 0x5f, 0x37, 0x22,
+	0x3a, 0xde, 0xe3, 0xae, 0xbe, 0xad, 0x07, 0xcc,
+	0xb1, 0xf6, 0xf5, 0xf9, 0x56, 0xdd, 0xe7, 0x16,
+	0x1e, 0x7f, 0xdf, 0x7a, 0x9e, 0x75, 0xb7, 0xc7,
+	0xbe, 0xbe, 0x8a, 0x36, 0x04, 0xc0, 0x10, 0xf4,
+	0x95, 0x20, 0x03, 0xec, 0xdc, 0x05, 0xa1, 0x7d,
+	0xc4, 0xa9, 0x2c, 0x82, 0xd0, 0xbc, 0x8b, 0xc5,
+	0xc7, 0x45, 0x50, 0xf6, 0xa2, 0x1a, 0xb5, 0x46,
+	0x3b, 0x73, 0x02, 0xa6, 0x83, 0x4b, 0x73, 0x82,
+	0x58, 0x5e, 0x3b, 0x65, 0x2f, 0x0e, 0xfd, 0x2b,
+	0x59, 0x16, 0xce, 0xa1, 0x60, 0x9c, 0xe8, 0x3a,
+	0x99, 0xed, 0x8d, 0x5a, 0xcf, 0xf6, 0x83, 0xaf,
+	0xba, 0xd7, 0x73, 0x73, 0x40, 0x97, 0x3d, 0xca,
+	0xef, 0x07, 0x57, 0xe6, 0xd9, 0x70, 0x0e, 0x95,
+	0xae, 0xa6, 0x8d, 0x04, 0xcc, 0xee, 0xf7, 0x09,
+	0x31, 0x77, 0x12, 0xa3, 0x23, 0x97, 0x62, 0xb3,
+	0x7b, 0x32, 0xfb, 0x80, 0x14, 0x48, 0x81, 0xc3,
+	0xe5, 0xea, 0x91, 0x39, 0x52, 0x81, 0xa2, 0x4f,
+	0xe4, 0xb3, 0x09, 0xff, 0xde, 0x5e, 0xe9, 0x58,
+	0x84, 0x6e, 0xf9, 0x3d, 0xdf, 0x25, 0xea, 0xad,
+	0xae, 0xe6, 0x9a, 0xd1, 0x89, 0x55, 0xd3, 0xde,
+	0x6c, 0x52, 0xdb, 0x70, 0xfe, 0x37, 0xce, 0x44,
+	0x0a, 0xa8, 0x25, 0x5f, 0x92, 0xc1, 0x33, 0x4a,
+	0x4f, 0x9b, 0x62, 0x35, 0xff, 0xce, 0xc0, 0xa9,
+	0x60, 0xce, 0x52, 0x00, 0x97, 0x51, 0x35, 0x26,
+	0x2e, 0xb9, 0x36, 0xa9, 0x87, 0x6e, 0x1e, 0xcc,
+	0x91, 0x78, 0x53, 0x98, 0x86, 0x5b, 0x9c, 0x74,
+	0x7d, 0x88, 0x33, 0xe1, 0xdf, 0x37, 0x69, 0x2b,
+	0xbb, 0xf1, 0x4d, 0xf4, 0xd1, 0xf1, 0x39, 0x93,
+	0x17, 0x51, 0x19, 0xe3, 0x19, 0x1e, 0x76, 0x37,
+	0x25, 0xfb, 0x09, 0x27, 0x6a, 0xab, 0x67, 0x6f,
+	0x14, 0x12, 0x64, 0xe7, 0xc4, 0x07, 0xdf, 0x4d,
+	0x17, 0xbb, 0x6d, 0xe0, 0xe9, 0xb9, 0xab, 0xca,
+	0x10, 0x68, 0xaf, 0x7e, 0xb7, 0x33, 0x54, 0x73,
+	0x07, 0x6e, 0xf7, 0x81, 0x97, 0x9c, 0x05, 0x6f,
+	0x84, 0x5f, 0xd2, 0x42, 0xfb, 0x38, 0xcf, 0xd1,
+	0x2f, 0x14, 0x30, 0x88, 0x98, 0x4d, 0x5a, 0xa9,
+	0x76, 0xd5, 0x4f, 0x3e, 0x70, 0x6c, 0x85, 0x76,
+	0xd7, 0x01, 0xa0, 0x1a, 0xc8, 0x4e, 0xaa, 0xac,
+	0x78, 0xfe, 0x46, 0xde, 0x6a, 0x05, 0x46, 0xa7,
+	0x43, 0x0c, 0xb9, 0xde, 0xb9, 0x68, 0xfb, 0xce,
+	0x42, 0x99, 0x07, 0x4d, 0x0b, 0x3b, 0x5a, 0x30,
+	0x35, 0xa8, 0xf9, 0x3a, 0x73, 0xef, 0x0f, 0xdb,
+	0x1e, 0x16, 0x42, 0xc4, 0xba, 0xae, 0x58, 0xaa,
+	0xf8, 0xe5, 0x75, 0x2f, 0x1b, 0x15, 0x5c, 0xfd,
+	0x0a, 0x97, 0xd0, 0xe4, 0x37, 0x83, 0x61, 0x5f,
+	0x43, 0xa6, 0xc7, 0x3f, 0x38, 0x59, 0xe6, 0xeb,
+	0xa3, 0x90, 0xc3, 0xaa, 0xaa, 0x5a, 0xd3, 0x34,
+	0xd4, 0x17, 0xc8, 0x65, 0x3e, 0x57, 0xbc, 0x5e,
+	0xdd, 0x9e, 0xb7, 0xf0, 0x2e, 0x5b, 0xb2, 0x1f,
+	0x8a, 0x08, 0x0d, 0x45, 0x91, 0x0b, 0x29, 0x53,
+	0x4f, 0x4c, 0x5a, 0x73, 0x56, 0xfe, 0xaf, 0x41,
+	0x01, 0x39, 0x0a, 0x24, 0x3c, 0x7e, 0xbe, 0x4e,
+	0x53, 0xf3, 0xeb, 0x06, 0x66, 0x51, 0x28, 0x1d,
+	0xbd, 0x41, 0x0a, 0x01, 0xab, 0x16, 0x47, 0x27,
+	0x47, 0x47, 0xf7, 0xcb, 0x46, 0x0a, 0x70, 0x9e,
+	0x01, 0x9c, 0x09, 0xe1, 0x2a, 0x00, 0x1a, 0xd8,
+	0xd4, 0x79, 0x9d, 0x80, 0x15, 0x8e, 0x53, 0x2a,
+	0x65, 0x83, 0x78, 0x3e, 0x03, 0x00, 0x07, 0x12,
+	0x1f, 0x33, 0x3e, 0x7b, 0x13, 0x37, 0xf1, 0xc3,
+	0xef, 0xb7, 0xc1, 0x20, 0x3c, 0x3e, 0x67, 0x66,
+	0x5d, 0x88, 0xa7, 0x7d, 0x33, 0x50, 0x77, 0xb0,
+	0x28, 0x8e, 0xe7, 0x2c, 0x2e, 0x7a, 0xf4, 0x3c,
+	0x8d, 0x74, 0x83, 0xaf, 0x8e, 0x87, 0x0f, 0xe4,
+	0x50, 0xff, 0x84, 0x5c, 0x47, 0x0c, 0x6a, 0x49,
+	0xbf, 0x42, 0x86, 0x77, 0x15, 0x48, 0xa5, 0x90,
+	0x5d, 0x93, 0xd6, 0x2a, 0x11, 0xd5, 0xd5, 0x11,
+	0xaa, 0xce, 0xe7, 0x6f, 0xa5, 0xb0, 0x09, 0x2c,
+	0x8d, 0xd3, 0x92, 0xf0, 0x5a, 0x2a, 0xda, 0x5b,
+	0x1e, 0xd5, 0x9a, 0xc4, 0xc4, 0xf3, 0x49, 0x74,
+	0x41, 0xca, 0xe8, 0xc1, 0xf8, 0x44, 0xd6, 0x3c,
+	0xae, 0x6c, 0x1d, 0x9a, 0x30, 0x04, 0x4d, 0x27,
+	0x0e, 0xb1, 0x5f, 0x59, 0xa2, 0x24, 0xe8, 0xe1,
+	0x98, 0xc5, 0x6a, 0x4c, 0xfe, 0x41, 0xd2, 0x27,
+	0x42, 0x52, 0xe1, 0xe9, 0x7d, 0x62, 0xe4, 0x88,
+	0x0f, 0xad, 0xb2, 0x70, 0xcb, 0x9d, 0x4c, 0x27,
+	0x2e, 0x76, 0x1e, 0x1a, 0x63, 0x65, 0xf5, 0x3b,
+	0xf8, 0x57, 0x69, 0xeb, 0x5b, 0x38, 0x26, 0x39,
+	0x33, 0x25, 0x45, 0x3e, 0x91, 0xb8, 0xd8, 0xc7,
+	0xd5, 0x42, 0xc0, 0x22, 0x31, 0x74, 0xf4, 0xbc,
+	0x0c, 0x23, 0xf1, 0xca, 0xc1, 0x8d, 0xd7, 0xbe,
+	0xc9, 0x62, 0xe4, 0x08, 0x1a, 0xcf, 0x36, 0xd5,
+	0xfe, 0x55, 0x21, 0x59, 0x91, 0x87, 0x87, 0xdf,
+	0x06, 0xdb, 0xdf, 0x96, 0x45, 0x58, 0xda, 0x05,
+	0xcd, 0x50, 0x4d, 0xd2, 0x7d, 0x05, 0x18, 0x73,
+	0x6a, 0x8d, 0x11, 0x85, 0xa6, 0x88, 0xe8, 0xda,
+	0xe6, 0x30, 0x33, 0xa4, 0x89, 0x31, 0x75, 0xbe,
+	0x69, 0x43, 0x84, 0x43, 0x50, 0x87, 0xdd, 0x71,
+	0x36, 0x83, 0xc3, 0x78, 0x74, 0x24, 0x0a, 0xed,
+	0x7b, 0xdb, 0xa4, 0x24, 0x0b, 0xb9, 0x7e, 0x5d,
+	0xff, 0xde, 0xb1, 0xef, 0x61, 0x5a, 0x45, 0x33,
+	0xf6, 0x17, 0x07, 0x08, 0x98, 0x83, 0x92, 0x0f,
+	0x23, 0x6d, 0xe6, 0xaa, 0x17, 0x54, 0xad, 0x6a,
+	0xc8, 0xdb, 0x26, 0xbe, 0xb8, 0xb6, 0x08, 0xfa,
+	0x68, 0xf1, 0xd7, 0x79, 0x6f, 0x18, 0xb4, 0x9e,
+	0x2d, 0x3f, 0x1b, 0x64, 0xaf, 0x8d, 0x06, 0x0e,
+	0x49, 0x28, 0xe0, 0x5d, 0x45, 0x68, 0x13, 0x87,
+	0xfa, 0xde, 0x40, 0x7b, 0xd2, 0xc3, 0x94, 0xd5,
+	0xe1, 0xd9, 0xc2, 0xaf, 0x55, 0x89, 0xeb, 0xb4,
+	0x12, 0x59, 0xa8, 0xd4, 0xc5, 0x29, 0x66, 0x38,
+	0xe6, 0xac, 0x22, 0x22, 0xd9, 0x64, 0x9b, 0x34,
+	0x0a, 0x32, 0x9f, 0xc2, 0xbf, 0x17, 0x6c, 0x3f,
+	0x71, 0x7a, 0x38, 0x6b, 0x98, 0xfb, 0x49, 0x36,
+	0x89, 0xc9, 0xe2, 0xd6, 0xc7, 0x5d, 0xd0, 0x69,
+	0x5f, 0x23, 0x35, 0xc9, 0x30, 0xe2, 0xfd, 0x44,
+	0x58, 0x39, 0xd7, 0x97, 0xfb, 0x5c, 0x00, 0xd5,
+	0x4f, 0x7a, 0x1a, 0x95, 0x8b, 0x62, 0x4b, 0xce,
+	0xe5, 0x91, 0x21, 0x7b, 0x30, 0x00, 0xd6, 0xdd,
+	0x6d, 0x02, 0x86, 0x49, 0x0f, 0x3c, 0x1a, 0x27,
+	0x3c, 0xd3, 0x0e, 0x71, 0xf2, 0xff, 0xf5, 0x2f,
+	0x87, 0xac, 0x67, 0x59, 0x81, 0xa3, 0xf7, 0xf8,
+	0xd6, 0x11, 0x0c, 0x84, 0xa9, 0x03, 0xee, 0x2a,
+	0xc4, 0xf3, 0x22, 0xab, 0x7c, 0xe2, 0x25, 0xf5,
+	0x67, 0xa3, 0xe4, 0x11, 0xe0, 0x59, 0xb3, 0xca,
+	0x87, 0xa0, 0xae, 0xc9, 0xa6, 0x62, 0x1b, 0x6e,
+	0x4d, 0x02, 0x6b, 0x07, 0x9d, 0xfd, 0xd0, 0x92,
+	0x06, 0xe1, 0xb2, 0x9a, 0x4a, 0x1f, 0x1f, 0x13,
+	0x49, 0x99, 0x97, 0x08, 0xde, 0x7f, 0x98, 0xaf,
+	0x51, 0x98, 0xee, 0x2c, 0xcb, 0xf0, 0x0b, 0xc6,
+	0xb6, 0xb7, 0x2d, 0x9a, 0xb1, 0xac, 0xa6, 0xe3,
+	0x15, 0x77, 0x9d, 0x6b, 0x1a, 0xe4, 0xfc, 0x8b,
+	0xf2, 0x17, 0x59, 0x08, 0x04, 0x58, 0x81, 0x9d,
+	0x1b, 0x1b, 0x69, 0x55, 0xc2, 0xb4, 0x3c, 0x1f,
+	0x50, 0xf1, 0x7f, 0x77, 0x90, 0x4c, 0x66, 0x40,
+	0x5a, 0xc0, 0x33, 0x1f, 0xcb, 0x05, 0x6d, 0x5c,
+	0x06, 0x87, 0x52, 0xa2, 0x8f, 0x26, 0xd5, 0x4f
+};
+static const u8 enc_output010[] __initconst = {
+	0xe5, 0x26, 0xa4, 0x3d, 0xbd, 0x33, 0xd0, 0x4b,
+	0x6f, 0x05, 0xa7, 0x6e, 0x12, 0x7a, 0xd2, 0x74,
+	0xa6, 0xdd, 0xbd, 0x95, 0xeb, 0xf9, 0xa4, 0xf1,
+	0x59, 0x93, 0x91, 0x70, 0xd9, 0xfe, 0x9a, 0xcd,
+	0x53, 0x1f, 0x3a, 0xab, 0xa6, 0x7c, 0x9f, 0xa6,
+	0x9e, 0xbd, 0x99, 0xd9, 0xb5, 0x97, 0x44, 0xd5,
+	0x14, 0x48, 0x4d, 0x9d, 0xc0, 0xd0, 0x05, 0x96,
+	0xeb, 0x4c, 0x78, 0x55, 0x09, 0x08, 0x01, 0x02,
+	0x30, 0x90, 0x7b, 0x96, 0x7a, 0x7b, 0x5f, 0x30,
+	0x41, 0x24, 0xce, 0x68, 0x61, 0x49, 0x86, 0x57,
+	0x82, 0xdd, 0x53, 0x1c, 0x51, 0x28, 0x2b, 0x53,
+	0x6e, 0x2d, 0xc2, 0x20, 0x4c, 0xdd, 0x8f, 0x65,
+	0x10, 0x20, 0x50, 0xdd, 0x9d, 0x50, 0xe5, 0x71,
+	0x40, 0x53, 0x69, 0xfc, 0x77, 0x48, 0x11, 0xb9,
+	0xde, 0xa4, 0x8d, 0x58, 0xe4, 0xa6, 0x1a, 0x18,
+	0x47, 0x81, 0x7e, 0xfc, 0xdd, 0xf6, 0xef, 0xce,
+	0x2f, 0x43, 0x68, 0xd6, 0x06, 0xe2, 0x74, 0x6a,
+	0xad, 0x90, 0xf5, 0x37, 0xf3, 0x3d, 0x82, 0x69,
+	0x40, 0xe9, 0x6b, 0xa7, 0x3d, 0xa8, 0x1e, 0xd2,
+	0x02, 0x7c, 0xb7, 0x9b, 0xe4, 0xda, 0x8f, 0x95,
+	0x06, 0xc5, 0xdf, 0x73, 0xa3, 0x20, 0x9a, 0x49,
+	0xde, 0x9c, 0xbc, 0xee, 0x14, 0x3f, 0x81, 0x5e,
+	0xf8, 0x3b, 0x59, 0x3c, 0xe1, 0x68, 0x12, 0x5a,
+	0x3a, 0x76, 0x3a, 0x3f, 0xf7, 0x87, 0x33, 0x0a,
+	0x01, 0xb8, 0xd4, 0xed, 0xb6, 0xbe, 0x94, 0x5e,
+	0x70, 0x40, 0x56, 0x67, 0x1f, 0x50, 0x44, 0x19,
+	0xce, 0x82, 0x70, 0x10, 0x87, 0x13, 0x20, 0x0b,
+	0x4c, 0x5a, 0xb6, 0xf6, 0xa7, 0xae, 0x81, 0x75,
+	0x01, 0x81, 0xe6, 0x4b, 0x57, 0x7c, 0xdd, 0x6d,
+	0xf8, 0x1c, 0x29, 0x32, 0xf7, 0xda, 0x3c, 0x2d,
+	0xf8, 0x9b, 0x25, 0x6e, 0x00, 0xb4, 0xf7, 0x2f,
+	0xf7, 0x04, 0xf7, 0xa1, 0x56, 0xac, 0x4f, 0x1a,
+	0x64, 0xb8, 0x47, 0x55, 0x18, 0x7b, 0x07, 0x4d,
+	0xbd, 0x47, 0x24, 0x80, 0x5d, 0xa2, 0x70, 0xc5,
+	0xdd, 0x8e, 0x82, 0xd4, 0xeb, 0xec, 0xb2, 0x0c,
+	0x39, 0xd2, 0x97, 0xc1, 0xcb, 0xeb, 0xf4, 0x77,
+	0x59, 0xb4, 0x87, 0xef, 0xcb, 0x43, 0x2d, 0x46,
+	0x54, 0xd1, 0xa7, 0xd7, 0x15, 0x99, 0x0a, 0x43,
+	0xa1, 0xe0, 0x99, 0x33, 0x71, 0xc1, 0xed, 0xfe,
+	0x72, 0x46, 0x33, 0x8e, 0x91, 0x08, 0x9f, 0xc8,
+	0x2e, 0xca, 0xfa, 0xdc, 0x59, 0xd5, 0xc3, 0x76,
+	0x84, 0x9f, 0xa3, 0x37, 0x68, 0xc3, 0xf0, 0x47,
+	0x2c, 0x68, 0xdb, 0x5e, 0xc3, 0x49, 0x4c, 0xe8,
+	0x92, 0x85, 0xe2, 0x23, 0xd3, 0x3f, 0xad, 0x32,
+	0xe5, 0x2b, 0x82, 0xd7, 0x8f, 0x99, 0x0a, 0x59,
+	0x5c, 0x45, 0xd9, 0xb4, 0x51, 0x52, 0xc2, 0xae,
+	0xbf, 0x80, 0xcf, 0xc9, 0xc9, 0x51, 0x24, 0x2a,
+	0x3b, 0x3a, 0x4d, 0xae, 0xeb, 0xbd, 0x22, 0xc3,
+	0x0e, 0x0f, 0x59, 0x25, 0x92, 0x17, 0xe9, 0x74,
+	0xc7, 0x8b, 0x70, 0x70, 0x36, 0x55, 0x95, 0x75,
+	0x4b, 0xad, 0x61, 0x2b, 0x09, 0xbc, 0x82, 0xf2,
+	0x6e, 0x94, 0x43, 0xae, 0xc3, 0xd5, 0xcd, 0x8e,
+	0xfe, 0x5b, 0x9a, 0x88, 0x43, 0x01, 0x75, 0xb2,
+	0x23, 0x09, 0xf7, 0x89, 0x83, 0xe7, 0xfa, 0xf9,
+	0xb4, 0x9b, 0xf8, 0xef, 0xbd, 0x1c, 0x92, 0xc1,
+	0xda, 0x7e, 0xfe, 0x05, 0xba, 0x5a, 0xcd, 0x07,
+	0x6a, 0x78, 0x9e, 0x5d, 0xfb, 0x11, 0x2f, 0x79,
+	0x38, 0xb6, 0xc2, 0x5b, 0x6b, 0x51, 0xb4, 0x71,
+	0xdd, 0xf7, 0x2a, 0xe4, 0xf4, 0x72, 0x76, 0xad,
+	0xc2, 0xdd, 0x64, 0x5d, 0x79, 0xb6, 0xf5, 0x7a,
+	0x77, 0x20, 0x05, 0x3d, 0x30, 0x06, 0xd4, 0x4c,
+	0x0a, 0x2c, 0x98, 0x5a, 0xb9, 0xd4, 0x98, 0xa9,
+	0x3f, 0xc6, 0x12, 0xea, 0x3b, 0x4b, 0xc5, 0x79,
+	0x64, 0x63, 0x6b, 0x09, 0x54, 0x3b, 0x14, 0x27,
+	0xba, 0x99, 0x80, 0xc8, 0x72, 0xa8, 0x12, 0x90,
+	0x29, 0xba, 0x40, 0x54, 0x97, 0x2b, 0x7b, 0xfe,
+	0xeb, 0xcd, 0x01, 0x05, 0x44, 0x72, 0xdb, 0x99,
+	0xe4, 0x61, 0xc9, 0x69, 0xd6, 0xb9, 0x28, 0xd1,
+	0x05, 0x3e, 0xf9, 0x0b, 0x49, 0x0a, 0x49, 0xe9,
+	0x8d, 0x0e, 0xa7, 0x4a, 0x0f, 0xaf, 0x32, 0xd0,
+	0xe0, 0xb2, 0x3a, 0x55, 0x58, 0xfe, 0x5c, 0x28,
+	0x70, 0x51, 0x23, 0xb0, 0x7b, 0x6a, 0x5f, 0x1e,
+	0xb8, 0x17, 0xd7, 0x94, 0x15, 0x8f, 0xee, 0x20,
+	0xc7, 0x42, 0x25, 0x3e, 0x9a, 0x14, 0xd7, 0x60,
+	0x72, 0x39, 0x47, 0x48, 0xa9, 0xfe, 0xdd, 0x47,
+	0x0a, 0xb1, 0xe6, 0x60, 0x28, 0x8c, 0x11, 0x68,
+	0xe1, 0xff, 0xd7, 0xce, 0xc8, 0xbe, 0xb3, 0xfe,
+	0x27, 0x30, 0x09, 0x70, 0xd7, 0xfa, 0x02, 0x33,
+	0x3a, 0x61, 0x2e, 0xc7, 0xff, 0xa4, 0x2a, 0xa8,
+	0x6e, 0xb4, 0x79, 0x35, 0x6d, 0x4c, 0x1e, 0x38,
+	0xf8, 0xee, 0xd4, 0x84, 0x4e, 0x6e, 0x28, 0xa7,
+	0xce, 0xc8, 0xc1, 0xcf, 0x80, 0x05, 0xf3, 0x04,
+	0xef, 0xc8, 0x18, 0x28, 0x2e, 0x8d, 0x5e, 0x0c,
+	0xdf, 0xb8, 0x5f, 0x96, 0xe8, 0xc6, 0x9c, 0x2f,
+	0xe5, 0xa6, 0x44, 0xd7, 0xe7, 0x99, 0x44, 0x0c,
+	0xec, 0xd7, 0x05, 0x60, 0x97, 0xbb, 0x74, 0x77,
+	0x58, 0xd5, 0xbb, 0x48, 0xde, 0x5a, 0xb2, 0x54,
+	0x7f, 0x0e, 0x46, 0x70, 0x6a, 0x6f, 0x78, 0xa5,
+	0x08, 0x89, 0x05, 0x4e, 0x7e, 0xa0, 0x69, 0xb4,
+	0x40, 0x60, 0x55, 0x77, 0x75, 0x9b, 0x19, 0xf2,
+	0xd5, 0x13, 0x80, 0x77, 0xf9, 0x4b, 0x3f, 0x1e,
+	0xee, 0xe6, 0x76, 0x84, 0x7b, 0x8c, 0xe5, 0x27,
+	0xa8, 0x0a, 0x91, 0x01, 0x68, 0x71, 0x8a, 0x3f,
+	0x06, 0xab, 0xf6, 0xa9, 0xa5, 0xe6, 0x72, 0x92,
+	0xe4, 0x67, 0xe2, 0xa2, 0x46, 0x35, 0x84, 0x55,
+	0x7d, 0xca, 0xa8, 0x85, 0xd0, 0xf1, 0x3f, 0xbe,
+	0xd7, 0x34, 0x64, 0xfc, 0xae, 0xe3, 0xe4, 0x04,
+	0x9f, 0x66, 0x02, 0xb9, 0x88, 0x10, 0xd9, 0xc4,
+	0x4c, 0x31, 0x43, 0x7a, 0x93, 0xe2, 0x9b, 0x56,
+	0x43, 0x84, 0xdc, 0xdc, 0xde, 0x1d, 0xa4, 0x02,
+	0x0e, 0xc2, 0xef, 0xc3, 0xf8, 0x78, 0xd1, 0xb2,
+	0x6b, 0x63, 0x18, 0xc9, 0xa9, 0xe5, 0x72, 0xd8,
+	0xf3, 0xb9, 0xd1, 0x8a, 0xc7, 0x1a, 0x02, 0x27,
+	0x20, 0x77, 0x10, 0xe5, 0xc8, 0xd4, 0x4a, 0x47,
+	0xe5, 0xdf, 0x5f, 0x01, 0xaa, 0xb0, 0xd4, 0x10,
+	0xbb, 0x69, 0xe3, 0x36, 0xc8, 0xe1, 0x3d, 0x43,
+	0xfb, 0x86, 0xcd, 0xcc, 0xbf, 0xf4, 0x88, 0xe0,
+	0x20, 0xca, 0xb7, 0x1b, 0xf1, 0x2f, 0x5c, 0xee,
+	0xd4, 0xd3, 0xa3, 0xcc, 0xa4, 0x1e, 0x1c, 0x47,
+	0xfb, 0xbf, 0xfc, 0xa2, 0x41, 0x55, 0x9d, 0xf6,
+	0x5a, 0x5e, 0x65, 0x32, 0x34, 0x7b, 0x52, 0x8d,
+	0xd5, 0xd0, 0x20, 0x60, 0x03, 0xab, 0x3f, 0x8c,
+	0xd4, 0x21, 0xea, 0x2a, 0xd9, 0xc4, 0xd0, 0xd3,
+	0x65, 0xd8, 0x7a, 0x13, 0x28, 0x62, 0x32, 0x4b,
+	0x2c, 0x87, 0x93, 0xa8, 0xb4, 0x52, 0x45, 0x09,
+	0x44, 0xec, 0xec, 0xc3, 0x17, 0xdb, 0x9a, 0x4d,
+	0x5c, 0xa9, 0x11, 0xd4, 0x7d, 0xaf, 0x9e, 0xf1,
+	0x2d, 0xb2, 0x66, 0xc5, 0x1d, 0xed, 0xb7, 0xcd,
+	0x0b, 0x25, 0x5e, 0x30, 0x47, 0x3f, 0x40, 0xf4,
+	0xa1, 0xa0, 0x00, 0x94, 0x10, 0xc5, 0x6a, 0x63,
+	0x1a, 0xd5, 0x88, 0x92, 0x8e, 0x82, 0x39, 0x87,
+	0x3c, 0x78, 0x65, 0x58, 0x42, 0x75, 0x5b, 0xdd,
+	0x77, 0x3e, 0x09, 0x4e, 0x76, 0x5b, 0xe6, 0x0e,
+	0x4d, 0x38, 0xb2, 0xc0, 0xb8, 0x95, 0x01, 0x7a,
+	0x10, 0xe0, 0xfb, 0x07, 0xf2, 0xab, 0x2d, 0x8c,
+	0x32, 0xed, 0x2b, 0xc0, 0x46, 0xc2, 0xf5, 0x38,
+	0x83, 0xf0, 0x17, 0xec, 0xc1, 0x20, 0x6a, 0x9a,
+	0x0b, 0x00, 0xa0, 0x98, 0x22, 0x50, 0x23, 0xd5,
+	0x80, 0x6b, 0xf6, 0x1f, 0xc3, 0xcc, 0x97, 0xc9,
+	0x24, 0x9f, 0xf3, 0xaf, 0x43, 0x14, 0xd5, 0xa0
+};
+static const u8 enc_assoc010[] __initconst = {
+	0xd2, 0xa1, 0x70, 0xdb, 0x7a, 0xf8, 0xfa, 0x27,
+	0xba, 0x73, 0x0f, 0xbf, 0x3d, 0x1e, 0x82, 0xb2
+};
+static const u8 enc_nonce010[] __initconst = {
+	0xdb, 0x92, 0x0f, 0x7f, 0x17, 0x54, 0x0c, 0x30
+};
+static const u8 enc_key010[] __initconst = {
+	0x47, 0x11, 0xeb, 0x86, 0x2b, 0x2c, 0xab, 0x44,
+	0x34, 0xda, 0x7f, 0x57, 0x03, 0x39, 0x0c, 0xaf,
+	0x2c, 0x14, 0xfd, 0x65, 0x23, 0xe9, 0x8e, 0x74,
+	0xd5, 0x08, 0x68, 0x08, 0xe7, 0xb4, 0x72, 0xd7
+};
+
+static const u8 enc_input011[] __initconst = {
+	0x7a, 0x57, 0xf2, 0xc7, 0x06, 0x3f, 0x50, 0x7b,
+	0x36, 0x1a, 0x66, 0x5c, 0xb9, 0x0e, 0x5e, 0x3b,
+	0x45, 0x60, 0xbe, 0x9a, 0x31, 0x9f, 0xff, 0x5d,
+	0x66, 0x34, 0xb4, 0xdc, 0xfb, 0x9d, 0x8e, 0xee,
+	0x6a, 0x33, 0xa4, 0x07, 0x3c, 0xf9, 0x4c, 0x30,
+	0xa1, 0x24, 0x52, 0xf9, 0x50, 0x46, 0x88, 0x20,
+	0x02, 0x32, 0x3a, 0x0e, 0x99, 0x63, 0xaf, 0x1f,
+	0x15, 0x28, 0x2a, 0x05, 0xff, 0x57, 0x59, 0x5e,
+	0x18, 0xa1, 0x1f, 0xd0, 0x92, 0x5c, 0x88, 0x66,
+	0x1b, 0x00, 0x64, 0xa5, 0x93, 0x8d, 0x06, 0x46,
+	0xb0, 0x64, 0x8b, 0x8b, 0xef, 0x99, 0x05, 0x35,
+	0x85, 0xb3, 0xf3, 0x33, 0xbb, 0xec, 0x66, 0xb6,
+	0x3d, 0x57, 0x42, 0xe3, 0xb4, 0xc6, 0xaa, 0xb0,
+	0x41, 0x2a, 0xb9, 0x59, 0xa9, 0xf6, 0x3e, 0x15,
+	0x26, 0x12, 0x03, 0x21, 0x4c, 0x74, 0x43, 0x13,
+	0x2a, 0x03, 0x27, 0x09, 0xb4, 0xfb, 0xe7, 0xb7,
+	0x40, 0xff, 0x5e, 0xce, 0x48, 0x9a, 0x60, 0xe3,
+	0x8b, 0x80, 0x8c, 0x38, 0x2d, 0xcb, 0x93, 0x37,
+	0x74, 0x05, 0x52, 0x6f, 0x73, 0x3e, 0xc3, 0xbc,
+	0xca, 0x72, 0x0a, 0xeb, 0xf1, 0x3b, 0xa0, 0x95,
+	0xdc, 0x8a, 0xc4, 0xa9, 0xdc, 0xca, 0x44, 0xd8,
+	0x08, 0x63, 0x6a, 0x36, 0xd3, 0x3c, 0xb8, 0xac,
+	0x46, 0x7d, 0xfd, 0xaa, 0xeb, 0x3e, 0x0f, 0x45,
+	0x8f, 0x49, 0xda, 0x2b, 0xf2, 0x12, 0xbd, 0xaf,
+	0x67, 0x8a, 0x63, 0x48, 0x4b, 0x55, 0x5f, 0x6d,
+	0x8c, 0xb9, 0x76, 0x34, 0x84, 0xae, 0xc2, 0xfc,
+	0x52, 0x64, 0x82, 0xf7, 0xb0, 0x06, 0xf0, 0x45,
+	0x73, 0x12, 0x50, 0x30, 0x72, 0xea, 0x78, 0x9a,
+	0xa8, 0xaf, 0xb5, 0xe3, 0xbb, 0x77, 0x52, 0xec,
+	0x59, 0x84, 0xbf, 0x6b, 0x8f, 0xce, 0x86, 0x5e,
+	0x1f, 0x23, 0xe9, 0xfb, 0x08, 0x86, 0xf7, 0x10,
+	0xb9, 0xf2, 0x44, 0x96, 0x44, 0x63, 0xa9, 0xa8,
+	0x78, 0x00, 0x23, 0xd6, 0xc7, 0xe7, 0x6e, 0x66,
+	0x4f, 0xcc, 0xee, 0x15, 0xb3, 0xbd, 0x1d, 0xa0,
+	0xe5, 0x9c, 0x1b, 0x24, 0x2c, 0x4d, 0x3c, 0x62,
+	0x35, 0x9c, 0x88, 0x59, 0x09, 0xdd, 0x82, 0x1b,
+	0xcf, 0x0a, 0x83, 0x6b, 0x3f, 0xae, 0x03, 0xc4,
+	0xb4, 0xdd, 0x7e, 0x5b, 0x28, 0x76, 0x25, 0x96,
+	0xd9, 0xc9, 0x9d, 0x5f, 0x86, 0xfa, 0xf6, 0xd7,
+	0xd2, 0xe6, 0x76, 0x1d, 0x0f, 0xa1, 0xdc, 0x74,
+	0x05, 0x1b, 0x1d, 0xe0, 0xcd, 0x16, 0xb0, 0xa8,
+	0x8a, 0x34, 0x7b, 0x15, 0x11, 0x77, 0xe5, 0x7b,
+	0x7e, 0x20, 0xf7, 0xda, 0x38, 0xda, 0xce, 0x70,
+	0xe9, 0xf5, 0x6c, 0xd9, 0xbe, 0x0c, 0x4c, 0x95,
+	0x4c, 0xc2, 0x9b, 0x34, 0x55, 0x55, 0xe1, 0xf3,
+	0x46, 0x8e, 0x48, 0x74, 0x14, 0x4f, 0x9d, 0xc9,
+	0xf5, 0xe8, 0x1a, 0xf0, 0x11, 0x4a, 0xc1, 0x8d,
+	0xe0, 0x93, 0xa0, 0xbe, 0x09, 0x1c, 0x2b, 0x4e,
+	0x0f, 0xb2, 0x87, 0x8b, 0x84, 0xfe, 0x92, 0x32,
+	0x14, 0xd7, 0x93, 0xdf, 0xe7, 0x44, 0xbc, 0xc5,
+	0xae, 0x53, 0x69, 0xd8, 0xb3, 0x79, 0x37, 0x80,
+	0xe3, 0x17, 0x5c, 0xec, 0x53, 0x00, 0x9a, 0xe3,
+	0x8e, 0xdc, 0x38, 0xb8, 0x66, 0xf0, 0xd3, 0xad,
+	0x1d, 0x02, 0x96, 0x86, 0x3e, 0x9d, 0x3b, 0x5d,
+	0xa5, 0x7f, 0x21, 0x10, 0xf1, 0x1f, 0x13, 0x20,
+	0xf9, 0x57, 0x87, 0x20, 0xf5, 0x5f, 0xf1, 0x17,
+	0x48, 0x0a, 0x51, 0x5a, 0xcd, 0x19, 0x03, 0xa6,
+	0x5a, 0xd1, 0x12, 0x97, 0xe9, 0x48, 0xe2, 0x1d,
+	0x83, 0x75, 0x50, 0xd9, 0x75, 0x7d, 0x6a, 0x82,
+	0xa1, 0xf9, 0x4e, 0x54, 0x87, 0x89, 0xc9, 0x0c,
+	0xb7, 0x5b, 0x6a, 0x91, 0xc1, 0x9c, 0xb2, 0xa9,
+	0xdc, 0x9a, 0xa4, 0x49, 0x0a, 0x6d, 0x0d, 0xbb,
+	0xde, 0x86, 0x44, 0xdd, 0x5d, 0x89, 0x2b, 0x96,
+	0x0f, 0x23, 0x95, 0xad, 0xcc, 0xa2, 0xb3, 0xb9,
+	0x7e, 0x74, 0x38, 0xba, 0x9f, 0x73, 0xae, 0x5f,
+	0xf8, 0x68, 0xa2, 0xe0, 0xa9, 0xce, 0xbd, 0x40,
+	0xd4, 0x4c, 0x6b, 0xd2, 0x56, 0x62, 0xb0, 0xcc,
+	0x63, 0x7e, 0x5b, 0xd3, 0xae, 0xd1, 0x75, 0xce,
+	0xbb, 0xb4, 0x5b, 0xa8, 0xf8, 0xb4, 0xac, 0x71,
+	0x75, 0xaa, 0xc9, 0x9f, 0xbb, 0x6c, 0xad, 0x0f,
+	0x55, 0x5d, 0xe8, 0x85, 0x7d, 0xf9, 0x21, 0x35,
+	0xea, 0x92, 0x85, 0x2b, 0x00, 0xec, 0x84, 0x90,
+	0x0a, 0x63, 0x96, 0xe4, 0x6b, 0xa9, 0x77, 0xb8,
+	0x91, 0xf8, 0x46, 0x15, 0x72, 0x63, 0x70, 0x01,
+	0x40, 0xa3, 0xa5, 0x76, 0x62, 0x2b, 0xbf, 0xf1,
+	0xe5, 0x8d, 0x9f, 0xa3, 0xfa, 0x9b, 0x03, 0xbe,
+	0xfe, 0x65, 0x6f, 0xa2, 0x29, 0x0d, 0x54, 0xb4,
+	0x71, 0xce, 0xa9, 0xd6, 0x3d, 0x88, 0xf9, 0xaf,
+	0x6b, 0xa8, 0x9e, 0xf4, 0x16, 0x96, 0x36, 0xb9,
+	0x00, 0xdc, 0x10, 0xab, 0xb5, 0x08, 0x31, 0x1f,
+	0x00, 0xb1, 0x3c, 0xd9, 0x38, 0x3e, 0xc6, 0x04,
+	0xa7, 0x4e, 0xe8, 0xae, 0xed, 0x98, 0xc2, 0xf7,
+	0xb9, 0x00, 0x5f, 0x8c, 0x60, 0xd1, 0xe5, 0x15,
+	0xf7, 0xae, 0x1e, 0x84, 0x88, 0xd1, 0xf6, 0xbc,
+	0x3a, 0x89, 0x35, 0x22, 0x83, 0x7c, 0xca, 0xf0,
+	0x33, 0x82, 0x4c, 0x79, 0x3c, 0xfd, 0xb1, 0xae,
+	0x52, 0x62, 0x55, 0xd2, 0x41, 0x60, 0xc6, 0xbb,
+	0xfa, 0x0e, 0x59, 0xd6, 0xa8, 0xfe, 0x5d, 0xed,
+	0x47, 0x3d, 0xe0, 0xea, 0x1f, 0x6e, 0x43, 0x51,
+	0xec, 0x10, 0x52, 0x56, 0x77, 0x42, 0x6b, 0x52,
+	0x87, 0xd8, 0xec, 0xe0, 0xaa, 0x76, 0xa5, 0x84,
+	0x2a, 0x22, 0x24, 0xfd, 0x92, 0x40, 0x88, 0xd5,
+	0x85, 0x1c, 0x1f, 0x6b, 0x47, 0xa0, 0xc4, 0xe4,
+	0xef, 0xf4, 0xea, 0xd7, 0x59, 0xac, 0x2a, 0x9e,
+	0x8c, 0xfa, 0x1f, 0x42, 0x08, 0xfe, 0x4f, 0x74,
+	0xa0, 0x26, 0xf5, 0xb3, 0x84, 0xf6, 0x58, 0x5f,
+	0x26, 0x66, 0x3e, 0xd7, 0xe4, 0x22, 0x91, 0x13,
+	0xc8, 0xac, 0x25, 0x96, 0x23, 0xd8, 0x09, 0xea,
+	0x45, 0x75, 0x23, 0xb8, 0x5f, 0xc2, 0x90, 0x8b,
+	0x09, 0xc4, 0xfc, 0x47, 0x6c, 0x6d, 0x0a, 0xef,
+	0x69, 0xa4, 0x38, 0x19, 0xcf, 0x7d, 0xf9, 0x09,
+	0x73, 0x9b, 0x60, 0x5a, 0xf7, 0x37, 0xb5, 0xfe,
+	0x9f, 0xe3, 0x2b, 0x4c, 0x0d, 0x6e, 0x19, 0xf1,
+	0xd6, 0xc0, 0x70, 0xf3, 0x9d, 0x22, 0x3c, 0xf9,
+	0x49, 0xce, 0x30, 0x8e, 0x44, 0xb5, 0x76, 0x15,
+	0x8f, 0x52, 0xfd, 0xa5, 0x04, 0xb8, 0x55, 0x6a,
+	0x36, 0x59, 0x7c, 0xc4, 0x48, 0xb8, 0xd7, 0xab,
+	0x05, 0x66, 0xe9, 0x5e, 0x21, 0x6f, 0x6b, 0x36,
+	0x29, 0xbb, 0xe9, 0xe3, 0xa2, 0x9a, 0xa8, 0xcd,
+	0x55, 0x25, 0x11, 0xba, 0x5a, 0x58, 0xa0, 0xde,
+	0xae, 0x19, 0x2a, 0x48, 0x5a, 0xff, 0x36, 0xcd,
+	0x6d, 0x16, 0x7a, 0x73, 0x38, 0x46, 0xe5, 0x47,
+	0x59, 0xc8, 0xa2, 0xf6, 0xe2, 0x6c, 0x83, 0xc5,
+	0x36, 0x2c, 0x83, 0x7d, 0xb4, 0x01, 0x05, 0x69,
+	0xe7, 0xaf, 0x5c, 0xc4, 0x64, 0x82, 0x12, 0x21,
+	0xef, 0xf7, 0xd1, 0x7d, 0xb8, 0x8d, 0x8c, 0x98,
+	0x7c, 0x5f, 0x7d, 0x92, 0x88, 0xb9, 0x94, 0x07,
+	0x9c, 0xd8, 0xe9, 0x9c, 0x17, 0x38, 0xe3, 0x57,
+	0x6c, 0xe0, 0xdc, 0xa5, 0x92, 0x42, 0xb3, 0xbd,
+	0x50, 0xa2, 0x7e, 0xb5, 0xb1, 0x52, 0x72, 0x03,
+	0x97, 0xd8, 0xaa, 0x9a, 0x1e, 0x75, 0x41, 0x11,
+	0xa3, 0x4f, 0xcc, 0xd4, 0xe3, 0x73, 0xad, 0x96,
+	0xdc, 0x47, 0x41, 0x9f, 0xb0, 0xbe, 0x79, 0x91,
+	0xf5, 0xb6, 0x18, 0xfe, 0xc2, 0x83, 0x18, 0x7d,
+	0x73, 0xd9, 0x4f, 0x83, 0x84, 0x03, 0xb3, 0xf0,
+	0x77, 0x66, 0x3d, 0x83, 0x63, 0x2e, 0x2c, 0xf9,
+	0xdd, 0xa6, 0x1f, 0x89, 0x82, 0xb8, 0x23, 0x42,
+	0xeb, 0xe2, 0xca, 0x70, 0x82, 0x61, 0x41, 0x0a,
+	0x6d, 0x5f, 0x75, 0xc5, 0xe2, 0xc4, 0x91, 0x18,
+	0x44, 0x22, 0xfa, 0x34, 0x10, 0xf5, 0x20, 0xdc,
+	0xb7, 0xdd, 0x2a, 0x20, 0x77, 0xf5, 0xf9, 0xce,
+	0xdb, 0xa0, 0x0a, 0x52, 0x2a, 0x4e, 0xdd, 0xcc,
+	0x97, 0xdf, 0x05, 0xe4, 0x5e, 0xb7, 0xaa, 0xf0,
+	0xe2, 0x80, 0xff, 0xba, 0x1a, 0x0f, 0xac, 0xdf,
+	0x02, 0x32, 0xe6, 0xf7, 0xc7, 0x17, 0x13, 0xb7,
+	0xfc, 0x98, 0x48, 0x8c, 0x0d, 0x82, 0xc9, 0x80,
+	0x7a, 0xe2, 0x0a, 0xc5, 0xb4, 0xde, 0x7c, 0x3c,
+	0x79, 0x81, 0x0e, 0x28, 0x65, 0x79, 0x67, 0x82,
+	0x69, 0x44, 0x66, 0x09, 0xf7, 0x16, 0x1a, 0xf9,
+	0x7d, 0x80, 0xa1, 0x79, 0x14, 0xa9, 0xc8, 0x20,
+	0xfb, 0xa2, 0x46, 0xbe, 0x08, 0x35, 0x17, 0x58,
+	0xc1, 0x1a, 0xda, 0x2a, 0x6b, 0x2e, 0x1e, 0xe6,
+	0x27, 0x55, 0x7b, 0x19, 0xe2, 0xfb, 0x64, 0xfc,
+	0x5e, 0x15, 0x54, 0x3c, 0xe7, 0xc2, 0x11, 0x50,
+	0x30, 0xb8, 0x72, 0x03, 0x0b, 0x1a, 0x9f, 0x86,
+	0x27, 0x11, 0x5c, 0x06, 0x2b, 0xbd, 0x75, 0x1a,
+	0x0a, 0xda, 0x01, 0xfa, 0x5c, 0x4a, 0xc1, 0x80,
+	0x3a, 0x6e, 0x30, 0xc8, 0x2c, 0xeb, 0x56, 0xec,
+	0x89, 0xfa, 0x35, 0x7b, 0xb2, 0xf0, 0x97, 0x08,
+	0x86, 0x53, 0xbe, 0xbd, 0x40, 0x41, 0x38, 0x1c,
+	0xb4, 0x8b, 0x79, 0x2e, 0x18, 0x96, 0x94, 0xde,
+	0xe8, 0xca, 0xe5, 0x9f, 0x92, 0x9f, 0x15, 0x5d,
+	0x56, 0x60, 0x5c, 0x09, 0xf9, 0x16, 0xf4, 0x17,
+	0x0f, 0xf6, 0x4c, 0xda, 0xe6, 0x67, 0x89, 0x9f,
+	0xca, 0x6c, 0xe7, 0x9b, 0x04, 0x62, 0x0e, 0x26,
+	0xa6, 0x52, 0xbd, 0x29, 0xff, 0xc7, 0xa4, 0x96,
+	0xe6, 0x6a, 0x02, 0xa5, 0x2e, 0x7b, 0xfe, 0x97,
+	0x68, 0x3e, 0x2e, 0x5f, 0x3b, 0x0f, 0x36, 0xd6,
+	0x98, 0x19, 0x59, 0x48, 0xd2, 0xc6, 0xe1, 0x55,
+	0x1a, 0x6e, 0xd6, 0xed, 0x2c, 0xba, 0xc3, 0x9e,
+	0x64, 0xc9, 0x95, 0x86, 0x35, 0x5e, 0x3e, 0x88,
+	0x69, 0x99, 0x4b, 0xee, 0xbe, 0x9a, 0x99, 0xb5,
+	0x6e, 0x58, 0xae, 0xdd, 0x22, 0xdb, 0xdd, 0x6b,
+	0xfc, 0xaf, 0x90, 0xa3, 0x3d, 0xa4, 0xc1, 0x15,
+	0x92, 0x18, 0x8d, 0xd2, 0x4b, 0x7b, 0x06, 0xd1,
+	0x37, 0xb5, 0xe2, 0x7c, 0x2c, 0xf0, 0x25, 0xe4,
+	0x94, 0x2a, 0xbd, 0xe3, 0x82, 0x70, 0x78, 0xa3,
+	0x82, 0x10, 0x5a, 0x90, 0xd7, 0xa4, 0xfa, 0xaf,
+	0x1a, 0x88, 0x59, 0xdc, 0x74, 0x12, 0xb4, 0x8e,
+	0xd7, 0x19, 0x46, 0xf4, 0x84, 0x69, 0x9f, 0xbb,
+	0x70, 0xa8, 0x4c, 0x52, 0x81, 0xa9, 0xff, 0x76,
+	0x1c, 0xae, 0xd8, 0x11, 0x3d, 0x7f, 0x7d, 0xc5,
+	0x12, 0x59, 0x28, 0x18, 0xc2, 0xa2, 0xb7, 0x1c,
+	0x88, 0xf8, 0xd6, 0x1b, 0xa6, 0x7d, 0x9e, 0xde,
+	0x29, 0xf8, 0xed, 0xff, 0xeb, 0x92, 0x24, 0x4f,
+	0x05, 0xaa, 0xd9, 0x49, 0xba, 0x87, 0x59, 0x51,
+	0xc9, 0x20, 0x5c, 0x9b, 0x74, 0xcf, 0x03, 0xd9,
+	0x2d, 0x34, 0xc7, 0x5b, 0xa5, 0x40, 0xb2, 0x99,
+	0xf5, 0xcb, 0xb4, 0xf6, 0xb7, 0x72, 0x4a, 0xd6,
+	0xbd, 0xb0, 0xf3, 0x93, 0xe0, 0x1b, 0xa8, 0x04,
+	0x1e, 0x35, 0xd4, 0x80, 0x20, 0xf4, 0x9c, 0x31,
+	0x6b, 0x45, 0xb9, 0x15, 0xb0, 0x5e, 0xdd, 0x0a,
+	0x33, 0x9c, 0x83, 0xcd, 0x58, 0x89, 0x50, 0x56,
+	0xbb, 0x81, 0x00, 0x91, 0x32, 0xf3, 0x1b, 0x3e,
+	0xcf, 0x45, 0xe1, 0xf9, 0xe1, 0x2c, 0x26, 0x78,
+	0x93, 0x9a, 0x60, 0x46, 0xc9, 0xb5, 0x5e, 0x6a,
+	0x28, 0x92, 0x87, 0x3f, 0x63, 0x7b, 0xdb, 0xf7,
+	0xd0, 0x13, 0x9d, 0x32, 0x40, 0x5e, 0xcf, 0xfb,
+	0x79, 0x68, 0x47, 0x4c, 0xfd, 0x01, 0x17, 0xe6,
+	0x97, 0x93, 0x78, 0xbb, 0xa6, 0x27, 0xa3, 0xe8,
+	0x1a, 0xe8, 0x94, 0x55, 0x7d, 0x08, 0xe5, 0xdc,
+	0x66, 0xa3, 0x69, 0xc8, 0xca, 0xc5, 0xa1, 0x84,
+	0x55, 0xde, 0x08, 0x91, 0x16, 0x3a, 0x0c, 0x86,
+	0xab, 0x27, 0x2b, 0x64, 0x34, 0x02, 0x6c, 0x76,
+	0x8b, 0xc6, 0xaf, 0xcc, 0xe1, 0xd6, 0x8c, 0x2a,
+	0x18, 0x3d, 0xa6, 0x1b, 0x37, 0x75, 0x45, 0x73,
+	0xc2, 0x75, 0xd7, 0x53, 0x78, 0x3a, 0xd6, 0xe8,
+	0x29, 0xd2, 0x4a, 0xa8, 0x1e, 0x82, 0xf6, 0xb6,
+	0x81, 0xde, 0x21, 0xed, 0x2b, 0x56, 0xbb, 0xf2,
+	0xd0, 0x57, 0xc1, 0x7c, 0xd2, 0x6a, 0xd2, 0x56,
+	0xf5, 0x13, 0x5f, 0x1c, 0x6a, 0x0b, 0x74, 0xfb,
+	0xe9, 0xfe, 0x9e, 0xea, 0x95, 0xb2, 0x46, 0xab,
+	0x0a, 0xfc, 0xfd, 0xf3, 0xbb, 0x04, 0x2b, 0x76,
+	0x1b, 0xa4, 0x74, 0xb0, 0xc1, 0x78, 0xc3, 0x69,
+	0xe2, 0xb0, 0x01, 0xe1, 0xde, 0x32, 0x4c, 0x8d,
+	0x1a, 0xb3, 0x38, 0x08, 0xd5, 0xfc, 0x1f, 0xdc,
+	0x0e, 0x2c, 0x9c, 0xb1, 0xa1, 0x63, 0x17, 0x22,
+	0xf5, 0x6c, 0x93, 0x70, 0x74, 0x00, 0xf8, 0x39,
+	0x01, 0x94, 0xd1, 0x32, 0x23, 0x56, 0x5d, 0xa6,
+	0x02, 0x76, 0x76, 0x93, 0xce, 0x2f, 0x19, 0xe9,
+	0x17, 0x52, 0xae, 0x6e, 0x2c, 0x6d, 0x61, 0x7f,
+	0x3b, 0xaa, 0xe0, 0x52, 0x85, 0xc5, 0x65, 0xc1,
+	0xbb, 0x8e, 0x5b, 0x21, 0xd5, 0xc9, 0x78, 0x83,
+	0x07, 0x97, 0x4c, 0x62, 0x61, 0x41, 0xd4, 0xfc,
+	0xc9, 0x39, 0xe3, 0x9b, 0xd0, 0xcc, 0x75, 0xc4,
+	0x97, 0xe6, 0xdd, 0x2a, 0x5f, 0xa6, 0xe8, 0x59,
+	0x6c, 0x98, 0xb9, 0x02, 0xe2, 0xa2, 0xd6, 0x68,
+	0xee, 0x3b, 0x1d, 0xe3, 0x4d, 0x5b, 0x30, 0xef,
+	0x03, 0xf2, 0xeb, 0x18, 0x57, 0x36, 0xe8, 0xa1,
+	0xf4, 0x47, 0xfb, 0xcb, 0x8f, 0xcb, 0xc8, 0xf3,
+	0x4f, 0x74, 0x9d, 0x9d, 0xb1, 0x8d, 0x14, 0x44,
+	0xd9, 0x19, 0xb4, 0x54, 0x4f, 0x75, 0x19, 0x09,
+	0xa0, 0x75, 0xbc, 0x3b, 0x82, 0xc6, 0x3f, 0xb8,
+	0x83, 0x19, 0x6e, 0xd6, 0x37, 0xfe, 0x6e, 0x8a,
+	0x4e, 0xe0, 0x4a, 0xab, 0x7b, 0xc8, 0xb4, 0x1d,
+	0xf4, 0xed, 0x27, 0x03, 0x65, 0xa2, 0xa1, 0xae,
+	0x11, 0xe7, 0x98, 0x78, 0x48, 0x91, 0xd2, 0xd2,
+	0xd4, 0x23, 0x78, 0x50, 0xb1, 0x5b, 0x85, 0x10,
+	0x8d, 0xca, 0x5f, 0x0f, 0x71, 0xae, 0x72, 0x9a,
+	0xf6, 0x25, 0x19, 0x60, 0x06, 0xf7, 0x10, 0x34,
+	0x18, 0x0d, 0xc9, 0x9f, 0x7b, 0x0c, 0x9b, 0x8f,
+	0x91, 0x1b, 0x9f, 0xcd, 0x10, 0xee, 0x75, 0xf9,
+	0x97, 0x66, 0xfc, 0x4d, 0x33, 0x6e, 0x28, 0x2b,
+	0x92, 0x85, 0x4f, 0xab, 0x43, 0x8d, 0x8f, 0x7d,
+	0x86, 0xa7, 0xc7, 0xd8, 0xd3, 0x0b, 0x8b, 0x57,
+	0xb6, 0x1d, 0x95, 0x0d, 0xe9, 0xbc, 0xd9, 0x03,
+	0xd9, 0x10, 0x19, 0xc3, 0x46, 0x63, 0x55, 0x87,
+	0x61, 0x79, 0x6c, 0x95, 0x0e, 0x9c, 0xdd, 0xca,
+	0xc3, 0xf3, 0x64, 0xf0, 0x7d, 0x76, 0xb7, 0x53,
+	0x67, 0x2b, 0x1e, 0x44, 0x56, 0x81, 0xea, 0x8f,
+	0x5c, 0x42, 0x16, 0xb8, 0x28, 0xeb, 0x1b, 0x61,
+	0x10, 0x1e, 0xbf, 0xec, 0xa8
+};
+static const u8 enc_output011[] __initconst = {
+	0x6a, 0xfc, 0x4b, 0x25, 0xdf, 0xc0, 0xe4, 0xe8,
+	0x17, 0x4d, 0x4c, 0xc9, 0x7e, 0xde, 0x3a, 0xcc,
+	0x3c, 0xba, 0x6a, 0x77, 0x47, 0xdb, 0xe3, 0x74,
+	0x7a, 0x4d, 0x5f, 0x8d, 0x37, 0x55, 0x80, 0x73,
+	0x90, 0x66, 0x5d, 0x3a, 0x7d, 0x5d, 0x86, 0x5e,
+	0x8d, 0xfd, 0x83, 0xff, 0x4e, 0x74, 0x6f, 0xf9,
+	0xe6, 0x70, 0x17, 0x70, 0x3e, 0x96, 0xa7, 0x7e,
+	0xcb, 0xab, 0x8f, 0x58, 0x24, 0x9b, 0x01, 0xfd,
+	0xcb, 0xe6, 0x4d, 0x9b, 0xf0, 0x88, 0x94, 0x57,
+	0x66, 0xef, 0x72, 0x4c, 0x42, 0x6e, 0x16, 0x19,
+	0x15, 0xea, 0x70, 0x5b, 0xac, 0x13, 0xdb, 0x9f,
+	0x18, 0xe2, 0x3c, 0x26, 0x97, 0xbc, 0xdc, 0x45,
+	0x8c, 0x6c, 0x24, 0x69, 0x9c, 0xf7, 0x65, 0x1e,
+	0x18, 0x59, 0x31, 0x7c, 0xe4, 0x73, 0xbc, 0x39,
+	0x62, 0xc6, 0x5c, 0x9f, 0xbf, 0xfa, 0x90, 0x03,
+	0xc9, 0x72, 0x26, 0xb6, 0x1b, 0xc2, 0xb7, 0x3f,
+	0xf2, 0x13, 0x77, 0xf2, 0x8d, 0xb9, 0x47, 0xd0,
+	0x53, 0xdd, 0xc8, 0x91, 0x83, 0x8b, 0xb1, 0xce,
+	0xa3, 0xfe, 0xcd, 0xd9, 0xdd, 0x92, 0x7b, 0xdb,
+	0xb8, 0xfb, 0xc9, 0x2d, 0x01, 0x59, 0x39, 0x52,
+	0xad, 0x1b, 0xec, 0xcf, 0xd7, 0x70, 0x13, 0x21,
+	0xf5, 0x47, 0xaa, 0x18, 0x21, 0x5c, 0xc9, 0x9a,
+	0xd2, 0x6b, 0x05, 0x9c, 0x01, 0xa1, 0xda, 0x35,
+	0x5d, 0xb3, 0x70, 0xe6, 0xa9, 0x80, 0x8b, 0x91,
+	0xb7, 0xb3, 0x5f, 0x24, 0x9a, 0xb7, 0xd1, 0x6b,
+	0xa1, 0x1c, 0x50, 0xba, 0x49, 0xe0, 0xee, 0x2e,
+	0x75, 0xac, 0x69, 0xc0, 0xeb, 0x03, 0xdd, 0x19,
+	0xe5, 0xf6, 0x06, 0xdd, 0xc3, 0xd7, 0x2b, 0x07,
+	0x07, 0x30, 0xa7, 0x19, 0x0c, 0xbf, 0xe6, 0x18,
+	0xcc, 0xb1, 0x01, 0x11, 0x85, 0x77, 0x1d, 0x96,
+	0xa7, 0xa3, 0x00, 0x84, 0x02, 0xa2, 0x83, 0x68,
+	0xda, 0x17, 0x27, 0xc8, 0x7f, 0x23, 0xb7, 0xf4,
+	0x13, 0x85, 0xcf, 0xdd, 0x7a, 0x7d, 0x24, 0x57,
+	0xfe, 0x05, 0x93, 0xf5, 0x74, 0xce, 0xed, 0x0c,
+	0x20, 0x98, 0x8d, 0x92, 0x30, 0xa1, 0x29, 0x23,
+	0x1a, 0xa0, 0x4f, 0x69, 0x56, 0x4c, 0xe1, 0xc8,
+	0xce, 0xf6, 0x9a, 0x0c, 0xa4, 0xfa, 0x04, 0xf6,
+	0x62, 0x95, 0xf2, 0xfa, 0xc7, 0x40, 0x68, 0x40,
+	0x8f, 0x41, 0xda, 0xb4, 0x26, 0x6f, 0x70, 0xab,
+	0x40, 0x61, 0xa4, 0x0e, 0x75, 0xfb, 0x86, 0xeb,
+	0x9d, 0x9a, 0x1f, 0xec, 0x76, 0x99, 0xe7, 0xea,
+	0xaa, 0x1e, 0x2d, 0xb5, 0xd4, 0xa6, 0x1a, 0xb8,
+	0x61, 0x0a, 0x1d, 0x16, 0x5b, 0x98, 0xc2, 0x31,
+	0x40, 0xe7, 0x23, 0x1d, 0x66, 0x99, 0xc8, 0xc0,
+	0xd7, 0xce, 0xf3, 0x57, 0x40, 0x04, 0x3f, 0xfc,
+	0xea, 0xb3, 0xfc, 0xd2, 0xd3, 0x99, 0xa4, 0x94,
+	0x69, 0xa0, 0xef, 0xd1, 0x85, 0xb3, 0xa6, 0xb1,
+	0x28, 0xbf, 0x94, 0x67, 0x22, 0xc3, 0x36, 0x46,
+	0xf8, 0xd2, 0x0f, 0x5f, 0xf4, 0x59, 0x80, 0xe6,
+	0x2d, 0x43, 0x08, 0x7d, 0x19, 0x09, 0x97, 0xa7,
+	0x4c, 0x3d, 0x8d, 0xba, 0x65, 0x62, 0xa3, 0x71,
+	0x33, 0x29, 0x62, 0xdb, 0xc1, 0x33, 0x34, 0x1a,
+	0x63, 0x33, 0x16, 0xb6, 0x64, 0x7e, 0xab, 0x33,
+	0xf0, 0xe6, 0x26, 0x68, 0xba, 0x1d, 0x2e, 0x38,
+	0x08, 0xe6, 0x02, 0xd3, 0x25, 0x2c, 0x47, 0x23,
+	0x58, 0x34, 0x0f, 0x9d, 0x63, 0x4f, 0x63, 0xbb,
+	0x7f, 0x3b, 0x34, 0x38, 0xa7, 0xb5, 0x8d, 0x65,
+	0xd9, 0x9f, 0x79, 0x55, 0x3e, 0x4d, 0xe7, 0x73,
+	0xd8, 0xf6, 0x98, 0x97, 0x84, 0x60, 0x9c, 0xc8,
+	0xa9, 0x3c, 0xf6, 0xdc, 0x12, 0x5c, 0xe1, 0xbb,
+	0x0b, 0x8b, 0x98, 0x9c, 0x9d, 0x26, 0x7c, 0x4a,
+	0xe6, 0x46, 0x36, 0x58, 0x21, 0x4a, 0xee, 0xca,
+	0xd7, 0x3b, 0xc2, 0x6c, 0x49, 0x2f, 0xe5, 0xd5,
+	0x03, 0x59, 0x84, 0x53, 0xcb, 0xfe, 0x92, 0x71,
+	0x2e, 0x7c, 0x21, 0xcc, 0x99, 0x85, 0x7f, 0xb8,
+	0x74, 0x90, 0x13, 0x42, 0x3f, 0xe0, 0x6b, 0x1d,
+	0xf2, 0x4d, 0x54, 0xd4, 0xfc, 0x3a, 0x05, 0xe6,
+	0x74, 0xaf, 0xa6, 0xa0, 0x2a, 0x20, 0x23, 0x5d,
+	0x34, 0x5c, 0xd9, 0x3e, 0x4e, 0xfa, 0x93, 0xe7,
+	0xaa, 0xe9, 0x6f, 0x08, 0x43, 0x67, 0x41, 0xc5,
+	0xad, 0xfb, 0x31, 0x95, 0x82, 0x73, 0x32, 0xd8,
+	0xa6, 0xa3, 0xed, 0x0e, 0x2d, 0xf6, 0x5f, 0xfd,
+	0x80, 0xa6, 0x7a, 0xe0, 0xdf, 0x78, 0x15, 0x29,
+	0x74, 0x33, 0xd0, 0x9e, 0x83, 0x86, 0x72, 0x22,
+	0x57, 0x29, 0xb9, 0x9e, 0x5d, 0xd3, 0x1a, 0xb5,
+	0x96, 0x72, 0x41, 0x3d, 0xf1, 0x64, 0x43, 0x67,
+	0xee, 0xaa, 0x5c, 0xd3, 0x9a, 0x96, 0x13, 0x11,
+	0x5d, 0xf3, 0x0c, 0x87, 0x82, 0x1e, 0x41, 0x9e,
+	0xd0, 0x27, 0xd7, 0x54, 0x3b, 0x67, 0x73, 0x09,
+	0x91, 0xe9, 0xd5, 0x36, 0xa7, 0xb5, 0x55, 0xe4,
+	0xf3, 0x21, 0x51, 0x49, 0x22, 0x07, 0x55, 0x4f,
+	0x44, 0x4b, 0xd2, 0x15, 0x93, 0x17, 0x2a, 0xfa,
+	0x4d, 0x4a, 0x57, 0xdb, 0x4c, 0xa6, 0xeb, 0xec,
+	0x53, 0x25, 0x6c, 0x21, 0xed, 0x00, 0x4c, 0x3b,
+	0xca, 0x14, 0x57, 0xa9, 0xd6, 0x6a, 0xcd, 0x8d,
+	0x5e, 0x74, 0xac, 0x72, 0xc1, 0x97, 0xe5, 0x1b,
+	0x45, 0x4e, 0xda, 0xfc, 0xcc, 0x40, 0xe8, 0x48,
+	0x88, 0x0b, 0xa3, 0xe3, 0x8d, 0x83, 0x42, 0xc3,
+	0x23, 0xfd, 0x68, 0xb5, 0x8e, 0xf1, 0x9d, 0x63,
+	0x77, 0xe9, 0xa3, 0x8e, 0x8c, 0x26, 0x6b, 0xbd,
+	0x72, 0x73, 0x35, 0x0c, 0x03, 0xf8, 0x43, 0x78,
+	0x52, 0x71, 0x15, 0x1f, 0x71, 0x5d, 0x6e, 0xed,
+	0xb9, 0xcc, 0x86, 0x30, 0xdb, 0x2b, 0xd3, 0x82,
+	0x88, 0x23, 0x71, 0x90, 0x53, 0x5c, 0xa9, 0x2f,
+	0x76, 0x01, 0xb7, 0x9a, 0xfe, 0x43, 0x55, 0xa3,
+	0x04, 0x9b, 0x0e, 0xe4, 0x59, 0xdf, 0xc9, 0xe9,
+	0xb1, 0xea, 0x29, 0x28, 0x3c, 0x5c, 0xae, 0x72,
+	0x84, 0xb6, 0xc6, 0xeb, 0x0c, 0x27, 0x07, 0x74,
+	0x90, 0x0d, 0x31, 0xb0, 0x00, 0x77, 0xe9, 0x40,
+	0x70, 0x6f, 0x68, 0xa7, 0xfd, 0x06, 0xec, 0x4b,
+	0xc0, 0xb7, 0xac, 0xbc, 0x33, 0xb7, 0x6d, 0x0a,
+	0xbd, 0x12, 0x1b, 0x59, 0xcb, 0xdd, 0x32, 0xf5,
+	0x1d, 0x94, 0x57, 0x76, 0x9e, 0x0c, 0x18, 0x98,
+	0x71, 0xd7, 0x2a, 0xdb, 0x0b, 0x7b, 0xa7, 0x71,
+	0xb7, 0x67, 0x81, 0x23, 0x96, 0xae, 0xb9, 0x7e,
+	0x32, 0x43, 0x92, 0x8a, 0x19, 0xa0, 0xc4, 0xd4,
+	0x3b, 0x57, 0xf9, 0x4a, 0x2c, 0xfb, 0x51, 0x46,
+	0xbb, 0xcb, 0x5d, 0xb3, 0xef, 0x13, 0x93, 0x6e,
+	0x68, 0x42, 0x54, 0x57, 0xd3, 0x6a, 0x3a, 0x8f,
+	0x9d, 0x66, 0xbf, 0xbd, 0x36, 0x23, 0xf5, 0x93,
+	0x83, 0x7b, 0x9c, 0xc0, 0xdd, 0xc5, 0x49, 0xc0,
+	0x64, 0xed, 0x07, 0x12, 0xb3, 0xe6, 0xe4, 0xe5,
+	0x38, 0x95, 0x23, 0xb1, 0xa0, 0x3b, 0x1a, 0x61,
+	0xda, 0x17, 0xac, 0xc3, 0x58, 0xdd, 0x74, 0x64,
+	0x22, 0x11, 0xe8, 0x32, 0x1d, 0x16, 0x93, 0x85,
+	0x99, 0xa5, 0x9c, 0x34, 0x55, 0xb1, 0xe9, 0x20,
+	0x72, 0xc9, 0x28, 0x7b, 0x79, 0x00, 0xa1, 0xa6,
+	0xa3, 0x27, 0x40, 0x18, 0x8a, 0x54, 0xe0, 0xcc,
+	0xe8, 0x4e, 0x8e, 0x43, 0x96, 0xe7, 0x3f, 0xc8,
+	0xe9, 0xb2, 0xf9, 0xc9, 0xda, 0x04, 0x71, 0x50,
+	0x47, 0xe4, 0xaa, 0xce, 0xa2, 0x30, 0xc8, 0xe4,
+	0xac, 0xc7, 0x0d, 0x06, 0x2e, 0xe6, 0xe8, 0x80,
+	0x36, 0x29, 0x9e, 0x01, 0xb8, 0xc3, 0xf0, 0xa0,
+	0x5d, 0x7a, 0xca, 0x4d, 0xa0, 0x57, 0xbd, 0x2a,
+	0x45, 0xa7, 0x7f, 0x9c, 0x93, 0x07, 0x8f, 0x35,
+	0x67, 0x92, 0xe3, 0xe9, 0x7f, 0xa8, 0x61, 0x43,
+	0x9e, 0x25, 0x4f, 0x33, 0x76, 0x13, 0x6e, 0x12,
+	0xb9, 0xdd, 0xa4, 0x7c, 0x08, 0x9f, 0x7c, 0xe7,
+	0x0a, 0x8d, 0x84, 0x06, 0xa4, 0x33, 0x17, 0x34,
+	0x5e, 0x10, 0x7c, 0xc0, 0xa8, 0x3d, 0x1f, 0x42,
+	0x20, 0x51, 0x65, 0x5d, 0x09, 0xc3, 0xaa, 0xc0,
+	0xc8, 0x0d, 0xf0, 0x79, 0xbc, 0x20, 0x1b, 0x95,
+	0xe7, 0x06, 0x7d, 0x47, 0x20, 0x03, 0x1a, 0x74,
+	0xdd, 0xe2, 0xd4, 0xae, 0x38, 0x71, 0x9b, 0xf5,
+	0x80, 0xec, 0x08, 0x4e, 0x56, 0xba, 0x76, 0x12,
+	0x1a, 0xdf, 0x48, 0xf3, 0xae, 0xb3, 0xe6, 0xe6,
+	0xbe, 0xc0, 0x91, 0x2e, 0x01, 0xb3, 0x01, 0x86,
+	0xa2, 0xb9, 0x52, 0xd1, 0x21, 0xae, 0xd4, 0x97,
+	0x1d, 0xef, 0x41, 0x12, 0x95, 0x3d, 0x48, 0x45,
+	0x1c, 0x56, 0x32, 0x8f, 0xb8, 0x43, 0xbb, 0x19,
+	0xf3, 0xca, 0xe9, 0xeb, 0x6d, 0x84, 0xbe, 0x86,
+	0x06, 0xe2, 0x36, 0xb2, 0x62, 0x9d, 0xd3, 0x4c,
+	0x48, 0x18, 0x54, 0x13, 0x4e, 0xcf, 0xfd, 0xba,
+	0x84, 0xb9, 0x30, 0x53, 0xcf, 0xfb, 0xb9, 0x29,
+	0x8f, 0xdc, 0x9f, 0xef, 0x60, 0x0b, 0x64, 0xf6,
+	0x8b, 0xee, 0xa6, 0x91, 0xc2, 0x41, 0x6c, 0xf6,
+	0xfa, 0x79, 0x67, 0x4b, 0xc1, 0x3f, 0xaf, 0x09,
+	0x81, 0xd4, 0x5d, 0xcb, 0x09, 0xdf, 0x36, 0x31,
+	0xc0, 0x14, 0x3c, 0x7c, 0x0e, 0x65, 0x95, 0x99,
+	0x6d, 0xa3, 0xf4, 0xd7, 0x38, 0xee, 0x1a, 0x2b,
+	0x37, 0xe2, 0xa4, 0x3b, 0x4b, 0xd0, 0x65, 0xca,
+	0xf8, 0xc3, 0xe8, 0x15, 0x20, 0xef, 0xf2, 0x00,
+	0xfd, 0x01, 0x09, 0xc5, 0xc8, 0x17, 0x04, 0x93,
+	0xd0, 0x93, 0x03, 0x55, 0xc5, 0xfe, 0x32, 0xa3,
+	0x3e, 0x28, 0x2d, 0x3b, 0x93, 0x8a, 0xcc, 0x07,
+	0x72, 0x80, 0x8b, 0x74, 0x16, 0x24, 0xbb, 0xda,
+	0x94, 0x39, 0x30, 0x8f, 0xb1, 0xcd, 0x4a, 0x90,
+	0x92, 0x7c, 0x14, 0x8f, 0x95, 0x4e, 0xac, 0x9b,
+	0xd8, 0x8f, 0x1a, 0x87, 0xa4, 0x32, 0x27, 0x8a,
+	0xba, 0xf7, 0x41, 0xcf, 0x84, 0x37, 0x19, 0xe6,
+	0x06, 0xf5, 0x0e, 0xcf, 0x36, 0xf5, 0x9e, 0x6c,
+	0xde, 0xbc, 0xff, 0x64, 0x7e, 0x4e, 0x59, 0x57,
+	0x48, 0xfe, 0x14, 0xf7, 0x9c, 0x93, 0x5d, 0x15,
+	0xad, 0xcc, 0x11, 0xb1, 0x17, 0x18, 0xb2, 0x7e,
+	0xcc, 0xab, 0xe9, 0xce, 0x7d, 0x77, 0x5b, 0x51,
+	0x1b, 0x1e, 0x20, 0xa8, 0x32, 0x06, 0x0e, 0x75,
+	0x93, 0xac, 0xdb, 0x35, 0x37, 0x1f, 0xe9, 0x19,
+	0x1d, 0xb4, 0x71, 0x97, 0xd6, 0x4e, 0x2c, 0x08,
+	0xa5, 0x13, 0xf9, 0x0e, 0x7e, 0x78, 0x6e, 0x14,
+	0xe0, 0xa9, 0xb9, 0x96, 0x4c, 0x80, 0x82, 0xba,
+	0x17, 0xb3, 0x9d, 0x69, 0xb0, 0x84, 0x46, 0xff,
+	0xf9, 0x52, 0x79, 0x94, 0x58, 0x3a, 0x62, 0x90,
+	0x15, 0x35, 0x71, 0x10, 0x37, 0xed, 0xa1, 0x8e,
+	0x53, 0x6e, 0xf4, 0x26, 0x57, 0x93, 0x15, 0x93,
+	0xf6, 0x81, 0x2c, 0x5a, 0x10, 0xda, 0x92, 0xad,
+	0x2f, 0xdb, 0x28, 0x31, 0x2d, 0x55, 0x04, 0xd2,
+	0x06, 0x28, 0x8c, 0x1e, 0xdc, 0xea, 0x54, 0xac,
+	0xff, 0xb7, 0x6c, 0x30, 0x15, 0xd4, 0xb4, 0x0d,
+	0x00, 0x93, 0x57, 0xdd, 0xd2, 0x07, 0x07, 0x06,
+	0xd9, 0x43, 0x9b, 0xcd, 0x3a, 0xf4, 0x7d, 0x4c,
+	0x36, 0x5d, 0x23, 0xa2, 0xcc, 0x57, 0x40, 0x91,
+	0xe9, 0x2c, 0x2f, 0x2c, 0xd5, 0x30, 0x9b, 0x17,
+	0xb0, 0xc9, 0xf7, 0xa7, 0x2f, 0xd1, 0x93, 0x20,
+	0x6b, 0xc6, 0xc1, 0xe4, 0x6f, 0xcb, 0xd1, 0xe7,
+	0x09, 0x0f, 0x9e, 0xdc, 0xaa, 0x9f, 0x2f, 0xdf,
+	0x56, 0x9f, 0xd4, 0x33, 0x04, 0xaf, 0xd3, 0x6c,
+	0x58, 0x61, 0xf0, 0x30, 0xec, 0xf2, 0x7f, 0xf2,
+	0x9c, 0xdf, 0x39, 0xbb, 0x6f, 0xa2, 0x8c, 0x7e,
+	0xc4, 0x22, 0x51, 0x71, 0xc0, 0x4d, 0x14, 0x1a,
+	0xc4, 0xcd, 0x04, 0xd9, 0x87, 0x08, 0x50, 0x05,
+	0xcc, 0xaf, 0xf6, 0xf0, 0x8f, 0x92, 0x54, 0x58,
+	0xc2, 0xc7, 0x09, 0x7a, 0x59, 0x02, 0x05, 0xe8,
+	0xb0, 0x86, 0xd9, 0xbf, 0x7b, 0x35, 0x51, 0x4d,
+	0xaf, 0x08, 0x97, 0x2c, 0x65, 0xda, 0x2a, 0x71,
+	0x3a, 0xa8, 0x51, 0xcc, 0xf2, 0x73, 0x27, 0xc3,
+	0xfd, 0x62, 0xcf, 0xe3, 0xb2, 0xca, 0xcb, 0xbe,
+	0x1a, 0x0a, 0xa1, 0x34, 0x7b, 0x77, 0xc4, 0x62,
+	0x68, 0x78, 0x5f, 0x94, 0x07, 0x04, 0x65, 0x16,
+	0x4b, 0x61, 0xcb, 0xff, 0x75, 0x26, 0x50, 0x66,
+	0x1f, 0x6e, 0x93, 0xf8, 0xc5, 0x51, 0xeb, 0xa4,
+	0x4a, 0x48, 0x68, 0x6b, 0xe2, 0x5e, 0x44, 0xb2,
+	0x50, 0x2c, 0x6c, 0xae, 0x79, 0x4e, 0x66, 0x35,
+	0x81, 0x50, 0xac, 0xbc, 0x3f, 0xb1, 0x0c, 0xf3,
+	0x05, 0x3c, 0x4a, 0xa3, 0x6c, 0x2a, 0x79, 0xb4,
+	0xb7, 0xab, 0xca, 0xc7, 0x9b, 0x8e, 0xcd, 0x5f,
+	0x11, 0x03, 0xcb, 0x30, 0xa3, 0xab, 0xda, 0xfe,
+	0x64, 0xb9, 0xbb, 0xd8, 0x5e, 0x3a, 0x1a, 0x56,
+	0xe5, 0x05, 0x48, 0x90, 0x1e, 0x61, 0x69, 0x1b,
+	0x22, 0xe6, 0x1a, 0x3c, 0x75, 0xad, 0x1f, 0x37,
+	0x28, 0xdc, 0xe4, 0x6d, 0xbd, 0x42, 0xdc, 0xd3,
+	0xc8, 0xb6, 0x1c, 0x48, 0xfe, 0x94, 0x77, 0x7f,
+	0xbd, 0x62, 0xac, 0xa3, 0x47, 0x27, 0xcf, 0x5f,
+	0xd9, 0xdb, 0xaf, 0xec, 0xf7, 0x5e, 0xc1, 0xb0,
+	0x9d, 0x01, 0x26, 0x99, 0x7e, 0x8f, 0x03, 0x70,
+	0xb5, 0x42, 0xbe, 0x67, 0x28, 0x1b, 0x7c, 0xbd,
+	0x61, 0x21, 0x97, 0xcc, 0x5c, 0xe1, 0x97, 0x8f,
+	0x8d, 0xde, 0x2b, 0xaa, 0xa7, 0x71, 0x1d, 0x1e,
+	0x02, 0x73, 0x70, 0x58, 0x32, 0x5b, 0x1d, 0x67,
+	0x3d, 0xe0, 0x74, 0x4f, 0x03, 0xf2, 0x70, 0x51,
+	0x79, 0xf1, 0x61, 0x70, 0x15, 0x74, 0x9d, 0x23,
+	0x89, 0xde, 0xac, 0xfd, 0xde, 0xd0, 0x1f, 0xc3,
+	0x87, 0x44, 0x35, 0x4b, 0xe5, 0xb0, 0x60, 0xc5,
+	0x22, 0xe4, 0x9e, 0xca, 0xeb, 0xd5, 0x3a, 0x09,
+	0x45, 0xa4, 0xdb, 0xfa, 0x3f, 0xeb, 0x1b, 0xc7,
+	0xc8, 0x14, 0x99, 0x51, 0x92, 0x10, 0xed, 0xed,
+	0x28, 0xe0, 0xa1, 0xf8, 0x26, 0xcf, 0xcd, 0xcb,
+	0x63, 0xa1, 0x3b, 0xe3, 0xdf, 0x7e, 0xfe, 0xa6,
+	0xf0, 0x81, 0x9a, 0xbf, 0x55, 0xde, 0x54, 0xd5,
+	0x56, 0x60, 0x98, 0x10, 0x68, 0xf4, 0x38, 0x96,
+	0x8e, 0x6f, 0x1d, 0x44, 0x7f, 0xd6, 0x2f, 0xfe,
+	0x55, 0xfb, 0x0c, 0x7e, 0x67, 0xe2, 0x61, 0x44,
+	0xed, 0xf2, 0x35, 0x30, 0x5d, 0xe9, 0xc7, 0xd6,
+	0x6d, 0xe0, 0xa0, 0xed, 0xf3, 0xfc, 0xd8, 0x3e,
+	0x0a, 0x7b, 0xcd, 0xaf, 0x65, 0x68, 0x18, 0xc0,
+	0xec, 0x04, 0x1c, 0x74, 0x6d, 0xe2, 0x6e, 0x79,
+	0xd4, 0x11, 0x2b, 0x62, 0xd5, 0x27, 0xad, 0x4f,
+	0x01, 0x59, 0x73, 0xcc, 0x6a, 0x53, 0xfb, 0x2d,
+	0xd5, 0x4e, 0x99, 0x21, 0x65, 0x4d, 0xf5, 0x82,
+	0xf7, 0xd8, 0x42, 0xce, 0x6f, 0x3d, 0x36, 0x47,
+	0xf1, 0x05, 0x16, 0xe8, 0x1b, 0x6a, 0x8f, 0x93,
+	0xf2, 0x8f, 0x37, 0x40, 0x12, 0x28, 0xa3, 0xe6,
+	0xb9, 0x17, 0x4a, 0x1f, 0xb1, 0xd1, 0x66, 0x69,
+	0x86, 0xc4, 0xfc, 0x97, 0xae, 0x3f, 0x8f, 0x1e,
+	0x2b, 0xdf, 0xcd, 0xf9, 0x3c
+};
+static const u8 enc_assoc011[] __initconst = {
+	0xd6, 0x31, 0xda, 0x5d, 0x42, 0x5e, 0xd7
+};
+static const u8 enc_nonce011[] __initconst = {
+	0xfd, 0x87, 0xd4, 0xd8, 0x62, 0xfd, 0xec, 0xaa
+};
+static const u8 enc_key011[] __initconst = {
+	0x35, 0x4e, 0xb5, 0x70, 0x50, 0x42, 0x8a, 0x85,
+	0xf2, 0xfb, 0xed, 0x7b, 0xd0, 0x9e, 0x97, 0xca,
+	0xfa, 0x98, 0x66, 0x63, 0xee, 0x37, 0xcc, 0x52,
+	0xfe, 0xd1, 0xdf, 0x95, 0x15, 0x34, 0x29, 0x38
+};
+
+static const u8 enc_input012[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 enc_output012[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd6
+};
+static const u8 enc_assoc012[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 enc_nonce012[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 enc_key012[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+/* wycheproof - rfc7539 */
+static const u8 enc_input013[] __initconst = {
+	0x4c, 0x61, 0x64, 0x69, 0x65, 0x73, 0x20, 0x61,
+	0x6e, 0x64, 0x20, 0x47, 0x65, 0x6e, 0x74, 0x6c,
+	0x65, 0x6d, 0x65, 0x6e, 0x20, 0x6f, 0x66, 0x20,
+	0x74, 0x68, 0x65, 0x20, 0x63, 0x6c, 0x61, 0x73,
+	0x73, 0x20, 0x6f, 0x66, 0x20, 0x27, 0x39, 0x39,
+	0x3a, 0x20, 0x49, 0x66, 0x20, 0x49, 0x20, 0x63,
+	0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6f, 0x66, 0x66,
+	0x65, 0x72, 0x20, 0x79, 0x6f, 0x75, 0x20, 0x6f,
+	0x6e, 0x6c, 0x79, 0x20, 0x6f, 0x6e, 0x65, 0x20,
+	0x74, 0x69, 0x70, 0x20, 0x66, 0x6f, 0x72, 0x20,
+	0x74, 0x68, 0x65, 0x20, 0x66, 0x75, 0x74, 0x75,
+	0x72, 0x65, 0x2c, 0x20, 0x73, 0x75, 0x6e, 0x73,
+	0x63, 0x72, 0x65, 0x65, 0x6e, 0x20, 0x77, 0x6f,
+	0x75, 0x6c, 0x64, 0x20, 0x62, 0x65, 0x20, 0x69,
+	0x74, 0x2e
+};
+static const u8 enc_output013[] __initconst = {
+	0xd3, 0x1a, 0x8d, 0x34, 0x64, 0x8e, 0x60, 0xdb,
+	0x7b, 0x86, 0xaf, 0xbc, 0x53, 0xef, 0x7e, 0xc2,
+	0xa4, 0xad, 0xed, 0x51, 0x29, 0x6e, 0x08, 0xfe,
+	0xa9, 0xe2, 0xb5, 0xa7, 0x36, 0xee, 0x62, 0xd6,
+	0x3d, 0xbe, 0xa4, 0x5e, 0x8c, 0xa9, 0x67, 0x12,
+	0x82, 0xfa, 0xfb, 0x69, 0xda, 0x92, 0x72, 0x8b,
+	0x1a, 0x71, 0xde, 0x0a, 0x9e, 0x06, 0x0b, 0x29,
+	0x05, 0xd6, 0xa5, 0xb6, 0x7e, 0xcd, 0x3b, 0x36,
+	0x92, 0xdd, 0xbd, 0x7f, 0x2d, 0x77, 0x8b, 0x8c,
+	0x98, 0x03, 0xae, 0xe3, 0x28, 0x09, 0x1b, 0x58,
+	0xfa, 0xb3, 0x24, 0xe4, 0xfa, 0xd6, 0x75, 0x94,
+	0x55, 0x85, 0x80, 0x8b, 0x48, 0x31, 0xd7, 0xbc,
+	0x3f, 0xf4, 0xde, 0xf0, 0x8e, 0x4b, 0x7a, 0x9d,
+	0xe5, 0x76, 0xd2, 0x65, 0x86, 0xce, 0xc6, 0x4b,
+	0x61, 0x16, 0x1a, 0xe1, 0x0b, 0x59, 0x4f, 0x09,
+	0xe2, 0x6a, 0x7e, 0x90, 0x2e, 0xcb, 0xd0, 0x60,
+	0x06, 0x91
+};
+static const u8 enc_assoc013[] __initconst = {
+	0x50, 0x51, 0x52, 0x53, 0xc0, 0xc1, 0xc2, 0xc3,
+	0xc4, 0xc5, 0xc6, 0xc7
+};
+static const u8 enc_nonce013[] __initconst = {
+	0x07, 0x00, 0x00, 0x00, 0x40, 0x41, 0x42, 0x43,
+	0x44, 0x45, 0x46, 0x47
+};
+static const u8 enc_key013[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input014[] __initconst = { };
+static const u8 enc_output014[] __initconst = {
+	0x76, 0xac, 0xb3, 0x42, 0xcf, 0x31, 0x66, 0xa5,
+	0xb6, 0x3c, 0x0c, 0x0e, 0xa1, 0x38, 0x3c, 0x8d
+};
+static const u8 enc_assoc014[] __initconst = { };
+static const u8 enc_nonce014[] __initconst = {
+	0x4d, 0xa5, 0xbf, 0x8d, 0xfd, 0x58, 0x52, 0xc1,
+	0xea, 0x12, 0x37, 0x9d
+};
+static const u8 enc_key014[] __initconst = {
+	0x80, 0xba, 0x31, 0x92, 0xc8, 0x03, 0xce, 0x96,
+	0x5e, 0xa3, 0x71, 0xd5, 0xff, 0x07, 0x3c, 0xf0,
+	0xf4, 0x3b, 0x6a, 0x2a, 0xb5, 0x76, 0xb2, 0x08,
+	0x42, 0x6e, 0x11, 0x40, 0x9c, 0x09, 0xb9, 0xb0
+};
+
+/* wycheproof - misc */
+static const u8 enc_input015[] __initconst = { };
+static const u8 enc_output015[] __initconst = {
+	0x90, 0x6f, 0xa6, 0x28, 0x4b, 0x52, 0xf8, 0x7b,
+	0x73, 0x59, 0xcb, 0xaa, 0x75, 0x63, 0xc7, 0x09
+};
+static const u8 enc_assoc015[] __initconst = {
+	0xbd, 0x50, 0x67, 0x64, 0xf2, 0xd2, 0xc4, 0x10
+};
+static const u8 enc_nonce015[] __initconst = {
+	0xa9, 0x2e, 0xf0, 0xac, 0x99, 0x1d, 0xd5, 0x16,
+	0xa3, 0xc6, 0xf6, 0x89
+};
+static const u8 enc_key015[] __initconst = {
+	0x7a, 0x4c, 0xd7, 0x59, 0x17, 0x2e, 0x02, 0xeb,
+	0x20, 0x4d, 0xb2, 0xc3, 0xf5, 0xc7, 0x46, 0x22,
+	0x7d, 0xf5, 0x84, 0xfc, 0x13, 0x45, 0x19, 0x63,
+	0x91, 0xdb, 0xb9, 0x57, 0x7a, 0x25, 0x07, 0x42
+};
+
+/* wycheproof - misc */
+static const u8 enc_input016[] __initconst = {
+	0x2a
+};
+static const u8 enc_output016[] __initconst = {
+	0x3a, 0xca, 0xc2, 0x7d, 0xec, 0x09, 0x68, 0x80,
+	0x1e, 0x9f, 0x6e, 0xde, 0xd6, 0x9d, 0x80, 0x75,
+	0x22
+};
+static const u8 enc_assoc016[] __initconst = { };
+static const u8 enc_nonce016[] __initconst = {
+	0x99, 0xe2, 0x3e, 0xc4, 0x89, 0x85, 0xbc, 0xcd,
+	0xee, 0xab, 0x60, 0xf1
+};
+static const u8 enc_key016[] __initconst = {
+	0xcc, 0x56, 0xb6, 0x80, 0x55, 0x2e, 0xb7, 0x50,
+	0x08, 0xf5, 0x48, 0x4b, 0x4c, 0xb8, 0x03, 0xfa,
+	0x50, 0x63, 0xeb, 0xd6, 0xea, 0xb9, 0x1f, 0x6a,
+	0xb6, 0xae, 0xf4, 0x91, 0x6a, 0x76, 0x62, 0x73
+};
+
+/* wycheproof - misc */
+static const u8 enc_input017[] __initconst = {
+	0x51
+};
+static const u8 enc_output017[] __initconst = {
+	0xc4, 0x16, 0x83, 0x10, 0xca, 0x45, 0xb1, 0xf7,
+	0xc6, 0x6c, 0xad, 0x4e, 0x99, 0xe4, 0x3f, 0x72,
+	0xb9
+};
+static const u8 enc_assoc017[] __initconst = {
+	0x91, 0xca, 0x6c, 0x59, 0x2c, 0xbc, 0xca, 0x53
+};
+static const u8 enc_nonce017[] __initconst = {
+	0xab, 0x0d, 0xca, 0x71, 0x6e, 0xe0, 0x51, 0xd2,
+	0x78, 0x2f, 0x44, 0x03
+};
+static const u8 enc_key017[] __initconst = {
+	0x46, 0xf0, 0x25, 0x49, 0x65, 0xf7, 0x69, 0xd5,
+	0x2b, 0xdb, 0x4a, 0x70, 0xb4, 0x43, 0x19, 0x9f,
+	0x8e, 0xf2, 0x07, 0x52, 0x0d, 0x12, 0x20, 0xc5,
+	0x5e, 0x4b, 0x70, 0xf0, 0xfd, 0xa6, 0x20, 0xee
+};
+
+/* wycheproof - misc */
+static const u8 enc_input018[] __initconst = {
+	0x5c, 0x60
+};
+static const u8 enc_output018[] __initconst = {
+	0x4d, 0x13, 0x91, 0xe8, 0xb6, 0x1e, 0xfb, 0x39,
+	0xc1, 0x22, 0x19, 0x54, 0x53, 0x07, 0x7b, 0x22,
+	0xe5, 0xe2
+};
+static const u8 enc_assoc018[] __initconst = { };
+static const u8 enc_nonce018[] __initconst = {
+	0x46, 0x1a, 0xf1, 0x22, 0xe9, 0xf2, 0xe0, 0x34,
+	0x7e, 0x03, 0xf2, 0xdb
+};
+static const u8 enc_key018[] __initconst = {
+	0x2f, 0x7f, 0x7e, 0x4f, 0x59, 0x2b, 0xb3, 0x89,
+	0x19, 0x49, 0x89, 0x74, 0x35, 0x07, 0xbf, 0x3e,
+	0xe9, 0xcb, 0xde, 0x17, 0x86, 0xb6, 0x69, 0x5f,
+	0xe6, 0xc0, 0x25, 0xfd, 0x9b, 0xa4, 0xc1, 0x00
+};
+
+/* wycheproof - misc */
+static const u8 enc_input019[] __initconst = {
+	0xdd, 0xf2
+};
+static const u8 enc_output019[] __initconst = {
+	0xb6, 0x0d, 0xea, 0xd0, 0xfd, 0x46, 0x97, 0xec,
+	0x2e, 0x55, 0x58, 0x23, 0x77, 0x19, 0xd0, 0x24,
+	0x37, 0xa2
+};
+static const u8 enc_assoc019[] __initconst = {
+	0x88, 0x36, 0x4f, 0xc8, 0x06, 0x05, 0x18, 0xbf
+};
+static const u8 enc_nonce019[] __initconst = {
+	0x61, 0x54, 0x6b, 0xa5, 0xf1, 0x72, 0x05, 0x90,
+	0xb6, 0x04, 0x0a, 0xc6
+};
+static const u8 enc_key019[] __initconst = {
+	0xc8, 0x83, 0x3d, 0xce, 0x5e, 0xa9, 0xf2, 0x48,
+	0xaa, 0x20, 0x30, 0xea, 0xcf, 0xe7, 0x2b, 0xff,
+	0xe6, 0x9a, 0x62, 0x0c, 0xaf, 0x79, 0x33, 0x44,
+	0xe5, 0x71, 0x8f, 0xe0, 0xd7, 0xab, 0x1a, 0x58
+};
+
+/* wycheproof - misc */
+static const u8 enc_input020[] __initconst = {
+	0xab, 0x85, 0xe9, 0xc1, 0x57, 0x17, 0x31
+};
+static const u8 enc_output020[] __initconst = {
+	0x5d, 0xfe, 0x34, 0x40, 0xdb, 0xb3, 0xc3, 0xed,
+	0x7a, 0x43, 0x4e, 0x26, 0x02, 0xd3, 0x94, 0x28,
+	0x1e, 0x0a, 0xfa, 0x9f, 0xb7, 0xaa, 0x42
+};
+static const u8 enc_assoc020[] __initconst = { };
+static const u8 enc_nonce020[] __initconst = {
+	0x3c, 0x4e, 0x65, 0x4d, 0x66, 0x3f, 0xa4, 0x59,
+	0x6d, 0xc5, 0x5b, 0xb7
+};
+static const u8 enc_key020[] __initconst = {
+	0x55, 0x56, 0x81, 0x58, 0xd3, 0xa6, 0x48, 0x3f,
+	0x1f, 0x70, 0x21, 0xea, 0xb6, 0x9b, 0x70, 0x3f,
+	0x61, 0x42, 0x51, 0xca, 0xdc, 0x1a, 0xf5, 0xd3,
+	0x4a, 0x37, 0x4f, 0xdb, 0xfc, 0x5a, 0xda, 0xc7
+};
+
+/* wycheproof - misc */
+static const u8 enc_input021[] __initconst = {
+	0x4e, 0xe5, 0xcd, 0xa2, 0x0d, 0x42, 0x90
+};
+static const u8 enc_output021[] __initconst = {
+	0x4b, 0xd4, 0x72, 0x12, 0x94, 0x1c, 0xe3, 0x18,
+	0x5f, 0x14, 0x08, 0xee, 0x7f, 0xbf, 0x18, 0xf5,
+	0xab, 0xad, 0x6e, 0x22, 0x53, 0xa1, 0xba
+};
+static const u8 enc_assoc021[] __initconst = {
+	0x84, 0xe4, 0x6b, 0xe8, 0xc0, 0x91, 0x90, 0x53
+};
+static const u8 enc_nonce021[] __initconst = {
+	0x58, 0x38, 0x93, 0x75, 0xc6, 0x9e, 0xe3, 0x98,
+	0xde, 0x94, 0x83, 0x96
+};
+static const u8 enc_key021[] __initconst = {
+	0xe3, 0xc0, 0x9e, 0x7f, 0xab, 0x1a, 0xef, 0xb5,
+	0x16, 0xda, 0x6a, 0x33, 0x02, 0x2a, 0x1d, 0xd4,
+	0xeb, 0x27, 0x2c, 0x80, 0xd5, 0x40, 0xc5, 0xda,
+	0x52, 0xa7, 0x30, 0xf3, 0x4d, 0x84, 0x0d, 0x7f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input022[] __initconst = {
+	0xbe, 0x33, 0x08, 0xf7, 0x2a, 0x2c, 0x6a, 0xed
+};
+static const u8 enc_output022[] __initconst = {
+	0x8e, 0x94, 0x39, 0xa5, 0x6e, 0xee, 0xc8, 0x17,
+	0xfb, 0xe8, 0xa6, 0xed, 0x8f, 0xab, 0xb1, 0x93,
+	0x75, 0x39, 0xdd, 0x6c, 0x00, 0xe9, 0x00, 0x21
+};
+static const u8 enc_assoc022[] __initconst = { };
+static const u8 enc_nonce022[] __initconst = {
+	0x4f, 0x07, 0xaf, 0xed, 0xfd, 0xc3, 0xb6, 0xc2,
+	0x36, 0x18, 0x23, 0xd3
+};
+static const u8 enc_key022[] __initconst = {
+	0x51, 0xe4, 0xbf, 0x2b, 0xad, 0x92, 0xb7, 0xaf,
+	0xf1, 0xa4, 0xbc, 0x05, 0x55, 0x0b, 0xa8, 0x1d,
+	0xf4, 0xb9, 0x6f, 0xab, 0xf4, 0x1c, 0x12, 0xc7,
+	0xb0, 0x0e, 0x60, 0xe4, 0x8d, 0xb7, 0xe1, 0x52
+};
+
+/* wycheproof - misc */
+static const u8 enc_input023[] __initconst = {
+	0xa4, 0xc9, 0xc2, 0x80, 0x1b, 0x71, 0xf7, 0xdf
+};
+static const u8 enc_output023[] __initconst = {
+	0xb9, 0xb9, 0x10, 0x43, 0x3a, 0xf0, 0x52, 0xb0,
+	0x45, 0x30, 0xf5, 0x1a, 0xee, 0xe0, 0x24, 0xe0,
+	0xa4, 0x45, 0xa6, 0x32, 0x8f, 0xa6, 0x7a, 0x18
+};
+static const u8 enc_assoc023[] __initconst = {
+	0x66, 0xc0, 0xae, 0x70, 0x07, 0x6c, 0xb1, 0x4d
+};
+static const u8 enc_nonce023[] __initconst = {
+	0xb4, 0xea, 0x66, 0x6e, 0xe1, 0x19, 0x56, 0x33,
+	0x66, 0x48, 0x4a, 0x78
+};
+static const u8 enc_key023[] __initconst = {
+	0x11, 0x31, 0xc1, 0x41, 0x85, 0x77, 0xa0, 0x54,
+	0xde, 0x7a, 0x4a, 0xc5, 0x51, 0x95, 0x0f, 0x1a,
+	0x05, 0x3f, 0x9a, 0xe4, 0x6e, 0x5b, 0x75, 0xfe,
+	0x4a, 0xbd, 0x56, 0x08, 0xd7, 0xcd, 0xda, 0xdd
+};
+
+/* wycheproof - misc */
+static const u8 enc_input024[] __initconst = {
+	0x42, 0xba, 0xae, 0x59, 0x78, 0xfe, 0xaf, 0x5c,
+	0x36, 0x8d, 0x14, 0xe0
+};
+static const u8 enc_output024[] __initconst = {
+	0xff, 0x7d, 0xc2, 0x03, 0xb2, 0x6c, 0x46, 0x7a,
+	0x6b, 0x50, 0xdb, 0x33, 0x57, 0x8c, 0x0f, 0x27,
+	0x58, 0xc2, 0xe1, 0x4e, 0x36, 0xd4, 0xfc, 0x10,
+	0x6d, 0xcb, 0x29, 0xb4
+};
+static const u8 enc_assoc024[] __initconst = { };
+static const u8 enc_nonce024[] __initconst = {
+	0x9a, 0x59, 0xfc, 0xe2, 0x6d, 0xf0, 0x00, 0x5e,
+	0x07, 0x53, 0x86, 0x56
+};
+static const u8 enc_key024[] __initconst = {
+	0x99, 0xb6, 0x2b, 0xd5, 0xaf, 0xbe, 0x3f, 0xb0,
+	0x15, 0xbd, 0xe9, 0x3f, 0x0a, 0xbf, 0x48, 0x39,
+	0x57, 0xa1, 0xc3, 0xeb, 0x3c, 0xa5, 0x9c, 0xb5,
+	0x0b, 0x39, 0xf7, 0xf8, 0xa9, 0xcc, 0x51, 0xbe
+};
+
+/* wycheproof - misc */
+static const u8 enc_input025[] __initconst = {
+	0xfd, 0xc8, 0x5b, 0x94, 0xa4, 0xb2, 0xa6, 0xb7,
+	0x59, 0xb1, 0xa0, 0xda
+};
+static const u8 enc_output025[] __initconst = {
+	0x9f, 0x88, 0x16, 0xde, 0x09, 0x94, 0xe9, 0x38,
+	0xd9, 0xe5, 0x3f, 0x95, 0xd0, 0x86, 0xfc, 0x6c,
+	0x9d, 0x8f, 0xa9, 0x15, 0xfd, 0x84, 0x23, 0xa7,
+	0xcf, 0x05, 0x07, 0x2f
+};
+static const u8 enc_assoc025[] __initconst = {
+	0xa5, 0x06, 0xe1, 0xa5, 0xc6, 0x90, 0x93, 0xf9
+};
+static const u8 enc_nonce025[] __initconst = {
+	0x58, 0xdb, 0xd4, 0xad, 0x2c, 0x4a, 0xd3, 0x5d,
+	0xd9, 0x06, 0xe9, 0xce
+};
+static const u8 enc_key025[] __initconst = {
+	0x85, 0xf3, 0x5b, 0x62, 0x82, 0xcf, 0xf4, 0x40,
+	0xbc, 0x10, 0x20, 0xc8, 0x13, 0x6f, 0xf2, 0x70,
+	0x31, 0x11, 0x0f, 0xa6, 0x3e, 0xc1, 0x6f, 0x1e,
+	0x82, 0x51, 0x18, 0xb0, 0x06, 0xb9, 0x12, 0x57
+};
+
+/* wycheproof - misc */
+static const u8 enc_input026[] __initconst = {
+	0x51, 0xf8, 0xc1, 0xf7, 0x31, 0xea, 0x14, 0xac,
+	0xdb, 0x21, 0x0a, 0x6d, 0x97, 0x3e, 0x07
+};
+static const u8 enc_output026[] __initconst = {
+	0x0b, 0x29, 0x63, 0x8e, 0x1f, 0xbd, 0xd6, 0xdf,
+	0x53, 0x97, 0x0b, 0xe2, 0x21, 0x00, 0x42, 0x2a,
+	0x91, 0x34, 0x08, 0x7d, 0x67, 0xa4, 0x6e, 0x79,
+	0x17, 0x8d, 0x0a, 0x93, 0xf5, 0xe1, 0xd2
+};
+static const u8 enc_assoc026[] __initconst = { };
+static const u8 enc_nonce026[] __initconst = {
+	0x68, 0xab, 0x7f, 0xdb, 0xf6, 0x19, 0x01, 0xda,
+	0xd4, 0x61, 0xd2, 0x3c
+};
+static const u8 enc_key026[] __initconst = {
+	0x67, 0x11, 0x96, 0x27, 0xbd, 0x98, 0x8e, 0xda,
+	0x90, 0x62, 0x19, 0xe0, 0x8c, 0x0d, 0x0d, 0x77,
+	0x9a, 0x07, 0xd2, 0x08, 0xce, 0x8a, 0x4f, 0xe0,
+	0x70, 0x9a, 0xf7, 0x55, 0xee, 0xec, 0x6d, 0xcb
+};
+
+/* wycheproof - misc */
+static const u8 enc_input027[] __initconst = {
+	0x97, 0x46, 0x9d, 0xa6, 0x67, 0xd6, 0x11, 0x0f,
+	0x9c, 0xbd, 0xa1, 0xd1, 0xa2, 0x06, 0x73
+};
+static const u8 enc_output027[] __initconst = {
+	0x32, 0xdb, 0x66, 0xc4, 0xa3, 0x81, 0x9d, 0x81,
+	0x55, 0x74, 0x55, 0xe5, 0x98, 0x0f, 0xed, 0xfe,
+	0xae, 0x30, 0xde, 0xc9, 0x4e, 0x6a, 0xd3, 0xa9,
+	0xee, 0xa0, 0x6a, 0x0d, 0x70, 0x39, 0x17
+};
+static const u8 enc_assoc027[] __initconst = {
+	0x64, 0x53, 0xa5, 0x33, 0x84, 0x63, 0x22, 0x12
+};
+static const u8 enc_nonce027[] __initconst = {
+	0xd9, 0x5b, 0x32, 0x43, 0xaf, 0xae, 0xf7, 0x14,
+	0xc5, 0x03, 0x5b, 0x6a
+};
+static const u8 enc_key027[] __initconst = {
+	0xe6, 0xf1, 0x11, 0x8d, 0x41, 0xe4, 0xb4, 0x3f,
+	0xb5, 0x82, 0x21, 0xb7, 0xed, 0x79, 0x67, 0x38,
+	0x34, 0xe0, 0xd8, 0xac, 0x5c, 0x4f, 0xa6, 0x0b,
+	0xbc, 0x8b, 0xc4, 0x89, 0x3a, 0x58, 0x89, 0x4d
+};
+
+/* wycheproof - misc */
+static const u8 enc_input028[] __initconst = {
+	0x54, 0x9b, 0x36, 0x5a, 0xf9, 0x13, 0xf3, 0xb0,
+	0x81, 0x13, 0x1c, 0xcb, 0x6b, 0x82, 0x55, 0x88
+};
+static const u8 enc_output028[] __initconst = {
+	0xe9, 0x11, 0x0e, 0x9f, 0x56, 0xab, 0x3c, 0xa4,
+	0x83, 0x50, 0x0c, 0xea, 0xba, 0xb6, 0x7a, 0x13,
+	0x83, 0x6c, 0xca, 0xbf, 0x15, 0xa6, 0xa2, 0x2a,
+	0x51, 0xc1, 0x07, 0x1c, 0xfa, 0x68, 0xfa, 0x0c
+};
+static const u8 enc_assoc028[] __initconst = { };
+static const u8 enc_nonce028[] __initconst = {
+	0x2f, 0xcb, 0x1b, 0x38, 0xa9, 0x9e, 0x71, 0xb8,
+	0x47, 0x40, 0xad, 0x9b
+};
+static const u8 enc_key028[] __initconst = {
+	0x59, 0xd4, 0xea, 0xfb, 0x4d, 0xe0, 0xcf, 0xc7,
+	0xd3, 0xdb, 0x99, 0xa8, 0xf5, 0x4b, 0x15, 0xd7,
+	0xb3, 0x9f, 0x0a, 0xcc, 0x8d, 0xa6, 0x97, 0x63,
+	0xb0, 0x19, 0xc1, 0x69, 0x9f, 0x87, 0x67, 0x4a
+};
+
+/* wycheproof - misc */
+static const u8 enc_input029[] __initconst = {
+	0x55, 0xa4, 0x65, 0x64, 0x4f, 0x5b, 0x65, 0x09,
+	0x28, 0xcb, 0xee, 0x7c, 0x06, 0x32, 0x14, 0xd6
+};
+static const u8 enc_output029[] __initconst = {
+	0xe4, 0xb1, 0x13, 0xcb, 0x77, 0x59, 0x45, 0xf3,
+	0xd3, 0xa8, 0xae, 0x9e, 0xc1, 0x41, 0xc0, 0x0c,
+	0x7c, 0x43, 0xf1, 0x6c, 0xe0, 0x96, 0xd0, 0xdc,
+	0x27, 0xc9, 0x58, 0x49, 0xdc, 0x38, 0x3b, 0x7d
+};
+static const u8 enc_assoc029[] __initconst = {
+	0x03, 0x45, 0x85, 0x62, 0x1a, 0xf8, 0xd7, 0xff
+};
+static const u8 enc_nonce029[] __initconst = {
+	0x11, 0x8a, 0x69, 0x64, 0xc2, 0xd3, 0xe3, 0x80,
+	0x07, 0x1f, 0x52, 0x66
+};
+static const u8 enc_key029[] __initconst = {
+	0xb9, 0x07, 0xa4, 0x50, 0x75, 0x51, 0x3f, 0xe8,
+	0xa8, 0x01, 0x9e, 0xde, 0xe3, 0xf2, 0x59, 0x14,
+	0x87, 0xb2, 0xa0, 0x30, 0xb0, 0x3c, 0x6e, 0x1d,
+	0x77, 0x1c, 0x86, 0x25, 0x71, 0xd2, 0xea, 0x1e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input030[] __initconst = {
+	0x3f, 0xf1, 0x51, 0x4b, 0x1c, 0x50, 0x39, 0x15,
+	0x91, 0x8f, 0x0c, 0x0c, 0x31, 0x09, 0x4a, 0x6e,
+	0x1f
+};
+static const u8 enc_output030[] __initconst = {
+	0x02, 0xcc, 0x3a, 0xcb, 0x5e, 0xe1, 0xfc, 0xdd,
+	0x12, 0xa0, 0x3b, 0xb8, 0x57, 0x97, 0x64, 0x74,
+	0xd3, 0xd8, 0x3b, 0x74, 0x63, 0xa2, 0xc3, 0x80,
+	0x0f, 0xe9, 0x58, 0xc2, 0x8e, 0xaa, 0x29, 0x08,
+	0x13
+};
+static const u8 enc_assoc030[] __initconst = { };
+static const u8 enc_nonce030[] __initconst = {
+	0x45, 0xaa, 0xa3, 0xe5, 0xd1, 0x6d, 0x2d, 0x42,
+	0xdc, 0x03, 0x44, 0x5d
+};
+static const u8 enc_key030[] __initconst = {
+	0x3b, 0x24, 0x58, 0xd8, 0x17, 0x6e, 0x16, 0x21,
+	0xc0, 0xcc, 0x24, 0xc0, 0xc0, 0xe2, 0x4c, 0x1e,
+	0x80, 0xd7, 0x2f, 0x7e, 0xe9, 0x14, 0x9a, 0x4b,
+	0x16, 0x61, 0x76, 0x62, 0x96, 0x16, 0xd0, 0x11
+};
+
+/* wycheproof - misc */
+static const u8 enc_input031[] __initconst = {
+	0x63, 0x85, 0x8c, 0xa3, 0xe2, 0xce, 0x69, 0x88,
+	0x7b, 0x57, 0x8a, 0x3c, 0x16, 0x7b, 0x42, 0x1c,
+	0x9c
+};
+static const u8 enc_output031[] __initconst = {
+	0x35, 0x76, 0x64, 0x88, 0xd2, 0xbc, 0x7c, 0x2b,
+	0x8d, 0x17, 0xcb, 0xbb, 0x9a, 0xbf, 0xad, 0x9e,
+	0x6d, 0x1f, 0x39, 0x1e, 0x65, 0x7b, 0x27, 0x38,
+	0xdd, 0xa0, 0x84, 0x48, 0xcb, 0xa2, 0x81, 0x1c,
+	0xeb
+};
+static const u8 enc_assoc031[] __initconst = {
+	0x9a, 0xaf, 0x29, 0x9e, 0xee, 0xa7, 0x8f, 0x79
+};
+static const u8 enc_nonce031[] __initconst = {
+	0xf0, 0x38, 0x4f, 0xb8, 0x76, 0x12, 0x14, 0x10,
+	0x63, 0x3d, 0x99, 0x3d
+};
+static const u8 enc_key031[] __initconst = {
+	0xf6, 0x0c, 0x6a, 0x1b, 0x62, 0x57, 0x25, 0xf7,
+	0x6c, 0x70, 0x37, 0xb4, 0x8f, 0xe3, 0x57, 0x7f,
+	0xa7, 0xf7, 0xb8, 0x7b, 0x1b, 0xd5, 0xa9, 0x82,
+	0x17, 0x6d, 0x18, 0x23, 0x06, 0xff, 0xb8, 0x70
+};
+
+/* wycheproof - misc */
+static const u8 enc_input032[] __initconst = {
+	0x10, 0xf1, 0xec, 0xf9, 0xc6, 0x05, 0x84, 0x66,
+	0x5d, 0x9a, 0xe5, 0xef, 0xe2, 0x79, 0xe7, 0xf7,
+	0x37, 0x7e, 0xea, 0x69, 0x16, 0xd2, 0xb1, 0x11
+};
+static const u8 enc_output032[] __initconst = {
+	0x42, 0xf2, 0x6c, 0x56, 0xcb, 0x4b, 0xe2, 0x1d,
+	0x9d, 0x8d, 0x0c, 0x80, 0xfc, 0x99, 0xdd, 0xe0,
+	0x0d, 0x75, 0xf3, 0x80, 0x74, 0xbf, 0xe7, 0x64,
+	0x54, 0xaa, 0x7e, 0x13, 0xd4, 0x8f, 0xff, 0x7d,
+	0x75, 0x57, 0x03, 0x94, 0x57, 0x04, 0x0a, 0x3a
+};
+static const u8 enc_assoc032[] __initconst = { };
+static const u8 enc_nonce032[] __initconst = {
+	0xe6, 0xb1, 0xad, 0xf2, 0xfd, 0x58, 0xa8, 0x76,
+	0x2c, 0x65, 0xf3, 0x1b
+};
+static const u8 enc_key032[] __initconst = {
+	0x02, 0x12, 0xa8, 0xde, 0x50, 0x07, 0xed, 0x87,
+	0xb3, 0x3f, 0x1a, 0x70, 0x90, 0xb6, 0x11, 0x4f,
+	0x9e, 0x08, 0xce, 0xfd, 0x96, 0x07, 0xf2, 0xc2,
+	0x76, 0xbd, 0xcf, 0xdb, 0xc5, 0xce, 0x9c, 0xd7
+};
+
+/* wycheproof - misc */
+static const u8 enc_input033[] __initconst = {
+	0x92, 0x22, 0xf9, 0x01, 0x8e, 0x54, 0xfd, 0x6d,
+	0xe1, 0x20, 0x08, 0x06, 0xa9, 0xee, 0x8e, 0x4c,
+	0xc9, 0x04, 0xd2, 0x9f, 0x25, 0xcb, 0xa1, 0x93
+};
+static const u8 enc_output033[] __initconst = {
+	0x12, 0x30, 0x32, 0x43, 0x7b, 0x4b, 0xfd, 0x69,
+	0x20, 0xe8, 0xf7, 0xe7, 0xe0, 0x08, 0x7a, 0xe4,
+	0x88, 0x9e, 0xbe, 0x7a, 0x0a, 0xd0, 0xe9, 0x00,
+	0x3c, 0xf6, 0x8f, 0x17, 0x95, 0x50, 0xda, 0x63,
+	0xd3, 0xb9, 0x6c, 0x2d, 0x55, 0x41, 0x18, 0x65
+};
+static const u8 enc_assoc033[] __initconst = {
+	0x3e, 0x8b, 0xc5, 0xad, 0xe1, 0x82, 0xff, 0x08
+};
+static const u8 enc_nonce033[] __initconst = {
+	0x6b, 0x28, 0x2e, 0xbe, 0xcc, 0x54, 0x1b, 0xcd,
+	0x78, 0x34, 0xed, 0x55
+};
+static const u8 enc_key033[] __initconst = {
+	0xc5, 0xbc, 0x09, 0x56, 0x56, 0x46, 0xe7, 0xed,
+	0xda, 0x95, 0x4f, 0x1f, 0x73, 0x92, 0x23, 0xda,
+	0xda, 0x20, 0xb9, 0x5c, 0x44, 0xab, 0x03, 0x3d,
+	0x0f, 0xae, 0x4b, 0x02, 0x83, 0xd1, 0x8b, 0xe3
+};
+
+/* wycheproof - misc */
+static const u8 enc_input034[] __initconst = {
+	0xb0, 0x53, 0x99, 0x92, 0x86, 0xa2, 0x82, 0x4f,
+	0x42, 0xcc, 0x8c, 0x20, 0x3a, 0xb2, 0x4e, 0x2c,
+	0x97, 0xa6, 0x85, 0xad, 0xcc, 0x2a, 0xd3, 0x26,
+	0x62, 0x55, 0x8e, 0x55, 0xa5, 0xc7, 0x29
+};
+static const u8 enc_output034[] __initconst = {
+	0x45, 0xc7, 0xd6, 0xb5, 0x3a, 0xca, 0xd4, 0xab,
+	0xb6, 0x88, 0x76, 0xa6, 0xe9, 0x6a, 0x48, 0xfb,
+	0x59, 0x52, 0x4d, 0x2c, 0x92, 0xc9, 0xd8, 0xa1,
+	0x89, 0xc9, 0xfd, 0x2d, 0xb9, 0x17, 0x46, 0x56,
+	0x6d, 0x3c, 0xa1, 0x0e, 0x31, 0x1b, 0x69, 0x5f,
+	0x3e, 0xae, 0x15, 0x51, 0x65, 0x24, 0x93
+};
+static const u8 enc_assoc034[] __initconst = { };
+static const u8 enc_nonce034[] __initconst = {
+	0x04, 0xa9, 0xbe, 0x03, 0x50, 0x8a, 0x5f, 0x31,
+	0x37, 0x1a, 0x6f, 0xd2
+};
+static const u8 enc_key034[] __initconst = {
+	0x2e, 0xb5, 0x1c, 0x46, 0x9a, 0xa8, 0xeb, 0x9e,
+	0x6c, 0x54, 0xa8, 0x34, 0x9b, 0xae, 0x50, 0xa2,
+	0x0f, 0x0e, 0x38, 0x27, 0x11, 0xbb, 0xa1, 0x15,
+	0x2c, 0x42, 0x4f, 0x03, 0xb6, 0x67, 0x1d, 0x71
+};
+
+/* wycheproof - misc */
+static const u8 enc_input035[] __initconst = {
+	0xf4, 0x52, 0x06, 0xab, 0xc2, 0x55, 0x52, 0xb2,
+	0xab, 0xc9, 0xab, 0x7f, 0xa2, 0x43, 0x03, 0x5f,
+	0xed, 0xaa, 0xdd, 0xc3, 0xb2, 0x29, 0x39, 0x56,
+	0xf1, 0xea, 0x6e, 0x71, 0x56, 0xe7, 0xeb
+};
+static const u8 enc_output035[] __initconst = {
+	0x46, 0xa8, 0x0c, 0x41, 0x87, 0x02, 0x47, 0x20,
+	0x08, 0x46, 0x27, 0x58, 0x00, 0x80, 0xdd, 0xe5,
+	0xa3, 0xf4, 0xa1, 0x10, 0x93, 0xa7, 0x07, 0x6e,
+	0xd6, 0xf3, 0xd3, 0x26, 0xbc, 0x7b, 0x70, 0x53,
+	0x4d, 0x4a, 0xa2, 0x83, 0x5a, 0x52, 0xe7, 0x2d,
+	0x14, 0xdf, 0x0e, 0x4f, 0x47, 0xf2, 0x5f
+};
+static const u8 enc_assoc035[] __initconst = {
+	0x37, 0x46, 0x18, 0xa0, 0x6e, 0xa9, 0x8a, 0x48
+};
+static const u8 enc_nonce035[] __initconst = {
+	0x47, 0x0a, 0x33, 0x9e, 0xcb, 0x32, 0x19, 0xb8,
+	0xb8, 0x1a, 0x1f, 0x8b
+};
+static const u8 enc_key035[] __initconst = {
+	0x7f, 0x5b, 0x74, 0xc0, 0x7e, 0xd1, 0xb4, 0x0f,
+	0xd1, 0x43, 0x58, 0xfe, 0x2f, 0xf2, 0xa7, 0x40,
+	0xc1, 0x16, 0xc7, 0x70, 0x65, 0x10, 0xe6, 0xa4,
+	0x37, 0xf1, 0x9e, 0xa4, 0x99, 0x11, 0xce, 0xc4
+};
+
+/* wycheproof - misc */
+static const u8 enc_input036[] __initconst = {
+	0xb9, 0xc5, 0x54, 0xcb, 0xc3, 0x6a, 0xc1, 0x8a,
+	0xe8, 0x97, 0xdf, 0x7b, 0xee, 0xca, 0xc1, 0xdb,
+	0xeb, 0x4e, 0xaf, 0xa1, 0x56, 0xbb, 0x60, 0xce,
+	0x2e, 0x5d, 0x48, 0xf0, 0x57, 0x15, 0xe6, 0x78
+};
+static const u8 enc_output036[] __initconst = {
+	0xea, 0x29, 0xaf, 0xa4, 0x9d, 0x36, 0xe8, 0x76,
+	0x0f, 0x5f, 0xe1, 0x97, 0x23, 0xb9, 0x81, 0x1e,
+	0xd5, 0xd5, 0x19, 0x93, 0x4a, 0x44, 0x0f, 0x50,
+	0x81, 0xac, 0x43, 0x0b, 0x95, 0x3b, 0x0e, 0x21,
+	0x22, 0x25, 0x41, 0xaf, 0x46, 0xb8, 0x65, 0x33,
+	0xc6, 0xb6, 0x8d, 0x2f, 0xf1, 0x08, 0xa7, 0xea
+};
+static const u8 enc_assoc036[] __initconst = { };
+static const u8 enc_nonce036[] __initconst = {
+	0x72, 0xcf, 0xd9, 0x0e, 0xf3, 0x02, 0x6c, 0xa2,
+	0x2b, 0x7e, 0x6e, 0x6a
+};
+static const u8 enc_key036[] __initconst = {
+	0xe1, 0x73, 0x1d, 0x58, 0x54, 0xe1, 0xb7, 0x0c,
+	0xb3, 0xff, 0xe8, 0xb7, 0x86, 0xa2, 0xb3, 0xeb,
+	0xf0, 0x99, 0x43, 0x70, 0x95, 0x47, 0x57, 0xb9,
+	0xdc, 0x8c, 0x7b, 0xc5, 0x35, 0x46, 0x34, 0xa3
+};
+
+/* wycheproof - misc */
+static const u8 enc_input037[] __initconst = {
+	0x6b, 0x26, 0x04, 0x99, 0x6c, 0xd3, 0x0c, 0x14,
+	0xa1, 0x3a, 0x52, 0x57, 0xed, 0x6c, 0xff, 0xd3,
+	0xbc, 0x5e, 0x29, 0xd6, 0xb9, 0x7e, 0xb1, 0x79,
+	0x9e, 0xb3, 0x35, 0xe2, 0x81, 0xea, 0x45, 0x1e
+};
+static const u8 enc_output037[] __initconst = {
+	0x6d, 0xad, 0x63, 0x78, 0x97, 0x54, 0x4d, 0x8b,
+	0xf6, 0xbe, 0x95, 0x07, 0xed, 0x4d, 0x1b, 0xb2,
+	0xe9, 0x54, 0xbc, 0x42, 0x7e, 0x5d, 0xe7, 0x29,
+	0xda, 0xf5, 0x07, 0x62, 0x84, 0x6f, 0xf2, 0xf4,
+	0x7b, 0x99, 0x7d, 0x93, 0xc9, 0x82, 0x18, 0x9d,
+	0x70, 0x95, 0xdc, 0x79, 0x4c, 0x74, 0x62, 0x32
+};
+static const u8 enc_assoc037[] __initconst = {
+	0x23, 0x33, 0xe5, 0xce, 0x0f, 0x93, 0xb0, 0x59
+};
+static const u8 enc_nonce037[] __initconst = {
+	0x26, 0x28, 0x80, 0xd4, 0x75, 0xf3, 0xda, 0xc5,
+	0x34, 0x0d, 0xd1, 0xb8
+};
+static const u8 enc_key037[] __initconst = {
+	0x27, 0xd8, 0x60, 0x63, 0x1b, 0x04, 0x85, 0xa4,
+	0x10, 0x70, 0x2f, 0xea, 0x61, 0xbc, 0x87, 0x3f,
+	0x34, 0x42, 0x26, 0x0c, 0xad, 0xed, 0x4a, 0xbd,
+	0xe2, 0x5b, 0x78, 0x6a, 0x2d, 0x97, 0xf1, 0x45
+};
+
+/* wycheproof - misc */
+static const u8 enc_input038[] __initconst = {
+	0x97, 0x3d, 0x0c, 0x75, 0x38, 0x26, 0xba, 0xe4,
+	0x66, 0xcf, 0x9a, 0xbb, 0x34, 0x93, 0x15, 0x2e,
+	0x9d, 0xe7, 0x81, 0x9e, 0x2b, 0xd0, 0xc7, 0x11,
+	0x71, 0x34, 0x6b, 0x4d, 0x2c, 0xeb, 0xf8, 0x04,
+	0x1a, 0xa3, 0xce, 0xdc, 0x0d, 0xfd, 0x7b, 0x46,
+	0x7e, 0x26, 0x22, 0x8b, 0xc8, 0x6c, 0x9a
+};
+static const u8 enc_output038[] __initconst = {
+	0xfb, 0xa7, 0x8a, 0xe4, 0xf9, 0xd8, 0x08, 0xa6,
+	0x2e, 0x3d, 0xa4, 0x0b, 0xe2, 0xcb, 0x77, 0x00,
+	0xc3, 0x61, 0x3d, 0x9e, 0xb2, 0xc5, 0x29, 0xc6,
+	0x52, 0xe7, 0x6a, 0x43, 0x2c, 0x65, 0x8d, 0x27,
+	0x09, 0x5f, 0x0e, 0xb8, 0xf9, 0x40, 0xc3, 0x24,
+	0x98, 0x1e, 0xa9, 0x35, 0xe5, 0x07, 0xf9, 0x8f,
+	0x04, 0x69, 0x56, 0xdb, 0x3a, 0x51, 0x29, 0x08,
+	0xbd, 0x7a, 0xfc, 0x8f, 0x2a, 0xb0, 0xa9
+};
+static const u8 enc_assoc038[] __initconst = { };
+static const u8 enc_nonce038[] __initconst = {
+	0xe7, 0x4a, 0x51, 0x5e, 0x7e, 0x21, 0x02, 0xb9,
+	0x0b, 0xef, 0x55, 0xd2
+};
+static const u8 enc_key038[] __initconst = {
+	0xcf, 0x0d, 0x40, 0xa4, 0x64, 0x4e, 0x5f, 0x51,
+	0x81, 0x51, 0x65, 0xd5, 0x30, 0x1b, 0x22, 0x63,
+	0x1f, 0x45, 0x44, 0xc4, 0x9a, 0x18, 0x78, 0xe3,
+	0xa0, 0xa5, 0xe8, 0xe1, 0xaa, 0xe0, 0xf2, 0x64
+};
+
+/* wycheproof - misc */
+static const u8 enc_input039[] __initconst = {
+	0xa9, 0x89, 0x95, 0x50, 0x4d, 0xf1, 0x6f, 0x74,
+	0x8b, 0xfb, 0x77, 0x85, 0xff, 0x91, 0xee, 0xb3,
+	0xb6, 0x60, 0xea, 0x9e, 0xd3, 0x45, 0x0c, 0x3d,
+	0x5e, 0x7b, 0x0e, 0x79, 0xef, 0x65, 0x36, 0x59,
+	0xa9, 0x97, 0x8d, 0x75, 0x54, 0x2e, 0xf9, 0x1c,
+	0x45, 0x67, 0x62, 0x21, 0x56, 0x40, 0xb9
+};
+static const u8 enc_output039[] __initconst = {
+	0xa1, 0xff, 0xed, 0x80, 0x76, 0x18, 0x29, 0xec,
+	0xce, 0x24, 0x2e, 0x0e, 0x88, 0xb1, 0x38, 0x04,
+	0x90, 0x16, 0xbc, 0xa0, 0x18, 0xda, 0x2b, 0x6e,
+	0x19, 0x98, 0x6b, 0x3e, 0x31, 0x8c, 0xae, 0x8d,
+	0x80, 0x61, 0x98, 0xfb, 0x4c, 0x52, 0x7c, 0xc3,
+	0x93, 0x50, 0xeb, 0xdd, 0xea, 0xc5, 0x73, 0xc4,
+	0xcb, 0xf0, 0xbe, 0xfd, 0xa0, 0xb7, 0x02, 0x42,
+	0xc6, 0x40, 0xd7, 0xcd, 0x02, 0xd7, 0xa3
+};
+static const u8 enc_assoc039[] __initconst = {
+	0xb3, 0xe4, 0x06, 0x46, 0x83, 0xb0, 0x2d, 0x84
+};
+static const u8 enc_nonce039[] __initconst = {
+	0xd4, 0xd8, 0x07, 0x34, 0x16, 0x83, 0x82, 0x5b,
+	0x31, 0xcd, 0x4d, 0x95
+};
+static const u8 enc_key039[] __initconst = {
+	0x6c, 0xbf, 0xd7, 0x1c, 0x64, 0x5d, 0x18, 0x4c,
+	0xf5, 0xd2, 0x3c, 0x40, 0x2b, 0xdb, 0x0d, 0x25,
+	0xec, 0x54, 0x89, 0x8c, 0x8a, 0x02, 0x73, 0xd4,
+	0x2e, 0xb5, 0xbe, 0x10, 0x9f, 0xdc, 0xb2, 0xac
+};
+
+/* wycheproof - misc */
+static const u8 enc_input040[] __initconst = {
+	0xd0, 0x96, 0x80, 0x31, 0x81, 0xbe, 0xef, 0x9e,
+	0x00, 0x8f, 0xf8, 0x5d, 0x5d, 0xdc, 0x38, 0xdd,
+	0xac, 0xf0, 0xf0, 0x9e, 0xe5, 0xf7, 0xe0, 0x7f,
+	0x1e, 0x40, 0x79, 0xcb, 0x64, 0xd0, 0xdc, 0x8f,
+	0x5e, 0x67, 0x11, 0xcd, 0x49, 0x21, 0xa7, 0x88,
+	0x7d, 0xe7, 0x6e, 0x26, 0x78, 0xfd, 0xc6, 0x76,
+	0x18, 0xf1, 0x18, 0x55, 0x86, 0xbf, 0xea, 0x9d,
+	0x4c, 0x68, 0x5d, 0x50, 0xe4, 0xbb, 0x9a, 0x82
+};
+static const u8 enc_output040[] __initconst = {
+	0x9a, 0x4e, 0xf2, 0x2b, 0x18, 0x16, 0x77, 0xb5,
+	0x75, 0x5c, 0x08, 0xf7, 0x47, 0xc0, 0xf8, 0xd8,
+	0xe8, 0xd4, 0xc1, 0x8a, 0x9c, 0xc2, 0x40, 0x5c,
+	0x12, 0xbb, 0x51, 0xbb, 0x18, 0x72, 0xc8, 0xe8,
+	0xb8, 0x77, 0x67, 0x8b, 0xec, 0x44, 0x2c, 0xfc,
+	0xbb, 0x0f, 0xf4, 0x64, 0xa6, 0x4b, 0x74, 0x33,
+	0x2c, 0xf0, 0x72, 0x89, 0x8c, 0x7e, 0x0e, 0xdd,
+	0xf6, 0x23, 0x2e, 0xa6, 0xe2, 0x7e, 0xfe, 0x50,
+	0x9f, 0xf3, 0x42, 0x7a, 0x0f, 0x32, 0xfa, 0x56,
+	0x6d, 0x9c, 0xa0, 0xa7, 0x8a, 0xef, 0xc0, 0x13
+};
+static const u8 enc_assoc040[] __initconst = { };
+static const u8 enc_nonce040[] __initconst = {
+	0xd6, 0x10, 0x40, 0xa3, 0x13, 0xed, 0x49, 0x28,
+	0x23, 0xcc, 0x06, 0x5b
+};
+static const u8 enc_key040[] __initconst = {
+	0x5b, 0x1d, 0x10, 0x35, 0xc0, 0xb1, 0x7e, 0xe0,
+	0xb0, 0x44, 0x47, 0x67, 0xf8, 0x0a, 0x25, 0xb8,
+	0xc1, 0xb7, 0x41, 0xf4, 0xb5, 0x0a, 0x4d, 0x30,
+	0x52, 0x22, 0x6b, 0xaa, 0x1c, 0x6f, 0xb7, 0x01
+};
+
+/* wycheproof - misc */
+static const u8 enc_input041[] __initconst = {
+	0x94, 0xee, 0x16, 0x6d, 0x6d, 0x6e, 0xcf, 0x88,
+	0x32, 0x43, 0x71, 0x36, 0xb4, 0xae, 0x80, 0x5d,
+	0x42, 0x88, 0x64, 0x35, 0x95, 0x86, 0xd9, 0x19,
+	0x3a, 0x25, 0x01, 0x62, 0x93, 0xed, 0xba, 0x44,
+	0x3c, 0x58, 0xe0, 0x7e, 0x7b, 0x71, 0x95, 0xec,
+	0x5b, 0xd8, 0x45, 0x82, 0xa9, 0xd5, 0x6c, 0x8d,
+	0x4a, 0x10, 0x8c, 0x7d, 0x7c, 0xe3, 0x4e, 0x6c,
+	0x6f, 0x8e, 0xa1, 0xbe, 0xc0, 0x56, 0x73, 0x17
+};
+static const u8 enc_output041[] __initconst = {
+	0x5f, 0xbb, 0xde, 0xcc, 0x34, 0xbe, 0x20, 0x16,
+	0x14, 0xf6, 0x36, 0x03, 0x1e, 0xeb, 0x42, 0xf1,
+	0xca, 0xce, 0x3c, 0x79, 0xa1, 0x2c, 0xff, 0xd8,
+	0x71, 0xee, 0x8e, 0x73, 0x82, 0x0c, 0x82, 0x97,
+	0x49, 0xf1, 0xab, 0xb4, 0x29, 0x43, 0x67, 0x84,
+	0x9f, 0xb6, 0xc2, 0xaa, 0x56, 0xbd, 0xa8, 0xa3,
+	0x07, 0x8f, 0x72, 0x3d, 0x7c, 0x1c, 0x85, 0x20,
+	0x24, 0xb0, 0x17, 0xb5, 0x89, 0x73, 0xfb, 0x1e,
+	0x09, 0x26, 0x3d, 0xa7, 0xb4, 0xcb, 0x92, 0x14,
+	0x52, 0xf9, 0x7d, 0xca, 0x40, 0xf5, 0x80, 0xec
+};
+static const u8 enc_assoc041[] __initconst = {
+	0x71, 0x93, 0xf6, 0x23, 0x66, 0x33, 0x21, 0xa2
+};
+static const u8 enc_nonce041[] __initconst = {
+	0xd3, 0x1c, 0x21, 0xab, 0xa1, 0x75, 0xb7, 0x0d,
+	0xe4, 0xeb, 0xb1, 0x9c
+};
+static const u8 enc_key041[] __initconst = {
+	0x97, 0xd6, 0x35, 0xc4, 0xf4, 0x75, 0x74, 0xd9,
+	0x99, 0x8a, 0x90, 0x87, 0x5d, 0xa1, 0xd3, 0xa2,
+	0x84, 0xb7, 0x55, 0xb2, 0xd3, 0x92, 0x97, 0xa5,
+	0x72, 0x52, 0x35, 0x19, 0x0e, 0x10, 0xa9, 0x7e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input042[] __initconst = {
+	0xb4, 0x29, 0xeb, 0x80, 0xfb, 0x8f, 0xe8, 0xba,
+	0xed, 0xa0, 0xc8, 0x5b, 0x9c, 0x33, 0x34, 0x58,
+	0xe7, 0xc2, 0x99, 0x2e, 0x55, 0x84, 0x75, 0x06,
+	0x9d, 0x12, 0xd4, 0x5c, 0x22, 0x21, 0x75, 0x64,
+	0x12, 0x15, 0x88, 0x03, 0x22, 0x97, 0xef, 0xf5,
+	0x67, 0x83, 0x74, 0x2a, 0x5f, 0xc2, 0x2d, 0x74,
+	0x10, 0xff, 0xb2, 0x9d, 0x66, 0x09, 0x86, 0x61,
+	0xd7, 0x6f, 0x12, 0x6c, 0x3c, 0x27, 0x68, 0x9e,
+	0x43, 0xb3, 0x72, 0x67, 0xca, 0xc5, 0xa3, 0xa6,
+	0xd3, 0xab, 0x49, 0xe3, 0x91, 0xda, 0x29, 0xcd,
+	0x30, 0x54, 0xa5, 0x69, 0x2e, 0x28, 0x07, 0xe4,
+	0xc3, 0xea, 0x46, 0xc8, 0x76, 0x1d, 0x50, 0xf5,
+	0x92
+};
+static const u8 enc_output042[] __initconst = {
+	0xd0, 0x10, 0x2f, 0x6c, 0x25, 0x8b, 0xf4, 0x97,
+	0x42, 0xce, 0xc3, 0x4c, 0xf2, 0xd0, 0xfe, 0xdf,
+	0x23, 0xd1, 0x05, 0xfb, 0x4c, 0x84, 0xcf, 0x98,
+	0x51, 0x5e, 0x1b, 0xc9, 0xa6, 0x4f, 0x8a, 0xd5,
+	0xbe, 0x8f, 0x07, 0x21, 0xbd, 0xe5, 0x06, 0x45,
+	0xd0, 0x00, 0x83, 0xc3, 0xa2, 0x63, 0xa3, 0x10,
+	0x53, 0xb7, 0x60, 0x24, 0x5f, 0x52, 0xae, 0x28,
+	0x66, 0xa5, 0xec, 0x83, 0xb1, 0x9f, 0x61, 0xbe,
+	0x1d, 0x30, 0xd5, 0xc5, 0xd9, 0xfe, 0xcc, 0x4c,
+	0xbb, 0xe0, 0x8f, 0xd3, 0x85, 0x81, 0x3a, 0x2a,
+	0xa3, 0x9a, 0x00, 0xff, 0x9c, 0x10, 0xf7, 0xf2,
+	0x37, 0x02, 0xad, 0xd1, 0xe4, 0xb2, 0xff, 0xa3,
+	0x1c, 0x41, 0x86, 0x5f, 0xc7, 0x1d, 0xe1, 0x2b,
+	0x19, 0x61, 0x21, 0x27, 0xce, 0x49, 0x99, 0x3b,
+	0xb0
+};
+static const u8 enc_assoc042[] __initconst = { };
+static const u8 enc_nonce042[] __initconst = {
+	0x17, 0xc8, 0x6a, 0x8a, 0xbb, 0xb7, 0xe0, 0x03,
+	0xac, 0xde, 0x27, 0x99
+};
+static const u8 enc_key042[] __initconst = {
+	0xfe, 0x6e, 0x55, 0xbd, 0xae, 0xd1, 0xf7, 0x28,
+	0x4c, 0xa5, 0xfc, 0x0f, 0x8c, 0x5f, 0x2b, 0x8d,
+	0xf5, 0x6d, 0xc0, 0xf4, 0x9e, 0x8c, 0xa6, 0x6a,
+	0x41, 0x99, 0x5e, 0x78, 0x33, 0x51, 0xf9, 0x01
+};
+
+/* wycheproof - misc */
+static const u8 enc_input043[] __initconst = {
+	0xce, 0xb5, 0x34, 0xce, 0x50, 0xdc, 0x23, 0xff,
+	0x63, 0x8a, 0xce, 0x3e, 0xf6, 0x3a, 0xb2, 0xcc,
+	0x29, 0x73, 0xee, 0xad, 0xa8, 0x07, 0x85, 0xfc,
+	0x16, 0x5d, 0x06, 0xc2, 0xf5, 0x10, 0x0f, 0xf5,
+	0xe8, 0xab, 0x28, 0x82, 0xc4, 0x75, 0xaf, 0xcd,
+	0x05, 0xcc, 0xd4, 0x9f, 0x2e, 0x7d, 0x8f, 0x55,
+	0xef, 0x3a, 0x72, 0xe3, 0xdc, 0x51, 0xd6, 0x85,
+	0x2b, 0x8e, 0x6b, 0x9e, 0x7a, 0xec, 0xe5, 0x7b,
+	0xe6, 0x55, 0x6b, 0x0b, 0x6d, 0x94, 0x13, 0xe3,
+	0x3f, 0xc5, 0xfc, 0x24, 0xa9, 0xa2, 0x05, 0xad,
+	0x59, 0x57, 0x4b, 0xb3, 0x9d, 0x94, 0x4a, 0x92,
+	0xdc, 0x47, 0x97, 0x0d, 0x84, 0xa6, 0xad, 0x31,
+	0x76
+};
+static const u8 enc_output043[] __initconst = {
+	0x75, 0x45, 0x39, 0x1b, 0x51, 0xde, 0x01, 0xd5,
+	0xc5, 0x3d, 0xfa, 0xca, 0x77, 0x79, 0x09, 0x06,
+	0x3e, 0x58, 0xed, 0xee, 0x4b, 0xb1, 0x22, 0x7e,
+	0x71, 0x10, 0xac, 0x4d, 0x26, 0x20, 0xc2, 0xae,
+	0xc2, 0xf8, 0x48, 0xf5, 0x6d, 0xee, 0xb0, 0x37,
+	0xa8, 0xdc, 0xed, 0x75, 0xaf, 0xa8, 0xa6, 0xc8,
+	0x90, 0xe2, 0xde, 0xe4, 0x2f, 0x95, 0x0b, 0xb3,
+	0x3d, 0x9e, 0x24, 0x24, 0xd0, 0x8a, 0x50, 0x5d,
+	0x89, 0x95, 0x63, 0x97, 0x3e, 0xd3, 0x88, 0x70,
+	0xf3, 0xde, 0x6e, 0xe2, 0xad, 0xc7, 0xfe, 0x07,
+	0x2c, 0x36, 0x6c, 0x14, 0xe2, 0xcf, 0x7c, 0xa6,
+	0x2f, 0xb3, 0xd3, 0x6b, 0xee, 0x11, 0x68, 0x54,
+	0x61, 0xb7, 0x0d, 0x44, 0xef, 0x8c, 0x66, 0xc5,
+	0xc7, 0xbb, 0xf1, 0x0d, 0xca, 0xdd, 0x7f, 0xac,
+	0xf6
+};
+static const u8 enc_assoc043[] __initconst = {
+	0xa1, 0x1c, 0x40, 0xb6, 0x03, 0x76, 0x73, 0x30
+};
+static const u8 enc_nonce043[] __initconst = {
+	0x46, 0x36, 0x2f, 0x45, 0xd6, 0x37, 0x9e, 0x63,
+	0xe5, 0x22, 0x94, 0x60
+};
+static const u8 enc_key043[] __initconst = {
+	0xaa, 0xbc, 0x06, 0x34, 0x74, 0xe6, 0x5c, 0x4c,
+	0x3e, 0x9b, 0xdc, 0x48, 0x0d, 0xea, 0x97, 0xb4,
+	0x51, 0x10, 0xc8, 0x61, 0x88, 0x46, 0xff, 0x6b,
+	0x15, 0xbd, 0xd2, 0xa4, 0xa5, 0x68, 0x2c, 0x4e
+};
+
+/* wycheproof - misc */
+static const u8 enc_input044[] __initconst = {
+	0xe5, 0xcc, 0xaa, 0x44, 0x1b, 0xc8, 0x14, 0x68,
+	0x8f, 0x8f, 0x6e, 0x8f, 0x28, 0xb5, 0x00, 0xb2
+};
+static const u8 enc_output044[] __initconst = {
+	0x7e, 0x72, 0xf5, 0xa1, 0x85, 0xaf, 0x16, 0xa6,
+	0x11, 0x92, 0x1b, 0x43, 0x8f, 0x74, 0x9f, 0x0b,
+	0x12, 0x42, 0xc6, 0x70, 0x73, 0x23, 0x34, 0x02,
+	0x9a, 0xdf, 0xe1, 0xc5, 0x00, 0x16, 0x51, 0xe4
+};
+static const u8 enc_assoc044[] __initconst = {
+	0x02
+};
+static const u8 enc_nonce044[] __initconst = {
+	0x87, 0x34, 0x5f, 0x10, 0x55, 0xfd, 0x9e, 0x21,
+	0x02, 0xd5, 0x06, 0x56
+};
+static const u8 enc_key044[] __initconst = {
+	0x7d, 0x00, 0xb4, 0x80, 0x95, 0xad, 0xfa, 0x32,
+	0x72, 0x05, 0x06, 0x07, 0xb2, 0x64, 0x18, 0x50,
+	0x02, 0xba, 0x99, 0x95, 0x7c, 0x49, 0x8b, 0xe0,
+	0x22, 0x77, 0x0f, 0x2c, 0xe2, 0xf3, 0x14, 0x3c
+};
+
+/* wycheproof - misc */
+static const u8 enc_input045[] __initconst = {
+	0x02, 0xcd, 0xe1, 0x68, 0xfb, 0xa3, 0xf5, 0x44,
+	0xbb, 0xd0, 0x33, 0x2f, 0x7a, 0xde, 0xad, 0xa8
+};
+static const u8 enc_output045[] __initconst = {
+	0x85, 0xf2, 0x9a, 0x71, 0x95, 0x57, 0xcd, 0xd1,
+	0x4d, 0x1f, 0x8f, 0xff, 0xab, 0x6d, 0x9e, 0x60,
+	0x73, 0x2c, 0xa3, 0x2b, 0xec, 0xd5, 0x15, 0xa1,
+	0xed, 0x35, 0x3f, 0x54, 0x2e, 0x99, 0x98, 0x58
+};
+static const u8 enc_assoc045[] __initconst = {
+	0xb6, 0x48
+};
+static const u8 enc_nonce045[] __initconst = {
+	0x87, 0xa3, 0x16, 0x3e, 0xc0, 0x59, 0x8a, 0xd9,
+	0x5b, 0x3a, 0xa7, 0x13
+};
+static const u8 enc_key045[] __initconst = {
+	0x64, 0x32, 0x71, 0x7f, 0x1d, 0xb8, 0x5e, 0x41,
+	0xac, 0x78, 0x36, 0xbc, 0xe2, 0x51, 0x85, 0xa0,
+	0x80, 0xd5, 0x76, 0x2b, 0x9e, 0x2b, 0x18, 0x44,
+	0x4b, 0x6e, 0xc7, 0x2c, 0x3b, 0xd8, 0xe4, 0xdc
+};
+
+/* wycheproof - misc */
+static const u8 enc_input046[] __initconst = {
+	0x16, 0xdd, 0xd2, 0x3f, 0xf5, 0x3f, 0x3d, 0x23,
+	0xc0, 0x63, 0x34, 0x48, 0x70, 0x40, 0xeb, 0x47
+};
+static const u8 enc_output046[] __initconst = {
+	0xc1, 0xb2, 0x95, 0x93, 0x6d, 0x56, 0xfa, 0xda,
+	0xc0, 0x3e, 0x5f, 0x74, 0x2b, 0xff, 0x73, 0xa1,
+	0x39, 0xc4, 0x57, 0xdb, 0xab, 0x66, 0x38, 0x2b,
+	0xab, 0xb3, 0xb5, 0x58, 0x00, 0xcd, 0xa5, 0xb8
+};
+static const u8 enc_assoc046[] __initconst = {
+	0xbd, 0x4c, 0xd0, 0x2f, 0xc7, 0x50, 0x2b, 0xbd,
+	0xbd, 0xf6, 0xc9, 0xa3, 0xcb, 0xe8, 0xf0
+};
+static const u8 enc_nonce046[] __initconst = {
+	0x6f, 0x57, 0x3a, 0xa8, 0x6b, 0xaa, 0x49, 0x2b,
+	0xa4, 0x65, 0x96, 0xdf
+};
+static const u8 enc_key046[] __initconst = {
+	0x8e, 0x34, 0xcf, 0x73, 0xd2, 0x45, 0xa1, 0x08,
+	0x2a, 0x92, 0x0b, 0x86, 0x36, 0x4e, 0xb8, 0x96,
+	0xc4, 0x94, 0x64, 0x67, 0xbc, 0xb3, 0xd5, 0x89,
+	0x29, 0xfc, 0xb3, 0x66, 0x90, 0xe6, 0x39, 0x4f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input047[] __initconst = {
+	0x62, 0x3b, 0x78, 0x50, 0xc3, 0x21, 0xe2, 0xcf,
+	0x0c, 0x6f, 0xbc, 0xc8, 0xdf, 0xd1, 0xaf, 0xf2
+};
+static const u8 enc_output047[] __initconst = {
+	0xc8, 0x4c, 0x9b, 0xb7, 0xc6, 0x1c, 0x1b, 0xcb,
+	0x17, 0x77, 0x2a, 0x1c, 0x50, 0x0c, 0x50, 0x95,
+	0xdb, 0xad, 0xf7, 0xa5, 0x13, 0x8c, 0xa0, 0x34,
+	0x59, 0xa2, 0xcd, 0x65, 0x83, 0x1e, 0x09, 0x2f
+};
+static const u8 enc_assoc047[] __initconst = {
+	0x89, 0xcc, 0xe9, 0xfb, 0x47, 0x44, 0x1d, 0x07,
+	0xe0, 0x24, 0x5a, 0x66, 0xfe, 0x8b, 0x77, 0x8b
+};
+static const u8 enc_nonce047[] __initconst = {
+	0x1a, 0x65, 0x18, 0xf0, 0x2e, 0xde, 0x1d, 0xa6,
+	0x80, 0x92, 0x66, 0xd9
+};
+static const u8 enc_key047[] __initconst = {
+	0xcb, 0x55, 0x75, 0xf5, 0xc7, 0xc4, 0x5c, 0x91,
+	0xcf, 0x32, 0x0b, 0x13, 0x9f, 0xb5, 0x94, 0x23,
+	0x75, 0x60, 0xd0, 0xa3, 0xe6, 0xf8, 0x65, 0xa6,
+	0x7d, 0x4f, 0x63, 0x3f, 0x2c, 0x08, 0xf0, 0x16
+};
+
+/* wycheproof - misc */
+static const u8 enc_input048[] __initconst = {
+	0x87, 0xb3, 0xa4, 0xd7, 0xb2, 0x6d, 0x8d, 0x32,
+	0x03, 0xa0, 0xde, 0x1d, 0x64, 0xef, 0x82, 0xe3
+};
+static const u8 enc_output048[] __initconst = {
+	0x94, 0xbc, 0x80, 0x62, 0x1e, 0xd1, 0xe7, 0x1b,
+	0x1f, 0xd2, 0xb5, 0xc3, 0xa1, 0x5e, 0x35, 0x68,
+	0x33, 0x35, 0x11, 0x86, 0x17, 0x96, 0x97, 0x84,
+	0x01, 0x59, 0x8b, 0x96, 0x37, 0x22, 0xf5, 0xb3
+};
+static const u8 enc_assoc048[] __initconst = {
+	0xd1, 0x9f, 0x2d, 0x98, 0x90, 0x95, 0xf7, 0xab,
+	0x03, 0xa5, 0xfd, 0xe8, 0x44, 0x16, 0xe0, 0x0c,
+	0x0e
+};
+static const u8 enc_nonce048[] __initconst = {
+	0x56, 0x4d, 0xee, 0x49, 0xab, 0x00, 0xd2, 0x40,
+	0xfc, 0x10, 0x68, 0xc3
+};
+static const u8 enc_key048[] __initconst = {
+	0xa5, 0x56, 0x9e, 0x72, 0x9a, 0x69, 0xb2, 0x4b,
+	0xa6, 0xe0, 0xff, 0x15, 0xc4, 0x62, 0x78, 0x97,
+	0x43, 0x68, 0x24, 0xc9, 0x41, 0xe9, 0xd0, 0x0b,
+	0x2e, 0x93, 0xfd, 0xdc, 0x4b, 0xa7, 0x76, 0x57
+};
+
+/* wycheproof - misc */
+static const u8 enc_input049[] __initconst = {
+	0xe6, 0x01, 0xb3, 0x85, 0x57, 0x79, 0x7d, 0xa2,
+	0xf8, 0xa4, 0x10, 0x6a, 0x08, 0x9d, 0x1d, 0xa6
+};
+static const u8 enc_output049[] __initconst = {
+	0x29, 0x9b, 0x5d, 0x3f, 0x3d, 0x03, 0xc0, 0x87,
+	0x20, 0x9a, 0x16, 0xe2, 0x85, 0x14, 0x31, 0x11,
+	0x4b, 0x45, 0x4e, 0xd1, 0x98, 0xde, 0x11, 0x7e,
+	0x83, 0xec, 0x49, 0xfa, 0x8d, 0x85, 0x08, 0xd6
+};
+static const u8 enc_assoc049[] __initconst = {
+	0x5e, 0x64, 0x70, 0xfa, 0xcd, 0x99, 0xc1, 0xd8,
+	0x1e, 0x37, 0xcd, 0x44, 0x01, 0x5f, 0xe1, 0x94,
+	0x80, 0xa2, 0xa4, 0xd3, 0x35, 0x2a, 0x4f, 0xf5,
+	0x60, 0xc0, 0x64, 0x0f, 0xdb, 0xda
+};
+static const u8 enc_nonce049[] __initconst = {
+	0xdf, 0x87, 0x13, 0xe8, 0x7e, 0xc3, 0xdb, 0xcf,
+	0xad, 0x14, 0xd5, 0x3e
+};
+static const u8 enc_key049[] __initconst = {
+	0x56, 0x20, 0x74, 0x65, 0xb4, 0xe4, 0x8e, 0x6d,
+	0x04, 0x63, 0x0f, 0x4a, 0x42, 0xf3, 0x5c, 0xfc,
+	0x16, 0x3a, 0xb2, 0x89, 0xc2, 0x2a, 0x2b, 0x47,
+	0x84, 0xf6, 0xf9, 0x29, 0x03, 0x30, 0xbe, 0xe0
+};
+
+/* wycheproof - misc */
+static const u8 enc_input050[] __initconst = {
+	0xdc, 0x9e, 0x9e, 0xaf, 0x11, 0xe3, 0x14, 0x18,
+	0x2d, 0xf6, 0xa4, 0xeb, 0xa1, 0x7a, 0xec, 0x9c
+};
+static const u8 enc_output050[] __initconst = {
+	0x60, 0x5b, 0xbf, 0x90, 0xae, 0xb9, 0x74, 0xf6,
+	0x60, 0x2b, 0xc7, 0x78, 0x05, 0x6f, 0x0d, 0xca,
+	0x38, 0xea, 0x23, 0xd9, 0x90, 0x54, 0xb4, 0x6b,
+	0x42, 0xff, 0xe0, 0x04, 0x12, 0x9d, 0x22, 0x04
+};
+static const u8 enc_assoc050[] __initconst = {
+	0xba, 0x44, 0x6f, 0x6f, 0x9a, 0x0c, 0xed, 0x22,
+	0x45, 0x0f, 0xeb, 0x10, 0x73, 0x7d, 0x90, 0x07,
+	0xfd, 0x69, 0xab, 0xc1, 0x9b, 0x1d, 0x4d, 0x90,
+	0x49, 0xa5, 0x55, 0x1e, 0x86, 0xec, 0x2b, 0x37
+};
+static const u8 enc_nonce050[] __initconst = {
+	0x8d, 0xf4, 0xb1, 0x5a, 0x88, 0x8c, 0x33, 0x28,
+	0x6a, 0x7b, 0x76, 0x51
+};
+static const u8 enc_key050[] __initconst = {
+	0x39, 0x37, 0x98, 0x6a, 0xf8, 0x6d, 0xaf, 0xc1,
+	0xba, 0x0c, 0x46, 0x72, 0xd8, 0xab, 0xc4, 0x6c,
+	0x20, 0x70, 0x62, 0x68, 0x2d, 0x9c, 0x26, 0x4a,
+	0xb0, 0x6d, 0x6c, 0x58, 0x07, 0x20, 0x51, 0x30
+};
+
+/* wycheproof - misc */
+static const u8 enc_input051[] __initconst = {
+	0x81, 0xce, 0x84, 0xed, 0xe9, 0xb3, 0x58, 0x59,
+	0xcc, 0x8c, 0x49, 0xa8, 0xf6, 0xbe, 0x7d, 0xc6
+};
+static const u8 enc_output051[] __initconst = {
+	0x7b, 0x7c, 0xe0, 0xd8, 0x24, 0x80, 0x9a, 0x70,
+	0xde, 0x32, 0x56, 0x2c, 0xcf, 0x2c, 0x2b, 0xbd,
+	0x15, 0xd4, 0x4a, 0x00, 0xce, 0x0d, 0x19, 0xb4,
+	0x23, 0x1f, 0x92, 0x1e, 0x22, 0xbc, 0x0a, 0x43
+};
+static const u8 enc_assoc051[] __initconst = {
+	0xd4, 0x1a, 0x82, 0x8d, 0x5e, 0x71, 0x82, 0x92,
+	0x47, 0x02, 0x19, 0x05, 0x40, 0x2e, 0xa2, 0x57,
+	0xdc, 0xcb, 0xc3, 0xb8, 0x0f, 0xcd, 0x56, 0x75,
+	0x05, 0x6b, 0x68, 0xbb, 0x59, 0xe6, 0x2e, 0x88,
+	0x73
+};
+static const u8 enc_nonce051[] __initconst = {
+	0xbe, 0x40, 0xe5, 0xf1, 0xa1, 0x18, 0x17, 0xa0,
+	0xa8, 0xfa, 0x89, 0x49
+};
+static const u8 enc_key051[] __initconst = {
+	0x36, 0x37, 0x2a, 0xbc, 0xdb, 0x78, 0xe0, 0x27,
+	0x96, 0x46, 0xac, 0x3d, 0x17, 0x6b, 0x96, 0x74,
+	0xe9, 0x15, 0x4e, 0xec, 0xf0, 0xd5, 0x46, 0x9c,
+	0x65, 0x1e, 0xc7, 0xe1, 0x6b, 0x4c, 0x11, 0x99
+};
+
+/* wycheproof - misc */
+static const u8 enc_input052[] __initconst = {
+	0xa6, 0x67, 0x47, 0xc8, 0x9e, 0x85, 0x7a, 0xf3,
+	0xa1, 0x8e, 0x2c, 0x79, 0x50, 0x00, 0x87, 0xed
+};
+static const u8 enc_output052[] __initconst = {
+	0xca, 0x82, 0xbf, 0xf3, 0xe2, 0xf3, 0x10, 0xcc,
+	0xc9, 0x76, 0x67, 0x2c, 0x44, 0x15, 0xe6, 0x9b,
+	0x57, 0x63, 0x8c, 0x62, 0xa5, 0xd8, 0x5d, 0xed,
+	0x77, 0x4f, 0x91, 0x3c, 0x81, 0x3e, 0xa0, 0x32
+};
+static const u8 enc_assoc052[] __initconst = {
+	0x3f, 0x2d, 0xd4, 0x9b, 0xbf, 0x09, 0xd6, 0x9a,
+	0x78, 0xa3, 0xd8, 0x0e, 0xa2, 0x56, 0x66, 0x14,
+	0xfc, 0x37, 0x94, 0x74, 0x19, 0x6c, 0x1a, 0xae,
+	0x84, 0x58, 0x3d, 0xa7, 0x3d, 0x7f, 0xf8, 0x5c,
+	0x6f, 0x42, 0xca, 0x42, 0x05, 0x6a, 0x97, 0x92,
+	0xcc, 0x1b, 0x9f, 0xb3, 0xc7, 0xd2, 0x61
+};
+static const u8 enc_nonce052[] __initconst = {
+	0x84, 0xc8, 0x7d, 0xae, 0x4e, 0xee, 0x27, 0x73,
+	0x0e, 0xc3, 0x5d, 0x12
+};
+static const u8 enc_key052[] __initconst = {
+	0x9f, 0x14, 0x79, 0xed, 0x09, 0x7d, 0x7f, 0xe5,
+	0x29, 0xc1, 0x1f, 0x2f, 0x5a, 0xdd, 0x9a, 0xaf,
+	0xf4, 0xa1, 0xca, 0x0b, 0x68, 0x99, 0x7a, 0x2c,
+	0xb7, 0xf7, 0x97, 0x49, 0xbd, 0x90, 0xaa, 0xf4
+};
+
+/* wycheproof - misc */
+static const u8 enc_input053[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe
+};
+static const u8 enc_output053[] __initconst = {
+	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,
+	0xe6, 0xd3, 0xd7, 0x32, 0x4a, 0x1c, 0xbb, 0xa7,
+	0x77, 0xbb, 0xb0, 0xec, 0xdd, 0xa3, 0x78, 0x07
+};
+static const u8 enc_assoc053[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce053[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key053[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input054[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe,
+	0xe3, 0xbc, 0xdb, 0x5b, 0x1e, 0xde, 0xfc, 0xfe,
+	0x8b, 0xcd, 0xa1, 0xb6, 0xa1, 0x5c, 0x8c, 0x2b,
+	0x08, 0x69, 0xff, 0xd2, 0xec, 0x5e, 0x26, 0xe5,
+	0x53, 0xb7, 0xb2, 0x27, 0xfe, 0x87, 0xfd, 0xbd
+};
+static const u8 enc_output054[] __initconst = {
+	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, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x06, 0x2d, 0xe6, 0x79, 0x5f, 0x27, 0x4f, 0xd2,
+	0xa3, 0x05, 0xd7, 0x69, 0x80, 0xbc, 0x9c, 0xce
+};
+static const u8 enc_assoc054[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce054[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key054[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input055[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x80, 0x94, 0x17, 0x83,
+	0x55, 0xd3, 0x04, 0x84, 0x64, 0x43, 0xfe, 0xe8,
+	0xdf, 0x99, 0x47, 0x03, 0x03, 0xfb, 0x3b, 0x7b,
+	0x80, 0xe0, 0x30, 0xbe, 0xeb, 0xd3, 0x29, 0xbe,
+	0xe3, 0xbc, 0xdb, 0x5b, 0x1e, 0xde, 0xfc, 0xfe,
+	0x8b, 0xcd, 0xa1, 0xb6, 0xa1, 0x5c, 0x8c, 0x2b,
+	0x08, 0x69, 0xff, 0xd2, 0xec, 0x5e, 0x26, 0xe5,
+	0x53, 0xb7, 0xb2, 0x27, 0xfe, 0x87, 0xfd, 0xbd,
+	0x7a, 0xda, 0x44, 0x42, 0x42, 0x69, 0xbf, 0xfa,
+	0x55, 0x27, 0xf2, 0x70, 0xac, 0xf6, 0x85, 0x02,
+	0xb7, 0x4c, 0x5a, 0xe2, 0xe6, 0x0c, 0x05, 0x80,
+	0x98, 0x1a, 0x49, 0x38, 0x45, 0x93, 0x92, 0xc4,
+	0x9b, 0xb2, 0xf2, 0x84, 0xb6, 0x46, 0xef, 0xc7,
+	0xf3, 0xf0, 0xb1, 0x36, 0x1d, 0xc3, 0x48, 0xed,
+	0x77, 0xd3, 0x0b, 0xc5, 0x76, 0x92, 0xed, 0x38,
+	0xfb, 0xac, 0x01, 0x88, 0x38, 0x04, 0x88, 0xc7
+};
+static const u8 enc_output055[] __initconst = {
+	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, 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, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xd8, 0xb4, 0x79, 0x02, 0xba, 0xae, 0xaf, 0xb3,
+	0x42, 0x03, 0x05, 0x15, 0x29, 0xaf, 0x28, 0x2e
+};
+static const u8 enc_assoc055[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce055[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key055[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input056[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output056[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb3, 0x89, 0x1c, 0x84, 0x9c, 0xb5, 0x2c, 0x27,
+	0x74, 0x7e, 0xdf, 0xcf, 0x31, 0x21, 0x3b, 0xb6
+};
+static const u8 enc_assoc056[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce056[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key056[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input057[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41,
+	0x1c, 0x43, 0x24, 0xa4, 0xe1, 0x21, 0x03, 0x01,
+	0x74, 0x32, 0x5e, 0x49, 0x5e, 0xa3, 0x73, 0xd4,
+	0xf7, 0x96, 0x00, 0x2d, 0x13, 0xa1, 0xd9, 0x1a,
+	0xac, 0x48, 0x4d, 0xd8, 0x01, 0x78, 0x02, 0x42
+};
+static const u8 enc_output057[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf0, 0xc1, 0x2d, 0x26, 0xef, 0x03, 0x02, 0x9b,
+	0x62, 0xc0, 0x08, 0xda, 0x27, 0xc5, 0xdc, 0x68
+};
+static const u8 enc_assoc057[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce057[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key057[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input058[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x7f, 0x6b, 0xe8, 0x7c,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x9b, 0xbc, 0x01, 0x17,
+	0x20, 0x66, 0xb8, 0xfc, 0xfc, 0x04, 0xc4, 0x84,
+	0x7f, 0x1f, 0xcf, 0x41, 0x14, 0x2c, 0xd6, 0x41,
+	0x1c, 0x43, 0x24, 0xa4, 0xe1, 0x21, 0x03, 0x01,
+	0x74, 0x32, 0x5e, 0x49, 0x5e, 0xa3, 0x73, 0xd4,
+	0xf7, 0x96, 0x00, 0x2d, 0x13, 0xa1, 0xd9, 0x1a,
+	0xac, 0x48, 0x4d, 0xd8, 0x01, 0x78, 0x02, 0x42,
+	0x85, 0x25, 0xbb, 0xbd, 0xbd, 0x96, 0x40, 0x05,
+	0xaa, 0xd8, 0x0d, 0x8f, 0x53, 0x09, 0x7a, 0xfd,
+	0x48, 0xb3, 0xa5, 0x1d, 0x19, 0xf3, 0xfa, 0x7f,
+	0x67, 0xe5, 0xb6, 0xc7, 0xba, 0x6c, 0x6d, 0x3b,
+	0x64, 0x4d, 0x0d, 0x7b, 0x49, 0xb9, 0x10, 0x38,
+	0x0c, 0x0f, 0x4e, 0xc9, 0xe2, 0x3c, 0xb7, 0x12,
+	0x88, 0x2c, 0xf4, 0x3a, 0x89, 0x6d, 0x12, 0xc7,
+	0x04, 0x53, 0xfe, 0x77, 0xc7, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output058[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xee, 0x65, 0x78, 0x30, 0x01, 0xc2, 0x56, 0x91,
+	0xfa, 0x28, 0xd0, 0xf5, 0xf1, 0xc1, 0xd7, 0x62
+};
+static const u8 enc_assoc058[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce058[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key058[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input059[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e
+};
+static const u8 enc_output059[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x79, 0xba, 0x7a, 0x29, 0xf5, 0xa7, 0xbb, 0x75,
+	0x79, 0x7a, 0xf8, 0x7a, 0x61, 0x01, 0x29, 0xa4
+};
+static const u8 enc_assoc059[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce059[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key059[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input060[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e,
+	0xe3, 0xbc, 0xdb, 0xdb, 0x1e, 0xde, 0xfc, 0x7e,
+	0x8b, 0xcd, 0xa1, 0x36, 0xa1, 0x5c, 0x8c, 0xab,
+	0x08, 0x69, 0xff, 0x52, 0xec, 0x5e, 0x26, 0x65,
+	0x53, 0xb7, 0xb2, 0xa7, 0xfe, 0x87, 0xfd, 0x3d
+};
+static const u8 enc_output060[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x36, 0xb1, 0x74, 0x38, 0x19, 0xe1, 0xb9, 0xba,
+	0x15, 0x51, 0xe8, 0xed, 0x92, 0x2a, 0x95, 0x9a
+};
+static const u8 enc_assoc060[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce060[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key060[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input061[] __initconst = {
+	0x25, 0x6d, 0x40, 0x08, 0x80, 0x94, 0x17, 0x03,
+	0x55, 0xd3, 0x04, 0x04, 0x64, 0x43, 0xfe, 0x68,
+	0xdf, 0x99, 0x47, 0x83, 0x03, 0xfb, 0x3b, 0xfb,
+	0x80, 0xe0, 0x30, 0x3e, 0xeb, 0xd3, 0x29, 0x3e,
+	0xe3, 0xbc, 0xdb, 0xdb, 0x1e, 0xde, 0xfc, 0x7e,
+	0x8b, 0xcd, 0xa1, 0x36, 0xa1, 0x5c, 0x8c, 0xab,
+	0x08, 0x69, 0xff, 0x52, 0xec, 0x5e, 0x26, 0x65,
+	0x53, 0xb7, 0xb2, 0xa7, 0xfe, 0x87, 0xfd, 0x3d,
+	0x7a, 0xda, 0x44, 0xc2, 0x42, 0x69, 0xbf, 0x7a,
+	0x55, 0x27, 0xf2, 0xf0, 0xac, 0xf6, 0x85, 0x82,
+	0xb7, 0x4c, 0x5a, 0x62, 0xe6, 0x0c, 0x05, 0x00,
+	0x98, 0x1a, 0x49, 0xb8, 0x45, 0x93, 0x92, 0x44,
+	0x9b, 0xb2, 0xf2, 0x04, 0xb6, 0x46, 0xef, 0x47,
+	0xf3, 0xf0, 0xb1, 0xb6, 0x1d, 0xc3, 0x48, 0x6d,
+	0x77, 0xd3, 0x0b, 0x45, 0x76, 0x92, 0xed, 0xb8,
+	0xfb, 0xac, 0x01, 0x08, 0x38, 0x04, 0x88, 0x47
+};
+static const u8 enc_output061[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0xfe, 0xac, 0x49, 0x55, 0x55, 0x4e, 0x80, 0x6f,
+	0x3a, 0x19, 0x02, 0xe2, 0x44, 0x32, 0xc0, 0x8a
+};
+static const u8 enc_assoc061[] __initconst = {
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_nonce061[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key061[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input062[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1
+};
+static const u8 enc_output062[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0x20, 0xa3, 0x79, 0x8d, 0xf1, 0x29, 0x2c, 0x59,
+	0x72, 0xbf, 0x97, 0x41, 0xae, 0xc3, 0x8a, 0x19
+};
+static const u8 enc_assoc062[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce062[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key062[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input063[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1,
+	0x1c, 0x43, 0x24, 0x24, 0xe1, 0x21, 0x03, 0x81,
+	0x74, 0x32, 0x5e, 0xc9, 0x5e, 0xa3, 0x73, 0x54,
+	0xf7, 0x96, 0x00, 0xad, 0x13, 0xa1, 0xd9, 0x9a,
+	0xac, 0x48, 0x4d, 0x58, 0x01, 0x78, 0x02, 0xc2
+};
+static const u8 enc_output063[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xc0, 0x3d, 0x9f, 0x67, 0x35, 0x4a, 0x97, 0xb2,
+	0xf0, 0x74, 0xf7, 0x55, 0x15, 0x57, 0xe4, 0x9c
+};
+static const u8 enc_assoc063[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce063[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key063[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input064[] __initconst = {
+	0xda, 0x92, 0xbf, 0xf7, 0x7f, 0x6b, 0xe8, 0xfc,
+	0xaa, 0x2c, 0xfb, 0xfb, 0x9b, 0xbc, 0x01, 0x97,
+	0x20, 0x66, 0xb8, 0x7c, 0xfc, 0x04, 0xc4, 0x04,
+	0x7f, 0x1f, 0xcf, 0xc1, 0x14, 0x2c, 0xd6, 0xc1,
+	0x1c, 0x43, 0x24, 0x24, 0xe1, 0x21, 0x03, 0x81,
+	0x74, 0x32, 0x5e, 0xc9, 0x5e, 0xa3, 0x73, 0x54,
+	0xf7, 0x96, 0x00, 0xad, 0x13, 0xa1, 0xd9, 0x9a,
+	0xac, 0x48, 0x4d, 0x58, 0x01, 0x78, 0x02, 0xc2,
+	0x85, 0x25, 0xbb, 0x3d, 0xbd, 0x96, 0x40, 0x85,
+	0xaa, 0xd8, 0x0d, 0x0f, 0x53, 0x09, 0x7a, 0x7d,
+	0x48, 0xb3, 0xa5, 0x9d, 0x19, 0xf3, 0xfa, 0xff,
+	0x67, 0xe5, 0xb6, 0x47, 0xba, 0x6c, 0x6d, 0xbb,
+	0x64, 0x4d, 0x0d, 0xfb, 0x49, 0xb9, 0x10, 0xb8,
+	0x0c, 0x0f, 0x4e, 0x49, 0xe2, 0x3c, 0xb7, 0x92,
+	0x88, 0x2c, 0xf4, 0xba, 0x89, 0x6d, 0x12, 0x47,
+	0x04, 0x53, 0xfe, 0xf7, 0xc7, 0xfb, 0x77, 0xb8
+};
+static const u8 enc_output064[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xc8, 0x6d, 0xa8, 0xdd, 0x65, 0x22, 0x86, 0xd5,
+	0x02, 0x13, 0xd3, 0x28, 0xd6, 0x3e, 0x40, 0x06
+};
+static const u8 enc_assoc064[] __initconst = {
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_nonce064[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key064[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input065[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output065[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0xbe, 0xde, 0x90, 0x83, 0xce, 0xb3, 0x6d, 0xdf,
+	0xe5, 0xfa, 0x81, 0x1f, 0x95, 0x47, 0x1c, 0x67
+};
+static const u8 enc_assoc065[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce065[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key065[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input066[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41,
+	0x9c, 0x43, 0x24, 0xa4, 0x61, 0x21, 0x03, 0x01,
+	0xf4, 0x32, 0x5e, 0x49, 0xde, 0xa3, 0x73, 0xd4,
+	0x77, 0x96, 0x00, 0x2d, 0x93, 0xa1, 0xd9, 0x1a,
+	0x2c, 0x48, 0x4d, 0xd8, 0x81, 0x78, 0x02, 0x42
+};
+static const u8 enc_output066[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x30, 0x08, 0x74, 0xbb, 0x06, 0x92, 0xb6, 0x89,
+	0xde, 0xad, 0x9a, 0xe1, 0x5b, 0x06, 0x73, 0x90
+};
+static const u8 enc_assoc066[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce066[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key066[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input067[] __initconst = {
+	0x5a, 0x92, 0xbf, 0x77, 0xff, 0x6b, 0xe8, 0x7c,
+	0x2a, 0x2c, 0xfb, 0x7b, 0x1b, 0xbc, 0x01, 0x17,
+	0xa0, 0x66, 0xb8, 0xfc, 0x7c, 0x04, 0xc4, 0x84,
+	0xff, 0x1f, 0xcf, 0x41, 0x94, 0x2c, 0xd6, 0x41,
+	0x9c, 0x43, 0x24, 0xa4, 0x61, 0x21, 0x03, 0x01,
+	0xf4, 0x32, 0x5e, 0x49, 0xde, 0xa3, 0x73, 0xd4,
+	0x77, 0x96, 0x00, 0x2d, 0x93, 0xa1, 0xd9, 0x1a,
+	0x2c, 0x48, 0x4d, 0xd8, 0x81, 0x78, 0x02, 0x42,
+	0x05, 0x25, 0xbb, 0xbd, 0x3d, 0x96, 0x40, 0x05,
+	0x2a, 0xd8, 0x0d, 0x8f, 0xd3, 0x09, 0x7a, 0xfd,
+	0xc8, 0xb3, 0xa5, 0x1d, 0x99, 0xf3, 0xfa, 0x7f,
+	0xe7, 0xe5, 0xb6, 0xc7, 0x3a, 0x6c, 0x6d, 0x3b,
+	0xe4, 0x4d, 0x0d, 0x7b, 0xc9, 0xb9, 0x10, 0x38,
+	0x8c, 0x0f, 0x4e, 0xc9, 0x62, 0x3c, 0xb7, 0x12,
+	0x08, 0x2c, 0xf4, 0x3a, 0x09, 0x6d, 0x12, 0xc7,
+	0x84, 0x53, 0xfe, 0x77, 0x47, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output067[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x99, 0xca, 0xd8, 0x5f, 0x45, 0xca, 0x40, 0x94,
+	0x2d, 0x0d, 0x4d, 0x5e, 0x95, 0x0a, 0xde, 0x22
+};
+static const u8 enc_assoc067[] __initconst = {
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff,
+	0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce067[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key067[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input068[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41
+};
+static const u8 enc_output068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x8b, 0xbe, 0x14, 0x52, 0x72, 0xe7, 0xc2, 0xd9,
+	0xa1, 0x89, 0x1a, 0x3a, 0xb0, 0x98, 0x3d, 0x9d
+};
+static const u8 enc_assoc068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce068[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key068[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input069[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41,
+	0xe3, 0xbc, 0xdb, 0x5b, 0xe1, 0x21, 0x03, 0x01,
+	0x8b, 0xcd, 0xa1, 0xb6, 0x5e, 0xa3, 0x73, 0xd4,
+	0x08, 0x69, 0xff, 0xd2, 0x13, 0xa1, 0xd9, 0x1a,
+	0x53, 0xb7, 0xb2, 0x27, 0x01, 0x78, 0x02, 0x42
+};
+static const u8 enc_output069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x41, 0x86, 0x19, 0x13, 0xa8, 0xf6, 0xde,
+	0x7f, 0x61, 0xe2, 0x25, 0x63, 0x1b, 0xc3, 0x82
+};
+static const u8 enc_assoc069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce069[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key069[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input070[] __initconst = {
+	0x25, 0x6d, 0x40, 0x88, 0x7f, 0x6b, 0xe8, 0x7c,
+	0x55, 0xd3, 0x04, 0x84, 0x9b, 0xbc, 0x01, 0x17,
+	0xdf, 0x99, 0x47, 0x03, 0xfc, 0x04, 0xc4, 0x84,
+	0x80, 0xe0, 0x30, 0xbe, 0x14, 0x2c, 0xd6, 0x41,
+	0xe3, 0xbc, 0xdb, 0x5b, 0xe1, 0x21, 0x03, 0x01,
+	0x8b, 0xcd, 0xa1, 0xb6, 0x5e, 0xa3, 0x73, 0xd4,
+	0x08, 0x69, 0xff, 0xd2, 0x13, 0xa1, 0xd9, 0x1a,
+	0x53, 0xb7, 0xb2, 0x27, 0x01, 0x78, 0x02, 0x42,
+	0x7a, 0xda, 0x44, 0x42, 0xbd, 0x96, 0x40, 0x05,
+	0x55, 0x27, 0xf2, 0x70, 0x53, 0x09, 0x7a, 0xfd,
+	0xb7, 0x4c, 0x5a, 0xe2, 0x19, 0xf3, 0xfa, 0x7f,
+	0x98, 0x1a, 0x49, 0x38, 0xba, 0x6c, 0x6d, 0x3b,
+	0x9b, 0xb2, 0xf2, 0x84, 0x49, 0xb9, 0x10, 0x38,
+	0xf3, 0xf0, 0xb1, 0x36, 0xe2, 0x3c, 0xb7, 0x12,
+	0x77, 0xd3, 0x0b, 0xc5, 0x89, 0x6d, 0x12, 0xc7,
+	0xfb, 0xac, 0x01, 0x88, 0xc7, 0xfb, 0x77, 0x38
+};
+static const u8 enc_output070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x84, 0x28, 0xbc, 0xf0, 0x23, 0xec, 0x6b, 0xf3,
+	0x1f, 0xd9, 0xef, 0xb2, 0x03, 0xff, 0x08, 0x71
+};
+static const u8 enc_assoc070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce070[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key070[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input071[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe
+};
+static const u8 enc_output071[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x13, 0x9f, 0xdf, 0x64, 0x74, 0xea, 0x24, 0xf5,
+	0x49, 0xb0, 0x75, 0x82, 0x5f, 0x2c, 0x76, 0x20
+};
+static const u8 enc_assoc071[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce071[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key071[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input072[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe,
+	0x1c, 0x43, 0x24, 0xa4, 0x1e, 0xde, 0xfc, 0xfe,
+	0x74, 0x32, 0x5e, 0x49, 0xa1, 0x5c, 0x8c, 0x2b,
+	0xf7, 0x96, 0x00, 0x2d, 0xec, 0x5e, 0x26, 0xe5,
+	0xac, 0x48, 0x4d, 0xd8, 0xfe, 0x87, 0xfd, 0xbd
+};
+static const u8 enc_output072[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xbb, 0xad, 0x8d, 0x86, 0x3b, 0x83, 0x5a, 0x8e,
+	0x86, 0x64, 0xfd, 0x1d, 0x45, 0x66, 0xb6, 0xb4
+};
+static const u8 enc_assoc072[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce072[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key072[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - misc */
+static const u8 enc_input073[] __initconst = {
+	0xda, 0x92, 0xbf, 0x77, 0x80, 0x94, 0x17, 0x83,
+	0xaa, 0x2c, 0xfb, 0x7b, 0x64, 0x43, 0xfe, 0xe8,
+	0x20, 0x66, 0xb8, 0xfc, 0x03, 0xfb, 0x3b, 0x7b,
+	0x7f, 0x1f, 0xcf, 0x41, 0xeb, 0xd3, 0x29, 0xbe,
+	0x1c, 0x43, 0x24, 0xa4, 0x1e, 0xde, 0xfc, 0xfe,
+	0x74, 0x32, 0x5e, 0x49, 0xa1, 0x5c, 0x8c, 0x2b,
+	0xf7, 0x96, 0x00, 0x2d, 0xec, 0x5e, 0x26, 0xe5,
+	0xac, 0x48, 0x4d, 0xd8, 0xfe, 0x87, 0xfd, 0xbd,
+	0x85, 0x25, 0xbb, 0xbd, 0x42, 0x69, 0xbf, 0xfa,
+	0xaa, 0xd8, 0x0d, 0x8f, 0xac, 0xf6, 0x85, 0x02,
+	0x48, 0xb3, 0xa5, 0x1d, 0xe6, 0x0c, 0x05, 0x80,
+	0x67, 0xe5, 0xb6, 0xc7, 0x45, 0x93, 0x92, 0xc4,
+	0x64, 0x4d, 0x0d, 0x7b, 0xb6, 0x46, 0xef, 0xc7,
+	0x0c, 0x0f, 0x4e, 0xc9, 0x1d, 0xc3, 0x48, 0xed,
+	0x88, 0x2c, 0xf4, 0x3a, 0x76, 0x92, 0xed, 0x38,
+	0x04, 0x53, 0xfe, 0x77, 0x38, 0x04, 0x88, 0xc7
+};
+static const u8 enc_output073[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x42, 0xf2, 0x35, 0x42, 0x97, 0x84, 0x9a, 0x51,
+	0x1d, 0x53, 0xe5, 0x57, 0x17, 0x72, 0xf7, 0x1f
+};
+static const u8 enc_assoc073[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_nonce073[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x32, 0x00
+};
+static const u8 enc_key073[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input074[] __initconst = {
+	0xd4, 0x50, 0x0b, 0xf0, 0x09, 0x49, 0x35, 0x51,
+	0xc3, 0x80, 0xad, 0xf5, 0x2c, 0x57, 0x3a, 0x69,
+	0xdf, 0x7e, 0x8b, 0x76, 0x24, 0x63, 0x33, 0x0f,
+	0xac, 0xc1, 0x6a, 0x57, 0x26, 0xbe, 0x71, 0x90,
+	0xc6, 0x3c, 0x5a, 0x1c, 0x92, 0x65, 0x84, 0xa0,
+	0x96, 0x75, 0x68, 0x28, 0xdc, 0xdc, 0x64, 0xac,
+	0xdf, 0x96, 0x3d, 0x93, 0x1b, 0xf1, 0xda, 0xe2,
+	0x38, 0xf3, 0xf1, 0x57, 0x22, 0x4a, 0xc4, 0xb5,
+	0x42, 0xd7, 0x85, 0xb0, 0xdd, 0x84, 0xdb, 0x6b,
+	0xe3, 0xbc, 0x5a, 0x36, 0x63, 0xe8, 0x41, 0x49,
+	0xff, 0xbe, 0xd0, 0x9e, 0x54, 0xf7, 0x8f, 0x16,
+	0xa8, 0x22, 0x3b, 0x24, 0xcb, 0x01, 0x9f, 0x58,
+	0xb2, 0x1b, 0x0e, 0x55, 0x1e, 0x7a, 0xa0, 0x73,
+	0x27, 0x62, 0x95, 0x51, 0x37, 0x6c, 0xcb, 0xc3,
+	0x93, 0x76, 0x71, 0xa0, 0x62, 0x9b, 0xd9, 0x5c,
+	0x99, 0x15, 0xc7, 0x85, 0x55, 0x77, 0x1e, 0x7a
+};
+static const u8 enc_output074[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x30, 0x0d, 0x8d, 0xa5, 0x6c, 0x21, 0x85,
+	0x75, 0x52, 0x79, 0x55, 0x3c, 0x4c, 0x82, 0xca
+};
+static const u8 enc_assoc074[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce074[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x00, 0x02, 0x50, 0x6e
+};
+static const u8 enc_key074[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input075[] __initconst = {
+	0x7d, 0xe8, 0x7f, 0x67, 0x29, 0x94, 0x52, 0x75,
+	0xd0, 0x65, 0x5d, 0xa4, 0xc7, 0xfd, 0xe4, 0x56,
+	0x9e, 0x16, 0xf1, 0x11, 0xb5, 0xeb, 0x26, 0xc2,
+	0x2d, 0x85, 0x9e, 0x3f, 0xf8, 0x22, 0xec, 0xed,
+	0x3a, 0x6d, 0xd9, 0xa6, 0x0f, 0x22, 0x95, 0x7f,
+	0x7b, 0x7c, 0x85, 0x7e, 0x88, 0x22, 0xeb, 0x9f,
+	0xe0, 0xb8, 0xd7, 0x02, 0x21, 0x41, 0xf2, 0xd0,
+	0xb4, 0x8f, 0x4b, 0x56, 0x12, 0xd3, 0x22, 0xa8,
+	0x8d, 0xd0, 0xfe, 0x0b, 0x4d, 0x91, 0x79, 0x32,
+	0x4f, 0x7c, 0x6c, 0x9e, 0x99, 0x0e, 0xfb, 0xd8,
+	0x0e, 0x5e, 0xd6, 0x77, 0x58, 0x26, 0x49, 0x8b,
+	0x1e, 0xfe, 0x0f, 0x71, 0xa0, 0xf3, 0xec, 0x5b,
+	0x29, 0xcb, 0x28, 0xc2, 0x54, 0x0a, 0x7d, 0xcd,
+	0x51, 0xb7, 0xda, 0xae, 0xe0, 0xff, 0x4a, 0x7f,
+	0x3a, 0xc1, 0xee, 0x54, 0xc2, 0x9e, 0xe4, 0xc1,
+	0x70, 0xde, 0x40, 0x8f, 0x66, 0x69, 0x21, 0x94
+};
+static const u8 enc_output075[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc5, 0x78, 0xe2, 0xaa, 0x44, 0xd3, 0x09, 0xb7,
+	0xb6, 0xa5, 0x19, 0x3b, 0xdc, 0x61, 0x18, 0xf5
+};
+static const u8 enc_assoc075[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce075[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x00, 0x03, 0x18, 0xa5
+};
+static const u8 enc_key075[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input076[] __initconst = {
+	0x1b, 0x99, 0x6f, 0x9a, 0x3c, 0xcc, 0x67, 0x85,
+	0xde, 0x22, 0xff, 0x5b, 0x8a, 0xdd, 0x95, 0x02,
+	0xce, 0x03, 0xa0, 0xfa, 0xf5, 0x99, 0x2a, 0x09,
+	0x52, 0x2c, 0xdd, 0x12, 0x06, 0xd2, 0x20, 0xb8,
+	0xf8, 0xbd, 0x07, 0xd1, 0xf1, 0xf5, 0xa1, 0xbd,
+	0x9a, 0x71, 0xd1, 0x1c, 0x7f, 0x57, 0x9b, 0x85,
+	0x58, 0x18, 0xc0, 0x8d, 0x4d, 0xe0, 0x36, 0x39,
+	0x31, 0x83, 0xb7, 0xf5, 0x90, 0xb3, 0x35, 0xae,
+	0xd8, 0xde, 0x5b, 0x57, 0xb1, 0x3c, 0x5f, 0xed,
+	0xe2, 0x44, 0x1c, 0x3e, 0x18, 0x4a, 0xa9, 0xd4,
+	0x6e, 0x61, 0x59, 0x85, 0x06, 0xb3, 0xe1, 0x1c,
+	0x43, 0xc6, 0x2c, 0xbc, 0xac, 0xec, 0xed, 0x33,
+	0x19, 0x08, 0x75, 0xb0, 0x12, 0x21, 0x8b, 0x19,
+	0x30, 0xfb, 0x7c, 0x38, 0xec, 0x45, 0xac, 0x11,
+	0xc3, 0x53, 0xd0, 0xcf, 0x93, 0x8d, 0xcc, 0xb9,
+	0xef, 0xad, 0x8f, 0xed, 0xbe, 0x46, 0xda, 0xa5
+};
+static const u8 enc_output076[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4b, 0x0b, 0xda, 0x8a, 0xd0, 0x43, 0x83, 0x0d,
+	0x83, 0x19, 0xab, 0x82, 0xc5, 0x0c, 0x76, 0x63
+};
+static const u8 enc_assoc076[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce076[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb4, 0xf0
+};
+static const u8 enc_key076[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input077[] __initconst = {
+	0x86, 0xcb, 0xac, 0xae, 0x4d, 0x3f, 0x74, 0xae,
+	0x01, 0x21, 0x3e, 0x05, 0x51, 0xcc, 0x15, 0x16,
+	0x0e, 0xa1, 0xbe, 0x84, 0x08, 0xe3, 0xd5, 0xd7,
+	0x4f, 0x01, 0x46, 0x49, 0x95, 0xa6, 0x9e, 0x61,
+	0x76, 0xcb, 0x9e, 0x02, 0xb2, 0x24, 0x7e, 0xd2,
+	0x99, 0x89, 0x2f, 0x91, 0x82, 0xa4, 0x5c, 0xaf,
+	0x4c, 0x69, 0x40, 0x56, 0x11, 0x76, 0x6e, 0xdf,
+	0xaf, 0xdc, 0x28, 0x55, 0x19, 0xea, 0x30, 0x48,
+	0x0c, 0x44, 0xf0, 0x5e, 0x78, 0x1e, 0xac, 0xf8,
+	0xfc, 0xec, 0xc7, 0x09, 0x0a, 0xbb, 0x28, 0xfa,
+	0x5f, 0xd5, 0x85, 0xac, 0x8c, 0xda, 0x7e, 0x87,
+	0x72, 0xe5, 0x94, 0xe4, 0xce, 0x6c, 0x88, 0x32,
+	0x81, 0x93, 0x2e, 0x0f, 0x89, 0xf8, 0x77, 0xa1,
+	0xf0, 0x4d, 0x9c, 0x32, 0xb0, 0x6c, 0xf9, 0x0b,
+	0x0e, 0x76, 0x2b, 0x43, 0x0c, 0x4d, 0x51, 0x7c,
+	0x97, 0x10, 0x70, 0x68, 0xf4, 0x98, 0xef, 0x7f
+};
+static const u8 enc_output077[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4b, 0xc9, 0x8f, 0x72, 0xc4, 0x94, 0xc2, 0xa4,
+	0x3c, 0x2b, 0x15, 0xa1, 0x04, 0x3f, 0x1c, 0xfa
+};
+static const u8 enc_assoc077[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce077[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0xfb, 0x66
+};
+static const u8 enc_key077[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input078[] __initconst = {
+	0xfa, 0xb1, 0xcd, 0xdf, 0x4f, 0xe1, 0x98, 0xef,
+	0x63, 0xad, 0xd8, 0x81, 0xd6, 0xea, 0xd6, 0xc5,
+	0x76, 0x37, 0xbb, 0xe9, 0x20, 0x18, 0xca, 0x7c,
+	0x0b, 0x96, 0xfb, 0xa0, 0x87, 0x1e, 0x93, 0x2d,
+	0xb1, 0xfb, 0xf9, 0x07, 0x61, 0xbe, 0x25, 0xdf,
+	0x8d, 0xfa, 0xf9, 0x31, 0xce, 0x57, 0x57, 0xe6,
+	0x17, 0xb3, 0xd7, 0xa9, 0xf0, 0xbf, 0x0f, 0xfe,
+	0x5d, 0x59, 0x1a, 0x33, 0xc1, 0x43, 0xb8, 0xf5,
+	0x3f, 0xd0, 0xb5, 0xa1, 0x96, 0x09, 0xfd, 0x62,
+	0xe5, 0xc2, 0x51, 0xa4, 0x28, 0x1a, 0x20, 0x0c,
+	0xfd, 0xc3, 0x4f, 0x28, 0x17, 0x10, 0x40, 0x6f,
+	0x4e, 0x37, 0x62, 0x54, 0x46, 0xff, 0x6e, 0xf2,
+	0x24, 0x91, 0x3d, 0xeb, 0x0d, 0x89, 0xaf, 0x33,
+	0x71, 0x28, 0xe3, 0xd1, 0x55, 0xd1, 0x6d, 0x3e,
+	0xc3, 0x24, 0x60, 0x41, 0x43, 0x21, 0x43, 0xe9,
+	0xab, 0x3a, 0x6d, 0x2c, 0xcc, 0x2f, 0x4d, 0x62
+};
+static const u8 enc_output078[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf7, 0xe9, 0xe1, 0x51, 0xb0, 0x25, 0x33, 0xc7,
+	0x46, 0x58, 0xbf, 0xc7, 0x73, 0x7c, 0x68, 0x0d
+};
+static const u8 enc_assoc078[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce078[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xbb, 0x90
+};
+static const u8 enc_key078[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input079[] __initconst = {
+	0x22, 0x72, 0x02, 0xbe, 0x7f, 0x35, 0x15, 0xe9,
+	0xd1, 0xc0, 0x2e, 0xea, 0x2f, 0x19, 0x50, 0xb6,
+	0x48, 0x1b, 0x04, 0x8a, 0x4c, 0x91, 0x50, 0x6c,
+	0xb4, 0x0d, 0x50, 0x4e, 0x6c, 0x94, 0x9f, 0x82,
+	0xd1, 0x97, 0xc2, 0x5a, 0xd1, 0x7d, 0xc7, 0x21,
+	0x65, 0x11, 0x25, 0x78, 0x2a, 0xc7, 0xa7, 0x12,
+	0x47, 0xfe, 0xae, 0xf3, 0x2f, 0x1f, 0x25, 0x0c,
+	0xe4, 0xbb, 0x8f, 0x79, 0xac, 0xaa, 0x17, 0x9d,
+	0x45, 0xa7, 0xb0, 0x54, 0x5f, 0x09, 0x24, 0x32,
+	0x5e, 0xfa, 0x87, 0xd5, 0xe4, 0x41, 0xd2, 0x84,
+	0x78, 0xc6, 0x1f, 0x22, 0x23, 0xee, 0x67, 0xc3,
+	0xb4, 0x1f, 0x43, 0x94, 0x53, 0x5e, 0x2a, 0x24,
+	0x36, 0x9a, 0x2e, 0x16, 0x61, 0x3c, 0x45, 0x94,
+	0x90, 0xc1, 0x4f, 0xb1, 0xd7, 0x55, 0xfe, 0x53,
+	0xfb, 0xe1, 0xee, 0x45, 0xb1, 0xb2, 0x1f, 0x71,
+	0x62, 0xe2, 0xfc, 0xaa, 0x74, 0x2a, 0xbe, 0xfd
+};
+static const u8 enc_output079[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x79, 0x5b, 0xcf, 0xf6, 0x47, 0xc5, 0x53, 0xc2,
+	0xe4, 0xeb, 0x6e, 0x0e, 0xaf, 0xd9, 0xe0, 0x4e
+};
+static const u8 enc_assoc079[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce079[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x48, 0x4a
+};
+static const u8 enc_key079[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input080[] __initconst = {
+	0xfa, 0xe5, 0x83, 0x45, 0xc1, 0x6c, 0xb0, 0xf5,
+	0xcc, 0x53, 0x7f, 0x2b, 0x1b, 0x34, 0x69, 0xc9,
+	0x69, 0x46, 0x3b, 0x3e, 0xa7, 0x1b, 0xcf, 0x6b,
+	0x98, 0xd6, 0x69, 0xa8, 0xe6, 0x0e, 0x04, 0xfc,
+	0x08, 0xd5, 0xfd, 0x06, 0x9c, 0x36, 0x26, 0x38,
+	0xe3, 0x40, 0x0e, 0xf4, 0xcb, 0x24, 0x2e, 0x27,
+	0xe2, 0x24, 0x5e, 0x68, 0xcb, 0x9e, 0xc5, 0x83,
+	0xda, 0x53, 0x40, 0xb1, 0x2e, 0xdf, 0x42, 0x3b,
+	0x73, 0x26, 0xad, 0x20, 0xfe, 0xeb, 0x57, 0xda,
+	0xca, 0x2e, 0x04, 0x67, 0xa3, 0x28, 0x99, 0xb4,
+	0x2d, 0xf8, 0xe5, 0x6d, 0x84, 0xe0, 0x06, 0xbc,
+	0x8a, 0x7a, 0xcc, 0x73, 0x1e, 0x7c, 0x1f, 0x6b,
+	0xec, 0xb5, 0x71, 0x9f, 0x70, 0x77, 0xf0, 0xd4,
+	0xf4, 0xc6, 0x1a, 0xb1, 0x1e, 0xba, 0xc1, 0x00,
+	0x18, 0x01, 0xce, 0x33, 0xc4, 0xe4, 0xa7, 0x7d,
+	0x83, 0x1d, 0x3c, 0xe3, 0x4e, 0x84, 0x10, 0xe1
+};
+static const u8 enc_output080[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x19, 0x46, 0xd6, 0x53, 0x96, 0x0f, 0x94, 0x7a,
+	0x74, 0xd3, 0xe8, 0x09, 0x3c, 0xf4, 0x85, 0x02
+};
+static const u8 enc_assoc080[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce080[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x93, 0x2f, 0x40
+};
+static const u8 enc_key080[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input081[] __initconst = {
+	0xeb, 0xb2, 0x16, 0xdd, 0xd7, 0xca, 0x70, 0x92,
+	0x15, 0xf5, 0x03, 0xdf, 0x9c, 0xe6, 0x3c, 0x5c,
+	0xd2, 0x19, 0x4e, 0x7d, 0x90, 0x99, 0xe8, 0xa9,
+	0x0b, 0x2a, 0xfa, 0xad, 0x5e, 0xba, 0x35, 0x06,
+	0x99, 0x25, 0xa6, 0x03, 0xfd, 0xbc, 0x34, 0x1a,
+	0xae, 0xd4, 0x15, 0x05, 0xb1, 0x09, 0x41, 0xfa,
+	0x38, 0x56, 0xa7, 0xe2, 0x47, 0xb1, 0x04, 0x07,
+	0x09, 0x74, 0x6c, 0xfc, 0x20, 0x96, 0xca, 0xa6,
+	0x31, 0xb2, 0xff, 0xf4, 0x1c, 0x25, 0x05, 0x06,
+	0xd8, 0x89, 0xc1, 0xc9, 0x06, 0x71, 0xad, 0xe8,
+	0x53, 0xee, 0x63, 0x94, 0xc1, 0x91, 0x92, 0xa5,
+	0xcf, 0x37, 0x10, 0xd1, 0x07, 0x30, 0x99, 0xe5,
+	0xbc, 0x94, 0x65, 0x82, 0xfc, 0x0f, 0xab, 0x9f,
+	0x54, 0x3c, 0x71, 0x6a, 0xe2, 0x48, 0x6a, 0x86,
+	0x83, 0xfd, 0xca, 0x39, 0xd2, 0xe1, 0x4f, 0x23,
+	0xd0, 0x0a, 0x58, 0x26, 0x64, 0xf4, 0xec, 0xb1
+};
+static const u8 enc_output081[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x36, 0xc3, 0x00, 0x29, 0x85, 0xdd, 0x21, 0xba,
+	0xf8, 0x95, 0xd6, 0x33, 0x57, 0x3f, 0x12, 0xc0
+};
+static const u8 enc_assoc081[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce081[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x93, 0x35
+};
+static const u8 enc_key081[] __initconst = {
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input082[] __initconst = {
+	0x40, 0x8a, 0xe6, 0xef, 0x1c, 0x7e, 0xf0, 0xfb,
+	0x2c, 0x2d, 0x61, 0x08, 0x16, 0xfc, 0x78, 0x49,
+	0xef, 0xa5, 0x8f, 0x78, 0x27, 0x3f, 0x5f, 0x16,
+	0x6e, 0xa6, 0x5f, 0x81, 0xb5, 0x75, 0x74, 0x7d,
+	0x03, 0x5b, 0x30, 0x40, 0xfe, 0xde, 0x1e, 0xb9,
+	0x45, 0x97, 0x88, 0x66, 0x97, 0x88, 0x40, 0x8e,
+	0x00, 0x41, 0x3b, 0x3e, 0x37, 0x6d, 0x15, 0x2d,
+	0x20, 0x4a, 0xa2, 0xb7, 0xa8, 0x35, 0x58, 0xfc,
+	0xd4, 0x8a, 0x0e, 0xf7, 0xa2, 0x6b, 0x1c, 0xd6,
+	0xd3, 0x5d, 0x23, 0xb3, 0xf5, 0xdf, 0xe0, 0xca,
+	0x77, 0xa4, 0xce, 0x32, 0xb9, 0x4a, 0xbf, 0x83,
+	0xda, 0x2a, 0xef, 0xca, 0xf0, 0x68, 0x38, 0x08,
+	0x79, 0xe8, 0x9f, 0xb0, 0xa3, 0x82, 0x95, 0x95,
+	0xcf, 0x44, 0xc3, 0x85, 0x2a, 0xe2, 0xcc, 0x66,
+	0x2b, 0x68, 0x9f, 0x93, 0x55, 0xd9, 0xc1, 0x83,
+	0x80, 0x1f, 0x6a, 0xcc, 0x31, 0x3f, 0x89, 0x07
+};
+static const u8 enc_output082[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x65, 0x14, 0x51, 0x8e, 0x0a, 0x26, 0x41, 0x42,
+	0xe0, 0xb7, 0x35, 0x1f, 0x96, 0x7f, 0xc2, 0xae
+};
+static const u8 enc_assoc082[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce082[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xf7, 0xd5
+};
+static const u8 enc_key082[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input083[] __initconst = {
+	0x0a, 0x0a, 0x24, 0x49, 0x9b, 0xca, 0xde, 0x58,
+	0xcf, 0x15, 0x76, 0xc3, 0x12, 0xac, 0xa9, 0x84,
+	0x71, 0x8c, 0xb4, 0xcc, 0x7e, 0x01, 0x53, 0xf5,
+	0xa9, 0x01, 0x58, 0x10, 0x85, 0x96, 0x44, 0xdf,
+	0xc0, 0x21, 0x17, 0x4e, 0x0b, 0x06, 0x0a, 0x39,
+	0x74, 0x48, 0xde, 0x8b, 0x48, 0x4a, 0x86, 0x03,
+	0xbe, 0x68, 0x0a, 0x69, 0x34, 0xc0, 0x90, 0x6f,
+	0x30, 0xdd, 0x17, 0xea, 0xe2, 0xd4, 0xc5, 0xfa,
+	0xa7, 0x77, 0xf8, 0xca, 0x53, 0x37, 0x0e, 0x08,
+	0x33, 0x1b, 0x88, 0xc3, 0x42, 0xba, 0xc9, 0x59,
+	0x78, 0x7b, 0xbb, 0x33, 0x93, 0x0e, 0x3b, 0x56,
+	0xbe, 0x86, 0xda, 0x7f, 0x2a, 0x6e, 0xb1, 0xf9,
+	0x40, 0x89, 0xd1, 0xd1, 0x81, 0x07, 0x4d, 0x43,
+	0x02, 0xf8, 0xe0, 0x55, 0x2d, 0x0d, 0xe1, 0xfa,
+	0xb3, 0x06, 0xa2, 0x1b, 0x42, 0xd4, 0xc3, 0xba,
+	0x6e, 0x6f, 0x0c, 0xbc, 0xc8, 0x1e, 0x87, 0x7a
+};
+static const u8 enc_output083[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4c, 0x19, 0x4d, 0xa6, 0xa9, 0x9f, 0xd6, 0x5b,
+	0x40, 0xe9, 0xca, 0xd7, 0x98, 0xf4, 0x4b, 0x19
+};
+static const u8 enc_assoc083[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce083[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xfc, 0xe4
+};
+static const u8 enc_key083[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input084[] __initconst = {
+	0x4a, 0x0a, 0xaf, 0xf8, 0x49, 0x47, 0x29, 0x18,
+	0x86, 0x91, 0x70, 0x13, 0x40, 0xf3, 0xce, 0x2b,
+	0x8a, 0x78, 0xee, 0xd3, 0xa0, 0xf0, 0x65, 0x99,
+	0x4b, 0x72, 0x48, 0x4e, 0x79, 0x91, 0xd2, 0x5c,
+	0x29, 0xaa, 0x07, 0x5e, 0xb1, 0xfc, 0x16, 0xde,
+	0x93, 0xfe, 0x06, 0x90, 0x58, 0x11, 0x2a, 0xb2,
+	0x84, 0xa3, 0xed, 0x18, 0x78, 0x03, 0x26, 0xd1,
+	0x25, 0x8a, 0x47, 0x22, 0x2f, 0xa6, 0x33, 0xd8,
+	0xb2, 0x9f, 0x3b, 0xd9, 0x15, 0x0b, 0x23, 0x9b,
+	0x15, 0x46, 0xc2, 0xbb, 0x9b, 0x9f, 0x41, 0x0f,
+	0xeb, 0xea, 0xd3, 0x96, 0x00, 0x0e, 0xe4, 0x77,
+	0x70, 0x15, 0x32, 0xc3, 0xd0, 0xf5, 0xfb, 0xf8,
+	0x95, 0xd2, 0x80, 0x19, 0x6d, 0x2f, 0x73, 0x7c,
+	0x5e, 0x9f, 0xec, 0x50, 0xd9, 0x2b, 0xb0, 0xdf,
+	0x5d, 0x7e, 0x51, 0x3b, 0xe5, 0xb8, 0xea, 0x97,
+	0x13, 0x10, 0xd5, 0xbf, 0x16, 0xba, 0x7a, 0xee
+};
+static const u8 enc_output084[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc8, 0xae, 0x77, 0x88, 0xcd, 0x28, 0x74, 0xab,
+	0xc1, 0x38, 0x54, 0x1e, 0x11, 0xfd, 0x05, 0x87
+};
+static const u8 enc_assoc084[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce084[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x01, 0x84, 0x86, 0xa8
+};
+static const u8 enc_key084[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - checking for int overflows */
+static const u8 enc_input085[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x78, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x9c, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xd4, 0xd2, 0x06, 0x61, 0x6f, 0x92, 0x93, 0xf6,
+	0x5b, 0x45, 0xdb, 0xbc, 0x74, 0xe7, 0xc2, 0xed,
+	0xfb, 0xcb, 0xbf, 0x1c, 0xfb, 0x67, 0x9b, 0xb7,
+	0x39, 0xa5, 0x86, 0x2d, 0xe2, 0xbc, 0xb9, 0x37,
+	0xf7, 0x4d, 0x5b, 0xf8, 0x67, 0x1c, 0x5a, 0x8a,
+	0x50, 0x92, 0xf6, 0x1d, 0x54, 0xc9, 0xaa, 0x5b
+};
+static const u8 enc_output085[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x93, 0x3a, 0x51, 0x63, 0xc7, 0xf6, 0x23, 0x68,
+	0x32, 0x7b, 0x3f, 0xbc, 0x10, 0x36, 0xc9, 0x43
+};
+static const u8 enc_assoc085[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce085[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key085[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input086[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output086[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
+};
+static const u8 enc_assoc086[] __initconst = {
+	0x85, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa6, 0x90, 0x2f, 0xcb, 0xc8, 0x83, 0xbb, 0xc1,
+	0x80, 0xb2, 0x56, 0xae, 0x34, 0xad, 0x7f, 0x00
+};
+static const u8 enc_nonce086[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key086[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input087[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output087[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc087[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x24, 0x7e, 0x50, 0x64, 0x2a, 0x1c, 0x0a, 0x2f,
+	0x8f, 0x77, 0x21, 0x96, 0x09, 0xdb, 0xa9, 0x58
+};
+static const u8 enc_nonce087[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key087[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input088[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output088[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_assoc088[] __initconst = {
+	0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd9, 0xe7, 0x2c, 0x06, 0x4a, 0xc8, 0x96, 0x1f,
+	0x3f, 0xa5, 0x85, 0xe0, 0xe2, 0xab, 0xd6, 0x00
+};
+static const u8 enc_nonce088[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key088[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input089[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output089[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
+	0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80
+};
+static const u8 enc_assoc089[] __initconst = {
+	0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x95, 0xaf, 0x0f, 0x4d, 0x0b, 0x68, 0x6e, 0xae,
+	0xcc, 0xca, 0x43, 0x07, 0xd5, 0x96, 0xf5, 0x02
+};
+static const u8 enc_nonce089[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key089[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input090[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output090[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f,
+	0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f
+};
+static const u8 enc_assoc090[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x85, 0x40, 0xb4, 0x64, 0x35, 0x77, 0x07, 0xbe,
+	0x3a, 0x39, 0xd5, 0x5c, 0x34, 0xf8, 0xbc, 0xb3
+};
+static const u8 enc_nonce090[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key090[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input091[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output091[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+	0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc091[] __initconst = {
+	0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0x23, 0xd9, 0x90, 0xb8, 0x98, 0xd8, 0x30,
+	0xd2, 0x12, 0xaf, 0x23, 0x83, 0x33, 0x07, 0x01
+};
+static const u8 enc_nonce091[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key091[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - special case tag */
+static const u8 enc_input092[] __initconst = {
+	0x9a, 0x49, 0xc4, 0x0f, 0x8b, 0x48, 0xd7, 0xc6,
+	0x6d, 0x1d, 0xb4, 0xe5, 0x3f, 0x20, 0xf2, 0xdd,
+	0x4a, 0xaa, 0x24, 0x1d, 0xda, 0xb2, 0x6b, 0x5b,
+	0xc0, 0xe2, 0x18, 0xb7, 0x2c, 0x33, 0x90, 0xf2,
+	0xdf, 0x3e, 0xbd, 0x01, 0x76, 0x70, 0x44, 0x19,
+	0x97, 0x2b, 0xcd, 0xbc, 0x6b, 0xbc, 0xb3, 0xe4,
+	0xe7, 0x4a, 0x71, 0x52, 0x8e, 0xf5, 0x12, 0x63,
+	0xce, 0x24, 0xe0, 0xd5, 0x75, 0xe0, 0xe4, 0x4d
+};
+static const u8 enc_output092[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+static const u8 enc_assoc092[] __initconst = {
+	0x83, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x5f, 0x16, 0xd0, 0x9f, 0x17, 0x78, 0x72, 0x11,
+	0xb7, 0xd4, 0x84, 0xe0, 0x24, 0xf8, 0x97, 0x01
+};
+static const u8 enc_nonce092[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b
+};
+static const u8 enc_key092[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input093[] __initconst = {
+	0x00, 0x52, 0x35, 0xd2, 0xa9, 0x19, 0xf2, 0x8d,
+	0x3d, 0xb7, 0x66, 0x4a, 0x34, 0xae, 0x6b, 0x44,
+	0x4d, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x5b, 0x8b, 0x94, 0x50, 0x9e, 0x2b, 0x74, 0xa3,
+	0x6d, 0x34, 0x6e, 0x33, 0xd5, 0x72, 0x65, 0x9b,
+	0xa9, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x83, 0xdc, 0xe9, 0xf3, 0x07, 0x3e, 0xfa, 0xdb,
+	0x7d, 0x23, 0xb8, 0x7a, 0xce, 0x35, 0x16, 0x8c
+};
+static const u8 enc_output093[] __initconst = {
+	0x00, 0x39, 0xe2, 0xfd, 0x2f, 0xd3, 0x12, 0x14,
+	0x9e, 0x98, 0x98, 0x80, 0x88, 0x48, 0x13, 0xe7,
+	0xca, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x0e, 0x86, 0x9a, 0xaa, 0x8e, 0xa4, 0x96,
+	0x32, 0xff, 0xff, 0x37, 0xb9, 0xe8, 0xce, 0x00,
+	0xca, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x3b, 0x0e, 0x86, 0x9a, 0xaa, 0x8e, 0xa4, 0x96,
+	0x32, 0xff, 0xff, 0x37, 0xb9, 0xe8, 0xce, 0x00,
+	0xa5, 0x19, 0xac, 0x1a, 0x35, 0xb4, 0xa5, 0x77,
+	0x87, 0x51, 0x0a, 0xf7, 0x8d, 0x8d, 0x20, 0x0a
+};
+static const u8 enc_assoc093[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce093[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key093[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input094[] __initconst = {
+	0xd3, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xe5, 0xda, 0x78, 0x76, 0x6f, 0xa1, 0x92, 0x90,
+	0xc0, 0x31, 0xf7, 0x52, 0x08, 0x50, 0x67, 0x45,
+	0xae, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x49, 0x6d, 0xde, 0xb0, 0x55, 0x09, 0xc6, 0xef,
+	0xff, 0xab, 0x75, 0xeb, 0x2d, 0xf4, 0xab, 0x09,
+	0x76, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x01, 0x49, 0xef, 0x50, 0x4b, 0x71, 0xb1, 0x20,
+	0xca, 0x4f, 0xf3, 0x95, 0x19, 0xc2, 0xc2, 0x10
+};
+static const u8 enc_output094[] __initconst = {
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x62, 0x18, 0xb2, 0x7f, 0x83, 0xb8, 0xb4, 0x66,
+	0x02, 0xf6, 0xe1, 0xd8, 0x34, 0x20, 0x7b, 0x02,
+	0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2a, 0x64, 0x16, 0xce, 0xdb, 0x1c, 0xdd, 0x29,
+	0x6e, 0xf5, 0xd7, 0xd6, 0x92, 0xda, 0xff, 0x02,
+	0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2a, 0x64, 0x16, 0xce, 0xdb, 0x1c, 0xdd, 0x29,
+	0x6e, 0xf5, 0xd7, 0xd6, 0x92, 0xda, 0xff, 0x02,
+	0x30, 0x2f, 0xe8, 0x2a, 0xb0, 0xa0, 0x9a, 0xf6,
+	0x44, 0x00, 0xd0, 0x15, 0xae, 0x83, 0xd9, 0xcc
+};
+static const u8 enc_assoc094[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce094[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key094[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input095[] __initconst = {
+	0xe9, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x6d, 0xf1, 0x39, 0x4e, 0xdc, 0x53, 0x9b, 0x5b,
+	0x3a, 0x09, 0x57, 0xbe, 0x0f, 0xb8, 0x59, 0x46,
+	0x80, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xd1, 0x76, 0x9f, 0xe8, 0x06, 0xbb, 0xfe, 0xb6,
+	0xf5, 0x90, 0x95, 0x0f, 0x2e, 0xac, 0x9e, 0x0a,
+	0x58, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x99, 0x52, 0xae, 0x08, 0x18, 0xc3, 0x89, 0x79,
+	0xc0, 0x74, 0x13, 0x71, 0x1a, 0x9a, 0xf7, 0x13
+};
+static const u8 enc_output095[] __initconst = {
+	0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xea, 0x33, 0xf3, 0x47, 0x30, 0x4a, 0xbd, 0xad,
+	0xf8, 0xce, 0x41, 0x34, 0x33, 0xc8, 0x45, 0x01,
+	0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb2, 0x7f, 0x57, 0x96, 0x88, 0xae, 0xe5, 0x70,
+	0x64, 0xce, 0x37, 0x32, 0x91, 0x82, 0xca, 0x01,
+	0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xb2, 0x7f, 0x57, 0x96, 0x88, 0xae, 0xe5, 0x70,
+	0x64, 0xce, 0x37, 0x32, 0x91, 0x82, 0xca, 0x01,
+	0x98, 0xa7, 0xe8, 0x36, 0xe0, 0xee, 0x4d, 0x02,
+	0x35, 0x00, 0xd0, 0x55, 0x7e, 0xc2, 0xcb, 0xe0
+};
+static const u8 enc_assoc095[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce095[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key095[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input096[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x64, 0xf9, 0x0f, 0x5b, 0x26, 0x92, 0xb8, 0x60,
+	0xd4, 0x59, 0x6f, 0xf4, 0xb3, 0x40, 0x2c, 0x5c,
+	0x00, 0xb9, 0xbb, 0x53, 0x70, 0x7a, 0xa6, 0x67,
+	0xd3, 0x56, 0xfe, 0x50, 0xc7, 0x19, 0x96, 0x94,
+	0x03, 0x35, 0x61, 0xe7, 0xca, 0xca, 0x6d, 0x94,
+	0x1d, 0xc3, 0xcd, 0x69, 0x14, 0xad, 0x69, 0x04
+};
+static const u8 enc_output096[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xe3, 0x3b, 0xc5, 0x52, 0xca, 0x8b, 0x9e, 0x96,
+	0x16, 0x9e, 0x79, 0x7e, 0x8f, 0x30, 0x30, 0x1b,
+	0x60, 0x3c, 0xa9, 0x99, 0x44, 0xdf, 0x76, 0x52,
+	0x8c, 0x9d, 0x6f, 0x54, 0xab, 0x83, 0x3d, 0x0f,
+	0x60, 0x3c, 0xa9, 0x99, 0x44, 0xdf, 0x76, 0x52,
+	0x8c, 0x9d, 0x6f, 0x54, 0xab, 0x83, 0x3d, 0x0f,
+	0x6a, 0xb8, 0xdc, 0xe2, 0xc5, 0x9d, 0xa4, 0x73,
+	0x71, 0x30, 0xb0, 0x25, 0x2f, 0x68, 0xa8, 0xd8
+};
+static const u8 enc_assoc096[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce096[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key096[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input097[] __initconst = {
+	0x68, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xb0, 0x8f, 0x25, 0x67, 0x5b, 0x9b, 0xcb, 0xf6,
+	0xe3, 0x84, 0x07, 0xde, 0x2e, 0xc7, 0x5a, 0x47,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x2d, 0x2a, 0xf7, 0xcd, 0x6b, 0x08, 0x05, 0x01,
+	0xd3, 0x1b, 0xa5, 0x4f, 0xb2, 0xeb, 0x75, 0x96,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x65, 0x0e, 0xc6, 0x2d, 0x75, 0x70, 0x72, 0xce,
+	0xe6, 0xff, 0x23, 0x31, 0x86, 0xdd, 0x1c, 0x8f
+};
+static const u8 enc_output097[] __initconst = {
+	0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x37, 0x4d, 0xef, 0x6e, 0xb7, 0x82, 0xed, 0x00,
+	0x21, 0x43, 0x11, 0x54, 0x12, 0xb7, 0x46, 0x00,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4e, 0x23, 0x3f, 0xb3, 0xe5, 0x1d, 0x1e, 0xc7,
+	0x42, 0x45, 0x07, 0x72, 0x0d, 0xc5, 0x21, 0x9d,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x4e, 0x23, 0x3f, 0xb3, 0xe5, 0x1d, 0x1e, 0xc7,
+	0x42, 0x45, 0x07, 0x72, 0x0d, 0xc5, 0x21, 0x9d,
+	0x04, 0x4d, 0xea, 0x60, 0x88, 0x80, 0x41, 0x2b,
+	0xfd, 0xff, 0xcf, 0x35, 0x57, 0x9e, 0x9b, 0x26
+};
+static const u8 enc_assoc097[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce097[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key097[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input098[] __initconst = {
+	0x6d, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xa1, 0x61, 0xb5, 0xab, 0x04, 0x09, 0x00, 0x62,
+	0x9e, 0xfe, 0xff, 0x78, 0xd7, 0xd8, 0x6b, 0x45,
+	0x9f, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xc6, 0xf8, 0x07, 0x8c, 0xc8, 0xef, 0x12, 0xa0,
+	0xff, 0x65, 0x7d, 0x6d, 0x08, 0xdb, 0x10, 0xb8,
+	0x47, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x8e, 0xdc, 0x36, 0x6c, 0xd6, 0x97, 0x65, 0x6f,
+	0xca, 0x81, 0xfb, 0x13, 0x3c, 0xed, 0x79, 0xa1
+};
+static const u8 enc_output098[] __initconst = {
+	0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x26, 0xa3, 0x7f, 0xa2, 0xe8, 0x10, 0x26, 0x94,
+	0x5c, 0x39, 0xe9, 0xf2, 0xeb, 0xa8, 0x77, 0x02,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa5, 0xf1, 0xcf, 0xf2, 0x46, 0xfa, 0x09, 0x66,
+	0x6e, 0x3b, 0xdf, 0x50, 0xb7, 0xf5, 0x44, 0xb3,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xa5, 0xf1, 0xcf, 0xf2, 0x46, 0xfa, 0x09, 0x66,
+	0x6e, 0x3b, 0xdf, 0x50, 0xb7, 0xf5, 0x44, 0xb3,
+	0x1e, 0x6b, 0xea, 0x63, 0x14, 0x54, 0x2e, 0x2e,
+	0xf9, 0xff, 0xcf, 0x45, 0x0b, 0x2e, 0x98, 0x2b
+};
+static const u8 enc_assoc098[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce098[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key098[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input099[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xfc, 0x01, 0xb8, 0x91, 0xe5, 0xf0, 0xf9, 0x12,
+	0x8d, 0x7d, 0x1c, 0x57, 0x91, 0x92, 0xb6, 0x98,
+	0x63, 0x41, 0x44, 0x15, 0xb6, 0x99, 0x68, 0x95,
+	0x9a, 0x72, 0x91, 0xb7, 0xa5, 0xaf, 0x13, 0x48,
+	0x60, 0xcd, 0x9e, 0xa1, 0x0c, 0x29, 0xa3, 0x66,
+	0x54, 0xe7, 0xa2, 0x8e, 0x76, 0x1b, 0xec, 0xd8
+};
+static const u8 enc_output099[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x7b, 0xc3, 0x72, 0x98, 0x09, 0xe9, 0xdf, 0xe4,
+	0x4f, 0xba, 0x0a, 0xdd, 0xad, 0xe2, 0xaa, 0xdf,
+	0x03, 0xc4, 0x56, 0xdf, 0x82, 0x3c, 0xb8, 0xa0,
+	0xc5, 0xb9, 0x00, 0xb3, 0xc9, 0x35, 0xb8, 0xd3,
+	0x03, 0xc4, 0x56, 0xdf, 0x82, 0x3c, 0xb8, 0xa0,
+	0xc5, 0xb9, 0x00, 0xb3, 0xc9, 0x35, 0xb8, 0xd3,
+	0xed, 0x20, 0x17, 0xc8, 0xdb, 0xa4, 0x77, 0x56,
+	0x29, 0x04, 0x9d, 0x78, 0x6e, 0x3b, 0xce, 0xb1
+};
+static const u8 enc_assoc099[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce099[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key099[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input100[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x6b, 0x6d, 0xc9, 0xd2, 0x1a, 0x81, 0x9e, 0x70,
+	0xb5, 0x77, 0xf4, 0x41, 0x37, 0xd3, 0xd6, 0xbd,
+	0x13, 0x35, 0xf5, 0xeb, 0x44, 0x49, 0x40, 0x77,
+	0xb2, 0x64, 0x49, 0xa5, 0x4b, 0x6c, 0x7c, 0x75,
+	0x10, 0xb9, 0x2f, 0x5f, 0xfe, 0xf9, 0x8b, 0x84,
+	0x7c, 0xf1, 0x7a, 0x9c, 0x98, 0xd8, 0x83, 0xe5
+};
+static const u8 enc_output100[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xec, 0xaf, 0x03, 0xdb, 0xf6, 0x98, 0xb8, 0x86,
+	0x77, 0xb0, 0xe2, 0xcb, 0x0b, 0xa3, 0xca, 0xfa,
+	0x73, 0xb0, 0xe7, 0x21, 0x70, 0xec, 0x90, 0x42,
+	0xed, 0xaf, 0xd8, 0xa1, 0x27, 0xf6, 0xd7, 0xee,
+	0x73, 0xb0, 0xe7, 0x21, 0x70, 0xec, 0x90, 0x42,
+	0xed, 0xaf, 0xd8, 0xa1, 0x27, 0xf6, 0xd7, 0xee,
+	0x07, 0x3f, 0x17, 0xcb, 0x67, 0x78, 0x64, 0x59,
+	0x25, 0x04, 0x9d, 0x88, 0x22, 0xcb, 0xca, 0xb6
+};
+static const u8 enc_assoc100[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce100[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key100[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input101[] __initconst = {
+	0xff, 0xcb, 0x2b, 0x11, 0x06, 0xf8, 0x23, 0x4c,
+	0x5e, 0x99, 0xd4, 0xdb, 0x4c, 0x70, 0x48, 0xde,
+	0x32, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x16, 0xe9, 0x88, 0x4a, 0x11, 0x4f, 0x0e, 0x92,
+	0x66, 0xce, 0xa3, 0x88, 0x5f, 0xe3, 0x6b, 0x9f,
+	0xd6, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xce, 0xbe, 0xf5, 0xe9, 0x88, 0x5a, 0x80, 0xea,
+	0x76, 0xd9, 0x75, 0xc1, 0x44, 0xa4, 0x18, 0x88
+};
+static const u8 enc_output101[] __initconst = {
+	0xff, 0xa0, 0xfc, 0x3e, 0x80, 0x32, 0xc3, 0xd5,
+	0xfd, 0xb6, 0x2a, 0x11, 0xf0, 0x96, 0x30, 0x7d,
+	0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x6c, 0x9a, 0x80, 0x25, 0xea, 0xde, 0xa7,
+	0x39, 0x05, 0x32, 0x8c, 0x33, 0x79, 0xc0, 0x04,
+	0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x6c, 0x9a, 0x80, 0x25, 0xea, 0xde, 0xa7,
+	0x39, 0x05, 0x32, 0x8c, 0x33, 0x79, 0xc0, 0x04,
+	0x8b, 0x9b, 0xb4, 0xb4, 0x86, 0x12, 0x89, 0x65,
+	0x8c, 0x69, 0x6a, 0x83, 0x40, 0x15, 0x04, 0x05
+};
+static const u8 enc_assoc101[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce101[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key101[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input102[] __initconst = {
+	0x6f, 0x9e, 0x70, 0xed, 0x3b, 0x8b, 0xac, 0xa0,
+	0x26, 0xe4, 0x6a, 0x5a, 0x09, 0x43, 0x15, 0x8d,
+	0x21, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x0c, 0x61, 0x2c, 0x5e, 0x8d, 0x89, 0xa8, 0x73,
+	0xdb, 0xca, 0xad, 0x5b, 0x73, 0x46, 0x42, 0x9b,
+	0xc5, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xd4, 0x36, 0x51, 0xfd, 0x14, 0x9c, 0x26, 0x0b,
+	0xcb, 0xdd, 0x7b, 0x12, 0x68, 0x01, 0x31, 0x8c
+};
+static const u8 enc_output102[] __initconst = {
+	0x6f, 0xf5, 0xa7, 0xc2, 0xbd, 0x41, 0x4c, 0x39,
+	0x85, 0xcb, 0x94, 0x90, 0xb5, 0xa5, 0x6d, 0x2e,
+	0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x6c, 0xe4, 0x3e, 0x94, 0xb9, 0x2c, 0x78, 0x46,
+	0x84, 0x01, 0x3c, 0x5f, 0x1f, 0xdc, 0xe9, 0x00,
+	0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x6c, 0xe4, 0x3e, 0x94, 0xb9, 0x2c, 0x78, 0x46,
+	0x84, 0x01, 0x3c, 0x5f, 0x1f, 0xdc, 0xe9, 0x00,
+	0x8b, 0x3b, 0xbd, 0x51, 0x64, 0x44, 0x59, 0x56,
+	0x8d, 0x81, 0xca, 0x1f, 0xa7, 0x2c, 0xe4, 0x04
+};
+static const u8 enc_assoc102[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce102[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key102[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input103[] __initconst = {
+	0x41, 0x2b, 0x08, 0x0a, 0x3e, 0x19, 0xc1, 0x0d,
+	0x44, 0xa1, 0xaf, 0x1e, 0xab, 0xde, 0xb4, 0xce,
+	0x35, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x6b, 0x83, 0x94, 0x33, 0x09, 0x21, 0x48, 0x6c,
+	0xa1, 0x1d, 0x29, 0x1c, 0x3e, 0x97, 0xee, 0x9a,
+	0xd1, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xb3, 0xd4, 0xe9, 0x90, 0x90, 0x34, 0xc6, 0x14,
+	0xb1, 0x0a, 0xff, 0x55, 0x25, 0xd0, 0x9d, 0x8d
+};
+static const u8 enc_output103[] __initconst = {
+	0x41, 0x40, 0xdf, 0x25, 0xb8, 0xd3, 0x21, 0x94,
+	0xe7, 0x8e, 0x51, 0xd4, 0x17, 0x38, 0xcc, 0x6d,
+	0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x06, 0x86, 0xf9, 0x3d, 0x84, 0x98, 0x59,
+	0xfe, 0xd6, 0xb8, 0x18, 0x52, 0x0d, 0x45, 0x01,
+	0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x0b, 0x06, 0x86, 0xf9, 0x3d, 0x84, 0x98, 0x59,
+	0xfe, 0xd6, 0xb8, 0x18, 0x52, 0x0d, 0x45, 0x01,
+	0x86, 0xfb, 0xab, 0x2b, 0x4a, 0x94, 0xf4, 0x7a,
+	0xa5, 0x6f, 0x0a, 0xea, 0x65, 0xd1, 0x10, 0x08
+};
+static const u8 enc_assoc103[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce103[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key103[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input104[] __initconst = {
+	0xb2, 0x47, 0xa7, 0x47, 0x23, 0x49, 0x1a, 0xac,
+	0xac, 0xaa, 0xd7, 0x09, 0xc9, 0x1e, 0x93, 0x2b,
+	0x31, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x9a, 0xde, 0x04, 0xe7, 0x5b, 0xb7, 0x01, 0xd9,
+	0x66, 0x06, 0x01, 0xb3, 0x47, 0x65, 0xde, 0x98,
+	0xd5, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x42, 0x89, 0x79, 0x44, 0xc2, 0xa2, 0x8f, 0xa1,
+	0x76, 0x11, 0xd7, 0xfa, 0x5c, 0x22, 0xad, 0x8f
+};
+static const u8 enc_output104[] __initconst = {
+	0xb2, 0x2c, 0x70, 0x68, 0xa5, 0x83, 0xfa, 0x35,
+	0x0f, 0x85, 0x29, 0xc3, 0x75, 0xf8, 0xeb, 0x88,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xfa, 0x5b, 0x16, 0x2d, 0x6f, 0x12, 0xd1, 0xec,
+	0x39, 0xcd, 0x90, 0xb7, 0x2b, 0xff, 0x75, 0x03,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xfa, 0x5b, 0x16, 0x2d, 0x6f, 0x12, 0xd1, 0xec,
+	0x39, 0xcd, 0x90, 0xb7, 0x2b, 0xff, 0x75, 0x03,
+	0xa0, 0x19, 0xac, 0x2e, 0xd6, 0x67, 0xe1, 0x7d,
+	0xa1, 0x6f, 0x0a, 0xfa, 0x19, 0x61, 0x0d, 0x0d
+};
+static const u8 enc_assoc104[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce104[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key104[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input105[] __initconst = {
+	0x74, 0x0f, 0x9e, 0x49, 0xf6, 0x10, 0xef, 0xa5,
+	0x85, 0xb6, 0x59, 0xca, 0x6e, 0xd8, 0xb4, 0x99,
+	0x2d, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x41, 0x2d, 0x96, 0xaf, 0xbe, 0x80, 0xec, 0x3e,
+	0x79, 0xd4, 0x51, 0xb0, 0x0a, 0x2d, 0xb2, 0x9a,
+	0xc9, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x99, 0x7a, 0xeb, 0x0c, 0x27, 0x95, 0x62, 0x46,
+	0x69, 0xc3, 0x87, 0xf9, 0x11, 0x6a, 0xc1, 0x8d
+};
+static const u8 enc_output105[] __initconst = {
+	0x74, 0x64, 0x49, 0x66, 0x70, 0xda, 0x0f, 0x3c,
+	0x26, 0x99, 0xa7, 0x00, 0xd2, 0x3e, 0xcc, 0x3a,
+	0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x21, 0xa8, 0x84, 0x65, 0x8a, 0x25, 0x3c, 0x0b,
+	0x26, 0x1f, 0xc0, 0xb4, 0x66, 0xb7, 0x19, 0x01,
+	0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x21, 0xa8, 0x84, 0x65, 0x8a, 0x25, 0x3c, 0x0b,
+	0x26, 0x1f, 0xc0, 0xb4, 0x66, 0xb7, 0x19, 0x01,
+	0x73, 0x6e, 0x18, 0x18, 0x16, 0x96, 0xa5, 0x88,
+	0x9c, 0x31, 0x59, 0xfa, 0xab, 0xab, 0x20, 0xfd
+};
+static const u8 enc_assoc105[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce105[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key105[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input106[] __initconst = {
+	0xad, 0xba, 0x5d, 0x10, 0x5b, 0xc8, 0xaa, 0x06,
+	0x2c, 0x23, 0x36, 0xcb, 0x88, 0x9d, 0xdb, 0xd5,
+	0x37, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x17, 0x7c, 0x5f, 0xfe, 0x28, 0x75, 0xf4, 0x68,
+	0xf6, 0xc2, 0x96, 0x57, 0x48, 0xf3, 0x59, 0x9a,
+	0xd3, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xcf, 0x2b, 0x22, 0x5d, 0xb1, 0x60, 0x7a, 0x10,
+	0xe6, 0xd5, 0x40, 0x1e, 0x53, 0xb4, 0x2a, 0x8d
+};
+static const u8 enc_output106[] __initconst = {
+	0xad, 0xd1, 0x8a, 0x3f, 0xdd, 0x02, 0x4a, 0x9f,
+	0x8f, 0x0c, 0xc8, 0x01, 0x34, 0x7b, 0xa3, 0x76,
+	0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x77, 0xf9, 0x4d, 0x34, 0x1c, 0xd0, 0x24, 0x5d,
+	0xa9, 0x09, 0x07, 0x53, 0x24, 0x69, 0xf2, 0x01,
+	0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x77, 0xf9, 0x4d, 0x34, 0x1c, 0xd0, 0x24, 0x5d,
+	0xa9, 0x09, 0x07, 0x53, 0x24, 0x69, 0xf2, 0x01,
+	0xba, 0xd5, 0x8f, 0x10, 0xa9, 0x1e, 0x6a, 0x88,
+	0x9a, 0xba, 0x32, 0xfd, 0x17, 0xd8, 0x33, 0x1a
+};
+static const u8 enc_assoc106[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce106[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key106[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input107[] __initconst = {
+	0xfe, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xc0, 0x01, 0xed, 0xc5, 0xda, 0x44, 0x2e, 0x71,
+	0x9b, 0xce, 0x9a, 0xbe, 0x27, 0x3a, 0xf1, 0x44,
+	0xb4, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x48, 0x02, 0x5f, 0x41, 0xfa, 0x4e, 0x33, 0x6c,
+	0x78, 0x69, 0x57, 0xa2, 0xa7, 0xc4, 0x93, 0x0a,
+	0x6c, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x00, 0x26, 0x6e, 0xa1, 0xe4, 0x36, 0x44, 0xa3,
+	0x4d, 0x8d, 0xd1, 0xdc, 0x93, 0xf2, 0xfa, 0x13
+};
+static const u8 enc_output107[] __initconst = {
+	0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x47, 0xc3, 0x27, 0xcc, 0x36, 0x5d, 0x08, 0x87,
+	0x59, 0x09, 0x8c, 0x34, 0x1b, 0x4a, 0xed, 0x03,
+	0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2b, 0x0b, 0x97, 0x3f, 0x74, 0x5b, 0x28, 0xaa,
+	0xe9, 0x37, 0xf5, 0x9f, 0x18, 0xea, 0xc7, 0x01,
+	0xd4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x2b, 0x0b, 0x97, 0x3f, 0x74, 0x5b, 0x28, 0xaa,
+	0xe9, 0x37, 0xf5, 0x9f, 0x18, 0xea, 0xc7, 0x01,
+	0xd6, 0x8c, 0xe1, 0x74, 0x07, 0x9a, 0xdd, 0x02,
+	0x8d, 0xd0, 0x5c, 0xf8, 0x14, 0x63, 0x04, 0x88
+};
+static const u8 enc_assoc107[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce107[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key107[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input108[] __initconst = {
+	0xb5, 0x13, 0xb0, 0x6a, 0xb9, 0xac, 0x14, 0x43,
+	0x5a, 0xcb, 0x8a, 0xa3, 0xa3, 0x7a, 0xfd, 0xb6,
+	0x54, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x61, 0x95, 0x01, 0x93, 0xb1, 0xbf, 0x03, 0x11,
+	0xff, 0x11, 0x79, 0x89, 0xae, 0xd9, 0xa9, 0x99,
+	0xb0, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xb9, 0xc2, 0x7c, 0x30, 0x28, 0xaa, 0x8d, 0x69,
+	0xef, 0x06, 0xaf, 0xc0, 0xb5, 0x9e, 0xda, 0x8e
+};
+static const u8 enc_output108[] __initconst = {
+	0xb5, 0x78, 0x67, 0x45, 0x3f, 0x66, 0xf4, 0xda,
+	0xf9, 0xe4, 0x74, 0x69, 0x1f, 0x9c, 0x85, 0x15,
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x10, 0x13, 0x59, 0x85, 0x1a, 0xd3, 0x24,
+	0xa0, 0xda, 0xe8, 0x8d, 0xc2, 0x43, 0x02, 0x02,
+	0xd3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x01, 0x10, 0x13, 0x59, 0x85, 0x1a, 0xd3, 0x24,
+	0xa0, 0xda, 0xe8, 0x8d, 0xc2, 0x43, 0x02, 0x02,
+	0xaa, 0x48, 0xa3, 0x88, 0x7d, 0x4b, 0x05, 0x96,
+	0x99, 0xc2, 0xfd, 0xf9, 0xc6, 0x78, 0x7e, 0x0a
+};
+static const u8 enc_assoc108[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce108[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key108[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input109[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xd4, 0xf1, 0x09, 0xe8, 0x14, 0xce, 0xa8, 0x5a,
+	0x08, 0xc0, 0x11, 0xd8, 0x50, 0xdd, 0x1d, 0xcb,
+	0xcf, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x53, 0x40, 0xb8, 0x5a, 0x9a, 0xa0, 0x82, 0x96,
+	0xb7, 0x7a, 0x5f, 0xc3, 0x96, 0x1f, 0x66, 0x0f,
+	0x17, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x1b, 0x64, 0x89, 0xba, 0x84, 0xd8, 0xf5, 0x59,
+	0x82, 0x9e, 0xd9, 0xbd, 0xa2, 0x29, 0x0f, 0x16
+};
+static const u8 enc_output109[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x53, 0x33, 0xc3, 0xe1, 0xf8, 0xd7, 0x8e, 0xac,
+	0xca, 0x07, 0x07, 0x52, 0x6c, 0xad, 0x01, 0x8c,
+	0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x30, 0x49, 0x70, 0x24, 0x14, 0xb5, 0x99, 0x50,
+	0x26, 0x24, 0xfd, 0xfe, 0x29, 0x31, 0x32, 0x04,
+	0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x30, 0x49, 0x70, 0x24, 0x14, 0xb5, 0x99, 0x50,
+	0x26, 0x24, 0xfd, 0xfe, 0x29, 0x31, 0x32, 0x04,
+	0xb9, 0x36, 0xa8, 0x17, 0xf2, 0x21, 0x1a, 0xf1,
+	0x29, 0xe2, 0xcf, 0x16, 0x0f, 0xd4, 0x2b, 0xcb
+};
+static const u8 enc_assoc109[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce109[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key109[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input110[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xdf, 0x4c, 0x62, 0x03, 0x2d, 0x41, 0x19, 0xb5,
+	0x88, 0x47, 0x7e, 0x99, 0x92, 0x5a, 0x56, 0xd9,
+	0xd6, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xfa, 0x84, 0xf0, 0x64, 0x55, 0x36, 0x42, 0x1b,
+	0x2b, 0xb9, 0x24, 0x6e, 0xc2, 0x19, 0xed, 0x0b,
+	0x0e, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xb2, 0xa0, 0xc1, 0x84, 0x4b, 0x4e, 0x35, 0xd4,
+	0x1e, 0x5d, 0xa2, 0x10, 0xf6, 0x2f, 0x84, 0x12
+};
+static const u8 enc_output110[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x58, 0x8e, 0xa8, 0x0a, 0xc1, 0x58, 0x3f, 0x43,
+	0x4a, 0x80, 0x68, 0x13, 0xae, 0x2a, 0x4a, 0x9e,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x99, 0x8d, 0x38, 0x1a, 0xdb, 0x23, 0x59, 0xdd,
+	0xba, 0xe7, 0x86, 0x53, 0x7d, 0x37, 0xb9, 0x00,
+	0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x99, 0x8d, 0x38, 0x1a, 0xdb, 0x23, 0x59, 0xdd,
+	0xba, 0xe7, 0x86, 0x53, 0x7d, 0x37, 0xb9, 0x00,
+	0x9f, 0x7a, 0xc4, 0x35, 0x1f, 0x6b, 0x91, 0xe6,
+	0x30, 0x97, 0xa7, 0x13, 0x11, 0x5d, 0x05, 0xbe
+};
+static const u8 enc_assoc110[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce110[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key110[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input111[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x13, 0xf8, 0x0a, 0x00, 0x6d, 0xc1, 0xbb, 0xda,
+	0xd6, 0x39, 0xa9, 0x2f, 0xc7, 0xec, 0xa6, 0x55,
+	0xf7, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x63, 0x48, 0xb8, 0xfd, 0x29, 0xbf, 0x96, 0xd5,
+	0x63, 0xa5, 0x17, 0xe2, 0x7d, 0x7b, 0xfc, 0x0f,
+	0x2f, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x2b, 0x6c, 0x89, 0x1d, 0x37, 0xc7, 0xe1, 0x1a,
+	0x56, 0x41, 0x91, 0x9c, 0x49, 0x4d, 0x95, 0x16
+};
+static const u8 enc_output111[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x94, 0x3a, 0xc0, 0x09, 0x81, 0xd8, 0x9d, 0x2c,
+	0x14, 0xfe, 0xbf, 0xa5, 0xfb, 0x9c, 0xba, 0x12,
+	0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x41, 0x70, 0x83, 0xa7, 0xaa, 0x8d, 0x13,
+	0xf2, 0xfb, 0xb5, 0xdf, 0xc2, 0x55, 0xa8, 0x04,
+	0x97, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x00, 0x41, 0x70, 0x83, 0xa7, 0xaa, 0x8d, 0x13,
+	0xf2, 0xfb, 0xb5, 0xdf, 0xc2, 0x55, 0xa8, 0x04,
+	0x9a, 0x18, 0xa8, 0x28, 0x07, 0x02, 0x69, 0xf4,
+	0x47, 0x00, 0xd0, 0x09, 0xe7, 0x17, 0x1c, 0xc9
+};
+static const u8 enc_assoc111[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce111[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key111[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input112[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x82, 0xe5, 0x9b, 0x45, 0x82, 0x91, 0x50, 0x38,
+	0xf9, 0x33, 0x81, 0x1e, 0x65, 0x2d, 0xc6, 0x6a,
+	0xfc, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xb6, 0x71, 0xc8, 0xca, 0xc2, 0x70, 0xc2, 0x65,
+	0xa0, 0xac, 0x2f, 0x53, 0x57, 0x99, 0x88, 0x0a,
+	0x24, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xfe, 0x55, 0xf9, 0x2a, 0xdc, 0x08, 0xb5, 0xaa,
+	0x95, 0x48, 0xa9, 0x2d, 0x63, 0xaf, 0xe1, 0x13
+};
+static const u8 enc_output112[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x05, 0x27, 0x51, 0x4c, 0x6e, 0x88, 0x76, 0xce,
+	0x3b, 0xf4, 0x97, 0x94, 0x59, 0x5d, 0xda, 0x2d,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd5, 0x78, 0x00, 0xb4, 0x4c, 0x65, 0xd9, 0xa3,
+	0x31, 0xf2, 0x8d, 0x6e, 0xe8, 0xb7, 0xdc, 0x01,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xd5, 0x78, 0x00, 0xb4, 0x4c, 0x65, 0xd9, 0xa3,
+	0x31, 0xf2, 0x8d, 0x6e, 0xe8, 0xb7, 0xdc, 0x01,
+	0xb4, 0x36, 0xa8, 0x2b, 0x93, 0xd5, 0x55, 0xf7,
+	0x43, 0x00, 0xd0, 0x19, 0x9b, 0xa7, 0x18, 0xce
+};
+static const u8 enc_assoc112[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce112[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key112[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input113[] __initconst = {
+	0xff, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0xf1, 0xd1, 0x28, 0x87, 0xb7, 0x21, 0x69, 0x86,
+	0xa1, 0x2d, 0x79, 0x09, 0x8b, 0x6d, 0xe6, 0x0f,
+	0xc0, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xa7, 0xc7, 0x58, 0x99, 0xf3, 0xe6, 0x0a, 0xf1,
+	0xfc, 0xb6, 0xc7, 0x30, 0x7d, 0x87, 0x59, 0x0f,
+	0x18, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0xef, 0xe3, 0x69, 0x79, 0xed, 0x9e, 0x7d, 0x3e,
+	0xc9, 0x52, 0x41, 0x4e, 0x49, 0xb1, 0x30, 0x16
+};
+static const u8 enc_output113[] __initconst = {
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x76, 0x13, 0xe2, 0x8e, 0x5b, 0x38, 0x4f, 0x70,
+	0x63, 0xea, 0x6f, 0x83, 0xb7, 0x1d, 0xfa, 0x48,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc4, 0xce, 0x90, 0xe7, 0x7d, 0xf3, 0x11, 0x37,
+	0x6d, 0xe8, 0x65, 0x0d, 0xc2, 0xa9, 0x0d, 0x04,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xc4, 0xce, 0x90, 0xe7, 0x7d, 0xf3, 0x11, 0x37,
+	0x6d, 0xe8, 0x65, 0x0d, 0xc2, 0xa9, 0x0d, 0x04,
+	0xce, 0x54, 0xa8, 0x2e, 0x1f, 0xa9, 0x42, 0xfa,
+	0x3f, 0x00, 0xd0, 0x29, 0x4f, 0x37, 0x15, 0xd3
+};
+static const u8 enc_assoc113[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce113[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key113[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input114[] __initconst = {
+	0xcb, 0xf1, 0xda, 0x9e, 0x0b, 0xa9, 0x37, 0x73,
+	0x74, 0xe6, 0x9e, 0x1c, 0x0e, 0x60, 0x0c, 0xfc,
+	0x34, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0xbe, 0x3f, 0xa6, 0x6b, 0x6c, 0xe7, 0x80, 0x8a,
+	0xa3, 0xe4, 0x59, 0x49, 0xf9, 0x44, 0x64, 0x9f,
+	0xd0, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0x66, 0x68, 0xdb, 0xc8, 0xf5, 0xf2, 0x0e, 0xf2,
+	0xb3, 0xf3, 0x8f, 0x00, 0xe2, 0x03, 0x17, 0x88
+};
+static const u8 enc_output114[] __initconst = {
+	0xcb, 0x9a, 0x0d, 0xb1, 0x8d, 0x63, 0xd7, 0xea,
+	0xd7, 0xc9, 0x60, 0xd6, 0xb2, 0x86, 0x74, 0x5f,
+	0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xde, 0xba, 0xb4, 0xa1, 0x58, 0x42, 0x50, 0xbf,
+	0xfc, 0x2f, 0xc8, 0x4d, 0x95, 0xde, 0xcf, 0x04,
+	0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xde, 0xba, 0xb4, 0xa1, 0x58, 0x42, 0x50, 0xbf,
+	0xfc, 0x2f, 0xc8, 0x4d, 0x95, 0xde, 0xcf, 0x04,
+	0x23, 0x83, 0xab, 0x0b, 0x79, 0x92, 0x05, 0x69,
+	0x9b, 0x51, 0x0a, 0xa7, 0x09, 0xbf, 0x31, 0xf1
+};
+static const u8 enc_assoc114[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce114[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key114[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input115[] __initconst = {
+	0x8f, 0x27, 0x86, 0x94, 0xc4, 0xe9, 0xda, 0xeb,
+	0xd5, 0x8d, 0x3e, 0x5b, 0x96, 0x6e, 0x8b, 0x68,
+	0x42, 0x3d, 0x35, 0xf6, 0x13, 0xe6, 0xd9, 0x09,
+	0x3d, 0x38, 0xe9, 0x75, 0xc3, 0x8f, 0xe3, 0xb8,
+	0x06, 0x53, 0xe7, 0xa3, 0x31, 0x71, 0x88, 0x33,
+	0xac, 0xc3, 0xb9, 0xad, 0xff, 0x1c, 0x31, 0x98,
+	0xa6, 0xf6, 0x37, 0x81, 0x71, 0xea, 0xe4, 0x39,
+	0x6e, 0xa1, 0x5d, 0xc2, 0x40, 0xd1, 0xab, 0xf4,
+	0xde, 0x04, 0x9a, 0x00, 0xa8, 0x64, 0x06, 0x4b,
+	0xbc, 0xd4, 0x6f, 0xe4, 0xe4, 0x5b, 0x42, 0x8f
+};
+static const u8 enc_output115[] __initconst = {
+	0x8f, 0x4c, 0x51, 0xbb, 0x42, 0x23, 0x3a, 0x72,
+	0x76, 0xa2, 0xc0, 0x91, 0x2a, 0x88, 0xf3, 0xcb,
+	0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0xd6, 0xf5, 0x69, 0x05, 0xd4, 0x58, 0x06,
+	0xf3, 0x08, 0x28, 0xa9, 0x93, 0x86, 0x9a, 0x03,
+	0xc5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x66, 0xd6, 0xf5, 0x69, 0x05, 0xd4, 0x58, 0x06,
+	0xf3, 0x08, 0x28, 0xa9, 0x93, 0x86, 0x9a, 0x03,
+	0x8b, 0xfb, 0xab, 0x17, 0xa9, 0xe0, 0xb8, 0x74,
+	0x8b, 0x51, 0x0a, 0xe7, 0xd9, 0xfd, 0x23, 0x05
+};
+static const u8 enc_assoc115[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce115[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key115[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input116[] __initconst = {
+	0xd5, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x9a, 0x22, 0xd7, 0x0a, 0x48, 0xe2, 0x4f, 0xdd,
+	0xcd, 0xd4, 0x41, 0x9d, 0xe6, 0x4c, 0x8f, 0x44,
+	0xfc, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x77, 0xb5, 0xc9, 0x07, 0xd9, 0xc9, 0xe1, 0xea,
+	0x51, 0x85, 0x1a, 0x20, 0x4a, 0xad, 0x9f, 0x0a,
+	0x24, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x3f, 0x91, 0xf8, 0xe7, 0xc7, 0xb1, 0x96, 0x25,
+	0x64, 0x61, 0x9c, 0x5e, 0x7e, 0x9b, 0xf6, 0x13
+};
+static const u8 enc_output116[] __initconst = {
+	0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x1d, 0xe0, 0x1d, 0x03, 0xa4, 0xfb, 0x69, 0x2b,
+	0x0f, 0x13, 0x57, 0x17, 0xda, 0x3c, 0x93, 0x03,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x14, 0xbc, 0x01, 0x79, 0x57, 0xdc, 0xfa, 0x2c,
+	0xc0, 0xdb, 0xb8, 0x1d, 0xf5, 0x83, 0xcb, 0x01,
+	0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x14, 0xbc, 0x01, 0x79, 0x57, 0xdc, 0xfa, 0x2c,
+	0xc0, 0xdb, 0xb8, 0x1d, 0xf5, 0x83, 0xcb, 0x01,
+	0x49, 0xbc, 0x6e, 0x9f, 0xc5, 0x1c, 0x4d, 0x50,
+	0x30, 0x36, 0x64, 0x4d, 0x84, 0x27, 0x73, 0xd2
+};
+static const u8 enc_assoc116[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce116[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key116[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input117[] __initconst = {
+	0xdb, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x75, 0xd5, 0x64, 0x3a, 0xa5, 0xaf, 0x93, 0x4d,
+	0x8c, 0xce, 0x39, 0x2c, 0xc3, 0xee, 0xdb, 0x47,
+	0xc0, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0x60, 0x1b, 0x5a, 0xd2, 0x06, 0x7f, 0x28, 0x06,
+	0x6a, 0x8f, 0x32, 0x81, 0x71, 0x5b, 0xa8, 0x08,
+	0x18, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x28, 0x3f, 0x6b, 0x32, 0x18, 0x07, 0x5f, 0xc9,
+	0x5f, 0x6b, 0xb4, 0xff, 0x45, 0x6d, 0xc1, 0x11
+};
+static const u8 enc_output117[] __initconst = {
+	0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xf2, 0x17, 0xae, 0x33, 0x49, 0xb6, 0xb5, 0xbb,
+	0x4e, 0x09, 0x2f, 0xa6, 0xff, 0x9e, 0xc7, 0x00,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x03, 0x12, 0x92, 0xac, 0x88, 0x6a, 0x33, 0xc0,
+	0xfb, 0xd1, 0x90, 0xbc, 0xce, 0x75, 0xfc, 0x03,
+	0xa0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0x03, 0x12, 0x92, 0xac, 0x88, 0x6a, 0x33, 0xc0,
+	0xfb, 0xd1, 0x90, 0xbc, 0xce, 0x75, 0xfc, 0x03,
+	0x63, 0xda, 0x6e, 0xa2, 0x51, 0xf0, 0x39, 0x53,
+	0x2c, 0x36, 0x64, 0x5d, 0x38, 0xb7, 0x6f, 0xd7
+};
+static const u8 enc_assoc117[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce117[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key117[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+/* wycheproof - edge case intermediate sums in poly1305 */
+static const u8 enc_input118[] __initconst = {
+	0x93, 0x94, 0x28, 0xd0, 0x79, 0x35, 0x1f, 0x66,
+	0x5c, 0xd0, 0x01, 0x35, 0x43, 0x19, 0x87, 0x5c,
+	0x62, 0x48, 0x39, 0x60, 0x42, 0x16, 0xe4, 0x03,
+	0xeb, 0xcc, 0x6a, 0xf5, 0x59, 0xec, 0x8b, 0x43,
+	0x97, 0x7a, 0xed, 0x35, 0xcb, 0x5a, 0x2f, 0xca,
+	0xa0, 0x34, 0x6e, 0xfb, 0x93, 0x65, 0x54, 0x64,
+	0xd8, 0xc8, 0xc3, 0xfa, 0x1a, 0x9e, 0x47, 0x4a,
+	0xbe, 0x52, 0xd0, 0x2c, 0x81, 0x87, 0xe9, 0x0f,
+	0x4f, 0x2d, 0x90, 0x96, 0x52, 0x4f, 0xa1, 0xb2,
+	0xb0, 0x23, 0xb8, 0xb2, 0x88, 0x22, 0x27, 0x73,
+	0x90, 0xec, 0xf2, 0x1a, 0x04, 0xe6, 0x30, 0x85,
+	0x8b, 0xb6, 0x56, 0x52, 0xb5, 0xb1, 0x80, 0x16
+};
+static const u8 enc_output118[] __initconst = {
+	0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xe5, 0x8a, 0xf3, 0x69, 0xae, 0x0f, 0xc2, 0xf5,
+	0x29, 0x0b, 0x7c, 0x7f, 0x65, 0x9c, 0x97, 0x04,
+	0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xbb, 0xc1, 0x0b, 0x84, 0x94, 0x8b, 0x5c, 0x8c,
+	0x2f, 0x0c, 0x72, 0x11, 0x3e, 0xa9, 0xbd, 0x04,
+	0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xbb, 0xc1, 0x0b, 0x84, 0x94, 0x8b, 0x5c, 0x8c,
+	0x2f, 0x0c, 0x72, 0x11, 0x3e, 0xa9, 0xbd, 0x04,
+	0x73, 0xeb, 0x27, 0x24, 0xb5, 0xc4, 0x05, 0xf0,
+	0x4d, 0x00, 0xd0, 0xf1, 0x58, 0x40, 0xa1, 0xc1
+};
+static const u8 enc_assoc118[] __initconst = {
+	0xff, 0xff, 0xff, 0xff
+};
+static const u8 enc_nonce118[] __initconst = {
+	0x00, 0x00, 0x00, 0x00, 0x06, 0x4c, 0x2d, 0x52
+};
+static const u8 enc_key118[] __initconst = {
+	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+	0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+	0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f
+};
+
+static const struct chacha20poly1305_testvec
+chacha20poly1305_enc_vectors[] __initconst = {
+	{ enc_input001, enc_output001, enc_assoc001, enc_nonce001, enc_key001,
+	  sizeof(enc_input001), sizeof(enc_assoc001), sizeof(enc_nonce001) },
+	{ enc_input002, enc_output002, enc_assoc002, enc_nonce002, enc_key002,
+	  sizeof(enc_input002), sizeof(enc_assoc002), sizeof(enc_nonce002) },
+	{ enc_input003, enc_output003, enc_assoc003, enc_nonce003, enc_key003,
+	  sizeof(enc_input003), sizeof(enc_assoc003), sizeof(enc_nonce003) },
+	{ enc_input004, enc_output004, enc_assoc004, enc_nonce004, enc_key004,
+	  sizeof(enc_input004), sizeof(enc_assoc004), sizeof(enc_nonce004) },
+	{ enc_input005, enc_output005, enc_assoc005, enc_nonce005, enc_key005,
+	  sizeof(enc_input005), sizeof(enc_assoc005), sizeof(enc_nonce005) },
+	{ enc_input006, enc_output006, enc_assoc006, enc_nonce006, enc_key006,
+	  sizeof(enc_input006), sizeof(enc_assoc006), sizeof(enc_nonce006) },
+	{ enc_input007, enc_output007, enc_assoc007, enc_nonce007, enc_key007,
+	  sizeof(enc_input007), sizeof(enc_assoc007), sizeof(enc_nonce007) },
+	{ enc_input008, enc_output008, enc_assoc008, enc_nonce008, enc_key008,
+	  sizeof(enc_input008), sizeof(enc_assoc008), sizeof(enc_nonce008) },
+	{ enc_input009, enc_output009, enc_assoc009, enc_nonce009, enc_key009,
+	  sizeof(enc_input009), sizeof(enc_assoc009), sizeof(enc_nonce009) },
+	{ enc_input010, enc_output010, enc_assoc010, enc_nonce010, enc_key010,
+	  sizeof(enc_input010), sizeof(enc_assoc010), sizeof(enc_nonce010) },
+	{ enc_input011, enc_output011, enc_assoc011, enc_nonce011, enc_key011,
+	  sizeof(enc_input011), sizeof(enc_assoc011), sizeof(enc_nonce011) },
+	{ enc_input012, enc_output012, enc_assoc012, enc_nonce012, enc_key012,
+	  sizeof(enc_input012), sizeof(enc_assoc012), sizeof(enc_nonce012) },
+	{ enc_input013, enc_output013, enc_assoc013, enc_nonce013, enc_key013,
+	  sizeof(enc_input013), sizeof(enc_assoc013), sizeof(enc_nonce013) },
+	{ enc_input014, enc_output014, enc_assoc014, enc_nonce014, enc_key014,
+	  sizeof(enc_input014), sizeof(enc_assoc014), sizeof(enc_nonce014) },
+	{ enc_input015, enc_output015, enc_assoc015, enc_nonce015, enc_key015,
+	  sizeof(enc_input015), sizeof(enc_assoc015), sizeof(enc_nonce015) },
+	{ enc_input016, enc_output016, enc_assoc016, enc_nonce016, enc_key016,
+	  sizeof(enc_input016), sizeof(enc_assoc016), sizeof(enc_nonce016) },
+	{ enc_input017, enc_output017, enc_assoc017, enc_nonce017, enc_key017,
+	  sizeof(enc_input017), sizeof(enc_assoc017), sizeof(enc_nonce017) },
+	{ enc_input018, enc_output018, enc_assoc018, enc_nonce018, enc_key018,
+	  sizeof(enc_input018), sizeof(enc_assoc018), sizeof(enc_nonce018) },
+	{ enc_input019, enc_output019, enc_assoc019, enc_nonce019, enc_key019,
+	  sizeof(enc_input019), sizeof(enc_assoc019), sizeof(enc_nonce019) },
+	{ enc_input020, enc_output020, enc_assoc020, enc_nonce020, enc_key020,
+	  sizeof(enc_input020), sizeof(enc_assoc020), sizeof(enc_nonce020) },
+	{ enc_input021, enc_output021, enc_assoc021, enc_nonce021, enc_key021,
+	  sizeof(enc_input021), sizeof(enc_assoc021), sizeof(enc_nonce021) },
+	{ enc_input022, enc_output022, enc_assoc022, enc_nonce022, enc_key022,
+	  sizeof(enc_input022), sizeof(enc_assoc022), sizeof(enc_nonce022) },
+	{ enc_input023, enc_output023, enc_assoc023, enc_nonce023, enc_key023,
+	  sizeof(enc_input023), sizeof(enc_assoc023), sizeof(enc_nonce023) },
+	{ enc_input024, enc_output024, enc_assoc024, enc_nonce024, enc_key024,
+	  sizeof(enc_input024), sizeof(enc_assoc024), sizeof(enc_nonce024) },
+	{ enc_input025, enc_output025, enc_assoc025, enc_nonce025, enc_key025,
+	  sizeof(enc_input025), sizeof(enc_assoc025), sizeof(enc_nonce025) },
+	{ enc_input026, enc_output026, enc_assoc026, enc_nonce026, enc_key026,
+	  sizeof(enc_input026), sizeof(enc_assoc026), sizeof(enc_nonce026) },
+	{ enc_input027, enc_output027, enc_assoc027, enc_nonce027, enc_key027,
+	  sizeof(enc_input027), sizeof(enc_assoc027), sizeof(enc_nonce027) },
+	{ enc_input028, enc_output028, enc_assoc028, enc_nonce028, enc_key028,
+	  sizeof(enc_input028), sizeof(enc_assoc028), sizeof(enc_nonce028) },
+	{ enc_input029, enc_output029, enc_assoc029, enc_nonce029, enc_key029,
+	  sizeof(enc_input029), sizeof(enc_assoc029), sizeof(enc_nonce029) },
+	{ enc_input030, enc_output030, enc_assoc030, enc_nonce030, enc_key030,
+	  sizeof(enc_input030), sizeof(enc_assoc030), sizeof(enc_nonce030) },
+	{ enc_input031, enc_output031, enc_assoc031, enc_nonce031, enc_key031,
+	  sizeof(enc_input031), sizeof(enc_assoc031), sizeof(enc_nonce031) },
+	{ enc_input032, enc_output032, enc_assoc032, enc_nonce032, enc_key032,
+	  sizeof(enc_input032), sizeof(enc_assoc032), sizeof(enc_nonce032) },
+	{ enc_input033, enc_output033, enc_assoc033, enc_nonce033, enc_key033,
+	  sizeof(enc_input033), sizeof(enc_assoc033), sizeof(enc_nonce033) },
+	{ enc_input034, enc_output034, enc_assoc034, enc_nonce034, enc_key034,
+	  sizeof(enc_input034), sizeof(enc_assoc034), sizeof(enc_nonce034) },
+	{ enc_input035, enc_output035, enc_assoc035, enc_nonce035, enc_key035,
+	  sizeof(enc_input035), sizeof(enc_assoc035), sizeof(enc_nonce035) },
+	{ enc_input036, enc_output036, enc_assoc036, enc_nonce036, enc_key036,
+	  sizeof(enc_input036), sizeof(enc_assoc036), sizeof(enc_nonce036) },
+	{ enc_input037, enc_output037, enc_assoc037, enc_nonce037, enc_key037,
+	  sizeof(enc_input037), sizeof(enc_assoc037), sizeof(enc_nonce037) },
+	{ enc_input038, enc_output038, enc_assoc038, enc_nonce038, enc_key038,
+	  sizeof(enc_input038), sizeof(enc_assoc038), sizeof(enc_nonce038) },
+	{ enc_input039, enc_output039, enc_assoc039, enc_nonce039, enc_key039,
+	  sizeof(enc_input039), sizeof(enc_assoc039), sizeof(enc_nonce039) },
+	{ enc_input040, enc_output040, enc_assoc040, enc_nonce040, enc_key040,
+	  sizeof(enc_input040), sizeof(enc_assoc040), sizeof(enc_nonce040) },
+	{ enc_input041, enc_output041, enc_assoc041, enc_nonce041, enc_key041,
+	  sizeof(enc_input041), sizeof(enc_assoc041), sizeof(enc_nonce041) },
+	{ enc_input042, enc_output042, enc_assoc042, enc_nonce042, enc_key042,
+	  sizeof(enc_input042), sizeof(enc_assoc042), sizeof(enc_nonce042) },
+	{ enc_input043, enc_output043, enc_assoc043, enc_nonce043, enc_key043,
+	  sizeof(enc_input043), sizeof(enc_assoc043), sizeof(enc_nonce043) },
+	{ enc_input044, enc_output044, enc_assoc044, enc_nonce044, enc_key044,
+	  sizeof(enc_input044), sizeof(enc_assoc044), sizeof(enc_nonce044) },
+	{ enc_input045, enc_output045, enc_assoc045, enc_nonce045, enc_key045,
+	  sizeof(enc_input045), sizeof(enc_assoc045), sizeof(enc_nonce045) },
+	{ enc_input046, enc_output046, enc_assoc046, enc_nonce046, enc_key046,
+	  sizeof(enc_input046), sizeof(enc_assoc046), sizeof(enc_nonce046) },
+	{ enc_input047, enc_output047, enc_assoc047, enc_nonce047, enc_key047,
+	  sizeof(enc_input047), sizeof(enc_assoc047), sizeof(enc_nonce047) },
+	{ enc_input048, enc_output048, enc_assoc048, enc_nonce048, enc_key048,
+	  sizeof(enc_input048), sizeof(enc_assoc048), sizeof(enc_nonce048) },
+	{ enc_input049, enc_output049, enc_assoc049, enc_nonce049, enc_key049,
+	  sizeof(enc_input049), sizeof(enc_assoc049), sizeof(enc_nonce049) },
+	{ enc_input050, enc_output050, enc_assoc050, enc_nonce050, enc_key050,
+	  sizeof(enc_input050), sizeof(enc_assoc050), sizeof(enc_nonce050) },
+	{ enc_input051, enc_output051, enc_assoc051, enc_nonce051, enc_key051,
+	  sizeof(enc_input051), sizeof(enc_assoc051), sizeof(enc_nonce051) },
+	{ enc_input052, enc_output052, enc_assoc052, enc_nonce052, enc_key052,
+	  sizeof(enc_input052), sizeof(enc_assoc052), sizeof(enc_nonce052) },
+	{ enc_input053, enc_output053, enc_assoc053, enc_nonce053, enc_key053,
+	  sizeof(enc_input053), sizeof(enc_assoc053), sizeof(enc_nonce053) },
+	{ enc_input054, enc_output054, enc_assoc054, enc_nonce054, enc_key054,
+	  sizeof(enc_input054), sizeof(enc_assoc054), sizeof(enc_nonce054) },
+	{ enc_input055, enc_output055, enc_assoc055, enc_nonce055, enc_key055,
+	  sizeof(enc_input055), sizeof(enc_assoc055), sizeof(enc_nonce055) },
+	{ enc_input056, enc_output056, enc_assoc056, enc_nonce056, enc_key056,
+	  sizeof(enc_input056), sizeof(enc_assoc056), sizeof(enc_nonce056) },
+	{ enc_input057, enc_output057, enc_assoc057, enc_nonce057, enc_key057,
+	  sizeof(enc_input057), sizeof(enc_assoc057), sizeof(enc_nonce057) },
+	{ enc_input058, enc_output058, enc_assoc058, enc_nonce058, enc_key058,
+	  sizeof(enc_input058), sizeof(enc_assoc058), sizeof(enc_nonce058) },
+	{ enc_input059, enc_output059, enc_assoc059, enc_nonce059, enc_key059,
+	  sizeof(enc_input059), sizeof(enc_assoc059), sizeof(enc_nonce059) },
+	{ enc_input060, enc_output060, enc_assoc060, enc_nonce060, enc_key060,
+	  sizeof(enc_input060), sizeof(enc_assoc060), sizeof(enc_nonce060) },
+	{ enc_input061, enc_output061, enc_assoc061, enc_nonce061, enc_key061,
+	  sizeof(enc_input061), sizeof(enc_assoc061), sizeof(enc_nonce061) },
+	{ enc_input062, enc_output062, enc_assoc062, enc_nonce062, enc_key062,
+	  sizeof(enc_input062), sizeof(enc_assoc062), sizeof(enc_nonce062) },
+	{ enc_input063, enc_output063, enc_assoc063, enc_nonce063, enc_key063,
+	  sizeof(enc_input063), sizeof(enc_assoc063), sizeof(enc_nonce063) },
+	{ enc_input064, enc_output064, enc_assoc064, enc_nonce064, enc_key064,
+	  sizeof(enc_input064), sizeof(enc_assoc064), sizeof(enc_nonce064) },
+	{ enc_input065, enc_output065, enc_assoc065, enc_nonce065, enc_key065,
+	  sizeof(enc_input065), sizeof(enc_assoc065), sizeof(enc_nonce065) },
+	{ enc_input066, enc_output066, enc_assoc066, enc_nonce066, enc_key066,
+	  sizeof(enc_input066), sizeof(enc_assoc066), sizeof(enc_nonce066) },
+	{ enc_input067, enc_output067, enc_assoc067, enc_nonce067, enc_key067,
+	  sizeof(enc_input067), sizeof(enc_assoc067), sizeof(enc_nonce067) },
+	{ enc_input068, enc_output068, enc_assoc068, enc_nonce068, enc_key068,
+	  sizeof(enc_input068), sizeof(enc_assoc068), sizeof(enc_nonce068) },
+	{ enc_input069, enc_output069, enc_assoc069, enc_nonce069, enc_key069,
+	  sizeof(enc_input069), sizeof(enc_assoc069), sizeof(enc_nonce069) },
+	{ enc_input070, enc_output070, enc_assoc070, enc_nonce070, enc_key070,
+	  sizeof(enc_input070), sizeof(enc_assoc070), sizeof(enc_nonce070) },
+	{ enc_input071, enc_output071, enc_assoc071, enc_nonce071, enc_key071,
+	  sizeof(enc_input071), sizeof(enc_assoc071), sizeof(enc_nonce071) },
+	{ enc_input072, enc_output072, enc_assoc072, enc_nonce072, enc_key072,
+	  sizeof(enc_input072), sizeof(enc_assoc072), sizeof(enc_nonce072) },
+	{ enc_input073, enc_output073, enc_assoc073, enc_nonce073, enc_key073,
+	  sizeof(enc_input073), sizeof(enc_assoc073), sizeof(enc_nonce073) },
+	{ enc_input074, enc_output074, enc_assoc074, enc_nonce074, enc_key074,
+	  sizeof(enc_input074), sizeof(enc_assoc074), sizeof(enc_nonce074) },
+	{ enc_input075, enc_output075, enc_assoc075, enc_nonce075, enc_key075,
+	  sizeof(enc_input075), sizeof(enc_assoc075), sizeof(enc_nonce075) },
+	{ enc_input076, enc_output076, enc_assoc076, enc_nonce076, enc_key076,
+	  sizeof(enc_input076), sizeof(enc_assoc076), sizeof(enc_nonce076) },
+	{ enc_input077, enc_output077, enc_assoc077, enc_nonce077, enc_key077,
+	  sizeof(enc_input077), sizeof(enc_assoc077), sizeof(enc_nonce077) },
+	{ enc_input078, enc_output078, enc_assoc078, enc_nonce078, enc_key078,
+	  sizeof(enc_input078), sizeof(enc_assoc078), sizeof(enc_nonce078) },
+	{ enc_input079, enc_output079, enc_assoc079, enc_nonce079, enc_key079,
+	  sizeof(enc_input079), sizeof(enc_assoc079), sizeof(enc_nonce079) },
+	{ enc_input080, enc_output080, enc_assoc080, enc_nonce080, enc_key080,
+	  sizeof(enc_input080), sizeof(enc_assoc080), sizeof(enc_nonce080) },
+	{ enc_input081, enc_output081, enc_assoc081, enc_nonce081, enc_key081,
+	  sizeof(enc_input081), sizeof(enc_assoc081), sizeof(enc_nonce081) },
+	{ enc_input082, enc_output082, enc_assoc082, enc_nonce082, enc_key082,
+	  sizeof(enc_input082), sizeof(enc_assoc082), sizeof(enc_nonce082) },
+	{ enc_input083, enc_output083, enc_assoc083, enc_nonce083, enc_key083,
+	  sizeof(enc_input083), sizeof(enc_assoc083), sizeof(enc_nonce083) },
+	{ enc_input084, enc_output084, enc_assoc084, enc_nonce084, enc_key084,
+	  sizeof(enc_input084), sizeof(enc_assoc084), sizeof(enc_nonce084) },
+	{ enc_input085, enc_output085, enc_assoc085, enc_nonce085, enc_key085,
+	  sizeof(enc_input085), sizeof(enc_assoc085), sizeof(enc_nonce085) },
+	{ enc_input086, enc_output086, enc_assoc086, enc_nonce086, enc_key086,
+	  sizeof(enc_input086), sizeof(enc_assoc086), sizeof(enc_nonce086) },
+	{ enc_input087, enc_output087, enc_assoc087, enc_nonce087, enc_key087,
+	  sizeof(enc_input087), sizeof(enc_assoc087), sizeof(enc_nonce087) },
+	{ enc_input088, enc_output088, enc_assoc088, enc_nonce088, enc_key088,
+	  sizeof(enc_input088), sizeof(enc_assoc088), sizeof(enc_nonce088) },
+	{ enc_input089, enc_output089, enc_assoc089, enc_nonce089, enc_key089,
+	  sizeof(enc_input089), sizeof(enc_assoc089), sizeof(enc_nonce089) },
+	{ enc_input090, enc_output090, enc_assoc090, enc_nonce090, enc_key090,
+	  sizeof(enc_input090), sizeof(enc_assoc090), sizeof(enc_nonce090) },
+	{ enc_input091, enc_output091, enc_assoc091, enc_nonce091, enc_key091,
+	  sizeof(enc_input091), sizeof(enc_assoc091), sizeof(enc_nonce091) },
+	{ enc_input092, enc_output092, enc_assoc092, enc_nonce092, enc_key092,
+	  sizeof(enc_input092), sizeof(enc_assoc092), sizeof(enc_nonce092) },
+	{ enc_input093, enc_output093, enc_assoc093, enc_nonce093, enc_key093,
+	  sizeof(enc_input093), sizeof(enc_assoc093), sizeof(enc_nonce093) },
+	{ enc_input094, enc_output094, enc_assoc094, enc_nonce094, enc_key094,
+	  sizeof(enc_input094), sizeof(enc_assoc094), sizeof(enc_nonce094) },
+	{ enc_input095, enc_output095, enc_assoc095, enc_nonce095, enc_key095,
+	  sizeof(enc_input095), sizeof(enc_assoc095), sizeof(enc_nonce095) },
+	{ enc_input096, enc_output096, enc_assoc096, enc_nonce096, enc_key096,
+	  sizeof(enc_input096), sizeof(enc_assoc096), sizeof(enc_nonce096) },
+	{ enc_input097, enc_output097, enc_assoc097, enc_nonce097, enc_key097,
+	  sizeof(enc_input097), sizeof(enc_assoc097), sizeof(enc_nonce097) },
+	{ enc_input098, enc_output098, enc_assoc098, enc_nonce098, enc_key098,
+	  sizeof(enc_input098), sizeof(enc_assoc098), sizeof(enc_nonce098) },
+	{ enc_input099, enc_output099, enc_assoc099, enc_nonce099, enc_key099,
+	  sizeof(enc_input099), sizeof(enc_assoc099), sizeof(enc_nonce099) },
+	{ enc_input100, enc_output100, enc_assoc100, enc_nonce100, enc_key100,
+	  sizeof(enc_input100), sizeof(enc_assoc100), sizeof(enc_nonce100) },
+	{ enc_input101, enc_output101, enc_assoc101, enc_nonce101, enc_key101,
+	  sizeof(enc_input101), sizeof(enc_assoc101), sizeof(enc_nonce101) },
+	{ enc_input102, enc_output102, enc_assoc102, enc_nonce102, enc_key102,
+	  sizeof(enc_input102), sizeof(enc_assoc102), sizeof(enc_nonce102) },
+	{ enc_input103, enc_output103, enc_assoc103, enc_nonce103, enc_key103,
+	  sizeof(enc_input103), sizeof(enc_assoc103), sizeof(enc_nonce103) },
+	{ enc_input104, enc_output104, enc_assoc104, enc_nonce104, enc_key104,
+	  sizeof(enc_input104), sizeof(enc_assoc104), sizeof(enc_nonce104) },
+	{ enc_input105, enc_output105, enc_assoc105, enc_nonce105, enc_key105,
+	  sizeof(enc_input105), sizeof(enc_assoc105), sizeof(enc_nonce105) },
+	{ enc_input106, enc_output106, enc_assoc106, enc_nonce106, enc_key106,
+	  sizeof(enc_input106), sizeof(enc_assoc106), sizeof(enc_nonce106) },
+	{ enc_input107, enc_output107, enc_assoc107, enc_nonce107, enc_key107,
+	  sizeof(enc_input107), sizeof(enc_assoc107), sizeof(enc_nonce107) },
+	{ enc_input108, enc_output108, enc_assoc108, enc_nonce108, enc_key108,
+	  sizeof(enc_input108), sizeof(enc_assoc108), sizeof(enc_nonce108) },
+	{ enc_input109, enc_output109, enc_assoc109, enc_nonce109, enc_key109,
+	  sizeof(enc_input109), sizeof(enc_assoc109), sizeof(enc_nonce109) },
+	{ enc_input110, enc_output110, enc_assoc110, enc_nonce110, enc_key110,
+	  sizeof(enc_input110), sizeof(enc_assoc110), sizeof(enc_nonce110) },
+	{ enc_input111, enc_output111, enc_assoc111, enc_nonce111, enc_key111,
+	  sizeof(enc_input111), sizeof(enc_assoc111), sizeof(enc_nonce111) },
+	{ enc_input112, enc_output112, enc_assoc112, enc_nonce112, enc_key112,
+	  sizeof(enc_input112), sizeof(enc_assoc112), sizeof(enc_nonce112) },
+	{ enc_input113, enc_output113, enc_assoc113, enc_nonce113, enc_key113,
+	  sizeof(enc_input113), sizeof(enc_assoc113), sizeof(enc_nonce113) },
+	{ enc_input114, enc_output114, enc_assoc114, enc_nonce114, enc_key114,
+	  sizeof(enc_input114), sizeof(enc_assoc114), sizeof(enc_nonce114) },
+	{ enc_input115, enc_output115, enc_assoc115, enc_nonce115, enc_key115,
+	  sizeof(enc_input115), sizeof(enc_assoc115), sizeof(enc_nonce115) },
+	{ enc_input116, enc_output116, enc_assoc116, enc_nonce116, enc_key116,
+	  sizeof(enc_input116), sizeof(enc_assoc116), sizeof(enc_nonce116) },
+	{ enc_input117, enc_output117, enc_assoc117, enc_nonce117, enc_key117,
+	  sizeof(enc_input117), sizeof(enc_assoc117), sizeof(enc_nonce117) },
+	{ enc_input118, enc_output118, enc_assoc118, enc_nonce118, enc_key118,
+	  sizeof(enc_input118), sizeof(enc_assoc118), sizeof(enc_nonce118) }
+};
+
+static const u8 dec_input001[] __initconst = {
+	0x64, 0xa0, 0x86, 0x15, 0x75, 0x86, 0x1a, 0xf4,
+	0x60, 0xf0, 0x62, 0xc7, 0x9b, 0xe6, 0x43, 0xbd,
+	0x5e, 0x80, 0x5c, 0xfd, 0x34, 0x5c, 0xf3, 0x89,
+	0xf1, 0x08, 0x67, 0x0a, 0xc7, 0x6c, 0x8c, 0xb2,
+	0x4c, 0x6c, 0xfc, 0x18, 0x75, 0x5d, 0x43, 0xee,
+	0xa0, 0x9e, 0xe9, 0x4e, 0x38, 0x2d, 0x26, 0xb0,
+	0xbd, 0xb7, 0xb7, 0x3c, 0x32, 0x1b, 0x01, 0x00,
+	0xd4, 0xf0, 0x3b, 0x7f, 0x35, 0x58, 0x94, 0xcf,
+	0x33, 0x2f, 0x83, 0x0e, 0x71, 0x0b, 0x97, 0xce,
+	0x98, 0xc8, 0xa8, 0x4a, 0xbd, 0x0b, 0x94, 0x81,
+	0x14, 0xad, 0x17, 0x6e, 0x00, 0x8d, 0x33, 0xbd,
+	0x60, 0xf9, 0x82, 0xb1, 0xff, 0x37, 0xc8, 0x55,
+	0x97, 0x97, 0xa0, 0x6e, 0xf4, 0xf0, 0xef, 0x61,
+	0xc1, 0x86, 0x32, 0x4e, 0x2b, 0x35, 0x06, 0x38,
+	0x36, 0x06, 0x90, 0x7b, 0x6a, 0x7c, 0x02, 0xb0,
+	0xf9, 0xf6, 0x15, 0x7b, 0x53, 0xc8, 0x67, 0xe4,
+	0xb9, 0x16, 0x6c, 0x76, 0x7b, 0x80, 0x4d, 0x46,
+	0xa5, 0x9b, 0x52, 0x16, 0xcd, 0xe7, 0xa4, 0xe9,
+	0x90, 0x40, 0xc5, 0xa4, 0x04, 0x33, 0x22, 0x5e,
+	0xe2, 0x82, 0xa1, 0xb0, 0xa0, 0x6c, 0x52, 0x3e,
+	0xaf, 0x45, 0x34, 0xd7, 0xf8, 0x3f, 0xa1, 0x15,
+	0x5b, 0x00, 0x47, 0x71, 0x8c, 0xbc, 0x54, 0x6a,
+	0x0d, 0x07, 0x2b, 0x04, 0xb3, 0x56, 0x4e, 0xea,
+	0x1b, 0x42, 0x22, 0x73, 0xf5, 0x48, 0x27, 0x1a,
+	0x0b, 0xb2, 0x31, 0x60, 0x53, 0xfa, 0x76, 0x99,
+	0x19, 0x55, 0xeb, 0xd6, 0x31, 0x59, 0x43, 0x4e,
+	0xce, 0xbb, 0x4e, 0x46, 0x6d, 0xae, 0x5a, 0x10,
+	0x73, 0xa6, 0x72, 0x76, 0x27, 0x09, 0x7a, 0x10,
+	0x49, 0xe6, 0x17, 0xd9, 0x1d, 0x36, 0x10, 0x94,
+	0xfa, 0x68, 0xf0, 0xff, 0x77, 0x98, 0x71, 0x30,
+	0x30, 0x5b, 0xea, 0xba, 0x2e, 0xda, 0x04, 0xdf,
+	0x99, 0x7b, 0x71, 0x4d, 0x6c, 0x6f, 0x2c, 0x29,
+	0xa6, 0xad, 0x5c, 0xb4, 0x02, 0x2b, 0x02, 0x70,
+	0x9b, 0xee, 0xad, 0x9d, 0x67, 0x89, 0x0c, 0xbb,
+	0x22, 0x39, 0x23, 0x36, 0xfe, 0xa1, 0x85, 0x1f,
+	0x38
+};
+static const u8 dec_output001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 dec_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 dec_nonce001[] __initconst = {
+	0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
+};
+static const u8 dec_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const u8 dec_input002[] __initconst = {
+	0xea, 0xe0, 0x1e, 0x9e, 0x2c, 0x91, 0xaa, 0xe1,
+	0xdb, 0x5d, 0x99, 0x3f, 0x8a, 0xf7, 0x69, 0x92
+};
+static const u8 dec_output002[] __initconst = { };
+static const u8 dec_assoc002[] __initconst = { };
+static const u8 dec_nonce002[] __initconst = {
+	0xca, 0xbf, 0x33, 0x71, 0x32, 0x45, 0x77, 0x8e
+};
+static const u8 dec_key002[] __initconst = {
+	0x4c, 0xf5, 0x96, 0x83, 0x38, 0xe6, 0xae, 0x7f,
+	0x2d, 0x29, 0x25, 0x76, 0xd5, 0x75, 0x27, 0x86,
+	0x91, 0x9a, 0x27, 0x7a, 0xfb, 0x46, 0xc5, 0xef,
+	0x94, 0x81, 0x79, 0x57, 0x14, 0x59, 0x40, 0x68
+};
+
+static const u8 dec_input003[] __initconst = {
+	0xdd, 0x6b, 0x3b, 0x82, 0xce, 0x5a, 0xbd, 0xd6,
+	0xa9, 0x35, 0x83, 0xd8, 0x8c, 0x3d, 0x85, 0x77
+};
+static const u8 dec_output003[] __initconst = { };
+static const u8 dec_assoc003[] __initconst = {
+	0x33, 0x10, 0x41, 0x12, 0x1f, 0xf3, 0xd2, 0x6b
+};
+static const u8 dec_nonce003[] __initconst = {
+	0x3d, 0x86, 0xb5, 0x6b, 0xc8, 0xa3, 0x1f, 0x1d
+};
+static const u8 dec_key003[] __initconst = {
+	0x2d, 0xb0, 0x5d, 0x40, 0xc8, 0xed, 0x44, 0x88,
+	0x34, 0xd1, 0x13, 0xaf, 0x57, 0xa1, 0xeb, 0x3a,
+	0x2a, 0x80, 0x51, 0x36, 0xec, 0x5b, 0xbc, 0x08,
+	0x93, 0x84, 0x21, 0xb5, 0x13, 0x88, 0x3c, 0x0d
+};
+
+static const u8 dec_input004[] __initconst = {
+	0xb7, 0x1b, 0xb0, 0x73, 0x59, 0xb0, 0x84, 0xb2,
+	0x6d, 0x8e, 0xab, 0x94, 0x31, 0xa1, 0xae, 0xac,
+	0x89
+};
+static const u8 dec_output004[] __initconst = {
+	0xa4
+};
+static const u8 dec_assoc004[] __initconst = {
+	0x6a, 0xe2, 0xad, 0x3f, 0x88, 0x39, 0x5a, 0x40
+};
+static const u8 dec_nonce004[] __initconst = {
+	0xd2, 0x32, 0x1f, 0x29, 0x28, 0xc6, 0xc4, 0xc4
+};
+static const u8 dec_key004[] __initconst = {
+	0x4b, 0x28, 0x4b, 0xa3, 0x7b, 0xbe, 0xe9, 0xf8,
+	0x31, 0x80, 0x82, 0xd7, 0xd8, 0xe8, 0xb5, 0xa1,
+	0xe2, 0x18, 0x18, 0x8a, 0x9c, 0xfa, 0xa3, 0x3d,
+	0x25, 0x71, 0x3e, 0x40, 0xbc, 0x54, 0x7a, 0x3e
+};
+
+static const u8 dec_input005[] __initconst = {
+	0xbf, 0xe1, 0x5b, 0x0b, 0xdb, 0x6b, 0xf5, 0x5e,
+	0x6c, 0x5d, 0x84, 0x44, 0x39, 0x81, 0xc1, 0x9c,
+	0xac
+};
+static const u8 dec_output005[] __initconst = {
+	0x2d
+};
+static const u8 dec_assoc005[] __initconst = { };
+static const u8 dec_nonce005[] __initconst = {
+	0x20, 0x1c, 0xaa, 0x5f, 0x9c, 0xbf, 0x92, 0x30
+};
+static const u8 dec_key005[] __initconst = {
+	0x66, 0xca, 0x9c, 0x23, 0x2a, 0x4b, 0x4b, 0x31,
+	0x0e, 0x92, 0x89, 0x8b, 0xf4, 0x93, 0xc7, 0x87,
+	0x98, 0xa3, 0xd8, 0x39, 0xf8, 0xf4, 0xa7, 0x01,
+	0xc0, 0x2e, 0x0a, 0xa6, 0x7e, 0x5a, 0x78, 0x87
+};
+
+static const u8 dec_input006[] __initconst = {
+	0x8b, 0x06, 0xd3, 0x31, 0xb0, 0x93, 0x45, 0xb1,
+	0x75, 0x6e, 0x26, 0xf9, 0x67, 0xbc, 0x90, 0x15,
+	0x81, 0x2c, 0xb5, 0xf0, 0xc6, 0x2b, 0xc7, 0x8c,
+	0x56, 0xd1, 0xbf, 0x69, 0x6c, 0x07, 0xa0, 0xda,
+	0x65, 0x27, 0xc9, 0x90, 0x3d, 0xef, 0x4b, 0x11,
+	0x0f, 0x19, 0x07, 0xfd, 0x29, 0x92, 0xd9, 0xc8,
+	0xf7, 0x99, 0x2e, 0x4a, 0xd0, 0xb8, 0x2c, 0xdc,
+	0x93, 0xf5, 0x9e, 0x33, 0x78, 0xd1, 0x37, 0xc3,
+	0x66, 0xd7, 0x5e, 0xbc, 0x44, 0xbf, 0x53, 0xa5,
+	0xbc, 0xc4, 0xcb, 0x7b, 0x3a, 0x8e, 0x7f, 0x02,
+	0xbd, 0xbb, 0xe7, 0xca, 0xa6, 0x6c, 0x6b, 0x93,
+	0x21, 0x93, 0x10, 0x61, 0xe7, 0x69, 0xd0, 0x78,
+	0xf3, 0x07, 0x5a, 0x1a, 0x8f, 0x73, 0xaa, 0xb1,
+	0x4e, 0xd3, 0xda, 0x4f, 0xf3, 0x32, 0xe1, 0x66,
+	0x3e, 0x6c, 0xc6, 0x13, 0xba, 0x06, 0x5b, 0xfc,
+	0x6a, 0xe5, 0x6f, 0x60, 0xfb, 0x07, 0x40, 0xb0,
+	0x8c, 0x9d, 0x84, 0x43, 0x6b, 0xc1, 0xf7, 0x8d,
+	0x8d, 0x31, 0xf7, 0x7a, 0x39, 0x4d, 0x8f, 0x9a,
+	0xeb
+};
+static const u8 dec_output006[] __initconst = {
+	0x33, 0x2f, 0x94, 0xc1, 0xa4, 0xef, 0xcc, 0x2a,
+	0x5b, 0xa6, 0xe5, 0x8f, 0x1d, 0x40, 0xf0, 0x92,
+	0x3c, 0xd9, 0x24, 0x11, 0xa9, 0x71, 0xf9, 0x37,
+	0x14, 0x99, 0xfa, 0xbe, 0xe6, 0x80, 0xde, 0x50,
+	0xc9, 0x96, 0xd4, 0xb0, 0xec, 0x9e, 0x17, 0xec,
+	0xd2, 0x5e, 0x72, 0x99, 0xfc, 0x0a, 0xe1, 0xcb,
+	0x48, 0xd2, 0x85, 0xdd, 0x2f, 0x90, 0xe0, 0x66,
+	0x3b, 0xe6, 0x20, 0x74, 0xbe, 0x23, 0x8f, 0xcb,
+	0xb4, 0xe4, 0xda, 0x48, 0x40, 0xa6, 0xd1, 0x1b,
+	0xc7, 0x42, 0xce, 0x2f, 0x0c, 0xa6, 0x85, 0x6e,
+	0x87, 0x37, 0x03, 0xb1, 0x7c, 0x25, 0x96, 0xa3,
+	0x05, 0xd8, 0xb0, 0xf4, 0xed, 0xea, 0xc2, 0xf0,
+	0x31, 0x98, 0x6c, 0xd1, 0x14, 0x25, 0xc0, 0xcb,
+	0x01, 0x74, 0xd0, 0x82, 0xf4, 0x36, 0xf5, 0x41,
+	0xd5, 0xdc, 0xca, 0xc5, 0xbb, 0x98, 0xfe, 0xfc,
+	0x69, 0x21, 0x70, 0xd8, 0xa4, 0x4b, 0xc8, 0xde,
+	0x8f
+};
+static const u8 dec_assoc006[] __initconst = {
+	0x70, 0xd3, 0x33, 0xf3, 0x8b, 0x18, 0x0b
+};
+static const u8 dec_nonce006[] __initconst = {
+	0xdf, 0x51, 0x84, 0x82, 0x42, 0x0c, 0x75, 0x9c
+};
+static const u8 dec_key006[] __initconst = {
+	0x68, 0x7b, 0x8d, 0x8e, 0xe3, 0xc4, 0xdd, 0xae,
+	0xdf, 0x72, 0x7f, 0x53, 0x72, 0x25, 0x1e, 0x78,
+	0x91, 0xcb, 0x69, 0x76, 0x1f, 0x49, 0x93, 0xf9,
+	0x6f, 0x21, 0xcc, 0x39, 0x9c, 0xad, 0xb1, 0x01
+};
+
+static const u8 dec_input007[] __initconst = {
+	0x85, 0x04, 0xc2, 0xed, 0x8d, 0xfd, 0x97, 0x5c,
+	0xd2, 0xb7, 0xe2, 0xc1, 0x6b, 0xa3, 0xba, 0xf8,
+	0xc9, 0x50, 0xc3, 0xc6, 0xa5, 0xe3, 0xa4, 0x7c,
+	0xc3, 0x23, 0x49, 0x5e, 0xa9, 0xb9, 0x32, 0xeb,
+	0x8a, 0x7c, 0xca, 0xe5, 0xec, 0xfb, 0x7c, 0xc0,
+	0xcb, 0x7d, 0xdc, 0x2c, 0x9d, 0x92, 0x55, 0x21,
+	0x0a, 0xc8, 0x43, 0x63, 0x59, 0x0a, 0x31, 0x70,
+	0x82, 0x67, 0x41, 0x03, 0xf8, 0xdf, 0xf2, 0xac,
+	0xa7, 0x02, 0xd4, 0xd5, 0x8a, 0x2d, 0xc8, 0x99,
+	0x19, 0x66, 0xd0, 0xf6, 0x88, 0x2c, 0x77, 0xd9,
+	0xd4, 0x0d, 0x6c, 0xbd, 0x98, 0xde, 0xe7, 0x7f,
+	0xad, 0x7e, 0x8a, 0xfb, 0xe9, 0x4b, 0xe5, 0xf7,
+	0xe5, 0x50, 0xa0, 0x90, 0x3f, 0xd6, 0x22, 0x53,
+	0xe3, 0xfe, 0x1b, 0xcc, 0x79, 0x3b, 0xec, 0x12,
+	0x47, 0x52, 0xa7, 0xd6, 0x04, 0xe3, 0x52, 0xe6,
+	0x93, 0x90, 0x91, 0x32, 0x73, 0x79, 0xb8, 0xd0,
+	0x31, 0xde, 0x1f, 0x9f, 0x2f, 0x05, 0x38, 0x54,
+	0x2f, 0x35, 0x04, 0x39, 0xe0, 0xa7, 0xba, 0xc6,
+	0x52, 0xf6, 0x37, 0x65, 0x4c, 0x07, 0xa9, 0x7e,
+	0xb3, 0x21, 0x6f, 0x74, 0x8c, 0xc9, 0xde, 0xdb,
+	0x65, 0x1b, 0x9b, 0xaa, 0x60, 0xb1, 0x03, 0x30,
+	0x6b, 0xb2, 0x03, 0xc4, 0x1c, 0x04, 0xf8, 0x0f,
+	0x64, 0xaf, 0x46, 0xe4, 0x65, 0x99, 0x49, 0xe2,
+	0xea, 0xce, 0x78, 0x00, 0xd8, 0x8b, 0xd5, 0x2e,
+	0xcf, 0xfc, 0x40, 0x49, 0xe8, 0x58, 0xdc, 0x34,
+	0x9c, 0x8c, 0x61, 0xbf, 0x0a, 0x8e, 0xec, 0x39,
+	0xa9, 0x30, 0x05, 0x5a, 0xd2, 0x56, 0x01, 0xc7,
+	0xda, 0x8f, 0x4e, 0xbb, 0x43, 0xa3, 0x3a, 0xf9,
+	0x15, 0x2a, 0xd0, 0xa0, 0x7a, 0x87, 0x34, 0x82,
+	0xfe, 0x8a, 0xd1, 0x2d, 0x5e, 0xc7, 0xbf, 0x04,
+	0x53, 0x5f, 0x3b, 0x36, 0xd4, 0x25, 0x5c, 0x34,
+	0x7a, 0x8d, 0xd5, 0x05, 0xce, 0x72, 0xca, 0xef,
+	0x7a, 0x4b, 0xbc, 0xb0, 0x10, 0x5c, 0x96, 0x42,
+	0x3a, 0x00, 0x98, 0xcd, 0x15, 0xe8, 0xb7, 0x53
+};
+static const u8 dec_output007[] __initconst = {
+	0x9b, 0x18, 0xdb, 0xdd, 0x9a, 0x0f, 0x3e, 0xa5,
+	0x15, 0x17, 0xde, 0xdf, 0x08, 0x9d, 0x65, 0x0a,
+	0x67, 0x30, 0x12, 0xe2, 0x34, 0x77, 0x4b, 0xc1,
+	0xd9, 0xc6, 0x1f, 0xab, 0xc6, 0x18, 0x50, 0x17,
+	0xa7, 0x9d, 0x3c, 0xa6, 0xc5, 0x35, 0x8c, 0x1c,
+	0xc0, 0xa1, 0x7c, 0x9f, 0x03, 0x89, 0xca, 0xe1,
+	0xe6, 0xe9, 0xd4, 0xd3, 0x88, 0xdb, 0xb4, 0x51,
+	0x9d, 0xec, 0xb4, 0xfc, 0x52, 0xee, 0x6d, 0xf1,
+	0x75, 0x42, 0xc6, 0xfd, 0xbd, 0x7a, 0x8e, 0x86,
+	0xfc, 0x44, 0xb3, 0x4f, 0xf3, 0xea, 0x67, 0x5a,
+	0x41, 0x13, 0xba, 0xb0, 0xdc, 0xe1, 0xd3, 0x2a,
+	0x7c, 0x22, 0xb3, 0xca, 0xac, 0x6a, 0x37, 0x98,
+	0x3e, 0x1d, 0x40, 0x97, 0xf7, 0x9b, 0x1d, 0x36,
+	0x6b, 0xb3, 0x28, 0xbd, 0x60, 0x82, 0x47, 0x34,
+	0xaa, 0x2f, 0x7d, 0xe9, 0xa8, 0x70, 0x81, 0x57,
+	0xd4, 0xb9, 0x77, 0x0a, 0x9d, 0x29, 0xa7, 0x84,
+	0x52, 0x4f, 0xc2, 0x4a, 0x40, 0x3b, 0x3c, 0xd4,
+	0xc9, 0x2a, 0xdb, 0x4a, 0x53, 0xc4, 0xbe, 0x80,
+	0xe9, 0x51, 0x7f, 0x8f, 0xc7, 0xa2, 0xce, 0x82,
+	0x5c, 0x91, 0x1e, 0x74, 0xd9, 0xd0, 0xbd, 0xd5,
+	0xf3, 0xfd, 0xda, 0x4d, 0x25, 0xb4, 0xbb, 0x2d,
+	0xac, 0x2f, 0x3d, 0x71, 0x85, 0x7b, 0xcf, 0x3c,
+	0x7b, 0x3e, 0x0e, 0x22, 0x78, 0x0c, 0x29, 0xbf,
+	0xe4, 0xf4, 0x57, 0xb3, 0xcb, 0x49, 0xa0, 0xfc,
+	0x1e, 0x05, 0x4e, 0x16, 0xbc, 0xd5, 0xa8, 0xa3,
+	0xee, 0x05, 0x35, 0xc6, 0x7c, 0xab, 0x60, 0x14,
+	0x55, 0x1a, 0x8e, 0xc5, 0x88, 0x5d, 0xd5, 0x81,
+	0xc2, 0x81, 0xa5, 0xc4, 0x60, 0xdb, 0xaf, 0x77,
+	0x91, 0xe1, 0xce, 0xa2, 0x7e, 0x7f, 0x42, 0xe3,
+	0xb0, 0x13, 0x1c, 0x1f, 0x25, 0x60, 0x21, 0xe2,
+	0x40, 0x5f, 0x99, 0xb7, 0x73, 0xec, 0x9b, 0x2b,
+	0xf0, 0x65, 0x11, 0xc8, 0xd0, 0x0a, 0x9f, 0xd3
+};
+static const u8 dec_assoc007[] __initconst = { };
+static const u8 dec_nonce007[] __initconst = {
+	0xde, 0x7b, 0xef, 0xc3, 0x65, 0x1b, 0x68, 0xb0
+};
+static const u8 dec_key007[] __initconst = {
+	0x8d, 0xb8, 0x91, 0x48, 0xf0, 0xe7, 0x0a, 0xbd,
+	0xf9, 0x3f, 0xcd, 0xd9, 0xa0, 0x1e, 0x42, 0x4c,
+	0xe7, 0xde, 0x25, 0x3d, 0xa3, 0xd7, 0x05, 0x80,
+	0x8d, 0xf2, 0x82, 0xac, 0x44, 0x16, 0x51, 0x01
+};
+
+static const u8 dec_input008[] __initconst = {
+	0x14, 0xf6, 0x41, 0x37, 0xa6, 0xd4, 0x27, 0xcd,
+	0xdb, 0x06, 0x3e, 0x9a, 0x4e, 0xab, 0xd5, 0xb1,
+	0x1e, 0x6b, 0xd2, 0xbc, 0x11, 0xf4, 0x28, 0x93,
+	0x63, 0x54, 0xef, 0xbb, 0x5e, 0x1d, 0x3a, 0x1d,
+	0x37, 0x3c, 0x0a, 0x6c, 0x1e, 0xc2, 0xd1, 0x2c,
+	0xb5, 0xa3, 0xb5, 0x7b, 0xb8, 0x8f, 0x25, 0xa6,
+	0x1b, 0x61, 0x1c, 0xec, 0x28, 0x58, 0x26, 0xa4,
+	0xa8, 0x33, 0x28, 0x25, 0x5c, 0x45, 0x05, 0xe5,
+	0x6c, 0x99, 0xe5, 0x45, 0xc4, 0xa2, 0x03, 0x84,
+	0x03, 0x73, 0x1e, 0x8c, 0x49, 0xac, 0x20, 0xdd,
+	0x8d, 0xb3, 0xc4, 0xf5, 0xe7, 0x4f, 0xf1, 0xed,
+	0xa1, 0x98, 0xde, 0xa4, 0x96, 0xdd, 0x2f, 0xab,
+	0xab, 0x97, 0xcf, 0x3e, 0xd2, 0x9e, 0xb8, 0x13,
+	0x07, 0x28, 0x29, 0x19, 0xaf, 0xfd, 0xf2, 0x49,
+	0x43, 0xea, 0x49, 0x26, 0x91, 0xc1, 0x07, 0xd6,
+	0xbb, 0x81, 0x75, 0x35, 0x0d, 0x24, 0x7f, 0xc8,
+	0xda, 0xd4, 0xb7, 0xeb, 0xe8, 0x5c, 0x09, 0xa2,
+	0x2f, 0xdc, 0x28, 0x7d, 0x3a, 0x03, 0xfa, 0x94,
+	0xb5, 0x1d, 0x17, 0x99, 0x36, 0xc3, 0x1c, 0x18,
+	0x34, 0xe3, 0x9f, 0xf5, 0x55, 0x7c, 0xb0, 0x60,
+	0x9d, 0xff, 0xac, 0xd4, 0x61, 0xf2, 0xad, 0xf8,
+	0xce, 0xc7, 0xbe, 0x5c, 0xd2, 0x95, 0xa8, 0x4b,
+	0x77, 0x13, 0x19, 0x59, 0x26, 0xc9, 0xb7, 0x8f,
+	0x6a, 0xcb, 0x2d, 0x37, 0x91, 0xea, 0x92, 0x9c,
+	0x94, 0x5b, 0xda, 0x0b, 0xce, 0xfe, 0x30, 0x20,
+	0xf8, 0x51, 0xad, 0xf2, 0xbe, 0xe7, 0xc7, 0xff,
+	0xb3, 0x33, 0x91, 0x6a, 0xc9, 0x1a, 0x41, 0xc9,
+	0x0f, 0xf3, 0x10, 0x0e, 0xfd, 0x53, 0xff, 0x6c,
+	0x16, 0x52, 0xd9, 0xf3, 0xf7, 0x98, 0x2e, 0xc9,
+	0x07, 0x31, 0x2c, 0x0c, 0x72, 0xd7, 0xc5, 0xc6,
+	0x08, 0x2a, 0x7b, 0xda, 0xbd, 0x7e, 0x02, 0xea,
+	0x1a, 0xbb, 0xf2, 0x04, 0x27, 0x61, 0x28, 0x8e,
+	0xf5, 0x04, 0x03, 0x1f, 0x4c, 0x07, 0x55, 0x82,
+	0xec, 0x1e, 0xd7, 0x8b, 0x2f, 0x65, 0x56, 0xd1,
+	0xd9, 0x1e, 0x3c, 0xe9, 0x1f, 0x5e, 0x98, 0x70,
+	0x38, 0x4a, 0x8c, 0x49, 0xc5, 0x43, 0xa0, 0xa1,
+	0x8b, 0x74, 0x9d, 0x4c, 0x62, 0x0d, 0x10, 0x0c,
+	0xf4, 0x6c, 0x8f, 0xe0, 0xaa, 0x9a, 0x8d, 0xb7,
+	0xe0, 0xbe, 0x4c, 0x87, 0xf1, 0x98, 0x2f, 0xcc,
+	0xed, 0xc0, 0x52, 0x29, 0xdc, 0x83, 0xf8, 0xfc,
+	0x2c, 0x0e, 0xa8, 0x51, 0x4d, 0x80, 0x0d, 0xa3,
+	0xfe, 0xd8, 0x37, 0xe7, 0x41, 0x24, 0xfc, 0xfb,
+	0x75, 0xe3, 0x71, 0x7b, 0x57, 0x45, 0xf5, 0x97,
+	0x73, 0x65, 0x63, 0x14, 0x74, 0xb8, 0x82, 0x9f,
+	0xf8, 0x60, 0x2f, 0x8a, 0xf2, 0x4e, 0xf1, 0x39,
+	0xda, 0x33, 0x91, 0xf8, 0x36, 0xe0, 0x8d, 0x3f,
+	0x1f, 0x3b, 0x56, 0xdc, 0xa0, 0x8f, 0x3c, 0x9d,
+	0x71, 0x52, 0xa7, 0xb8, 0xc0, 0xa5, 0xc6, 0xa2,
+	0x73, 0xda, 0xf4, 0x4b, 0x74, 0x5b, 0x00, 0x3d,
+	0x99, 0xd7, 0x96, 0xba, 0xe6, 0xe1, 0xa6, 0x96,
+	0x38, 0xad, 0xb3, 0xc0, 0xd2, 0xba, 0x91, 0x6b,
+	0xf9, 0x19, 0xdd, 0x3b, 0xbe, 0xbe, 0x9c, 0x20,
+	0x50, 0xba, 0xa1, 0xd0, 0xce, 0x11, 0xbd, 0x95,
+	0xd8, 0xd1, 0xdd, 0x33, 0x85, 0x74, 0xdc, 0xdb,
+	0x66, 0x76, 0x44, 0xdc, 0x03, 0x74, 0x48, 0x35,
+	0x98, 0xb1, 0x18, 0x47, 0x94, 0x7d, 0xff, 0x62,
+	0xe4, 0x58, 0x78, 0xab, 0xed, 0x95, 0x36, 0xd9,
+	0x84, 0x91, 0x82, 0x64, 0x41, 0xbb, 0x58, 0xe6,
+	0x1c, 0x20, 0x6d, 0x15, 0x6b, 0x13, 0x96, 0xe8,
+	0x35, 0x7f, 0xdc, 0x40, 0x2c, 0xe9, 0xbc, 0x8a,
+	0x4f, 0x92, 0xec, 0x06, 0x2d, 0x50, 0xdf, 0x93,
+	0x5d, 0x65, 0x5a, 0xa8, 0xfc, 0x20, 0x50, 0x14,
+	0xa9, 0x8a, 0x7e, 0x1d, 0x08, 0x1f, 0xe2, 0x99,
+	0xd0, 0xbe, 0xfb, 0x3a, 0x21, 0x9d, 0xad, 0x86,
+	0x54, 0xfd, 0x0d, 0x98, 0x1c, 0x5a, 0x6f, 0x1f,
+	0x9a, 0x40, 0xcd, 0xa2, 0xff, 0x6a, 0xf1, 0x54
+};
+static const u8 dec_output008[] __initconst = {
+	0xc3, 0x09, 0x94, 0x62, 0xe6, 0x46, 0x2e, 0x10,
+	0xbe, 0x00, 0xe4, 0xfc, 0xf3, 0x40, 0xa3, 0xe2,
+	0x0f, 0xc2, 0x8b, 0x28, 0xdc, 0xba, 0xb4, 0x3c,
+	0xe4, 0x21, 0x58, 0x61, 0xcd, 0x8b, 0xcd, 0xfb,
+	0xac, 0x94, 0xa1, 0x45, 0xf5, 0x1c, 0xe1, 0x12,
+	0xe0, 0x3b, 0x67, 0x21, 0x54, 0x5e, 0x8c, 0xaa,
+	0xcf, 0xdb, 0xb4, 0x51, 0xd4, 0x13, 0xda, 0xe6,
+	0x83, 0x89, 0xb6, 0x92, 0xe9, 0x21, 0x76, 0xa4,
+	0x93, 0x7d, 0x0e, 0xfd, 0x96, 0x36, 0x03, 0x91,
+	0x43, 0x5c, 0x92, 0x49, 0x62, 0x61, 0x7b, 0xeb,
+	0x43, 0x89, 0xb8, 0x12, 0x20, 0x43, 0xd4, 0x47,
+	0x06, 0x84, 0xee, 0x47, 0xe9, 0x8a, 0x73, 0x15,
+	0x0f, 0x72, 0xcf, 0xed, 0xce, 0x96, 0xb2, 0x7f,
+	0x21, 0x45, 0x76, 0xeb, 0x26, 0x28, 0x83, 0x6a,
+	0xad, 0xaa, 0xa6, 0x81, 0xd8, 0x55, 0xb1, 0xa3,
+	0x85, 0xb3, 0x0c, 0xdf, 0xf1, 0x69, 0x2d, 0x97,
+	0x05, 0x2a, 0xbc, 0x7c, 0x7b, 0x25, 0xf8, 0x80,
+	0x9d, 0x39, 0x25, 0xf3, 0x62, 0xf0, 0x66, 0x5e,
+	0xf4, 0xa0, 0xcf, 0xd8, 0xfd, 0x4f, 0xb1, 0x1f,
+	0x60, 0x3a, 0x08, 0x47, 0xaf, 0xe1, 0xf6, 0x10,
+	0x77, 0x09, 0xa7, 0x27, 0x8f, 0x9a, 0x97, 0x5a,
+	0x26, 0xfa, 0xfe, 0x41, 0x32, 0x83, 0x10, 0xe0,
+	0x1d, 0xbf, 0x64, 0x0d, 0xf4, 0x1c, 0x32, 0x35,
+	0xe5, 0x1b, 0x36, 0xef, 0xd4, 0x4a, 0x93, 0x4d,
+	0x00, 0x7c, 0xec, 0x02, 0x07, 0x8b, 0x5d, 0x7d,
+	0x1b, 0x0e, 0xd1, 0xa6, 0xa5, 0x5d, 0x7d, 0x57,
+	0x88, 0xa8, 0xcc, 0x81, 0xb4, 0x86, 0x4e, 0xb4,
+	0x40, 0xe9, 0x1d, 0xc3, 0xb1, 0x24, 0x3e, 0x7f,
+	0xcc, 0x8a, 0x24, 0x9b, 0xdf, 0x6d, 0xf0, 0x39,
+	0x69, 0x3e, 0x4c, 0xc0, 0x96, 0xe4, 0x13, 0xda,
+	0x90, 0xda, 0xf4, 0x95, 0x66, 0x8b, 0x17, 0x17,
+	0xfe, 0x39, 0x43, 0x25, 0xaa, 0xda, 0xa0, 0x43,
+	0x3c, 0xb1, 0x41, 0x02, 0xa3, 0xf0, 0xa7, 0x19,
+	0x59, 0xbc, 0x1d, 0x7d, 0x6c, 0x6d, 0x91, 0x09,
+	0x5c, 0xb7, 0x5b, 0x01, 0xd1, 0x6f, 0x17, 0x21,
+	0x97, 0xbf, 0x89, 0x71, 0xa5, 0xb0, 0x6e, 0x07,
+	0x45, 0xfd, 0x9d, 0xea, 0x07, 0xf6, 0x7a, 0x9f,
+	0x10, 0x18, 0x22, 0x30, 0x73, 0xac, 0xd4, 0x6b,
+	0x72, 0x44, 0xed, 0xd9, 0x19, 0x9b, 0x2d, 0x4a,
+	0x41, 0xdd, 0xd1, 0x85, 0x5e, 0x37, 0x19, 0xed,
+	0xd2, 0x15, 0x8f, 0x5e, 0x91, 0xdb, 0x33, 0xf2,
+	0xe4, 0xdb, 0xff, 0x98, 0xfb, 0xa3, 0xb5, 0xca,
+	0x21, 0x69, 0x08, 0xe7, 0x8a, 0xdf, 0x90, 0xff,
+	0x3e, 0xe9, 0x20, 0x86, 0x3c, 0xe9, 0xfc, 0x0b,
+	0xfe, 0x5c, 0x61, 0xaa, 0x13, 0x92, 0x7f, 0x7b,
+	0xec, 0xe0, 0x6d, 0xa8, 0x23, 0x22, 0xf6, 0x6b,
+	0x77, 0xc4, 0xfe, 0x40, 0x07, 0x3b, 0xb6, 0xf6,
+	0x8e, 0x5f, 0xd4, 0xb9, 0xb7, 0x0f, 0x21, 0x04,
+	0xef, 0x83, 0x63, 0x91, 0x69, 0x40, 0xa3, 0x48,
+	0x5c, 0xd2, 0x60, 0xf9, 0x4f, 0x6c, 0x47, 0x8b,
+	0x3b, 0xb1, 0x9f, 0x8e, 0xee, 0x16, 0x8a, 0x13,
+	0xfc, 0x46, 0x17, 0xc3, 0xc3, 0x32, 0x56, 0xf8,
+	0x3c, 0x85, 0x3a, 0xb6, 0x3e, 0xaa, 0x89, 0x4f,
+	0xb3, 0xdf, 0x38, 0xfd, 0xf1, 0xe4, 0x3a, 0xc0,
+	0xe6, 0x58, 0xb5, 0x8f, 0xc5, 0x29, 0xa2, 0x92,
+	0x4a, 0xb6, 0xa0, 0x34, 0x7f, 0xab, 0xb5, 0x8a,
+	0x90, 0xa1, 0xdb, 0x4d, 0xca, 0xb6, 0x2c, 0x41,
+	0x3c, 0xf7, 0x2b, 0x21, 0xc3, 0xfd, 0xf4, 0x17,
+	0x5c, 0xb5, 0x33, 0x17, 0x68, 0x2b, 0x08, 0x30,
+	0xf3, 0xf7, 0x30, 0x3c, 0x96, 0xe6, 0x6a, 0x20,
+	0x97, 0xe7, 0x4d, 0x10, 0x5f, 0x47, 0x5f, 0x49,
+	0x96, 0x09, 0xf0, 0x27, 0x91, 0xc8, 0xf8, 0x5a,
+	0x2e, 0x79, 0xb5, 0xe2, 0xb8, 0xe8, 0xb9, 0x7b,
+	0xd5, 0x10, 0xcb, 0xff, 0x5d, 0x14, 0x73, 0xf3
+};
+static const u8 dec_assoc008[] __initconst = { };
+static const u8 dec_nonce008[] __initconst = {
+	0x0e, 0x0d, 0x57, 0xbb, 0x7b, 0x40, 0x54, 0x02
+};
+static const u8 dec_key008[] __initconst = {
+	0xf2, 0xaa, 0x4f, 0x99, 0xfd, 0x3e, 0xa8, 0x53,
+	0xc1, 0x44, 0xe9, 0x81, 0x18, 0xdc, 0xf5, 0xf0,
+	0x3e, 0x44, 0x15, 0x59, 0xe0, 0xc5, 0x44, 0x86,
+	0xc3, 0x91, 0xa8, 0x75, 0xc0, 0x12, 0x46, 0xba
+};
+
+static const u8 dec_input009[] __initconst = {
+	0xfd, 0x81, 0x8d, 0xd0, 0x3d, 0xb4, 0xd5, 0xdf,
+	0xd3, 0x42, 0x47, 0x5a, 0x6d, 0x19, 0x27, 0x66,
+	0x4b, 0x2e, 0x0c, 0x27, 0x9c, 0x96, 0x4c, 0x72,
+	0x02, 0xa3, 0x65, 0xc3, 0xb3, 0x6f, 0x2e, 0xbd,
+	0x63, 0x8a, 0x4a, 0x5d, 0x29, 0xa2, 0xd0, 0x28,
+	0x48, 0xc5, 0x3d, 0x98, 0xa3, 0xbc, 0xe0, 0xbe,
+	0x3b, 0x3f, 0xe6, 0x8a, 0xa4, 0x7f, 0x53, 0x06,
+	0xfa, 0x7f, 0x27, 0x76, 0x72, 0x31, 0xa1, 0xf5,
+	0xd6, 0x0c, 0x52, 0x47, 0xba, 0xcd, 0x4f, 0xd7,
+	0xeb, 0x05, 0x48, 0x0d, 0x7c, 0x35, 0x4a, 0x09,
+	0xc9, 0x76, 0x71, 0x02, 0xa3, 0xfb, 0xb7, 0x1a,
+	0x65, 0xb7, 0xed, 0x98, 0xc6, 0x30, 0x8a, 0x00,
+	0xae, 0xa1, 0x31, 0xe5, 0xb5, 0x9e, 0x6d, 0x62,
+	0xda, 0xda, 0x07, 0x0f, 0x38, 0x38, 0xd3, 0xcb,
+	0xc1, 0xb0, 0xad, 0xec, 0x72, 0xec, 0xb1, 0xa2,
+	0x7b, 0x59, 0xf3, 0x3d, 0x2b, 0xef, 0xcd, 0x28,
+	0x5b, 0x83, 0xcc, 0x18, 0x91, 0x88, 0xb0, 0x2e,
+	0xf9, 0x29, 0x31, 0x18, 0xf9, 0x4e, 0xe9, 0x0a,
+	0x91, 0x92, 0x9f, 0xae, 0x2d, 0xad, 0xf4, 0xe6,
+	0x1a, 0xe2, 0xa4, 0xee, 0x47, 0x15, 0xbf, 0x83,
+	0x6e, 0xd7, 0x72, 0x12, 0x3b, 0x2d, 0x24, 0xe9,
+	0xb2, 0x55, 0xcb, 0x3c, 0x10, 0xf0, 0x24, 0x8a,
+	0x4a, 0x02, 0xea, 0x90, 0x25, 0xf0, 0xb4, 0x79,
+	0x3a, 0xef, 0x6e, 0xf5, 0x52, 0xdf, 0xb0, 0x0a,
+	0xcd, 0x24, 0x1c, 0xd3, 0x2e, 0x22, 0x74, 0xea,
+	0x21, 0x6f, 0xe9, 0xbd, 0xc8, 0x3e, 0x36, 0x5b,
+	0x19, 0xf1, 0xca, 0x99, 0x0a, 0xb4, 0xa7, 0x52,
+	0x1a, 0x4e, 0xf2, 0xad, 0x8d, 0x56, 0x85, 0xbb,
+	0x64, 0x89, 0xba, 0x26, 0xf9, 0xc7, 0xe1, 0x89,
+	0x19, 0x22, 0x77, 0xc3, 0xa8, 0xfc, 0xff, 0xad,
+	0xfe, 0xb9, 0x48, 0xae, 0x12, 0x30, 0x9f, 0x19,
+	0xfb, 0x1b, 0xef, 0x14, 0x87, 0x8a, 0x78, 0x71,
+	0xf3, 0xf4, 0xb7, 0x00, 0x9c, 0x1d, 0xb5, 0x3d,
+	0x49, 0x00, 0x0c, 0x06, 0xd4, 0x50, 0xf9, 0x54,
+	0x45, 0xb2, 0x5b, 0x43, 0xdb, 0x6d, 0xcf, 0x1a,
+	0xe9, 0x7a, 0x7a, 0xcf, 0xfc, 0x8a, 0x4e, 0x4d,
+	0x0b, 0x07, 0x63, 0x28, 0xd8, 0xe7, 0x08, 0x95,
+	0xdf, 0xa6, 0x72, 0x93, 0x2e, 0xbb, 0xa0, 0x42,
+	0x89, 0x16, 0xf1, 0xd9, 0x0c, 0xf9, 0xa1, 0x16,
+	0xfd, 0xd9, 0x03, 0xb4, 0x3b, 0x8a, 0xf5, 0xf6,
+	0xe7, 0x6b, 0x2e, 0x8e, 0x4c, 0x3d, 0xe2, 0xaf,
+	0x08, 0x45, 0x03, 0xff, 0x09, 0xb6, 0xeb, 0x2d,
+	0xc6, 0x1b, 0x88, 0x94, 0xac, 0x3e, 0xf1, 0x9f,
+	0x0e, 0x0e, 0x2b, 0xd5, 0x00, 0x4d, 0x3f, 0x3b,
+	0x53, 0xae, 0xaf, 0x1c, 0x33, 0x5f, 0x55, 0x6e,
+	0x8d, 0xaf, 0x05, 0x7a, 0x10, 0x34, 0xc9, 0xf4,
+	0x66, 0xcb, 0x62, 0x12, 0xa6, 0xee, 0xe8, 0x1c,
+	0x5d, 0x12, 0x86, 0xdb, 0x6f, 0x1c, 0x33, 0xc4,
+	0x1c, 0xda, 0x82, 0x2d, 0x3b, 0x59, 0xfe, 0xb1,
+	0xa4, 0x59, 0x41, 0x86, 0xd0, 0xef, 0xae, 0xfb,
+	0xda, 0x6d, 0x11, 0xb8, 0xca, 0xe9, 0x6e, 0xff,
+	0xf7, 0xa9, 0xd9, 0x70, 0x30, 0xfc, 0x53, 0xe2,
+	0xd7, 0xa2, 0x4e, 0xc7, 0x91, 0xd9, 0x07, 0x06,
+	0xaa, 0xdd, 0xb0, 0x59, 0x28, 0x1d, 0x00, 0x66,
+	0xc5, 0x54, 0xc2, 0xfc, 0x06, 0xda, 0x05, 0x90,
+	0x52, 0x1d, 0x37, 0x66, 0xee, 0xf0, 0xb2, 0x55,
+	0x8a, 0x5d, 0xd2, 0x38, 0x86, 0x94, 0x9b, 0xfc,
+	0x10, 0x4c, 0xa1, 0xb9, 0x64, 0x3e, 0x44, 0xb8,
+	0x5f, 0xb0, 0x0c, 0xec, 0xe0, 0xc9, 0xe5, 0x62,
+	0x75, 0x3f, 0x09, 0xd5, 0xf5, 0xd9, 0x26, 0xba,
+	0x9e, 0xd2, 0xf4, 0xb9, 0x48, 0x0a, 0xbc, 0xa2,
+	0xd6, 0x7c, 0x36, 0x11, 0x7d, 0x26, 0x81, 0x89,
+	0xcf, 0xa4, 0xad, 0x73, 0x0e, 0xee, 0xcc, 0x06,
+	0xa9, 0xdb, 0xb1, 0xfd, 0xfb, 0x09, 0x7f, 0x90,
+	0x42, 0x37, 0x2f, 0xe1, 0x9c, 0x0f, 0x6f, 0xcf,
+	0x43, 0xb5, 0xd9, 0x90, 0xe1, 0x85, 0xf5, 0xa8,
+	0xae
+};
+static const u8 dec_output009[] __initconst = {
+	0xe6, 0xc3, 0xdb, 0x63, 0x55, 0x15, 0xe3, 0x5b,
+	0xb7, 0x4b, 0x27, 0x8b, 0x5a, 0xdd, 0xc2, 0xe8,
+	0x3a, 0x6b, 0xd7, 0x81, 0x96, 0x35, 0x97, 0xca,
+	0xd7, 0x68, 0xe8, 0xef, 0xce, 0xab, 0xda, 0x09,
+	0x6e, 0xd6, 0x8e, 0xcb, 0x55, 0xb5, 0xe1, 0xe5,
+	0x57, 0xfd, 0xc4, 0xe3, 0xe0, 0x18, 0x4f, 0x85,
+	0xf5, 0x3f, 0x7e, 0x4b, 0x88, 0xc9, 0x52, 0x44,
+	0x0f, 0xea, 0xaf, 0x1f, 0x71, 0x48, 0x9f, 0x97,
+	0x6d, 0xb9, 0x6f, 0x00, 0xa6, 0xde, 0x2b, 0x77,
+	0x8b, 0x15, 0xad, 0x10, 0xa0, 0x2b, 0x7b, 0x41,
+	0x90, 0x03, 0x2d, 0x69, 0xae, 0xcc, 0x77, 0x7c,
+	0xa5, 0x9d, 0x29, 0x22, 0xc2, 0xea, 0xb4, 0x00,
+	0x1a, 0xd2, 0x7a, 0x98, 0x8a, 0xf9, 0xf7, 0x82,
+	0xb0, 0xab, 0xd8, 0xa6, 0x94, 0x8d, 0x58, 0x2f,
+	0x01, 0x9e, 0x00, 0x20, 0xfc, 0x49, 0xdc, 0x0e,
+	0x03, 0xe8, 0x45, 0x10, 0xd6, 0xa8, 0xda, 0x55,
+	0x10, 0x9a, 0xdf, 0x67, 0x22, 0x8b, 0x43, 0xab,
+	0x00, 0xbb, 0x02, 0xc8, 0xdd, 0x7b, 0x97, 0x17,
+	0xd7, 0x1d, 0x9e, 0x02, 0x5e, 0x48, 0xde, 0x8e,
+	0xcf, 0x99, 0x07, 0x95, 0x92, 0x3c, 0x5f, 0x9f,
+	0xc5, 0x8a, 0xc0, 0x23, 0xaa, 0xd5, 0x8c, 0x82,
+	0x6e, 0x16, 0x92, 0xb1, 0x12, 0x17, 0x07, 0xc3,
+	0xfb, 0x36, 0xf5, 0x6c, 0x35, 0xd6, 0x06, 0x1f,
+	0x9f, 0xa7, 0x94, 0xa2, 0x38, 0x63, 0x9c, 0xb0,
+	0x71, 0xb3, 0xa5, 0xd2, 0xd8, 0xba, 0x9f, 0x08,
+	0x01, 0xb3, 0xff, 0x04, 0x97, 0x73, 0x45, 0x1b,
+	0xd5, 0xa9, 0x9c, 0x80, 0xaf, 0x04, 0x9a, 0x85,
+	0xdb, 0x32, 0x5b, 0x5d, 0x1a, 0xc1, 0x36, 0x28,
+	0x10, 0x79, 0xf1, 0x3c, 0xbf, 0x1a, 0x41, 0x5c,
+	0x4e, 0xdf, 0xb2, 0x7c, 0x79, 0x3b, 0x7a, 0x62,
+	0x3d, 0x4b, 0xc9, 0x9b, 0x2a, 0x2e, 0x7c, 0xa2,
+	0xb1, 0x11, 0x98, 0xa7, 0x34, 0x1a, 0x00, 0xf3,
+	0xd1, 0xbc, 0x18, 0x22, 0xba, 0x02, 0x56, 0x62,
+	0x31, 0x10, 0x11, 0x6d, 0xe0, 0x54, 0x9d, 0x40,
+	0x1f, 0x26, 0x80, 0x41, 0xca, 0x3f, 0x68, 0x0f,
+	0x32, 0x1d, 0x0a, 0x8e, 0x79, 0xd8, 0xa4, 0x1b,
+	0x29, 0x1c, 0x90, 0x8e, 0xc5, 0xe3, 0xb4, 0x91,
+	0x37, 0x9a, 0x97, 0x86, 0x99, 0xd5, 0x09, 0xc5,
+	0xbb, 0xa3, 0x3f, 0x21, 0x29, 0x82, 0x14, 0x5c,
+	0xab, 0x25, 0xfb, 0xf2, 0x4f, 0x58, 0x26, 0xd4,
+	0x83, 0xaa, 0x66, 0x89, 0x67, 0x7e, 0xc0, 0x49,
+	0xe1, 0x11, 0x10, 0x7f, 0x7a, 0xda, 0x29, 0x04,
+	0xff, 0xf0, 0xcb, 0x09, 0x7c, 0x9d, 0xfa, 0x03,
+	0x6f, 0x81, 0x09, 0x31, 0x60, 0xfb, 0x08, 0xfa,
+	0x74, 0xd3, 0x64, 0x44, 0x7c, 0x55, 0x85, 0xec,
+	0x9c, 0x6e, 0x25, 0xb7, 0x6c, 0xc5, 0x37, 0xb6,
+	0x83, 0x87, 0x72, 0x95, 0x8b, 0x9d, 0xe1, 0x69,
+	0x5c, 0x31, 0x95, 0x42, 0xa6, 0x2c, 0xd1, 0x36,
+	0x47, 0x1f, 0xec, 0x54, 0xab, 0xa2, 0x1c, 0xd8,
+	0x00, 0xcc, 0xbc, 0x0d, 0x65, 0xe2, 0x67, 0xbf,
+	0xbc, 0xea, 0xee, 0x9e, 0xe4, 0x36, 0x95, 0xbe,
+	0x73, 0xd9, 0xa6, 0xd9, 0x0f, 0xa0, 0xcc, 0x82,
+	0x76, 0x26, 0xad, 0x5b, 0x58, 0x6c, 0x4e, 0xab,
+	0x29, 0x64, 0xd3, 0xd9, 0xa9, 0x08, 0x8c, 0x1d,
+	0xa1, 0x4f, 0x80, 0xd8, 0x3f, 0x94, 0xfb, 0xd3,
+	0x7b, 0xfc, 0xd1, 0x2b, 0xc3, 0x21, 0xeb, 0xe5,
+	0x1c, 0x84, 0x23, 0x7f, 0x4b, 0xfa, 0xdb, 0x34,
+	0x18, 0xa2, 0xc2, 0xe5, 0x13, 0xfe, 0x6c, 0x49,
+	0x81, 0xd2, 0x73, 0xe7, 0xe2, 0xd7, 0xe4, 0x4f,
+	0x4b, 0x08, 0x6e, 0xb1, 0x12, 0x22, 0x10, 0x9d,
+	0xac, 0x51, 0x1e, 0x17, 0xd9, 0x8a, 0x0b, 0x42,
+	0x88, 0x16, 0x81, 0x37, 0x7c, 0x6a, 0xf7, 0xef,
+	0x2d, 0xe3, 0xd9, 0xf8, 0x5f, 0xe0, 0x53, 0x27,
+	0x74, 0xb9, 0xe2, 0xd6, 0x1c, 0x80, 0x2c, 0x52,
+	0x65
+};
+static const u8 dec_assoc009[] __initconst = {
+	0x5a, 0x27, 0xff, 0xeb, 0xdf, 0x84, 0xb2, 0x9e,
+	0xef
+};
+static const u8 dec_nonce009[] __initconst = {
+	0xef, 0x2d, 0x63, 0xee, 0x6b, 0x80, 0x8b, 0x78
+};
+static const u8 dec_key009[] __initconst = {
+	0xea, 0xbc, 0x56, 0x99, 0xe3, 0x50, 0xff, 0xc5,
+	0xcc, 0x1a, 0xd7, 0xc1, 0x57, 0x72, 0xea, 0x86,
+	0x5b, 0x89, 0x88, 0x61, 0x3d, 0x2f, 0x9b, 0xb2,
+	0xe7, 0x9c, 0xec, 0x74, 0x6e, 0x3e, 0xf4, 0x3b
+};
+
+static const u8 dec_input010[] __initconst = {
+	0xe5, 0x26, 0xa4, 0x3d, 0xbd, 0x33, 0xd0, 0x4b,
+	0x6f, 0x05, 0xa7, 0x6e, 0x12, 0x7a, 0xd2, 0x74,
+	0xa6, 0xdd, 0xbd, 0x95, 0xeb, 0xf9, 0xa4, 0xf1,
+	0x59, 0x93, 0x91, 0x70, 0xd9, 0xfe, 0x9a, 0xcd,
+	0x53, 0x1f, 0x3a, 0xab, 0xa6, 0x7c, 0x9f, 0xa6,
+	0x9e, 0xbd, 0x99, 0xd9, 0xb5, 0x97, 0x44, 0xd5,
+	0x14, 0x48, 0x4d, 0x9d, 0xc0, 0xd0, 0x05, 0x96,
+	0xeb, 0x4c, 0x78, 0x55, 0x09, 0x08, 0x01, 0x02,
+	0x30, 0x90, 0x7b, 0x96, 0x7a, 0x7b, 0x5f, 0x30,
+	0x41, 0x24, 0xce, 0x68, 0x61, 0x49, 0x86, 0x57,
+	0x82, 0xdd, 0x53, 0x1c, 0x51, 0x28, 0x2b, 0x53,
+	0x6e, 0x2d, 0xc2, 0x20, 0x4c, 0xdd, 0x8f, 0x65,
+	0x10, 0x20, 0x50, 0xdd, 0x9d, 0x50, 0xe5, 0x71,
+	0x40, 0x53, 0x69, 0xfc, 0x77, 0x48, 0x11, 0xb9,
+	0xde, 0xa4, 0x8d, 0x58, 0xe4, 0xa6, 0x1a, 0x18,
+	0x47, 0x81, 0x7e, 0xfc, 0xdd, 0xf6, 0xef, 0xce,
+	0x2f, 0x43, 0x68, 0xd6, 0x06, 0xe2, 0x74, 0x6a,
+	0xad, 0x90, 0xf5, 0x37, 0xf3, 0x3d, 0x82, 0x69,
+	0x40, 0xe9, 0x6b, 0xa7, 0x3d, 0xa8, 0x1e, 0xd2,
+	0x02, 0x7c, 0xb7, 0x9b, 0xe4, 0xda, 0x8f, 0x95,
+	0x06, 0xc5, 0xdf, 0x73, 0xa3, 0x20, 0x9a, 0x49,
+	0xde, 0x9c, 0xbc, 0xee, 0x14, 0x3f, 0x81, 0x5e,
+	0xf8, 0x3b, 0x59, 0x3c, 0xe1, 0x68, 0x12, 0x5a,
+	0x3a, 0x76, 0x3a, 0x3f, 0xf7, 0x87, 0x33, 0x0a,
+	0x01, 0xb8, 0xd4, 0xed, 0xb6, 0xbe, 0x94, 0x5e,
+	0x70, 0x40, 0x56, 0x67, 0x1f, 0x50, 0x44, 0x19,
+	0xce, 0x82, 0x70, 0x10, 0x87, 0x13, 0x20, 0x0b,
+	0x4c, 0x5a, 0xb6, 0xf6, 0xa7, 0xae, 0x81, 0x75,
+	0x01, 0x81, 0xe6, 0x4b, 0x57, 0x7c, 0xdd, 0x6d,
+	0xf8, 0x1c, 0x29, 0x32, 0xf7, 0xda, 0x3c, 0x2d,
+	0xf8, 0x9b, 0x25, 0x6e, 0x00, 0xb4, 0xf7, 0x2f,
+	0xf7, 0x04, 0xf7, 0xa1, 0x56, 0xac, 0x4f, 0x1a,
+	0x64, 0xb8, 0x47, 0x55, 0x18, 0x7b, 0x07, 0x4d,
+	0xbd, 0x47, 0x24, 0x80, 0x5d, 0xa2, 0x70, 0xc5,
+	0xdd, 0x8e, 0x82, 0xd4, 0xeb, 0xec, 0xb2, 0x0c,
+	0x39, 0xd2, 0x97, 0xc1, 0xcb, 0xeb, 0xf4, 0x77,
+	0x59, 0xb4, 0x87, 0xef, 0xcb, 0x43, 0x2d, 0x46,
+	0x54, 0xd1, 0xa7, 0xd7, 0x15, 0x99, 0x0a, 0x43,
+	0xa1, 0xe0, 0x99, 0x33, 0x71, 0xc1, 0xed, 0xfe,
+	0x72, 0x46, 0x33, 0x8e, 0x91, 0x08, 0x9f, 0xc8,
+	0x2e, 0xca, 0xfa, 0xdc, 0x59, 0xd5, 0xc3, 0x76,
+	0x84, 0x9f, 0xa3, 0x37, 0x68, 0xc3, 0xf0, 0x47,
+	0x2c, 0x68, 0xdb, 0x5e, 0xc3, 0x49, 0x4c, 0xe8,
+	0x92, 0x85, 0xe2, 0x23, 0xd3, 0x3f, 0xad, 0x32,
+	0xe5, 0x2b, 0x82, 0xd7, 0x8f, 0x99, 0x0a, 0x59,
+	0x5c, 0x45, 0xd9, 0xb4, 0x51, 0x52, 0xc2, 0xae,
+	0xbf, 0x80, 0xcf, 0xc9, 0xc9, 0x51, 0x24, 0x2a,
+	0x3b, 0x3a, 0x4d, 0xae, 0xeb, 0xbd, 0x22, 0xc3,
+	0x0e, 0x0f, 0x59, 0x25, 0x92, 0x17, 0xe9, 0x74,
+	0xc7, 0x8b, 0x70, 0x70, 0x36, 0x55, 0x95, 0x75,
+	0x4b, 0xad, 0x61, 0x2b, 0x09, 0xbc, 0x82, 0xf2,
+	0x6e, 0x94, 0x43, 0xae, 0xc3, 0xd5, 0xcd, 0x8e,
+	0xfe, 0x5b, 0x9a, 0x88, 0x43, 0x01, 0x75, 0xb2,
+	0x23, 0x09, 0xf7, 0x89, 0x83, 0xe7, 0xfa, 0xf9,
+	0xb4, 0x9b, 0xf8, 0xef, 0xbd, 0x1c, 0x92, 0xc1,
+	0xda, 0x7e, 0xfe, 0x05, 0xba, 0x5a, 0xcd, 0x07,
+	0x6a, 0x78, 0x9e, 0x5d, 0xfb, 0x11, 0x2f, 0x79,
+	0x38, 0xb6, 0xc2, 0x5b, 0x6b, 0x51, 0xb4, 0x71,
+	0xdd, 0xf7, 0x2a, 0xe4, 0xf4, 0x72, 0x76, 0xad,
+	0xc2, 0xdd, 0x64, 0x5d, 0x79, 0xb6, 0xf5, 0x7a,
+	0x77, 0x20, 0x05, 0x3d, 0x30, 0x06, 0xd4, 0x4c,
+	0x0a, 0x2c, 0x98, 0x5a, 0xb9, 0xd4, 0x98, 0xa9,
+	0x3f, 0xc6, 0x12, 0xea, 0x3b, 0x4b, 0xc5, 0x79,
+	0x64, 0x63, 0x6b, 0x09, 0x54, 0x3b, 0x14, 0x27,
+	0xba, 0x99, 0x80, 0xc8, 0x72, 0xa8, 0x12, 0x90,
+	0x29, 0xba, 0x40, 0x54, 0x97, 0x2b, 0x7b, 0xfe,
+	0xeb, 0xcd, 0x01, 0x05, 0x44, 0x72, 0xdb, 0x99,
+	0xe4, 0x61, 0xc9, 0x69, 0xd6, 0xb9, 0x28, 0xd1,
+	0x05, 0x3e, 0xf9, 0x0b, 0x49, 0x0a, 0x49, 0xe9,
+	0x8d, 0x0e, 0xa7, 0x4a, 0x0f, 0xaf, 0x32, 0xd0,
+	0xe0, 0xb2, 0x3a, 0x55, 0x58, 0xfe, 0x5c, 0x28,
+	0x70, 0x51, 0x23, 0xb0, 0x7b, 0x6a, 0x5f, 0x1e,
+	0xb8, 0x17, 0xd7, 0x94, 0x15, 0x8f, 0xee, 0x20,
+	0xc7, 0x42, 0x25, 0x3e, 0x9a, 0x14, 0xd7, 0x60,
+	0x72, 0x39, 0x47, 0x48, 0xa9, 0xfe, 0xdd, 0x47,
+	0x0a, 0xb1, 0xe6, 0x60, 0x28, 0x8c, 0x11, 0x68,
+	0xe1, 0xff, 0xd7, 0xce, 0xc8, 0xbe, 0xb3, 0xfe,
+	0x27, 0x30, 0x09, 0x70, 0xd7, 0xfa, 0x02, 0x33,
+	0x3a, 0x61, 0x2e, 0xc7, 0xff, 0xa4, 0x2a, 0xa8,
+	0x6e, 0xb4, 0x79, 0x35, 0x6d, 0x4c, 0x1e, 0x38,
+	0xf8, 0xee, 0xd4, 0x84, 0x4e, 0x6e, 0x28, 0xa7,
+	0xce, 0xc8, 0xc1, 0xcf, 0x80, 0x05, 0xf3, 0x04,
+	0xef, 0xc8, 0x18, 0x28, 0x2e, 0x8d, 0x5e, 0x0c,
+	0xdf, 0xb8, 0x5f, 0x96, 0xe8, 0xc6, 0x9c, 0x2f,
+	0xe5, 0xa6, 0x44, 0xd7, 0xe7, 0x99, 0x44, 0x0c,
+	0xec, 0xd7, 0x05, 0x60, 0x97, 0xbb, 0x74, 0x77,
+	0x58, 0xd5, 0xbb, 0x48, 0xde, 0x5a, 0xb2, 0x54,
+	0x7f, 0x0e, 0x46, 0x70, 0x6a, 0x6f, 0x78, 0xa5,
+	0x08, 0x89, 0x05, 0x4e, 0x7e, 0xa0, 0x69, 0xb4,
+	0x40, 0x60, 0x55, 0x77, 0x75, 0x9b, 0x19, 0xf2,
+	0xd5, 0x13, 0x80, 0x77, 0xf9, 0x4b, 0x3f, 0x1e,
+	0xee, 0xe6, 0x76, 0x84, 0x7b, 0x8c, 0xe5, 0x27,
+	0xa8, 0x0a, 0x91, 0x01, 0x68, 0x71, 0x8a, 0x3f,
+	0x06, 0xab, 0xf6, 0xa9, 0xa5, 0xe6, 0x72, 0x92,
+	0xe4, 0x67, 0xe2, 0xa2, 0x46, 0x35, 0x84, 0x55,
+	0x7d, 0xca, 0xa8, 0x85, 0xd0, 0xf1, 0x3f, 0xbe,
+	0xd7, 0x34, 0x64, 0xfc, 0xae, 0xe3, 0xe4, 0x04,
+	0x9f, 0x66, 0x02, 0xb9, 0x88, 0x10, 0xd9, 0xc4,
+	0x4c, 0x31, 0x43, 0x7a, 0x93, 0xe2, 0x9b, 0x56,
+	0x43, 0x84, 0xdc, 0xdc, 0xde, 0x1d, 0xa4, 0x02,
+	0x0e, 0xc2, 0xef, 0xc3, 0xf8, 0x78, 0xd1, 0xb2,
+	0x6b, 0x63, 0x18, 0xc9, 0xa9, 0xe5, 0x72, 0xd8,
+	0xf3, 0xb9, 0xd1, 0x8a, 0xc7, 0x1a, 0x02, 0x27,
+	0x20, 0x77, 0x10, 0xe5, 0xc8, 0xd4, 0x4a, 0x47,
+	0xe5, 0xdf, 0x5f, 0x01, 0xaa, 0xb0, 0xd4, 0x10,
+	0xbb, 0x69, 0xe3, 0x36, 0xc8, 0xe1, 0x3d, 0x43,
+	0xfb, 0x86, 0xcd, 0xcc, 0xbf, 0xf4, 0x88, 0xe0,
+	0x20, 0xca, 0xb7, 0x1b, 0xf1, 0x2f, 0x5c, 0xee,
+	0xd4, 0xd3, 0xa3, 0xcc, 0xa4, 0x1e, 0x1c, 0x47,
+	0xfb, 0xbf, 0xfc, 0xa2, 0x41, 0x55, 0x9d, 0xf6,
+	0x5a, 0x5e, 0x65, 0x32, 0x34, 0x7b, 0x52, 0x8d,
+	0xd5, 0xd0, 0x20, 0x60, 0x03, 0xab, 0x3f, 0x8c,
+	0xd4, 0x21, 0xea, 0x2a, 0xd9, 0xc4, 0xd0, 0xd3,
+	0x65, 0xd8, 0x7a, 0x13, 0x28, 0x62, 0x32, 0x4b,
+	0x2c, 0x87, 0x93, 0xa8, 0xb4, 0x52, 0x45, 0x09,
+	0x44, 0xec, 0xec, 0xc3, 0x17, 0xdb, 0x9a, 0x4d,
+	0x5c, 0xa9, 0x11, 0xd4, 0x7d, 0xaf, 0x9e, 0xf1,
+	0x2d, 0xb2, 0x66, 0xc5, 0x1d, 0xed, 0xb7, 0xcd,
+	0x0b, 0x25, 0x5e, 0x30, 0x47, 0x3f, 0x40, 0xf4,
+	0xa1, 0xa0, 0x00, 0x94, 0x10, 0xc5, 0x6a, 0x63,
+	0x1a, 0xd5, 0x88, 0x92, 0x8e, 0x82, 0x39, 0x87,
+	0x3c, 0x78, 0x65, 0x58, 0x42, 0x75, 0x5b, 0xdd,
+	0x77, 0x3e, 0x09, 0x4e, 0x76, 0x5b, 0xe6, 0x0e,
+	0x4d, 0x38, 0xb2, 0xc0, 0xb8, 0x95, 0x01, 0x7a,
+	0x10, 0xe0, 0xfb, 0x07, 0xf2, 0xab, 0x2d, 0x8c,
+	0x32, 0xed, 0x2b, 0xc0, 0x46, 0xc2, 0xf5, 0x38,
+	0x83, 0xf0, 0x17, 0xec, 0xc1, 0x20, 0x6a, 0x9a,
+	0x0b, 0x00, 0xa0, 0x98, 0x22, 0x50, 0x23, 0xd5,
+	0x80, 0x6b, 0xf6, 0x1f, 0xc3, 0xcc, 0x97, 0xc9,
+	0x24, 0x9f, 0xf3, 0xaf, 0x43, 0x14, 0xd5, 0xa0
+};
+static const u8 dec_output010[] __initconst = {
+	0x42, 0x93, 0xe4, 0xeb, 0x97, 0xb0, 0x57, 0xbf,
+	0x1a, 0x8b, 0x1f, 0xe4, 0x5f, 0x36, 0x20, 0x3c,
+	0xef, 0x0a, 0xa9, 0x48, 0x5f, 0x5f, 0x37, 0x22,
+	0x3a, 0xde, 0xe3, 0xae, 0xbe, 0xad, 0x07, 0xcc,
+	0xb1, 0xf6, 0xf5, 0xf9, 0x56, 0xdd, 0xe7, 0x16,
+	0x1e, 0x7f, 0xdf, 0x7a, 0x9e, 0x75, 0xb7, 0xc7,
+	0xbe, 0xbe, 0x8a, 0x36, 0x04, 0xc0, 0x10, 0xf4,
+	0x95, 0x20, 0x03, 0xec, 0xdc, 0x05, 0xa1, 0x7d,
+	0xc4, 0xa9, 0x2c, 0x82, 0xd0, 0xbc, 0x8b, 0xc5,
+	0xc7, 0x45, 0x50, 0xf6, 0xa2, 0x1a, 0xb5, 0x46,
+	0x3b, 0x73, 0x02, 0xa6, 0x83, 0x4b, 0x73, 0x82,
+	0x58, 0x5e, 0x3b, 0x65, 0x2f, 0x0e, 0xfd, 0x2b,
+	0x59, 0x16, 0xce, 0xa1, 0x60, 0x9c, 0xe8, 0x3a,
+	0x99, 0xed, 0x8d, 0x5a, 0xcf, 0xf6, 0x83, 0xaf,
+	0xba, 0xd7, 0x73, 0x73, 0x40, 0x97, 0x3d, 0xca,
+	0xef, 0x07, 0x57, 0xe6, 0xd9, 0x70, 0x0e, 0x95,
+	0xae, 0xa6, 0x8d, 0x04, 0xcc, 0xee, 0xf7, 0x09,
+	0x31, 0x77, 0x12, 0xa3, 0x23, 0x97, 0x62, 0xb3,
+	0x7b, 0x32, 0xfb, 0x80, 0x14, 0x48, 0x81, 0xc3,
+	0xe5, 0xea, 0x91, 0x39, 0x52, 0x81, 0xa2, 0x4f,
+	0xe4, 0xb3, 0x09, 0xff, 0xde, 0x5e, 0xe9, 0x58,
+	0x84, 0x6e, 0xf9, 0x3d, 0xdf, 0x25, 0xea, 0xad,
+	0xae, 0xe6, 0x9a, 0xd1, 0x89, 0x55, 0xd3, 0xde,
+	0x6c, 0x52, 0xdb, 0x70, 0xfe, 0x37, 0xce, 0x44,
+	0x0a, 0xa8, 0x25, 0x5f, 0x92, 0xc1, 0x33, 0x4a,
+	0x4f, 0x9b, 0x62, 0x35, 0xff, 0xce, 0xc0, 0xa9,
+	0x60, 0xce, 0x52, 0x00, 0x97, 0x51, 0x35, 0x26,
+	0x2e, 0xb9, 0x36, 0xa9, 0x87, 0x6e, 0x1e, 0xcc,
+	0x91, 0x78, 0x53, 0x98, 0x86, 0x5b, 0x9c, 0x74,
+	0x7d, 0x88, 0x33, 0xe1, 0xdf, 0x37, 0x69, 0x2b,
+	0xbb, 0xf1, 0x4d, 0xf4, 0xd1, 0xf1, 0x39, 0x93,
+	0x17, 0x51, 0x19, 0xe3, 0x19, 0x1e, 0x76, 0x37,
+	0x25, 0xfb, 0x09, 0x27, 0x6a, 0xab, 0x67, 0x6f,
+	0x14, 0x12, 0x64, 0xe7, 0xc4, 0x07, 0xdf, 0x4d,
+	0x17, 0xbb, 0x6d, 0xe0, 0xe9, 0xb9, 0xab, 0xca,
+	0x10, 0x68, 0xaf, 0x7e, 0xb7, 0x33, 0x54, 0x73,
+	0x07, 0x6e, 0xf7, 0x81, 0x97, 0x9c, 0x05, 0x6f,
+	0x84, 0x5f, 0xd2, 0x42, 0xfb, 0x38, 0xcf, 0xd1,
+	0x2f, 0x14, 0x30, 0x88, 0x98, 0x4d, 0x5a, 0xa9,
+	0x76, 0xd5, 0x4f, 0x3e, 0x70, 0x6c, 0x85, 0x76,
+	0xd7, 0x01, 0xa0, 0x1a, 0xc8, 0x4e, 0xaa, 0xac,
+	0x78, 0xfe, 0x46, 0xde, 0x6a, 0x05, 0x46, 0xa7,
+	0x43, 0x0c, 0xb9, 0xde, 0xb9, 0x68, 0xfb, 0xce,
+	0x42, 0x99, 0x07, 0x4d, 0x0b, 0x3b, 0x5a, 0x30,
+	0x35, 0xa8, 0xf9, 0x3a, 0x73, 0xef, 0x0f, 0xdb,
+	0x1e, 0x16, 0x42, 0xc4, 0xba, 0xae, 0x58, 0xaa,
+	0xf8, 0xe5, 0x75, 0x2f, 0x1b, 0x15, 0x5c, 0xfd,
+	0x0a, 0x97, 0xd0, 0xe4, 0x37, 0x83, 0x61, 0x5f,
+	0x43, 0xa6, 0xc7, 0x3f, 0x38, 0x59, 0xe6, 0xeb,
+	0xa3, 0x90, 0xc3, 0xaa, 0xaa, 0x5a, 0xd3, 0x34,
+	0xd4, 0x17, 0xc8, 0x65, 0x3e, 0x57, 0xbc, 0x5e,
+	0xdd, 0x9e, 0xb7, 0xf0, 0x2e, 0x5b, 0xb2, 0x1f,
+	0x8a, 0x08, 0x0d, 0x45, 0x91, 0x0b, 0x29, 0x53,
+	0x4f, 0x4c, 0x5a, 0x73, 0x56, 0xfe, 0xaf, 0x41,
+	0x01, 0x39, 0x0a, 0x24, 0x3c, 0x7e, 0xbe, 0x4e,
+	0x53, 0xf3, 0xeb, 0x06, 0x66, 0x51, 0x28, 0x1d,
+	0xbd, 0x41, 0x0a, 0x01, 0xab, 0x16, 0x47, 0x27,
+	0x47, 0x47, 0xf7, 0xcb, 0x46, 0x0a, 0x70, 0x9e,
+	0x01, 0x9c, 0x09, 0xe1, 0x2a, 0x00, 0x1a, 0xd8,
+	0xd4, 0x79, 0x9d, 0x80, 0x15, 0x8e, 0x53, 0x2a,
+	0x65, 0x83, 0x78, 0x3e, 0x03, 0x00, 0x07, 0x12,
+	0x1f, 0x33, 0x3e, 0x7b, 0x13, 0x37, 0xf1, 0xc3,
+	0xef, 0xb7, 0xc1, 0x20, 0x3c, 0x3e, 0x67, 0x66,
+	0x5d, 0x88, 0xa7, 0x7d, 0x33, 0x50, 0x77, 0xb0,
+	0x28, 0x8e, 0xe7, 0x2c, 0x2e, 0x7a, 0xf4, 0x3c,
+	0x8d, 0x74, 0x83, 0xaf, 0x8e, 0x87, 0x0f, 0xe4,
+	0x50, 0xff, 0x84, 0x5c, 0x47, 0x0c, 0x6a, 0x49,
+	0xbf, 0x42, 0x86, 0x77, 0x15, 0x48, 0xa5, 0x90,
+	0x5d, 0x93, 0xd6, 0x2a, 0x11, 0xd5, 0xd5, 0x11,
+	0xaa, 0xce, 0xe7, 0x6f, 0xa5, 0xb0, 0x09, 0x2c,
+	0x8d, 0xd3, 0x92, 0xf0, 0x5a, 0x2a, 0xda, 0x5b,
+	0x1e, 0xd5, 0x9a, 0xc4, 0xc4, 0xf3, 0x49, 0x74,
+	0x41, 0xca, 0xe8, 0xc1, 0xf8, 0x44, 0xd6, 0x3c,
+	0xae, 0x6c, 0x1d, 0x9a, 0x30, 0x04, 0x4d, 0x27,
+	0x0e, 0xb1, 0x5f, 0x59, 0xa2, 0x24, 0xe8, 0xe1,
+	0x98, 0xc5, 0x6a, 0x4c, 0xfe, 0x41, 0xd2, 0x27,
+	0x42, 0x52, 0xe1, 0xe9, 0x7d, 0x62, 0xe4, 0x88,
+	0x0f, 0xad, 0xb2, 0x70, 0xcb, 0x9d, 0x4c, 0x27,
+	0x2e, 0x76, 0x1e, 0x1a, 0x63, 0x65, 0xf5, 0x3b,
+	0xf8, 0x57, 0x69, 0xeb, 0x5b, 0x38, 0x26, 0x39,
+	0x33, 0x25, 0x45, 0x3e, 0x91, 0xb8, 0xd8, 0xc7,
+	0xd5, 0x42, 0xc0, 0x22, 0x31, 0x74, 0xf4, 0xbc,
+	0x0c, 0x23, 0xf1, 0xca, 0xc1, 0x8d, 0xd7, 0xbe,
+	0xc9, 0x62, 0xe4, 0x08, 0x1a, 0xcf, 0x36, 0xd5,
+	0xfe, 0x55, 0x21, 0x59, 0x91, 0x87, 0x87, 0xdf,
+	0x06, 0xdb, 0xdf, 0x96, 0x45, 0x58, 0xda, 0x05,
+	0xcd, 0x50, 0x4d, 0xd2, 0x7d, 0x05, 0x18, 0x73,
+	0x6a, 0x8d, 0x11, 0x85, 0xa6, 0x88, 0xe8, 0xda,
+	0xe6, 0x30, 0x33, 0xa4, 0x89, 0x31, 0x75, 0xbe,
+	0x69, 0x43, 0x84, 0x43, 0x50, 0x87, 0xdd, 0x71,
+	0x36, 0x83, 0xc3, 0x78, 0x74, 0x24, 0x0a, 0xed,
+	0x7b, 0xdb, 0xa4, 0x24, 0x0b, 0xb9, 0x7e, 0x5d,
+	0xff, 0xde, 0xb1, 0xef, 0x61, 0x5a, 0x45, 0x33,
+	0xf6, 0x17, 0x07, 0x08, 0x98, 0x83, 0x92, 0x0f,
+	0x23, 0x6d, 0xe6, 0xaa, 0x17, 0x54, 0xad, 0x6a,
+	0xc8, 0xdb, 0x26, 0xbe, 0xb8, 0xb6, 0x08, 0xfa,
+	0x68, 0xf1, 0xd7, 0x79, 0x6f, 0x18, 0xb4, 0x9e,
+	0x2d, 0x3f, 0x1b, 0x64, 0xaf, 0x8d, 0x06, 0x0e,
+	0x49, 0x28, 0xe0, 0x5d, 0x45, 0x68, 0x13, 0x87,
+	0xfa, 0xde, 0x40, 0x7b, 0xd2, 0xc3, 0x94, 0xd5,
+	0xe1, 0xd9, 0xc2, 0xaf, 0x55, 0x89, 0xeb, 0xb4,
+	0x12, 0x59, 0xa8, 0xd4, 0xc5, 0x29, 0x66, 0x38,
+	0xe6, 0xac, 0x22, 0x22, 0xd9, 0x64, 0x9b, 0x34,
+	0x0a, 0x32, 0x9f, 0xc2, 0xbf, 0x17, 0x6c, 0x3f,
+	0x71, 0x7a, 0x38, 0x6b, 0x98, 0xfb, 0x49, 0x36,
+	0x89, 0xc9, 0xe2, 0xd6, 0xc7, 0x5d, 0xd0, 0x69,
+	0x5f, 0x23, 0x35, 0xc9, 0x30, 0xe2, 0xfd, 0x44,
+	0x58, 0x39, 0xd7, 0x97, 0xfb, 0x5c, 0x00, 0xd5,
+	0x4f, 0x7a, 0x1a, 0x95, 0x8b, 0x62, 0x4b, 0xce,
+	0xe5, 0x91, 0x21, 0x7b, 0x30, 0x00, 0xd6, 0xdd,
+	0x6d, 0x02, 0x86, 0x49, 0x0f, 0x3c, 0x1a, 0x27,
+	0x3c, 0xd3, 0x0e, 0x71, 0xf2, 0xff, 0xf5, 0x2f,
+	0x87, 0xac, 0x67, 0x59, 0x81, 0xa3, 0xf7, 0xf8,
+	0xd6, 0x11, 0x0c, 0x84, 0xa9, 0x03, 0xee, 0x2a,
+	0xc4, 0xf3, 0x22, 0xab, 0x7c, 0xe2, 0x25, 0xf5,
+	0x67, 0xa3, 0xe4, 0x11, 0xe0, 0x59, 0xb3, 0xca,
+	0x87, 0xa0, 0xae, 0xc9, 0xa6, 0x62, 0x1b, 0x6e,
+	0x4d, 0x02, 0x6b, 0x07, 0x9d, 0xfd, 0xd0, 0x92,
+	0x06, 0xe1, 0xb2, 0x9a, 0x4a, 0x1f, 0x1f, 0x13,
+	0x49, 0x99, 0x97, 0x08, 0xde, 0x7f, 0x98, 0xaf,
+	0x51, 0x98, 0xee, 0x2c, 0xcb, 0xf0, 0x0b, 0xc6,
+	0xb6, 0xb7, 0x2d, 0x9a, 0xb1, 0xac, 0xa6, 0xe3,
+	0x15, 0x77, 0x9d, 0x6b, 0x1a, 0xe4, 0xfc, 0x8b,
+	0xf2, 0x17, 0x59, 0x08, 0x04, 0x58, 0x81, 0x9d,
+	0x1b, 0x1b, 0x69, 0x55, 0xc2, 0xb4, 0x3c, 0x1f,
+	0x50, 0xf1, 0x7f, 0x77, 0x90, 0x4c, 0x66, 0x40,
+	0x5a, 0xc0, 0x33, 0x1f, 0xcb, 0x05, 0x6d, 0x5c,
+	0x06, 0x87, 0x52, 0xa2, 0x8f, 0x26, 0xd5, 0x4f
+};
+static const u8 dec_assoc010[] __initconst = {
+	0xd2, 0xa1, 0x70, 0xdb, 0x7a, 0xf8, 0xfa, 0x27,
+	0xba, 0x73, 0x0f, 0xbf, 0x3d, 0x1e, 0x82, 0xb2
+};
+static const u8 dec_nonce010[] __initconst = {
+	0xdb, 0x92, 0x0f, 0x7f, 0x17, 0x54, 0x0c, 0x30
+};
+static const u8 dec_key010[] __initconst = {
+	0x47, 0x11, 0xeb, 0x86, 0x2b, 0x2c, 0xab, 0x44,
+	0x34, 0xda, 0x7f, 0x57, 0x03, 0x39, 0x0c, 0xaf,
+	0x2c, 0x14, 0xfd, 0x65, 0x23, 0xe9, 0x8e, 0x74,
+	0xd5, 0x08, 0x68, 0x08, 0xe7, 0xb4, 0x72, 0xd7
+};
+
+static const u8 dec_input011[] __initconst = {
+	0x6a, 0xfc, 0x4b, 0x25, 0xdf, 0xc0, 0xe4, 0xe8,
+	0x17, 0x4d, 0x4c, 0xc9, 0x7e, 0xde, 0x3a, 0xcc,
+	0x3c, 0xba, 0x6a, 0x77, 0x47, 0xdb, 0xe3, 0x74,
+	0x7a, 0x4d, 0x5f, 0x8d, 0x37, 0x55, 0x80, 0x73,
+	0x90, 0x66, 0x5d, 0x3a, 0x7d, 0x5d, 0x86, 0x5e,
+	0x8d, 0xfd, 0x83, 0xff, 0x4e, 0x74, 0x6f, 0xf9,
+	0xe6, 0x70, 0x17, 0x70, 0x3e, 0x96, 0xa7, 0x7e,
+	0xcb, 0xab, 0x8f, 0x58, 0x24, 0x9b, 0x01, 0xfd,
+	0xcb, 0xe6, 0x4d, 0x9b, 0xf0, 0x88, 0x94, 0x57,
+	0x66, 0xef, 0x72, 0x4c, 0x42, 0x6e, 0x16, 0x19,
+	0x15, 0xea, 0x70, 0x5b, 0xac, 0x13, 0xdb, 0x9f,
+	0x18, 0xe2, 0x3c, 0x26, 0x97, 0xbc, 0xdc, 0x45,
+	0x8c, 0x6c, 0x24, 0x69, 0x9c, 0xf7, 0x65, 0x1e,
+	0x18, 0x59, 0x31, 0x7c, 0xe4, 0x73, 0xbc, 0x39,
+	0x62, 0xc6, 0x5c, 0x9f, 0xbf, 0xfa, 0x90, 0x03,
+	0xc9, 0x72, 0x26, 0xb6, 0x1b, 0xc2, 0xb7, 0x3f,
+	0xf2, 0x13, 0x77, 0xf2, 0x8d, 0xb9, 0x47, 0xd0,
+	0x53, 0xdd, 0xc8, 0x91, 0x83, 0x8b, 0xb1, 0xce,
+	0xa3, 0xfe, 0xcd, 0xd9, 0xdd, 0x92, 0x7b, 0xdb,
+	0xb8, 0xfb, 0xc9, 0x2d, 0x01, 0x59, 0x39, 0x52,
+	0xad, 0x1b, 0xec, 0xcf, 0xd7, 0x70, 0x13, 0x21,
+	0xf5, 0x47, 0xaa, 0x18, 0x21, 0x5c, 0xc9, 0x9a,
+	0xd2, 0x6b, 0x05, 0x9c, 0x01, 0xa1, 0xda, 0x35,
+	0x5d, 0xb3, 0x70, 0xe6, 0xa9, 0x80, 0x8b, 0x91,
+	0xb7, 0xb3, 0x5f, 0x24, 0x9a, 0xb7, 0xd1, 0x6b,
+	0xa1, 0x1c, 0x50, 0xba, 0x49, 0xe0, 0xee, 0x2e,
+	0x75, 0xac, 0x69, 0xc0, 0xeb, 0x03, 0xdd, 0x19,
+	0xe5, 0xf6, 0x06, 0xdd, 0xc3, 0xd7, 0x2b, 0x07,
+	0x07, 0x30, 0xa7, 0x19, 0x0c, 0xbf, 0xe6, 0x18,
+	0xcc, 0xb1, 0x01, 0x11, 0x85, 0x77, 0x1d, 0x96,
+	0xa7, 0xa3, 0x00, 0x84, 0x02, 0xa2, 0x83, 0x68,
+	0xda, 0x17, 0x27, 0xc8, 0x7f, 0x23, 0xb7, 0xf4,
+	0x13, 0x85, 0xcf, 0xdd, 0x7a, 0x7d, 0x24, 0x57,
+	0xfe, 0x05, 0x93, 0xf5, 0x74, 0xce, 0xed, 0x0c,
+	0x20, 0x98, 0x8d, 0x92, 0x30, 0xa1, 0x29, 0x23,
+	0x1a, 0xa0, 0x4f, 0x69, 0x56, 0x4c, 0xe1, 0xc8,
+	0xce, 0xf6, 0x9a, 0x0c, 0xa4, 0xfa, 0x04, 0xf6,
+	0x62, 0x95, 0xf2, 0xfa, 0xc7, 0x40, 0x68, 0x40,
+	0x8f, 0x41, 0xda, 0xb4, 0x26, 0x6f, 0x70, 0xab,
+	0x40, 0x61, 0xa4, 0x0e, 0x75, 0xfb, 0x86, 0xeb,
+	0x9d, 0x9a, 0x1f, 0xec, 0x76, 0x99, 0xe7, 0xea,
+	0xaa, 0x1e, 0x2d, 0xb5, 0xd4, 0xa6, 0x1a, 0xb8,
+	0x61, 0x0a, 0x1d, 0x16, 0x5b, 0x98, 0xc2, 0x31,
+	0x40, 0xe7, 0x23, 0x1d, 0x66, 0x99, 0xc8, 0xc0,
+	0xd7, 0xce, 0xf3, 0x57, 0x40, 0x04, 0x3f, 0xfc,
+	0xea, 0xb3, 0xfc, 0xd2, 0xd3, 0x99, 0xa4, 0x94,
+	0x69, 0xa0, 0xef, 0xd1, 0x85, 0xb3, 0xa6, 0xb1,
+	0x28, 0xbf, 0x94, 0x67, 0x22, 0xc3, 0x36, 0x46,
+	0xf8, 0xd2, 0x0f, 0x5f, 0xf4, 0x59, 0x80, 0xe6,
+	0x2d, 0x43, 0x08, 0x7d, 0x19, 0x09, 0x97, 0xa7,
+	0x4c, 0x3d, 0x8d, 0xba, 0x65, 0x62, 0xa3, 0x71,
+	0x33, 0x29, 0x62, 0xdb, 0xc1, 0x33, 0x34, 0x1a,
+	0x63, 0x33, 0x16, 0xb6, 0x64, 0x7e, 0xab, 0x33,
+	0xf0, 0xe6, 0x26, 0x68, 0xba, 0x1d, 0x2e, 0x38,
+	0x08, 0xe6, 0x02, 0xd3, 0x25, 0x2c, 0x47, 0x23,
+	0x58, 0x34, 0x0f, 0x9d, 0x63, 0x4f, 0x63, 0xbb,
+	0x7f, 0x3b, 0x34, 0x38, 0xa7, 0xb5, 0x8d, 0x65,
+	0xd9, 0x9f, 0x79, 0x55, 0x3e, 0x4d, 0xe7, 0x73,
+	0xd8, 0xf6, 0x98, 0x97, 0x84, 0x60, 0x9c, 0xc8,
+	0xa9, 0x3c, 0xf6, 0xdc, 0x12, 0x5c, 0xe1, 0xbb,
+	0x0b, 0x8b, 0x98, 0x9c, 0x9d, 0x26, 0x7c, 0x4a,
+	0xe6, 0x46, 0x36, 0x58, 0x21, 0x4a, 0xee, 0xca,
+	0xd7, 0x3b, 0xc2, 0x6c, 0x49, 0x2f, 0xe5, 0xd5,
+	0x03, 0x59, 0x84, 0x53, 0xcb, 0xfe, 0x92, 0x71,
+	0x2e, 0x7c, 0x21, 0xcc, 0x99, 0x85, 0x7f, 0xb8,
+	0x74, 0x90, 0x13, 0x42, 0x3f, 0xe0, 0x6b, 0x1d,
+	0xf2, 0x4d, 0x54, 0xd4, 0xfc, 0x3a, 0x05, 0xe6,
+	0x74, 0xaf, 0xa6, 0xa0, 0x2a, 0x20, 0x23, 0x5d,
+	0x34, 0x5c, 0xd9, 0x3e, 0x4e, 0xfa, 0x93, 0xe7,
+	0xaa, 0xe9, 0x6f, 0x08, 0x43, 0x67, 0x41, 0xc5,
+	0xad, 0xfb, 0x31, 0x95, 0x82, 0x73, 0x32, 0xd8,
+	0xa6, 0xa3, 0xed, 0x0e, 0x2d, 0xf6, 0x5f, 0xfd,
+	0x80, 0xa6, 0x7a, 0xe0, 0xdf, 0x78, 0x15, 0x29,
+	0x74, 0x33, 0xd0, 0x9e, 0x83, 0x86, 0x72, 0x22,
+	0x57, 0x29, 0xb9, 0x9e, 0x5d, 0xd3, 0x1a, 0xb5,
+	0x96, 0x72, 0x41, 0x3d, 0xf1, 0x64, 0x43, 0x67,
+	0xee, 0xaa, 0x5c, 0xd3, 0x9a, 0x96, 0x13, 0x11,
+	0x5d, 0xf3, 0x0c, 0x87, 0x82, 0x1e, 0x41, 0x9e,
+	0xd0, 0x27, 0xd7, 0x54, 0x3b, 0x67, 0x73, 0x09,
+	0x91, 0xe9, 0xd5, 0x36, 0xa7, 0xb5, 0x55, 0xe4,
+	0xf3, 0x21, 0x51, 0x49, 0x22, 0x07, 0x55, 0x4f,
+	0x44, 0x4b, 0xd2, 0x15, 0x93, 0x17, 0x2a, 0xfa,
+	0x4d, 0x4a, 0x57, 0xdb, 0x4c, 0xa6, 0xeb, 0xec,
+	0x53, 0x25, 0x6c, 0x21, 0xed, 0x00, 0x4c, 0x3b,
+	0xca, 0x14, 0x57, 0xa9, 0xd6, 0x6a, 0xcd, 0x8d,
+	0x5e, 0x74, 0xac, 0x72, 0xc1, 0x97, 0xe5, 0x1b,
+	0x45, 0x4e, 0xda, 0xfc, 0xcc, 0x40, 0xe8, 0x48,
+	0x88, 0x0b, 0xa3, 0xe3, 0x8d, 0x83, 0x42, 0xc3,
+	0x23, 0xfd, 0x68, 0xb5, 0x8e, 0xf1, 0x9d, 0x63,
+	0x77, 0xe9, 0xa3, 0x8e, 0x8c, 0x26, 0x6b, 0xbd,
+	0x72, 0x73, 0x35, 0x0c, 0x03, 0xf8, 0x43, 0x78,
+	0x52, 0x71, 0x15, 0x1f, 0x71, 0x5d, 0x6e, 0xed,
+	0xb9, 0xcc, 0x86, 0x30, 0xdb, 0x2b, 0xd3, 0x82,
+	0x88, 0x23, 0x71, 0x90, 0x53, 0x5c, 0xa9, 0x2f,
+	0x76, 0x01, 0xb7, 0x9a, 0xfe, 0x43, 0x55, 0xa3,
+	0x04, 0x9b, 0x0e, 0xe4, 0x59, 0xdf, 0xc9, 0xe9,
+	0xb1, 0xea, 0x29, 0x28, 0x3c, 0x5c, 0xae, 0x72,
+	0x84, 0xb6, 0xc6, 0xeb, 0x0c, 0x27, 0x07, 0x74,
+	0x90, 0x0d, 0x31, 0xb0, 0x00, 0x77, 0xe9, 0x40,
+	0x70, 0x6f, 0x68, 0xa7, 0xfd, 0x06, 0xec, 0x4b,
+	0xc0, 0xb7, 0xac, 0xbc, 0x33, 0xb7, 0x6d, 0x0a,
+	0xbd, 0x12, 0x1b, 0x59, 0xcb, 0xdd, 0x32, 0xf5,
+	0x1d, 0x94, 0x57, 0x76, 0x9e, 0x0c, 0x18, 0x98,
+	0x71, 0xd7, 0x2a, 0xdb, 0x0b, 0x7b, 0xa7, 0x71,
+	0xb7, 0x67, 0x81, 0x23, 0x96, 0xae, 0xb9, 0x7e,
+	0x32, 0x43, 0x92, 0x8a, 0x19, 0xa0, 0xc4, 0xd4,
+	0x3b, 0x57, 0xf9, 0x4a, 0x2c, 0xfb, 0x51, 0x46,
+	0xbb, 0xcb, 0x5d, 0xb3, 0xef, 0x13, 0x93, 0x6e,
+	0x68, 0x42, 0x54, 0x57, 0xd3, 0x6a, 0x3a, 0x8f,
+	0x9d, 0x66, 0xbf, 0xbd, 0x36, 0x23, 0xf5, 0x93,
+	0x83, 0x7b, 0x9c, 0xc0, 0xdd, 0xc5, 0x49, 0xc0,
+	0x64, 0xed, 0x07, 0x12, 0xb3, 0xe6, 0xe4, 0xe5,
+	0x38, 0x95, 0x23, 0xb1, 0xa0, 0x3b, 0x1a, 0x61,
+	0xda, 0x17, 0xac, 0xc3, 0x58, 0xdd, 0x74, 0x64,
+	0x22, 0x11, 0xe8, 0x32, 0x1d, 0x16, 0x93, 0x85,
+	0x99, 0xa5, 0x9c, 0x34, 0x55, 0xb1, 0xe9, 0x20,
+	0x72, 0xc9, 0x28, 0x7b, 0x79, 0x00, 0xa1, 0xa6,
+	0xa3, 0x27, 0x40, 0x18, 0x8a, 0x54, 0xe0, 0xcc,
+	0xe8, 0x4e, 0x8e, 0x43, 0x96, 0xe7, 0x3f, 0xc8,
+	0xe9, 0xb2, 0xf9, 0xc9, 0xda, 0x04, 0x71, 0x50,
+	0x47, 0xe4, 0xaa, 0xce, 0xa2, 0x30, 0xc8, 0xe4,
+	0xac, 0xc7, 0x0d, 0x06, 0x2e, 0xe6, 0xe8, 0x80,
+	0x36, 0x29, 0x9e, 0x01, 0xb8, 0xc3, 0xf0, 0xa0,
+	0x5d, 0x7a, 0xca, 0x4d, 0xa0, 0x57, 0xbd, 0x2a,
+	0x45, 0xa7, 0x7f, 0x9c, 0x93, 0x07, 0x8f, 0x35,
+	0x67, 0x92, 0xe3, 0xe9, 0x7f, 0xa8, 0x61, 0x43,
+	0x9e, 0x25, 0x4f, 0x33, 0x76, 0x13, 0x6e, 0x12,
+	0xb9, 0xdd, 0xa4, 0x7c, 0x08, 0x9f, 0x7c, 0xe7,
+	0x0a, 0x8d, 0x84, 0x06, 0xa4, 0x33, 0x17, 0x34,
+	0x5e, 0x10, 0x7c, 0xc0, 0xa8, 0x3d, 0x1f, 0x42,
+	0x20, 0x51, 0x65, 0x5d, 0x09, 0xc3, 0xaa, 0xc0,
+	0xc8, 0x0d, 0xf0, 0x79, 0xbc, 0x20, 0x1b, 0x95,
+	0xe7, 0x06, 0x7d, 0x47, 0x20, 0x03, 0x1a, 0x74,
+	0xdd, 0xe2, 0xd4, 0xae, 0x38, 0x71, 0x9b, 0xf5,
+	0x80, 0xec, 0x08, 0x4e, 0x56, 0xba, 0x76, 0x12,
+	0x1a, 0xdf, 0x48, 0xf3, 0xae, 0xb3, 0xe6, 0xe6,
+	0xbe, 0xc0, 0x91, 0x2e, 0x01, 0xb3, 0x01, 0x86,
+	0xa2, 0xb9, 0x52, 0xd1, 0x21, 0xae, 0xd4, 0x97,
+	0x1d, 0xef, 0x41, 0x12, 0x95, 0x3d, 0x48, 0x45,
+	0x1c, 0x56, 0x32, 0x8f, 0xb8, 0x43, 0xbb, 0x19,
+	0xf3, 0xca, 0xe9, 0xeb, 0x6d, 0x84, 0xbe, 0x86,
+	0x06, 0xe2, 0x36, 0xb2, 0x62, 0x9d, 0xd3, 0x4c,
+	0x48, 0x18, 0x54, 0x13, 0x4e, 0xcf, 0xfd, 0xba,
+	0x84, 0xb9, 0x30, 0x53, 0xcf, 0xfb, 0xb9, 0x29,
+	0x8f, 0xdc, 0x9f, 0xef, 0x60, 0x0b, 0x64, 0xf6,
+	0x8b, 0xee, 0xa6, 0x91, 0xc2, 0x41, 0x6c, 0xf6,
+	0xfa, 0x79, 0x67, 0x4b, 0xc1, 0x3f, 0xaf, 0x09,
+	0x81, 0xd4, 0x5d, 0xcb, 0x09, 0xdf, 0x36, 0x31,
+	0xc0, 0x14, 0x3c, 0x7c, 0x0e, 0x65, 0x95, 0x99,
+	0x6d, 0xa3, 0xf4, 0xd7, 0x38, 0xee, 0x1a, 0x2b,
+	0x37, 0xe2, 0xa4, 0x3b, 0x4b, 0xd0, 0x65, 0xca,
+	0xf8, 0xc3, 0xe8, 0x15, 0x20, 0xef, 0xf2, 0x00,
+	0xfd, 0x01, 0x09, 0xc5, 0xc8, 0x17, 0x04, 0x93,
+	0xd0, 0x93, 0x03, 0x55, 0xc5, 0xfe, 0x32, 0xa3,
+	0x3e, 0x28, 0x2d, 0x3b, 0x93, 0x8a, 0xcc, 0x07,
+	0x72, 0x80, 0x8b, 0x74, 0x16, 0x24, 0xbb, 0xda,
+	0x94, 0x39, 0x30, 0x8f, 0xb1, 0xcd, 0x4a, 0x90,
+	0x92, 0x7c, 0x14, 0x8f, 0x95, 0x4e, 0xac, 0x9b,
+	0xd8, 0x8f, 0x1a, 0x87, 0xa4, 0x32, 0x27, 0x8a,
+	0xba, 0xf7, 0x41, 0xcf, 0x84, 0x37, 0x19, 0xe6,
+	0x06, 0xf5, 0x0e, 0xcf, 0x36, 0xf5, 0x9e, 0x6c,
+	0xde, 0xbc, 0xff, 0x64, 0x7e, 0x4e, 0x59, 0x57,
+	0x48, 0xfe, 0x14, 0xf7, 0x9c, 0x93, 0x5d, 0x15,
+	0xad, 0xcc, 0x11, 0xb1, 0x17, 0x18, 0xb2, 0x7e,
+	0xcc, 0xab, 0xe9, 0xce, 0x7d, 0x77, 0x5b, 0x51,
+	0x1b, 0x1e, 0x20, 0xa8, 0x32, 0x06, 0x0e, 0x75,
+	0x93, 0xac, 0xdb, 0x35, 0x37, 0x1f, 0xe9, 0x19,
+	0x1d, 0xb4, 0x71, 0x97, 0xd6, 0x4e, 0x2c, 0x08,
+	0xa5, 0x13, 0xf9, 0x0e, 0x7e, 0x78, 0x6e, 0x14,
+	0xe0, 0xa9, 0xb9, 0x96, 0x4c, 0x80, 0x82, 0xba,
+	0x17, 0xb3, 0x9d, 0x69, 0xb0, 0x84, 0x46, 0xff,
+	0xf9, 0x52, 0x79, 0x94, 0x58, 0x3a, 0x62, 0x90,
+	0x15, 0x35, 0x71, 0x10, 0x37, 0xed, 0xa1, 0x8e,
+	0x53, 0x6e, 0xf4, 0x26, 0x57, 0x93, 0x15, 0x93,
+	0xf6, 0x81, 0x2c, 0x5a, 0x10, 0xda, 0x92, 0xad,
+	0x2f, 0xdb, 0x28, 0x31, 0x2d, 0x55, 0x04, 0xd2,
+	0x06, 0x28, 0x8c, 0x1e, 0xdc, 0xea, 0x54, 0xac,
+	0xff, 0xb7, 0x6c, 0x30, 0x15, 0xd4, 0xb4, 0x0d,
+	0x00, 0x93, 0x57, 0xdd, 0xd2, 0x07, 0x07, 0x06,
+	0xd9, 0x43, 0x9b, 0xcd, 0x3a, 0xf4, 0x7d, 0x4c,
+	0x36, 0x5d, 0x23, 0xa2, 0xcc, 0x57, 0x40, 0x91,
+	0xe9, 0x2c, 0x2f, 0x2c, 0xd5, 0x30, 0x9b, 0x17,
+	0xb0, 0xc9, 0xf7, 0xa7, 0x2f, 0xd1, 0x93, 0x20,
+	0x6b, 0xc6, 0xc1, 0xe4, 0x6f, 0xcb, 0xd1, 0xe7,
+	0x09, 0x0f, 0x9e, 0xdc, 0xaa, 0x9f, 0x2f, 0xdf,
+	0x56, 0x9f, 0xd4, 0x33, 0x04, 0xaf, 0xd3, 0x6c,
+	0x58, 0x61, 0xf0, 0x30, 0xec, 0xf2, 0x7f, 0xf2,
+	0x9c, 0xdf, 0x39, 0xbb, 0x6f, 0xa2, 0x8c, 0x7e,
+	0xc4, 0x22, 0x51, 0x71, 0xc0, 0x4d, 0x14, 0x1a,
+	0xc4, 0xcd, 0x04, 0xd9, 0x87, 0x08, 0x50, 0x05,
+	0xcc, 0xaf, 0xf6, 0xf0, 0x8f, 0x92, 0x54, 0x58,
+	0xc2, 0xc7, 0x09, 0x7a, 0x59, 0x02, 0x05, 0xe8,
+	0xb0, 0x86, 0xd9, 0xbf, 0x7b, 0x35, 0x51, 0x4d,
+	0xaf, 0x08, 0x97, 0x2c, 0x65, 0xda, 0x2a, 0x71,
+	0x3a, 0xa8, 0x51, 0xcc, 0xf2, 0x73, 0x27, 0xc3,
+	0xfd, 0x62, 0xcf, 0xe3, 0xb2, 0xca, 0xcb, 0xbe,
+	0x1a, 0x0a, 0xa1, 0x34, 0x7b, 0x77, 0xc4, 0x62,
+	0x68, 0x78, 0x5f, 0x94, 0x07, 0x04, 0x65, 0x16,
+	0x4b, 0x61, 0xcb, 0xff, 0x75, 0x26, 0x50, 0x66,
+	0x1f, 0x6e, 0x93, 0xf8, 0xc5, 0x51, 0xeb, 0xa4,
+	0x4a, 0x48, 0x68, 0x6b, 0xe2, 0x5e, 0x44, 0xb2,
+	0x50, 0x2c, 0x6c, 0xae, 0x79, 0x4e, 0x66, 0x35,
+	0x81, 0x50, 0xac, 0xbc, 0x3f, 0xb1, 0x0c, 0xf3,
+	0x05, 0x3c, 0x4a, 0xa3, 0x6c, 0x2a, 0x79, 0xb4,
+	0xb7, 0xab, 0xca, 0xc7, 0x9b, 0x8e, 0xcd, 0x5f,
+	0x11, 0x03, 0xcb, 0x30, 0xa3, 0xab, 0xda, 0xfe,
+	0x64, 0xb9, 0xbb, 0xd8, 0x5e, 0x3a, 0x1a, 0x56,
+	0xe5, 0x05, 0x48, 0x90, 0x1e, 0x61, 0x69, 0x1b,
+	0x22, 0xe6, 0x1a, 0x3c, 0x75, 0xad, 0x1f, 0x37,
+	0x28, 0xdc, 0xe4, 0x6d, 0xbd, 0x42, 0xdc, 0xd3,
+	0xc8, 0xb6, 0x1c, 0x48, 0xfe, 0x94, 0x77, 0x7f,
+	0xbd, 0x62, 0xac, 0xa3, 0x47, 0x27, 0xcf, 0x5f,
+	0xd9, 0xdb, 0xaf, 0xec, 0xf7, 0x5e, 0xc1, 0xb0,
+	0x9d, 0x01, 0x26, 0x99, 0x7e, 0x8f, 0x03, 0x70,
+	0xb5, 0x42, 0xbe, 0x67, 0x28, 0x1b, 0x7c, 0xbd,
+	0x61, 0x21, 0x97, 0xcc, 0x5c, 0xe1, 0x97, 0x8f,
+	0x8d, 0xde, 0x2b, 0xaa, 0xa7, 0x71, 0x1d, 0x1e,
+	0x02, 0x73, 0x70, 0x58, 0x32, 0x5b, 0x1d, 0x67,
+	0x3d, 0xe0, 0x74, 0x4f, 0x03, 0xf2, 0x70, 0x51,
+	0x79, 0xf1, 0x61, 0x70, 0x15, 0x74, 0x9d, 0x23,
+	0x89, 0xde, 0xac, 0xfd, 0xde, 0xd0, 0x1f, 0xc3,
+	0x87, 0x44, 0x35, 0x4b, 0xe5, 0xb0, 0x60, 0xc5,
+	0x22, 0xe4, 0x9e, 0xca, 0xeb, 0xd5, 0x3a, 0x09,
+	0x45, 0xa4, 0xdb, 0xfa, 0x3f, 0xeb, 0x1b, 0xc7,
+	0xc8, 0x14, 0x99, 0x51, 0x92, 0x10, 0xed, 0xed,
+	0x28, 0xe0, 0xa1, 0xf8, 0x26, 0xcf, 0xcd, 0xcb,
+	0x63, 0xa1, 0x3b, 0xe3, 0xdf, 0x7e, 0xfe, 0xa6,
+	0xf0, 0x81, 0x9a, 0xbf, 0x55, 0xde, 0x54, 0xd5,
+	0x56, 0x60, 0x98, 0x10, 0x68, 0xf4, 0x38, 0x96,
+	0x8e, 0x6f, 0x1d, 0x44, 0x7f, 0xd6, 0x2f, 0xfe,
+	0x55, 0xfb, 0x0c, 0x7e, 0x67, 0xe2, 0x61, 0x44,
+	0xed, 0xf2, 0x35, 0x30, 0x5d, 0xe9, 0xc7, 0xd6,
+	0x6d, 0xe0, 0xa0, 0xed, 0xf3, 0xfc, 0xd8, 0x3e,
+	0x0a, 0x7b, 0xcd, 0xaf, 0x65, 0x68, 0x18, 0xc0,
+	0xec, 0x04, 0x1c, 0x74, 0x6d, 0xe2, 0x6e, 0x79,
+	0xd4, 0x11, 0x2b, 0x62, 0xd5, 0x27, 0xad, 0x4f,
+	0x01, 0x59, 0x73, 0xcc, 0x6a, 0x53, 0xfb, 0x2d,
+	0xd5, 0x4e, 0x99, 0x21, 0x65, 0x4d, 0xf5, 0x82,
+	0xf7, 0xd8, 0x42, 0xce, 0x6f, 0x3d, 0x36, 0x47,
+	0xf1, 0x05, 0x16, 0xe8, 0x1b, 0x6a, 0x8f, 0x93,
+	0xf2, 0x8f, 0x37, 0x40, 0x12, 0x28, 0xa3, 0xe6,
+	0xb9, 0x17, 0x4a, 0x1f, 0xb1, 0xd1, 0x66, 0x69,
+	0x86, 0xc4, 0xfc, 0x97, 0xae, 0x3f, 0x8f, 0x1e,
+	0x2b, 0xdf, 0xcd, 0xf9, 0x3c
+};
+static const u8 dec_output011[] __initconst = {
+	0x7a, 0x57, 0xf2, 0xc7, 0x06, 0x3f, 0x50, 0x7b,
+	0x36, 0x1a, 0x66, 0x5c, 0xb9, 0x0e, 0x5e, 0x3b,
+	0x45, 0x60, 0xbe, 0x9a, 0x31, 0x9f, 0xff, 0x5d,
+	0x66, 0x34, 0xb4, 0xdc, 0xfb, 0x9d, 0x8e, 0xee,
+	0x6a, 0x33, 0xa4, 0x07, 0x3c, 0xf9, 0x4c, 0x30,
+	0xa1, 0x24, 0x52, 0xf9, 0x50, 0x46, 0x88, 0x20,
+	0x02, 0x32, 0x3a, 0x0e, 0x99, 0x63, 0xaf, 0x1f,
+	0x15, 0x28, 0x2a, 0x05, 0xff, 0x57, 0x59, 0x5e,
+	0x18, 0xa1, 0x1f, 0xd0, 0x92, 0x5c, 0x88, 0x66,
+	0x1b, 0x00, 0x64, 0xa5, 0x93, 0x8d, 0x06, 0x46,
+	0xb0, 0x64, 0x8b, 0x8b, 0xef, 0x99, 0x05, 0x35,
+	0x85, 0xb3, 0xf3, 0x33, 0xbb, 0xec, 0x66, 0xb6,
+	0x3d, 0x57, 0x42, 0xe3, 0xb4, 0xc6, 0xaa, 0xb0,
+	0x41, 0x2a, 0xb9, 0x59, 0xa9, 0xf6, 0x3e, 0x15,
+	0x26, 0x12, 0x03, 0x21, 0x4c, 0x74, 0x43, 0x13,
+	0x2a, 0x03, 0x27, 0x09, 0xb4, 0xfb, 0xe7, 0xb7,
+	0x40, 0xff, 0x5e, 0xce, 0x48, 0x9a, 0x60, 0xe3,
+	0x8b, 0x80, 0x8c, 0x38, 0x2d, 0xcb, 0x93, 0x37,
+	0x74, 0x05, 0x52, 0x6f, 0x73, 0x3e, 0xc3, 0xbc,
+	0xca, 0x72, 0x0a, 0xeb, 0xf1, 0x3b, 0xa0, 0x95,
+	0xdc, 0x8a, 0xc4, 0xa9, 0xdc, 0xca, 0x44, 0xd8,
+	0x08, 0x63, 0x6a, 0x36, 0xd3, 0x3c, 0xb8, 0xac,
+	0x46, 0x7d, 0xfd, 0xaa, 0xeb, 0x3e, 0x0f, 0x45,
+	0x8f, 0x49, 0xda, 0x2b, 0xf2, 0x12, 0xbd, 0xaf,
+	0x67, 0x8a, 0x63, 0x48, 0x4b, 0x55, 0x5f, 0x6d,
+	0x8c, 0xb9, 0x76, 0x34, 0x84, 0xae, 0xc2, 0xfc,
+	0x52, 0x64, 0x82, 0xf7, 0xb0, 0x06, 0xf0, 0x45,
+	0x73, 0x12, 0x50, 0x30, 0x72, 0xea, 0x78, 0x9a,
+	0xa8, 0xaf, 0xb5, 0xe3, 0xbb, 0x77, 0x52, 0xec,
+	0x59, 0x84, 0xbf, 0x6b, 0x8f, 0xce, 0x86, 0x5e,
+	0x1f, 0x23, 0xe9, 0xfb, 0x08, 0x86, 0xf7, 0x10,
+	0xb9, 0xf2, 0x44, 0x96, 0x44, 0x63, 0xa9, 0xa8,
+	0x78, 0x00, 0x23, 0xd6, 0xc7, 0xe7, 0x6e, 0x66,
+	0x4f, 0xcc, 0xee, 0x15, 0xb3, 0xbd, 0x1d, 0xa0,
+	0xe5, 0x9c, 0x1b, 0x24, 0x2c, 0x4d, 0x3c, 0x62,
+	0x35, 0x9c, 0x88, 0x59, 0x09, 0xdd, 0x82, 0x1b,
+	0xcf, 0x0a, 0x83, 0x6b, 0x3f, 0xae, 0x03, 0xc4,
+	0xb4, 0xdd, 0x7e, 0x5b, 0x28, 0x76, 0x25, 0x96,
+	0xd9, 0xc9, 0x9d, 0x5f, 0x86, 0xfa, 0xf6, 0xd7,
+	0xd2, 0xe6, 0x76, 0x1d, 0x0f, 0xa1, 0xdc, 0x74,
+	0x05, 0x1b, 0x1d, 0xe0, 0xcd, 0x16, 0xb0, 0xa8,
+	0x8a, 0x34, 0x7b, 0x15, 0x11, 0x77, 0xe5, 0x7b,
+	0x7e, 0x20, 0xf7, 0xda, 0x38, 0xda, 0xce, 0x70,
+	0xe9, 0xf5, 0x6c, 0xd9, 0xbe, 0x0c, 0x4c, 0x95,
+	0x4c, 0xc2, 0x9b, 0x34, 0x55, 0x55, 0xe1, 0xf3,
+	0x46, 0x8e, 0x48, 0x74, 0x14, 0x4f, 0x9d, 0xc9,
+	0xf5, 0xe8, 0x1a, 0xf0, 0x11, 0x4a, 0xc1, 0x8d,
+	0xe0, 0x93, 0xa0, 0xbe, 0x09, 0x1c, 0x2b, 0x4e,
+	0x0f, 0xb2, 0x87, 0x8b, 0x84, 0xfe, 0x92, 0x32,
+	0x14, 0xd7, 0x93, 0xdf, 0xe7, 0x44, 0xbc, 0xc5,
+	0xae, 0x53, 0x69, 0xd8, 0xb3, 0x79, 0x37, 0x80,
+	0xe3, 0x17, 0x5c, 0xec, 0x53, 0x00, 0x9a, 0xe3,
+	0x8e, 0xdc, 0x38, 0xb8, 0x66, 0xf0, 0xd3, 0xad,
+	0x1d, 0x02, 0x96, 0x86, 0x3e, 0x9d, 0x3b, 0x5d,
+	0xa5, 0x7f, 0x21, 0x10, 0xf1, 0x1f, 0x13, 0x20,
+	0xf9, 0x57, 0x87, 0x20, 0xf5, 0x5f, 0xf1, 0x17,
+	0x48, 0x0a, 0x51, 0x5a, 0xcd, 0x19, 0x03, 0xa6,
+	0x5a, 0xd1, 0x12, 0x97, 0xe9, 0x48, 0xe2, 0x1d,
+	0x83, 0x75, 0x50, 0xd9, 0x75, 0x7d, 0x6a, 0x82,
+	0xa1, 0xf9, 0x4e, 0x54, 0x87, 0x89, 0xc9, 0x0c,
+	0xb7, 0x5b, 0x6a, 0x91, 0xc1, 0x9c, 0xb2, 0xa9,
+	0xdc, 0x9a, 0xa4, 0x49, 0x0a, 0x6d, 0x0d, 0xbb,
+	0xde, 0x86, 0x44, 0xdd, 0x5d, 0x89, 0x2b, 0x96,
+	0x0f, 0x23, 0x95, 0xad, 0xcc, 0xa2, 0xb3, 0xb9,
+	0x7e, 0x74, 0x38, 0xba, 0x9f, 0x73, 0xae, 0x5f,
+	0xf8, 0x68, 0xa2, 0xe0, 0xa9, 0xce, 0xbd, 0x40,
+	0xd4, 0x4c, 0x6b, 0xd2, 0x56, 0x62, 0xb0, 0xcc,
+	0x63, 0x7e, 0x5b, 0xd3, 0xae, 0xd1, 0x75, 0xce,
+	0xbb, 0xb4, 0x5b, 0xa8, 0xf8, 0xb4, 0xac, 0x71,
+	0x75, 0xaa, 0xc9, 0x9f, 0xbb, 0x6c, 0xad, 0x0f,
+	0x55, 0x5d, 0xe8, 0x85, 0x7d, 0xf9, 0x21, 0x35,
+	0xea, 0x92, 0x85, 0x2b, 0x00, 0xec, 0x84, 0x90,
+	0x0a, 0x63, 0x96, 0xe4, 0x6b, 0xa9, 0x77, 0xb8,
+	0x91, 0xf8, 0x46, 0x15, 0x72, 0x63, 0x70, 0x01,
+	0x40, 0xa3, 0xa5, 0x76, 0x62, 0x2b, 0xbf, 0xf1,
+	0xe5, 0x8d, 0x9f, 0xa3, 0xfa, 0x9b, 0x03, 0xbe,
+	0xfe, 0x65, 0x6f, 0xa2, 0x29, 0x0d, 0x54, 0xb4,
+	0x71, 0xce, 0xa9, 0xd6, 0x3d, 0x88, 0xf9, 0xaf,
+	0x6b, 0xa8, 0x9e, 0xf4, 0x16, 0x96, 0x36, 0xb9,
+	0x00, 0xdc, 0x10, 0xab, 0xb5, 0x08, 0x31, 0x1f,
+	0x00, 0xb1, 0x3c, 0xd9, 0x38, 0x3e, 0xc6, 0x04,
+	0xa7, 0x4e, 0xe8, 0xae, 0xed, 0x98, 0xc2, 0xf7,
+	0xb9, 0x00, 0x5f, 0x8c, 0x60, 0xd1, 0xe5, 0x15,
+	0xf7, 0xae, 0x1e, 0x84, 0x88, 0xd1, 0xf6, 0xbc,
+	0x3a, 0x89, 0x35, 0x22, 0x83, 0x7c, 0xca, 0xf0,
+	0x33, 0x82, 0x4c, 0x79, 0x3c, 0xfd, 0xb1, 0xae,
+	0x52, 0x62, 0x55, 0xd2, 0x41, 0x60, 0xc6, 0xbb,
+	0xfa, 0x0e, 0x59, 0xd6, 0xa8, 0xfe, 0x5d, 0xed,
+	0x47, 0x3d, 0xe0, 0xea, 0x1f, 0x6e, 0x43, 0x51,
+	0xec, 0x10, 0x52, 0x56, 0x77, 0x42, 0x6b, 0x52,
+	0x87, 0xd8, 0xec, 0xe0, 0xaa, 0x76, 0xa5, 0x84,
+	0x2a, 0x22, 0x24, 0xfd, 0x92, 0x40, 0x88, 0xd5,
+	0x85, 0x1c, 0x1f, 0x6b, 0x47, 0xa0, 0xc4, 0xe4,
+	0xef, 0xf4, 0xea, 0xd7, 0x59, 0xac, 0x2a, 0x9e,
+	0x8c, 0xfa, 0x1f, 0x42, 0x08, 0xfe, 0x4f, 0x74,
+	0xa0, 0x26, 0xf5, 0xb3, 0x84, 0xf6, 0x58, 0x5f,
+	0x26, 0x66, 0x3e, 0xd7, 0xe4, 0x22, 0x91, 0x13,
+	0xc8, 0xac, 0x25, 0x96, 0x23, 0xd8, 0x09, 0xea,
+	0x45, 0x75, 0x23, 0xb8, 0x5f, 0xc2, 0x90, 0x8b,
+	0x09, 0xc4, 0xfc, 0x47, 0x6c, 0x6d, 0x0a, 0xef,
+	0x69, 0xa4, 0x38, 0x19, 0xcf, 0x7d, 0xf9, 0x09,
+	0x73, 0x9b, 0x60, 0x5a, 0xf7, 0x37, 0xb5, 0xfe,
+	0x9f, 0xe3, 0x2b, 0x4c, 0x0d, 0x6e, 0x19, 0xf1,
+	0xd6, 0xc0, 0x70, 0xf3, 0x9d, 0x22, 0x3c, 0xf9,
+	0x49, 0xce, 0x30, 0x8e, 0x44, 0xb5, 0x76, 0x15,
+	0x8f, 0x52, 0xfd, 0xa5, 0x04, 0xb8, 0x55, 0x6a,
+	0x36, 0x59, 0x7c, 0xc4, 0x48, 0xb8, 0xd7, 0xab,
+	0x05, 0x66, 0xe9, 0x5e, 0x21, 0x6f, 0x6b, 0x36,
+	0x29, 0xbb, 0xe9, 0xe3, 0xa2, 0x9a, 0xa8, 0xcd,
+	0x55, 0x25, 0x11, 0xba, 0x5a, 0x58, 0xa0, 0xde,
+	0xae, 0x19, 0x2a, 0x48, 0x5a, 0xff, 0x36, 0xcd,
+	0x6d, 0x16, 0x7a, 0x73, 0x38, 0x46, 0xe5, 0x47,
+	0x59, 0xc8, 0xa2, 0xf6, 0xe2, 0x6c, 0x83, 0xc5,
+	0x36, 0x2c, 0x83, 0x7d, 0xb4, 0x01, 0x05, 0x69,
+	0xe7, 0xaf, 0x5c, 0xc4, 0x64, 0x82, 0x12, 0x21,
+	0xef, 0xf7, 0xd1, 0x7d, 0xb8, 0x8d, 0x8c, 0x98,
+	0x7c, 0x5f, 0x7d, 0x92, 0x88, 0xb9, 0x94, 0x07,
+	0x9c, 0xd8, 0xe9, 0x9c, 0x17, 0x38, 0xe3, 0x57,
+	0x6c, 0xe0, 0xdc, 0xa5, 0x92, 0x42, 0xb3, 0xbd,
+	0x50, 0xa2, 0x7e, 0xb5, 0xb1, 0x52, 0x72, 0x03,
+	0x97, 0xd8, 0xaa, 0x9a, 0x1e, 0x75, 0x41, 0x11,
+	0xa3, 0x4f, 0xcc, 0xd4, 0xe3, 0x73, 0xad, 0x96,
+	0xdc, 0x47, 0x41, 0x9f, 0xb0, 0xbe, 0x79, 0x91,
+	0xf5, 0xb6, 0x18, 0xfe, 0xc2, 0x83, 0x18, 0x7d,
+	0x73, 0xd9, 0x4f, 0x83, 0x84, 0x03, 0xb3, 0xf0,
+	0x77, 0x66, 0x3d, 0x83, 0x63, 0x2e, 0x2c, 0xf9,
+	0xdd, 0xa6, 0x1f, 0x89, 0x82, 0xb8, 0x23, 0x42,
+	0xeb, 0xe2, 0xca, 0x70, 0x82, 0x61, 0x41, 0x0a,
+	0x6d, 0x5f, 0x75, 0xc5, 0xe2, 0xc4, 0x91, 0x18,
+	0x44, 0x22, 0xfa, 0x34, 0x10, 0xf5, 0x20, 0xdc,
+	0xb7, 0xdd, 0x2a, 0x20, 0x77, 0xf5, 0xf9, 0xce,
+	0xdb, 0xa0, 0x0a, 0x52, 0x2a, 0x4e, 0xdd, 0xcc,
+	0x97, 0xdf, 0x05, 0xe4, 0x5e, 0xb7, 0xaa, 0xf0,
+	0xe2, 0x80, 0xff, 0xba, 0x1a, 0x0f, 0xac, 0xdf,
+	0x02, 0x32, 0xe6, 0xf7, 0xc7, 0x17, 0x13, 0xb7,
+	0xfc, 0x98, 0x48, 0x8c, 0x0d, 0x82, 0xc9, 0x80,
+	0x7a, 0xe2, 0x0a, 0xc5, 0xb4, 0xde, 0x7c, 0x3c,
+	0x79, 0x81, 0x0e, 0x28, 0x65, 0x79, 0x67, 0x82,
+	0x69, 0x44, 0x66, 0x09, 0xf7, 0x16, 0x1a, 0xf9,
+	0x7d, 0x80, 0xa1, 0x79, 0x14, 0xa9, 0xc8, 0x20,
+	0xfb, 0xa2, 0x46, 0xbe, 0x08, 0x35, 0x17, 0x58,
+	0xc1, 0x1a, 0xda, 0x2a, 0x6b, 0x2e, 0x1e, 0xe6,
+	0x27, 0x55, 0x7b, 0x19, 0xe2, 0xfb, 0x64, 0xfc,
+	0x5e, 0x15, 0x54, 0x3c, 0xe7, 0xc2, 0x11, 0x50,
+	0x30, 0xb8, 0x72, 0x03, 0x0b, 0x1a, 0x9f, 0x86,
+	0x27, 0x11, 0x5c, 0x06, 0x2b, 0xbd, 0x75, 0x1a,
+	0x0a, 0xda, 0x01, 0xfa, 0x5c, 0x4a, 0xc1, 0x80,
+	0x3a, 0x6e, 0x30, 0xc8, 0x2c, 0xeb, 0x56, 0xec,
+	0x89, 0xfa, 0x35, 0x7b, 0xb2, 0xf0, 0x97, 0x08,
+	0x86, 0x53, 0xbe, 0xbd, 0x40, 0x41, 0x38, 0x1c,
+	0xb4, 0x8b, 0x79, 0x2e, 0x18, 0x96, 0x94, 0xde,
+	0xe8, 0xca, 0xe5, 0x9f, 0x92, 0x9f, 0x15, 0x5d,
+	0x56, 0x60, 0x5c, 0x09, 0xf9, 0x16, 0xf4, 0x17,
+	0x0f, 0xf6, 0x4c, 0xda, 0xe6, 0x67, 0x89, 0x9f,
+	0xca, 0x6c, 0xe7, 0x9b, 0x04, 0x62, 0x0e, 0x26,
+	0xa6, 0x52, 0xbd, 0x29, 0xff, 0xc7, 0xa4, 0x96,
+	0xe6, 0x6a, 0x02, 0xa5, 0x2e, 0x7b, 0xfe, 0x97,
+	0x68, 0x3e, 0x2e, 0x5f, 0x3b, 0x0f, 0x36, 0xd6,
+	0x98, 0x19, 0x59, 0x48, 0xd2, 0xc6, 0xe1, 0x55,
+	0x1a, 0x6e, 0xd6, 0xed, 0x2c, 0xba, 0xc3, 0x9e,
+	0x64, 0xc9, 0x95, 0x86, 0x35, 0x5e, 0x3e, 0x88,
+	0x69, 0x99, 0x4b, 0xee, 0xbe, 0x9a, 0x99, 0xb5,
+	0x6e, 0x58, 0xae, 0xdd, 0x22, 0xdb, 0xdd, 0x6b,
+	0xfc, 0xaf, 0x90, 0xa3, 0x3d, 0xa4, 0xc1, 0x15,
+	0x92, 0x18, 0x8d, 0xd2, 0x4b, 0x7b, 0x06, 0xd1,
+	0x37, 0xb5, 0xe2, 0x7c, 0x2c, 0xf0, 0x25, 0xe4,
+	0x94, 0x2a, 0xbd, 0xe3, 0x82, 0x70, 0x78, 0xa3,
+	0x82, 0x10, 0x5a, 0x90, 0xd7, 0xa4, 0xfa, 0xaf,
+	0x1a, 0x88, 0x59, 0xdc, 0x74, 0x12, 0xb4, 0x8e,
+	0xd7, 0x19, 0x46, 0xf4, 0x84, 0x69, 0x9f, 0xbb,
+	0x70, 0xa8, 0x4c, 0x52, 0x81, 0xa9, 0xff, 0x76,
+	0x1c, 0xae, 0xd8, 0x11, 0x3d, 0x7f, 0x7d, 0xc5,
+	0x12, 0x59, 0x28, 0x18, 0xc2, 0xa2, 0xb7, 0x1c,
+	0x88, 0xf8, 0xd6, 0x1b, 0xa6, 0x7d, 0x9e, 0xde,
+	0x29, 0xf8, 0xed, 0xff, 0xeb, 0x92, 0x24, 0x4f,
+	0x05, 0xaa, 0xd9, 0x49, 0xba, 0x87, 0x59, 0x51,
+	0xc9, 0x20, 0x5c, 0x9b, 0x74, 0xcf, 0x03, 0xd9,
+	0x2d, 0x34, 0xc7, 0x5b, 0xa5, 0x40, 0xb2, 0x99,
+	0xf5, 0xcb, 0xb4, 0xf6, 0xb7, 0x72, 0x4a, 0xd6,
+	0xbd, 0xb0, 0xf3, 0x93, 0xe0, 0x1b, 0xa8, 0x04,
+	0x1e, 0x35, 0xd4, 0x80, 0x20, 0xf4, 0x9c, 0x31,
+	0x6b, 0x45, 0xb9, 0x15, 0xb0, 0x5e, 0xdd, 0x0a,
+	0x33, 0x9c, 0x83, 0xcd, 0x58, 0x89, 0x50, 0x56,
+	0xbb, 0x81, 0x00, 0x91, 0x32, 0xf3, 0x1b, 0x3e,
+	0xcf, 0x45, 0xe1, 0xf9, 0xe1, 0x2c, 0x26, 0x78,
+	0x93, 0x9a, 0x60, 0x46, 0xc9, 0xb5, 0x5e, 0x6a,
+	0x28, 0x92, 0x87, 0x3f, 0x63, 0x7b, 0xdb, 0xf7,
+	0xd0, 0x13, 0x9d, 0x32, 0x40, 0x5e, 0xcf, 0xfb,
+	0x79, 0x68, 0x47, 0x4c, 0xfd, 0x01, 0x17, 0xe6,
+	0x97, 0x93, 0x78, 0xbb, 0xa6, 0x27, 0xa3, 0xe8,
+	0x1a, 0xe8, 0x94, 0x55, 0x7d, 0x08, 0xe5, 0xdc,
+	0x66, 0xa3, 0x69, 0xc8, 0xca, 0xc5, 0xa1, 0x84,
+	0x55, 0xde, 0x08, 0x91, 0x16, 0x3a, 0x0c, 0x86,
+	0xab, 0x27, 0x2b, 0x64, 0x34, 0x02, 0x6c, 0x76,
+	0x8b, 0xc6, 0xaf, 0xcc, 0xe1, 0xd6, 0x8c, 0x2a,
+	0x18, 0x3d, 0xa6, 0x1b, 0x37, 0x75, 0x45, 0x73,
+	0xc2, 0x75, 0xd7, 0x53, 0x78, 0x3a, 0xd6, 0xe8,
+	0x29, 0xd2, 0x4a, 0xa8, 0x1e, 0x82, 0xf6, 0xb6,
+	0x81, 0xde, 0x21, 0xed, 0x2b, 0x56, 0xbb, 0xf2,
+	0xd0, 0x57, 0xc1, 0x7c, 0xd2, 0x6a, 0xd2, 0x56,
+	0xf5, 0x13, 0x5f, 0x1c, 0x6a, 0x0b, 0x74, 0xfb,
+	0xe9, 0xfe, 0x9e, 0xea, 0x95, 0xb2, 0x46, 0xab,
+	0x0a, 0xfc, 0xfd, 0xf3, 0xbb, 0x04, 0x2b, 0x76,
+	0x1b, 0xa4, 0x74, 0xb0, 0xc1, 0x78, 0xc3, 0x69,
+	0xe2, 0xb0, 0x01, 0xe1, 0xde, 0x32, 0x4c, 0x8d,
+	0x1a, 0xb3, 0x38, 0x08, 0xd5, 0xfc, 0x1f, 0xdc,
+	0x0e, 0x2c, 0x9c, 0xb1, 0xa1, 0x63, 0x17, 0x22,
+	0xf5, 0x6c, 0x93, 0x70, 0x74, 0x00, 0xf8, 0x39,
+	0x01, 0x94, 0xd1, 0x32, 0x23, 0x56, 0x5d, 0xa6,
+	0x02, 0x76, 0x76, 0x93, 0xce, 0x2f, 0x19, 0xe9,
+	0x17, 0x52, 0xae, 0x6e, 0x2c, 0x6d, 0x61, 0x7f,
+	0x3b, 0xaa, 0xe0, 0x52, 0x85, 0xc5, 0x65, 0xc1,
+	0xbb, 0x8e, 0x5b, 0x21, 0xd5, 0xc9, 0x78, 0x83,
+	0x07, 0x97, 0x4c, 0x62, 0x61, 0x41, 0xd4, 0xfc,
+	0xc9, 0x39, 0xe3, 0x9b, 0xd0, 0xcc, 0x75, 0xc4,
+	0x97, 0xe6, 0xdd, 0x2a, 0x5f, 0xa6, 0xe8, 0x59,
+	0x6c, 0x98, 0xb9, 0x02, 0xe2, 0xa2, 0xd6, 0x68,
+	0xee, 0x3b, 0x1d, 0xe3, 0x4d, 0x5b, 0x30, 0xef,
+	0x03, 0xf2, 0xeb, 0x18, 0x57, 0x36, 0xe8, 0xa1,
+	0xf4, 0x47, 0xfb, 0xcb, 0x8f, 0xcb, 0xc8, 0xf3,
+	0x4f, 0x74, 0x9d, 0x9d, 0xb1, 0x8d, 0x14, 0x44,
+	0xd9, 0x19, 0xb4, 0x54, 0x4f, 0x75, 0x19, 0x09,
+	0xa0, 0x75, 0xbc, 0x3b, 0x82, 0xc6, 0x3f, 0xb8,
+	0x83, 0x19, 0x6e, 0xd6, 0x37, 0xfe, 0x6e, 0x8a,
+	0x4e, 0xe0, 0x4a, 0xab, 0x7b, 0xc8, 0xb4, 0x1d,
+	0xf4, 0xed, 0x27, 0x03, 0x65, 0xa2, 0xa1, 0xae,
+	0x11, 0xe7, 0x98, 0x78, 0x48, 0x91, 0xd2, 0xd2,
+	0xd4, 0x23, 0x78, 0x50, 0xb1, 0x5b, 0x85, 0x10,
+	0x8d, 0xca, 0x5f, 0x0f, 0x71, 0xae, 0x72, 0x9a,
+	0xf6, 0x25, 0x19, 0x60, 0x06, 0xf7, 0x10, 0x34,
+	0x18, 0x0d, 0xc9, 0x9f, 0x7b, 0x0c, 0x9b, 0x8f,
+	0x91, 0x1b, 0x9f, 0xcd, 0x10, 0xee, 0x75, 0xf9,
+	0x97, 0x66, 0xfc, 0x4d, 0x33, 0x6e, 0x28, 0x2b,
+	0x92, 0x85, 0x4f, 0xab, 0x43, 0x8d, 0x8f, 0x7d,
+	0x86, 0xa7, 0xc7, 0xd8, 0xd3, 0x0b, 0x8b, 0x57,
+	0xb6, 0x1d, 0x95, 0x0d, 0xe9, 0xbc, 0xd9, 0x03,
+	0xd9, 0x10, 0x19, 0xc3, 0x46, 0x63, 0x55, 0x87,
+	0x61, 0x79, 0x6c, 0x95, 0x0e, 0x9c, 0xdd, 0xca,
+	0xc3, 0xf3, 0x64, 0xf0, 0x7d, 0x76, 0xb7, 0x53,
+	0x67, 0x2b, 0x1e, 0x44, 0x56, 0x81, 0xea, 0x8f,
+	0x5c, 0x42, 0x16, 0xb8, 0x28, 0xeb, 0x1b, 0x61,
+	0x10, 0x1e, 0xbf, 0xec, 0xa8
+};
+static const u8 dec_assoc011[] __initconst = {
+	0xd6, 0x31, 0xda, 0x5d, 0x42, 0x5e, 0xd7
+};
+static const u8 dec_nonce011[] __initconst = {
+	0xfd, 0x87, 0xd4, 0xd8, 0x62, 0xfd, 0xec, 0xaa
+};
+static const u8 dec_key011[] __initconst = {
+	0x35, 0x4e, 0xb5, 0x70, 0x50, 0x42, 0x8a, 0x85,
+	0xf2, 0xfb, 0xed, 0x7b, 0xd0, 0x9e, 0x97, 0xca,
+	0xfa, 0x98, 0x66, 0x63, 0xee, 0x37, 0xcc, 0x52,
+	0xfe, 0xd1, 0xdf, 0x95, 0x15, 0x34, 0x29, 0x38
+};
+
+static const u8 dec_input012[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd6
+};
+static const u8 dec_output012[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 dec_assoc012[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 dec_nonce012[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 dec_key012[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+static const u8 dec_input013[] __initconst = {
+	0x52, 0x34, 0xb3, 0x65, 0x3b, 0xb7, 0xe5, 0xd3,
+	0xab, 0x49, 0x17, 0x60, 0xd2, 0x52, 0x56, 0xdf,
+	0xdf, 0x34, 0x56, 0x82, 0xe2, 0xbe, 0xe5, 0xe1,
+	0x28, 0xd1, 0x4e, 0x5f, 0x4f, 0x01, 0x7d, 0x3f,
+	0x99, 0x6b, 0x30, 0x6e, 0x1a, 0x7c, 0x4c, 0x8e,
+	0x62, 0x81, 0xae, 0x86, 0x3f, 0x6b, 0xd0, 0xb5,
+	0xa9, 0xcf, 0x50, 0xf1, 0x02, 0x12, 0xa0, 0x0b,
+	0x24, 0xe9, 0xe6, 0x72, 0x89, 0x2c, 0x52, 0x1b,
+	0x34, 0x38, 0xf8, 0x75, 0x5f, 0xa0, 0x74, 0xe2,
+	0x99, 0xdd, 0xa6, 0x4b, 0x14, 0x50, 0x4e, 0xf1,
+	0xbe, 0xd6, 0x9e, 0xdb, 0xb2, 0x24, 0x27, 0x74,
+	0x12, 0x4a, 0x78, 0x78, 0x17, 0xa5, 0x58, 0x8e,
+	0x2f, 0xf9, 0xf4, 0x8d, 0xee, 0x03, 0x88, 0xae,
+	0xb8, 0x29, 0xa1, 0x2f, 0x4b, 0xee, 0x92, 0xbd,
+	0x87, 0xb3, 0xce, 0x34, 0x21, 0x57, 0x46, 0x04,
+	0x49, 0x0c, 0x80, 0xf2, 0x01, 0x13, 0xa1, 0x55,
+	0xb3, 0xff, 0x44, 0x30, 0x3c, 0x1c, 0xd0, 0xef,
+	0xbc, 0x18, 0x74, 0x26, 0xad, 0x41, 0x5b, 0x5b,
+	0x3e, 0x9a, 0x7a, 0x46, 0x4f, 0x16, 0xd6, 0x74,
+	0x5a, 0xb7, 0x3a, 0x28, 0x31, 0xd8, 0xae, 0x26,
+	0xac, 0x50, 0x53, 0x86, 0xf2, 0x56, 0xd7, 0x3f,
+	0x29, 0xbc, 0x45, 0x68, 0x8e, 0xcb, 0x98, 0x64,
+	0xdd, 0xc9, 0xba, 0xb8, 0x4b, 0x7b, 0x82, 0xdd,
+	0x14, 0xa7, 0xcb, 0x71, 0x72, 0x00, 0x5c, 0xad,
+	0x7b, 0x6a, 0x89, 0xa4, 0x3d, 0xbf, 0xb5, 0x4b,
+	0x3e, 0x7c, 0x5a, 0xcf, 0xb8, 0xa1, 0xc5, 0x6e,
+	0xc8, 0xb6, 0x31, 0x57, 0x7b, 0xdf, 0xa5, 0x7e,
+	0xb1, 0xd6, 0x42, 0x2a, 0x31, 0x36, 0xd1, 0xd0,
+	0x3f, 0x7a, 0xe5, 0x94, 0xd6, 0x36, 0xa0, 0x6f,
+	0xb7, 0x40, 0x7d, 0x37, 0xc6, 0x55, 0x7c, 0x50,
+	0x40, 0x6d, 0x29, 0x89, 0xe3, 0x5a, 0xae, 0x97,
+	0xe7, 0x44, 0x49, 0x6e, 0xbd, 0x81, 0x3d, 0x03,
+	0x93, 0x06, 0x12, 0x06, 0xe2, 0x41, 0x12, 0x4a,
+	0xf1, 0x6a, 0xa4, 0x58, 0xa2, 0xfb, 0xd2, 0x15,
+	0xba, 0xc9, 0x79, 0xc9, 0xce, 0x5e, 0x13, 0xbb,
+	0xf1, 0x09, 0x04, 0xcc, 0xfd, 0xe8, 0x51, 0x34,
+	0x6a, 0xe8, 0x61, 0x88, 0xda, 0xed, 0x01, 0x47,
+	0x84, 0xf5, 0x73, 0x25, 0xf9, 0x1c, 0x42, 0x86,
+	0x07, 0xf3, 0x5b, 0x1a, 0x01, 0xb3, 0xeb, 0x24,
+	0x32, 0x8d, 0xf6, 0xed, 0x7c, 0x4b, 0xeb, 0x3c,
+	0x36, 0x42, 0x28, 0xdf, 0xdf, 0xb6, 0xbe, 0xd9,
+	0x8c, 0x52, 0xd3, 0x2b, 0x08, 0x90, 0x8c, 0xe7,
+	0x98, 0x31, 0xe2, 0x32, 0x8e, 0xfc, 0x11, 0x48,
+	0x00, 0xa8, 0x6a, 0x42, 0x4a, 0x02, 0xc6, 0x4b,
+	0x09, 0xf1, 0xe3, 0x49, 0xf3, 0x45, 0x1f, 0x0e,
+	0xbc, 0x56, 0xe2, 0xe4, 0xdf, 0xfb, 0xeb, 0x61,
+	0xfa, 0x24, 0xc1, 0x63, 0x75, 0xbb, 0x47, 0x75,
+	0xaf, 0xe1, 0x53, 0x16, 0x96, 0x21, 0x85, 0x26,
+	0x11, 0xb3, 0x76, 0xe3, 0x23, 0xa1, 0x6b, 0x74,
+	0x37, 0xd0, 0xde, 0x06, 0x90, 0x71, 0x5d, 0x43,
+	0x88, 0x9b, 0x00, 0x54, 0xa6, 0x75, 0x2f, 0xa1,
+	0xc2, 0x0b, 0x73, 0x20, 0x1d, 0xb6, 0x21, 0x79,
+	0x57, 0x3f, 0xfa, 0x09, 0xbe, 0x8a, 0x33, 0xc3,
+	0x52, 0xf0, 0x1d, 0x82, 0x31, 0xd1, 0x55, 0xb5,
+	0x6c, 0x99, 0x25, 0xcf, 0x5c, 0x32, 0xce, 0xe9,
+	0x0d, 0xfa, 0x69, 0x2c, 0xd5, 0x0d, 0xc5, 0x6d,
+	0x86, 0xd0, 0x0c, 0x3b, 0x06, 0x50, 0x79, 0xe8,
+	0xc3, 0xae, 0x04, 0xe6, 0xcd, 0x51, 0xe4, 0x26,
+	0x9b, 0x4f, 0x7e, 0xa6, 0x0f, 0xab, 0xd8, 0xe5,
+	0xde, 0xa9, 0x00, 0x95, 0xbe, 0xa3, 0x9d, 0x5d,
+	0xb2, 0x09, 0x70, 0x18, 0x1c, 0xf0, 0xac, 0x29,
+	0x23, 0x02, 0x29, 0x28, 0xd2, 0x74, 0x35, 0x57,
+	0x62, 0x0f, 0x24, 0xea, 0x5e, 0x33, 0xc2, 0x92,
+	0xf3, 0x78, 0x4d, 0x30, 0x1e, 0xa1, 0x99, 0xa9,
+	0x82, 0xb0, 0x42, 0x31, 0x8d, 0xad, 0x8a, 0xbc,
+	0xfc, 0xd4, 0x57, 0x47, 0x3e, 0xb4, 0x50, 0xdd,
+	0x6e, 0x2c, 0x80, 0x4d, 0x22, 0xf1, 0xfb, 0x57,
+	0xc4, 0xdd, 0x17, 0xe1, 0x8a, 0x36, 0x4a, 0xb3,
+	0x37, 0xca, 0xc9, 0x4e, 0xab, 0xd5, 0x69, 0xc4,
+	0xf4, 0xbc, 0x0b, 0x3b, 0x44, 0x4b, 0x29, 0x9c,
+	0xee, 0xd4, 0x35, 0x22, 0x21, 0xb0, 0x1f, 0x27,
+	0x64, 0xa8, 0x51, 0x1b, 0xf0, 0x9f, 0x19, 0x5c,
+	0xfb, 0x5a, 0x64, 0x74, 0x70, 0x45, 0x09, 0xf5,
+	0x64, 0xfe, 0x1a, 0x2d, 0xc9, 0x14, 0x04, 0x14,
+	0xcf, 0xd5, 0x7d, 0x60, 0xaf, 0x94, 0x39, 0x94,
+	0xe2, 0x7d, 0x79, 0x82, 0xd0, 0x65, 0x3b, 0x6b,
+	0x9c, 0x19, 0x84, 0xb4, 0x6d, 0xb3, 0x0c, 0x99,
+	0xc0, 0x56, 0xa8, 0xbd, 0x73, 0xce, 0x05, 0x84,
+	0x3e, 0x30, 0xaa, 0xc4, 0x9b, 0x1b, 0x04, 0x2a,
+	0x9f, 0xd7, 0x43, 0x2b, 0x23, 0xdf, 0xbf, 0xaa,
+	0xd5, 0xc2, 0x43, 0x2d, 0x70, 0xab, 0xdc, 0x75,
+	0xad, 0xac, 0xf7, 0xc0, 0xbe, 0x67, 0xb2, 0x74,
+	0xed, 0x67, 0x10, 0x4a, 0x92, 0x60, 0xc1, 0x40,
+	0x50, 0x19, 0x8a, 0x8a, 0x8c, 0x09, 0x0e, 0x72,
+	0xe1, 0x73, 0x5e, 0xe8, 0x41, 0x85, 0x63, 0x9f,
+	0x3f, 0xd7, 0x7d, 0xc4, 0xfb, 0x22, 0x5d, 0x92,
+	0x6c, 0xb3, 0x1e, 0xe2, 0x50, 0x2f, 0x82, 0xa8,
+	0x28, 0xc0, 0xb5, 0xd7, 0x5f, 0x68, 0x0d, 0x2c,
+	0x2d, 0xaf, 0x7e, 0xfa, 0x2e, 0x08, 0x0f, 0x1f,
+	0x70, 0x9f, 0xe9, 0x19, 0x72, 0x55, 0xf8, 0xfb,
+	0x51, 0xd2, 0x33, 0x5d, 0xa0, 0xd3, 0x2b, 0x0a,
+	0x6c, 0xbc, 0x4e, 0xcf, 0x36, 0x4d, 0xdc, 0x3b,
+	0xe9, 0x3e, 0x81, 0x7c, 0x61, 0xdb, 0x20, 0x2d,
+	0x3a, 0xc3, 0xb3, 0x0c, 0x1e, 0x00, 0xb9, 0x7c,
+	0xf5, 0xca, 0x10, 0x5f, 0x3a, 0x71, 0xb3, 0xe4,
+	0x20, 0xdb, 0x0c, 0x2a, 0x98, 0x63, 0x45, 0x00,
+	0x58, 0xf6, 0x68, 0xe4, 0x0b, 0xda, 0x13, 0x3b,
+	0x60, 0x5c, 0x76, 0xdb, 0xb9, 0x97, 0x71, 0xe4,
+	0xd9, 0xb7, 0xdb, 0xbd, 0x68, 0xc7, 0x84, 0x84,
+	0xaa, 0x7c, 0x68, 0x62, 0x5e, 0x16, 0xfc, 0xba,
+	0x72, 0xaa, 0x9a, 0xa9, 0xeb, 0x7c, 0x75, 0x47,
+	0x97, 0x7e, 0xad, 0xe2, 0xd9, 0x91, 0xe8, 0xe4,
+	0xa5, 0x31, 0xd7, 0x01, 0x8e, 0xa2, 0x11, 0x88,
+	0x95, 0xb9, 0xf2, 0x9b, 0xd3, 0x7f, 0x1b, 0x81,
+	0x22, 0xf7, 0x98, 0x60, 0x0a, 0x64, 0xa6, 0xc1,
+	0xf6, 0x49, 0xc7, 0xe3, 0x07, 0x4d, 0x94, 0x7a,
+	0xcf, 0x6e, 0x68, 0x0c, 0x1b, 0x3f, 0x6e, 0x2e,
+	0xee, 0x92, 0xfa, 0x52, 0xb3, 0x59, 0xf8, 0xf1,
+	0x8f, 0x6a, 0x66, 0xa3, 0x82, 0x76, 0x4a, 0x07,
+	0x1a, 0xc7, 0xdd, 0xf5, 0xda, 0x9c, 0x3c, 0x24,
+	0xbf, 0xfd, 0x42, 0xa1, 0x10, 0x64, 0x6a, 0x0f,
+	0x89, 0xee, 0x36, 0xa5, 0xce, 0x99, 0x48, 0x6a,
+	0xf0, 0x9f, 0x9e, 0x69, 0xa4, 0x40, 0x20, 0xe9,
+	0x16, 0x15, 0xf7, 0xdb, 0x75, 0x02, 0xcb, 0xe9,
+	0x73, 0x8b, 0x3b, 0x49, 0x2f, 0xf0, 0xaf, 0x51,
+	0x06, 0x5c, 0xdf, 0x27, 0x27, 0x49, 0x6a, 0xd1,
+	0xcc, 0xc7, 0xb5, 0x63, 0xb5, 0xfc, 0xb8, 0x5c,
+	0x87, 0x7f, 0x84, 0xb4, 0xcc, 0x14, 0xa9, 0x53,
+	0xda, 0xa4, 0x56, 0xf8, 0xb6, 0x1b, 0xcc, 0x40,
+	0x27, 0x52, 0x06, 0x5a, 0x13, 0x81, 0xd7, 0x3a,
+	0xd4, 0x3b, 0xfb, 0x49, 0x65, 0x31, 0x33, 0xb2,
+	0xfa, 0xcd, 0xad, 0x58, 0x4e, 0x2b, 0xae, 0xd2,
+	0x20, 0xfb, 0x1a, 0x48, 0xb4, 0x3f, 0x9a, 0xd8,
+	0x7a, 0x35, 0x4a, 0xc8, 0xee, 0x88, 0x5e, 0x07,
+	0x66, 0x54, 0xb9, 0xec, 0x9f, 0xa3, 0xe3, 0xb9,
+	0x37, 0xaa, 0x49, 0x76, 0x31, 0xda, 0x74, 0x2d,
+	0x3c, 0xa4, 0x65, 0x10, 0x32, 0x38, 0xf0, 0xde,
+	0xd3, 0x99, 0x17, 0xaa, 0x71, 0xaa, 0x8f, 0x0f,
+	0x8c, 0xaf, 0xa2, 0xf8, 0x5d, 0x64, 0xba, 0x1d,
+	0xa3, 0xef, 0x96, 0x73, 0xe8, 0xa1, 0x02, 0x8d,
+	0x0c, 0x6d, 0xb8, 0x06, 0x90, 0xb8, 0x08, 0x56,
+	0x2c, 0xa7, 0x06, 0xc9, 0xc2, 0x38, 0xdb, 0x7c,
+	0x63, 0xb1, 0x57, 0x8e, 0xea, 0x7c, 0x79, 0xf3,
+	0x49, 0x1d, 0xfe, 0x9f, 0xf3, 0x6e, 0xb1, 0x1d,
+	0xba, 0x19, 0x80, 0x1a, 0x0a, 0xd3, 0xb0, 0x26,
+	0x21, 0x40, 0xb1, 0x7c, 0xf9, 0x4d, 0x8d, 0x10,
+	0xc1, 0x7e, 0xf4, 0xf6, 0x3c, 0xa8, 0xfd, 0x7c,
+	0xa3, 0x92, 0xb2, 0x0f, 0xaa, 0xcc, 0xa6, 0x11,
+	0xfe, 0x04, 0xe3, 0xd1, 0x7a, 0x32, 0x89, 0xdf,
+	0x0d, 0xc4, 0x8f, 0x79, 0x6b, 0xca, 0x16, 0x7c,
+	0x6e, 0xf9, 0xad, 0x0f, 0xf6, 0xfe, 0x27, 0xdb,
+	0xc4, 0x13, 0x70, 0xf1, 0x62, 0x1a, 0x4f, 0x79,
+	0x40, 0xc9, 0x9b, 0x8b, 0x21, 0xea, 0x84, 0xfa,
+	0xf5, 0xf1, 0x89, 0xce, 0xb7, 0x55, 0x0a, 0x80,
+	0x39, 0x2f, 0x55, 0x36, 0x16, 0x9c, 0x7b, 0x08,
+	0xbd, 0x87, 0x0d, 0xa5, 0x32, 0xf1, 0x52, 0x7c,
+	0xe8, 0x55, 0x60, 0x5b, 0xd7, 0x69, 0xe4, 0xfc,
+	0xfa, 0x12, 0x85, 0x96, 0xea, 0x50, 0x28, 0xab,
+	0x8a, 0xf7, 0xbb, 0x0e, 0x53, 0x74, 0xca, 0xa6,
+	0x27, 0x09, 0xc2, 0xb5, 0xde, 0x18, 0x14, 0xd9,
+	0xea, 0xe5, 0x29, 0x1c, 0x40, 0x56, 0xcf, 0xd7,
+	0xae, 0x05, 0x3f, 0x65, 0xaf, 0x05, 0x73, 0xe2,
+	0x35, 0x96, 0x27, 0x07, 0x14, 0xc0, 0xad, 0x33,
+	0xf1, 0xdc, 0x44, 0x7a, 0x89, 0x17, 0x77, 0xd2,
+	0x9c, 0x58, 0x60, 0xf0, 0x3f, 0x7b, 0x2d, 0x2e,
+	0x57, 0x95, 0x54, 0x87, 0xed, 0xf2, 0xc7, 0x4c,
+	0xf0, 0xae, 0x56, 0x29, 0x19, 0x7d, 0x66, 0x4b,
+	0x9b, 0x83, 0x84, 0x42, 0x3b, 0x01, 0x25, 0x66,
+	0x8e, 0x02, 0xde, 0xb9, 0x83, 0x54, 0x19, 0xf6,
+	0x9f, 0x79, 0x0d, 0x67, 0xc5, 0x1d, 0x7a, 0x44,
+	0x02, 0x98, 0xa7, 0x16, 0x1c, 0x29, 0x0d, 0x74,
+	0xff, 0x85, 0x40, 0x06, 0xef, 0x2c, 0xa9, 0xc6,
+	0xf5, 0x53, 0x07, 0x06, 0xae, 0xe4, 0xfa, 0x5f,
+	0xd8, 0x39, 0x4d, 0xf1, 0x9b, 0x6b, 0xd9, 0x24,
+	0x84, 0xfe, 0x03, 0x4c, 0xb2, 0x3f, 0xdf, 0xa1,
+	0x05, 0x9e, 0x50, 0x14, 0x5a, 0xd9, 0x1a, 0xa2,
+	0xa7, 0xfa, 0xfa, 0x17, 0xf7, 0x78, 0xd6, 0xb5,
+	0x92, 0x61, 0x91, 0xac, 0x36, 0xfa, 0x56, 0x0d,
+	0x38, 0x32, 0x18, 0x85, 0x08, 0x58, 0x37, 0xf0,
+	0x4b, 0xdb, 0x59, 0xe7, 0xa4, 0x34, 0xc0, 0x1b,
+	0x01, 0xaf, 0x2d, 0xde, 0xa1, 0xaa, 0x5d, 0xd3,
+	0xec, 0xe1, 0xd4, 0xf7, 0xe6, 0x54, 0x68, 0xf0,
+	0x51, 0x97, 0xa7, 0x89, 0xea, 0x24, 0xad, 0xd3,
+	0x6e, 0x47, 0x93, 0x8b, 0x4b, 0xb4, 0xf7, 0x1c,
+	0x42, 0x06, 0x67, 0xe8, 0x99, 0xf6, 0xf5, 0x7b,
+	0x85, 0xb5, 0x65, 0xb5, 0xb5, 0xd2, 0x37, 0xf5,
+	0xf3, 0x02, 0xa6, 0x4d, 0x11, 0xa7, 0xdc, 0x51,
+	0x09, 0x7f, 0xa0, 0xd8, 0x88, 0x1c, 0x13, 0x71,
+	0xae, 0x9c, 0xb7, 0x7b, 0x34, 0xd6, 0x4e, 0x68,
+	0x26, 0x83, 0x51, 0xaf, 0x1d, 0xee, 0x8b, 0xbb,
+	0x69, 0x43, 0x2b, 0x9e, 0x8a, 0xbc, 0x02, 0x0e,
+	0xa0, 0x1b, 0xe0, 0xa8, 0x5f, 0x6f, 0xaf, 0x1b,
+	0x8f, 0xe7, 0x64, 0x71, 0x74, 0x11, 0x7e, 0xa8,
+	0xd8, 0xf9, 0x97, 0x06, 0xc3, 0xb6, 0xfb, 0xfb,
+	0xb7, 0x3d, 0x35, 0x9d, 0x3b, 0x52, 0xed, 0x54,
+	0xca, 0xf4, 0x81, 0x01, 0x2d, 0x1b, 0xc3, 0xa7,
+	0x00, 0x3d, 0x1a, 0x39, 0x54, 0xe1, 0xf6, 0xff,
+	0xed, 0x6f, 0x0b, 0x5a, 0x68, 0xda, 0x58, 0xdd,
+	0xa9, 0xcf, 0x5c, 0x4a, 0xe5, 0x09, 0x4e, 0xde,
+	0x9d, 0xbc, 0x3e, 0xee, 0x5a, 0x00, 0x3b, 0x2c,
+	0x87, 0x10, 0x65, 0x60, 0xdd, 0xd7, 0x56, 0xd1,
+	0x4c, 0x64, 0x45, 0xe4, 0x21, 0xec, 0x78, 0xf8,
+	0x25, 0x7a, 0x3e, 0x16, 0x5d, 0x09, 0x53, 0x14,
+	0xbe, 0x4f, 0xae, 0x87, 0xd8, 0xd1, 0xaa, 0x3c,
+	0xf6, 0x3e, 0xa4, 0x70, 0x8c, 0x5e, 0x70, 0xa4,
+	0xb3, 0x6b, 0x66, 0x73, 0xd3, 0xbf, 0x31, 0x06,
+	0x19, 0x62, 0x93, 0x15, 0xf2, 0x86, 0xe4, 0x52,
+	0x7e, 0x53, 0x4c, 0x12, 0x38, 0xcc, 0x34, 0x7d,
+	0x57, 0xf6, 0x42, 0x93, 0x8a, 0xc4, 0xee, 0x5c,
+	0x8a, 0xe1, 0x52, 0x8f, 0x56, 0x64, 0xf6, 0xa6,
+	0xd1, 0x91, 0x57, 0x70, 0xcd, 0x11, 0x76, 0xf5,
+	0x59, 0x60, 0x60, 0x3c, 0xc1, 0xc3, 0x0b, 0x7f,
+	0x58, 0x1a, 0x50, 0x91, 0xf1, 0x68, 0x8f, 0x6e,
+	0x74, 0x74, 0xa8, 0x51, 0x0b, 0xf7, 0x7a, 0x98,
+	0x37, 0xf2, 0x0a, 0x0e, 0xa4, 0x97, 0x04, 0xb8,
+	0x9b, 0xfd, 0xa0, 0xea, 0xf7, 0x0d, 0xe1, 0xdb,
+	0x03, 0xf0, 0x31, 0x29, 0xf8, 0xdd, 0x6b, 0x8b,
+	0x5d, 0xd8, 0x59, 0xa9, 0x29, 0xcf, 0x9a, 0x79,
+	0x89, 0x19, 0x63, 0x46, 0x09, 0x79, 0x6a, 0x11,
+	0xda, 0x63, 0x68, 0x48, 0x77, 0x23, 0xfb, 0x7d,
+	0x3a, 0x43, 0xcb, 0x02, 0x3b, 0x7a, 0x6d, 0x10,
+	0x2a, 0x9e, 0xac, 0xf1, 0xd4, 0x19, 0xf8, 0x23,
+	0x64, 0x1d, 0x2c, 0x5f, 0xf2, 0xb0, 0x5c, 0x23,
+	0x27, 0xf7, 0x27, 0x30, 0x16, 0x37, 0xb1, 0x90,
+	0xab, 0x38, 0xfb, 0x55, 0xcd, 0x78, 0x58, 0xd4,
+	0x7d, 0x43, 0xf6, 0x45, 0x5e, 0x55, 0x8d, 0xb1,
+	0x02, 0x65, 0x58, 0xb4, 0x13, 0x4b, 0x36, 0xf7,
+	0xcc, 0xfe, 0x3d, 0x0b, 0x82, 0xe2, 0x12, 0x11,
+	0xbb, 0xe6, 0xb8, 0x3a, 0x48, 0x71, 0xc7, 0x50,
+	0x06, 0x16, 0x3a, 0xe6, 0x7c, 0x05, 0xc7, 0xc8,
+	0x4d, 0x2f, 0x08, 0x6a, 0x17, 0x9a, 0x95, 0x97,
+	0x50, 0x68, 0xdc, 0x28, 0x18, 0xc4, 0x61, 0x38,
+	0xb9, 0xe0, 0x3e, 0x78, 0xdb, 0x29, 0xe0, 0x9f,
+	0x52, 0xdd, 0xf8, 0x4f, 0x91, 0xc1, 0xd0, 0x33,
+	0xa1, 0x7a, 0x8e, 0x30, 0x13, 0x82, 0x07, 0x9f,
+	0xd3, 0x31, 0x0f, 0x23, 0xbe, 0x32, 0x5a, 0x75,
+	0xcf, 0x96, 0xb2, 0xec, 0xb5, 0x32, 0xac, 0x21,
+	0xd1, 0x82, 0x33, 0xd3, 0x15, 0x74, 0xbd, 0x90,
+	0xf1, 0x2c, 0xe6, 0x5f, 0x8d, 0xe3, 0x02, 0xe8,
+	0xe9, 0xc4, 0xca, 0x96, 0xeb, 0x0e, 0xbc, 0x91,
+	0xf4, 0xb9, 0xea, 0xd9, 0x1b, 0x75, 0xbd, 0xe1,
+	0xac, 0x2a, 0x05, 0x37, 0x52, 0x9b, 0x1b, 0x3f,
+	0x5a, 0xdc, 0x21, 0xc3, 0x98, 0xbb, 0xaf, 0xa3,
+	0xf2, 0x00, 0xbf, 0x0d, 0x30, 0x89, 0x05, 0xcc,
+	0xa5, 0x76, 0xf5, 0x06, 0xf0, 0xc6, 0x54, 0x8a,
+	0x5d, 0xd4, 0x1e, 0xc1, 0xf2, 0xce, 0xb0, 0x62,
+	0xc8, 0xfc, 0x59, 0x42, 0x9a, 0x90, 0x60, 0x55,
+	0xfe, 0x88, 0xa5, 0x8b, 0xb8, 0x33, 0x0c, 0x23,
+	0x24, 0x0d, 0x15, 0x70, 0x37, 0x1e, 0x3d, 0xf6,
+	0xd2, 0xea, 0x92, 0x10, 0xb2, 0xc4, 0x51, 0xac,
+	0xf2, 0xac, 0xf3, 0x6b, 0x6c, 0xaa, 0xcf, 0x12,
+	0xc5, 0x6c, 0x90, 0x50, 0xb5, 0x0c, 0xfc, 0x1a,
+	0x15, 0x52, 0xe9, 0x26, 0xc6, 0x52, 0xa4, 0xe7,
+	0x81, 0x69, 0xe1, 0xe7, 0x9e, 0x30, 0x01, 0xec,
+	0x84, 0x89, 0xb2, 0x0d, 0x66, 0xdd, 0xce, 0x28,
+	0x5c, 0xec, 0x98, 0x46, 0x68, 0x21, 0x9f, 0x88,
+	0x3f, 0x1f, 0x42, 0x77, 0xce, 0xd0, 0x61, 0xd4,
+	0x20, 0xa7, 0xff, 0x53, 0xad, 0x37, 0xd0, 0x17,
+	0x35, 0xc9, 0xfc, 0xba, 0x0a, 0x78, 0x3f, 0xf2,
+	0xcc, 0x86, 0x89, 0xe8, 0x4b, 0x3c, 0x48, 0x33,
+	0x09, 0x7f, 0xc6, 0xc0, 0xdd, 0xb8, 0xfd, 0x7a,
+	0x66, 0x66, 0x65, 0xeb, 0x47, 0xa7, 0x04, 0x28,
+	0xa3, 0x19, 0x8e, 0xa9, 0xb1, 0x13, 0x67, 0x62,
+	0x70, 0xcf, 0xd7
+};
+static const u8 dec_output013[] __initconst = {
+	0x74, 0xa6, 0x3e, 0xe4, 0xb1, 0xcb, 0xaf, 0xb0,
+	0x40, 0xe5, 0x0f, 0x9e, 0xf1, 0xf2, 0x89, 0xb5,
+	0x42, 0x34, 0x8a, 0xa1, 0x03, 0xb7, 0xe9, 0x57,
+	0x46, 0xbe, 0x20, 0xe4, 0x6e, 0xb0, 0xeb, 0xff,
+	0xea, 0x07, 0x7e, 0xef, 0xe2, 0x55, 0x9f, 0xe5,
+	0x78, 0x3a, 0xb7, 0x83, 0xc2, 0x18, 0x40, 0x7b,
+	0xeb, 0xcd, 0x81, 0xfb, 0x90, 0x12, 0x9e, 0x46,
+	0xa9, 0xd6, 0x4a, 0xba, 0xb0, 0x62, 0xdb, 0x6b,
+	0x99, 0xc4, 0xdb, 0x54, 0x4b, 0xb8, 0xa5, 0x71,
+	0xcb, 0xcd, 0x63, 0x32, 0x55, 0xfb, 0x31, 0xf0,
+	0x38, 0xf5, 0xbe, 0x78, 0xe4, 0x45, 0xce, 0x1b,
+	0x6a, 0x5b, 0x0e, 0xf4, 0x16, 0xe4, 0xb1, 0x3d,
+	0xf6, 0x63, 0x7b, 0xa7, 0x0c, 0xde, 0x6f, 0x8f,
+	0x74, 0xdf, 0xe0, 0x1e, 0x9d, 0xce, 0x8f, 0x24,
+	0xef, 0x23, 0x35, 0x33, 0x7b, 0x83, 0x34, 0x23,
+	0x58, 0x74, 0x14, 0x77, 0x1f, 0xc2, 0x4f, 0x4e,
+	0xc6, 0x89, 0xf9, 0x52, 0x09, 0x37, 0x64, 0x14,
+	0xc4, 0x01, 0x6b, 0x9d, 0x77, 0xe8, 0x90, 0x5d,
+	0xa8, 0x4a, 0x2a, 0xef, 0x5c, 0x7f, 0xeb, 0xbb,
+	0xb2, 0xc6, 0x93, 0x99, 0x66, 0xdc, 0x7f, 0xd4,
+	0x9e, 0x2a, 0xca, 0x8d, 0xdb, 0xe7, 0x20, 0xcf,
+	0xe4, 0x73, 0xae, 0x49, 0x7d, 0x64, 0x0f, 0x0e,
+	0x28, 0x46, 0xa9, 0xa8, 0x32, 0xe4, 0x0e, 0xf6,
+	0x51, 0x53, 0xb8, 0x3c, 0xb1, 0xff, 0xa3, 0x33,
+	0x41, 0x75, 0xff, 0xf1, 0x6f, 0xf1, 0xfb, 0xbb,
+	0x83, 0x7f, 0x06, 0x9b, 0xe7, 0x1b, 0x0a, 0xe0,
+	0x5c, 0x33, 0x60, 0x5b, 0xdb, 0x5b, 0xed, 0xfe,
+	0xa5, 0x16, 0x19, 0x72, 0xa3, 0x64, 0x23, 0x00,
+	0x02, 0xc7, 0xf3, 0x6a, 0x81, 0x3e, 0x44, 0x1d,
+	0x79, 0x15, 0x5f, 0x9a, 0xde, 0xe2, 0xfd, 0x1b,
+	0x73, 0xc1, 0xbc, 0x23, 0xba, 0x31, 0xd2, 0x50,
+	0xd5, 0xad, 0x7f, 0x74, 0xa7, 0xc9, 0xf8, 0x3e,
+	0x2b, 0x26, 0x10, 0xf6, 0x03, 0x36, 0x74, 0xe4,
+	0x0e, 0x6a, 0x72, 0xb7, 0x73, 0x0a, 0x42, 0x28,
+	0xc2, 0xad, 0x5e, 0x03, 0xbe, 0xb8, 0x0b, 0xa8,
+	0x5b, 0xd4, 0xb8, 0xba, 0x52, 0x89, 0xb1, 0x9b,
+	0xc1, 0xc3, 0x65, 0x87, 0xed, 0xa5, 0xf4, 0x86,
+	0xfd, 0x41, 0x80, 0x91, 0x27, 0x59, 0x53, 0x67,
+	0x15, 0x78, 0x54, 0x8b, 0x2d, 0x3d, 0xc7, 0xff,
+	0x02, 0x92, 0x07, 0x5f, 0x7a, 0x4b, 0x60, 0x59,
+	0x3c, 0x6f, 0x5c, 0xd8, 0xec, 0x95, 0xd2, 0xfe,
+	0xa0, 0x3b, 0xd8, 0x3f, 0xd1, 0x69, 0xa6, 0xd6,
+	0x41, 0xb2, 0xf4, 0x4d, 0x12, 0xf4, 0x58, 0x3e,
+	0x66, 0x64, 0x80, 0x31, 0x9b, 0xa8, 0x4c, 0x8b,
+	0x07, 0xb2, 0xec, 0x66, 0x94, 0x66, 0x47, 0x50,
+	0x50, 0x5f, 0x18, 0x0b, 0x0e, 0xd6, 0xc0, 0x39,
+	0x21, 0x13, 0x9e, 0x33, 0xbc, 0x79, 0x36, 0x02,
+	0x96, 0x70, 0xf0, 0x48, 0x67, 0x2f, 0x26, 0xe9,
+	0x6d, 0x10, 0xbb, 0xd6, 0x3f, 0xd1, 0x64, 0x7a,
+	0x2e, 0xbe, 0x0c, 0x61, 0xf0, 0x75, 0x42, 0x38,
+	0x23, 0xb1, 0x9e, 0x9f, 0x7c, 0x67, 0x66, 0xd9,
+	0x58, 0x9a, 0xf1, 0xbb, 0x41, 0x2a, 0x8d, 0x65,
+	0x84, 0x94, 0xfc, 0xdc, 0x6a, 0x50, 0x64, 0xdb,
+	0x56, 0x33, 0x76, 0x00, 0x10, 0xed, 0xbe, 0xd2,
+	0x12, 0xf6, 0xf6, 0x1b, 0xa2, 0x16, 0xde, 0xae,
+	0x31, 0x95, 0xdd, 0xb1, 0x08, 0x7e, 0x4e, 0xee,
+	0xe7, 0xf9, 0xa5, 0xfb, 0x5b, 0x61, 0x43, 0x00,
+	0x40, 0xf6, 0x7e, 0x02, 0x04, 0x32, 0x4e, 0x0c,
+	0xe2, 0x66, 0x0d, 0xd7, 0x07, 0x98, 0x0e, 0xf8,
+	0x72, 0x34, 0x6d, 0x95, 0x86, 0xd7, 0xcb, 0x31,
+	0x54, 0x47, 0xd0, 0x38, 0x29, 0x9c, 0x5a, 0x68,
+	0xd4, 0x87, 0x76, 0xc9, 0xe7, 0x7e, 0xe3, 0xf4,
+	0x81, 0x6d, 0x18, 0xcb, 0xc9, 0x05, 0xaf, 0xa0,
+	0xfb, 0x66, 0xf7, 0xf1, 0x1c, 0xc6, 0x14, 0x11,
+	0x4f, 0x2b, 0x79, 0x42, 0x8b, 0xbc, 0xac, 0xe7,
+	0x6c, 0xfe, 0x0f, 0x58, 0xe7, 0x7c, 0x78, 0x39,
+	0x30, 0xb0, 0x66, 0x2c, 0x9b, 0x6d, 0x3a, 0xe1,
+	0xcf, 0xc9, 0xa4, 0x0e, 0x6d, 0x6d, 0x8a, 0xa1,
+	0x3a, 0xe7, 0x28, 0xd4, 0x78, 0x4c, 0xa6, 0xa2,
+	0x2a, 0xa6, 0x03, 0x30, 0xd7, 0xa8, 0x25, 0x66,
+	0x87, 0x2f, 0x69, 0x5c, 0x4e, 0xdd, 0xa5, 0x49,
+	0x5d, 0x37, 0x4a, 0x59, 0xc4, 0xaf, 0x1f, 0xa2,
+	0xe4, 0xf8, 0xa6, 0x12, 0x97, 0xd5, 0x79, 0xf5,
+	0xe2, 0x4a, 0x2b, 0x5f, 0x61, 0xe4, 0x9e, 0xe3,
+	0xee, 0xb8, 0xa7, 0x5b, 0x2f, 0xf4, 0x9e, 0x6c,
+	0xfb, 0xd1, 0xc6, 0x56, 0x77, 0xba, 0x75, 0xaa,
+	0x3d, 0x1a, 0xa8, 0x0b, 0xb3, 0x68, 0x24, 0x00,
+	0x10, 0x7f, 0xfd, 0xd7, 0xa1, 0x8d, 0x83, 0x54,
+	0x4f, 0x1f, 0xd8, 0x2a, 0xbe, 0x8a, 0x0c, 0x87,
+	0xab, 0xa2, 0xde, 0xc3, 0x39, 0xbf, 0x09, 0x03,
+	0xa5, 0xf3, 0x05, 0x28, 0xe1, 0xe1, 0xee, 0x39,
+	0x70, 0x9c, 0xd8, 0x81, 0x12, 0x1e, 0x02, 0x40,
+	0xd2, 0x6e, 0xf0, 0xeb, 0x1b, 0x3d, 0x22, 0xc6,
+	0xe5, 0xe3, 0xb4, 0x5a, 0x98, 0xbb, 0xf0, 0x22,
+	0x28, 0x8d, 0xe5, 0xd3, 0x16, 0x48, 0x24, 0xa5,
+	0xe6, 0x66, 0x0c, 0xf9, 0x08, 0xf9, 0x7e, 0x1e,
+	0xe1, 0x28, 0x26, 0x22, 0xc7, 0xc7, 0x0a, 0x32,
+	0x47, 0xfa, 0xa3, 0xbe, 0x3c, 0xc4, 0xc5, 0x53,
+	0x0a, 0xd5, 0x94, 0x4a, 0xd7, 0x93, 0xd8, 0x42,
+	0x99, 0xb9, 0x0a, 0xdb, 0x56, 0xf7, 0xb9, 0x1c,
+	0x53, 0x4f, 0xfa, 0xd3, 0x74, 0xad, 0xd9, 0x68,
+	0xf1, 0x1b, 0xdf, 0x61, 0xc6, 0x5e, 0xa8, 0x48,
+	0xfc, 0xd4, 0x4a, 0x4c, 0x3c, 0x32, 0xf7, 0x1c,
+	0x96, 0x21, 0x9b, 0xf9, 0xa3, 0xcc, 0x5a, 0xce,
+	0xd5, 0xd7, 0x08, 0x24, 0xf6, 0x1c, 0xfd, 0xdd,
+	0x38, 0xc2, 0x32, 0xe9, 0xb8, 0xe7, 0xb6, 0xfa,
+	0x9d, 0x45, 0x13, 0x2c, 0x83, 0xfd, 0x4a, 0x69,
+	0x82, 0xcd, 0xdc, 0xb3, 0x76, 0x0c, 0x9e, 0xd8,
+	0xf4, 0x1b, 0x45, 0x15, 0xb4, 0x97, 0xe7, 0x58,
+	0x34, 0xe2, 0x03, 0x29, 0x5a, 0xbf, 0xb6, 0xe0,
+	0x5d, 0x13, 0xd9, 0x2b, 0xb4, 0x80, 0xb2, 0x45,
+	0x81, 0x6a, 0x2e, 0x6c, 0x89, 0x7d, 0xee, 0xbb,
+	0x52, 0xdd, 0x1f, 0x18, 0xe7, 0x13, 0x6b, 0x33,
+	0x0e, 0xea, 0x36, 0x92, 0x77, 0x7b, 0x6d, 0x9c,
+	0x5a, 0x5f, 0x45, 0x7b, 0x7b, 0x35, 0x62, 0x23,
+	0xd1, 0xbf, 0x0f, 0xd0, 0x08, 0x1b, 0x2b, 0x80,
+	0x6b, 0x7e, 0xf1, 0x21, 0x47, 0xb0, 0x57, 0xd1,
+	0x98, 0x72, 0x90, 0x34, 0x1c, 0x20, 0x04, 0xff,
+	0x3d, 0x5c, 0xee, 0x0e, 0x57, 0x5f, 0x6f, 0x24,
+	0x4e, 0x3c, 0xea, 0xfc, 0xa5, 0xa9, 0x83, 0xc9,
+	0x61, 0xb4, 0x51, 0x24, 0xf8, 0x27, 0x5e, 0x46,
+	0x8c, 0xb1, 0x53, 0x02, 0x96, 0x35, 0xba, 0xb8,
+	0x4c, 0x71, 0xd3, 0x15, 0x59, 0x35, 0x22, 0x20,
+	0xad, 0x03, 0x9f, 0x66, 0x44, 0x3b, 0x9c, 0x35,
+	0x37, 0x1f, 0x9b, 0xbb, 0xf3, 0xdb, 0x35, 0x63,
+	0x30, 0x64, 0xaa, 0xa2, 0x06, 0xa8, 0x5d, 0xbb,
+	0xe1, 0x9f, 0x70, 0xec, 0x82, 0x11, 0x06, 0x36,
+	0xec, 0x8b, 0x69, 0x66, 0x24, 0x44, 0xc9, 0x4a,
+	0x57, 0xbb, 0x9b, 0x78, 0x13, 0xce, 0x9c, 0x0c,
+	0xba, 0x92, 0x93, 0x63, 0xb8, 0xe2, 0x95, 0x0f,
+	0x0f, 0x16, 0x39, 0x52, 0xfd, 0x3a, 0x6d, 0x02,
+	0x4b, 0xdf, 0x13, 0xd3, 0x2a, 0x22, 0xb4, 0x03,
+	0x7c, 0x54, 0x49, 0x96, 0x68, 0x54, 0x10, 0xfa,
+	0xef, 0xaa, 0x6c, 0xe8, 0x22, 0xdc, 0x71, 0x16,
+	0x13, 0x1a, 0xf6, 0x28, 0xe5, 0x6d, 0x77, 0x3d,
+	0xcd, 0x30, 0x63, 0xb1, 0x70, 0x52, 0xa1, 0xc5,
+	0x94, 0x5f, 0xcf, 0xe8, 0xb8, 0x26, 0x98, 0xf7,
+	0x06, 0xa0, 0x0a, 0x70, 0xfa, 0x03, 0x80, 0xac,
+	0xc1, 0xec, 0xd6, 0x4c, 0x54, 0xd7, 0xfe, 0x47,
+	0xb6, 0x88, 0x4a, 0xf7, 0x71, 0x24, 0xee, 0xf3,
+	0xd2, 0xc2, 0x4a, 0x7f, 0xfe, 0x61, 0xc7, 0x35,
+	0xc9, 0x37, 0x67, 0xcb, 0x24, 0x35, 0xda, 0x7e,
+	0xca, 0x5f, 0xf3, 0x8d, 0xd4, 0x13, 0x8e, 0xd6,
+	0xcb, 0x4d, 0x53, 0x8f, 0x53, 0x1f, 0xc0, 0x74,
+	0xf7, 0x53, 0xb9, 0x5e, 0x23, 0x37, 0xba, 0x6e,
+	0xe3, 0x9d, 0x07, 0x55, 0x25, 0x7b, 0xe6, 0x2a,
+	0x64, 0xd1, 0x32, 0xdd, 0x54, 0x1b, 0x4b, 0xc0,
+	0xe1, 0xd7, 0x69, 0x58, 0xf8, 0x93, 0x29, 0xc4,
+	0xdd, 0x23, 0x2f, 0xa5, 0xfc, 0x9d, 0x7e, 0xf8,
+	0xd4, 0x90, 0xcd, 0x82, 0x55, 0xdc, 0x16, 0x16,
+	0x9f, 0x07, 0x52, 0x9b, 0x9d, 0x25, 0xed, 0x32,
+	0xc5, 0x7b, 0xdf, 0xf6, 0x83, 0x46, 0x3d, 0x65,
+	0xb7, 0xef, 0x87, 0x7a, 0x12, 0x69, 0x8f, 0x06,
+	0x7c, 0x51, 0x15, 0x4a, 0x08, 0xe8, 0xac, 0x9a,
+	0x0c, 0x24, 0xa7, 0x27, 0xd8, 0x46, 0x2f, 0xe7,
+	0x01, 0x0e, 0x1c, 0xc6, 0x91, 0xb0, 0x6e, 0x85,
+	0x65, 0xf0, 0x29, 0x0d, 0x2e, 0x6b, 0x3b, 0xfb,
+	0x4b, 0xdf, 0xe4, 0x80, 0x93, 0x03, 0x66, 0x46,
+	0x3e, 0x8a, 0x6e, 0xf3, 0x5e, 0x4d, 0x62, 0x0e,
+	0x49, 0x05, 0xaf, 0xd4, 0xf8, 0x21, 0x20, 0x61,
+	0x1d, 0x39, 0x17, 0xf4, 0x61, 0x47, 0x95, 0xfb,
+	0x15, 0x2e, 0xb3, 0x4f, 0xd0, 0x5d, 0xf5, 0x7d,
+	0x40, 0xda, 0x90, 0x3c, 0x6b, 0xcb, 0x17, 0x00,
+	0x13, 0x3b, 0x64, 0x34, 0x1b, 0xf0, 0xf2, 0xe5,
+	0x3b, 0xb2, 0xc7, 0xd3, 0x5f, 0x3a, 0x44, 0xa6,
+	0x9b, 0xb7, 0x78, 0x0e, 0x42, 0x5d, 0x4c, 0xc1,
+	0xe9, 0xd2, 0xcb, 0xb7, 0x78, 0xd1, 0xfe, 0x9a,
+	0xb5, 0x07, 0xe9, 0xe0, 0xbe, 0xe2, 0x8a, 0xa7,
+	0x01, 0x83, 0x00, 0x8c, 0x5c, 0x08, 0xe6, 0x63,
+	0x12, 0x92, 0xb7, 0xb7, 0xa6, 0x19, 0x7d, 0x38,
+	0x13, 0x38, 0x92, 0x87, 0x24, 0xf9, 0x48, 0xb3,
+	0x5e, 0x87, 0x6a, 0x40, 0x39, 0x5c, 0x3f, 0xed,
+	0x8f, 0xee, 0xdb, 0x15, 0x82, 0x06, 0xda, 0x49,
+	0x21, 0x2b, 0xb5, 0xbf, 0x32, 0x7c, 0x9f, 0x42,
+	0x28, 0x63, 0xcf, 0xaf, 0x1e, 0xf8, 0xc6, 0xa0,
+	0xd1, 0x02, 0x43, 0x57, 0x62, 0xec, 0x9b, 0x0f,
+	0x01, 0x9e, 0x71, 0xd8, 0x87, 0x9d, 0x01, 0xc1,
+	0x58, 0x77, 0xd9, 0xaf, 0xb1, 0x10, 0x7e, 0xdd,
+	0xa6, 0x50, 0x96, 0xe5, 0xf0, 0x72, 0x00, 0x6d,
+	0x4b, 0xf8, 0x2a, 0x8f, 0x19, 0xf3, 0x22, 0x88,
+	0x11, 0x4a, 0x8b, 0x7c, 0xfd, 0xb7, 0xed, 0xe1,
+	0xf6, 0x40, 0x39, 0xe0, 0xe9, 0xf6, 0x3d, 0x25,
+	0xe6, 0x74, 0x3c, 0x58, 0x57, 0x7f, 0xe1, 0x22,
+	0x96, 0x47, 0x31, 0x91, 0xba, 0x70, 0x85, 0x28,
+	0x6b, 0x9f, 0x6e, 0x25, 0xac, 0x23, 0x66, 0x2f,
+	0x29, 0x88, 0x28, 0xce, 0x8c, 0x5c, 0x88, 0x53,
+	0xd1, 0x3b, 0xcc, 0x6a, 0x51, 0xb2, 0xe1, 0x28,
+	0x3f, 0x91, 0xb4, 0x0d, 0x00, 0x3a, 0xe3, 0xf8,
+	0xc3, 0x8f, 0xd7, 0x96, 0x62, 0x0e, 0x2e, 0xfc,
+	0xc8, 0x6c, 0x77, 0xa6, 0x1d, 0x22, 0xc1, 0xb8,
+	0xe6, 0x61, 0xd7, 0x67, 0x36, 0x13, 0x7b, 0xbb,
+	0x9b, 0x59, 0x09, 0xa6, 0xdf, 0xf7, 0x6b, 0xa3,
+	0x40, 0x1a, 0xf5, 0x4f, 0xb4, 0xda, 0xd3, 0xf3,
+	0x81, 0x93, 0xc6, 0x18, 0xd9, 0x26, 0xee, 0xac,
+	0xf0, 0xaa, 0xdf, 0xc5, 0x9c, 0xca, 0xc2, 0xa2,
+	0xcc, 0x7b, 0x5c, 0x24, 0xb0, 0xbc, 0xd0, 0x6a,
+	0x4d, 0x89, 0x09, 0xb8, 0x07, 0xfe, 0x87, 0xad,
+	0x0a, 0xea, 0xb8, 0x42, 0xf9, 0x5e, 0xb3, 0x3e,
+	0x36, 0x4c, 0xaf, 0x75, 0x9e, 0x1c, 0xeb, 0xbd,
+	0xbc, 0xbb, 0x80, 0x40, 0xa7, 0x3a, 0x30, 0xbf,
+	0xa8, 0x44, 0xf4, 0xeb, 0x38, 0xad, 0x29, 0xba,
+	0x23, 0xed, 0x41, 0x0c, 0xea, 0xd2, 0xbb, 0x41,
+	0x18, 0xd6, 0xb9, 0xba, 0x65, 0x2b, 0xa3, 0x91,
+	0x6d, 0x1f, 0xa9, 0xf4, 0xd1, 0x25, 0x8d, 0x4d,
+	0x38, 0xff, 0x64, 0xa0, 0xec, 0xde, 0xa6, 0xb6,
+	0x79, 0xab, 0x8e, 0x33, 0x6c, 0x47, 0xde, 0xaf,
+	0x94, 0xa4, 0xa5, 0x86, 0x77, 0x55, 0x09, 0x92,
+	0x81, 0x31, 0x76, 0xc7, 0x34, 0x22, 0x89, 0x8e,
+	0x3d, 0x26, 0x26, 0xd7, 0xfc, 0x1e, 0x16, 0x72,
+	0x13, 0x33, 0x63, 0xd5, 0x22, 0xbe, 0xb8, 0x04,
+	0x34, 0x84, 0x41, 0xbb, 0x80, 0xd0, 0x9f, 0x46,
+	0x48, 0x07, 0xa7, 0xfc, 0x2b, 0x3a, 0x75, 0x55,
+	0x8c, 0xc7, 0x6a, 0xbd, 0x7e, 0x46, 0x08, 0x84,
+	0x0f, 0xd5, 0x74, 0xc0, 0x82, 0x8e, 0xaa, 0x61,
+	0x05, 0x01, 0xb2, 0x47, 0x6e, 0x20, 0x6a, 0x2d,
+	0x58, 0x70, 0x48, 0x32, 0xa7, 0x37, 0xd2, 0xb8,
+	0x82, 0x1a, 0x51, 0xb9, 0x61, 0xdd, 0xfd, 0x9d,
+	0x6b, 0x0e, 0x18, 0x97, 0xf8, 0x45, 0x5f, 0x87,
+	0x10, 0xcf, 0x34, 0x72, 0x45, 0x26, 0x49, 0x70,
+	0xe7, 0xa3, 0x78, 0xe0, 0x52, 0x89, 0x84, 0x94,
+	0x83, 0x82, 0xc2, 0x69, 0x8f, 0xe3, 0xe1, 0x3f,
+	0x60, 0x74, 0x88, 0xc4, 0xf7, 0x75, 0x2c, 0xfb,
+	0xbd, 0xb6, 0xc4, 0x7e, 0x10, 0x0a, 0x6c, 0x90,
+	0x04, 0x9e, 0xc3, 0x3f, 0x59, 0x7c, 0xce, 0x31,
+	0x18, 0x60, 0x57, 0x73, 0x46, 0x94, 0x7d, 0x06,
+	0xa0, 0x6d, 0x44, 0xec, 0xa2, 0x0a, 0x9e, 0x05,
+	0x15, 0xef, 0xca, 0x5c, 0xbf, 0x00, 0xeb, 0xf7,
+	0x3d, 0x32, 0xd4, 0xa5, 0xef, 0x49, 0x89, 0x5e,
+	0x46, 0xb0, 0xa6, 0x63, 0x5b, 0x8a, 0x73, 0xae,
+	0x6f, 0xd5, 0x9d, 0xf8, 0x4f, 0x40, 0xb5, 0xb2,
+	0x6e, 0xd3, 0xb6, 0x01, 0xa9, 0x26, 0xa2, 0x21,
+	0xcf, 0x33, 0x7a, 0x3a, 0xa4, 0x23, 0x13, 0xb0,
+	0x69, 0x6a, 0xee, 0xce, 0xd8, 0x9d, 0x01, 0x1d,
+	0x50, 0xc1, 0x30, 0x6c, 0xb1, 0xcd, 0xa0, 0xf0,
+	0xf0, 0xa2, 0x64, 0x6f, 0xbb, 0xbf, 0x5e, 0xe6,
+	0xab, 0x87, 0xb4, 0x0f, 0x4f, 0x15, 0xaf, 0xb5,
+	0x25, 0xa1, 0xb2, 0xd0, 0x80, 0x2c, 0xfb, 0xf9,
+	0xfe, 0xd2, 0x33, 0xbb, 0x76, 0xfe, 0x7c, 0xa8,
+	0x66, 0xf7, 0xe7, 0x85, 0x9f, 0x1f, 0x85, 0x57,
+	0x88, 0xe1, 0xe9, 0x63, 0xe4, 0xd8, 0x1c, 0xa1,
+	0xfb, 0xda, 0x44, 0x05, 0x2e, 0x1d, 0x3a, 0x1c,
+	0xff, 0xc8, 0x3b, 0xc0, 0xfe, 0xda, 0x22, 0x0b,
+	0x43, 0xd6, 0x88, 0x39, 0x4c, 0x4a, 0xa6, 0x69,
+	0x18, 0x93, 0x42, 0x4e, 0xb5, 0xcc, 0x66, 0x0d,
+	0x09, 0xf8, 0x1e, 0x7c, 0xd3, 0x3c, 0x99, 0x0d,
+	0x50, 0x1d, 0x62, 0xe9, 0x57, 0x06, 0xbf, 0x19,
+	0x88, 0xdd, 0xad, 0x7b, 0x4f, 0xf9, 0xc7, 0x82,
+	0x6d, 0x8d, 0xc8, 0xc4, 0xc5, 0x78, 0x17, 0x20,
+	0x15, 0xc5, 0x52, 0x41, 0xcf, 0x5b, 0xd6, 0x7f,
+	0x94, 0x02, 0x41, 0xe0, 0x40, 0x22, 0x03, 0x5e,
+	0xd1, 0x53, 0xd4, 0x86, 0xd3, 0x2c, 0x9f, 0x0f,
+	0x96, 0xe3, 0x6b, 0x9a, 0x76, 0x32, 0x06, 0x47,
+	0x4b, 0x11, 0xb3, 0xdd, 0x03, 0x65, 0xbd, 0x9b,
+	0x01, 0xda, 0x9c, 0xb9, 0x7e, 0x3f, 0x6a, 0xc4,
+	0x7b, 0xea, 0xd4, 0x3c, 0xb9, 0xfb, 0x5c, 0x6b,
+	0x64, 0x33, 0x52, 0xba, 0x64, 0x78, 0x8f, 0xa4,
+	0xaf, 0x7a, 0x61, 0x8d, 0xbc, 0xc5, 0x73, 0xe9,
+	0x6b, 0x58, 0x97, 0x4b, 0xbf, 0x63, 0x22, 0xd3,
+	0x37, 0x02, 0x54, 0xc5, 0xb9, 0x16, 0x4a, 0xf0,
+	0x19, 0xd8, 0x94, 0x57, 0xb8, 0x8a, 0xb3, 0x16,
+	0x3b, 0xd0, 0x84, 0x8e, 0x67, 0xa6, 0xa3, 0x7d,
+	0x78, 0xec, 0x00
+};
+static const u8 dec_assoc013[] __initconst = {
+	0xb1, 0x69, 0x83, 0x87, 0x30, 0xaa, 0x5d, 0xb8,
+	0x77, 0xe8, 0x21, 0xff, 0x06, 0x59, 0x35, 0xce,
+	0x75, 0xfe, 0x38, 0xef, 0xb8, 0x91, 0x43, 0x8c,
+	0xcf, 0x70, 0xdd, 0x0a, 0x68, 0xbf, 0xd4, 0xbc,
+	0x16, 0x76, 0x99, 0x36, 0x1e, 0x58, 0x79, 0x5e,
+	0xd4, 0x29, 0xf7, 0x33, 0x93, 0x48, 0xdb, 0x5f,
+	0x01, 0xae, 0x9c, 0xb6, 0xe4, 0x88, 0x6d, 0x2b,
+	0x76, 0x75, 0xe0, 0xf3, 0x74, 0xe2, 0xc9
+};
+static const u8 dec_nonce013[] __initconst = {
+	0x05, 0xa3, 0x93, 0xed, 0x30, 0xc5, 0xa2, 0x06
+};
+static const u8 dec_key013[] __initconst = {
+	0xb3, 0x35, 0x50, 0x03, 0x54, 0x2e, 0x40, 0x5e,
+	0x8f, 0x59, 0x8e, 0xc5, 0x90, 0xd5, 0x27, 0x2d,
+	0xba, 0x29, 0x2e, 0xcb, 0x1b, 0x70, 0x44, 0x1e,
+	0x65, 0x91, 0x6e, 0x2a, 0x79, 0x22, 0xda, 0x64
+};
+
+static const struct chacha20poly1305_testvec
+chacha20poly1305_dec_vectors[] __initconst = {
+	{ dec_input001, dec_output001, dec_assoc001, dec_nonce001, dec_key001,
+	  sizeof(dec_input001), sizeof(dec_assoc001), sizeof(dec_nonce001) },
+	{ dec_input002, dec_output002, dec_assoc002, dec_nonce002, dec_key002,
+	  sizeof(dec_input002), sizeof(dec_assoc002), sizeof(dec_nonce002) },
+	{ dec_input003, dec_output003, dec_assoc003, dec_nonce003, dec_key003,
+	  sizeof(dec_input003), sizeof(dec_assoc003), sizeof(dec_nonce003) },
+	{ dec_input004, dec_output004, dec_assoc004, dec_nonce004, dec_key004,
+	  sizeof(dec_input004), sizeof(dec_assoc004), sizeof(dec_nonce004) },
+	{ dec_input005, dec_output005, dec_assoc005, dec_nonce005, dec_key005,
+	  sizeof(dec_input005), sizeof(dec_assoc005), sizeof(dec_nonce005) },
+	{ dec_input006, dec_output006, dec_assoc006, dec_nonce006, dec_key006,
+	  sizeof(dec_input006), sizeof(dec_assoc006), sizeof(dec_nonce006) },
+	{ dec_input007, dec_output007, dec_assoc007, dec_nonce007, dec_key007,
+	  sizeof(dec_input007), sizeof(dec_assoc007), sizeof(dec_nonce007) },
+	{ dec_input008, dec_output008, dec_assoc008, dec_nonce008, dec_key008,
+	  sizeof(dec_input008), sizeof(dec_assoc008), sizeof(dec_nonce008) },
+	{ dec_input009, dec_output009, dec_assoc009, dec_nonce009, dec_key009,
+	  sizeof(dec_input009), sizeof(dec_assoc009), sizeof(dec_nonce009) },
+	{ dec_input010, dec_output010, dec_assoc010, dec_nonce010, dec_key010,
+	  sizeof(dec_input010), sizeof(dec_assoc010), sizeof(dec_nonce010) },
+	{ dec_input011, dec_output011, dec_assoc011, dec_nonce011, dec_key011,
+	  sizeof(dec_input011), sizeof(dec_assoc011), sizeof(dec_nonce011) },
+	{ dec_input012, dec_output012, dec_assoc012, dec_nonce012, dec_key012,
+	  sizeof(dec_input012), sizeof(dec_assoc012), sizeof(dec_nonce012) },
+	{ dec_input013, dec_output013, dec_assoc013, dec_nonce013, dec_key013,
+	  sizeof(dec_input013), sizeof(dec_assoc013), sizeof(dec_nonce013),
+	  true }
+};
+
+static const u8 xenc_input001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 xenc_output001[] __initconst = {
+	0x1a, 0x6e, 0x3a, 0xd9, 0xfd, 0x41, 0x3f, 0x77,
+	0x54, 0x72, 0x0a, 0x70, 0x9a, 0xa0, 0x29, 0x92,
+	0x2e, 0xed, 0x93, 0xcf, 0x0f, 0x71, 0x88, 0x18,
+	0x7a, 0x9d, 0x2d, 0x24, 0xe0, 0xf5, 0xea, 0x3d,
+	0x55, 0x64, 0xd7, 0xad, 0x2a, 0x1a, 0x1f, 0x7e,
+	0x86, 0x6d, 0xb0, 0xce, 0x80, 0x41, 0x72, 0x86,
+	0x26, 0xee, 0x84, 0xd7, 0xef, 0x82, 0x9e, 0xe2,
+	0x60, 0x9d, 0x5a, 0xfc, 0xf0, 0xe4, 0x19, 0x85,
+	0xea, 0x09, 0xc6, 0xfb, 0xb3, 0xa9, 0x50, 0x09,
+	0xec, 0x5e, 0x11, 0x90, 0xa1, 0xc5, 0x4e, 0x49,
+	0xef, 0x50, 0xd8, 0x8f, 0xe0, 0x78, 0xd7, 0xfd,
+	0xb9, 0x3b, 0xc9, 0xf2, 0x91, 0xc8, 0x25, 0xc8,
+	0xa7, 0x63, 0x60, 0xce, 0x10, 0xcd, 0xc6, 0x7f,
+	0xf8, 0x16, 0xf8, 0xe1, 0x0a, 0xd9, 0xde, 0x79,
+	0x50, 0x33, 0xf2, 0x16, 0x0f, 0x17, 0xba, 0xb8,
+	0x5d, 0xd8, 0xdf, 0x4e, 0x51, 0xa8, 0x39, 0xd0,
+	0x85, 0xca, 0x46, 0x6a, 0x10, 0xa7, 0xa3, 0x88,
+	0xef, 0x79, 0xb9, 0xf8, 0x24, 0xf3, 0xe0, 0x71,
+	0x7b, 0x76, 0x28, 0x46, 0x3a, 0x3a, 0x1b, 0x91,
+	0xb6, 0xd4, 0x3e, 0x23, 0xe5, 0x44, 0x15, 0xbf,
+	0x60, 0x43, 0x9d, 0xa4, 0xbb, 0xd5, 0x5f, 0x89,
+	0xeb, 0xef, 0x8e, 0xfd, 0xdd, 0xb4, 0x0d, 0x46,
+	0xf0, 0x69, 0x23, 0x63, 0xae, 0x94, 0xf5, 0x5e,
+	0xa5, 0xad, 0x13, 0x1c, 0x41, 0x76, 0xe6, 0x90,
+	0xd6, 0x6d, 0xa2, 0x8f, 0x97, 0x4c, 0xa8, 0x0b,
+	0xcf, 0x8d, 0x43, 0x2b, 0x9c, 0x9b, 0xc5, 0x58,
+	0xa5, 0xb6, 0x95, 0x9a, 0xbf, 0x81, 0xc6, 0x54,
+	0xc9, 0x66, 0x0c, 0xe5, 0x4f, 0x6a, 0x53, 0xa1,
+	0xe5, 0x0c, 0xba, 0x31, 0xde, 0x34, 0x64, 0x73,
+	0x8a, 0x3b, 0xbd, 0x92, 0x01, 0xdb, 0x71, 0x69,
+	0xf3, 0x58, 0x99, 0xbc, 0xd1, 0xcb, 0x4a, 0x05,
+	0xe2, 0x58, 0x9c, 0x25, 0x17, 0xcd, 0xdc, 0x83,
+	0xb7, 0xff, 0xfb, 0x09, 0x61, 0xad, 0xbf, 0x13,
+	0x5b, 0x5e, 0xed, 0x46, 0x82, 0x6f, 0x22, 0xd8,
+	0x93, 0xa6, 0x85, 0x5b, 0x40, 0x39, 0x5c, 0xc5,
+	0x9c
+};
+static const u8 xenc_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 xenc_nonce001[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
+};
+static const u8 xenc_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const struct chacha20poly1305_testvec
+xchacha20poly1305_enc_vectors[] __initconst = {
+	{ xenc_input001, xenc_output001, xenc_assoc001, xenc_nonce001, xenc_key001,
+	  sizeof(xenc_input001), sizeof(xenc_assoc001), sizeof(xenc_nonce001) }
+};
+
+static const u8 xdec_input001[] __initconst = {
+	0x1a, 0x6e, 0x3a, 0xd9, 0xfd, 0x41, 0x3f, 0x77,
+	0x54, 0x72, 0x0a, 0x70, 0x9a, 0xa0, 0x29, 0x92,
+	0x2e, 0xed, 0x93, 0xcf, 0x0f, 0x71, 0x88, 0x18,
+	0x7a, 0x9d, 0x2d, 0x24, 0xe0, 0xf5, 0xea, 0x3d,
+	0x55, 0x64, 0xd7, 0xad, 0x2a, 0x1a, 0x1f, 0x7e,
+	0x86, 0x6d, 0xb0, 0xce, 0x80, 0x41, 0x72, 0x86,
+	0x26, 0xee, 0x84, 0xd7, 0xef, 0x82, 0x9e, 0xe2,
+	0x60, 0x9d, 0x5a, 0xfc, 0xf0, 0xe4, 0x19, 0x85,
+	0xea, 0x09, 0xc6, 0xfb, 0xb3, 0xa9, 0x50, 0x09,
+	0xec, 0x5e, 0x11, 0x90, 0xa1, 0xc5, 0x4e, 0x49,
+	0xef, 0x50, 0xd8, 0x8f, 0xe0, 0x78, 0xd7, 0xfd,
+	0xb9, 0x3b, 0xc9, 0xf2, 0x91, 0xc8, 0x25, 0xc8,
+	0xa7, 0x63, 0x60, 0xce, 0x10, 0xcd, 0xc6, 0x7f,
+	0xf8, 0x16, 0xf8, 0xe1, 0x0a, 0xd9, 0xde, 0x79,
+	0x50, 0x33, 0xf2, 0x16, 0x0f, 0x17, 0xba, 0xb8,
+	0x5d, 0xd8, 0xdf, 0x4e, 0x51, 0xa8, 0x39, 0xd0,
+	0x85, 0xca, 0x46, 0x6a, 0x10, 0xa7, 0xa3, 0x88,
+	0xef, 0x79, 0xb9, 0xf8, 0x24, 0xf3, 0xe0, 0x71,
+	0x7b, 0x76, 0x28, 0x46, 0x3a, 0x3a, 0x1b, 0x91,
+	0xb6, 0xd4, 0x3e, 0x23, 0xe5, 0x44, 0x15, 0xbf,
+	0x60, 0x43, 0x9d, 0xa4, 0xbb, 0xd5, 0x5f, 0x89,
+	0xeb, 0xef, 0x8e, 0xfd, 0xdd, 0xb4, 0x0d, 0x46,
+	0xf0, 0x69, 0x23, 0x63, 0xae, 0x94, 0xf5, 0x5e,
+	0xa5, 0xad, 0x13, 0x1c, 0x41, 0x76, 0xe6, 0x90,
+	0xd6, 0x6d, 0xa2, 0x8f, 0x97, 0x4c, 0xa8, 0x0b,
+	0xcf, 0x8d, 0x43, 0x2b, 0x9c, 0x9b, 0xc5, 0x58,
+	0xa5, 0xb6, 0x95, 0x9a, 0xbf, 0x81, 0xc6, 0x54,
+	0xc9, 0x66, 0x0c, 0xe5, 0x4f, 0x6a, 0x53, 0xa1,
+	0xe5, 0x0c, 0xba, 0x31, 0xde, 0x34, 0x64, 0x73,
+	0x8a, 0x3b, 0xbd, 0x92, 0x01, 0xdb, 0x71, 0x69,
+	0xf3, 0x58, 0x99, 0xbc, 0xd1, 0xcb, 0x4a, 0x05,
+	0xe2, 0x58, 0x9c, 0x25, 0x17, 0xcd, 0xdc, 0x83,
+	0xb7, 0xff, 0xfb, 0x09, 0x61, 0xad, 0xbf, 0x13,
+	0x5b, 0x5e, 0xed, 0x46, 0x82, 0x6f, 0x22, 0xd8,
+	0x93, 0xa6, 0x85, 0x5b, 0x40, 0x39, 0x5c, 0xc5,
+	0x9c
+};
+static const u8 xdec_output001[] __initconst = {
+	0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74,
+	0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, 0x20,
+	0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, 0x66,
+	0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, 0x69,
+	0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20,
+	0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, 0x20,
+	0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, 0x6d,
+	0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x6e,
+	0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, 0x65,
+	0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64,
+	0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, 0x63,
+	0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f,
+	0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, 0x64,
+	0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, 0x65,
+	0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, 0x61,
+	0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x2e,
+	0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, 0x69,
+	0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, 0x72,
+	0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, 0x20,
+	0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, 0x65,
+	0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, 0x61,
+	0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x72,
+	0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65,
+	0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61,
+	0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20,
+	0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, 0x65,
+	0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x20,
+	0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, 0x20,
+	0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, 0x6b,
+	0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, 0x67,
+	0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, 0x80,
+	0x9d
+};
+static const u8 xdec_assoc001[] __initconst = {
+	0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x91
+};
+static const u8 xdec_nonce001[] __initconst = {
+	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+	0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
+};
+static const u8 xdec_key001[] __initconst = {
+	0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+	0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+	0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+	0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0
+};
+
+static const struct chacha20poly1305_testvec
+xchacha20poly1305_dec_vectors[] __initconst = {
+	{ xdec_input001, xdec_output001, xdec_assoc001, xdec_nonce001, xdec_key001,
+	  sizeof(xdec_input001), sizeof(xdec_assoc001), sizeof(xdec_nonce001) }
+};
+
+/* This is for the selftests-only, since it is only useful for the purpose of
+ * testing the underlying primitives and interactions.
+ */
+static void __init
+chacha20poly1305_encrypt_bignonce(u8 *dst, const u8 *src, const size_t src_len,
+				  const u8 *ad, const size_t ad_len,
+				  const u8 nonce[12],
+				  const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	u32 chacha20_state[CHACHA_STATE_WORDS];
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		__le64 lens[2];
+	} b = {{ 0 }};
+	u8 bottom_row[16] = { 0 };
+	u32 le_key[8];
+	int i;
+
+	memcpy(&bottom_row[4], nonce, 12);
+	for (i = 0; i < 8; ++i)
+		le_key[i] = get_unaligned_le32(key + sizeof(le_key[i]) * i);
+	chacha_init(chacha20_state, le_key, bottom_row);
+	chacha20_crypt(chacha20_state, b.block0, b.block0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+	poly1305_update(&poly1305_state, ad, ad_len);
+	poly1305_update(&poly1305_state, pad0, (0x10 - ad_len) & 0xf);
+	chacha20_crypt(chacha20_state, dst, src, src_len);
+	poly1305_update(&poly1305_state, dst, src_len);
+	poly1305_update(&poly1305_state, pad0, (0x10 - src_len) & 0xf);
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+	poly1305_final(&poly1305_state, dst + src_len);
+}
+
+static void __init
+chacha20poly1305_selftest_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+				  const u8 *ad, const size_t ad_len,
+				  const u8 *nonce, const size_t nonce_len,
+				  const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	if (nonce_len == 8)
+		chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len,
+					 get_unaligned_le64(nonce), key);
+	else if (nonce_len == 12)
+		chacha20poly1305_encrypt_bignonce(dst, src, src_len, ad,
+						  ad_len, nonce, key);
+	else
+		BUG();
+}
+
+static bool __init
+decryption_success(bool func_ret, bool expect_failure, int memcmp_result)
+{
+	if (expect_failure)
+		return !func_ret;
+	return func_ret && !memcmp_result;
+}
+
+bool __init chacha20poly1305_selftest(void)
+{
+	enum { MAXIMUM_TEST_BUFFER_LEN = 1UL << 12 };
+	size_t i, j, k, total_len;
+	u8 *computed_output = NULL, *input = NULL;
+	bool success = true, ret;
+	struct scatterlist sg_src[3];
+
+	computed_output = kmalloc(MAXIMUM_TEST_BUFFER_LEN, GFP_KERNEL);
+	input = kmalloc(MAXIMUM_TEST_BUFFER_LEN, GFP_KERNEL);
+	if (!computed_output || !input) {
+		pr_err("chacha20poly1305 self-test malloc: FAIL\n");
+		success = false;
+		goto out;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		chacha20poly1305_selftest_encrypt(computed_output,
+					chacha20poly1305_enc_vectors[i].input,
+					chacha20poly1305_enc_vectors[i].ilen,
+					chacha20poly1305_enc_vectors[i].assoc,
+					chacha20poly1305_enc_vectors[i].alen,
+					chacha20poly1305_enc_vectors[i].nonce,
+					chacha20poly1305_enc_vectors[i].nlen,
+					chacha20poly1305_enc_vectors[i].key);
+		if (memcmp(computed_output,
+			   chacha20poly1305_enc_vectors[i].output,
+			   chacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("chacha20poly1305 encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_enc_vectors); ++i) {
+		if (chacha20poly1305_enc_vectors[i].nlen != 8)
+			continue;
+		memcpy(computed_output, chacha20poly1305_enc_vectors[i].input,
+		       chacha20poly1305_enc_vectors[i].ilen);
+		sg_init_one(sg_src, computed_output,
+			    chacha20poly1305_enc_vectors[i].ilen + POLY1305_DIGEST_SIZE);
+		ret = chacha20poly1305_encrypt_sg_inplace(sg_src,
+			chacha20poly1305_enc_vectors[i].ilen,
+			chacha20poly1305_enc_vectors[i].assoc,
+			chacha20poly1305_enc_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_enc_vectors[i].nonce),
+			chacha20poly1305_enc_vectors[i].key);
+		if (!ret || memcmp(computed_output,
+				   chacha20poly1305_enc_vectors[i].output,
+				   chacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("chacha20poly1305 sg encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		ret = chacha20poly1305_decrypt(computed_output,
+			chacha20poly1305_dec_vectors[i].input,
+			chacha20poly1305_dec_vectors[i].ilen,
+			chacha20poly1305_dec_vectors[i].assoc,
+			chacha20poly1305_dec_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_dec_vectors[i].nonce),
+			chacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+				chacha20poly1305_dec_vectors[i].failure,
+				memcmp(computed_output,
+				       chacha20poly1305_dec_vectors[i].output,
+				       chacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("chacha20poly1305 decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(chacha20poly1305_dec_vectors); ++i) {
+		memcpy(computed_output, chacha20poly1305_dec_vectors[i].input,
+		       chacha20poly1305_dec_vectors[i].ilen);
+		sg_init_one(sg_src, computed_output,
+			    chacha20poly1305_dec_vectors[i].ilen);
+		ret = chacha20poly1305_decrypt_sg_inplace(sg_src,
+			chacha20poly1305_dec_vectors[i].ilen,
+			chacha20poly1305_dec_vectors[i].assoc,
+			chacha20poly1305_dec_vectors[i].alen,
+			get_unaligned_le64(chacha20poly1305_dec_vectors[i].nonce),
+			chacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+			chacha20poly1305_dec_vectors[i].failure,
+			memcmp(computed_output, chacha20poly1305_dec_vectors[i].output,
+			       chacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("chacha20poly1305 sg decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(xchacha20poly1305_enc_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		xchacha20poly1305_encrypt(computed_output,
+					xchacha20poly1305_enc_vectors[i].input,
+					xchacha20poly1305_enc_vectors[i].ilen,
+					xchacha20poly1305_enc_vectors[i].assoc,
+					xchacha20poly1305_enc_vectors[i].alen,
+					xchacha20poly1305_enc_vectors[i].nonce,
+					xchacha20poly1305_enc_vectors[i].key);
+		if (memcmp(computed_output,
+			   xchacha20poly1305_enc_vectors[i].output,
+			   xchacha20poly1305_enc_vectors[i].ilen +
+							POLY1305_DIGEST_SIZE)) {
+			pr_err("xchacha20poly1305 encryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(xchacha20poly1305_dec_vectors); ++i) {
+		memset(computed_output, 0, MAXIMUM_TEST_BUFFER_LEN);
+		ret = xchacha20poly1305_decrypt(computed_output,
+					xchacha20poly1305_dec_vectors[i].input,
+					xchacha20poly1305_dec_vectors[i].ilen,
+					xchacha20poly1305_dec_vectors[i].assoc,
+					xchacha20poly1305_dec_vectors[i].alen,
+					xchacha20poly1305_dec_vectors[i].nonce,
+					xchacha20poly1305_dec_vectors[i].key);
+		if (!decryption_success(ret,
+				xchacha20poly1305_dec_vectors[i].failure,
+				memcmp(computed_output,
+				       xchacha20poly1305_dec_vectors[i].output,
+				       xchacha20poly1305_dec_vectors[i].ilen -
+							POLY1305_DIGEST_SIZE))) {
+			pr_err("xchacha20poly1305 decryption self-test %zu: FAIL\n",
+			       i + 1);
+			success = false;
+		}
+	}
+
+	for (total_len = POLY1305_DIGEST_SIZE; IS_ENABLED(DEBUG_CHACHA20POLY1305_SLOW_CHUNK_TEST)
+	     && total_len <= 1 << 10; ++total_len) {
+		for (i = 0; i <= total_len; ++i) {
+			for (j = i; j <= total_len; ++j) {
+				k = 0;
+				sg_init_table(sg_src, 3);
+				if (i)
+					sg_set_buf(&sg_src[k++], input, i);
+				if (j - i)
+					sg_set_buf(&sg_src[k++], input + i, j - i);
+				if (total_len - j)
+					sg_set_buf(&sg_src[k++], input + j, total_len - j);
+				sg_init_marker(sg_src, k);
+				memset(computed_output, 0, total_len);
+				memset(input, 0, total_len);
+
+				if (!chacha20poly1305_encrypt_sg_inplace(sg_src,
+					total_len - POLY1305_DIGEST_SIZE, NULL, 0,
+					0, enc_key001))
+					goto chunkfail;
+				chacha20poly1305_encrypt(computed_output,
+					computed_output,
+					total_len - POLY1305_DIGEST_SIZE, NULL, 0, 0,
+					enc_key001);
+				if (memcmp(computed_output, input, total_len))
+					goto chunkfail;
+				if (!chacha20poly1305_decrypt(computed_output,
+					input, total_len, NULL, 0, 0, enc_key001))
+					goto chunkfail;
+				for (k = 0; k < total_len - POLY1305_DIGEST_SIZE; ++k) {
+					if (computed_output[k])
+						goto chunkfail;
+				}
+				if (!chacha20poly1305_decrypt_sg_inplace(sg_src,
+					total_len, NULL, 0, 0, enc_key001))
+					goto chunkfail;
+				for (k = 0; k < total_len - POLY1305_DIGEST_SIZE; ++k) {
+					if (input[k])
+						goto chunkfail;
+				}
+				continue;
+
+			chunkfail:
+				pr_err("chacha20poly1305 chunked self-test %zu/%zu/%zu: FAIL\n",
+				       total_len, i, j);
+				success = false;
+			}
+
+		}
+	}
+
+out:
+	kfree(computed_output);
+	kfree(input);
+	return success;
+}
diff --git a/lib/crypto/chacha20poly1305.c b/lib/crypto/chacha20poly1305.c
new file mode 100644
index 0000000..431e042
--- /dev/null
+++ b/lib/crypto/chacha20poly1305.c
@@ -0,0 +1,370 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the ChaCha20Poly1305 AEAD construction.
+ *
+ * Information: https://tools.ietf.org/html/rfc8439
+ */
+
+#include <crypto/algapi.h>
+#include <crypto/chacha20poly1305.h>
+#include <crypto/chacha.h>
+#include <crypto/poly1305.h>
+#include <crypto/scatterwalk.h>
+
+#include <asm/unaligned.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/mm.h>
+#include <linux/module.h>
+
+#define CHACHA_KEY_WORDS	(CHACHA_KEY_SIZE / sizeof(u32))
+
+static void chacha_load_key(u32 *k, const u8 *in)
+{
+	k[0] = get_unaligned_le32(in);
+	k[1] = get_unaligned_le32(in + 4);
+	k[2] = get_unaligned_le32(in + 8);
+	k[3] = get_unaligned_le32(in + 12);
+	k[4] = get_unaligned_le32(in + 16);
+	k[5] = get_unaligned_le32(in + 20);
+	k[6] = get_unaligned_le32(in + 24);
+	k[7] = get_unaligned_le32(in + 28);
+}
+
+static void xchacha_init(u32 *chacha_state, const u8 *key, const u8 *nonce)
+{
+	u32 k[CHACHA_KEY_WORDS];
+	u8 iv[CHACHA_IV_SIZE];
+
+	memset(iv, 0, 8);
+	memcpy(iv + 8, nonce + 16, 8);
+
+	chacha_load_key(k, key);
+
+	/* Compute the subkey given the original key and first 128 nonce bits */
+	chacha_init(chacha_state, k, nonce);
+	hchacha_block(chacha_state, k, 20);
+
+	chacha_init(chacha_state, k, iv);
+
+	memzero_explicit(k, sizeof(k));
+	memzero_explicit(iv, sizeof(iv));
+}
+
+static void
+__chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			   const u8 *ad, const size_t ad_len, u32 *chacha_state)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		__le64 lens[2];
+	} b;
+
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	poly1305_update(&poly1305_state, ad, ad_len);
+	if (ad_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+
+	chacha20_crypt(chacha_state, dst, src, src_len);
+
+	poly1305_update(&poly1305_state, dst, src_len);
+	if (src_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (src_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	poly1305_final(&poly1305_state, dst + src_len);
+
+	memzero_explicit(chacha_state, CHACHA_STATE_WORDS * sizeof(u32));
+	memzero_explicit(&b, sizeof(b));
+}
+
+void chacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	u32 k[CHACHA_KEY_WORDS];
+	__le64 iv[2];
+
+	chacha_load_key(k, key);
+
+	iv[0] = 0;
+	iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, k, (u8 *)iv);
+	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, chacha_state);
+
+	memzero_explicit(iv, sizeof(iv));
+	memzero_explicit(k, sizeof(k));
+}
+EXPORT_SYMBOL(chacha20poly1305_encrypt);
+
+void xchacha20poly1305_encrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+
+	xchacha_init(chacha_state, key, nonce);
+	__chacha20poly1305_encrypt(dst, src, src_len, ad, ad_len, chacha_state);
+}
+EXPORT_SYMBOL(xchacha20poly1305_encrypt);
+
+static bool
+__chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			   const u8 *ad, const size_t ad_len, u32 *chacha_state)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	size_t dst_len;
+	int ret;
+	union {
+		u8 block0[POLY1305_KEY_SIZE];
+		u8 mac[POLY1305_DIGEST_SIZE];
+		__le64 lens[2];
+	} b;
+
+	if (unlikely(src_len < POLY1305_DIGEST_SIZE))
+		return false;
+
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	poly1305_update(&poly1305_state, ad, ad_len);
+	if (ad_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+
+	dst_len = src_len - POLY1305_DIGEST_SIZE;
+	poly1305_update(&poly1305_state, src, dst_len);
+	if (dst_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (dst_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(dst_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	poly1305_final(&poly1305_state, b.mac);
+
+	ret = crypto_memneq(b.mac, src + dst_len, POLY1305_DIGEST_SIZE);
+	if (likely(!ret))
+		chacha20_crypt(chacha_state, dst, src, dst_len);
+
+	memzero_explicit(&b, sizeof(b));
+
+	return !ret;
+}
+
+bool chacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			      const u8 *ad, const size_t ad_len,
+			      const u64 nonce,
+			      const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	u32 k[CHACHA_KEY_WORDS];
+	__le64 iv[2];
+	bool ret;
+
+	chacha_load_key(k, key);
+
+	iv[0] = 0;
+	iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, k, (u8 *)iv);
+	ret = __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len,
+					 chacha_state);
+
+	memzero_explicit(chacha_state, sizeof(chacha_state));
+	memzero_explicit(iv, sizeof(iv));
+	memzero_explicit(k, sizeof(k));
+	return ret;
+}
+EXPORT_SYMBOL(chacha20poly1305_decrypt);
+
+bool xchacha20poly1305_decrypt(u8 *dst, const u8 *src, const size_t src_len,
+			       const u8 *ad, const size_t ad_len,
+			       const u8 nonce[XCHACHA20POLY1305_NONCE_SIZE],
+			       const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	u32 chacha_state[CHACHA_STATE_WORDS];
+
+	xchacha_init(chacha_state, key, nonce);
+	return __chacha20poly1305_decrypt(dst, src, src_len, ad, ad_len,
+					  chacha_state);
+}
+EXPORT_SYMBOL(xchacha20poly1305_decrypt);
+
+static
+bool chacha20poly1305_crypt_sg_inplace(struct scatterlist *src,
+				       const size_t src_len,
+				       const u8 *ad, const size_t ad_len,
+				       const u64 nonce,
+				       const u8 key[CHACHA20POLY1305_KEY_SIZE],
+				       int encrypt)
+{
+	const u8 *pad0 = page_address(ZERO_PAGE(0));
+	struct poly1305_desc_ctx poly1305_state;
+	u32 chacha_state[CHACHA_STATE_WORDS];
+	struct sg_mapping_iter miter;
+	size_t partial = 0;
+	unsigned int flags;
+	bool ret = true;
+	int sl;
+	union {
+		struct {
+			u32 k[CHACHA_KEY_WORDS];
+			__le64 iv[2];
+		};
+		u8 block0[POLY1305_KEY_SIZE];
+		u8 chacha_stream[CHACHA_BLOCK_SIZE];
+		struct {
+			u8 mac[2][POLY1305_DIGEST_SIZE];
+		};
+		__le64 lens[2];
+	} b __aligned(16);
+
+	if (WARN_ON(src_len > INT_MAX))
+		return false;
+
+	chacha_load_key(b.k, key);
+
+	b.iv[0] = 0;
+	b.iv[1] = cpu_to_le64(nonce);
+
+	chacha_init(chacha_state, b.k, (u8 *)b.iv);
+	chacha20_crypt(chacha_state, b.block0, pad0, sizeof(b.block0));
+	poly1305_init(&poly1305_state, b.block0);
+
+	if (unlikely(ad_len)) {
+		poly1305_update(&poly1305_state, ad, ad_len);
+		if (ad_len & 0xf)
+			poly1305_update(&poly1305_state, pad0, 0x10 - (ad_len & 0xf));
+	}
+
+	flags = SG_MITER_TO_SG;
+	if (!preemptible())
+		flags |= SG_MITER_ATOMIC;
+
+	sg_miter_start(&miter, src, sg_nents(src), flags);
+
+	for (sl = src_len; sl > 0 && sg_miter_next(&miter); sl -= miter.length) {
+		u8 *addr = miter.addr;
+		size_t length = min_t(size_t, sl, miter.length);
+
+		if (!encrypt)
+			poly1305_update(&poly1305_state, addr, length);
+
+		if (unlikely(partial)) {
+			size_t l = min(length, CHACHA_BLOCK_SIZE - partial);
+
+			crypto_xor(addr, b.chacha_stream + partial, l);
+			partial = (partial + l) & (CHACHA_BLOCK_SIZE - 1);
+
+			addr += l;
+			length -= l;
+		}
+
+		if (likely(length >= CHACHA_BLOCK_SIZE || length == sl)) {
+			size_t l = length;
+
+			if (unlikely(length < sl))
+				l &= ~(CHACHA_BLOCK_SIZE - 1);
+			chacha20_crypt(chacha_state, addr, addr, l);
+			addr += l;
+			length -= l;
+		}
+
+		if (unlikely(length > 0)) {
+			chacha20_crypt(chacha_state, b.chacha_stream, pad0,
+				       CHACHA_BLOCK_SIZE);
+			crypto_xor(addr, b.chacha_stream, length);
+			partial = length;
+		}
+
+		if (encrypt)
+			poly1305_update(&poly1305_state, miter.addr,
+					min_t(size_t, sl, miter.length));
+	}
+
+	if (src_len & 0xf)
+		poly1305_update(&poly1305_state, pad0, 0x10 - (src_len & 0xf));
+
+	b.lens[0] = cpu_to_le64(ad_len);
+	b.lens[1] = cpu_to_le64(src_len);
+	poly1305_update(&poly1305_state, (u8 *)b.lens, sizeof(b.lens));
+
+	if (likely(sl <= -POLY1305_DIGEST_SIZE)) {
+		if (encrypt) {
+			poly1305_final(&poly1305_state,
+				       miter.addr + miter.length + sl);
+			ret = true;
+		} else {
+			poly1305_final(&poly1305_state, b.mac[0]);
+			ret = !crypto_memneq(b.mac[0],
+					     miter.addr + miter.length + sl,
+					     POLY1305_DIGEST_SIZE);
+		}
+	}
+
+	sg_miter_stop(&miter);
+
+	if (unlikely(sl > -POLY1305_DIGEST_SIZE)) {
+		poly1305_final(&poly1305_state, b.mac[1]);
+		scatterwalk_map_and_copy(b.mac[encrypt], src, src_len,
+					 sizeof(b.mac[1]), encrypt);
+		ret = encrypt ||
+		      !crypto_memneq(b.mac[0], b.mac[1], POLY1305_DIGEST_SIZE);
+	}
+
+	memzero_explicit(chacha_state, sizeof(chacha_state));
+	memzero_explicit(&b, sizeof(b));
+
+	return ret;
+}
+
+bool chacha20poly1305_encrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	return chacha20poly1305_crypt_sg_inplace(src, src_len, ad, ad_len,
+						 nonce, key, 1);
+}
+EXPORT_SYMBOL(chacha20poly1305_encrypt_sg_inplace);
+
+bool chacha20poly1305_decrypt_sg_inplace(struct scatterlist *src, size_t src_len,
+					 const u8 *ad, const size_t ad_len,
+					 const u64 nonce,
+					 const u8 key[CHACHA20POLY1305_KEY_SIZE])
+{
+	if (unlikely(src_len < POLY1305_DIGEST_SIZE))
+		return false;
+
+	return chacha20poly1305_crypt_sg_inplace(src,
+						 src_len - POLY1305_DIGEST_SIZE,
+						 ad, ad_len, nonce, key, 0);
+}
+EXPORT_SYMBOL(chacha20poly1305_decrypt_sg_inplace);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!chacha20poly1305_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+module_init(mod_init);
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("ChaCha20Poly1305 AEAD construction");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/curve25519-fiat32.c b/lib/crypto/curve25519-fiat32.c
new file mode 100644
index 0000000..2fde0ec
--- /dev/null
+++ b/lib/crypto/curve25519-fiat32.c
@@ -0,0 +1,864 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2016 The fiat-crypto Authors.
+ * Copyright (C) 2018-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is a machine-generated formally verified implementation of Curve25519
+ * ECDH from: <https://github.com/mit-plv/fiat-crypto>. Though originally
+ * machine generated, it has been tweaked to be suitable for use in the kernel.
+ * It is optimized for 32-bit machines and machines that cannot work efficiently
+ * with 128-bit integer types.
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/curve25519.h>
+#include <linux/string.h>
+
+/* fe means field element. Here the field is \Z/(2^255-19). An element t,
+ * entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77
+ * t[3]+2^102 t[4]+...+2^230 t[9].
+ * fe limbs are bounded by 1.125*2^26,1.125*2^25,1.125*2^26,1.125*2^25,etc.
+ * Multiplication and carrying produce fe from fe_loose.
+ */
+typedef struct fe { u32 v[10]; } fe;
+
+/* fe_loose limbs are bounded by 3.375*2^26,3.375*2^25,3.375*2^26,3.375*2^25,etc
+ * Addition and subtraction produce fe_loose from (fe, fe).
+ */
+typedef struct fe_loose { u32 v[10]; } fe_loose;
+
+static __always_inline void fe_frombytes_impl(u32 h[10], const u8 *s)
+{
+	/* Ignores top bit of s. */
+	u32 a0 = get_unaligned_le32(s);
+	u32 a1 = get_unaligned_le32(s+4);
+	u32 a2 = get_unaligned_le32(s+8);
+	u32 a3 = get_unaligned_le32(s+12);
+	u32 a4 = get_unaligned_le32(s+16);
+	u32 a5 = get_unaligned_le32(s+20);
+	u32 a6 = get_unaligned_le32(s+24);
+	u32 a7 = get_unaligned_le32(s+28);
+	h[0] = a0&((1<<26)-1);                    /* 26 used, 32-26 left.   26 */
+	h[1] = (a0>>26) | ((a1&((1<<19)-1))<< 6); /* (32-26) + 19 =  6+19 = 25 */
+	h[2] = (a1>>19) | ((a2&((1<<13)-1))<<13); /* (32-19) + 13 = 13+13 = 26 */
+	h[3] = (a2>>13) | ((a3&((1<< 6)-1))<<19); /* (32-13) +  6 = 19+ 6 = 25 */
+	h[4] = (a3>> 6);                          /* (32- 6)              = 26 */
+	h[5] = a4&((1<<25)-1);                    /*                        25 */
+	h[6] = (a4>>25) | ((a5&((1<<19)-1))<< 7); /* (32-25) + 19 =  7+19 = 26 */
+	h[7] = (a5>>19) | ((a6&((1<<12)-1))<<13); /* (32-19) + 12 = 13+12 = 25 */
+	h[8] = (a6>>12) | ((a7&((1<< 6)-1))<<20); /* (32-12) +  6 = 20+ 6 = 26 */
+	h[9] = (a7>> 6)&((1<<25)-1); /*                                     25 */
+}
+
+static __always_inline void fe_frombytes(fe *h, const u8 *s)
+{
+	fe_frombytes_impl(h->v, s);
+}
+
+static __always_inline u8 /*bool*/
+addcarryx_u25(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 25 bits of result and 1 bit of carry
+	 * (26 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a + b + c;
+	*low = x & ((1 << 25) - 1);
+	return (x >> 25) & 1;
+}
+
+static __always_inline u8 /*bool*/
+addcarryx_u26(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 26 bits of result and 1 bit of carry
+	 * (27 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a + b + c;
+	*low = x & ((1 << 26) - 1);
+	return (x >> 26) & 1;
+}
+
+static __always_inline u8 /*bool*/
+subborrow_u25(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 25 bits of result and 1 bit of borrow
+	 * (26 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a - b - c;
+	*low = x & ((1 << 25) - 1);
+	return x >> 31;
+}
+
+static __always_inline u8 /*bool*/
+subborrow_u26(u8 /*bool*/ c, u32 a, u32 b, u32 *low)
+{
+	/* This function extracts 26 bits of result and 1 bit of borrow
+	 *(27 total), so a 32-bit intermediate is sufficient.
+	 */
+	u32 x = a - b - c;
+	*low = x & ((1 << 26) - 1);
+	return x >> 31;
+}
+
+static __always_inline u32 cmovznz32(u32 t, u32 z, u32 nz)
+{
+	t = -!!t; /* all set if nonzero, 0 if 0 */
+	return (t&nz) | ((~t)&z);
+}
+
+static __always_inline void fe_freeze(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x17 = in1[9];
+	{ const u32 x18 = in1[8];
+	{ const u32 x16 = in1[7];
+	{ const u32 x14 = in1[6];
+	{ const u32 x12 = in1[5];
+	{ const u32 x10 = in1[4];
+	{ const u32 x8 = in1[3];
+	{ const u32 x6 = in1[2];
+	{ const u32 x4 = in1[1];
+	{ const u32 x2 = in1[0];
+	{ u32 x20; u8/*bool*/ x21 = subborrow_u26(0x0, x2, 0x3ffffed, &x20);
+	{ u32 x23; u8/*bool*/ x24 = subborrow_u25(x21, x4, 0x1ffffff, &x23);
+	{ u32 x26; u8/*bool*/ x27 = subborrow_u26(x24, x6, 0x3ffffff, &x26);
+	{ u32 x29; u8/*bool*/ x30 = subborrow_u25(x27, x8, 0x1ffffff, &x29);
+	{ u32 x32; u8/*bool*/ x33 = subborrow_u26(x30, x10, 0x3ffffff, &x32);
+	{ u32 x35; u8/*bool*/ x36 = subborrow_u25(x33, x12, 0x1ffffff, &x35);
+	{ u32 x38; u8/*bool*/ x39 = subborrow_u26(x36, x14, 0x3ffffff, &x38);
+	{ u32 x41; u8/*bool*/ x42 = subborrow_u25(x39, x16, 0x1ffffff, &x41);
+	{ u32 x44; u8/*bool*/ x45 = subborrow_u26(x42, x18, 0x3ffffff, &x44);
+	{ u32 x47; u8/*bool*/ x48 = subborrow_u25(x45, x17, 0x1ffffff, &x47);
+	{ u32 x49 = cmovznz32(x48, 0x0, 0xffffffff);
+	{ u32 x50 = (x49 & 0x3ffffed);
+	{ u32 x52; u8/*bool*/ x53 = addcarryx_u26(0x0, x20, x50, &x52);
+	{ u32 x54 = (x49 & 0x1ffffff);
+	{ u32 x56; u8/*bool*/ x57 = addcarryx_u25(x53, x23, x54, &x56);
+	{ u32 x58 = (x49 & 0x3ffffff);
+	{ u32 x60; u8/*bool*/ x61 = addcarryx_u26(x57, x26, x58, &x60);
+	{ u32 x62 = (x49 & 0x1ffffff);
+	{ u32 x64; u8/*bool*/ x65 = addcarryx_u25(x61, x29, x62, &x64);
+	{ u32 x66 = (x49 & 0x3ffffff);
+	{ u32 x68; u8/*bool*/ x69 = addcarryx_u26(x65, x32, x66, &x68);
+	{ u32 x70 = (x49 & 0x1ffffff);
+	{ u32 x72; u8/*bool*/ x73 = addcarryx_u25(x69, x35, x70, &x72);
+	{ u32 x74 = (x49 & 0x3ffffff);
+	{ u32 x76; u8/*bool*/ x77 = addcarryx_u26(x73, x38, x74, &x76);
+	{ u32 x78 = (x49 & 0x1ffffff);
+	{ u32 x80; u8/*bool*/ x81 = addcarryx_u25(x77, x41, x78, &x80);
+	{ u32 x82 = (x49 & 0x3ffffff);
+	{ u32 x84; u8/*bool*/ x85 = addcarryx_u26(x81, x44, x82, &x84);
+	{ u32 x86 = (x49 & 0x1ffffff);
+	{ u32 x88; addcarryx_u25(x85, x47, x86, &x88);
+	out[0] = x52;
+	out[1] = x56;
+	out[2] = x60;
+	out[3] = x64;
+	out[4] = x68;
+	out[5] = x72;
+	out[6] = x76;
+	out[7] = x80;
+	out[8] = x84;
+	out[9] = x88;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_tobytes(u8 s[32], const fe *f)
+{
+	u32 h[10];
+	fe_freeze(h, f->v);
+	s[0] = h[0] >> 0;
+	s[1] = h[0] >> 8;
+	s[2] = h[0] >> 16;
+	s[3] = (h[0] >> 24) | (h[1] << 2);
+	s[4] = h[1] >> 6;
+	s[5] = h[1] >> 14;
+	s[6] = (h[1] >> 22) | (h[2] << 3);
+	s[7] = h[2] >> 5;
+	s[8] = h[2] >> 13;
+	s[9] = (h[2] >> 21) | (h[3] << 5);
+	s[10] = h[3] >> 3;
+	s[11] = h[3] >> 11;
+	s[12] = (h[3] >> 19) | (h[4] << 6);
+	s[13] = h[4] >> 2;
+	s[14] = h[4] >> 10;
+	s[15] = h[4] >> 18;
+	s[16] = h[5] >> 0;
+	s[17] = h[5] >> 8;
+	s[18] = h[5] >> 16;
+	s[19] = (h[5] >> 24) | (h[6] << 1);
+	s[20] = h[6] >> 7;
+	s[21] = h[6] >> 15;
+	s[22] = (h[6] >> 23) | (h[7] << 3);
+	s[23] = h[7] >> 5;
+	s[24] = h[7] >> 13;
+	s[25] = (h[7] >> 21) | (h[8] << 4);
+	s[26] = h[8] >> 4;
+	s[27] = h[8] >> 12;
+	s[28] = (h[8] >> 20) | (h[9] << 6);
+	s[29] = h[9] >> 2;
+	s[30] = h[9] >> 10;
+	s[31] = h[9] >> 18;
+}
+
+/* h = f */
+static __always_inline void fe_copy(fe *h, const fe *f)
+{
+	memmove(h, f, sizeof(u32) * 10);
+}
+
+static __always_inline void fe_copy_lt(fe_loose *h, const fe *f)
+{
+	memmove(h, f, sizeof(u32) * 10);
+}
+
+/* h = 0 */
+static __always_inline void fe_0(fe *h)
+{
+	memset(h, 0, sizeof(u32) * 10);
+}
+
+/* h = 1 */
+static __always_inline void fe_1(fe *h)
+{
+	memset(h, 0, sizeof(u32) * 10);
+	h->v[0] = 1;
+}
+
+static noinline void fe_add_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	out[0] = (x5 + x23);
+	out[1] = (x7 + x25);
+	out[2] = (x9 + x27);
+	out[3] = (x11 + x29);
+	out[4] = (x13 + x31);
+	out[5] = (x15 + x33);
+	out[6] = (x17 + x35);
+	out[7] = (x19 + x37);
+	out[8] = (x21 + x39);
+	out[9] = (x20 + x38);
+	}}}}}}}}}}}}}}}}}}}}
+}
+
+/* h = f + g
+ * Can overlap h with f or g.
+ */
+static __always_inline void fe_add(fe_loose *h, const fe *f, const fe *g)
+{
+	fe_add_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_sub_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	out[0] = ((0x7ffffda + x5) - x23);
+	out[1] = ((0x3fffffe + x7) - x25);
+	out[2] = ((0x7fffffe + x9) - x27);
+	out[3] = ((0x3fffffe + x11) - x29);
+	out[4] = ((0x7fffffe + x13) - x31);
+	out[5] = ((0x3fffffe + x15) - x33);
+	out[6] = ((0x7fffffe + x17) - x35);
+	out[7] = ((0x3fffffe + x19) - x37);
+	out[8] = ((0x7fffffe + x21) - x39);
+	out[9] = ((0x3fffffe + x20) - x38);
+	}}}}}}}}}}}}}}}}}}}}
+}
+
+/* h = f - g
+ * Can overlap h with f or g.
+ */
+static __always_inline void fe_sub(fe_loose *h, const fe *f, const fe *g)
+{
+	fe_sub_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_mul_impl(u32 out[10], const u32 in1[10], const u32 in2[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = in2[9];
+	{ const u32 x39 = in2[8];
+	{ const u32 x37 = in2[7];
+	{ const u32 x35 = in2[6];
+	{ const u32 x33 = in2[5];
+	{ const u32 x31 = in2[4];
+	{ const u32 x29 = in2[3];
+	{ const u32 x27 = in2[2];
+	{ const u32 x25 = in2[1];
+	{ const u32 x23 = in2[0];
+	{ u64 x40 = ((u64)x23 * x5);
+	{ u64 x41 = (((u64)x23 * x7) + ((u64)x25 * x5));
+	{ u64 x42 = ((((u64)(0x2 * x25) * x7) + ((u64)x23 * x9)) + ((u64)x27 * x5));
+	{ u64 x43 = (((((u64)x25 * x9) + ((u64)x27 * x7)) + ((u64)x23 * x11)) + ((u64)x29 * x5));
+	{ u64 x44 = (((((u64)x27 * x9) + (0x2 * (((u64)x25 * x11) + ((u64)x29 * x7)))) + ((u64)x23 * x13)) + ((u64)x31 * x5));
+	{ u64 x45 = (((((((u64)x27 * x11) + ((u64)x29 * x9)) + ((u64)x25 * x13)) + ((u64)x31 * x7)) + ((u64)x23 * x15)) + ((u64)x33 * x5));
+	{ u64 x46 = (((((0x2 * ((((u64)x29 * x11) + ((u64)x25 * x15)) + ((u64)x33 * x7))) + ((u64)x27 * x13)) + ((u64)x31 * x9)) + ((u64)x23 * x17)) + ((u64)x35 * x5));
+	{ u64 x47 = (((((((((u64)x29 * x13) + ((u64)x31 * x11)) + ((u64)x27 * x15)) + ((u64)x33 * x9)) + ((u64)x25 * x17)) + ((u64)x35 * x7)) + ((u64)x23 * x19)) + ((u64)x37 * x5));
+	{ u64 x48 = (((((((u64)x31 * x13) + (0x2 * (((((u64)x29 * x15) + ((u64)x33 * x11)) + ((u64)x25 * x19)) + ((u64)x37 * x7)))) + ((u64)x27 * x17)) + ((u64)x35 * x9)) + ((u64)x23 * x21)) + ((u64)x39 * x5));
+	{ u64 x49 = (((((((((((u64)x31 * x15) + ((u64)x33 * x13)) + ((u64)x29 * x17)) + ((u64)x35 * x11)) + ((u64)x27 * x19)) + ((u64)x37 * x9)) + ((u64)x25 * x21)) + ((u64)x39 * x7)) + ((u64)x23 * x20)) + ((u64)x38 * x5));
+	{ u64 x50 = (((((0x2 * ((((((u64)x33 * x15) + ((u64)x29 * x19)) + ((u64)x37 * x11)) + ((u64)x25 * x20)) + ((u64)x38 * x7))) + ((u64)x31 * x17)) + ((u64)x35 * x13)) + ((u64)x27 * x21)) + ((u64)x39 * x9));
+	{ u64 x51 = (((((((((u64)x33 * x17) + ((u64)x35 * x15)) + ((u64)x31 * x19)) + ((u64)x37 * x13)) + ((u64)x29 * x21)) + ((u64)x39 * x11)) + ((u64)x27 * x20)) + ((u64)x38 * x9));
+	{ u64 x52 = (((((u64)x35 * x17) + (0x2 * (((((u64)x33 * x19) + ((u64)x37 * x15)) + ((u64)x29 * x20)) + ((u64)x38 * x11)))) + ((u64)x31 * x21)) + ((u64)x39 * x13));
+	{ u64 x53 = (((((((u64)x35 * x19) + ((u64)x37 * x17)) + ((u64)x33 * x21)) + ((u64)x39 * x15)) + ((u64)x31 * x20)) + ((u64)x38 * x13));
+	{ u64 x54 = (((0x2 * ((((u64)x37 * x19) + ((u64)x33 * x20)) + ((u64)x38 * x15))) + ((u64)x35 * x21)) + ((u64)x39 * x17));
+	{ u64 x55 = (((((u64)x37 * x21) + ((u64)x39 * x19)) + ((u64)x35 * x20)) + ((u64)x38 * x17));
+	{ u64 x56 = (((u64)x39 * x21) + (0x2 * (((u64)x37 * x20) + ((u64)x38 * x19))));
+	{ u64 x57 = (((u64)x39 * x20) + ((u64)x38 * x21));
+	{ u64 x58 = ((u64)(0x2 * x38) * x20);
+	{ u64 x59 = (x48 + (x58 << 0x4));
+	{ u64 x60 = (x59 + (x58 << 0x1));
+	{ u64 x61 = (x60 + x58);
+	{ u64 x62 = (x47 + (x57 << 0x4));
+	{ u64 x63 = (x62 + (x57 << 0x1));
+	{ u64 x64 = (x63 + x57);
+	{ u64 x65 = (x46 + (x56 << 0x4));
+	{ u64 x66 = (x65 + (x56 << 0x1));
+	{ u64 x67 = (x66 + x56);
+	{ u64 x68 = (x45 + (x55 << 0x4));
+	{ u64 x69 = (x68 + (x55 << 0x1));
+	{ u64 x70 = (x69 + x55);
+	{ u64 x71 = (x44 + (x54 << 0x4));
+	{ u64 x72 = (x71 + (x54 << 0x1));
+	{ u64 x73 = (x72 + x54);
+	{ u64 x74 = (x43 + (x53 << 0x4));
+	{ u64 x75 = (x74 + (x53 << 0x1));
+	{ u64 x76 = (x75 + x53);
+	{ u64 x77 = (x42 + (x52 << 0x4));
+	{ u64 x78 = (x77 + (x52 << 0x1));
+	{ u64 x79 = (x78 + x52);
+	{ u64 x80 = (x41 + (x51 << 0x4));
+	{ u64 x81 = (x80 + (x51 << 0x1));
+	{ u64 x82 = (x81 + x51);
+	{ u64 x83 = (x40 + (x50 << 0x4));
+	{ u64 x84 = (x83 + (x50 << 0x1));
+	{ u64 x85 = (x84 + x50);
+	{ u64 x86 = (x85 >> 0x1a);
+	{ u32 x87 = ((u32)x85 & 0x3ffffff);
+	{ u64 x88 = (x86 + x82);
+	{ u64 x89 = (x88 >> 0x19);
+	{ u32 x90 = ((u32)x88 & 0x1ffffff);
+	{ u64 x91 = (x89 + x79);
+	{ u64 x92 = (x91 >> 0x1a);
+	{ u32 x93 = ((u32)x91 & 0x3ffffff);
+	{ u64 x94 = (x92 + x76);
+	{ u64 x95 = (x94 >> 0x19);
+	{ u32 x96 = ((u32)x94 & 0x1ffffff);
+	{ u64 x97 = (x95 + x73);
+	{ u64 x98 = (x97 >> 0x1a);
+	{ u32 x99 = ((u32)x97 & 0x3ffffff);
+	{ u64 x100 = (x98 + x70);
+	{ u64 x101 = (x100 >> 0x19);
+	{ u32 x102 = ((u32)x100 & 0x1ffffff);
+	{ u64 x103 = (x101 + x67);
+	{ u64 x104 = (x103 >> 0x1a);
+	{ u32 x105 = ((u32)x103 & 0x3ffffff);
+	{ u64 x106 = (x104 + x64);
+	{ u64 x107 = (x106 >> 0x19);
+	{ u32 x108 = ((u32)x106 & 0x1ffffff);
+	{ u64 x109 = (x107 + x61);
+	{ u64 x110 = (x109 >> 0x1a);
+	{ u32 x111 = ((u32)x109 & 0x3ffffff);
+	{ u64 x112 = (x110 + x49);
+	{ u64 x113 = (x112 >> 0x19);
+	{ u32 x114 = ((u32)x112 & 0x1ffffff);
+	{ u64 x115 = (x87 + (0x13 * x113));
+	{ u32 x116 = (u32) (x115 >> 0x1a);
+	{ u32 x117 = ((u32)x115 & 0x3ffffff);
+	{ u32 x118 = (x116 + x90);
+	{ u32 x119 = (x118 >> 0x19);
+	{ u32 x120 = (x118 & 0x1ffffff);
+	out[0] = x117;
+	out[1] = x120;
+	out[2] = (x119 + x93);
+	out[3] = x96;
+	out[4] = x99;
+	out[5] = x102;
+	out[6] = x105;
+	out[7] = x108;
+	out[8] = x111;
+	out[9] = x114;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_mul_ttt(fe *h, const fe *f, const fe *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static __always_inline void fe_mul_tlt(fe *h, const fe_loose *f, const fe *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static __always_inline void
+fe_mul_tll(fe *h, const fe_loose *f, const fe_loose *g)
+{
+	fe_mul_impl(h->v, f->v, g->v);
+}
+
+static noinline void fe_sqr_impl(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x17 = in1[9];
+	{ const u32 x18 = in1[8];
+	{ const u32 x16 = in1[7];
+	{ const u32 x14 = in1[6];
+	{ const u32 x12 = in1[5];
+	{ const u32 x10 = in1[4];
+	{ const u32 x8 = in1[3];
+	{ const u32 x6 = in1[2];
+	{ const u32 x4 = in1[1];
+	{ const u32 x2 = in1[0];
+	{ u64 x19 = ((u64)x2 * x2);
+	{ u64 x20 = ((u64)(0x2 * x2) * x4);
+	{ u64 x21 = (0x2 * (((u64)x4 * x4) + ((u64)x2 * x6)));
+	{ u64 x22 = (0x2 * (((u64)x4 * x6) + ((u64)x2 * x8)));
+	{ u64 x23 = ((((u64)x6 * x6) + ((u64)(0x4 * x4) * x8)) + ((u64)(0x2 * x2) * x10));
+	{ u64 x24 = (0x2 * ((((u64)x6 * x8) + ((u64)x4 * x10)) + ((u64)x2 * x12)));
+	{ u64 x25 = (0x2 * (((((u64)x8 * x8) + ((u64)x6 * x10)) + ((u64)x2 * x14)) + ((u64)(0x2 * x4) * x12)));
+	{ u64 x26 = (0x2 * (((((u64)x8 * x10) + ((u64)x6 * x12)) + ((u64)x4 * x14)) + ((u64)x2 * x16)));
+	{ u64 x27 = (((u64)x10 * x10) + (0x2 * ((((u64)x6 * x14) + ((u64)x2 * x18)) + (0x2 * (((u64)x4 * x16) + ((u64)x8 * x12))))));
+	{ u64 x28 = (0x2 * ((((((u64)x10 * x12) + ((u64)x8 * x14)) + ((u64)x6 * x16)) + ((u64)x4 * x18)) + ((u64)x2 * x17)));
+	{ u64 x29 = (0x2 * (((((u64)x12 * x12) + ((u64)x10 * x14)) + ((u64)x6 * x18)) + (0x2 * (((u64)x8 * x16) + ((u64)x4 * x17)))));
+	{ u64 x30 = (0x2 * (((((u64)x12 * x14) + ((u64)x10 * x16)) + ((u64)x8 * x18)) + ((u64)x6 * x17)));
+	{ u64 x31 = (((u64)x14 * x14) + (0x2 * (((u64)x10 * x18) + (0x2 * (((u64)x12 * x16) + ((u64)x8 * x17))))));
+	{ u64 x32 = (0x2 * ((((u64)x14 * x16) + ((u64)x12 * x18)) + ((u64)x10 * x17)));
+	{ u64 x33 = (0x2 * ((((u64)x16 * x16) + ((u64)x14 * x18)) + ((u64)(0x2 * x12) * x17)));
+	{ u64 x34 = (0x2 * (((u64)x16 * x18) + ((u64)x14 * x17)));
+	{ u64 x35 = (((u64)x18 * x18) + ((u64)(0x4 * x16) * x17));
+	{ u64 x36 = ((u64)(0x2 * x18) * x17);
+	{ u64 x37 = ((u64)(0x2 * x17) * x17);
+	{ u64 x38 = (x27 + (x37 << 0x4));
+	{ u64 x39 = (x38 + (x37 << 0x1));
+	{ u64 x40 = (x39 + x37);
+	{ u64 x41 = (x26 + (x36 << 0x4));
+	{ u64 x42 = (x41 + (x36 << 0x1));
+	{ u64 x43 = (x42 + x36);
+	{ u64 x44 = (x25 + (x35 << 0x4));
+	{ u64 x45 = (x44 + (x35 << 0x1));
+	{ u64 x46 = (x45 + x35);
+	{ u64 x47 = (x24 + (x34 << 0x4));
+	{ u64 x48 = (x47 + (x34 << 0x1));
+	{ u64 x49 = (x48 + x34);
+	{ u64 x50 = (x23 + (x33 << 0x4));
+	{ u64 x51 = (x50 + (x33 << 0x1));
+	{ u64 x52 = (x51 + x33);
+	{ u64 x53 = (x22 + (x32 << 0x4));
+	{ u64 x54 = (x53 + (x32 << 0x1));
+	{ u64 x55 = (x54 + x32);
+	{ u64 x56 = (x21 + (x31 << 0x4));
+	{ u64 x57 = (x56 + (x31 << 0x1));
+	{ u64 x58 = (x57 + x31);
+	{ u64 x59 = (x20 + (x30 << 0x4));
+	{ u64 x60 = (x59 + (x30 << 0x1));
+	{ u64 x61 = (x60 + x30);
+	{ u64 x62 = (x19 + (x29 << 0x4));
+	{ u64 x63 = (x62 + (x29 << 0x1));
+	{ u64 x64 = (x63 + x29);
+	{ u64 x65 = (x64 >> 0x1a);
+	{ u32 x66 = ((u32)x64 & 0x3ffffff);
+	{ u64 x67 = (x65 + x61);
+	{ u64 x68 = (x67 >> 0x19);
+	{ u32 x69 = ((u32)x67 & 0x1ffffff);
+	{ u64 x70 = (x68 + x58);
+	{ u64 x71 = (x70 >> 0x1a);
+	{ u32 x72 = ((u32)x70 & 0x3ffffff);
+	{ u64 x73 = (x71 + x55);
+	{ u64 x74 = (x73 >> 0x19);
+	{ u32 x75 = ((u32)x73 & 0x1ffffff);
+	{ u64 x76 = (x74 + x52);
+	{ u64 x77 = (x76 >> 0x1a);
+	{ u32 x78 = ((u32)x76 & 0x3ffffff);
+	{ u64 x79 = (x77 + x49);
+	{ u64 x80 = (x79 >> 0x19);
+	{ u32 x81 = ((u32)x79 & 0x1ffffff);
+	{ u64 x82 = (x80 + x46);
+	{ u64 x83 = (x82 >> 0x1a);
+	{ u32 x84 = ((u32)x82 & 0x3ffffff);
+	{ u64 x85 = (x83 + x43);
+	{ u64 x86 = (x85 >> 0x19);
+	{ u32 x87 = ((u32)x85 & 0x1ffffff);
+	{ u64 x88 = (x86 + x40);
+	{ u64 x89 = (x88 >> 0x1a);
+	{ u32 x90 = ((u32)x88 & 0x3ffffff);
+	{ u64 x91 = (x89 + x28);
+	{ u64 x92 = (x91 >> 0x19);
+	{ u32 x93 = ((u32)x91 & 0x1ffffff);
+	{ u64 x94 = (x66 + (0x13 * x92));
+	{ u32 x95 = (u32) (x94 >> 0x1a);
+	{ u32 x96 = ((u32)x94 & 0x3ffffff);
+	{ u32 x97 = (x95 + x69);
+	{ u32 x98 = (x97 >> 0x19);
+	{ u32 x99 = (x97 & 0x1ffffff);
+	out[0] = x96;
+	out[1] = x99;
+	out[2] = (x98 + x72);
+	out[3] = x75;
+	out[4] = x78;
+	out[5] = x81;
+	out[6] = x84;
+	out[7] = x87;
+	out[8] = x90;
+	out[9] = x93;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_sq_tl(fe *h, const fe_loose *f)
+{
+	fe_sqr_impl(h->v, f->v);
+}
+
+static __always_inline void fe_sq_tt(fe *h, const fe *f)
+{
+	fe_sqr_impl(h->v, f->v);
+}
+
+static __always_inline void fe_loose_invert(fe *out, const fe_loose *z)
+{
+	fe t0;
+	fe t1;
+	fe t2;
+	fe t3;
+	int i;
+
+	fe_sq_tl(&t0, z);
+	fe_sq_tt(&t1, &t0);
+	for (i = 1; i < 2; ++i)
+		fe_sq_tt(&t1, &t1);
+	fe_mul_tlt(&t1, z, &t1);
+	fe_mul_ttt(&t0, &t0, &t1);
+	fe_sq_tt(&t2, &t0);
+	fe_mul_ttt(&t1, &t1, &t2);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 5; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 10; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t2, &t2, &t1);
+	fe_sq_tt(&t3, &t2);
+	for (i = 1; i < 20; ++i)
+		fe_sq_tt(&t3, &t3);
+	fe_mul_ttt(&t2, &t3, &t2);
+	fe_sq_tt(&t2, &t2);
+	for (i = 1; i < 10; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t2, &t1);
+	for (i = 1; i < 50; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t2, &t2, &t1);
+	fe_sq_tt(&t3, &t2);
+	for (i = 1; i < 100; ++i)
+		fe_sq_tt(&t3, &t3);
+	fe_mul_ttt(&t2, &t3, &t2);
+	fe_sq_tt(&t2, &t2);
+	for (i = 1; i < 50; ++i)
+		fe_sq_tt(&t2, &t2);
+	fe_mul_ttt(&t1, &t2, &t1);
+	fe_sq_tt(&t1, &t1);
+	for (i = 1; i < 5; ++i)
+		fe_sq_tt(&t1, &t1);
+	fe_mul_ttt(out, &t1, &t0);
+}
+
+static __always_inline void fe_invert(fe *out, const fe *z)
+{
+	fe_loose l;
+	fe_copy_lt(&l, z);
+	fe_loose_invert(out, &l);
+}
+
+/* Replace (f,g) with (g,f) if b == 1;
+ * replace (f,g) with (f,g) if b == 0.
+ *
+ * Preconditions: b in {0,1}
+ */
+static noinline void fe_cswap(fe *f, fe *g, unsigned int b)
+{
+	unsigned i;
+	b = 0 - b;
+	for (i = 0; i < 10; i++) {
+		u32 x = f->v[i] ^ g->v[i];
+		x &= b;
+		f->v[i] ^= x;
+		g->v[i] ^= x;
+	}
+}
+
+/* NOTE: based on fiat-crypto fe_mul, edited for in2=121666, 0, 0.*/
+static __always_inline void fe_mul_121666_impl(u32 out[10], const u32 in1[10])
+{
+	{ const u32 x20 = in1[9];
+	{ const u32 x21 = in1[8];
+	{ const u32 x19 = in1[7];
+	{ const u32 x17 = in1[6];
+	{ const u32 x15 = in1[5];
+	{ const u32 x13 = in1[4];
+	{ const u32 x11 = in1[3];
+	{ const u32 x9 = in1[2];
+	{ const u32 x7 = in1[1];
+	{ const u32 x5 = in1[0];
+	{ const u32 x38 = 0;
+	{ const u32 x39 = 0;
+	{ const u32 x37 = 0;
+	{ const u32 x35 = 0;
+	{ const u32 x33 = 0;
+	{ const u32 x31 = 0;
+	{ const u32 x29 = 0;
+	{ const u32 x27 = 0;
+	{ const u32 x25 = 0;
+	{ const u32 x23 = 121666;
+	{ u64 x40 = ((u64)x23 * x5);
+	{ u64 x41 = (((u64)x23 * x7) + ((u64)x25 * x5));
+	{ u64 x42 = ((((u64)(0x2 * x25) * x7) + ((u64)x23 * x9)) + ((u64)x27 * x5));
+	{ u64 x43 = (((((u64)x25 * x9) + ((u64)x27 * x7)) + ((u64)x23 * x11)) + ((u64)x29 * x5));
+	{ u64 x44 = (((((u64)x27 * x9) + (0x2 * (((u64)x25 * x11) + ((u64)x29 * x7)))) + ((u64)x23 * x13)) + ((u64)x31 * x5));
+	{ u64 x45 = (((((((u64)x27 * x11) + ((u64)x29 * x9)) + ((u64)x25 * x13)) + ((u64)x31 * x7)) + ((u64)x23 * x15)) + ((u64)x33 * x5));
+	{ u64 x46 = (((((0x2 * ((((u64)x29 * x11) + ((u64)x25 * x15)) + ((u64)x33 * x7))) + ((u64)x27 * x13)) + ((u64)x31 * x9)) + ((u64)x23 * x17)) + ((u64)x35 * x5));
+	{ u64 x47 = (((((((((u64)x29 * x13) + ((u64)x31 * x11)) + ((u64)x27 * x15)) + ((u64)x33 * x9)) + ((u64)x25 * x17)) + ((u64)x35 * x7)) + ((u64)x23 * x19)) + ((u64)x37 * x5));
+	{ u64 x48 = (((((((u64)x31 * x13) + (0x2 * (((((u64)x29 * x15) + ((u64)x33 * x11)) + ((u64)x25 * x19)) + ((u64)x37 * x7)))) + ((u64)x27 * x17)) + ((u64)x35 * x9)) + ((u64)x23 * x21)) + ((u64)x39 * x5));
+	{ u64 x49 = (((((((((((u64)x31 * x15) + ((u64)x33 * x13)) + ((u64)x29 * x17)) + ((u64)x35 * x11)) + ((u64)x27 * x19)) + ((u64)x37 * x9)) + ((u64)x25 * x21)) + ((u64)x39 * x7)) + ((u64)x23 * x20)) + ((u64)x38 * x5));
+	{ u64 x50 = (((((0x2 * ((((((u64)x33 * x15) + ((u64)x29 * x19)) + ((u64)x37 * x11)) + ((u64)x25 * x20)) + ((u64)x38 * x7))) + ((u64)x31 * x17)) + ((u64)x35 * x13)) + ((u64)x27 * x21)) + ((u64)x39 * x9));
+	{ u64 x51 = (((((((((u64)x33 * x17) + ((u64)x35 * x15)) + ((u64)x31 * x19)) + ((u64)x37 * x13)) + ((u64)x29 * x21)) + ((u64)x39 * x11)) + ((u64)x27 * x20)) + ((u64)x38 * x9));
+	{ u64 x52 = (((((u64)x35 * x17) + (0x2 * (((((u64)x33 * x19) + ((u64)x37 * x15)) + ((u64)x29 * x20)) + ((u64)x38 * x11)))) + ((u64)x31 * x21)) + ((u64)x39 * x13));
+	{ u64 x53 = (((((((u64)x35 * x19) + ((u64)x37 * x17)) + ((u64)x33 * x21)) + ((u64)x39 * x15)) + ((u64)x31 * x20)) + ((u64)x38 * x13));
+	{ u64 x54 = (((0x2 * ((((u64)x37 * x19) + ((u64)x33 * x20)) + ((u64)x38 * x15))) + ((u64)x35 * x21)) + ((u64)x39 * x17));
+	{ u64 x55 = (((((u64)x37 * x21) + ((u64)x39 * x19)) + ((u64)x35 * x20)) + ((u64)x38 * x17));
+	{ u64 x56 = (((u64)x39 * x21) + (0x2 * (((u64)x37 * x20) + ((u64)x38 * x19))));
+	{ u64 x57 = (((u64)x39 * x20) + ((u64)x38 * x21));
+	{ u64 x58 = ((u64)(0x2 * x38) * x20);
+	{ u64 x59 = (x48 + (x58 << 0x4));
+	{ u64 x60 = (x59 + (x58 << 0x1));
+	{ u64 x61 = (x60 + x58);
+	{ u64 x62 = (x47 + (x57 << 0x4));
+	{ u64 x63 = (x62 + (x57 << 0x1));
+	{ u64 x64 = (x63 + x57);
+	{ u64 x65 = (x46 + (x56 << 0x4));
+	{ u64 x66 = (x65 + (x56 << 0x1));
+	{ u64 x67 = (x66 + x56);
+	{ u64 x68 = (x45 + (x55 << 0x4));
+	{ u64 x69 = (x68 + (x55 << 0x1));
+	{ u64 x70 = (x69 + x55);
+	{ u64 x71 = (x44 + (x54 << 0x4));
+	{ u64 x72 = (x71 + (x54 << 0x1));
+	{ u64 x73 = (x72 + x54);
+	{ u64 x74 = (x43 + (x53 << 0x4));
+	{ u64 x75 = (x74 + (x53 << 0x1));
+	{ u64 x76 = (x75 + x53);
+	{ u64 x77 = (x42 + (x52 << 0x4));
+	{ u64 x78 = (x77 + (x52 << 0x1));
+	{ u64 x79 = (x78 + x52);
+	{ u64 x80 = (x41 + (x51 << 0x4));
+	{ u64 x81 = (x80 + (x51 << 0x1));
+	{ u64 x82 = (x81 + x51);
+	{ u64 x83 = (x40 + (x50 << 0x4));
+	{ u64 x84 = (x83 + (x50 << 0x1));
+	{ u64 x85 = (x84 + x50);
+	{ u64 x86 = (x85 >> 0x1a);
+	{ u32 x87 = ((u32)x85 & 0x3ffffff);
+	{ u64 x88 = (x86 + x82);
+	{ u64 x89 = (x88 >> 0x19);
+	{ u32 x90 = ((u32)x88 & 0x1ffffff);
+	{ u64 x91 = (x89 + x79);
+	{ u64 x92 = (x91 >> 0x1a);
+	{ u32 x93 = ((u32)x91 & 0x3ffffff);
+	{ u64 x94 = (x92 + x76);
+	{ u64 x95 = (x94 >> 0x19);
+	{ u32 x96 = ((u32)x94 & 0x1ffffff);
+	{ u64 x97 = (x95 + x73);
+	{ u64 x98 = (x97 >> 0x1a);
+	{ u32 x99 = ((u32)x97 & 0x3ffffff);
+	{ u64 x100 = (x98 + x70);
+	{ u64 x101 = (x100 >> 0x19);
+	{ u32 x102 = ((u32)x100 & 0x1ffffff);
+	{ u64 x103 = (x101 + x67);
+	{ u64 x104 = (x103 >> 0x1a);
+	{ u32 x105 = ((u32)x103 & 0x3ffffff);
+	{ u64 x106 = (x104 + x64);
+	{ u64 x107 = (x106 >> 0x19);
+	{ u32 x108 = ((u32)x106 & 0x1ffffff);
+	{ u64 x109 = (x107 + x61);
+	{ u64 x110 = (x109 >> 0x1a);
+	{ u32 x111 = ((u32)x109 & 0x3ffffff);
+	{ u64 x112 = (x110 + x49);
+	{ u64 x113 = (x112 >> 0x19);
+	{ u32 x114 = ((u32)x112 & 0x1ffffff);
+	{ u64 x115 = (x87 + (0x13 * x113));
+	{ u32 x116 = (u32) (x115 >> 0x1a);
+	{ u32 x117 = ((u32)x115 & 0x3ffffff);
+	{ u32 x118 = (x116 + x90);
+	{ u32 x119 = (x118 >> 0x19);
+	{ u32 x120 = (x118 & 0x1ffffff);
+	out[0] = x117;
+	out[1] = x120;
+	out[2] = (x119 + x93);
+	out[3] = x96;
+	out[4] = x99;
+	out[5] = x102;
+	out[6] = x105;
+	out[7] = x108;
+	out[8] = x111;
+	out[9] = x114;
+	}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
+}
+
+static __always_inline void fe_mul121666(fe *h, const fe_loose *f)
+{
+	fe_mul_121666_impl(h->v, f->v);
+}
+
+void curve25519_generic(u8 out[CURVE25519_KEY_SIZE],
+			const u8 scalar[CURVE25519_KEY_SIZE],
+			const u8 point[CURVE25519_KEY_SIZE])
+{
+	fe x1, x2, z2, x3, z3;
+	fe_loose x2l, z2l, x3l;
+	unsigned swap = 0;
+	int pos;
+	u8 e[32];
+
+	memcpy(e, scalar, 32);
+	curve25519_clamp_secret(e);
+
+	/* The following implementation was transcribed to Coq and proven to
+	 * correspond to unary scalar multiplication in affine coordinates given
+	 * that x1 != 0 is the x coordinate of some point on the curve. It was
+	 * also checked in Coq that doing a ladderstep with x1 = x3 = 0 gives
+	 * z2' = z3' = 0, and z2 = z3 = 0 gives z2' = z3' = 0. The statement was
+	 * quantified over the underlying field, so it applies to Curve25519
+	 * itself and the quadratic twist of Curve25519. It was not proven in
+	 * Coq that prime-field arithmetic correctly simulates extension-field
+	 * arithmetic on prime-field values. The decoding of the byte array
+	 * representation of e was not considered.
+	 *
+	 * Specification of Montgomery curves in affine coordinates:
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Spec/MontgomeryCurve.v#L27>
+	 *
+	 * Proof that these form a group that is isomorphic to a Weierstrass
+	 * curve:
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/AffineProofs.v#L35>
+	 *
+	 * Coq transcription and correctness proof of the loop
+	 * (where scalarbits=255):
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L118>
+	 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L278>
+	 * preconditions: 0 <= e < 2^255 (not necessarily e < order),
+	 * fe_invert(0) = 0
+	 */
+	fe_frombytes(&x1, point);
+	fe_1(&x2);
+	fe_0(&z2);
+	fe_copy(&x3, &x1);
+	fe_1(&z3);
+
+	for (pos = 254; pos >= 0; --pos) {
+		fe tmp0, tmp1;
+		fe_loose tmp0l, tmp1l;
+		/* loop invariant as of right before the test, for the case
+		 * where x1 != 0:
+		 *   pos >= -1; if z2 = 0 then x2 is nonzero; if z3 = 0 then x3
+		 *   is nonzero
+		 *   let r := e >> (pos+1) in the following equalities of
+		 *   projective points:
+		 *   to_xz (r*P)     === if swap then (x3, z3) else (x2, z2)
+		 *   to_xz ((r+1)*P) === if swap then (x2, z2) else (x3, z3)
+		 *   x1 is the nonzero x coordinate of the nonzero
+		 *   point (r*P-(r+1)*P)
+		 */
+		unsigned b = 1 & (e[pos / 8] >> (pos & 7));
+		swap ^= b;
+		fe_cswap(&x2, &x3, swap);
+		fe_cswap(&z2, &z3, swap);
+		swap = b;
+		/* Coq transcription of ladderstep formula (called from
+		 * transcribed loop):
+		 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZ.v#L89>
+		 * <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L131>
+		 * x1 != 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L217>
+		 * x1  = 0 <https://github.com/mit-plv/fiat-crypto/blob/2456d821825521f7e03e65882cc3521795b0320f/src/Curves/Montgomery/XZProofs.v#L147>
+		 */
+		fe_sub(&tmp0l, &x3, &z3);
+		fe_sub(&tmp1l, &x2, &z2);
+		fe_add(&x2l, &x2, &z2);
+		fe_add(&z2l, &x3, &z3);
+		fe_mul_tll(&z3, &tmp0l, &x2l);
+		fe_mul_tll(&z2, &z2l, &tmp1l);
+		fe_sq_tl(&tmp0, &tmp1l);
+		fe_sq_tl(&tmp1, &x2l);
+		fe_add(&x3l, &z3, &z2);
+		fe_sub(&z2l, &z3, &z2);
+		fe_mul_ttt(&x2, &tmp1, &tmp0);
+		fe_sub(&tmp1l, &tmp1, &tmp0);
+		fe_sq_tl(&z2, &z2l);
+		fe_mul121666(&z3, &tmp1l);
+		fe_sq_tl(&x3, &x3l);
+		fe_add(&tmp0l, &tmp0, &z3);
+		fe_mul_ttt(&z3, &x1, &z2);
+		fe_mul_tll(&z2, &tmp1l, &tmp0l);
+	}
+	/* here pos=-1, so r=e, so to_xz (e*P) === if swap then (x3, z3)
+	 * else (x2, z2)
+	 */
+	fe_cswap(&x2, &x3, swap);
+	fe_cswap(&z2, &z3, swap);
+
+	fe_invert(&z2, &z2);
+	fe_mul_ttt(&x2, &x2, &z2);
+	fe_tobytes(out, &x2);
+
+	memzero_explicit(&x1, sizeof(x1));
+	memzero_explicit(&x2, sizeof(x2));
+	memzero_explicit(&z2, sizeof(z2));
+	memzero_explicit(&x3, sizeof(x3));
+	memzero_explicit(&z3, sizeof(z3));
+	memzero_explicit(&x2l, sizeof(x2l));
+	memzero_explicit(&z2l, sizeof(z2l));
+	memzero_explicit(&x3l, sizeof(x3l));
+	memzero_explicit(&e, sizeof(e));
+}
diff --git a/lib/crypto/curve25519-generic.c b/lib/crypto/curve25519-generic.c
new file mode 100644
index 0000000..de7c991
--- /dev/null
+++ b/lib/crypto/curve25519-generic.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the Curve25519 ECDH algorithm, using either
+ * a 32-bit implementation or a 64-bit implementation with 128-bit integers,
+ * depending on what is supported by the target compiler.
+ *
+ * Information: https://cr.yp.to/ecdh.html
+ */
+
+#include <crypto/curve25519.h>
+#include <linux/module.h>
+
+const u8 curve25519_null_point[CURVE25519_KEY_SIZE] __aligned(32) = { 0 };
+const u8 curve25519_base_point[CURVE25519_KEY_SIZE] __aligned(32) = { 9 };
+
+EXPORT_SYMBOL(curve25519_null_point);
+EXPORT_SYMBOL(curve25519_base_point);
+EXPORT_SYMBOL(curve25519_generic);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Curve25519 scalar multiplication");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/curve25519-hacl64.c b/lib/crypto/curve25519-hacl64.c
new file mode 100644
index 0000000..771d82d
--- /dev/null
+++ b/lib/crypto/curve25519-hacl64.c
@@ -0,0 +1,788 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2016-2017 INRIA and Microsoft Corporation.
+ * Copyright (C) 2018-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is a machine-generated formally verified implementation of Curve25519
+ * ECDH from: <https://github.com/mitls/hacl-star>. Though originally machine
+ * generated, it has been tweaked to be suitable for use in the kernel. It is
+ * optimized for 64-bit machines that can efficiently work with 128-bit
+ * integer types.
+ */
+
+#include <asm/unaligned.h>
+#include <crypto/curve25519.h>
+#include <linux/string.h>
+
+typedef __uint128_t u128;
+
+static __always_inline u64 u64_eq_mask(u64 a, u64 b)
+{
+	u64 x = a ^ b;
+	u64 minus_x = ~x + (u64)1U;
+	u64 x_or_minus_x = x | minus_x;
+	u64 xnx = x_or_minus_x >> (u32)63U;
+	u64 c = xnx - (u64)1U;
+	return c;
+}
+
+static __always_inline u64 u64_gte_mask(u64 a, u64 b)
+{
+	u64 x = a;
+	u64 y = b;
+	u64 x_xor_y = x ^ y;
+	u64 x_sub_y = x - y;
+	u64 x_sub_y_xor_y = x_sub_y ^ y;
+	u64 q = x_xor_y | x_sub_y_xor_y;
+	u64 x_xor_q = x ^ q;
+	u64 x_xor_q_ = x_xor_q >> (u32)63U;
+	u64 c = x_xor_q_ - (u64)1U;
+	return c;
+}
+
+static __always_inline void modulo_carry_top(u64 *b)
+{
+	u64 b4 = b[4];
+	u64 b0 = b[0];
+	u64 b4_ = b4 & 0x7ffffffffffffLLU;
+	u64 b0_ = b0 + 19 * (b4 >> 51);
+	b[4] = b4_;
+	b[0] = b0_;
+}
+
+static __always_inline void fproduct_copy_from_wide_(u64 *output, u128 *input)
+{
+	{
+		u128 xi = input[0];
+		output[0] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[1];
+		output[1] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[2];
+		output[2] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[3];
+		output[3] = ((u64)(xi));
+	}
+	{
+		u128 xi = input[4];
+		output[4] = ((u64)(xi));
+	}
+}
+
+static __always_inline void
+fproduct_sum_scalar_multiplication_(u128 *output, u64 *input, u64 s)
+{
+	output[0] += (u128)input[0] * s;
+	output[1] += (u128)input[1] * s;
+	output[2] += (u128)input[2] * s;
+	output[3] += (u128)input[3] * s;
+	output[4] += (u128)input[4] * s;
+}
+
+static __always_inline void fproduct_carry_wide_(u128 *tmp)
+{
+	{
+		u32 ctr = 0;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+	{
+		u32 ctr = 1;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+
+	{
+		u32 ctr = 2;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+	{
+		u32 ctr = 3;
+		u128 tctr = tmp[ctr];
+		u128 tctrp1 = tmp[ctr + 1];
+		u64 r0 = ((u64)(tctr)) & 0x7ffffffffffffLLU;
+		u128 c = ((tctr) >> (51));
+		tmp[ctr] = ((u128)(r0));
+		tmp[ctr + 1] = ((tctrp1) + (c));
+	}
+}
+
+static __always_inline void fmul_shift_reduce(u64 *output)
+{
+	u64 tmp = output[4];
+	u64 b0;
+	{
+		u32 ctr = 5 - 0 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 1 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 2 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	{
+		u32 ctr = 5 - 3 - 1;
+		u64 z = output[ctr - 1];
+		output[ctr] = z;
+	}
+	output[0] = tmp;
+	b0 = output[0];
+	output[0] = 19 * b0;
+}
+
+static __always_inline void fmul_mul_shift_reduce_(u128 *output, u64 *input,
+						   u64 *input21)
+{
+	u32 i;
+	u64 input2i;
+	{
+		u64 input2i = input21[0];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[1];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[2];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	{
+		u64 input2i = input21[3];
+		fproduct_sum_scalar_multiplication_(output, input, input2i);
+		fmul_shift_reduce(input);
+	}
+	i = 4;
+	input2i = input21[i];
+	fproduct_sum_scalar_multiplication_(output, input, input2i);
+}
+
+static __always_inline void fmul_fmul(u64 *output, u64 *input, u64 *input21)
+{
+	u64 tmp[5] = { input[0], input[1], input[2], input[3], input[4] };
+	{
+		u128 b4;
+		u128 b0;
+		u128 b4_;
+		u128 b0_;
+		u64 i0;
+		u64 i1;
+		u64 i0_;
+		u64 i1_;
+		u128 t[5] = { 0 };
+		fmul_mul_shift_reduce_(t, tmp, input21);
+		fproduct_carry_wide_(t);
+		b4 = t[4];
+		b0 = t[0];
+		b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+		b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+		t[4] = b4_;
+		t[0] = b0_;
+		fproduct_copy_from_wide_(output, t);
+		i0 = output[0];
+		i1 = output[1];
+		i0_ = i0 & 0x7ffffffffffffLLU;
+		i1_ = i1 + (i0 >> 51);
+		output[0] = i0_;
+		output[1] = i1_;
+	}
+}
+
+static __always_inline void fsquare_fsquare__(u128 *tmp, u64 *output)
+{
+	u64 r0 = output[0];
+	u64 r1 = output[1];
+	u64 r2 = output[2];
+	u64 r3 = output[3];
+	u64 r4 = output[4];
+	u64 d0 = r0 * 2;
+	u64 d1 = r1 * 2;
+	u64 d2 = r2 * 2 * 19;
+	u64 d419 = r4 * 19;
+	u64 d4 = d419 * 2;
+	u128 s0 = ((((((u128)(r0) * (r0))) + (((u128)(d4) * (r1))))) +
+		   (((u128)(d2) * (r3))));
+	u128 s1 = ((((((u128)(d0) * (r1))) + (((u128)(d4) * (r2))))) +
+		   (((u128)(r3 * 19) * (r3))));
+	u128 s2 = ((((((u128)(d0) * (r2))) + (((u128)(r1) * (r1))))) +
+		   (((u128)(d4) * (r3))));
+	u128 s3 = ((((((u128)(d0) * (r3))) + (((u128)(d1) * (r2))))) +
+		   (((u128)(r4) * (d419))));
+	u128 s4 = ((((((u128)(d0) * (r4))) + (((u128)(d1) * (r3))))) +
+		   (((u128)(r2) * (r2))));
+	tmp[0] = s0;
+	tmp[1] = s1;
+	tmp[2] = s2;
+	tmp[3] = s3;
+	tmp[4] = s4;
+}
+
+static __always_inline void fsquare_fsquare_(u128 *tmp, u64 *output)
+{
+	u128 b4;
+	u128 b0;
+	u128 b4_;
+	u128 b0_;
+	u64 i0;
+	u64 i1;
+	u64 i0_;
+	u64 i1_;
+	fsquare_fsquare__(tmp, output);
+	fproduct_carry_wide_(tmp);
+	b4 = tmp[4];
+	b0 = tmp[0];
+	b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+	b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+	tmp[4] = b4_;
+	tmp[0] = b0_;
+	fproduct_copy_from_wide_(output, tmp);
+	i0 = output[0];
+	i1 = output[1];
+	i0_ = i0 & 0x7ffffffffffffLLU;
+	i1_ = i1 + (i0 >> 51);
+	output[0] = i0_;
+	output[1] = i1_;
+}
+
+static __always_inline void fsquare_fsquare_times_(u64 *output, u128 *tmp,
+						   u32 count1)
+{
+	u32 i;
+	fsquare_fsquare_(tmp, output);
+	for (i = 1; i < count1; ++i)
+		fsquare_fsquare_(tmp, output);
+}
+
+static __always_inline void fsquare_fsquare_times(u64 *output, u64 *input,
+						  u32 count1)
+{
+	u128 t[5];
+	memcpy(output, input, 5 * sizeof(*input));
+	fsquare_fsquare_times_(output, t, count1);
+}
+
+static __always_inline void fsquare_fsquare_times_inplace(u64 *output,
+							  u32 count1)
+{
+	u128 t[5];
+	fsquare_fsquare_times_(output, t, count1);
+}
+
+static __always_inline void crecip_crecip(u64 *out, u64 *z)
+{
+	u64 buf[20] = { 0 };
+	u64 *a0 = buf;
+	u64 *t00 = buf + 5;
+	u64 *b0 = buf + 10;
+	u64 *t01;
+	u64 *b1;
+	u64 *c0;
+	u64 *a;
+	u64 *t0;
+	u64 *b;
+	u64 *c;
+	fsquare_fsquare_times(a0, z, 1);
+	fsquare_fsquare_times(t00, a0, 2);
+	fmul_fmul(b0, t00, z);
+	fmul_fmul(a0, b0, a0);
+	fsquare_fsquare_times(t00, a0, 1);
+	fmul_fmul(b0, t00, b0);
+	fsquare_fsquare_times(t00, b0, 5);
+	t01 = buf + 5;
+	b1 = buf + 10;
+	c0 = buf + 15;
+	fmul_fmul(b1, t01, b1);
+	fsquare_fsquare_times(t01, b1, 10);
+	fmul_fmul(c0, t01, b1);
+	fsquare_fsquare_times(t01, c0, 20);
+	fmul_fmul(t01, t01, c0);
+	fsquare_fsquare_times_inplace(t01, 10);
+	fmul_fmul(b1, t01, b1);
+	fsquare_fsquare_times(t01, b1, 50);
+	a = buf;
+	t0 = buf + 5;
+	b = buf + 10;
+	c = buf + 15;
+	fmul_fmul(c, t0, b);
+	fsquare_fsquare_times(t0, c, 100);
+	fmul_fmul(t0, t0, c);
+	fsquare_fsquare_times_inplace(t0, 50);
+	fmul_fmul(t0, t0, b);
+	fsquare_fsquare_times_inplace(t0, 5);
+	fmul_fmul(out, t0, a);
+}
+
+static __always_inline void fsum(u64 *a, u64 *b)
+{
+	a[0] += b[0];
+	a[1] += b[1];
+	a[2] += b[2];
+	a[3] += b[3];
+	a[4] += b[4];
+}
+
+static __always_inline void fdifference(u64 *a, u64 *b)
+{
+	u64 tmp[5] = { 0 };
+	u64 b0;
+	u64 b1;
+	u64 b2;
+	u64 b3;
+	u64 b4;
+	memcpy(tmp, b, 5 * sizeof(*b));
+	b0 = tmp[0];
+	b1 = tmp[1];
+	b2 = tmp[2];
+	b3 = tmp[3];
+	b4 = tmp[4];
+	tmp[0] = b0 + 0x3fffffffffff68LLU;
+	tmp[1] = b1 + 0x3ffffffffffff8LLU;
+	tmp[2] = b2 + 0x3ffffffffffff8LLU;
+	tmp[3] = b3 + 0x3ffffffffffff8LLU;
+	tmp[4] = b4 + 0x3ffffffffffff8LLU;
+	{
+		u64 xi = a[0];
+		u64 yi = tmp[0];
+		a[0] = yi - xi;
+	}
+	{
+		u64 xi = a[1];
+		u64 yi = tmp[1];
+		a[1] = yi - xi;
+	}
+	{
+		u64 xi = a[2];
+		u64 yi = tmp[2];
+		a[2] = yi - xi;
+	}
+	{
+		u64 xi = a[3];
+		u64 yi = tmp[3];
+		a[3] = yi - xi;
+	}
+	{
+		u64 xi = a[4];
+		u64 yi = tmp[4];
+		a[4] = yi - xi;
+	}
+}
+
+static __always_inline void fscalar(u64 *output, u64 *b, u64 s)
+{
+	u128 tmp[5];
+	u128 b4;
+	u128 b0;
+	u128 b4_;
+	u128 b0_;
+	{
+		u64 xi = b[0];
+		tmp[0] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[1];
+		tmp[1] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[2];
+		tmp[2] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[3];
+		tmp[3] = ((u128)(xi) * (s));
+	}
+	{
+		u64 xi = b[4];
+		tmp[4] = ((u128)(xi) * (s));
+	}
+	fproduct_carry_wide_(tmp);
+	b4 = tmp[4];
+	b0 = tmp[0];
+	b4_ = ((b4) & (((u128)(0x7ffffffffffffLLU))));
+	b0_ = ((b0) + (((u128)(19) * (((u64)(((b4) >> (51))))))));
+	tmp[4] = b4_;
+	tmp[0] = b0_;
+	fproduct_copy_from_wide_(output, tmp);
+}
+
+static __always_inline void fmul(u64 *output, u64 *a, u64 *b)
+{
+	fmul_fmul(output, a, b);
+}
+
+static __always_inline void crecip(u64 *output, u64 *input)
+{
+	crecip_crecip(output, input);
+}
+
+static __always_inline void point_swap_conditional_step(u64 *a, u64 *b,
+							u64 swap1, u32 ctr)
+{
+	u32 i = ctr - 1;
+	u64 ai = a[i];
+	u64 bi = b[i];
+	u64 x = swap1 & (ai ^ bi);
+	u64 ai1 = ai ^ x;
+	u64 bi1 = bi ^ x;
+	a[i] = ai1;
+	b[i] = bi1;
+}
+
+static __always_inline void point_swap_conditional5(u64 *a, u64 *b, u64 swap1)
+{
+	point_swap_conditional_step(a, b, swap1, 5);
+	point_swap_conditional_step(a, b, swap1, 4);
+	point_swap_conditional_step(a, b, swap1, 3);
+	point_swap_conditional_step(a, b, swap1, 2);
+	point_swap_conditional_step(a, b, swap1, 1);
+}
+
+static __always_inline void point_swap_conditional(u64 *a, u64 *b, u64 iswap)
+{
+	u64 swap1 = 0 - iswap;
+	point_swap_conditional5(a, b, swap1);
+	point_swap_conditional5(a + 5, b + 5, swap1);
+}
+
+static __always_inline void point_copy(u64 *output, u64 *input)
+{
+	memcpy(output, input, 5 * sizeof(*input));
+	memcpy(output + 5, input + 5, 5 * sizeof(*input));
+}
+
+static __always_inline void addanddouble_fmonty(u64 *pp, u64 *ppq, u64 *p,
+						u64 *pq, u64 *qmqp)
+{
+	u64 *qx = qmqp;
+	u64 *x2 = pp;
+	u64 *z2 = pp + 5;
+	u64 *x3 = ppq;
+	u64 *z3 = ppq + 5;
+	u64 *x = p;
+	u64 *z = p + 5;
+	u64 *xprime = pq;
+	u64 *zprime = pq + 5;
+	u64 buf[40] = { 0 };
+	u64 *origx = buf;
+	u64 *origxprime0 = buf + 5;
+	u64 *xxprime0;
+	u64 *zzprime0;
+	u64 *origxprime;
+	xxprime0 = buf + 25;
+	zzprime0 = buf + 30;
+	memcpy(origx, x, 5 * sizeof(*x));
+	fsum(x, z);
+	fdifference(z, origx);
+	memcpy(origxprime0, xprime, 5 * sizeof(*xprime));
+	fsum(xprime, zprime);
+	fdifference(zprime, origxprime0);
+	fmul(xxprime0, xprime, z);
+	fmul(zzprime0, x, zprime);
+	origxprime = buf + 5;
+	{
+		u64 *xx0;
+		u64 *zz0;
+		u64 *xxprime;
+		u64 *zzprime;
+		u64 *zzzprime;
+		xx0 = buf + 15;
+		zz0 = buf + 20;
+		xxprime = buf + 25;
+		zzprime = buf + 30;
+		zzzprime = buf + 35;
+		memcpy(origxprime, xxprime, 5 * sizeof(*xxprime));
+		fsum(xxprime, zzprime);
+		fdifference(zzprime, origxprime);
+		fsquare_fsquare_times(x3, xxprime, 1);
+		fsquare_fsquare_times(zzzprime, zzprime, 1);
+		fmul(z3, zzzprime, qx);
+		fsquare_fsquare_times(xx0, x, 1);
+		fsquare_fsquare_times(zz0, z, 1);
+		{
+			u64 *zzz;
+			u64 *xx;
+			u64 *zz;
+			u64 scalar;
+			zzz = buf + 10;
+			xx = buf + 15;
+			zz = buf + 20;
+			fmul(x2, xx, zz);
+			fdifference(zz, xx);
+			scalar = 121665;
+			fscalar(zzz, zz, scalar);
+			fsum(zzz, xx);
+			fmul(z2, zzz, zz);
+		}
+	}
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop_step(u64 *nq, u64 *nqpq, u64 *nq2, u64 *nqpq2,
+				       u64 *q, u8 byt)
+{
+	u64 bit0 = (u64)(byt >> 7);
+	u64 bit;
+	point_swap_conditional(nq, nqpq, bit0);
+	addanddouble_fmonty(nq2, nqpq2, nq, nqpq, q);
+	bit = (u64)(byt >> 7);
+	point_swap_conditional(nq2, nqpq2, bit);
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop_double_step(u64 *nq, u64 *nqpq, u64 *nq2,
+					      u64 *nqpq2, u64 *q, u8 byt)
+{
+	u8 byt1;
+	ladder_smallloop_cmult_small_loop_step(nq, nqpq, nq2, nqpq2, q, byt);
+	byt1 = byt << 1;
+	ladder_smallloop_cmult_small_loop_step(nq2, nqpq2, nq, nqpq, q, byt1);
+}
+
+static __always_inline void
+ladder_smallloop_cmult_small_loop(u64 *nq, u64 *nqpq, u64 *nq2, u64 *nqpq2,
+				  u64 *q, u8 byt, u32 i)
+{
+	while (i--) {
+		ladder_smallloop_cmult_small_loop_double_step(nq, nqpq, nq2,
+							      nqpq2, q, byt);
+		byt <<= 2;
+	}
+}
+
+static __always_inline void ladder_bigloop_cmult_big_loop(u8 *n1, u64 *nq,
+							  u64 *nqpq, u64 *nq2,
+							  u64 *nqpq2, u64 *q,
+							  u32 i)
+{
+	while (i--) {
+		u8 byte = n1[i];
+		ladder_smallloop_cmult_small_loop(nq, nqpq, nq2, nqpq2, q,
+						  byte, 4);
+	}
+}
+
+static void ladder_cmult(u64 *result, u8 *n1, u64 *q)
+{
+	u64 point_buf[40] = { 0 };
+	u64 *nq = point_buf;
+	u64 *nqpq = point_buf + 10;
+	u64 *nq2 = point_buf + 20;
+	u64 *nqpq2 = point_buf + 30;
+	point_copy(nqpq, q);
+	nq[0] = 1;
+	ladder_bigloop_cmult_big_loop(n1, nq, nqpq, nq2, nqpq2, q, 32);
+	point_copy(result, nq);
+}
+
+static __always_inline void format_fexpand(u64 *output, const u8 *input)
+{
+	const u8 *x00 = input + 6;
+	const u8 *x01 = input + 12;
+	const u8 *x02 = input + 19;
+	const u8 *x0 = input + 24;
+	u64 i0, i1, i2, i3, i4, output0, output1, output2, output3, output4;
+	i0 = get_unaligned_le64(input);
+	i1 = get_unaligned_le64(x00);
+	i2 = get_unaligned_le64(x01);
+	i3 = get_unaligned_le64(x02);
+	i4 = get_unaligned_le64(x0);
+	output0 = i0 & 0x7ffffffffffffLLU;
+	output1 = i1 >> 3 & 0x7ffffffffffffLLU;
+	output2 = i2 >> 6 & 0x7ffffffffffffLLU;
+	output3 = i3 >> 1 & 0x7ffffffffffffLLU;
+	output4 = i4 >> 12 & 0x7ffffffffffffLLU;
+	output[0] = output0;
+	output[1] = output1;
+	output[2] = output2;
+	output[3] = output3;
+	output[4] = output4;
+}
+
+static __always_inline void format_fcontract_first_carry_pass(u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 t1_ = t1 + (t0 >> 51);
+	u64 t0_ = t0 & 0x7ffffffffffffLLU;
+	u64 t2_ = t2 + (t1_ >> 51);
+	u64 t1__ = t1_ & 0x7ffffffffffffLLU;
+	u64 t3_ = t3 + (t2_ >> 51);
+	u64 t2__ = t2_ & 0x7ffffffffffffLLU;
+	u64 t4_ = t4 + (t3_ >> 51);
+	u64 t3__ = t3_ & 0x7ffffffffffffLLU;
+	input[0] = t0_;
+	input[1] = t1__;
+	input[2] = t2__;
+	input[3] = t3__;
+	input[4] = t4_;
+}
+
+static __always_inline void format_fcontract_first_carry_full(u64 *input)
+{
+	format_fcontract_first_carry_pass(input);
+	modulo_carry_top(input);
+}
+
+static __always_inline void format_fcontract_second_carry_pass(u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 t1_ = t1 + (t0 >> 51);
+	u64 t0_ = t0 & 0x7ffffffffffffLLU;
+	u64 t2_ = t2 + (t1_ >> 51);
+	u64 t1__ = t1_ & 0x7ffffffffffffLLU;
+	u64 t3_ = t3 + (t2_ >> 51);
+	u64 t2__ = t2_ & 0x7ffffffffffffLLU;
+	u64 t4_ = t4 + (t3_ >> 51);
+	u64 t3__ = t3_ & 0x7ffffffffffffLLU;
+	input[0] = t0_;
+	input[1] = t1__;
+	input[2] = t2__;
+	input[3] = t3__;
+	input[4] = t4_;
+}
+
+static __always_inline void format_fcontract_second_carry_full(u64 *input)
+{
+	u64 i0;
+	u64 i1;
+	u64 i0_;
+	u64 i1_;
+	format_fcontract_second_carry_pass(input);
+	modulo_carry_top(input);
+	i0 = input[0];
+	i1 = input[1];
+	i0_ = i0 & 0x7ffffffffffffLLU;
+	i1_ = i1 + (i0 >> 51);
+	input[0] = i0_;
+	input[1] = i1_;
+}
+
+static __always_inline void format_fcontract_trim(u64 *input)
+{
+	u64 a0 = input[0];
+	u64 a1 = input[1];
+	u64 a2 = input[2];
+	u64 a3 = input[3];
+	u64 a4 = input[4];
+	u64 mask0 = u64_gte_mask(a0, 0x7ffffffffffedLLU);
+	u64 mask1 = u64_eq_mask(a1, 0x7ffffffffffffLLU);
+	u64 mask2 = u64_eq_mask(a2, 0x7ffffffffffffLLU);
+	u64 mask3 = u64_eq_mask(a3, 0x7ffffffffffffLLU);
+	u64 mask4 = u64_eq_mask(a4, 0x7ffffffffffffLLU);
+	u64 mask = (((mask0 & mask1) & mask2) & mask3) & mask4;
+	u64 a0_ = a0 - (0x7ffffffffffedLLU & mask);
+	u64 a1_ = a1 - (0x7ffffffffffffLLU & mask);
+	u64 a2_ = a2 - (0x7ffffffffffffLLU & mask);
+	u64 a3_ = a3 - (0x7ffffffffffffLLU & mask);
+	u64 a4_ = a4 - (0x7ffffffffffffLLU & mask);
+	input[0] = a0_;
+	input[1] = a1_;
+	input[2] = a2_;
+	input[3] = a3_;
+	input[4] = a4_;
+}
+
+static __always_inline void format_fcontract_store(u8 *output, u64 *input)
+{
+	u64 t0 = input[0];
+	u64 t1 = input[1];
+	u64 t2 = input[2];
+	u64 t3 = input[3];
+	u64 t4 = input[4];
+	u64 o0 = t1 << 51 | t0;
+	u64 o1 = t2 << 38 | t1 >> 13;
+	u64 o2 = t3 << 25 | t2 >> 26;
+	u64 o3 = t4 << 12 | t3 >> 39;
+	u8 *b0 = output;
+	u8 *b1 = output + 8;
+	u8 *b2 = output + 16;
+	u8 *b3 = output + 24;
+	put_unaligned_le64(o0, b0);
+	put_unaligned_le64(o1, b1);
+	put_unaligned_le64(o2, b2);
+	put_unaligned_le64(o3, b3);
+}
+
+static __always_inline void format_fcontract(u8 *output, u64 *input)
+{
+	format_fcontract_first_carry_full(input);
+	format_fcontract_second_carry_full(input);
+	format_fcontract_trim(input);
+	format_fcontract_store(output, input);
+}
+
+static __always_inline void format_scalar_of_point(u8 *scalar, u64 *point)
+{
+	u64 *x = point;
+	u64 *z = point + 5;
+	u64 buf[10] __aligned(32) = { 0 };
+	u64 *zmone = buf;
+	u64 *sc = buf + 5;
+	crecip(zmone, z);
+	fmul(sc, x, zmone);
+	format_fcontract(scalar, sc);
+}
+
+void curve25519_generic(u8 mypublic[CURVE25519_KEY_SIZE],
+			const u8 secret[CURVE25519_KEY_SIZE],
+			const u8 basepoint[CURVE25519_KEY_SIZE])
+{
+	u64 buf0[10] __aligned(32) = { 0 };
+	u64 *x0 = buf0;
+	u64 *z = buf0 + 5;
+	u64 *q;
+	format_fexpand(x0, basepoint);
+	z[0] = 1;
+	q = buf0;
+	{
+		u8 e[32] __aligned(32) = { 0 };
+		u8 *scalar;
+		memcpy(e, secret, 32);
+		curve25519_clamp_secret(e);
+		scalar = e;
+		{
+			u64 buf[15] = { 0 };
+			u64 *nq = buf;
+			u64 *x = nq;
+			x[0] = 1;
+			ladder_cmult(nq, scalar, q);
+			format_scalar_of_point(mypublic, nq);
+			memzero_explicit(buf, sizeof(buf));
+		}
+		memzero_explicit(e, sizeof(e));
+	}
+	memzero_explicit(buf0, sizeof(buf0));
+}
diff --git a/lib/crypto/curve25519-selftest.c b/lib/crypto/curve25519-selftest.c
new file mode 100644
index 0000000..c85e853
--- /dev/null
+++ b/lib/crypto/curve25519-selftest.c
@@ -0,0 +1,1321 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#include <crypto/curve25519.h>
+
+struct curve25519_test_vector {
+	u8 private[CURVE25519_KEY_SIZE];
+	u8 public[CURVE25519_KEY_SIZE];
+	u8 result[CURVE25519_KEY_SIZE];
+	bool valid;
+};
+static const struct curve25519_test_vector curve25519_test_vectors[] __initconst = {
+	{
+		.private = { 0x77, 0x07, 0x6d, 0x0a, 0x73, 0x18, 0xa5, 0x7d,
+			     0x3c, 0x16, 0xc1, 0x72, 0x51, 0xb2, 0x66, 0x45,
+			     0xdf, 0x4c, 0x2f, 0x87, 0xeb, 0xc0, 0x99, 0x2a,
+			     0xb1, 0x77, 0xfb, 0xa5, 0x1d, 0xb9, 0x2c, 0x2a },
+		.public = { 0xde, 0x9e, 0xdb, 0x7d, 0x7b, 0x7d, 0xc1, 0xb4,
+			    0xd3, 0x5b, 0x61, 0xc2, 0xec, 0xe4, 0x35, 0x37,
+			    0x3f, 0x83, 0x43, 0xc8, 0x5b, 0x78, 0x67, 0x4d,
+			    0xad, 0xfc, 0x7e, 0x14, 0x6f, 0x88, 0x2b, 0x4f },
+		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+		.valid = true
+	},
+	{
+		.private = { 0x5d, 0xab, 0x08, 0x7e, 0x62, 0x4a, 0x8a, 0x4b,
+			     0x79, 0xe1, 0x7f, 0x8b, 0x83, 0x80, 0x0e, 0xe6,
+			     0x6f, 0x3b, 0xb1, 0x29, 0x26, 0x18, 0xb6, 0xfd,
+			     0x1c, 0x2f, 0x8b, 0x27, 0xff, 0x88, 0xe0, 0xeb },
+		.public = { 0x85, 0x20, 0xf0, 0x09, 0x89, 0x30, 0xa7, 0x54,
+			    0x74, 0x8b, 0x7d, 0xdc, 0xb4, 0x3e, 0xf7, 0x5a,
+			    0x0d, 0xbf, 0x3a, 0x0d, 0x26, 0x38, 0x1a, 0xf4,
+			    0xeb, 0xa4, 0xa9, 0x8e, 0xaa, 0x9b, 0x4e, 0x6a },
+		.result = { 0x4a, 0x5d, 0x9d, 0x5b, 0xa4, 0xce, 0x2d, 0xe1,
+			    0x72, 0x8e, 0x3b, 0xf4, 0x80, 0x35, 0x0f, 0x25,
+			    0xe0, 0x7e, 0x21, 0xc9, 0x47, 0xd1, 0x9e, 0x33,
+			    0x76, 0xf0, 0x9b, 0x3c, 0x1e, 0x16, 0x17, 0x42 },
+		.valid = true
+	},
+	{
+		.private = { 1 },
+		.public = { 0x25, 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 },
+		.result = { 0x3c, 0x77, 0x77, 0xca, 0xf9, 0x97, 0xb2, 0x64,
+			    0x41, 0x60, 0x77, 0x66, 0x5b, 0x4e, 0x22, 0x9d,
+			    0x0b, 0x95, 0x48, 0xdc, 0x0c, 0xd8, 0x19, 0x98,
+			    0xdd, 0xcd, 0xc5, 0xc8, 0x53, 0x3c, 0x79, 0x7f },
+		.valid = true
+	},
+	{
+		.private = { 1 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xb3, 0x2d, 0x13, 0x62, 0xc2, 0x48, 0xd6, 0x2f,
+			    0xe6, 0x26, 0x19, 0xcf, 0xf0, 0x4d, 0xd4, 0x3d,
+			    0xb7, 0x3f, 0xfc, 0x1b, 0x63, 0x08, 0xed, 0xe3,
+			    0x0b, 0x78, 0xd8, 0x73, 0x80, 0xf1, 0xe8, 0x34 },
+		.valid = true
+	},
+	{
+		.private = { 0xa5, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0xc4 },
+		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+		.valid = true
+	},
+	{
+		.private = { 1, 2, 3, 4 },
+		.public = { 0 },
+		.result = { 0 },
+		.valid = false
+	},
+	{
+		.private = { 2, 4, 6, 8 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8 },
+		.result = { 0 },
+		.valid = false
+	},
+	{
+		.private = { 0xff, 0xff, 0xff, 0xff, 0x0a, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0xfb, 0x9f },
+		.result = { 0x77, 0x52, 0xb6, 0x18, 0xc1, 0x2d, 0x48, 0xd2,
+			    0xc6, 0x93, 0x46, 0x83, 0x81, 0x7c, 0xc6, 0x57,
+			    0xf3, 0x31, 0x03, 0x19, 0x49, 0x48, 0x20, 0x05,
+			    0x42, 0x2b, 0x4e, 0xae, 0x8d, 0x1d, 0x43, 0x23 },
+		.valid = true
+	},
+	{
+		.private = { 0x8e, 0x0a, 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 },
+		.public = { 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, 0x8e, 0x06 },
+		.result = { 0x5a, 0xdf, 0xaa, 0x25, 0x86, 0x8e, 0x32, 0x3d,
+			    0xae, 0x49, 0x62, 0xc1, 0x01, 0x5c, 0xb3, 0x12,
+			    0xe1, 0xc5, 0xc7, 0x9e, 0x95, 0x3f, 0x03, 0x99,
+			    0xb0, 0xba, 0x16, 0x22, 0xf3, 0xb6, 0xf7, 0x0c },
+		.valid = true
+	},
+	/* wycheproof - normal case */
+	{
+		.private = { 0x48, 0x52, 0x83, 0x4d, 0x9d, 0x6b, 0x77, 0xda,
+			     0xde, 0xab, 0xaa, 0xf2, 0xe1, 0x1d, 0xca, 0x66,
+			     0xd1, 0x9f, 0xe7, 0x49, 0x93, 0xa7, 0xbe, 0xc3,
+			     0x6c, 0x6e, 0x16, 0xa0, 0x98, 0x3f, 0xea, 0xba },
+		.public = { 0x9c, 0x64, 0x7d, 0x9a, 0xe5, 0x89, 0xb9, 0xf5,
+			    0x8f, 0xdc, 0x3c, 0xa4, 0x94, 0x7e, 0xfb, 0xc9,
+			    0x15, 0xc4, 0xb2, 0xe0, 0x8e, 0x74, 0x4a, 0x0e,
+			    0xdf, 0x46, 0x9d, 0xac, 0x59, 0xc8, 0xf8, 0x5a },
+		.result = { 0x87, 0xb7, 0xf2, 0x12, 0xb6, 0x27, 0xf7, 0xa5,
+			    0x4c, 0xa5, 0xe0, 0xbc, 0xda, 0xdd, 0xd5, 0x38,
+			    0x9d, 0x9d, 0xe6, 0x15, 0x6c, 0xdb, 0xcf, 0x8e,
+			    0xbe, 0x14, 0xff, 0xbc, 0xfb, 0x43, 0x65, 0x51 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x58, 0x8c, 0x06, 0x1a, 0x50, 0x80, 0x4a, 0xc4,
+			     0x88, 0xad, 0x77, 0x4a, 0xc7, 0x16, 0xc3, 0xf5,
+			     0xba, 0x71, 0x4b, 0x27, 0x12, 0xe0, 0x48, 0x49,
+			     0x13, 0x79, 0xa5, 0x00, 0x21, 0x19, 0x98, 0xa8 },
+		.public = { 0x63, 0xaa, 0x40, 0xc6, 0xe3, 0x83, 0x46, 0xc5,
+			    0xca, 0xf2, 0x3a, 0x6d, 0xf0, 0xa5, 0xe6, 0xc8,
+			    0x08, 0x89, 0xa0, 0x86, 0x47, 0xe5, 0x51, 0xb3,
+			    0x56, 0x34, 0x49, 0xbe, 0xfc, 0xfc, 0x97, 0x33 },
+		.result = { 0xb1, 0xa7, 0x07, 0x51, 0x94, 0x95, 0xff, 0xff,
+			    0xb2, 0x98, 0xff, 0x94, 0x17, 0x16, 0xb0, 0x6d,
+			    0xfa, 0xb8, 0x7c, 0xf8, 0xd9, 0x11, 0x23, 0xfe,
+			    0x2b, 0xe9, 0xa2, 0x33, 0xdd, 0xa2, 0x22, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0xb0, 0x5b, 0xfd, 0x32, 0xe5, 0x53, 0x25, 0xd9,
+			     0xfd, 0x64, 0x8c, 0xb3, 0x02, 0x84, 0x80, 0x39,
+			     0x00, 0x0b, 0x39, 0x0e, 0x44, 0xd5, 0x21, 0xe5,
+			     0x8a, 0xab, 0x3b, 0x29, 0xa6, 0x96, 0x0b, 0xa8 },
+		.public = { 0x0f, 0x83, 0xc3, 0x6f, 0xde, 0xd9, 0xd3, 0x2f,
+			    0xad, 0xf4, 0xef, 0xa3, 0xae, 0x93, 0xa9, 0x0b,
+			    0xb5, 0xcf, 0xa6, 0x68, 0x93, 0xbc, 0x41, 0x2c,
+			    0x43, 0xfa, 0x72, 0x87, 0xdb, 0xb9, 0x97, 0x79 },
+		.result = { 0x67, 0xdd, 0x4a, 0x6e, 0x16, 0x55, 0x33, 0x53,
+			    0x4c, 0x0e, 0x3f, 0x17, 0x2e, 0x4a, 0xb8, 0x57,
+			    0x6b, 0xca, 0x92, 0x3a, 0x5f, 0x07, 0xb2, 0xc0,
+			    0x69, 0xb4, 0xc3, 0x10, 0xff, 0x2e, 0x93, 0x5b },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x70, 0xe3, 0x4b, 0xcb, 0xe1, 0xf4, 0x7f, 0xbc,
+			     0x0f, 0xdd, 0xfd, 0x7c, 0x1e, 0x1a, 0xa5, 0x3d,
+			     0x57, 0xbf, 0xe0, 0xf6, 0x6d, 0x24, 0x30, 0x67,
+			     0xb4, 0x24, 0xbb, 0x62, 0x10, 0xbe, 0xd1, 0x9c },
+		.public = { 0x0b, 0x82, 0x11, 0xa2, 0xb6, 0x04, 0x90, 0x97,
+			    0xf6, 0x87, 0x1c, 0x6c, 0x05, 0x2d, 0x3c, 0x5f,
+			    0xc1, 0xba, 0x17, 0xda, 0x9e, 0x32, 0xae, 0x45,
+			    0x84, 0x03, 0xb0, 0x5b, 0xb2, 0x83, 0x09, 0x2a },
+		.result = { 0x4a, 0x06, 0x38, 0xcf, 0xaa, 0x9e, 0xf1, 0x93,
+			    0x3b, 0x47, 0xf8, 0x93, 0x92, 0x96, 0xa6, 0xb2,
+			    0x5b, 0xe5, 0x41, 0xef, 0x7f, 0x70, 0xe8, 0x44,
+			    0xc0, 0xbc, 0xc0, 0x0b, 0x13, 0x4d, 0xe6, 0x4a },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0x68, 0xc1, 0xf3, 0xa6, 0x53, 0xa4, 0xcd, 0xb1,
+			     0xd3, 0x7b, 0xba, 0x94, 0x73, 0x8f, 0x8b, 0x95,
+			     0x7a, 0x57, 0xbe, 0xb2, 0x4d, 0x64, 0x6e, 0x99,
+			     0x4d, 0xc2, 0x9a, 0x27, 0x6a, 0xad, 0x45, 0x8d },
+		.public = { 0x34, 0x3a, 0xc2, 0x0a, 0x3b, 0x9c, 0x6a, 0x27,
+			    0xb1, 0x00, 0x81, 0x76, 0x50, 0x9a, 0xd3, 0x07,
+			    0x35, 0x85, 0x6e, 0xc1, 0xc8, 0xd8, 0xfc, 0xae,
+			    0x13, 0x91, 0x2d, 0x08, 0xd1, 0x52, 0xf4, 0x6c },
+		.result = { 0x39, 0x94, 0x91, 0xfc, 0xe8, 0xdf, 0xab, 0x73,
+			    0xb4, 0xf9, 0xf6, 0x11, 0xde, 0x8e, 0xa0, 0xb2,
+			    0x7b, 0x28, 0xf8, 0x59, 0x94, 0x25, 0x0b, 0x0f,
+			    0x47, 0x5d, 0x58, 0x5d, 0x04, 0x2a, 0xc2, 0x07 },
+		.valid = true
+	},
+	/* wycheproof - public key on twist */
+	{
+		.private = { 0xd8, 0x77, 0xb2, 0x6d, 0x06, 0xdf, 0xf9, 0xd9,
+			     0xf7, 0xfd, 0x4c, 0x5b, 0x37, 0x69, 0xf8, 0xcd,
+			     0xd5, 0xb3, 0x05, 0x16, 0xa5, 0xab, 0x80, 0x6b,
+			     0xe3, 0x24, 0xff, 0x3e, 0xb6, 0x9e, 0xa0, 0xb2 },
+		.public = { 0xfa, 0x69, 0x5f, 0xc7, 0xbe, 0x8d, 0x1b, 0xe5,
+			    0xbf, 0x70, 0x48, 0x98, 0xf3, 0x88, 0xc4, 0x52,
+			    0xba, 0xfd, 0xd3, 0xb8, 0xea, 0xe8, 0x05, 0xf8,
+			    0x68, 0x1a, 0x8d, 0x15, 0xc2, 0xd4, 0xe1, 0x42 },
+		.result = { 0x2c, 0x4f, 0xe1, 0x1d, 0x49, 0x0a, 0x53, 0x86,
+			    0x17, 0x76, 0xb1, 0x3b, 0x43, 0x54, 0xab, 0xd4,
+			    0xcf, 0x5a, 0x97, 0x69, 0x9d, 0xb6, 0xe6, 0xc6,
+			    0x8c, 0x16, 0x26, 0xd0, 0x76, 0x62, 0xf7, 0x58 },
+		.valid = true
+	},
+	/* wycheproof - public key = 0 */
+	{
+		.private = { 0x20, 0x74, 0x94, 0x03, 0x8f, 0x2b, 0xb8, 0x11,
+			     0xd4, 0x78, 0x05, 0xbc, 0xdf, 0x04, 0xa2, 0xac,
+			     0x58, 0x5a, 0xda, 0x7f, 0x2f, 0x23, 0x38, 0x9b,
+			     0xfd, 0x46, 0x58, 0xf9, 0xdd, 0xd4, 0xde, 0xbc },
+		.public = { 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 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key = 1 */
+	{
+		.private = { 0x20, 0x2e, 0x89, 0x72, 0xb6, 0x1c, 0x7e, 0x61,
+			     0x93, 0x0e, 0xb9, 0x45, 0x0b, 0x50, 0x70, 0xea,
+			     0xe1, 0xc6, 0x70, 0x47, 0x56, 0x85, 0x54, 0x1f,
+			     0x04, 0x76, 0x21, 0x7e, 0x48, 0x18, 0xcf, 0xab },
+		.public = { 0x01, 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 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x38, 0xdd, 0xe9, 0xf3, 0xe7, 0xb7, 0x99, 0x04,
+			     0x5f, 0x9a, 0xc3, 0x79, 0x3d, 0x4a, 0x92, 0x77,
+			     0xda, 0xde, 0xad, 0xc4, 0x1b, 0xec, 0x02, 0x90,
+			     0xf8, 0x1f, 0x74, 0x4f, 0x73, 0x77, 0x5f, 0x84 },
+		.public = { 0x02, 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 },
+		.result = { 0x9a, 0x2c, 0xfe, 0x84, 0xff, 0x9c, 0x4a, 0x97,
+			    0x39, 0x62, 0x5c, 0xae, 0x4a, 0x3b, 0x82, 0xa9,
+			    0x06, 0x87, 0x7a, 0x44, 0x19, 0x46, 0xf8, 0xd7,
+			    0xb3, 0xd7, 0x95, 0xfe, 0x8f, 0x5d, 0x16, 0x39 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x98, 0x57, 0xa9, 0x14, 0xe3, 0xc2, 0x90, 0x36,
+			     0xfd, 0x9a, 0x44, 0x2b, 0xa5, 0x26, 0xb5, 0xcd,
+			     0xcd, 0xf2, 0x82, 0x16, 0x15, 0x3e, 0x63, 0x6c,
+			     0x10, 0x67, 0x7a, 0xca, 0xb6, 0xbd, 0x6a, 0xa5 },
+		.public = { 0x03, 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 },
+		.result = { 0x4d, 0xa4, 0xe0, 0xaa, 0x07, 0x2c, 0x23, 0x2e,
+			    0xe2, 0xf0, 0xfa, 0x4e, 0x51, 0x9a, 0xe5, 0x0b,
+			    0x52, 0xc1, 0xed, 0xd0, 0x8a, 0x53, 0x4d, 0x4e,
+			    0xf3, 0x46, 0xc2, 0xe1, 0x06, 0xd2, 0x1d, 0x60 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x48, 0xe2, 0x13, 0x0d, 0x72, 0x33, 0x05, 0xed,
+			     0x05, 0xe6, 0xe5, 0x89, 0x4d, 0x39, 0x8a, 0x5e,
+			     0x33, 0x36, 0x7a, 0x8c, 0x6a, 0xac, 0x8f, 0xcd,
+			     0xf0, 0xa8, 0x8e, 0x4b, 0x42, 0x82, 0x0d, 0xb7 },
+		.public = { 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0xf8, 0xff,
+			    0xff, 0x1f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0x07, 0x00,
+			    0x00, 0xf0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00 },
+		.result = { 0x9e, 0xd1, 0x0c, 0x53, 0x74, 0x7f, 0x64, 0x7f,
+			    0x82, 0xf4, 0x51, 0x25, 0xd3, 0xde, 0x15, 0xa1,
+			    0xe6, 0xb8, 0x24, 0x49, 0x6a, 0xb4, 0x04, 0x10,
+			    0xff, 0xcc, 0x3c, 0xfe, 0x95, 0x76, 0x0f, 0x3b },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x28, 0xf4, 0x10, 0x11, 0x69, 0x18, 0x51, 0xb3,
+			     0xa6, 0x2b, 0x64, 0x15, 0x53, 0xb3, 0x0d, 0x0d,
+			     0xfd, 0xdc, 0xb8, 0xff, 0xfc, 0xf5, 0x37, 0x00,
+			     0xa7, 0xbe, 0x2f, 0x6a, 0x87, 0x2e, 0x9f, 0xb0 },
+		.public = { 0x00, 0x00, 0x00, 0xfc, 0xff, 0xff, 0x07, 0x00,
+			    0x00, 0xe0, 0xff, 0xff, 0x3f, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xf8, 0xff,
+			    0xff, 0x0f, 0x00, 0x00, 0xc0, 0xff, 0xff, 0x7f },
+		.result = { 0xcf, 0x72, 0xb4, 0xaa, 0x6a, 0xa1, 0xc9, 0xf8,
+			    0x94, 0xf4, 0x16, 0x5b, 0x86, 0x10, 0x9a, 0xa4,
+			    0x68, 0x51, 0x76, 0x48, 0xe1, 0xf0, 0xcc, 0x70,
+			    0xe1, 0xab, 0x08, 0x46, 0x01, 0x76, 0x50, 0x6b },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0x18, 0xa9, 0x3b, 0x64, 0x99, 0xb9, 0xf6, 0xb3,
+			     0x22, 0x5c, 0xa0, 0x2f, 0xef, 0x41, 0x0e, 0x0a,
+			     0xde, 0xc2, 0x35, 0x32, 0x32, 0x1d, 0x2d, 0x8e,
+			     0xf1, 0xa6, 0xd6, 0x02, 0xa8, 0xc6, 0x5b, 0x83 },
+		.public = { 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
+			    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x5d, 0x50, 0xb6, 0x28, 0x36, 0xbb, 0x69, 0x57,
+			    0x94, 0x10, 0x38, 0x6c, 0xf7, 0xbb, 0x81, 0x1c,
+			    0x14, 0xbf, 0x85, 0xb1, 0xc7, 0xb1, 0x7e, 0x59,
+			    0x24, 0xc7, 0xff, 0xea, 0x91, 0xef, 0x9e, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - edge case on twist */
+	{
+		.private = { 0xc0, 0x1d, 0x13, 0x05, 0xa1, 0x33, 0x8a, 0x1f,
+			     0xca, 0xc2, 0xba, 0x7e, 0x2e, 0x03, 0x2b, 0x42,
+			     0x7e, 0x0b, 0x04, 0x90, 0x31, 0x65, 0xac, 0xa9,
+			     0x57, 0xd8, 0xd0, 0x55, 0x3d, 0x87, 0x17, 0xb0 },
+		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x19, 0x23, 0x0e, 0xb1, 0x48, 0xd5, 0xd6, 0x7c,
+			    0x3c, 0x22, 0xab, 0x1d, 0xae, 0xff, 0x80, 0xa5,
+			    0x7e, 0xae, 0x42, 0x65, 0xce, 0x28, 0x72, 0x65,
+			    0x7b, 0x2c, 0x80, 0x99, 0xfc, 0x69, 0x8e, 0x50 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x38, 0x6f, 0x7f, 0x16, 0xc5, 0x07, 0x31, 0xd6,
+			     0x4f, 0x82, 0xe6, 0xa1, 0x70, 0xb1, 0x42, 0xa4,
+			     0xe3, 0x4f, 0x31, 0xfd, 0x77, 0x68, 0xfc, 0xb8,
+			     0x90, 0x29, 0x25, 0xe7, 0xd1, 0xe2, 0x1a, 0xbe },
+		.public = { 0x04, 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 },
+		.result = { 0x0f, 0xca, 0xb5, 0xd8, 0x42, 0xa0, 0x78, 0xd7,
+			    0xa7, 0x1f, 0xc5, 0x9b, 0x57, 0xbf, 0xb4, 0xca,
+			    0x0b, 0xe6, 0x87, 0x3b, 0x49, 0xdc, 0xdb, 0x9f,
+			    0x44, 0xe1, 0x4a, 0xe8, 0xfb, 0xdf, 0xa5, 0x42 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xe0, 0x23, 0xa2, 0x89, 0xbd, 0x5e, 0x90, 0xfa,
+			     0x28, 0x04, 0xdd, 0xc0, 0x19, 0xa0, 0x5e, 0xf3,
+			     0xe7, 0x9d, 0x43, 0x4b, 0xb6, 0xea, 0x2f, 0x52,
+			     0x2e, 0xcb, 0x64, 0x3a, 0x75, 0x29, 0x6e, 0x95 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 },
+		.result = { 0x54, 0xce, 0x8f, 0x22, 0x75, 0xc0, 0x77, 0xe3,
+			    0xb1, 0x30, 0x6a, 0x39, 0x39, 0xc5, 0xe0, 0x3e,
+			    0xef, 0x6b, 0xbb, 0x88, 0x06, 0x05, 0x44, 0x75,
+			    0x8d, 0x9f, 0xef, 0x59, 0xb0, 0xbc, 0x3e, 0x4f },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x68, 0xf0, 0x10, 0xd6, 0x2e, 0xe8, 0xd9, 0x26,
+			     0x05, 0x3a, 0x36, 0x1c, 0x3a, 0x75, 0xc6, 0xea,
+			     0x4e, 0xbd, 0xc8, 0x60, 0x6a, 0xb2, 0x85, 0x00,
+			     0x3a, 0x6f, 0x8f, 0x40, 0x76, 0xb0, 0x1e, 0x83 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+		.result = { 0xf1, 0x36, 0x77, 0x5c, 0x5b, 0xeb, 0x0a, 0xf8,
+			    0x11, 0x0a, 0xf1, 0x0b, 0x20, 0x37, 0x23, 0x32,
+			    0x04, 0x3c, 0xab, 0x75, 0x24, 0x19, 0x67, 0x87,
+			    0x75, 0xa2, 0x23, 0xdf, 0x57, 0xc9, 0xd3, 0x0d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x58, 0xeb, 0xcb, 0x35, 0xb0, 0xf8, 0x84, 0x5c,
+			     0xaf, 0x1e, 0xc6, 0x30, 0xf9, 0x65, 0x76, 0xb6,
+			     0x2c, 0x4b, 0x7b, 0x6c, 0x36, 0xb2, 0x9d, 0xeb,
+			     0x2c, 0xb0, 0x08, 0x46, 0x51, 0x75, 0x5c, 0x96 },
+		.public = { 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfb, 0xff,
+			    0xff, 0xdf, 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff,
+			    0xfe, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xf7, 0xff,
+			    0xff, 0xf7, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x3f },
+		.result = { 0xbf, 0x9a, 0xff, 0xd0, 0x6b, 0x84, 0x40, 0x85,
+			    0x58, 0x64, 0x60, 0x96, 0x2e, 0xf2, 0x14, 0x6f,
+			    0xf3, 0xd4, 0x53, 0x3d, 0x94, 0x44, 0xaa, 0xb0,
+			    0x06, 0xeb, 0x88, 0xcc, 0x30, 0x54, 0x40, 0x7d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0x18, 0x8c, 0x4b, 0xc5, 0xb9, 0xc4, 0x4b, 0x38,
+			     0xbb, 0x65, 0x8b, 0x9b, 0x2a, 0xe8, 0x2d, 0x5b,
+			     0x01, 0x01, 0x5e, 0x09, 0x31, 0x84, 0xb1, 0x7c,
+			     0xb7, 0x86, 0x35, 0x03, 0xa7, 0x83, 0xe1, 0xbb },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.result = { 0xd4, 0x80, 0xde, 0x04, 0xf6, 0x99, 0xcb, 0x3b,
+			    0xe0, 0x68, 0x4a, 0x9c, 0xc2, 0xe3, 0x12, 0x81,
+			    0xea, 0x0b, 0xc5, 0xa9, 0xdc, 0xc1, 0x57, 0xd3,
+			    0xd2, 0x01, 0x58, 0xd4, 0x6c, 0xa5, 0x24, 0x6d },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xe0, 0x6c, 0x11, 0xbb, 0x2e, 0x13, 0xce, 0x3d,
+			     0xc7, 0x67, 0x3f, 0x67, 0xf5, 0x48, 0x22, 0x42,
+			     0x90, 0x94, 0x23, 0xa9, 0xae, 0x95, 0xee, 0x98,
+			     0x6a, 0x98, 0x8d, 0x98, 0xfa, 0xee, 0x23, 0xa2 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f,
+			    0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x7f },
+		.result = { 0x4c, 0x44, 0x01, 0xcc, 0xe6, 0xb5, 0x1e, 0x4c,
+			    0xb1, 0x8f, 0x27, 0x90, 0x24, 0x6c, 0x9b, 0xf9,
+			    0x14, 0xdb, 0x66, 0x77, 0x50, 0xa1, 0xcb, 0x89,
+			    0x06, 0x90, 0x92, 0xaf, 0x07, 0x29, 0x22, 0x76 },
+		.valid = true
+	},
+	/* wycheproof - edge case for public key */
+	{
+		.private = { 0xc0, 0x65, 0x8c, 0x46, 0xdd, 0xe1, 0x81, 0x29,
+			     0x29, 0x38, 0x77, 0x53, 0x5b, 0x11, 0x62, 0xb6,
+			     0xf9, 0xf5, 0x41, 0x4a, 0x23, 0xcf, 0x4d, 0x2c,
+			     0xbc, 0x14, 0x0a, 0x4d, 0x99, 0xda, 0x2b, 0x8f },
+		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x57, 0x8b, 0xa8, 0xcc, 0x2d, 0xbd, 0xc5, 0x75,
+			    0xaf, 0xcf, 0x9d, 0xf2, 0xb3, 0xee, 0x61, 0x89,
+			    0xf5, 0x33, 0x7d, 0x68, 0x54, 0xc7, 0x9b, 0x4c,
+			    0xe1, 0x65, 0xea, 0x12, 0x29, 0x3b, 0x3a, 0x0f },
+		.valid = true
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x10, 0x25, 0x5c, 0x92, 0x30, 0xa9, 0x7a, 0x30,
+			     0xa4, 0x58, 0xca, 0x28, 0x4a, 0x62, 0x96, 0x69,
+			     0x29, 0x3a, 0x31, 0x89, 0x0c, 0xda, 0x9d, 0x14,
+			     0x7f, 0xeb, 0xc7, 0xd1, 0xe2, 0x2d, 0x6b, 0xb1 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x00 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x78, 0xf1, 0xe8, 0xed, 0xf1, 0x44, 0x81, 0xb3,
+			     0x89, 0x44, 0x8d, 0xac, 0x8f, 0x59, 0xc7, 0x0b,
+			     0x03, 0x8e, 0x7c, 0xf9, 0x2e, 0xf2, 0xc7, 0xef,
+			     0xf5, 0x7a, 0x72, 0x46, 0x6e, 0x11, 0x52, 0x96 },
+		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
+			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
+			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
+			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0x57 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xa0, 0xa0, 0x5a, 0x3e, 0x8f, 0x9f, 0x44, 0x20,
+			     0x4d, 0x5f, 0x80, 0x59, 0xa9, 0x4a, 0xc7, 0xdf,
+			     0xc3, 0x9a, 0x49, 0xac, 0x01, 0x6d, 0xd7, 0x43,
+			     0xdb, 0xfa, 0x43, 0xc5, 0xd6, 0x71, 0xfd, 0x88 },
+		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xd0, 0xdb, 0xb3, 0xed, 0x19, 0x06, 0x66, 0x3f,
+			     0x15, 0x42, 0x0a, 0xf3, 0x1f, 0x4e, 0xaf, 0x65,
+			     0x09, 0xd9, 0xa9, 0x94, 0x97, 0x23, 0x50, 0x06,
+			     0x05, 0xad, 0x7c, 0x1c, 0x6e, 0x74, 0x50, 0xa9 },
+		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xc0, 0xb1, 0xd0, 0xeb, 0x22, 0xb2, 0x44, 0xfe,
+			     0x32, 0x91, 0x14, 0x00, 0x72, 0xcd, 0xd9, 0xd9,
+			     0x89, 0xb5, 0xf0, 0xec, 0xd9, 0x6c, 0x10, 0x0f,
+			     0xeb, 0x5b, 0xca, 0x24, 0x1c, 0x1d, 0x9f, 0x8f },
+		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x48, 0x0b, 0xf4, 0x5f, 0x59, 0x49, 0x42, 0xa8,
+			     0xbc, 0x0f, 0x33, 0x53, 0xc6, 0xe8, 0xb8, 0x85,
+			     0x3d, 0x77, 0xf3, 0x51, 0xf1, 0xc2, 0xca, 0x6c,
+			     0x2d, 0x1a, 0xbf, 0x8a, 0x00, 0xb4, 0x22, 0x9c },
+		.public = { 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, 0x80 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x30, 0xf9, 0x93, 0xfc, 0xf8, 0x51, 0x4f, 0xc8,
+			     0x9b, 0xd8, 0xdb, 0x14, 0xcd, 0x43, 0xba, 0x0d,
+			     0x4b, 0x25, 0x30, 0xe7, 0x3c, 0x42, 0x76, 0xa0,
+			     0x5e, 0x1b, 0x14, 0x5d, 0x42, 0x0c, 0xed, 0xb4 },
+		.public = { 0x01, 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, 0x80 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0xc0, 0x49, 0x74, 0xb7, 0x58, 0x38, 0x0e, 0x2a,
+			     0x5b, 0x5d, 0xf6, 0xeb, 0x09, 0xbb, 0x2f, 0x6b,
+			     0x34, 0x34, 0xf9, 0x82, 0x72, 0x2a, 0x8e, 0x67,
+			     0x6d, 0x3d, 0xa2, 0x51, 0xd1, 0xb3, 0xde, 0x83 },
+		.public = { 0xe0, 0xeb, 0x7a, 0x7c, 0x3b, 0x41, 0xb8, 0xae,
+			    0x16, 0x56, 0xe3, 0xfa, 0xf1, 0x9f, 0xc4, 0x6a,
+			    0xda, 0x09, 0x8d, 0xeb, 0x9c, 0x32, 0xb1, 0xfd,
+			    0x86, 0x62, 0x05, 0x16, 0x5f, 0x49, 0xb8, 0x80 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x50, 0x2a, 0x31, 0x37, 0x3d, 0xb3, 0x24, 0x46,
+			     0x84, 0x2f, 0xe5, 0xad, 0xd3, 0xe0, 0x24, 0x02,
+			     0x2e, 0xa5, 0x4f, 0x27, 0x41, 0x82, 0xaf, 0xc3,
+			     0xd9, 0xf1, 0xbb, 0x3d, 0x39, 0x53, 0x4e, 0xb5 },
+		.public = { 0x5f, 0x9c, 0x95, 0xbc, 0xa3, 0x50, 0x8c, 0x24,
+			    0xb1, 0xd0, 0xb1, 0x55, 0x9c, 0x83, 0xef, 0x5b,
+			    0x04, 0x44, 0x5c, 0xc4, 0x58, 0x1c, 0x8e, 0x86,
+			    0xd8, 0x22, 0x4e, 0xdd, 0xd0, 0x9f, 0x11, 0xd7 },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x90, 0xfa, 0x64, 0x17, 0xb0, 0xe3, 0x70, 0x30,
+			     0xfd, 0x6e, 0x43, 0xef, 0xf2, 0xab, 0xae, 0xf1,
+			     0x4c, 0x67, 0x93, 0x11, 0x7a, 0x03, 0x9c, 0xf6,
+			     0x21, 0x31, 0x8b, 0xa9, 0x0f, 0x4e, 0x98, 0xbe },
+		.public = { 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x78, 0xad, 0x3f, 0x26, 0x02, 0x7f, 0x1c, 0x9f,
+			     0xdd, 0x97, 0x5a, 0x16, 0x13, 0xb9, 0x47, 0x77,
+			     0x9b, 0xad, 0x2c, 0xf2, 0xb7, 0x41, 0xad, 0xe0,
+			     0x18, 0x40, 0x88, 0x5a, 0x30, 0xbb, 0x97, 0x9c },
+		.public = { 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key with low order */
+	{
+		.private = { 0x98, 0xe2, 0x3d, 0xe7, 0xb1, 0xe0, 0x92, 0x6e,
+			     0xd9, 0xc8, 0x7e, 0x7b, 0x14, 0xba, 0xf5, 0x5f,
+			     0x49, 0x7a, 0x1d, 0x70, 0x96, 0xf9, 0x39, 0x77,
+			     0x68, 0x0e, 0x44, 0xdc, 0x1c, 0x7b, 0x7b, 0x8b },
+		.public = { 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 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 },
+		.valid = false
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf0, 0x1e, 0x48, 0xda, 0xfa, 0xc9, 0xd7, 0xbc,
+			     0xf5, 0x89, 0xcb, 0xc3, 0x82, 0xc8, 0x78, 0xd1,
+			     0x8b, 0xda, 0x35, 0x50, 0x58, 0x9f, 0xfb, 0x5d,
+			     0x50, 0xb5, 0x23, 0xbe, 0xbe, 0x32, 0x9d, 0xae },
+		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0xbd, 0x36, 0xa0, 0x79, 0x0e, 0xb8, 0x83, 0x09,
+			    0x8c, 0x98, 0x8b, 0x21, 0x78, 0x67, 0x73, 0xde,
+			    0x0b, 0x3a, 0x4d, 0xf1, 0x62, 0x28, 0x2c, 0xf1,
+			    0x10, 0xde, 0x18, 0xdd, 0x48, 0x4c, 0xe7, 0x4b },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x28, 0x87, 0x96, 0xbc, 0x5a, 0xff, 0x4b, 0x81,
+			     0xa3, 0x75, 0x01, 0x75, 0x7b, 0xc0, 0x75, 0x3a,
+			     0x3c, 0x21, 0x96, 0x47, 0x90, 0xd3, 0x86, 0x99,
+			     0x30, 0x8d, 0xeb, 0xc1, 0x7a, 0x6e, 0xaf, 0x8d },
+		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0xb4, 0xe0, 0xdd, 0x76, 0xda, 0x7b, 0x07, 0x17,
+			    0x28, 0xb6, 0x1f, 0x85, 0x67, 0x71, 0xaa, 0x35,
+			    0x6e, 0x57, 0xed, 0xa7, 0x8a, 0x5b, 0x16, 0x55,
+			    0xcc, 0x38, 0x20, 0xfb, 0x5f, 0x85, 0x4c, 0x5c },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x98, 0xdf, 0x84, 0x5f, 0x66, 0x51, 0xbf, 0x11,
+			     0x38, 0x22, 0x1f, 0x11, 0x90, 0x41, 0xf7, 0x2b,
+			     0x6d, 0xbc, 0x3c, 0x4a, 0xce, 0x71, 0x43, 0xd9,
+			     0x9f, 0xd5, 0x5a, 0xd8, 0x67, 0x48, 0x0d, 0xa8 },
+		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x6f, 0xdf, 0x6c, 0x37, 0x61, 0x1d, 0xbd, 0x53,
+			    0x04, 0xdc, 0x0f, 0x2e, 0xb7, 0xc9, 0x51, 0x7e,
+			    0xb3, 0xc5, 0x0e, 0x12, 0xfd, 0x05, 0x0a, 0xc6,
+			    0xde, 0xc2, 0x70, 0x71, 0xd4, 0xbf, 0xc0, 0x34 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf0, 0x94, 0x98, 0xe4, 0x6f, 0x02, 0xf8, 0x78,
+			     0x82, 0x9e, 0x78, 0xb8, 0x03, 0xd3, 0x16, 0xa2,
+			     0xed, 0x69, 0x5d, 0x04, 0x98, 0xa0, 0x8a, 0xbd,
+			     0xf8, 0x27, 0x69, 0x30, 0xe2, 0x4e, 0xdc, 0xb0 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.result = { 0x4c, 0x8f, 0xc4, 0xb1, 0xc6, 0xab, 0x88, 0xfb,
+			    0x21, 0xf1, 0x8f, 0x6d, 0x4c, 0x81, 0x02, 0x40,
+			    0xd4, 0xe9, 0x46, 0x51, 0xba, 0x44, 0xf7, 0xa2,
+			    0xc8, 0x63, 0xce, 0xc7, 0xdc, 0x56, 0x60, 0x2d },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x18, 0x13, 0xc1, 0x0a, 0x5c, 0x7f, 0x21, 0xf9,
+			     0x6e, 0x17, 0xf2, 0x88, 0xc0, 0xcc, 0x37, 0x60,
+			     0x7c, 0x04, 0xc5, 0xf5, 0xae, 0xa2, 0xdb, 0x13,
+			     0x4f, 0x9e, 0x2f, 0xfc, 0x66, 0xbd, 0x9d, 0xb8 },
+		.public = { 0x02, 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, 0x80 },
+		.result = { 0x1c, 0xd0, 0xb2, 0x82, 0x67, 0xdc, 0x54, 0x1c,
+			    0x64, 0x2d, 0x6d, 0x7d, 0xca, 0x44, 0xa8, 0xb3,
+			    0x8a, 0x63, 0x73, 0x6e, 0xef, 0x5c, 0x4e, 0x65,
+			    0x01, 0xff, 0xbb, 0xb1, 0x78, 0x0c, 0x03, 0x3c },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x78, 0x57, 0xfb, 0x80, 0x86, 0x53, 0x64, 0x5a,
+			     0x0b, 0xeb, 0x13, 0x8a, 0x64, 0xf5, 0xf4, 0xd7,
+			     0x33, 0xa4, 0x5e, 0xa8, 0x4c, 0x3c, 0xda, 0x11,
+			     0xa9, 0xc0, 0x6f, 0x7e, 0x71, 0x39, 0x14, 0x9e },
+		.public = { 0x03, 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, 0x80 },
+		.result = { 0x87, 0x55, 0xbe, 0x01, 0xc6, 0x0a, 0x7e, 0x82,
+			    0x5c, 0xff, 0x3e, 0x0e, 0x78, 0xcb, 0x3a, 0xa4,
+			    0x33, 0x38, 0x61, 0x51, 0x6a, 0xa5, 0x9b, 0x1c,
+			    0x51, 0xa8, 0xb2, 0xa5, 0x43, 0xdf, 0xa8, 0x22 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xe0, 0x3a, 0xa8, 0x42, 0xe2, 0xab, 0xc5, 0x6e,
+			     0x81, 0xe8, 0x7b, 0x8b, 0x9f, 0x41, 0x7b, 0x2a,
+			     0x1e, 0x59, 0x13, 0xc7, 0x23, 0xee, 0xd2, 0x8d,
+			     0x75, 0x2f, 0x8d, 0x47, 0xa5, 0x9f, 0x49, 0x8f },
+		.public = { 0x04, 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, 0x80 },
+		.result = { 0x54, 0xc9, 0xa1, 0xed, 0x95, 0xe5, 0x46, 0xd2,
+			    0x78, 0x22, 0xa3, 0x60, 0x93, 0x1d, 0xda, 0x60,
+			    0xa1, 0xdf, 0x04, 0x9d, 0xa6, 0xf9, 0x04, 0x25,
+			    0x3c, 0x06, 0x12, 0xbb, 0xdc, 0x08, 0x74, 0x76 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xf8, 0xf7, 0x07, 0xb7, 0x99, 0x9b, 0x18, 0xcb,
+			     0x0d, 0x6b, 0x96, 0x12, 0x4f, 0x20, 0x45, 0x97,
+			     0x2c, 0xa2, 0x74, 0xbf, 0xc1, 0x54, 0xad, 0x0c,
+			     0x87, 0x03, 0x8c, 0x24, 0xc6, 0xd0, 0xd4, 0xb2 },
+		.public = { 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xcc, 0x1f, 0x40, 0xd7, 0x43, 0xcd, 0xc2, 0x23,
+			    0x0e, 0x10, 0x43, 0xda, 0xba, 0x8b, 0x75, 0xe8,
+			    0x10, 0xf1, 0xfb, 0xab, 0x7f, 0x25, 0x52, 0x69,
+			    0xbd, 0x9e, 0xbb, 0x29, 0xe6, 0xbf, 0x49, 0x4f },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xa0, 0x34, 0xf6, 0x84, 0xfa, 0x63, 0x1e, 0x1a,
+			     0x34, 0x81, 0x18, 0xc1, 0xce, 0x4c, 0x98, 0x23,
+			     0x1f, 0x2d, 0x9e, 0xec, 0x9b, 0xa5, 0x36, 0x5b,
+			     0x4a, 0x05, 0xd6, 0x9a, 0x78, 0x5b, 0x07, 0x96 },
+		.public = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x54, 0x99, 0x8e, 0xe4, 0x3a, 0x5b, 0x00, 0x7b,
+			    0xf4, 0x99, 0xf0, 0x78, 0xe7, 0x36, 0x52, 0x44,
+			    0x00, 0xa8, 0xb5, 0xc7, 0xe9, 0xb9, 0xb4, 0x37,
+			    0x71, 0x74, 0x8c, 0x7c, 0xdf, 0x88, 0x04, 0x12 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x30, 0xb6, 0xc6, 0xa0, 0xf2, 0xff, 0xa6, 0x80,
+			     0x76, 0x8f, 0x99, 0x2b, 0xa8, 0x9e, 0x15, 0x2d,
+			     0x5b, 0xc9, 0x89, 0x3d, 0x38, 0xc9, 0x11, 0x9b,
+			     0xe4, 0xf7, 0x67, 0xbf, 0xab, 0x6e, 0x0c, 0xa5 },
+		.public = { 0xdc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xea, 0xd9, 0xb3, 0x8e, 0xfd, 0xd7, 0x23, 0x63,
+			    0x79, 0x34, 0xe5, 0x5a, 0xb7, 0x17, 0xa7, 0xae,
+			    0x09, 0xeb, 0x86, 0xa2, 0x1d, 0xc3, 0x6a, 0x3f,
+			    0xee, 0xb8, 0x8b, 0x75, 0x9e, 0x39, 0x1e, 0x09 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x90, 0x1b, 0x9d, 0xcf, 0x88, 0x1e, 0x01, 0xe0,
+			     0x27, 0x57, 0x50, 0x35, 0xd4, 0x0b, 0x43, 0xbd,
+			     0xc1, 0xc5, 0x24, 0x2e, 0x03, 0x08, 0x47, 0x49,
+			     0x5b, 0x0c, 0x72, 0x86, 0x46, 0x9b, 0x65, 0x91 },
+		.public = { 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x60, 0x2f, 0xf4, 0x07, 0x89, 0xb5, 0x4b, 0x41,
+			    0x80, 0x59, 0x15, 0xfe, 0x2a, 0x62, 0x21, 0xf0,
+			    0x7a, 0x50, 0xff, 0xc2, 0xc3, 0xfc, 0x94, 0xcf,
+			    0x61, 0xf1, 0x3d, 0x79, 0x04, 0xe8, 0x8e, 0x0e },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x80, 0x46, 0x67, 0x7c, 0x28, 0xfd, 0x82, 0xc9,
+			     0xa1, 0xbd, 0xb7, 0x1a, 0x1a, 0x1a, 0x34, 0xfa,
+			     0xba, 0x12, 0x25, 0xe2, 0x50, 0x7f, 0xe3, 0xf5,
+			     0x4d, 0x10, 0xbd, 0x5b, 0x0d, 0x86, 0x5f, 0x8e },
+		.public = { 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0xe0, 0x0a, 0xe8, 0xb1, 0x43, 0x47, 0x12, 0x47,
+			    0xba, 0x24, 0xf1, 0x2c, 0x88, 0x55, 0x36, 0xc3,
+			    0xcb, 0x98, 0x1b, 0x58, 0xe1, 0xe5, 0x6b, 0x2b,
+			    0xaf, 0x35, 0xc1, 0x2a, 0xe1, 0xf7, 0x9c, 0x26 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x60, 0x2f, 0x7e, 0x2f, 0x68, 0xa8, 0x46, 0xb8,
+			     0x2c, 0xc2, 0x69, 0xb1, 0xd4, 0x8e, 0x93, 0x98,
+			     0x86, 0xae, 0x54, 0xfd, 0x63, 0x6c, 0x1f, 0xe0,
+			     0x74, 0xd7, 0x10, 0x12, 0x7d, 0x47, 0x24, 0x91 },
+		.public = { 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x98, 0xcb, 0x9b, 0x50, 0xdd, 0x3f, 0xc2, 0xb0,
+			    0xd4, 0xf2, 0xd2, 0xbf, 0x7c, 0x5c, 0xfd, 0xd1,
+			    0x0c, 0x8f, 0xcd, 0x31, 0xfc, 0x40, 0xaf, 0x1a,
+			    0xd4, 0x4f, 0x47, 0xc1, 0x31, 0x37, 0x63, 0x62 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x60, 0x88, 0x7b, 0x3d, 0xc7, 0x24, 0x43, 0x02,
+			     0x6e, 0xbe, 0xdb, 0xbb, 0xb7, 0x06, 0x65, 0xf4,
+			     0x2b, 0x87, 0xad, 0xd1, 0x44, 0x0e, 0x77, 0x68,
+			     0xfb, 0xd7, 0xe8, 0xe2, 0xce, 0x5f, 0x63, 0x9d },
+		.public = { 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x38, 0xd6, 0x30, 0x4c, 0x4a, 0x7e, 0x6d, 0x9f,
+			    0x79, 0x59, 0x33, 0x4f, 0xb5, 0x24, 0x5b, 0xd2,
+			    0xc7, 0x54, 0x52, 0x5d, 0x4c, 0x91, 0xdb, 0x95,
+			    0x02, 0x06, 0x92, 0x62, 0x34, 0xc1, 0xf6, 0x33 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0x78, 0xd3, 0x1d, 0xfa, 0x85, 0x44, 0x97, 0xd7,
+			     0x2d, 0x8d, 0xef, 0x8a, 0x1b, 0x7f, 0xb0, 0x06,
+			     0xce, 0xc2, 0xd8, 0xc4, 0x92, 0x46, 0x47, 0xc9,
+			     0x38, 0x14, 0xae, 0x56, 0xfa, 0xed, 0xa4, 0x95 },
+		.public = { 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x78, 0x6c, 0xd5, 0x49, 0x96, 0xf0, 0x14, 0xa5,
+			    0xa0, 0x31, 0xec, 0x14, 0xdb, 0x81, 0x2e, 0xd0,
+			    0x83, 0x55, 0x06, 0x1f, 0xdb, 0x5d, 0xe6, 0x80,
+			    0xa8, 0x00, 0xac, 0x52, 0x1f, 0x31, 0x8e, 0x23 },
+		.valid = true
+	},
+	/* wycheproof - public key >= p */
+	{
+		.private = { 0xc0, 0x4c, 0x5b, 0xae, 0xfa, 0x83, 0x02, 0xdd,
+			     0xde, 0xd6, 0xa4, 0xbb, 0x95, 0x77, 0x61, 0xb4,
+			     0xeb, 0x97, 0xae, 0xfa, 0x4f, 0xc3, 0xb8, 0x04,
+			     0x30, 0x85, 0xf9, 0x6a, 0x56, 0x59, 0xb3, 0xa5 },
+		.public = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
+		.result = { 0x29, 0xae, 0x8b, 0xc7, 0x3e, 0x9b, 0x10, 0xa0,
+			    0x8b, 0x4f, 0x68, 0x1c, 0x43, 0xc3, 0xe0, 0xac,
+			    0x1a, 0x17, 0x1d, 0x31, 0xb3, 0x8f, 0x1a, 0x48,
+			    0xef, 0xba, 0x29, 0xae, 0x63, 0x9e, 0xa1, 0x34 },
+		.valid = true
+	},
+	/* wycheproof - RFC 7748 */
+	{
+		.private = { 0xa0, 0x46, 0xe3, 0x6b, 0xf0, 0x52, 0x7c, 0x9d,
+			     0x3b, 0x16, 0x15, 0x4b, 0x82, 0x46, 0x5e, 0xdd,
+			     0x62, 0x14, 0x4c, 0x0a, 0xc1, 0xfc, 0x5a, 0x18,
+			     0x50, 0x6a, 0x22, 0x44, 0xba, 0x44, 0x9a, 0x44 },
+		.public = { 0xe6, 0xdb, 0x68, 0x67, 0x58, 0x30, 0x30, 0xdb,
+			    0x35, 0x94, 0xc1, 0xa4, 0x24, 0xb1, 0x5f, 0x7c,
+			    0x72, 0x66, 0x24, 0xec, 0x26, 0xb3, 0x35, 0x3b,
+			    0x10, 0xa9, 0x03, 0xa6, 0xd0, 0xab, 0x1c, 0x4c },
+		.result = { 0xc3, 0xda, 0x55, 0x37, 0x9d, 0xe9, 0xc6, 0x90,
+			    0x8e, 0x94, 0xea, 0x4d, 0xf2, 0x8d, 0x08, 0x4f,
+			    0x32, 0xec, 0xcf, 0x03, 0x49, 0x1c, 0x71, 0xf7,
+			    0x54, 0xb4, 0x07, 0x55, 0x77, 0xa2, 0x85, 0x52 },
+		.valid = true
+	},
+	/* wycheproof - RFC 7748 */
+	{
+		.private = { 0x48, 0x66, 0xe9, 0xd4, 0xd1, 0xb4, 0x67, 0x3c,
+			     0x5a, 0xd2, 0x26, 0x91, 0x95, 0x7d, 0x6a, 0xf5,
+			     0xc1, 0x1b, 0x64, 0x21, 0xe0, 0xea, 0x01, 0xd4,
+			     0x2c, 0xa4, 0x16, 0x9e, 0x79, 0x18, 0xba, 0x4d },
+		.public = { 0xe5, 0x21, 0x0f, 0x12, 0x78, 0x68, 0x11, 0xd3,
+			    0xf4, 0xb7, 0x95, 0x9d, 0x05, 0x38, 0xae, 0x2c,
+			    0x31, 0xdb, 0xe7, 0x10, 0x6f, 0xc0, 0x3c, 0x3e,
+			    0xfc, 0x4c, 0xd5, 0x49, 0xc7, 0x15, 0xa4, 0x13 },
+		.result = { 0x95, 0xcb, 0xde, 0x94, 0x76, 0xe8, 0x90, 0x7d,
+			    0x7a, 0xad, 0xe4, 0x5c, 0xb4, 0xb8, 0x73, 0xf8,
+			    0x8b, 0x59, 0x5a, 0x68, 0x79, 0x9f, 0xa1, 0x52,
+			    0xe6, 0xf8, 0xf7, 0x64, 0x7a, 0xac, 0x79, 0x57 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x0a, 0xb4, 0xe7, 0x63, 0x80, 0xd8, 0x4d, 0xde,
+			    0x4f, 0x68, 0x33, 0xc5, 0x8f, 0x2a, 0x9f, 0xb8,
+			    0xf8, 0x3b, 0xb0, 0x16, 0x9b, 0x17, 0x2b, 0xe4,
+			    0xb6, 0xe0, 0x59, 0x28, 0x87, 0x74, 0x1a, 0x36 },
+		.result = { 0x02, 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 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x89, 0xe1, 0x0d, 0x57, 0x01, 0xb4, 0x33, 0x7d,
+			    0x2d, 0x03, 0x21, 0x81, 0x53, 0x8b, 0x10, 0x64,
+			    0xbd, 0x40, 0x84, 0x40, 0x1c, 0xec, 0xa1, 0xfd,
+			    0x12, 0x66, 0x3a, 0x19, 0x59, 0x38, 0x80, 0x00 },
+		.result = { 0x09, 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 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x2b, 0x55, 0xd3, 0xaa, 0x4a, 0x8f, 0x80, 0xc8,
+			    0xc0, 0xb2, 0xae, 0x5f, 0x93, 0x3e, 0x85, 0xaf,
+			    0x49, 0xbe, 0xac, 0x36, 0xc2, 0xfa, 0x73, 0x94,
+			    0xba, 0xb7, 0x6c, 0x89, 0x33, 0xf8, 0xf8, 0x1d },
+		.result = { 0x10, 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 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x63, 0xe5, 0xb1, 0xfe, 0x96, 0x01, 0xfe, 0x84,
+			    0x38, 0x5d, 0x88, 0x66, 0xb0, 0x42, 0x12, 0x62,
+			    0xf7, 0x8f, 0xbf, 0xa5, 0xaf, 0xf9, 0x58, 0x5e,
+			    0x62, 0x66, 0x79, 0xb1, 0x85, 0x47, 0xd9, 0x59 },
+		.result = { 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xe4, 0x28, 0xf3, 0xda, 0xc1, 0x78, 0x09, 0xf8,
+			    0x27, 0xa5, 0x22, 0xce, 0x32, 0x35, 0x50, 0x58,
+			    0xd0, 0x73, 0x69, 0x36, 0x4a, 0xa7, 0x89, 0x02,
+			    0xee, 0x10, 0x13, 0x9b, 0x9f, 0x9d, 0xd6, 0x53 },
+		.result = { 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xb3, 0xb5, 0x0e, 0x3e, 0xd3, 0xa4, 0x07, 0xb9,
+			    0x5d, 0xe9, 0x42, 0xef, 0x74, 0x57, 0x5b, 0x5a,
+			    0xb8, 0xa1, 0x0c, 0x09, 0xee, 0x10, 0x35, 0x44,
+			    0xd6, 0x0b, 0xdf, 0xed, 0x81, 0x38, 0xab, 0x2b },
+		.result = { 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x21, 0x3f, 0xff, 0xe9, 0x3d, 0x5e, 0xa8, 0xcd,
+			    0x24, 0x2e, 0x46, 0x28, 0x44, 0x02, 0x99, 0x22,
+			    0xc4, 0x3c, 0x77, 0xc9, 0xe3, 0xe4, 0x2f, 0x56,
+			    0x2f, 0x48, 0x5d, 0x24, 0xc5, 0x01, 0xa2, 0x0b },
+		.result = { 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x91, 0xb2, 0x32, 0xa1, 0x78, 0xb3, 0xcd, 0x53,
+			    0x09, 0x32, 0x44, 0x1e, 0x61, 0x39, 0x41, 0x8f,
+			    0x72, 0x17, 0x22, 0x92, 0xf1, 0xda, 0x4c, 0x18,
+			    0x34, 0xfc, 0x5e, 0xbf, 0xef, 0xb5, 0x1e, 0x3f },
+		.result = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x04, 0x5c, 0x6e, 0x11, 0xc5, 0xd3, 0x32, 0x55,
+			    0x6c, 0x78, 0x22, 0xfe, 0x94, 0xeb, 0xf8, 0x9b,
+			    0x56, 0xa3, 0x87, 0x8d, 0xc2, 0x7c, 0xa0, 0x79,
+			    0x10, 0x30, 0x58, 0x84, 0x9f, 0xab, 0xcb, 0x4f },
+		.result = { 0xe5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x1c, 0xa2, 0x19, 0x0b, 0x71, 0x16, 0x35, 0x39,
+			    0x06, 0x3c, 0x35, 0x77, 0x3b, 0xda, 0x0c, 0x9c,
+			    0x92, 0x8e, 0x91, 0x36, 0xf0, 0x62, 0x0a, 0xeb,
+			    0x09, 0x3f, 0x09, 0x91, 0x97, 0xb7, 0xf7, 0x4e },
+		.result = { 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xf7, 0x6e, 0x90, 0x10, 0xac, 0x33, 0xc5, 0x04,
+			    0x3b, 0x2d, 0x3b, 0x76, 0xa8, 0x42, 0x17, 0x10,
+			    0x00, 0xc4, 0x91, 0x62, 0x22, 0xe9, 0xe8, 0x58,
+			    0x97, 0xa0, 0xae, 0xc7, 0xf6, 0x35, 0x0b, 0x3c },
+		.result = { 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0xbb, 0x72, 0x68, 0x8d, 0x8f, 0x8a, 0xa7, 0xa3,
+			    0x9c, 0xd6, 0x06, 0x0c, 0xd5, 0xc8, 0x09, 0x3c,
+			    0xde, 0xc6, 0xfe, 0x34, 0x19, 0x37, 0xc3, 0x88,
+			    0x6a, 0x99, 0x34, 0x6c, 0xd0, 0x7f, 0xaa, 0x55 },
+		.result = { 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x88, 0xfd, 0xde, 0xa1, 0x93, 0x39, 0x1c, 0x6a,
+			    0x59, 0x33, 0xef, 0x9b, 0x71, 0x90, 0x15, 0x49,
+			    0x44, 0x72, 0x05, 0xaa, 0xe9, 0xda, 0x92, 0x8a,
+			    0x6b, 0x91, 0xa3, 0x52, 0xba, 0x10, 0xf4, 0x1f },
+		.result = { 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, 0x02 },
+		.valid = true
+	},
+	/* wycheproof - edge case for shared secret */
+	{
+		.private = { 0xa0, 0xa4, 0xf1, 0x30, 0xb9, 0x8a, 0x5b, 0xe4,
+			     0xb1, 0xce, 0xdb, 0x7c, 0xb8, 0x55, 0x84, 0xa3,
+			     0x52, 0x0e, 0x14, 0x2d, 0x47, 0x4d, 0xc9, 0xcc,
+			     0xb9, 0x09, 0xa0, 0x73, 0xa9, 0x76, 0xbf, 0x63 },
+		.public = { 0x30, 0x3b, 0x39, 0x2f, 0x15, 0x31, 0x16, 0xca,
+			    0xd9, 0xcc, 0x68, 0x2a, 0x00, 0xcc, 0xc4, 0x4c,
+			    0x95, 0xff, 0x0d, 0x3b, 0xbe, 0x56, 0x8b, 0xeb,
+			    0x6c, 0x4e, 0x73, 0x9b, 0xaf, 0xdc, 0x2c, 0x68 },
+		.result = { 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, 0x80, 0x00 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xfd, 0x30, 0x0a, 0xeb, 0x40, 0xe1, 0xfa, 0x58,
+			    0x25, 0x18, 0x41, 0x2b, 0x49, 0xb2, 0x08, 0xa7,
+			    0x84, 0x2b, 0x1e, 0x1f, 0x05, 0x6a, 0x04, 0x01,
+			    0x78, 0xea, 0x41, 0x41, 0x53, 0x4f, 0x65, 0x2d },
+		.result = { 0xb7, 0x34, 0x10, 0x5d, 0xc2, 0x57, 0x58, 0x5d,
+			    0x73, 0xb5, 0x66, 0xcc, 0xb7, 0x6f, 0x06, 0x27,
+			    0x95, 0xcc, 0xbe, 0xc8, 0x91, 0x28, 0xe5, 0x2b,
+			    0x02, 0xf3, 0xe5, 0x96, 0x39, 0xf1, 0x3c, 0x46 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xc8, 0xef, 0x79, 0xb5, 0x14, 0xd7, 0x68, 0x26,
+			    0x77, 0xbc, 0x79, 0x31, 0xe0, 0x6e, 0xe5, 0xc2,
+			    0x7c, 0x9b, 0x39, 0x2b, 0x4a, 0xe9, 0x48, 0x44,
+			    0x73, 0xf5, 0x54, 0xe6, 0x67, 0x8e, 0xcc, 0x2e },
+		.result = { 0x64, 0x7a, 0x46, 0xb6, 0xfc, 0x3f, 0x40, 0xd6,
+			    0x21, 0x41, 0xee, 0x3c, 0xee, 0x70, 0x6b, 0x4d,
+			    0x7a, 0x92, 0x71, 0x59, 0x3a, 0x7b, 0x14, 0x3e,
+			    0x8e, 0x2e, 0x22, 0x79, 0x88, 0x3e, 0x45, 0x50 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0x64, 0xae, 0xac, 0x25, 0x04, 0x14, 0x48, 0x61,
+			    0x53, 0x2b, 0x7b, 0xbc, 0xb6, 0xc8, 0x7d, 0x67,
+			    0xdd, 0x4c, 0x1f, 0x07, 0xeb, 0xc2, 0xe0, 0x6e,
+			    0xff, 0xb9, 0x5a, 0xec, 0xc6, 0x17, 0x0b, 0x2c },
+		.result = { 0x4f, 0xf0, 0x3d, 0x5f, 0xb4, 0x3c, 0xd8, 0x65,
+			    0x7a, 0x3c, 0xf3, 0x7c, 0x13, 0x8c, 0xad, 0xce,
+			    0xcc, 0xe5, 0x09, 0xe4, 0xeb, 0xa0, 0x89, 0xd0,
+			    0xef, 0x40, 0xb4, 0xe4, 0xfb, 0x94, 0x61, 0x55 },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0xbf, 0x68, 0xe3, 0x5e, 0x9b, 0xdb, 0x7e, 0xee,
+			    0x1b, 0x50, 0x57, 0x02, 0x21, 0x86, 0x0f, 0x5d,
+			    0xcd, 0xad, 0x8a, 0xcb, 0xab, 0x03, 0x1b, 0x14,
+			    0x97, 0x4c, 0xc4, 0x90, 0x13, 0xc4, 0x98, 0x31 },
+		.result = { 0x21, 0xce, 0xe5, 0x2e, 0xfd, 0xbc, 0x81, 0x2e,
+			    0x1d, 0x02, 0x1a, 0x4a, 0xf1, 0xe1, 0xd8, 0xbc,
+			    0x4d, 0xb3, 0xc4, 0x00, 0xe4, 0xd2, 0xa2, 0xc5,
+			    0x6a, 0x39, 0x26, 0xdb, 0x4d, 0x99, 0xc6, 0x5b },
+		.valid = true
+	},
+	/* wycheproof - checking for overflow */
+	{
+		.private = { 0xc8, 0x17, 0x24, 0x70, 0x40, 0x00, 0xb2, 0x6d,
+			     0x31, 0x70, 0x3c, 0xc9, 0x7e, 0x3a, 0x37, 0x8d,
+			     0x56, 0xfa, 0xd8, 0x21, 0x93, 0x61, 0xc8, 0x8c,
+			     0xca, 0x8b, 0xd7, 0xc5, 0x71, 0x9b, 0x12, 0xb2 },
+		.public = { 0x53, 0x47, 0xc4, 0x91, 0x33, 0x1a, 0x64, 0xb4,
+			    0x3d, 0xdc, 0x68, 0x30, 0x34, 0xe6, 0x77, 0xf5,
+			    0x3d, 0xc3, 0x2b, 0x52, 0xa5, 0x2a, 0x57, 0x7c,
+			    0x15, 0xa8, 0x3b, 0xf2, 0x98, 0xe9, 0x9f, 0x19 },
+		.result = { 0x18, 0xcb, 0x89, 0xe4, 0xe2, 0x0c, 0x0c, 0x2b,
+			    0xd3, 0x24, 0x30, 0x52, 0x45, 0x26, 0x6c, 0x93,
+			    0x27, 0x69, 0x0b, 0xbe, 0x79, 0xac, 0xb8, 0x8f,
+			    0x5b, 0x8f, 0xb3, 0xf7, 0x4e, 0xca, 0x3e, 0x52 },
+		.valid = true
+	},
+	/* wycheproof - private key == -1 (mod order) */
+	{
+		.private = { 0xa0, 0x23, 0xcd, 0xd0, 0x83, 0xef, 0x5b, 0xb8,
+			     0x2f, 0x10, 0xd6, 0x2e, 0x59, 0xe1, 0x5a, 0x68,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50 },
+		.public = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+		.result = { 0x25, 0x8e, 0x04, 0x52, 0x3b, 0x8d, 0x25, 0x3e,
+			    0xe6, 0x57, 0x19, 0xfc, 0x69, 0x06, 0xc6, 0x57,
+			    0x19, 0x2d, 0x80, 0x71, 0x7e, 0xdc, 0x82, 0x8f,
+			    0xa0, 0xaf, 0x21, 0x68, 0x6e, 0x2f, 0xaa, 0x75 },
+		.valid = true
+	},
+	/* wycheproof - private key == 1 (mod order) on twist */
+	{
+		.private = { 0x58, 0x08, 0x3d, 0xd2, 0x61, 0xad, 0x91, 0xef,
+			     0xf9, 0x52, 0x32, 0x2e, 0xc8, 0x24, 0xc6, 0x82,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			     0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f },
+		.public = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+		.result = { 0x2e, 0xae, 0x5e, 0xc3, 0xdd, 0x49, 0x4e, 0x9f,
+			    0x2d, 0x37, 0xd2, 0x58, 0xf8, 0x73, 0xa8, 0xe6,
+			    0xe9, 0xd0, 0xdb, 0xd1, 0xe3, 0x83, 0xef, 0x64,
+			    0xd9, 0x8b, 0xb9, 0x1b, 0x3e, 0x0b, 0xe0, 0x35 },
+		.valid = true
+	}
+};
+
+bool __init curve25519_selftest(void)
+{
+	bool success = true, ret, ret2;
+	size_t i = 0, j;
+	u8 in[CURVE25519_KEY_SIZE];
+	u8 out[CURVE25519_KEY_SIZE], out2[CURVE25519_KEY_SIZE],
+	   out3[CURVE25519_KEY_SIZE];
+
+	for (i = 0; i < ARRAY_SIZE(curve25519_test_vectors); ++i) {
+		memset(out, 0, CURVE25519_KEY_SIZE);
+		ret = curve25519(out, curve25519_test_vectors[i].private,
+				 curve25519_test_vectors[i].public);
+		if (ret != curve25519_test_vectors[i].valid ||
+		    memcmp(out, curve25519_test_vectors[i].result,
+			   CURVE25519_KEY_SIZE)) {
+			pr_err("curve25519 self-test %zu: FAIL\n", i + 1);
+			success = false;
+		}
+	}
+
+	for (i = 0; i < 5; ++i) {
+		get_random_bytes(in, sizeof(in));
+		ret = curve25519_generate_public(out, in);
+		ret2 = curve25519(out2, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
+		curve25519_generic(out3, in, (u8[CURVE25519_KEY_SIZE]){ 9 });
+		if (ret != ret2 ||
+		    memcmp(out, out2, CURVE25519_KEY_SIZE) ||
+		    memcmp(out, out3, CURVE25519_KEY_SIZE)) {
+			pr_err("curve25519 basepoint self-test %zu: FAIL: input - 0x",
+			       i + 1);
+			for (j = CURVE25519_KEY_SIZE; j-- > 0;)
+				printk(KERN_CONT "%02x", in[j]);
+			printk(KERN_CONT "\n");
+			success = false;
+		}
+	}
+
+	return success;
+}
diff --git a/lib/crypto/curve25519.c b/lib/crypto/curve25519.c
new file mode 100644
index 0000000..288a62c
--- /dev/null
+++ b/lib/crypto/curve25519.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is an implementation of the Curve25519 ECDH algorithm, using either
+ * a 32-bit implementation or a 64-bit implementation with 128-bit integers,
+ * depending on what is supported by the target compiler.
+ *
+ * Information: https://cr.yp.to/ecdh.html
+ */
+
+#include <crypto/curve25519.h>
+#include <linux/module.h>
+#include <linux/init.h>
+
+bool curve25519_selftest(void);
+
+static int __init mod_init(void)
+{
+	if (!IS_ENABLED(CONFIG_CRYPTO_MANAGER_DISABLE_TESTS) &&
+	    WARN_ON(!curve25519_selftest()))
+		return -ENODEV;
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+}
+
+module_init(mod_init);
+module_exit(mod_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("Curve25519 scalar multiplication");
+MODULE_AUTHOR("Jason A. Donenfeld <Jason@zx2c4.com>");
diff --git a/lib/crypto/libchacha.c b/lib/crypto/libchacha.c
new file mode 100644
index 0000000..dabc3ac
--- /dev/null
+++ b/lib/crypto/libchacha.c
@@ -0,0 +1,35 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The ChaCha stream cipher (RFC7539)
+ *
+ * Copyright (C) 2015 Martin Willi
+ */
+
+#include <linux/kernel.h>
+#include <linux/export.h>
+#include <linux/module.h>
+
+#include <crypto/algapi.h> // for crypto_xor_cpy
+#include <crypto/chacha.h>
+
+void chacha_crypt_generic(u32 *state, u8 *dst, const u8 *src,
+			  unsigned int bytes, int nrounds)
+{
+	/* aligned to potentially speed up crypto_xor() */
+	u8 stream[CHACHA_BLOCK_SIZE] __aligned(sizeof(long));
+
+	while (bytes >= CHACHA_BLOCK_SIZE) {
+		chacha_block_generic(state, stream, nrounds);
+		crypto_xor_cpy(dst, src, stream, CHACHA_BLOCK_SIZE);
+		bytes -= CHACHA_BLOCK_SIZE;
+		dst += CHACHA_BLOCK_SIZE;
+		src += CHACHA_BLOCK_SIZE;
+	}
+	if (bytes) {
+		chacha_block_generic(state, stream, nrounds);
+		crypto_xor_cpy(dst, src, stream, bytes);
+	}
+}
+EXPORT_SYMBOL(chacha_crypt_generic);
+
+MODULE_LICENSE("GPL");
diff --git a/lib/crypto/poly1305-donna32.c b/lib/crypto/poly1305-donna32.c
new file mode 100644
index 0000000..7fb7184
--- /dev/null
+++ b/lib/crypto/poly1305-donna32.c
@@ -0,0 +1,205 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is based in part on Andrew Moon's poly1305-donna, which is in the
+ * public domain.
+ */
+
+#include <linux/kernel.h>
+#include <asm/unaligned.h>
+#include <crypto/internal/poly1305.h>
+
+void poly1305_core_setkey(struct poly1305_core_key *key,
+			  const u8 raw_key[POLY1305_BLOCK_SIZE])
+{
+	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
+	key->key.r[0] = (get_unaligned_le32(&raw_key[0])) & 0x3ffffff;
+	key->key.r[1] = (get_unaligned_le32(&raw_key[3]) >> 2) & 0x3ffff03;
+	key->key.r[2] = (get_unaligned_le32(&raw_key[6]) >> 4) & 0x3ffc0ff;
+	key->key.r[3] = (get_unaligned_le32(&raw_key[9]) >> 6) & 0x3f03fff;
+	key->key.r[4] = (get_unaligned_le32(&raw_key[12]) >> 8) & 0x00fffff;
+
+	/* s = 5*r */
+	key->precomputed_s.r[0] = key->key.r[1] * 5;
+	key->precomputed_s.r[1] = key->key.r[2] * 5;
+	key->precomputed_s.r[2] = key->key.r[3] * 5;
+	key->precomputed_s.r[3] = key->key.r[4] * 5;
+}
+EXPORT_SYMBOL(poly1305_core_setkey);
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit)
+{
+	const u8 *input = src;
+	u32 r0, r1, r2, r3, r4;
+	u32 s1, s2, s3, s4;
+	u32 h0, h1, h2, h3, h4;
+	u64 d0, d1, d2, d3, d4;
+	u32 c;
+
+	if (!nblocks)
+		return;
+
+	hibit <<= 24;
+
+	r0 = key->key.r[0];
+	r1 = key->key.r[1];
+	r2 = key->key.r[2];
+	r3 = key->key.r[3];
+	r4 = key->key.r[4];
+
+	s1 = key->precomputed_s.r[0];
+	s2 = key->precomputed_s.r[1];
+	s3 = key->precomputed_s.r[2];
+	s4 = key->precomputed_s.r[3];
+
+	h0 = state->h[0];
+	h1 = state->h[1];
+	h2 = state->h[2];
+	h3 = state->h[3];
+	h4 = state->h[4];
+
+	do {
+		/* h += m[i] */
+		h0 += (get_unaligned_le32(&input[0])) & 0x3ffffff;
+		h1 += (get_unaligned_le32(&input[3]) >> 2) & 0x3ffffff;
+		h2 += (get_unaligned_le32(&input[6]) >> 4) & 0x3ffffff;
+		h3 += (get_unaligned_le32(&input[9]) >> 6) & 0x3ffffff;
+		h4 += (get_unaligned_le32(&input[12]) >> 8) | hibit;
+
+		/* h *= r */
+		d0 = ((u64)h0 * r0) + ((u64)h1 * s4) +
+		     ((u64)h2 * s3) + ((u64)h3 * s2) +
+		     ((u64)h4 * s1);
+		d1 = ((u64)h0 * r1) + ((u64)h1 * r0) +
+		     ((u64)h2 * s4) + ((u64)h3 * s3) +
+		     ((u64)h4 * s2);
+		d2 = ((u64)h0 * r2) + ((u64)h1 * r1) +
+		     ((u64)h2 * r0) + ((u64)h3 * s4) +
+		     ((u64)h4 * s3);
+		d3 = ((u64)h0 * r3) + ((u64)h1 * r2) +
+		     ((u64)h2 * r1) + ((u64)h3 * r0) +
+		     ((u64)h4 * s4);
+		d4 = ((u64)h0 * r4) + ((u64)h1 * r3) +
+		     ((u64)h2 * r2) + ((u64)h3 * r1) +
+		     ((u64)h4 * r0);
+
+		/* (partial) h %= p */
+		c = (u32)(d0 >> 26);
+		h0 = (u32)d0 & 0x3ffffff;
+		d1 += c;
+		c = (u32)(d1 >> 26);
+		h1 = (u32)d1 & 0x3ffffff;
+		d2 += c;
+		c = (u32)(d2 >> 26);
+		h2 = (u32)d2 & 0x3ffffff;
+		d3 += c;
+		c = (u32)(d3 >> 26);
+		h3 = (u32)d3 & 0x3ffffff;
+		d4 += c;
+		c = (u32)(d4 >> 26);
+		h4 = (u32)d4 & 0x3ffffff;
+		h0 += c * 5;
+		c = (h0 >> 26);
+		h0 = h0 & 0x3ffffff;
+		h1 += c;
+
+		input += POLY1305_BLOCK_SIZE;
+	} while (--nblocks);
+
+	state->h[0] = h0;
+	state->h[1] = h1;
+	state->h[2] = h2;
+	state->h[3] = h3;
+	state->h[4] = h4;
+}
+EXPORT_SYMBOL(poly1305_core_blocks);
+
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst)
+{
+	u8 *mac = dst;
+	u32 h0, h1, h2, h3, h4, c;
+	u32 g0, g1, g2, g3, g4;
+	u64 f;
+	u32 mask;
+
+	/* fully carry h */
+	h0 = state->h[0];
+	h1 = state->h[1];
+	h2 = state->h[2];
+	h3 = state->h[3];
+	h4 = state->h[4];
+
+	c = h1 >> 26;
+	h1 = h1 & 0x3ffffff;
+	h2 += c;
+	c = h2 >> 26;
+	h2 = h2 & 0x3ffffff;
+	h3 += c;
+	c = h3 >> 26;
+	h3 = h3 & 0x3ffffff;
+	h4 += c;
+	c = h4 >> 26;
+	h4 = h4 & 0x3ffffff;
+	h0 += c * 5;
+	c = h0 >> 26;
+	h0 = h0 & 0x3ffffff;
+	h1 += c;
+
+	/* compute h + -p */
+	g0 = h0 + 5;
+	c = g0 >> 26;
+	g0 &= 0x3ffffff;
+	g1 = h1 + c;
+	c = g1 >> 26;
+	g1 &= 0x3ffffff;
+	g2 = h2 + c;
+	c = g2 >> 26;
+	g2 &= 0x3ffffff;
+	g3 = h3 + c;
+	c = g3 >> 26;
+	g3 &= 0x3ffffff;
+	g4 = h4 + c - (1UL << 26);
+
+	/* select h if h < p, or h + -p if h >= p */
+	mask = (g4 >> ((sizeof(u32) * 8) - 1)) - 1;
+	g0 &= mask;
+	g1 &= mask;
+	g2 &= mask;
+	g3 &= mask;
+	g4 &= mask;
+	mask = ~mask;
+
+	h0 = (h0 & mask) | g0;
+	h1 = (h1 & mask) | g1;
+	h2 = (h2 & mask) | g2;
+	h3 = (h3 & mask) | g3;
+	h4 = (h4 & mask) | g4;
+
+	/* h = h % (2^128) */
+	h0 = ((h0) | (h1 << 26)) & 0xffffffff;
+	h1 = ((h1 >> 6) | (h2 << 20)) & 0xffffffff;
+	h2 = ((h2 >> 12) | (h3 << 14)) & 0xffffffff;
+	h3 = ((h3 >> 18) | (h4 << 8)) & 0xffffffff;
+
+	if (likely(nonce)) {
+		/* mac = (h + nonce) % (2^128) */
+		f = (u64)h0 + nonce[0];
+		h0 = (u32)f;
+		f = (u64)h1 + nonce[1] + (f >> 32);
+		h1 = (u32)f;
+		f = (u64)h2 + nonce[2] + (f >> 32);
+		h2 = (u32)f;
+		f = (u64)h3 + nonce[3] + (f >> 32);
+		h3 = (u32)f;
+	}
+
+	put_unaligned_le32(h0, &mac[0]);
+	put_unaligned_le32(h1, &mac[4]);
+	put_unaligned_le32(h2, &mac[8]);
+	put_unaligned_le32(h3, &mac[12]);
+}
+EXPORT_SYMBOL(poly1305_core_emit);
diff --git a/lib/crypto/poly1305-donna64.c b/lib/crypto/poly1305-donna64.c
new file mode 100644
index 0000000..d34cf40
--- /dev/null
+++ b/lib/crypto/poly1305-donna64.c
@@ -0,0 +1,186 @@
+// SPDX-License-Identifier: GPL-2.0 OR MIT
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ *
+ * This is based in part on Andrew Moon's poly1305-donna, which is in the
+ * public domain.
+ */
+
+#include <linux/kernel.h>
+#include <asm/unaligned.h>
+#include <crypto/internal/poly1305.h>
+
+typedef __uint128_t u128;
+
+void poly1305_core_setkey(struct poly1305_core_key *key,
+			  const u8 raw_key[POLY1305_BLOCK_SIZE])
+{
+	u64 t0, t1;
+
+	/* r &= 0xffffffc0ffffffc0ffffffc0fffffff */
+	t0 = get_unaligned_le64(&raw_key[0]);
+	t1 = get_unaligned_le64(&raw_key[8]);
+
+	key->key.r64[0] = t0 & 0xffc0fffffffULL;
+	key->key.r64[1] = ((t0 >> 44) | (t1 << 20)) & 0xfffffc0ffffULL;
+	key->key.r64[2] = ((t1 >> 24)) & 0x00ffffffc0fULL;
+
+	/* s = 20*r */
+	key->precomputed_s.r64[0] = key->key.r64[1] * 20;
+	key->precomputed_s.r64[1] = key->key.r64[2] * 20;
+}
+EXPORT_SYMBOL(poly1305_core_setkey);
+
+void poly1305_core_blocks(struct poly1305_state *state,
+			  const struct poly1305_core_key *key, const void *src,
+			  unsigned int nblocks, u32 hibit)
+{
+	const u8 *input = src;
+	u64 hibit64;
+	u64 r0, r1, r2;
+	u64 s1, s2;
+	u64 h0, h1, h2;
+	u64 c;
+	u128 d0, d1, d2, d;
+
+	if (!nblocks)
+		return;
+
+	hibit64 = ((u64)hibit) << 40;
+
+	r0 = key->key.r64[0];
+	r1 = key->key.r64[1];
+	r2 = key->key.r64[2];
+
+	h0 = state->h64[0];
+	h1 = state->h64[1];
+	h2 = state->h64[2];
+
+	s1 = key->precomputed_s.r64[0];
+	s2 = key->precomputed_s.r64[1];
+
+	do {
+		u64 t0, t1;
+
+		/* h += m[i] */
+		t0 = get_unaligned_le64(&input[0]);
+		t1 = get_unaligned_le64(&input[8]);
+
+		h0 += t0 & 0xfffffffffffULL;
+		h1 += ((t0 >> 44) | (t1 << 20)) & 0xfffffffffffULL;
+		h2 += (((t1 >> 24)) & 0x3ffffffffffULL) | hibit64;
+
+		/* h *= r */
+		d0 = (u128)h0 * r0;
+		d = (u128)h1 * s2;
+		d0 += d;
+		d = (u128)h2 * s1;
+		d0 += d;
+		d1 = (u128)h0 * r1;
+		d = (u128)h1 * r0;
+		d1 += d;
+		d = (u128)h2 * s2;
+		d1 += d;
+		d2 = (u128)h0 * r2;
+		d = (u128)h1 * r1;
+		d2 += d;
+		d = (u128)h2 * r0;
+		d2 += d;
+
+		/* (partial) h %= p */
+		c = (u64)(d0 >> 44);
+		h0 = (u64)d0 & 0xfffffffffffULL;
+		d1 += c;
+		c = (u64)(d1 >> 44);
+		h1 = (u64)d1 & 0xfffffffffffULL;
+		d2 += c;
+		c = (u64)(d2 >> 42);
+		h2 = (u64)d2 & 0x3ffffffffffULL;
+		h0 += c * 5;
+		c = h0 >> 44;
+		h0 = h0 & 0xfffffffffffULL;
+		h1 += c;
+
+		input += POLY1305_BLOCK_SIZE;
+	} while (--nblocks);
+
+	state->h64[0] = h0;
+	state->h64[1] = h1;
+	state->h64[2] = h2;
+}
+EXPORT_SYMBOL(poly1305_core_blocks);
+
+void poly1305_core_emit(const struct poly1305_state *state, const u32 nonce[4],
+			void *dst)
+{
+	u8 *mac = dst;
+	u64 h0, h1, h2, c;
+	u64 g0, g1, g2;
+	u64 t0, t1;
+
+	/* fully carry h */
+	h0 = state->h64[0];
+	h1 = state->h64[1];
+	h2 = state->h64[2];
+
+	c = h1 >> 44;
+	h1 &= 0xfffffffffffULL;
+	h2 += c;
+	c = h2 >> 42;
+	h2 &= 0x3ffffffffffULL;
+	h0 += c * 5;
+	c = h0 >> 44;
+	h0 &= 0xfffffffffffULL;
+	h1 += c;
+	c = h1 >> 44;
+	h1 &= 0xfffffffffffULL;
+	h2 += c;
+	c = h2 >> 42;
+	h2 &= 0x3ffffffffffULL;
+	h0 += c * 5;
+	c = h0 >> 44;
+	h0 &= 0xfffffffffffULL;
+	h1 += c;
+
+	/* compute h + -p */
+	g0 = h0 + 5;
+	c  = g0 >> 44;
+	g0 &= 0xfffffffffffULL;
+	g1 = h1 + c;
+	c  = g1 >> 44;
+	g1 &= 0xfffffffffffULL;
+	g2 = h2 + c - (1ULL << 42);
+
+	/* select h if h < p, or h + -p if h >= p */
+	c = (g2 >> ((sizeof(u64) * 8) - 1)) - 1;
+	g0 &= c;
+	g1 &= c;
+	g2 &= c;
+	c  = ~c;
+	h0 = (h0 & c) | g0;
+	h1 = (h1 & c) | g1;
+	h2 = (h2 & c) | g2;
+
+	if (likely(nonce)) {
+		/* h = (h + nonce) */
+		t0 = ((u64)nonce[1] << 32) | nonce[0];
+		t1 = ((u64)nonce[3] << 32) | nonce[2];
+
+		h0 += t0 & 0xfffffffffffULL;
+		c = h0 >> 44;
+		h0 &= 0xfffffffffffULL;
+		h1 += (((t0 >> 44) | (t1 << 20)) & 0xfffffffffffULL) + c;
+		c = h1 >> 44;
+		h1 &= 0xfffffffffffULL;
+		h2 += (((t1 >> 24)) & 0x3ffffffffffULL) + c;
+		h2 &= 0x3ffffffffffULL;
+	}
+
+	/* mac = h % (2^128) */
+	h0 = h0 | (h1 << 44);
+	h1 = (h1 >> 20) | (h2 << 24);
+
+	put_unaligned_le64(h0, &mac[0]);
+	put_unaligned_le64(h1, &mac[8]);
+}
+EXPORT_SYMBOL(poly1305_core_emit);
diff --git a/lib/crypto/poly1305.c b/lib/crypto/poly1305.c
new file mode 100644
index 0000000..26d87fc
--- /dev/null
+++ b/lib/crypto/poly1305.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Poly1305 authenticator algorithm, RFC7539
+ *
+ * Copyright (C) 2015 Martin Willi
+ *
+ * Based on public domain code by Andrew Moon and Daniel J. Bernstein.
+ */
+
+#include <crypto/internal/poly1305.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <asm/unaligned.h>
+
+void poly1305_init_generic(struct poly1305_desc_ctx *desc,
+			   const u8 key[POLY1305_KEY_SIZE])
+{
+	poly1305_core_setkey(&desc->core_r, key);
+	desc->s[0] = get_unaligned_le32(key + 16);
+	desc->s[1] = get_unaligned_le32(key + 20);
+	desc->s[2] = get_unaligned_le32(key + 24);
+	desc->s[3] = get_unaligned_le32(key + 28);
+	poly1305_core_init(&desc->h);
+	desc->buflen = 0;
+	desc->sset = true;
+	desc->rset = 2;
+}
+EXPORT_SYMBOL_GPL(poly1305_init_generic);
+
+void poly1305_update_generic(struct poly1305_desc_ctx *desc, const u8 *src,
+			     unsigned int nbytes)
+{
+	unsigned int bytes;
+
+	if (unlikely(desc->buflen)) {
+		bytes = min(nbytes, POLY1305_BLOCK_SIZE - desc->buflen);
+		memcpy(desc->buf + desc->buflen, src, bytes);
+		src += bytes;
+		nbytes -= bytes;
+		desc->buflen += bytes;
+
+		if (desc->buflen == POLY1305_BLOCK_SIZE) {
+			poly1305_core_blocks(&desc->h, &desc->core_r, desc->buf,
+					     1, 1);
+			desc->buflen = 0;
+		}
+	}
+
+	if (likely(nbytes >= POLY1305_BLOCK_SIZE)) {
+		poly1305_core_blocks(&desc->h, &desc->core_r, src,
+				     nbytes / POLY1305_BLOCK_SIZE, 1);
+		src += nbytes - (nbytes % POLY1305_BLOCK_SIZE);
+		nbytes %= POLY1305_BLOCK_SIZE;
+	}
+
+	if (unlikely(nbytes)) {
+		desc->buflen = nbytes;
+		memcpy(desc->buf, src, nbytes);
+	}
+}
+EXPORT_SYMBOL_GPL(poly1305_update_generic);
+
+void poly1305_final_generic(struct poly1305_desc_ctx *desc, u8 *dst)
+{
+	if (unlikely(desc->buflen)) {
+		desc->buf[desc->buflen++] = 1;
+		memset(desc->buf + desc->buflen, 0,
+		       POLY1305_BLOCK_SIZE - desc->buflen);
+		poly1305_core_blocks(&desc->h, &desc->core_r, desc->buf, 1, 0);
+	}
+
+	poly1305_core_emit(&desc->h, desc->s, dst);
+	*desc = (struct poly1305_desc_ctx){};
+}
+EXPORT_SYMBOL_GPL(poly1305_final_generic);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Martin Willi <martin@strongswan.org>");
diff --git a/lib/crypto/sha256.c b/lib/crypto/sha256.c
index 66cb04b..2321f6c 100644
--- a/lib/crypto/sha256.c
+++ b/lib/crypto/sha256.c
@@ -206,7 +206,7 @@
 	memzero_explicit(W, 64 * sizeof(u32));
 }
 
-int sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
+void sha256_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
 {
 	unsigned int partial, done;
 	const u8 *src;
@@ -232,18 +232,16 @@
 		partial = 0;
 	}
 	memcpy(sctx->buf + partial, src, len - done);
-
-	return 0;
 }
 EXPORT_SYMBOL(sha256_update);
 
-int sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
+void sha224_update(struct sha256_state *sctx, const u8 *data, unsigned int len)
 {
-	return sha256_update(sctx, data, len);
+	sha256_update(sctx, data, len);
 }
 EXPORT_SYMBOL(sha224_update);
 
-static int __sha256_final(struct sha256_state *sctx, u8 *out, int digest_words)
+static void __sha256_final(struct sha256_state *sctx, u8 *out, int digest_words)
 {
 	__be32 *dst = (__be32 *)out;
 	__be64 bits;
@@ -268,20 +266,28 @@
 
 	/* Zeroize sensitive information. */
 	memset(sctx, 0, sizeof(*sctx));
-
-	return 0;
 }
 
-int sha256_final(struct sha256_state *sctx, u8 *out)
+void sha256_final(struct sha256_state *sctx, u8 *out)
 {
-	return __sha256_final(sctx, out, 8);
+	__sha256_final(sctx, out, 8);
 }
 EXPORT_SYMBOL(sha256_final);
 
-int sha224_final(struct sha256_state *sctx, u8 *out)
+void sha224_final(struct sha256_state *sctx, u8 *out)
 {
-	return __sha256_final(sctx, out, 7);
+	__sha256_final(sctx, out, 7);
 }
 EXPORT_SYMBOL(sha224_final);
 
+void sha256(const u8 *data, unsigned int len, u8 *out)
+{
+	struct sha256_state sctx;
+
+	sha256_init(&sctx);
+	sha256_update(&sctx, data, len);
+	sha256_final(&sctx, out);
+}
+EXPORT_SYMBOL(sha256);
+
 MODULE_LICENSE("GPL");
diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index ccf0571..f428e83 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -990,15 +990,25 @@
 
 static __initdata int ddebug_init_success;
 
-static int __init dynamic_debug_init_debugfs(void)
+static int __init dynamic_debug_init_control(void)
 {
-	struct dentry *dir;
+	struct proc_dir_entry *procfs_dir;
+	struct dentry *debugfs_dir;
 
 	if (!ddebug_init_success)
 		return -ENODEV;
 
-	dir = debugfs_create_dir("dynamic_debug", NULL);
-	debugfs_create_file("control", 0644, dir, NULL, &ddebug_proc_fops);
+	/* Create the control file in debugfs if it is enabled */
+	if (debugfs_initialized()) {
+		debugfs_dir = debugfs_create_dir("dynamic_debug", NULL);
+		debugfs_create_file("control", 0644, debugfs_dir, NULL,
+				    &ddebug_proc_fops);
+	}
+
+	/* Also create the control file in procfs */
+	procfs_dir = proc_mkdir("dynamic_debug", NULL);
+	if (procfs_dir)
+		proc_create("control", 0644, procfs_dir, &ddebug_proc_fops);
 
 	return 0;
 }
@@ -1013,8 +1023,13 @@
 	int verbose_bytes = 0;
 
 	if (__start___verbose == __stop___verbose) {
-		pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
-		return 1;
+		if (IS_ENABLED(CONFIG_DYNAMIC_DEBUG)) {
+			pr_warn("_ddebug table is empty in a CONFIG_DYNAMIC_DEBUG build\n");
+			return 1;
+		}
+		pr_info("Ignore empty _ddebug table in a CONFIG_DYNAMIC_DEBUG_CORE build\n");
+		ddebug_init_success = 1;
+		return 0;
 	}
 	iter = __start___verbose;
 	modname = iter->modname;
@@ -1076,4 +1091,4 @@
 early_initcall(dynamic_debug_init);
 
 /* Debugfs setup must be done later */
-fs_initcall(dynamic_debug_init_debugfs);
+fs_initcall(dynamic_debug_init_control);
diff --git a/lib/kunit/Kconfig b/lib/kunit/Kconfig
new file mode 100644
index 0000000..00909e6
--- /dev/null
+++ b/lib/kunit/Kconfig
@@ -0,0 +1,61 @@
+#
+# KUnit base configuration
+#
+
+menuconfig KUNIT
+	tristate "KUnit - Enable support for unit tests"
+	help
+	  Enables support for kernel unit tests (KUnit), a lightweight unit
+	  testing and mocking framework for the Linux kernel. These tests are
+	  able to be run locally on a developer's workstation without a VM or
+	  special hardware when using UML. Can also be used on most other
+	  architectures. For more information, please see
+	  Documentation/dev-tools/kunit/.
+
+if KUNIT
+
+config KUNIT_DEBUGFS
+	bool "KUnit - Enable /sys/kernel/debug/kunit debugfs representation" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enable debugfs representation for kunit.  Currently this consists
+	  of /sys/kernel/debug/kunit/<test_suite>/results files for each
+	  test suite, which allow users to see results of the last test suite
+	  run that occurred.
+
+config KUNIT_TEST
+	tristate "KUnit test for KUnit" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enables the unit tests for the KUnit test framework. These tests test
+	  the KUnit test framework itself; the tests are both written using
+	  KUnit and test KUnit. This option should only be enabled for testing
+	  purposes by developers interested in testing that KUnit works as
+	  expected.
+
+config KUNIT_EXAMPLE_TEST
+	tristate "Example test for KUnit" if !KUNIT_ALL_TESTS
+	default KUNIT_ALL_TESTS
+	help
+	  Enables an example unit test that illustrates some of the basic
+	  features of KUnit. This test only exists to help new users understand
+	  what KUnit is and how it is used. Please refer to the example test
+	  itself, lib/kunit/example-test.c, for more information. This option
+	  is intended for curious hackers who would like to understand how to
+	  use KUnit for kernel development.
+
+config KUNIT_ALL_TESTS
+	tristate "All KUnit tests with satisfied dependencies"
+	help
+	  Enables all KUnit tests, if they can be enabled.
+	  KUnit tests run during boot and output the results to the debug log
+	  in TAP format (http://testanything.org/). Only useful for kernel devs
+	  running the KUnit test harness, and not intended for inclusion into a
+	  production build.
+
+	  For more information on KUnit and unit tests in general please refer
+	  to the KUnit documentation in Documentation/dev-tools/kunit/.
+
+	  If unsure, say N.
+
+endif # KUNIT
diff --git a/lib/kunit/Makefile b/lib/kunit/Makefile
new file mode 100644
index 0000000..724b943
--- /dev/null
+++ b/lib/kunit/Makefile
@@ -0,0 +1,19 @@
+obj-$(CONFIG_KUNIT) +=			kunit.o
+
+kunit-objs +=				test.o \
+					string-stream.o \
+					assert.o \
+					try-catch.o
+
+ifeq ($(CONFIG_KUNIT_DEBUGFS),y)
+kunit-objs +=				debugfs.o
+endif
+
+obj-$(CONFIG_KUNIT_TEST) +=		kunit-test.o
+
+# string-stream-test compiles built-in only.
+ifeq ($(CONFIG_KUNIT_TEST),y)
+obj-$(CONFIG_KUNIT_TEST) +=		string-stream-test.o
+endif
+
+obj-$(CONFIG_KUNIT_EXAMPLE_TEST) +=	kunit-example-test.o
diff --git a/lib/kunit/assert.c b/lib/kunit/assert.c
new file mode 100644
index 0000000..b24bebca
--- /dev/null
+++ b/lib/kunit/assert.c
@@ -0,0 +1,151 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Assertion and expectation serialization API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+#include <kunit/assert.h>
+
+#include "string-stream.h"
+
+void kunit_base_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream)
+{
+	const char *expect_or_assert = NULL;
+
+	switch (assert->type) {
+	case KUNIT_EXPECTATION:
+		expect_or_assert = "EXPECTATION";
+		break;
+	case KUNIT_ASSERTION:
+		expect_or_assert = "ASSERTION";
+		break;
+	}
+
+	string_stream_add(stream, "%s FAILED at %s:%d\n",
+			 expect_or_assert, assert->file, assert->line);
+}
+EXPORT_SYMBOL_GPL(kunit_base_assert_format);
+
+void kunit_assert_print_msg(const struct kunit_assert *assert,
+			    struct string_stream *stream)
+{
+	if (assert->message.fmt)
+		string_stream_add(stream, "\n%pV", &assert->message);
+}
+EXPORT_SYMBOL_GPL(kunit_assert_print_msg);
+
+void kunit_fail_assert_format(const struct kunit_assert *assert,
+			      struct string_stream *stream)
+{
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream, "%pV", &assert->message);
+}
+EXPORT_SYMBOL_GPL(kunit_fail_assert_format);
+
+void kunit_unary_assert_format(const struct kunit_assert *assert,
+			       struct string_stream *stream)
+{
+	struct kunit_unary_assert *unary_assert = container_of(
+			assert, struct kunit_unary_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	if (unary_assert->expected_true)
+		string_stream_add(stream,
+				 "\tExpected %s to be true, but is false\n",
+				 unary_assert->condition);
+	else
+		string_stream_add(stream,
+				 "\tExpected %s to be false, but is true\n",
+				 unary_assert->condition);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_unary_assert_format);
+
+void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
+				     struct string_stream *stream)
+{
+	struct kunit_ptr_not_err_assert *ptr_assert = container_of(
+			assert, struct kunit_ptr_not_err_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	if (!ptr_assert->value) {
+		string_stream_add(stream,
+				 "\tExpected %s is not null, but is\n",
+				 ptr_assert->text);
+	} else if (IS_ERR(ptr_assert->value)) {
+		string_stream_add(stream,
+				 "\tExpected %s is not error, but is: %ld\n",
+				 ptr_assert->text,
+				 PTR_ERR(ptr_assert->value));
+	}
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_ptr_not_err_assert_format);
+
+void kunit_binary_assert_format(const struct kunit_assert *assert,
+				struct string_stream *stream)
+{
+	struct kunit_binary_assert *binary_assert = container_of(
+			assert, struct kunit_binary_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %lld\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %lld",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_assert_format);
+
+void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream)
+{
+	struct kunit_binary_ptr_assert *binary_assert = container_of(
+			assert, struct kunit_binary_ptr_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %pK\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %pK",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_ptr_assert_format);
+
+void kunit_binary_str_assert_format(const struct kunit_assert *assert,
+				    struct string_stream *stream)
+{
+	struct kunit_binary_str_assert *binary_assert = container_of(
+			assert, struct kunit_binary_str_assert, assert);
+
+	kunit_base_assert_format(assert, stream);
+	string_stream_add(stream,
+			 "\tExpected %s %s %s, but\n",
+			 binary_assert->left_text,
+			 binary_assert->operation,
+			 binary_assert->right_text);
+	string_stream_add(stream, "\t\t%s == %s\n",
+			 binary_assert->left_text,
+			 binary_assert->left_value);
+	string_stream_add(stream, "\t\t%s == %s",
+			 binary_assert->right_text,
+			 binary_assert->right_value);
+	kunit_assert_print_msg(assert, stream);
+}
+EXPORT_SYMBOL_GPL(kunit_binary_str_assert_format);
diff --git a/lib/kunit/debugfs.c b/lib/kunit/debugfs.c
new file mode 100644
index 0000000..9214c49
--- /dev/null
+++ b/lib/kunit/debugfs.c
@@ -0,0 +1,116 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (c) 2020, Oracle and/or its affiliates.
+ *    Author: Alan Maguire <alan.maguire@oracle.com>
+ */
+
+#include <linux/debugfs.h>
+#include <linux/module.h>
+
+#include <kunit/test.h>
+
+#include "string-stream.h"
+
+#define KUNIT_DEBUGFS_ROOT             "kunit"
+#define KUNIT_DEBUGFS_RESULTS          "results"
+
+/*
+ * Create a debugfs representation of test suites:
+ *
+ * Path						Semantics
+ * /sys/kernel/debug/kunit/<testsuite>/results	Show results of last run for
+ *						testsuite
+ *
+ */
+
+static struct dentry *debugfs_rootdir;
+
+void kunit_debugfs_cleanup(void)
+{
+	debugfs_remove_recursive(debugfs_rootdir);
+}
+
+void kunit_debugfs_init(void)
+{
+	if (!debugfs_rootdir)
+		debugfs_rootdir = debugfs_create_dir(KUNIT_DEBUGFS_ROOT, NULL);
+}
+
+static void debugfs_print_result(struct seq_file *seq,
+				 struct kunit_suite *suite,
+				 struct kunit_case *test_case)
+{
+	if (!test_case || !test_case->log)
+		return;
+
+	seq_printf(seq, "%s", test_case->log);
+}
+
+/*
+ * /sys/kernel/debug/kunit/<testsuite>/results shows all results for testsuite.
+ */
+static int debugfs_print_results(struct seq_file *seq, void *v)
+{
+	struct kunit_suite *suite = (struct kunit_suite *)seq->private;
+	bool success = kunit_suite_has_succeeded(suite);
+	struct kunit_case *test_case;
+
+	if (!suite || !suite->log)
+		return 0;
+
+	seq_printf(seq, "%s", suite->log);
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		debugfs_print_result(seq, suite, test_case);
+
+	seq_printf(seq, "%s %d - %s\n",
+		   kunit_status_to_string(success), 1, suite->name);
+	return 0;
+}
+
+static int debugfs_release(struct inode *inode, struct file *file)
+{
+	return single_release(inode, file);
+}
+
+static int debugfs_results_open(struct inode *inode, struct file *file)
+{
+	struct kunit_suite *suite;
+
+	suite = (struct kunit_suite *)inode->i_private;
+
+	return single_open(file, debugfs_print_results, suite);
+}
+
+static const struct file_operations debugfs_results_fops = {
+	.open = debugfs_results_open,
+	.read = seq_read,
+	.llseek = seq_lseek,
+	.release = debugfs_release,
+};
+
+void kunit_debugfs_create_suite(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	/* Allocate logs before creating debugfs representation. */
+	suite->log = kzalloc(KUNIT_LOG_SIZE, GFP_KERNEL);
+	kunit_suite_for_each_test_case(suite, test_case)
+		test_case->log = kzalloc(KUNIT_LOG_SIZE, GFP_KERNEL);
+
+	suite->debugfs = debugfs_create_dir(suite->name, debugfs_rootdir);
+
+	debugfs_create_file(KUNIT_DEBUGFS_RESULTS, S_IFREG | 0444,
+			    suite->debugfs,
+			    suite, &debugfs_results_fops);
+}
+
+void kunit_debugfs_destroy_suite(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	debugfs_remove_recursive(suite->debugfs);
+	kfree(suite->log);
+	kunit_suite_for_each_test_case(suite, test_case)
+		kfree(test_case->log);
+}
diff --git a/lib/kunit/debugfs.h b/lib/kunit/debugfs.h
new file mode 100644
index 0000000..dcc7d75
--- /dev/null
+++ b/lib/kunit/debugfs.h
@@ -0,0 +1,30 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2020, Oracle and/or its affiliates.
+ */
+
+#ifndef _KUNIT_DEBUGFS_H
+#define _KUNIT_DEBUGFS_H
+
+#include <kunit/test.h>
+
+#ifdef CONFIG_KUNIT_DEBUGFS
+
+void kunit_debugfs_create_suite(struct kunit_suite *suite);
+void kunit_debugfs_destroy_suite(struct kunit_suite *suite);
+void kunit_debugfs_init(void);
+void kunit_debugfs_cleanup(void);
+
+#else
+
+static inline void kunit_debugfs_create_suite(struct kunit_suite *suite) { }
+
+static inline void kunit_debugfs_destroy_suite(struct kunit_suite *suite) { }
+
+static inline void kunit_debugfs_init(void) { }
+
+static inline void kunit_debugfs_cleanup(void) { }
+
+#endif /* CONFIG_KUNIT_DEBUGFS */
+
+#endif /* _KUNIT_DEBUGFS_H */
diff --git a/lib/kunit/kunit-example-test.c b/lib/kunit/kunit-example-test.c
new file mode 100644
index 0000000..be1164e
--- /dev/null
+++ b/lib/kunit/kunit-example-test.c
@@ -0,0 +1,90 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Example KUnit test to show how to use KUnit.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+
+/*
+ * This is the most fundamental element of KUnit, the test case. A test case
+ * makes a set EXPECTATIONs and ASSERTIONs about the behavior of some code; if
+ * any expectations or assertions are not met, the test fails; otherwise, the
+ * test passes.
+ *
+ * In KUnit, a test case is just a function with the signature
+ * `void (*)(struct kunit *)`. `struct kunit` is a context object that stores
+ * information about the current test.
+ */
+static void example_simple_test(struct kunit *test)
+{
+	/*
+	 * This is an EXPECTATION; it is how KUnit tests things. When you want
+	 * to test a piece of code, you set some expectations about what the
+	 * code should do. KUnit then runs the test and verifies that the code's
+	 * behavior matched what was expected.
+	 */
+	KUNIT_EXPECT_EQ(test, 1 + 1, 2);
+}
+
+/*
+ * This is run once before each test case, see the comment on
+ * example_test_suite for more information.
+ */
+static int example_test_init(struct kunit *test)
+{
+	kunit_info(test, "initializing\n");
+
+	return 0;
+}
+
+/*
+ * Here we make a list of all the test cases we want to add to the test suite
+ * below.
+ */
+static struct kunit_case example_test_cases[] = {
+	/*
+	 * This is a helper to create a test case object from a test case
+	 * function; its exact function is not important to understand how to
+	 * use KUnit, just know that this is how you associate test cases with a
+	 * test suite.
+	 */
+	KUNIT_CASE(example_simple_test),
+	{}
+};
+
+/*
+ * This defines a suite or grouping of tests.
+ *
+ * Test cases are defined as belonging to the suite by adding them to
+ * `kunit_cases`.
+ *
+ * Often it is desirable to run some function which will set up things which
+ * will be used by every test; this is accomplished with an `init` function
+ * which runs before each test case is invoked. Similarly, an `exit` function
+ * may be specified which runs after every test case and can be used to for
+ * cleanup. For clarity, running tests in a test suite would behave as follows:
+ *
+ * suite.init(test);
+ * suite.test_case[0](test);
+ * suite.exit(test);
+ * suite.init(test);
+ * suite.test_case[1](test);
+ * suite.exit(test);
+ * ...;
+ */
+static struct kunit_suite example_test_suite = {
+	.name = "example",
+	.init = example_test_init,
+	.test_cases = example_test_cases,
+};
+
+/*
+ * This registers the above test suite telling KUnit that this is a suite of
+ * tests that need to be run.
+ */
+kunit_test_suites(&example_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c
new file mode 100644
index 0000000..aceb5bf
--- /dev/null
+++ b/lib/kunit/kunit-test.c
@@ -0,0 +1,334 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for core test infrastructure.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+#include <kunit/test.h>
+
+#include "try-catch-impl.h"
+
+struct kunit_try_catch_test_context {
+	struct kunit_try_catch *try_catch;
+	bool function_called;
+};
+
+static void kunit_test_successful_try(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+
+	ctx->function_called = true;
+}
+
+static void kunit_test_no_catch(void *data)
+{
+	struct kunit *test = data;
+
+	KUNIT_FAIL(test, "Catch should not be called\n");
+}
+
+static void kunit_test_try_catch_successful_try_no_catch(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     test,
+			     kunit_test_successful_try,
+			     kunit_test_no_catch);
+	kunit_try_catch_run(try_catch, test);
+
+	KUNIT_EXPECT_TRUE(test, ctx->function_called);
+}
+
+static void kunit_test_unsuccessful_try(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_throw(try_catch);
+	KUNIT_FAIL(test, "This line should never be reached\n");
+}
+
+static void kunit_test_catch(void *data)
+{
+	struct kunit *test = data;
+	struct kunit_try_catch_test_context *ctx = test->priv;
+
+	ctx->function_called = true;
+}
+
+static void kunit_test_try_catch_unsuccessful_try_does_catch(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx = test->priv;
+	struct kunit_try_catch *try_catch = ctx->try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     test,
+			     kunit_test_unsuccessful_try,
+			     kunit_test_catch);
+	kunit_try_catch_run(try_catch, test);
+
+	KUNIT_EXPECT_TRUE(test, ctx->function_called);
+}
+
+static int kunit_try_catch_test_init(struct kunit *test)
+{
+	struct kunit_try_catch_test_context *ctx;
+
+	ctx = kunit_kzalloc(test, sizeof(*ctx), GFP_KERNEL);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+	test->priv = ctx;
+
+	ctx->try_catch = kunit_kmalloc(test,
+				       sizeof(*ctx->try_catch),
+				       GFP_KERNEL);
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx->try_catch);
+
+	return 0;
+}
+
+static struct kunit_case kunit_try_catch_test_cases[] = {
+	KUNIT_CASE(kunit_test_try_catch_successful_try_no_catch),
+	KUNIT_CASE(kunit_test_try_catch_unsuccessful_try_does_catch),
+	{}
+};
+
+static struct kunit_suite kunit_try_catch_test_suite = {
+	.name = "kunit-try-catch-test",
+	.init = kunit_try_catch_test_init,
+	.test_cases = kunit_try_catch_test_cases,
+};
+
+/*
+ * Context for testing test managed resources
+ * is_resource_initialized is used to test arbitrary resources
+ */
+struct kunit_test_resource_context {
+	struct kunit test;
+	bool is_resource_initialized;
+	int allocate_order[2];
+	int free_order[2];
+};
+
+static int fake_resource_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	res->allocation = &ctx->is_resource_initialized;
+	ctx->is_resource_initialized = true;
+	return 0;
+}
+
+static void fake_resource_free(struct kunit_resource *res)
+{
+	bool *is_resource_initialized = res->allocation;
+
+	*is_resource_initialized = false;
+}
+
+static void kunit_resource_test_init_resources(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	kunit_init_test(&ctx->test, "testing_test_init_test", NULL);
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_alloc_resource(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *res;
+	kunit_resource_free_t free = fake_resource_free;
+
+	res = kunit_alloc_and_get_resource(&ctx->test,
+					   fake_resource_init,
+					   fake_resource_free,
+					   GFP_KERNEL,
+					   ctx);
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, res);
+	KUNIT_EXPECT_PTR_EQ(test,
+			    &ctx->is_resource_initialized,
+			    (bool *) res->allocation);
+	KUNIT_EXPECT_TRUE(test, list_is_last(&res->node, &ctx->test.resources));
+	KUNIT_EXPECT_PTR_EQ(test, free, res->free);
+}
+
+static void kunit_resource_test_destroy_resource(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *res = kunit_alloc_and_get_resource(
+			&ctx->test,
+			fake_resource_init,
+			fake_resource_free,
+			GFP_KERNEL,
+			ctx);
+
+	KUNIT_ASSERT_FALSE(test,
+			   kunit_resource_destroy(&ctx->test,
+						  kunit_resource_instance_match,
+						  res->free,
+						  res->allocation));
+
+	KUNIT_EXPECT_FALSE(test, ctx->is_resource_initialized);
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_cleanup_resources(struct kunit *test)
+{
+	int i;
+	struct kunit_test_resource_context *ctx = test->priv;
+	struct kunit_resource *resources[5];
+
+	for (i = 0; i < ARRAY_SIZE(resources); i++) {
+		resources[i] = kunit_alloc_and_get_resource(&ctx->test,
+							    fake_resource_init,
+							    fake_resource_free,
+							    GFP_KERNEL,
+							    ctx);
+	}
+
+	kunit_cleanup(&ctx->test);
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&ctx->test.resources));
+}
+
+static void kunit_resource_test_mark_order(int order_array[],
+					   size_t order_size,
+					   int key)
+{
+	int i;
+
+	for (i = 0; i < order_size && order_array[i]; i++)
+		;
+
+	order_array[i] = key;
+}
+
+#define KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, order_field, key)		       \
+		kunit_resource_test_mark_order(ctx->order_field,	       \
+					       ARRAY_SIZE(ctx->order_field),   \
+					       key)
+
+static int fake_resource_2_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, allocate_order, 2);
+
+	res->allocation = ctx;
+
+	return 0;
+}
+
+static void fake_resource_2_free(struct kunit_resource *res)
+{
+	struct kunit_test_resource_context *ctx = res->allocation;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, free_order, 2);
+}
+
+static int fake_resource_1_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_test_resource_context *ctx = context;
+
+	kunit_alloc_and_get_resource(&ctx->test,
+				     fake_resource_2_init,
+				     fake_resource_2_free,
+				     GFP_KERNEL,
+				     ctx);
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, allocate_order, 1);
+
+	res->allocation = ctx;
+
+	return 0;
+}
+
+static void fake_resource_1_free(struct kunit_resource *res)
+{
+	struct kunit_test_resource_context *ctx = res->allocation;
+
+	KUNIT_RESOURCE_TEST_MARK_ORDER(ctx, free_order, 1);
+}
+
+/*
+ * TODO(brendanhiggins@google.com): replace the arrays that keep track of the
+ * order of allocation and freeing with strict mocks using the IN_SEQUENCE macro
+ * to assert allocation and freeing order when the feature becomes available.
+ */
+static void kunit_resource_test_proper_free_ordering(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	/* fake_resource_1 allocates a fake_resource_2 in its init. */
+	kunit_alloc_and_get_resource(&ctx->test,
+				     fake_resource_1_init,
+				     fake_resource_1_free,
+				     GFP_KERNEL,
+				     ctx);
+
+	/*
+	 * Since fake_resource_2_init calls KUNIT_RESOURCE_TEST_MARK_ORDER
+	 * before returning to fake_resource_1_init, it should be the first to
+	 * put its key in the allocate_order array.
+	 */
+	KUNIT_EXPECT_EQ(test, ctx->allocate_order[0], 2);
+	KUNIT_EXPECT_EQ(test, ctx->allocate_order[1], 1);
+
+	kunit_cleanup(&ctx->test);
+
+	/*
+	 * Because fake_resource_2 finishes allocation before fake_resource_1,
+	 * fake_resource_1 should be freed first since it could depend on
+	 * fake_resource_2.
+	 */
+	KUNIT_EXPECT_EQ(test, ctx->free_order[0], 1);
+	KUNIT_EXPECT_EQ(test, ctx->free_order[1], 2);
+}
+
+static int kunit_resource_test_init(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx =
+			kzalloc(sizeof(*ctx), GFP_KERNEL);
+
+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ctx);
+
+	test->priv = ctx;
+
+	kunit_init_test(&ctx->test, "test_test_context", NULL);
+
+	return 0;
+}
+
+static void kunit_resource_test_exit(struct kunit *test)
+{
+	struct kunit_test_resource_context *ctx = test->priv;
+
+	kunit_cleanup(&ctx->test);
+	kfree(ctx);
+}
+
+static struct kunit_case kunit_resource_test_cases[] = {
+	KUNIT_CASE(kunit_resource_test_init_resources),
+	KUNIT_CASE(kunit_resource_test_alloc_resource),
+	KUNIT_CASE(kunit_resource_test_destroy_resource),
+	KUNIT_CASE(kunit_resource_test_cleanup_resources),
+	KUNIT_CASE(kunit_resource_test_proper_free_ordering),
+	{}
+};
+
+static struct kunit_suite kunit_resource_test_suite = {
+	.name = "kunit-resource-test",
+	.init = kunit_resource_test_init,
+	.exit = kunit_resource_test_exit,
+	.test_cases = kunit_resource_test_cases,
+};
+kunit_test_suites(&kunit_try_catch_test_suite, &kunit_resource_test_suite);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/string-stream-test.c b/lib/kunit/string-stream-test.c
new file mode 100644
index 0000000..110f3a9
--- /dev/null
+++ b/lib/kunit/string-stream-test.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for struct string_stream.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/slab.h>
+
+#include "string-stream.h"
+
+static void string_stream_test_empty_on_creation(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+
+	KUNIT_EXPECT_TRUE(test, string_stream_is_empty(stream));
+}
+
+static void string_stream_test_not_empty_after_add(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+
+	string_stream_add(stream, "Foo");
+
+	KUNIT_EXPECT_FALSE(test, string_stream_is_empty(stream));
+}
+
+static void string_stream_test_get_string(struct kunit *test)
+{
+	struct string_stream *stream = alloc_string_stream(test, GFP_KERNEL);
+	char *output;
+
+	string_stream_add(stream, "Foo");
+	string_stream_add(stream, " %s", "bar");
+
+	output = string_stream_get_string(stream);
+	KUNIT_ASSERT_STREQ(test, output, "Foo bar");
+}
+
+static struct kunit_case string_stream_test_cases[] = {
+	KUNIT_CASE(string_stream_test_empty_on_creation),
+	KUNIT_CASE(string_stream_test_not_empty_after_add),
+	KUNIT_CASE(string_stream_test_get_string),
+	{}
+};
+
+static struct kunit_suite string_stream_test_suite = {
+	.name = "string-stream-test",
+	.test_cases = string_stream_test_cases
+};
+kunit_test_suites(&string_stream_test_suite);
diff --git a/lib/kunit/string-stream.c b/lib/kunit/string-stream.c
new file mode 100644
index 0000000..3503920
--- /dev/null
+++ b/lib/kunit/string-stream.c
@@ -0,0 +1,218 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * C++ stream style string builder used in KUnit for building messages.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/list.h>
+#include <linux/slab.h>
+
+#include "string-stream.h"
+
+struct string_stream_fragment_alloc_context {
+	struct kunit *test;
+	int len;
+	gfp_t gfp;
+};
+
+static int string_stream_fragment_init(struct kunit_resource *res,
+				       void *context)
+{
+	struct string_stream_fragment_alloc_context *ctx = context;
+	struct string_stream_fragment *frag;
+
+	frag = kunit_kzalloc(ctx->test, sizeof(*frag), ctx->gfp);
+	if (!frag)
+		return -ENOMEM;
+
+	frag->test = ctx->test;
+	frag->fragment = kunit_kmalloc(ctx->test, ctx->len, ctx->gfp);
+	if (!frag->fragment)
+		return -ENOMEM;
+
+	res->allocation = frag;
+
+	return 0;
+}
+
+static void string_stream_fragment_free(struct kunit_resource *res)
+{
+	struct string_stream_fragment *frag = res->allocation;
+
+	list_del(&frag->node);
+	kunit_kfree(frag->test, frag->fragment);
+	kunit_kfree(frag->test, frag);
+}
+
+static struct string_stream_fragment *alloc_string_stream_fragment(
+		struct kunit *test, int len, gfp_t gfp)
+{
+	struct string_stream_fragment_alloc_context context = {
+		.test = test,
+		.len = len,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    string_stream_fragment_init,
+				    string_stream_fragment_free,
+				    gfp,
+				    &context);
+}
+
+static int string_stream_fragment_destroy(struct string_stream_fragment *frag)
+{
+	return kunit_resource_destroy(frag->test,
+				      kunit_resource_instance_match,
+				      string_stream_fragment_free,
+				      frag);
+}
+
+int string_stream_vadd(struct string_stream *stream,
+		       const char *fmt,
+		       va_list args)
+{
+	struct string_stream_fragment *frag_container;
+	int len;
+	va_list args_for_counting;
+
+	/* Make a copy because `vsnprintf` could change it */
+	va_copy(args_for_counting, args);
+
+	/* Need space for null byte. */
+	len = vsnprintf(NULL, 0, fmt, args_for_counting) + 1;
+
+	va_end(args_for_counting);
+
+	frag_container = alloc_string_stream_fragment(stream->test,
+						      len,
+						      stream->gfp);
+	if (!frag_container)
+		return -ENOMEM;
+
+	len = vsnprintf(frag_container->fragment, len, fmt, args);
+	spin_lock(&stream->lock);
+	stream->length += len;
+	list_add_tail(&frag_container->node, &stream->fragments);
+	spin_unlock(&stream->lock);
+
+	return 0;
+}
+
+int string_stream_add(struct string_stream *stream, const char *fmt, ...)
+{
+	va_list args;
+	int result;
+
+	va_start(args, fmt);
+	result = string_stream_vadd(stream, fmt, args);
+	va_end(args);
+
+	return result;
+}
+
+static void string_stream_clear(struct string_stream *stream)
+{
+	struct string_stream_fragment *frag_container, *frag_container_safe;
+
+	spin_lock(&stream->lock);
+	list_for_each_entry_safe(frag_container,
+				 frag_container_safe,
+				 &stream->fragments,
+				 node) {
+		string_stream_fragment_destroy(frag_container);
+	}
+	stream->length = 0;
+	spin_unlock(&stream->lock);
+}
+
+char *string_stream_get_string(struct string_stream *stream)
+{
+	struct string_stream_fragment *frag_container;
+	size_t buf_len = stream->length + 1; /* +1 for null byte. */
+	char *buf;
+
+	buf = kunit_kzalloc(stream->test, buf_len, stream->gfp);
+	if (!buf)
+		return NULL;
+
+	spin_lock(&stream->lock);
+	list_for_each_entry(frag_container, &stream->fragments, node)
+		strlcat(buf, frag_container->fragment, buf_len);
+	spin_unlock(&stream->lock);
+
+	return buf;
+}
+
+int string_stream_append(struct string_stream *stream,
+			 struct string_stream *other)
+{
+	const char *other_content;
+
+	other_content = string_stream_get_string(other);
+
+	if (!other_content)
+		return -ENOMEM;
+
+	return string_stream_add(stream, other_content);
+}
+
+bool string_stream_is_empty(struct string_stream *stream)
+{
+	return list_empty(&stream->fragments);
+}
+
+struct string_stream_alloc_context {
+	struct kunit *test;
+	gfp_t gfp;
+};
+
+static int string_stream_init(struct kunit_resource *res, void *context)
+{
+	struct string_stream *stream;
+	struct string_stream_alloc_context *ctx = context;
+
+	stream = kunit_kzalloc(ctx->test, sizeof(*stream), ctx->gfp);
+	if (!stream)
+		return -ENOMEM;
+
+	res->allocation = stream;
+	stream->gfp = ctx->gfp;
+	stream->test = ctx->test;
+	INIT_LIST_HEAD(&stream->fragments);
+	spin_lock_init(&stream->lock);
+
+	return 0;
+}
+
+static void string_stream_free(struct kunit_resource *res)
+{
+	struct string_stream *stream = res->allocation;
+
+	string_stream_clear(stream);
+}
+
+struct string_stream *alloc_string_stream(struct kunit *test, gfp_t gfp)
+{
+	struct string_stream_alloc_context context = {
+		.test = test,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    string_stream_init,
+				    string_stream_free,
+				    gfp,
+				    &context);
+}
+
+int string_stream_destroy(struct string_stream *stream)
+{
+	return kunit_resource_destroy(stream->test,
+				      kunit_resource_instance_match,
+				      string_stream_free,
+				      stream);
+}
diff --git a/lib/kunit/string-stream.h b/lib/kunit/string-stream.h
new file mode 100644
index 0000000..fe98a00
--- /dev/null
+++ b/lib/kunit/string-stream.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * C++ stream style string builder used in KUnit for building messages.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_STRING_STREAM_H
+#define _KUNIT_STRING_STREAM_H
+
+#include <linux/spinlock.h>
+#include <linux/types.h>
+#include <stdarg.h>
+
+struct string_stream_fragment {
+	struct kunit *test;
+	struct list_head node;
+	char *fragment;
+};
+
+struct string_stream {
+	size_t length;
+	struct list_head fragments;
+	/* length and fragments are protected by this lock */
+	spinlock_t lock;
+	struct kunit *test;
+	gfp_t gfp;
+};
+
+struct kunit;
+
+struct string_stream *alloc_string_stream(struct kunit *test, gfp_t gfp);
+
+int __printf(2, 3) string_stream_add(struct string_stream *stream,
+				     const char *fmt, ...);
+
+int string_stream_vadd(struct string_stream *stream,
+		       const char *fmt,
+		       va_list args);
+
+char *string_stream_get_string(struct string_stream *stream);
+
+int string_stream_append(struct string_stream *stream,
+			 struct string_stream *other);
+
+bool string_stream_is_empty(struct string_stream *stream);
+
+int string_stream_destroy(struct string_stream *stream);
+
+#endif /* _KUNIT_STRING_STREAM_H */
diff --git a/lib/kunit/test.c b/lib/kunit/test.c
new file mode 100644
index 0000000..2b48838
--- /dev/null
+++ b/lib/kunit/test.c
@@ -0,0 +1,586 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Base unit test (KUnit) API.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/kernel.h>
+#include <linux/sched/debug.h>
+
+#include "debugfs.h"
+#include "string-stream.h"
+#include "try-catch-impl.h"
+
+static void kunit_set_failure(struct kunit *test)
+{
+	WRITE_ONCE(test->success, false);
+}
+
+static void kunit_print_tap_version(void)
+{
+	static bool kunit_has_printed_tap_version;
+
+	if (!kunit_has_printed_tap_version) {
+		pr_info("TAP version 14\n");
+		kunit_has_printed_tap_version = true;
+	}
+}
+
+/*
+ * Append formatted message to log, size of which is limited to
+ * KUNIT_LOG_SIZE bytes (including null terminating byte).
+ */
+void kunit_log_append(char *log, const char *fmt, ...)
+{
+	char line[KUNIT_LOG_SIZE];
+	va_list args;
+	int len_left;
+
+	if (!log)
+		return;
+
+	len_left = KUNIT_LOG_SIZE - strlen(log) - 1;
+	if (len_left <= 0)
+		return;
+
+	va_start(args, fmt);
+	vsnprintf(line, sizeof(line), fmt, args);
+	va_end(args);
+
+	strncat(log, line, len_left);
+}
+EXPORT_SYMBOL_GPL(kunit_log_append);
+
+size_t kunit_suite_num_test_cases(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+	size_t len = 0;
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		len++;
+
+	return len;
+}
+EXPORT_SYMBOL_GPL(kunit_suite_num_test_cases);
+
+static void kunit_print_subtest_start(struct kunit_suite *suite)
+{
+	kunit_print_tap_version();
+	kunit_log(KERN_INFO, suite, "\t# Subtest: %s", suite->name);
+	kunit_log(KERN_INFO, suite, "\t1..%zd",
+		  kunit_suite_num_test_cases(suite));
+}
+
+static void kunit_print_ok_not_ok(void *test_or_suite,
+				  bool is_test,
+				  bool is_ok,
+				  size_t test_number,
+				  const char *description)
+{
+	struct kunit_suite *suite = is_test ? NULL : test_or_suite;
+	struct kunit *test = is_test ? test_or_suite : NULL;
+
+	/*
+	 * We do not log the test suite results as doing so would
+	 * mean debugfs display would consist of the test suite
+	 * description and status prior to individual test results.
+	 * Hence directly printk the suite status, and we will
+	 * separately seq_printf() the suite status for the debugfs
+	 * representation.
+	 */
+	if (suite)
+		pr_info("%s %zd - %s\n",
+			kunit_status_to_string(is_ok),
+			test_number, description);
+	else
+		kunit_log(KERN_INFO, test, "\t%s %zd - %s",
+			  kunit_status_to_string(is_ok),
+			  test_number, description);
+}
+
+bool kunit_suite_has_succeeded(struct kunit_suite *suite)
+{
+	const struct kunit_case *test_case;
+
+	kunit_suite_for_each_test_case(suite, test_case) {
+		if (!test_case->success)
+			return false;
+	}
+
+	return true;
+}
+EXPORT_SYMBOL_GPL(kunit_suite_has_succeeded);
+
+static void kunit_print_subtest_end(struct kunit_suite *suite)
+{
+	static size_t kunit_suite_counter = 1;
+
+	kunit_print_ok_not_ok((void *)suite, false,
+			      kunit_suite_has_succeeded(suite),
+			      kunit_suite_counter++,
+			      suite->name);
+}
+
+unsigned int kunit_test_case_num(struct kunit_suite *suite,
+				 struct kunit_case *test_case)
+{
+	struct kunit_case *tc;
+	unsigned int i = 1;
+
+	kunit_suite_for_each_test_case(suite, tc) {
+		if (tc == test_case)
+			return i;
+		i++;
+	}
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_test_case_num);
+
+static void kunit_print_string_stream(struct kunit *test,
+				      struct string_stream *stream)
+{
+	struct string_stream_fragment *fragment;
+	char *buf;
+
+	if (string_stream_is_empty(stream))
+		return;
+
+	buf = string_stream_get_string(stream);
+	if (!buf) {
+		kunit_err(test,
+			  "Could not allocate buffer, dumping stream:\n");
+		list_for_each_entry(fragment, &stream->fragments, node) {
+			kunit_err(test, "%s", fragment->fragment);
+		}
+		kunit_err(test, "\n");
+	} else {
+		kunit_err(test, "%s", buf);
+		kunit_kfree(test, buf);
+	}
+}
+
+static void kunit_fail(struct kunit *test, struct kunit_assert *assert)
+{
+	struct string_stream *stream;
+
+	kunit_set_failure(test);
+
+	stream = alloc_string_stream(test, GFP_KERNEL);
+	if (!stream) {
+		WARN(true,
+		     "Could not allocate stream to print failed assertion in %s:%d\n",
+		     assert->file,
+		     assert->line);
+		return;
+	}
+
+	assert->format(assert, stream);
+
+	kunit_print_string_stream(test, stream);
+
+	WARN_ON(string_stream_destroy(stream));
+}
+
+static void __noreturn kunit_abort(struct kunit *test)
+{
+	kunit_try_catch_throw(&test->try_catch); /* Does not return. */
+
+	/*
+	 * Throw could not abort from test.
+	 *
+	 * XXX: we should never reach this line! As kunit_try_catch_throw is
+	 * marked __noreturn.
+	 */
+	WARN_ONCE(true, "Throw could not abort from test!\n");
+}
+
+void kunit_do_assertion(struct kunit *test,
+			struct kunit_assert *assert,
+			bool pass,
+			const char *fmt, ...)
+{
+	va_list args;
+
+	if (pass)
+		return;
+
+	va_start(args, fmt);
+
+	assert->message.fmt = fmt;
+	assert->message.va = &args;
+
+	kunit_fail(test, assert);
+
+	va_end(args);
+
+	if (assert->type == KUNIT_ASSERTION)
+		kunit_abort(test);
+}
+EXPORT_SYMBOL_GPL(kunit_do_assertion);
+
+void kunit_init_test(struct kunit *test, const char *name, char *log)
+{
+	spin_lock_init(&test->lock);
+	INIT_LIST_HEAD(&test->resources);
+	test->name = name;
+	test->log = log;
+	if (test->log)
+		test->log[0] = '\0';
+	test->success = true;
+}
+EXPORT_SYMBOL_GPL(kunit_init_test);
+
+/*
+ * Initializes and runs test case. Does not clean up or do post validations.
+ */
+static void kunit_run_case_internal(struct kunit *test,
+				    struct kunit_suite *suite,
+				    struct kunit_case *test_case)
+{
+	if (suite->init) {
+		int ret;
+
+		ret = suite->init(test);
+		if (ret) {
+			kunit_err(test, "failed to initialize: %d\n", ret);
+			kunit_set_failure(test);
+			return;
+		}
+	}
+
+	test_case->run_case(test);
+}
+
+static void kunit_case_internal_cleanup(struct kunit *test)
+{
+	kunit_cleanup(test);
+}
+
+/*
+ * Performs post validations and cleanup after a test case was run.
+ * XXX: Should ONLY BE CALLED AFTER kunit_run_case_internal!
+ */
+static void kunit_run_case_cleanup(struct kunit *test,
+				   struct kunit_suite *suite)
+{
+	if (suite->exit)
+		suite->exit(test);
+
+	kunit_case_internal_cleanup(test);
+}
+
+struct kunit_try_catch_context {
+	struct kunit *test;
+	struct kunit_suite *suite;
+	struct kunit_case *test_case;
+};
+
+static void kunit_try_run_case(void *data)
+{
+	struct kunit_try_catch_context *ctx = data;
+	struct kunit *test = ctx->test;
+	struct kunit_suite *suite = ctx->suite;
+	struct kunit_case *test_case = ctx->test_case;
+
+	/*
+	 * kunit_run_case_internal may encounter a fatal error; if it does,
+	 * abort will be called, this thread will exit, and finally the parent
+	 * thread will resume control and handle any necessary clean up.
+	 */
+	kunit_run_case_internal(test, suite, test_case);
+	/* This line may never be reached. */
+	kunit_run_case_cleanup(test, suite);
+}
+
+static void kunit_catch_run_case(void *data)
+{
+	struct kunit_try_catch_context *ctx = data;
+	struct kunit *test = ctx->test;
+	struct kunit_suite *suite = ctx->suite;
+	int try_exit_code = kunit_try_catch_get_result(&test->try_catch);
+
+	if (try_exit_code) {
+		kunit_set_failure(test);
+		/*
+		 * Test case could not finish, we have no idea what state it is
+		 * in, so don't do clean up.
+		 */
+		if (try_exit_code == -ETIMEDOUT) {
+			kunit_err(test, "test case timed out\n");
+		/*
+		 * Unknown internal error occurred preventing test case from
+		 * running, so there is nothing to clean up.
+		 */
+		} else {
+			kunit_err(test, "internal error occurred preventing test case from running: %d\n",
+				  try_exit_code);
+		}
+		return;
+	}
+
+	/*
+	 * Test case was run, but aborted. It is the test case's business as to
+	 * whether it failed or not, we just need to clean up.
+	 */
+	kunit_run_case_cleanup(test, suite);
+}
+
+/*
+ * Performs all logic to run a test case. It also catches most errors that
+ * occur in a test case and reports them as failures.
+ */
+static void kunit_run_case_catch_errors(struct kunit_suite *suite,
+					struct kunit_case *test_case)
+{
+	struct kunit_try_catch_context context;
+	struct kunit_try_catch *try_catch;
+	struct kunit test;
+
+	kunit_init_test(&test, test_case->name, test_case->log);
+	try_catch = &test.try_catch;
+
+	kunit_try_catch_init(try_catch,
+			     &test,
+			     kunit_try_run_case,
+			     kunit_catch_run_case);
+	context.test = &test;
+	context.suite = suite;
+	context.test_case = test_case;
+	kunit_try_catch_run(try_catch, &context);
+
+	test_case->success = test.success;
+
+	kunit_print_ok_not_ok(&test, true, test_case->success,
+			      kunit_test_case_num(suite, test_case),
+			      test_case->name);
+}
+
+int kunit_run_tests(struct kunit_suite *suite)
+{
+	struct kunit_case *test_case;
+
+	kunit_print_subtest_start(suite);
+
+	kunit_suite_for_each_test_case(suite, test_case)
+		kunit_run_case_catch_errors(suite, test_case);
+
+	kunit_print_subtest_end(suite);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_run_tests);
+
+static void kunit_init_suite(struct kunit_suite *suite)
+{
+	kunit_debugfs_create_suite(suite);
+}
+
+int __kunit_test_suites_init(struct kunit_suite **suites)
+{
+	unsigned int i;
+
+	for (i = 0; suites[i] != NULL; i++) {
+		kunit_init_suite(suites[i]);
+		kunit_run_tests(suites[i]);
+	}
+	return 0;
+}
+EXPORT_SYMBOL_GPL(__kunit_test_suites_init);
+
+static void kunit_exit_suite(struct kunit_suite *suite)
+{
+	kunit_debugfs_destroy_suite(suite);
+}
+
+void __kunit_test_suites_exit(struct kunit_suite **suites)
+{
+	unsigned int i;
+
+	for (i = 0; suites[i] != NULL; i++)
+		kunit_exit_suite(suites[i]);
+}
+EXPORT_SYMBOL_GPL(__kunit_test_suites_exit);
+
+struct kunit_resource *kunit_alloc_and_get_resource(struct kunit *test,
+						    kunit_resource_init_t init,
+						    kunit_resource_free_t free,
+						    gfp_t internal_gfp,
+						    void *context)
+{
+	struct kunit_resource *res;
+	int ret;
+
+	res = kzalloc(sizeof(*res), internal_gfp);
+	if (!res)
+		return NULL;
+
+	ret = init(res, context);
+	if (ret)
+		return NULL;
+
+	res->free = free;
+	spin_lock(&test->lock);
+	list_add_tail(&res->node, &test->resources);
+	spin_unlock(&test->lock);
+
+	return res;
+}
+EXPORT_SYMBOL_GPL(kunit_alloc_and_get_resource);
+
+static void kunit_resource_free(struct kunit *test, struct kunit_resource *res)
+{
+	res->free(res);
+	kfree(res);
+}
+
+static struct kunit_resource *kunit_resource_find(struct kunit *test,
+						  kunit_resource_match_t match,
+						  kunit_resource_free_t free,
+						  void *match_data)
+{
+	struct kunit_resource *resource;
+
+	lockdep_assert_held(&test->lock);
+
+	list_for_each_entry_reverse(resource, &test->resources, node) {
+		if (resource->free != free)
+			continue;
+		if (match(test, resource->allocation, match_data))
+			return resource;
+	}
+
+	return NULL;
+}
+
+static struct kunit_resource *kunit_resource_remove(
+		struct kunit *test,
+		kunit_resource_match_t match,
+		kunit_resource_free_t free,
+		void *match_data)
+{
+	struct kunit_resource *resource;
+
+	spin_lock(&test->lock);
+	resource = kunit_resource_find(test, match, free, match_data);
+	if (resource)
+		list_del(&resource->node);
+	spin_unlock(&test->lock);
+
+	return resource;
+}
+
+int kunit_resource_destroy(struct kunit *test,
+			   kunit_resource_match_t match,
+			   kunit_resource_free_t free,
+			   void *match_data)
+{
+	struct kunit_resource *resource;
+
+	resource = kunit_resource_remove(test, match, free, match_data);
+
+	if (!resource)
+		return -ENOENT;
+
+	kunit_resource_free(test, resource);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(kunit_resource_destroy);
+
+struct kunit_kmalloc_params {
+	size_t size;
+	gfp_t gfp;
+};
+
+static int kunit_kmalloc_init(struct kunit_resource *res, void *context)
+{
+	struct kunit_kmalloc_params *params = context;
+
+	res->allocation = kmalloc(params->size, params->gfp);
+	if (!res->allocation)
+		return -ENOMEM;
+
+	return 0;
+}
+
+static void kunit_kmalloc_free(struct kunit_resource *res)
+{
+	kfree(res->allocation);
+}
+
+void *kunit_kmalloc(struct kunit *test, size_t size, gfp_t gfp)
+{
+	struct kunit_kmalloc_params params = {
+		.size = size,
+		.gfp = gfp
+	};
+
+	return kunit_alloc_resource(test,
+				    kunit_kmalloc_init,
+				    kunit_kmalloc_free,
+				    gfp,
+				    &params);
+}
+EXPORT_SYMBOL_GPL(kunit_kmalloc);
+
+void kunit_kfree(struct kunit *test, const void *ptr)
+{
+	int rc;
+
+	rc = kunit_resource_destroy(test,
+				    kunit_resource_instance_match,
+				    kunit_kmalloc_free,
+				    (void *)ptr);
+
+	WARN_ON(rc);
+}
+EXPORT_SYMBOL_GPL(kunit_kfree);
+
+void kunit_cleanup(struct kunit *test)
+{
+	struct kunit_resource *resource;
+
+	/*
+	 * test->resources is a stack - each allocation must be freed in the
+	 * reverse order from which it was added since one resource may depend
+	 * on another for its entire lifetime.
+	 * Also, we cannot use the normal list_for_each constructs, even the
+	 * safe ones because *arbitrary* nodes may be deleted when
+	 * kunit_resource_free is called; the list_for_each_safe variants only
+	 * protect against the current node being deleted, not the next.
+	 */
+	while (true) {
+		spin_lock(&test->lock);
+		if (list_empty(&test->resources)) {
+			spin_unlock(&test->lock);
+			break;
+		}
+		resource = list_last_entry(&test->resources,
+					   struct kunit_resource,
+					   node);
+		list_del(&resource->node);
+		spin_unlock(&test->lock);
+
+		kunit_resource_free(test, resource);
+	}
+}
+EXPORT_SYMBOL_GPL(kunit_cleanup);
+
+static int __init kunit_init(void)
+{
+	kunit_debugfs_init();
+
+	return 0;
+}
+late_initcall(kunit_init);
+
+static void __exit kunit_exit(void)
+{
+	kunit_debugfs_cleanup();
+}
+module_exit(kunit_exit);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/kunit/try-catch-impl.h b/lib/kunit/try-catch-impl.h
new file mode 100644
index 0000000..203ba6a
--- /dev/null
+++ b/lib/kunit/try-catch-impl.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Internal kunit try catch implementation to be shared with tests.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#ifndef _KUNIT_TRY_CATCH_IMPL_H
+#define _KUNIT_TRY_CATCH_IMPL_H
+
+#include <kunit/try-catch.h>
+#include <linux/types.h>
+
+struct kunit;
+
+static inline void kunit_try_catch_init(struct kunit_try_catch *try_catch,
+					struct kunit *test,
+					kunit_try_catch_func_t try,
+					kunit_try_catch_func_t catch)
+{
+	try_catch->test = test;
+	try_catch->try = try;
+	try_catch->catch = catch;
+}
+
+#endif /* _KUNIT_TRY_CATCH_IMPL_H */
diff --git a/lib/kunit/try-catch.c b/lib/kunit/try-catch.c
new file mode 100644
index 0000000..0dd434e
--- /dev/null
+++ b/lib/kunit/try-catch.c
@@ -0,0 +1,97 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * An API to allow a function, that may fail, to be executed, and recover in a
+ * controlled manner.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: Brendan Higgins <brendanhiggins@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/completion.h>
+#include <linux/kernel.h>
+#include <linux/kthread.h>
+
+#include "try-catch-impl.h"
+
+void __noreturn kunit_try_catch_throw(struct kunit_try_catch *try_catch)
+{
+	try_catch->try_result = -EFAULT;
+	complete_and_exit(try_catch->try_completion, -EFAULT);
+}
+EXPORT_SYMBOL_GPL(kunit_try_catch_throw);
+
+static int kunit_generic_run_threadfn_adapter(void *data)
+{
+	struct kunit_try_catch *try_catch = data;
+
+	try_catch->try(try_catch->context);
+
+	complete_and_exit(try_catch->try_completion, 0);
+}
+
+static unsigned long kunit_test_timeout(void)
+{
+	/*
+	 * TODO(brendanhiggins@google.com): We should probably have some type of
+	 * variable timeout here. The only question is what that timeout value
+	 * should be.
+	 *
+	 * The intention has always been, at some point, to be able to label
+	 * tests with some type of size bucket (unit/small, integration/medium,
+	 * large/system/end-to-end, etc), where each size bucket would get a
+	 * default timeout value kind of like what Bazel does:
+	 * https://docs.bazel.build/versions/master/be/common-definitions.html#test.size
+	 * There is still some debate to be had on exactly how we do this. (For
+	 * one, we probably want to have some sort of test runner level
+	 * timeout.)
+	 *
+	 * For more background on this topic, see:
+	 * https://mike-bland.com/2011/11/01/small-medium-large.html
+	 *
+	 * If tests timeout due to exceeding sysctl_hung_task_timeout_secs,
+	 * the task will be killed and an oops generated.
+	 */
+	return 300 * MSEC_PER_SEC; /* 5 min */
+}
+
+void kunit_try_catch_run(struct kunit_try_catch *try_catch, void *context)
+{
+	DECLARE_COMPLETION_ONSTACK(try_completion);
+	struct kunit *test = try_catch->test;
+	struct task_struct *task_struct;
+	int exit_code, time_remaining;
+
+	try_catch->context = context;
+	try_catch->try_completion = &try_completion;
+	try_catch->try_result = 0;
+	task_struct = kthread_run(kunit_generic_run_threadfn_adapter,
+				  try_catch,
+				  "kunit_try_catch_thread");
+	if (IS_ERR(task_struct)) {
+		try_catch->catch(try_catch->context);
+		return;
+	}
+
+	time_remaining = wait_for_completion_timeout(&try_completion,
+						     kunit_test_timeout());
+	if (time_remaining == 0) {
+		kunit_err(test, "try timed out\n");
+		try_catch->try_result = -ETIMEDOUT;
+	}
+
+	exit_code = try_catch->try_result;
+
+	if (!exit_code)
+		return;
+
+	if (exit_code == -EFAULT)
+		try_catch->try_result = 0;
+	else if (exit_code == -EINTR)
+		kunit_err(test, "wake_up_process() was never called\n");
+	else if (exit_code)
+		kunit_err(test, "Unknown error: %d\n", exit_code);
+
+	try_catch->catch(try_catch->context);
+}
+EXPORT_SYMBOL_GPL(kunit_try_catch_run);
diff --git a/lib/list-test.c b/lib/list-test.c
new file mode 100644
index 0000000..76babb1
--- /dev/null
+++ b/lib/list-test.c
@@ -0,0 +1,748 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KUnit test for the Kernel Linked-list structures.
+ *
+ * Copyright (C) 2019, Google LLC.
+ * Author: David Gow <davidgow@google.com>
+ */
+#include <kunit/test.h>
+
+#include <linux/list.h>
+
+struct list_test_struct {
+	int data;
+	struct list_head list;
+};
+
+static void list_test_list_init(struct kunit *test)
+{
+	/* Test the different ways of initialising a list. */
+	struct list_head list1 = LIST_HEAD_INIT(list1);
+	struct list_head list2;
+	LIST_HEAD(list3);
+	struct list_head *list4;
+	struct list_head *list5;
+
+	INIT_LIST_HEAD(&list2);
+
+	list4 = kzalloc(sizeof(*list4), GFP_KERNEL | __GFP_NOFAIL);
+	INIT_LIST_HEAD(list4);
+
+	list5 = kmalloc(sizeof(*list5), GFP_KERNEL | __GFP_NOFAIL);
+	memset(list5, 0xFF, sizeof(*list5));
+	INIT_LIST_HEAD(list5);
+
+	/* list_empty_careful() checks both next and prev. */
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list3));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(list4));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(list5));
+
+	kfree(list4);
+	kfree(list5);
+}
+
+static void list_test_list_add(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add(&a, &list);
+	list_add(&b, &list);
+
+	/* should be [list] -> b -> a */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, b.next, &a);
+}
+
+static void list_test_list_add_tail(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* should be [list] -> a -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a);
+	KUNIT_EXPECT_PTR_EQ(test, a.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, a.next, &b);
+}
+
+static void list_test_list_del(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_del(&a);
+
+	/* now: [list] -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+}
+
+static void list_test_list_replace(struct kunit *test)
+{
+	struct list_head a_old, a_new, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a_old, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a_old -> b */
+	list_replace(&a_old, &a_new);
+
+	/* now: [list] -> a_new -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a_new);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &a_new);
+}
+
+static void list_test_list_replace_init(struct kunit *test)
+{
+	struct list_head a_old, a_new, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a_old, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a_old -> b */
+	list_replace_init(&a_old, &a_new);
+
+	/* now: [list] -> a_new -> b */
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &a_new);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &a_new);
+
+	/* check a_old is empty (initialized) */
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&a_old));
+}
+
+static void list_test_list_swap(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_swap(&a, &b);
+
+	/* after: [list] -> b -> a */
+	KUNIT_EXPECT_PTR_EQ(test, &b, list.next);
+	KUNIT_EXPECT_PTR_EQ(test, &a, list.prev);
+
+	KUNIT_EXPECT_PTR_EQ(test, &a, b.next);
+	KUNIT_EXPECT_PTR_EQ(test, &list, b.prev);
+
+	KUNIT_EXPECT_PTR_EQ(test, &list, a.next);
+	KUNIT_EXPECT_PTR_EQ(test, &b, a.prev);
+}
+
+static void list_test_list_del_init(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_del_init(&a);
+	/* after: [list] -> b, a initialised */
+
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&a));
+}
+
+static void list_test_list_move(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+	list_add_tail(&b, &list2);
+
+	/* before: [list1] -> a, [list2] -> b */
+	list_move(&a, &list2);
+	/* after: [list1] empty, [list2] -> a -> b */
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&list1));
+
+	KUNIT_EXPECT_PTR_EQ(test, &a, list2.next);
+	KUNIT_EXPECT_PTR_EQ(test, &b, a.next);
+}
+
+static void list_test_list_move_tail(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+	list_add_tail(&b, &list2);
+
+	/* before: [list1] -> a, [list2] -> b */
+	list_move_tail(&a, &list2);
+	/* after: [list1] empty, [list2] -> b -> a */
+
+	KUNIT_EXPECT_TRUE(test, list_empty(&list1));
+
+	KUNIT_EXPECT_PTR_EQ(test, &b, list2.next);
+	KUNIT_EXPECT_PTR_EQ(test, &a, b.next);
+}
+
+static void list_test_list_bulk_move_tail(struct kunit *test)
+{
+	struct list_head a, b, c, d, x, y;
+	struct list_head *list1_values[] = { &x, &b, &c, &y };
+	struct list_head *list2_values[] = { &a, &d };
+	struct list_head *ptr;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&x, &list1);
+	list_add_tail(&y, &list1);
+
+	list_add_tail(&a, &list2);
+	list_add_tail(&b, &list2);
+	list_add_tail(&c, &list2);
+	list_add_tail(&d, &list2);
+
+	/* before: [list1] -> x -> y, [list2] -> a -> b -> c -> d */
+	list_bulk_move_tail(&y, &b, &c);
+	/* after: [list1] -> x -> b -> c -> y, [list2] -> a -> d */
+
+	list_for_each(ptr, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list1_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 4);
+	i = 0;
+	list_for_each(ptr, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list2_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 2);
+}
+
+static void list_test_list_is_first(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	KUNIT_EXPECT_TRUE(test, list_is_first(&a, &list));
+	KUNIT_EXPECT_FALSE(test, list_is_first(&b, &list));
+}
+
+static void list_test_list_is_last(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	KUNIT_EXPECT_FALSE(test, list_is_last(&a, &list));
+	KUNIT_EXPECT_TRUE(test, list_is_last(&b, &list));
+}
+
+static void list_test_list_empty(struct kunit *test)
+{
+	struct list_head a;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+
+	KUNIT_EXPECT_FALSE(test, list_empty(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty(&list2));
+}
+
+static void list_test_list_empty_careful(struct kunit *test)
+{
+	/* This test doesn't check correctness under concurrent access */
+	struct list_head a;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+
+	list_add_tail(&a, &list1);
+
+	KUNIT_EXPECT_FALSE(test, list_empty_careful(&list1));
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_rotate_left(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+
+	/* before: [list] -> a -> b */
+	list_rotate_left(&list);
+	/* after: [list] -> b -> a */
+
+	KUNIT_EXPECT_PTR_EQ(test, list.next, &b);
+	KUNIT_EXPECT_PTR_EQ(test, b.prev, &list);
+	KUNIT_EXPECT_PTR_EQ(test, b.next, &a);
+}
+
+static void list_test_list_rotate_to_front(struct kunit *test)
+{
+	struct list_head a, b, c, d;
+	struct list_head *list_values[] = { &c, &d, &a, &b };
+	struct list_head *ptr;
+	LIST_HEAD(list);
+	int i = 0;
+
+	list_add_tail(&a, &list);
+	list_add_tail(&b, &list);
+	list_add_tail(&c, &list);
+	list_add_tail(&d, &list);
+
+	/* before: [list] -> a -> b -> c -> d */
+	list_rotate_to_front(&c, &list);
+	/* after: [list] -> c -> d -> a -> b */
+
+	list_for_each(ptr, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, ptr, list_values[i]);
+		i++;
+	}
+	KUNIT_EXPECT_EQ(test, i, 4);
+}
+
+static void list_test_list_is_singular(struct kunit *test)
+{
+	struct list_head a, b;
+	LIST_HEAD(list);
+
+	/* [list] empty */
+	KUNIT_EXPECT_FALSE(test, list_is_singular(&list));
+
+	list_add_tail(&a, &list);
+
+	/* [list] -> a */
+	KUNIT_EXPECT_TRUE(test, list_is_singular(&list));
+
+	list_add_tail(&b, &list);
+
+	/* [list] -> a -> b */
+	KUNIT_EXPECT_FALSE(test, list_is_singular(&list));
+}
+
+static void list_test_list_cut_position(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list1);
+
+	/* before: [list1] -> entries[0] -> entries[1] -> entries[2] */
+	list_cut_position(&list2, &list1, &entries[1]);
+	/* after: [list2] -> entries[0] -> entries[1], [list1] -> entries[2] */
+
+	list_for_each(cur, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 2);
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+}
+
+static void list_test_list_cut_before(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list1);
+
+	/* before: [list1] -> entries[0] -> entries[1] -> entries[2] */
+	list_cut_before(&list2, &list1, &entries[1]);
+	/* after: [list2] -> entries[0], [list1] -> entries[1] -> entries[2] */
+
+	list_for_each(cur, &list2) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 1);
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+}
+
+static void list_test_list_splice(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice(&list2, &entries[1]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] uninit */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_splice_tail(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_tail(&list2, &entries[4]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] uninit */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_splice_init(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_init(&list2, &entries[1]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] empty */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_splice_tail_init(struct kunit *test)
+{
+	struct list_head entries[5], *cur;
+	LIST_HEAD(list1);
+	LIST_HEAD(list2);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list1);
+	list_add_tail(&entries[1], &list1);
+	list_add_tail(&entries[2], &list2);
+	list_add_tail(&entries[3], &list2);
+	list_add_tail(&entries[4], &list1);
+
+	/* before: [list1]->e[0]->e[1]->e[4], [list2]->e[2]->e[3] */
+	list_splice_tail_init(&list2, &entries[4]);
+	/* after: [list1]->e[0]->e[1]->e[2]->e[3]->e[4], [list2] empty */
+
+	list_for_each(cur, &list1) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+
+	KUNIT_EXPECT_TRUE(test, list_empty_careful(&list2));
+}
+
+static void list_test_list_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct;
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct, list_entry(&(test_struct.list),
+				struct list_test_struct, list));
+}
+
+static void list_test_list_first_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1, list_first_entry(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_last_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct2, list_last_entry(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_first_entry_or_null(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	KUNIT_EXPECT_FALSE(test, list_first_entry_or_null(&list,
+				struct list_test_struct, list));
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1,
+			list_first_entry_or_null(&list,
+				struct list_test_struct, list));
+}
+
+static void list_test_list_next_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct2, list_next_entry(&test_struct1,
+				list));
+}
+
+static void list_test_list_prev_entry(struct kunit *test)
+{
+	struct list_test_struct test_struct1, test_struct2;
+	LIST_HEAD(list);
+
+	list_add_tail(&test_struct1.list, &list);
+	list_add_tail(&test_struct2.list, &list);
+
+
+	KUNIT_EXPECT_PTR_EQ(test, &test_struct1, list_prev_entry(&test_struct2,
+				list));
+}
+
+static void list_test_list_for_each(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list);
+	int i = 0;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each(cur, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 3);
+}
+
+static void list_test_list_for_each_prev(struct kunit *test)
+{
+	struct list_head entries[3], *cur;
+	LIST_HEAD(list);
+	int i = 2;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_prev(cur, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+}
+
+static void list_test_list_for_each_safe(struct kunit *test)
+{
+	struct list_head entries[3], *cur, *n;
+	LIST_HEAD(list);
+	int i = 0;
+
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_safe(cur, n, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		list_del(&entries[i]);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 3);
+	KUNIT_EXPECT_TRUE(test, list_empty(&list));
+}
+
+static void list_test_list_for_each_prev_safe(struct kunit *test)
+{
+	struct list_head entries[3], *cur, *n;
+	LIST_HEAD(list);
+	int i = 2;
+
+	list_add_tail(&entries[0], &list);
+	list_add_tail(&entries[1], &list);
+	list_add_tail(&entries[2], &list);
+
+	list_for_each_prev_safe(cur, n, &list) {
+		KUNIT_EXPECT_PTR_EQ(test, cur, &entries[i]);
+		list_del(&entries[i]);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+	KUNIT_EXPECT_TRUE(test, list_empty(&list));
+}
+
+static void list_test_list_for_each_entry(struct kunit *test)
+{
+	struct list_test_struct entries[5], *cur;
+	static LIST_HEAD(list);
+	int i = 0;
+
+	for (i = 0; i < 5; ++i) {
+		entries[i].data = i;
+		list_add_tail(&entries[i].list, &list);
+	}
+
+	i = 0;
+
+	list_for_each_entry(cur, &list, list) {
+		KUNIT_EXPECT_EQ(test, cur->data, i);
+		i++;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, 5);
+}
+
+static void list_test_list_for_each_entry_reverse(struct kunit *test)
+{
+	struct list_test_struct entries[5], *cur;
+	static LIST_HEAD(list);
+	int i = 0;
+
+	for (i = 0; i < 5; ++i) {
+		entries[i].data = i;
+		list_add_tail(&entries[i].list, &list);
+	}
+
+	i = 4;
+
+	list_for_each_entry_reverse(cur, &list, list) {
+		KUNIT_EXPECT_EQ(test, cur->data, i);
+		i--;
+	}
+
+	KUNIT_EXPECT_EQ(test, i, -1);
+}
+
+static struct kunit_case list_test_cases[] = {
+	KUNIT_CASE(list_test_list_init),
+	KUNIT_CASE(list_test_list_add),
+	KUNIT_CASE(list_test_list_add_tail),
+	KUNIT_CASE(list_test_list_del),
+	KUNIT_CASE(list_test_list_replace),
+	KUNIT_CASE(list_test_list_replace_init),
+	KUNIT_CASE(list_test_list_swap),
+	KUNIT_CASE(list_test_list_del_init),
+	KUNIT_CASE(list_test_list_move),
+	KUNIT_CASE(list_test_list_move_tail),
+	KUNIT_CASE(list_test_list_bulk_move_tail),
+	KUNIT_CASE(list_test_list_is_first),
+	KUNIT_CASE(list_test_list_is_last),
+	KUNIT_CASE(list_test_list_empty),
+	KUNIT_CASE(list_test_list_empty_careful),
+	KUNIT_CASE(list_test_list_rotate_left),
+	KUNIT_CASE(list_test_list_rotate_to_front),
+	KUNIT_CASE(list_test_list_is_singular),
+	KUNIT_CASE(list_test_list_cut_position),
+	KUNIT_CASE(list_test_list_cut_before),
+	KUNIT_CASE(list_test_list_splice),
+	KUNIT_CASE(list_test_list_splice_tail),
+	KUNIT_CASE(list_test_list_splice_init),
+	KUNIT_CASE(list_test_list_splice_tail_init),
+	KUNIT_CASE(list_test_list_entry),
+	KUNIT_CASE(list_test_list_first_entry),
+	KUNIT_CASE(list_test_list_last_entry),
+	KUNIT_CASE(list_test_list_first_entry_or_null),
+	KUNIT_CASE(list_test_list_next_entry),
+	KUNIT_CASE(list_test_list_prev_entry),
+	KUNIT_CASE(list_test_list_for_each),
+	KUNIT_CASE(list_test_list_for_each_prev),
+	KUNIT_CASE(list_test_list_for_each_safe),
+	KUNIT_CASE(list_test_list_for_each_prev_safe),
+	KUNIT_CASE(list_test_list_for_each_entry),
+	KUNIT_CASE(list_test_list_for_each_entry_reverse),
+	{},
+};
+
+static struct kunit_suite list_test_module = {
+	.name = "list-kunit-test",
+	.test_cases = list_test_cases,
+};
+
+kunit_test_suites(&list_test_module);
+
+MODULE_LICENSE("GPL v2");
diff --git a/lib/list_sort.c b/lib/list_sort.c
index 52f0c25..b14accf 100644
--- a/lib/list_sort.c
+++ b/lib/list_sort.c
@@ -8,7 +8,7 @@
 #include <linux/list.h>
 
 typedef int __attribute__((nonnull(2,3))) (*cmp_func)(void *,
-		struct list_head const *, struct list_head const *);
+		struct list_head *, struct list_head *);
 
 /*
  * Returns a list organized in an intermediate format suited
@@ -227,7 +227,7 @@
 		if (likely(bits)) {
 			struct list_head *a = *tail, *b = a->prev;
 
-			a = merge(priv, (cmp_func)cmp, b, a);
+			a = merge(priv, cmp, b, a);
 			/* Install the merged result in place of the inputs */
 			a->prev = b->prev;
 			*tail = a;
@@ -249,10 +249,10 @@
 
 		if (!next)
 			break;
-		list = merge(priv, (cmp_func)cmp, pending, list);
+		list = merge(priv, cmp, pending, list);
 		pending = next;
 	}
 	/* The final merge, rebuilding prev links */
-	merge_final(priv, (cmp_func)cmp, head, pending, list);
+	merge_final(priv, cmp, head, pending, list);
 }
 EXPORT_SYMBOL(list_sort);
diff --git a/lib/once.c b/lib/once.c
index 59149bf..8b7d623 100644
--- a/lib/once.c
+++ b/lib/once.c
@@ -3,12 +3,10 @@
 #include <linux/spinlock.h>
 #include <linux/once.h>
 #include <linux/random.h>
-#include <linux/module.h>
 
 struct once_work {
 	struct work_struct work;
 	struct static_key_true *key;
-	struct module *module;
 };
 
 static void once_deferred(struct work_struct *w)
@@ -18,11 +16,10 @@
 	work = container_of(w, struct once_work, work);
 	BUG_ON(!static_key_enabled(work->key));
 	static_branch_disable(work->key);
-	module_put(work->module);
 	kfree(work);
 }
 
-static void once_disable_jump(struct static_key_true *key, struct module *mod)
+static void once_disable_jump(struct static_key_true *key)
 {
 	struct once_work *w;
 
@@ -32,8 +29,6 @@
 
 	INIT_WORK(&w->work, once_deferred);
 	w->key = key;
-	w->module = mod;
-	__module_get(mod);
 	schedule_work(&w->work);
 }
 
@@ -58,11 +53,11 @@
 EXPORT_SYMBOL(__do_once_start);
 
 void __do_once_done(bool *done, struct static_key_true *once_key,
-		    unsigned long *flags, struct module *mod)
+		    unsigned long *flags)
 	__releases(once_lock)
 {
 	*done = true;
 	spin_unlock_irqrestore(&once_lock, *flags);
-	once_disable_jump(once_key, mod);
+	once_disable_jump(once_key);
 }
 EXPORT_SYMBOL(__do_once_done);
diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c
index 51a98f7..1ee9d95 100644
--- a/lib/test_bitmap.c
+++ b/lib/test_bitmap.c
@@ -16,8 +16,7 @@
 
 #include "../tools/testing/selftests/kselftest_module.h"
 
-static unsigned total_tests __initdata;
-static unsigned failed_tests __initdata;
+KSTM_MODULE_GLOBALS();
 
 static char pbl_buffer[PAGE_SIZE] __initdata;
 
diff --git a/lib/test_printf.c b/lib/test_printf.c
index d4b711b..0a3153f 100644
--- a/lib/test_printf.c
+++ b/lib/test_printf.c
@@ -28,11 +28,13 @@
 #define PAD_SIZE 16
 #define FILL_CHAR '$'
 
-static unsigned total_tests __initdata;
-static unsigned failed_tests __initdata;
+KSTM_MODULE_GLOBALS();
+
 static char *test_buffer __initdata;
 static char *alloced_buffer __initdata;
 
+extern bool no_hash_pointers;
+
 static int __printf(4, 0) __init
 do_test(int bufsize, const char *expect, int elen,
 	const char *fmt, va_list ap)
@@ -299,6 +301,12 @@
 {
 	int err;
 
+	if (no_hash_pointers) {
+		pr_warn("skipping plain 'p' tests");
+		skipped_tests += 2;
+		return;
+	}
+
 	err = plain_hash();
 	if (err) {
 		pr_warn("plain 'p' does not appear to be hashed\n");
diff --git a/lib/test_stackinit.c b/lib/test_stackinit.c
index 35d398b..16b1d3a 100644
--- a/lib/test_stackinit.c
+++ b/lib/test_stackinit.c
@@ -91,8 +91,9 @@
  * @var_type: type to be tested for zeroing initialization
  * @which: is this a SCALAR, STRING, or STRUCT type?
  * @init_level: what kind of initialization is performed
+ * @xfail: is this test expected to fail?
  */
-#define DEFINE_TEST_DRIVER(name, var_type, which)		\
+#define DEFINE_TEST_DRIVER(name, var_type, which, xfail)	\
 /* Returns 0 on success, 1 on failure. */			\
 static noinline __init int test_ ## name (void)			\
 {								\
@@ -138,13 +139,14 @@
 	for (sum = 0, i = 0; i < target_size; i++)		\
 		sum += (check_buf[i] == 0xFF);			\
 								\
-	if (sum == 0)						\
+	if (sum == 0) {						\
 		pr_info(#name " ok\n");				\
-	else							\
-		pr_warn(#name " FAIL (uninit bytes: %d)\n",	\
-			sum);					\
-								\
-	return (sum != 0);					\
+		return 0;					\
+	} else {						\
+		pr_warn(#name " %sFAIL (uninit bytes: %d)\n",	\
+			(xfail) ? "X" : "", sum);		\
+		return (xfail) ? 0 : 1;				\
+	}							\
 }
 #define DEFINE_TEST(name, var_type, which, init_level)		\
 /* no-op to force compiler into ignoring "uninitialized" vars */\
@@ -188,7 +190,7 @@
 								\
 	return (int)buf[0] | (int)buf[sizeof(buf) - 1];		\
 }								\
-DEFINE_TEST_DRIVER(name, var_type, which)
+DEFINE_TEST_DRIVER(name, var_type, which, 0)
 
 /* Structure with no padding. */
 struct test_packed {
@@ -320,8 +322,14 @@
 	return __leaf_switch_none(2, fill);
 }
 
-DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR);
-DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR);
+/*
+ * These are expected to fail for most configurations because neither
+ * GCC nor Clang have a way to perform initialization of variables in
+ * non-code areas (i.e. in a switch statement before the first "case").
+ * https://bugs.llvm.org/show_bug.cgi?id=44916
+ */
+DEFINE_TEST_DRIVER(switch_1_none, uint64_t, SCALAR, 1);
+DEFINE_TEST_DRIVER(switch_2_none, uint64_t, SCALAR, 1);
 
 static int __init test_stackinit_init(void)
 {
diff --git a/lib/ubsan.c b/lib/ubsan.c
index f007a40..a205440 100644
--- a/lib/ubsan.c
+++ b/lib/ubsan.c
@@ -45,13 +45,6 @@
 	return test_and_set_bit(REPORTED_BIT, &location->reported);
 }
 
-static void print_source_location(const char *prefix,
-				struct source_location *loc)
-{
-	pr_err("%s %s:%d:%d\n", prefix, loc->file_name,
-		loc->line & LINE_MASK, loc->column & COLUMN_MASK);
-}
-
 static bool suppress_report(struct source_location *loc)
 {
 	return current->in_ubsan || was_reported(loc);
@@ -140,13 +133,14 @@
 	}
 }
 
-static void ubsan_prologue(struct source_location *location)
+static void ubsan_prologue(struct source_location *loc, const char *reason)
 {
 	current->in_ubsan++;
 
 	pr_err("========================================"
 		"========================================\n");
-	print_source_location("UBSAN: Undefined behaviour in", location);
+	pr_err("UBSAN: %s in %s:%d:%d\n", reason, loc->file_name,
+		loc->line & LINE_MASK, loc->column & COLUMN_MASK);
 }
 
 static void ubsan_epilogue(void)
@@ -156,6 +150,17 @@
 		"========================================\n");
 
 	current->in_ubsan--;
+
+	if (panic_on_warn) {
+		/*
+		 * This thread may hit another WARN() in the panic path.
+		 * Resetting this prevents additional WARN() from panicking the
+		 * system on this thread.  Other threads are blocked by the
+		 * panic_mutex in panic().
+		 */
+		panic_on_warn = 0;
+		panic("panic_on_warn set ...\n");
+	}
 }
 
 static void handle_overflow(struct overflow_data *data, void *lhs,
@@ -169,12 +174,12 @@
 	if (suppress_report(&data->location))
 		return;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, type_is_signed(type) ?
+			"signed-integer-overflow" :
+			"unsigned-integer-overflow");
 
 	val_to_string(lhs_val_str, sizeof(lhs_val_str), type, lhs);
 	val_to_string(rhs_val_str, sizeof(rhs_val_str), type, rhs);
-	pr_err("%s integer overflow:\n",
-		type_is_signed(type) ? "signed" : "unsigned");
 	pr_err("%s %c %s cannot be represented in type %s\n",
 		lhs_val_str,
 		op,
@@ -214,7 +219,7 @@
 	if (suppress_report(&data->location))
 		return;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "negation-overflow");
 
 	val_to_string(old_val_str, sizeof(old_val_str), data->type, old_val);
 
@@ -234,7 +239,7 @@
 	if (suppress_report(&data->location))
 		return;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "division-overflow");
 
 	val_to_string(rhs_val_str, sizeof(rhs_val_str), data->type, rhs);
 
@@ -253,7 +258,7 @@
 	if (suppress_report(data->location))
 		return;
 
-	ubsan_prologue(data->location);
+	ubsan_prologue(data->location, "null-ptr-deref");
 
 	pr_err("%s null pointer of type %s\n",
 		type_check_kinds[data->type_check_kind],
@@ -268,7 +273,7 @@
 	if (suppress_report(data->location))
 		return;
 
-	ubsan_prologue(data->location);
+	ubsan_prologue(data->location, "misaligned-access");
 
 	pr_err("%s misaligned address %p for type %s\n",
 		type_check_kinds[data->type_check_kind],
@@ -284,7 +289,7 @@
 	if (suppress_report(data->location))
 		return;
 
-	ubsan_prologue(data->location);
+	ubsan_prologue(data->location, "object-size-mismatch");
 	pr_err("%s address %p with insufficient space\n",
 		type_check_kinds[data->type_check_kind],
 		(void *) ptr);
@@ -343,7 +348,7 @@
 	if (suppress_report(&data->location))
 		return;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "array-index-out-of-bounds");
 
 	val_to_string(index_str, sizeof(index_str), data->index_type, index);
 	pr_err("index %s is out of range for type %s\n", index_str,
@@ -364,7 +369,7 @@
 	if (suppress_report(&data->location))
 		goto out;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "shift-out-of-bounds");
 
 	val_to_string(rhs_str, sizeof(rhs_str), rhs_type, rhs);
 	val_to_string(lhs_str, sizeof(lhs_str), lhs_type, lhs);
@@ -396,7 +401,7 @@
 
 void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
 {
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "unreachable");
 	pr_err("calling __builtin_unreachable()\n");
 	ubsan_epilogue();
 	panic("can't return from __builtin_unreachable()");
@@ -411,7 +416,7 @@
 	if (suppress_report(&data->location))
 		return;
 
-	ubsan_prologue(&data->location);
+	ubsan_prologue(&data->location, "invalid-load");
 
 	val_to_string(val_str, sizeof(val_str), data->type, val);
 
diff --git a/lib/vdso/Kconfig b/lib/vdso/Kconfig
index 9fe698f..7f74252 100644
--- a/lib/vdso/Kconfig
+++ b/lib/vdso/Kconfig
@@ -3,15 +3,16 @@
 config HAVE_GENERIC_VDSO
 	bool
 
-if HAVE_GENERIC_VDSO
-
 config GENERIC_GETTIMEOFDAY
 	bool
+	depends on HAVE_GENERIC_VDSO || ARM
 	help
 	  This is a generic implementation of gettimeofday vdso.
 	  Each architecture that enables this feature has to
 	  provide the fallback implementation.
 
+if HAVE_GENERIC_VDSO
+
 config GENERIC_VDSO_32
 	bool
 	depends on GENERIC_GETTIMEOFDAY && !64BIT
diff --git a/lib/vdso/gettimeofday.c b/lib/vdso/gettimeofday.c
index 45f57fd..4f82b7a 100644
--- a/lib/vdso/gettimeofday.c
+++ b/lib/vdso/gettimeofday.c
@@ -2,30 +2,9 @@
 /*
  * Generic userspace implementations of gettimeofday() and similar.
  */
-#include <linux/compiler.h>
-#include <linux/math64.h>
-#include <linux/time.h>
-#include <linux/kernel.h>
-#include <linux/hrtimer_defs.h>
 #include <vdso/datapage.h>
 #include <vdso/helpers.h>
 
-/*
- * The generic vDSO implementation requires that gettimeofday.h
- * provides:
- * - __arch_get_vdso_data(): to get the vdso datapage.
- * - __arch_get_hw_counter(): to get the hw counter based on the
- *   clock_mode.
- * - gettimeofday_fallback(): fallback for gettimeofday.
- * - clock_gettime_fallback(): fallback for clock_gettime.
- * - clock_getres_fallback(): fallback for clock_getres.
- */
-#ifdef ENABLE_COMPAT_VDSO
-#include <asm/vdso/compat_gettimeofday.h>
-#else
-#include <asm/vdso/gettimeofday.h>
-#endif /* ENABLE_COMPAT_VDSO */
-
 #ifndef vdso_calc_delta
 /*
  * Default implementation which works for all sane clocksources. That
@@ -38,13 +17,24 @@
 }
 #endif
 
-static int do_hres(const struct vdso_data *vd, clockid_t clk,
+#ifndef __arch_vdso_hres_capable
+static inline bool __arch_vdso_hres_capable(void)
+{
+	return true;
+}
+#endif
+
+static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk,
 		   struct __kernel_timespec *ts)
 {
 	const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
 	u64 cycles, last, sec, ns;
 	u32 seq;
 
+	/* Allows to compile the high resolution parts out */
+	if (!__arch_vdso_hres_capable())
+		return -1;
+
 	do {
 		seq = vdso_read_begin(vd);
 		cycles = __arch_get_hw_counter(vd->clock_mode);
@@ -68,8 +58,8 @@
 	return 0;
 }
 
-static void do_coarse(const struct vdso_data *vd, clockid_t clk,
-		      struct __kernel_timespec *ts)
+static __always_inline int do_coarse(const struct vdso_data *vd, clockid_t clk,
+				     struct __kernel_timespec *ts)
 {
 	const struct vdso_timestamp *vdso_ts = &vd->basetime[clk];
 	u32 seq;
@@ -79,6 +69,8 @@
 		ts->tv_sec = vdso_ts->sec;
 		ts->tv_nsec = vdso_ts->nsec;
 	} while (unlikely(vdso_read_retry(vd, seq)));
+
+	return 0;
 }
 
 static __maybe_unused int
@@ -96,15 +88,16 @@
 	 * clocks are handled in the VDSO directly.
 	 */
 	msk = 1U << clock;
-	if (likely(msk & VDSO_HRES)) {
-		return do_hres(&vd[CS_HRES_COARSE], clock, ts);
-	} else if (msk & VDSO_COARSE) {
-		do_coarse(&vd[CS_HRES_COARSE], clock, ts);
-		return 0;
-	} else if (msk & VDSO_RAW) {
-		return do_hres(&vd[CS_RAW], clock, ts);
-	}
-	return -1;
+	if (likely(msk & VDSO_HRES))
+		vd = &vd[CS_HRES_COARSE];
+	else if (msk & VDSO_COARSE)
+		return do_coarse(&vd[CS_HRES_COARSE], clock, ts);
+	else if (msk & VDSO_RAW)
+		vd = &vd[CS_RAW];
+	else
+		return -1;
+
+	return do_hres(vd, clock, ts);
 }
 
 static __maybe_unused int
@@ -117,6 +110,7 @@
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_gettime32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -133,12 +127,13 @@
 		ret = clock_gettime_fallback(clock, &ts);
 #endif
 
-	if (likely(!ret)) {
-		res->tv_sec = ts.tv_sec;
-		res->tv_nsec = ts.tv_nsec;
-	}
+	/* For ret == 0 */
+	res->tv_sec = ts.tv_sec;
+	res->tv_nsec = ts.tv_nsec;
+
 	return ret;
 }
+#endif /* BUILD_VDSO32 */
 
 static __maybe_unused int
 __cvdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
@@ -181,7 +176,6 @@
 int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res)
 {
 	const struct vdso_data *vd = __arch_get_vdso_data();
-	u64 hrtimer_res;
 	u32 msk;
 	u64 ns;
 
@@ -189,27 +183,21 @@
 	if (unlikely((u32) clock >= MAX_CLOCKS))
 		return -1;
 
-	hrtimer_res = READ_ONCE(vd[CS_HRES_COARSE].hrtimer_res);
 	/*
 	 * Convert the clockid to a bitmask and use it to check which
 	 * clocks are handled in the VDSO directly.
 	 */
 	msk = 1U << clock;
-	if (msk & VDSO_HRES) {
+	if (msk & (VDSO_HRES | VDSO_RAW)) {
 		/*
 		 * Preserves the behaviour of posix_get_hrtimer_res().
 		 */
-		ns = hrtimer_res;
+		ns = READ_ONCE(vd[CS_HRES_COARSE].hrtimer_res);
 	} else if (msk & VDSO_COARSE) {
 		/*
 		 * Preserves the behaviour of posix_get_coarse_res().
 		 */
 		ns = LOW_RES_NSEC;
-	} else if (msk & VDSO_RAW) {
-		/*
-		 * Preserves the behaviour of posix_get_hrtimer_res().
-		 */
-		ns = hrtimer_res;
 	} else {
 		return -1;
 	}
@@ -221,6 +209,7 @@
 	return 0;
 }
 
+static __maybe_unused
 int __cvdso_clock_getres(clockid_t clock, struct __kernel_timespec *res)
 {
 	int ret = __cvdso_clock_getres_common(clock, res);
@@ -230,6 +219,7 @@
 	return 0;
 }
 
+#ifdef BUILD_VDSO32
 static __maybe_unused int
 __cvdso_clock_getres_time32(clockid_t clock, struct old_timespec32 *res)
 {
@@ -246,10 +236,11 @@
 		ret = clock_getres_fallback(clock, &ts);
 #endif
 
-	if (likely(!ret && res)) {
+	if (likely(res)) {
 		res->tv_sec = ts.tv_sec;
 		res->tv_nsec = ts.tv_nsec;
 	}
 	return ret;
 }
+#endif /* BUILD_VDSO32 */
 #endif /* VDSO_HAS_CLOCK_GETRES */
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 2766d1b..a20501d 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -764,6 +764,32 @@
 	return ret;
 }
 early_initcall(initialize_ptr_random);
+ 
+static inline int __ptr_to_hashval(const void *ptr, unsigned long *hashval_out)
+{
+	unsigned long hashval;
+
+	if (static_branch_unlikely(&not_filled_random_ptr_key))
+		return -EAGAIN;
+
+#ifdef CONFIG_64BIT
+	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
+	/*
+	 * Mask off the first 32 bits, this makes explicit that we have
+	 * modified the address (and 32 bits is plenty for a unique ID).
+	 */
+	hashval = hashval & 0xffffffff;
+#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, const void *ptr,
@@ -771,6 +797,7 @@
 {
 	const char *str = sizeof(ptr) == 8 ? "(____ptrval____)" : "(ptrval)";
 	unsigned long hashval;
+	int ret;
 
 	/*
 	 * Print the real pointer value for NULL and error pointers,
@@ -785,22 +812,13 @@
 		return pointer_string(buf, end, (const void *)hashval, spec);
 	}
 
-	if (static_branch_unlikely(&not_filled_random_ptr_key)) {
+	ret = __ptr_to_hashval(ptr, &hashval);
+	if (ret) {
 		spec.field_width = 2 * sizeof(ptr);
 		/* string length must be less than default_width */
 		return error_string(buf, end, str, spec);
 	}
 
-#ifdef CONFIG_64BIT
-	hashval = (unsigned long)siphash_1u64((u64)ptr, &ptr_key);
-	/*
-	 * Mask off the first 32 bits, this makes explicit that we have
-	 * modified the address (and 32 bits is plenty for a unique ID).
-	 */
-	hashval = hashval & 0xffffffff;
-#else
-	hashval = (unsigned long)siphash_1u32((u32)ptr, &ptr_key);
-#endif
 	return pointer_string(buf, end, (const void *)hashval, spec);
 }
 
@@ -2037,6 +2055,32 @@
 	return error_string(buf, end, "(%pO?)", spec);
 }
 
+/* Disable pointer hashing if requested */
+bool no_hash_pointers __ro_after_init;
+EXPORT_SYMBOL_GPL(no_hash_pointers);
+
+static int __init no_hash_pointers_enable(char *str)
+{
+	no_hash_pointers = true;
+
+	pr_warn("**********************************************************\n");
+	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
+	pr_warn("**                                                      **\n");
+	pr_warn("** This system shows unhashed kernel memory addresses   **\n");
+	pr_warn("** via the console, logs, and other interfaces. This    **\n");
+	pr_warn("** might reduce the security of your system.            **\n");
+	pr_warn("**                                                      **\n");
+	pr_warn("** If you see this message and you are not debugging    **\n");
+	pr_warn("** the kernel, report this immediately to your system   **\n");
+	pr_warn("** administrator!                                       **\n");
+	pr_warn("**                                                      **\n");
+	pr_warn("**   NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE   **\n");
+	pr_warn("**********************************************************\n");
+
+	return 0;
+}
+early_param("no_hash_pointers", no_hash_pointers_enable);
+
 /*
  * Show a '%p' thing.  A kernel extension is that the '%p' is followed
  * by an extra set of alphanumeric characters that are extended format
@@ -2222,8 +2266,14 @@
 		return pointer_string(buf, end, ptr, spec);
 	}
 
-	/* default is to _not_ leak addresses, hash before printing */
-	return ptr_to_id(buf, end, ptr, spec);
+	/*
+	 * default is to _not_ leak addresses, so hash before printing,
+	 * unless no_hash_pointers is specified on the command line.
+	 */
+	if (unlikely(no_hash_pointers))
+		return pointer_string(buf, end, ptr, spec);
+	else
+		return ptr_to_id(buf, end, ptr, spec);
 }
 
 /*
diff --git a/mm/Makefile b/mm/Makefile
index d996846..07dee30 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -71,6 +71,7 @@
 obj-$(CONFIG_SLAB) += slab.o
 obj-$(CONFIG_SLUB) += slub.o
 obj-$(CONFIG_KASAN)	+= kasan/
+obj-$(CONFIG_KFENCE) += kfence/
 obj-$(CONFIG_FAILSLAB) += failslab.o
 obj-$(CONFIG_MEMORY_HOTPLUG) += memory_hotplug.o
 obj-$(CONFIG_MEMTEST)		+= memtest.o
diff --git a/mm/OWNERS b/mm/OWNERS
new file mode 100644
index 0000000..f89766e
--- /dev/null
+++ b/mm/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/mm/OWNERS
diff --git a/mm/cma.c b/mm/cma.c
index 7de520c..def0df5 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -24,6 +24,7 @@
 #include <linux/memblock.h>
 #include <linux/err.h>
 #include <linux/mm.h>
+#include <linux/module.h>
 #include <linux/mutex.h>
 #include <linux/sizes.h>
 #include <linux/slab.h>
@@ -38,7 +39,6 @@
 
 struct cma cma_areas[MAX_CMA_AREAS];
 unsigned cma_area_count;
-static DEFINE_MUTEX(cma_mutex);
 
 phys_addr_t cma_get_base(const struct cma *cma)
 {
@@ -54,6 +54,7 @@
 {
 	return cma->name ? cma->name : "(undefined)";
 }
+EXPORT_SYMBOL_GPL(cma_get_name);
 
 static unsigned long cma_bitmap_aligned_mask(const struct cma *cma,
 					     unsigned int align_order)
@@ -453,10 +454,9 @@
 		mutex_unlock(&cma->lock);
 
 		pfn = cma->base_pfn + (bitmap_no << cma->order_per_bit);
-		mutex_lock(&cma_mutex);
 		ret = alloc_contig_range(pfn, pfn + count, MIGRATE_CMA,
 				     GFP_KERNEL | (no_warn ? __GFP_NOWARN : 0));
-		mutex_unlock(&cma_mutex);
+
 		if (ret == 0) {
 			page = pfn_to_page(pfn);
 			break;
@@ -493,6 +493,7 @@
 	pr_debug("%s(): returned %p\n", __func__, page);
 	return page;
 }
+EXPORT_SYMBOL_GPL(cma_alloc);
 
 /**
  * cma_release() - release allocated pages
@@ -526,6 +527,7 @@
 
 	return true;
 }
+EXPORT_SYMBOL_GPL(cma_release);
 
 int cma_for_each_area(int (*it)(struct cma *cma, void *data), void *data)
 {
@@ -540,3 +542,4 @@
 
 	return 0;
 }
+EXPORT_SYMBOL_GPL(cma_for_each_area);
diff --git a/mm/filemap.c b/mm/filemap.c
index c10e237..cf69201 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -1427,7 +1427,7 @@
 int __lock_page_or_retry(struct page *page, struct mm_struct *mm,
 			 unsigned int flags)
 {
-	if (flags & FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(flags)) {
 		/*
 		 * CAUTION! In this case, mmap_sem is not released
 		 * even though return 0.
diff --git a/mm/gup.c b/mm/gup.c
index 3ef76952..f764cee 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -161,22 +161,13 @@
 }
 
 /*
- * FOLL_FORCE or a forced COW break can write even to unwritable pte's,
- * but only after we've gone through a COW cycle and they are dirty.
+ * FOLL_FORCE can write to even unwritable pte's, but only
+ * after we've gone through a COW cycle and they are dirty.
  */
 static inline bool can_follow_write_pte(pte_t pte, unsigned int flags)
 {
-	return pte_write(pte) || ((flags & FOLL_COW) && pte_dirty(pte));
-}
-
-/*
- * A (separate) COW fault might break the page the other way and
- * get_user_pages() would return the page from what is now the wrong
- * VM. So we need to force a COW break at GUP time even for reads.
- */
-static inline bool should_force_cow_break(struct vm_area_struct *vma, unsigned int flags)
-{
-	return is_cow_mapping(vma->vm_flags) && (flags & FOLL_GET);
+	return pte_write(pte) ||
+		((flags & FOLL_FORCE) && (flags & FOLL_COW) && pte_dirty(pte));
 }
 
 static struct page *follow_page_pte(struct vm_area_struct *vma,
@@ -620,12 +611,12 @@
 }
 
 /*
- * mmap_sem must be held on entry.  If @nonblocking != NULL and
- * *@flags does not include FOLL_NOWAIT, the mmap_sem may be released.
- * If it is, *@nonblocking will be set to 0 and -EBUSY returned.
+ * mmap_sem must be held on entry.  If @locked != NULL and *@flags
+ * does not include FOLL_NOWAIT, the mmap_sem may be released.  If it
+ * is, *@locked will be set to 0 and -EBUSY returned.
  */
 static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma,
-		unsigned long address, unsigned int *flags, int *nonblocking)
+		unsigned long address, unsigned int *flags, int *locked)
 {
 	unsigned int fault_flags = 0;
 	vm_fault_t ret;
@@ -637,12 +628,15 @@
 		fault_flags |= FAULT_FLAG_WRITE;
 	if (*flags & FOLL_REMOTE)
 		fault_flags |= FAULT_FLAG_REMOTE;
-	if (nonblocking)
-		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+	if (locked)
+		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 	if (*flags & FOLL_NOWAIT)
 		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT;
 	if (*flags & FOLL_TRIED) {
-		VM_WARN_ON_ONCE(fault_flags & FAULT_FLAG_ALLOW_RETRY);
+		/*
+		 * Note: FAULT_FLAG_ALLOW_RETRY and FAULT_FLAG_TRIED
+		 * can co-exist
+		 */
 		fault_flags |= FAULT_FLAG_TRIED;
 	}
 
@@ -663,8 +657,8 @@
 	}
 
 	if (ret & VM_FAULT_RETRY) {
-		if (nonblocking && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
-			*nonblocking = 0;
+		if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
+			*locked = 0;
 		return -EBUSY;
 	}
 
@@ -741,13 +735,20 @@
  *		only intends to ensure the pages are faulted in.
  * @vmas:	array of pointers to vmas corresponding to each page.
  *		Or NULL if the caller does not require them.
- * @nonblocking: whether waiting for disk IO or mmap_sem contention
+ * @locked:     whether we're still with the mmap_sem held
  *
- * Returns number of pages pinned. This may be fewer than the number
- * requested. If nr_pages is 0 or negative, returns 0. If no pages
- * were pinned, returns -errno. Each page returned must be released
- * with a put_page() call when it is finished with. vmas will only
- * remain valid while mmap_sem is held.
+ * Returns either number of pages pinned (which may be less than the
+ * number requested), or an error. Details about the return value:
+ *
+ * -- If nr_pages is 0, returns 0.
+ * -- If nr_pages is >0, but no pages were pinned, returns -errno.
+ * -- If nr_pages is >0, and some pages were pinned, returns the number of
+ *    pages pinned. Again, this may be less than nr_pages.
+ * -- 0 return value is possible when the fault would need to be retried.
+ *
+ * The caller is responsible for releasing returned @pages, via put_page().
+ *
+ * @vmas are valid only as long as mmap_sem is held.
  *
  * Must be called with mmap_sem held.  It may be released.  See below.
  *
@@ -770,13 +771,11 @@
  * appropriate) must be called after the page is finished with, and
  * before put_page is called.
  *
- * If @nonblocking != NULL, __get_user_pages will not wait for disk IO
- * or mmap_sem contention, and if waiting is needed to pin all pages,
- * *@nonblocking will be set to 0.  Further, if @gup_flags does not
- * include FOLL_NOWAIT, the mmap_sem will be released via up_read() in
- * this case.
+ * If @locked != NULL, *@locked will be set to 0 when mmap_sem is
+ * released by an up_read().  That can happen if @gup_flags does not
+ * have FOLL_NOWAIT.
  *
- * A caller using such a combination of @nonblocking and @gup_flags
+ * A caller using such a combination of @locked and @gup_flags
  * must therefore hold the mmap_sem for reading only, and recognize
  * when it's been released.  Otherwise, it must be held for either
  * reading or writing and will not be released.
@@ -788,7 +787,7 @@
 static long __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
 		unsigned long start, unsigned long nr_pages,
 		unsigned int gup_flags, struct page **pages,
-		struct vm_area_struct **vmas, int *nonblocking)
+		struct vm_area_struct **vmas, int *locked)
 {
 	long ret = 0, i = 0;
 	struct vm_area_struct *vma = NULL;
@@ -832,18 +831,22 @@
 				goto out;
 			}
 			if (is_vm_hugetlb_page(vma)) {
-				if (should_force_cow_break(vma, foll_flags))
-					foll_flags |= FOLL_WRITE;
 				i = follow_hugetlb_page(mm, vma, pages, vmas,
 						&start, &nr_pages, i,
-						foll_flags, nonblocking);
+						gup_flags, locked);
+				if (locked && *locked == 0) {
+					/*
+					 * We've got a VM_FAULT_RETRY
+					 * and we've lost mmap_sem.
+					 * We must stop here.
+					 */
+					BUG_ON(gup_flags & FOLL_NOWAIT);
+					BUG_ON(ret != 0);
+					goto out;
+				}
 				continue;
 			}
 		}
-
-		if (should_force_cow_break(vma, foll_flags))
-			foll_flags |= FOLL_WRITE;
-
 retry:
 		/*
 		 * If we have a pending SIGKILL, don't keep faulting pages and
@@ -858,7 +861,7 @@
 		page = follow_page_mask(vma, start, foll_flags, &ctx);
 		if (!page) {
 			ret = faultin_page(tsk, vma, start, &foll_flags,
-					nonblocking);
+					   locked);
 			switch (ret) {
 			case 0:
 				goto retry;
@@ -970,7 +973,7 @@
 	address = untagged_addr(address);
 
 	if (unlocked)
-		fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+		fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
 
 retry:
 	vma = find_extend_vma(mm, address);
@@ -980,6 +983,10 @@
 	if (!vma_permits_fault(vma, fault_flags))
 		return -EFAULT;
 
+	if ((fault_flags & FAULT_FLAG_KILLABLE) &&
+	    fatal_signal_pending(current))
+		return -EINTR;
+
 	ret = handle_mm_fault(vma, address, fault_flags);
 	major |= ret & VM_FAULT_MAJOR;
 	if (ret & VM_FAULT_ERROR) {
@@ -992,12 +999,9 @@
 
 	if (ret & VM_FAULT_RETRY) {
 		down_read(&mm->mmap_sem);
-		if (!(fault_flags & FAULT_FLAG_TRIED)) {
-			*unlocked = true;
-			fault_flags &= ~FAULT_FLAG_ALLOW_RETRY;
-			fault_flags |= FAULT_FLAG_TRIED;
-			goto retry;
-		}
+		*unlocked = true;
+		fault_flags |= FAULT_FLAG_TRIED;
+		goto retry;
 	}
 
 	if (tsk) {
@@ -1010,6 +1014,10 @@
 }
 EXPORT_SYMBOL_GPL(fixup_user_fault);
 
+/*
+ * Please note that this function, unlike __get_user_pages will not
+ * return 0 for nr_pages > 0 without FOLL_NOWAIT
+ */
 static __always_inline long __get_user_pages_locked(struct task_struct *tsk,
 						struct mm_struct *mm,
 						unsigned long start,
@@ -1069,17 +1077,39 @@
 		if (likely(pages))
 			pages += ret;
 		start += ret << PAGE_SHIFT;
+		lock_dropped = true;
 
+retry:
 		/*
 		 * Repeat on the address that fired VM_FAULT_RETRY
-		 * without FAULT_FLAG_ALLOW_RETRY but with
-		 * FAULT_FLAG_TRIED.
+		 * with both FAULT_FLAG_ALLOW_RETRY and
+		 * FAULT_FLAG_TRIED.  Note that GUP can be interrupted
+		 * by fatal signals, so we need to check it before we
+		 * start trying again otherwise it can loop forever.
 		 */
+
+		if (fatal_signal_pending(current)) {
+			if (!pages_done)
+				pages_done = -EINTR;
+			break;
+		}
+
+		ret = down_read_killable(&mm->mmap_sem);
+		if (ret) {
+			BUG_ON(ret > 0);
+			if (!pages_done)
+				pages_done = ret;
+			break;
+		}
+
 		*locked = 1;
-		lock_dropped = true;
-		down_read(&mm->mmap_sem);
 		ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED,
-				       pages, NULL, NULL);
+				       pages, NULL, locked);
+		if (!*locked) {
+			/* Continue to retry until we succeeded */
+			BUG_ON(ret != 0);
+			goto retry;
+		}
 		if (ret != 1) {
 			BUG_ON(ret > 1);
 			if (!pages_done)
@@ -1186,7 +1216,7 @@
  * @vma:   target vma
  * @start: start address
  * @end:   end address
- * @nonblocking:
+ * @locked: whether the mmap_sem is still held
  *
  * This takes care of mlocking the pages too if VM_LOCKED is set.
  *
@@ -1194,14 +1224,14 @@
  *
  * vma->vm_mm->mmap_sem must be held.
  *
- * If @nonblocking is NULL, it may be held for read or write and will
+ * If @locked is NULL, it may be held for read or write and will
  * be unperturbed.
  *
- * If @nonblocking is non-NULL, it must held for read only and may be
- * released.  If it's released, *@nonblocking will be set to 0.
+ * If @locked is non-NULL, it must held for read only and may be
+ * released.  If it's released, *@locked will be set to 0.
  */
 long populate_vma_page_range(struct vm_area_struct *vma,
-		unsigned long start, unsigned long end, int *nonblocking)
+		unsigned long start, unsigned long end, int *locked)
 {
 	struct mm_struct *mm = vma->vm_mm;
 	unsigned long nr_pages = (end - start) / PAGE_SIZE;
@@ -1236,7 +1266,7 @@
 	 * not result in a stack expansion that recurses back here.
 	 */
 	return __get_user_pages(current, mm, start, nr_pages, gup_flags,
-				NULL, NULL, nonblocking);
+				NULL, NULL, locked);
 }
 
 /*
@@ -2331,10 +2361,6 @@
  *
  * If the architecture does not support this function, simply return with no
  * pages pinned.
- *
- * Careful, careful! COW breaking can go either way, so a non-write
- * access can get ambiguous page results. If you call this function without
- * 'write' set, you'd better be sure that you're ok with that ambiguity.
  */
 int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
 			  struct page **pages)
@@ -2362,12 +2388,6 @@
 	 *
 	 * We do not adopt an rcu_read_lock(.) here as we also want to
 	 * block IPIs that come from THPs splitting.
-	 *
-	 * NOTE! We allow read-only gup_fast() here, but you'd better be
-	 * careful about possible COW pages. You'll get _a_ COW page, but
-	 * not necessarily the one you intended to get depending on what
-	 * COW event happens after this. COW may break the page copy in a
-	 * random direction.
 	 */
 
 	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
@@ -2440,17 +2460,10 @@
 	if (unlikely(!access_ok((void __user *)start, len)))
 		return -EFAULT;
 
-	/*
-	 * The FAST_GUP case requires FOLL_WRITE even for pure reads,
-	 * because get_user_pages() may need to cause an early COW in
-	 * order to avoid confusing the normal COW routines. So only
-	 * targets that are already writable are safe to do by just
-	 * looking at the page tables.
-	 */
 	if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) &&
 	    gup_fast_permitted(start, end)) {
 		local_irq_disable();
-		gup_pgd_range(addr, end, gup_flags | FOLL_WRITE, pages, &nr);
+		gup_pgd_range(addr, end, gup_flags, pages, &nr);
 		local_irq_enable();
 		ret = nr;
 	}
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index e50799d..d90076b 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1456,12 +1456,13 @@
 }
 
 /*
- * FOLL_FORCE or a forced COW break can write even to unwritable pmd's,
- * but only after we've gone through a COW cycle and they are dirty.
+ * FOLL_FORCE can write to even unwritable pmd's, but only
+ * after we've gone through a COW cycle and they are dirty.
  */
 static inline bool can_follow_write_pmd(pmd_t pmd, unsigned int flags)
 {
-	return pmd_write(pmd) || ((flags & FOLL_COW) && pmd_dirty(pmd));
+	return pmd_write(pmd) ||
+	       ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pmd_dirty(pmd));
 }
 
 struct page *follow_trans_huge_pmd(struct vm_area_struct *vma,
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 20da6ed..7a96b2f 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -37,7 +37,6 @@
 #include <linux/hugetlb.h>
 #include <linux/hugetlb_cgroup.h>
 #include <linux/node.h>
-#include <linux/userfaultfd_k.h>
 #include <linux/page_owner.h>
 #include "internal.h"
 
@@ -3502,7 +3501,7 @@
 		src_pte = huge_pte_offset(src, addr, sz);
 		if (!src_pte)
 			continue;
-		dst_pte = huge_pte_alloc(dst, addr, sz);
+		dst_pte = huge_pte_alloc(dst, vma, addr, sz);
 		if (!dst_pte) {
 			ret = -ENOMEM;
 			break;
@@ -3979,6 +3978,43 @@
 	return 0;
 }
 
+static inline vm_fault_t hugetlb_handle_userfault(struct vm_area_struct *vma,
+						  struct address_space *mapping,
+						  struct hstate *h,
+						  pgoff_t idx,
+						  unsigned int flags,
+						  unsigned long haddr,
+						  unsigned long reason)
+{
+	vm_fault_t ret;
+	u32 hash;
+	struct vm_fault vmf = {
+		.vma = vma,
+		.address = haddr,
+		.flags = flags,
+
+		/*
+		 * Hard to debug if it ends up being
+		 * used by a callee that assumes
+		 * something about the other
+		 * uninitialized fields... same as in
+		 * memory.c
+		 */
+	};
+
+	/*
+	 * hugetlb_fault_mutex and i_mmap_rwsem must be
+	 * dropped before handling userfault.  Reacquire
+	 * after handling fault to make calling code simpler.
+	 */
+	hash = hugetlb_fault_mutex_hash(h, mapping, idx);
+	mutex_unlock(&hugetlb_fault_mutex_table[hash]);
+	ret = handle_userfault(&vmf, reason);
+	mutex_lock(&hugetlb_fault_mutex_table[hash]);
+
+	return ret;
+}
+
 static vm_fault_t hugetlb_no_page(struct mm_struct *mm,
 			struct vm_area_struct *vma,
 			struct address_space *mapping, pgoff_t idx,
@@ -4016,33 +4052,11 @@
 		if (idx >= size)
 			goto out;
 
-		/*
-		 * Check for page in userfault range
-		 */
+		/* Check for page in userfault range */
 		if (userfaultfd_missing(vma)) {
-			u32 hash;
-			struct vm_fault vmf = {
-				.vma = vma,
-				.address = haddr,
-				.flags = flags,
-				/*
-				 * Hard to debug if it ends up being
-				 * used by a callee that assumes
-				 * something about the other
-				 * uninitialized fields... same as in
-				 * memory.c
-				 */
-			};
-
-			/*
-			 * hugetlb_fault_mutex must be dropped before
-			 * handling userfault.  Reacquire after handling
-			 * fault to make calling code simpler.
-			 */
-			hash = hugetlb_fault_mutex_hash(h, mapping, idx);
-			mutex_unlock(&hugetlb_fault_mutex_table[hash]);
-			ret = handle_userfault(&vmf, VM_UFFD_MISSING);
-			mutex_lock(&hugetlb_fault_mutex_table[hash]);
+			ret = hugetlb_handle_userfault(vma, mapping, h,
+						       idx, flags, haddr,
+						       VM_UFFD_MISSING);
 			goto out;
 		}
 
@@ -4101,6 +4115,16 @@
 				VM_FAULT_SET_HINDEX(hstate_index(h));
 			goto backout_unlocked;
 		}
+
+		/* Check for page in userfault range. */
+		if (userfaultfd_minor(vma)) {
+			unlock_page(page);
+			put_page(page);
+			ret = hugetlb_handle_userfault(vma, mapping, h,
+						       idx, flags, haddr,
+						       VM_UFFD_MINOR);
+			goto out;
+		}
 	}
 
 	/*
@@ -4216,7 +4240,7 @@
 			return VM_FAULT_HWPOISON_LARGE |
 				VM_FAULT_SET_HINDEX(hstate_index(h));
 	} else {
-		ptep = huge_pte_alloc(mm, haddr, huge_page_size(h));
+		ptep = huge_pte_alloc(mm, vma, haddr, huge_page_size(h));
 		if (!ptep)
 			return VM_FAULT_OOM;
 	}
@@ -4328,6 +4352,7 @@
 	return ret;
 }
 
+#ifdef CONFIG_USERFAULTFD
 /*
  * Used by userfaultfd UFFDIO_COPY.  Based on mcopy_atomic_pte with
  * modifications for huge pages.
@@ -4337,8 +4362,10 @@
 			    struct vm_area_struct *dst_vma,
 			    unsigned long dst_addr,
 			    unsigned long src_addr,
+			    enum mcopy_atomic_mode mode,
 			    struct page **pagep)
 {
+	bool is_continue = (mode == MCOPY_ATOMIC_CONTINUE);
 	struct address_space *mapping;
 	pgoff_t idx;
 	unsigned long size;
@@ -4348,8 +4375,17 @@
 	spinlock_t *ptl;
 	int ret;
 	struct page *page;
+	int writable;
 
-	if (!*pagep) {
+	mapping = dst_vma->vm_file->f_mapping;
+	idx = vma_hugecache_offset(h, dst_vma, dst_addr);
+
+	if (is_continue) {
+		ret = -EFAULT;
+		page = find_lock_page(mapping, idx);
+		if (!page)
+			goto out;
+	} else if (!*pagep) {
 		/* If a page already exists, then it's UFFDIO_COPY for
 		 * a non-missing case. Return -EEXIST.
 		 */
@@ -4388,13 +4424,8 @@
 	 */
 	__SetPageUptodate(page);
 
-	mapping = dst_vma->vm_file->f_mapping;
-	idx = vma_hugecache_offset(h, dst_vma, dst_addr);
-
-	/*
-	 * If shared, add to page cache
-	 */
-	if (vm_shared) {
+	/* Add shared, newly allocated pages to the page cache. */
+	if (vm_shared && !is_continue) {
 		size = i_size_read(mapping->host) >> huge_page_shift(h);
 		ret = -EFAULT;
 		if (idx >= size)
@@ -4439,8 +4470,14 @@
 		hugepage_add_new_anon_rmap(page, dst_vma, dst_addr);
 	}
 
-	_dst_pte = make_huge_pte(dst_vma, page, dst_vma->vm_flags & VM_WRITE);
-	if (dst_vma->vm_flags & VM_WRITE)
+	/* For CONTINUE on a non-shared VMA, don't set VM_WRITE for CoW. */
+	if (is_continue && !vm_shared)
+		writable = 0;
+	else
+		writable = dst_vma->vm_flags & VM_WRITE;
+
+	_dst_pte = make_huge_pte(dst_vma, page, writable);
+	if (writable)
 		_dst_pte = huge_pte_mkdirty(_dst_pte);
 	_dst_pte = pte_mkyoung(_dst_pte);
 
@@ -4454,25 +4491,27 @@
 	update_mmu_cache(dst_vma, dst_addr, dst_pte);
 
 	spin_unlock(ptl);
-	set_page_huge_active(page);
-	if (vm_shared)
+	if (!is_continue)
+		set_page_huge_active(page);
+	if (vm_shared || is_continue)
 		unlock_page(page);
 	ret = 0;
 out:
 	return ret;
 out_release_unlock:
 	spin_unlock(ptl);
-	if (vm_shared)
+	if (vm_shared || is_continue)
 		unlock_page(page);
 out_release_nounlock:
 	put_page(page);
 	goto out;
 }
+#endif /* CONFIG_USERFAULTFD */
 
 long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma,
 			 struct page **pages, struct vm_area_struct **vmas,
 			 unsigned long *position, unsigned long *nr_pages,
-			 long i, unsigned int flags, int *nonblocking)
+			 long i, unsigned int flags, int *locked)
 {
 	unsigned long pfn_offset;
 	unsigned long vaddr = *position;
@@ -4543,14 +4582,17 @@
 				spin_unlock(ptl);
 			if (flags & FOLL_WRITE)
 				fault_flags |= FAULT_FLAG_WRITE;
-			if (nonblocking)
-				fault_flags |= FAULT_FLAG_ALLOW_RETRY;
+			if (locked)
+				fault_flags |= FAULT_FLAG_ALLOW_RETRY |
+					FAULT_FLAG_KILLABLE;
 			if (flags & FOLL_NOWAIT)
 				fault_flags |= FAULT_FLAG_ALLOW_RETRY |
 					FAULT_FLAG_RETRY_NOWAIT;
 			if (flags & FOLL_TRIED) {
-				VM_WARN_ON_ONCE(fault_flags &
-						FAULT_FLAG_ALLOW_RETRY);
+				/*
+				 * Note: FAULT_FLAG_ALLOW_RETRY and
+				 * FAULT_FLAG_TRIED can co-exist
+				 */
 				fault_flags |= FAULT_FLAG_TRIED;
 			}
 			ret = hugetlb_fault(mm, vma, vaddr, fault_flags);
@@ -4560,9 +4602,9 @@
 				break;
 			}
 			if (ret & VM_FAULT_RETRY) {
-				if (nonblocking &&
+				if (locked &&
 				    !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
-					*nonblocking = 0;
+					*locked = 0;
 				*nr_pages = 0;
 				/*
 				 * VM_FAULT_RETRY must not return an
@@ -4627,14 +4669,6 @@
 	return i ? i : err;
 }
 
-#ifndef __HAVE_ARCH_FLUSH_HUGETLB_TLB_RANGE
-/*
- * ARCHes with special requirements for evicting HUGETLB backing TLB entries can
- * implement this.
- */
-#define flush_hugetlb_tlb_range(vma, addr, end)	flush_tlb_range(vma, addr, end)
-#endif
-
 unsigned long hugetlb_change_protection(struct vm_area_struct *vma,
 		unsigned long address, unsigned long end, pgprot_t newprot)
 {
@@ -4923,6 +4957,15 @@
 	return false;
 }
 
+bool want_pmd_share(struct vm_area_struct *vma, unsigned long addr)
+{
+#ifdef CONFIG_USERFAULTFD
+	if (uffd_disable_huge_pmd_share(vma))
+		return false;
+#endif
+	return vma_shareable(vma, addr);
+}
+
 /*
  * Determine if start,end range within vma could be mapped by shared pmd.
  * If yes, adjust start and end to cover range associated with possible
@@ -4959,9 +5002,9 @@
  * racing tasks could either miss the sharing (see huge_pte_offset) or select a
  * bad pmd for sharing.
  */
-pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
+pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct *vma,
+		      unsigned long addr, pud_t *pud)
 {
-	struct vm_area_struct *vma = find_vma(mm, addr);
 	struct address_space *mapping = vma->vm_file->f_mapping;
 	pgoff_t idx = ((addr - vma->vm_start) >> PAGE_SHIFT) +
 			vma->vm_pgoff;
@@ -4971,9 +5014,6 @@
 	pte_t *pte;
 	spinlock_t *ptl;
 
-	if (!vma_shareable(vma, addr))
-		return (pte_t *)pmd_alloc(mm, pud, addr);
-
 	i_mmap_lock_write(mapping);
 	vma_interval_tree_foreach(svma, &mapping->i_mmap, idx, idx) {
 		if (svma == vma)
@@ -5036,9 +5076,10 @@
 	*addr = ALIGN(*addr, HPAGE_SIZE * PTRS_PER_PTE) - HPAGE_SIZE;
 	return 1;
 }
-#define want_pmd_share()	(1)
+
 #else /* !CONFIG_ARCH_WANT_HUGE_PMD_SHARE */
-pte_t *huge_pmd_share(struct mm_struct *mm, unsigned long addr, pud_t *pud)
+pte_t *huge_pmd_share(struct mm_struct *mm, struct vm_area_struct *vma,
+		      unsigned long addr, pud_t *pud)
 {
 	return NULL;
 }
@@ -5052,11 +5093,15 @@
 				unsigned long *start, unsigned long *end)
 {
 }
-#define want_pmd_share()	(0)
+
+bool want_pmd_share(struct vm_area_struct *vma, unsigned long addr)
+{
+	return false;
+}
 #endif /* CONFIG_ARCH_WANT_HUGE_PMD_SHARE */
 
 #ifdef CONFIG_ARCH_WANT_GENERAL_HUGETLB
-pte_t *huge_pte_alloc(struct mm_struct *mm,
+pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
 			unsigned long addr, unsigned long sz)
 {
 	pgd_t *pgd;
@@ -5074,8 +5119,8 @@
 			pte = (pte_t *)pud;
 		} else {
 			BUG_ON(sz != PMD_SIZE);
-			if (want_pmd_share() && pud_none(*pud))
-				pte = huge_pmd_share(mm, addr, pud);
+			if (want_pmd_share(vma, addr) && pud_none(*pud))
+				pte = huge_pmd_share(mm, vma, addr, pud);
 			else
 				pte = (pte_t *)pmd_alloc(mm, pud, addr);
 		}
@@ -5264,3 +5309,55 @@
 		spin_unlock(&hugetlb_lock);
 	}
 }
+
+/*
+ * This function will unconditionally remove all the shared pmd pgtable entries
+ * within the specific vma for a hugetlbfs memory range.
+ */
+void hugetlb_unshare_all_pmds(struct vm_area_struct *vma)
+{
+	struct hstate *h = hstate_vma(vma);
+	unsigned long sz = huge_page_size(h);
+	struct mm_struct *mm = vma->vm_mm;
+	struct mmu_notifier_range range;
+	unsigned long address, start, end;
+	spinlock_t *ptl;
+	pte_t *ptep;
+
+	if (!(vma->vm_flags & VM_MAYSHARE))
+		return;
+
+	start = ALIGN(vma->vm_start, PUD_SIZE);
+	end = ALIGN_DOWN(vma->vm_end, PUD_SIZE);
+
+	if (start >= end)
+		return;
+
+	/*
+	 * No need to call adjust_range_if_pmd_sharing_possible(), because
+	 * we have already done the PUD_SIZE alignment.
+	 */
+	mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma, mm,
+				start, end);
+	mmu_notifier_invalidate_range_start(&range);
+	i_mmap_lock_write(vma->vm_file->f_mapping);
+	for (address = start; address < end; address += PUD_SIZE) {
+		unsigned long tmp = address;
+
+		ptep = huge_pte_offset(mm, address, sz);
+		if (!ptep)
+			continue;
+		ptl = huge_pte_lock(h, mm, ptep);
+		/* We don't want 'address' to be changed */
+		huge_pmd_unshare(mm, &tmp, ptep);
+		spin_unlock(ptl);
+	}
+	flush_hugetlb_tlb_range(vma, start, end);
+	i_mmap_unlock_write(vma->vm_file->f_mapping);
+	/*
+	 * No need to call mmu_notifier_invalidate_range(), see
+	 * Documentation/vm/mmu_notifier.rst.
+	 */
+	mmu_notifier_invalidate_range_end(&range);
+}
+
diff --git a/mm/internal.h b/mm/internal.h
index cf382549..6987133 100644
--- a/mm/internal.h
+++ b/mm/internal.h
@@ -398,10 +398,10 @@
 	/*
 	 * FAULT_FLAG_RETRY_NOWAIT means we don't want to wait on page locks or
 	 * anything, so we only pin the file and drop the mmap_sem if only
-	 * FAULT_FLAG_ALLOW_RETRY is set.
+	 * FAULT_FLAG_ALLOW_RETRY is set, while this is the first attempt.
 	 */
-	if ((flags & (FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT)) ==
-	    FAULT_FLAG_ALLOW_RETRY) {
+	if (fault_flag_allow_retry_first(flags) &&
+	    !(flags & FAULT_FLAG_RETRY_NOWAIT)) {
 		fpin = get_file(vmf->vma->vm_file);
 		up_read(&vmf->vma->vm_mm->mmap_sem);
 	}
diff --git a/mm/kasan/common.c b/mm/kasan/common.c
index 6814d6d..1e6970a 100644
--- a/mm/kasan/common.c
+++ b/mm/kasan/common.c
@@ -19,6 +19,7 @@
 #include <linux/init.h>
 #include <linux/kasan.h>
 #include <linux/kernel.h>
+#include <linux/kfence.h>
 #include <linux/kmemleak.h>
 #include <linux/linkage.h>
 #include <linux/memblock.h>
@@ -140,6 +141,10 @@
 	 */
 	address = reset_tag(address);
 
+	/* Skip KFENCE memory if called explicitly outside of sl*b. */
+	if (is_kfence_address(address))
+		return;
+
 	shadow_start = kasan_mem_to_shadow(address);
 	shadow_end = kasan_mem_to_shadow(address + size);
 
@@ -157,6 +162,14 @@
 	 */
 	address = reset_tag(address);
 
+	/*
+	 * Skip KFENCE memory if called explicitly outside of sl*b. Also note
+	 * that calls to ksize(), where size is not a multiple of machine-word
+	 * size, would otherwise poison the invalid portion of the word.
+	 */
+	if (is_kfence_address(address))
+		return;
+
 	kasan_poison_shadow(address, size, tag);
 
 	if (size & KASAN_SHADOW_MASK) {
@@ -445,6 +458,9 @@
 	tagged_object = object;
 	object = reset_tag(object);
 
+	if (is_kfence_address(object))
+		return false;
+
 	if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
 	    object)) {
 		kasan_report_invalid_free(tagged_object, ip);
@@ -493,6 +509,9 @@
 	if (unlikely(object == NULL))
 		return NULL;
 
+	if (is_kfence_address(kasan_reset_tag(object)))
+		return (void *)object;
+
 	redzone_start = round_up((unsigned long)(object + size),
 				KASAN_SHADOW_SCALE_SIZE);
 	redzone_end = round_up((unsigned long)object + cache->object_size,
diff --git a/mm/kasan/report.c b/mm/kasan/report.c
index 62178210..f21d683 100644
--- a/mm/kasan/report.c
+++ b/mm/kasan/report.c
@@ -29,6 +29,7 @@
 #include <linux/kasan.h>
 #include <linux/module.h>
 #include <linux/sched/task_stack.h>
+#include <trace/events/error_report.h>
 
 #include <asm/sections.h>
 
@@ -87,13 +88,22 @@
 	pr_err("==================================================================\n");
 }
 
-static void end_report(unsigned long *flags)
+static void end_report(unsigned long *flags, unsigned long addr)
 {
+	trace_error_report_end(ERROR_DETECTOR_KASAN, addr);
 	pr_err("==================================================================\n");
 	add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
 	spin_unlock_irqrestore(&report_lock, *flags);
-	if (panic_on_warn)
+	if (panic_on_warn) {
+		/*
+		 * This thread may hit another WARN() in the panic path.
+		 * Resetting this prevents additional WARN() from panicking the
+		 * system on this thread.  Other threads are blocked by the
+		 * panic_mutex in panic().
+		 */
+		panic_on_warn = 0;
 		panic("panic_on_warn set ...\n");
+	}
 	kasan_enable_current();
 }
 
@@ -468,7 +478,7 @@
 	print_address_description(object, tag);
 	pr_err("\n");
 	print_shadow_for_address(object);
-	end_report(&flags);
+	end_report(&flags, (unsigned long)object);
 }
 
 void __kasan_report(unsigned long addr, size_t size, bool is_write, unsigned long ip)
@@ -510,5 +520,5 @@
 		dump_stack();
 	}
 
-	end_report(&flags);
+	end_report(&flags, addr);
 }
diff --git a/mm/kfence/Makefile b/mm/kfence/Makefile
new file mode 100644
index 0000000..6872cd5
--- /dev/null
+++ b/mm/kfence/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+
+obj-$(CONFIG_KFENCE) := core.o report.o
+
+CFLAGS_kfence_test.o := -g -fno-omit-frame-pointer -fno-optimize-sibling-calls
+obj-$(CONFIG_KFENCE_KUNIT_TEST) += kfence_test.o
diff --git a/mm/kfence/core.c b/mm/kfence/core.c
new file mode 100644
index 0000000..6c669c2
--- /dev/null
+++ b/mm/kfence/core.c
@@ -0,0 +1,888 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KFENCE guarded object allocator and fault handling.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#define pr_fmt(fmt) "kfence: " fmt
+
+#include <linux/atomic.h>
+#include <linux/bug.h>
+#include <linux/debugfs.h>
+#include <linux/irq_work.h>
+#include <linux/kfence.h>
+#include <linux/kmemleak.h>
+#include <linux/list.h>
+#include <linux/lockdep.h>
+#include <linux/memblock.h>
+#include <linux/moduleparam.h>
+#include <linux/random.h>
+#include <linux/rcupdate.h>
+#include <linux/sched/sysctl.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/string.h>
+
+#include <asm/kfence.h>
+
+#include "kfence.h"
+
+/*
+ * Android 4.19 kernel does not support KCSAN, so we have to disable data race
+ * annotations.
+ */
+#ifndef data_race
+#define data_race(x) (x)
+#endif
+
+/* Disables KFENCE on the first warning assuming an irrecoverable error. */
+#define KFENCE_WARN_ON(cond)                                                   \
+	({                                                                     \
+		const bool __cond = WARN_ON(cond);                             \
+		if (unlikely(__cond))                                          \
+			WRITE_ONCE(kfence_enabled, false);                     \
+		__cond;                                                        \
+	})
+
+/* === Data ================================================================= */
+
+static bool kfence_enabled __read_mostly;
+
+static unsigned long kfence_sample_interval __read_mostly = CONFIG_KFENCE_SAMPLE_INTERVAL;
+
+#ifdef MODULE_PARAM_PREFIX
+#undef MODULE_PARAM_PREFIX
+#endif
+#define MODULE_PARAM_PREFIX "kfence."
+
+static int param_set_sample_interval(const char *val, const struct kernel_param *kp)
+{
+	unsigned long num;
+	int ret = kstrtoul(val, 0, &num);
+
+	if (ret < 0)
+		return ret;
+
+	if (!num) /* Using 0 to indicate KFENCE is disabled. */
+		WRITE_ONCE(kfence_enabled, false);
+	else if (!READ_ONCE(kfence_enabled) && system_state != SYSTEM_BOOTING)
+		return -EINVAL; /* Cannot (re-)enable KFENCE on-the-fly. */
+
+	*((unsigned long *)kp->arg) = num;
+	return 0;
+}
+
+static int param_get_sample_interval(char *buffer, const struct kernel_param *kp)
+{
+	if (!READ_ONCE(kfence_enabled))
+		return sprintf(buffer, "0\n");
+
+	return param_get_ulong(buffer, kp);
+}
+
+static const struct kernel_param_ops sample_interval_param_ops = {
+	.set = param_set_sample_interval,
+	.get = param_get_sample_interval,
+};
+module_param_cb(sample_interval, &sample_interval_param_ops, &kfence_sample_interval, 0600);
+
+/* The pool of pages used for guard pages and objects. */
+char *__kfence_pool __ro_after_init;
+EXPORT_SYMBOL(__kfence_pool); /* Export for test modules. */
+
+/*
+ * Per-object metadata, with one-to-one mapping of object metadata to
+ * backing pages (in __kfence_pool).
+ */
+static_assert(CONFIG_KFENCE_NUM_OBJECTS > 0);
+struct kfence_metadata kfence_metadata[CONFIG_KFENCE_NUM_OBJECTS];
+
+/* Freelist with available objects. */
+static struct list_head kfence_freelist = LIST_HEAD_INIT(kfence_freelist);
+static DEFINE_RAW_SPINLOCK(kfence_freelist_lock); /* Lock protecting freelist. */
+
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+/* The static key to set up a KFENCE allocation. */
+DEFINE_STATIC_KEY_FALSE(kfence_allocation_key);
+#endif
+
+/* Gates the allocation, ensuring only one succeeds in a given period. */
+atomic_t kfence_allocation_gate = ATOMIC_INIT(1);
+
+/* Statistics counters for debugfs. */
+enum kfence_counter_id {
+	KFENCE_COUNTER_ALLOCATED,
+	KFENCE_COUNTER_ALLOCS,
+	KFENCE_COUNTER_FREES,
+	KFENCE_COUNTER_ZOMBIES,
+	KFENCE_COUNTER_BUGS,
+	KFENCE_COUNTER_COUNT,
+};
+static atomic_long_t counters[KFENCE_COUNTER_COUNT];
+static const char *const counter_names[] = {
+	[KFENCE_COUNTER_ALLOCATED]	= "currently allocated",
+	[KFENCE_COUNTER_ALLOCS]		= "total allocations",
+	[KFENCE_COUNTER_FREES]		= "total frees",
+	[KFENCE_COUNTER_ZOMBIES]	= "zombie allocations",
+	[KFENCE_COUNTER_BUGS]		= "total bugs",
+};
+static_assert(ARRAY_SIZE(counter_names) == KFENCE_COUNTER_COUNT);
+
+/* === Internals ============================================================ */
+
+static bool kfence_protect(unsigned long addr)
+{
+	return !KFENCE_WARN_ON(!kfence_protect_page(ALIGN_DOWN(addr, PAGE_SIZE), true));
+}
+
+static bool kfence_unprotect(unsigned long addr)
+{
+	return !KFENCE_WARN_ON(!kfence_protect_page(ALIGN_DOWN(addr, PAGE_SIZE), false));
+}
+
+static inline struct kfence_metadata *addr_to_metadata(unsigned long addr)
+{
+	long index;
+
+	/* The checks do not affect performance; only called from slow-paths. */
+
+	if (!is_kfence_address((void *)addr))
+		return NULL;
+
+	/*
+	 * May be an invalid index if called with an address at the edge of
+	 * __kfence_pool, in which case we would report an "invalid access"
+	 * error.
+	 */
+	index = (addr - (unsigned long)__kfence_pool) / (PAGE_SIZE * 2) - 1;
+	if (index < 0 || index >= CONFIG_KFENCE_NUM_OBJECTS)
+		return NULL;
+
+	return &kfence_metadata[index];
+}
+
+static inline unsigned long metadata_to_pageaddr(const struct kfence_metadata *meta)
+{
+	unsigned long offset = (meta - kfence_metadata + 1) * PAGE_SIZE * 2;
+	unsigned long pageaddr = (unsigned long)&__kfence_pool[offset];
+
+	/* The checks do not affect performance; only called from slow-paths. */
+
+	/* Only call with a pointer into kfence_metadata. */
+	if (KFENCE_WARN_ON(meta < kfence_metadata ||
+			   meta >= kfence_metadata + CONFIG_KFENCE_NUM_OBJECTS))
+		return 0;
+
+	/*
+	 * This metadata object only ever maps to 1 page; verify that the stored
+	 * address is in the expected range.
+	 */
+	if (KFENCE_WARN_ON(ALIGN_DOWN(meta->addr, PAGE_SIZE) != pageaddr))
+		return 0;
+
+	return pageaddr;
+}
+
+/*
+ * Update the object's metadata state, including updating the alloc/free stacks
+ * depending on the state transition.
+ */
+static noinline void metadata_update_state(struct kfence_metadata *meta,
+					   enum kfence_object_state next)
+{
+	struct kfence_track *track =
+		next == KFENCE_OBJECT_FREED ? &meta->free_track : &meta->alloc_track;
+
+	lockdep_assert_held(&meta->lock);
+
+	/*
+	 * Skip over 1 (this) functions; noinline ensures we do not accidentally
+	 * skip over the caller by never inlining.
+	 */
+	track->num_stack_entries = stack_trace_save(track->stack_entries, KFENCE_STACK_DEPTH, 1);
+	track->pid = task_pid_nr(current);
+
+	/*
+	 * Pairs with READ_ONCE() in
+	 *	kfence_shutdown_cache(),
+	 *	kfence_handle_page_fault().
+	 */
+	WRITE_ONCE(meta->state, next);
+}
+
+/* Write canary byte to @addr. */
+static inline bool set_canary_byte(u8 *addr)
+{
+	*addr = KFENCE_CANARY_PATTERN(addr);
+	return true;
+}
+
+/* Check canary byte at @addr. */
+static inline bool check_canary_byte(u8 *addr)
+{
+	if (likely(*addr == KFENCE_CANARY_PATTERN(addr)))
+		return true;
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+	kfence_report_error((unsigned long)addr, false, NULL, addr_to_metadata((unsigned long)addr),
+			    KFENCE_ERROR_CORRUPTION);
+	return false;
+}
+
+/* __always_inline this to ensure we won't do an indirect call to fn. */
+static __always_inline void for_each_canary(const struct kfence_metadata *meta, bool (*fn)(u8 *))
+{
+	const unsigned long pageaddr = ALIGN_DOWN(meta->addr, PAGE_SIZE);
+	unsigned long addr;
+
+	lockdep_assert_held(&meta->lock);
+
+	/*
+	 * We'll iterate over each canary byte per-side until fn() returns
+	 * false. However, we'll still iterate over the canary bytes to the
+	 * right of the object even if there was an error in the canary bytes to
+	 * the left of the object. Specifically, if check_canary_byte()
+	 * generates an error, showing both sides might give more clues as to
+	 * what the error is about when displaying which bytes were corrupted.
+	 */
+
+	/* Apply to left of object. */
+	for (addr = pageaddr; addr < meta->addr; addr++) {
+		if (!fn((u8 *)addr))
+			break;
+	}
+
+	/* Apply to right of object. */
+	for (addr = meta->addr + meta->size; addr < pageaddr + PAGE_SIZE; addr++) {
+		if (!fn((u8 *)addr))
+			break;
+	}
+}
+
+static void *kfence_guarded_alloc(struct kmem_cache *cache, size_t size, gfp_t gfp)
+{
+	struct kfence_metadata *meta = NULL;
+	unsigned long flags;
+	struct page *page;
+	void *addr;
+
+	/* Try to obtain a free object. */
+	raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+	if (!list_empty(&kfence_freelist)) {
+		meta = list_entry(kfence_freelist.next, struct kfence_metadata, list);
+		list_del_init(&meta->list);
+	}
+	raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+	if (!meta)
+		return NULL;
+
+	if (unlikely(!raw_spin_trylock_irqsave(&meta->lock, flags))) {
+		/*
+		 * This is extremely unlikely -- we are reporting on a
+		 * use-after-free, which locked meta->lock, and the reporting
+		 * code via printk calls kmalloc() which ends up in
+		 * kfence_alloc() and tries to grab the same object that we're
+		 * reporting on. While it has never been observed, lockdep does
+		 * report that there is a possibility of deadlock. Fix it by
+		 * using trylock and bailing out gracefully.
+		 */
+		raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+		/* Put the object back on the freelist. */
+		list_add_tail(&meta->list, &kfence_freelist);
+		raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+
+		return NULL;
+	}
+
+	meta->addr = metadata_to_pageaddr(meta);
+	/* Unprotect if we're reusing this page. */
+	if (meta->state == KFENCE_OBJECT_FREED)
+		kfence_unprotect(meta->addr);
+
+	/*
+	 * Note: for allocations made before RNG initialization, will always
+	 * return zero. We still benefit from enabling KFENCE as early as
+	 * possible, even when the RNG is not yet available, as this will allow
+	 * KFENCE to detect bugs due to earlier allocations. The only downside
+	 * is that the out-of-bounds accesses detected are deterministic for
+	 * such allocations.
+	 */
+	if (prandom_u32_max(2)) {
+		/* Allocate on the "right" side, re-calculate address. */
+		meta->addr += PAGE_SIZE - size;
+		meta->addr = ALIGN_DOWN(meta->addr, cache->align);
+	}
+
+	addr = (void *)meta->addr;
+
+	/* Update remaining metadata. */
+	metadata_update_state(meta, KFENCE_OBJECT_ALLOCATED);
+	/* Pairs with READ_ONCE() in kfence_shutdown_cache(). */
+	WRITE_ONCE(meta->cache, cache);
+	meta->size = size;
+	for_each_canary(meta, set_canary_byte);
+
+	/* Set required struct page fields. */
+	page = virt_to_page(meta->addr);
+	page->slab_cache = cache;
+	if (IS_ENABLED(CONFIG_SLUB))
+		page->objects = 1;
+	if (IS_ENABLED(CONFIG_SLAB))
+		page->s_mem = addr;
+
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+	/* Memory initialization. */
+
+	/*
+	 * We check slab_want_init_on_alloc() ourselves, rather than letting
+	 * SL*B do the initialization, as otherwise we might overwrite KFENCE's
+	 * redzone.
+	 */
+	if (unlikely(slab_want_init_on_alloc(gfp, cache)))
+		memzero_explicit(addr, size);
+	if (cache->ctor)
+		cache->ctor(addr);
+
+	if (CONFIG_KFENCE_STRESS_TEST_FAULTS && !prandom_u32_max(CONFIG_KFENCE_STRESS_TEST_FAULTS))
+		kfence_protect(meta->addr); /* Random "faults" by protecting the object. */
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_ALLOCATED]);
+	atomic_long_inc(&counters[KFENCE_COUNTER_ALLOCS]);
+
+	return addr;
+}
+
+static void kfence_guarded_free(void *addr, struct kfence_metadata *meta, bool zombie)
+{
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&meta->lock, flags);
+
+	if (meta->state != KFENCE_OBJECT_ALLOCATED || meta->addr != (unsigned long)addr) {
+		/* Invalid or double-free, bail out. */
+		atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+		kfence_report_error((unsigned long)addr, false, NULL, meta,
+				    KFENCE_ERROR_INVALID_FREE);
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+		return;
+	}
+
+	if (CONFIG_KFENCE_STRESS_TEST_FAULTS)
+		kfence_unprotect((unsigned long)addr); /* To check canary bytes. */
+
+	/* Restore page protection if there was an OOB access. */
+	if (meta->unprotected_page) {
+		memzero_explicit((void *)ALIGN_DOWN(meta->unprotected_page, PAGE_SIZE), PAGE_SIZE);
+		kfence_protect(meta->unprotected_page);
+		meta->unprotected_page = 0;
+	}
+
+	/* Check canary bytes for memory corruption. */
+	for_each_canary(meta, check_canary_byte);
+
+	/*
+	 * Clear memory if init-on-free is set. While we protect the page, the
+	 * data is still there, and after a use-after-free is detected, we
+	 * unprotect the page, so the data is still accessible.
+	 */
+	if (!zombie && unlikely(slab_want_init_on_free(meta->cache)))
+		memzero_explicit(addr, meta->size);
+
+	/* Mark the object as freed. */
+	metadata_update_state(meta, KFENCE_OBJECT_FREED);
+
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+	/* Protect to detect use-after-frees. */
+	kfence_protect((unsigned long)addr);
+
+	if (!zombie) {
+		/* Add it to the tail of the freelist for reuse. */
+		raw_spin_lock_irqsave(&kfence_freelist_lock, flags);
+		KFENCE_WARN_ON(!list_empty(&meta->list));
+		list_add_tail(&meta->list, &kfence_freelist);
+		raw_spin_unlock_irqrestore(&kfence_freelist_lock, flags);
+
+		atomic_long_dec(&counters[KFENCE_COUNTER_ALLOCATED]);
+		atomic_long_inc(&counters[KFENCE_COUNTER_FREES]);
+	} else {
+		/* See kfence_shutdown_cache(). */
+		atomic_long_inc(&counters[KFENCE_COUNTER_ZOMBIES]);
+	}
+}
+
+static void rcu_guarded_free(struct rcu_head *h)
+{
+	struct kfence_metadata *meta = container_of(h, struct kfence_metadata, rcu_head);
+
+	kfence_guarded_free((void *)meta->addr, meta, false);
+}
+
+static bool __init kfence_init_pool(void)
+{
+	unsigned long addr = (unsigned long)__kfence_pool;
+	struct page *pages;
+	int i;
+
+	if (!__kfence_pool)
+		return false;
+
+	if (!arch_kfence_init_pool())
+		goto err;
+
+	pages = virt_to_page(addr);
+
+	/*
+	 * Set up object pages: they must have PG_slab set, to avoid freeing
+	 * these as real pages.
+	 *
+	 * We also want to avoid inserting kfence_free() in the kfree()
+	 * fast-path in SLUB, and therefore need to ensure kfree() correctly
+	 * enters __slab_free() slow-path.
+	 */
+	for (i = 0; i < KFENCE_POOL_SIZE / PAGE_SIZE; i++) {
+		if (!i || (i % 2))
+			continue;
+
+		/* Verify we do not have a compound head page. */
+		if (WARN_ON(compound_head(&pages[i]) != &pages[i]))
+			goto err;
+
+		__SetPageSlab(&pages[i]);
+	}
+
+	/*
+	 * Protect the first 2 pages. The first page is mostly unnecessary, and
+	 * merely serves as an extended guard page. However, adding one
+	 * additional page in the beginning gives us an even number of pages,
+	 * which simplifies the mapping of address to metadata index.
+	 */
+	for (i = 0; i < 2; i++) {
+		if (unlikely(!kfence_protect(addr)))
+			goto err;
+
+		addr += PAGE_SIZE;
+	}
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		struct kfence_metadata *meta = &kfence_metadata[i];
+
+		/* Initialize metadata. */
+		INIT_LIST_HEAD(&meta->list);
+		raw_spin_lock_init(&meta->lock);
+		meta->state = KFENCE_OBJECT_UNUSED;
+		meta->addr = addr; /* Initialize for validation in metadata_to_pageaddr(). */
+		list_add_tail(&meta->list, &kfence_freelist);
+
+		/* Protect the right redzone. */
+		if (unlikely(!kfence_protect(addr + PAGE_SIZE)))
+			goto err;
+
+		addr += 2 * PAGE_SIZE;
+	}
+
+	/*
+	 * The pool is live and will never be deallocated from this point on.
+	 * Remove the pool object from the kmemleak object tree, as it would
+	 * otherwise overlap with allocations returned by kfence_alloc(), which
+	 * are registered with kmemleak through the slab post-alloc hook.
+	 */
+	kmemleak_free(__kfence_pool);
+
+	return true;
+
+err:
+	/*
+	 * Only release unprotected pages, and do not try to go back and change
+	 * page attributes due to risk of failing to do so as well. If changing
+	 * page attributes for some pages fails, it is very likely that it also
+	 * fails for the first page, and therefore expect addr==__kfence_pool in
+	 * most failure cases.
+	 */
+	memblock_free_late(__pa(addr), KFENCE_POOL_SIZE - (addr - (unsigned long)__kfence_pool));
+	__kfence_pool = NULL;
+	return false;
+}
+
+/* === DebugFS Interface ==================================================== */
+
+static int stats_show(struct seq_file *seq, void *v)
+{
+	int i;
+
+	seq_printf(seq, "enabled: %i\n", READ_ONCE(kfence_enabled));
+	for (i = 0; i < KFENCE_COUNTER_COUNT; i++)
+		seq_printf(seq, "%s: %ld\n", counter_names[i], atomic_long_read(&counters[i]));
+
+	return 0;
+}
+DEFINE_SHOW_ATTRIBUTE(stats);
+
+/*
+ * debugfs seq_file operations for /sys/kernel/debug/kfence/objects.
+ * start_object() and next_object() return the object index + 1, because NULL is used
+ * to stop iteration.
+ */
+static void *start_object(struct seq_file *seq, loff_t *pos)
+{
+	if (*pos < CONFIG_KFENCE_NUM_OBJECTS)
+		return (void *)((long)*pos + 1);
+	return NULL;
+}
+
+static void stop_object(struct seq_file *seq, void *v)
+{
+}
+
+static void *next_object(struct seq_file *seq, void *v, loff_t *pos)
+{
+	++*pos;
+	if (*pos < CONFIG_KFENCE_NUM_OBJECTS)
+		return (void *)((long)*pos + 1);
+	return NULL;
+}
+
+static int show_object(struct seq_file *seq, void *v)
+{
+	struct kfence_metadata *meta = &kfence_metadata[(long)v - 1];
+	unsigned long flags;
+
+	raw_spin_lock_irqsave(&meta->lock, flags);
+	kfence_print_object(seq, meta);
+	raw_spin_unlock_irqrestore(&meta->lock, flags);
+	seq_puts(seq, "---------------------------------\n");
+
+	return 0;
+}
+
+static const struct seq_operations object_seqops = {
+	.start = start_object,
+	.next = next_object,
+	.stop = stop_object,
+	.show = show_object,
+};
+
+static int open_objects(struct inode *inode, struct file *file)
+{
+	return seq_open(file, &object_seqops);
+}
+
+static const struct file_operations objects_fops = {
+	.open = open_objects,
+	.read = seq_read,
+	.llseek = seq_lseek,
+};
+
+static int __init kfence_debugfs_init(void)
+{
+	struct dentry *kfence_dir = debugfs_create_dir("kfence", NULL);
+
+	debugfs_create_file("stats", 0444, kfence_dir, NULL, &stats_fops);
+	debugfs_create_file("objects", 0400, kfence_dir, NULL, &objects_fops);
+	return 0;
+}
+
+late_initcall(kfence_debugfs_init);
+
+/* === Allocation Gate Timer ================================================ */
+
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+/* Wait queue to wake up allocation-gate timer task. */
+static DECLARE_WAIT_QUEUE_HEAD(allocation_wait);
+
+static void wake_up_kfence_timer(struct irq_work *work)
+{
+	wake_up(&allocation_wait);
+}
+static DEFINE_IRQ_WORK(wake_up_kfence_timer_work, wake_up_kfence_timer);
+#endif
+
+/*
+ * Set up delayed work, which will enable and disable the static key. We need to
+ * use a work queue (rather than a simple timer), since enabling and disabling a
+ * static key cannot be done from an interrupt.
+ *
+ * Note: Toggling a static branch currently causes IPIs, and here we'll end up
+ * with a total of 2 IPIs to all CPUs. If this ends up a problem in future (with
+ * more aggressive sampling intervals), we could get away with a variant that
+ * avoids IPIs, at the cost of not immediately capturing allocations if the
+ * instructions remain cached.
+ */
+static struct delayed_work kfence_timer;
+static void toggle_allocation_gate(struct work_struct *work)
+{
+	if (!READ_ONCE(kfence_enabled))
+		return;
+
+	atomic_set(&kfence_allocation_gate, 0);
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+	/* Enable static key, and await allocation to happen. */
+	static_branch_enable(&kfence_allocation_key);
+
+	if (sysctl_hung_task_timeout_secs) {
+		/*
+		 * During low activity with no allocations we might wait a
+		 * while; let's avoid the hung task warning.
+		 */
+		wait_event_idle_timeout(allocation_wait, atomic_read(&kfence_allocation_gate),
+					sysctl_hung_task_timeout_secs * HZ / 2);
+	} else {
+		wait_event_idle(allocation_wait, atomic_read(&kfence_allocation_gate));
+	}
+
+	/* Disable static key and reset timer. */
+	static_branch_disable(&kfence_allocation_key);
+#endif
+	queue_delayed_work(system_unbound_wq, &kfence_timer,
+			   msecs_to_jiffies(kfence_sample_interval));
+}
+static DECLARE_DELAYED_WORK(kfence_timer, toggle_allocation_gate);
+
+/* === Public interface ===================================================== */
+
+void __init kfence_alloc_pool(void)
+{
+	if (!kfence_sample_interval)
+		return;
+
+	__kfence_pool = memblock_alloc(KFENCE_POOL_SIZE, PAGE_SIZE);
+
+	if (!__kfence_pool)
+		pr_err("failed to allocate pool\n");
+}
+
+void __init kfence_init(void)
+{
+	/* Setting kfence_sample_interval to 0 on boot disables KFENCE. */
+	if (!kfence_sample_interval)
+		return;
+
+	if (!kfence_init_pool()) {
+		pr_err("%s failed\n", __func__);
+		return;
+	}
+
+	WRITE_ONCE(kfence_enabled, true);
+	queue_delayed_work(system_unbound_wq, &kfence_timer, 0);
+	pr_info("initialized - using %lu bytes for %d objects at 0x%p-0x%p\n", KFENCE_POOL_SIZE,
+		CONFIG_KFENCE_NUM_OBJECTS, (void *)__kfence_pool,
+		(void *)(__kfence_pool + KFENCE_POOL_SIZE));
+}
+
+void kfence_shutdown_cache(struct kmem_cache *s)
+{
+	unsigned long flags;
+	struct kfence_metadata *meta;
+	int i;
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		bool in_use;
+
+		meta = &kfence_metadata[i];
+
+		/*
+		 * If we observe some inconsistent cache and state pair where we
+		 * should have returned false here, cache destruction is racing
+		 * with either kmem_cache_alloc() or kmem_cache_free(). Taking
+		 * the lock will not help, as different critical section
+		 * serialization will have the same outcome.
+		 */
+		if (READ_ONCE(meta->cache) != s ||
+		    READ_ONCE(meta->state) != KFENCE_OBJECT_ALLOCATED)
+			continue;
+
+		raw_spin_lock_irqsave(&meta->lock, flags);
+		in_use = meta->cache == s && meta->state == KFENCE_OBJECT_ALLOCATED;
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+
+		if (in_use) {
+			/*
+			 * This cache still has allocations, and we should not
+			 * release them back into the freelist so they can still
+			 * safely be used and retain the kernel's default
+			 * behaviour of keeping the allocations alive (leak the
+			 * cache); however, they effectively become "zombie
+			 * allocations" as the KFENCE objects are the only ones
+			 * still in use and the owning cache is being destroyed.
+			 *
+			 * We mark them freed, so that any subsequent use shows
+			 * more useful error messages that will include stack
+			 * traces of the user of the object, the original
+			 * allocation, and caller to shutdown_cache().
+			 */
+			kfence_guarded_free((void *)meta->addr, meta, /*zombie=*/true);
+		}
+	}
+
+	for (i = 0; i < CONFIG_KFENCE_NUM_OBJECTS; i++) {
+		meta = &kfence_metadata[i];
+
+		/* See above. */
+		if (READ_ONCE(meta->cache) != s || READ_ONCE(meta->state) != KFENCE_OBJECT_FREED)
+			continue;
+
+		raw_spin_lock_irqsave(&meta->lock, flags);
+		if (meta->cache == s && meta->state == KFENCE_OBJECT_FREED)
+			meta->cache = NULL;
+		raw_spin_unlock_irqrestore(&meta->lock, flags);
+	}
+}
+
+void *__kfence_alloc(struct kmem_cache *s, size_t size, gfp_t flags)
+{
+	/*
+	 * Perform size check before switching kfence_allocation_gate, so that
+	 * we don't disable KFENCE without making an allocation.
+	 */
+	if (size > PAGE_SIZE)
+		return NULL;
+
+	/*
+	 * Skip allocations from non-default zones, including DMA. We cannot
+	 * guarantee that pages in the KFENCE pool will have the requested
+	 * properties (e.g. reside in DMAable memory).
+	 */
+	if ((flags & GFP_ZONEMASK) ||
+	    (s->flags & (SLAB_CACHE_DMA | SLAB_CACHE_DMA32)))
+		return NULL;
+
+	/*
+	 * allocation_gate only needs to become non-zero, so it doesn't make
+	 * sense to continue writing to it and pay the associated contention
+	 * cost, in case we have a large number of concurrent allocations.
+	 */
+	if (atomic_read(&kfence_allocation_gate) || atomic_inc_return(&kfence_allocation_gate) > 1)
+		return NULL;
+#ifdef CONFIG_KFENCE_STATIC_KEYS
+	/*
+	 * waitqueue_active() is fully ordered after the update of
+	 * kfence_allocation_gate per atomic_inc_return().
+	 */
+	if (waitqueue_active(&allocation_wait)) {
+		/*
+		 * Calling wake_up() here may deadlock when allocations happen
+		 * from within timer code. Use an irq_work to defer it.
+		 */
+		irq_work_queue(&wake_up_kfence_timer_work);
+	}
+#endif
+
+	if (!READ_ONCE(kfence_enabled))
+		return NULL;
+
+	return kfence_guarded_alloc(s, size, flags);
+}
+
+size_t kfence_ksize(const void *addr)
+{
+	const struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * Read locklessly -- if there is a race with __kfence_alloc(), this is
+	 * either a use-after-free or invalid access.
+	 */
+	return meta ? meta->size : 0;
+}
+
+void *kfence_object_start(const void *addr)
+{
+	const struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * Read locklessly -- if there is a race with __kfence_alloc(), this is
+	 * either a use-after-free or invalid access.
+	 */
+	return meta ? (void *)meta->addr : NULL;
+}
+
+void __kfence_free(void *addr)
+{
+	struct kfence_metadata *meta = addr_to_metadata((unsigned long)addr);
+
+	/*
+	 * If the objects of the cache are SLAB_TYPESAFE_BY_RCU, defer freeing
+	 * the object, as the object page may be recycled for other-typed
+	 * objects once it has been freed. meta->cache may be NULL if the cache
+	 * was destroyed.
+	 */
+	if (unlikely(meta->cache && (meta->cache->flags & SLAB_TYPESAFE_BY_RCU)))
+		call_rcu(&meta->rcu_head, rcu_guarded_free);
+	else
+		kfence_guarded_free(addr, meta, false);
+}
+
+bool kfence_handle_page_fault(unsigned long addr, bool is_write, struct pt_regs *regs)
+{
+	const int page_index = (addr - (unsigned long)__kfence_pool) / PAGE_SIZE;
+	struct kfence_metadata *to_report = NULL;
+	enum kfence_error_type error_type;
+	unsigned long flags;
+
+	if (!is_kfence_address((void *)addr))
+		return false;
+
+	if (!READ_ONCE(kfence_enabled)) /* If disabled at runtime ... */
+		return kfence_unprotect(addr); /* ... unprotect and proceed. */
+
+	atomic_long_inc(&counters[KFENCE_COUNTER_BUGS]);
+
+	if (page_index % 2) {
+		/* This is a redzone, report a buffer overflow. */
+		struct kfence_metadata *meta;
+		int distance = 0;
+
+		meta = addr_to_metadata(addr - PAGE_SIZE);
+		if (meta && READ_ONCE(meta->state) == KFENCE_OBJECT_ALLOCATED) {
+			to_report = meta;
+			/* Data race ok; distance calculation approximate. */
+			distance = addr - data_race(meta->addr + meta->size);
+		}
+
+		meta = addr_to_metadata(addr + PAGE_SIZE);
+		if (meta && READ_ONCE(meta->state) == KFENCE_OBJECT_ALLOCATED) {
+			/* Data race ok; distance calculation approximate. */
+			if (!to_report || distance > data_race(meta->addr) - addr)
+				to_report = meta;
+		}
+
+		if (!to_report)
+			goto out;
+
+		raw_spin_lock_irqsave(&to_report->lock, flags);
+		to_report->unprotected_page = addr;
+		error_type = KFENCE_ERROR_OOB;
+
+		/*
+		 * If the object was freed before we took the look we can still
+		 * report this as an OOB -- the report will simply show the
+		 * stacktrace of the free as well.
+		 */
+	} else {
+		to_report = addr_to_metadata(addr);
+		if (!to_report)
+			goto out;
+
+		raw_spin_lock_irqsave(&to_report->lock, flags);
+		error_type = KFENCE_ERROR_UAF;
+		/*
+		 * We may race with __kfence_alloc(), and it is possible that a
+		 * freed object may be reallocated. We simply report this as a
+		 * use-after-free, with the stack trace showing the place where
+		 * the object was re-allocated.
+		 */
+	}
+
+out:
+	if (to_report) {
+		kfence_report_error(addr, is_write, regs, to_report, error_type);
+		raw_spin_unlock_irqrestore(&to_report->lock, flags);
+	} else {
+		/* This may be a UAF or OOB access, but we can't be sure. */
+		kfence_report_error(addr, is_write, regs, NULL, KFENCE_ERROR_INVALID);
+	}
+
+	return kfence_unprotect(addr); /* Unprotect and let access proceed. */
+}
diff --git a/mm/kfence/kfence.h b/mm/kfence/kfence.h
new file mode 100644
index 0000000..2406532
--- /dev/null
+++ b/mm/kfence/kfence.h
@@ -0,0 +1,106 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Kernel Electric-Fence (KFENCE). For more info please see
+ * Documentation/dev-tools/kfence.rst.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#ifndef MM_KFENCE_KFENCE_H
+#define MM_KFENCE_KFENCE_H
+
+#include <linux/mm.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/types.h>
+
+#include "../slab.h" /* for struct kmem_cache */
+
+/*
+ * Get the canary byte pattern for @addr. Use a pattern that varies based on the
+ * lower 3 bits of the address, to detect memory corruptions with higher
+ * probability, where similar constants are used.
+ */
+#define KFENCE_CANARY_PATTERN(addr) ((u8)0xaa ^ (u8)((unsigned long)(addr) & 0x7))
+
+/* Maximum stack depth for reports. */
+#define KFENCE_STACK_DEPTH 64
+
+/* KFENCE object states. */
+enum kfence_object_state {
+	KFENCE_OBJECT_UNUSED,		/* Object is unused. */
+	KFENCE_OBJECT_ALLOCATED,	/* Object is currently allocated. */
+	KFENCE_OBJECT_FREED,		/* Object was allocated, and then freed. */
+};
+
+/* Alloc/free tracking information. */
+struct kfence_track {
+	pid_t pid;
+	int num_stack_entries;
+	unsigned long stack_entries[KFENCE_STACK_DEPTH];
+};
+
+/* KFENCE metadata per guarded allocation. */
+struct kfence_metadata {
+	struct list_head list;		/* Freelist node; access under kfence_freelist_lock. */
+	struct rcu_head rcu_head;	/* For delayed freeing. */
+
+	/*
+	 * Lock protecting below data; to ensure consistency of the below data,
+	 * since the following may execute concurrently: __kfence_alloc(),
+	 * __kfence_free(), kfence_handle_page_fault(). However, note that we
+	 * cannot grab the same metadata off the freelist twice, and multiple
+	 * __kfence_alloc() cannot run concurrently on the same metadata.
+	 */
+	raw_spinlock_t lock;
+
+	/* The current state of the object; see above. */
+	enum kfence_object_state state;
+
+	/*
+	 * Allocated object address; cannot be calculated from size, because of
+	 * alignment requirements.
+	 *
+	 * Invariant: ALIGN_DOWN(addr, PAGE_SIZE) is constant.
+	 */
+	unsigned long addr;
+
+	/*
+	 * The size of the original allocation.
+	 */
+	size_t size;
+
+	/*
+	 * The kmem_cache cache of the last allocation; NULL if never allocated
+	 * or the cache has already been destroyed.
+	 */
+	struct kmem_cache *cache;
+
+	/*
+	 * In case of an invalid access, the page that was unprotected; we
+	 * optimistically only store one address.
+	 */
+	unsigned long unprotected_page;
+
+	/* Allocation and free stack information. */
+	struct kfence_track alloc_track;
+	struct kfence_track free_track;
+};
+
+extern struct kfence_metadata kfence_metadata[CONFIG_KFENCE_NUM_OBJECTS];
+
+/* KFENCE error types for report generation. */
+enum kfence_error_type {
+	KFENCE_ERROR_OOB,		/* Detected a out-of-bounds access. */
+	KFENCE_ERROR_UAF,		/* Detected a use-after-free access. */
+	KFENCE_ERROR_CORRUPTION,	/* Detected a memory corruption on free. */
+	KFENCE_ERROR_INVALID,		/* Invalid access of unknown type. */
+	KFENCE_ERROR_INVALID_FREE,	/* Invalid free. */
+};
+
+void kfence_report_error(unsigned long address, bool is_write, struct pt_regs *regs,
+			 const struct kfence_metadata *meta, enum kfence_error_type type);
+
+void kfence_print_object(struct seq_file *seq, const struct kfence_metadata *meta);
+
+#endif /* MM_KFENCE_KFENCE_H */
diff --git a/mm/kfence/kfence_test.c b/mm/kfence/kfence_test.c
new file mode 100644
index 0000000..b959548
--- /dev/null
+++ b/mm/kfence/kfence_test.c
@@ -0,0 +1,847 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Test cases for KFENCE memory safety error detector. Since the interface with
+ * which KFENCE's reports are obtained is via the console, this is the output we
+ * should verify. For each test case checks the presence (or absence) of
+ * generated reports. Relies on 'console' tracepoint to capture reports as they
+ * appear in the kernel log.
+ *
+ * Copyright (C) 2020, Google LLC.
+ * Author: Alexander Potapenko <glider@google.com>
+ *         Marco Elver <elver@google.com>
+ */
+
+#include <kunit/test.h>
+#include <linux/jiffies.h>
+#include <linux/kernel.h>
+#include <linux/kfence.h>
+#include <linux/mm.h>
+#include <linux/random.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/string.h>
+#include <linux/tracepoint.h>
+#include <trace/events/printk.h>
+
+#include "kfence.h"
+
+/* Report as observed from console. */
+static struct {
+	spinlock_t lock;
+	int nlines;
+	char lines[2][256];
+} observed = {
+	.lock = __SPIN_LOCK_UNLOCKED(observed.lock),
+};
+
+/* Probe for console output: obtains observed lines of interest. */
+static void probe_console(void *ignore, const char *buf, size_t len)
+{
+	unsigned long flags;
+	int nlines;
+
+	spin_lock_irqsave(&observed.lock, flags);
+	nlines = observed.nlines;
+
+	if (strnstr(buf, "BUG: KFENCE: ", len) && strnstr(buf, "test_", len)) {
+		/*
+		 * KFENCE report and related to the test.
+		 *
+		 * The provided @buf is not NUL-terminated; copy no more than
+		 * @len bytes and let strscpy() add the missing NUL-terminator.
+		 */
+		strscpy(observed.lines[0], buf, min(len + 1, sizeof(observed.lines[0])));
+		nlines = 1;
+	} else if (nlines == 1 && (strnstr(buf, "at 0x", len) || strnstr(buf, "of 0x", len))) {
+		strscpy(observed.lines[nlines++], buf, min(len + 1, sizeof(observed.lines[0])));
+	}
+
+	WRITE_ONCE(observed.nlines, nlines); /* Publish new nlines. */
+	spin_unlock_irqrestore(&observed.lock, flags);
+}
+
+/* Check if a report related to the test exists. */
+static bool report_available(void)
+{
+	return READ_ONCE(observed.nlines) == ARRAY_SIZE(observed.lines);
+}
+
+/* Information we expect in a report. */
+struct expect_report {
+	enum kfence_error_type type; /* The type or error. */
+	void *fn; /* Function pointer to expected function where access occurred. */
+	char *addr; /* Address at which the bad access occurred. */
+	bool is_write; /* Is access a write. */
+};
+
+static const char *get_access_type(const struct expect_report *r)
+{
+	return r->is_write ? "write" : "read";
+}
+
+/* Check observed report matches information in @r. */
+static bool report_matches(const struct expect_report *r)
+{
+	bool ret = false;
+	unsigned long flags;
+	typeof(observed.lines) expect;
+	const char *end;
+	char *cur;
+
+	/* Doubled-checked locking. */
+	if (!report_available())
+		return false;
+
+	/* Generate expected report contents. */
+
+	/* Title */
+	cur = expect[0];
+	end = &expect[0][sizeof(expect[0]) - 1];
+	switch (r->type) {
+	case KFENCE_ERROR_OOB:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: out-of-bounds %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_UAF:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: use-after-free %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: memory corruption");
+		break;
+	case KFENCE_ERROR_INVALID:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: invalid %s",
+				 get_access_type(r));
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		cur += scnprintf(cur, end - cur, "BUG: KFENCE: invalid free");
+		break;
+	}
+
+	scnprintf(cur, end - cur, " in %pS", r->fn);
+	/* The exact offset won't match, remove it; also strip module name. */
+	cur = strchr(expect[0], '+');
+	if (cur)
+		*cur = '\0';
+
+	/* Access information */
+	cur = expect[1];
+	end = &expect[1][sizeof(expect[1]) - 1];
+
+	switch (r->type) {
+	case KFENCE_ERROR_OOB:
+		cur += scnprintf(cur, end - cur, "Out-of-bounds %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_UAF:
+		cur += scnprintf(cur, end - cur, "Use-after-free %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		cur += scnprintf(cur, end - cur, "Corrupted memory at");
+		break;
+	case KFENCE_ERROR_INVALID:
+		cur += scnprintf(cur, end - cur, "Invalid %s at", get_access_type(r));
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		cur += scnprintf(cur, end - cur, "Invalid free of");
+		break;
+	}
+
+	cur += scnprintf(cur, end - cur, " 0x%p", (void *)r->addr);
+
+	spin_lock_irqsave(&observed.lock, flags);
+	if (!report_available())
+		goto out; /* A new report is being captured. */
+
+	/* Finally match expected output to what we actually observed. */
+	ret = strstr(observed.lines[0], expect[0]) && strstr(observed.lines[1], expect[1]);
+out:
+	spin_unlock_irqrestore(&observed.lock, flags);
+	return ret;
+}
+
+/* ===== Test cases ===== */
+
+#define TEST_PRIV_WANT_MEMCACHE ((void *)1)
+
+/* Cache used by tests; if NULL, allocate from kmalloc instead. */
+static struct kmem_cache *test_cache;
+
+static size_t setup_test_cache(struct kunit *test, size_t size, slab_flags_t flags,
+			       void (*ctor)(void *))
+{
+	if (test->priv != TEST_PRIV_WANT_MEMCACHE)
+		return size;
+
+	kunit_info(test, "%s: size=%zu, ctor=%ps\n", __func__, size, ctor);
+
+	/*
+	 * Use SLAB_NOLEAKTRACE to prevent merging with existing caches. Any
+	 * other flag in SLAB_NEVER_MERGE also works. Use SLAB_ACCOUNT to
+	 * allocate via memcg, if enabled.
+	 */
+	flags |= SLAB_NOLEAKTRACE | SLAB_ACCOUNT;
+	test_cache = kmem_cache_create("test", size, 1, flags, ctor);
+	KUNIT_ASSERT_TRUE_MSG(test, test_cache, "could not create cache");
+
+	return size;
+}
+
+static void test_cache_destroy(void)
+{
+	if (!test_cache)
+		return;
+
+	kmem_cache_destroy(test_cache);
+	test_cache = NULL;
+}
+
+static inline size_t kmalloc_cache_alignment(size_t size)
+{
+	return kmalloc_caches[kmalloc_type(GFP_KERNEL)][kmalloc_index(size)]->align;
+}
+
+/* Must always inline to match stack trace against caller. */
+static __always_inline void test_free(void *ptr)
+{
+	if (test_cache)
+		kmem_cache_free(test_cache, ptr);
+	else
+		kfree(ptr);
+}
+
+/*
+ * If this should be a KFENCE allocation, and on which side the allocation and
+ * the closest guard page should be.
+ */
+enum allocation_policy {
+	ALLOCATE_ANY, /* KFENCE, any side. */
+	ALLOCATE_LEFT, /* KFENCE, left side of page. */
+	ALLOCATE_RIGHT, /* KFENCE, right side of page. */
+	ALLOCATE_NONE, /* No KFENCE allocation. */
+};
+
+/*
+ * Try to get a guarded allocation from KFENCE. Uses either kmalloc() or the
+ * current test_cache if set up.
+ */
+static void *test_alloc(struct kunit *test, size_t size, gfp_t gfp, enum allocation_policy policy)
+{
+	void *alloc;
+	unsigned long timeout, resched_after;
+	const char *policy_name;
+
+	switch (policy) {
+	case ALLOCATE_ANY:
+		policy_name = "any";
+		break;
+	case ALLOCATE_LEFT:
+		policy_name = "left";
+		break;
+	case ALLOCATE_RIGHT:
+		policy_name = "right";
+		break;
+	case ALLOCATE_NONE:
+		policy_name = "none";
+		break;
+	}
+
+	kunit_info(test, "%s: size=%zu, gfp=%x, policy=%s, cache=%i\n", __func__, size, gfp,
+		   policy_name, !!test_cache);
+
+	/*
+	 * 100x the sample interval should be more than enough to ensure we get
+	 * a KFENCE allocation eventually.
+	 */
+	timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL);
+	/*
+	 * Especially for non-preemption kernels, ensure the allocation-gate
+	 * timer can catch up: after @resched_after, every failed allocation
+	 * attempt yields, to ensure the allocation-gate timer is scheduled.
+	 */
+	resched_after = jiffies + msecs_to_jiffies(CONFIG_KFENCE_SAMPLE_INTERVAL);
+	do {
+		if (test_cache)
+			alloc = kmem_cache_alloc(test_cache, gfp);
+		else
+			alloc = kmalloc(size, gfp);
+
+		if (is_kfence_address(alloc)) {
+			if (policy == ALLOCATE_ANY)
+				return alloc;
+			if (policy == ALLOCATE_LEFT && IS_ALIGNED((unsigned long)alloc, PAGE_SIZE))
+				return alloc;
+			if (policy == ALLOCATE_RIGHT &&
+			    !IS_ALIGNED((unsigned long)alloc, PAGE_SIZE))
+				return alloc;
+		} else if (policy == ALLOCATE_NONE)
+			return alloc;
+
+		test_free(alloc);
+
+		if (time_after(jiffies, resched_after))
+			cond_resched();
+	} while (time_before(jiffies, timeout));
+
+	KUNIT_ASSERT_TRUE_MSG(test, false, "failed to allocate from KFENCE");
+	return NULL; /* Unreachable. */
+}
+
+static void test_out_of_bounds_read(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_out_of_bounds_read,
+		.is_write = false,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+
+	/*
+	 * If we don't have our own cache, adjust based on alignment, so that we
+	 * actually access guard pages on either side.
+	 */
+	if (!test_cache)
+		size = kmalloc_cache_alignment(size);
+
+	/* Test both sides. */
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf - 1;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	expect.addr = buf + size;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+}
+
+static void test_out_of_bounds_write(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_out_of_bounds_write,
+		.is_write = true,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf - 1;
+	WRITE_ONCE(*expect.addr, 42);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	test_free(buf);
+}
+
+static void test_use_after_free_read(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_use_after_free_read,
+		.is_write = false,
+	};
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	test_free(expect.addr);
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_double_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID_FREE,
+		.fn = test_double_free,
+	};
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	test_free(expect.addr);
+	test_free(expect.addr); /* Double-free. */
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_invalid_addr_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID_FREE,
+		.fn = test_invalid_addr_free,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	expect.addr = buf + 1; /* Free on invalid address. */
+	test_free(expect.addr); /* Invalid address free. */
+	test_free(buf); /* No error. */
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+static void test_corruption(struct kunit *test)
+{
+	size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_CORRUPTION,
+		.fn = test_corruption,
+	};
+	char *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+
+	/* Test both sides. */
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT);
+	expect.addr = buf + size;
+	WRITE_ONCE(*expect.addr, 42);
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	expect.addr = buf - 1;
+	WRITE_ONCE(*expect.addr, 42);
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/*
+ * KFENCE is unable to detect an OOB if the allocation's alignment requirements
+ * leave a gap between the object and the guard page. Specifically, an
+ * allocation of e.g. 73 bytes is aligned on 8 and 128 bytes for SLUB or SLAB
+ * respectively. Therefore it is impossible for the allocated object to
+ * contiguously line up with the right guard page.
+ *
+ * However, we test that an access to memory beyond the gap results in KFENCE
+ * detecting an OOB access.
+ */
+static void test_kmalloc_aligned_oob_read(struct kunit *test)
+{
+	const size_t size = 73;
+	const size_t align = kmalloc_cache_alignment(size);
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_OOB,
+		.fn = test_kmalloc_aligned_oob_read,
+		.is_write = false,
+	};
+	char *buf;
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+
+	/*
+	 * The object is offset to the right, so there won't be an OOB to the
+	 * left of it.
+	 */
+	READ_ONCE(*(buf - 1));
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/*
+	 * @buf must be aligned on @align, therefore buf + size belongs to the
+	 * same page -> no OOB.
+	 */
+	READ_ONCE(*(buf + size));
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/* Overflowing by @align bytes will result in an OOB. */
+	expect.addr = buf + size + align;
+	READ_ONCE(*expect.addr);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+
+	test_free(buf);
+}
+
+static void test_kmalloc_aligned_oob_write(struct kunit *test)
+{
+	const size_t size = 73;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_CORRUPTION,
+		.fn = test_kmalloc_aligned_oob_write,
+	};
+	char *buf;
+
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT);
+	/*
+	 * The object is offset to the right, so we won't get a page
+	 * fault immediately after it.
+	 */
+	expect.addr = buf + size;
+	WRITE_ONCE(*expect.addr, READ_ONCE(*expect.addr) + 1);
+	KUNIT_EXPECT_FALSE(test, report_available());
+	test_free(buf);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test cache shrinking and destroying with KFENCE. */
+static void test_shrink_memcache(struct kunit *test)
+{
+	const size_t size = 32;
+	void *buf;
+
+	setup_test_cache(test, size, 0, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	kmem_cache_shrink(test_cache);
+	test_free(buf);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+static void ctor_set_x(void *obj)
+{
+	/* Every object has at least 8 bytes. */
+	memset(obj, 'x', 8);
+}
+
+/* Ensure that SL*B does not modify KFENCE objects on bulk free. */
+static void test_free_bulk(struct kunit *test)
+{
+	int iter;
+
+	for (iter = 0; iter < 5; iter++) {
+		const size_t size = setup_test_cache(test, 8 + prandom_u32_max(300), 0,
+						     (iter & 1) ? ctor_set_x : NULL);
+		void *objects[] = {
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_RIGHT),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_LEFT),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+			test_alloc(test, size, GFP_KERNEL, ALLOCATE_NONE),
+		};
+
+		kmem_cache_free_bulk(test_cache, ARRAY_SIZE(objects), objects);
+		KUNIT_ASSERT_FALSE(test, report_available());
+		test_cache_destroy();
+	}
+}
+
+/* Test init-on-free works. */
+static void test_init_on_free(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_init_on_free,
+		.is_write = false,
+	};
+	int i;
+
+	if (!IS_ENABLED(CONFIG_INIT_ON_FREE_DEFAULT_ON))
+		return;
+	/* Assume it hasn't been disabled on command line. */
+
+	setup_test_cache(test, size, 0, NULL);
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	for (i = 0; i < size; i++)
+		expect.addr[i] = i + 1;
+	test_free(expect.addr);
+
+	for (i = 0; i < size; i++) {
+		/*
+		 * This may fail if the page was recycled by KFENCE and then
+		 * written to again -- this however, is near impossible with a
+		 * default config.
+		 */
+		KUNIT_EXPECT_EQ(test, expect.addr[i], (char)0);
+
+		if (!i) /* Only check first access to not fail test if page is ever re-protected. */
+			KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+	}
+}
+
+/* Ensure that constructors work properly. */
+static void test_memcache_ctor(struct kunit *test)
+{
+	const size_t size = 32;
+	char *buf;
+	int i;
+
+	setup_test_cache(test, size, 0, ctor_set_x);
+	buf = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+
+	for (i = 0; i < 8; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)'x');
+
+	test_free(buf);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+/* Test that memory is zeroed if requested. */
+static void test_gfpzero(struct kunit *test)
+{
+	const size_t size = PAGE_SIZE; /* PAGE_SIZE so we can use ALLOCATE_ANY. */
+	char *buf1, *buf2;
+	int i;
+
+	if (CONFIG_KFENCE_SAMPLE_INTERVAL > 100) {
+		kunit_warn(test, "skipping ... would take too long\n");
+		return;
+	}
+
+	setup_test_cache(test, size, 0, NULL);
+	buf1 = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	for (i = 0; i < size; i++)
+		buf1[i] = i + 1;
+	test_free(buf1);
+
+	/* Try to get same address again -- this can take a while. */
+	for (i = 0;; i++) {
+		buf2 = test_alloc(test, size, GFP_KERNEL | __GFP_ZERO, ALLOCATE_ANY);
+		if (buf1 == buf2)
+			break;
+		test_free(buf2);
+
+		if (i == CONFIG_KFENCE_NUM_OBJECTS) {
+			kunit_warn(test, "giving up ... cannot get same object back\n");
+			return;
+		}
+	}
+
+	for (i = 0; i < size; i++)
+		KUNIT_EXPECT_EQ(test, buf2[i], (char)0);
+
+	test_free(buf2);
+
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+static void test_invalid_access(struct kunit *test)
+{
+	const struct expect_report expect = {
+		.type = KFENCE_ERROR_INVALID,
+		.fn = test_invalid_access,
+		.addr = &__kfence_pool[10],
+		.is_write = false,
+	};
+
+	READ_ONCE(__kfence_pool[10]);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test SLAB_TYPESAFE_BY_RCU works. */
+static void test_memcache_typesafe_by_rcu(struct kunit *test)
+{
+	const size_t size = 32;
+	struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_memcache_typesafe_by_rcu,
+		.is_write = false,
+	};
+
+	setup_test_cache(test, size, SLAB_TYPESAFE_BY_RCU, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache); /* Want memcache. */
+
+	expect.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY);
+	*expect.addr = 42;
+
+	rcu_read_lock();
+	test_free(expect.addr);
+	KUNIT_EXPECT_EQ(test, *expect.addr, (char)42);
+	/*
+	 * Up to this point, memory should not have been freed yet, and
+	 * therefore there should be no KFENCE report from the above access.
+	 */
+	rcu_read_unlock();
+
+	/* Above access to @expect.addr should not have generated a report! */
+	KUNIT_EXPECT_FALSE(test, report_available());
+
+	/* Only after rcu_barrier() is the memory guaranteed to be freed. */
+	rcu_barrier();
+
+	/* Expect use-after-free. */
+	KUNIT_EXPECT_EQ(test, *expect.addr, (char)42);
+	KUNIT_EXPECT_TRUE(test, report_matches(&expect));
+}
+
+/* Test krealloc(). */
+static void test_krealloc(struct kunit *test)
+{
+	const size_t size = 32;
+	const struct expect_report expect = {
+		.type = KFENCE_ERROR_UAF,
+		.fn = test_krealloc,
+		.addr = test_alloc(test, size, GFP_KERNEL, ALLOCATE_ANY),
+		.is_write = false,
+	};
+	char *buf = expect.addr;
+	int i;
+
+	KUNIT_EXPECT_FALSE(test, test_cache);
+	KUNIT_EXPECT_EQ(test, ksize(buf), size); /* Precise size match after KFENCE alloc. */
+	for (i = 0; i < size; i++)
+		buf[i] = i + 1;
+
+	/* Check that we successfully change the size. */
+	buf = krealloc(buf, size * 3, GFP_KERNEL); /* Grow. */
+	/* Note: Might no longer be a KFENCE alloc. */
+	KUNIT_EXPECT_GE(test, ksize(buf), size * 3);
+	for (i = 0; i < size; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)(i + 1));
+	for (; i < size * 3; i++) /* Fill to extra bytes. */
+		buf[i] = i + 1;
+
+	buf = krealloc(buf, size * 2, GFP_KERNEL); /* Shrink. */
+	KUNIT_EXPECT_GE(test, ksize(buf), size * 2);
+	for (i = 0; i < size * 2; i++)
+		KUNIT_EXPECT_EQ(test, buf[i], (char)(i + 1));
+
+	buf = krealloc(buf, 0, GFP_KERNEL); /* Free. */
+	KUNIT_EXPECT_EQ(test, (unsigned long)buf, (unsigned long)ZERO_SIZE_PTR);
+	KUNIT_ASSERT_FALSE(test, report_available()); /* No reports yet! */
+
+	READ_ONCE(*expect.addr); /* Ensure krealloc() actually freed earlier KFENCE object. */
+	KUNIT_ASSERT_TRUE(test, report_matches(&expect));
+}
+
+/* Test that some objects from a bulk allocation belong to KFENCE pool. */
+static void test_memcache_alloc_bulk(struct kunit *test)
+{
+	const size_t size = 32;
+	bool pass = false;
+	unsigned long timeout;
+
+	setup_test_cache(test, size, 0, NULL);
+	KUNIT_EXPECT_TRUE(test, test_cache); /* Want memcache. */
+	/*
+	 * 100x the sample interval should be more than enough to ensure we get
+	 * a KFENCE allocation eventually.
+	 */
+	timeout = jiffies + msecs_to_jiffies(100 * CONFIG_KFENCE_SAMPLE_INTERVAL);
+	do {
+		void *objects[100];
+		int i, num = kmem_cache_alloc_bulk(test_cache, GFP_ATOMIC, ARRAY_SIZE(objects),
+						   objects);
+		if (!num)
+			continue;
+		for (i = 0; i < ARRAY_SIZE(objects); i++) {
+			if (is_kfence_address(objects[i])) {
+				pass = true;
+				break;
+			}
+		}
+		kmem_cache_free_bulk(test_cache, num, objects);
+		/*
+		 * kmem_cache_alloc_bulk() disables interrupts, and calling it
+		 * in a tight loop may not give KFENCE a chance to switch the
+		 * static branch. Call cond_resched() to let KFENCE chime in.
+		 */
+		cond_resched();
+	} while (!pass && time_before(jiffies, timeout));
+
+	KUNIT_EXPECT_TRUE(test, pass);
+	KUNIT_EXPECT_FALSE(test, report_available());
+}
+
+/*
+ * KUnit does not provide a way to provide arguments to tests, and we encode
+ * additional info in the name. Set up 2 tests per test case, one using the
+ * default allocator, and another using a custom memcache (suffix '-memcache').
+ */
+#define KFENCE_KUNIT_CASE(test_name)						\
+	{ .run_case = test_name, .name = #test_name },				\
+	{ .run_case = test_name, .name = #test_name "-memcache" }
+
+static struct kunit_case kfence_test_cases[] = {
+	KFENCE_KUNIT_CASE(test_out_of_bounds_read),
+	KFENCE_KUNIT_CASE(test_out_of_bounds_write),
+	KFENCE_KUNIT_CASE(test_use_after_free_read),
+	KFENCE_KUNIT_CASE(test_double_free),
+	KFENCE_KUNIT_CASE(test_invalid_addr_free),
+	KFENCE_KUNIT_CASE(test_corruption),
+	KFENCE_KUNIT_CASE(test_free_bulk),
+	KFENCE_KUNIT_CASE(test_init_on_free),
+	KUNIT_CASE(test_kmalloc_aligned_oob_read),
+	KUNIT_CASE(test_kmalloc_aligned_oob_write),
+	KUNIT_CASE(test_shrink_memcache),
+	KUNIT_CASE(test_memcache_ctor),
+	KUNIT_CASE(test_invalid_access),
+	KUNIT_CASE(test_gfpzero),
+	KUNIT_CASE(test_memcache_typesafe_by_rcu),
+	KUNIT_CASE(test_krealloc),
+	KUNIT_CASE(test_memcache_alloc_bulk),
+	{},
+};
+
+/* ===== End test cases ===== */
+
+static int test_init(struct kunit *test)
+{
+	unsigned long flags;
+	int i;
+
+	spin_lock_irqsave(&observed.lock, flags);
+	for (i = 0; i < ARRAY_SIZE(observed.lines); i++)
+		observed.lines[i][0] = '\0';
+	observed.nlines = 0;
+	spin_unlock_irqrestore(&observed.lock, flags);
+
+	/* Any test with 'memcache' in its name will want a memcache. */
+	if (strstr(test->name, "memcache"))
+		test->priv = TEST_PRIV_WANT_MEMCACHE;
+	else
+		test->priv = NULL;
+
+	return 0;
+}
+
+static void test_exit(struct kunit *test)
+{
+	test_cache_destroy();
+}
+
+static struct kunit_suite kfence_test_suite = {
+	.name = "kfence",
+	.test_cases = kfence_test_cases,
+	.init = test_init,
+	.exit = test_exit,
+};
+static struct kunit_suite *kfence_test_suites[] = { &kfence_test_suite, NULL };
+
+static void register_tracepoints(struct tracepoint *tp, void *ignore)
+{
+	check_trace_callback_type_console(probe_console);
+	if (!strcmp(tp->name, "console"))
+		WARN_ON(tracepoint_probe_register(tp, probe_console, NULL));
+}
+
+static void unregister_tracepoints(struct tracepoint *tp, void *ignore)
+{
+	if (!strcmp(tp->name, "console"))
+		tracepoint_probe_unregister(tp, probe_console, NULL);
+}
+
+/*
+ * We only want to do tracepoints setup and teardown once, therefore we have to
+ * customize the init and exit functions and cannot rely on kunit_test_suite().
+ */
+static int __init kfence_test_init(void)
+{
+	/*
+	 * Because we want to be able to build the test as a module, we need to
+	 * iterate through all known tracepoints, since the static registration
+	 * won't work here.
+	 */
+	for_each_kernel_tracepoint(register_tracepoints, NULL);
+	return __kunit_test_suites_init(kfence_test_suites);
+}
+
+static void kfence_test_exit(void)
+{
+	__kunit_test_suites_exit(kfence_test_suites);
+	for_each_kernel_tracepoint(unregister_tracepoints, NULL);
+	tracepoint_synchronize_unregister();
+}
+
+late_initcall(kfence_test_init);
+module_exit(kfence_test_exit);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Alexander Potapenko <glider@google.com>, Marco Elver <elver@google.com>");
diff --git a/mm/kfence/report.c b/mm/kfence/report.c
new file mode 100644
index 0000000..e3f7145
--- /dev/null
+++ b/mm/kfence/report.c
@@ -0,0 +1,268 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * KFENCE reporting.
+ *
+ * Copyright (C) 2020, Google LLC.
+ */
+
+#include <stdarg.h>
+
+#include <linux/kernel.h>
+#include <linux/lockdep.h>
+#include <linux/printk.h>
+#include <linux/sched/debug.h>
+#include <linux/seq_file.h>
+#include <linux/stacktrace.h>
+#include <linux/string.h>
+#include <trace/events/error_report.h>
+
+#include <asm/kfence.h>
+
+#include "kfence.h"
+
+/* May be overridden by <asm/kfence.h>. */
+#ifndef ARCH_FUNC_PREFIX
+#define ARCH_FUNC_PREFIX ""
+#endif
+
+extern bool no_hash_pointers;
+
+/* Helper function to either print to a seq_file or to console. */
+__printf(2, 3)
+static void seq_con_printf(struct seq_file *seq, const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	if (seq)
+		seq_vprintf(seq, fmt, args);
+	else
+		vprintk(fmt, args);
+	va_end(args);
+}
+
+/*
+ * Get the number of stack entries to skip to get out of MM internals. @type is
+ * optional, and if set to NULL, assumes an allocation or free stack.
+ */
+static int get_stack_skipnr(const unsigned long stack_entries[], int num_entries,
+			    const enum kfence_error_type *type)
+{
+	char buf[64];
+	int skipnr, fallback = 0;
+
+	if (type) {
+		/* Depending on error type, find different stack entries. */
+		switch (*type) {
+		case KFENCE_ERROR_UAF:
+		case KFENCE_ERROR_OOB:
+		case KFENCE_ERROR_INVALID:
+			/*
+			 * kfence_handle_page_fault() may be called with pt_regs
+			 * set to NULL; in that case we'll simply show the full
+			 * stack trace.
+			 */
+			return 0;
+		case KFENCE_ERROR_CORRUPTION:
+		case KFENCE_ERROR_INVALID_FREE:
+			break;
+		}
+	}
+
+	for (skipnr = 0; skipnr < num_entries; skipnr++) {
+		int len = scnprintf(buf, sizeof(buf), "%ps", (void *)stack_entries[skipnr]);
+
+		if (str_has_prefix(buf, ARCH_FUNC_PREFIX "kfence_") ||
+		    str_has_prefix(buf, ARCH_FUNC_PREFIX "__kfence_") ||
+		    !strncmp(buf, ARCH_FUNC_PREFIX "__slab_free", len)) {
+			/*
+			 * In case of tail calls from any of the below
+			 * to any of the above.
+			 */
+			fallback = skipnr + 1;
+		}
+
+		/* Also the *_bulk() variants by only checking prefixes. */
+		if (str_has_prefix(buf, ARCH_FUNC_PREFIX "kfree") ||
+		    str_has_prefix(buf, ARCH_FUNC_PREFIX "kmem_cache_free") ||
+		    str_has_prefix(buf, ARCH_FUNC_PREFIX "__kmalloc") ||
+		    str_has_prefix(buf, ARCH_FUNC_PREFIX "kmem_cache_alloc"))
+			goto found;
+	}
+	if (fallback < num_entries)
+		return fallback;
+found:
+	skipnr++;
+	return skipnr < num_entries ? skipnr : 0;
+}
+
+static void kfence_print_stack(struct seq_file *seq, const struct kfence_metadata *meta,
+			       bool show_alloc)
+{
+	const struct kfence_track *track = show_alloc ? &meta->alloc_track : &meta->free_track;
+
+	if (track->num_stack_entries) {
+		/* Skip allocation/free internals stack. */
+		int i = get_stack_skipnr(track->stack_entries, track->num_stack_entries, NULL);
+
+		/* stack_trace_seq_print() does not exist; open code our own. */
+		for (; i < track->num_stack_entries; i++)
+			seq_con_printf(seq, " %pS\n", (void *)track->stack_entries[i]);
+	} else {
+		seq_con_printf(seq, " no %s stack\n", show_alloc ? "allocation" : "deallocation");
+	}
+}
+
+void kfence_print_object(struct seq_file *seq, const struct kfence_metadata *meta)
+{
+	const int size = abs(meta->size);
+	const unsigned long start = meta->addr;
+	const struct kmem_cache *const cache = meta->cache;
+
+	lockdep_assert_held(&meta->lock);
+
+	if (meta->state == KFENCE_OBJECT_UNUSED) {
+		seq_con_printf(seq, "kfence-#%td unused\n", meta - kfence_metadata);
+		return;
+	}
+
+	seq_con_printf(seq,
+		       "kfence-#%td [0x%p-0x%p"
+		       ", size=%d, cache=%s] allocated by task %d:\n",
+		       meta - kfence_metadata, (void *)start, (void *)(start + size - 1), size,
+		       (cache && cache->name) ? cache->name : "<destroyed>", meta->alloc_track.pid);
+	kfence_print_stack(seq, meta, true);
+
+	if (meta->state == KFENCE_OBJECT_FREED) {
+		seq_con_printf(seq, "\nfreed by task %d:\n", meta->free_track.pid);
+		kfence_print_stack(seq, meta, false);
+	}
+}
+
+/*
+ * Show bytes at @addr that are different from the expected canary values, up to
+ * @max_bytes.
+ */
+static void print_diff_canary(unsigned long address, size_t bytes_to_show,
+			      const struct kfence_metadata *meta)
+{
+	const unsigned long show_until_addr = address + bytes_to_show;
+	const u8 *cur, *end;
+
+	/* Do not show contents of object nor read into following guard page. */
+	end = (const u8 *)(address < meta->addr ? min(show_until_addr, meta->addr)
+						: min(show_until_addr, PAGE_ALIGN(address)));
+
+	pr_cont("[");
+	for (cur = (const u8 *)address; cur < end; cur++) {
+		if (*cur == KFENCE_CANARY_PATTERN(cur))
+			pr_cont(" .");
+		else if (no_hash_pointers)
+			pr_cont(" 0x%02x", *cur);
+		else /* Do not leak kernel memory in non-debug builds. */
+			pr_cont(" !");
+	}
+	pr_cont(" ]");
+}
+
+static const char *get_access_type(bool is_write)
+{
+	return is_write ? "write" : "read";
+}
+
+void kfence_report_error(unsigned long address, bool is_write, struct pt_regs *regs,
+			 const struct kfence_metadata *meta, enum kfence_error_type type)
+{
+	unsigned long stack_entries[KFENCE_STACK_DEPTH] = { 0 };
+	const ptrdiff_t object_index = meta ? meta - kfence_metadata : -1;
+	int num_stack_entries;
+	int skipnr = 0;
+
+	if (regs) {
+		num_stack_entries = stack_trace_save_regs(regs, stack_entries, KFENCE_STACK_DEPTH, 0);
+	} else {
+		num_stack_entries = stack_trace_save(stack_entries, KFENCE_STACK_DEPTH, 1);
+		skipnr = get_stack_skipnr(stack_entries, num_stack_entries, &type);
+	}
+
+	/* Require non-NULL meta, except if KFENCE_ERROR_INVALID. */
+	if (WARN_ON(type != KFENCE_ERROR_INVALID && !meta))
+		return;
+
+	if (meta)
+		lockdep_assert_held(&meta->lock);
+	/*
+	 * Because we may generate reports in printk-unfriendly parts of the
+	 * kernel, such as scheduler code, the use of printk() could deadlock.
+	 * Until such time that all printing code here is safe in all parts of
+	 * the kernel, accept the risk, and just get our message out (given the
+	 * system might already behave unpredictably due to the memory error).
+	 * As such, also disable lockdep to hide warnings, and avoid disabling
+	 * lockdep for the rest of the kernel.
+	 */
+	lockdep_off();
+
+	pr_err("==================================================================\n");
+	/* Print report header. */
+	switch (type) {
+	case KFENCE_ERROR_OOB: {
+		const bool left_of_object = address < meta->addr;
+
+		pr_err("BUG: KFENCE: out-of-bounds %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Out-of-bounds %s at 0x%p (%luB %s of kfence-#%td):\n",
+		       get_access_type(is_write), (void *)address,
+		       left_of_object ? meta->addr - address : address - meta->addr,
+		       left_of_object ? "left" : "right", object_index);
+		break;
+	}
+	case KFENCE_ERROR_UAF:
+		pr_err("BUG: KFENCE: use-after-free %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Use-after-free %s at 0x%p (in kfence-#%td):\n",
+		       get_access_type(is_write), (void *)address, object_index);
+		break;
+	case KFENCE_ERROR_CORRUPTION:
+		pr_err("BUG: KFENCE: memory corruption in %pS\n\n", (void *)stack_entries[skipnr]);
+		pr_err("Corrupted memory at 0x%p ", (void *)address);
+		print_diff_canary(address, 16, meta);
+		pr_cont(" (in kfence-#%td):\n", object_index);
+		break;
+	case KFENCE_ERROR_INVALID:
+		pr_err("BUG: KFENCE: invalid %s in %pS\n\n", get_access_type(is_write),
+		       (void *)stack_entries[skipnr]);
+		pr_err("Invalid %s at 0x%p:\n", get_access_type(is_write),
+		       (void *)address);
+		break;
+	case KFENCE_ERROR_INVALID_FREE:
+		pr_err("BUG: KFENCE: invalid free in %pS\n\n", (void *)stack_entries[skipnr]);
+		pr_err("Invalid free of 0x%p (in kfence-#%td):\n", (void *)address,
+		       object_index);
+		break;
+	}
+
+	/* Print stack trace and object info. */
+	stack_trace_print(stack_entries + skipnr, num_stack_entries - skipnr, 0);
+
+	if (meta) {
+		pr_err("\n");
+		kfence_print_object(NULL, meta);
+	}
+
+	/* Print report footer. */
+	pr_err("\n");
+	if (no_hash_pointers && regs)
+		show_regs(regs);
+	else
+		dump_stack_print_info(KERN_ERR);
+	trace_error_report_end(ERROR_DETECTOR_KFENCE, address);
+	pr_err("==================================================================\n");
+
+	lockdep_on();
+
+	if (panic_on_warn)
+		panic("panic_on_warn set ...\n");
+
+	/* We encountered a memory unsafety error, taint the kernel! */
+	add_taint(TAINT_BAD_PAGE, LOCKDEP_STILL_OK);
+}
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 312942d..67707bf 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -97,6 +97,7 @@
 #include <linux/atomic.h>
 
 #include <linux/kasan.h>
+#include <linux/kfence.h>
 #include <linux/kmemleak.h>
 #include <linux/memory_hotplug.h>
 
@@ -589,7 +590,7 @@
 	atomic_set(&object->use_count, 1);
 	object->flags = OBJECT_ALLOCATED;
 	object->pointer = ptr;
-	object->size = size;
+	object->size = kfence_ksize((void *)ptr) ?: size;
 	object->excess_ref = 0;
 	object->min_count = min_count;
 	object->count = 0;			/* white color initially */
diff --git a/mm/ksm.c b/mm/ksm.c
index 0bbae78..516f4c5 100644
--- a/mm/ksm.c
+++ b/mm/ksm.c
@@ -2660,31 +2660,6 @@
 		goto again;
 }
 
-bool reuse_ksm_page(struct page *page,
-		    struct vm_area_struct *vma,
-		    unsigned long address)
-{
-#ifdef CONFIG_DEBUG_VM
-	if (WARN_ON(is_zero_pfn(page_to_pfn(page))) ||
-			WARN_ON(!page_mapped(page)) ||
-			WARN_ON(!PageLocked(page))) {
-		dump_page(page, "reuse_ksm_page");
-		return false;
-	}
-#endif
-
-	if (PageSwapCache(page) || !page_stable_node(page))
-		return false;
-	/* Prohibit parallel get_ksm_page() */
-	if (!page_ref_freeze(page, 1))
-		return false;
-
-	page_move_anon_rmap(page, vma);
-	page->index = linear_page_index(vma, address);
-	page_ref_unfreeze(page, 1);
-
-	return true;
-}
 #ifdef CONFIG_MIGRATION
 void ksm_migrate_page(struct page *newpage, struct page *oldpage)
 {
diff --git a/mm/madvise.c b/mm/madvise.c
index 1107e99..2175cf0 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -17,6 +17,7 @@
 #include <linux/falloc.h>
 #include <linux/fadvise.h>
 #include <linux/sched.h>
+#include <linux/sched/mm.h>
 #include <linux/ksm.h>
 #include <linux/fs.h>
 #include <linux/file.h>
@@ -27,7 +28,7 @@
 #include <linux/swapops.h>
 #include <linux/shmem_fs.h>
 #include <linux/mmu_notifier.h>
-
+#include <linux/uio.h>
 #include <asm/tlb.h>
 
 #include "internal.h"
@@ -134,7 +135,7 @@
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*prev = vma_merge(mm, *prev, start, end, new_flags, vma->anon_vma,
 			  vma->vm_file, pgoff, vma_policy(vma),
-			  vma->vm_userfaultfd_ctx);
+			  vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*prev) {
 		vma = *prev;
 		goto success;
@@ -254,6 +255,7 @@
 			     struct vm_area_struct **prev,
 			     unsigned long start, unsigned long end)
 {
+	struct mm_struct *mm = vma->vm_mm;
 	struct file *file = vma->vm_file;
 	loff_t offset;
 
@@ -290,10 +292,10 @@
 	get_file(file);
 	offset = (loff_t)(start - vma->vm_start)
 			+ ((loff_t)vma->vm_pgoff << PAGE_SHIFT);
-	up_read(&current->mm->mmap_sem);
+	up_read(&mm->mmap_sem);
 	vfs_fadvise(file, offset, end - start, POSIX_FADV_WILLNEED);
 	fput(file);
-	down_read(&current->mm->mmap_sem);
+	down_read(&mm->mmap_sem);
 	return 0;
 }
 
@@ -762,6 +764,8 @@
 				  unsigned long start, unsigned long end,
 				  int behavior)
 {
+	struct mm_struct *mm = vma->vm_mm;
+
 	*prev = vma;
 	if (!can_madv_lru_vma(vma))
 		return -EINVAL;
@@ -769,8 +773,8 @@
 	if (!userfaultfd_remove(vma, start, end)) {
 		*prev = NULL; /* mmap_sem has been dropped, prev is stale */
 
-		down_read(&current->mm->mmap_sem);
-		vma = find_vma(current->mm, start);
+		down_read(&mm->mmap_sem);
+		vma = find_vma(mm, start);
 		if (!vma)
 			return -ENOMEM;
 		if (start < vma->vm_start) {
@@ -824,6 +828,7 @@
 	loff_t offset;
 	int error;
 	struct file *f;
+	struct mm_struct *mm = vma->vm_mm;
 
 	*prev = NULL;	/* tell sys_madvise we drop mmap_sem */
 
@@ -851,13 +856,13 @@
 	get_file(f);
 	if (userfaultfd_remove(vma, start, end)) {
 		/* mmap_sem was not released by userfaultfd_remove() */
-		up_read(&current->mm->mmap_sem);
+		up_read(&mm->mmap_sem);
 	}
 	error = vfs_fallocate(f,
 				FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
 				offset, end - start);
 	fput(f);
-	down_read(&current->mm->mmap_sem);
+	down_read(&mm->mmap_sem);
 	return error;
 }
 
@@ -989,6 +994,18 @@
 	}
 }
 
+static bool
+process_madvise_behavior_valid(int behavior)
+{
+	switch (behavior) {
+	case MADV_COLD:
+	case MADV_PAGEOUT:
+		return true;
+	default:
+		return false;
+	}
+}
+
 /*
  * The madvise(2) system call.
  *
@@ -1036,6 +1053,11 @@
  *  MADV_DONTDUMP - the application wants to prevent pages in the given range
  *		from being included in its core dump.
  *  MADV_DODUMP - cancel MADV_DONTDUMP: no longer exclude from core dump.
+ *  MADV_COLD - the application is not expected to use this memory soon,
+ *		deactivate pages in this range so that they can be reclaimed
+ *		easily if memory pressure hanppens.
+ *  MADV_PAGEOUT - the application is not expected to use this memory soon,
+ *		page out the pages in this range immediately.
  *
  * return values:
  *  zero    - success
@@ -1050,7 +1072,7 @@
  *  -EBADF  - map exists, but area maps something that isn't a file.
  *  -EAGAIN - a kernel resource was temporarily unavailable.
  */
-SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int behavior)
 {
 	unsigned long end, tmp;
 	struct vm_area_struct *vma, *prev;
@@ -1088,10 +1110,27 @@
 
 	write = madvise_need_mmap_write(behavior);
 	if (write) {
-		if (down_write_killable(&current->mm->mmap_sem))
+		if (down_write_killable(&mm->mmap_sem))
 			return -EINTR;
+
+		/*
+		 * We may have stolen the mm from another process
+		 * that is undergoing core dumping.
+		 *
+		 * Right now that's io_ring, in the future it may
+		 * be remote process management and not "current"
+		 * at all.
+		 *
+		 * We need to fix core dumping to not do this,
+		 * but for now we have the mmget_still_valid()
+		 * model.
+		 */
+		if (!mmget_still_valid(mm)) {
+			up_write(&mm->mmap_sem);
+			return -EINTR;
+		}
 	} else {
-		down_read(&current->mm->mmap_sem);
+		down_read(&mm->mmap_sem);
 	}
 
 	/*
@@ -1099,7 +1138,7 @@
 	 * ranges, just ignore them, but return -ENOMEM at the end.
 	 * - different from the way of handling in mlock etc.
 	 */
-	vma = find_vma_prev(current->mm, start, &prev);
+	vma = find_vma_prev(mm, start, &prev);
 	if (vma && start > vma->vm_start)
 		prev = vma;
 
@@ -1136,14 +1175,101 @@
 		if (prev)
 			vma = prev->vm_next;
 		else	/* madvise_remove dropped mmap_sem */
-			vma = find_vma(current->mm, start);
+			vma = find_vma(mm, start);
 	}
 out:
 	blk_finish_plug(&plug);
 	if (write)
-		up_write(&current->mm->mmap_sem);
+		up_write(&mm->mmap_sem);
 	else
-		up_read(&current->mm->mmap_sem);
+		up_read(&mm->mmap_sem);
 
 	return error;
 }
+
+SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior)
+{
+	return do_madvise(current->mm, start, len_in, behavior);
+}
+
+SYSCALL_DEFINE5(process_madvise, int, pidfd, const struct iovec __user *, vec,
+		size_t, vlen, int, behavior, unsigned int, flags)
+{
+	ssize_t ret;
+	struct iovec iovstack[UIO_FASTIOV], iovec;
+	struct iovec *iov = iovstack;
+	struct iov_iter iter;
+	struct pid *pid;
+	struct task_struct *task;
+	struct mm_struct *mm;
+	size_t total_len;
+	unsigned int f_flags;
+
+	if (flags != 0) {
+		ret = -EINVAL;
+		goto out;
+	}
+
+	ret = import_iovec(READ, vec, vlen, ARRAY_SIZE(iovstack), &iov, &iter);
+	if (ret < 0)
+		goto out;
+
+	pid = pidfd_get_pid(pidfd, &f_flags);
+	if (IS_ERR(pid)) {
+		ret = PTR_ERR(pid);
+		goto free_iov;
+	}
+
+	task = get_pid_task(pid, PIDTYPE_PID);
+	if (!task) {
+		ret = -ESRCH;
+		goto put_pid;
+	}
+
+	if (!process_madvise_behavior_valid(behavior)) {
+		ret = -EINVAL;
+		goto release_task;
+	}
+
+	/* Require PTRACE_MODE_READ to avoid leaking ASLR metadata. */
+	mm = mm_access(task, PTRACE_MODE_READ_FSCREDS);
+	if (IS_ERR_OR_NULL(mm)) {
+		ret = IS_ERR(mm) ? PTR_ERR(mm) : -ESRCH;
+		goto release_task;
+	}
+
+	/*
+	 * Require CAP_SYS_NICE for influencing process performance. Note that
+	 * only non-destructive hints are currently supported.
+	 */
+	if (!capable(CAP_SYS_NICE)) {
+		ret = -EPERM;
+		goto release_mm;
+	}
+
+	total_len = iov_iter_count(&iter);
+
+	while (iov_iter_count(&iter)) {
+		iovec = iov_iter_iovec(&iter);
+		ret = do_madvise(mm, (unsigned long)iovec.iov_base,
+				 iovec.iov_len, behavior);
+		if (ret < 0)
+			break;
+		iov_iter_advance(&iter, iovec.iov_len);
+	}
+
+	if (ret == 0)
+		ret = total_len - iov_iter_count(&iter);
+
+release_mm:
+	mmput(mm);
+
+release_task:
+	put_task_struct(task);
+put_pid:
+	put_pid(pid);
+free_iov:
+	kfree(iov);
+out:
+	return ret;
+}
\ No newline at end of file
diff --git a/mm/memblock.c b/mm/memblock.c
index 38cef8b..e13003e 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -788,6 +788,9 @@
 	kmemleak_free_part_phys(base, size);
 	return memblock_remove_range(&memblock.reserved, base, size);
 }
+#ifdef CONFIG_ARCH_KEEP_MEMBLOCK
+EXPORT_SYMBOL_GPL(memblock_free);
+#endif
 
 int __init_memblock memblock_reserve(phys_addr_t base, phys_addr_t size)
 {
@@ -1588,6 +1591,7 @@
 
 	return (memblock.memory.regions[idx].base + memblock.memory.regions[idx].size);
 }
+EXPORT_SYMBOL_GPL(memblock_end_of_DRAM);
 
 static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
 {
diff --git a/mm/memory.c b/mm/memory.c
index 4bb7c6a..aff652d 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -72,6 +72,8 @@
 #include <linux/oom.h>
 #include <linux/numa.h>
 
+#include <trace/events/kmem.h>
+
 #include <asm/io.h>
 #include <asm/mmu_context.h>
 #include <asm/pgalloc.h>
@@ -152,6 +154,23 @@
 }
 early_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);
+}
+EXPORT_SYMBOL_GPL(mm_trace_rss_stat);
 
 #if defined(SPLIT_RSS_COUNTING)
 
@@ -2691,49 +2710,25 @@
 	 * not dirty accountable.
 	 */
 	if (PageAnon(vmf->page)) {
-		int total_map_swapcount;
-		if (PageKsm(vmf->page) && (PageSwapCache(vmf->page) ||
-					   page_count(vmf->page) != 1))
+		struct page *page = vmf->page;
+
+		/* PageKsm() doesn't necessarily raise the page refcount */
+		if (PageKsm(page) || page_count(page) != 1)
 			goto copy;
-		if (!trylock_page(vmf->page)) {
-			get_page(vmf->page);
-			pte_unmap_unlock(vmf->pte, vmf->ptl);
-			lock_page(vmf->page);
-			vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
-					vmf->address, &vmf->ptl);
-			if (!pte_same(*vmf->pte, vmf->orig_pte)) {
-				unlock_page(vmf->page);
-				pte_unmap_unlock(vmf->pte, vmf->ptl);
-				put_page(vmf->page);
-				return 0;
-			}
-			put_page(vmf->page);
+		if (!trylock_page(page))
+			goto copy;
+		if (PageKsm(page) || page_mapcount(page) != 1 || page_count(page) != 1) {
+			unlock_page(page);
+			goto copy;
 		}
-		if (PageKsm(vmf->page)) {
-			bool reused = reuse_ksm_page(vmf->page, vmf->vma,
-						     vmf->address);
-			unlock_page(vmf->page);
-			if (!reused)
-				goto copy;
-			wp_page_reuse(vmf);
-			return VM_FAULT_WRITE;
-		}
-		if (reuse_swap_page(vmf->page, &total_map_swapcount)) {
-			if (total_map_swapcount == 1) {
-				/*
-				 * The page is all ours. Move it to
-				 * our anon_vma so the rmap code will
-				 * not search our parent or siblings.
-				 * Protected against the rmap code by
-				 * the page lock.
-				 */
-				page_move_anon_rmap(vmf->page, vma);
-			}
-			unlock_page(vmf->page);
-			wp_page_reuse(vmf);
-			return VM_FAULT_WRITE;
-		}
-		unlock_page(vmf->page);
+		/*
+		 * Ok, we've got the only map reference, and the only
+		 * page count reference, and the page is locked,
+		 * it's dark out, and we're wearing sunglasses. Hit it.
+		 */
+		unlock_page(page);
+		wp_page_reuse(vmf);
+		return VM_FAULT_WRITE;
 	} else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
 					(VM_WRITE|VM_SHARED))) {
 		return wp_page_shared(vmf);
@@ -3341,13 +3336,14 @@
 	unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
 	pmd_t entry;
 	int i;
-	vm_fault_t ret;
+	vm_fault_t ret = VM_FAULT_FALLBACK;
 
 	if (!transhuge_vma_suitable(vma, haddr))
-		return VM_FAULT_FALLBACK;
+		return ret;
 
-	ret = VM_FAULT_FALLBACK;
-	page = compound_head(page);
+        page = compound_head(page);
+        if (compound_order(page) != HPAGE_PMD_ORDER)
+                return ret;
 
 	/*
 	 * Archs like ppc64 need additonal space to store information
@@ -3631,9 +3627,11 @@
 	 * something).
 	 */
 	if (vma->vm_ops->map_pages && fault_around_bytes >> PAGE_SHIFT > 1) {
-		ret = do_fault_around(vmf);
-		if (ret)
-			return ret;
+		if (likely(!userfaultfd_minor(vmf->vma))) {
+			ret = do_fault_around(vmf);
+			if (ret)
+				return ret;
+		}
 	}
 
 	ret = __do_fault(vmf);
diff --git a/mm/mempolicy.c b/mm/mempolicy.c
index 2c4082f..531a8382 100644
--- a/mm/mempolicy.c
+++ b/mm/mempolicy.c
@@ -759,7 +759,8 @@
 			((vmstart - vma->vm_start) >> PAGE_SHIFT);
 		prev = vma_merge(mm, prev, vmstart, vmend, vma->vm_flags,
 				 vma->anon_vma, vma->vm_file, pgoff,
-				 new_pol, vma->vm_userfaultfd_ctx);
+				 new_pol, vma->vm_userfaultfd_ctx,
+				 vma_get_anon_name(vma));
 		if (prev) {
 			vma = prev;
 			next = vma->vm_next;
@@ -853,12 +854,12 @@
 
 static int lookup_node(struct mm_struct *mm, unsigned long addr)
 {
-	struct page *p;
+	struct page *p = NULL;
 	int err;
 
 	int locked = 1;
 	err = get_user_pages_locked(addr & PAGE_MASK, 1, 0, &p, &locked);
-	if (err >= 0) {
+	if (err > 0) {
 		err = page_to_nid(p);
 		put_page(p);
 	}
diff --git a/mm/mlock.c b/mm/mlock.c
index a72c1ee..646acba 100644
--- a/mm/mlock.c
+++ b/mm/mlock.c
@@ -535,7 +535,7 @@
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*prev = vma_merge(mm, *prev, start, end, newflags, vma->anon_vma,
 			  vma->vm_file, pgoff, vma_policy(vma),
-			  vma->vm_userfaultfd_ctx);
+			  vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*prev) {
 		vma = *prev;
 		goto success;
diff --git a/mm/mmap.c b/mm/mmap.c
index ba78f1f..c99d5b5 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -1009,7 +1009,8 @@
  */
 static inline int is_mergeable_vma(struct vm_area_struct *vma,
 				struct file *file, unsigned long vm_flags,
-				struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+				struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+				const char __user *anon_name)
 {
 	/*
 	 * VM_SOFTDIRTY should not prevent from VMA merging, if we
@@ -1027,6 +1028,8 @@
 		return 0;
 	if (!is_mergeable_vm_userfaultfd_ctx(vma, vm_userfaultfd_ctx))
 		return 0;
+	if (vma_get_anon_name(vma) != anon_name)
+		return 0;
 	return 1;
 }
 
@@ -1059,9 +1062,10 @@
 can_vma_merge_before(struct vm_area_struct *vma, unsigned long vm_flags,
 		     struct anon_vma *anon_vma, struct file *file,
 		     pgoff_t vm_pgoff,
-		     struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+		     struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+		     const char __user *anon_name)
 {
-	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) &&
+	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
 	    is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
 		if (vma->vm_pgoff == vm_pgoff)
 			return 1;
@@ -1080,9 +1084,10 @@
 can_vma_merge_after(struct vm_area_struct *vma, unsigned long vm_flags,
 		    struct anon_vma *anon_vma, struct file *file,
 		    pgoff_t vm_pgoff,
-		    struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+		    struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+		    const char __user *anon_name)
 {
-	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx) &&
+	if (is_mergeable_vma(vma, file, vm_flags, vm_userfaultfd_ctx, anon_name) &&
 	    is_mergeable_anon_vma(anon_vma, vma->anon_vma, vma)) {
 		pgoff_t vm_pglen;
 		vm_pglen = vma_pages(vma);
@@ -1093,9 +1098,9 @@
 }
 
 /*
- * Given a mapping request (addr,end,vm_flags,file,pgoff), figure out
- * whether that can be merged with its predecessor or its successor.
- * Or both (it neatly fills a hole).
+ * Given a mapping request (addr,end,vm_flags,file,pgoff,anon_name),
+ * figure out whether that can be merged with its predecessor or its
+ * successor.  Or both (it neatly fills a hole).
  *
  * In most cases - when called for mmap, brk or mremap - [addr,end) is
  * certain not to be mapped by the time vma_merge is called; but when
@@ -1137,7 +1142,8 @@
 			unsigned long end, unsigned long vm_flags,
 			struct anon_vma *anon_vma, struct file *file,
 			pgoff_t pgoff, struct mempolicy *policy,
-			struct vm_userfaultfd_ctx vm_userfaultfd_ctx)
+			struct vm_userfaultfd_ctx vm_userfaultfd_ctx,
+			const char __user *anon_name)
 {
 	pgoff_t pglen = (end - addr) >> PAGE_SHIFT;
 	struct vm_area_struct *area, *next;
@@ -1170,7 +1176,8 @@
 			mpol_equal(vma_policy(prev), policy) &&
 			can_vma_merge_after(prev, vm_flags,
 					    anon_vma, file, pgoff,
-					    vm_userfaultfd_ctx)) {
+					    vm_userfaultfd_ctx,
+					    anon_name)) {
 		/*
 		 * OK, it can.  Can we now merge in the successor as well?
 		 */
@@ -1179,7 +1186,8 @@
 				can_vma_merge_before(next, vm_flags,
 						     anon_vma, file,
 						     pgoff+pglen,
-						     vm_userfaultfd_ctx) &&
+						     vm_userfaultfd_ctx,
+						     anon_name) &&
 				is_mergeable_anon_vma(prev->anon_vma,
 						      next->anon_vma, NULL)) {
 							/* cases 1, 6 */
@@ -1202,7 +1210,8 @@
 			mpol_equal(policy, vma_policy(next)) &&
 			can_vma_merge_before(next, vm_flags,
 					     anon_vma, file, pgoff+pglen,
-					     vm_userfaultfd_ctx)) {
+					     vm_userfaultfd_ctx,
+					     anon_name)) {
 		if (prev && addr < prev->vm_end)	/* case 4 */
 			err = __vma_adjust(prev, prev->vm_start,
 					 addr, prev->vm_pgoff, NULL, next);
@@ -1754,7 +1763,7 @@
 	 * Can we just expand an old mapping?
 	 */
 	vma = vma_merge(mm, prev, addr, addr + len, vm_flags,
-			NULL, file, pgoff, NULL, NULL_VM_UFFD_CTX);
+			NULL, file, pgoff, NULL, NULL_VM_UFFD_CTX, NULL);
 	if (vma)
 		goto out;
 
@@ -3045,7 +3054,7 @@
 
 	/* Can we just expand an old private anonymous mapping? */
 	vma = vma_merge(mm, prev, addr, addr + len, flags,
-			NULL, NULL, pgoff, NULL, NULL_VM_UFFD_CTX);
+			NULL, NULL, pgoff, NULL, NULL_VM_UFFD_CTX, NULL);
 	if (vma)
 		goto out;
 
@@ -3244,7 +3253,7 @@
 		return NULL;	/* should never get here */
 	new_vma = vma_merge(mm, prev, addr, addr + len, vma->vm_flags,
 			    vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
-			    vma->vm_userfaultfd_ctx);
+			    vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (new_vma) {
 		/*
 		 * Source vma may have been merged into new_vma
diff --git a/mm/mprotect.c b/mm/mprotect.c
index 95dee88..65d3170 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -428,7 +428,7 @@
 	pgoff = vma->vm_pgoff + ((start - vma->vm_start) >> PAGE_SHIFT);
 	*pprev = vma_merge(mm, *pprev, start, end, newflags,
 			   vma->anon_vma, vma->vm_file, pgoff, vma_policy(vma),
-			   vma->vm_userfaultfd_ctx);
+			   vma->vm_userfaultfd_ctx, vma_get_anon_name(vma));
 	if (*pprev) {
 		vma = *pprev;
 		VM_WARN_ON((vma->vm_flags ^ newflags) & ~VM_SOFTDIRTY);
diff --git a/mm/mremap.c b/mm/mremap.c
index 8005d0b..05b7116 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -30,12 +30,11 @@
 
 #include "internal.h"
 
-static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
+static pud_t *get_old_pud(struct mm_struct *mm, unsigned long addr)
 {
 	pgd_t *pgd;
 	p4d_t *p4d;
 	pud_t *pud;
-	pmd_t *pmd;
 
 	pgd = pgd_offset(mm, addr);
 	if (pgd_none_or_clear_bad(pgd))
@@ -49,6 +48,18 @@
 	if (pud_none_or_clear_bad(pud))
 		return NULL;
 
+	return pud;
+}
+
+static pmd_t *get_old_pmd(struct mm_struct *mm, unsigned long addr)
+{
+	pud_t *pud;
+	pmd_t *pmd;
+
+	pud = get_old_pud(mm, addr);
+	if (!pud)
+		return NULL;
+
 	pmd = pmd_offset(pud, addr);
 	if (pmd_none(*pmd))
 		return NULL;
@@ -56,19 +67,27 @@
 	return pmd;
 }
 
-static pmd_t *alloc_new_pmd(struct mm_struct *mm, struct vm_area_struct *vma,
+static pud_t *alloc_new_pud(struct mm_struct *mm, struct vm_area_struct *vma,
 			    unsigned long addr)
 {
 	pgd_t *pgd;
 	p4d_t *p4d;
-	pud_t *pud;
-	pmd_t *pmd;
 
 	pgd = pgd_offset(mm, addr);
 	p4d = p4d_alloc(mm, pgd, addr);
 	if (!p4d)
 		return NULL;
-	pud = pud_alloc(mm, p4d, addr);
+
+	return pud_alloc(mm, p4d, addr);
+}
+
+static pmd_t *alloc_new_pmd(struct mm_struct *mm, struct vm_area_struct *vma,
+			    unsigned long addr)
+{
+	pud_t *pud;
+	pmd_t *pmd;
+
+	pud = alloc_new_pud(mm, vma, addr);
 	if (!pud)
 		return NULL;
 
@@ -235,14 +254,151 @@
 
 	return true;
 }
+#else
+static inline bool move_normal_pmd(struct vm_area_struct *vma,
+		unsigned long old_addr, unsigned long new_addr,
+		unsigned long old_end, pmd_t *old_pmd, pmd_t *new_pmd)
+{
+	return false;
+}
 #endif
 
+#ifdef CONFIG_HAVE_MOVE_PUD
+static bool move_normal_pud(struct vm_area_struct *vma, unsigned long old_addr,
+		  unsigned long new_addr, pud_t *old_pud, pud_t *new_pud)
+{
+	spinlock_t *old_ptl, *new_ptl;
+	struct mm_struct *mm = vma->vm_mm;
+	pud_t pud;
+
+	/*
+	 * The destination pud shouldn't be established, free_pgtables()
+	 * should have released it.
+	 */
+	if (WARN_ON_ONCE(!pud_none(*new_pud)))
+		return false;
+
+	/*
+	 * We don't have to worry about the ordering of src and dst
+	 * ptlocks because exclusive mmap_lock prevents deadlock.
+	 */
+	old_ptl = pud_lock(vma->vm_mm, old_pud);
+	new_ptl = pud_lockptr(mm, new_pud);
+	if (new_ptl != old_ptl)
+		spin_lock_nested(new_ptl, SINGLE_DEPTH_NESTING);
+
+	/* Clear the pud */
+	pud = *old_pud;
+	pud_clear(old_pud);
+
+	VM_BUG_ON(!pud_none(*new_pud));
+
+	/* Set the new pud */
+	set_pud_at(mm, new_addr, new_pud, pud);
+	flush_tlb_range(vma, old_addr, old_addr + PUD_SIZE);
+	if (new_ptl != old_ptl)
+		spin_unlock(new_ptl);
+	spin_unlock(old_ptl);
+
+	return true;
+}
+#else
+static inline bool move_normal_pud(struct vm_area_struct *vma,
+		unsigned long old_addr, unsigned long new_addr, pud_t *old_pud,
+		pud_t *new_pud)
+{
+	return false;
+}
+#endif
+
+enum pgt_entry {
+	NORMAL_PMD,
+	HPAGE_PMD,
+	NORMAL_PUD,
+};
+
+/*
+ * Returns an extent of the corresponding size for the pgt_entry specified if
+ * valid. Else returns a smaller extent bounded by the end of the source and
+ * destination pgt_entry.
+ */
+static unsigned long get_extent(enum pgt_entry entry, unsigned long old_addr,
+			unsigned long old_end, unsigned long new_addr)
+{
+	unsigned long next, extent, mask, size;
+
+	switch (entry) {
+	case HPAGE_PMD:
+	case NORMAL_PMD:
+		mask = PMD_MASK;
+		size = PMD_SIZE;
+		break;
+	case NORMAL_PUD:
+		mask = PUD_MASK;
+		size = PUD_SIZE;
+		break;
+	default:
+		BUILD_BUG();
+		break;
+	}
+
+	next = (old_addr + size) & mask;
+	/* even if next overflowed, extent below will be ok */
+	extent = next - old_addr;
+	if (extent > old_end - old_addr)
+		extent = old_end - old_addr;
+	next = (new_addr + size) & mask;
+	if (extent > next - new_addr)
+		extent = next - new_addr;
+	return extent;
+}
+
+/*
+ * Attempts to speedup the move by moving entry at the level corresponding to
+ * pgt_entry. Returns true if the move was successful, else false.
+ */
+static bool move_pgt_entry(enum pgt_entry entry, struct vm_area_struct *vma,
+			unsigned long old_addr, unsigned long new_addr,
+			unsigned long old_end, void *old_entry,
+			void *new_entry, bool need_rmap_locks)
+{
+	bool moved = false;
+
+	/* See comment in move_ptes() */
+	if (need_rmap_locks)
+		take_rmap_locks(vma);
+
+	switch (entry) {
+	case NORMAL_PMD:
+		moved = move_normal_pmd(vma, old_addr, new_addr, old_end,
+					old_entry, new_entry);
+		break;
+	case NORMAL_PUD:
+		moved = move_normal_pud(vma, old_addr, new_addr, old_entry,
+					new_entry);
+		break;
+	case HPAGE_PMD:
+		moved = IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
+			move_huge_pmd(vma, old_addr, new_addr, old_end,
+					old_entry, new_entry);
+		break;
+	default:
+		WARN_ON_ONCE(1);
+		break;
+	}
+
+	if (need_rmap_locks)
+		drop_rmap_locks(vma);
+
+	return moved;
+}
+
 unsigned long move_page_tables(struct vm_area_struct *vma,
 		unsigned long old_addr, struct vm_area_struct *new_vma,
 		unsigned long new_addr, unsigned long len,
 		bool need_rmap_locks)
 {
-	unsigned long extent, next, old_end;
+	unsigned long extent, old_end;
 	struct mmu_notifier_range range;
 	pmd_t *old_pmd, *new_pmd;
 
@@ -255,57 +411,56 @@
 
 	for (; old_addr < old_end; old_addr += extent, new_addr += extent) {
 		cond_resched();
-		next = (old_addr + PMD_SIZE) & PMD_MASK;
-		/* even if next overflowed, extent below will be ok */
-		extent = next - old_addr;
-		if (extent > old_end - old_addr)
-			extent = old_end - old_addr;
+		/*
+		 * If extent is PUD-sized try to speed up the move by moving at the
+		 * PUD level if possible.
+		 */
+		extent = get_extent(NORMAL_PUD, old_addr, old_end, new_addr);
+		if (IS_ENABLED(CONFIG_HAVE_MOVE_PUD) && extent == PUD_SIZE) {
+			pud_t *old_pud, *new_pud;
+
+			old_pud = get_old_pud(vma->vm_mm, old_addr);
+			if (!old_pud)
+				continue;
+			new_pud = alloc_new_pud(vma->vm_mm, vma, new_addr);
+			if (!new_pud)
+				break;
+			if (move_pgt_entry(NORMAL_PUD, vma, old_addr, new_addr,
+						old_end, old_pud, new_pud,
+						true))
+				continue;
+		}
+
+		extent = get_extent(NORMAL_PMD, old_addr, old_end, new_addr);
 		old_pmd = get_old_pmd(vma->vm_mm, old_addr);
 		if (!old_pmd)
 			continue;
 		new_pmd = alloc_new_pmd(vma->vm_mm, vma, new_addr);
 		if (!new_pmd)
 			break;
-		if (is_swap_pmd(*old_pmd) || pmd_trans_huge(*old_pmd) || pmd_devmap(*old_pmd)) {
-			if (extent == HPAGE_PMD_SIZE) {
-				bool moved;
-				/* See comment in move_ptes() */
-				if (need_rmap_locks)
-					take_rmap_locks(vma);
-				moved = move_huge_pmd(vma, old_addr, new_addr,
-						    old_end, old_pmd, new_pmd);
-				if (need_rmap_locks)
-					drop_rmap_locks(vma);
-				if (moved)
-					continue;
-			}
+		if (is_swap_pmd(*old_pmd) || pmd_trans_huge(*old_pmd) ||
+		    pmd_devmap(*old_pmd)) {
+			if (extent == HPAGE_PMD_SIZE &&
+			    move_pgt_entry(HPAGE_PMD, vma, old_addr, new_addr,
+				    old_end, old_pmd, new_pmd, need_rmap_locks))
+				continue;
 			split_huge_pmd(vma, old_pmd, old_addr);
 			if (pmd_trans_unstable(old_pmd))
 				continue;
-		} else if (extent == PMD_SIZE) {
-#ifdef CONFIG_HAVE_MOVE_PMD
+		} else if (IS_ENABLED(CONFIG_HAVE_MOVE_PMD) &&
+			   extent == PMD_SIZE) {
 			/*
 			 * If the extent is PMD-sized, try to speed the move by
 			 * moving at the PMD level if possible.
 			 */
-			bool moved;
-
-			if (need_rmap_locks)
-				take_rmap_locks(vma);
-			moved = move_normal_pmd(vma, old_addr, new_addr,
-					old_end, old_pmd, new_pmd);
-			if (need_rmap_locks)
-				drop_rmap_locks(vma);
-			if (moved)
+			if (move_pgt_entry(NORMAL_PMD, vma, old_addr, new_addr,
+						old_end, old_pmd, new_pmd,
+						true))
 				continue;
-#endif
 		}
 
 		if (pte_alloc(new_vma->vm_mm, new_pmd))
 			break;
-		next = (new_addr + PMD_SIZE) & PMD_MASK;
-		if (extent > next - new_addr)
-			extent = next - new_addr;
 		move_ptes(vma, old_pmd, old_addr, old_addr + extent, new_vma,
 			  new_pmd, new_addr, need_rmap_locks);
 	}
@@ -318,8 +473,8 @@
 static unsigned long move_vma(struct vm_area_struct *vma,
 		unsigned long old_addr, unsigned long old_len,
 		unsigned long new_len, unsigned long new_addr,
-		bool *locked, struct vm_userfaultfd_ctx *uf,
-		struct list_head *uf_unmap)
+		bool *locked, unsigned long flags,
+		struct vm_userfaultfd_ctx *uf, struct list_head *uf_unmap)
 {
 	struct mm_struct *mm = vma->vm_mm;
 	struct vm_area_struct *new_vma;
@@ -351,11 +506,19 @@
 	if (err)
 		return err;
 
+	if (unlikely(flags & MREMAP_DONTUNMAP && vm_flags & VM_ACCOUNT)) {
+		if (security_vm_enough_memory_mm(mm, new_len >> PAGE_SHIFT))
+			return -ENOMEM;
+	}
+
 	new_pgoff = vma->vm_pgoff + ((old_addr - vma->vm_start) >> PAGE_SHIFT);
 	new_vma = copy_vma(&vma, new_addr, new_len, new_pgoff,
 			   &need_rmap_locks);
-	if (!new_vma)
+	if (!new_vma) {
+		if (unlikely(flags & MREMAP_DONTUNMAP && vm_flags & VM_ACCOUNT))
+			vm_unacct_memory(new_len >> PAGE_SHIFT);
 		return -ENOMEM;
+	}
 
 	moved_len = move_page_tables(vma, old_addr, new_vma, new_addr, old_len,
 				     need_rmap_locks);
@@ -384,7 +547,7 @@
 	}
 
 	/* Conceal VM_ACCOUNT so old reservation is not undone */
-	if (vm_flags & VM_ACCOUNT) {
+	if (vm_flags & VM_ACCOUNT && !(flags & MREMAP_DONTUNMAP)) {
 		vma->vm_flags &= ~VM_ACCOUNT;
 		excess = vma->vm_end - vma->vm_start - old_len;
 		if (old_addr > vma->vm_start &&
@@ -408,11 +571,26 @@
 	if (unlikely(vma->vm_flags & VM_PFNMAP))
 		untrack_pfn_moved(vma);
 
+	if (unlikely(!err && (flags & MREMAP_DONTUNMAP))) {
+		/* We always clear VM_LOCKED[ONFAULT] on the old vma */
+		vma->vm_flags &= VM_LOCKED_CLEAR_MASK;
+
+		/* Because we won't unmap we don't need to touch locked_vm */
+		return new_addr;
+	}
+
 	if (do_munmap(mm, old_addr, old_len, uf_unmap) < 0) {
 		/* OOM: unable to split vma, just get accounts right */
-		vm_unacct_memory(excess >> PAGE_SHIFT);
+		if (vm_flags & VM_ACCOUNT && !(flags & MREMAP_DONTUNMAP))
+			vm_acct_memory(new_len >> PAGE_SHIFT);
 		excess = 0;
 	}
+
+	if (vm_flags & VM_LOCKED) {
+		mm->locked_vm += new_len >> PAGE_SHIFT;
+		*locked = true;
+	}
+
 	mm->hiwater_vm = hiwater_vm;
 
 	/* Restore VM_ACCOUNT if one or two pieces of vma left */
@@ -422,16 +600,12 @@
 			vma->vm_next->vm_flags |= VM_ACCOUNT;
 	}
 
-	if (vm_flags & VM_LOCKED) {
-		mm->locked_vm += new_len >> PAGE_SHIFT;
-		*locked = true;
-	}
-
 	return new_addr;
 }
 
 static struct vm_area_struct *vma_to_resize(unsigned long addr,
-	unsigned long old_len, unsigned long new_len, unsigned long *p)
+	unsigned long old_len, unsigned long new_len, unsigned long flags,
+	unsigned long *p)
 {
 	struct mm_struct *mm = current->mm;
 	struct vm_area_struct *vma = find_vma(mm, addr);
@@ -453,6 +627,10 @@
 		return ERR_PTR(-EINVAL);
 	}
 
+	if ((flags & MREMAP_DONTUNMAP) &&
+			(vma->vm_flags & (VM_DONTEXPAND | VM_PFNMAP)))
+		return ERR_PTR(-EINVAL);
+
 	if (is_vm_hugetlb_page(vma))
 		return ERR_PTR(-EINVAL);
 
@@ -497,7 +675,7 @@
 
 static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
 		unsigned long new_addr, unsigned long new_len, bool *locked,
-		struct vm_userfaultfd_ctx *uf,
+		unsigned long flags, struct vm_userfaultfd_ctx *uf,
 		struct list_head *uf_unmap_early,
 		struct list_head *uf_unmap)
 {
@@ -505,7 +683,7 @@
 	struct vm_area_struct *vma;
 	unsigned long ret = -EINVAL;
 	unsigned long charged = 0;
-	unsigned long map_flags;
+	unsigned long map_flags = 0;
 
 	if (offset_in_page(new_addr))
 		goto out;
@@ -534,9 +712,11 @@
 	if ((mm->map_count + 2) >= sysctl_max_map_count - 3)
 		return -ENOMEM;
 
-	ret = do_munmap(mm, new_addr, new_len, uf_unmap_early);
-	if (ret)
-		goto out;
+	if (flags & MREMAP_FIXED) {
+		ret = do_munmap(mm, new_addr, new_len, uf_unmap_early);
+		if (ret)
+			goto out;
+	}
 
 	if (old_len >= new_len) {
 		ret = do_munmap(mm, addr+new_len, old_len - new_len, uf_unmap);
@@ -545,13 +725,22 @@
 		old_len = new_len;
 	}
 
-	vma = vma_to_resize(addr, old_len, new_len, &charged);
+	vma = vma_to_resize(addr, old_len, new_len, flags, &charged);
 	if (IS_ERR(vma)) {
 		ret = PTR_ERR(vma);
 		goto out;
 	}
 
-	map_flags = MAP_FIXED;
+	/* MREMAP_DONTUNMAP expands by old_len since old_len == new_len */
+	if (flags & MREMAP_DONTUNMAP &&
+		!may_expand_vm(mm, vma->vm_flags, old_len >> PAGE_SHIFT)) {
+		ret = -ENOMEM;
+		goto out;
+	}
+
+	if (flags & MREMAP_FIXED)
+		map_flags |= MAP_FIXED;
+
 	if (vma->vm_flags & VM_MAYSHARE)
 		map_flags |= MAP_SHARED;
 
@@ -561,10 +750,16 @@
 	if (offset_in_page(ret))
 		goto out1;
 
-	ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, uf,
+	/* We got a new mapping */
+	if (!(flags & MREMAP_FIXED))
+		new_addr = ret;
+
+	ret = move_vma(vma, addr, old_len, new_len, new_addr, locked, flags, uf,
 		       uf_unmap);
+
 	if (!(offset_in_page(ret)))
 		goto out;
+
 out1:
 	vm_unacct_memory(charged);
 
@@ -618,12 +813,21 @@
 	 */
 	addr = untagged_addr(addr);
 
-	if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE))
+	if (flags & ~(MREMAP_FIXED | MREMAP_MAYMOVE | MREMAP_DONTUNMAP))
 		return ret;
 
 	if (flags & MREMAP_FIXED && !(flags & MREMAP_MAYMOVE))
 		return ret;
 
+	/*
+	 * MREMAP_DONTUNMAP is always a move and it does not allow resizing
+	 * in the process.
+	 */
+	if (flags & MREMAP_DONTUNMAP &&
+			(!(flags & MREMAP_MAYMOVE) || old_len != new_len))
+		return ret;
+
+
 	if (offset_in_page(addr))
 		return ret;
 
@@ -641,9 +845,10 @@
 	if (down_write_killable(&current->mm->mmap_sem))
 		return -EINTR;
 
-	if (flags & MREMAP_FIXED) {
+	if (flags & (MREMAP_FIXED | MREMAP_DONTUNMAP)) {
 		ret = mremap_to(addr, old_len, new_addr, new_len,
-				&locked, &uf, &uf_unmap_early, &uf_unmap);
+				&locked, flags, &uf, &uf_unmap_early,
+				&uf_unmap);
 		goto out;
 	}
 
@@ -671,7 +876,7 @@
 	/*
 	 * Ok, we need to grow..
 	 */
-	vma = vma_to_resize(addr, old_len, new_len, &charged);
+	vma = vma_to_resize(addr, old_len, new_len, flags, &charged);
 	if (IS_ERR(vma)) {
 		ret = PTR_ERR(vma);
 		goto out;
@@ -721,7 +926,7 @@
 		}
 
 		ret = move_vma(vma, addr, old_len, new_len, new_addr,
-			       &locked, &uf, &uf_unmap);
+			       &locked, flags, &uf, &uf_unmap);
 	}
 out:
 	if (offset_in_page(ret)) {
@@ -735,7 +940,7 @@
 	if (locked && new_len > old_len)
 		mm_populate(new_addr + old_len, new_len - old_len);
 	userfaultfd_unmap_complete(mm, &uf_unmap_early);
-	mremap_userfaultfd_complete(&uf, addr, new_addr, old_len);
+	mremap_userfaultfd_complete(&uf, addr, ret, old_len);
 	userfaultfd_unmap_complete(mm, &uf_unmap);
 	return ret;
 }
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 283ac9d..e47cf1e 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -294,10 +294,10 @@
 	"Unmovable",
 	"Movable",
 	"Reclaimable",
-	"HighAtomic",
 #ifdef CONFIG_CMA
 	"CMA",
 #endif
+	"HighAtomic",
 #ifdef CONFIG_MEMORY_ISOLATION
 	"Isolate",
 #endif
@@ -314,6 +314,11 @@
 #endif
 };
 
+/*
+ * Try to keep at least this much lowmem free.  Do not allow normal
+ * allocations below this point, only high priority ones. Automatically
+ * tuned according to the amount of memory in the system.
+ */
 int min_free_kbytes = 1024;
 int user_min_free_kbytes = -1;
 #ifdef CONFIG_DISCONTIGMEM
@@ -332,6 +337,13 @@
 #endif
 int watermark_scale_factor = 10;
 
+/*
+ * Extra memory for the system to try freeing. Used to temporarily
+ * free memory, to make space for new workloads. Anyone can allocate
+ * down to the min watermarks controlled by min_free_kbytes above.
+ */
+int extra_free_kbytes = 0;
+
 static unsigned long nr_kernel_pages __initdata;
 static unsigned long nr_all_pages __initdata;
 static unsigned long dma_reserve __initdata;
@@ -2724,19 +2736,37 @@
 
 retry:
 	page = __rmqueue_smallest(zone, order, migratetype);
-	if (unlikely(!page)) {
-		if (migratetype == MIGRATE_MOVABLE)
-			page = __rmqueue_cma_fallback(zone, order);
 
-		if (!page && __rmqueue_fallback(zone, order, migratetype,
-								alloc_flags))
-			goto retry;
-	}
+	if (unlikely(!page) && __rmqueue_fallback(zone, order, migratetype,
+						  alloc_flags))
+		goto retry;
 
 	trace_mm_page_alloc_zone_locked(page, order, migratetype);
 	return page;
 }
 
+#ifdef CONFIG_CMA
+static struct page *__rmqueue_cma(struct zone *zone, unsigned int order,
+				  int migratetype,
+				  unsigned int alloc_flags)
+{
+	struct page *page = 0;
+
+	if (IS_ENABLED(CONFIG_CMA))
+		if (!zone->cma_alloc)
+			page = __rmqueue_cma_fallback(zone, order);
+	trace_mm_page_alloc_zone_locked(page, order, MIGRATE_CMA);
+	return page;
+}
+#else
+static inline struct page *__rmqueue_cma(struct zone *zone, unsigned int order,
+					 int migratetype,
+					 unsigned int alloc_flags)
+{
+	return NULL;
+}
+#endif
+
 /*
  * Obtain a specified number of elements from the buddy allocator, all under
  * a single hold of the lock, for efficiency.  Add them to the supplied list.
@@ -2750,8 +2780,19 @@
 
 	spin_lock(&zone->lock);
 	for (i = 0; i < count; ++i) {
-		struct page *page = __rmqueue(zone, order, migratetype,
-								alloc_flags);
+		struct page *page;
+
+		/*
+		 * If migrate type CMA is being requested only try to
+		 * satisfy the request with CMA pages to try and increase
+		 * CMA utlization.
+		 */
+		if (is_migrate_cma(migratetype))
+			page = __rmqueue_cma(zone, order, migratetype,
+					     alloc_flags);
+		else
+			page = __rmqueue(zone, order, migratetype, alloc_flags);
+
 		if (unlikely(page == NULL))
 			break;
 
@@ -2786,6 +2827,28 @@
 	return alloced;
 }
 
+/*
+ * Return the pcp list that corresponds to the migrate type if that list isn't
+ * empty.
+ * If the list is empty return NULL.
+ */
+static struct list_head *get_populated_pcp_list(struct zone *zone,
+			unsigned int order, struct per_cpu_pages *pcp,
+			int migratetype, unsigned int alloc_flags)
+{
+	struct list_head *list = &pcp->lists[migratetype];
+
+	if (list_empty(list)) {
+		pcp->count += rmqueue_bulk(zone, order,
+				pcp->batch, list,
+				migratetype, alloc_flags);
+
+		if (list_empty(list))
+			list = NULL;
+	}
+	return list;
+}
+
 #ifdef CONFIG_NUMA
 /*
  * Called from the vmstat counter updater to drain pagesets of this
@@ -3215,16 +3278,28 @@
 static struct page *__rmqueue_pcplist(struct zone *zone, int migratetype,
 			unsigned int alloc_flags,
 			struct per_cpu_pages *pcp,
-			struct list_head *list)
+			gfp_t gfp_flags)
 {
-	struct page *page;
+	struct page *page = NULL;
+	struct list_head *list = NULL;
 
 	do {
-		if (list_empty(list)) {
-			pcp->count += rmqueue_bulk(zone, 0,
-					pcp->batch, list,
+		/* First try to get CMA pages */
+		if (migratetype == MIGRATE_MOVABLE &&
+				gfp_flags & __GFP_CMA) {
+			list = get_populated_pcp_list(zone, 0, pcp,
+					get_cma_migrate_type(), alloc_flags);
+		}
+
+		if (list == NULL) {
+			/*
+			 * Either CMA is not suitable or there are no
+			 * free CMA pages.
+			 */
+			list = get_populated_pcp_list(zone, 0, pcp,
 					migratetype, alloc_flags);
-			if (unlikely(list_empty(list)))
+			if (unlikely(list == NULL) ||
+					unlikely(list_empty(list)))
 				return NULL;
 		}
 
@@ -3242,14 +3317,13 @@
 			int migratetype, unsigned int alloc_flags)
 {
 	struct per_cpu_pages *pcp;
-	struct list_head *list;
 	struct page *page;
 	unsigned long flags;
 
 	local_irq_save(flags);
 	pcp = &this_cpu_ptr(zone->pageset)->pcp;
-	list = &pcp->lists[migratetype];
-	page = __rmqueue_pcplist(zone,  migratetype, alloc_flags, pcp, list);
+	page = __rmqueue_pcplist(zone,  migratetype, alloc_flags, pcp,
+				 gfp_flags);
 	if (page) {
 		__count_zid_vm_events(PGALLOC, page_zonenum(page), 1);
 		zone_statistics(preferred_zone, zone);
@@ -3285,14 +3359,22 @@
 
 	do {
 		page = NULL;
+
 		if (alloc_flags & ALLOC_HARDER) {
 			page = __rmqueue_smallest(zone, order, MIGRATE_HIGHATOMIC);
 			if (page)
 				trace_mm_page_alloc_zone_locked(page, order, migratetype);
 		}
+
+		if (!page && migratetype == MIGRATE_MOVABLE &&
+				gfp_flags & __GFP_CMA)
+			page = __rmqueue_cma(zone, order, migratetype,
+					     alloc_flags);
+
 		if (!page)
 			page = __rmqueue(zone, order, migratetype, alloc_flags);
 	} while (page && check_new_pages(page, order));
+
 	spin_unlock(&zone->lock);
 	if (!page)
 		goto failed;
@@ -5386,6 +5468,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"
@@ -5407,6 +5492,9 @@
 			K(zone_managed_pages(zone)),
 			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),
@@ -7768,6 +7856,7 @@
 static void __setup_per_zone_wmarks(void)
 {
 	unsigned long pages_min = min_free_kbytes >> (PAGE_SHIFT - 10);
+	unsigned long pages_low = extra_free_kbytes >> (PAGE_SHIFT - 10);
 	unsigned long lowmem_pages = 0;
 	struct zone *zone;
 	unsigned long flags;
@@ -7779,11 +7868,13 @@
 	}
 
 	for_each_zone(zone) {
-		u64 tmp;
+		u64 tmp, low;
 
 		spin_lock_irqsave(&zone->lock, flags);
 		tmp = (u64)pages_min * zone_managed_pages(zone);
 		do_div(tmp, lowmem_pages);
+		low = (u64)pages_low * zone_managed_pages(zone);
+		do_div(low, vm_total_pages);
 		if (is_highmem(zone)) {
 			/*
 			 * __GFP_HIGH and PF_MEMALLOC allocations usually don't
@@ -7816,8 +7907,10 @@
 			    mult_frac(zone_managed_pages(zone),
 				      watermark_scale_factor, 10000));
 
-		zone->_watermark[WMARK_LOW]  = min_wmark_pages(zone) + tmp;
-		zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) + tmp * 2;
+		zone->_watermark[WMARK_LOW]  = min_wmark_pages(zone) +
+					low + tmp;
+		zone->_watermark[WMARK_HIGH] = min_wmark_pages(zone) +
+					low + tmp * 2;
 		zone->watermark_boost = 0;
 
 		spin_unlock_irqrestore(&zone->lock, flags);
@@ -7902,8 +7995,7 @@
 
 /*
  * min_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
- *	that we can call two helper functions whenever min_free_kbytes
- *	changes.
+ *	that we can call two helper functions whenever min_free_kbytes changes.
  */
 int min_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
 	void __user *buffer, size_t *length, loff_t *ppos)
@@ -7921,6 +8013,25 @@
 	return 0;
 }
 
+/*
+ * extra_free_kbytes_sysctl_handler - just a wrapper around proc_dointvec() so
+ * that we can call two helper functions whenever extra_free_kbytes changes.
+ */
+int extra_free_kbytes_sysctl_handler(struct ctl_table *table, int write,
+	void __user *buffer, size_t *length, loff_t *ppos)
+{
+	int rc;
+
+	rc = proc_dointvec_minmax(table, write, buffer, length, ppos);
+	if (rc)
+		return rc;
+
+	if (write)
+		setup_per_zone_wmarks();
+
+	return 0;
+}
+
 int watermark_boost_factor_sysctl_handler(struct ctl_table *table, int write,
 	void __user *buffer, size_t *length, loff_t *ppos)
 {
@@ -8453,6 +8564,9 @@
 	if (ret < 0)
 		return ret;
 
+#ifdef CONFIG_CMA
+	cc.zone->cma_alloc = 1;
+#endif
 	/*
 	 * In case of -EBUSY, we'd like to know which page causes problem.
 	 * So, just fall through. test_pages_isolated() has a tracepoint
@@ -8534,8 +8648,12 @@
 done:
 	undo_isolate_page_range(pfn_max_align_down(start),
 				pfn_max_align_up(end), migratetype);
+#ifdef CONFIG_CMA
+	cc.zone->cma_alloc = 0;
+#endif
 	return ret;
 }
+EXPORT_SYMBOL_GPL(alloc_contig_range);
 #endif /* CONFIG_CONTIG_ALLOC */
 
 void free_contig_range(unsigned long pfn, unsigned int nr_pages)
@@ -8550,6 +8668,7 @@
 	}
 	WARN(count != 0, "%d pages are still in use!\n", count);
 }
+EXPORT_SYMBOL_GPL(free_contig_range);
 
 /*
  * The zone indicated has a new number of managed_pages; batch sizes and percpu
diff --git a/mm/page_io.c b/mm/page_io.c
index bcf27d0..fee9e85 100644
--- a/mm/page_io.c
+++ b/mm/page_io.c
@@ -22,6 +22,7 @@
 #include <linux/writeback.h>
 #include <linux/frontswap.h>
 #include <linux/blkdev.h>
+#include <linux/psi.h>
 #include <linux/uio.h>
 #include <linux/sched/task.h>
 #include <asm/pgtable.h>
@@ -176,8 +177,9 @@
 
 		cond_resched();
 
-		first_block = bmap(inode, probe_block);
-		if (first_block == 0)
+		first_block = probe_block;
+		ret = bmap(inode, &first_block);
+		if (ret || !first_block)
 			goto bad_bmap;
 
 		/*
@@ -192,9 +194,11 @@
 					block_in_page++) {
 			sector_t block;
 
-			block = bmap(inode, probe_block + block_in_page);
-			if (block == 0)
+			block = probe_block + block_in_page;
+			ret = bmap(inode, &block);
+			if (ret || !block)
 				goto bad_bmap;
+
 			if (block != first_block + block_in_page) {
 				/* Discontiguity */
 				probe_block++;
@@ -349,10 +353,19 @@
 	struct swap_info_struct *sis = page_swap_info(page);
 	blk_qc_t qc;
 	struct gendisk *disk;
+	unsigned long pflags;
 
 	VM_BUG_ON_PAGE(!PageSwapCache(page) && !synchronous, page);
 	VM_BUG_ON_PAGE(!PageLocked(page), page);
 	VM_BUG_ON_PAGE(PageUptodate(page), page);
+
+	/*
+	 * 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.
+	 */
+	psi_memstall_enter(&pflags);
+
 	if (frontswap_load(page) == 0) {
 		SetPageUptodate(page);
 		unlock_page(page);
@@ -366,7 +379,7 @@
 		ret = mapping->a_ops->readpage(swap_file, page);
 		if (!ret)
 			count_vm_event(PSWPIN);
-		return ret;
+		goto out;
 	}
 
 	ret = bdev_read_page(sis->bdev, swap_page_sector(page), page);
@@ -377,7 +390,7 @@
 		}
 
 		count_vm_event(PSWPIN);
-		return 0;
+		goto out;
 	}
 
 	ret = 0;
@@ -413,6 +426,7 @@
 	bio_put(bio);
 
 out:
+	psi_memstall_leave(&pflags);
 	return ret;
 }
 
diff --git a/mm/shmem.c b/mm/shmem.c
index b119c44..56b24b3 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -1734,7 +1734,7 @@
  * vm. If we swap it in we mark it dirty since we also free the swap
  * entry since a page cannot live in both the swap and page cache.
  *
- * vmf and fault_type are only supplied by shmem_fault:
+ * vma, vmf, and fault_type are only supplied by shmem_fault:
  * otherwise they are NULL.
  */
 static int shmem_getpage_gfp(struct inode *inode, pgoff_t index,
@@ -1768,6 +1768,16 @@
 	charge_mm = vma ? vma->vm_mm : current->mm;
 
 	page = find_lock_entry(mapping, index);
+
+	if (page && vma && userfaultfd_minor(vma)) {
+		if (!xa_is_value(page)) {
+			unlock_page(page);
+			put_page(page);
+		}
+		*fault_type = handle_userfault(vmf, VM_UFFD_MINOR);
+		return 0;
+	}
+
 	if (xa_is_value(page)) {
 		error = shmem_swapin_page(inode, index, &page,
 					  sgp, gfp, vma, fault_type);
@@ -2291,13 +2301,14 @@
 	return mapping->a_ops == &shmem_aops;
 }
 
-static int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
-				  pmd_t *dst_pmd,
-				  struct vm_area_struct *dst_vma,
-				  unsigned long dst_addr,
-				  unsigned long src_addr,
-				  bool zeropage,
-				  struct page **pagep)
+#ifdef CONFIG_USERFAULTFD
+int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
+			   pmd_t *dst_pmd,
+			   struct vm_area_struct *dst_vma,
+			   unsigned long dst_addr,
+			   unsigned long src_addr,
+			   bool zeropage,
+			   struct page **pagep)
 {
 	struct inode *inode = file_inode(dst_vma->vm_file);
 	struct shmem_inode_info *info = SHMEM_I(inode);
@@ -2305,14 +2316,11 @@
 	gfp_t gfp = mapping_gfp_mask(mapping);
 	pgoff_t pgoff = linear_page_index(dst_vma, dst_addr);
 	struct mem_cgroup *memcg;
-	spinlock_t *ptl;
 	void *page_kaddr;
 	struct page *page;
-	pte_t _dst_pte, *dst_pte;
 	int ret;
-	pgoff_t offset, max_off;
+	pgoff_t max_off;
 
-	ret = -ENOMEM;
 	if (!shmem_inode_acct_block(inode, 1)) {
 		/*
 		 * We may have got a page, returned -ENOENT triggering a retry,
@@ -2323,15 +2331,16 @@
 			put_page(*pagep);
 			*pagep = NULL;
 		}
-		goto out;
+		return -ENOMEM;
 	}
 
 	if (!*pagep) {
+		ret = -ENOMEM;
 		page = shmem_alloc_page(gfp, info, pgoff);
 		if (!page)
 			goto out_unacct_blocks;
 
-		if (!zeropage) {	/* mcopy_atomic */
+		if (!zeropage) {	/* COPY */
 			page_kaddr = kmap_atomic(page);
 			ret = copy_from_user(page_kaddr,
 					     (const void __user *)src_addr,
@@ -2341,11 +2350,11 @@
 			/* fallback to copy_from_user outside mmap_sem */
 			if (unlikely(ret)) {
 				*pagep = page;
-				shmem_inode_unacct_blocks(inode, 1);
+				ret = -ENOENT;
 				/* don't free the page */
-				return -ENOENT;
+				goto out_unacct_blocks;
 			}
-		} else {		/* mfill_zeropage_atomic */
+		} else {		/* ZEROPAGE */
 			clear_highpage(page);
 		}
 	} else {
@@ -2353,15 +2362,15 @@
 		*pagep = NULL;
 	}
 
-	VM_BUG_ON(PageLocked(page) || PageSwapBacked(page));
+	VM_BUG_ON(PageLocked(page));
+	VM_BUG_ON(PageSwapBacked(page));
 	__SetPageLocked(page);
 	__SetPageSwapBacked(page);
 	__SetPageUptodate(page);
 
 	ret = -EFAULT;
-	offset = linear_page_index(dst_vma, dst_addr);
 	max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
-	if (unlikely(offset >= max_off))
+	if (unlikely(pgoff >= max_off))
 		goto out_release;
 
 	ret = mem_cgroup_try_charge_delay(page, dst_mm, gfp, &memcg, false);
@@ -2375,32 +2384,10 @@
 
 	mem_cgroup_commit_charge(page, memcg, false, false);
 
-	_dst_pte = mk_pte(page, dst_vma->vm_page_prot);
-	if (dst_vma->vm_flags & VM_WRITE)
-		_dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
-	else {
-		/*
-		 * We don't set the pte dirty if the vma has no
-		 * VM_WRITE permission, so mark the page dirty or it
-		 * could be freed from under us. We could do it
-		 * unconditionally before unlock_page(), but doing it
-		 * only if VM_WRITE is not set is faster.
-		 */
-		set_page_dirty(page);
-	}
-
-	dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
-
-	ret = -EFAULT;
-	max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
-	if (unlikely(offset >= max_off))
-		goto out_release_uncharge_unlock;
-
-	ret = -EEXIST;
-	if (!pte_none(*dst_pte))
-		goto out_release_uncharge_unlock;
-
-	lru_cache_add_anon(page);
+	ret = mfill_atomic_install_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
+				       page, true);
+	if (ret)
+		goto out_delete_from_cache;
 
 	spin_lock_irq(&info->lock);
 	info->alloced++;
@@ -2408,20 +2395,10 @@
 	shmem_recalc_inode(inode);
 	spin_unlock_irq(&info->lock);
 
-	inc_mm_counter(dst_mm, mm_counter_file(page));
-	page_add_file_rmap(page, false);
-	set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
-
-	/* No need to invalidate - it was non-present before */
-	update_mmu_cache(dst_vma, dst_addr, dst_pte);
-	pte_unmap_unlock(dst_pte, ptl);
+	SetPageDirty(page);
 	unlock_page(page);
-	ret = 0;
-out:
-	return ret;
-out_release_uncharge_unlock:
-	pte_unmap_unlock(dst_pte, ptl);
-	ClearPageDirty(page);
+	return 0;
+out_delete_from_cache:
 	delete_from_page_cache(page);
 out_release_uncharge:
 	mem_cgroup_cancel_charge(page, memcg, false);
@@ -2430,30 +2407,9 @@
 	put_page(page);
 out_unacct_blocks:
 	shmem_inode_unacct_blocks(inode, 1);
-	goto out;
+	return ret;
 }
-
-int shmem_mcopy_atomic_pte(struct mm_struct *dst_mm,
-			   pmd_t *dst_pmd,
-			   struct vm_area_struct *dst_vma,
-			   unsigned long dst_addr,
-			   unsigned long src_addr,
-			   struct page **pagep)
-{
-	return shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma,
-				      dst_addr, src_addr, false, pagep);
-}
-
-int shmem_mfill_zeropage_pte(struct mm_struct *dst_mm,
-			     pmd_t *dst_pmd,
-			     struct vm_area_struct *dst_vma,
-			     unsigned long dst_addr)
-{
-	struct page *page = NULL;
-
-	return shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma,
-				      dst_addr, 0, true, &page);
-}
+#endif /* CONFIG_USERFAULTFD */
 
 #ifdef CONFIG_TMPFS
 static const struct inode_operations shmem_symlink_inode_operations;
@@ -3225,7 +3181,8 @@
 
 static int shmem_xattr_handler_get(const struct xattr_handler *handler,
 				   struct dentry *unused, struct inode *inode,
-				   const char *name, void *buffer, size_t size)
+				   const char *name, void *buffer, size_t size,
+				   int flags)
 {
 	struct shmem_inode_info *info = SHMEM_I(inode);
 
diff --git a/mm/slab.c b/mm/slab.c
index d1d7624..cdeaf56 100644
--- a/mm/slab.c
+++ b/mm/slab.c
@@ -100,6 +100,7 @@
 #include	<linux/seq_file.h>
 #include	<linux/notifier.h>
 #include	<linux/kallsyms.h>
+#include	<linux/kfence.h>
 #include	<linux/cpu.h>
 #include	<linux/sysctl.h>
 #include	<linux/module.h>
@@ -3215,18 +3216,28 @@
 }
 
 static __always_inline void *
-slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid,
+slab_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid, size_t orig_size,
 		   unsigned long caller)
 {
 	unsigned long save_flags;
 	void *ptr;
 	int slab_node = numa_mem_id();
+	struct kmem_cache *orig_cachep = cachep;
 
 	flags &= gfp_allowed_mask;
 	cachep = slab_pre_alloc_hook(cachep, flags);
 	if (unlikely(!cachep))
 		return NULL;
 
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	ptr = kfence_alloc(orig_cachep, orig_size, flags);
+	if (unlikely(ptr))
+		goto out_hooks;
+
 	cache_alloc_debugcheck_before(cachep, flags);
 	local_irq_save(save_flags);
 
@@ -3259,6 +3270,7 @@
 	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && ptr)
 		memset(ptr, 0, cachep->object_size);
 
+out_hooks:
 	slab_post_alloc_hook(cachep, flags, 1, &ptr);
 	return ptr;
 }
@@ -3296,16 +3308,26 @@
 #endif /* CONFIG_NUMA */
 
 static __always_inline void *
-slab_alloc(struct kmem_cache *cachep, gfp_t flags, unsigned long caller)
+slab_alloc(struct kmem_cache *cachep, gfp_t flags, size_t orig_size, unsigned long caller)
 {
 	unsigned long save_flags;
 	void *objp;
+	struct kmem_cache *orig_cachep = cachep;
 
 	flags &= gfp_allowed_mask;
 	cachep = slab_pre_alloc_hook(cachep, flags);
 	if (unlikely(!cachep))
 		return NULL;
 
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	objp = kfence_alloc(orig_cachep, orig_size, flags);
+	if (unlikely(objp))
+		goto out;
+
 	cache_alloc_debugcheck_before(cachep, flags);
 	local_irq_save(save_flags);
 	objp = __do_cache_alloc(cachep, flags);
@@ -3316,6 +3338,7 @@
 	if (unlikely(slab_want_init_on_alloc(flags, cachep)) && objp)
 		memset(objp, 0, cachep->object_size);
 
+out:
 	slab_post_alloc_hook(cachep, flags, 1, &objp);
 	return objp;
 }
@@ -3421,6 +3444,15 @@
 static __always_inline void __cache_free(struct kmem_cache *cachep, void *objp,
 					 unsigned long caller)
 {
+	if (is_kfence_address(objp)) {
+		kmemleak_free_recursive(objp, cachep->flags);
+		__kfence_free(objp);
+		return;
+	}
+
+	if (unlikely(slab_want_init_on_free(cachep)))
+		memset(objp, 0, cachep->object_size);
+
 	/* Put the object into the quarantine, don't touch it for now. */
 	if (kasan_slab_free(cachep, objp, _RET_IP_))
 		return;
@@ -3434,8 +3466,6 @@
 	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);
 
@@ -3480,7 +3510,7 @@
  */
 void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)
 {
-	void *ret = slab_alloc(cachep, flags, _RET_IP_);
+	void *ret = slab_alloc(cachep, flags, cachep->object_size, _RET_IP_);
 
 	trace_kmem_cache_alloc(_RET_IP_, ret,
 			       cachep->object_size, cachep->size, flags);
@@ -3503,6 +3533,7 @@
 			  void **p)
 {
 	size_t i;
+	struct kmem_cache *root_s = s;
 
 	s = slab_pre_alloc_hook(s, flags);
 	if (!s)
@@ -3512,7 +3543,13 @@
 
 	local_irq_disable();
 	for (i = 0; i < size; i++) {
-		void *objp = __do_cache_alloc(s, flags);
+		/*
+		 * 5.4 note: passing in original cachep to avoid problems with
+		 * memcg accounting. Making KFENCE properly work with memcgs on
+		 * older kernels is not worth the effort.
+		 */
+		void *objp = kfence_alloc(root_s, s->object_size, flags) ?:
+					  __do_cache_alloc(s, flags);
 
 		if (unlikely(!objp))
 			goto error;
@@ -3545,7 +3582,7 @@
 {
 	void *ret;
 
-	ret = slab_alloc(cachep, flags, _RET_IP_);
+	ret = slab_alloc(cachep, flags, size, _RET_IP_);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(_RET_IP_, ret,
@@ -3571,7 +3608,7 @@
  */
 void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid)
 {
-	void *ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
+	void *ret = slab_alloc_node(cachep, flags, nodeid, cachep->object_size, _RET_IP_);
 
 	trace_kmem_cache_alloc_node(_RET_IP_, ret,
 				    cachep->object_size, cachep->size,
@@ -3589,7 +3626,7 @@
 {
 	void *ret;
 
-	ret = slab_alloc_node(cachep, flags, nodeid, _RET_IP_);
+	ret = slab_alloc_node(cachep, flags, nodeid, size, _RET_IP_);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc_node(_RET_IP_, ret,
@@ -3650,7 +3687,7 @@
 	cachep = kmalloc_slab(size, flags);
 	if (unlikely(ZERO_OR_NULL_PTR(cachep)))
 		return cachep;
-	ret = slab_alloc(cachep, flags, caller);
+	ret = slab_alloc(cachep, flags, size, caller);
 
 	ret = kasan_kmalloc(cachep, ret, size, flags);
 	trace_kmalloc(caller, ret,
@@ -4179,7 +4216,10 @@
 	BUG_ON(objnr >= cachep->num);
 
 	/* Find offset within object. */
-	offset = ptr - index_to_obj(cachep, page, objnr) - obj_offset(cachep);
+	if (is_kfence_address(ptr))
+		offset = ptr - kfence_object_start(ptr);
+	else
+		offset = ptr - index_to_obj(cachep, page, objnr) - obj_offset(cachep);
 
 	/* Allow address range falling entirely within usercopy region. */
 	if (offset >= cachep->useroffset &&
diff --git a/mm/slab_common.c b/mm/slab_common.c
index 8f12824..a3c70f5 100644
--- a/mm/slab_common.c
+++ b/mm/slab_common.c
@@ -12,6 +12,7 @@
 #include <linux/memory.h>
 #include <linux/cache.h>
 #include <linux/compiler.h>
+#include <linux/kfence.h>
 #include <linux/module.h>
 #include <linux/cpu.h>
 #include <linux/uaccess.h>
@@ -589,6 +590,7 @@
 	rcu_barrier();
 
 	list_for_each_entry_safe(s, s2, &to_destroy, list) {
+		kfence_shutdown_cache(s);
 #ifdef SLAB_SUPPORTS_SYSFS
 		sysfs_slab_release(s);
 #else
@@ -615,6 +617,7 @@
 		list_add_tail(&s->list, &slab_caches_to_rcu_destroy);
 		schedule_work(&slab_caches_to_rcu_destroy_work);
 	} else {
+		kfence_shutdown_cache(s);
 #ifdef SLAB_SUPPORTS_SYSFS
 		sysfs_slab_unlink(s);
 		sysfs_slab_release(s);
@@ -1803,7 +1806,7 @@
 	if (unlikely(objp == ZERO_SIZE_PTR) || !__kasan_check_read(objp, 1))
 		return 0;
 
-	size = __ksize(objp);
+	size = kfence_ksize(objp) ?: __ksize(objp);
 	/*
 	 * We assume that ksize callers could use whole allocated area,
 	 * so we need to unpoison this area.
diff --git a/mm/slob.c b/mm/slob.c
index fa53e9f..ac2aecf 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -524,6 +524,7 @@
 {
 	return __do_kmalloc_node(size, gfp, NUMA_NO_NODE, caller);
 }
+EXPORT_SYMBOL(__kmalloc_track_caller);
 
 #ifdef CONFIG_NUMA
 void *__kmalloc_node_track_caller(size_t size, gfp_t gfp,
@@ -531,6 +532,7 @@
 {
 	return __do_kmalloc_node(size, gfp, node, caller);
 }
+EXPORT_SYMBOL(__kmalloc_node_track_caller);
 #endif
 
 void kfree(const void *block)
diff --git a/mm/slub.c b/mm/slub.c
index 63fe43c8..2b255a8 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -28,6 +28,7 @@
 #include <linux/ctype.h>
 #include <linux/debugobjects.h>
 #include <linux/kallsyms.h>
+#include <linux/kfence.h>
 #include <linux/memory.h>
 #include <linux/math64.h>
 #include <linux/fault-inject.h>
@@ -1464,6 +1465,11 @@
 	void *old_tail = *tail ? *tail : *head;
 	int rsize;
 
+	if (is_kfence_address(next)) {
+		slab_free_hook(s, next);
+		return true;
+	}
+
 	/* Head and tail of the reconstructed freelist */
 	*head = NULL;
 	*tail = NULL;
@@ -2725,16 +2731,27 @@
  * Otherwise we can simply pick the next object from the lockless free list.
  */
 static __always_inline void *slab_alloc_node(struct kmem_cache *s,
-		gfp_t gfpflags, int node, unsigned long addr)
+		gfp_t gfpflags, int node, unsigned long addr, size_t orig_size)
 {
 	void *object;
 	struct kmem_cache_cpu *c;
 	struct page *page;
 	unsigned long tid;
+	struct kmem_cache *root_s = s;
 
 	s = slab_pre_alloc_hook(s, gfpflags);
 	if (!s)
 		return NULL;
+
+	/*
+	 * 5.4 note: passing in original cachep to avoid problems with memcg
+	 * accounting. Making KFENCE properly work with memcgs on older kernels
+	 * is not worth the effort.
+	 */
+	object = kfence_alloc(root_s, orig_size, gfpflags);
+	if (unlikely(object))
+		goto out;
+
 redo:
 	/*
 	 * Must read kmem_cache cpu data via this cpu ptr. Preemption is
@@ -2808,20 +2825,21 @@
 	if (unlikely(slab_want_init_on_alloc(gfpflags, s)) && object)
 		memset(object, 0, s->object_size);
 
+out:
 	slab_post_alloc_hook(s, gfpflags, 1, &object);
 
 	return object;
 }
 
 static __always_inline void *slab_alloc(struct kmem_cache *s,
-		gfp_t gfpflags, unsigned long addr)
+		gfp_t gfpflags, unsigned long addr, size_t orig_size)
 {
-	return slab_alloc_node(s, gfpflags, NUMA_NO_NODE, addr);
+	return slab_alloc_node(s, gfpflags, NUMA_NO_NODE, addr, orig_size);
 }
 
 void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags)
 {
-	void *ret = slab_alloc(s, gfpflags, _RET_IP_);
+	void *ret = slab_alloc(s, gfpflags, _RET_IP_, s->object_size);
 
 	trace_kmem_cache_alloc(_RET_IP_, ret, s->object_size,
 				s->size, gfpflags);
@@ -2833,7 +2851,7 @@
 #ifdef CONFIG_TRACING
 void *kmem_cache_alloc_trace(struct kmem_cache *s, gfp_t gfpflags, size_t size)
 {
-	void *ret = slab_alloc(s, gfpflags, _RET_IP_);
+	void *ret = slab_alloc(s, gfpflags, _RET_IP_, size);
 	trace_kmalloc(_RET_IP_, ret, size, s->size, gfpflags);
 	ret = kasan_kmalloc(s, ret, size, gfpflags);
 	return ret;
@@ -2844,7 +2862,7 @@
 #ifdef CONFIG_NUMA
 void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node)
 {
-	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_);
+	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_, s->object_size);
 
 	trace_kmem_cache_alloc_node(_RET_IP_, ret,
 				    s->object_size, s->size, gfpflags, node);
@@ -2858,7 +2876,7 @@
 				    gfp_t gfpflags,
 				    int node, size_t size)
 {
-	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_);
+	void *ret = slab_alloc_node(s, gfpflags, node, _RET_IP_, size);
 
 	trace_kmalloc_node(_RET_IP_, ret,
 			   size, s->size, gfpflags, node);
@@ -2892,6 +2910,9 @@
 
 	stat(s, FREE_SLOWPATH);
 
+	if (kfence_free(head))
+		return;
+
 	if (kmem_cache_debug(s) &&
 	    !free_debug_processing(s, page, head, tail, cnt, addr))
 		return;
@@ -3133,6 +3154,13 @@
 		df->s = cache_from_obj(s, object); /* Support for memcg */
 	}
 
+	if (is_kfence_address(object)) {
+		slab_free_hook(df->s, object);
+		__kfence_free(object);
+		p[size] = NULL; /* mark object processed */
+		return size;
+	}
+
 	/* Start new detached freelist */
 	df->page = page;
 	set_freepointer(df->s, object, NULL);
@@ -3192,6 +3220,7 @@
 {
 	struct kmem_cache_cpu *c;
 	int i;
+	struct kmem_cache *root_s = s;
 
 	/* memcg and kmem_cache debug support */
 	s = slab_pre_alloc_hook(s, flags);
@@ -3206,8 +3235,19 @@
 	c = this_cpu_ptr(s->cpu_slab);
 
 	for (i = 0; i < size; i++) {
-		void *object = c->freelist;
+		/*
+		 * 5.4 note: passing in original cachep to avoid problems with memcg
+		 * accounting. Making KFENCE properly work with memcgs on older kernels
+		 * is not worth the effort.
+		 */
+		void *object = kfence_alloc(root_s, s->object_size, flags);
 
+		if (unlikely(object)) {
+			p[i] = object;
+			continue;
+		}
+
+		object = c->freelist;
 		if (unlikely(!object)) {
 			/*
 			 * We may have removed an object from c->freelist using
@@ -3866,7 +3906,7 @@
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc(s, flags, _RET_IP_);
+	ret = slab_alloc(s, flags, _RET_IP_, size);
 
 	trace_kmalloc(_RET_IP_, ret, size, s->size, flags);
 
@@ -3914,7 +3954,7 @@
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc_node(s, flags, node, _RET_IP_);
+	ret = slab_alloc_node(s, flags, node, _RET_IP_, size);
 
 	trace_kmalloc_node(_RET_IP_, ret, size, s->size, flags, node);
 
@@ -3940,6 +3980,7 @@
 	struct kmem_cache *s;
 	unsigned int offset;
 	size_t object_size;
+	bool is_kfence = is_kfence_address(ptr);
 
 	ptr = kasan_reset_tag(ptr);
 
@@ -3952,10 +3993,13 @@
 			       to_user, 0, n);
 
 	/* Find offset within object. */
-	offset = (ptr - page_address(page)) % s->size;
+	if (is_kfence)
+		offset = ptr - kfence_object_start(ptr);
+	else
+		offset = (ptr - page_address(page)) % s->size;
 
 	/* Adjust for redzone and reject if within the redzone. */
-	if (kmem_cache_debug(s) && s->flags & SLAB_RED_ZONE) {
+	if (!is_kfence && kmem_cache_debug(s) && s->flags & SLAB_RED_ZONE) {
 		if (offset < s->red_left_pad)
 			usercopy_abort("SLUB object in left red zone",
 				       s->name, to_user, offset, n);
@@ -4402,13 +4446,14 @@
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc(s, gfpflags, caller);
+	ret = slab_alloc(s, gfpflags, caller, size);
 
 	/* Honor the call site pointer we received. */
 	trace_kmalloc(caller, ret, size, s->size, gfpflags);
 
 	return ret;
 }
+EXPORT_SYMBOL(__kmalloc_track_caller);
 
 #ifdef CONFIG_NUMA
 void *__kmalloc_node_track_caller(size_t size, gfp_t gfpflags,
@@ -4432,13 +4477,14 @@
 	if (unlikely(ZERO_OR_NULL_PTR(s)))
 		return s;
 
-	ret = slab_alloc_node(s, gfpflags, node, caller);
+	ret = slab_alloc_node(s, gfpflags, node, caller, size);
 
 	/* Honor the call site pointer we received. */
 	trace_kmalloc_node(caller, ret, size, s->size, gfpflags, node);
 
 	return ret;
 }
+EXPORT_SYMBOL(__kmalloc_node_track_caller);
 #endif
 
 #ifdef CONFIG_SYSFS
diff --git a/mm/swapfile.c b/mm/swapfile.c
index f696421..9009a58 100644
--- a/mm/swapfile.c
+++ b/mm/swapfile.c
@@ -3170,7 +3170,6 @@
 		error = -EBUSY;
 		goto bad_swap_unlock_inode;
 	}
-
 	/*
 	 * Read the swap header.
 	 */
@@ -3181,7 +3180,7 @@
 	page = read_mapping_page(mapping, 0, swap_file);
 	if (IS_ERR(page)) {
 		error = PTR_ERR(page);
-		goto bad_swap;
+		goto bad_swap_unlock_inode;
 	}
 	swap_header = kmap(page);
 
diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
index 640ff2b..2fb12c9 100644
--- a/mm/userfaultfd.c
+++ b/mm/userfaultfd.c
@@ -18,6 +18,74 @@
 #include <asm/tlbflush.h>
 #include "internal.h"
 
+/*
+ * Install PTEs, to map dst_addr (within dst_vma) to page.
+ *
+ * This function handles both MCOPY_ATOMIC_NORMAL and _CONTINUE for both shmem
+ * and anon, and for both shared and private VMAs.
+ */
+int mfill_atomic_install_pte(struct mm_struct *dst_mm, pmd_t *dst_pmd,
+			     struct vm_area_struct *dst_vma,
+			     unsigned long dst_addr, struct page *page,
+			     bool newly_allocated)
+{
+	int ret;
+	pte_t _dst_pte, *dst_pte;
+	bool writable = dst_vma->vm_flags & VM_WRITE;
+	bool vm_shared = dst_vma->vm_flags & VM_SHARED;
+	bool page_in_cache = page->mapping;
+	spinlock_t *ptl;
+	struct inode *inode;
+	pgoff_t offset, max_off;
+
+	_dst_pte = mk_pte(page, dst_vma->vm_page_prot);
+	if (page_in_cache && !vm_shared)
+		writable = false;
+	if (writable || !page_in_cache)
+		_dst_pte = pte_mkdirty(_dst_pte);
+	if (writable)
+		_dst_pte = pte_mkwrite(_dst_pte);
+
+	dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
+
+	if (vma_is_shmem(dst_vma)) {
+		/* serialize against truncate with the page table lock */
+		inode = dst_vma->vm_file->f_inode;
+		offset = linear_page_index(dst_vma, dst_addr);
+		max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
+		ret = -EFAULT;
+		if (unlikely(offset >= max_off))
+			goto out_unlock;
+	}
+
+	ret = -EEXIST;
+	if (!pte_none(*dst_pte))
+		goto out_unlock;
+
+	if (page_in_cache)
+		page_add_file_rmap(page, false);
+	else
+		page_add_new_anon_rmap(page, dst_vma, dst_addr, false);
+
+	/*
+	 * Must happen after rmap, as mm_counter() checks mapping (via
+	 * PageAnon()), which is set by __page_set_anon_rmap().
+	 */
+	inc_mm_counter(dst_mm, mm_counter(page));
+
+	if (newly_allocated)
+		lru_cache_add_active_or_unevictable(page, dst_vma);
+
+	set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
+
+	/* No need to invalidate - it was non-present before */
+	update_mmu_cache(dst_vma, dst_addr, dst_pte);
+	ret = 0;
+out_unlock:
+	pte_unmap_unlock(dst_pte, ptl);
+	return ret;
+}
+
 static int mcopy_atomic_pte(struct mm_struct *dst_mm,
 			    pmd_t *dst_pmd,
 			    struct vm_area_struct *dst_vma,
@@ -26,13 +94,9 @@
 			    struct page **pagep)
 {
 	struct mem_cgroup *memcg;
-	pte_t _dst_pte, *dst_pte;
-	spinlock_t *ptl;
 	void *page_kaddr;
 	int ret;
 	struct page *page;
-	pgoff_t offset, max_off;
-	struct inode *inode;
 
 	if (!*pagep) {
 		ret = -ENOMEM;
@@ -69,41 +133,15 @@
 	if (mem_cgroup_try_charge(page, dst_mm, GFP_KERNEL, &memcg, false))
 		goto out_release;
 
-	_dst_pte = mk_pte(page, dst_vma->vm_page_prot);
-	if (dst_vma->vm_flags & VM_WRITE)
-		_dst_pte = pte_mkwrite(pte_mkdirty(_dst_pte));
-
-	dst_pte = pte_offset_map_lock(dst_mm, dst_pmd, dst_addr, &ptl);
-	if (dst_vma->vm_file) {
-		/* the shmem MAP_PRIVATE case requires checking the i_size */
-		inode = dst_vma->vm_file->f_inode;
-		offset = linear_page_index(dst_vma, dst_addr);
-		max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
-		ret = -EFAULT;
-		if (unlikely(offset >= max_off))
-			goto out_release_uncharge_unlock;
+	ret = mfill_atomic_install_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
+				       page, true);
+	if (ret) {
+		mem_cgroup_cancel_charge(page, memcg, false);
+		goto out_release;
 	}
-	ret = -EEXIST;
-	if (!pte_none(*dst_pte))
-		goto out_release_uncharge_unlock;
-
-	inc_mm_counter(dst_mm, MM_ANONPAGES);
-	page_add_new_anon_rmap(page, dst_vma, dst_addr, false);
 	mem_cgroup_commit_charge(page, memcg, false, false);
-	lru_cache_add_active_or_unevictable(page, dst_vma);
-
-	set_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
-
-	/* No need to invalidate - it was non-present before */
-	update_mmu_cache(dst_vma, dst_addr, dst_pte);
-
-	pte_unmap_unlock(dst_pte, ptl);
-	ret = 0;
 out:
 	return ret;
-out_release_uncharge_unlock:
-	pte_unmap_unlock(dst_pte, ptl);
-	mem_cgroup_cancel_charge(page, memcg, false);
 out_release:
 	put_page(page);
 	goto out;
@@ -144,6 +182,40 @@
 	return ret;
 }
 
+/* Handles UFFDIO_CONTINUE for all shmem VMAs (shared or private). */
+static int mcontinue_atomic_pte(struct mm_struct *dst_mm,
+				pmd_t *dst_pmd,
+				struct vm_area_struct *dst_vma,
+				unsigned long dst_addr)
+{
+	struct inode *inode = file_inode(dst_vma->vm_file);
+	pgoff_t pgoff = linear_page_index(dst_vma, dst_addr);
+	struct page *page;
+	int ret;
+
+	ret = shmem_getpage(inode, pgoff, &page, SGP_READ);
+	if (ret)
+		goto out;
+	if (!page) {
+		ret = -EFAULT;
+		goto out;
+	}
+
+	ret = mfill_atomic_install_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
+				       page, false);
+	if (ret)
+		goto out_release;
+
+	unlock_page(page);
+	ret = 0;
+out:
+	return ret;
+out_release:
+	unlock_page(page);
+	put_page(page);
+	goto out;
+}
+
 static pmd_t *mm_alloc_pmd(struct mm_struct *mm, unsigned long address)
 {
 	pgd_t *pgd;
@@ -175,7 +247,7 @@
 					      unsigned long dst_start,
 					      unsigned long src_start,
 					      unsigned long len,
-					      bool zeropage)
+					      enum mcopy_atomic_mode mode)
 {
 	int vm_alloc_shared = dst_vma->vm_flags & VM_SHARED;
 	int vm_shared = dst_vma->vm_flags & VM_SHARED;
@@ -196,7 +268,7 @@
 	 * by THP.  Since we can not reliably insert a zero page, this
 	 * feature is not supported.
 	 */
-	if (zeropage) {
+	if (mode == MCOPY_ATOMIC_ZEROPAGE) {
 		up_read(&dst_mm->mmap_sem);
 		return -EINVAL;
 	}
@@ -259,8 +331,6 @@
 	h = hstate_vma(dst_vma);
 
 	while (src_addr < src_start + len) {
-		pte_t dst_pteval;
-
 		BUG_ON(dst_addr >= dst_start + len);
 		VM_BUG_ON(dst_addr & ~huge_page_mask(h));
 
@@ -273,21 +343,21 @@
 		mutex_lock(&hugetlb_fault_mutex_table[hash]);
 
 		err = -ENOMEM;
-		dst_pte = huge_pte_alloc(dst_mm, dst_addr, huge_page_size(h));
+		dst_pte = huge_pte_alloc(dst_mm, dst_vma, dst_addr, huge_page_size(h));
 		if (!dst_pte) {
 			mutex_unlock(&hugetlb_fault_mutex_table[hash]);
 			goto out_unlock;
 		}
 
-		err = -EEXIST;
-		dst_pteval = huge_ptep_get(dst_pte);
-		if (!huge_pte_none(dst_pteval)) {
+		if (mode != MCOPY_ATOMIC_CONTINUE &&
+		    !huge_pte_none(huge_ptep_get(dst_pte))) {
+			err = -EEXIST;
 			mutex_unlock(&hugetlb_fault_mutex_table[hash]);
 			goto out_unlock;
 		}
 
 		err = hugetlb_mcopy_atomic_pte(dst_mm, dst_pte, dst_vma,
-						dst_addr, src_addr, &page);
+					       dst_addr, src_addr, mode, &page);
 
 		mutex_unlock(&hugetlb_fault_mutex_table[hash]);
 		vm_alloc_shared = vm_shared;
@@ -387,7 +457,7 @@
 				      unsigned long dst_start,
 				      unsigned long src_start,
 				      unsigned long len,
-				      bool zeropage);
+				      enum mcopy_atomic_mode mode);
 #endif /* CONFIG_HUGETLB_PAGE */
 
 static __always_inline ssize_t mfill_atomic_pte(struct mm_struct *dst_mm,
@@ -396,10 +466,13 @@
 						unsigned long dst_addr,
 						unsigned long src_addr,
 						struct page **page,
-						bool zeropage)
+						enum mcopy_atomic_mode mode)
 {
 	ssize_t err;
 
+	if (mode == MCOPY_ATOMIC_CONTINUE)
+		return mcontinue_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr);
+
 	/*
 	 * The normal page fault path for a shmem will invoke the
 	 * fault, fill the hole in the file and COW it right away. The
@@ -411,20 +484,17 @@
 	 * and not in the radix tree.
 	 */
 	if (!(dst_vma->vm_flags & VM_SHARED)) {
-		if (!zeropage)
+		if (mode == MCOPY_ATOMIC_NORMAL)
 			err = mcopy_atomic_pte(dst_mm, dst_pmd, dst_vma,
 					       dst_addr, src_addr, page);
 		else
 			err = mfill_zeropage_pte(dst_mm, dst_pmd,
 						 dst_vma, dst_addr);
 	} else {
-		if (!zeropage)
-			err = shmem_mcopy_atomic_pte(dst_mm, dst_pmd,
-						     dst_vma, dst_addr,
-						     src_addr, page);
-		else
-			err = shmem_mfill_zeropage_pte(dst_mm, dst_pmd,
-						       dst_vma, dst_addr);
+		err = shmem_mfill_atomic_pte(dst_mm, dst_pmd, dst_vma,
+					     dst_addr, src_addr,
+					     mode != MCOPY_ATOMIC_NORMAL,
+					     page);
 	}
 
 	return err;
@@ -434,7 +504,7 @@
 					      unsigned long dst_start,
 					      unsigned long src_start,
 					      unsigned long len,
-					      bool zeropage,
+					      enum mcopy_atomic_mode mcopy_mode,
 					      bool *mmap_changing)
 {
 	struct vm_area_struct *dst_vma;
@@ -504,10 +574,12 @@
 	 */
 	if (is_vm_hugetlb_page(dst_vma))
 		return  __mcopy_atomic_hugetlb(dst_mm, dst_vma, dst_start,
-						src_start, len, zeropage);
+						src_start, len, mcopy_mode);
 
 	if (!vma_is_anonymous(dst_vma) && !vma_is_shmem(dst_vma))
 		goto out_unlock;
+	if (!vma_is_shmem(dst_vma) && mcopy_mode == MCOPY_ATOMIC_CONTINUE)
+		goto out_unlock;
 
 	/*
 	 * Ensure the dst_vma has a anon_vma or this page
@@ -554,7 +626,7 @@
 		BUG_ON(pmd_trans_huge(*dst_pmd));
 
 		err = mfill_atomic_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
-				       src_addr, &page, zeropage);
+				       src_addr, &page, mcopy_mode);
 		cond_resched();
 
 		if (unlikely(err == -ENOENT)) {
@@ -603,12 +675,21 @@
 		     unsigned long src_start, unsigned long len,
 		     bool *mmap_changing)
 {
-	return __mcopy_atomic(dst_mm, dst_start, src_start, len, false,
-			      mmap_changing);
+	return __mcopy_atomic(dst_mm, dst_start, src_start, len,
+			      MCOPY_ATOMIC_NORMAL, mmap_changing);
 }
 
 ssize_t mfill_zeropage(struct mm_struct *dst_mm, unsigned long start,
 		       unsigned long len, bool *mmap_changing)
 {
-	return __mcopy_atomic(dst_mm, start, 0, len, true, mmap_changing);
+	return __mcopy_atomic(dst_mm, start, 0, len, MCOPY_ATOMIC_ZEROPAGE,
+			      mmap_changing);
 }
+
+ssize_t mcopy_continue(struct mm_struct *dst_mm, unsigned long start,
+		       unsigned long len, bool *mmap_changing)
+{
+	return __mcopy_atomic(dst_mm, start, 0, len, MCOPY_ATOMIC_CONTINUE,
+			      mmap_changing);
+}
+
diff --git a/mm/vmstat.c b/mm/vmstat.c
index a822204..3748615 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1118,10 +1118,11 @@
 	"nr_mlock",
 	"nr_page_table_pages",
 	"nr_kernel_stack",
-	"nr_bounce",
-#if IS_ENABLED(CONFIG_ZSMALLOC)
-	"nr_zspages",
+#if IS_ENABLED(CONFIG_SHADOW_CALL_STACK)
+	"nr_shadow_call_stack_bytes",
 #endif
+	"nr_bounce",
+	"nr_zspages",
 	"nr_free_cma",
 
 	/* enum numa_stat_item counters */
diff --git a/net/Kconfig b/net/Kconfig
index 0b2fecc..2ce3667f 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -190,7 +190,6 @@
 	depends on NETFILTER_ADVANCED
 	select NETFILTER_FAMILY_BRIDGE
 	select SKB_EXTENSIONS
-	default m
 	---help---
 	  Enabling this option will let arptables resp. iptables see bridged
 	  ARP resp. IP traffic. If you want a bridging firewall, you probably
diff --git a/net/OWNERS b/net/OWNERS
new file mode 100644
index 0000000..ddb7653
--- /dev/null
+++ b/net/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/net/OWNERS
diff --git a/net/core/dev.c b/net/core/dev.c
index a030364..fd7d665 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -143,6 +143,7 @@
 #include <linux/net_namespace.h>
 #include <linux/indirect_call_wrapper.h>
 #include <net/devlink.h>
+#include <trace/hooks/net.h>
 
 #include "net-sysfs.h"
 
@@ -302,6 +303,12 @@
 
 static inline struct list_head *ptype_head(const struct packet_type *pt)
 {
+	struct list_head vendor_pt = { .next  = NULL, };
+
+	trace_android_vh_ptype_head(pt, &vendor_pt);
+	if (vendor_pt.next)
+		return vendor_pt.next;
+
 	if (pt->type == htons(ETH_P_ALL))
 		return pt->dev ? &pt->dev->ptype_all : &ptype_all;
 	else
@@ -2589,8 +2596,6 @@
 		if (dev->num_tc)
 			netif_setup_tc(dev, txq);
 
-		dev_qdisc_change_real_num_tx(dev, txq);
-
 		dev->real_num_tx_queues = txq;
 
 		if (disabling) {
@@ -3033,7 +3038,7 @@
 
 	segs = skb_mac_gso_segment(skb, features);
 
-	if (unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
+	if (segs != skb && unlikely(skb_needs_check(skb, tx_path) && !IS_ERR(segs)))
 		skb_warn_bad_offload(skb);
 
 	return segs;
@@ -9123,7 +9128,7 @@
 	/* Transfer changeable features to wanted_features and enable
 	 * software offloads (GSO and GRO).
 	 */
-	dev->hw_features |= NETIF_F_SOFT_FEATURES;
+	dev->hw_features |= (NETIF_F_SOFT_FEATURES | NETIF_F_SOFT_FEATURES_OFF);
 	dev->features |= NETIF_F_SOFT_FEATURES;
 
 	if (dev->netdev_ops->ndo_udp_tunnel_add) {
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index cbd1885..155ec9c 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -92,6 +92,7 @@
 	[NETIF_F_GSO_SCTP_BIT] =	 "tx-sctp-segmentation",
 	[NETIF_F_GSO_ESP_BIT] =		 "tx-esp-segmentation",
 	[NETIF_F_GSO_UDP_L4_BIT] =	 "tx-udp-segmentation",
+	[NETIF_F_GSO_FRAGLIST_BIT] =	 "tx-gso-list",
 
 	[NETIF_F_FCOE_CRC_BIT] =         "tx-checksum-fcoe-crc",
 	[NETIF_F_SCTP_CRC_BIT] =        "tx-checksum-sctp",
diff --git a/net/core/filter.c b/net/core/filter.c
index 5ebc973..a0d480b 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -5997,6 +5997,8 @@
 		return &bpf_tail_call_proto;
 	case BPF_FUNC_ktime_get_ns:
 		return &bpf_ktime_get_ns_proto;
+	case BPF_FUNC_ktime_get_boot_ns:
+		return &bpf_ktime_get_boot_ns_proto;
 	default:
 		break;
 	}
@@ -6161,6 +6163,8 @@
 		return &bpf_skb_adjust_room_proto;
 	case BPF_FUNC_skb_change_tail:
 		return &bpf_skb_change_tail_proto;
+	case BPF_FUNC_skb_change_head:
+		return &bpf_skb_change_head_proto;
 	case BPF_FUNC_skb_get_tunnel_key:
 		return &bpf_skb_get_tunnel_key_proto;
 	case BPF_FUNC_skb_set_tunnel_key:
@@ -7226,6 +7230,27 @@
 	return insn - insn_buf;
 }
 
+static struct bpf_insn *bpf_convert_shinfo_access(const struct bpf_insn *si,
+						  struct bpf_insn *insn)
+{
+	/* si->dst_reg = skb_shinfo(SKB); */
+#ifdef NET_SKBUFF_DATA_USES_OFFSET
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
+			      BPF_REG_AX, si->src_reg,
+			      offsetof(struct sk_buff, end));
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, head),
+			      si->dst_reg, si->src_reg,
+			      offsetof(struct sk_buff, head));
+	*insn++ = BPF_ALU64_REG(BPF_ADD, si->dst_reg, BPF_REG_AX);
+#else
+	*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
+			      si->dst_reg, si->src_reg,
+			      offsetof(struct sk_buff, end));
+#endif
+
+	return insn;
+}
+
 static u32 bpf_convert_ctx_access(enum bpf_access_type type,
 				  const struct bpf_insn *si,
 				  struct bpf_insn *insn_buf,
@@ -7548,26 +7573,21 @@
 		break;
 
 	case offsetof(struct __sk_buff, gso_segs):
-		/* si->dst_reg = skb_shinfo(SKB); */
-#ifdef NET_SKBUFF_DATA_USES_OFFSET
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
-				      BPF_REG_AX, si->src_reg,
-				      offsetof(struct sk_buff, end));
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, head),
-				      si->dst_reg, si->src_reg,
-				      offsetof(struct sk_buff, head));
-		*insn++ = BPF_ALU64_REG(BPF_ADD, si->dst_reg, BPF_REG_AX);
-#else
-		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct sk_buff, end),
-				      si->dst_reg, si->src_reg,
-				      offsetof(struct sk_buff, end));
-#endif
+		insn = bpf_convert_shinfo_access(si, insn);
 		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct skb_shared_info, gso_segs),
 				      si->dst_reg, si->dst_reg,
 				      bpf_target_off(struct skb_shared_info,
 						     gso_segs, 2,
 						     target_size));
 		break;
+	case offsetof(struct __sk_buff, gso_size):
+		insn = bpf_convert_shinfo_access(si, insn);
+		*insn++ = BPF_LDX_MEM(BPF_FIELD_SIZEOF(struct skb_shared_info, gso_size),
+				      si->dst_reg, si->dst_reg,
+				      bpf_target_off(struct skb_shared_info,
+						     gso_size, 2,
+						     target_size));
+		break;
 	case offsetof(struct __sk_buff, wire_len):
 		BUILD_BUG_ON(FIELD_SIZEOF(struct qdisc_skb_cb, pkt_len) != 4);
 
diff --git a/net/core/net-traces.c b/net/core/net-traces.c
index 283ddb2..465362a 100644
--- a/net/core/net-traces.c
+++ b/net/core/net-traces.c
@@ -35,13 +35,11 @@
 #include <trace/events/tcp.h>
 #include <trace/events/fib.h>
 #include <trace/events/qdisc.h>
-#if IS_ENABLED(CONFIG_BRIDGE)
 #include <trace/events/bridge.h>
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_add);
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_external_learn_add);
 EXPORT_TRACEPOINT_SYMBOL_GPL(fdb_delete);
 EXPORT_TRACEPOINT_SYMBOL_GPL(br_fdb_update);
-#endif
 
 #if IS_ENABLED(CONFIG_PAGE_POOL)
 #include <trace/events/page_pool.h>
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index ac08368..8f51539 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -75,6 +75,7 @@
 #include <linux/capability.h>
 #include <linux/user_namespace.h>
 #include <linux/indirect_call_wrapper.h>
+#include <trace/hooks/net.h>
 
 #include "datagram.h"
 
@@ -702,6 +703,7 @@
 	if (!skb_unref(skb))
 		return;
 
+	trace_android_vh_kfree_skb(skb);
 	trace_kfree_skb(skb, __builtin_return_address(0));
 	__kfree_skb(skb);
 }
@@ -3668,6 +3670,116 @@
 	return head_frag;
 }
 
+struct sk_buff *skb_segment_list(struct sk_buff *skb,
+				 netdev_features_t features,
+				 unsigned int offset)
+{
+	struct sk_buff *list_skb = skb_shinfo(skb)->frag_list;
+	unsigned int tnl_hlen = skb_tnl_header_len(skb);
+	unsigned int delta_truesize = 0;
+	unsigned int delta_len = 0;
+	struct sk_buff *tail = NULL;
+	struct sk_buff *nskb, *tmp;
+	int err;
+
+	skb_push(skb, -skb_network_offset(skb) + offset);
+
+	skb_shinfo(skb)->frag_list = NULL;
+
+	do {
+		nskb = list_skb;
+		list_skb = list_skb->next;
+
+		err = 0;
+		if (skb_shared(nskb)) {
+			tmp = skb_clone(nskb, GFP_ATOMIC);
+			if (tmp) {
+				consume_skb(nskb);
+				nskb = tmp;
+				err = skb_unclone(nskb, GFP_ATOMIC);
+			} else {
+				err = -ENOMEM;
+			}
+		}
+
+		if (!tail)
+			skb->next = nskb;
+		else
+			tail->next = nskb;
+
+		if (unlikely(err)) {
+			nskb->next = list_skb;
+			goto err_linearize;
+		}
+
+		tail = nskb;
+
+		delta_len += nskb->len;
+		delta_truesize += nskb->truesize;
+
+		skb_push(nskb, -skb_network_offset(nskb) + offset);
+
+		skb_release_head_state(nskb);
+		 __copy_skb_header(nskb, skb);
+
+		skb_headers_offset_update(nskb, skb_headroom(nskb) - skb_headroom(skb));
+		skb_copy_from_linear_data_offset(skb, -tnl_hlen,
+						 nskb->data - tnl_hlen,
+						 offset + tnl_hlen);
+
+		if (skb_needs_linearize(nskb, features) &&
+		    __skb_linearize(nskb))
+			goto err_linearize;
+
+	} while (list_skb);
+
+	skb->truesize = skb->truesize - delta_truesize;
+	skb->data_len = skb->data_len - delta_len;
+	skb->len = skb->len - delta_len;
+
+	skb_gso_reset(skb);
+
+	skb->prev = tail;
+
+	if (skb_needs_linearize(skb, features) &&
+	    __skb_linearize(skb))
+		goto err_linearize;
+
+	skb_get(skb);
+
+	return skb;
+
+err_linearize:
+	kfree_skb_list(skb->next);
+	skb->next = NULL;
+	return ERR_PTR(-ENOMEM);
+}
+EXPORT_SYMBOL_GPL(skb_segment_list);
+
+int skb_gro_receive_list(struct sk_buff *p, struct sk_buff *skb)
+{
+	if (unlikely(p->len + skb->len >= 65536))
+		return -E2BIG;
+
+	if (NAPI_GRO_CB(p)->last == p)
+		skb_shinfo(p)->frag_list = skb;
+	else
+		NAPI_GRO_CB(p)->last->next = skb;
+
+	skb_pull(skb, skb_gro_offset(skb));
+
+	NAPI_GRO_CB(p)->last = skb;
+	NAPI_GRO_CB(p)->count++;
+	p->data_len += skb->len;
+	p->truesize += skb->truesize;
+	p->len += skb->len;
+
+	NAPI_GRO_CB(skb)->same_flow = 1;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(skb_gro_receive_list);
+
 /**
  *	skb_segment - Perform protocol segmentation on skb.
  *	@head_skb: buffer to segment
diff --git a/net/core/sock.c b/net/core/sock.c
index 57b7a10..ad632fc 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -134,6 +134,7 @@
 #include <net/bpf_sk_storage.h>
 
 #include <trace/events/sock.h>
+#include <trace/hooks/net.h>
 
 #include <net/tcp.h>
 #include <net/busy_poll.h>
@@ -1620,6 +1621,8 @@
 		if (security_sk_alloc(sk, family, priority))
 			goto out_free;
 
+		trace_android_rvh_sk_alloc(sk);
+
 		if (!try_module_get(prot->owner))
 			goto out_free_sec;
 		sk_tx_queue_clear(sk);
@@ -1629,6 +1632,7 @@
 
 out_free_sec:
 	security_sk_free(sk);
+	trace_android_rvh_sk_free(sk);
 out_free:
 	if (slab != NULL)
 		kmem_cache_free(slab, sk);
@@ -1648,6 +1652,7 @@
 	cgroup_sk_free(&sk->sk_cgrp_data);
 	mem_cgroup_sk_free(sk);
 	security_sk_free(sk);
+	trace_android_rvh_sk_free(sk);
 	if (slab != NULL)
 		kmem_cache_free(slab, sk);
 	else
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index c800220..4810b3a 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -494,6 +494,10 @@
 		goto out;
 
 	snum = ntohs(addr->sin_port);
+	err = -EPERM;
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		goto out;
+
 	err = -EACCES;
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index b1ecc91..6079832 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -805,17 +805,10 @@
 static void igmp_ifc_timer_expire(struct timer_list *t)
 {
 	struct in_device *in_dev = from_timer(in_dev, t, mr_ifc_timer);
-	u32 mr_ifc_count;
 
 	igmpv3_send_cr(in_dev);
-restart:
-	mr_ifc_count = READ_ONCE(in_dev->mr_ifc_count);
-
-	if (mr_ifc_count) {
-		if (cmpxchg(&in_dev->mr_ifc_count,
-			    mr_ifc_count,
-			    mr_ifc_count - 1) != mr_ifc_count)
-			goto restart;
+	if (in_dev->mr_ifc_count) {
+		in_dev->mr_ifc_count--;
 		igmp_ifc_start_timer(in_dev,
 				     unsolicited_report_interval(in_dev));
 	}
@@ -827,7 +820,7 @@
 	struct net *net = dev_net(in_dev->dev);
 	if (IGMP_V1_SEEN(in_dev) || IGMP_V2_SEEN(in_dev))
 		return;
-	WRITE_ONCE(in_dev->mr_ifc_count, in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv);
+	in_dev->mr_ifc_count = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
 	igmp_ifc_start_timer(in_dev, 1);
 }
 
@@ -966,7 +959,7 @@
 				in_dev->mr_qri;
 		}
 		/* cancel the interface change timer */
-		WRITE_ONCE(in_dev->mr_ifc_count, 0);
+		in_dev->mr_ifc_count = 0;
 		if (del_timer(&in_dev->mr_ifc_timer))
 			__in_dev_put(in_dev);
 		/* clear deleted report items */
@@ -1733,7 +1726,7 @@
 		igmp_group_dropped(pmc);
 
 #ifdef CONFIG_IP_MULTICAST
-	WRITE_ONCE(in_dev->mr_ifc_count, 0);
+	in_dev->mr_ifc_count = 0;
 	if (del_timer(&in_dev->mr_ifc_timer))
 		__in_dev_put(in_dev);
 	in_dev->mr_gq_running = 0;
@@ -1950,7 +1943,7 @@
 		pmc->sfmode = MCAST_INCLUDE;
 #ifdef CONFIG_IP_MULTICAST
 		pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
-		WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount);
+		in_dev->mr_ifc_count = pmc->crcount;
 		for (psf = pmc->sources; psf; psf = psf->sf_next)
 			psf->sf_crcount = 0;
 		igmp_ifc_event(pmc->interface);
@@ -2129,7 +2122,7 @@
 		/* else no filters; keep old mode for reports */
 
 		pmc->crcount = in_dev->mr_qrv ?: net->ipv4.sysctl_igmp_qrv;
-		WRITE_ONCE(in_dev->mr_ifc_count, pmc->crcount);
+		in_dev->mr_ifc_count = pmc->crcount;
 		for (psf = pmc->sources; psf; psf = psf->sf_next)
 			psf->sf_crcount = 0;
 		igmp_ifc_event(in_dev);
diff --git a/net/ipv4/ip_tunnel_core.c b/net/ipv4/ip_tunnel_core.c
index 1452a97..cfe21c3 100644
--- a/net/ipv4/ip_tunnel_core.c
+++ b/net/ipv4/ip_tunnel_core.c
@@ -446,3 +446,21 @@
 	static_branch_dec(&ip_tunnel_metadata_cnt);
 }
 EXPORT_SYMBOL_GPL(ip_tunnel_unneed_metadata);
+
+/* Returns either the correct skb->protocol value, or 0 if invalid. */
+__be16 ip_tunnel_parse_protocol(const struct sk_buff *skb)
+{
+	if (skb_network_header(skb) >= skb->head &&
+	    (skb_network_header(skb) + sizeof(struct iphdr)) <= skb_tail_pointer(skb) &&
+	    ip_hdr(skb)->version == 4)
+		return htons(ETH_P_IP);
+	if (skb_network_header(skb) >= skb->head &&
+	    (skb_network_header(skb) + sizeof(struct ipv6hdr)) <= skb_tail_pointer(skb) &&
+	    ipv6_hdr(skb)->version == 6)
+		return htons(ETH_P_IPV6);
+	return 0;
+}
+EXPORT_SYMBOL(ip_tunnel_parse_protocol);
+
+const struct header_ops ip_tunnel_header_ops = { .parse_protocol = ip_tunnel_parse_protocol };
+EXPORT_SYMBOL(ip_tunnel_header_ops);
diff --git a/net/ipv4/nexthop.c b/net/ipv4/nexthop.c
index 4d69b3d..8bdffdf 100644
--- a/net/ipv4/nexthop.c
+++ b/net/ipv4/nexthop.c
@@ -839,36 +839,15 @@
 /* if any FIB entries reference this nexthop, any dst entries
  * need to be regenerated
  */
-static void nh_rt_cache_flush(struct net *net, struct nexthop *nh,
-			      struct nexthop *replaced_nh)
+static void nh_rt_cache_flush(struct net *net, struct nexthop *nh)
 {
 	struct fib6_info *f6i;
-	struct nh_group *nhg;
-	int i;
 
 	if (!list_empty(&nh->fi_list))
 		rt_cache_flush(net);
 
 	list_for_each_entry(f6i, &nh->f6i_list, nh_list)
 		ipv6_stub->fib6_update_sernum(net, f6i);
-
-	/* if an IPv6 group was replaced, we have to release all old
-	 * dsts to make sure all refcounts are released
-	 */
-	if (!replaced_nh->is_group)
-		return;
-
-	/* new dsts must use only the new nexthop group */
-	synchronize_net();
-
-	nhg = rtnl_dereference(replaced_nh->nh_grp);
-	for (i = 0; i < nhg->num_nh; i++) {
-		struct nh_grp_entry *nhge = &nhg->nh_entries[i];
-		struct nh_info *nhi = rtnl_dereference(nhge->nh->nh_info);
-
-		if (nhi->family == AF_INET6)
-			ipv6_stub->fib6_nh_release_dsts(&nhi->fib6_nh);
-	}
 }
 
 static int replace_nexthop_grp(struct net *net, struct nexthop *old,
@@ -1015,7 +994,7 @@
 		err = replace_nexthop_single(net, old, new, extack);
 
 	if (!err) {
-		nh_rt_cache_flush(net, old, new);
+		nh_rt_cache_flush(net, old);
 
 		__remove_nexthop(net, new, NULL);
 		nexthop_put(new);
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index c83a5d0..ef0dff5 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -734,6 +734,13 @@
 		.proc_handler	= proc_do_large_bitmap,
 	},
 	{
+		.procname	= "ip_local_unbindable_ports",
+		.data		= &init_net.ipv4.sysctl_local_unbindable_ports,
+		.maxlen		= 65536,
+		.mode		= 0644,
+		.proc_handler	= proc_do_large_bitmap,
+	},
+	{
 		.procname	= "ip_no_pmtu_disc",
 		.data		= &init_net.ipv4.sysctl_ip_no_pmtu_disc,
 		.maxlen		= sizeof(int),
@@ -1341,11 +1348,17 @@
 
 	net->ipv4.sysctl_local_reserved_ports = kzalloc(65536 / 8, GFP_KERNEL);
 	if (!net->ipv4.sysctl_local_reserved_ports)
-		goto err_ports;
+		goto err_reserved_ports;
+
+	net->ipv4.sysctl_local_unbindable_ports = kzalloc(65536 / 8, GFP_KERNEL);
+	if (!net->ipv4.sysctl_local_unbindable_ports)
+		goto err_unbindable_ports;
 
 	return 0;
 
-err_ports:
+err_unbindable_ports:
+	kfree(net->ipv4.sysctl_local_reserved_ports);
+err_reserved_ports:
 	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
 err_reg:
 	if (!net_eq(net, &init_net))
@@ -1358,6 +1371,7 @@
 {
 	struct ctl_table *table;
 
+	kfree(net->ipv4.sysctl_local_unbindable_ports);
 	kfree(net->ipv4.sysctl_local_reserved_ports);
 	table = net->ipv4.ipv4_hdr->ctl_table_arg;
 	unregister_net_sysctl_table(net->ipv4.ipv4_hdr);
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index c0fcfa2..aa87224 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -79,6 +79,7 @@
 #include <trace/events/tcp.h>
 #include <linux/jump_label_ratelimit.h>
 #include <net/busy_poll.h>
+#include <trace/hooks/net.h>
 
 int sysctl_tcp_max_orphans __read_mostly = NR_FILE;
 
@@ -4486,6 +4487,7 @@
 
 static void tcp_drop(struct sock *sk, struct sk_buff *skb)
 {
+	trace_android_vh_kfree_skb(skb);
 	sk_drops_add(sk, skb);
 	__kfree_skb(skb);
 }
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 3cdf011..ae8bc01 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -2596,9 +2596,12 @@
 
 	case UDP_GRO:
 		lock_sock(sk);
+
+		/* when enabling GRO, accept the related GSO packet type */
 		if (valbool)
 			udp_tunnel_encap_enable(sk->sk_socket);
 		up->gro_enabled = valbool;
+		up->accept_udp_l4 = valbool;
 		release_sock(sk);
 		break;
 
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index 487a92d..0c1aacf 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -184,8 +184,81 @@
 }
 EXPORT_SYMBOL(skb_udp_tunnel_segment);
 
+static void __udpv4_gso_segment_csum(struct sk_buff *seg,
+				     __be32 *oldip, __be32 *newip,
+				     __be16 *oldport, __be16 *newport)
+{
+	struct udphdr *uh;
+	struct iphdr *iph;
+
+	if (*oldip == *newip && *oldport == *newport)
+		return;
+
+	uh = udp_hdr(seg);
+	iph = ip_hdr(seg);
+
+	if (uh->check) {
+		inet_proto_csum_replace4(&uh->check, seg, *oldip, *newip,
+					 true);
+		inet_proto_csum_replace2(&uh->check, seg, *oldport, *newport,
+					 false);
+		if (!uh->check)
+			uh->check = CSUM_MANGLED_0;
+	}
+	*oldport = *newport;
+
+	csum_replace4(&iph->check, *oldip, *newip);
+	*oldip = *newip;
+}
+
+static struct sk_buff *__udpv4_gso_segment_list_csum(struct sk_buff *segs)
+{
+	struct sk_buff *seg;
+	struct udphdr *uh, *uh2;
+	struct iphdr *iph, *iph2;
+
+	seg = segs;
+	uh = udp_hdr(seg);
+	iph = ip_hdr(seg);
+
+	if ((udp_hdr(seg)->dest == udp_hdr(seg->next)->dest) &&
+	    (udp_hdr(seg)->source == udp_hdr(seg->next)->source) &&
+	    (ip_hdr(seg)->daddr == ip_hdr(seg->next)->daddr) &&
+	    (ip_hdr(seg)->saddr == ip_hdr(seg->next)->saddr))
+		return segs;
+
+	while ((seg = seg->next)) {
+		uh2 = udp_hdr(seg);
+		iph2 = ip_hdr(seg);
+
+		__udpv4_gso_segment_csum(seg,
+					 &iph2->saddr, &iph->saddr,
+					 &uh2->source, &uh->source);
+		__udpv4_gso_segment_csum(seg,
+					 &iph2->daddr, &iph->daddr,
+					 &uh2->dest, &uh->dest);
+	}
+
+	return segs;
+}
+
+static struct sk_buff *__udp_gso_segment_list(struct sk_buff *skb,
+					      netdev_features_t features,
+					      bool is_ipv6)
+{
+	unsigned int mss = skb_shinfo(skb)->gso_size;
+
+	skb = skb_segment_list(skb, features, skb_mac_header_len(skb));
+	if (IS_ERR(skb))
+		return skb;
+
+	udp_hdr(skb)->len = htons(sizeof(struct udphdr) + mss);
+
+	return is_ipv6 ? skb : __udpv4_gso_segment_list_csum(skb);
+}
+
 struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
-				  netdev_features_t features)
+				  netdev_features_t features, bool is_ipv6)
 {
 	struct sock *sk = gso_skb->sk;
 	unsigned int sum_truesize = 0;
@@ -196,6 +269,9 @@
 	__sum16 check;
 	__be16 newlen;
 
+	if (skb_shinfo(gso_skb)->gso_type & SKB_GSO_FRAGLIST)
+		return __udp_gso_segment_list(gso_skb, features, is_ipv6);
+
 	mss = skb_shinfo(gso_skb)->gso_size;
 	if (gso_skb->len <= sizeof(*uh) + mss)
 		return ERR_PTR(-EINVAL);
@@ -308,7 +384,7 @@
 		goto out;
 
 	if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4)
-		return __udp_gso_segment(skb, features);
+		return __udp_gso_segment(skb, features, false);
 
 	mss = skb_shinfo(skb)->gso_size;
 	if (unlikely(skb->len <= mss))
@@ -354,6 +430,7 @@
 	struct udphdr *uh2;
 	struct sk_buff *p;
 	unsigned int ulen;
+	int ret = 0;
 
 	/* requires non zero csum, for symmetry with GSO */
 	if (!uh->check) {
@@ -369,7 +446,6 @@
 	}
 	/* pull encapsulating udp header */
 	skb_gro_pull(skb, sizeof(struct udphdr));
-	skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
 
 	list_for_each_entry(p, head, list) {
 		if (!NAPI_GRO_CB(p)->same_flow)
@@ -383,14 +459,40 @@
 			continue;
 		}
 
+		if (NAPI_GRO_CB(skb)->is_flist != NAPI_GRO_CB(p)->is_flist) {
+			NAPI_GRO_CB(skb)->flush = 1;
+			return p;
+		}
+
 		/* Terminate the flow on len mismatch or if it grow "too much".
 		 * Under small packet flood GRO count could elsewhere grow a lot
 		 * leading to excessive truesize values.
 		 * On len mismatch merge the first packet shorter than gso_size,
 		 * otherwise complete the GRO packet.
 		 */
-		if (ulen > ntohs(uh2->len) || skb_gro_receive(p, skb) ||
-		    ulen != ntohs(uh2->len) ||
+		if (ulen > ntohs(uh2->len)) {
+			pp = p;
+		} else {
+			if (NAPI_GRO_CB(skb)->is_flist) {
+				if (!pskb_may_pull(skb, skb_gro_offset(skb))) {
+					NAPI_GRO_CB(skb)->flush = 1;
+					return NULL;
+				}
+				if ((skb->ip_summed != p->ip_summed) ||
+				    (skb->csum_level != p->csum_level)) {
+					NAPI_GRO_CB(skb)->flush = 1;
+					return NULL;
+				}
+				ret = skb_gro_receive_list(p, skb);
+			} else {
+				skb_gro_postpull_rcsum(skb, uh,
+						       sizeof(struct udphdr));
+
+				ret = skb_gro_receive(p, skb);
+			}
+		}
+
+		if (ret || ulen != ntohs(uh2->len) ||
 		    NAPI_GRO_CB(p)->count >= UDP_GRO_CNT_MAX)
 			pp = p;
 
@@ -401,36 +503,35 @@
 	return NULL;
 }
 
-INDIRECT_CALLABLE_DECLARE(struct sock *udp6_lib_lookup_skb(struct sk_buff *skb,
-						   __be16 sport, __be16 dport));
 struct sk_buff *udp_gro_receive(struct list_head *head, struct sk_buff *skb,
-				struct udphdr *uh, udp_lookup_t lookup)
+				struct udphdr *uh, struct sock *sk)
 {
 	struct sk_buff *pp = NULL;
 	struct sk_buff *p;
 	struct udphdr *uh2;
 	unsigned int off = skb_gro_offset(skb);
 	int flush = 1;
-	struct sock *sk;
 
-	rcu_read_lock();
-	sk = INDIRECT_CALL_INET(lookup, udp6_lib_lookup_skb,
-				udp4_lib_lookup_skb, skb, uh->source, uh->dest);
-	if (!sk)
-		goto out_unlock;
+	/* we can do L4 aggregation only if the packet can't land in a tunnel
+	 * otherwise we could corrupt the inner stream
+	 */
+	NAPI_GRO_CB(skb)->is_flist = 0;
+	if (!sk || !udp_sk(sk)->gro_receive) {
+		if (skb->dev->features & NETIF_F_GRO_FRAGLIST)
+			NAPI_GRO_CB(skb)->is_flist = sk ? !udp_sk(sk)->gro_enabled : 1;
 
-	if (udp_sk(sk)->gro_enabled) {
-		pp = call_gro_receive(udp_gro_receive_segment, head, skb);
-		rcu_read_unlock();
-		return pp;
+		if ((sk && udp_sk(sk)->gro_enabled) || NAPI_GRO_CB(skb)->is_flist)
+			return call_gro_receive(udp_gro_receive_segment, head, skb);
+
+		/* no GRO, be sure flush the current packet */
+		goto out;
 	}
 
 	if (NAPI_GRO_CB(skb)->encap_mark ||
 	    (uh->check && skb->ip_summed != CHECKSUM_PARTIAL &&
 	     NAPI_GRO_CB(skb)->csum_cnt == 0 &&
-	     !NAPI_GRO_CB(skb)->csum_valid) ||
-	    !udp_sk(sk)->gro_receive)
-		goto out_unlock;
+	     !NAPI_GRO_CB(skb)->csum_valid))
+		goto out;
 
 	/* mark that this skb passed once through the tunnel gro layer */
 	NAPI_GRO_CB(skb)->encap_mark = 1;
@@ -457,8 +558,7 @@
 	skb_gro_postpull_rcsum(skb, uh, sizeof(struct udphdr));
 	pp = call_gro_receive_sk(udp_sk(sk)->gro_receive, sk, head, skb);
 
-out_unlock:
-	rcu_read_unlock();
+out:
 	skb_gro_flush_final(skb, pp, flush);
 	return pp;
 }
@@ -468,8 +568,10 @@
 struct sk_buff *udp4_gro_receive(struct list_head *head, struct sk_buff *skb)
 {
 	struct udphdr *uh = udp_gro_udphdr(skb);
+	struct sk_buff *pp;
+	struct sock *sk;
 
-	if (unlikely(!uh) || !static_branch_unlikely(&udp_encap_needed_key))
+	if (unlikely(!uh))
 		goto flush;
 
 	/* Don't bother verifying checksum if we're going to flush anyway. */
@@ -484,7 +586,11 @@
 					     inet_gro_compute_pseudo);
 skip:
 	NAPI_GRO_CB(skb)->is_ipv6 = 0;
-	return udp_gro_receive(head, skb, uh, udp4_lib_lookup_skb);
+	rcu_read_lock();
+	sk = static_branch_unlikely(&udp_encap_needed_key) ? udp4_lib_lookup_skb(skb, uh->source, uh->dest) : NULL;
+	pp = udp_gro_receive(head, skb, uh, sk);
+	rcu_read_unlock();
+	return pp;
 
 flush:
 	NAPI_GRO_CB(skb)->flush = 1;
@@ -521,9 +627,7 @@
 	rcu_read_lock();
 	sk = INDIRECT_CALL_INET(lookup, udp6_lib_lookup_skb,
 				udp4_lib_lookup_skb, skb, uh->source, uh->dest);
-	if (sk && udp_sk(sk)->gro_enabled) {
-		err = udp_gro_complete_segment(skb);
-	} else if (sk && udp_sk(sk)->gro_complete) {
+	if (sk && udp_sk(sk)->gro_complete) {
 		skb_shinfo(skb)->gso_type = uh->check ? SKB_GSO_UDP_TUNNEL_CSUM
 					: SKB_GSO_UDP_TUNNEL;
 
@@ -533,6 +637,8 @@
 		skb->encapsulation = 1;
 		err = udp_sk(sk)->gro_complete(sk, skb,
 				nhoff + sizeof(struct udphdr));
+	} else {
+		err = udp_gro_complete_segment(skb);
 	}
 	rcu_read_unlock();
 
@@ -548,6 +654,23 @@
 	const struct iphdr *iph = ip_hdr(skb);
 	struct udphdr *uh = (struct udphdr *)(skb->data + nhoff);
 
+	if (NAPI_GRO_CB(skb)->is_flist) {
+		uh->len = htons(skb->len - nhoff);
+
+		skb_shinfo(skb)->gso_type |= (SKB_GSO_FRAGLIST|SKB_GSO_UDP_L4);
+		skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
+
+		if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
+			if (skb->csum_level < SKB_MAX_CSUM_LEVEL)
+				skb->csum_level++;
+		} else {
+			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			skb->csum_level = 0;
+		}
+
+		return 0;
+	}
+
 	if (uh->check)
 		uh->check = ~udp_v4_check(skb->len - nhoff, iph->saddr,
 					  iph->daddr, 0);
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index d1f29a3..5136f29 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -217,6 +217,7 @@
 	.accept_ra_rt_info_max_plen = 0,
 #endif
 #endif
+	.accept_ra_rt_table	= 0,
 	.proxy_ndp		= 0,
 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
 	.disable_ipv6		= 0,
@@ -271,6 +272,7 @@
 	.accept_ra_rt_info_max_plen = 0,
 #endif
 #endif
+	.accept_ra_rt_table	= 0,
 	.proxy_ndp		= 0,
 	.accept_source_route	= 0,	/* we do not accept RH0 by default. */
 	.disable_ipv6		= 0,
@@ -2363,6 +2365,26 @@
 		ipv6_regen_rndid(idev);
 }
 
+u32 addrconf_rt_table(const struct net_device *dev, u32 default_table)
+{
+	struct inet6_dev *idev = in6_dev_get(dev);
+	int sysctl;
+	u32 table;
+
+	if (!idev)
+		return default_table;
+	sysctl = idev->cnf.accept_ra_rt_table;
+	if (sysctl == 0) {
+		table = default_table;
+	} else if (sysctl > 0) {
+		table = (u32) sysctl;
+	} else {
+		table = (unsigned) dev->ifindex + (-sysctl);
+	}
+	in6_dev_put(idev);
+	return table;
+}
+
 /*
  *	Add prefix route.
  */
@@ -2373,7 +2395,7 @@
 		      u32 flags, gfp_t gfp_flags)
 {
 	struct fib6_config cfg = {
-		.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX,
+		.fc_table = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_PREFIX),
 		.fc_metric = metric ? : IP6_RT_PRIO_ADDRCONF,
 		.fc_ifindex = dev->ifindex,
 		.fc_expires = expires,
@@ -2408,7 +2430,7 @@
 	struct fib6_node *fn;
 	struct fib6_info *rt = NULL;
 	struct fib6_table *table;
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_PREFIX;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_PREFIX);
 
 	table = fib6_get_table(dev_net(dev), tb_id);
 	if (!table)
@@ -6686,6 +6708,13 @@
 #endif
 #endif
 	{
+		.procname	= "accept_ra_rt_table",
+		.data		= &ipv6_devconf.accept_ra_rt_table,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= proc_dointvec,
+	},
+	{
 		.procname	= "proxy_ndp",
 		.data		= &ipv6_devconf.proxy_ndp,
 		.maxlen		= sizeof(int),
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 942da16..ff76df5 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -292,6 +292,8 @@
 		return -EINVAL;
 
 	snum = ntohs(addr->sin6_port);
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		return -EPERM;
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 		return -EACCES;
@@ -955,7 +957,6 @@
 	.ip6_mtu_from_fib6 = ip6_mtu_from_fib6,
 	.fib6_nh_init	   = fib6_nh_init,
 	.fib6_nh_release   = fib6_nh_release,
-	.fib6_nh_release_dsts = fib6_nh_release_dsts,
 	.fib6_update_sernum = fib6_update_sernum_stub,
 	.fib6_rt_update	   = fib6_rt_update,
 	.ip6_del_rt	   = ip6_del_rt,
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 118e19c..455ef84 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -199,6 +199,7 @@
 	return opt->nd_opt_type == ND_OPT_RDNSS ||
 		opt->nd_opt_type == ND_OPT_DNSSL ||
 		opt->nd_opt_type == ND_OPT_CAPTIVE_PORTAL ||
+		opt->nd_opt_type == ND_OPT_PREF64 ||
 		ndisc_ops_is_useropt(dev, opt->nd_opt_type);
 }
 
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 5ef6e27..8d1a50f 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3585,25 +3585,6 @@
 	fib_nh_common_release(&fib6_nh->nh_common);
 }
 
-void fib6_nh_release_dsts(struct fib6_nh *fib6_nh)
-{
-	int cpu;
-
-	if (!fib6_nh->rt6i_pcpu)
-		return;
-
-	for_each_possible_cpu(cpu) {
-		struct rt6_info *pcpu_rt, **ppcpu_rt;
-
-		ppcpu_rt = per_cpu_ptr(fib6_nh->rt6i_pcpu, cpu);
-		pcpu_rt = xchg(ppcpu_rt, NULL);
-		if (pcpu_rt) {
-			dst_dev_put(&pcpu_rt->dst);
-			dst_release(&pcpu_rt->dst);
-		}
-	}
-}
-
 static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,
 					      gfp_t gfp_flags,
 					      struct netlink_ext_ack *extack)
@@ -4158,7 +4139,7 @@
 					   const struct in6_addr *gwaddr,
 					   struct net_device *dev)
 {
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_INFO;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_INFO);
 	int ifindex = dev->ifindex;
 	struct fib6_node *fn;
 	struct fib6_info *rt = NULL;
@@ -4212,7 +4193,7 @@
 		.fc_nlinfo.nl_net = net,
 	};
 
-	cfg.fc_table = l3mdev_fib_table(dev) ? : RT6_TABLE_INFO,
+	cfg.fc_table = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_INFO),
 	cfg.fc_dst = *prefix;
 	cfg.fc_gateway = *gwaddr;
 
@@ -4230,7 +4211,7 @@
 				     const struct in6_addr *addr,
 				     struct net_device *dev)
 {
-	u32 tb_id = l3mdev_fib_table(dev) ? : RT6_TABLE_DFLT;
+	u32 tb_id = l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_DFLT);
 	struct fib6_info *rt;
 	struct fib6_table *table;
 
@@ -4264,7 +4245,7 @@
 				     unsigned int pref)
 {
 	struct fib6_config cfg = {
-		.fc_table	= l3mdev_fib_table(dev) ? : RT6_TABLE_DFLT,
+		.fc_table	= l3mdev_fib_table(dev) ? : addrconf_rt_table(dev, RT6_TABLE_DFLT),
 		.fc_metric	= IP6_RT_PRIO_USER,
 		.fc_ifindex	= dev->ifindex,
 		.fc_flags	= RTF_GATEWAY | RTF_ADDRCONF | RTF_DEFAULT |
@@ -4289,47 +4270,24 @@
 	return rt6_get_dflt_router(net, gwaddr, dev);
 }
 
-static void __rt6_purge_dflt_routers(struct net *net,
-				     struct fib6_table *table)
+static int rt6_addrconf_purge(struct fib6_info *rt, void *arg)
 {
-	struct fib6_info *rt;
+	struct net_device *dev = fib6_info_nh_dev(rt);
+	struct inet6_dev *idev = dev ? __in6_dev_get(dev) : NULL;
 
-restart:
-	rcu_read_lock();
-	for_each_fib6_node_rt_rcu(&table->tb6_root) {
-		struct net_device *dev = fib6_info_nh_dev(rt);
-		struct inet6_dev *idev = dev ? __in6_dev_get(dev) : NULL;
-
-		if (rt->fib6_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
-		    (!idev || idev->cnf.accept_ra != 2) &&
-		    fib6_info_hold_safe(rt)) {
-			rcu_read_unlock();
-			ip6_del_rt(net, rt);
-			goto restart;
-		}
+	if (rt->fib6_flags & (RTF_DEFAULT | RTF_ADDRCONF) &&
+	    (!idev || idev->cnf.accept_ra != 2)) {
+		/* Delete this route. See fib6_clean_tree() */
+		return -1;
 	}
-	rcu_read_unlock();
 
-	table->flags &= ~RT6_TABLE_HAS_DFLT_ROUTER;
+	/* Continue walking */
+	return 0;
 }
 
 void rt6_purge_dflt_routers(struct net *net)
 {
-	struct fib6_table *table;
-	struct hlist_head *head;
-	unsigned int h;
-
-	rcu_read_lock();
-
-	for (h = 0; h < FIB6_TABLE_HASHSZ; h++) {
-		head = &net->ipv6.fib_table_hash[h];
-		hlist_for_each_entry_rcu(table, head, tb6_hlist) {
-			if (table->flags & RT6_TABLE_HAS_DFLT_ROUTER)
-				__rt6_purge_dflt_routers(net, table);
-		}
-	}
-
-	rcu_read_unlock();
+	fib6_clean_all(net, rt6_addrconf_purge, NULL);
 }
 
 static void rtmsg_to_fib6_config(struct net *net,
diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c
index 64b8f05..6e06c90 100644
--- a/net/ipv6/udp_offload.c
+++ b/net/ipv6/udp_offload.c
@@ -46,7 +46,7 @@
 			goto out;
 
 		if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4)
-			return __udp_gso_segment(skb, features);
+			return __udp_gso_segment(skb, features, true);
 
 		/* Do software UFO. Complete and fill in the UDP checksum as HW cannot
 		 * do checksum of UDP packets sent as multiple IP fragments.
@@ -115,8 +115,10 @@
 struct sk_buff *udp6_gro_receive(struct list_head *head, struct sk_buff *skb)
 {
 	struct udphdr *uh = udp_gro_udphdr(skb);
+	struct sk_buff *pp;
+	struct sock *sk;
 
-	if (unlikely(!uh) || !static_branch_unlikely(&udpv6_encap_needed_key))
+	if (unlikely(!uh))
 		goto flush;
 
 	/* Don't bother verifying checksum if we're going to flush anyway. */
@@ -132,7 +134,11 @@
 
 skip:
 	NAPI_GRO_CB(skb)->is_ipv6 = 1;
-	return udp_gro_receive(head, skb, uh, udp6_lib_lookup_skb);
+	rcu_read_lock();
+	sk = static_branch_unlikely(&udpv6_encap_needed_key) ? udp6_lib_lookup_skb(skb, uh->source, uh->dest) : NULL;
+	pp = udp_gro_receive(head, skb, uh, sk);
+	rcu_read_unlock();
+	return pp;
 
 flush:
 	NAPI_GRO_CB(skb)->flush = 1;
@@ -144,6 +150,23 @@
 	const struct ipv6hdr *ipv6h = ipv6_hdr(skb);
 	struct udphdr *uh = (struct udphdr *)(skb->data + nhoff);
 
+	if (NAPI_GRO_CB(skb)->is_flist) {
+		uh->len = htons(skb->len - nhoff);
+
+		skb_shinfo(skb)->gso_type |= (SKB_GSO_FRAGLIST|SKB_GSO_UDP_L4);
+		skb_shinfo(skb)->gso_segs = NAPI_GRO_CB(skb)->count;
+
+		if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
+			if (skb->csum_level < SKB_MAX_CSUM_LEVEL)
+				skb->csum_level++;
+		} else {
+			skb->ip_summed = CHECKSUM_UNNECESSARY;
+			skb->csum_level = 0;
+		}
+
+		return 0;
+	}
+
 	if (uh->check)
 		uh->check = ~udp_v6_check(skb->len - nhoff, &ipv6h->saddr,
 					  &ipv6h->daddr, 0);
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index e574fbf6..de5c3a0 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -2097,7 +2097,7 @@
 	IEEE80211_PROBE_FLAG_RANDOM_SN		= BIT(2),
 };
 
-int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
+int ieee80211_build_preq_ies(struct ieee80211_sub_if_data *sdata, u8 *buffer,
 			     size_t buffer_len,
 			     struct ieee80211_scan_ies *ie_desc,
 			     const u8 *ie, size_t ie_len,
@@ -2137,6 +2137,8 @@
 u8 *ieee80211_ie_build_he_cap(u8 *pos,
 			      const struct ieee80211_sta_he_cap *he_cap,
 			      u8 *end);
+void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
+				    struct sk_buff *skb);
 u8 *ieee80211_ie_build_he_oper(u8 *pos);
 int ieee80211_parse_bitrates(struct cfg80211_chan_def *chandef,
 			     const struct ieee80211_supported_band *sband,
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index 36978a0..66e8307 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -587,6 +587,26 @@
 	return 0;
 }
 
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+			    struct sk_buff *skb)
+{
+	struct ieee80211_supported_band *sband;
+	const struct ieee80211_sband_iftype_data *iftd;
+
+	sband = ieee80211_get_sband(sdata);
+	if (!sband)
+		return -EINVAL;
+
+	iftd = ieee80211_get_sband_iftype_data(sband,
+					       NL80211_IFTYPE_MESH_POINT);
+	/* The device doesn't support HE in mesh mode or at all */
+	if (!iftd)
+		return 0;
+
+	ieee80211_ie_build_he_6ghz_cap(sdata, skb);
+	return 0;
+}
+
 static void ieee80211_mesh_path_timer(struct timer_list *t)
 {
 	struct ieee80211_sub_if_data *sdata =
@@ -766,6 +786,7 @@
 		   2 + sizeof(struct ieee80211_vht_operation) +
 		   ie_len_he_cap +
 		   2 + 1 + sizeof(struct ieee80211_he_operation) +
+		   2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 		   ifmsh->ie_len;
 
 	bcn = kzalloc(sizeof(*bcn) + head_len + tail_len, GFP_KERNEL);
@@ -885,6 +906,7 @@
 	    mesh_add_vht_oper_ie(sdata, skb) ||
 	    mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
 	    mesh_add_he_oper_ie(sdata, skb) ||
+	    mesh_add_he_6ghz_cap_ie(sdata, skb) ||
 	    mesh_add_vendor_ies(sdata, skb))
 		goto out_free;
 
diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h
index 953f720..40492d1 100644
--- a/net/mac80211/mesh.h
+++ b/net/mac80211/mesh.h
@@ -222,6 +222,8 @@
 		       struct sk_buff *skb, u8 ie_len);
 int mesh_add_he_oper_ie(struct ieee80211_sub_if_data *sdata,
 			struct sk_buff *skb);
+int mesh_add_he_6ghz_cap_ie(struct ieee80211_sub_if_data *sdata,
+			    struct sk_buff *skb);
 void mesh_rmc_free(struct ieee80211_sub_if_data *sdata);
 int mesh_rmc_init(struct ieee80211_sub_if_data *sdata);
 void ieee80211s_init(void);
diff --git a/net/mac80211/mesh_plink.c b/net/mac80211/mesh_plink.c
index 737c5f4..3aca89c 100644
--- a/net/mac80211/mesh_plink.c
+++ b/net/mac80211/mesh_plink.c
@@ -238,6 +238,7 @@
 			    2 + sizeof(struct ieee80211_vht_operation) +
 			    ie_len_he_cap +
 			    2 + 1 + sizeof(struct ieee80211_he_operation) +
+			    2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 			    2 + 8 + /* peering IE */
 			    sdata->u.mesh.ie_len);
 	if (!skb)
@@ -328,7 +329,8 @@
 		    mesh_add_vht_cap_ie(sdata, skb) ||
 		    mesh_add_vht_oper_ie(sdata, skb) ||
 		    mesh_add_he_cap_ie(sdata, skb, ie_len_he_cap) ||
-		    mesh_add_he_oper_ie(sdata, skb))
+		    mesh_add_he_oper_ie(sdata, skb) ||
+		    mesh_add_he_6ghz_cap_ie(sdata, skb))
 			goto free;
 	}
 
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index ad00f31..d222af5 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -633,6 +633,8 @@
 				      he_cap->he_cap_elem.phy_cap_info);
 	pos = skb_put(skb, he_cap_size);
 	ieee80211_ie_build_he_cap(pos, he_cap, pos + he_cap_size);
+
+	ieee80211_ie_build_he_6ghz_cap(sdata, skb);
 }
 
 static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
@@ -699,6 +701,7 @@
 			2 + 1 + sizeof(struct ieee80211_he_cap_elem) + /* HE */
 				sizeof(struct ieee80211_he_mcs_nss_supp) +
 				IEEE80211_HE_PPE_THRES_MAX_LEN +
+			2 + 1 + sizeof(struct ieee80211_he_6ghz_capa) +
 			assoc_data->ie_len + /* extra IEs */
 			(assoc_data->fils_kek_len ? 16 /* AES-SIV */ : 0) +
 			9, /* WMM */
diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c
index 4d31d96..b8ac4df 100644
--- a/net/mac80211/scan.c
+++ b/net/mac80211/scan.c
@@ -307,8 +307,9 @@
 }
 
 /* return false if no more work */
-static bool ieee80211_prep_hw_scan(struct ieee80211_local *local)
+static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata)
 {
+	struct ieee80211_local *local = sdata->local;
 	struct cfg80211_scan_request *req;
 	struct cfg80211_chan_def chandef;
 	u8 bands_used = 0;
@@ -355,7 +356,7 @@
 	if (req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT)
 		flags |= IEEE80211_PROBE_FLAG_MIN_CONTENT;
 
-	ielen = ieee80211_build_preq_ies(local,
+	ielen = ieee80211_build_preq_ies(sdata,
 					 (u8 *)local->hw_scan_req->req.ie,
 					 local->hw_scan_ies_bufsize,
 					 &local->hw_scan_req->ies,
@@ -395,9 +396,12 @@
 	if (WARN_ON(!local->scan_req))
 		return;
 
+	scan_sdata = rcu_dereference_protected(local->scan_sdata,
+					       lockdep_is_held(&local->mtx));
+
 	if (hw_scan && !aborted &&
 	    !ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS) &&
-	    ieee80211_prep_hw_scan(local)) {
+	    ieee80211_prep_hw_scan(scan_sdata)) {
 		int rc;
 
 		rc = drv_hw_scan(local,
@@ -426,9 +430,6 @@
 		cfg80211_scan_done(scan_req, &local->scan_info);
 	}
 	RCU_INIT_POINTER(local->scan_req, NULL);
-
-	scan_sdata = rcu_dereference_protected(local->scan_sdata,
-					       lockdep_is_held(&local->mtx));
 	RCU_INIT_POINTER(local->scan_sdata, NULL);
 
 	local->scanning = 0;
@@ -770,7 +771,7 @@
 	ieee80211_recalc_idle(local);
 
 	if (hw_scan) {
-		WARN_ON(!ieee80211_prep_hw_scan(local));
+		WARN_ON(!ieee80211_prep_hw_scan(sdata));
 		rc = drv_hw_scan(local, sdata, local->hw_scan_req);
 	} else {
 		rc = ieee80211_start_sw_scan(local, sdata);
@@ -1267,7 +1268,7 @@
 
 	ieee80211_prepare_scan_chandef(&chandef, req->scan_width);
 
-	ieee80211_build_preq_ies(local, ie, num_bands * iebufsz,
+	ieee80211_build_preq_ies(sdata, ie, num_bands * iebufsz,
 				 &sched_scan_ies, req->ie,
 				 req->ie_len, bands_used, rate_masks, &chandef,
 				 flags);
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index c1c117f..eb60a93 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -1632,7 +1632,20 @@
 	}
 }
 
-static int ieee80211_build_preq_ies_band(struct ieee80211_local *local,
+static u8 *ieee80211_write_he_6ghz_cap(u8 *pos, __le16 cap, u8 *end)
+{
+	if ((end - pos) < 5)
+		return pos;
+
+	*pos++ = WLAN_EID_EXTENSION;
+	*pos++ = 1 + sizeof(cap);
+	*pos++ = WLAN_EID_EXT_HE_6GHZ_CAPA;
+	memcpy(pos, &cap, sizeof(cap));
+
+	return pos + 2;
+}
+
+static int ieee80211_build_preq_ies_band(struct ieee80211_sub_if_data *sdata,
 					 u8 *buffer, size_t buffer_len,
 					 const u8 *ie, size_t ie_len,
 					 enum nl80211_band band,
@@ -1640,6 +1653,7 @@
 					 struct cfg80211_chan_def *chandef,
 					 size_t *offset, u32 flags)
 {
+	struct ieee80211_local *local = sdata->local;
 	struct ieee80211_supported_band *sband;
 	const struct ieee80211_sta_he_cap *he_cap;
 	u8 *pos = buffer, *end = buffer + buffer_len;
@@ -1817,6 +1831,14 @@
 		pos = ieee80211_ie_build_he_cap(pos, he_cap, end);
 		if (!pos)
 			goto out_err;
+
+		if (sband->band == NL80211_BAND_6GHZ) {
+			enum nl80211_iftype iftype =
+				ieee80211_vif_type_p2p(&sdata->vif);
+			__le16 cap = ieee80211_get_he_6ghz_capa(sband, iftype);
+
+			pos = ieee80211_write_he_6ghz_cap(pos, cap, end);
+		}
 	}
 
 	/*
@@ -1831,7 +1853,7 @@
 	return pos - buffer;
 }
 
-int ieee80211_build_preq_ies(struct ieee80211_local *local, u8 *buffer,
+int ieee80211_build_preq_ies(struct ieee80211_sub_if_data *sdata, u8 *buffer,
 			     size_t buffer_len,
 			     struct ieee80211_scan_ies *ie_desc,
 			     const u8 *ie, size_t ie_len,
@@ -1846,7 +1868,7 @@
 
 	for (i = 0; i < NUM_NL80211_BANDS; i++) {
 		if (bands_used & BIT(i)) {
-			pos += ieee80211_build_preq_ies_band(local,
+			pos += ieee80211_build_preq_ies_band(sdata,
 							     buffer + pos,
 							     buffer_len - pos,
 							     ie, ie_len, i,
@@ -1908,7 +1930,7 @@
 		return NULL;
 
 	rate_masks[chan->band] = ratemask;
-	ies_len = ieee80211_build_preq_ies(local, skb_tail_pointer(skb),
+	ies_len = ieee80211_build_preq_ies(sdata, skb_tail_pointer(skb),
 					   skb_tailroom(skb), &dummy_ie_desc,
 					   ie, ie_len, BIT(chan->band),
 					   rate_masks, &chandef, flags);
@@ -2808,6 +2830,54 @@
 	return pos;
 }
 
+void ieee80211_ie_build_he_6ghz_cap(struct ieee80211_sub_if_data *sdata,
+				    struct sk_buff *skb)
+{
+	struct ieee80211_supported_band *sband;
+	const struct ieee80211_sband_iftype_data *iftd;
+	enum nl80211_iftype iftype = ieee80211_vif_type_p2p(&sdata->vif);
+	u8 *pos;
+	u16 cap;
+
+	sband = ieee80211_get_sband(sdata);
+	if (!sband)
+		return;
+
+	iftd = ieee80211_get_sband_iftype_data(sband, iftype);
+	if (WARN_ON(!iftd))
+		return;
+
+	/* Check for device HE 6 GHz capability before adding element */
+	if (!iftd->he_6ghz_capa.capa)
+		return;
+
+	cap = le16_to_cpu(iftd->he_6ghz_capa.capa);
+	cap &= ~IEEE80211_HE_6GHZ_CAP_SM_PS;
+
+	switch (sdata->smps_mode) {
+	case IEEE80211_SMPS_AUTOMATIC:
+	case IEEE80211_SMPS_NUM_MODES:
+		WARN_ON(1);
+		/* fall through */
+	case IEEE80211_SMPS_OFF:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DISABLED,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	case IEEE80211_SMPS_STATIC:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_STATIC,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	case IEEE80211_SMPS_DYNAMIC:
+		cap |= u16_encode_bits(WLAN_HT_CAP_SM_PS_DYNAMIC,
+				       IEEE80211_HE_6GHZ_CAP_SM_PS);
+		break;
+	}
+
+	pos = skb_put(skb, 2 + 1 + sizeof(cap));
+	ieee80211_write_he_6ghz_cap(pos, cpu_to_le16(cap),
+				    pos + 2 + 1 + sizeof(cap));
+}
+
 u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
 			       const struct cfg80211_chan_def *chandef,
 			       u16 prot_mode, bool rifs_mode)
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
index ef72819..2ab0599 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
@@ -1484,6 +1484,29 @@
 	  If you want to compile it as a module, say M here and read
 	  <file:Documentation/kbuild/modules.rst>.  If unsure, say `N'.
 
+config NETFILTER_XT_MATCH_QUOTA2
+	tristate '"quota2" match support'
+	depends on NETFILTER_ADVANCED
+	help
+	  This option adds a `quota2' match, which allows to match on a
+	  byte counter correctly and not per CPU.
+	  It allows naming the quotas.
+	  This is based on http://xtables-addons.git.sourceforge.net
+
+	  If you want to compile it as a module, say M here and read
+	  <file:Documentation/kbuild/modules.txt>.  If unsure, say `N'.
+
+config NETFILTER_XT_MATCH_QUOTA2_LOG
+	bool '"quota2" Netfilter LOG support'
+	depends on NETFILTER_XT_MATCH_QUOTA2
+	default n
+	help
+	  This option allows `quota2' to log ONCE when a quota limit
+	  is passed. It logs via NETLINK using the NETLINK_NFLOG family.
+	  It logs similarly to how ipt_ULOG would without data.
+
+	  If unsure, say `N'.
+
 config NETFILTER_XT_MATCH_RATEEST
 	tristate '"rateest" match support'
 	depends on NETFILTER_ADVANCED
diff --git a/net/netfilter/Makefile b/net/netfilter/Makefile
index 4fc075b..f3e1af38 100644
--- a/net/netfilter/Makefile
+++ b/net/netfilter/Makefile
@@ -192,6 +192,7 @@
 obj-$(CONFIG_NETFILTER_XT_MATCH_PKTTYPE) += xt_pkttype.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_POLICY) += xt_policy.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_QUOTA) += xt_quota.o
+obj-$(CONFIG_NETFILTER_XT_MATCH_QUOTA2) += xt_quota2.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_RATEEST) += xt_rateest.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_REALM) += xt_realm.o
 obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) += xt_recent.o
diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c
index 4bcc36e..072a4f7 100644
--- a/net/netfilter/nf_conntrack_core.c
+++ b/net/netfilter/nf_conntrack_core.c
@@ -33,6 +33,7 @@
 #include <linux/mm.h>
 #include <linux/nsproxy.h>
 #include <linux/rculist_nulls.h>
+#include <trace/hooks/net.h>
 
 #include <net/netfilter/nf_conntrack.h>
 #include <net/netfilter/nf_conntrack_l4proto.h>
@@ -1366,6 +1367,8 @@
 
 	nf_ct_zone_add(ct, zone);
 
+	trace_android_rvh_nf_conn_alloc(ct);
+
 	/* Because we use RCU lookups, we set ct_general.use to zero before
 	 * this is inserted in any list.
 	 */
@@ -1399,6 +1402,7 @@
 	nf_ct_ext_free(ct);
 	kmem_cache_free(nf_conntrack_cachep, ct);
 	smp_mb__before_atomic();
+	trace_android_rvh_nf_conn_free(ct);
 	atomic_dec(&net->ct.count);
 }
 EXPORT_SYMBOL_GPL(nf_conntrack_free);
diff --git a/net/netfilter/xt_IDLETIMER.c b/net/netfilter/xt_IDLETIMER.c
index f56d3ed..a7e0b7f 100644
--- a/net/netfilter/xt_IDLETIMER.c
+++ b/net/netfilter/xt_IDLETIMER.c
@@ -6,6 +6,7 @@
  * After timer expires a kevent will be sent.
  *
  * Copyright (C) 2004, 2010 Nokia Corporation
+ *
  * Written by Timo Teras <ext-timo.teras@nokia.com>
  *
  * Converted to x_tables and reworked for upstream inclusion
@@ -25,8 +26,17 @@
 #include <linux/netfilter/xt_IDLETIMER.h>
 #include <linux/kdev_t.h>
 #include <linux/kobject.h>
+#include <linux/skbuff.h>
 #include <linux/workqueue.h>
 #include <linux/sysfs.h>
+#include <linux/rtc.h>
+#include <linux/time.h>
+#include <linux/math64.h>
+#include <linux/suspend.h>
+#include <linux/notifier.h>
+#include <net/net_namespace.h>
+#include <net/sock.h>
+#include <net/inet_sock.h>
 
 struct idletimer_tg {
 	struct list_head entry;
@@ -36,14 +46,112 @@
 	struct kobject *kobj;
 	struct device_attribute attr;
 
+	struct timespec64 delayed_timer_trigger;
+	struct timespec64 last_modified_timer;
+	struct timespec64 last_suspend_time;
+	struct notifier_block pm_nb;
+
+	int timeout;
 	unsigned int refcnt;
+	bool work_pending;
+	bool send_nl_msg;
+	bool active;
+	uid_t uid;
+	bool suspend_time_valid;
 };
 
 static LIST_HEAD(idletimer_tg_list);
 static DEFINE_MUTEX(list_mutex);
+static DEFINE_SPINLOCK(timestamp_lock);
 
 static struct kobject *idletimer_tg_kobj;
 
+static bool check_for_delayed_trigger(struct idletimer_tg *timer,
+		struct timespec64 *ts)
+{
+	bool state;
+	struct timespec64 temp;
+	spin_lock_bh(&timestamp_lock);
+	timer->work_pending = false;
+	if ((ts->tv_sec - timer->last_modified_timer.tv_sec) > timer->timeout ||
+			timer->delayed_timer_trigger.tv_sec != 0) {
+		state = false;
+		temp.tv_sec = timer->timeout;
+		temp.tv_nsec = 0;
+		if (timer->delayed_timer_trigger.tv_sec != 0) {
+			temp = timespec64_add(timer->delayed_timer_trigger,
+					      temp);
+			ts->tv_sec = temp.tv_sec;
+			ts->tv_nsec = temp.tv_nsec;
+			timer->delayed_timer_trigger.tv_sec = 0;
+			timer->work_pending = true;
+			schedule_work(&timer->work);
+		} else {
+			temp = timespec64_add(timer->last_modified_timer, temp);
+			ts->tv_sec = temp.tv_sec;
+			ts->tv_nsec = temp.tv_nsec;
+		}
+	} else {
+		state = timer->active;
+	}
+	spin_unlock_bh(&timestamp_lock);
+	return state;
+}
+
+static void notify_netlink_uevent(const char *iface, struct idletimer_tg *timer)
+{
+	char iface_msg[NLMSG_MAX_SIZE];
+	char state_msg[NLMSG_MAX_SIZE];
+	char timestamp_msg[NLMSG_MAX_SIZE];
+	char uid_msg[NLMSG_MAX_SIZE];
+	char *envp[] = { iface_msg, state_msg, timestamp_msg, uid_msg, NULL };
+	int res;
+	struct timespec64 ts;
+	uint64_t time_ns;
+	bool state;
+
+	res = snprintf(iface_msg, NLMSG_MAX_SIZE, "INTERFACE=%s",
+		       iface);
+	if (NLMSG_MAX_SIZE <= res) {
+		pr_err("message too long (%d)", res);
+		return;
+	}
+
+	ts = ktime_to_timespec64(ktime_get_boottime());
+	state = check_for_delayed_trigger(timer, &ts);
+	res = snprintf(state_msg, NLMSG_MAX_SIZE, "STATE=%s",
+			state ? "active" : "inactive");
+
+	if (NLMSG_MAX_SIZE <= res) {
+		pr_err("message too long (%d)", res);
+		return;
+	}
+
+	if (state) {
+		res = snprintf(uid_msg, NLMSG_MAX_SIZE, "UID=%u", timer->uid);
+		if (NLMSG_MAX_SIZE <= res)
+			pr_err("message too long (%d)", res);
+	} else {
+		res = snprintf(uid_msg, NLMSG_MAX_SIZE, "UID=");
+		if (NLMSG_MAX_SIZE <= res)
+			pr_err("message too long (%d)", res);
+	}
+
+	time_ns = timespec64_to_ns(&ts);
+	res = snprintf(timestamp_msg, NLMSG_MAX_SIZE, "TIME_NS=%llu", time_ns);
+	if (NLMSG_MAX_SIZE <= res) {
+		timestamp_msg[0] = '\0';
+		pr_err("message too long (%d)", res);
+	}
+
+	pr_debug("putting nlmsg: <%s> <%s> <%s> <%s>\n", iface_msg, state_msg,
+		 timestamp_msg, uid_msg);
+	kobject_uevent_env(idletimer_tg_kobj, KOBJ_CHANGE, envp);
+	return;
+
+
+}
+
 static
 struct idletimer_tg *__idletimer_tg_find_by_label(const char *label)
 {
@@ -62,6 +170,7 @@
 {
 	struct idletimer_tg *timer;
 	unsigned long expires = 0;
+	unsigned long now = jiffies;
 
 	mutex_lock(&list_mutex);
 
@@ -71,11 +180,15 @@
 
 	mutex_unlock(&list_mutex);
 
-	if (time_after(expires, jiffies))
+	if (time_after(expires, now))
 		return sprintf(buf, "%u\n",
-			       jiffies_to_msecs(expires - jiffies) / 1000);
+			       jiffies_to_msecs(expires - now) / 1000);
 
-	return sprintf(buf, "0\n");
+	if (timer->send_nl_msg)
+		return sprintf(buf, "0 %d\n",
+			jiffies_to_msecs(now - expires) / 1000);
+	else
+		return sprintf(buf, "0\n");
 }
 
 static void idletimer_tg_work(struct work_struct *work)
@@ -84,6 +197,9 @@
 						  work);
 
 	sysfs_notify(idletimer_tg_kobj, NULL, timer->attr.attr.name);
+
+	if (timer->send_nl_msg)
+		notify_netlink_uevent(timer->attr.attr.name, timer);
 }
 
 static void idletimer_tg_expired(struct timer_list *t)
@@ -91,8 +207,61 @@
 	struct idletimer_tg *timer = from_timer(timer, t, timer);
 
 	pr_debug("timer %s expired\n", timer->attr.attr.name);
-
+	spin_lock_bh(&timestamp_lock);
+	timer->active = false;
+	timer->work_pending = true;
 	schedule_work(&timer->work);
+	spin_unlock_bh(&timestamp_lock);
+}
+
+static int idletimer_resume(struct notifier_block *notifier,
+		unsigned long pm_event, void *unused)
+{
+	struct timespec64 ts;
+	unsigned long time_diff, now = jiffies;
+	struct idletimer_tg *timer = container_of(notifier,
+			struct idletimer_tg, pm_nb);
+	if (!timer)
+		return NOTIFY_DONE;
+	switch (pm_event) {
+	case PM_SUSPEND_PREPARE:
+		timer->last_suspend_time =
+			ktime_to_timespec64(ktime_get_boottime());
+		timer->suspend_time_valid = true;
+		break;
+	case PM_POST_SUSPEND:
+		if (!timer->suspend_time_valid)
+			break;
+		timer->suspend_time_valid = false;
+
+		spin_lock_bh(&timestamp_lock);
+		if (!timer->active) {
+			spin_unlock_bh(&timestamp_lock);
+			break;
+		}
+		/* since jiffies are not updated when suspended now represents
+		 * the time it would have suspended */
+		if (time_after(timer->timer.expires, now)) {
+			ts = ktime_to_timespec64(ktime_get_boottime());
+			ts = timespec64_sub(ts, timer->last_suspend_time);
+			time_diff = timespec64_to_jiffies(&ts);
+			if (timer->timer.expires > (time_diff + now)) {
+				mod_timer_pending(&timer->timer,
+						(timer->timer.expires - time_diff));
+			} else {
+				del_timer(&timer->timer);
+				timer->timer.expires = 0;
+				timer->active = false;
+				timer->work_pending = true;
+				schedule_work(&timer->work);
+			}
+		}
+		spin_unlock_bh(&timestamp_lock);
+		break;
+	default:
+		break;
+	}
+	return NOTIFY_DONE;
 }
 
 static int idletimer_check_sysfs_name(const char *name, unsigned int size)
@@ -115,7 +284,7 @@
 {
 	int ret;
 
-	info->timer = kmalloc(sizeof(*info->timer), GFP_KERNEL);
+	info->timer = kzalloc(sizeof(*info->timer), GFP_KERNEL);
 	if (!info->timer) {
 		ret = -ENOMEM;
 		goto out;
@@ -144,6 +313,22 @@
 
 	timer_setup(&info->timer->timer, idletimer_tg_expired, 0);
 	info->timer->refcnt = 1;
+	info->timer->send_nl_msg = (info->send_nl_msg == 0) ? false : true;
+	info->timer->active = true;
+	info->timer->timeout = info->timeout;
+
+	info->timer->delayed_timer_trigger.tv_sec = 0;
+	info->timer->delayed_timer_trigger.tv_nsec = 0;
+	info->timer->work_pending = false;
+	info->timer->uid = 0;
+	info->timer->last_modified_timer =
+		ktime_to_timespec64(ktime_get_boottime());
+
+	info->timer->pm_nb.notifier_call = idletimer_resume;
+	ret = register_pm_notifier(&info->timer->pm_nb);
+	if (ret)
+		printk(KERN_WARNING "[%s] Failed to register pm notifier %d\n",
+				__func__, ret);
 
 	INIT_WORK(&info->timer->work, idletimer_tg_work);
 
@@ -160,6 +345,42 @@
 	return ret;
 }
 
+static void reset_timer(const struct idletimer_tg_info *info,
+			struct sk_buff *skb)
+{
+	unsigned long now = jiffies;
+	struct idletimer_tg *timer = info->timer;
+	bool timer_prev;
+
+	spin_lock_bh(&timestamp_lock);
+	timer_prev = timer->active;
+	timer->active = true;
+	/* timer_prev is used to guard overflow problem in time_before*/
+	if (!timer_prev || time_before(timer->timer.expires, now)) {
+		pr_debug("Starting Checkentry timer (Expired, Jiffies): %lu, %lu\n",
+				timer->timer.expires, now);
+
+		/* Stores the uid resposible for waking up the radio */
+		if (skb && (skb->sk)) {
+			timer->uid = from_kuid_munged(current_user_ns(),
+					sock_i_uid(skb_to_full_sk(skb)));
+		}
+
+		/* checks if there is a pending inactive notification*/
+		if (timer->work_pending)
+			timer->delayed_timer_trigger = timer->last_modified_timer;
+		else {
+			timer->work_pending = true;
+			schedule_work(&timer->work);
+		}
+	}
+
+	timer->last_modified_timer = ktime_to_timespec64(ktime_get_boottime());
+	mod_timer(&timer->timer,
+			msecs_to_jiffies(info->timeout * 1000) + now);
+	spin_unlock_bh(&timestamp_lock);
+}
+
 /*
  * The actual xt_tables plugin.
  */
@@ -167,13 +388,23 @@
 					 const struct xt_action_param *par)
 {
 	const struct idletimer_tg_info *info = par->targinfo;
+	unsigned long now = jiffies;
 
 	pr_debug("resetting timer %s, timeout period %u\n",
 		 info->label, info->timeout);
 
-	mod_timer(&info->timer->timer,
-		  msecs_to_jiffies(info->timeout * 1000) + jiffies);
+	BUG_ON(!info->timer);
 
+	info->timer->active = true;
+
+	if (time_before(info->timer->timer.expires, now)) {
+		schedule_work(&info->timer->work);
+		pr_debug("Starting timer %s (Expired, Jiffies): %lu, %lu\n",
+			 info->label, info->timer->timer.expires, now);
+	}
+
+	/* TODO: Avoid modifying timers on each packet */
+	reset_timer(info, skb);
 	return XT_CONTINUE;
 }
 
@@ -182,7 +413,7 @@
 	struct idletimer_tg_info *info = par->targinfo;
 	int ret;
 
-	pr_debug("checkentry targinfo%s\n", info->label);
+	pr_debug("checkentry targinfo %s\n", info->label);
 
 	if (info->timeout == 0) {
 		pr_debug("timeout value is zero\n");
@@ -204,9 +435,7 @@
 	info->timer = __idletimer_tg_find_by_label(info->label);
 	if (info->timer) {
 		info->timer->refcnt++;
-		mod_timer(&info->timer->timer,
-			  msecs_to_jiffies(info->timeout * 1000) + jiffies);
-
+		reset_timer(info, NULL);
 		pr_debug("increased refcnt of timer %s to %u\n",
 			 info->label, info->timer->refcnt);
 	} else {
@@ -219,6 +448,7 @@
 	}
 
 	mutex_unlock(&list_mutex);
+
 	return 0;
 }
 
@@ -235,13 +465,14 @@
 
 		list_del(&info->timer->entry);
 		del_timer_sync(&info->timer->timer);
-		cancel_work_sync(&info->timer->work);
 		sysfs_remove_file(idletimer_tg_kobj, &info->timer->attr.attr);
+		unregister_pm_notifier(&info->timer->pm_nb);
+		cancel_work_sync(&info->timer->work);
 		kfree(info->timer->attr.attr.name);
 		kfree(info->timer);
 	} else {
 		pr_debug("decreased refcnt of timer %s to %u\n",
-			 info->label, info->timer->refcnt);
+		info->label, info->timer->refcnt);
 	}
 
 	mutex_unlock(&list_mutex);
@@ -249,6 +480,7 @@
 
 static struct xt_target idletimer_tg __read_mostly = {
 	.name		= "IDLETIMER",
+	.revision	= 1,
 	.family		= NFPROTO_UNSPEC,
 	.target		= idletimer_tg_target,
 	.targetsize     = sizeof(struct idletimer_tg_info),
@@ -315,3 +547,4 @@
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("ipt_IDLETIMER");
 MODULE_ALIAS("ip6t_IDLETIMER");
+MODULE_ALIAS("arpt_IDLETIMER");
diff --git a/net/netfilter/xt_quota2.c b/net/netfilter/xt_quota2.c
new file mode 100644
index 0000000..95ebfcb
--- /dev/null
+++ b/net/netfilter/xt_quota2.c
@@ -0,0 +1,397 @@
+/*
+ * xt_quota2 - enhanced xt_quota that can count upwards and in packets
+ * as a minimal accounting match.
+ * by Jan Engelhardt <jengelh@medozas.de>, 2008
+ *
+ * Originally based on xt_quota.c:
+ * 	netfilter module to enforce network quotas
+ * 	Sam Johnston <samj@samj.net>
+ *
+ *	This program is free software; you can redistribute it and/or modify
+ *	it under the terms of the GNU General Public License; either
+ *	version 2 of the License, as published by the Free Software Foundation.
+ */
+#include <linux/list.h>
+#include <linux/module.h>
+#include <linux/proc_fs.h>
+#include <linux/skbuff.h>
+#include <linux/spinlock.h>
+#include <asm/atomic.h>
+#include <net/netlink.h>
+
+#include <linux/netfilter/x_tables.h>
+#include <linux/netfilter/xt_quota2.h>
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+/* For compatibility, these definitions are copied from the
+ * deprecated header file <linux/netfilter_ipv4/ipt_ULOG.h> */
+#define ULOG_MAC_LEN	80
+#define ULOG_PREFIX_LEN	32
+
+/* Format of the ULOG packets passed through netlink */
+typedef struct ulog_packet_msg {
+	unsigned long mark;
+	long timestamp_sec;
+	long timestamp_usec;
+	unsigned int hook;
+	char indev_name[IFNAMSIZ];
+	char outdev_name[IFNAMSIZ];
+	size_t data_len;
+	char prefix[ULOG_PREFIX_LEN];
+	unsigned char mac_len;
+	unsigned char mac[ULOG_MAC_LEN];
+	unsigned char payload[0];
+} ulog_packet_msg_t;
+#endif
+
+/**
+ * @lock:	lock to protect quota writers from each other
+ */
+struct xt_quota_counter {
+	u_int64_t quota;
+	spinlock_t lock;
+	struct list_head list;
+	atomic_t ref;
+	char name[sizeof(((struct xt_quota_mtinfo2 *)NULL)->name)];
+	struct proc_dir_entry *procfs_entry;
+};
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+/* Harald's favorite number +1 :D From ipt_ULOG.C */
+static int qlog_nl_event = 112;
+module_param_named(event_num, qlog_nl_event, uint, S_IRUGO | S_IWUSR);
+MODULE_PARM_DESC(event_num,
+		 "Event number for NETLINK_NFLOG message. 0 disables log."
+		 "111 is what ipt_ULOG uses.");
+static struct sock *nflognl;
+#endif
+
+static LIST_HEAD(counter_list);
+static DEFINE_SPINLOCK(counter_list_lock);
+
+static struct proc_dir_entry *proc_xt_quota;
+static unsigned int quota_list_perms = S_IRUGO | S_IWUSR;
+static kuid_t quota_list_uid = KUIDT_INIT(0);
+static kgid_t quota_list_gid = KGIDT_INIT(0);
+module_param_named(perms, quota_list_perms, uint, S_IRUGO | S_IWUSR);
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+static void quota2_log(unsigned int hooknum,
+		       const struct sk_buff *skb,
+		       const struct net_device *in,
+		       const struct net_device *out,
+		       const char *prefix)
+{
+	ulog_packet_msg_t *pm;
+	struct sk_buff *log_skb;
+	size_t size;
+	struct nlmsghdr *nlh;
+
+	if (!qlog_nl_event)
+		return;
+
+	size = NLMSG_SPACE(sizeof(*pm));
+	size = max(size, (size_t)NLMSG_GOODSIZE);
+	log_skb = alloc_skb(size, GFP_ATOMIC);
+	if (!log_skb) {
+		pr_err("xt_quota2: cannot alloc skb for logging\n");
+		return;
+	}
+
+	nlh = nlmsg_put(log_skb, /*pid*/0, /*seq*/0, qlog_nl_event,
+			sizeof(*pm), 0);
+	if (!nlh) {
+		pr_err("xt_quota2: nlmsg_put failed\n");
+		kfree_skb(log_skb);
+		return;
+	}
+	pm = nlmsg_data(nlh);
+	memset(pm, 0, sizeof(*pm));
+	if (skb->tstamp == 0)
+		__net_timestamp((struct sk_buff *)skb);
+	pm->hook = hooknum;
+	if (prefix != NULL)
+		strlcpy(pm->prefix, prefix, sizeof(pm->prefix));
+	if (in)
+		strlcpy(pm->indev_name, in->name, sizeof(pm->indev_name));
+	if (out)
+		strlcpy(pm->outdev_name, out->name, sizeof(pm->outdev_name));
+
+	NETLINK_CB(log_skb).dst_group = 1;
+	pr_debug("throwing 1 packets to netlink group 1\n");
+	netlink_broadcast(nflognl, log_skb, 0, 1, GFP_ATOMIC);
+}
+#else
+static void quota2_log(unsigned int hooknum,
+		       const struct sk_buff *skb,
+		       const struct net_device *in,
+		       const struct net_device *out,
+		       const char *prefix)
+{
+}
+#endif  /* if+else CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG */
+
+static ssize_t quota_proc_read(struct file *file, char __user *buf,
+			   size_t size, loff_t *ppos)
+{
+	struct xt_quota_counter *e = PDE_DATA(file_inode(file));
+	char tmp[24];
+	size_t tmp_size;
+
+	spin_lock_bh(&e->lock);
+	tmp_size = scnprintf(tmp, sizeof(tmp), "%llu\n", e->quota);
+	spin_unlock_bh(&e->lock);
+	return simple_read_from_buffer(buf, size, ppos, tmp, tmp_size);
+}
+
+static ssize_t quota_proc_write(struct file *file, const char __user *input,
+                            size_t size, loff_t *ppos)
+{
+	struct xt_quota_counter *e = PDE_DATA(file_inode(file));
+	char buf[sizeof("18446744073709551616")];
+
+	if (size > sizeof(buf))
+		size = sizeof(buf);
+	if (copy_from_user(buf, input, size) != 0)
+		return -EFAULT;
+	buf[sizeof(buf)-1] = '\0';
+	if (size < sizeof(buf))
+		buf[size] = '\0';
+
+	spin_lock_bh(&e->lock);
+	e->quota = simple_strtoull(buf, NULL, 0);
+	spin_unlock_bh(&e->lock);
+	return size;
+}
+
+static const struct file_operations q2_counter_fops = {
+	.read		= quota_proc_read,
+	.write		= quota_proc_write,
+	.llseek		= default_llseek,
+};
+
+static struct xt_quota_counter *
+q2_new_counter(const struct xt_quota_mtinfo2 *q, bool anon)
+{
+	struct xt_quota_counter *e;
+	unsigned int size;
+
+	/* Do not need all the procfs things for anonymous counters. */
+	size = anon ? offsetof(typeof(*e), list) : sizeof(*e);
+	e = kmalloc(size, GFP_KERNEL);
+	if (e == NULL)
+		return NULL;
+
+	e->quota = q->quota;
+	spin_lock_init(&e->lock);
+	if (!anon) {
+		INIT_LIST_HEAD(&e->list);
+		atomic_set(&e->ref, 1);
+		strlcpy(e->name, q->name, sizeof(e->name));
+	}
+	return e;
+}
+
+/**
+ * q2_get_counter - get ref to counter or create new
+ * @name:	name of counter
+ */
+static struct xt_quota_counter *
+q2_get_counter(const struct xt_quota_mtinfo2 *q)
+{
+	struct proc_dir_entry *p;
+	struct xt_quota_counter *e = NULL;
+	struct xt_quota_counter *new_e;
+
+	if (*q->name == '\0')
+		return q2_new_counter(q, true);
+
+	/* No need to hold a lock while getting a new counter */
+	new_e = q2_new_counter(q, false);
+	if (new_e == NULL)
+		goto out;
+
+	spin_lock_bh(&counter_list_lock);
+	list_for_each_entry(e, &counter_list, list)
+		if (strcmp(e->name, q->name) == 0) {
+			atomic_inc(&e->ref);
+			spin_unlock_bh(&counter_list_lock);
+			kfree(new_e);
+			pr_debug("xt_quota2: old counter name=%s", e->name);
+			return e;
+		}
+	e = new_e;
+	pr_debug("xt_quota2: new_counter name=%s", e->name);
+	list_add_tail(&e->list, &counter_list);
+	/* The entry having a refcount of 1 is not directly destructible.
+	 * This func has not yet returned the new entry, thus iptables
+	 * has not references for destroying this entry.
+	 * For another rule to try to destroy it, it would 1st need for this
+	 * func* to be re-invoked, acquire a new ref for the same named quota.
+	 * Nobody will access the e->procfs_entry either.
+	 * So release the lock. */
+	spin_unlock_bh(&counter_list_lock);
+
+	/* create_proc_entry() is not spin_lock happy */
+	p = e->procfs_entry = proc_create_data(e->name, quota_list_perms,
+	                      proc_xt_quota, &q2_counter_fops, e);
+
+	if (IS_ERR_OR_NULL(p)) {
+		spin_lock_bh(&counter_list_lock);
+		list_del(&e->list);
+		spin_unlock_bh(&counter_list_lock);
+		goto out;
+	}
+	proc_set_user(p, quota_list_uid, quota_list_gid);
+	return e;
+
+ out:
+	kfree(e);
+	return NULL;
+}
+
+static int quota_mt2_check(const struct xt_mtchk_param *par)
+{
+	struct xt_quota_mtinfo2 *q = par->matchinfo;
+
+	pr_debug("xt_quota2: check() flags=0x%04x", q->flags);
+
+	if (q->flags & ~XT_QUOTA_MASK)
+		return -EINVAL;
+
+	q->name[sizeof(q->name)-1] = '\0';
+	if (*q->name == '.' || strchr(q->name, '/') != NULL) {
+		printk(KERN_ERR "xt_quota.3: illegal name\n");
+		return -EINVAL;
+	}
+
+	q->master = q2_get_counter(q);
+	if (q->master == NULL) {
+		printk(KERN_ERR "xt_quota.3: memory alloc failure\n");
+		return -ENOMEM;
+	}
+
+	return 0;
+}
+
+static void quota_mt2_destroy(const struct xt_mtdtor_param *par)
+{
+	struct xt_quota_mtinfo2 *q = par->matchinfo;
+	struct xt_quota_counter *e = q->master;
+
+	if (*q->name == '\0') {
+		kfree(e);
+		return;
+	}
+
+	spin_lock_bh(&counter_list_lock);
+	if (!atomic_dec_and_test(&e->ref)) {
+		spin_unlock_bh(&counter_list_lock);
+		return;
+	}
+
+	list_del(&e->list);
+	spin_unlock_bh(&counter_list_lock);
+	remove_proc_entry(e->name, proc_xt_quota);
+	kfree(e);
+}
+
+static bool
+quota_mt2(const struct sk_buff *skb, struct xt_action_param *par)
+{
+	struct xt_quota_mtinfo2 *q = (void *)par->matchinfo;
+	struct xt_quota_counter *e = q->master;
+	int charge = (q->flags & XT_QUOTA_PACKET) ? 1 : skb->len;
+	bool no_change = q->flags & XT_QUOTA_NO_CHANGE;
+	bool ret = q->flags & XT_QUOTA_INVERT;
+
+	spin_lock_bh(&e->lock);
+	if (q->flags & XT_QUOTA_GROW) {
+		/*
+		 * While no_change is pointless in "grow" mode, we will
+		 * implement it here simply to have a consistent behavior.
+		 */
+		if (!no_change)
+			e->quota += charge;
+		ret = true; /* note: does not respect inversion (bug??) */
+	} else {
+		if (e->quota > charge) {
+			if (!no_change)
+				e->quota -= charge;
+			ret = !ret;
+		} else if (e->quota) {
+			/* We are transitioning, log that fact. */
+			quota2_log(xt_hooknum(par),
+				   skb,
+				   xt_in(par),
+				   xt_out(par),
+				   q->name);
+			/* we do not allow even small packets from now on */
+			e->quota = 0;
+		}
+	}
+	spin_unlock_bh(&e->lock);
+	return ret;
+}
+
+static struct xt_match quota_mt2_reg[] __read_mostly = {
+	{
+		.name       = "quota2",
+		.revision   = 3,
+		.family     = NFPROTO_IPV4,
+		.checkentry = quota_mt2_check,
+		.match      = quota_mt2,
+		.destroy    = quota_mt2_destroy,
+		.matchsize  = sizeof(struct xt_quota_mtinfo2),
+		.usersize   = offsetof(struct xt_quota_mtinfo2, master),
+		.me         = THIS_MODULE,
+	},
+	{
+		.name       = "quota2",
+		.revision   = 3,
+		.family     = NFPROTO_IPV6,
+		.checkentry = quota_mt2_check,
+		.match      = quota_mt2,
+		.destroy    = quota_mt2_destroy,
+		.matchsize  = sizeof(struct xt_quota_mtinfo2),
+		.usersize   = offsetof(struct xt_quota_mtinfo2, master),
+		.me         = THIS_MODULE,
+	},
+};
+
+static int __init quota_mt2_init(void)
+{
+	int ret;
+	pr_debug("xt_quota2: init()");
+
+#ifdef CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG
+	nflognl = netlink_kernel_create(&init_net, NETLINK_NFLOG, NULL);
+	if (!nflognl)
+		return -ENOMEM;
+#endif
+
+	proc_xt_quota = proc_mkdir("xt_quota", init_net.proc_net);
+	if (proc_xt_quota == NULL)
+		return -EACCES;
+
+	ret = xt_register_matches(quota_mt2_reg, ARRAY_SIZE(quota_mt2_reg));
+	if (ret < 0)
+		remove_proc_entry("xt_quota", init_net.proc_net);
+	pr_debug("xt_quota2: init() %d", ret);
+	return ret;
+}
+
+static void __exit quota_mt2_exit(void)
+{
+	xt_unregister_matches(quota_mt2_reg, ARRAY_SIZE(quota_mt2_reg));
+	remove_proc_entry("xt_quota", init_net.proc_net);
+}
+
+module_init(quota_mt2_init);
+module_exit(quota_mt2_exit);
+MODULE_DESCRIPTION("Xtables: countdown quota match; up counter");
+MODULE_AUTHOR("Sam Johnston <samj@samj.net>");
+MODULE_AUTHOR("Jan Engelhardt <jengelh@medozas.de>");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("ipt_quota2");
+MODULE_ALIAS("ip6t_quota2");
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index d973f8a..9bc5cbe 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -1313,15 +1313,6 @@
 	return 0;
 }
 
-void dev_qdisc_change_real_num_tx(struct net_device *dev,
-				  unsigned int new_real_tx)
-{
-	struct Qdisc *qdisc = dev->qdisc;
-
-	if (qdisc->ops->change_real_num_tx)
-		qdisc->ops->change_real_num_tx(qdisc, new_real_tx);
-}
-
 int dev_qdisc_change_tx_queue_len(struct net_device *dev)
 {
 	bool up = dev->flags & IFF_UP;
diff --git a/net/sched/sch_mq.c b/net/sched/sch_mq.c
index db18d8a..e79f1af 100644
--- a/net/sched/sch_mq.c
+++ b/net/sched/sch_mq.c
@@ -125,29 +125,6 @@
 	priv->qdiscs = NULL;
 }
 
-static void mq_change_real_num_tx(struct Qdisc *sch, unsigned int new_real_tx)
-{
-#ifdef CONFIG_NET_SCHED
-	struct net_device *dev = qdisc_dev(sch);
-	struct Qdisc *qdisc;
-	unsigned int i;
-
-	for (i = new_real_tx; i < dev->real_num_tx_queues; i++) {
-		qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
-		/* Only update the default qdiscs we created,
-		 * qdiscs with handles are always hashed.
-		 */
-		if (qdisc != &noop_qdisc && !qdisc->handle)
-			qdisc_hash_del(qdisc);
-	}
-	for (i = dev->real_num_tx_queues; i < new_real_tx; i++) {
-		qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
-		if (qdisc != &noop_qdisc && !qdisc->handle)
-			qdisc_hash_add(qdisc, false);
-	}
-#endif
-}
-
 static int mq_dump(struct Qdisc *sch, struct sk_buff *skb)
 {
 	struct net_device *dev = qdisc_dev(sch);
@@ -311,7 +288,6 @@
 	.init		= mq_init,
 	.destroy	= mq_destroy,
 	.attach		= mq_attach,
-	.change_real_num_tx = mq_change_real_num_tx,
 	.dump		= mq_dump,
 	.owner		= THIS_MODULE,
 };
diff --git a/net/sched/sch_mqprio.c b/net/sched/sch_mqprio.c
index 50e15ad..5eb3b1b 100644
--- a/net/sched/sch_mqprio.c
+++ b/net/sched/sch_mqprio.c
@@ -306,28 +306,6 @@
 	priv->qdiscs = NULL;
 }
 
-static void mqprio_change_real_num_tx(struct Qdisc *sch,
-				      unsigned int new_real_tx)
-{
-	struct net_device *dev = qdisc_dev(sch);
-	struct Qdisc *qdisc;
-	unsigned int i;
-
-	for (i = new_real_tx; i < dev->real_num_tx_queues; i++) {
-		qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
-		/* Only update the default qdiscs we created,
-		 * qdiscs with handles are always hashed.
-		 */
-		if (qdisc != &noop_qdisc && !qdisc->handle)
-			qdisc_hash_del(qdisc);
-	}
-	for (i = dev->real_num_tx_queues; i < new_real_tx; i++) {
-		qdisc = netdev_get_tx_queue(dev, i)->qdisc_sleeping;
-		if (qdisc != &noop_qdisc && !qdisc->handle)
-			qdisc_hash_add(qdisc, false);
-	}
-}
-
 static struct netdev_queue *mqprio_queue_get(struct Qdisc *sch,
 					     unsigned long cl)
 {
@@ -651,7 +629,6 @@
 	.init		= mqprio_init,
 	.destroy	= mqprio_destroy,
 	.attach		= mqprio_attach,
-	.change_real_num_tx = mqprio_change_real_num_tx,
 	.dump		= mqprio_dump,
 	.owner		= THIS_MODULE,
 };
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 565aa77..ac72bf9 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -411,6 +411,9 @@
 		}
 	}
 
+	if (snum && inet_is_local_unbindable_port(net, snum))
+		return -EPERM;
+
 	if (snum && snum < inet_prot_sock(net) &&
 	    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 		return -EACCES;
@@ -1090,6 +1093,8 @@
 		if (sctp_autobind(sk))
 			return -EAGAIN;
 	} else {
+		if (inet_is_local_unbindable_port(net, ep->base.bind_addr.port))
+			return -EPERM;
 		if (ep->base.bind_addr.port < inet_prot_sock(net) &&
 		    !ns_capable(net->user_ns, CAP_NET_BIND_SERVICE))
 			return -EACCES;
diff --git a/net/socket.c b/net/socket.c
index 9435856..ca3d422 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -300,7 +300,8 @@
 
 static int sockfs_xattr_get(const struct xattr_handler *handler,
 			    struct dentry *dentry, struct inode *inode,
-			    const char *suffix, void *value, size_t size)
+			    const char *suffix, void *value, size_t size,
+			    int flags)
 {
 	if (value) {
 		if (dentry->d_name.len + 1 > size)
diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c
index bc8055f..11f1691 100644
--- a/net/vmw_vsock/af_vsock.c
+++ b/net/vmw_vsock/af_vsock.c
@@ -126,19 +126,18 @@
  */
 #define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
 
-static const struct vsock_transport *transport;
+#define VSOCK_DEFAULT_BUFFER_SIZE     (1024 * 256)
+#define VSOCK_DEFAULT_BUFFER_MAX_SIZE (1024 * 256)
+#define VSOCK_DEFAULT_BUFFER_MIN_SIZE 128
+
+/* Transport used for host->guest communication */
+static const struct vsock_transport *transport_h2g;
+/* Transport used for guest->host communication */
+static const struct vsock_transport *transport_g2h;
+/* Transport used for DGRAM communication */
+static const struct vsock_transport *transport_dgram;
 static DEFINE_MUTEX(vsock_register_mutex);
 
-/**** EXPORTS ****/
-
-/* Get the ID of the local context.  This is transport dependent. */
-
-int vm_sockets_get_local_cid(void)
-{
-	return transport->get_local_cid();
-}
-EXPORT_SYMBOL_GPL(vm_sockets_get_local_cid);
-
 /**** UTILS ****/
 
 /* Each bound VSocket is stored in the bind hash table and each connected
@@ -188,7 +187,7 @@
 	return __vsock_bind(sk, &local_addr);
 }
 
-static int __init vsock_init_tables(void)
+static void vsock_init_tables(void)
 {
 	int i;
 
@@ -197,7 +196,6 @@
 
 	for (i = 0; i < ARRAY_SIZE(vsock_connected_table); i++)
 		INIT_LIST_HEAD(&vsock_connected_table[i]);
-	return 0;
 }
 
 static void __vsock_insert_bound(struct list_head *list,
@@ -230,10 +228,16 @@
 {
 	struct vsock_sock *vsk;
 
-	list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table)
-		if (addr->svm_port == vsk->local_addr.svm_port)
+	list_for_each_entry(vsk, vsock_bound_sockets(addr), bound_table) {
+		if (vsock_addr_equals_addr(addr, &vsk->local_addr))
 			return sk_vsock(vsk);
 
+		if (addr->svm_port == vsk->local_addr.svm_port &&
+		    (vsk->local_addr.svm_cid == VMADDR_CID_ANY ||
+		     addr->svm_cid == VMADDR_CID_ANY))
+			return sk_vsock(vsk);
+	}
+
 	return NULL;
 }
 
@@ -382,6 +386,89 @@
 }
 EXPORT_SYMBOL_GPL(vsock_enqueue_accept);
 
+static void vsock_deassign_transport(struct vsock_sock *vsk)
+{
+	if (!vsk->transport)
+		return;
+
+	vsk->transport->destruct(vsk);
+	module_put(vsk->transport->module);
+	vsk->transport = NULL;
+}
+
+/* Assign a transport to a socket and call the .init transport callback.
+ *
+ * Note: for stream socket this must be called when vsk->remote_addr is set
+ * (e.g. during the connect() or when a connection request on a listener
+ * socket is received).
+ * The vsk->remote_addr is used to decide which transport to use:
+ *  - remote CID <= VMADDR_CID_HOST will use guest->host transport;
+ *  - remote CID == local_cid (guest->host transport) will use guest->host
+ *    transport for loopback (host->guest transports don't support loopback);
+ *  - remote CID > VMADDR_CID_HOST will use host->guest transport;
+ */
+int vsock_assign_transport(struct vsock_sock *vsk, struct vsock_sock *psk)
+{
+	const struct vsock_transport *new_transport;
+	struct sock *sk = sk_vsock(vsk);
+	unsigned int remote_cid = vsk->remote_addr.svm_cid;
+	int ret;
+
+	switch (sk->sk_type) {
+	case SOCK_DGRAM:
+		new_transport = transport_dgram;
+		break;
+	case SOCK_STREAM:
+		if (remote_cid <= VMADDR_CID_HOST ||
+		    (transport_g2h &&
+		     remote_cid == transport_g2h->get_local_cid()) ||
+		    !transport_h2g)
+			new_transport = transport_g2h;
+		else
+			new_transport = transport_h2g;
+		break;
+	default:
+		return -ESOCKTNOSUPPORT;
+	}
+
+	if (vsk->transport) {
+		if (vsk->transport == new_transport)
+			return 0;
+
+		vsk->transport->release(vsk);
+		vsock_deassign_transport(vsk);
+	}
+
+	/* We increase the module refcnt to prevent the transport unloading
+	 * while there are open sockets assigned to it.
+	 */
+	if (!new_transport || !try_module_get(new_transport->module))
+		return -ENODEV;
+
+	ret = new_transport->init(vsk, psk);
+	if (ret) {
+		module_put(new_transport->module);
+		return ret;
+	}
+
+	vsk->transport = new_transport;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(vsock_assign_transport);
+
+bool vsock_find_cid(unsigned int cid)
+{
+	if (transport_g2h && cid == transport_g2h->get_local_cid())
+		return true;
+
+	if (transport_h2g && cid == VMADDR_CID_HOST)
+		return true;
+
+	return false;
+}
+EXPORT_SYMBOL_GPL(vsock_find_cid);
+
 static struct sock *vsock_dequeue_accept(struct sock *listener)
 {
 	struct vsock_sock *vlistener;
@@ -418,7 +505,12 @@
 
 static int vsock_send_shutdown(struct sock *sk, int mode)
 {
-	return transport->shutdown(vsock_sk(sk), mode);
+	struct vsock_sock *vsk = vsock_sk(sk);
+
+	if (!vsk->transport)
+		return -ENODEV;
+
+	return vsk->transport->shutdown(vsk, mode);
 }
 
 static void vsock_pending_work(struct work_struct *work)
@@ -528,13 +620,12 @@
 static int __vsock_bind_dgram(struct vsock_sock *vsk,
 			      struct sockaddr_vm *addr)
 {
-	return transport->dgram_bind(vsk, addr);
+	return vsk->transport->dgram_bind(vsk, addr);
 }
 
 static int __vsock_bind(struct sock *sk, struct sockaddr_vm *addr)
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
-	u32 cid;
 	int retval;
 
 	/* First ensure this socket isn't already bound. */
@@ -544,10 +635,9 @@
 	/* Now bind to the provided address or select appropriate values if
 	 * none are provided (VMADDR_CID_ANY and VMADDR_PORT_ANY).  Note that
 	 * like AF_INET prevents binding to a non-local IP address (in most
-	 * cases), we only allow binding to the local CID.
+	 * cases), we only allow binding to a local CID.
 	 */
-	cid = transport->get_local_cid();
-	if (addr->svm_cid != cid && addr->svm_cid != VMADDR_CID_ANY)
+	if (addr->svm_cid != VMADDR_CID_ANY && !vsock_find_cid(addr->svm_cid))
 		return -EADDRNOTAVAIL;
 
 	switch (sk->sk_socket->type) {
@@ -571,12 +661,12 @@
 
 static void vsock_connect_timeout(struct work_struct *work);
 
-struct sock *__vsock_create(struct net *net,
-			    struct socket *sock,
-			    struct sock *parent,
-			    gfp_t priority,
-			    unsigned short type,
-			    int kern)
+static struct sock *__vsock_create(struct net *net,
+				   struct socket *sock,
+				   struct sock *parent,
+				   gfp_t priority,
+				   unsigned short type,
+				   int kern)
 {
 	struct sock *sk;
 	struct vsock_sock *psk;
@@ -620,24 +710,21 @@
 		vsk->trusted = psk->trusted;
 		vsk->owner = get_cred(psk->owner);
 		vsk->connect_timeout = psk->connect_timeout;
+		vsk->buffer_size = psk->buffer_size;
+		vsk->buffer_min_size = psk->buffer_min_size;
+		vsk->buffer_max_size = psk->buffer_max_size;
 		security_sk_clone(parent, sk);
 	} else {
 		vsk->trusted = ns_capable_noaudit(&init_user_ns, CAP_NET_ADMIN);
 		vsk->owner = get_current_cred();
 		vsk->connect_timeout = VSOCK_DEFAULT_CONNECT_TIMEOUT;
+		vsk->buffer_size = VSOCK_DEFAULT_BUFFER_SIZE;
+		vsk->buffer_min_size = VSOCK_DEFAULT_BUFFER_MIN_SIZE;
+		vsk->buffer_max_size = VSOCK_DEFAULT_BUFFER_MAX_SIZE;
 	}
 
-	if (transport->init(vsk, psk) < 0) {
-		sk_free(sk);
-		return NULL;
-	}
-
-	if (sock)
-		vsock_insert_unbound(vsk);
-
 	return sk;
 }
-EXPORT_SYMBOL_GPL(__vsock_create);
 
 static void __vsock_release(struct sock *sk, int level)
 {
@@ -652,7 +739,10 @@
 		/* The release call is supposed to use lock_sock_nested()
 		 * rather than lock_sock(), if a sock lock should be acquired.
 		 */
-		transport->release(vsk);
+		if (vsk->transport)
+			vsk->transport->release(vsk);
+		else if (sk->sk_type == SOCK_STREAM)
+			vsock_remove_sock(vsk);
 
 		/* When "level" is SINGLE_DEPTH_NESTING, use the nested
 		 * version to avoid the warning "possible recursive locking
@@ -681,7 +771,7 @@
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
 
-	transport->destruct(vsk);
+	vsock_deassign_transport(vsk);
 
 	/* When clearing these addresses, there's no need to set the family and
 	 * possibly register the address family with the kernel.
@@ -703,15 +793,22 @@
 	return err;
 }
 
+struct sock *vsock_create_connected(struct sock *parent)
+{
+	return __vsock_create(sock_net(parent), NULL, parent, GFP_KERNEL,
+			      parent->sk_type, 0);
+}
+EXPORT_SYMBOL_GPL(vsock_create_connected);
+
 s64 vsock_stream_has_data(struct vsock_sock *vsk)
 {
-	return transport->stream_has_data(vsk);
+	return vsk->transport->stream_has_data(vsk);
 }
 EXPORT_SYMBOL_GPL(vsock_stream_has_data);
 
 s64 vsock_stream_has_space(struct vsock_sock *vsk)
 {
-	return transport->stream_has_space(vsk);
+	return vsk->transport->stream_has_space(vsk);
 }
 EXPORT_SYMBOL_GPL(vsock_stream_has_space);
 
@@ -882,8 +979,12 @@
 			mask |= EPOLLOUT | EPOLLWRNORM | EPOLLWRBAND;
 
 	} else if (sock->type == SOCK_STREAM) {
+		const struct vsock_transport *transport;
+
 		lock_sock(sk);
 
+		transport = vsk->transport;
+
 		/* Listening sockets that have connections in their accept
 		 * queue can be read.
 		 */
@@ -892,7 +993,7 @@
 			mask |= EPOLLIN | EPOLLRDNORM;
 
 		/* If there is something in the queue then we can read. */
-		if (transport->stream_is_active(vsk) &&
+		if (transport && transport->stream_is_active(vsk) &&
 		    !(sk->sk_shutdown & RCV_SHUTDOWN)) {
 			bool data_ready_now = false;
 			int ret = transport->notify_poll_in(
@@ -916,7 +1017,7 @@
 		}
 
 		/* Connected sockets that can produce data can be written. */
-		if (sk->sk_state == TCP_ESTABLISHED) {
+		if (transport && sk->sk_state == TCP_ESTABLISHED) {
 			if (!(sk->sk_shutdown & SEND_SHUTDOWN)) {
 				bool space_avail_now = false;
 				int ret = transport->notify_poll_out(
@@ -957,6 +1058,7 @@
 	struct sock *sk;
 	struct vsock_sock *vsk;
 	struct sockaddr_vm *remote_addr;
+	const struct vsock_transport *transport;
 
 	if (msg->msg_flags & MSG_OOB)
 		return -EOPNOTSUPP;
@@ -968,6 +1070,8 @@
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	err = vsock_auto_bind(vsk);
 	if (err)
 		goto out;
@@ -1049,8 +1153,8 @@
 	if (err)
 		goto out;
 
-	if (!transport->dgram_allow(remote_addr->svm_cid,
-				    remote_addr->svm_port)) {
+	if (!vsk->transport->dgram_allow(remote_addr->svm_cid,
+					 remote_addr->svm_port)) {
 		err = -EINVAL;
 		goto out;
 	}
@@ -1066,7 +1170,9 @@
 static int vsock_dgram_recvmsg(struct socket *sock, struct msghdr *msg,
 			       size_t len, int flags)
 {
-	return transport->dgram_dequeue(vsock_sk(sock->sk), msg, len, flags);
+	struct vsock_sock *vsk = vsock_sk(sock->sk);
+
+	return vsk->transport->dgram_dequeue(vsk, msg, len, flags);
 }
 
 static const struct proto_ops vsock_dgram_ops = {
@@ -1092,7 +1198,9 @@
 
 static int vsock_transport_cancel_pkt(struct vsock_sock *vsk)
 {
-	if (!transport->cancel_pkt)
+	const struct vsock_transport *transport = vsk->transport;
+
+	if (!transport || !transport->cancel_pkt)
 		return -EOPNOTSUPP;
 
 	return transport->cancel_pkt(vsk);
@@ -1125,6 +1233,7 @@
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	struct sockaddr_vm *remote_addr;
 	long timeout;
 	DEFINE_WAIT(wait);
@@ -1161,19 +1270,26 @@
 			goto out;
 		}
 
+		/* Set the remote address that we are connecting to. */
+		memcpy(&vsk->remote_addr, remote_addr,
+		       sizeof(vsk->remote_addr));
+
+		err = vsock_assign_transport(vsk, NULL);
+		if (err)
+			goto out;
+
+		transport = vsk->transport;
+
 		/* The hypervisor and well-known contexts do not have socket
 		 * endpoints.
 		 */
-		if (!transport->stream_allow(remote_addr->svm_cid,
+		if (!transport ||
+		    !transport->stream_allow(remote_addr->svm_cid,
 					     remote_addr->svm_port)) {
 			err = -ENETUNREACH;
 			goto out;
 		}
 
-		/* Set the remote address that we are connecting to. */
-		memcpy(&vsk->remote_addr, remote_addr,
-		       sizeof(vsk->remote_addr));
-
 		err = vsock_auto_bind(vsk);
 		if (err)
 			goto out;
@@ -1368,6 +1484,23 @@
 	return err;
 }
 
+static void vsock_update_buffer_size(struct vsock_sock *vsk,
+				     const struct vsock_transport *transport,
+				     u64 val)
+{
+	if (val > vsk->buffer_max_size)
+		val = vsk->buffer_max_size;
+
+	if (val < vsk->buffer_min_size)
+		val = vsk->buffer_min_size;
+
+	if (val != vsk->buffer_size &&
+	    transport && transport->notify_buffer_size)
+		transport->notify_buffer_size(vsk, &val);
+
+	vsk->buffer_size = val;
+}
+
 static int vsock_stream_setsockopt(struct socket *sock,
 				   int level,
 				   int optname,
@@ -1377,6 +1510,7 @@
 	int err;
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	u64 val;
 
 	if (level != AF_VSOCK)
@@ -1400,20 +1534,24 @@
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	switch (optname) {
 	case SO_VM_SOCKETS_BUFFER_SIZE:
 		COPY_IN(val);
-		transport->set_buffer_size(vsk, val);
+		vsock_update_buffer_size(vsk, transport, val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
 		COPY_IN(val);
-		transport->set_max_buffer_size(vsk, val);
+		vsk->buffer_max_size = val;
+		vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
 		COPY_IN(val);
-		transport->set_min_buffer_size(vsk, val);
+		vsk->buffer_min_size = val;
+		vsock_update_buffer_size(vsk, transport, vsk->buffer_size);
 		break;
 
 	case SO_VM_SOCKETS_CONNECT_TIMEOUT: {
@@ -1480,17 +1618,17 @@
 
 	switch (optname) {
 	case SO_VM_SOCKETS_BUFFER_SIZE:
-		val = transport->get_buffer_size(vsk);
+		val = vsk->buffer_size;
 		COPY_OUT(val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MAX_SIZE:
-		val = transport->get_max_buffer_size(vsk);
+		val = vsk->buffer_max_size;
 		COPY_OUT(val);
 		break;
 
 	case SO_VM_SOCKETS_BUFFER_MIN_SIZE:
-		val = transport->get_min_buffer_size(vsk);
+		val = vsk->buffer_min_size;
 		COPY_OUT(val);
 		break;
 
@@ -1521,6 +1659,7 @@
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	ssize_t total_written;
 	long timeout;
 	int err;
@@ -1537,6 +1676,8 @@
 
 	lock_sock(sk);
 
+	transport = vsk->transport;
+
 	/* Callers should not provide a destination with stream sockets. */
 	if (msg->msg_namelen) {
 		err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP;
@@ -1550,7 +1691,7 @@
 		goto out;
 	}
 
-	if (sk->sk_state != TCP_ESTABLISHED ||
+	if (!transport || sk->sk_state != TCP_ESTABLISHED ||
 	    !vsock_addr_bound(&vsk->local_addr)) {
 		err = -ENOTCONN;
 		goto out;
@@ -1660,6 +1801,7 @@
 {
 	struct sock *sk;
 	struct vsock_sock *vsk;
+	const struct vsock_transport *transport;
 	int err;
 	size_t target;
 	ssize_t copied;
@@ -1674,7 +1816,9 @@
 
 	lock_sock(sk);
 
-	if (sk->sk_state != TCP_ESTABLISHED) {
+	transport = vsk->transport;
+
+	if (!transport || sk->sk_state != TCP_ESTABLISHED) {
 		/* Recvmsg is supposed to return 0 if a peer performs an
 		 * orderly shutdown. Differentiate between that case and when a
 		 * peer has not connected or a local shutdown occured with the
@@ -1848,6 +1992,10 @@
 static int vsock_create(struct net *net, struct socket *sock,
 			int protocol, int kern)
 {
+	struct vsock_sock *vsk;
+	struct sock *sk;
+	int ret;
+
 	if (!sock)
 		return -EINVAL;
 
@@ -1867,7 +2015,23 @@
 
 	sock->state = SS_UNCONNECTED;
 
-	return __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern) ? 0 : -ENOMEM;
+	sk = __vsock_create(net, sock, NULL, GFP_KERNEL, 0, kern);
+	if (!sk)
+		return -ENOMEM;
+
+	vsk = vsock_sk(sk);
+
+	if (sock->type == SOCK_DGRAM) {
+		ret = vsock_assign_transport(vsk, NULL);
+		if (ret < 0) {
+			sock_put(sk);
+			return ret;
+		}
+	}
+
+	vsock_insert_unbound(vsk);
+
+	return 0;
 }
 
 static const struct net_proto_family vsock_family_ops = {
@@ -1880,11 +2044,20 @@
 			       unsigned int cmd, void __user *ptr)
 {
 	u32 __user *p = ptr;
+	u32 cid = VMADDR_CID_ANY;
 	int retval = 0;
 
 	switch (cmd) {
 	case IOCTL_VM_SOCKETS_GET_LOCAL_CID:
-		if (put_user(transport->get_local_cid(), p) != 0)
+		/* To be compatible with the VMCI behavior, we prioritize the
+		 * guest CID instead of well-know host CID (VMADDR_CID_HOST).
+		 */
+		if (transport_g2h)
+			cid = transport_g2h->get_local_cid();
+		else if (transport_h2g)
+			cid = transport_h2g->get_local_cid();
+
+		if (put_user(cid, p) != 0)
 			retval = -EFAULT;
 		break;
 
@@ -1924,24 +2097,13 @@
 	.fops		= &vsock_device_ops,
 };
 
-int __vsock_core_init(const struct vsock_transport *t, struct module *owner)
+static int __init vsock_init(void)
 {
-	int err = mutex_lock_interruptible(&vsock_register_mutex);
+	int err = 0;
 
-	if (err)
-		return err;
+	vsock_init_tables();
 
-	if (transport) {
-		err = -EBUSY;
-		goto err_busy;
-	}
-
-	/* Transport must be the owner of the protocol so that it can't
-	 * unload while there are open sockets.
-	 */
-	vsock_proto.owner = owner;
-	transport = t;
-
+	vsock_proto.owner = THIS_MODULE;
 	vsock_device.minor = MISC_DYNAMIC_MINOR;
 	err = misc_register(&vsock_device);
 	if (err) {
@@ -1962,7 +2124,6 @@
 		goto err_unregister_proto;
 	}
 
-	mutex_unlock(&vsock_register_mutex);
 	return 0;
 
 err_unregister_proto:
@@ -1970,44 +2131,86 @@
 err_deregister_misc:
 	misc_deregister(&vsock_device);
 err_reset_transport:
-	transport = NULL;
+	return err;
+}
+
+static void __exit vsock_exit(void)
+{
+	misc_deregister(&vsock_device);
+	sock_unregister(AF_VSOCK);
+	proto_unregister(&vsock_proto);
+}
+
+const struct vsock_transport *vsock_core_get_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport;
+}
+EXPORT_SYMBOL_GPL(vsock_core_get_transport);
+
+int vsock_core_register(const struct vsock_transport *t, int features)
+{
+	const struct vsock_transport *t_h2g, *t_g2h, *t_dgram;
+	int err = mutex_lock_interruptible(&vsock_register_mutex);
+
+	if (err)
+		return err;
+
+	t_h2g = transport_h2g;
+	t_g2h = transport_g2h;
+	t_dgram = transport_dgram;
+
+	if (features & VSOCK_TRANSPORT_F_H2G) {
+		if (t_h2g) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_h2g = t;
+	}
+
+	if (features & VSOCK_TRANSPORT_F_G2H) {
+		if (t_g2h) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_g2h = t;
+	}
+
+	if (features & VSOCK_TRANSPORT_F_DGRAM) {
+		if (t_dgram) {
+			err = -EBUSY;
+			goto err_busy;
+		}
+		t_dgram = t;
+	}
+
+	transport_h2g = t_h2g;
+	transport_g2h = t_g2h;
+	transport_dgram = t_dgram;
+
 err_busy:
 	mutex_unlock(&vsock_register_mutex);
 	return err;
 }
-EXPORT_SYMBOL_GPL(__vsock_core_init);
+EXPORT_SYMBOL_GPL(vsock_core_register);
 
-void vsock_core_exit(void)
+void vsock_core_unregister(const struct vsock_transport *t)
 {
 	mutex_lock(&vsock_register_mutex);
 
-	misc_deregister(&vsock_device);
-	sock_unregister(AF_VSOCK);
-	proto_unregister(&vsock_proto);
+	if (transport_h2g == t)
+		transport_h2g = NULL;
 
-	/* We do not want the assignment below re-ordered. */
-	mb();
-	transport = NULL;
+	if (transport_g2h == t)
+		transport_g2h = NULL;
+
+	if (transport_dgram == t)
+		transport_dgram = NULL;
 
 	mutex_unlock(&vsock_register_mutex);
 }
-EXPORT_SYMBOL_GPL(vsock_core_exit);
+EXPORT_SYMBOL_GPL(vsock_core_unregister);
 
-const struct vsock_transport *vsock_core_get_transport(void)
-{
-	/* vsock_register_mutex not taken since only the transport uses this
-	 * function and only while registered.
-	 */
-	return transport;
-}
-EXPORT_SYMBOL_GPL(vsock_core_get_transport);
-
-static void __exit vsock_exit(void)
-{
-	/* Do nothing.  This function makes this module removable. */
-}
-
-module_init(vsock_init_tables);
+module_init(vsock_init);
 module_exit(vsock_exit);
 
 MODULE_AUTHOR("VMware, Inc.");
diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
index a3c57c0..e52100c 100644
--- a/net/vmw_vsock/hyperv_transport.c
+++ b/net/vmw_vsock/hyperv_transport.c
@@ -150,6 +150,8 @@
 	GUID_INIT(0x00000000, 0xfacb, 0x11e6, 0xbd, 0x58,
 		  0x64, 0x00, 0x6a, 0x79, 0x86, 0xd3);
 
+static bool hvs_check_transport(struct vsock_sock *vsk);
+
 static bool is_valid_srv_id(const guid_t *id)
 {
 	return !memcmp(&id->b[4], &srv_id_template.b[4], sizeof(guid_t) - 4);
@@ -313,8 +315,7 @@
 		if (sk->sk_ack_backlog >= sk->sk_max_ack_backlog)
 			goto out;
 
-		new = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-				     sk->sk_type, 0);
+		new = vsock_create_connected(sk);
 		if (!new)
 			goto out;
 
@@ -327,6 +328,14 @@
 		vsock_addr_init(&vnew->remote_addr,
 				VMADDR_CID_HOST, VMADDR_PORT_ANY);
 		vnew->remote_addr.svm_port = get_port_by_srv_id(if_instance);
+		ret = vsock_assign_transport(vnew, vsock_sk(sk));
+		/* Transport assigned (looking at remote_addr) must be the
+		 * same where we received the request.
+		 */
+		if (ret || !hvs_check_transport(vnew)) {
+			sock_put(new);
+			goto out;
+		}
 		hvs_new = vnew->trans;
 		hvs_new->chan = chan;
 	} else {
@@ -390,7 +399,6 @@
 		new->sk_state = TCP_ESTABLISHED;
 		sk->sk_ack_backlog++;
 
-		hvs_addr_init(&vnew->local_addr, if_type);
 		hvs_new->vm_srv_id = *if_type;
 		hvs_new->host_srv_id = *if_instance;
 
@@ -789,37 +797,9 @@
 	return 0;
 }
 
-static void hvs_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static void hvs_set_min_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static void hvs_set_max_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	/* Ignored. */
-}
-
-static u64 hvs_get_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
-static u64 hvs_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
-static u64 hvs_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	return -ENOPROTOOPT;
-}
-
 static struct vsock_transport hvs_transport = {
+	.module                   = THIS_MODULE,
+
 	.get_local_cid            = hvs_get_local_cid,
 
 	.init                     = hvs_sock_init,
@@ -852,14 +832,13 @@
 	.notify_send_pre_enqueue  = hvs_notify_send_pre_enqueue,
 	.notify_send_post_enqueue = hvs_notify_send_post_enqueue,
 
-	.set_buffer_size          = hvs_set_buffer_size,
-	.set_min_buffer_size      = hvs_set_min_buffer_size,
-	.set_max_buffer_size      = hvs_set_max_buffer_size,
-	.get_buffer_size          = hvs_get_buffer_size,
-	.get_min_buffer_size      = hvs_get_min_buffer_size,
-	.get_max_buffer_size      = hvs_get_max_buffer_size,
 };
 
+static bool hvs_check_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport == &hvs_transport;
+}
+
 static int hvs_probe(struct hv_device *hdev,
 		     const struct hv_vmbus_device_id *dev_id)
 {
@@ -908,7 +887,7 @@
 	if (ret != 0)
 		return ret;
 
-	ret = vsock_core_init(&hvs_transport);
+	ret = vsock_core_register(&hvs_transport, VSOCK_TRANSPORT_F_G2H);
 	if (ret) {
 		vmbus_driver_unregister(&hvs_drv);
 		return ret;
@@ -919,7 +898,7 @@
 
 static void __exit hvs_exit(void)
 {
-	vsock_core_exit();
+	vsock_core_unregister(&hvs_transport);
 	vmbus_driver_unregister(&hvs_drv);
 }
 
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c
index 7973f98..26489a5 100644
--- a/net/vmw_vsock/virtio_transport.c
+++ b/net/vmw_vsock/virtio_transport.c
@@ -465,6 +465,8 @@
 
 static struct virtio_transport virtio_transport = {
 	.transport = {
+		.module                   = THIS_MODULE,
+
 		.get_local_cid            = virtio_transport_get_local_cid,
 
 		.init                     = virtio_transport_do_socket_init,
@@ -497,13 +499,7 @@
 		.notify_send_pre_block    = virtio_transport_notify_send_pre_block,
 		.notify_send_pre_enqueue  = virtio_transport_notify_send_pre_enqueue,
 		.notify_send_post_enqueue = virtio_transport_notify_send_post_enqueue,
-
-		.set_buffer_size          = virtio_transport_set_buffer_size,
-		.set_min_buffer_size      = virtio_transport_set_min_buffer_size,
-		.set_max_buffer_size      = virtio_transport_set_max_buffer_size,
-		.get_buffer_size          = virtio_transport_get_buffer_size,
-		.get_min_buffer_size      = virtio_transport_get_min_buffer_size,
-		.get_max_buffer_size      = virtio_transport_get_max_buffer_size,
+		.notify_buffer_size       = virtio_transport_notify_buffer_size,
 	},
 
 	.send_pkt = virtio_transport_send_pkt,
@@ -779,7 +775,8 @@
 	if (!virtio_vsock_workqueue)
 		return -ENOMEM;
 
-	ret = vsock_core_init(&virtio_transport.transport);
+	ret = vsock_core_register(&virtio_transport.transport,
+				  VSOCK_TRANSPORT_F_G2H);
 	if (ret)
 		goto out_wq;
 
@@ -790,7 +787,7 @@
 	return 0;
 
 out_vci:
-	vsock_core_exit();
+	vsock_core_unregister(&virtio_transport.transport);
 out_wq:
 	destroy_workqueue(virtio_vsock_workqueue);
 	return ret;
@@ -799,7 +796,7 @@
 static void __exit virtio_vsock_exit(void)
 {
 	unregister_virtio_driver(&virtio_vsock_driver);
-	vsock_core_exit();
+	vsock_core_unregister(&virtio_transport.transport);
 	destroy_workqueue(virtio_vsock_workqueue);
 }
 
diff --git a/net/vmw_vsock/virtio_transport_common.c b/net/vmw_vsock/virtio_transport_common.c
index dde16a0..2aac203 100644
--- a/net/vmw_vsock/virtio_transport_common.c
+++ b/net/vmw_vsock/virtio_transport_common.c
@@ -29,9 +29,17 @@
 /* Threshold for detecting small packets to copy */
 #define GOOD_COPY_LEN  128
 
-static const struct virtio_transport *virtio_transport_get_ops(void)
+uint virtio_transport_max_vsock_pkt_buf_size = 64 * 1024;
+module_param(virtio_transport_max_vsock_pkt_buf_size, uint, 0444);
+EXPORT_SYMBOL_GPL(virtio_transport_max_vsock_pkt_buf_size);
+
+static const struct virtio_transport *
+virtio_transport_get_ops(struct vsock_sock *vsk)
 {
-	const struct vsock_transport *t = vsock_core_get_transport();
+	const struct vsock_transport *t = vsock_core_get_transport(vsk);
+
+	if (WARN_ON(!t))
+		return NULL;
 
 	return container_of(t, struct virtio_transport, transport);
 }
@@ -160,15 +168,25 @@
 }
 EXPORT_SYMBOL_GPL(virtio_transport_deliver_tap_pkt);
 
+/* This function can only be used on connecting/connected sockets,
+ * since a socket assigned to a transport is required.
+ *
+ * Do not use on listener sockets!
+ */
 static int virtio_transport_send_pkt_info(struct vsock_sock *vsk,
 					  struct virtio_vsock_pkt_info *info)
 {
 	u32 src_cid, src_port, dst_cid, dst_port;
+	const struct virtio_transport *t_ops;
 	struct virtio_vsock_sock *vvs;
 	struct virtio_vsock_pkt *pkt;
 	u32 pkt_len = info->pkt_len;
 
-	src_cid = vm_sockets_get_local_cid();
+	t_ops = virtio_transport_get_ops(vsk);
+	if (unlikely(!t_ops))
+		return -EFAULT;
+
+	src_cid = t_ops->transport.get_local_cid();
 	src_port = vsk->local_addr.svm_port;
 	if (!info->remote_cid) {
 		dst_cid	= vsk->remote_addr.svm_cid;
@@ -201,7 +219,7 @@
 
 	virtio_transport_inc_tx_pkt(vvs, pkt);
 
-	return virtio_transport_get_ops()->send_pkt(pkt);
+	return t_ops->send_pkt(pkt);
 }
 
 static bool virtio_transport_inc_rx_pkt(struct virtio_vsock_sock *vvs,
@@ -403,20 +421,16 @@
 
 	vsk->trans = vvs;
 	vvs->vsk = vsk;
-	if (psk) {
+	if (psk && psk->trans) {
 		struct virtio_vsock_sock *ptrans = psk->trans;
 
-		vvs->buf_size	= ptrans->buf_size;
-		vvs->buf_size_min = ptrans->buf_size_min;
-		vvs->buf_size_max = ptrans->buf_size_max;
 		vvs->peer_buf_alloc = ptrans->peer_buf_alloc;
-	} else {
-		vvs->buf_size = VIRTIO_VSOCK_DEFAULT_BUF_SIZE;
-		vvs->buf_size_min = VIRTIO_VSOCK_DEFAULT_MIN_BUF_SIZE;
-		vvs->buf_size_max = VIRTIO_VSOCK_DEFAULT_MAX_BUF_SIZE;
 	}
 
-	vvs->buf_alloc = vvs->buf_size;
+	if (vsk->buffer_size > VIRTIO_VSOCK_MAX_BUF_SIZE)
+		vsk->buffer_size = VIRTIO_VSOCK_MAX_BUF_SIZE;
+
+	vvs->buf_alloc = vsk->buffer_size;
 
 	spin_lock_init(&vvs->rx_lock);
 	spin_lock_init(&vvs->tx_lock);
@@ -426,71 +440,20 @@
 }
 EXPORT_SYMBOL_GPL(virtio_transport_do_socket_init);
 
-u64 virtio_transport_get_buffer_size(struct vsock_sock *vsk)
+/* sk_lock held by the caller */
+void virtio_transport_notify_buffer_size(struct vsock_sock *vsk, u64 *val)
 {
 	struct virtio_vsock_sock *vvs = vsk->trans;
 
-	return vvs->buf_size;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_buffer_size);
+	if (*val > VIRTIO_VSOCK_MAX_BUF_SIZE)
+		*val = VIRTIO_VSOCK_MAX_BUF_SIZE;
 
-u64 virtio_transport_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size_min;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_min_buffer_size);
-
-u64 virtio_transport_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size_max;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_get_max_buffer_size);
-
-void virtio_transport_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val < vvs->buf_size_min)
-		vvs->buf_size_min = val;
-	if (val > vvs->buf_size_max)
-		vvs->buf_size_max = val;
-	vvs->buf_size = val;
-	vvs->buf_alloc = val;
+	vvs->buf_alloc = *val;
 
 	virtio_transport_send_credit_update(vsk, VIRTIO_VSOCK_TYPE_STREAM,
 					    NULL);
 }
-EXPORT_SYMBOL_GPL(virtio_transport_set_buffer_size);
-
-void virtio_transport_set_min_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val > vvs->buf_size)
-		vvs->buf_size = val;
-	vvs->buf_size_min = val;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_set_min_buffer_size);
-
-void virtio_transport_set_max_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	if (val > VIRTIO_VSOCK_MAX_BUF_SIZE)
-		val = VIRTIO_VSOCK_MAX_BUF_SIZE;
-	if (val < vvs->buf_size)
-		vvs->buf_size = val;
-	vvs->buf_size_max = val;
-}
-EXPORT_SYMBOL_GPL(virtio_transport_set_max_buffer_size);
+EXPORT_SYMBOL_GPL(virtio_transport_notify_buffer_size);
 
 int
 virtio_transport_notify_poll_in(struct vsock_sock *vsk,
@@ -582,9 +545,7 @@
 
 u64 virtio_transport_stream_rcvhiwat(struct vsock_sock *vsk)
 {
-	struct virtio_vsock_sock *vvs = vsk->trans;
-
-	return vvs->buf_size;
+	return vsk->buffer_size;
 }
 EXPORT_SYMBOL_GPL(virtio_transport_stream_rcvhiwat);
 
@@ -993,28 +954,53 @@
 	return virtio_transport_send_pkt_info(vsk, &info);
 }
 
+static bool virtio_transport_space_update(struct sock *sk,
+					  struct virtio_vsock_pkt *pkt)
+{
+	struct vsock_sock *vsk = vsock_sk(sk);
+	struct virtio_vsock_sock *vvs = vsk->trans;
+	bool space_available;
+
+	/* Listener sockets are not associated with any transport, so we are
+	 * not able to take the state to see if there is space available in the
+	 * remote peer, but since they are only used to receive requests, we
+	 * can assume that there is always space available in the other peer.
+	 */
+	if (!vvs)
+		return true;
+
+	/* buf_alloc and fwd_cnt is always included in the hdr */
+	spin_lock_bh(&vvs->tx_lock);
+	vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc);
+	vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt);
+	space_available = virtio_transport_has_space(vsk);
+	spin_unlock_bh(&vvs->tx_lock);
+	return space_available;
+}
+
 /* Handle server socket */
 static int
-virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt)
+virtio_transport_recv_listen(struct sock *sk, struct virtio_vsock_pkt *pkt,
+			     struct virtio_transport *t)
 {
 	struct vsock_sock *vsk = vsock_sk(sk);
 	struct vsock_sock *vchild;
 	struct sock *child;
+	int ret;
 
 	if (le16_to_cpu(pkt->hdr.op) != VIRTIO_VSOCK_OP_REQUEST) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -EINVAL;
 	}
 
 	if (sk_acceptq_is_full(sk)) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -ENOMEM;
 	}
 
-	child = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-			       sk->sk_type, 0);
+	child = vsock_create_connected(sk);
 	if (!child) {
-		virtio_transport_reset(vsk, pkt);
+		virtio_transport_reset_no_sock(t, pkt);
 		return -ENOMEM;
 	}
 
@@ -1030,6 +1016,20 @@
 	vsock_addr_init(&vchild->remote_addr, le64_to_cpu(pkt->hdr.src_cid),
 			le32_to_cpu(pkt->hdr.src_port));
 
+	ret = vsock_assign_transport(vchild, vsk);
+	/* Transport assigned (looking at remote_addr) must be the same
+	 * where we received the request.
+	 */
+	if (ret || vchild->transport != &t->transport) {
+		release_sock(child);
+		virtio_transport_reset_no_sock(t, pkt);
+		sock_put(child);
+		return ret;
+	}
+
+	if (virtio_transport_space_update(child, pkt))
+		child->sk_write_space(child);
+
 	vsock_insert_connected(vchild);
 	vsock_enqueue_accept(sk, child);
 	virtio_transport_send_response(vchild, pkt);
@@ -1040,22 +1040,6 @@
 	return 0;
 }
 
-static bool virtio_transport_space_update(struct sock *sk,
-					  struct virtio_vsock_pkt *pkt)
-{
-	struct vsock_sock *vsk = vsock_sk(sk);
-	struct virtio_vsock_sock *vvs = vsk->trans;
-	bool space_available;
-
-	/* buf_alloc and fwd_cnt is always included in the hdr */
-	spin_lock_bh(&vvs->tx_lock);
-	vvs->peer_buf_alloc = le32_to_cpu(pkt->hdr.buf_alloc);
-	vvs->peer_fwd_cnt = le32_to_cpu(pkt->hdr.fwd_cnt);
-	space_available = virtio_transport_has_space(vsk);
-	spin_unlock_bh(&vvs->tx_lock);
-	return space_available;
-}
-
 /* We are under the virtio-vsock's vsock->rx_lock or vhost-vsock's vq->mutex
  * lock.
  */
@@ -1112,7 +1096,7 @@
 
 	switch (sk->sk_state) {
 	case TCP_LISTEN:
-		virtio_transport_recv_listen(sk, pkt);
+		virtio_transport_recv_listen(sk, pkt, t);
 		virtio_transport_free_pkt(pkt);
 		break;
 	case TCP_SYN_SENT:
@@ -1131,6 +1115,7 @@
 		virtio_transport_free_pkt(pkt);
 		break;
 	}
+
 	release_sock(sk);
 
 	/* Release refcnt obtained when we fetched this socket out of the
diff --git a/net/vmw_vsock/vmci_transport.c b/net/vmw_vsock/vmci_transport.c
index aaabcd8..92de99b 100644
--- a/net/vmw_vsock/vmci_transport.c
+++ b/net/vmw_vsock/vmci_transport.c
@@ -57,6 +57,7 @@
 static u16 vmci_transport_new_proto_supported_versions(void);
 static bool vmci_transport_proto_to_notify_struct(struct sock *sk, u16 *proto,
 						  bool old_pkt_proto);
+static bool vmci_check_transport(struct vsock_sock *vsk);
 
 struct vmci_transport_recv_pkt_info {
 	struct work_struct work;
@@ -74,15 +75,6 @@
 
 static int PROTOCOL_OVERRIDE = -1;
 
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE_MIN   128
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE       262144
-#define VMCI_TRANSPORT_DEFAULT_QP_SIZE_MAX   262144
-
-/* The default peer timeout indicates how long we will wait for a peer response
- * to a control message.
- */
-#define VSOCK_DEFAULT_CONNECT_TIMEOUT (2 * HZ)
-
 /* Helper function to convert from a VMCI error code to a VSock error code. */
 
 static s32 vmci_transport_error_to_vsock_error(s32 vmci_error)
@@ -1012,8 +1004,7 @@
 		return -ECONNREFUSED;
 	}
 
-	pending = __vsock_create(sock_net(sk), NULL, sk, GFP_KERNEL,
-				 sk->sk_type, 0);
+	pending = vsock_create_connected(sk);
 	if (!pending) {
 		vmci_transport_send_reset(sk, pkt);
 		return -ENOMEM;
@@ -1026,14 +1017,24 @@
 	vsock_addr_init(&vpending->remote_addr, pkt->dg.src.context,
 			pkt->src_port);
 
+	err = vsock_assign_transport(vpending, vsock_sk(sk));
+	/* Transport assigned (looking at remote_addr) must be the same
+	 * where we received the request.
+	 */
+	if (err || !vmci_check_transport(vpending)) {
+		vmci_transport_send_reset(sk, pkt);
+		sock_put(pending);
+		return err;
+	}
+
 	/* If the proposed size fits within our min/max, accept it. Otherwise
 	 * propose our own size.
 	 */
-	if (pkt->u.size >= vmci_trans(vpending)->queue_pair_min_size &&
-	    pkt->u.size <= vmci_trans(vpending)->queue_pair_max_size) {
+	if (pkt->u.size >= vpending->buffer_min_size &&
+	    pkt->u.size <= vpending->buffer_max_size) {
 		qp_size = pkt->u.size;
 	} else {
-		qp_size = vmci_trans(vpending)->queue_pair_size;
+		qp_size = vpending->buffer_size;
 	}
 
 	/* Figure out if we are using old or new requests based on the
@@ -1102,7 +1103,7 @@
 	pending->sk_state = TCP_SYN_SENT;
 	vmci_trans(vpending)->produce_size =
 		vmci_trans(vpending)->consume_size = qp_size;
-	vmci_trans(vpending)->queue_pair_size = qp_size;
+	vpending->buffer_size = qp_size;
 
 	vmci_trans(vpending)->notify_ops->process_request(pending);
 
@@ -1396,8 +1397,8 @@
 	vsk->ignore_connecting_rst = false;
 
 	/* Verify that we're OK with the proposed queue pair size */
-	if (pkt->u.size < vmci_trans(vsk)->queue_pair_min_size ||
-	    pkt->u.size > vmci_trans(vsk)->queue_pair_max_size) {
+	if (pkt->u.size < vsk->buffer_min_size ||
+	    pkt->u.size > vsk->buffer_max_size) {
 		err = -EINVAL;
 		goto destroy;
 	}
@@ -1502,8 +1503,7 @@
 		vsk->sent_request = false;
 		vsk->ignore_connecting_rst = true;
 
-		err = vmci_transport_send_conn_request(
-			sk, vmci_trans(vsk)->queue_pair_size);
+		err = vmci_transport_send_conn_request(sk, vsk->buffer_size);
 		if (err < 0)
 			err = vmci_transport_error_to_vsock_error(err);
 		else
@@ -1587,21 +1587,6 @@
 	INIT_LIST_HEAD(&vmci_trans(vsk)->elem);
 	vmci_trans(vsk)->sk = &vsk->sk;
 	spin_lock_init(&vmci_trans(vsk)->lock);
-	if (psk) {
-		vmci_trans(vsk)->queue_pair_size =
-			vmci_trans(psk)->queue_pair_size;
-		vmci_trans(vsk)->queue_pair_min_size =
-			vmci_trans(psk)->queue_pair_min_size;
-		vmci_trans(vsk)->queue_pair_max_size =
-			vmci_trans(psk)->queue_pair_max_size;
-	} else {
-		vmci_trans(vsk)->queue_pair_size =
-			VMCI_TRANSPORT_DEFAULT_QP_SIZE;
-		vmci_trans(vsk)->queue_pair_min_size =
-			 VMCI_TRANSPORT_DEFAULT_QP_SIZE_MIN;
-		vmci_trans(vsk)->queue_pair_max_size =
-			VMCI_TRANSPORT_DEFAULT_QP_SIZE_MAX;
-	}
 
 	return 0;
 }
@@ -1817,8 +1802,7 @@
 
 	if (vmci_transport_old_proto_override(&old_pkt_proto) &&
 		old_pkt_proto) {
-		err = vmci_transport_send_conn_request(
-			sk, vmci_trans(vsk)->queue_pair_size);
+		err = vmci_transport_send_conn_request(sk, vsk->buffer_size);
 		if (err < 0) {
 			sk->sk_state = TCP_CLOSE;
 			return err;
@@ -1826,8 +1810,7 @@
 	} else {
 		int supported_proto_versions =
 			vmci_transport_new_proto_supported_versions();
-		err = vmci_transport_send_conn_request2(
-				sk, vmci_trans(vsk)->queue_pair_size,
+		err = vmci_transport_send_conn_request2(sk, vsk->buffer_size,
 				supported_proto_versions);
 		if (err < 0) {
 			sk->sk_state = TCP_CLOSE;
@@ -1880,46 +1863,6 @@
 	return !vmci_handle_is_invalid(vmci_trans(vsk)->qp_handle);
 }
 
-static u64 vmci_transport_get_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_size;
-}
-
-static u64 vmci_transport_get_min_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_min_size;
-}
-
-static u64 vmci_transport_get_max_buffer_size(struct vsock_sock *vsk)
-{
-	return vmci_trans(vsk)->queue_pair_max_size;
-}
-
-static void vmci_transport_set_buffer_size(struct vsock_sock *vsk, u64 val)
-{
-	if (val < vmci_trans(vsk)->queue_pair_min_size)
-		vmci_trans(vsk)->queue_pair_min_size = val;
-	if (val > vmci_trans(vsk)->queue_pair_max_size)
-		vmci_trans(vsk)->queue_pair_max_size = val;
-	vmci_trans(vsk)->queue_pair_size = val;
-}
-
-static void vmci_transport_set_min_buffer_size(struct vsock_sock *vsk,
-					       u64 val)
-{
-	if (val > vmci_trans(vsk)->queue_pair_size)
-		vmci_trans(vsk)->queue_pair_size = val;
-	vmci_trans(vsk)->queue_pair_min_size = val;
-}
-
-static void vmci_transport_set_max_buffer_size(struct vsock_sock *vsk,
-					       u64 val)
-{
-	if (val < vmci_trans(vsk)->queue_pair_size)
-		vmci_trans(vsk)->queue_pair_size = val;
-	vmci_trans(vsk)->queue_pair_max_size = val;
-}
-
 static int vmci_transport_notify_poll_in(
 	struct vsock_sock *vsk,
 	size_t target,
@@ -2075,7 +2018,8 @@
 	return vmci_get_context_id();
 }
 
-static const struct vsock_transport vmci_transport = {
+static struct vsock_transport vmci_transport = {
+	.module = THIS_MODULE,
 	.init = vmci_transport_socket_init,
 	.destruct = vmci_transport_destruct,
 	.release = vmci_transport_release,
@@ -2102,15 +2046,26 @@
 	.notify_send_pre_enqueue = vmci_transport_notify_send_pre_enqueue,
 	.notify_send_post_enqueue = vmci_transport_notify_send_post_enqueue,
 	.shutdown = vmci_transport_shutdown,
-	.set_buffer_size = vmci_transport_set_buffer_size,
-	.set_min_buffer_size = vmci_transport_set_min_buffer_size,
-	.set_max_buffer_size = vmci_transport_set_max_buffer_size,
-	.get_buffer_size = vmci_transport_get_buffer_size,
-	.get_min_buffer_size = vmci_transport_get_min_buffer_size,
-	.get_max_buffer_size = vmci_transport_get_max_buffer_size,
 	.get_local_cid = vmci_transport_get_local_cid,
 };
 
+static bool vmci_check_transport(struct vsock_sock *vsk)
+{
+	return vsk->transport == &vmci_transport;
+}
+
+static void vmci_vsock_transport_cb(bool is_host)
+{
+	int features;
+
+	if (is_host)
+		features = VSOCK_TRANSPORT_F_H2G;
+	else
+		features = VSOCK_TRANSPORT_F_G2H;
+
+	vsock_core_register(&vmci_transport, features);
+}
+
 static int __init vmci_transport_init(void)
 {
 	int err;
@@ -2127,7 +2082,6 @@
 		pr_err("Unable to create datagram handle. (%d)\n", err);
 		return vmci_transport_error_to_vsock_error(err);
 	}
-
 	err = vmci_event_subscribe(VMCI_EVENT_QP_RESUMED,
 				   vmci_transport_qp_resumed_cb,
 				   NULL, &vmci_transport_qp_resumed_sub_id);
@@ -2138,12 +2092,21 @@
 		goto err_destroy_stream_handle;
 	}
 
-	err = vsock_core_init(&vmci_transport);
+	/* Register only with dgram feature, other features (H2G, G2H) will be
+	 * registered when the first host or guest becomes active.
+	 */
+	err = vsock_core_register(&vmci_transport, VSOCK_TRANSPORT_F_DGRAM);
 	if (err < 0)
 		goto err_unsubscribe;
 
+	err = vmci_register_vsock_callback(vmci_vsock_transport_cb);
+	if (err < 0)
+		goto err_unregister;
+
 	return 0;
 
+err_unregister:
+	vsock_core_unregister(&vmci_transport);
 err_unsubscribe:
 	vmci_event_unsubscribe(vmci_transport_qp_resumed_sub_id);
 err_destroy_stream_handle:
@@ -2169,7 +2132,8 @@
 		vmci_transport_qp_resumed_sub_id = VMCI_INVALID_ID;
 	}
 
-	vsock_core_exit();
+	vmci_register_vsock_callback(NULL);
+	vsock_core_unregister(&vmci_transport);
 }
 module_exit(vmci_transport_exit);
 
diff --git a/net/vmw_vsock/vmci_transport.h b/net/vmw_vsock/vmci_transport.h
index 1ca1e86..b7b0721 100644
--- a/net/vmw_vsock/vmci_transport.h
+++ b/net/vmw_vsock/vmci_transport.h
@@ -108,9 +108,6 @@
 	struct vmci_qp *qpair;
 	u64 produce_size;
 	u64 consume_size;
-	u64 queue_pair_size;
-	u64 queue_pair_min_size;
-	u64 queue_pair_max_size;
 	u32 detach_sub_id;
 	union vmci_transport_notify notify;
 	const struct vmci_transport_notify_ops *notify_ops;
diff --git a/net/vmw_vsock/vmci_transport_notify.h b/net/vmw_vsock/vmci_transport_notify.h
index 7843f08..a1aa5a9 100644
--- a/net/vmw_vsock/vmci_transport_notify.h
+++ b/net/vmw_vsock/vmci_transport_notify.h
@@ -11,7 +11,6 @@
 #include <linux/types.h>
 #include <linux/vmw_vmci_defs.h>
 #include <linux/vmw_vmci_api.h>
-#include <linux/vm_sockets.h>
 
 #include "vmci_transport.h"
 
diff --git a/net/wireless/chan.c b/net/wireless/chan.c
index fcac5c6..dd8bb88 100644
--- a/net/wireless/chan.c
+++ b/net/wireless/chan.c
@@ -6,7 +6,7 @@
  *
  * Copyright 2009	Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
- * Copyright 2018       Intel Corporation
+ * Copyright 2018-2020	Intel Corporation
  */
 
 #include <linux/export.h>
@@ -27,6 +27,7 @@
 		return;
 
 	chandef->chan = chan;
+	chandef->freq1_offset = chan->freq_offset;
 	chandef->center_freq2 = 0;
 	chandef->edmg.bw_config = 0;
 	chandef->edmg.channels = 0;
@@ -153,7 +154,8 @@
 	case NL80211_CHAN_WIDTH_10:
 	case NL80211_CHAN_WIDTH_20:
 	case NL80211_CHAN_WIDTH_20_NOHT:
-		if (chandef->center_freq1 != control_freq)
+		if (ieee80211_chandef_to_khz(chandef) !=
+		    ieee80211_channel_to_khz(chandef->chan))
 			return false;
 		if (chandef->center_freq2)
 			return false;
@@ -386,10 +388,11 @@
 {
 	u32 start_freq;
 
-	if (bandwidth <= 20)
+	bandwidth = MHZ_TO_KHZ(bandwidth);
+	if (bandwidth <= MHZ_TO_KHZ(20))
 		start_freq = center_freq;
 	else
-		start_freq = center_freq - bandwidth/2 + 10;
+		start_freq = center_freq - bandwidth / 2 + MHZ_TO_KHZ(10);
 
 	return start_freq;
 }
@@ -399,10 +402,11 @@
 {
 	u32 end_freq;
 
-	if (bandwidth <= 20)
+	bandwidth = MHZ_TO_KHZ(bandwidth);
+	if (bandwidth <= MHZ_TO_KHZ(20))
 		end_freq = center_freq;
 	else
-		end_freq = center_freq + bandwidth/2 - 10;
+		end_freq = center_freq + bandwidth / 2 - MHZ_TO_KHZ(10);
 
 	return end_freq;
 }
@@ -417,8 +421,8 @@
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return -EINVAL;
 
@@ -449,8 +453,8 @@
 			return -EINVAL;
 
 		ret = cfg80211_get_chans_dfs_required(wiphy,
-						      chandef->center_freq1,
-						      width);
+					ieee80211_chandef_to_khz(chandef),
+					width);
 		if (ret < 0)
 			return ret;
 		else if (ret > 0)
@@ -460,8 +464,8 @@
 			return 0;
 
 		ret = cfg80211_get_chans_dfs_required(wiphy,
-						      chandef->center_freq2,
-						      width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		if (ret < 0)
 			return ret;
 		else if (ret > 0)
@@ -503,8 +507,8 @@
 	 * DFS_AVAILABLE). Return number of usable channels
 	 * (require CAC). Allow DFS and non-DFS channel mix.
 	 */
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return -EINVAL;
 
@@ -536,8 +540,9 @@
 	if (width < 0)
 		return false;
 
-	r1 = cfg80211_get_chans_dfs_usable(wiphy, chandef->center_freq1,
-					  width);
+	r1 = cfg80211_get_chans_dfs_usable(wiphy,
+					   MHZ_TO_KHZ(chandef->center_freq1),
+					   width);
 
 	if (r1 < 0)
 		return false;
@@ -546,8 +551,8 @@
 	case NL80211_CHAN_WIDTH_80P80:
 		WARN_ON(!chandef->center_freq2);
 		r2 = cfg80211_get_chans_dfs_usable(wiphy,
-						   chandef->center_freq2,
-						   width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		if (r2 < 0)
 			return false;
 		break;
@@ -694,8 +699,8 @@
 	 * If any channel in between is disabled or has not
 	 * had gone through CAC return false
 	 */
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return false;
 
@@ -724,7 +729,8 @@
 	if (width < 0)
 		return false;
 
-	r = cfg80211_get_chans_dfs_available(wiphy, chandef->center_freq1,
+	r = cfg80211_get_chans_dfs_available(wiphy,
+					     MHZ_TO_KHZ(chandef->center_freq1),
 					     width);
 
 	/* If any of channels unavailable for cf1 just return */
@@ -735,8 +741,8 @@
 	case NL80211_CHAN_WIDTH_80P80:
 		WARN_ON(!chandef->center_freq2);
 		r = cfg80211_get_chans_dfs_available(wiphy,
-						     chandef->center_freq2,
-						     width);
+					MHZ_TO_KHZ(chandef->center_freq2),
+					width);
 		break;
 	default:
 		WARN_ON(chandef->center_freq2);
@@ -757,8 +763,8 @@
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c)
 			return 0;
 
@@ -790,14 +796,14 @@
 		return 0;
 
 	t1 = cfg80211_get_chans_dfs_cac_time(wiphy,
-					     chandef->center_freq1,
+					     MHZ_TO_KHZ(chandef->center_freq1),
 					     width);
 
 	if (!chandef->center_freq2)
 		return t1;
 
 	t2 = cfg80211_get_chans_dfs_cac_time(wiphy,
-					     chandef->center_freq2,
+					     MHZ_TO_KHZ(chandef->center_freq2),
 					     width);
 
 	return max(t1, t2);
@@ -813,8 +819,8 @@
 	start_freq = cfg80211_get_start_freq(center_freq, bandwidth);
 	end_freq = cfg80211_get_end_freq(center_freq, bandwidth);
 
-	for (freq = start_freq; freq <= end_freq; freq += 20) {
-		c = ieee80211_get_channel(wiphy, freq);
+	for (freq = start_freq; freq <= end_freq; freq += MHZ_TO_KHZ(20)) {
+		c = ieee80211_get_channel_khz(wiphy, freq);
 		if (!c || c->flags & prohibited_flags)
 			return false;
 	}
@@ -910,7 +916,8 @@
 		width = 10;
 		break;
 	case NL80211_CHAN_WIDTH_20:
-		if (!ht_cap->ht_supported)
+		if (!ht_cap->ht_supported &&
+		    chandef->chan->band != NL80211_BAND_6GHZ)
 			return false;
 		/* fall through */
 	case NL80211_CHAN_WIDTH_20_NOHT:
@@ -919,6 +926,8 @@
 		break;
 	case NL80211_CHAN_WIDTH_40:
 		width = 40;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
 		if (!ht_cap->ht_supported)
 			return false;
 		if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
@@ -933,24 +942,29 @@
 		break;
 	case NL80211_CHAN_WIDTH_80P80:
 		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
-		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
+		if (chandef->chan->band != NL80211_BAND_6GHZ &&
+		    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
 			return false;
 		/* fall through */
 	case NL80211_CHAN_WIDTH_80:
-		if (!vht_cap->vht_supported)
-			return false;
 		prohibited_flags |= IEEE80211_CHAN_NO_80MHZ;
 		width = 80;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
+		if (!vht_cap->vht_supported)
+			return false;
 		break;
 	case NL80211_CHAN_WIDTH_160:
+		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
+		width = 160;
+		if (chandef->chan->band == NL80211_BAND_6GHZ)
+			break;
 		if (!vht_cap->vht_supported)
 			return false;
 		cap = vht_cap->cap & IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_MASK;
 		if (cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160MHZ &&
 		    cap != IEEE80211_VHT_CAP_SUPP_CHAN_WIDTH_160_80PLUS80MHZ)
 			return false;
-		prohibited_flags |= IEEE80211_CHAN_NO_160MHZ;
-		width = 160;
 		break;
 	default:
 		WARN_ON_ONCE(1);
@@ -976,13 +990,15 @@
 		prohibited_flags |= IEEE80211_CHAN_NO_OFDM;
 
 
-	if (!cfg80211_secondary_chans_ok(wiphy, chandef->center_freq1,
+	if (!cfg80211_secondary_chans_ok(wiphy,
+					 ieee80211_chandef_to_khz(chandef),
 					 width, prohibited_flags))
 		return false;
 
 	if (!chandef->center_freq2)
 		return true;
-	return cfg80211_secondary_chans_ok(wiphy, chandef->center_freq2,
+	return cfg80211_secondary_chans_ok(wiphy,
+					   MHZ_TO_KHZ(chandef->center_freq2),
 					   width, prohibited_flags);
 }
 EXPORT_SYMBOL(cfg80211_chandef_usable);
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 5d151e8..52261cb 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -5,7 +5,7 @@
  * Copyright 2006-2010		Johannes Berg <johannes@sipsolutions.net>
  * Copyright 2013-2014  Intel Mobile Communications GmbH
  * Copyright 2015-2017	Intel Deutschland GmbH
- * Copyright (C) 2018-2019 Intel Corporation
+ * Copyright (C) 2018-2020 Intel Corporation
  */
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
@@ -788,6 +788,7 @@
 	/* sanity check supported bands/channels */
 	for (band = 0; band < NUM_NL80211_BANDS; band++) {
 		u16 types = 0;
+		bool have_he = false;
 
 		sband = wiphy->bands[band];
 		if (!sband)
@@ -804,6 +805,11 @@
 			    !sband->n_bitrates))
 			return -EINVAL;
 
+		if (WARN_ON(band == NL80211_BAND_6GHZ &&
+			    (sband->ht_cap.ht_supported ||
+			     sband->vht_cap.vht_supported)))
+			return -EINVAL;
+
 		/*
 		 * Since cfg80211_disable_40mhz_24ghz is global, we can
 		 * modify the sband's ht data even if the driver uses a
@@ -848,8 +854,17 @@
 				return -EINVAL;
 
 			types |= iftd->types_mask;
+
+			if (i == 0)
+				have_he = iftd->he_cap.has_he;
+			else
+				have_he = have_he &&
+					  iftd->he_cap.has_he;
 		}
 
+		if (WARN_ON(!have_he && band == NL80211_BAND_6GHZ))
+			return -EINVAL;
+
 		have_band = true;
 	}
 
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 7633d6a..6215d99 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -628,6 +628,10 @@
 					.len = SAE_PASSWORD_MAX_LEN },
 	[NL80211_ATTR_TWT_RESPONDER] = { .type = NLA_FLAG },
 	[NL80211_ATTR_HE_OBSS_PD] = NLA_POLICY_NESTED(he_obss_pd_policy),
+	[NL80211_ATTR_HE_6GHZ_CAPABILITY] = {
+		.type = NLA_EXACT_LEN,
+		.len = sizeof(struct ieee80211_he_6ghz_capa),
+	},
 };
 
 /* policy for the key attributes */
@@ -1536,6 +1540,7 @@
 
 static int
 nl80211_send_iftype_data(struct sk_buff *msg,
+			 const struct ieee80211_supported_band *sband,
 			 const struct ieee80211_sband_iftype_data *iftdata)
 {
 	const struct ieee80211_sta_he_cap *he_cap = &iftdata->he_cap;
@@ -1559,6 +1564,12 @@
 			return -ENOBUFS;
 	}
 
+	if (sband->band == NL80211_BAND_6GHZ &&
+	    nla_put(msg, NL80211_BAND_IFTYPE_ATTR_HE_6GHZ_CAPA,
+		    sizeof(iftdata->he_6ghz_capa),
+		    &iftdata->he_6ghz_capa))
+		return -ENOBUFS;
+
 	return 0;
 }
 
@@ -1607,7 +1618,7 @@
 			if (!iftdata)
 				return -ENOBUFS;
 
-			err = nl80211_send_iftype_data(msg,
+			err = nl80211_send_iftype_data(msg, sband,
 						       &sband->iftype_data[i]);
 			if (err)
 				return err;
@@ -5785,6 +5796,10 @@
 			nla_get_u8(info->attrs[NL80211_ATTR_OPMODE_NOTIF]);
 	}
 
+	if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
+		params.he_6ghz_capa =
+			nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
+
 	if (info->attrs[NL80211_ATTR_AIRTIME_WEIGHT])
 		params.airtime_weight =
 			nla_get_u16(info->attrs[NL80211_ATTR_AIRTIME_WEIGHT]);
@@ -5916,6 +5931,10 @@
 			return -EINVAL;
 	}
 
+	if (info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY])
+		params.he_6ghz_capa =
+			nla_data(info->attrs[NL80211_ATTR_HE_6GHZ_CAPABILITY]);
+
 	if (info->attrs[NL80211_ATTR_OPMODE_NOTIF]) {
 		params.opmode_notif_used = true;
 		params.opmode_notif =
@@ -5960,10 +5979,14 @@
 		params.vht_capa = NULL;
 
 		/* HE requires WME */
-		if (params.he_capa_len)
+		if (params.he_capa_len || params.he_6ghz_capa)
 			return -EINVAL;
 	}
 
+	/* Ensure that HT/VHT capabilities are not set for 6 GHz HE STA */
+	if (params.he_6ghz_capa && (params.ht_capa || params.vht_capa))
+		return -EINVAL;
+
 	/* When you run into this, adjust the code below for the new flag */
 	BUILD_BUG_ON(NL80211_STA_FLAG_MAX != 7);
 
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 0f3b57a..9cb4523 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -1656,22 +1656,23 @@
 					  const struct ieee80211_channel *chan)
 {
 	const struct ieee80211_freq_range *freq_range = NULL;
-	u32 max_bandwidth_khz, bw_flags = 0;
+	u32 max_bandwidth_khz, center_freq_khz, bw_flags = 0;
 
 	freq_range = &reg_rule->freq_range;
 
 	max_bandwidth_khz = freq_range->max_bandwidth_khz;
+	center_freq_khz = ieee80211_channel_to_khz(chan);
 	/* Check if auto calculation requested */
 	if (reg_rule->flags & NL80211_RRF_AUTO_BW)
 		max_bandwidth_khz = reg_get_max_bandwidth(regd, reg_rule);
 
 	/* If we get a reg_rule we can assume that at least 5Mhz fit */
 	if (!cfg80211_does_bw_fit_range(freq_range,
-					MHZ_TO_KHZ(chan->center_freq),
+					center_freq_khz,
 					MHZ_TO_KHZ(10)))
 		bw_flags |= IEEE80211_CHAN_NO_10MHZ;
 	if (!cfg80211_does_bw_fit_range(freq_range,
-					MHZ_TO_KHZ(chan->center_freq),
+					center_freq_khz,
 					MHZ_TO_KHZ(20)))
 		bw_flags |= IEEE80211_CHAN_NO_20MHZ;
 
@@ -1708,7 +1709,7 @@
 
 	flags = chan->orig_flags;
 
-	reg_rule = freq_reg_info(wiphy, MHZ_TO_KHZ(chan->center_freq));
+	reg_rule = freq_reg_info(wiphy, ieee80211_channel_to_khz(chan));
 	if (IS_ERR(reg_rule)) {
 		/*
 		 * We will disable all channels that do not match our
@@ -1727,13 +1728,13 @@
 		if (lr->initiator == NL80211_REGDOM_SET_BY_DRIVER &&
 		    request_wiphy && request_wiphy == wiphy &&
 		    request_wiphy->regulatory_flags & REGULATORY_STRICT_REG) {
-			pr_debug("Disabling freq %d MHz for good\n",
-				 chan->center_freq);
+			pr_debug("Disabling freq %d.%03d MHz for good\n",
+				 chan->center_freq, chan->freq_offset);
 			chan->orig_flags |= IEEE80211_CHAN_DISABLED;
 			chan->flags = chan->orig_flags;
 		} else {
-			pr_debug("Disabling freq %d MHz\n",
-				 chan->center_freq);
+			pr_debug("Disabling freq %d.%03d MHz\n",
+				 chan->center_freq, chan->freq_offset);
 			chan->flags |= IEEE80211_CHAN_DISABLED;
 		}
 		return;
@@ -1934,7 +1935,7 @@
 	sband = wiphy->bands[reg_beacon->chan.band];
 	chan = &sband->channels[chan_idx];
 
-	if (likely(chan->center_freq != reg_beacon->chan.center_freq))
+	if (likely(!ieee80211_channel_equal(chan, &reg_beacon->chan)))
 		return;
 
 	if (chan->beacon_found)
@@ -2267,18 +2268,18 @@
 	u32 bw_flags = 0;
 	const struct ieee80211_reg_rule *reg_rule = NULL;
 	const struct ieee80211_power_rule *power_rule = NULL;
-	u32 bw;
+	u32 bw, center_freq_khz;
 
+	center_freq_khz = ieee80211_channel_to_khz(chan);
 	for (bw = MHZ_TO_KHZ(20); bw >= min_bw; bw = bw / 2) {
-		reg_rule = freq_reg_info_regd(MHZ_TO_KHZ(chan->center_freq),
-					      regd, bw);
+		reg_rule = freq_reg_info_regd(center_freq_khz, regd, bw);
 		if (!IS_ERR(reg_rule))
 			break;
 	}
 
 	if (IS_ERR_OR_NULL(reg_rule)) {
-		pr_debug("Disabling freq %d MHz as custom regd has no rule that fits it\n",
-			 chan->center_freq);
+		pr_debug("Disabling freq %d.%03d MHz as custom regd has no rule that fits it\n",
+			 chan->center_freq, chan->freq_offset);
 		if (wiphy->regulatory_flags & REGULATORY_WIPHY_SELF_MANAGED) {
 			chan->flags |= IEEE80211_CHAN_DISABLED;
 		} else {
@@ -3338,8 +3339,8 @@
 	struct reg_beacon *pending_beacon;
 
 	list_for_each_entry(pending_beacon, &reg_pending_beacons, list)
-		if (beacon_chan->center_freq ==
-		    pending_beacon->chan.center_freq)
+		if (ieee80211_channel_equal(beacon_chan,
+					    &pending_beacon->chan))
 			return true;
 	return false;
 }
@@ -3368,9 +3369,10 @@
 	if (!reg_beacon)
 		return -ENOMEM;
 
-	pr_debug("Found new beacon on frequency: %d MHz (Ch %d) on %s\n",
-		 beacon_chan->center_freq,
-		 ieee80211_frequency_to_channel(beacon_chan->center_freq),
+	pr_debug("Found new beacon on frequency: %d.%03d MHz (Ch %d) on %s\n",
+		 beacon_chan->center_freq, beacon_chan->freq_offset,
+		 ieee80211_freq_khz_to_channel(
+			 ieee80211_channel_to_khz(beacon_chan)),
 		 wiphy_name(wiphy));
 
 	memcpy(&reg_beacon->chan, beacon_chan,
diff --git a/net/wireless/scan.c b/net/wireless/scan.c
index 6cefaad..37613ca 100644
--- a/net/wireless/scan.c
+++ b/net/wireless/scan.c
@@ -1326,8 +1326,8 @@
 		return channel;
 	}
 
-	freq = ieee80211_channel_to_frequency(channel_number, channel->band);
-	alt_channel = ieee80211_get_channel(wiphy, freq);
+	freq = ieee80211_channel_to_freq_khz(channel_number, channel->band);
+	alt_channel = ieee80211_get_channel_khz(wiphy, freq);
 	if (!alt_channel) {
 		if (channel->band == NL80211_BAND_2GHZ) {
 			/*
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 8677d7a..0445cf5 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -112,24 +112,29 @@
 	} while (0)
 
 #define CHAN_ENTRY __field(enum nl80211_band, band) \
-		   __field(u32, center_freq)
+		   __field(u32, center_freq)		\
+		   __field(u16, freq_offset)
 #define CHAN_ASSIGN(chan)					  \
 	do {							  \
 		if (chan) {					  \
 			__entry->band = chan->band;		  \
 			__entry->center_freq = chan->center_freq; \
+			__entry->freq_offset = chan->freq_offset; \
 		} else {					  \
 			__entry->band = 0;			  \
 			__entry->center_freq = 0;		  \
+			__entry->freq_offset = 0;		  \
 		}						  \
 	} while (0)
-#define CHAN_PR_FMT "band: %d, freq: %u"
-#define CHAN_PR_ARG __entry->band, __entry->center_freq
+#define CHAN_PR_FMT "band: %d, freq: %u.%03u"
+#define CHAN_PR_ARG __entry->band, __entry->center_freq, __entry->freq_offset
 
 #define CHAN_DEF_ENTRY __field(enum nl80211_band, band)		\
 		       __field(u32, control_freq)			\
+		       __field(u32, freq_offset)			\
 		       __field(u32, width)				\
 		       __field(u32, center_freq1)			\
+		       __field(u32, freq1_offset)			\
 		       __field(u32, center_freq2)
 #define CHAN_DEF_ASSIGN(chandef)					\
 	do {								\
@@ -137,21 +142,27 @@
 			__entry->band = (chandef)->chan->band;		\
 			__entry->control_freq =				\
 				(chandef)->chan->center_freq;		\
+			__entry->freq_offset =				\
+				(chandef)->chan->freq_offset;		\
 			__entry->width = (chandef)->width;		\
 			__entry->center_freq1 = (chandef)->center_freq1;\
+			__entry->freq1_offset = (chandef)->freq1_offset;\
 			__entry->center_freq2 = (chandef)->center_freq2;\
 		} else {						\
 			__entry->band = 0;				\
 			__entry->control_freq = 0;			\
+			__entry->freq_offset = 0;			\
 			__entry->width = 0;				\
 			__entry->center_freq1 = 0;			\
+			__entry->freq1_offset = 0;			\
 			__entry->center_freq2 = 0;			\
 		}							\
 	} while (0)
 #define CHAN_DEF_PR_FMT							\
-	"band: %d, control freq: %u, width: %d, cf1: %u, cf2: %u"
+	"band: %d, control freq: %u.%03u, width: %d, cf1: %u.%03u, cf2: %u"
 #define CHAN_DEF_PR_ARG __entry->band, __entry->control_freq,		\
-			__entry->width, __entry->center_freq1,		\
+			__entry->freq_offset, __entry->width,		\
+			__entry->center_freq1, __entry->freq1_offset,	\
 			__entry->center_freq2
 
 #define SINFO_ENTRY __field(int, generation)	    \
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 9553373..fc335d4 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -72,7 +72,7 @@
 }
 EXPORT_SYMBOL(ieee80211_mandatory_rates);
 
-int ieee80211_channel_to_frequency(int chan, enum nl80211_band band)
+u32 ieee80211_channel_to_freq_khz(int chan, enum nl80211_band band)
 {
 	/* see 802.11 17.3.8.3.2 and Annex J
 	 * there are overlapping channel numbers in 5GHz and 2GHz bands */
@@ -81,34 +81,39 @@
 	switch (band) {
 	case NL80211_BAND_2GHZ:
 		if (chan == 14)
-			return 2484;
+			return MHZ_TO_KHZ(2484);
 		else if (chan < 14)
-			return 2407 + chan * 5;
+			return MHZ_TO_KHZ(2407 + chan * 5);
 		break;
 	case NL80211_BAND_5GHZ:
 		if (chan >= 182 && chan <= 196)
-			return 4000 + chan * 5;
+			return MHZ_TO_KHZ(4000 + chan * 5);
 		else
-			return 5000 + chan * 5;
+			return MHZ_TO_KHZ(5000 + chan * 5);
 		break;
 	case NL80211_BAND_6GHZ:
-		/* see 802.11ax D4.1 27.3.22.2 */
-		if (chan <= 253)
-			return 5940 + chan * 5;
+		/* see 802.11ax D6.1 27.3.23.2 */
+		if (chan == 2)
+			return MHZ_TO_KHZ(5935);
+		if (chan <= 233)
+			return MHZ_TO_KHZ(5950 + chan * 5);
 		break;
 	case NL80211_BAND_60GHZ:
 		if (chan < 7)
-			return 56160 + chan * 2160;
+			return MHZ_TO_KHZ(56160 + chan * 2160);
 		break;
 	default:
 		;
 	}
 	return 0; /* not supported */
 }
-EXPORT_SYMBOL(ieee80211_channel_to_frequency);
+EXPORT_SYMBOL(ieee80211_channel_to_freq_khz);
 
-int ieee80211_frequency_to_channel(int freq)
+int ieee80211_freq_khz_to_channel(u32 freq)
 {
+	/* TODO: just handle MHz for now */
+	freq = KHZ_TO_MHZ(freq);
+
 	/* see 802.11 17.3.8.3.2 and Annex J */
 	if (freq == 2484)
 		return 14;
@@ -128,9 +133,10 @@
 	else
 		return 0;
 }
-EXPORT_SYMBOL(ieee80211_frequency_to_channel);
+EXPORT_SYMBOL(ieee80211_freq_khz_to_channel);
 
-struct ieee80211_channel *ieee80211_get_channel(struct wiphy *wiphy, int freq)
+struct ieee80211_channel *ieee80211_get_channel_khz(struct wiphy *wiphy,
+						    u32 freq)
 {
 	enum nl80211_band band;
 	struct ieee80211_supported_band *sband;
@@ -143,14 +149,16 @@
 			continue;
 
 		for (i = 0; i < sband->n_channels; i++) {
-			if (sband->channels[i].center_freq == freq)
-				return &sband->channels[i];
+			struct ieee80211_channel *chan = &sband->channels[i];
+
+			if (ieee80211_channel_to_khz(chan) == freq)
+				return chan;
 		}
 	}
 
 	return NULL;
 }
-EXPORT_SYMBOL(ieee80211_get_channel);
+EXPORT_SYMBOL(ieee80211_get_channel_khz);
 
 static void set_mandatory_flags_band(struct ieee80211_supported_band *sband)
 {
diff --git a/net/xfrm/Kconfig b/net/xfrm/Kconfig
index 51bb601..e5815cb 100644
--- a/net/xfrm/Kconfig
+++ b/net/xfrm/Kconfig
@@ -28,6 +28,17 @@
 
 	  If unsure, say Y.
 
+config XFRM_USER_COMPAT
+	tristate "Compatible ABI support"
+	depends on XFRM_USER && COMPAT_FOR_U64_ALIGNMENT && \
+		HAVE_EFFICIENT_UNALIGNED_ACCESS
+	select WANT_COMPAT_NETLINK_MESSAGES
+	help
+	  Transformation(XFRM) user configuration interface like IPsec
+	  used by compatible Linux applications.
+
+	  If unsure, say N.
+
 config XFRM_INTERFACE
 	tristate "Transformation virtual interface"
 	depends on XFRM && IPV6
diff --git a/net/xfrm/Makefile b/net/xfrm/Makefile
index fbc4552d..f325115 100644
--- a/net/xfrm/Makefile
+++ b/net/xfrm/Makefile
@@ -9,5 +9,6 @@
 obj-$(CONFIG_XFRM_STATISTICS) += xfrm_proc.o
 obj-$(CONFIG_XFRM_ALGO) += xfrm_algo.o
 obj-$(CONFIG_XFRM_USER) += xfrm_user.o
+obj-$(CONFIG_XFRM_USER_COMPAT) += xfrm_compat.o
 obj-$(CONFIG_XFRM_IPCOMP) += xfrm_ipcomp.o
 obj-$(CONFIG_XFRM_INTERFACE) += xfrm_interface.o
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c
index 32a378e..8b06ef5 100644
--- a/net/xfrm/xfrm_algo.c
+++ b/net/xfrm/xfrm_algo.c
@@ -237,7 +237,7 @@
 
 	.uinfo = {
 		.auth = {
-			.icv_truncbits = 96,
+			.icv_truncbits = 128,
 			.icv_fullbits = 256,
 		}
 	},
diff --git a/net/xfrm/xfrm_compat.c b/net/xfrm/xfrm_compat.c
new file mode 100644
index 0000000..2bf2693
--- /dev/null
+++ b/net/xfrm/xfrm_compat.c
@@ -0,0 +1,671 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * XFRM compat layer
+ * Author: Dmitry Safonov <dima@arista.com>
+ * Based on code and translator idea by: Florian Westphal <fw@strlen.de>
+ */
+#include <linux/compat.h>
+#include <linux/xfrm.h>
+#include <net/xfrm.h>
+
+struct compat_xfrm_lifetime_cfg {
+	compat_u64 soft_byte_limit, hard_byte_limit;
+	compat_u64 soft_packet_limit, hard_packet_limit;
+	compat_u64 soft_add_expires_seconds, hard_add_expires_seconds;
+	compat_u64 soft_use_expires_seconds, hard_use_expires_seconds;
+}; /* same size on 32bit, but only 4 byte alignment required */
+
+struct compat_xfrm_lifetime_cur {
+	compat_u64 bytes, packets, add_time, use_time;
+}; /* same size on 32bit, but only 4 byte alignment required */
+
+struct compat_xfrm_userpolicy_info {
+	struct xfrm_selector sel;
+	struct compat_xfrm_lifetime_cfg lft;
+	struct compat_xfrm_lifetime_cur curlft;
+	__u32 priority, index;
+	u8 dir, action, flags, share;
+	/* 4 bytes additional padding on 64bit */
+};
+
+struct compat_xfrm_usersa_info {
+	struct xfrm_selector sel;
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct compat_xfrm_lifetime_cfg lft;
+	struct compat_xfrm_lifetime_cur curlft;
+	struct xfrm_stats stats;
+	__u32 seq, reqid;
+	u16 family;
+	u8 mode, replay_window, flags;
+	/* 4 bytes additional padding on 64bit */
+};
+
+struct compat_xfrm_user_acquire {
+	struct xfrm_id id;
+	xfrm_address_t saddr;
+	struct xfrm_selector sel;
+	struct compat_xfrm_userpolicy_info policy;
+	/* 4 bytes additional padding on 64bit */
+	__u32 aalgos, ealgos, calgos, seq;
+};
+
+struct compat_xfrm_userspi_info {
+	struct compat_xfrm_usersa_info info;
+	/* 4 bytes additional padding on 64bit */
+	__u32 min, max;
+};
+
+struct compat_xfrm_user_expire {
+	struct compat_xfrm_usersa_info state;
+	/* 8 bytes additional padding on 64bit */
+	u8 hard;
+};
+
+struct compat_xfrm_user_polexpire {
+	struct compat_xfrm_userpolicy_info pol;
+	/* 8 bytes additional padding on 64bit */
+	u8 hard;
+};
+
+#define XMSGSIZE(type) sizeof(struct type)
+
+static const int compat_msg_min[XFRM_NR_MSGTYPES] = {
+	[XFRM_MSG_NEWSA       - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_usersa_info),
+	[XFRM_MSG_DELSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
+	[XFRM_MSG_GETSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
+	[XFRM_MSG_NEWPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userpolicy_info),
+	[XFRM_MSG_DELPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_GETPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_ALLOCSPI    - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userspi_info),
+	[XFRM_MSG_ACQUIRE     - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_acquire),
+	[XFRM_MSG_EXPIRE      - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_expire),
+	[XFRM_MSG_UPDPOLICY   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_userpolicy_info),
+	[XFRM_MSG_UPDSA       - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_usersa_info),
+	[XFRM_MSG_POLEXPIRE   - XFRM_MSG_BASE] = XMSGSIZE(compat_xfrm_user_polexpire),
+	[XFRM_MSG_FLUSHSA     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_flush),
+	[XFRM_MSG_FLUSHPOLICY - XFRM_MSG_BASE] = 0,
+	[XFRM_MSG_NEWAE       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_aevent_id),
+	[XFRM_MSG_GETAE       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_aevent_id),
+	[XFRM_MSG_REPORT      - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_report),
+	[XFRM_MSG_MIGRATE     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_userpolicy_id),
+	[XFRM_MSG_NEWSADINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_GETSADINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_NEWSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_GETSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
+	[XFRM_MSG_MAPPING     - XFRM_MSG_BASE] = XMSGSIZE(xfrm_user_mapping)
+};
+
+static const struct nla_policy compat_policy[XFRMA_MAX+1] = {
+	[XFRMA_SA]		= { .len = XMSGSIZE(compat_xfrm_usersa_info)},
+	[XFRMA_POLICY]		= { .len = XMSGSIZE(compat_xfrm_userpolicy_info)},
+	[XFRMA_LASTUSED]	= { .type = NLA_U64},
+	[XFRMA_ALG_AUTH_TRUNC]	= { .len = sizeof(struct xfrm_algo_auth)},
+	[XFRMA_ALG_AEAD]	= { .len = sizeof(struct xfrm_algo_aead) },
+	[XFRMA_ALG_AUTH]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ALG_CRYPT]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ALG_COMP]	= { .len = sizeof(struct xfrm_algo) },
+	[XFRMA_ENCAP]		= { .len = sizeof(struct xfrm_encap_tmpl) },
+	[XFRMA_TMPL]		= { .len = sizeof(struct xfrm_user_tmpl) },
+	[XFRMA_SEC_CTX]		= { .len = sizeof(struct xfrm_sec_ctx) },
+	[XFRMA_LTIME_VAL]	= { .len = sizeof(struct xfrm_lifetime_cur) },
+	[XFRMA_REPLAY_VAL]	= { .len = sizeof(struct xfrm_replay_state) },
+	[XFRMA_REPLAY_THRESH]	= { .type = NLA_U32 },
+	[XFRMA_ETIMER_THRESH]	= { .type = NLA_U32 },
+	[XFRMA_SRCADDR]		= { .len = sizeof(xfrm_address_t) },
+	[XFRMA_COADDR]		= { .len = sizeof(xfrm_address_t) },
+	[XFRMA_POLICY_TYPE]	= { .len = sizeof(struct xfrm_userpolicy_type)},
+	[XFRMA_MIGRATE]		= { .len = sizeof(struct xfrm_user_migrate) },
+	[XFRMA_KMADDRESS]	= { .len = sizeof(struct xfrm_user_kmaddress) },
+	[XFRMA_MARK]		= { .len = sizeof(struct xfrm_mark) },
+	[XFRMA_TFCPAD]		= { .type = NLA_U32 },
+	[XFRMA_REPLAY_ESN_VAL]	= { .len = sizeof(struct xfrm_replay_state_esn) },
+	[XFRMA_SA_EXTRA_FLAGS]	= { .type = NLA_U32 },
+	[XFRMA_PROTO]		= { .type = NLA_U8 },
+	[XFRMA_ADDRESS_FILTER]	= { .len = sizeof(struct xfrm_address_filter) },
+	[XFRMA_OFFLOAD_DEV]	= { .len = sizeof(struct xfrm_user_offload) },
+	[XFRMA_SET_MARK]	= { .type = NLA_U32 },
+	[XFRMA_SET_MARK_MASK]	= { .type = NLA_U32 },
+	[XFRMA_IF_ID]		= { .type = NLA_U32 },
+};
+
+static struct nlmsghdr *xfrm_nlmsg_put_compat(struct sk_buff *skb,
+			const struct nlmsghdr *nlh_src, u16 type)
+{
+	int payload = compat_msg_min[type];
+	int src_len = xfrm_msg_min[type];
+	struct nlmsghdr *nlh_dst;
+
+	/* Compat messages are shorter or equal to native (+padding) */
+	if (WARN_ON_ONCE(src_len < payload))
+		return ERR_PTR(-EMSGSIZE);
+
+	nlh_dst = nlmsg_put(skb, nlh_src->nlmsg_pid, nlh_src->nlmsg_seq,
+			    nlh_src->nlmsg_type, payload, nlh_src->nlmsg_flags);
+	if (!nlh_dst)
+		return ERR_PTR(-EMSGSIZE);
+
+	memset(nlmsg_data(nlh_dst), 0, payload);
+
+	switch (nlh_src->nlmsg_type) {
+	/* Compat message has the same layout as native */
+	case XFRM_MSG_DELSA:
+	case XFRM_MSG_DELPOLICY:
+	case XFRM_MSG_FLUSHSA:
+	case XFRM_MSG_FLUSHPOLICY:
+	case XFRM_MSG_NEWAE:
+	case XFRM_MSG_REPORT:
+	case XFRM_MSG_MIGRATE:
+	case XFRM_MSG_NEWSADINFO:
+	case XFRM_MSG_NEWSPDINFO:
+	case XFRM_MSG_MAPPING:
+		WARN_ON_ONCE(src_len != payload);
+		memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), src_len);
+		break;
+	/* 4 byte alignment for trailing u64 on native, but not on compat */
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_UPDSA:
+	case XFRM_MSG_UPDPOLICY:
+		WARN_ON_ONCE(src_len != payload + 4);
+		memcpy(nlmsg_data(nlh_dst), nlmsg_data(nlh_src), payload);
+		break;
+	case XFRM_MSG_EXPIRE: {
+		const struct xfrm_user_expire *src_ue  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_expire *dst_ue = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_expire has 4-byte smaller state */
+		memcpy(dst_ue, src_ue, sizeof(dst_ue->state));
+		dst_ue->hard = src_ue->hard;
+		break;
+	}
+	case XFRM_MSG_ACQUIRE: {
+		const struct xfrm_user_acquire *src_ua  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_acquire *dst_ua = nlmsg_data(nlh_dst);
+
+		memcpy(dst_ua, src_ua, offsetof(struct compat_xfrm_user_acquire, aalgos));
+		dst_ua->aalgos = src_ua->aalgos;
+		dst_ua->ealgos = src_ua->ealgos;
+		dst_ua->calgos = src_ua->calgos;
+		dst_ua->seq    = src_ua->seq;
+		break;
+	}
+	case XFRM_MSG_POLEXPIRE: {
+		const struct xfrm_user_polexpire *src_upe  = nlmsg_data(nlh_src);
+		struct compat_xfrm_user_polexpire *dst_upe = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_upe, src_upe, sizeof(dst_upe->pol));
+		dst_upe->hard = src_upe->hard;
+		break;
+	}
+	case XFRM_MSG_ALLOCSPI: {
+		const struct xfrm_userspi_info *src_usi = nlmsg_data(nlh_src);
+		struct compat_xfrm_userspi_info *dst_usi = nlmsg_data(nlh_dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_usi, src_usi, sizeof(src_usi->info));
+		dst_usi->min = src_usi->min;
+		dst_usi->max = src_usi->max;
+		break;
+	}
+	/* Not being sent by kernel */
+	case XFRM_MSG_GETSA:
+	case XFRM_MSG_GETPOLICY:
+	case XFRM_MSG_GETAE:
+	case XFRM_MSG_GETSADINFO:
+	case XFRM_MSG_GETSPDINFO:
+	default:
+		pr_warn_once("unsupported nlmsg_type %d\n", nlh_src->nlmsg_type);
+		return ERR_PTR(-EOPNOTSUPP);
+	}
+
+	return nlh_dst;
+}
+
+static int xfrm_nla_cpy(struct sk_buff *dst, const struct nlattr *src, int len)
+{
+	return nla_put(dst, src->nla_type, len, nla_data(src));
+}
+
+static int xfrm_xlate64_attr(struct sk_buff *dst, const struct nlattr *src)
+{
+	switch (src->nla_type) {
+	case XFRMA_PAD:
+		/* Ignore */
+		return 0;
+	case XFRMA_UNSPEC:
+	case XFRMA_ALG_AUTH:
+	case XFRMA_ALG_CRYPT:
+	case XFRMA_ALG_COMP:
+	case XFRMA_ENCAP:
+	case XFRMA_TMPL:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_SA:
+		return xfrm_nla_cpy(dst, src, XMSGSIZE(compat_xfrm_usersa_info));
+	case XFRMA_POLICY:
+		return xfrm_nla_cpy(dst, src, XMSGSIZE(compat_xfrm_userpolicy_info));
+	case XFRMA_SEC_CTX:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_LTIME_VAL:
+		return nla_put_64bit(dst, src->nla_type, nla_len(src),
+			nla_data(src), XFRMA_PAD);
+	case XFRMA_REPLAY_VAL:
+	case XFRMA_REPLAY_THRESH:
+	case XFRMA_ETIMER_THRESH:
+	case XFRMA_SRCADDR:
+	case XFRMA_COADDR:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	case XFRMA_LASTUSED:
+		return nla_put_64bit(dst, src->nla_type, nla_len(src),
+			nla_data(src), XFRMA_PAD);
+	case XFRMA_POLICY_TYPE:
+	case XFRMA_MIGRATE:
+	case XFRMA_ALG_AEAD:
+	case XFRMA_KMADDRESS:
+	case XFRMA_ALG_AUTH_TRUNC:
+	case XFRMA_MARK:
+	case XFRMA_TFCPAD:
+	case XFRMA_REPLAY_ESN_VAL:
+	case XFRMA_SA_EXTRA_FLAGS:
+	case XFRMA_PROTO:
+	case XFRMA_ADDRESS_FILTER:
+	case XFRMA_OFFLOAD_DEV:
+	case XFRMA_SET_MARK:
+	case XFRMA_SET_MARK_MASK:
+	case XFRMA_IF_ID:
+		return xfrm_nla_cpy(dst, src, nla_len(src));
+	default:
+		BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
+		pr_warn_once("unsupported nla_type %d\n", src->nla_type);
+		return -EOPNOTSUPP;
+	}
+}
+
+/* Take kernel-built (64bit layout) and create 32bit layout for userspace */
+static int xfrm_xlate64(struct sk_buff *dst, const struct nlmsghdr *nlh_src)
+{
+	u16 type = nlh_src->nlmsg_type - XFRM_MSG_BASE;
+	const struct nlattr *nla, *attrs;
+	struct nlmsghdr *nlh_dst;
+	int len, remaining;
+
+	nlh_dst = xfrm_nlmsg_put_compat(dst, nlh_src, type);
+	if (IS_ERR(nlh_dst))
+		return PTR_ERR(nlh_dst);
+
+	attrs = nlmsg_attrdata(nlh_src, xfrm_msg_min[type]);
+	len = nlmsg_attrlen(nlh_src, xfrm_msg_min[type]);
+
+	nla_for_each_attr(nla, attrs, len, remaining) {
+		int err;
+
+		switch (type) {
+		case XFRM_MSG_NEWSPDINFO:
+			err = xfrm_nla_cpy(dst, nla, nla_len(nla));
+			break;
+		default:
+			err = xfrm_xlate64_attr(dst, nla);
+			break;
+		}
+		if (err)
+			return err;
+	}
+
+	nlmsg_end(dst, nlh_dst);
+
+	return 0;
+}
+
+static int xfrm_alloc_compat(struct sk_buff *skb, const struct nlmsghdr *nlh_src)
+{
+	u16 type = nlh_src->nlmsg_type - XFRM_MSG_BASE;
+	struct sk_buff *new = NULL;
+	int err;
+
+	if (type >= ARRAY_SIZE(xfrm_msg_min)) {
+		pr_warn_once("unsupported nlmsg_type %d\n", nlh_src->nlmsg_type);
+		return -EOPNOTSUPP;
+	}
+
+	if (skb_shinfo(skb)->frag_list == NULL) {
+		new = alloc_skb(skb->len + skb_tailroom(skb), GFP_ATOMIC);
+		if (!new)
+			return -ENOMEM;
+		skb_shinfo(skb)->frag_list = new;
+	}
+
+	err = xfrm_xlate64(skb_shinfo(skb)->frag_list, nlh_src);
+	if (err) {
+		if (new) {
+			kfree_skb(new);
+			skb_shinfo(skb)->frag_list = NULL;
+		}
+		return err;
+	}
+
+	return 0;
+}
+
+/* Calculates len of translated 64-bit message. */
+static size_t xfrm_user_rcv_calculate_len64(const struct nlmsghdr *src,
+					    struct nlattr *attrs[XFRMA_MAX + 1],
+					    int maxtype)
+{
+	size_t len = nlmsg_len(src);
+
+	switch (src->nlmsg_type) {
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_ALLOCSPI:
+	case XFRM_MSG_ACQUIRE:
+	case XFRM_MSG_UPDPOLICY:
+	case XFRM_MSG_UPDSA:
+		len += 4;
+		break;
+	case XFRM_MSG_EXPIRE:
+	case XFRM_MSG_POLEXPIRE:
+		len += 8;
+		break;
+	case XFRM_MSG_NEWSPDINFO:
+		/* attirbutes are xfrm_spdattr_type_t, not xfrm_attr_type_t */
+		return len;
+	default:
+		break;
+	}
+
+	/* Unexpected for anything, but XFRM_MSG_NEWSPDINFO, please
+	 * correct both 64=>32-bit and 32=>64-bit translators to copy
+	 * new attributes.
+	 */
+	if (WARN_ON_ONCE(maxtype))
+		return len;
+
+	if (attrs[XFRMA_SA])
+		len += 4;
+	if (attrs[XFRMA_POLICY])
+		len += 4;
+
+	/* XXX: some attrs may need to be realigned
+	 * if !CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+	 */
+
+	return len;
+}
+
+static int xfrm_attr_cpy32(void *dst, size_t *pos, const struct nlattr *src,
+			   size_t size, int copy_len, int payload)
+{
+	struct nlmsghdr *nlmsg = dst;
+	struct nlattr *nla;
+
+	/* xfrm_user_rcv_msg_compat() relies on fact that 32-bit messages
+	 * have the same len or shorted than 64-bit ones.
+	 * 32-bit translation that is bigger than 64-bit original is unexpected.
+	 */
+	if (WARN_ON_ONCE(copy_len > payload))
+		copy_len = payload;
+
+	if (size - *pos < nla_attr_size(payload))
+		return -ENOBUFS;
+
+	nla = dst + *pos;
+
+	memcpy(nla, src, nla_attr_size(copy_len));
+	nla->nla_len = nla_attr_size(payload);
+	*pos += nla_attr_size(copy_len);
+	nlmsg->nlmsg_len += nla->nla_len;
+
+	memset(dst + *pos, 0, payload - copy_len);
+	*pos += payload - copy_len;
+
+	return 0;
+}
+
+static int xfrm_xlate32_attr(void *dst, const struct nlattr *nla,
+			     size_t *pos, size_t size,
+			     struct netlink_ext_ack *extack)
+{
+	int type = nla_type(nla);
+	u16 pol_len32, pol_len64;
+	int err;
+
+	if (type > XFRMA_MAX) {
+		BUILD_BUG_ON(XFRMA_MAX != XFRMA_IF_ID);
+		NL_SET_ERR_MSG(extack, "Bad attribute");
+		return -EOPNOTSUPP;
+	}
+	if (nla_len(nla) < compat_policy[type].len) {
+		NL_SET_ERR_MSG(extack, "Attribute bad length");
+		return -EOPNOTSUPP;
+	}
+
+	pol_len32 = compat_policy[type].len;
+	pol_len64 = xfrma_policy[type].len;
+
+	/* XFRMA_SA and XFRMA_POLICY - need to know how-to translate */
+	if (pol_len32 != pol_len64) {
+		if (nla_len(nla) != compat_policy[type].len) {
+			NL_SET_ERR_MSG(extack, "Attribute bad length");
+			return -EOPNOTSUPP;
+		}
+		err = xfrm_attr_cpy32(dst, pos, nla, size, pol_len32, pol_len64);
+		if (err)
+			return err;
+	}
+
+	return xfrm_attr_cpy32(dst, pos, nla, size, nla_len(nla), nla_len(nla));
+}
+
+static int xfrm_xlate32(struct nlmsghdr *dst, const struct nlmsghdr *src,
+			struct nlattr *attrs[XFRMA_MAX+1],
+			size_t size, u8 type, int maxtype,
+			struct netlink_ext_ack *extack)
+{
+	size_t pos;
+	int i;
+
+	memcpy(dst, src, NLMSG_HDRLEN);
+	dst->nlmsg_len = NLMSG_HDRLEN + xfrm_msg_min[type];
+	memset(nlmsg_data(dst), 0, xfrm_msg_min[type]);
+
+	switch (src->nlmsg_type) {
+	/* Compat message has the same layout as native */
+	case XFRM_MSG_DELSA:
+	case XFRM_MSG_GETSA:
+	case XFRM_MSG_DELPOLICY:
+	case XFRM_MSG_GETPOLICY:
+	case XFRM_MSG_FLUSHSA:
+	case XFRM_MSG_FLUSHPOLICY:
+	case XFRM_MSG_NEWAE:
+	case XFRM_MSG_GETAE:
+	case XFRM_MSG_REPORT:
+	case XFRM_MSG_MIGRATE:
+	case XFRM_MSG_NEWSADINFO:
+	case XFRM_MSG_GETSADINFO:
+	case XFRM_MSG_NEWSPDINFO:
+	case XFRM_MSG_GETSPDINFO:
+	case XFRM_MSG_MAPPING:
+		memcpy(nlmsg_data(dst), nlmsg_data(src), compat_msg_min[type]);
+		break;
+	/* 4 byte alignment for trailing u64 on native, but not on compat */
+	case XFRM_MSG_NEWSA:
+	case XFRM_MSG_NEWPOLICY:
+	case XFRM_MSG_UPDSA:
+	case XFRM_MSG_UPDPOLICY:
+		memcpy(nlmsg_data(dst), nlmsg_data(src), compat_msg_min[type]);
+		break;
+	case XFRM_MSG_EXPIRE: {
+		const struct compat_xfrm_user_expire *src_ue = nlmsg_data(src);
+		struct xfrm_user_expire *dst_ue = nlmsg_data(dst);
+
+		/* compat_xfrm_user_expire has 4-byte smaller state */
+		memcpy(dst_ue, src_ue, sizeof(src_ue->state));
+		dst_ue->hard = src_ue->hard;
+		break;
+	}
+	case XFRM_MSG_ACQUIRE: {
+		const struct compat_xfrm_user_acquire *src_ua = nlmsg_data(src);
+		struct xfrm_user_acquire *dst_ua = nlmsg_data(dst);
+
+		memcpy(dst_ua, src_ua, offsetof(struct compat_xfrm_user_acquire, aalgos));
+		dst_ua->aalgos = src_ua->aalgos;
+		dst_ua->ealgos = src_ua->ealgos;
+		dst_ua->calgos = src_ua->calgos;
+		dst_ua->seq    = src_ua->seq;
+		break;
+	}
+	case XFRM_MSG_POLEXPIRE: {
+		const struct compat_xfrm_user_polexpire *src_upe = nlmsg_data(src);
+		struct xfrm_user_polexpire *dst_upe = nlmsg_data(dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_upe, src_upe, sizeof(src_upe->pol));
+		dst_upe->hard = src_upe->hard;
+		break;
+	}
+	case XFRM_MSG_ALLOCSPI: {
+		const struct compat_xfrm_userspi_info *src_usi = nlmsg_data(src);
+		struct xfrm_userspi_info *dst_usi = nlmsg_data(dst);
+
+		/* compat_xfrm_user_polexpire has 4-byte smaller state */
+		memcpy(dst_usi, src_usi, sizeof(src_usi->info));
+		dst_usi->min = src_usi->min;
+		dst_usi->max = src_usi->max;
+		break;
+	}
+	default:
+		NL_SET_ERR_MSG(extack, "Unsupported message type");
+		return -EOPNOTSUPP;
+	}
+	pos = dst->nlmsg_len;
+
+	if (maxtype) {
+		/* attirbutes are xfrm_spdattr_type_t, not xfrm_attr_type_t */
+		WARN_ON_ONCE(src->nlmsg_type != XFRM_MSG_NEWSPDINFO);
+
+		for (i = 1; i <= maxtype; i++) {
+			int err;
+
+			if (!attrs[i])
+				continue;
+
+			/* just copy - no need for translation */
+			err = xfrm_attr_cpy32(dst, &pos, attrs[i], size,
+					nla_len(attrs[i]), nla_len(attrs[i]));
+			if (err)
+				return err;
+		}
+		return 0;
+	}
+
+	for (i = 1; i < XFRMA_MAX + 1; i++) {
+		int err;
+
+		if (i == XFRMA_PAD)
+			continue;
+
+		if (!attrs[i])
+			continue;
+
+		err = xfrm_xlate32_attr(dst, attrs[i], &pos, size, extack);
+		if (err)
+			return err;
+	}
+
+	return 0;
+}
+
+static struct nlmsghdr *xfrm_user_rcv_msg_compat(const struct nlmsghdr *h32,
+			int maxtype, const struct nla_policy *policy,
+			struct netlink_ext_ack *extack)
+{
+	/* netlink_rcv_skb() checks if a message has full (struct nlmsghdr) */
+	u16 type = h32->nlmsg_type - XFRM_MSG_BASE;
+	struct nlattr *attrs[XFRMA_MAX+1];
+	struct nlmsghdr *h64;
+	size_t len;
+	int err;
+
+	BUILD_BUG_ON(ARRAY_SIZE(xfrm_msg_min) != ARRAY_SIZE(compat_msg_min));
+
+	if (type >= ARRAY_SIZE(xfrm_msg_min))
+		return ERR_PTR(-EINVAL);
+
+	/* Don't call parse: the message might have only nlmsg header */
+	if ((h32->nlmsg_type == XFRM_MSG_GETSA ||
+	     h32->nlmsg_type == XFRM_MSG_GETPOLICY) &&
+	    (h32->nlmsg_flags & NLM_F_DUMP))
+		return NULL;
+
+	err = nlmsg_parse_deprecated(h32, compat_msg_min[type], attrs,
+			maxtype ? : XFRMA_MAX, policy ? : compat_policy, extack);
+	if (err < 0)
+		return ERR_PTR(err);
+
+	len = xfrm_user_rcv_calculate_len64(h32, attrs, maxtype);
+	/* The message doesn't need translation */
+	if (len == nlmsg_len(h32))
+		return NULL;
+
+	len += NLMSG_HDRLEN;
+	h64 = kvmalloc(len, GFP_KERNEL);
+	if (!h64)
+		return ERR_PTR(-ENOMEM);
+
+	err = xfrm_xlate32(h64, h32, attrs, len, type, maxtype, extack);
+	if (err < 0) {
+		kvfree(h64);
+		return ERR_PTR(err);
+	}
+
+	return h64;
+}
+
+static int xfrm_user_policy_compat(u8 **pdata32, int optlen)
+{
+	struct compat_xfrm_userpolicy_info *p = (void *)*pdata32;
+	u8 *src_templates, *dst_templates;
+	u8 *data64;
+
+	if (optlen < sizeof(*p))
+		return -EINVAL;
+
+	data64 = kmalloc_track_caller(optlen + 4, GFP_USER | __GFP_NOWARN);
+	if (!data64)
+		return -ENOMEM;
+
+	memcpy(data64, *pdata32, sizeof(*p));
+	memset(data64 + sizeof(*p), 0, 4);
+
+	src_templates = *pdata32 + sizeof(*p);
+	dst_templates = data64 + sizeof(*p) + 4;
+	memcpy(dst_templates, src_templates, optlen - sizeof(*p));
+
+	kfree(*pdata32);
+	*pdata32 = data64;
+	return 0;
+}
+
+static struct xfrm_translator xfrm_translator = {
+	.owner				= THIS_MODULE,
+	.alloc_compat			= xfrm_alloc_compat,
+	.rcv_msg_compat			= xfrm_user_rcv_msg_compat,
+	.xlate_user_policy_sockptr	= xfrm_user_policy_compat,
+};
+
+static int __init xfrm_compat_init(void)
+{
+	return xfrm_register_translator(&xfrm_translator);
+}
+
+static void __exit xfrm_compat_exit(void)
+{
+	xfrm_unregister_translator(&xfrm_translator);
+}
+
+module_init(xfrm_compat_init);
+module_exit(xfrm_compat_exit);
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Dmitry Safonov");
+MODULE_DESCRIPTION("XFRM 32-bit compatibility layer");
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index c6b2c99..6973b8b 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -2294,6 +2294,66 @@
 	return is_alive;
 }
 
+#if IS_ENABLED(CONFIG_XFRM_USER_COMPAT)
+static DEFINE_SPINLOCK(xfrm_translator_lock);
+static struct xfrm_translator __rcu *xfrm_translator;
+
+struct xfrm_translator *xfrm_get_translator(void)
+{
+	struct xfrm_translator *xtr;
+
+	rcu_read_lock();
+	xtr = rcu_dereference(xfrm_translator);
+	if (unlikely(!xtr))
+		goto out;
+	if (!try_module_get(xtr->owner))
+		xtr = NULL;
+out:
+	rcu_read_unlock();
+	return xtr;
+}
+EXPORT_SYMBOL_GPL(xfrm_get_translator);
+
+void xfrm_put_translator(struct xfrm_translator *xtr)
+{
+	module_put(xtr->owner);
+}
+EXPORT_SYMBOL_GPL(xfrm_put_translator);
+
+int xfrm_register_translator(struct xfrm_translator *xtr)
+{
+	int err = 0;
+
+	spin_lock_bh(&xfrm_translator_lock);
+	if (unlikely(xfrm_translator != NULL))
+		err = -EEXIST;
+	else
+		rcu_assign_pointer(xfrm_translator, xtr);
+	spin_unlock_bh(&xfrm_translator_lock);
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(xfrm_register_translator);
+
+int xfrm_unregister_translator(struct xfrm_translator *xtr)
+{
+	int err = 0;
+
+	spin_lock_bh(&xfrm_translator_lock);
+	if (likely(xfrm_translator != NULL)) {
+		if (rcu_access_pointer(xfrm_translator) != xtr)
+			err = -EINVAL;
+		else
+			RCU_INIT_POINTER(xfrm_translator, NULL);
+	}
+	spin_unlock_bh(&xfrm_translator_lock);
+	synchronize_rcu();
+
+	return err;
+}
+EXPORT_SYMBOL_GPL(xfrm_unregister_translator);
+#endif
+
 int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen)
 {
 	int err;
@@ -2301,9 +2361,6 @@
 	struct xfrm_mgr *km;
 	struct xfrm_policy *pol = NULL;
 
-	if (in_compat_syscall())
-		return -EOPNOTSUPP;
-
 	if (!optval && !optlen) {
 		xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL);
 		xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL);
@@ -2318,6 +2375,25 @@
 	if (IS_ERR(data))
 		return PTR_ERR(data);
 
+	/* Use the 64-bit / untranslated format on Android, even for compat */
+	if (!IS_ENABLED(CONFIG_ANDROID) || IS_ENABLED(CONFIG_XFRM_USER_COMPAT)) {
+		if (in_compat_syscall()) {
+			struct xfrm_translator *xtr = xfrm_get_translator();
+
+			if (!xtr) {
+				kfree(data);
+				return -EOPNOTSUPP;
+			}
+
+			err = xtr->xlate_user_policy_sockptr(&data, optlen);
+			xfrm_put_translator(xtr);
+			if (err) {
+				kfree(data);
+				return err;
+			}
+		}
+	}
+
 	err = -EINVAL;
 	rcu_read_lock();
 	list_for_each_entry_rcu(km, &xfrm_km_list, list) {
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 0cee2d3..40ea3d55 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -975,6 +975,7 @@
 	struct xfrm_dump_info *sp = ptr;
 	struct sk_buff *in_skb = sp->in_skb;
 	struct sk_buff *skb = sp->out_skb;
+	struct xfrm_translator *xtr;
 	struct xfrm_usersa_info *p;
 	struct nlmsghdr *nlh;
 	int err;
@@ -992,6 +993,18 @@
 		return err;
 	}
 	nlmsg_end(skb, nlh);
+
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlh);
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			nlmsg_cancel(skb, nlh);
+			return err;
+		}
+	}
+
 	return 0;
 }
 
@@ -1006,7 +1019,6 @@
 	return 0;
 }
 
-static const struct nla_policy xfrma_policy[XFRMA_MAX+1];
 static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
 {
 	struct net *net = sock_net(skb->sk);
@@ -1083,12 +1095,24 @@
 				       u32 pid, unsigned int group)
 {
 	struct sock *nlsk = rcu_dereference(net->xfrm.nlsk);
+	struct xfrm_translator *xtr;
 
 	if (!nlsk) {
 		kfree_skb(skb);
 		return -EPIPE;
 	}
 
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		int err = xtr->alloc_compat(skb, nlmsg_hdr(skb));
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			kfree_skb(skb);
+			return err;
+		}
+	}
+
 	return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC);
 }
 
@@ -1308,6 +1332,7 @@
 	struct net *net = sock_net(skb->sk);
 	struct xfrm_state *x;
 	struct xfrm_userspi_info *p;
+	struct xfrm_translator *xtr;
 	struct sk_buff *resp_skb;
 	xfrm_address_t *daddr;
 	int family;
@@ -1358,6 +1383,17 @@
 		goto out;
 	}
 
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlmsg_hdr(skb));
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			kfree_skb(resp_skb);
+			goto out;
+		}
+	}
+
 	err = nlmsg_unicast(net->xfrm.nlsk, resp_skb, NETLINK_CB(skb).portid);
 
 out:
@@ -1764,6 +1800,7 @@
 	struct xfrm_userpolicy_info *p;
 	struct sk_buff *in_skb = sp->in_skb;
 	struct sk_buff *skb = sp->out_skb;
+	struct xfrm_translator *xtr;
 	struct nlmsghdr *nlh;
 	int err;
 
@@ -1788,6 +1825,18 @@
 		return err;
 	}
 	nlmsg_end(skb, nlh);
+
+	xtr = xfrm_get_translator();
+	if (xtr) {
+		err = xtr->alloc_compat(skb, nlh);
+
+		xfrm_put_translator(xtr);
+		if (err) {
+			nlmsg_cancel(skb, nlh);
+			return err;
+		}
+	}
+
 	return 0;
 }
 
@@ -2533,7 +2582,7 @@
 
 #define XMSGSIZE(type) sizeof(struct type)
 
-static const int xfrm_msg_min[XFRM_NR_MSGTYPES] = {
+const int xfrm_msg_min[XFRM_NR_MSGTYPES] = {
 	[XFRM_MSG_NEWSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_info),
 	[XFRM_MSG_DELSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
 	[XFRM_MSG_GETSA       - XFRM_MSG_BASE] = XMSGSIZE(xfrm_usersa_id),
@@ -2556,10 +2605,11 @@
 	[XFRM_MSG_NEWSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
 	[XFRM_MSG_GETSPDINFO  - XFRM_MSG_BASE] = sizeof(u32),
 };
+EXPORT_SYMBOL_GPL(xfrm_msg_min);
 
 #undef XMSGSIZE
 
-static const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
+const struct nla_policy xfrma_policy[XFRMA_MAX+1] = {
 	[XFRMA_SA]		= { .len = sizeof(struct xfrm_usersa_info)},
 	[XFRMA_POLICY]		= { .len = sizeof(struct xfrm_userpolicy_info)},
 	[XFRMA_LASTUSED]	= { .type = NLA_U64},
@@ -2591,6 +2641,7 @@
 	[XFRMA_SET_MARK_MASK]	= { .type = NLA_U32 },
 	[XFRMA_IF_ID]		= { .type = NLA_U32 },
 };
+EXPORT_SYMBOL_GPL(xfrma_policy);
 
 static const struct nla_policy xfrma_spd_policy[XFRMA_SPD_MAX+1] = {
 	[XFRMA_SPD_IPV4_HTHRESH] = { .len = sizeof(struct xfrmu_spdhthresh) },
@@ -2640,11 +2691,9 @@
 	struct net *net = sock_net(skb->sk);
 	struct nlattr *attrs[XFRMA_MAX+1];
 	const struct xfrm_link *link;
+	struct nlmsghdr *nlh64 = NULL;
 	int type, err;
 
-	if (in_compat_syscall())
-		return -EOPNOTSUPP;
-
 	type = nlh->nlmsg_type;
 	if (type > XFRM_MSG_MAX)
 		return -EINVAL;
@@ -2656,32 +2705,68 @@
 	if (!netlink_net_capable(skb, CAP_NET_ADMIN))
 		return -EPERM;
 
+	/* Use the 64-bit / untranslated format on Android, even for compat */
+	if (!IS_ENABLED(CONFIG_ANDROID) || IS_ENABLED(CONFIG_XFRM_USER_COMPAT)) {
+		if (in_compat_syscall()) {
+			struct xfrm_translator *xtr = xfrm_get_translator();
+
+			if (!xtr)
+				return -EOPNOTSUPP;
+
+			nlh64 = xtr->rcv_msg_compat(nlh, link->nla_max,
+						    link->nla_pol, extack);
+			xfrm_put_translator(xtr);
+			if (IS_ERR(nlh64))
+				return PTR_ERR(nlh64);
+			if (nlh64)
+				nlh = nlh64;
+		}
+	}
+
 	if ((type == (XFRM_MSG_GETSA - XFRM_MSG_BASE) ||
 	     type == (XFRM_MSG_GETPOLICY - XFRM_MSG_BASE)) &&
 	    (nlh->nlmsg_flags & NLM_F_DUMP)) {
-		if (link->dump == NULL)
-			return -EINVAL;
+		struct netlink_dump_control c = {
+			.start = link->start,
+			.dump = link->dump,
+			.done = link->done,
+		};
 
-		{
-			struct netlink_dump_control c = {
-				.start = link->start,
-				.dump = link->dump,
-				.done = link->done,
-			};
-			return netlink_dump_start(net->xfrm.nlsk, skb, nlh, &c);
+		if (link->dump == NULL) {
+			err = -EINVAL;
+			goto err;
 		}
+
+		err = netlink_dump_start(net->xfrm.nlsk, skb, nlh, &c);
+		goto err;
 	}
 
 	err = nlmsg_parse_deprecated(nlh, xfrm_msg_min[type], attrs,
 				     link->nla_max ? : XFRMA_MAX,
 				     link->nla_pol ? : xfrma_policy, extack);
 	if (err < 0)
-		return err;
+		goto err;
 
-	if (link->doit == NULL)
-		return -EINVAL;
+	if (link->doit == NULL) {
+		err = -EINVAL;
+		goto err;
+	}
 
-	return link->doit(skb, nlh, attrs);
+	err = link->doit(skb, nlh, attrs);
+
+	/* We need to free skb allocated in xfrm_alloc_compat() before
+	 * returning from this function, because consume_skb() won't take
+	 * care of frag_list since netlink destructor sets
+	 * sbk->head to NULL. (see netlink_skb_destructor())
+	 */
+	if (skb_has_frag_list(skb)) {
+		kfree_skb(skb_shinfo(skb)->frag_list);
+		skb_shinfo(skb)->frag_list = NULL;
+	}
+
+err:
+	kvfree(nlh64);
+	return err;
 }
 
 static void xfrm_netlink_rcv(struct sk_buff *skb)
diff --git a/samples/hw_breakpoint/data_breakpoint.c b/samples/hw_breakpoint/data_breakpoint.c
index c585047..418c46f 100644
--- a/samples/hw_breakpoint/data_breakpoint.c
+++ b/samples/hw_breakpoint/data_breakpoint.c
@@ -23,7 +23,7 @@
 
 struct perf_event * __percpu *sample_hbp;
 
-static char ksym_name[KSYM_NAME_LEN] = "pid_max";
+static char ksym_name[KSYM_NAME_LEN] = "jiffies";
 module_param_string(ksym, ksym_name, KSYM_NAME_LEN, S_IRUGO);
 MODULE_PARM_DESC(ksym, "Kernel symbol to monitor; this module will report any"
 			" write operations on the kernel symbol");
@@ -41,11 +41,15 @@
 {
 	int ret;
 	struct perf_event_attr attr;
+	void *addr = __symbol_get(ksym_name);
+
+	if (!addr)
+		return -ENXIO;
 
 	hw_breakpoint_init(&attr);
-	attr.bp_addr = kallsyms_lookup_name(ksym_name);
+	attr.bp_addr = (unsigned long)addr;
 	attr.bp_len = HW_BREAKPOINT_LEN_4;
-	attr.bp_type = HW_BREAKPOINT_W | HW_BREAKPOINT_R;
+	attr.bp_type = HW_BREAKPOINT_W;
 
 	sample_hbp = register_wide_hw_breakpoint(&attr, sample_hbp_handler, NULL);
 	if (IS_ERR((void __force *)sample_hbp)) {
@@ -66,6 +70,7 @@
 static void __exit hw_break_module_exit(void)
 {
 	unregister_wide_hw_breakpoint(sample_hbp);
+	symbol_put(ksym_name);
 	printk(KERN_INFO "HW Breakpoint for %s write uninstalled\n", ksym_name);
 }
 
diff --git a/scripts/Kconfig.include b/scripts/Kconfig.include
index 77a69ba..496d11c 100644
--- a/scripts/Kconfig.include
+++ b/scripts/Kconfig.include
@@ -31,6 +31,10 @@
 # Return y if the linker supports <flag>, n otherwise
 ld-option = $(success,$(LD) -v $(1))
 
+# $(as-instr,<instr>)
+# Return y if the assembler supports <instr>, n otherwise
+as-instr = $(success,printf "%b\n" "$(1)" | $(CC) $(CLANG_FLAGS) -c -x assembler -o /dev/null -)
+
 # check if $(CC) and $(LD) exist
 $(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
 $(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)
diff --git a/scripts/Makefile b/scripts/Makefile
index b4b7d8b..b12691a 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -36,6 +36,8 @@
 # The following hostprogs-y programs are only build on demand
 hostprogs-y += unifdef
 
+extra-$(CONFIG_LTO_CLANG)   += module-lto.lds
+
 subdir-$(CONFIG_GCC_PLUGINS) += gcc-plugins
 subdir-$(CONFIG_MODVERSIONS) += genksyms
 subdir-$(CONFIG_SECURITY_SELINUX) += selinux
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 1261f75..f6e5463 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -93,7 +93,7 @@
 # ---------------------------------------------------------------------------
 
 quiet_cmd_cc_s_c = CC $(quiet_modtag)  $@
-      cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
+      cmd_cc_s_c = $(CC) $(filter-out $(DEBUG_CFLAGS) $(CC_FLAGS_LTO), $(c_flags)) $(DISABLE_LTO) -fverbose-asm -S -o $@ $<
 
 $(obj)/%.s: $(src)/%.c FORCE
 	$(call if_changed_dep,cc_s_c)
@@ -148,6 +148,15 @@
 #   the actual value of the checksum generated by genksyms
 # o remove .tmp_<file>.o to <file>.o
 
+ifdef CONFIG_LTO_CLANG
+# Generate .o.symversions files for each .o with exported symbols, and link these
+# to the kernel and/or modules at the end.
+cmd_modversions_c =								\
+	if $(NM) $@ | grep -q __ksymtab; then				\
+		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
+		    > $@.symversions;						\
+	fi;
+else
 cmd_modversions_c =								\
 	if $(OBJDUMP) -h $@ | grep -q __ksymtab; then				\
 		$(call cmd_gensymtypes_c,$(KBUILD_SYMTYPES),$(@:.o=.symtypes))	\
@@ -159,6 +168,7 @@
 		rm -f $(@D)/.tmp_$(@F:.o=.ver);					\
 	fi
 endif
+endif
 
 ifdef CONFIG_FTRACE_MCOUNT_RECORD
 ifndef CC_USING_RECORD_MCOUNT
@@ -167,6 +177,12 @@
 ifeq ("$(origin RECORDMCOUNT_WARN)", "command line")
   RECORDMCOUNT_FLAGS = -w
 endif
+
+ifdef CONFIG_LTO_CLANG
+# With LTO, we postpone running recordmcount until after the LTO link step, so
+# let's export the parameters for the link script.
+export RECORDMCOUNT_FLAGS
+else
 # Due to recursion, we must skip empty.o.
 # The empty.o file is created in the make process in order to determine
 # the target endianness and word size. It is made before all other C
@@ -175,6 +191,8 @@
 	if [ $(@) != "scripts/mod/empty.o" ]; then	\
 		$(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) "$(@)";	\
 	fi;
+endif
+
 recordmcount_source := $(srctree)/scripts/recordmcount.c \
 		    $(srctree)/scripts/recordmcount.h
 else
@@ -184,10 +202,13 @@
 	"$(OBJDUMP)" "$(OBJCOPY)" "$(CC) $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS)" \
 	"$(LD) $(KBUILD_LDFLAGS)" "$(NM)" "$(RM)" "$(MV)" \
 	"$(if $(part-of-module),1,0)" "$(@)";
+
 recordmcount_source := $(srctree)/scripts/recordmcount.pl
 endif # BUILD_C_RECORDMCOUNT
+ifndef CONFIG_LTO_CLANG
 cmd_record_mcount = $(if $(findstring $(strip $(CC_FLAGS_FTRACE)),$(_c_flags)),	\
 	$(sub_cmd_record_mcount))
+endif # CONFIG_LTO_CLANG
 endif # CC_USING_RECORD_MCOUNT
 endif # CONFIG_FTRACE_MCOUNT_RECORD
 
@@ -371,6 +392,18 @@
 # To build objects in subdirs, we need to descend into the directories
 $(sort $(subdir-obj-y)): $(subdir-ym) ;
 
+# combine symversions for later processing
+quiet_cmd_update_lto_symversions = SYMVER  $@
+ifeq ($(CONFIG_LTO_CLANG) $(CONFIG_MODVERSIONS),y y)
+      cmd_update_lto_symversions =					\
+	rm -f $@.symversions						\
+	$(foreach n, $(filter-out FORCE,$^),				\
+		$(if $(wildcard $(n).symversions),			\
+			; cat $(n).symversions >> $@.symversions))
+else
+      cmd_update_lto_symversions = echo >/dev/null
+endif
+
 #
 # Rule to compile a set of .o files into one .a file (without symbol table)
 #
@@ -379,8 +412,11 @@
 quiet_cmd_ar_builtin = AR      $@
       cmd_ar_builtin = rm -f $@; $(AR) cDPrST $@ $(real-prereqs)
 
+quiet_cmd_ar_and_symver = AR      $@
+      cmd_ar_and_symver = $(cmd_update_lto_symversions); $(cmd_ar_builtin)
+
 $(builtin-target): $(real-obj-y) FORCE
-	$(call if_changed,ar_builtin)
+	$(call if_changed,ar_and_symver)
 
 targets += $(builtin-target)
 endif # builtin-target
@@ -400,16 +436,26 @@
 #
 ifdef lib-target
 
+quiet_cmd_ar_lib = AR      $@
+      cmd_ar_lib = $(cmd_update_lto_symversions); $(cmd_ar)
+
 $(lib-target): $(lib-y) FORCE
-	$(call if_changed,ar)
+	$(call if_changed,ar_lib)
 
 targets += $(lib-target)
 
 dummy-object = $(obj)/.lib_exports.o
 ksyms-lds = $(dot-target).lds
 
+ifdef CONFIG_LTO_CLANG
+# Objdump doesn't understand LLVM IR. Use llvm-nm to dump symbols.
+dump_export_list = $(NM)
+else
+dump_export_list = $(OBJDUMP) -h
+endif
+
 quiet_cmd_export_list = EXPORTS $@
-cmd_export_list = $(OBJDUMP) -h $< | \
+cmd_export_list = $(dump_export_list) $< | \
 	sed -ne '/___ksymtab/s/.*+\([^ ]*\).*/EXTERN(\1)/p' >$(ksyms-lds);\
 	rm -f $(dummy-object);\
 	echo | $(CC) $(a_flags) -c -o $(dummy-object) -x assembler -;\
@@ -427,8 +473,16 @@
 # Do not replace $(filter %.o,^) with $(real-prereqs). When a single object
 # module is turned into a multi object module, $^ will contain header file
 # dependencies recorded in the .*.cmd file.
+ifdef CONFIG_LTO_CLANG
+quiet_cmd_link_multi-m = AR [M]  $@
+cmd_link_multi-m =						\
+	$(cmd_update_lto_symversions);				\
+	rm -f $@; 						\
+	$(AR) rcsTP$(KBUILD_ARFLAGS) $@ $(filter %.o,$^)
+else
 quiet_cmd_link_multi-m = LD [M]  $@
       cmd_link_multi-m = $(LD) $(ld_flags) -r -o $@ $(filter %.o,$^)
+endif
 
 $(multi-used-m): FORCE
 	$(call if_changed,link_multi-m)
diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
index a6d0044..8319a40 100644
--- a/scripts/Makefile.lib
+++ b/scripts/Makefile.lib
@@ -334,7 +334,8 @@
       cmd_lzo = { cat $(real-prereqs) | $(KLZOP) -9; $(size_append); } > $@
 
 quiet_cmd_lz4 = LZ4     $@
-      cmd_lz4 = { cat $(real-prereqs) | $(LZ4) -l -c1 stdin stdout; \
+      cmd_lz4 = { cat $(real-prereqs) | \
+                  lz4 -l -12 --favor-decSpeed stdin stdout; \
                   $(size_append); } > $@
 
 # U-Boot mkimage
diff --git a/scripts/Makefile.modfinal b/scripts/Makefile.modfinal
index 411c1e60..216a3f8 100644
--- a/scripts/Makefile.modfinal
+++ b/scripts/Makefile.modfinal
@@ -6,6 +6,7 @@
 PHONY := __modfinal
 __modfinal:
 
+include $(objtree)/include/config/auto.conf
 include $(srctree)/scripts/Kbuild.include
 
 # for c_flags
@@ -30,12 +31,28 @@
 ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink)
 
 quiet_cmd_ld_ko_o = LD [M]  $@
+
+ifdef CONFIG_LTO_CLANG
+      cmd_ld_ko_o = 							\
+	$(LD) -r $(LDFLAGS)                                 		\
+		 $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) 		\
+		 $(addprefix -T , $(KBUILD_LDS_MODULE))			\
+		 $(shell [ -s $(@:.ko=.o.symversions) ] &&		\
+			echo -T $(@:.ko=.o.symversions))  		\
+		 -o $@ --whole-archive $(filter %.o, $^);		\
+	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
+
+  ifdef CONFIG_FTRACE_MCOUNT_RECORD
+      cmd_ld_ko_o += ; $(objtree)/scripts/recordmcount $(RECORDMCOUNT_FLAGS) $@
+  endif
+else
       cmd_ld_ko_o =                                                     \
 	$(LD) -r $(KBUILD_LDFLAGS)					\
 		$(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE)		\
 		$(addprefix -T , $(KBUILD_LDS_MODULE))			\
 		-o $@ $(filter %.o, $^);				\
 	$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true)
+endif
 
 $(modules): %.ko: %.o %.mod.o $(KBUILD_LDS_MODULE) FORCE
 	+$(call if_changed,ld_ko_o)
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost
index 952fff4..42688ab 100644
--- a/scripts/Makefile.modpost
+++ b/scripts/Makefile.modpost
@@ -84,12 +84,32 @@
 # find all modules listed in modules.order
 modules := $(sort $(shell cat $(MODORDER)))
 
+# With CONFIG_LTO_CLANG, .o files might be LLVM IR, so we need to link them
+# into actual objects before passing them to modpost
+modpost-ext = $(if $(CONFIG_LTO_CLANG),.lto,)
+
+ifdef CONFIG_LTO_CLANG
+quiet_cmd_cc_lto_link_modules = LTO [M] $@
+cmd_cc_lto_link_modules =						\
+	$(LD) $(ld_flags) -r -o $(@)					\
+		$(shell [ -s $(@:$(modpost-ext).o=.o.symversions) ] &&	\
+			echo -T $(@:$(modpost-ext).o=.o.symversions))	\
+		--whole-archive $(filter-out FORCE,$^)
+
+$(modules:.ko=$(modpost-ext).o): %$(modpost-ext).o: %.o
+	$(call if_changed,cc_lto_link_modules)
+
+PHONY += FORCE
+FORCE:
+
+endif
+
 # Read out modules.order instead of expanding $(modules) to pass in modpost.
 # Otherwise, allmodconfig would fail with "Argument list too long".
 quiet_cmd_modpost = MODPOST $(words $(modules)) modules
-      cmd_modpost = sed 's/ko$$/o/' $(MODORDER) | $(MODPOST)
+      cmd_modpost = sed 's/\.ko$$/$(modpost-ext)\.o/' $(MODORDER) | $(MODPOST)
 
-__modpost:
+__modpost: $(modules:.ko=$(modpost-ext).o)
 	@$(kecho) '  Building modules, stage 2.'
 	$(call cmd,modpost)
 ifneq ($(KBUILD_MODPOST_NOFINAL),1)
diff --git a/scripts/Makefile.ubsan b/scripts/Makefile.ubsan
index 019771b..5b15bc4 100644
--- a/scripts/Makefile.ubsan
+++ b/scripts/Makefile.ubsan
@@ -1,16 +1,26 @@
 # SPDX-License-Identifier: GPL-2.0
 ifdef CONFIG_UBSAN
+
+ifdef CONFIG_UBSAN_ALIGNMENT
+      CFLAGS_UBSAN += $(call cc-option, -fsanitize=alignment)
+endif
+
+ifdef CONFIG_UBSAN_BOUNDS
+      CFLAGS_UBSAN += $(call cc-option, -fsanitize=bounds)
+endif
+
+ifdef CONFIG_UBSAN_MISC
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=shift)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=integer-divide-by-zero)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=unreachable)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=signed-integer-overflow)
-      CFLAGS_UBSAN += $(call cc-option, -fsanitize=bounds)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=object-size)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=bool)
       CFLAGS_UBSAN += $(call cc-option, -fsanitize=enum)
+endif
 
-ifdef CONFIG_UBSAN_ALIGNMENT
-      CFLAGS_UBSAN += $(call cc-option, -fsanitize=alignment)
+ifdef CONFIG_UBSAN_TRAP
+      CFLAGS_UBSAN += $(call cc-option, -fsanitize-undefined-trap-on-error)
 endif
 
       # -fsanitize=* options makes GCC less smart than usual and
diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh
index a904bf1..d8f6f9c 100755
--- a/scripts/adjust_autoksyms.sh
+++ b/scripts/adjust_autoksyms.sh
@@ -1,14 +1,13 @@
 #!/bin/sh
 # SPDX-License-Identifier: GPL-2.0-only
 
-# Script to create/update include/generated/autoksyms.h and dependency files
+# Script to update include/generated/autoksyms.h and dependency files
 #
 # Copyright:	(C) 2016  Linaro Limited
 # Created by:	Nicolas Pitre, January 2016
 #
 
-# Create/update the include/generated/autoksyms.h file from the list
-# of all module's needed symbols as recorded on the second line of *.mod files.
+# Update the include/generated/autoksyms.h file.
 #
 # For each symbol being added or removed, the corresponding dependency
 # file's timestamp is updated to force a rebuild of the affected source
@@ -35,26 +34,8 @@
 	;;
 esac
 
-# We need access to CONFIG_ symbols
-. include/config/auto.conf
-
-# Generate a new ksym list file with symbols needed by the current
-# set of modules.
-cat > "$new_ksyms_file" << EOT
-/*
- * Automatically generated file; DO NOT EDIT.
- */
-
-EOT
-sed 's/ko$/mod/' modules.order |
-xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
-sort -u |
-sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file"
-
-# Special case for modversions (see modpost.c)
-if [ -n "$CONFIG_MODVERSIONS" ]; then
-	echo "#define __KSYM_module_layout 1" >> "$new_ksyms_file"
-fi
+# Generate a new symbol list file
+$CONFIG_SHELL $srctree/scripts/gen_autoksyms.sh "$new_ksyms_file"
 
 # Extract changes between old and new list and touch corresponding
 # dependency files.
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a358af9..978cfc9 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -51,7 +51,7 @@
 my @ignore = ();
 my $help = 0;
 my $configuration_file = ".checkpatch.conf";
-my $max_line_length = 80;
+my $max_line_length = 100;
 my $ignore_perl_version = 0;
 my $minimum_perl_version = 5.10.0;
 my $min_conf_desc_length = 4;
@@ -59,11 +59,12 @@
 my $codespell = 0;
 my $codespellfile = "/usr/share/codespell/dictionary.txt";
 my $conststructsfile = "$D/const_structs.checkpatch";
-my $typedefsfile = "";
+my $typedefsfile;
 my $color = "auto";
 my $allow_c99_comments = 1; # Can be overridden by --ignore C99_COMMENT_TOLERANCE
 # git output parsing needs US English output, so first set backtick child process LANGUAGE
 my $git_command ='export LANGUAGE=en_US.UTF-8; git';
+my $tabsize = 8;
 
 sub help {
 	my ($exitcode) = @_;
@@ -96,8 +97,11 @@
   --types TYPE(,TYPE2...)    show only these comma separated message types
   --ignore TYPE(,TYPE2...)   ignore various comma separated message types
   --show-types               show the specific message type in the output
-  --max-line-length=n        set the maximum line length, if exceeded, warn
+  --max-line-length=n        set the maximum line length, (default $max_line_length)
+                             if exceeded, warn on patches
+                             requires --strict for use with --file
   --min-conf-desc-length=n   set the min description length, if shorter, warn
+  --tab-size=n               set the number of spaces for tab (default $tabsize)
   --root=PATH                PATH to the kernel tree root
   --no-summary               suppress the per-file summary
   --mailback                 only produce a report in case of warnings/errors
@@ -215,6 +219,7 @@
 	'list-types!'	=> \$list_types,
 	'max-line-length=i' => \$max_line_length,
 	'min-conf-desc-length=i' => \$min_conf_desc_length,
+	'tab-size=i'	=> \$tabsize,
 	'root=s'	=> \$root,
 	'summary!'	=> \$summary,
 	'mailback!'	=> \$mailback,
@@ -241,6 +246,8 @@
 $fix = 1 if ($fix_inplace);
 $check_orig = $check;
 
+die "$P: --git cannot be used with --file or --fix\n" if ($git && ($file || $fix));
+
 my $exit = 0;
 
 my $perl_version_ok = 1;
@@ -264,9 +271,12 @@
 } elsif ($color =~ /^auto$/i) {
 	$color = (-t STDOUT);
 } else {
-	die "Invalid color mode: $color\n";
+	die "$P: Invalid color mode: $color\n";
 }
 
+# skip TAB size 1 to avoid additional checks on $tabsize - 1
+die "$P: Invalid TAB size: $tabsize\n" if ($tabsize < 2);
+
 sub hash_save_array_words {
 	my ($hashRef, $arrayRef) = @_;
 
@@ -473,7 +483,7 @@
 		(?:kv|k|v)[czm]alloc(?:_node|_array)? |
 		kstrdup(?:_const)? |
 		kmemdup(?:_nul)?) |
-	(?:\w+)?alloc_skb(?:ip_align)? |
+	(?:\w+)?alloc_skb(?:_ip_align)? |
 				# dev_alloc_skb/netdev_alloc_skb, et al
 	dma_alloc_coherent
 )};
@@ -578,6 +588,8 @@
 	["__ATTR", 2],
 );
 
+my $word_pattern = '\b[A-Z]?[a-z]{2,}\b';
+
 #Create a search pattern for all these functions to speed up a loop below
 our $mode_perms_search = "";
 foreach my $entry (@mode_permission_funcs) {
@@ -746,7 +758,7 @@
 				next;
 			}
 
-			$$wordsRef .= '|' if ($$wordsRef ne "");
+			$$wordsRef .= '|' if (defined $$wordsRef);
 			$$wordsRef .= $line;
 		}
 		close($file);
@@ -756,16 +768,18 @@
 	return 0;
 }
 
-my $const_structs = "";
-read_words(\$const_structs, $conststructsfile)
-    or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
+my $const_structs;
+if (show_type("CONST_STRUCT")) {
+	read_words(\$const_structs, $conststructsfile)
+	    or warn "No structs that should be const will be found - file '$conststructsfile': $!\n";
+}
 
-my $typeOtherTypedefs = "";
-if (length($typedefsfile)) {
+if (defined($typedefsfile)) {
+	my $typeOtherTypedefs;
 	read_words(\$typeOtherTypedefs, $typedefsfile)
 	    or warn "No additional types will be considered - file '$typedefsfile': $!\n";
+	$typeTypedefs .= '|' . $typeOtherTypedefs if (defined $typeOtherTypedefs);
 }
-$typeTypedefs .= '|' . $typeOtherTypedefs if ($typeOtherTypedefs ne "");
 
 sub build_types {
 	my $mods = "(?x:  \n" . join("|\n  ", (@modifierList, @modifierListFile)) . "\n)";
@@ -804,12 +818,12 @@
 		  }x;
 	$Type	= qr{
 			$NonptrType
-			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
+			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+){0,4}
 			(?:\s+$Inline|\s+$Modifier)*
 		  }x;
 	$TypeMisordered	= qr{
 			$NonptrTypeMisordered
-			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+)?
+			(?:(?:\s|\*|\[\])+\s*const|(?:\s|\*\s*(?:const\s*)?|\[\])+|(?:\s*\[\s*\])+){0,4}
 			(?:\s+$Inline|\s+$Modifier)*
 		  }x;
 	$Declare	= qr{(?:$Storage\s+(?:$Inline\s+)?)?$Type};
@@ -830,7 +844,6 @@
 our $declaration_macros = qr{(?x:
 	(?:$Storage\s+)?(?:[A-Z_][A-Z0-9]*_){0,2}(?:DEFINE|DECLARE)(?:_[A-Z0-9]+){1,6}\s*\(|
 	(?:$Storage\s+)?[HLP]?LIST_HEAD\s*\(|
-	(?:$Storage\s+)?${Type}\s+uninitialized_var\s*\(|
 	(?:SKCIPHER_REQUEST|SHASH_DESC|AHASH_REQUEST)_ON_STACK\s*\(
 )};
 
@@ -874,14 +887,18 @@
 	}
 }
 
+our %maintained_status = ();
+
 sub is_maintained_obsolete {
 	my ($filename) = @_;
 
 	return 0 if (!$tree || !(-e "$root/scripts/get_maintainer.pl"));
 
-	my $status = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
+	if (!exists($maintained_status{$filename})) {
+		$maintained_status{$filename} = `perl $root/scripts/get_maintainer.pl --status --nom --nol --nogit --nogit-fallback -f $filename 2>&1`;
+	}
 
-	return $status =~ /obsolete/i;
+	return $maintained_status{$filename} =~ /obsolete/i;
 }
 
 sub is_SPDX_License_valid {
@@ -1048,6 +1065,7 @@
 	while (<$FILE>) {
 		chomp;
 		push(@rawlines, $_);
+		$vname = qq("$1") if ($filename eq '-' && $_ =~ m/^Subject:\s+(.+)/i);
 	}
 	close($FILE);
 
@@ -1114,6 +1132,7 @@
 	my ($formatted_email) = @_;
 
 	my $name = "";
+	my $name_comment = "";
 	my $address = "";
 	my $comment = "";
 
@@ -1146,6 +1165,10 @@
 
 	$name = trim($name);
 	$name =~ s/^\"|\"$//g;
+	$name =~ s/(\s*\([^\)]+\))\s*//;
+	if (defined($1)) {
+		$name_comment = trim($1);
+	}
 	$address = trim($address);
 	$address =~ s/^\<|\>$//g;
 
@@ -1154,7 +1177,7 @@
 		$name = "\"$name\"";
 	}
 
-	return ($name, $address, $comment);
+	return ($name, $name_comment, $address, $comment);
 }
 
 sub format_email {
@@ -1180,6 +1203,23 @@
 	return $formatted_email;
 }
 
+sub reformat_email {
+	my ($email) = @_;
+
+	my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
+	return format_email($email_name, $email_address);
+}
+
+sub same_email_addresses {
+	my ($email1, $email2) = @_;
+
+	my ($email1_name, $name1_comment, $email1_address, $comment1) = parse_email($email1);
+	my ($email2_name, $name2_comment, $email2_address, $comment2) = parse_email($email2);
+
+	return $email1_name eq $email2_name &&
+	       $email1_address eq $email2_address;
+}
+
 sub which {
 	my ($bin) = @_;
 
@@ -1213,7 +1253,7 @@
 		if ($c eq "\t") {
 			$res .= ' ';
 			$n++;
-			for (; ($n % 8) != 0; $n++) {
+			for (; ($n % $tabsize) != 0; $n++) {
 				$res .= ' ';
 			}
 			next;
@@ -1642,8 +1682,16 @@
 sub ctx_locate_comment {
 	my ($first_line, $end_line) = @_;
 
+	# If c99 comment on the current line, or the line before or after
+	my ($current_comment) = ($rawlines[$end_line - 1] =~ m@^\+.*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+	($current_comment) = ($rawlines[$end_line - 2] =~ m@^[\+ ].*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+	($current_comment) = ($rawlines[$end_line] =~ m@^[\+ ].*(//.*$)@);
+	return $current_comment if (defined $current_comment);
+
 	# Catch a comment on the end of the line itself.
-	my ($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
+	($current_comment) = ($rawlines[$end_line - 1] =~ m@.*(/\*.*\*/)\s*(?:\\\s*)?$@);
 	return $current_comment if (defined $current_comment);
 
 	# Look through the context and try and figure out if there is a
@@ -2226,7 +2274,7 @@
 sub tabify {
 	my ($leading) = @_;
 
-	my $source_indent = 8;
+	my $source_indent = $tabsize;
 	my $max_spaces_before_tab = $source_indent - 1;
 	my $spaces_to_tab = " " x $source_indent;
 
@@ -2268,6 +2316,19 @@
 	return length(expand_tabs(substr($line, 0, $last_openparen))) + 1;
 }
 
+sub get_raw_comment {
+	my ($line, $rawline) = @_;
+	my $comment = '';
+
+	for my $i (0 .. (length($line) - 1)) {
+		if (substr($line, $i, 1) eq "$;") {
+			$comment .= substr($rawline, $i, 1);
+		}
+	}
+
+	return $comment;
+}
+
 sub process {
 	my $filename = shift;
 
@@ -2290,6 +2351,7 @@
 	my $is_binding_patch = -1;
 	my $in_header_lines = $file ? 0 : 1;
 	my $in_commit_log = 0;		#Scanning lines before patch
+	my $has_patch_separator = 0;	#Found a --- line
 	my $has_commit_log = 0;		#Encountered lines before patch
 	my $commit_log_lines = 0;	#Number of commit log lines
 	my $commit_log_possible_stack_dump = 0;
@@ -2348,7 +2410,7 @@
 
 		if ($rawline=~/^\+\+\+\s+(\S+)/) {
 			$setup_docs = 0;
-			if ($1 =~ m@Documentation/admin-guide/kernel-parameters.rst$@) {
+			if ($1 =~ m@Documentation/admin-guide/kernel-parameters.txt$@) {
 				$setup_docs = 1;
 			}
 			#next;
@@ -2429,6 +2491,7 @@
 		$sline =~ s/$;/ /g;	#with comments as spaces
 
 		my $rawline = $rawlines[$linenr - 1];
+		my $raw_comment = get_raw_comment($line, $rawline);
 
 # check if it's a mode change, rename or start of a patch
 		if (!$in_commit_log &&
@@ -2547,7 +2610,7 @@
 				if (($last_binding_patch != -1) &&
 				    ($last_binding_patch ^ $is_binding_patch)) {
 					WARN("DT_SPLIT_BINDING_PATCH",
-					     "DT binding docs and includes should be a separate patch. See: Documentation/devicetree/bindings/submitting-patches.txt\n");
+					     "DT binding docs and includes should be a separate patch. See: Documentation/devicetree/bindings/submitting-patches.rst\n");
 				}
 			}
 
@@ -2600,21 +2663,26 @@
 			$author = $1;
 			$author = encode("utf8", $author) if ($line =~ /=\?utf-8\?/i);
 			$author =~ s/"//g;
+			$author = reformat_email($author);
 		}
 
 # Check the patch for a signoff:
-		if ($line =~ /^\s*signed-off-by:/i) {
+		if ($line =~ /^\s*signed-off-by:\s*(.*)/i) {
 			$signoff++;
 			$in_commit_log = 0;
 			if ($author ne '') {
-				my $l = $line;
-				$l =~ s/"//g;
-				if ($l =~ /^\s*signed-off-by:\s*\Q$author\E/i) {
-				    $authorsignoff = 1;
+				if (same_email_addresses($1, $author)) {
+					$authorsignoff = 1;
 				}
 			}
 		}
 
+# Check for patch separator
+		if ($line =~ /^---$/) {
+			$has_patch_separator = 1;
+			$in_commit_log = 0;
+		}
+
 # Check if MAINTAINERS is being updated.  If so, there's probably no need to
 # emit the "does MAINTAINERS need updating?" message on file add/move/delete
 		if ($line =~ /^\s*MAINTAINERS\s*\|/) {
@@ -2660,7 +2728,7 @@
 				}
 			}
 
-			my ($email_name, $email_address, $comment) = parse_email($email);
+			my ($email_name, $name_comment, $email_address, $comment) = parse_email($email);
 			my $suggested_email = format_email(($email_name, $email_address));
 			if ($suggested_email eq "") {
 				ERROR("BAD_SIGN_OFF",
@@ -2671,9 +2739,7 @@
 				$dequoted =~ s/" </ </;
 				# Don't force email to have quotes
 				# Allow just an angle bracketed address
-				if ("$dequoted$comment" ne $email &&
-				    "<$email_address>$comment" ne $email &&
-				    "$suggested_email$comment" ne $email) {
+				if (!same_email_addresses($email, $suggested_email)) {
 					WARN("BAD_SIGN_OFF",
 					     "email address '$email' might be better as '$suggested_email$comment'\n" . $herecurr);
 				}
@@ -2716,10 +2782,10 @@
 			     "A patch subject line should describe the change not the tool that found it\n" . $herecurr);
 		}
 
-# Check for unwanted Gerrit info
-		if ($in_commit_log && $line =~ /^\s*change-id:/i) {
+# Check for Gerrit Change-Ids not in any patch context
+		if ($realfile eq '' && !$has_patch_separator && $line =~ /^\s*change-id:/i) {
 			ERROR("GERRIT_CHANGE_ID",
-			      "Remove Gerrit Change-Id's before submitting upstream.\n" . $herecurr);
+			      "Remove Gerrit Change-Id's before submitting upstream\n" . $herecurr);
 		}
 
 # Check if the commit log is in a possible stack dump
@@ -2757,7 +2823,7 @@
 
 # Check for git id commit length and improperly formed commit descriptions
 		if ($in_commit_log && !$commit_log_possible_stack_dump &&
-		    $line !~ /^\s*(?:Link|Patchwork|http|https|BugLink):/i &&
+		    $line !~ /^\s*(?:Link|Patchwork|http|https|BugLink|base-commit):/i &&
 		    $line !~ /^This reverts commit [0-9a-f]{7,40}/ &&
 		    ($line =~ /\bcommit\s+[0-9a-f]{5,}\b/i ||
 		     ($line =~ /(?:\s|^)[0-9a-f]{12,40}(?:[\s"'\(\[]|$)/i &&
@@ -2826,6 +2892,14 @@
 			     "added, moved or deleted file(s), does MAINTAINERS need updating?\n" . $herecurr);
 		}
 
+# Check for adding new DT bindings not in schema format
+		if (!$in_commit_log &&
+		    ($line =~ /^new file mode\s*\d+\s*$/) &&
+		    ($realfile =~ m@^Documentation/devicetree/bindings/.*\.txt$@)) {
+			WARN("DT_SCHEMA_BINDING_PATCH",
+			     "DT bindings should be in DT schema format. See: Documentation/devicetree/writing-schema.rst\n");
+		}
+
 # Check for wrappage within a valid hunk of the file
 		if ($realcnt != 0 && $line !~ m{^(?:\+|-| |\\ No newline|$)}) {
 			ERROR("CORRUPTED_PATCH",
@@ -3002,14 +3076,43 @@
 			#print "is_start<$is_start> is_end<$is_end> length<$length>\n";
 		}
 
-# check for MAINTAINERS entries that don't have the right form
-		if ($realfile =~ /^MAINTAINERS$/ &&
-		    $rawline =~ /^\+[A-Z]:/ &&
-		    $rawline !~ /^\+[A-Z]:\t\S/) {
-			if (WARN("MAINTAINERS_STYLE",
-				 "MAINTAINERS entries use one tab after TYPE:\n" . $herecurr) &&
-			    $fix) {
-				$fixed[$fixlinenr] =~ s/^(\+[A-Z]):\s*/$1:\t/;
+# check MAINTAINERS entries
+		if ($realfile =~ /^MAINTAINERS$/) {
+# check MAINTAINERS entries for the right form
+			if ($rawline =~ /^\+[A-Z]:/ &&
+			    $rawline !~ /^\+[A-Z]:\t\S/) {
+				if (WARN("MAINTAINERS_STYLE",
+					 "MAINTAINERS entries use one tab after TYPE:\n" . $herecurr) &&
+				    $fix) {
+					$fixed[$fixlinenr] =~ s/^(\+[A-Z]):\s*/$1:\t/;
+				}
+			}
+# check MAINTAINERS entries for the right ordering too
+			my $preferred_order = 'MRLSWQBCPTFXNK';
+			if ($rawline =~ /^\+[A-Z]:/ &&
+			    $prevrawline =~ /^[\+ ][A-Z]:/) {
+				$rawline =~ /^\+([A-Z]):\s*(.*)/;
+				my $cur = $1;
+				my $curval = $2;
+				$prevrawline =~ /^[\+ ]([A-Z]):\s*(.*)/;
+				my $prev = $1;
+				my $prevval = $2;
+				my $curindex = index($preferred_order, $cur);
+				my $previndex = index($preferred_order, $prev);
+				if ($curindex < 0) {
+					WARN("MAINTAINERS_STYLE",
+					     "Unknown MAINTAINERS entry type: '$cur'\n" . $herecurr);
+				} else {
+					if ($previndex >= 0 && $curindex < $previndex) {
+						WARN("MAINTAINERS_STYLE",
+						     "Misordered MAINTAINERS entry - list '$cur:' before '$prev:'\n" . $hereprev);
+					} elsif ((($prev eq 'F' && $cur eq 'F') ||
+						  ($prev eq 'X' && $cur eq 'X')) &&
+						 ($prevval cmp $curval) > 0) {
+						WARN("MAINTAINERS_STYLE",
+						     "Misordered MAINTAINERS entry - list file patterns in alphabetic order\n" . $hereprev);
+					}
+				}
 			}
 		}
 
@@ -3075,7 +3178,7 @@
 					$comment = '/*';
 				} elsif ($realfile =~ /\.(c|dts|dtsi)$/) {
 					$comment = '//';
-				} elsif (($checklicenseline == 2) || $realfile =~ /\.(sh|pl|py|awk|tc)$/) {
+				} elsif (($checklicenseline == 2) || $realfile =~ /\.(sh|pl|py|awk|tc|yaml)$/) {
 					$comment = '#';
 				} elsif ($realfile =~ /\.rst$/) {
 					$comment = '..';
@@ -3099,6 +3202,17 @@
 						WARN("SPDX_LICENSE_TAG",
 						     "'$spdx_license' is not supported in LICENSES/...\n" . $herecurr);
 					}
+					if ($realfile =~ m@^Documentation/devicetree/bindings/@ &&
+					    not $spdx_license =~ /GPL-2\.0.*BSD-2-Clause/) {
+						my $msg_level = \&WARN;
+						$msg_level = \&CHK if ($file);
+						if (&{$msg_level}("SPDX_LICENSE_TAG",
+
+								  "DT binding documents should be licensed (GPL-2.0-only OR BSD-2-Clause)\n" . $herecurr) &&
+						    $fix) {
+							$fixed[$fixlinenr] =~ s/SPDX-License-Identifier: .*/SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)/;
+						}
+					}
 				}
 			}
 		}
@@ -3171,8 +3285,10 @@
 
 			if ($msg_type ne "" &&
 			    (show_type("LONG_LINE") || show_type($msg_type))) {
-				WARN($msg_type,
-				     "line over $max_line_length characters\n" . $herecurr);
+				my $msg_level = \&WARN;
+				$msg_level = \&CHK if ($file);
+				&{$msg_level}($msg_type,
+					      "line length of $length exceeds $max_line_length columns\n" . $herecurr);
 			}
 		}
 
@@ -3186,7 +3302,7 @@
 		next if ($realfile !~ /\.(h|c|pl|dtsi|dts)$/);
 
 # at the beginning of a line any tabs must come first and anything
-# more than 8 must use tabs.
+# more than $tabsize must use tabs.
 		if ($rawline =~ /^\+\s* \t\s*\S/ ||
 		    $rawline =~ /^\+\s*        \s*/) {
 			my $herevet = "$here\n" . cat_vet($rawline) . "\n";
@@ -3198,6 +3314,42 @@
 			}
 		}
 
+# check for repeated words separated by a single space
+		if ($rawline =~ /^\+/) {
+			while ($rawline =~ /\b($word_pattern) (?=($word_pattern))/g) {
+
+				my $first = $1;
+				my $second = $2;
+
+				if ($first =~ /(?:struct|union|enum)/) {
+					pos($rawline) += length($first) + length($second) + 1;
+					next;
+				}
+
+				next if ($first ne $second);
+				next if ($first eq 'long');
+
+				if (WARN("REPEATED_WORD",
+					 "Possible repeated word: '$first'\n" . $herecurr) &&
+				    $fix) {
+					$fixed[$fixlinenr] =~ s/\b$first $second\b/$first/;
+				}
+			}
+
+			# if it's a repeated word on consecutive lines in a comment block
+			if ($prevline =~ /$;+\s*$/ &&
+			    $prevrawline =~ /($word_pattern)\s*$/) {
+				my $last_word = $1;
+				if ($rawline =~ /^\+\s*\*\s*$last_word /) {
+					if (WARN("REPEATED_WORD",
+						 "Possible repeated word: '$last_word'\n" . $hereprev) &&
+					    $fix) {
+						$fixed[$fixlinenr] =~ s/(\+\s*\*\s*)$last_word /$1/;
+					}
+				}
+			}
+		}
+
 # check for space before tabs.
 		if ($rawline =~ /^\+/ && $rawline =~ / \t/) {
 			my $herevet = "$here\n" . cat_vet($rawline) . "\n";
@@ -3205,7 +3357,7 @@
 				"please, no space before tabs\n" . $herevet) &&
 			    $fix) {
 				while ($fixed[$fixlinenr] =~
-					   s/(^\+.*) {8,8}\t/$1\t\t/) {}
+					   s/(^\+.*) {$tabsize,$tabsize}\t/$1\t\t/) {}
 				while ($fixed[$fixlinenr] =~
 					   s/(^\+.*) +\t/$1\t/) {}
 			}
@@ -3227,11 +3379,11 @@
 		if ($perl_version_ok &&
 		    $sline =~ /^\+\t+( +)(?:$c90_Keywords\b|\{\s*$|\}\s*(?:else\b|while\b|\s*$)|$Declare\s*$Ident\s*[;=])/) {
 			my $indent = length($1);
-			if ($indent % 8) {
+			if ($indent % $tabsize) {
 				if (WARN("TABSTOP",
 					 "Statements should start on a tabstop\n" . $herecurr) &&
 				    $fix) {
-					$fixed[$fixlinenr] =~ s@(^\+\t+) +@$1 . "\t" x ($indent/8)@e;
+					$fixed[$fixlinenr] =~ s@(^\+\t+) +@$1 . "\t" x ($indent/$tabsize)@e;
 				}
 			}
 		}
@@ -3249,8 +3401,8 @@
 				my $newindent = $2;
 
 				my $goodtabindent = $oldindent .
-					"\t" x ($pos / 8) .
-					" "  x ($pos % 8);
+					"\t" x ($pos / $tabsize) .
+					" "  x ($pos % $tabsize);
 				my $goodspaceindent = $oldindent . " "  x $pos;
 
 				if ($newindent ne $goodtabindent &&
@@ -3721,11 +3873,11 @@
 			#print "line<$line> prevline<$prevline> indent<$indent> sindent<$sindent> check<$check> continuation<$continuation> s<$s> cond_lines<$cond_lines> stat_real<$stat_real> stat<$stat>\n";
 
 			if ($check && $s ne '' &&
-			    (($sindent % 8) != 0 ||
+			    (($sindent % $tabsize) != 0 ||
 			     ($sindent < $indent) ||
 			     ($sindent == $indent &&
 			      ($s !~ /^\s*(?:\}|\{|else\b)/)) ||
-			     ($sindent > $indent + 8))) {
+			     ($sindent > $indent + $tabsize))) {
 				WARN("SUSPECT_CODE_INDENT",
 				     "suspect code indent for conditional statements ($indent, $sindent)\n" . $herecurr . "$stat_real\n");
 			}
@@ -4002,7 +4154,7 @@
 		}
 
 # check for function declarations without arguments like "int foo()"
-		if ($line =~ /(\b$Type\s+$Ident)\s*\(\s*\)/) {
+		if ($line =~ /(\b$Type\s*$Ident)\s*\(\s*\)/) {
 			if (ERROR("FUNCTION_WITHOUT_ARGS",
 				  "Bad function definition - $1() should probably be $1(void)\n" . $herecurr) &&
 			    $fix) {
@@ -4113,15 +4265,6 @@
 			     "Prefer [subsystem eg: netdev]_$level2([subsystem]dev, ... then dev_$level2(dev, ... then pr_$level(...  to printk(KERN_$orig ...\n" . $herecurr);
 		}
 
-		if ($line =~ /\bpr_warning\s*\(/) {
-			if (WARN("PREFER_PR_LEVEL",
-				 "Prefer pr_warn(... to pr_warning(...\n" . $herecurr) &&
-			    $fix) {
-				$fixed[$fixlinenr] =~
-				    s/\bpr_warning\b/pr_warn/;
-			}
-		}
-
 		if ($line =~ /\bdev_printk\s*\(\s*KERN_([A-Z]+)/) {
 			my $orig = $1;
 			my $level = lc($orig);
@@ -4139,6 +4282,17 @@
 			     "ENOSYS means 'invalid syscall nr' and nothing else\n" . $herecurr);
 		}
 
+# ENOTSUPP is not a standard error code and should be avoided in new patches.
+# Folks usually mean EOPNOTSUPP (also called ENOTSUP), when they type ENOTSUPP.
+# Similarly to ENOSYS warning a small number of false positives is expected.
+		if (!$file && $line =~ /\bENOTSUPP\b/) {
+			if (WARN("ENOTSUPP",
+				 "ENOTSUPP is not a SUSV4 error code, prefer EOPNOTSUPP\n" . $herecurr) &&
+			    $fix) {
+				$fixed[$fixlinenr] =~ s/\bENOTSUPP\b/EOPNOTSUPP/;
+			}
+		}
+
 # function brace can't be on same line, except for #defines of do while,
 # or if closed on same line
 		if ($perl_version_ok &&
@@ -4579,7 +4733,7 @@
 					    ($op eq '>' &&
 					     $ca =~ /<\S+\@\S+$/))
 					{
-					    	$ok = 1;
+						$ok = 1;
 					}
 
 					# for asm volatile statements
@@ -4906,15 +5060,37 @@
 			my ($s, $c) = ($stat, $cond);
 
 			if ($c =~ /\bif\s*\(.*[^<>!=]=[^=].*/s) {
-				ERROR("ASSIGN_IN_IF",
-				      "do not use assignment in if condition\n" . $herecurr);
+				if (ERROR("ASSIGN_IN_IF",
+					  "do not use assignment in if condition\n" . $herecurr) &&
+				    $fix && $perl_version_ok) {
+					if ($rawline =~ /^\+(\s+)if\s*\(\s*(\!)?\s*\(\s*(($Lval)\s*=\s*$LvalOrFunc)\s*\)\s*(?:($Compare)\s*($FuncArg))?\s*\)\s*(\{)?\s*$/) {
+						my $space = $1;
+						my $not = $2;
+						my $statement = $3;
+						my $assigned = $4;
+						my $test = $8;
+						my $against = $9;
+						my $brace = $15;
+						fix_delete_line($fixlinenr, $rawline);
+						fix_insert_line($fixlinenr, "$space$statement;");
+						my $newline = "${space}if (";
+						$newline .= '!' if defined($not);
+						$newline .= '(' if (defined $not && defined($test) && defined($against));
+						$newline .= "$assigned";
+						$newline .= " $test $against" if (defined($test) && defined($against));
+						$newline .= ')' if (defined $not && defined($test) && defined($against));
+						$newline .= ')';
+						$newline .= " {" if (defined($brace));
+						fix_insert_line($fixlinenr + 1, $newline);
+					}
+				}
 			}
 
 			# Find out what is on the end of the line after the
 			# conditional.
 			substr($s, 0, length($c), '');
 			$s =~ s/\n.*//g;
-			$s =~ s/$;//g; 	# Remove any comments
+			$s =~ s/$;//g;	# Remove any comments
 			if (length($c) && $s !~ /^\s*{?\s*\\*\s*$/ &&
 			    $c !~ /}\s*while\s*/)
 			{
@@ -4953,7 +5129,7 @@
 # if and else should not have general statements after it
 		if ($line =~ /^.\s*(?:}\s*)?else\b(.*)/) {
 			my $s = $1;
-			$s =~ s/$;//g; 	# Remove any comments
+			$s =~ s/$;//g;	# Remove any comments
 			if ($s !~ /^\s*(?:\sif|(?:{|)\s*\\?\s*$)/) {
 				ERROR("TRAILING_STATEMENTS",
 				      "trailing statements should be on next line\n" . $herecurr);
@@ -5030,8 +5206,9 @@
 			    $var =~ /[A-Z][a-z]|[a-z][A-Z]/ &&
 #Ignore Page<foo> variants
 			    $var !~ /^(?:Clear|Set|TestClear|TestSet|)Page[A-Z]/ &&
-#Ignore SI style variants like nS, mV and dB (ie: max_uV, regulator_min_uA_show)
-			    $var !~ /^(?:[a-z_]*?)_?[a-z][A-Z](?:_[a-z_]+)?$/ &&
+#Ignore SI style variants like nS, mV and dB
+#(ie: max_uV, regulator_min_uA_show, RANGE_mA_VALUE)
+			    $var !~ /^(?:[a-z0-9_]*|[A-Z0-9_]*)?_?[a-z][A-Z](?:_[a-z0-9_]+|_[A-Z0-9_]+)?$/ &&
 #Ignore some three character SI units explicitly, like MiB and KHz
 			    $var !~ /^(?:[a-z_]*?)_?(?:[KMGT]iB|[KMGT]?Hz)(?:_[a-z_]+)?$/) {
 				while ($var =~ m{($Ident)}g) {
@@ -5128,7 +5305,7 @@
 			{
 			}
 
-			# Flatten any obvious string concatentation.
+			# Flatten any obvious string concatenation.
 			while ($dstat =~ s/($String)\s*$Ident/$1/ ||
 			       $dstat =~ s/$Ident\s*($String)/$1/)
 			{
@@ -5787,8 +5964,7 @@
 		my $barriers = qr{
 			mb|
 			rmb|
-			wmb|
-			read_barrier_depends
+			wmb
 		}x;
 		my $barrier_stems = qr{
 			mb__before_atomic|
@@ -5829,10 +6005,12 @@
 			}
 		}
 
-# check for smp_read_barrier_depends and read_barrier_depends
-		if (!$file && $line =~ /\b(smp_|)read_barrier_depends\s*\(/) {
-			WARN("READ_BARRIER_DEPENDS",
-			     "$1read_barrier_depends should only be used in READ_ONCE or DEC Alpha code\n" . $herecurr);
+# check for data_race without a comment.
+		if ($line =~ /\bdata_race\s*\(/) {
+			if (!ctx_has_comment($first_line, $linenr)) {
+				WARN("DATA_RACE",
+				     "data_race without comment\n" . $herecurr);
+			}
 		}
 
 # check of hardware specific defines
@@ -6015,14 +6193,18 @@
 		        for (my $count = $linenr; $count <= $lc; $count++) {
 				my $specifier;
 				my $extension;
+				my $qualifier;
 				my $bad_specifier = "";
 				my $fmt = get_quoted_string($lines[$count - 1], raw_line($count, 0));
 				$fmt =~ s/%%//g;
 
-				while ($fmt =~ /(\%[\*\d\.]*p(\w))/g) {
+				while ($fmt =~ /(\%[\*\d\.]*p(\w)(\w*))/g) {
 					$specifier = $1;
 					$extension = $2;
-					if ($extension !~ /[SsBKRraEhMmIiUDdgVCbGNOxt]/) {
+					$qualifier = $3;
+					if ($extension !~ /[SsBKRraEehMmIiUDdgVCbGNOxtf]/ ||
+					    ($extension eq "f" &&
+					     defined $qualifier && $qualifier !~ /^w/)) {
 						$bad_specifier = $specifier;
 						last;
 					}
@@ -6039,7 +6221,6 @@
 					my $ext_type = "Invalid";
 					my $use = "";
 					if ($bad_specifier =~ /p[Ff]/) {
-						$ext_type = "Deprecated";
 						$use = " - use %pS instead";
 						$use =~ s/pS/ps/ if ($bad_specifier =~ /pf/);
 					}
@@ -6203,8 +6384,7 @@
 			if (defined $cond) {
 				substr($s, 0, length($cond), '');
 			}
-			if ($s =~ /^\s*;/ &&
-			    $function_name ne 'uninitialized_var')
+			if ($s =~ /^\s*;/)
 			{
 				WARN("AVOID_EXTERNS",
 				     "externs should be avoided in .c files\n" .  $herecurr);
@@ -6265,7 +6445,7 @@
 
 			if (!grep(/$name/, @setup_docs)) {
 				CHK("UNDOCUMENTED_SETUP",
-				    "__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.rst\n" . $herecurr);
+				    "__setup appears un-documented -- check Documentation/admin-guide/kernel-parameters.txt\n" . $herecurr);
 			}
 		}
 
@@ -6347,6 +6527,12 @@
 			}
 		}
 
+# check for IS_ENABLED() without CONFIG_<FOO> ($rawline for comments too)
+		if ($rawline =~ /\bIS_ENABLED\s*\(\s*(\w+)\s*\)/ && $1 !~ /^CONFIG_/) {
+			WARN("IS_ENABLED_CONFIG",
+			     "IS_ENABLED($1) is normally used as IS_ENABLED(CONFIG_$1)\n" . $herecurr);
+		}
+
 # check for #if defined CONFIG_<FOO> || defined CONFIG_<FOO>_MODULE
 		if ($line =~ /^\+\s*#\s*if\s+defined(?:\s*\(?\s*|\s+)(CONFIG_[A-Z_]+)\s*\)?\s*\|\|\s*defined(?:\s*\(?\s*|\s+)\1_MODULE\s*\)?\s*$/) {
 			my $config = $1;
@@ -6357,28 +6543,25 @@
 			}
 		}
 
-# check for case / default statements not preceded by break/fallthrough/switch
-		if ($line =~ /^.\s*(?:case\s+(?:$Ident|$Constant)\s*|default):/) {
-			my $has_break = 0;
-			my $has_statement = 0;
-			my $count = 0;
-			my $prevline = $linenr;
-			while ($prevline > 1 && ($file || $count < 3) && !$has_break) {
-				$prevline--;
-				my $rline = $rawlines[$prevline - 1];
-				my $fline = $lines[$prevline - 1];
-				last if ($fline =~ /^\@\@/);
-				next if ($fline =~ /^\-/);
-				next if ($fline =~ /^.(?:\s*(?:case\s+(?:$Ident|$Constant)[\s$;]*|default):[\s$;]*)*$/);
-				$has_break = 1 if ($rline =~ /fall[\s_-]*(through|thru)/i);
-				next if ($fline =~ /^.[\s$;]*$/);
-				$has_statement = 1;
-				$count++;
-				$has_break = 1 if ($fline =~ /\bswitch\b|\b(?:break\s*;[\s$;]*$|exit\s*\(\b|return\b|goto\b|continue\b)/);
-			}
-			if (!$has_break && $has_statement) {
-				WARN("MISSING_BREAK",
-				     "Possible switch case/default not preceded by break or fallthrough comment\n" . $herecurr);
+# check for /* fallthrough */ like comment, prefer fallthrough;
+		my @fallthroughs = (
+			'fallthrough',
+			'@fallthrough@',
+			'lint -fallthrough[ \t]*',
+			'intentional(?:ly)?[ \t]*fall(?:(?:s | |-)[Tt]|t)hr(?:ough|u|ew)',
+			'(?:else,?\s*)?FALL(?:S | |-)?THR(?:OUGH|U|EW)[ \t.!]*(?:-[^\n\r]*)?',
+			'Fall(?:(?:s | |-)[Tt]|t)hr(?:ough|u|ew)[ \t.!]*(?:-[^\n\r]*)?',
+			'fall(?:s | |-)?thr(?:ough|u|ew)[ \t.!]*(?:-[^\n\r]*)?',
+		    );
+		if ($raw_comment ne '') {
+			foreach my $ft (@fallthroughs) {
+				if ($raw_comment =~ /$ft/) {
+					my $msg_level = \&WARN;
+					$msg_level = \&CHK if ($file);
+					&{$msg_level}("PREFER_FALLTHROUGH",
+						      "Prefer 'fallthrough;' over fallthrough comment\n" . $herecurr);
+					last;
+				}
 			}
 		}
 
@@ -6475,7 +6658,8 @@
 
 # check for various structs that are normally const (ops, kgdb, device_tree)
 # and avoid what seem like struct definitions 'struct foo {'
-		if ($line !~ /\bconst\b/ &&
+		if (defined($const_structs) &&
+		    $line !~ /\bconst\b/ &&
 		    $line =~ /\bstruct\s+($const_structs)\b(?!\s*\{)/) {
 			WARN("CONST_STRUCT",
 			     "struct $1 should normally be const\n" . $herecurr);
diff --git a/scripts/gen_autoksyms.sh b/scripts/gen_autoksyms.sh
new file mode 100755
index 0000000..16c0b2d
--- /dev/null
+++ b/scripts/gen_autoksyms.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+# Create an autoksyms.h header file from the list of all module's needed symbols
+# as recorded on the second line of *.mod files and the user-provided symbol
+# whitelist.
+
+set -e
+
+output_file="$1"
+
+# Use "make V=1" to debug this script.
+case "$KBUILD_VERBOSE" in
+*1*)
+	set -x
+	;;
+esac
+
+# We need access to CONFIG_ symbols
+. include/config/auto.conf
+
+ksym_wl=/dev/null
+if [ -n "$CONFIG_UNUSED_KSYMS_WHITELIST" ]; then
+	# Use 'eval' to expand the whitelist path and check if it is relative
+	eval ksym_wl="$CONFIG_UNUSED_KSYMS_WHITELIST"
+	[ "${ksym_wl}" != "${ksym_wl#/}" ] || ksym_wl="$abs_srctree/$ksym_wl"
+	if [ ! -f "$ksym_wl" ] || [ ! -r "$ksym_wl" ]; then
+		echo "ERROR: '$ksym_wl' whitelist file not found" >&2
+		exit 1
+	fi
+fi
+
+# Generate a new ksym list file with symbols needed by the current
+# set of modules.
+cat > "$output_file" << EOT
+/*
+ * Automatically generated file; DO NOT EDIT.
+ */
+
+EOT
+
+[ -f modules.order ] && modlist=modules.order || modlist=/dev/null
+sed 's/ko$/mod/' $modlist |
+xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- |
+cat - "$ksym_wl" |
+sort -u |
+sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$output_file"
+
+# Special case for modversions (see modpost.c)
+if [ -n "$CONFIG_MODVERSIONS" ]; then
+	echo "#define __KSYM_module_layout 1" >> "$output_file"
+fi
diff --git a/scripts/generate_initcall_order.pl b/scripts/generate_initcall_order.pl
new file mode 100755
index 0000000..cb2fd83
--- /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{'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/kallsyms.c b/scripts/kallsyms.c
index fb15f09..4a4a05a7 100644
--- a/scripts/kallsyms.c
+++ b/scripts/kallsyms.c
@@ -28,7 +28,7 @@
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
 #endif
 
-#define KSYM_NAME_LEN		128
+#define KSYM_NAME_LEN		192
 
 struct sym_entry {
 	unsigned long long addr;
diff --git a/scripts/kconfig/merge_config.sh b/scripts/kconfig/merge_config.sh
index 63c8565..e5b4698 100755
--- a/scripts/kconfig/merge_config.sh
+++ b/scripts/kconfig/merge_config.sh
@@ -28,6 +28,7 @@
 	echo "  -r    list redundant entries when merging fragments"
 	echo "  -y    make builtin have precedence over modules"
 	echo "  -O    dir to put generated output files.  Consider setting \$KCONFIG_CONFIG instead."
+	echo "  -s    strict mode. Fail if the fragment redefines any value."
 	echo
 	echo "Used prefix: '$CONFIG_PREFIX'. You can redefine it with \$CONFIG_ environment variable."
 }
@@ -37,6 +38,7 @@
 WARNREDUN=false
 BUILTIN=false
 OUTPUT=.
+STRICT=false
 CONFIG_PREFIX=${CONFIG_-CONFIG_}
 
 while true; do
@@ -75,6 +77,11 @@
 		shift 2
 		continue
 		;;
+	"-s")
+		STRICT=true
+		shift
+		continue
+		;;
 	*)
 		break
 		;;
@@ -141,6 +148,9 @@
 			echo Previous  value: $PREV_VAL
 			echo New value:       $NEW_VAL
 			echo
+			if [ "$STRICT" = "true" ]; then
+				STRICT_MODE_VIOLATED=true
+			fi
 		elif [ "$WARNREDUN" = "true" ]; then
 			echo Value of $CFG is redundant by fragment $ORIG_MERGE_FILE:
 		fi
@@ -153,6 +163,11 @@
 	cat $MERGE_FILE >> $TMP_FILE
 done
 
+if [ "$STRICT_MODE_VIOLATED" = "true" ]; then
+	echo "The fragment redefined a value and strict mode had been passed."
+	exit 1
+fi
+
 if [ "$RUNMAKE" = "false" ]; then
 	cp -T -- "$TMP_FILE" "$KCONFIG_CONFIG"
 	echo "#"
diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh
index 8b6325c..8f6ca44 100755
--- a/scripts/link-vmlinux.sh
+++ b/scripts/link-vmlinux.sh
@@ -39,6 +39,32 @@
 	fi
 }
 
+# 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
+
+	${srctree}/scripts/generate_initcall_order.pl \
+		${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS} \
+		> .tmp_lto.lds
+
+	if [ -n "${CONFIG_MODVERSIONS}" ]; then
+		for a in ${KBUILD_VMLINUX_OBJS} ${KBUILD_VMLINUX_LIBS}; do
+			for o in $(${AR} t $a 2>/dev/null); do
+				if [ -f ${o}.symversions ]; then
+					cat ${o}.symversions >> .tmp_lto.lds
+				fi
+			done
+		done
+	fi
+
+	echo "-T .tmp_lto.lds"
+}
+
 # Link of vmlinux.o used for section mismatch analysis
 # ${1} output file
 modpost_link()
@@ -52,7 +78,28 @@
 		${KBUILD_VMLINUX_LIBS}				\
 		--end-group"
 
-	${LD} ${KBUILD_LDFLAGS} -r -o ${1} ${objects}
+	if [ -n "${CONFIG_LTO_CLANG}" ]; then
+		# This might take a while, so indicate that we're doing
+		# an LTO link
+		info LTO ${1}
+	else
+		info LD ${1}
+	fi
+
+	${LD} ${KBUILD_LDFLAGS} -r -o ${1} $(lto_lds) ${objects}
+}
+
+# If CONFIG_LTO_CLANG is selected, we postpone running recordmcount until
+# we have compiled LLVM IR to an object file.
+recordmcount()
+{
+	if [ -z "${CONFIG_LTO_CLANG}" ]; then
+		return
+	fi
+
+	if [ -n "${CONFIG_FTRACE_MCOUNT_RECORD}" ]; then
+		scripts/recordmcount ${RECORDMCOUNT_FLAGS} $*
+	fi
 }
 
 # Link of vmlinux
@@ -76,13 +123,22 @@
 	fi
 
 	if [ "${SRCARCH}" != "um" ]; then
-		objects="--whole-archive			\
-			${KBUILD_VMLINUX_OBJS}			\
-			--no-whole-archive			\
-			--start-group				\
-			${KBUILD_VMLINUX_LIBS}			\
-			--end-group				\
-			${@}"
+		if [ -n "${CONFIG_LTO_CLANG}" ]; then
+			# Use vmlinux.o instead of performing the slow LTO
+			# link again.
+			objects="--whole-archive		\
+				vmlinux.o 			\
+				--no-whole-archive		\
+				${@}"
+		else
+			objects="--whole-archive		\
+				${KBUILD_VMLINUX_OBJS}		\
+				--no-whole-archive		\
+				--start-group			\
+				${KBUILD_VMLINUX_LIBS}		\
+				--end-group			\
+				${@}"
+		fi
 
 		${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux}	\
 			${strip_debug#-Wl,}			\
@@ -198,6 +254,7 @@
 {
 	rm -f .btf.*
 	rm -f .tmp_System.map
+	rm -f .tmp_lto.lds
 	rm -f .tmp_vmlinux*
 	rm -f System.map
 	rm -f vmlinux
@@ -249,12 +306,16 @@
 ${MAKE} -f "${srctree}/scripts/Makefile.build" obj=init
 
 #link vmlinux.o
-info LD vmlinux.o
 modpost_link vmlinux.o
 
 # modpost vmlinux.o to check for section mismatches
 ${MAKE} -f "${srctree}/scripts/Makefile.modpost" MODPOST_VMLINUX=1
 
+if [ -n "${CONFIG_LTO_CLANG}" ]; then
+	# Call recordmcount if needed
+	recordmcount vmlinux.o
+fi
+
 info MODINFO modules.builtin.modinfo
 ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo
 
diff --git a/scripts/lld-version.sh b/scripts/lld-version.sh
new file mode 100755
index 0000000..b6d6f52
--- /dev/null
+++ b/scripts/lld-version.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+#
+# Print ld.lld's version in a 5 or 6-digit form.
+
+set -e
+
+# Convert the version string x.y.z to a canonical 5 or 6-digit form.
+get_canonical_version()
+{
+	IFS=.
+	set -- $1
+
+	# If the 2nd or 3rd field is missing, fill it with a zero.
+	echo $((10000 * $1 + 100 * ${2:-0} + ${3:-0}))
+}
+
+orig_args="$@"
+
+# Get the first line of the --version output.
+IFS='
+'
+set -- $(LC_ALL=C "$@" --version)
+
+# Split the line on spaces.
+IFS=' '
+set -- $1
+
+while [ $# -gt 1 -a "$1" != "LLD" ]; do
+	shift
+done
+if [ "$1" = LLD ]; then
+	echo $(get_canonical_version ${2%-*})
+else
+	echo 0
+fi
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
index 06c1e9e..15eaade 100755
--- a/scripts/mkcompile_h
+++ b/scripts/mkcompile_h
@@ -6,7 +6,8 @@
 SMP=$3
 PREEMPT=$4
 PREEMPT_RT=$5
-CC=$6
+CC_VERSION="$6"
+LD=$7
 
 vecho() { [ "${quiet}" = "silent_" ] || echo "$@" ; }
 
@@ -74,7 +75,9 @@
   echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
 
-  echo \#define LINUX_COMPILER \"`$CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//'`\"
+  LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
+		      | sed 's/[[:space:]]*$//')
+  printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"
 } > .tmpcompile
 
 # Only replace the real compile.h if the new one is different,
diff --git a/scripts/mod/Makefile b/scripts/mod/Makefile
index 42c5d50..9cbf463 100644
--- a/scripts/mod/Makefile
+++ b/scripts/mod/Makefile
@@ -1,5 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0
 OBJECT_FILES_NON_STANDARD := y
+CFLAGS_REMOVE_empty.o += $(CC_FLAGS_LTO)
 
 hostprogs-y	:= modpost mk_elfconfig
 always		:= $(hostprogs-y) empty.o
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index 13cda6a..7b3d571 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -146,6 +146,9 @@
 		p[strlen(p) - 2] = '\0';
 		mod->is_dot_o = 1;
 	}
+	/* strip trailing .lto */
+	if (strends(p, ".lto"))
+		p[strlen(p) - 4] = '\0';
 
 	/* add to list */
 	mod->name = p;
@@ -387,9 +390,9 @@
 		s = new_symbol(name, mod, export);
 	} else {
 		if (!s->preloaded) {
-			warn("%s: '%s' exported twice. Previous export was in %s%s\n",
-			     mod->name, name, s->module->name,
-			     is_vmlinux(s->module->name) ? "" : ".ko");
+			fatal("%s: '%s' exported twice. Previous export was in %s%s\n",
+			      mod->name, name, s->module->name,
+			      is_vmlinux(s->module->name) ? "" : ".ko");
 		} else {
 			/* In case Module.symvers was out of date */
 			s->module = mod;
@@ -2000,6 +2003,10 @@
 		size_t m = strspn(s + n + 1, "0123456789");
 		if (m && (s[n + m] == '.' || s[n + m] == 0))
 			s[n] = 0;
+
+		/* strip trailing .lto */
+		if (strends(s, ".lto"))
+			s[strlen(s) - 4] = '\0';
 	}
 	return s;
 }
@@ -2258,8 +2265,12 @@
  **/
 static void add_header(struct buffer *b, struct module *mod)
 {
-	buf_printf(b, "#include <linux/build-salt.h>\n");
 	buf_printf(b, "#include <linux/module.h>\n");
+	/*
+	 * Include build-salt.h after module.h in order to
+	 * inherit the definitions.
+	 */
+	buf_printf(b, "#include <linux/build-salt.h>\n");
 	buf_printf(b, "#include <linux/vermagic.h>\n");
 	buf_printf(b, "#include <linux/compiler.h>\n");
 	buf_printf(b, "\n");
diff --git a/scripts/module-lto.lds.S b/scripts/module-lto.lds.S
new file mode 100644
index 0000000..a89f0c5
--- /dev/null
+++ b/scripts/module-lto.lds.S
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include <asm/page.h>
+
+/*
+ * 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_]*)
+		*(.bss..L*)
+	}
+
+	.data : {
+		*(.data .data.[0-9a-zA-Z_]*)
+		*(.data..L*)
+	}
+
+	.rodata : {
+		*(.rodata .rodata.[0-9a-zA-Z_]*)
+		*(.rodata..L*)
+	}
+
+	/*
+	 * With CFI_CLANG, ensure __cfi_check is at the beginning of the
+	 * .text section, and that the section is aligned to page size.
+	 */
+	.text : ALIGN(PAGE_SIZE) {
+		*(.text.__cfi_check)
+		*(.text .text.[0-9a-zA-Z_]* .text..L.cfi*)
+	}
+}
diff --git a/scripts/recordmcount.c b/scripts/recordmcount.c
index cce12e1..5f22e5c 100644
--- a/scripts/recordmcount.c
+++ b/scripts/recordmcount.c
@@ -414,7 +414,9 @@
 		strcmp(".irqentry.text", txtname) == 0 ||
 		strcmp(".softirqentry.text", txtname) == 0 ||
 		strcmp(".kprobes.text", txtname) == 0 ||
-		strcmp(".cpuidle.text", txtname) == 0;
+		strcmp(".cpuidle.text", txtname) == 0 ||
+		(strncmp(".text.",       txtname, 6) == 0 &&
+		 strcmp(".text..ftrace", txtname) != 0);
 }
 
 static char const *already_has_rel_mcount = "success"; /* our work here is done! */
diff --git a/scripts/recordmcount.h b/scripts/recordmcount.h
index 1e9baa5..773e196 100644
--- a/scripts/recordmcount.h
+++ b/scripts/recordmcount.h
@@ -534,6 +534,12 @@
 		if (txtndx == get_symindex(symp, symtab, symtab_shndx)
 			/* avoid STB_WEAK */
 		    && (STB_LOCAL == st_bind || STB_GLOBAL == st_bind)) {
+			/* avoid file symbols */
+			if (ELF_ST_TYPE(symp->st_info) == STT_FILE)
+				continue;
+			/* avoid SHN_ABS */
+			if (symp->st_shndx == SHN_ABS)
+				continue;
 			/* function symbols on ARM have quirks, avoid them */
 			if (w2(ehdr->e_machine) == EM_ARM
 			    && ELF_ST_TYPE(symp->st_info) == STT_FUNC)
diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 45609db..fc33130 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -11,12 +11,14 @@
 #
 
 usage() {
-	echo "Usage: $0 [--save-scmversion] [srctree]" >&2
+	echo "Usage: $0 [--save-scmversion] [srctree] [branch] [kmi-generation]" >&2
 	exit 1
 }
 
 scm_only=false
 srctree=.
+android_release=
+kmi_generation=
 if test "$1" = "--save-scmversion"; then
 	scm_only=true
 	shift
@@ -25,6 +27,22 @@
 	srctree=$1
 	shift
 fi
+if test $# -gt 0; then
+	# Extract the Android release version. If there is no match, then return 255
+	# and clear the var $android_release
+	android_release=`echo "$1" | sed -e '/android[0-9]\{2,\}/!{q255}; \
+		s/^\(android[0-9]\{2,\}\)-.*/\1/'`
+	if test $? -ne 0; then
+		android_release=
+	fi
+	shift
+
+	if test $# -gt 0; then
+		kmi_generation=$1
+		[ $(expr $kmi_generation : '^[0-9]\+$') -eq 0 ] && usage
+		shift
+	fi
+fi
 if test $# -gt 0 -o ! -d "$srctree"; then
 	usage
 fi
@@ -47,6 +65,12 @@
 	if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
 	   head=$(git rev-parse --verify HEAD 2>/dev/null); then
 
+		if [ -n "$android_release" ] && [ -n "$kmi_generation" ]; then
+			printf '%s' "-$android_release-$kmi_generation"
+		elif [ -n "$android_release" ]; then
+			printf '%s' "-$android_release"
+		fi
+
 		# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
 		# it, because this version is defined in the top level Makefile.
 		if [ -z "`git describe --exact-match 2>/dev/null`" ]; then
diff --git a/security/Kconfig.hardening b/security/Kconfig.hardening
index af4c979b..269967c 100644
--- a/security/Kconfig.hardening
+++ b/security/Kconfig.hardening
@@ -19,13 +19,16 @@
 
 menu "Memory initialization"
 
-config CC_HAS_AUTO_VAR_INIT
+config CC_HAS_AUTO_VAR_INIT_PATTERN
 	def_bool $(cc-option,-ftrivial-auto-var-init=pattern)
 
+config CC_HAS_AUTO_VAR_INIT_ZERO
+	def_bool $(cc-option,-ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang)
+
 choice
 	prompt "Initialize kernel stack variables at function entry"
 	default GCC_PLUGIN_STRUCTLEAK_BYREF_ALL if COMPILE_TEST && GCC_PLUGINS
-	default INIT_STACK_ALL if COMPILE_TEST && CC_HAS_AUTO_VAR_INIT
+	default INIT_STACK_ALL_PATTERN if COMPILE_TEST && CC_HAS_AUTO_VAR_INIT_PATTERN
 	default INIT_STACK_NONE
 	help
 	  This option enables initialization of stack variables at
@@ -88,9 +91,9 @@
 		  of uninitialized stack variable exploits and information
 		  exposures.
 
-	config INIT_STACK_ALL
+	config INIT_STACK_ALL_PATTERN
 		bool "0xAA-init everything on the stack (strongest)"
-		depends on CC_HAS_AUTO_VAR_INIT
+		depends on CC_HAS_AUTO_VAR_INIT_PATTERN
 		help
 		  Initializes everything on the stack with a 0xAA
 		  pattern. This is intended to eliminate all classes
@@ -98,6 +101,24 @@
 		  exposures, even variables that were warned to have been
 		  left uninitialized.
 
+		  Pattern initialization is known to provoke many existing bugs
+		  related to uninitialized locals, e.g. pointers receive
+		  non-NULL values, buffer sizes and indices are very big.
+
+	config INIT_STACK_ALL_ZERO
+		bool "zero-init everything on the stack (strongest and safest)"
+		depends on CC_HAS_AUTO_VAR_INIT_ZERO
+		help
+		  Initializes everything on the stack with a zero
+		  value. This is intended to eliminate all classes
+		  of uninitialized stack variable exploits and information
+		  exposures, even variables that were warned to have been
+		  left uninitialized.
+
+		  Zero initialization provides safe defaults for strings,
+		  pointers, indices and sizes, and is therefore
+		  more suitable as a security mitigation measure.
+
 endchoice
 
 config GCC_PLUGIN_STRUCTLEAK_VERBOSE
diff --git a/security/commoncap.c b/security/commoncap.c
index 1c70d11..d8a9ffc 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
@@ -297,7 +297,8 @@
 	struct inode *inode = d_backing_inode(dentry);
 	int error;
 
-	error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0);
+	error = __vfs_getxattr(dentry, inode, XATTR_NAME_CAPS, NULL, 0,
+			       XATTR_NOSECURITY);
 	return error > 0;
 }
 
@@ -605,7 +606,8 @@
 
 	fs_ns = inode->i_sb->s_user_ns;
 	size = __vfs_getxattr((struct dentry *)dentry, inode,
-			      XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ);
+			      XATTR_NAME_CAPS, &data, XATTR_CAPS_SZ,
+			      XATTR_NOSECURITY);
 	if (size == -ENODATA || size == -EOPNOTSUPP)
 		/* no data, that's ok */
 		return -ENODATA;
diff --git a/security/integrity/evm/evm_main.c b/security/integrity/evm/evm_main.c
index b82291d..a2a434d46 100644
--- a/security/integrity/evm/evm_main.c
+++ b/security/integrity/evm/evm_main.c
@@ -100,7 +100,8 @@
 		return -EOPNOTSUPP;
 
 	list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
-		error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0);
+		error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0,
+				       XATTR_NOSECURITY);
 		if (error < 0) {
 			if (error == -ENODATA)
 				continue;
diff --git a/security/security.c b/security/security.c
index c34ec4c..cebe5e3 100644
--- a/security/security.c
+++ b/security/security.c
@@ -1001,6 +1001,14 @@
 }
 EXPORT_SYMBOL(security_inode_init_security);
 
+int security_inode_init_security_anon(struct inode *inode,
+				      const struct qstr *name,
+				      const struct inode *context_inode)
+{
+	return call_int_hook(inode_init_security_anon, 0, inode, name,
+			     context_inode);
+}
+
 int security_old_inode_init_security(struct inode *inode, struct inode *dir,
 				     const struct qstr *qstr, const char **name,
 				     void **value, size_t *len)
@@ -2404,3 +2412,30 @@
 	return call_int_hook(locked_down, 0, what);
 }
 EXPORT_SYMBOL(security_locked_down);
+
+#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 5711689..c9e576c 100644
--- a/security/selinux/Kconfig
+++ b/security/selinux/Kconfig
@@ -85,3 +85,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/avc.c b/security/selinux/avc.c
index 4a744b1..884a014 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -31,6 +31,9 @@
 #include "avc_ss.h"
 #include "classmap.h"
 
+#define CREATE_TRACE_POINTS
+#include <trace/events/avc.h>
+
 #define AVC_CACHE_SLOTS			512
 #define AVC_DEF_CACHE_THRESHOLD		512
 #define AVC_CACHE_RECLAIM		16
@@ -703,33 +706,37 @@
 {
 	struct common_audit_data *ad = a;
 	struct selinux_audit_data *sad = ad->selinux_audit_data;
-	char *scontext;
+	char *scontext = NULL;
+	char *tcontext = NULL;
+	const char *tclass = NULL;
 	u32 scontext_len;
+	u32 tcontext_len;
 	int rc;
 
 	rc = security_sid_to_context(sad->state, sad->ssid, &scontext,
 				     &scontext_len);
 	if (rc)
 		audit_log_format(ab, " ssid=%d", sad->ssid);
-	else {
+	else
 		audit_log_format(ab, " scontext=%s", scontext);
-		kfree(scontext);
-	}
 
-	rc = security_sid_to_context(sad->state, sad->tsid, &scontext,
-				     &scontext_len);
+	rc = security_sid_to_context(sad->state, sad->tsid, &tcontext,
+				     &tcontext_len);
 	if (rc)
 		audit_log_format(ab, " tsid=%d", sad->tsid);
-	else {
-		audit_log_format(ab, " tcontext=%s", scontext);
-		kfree(scontext);
-	}
+	else
+		audit_log_format(ab, " tcontext=%s", tcontext);
 
-	audit_log_format(ab, " tclass=%s", secclass_map[sad->tclass-1].name);
+	tclass = secclass_map[sad->tclass-1].name;
+	audit_log_format(ab, " tclass=%s", tclass);
 
 	if (sad->denied)
 		audit_log_format(ab, " permissive=%u", sad->result ? 0 : 1);
 
+	trace_selinux_audited(sad, scontext, tcontext, tclass);
+	kfree(tcontext);
+	kfree(scontext);
+
 	/* in case of invalid context report also the actual context string */
 	rc = security_sid_to_context_inval(sad->state, sad->ssid, &scontext,
 					   &scontext_len);
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
index 91f2ba0..bae4f0a 100644
--- a/security/selinux/hooks.c
+++ b/security/selinux/hooks.c
@@ -554,7 +554,8 @@
 			goto out;
 		}
 
-		rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL, 0);
+		rc = __vfs_getxattr(root, root_inode, XATTR_NAME_SELINUX, NULL,
+				    0, XATTR_NOSECURITY);
 		if (rc < 0 && rc != -ENODATA) {
 			if (rc == -EOPNOTSUPP)
 				pr_warn("SELinux: (dev %s, type "
@@ -752,6 +753,8 @@
 
 	if (!strcmp(sb->s_type->name, "debugfs") ||
 	    !strcmp(sb->s_type->name, "tracefs") ||
+	    !strcmp(sb->s_type->name, "binder") ||
+	    !strcmp(sb->s_type->name, "bpf") ||
 	    !strcmp(sb->s_type->name, "pstore"))
 		sbsec->flags |= SE_SBGENFS;
 
@@ -1380,12 +1383,14 @@
 		return -ENOMEM;
 
 	context[len] = '\0';
-	rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len);
+	rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, context, len,
+			    XATTR_NOSECURITY);
 	if (rc == -ERANGE) {
 		kfree(context);
 
 		/* Need a larger buffer.  Query for the right size. */
-		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0);
+		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX, NULL, 0,
+				    XATTR_NOSECURITY);
 		if (rc < 0)
 			return rc;
 
@@ -1396,7 +1401,7 @@
 
 		context[len] = '\0';
 		rc = __vfs_getxattr(dentry, inode, XATTR_NAME_SELINUX,
-				    context, len);
+				    context, len, XATTR_NOSECURITY);
 	}
 	if (rc < 0) {
 		kfree(context);
@@ -2953,6 +2958,62 @@
 	return 0;
 }
 
+static int selinux_inode_init_security_anon(struct inode *inode,
+					    const struct qstr *name,
+					    const struct inode *context_inode)
+{
+	const struct task_security_struct *tsec = selinux_cred(current_cred());
+	struct common_audit_data ad;
+	struct inode_security_struct *isec;
+	int rc;
+
+	if (unlikely(!selinux_state.initialized))
+		return 0;
+
+	isec = selinux_inode(inode);
+
+	/*
+	 * We only get here once per ephemeral inode.  The inode has
+	 * been initialized via inode_alloc_security but is otherwise
+	 * untouched.
+	 */
+
+	if (context_inode) {
+		struct inode_security_struct *context_isec =
+			selinux_inode(context_inode);
+		if (context_isec->initialized != LABEL_INITIALIZED) {
+			pr_err("SELinux:  context_inode is not initialized");
+			return -EACCES;
+		}
+
+		isec->sclass = context_isec->sclass;
+		isec->sid = context_isec->sid;
+	} else {
+		isec->sclass = SECCLASS_ANON_INODE;
+		rc = security_transition_sid(
+			&selinux_state, tsec->sid, tsec->sid,
+			isec->sclass, name, &isec->sid);
+		if (rc)
+			return rc;
+	}
+
+	isec->initialized = LABEL_INITIALIZED;
+	/*
+	 * Now that we've initialized security, check whether we're
+	 * allowed to actually create this type of anonymous inode.
+	 */
+
+	ad.type = LSM_AUDIT_DATA_INODE;
+	ad.u.inode = inode;
+
+	return avc_has_perm(&selinux_state,
+			    tsec->sid,
+			    isec->sid,
+			    isec->sclass,
+			    FILE__CREATE,
+			    &ad);
+}
+
 static int selinux_inode_create(struct inode *dir, struct dentry *dentry, umode_t mode)
 {
 	return may_create(dir, dentry, SECCLASS_FILE);
@@ -6841,6 +6902,67 @@
 	.lbs_msg_msg = sizeof(struct msg_security_struct),
 };
 
+#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),
@@ -6888,6 +7010,7 @@
 	LSM_HOOK_INIT(inode_alloc_security, selinux_inode_alloc_security),
 	LSM_HOOK_INIT(inode_free_security, selinux_inode_free_security),
 	LSM_HOOK_INIT(inode_init_security, selinux_inode_init_security),
+	LSM_HOOK_INIT(inode_init_security_anon, selinux_inode_init_security_anon),
 	LSM_HOOK_INIT(inode_create, selinux_inode_create),
 	LSM_HOOK_INIT(inode_link, selinux_inode_link),
 	LSM_HOOK_INIT(inode_unlink, selinux_inode_unlink),
@@ -7078,6 +7201,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 32e9b03..542cbfc 100644
--- a/security/selinux/include/classmap.h
+++ b/security/selinux/include/classmap.h
@@ -116,7 +116,8 @@
 	  { COMMON_IPC_PERMS, NULL } },
 	{ "netlink_route_socket",
 	  { COMMON_SOCK_PERMS,
-	    "nlmsg_read", "nlmsg_write", NULL } },
+	    "nlmsg_read", "nlmsg_write", "nlmsg_readpriv", "nlmsg_getneigh",
+	    NULL } },
 	{ "netlink_tcpdiag_socket",
 	  { COMMON_SOCK_PERMS,
 	    "nlmsg_read", "nlmsg_write", NULL } },
@@ -241,9 +242,14 @@
 	{ "infiniband_endport",
 	  { "manage_subnet", NULL } },
 	{ "bpf",
-	  {"map_create", "map_read", "map_write", "prog_load", "prog_run"} },
+	  { "map_create", "map_read", "map_write", "prog_load", "prog_run",
+	    NULL } },
 	{ "xdp_socket",
 	  { COMMON_SOCK_PERMS, NULL } },
+	{ "perf_event",
+	  { "open", "cpu", "kernel", "tracepoint", "read", "write", NULL } },
+	{ "anon_inode",
+	  { COMMON_FILE_PERMS, NULL } },
 	{ NULL }
   };
 
diff --git a/security/selinux/include/objsec.h b/security/selinux/include/objsec.h
index 586b7ab..a4a86cb 100644
--- a/security/selinux/include/objsec.h
+++ b/security/selinux/include/objsec.h
@@ -141,7 +141,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 */
 };
 
 extern struct lsm_blob_sizes selinux_blob_sizes;
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h
index 1111212..6f5abff 100644
--- a/security/selinux/include/security.h
+++ b/security/selinux/include/security.h
@@ -105,6 +105,9 @@
 	bool checkreqprot;
 	bool initialized;
 	bool policycap[__POLICYDB_CAPABILITY_MAX];
+	bool android_netlink_route;
+	bool android_netlink_getneigh;
+
 	struct selinux_avc *avc;
 	struct selinux_ss *ss;
 };
@@ -177,6 +180,20 @@
 	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;
+}
+
+static inline bool selinux_android_nlroute_getneigh(void)
+{
+	struct selinux_state *state = &selinux_state;
+
+	return state->android_netlink_getneigh;
+}
+
 int security_mls_enabled(struct selinux_state *state);
 int security_load_policy(struct selinux_state *state,
 			 void *data, size_t len);
@@ -394,5 +411,7 @@
 extern void avtab_cache_init(void);
 extern void ebitmap_cache_init(void);
 extern void hashtab_cache_init(void);
+extern void selinux_nlmsg_init(void);
+extern int security_sidtab_hash_stats(struct selinux_state *state, char *page);
 
 #endif /* _SELINUX_SECURITY_H_ */
diff --git a/security/selinux/nlmsgtab.c b/security/selinux/nlmsgtab.c
index 58345ba..328f5ff 100644
--- a/security/selinux/nlmsgtab.c
+++ b/security/selinux/nlmsgtab.c
@@ -25,7 +25,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,43 @@
 
 	return err;
 }
+
+static void nlmsg_set_perm_for_type(u32 perm, u16 type)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(nlmsg_route_perms); i++) {
+		if (nlmsg_route_perms[i].nlmsg_type == type) {
+			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.
+ * Similarly, use nlmsg_getneigh for RTM_GETNEIGH and RTM_GETNEIGHTBL if the
+ * netlink_route_getneigh policy capability is set. Otherwise use nlmsg_read.
+ */
+void selinux_nlmsg_init(void)
+{
+	if (selinux_android_nlroute_getlink())
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_READPRIV,
+					RTM_GETLINK);
+	else
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_READ,
+					RTM_GETLINK);
+
+	if (selinux_android_nlroute_getneigh()) {
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_GETNEIGH,
+					RTM_GETNEIGH);
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_GETNEIGH,
+					RTM_GETNEIGHTBL);
+	} else {
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_READ,
+					RTM_GETNEIGH);
+		nlmsg_set_perm_for_type(NETLINK_ROUTE_SOCKET__NLMSG_READ,
+					RTM_GETNEIGHTBL);
+	}
+}
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c
index e9eaff9..5df5e71 100644
--- a/security/selinux/selinuxfs.c
+++ b/security/selinux/selinuxfs.c
@@ -1486,6 +1486,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/policydb.c b/security/selinux/ss/policydb.c
index dd7aabd..b239355 100644
--- a/security/selinux/ss/policydb.c
+++ b/security/selinux/ss/policydb.c
@@ -873,6 +873,11 @@
 			sidtab_destroy(s);
 			goto out;
 		}
+		rc = context_add_hash(p, &c->context[0]);
+		if (rc) {
+			sidtab_destroy(s);
+			goto out;
+		}
 
 		rc = sidtab_set_initial(s, c->sid[0], &c->context[0]);
 		if (rc) {
@@ -2344,6 +2349,14 @@
 	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 ((le32_to_cpu(buf[1]) & POLICYDB_CONFIG_ANDROID_NETLINK_GETNEIGH)) {
+		p->android_netlink_getneigh = 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 162d0e7..eefacd4 100644
--- a/security/selinux/ss/policydb.h
+++ b/security/selinux/ss/policydb.h
@@ -234,6 +234,8 @@
 /* The policy database */
 struct policydb {
 	int mls_enabled;
+	int android_netlink_route;
+	int android_netlink_getneigh;
 
 	/* symbol tables */
 	struct symtab symtab[SYM_NUM];
@@ -320,6 +322,8 @@
 #define PERM_SYMTAB_SIZE 32
 
 #define POLICYDB_CONFIG_MLS    1
+#define POLICYDB_CONFIG_ANDROID_NETLINK_ROUTE    (1 << 31)
+#define POLICYDB_CONFIG_ANDROID_NETLINK_GETNEIGH (1 << 30)
 
 /* 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 a0afe49..b848fb7 100644
--- a/security/selinux/ss/services.c
+++ b/security/selinux/ss/services.c
@@ -1257,6 +1257,23 @@
 
 #include "initial_sid_to_string.h"
 
+int security_sidtab_hash_stats(struct selinux_state *state, char *page)
+{
+	int rc;
+
+	if (!state->initialized) {
+		pr_err("SELinux: %s:  called before initial load_policy\n",
+		       __func__);
+		return -EINVAL;
+	}
+
+	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))
@@ -1449,6 +1466,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,
@@ -1501,7 +1554,7 @@
 		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);
@@ -1805,7 +1858,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);
@@ -1957,6 +2010,7 @@
 			context_init(newc);
 			newc->str = s;
 			newc->len = oldc->len;
+			newc->hash = oldc->hash;
 			return 0;
 		}
 		kfree(s);
@@ -2033,6 +2087,10 @@
 			goto bad;
 	}
 
+	rc = context_add_hash(args->newp, newc);
+	if (rc)
+		goto bad;
+
 	return 0;
 bad:
 	/* Map old representation to string and save it. */
@@ -2042,6 +2100,7 @@
 	context_destroy(newc);
 	newc->str = s;
 	newc->len = len;
+	newc->hash = context_compute_hash(s);
 	pr_info("SELinux:  Context %s became invalid (unmapped).\n",
 		newc->str);
 	return 0;
@@ -2066,6 +2125,10 @@
 			pr_info("SELinux:  unknown policy capability %u\n",
 				i);
 	}
+
+	state->android_netlink_route = p->android_netlink_route;
+	state->android_netlink_getneigh = p->android_netlink_getneigh;
+	selinux_nlmsg_init();
 }
 
 static int security_preserve_bools(struct selinux_state *state,
@@ -2622,12 +2685,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) {
@@ -3045,8 +3113,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);
@@ -3639,7 +3706,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;
 
diff --git a/security/selinux/ss/services.h b/security/selinux/ss/services.h
index 9a36de8..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 {
@@ -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 7d49994..d9d8599 100644
--- a/security/selinux/ss/sidtab.c
+++ b/security/selinux/ss/sidtab.c
@@ -17,26 +17,43 @@
 #include "security.h"
 #include "sidtab.h"
 
+#define index_to_sid(index) (index + SECINITSID_NUM + 1)
+#define sid_to_index(sid) (sid - (SECINITSID_NUM + 1))
+
 int sidtab_init(struct sidtab *s)
 {
 	u32 i;
 
 	memset(s->roots, 0, sizeof(s->roots));
 
-	/* max count is SIDTAB_MAX so valid index is always < SIDTAB_MAX */
-	for (i = 0; i < SIDTAB_RCACHE_SIZE; i++)
-		s->rcache[i] = SIDTAB_MAX;
-
 	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;
 }
 
+static u32 context_to_sid(struct sidtab *s, struct context *context)
+{
+	struct sidtab_entry_leaf *entry;
+	u32 sid = 0;
+
+	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;
+}
+
 int sidtab_set_initial(struct sidtab *s, u32 sid, struct context *context)
 {
 	struct sidtab_isid_entry *entry;
@@ -47,14 +64,60 @@
 
 	entry = &s->isids[sid - 1];
 
-	rc = context_cpy(&entry->context, context);
+	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);
+	}
+
 	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;
@@ -88,7 +151,8 @@
 	return 0;
 }
 
-static struct context *sidtab_do_lookup(struct sidtab *s, u32 index, int alloc)
+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;
@@ -125,7 +189,7 @@
 		if (!entry->ptr_leaf)
 			return NULL;
 	}
-	return &entry->ptr_leaf->entries[index % SIDTAB_LEAF_ENTRIES].context;
+	return &entry->ptr_leaf->entries[index % SIDTAB_LEAF_ENTRIES];
 }
 
 static struct context *sidtab_lookup(struct sidtab *s, u32 index)
@@ -136,12 +200,12 @@
 	if (index >= count)
 		return NULL;
 
-	return sidtab_do_lookup(s, index, 0);
+	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].context : NULL;
+	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)
@@ -150,7 +214,7 @@
 
 	if (sid != 0) {
 		if (sid > SECINITSID_NUM)
-			context = sidtab_lookup(s, sid - (SECINITSID_NUM + 1));
+			context = sidtab_lookup(s, sid_to_index(sid));
 		else
 			context = sidtab_lookup_initial(s, sid);
 		if (context && (!context->len || force))
@@ -170,117 +234,30 @@
 	return sidtab_search_core(s, sid, 1);
 }
 
-static int sidtab_find_context(union sidtab_entry_inner entry,
-			       u32 *pos, u32 count, u32 level,
-			       struct context *context, u32 *index)
-{
-	int rc;
-	u32 i;
-
-	if (level != 0) {
-		struct sidtab_node_inner *node = entry.ptr_inner;
-
-		i = 0;
-		while (i < SIDTAB_INNER_ENTRIES && *pos < count) {
-			rc = sidtab_find_context(node->entries[i],
-						 pos, count, level - 1,
-						 context, index);
-			if (rc == 0)
-				return 0;
-			i++;
-		}
-	} else {
-		struct sidtab_node_leaf *node = entry.ptr_leaf;
-
-		i = 0;
-		while (i < SIDTAB_LEAF_ENTRIES && *pos < count) {
-			if (context_cmp(&node->entries[i].context, context)) {
-				*index = *pos;
-				return 0;
-			}
-			(*pos)++;
-			i++;
-		}
-	}
-	return -ENOENT;
-}
-
-static void sidtab_rcache_update(struct sidtab *s, u32 index, u32 pos)
-{
-	while (pos > 0) {
-		WRITE_ONCE(s->rcache[pos], READ_ONCE(s->rcache[pos - 1]));
-		--pos;
-	}
-	WRITE_ONCE(s->rcache[0], index);
-}
-
-static void sidtab_rcache_push(struct sidtab *s, u32 index)
-{
-	sidtab_rcache_update(s, index, SIDTAB_RCACHE_SIZE - 1);
-}
-
-static int sidtab_rcache_search(struct sidtab *s, struct context *context,
-				u32 *index)
-{
-	u32 i;
-
-	for (i = 0; i < SIDTAB_RCACHE_SIZE; i++) {
-		u32 v = READ_ONCE(s->rcache[i]);
-
-		if (v >= SIDTAB_MAX)
-			continue;
-
-		if (context_cmp(sidtab_do_lookup(s, v, 0), context)) {
-			sidtab_rcache_update(s, v, i);
-			*index = v;
-			return 0;
-		}
-	}
-	return -ENOENT;
-}
-
-static int sidtab_reverse_lookup(struct sidtab *s, struct context *context,
-				 u32 *index)
+int sidtab_context_to_sid(struct sidtab *s, struct context *context,
+			  u32 *sid)
 {
 	unsigned long flags;
-	u32 count, count_locked, level, pos;
+	u32 count;
 	struct sidtab_convert_params *convert;
-	struct context *dst, *dst_convert;
+	struct sidtab_entry_leaf *dst, *dst_convert;
 	int rc;
 
-	rc = sidtab_rcache_search(s, context, index);
-	if (rc == 0)
+	*sid = context_to_sid(s, context);
+	if (*sid)
 		return 0;
 
-	/* read entries only after reading count */
-	count = smp_load_acquire(&s->count);
-	level = sidtab_level_from_count(count);
-
-	pos = 0;
-	rc = sidtab_find_context(s->roots[level], &pos, count, level,
-				 context, index);
-	if (rc == 0) {
-		sidtab_rcache_push(s, *index);
-		return 0;
-	}
-
 	/* lock-free search failed: lock, re-search, and insert if not found */
 	spin_lock_irqsave(&s->lock, flags);
 
-	convert = s->convert;
-	count_locked = s->count;
-	level = sidtab_level_from_count(count_locked);
+	rc = 0;
+	*sid = context_to_sid(s, context);
+	if (*sid)
+		goto out_unlock;
 
-	/* if count has changed before we acquired the lock, then catch up */
-	while (count < count_locked) {
-		if (context_cmp(sidtab_do_lookup(s, count, 0), context)) {
-			sidtab_rcache_push(s, count);
-			*index = count;
-			rc = 0;
-			goto out_unlock;
-		}
-		++count;
-	}
+	/* 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;
@@ -293,7 +270,9 @@
 	if (!dst)
 		goto out_unlock;
 
-	rc = context_cpy(dst, context);
+	dst->sid = index_to_sid(count);
+
+	rc = context_cpy(&dst->context, context);
 	if (rc)
 		goto out_unlock;
 
@@ -305,29 +284,32 @@
 		rc = -ENOMEM;
 		dst_convert = sidtab_do_lookup(convert->target, count, 1);
 		if (!dst_convert) {
-			context_destroy(dst);
+			context_destroy(&dst->context);
 			goto out_unlock;
 		}
 
-		rc = convert->func(context, dst_convert, convert->args);
+		rc = convert->func(context, &dst_convert->context,
+				convert->args);
 		if (rc) {
-			context_destroy(dst);
+			context_destroy(&dst->context);
 			goto out_unlock;
 		}
-
-		/* at this point we know the insert won't fail */
+		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);
 	}
 
 	if (context->len)
 		pr_info("SELinux:  Context %s is not valid (left unmapped).\n",
 			context->str);
 
-	sidtab_rcache_push(s, count);
-	*index = count;
+	*sid = index_to_sid(count);
 
-	/* write entries before writing new 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:
@@ -335,25 +317,19 @@
 	return rc;
 }
 
-int sidtab_context_to_sid(struct sidtab *s, struct context *context, u32 *sid)
+static void sidtab_convert_hashtable(struct sidtab *s, u32 count)
 {
-	int rc;
+	struct sidtab_entry_leaf *entry;
 	u32 i;
 
-	for (i = 0; i < SECINITSID_NUM; i++) {
-		struct sidtab_isid_entry *entry = &s->isids[i];
+	for (i = 0; i < count; i++) {
+		entry = sidtab_do_lookup(s, i, 0);
+		entry->sid = index_to_sid(i);
 
-		if (entry->set && context_cmp(context, &entry->context)) {
-			*sid = i + 1;
-			return 0;
-		}
+		hash_add_rcu(s->context_to_sid, &entry->list,
+				entry->context.hash);
+
 	}
-
-	rc = sidtab_reverse_lookup(s, context, sid);
-	if (rc)
-		return rc;
-	*sid += SECINITSID_NUM + 1;
-	return 0;
 }
 
 static int sidtab_convert_tree(union sidtab_entry_inner *edst,
@@ -400,6 +376,7 @@
 		}
 		cond_resched();
 	}
+
 	return 0;
 }
 
@@ -435,7 +412,7 @@
 	/* enable live convert of new entries */
 	s->convert = params;
 
-	/* we can safely do the rest of the conversion outside the lock */
+	/* 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);
@@ -449,8 +426,17 @@
 		spin_lock_irqsave(&s->lock, flags);
 		s->convert = NULL;
 		spin_unlock_irqrestore(&s->lock, flags);
+		return rc;
 	}
-	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;
 }
 
 static void sidtab_destroy_tree(union sidtab_entry_inner entry, u32 level)
@@ -484,11 +470,16 @@
 
 	for (i = 0; i < SECINITSID_NUM; i++)
 		if (s->isids[i].set)
-			context_destroy(&s->isids[i].context);
+			context_destroy(&s->isids[i].leaf.context);
 
 	level = SIDTAB_MAX_LEVEL;
 	while (level && !s->roots[level].ptr_inner)
 		--level;
 
 	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 1f47631..e280940 100644
--- a/security/selinux/ss/sidtab.h
+++ b/security/selinux/ss/sidtab.h
@@ -13,11 +13,14 @@
 
 #include <linux/spinlock_types.h>
 #include <linux/log2.h>
+#include <linux/hashtable.h>
 
 #include "context.h"
 
 struct sidtab_entry_leaf {
+	u32 sid;
 	struct context context;
+	struct hlist_node list;
 };
 
 struct sidtab_node_inner;
@@ -57,7 +60,7 @@
 
 struct sidtab_isid_entry {
 	int set;
-	struct context context;
+	struct sidtab_entry_leaf leaf;
 };
 
 struct sidtab_convert_params {
@@ -66,7 +69,8 @@
 	struct sidtab *target;
 };
 
-#define SIDTAB_RCACHE_SIZE 3
+#define SIDTAB_HASH_BITS CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS
+#define SIDTAB_HASH_BUCKETS (1 << SIDTAB_HASH_BITS)
 
 struct sidtab {
 	/*
@@ -83,11 +87,11 @@
 	struct sidtab_convert_params *convert;
 	spinlock_t lock;
 
-	/* reverse lookup cache - access atomically via {READ|WRITE}_ONCE() */
-	u32 rcache[SIDTAB_RCACHE_SIZE];
-
 	/* 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);
@@ -101,6 +105,8 @@
 
 void sidtab_destroy(struct sidtab *s);
 
+int sidtab_hash_stats(struct sidtab *sidtab, char *page);
+
 #endif	/* _SS_SIDTAB_H_ */
 
 
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
index 12c0fa8..302bec7 100644
--- a/security/smack/smack_lsm.c
+++ b/security/smack/smack_lsm.c
@@ -290,7 +290,8 @@
 	if (buffer == NULL)
 		return ERR_PTR(-ENOMEM);
 
-	rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL);
+	rc = __vfs_getxattr(dp, ip, name, buffer, SMK_LONGLABEL,
+			    XATTR_NOSECURITY);
 	if (rc < 0)
 		skp = ERR_PTR(rc);
 	else if (rc == 0)
@@ -3428,7 +3429,7 @@
 			} else {
 				rc = __vfs_getxattr(dp, inode,
 					XATTR_NAME_SMACKTRANSMUTE, trattr,
-					TRANS_TRUE_SIZE);
+					TRANS_TRUE_SIZE, XATTR_NOSECURITY);
 				if (rc >= 0 && strncmp(trattr, TRANS_TRUE,
 						       TRANS_TRUE_SIZE) != 0)
 					rc = -EINVAL;
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index fd300c3..3db0157 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -2051,6 +2051,8 @@
 	struct snd_pcm_runtime *runtime;
 	if (PCM_RUNTIME_CHECK(substream))
 		return -ENXIO;
+	if (substream->hw_no_buffer)
+		snd_printd("%s: warning this PCM is host less\n", __func__);
 	runtime = substream->runtime;
 	if (snd_BUG_ON(!substream->ops->copy_user && !runtime->dma_area))
 		return -EINVAL;
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 0c5b7a54..def3eb2 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -1219,6 +1219,7 @@
 	if (runtime->status->state != SNDRV_PCM_STATE_PREPARED)
 		return -EBADFD;
 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK &&
+	    !substream->hw_no_buffer &&
 	    !snd_pcm_playback_data(substream))
 		return -EPIPE;
 	runtime->trigger_tstamp_latched = false;
diff --git a/sound/soc/hisilicon/Kconfig b/sound/soc/hisilicon/Kconfig
index df8fbd8..93f0f28 100644
--- a/sound/soc/hisilicon/Kconfig
+++ b/sound/soc/hisilicon/Kconfig
@@ -1,6 +1,12 @@
 # SPDX-License-Identifier: GPL-2.0-only
 config SND_I2S_HI6210_I2S
-	tristate "Hisilicon I2S controller"
+	tristate "Hisilicon Hi6210 I2S controller"
+	select SND_SOC_GENERIC_DMAENGINE_PCM
+	help
+	  Hisilicon I2S
+
+config SND_I2S_HI3660_I2S
+	tristate "Hisilicon 960 I2S controller"
 	select SND_SOC_GENERIC_DMAENGINE_PCM
 	help
 	  Hisilicon I2S
diff --git a/sound/soc/hisilicon/Makefile b/sound/soc/hisilicon/Makefile
index 02e7663..7ca808c 100644
--- a/sound/soc/hisilicon/Makefile
+++ b/sound/soc/hisilicon/Makefile
@@ -1,2 +1,3 @@
 # SPDX-License-Identifier: GPL-2.0-only
 obj-$(CONFIG_SND_I2S_HI6210_I2S) += hi6210-i2s.o
+obj-$(CONFIG_SND_I2S_HI3660_I2S) += hi3660-i2s.o
diff --git a/sound/soc/hisilicon/hi3660-i2s.c b/sound/soc/hisilicon/hi3660-i2s.c
new file mode 100644
index 0000000..b894007
--- /dev/null
+++ b/sound/soc/hisilicon/hi3660-i2s.c
@@ -0,0 +1,448 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * linux/sound/soc/hisilicon/hi3660-i2s.c
+ *
+ * I2S IP driver for hi3660.
+ *
+ * Copyright (c) 2001-2021, Huawei Tech. Co., Ltd.
+ */
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/device.h>
+#include <linux/delay.h>
+#include <linux/clk.h>
+#include <linux/jiffies.h>
+#include <linux/io.h>
+#include <linux/gpio.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/dmaengine_pcm.h>
+#include <sound/initval.h>
+#include <sound/soc.h>
+#include <linux/interrupt.h>
+#include <linux/reset.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/reset-controller.h>
+#include <linux/clk.h>
+#include <linux/regulator/consumer.h>
+
+#include "hi3660-i2s.h"
+
+struct hi3660_i2s {
+	struct device *dev;
+	struct reset_control *rc;
+	int clocks;
+	struct regulator *regu_asp;
+	struct pinctrl *pctrl;
+	struct pinctrl_state *pin_default;
+	struct pinctrl_state *pin_idle;
+	struct clk *asp_subsys_clk;
+	struct snd_soc_dai_driver dai;
+	void __iomem *base;
+	void __iomem *base_syscon;
+	phys_addr_t base_phys;
+	struct snd_dmaengine_dai_dma_data dma_data[2];
+	spinlock_t lock;
+	int rate;
+	int format;
+	int bits;
+	int channels;
+	u32 master;
+	u32 status;
+};
+
+static void update_bits(struct hi3660_i2s *i2s, u32 ofs, u32 reset, u32 set)
+{
+	u32 val = readl(i2s->base + ofs) & ~reset;
+
+	writel(val | set, i2s->base + ofs);
+}
+
+static void update_bits_syscon(struct hi3660_i2s *i2s,
+			u32 ofs, u32 reset, u32 set)
+{
+	u32 val = readl(i2s->base_syscon + ofs) & ~reset;
+
+	writel(val | set, i2s->base_syscon + ofs);
+}
+
+static int enable_format(struct hi3660_i2s *i2s,
+			       struct snd_pcm_substream *substream)
+{
+	switch (i2s->format & SND_SOC_DAIFMT_MASTER_MASK) {
+	case SND_SOC_DAIFMT_CBM_CFM:
+		i2s->master = false;
+		update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+				0, HI_ASP_CFG_R_CLK_SEL_EN);
+		break;
+	case SND_SOC_DAIFMT_CBS_CFS:
+		i2s->master = true;
+		update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+				HI_ASP_CFG_R_CLK_SEL_EN, 0);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int startup(struct snd_pcm_substream *substream,
+		     struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	/* deassert reset on sio_bt*/
+	update_bits_syscon(i2s, HI_ASP_CFG_R_RST_CTRLDIS_REG,
+			0, BIT(2)|BIT(6)|BIT(8)|BIT(16));
+
+	/* enable clk before frequency division */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_GATE_EN_REG,
+			0, BIT(5)|BIT(6));
+
+	/* enable frequency division */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_GATE_CLKDIV_EN_REG,
+			0, BIT(2)|BIT(5));
+
+	/* select clk */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK_SEL_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK_SEL);
+
+	/* select clk_div */
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK1_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK1_DIV_SEL);
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK4_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK4_DIV_SEL);
+	update_bits_syscon(i2s, HI_ASP_CFG_R_CLK6_DIV_REG,
+			HI_ASP_MASK, HI_ASP_CFG_R_CLK6_DIV_SEL);
+
+	/* sio config */
+	update_bits(i2s, HI_ASP_SIO_MODE_REG, HI_ASP_MASK, 0x0);
+	update_bits(i2s, HI_ASP_SIO_DATA_WIDTH_SET_REG, HI_ASP_MASK, 0x9);
+	update_bits(i2s, HI_ASP_SIO_I2S_POS_MERGE_EN_REG, HI_ASP_MASK, 0x1);
+	update_bits(i2s, HI_ASP_SIO_I2S_START_POS_REG, HI_ASP_MASK, 0x0);
+
+	return 0;
+}
+
+static void shutdown(struct snd_pcm_substream *substream,
+		       struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	if (!IS_ERR_OR_NULL(i2s->asp_subsys_clk))
+		clk_disable_unprepare(i2s->asp_subsys_clk);
+}
+
+static void txctrl(struct snd_soc_dai *cpu_dai, int on)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	spin_lock(&i2s->lock);
+
+	if (on) {
+		/* enable SIO TX */
+		update_bits(i2s, HI_ASP_SIO_CT_SET_REG, 0,
+			HI_ASP_SIO_TX_ENABLE |
+			HI_ASP_SIO_TX_DATA_MERGE |
+			HI_ASP_SIO_TX_FIFO_THRESHOLD |
+			HI_ASP_SIO_RX_ENABLE |
+			HI_ASP_SIO_RX_DATA_MERGE |
+			HI_ASP_SIO_RX_FIFO_THRESHOLD);
+	} else {
+		/* disable SIO TX */
+		update_bits(i2s, HI_ASP_SIO_CT_CLR_REG, 0,
+			HI_ASP_SIO_TX_ENABLE | HI_ASP_SIO_RX_ENABLE);
+	}
+	spin_unlock(&i2s->lock);
+}
+
+static void rxctrl(struct snd_soc_dai *cpu_dai, int on)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	spin_lock(&i2s->lock);
+	if (on)
+		/* enable SIO RX */
+		update_bits(i2s, HI_ASP_SIO_CT_SET_REG, 0,
+			HI_ASP_SIO_TX_ENABLE |
+			HI_ASP_SIO_TX_DATA_MERGE |
+			HI_ASP_SIO_TX_FIFO_THRESHOLD |
+			HI_ASP_SIO_RX_ENABLE |
+			HI_ASP_SIO_RX_DATA_MERGE |
+			HI_ASP_SIO_RX_FIFO_THRESHOLD);
+	else
+		/* disable SIO RX */
+		update_bits(i2s, HI_ASP_SIO_CT_CLR_REG, 0,
+			HI_ASP_SIO_TX_ENABLE | HI_ASP_SIO_RX_ENABLE);
+	spin_unlock(&i2s->lock);
+}
+
+static int set_sysclk(struct snd_soc_dai *cpu_dai,
+			     int clk_id, unsigned int freq, int dir)
+{
+	return 0;
+}
+
+static int set_format(struct snd_soc_dai *cpu_dai, unsigned int fmt)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+
+	i2s->format = fmt;
+	i2s->master = (i2s->format & SND_SOC_DAIFMT_MASTER_MASK) ==
+		      SND_SOC_DAIFMT_CBS_CFS;
+
+	return 0;
+}
+
+static int hw_params(struct snd_pcm_substream *substream,
+			    struct snd_pcm_hw_params *params,
+			    struct snd_soc_dai *cpu_dai)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(cpu_dai->dev);
+	struct snd_dmaengine_dai_dma_data *dma_data;
+
+	dma_data = snd_soc_dai_get_dma_data(cpu_dai, substream);
+
+	enable_format(i2s, substream);
+
+	dma_data->maxburst = 4;
+
+	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+		dma_data->addr = i2s->base_phys +
+			HI_ASP_SIO_I2S_DUAL_TX_CHN_REG;
+	else
+		dma_data->addr = i2s->base_phys +
+			HI_ASP_SIO_I2S_DUAL_RX_CHN_REG;
+
+	switch (params_format(params)) {
+	case SNDRV_PCM_FORMAT_U16_LE:
+	case SNDRV_PCM_FORMAT_S16_LE:
+		i2s->bits = 16;
+		dma_data->addr_width = 4;
+		break;
+
+	case SNDRV_PCM_FORMAT_U24_LE:
+	case SNDRV_PCM_FORMAT_S24_LE:
+		i2s->bits = 32;
+		dma_data->addr_width = 4;
+		break;
+	default:
+		dev_err(cpu_dai->dev, "Bad format\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int trigger(struct snd_pcm_substream *substream, int cmd,
+			  struct snd_soc_dai *cpu_dai)
+{
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+			rxctrl(cpu_dai, 1);
+		else
+			txctrl(cpu_dai, 1);
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
+		if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
+			rxctrl(cpu_dai, 0);
+		else
+			txctrl(cpu_dai, 0);
+		break;
+	default:
+		dev_err(cpu_dai->dev, "unknown cmd\n");
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int dai_probe(struct snd_soc_dai *dai)
+{
+	struct hi3660_i2s *i2s = snd_soc_dai_get_drvdata(dai);
+
+	snd_soc_dai_init_dma_data(dai,
+		&i2s->dma_data[SNDRV_PCM_STREAM_PLAYBACK],
+		&i2s->dma_data[SNDRV_PCM_STREAM_CAPTURE]);
+
+	return 0;
+}
+
+
+static struct snd_soc_dai_ops dai_ops = {
+	.trigger	= trigger,
+	.hw_params	= hw_params,
+	.set_fmt	= set_format,
+	.set_sysclk	= set_sysclk,
+	.startup	= startup,
+	.shutdown	= shutdown,
+};
+
+static struct snd_soc_dai_driver dai_init = {
+	.name = "hi3660_i2s",
+	.probe = dai_probe,
+	.playback = {
+		.channels_min = 2,
+		.channels_max = 2,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE |
+			   SNDRV_PCM_FMTBIT_U16_LE,
+		.rates = SNDRV_PCM_RATE_48000,
+	},
+	.capture = {
+		.channels_min = 2,
+		.channels_max = 2,
+		.formats = SNDRV_PCM_FMTBIT_S16_LE |
+			   SNDRV_PCM_FMTBIT_U16_LE,
+		.rates = SNDRV_PCM_RATE_48000,
+	},
+	.ops = &dai_ops,
+};
+
+static const struct snd_soc_component_driver component_driver = {
+	.name = "hi3660_i2s",
+};
+
+#include <sound/dmaengine_pcm.h>
+
+static const struct snd_pcm_hardware sound_hardware = {
+	.info = SNDRV_PCM_INFO_MMAP |
+		SNDRV_PCM_INFO_MMAP_VALID |
+		SNDRV_PCM_INFO_PAUSE |
+		SNDRV_PCM_INFO_RESUME |
+		SNDRV_PCM_INFO_INTERLEAVED |
+		SNDRV_PCM_INFO_HALF_DUPLEX,
+	.period_bytes_min = 4096,
+	.period_bytes_max = 4096,
+	.periods_min = 4,
+	.periods_max = UINT_MAX,
+	.buffer_bytes_max = SIZE_MAX,
+};
+
+static const struct snd_dmaengine_pcm_config dmaengine_pcm_config = {
+	.pcm_hardware = &sound_hardware,
+	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
+	.prealloc_buffer_size = 64 * 1024,
+};
+
+static int hi3660_i2s_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct hi3660_i2s *i2s;
+	struct resource *res;
+	int ret;
+
+	i2s = devm_kzalloc(dev, sizeof(*i2s), GFP_KERNEL);
+	if (!i2s)
+		return -ENOMEM;
+
+	i2s->dev = dev;
+	spin_lock_init(&i2s->lock);
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
+		ret = -ENODEV;
+		return ret;
+	}
+	i2s->base_phys = (phys_addr_t)res->start;
+
+	i2s->dai = dai_init;
+	dev_set_drvdata(&pdev->dev, i2s);
+
+	i2s->base = devm_ioremap_resource(dev, res);
+	if (IS_ERR(i2s->base)) {
+		dev_err(&pdev->dev, "ioremap failed\n");
+		ret = PTR_ERR(i2s->base);
+		return ret;
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+	if (!res) {
+		ret = -ENODEV;
+		return ret;
+	}
+	i2s->base_syscon = devm_ioremap(dev, res->start, resource_size(res));
+	if (IS_ERR(i2s->base_syscon)) {
+		dev_err(&pdev->dev, "ioremap failed\n");
+		ret = PTR_ERR(i2s->base_syscon);
+		return ret;
+	}
+
+	/* i2s iomux config */
+	i2s->pctrl = devm_pinctrl_get(dev);
+	if (IS_ERR(i2s->pctrl)) {
+		dev_err(dev, "could not get pinctrl\n");
+		ret = -EIO;
+		return ret;
+	}
+
+	i2s->pin_default = pinctrl_lookup_state(i2s->pctrl,
+					PINCTRL_STATE_DEFAULT);
+	if (IS_ERR(i2s->pin_default)) {
+		dev_err(dev,
+			"could not get default state (%li)\n",
+			PTR_ERR(i2s->pin_default));
+		ret = -EIO;
+		return ret;
+	}
+
+	if (pinctrl_select_state(i2s->pctrl, i2s->pin_default)) {
+		dev_err(dev, "could not set pins to default state\n");
+		ret = -EIO;
+		return ret;
+	}
+
+	ret = devm_snd_dmaengine_pcm_register(&pdev->dev,
+				&dmaengine_pcm_config, 0);
+	if (ret)
+		return ret;
+
+	ret = snd_soc_register_component(&pdev->dev, &component_driver,
+				&i2s->dai, 1);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register dai\n");
+		return ret;
+	}
+
+	return 0;
+}
+
+static int hi3660_i2s_remove(struct platform_device *pdev)
+{
+	struct hi3660_i2s *i2s = dev_get_drvdata(&pdev->dev);
+
+	snd_soc_unregister_component(&pdev->dev);
+	dev_set_drvdata(&pdev->dev, NULL);
+
+	pinctrl_put(i2s->pctrl);
+
+	return 0;
+}
+
+static const struct of_device_id dt_ids[] = {
+	{ .compatible = "hisilicon,hi3660-i2s-1.0" },
+	{ /* sentinel */ }
+};
+
+MODULE_DEVICE_TABLE(of, dt_ids);
+
+static struct platform_driver local_platform_driver = {
+	.probe = hi3660_i2s_probe,
+	.remove = hi3660_i2s_remove,
+	.driver = {
+		.name = "hi3660_i2s",
+		.owner = THIS_MODULE,
+		.of_match_table = dt_ids,
+	},
+};
+
+module_platform_driver(local_platform_driver);
+
+MODULE_DESCRIPTION("Hisilicon I2S driver");
+MODULE_AUTHOR("Guangke Ji <j00209069@notesmail.huawei.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/hisilicon/hi3660-i2s.h b/sound/soc/hisilicon/hi3660-i2s.h
new file mode 100644
index 0000000..1874855
--- /dev/null
+++ b/sound/soc/hisilicon/hi3660-i2s.h
@@ -0,0 +1,99 @@
+/* SPDX-License-Identifier: GPL-2.0+
+ *
+ * linux/sound/soc/hisilicon/hi3660-i2s.c
+ *
+ * I2S IP driver for hi3660.
+ *
+ * Copyright (c) 2001-2021, Huawei Tech. Co., Ltd.
+ *
+ */
+
+#ifndef _HI3660_I2S_H
+#define _HI3660_I2S_H
+
+enum hisi_bits {
+	HII2S_BITS_16,
+	HII2S_BITS_18,
+	HII2S_BITS_20,
+	HII2S_BITS_24,
+};
+
+enum hisi_i2s_rates {
+	HII2S_FS_RATE_8KHZ = 0,
+	HII2S_FS_RATE_16KHZ = 1,
+	HII2S_FS_RATE_32KHZ = 2,
+	HII2S_FS_RATE_48KHZ = 4,
+	HII2S_FS_RATE_96KHZ = 5,
+	HII2S_FS_RATE_192KHZ = 6,
+};
+
+#define HI_ASP_CFG_R_RST_CTRLEN_REG		0x0
+#define HI_ASP_CFG_R_RST_CTRLDIS_REG		0x4
+#define HI_ASP_CFG_R_GATE_EN_REG		0xC
+#define HI_ASP_CFG_R_GATE_DIS_REG		0x10
+#define HI_ASP_CFG_R_GATE_CLKEN_REG		0x14
+#define HI_ASP_CFG_R_GATE_CLKSTAT_REG		0x18
+#define HI_ASP_CFG_R_GATE_CLKDIV_EN_REG		0x1C
+#define HI_ASP_CFG_R_CLK1_DIV_REG		0x20
+#define HI_ASP_CFG_R_CLK2_DIV_REG		0x24
+#define HI_ASP_CFG_R_CLK3_DIV_REG		0x28
+#define HI_ASP_CFG_R_CLK4_DIV_REG		0x2C
+#define HI_ASP_CFG_R_CLK5_DIV_REG		0x30
+#define HI_ASP_CFG_R_CLK6_DIV_REG		0x34
+#define HI_ASP_CFG_R_CLK_SEL_REG		0x38
+#define HI_ASP_CFG_R_SEC_REG			0x100
+
+
+#define HI_ASP_SIO_VERSION_REG			(0x3C)
+#define HI_ASP_SIO_MODE_REG			(0x40)
+#define HI_ASP_SIO_INTSTATUS_REG		(0x44)
+#define HI_ASP_SIO_INTCLR_REG			(0x48)
+#define HI_ASP_SIO_I2S_LEFT_XD_REG		(0x4C)
+#define HI_ASP_SIO_I2S_RIGHT_XD_REG		(0x50)
+#define HI_ASP_SIO_I2S_LEFT_RD_REG		(0x54)
+#define HI_ASP_SIO_I2S_RIGHT_RD_REG		(0x58)
+#define HI_ASP_SIO_CT_SET_REG			(0x5C)
+#define HI_ASP_SIO_CT_CLR_REG			(0x60)
+#define HI_ASP_SIO_RX_STA_REG			(0x68)
+#define HI_ASP_SIO_TX_STA_REG			(0x6C)
+#define HI_ASP_SIO_DATA_WIDTH_SET_REG		(0x78)
+#define HI_ASP_SIO_I2S_START_POS_REG		(0x7C)
+#define HI_ASP_SIO_I2S_POS_FLAG_REG		(0x80)
+#define HI_ASP_SIO_SIGNED_EXT_REG		(0x84)
+#define HI_ASP_SIO_I2S_POS_MERGE_EN_REG		(0x88)
+#define HI_ASP_SIO_INTMASK_REG			(0x8C)
+#define HI_ASP_SIO_I2S_DUAL_RX_CHN_REG		(0xA0)
+#define HI_ASP_SIO_I2S_DUAL_TX_CHN_REG		(0xC0)
+
+
+#define HI_ASP_CFG_R_CLK_SEL_EN			BIT(2)
+#define HI_ASP_CFG_R_CLK_SEL			0x140010
+#define HI_ASP_CFG_R_CLK1_DIV_SEL		0xbcdc9a
+#define HI_ASP_CFG_R_CLK4_DIV_SEL		0x00ff000f
+#define HI_ASP_CFG_R_CLK6_DIV_SEL		0x00ff003f
+#define HI_ASP_CFG_SIO_MODE			0
+#define HI_ASP_SIO_MODE_SEL_EN			BIT(0)
+#define HI_ASP_MASK				0xffffffff
+
+#define HI_ASP_SIO_RX_ENABLE			BIT(13)
+#define HI_ASP_SIO_TX_ENABLE			BIT(12)
+#define HI_ASP_SIO_RX_FIFO_DISABLE		BIT(11)
+#define HI_ASP_SIO_TX_FIFO_DISABLE		BIT(10)
+#define HI_ASP_SIO_RX_DATA_MERGE		BIT(9)
+#define HI_ASP_SIO_TX_DATA_MERGE		BIT(8)
+#define HI_ASP_SIO_RX_FIFO_THRESHOLD		(0x5 << 4)
+#define HI_ASP_SIO_TX_FIFO_THRESHOLD		(0xB << 0)
+#define HI_ASP_SIO_RX_FIFO_THRESHOLD_CLR	(0xF << 4)
+#define HI_ASP_SIO_TX_FIFO_THRESHOLD_CLR	(0xF << 0)
+#define HI_ASP_SIO_BURST			(0x4)
+
+
+enum hisi_i2s_formats {
+	HII2S_FORMAT_I2S,
+	HII2S_FORMAT_PCM_STD,
+	HII2S_FORMAT_PCM_USER,
+	HII2S_FORMAT_LEFT_JUST,
+	HII2S_FORMAT_RIGHT_JUST,
+};
+
+#endif/* _HI3660_I2S_H */
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index c0e03cc..b6f325e 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3351,6 +3351,39 @@
 }
 EXPORT_SYMBOL_GPL(snd_soc_get_dai_id);
 
+/**
+ * snd_soc_info_multi_ext - external single mixer info callback
+ * @kcontrol: mixer control
+ * @uinfo: control element information
+ *
+ * Callback to provide information about a single external mixer control.
+ * that accepts multiple input.
+ *
+ * Returns 0 for success.
+ */
+int snd_soc_info_multi_ext(struct snd_kcontrol *kcontrol,
+	struct snd_ctl_elem_info *uinfo)
+{
+	struct soc_multi_mixer_control *mc =
+		(struct soc_multi_mixer_control *)kcontrol->private_value;
+	int platform_max;
+
+	if (!mc->platform_max)
+		mc->platform_max = mc->max;
+	platform_max = mc->platform_max;
+
+	if (platform_max == 1 && !strnstr(kcontrol->id.name, " Volume", 30))
+		uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	else
+		uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+
+	uinfo->count = mc->count;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = platform_max;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_soc_info_multi_ext);
+
 int snd_soc_get_dai_name(struct of_phandle_args *args,
 				const char **dai_name)
 {
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 1196167..0ff61b3 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -19,6 +19,7 @@
 #include <linux/workqueue.h>
 #include <linux/export.h>
 #include <linux/debugfs.h>
+#include <linux/dma-mapping.h>
 #include <sound/core.h>
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
@@ -28,6 +29,27 @@
 
 #define DPCM_MAX_BE_USERS	8
 
+/* ASoC no host IO hardware */
+static const struct snd_pcm_hardware no_host_hardware = {
+	.info			= SNDRV_PCM_INFO_MMAP |
+				  SNDRV_PCM_INFO_MMAP_VALID |
+				  SNDRV_PCM_INFO_INTERLEAVED |
+				  SNDRV_PCM_INFO_PAUSE |
+				  SNDRV_PCM_INFO_RESUME,
+	.formats		= SNDRV_PCM_FMTBIT_S16_LE |
+				  SNDRV_PCM_FMTBIT_S32_LE,
+	.period_bytes_min	= PAGE_SIZE >> 2,
+	.period_bytes_max	= PAGE_SIZE >> 1,
+	.periods_min		= 2,
+	.periods_max		= 4,
+	/*
+	 * Increase the max buffer bytes as PAGE_SIZE bytes is
+	 * not enough to encompass all the scenarios sent by
+	 * userspapce.
+	 */
+	.buffer_bytes_max	= PAGE_SIZE * 4,
+};
+
 /**
  * snd_soc_runtime_activate() - Increment active count for PCM runtime components
  * @rtd: ASoC PCM runtime that is activated
@@ -138,6 +160,8 @@
 	const struct snd_pcm_hardware *hw)
 {
 	struct snd_pcm_runtime *runtime = substream->runtime;
+	if (!runtime)
+		return 0;
 	runtime->hw.info = hw->info;
 	runtime->hw.formats = hw->formats;
 	runtime->hw.period_bytes_min = hw->period_bytes_min;
@@ -508,6 +532,9 @@
 
 	mutex_lock_nested(&rtd->card->pcm_mutex, rtd->card->pcm_subclass);
 
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST)
+		snd_soc_set_runtime_hwparams(substream, &no_host_hardware);
+
 	/* startup the audio subsystem */
 	ret = snd_soc_dai_startup(cpu_dai, substream);
 	if (ret < 0) {
@@ -882,6 +909,16 @@
 	if (ret)
 		goto out;
 
+	/* perform any hw_params fixups */
+	if ((rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST) &&
+				rtd->dai_link->be_hw_params_fixup) {
+		ret = rtd->dai_link->be_hw_params_fixup(rtd,
+				params);
+		if (ret < 0)
+			dev_err(rtd->card->dev, "ASoC: fixup failed for %s\n",
+				rtd->dai_link->name);
+	}
+
 	if (rtd->dai_link->ops->hw_params) {
 		ret = rtd->dai_link->ops->hw_params(substream, params);
 		if (ret < 0) {
@@ -963,6 +1000,20 @@
 	}
 	component = NULL;
 
+	/* malloc a page for hostless IO */
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST) {
+		substream->dma_buffer.dev.type = SNDRV_DMA_TYPE_DEV;
+		substream->dma_buffer.dev.dev = rtd->dev;
+		substream->dma_buffer.dev.dev->coherent_dma_mask =
+					DMA_BIT_MASK(sizeof(dma_addr_t) * 8);
+		substream->dma_buffer.private_data = NULL;
+
+		arch_setup_dma_ops(substream->dma_buffer.dev.dev,
+				   0, 0, NULL, 0);
+		ret = snd_pcm_lib_malloc_pages(substream, PAGE_SIZE);
+		if (ret < 0)
+			goto component_err;
+	}
 out:
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return ret;
@@ -1045,6 +1096,8 @@
 
 	snd_soc_dai_hw_free(cpu_dai, substream);
 
+	if (rtd->dai_link->no_host_mode == SND_SOC_DAI_LINK_NO_HOST)
+		snd_pcm_lib_free_pages(substream);
 	mutex_unlock(&rtd->card->pcm_mutex);
 	return 0;
 }
@@ -2878,6 +2931,7 @@
 	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 	struct snd_soc_rtdcom_list *rtdcom;
 	struct snd_pcm *pcm;
+	struct snd_pcm_str *stream;
 	char new_name[64];
 	int ret = 0, playback = 0, capture = 0;
 	int i;
@@ -2967,6 +3021,22 @@
 		goto out;
 	}
 
+	/* setup any hostless PCMs - i.e. no host IO is performed */
+	if (rtd->dai_link->no_host_mode) {
+		if (pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream) {
+			stream = &pcm->streams[SNDRV_PCM_STREAM_PLAYBACK];
+			stream->substream->hw_no_buffer = 1;
+			snd_soc_set_runtime_hwparams(stream->substream,
+						     &no_host_hardware);
+		}
+		if (pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream) {
+			stream = &pcm->streams[SNDRV_PCM_STREAM_CAPTURE];
+			stream->substream->hw_no_buffer = 1;
+			snd_soc_set_runtime_hwparams(stream->substream,
+						     &no_host_hardware);
+		}
+	}
+
 	/* ASoC PCM operations */
 	if (rtd->dai_link->dynamic) {
 		rtd->ops.open		= dpcm_fe_dai_open;
diff --git a/sound/soc/sprd/Kconfig b/sound/soc/sprd/Kconfig
index 5474fd3..5e0ac82 100644
--- a/sound/soc/sprd/Kconfig
+++ b/sound/soc/sprd/Kconfig
@@ -8,7 +8,7 @@
 	  the Spreadtrum SoCs' Audio interfaces.
 
 config SND_SOC_SPRD_MCDT
-	bool "Spreadtrum multi-channel data transfer support"
+	tristate "Spreadtrum multi-channel data transfer support"
 	depends on SND_SOC_SPRD
 	help
 	  Say y here to enable multi-channel data transfer support. It
diff --git a/sound/soc/sprd/sprd-mcdt.h b/sound/soc/sprd/sprd-mcdt.h
index 9cc7e207..679e3af 100644
--- a/sound/soc/sprd/sprd-mcdt.h
+++ b/sound/soc/sprd/sprd-mcdt.h
@@ -48,7 +48,7 @@
 	struct list_head list;
 };
 
-#ifdef CONFIG_SND_SOC_SPRD_MCDT
+#if IS_ENABLED(CONFIG_SND_SOC_SPRD_MCDT)
 struct sprd_mcdt_chan *sprd_mcdt_request_chan(u8 channel,
 					      enum sprd_mcdt_channel_type type);
 void sprd_mcdt_free_chan(struct sprd_mcdt_chan *chan);
diff --git a/sound/usb/card.c b/sound/usb/card.c
index c2dd18c..e5a2fee 100644
--- a/sound/usb/card.c
+++ b/sound/usb/card.c
@@ -106,6 +106,185 @@
 static struct snd_usb_audio *usb_chip[SNDRV_CARDS];
 static struct usb_driver usb_audio_driver;
 
+static struct snd_usb_audio_vendor_ops *usb_vendor_ops;
+
+int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *ops)
+{
+	if ((!ops->connect) ||
+	    (!ops->disconnect) ||
+	    (!ops->set_interface) ||
+	    (!ops->set_rate) ||
+	    (!ops->set_pcm_buf) ||
+	    (!ops->set_pcm_intf) ||
+	    (!ops->set_pcm_connection) ||
+	    (!ops->set_pcm_binterval) ||
+	    (!ops->usb_add_ctls))
+		return -EINVAL;
+
+	usb_vendor_ops = ops;
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_vendor_set_ops);
+
+struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void)
+{
+	return usb_vendor_ops;
+}
+
+static int snd_vendor_connect(struct usb_interface *intf)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->connect(intf);
+	return 0;
+}
+
+static void snd_vendor_disconnect(struct usb_interface *intf)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		ops->disconnect(intf);
+}
+
+int snd_vendor_set_interface(struct usb_device *udev,
+			     struct usb_host_interface *intf,
+			     int iface, int alt)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_interface(udev, intf, iface, alt);
+	return 0;
+}
+
+int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
+			int alt)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_rate(intf, iface, rate, alt);
+	return 0;
+}
+
+int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		ops->set_pcm_buf(udev, iface);
+	return 0;
+}
+
+int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
+			    int direction)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_intf(intf, iface, alt, direction);
+	return 0;
+}
+
+int snd_vendor_set_pcm_connection(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_connection(udev, onoff, direction);
+	return 0;
+}
+
+int snd_vendor_set_pcm_binterval(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->set_pcm_binterval(fp, found, cur_attr, attr);
+	return 0;
+}
+
+static int snd_vendor_usb_add_ctls(struct snd_usb_audio *chip)
+{
+	struct snd_usb_audio_vendor_ops *ops = snd_vendor_get_ops();
+
+	if (ops)
+		return ops->usb_add_ctls(chip);
+	return 0;
+}
+
+struct snd_usb_substream *find_snd_usb_substream(unsigned int card_num,
+	unsigned int pcm_idx, unsigned int direction, struct snd_usb_audio
+	**uchip, void (*disconnect_cb)(struct snd_usb_audio *chip))
+{
+	int idx;
+	struct snd_usb_stream *as;
+	struct snd_usb_substream *subs = NULL;
+	struct snd_usb_audio *chip = NULL;
+
+	mutex_lock(&register_mutex);
+	/*
+	 * legacy audio snd card number assignment is dynamic. Hence
+	 * search using chip->card->number
+	 */
+	for (idx = 0; idx < SNDRV_CARDS; idx++) {
+		if (!usb_chip[idx])
+			continue;
+		if (usb_chip[idx]->card->number == card_num) {
+			chip = usb_chip[idx];
+			break;
+		}
+	}
+
+	if (!chip || atomic_read(&chip->shutdown)) {
+		pr_debug("%s: instance of usb crad # %d does not exist\n",
+			__func__, card_num);
+		goto err;
+	}
+
+	if (pcm_idx >= chip->pcm_devs) {
+		pr_err("%s: invalid pcm dev number %u > %d\n", __func__,
+			pcm_idx, chip->pcm_devs);
+		goto err;
+	}
+
+	if (direction > SNDRV_PCM_STREAM_CAPTURE) {
+		pr_err("%s: invalid direction %u\n", __func__, direction);
+		goto err;
+	}
+
+	list_for_each_entry(as, &chip->pcm_list, list) {
+		if (as->pcm_index == pcm_idx) {
+			subs = &as->substream[direction];
+			if (subs->interface < 0 && !subs->data_endpoint &&
+				!subs->sync_endpoint) {
+				pr_debug("%s: stream disconnected, bail out\n",
+					__func__);
+				subs = NULL;
+				goto err;
+			}
+			goto done;
+		}
+	}
+
+done:
+	chip->card_num = card_num;
+	chip->disconnect_cb = disconnect_cb;
+err:
+	*uchip = chip;
+	if (!subs)
+		pr_debug("%s: substream instance not found\n", __func__);
+	mutex_unlock(&register_mutex);
+	return subs;
+}
+EXPORT_SYMBOL_GPL(find_snd_usb_substream);
+
 /*
  * disconnect streams
  * called from usb_audio_disconnect()
@@ -341,6 +520,7 @@
 	list_for_each_entry_safe(ep, n, &chip->ep_list, list)
 		snd_usb_endpoint_free(ep);
 
+	mutex_destroy(&chip->dev_lock);
 	mutex_destroy(&chip->mutex);
 	if (!atomic_read(&chip->shutdown))
 		dev_set_drvdata(&chip->dev->dev, NULL);
@@ -468,6 +648,7 @@
 
 	chip = card->private_data;
 	mutex_init(&chip->mutex);
+	mutex_init(&chip->dev_lock);
 	init_waitqueue_head(&chip->shutdown_wait);
 	chip->index = idx;
 	chip->dev = dev;
@@ -577,6 +758,10 @@
 	if (err < 0)
 		return err;
 
+	err = snd_vendor_connect(intf);
+	if (err)
+		return err;
+
 	/*
 	 * found a config.  now register to ALSA
 	 */
@@ -632,6 +817,8 @@
 	}
 	dev_set_drvdata(&dev->dev, chip);
 
+	snd_vendor_usb_add_ctls(chip);
+
 	/*
 	 * For devices with more than one control interface, we assume the
 	 * first contains the audio controls. We might need a more specific
@@ -708,6 +895,11 @@
 
 	card = chip->card;
 
+	if (chip->disconnect_cb)
+		chip->disconnect_cb(chip);
+
+	snd_vendor_disconnect(intf);
+
 	mutex_lock(&register_mutex);
 	if (atomic_inc_return(&chip->shutdown) == 1) {
 		struct snd_usb_stream *as;
diff --git a/sound/usb/card.h b/sound/usb/card.h
index d8ec5ca..2dbea6ee 100644
--- a/sound/usb/card.h
+++ b/sound/usb/card.h
@@ -2,6 +2,8 @@
 #ifndef __USBAUDIO_CARD_H
 #define __USBAUDIO_CARD_H
 
+#include <linux/android_kabi.h>
+
 #define MAX_NR_RATES	1024
 #define MAX_PACKS	6		/* per URB */
 #define MAX_PACKS_HS	(MAX_PACKS * 8)	/* in high speed mode */
@@ -108,6 +110,11 @@
 
 	spinlock_t lock;
 	struct list_head list;
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 struct media_ctl;
@@ -167,6 +174,8 @@
 
 	bool trigger_tstamp_pending_update; /* trigger timestamp being updated from initial estimate */
 	struct media_ctl *media_ctl;
+
+	ANDROID_KABI_RESERVE(1);
 };
 
 struct snd_usb_stream {
@@ -178,4 +187,25 @@
 	struct list_head list;
 };
 
+struct snd_usb_substream *find_snd_usb_substream(unsigned int card_num,
+	unsigned int pcm_idx, unsigned int direction, struct snd_usb_audio
+	**uchip, void (*disconnect_cb)(struct snd_usb_audio *chip));
+
+int snd_vendor_set_ops(struct snd_usb_audio_vendor_ops *vendor_ops);
+struct snd_usb_audio_vendor_ops *snd_vendor_get_ops(void);
+int snd_vendor_set_interface(struct usb_device *udev,
+			     struct usb_host_interface *alts,
+			     int iface, int alt);
+int snd_vendor_set_rate(struct usb_interface *intf, int iface, int rate,
+			int alt);
+int snd_vendor_set_pcm_buf(struct usb_device *udev, int iface);
+int snd_vendor_set_pcm_intf(struct usb_interface *intf, int iface, int alt,
+			    int direction);
+int snd_vendor_set_pcm_connection(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction);
+int snd_vendor_set_pcm_binterval(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr);
+
 #endif /* __USBAUDIO_CARD_H */
diff --git a/sound/usb/clock.c b/sound/usb/clock.c
index 3d1c0ec..49b4207 100644
--- a/sound/usb/clock.c
+++ b/sound/usb/clock.c
@@ -664,8 +664,13 @@
 	 * interface is active. */
 	if (rate != prev_rate) {
 		usb_set_interface(dev, iface, 0);
+
+		snd_vendor_set_interface(dev, alts, iface, 0);
+
 		snd_usb_set_interface_quirk(dev);
 		usb_set_interface(dev, iface, fmt->altsetting);
+
+		snd_vendor_set_interface(dev, alts, iface, fmt->altsetting);
 		snd_usb_set_interface_quirk(dev);
 	}
 
diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 7521853..f5fbcdb 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -134,6 +134,71 @@
 			found = fp;
 			cur_attr = attr;
 		}
+
+		snd_vendor_set_pcm_binterval(fp, found, &cur_attr, &attr);
+	}
+	return found;
+}
+
+/*
+ * find a matching audio format as well as non-zero service interval
+ */
+static struct audioformat *find_format_and_si(struct snd_usb_substream *subs,
+	unsigned int datainterval)
+{
+	unsigned int i;
+	struct audioformat *fp;
+	struct audioformat *found = NULL;
+	int cur_attr = 0, attr;
+
+	list_for_each_entry(fp, &subs->fmt_list, list) {
+		if (datainterval != fp->datainterval)
+			continue;
+		if (!(fp->formats & pcm_format_to_bits(subs->pcm_format)))
+			continue;
+		if (fp->channels != subs->channels)
+			continue;
+		if (subs->cur_rate < fp->rate_min ||
+		    subs->cur_rate > fp->rate_max)
+			continue;
+		if (!(fp->rates & SNDRV_PCM_RATE_CONTINUOUS)) {
+			for (i = 0; i < fp->nr_rates; i++)
+				if (fp->rate_table[i] == subs->cur_rate)
+					break;
+			if (i >= fp->nr_rates)
+				continue;
+		}
+		attr = fp->ep_attr & USB_ENDPOINT_SYNCTYPE;
+		if (!found) {
+			found = fp;
+			cur_attr = attr;
+			continue;
+		}
+		/* avoid async out and adaptive in if the other method
+		 * supports the same format.
+		 * this is a workaround for the case like
+		 * M-audio audiophile USB.
+		 */
+		if (attr != cur_attr) {
+			if ((attr == USB_ENDPOINT_SYNC_ASYNC &&
+			     subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
+			    (attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
+			     subs->direction == SNDRV_PCM_STREAM_CAPTURE))
+				continue;
+			if ((cur_attr == USB_ENDPOINT_SYNC_ASYNC &&
+			     subs->direction == SNDRV_PCM_STREAM_PLAYBACK) ||
+			    (cur_attr == USB_ENDPOINT_SYNC_ADAPTIVE &&
+			     subs->direction == SNDRV_PCM_STREAM_CAPTURE)) {
+				found = fp;
+				cur_attr = attr;
+				continue;
+			}
+		}
+		/* find the format with the largest max. packet size */
+		if (fp->maxpacksize > found->maxpacksize) {
+			found = fp;
+			cur_attr = attr;
+		}
 	}
 	return found;
 }
@@ -570,6 +635,10 @@
 		}
 		dev_dbg(&dev->dev, "setting usb interface %d:%d\n",
 			fmt->iface, fmt->altsetting);
+		err = snd_vendor_set_pcm_intf(iface, fmt->iface,
+					      fmt->altsetting, subs->direction);
+		if (err)
+			return err;
 		snd_usb_set_interface_quirk(dev);
 	}
 
@@ -597,6 +666,74 @@
 	return 0;
 }
 
+int snd_usb_enable_audio_stream(struct snd_usb_substream *subs,
+	int datainterval, bool enable)
+{
+	struct audioformat *fmt;
+	struct usb_host_interface *alts;
+	struct usb_interface *iface;
+	int ret;
+
+	if (!enable) {
+		if (subs->interface >= 0) {
+			usb_set_interface(subs->dev, subs->interface, 0);
+			subs->altset_idx = 0;
+			subs->interface = -1;
+			subs->cur_audiofmt = NULL;
+		}
+
+		snd_usb_autosuspend(subs->stream->chip);
+		return 0;
+	}
+
+	snd_usb_autoresume(subs->stream->chip);
+	if (datainterval != -EINVAL)
+		fmt = find_format_and_si(subs, datainterval);
+	else
+		fmt = find_format(subs);
+	if (!fmt) {
+		dev_err(&subs->dev->dev,
+		"cannot set format: format = %#x, rate = %d, channels = %d\n",
+			   subs->pcm_format, subs->cur_rate, subs->channels);
+		return -EINVAL;
+	}
+
+	subs->altset_idx = 0;
+	subs->interface = -1;
+	if (atomic_read(&subs->stream->chip->shutdown)) {
+		ret = -ENODEV;
+	} else {
+		ret = set_format(subs, fmt);
+		if (ret < 0)
+			return ret;
+
+		iface = usb_ifnum_to_if(subs->dev, subs->cur_audiofmt->iface);
+		if (!iface) {
+			dev_err(&subs->dev->dev, "Could not get iface %d\n",
+				subs->cur_audiofmt->iface);
+			return -ENODEV;
+		}
+
+		alts = &iface->altsetting[subs->cur_audiofmt->altset_idx];
+		ret = snd_usb_init_sample_rate(subs->stream->chip,
+					       subs->cur_audiofmt->iface,
+					       alts,
+					       subs->cur_audiofmt,
+					       subs->cur_rate);
+		if (ret < 0) {
+			dev_err(&subs->dev->dev, "failed to set rate %d\n",
+				subs->cur_rate);
+			return ret;
+		}
+	}
+
+	subs->interface = fmt->iface;
+	subs->altset_idx = fmt->altset_idx;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(snd_usb_enable_audio_stream);
+
 /*
  * Return the score of matching two audioformats.
  * Veto the audioformat if:
@@ -903,6 +1040,10 @@
 	struct usb_interface *iface;
 	int ret;
 
+	ret = snd_vendor_set_pcm_buf(subs->dev, subs->cur_audiofmt->iface);
+	if (ret)
+		return ret;
+
 	if (! subs->cur_audiofmt) {
 		dev_err(&subs->dev->dev, "no format is specified!\n");
 		return -ENXIO;
@@ -939,6 +1080,17 @@
 		if (ret < 0)
 			goto unlock;
 
+		if (snd_vendor_get_ops()) {
+			ret = snd_vendor_set_rate(iface,
+						  subs->cur_audiofmt->iface,
+						  subs->cur_rate,
+						  subs->cur_audiofmt->altsetting);
+			if (!ret) {
+				subs->need_setup_ep = false;
+				goto unlock;
+			}
+		}
+
 		ret = configure_endpoint(subs);
 		if (ret < 0)
 			goto unlock;
@@ -1348,6 +1500,11 @@
 	struct snd_usb_substream *subs = &as->substream[direction];
 	int ret;
 
+	ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_OPEN,
+					    direction);
+	if (ret)
+		return ret;
+
 	subs->interface = -1;
 	subs->altset_idx = 0;
 	runtime->hw = snd_usb_hardware;
@@ -1376,6 +1533,11 @@
 	struct snd_usb_substream *subs = &as->substream[direction];
 	int ret;
 
+	ret = snd_vendor_set_pcm_connection(subs->dev, SOUND_PCM_CLOSE,
+					    direction);
+	if (ret)
+		return ret;
+
 	stop_endpoints(subs, true);
 	snd_media_stop_pipeline(subs);
 
@@ -1383,6 +1545,12 @@
 	    subs->interface >= 0 &&
 	    !snd_usb_lock_shutdown(subs->stream->chip)) {
 		usb_set_interface(subs->dev, subs->interface, 0);
+		ret = snd_vendor_set_pcm_intf(usb_ifnum_to_if(subs->dev,
+							      subs->interface),
+					      subs->interface, 0,
+					      direction);
+		if (ret)
+			return ret;
 		subs->interface = -1;
 		ret = snd_usb_pcm_change_state(subs, UAC3_PD_STATE_D1);
 		snd_usb_unlock_shutdown(subs->stream->chip);
diff --git a/sound/usb/pcm.h b/sound/usb/pcm.h
index 9833627..6e28e79 100644
--- a/sound/usb/pcm.h
+++ b/sound/usb/pcm.h
@@ -14,5 +14,7 @@
 		       struct audioformat *fmt);
 void snd_usb_preallocate_buffer(struct snd_usb_substream *subs);
 
+int snd_usb_enable_audio_stream(struct snd_usb_substream *subs,
+				int datainterval, bool enable);
 
 #endif /* __USBAUDIO_PCM_H */
diff --git a/sound/usb/stream.c b/sound/usb/stream.c
index eff1ac1..0e8198c 100644
--- a/sound/usb/stream.c
+++ b/sound/usb/stream.c
@@ -67,9 +67,13 @@
 static void snd_usb_audio_pcm_free(struct snd_pcm *pcm)
 {
 	struct snd_usb_stream *stream = pcm->private_data;
+	struct snd_usb_audio *chip;
 	if (stream) {
+		mutex_lock(&stream->chip->dev_lock);
+		chip = stream->chip;
 		stream->pcm = NULL;
 		snd_usb_audio_stream_free(stream);
+		mutex_unlock(&chip->dev_lock);
 	}
 }
 
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
index ff97fdc..0e76b09 100644
--- a/sound/usb/usbaudio.h
+++ b/sound/usb/usbaudio.h
@@ -12,6 +12,8 @@
 #define USB_ID_VENDOR(id) ((id) >> 16)
 #define USB_ID_PRODUCT(id) ((u16)(id))
 
+#include <linux/android_kabi.h>
+
 /*
  *
  */
@@ -57,6 +59,14 @@
 	struct usb_host_interface *ctrl_intf;	/* the audio control interface */
 	struct media_device *media_dev;
 	struct media_intf_devnode *ctl_intf_media_devnode;
+	struct mutex dev_lock;  /* to protect any race with disconnect */
+	int card_num;	/* cache pcm card number to use upon disconnect */
+	void (*disconnect_cb)(struct snd_usb_audio *chip);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+	ANDROID_KABI_RESERVE(3);
+	ANDROID_KABI_RESERVE(4);
 };
 
 #define USB_AUDIO_IFACE_UNUSED	((void *)-1L)
@@ -124,4 +134,53 @@
 
 extern bool snd_usb_use_vmalloc;
 
+struct audioformat;
+
+enum snd_vendor_pcm_open_close {
+	SOUND_PCM_CLOSE = 0,
+	SOUND_PCM_OPEN,
+};
+
+/**
+ * struct snd_usb_audio_vendor_ops - function callbacks for USB audio accelerators
+ * @connect: called when a new interface is found
+ * @disconnect: called when an interface is removed
+ * @set_interface: called when an interface is initialized
+ * @set_rate: called when the rate is set
+ * @set_pcm_buf: called when the pcm buffer is set
+ * @set_pcm_intf: called when the pcm interface is set
+ * @set_pcm_connection: called when pcm is opened/closed
+ * @set_pcm_binterval: called when the pcm binterval is set
+ * @usb_add_ctls: called when USB controls are added
+ *
+ * Set of callbacks for some accelerated USB audio streaming hardware.
+ *
+ * TODO: make this USB host-controller specific, right now this only works for
+ * one USB controller in the system at a time, which is only realistic for
+ * self-contained systems like phones.
+ */
+struct snd_usb_audio_vendor_ops {
+	int (*connect)(struct usb_interface *intf);
+	void (*disconnect)(struct usb_interface *intf);
+
+	int (*set_interface)(struct usb_device *udev,
+			     struct usb_host_interface *alts,
+			     int iface, int alt);
+	int (*set_rate)(struct usb_interface *intf, int iface, int rate,
+			int alt);
+	int (*set_pcm_buf)(struct usb_device *udev, int iface);
+	int (*set_pcm_intf)(struct usb_interface *intf, int iface, int alt,
+			    int direction);
+	int (*set_pcm_connection)(struct usb_device *udev,
+				  enum snd_vendor_pcm_open_close onoff,
+				  int direction);
+	int (*set_pcm_binterval)(struct audioformat *fp,
+				 struct audioformat *found,
+				 int *cur_attr, int *attr);
+	int (*usb_add_ctls)(struct snd_usb_audio *chip);
+
+	ANDROID_KABI_RESERVE(1);
+	ANDROID_KABI_RESERVE(2);
+};
+
 #endif /* __USBAUDIO_H */
diff --git a/tools/Makefile b/tools/Makefile
index 7e42f7b..bd77881 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -28,6 +28,7 @@
 	@echo '  pci                    - PCI tools'
 	@echo '  perf                   - Linux performance measurement and analysis tool'
 	@echo '  selftests              - various kernel selftests'
+	@echo '  bootconfig             - boot config tool'
 	@echo '  spi                    - spi tools'
 	@echo '  tmon                   - thermal monitoring and tuning tool'
 	@echo '  turbostat              - Intel CPU idle stats and freq reporting tool'
@@ -63,7 +64,7 @@
 cpupower: FORCE
 	$(call descend,power/$@)
 
-cgroup firewire hv guest spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging: FORCE
+cgroup firewire hv guest bootconfig spi usb virtio vm bpf iio gpio objtool leds wmi pci firmware debugging: FORCE
 	$(call descend,$@)
 
 liblockdep: FORCE
@@ -96,7 +97,7 @@
 	$(call descend,kvm/$@)
 
 all: acpi cgroup cpupower gpio hv firewire liblockdep \
-		perf selftests spi turbostat usb \
+		perf selftests bootconfig spi turbostat usb \
 		virtio vm bpf x86_energy_perf_policy \
 		tmon freefall iio objtool kvm_stat wmi \
 		pci debugging
@@ -107,7 +108,7 @@
 cpupower_install:
 	$(call descend,power/$(@:_install=),install)
 
-cgroup_install firewire_install gpio_install hv_install iio_install perf_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install:
+cgroup_install firewire_install gpio_install hv_install iio_install perf_install bootconfig_install spi_install usb_install virtio_install vm_install bpf_install objtool_install wmi_install pci_install debugging_install:
 	$(call descend,$(@:_install=),install)
 
 liblockdep_install:
@@ -141,7 +142,7 @@
 cpupower_clean:
 	$(call descend,power/cpupower,clean)
 
-cgroup_clean hv_clean firewire_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean:
+cgroup_clean hv_clean firewire_clean bootconfig_clean spi_clean usb_clean virtio_clean vm_clean wmi_clean bpf_clean iio_clean gpio_clean objtool_clean leds_clean pci_clean firmware_clean debugging_clean:
 	$(call descend,$(@:_clean=),clean)
 
 liblockdep_clean:
@@ -176,7 +177,7 @@
 	$(call descend,build,clean)
 
 clean: acpi_clean cgroup_clean cpupower_clean hv_clean firewire_clean \
-		perf_clean selftests_clean turbostat_clean spi_clean usb_clean virtio_clean \
+		perf_clean selftests_clean turbostat_clean bootconfig_clean spi_clean usb_clean virtio_clean \
 		vm_clean bpf_clean iio_clean x86_energy_perf_policy_clean tmon_clean \
 		freefall_clean build_clean libbpf_clean libsubcmd_clean liblockdep_clean \
 		gpio_clean objtool_clean leds_clean wmi_clean pci_clean firmware_clean debugging_clean \
diff --git a/tools/bootconfig/.gitignore b/tools/bootconfig/.gitignore
new file mode 100644
index 0000000..e7644df
--- /dev/null
+++ b/tools/bootconfig/.gitignore
@@ -0,0 +1 @@
+bootconfig
diff --git a/tools/bootconfig/Makefile b/tools/bootconfig/Makefile
new file mode 100644
index 0000000..da59757
--- /dev/null
+++ b/tools/bootconfig/Makefile
@@ -0,0 +1,30 @@
+# SPDX-License-Identifier: GPL-2.0
+# Makefile for bootconfig command
+include ../scripts/Makefile.include
+
+bindir ?= /usr/bin
+
+ifeq ($(srctree),)
+srctree := $(patsubst %/,%,$(dir $(CURDIR)))
+srctree := $(patsubst %/,%,$(dir $(srctree)))
+endif
+
+LIBSRC = $(srctree)/lib/bootconfig.c $(srctree)/include/linux/bootconfig.h
+CFLAGS = -Wall -g -I$(CURDIR)/include
+
+ALL_TARGETS := bootconfig
+ALL_PROGRAMS := $(patsubst %,$(OUTPUT)%,$(ALL_TARGETS))
+
+all: $(ALL_PROGRAMS)
+
+$(OUTPUT)bootconfig: main.c $(LIBSRC)
+	$(CC) $(filter %.c,$^) $(CFLAGS) -o $@
+
+test: $(ALL_PROGRAMS) test-bootconfig.sh
+	./test-bootconfig.sh $(OUTPUT)
+
+install: $(ALL_PROGRAMS)
+	install $(OUTPUT)bootconfig $(DESTDIR)$(bindir)
+
+clean:
+	$(RM) -f $(OUTPUT)*.o $(ALL_PROGRAMS)
diff --git a/tools/bootconfig/include/linux/bootconfig.h b/tools/bootconfig/include/linux/bootconfig.h
new file mode 100644
index 0000000..de7f30f
--- /dev/null
+++ b/tools/bootconfig/include/linux/bootconfig.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _BOOTCONFIG_LINUX_BOOTCONFIG_H
+#define _BOOTCONFIG_LINUX_BOOTCONFIG_H
+
+#include "../../../../include/linux/bootconfig.h"
+
+#ifndef fallthrough
+# define fallthrough
+#endif
+
+#endif
diff --git a/tools/bootconfig/include/linux/bug.h b/tools/bootconfig/include/linux/bug.h
new file mode 100644
index 0000000..7b65a38
--- /dev/null
+++ b/tools/bootconfig/include/linux/bug.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_BUG_H
+#define _SKC_LINUX_BUG_H
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define WARN_ON(cond)	\
+	((cond) ? printf("Internal warning(%s:%d, %s): %s\n",	\
+			__FILE__, __LINE__, __func__, #cond) : 0)
+
+#endif
diff --git a/tools/bootconfig/include/linux/ctype.h b/tools/bootconfig/include/linux/ctype.h
new file mode 100644
index 0000000..c56ecc1
--- /dev/null
+++ b/tools/bootconfig/include/linux/ctype.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_CTYPE_H
+#define _SKC_LINUX_CTYPE_H
+
+#include <ctype.h>
+
+#endif
diff --git a/tools/bootconfig/include/linux/errno.h b/tools/bootconfig/include/linux/errno.h
new file mode 100644
index 0000000..5d9f91e
--- /dev/null
+++ b/tools/bootconfig/include/linux/errno.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_ERRNO_H
+#define _SKC_LINUX_ERRNO_H
+
+#include <asm/errno.h>
+
+#endif
diff --git a/tools/bootconfig/include/linux/kernel.h b/tools/bootconfig/include/linux/kernel.h
new file mode 100644
index 0000000..2d93320
--- /dev/null
+++ b/tools/bootconfig/include/linux/kernel.h
@@ -0,0 +1,18 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_KERNEL_H
+#define _SKC_LINUX_KERNEL_H
+
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include <linux/printk.h>
+
+typedef unsigned short u16;
+typedef unsigned int   u32;
+
+#define unlikely(cond)	(cond)
+
+#define __init
+#define __initdata
+
+#endif
diff --git a/tools/bootconfig/include/linux/memblock.h b/tools/bootconfig/include/linux/memblock.h
new file mode 100644
index 0000000..7862f21
--- /dev/null
+++ b/tools/bootconfig/include/linux/memblock.h
@@ -0,0 +1,12 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _XBC_LINUX_MEMBLOCK_H
+#define _XBC_LINUX_MEMBLOCK_H
+
+#include <stdlib.h>
+
+#define __pa(addr)	(addr)
+#define SMP_CACHE_BYTES	0
+#define memblock_alloc(size, align)	malloc(size)
+#define memblock_free(paddr, size)	free(paddr)
+
+#endif
diff --git a/tools/bootconfig/include/linux/printk.h b/tools/bootconfig/include/linux/printk.h
new file mode 100644
index 0000000..036e667
--- /dev/null
+++ b/tools/bootconfig/include/linux/printk.h
@@ -0,0 +1,14 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_PRINTK_H
+#define _SKC_LINUX_PRINTK_H
+
+#include <stdio.h>
+
+#define printk(fmt, ...) printf(fmt, ##__VA_ARGS__)
+
+#define pr_err printk
+#define pr_warn	printk
+#define pr_info	printk
+#define pr_debug printk
+
+#endif
diff --git a/tools/bootconfig/include/linux/string.h b/tools/bootconfig/include/linux/string.h
new file mode 100644
index 0000000..8267af7
--- /dev/null
+++ b/tools/bootconfig/include/linux/string.h
@@ -0,0 +1,32 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _SKC_LINUX_STRING_H
+#define _SKC_LINUX_STRING_H
+
+#include <string.h>
+
+/* Copied from lib/string.c */
+static inline char *skip_spaces(const char *str)
+{
+	while (isspace(*str))
+		++str;
+	return (char *)str;
+}
+
+static inline char *strim(char *s)
+{
+	size_t size;
+	char *end;
+
+	size = strlen(s);
+	if (!size)
+		return s;
+
+	end = s + size - 1;
+	while (end >= s && isspace(*end))
+		end--;
+	*(end + 1) = '\0';
+
+	return skip_spaces(s);
+}
+
+#endif
diff --git a/tools/bootconfig/main.c b/tools/bootconfig/main.c
new file mode 100644
index 0000000..5d842e8
--- /dev/null
+++ b/tools/bootconfig/main.c
@@ -0,0 +1,526 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Boot config tool for initrd image
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <string.h>
+#include <errno.h>
+#include <endian.h>
+
+#include <linux/kernel.h>
+#include <linux/bootconfig.h>
+
+static int xbc_show_value(struct xbc_node *node, bool semicolon)
+{
+	const char *val, *eol;
+	char q;
+	int i = 0;
+
+	eol = semicolon ? ";\n" : "\n";
+	xbc_array_for_each_value(node, val) {
+		if (strchr(val, '"'))
+			q = '\'';
+		else
+			q = '"';
+		printf("%c%s%c%s", q, val, q, xbc_node_is_array(node) ? ", " : eol);
+		i++;
+	}
+	return i;
+}
+
+static void xbc_show_compact_tree(void)
+{
+	struct xbc_node *node, *cnode = NULL, *vnode;
+	int depth = 0, i;
+
+	node = xbc_root_node();
+	while (node && xbc_node_is_key(node)) {
+		for (i = 0; i < depth; i++)
+			printf("\t");
+		if (!cnode)
+			cnode = xbc_node_get_child(node);
+		while (cnode && xbc_node_is_key(cnode) && !cnode->next) {
+			vnode = xbc_node_get_child(cnode);
+			/*
+			 * If @cnode has value and subkeys, this
+			 * should show it as below.
+			 *
+			 * key(@node) {
+			 *      key(@cnode) = value;
+			 *      key(@cnode) {
+			 *          subkeys;
+			 *      }
+			 * }
+			 */
+			if (vnode && xbc_node_is_value(vnode) && vnode->next)
+				break;
+			printf("%s.", xbc_node_get_data(node));
+			node = cnode;
+			cnode = vnode;
+		}
+		if (cnode && xbc_node_is_key(cnode)) {
+			printf("%s {\n", xbc_node_get_data(node));
+			depth++;
+			node = cnode;
+			cnode = NULL;
+			continue;
+		} else if (cnode && xbc_node_is_value(cnode)) {
+			printf("%s = ", xbc_node_get_data(node));
+			xbc_show_value(cnode, true);
+			/*
+			 * If @node has value and subkeys, continue
+			 * looping on subkeys with same node.
+			 */
+			if (cnode->next) {
+				cnode = xbc_node_get_next(cnode);
+				continue;
+			}
+		} else {
+			printf("%s;\n", xbc_node_get_data(node));
+		}
+		cnode = NULL;
+
+		if (node->next) {
+			node = xbc_node_get_next(node);
+			continue;
+		}
+		while (!node->next) {
+			node = xbc_node_get_parent(node);
+			if (!node)
+				return;
+			if (!xbc_node_get_child(node)->next)
+				continue;
+			if (depth) {
+				depth--;
+				for (i = 0; i < depth; i++)
+					printf("\t");
+				printf("}\n");
+			}
+		}
+		node = xbc_node_get_next(node);
+	}
+}
+
+static void xbc_show_list(void)
+{
+	char key[XBC_KEYLEN_MAX];
+	struct xbc_node *leaf;
+	const char *val;
+	int ret = 0;
+
+	xbc_for_each_key_value(leaf, val) {
+		ret = xbc_node_compose_key(leaf, key, XBC_KEYLEN_MAX);
+		if (ret < 0) {
+			fprintf(stderr, "Failed to compose key %d\n", ret);
+			break;
+		}
+		printf("%s = ", key);
+		if (!val || val[0] == '\0') {
+			printf("\"\"\n");
+			continue;
+		}
+		xbc_show_value(xbc_node_get_child(leaf), false);
+	}
+}
+
+#define PAGE_SIZE	4096
+
+static int load_xbc_fd(int fd, char **buf, int size)
+{
+	int ret;
+
+	*buf = malloc(size + 1);
+	if (!*buf)
+		return -ENOMEM;
+
+	ret = read(fd, *buf, size);
+	if (ret < 0)
+		return -errno;
+	(*buf)[size] = '\0';
+
+	return ret;
+}
+
+/* Return the read size or -errno */
+static int load_xbc_file(const char *path, char **buf)
+{
+	struct stat stat;
+	int fd, ret;
+
+	fd = open(path, O_RDONLY);
+	if (fd < 0)
+		return -errno;
+	ret = fstat(fd, &stat);
+	if (ret < 0)
+		return -errno;
+
+	ret = load_xbc_fd(fd, buf, stat.st_size);
+
+	close(fd);
+
+	return ret;
+}
+
+static int pr_errno(const char *msg, int err)
+{
+	pr_err("%s: %d\n", msg, err);
+	return err;
+}
+
+static int load_xbc_from_initrd(int fd, char **buf)
+{
+	struct stat stat;
+	int ret;
+	u32 size = 0, csum = 0, rcsum;
+	char magic[BOOTCONFIG_MAGIC_LEN];
+	const char *msg;
+
+	ret = fstat(fd, &stat);
+	if (ret < 0)
+		return -errno;
+
+	if (stat.st_size < 8 + BOOTCONFIG_MAGIC_LEN)
+		return 0;
+
+	if (lseek(fd, -BOOTCONFIG_MAGIC_LEN, SEEK_END) < 0)
+		return pr_errno("Failed to lseek for magic", -errno);
+
+	if (read(fd, magic, BOOTCONFIG_MAGIC_LEN) < 0)
+		return pr_errno("Failed to read", -errno);
+
+	/* Check the bootconfig magic bytes */
+	if (memcmp(magic, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN) != 0)
+		return 0;
+
+	if (lseek(fd, -(8 + BOOTCONFIG_MAGIC_LEN), SEEK_END) < 0)
+		return pr_errno("Failed to lseek for size", -errno);
+
+	if (read(fd, &size, sizeof(u32)) < 0)
+		return pr_errno("Failed to read size", -errno);
+	size = le32toh(size);
+
+	if (read(fd, &csum, sizeof(u32)) < 0)
+		return pr_errno("Failed to read checksum", -errno);
+	csum = le32toh(csum);
+
+	/* Wrong size error  */
+	if (stat.st_size < size + 8 + BOOTCONFIG_MAGIC_LEN) {
+		pr_err("bootconfig size is too big\n");
+		return -E2BIG;
+	}
+
+	if (lseek(fd, stat.st_size - (size + 8 + BOOTCONFIG_MAGIC_LEN),
+		  SEEK_SET) < 0)
+		return pr_errno("Failed to lseek", -errno);
+
+	ret = load_xbc_fd(fd, buf, size);
+	if (ret < 0)
+		return ret;
+
+	/* Wrong Checksum */
+	rcsum = xbc_calc_checksum(*buf, size);
+	if (csum != rcsum) {
+		pr_err("checksum error: %d != %d\n", csum, rcsum);
+		return -EINVAL;
+	}
+
+	ret = xbc_init(*buf, &msg, NULL);
+	/* Wrong data */
+	if (ret < 0) {
+		pr_err("parse error: %s.\n", msg);
+		return ret;
+	}
+
+	return size;
+}
+
+static void show_xbc_error(const char *data, const char *msg, int pos)
+{
+	int lin = 1, col, i;
+
+	if (pos < 0) {
+		pr_err("Error: %s.\n", msg);
+		return;
+	}
+
+	/* Note that pos starts from 0 but lin and col should start from 1. */
+	col = pos + 1;
+	for (i = 0; i < pos; i++) {
+		if (data[i] == '\n') {
+			lin++;
+			col = pos - i;
+		}
+	}
+	pr_err("Parse Error: %s at %d:%d\n", msg, lin, col);
+
+}
+
+static int init_xbc_with_error(char *buf, int len)
+{
+	char *copy = strdup(buf);
+	const char *msg;
+	int ret, pos;
+
+	if (!copy)
+		return -ENOMEM;
+
+	ret = xbc_init(buf, &msg, &pos);
+	if (ret < 0)
+		show_xbc_error(copy, msg, pos);
+	free(copy);
+
+	return ret;
+}
+
+static int show_xbc(const char *path, bool list)
+{
+	int ret, fd;
+	char *buf = NULL;
+	struct stat st;
+
+	ret = stat(path, &st);
+	if (ret < 0) {
+		ret = -errno;
+		pr_err("Failed to stat %s: %d\n", path, ret);
+		return ret;
+	}
+
+	fd = open(path, O_RDONLY);
+	if (fd < 0) {
+		ret = -errno;
+		pr_err("Failed to open initrd %s: %d\n", path, ret);
+		return ret;
+	}
+
+	ret = load_xbc_from_initrd(fd, &buf);
+	close(fd);
+	if (ret < 0) {
+		pr_err("Failed to load a boot config from initrd: %d\n", ret);
+		goto out;
+	}
+	/* Assume a bootconfig file if it is enough small */
+	if (ret == 0 && st.st_size <= XBC_DATA_MAX) {
+		ret = load_xbc_file(path, &buf);
+		if (ret < 0) {
+			pr_err("Failed to load a boot config: %d\n", ret);
+			goto out;
+		}
+		if (init_xbc_with_error(buf, ret) < 0)
+			goto out;
+	}
+	if (list)
+		xbc_show_list();
+	else
+		xbc_show_compact_tree();
+	ret = 0;
+out:
+	free(buf);
+
+	return ret;
+}
+
+static int delete_xbc(const char *path)
+{
+	struct stat stat;
+	int ret = 0, fd, size;
+	char *buf = NULL;
+
+	fd = open(path, O_RDWR);
+	if (fd < 0) {
+		ret = -errno;
+		pr_err("Failed to open initrd %s: %d\n", path, ret);
+		return ret;
+	}
+
+	size = load_xbc_from_initrd(fd, &buf);
+	if (size < 0) {
+		ret = size;
+		pr_err("Failed to load a boot config from initrd: %d\n", ret);
+	} else if (size > 0) {
+		ret = fstat(fd, &stat);
+		if (!ret)
+			ret = ftruncate(fd, stat.st_size
+					- size - 8 - BOOTCONFIG_MAGIC_LEN);
+		if (ret)
+			ret = -errno;
+	} /* Ignore if there is no boot config in initrd */
+
+	close(fd);
+	free(buf);
+
+	return ret;
+}
+
+static int apply_xbc(const char *path, const char *xbc_path)
+{
+	char *buf, *data, *p;
+	size_t total_size;
+	struct stat stat;
+	const char *msg;
+	u32 size, csum;
+	int pos, pad;
+	int ret, fd;
+
+	ret = load_xbc_file(xbc_path, &buf);
+	if (ret < 0) {
+		pr_err("Failed to load %s : %d\n", xbc_path, ret);
+		return ret;
+	}
+	size = strlen(buf) + 1;
+	csum = xbc_calc_checksum(buf, size);
+
+	/* Backup the bootconfig data */
+	data = calloc(size + BOOTCONFIG_ALIGN +
+		      sizeof(u32) + sizeof(u32) + BOOTCONFIG_MAGIC_LEN, 1);
+	if (!data)
+		return -ENOMEM;
+	memcpy(data, buf, size);
+
+	/* Check the data format */
+	ret = xbc_init(buf, &msg, &pos);
+	if (ret < 0) {
+		show_xbc_error(data, msg, pos);
+		free(data);
+		free(buf);
+
+		return ret;
+	}
+	printf("Apply %s to %s\n", xbc_path, path);
+	printf("\tNumber of nodes: %d\n", ret);
+	printf("\tSize: %u bytes\n", (unsigned int)size);
+	printf("\tChecksum: %d\n", (unsigned int)csum);
+
+	/* TODO: Check the options by schema */
+	xbc_destroy_all();
+	free(buf);
+
+	/* Remove old boot config if exists */
+	ret = delete_xbc(path);
+	if (ret < 0) {
+		pr_err("Failed to delete previous boot config: %d\n", ret);
+		free(data);
+		return ret;
+	}
+
+	/* Apply new one */
+	fd = open(path, O_RDWR | O_APPEND);
+	if (fd < 0) {
+		ret = -errno;
+		pr_err("Failed to open %s: %d\n", path, ret);
+		free(data);
+		return ret;
+	}
+	/* TODO: Ensure the @path is initramfs/initrd image */
+	if (fstat(fd, &stat) < 0) {
+		ret = -errno;
+		pr_err("Failed to get the size of %s\n", path);
+		goto out;
+	}
+
+	/* To align up the total size to BOOTCONFIG_ALIGN, get padding size */
+	total_size = stat.st_size + size + sizeof(u32) * 2 + BOOTCONFIG_MAGIC_LEN;
+	pad = ((total_size + BOOTCONFIG_ALIGN - 1) & (~BOOTCONFIG_ALIGN_MASK)) - total_size;
+	size += pad;
+
+	/* Add a footer */
+	p = data + size;
+	*(u32 *)p = htole32(size);
+	p += sizeof(u32);
+
+	*(u32 *)p = htole32(csum);
+	p += sizeof(u32);
+
+	memcpy(p, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
+	p += BOOTCONFIG_MAGIC_LEN;
+
+	total_size = p - data;
+
+	ret = write(fd, data, total_size);
+	if (ret < total_size) {
+		if (ret < 0)
+			ret = -errno;
+		pr_err("Failed to apply a boot config: %d\n", ret);
+		if (ret >= 0)
+			goto out_rollback;
+	} else
+		ret = 0;
+
+out:
+	close(fd);
+	free(data);
+
+	return ret;
+
+out_rollback:
+	/* Map the partial write to -ENOSPC */
+	if (ret >= 0)
+		ret = -ENOSPC;
+	if (ftruncate(fd, stat.st_size) < 0) {
+		ret = -errno;
+		pr_err("Failed to rollback the write error: %d\n", ret);
+		pr_err("The initrd %s may be corrupted. Recommend to rebuild.\n", path);
+	}
+	goto out;
+}
+
+static int usage(void)
+{
+	printf("Usage: bootconfig [OPTIONS] <INITRD>\n"
+		"Or     bootconfig <CONFIG>\n"
+		" Apply, delete or show boot config to initrd.\n"
+		" Options:\n"
+		"		-a <config>: Apply boot config to initrd\n"
+		"		-d : Delete boot config file from initrd\n"
+		"		-l : list boot config in initrd or file\n\n"
+		" If no option is given, show the bootconfig in the given file.\n");
+	return -1;
+}
+
+int main(int argc, char **argv)
+{
+	char *path = NULL;
+	char *apply = NULL;
+	bool delete = false, list = false;
+	int opt;
+
+	while ((opt = getopt(argc, argv, "hda:l")) != -1) {
+		switch (opt) {
+		case 'd':
+			delete = true;
+			break;
+		case 'a':
+			apply = optarg;
+			break;
+		case 'l':
+			list = true;
+			break;
+		case 'h':
+		default:
+			return usage();
+		}
+	}
+
+	if ((apply && delete) || (delete && list) || (apply && list)) {
+		pr_err("Error: You can give one of -a, -d or -l at once.\n");
+		return usage();
+	}
+
+	if (optind >= argc) {
+		pr_err("Error: No initrd is specified.\n");
+		return usage();
+	}
+
+	path = argv[optind];
+
+	if (apply)
+		return apply_xbc(path, apply);
+	else if (delete)
+		return delete_xbc(path);
+
+	return show_xbc(path, list);
+}
diff --git a/tools/bootconfig/samples/bad-array-space-comment.bconf b/tools/bootconfig/samples/bad-array-space-comment.bconf
new file mode 100644
index 0000000..fda19e4
--- /dev/null
+++ b/tools/bootconfig/samples/bad-array-space-comment.bconf
@@ -0,0 +1,5 @@
+key =	# comment
+	"value1",	  # comment1
+	"value2" 	  # comment2
+,
+	"value3"
diff --git a/tools/bootconfig/samples/bad-array.bconf b/tools/bootconfig/samples/bad-array.bconf
new file mode 100644
index 0000000..0174af0
--- /dev/null
+++ b/tools/bootconfig/samples/bad-array.bconf
@@ -0,0 +1,2 @@
+# Array must be comma separated.
+key = "value1" "value2"
diff --git a/tools/bootconfig/samples/bad-dotword.bconf b/tools/bootconfig/samples/bad-dotword.bconf
new file mode 100644
index 0000000..ba5557b
--- /dev/null
+++ b/tools/bootconfig/samples/bad-dotword.bconf
@@ -0,0 +1,4 @@
+# do not start keyword with .
+key {
+  .word = 1
+}
diff --git a/tools/bootconfig/samples/bad-empty.bconf b/tools/bootconfig/samples/bad-empty.bconf
new file mode 100644
index 0000000..2ba3f6cc
--- /dev/null
+++ b/tools/bootconfig/samples/bad-empty.bconf
@@ -0,0 +1 @@
+# Wrong boot config: comment only
diff --git a/tools/bootconfig/samples/bad-keyerror.bconf b/tools/bootconfig/samples/bad-keyerror.bconf
new file mode 100644
index 0000000..b6e247a
--- /dev/null
+++ b/tools/bootconfig/samples/bad-keyerror.bconf
@@ -0,0 +1,2 @@
+# key word can not contain ","
+key,word
diff --git a/tools/bootconfig/samples/bad-longkey.bconf b/tools/bootconfig/samples/bad-longkey.bconf
new file mode 100644
index 0000000..eb97369
--- /dev/null
+++ b/tools/bootconfig/samples/bad-longkey.bconf
@@ -0,0 +1 @@
+key_word_is_too_long01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
diff --git a/tools/bootconfig/samples/bad-manywords.bconf b/tools/bootconfig/samples/bad-manywords.bconf
new file mode 100644
index 0000000..8db8196
--- /dev/null
+++ b/tools/bootconfig/samples/bad-manywords.bconf
@@ -0,0 +1 @@
+key1.is2.too3.long4.5.6.7.8.9.10.11.12.13.14.15.16.17
diff --git a/tools/bootconfig/samples/bad-no-keyword.bconf b/tools/bootconfig/samples/bad-no-keyword.bconf
new file mode 100644
index 0000000..eff2680
--- /dev/null
+++ b/tools/bootconfig/samples/bad-no-keyword.bconf
@@ -0,0 +1,2 @@
+# No keyword
+{}
diff --git a/tools/bootconfig/samples/bad-nonprintable.bconf b/tools/bootconfig/samples/bad-nonprintable.bconf
new file mode 100644
index 0000000..3bb1a28
--- /dev/null
+++ b/tools/bootconfig/samples/bad-nonprintable.bconf
@@ -0,0 +1,2 @@
+# Non printable
+key = ""
diff --git a/tools/bootconfig/samples/bad-samekey.bconf b/tools/bootconfig/samples/bad-samekey.bconf
new file mode 100644
index 0000000..e8d983a
--- /dev/null
+++ b/tools/bootconfig/samples/bad-samekey.bconf
@@ -0,0 +1,6 @@
+# Same key value is not allowed
+key {
+	foo = value
+	bar = value2
+}
+key.foo = value
diff --git a/tools/bootconfig/samples/bad-spaceword.bconf b/tools/bootconfig/samples/bad-spaceword.bconf
new file mode 100644
index 0000000..90c703d32
--- /dev/null
+++ b/tools/bootconfig/samples/bad-spaceword.bconf
@@ -0,0 +1,2 @@
+# No space between words
+key . word
diff --git a/tools/bootconfig/samples/bad-tree.bconf b/tools/bootconfig/samples/bad-tree.bconf
new file mode 100644
index 0000000..5a6038e
--- /dev/null
+++ b/tools/bootconfig/samples/bad-tree.bconf
@@ -0,0 +1,5 @@
+# brace is not closing
+tree {
+  node {
+    value = 1
+}
diff --git a/tools/bootconfig/samples/bad-value.bconf b/tools/bootconfig/samples/bad-value.bconf
new file mode 100644
index 0000000..a1217fe
--- /dev/null
+++ b/tools/bootconfig/samples/bad-value.bconf
@@ -0,0 +1,3 @@
+# Quotes error
+value = "data
+
diff --git a/tools/bootconfig/samples/escaped.bconf b/tools/bootconfig/samples/escaped.bconf
new file mode 100644
index 0000000..9f72043
--- /dev/null
+++ b/tools/bootconfig/samples/escaped.bconf
@@ -0,0 +1,3 @@
+key1 = "A\B\C"
+key2 = '\'\''
+key3 = "\\"
diff --git a/tools/bootconfig/samples/good-array-space-comment.bconf b/tools/bootconfig/samples/good-array-space-comment.bconf
new file mode 100644
index 0000000..45b938dc
--- /dev/null
+++ b/tools/bootconfig/samples/good-array-space-comment.bconf
@@ -0,0 +1,4 @@
+key =	# comment
+	"value1",	  # comment1
+	"value2"	 , # comment2
+	"value3"
diff --git a/tools/bootconfig/samples/good-comment-after-value.bconf b/tools/bootconfig/samples/good-comment-after-value.bconf
new file mode 100644
index 0000000..0d92a85
--- /dev/null
+++ b/tools/bootconfig/samples/good-comment-after-value.bconf
@@ -0,0 +1 @@
+key = "value"  # comment
diff --git a/tools/bootconfig/samples/good-mixed-append.bconf b/tools/bootconfig/samples/good-mixed-append.bconf
new file mode 100644
index 0000000..b99a089
--- /dev/null
+++ b/tools/bootconfig/samples/good-mixed-append.bconf
@@ -0,0 +1,4 @@
+key = foo
+keyx.subkey = value
+key += bar
+
diff --git a/tools/bootconfig/samples/good-mixed-kv1.bconf b/tools/bootconfig/samples/good-mixed-kv1.bconf
new file mode 100644
index 0000000..1761547
--- /dev/null
+++ b/tools/bootconfig/samples/good-mixed-kv1.bconf
@@ -0,0 +1,3 @@
+# value -> subkey pattern
+key = value
+key.subkey = another-value
diff --git a/tools/bootconfig/samples/good-mixed-kv2.bconf b/tools/bootconfig/samples/good-mixed-kv2.bconf
new file mode 100644
index 0000000..6b32e0c
--- /dev/null
+++ b/tools/bootconfig/samples/good-mixed-kv2.bconf
@@ -0,0 +1,3 @@
+# subkey -> value pattern
+key.subkey = value
+key = another-value
diff --git a/tools/bootconfig/samples/good-mixed-kv3.bconf b/tools/bootconfig/samples/good-mixed-kv3.bconf
new file mode 100644
index 0000000..2ce2b02
--- /dev/null
+++ b/tools/bootconfig/samples/good-mixed-kv3.bconf
@@ -0,0 +1,6 @@
+# mixed key and subkeys with braces
+key = value
+key {
+	subkey1
+	subkey2 = foo
+}
diff --git a/tools/bootconfig/samples/good-mixed-override.bconf b/tools/bootconfig/samples/good-mixed-override.bconf
new file mode 100644
index 0000000..18195b2
--- /dev/null
+++ b/tools/bootconfig/samples/good-mixed-override.bconf
@@ -0,0 +1,4 @@
+key.foo = bar
+key = value
+# mixed key value can be overridden
+key := value2
diff --git a/tools/bootconfig/samples/good-override.bconf b/tools/bootconfig/samples/good-override.bconf
new file mode 100644
index 0000000..7d31d5f8
--- /dev/null
+++ b/tools/bootconfig/samples/good-override.bconf
@@ -0,0 +1,6 @@
+# Override the value
+key.word = 1,2,4
+key.word := 2,3
+
+# No pre-defined key
+key.new.word := "new"
diff --git a/tools/bootconfig/samples/good-printables.bconf b/tools/bootconfig/samples/good-printables.bconf
new file mode 100644
index 0000000..ebb985a
--- /dev/null
+++ b/tools/bootconfig/samples/good-printables.bconf
@@ -0,0 +1,2 @@
+key = "	
+ !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
diff --git a/tools/bootconfig/samples/good-simple.bconf b/tools/bootconfig/samples/good-simple.bconf
new file mode 100644
index 0000000..37dd6d2
--- /dev/null
+++ b/tools/bootconfig/samples/good-simple.bconf
@@ -0,0 +1,11 @@
+# A good simple bootconfig
+
+key.word1 = 1
+key.word2=2
+key.word3 = 3;
+
+key {
+word4 = 4 }
+
+key { word5 = 5; word6 = 6 }
+
diff --git a/tools/bootconfig/samples/good-single.bconf b/tools/bootconfig/samples/good-single.bconf
new file mode 100644
index 0000000..98e55ad
--- /dev/null
+++ b/tools/bootconfig/samples/good-single.bconf
@@ -0,0 +1,4 @@
+# single key style
+key = 1
+key2 = 2
+key3 = "alpha", "beta"
diff --git a/tools/bootconfig/samples/good-space-after-value.bconf b/tools/bootconfig/samples/good-space-after-value.bconf
new file mode 100644
index 0000000..56c15cb
--- /dev/null
+++ b/tools/bootconfig/samples/good-space-after-value.bconf
@@ -0,0 +1 @@
+key = "value"   
diff --git a/tools/bootconfig/samples/good-tree.bconf b/tools/bootconfig/samples/good-tree.bconf
new file mode 100644
index 0000000..f2ddefc
--- /dev/null
+++ b/tools/bootconfig/samples/good-tree.bconf
@@ -0,0 +1,12 @@
+key {
+  word {
+    tree {
+      value = "0"}
+  }
+  word2 {
+    tree {
+      value = 1,2 }
+  }
+}
+other.tree {
+  value = 2; value2 = 3;}
diff --git a/tools/bootconfig/scripts/ftrace2bconf.sh b/tools/bootconfig/scripts/ftrace2bconf.sh
new file mode 100755
index 0000000..6c0d4b6
--- /dev/null
+++ b/tools/bootconfig/scripts/ftrace2bconf.sh
@@ -0,0 +1,244 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+usage() {
+	echo "Dump boot-time tracing bootconfig from ftrace"
+	echo "Usage: $0 [--debug] [ > BOOTCONFIG-FILE]"
+	exit 1
+}
+
+DEBUG=
+while [ x"$1" != x ]; do
+	case "$1" in
+	"--debug")
+		DEBUG=$1;;
+	-*)
+		usage
+		;;
+	esac
+	shift 1
+done
+
+if [ x"$DEBUG" != x ]; then
+	set -x
+fi
+
+TRACEFS=`grep -m 1 -w tracefs /proc/mounts | cut -f 2 -d " "`
+if [ -z "$TRACEFS" ]; then
+	if ! grep -wq debugfs /proc/mounts; then
+		echo "Error: No tracefs/debugfs was mounted."
+		exit 1
+	fi
+	TRACEFS=`grep -m 1 -w debugfs /proc/mounts | cut -f 2 -d " "`/tracing
+	if [ ! -d $TRACEFS ]; then
+		echo "Error: ftrace is not enabled on this kernel." 1>&2
+		exit 1
+	fi
+fi
+
+######## main #########
+
+set -e
+
+emit_kv() { # key =|+= value
+	echo "$@"
+}
+
+global_options() {
+	val=`cat $TRACEFS/max_graph_depth`
+	[ $val != 0 ] && emit_kv kernel.fgraph_max_depth = $val
+	if grep -qv "^#" $TRACEFS/set_graph_function $TRACEFS/set_graph_notrace ; then
+		cat 1>&2 << EOF
+# WARN: kernel.fgraph_filters and kernel.fgraph_notrace are not supported, since the wild card expression was expanded and lost from memory.
+EOF
+	fi
+}
+
+kprobe_event_options() {
+	cat $TRACEFS/kprobe_events | while read p args; do
+		case $p in
+		r*)
+		cat 1>&2 << EOF
+# WARN: A return probe found but it is not supported by bootconfig. Skip it.
+EOF
+		continue;;
+		esac
+		p=${p#*:}
+		event=${p#*/}
+		group=${p%/*}
+		if [ $group != "kprobes" ]; then
+			cat 1>&2 << EOF
+# WARN: kprobes group name $group is changed to "kprobes" for bootconfig.
+EOF
+		fi
+		emit_kv $PREFIX.event.kprobes.$event.probes += $args
+	done
+}
+
+synth_event_options() {
+	cat $TRACEFS/synthetic_events | while read event fields; do
+		emit_kv $PREFIX.event.synthetic.$event.fields = `echo $fields | sed "s/;/,/g"`
+	done
+}
+
+# Variables resolver
+DEFINED_VARS=
+UNRESOLVED_EVENTS=
+
+defined_vars() { # event-dir
+	grep "^hist" $1/trigger | grep -o ':[a-zA-Z0-9]*='
+}
+referred_vars() {
+	grep "^hist" $1/trigger | grep -o '$[a-zA-Z0-9]*'
+}
+
+per_event_options() { # event-dir
+	evdir=$1
+	# Check the special event which has no filter and no trigger
+	[ ! -f $evdir/filter ] && return
+
+	if grep -q "^hist:" $evdir/trigger; then
+		# hist action can refer the undefined variables
+		__vars=`defined_vars $evdir`
+		for v in `referred_vars $evdir`; do
+			if echo $DEFINED_VARS $__vars | grep -vqw ${v#$}; then
+				# $v is not defined yet, defer it
+				UNRESOLVED_EVENTS="$UNRESOLVED_EVENTS $evdir"
+				return;
+			fi
+		done
+		DEFINED_VARS="$DEFINED_VARS "`defined_vars $evdir`
+	fi
+	grep -v "^#" $evdir/trigger | while read action active; do
+		emit_kv $PREFIX.event.$group.$event.actions += \'$action\'
+	done
+
+	# enable is not checked; this is done by set_event in the instance.
+	val=`cat $evdir/filter`
+	if [ "$val" != "none" ]; then
+		emit_kv $PREFIX.event.$group.$event.filter = "$val"
+	fi
+}
+
+retry_unresolved() {
+	unresolved=$UNRESOLVED_EVENTS
+	UNRESOLVED_EVENTS=
+	for evdir in $unresolved; do
+		event=${evdir##*/}
+		group=${evdir%/*}; group=${group##*/}
+		per_event_options $evdir
+	done
+}
+
+event_options() {
+	# PREFIX and INSTANCE must be set
+	if [ $PREFIX = "ftrace" ]; then
+		# define the dynamic events
+		kprobe_event_options
+		synth_event_options
+	fi
+	for group in `ls $INSTANCE/events/` ; do
+		[ ! -d $INSTANCE/events/$group ] && continue
+		for event in `ls $INSTANCE/events/$group/` ;do
+			[ ! -d $INSTANCE/events/$group/$event ] && continue
+			per_event_options $INSTANCE/events/$group/$event
+		done
+	done
+	retry=0
+	while [ $retry -lt 3 ]; do
+		retry_unresolved
+		retry=$((retry + 1))
+	done
+	if [ "$UNRESOLVED_EVENTS" ]; then
+		cat 1>&2 << EOF
+! ERROR: hist triggers in $UNRESOLVED_EVENTS use some undefined variables.
+EOF
+	fi
+}
+
+is_default_trace_option() { # option
+grep -qw $1 << EOF
+print-parent
+nosym-offset
+nosym-addr
+noverbose
+noraw
+nohex
+nobin
+noblock
+trace_printk
+annotate
+nouserstacktrace
+nosym-userobj
+noprintk-msg-only
+context-info
+nolatency-format
+record-cmd
+norecord-tgid
+overwrite
+nodisable_on_free
+irq-info
+markers
+noevent-fork
+nopause-on-trace
+function-trace
+nofunction-fork
+nodisplay-graph
+nostacktrace
+notest_nop_accept
+notest_nop_refuse
+EOF
+}
+
+instance_options() { # [instance-name]
+	if [ $# -eq 0 ]; then
+		PREFIX="ftrace"
+		INSTANCE=$TRACEFS
+	else
+		PREFIX="ftrace.instance.$1"
+		INSTANCE=$TRACEFS/instances/$1
+	fi
+	val=
+	for i in `cat $INSTANCE/trace_options`; do
+		is_default_trace_option $i && continue
+		val="$val, $i"
+	done
+	[ "$val" ] && emit_kv $PREFIX.options = "${val#,}"
+	val="local"
+	for i in `cat $INSTANCE/trace_clock` ; do
+		[ "${i#*]}" ] && continue
+		i=${i%]}; val=${i#[}
+	done
+	[ $val != "local" ] && emit_kv $PREFIX.trace_clock = $val
+	val=`cat $INSTANCE/buffer_size_kb`
+	if echo $val | grep -vq "expanded" ; then
+		emit_kv $PREFIX.buffer_size = $val"KB"
+	fi
+	if grep -q "is allocated" $INSTANCE/snapshot ; then
+		emit_kv $PREFIX.alloc_snapshot
+	fi
+	val=`cat $INSTANCE/tracing_cpumask`
+	if [ `echo $val | sed -e s/f//g`x != x ]; then
+		emit_kv $PREFIX.cpumask = $val
+	fi
+
+	val=
+	for i in `cat $INSTANCE/set_event`; do
+		val="$val, $i"
+	done
+	[ "$val" ] && emit_kv $PREFIX.events = "${val#,}"
+	val=`cat $INSTANCE/current_tracer`
+	[ $val != nop ] && emit_kv $PREFIX.tracer = $val
+	if grep -qv "^#" $INSTANCE/set_ftrace_filter $INSTANCE/set_ftrace_notrace; then
+		cat 1>&2 << EOF
+# WARN: kernel.ftrace.filters and kernel.ftrace.notrace are not supported, since the wild card expression was expanded and lost from memory.
+EOF
+	fi
+	event_options
+}
+
+global_options
+instance_options
+for i in `ls $TRACEFS/instances` ; do
+	instance_options $i
+done
diff --git a/tools/bootconfig/test-bootconfig.sh b/tools/bootconfig/test-bootconfig.sh
new file mode 100755
index 0000000..baed891
--- /dev/null
+++ b/tools/bootconfig/test-bootconfig.sh
@@ -0,0 +1,191 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0-only
+
+echo "Boot config test script"
+
+if [ -d "$1" ]; then
+  TESTDIR=$1
+else
+  TESTDIR=.
+fi
+BOOTCONF=${TESTDIR}/bootconfig
+ALIGN=4
+
+INITRD=`mktemp ${TESTDIR}/initrd-XXXX`
+TEMPCONF=`mktemp ${TESTDIR}/temp-XXXX.bconf`
+OUTFILE=`mktemp ${TESTDIR}/tempout-XXXX`
+NG=0
+
+cleanup() {
+  rm -f $INITRD $TEMPCONF $OUTFILE
+  exit $NG
+}
+
+trap cleanup EXIT TERM
+
+NO=1
+
+xpass() { # pass test command
+  echo "test case $NO ($3)... "
+  if ! ($@ && echo "\t\t[OK]"); then
+     echo "\t\t[NG]"; NG=$((NG + 1))
+  fi
+  NO=$((NO + 1))
+}
+
+xfail() { # fail test command
+  echo "test case $NO ($3)... "
+  if ! (! $@ && echo "\t\t[OK]"); then
+     echo "\t\t[NG]"; NG=$((NG + 1))
+  fi
+  NO=$((NO + 1))
+}
+
+echo "Basic command test"
+xpass $BOOTCONF $INITRD
+
+echo "Delete command should success without bootconfig"
+xpass $BOOTCONF -d $INITRD
+
+dd if=/dev/zero of=$INITRD bs=4096 count=1
+echo "key = value;" > $TEMPCONF
+bconf_size=$(stat -c %s $TEMPCONF)
+initrd_size=$(stat -c %s $INITRD)
+
+echo "Apply command test"
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+new_size=$(stat -c %s $INITRD)
+
+echo "Show command test"
+xpass $BOOTCONF $INITRD
+
+echo "File size check"
+total_size=$(expr $bconf_size + $initrd_size + 9 + 12 + $ALIGN - 1 )
+total_size=$(expr $total_size / $ALIGN)
+total_size=$(expr $total_size \* $ALIGN)
+xpass test $new_size -eq $total_size
+
+echo "Apply command repeat test"
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "File size check"
+xpass test $new_size -eq $(stat -c %s $INITRD)
+
+echo "Delete command check"
+xpass $BOOTCONF -d $INITRD
+
+echo "File size check"
+new_size=$(stat -c %s $INITRD)
+xpass test $new_size -eq $initrd_size
+
+echo "No error messge while applying"
+dd if=/dev/zero of=$INITRD bs=4096 count=1
+printf " \0\0\0 \0\0\0" >> $INITRD
+$BOOTCONF -a $TEMPCONF $INITRD > $OUTFILE 2>&1
+xfail grep -i "failed" $OUTFILE
+xfail grep -i "error" $OUTFILE
+
+echo "Max node number check"
+
+echo -n > $TEMPCONF
+for i in `seq 1 1024` ; do
+   echo "node$i" >> $TEMPCONF
+done
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "badnode" >> $TEMPCONF
+xfail $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "Max filesize check"
+
+# Max size is 32767 (including terminal byte)
+echo -n "data = \"" > $TEMPCONF
+dd if=/dev/urandom bs=768 count=32 | base64 -w0 >> $TEMPCONF
+echo "\"" >> $TEMPCONF
+xfail $BOOTCONF -a $TEMPCONF $INITRD
+
+truncate -s 32764 $TEMPCONF
+echo "\"" >> $TEMPCONF	# add 2 bytes + terminal ('\"\n\0')
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+
+echo "Adding same-key values"
+cat > $TEMPCONF << EOF
+key = bar, baz
+key += qux
+EOF
+echo > $INITRD
+
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $OUTFILE
+xpass grep -q "bar" $OUTFILE
+xpass grep -q "baz" $OUTFILE
+xpass grep -q "qux" $OUTFILE
+
+echo "Override same-key values"
+cat > $TEMPCONF << EOF
+key = bar, baz
+key := qux
+EOF
+echo > $INITRD
+
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $OUTFILE
+xfail grep -q "bar" $OUTFILE
+xfail grep -q "baz" $OUTFILE
+xpass grep -q "qux" $OUTFILE
+
+echo "Double/single quotes test"
+echo "key = '\"string\"';" > $TEMPCONF
+$BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $TEMPCONF
+cat $TEMPCONF
+xpass grep \'\"string\"\' $TEMPCONF
+
+echo "Repeat same-key tree"
+cat > $TEMPCONF << EOF
+foo
+bar
+foo { buz }
+EOF
+echo > $INITRD
+
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $OUTFILE
+xpass grep -q "bar" $OUTFILE
+
+
+echo "Remove/keep tailing spaces"
+cat > $TEMPCONF << EOF
+foo = val     # comment
+bar = "val2 " # comment
+EOF
+echo > $INITRD
+
+xpass $BOOTCONF -a $TEMPCONF $INITRD
+$BOOTCONF $INITRD > $OUTFILE
+xfail grep -q val[[:space:]] $OUTFILE
+xpass grep -q val2[[:space:]] $OUTFILE
+
+echo "=== expected failure cases ==="
+for i in samples/bad-* ; do
+  xfail $BOOTCONF -a $i $INITRD
+done
+
+echo "=== expected success cases ==="
+for i in samples/good-* ; do
+  xpass $BOOTCONF -a $i $INITRD
+done
+
+
+echo
+echo "=== Summary ==="
+echo "# of Passed: $(expr $NO - $NG - 1)"
+echo "# of Failed: $NG"
+
+echo
+if [ $NG -eq 0 ]; then
+	echo "All tests passed"
+else
+	echo "$NG tests failed"
+	exit 1
+fi
diff --git a/tools/include/uapi/asm-generic/unistd.h b/tools/include/uapi/asm-generic/unistd.h
index 1fc8faa..674a0b0 100644
--- a/tools/include/uapi/asm-generic/unistd.h
+++ b/tools/include/uapi/asm-generic/unistd.h
@@ -850,9 +850,11 @@
 #define __NR_clone3 435
 __SYSCALL(__NR_clone3, sys_clone3)
 #endif
+#define __NR_process_madvise 440
+__SYSCALL(__NR_process_madvise, sys_process_madvise)
 
 #undef __NR_syscalls
-#define __NR_syscalls 436
+#define __NR_syscalls 441
 
 /*
  * 32 bit systems traditionally used different
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index 63038eb..7487031 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -570,6 +570,8 @@
  * u64 bpf_ktime_get_ns(void)
  * 	Description
  * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does not include time the system was suspended.
+ * 		See: clock_gettime(CLOCK_MONOTONIC)
  * 	Return
  * 		Current *ktime*.
  *
@@ -2750,6 +2752,14 @@
  *		**-EOPNOTSUPP** kernel configuration does not enable SYN cookies
  *
  *		**-EPROTONOSUPPORT** IP packet version is not 4 or 6
+ *
+ * u64 bpf_ktime_get_boot_ns(void)
+ * 	Description
+ * 		Return the time elapsed since system boot, in nanoseconds.
+ * 		Does include the time the system was suspended.
+ * 		See: clock_gettime(CLOCK_BOOTTIME)
+ * 	Return
+ * 		Current *ktime*.
  */
 #define __BPF_FUNC_MAPPER(FN)		\
 	FN(unspec),			\
@@ -2862,7 +2872,22 @@
 	FN(sk_storage_get),		\
 	FN(sk_storage_delete),		\
 	FN(send_signal),		\
-	FN(tcp_gen_syncookie),
+	FN(tcp_gen_syncookie),		\
+	FN(skb_output),			\
+	FN(probe_read_user),		\
+	FN(probe_read_kernel),		\
+	FN(probe_read_user_str),	\
+	FN(probe_read_kernel_str),	\
+	FN(tcp_send_ack),		\
+	FN(send_signal_thread),		\
+	FN(jiffies64),			\
+	FN(read_branch_records),	\
+	FN(get_ns_current_pid_tgid),	\
+	FN(xdp_output),			\
+	FN(get_netns_cookie),		\
+	FN(get_current_ancestor_cgroup_id),	\
+	FN(sk_assign),			\
+	FN(ktime_get_boot_ns),
 
 /* integer value in 'imm' field of BPF_CALL instruction selects which helper
  * function eBPF program intends to call
diff --git a/tools/include/uapi/linux/mman.h b/tools/include/uapi/linux/mman.h
index fc1a64c..923cc16 100644
--- a/tools/include/uapi/linux/mman.h
+++ b/tools/include/uapi/linux/mman.h
@@ -5,8 +5,9 @@
 #include <asm/mman.h>
 #include <asm-generic/hugetlb_encode.h>
 
-#define MREMAP_MAYMOVE	1
-#define MREMAP_FIXED	2
+#define MREMAP_MAYMOVE		1
+#define MREMAP_FIXED		2
+#define MREMAP_DONTUNMAP	4
 
 #define OVERCOMMIT_GUESS		0
 #define OVERCOMMIT_ALWAYS		1
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 06aaf04e..f769ef1 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -144,6 +144,7 @@
 		"usercopy_abort",
 		"machine_real_restart",
 		"rewind_stack_do_exit",
+		"kunit_try_catch_throw",
 	};
 
 	if (!func)
diff --git a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
index 43f736e..c855a27 100644
--- a/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
+++ b/tools/perf/arch/powerpc/entry/syscalls/syscall.tbl
@@ -517,3 +517,4 @@
 433	common	fspick				sys_fspick
 434	common	pidfd_open			sys_pidfd_open
 435	nospu	clone3				ppc_clone3
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/tools/perf/arch/s390/entry/syscalls/syscall.tbl b/tools/perf/arch/s390/entry/syscalls/syscall.tbl
index b38d484..bb1fb03 100644
--- a/tools/perf/arch/s390/entry/syscalls/syscall.tbl
+++ b/tools/perf/arch/s390/entry/syscalls/syscall.tbl
@@ -388,3 +388,4 @@
 378  common	s390_guarded_storage	sys_s390_guarded_storage	compat_sys_s390_guarded_storage
 379  common	statx			sys_statx			compat_sys_statx
 380  common	s390_sthyi		sys_s390_sthyi			compat_sys_s390_sthyi
+440	common	process_madvise		sys_process_madvise
\ No newline at end of file
diff --git a/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
index c29976e..2a49bd0 100644
--- a/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/tools/perf/arch/x86/entry/syscalls/syscall_64.tbl
@@ -357,6 +357,7 @@
 433	common	fspick			__x64_sys_fspick
 434	common	pidfd_open		__x64_sys_pidfd_open
 435	common	clone3			__x64_sys_clone3/ptregs
+440	common	process_madvise		__x64_sys_process_madvise
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
@@ -399,4 +400,4 @@
 544	x32	io_submit		__x32_compat_sys_io_submit
 545	x32	execveat		__x32_compat_sys_execveat/ptregs
 546	x32	preadv2			__x32_compat_sys_preadv64v2
-547	x32	pwritev2		__x32_compat_sys_pwritev64v2
+547	x32	pwritev2		__x32_compat_sys_pwritev64v2
\ No newline at end of file
diff --git a/tools/perf/trace/beauty/mmap.c b/tools/perf/trace/beauty/mmap.c
index 859a8a9..60ba97d 100644
--- a/tools/perf/trace/beauty/mmap.c
+++ b/tools/perf/trace/beauty/mmap.c
@@ -69,6 +69,7 @@
 
 	P_MREMAP_FLAG(MAYMOVE);
 	P_MREMAP_FLAG(FIXED);
+	P_MREMAP_FLAG(DONTUNMAP);
 #undef P_MREMAP_FLAG
 
 	if (flags)
diff --git a/tools/testing/kunit/.gitignore b/tools/testing/kunit/.gitignore
new file mode 100644
index 0000000..c791ff5
--- /dev/null
+++ b/tools/testing/kunit/.gitignore
@@ -0,0 +1,3 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
\ No newline at end of file
diff --git a/tools/testing/kunit/configs/all_tests.config b/tools/testing/kunit/configs/all_tests.config
new file mode 100644
index 0000000..9235b7d
--- /dev/null
+++ b/tools/testing/kunit/configs/all_tests.config
@@ -0,0 +1,3 @@
+CONFIG_KUNIT=y
+CONFIG_KUNIT_TEST=y
+CONFIG_KUNIT_EXAMPLE_TEST=y
diff --git a/tools/testing/kunit/kunit.py b/tools/testing/kunit/kunit.py
new file mode 100755
index 0000000..efe06d6
--- /dev/null
+++ b/tools/testing/kunit/kunit.py
@@ -0,0 +1,138 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# A thin wrapper on top of the KUnit Kernel
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import argparse
+import sys
+import os
+import time
+import shutil
+
+from collections import namedtuple
+from enum import Enum, auto
+
+import kunit_config
+import kunit_kernel
+import kunit_parser
+
+KunitResult = namedtuple('KunitResult', ['status','result'])
+
+KunitRequest = namedtuple('KunitRequest', ['raw_output','timeout', 'jobs', 'build_dir', 'defconfig'])
+
+class KunitStatus(Enum):
+	SUCCESS = auto()
+	CONFIG_FAILURE = auto()
+	BUILD_FAILURE = auto()
+	TEST_FAILURE = auto()
+
+def create_default_kunitconfig():
+	if not os.path.exists(kunit_kernel.KUNITCONFIG_PATH):
+		shutil.copyfile('arch/um/configs/kunit_defconfig',
+				kunit_kernel.KUNITCONFIG_PATH)
+
+def run_tests(linux: kunit_kernel.LinuxSourceTree,
+	      request: KunitRequest) -> KunitResult:
+	if request.defconfig:
+		create_default_kunitconfig()
+
+	config_start = time.time()
+	success = linux.build_reconfig(request.build_dir)
+	config_end = time.time()
+	if not success:
+		return KunitResult(KunitStatus.CONFIG_FAILURE, 'could not configure kernel')
+
+	kunit_parser.print_with_timestamp('Building KUnit Kernel ...')
+
+	build_start = time.time()
+	success = linux.build_um_kernel(request.jobs, request.build_dir)
+	build_end = time.time()
+	if not success:
+		return KunitResult(KunitStatus.BUILD_FAILURE, 'could not build kernel')
+
+	kunit_parser.print_with_timestamp('Starting KUnit Kernel ...')
+	test_start = time.time()
+
+	test_result = kunit_parser.TestResult(kunit_parser.TestStatus.SUCCESS,
+					      [],
+					      'Tests not Parsed.')
+	if request.raw_output:
+		kunit_parser.raw_output(
+			linux.run_kernel(timeout=request.timeout,
+					 build_dir=request.build_dir))
+	else:
+		kunit_output = linux.run_kernel(timeout=request.timeout,
+						build_dir=request.build_dir)
+		test_result = kunit_parser.parse_run_tests(kunit_output)
+	test_end = time.time()
+
+	kunit_parser.print_with_timestamp((
+		'Elapsed time: %.3fs total, %.3fs configuring, %.3fs ' +
+		'building, %.3fs running\n') % (
+				test_end - config_start,
+				config_end - config_start,
+				build_end - build_start,
+				test_end - test_start))
+
+	if test_result.status != kunit_parser.TestStatus.SUCCESS:
+		return KunitResult(KunitStatus.TEST_FAILURE, test_result)
+	else:
+		return KunitResult(KunitStatus.SUCCESS, test_result)
+
+def main(argv, linux=None):
+	parser = argparse.ArgumentParser(
+			description='Helps writing and running KUnit tests.')
+	subparser = parser.add_subparsers(dest='subcommand')
+
+	run_parser = subparser.add_parser('run', help='Runs KUnit tests.')
+	run_parser.add_argument('--raw_output', help='don\'t format output from kernel',
+				action='store_true')
+
+	run_parser.add_argument('--timeout',
+				help='maximum number of seconds to allow for all tests '
+				'to run. This does not include time taken to build the '
+				'tests.',
+				type=int,
+				default=300,
+				metavar='timeout')
+
+	run_parser.add_argument('--jobs',
+				help='As in the make command, "Specifies  the number of '
+				'jobs (commands) to run simultaneously."',
+				type=int, default=8, metavar='jobs')
+
+	run_parser.add_argument('--build_dir',
+				help='As in the make command, it specifies the build '
+				'directory.',
+				type=str, default=None, metavar='build_dir')
+
+	run_parser.add_argument('--defconfig',
+				help='Uses a default kunitconfig.',
+				action='store_true')
+
+	cli_args = parser.parse_args(argv)
+
+	if cli_args.subcommand == 'run':
+		if cli_args.defconfig:
+			create_default_kunitconfig()
+
+		if not linux:
+			linux = kunit_kernel.LinuxSourceTree()
+
+		request = KunitRequest(cli_args.raw_output,
+				       cli_args.timeout,
+				       cli_args.jobs,
+				       cli_args.build_dir,
+				       cli_args.defconfig)
+		result = run_tests(linux, request)
+		if result.status != KunitStatus.SUCCESS:
+			sys.exit(1)
+	else:
+		parser.print_help()
+
+if __name__ == '__main__':
+	main(sys.argv[1:])
diff --git a/tools/testing/kunit/kunit_config.py b/tools/testing/kunit/kunit_config.py
new file mode 100644
index 0000000..9a4ff03d
--- /dev/null
+++ b/tools/testing/kunit/kunit_config.py
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Builds a .config from a kunitconfig.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import collections
+import re
+
+CONFIG_IS_NOT_SET_PATTERN = r'^# CONFIG_\w+ is not set$'
+CONFIG_PATTERN = r'^CONFIG_\w+=(\S+|".*")$'
+
+KconfigEntryBase = collections.namedtuple('KconfigEntry', ['raw_entry'])
+
+
+class KconfigEntry(KconfigEntryBase):
+
+	def __str__(self) -> str:
+		return self.raw_entry
+
+
+class KconfigParseError(Exception):
+	"""Error parsing Kconfig defconfig or .config."""
+
+
+class Kconfig(object):
+	"""Represents defconfig or .config specified using the Kconfig language."""
+
+	def __init__(self):
+		self._entries = []
+
+	def entries(self):
+		return set(self._entries)
+
+	def add_entry(self, entry: KconfigEntry) -> None:
+		self._entries.append(entry)
+
+	def is_subset_of(self, other: 'Kconfig') -> bool:
+		return self.entries().issubset(other.entries())
+
+	def write_to_file(self, path: str) -> None:
+		with open(path, 'w') as f:
+			for entry in self.entries():
+				f.write(str(entry) + '\n')
+
+	def parse_from_string(self, blob: str) -> None:
+		"""Parses a string containing KconfigEntrys and populates this Kconfig."""
+		self._entries = []
+		is_not_set_matcher = re.compile(CONFIG_IS_NOT_SET_PATTERN)
+		config_matcher = re.compile(CONFIG_PATTERN)
+		for line in blob.split('\n'):
+			line = line.strip()
+			if not line:
+				continue
+			elif config_matcher.match(line) or is_not_set_matcher.match(line):
+				self._entries.append(KconfigEntry(line))
+			elif line[0] == '#':
+				continue
+			else:
+				raise KconfigParseError('Failed to parse: ' + line)
+
+	def read_from_file(self, path: str) -> None:
+		with open(path, 'r') as f:
+			self.parse_from_string(f.read())
diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kunit_kernel.py
new file mode 100644
index 0000000..f02955a
--- /dev/null
+++ b/tools/testing/kunit/kunit_kernel.py
@@ -0,0 +1,151 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Runs UML kernel, collects output, and handles errors.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+
+import logging
+import subprocess
+import os
+
+import kunit_config
+
+KCONFIG_PATH = '.config'
+KUNITCONFIG_PATH = 'kunitconfig'
+
+class ConfigError(Exception):
+	"""Represents an error trying to configure the Linux kernel."""
+
+
+class BuildError(Exception):
+	"""Represents an error trying to build the Linux kernel."""
+
+
+class LinuxSourceTreeOperations(object):
+	"""An abstraction over command line operations performed on a source tree."""
+
+	def make_mrproper(self):
+		try:
+			subprocess.check_output(['make', 'mrproper'])
+		except OSError as e:
+			raise ConfigError('Could not call make command: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise ConfigError(e.output)
+
+	def make_olddefconfig(self, build_dir):
+		command = ['make', 'ARCH=um', 'olddefconfig']
+		if build_dir:
+			command += ['O=' + build_dir]
+		try:
+			subprocess.check_output(command)
+		except OSError as e:
+			raise ConfigError('Could not call make command: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise ConfigError(e.output)
+
+	def make(self, jobs, build_dir):
+		command = ['make', 'ARCH=um', '--jobs=' + str(jobs)]
+		if build_dir:
+			command += ['O=' + build_dir]
+		try:
+			subprocess.check_output(command)
+		except OSError as e:
+			raise BuildError('Could not call execute make: ' + e)
+		except subprocess.CalledProcessError as e:
+			raise BuildError(e.output)
+
+	def linux_bin(self, params, timeout, build_dir):
+		"""Runs the Linux UML binary. Must be named 'linux'."""
+		linux_bin = './linux'
+		if build_dir:
+			linux_bin = os.path.join(build_dir, 'linux')
+		process = subprocess.Popen(
+			[linux_bin] + params,
+			stdin=subprocess.PIPE,
+			stdout=subprocess.PIPE,
+			stderr=subprocess.PIPE)
+		process.wait(timeout=timeout)
+		return process
+
+
+def get_kconfig_path(build_dir):
+	kconfig_path = KCONFIG_PATH
+	if build_dir:
+		kconfig_path = os.path.join(build_dir, KCONFIG_PATH)
+	return kconfig_path
+
+class LinuxSourceTree(object):
+	"""Represents a Linux kernel source tree with KUnit tests."""
+
+	def __init__(self):
+		self._kconfig = kunit_config.Kconfig()
+		self._kconfig.read_from_file(KUNITCONFIG_PATH)
+		self._ops = LinuxSourceTreeOperations()
+
+	def clean(self):
+		try:
+			self._ops.make_mrproper()
+		except ConfigError as e:
+			logging.error(e)
+			return False
+		return True
+
+	def build_config(self, build_dir):
+		kconfig_path = get_kconfig_path(build_dir)
+		if build_dir and not os.path.exists(build_dir):
+			os.mkdir(build_dir)
+		self._kconfig.write_to_file(kconfig_path)
+		try:
+			self._ops.make_olddefconfig(build_dir)
+		except ConfigError as e:
+			logging.error(e)
+			return False
+		validated_kconfig = kunit_config.Kconfig()
+		validated_kconfig.read_from_file(kconfig_path)
+		if not self._kconfig.is_subset_of(validated_kconfig):
+			logging.error('Provided Kconfig is not contained in validated .config!')
+			return False
+		return True
+
+	def build_reconfig(self, build_dir):
+		"""Creates a new .config if it is not a subset of the kunitconfig."""
+		kconfig_path = get_kconfig_path(build_dir)
+		if os.path.exists(kconfig_path):
+			existing_kconfig = kunit_config.Kconfig()
+			existing_kconfig.read_from_file(kconfig_path)
+			if not self._kconfig.is_subset_of(existing_kconfig):
+				print('Regenerating .config ...')
+				os.remove(kconfig_path)
+				return self.build_config(build_dir)
+			else:
+				return True
+		else:
+			print('Generating .config ...')
+			return self.build_config(build_dir)
+
+	def build_um_kernel(self, jobs, build_dir):
+		try:
+			self._ops.make_olddefconfig(build_dir)
+			self._ops.make(jobs, build_dir)
+		except (ConfigError, BuildError) as e:
+			logging.error(e)
+			return False
+		used_kconfig = kunit_config.Kconfig()
+		used_kconfig.read_from_file(get_kconfig_path(build_dir))
+		if not self._kconfig.is_subset_of(used_kconfig):
+			logging.error('Provided Kconfig is not contained in final config!')
+			return False
+		return True
+
+	def run_kernel(self, args=None, timeout=None, build_dir=None):
+		if not args:
+			args = []
+		args.extend(['mem=256M'])
+		process = self._ops.linux_bin(args, timeout, build_dir)
+		with open('test.log', 'w') as f:
+			for line in process.stdout:
+				f.write(line.rstrip().decode('ascii') + '\n')
+				yield line.rstrip().decode('ascii')
diff --git a/tools/testing/kunit/kunit_parser.py b/tools/testing/kunit/kunit_parser.py
new file mode 100644
index 0000000..c86eb07
--- /dev/null
+++ b/tools/testing/kunit/kunit_parser.py
@@ -0,0 +1,310 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Parses test results from a kernel dmesg log.
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Felix Guo <felixguoxiuping@gmail.com>
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import re
+
+from collections import namedtuple
+from datetime import datetime
+from enum import Enum, auto
+from functools import reduce
+from typing import List
+
+TestResult = namedtuple('TestResult', ['status','suites','log'])
+
+class TestSuite(object):
+	def __init__(self):
+		self.status = None
+		self.name = None
+		self.cases = []
+
+	def __str__(self):
+		return 'TestSuite(' + self.status + ',' + self.name + ',' + str(self.cases) + ')'
+
+	def __repr__(self):
+		return str(self)
+
+class TestCase(object):
+	def __init__(self):
+		self.status = None
+		self.name = ''
+		self.log = []
+
+	def __str__(self):
+		return 'TestCase(' + self.status + ',' + self.name + ',' + str(self.log) + ')'
+
+	def __repr__(self):
+		return str(self)
+
+class TestStatus(Enum):
+	SUCCESS = auto()
+	FAILURE = auto()
+	TEST_CRASHED = auto()
+	NO_TESTS = auto()
+
+kunit_start_re = re.compile(r'^TAP version [0-9]+$')
+kunit_end_re = re.compile('List of all partitions:')
+
+def isolate_kunit_output(kernel_output):
+	started = False
+	for line in kernel_output:
+		if kunit_start_re.match(line):
+			started = True
+			yield line
+		elif kunit_end_re.match(line):
+			break
+		elif started:
+			yield line
+
+def raw_output(kernel_output):
+	for line in kernel_output:
+		print(line)
+
+DIVIDER = '=' * 60
+
+RESET = '\033[0;0m'
+
+def red(text):
+	return '\033[1;31m' + text + RESET
+
+def yellow(text):
+	return '\033[1;33m' + text + RESET
+
+def green(text):
+	return '\033[1;32m' + text + RESET
+
+def print_with_timestamp(message):
+	print('[%s] %s' % (datetime.now().strftime('%H:%M:%S'), message))
+
+def format_suite_divider(message):
+	return '======== ' + message + ' ========'
+
+def print_suite_divider(message):
+	print_with_timestamp(DIVIDER)
+	print_with_timestamp(format_suite_divider(message))
+
+def print_log(log):
+	for m in log:
+		print_with_timestamp(m)
+
+TAP_ENTRIES = re.compile(r'^(TAP|\t?ok|\t?not ok|\t?[0-9]+\.\.[0-9]+|\t?#).*$')
+
+def consume_non_diagnositic(lines: List[str]) -> None:
+	while lines and not TAP_ENTRIES.match(lines[0]):
+		lines.pop(0)
+
+def save_non_diagnositic(lines: List[str], test_case: TestCase) -> None:
+	while lines and not TAP_ENTRIES.match(lines[0]):
+		test_case.log.append(lines[0])
+		lines.pop(0)
+
+OkNotOkResult = namedtuple('OkNotOkResult', ['is_ok','description', 'text'])
+
+OK_NOT_OK_SUBTEST = re.compile(r'^\t(ok|not ok) [0-9]+ - (.*)$')
+
+OK_NOT_OK_MODULE = re.compile(r'^(ok|not ok) [0-9]+ - (.*)$')
+
+def parse_ok_not_ok_test_case(lines: List[str],
+			      test_case: TestCase,
+			      expecting_test_case: bool) -> bool:
+	save_non_diagnositic(lines, test_case)
+	if not lines:
+		if expecting_test_case:
+			test_case.status = TestStatus.TEST_CRASHED
+			return True
+		else:
+			return False
+	line = lines[0]
+	match = OK_NOT_OK_SUBTEST.match(line)
+	if match:
+		test_case.log.append(lines.pop(0))
+		test_case.name = match.group(2)
+		if test_case.status == TestStatus.TEST_CRASHED:
+			return True
+		if match.group(1) == 'ok':
+			test_case.status = TestStatus.SUCCESS
+		else:
+			test_case.status = TestStatus.FAILURE
+		return True
+	else:
+		return False
+
+SUBTEST_DIAGNOSTIC = re.compile(r'^\t# .*?: (.*)$')
+DIAGNOSTIC_CRASH_MESSAGE = 'kunit test case crashed!'
+
+def parse_diagnostic(lines: List[str], test_case: TestCase) -> bool:
+	save_non_diagnositic(lines, test_case)
+	if not lines:
+		return False
+	line = lines[0]
+	match = SUBTEST_DIAGNOSTIC.match(line)
+	if match:
+		test_case.log.append(lines.pop(0))
+		if match.group(1) == DIAGNOSTIC_CRASH_MESSAGE:
+			test_case.status = TestStatus.TEST_CRASHED
+		return True
+	else:
+		return False
+
+def parse_test_case(lines: List[str], expecting_test_case: bool) -> TestCase:
+	test_case = TestCase()
+	save_non_diagnositic(lines, test_case)
+	while parse_diagnostic(lines, test_case):
+		pass
+	if parse_ok_not_ok_test_case(lines, test_case, expecting_test_case):
+		return test_case
+	else:
+		return None
+
+SUBTEST_HEADER = re.compile(r'^\t# Subtest: (.*)$')
+
+def parse_subtest_header(lines: List[str]) -> str:
+	consume_non_diagnositic(lines)
+	if not lines:
+		return None
+	match = SUBTEST_HEADER.match(lines[0])
+	if match:
+		lines.pop(0)
+		return match.group(1)
+	else:
+		return None
+
+SUBTEST_PLAN = re.compile(r'\t[0-9]+\.\.([0-9]+)')
+
+def parse_subtest_plan(lines: List[str]) -> int:
+	consume_non_diagnositic(lines)
+	match = SUBTEST_PLAN.match(lines[0])
+	if match:
+		lines.pop(0)
+		return int(match.group(1))
+	else:
+		return None
+
+def max_status(left: TestStatus, right: TestStatus) -> TestStatus:
+	if left == TestStatus.TEST_CRASHED or right == TestStatus.TEST_CRASHED:
+		return TestStatus.TEST_CRASHED
+	elif left == TestStatus.FAILURE or right == TestStatus.FAILURE:
+		return TestStatus.FAILURE
+	elif left != TestStatus.SUCCESS:
+		return left
+	elif right != TestStatus.SUCCESS:
+		return right
+	else:
+		return TestStatus.SUCCESS
+
+def parse_ok_not_ok_test_suite(lines: List[str], test_suite: TestSuite) -> bool:
+	consume_non_diagnositic(lines)
+	if not lines:
+		test_suite.status = TestStatus.TEST_CRASHED
+		return False
+	line = lines[0]
+	match = OK_NOT_OK_MODULE.match(line)
+	if match:
+		lines.pop(0)
+		if match.group(1) == 'ok':
+			test_suite.status = TestStatus.SUCCESS
+		else:
+			test_suite.status = TestStatus.FAILURE
+		return True
+	else:
+		return False
+
+def bubble_up_errors(to_status, status_container_list) -> TestStatus:
+	status_list = map(to_status, status_container_list)
+	return reduce(max_status, status_list, TestStatus.SUCCESS)
+
+def bubble_up_test_case_errors(test_suite: TestSuite) -> TestStatus:
+	max_test_case_status = bubble_up_errors(lambda x: x.status, test_suite.cases)
+	return max_status(max_test_case_status, test_suite.status)
+
+def parse_test_suite(lines: List[str]) -> TestSuite:
+	if not lines:
+		return None
+	consume_non_diagnositic(lines)
+	test_suite = TestSuite()
+	test_suite.status = TestStatus.SUCCESS
+	name = parse_subtest_header(lines)
+	if not name:
+		return None
+	test_suite.name = name
+	expected_test_case_num = parse_subtest_plan(lines)
+	if expected_test_case_num is None:
+		return None
+	test_case = parse_test_case(lines, expected_test_case_num > 0)
+	expected_test_case_num -= 1
+	while test_case:
+		test_suite.cases.append(test_case)
+		test_case = parse_test_case(lines, expected_test_case_num > 0)
+		expected_test_case_num -= 1
+	if parse_ok_not_ok_test_suite(lines, test_suite):
+		test_suite.status = bubble_up_test_case_errors(test_suite)
+		return test_suite
+	elif not lines:
+		print_with_timestamp(red('[ERROR] ') + 'ran out of lines before end token')
+		return test_suite
+	else:
+		print('failed to parse end of suite' + lines[0])
+		return None
+
+TAP_HEADER = re.compile(r'^TAP version 14$')
+
+def parse_tap_header(lines: List[str]) -> bool:
+	consume_non_diagnositic(lines)
+	if TAP_HEADER.match(lines[0]):
+		lines.pop(0)
+		return True
+	else:
+		return False
+
+def bubble_up_suite_errors(test_suite_list: List[TestSuite]) -> TestStatus:
+	return bubble_up_errors(lambda x: x.status, test_suite_list)
+
+def parse_test_result(lines: List[str]) -> TestResult:
+	if not lines:
+		return TestResult(TestStatus.NO_TESTS, [], lines)
+	consume_non_diagnositic(lines)
+	if not parse_tap_header(lines):
+		return None
+	test_suites = []
+	test_suite = parse_test_suite(lines)
+	while test_suite:
+		test_suites.append(test_suite)
+		test_suite = parse_test_suite(lines)
+	return TestResult(bubble_up_suite_errors(test_suites), test_suites, lines)
+
+def parse_run_tests(kernel_output) -> TestResult:
+	total_tests = 0
+	failed_tests = 0
+	crashed_tests = 0
+	test_result = parse_test_result(list(isolate_kunit_output(kernel_output)))
+	for test_suite in test_result.suites:
+		if test_suite.status == TestStatus.SUCCESS:
+			print_suite_divider(green('[PASSED] ') + test_suite.name)
+		elif test_suite.status == TestStatus.TEST_CRASHED:
+			print_suite_divider(red('[CRASHED] ' + test_suite.name))
+		else:
+			print_suite_divider(red('[FAILED] ') + test_suite.name)
+		for test_case in test_suite.cases:
+			total_tests += 1
+			if test_case.status == TestStatus.SUCCESS:
+				print_with_timestamp(green('[PASSED] ') + test_case.name)
+			elif test_case.status == TestStatus.TEST_CRASHED:
+				crashed_tests += 1
+				print_with_timestamp(red('[CRASHED] ' + test_case.name))
+				print_log(map(yellow, test_case.log))
+				print_with_timestamp('')
+			else:
+				failed_tests += 1
+				print_with_timestamp(red('[FAILED] ') + test_case.name)
+				print_log(map(yellow, test_case.log))
+				print_with_timestamp('')
+	print_with_timestamp(DIVIDER)
+	fmt = green if test_result.status == TestStatus.SUCCESS else red
+	print_with_timestamp(
+		fmt('Testing complete. %d tests run. %d failed. %d crashed.' %
+		    (total_tests, failed_tests, crashed_tests)))
+	return test_result
diff --git a/tools/testing/kunit/kunit_tool_test.py b/tools/testing/kunit/kunit_tool_test.py
new file mode 100755
index 0000000..4a12baa
--- /dev/null
+++ b/tools/testing/kunit/kunit_tool_test.py
@@ -0,0 +1,206 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: GPL-2.0
+#
+# A collection of tests for tools/testing/kunit/kunit.py
+#
+# Copyright (C) 2019, Google LLC.
+# Author: Brendan Higgins <brendanhiggins@google.com>
+
+import unittest
+from unittest import mock
+
+import tempfile, shutil # Handling test_tmpdir
+
+import os
+
+import kunit_config
+import kunit_parser
+import kunit_kernel
+import kunit
+
+test_tmpdir = ''
+
+def setUpModule():
+	global test_tmpdir
+	test_tmpdir = tempfile.mkdtemp()
+
+def tearDownModule():
+	shutil.rmtree(test_tmpdir)
+
+def get_absolute_path(path):
+	return os.path.join(os.path.dirname(__file__), path)
+
+class KconfigTest(unittest.TestCase):
+
+	def test_is_subset_of(self):
+		kconfig0 = kunit_config.Kconfig()
+		self.assertTrue(kconfig0.is_subset_of(kconfig0))
+
+		kconfig1 = kunit_config.Kconfig()
+		kconfig1.add_entry(kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		self.assertTrue(kconfig1.is_subset_of(kconfig1))
+		self.assertTrue(kconfig0.is_subset_of(kconfig1))
+		self.assertFalse(kconfig1.is_subset_of(kconfig0))
+
+	def test_read_from_file(self):
+		kconfig = kunit_config.Kconfig()
+		kconfig_path = get_absolute_path(
+			'test_data/test_read_from_file.kconfig')
+
+		kconfig.read_from_file(kconfig_path)
+
+		expected_kconfig = kunit_config.Kconfig()
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_UML=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_MMU=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_EXAMPLE_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('# CONFIG_MK8 is not set'))
+
+		self.assertEqual(kconfig.entries(), expected_kconfig.entries())
+
+	def test_write_to_file(self):
+		kconfig_path = os.path.join(test_tmpdir, '.config')
+
+		expected_kconfig = kunit_config.Kconfig()
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_UML=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_MMU=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('CONFIG_EXAMPLE_TEST=y'))
+		expected_kconfig.add_entry(
+			kunit_config.KconfigEntry('# CONFIG_MK8 is not set'))
+
+		expected_kconfig.write_to_file(kconfig_path)
+
+		actual_kconfig = kunit_config.Kconfig()
+		actual_kconfig.read_from_file(kconfig_path)
+
+		self.assertEqual(actual_kconfig.entries(),
+				 expected_kconfig.entries())
+
+class KUnitParserTest(unittest.TestCase):
+
+	def assertContains(self, needle, haystack):
+		for line in haystack:
+			if needle in line:
+				return
+		raise AssertionError('"' +
+			str(needle) + '" not found in "' + str(haystack) + '"!')
+
+	def test_output_isolated_correctly(self):
+		log_path = get_absolute_path(
+			'test_data/test_output_isolated_correctly.log')
+		file = open(log_path)
+		result = kunit_parser.isolate_kunit_output(file.readlines())
+		self.assertContains('TAP version 14\n', result)
+		self.assertContains('	# Subtest: example', result)
+		self.assertContains('	1..2', result)
+		self.assertContains('	ok 1 - example_simple_test', result)
+		self.assertContains('	ok 2 - example_mock_test', result)
+		self.assertContains('ok 1 - example', result)
+		file.close()
+
+	def test_parse_successful_test_log(self):
+		all_passed_log = get_absolute_path(
+			'test_data/test_is_test_passed-all_passed.log')
+		file = open(all_passed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.SUCCESS,
+			result.status)
+		file.close()
+
+	def test_parse_failed_test_log(self):
+		failed_log = get_absolute_path(
+			'test_data/test_is_test_passed-failure.log')
+		file = open(failed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.FAILURE,
+			result.status)
+		file.close()
+
+	def test_no_tests(self):
+		empty_log = get_absolute_path(
+			'test_data/test_is_test_passed-no_tests_run.log')
+		file = open(empty_log)
+		result = kunit_parser.parse_run_tests(
+			kunit_parser.isolate_kunit_output(file.readlines()))
+		self.assertEqual(0, len(result.suites))
+		self.assertEqual(
+			kunit_parser.TestStatus.NO_TESTS,
+			result.status)
+		file.close()
+
+	def test_crashed_test(self):
+		crashed_log = get_absolute_path(
+			'test_data/test_is_test_passed-crash.log')
+		file = open(crashed_log)
+		result = kunit_parser.parse_run_tests(file.readlines())
+		self.assertEqual(
+			kunit_parser.TestStatus.TEST_CRASHED,
+			result.status)
+		file.close()
+
+class StrContains(str):
+	def __eq__(self, other):
+		return self in other
+
+class KUnitMainTest(unittest.TestCase):
+	def setUp(self):
+		path = get_absolute_path('test_data/test_is_test_passed-all_passed.log')
+		file = open(path)
+		all_passed_log = file.readlines()
+		self.print_patch = mock.patch('builtins.print')
+		self.print_mock = self.print_patch.start()
+		self.linux_source_mock = mock.Mock()
+		self.linux_source_mock.build_reconfig = mock.Mock(return_value=True)
+		self.linux_source_mock.build_um_kernel = mock.Mock(return_value=True)
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=all_passed_log)
+
+	def tearDown(self):
+		self.print_patch.stop()
+		pass
+
+	def test_run_passes_args_pass(self):
+		kunit.main(['run'], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		self.print_mock.assert_any_call(StrContains('Testing complete.'))
+
+	def test_run_passes_args_fail(self):
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=[])
+		with self.assertRaises(SystemExit) as e:
+			kunit.main(['run'], self.linux_source_mock)
+		assert type(e.exception) == SystemExit
+		assert e.exception.code == 1
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		self.print_mock.assert_any_call(StrContains(' 0 tests run'))
+
+	def test_run_raw_output(self):
+		self.linux_source_mock.run_kernel = mock.Mock(return_value=[])
+		kunit.main(['run', '--raw_output'], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		assert self.linux_source_mock.run_kernel.call_count == 1
+		for kall in self.print_mock.call_args_list:
+			assert kall != mock.call(StrContains('Testing complete.'))
+			assert kall != mock.call(StrContains(' 0 tests run'))
+
+	def test_run_timeout(self):
+		timeout = 3453
+		kunit.main(['run', '--timeout', str(timeout)], self.linux_source_mock)
+		assert self.linux_source_mock.build_reconfig.call_count == 1
+		self.linux_source_mock.run_kernel.assert_called_once_with(timeout=timeout)
+		self.print_mock.assert_any_call(StrContains('Testing complete.'))
+
+if __name__ == '__main__':
+	unittest.main()
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log b/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log
new file mode 100644
index 0000000..62ebc02
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-all_passed.log
@@ -0,0 +1,32 @@
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: example_simple_test passed
+	ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: all tests passed
+ok 2 - example
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-crash.log b/tools/testing/kunit/test_data/test_is_test_passed-crash.log
new file mode 100644
index 0000000..0b24987
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-crash.log
@@ -0,0 +1,69 @@
+printk: console [tty0] enabled
+printk: console [mc-1] enabled
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+Stack:
+ 6016f7db 6f81bd30 6f81bdd0 60021450
+ 6024b0e8 60021440 60018bbe 16f81bdc0
+ 00000001 6f81bd30 6f81bd20 6f81bdd0
+Call Trace:
+ [<6016f7db>] ? kunit_try_run_case+0xab/0xf0
+ [<60021450>] ? set_signals+0x0/0x60
+ [<60021440>] ? get_signals+0x0/0x10
+ [<60018bbe>] ? kunit_um_run_try_catch+0x5e/0xc0
+ [<60021450>] ? set_signals+0x0/0x60
+ [<60021440>] ? get_signals+0x0/0x10
+ [<60018bb3>] ? kunit_um_run_try_catch+0x53/0xc0
+ [<6016f321>] ? kunit_run_case_catch_errors+0x121/0x1a0
+ [<60018b60>] ? kunit_um_run_try_catch+0x0/0xc0
+ [<600189e0>] ? kunit_um_throw+0x0/0x180
+ [<6016f730>] ? kunit_try_run_case+0x0/0xf0
+ [<6016f600>] ? kunit_catch_run_case+0x0/0x130
+ [<6016edd0>] ? kunit_vprintk+0x0/0x30
+ [<6016ece0>] ? kunit_fail+0x0/0x40
+ [<6016eca0>] ? kunit_abort+0x0/0x40
+ [<6016ed20>] ? kunit_printk_emit+0x0/0xb0
+ [<6016f200>] ? kunit_run_case_catch_errors+0x0/0x1a0
+ [<6016f46e>] ? kunit_run_tests+0xce/0x260
+ [<6005b390>] ? unregister_console+0x0/0x190
+ [<60175b70>] ? suite_kunit_initexample_test_suite+0x0/0x20
+ [<60001cbb>] ? do_one_initcall+0x0/0x197
+ [<60001d47>] ? do_one_initcall+0x8c/0x197
+ [<6005cd20>] ? irq_to_desc+0x0/0x30
+ [<60002005>] ? kernel_init_freeable+0x1b3/0x272
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<601c0086>] ? kernel_init+0x26/0x160
+ [<60014442>] ? new_thread_handler+0x82/0xc0
+
+	# example_simple_test: kunit test case crashed!
+	# example_simple_test: example_simple_test failed
+	not ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: one or more tests failed
+not ok 2 - example
+List of all partitions:
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-failure.log b/tools/testing/kunit/test_data/test_is_test_passed-failure.log
new file mode 100644
index 0000000..9e89d32
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-failure.log
@@ -0,0 +1,36 @@
+TAP version 14
+	# Subtest: sysctl_test
+	1..8
+	# sysctl_test_dointvec_null_tbl_data: sysctl_test_dointvec_null_tbl_data passed
+	ok 1 - sysctl_test_dointvec_null_tbl_data
+	# sysctl_test_dointvec_table_maxlen_unset: sysctl_test_dointvec_table_maxlen_unset passed
+	ok 2 - sysctl_test_dointvec_table_maxlen_unset
+	# sysctl_test_dointvec_table_len_is_zero: sysctl_test_dointvec_table_len_is_zero passed
+	ok 3 - sysctl_test_dointvec_table_len_is_zero
+	# sysctl_test_dointvec_table_read_but_position_set: sysctl_test_dointvec_table_read_but_position_set passed
+	ok 4 - sysctl_test_dointvec_table_read_but_position_set
+	# sysctl_test_dointvec_happy_single_positive: sysctl_test_dointvec_happy_single_positive passed
+	ok 5 - sysctl_test_dointvec_happy_single_positive
+	# sysctl_test_dointvec_happy_single_negative: sysctl_test_dointvec_happy_single_negative passed
+	ok 6 - sysctl_test_dointvec_happy_single_negative
+	# sysctl_test_dointvec_single_less_int_min: sysctl_test_dointvec_single_less_int_min passed
+	ok 7 - sysctl_test_dointvec_single_less_int_min
+	# sysctl_test_dointvec_single_greater_int_max: sysctl_test_dointvec_single_greater_int_max passed
+	ok 8 - sysctl_test_dointvec_single_greater_int_max
+kunit sysctl_test: all tests passed
+ok 1 - sysctl_test
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: EXPECTATION FAILED at lib/kunit/example-test.c:30
+	Expected 1 + 1 == 3, but
+		1 + 1 == 2
+		3 == 3
+	# example_simple_test: example_simple_test failed
+	not ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: one or more tests failed
+not ok 2 - example
diff --git a/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
new file mode 100644
index 0000000..ba69f5c
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_is_test_passed-no_tests_run.log
@@ -0,0 +1,75 @@
+Core dump limits :
+	soft - 0
+	hard - NONE
+Checking environment variables for a tempdir...none found
+Checking if /dev/shm is on tmpfs...OK
+Checking PROT_EXEC mmap in /dev/shm...OK
+Adding 24743936 bytes to physical memory to account for exec-shield gap
+Linux version 4.12.0-rc3-00010-g7319eb35f493-dirty (brendanhiggins@mactruck.svl.corp.google.com) (gcc version 7.3.0 (Debian 7.3.0-5) ) #29 Thu Mar 15 14:57:19 PDT 2018
+Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 14038
+Kernel command line: root=98:0
+PID hash table entries: 256 (order: -1, 2048 bytes)
+Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
+Inode-cache hash table entries: 4096 (order: 3, 32768 bytes)
+Memory: 27868K/56932K available (1681K kernel code, 480K rwdata, 400K rodata, 89K init, 205K bss, 29064K reserved, 0K cma-reserved)
+SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+NR_IRQS:15
+clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
+Calibrating delay loop... 7384.26 BogoMIPS (lpj=36921344)
+pid_max: default: 32768 minimum: 301
+Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
+Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
+Checking that host ptys support output SIGIO...Yes
+Checking that host ptys support SIGIO on close...No, enabling workaround
+Using 2.6 host AIO
+clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
+futex hash table entries: 256 (order: 0, 6144 bytes)
+clocksource: Switched to clocksource timer
+console [stderr0] disabled
+mconsole (version 2) initialized on /usr/local/google/home/brendanhiggins/.uml/6Ijecl/mconsole
+Checking host MADV_REMOVE support...OK
+workingset: timestamp_bits=62 max_order=13 bucket_order=0
+Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
+io scheduler noop registered
+io scheduler deadline registered
+io scheduler cfq registered (default)
+io scheduler mq-deadline registered
+io scheduler kyber registered
+Initialized stdio console driver
+Using a channel type which is configured out of UML
+setup_one_line failed for device 1 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 2 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 3 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 4 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 5 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 6 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 7 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 8 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 9 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 10 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 11 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 12 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 13 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 14 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 15 : Configuration failed
+Console initialized on /dev/tty0
+console [tty0] enabled
+console [mc-1] enabled
+List of all partitions:
+No filesystem could mount root, tried:
+
+Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(98,0)
diff --git a/tools/testing/kunit/test_data/test_output_isolated_correctly.log b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
new file mode 100644
index 0000000..94a6b3a
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_output_isolated_correctly.log
@@ -0,0 +1,106 @@
+Linux version 5.1.0-rc7-00061-g04652f1cb4aa0 (brendanhiggins@mactruck.svl.corp.google.com) (gcc version 7.3.0 (Debian 7.3.0-18)) #163 Wed May 8 16:18:20 PDT 2019
+Built 1 zonelists, mobility grouping on.  Total pages: 69906
+Kernel command line: mem=256M root=98:0
+Dentry cache hash table entries: 65536 (order: 7, 524288 bytes)
+Inode-cache hash table entries: 32768 (order: 6, 262144 bytes)
+Memory: 254468K/283500K available (1734K kernel code, 489K rwdata, 396K rodata, 85K init, 216K bss, 29032K reserved, 0K cma-reserved)
+SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
+NR_IRQS: 15
+clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
+------------[ cut here ]------------
+WARNING: CPU: 0 PID: 0 at kernel/time/clockevents.c:458 clockevents_register_device+0x143/0x160
+posix-timer cpumask == cpu_all_mask, using cpu_possible_mask instead
+CPU: 0 PID: 0 Comm: swapper Not tainted 5.1.0-rc7-00061-g04652f1cb4aa0 #163
+Stack:
+ 6005cc00 60233e18 60233e60 60233e18
+ 60233e60 00000009 00000000 6002a1b4
+ 1ca00000000 60071c23 60233e78 100000000000062
+Call Trace:
+ [<600214c5>] ? os_is_signal_stack+0x15/0x30
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6001597e>] ? show_stack+0xbe/0x1c0
+ [<6005cc00>] ? __printk_safe_exit+0x0/0x40
+ [<6002a1b4>] ? __warn+0x144/0x170
+ [<60071c23>] ? clockevents_register_device+0x143/0x160
+ [<60021440>] ? get_signals+0x0/0x10
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6002a27b>] ? warn_slowpath_fmt+0x9b/0xb0
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<6002a1e0>] ? warn_slowpath_fmt+0x0/0xb0
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<60021440>] ? get_signals+0x0/0x10
+ [<600213f0>] ? block_signals+0x0/0x20
+ [<60071c23>] ? clockevents_register_device+0x143/0x160
+ [<60021440>] ? get_signals+0x0/0x10
+ [<600213f0>] ? block_signals+0x0/0x20
+ [<6005c5ec>] ? printk+0x0/0x9b
+ [<60001bc8>] ? start_kernel+0x477/0x56a
+ [<600036f1>] ? start_kernel_proc+0x46/0x4d
+ [<60014442>] ? new_thread_handler+0x82/0xc0
+
+random: get_random_bytes called from print_oops_end_marker+0x4c/0x60 with crng_init=0
+---[ end trace c83434852b3702d3 ]---
+Calibrating delay loop... 6958.28 BogoMIPS (lpj=34791424)
+pid_max: default: 32768 minimum: 301
+Mount-cache hash table entries: 1024 (order: 1, 8192 bytes)
+Mountpoint-cache hash table entries: 1024 (order: 1, 8192 bytes)
+*** VALIDATE proc ***
+Checking that host ptys support output SIGIO...Yes
+Checking that host ptys support SIGIO on close...No, enabling workaround
+clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
+futex hash table entries: 256 (order: 0, 6144 bytes)
+clocksource: Switched to clocksource timer
+printk: console [stderr0] disabled
+mconsole (version 2) initialized on /usr/local/google/home/brendanhiggins/.uml/VZ2qMm/mconsole
+Checking host MADV_REMOVE support...OK
+workingset: timestamp_bits=62 max_order=16 bucket_order=0
+Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
+io scheduler mq-deadline registered
+io scheduler kyber registered
+Initialized stdio console driver
+Using a channel type which is configured out of UML
+setup_one_line failed for device 1 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 2 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 3 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 4 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 5 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 6 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 7 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 8 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 9 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 10 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 11 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 12 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 13 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 14 : Configuration failed
+Using a channel type which is configured out of UML
+setup_one_line failed for device 15 : Configuration failed
+Console initialized on /dev/tty0
+printk: console [tty0] enabled
+printk: console [mc-1] enabled
+TAP version 14
+	# Subtest: example
+	1..2
+init_suite
+	# example_simple_test: initializing
+	# example_simple_test: example_simple_test passed
+	ok 1 - example_simple_test
+	# example_mock_test: initializing
+	# example_mock_test: example_mock_test passed
+	ok 2 - example_mock_test
+kunit example: all tests passed
+ok 1 - example
+List of all partitions:
diff --git a/tools/testing/kunit/test_data/test_read_from_file.kconfig b/tools/testing/kunit/test_data/test_read_from_file.kconfig
new file mode 100644
index 0000000..d2a4928
--- /dev/null
+++ b/tools/testing/kunit/test_data/test_read_from_file.kconfig
@@ -0,0 +1,17 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# User Mode Linux/x86 4.12.0-rc3 Kernel Configuration
+#
+CONFIG_UML=y
+CONFIG_MMU=y
+
+#
+# UML-specific options
+#
+
+#
+# Host processor type and features
+#
+# CONFIG_MK8 is not set
+CONFIG_TEST=y
+CONFIG_EXAMPLE_TEST=y
diff --git a/tools/testing/selftests/dmabuf-heaps/Makefile b/tools/testing/selftests/dmabuf-heaps/Makefile
new file mode 100644
index 0000000..604b43e
--- /dev/null
+++ b/tools/testing/selftests/dmabuf-heaps/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0
+CFLAGS += -static -O3 -Wl,-no-as-needed -Wall
+
+TEST_GEN_PROGS = dmabuf-heap
+
+include ../lib.mk
diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
new file mode 100644
index 0000000..cd5e1f6
--- /dev/null
+++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
@@ -0,0 +1,396 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <sys/types.h>
+
+#include <linux/dma-buf.h>
+#include <drm/drm.h>
+
+#include "../../../../include/uapi/linux/dma-heap.h"
+
+#define DEVPATH "/dev/dma_heap"
+
+static int check_vgem(int fd)
+{
+	drm_version_t version = { 0 };
+	char name[5];
+	int ret;
+
+	version.name_len = 4;
+	version.name = name;
+
+	ret = ioctl(fd, DRM_IOCTL_VERSION, &version);
+	if (ret)
+		return 0;
+
+	return !strcmp(name, "vgem");
+}
+
+static int open_vgem(void)
+{
+	int i, fd;
+	const char *drmstr = "/dev/dri/card";
+
+	fd = -1;
+	for (i = 0; i < 16; i++) {
+		char name[80];
+
+		snprintf(name, 80, "%s%u", drmstr, i);
+
+		fd = open(name, O_RDWR);
+		if (fd < 0)
+			continue;
+
+		if (!check_vgem(fd)) {
+			close(fd);
+			fd = -1;
+			continue;
+		} else {
+			break;
+		}
+	}
+	return fd;
+}
+
+static int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle)
+{
+	struct drm_prime_handle import_handle = {
+		.fd = dma_buf_fd,
+		.flags = 0,
+		.handle = 0,
+	 };
+	int ret;
+
+	ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle);
+	if (ret == 0)
+		*handle = import_handle.handle;
+	return ret;
+}
+
+static void close_handle(int vgem_fd, uint32_t handle)
+{
+	struct drm_gem_close close = {
+		.handle = handle,
+	};
+
+	ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close);
+}
+
+static int dmabuf_heap_open(char *name)
+{
+	int ret, fd;
+	char buf[256];
+
+	ret = snprintf(buf, 256, "%s/%s", DEVPATH, name);
+	if (ret < 0) {
+		printf("snprintf failed!\n");
+		return ret;
+	}
+
+	fd = open(buf, O_RDWR);
+	if (fd < 0)
+		printf("open %s failed!\n", buf);
+	return fd;
+}
+
+static int dmabuf_heap_alloc_fdflags(int fd, size_t len, unsigned int fd_flags,
+				     unsigned int heap_flags, int *dmabuf_fd)
+{
+	struct dma_heap_allocation_data data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = fd_flags,
+		.heap_flags = heap_flags,
+	};
+	int ret;
+
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, DMA_HEAP_IOCTL_ALLOC, &data);
+	if (ret < 0)
+		return ret;
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+static int dmabuf_heap_alloc(int fd, size_t len, unsigned int flags,
+			     int *dmabuf_fd)
+{
+	return dmabuf_heap_alloc_fdflags(fd, len, O_RDWR | O_CLOEXEC, flags,
+					 dmabuf_fd);
+}
+
+static void dmabuf_sync(int fd, int start_stop)
+{
+	struct dma_buf_sync sync = {
+		.flags = start_stop | DMA_BUF_SYNC_RW,
+	};
+	int ret;
+
+	ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync);
+	if (ret)
+		printf("sync failed %d\n", errno);
+}
+
+#define ONE_MEG (1024 * 1024)
+
+static int test_alloc_and_import(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1, importer_fd = -1;
+	uint32_t handle = 0;
+	void *p = NULL;
+	int ret;
+
+	printf("Testing heap: %s\n", heap_name);
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Allocating 1 MEG\n");
+	ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Allocation Failed!\n");
+		ret = -1;
+		goto out;
+	}
+	/* mmap and write a simple pattern */
+	p = mmap(NULL,
+		 ONE_MEG,
+		 PROT_READ | PROT_WRITE,
+		 MAP_SHARED,
+		 dmabuf_fd,
+		 0);
+	if (p == MAP_FAILED) {
+		printf("mmap() failed: %m\n");
+		ret = -1;
+		goto out;
+	}
+	printf("mmap passed\n");
+
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START);
+	memset(p, 1, ONE_MEG / 2);
+	memset((char *)p + ONE_MEG / 2, 0, ONE_MEG / 2);
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END);
+
+	importer_fd = open_vgem();
+	if (importer_fd < 0) {
+		ret = importer_fd;
+		printf("Failed to open vgem\n");
+		goto out;
+	}
+
+	ret = import_vgem_fd(importer_fd, dmabuf_fd, &handle);
+	if (ret < 0) {
+		printf("Failed to import buffer\n");
+		goto out;
+	}
+	printf("import passed\n");
+
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START);
+	memset(p, 0xff, ONE_MEG);
+	dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END);
+	printf("syncs passed\n");
+
+	close_handle(importer_fd, handle);
+	ret = 0;
+
+out:
+	if (p)
+		munmap(p, ONE_MEG);
+	if (importer_fd >= 0)
+		close(importer_fd);
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+/* Test the ioctl version compatibility w/ a smaller structure then expected */
+static int dmabuf_heap_alloc_older(int fd, size_t len, unsigned int flags,
+				   int *dmabuf_fd)
+{
+	int ret;
+	unsigned int older_alloc_ioctl;
+	struct dma_heap_allocation_data_smaller {
+		__u64 len;
+		__u32 fd;
+		__u32 fd_flags;
+	} data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = O_RDWR | O_CLOEXEC,
+	};
+
+	older_alloc_ioctl = _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,
+				  struct dma_heap_allocation_data_smaller);
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, older_alloc_ioctl, &data);
+	if (ret < 0)
+		return ret;
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+/* Test the ioctl version compatibility w/ a larger structure then expected */
+static int dmabuf_heap_alloc_newer(int fd, size_t len, unsigned int flags,
+				   int *dmabuf_fd)
+{
+	int ret;
+	unsigned int newer_alloc_ioctl;
+	struct dma_heap_allocation_data_bigger {
+		__u64 len;
+		__u32 fd;
+		__u32 fd_flags;
+		__u64 heap_flags;
+		__u64 garbage1;
+		__u64 garbage2;
+		__u64 garbage3;
+	} data = {
+		.len = len,
+		.fd = 0,
+		.fd_flags = O_RDWR | O_CLOEXEC,
+		.heap_flags = flags,
+		.garbage1 = 0xffffffff,
+		.garbage2 = 0x88888888,
+		.garbage3 = 0x11111111,
+	};
+
+	newer_alloc_ioctl = _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,
+				  struct dma_heap_allocation_data_bigger);
+	if (!dmabuf_fd)
+		return -EINVAL;
+
+	ret = ioctl(fd, newer_alloc_ioctl, &data);
+	if (ret < 0)
+		return ret;
+
+	*dmabuf_fd = (int)data.fd;
+	return ret;
+}
+
+static int test_alloc_compat(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1;
+	int ret;
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Testing (theoretical)older alloc compat\n");
+	ret = dmabuf_heap_alloc_older(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Older compat allocation failed!\n");
+		ret = -1;
+		goto out;
+	}
+	close(dmabuf_fd);
+
+	printf("Testing (theoretical)newer alloc compat\n");
+	ret = dmabuf_heap_alloc_newer(heap_fd, ONE_MEG, 0, &dmabuf_fd);
+	if (ret) {
+		printf("Newer compat allocation failed!\n");
+		ret = -1;
+		goto out;
+	}
+	printf("Ioctl compatibility tests passed\n");
+out:
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+static int test_alloc_errors(char *heap_name)
+{
+	int heap_fd = -1, dmabuf_fd = -1;
+	int ret;
+
+	heap_fd = dmabuf_heap_open(heap_name);
+	if (heap_fd < 0)
+		return -1;
+
+	printf("Testing expected error cases\n");
+	ret = dmabuf_heap_alloc(0, ONE_MEG, 0x111111, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid fd)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0x111111, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid heap flags)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	ret = dmabuf_heap_alloc_fdflags(heap_fd, ONE_MEG,
+					~(O_RDWR | O_CLOEXEC), 0, &dmabuf_fd);
+	if (!ret) {
+		printf("Did not see expected error (invalid fd flags)!\n");
+		ret = -1;
+		goto out;
+	}
+
+	printf("Expected error checking passed\n");
+out:
+	if (dmabuf_fd >= 0)
+		close(dmabuf_fd);
+	if (heap_fd >= 0)
+		close(heap_fd);
+
+	return ret;
+}
+
+int main(void)
+{
+	DIR *d;
+	struct dirent *dir;
+	int ret = -1;
+
+	d = opendir(DEVPATH);
+	if (!d) {
+		printf("No %s directory?\n", DEVPATH);
+		return -1;
+	}
+
+	while ((dir = readdir(d)) != NULL) {
+		if (!strncmp(dir->d_name, ".", 2))
+			continue;
+		if (!strncmp(dir->d_name, "..", 3))
+			continue;
+
+		ret = test_alloc_and_import(dir->d_name);
+		if (ret)
+			break;
+
+		ret = test_alloc_compat(dir->d_name);
+		if (ret)
+			break;
+
+		ret = test_alloc_errors(dir->d_name);
+		if (ret)
+			break;
+	}
+	closedir(d);
+
+	return ret;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/.gitignore b/tools/testing/selftests/filesystems/incfs/.gitignore
new file mode 100644
index 0000000..f0e3cd9
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/.gitignore
@@ -0,0 +1,3 @@
+incfs_test
+incfs_stress
+incfs_perf
diff --git a/tools/testing/selftests/filesystems/incfs/Makefile b/tools/testing/selftests/filesystems/incfs/Makefile
new file mode 100644
index 0000000..f379802
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/Makefile
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-2.0
+CFLAGS += -D_FILE_OFFSET_BITS=64 -Wall -Werror -I../.. -I../../../../..
+LDLIBS := -llz4 -lzstd -lcrypto -lpthread
+TEST_GEN_PROGS := incfs_test incfs_stress incfs_perf
+
+include ../../lib.mk
+
+# Put after include ../../lib.mk since that changes $(TEST_GEN_PROGS)
+# Otherwise you get multiple targets, this becomes the default, and it's a mess
+EXTRA_SOURCES := utils.c
+$(TEST_GEN_PROGS) : $(EXTRA_SOURCES)
diff --git a/tools/testing/selftests/filesystems/incfs/OWNERS b/tools/testing/selftests/filesystems/incfs/OWNERS
new file mode 100644
index 0000000..5eb371e
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/OWNERS
@@ -0,0 +1,2 @@
+# include OWNERS from the authoritative android-mainline branch
+include kernel/common:android-mainline:/tools/testing/selftests/filesystems/incfs/OWNERS
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_perf.c b/tools/testing/selftests/filesystems/incfs/incfs_perf.c
new file mode 100644
index 0000000..ed36bbd
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_perf.c
@@ -0,0 +1,717 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <lz4.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <ctype.h>
+#include <unistd.h>
+
+#include "utils.h"
+
+#define err_msg(...)                                                           \
+	do {                                                                   \
+		fprintf(stderr, "%s: (%d) ", TAG, __LINE__);                   \
+		fprintf(stderr, __VA_ARGS__);                                  \
+		fprintf(stderr, " (%s)\n", strerror(errno));                   \
+	} while (false)
+
+#define TAG "incfs_perf"
+
+struct options {
+	int blocks; /* -b number of diff block sizes */
+	bool no_cleanup; /* -c don't clean up after */
+	const char *test_dir; /* -d working directory */
+	const char *file_types; /* -f sScCvV */
+	bool no_native; /* -n don't test native files */
+	bool no_random; /* -r don't do random reads*/
+	bool no_linear; /* -R random reads only */
+	size_t size; /* -s file size as power of 2 */
+	int tries; /* -t times to run test*/
+};
+
+enum flags {
+	SHUFFLE = 1,
+	COMPRESS = 2,
+	VERIFY = 4,
+	LAST_FLAG = 8,
+};
+
+void print_help(void)
+{
+	puts(
+	"incfs_perf. Performance test tool for incfs\n"
+	"\tTests read performance of incfs by creating files of various types\n"
+	"\tflushing caches and then reading them back.\n"
+	"\tEach file is read with different block sizes and average\n"
+	"\tthroughput in megabytes/second and memory usage are reported for\n"
+	"\teach block size\n"
+	"\tNative files are tested for comparison\n"
+	"\tNative files are created in native folder, incfs files are created\n"
+	"\tin src folder which is mounted on dst folder\n"
+	"\n"
+	"\t-bn (default 8) number of different block sizes, starting at 4096\n"
+	"\t                and doubling\n"
+	"\t-c		   don't Clean up - leave files and mount point\n"
+	"\t-d dir          create directories in dir\n"
+	"\t-fs|Sc|Cv|V     restrict which files are created.\n"
+	"\t                s blocks not shuffled, S blocks shuffled\n"
+	"\t                c blocks not compress, C blocks compressed\n"
+	"\t                v files not verified, V files verified\n"
+	"\t                If a letter is omitted, both options are tested\n"
+	"\t                If no letter are given, incfs is not tested\n"
+	"\t-n              Don't test native files\n"
+	"\t-r              No random reads (sequential only)\n"
+	"\t-R              Random reads only (no sequential)\n"
+	"\t-sn (default 30)File size as power of 2\n"
+	"\t-tn (default 5) Number of tries per file. Results are averaged\n"
+	);
+}
+
+int parse_options(int argc, char *const *argv, struct options *options)
+{
+	signed char c;
+
+	/* Set defaults here */
+	*options = (struct options){
+		.blocks = 8,
+		.test_dir = ".",
+		.tries = 5,
+		.size = 30,
+	};
+
+	/* Load options from command line here */
+	while ((c = getopt(argc, argv, "b:cd:f::hnrRs:t:")) != -1) {
+		switch (c) {
+		case 'b':
+			options->blocks = strtol(optarg, NULL, 10);
+			break;
+
+		case 'c':
+			options->no_cleanup = true;
+			break;
+
+		case 'd':
+			options->test_dir = optarg;
+			break;
+
+		case 'f':
+			if (optarg)
+				options->file_types = optarg;
+			else
+				options->file_types = "sS";
+			break;
+
+		case 'h':
+			print_help();
+			exit(0);
+
+		case 'n':
+			options->no_native = true;
+			break;
+
+		case 'r':
+			options->no_random = true;
+			break;
+
+		case 'R':
+			options->no_linear = true;
+			break;
+
+		case 's':
+			options->size = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options->tries = strtol(optarg, NULL, 10);
+			break;
+
+		default:
+			print_help();
+			return -EINVAL;
+		}
+	}
+
+	options->size = 1L << options->size;
+
+	return 0;
+}
+
+void shuffle(size_t *buffer, size_t size)
+{
+	size_t i;
+
+	for (i = 0; i < size; ++i) {
+		size_t j = random() * (size - i - 1) / RAND_MAX;
+		size_t temp = buffer[i];
+
+		buffer[i] = buffer[j];
+		buffer[j] = temp;
+	}
+}
+
+int get_free_memory(void)
+{
+	FILE *meminfo = fopen("/proc/meminfo", "re");
+	char field[256];
+	char value[256] = {};
+
+	if (!meminfo)
+		return -ENOENT;
+
+	while (fscanf(meminfo, "%[^:]: %s kB\n", field, value) == 2) {
+		if (!strcmp(field, "MemFree"))
+			break;
+		*value = 0;
+	}
+
+	fclose(meminfo);
+
+	if (!*value)
+		return -ENOENT;
+
+	return strtol(value, NULL, 10);
+}
+
+int write_data(int cmd_fd, int dir_fd, const char *name, size_t size, int flags)
+{
+	int fd = openat(dir_fd, name, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	size_t *blocks = malloc(sizeof(size_t) * block_count);
+	int error = 0;
+	size_t i;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	uint8_t compressed_data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	struct incfs_fill_block fill_block = {
+		.compression = COMPRESSION_NONE,
+		.data_len = sizeof(data),
+		.data = ptr_to_u64(data),
+	};
+
+	if (!blocks) {
+		err_msg("Out of memory");
+		error = -errno;
+		goto out;
+	}
+
+	if (fd == -1) {
+		err_msg("Could not open file for writing %s", name);
+		error = -errno;
+		goto out;
+	}
+
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	for (i = 0; i < block_count; ++i)
+		blocks[i] = i;
+
+	if (flags & SHUFFLE)
+		shuffle(blocks, block_count);
+
+	if (flags & COMPRESS) {
+		size_t comp_size = LZ4_compress_default(
+			(char *)data, (char *)compressed_data, sizeof(data),
+			ARRAY_SIZE(compressed_data));
+
+		if (comp_size <= 0) {
+			error = -EBADMSG;
+			goto out;
+		}
+		fill_block.compression = COMPRESSION_LZ4;
+		fill_block.data = ptr_to_u64(compressed_data);
+		fill_block.data_len = comp_size;
+	}
+
+	for (i = 0; i < block_count; ++i) {
+		struct incfs_fill_blocks fill_blocks = {
+			.count = 1,
+			.fill_blocks = ptr_to_u64(&fill_block),
+		};
+
+		fill_block.block_index = blocks[i];
+		int written = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+
+		if (written != 1) {
+			error = -errno;
+			err_msg("Failed to write block %lu in file %s", i,
+				name);
+			break;
+		}
+	}
+
+out:
+	free(blocks);
+	close(fd);
+	sync();
+	return error;
+}
+
+int measure_read_throughput_internal(const char *tag, int dir, const char *name,
+				     const struct options *options, bool random)
+{
+	int block;
+
+	if (random)
+		printf("%32s(random)", tag);
+	else
+		printf("%40s", tag);
+
+	for (block = 0; block < options->blocks; ++block) {
+		size_t buffer_size;
+		char *buffer;
+		int try;
+		double time = 0;
+		double throughput;
+		int memory = 0;
+
+		buffer_size = 1 << (block + 12);
+		buffer = malloc(buffer_size);
+
+		for (try = 0; try < options->tries; ++try) {
+			int err;
+			struct timespec start_time, end_time;
+			off_t i;
+			int fd;
+			size_t offsets_size = options->size / buffer_size;
+			size_t *offsets =
+				malloc(offsets_size * sizeof(*offsets));
+			int start_memory, end_memory;
+
+			if (!offsets) {
+				err_msg("Not enough memory");
+				return -ENOMEM;
+			}
+
+			for (i = 0; i < offsets_size; ++i)
+				offsets[i] = i * buffer_size;
+
+			if (random)
+				shuffle(offsets, offsets_size);
+
+			err = drop_caches();
+			if (err) {
+				err_msg("Failed to drop caches");
+				return err;
+			}
+
+			start_memory = get_free_memory();
+			if (start_memory < 0) {
+				err_msg("Failed to get start memory");
+				return start_memory;
+			}
+
+			fd = openat(dir, name, O_RDONLY | O_CLOEXEC);
+			if (fd == -1) {
+				err_msg("Failed to open file");
+				return err;
+			}
+
+			err = clock_gettime(CLOCK_MONOTONIC, &start_time);
+			if (err) {
+				err_msg("Failed to get start time");
+				return err;
+			}
+
+			for (i = 0; i < offsets_size; ++i)
+				if (pread(fd, buffer, buffer_size,
+					  offsets[i]) != buffer_size) {
+					err_msg("Failed to read file");
+					err = -errno;
+					goto fail;
+				}
+
+			err = clock_gettime(CLOCK_MONOTONIC, &end_time);
+			if (err) {
+				err_msg("Failed to get start time");
+				goto fail;
+			}
+
+			end_memory = get_free_memory();
+			if (end_memory < 0) {
+				err_msg("Failed to get end memory");
+				return end_memory;
+			}
+
+			time += end_time.tv_sec - start_time.tv_sec;
+			time += (end_time.tv_nsec - start_time.tv_nsec) / 1e9;
+
+			close(fd);
+			fd = -1;
+			memory += start_memory - end_memory;
+
+fail:
+			free(offsets);
+			close(fd);
+			if (err)
+				return err;
+		}
+
+		throughput = options->size * options->tries / time;
+		printf("%10.3e %10d", throughput, memory / options->tries);
+		free(buffer);
+	}
+
+	printf("\n");
+	return 0;
+}
+
+int measure_read_throughput(const char *tag, int dir, const char *name,
+			    const struct options *options)
+{
+	int err = 0;
+
+	if (!options->no_linear)
+		err = measure_read_throughput_internal(tag, dir, name, options,
+						       false);
+
+	if (!err && !options->no_random)
+		err = measure_read_throughput_internal(tag, dir, name, options,
+						       true);
+	return err;
+}
+
+int test_native_file(int dir, const struct options *options)
+{
+	const char *name = "file";
+	int fd;
+	char buffer[4096] = {};
+	off_t i;
+	int err;
+
+	fd = openat(dir, name, O_CREAT | O_WRONLY | O_CLOEXEC, 0600);
+	if (fd == -1) {
+		err_msg("Could not open native file");
+		return -errno;
+	}
+
+	for (i = 0; i < options->size; i += sizeof(buffer))
+		if (pwrite(fd, buffer, sizeof(buffer), i) != sizeof(buffer)) {
+			err_msg("Failed to write file");
+			err = -errno;
+			goto fail;
+		}
+
+	close(fd);
+	sync();
+	fd = -1;
+
+	err = measure_read_throughput("native", dir, name, options);
+
+fail:
+	close(fd);
+	return err;
+}
+
+struct hash_block {
+	char data[INCFS_DATA_FILE_BLOCK_SIZE];
+};
+
+static struct hash_block *build_mtree(size_t size, char *root_hash,
+				      int *mtree_block_count)
+{
+	char data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	int block_count = 0;
+	int hash_block_count = 0;
+	int total_tree_block_count = 0;
+	int tree_lvl_index[INCFS_MAX_MTREE_LEVELS] = {};
+	int tree_lvl_count[INCFS_MAX_MTREE_LEVELS] = {};
+	int levels_count = 0;
+	int i, level;
+	struct hash_block *mtree;
+
+	if (size == 0)
+		return 0;
+
+	block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	hash_block_count = block_count;
+	for (i = 0; hash_block_count > 1; i++) {
+		hash_block_count = (hash_block_count + hash_per_block - 1) /
+				   hash_per_block;
+		tree_lvl_count[i] = hash_block_count;
+		total_tree_block_count += hash_block_count;
+	}
+	levels_count = i;
+
+	for (i = 0; i < levels_count; i++) {
+		int prev_lvl_base = (i == 0) ? total_tree_block_count :
+					       tree_lvl_index[i - 1];
+
+		tree_lvl_index[i] = prev_lvl_base - tree_lvl_count[i];
+	}
+
+	*mtree_block_count = total_tree_block_count;
+	mtree = calloc(total_tree_block_count, sizeof(*mtree));
+	/* Build level 0 hashes. */
+	for (i = 0; i < block_count; i++) {
+		int block_index = tree_lvl_index[0] + i / hash_per_block;
+		int block_off = (i % hash_per_block) * digest_size;
+		char *hash_ptr = mtree[block_index].data + block_off;
+
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+	}
+
+	/* Build higher levels of hash tree. */
+	for (level = 1; level < levels_count; level++) {
+		int prev_lvl_base = tree_lvl_index[level - 1];
+		int prev_lvl_count = tree_lvl_count[level - 1];
+
+		for (i = 0; i < prev_lvl_count; i++) {
+			int block_index =
+				i / hash_per_block + tree_lvl_index[level];
+			int block_off = (i % hash_per_block) * digest_size;
+			char *hash_ptr = mtree[block_index].data + block_off;
+
+			sha256(mtree[i + prev_lvl_base].data,
+			       INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+		}
+	}
+
+	/* Calculate root hash from the top block */
+	sha256(mtree[0].data, INCFS_DATA_FILE_BLOCK_SIZE, root_hash);
+
+	return mtree;
+}
+
+static int load_hash_tree(int cmd_fd, int dir, const char *name,
+			  struct hash_block *mtree, int mtree_block_count)
+{
+	int err;
+	int i;
+	int fd;
+	struct incfs_fill_block *fill_block_array =
+		calloc(mtree_block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = mtree_block_count,
+		.fill_blocks = ptr_to_u64(fill_block_array),
+	};
+	struct incfs_permit_fill permit_fill;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		fill_block_array[i] = (struct incfs_fill_block){
+			.block_index = i,
+			.data_len = INCFS_DATA_FILE_BLOCK_SIZE,
+			.data = ptr_to_u64(mtree[i].data),
+			.flags = INCFS_BLOCK_FLAGS_HASH
+		};
+	}
+
+	fd = openat(dir, name, O_RDONLY | O_CLOEXEC);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		err = -errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else
+		err = 0;
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+int test_incfs_file(int dst_dir, const struct options *options, int flags)
+{
+	int cmd_file = openat(dst_dir, INCFS_PENDING_READS_FILENAME,
+			      O_RDONLY | O_CLOEXEC);
+	int err;
+	char name[4];
+	incfs_uuid_t id;
+	char tag[256];
+
+	snprintf(name, sizeof(name), "%c%c%c",
+		 flags & SHUFFLE ? 'S' : 's',
+		 flags & COMPRESS ? 'C' : 'c',
+		 flags & VERIFY ? 'V' : 'v');
+
+	if (cmd_file == -1) {
+		err_msg("Could not open command file");
+		return -errno;
+	}
+
+	if (flags & VERIFY) {
+		char root_hash[INCFS_MAX_HASH_SIZE];
+		int mtree_block_count;
+		struct hash_block *mtree = build_mtree(options->size, root_hash,
+						       &mtree_block_count);
+
+		if (!mtree) {
+			err_msg("Failed to build hash tree");
+			err = -ENOMEM;
+			goto fail;
+		}
+
+		err = crypto_emit_file(cmd_file, NULL, name, &id, options->size,
+				       root_hash, "add_data");
+
+		if (!err)
+			err = load_hash_tree(cmd_file, dst_dir, name, mtree,
+					     mtree_block_count);
+
+		free(mtree);
+	} else
+		err = emit_file(cmd_file, NULL, name, &id, options->size, NULL);
+
+	if (err) {
+		err_msg("Failed to create file %s", name);
+		goto fail;
+	}
+
+	if (write_data(cmd_file, dst_dir, name, options->size, flags))
+		goto fail;
+
+	snprintf(tag, sizeof(tag), "incfs%s%s%s",
+		 flags & SHUFFLE ? "(shuffle)" : "",
+		 flags & COMPRESS ? "(compress)" : "",
+		 flags & VERIFY ? "(verify)" : "");
+
+	err = measure_read_throughput(tag, dst_dir, name, options);
+
+fail:
+	close(cmd_file);
+	return err;
+}
+
+bool skip(struct options const *options, int flag, char c)
+{
+	if (!options->file_types)
+		return false;
+
+	if (flag && strchr(options->file_types, tolower(c)))
+		return true;
+
+	if (!flag && strchr(options->file_types, toupper(c)))
+		return true;
+
+	return false;
+}
+
+int main(int argc, char *const *argv)
+{
+	struct options options;
+	int err;
+	const char *native_dir = "native";
+	const char *src_dir = "src";
+	const char *dst_dir = "dst";
+	int native_dir_fd = -1;
+	int src_dir_fd = -1;
+	int dst_dir_fd = -1;
+	int block;
+	int flags;
+
+	err = parse_options(argc, argv, &options);
+	if (err)
+		return err;
+
+	err = chdir(options.test_dir);
+	if (err) {
+		err_msg("Failed to change to %s", options.test_dir);
+		return -errno;
+	}
+
+	/* Clean up any interrupted previous runs */
+	while (!umount(dst_dir))
+		;
+
+	err = remove_dir(native_dir) || remove_dir(src_dir) ||
+	      remove_dir(dst_dir);
+	if (err)
+		return err;
+
+	err = mkdir(native_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(src_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(dst_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mount_fs_opt(dst_dir, src_dir, "readahead=0,rlog_pages=0", 0);
+	if (err) {
+		err_msg("Failed to mount incfs");
+		goto cleanup;
+	}
+
+	native_dir_fd = open(native_dir, O_RDONLY | O_CLOEXEC);
+	src_dir_fd = open(src_dir, O_RDONLY | O_CLOEXEC);
+	dst_dir_fd = open(dst_dir, O_RDONLY | O_CLOEXEC);
+	if (native_dir_fd == -1 || src_dir_fd == -1 || dst_dir_fd == -1) {
+		err_msg("Failed to open native, src or dst dir");
+		err = -errno;
+		goto cleanup;
+	}
+
+	printf("%40s", "");
+	for (block = 0; block < options.blocks; ++block)
+		printf("%21d", 1 << (block + 12));
+	printf("\n");
+
+	if (!err && !options.no_native)
+		err = test_native_file(native_dir_fd, &options);
+
+	for (flags = 0; flags < LAST_FLAG && !err; ++flags) {
+		if (skip(&options, flags & SHUFFLE, 's') ||
+		    skip(&options, flags & COMPRESS, 'c') ||
+		    skip(&options, flags & VERIFY, 'v'))
+			continue;
+		err = test_incfs_file(dst_dir_fd, &options, flags);
+	}
+
+cleanup:
+	close(native_dir_fd);
+	close(src_dir_fd);
+	close(dst_dir_fd);
+	if (!options.no_cleanup) {
+		umount(dst_dir);
+		remove_dir(native_dir);
+		remove_dir(dst_dir);
+		remove_dir(src_dir);
+	}
+
+	return err;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_stress.c b/tools/testing/selftests/filesystems/incfs/incfs_stress.c
new file mode 100644
index 0000000..a1d4917
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_stress.c
@@ -0,0 +1,322 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2020 Google LLC
+ */
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <pthread.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "utils.h"
+
+#define err_msg(...)                                                           \
+	do {                                                                   \
+		fprintf(stderr, "%s: (%d) ", TAG, __LINE__);                   \
+		fprintf(stderr, __VA_ARGS__);                                  \
+		fprintf(stderr, " (%s)\n", strerror(errno));                   \
+	} while (false)
+
+#define TAG "incfs_stress"
+
+struct options {
+	bool no_cleanup; /* -c */
+	const char *test_dir; /* -d */
+	unsigned int rng_seed; /* -g */
+	int num_reads; /* -n */
+	int readers; /* -r */
+	int size; /* -s */
+	int timeout; /* -t */
+};
+
+struct read_data {
+	const char *filename;
+	int dir_fd;
+	size_t filesize;
+	int num_reads;
+	unsigned int rng_seed;
+};
+
+int cancel_threads;
+
+int parse_options(int argc, char *const *argv, struct options *options)
+{
+	signed char c;
+
+	/* Set defaults here */
+	*options = (struct options){
+		.test_dir = ".",
+		.num_reads = 1000,
+		.readers = 10,
+		.size = 10,
+	};
+
+	/* Load options from command line here */
+	while ((c = getopt(argc, argv, "cd:g:n:r:s:t:")) != -1) {
+		switch (c) {
+		case 'c':
+			options->no_cleanup = true;
+			break;
+
+		case 'd':
+			options->test_dir = optarg;
+			break;
+
+		case 'g':
+			options->rng_seed = strtol(optarg, NULL, 10);
+			break;
+
+		case 'n':
+			options->num_reads = strtol(optarg, NULL, 10);
+			break;
+
+		case 'r':
+			options->readers = strtol(optarg, NULL, 10);
+			break;
+
+		case 's':
+			options->size = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options->timeout = strtol(optarg, NULL, 10);
+			break;
+		}
+	}
+
+	return 0;
+}
+
+void *reader(void *data)
+{
+	struct read_data *read_data = (struct read_data *)data;
+	int i;
+	int fd = -1;
+	void *buffer = malloc(read_data->filesize);
+
+	if (!buffer) {
+		err_msg("Failed to alloc read buffer");
+		goto out;
+	}
+
+	fd = openat(read_data->dir_fd, read_data->filename,
+		    O_RDONLY | O_CLOEXEC);
+	if (fd == -1) {
+		err_msg("Failed to open file");
+		goto out;
+	}
+
+	for (i = 0; i < read_data->num_reads && !cancel_threads; ++i) {
+		off_t offset = rnd(read_data->filesize, &read_data->rng_seed);
+		size_t count =
+			rnd(read_data->filesize - offset, &read_data->rng_seed);
+		ssize_t err = pread(fd, buffer, count, offset);
+
+		if (err != count)
+			err_msg("failed to read with value %lu", err);
+	}
+
+out:
+	close(fd);
+	free(read_data);
+	free(buffer);
+	return NULL;
+}
+
+int write_data(int cmd_fd, int dir_fd, const char *name, size_t size)
+{
+	int fd = openat(dir_fd, name, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int error = 0;
+	int i;
+	int block_count = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+
+	if (fd == -1) {
+		err_msg("Could not open file for writing %s", name);
+		return -errno;
+	}
+
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		err_msg("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	for (i = 0; i < block_count; ++i) {
+		uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+		size_t block_size =
+			size > i * INCFS_DATA_FILE_BLOCK_SIZE ?
+				INCFS_DATA_FILE_BLOCK_SIZE :
+				size - (i * INCFS_DATA_FILE_BLOCK_SIZE);
+		struct incfs_fill_block fill_block = {
+			.compression = COMPRESSION_NONE,
+			.block_index = i,
+			.data_len = block_size,
+			.data = ptr_to_u64(data),
+		};
+		struct incfs_fill_blocks fill_blocks = {
+			.count = 1,
+			.fill_blocks = ptr_to_u64(&fill_block),
+		};
+		int written = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+
+		if (written != 1) {
+			error = -errno;
+			err_msg("Failed to write block %d in file %s", i, name);
+			break;
+		}
+	}
+out:
+	close(fd);
+	return error;
+}
+
+int test_files(int src_dir, int dst_dir, struct options const *options)
+{
+	unsigned int seed = options->rng_seed;
+	int cmd_file = openat(dst_dir, INCFS_PENDING_READS_FILENAME,
+			      O_RDONLY | O_CLOEXEC);
+	int err;
+	const char *name = "001";
+	incfs_uuid_t id;
+	size_t size;
+	int i;
+	pthread_t *threads = NULL;
+
+	size = 1 << (rnd(options->size, &seed) + 12);
+	size += rnd(size, &seed);
+
+	if (cmd_file == -1) {
+		err_msg("Could not open command file");
+		return -errno;
+	}
+
+	err = emit_file(cmd_file, NULL, name, &id, size, NULL);
+	if (err) {
+		err_msg("Failed to create file %s", name);
+		return err;
+	}
+
+	threads = malloc(sizeof(pthread_t) * options->readers);
+	if (!threads) {
+		err_msg("Could not allocate memory for threads");
+		return -ENOMEM;
+	}
+
+	for (i = 0; i < options->readers; ++i) {
+		struct read_data *read_data = malloc(sizeof(*read_data));
+
+		if (!read_data) {
+			err_msg("Failed to allocate read_data");
+			err = -ENOMEM;
+			break;
+		}
+
+		*read_data = (struct read_data){
+			.filename = name,
+			.dir_fd = dst_dir,
+			.filesize = size,
+			.num_reads = options->num_reads,
+			.rng_seed = seed,
+		};
+
+		rnd(0, &seed);
+
+		err = pthread_create(threads + i, 0, reader, read_data);
+		if (err) {
+			err_msg("Failed to create thread");
+			free(read_data);
+			break;
+		}
+	}
+
+	if (err)
+		cancel_threads = 1;
+	else
+		err = write_data(cmd_file, dst_dir, name, size);
+
+	for (; i > 0; --i) {
+		if (pthread_join(threads[i - 1], NULL)) {
+			err_msg("FATAL: failed to join thread");
+			exit(-errno);
+		}
+	}
+
+	free(threads);
+	close(cmd_file);
+	return err;
+}
+
+int main(int argc, char *const *argv)
+{
+	struct options options;
+	int err;
+	const char *src_dir = "src";
+	const char *dst_dir = "dst";
+	int src_dir_fd = -1;
+	int dst_dir_fd = -1;
+
+	err = parse_options(argc, argv, &options);
+	if (err)
+		return err;
+
+	err = chdir(options.test_dir);
+	if (err) {
+		err_msg("Failed to change to %s", options.test_dir);
+		return -errno;
+	}
+
+	err = remove_dir(src_dir) || remove_dir(dst_dir);
+	if (err)
+		return err;
+
+	err = mkdir(src_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mkdir(dst_dir, 0700);
+	if (err) {
+		err_msg("Failed to make directory %s", src_dir);
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = mount_fs(dst_dir, src_dir, options.timeout);
+	if (err) {
+		err_msg("Failed to mount incfs");
+		goto cleanup;
+	}
+
+	src_dir_fd = open(src_dir, O_RDONLY | O_CLOEXEC);
+	dst_dir_fd = open(dst_dir, O_RDONLY | O_CLOEXEC);
+	if (src_dir_fd == -1 || dst_dir_fd == -1) {
+		err_msg("Failed to open src or dst dir");
+		err = -errno;
+		goto cleanup;
+	}
+
+	err = test_files(src_dir_fd, dst_dir_fd, &options);
+
+cleanup:
+	close(src_dir_fd);
+	close(dst_dir_fd);
+	if (!options.no_cleanup) {
+		umount(dst_dir);
+		remove_dir(dst_dir);
+		remove_dir(src_dir);
+	}
+
+	return err;
+}
diff --git a/tools/testing/selftests/filesystems/incfs/incfs_test.c b/tools/testing/selftests/filesystems/incfs/incfs_test.c
new file mode 100644
index 0000000..4c30aec
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/incfs_test.c
@@ -0,0 +1,4751 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#define _GNU_SOURCE
+
+#include <alloca.h>
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <lz4.h>
+#include <poll.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <zstd.h>
+
+#include <sys/inotify.h>
+#include <sys/mman.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/xattr.h>
+
+#include <linux/random.h>
+#include <linux/stat.h>
+#include <linux/unistd.h>
+
+#include <openssl/pem.h>
+#include <openssl/x509.h>
+
+#include <kselftest.h>
+#include <include/uapi/linux/fsverity.h>
+
+#include "utils.h"
+
+/* Can't include uapi/linux/fs.h because it clashes with mount.h */
+#define	FS_IOC_GETFLAGS			_IOR('f', 1, long)
+#define FS_VERITY_FL			0x00100000 /* Verity protected inode */
+
+#define TEST_FAILURE 1
+#define TEST_SUCCESS 0
+
+#define INCFS_ROOT_INODE 0
+
+#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+#define le16_to_cpu(x)          (x)
+#define le32_to_cpu(x)          (x)
+#define le64_to_cpu(x)          (x)
+#else
+#error Big endian not supported!
+#endif
+
+struct {
+	int file;
+	int test;
+	bool verbose;
+} options;
+
+#define TESTCOND(condition)						\
+	do {								\
+		if (!(condition)) {					\
+			ksft_print_msg("%s failed %d\n",		\
+				       __func__, __LINE__);		\
+			goto out;					\
+		} else if (options.verbose)				\
+			ksft_print_msg("%s succeeded %d\n",		\
+				       __func__, __LINE__);		\
+	} while (false)
+
+#define TEST(statement, condition)					\
+	do {								\
+		statement;						\
+		TESTCOND(condition);					\
+	} while (false)
+
+#define TESTEQUAL(statement, res)					\
+	TESTCOND((statement) == (res))
+
+#define TESTNE(statement, res)					\
+	TESTCOND((statement) != (res))
+
+#define TESTSYSCALL(statement)						\
+	do {								\
+		int res = statement;					\
+									\
+		if (res)						\
+			ksft_print_msg("Failed: %s (%d)\n",		\
+				       strerror(errno), errno);		\
+		TESTEQUAL(res, 0);					\
+	} while (false)
+
+void print_bytes(const void *data, size_t size)
+{
+	const uint8_t *bytes = data;
+	int i;
+
+	for (i = 0; i < size; ++i) {
+		if (i % 0x10 == 0)
+			printf("%08x:", i);
+		printf("%02x ", (unsigned int) bytes[i]);
+		if (i % 0x10 == 0x0f)
+			printf("\n");
+	}
+
+	if (i % 0x10 != 0)
+		printf("\n");
+}
+
+struct hash_block {
+	char data[INCFS_DATA_FILE_BLOCK_SIZE];
+};
+
+struct test_signature {
+	void *data;
+	size_t size;
+
+	char add_data[100];
+	size_t add_data_size;
+};
+
+struct test_file {
+	int index;
+	incfs_uuid_t id;
+	char *name;
+	off_t size;
+	char root_hash[INCFS_MAX_HASH_SIZE];
+	struct hash_block *mtree;
+	int mtree_block_count;
+	struct test_signature sig;
+	unsigned char *verity_sig;
+	size_t verity_sig_size;
+};
+
+struct test_files_set {
+	struct test_file *files;
+	int files_count;
+};
+
+struct linux_dirent64 {
+	uint64_t       d_ino;
+	int64_t        d_off;
+	unsigned short d_reclen;
+	unsigned char  d_type;
+	char	       d_name[0];
+} __packed;
+
+struct test_files_set get_test_files_set(void)
+{
+	static struct test_file files[] = {
+		{ .index = 0, .name = "file_one_byte", .size = 1 },
+		{ .index = 1,
+		  .name = "file_one_block",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE },
+		{ .index = 2,
+		  .name = "file_one_and_a_half_blocks",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE +
+			  INCFS_DATA_FILE_BLOCK_SIZE / 2 },
+		{ .index = 3,
+		  .name = "file_three",
+		  .size = 300 * INCFS_DATA_FILE_BLOCK_SIZE + 3 },
+		{ .index = 4,
+		  .name = "file_four",
+		  .size = 400 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 5,
+		  .name = "file_five",
+		  .size = 500 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 6,
+		  .name = "file_six",
+		  .size = 600 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 7,
+		  .name = "file_seven",
+		  .size = 700 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 8,
+		  .name = "file_eight",
+		  .size = 800 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 9,
+		  .name = "file_nine",
+		  .size = 900 * INCFS_DATA_FILE_BLOCK_SIZE + 7 },
+		{ .index = 10, .name = "file_big", .size = 500 * 1024 * 1024 }
+	};
+
+	if (options.file)
+		return (struct test_files_set) {
+			.files = files + options.file - 1,
+			.files_count = 1,
+		};
+
+	return (struct test_files_set){ .files = files,
+					.files_count = ARRAY_SIZE(files) };
+}
+
+struct test_files_set get_small_test_files_set(void)
+{
+	static struct test_file files[] = {
+		{ .index = 0, .name = "file_one_byte", .size = 1 },
+		{ .index = 1,
+		  .name = "file_one_block",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE },
+		{ .index = 2,
+		  .name = "file_one_and_a_half_blocks",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE +
+			  INCFS_DATA_FILE_BLOCK_SIZE / 2 },
+		{ .index = 3,
+		  .name = "file_three",
+		  .size = 300 * INCFS_DATA_FILE_BLOCK_SIZE + 3 },
+		{ .index = 4,
+		  .name = "file_four",
+		  .size = 400 * INCFS_DATA_FILE_BLOCK_SIZE + 7 }
+	};
+	return (struct test_files_set){ .files = files,
+					.files_count = ARRAY_SIZE(files) };
+}
+
+static int get_file_block_seed(int file, int block)
+{
+	return 7919 * file + block;
+}
+
+static loff_t min(loff_t a, loff_t b)
+{
+	return a < b ? a : b;
+}
+
+static int ilog2(size_t n)
+{
+	int l = 0;
+
+	while (n > 1) {
+		++l;
+		n >>= 1;
+	}
+	return l;
+}
+
+static pid_t flush_and_fork(void)
+{
+	fflush(stdout);
+	return fork();
+}
+
+static void print_error(char *msg)
+{
+	ksft_print_msg("%s: %s\n", msg, strerror(errno));
+}
+
+static int wait_for_process(pid_t pid)
+{
+	int status;
+	int wait_res;
+
+	wait_res = waitpid(pid, &status, 0);
+	if (wait_res <= 0) {
+		print_error("Can't wait for the child");
+		return -EINVAL;
+	}
+	if (!WIFEXITED(status)) {
+		ksft_print_msg("Unexpected child status pid=%d\n", pid);
+		return -EINVAL;
+	}
+	status = WEXITSTATUS(status);
+	if (status != 0)
+		return status;
+	return 0;
+}
+
+static void rnd_buf(uint8_t *data, size_t len, unsigned int seed)
+{
+	int i;
+
+	for (i = 0; i < len; i++) {
+		seed = 1103515245 * seed + 12345;
+		data[i] = (uint8_t)(seed >> (i % 13));
+	}
+}
+
+char *bin2hex(char *dst, const void *src, size_t count)
+{
+	const unsigned char *_src = src;
+	static const char hex_asc[] = "0123456789abcdef";
+
+	while (count--) {
+		unsigned char x = *_src++;
+
+		*dst++ = hex_asc[(x & 0xf0) >> 4];
+		*dst++ = hex_asc[(x & 0x0f)];
+	}
+	*dst = 0;
+	return dst;
+}
+
+static char *get_index_filename(const char *mnt_dir, incfs_uuid_t id)
+{
+	char path[FILENAME_MAX];
+	char str_id[1 + 2 * sizeof(id)];
+
+	bin2hex(str_id, id.bytes, sizeof(id.bytes));
+	snprintf(path, ARRAY_SIZE(path), "%s/.index/%s", mnt_dir, str_id);
+
+	return strdup(path);
+}
+
+static char *get_incomplete_filename(const char *mnt_dir, incfs_uuid_t id)
+{
+	char path[FILENAME_MAX];
+	char str_id[1 + 2 * sizeof(id)];
+
+	bin2hex(str_id, id.bytes, sizeof(id.bytes));
+	snprintf(path, ARRAY_SIZE(path), "%s/.incomplete/%s", mnt_dir, str_id);
+
+	return strdup(path);
+}
+
+int open_file_by_id(const char *mnt_dir, incfs_uuid_t id, bool use_ioctl)
+{
+	char *path = get_index_filename(mnt_dir, id);
+	int cmd_fd = open_commands_file(mnt_dir);
+	int fd = open(path, O_RDWR | O_CLOEXEC);
+	struct incfs_permit_fill permit_fill = {
+		.file_descriptor = fd,
+	};
+	int error = 0;
+
+	if (fd < 0) {
+		print_error("Can't open file by id.");
+		error = -errno;
+		goto out;
+	}
+
+	if (use_ioctl && ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("Failed to call PERMIT_FILL");
+		error = -errno;
+		goto out;
+	}
+
+	if (ioctl(fd, INCFS_IOC_PERMIT_FILL, &permit_fill) != -1) {
+		print_error(
+			"Successfully called PERMIT_FILL on non pending_read file");
+		return -errno;
+		goto out;
+	}
+
+out:
+	free(path);
+	close(cmd_fd);
+
+	if (error) {
+		close(fd);
+		return error;
+	}
+
+	return fd;
+}
+
+int get_file_attr(const char *mnt_dir, incfs_uuid_t id, char *value, int size)
+{
+	char *path = get_index_filename(mnt_dir, id);
+	int res;
+
+	res = getxattr(path, INCFS_XATTR_METADATA_NAME, value, size);
+	if (res < 0)
+		res = -errno;
+
+	free(path);
+	return res;
+}
+
+static bool same_id(incfs_uuid_t *id1, incfs_uuid_t *id2)
+{
+	return !memcmp(id1->bytes, id2->bytes, sizeof(id1->bytes));
+}
+
+ssize_t ZSTD_compress_default(char *data, char *comp_data, size_t data_size,
+					size_t comp_size)
+{
+	return ZSTD_compress(comp_data, comp_size, data, data_size, 1);
+}
+
+static int emit_test_blocks(const char *mnt_dir, struct test_file *file,
+			int blocks[], int count)
+{
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+	uint8_t comp_data[2 * INCFS_DATA_FILE_BLOCK_SIZE];
+	int block_count = (count > 32) ? 32 : count;
+	int data_buf_size = 2 * INCFS_DATA_FILE_BLOCK_SIZE * block_count;
+	uint8_t *data_buf = malloc(data_buf_size);
+	uint8_t *current_data = data_buf;
+	uint8_t *data_end = data_buf + data_buf_size;
+	struct incfs_fill_block *block_buf =
+		calloc(block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = block_count,
+		.fill_blocks = ptr_to_u64(block_buf),
+	};
+	ssize_t write_res = 0;
+	int fd = -1;
+	int error = 0;
+	int i = 0;
+	int blocks_written = 0;
+
+	for (i = 0; i < block_count; i++) {
+		int block_index = blocks[i];
+		bool compress_zstd = (file->index + block_index) % 4 == 2;
+		bool compress_lz4 = (file->index + block_index) % 4 == 0;
+		int seed = get_file_block_seed(file->index, block_index);
+		off_t block_offset =
+			((off_t)block_index) * INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t block_size = 0;
+
+		if (block_offset > file->size) {
+			error = -EINVAL;
+			break;
+		}
+		if (file->size - block_offset >
+			INCFS_DATA_FILE_BLOCK_SIZE)
+			block_size = INCFS_DATA_FILE_BLOCK_SIZE;
+		else
+			block_size = file->size - block_offset;
+
+		rnd_buf(data, block_size, seed);
+		if (compress_lz4) {
+			size_t comp_size = LZ4_compress_default((char *)data,
+					(char *)comp_data, block_size,
+					ARRAY_SIZE(comp_data));
+
+			if (comp_size <= 0) {
+				error = -EBADMSG;
+				break;
+			}
+			if (current_data + comp_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, comp_data, comp_size);
+			block_size = comp_size;
+			block_buf[i].compression = COMPRESSION_LZ4;
+		} else if (compress_zstd) {
+			size_t comp_size = ZSTD_compress(comp_data,
+					ARRAY_SIZE(comp_data), data, block_size,
+					1);
+
+			if (comp_size <= 0) {
+				error = -EBADMSG;
+				break;
+			}
+			if (current_data + comp_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, comp_data, comp_size);
+			block_size = comp_size;
+			block_buf[i].compression = COMPRESSION_ZSTD;
+		} else {
+			if (current_data + block_size > data_end) {
+				error = -ENOMEM;
+				break;
+			}
+			memcpy(current_data, data, block_size);
+			block_buf[i].compression = COMPRESSION_NONE;
+		}
+
+		block_buf[i].block_index = block_index;
+		block_buf[i].data_len = block_size;
+		block_buf[i].data = ptr_to_u64(current_data);
+		current_data += block_size;
+	}
+
+	if (!error) {
+		fd = open_file_by_id(mnt_dir, file->id, false);
+		if (fd < 0) {
+			error = -errno;
+			goto out;
+		}
+		write_res = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+		if (write_res >= 0) {
+			ksft_print_msg("Wrote to file via normal fd error\n");
+			error = -EPERM;
+			goto out;
+		}
+
+		close(fd);
+		fd = open_file_by_id(mnt_dir, file->id, true);
+		if (fd < 0) {
+			error = -errno;
+			goto out;
+		}
+		write_res = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+		if (write_res < 0)
+			error = -errno;
+		else
+			blocks_written = write_res;
+	}
+	if (error) {
+		ksft_print_msg(
+			"Writing data block error. Write returned: %d. Error:%s\n",
+			write_res, strerror(-error));
+	}
+
+out:
+	free(block_buf);
+	free(data_buf);
+	close(fd);
+	return (error < 0) ? error : blocks_written;
+}
+
+static int emit_test_block(const char *mnt_dir, struct test_file *file,
+				int block_index)
+{
+	int res = emit_test_blocks(mnt_dir, file, &block_index, 1);
+
+	if (res == 0)
+		return -EINVAL;
+	if (res == 1)
+		return 0;
+	return res;
+}
+
+static void shuffle(int array[], int count, unsigned int seed)
+{
+	int i;
+
+	for (i = 0; i < count - 1; i++) {
+		int items_left = count - i;
+		int shuffle_index;
+		int v;
+
+		seed = 1103515245 * seed + 12345;
+		shuffle_index = i + seed % items_left;
+
+		v = array[shuffle_index];
+		array[shuffle_index] = array[i];
+		array[i] = v;
+	}
+}
+
+static int emit_test_file_data(const char *mount_dir, struct test_file *file)
+{
+	int i;
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int result = 0;
+	int blocks_written = 0;
+
+	if (file->size == 0)
+		return 0;
+
+	block_indexes = calloc(block_cnt, sizeof(*block_indexes));
+	for (i = 0; i < block_cnt; i++)
+		block_indexes[i] = i;
+	shuffle(block_indexes, block_cnt, file->index);
+
+	for (i = 0; i < block_cnt; i += blocks_written) {
+		blocks_written = emit_test_blocks(mount_dir, file,
+					block_indexes + i, block_cnt - i);
+		if (blocks_written < 0) {
+			result = blocks_written;
+			goto out;
+		}
+		if (blocks_written == 0) {
+			result = -EIO;
+			goto out;
+		}
+	}
+out:
+	free(block_indexes);
+	return result;
+}
+
+static loff_t read_whole_file(const char *filename)
+{
+	int fd = -1;
+	loff_t result;
+	loff_t bytes_read = 0;
+	uint8_t buff[16 * 1024];
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	if (fd <= 0)
+		return fd;
+
+	while (1) {
+		int read_result = read(fd, buff, ARRAY_SIZE(buff));
+
+		if (read_result < 0) {
+			print_error("Error during reading from a file.");
+			result = -errno;
+			goto cleanup;
+		} else if (read_result == 0)
+			break;
+
+		bytes_read += read_result;
+	}
+	result = bytes_read;
+
+cleanup:
+	close(fd);
+	return result;
+}
+
+static int read_test_file(uint8_t *buf, size_t len, char *filename,
+			  int block_idx)
+{
+	int fd = -1;
+	int result;
+	int bytes_read = 0;
+	size_t bytes_to_read = len;
+	off_t offset = ((off_t)block_idx) * INCFS_DATA_FILE_BLOCK_SIZE;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	if (fd <= 0)
+		return fd;
+
+	if (lseek(fd, offset, SEEK_SET) != offset) {
+		print_error("Seek error");
+		return -errno;
+	}
+
+	while (bytes_read < bytes_to_read) {
+		int read_result =
+			read(fd, buf + bytes_read, bytes_to_read - bytes_read);
+		if (read_result < 0) {
+			result = -errno;
+			goto cleanup;
+		} else if (read_result == 0)
+			break;
+
+		bytes_read += read_result;
+	}
+	result = bytes_read;
+
+cleanup:
+	close(fd);
+	return result;
+}
+
+static char *create_backing_dir(const char *mount_dir)
+{
+	struct stat st;
+	char backing_dir_name[255];
+
+	snprintf(backing_dir_name, ARRAY_SIZE(backing_dir_name), "%s-src",
+		 mount_dir);
+
+	if (stat(backing_dir_name, &st) == 0) {
+		if (S_ISDIR(st.st_mode)) {
+			int error = delete_dir_tree(backing_dir_name);
+
+			if (error) {
+				ksft_print_msg(
+				      "Can't delete existing backing dir. %d\n",
+				      error);
+				return NULL;
+			}
+		} else {
+			if (unlink(backing_dir_name)) {
+				print_error("Can't clear backing dir");
+				return NULL;
+			}
+		}
+	}
+
+	if (mkdir(backing_dir_name, 0777)) {
+		if (errno != EEXIST) {
+			print_error("Can't open/create backing dir");
+			return NULL;
+		}
+	}
+
+	return strdup(backing_dir_name);
+}
+
+static int validate_test_file_content_with_seed(const char *mount_dir,
+						struct test_file *file,
+						unsigned int shuffle_seed)
+{
+	int error = -1;
+	char *filename = concat_file_name(mount_dir, file->name);
+	off_t size = file->size;
+	loff_t actual_size = get_file_size(filename);
+	int block_cnt = 1 + (size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int i;
+
+	block_indexes = alloca(sizeof(int) * block_cnt);
+	for (i = 0; i < block_cnt; i++)
+		block_indexes[i] = i;
+
+	if (shuffle_seed != 0)
+		shuffle(block_indexes, block_cnt, shuffle_seed);
+
+	if (actual_size != size) {
+		ksft_print_msg(
+			"File size doesn't match. name: %s expected size:%ld actual size:%ld\n",
+			filename, size, actual_size);
+		error = -1;
+		goto failure;
+	}
+
+	for (i = 0; i < block_cnt; i++) {
+		int block_idx = block_indexes[i];
+		uint8_t expected_block[INCFS_DATA_FILE_BLOCK_SIZE];
+		uint8_t actual_block[INCFS_DATA_FILE_BLOCK_SIZE];
+		int seed = get_file_block_seed(file->index, block_idx);
+		size_t bytes_to_compare = min(
+			(off_t)INCFS_DATA_FILE_BLOCK_SIZE,
+			size - ((off_t)block_idx) * INCFS_DATA_FILE_BLOCK_SIZE);
+		int read_result =
+			read_test_file(actual_block, INCFS_DATA_FILE_BLOCK_SIZE,
+				       filename, block_idx);
+		if (read_result < 0) {
+			ksft_print_msg(
+				"Error reading block %d from file %s. Error: %s\n",
+				block_idx, filename, strerror(-read_result));
+			error = read_result;
+			goto failure;
+		}
+		rnd_buf(expected_block, INCFS_DATA_FILE_BLOCK_SIZE, seed);
+		if (memcmp(expected_block, actual_block, bytes_to_compare)) {
+			ksft_print_msg(
+				"File contents don't match. name: %s block:%d\n",
+				file->name, block_idx);
+			error = -2;
+			goto failure;
+		}
+	}
+	free(filename);
+	return 0;
+
+failure:
+	free(filename);
+	return error;
+}
+
+static int validate_test_file_content(const char *mount_dir,
+				      struct test_file *file)
+{
+	return validate_test_file_content_with_seed(mount_dir, file, 0);
+}
+
+static int data_producer(const char *mount_dir, struct test_files_set *test_set)
+{
+	int ret = 0;
+	int timeout_ms = 1000;
+	struct incfs_pending_read_info prs[100] = {};
+	int prs_size = ARRAY_SIZE(prs);
+	int fd = open_commands_file(mount_dir);
+
+	if (fd < 0)
+		return -errno;
+
+	while ((ret = wait_for_pending_reads(fd, timeout_ms, prs, prs_size)) >
+	       0) {
+		int read_count = ret;
+		int i;
+
+		for (i = 0; i < read_count; i++) {
+			int j = 0;
+			struct test_file *file = NULL;
+
+			for (j = 0; j < test_set->files_count; j++) {
+				bool same = same_id(&(test_set->files[j].id),
+					&(prs[i].file_id));
+
+				if (same) {
+					file = &test_set->files[j];
+					break;
+				}
+			}
+			if (!file) {
+				ksft_print_msg(
+					"Unknown file in pending reads.\n");
+				break;
+			}
+
+			ret = emit_test_block(mount_dir, file,
+				prs[i].block_index);
+			if (ret < 0) {
+				ksft_print_msg("Emitting test data error: %s\n",
+						strerror(-ret));
+				break;
+			}
+		}
+	}
+	close(fd);
+	return ret;
+}
+
+static int data_producer2(const char *mount_dir,
+			  struct test_files_set *test_set)
+{
+	int ret = 0;
+	int timeout_ms = 1000;
+	struct incfs_pending_read_info2 prs[100] = {};
+	int prs_size = ARRAY_SIZE(prs);
+	int fd = open_commands_file(mount_dir);
+
+	if (fd < 0)
+		return -errno;
+
+	while ((ret = wait_for_pending_reads2(fd, timeout_ms, prs, prs_size)) >
+	       0) {
+		int read_count = ret;
+		int i;
+
+		for (i = 0; i < read_count; i++) {
+			int j = 0;
+			struct test_file *file = NULL;
+
+			for (j = 0; j < test_set->files_count; j++) {
+				bool same = same_id(&(test_set->files[j].id),
+					&(prs[i].file_id));
+
+				if (same) {
+					file = &test_set->files[j];
+					break;
+				}
+			}
+			if (!file) {
+				ksft_print_msg(
+					"Unknown file in pending reads.\n");
+				break;
+			}
+
+			ret = emit_test_block(mount_dir, file,
+				prs[i].block_index);
+			if (ret < 0) {
+				ksft_print_msg("Emitting test data error: %s\n",
+						strerror(-ret));
+				break;
+			}
+		}
+	}
+	close(fd);
+	return ret;
+}
+
+static int build_mtree(struct test_file *file)
+{
+	char data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	int block_count = 0;
+	int hash_block_count = 0;
+	int total_tree_block_count = 0;
+	int tree_lvl_index[INCFS_MAX_MTREE_LEVELS] = {};
+	int tree_lvl_count[INCFS_MAX_MTREE_LEVELS] = {};
+	int levels_count = 0;
+	int i, level;
+
+	if (file->size == 0)
+		return 0;
+
+	block_count = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	hash_block_count = block_count;
+	for (i = 0; hash_block_count > 1; i++) {
+		hash_block_count = (hash_block_count + hash_per_block - 1)
+			/ hash_per_block;
+		tree_lvl_count[i] = hash_block_count;
+		total_tree_block_count += hash_block_count;
+	}
+	levels_count = i;
+
+	for (i = 0; i < levels_count; i++) {
+		int prev_lvl_base = (i == 0) ? total_tree_block_count :
+			tree_lvl_index[i - 1];
+
+		tree_lvl_index[i] = prev_lvl_base - tree_lvl_count[i];
+	}
+
+	file->mtree_block_count = total_tree_block_count;
+	if (block_count == 1) {
+		int seed = get_file_block_seed(file->index, 0);
+
+		memset(data, 0, INCFS_DATA_FILE_BLOCK_SIZE);
+		rnd_buf((uint8_t *)data, file->size, seed);
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, file->root_hash);
+		return 0;
+	}
+
+	file->mtree = calloc(total_tree_block_count, sizeof(*file->mtree));
+	/* Build level 0 hashes. */
+	for (i = 0; i < block_count; i++) {
+		off_t offset = i * INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t block_size = INCFS_DATA_FILE_BLOCK_SIZE;
+		int block_index = tree_lvl_index[0] +
+					i / hash_per_block;
+		int block_off = (i % hash_per_block) * digest_size;
+		int seed = get_file_block_seed(file->index, i);
+		char *hash_ptr = file->mtree[block_index].data + block_off;
+
+		if (file->size - offset < block_size) {
+			block_size = file->size - offset;
+			memset(data, 0, INCFS_DATA_FILE_BLOCK_SIZE);
+		}
+
+		rnd_buf((uint8_t *)data, block_size, seed);
+		sha256(data, INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+	}
+
+	/* Build higher levels of hash tree. */
+	for (level = 1; level < levels_count; level++) {
+		int prev_lvl_base = tree_lvl_index[level - 1];
+		int prev_lvl_count = tree_lvl_count[level - 1];
+
+		for (i = 0; i < prev_lvl_count; i++) {
+			int block_index =
+				i / hash_per_block + tree_lvl_index[level];
+			int block_off = (i % hash_per_block) * digest_size;
+			char *hash_ptr =
+				file->mtree[block_index].data + block_off;
+
+			sha256(file->mtree[i + prev_lvl_base].data,
+			       INCFS_DATA_FILE_BLOCK_SIZE, hash_ptr);
+		}
+	}
+
+	/* Calculate root hash from the top block */
+	sha256(file->mtree[0].data,
+		INCFS_DATA_FILE_BLOCK_SIZE, file->root_hash);
+
+	return 0;
+}
+
+static int load_hash_tree(const char *mount_dir, struct test_file *file)
+{
+	int err;
+	int i;
+	int fd;
+	struct incfs_fill_blocks fill_blocks = {
+		.count = file->mtree_block_count,
+	};
+	struct incfs_fill_block *fill_block_array =
+		calloc(fill_blocks.count, sizeof(struct incfs_fill_block));
+
+	if (fill_blocks.count == 0)
+		return 0;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+	fill_blocks.fill_blocks = ptr_to_u64(fill_block_array);
+
+	for (i = 0; i < fill_blocks.count; i++) {
+		fill_block_array[i] = (struct incfs_fill_block){
+			.block_index = i,
+			.data_len = INCFS_DATA_FILE_BLOCK_SIZE,
+			.data = ptr_to_u64(file->mtree[i].data),
+			.flags = INCFS_BLOCK_FLAGS_HASH
+		};
+	}
+
+	fd = open_file_by_id(mount_dir, file->id, false);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err >= 0) {
+		err = -EPERM;
+		goto failure;
+	}
+
+	fd = open_file_by_id(mount_dir, file->id, true);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else
+		err = 0;
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+static int cant_touch_index_test(const char *mount_dir)
+{
+	char *file_name = "test_file";
+	int file_size = 123;
+	incfs_uuid_t file_id;
+	char *index_path = concat_file_name(mount_dir, ".index");
+	char *subdir = concat_file_name(index_path, "subdir");
+	char *dst_name = concat_file_name(mount_dir, "something");
+	char *filename_in_index = NULL;
+	char *file_path = concat_file_name(mount_dir, file_name);
+	char *backing_dir;
+	int cmd_fd = -1;
+	int err;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+
+	err = mkdir(subdir, 0777);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to crate subdir in index\n");
+		goto failure;
+	}
+
+	err = rmdir(index_path);
+	if (err == 0 || errno != EBUSY) {
+		print_error(".index directory should not be removed\n");
+		goto failure;
+	}
+
+	err = emit_file(cmd_fd, ".index", file_name, &file_id,
+				file_size, NULL);
+	if (err != -EBUSY) {
+		print_error("Shouldn't be able to crate a file in index\n");
+		goto failure;
+	}
+
+	err = emit_file(cmd_fd, NULL, file_name, &file_id,
+				file_size, NULL);
+	if (err < 0)
+		goto failure;
+	filename_in_index = get_index_filename(mount_dir, file_id);
+
+	err = unlink(filename_in_index);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be delete from index\n");
+		goto failure;
+	}
+
+
+	err = rename(filename_in_index, dst_name);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to move from index\n");
+		goto failure;
+	}
+
+	free(filename_in_index);
+	filename_in_index = concat_file_name(index_path, "abc");
+	err = link(file_path, filename_in_index);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't be able to link inside index\n");
+		goto failure;
+	}
+
+	err = rename(index_path, dst_name);
+	if (err == 0 || errno != EBUSY) {
+		print_error("Shouldn't rename .index directory\n");
+		goto failure;
+	}
+
+	close(cmd_fd);
+	free(subdir);
+	free(index_path);
+	free(dst_name);
+	free(filename_in_index);
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	free(subdir);
+	free(dst_name);
+	free(index_path);
+	free(filename_in_index);
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static bool iterate_directory(const char *dir_to_iterate, bool root,
+			      int file_count)
+{
+	struct expected_name {
+		const char *name;
+		bool root_only;
+		bool found;
+	} names[] = {
+		{INCFS_LOG_FILENAME, true, false},
+		{INCFS_PENDING_READS_FILENAME, true, false},
+		{INCFS_BLOCKS_WRITTEN_FILENAME, true, false},
+		{".index", true, false},
+		{".incomplete", true, false},
+		{"..", false, false},
+		{".", false, false},
+	};
+
+	bool pass = true, found;
+	int i;
+
+	/* Test directory iteration */
+	int fd = open(dir_to_iterate, O_RDONLY | O_DIRECTORY | O_CLOEXEC);
+
+	if (fd < 0) {
+		print_error("Can't open directory\n");
+		return false;
+	}
+
+	for (;;) {
+		/* Enough space for one dirent - no name over 30 */
+		char buf[sizeof(struct linux_dirent64) + NAME_MAX];
+		struct linux_dirent64 *dirent = (struct linux_dirent64 *) buf;
+		int nread;
+		int i;
+
+		for (i = 0; i < NAME_MAX; ++i) {
+			nread = syscall(__NR_getdents64, fd, buf,
+					 sizeof(struct linux_dirent64) + i);
+
+			if (nread >= 0)
+				break;
+			if (errno != EINVAL)
+				break;
+		}
+
+		if (nread == 0)
+			break;
+		if (nread < 0) {
+			print_error("Error iterating directory\n");
+			pass = false;
+			goto failure;
+		}
+
+		/* Expected size is rounded up to 8 byte boundary. Not sure if
+		 * this is universal truth or just happenstance, but useful test
+		 * for the moment
+		 */
+		if (nread != (((sizeof(struct linux_dirent64)
+				+ strlen(dirent->d_name) + 1) + 7) & ~7)) {
+			print_error("Wrong dirent size");
+			pass = false;
+			goto failure;
+		}
+
+		found = false;
+		for (i = 0; i < sizeof(names) / sizeof(*names); ++i)
+			if (!strcmp(dirent->d_name, names[i].name)) {
+				if (names[i].root_only && !root) {
+					print_error("Root file error");
+					pass = false;
+					goto failure;
+				}
+
+				if (names[i].found) {
+					print_error("File appears twice");
+					pass = false;
+					goto failure;
+				}
+
+				names[i].found = true;
+				found = true;
+				break;
+			}
+
+		if (!found)
+			--file_count;
+	}
+
+	for (i = 0; i < sizeof(names) / sizeof(*names); ++i) {
+		if (!names[i].found)
+			if (root || !names[i].root_only) {
+				print_error("Expected file not present");
+				pass = false;
+				goto failure;
+			}
+	}
+
+	if (file_count) {
+		print_error("Wrong number of files\n");
+		pass = false;
+		goto failure;
+	}
+
+failure:
+	close(fd);
+	return pass;
+}
+
+static int basic_file_ops_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	char *subdir1 = concat_file_name(mount_dir, "subdir1");
+	char *subdir2 = concat_file_name(mount_dir, "subdir2");
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i, err;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	err = mkdir(subdir1, 0777);
+	if (err < 0 && errno != EEXIST) {
+		print_error("Can't create subdir1\n");
+		goto failure;
+	}
+
+	err = mkdir(subdir2, 0777);
+	if (err < 0 && errno != EEXIST) {
+		print_error("Can't create subdir2\n");
+		goto failure;
+	}
+
+	/* Create all test files in subdir1 directory */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		loff_t size;
+		char *file_path = concat_file_name(subdir1, file->name);
+
+		err = emit_file(cmd_fd, "subdir1", file->name, &file->id,
+				     file->size, NULL);
+		if (err < 0)
+			goto failure;
+
+		size = get_file_size(file_path);
+		free(file_path);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+	}
+
+	if (!iterate_directory(subdir1, false, file_num))
+		goto failure;
+
+	/* Link the files to subdir2 */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *src_name = concat_file_name(subdir1, file->name);
+		char *dst_name = concat_file_name(subdir2, file->name);
+		loff_t size;
+
+		err = link(src_name, dst_name);
+		if (err < 0) {
+			print_error("Can't move file\n");
+			goto failure;
+		}
+
+		size = get_file_size(dst_name);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+		free(src_name);
+		free(dst_name);
+	}
+
+	/* Move the files from subdir2 to the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *src_name = concat_file_name(subdir2, file->name);
+		char *dst_name = concat_file_name(mount_dir, file->name);
+		loff_t size;
+
+		err = rename(src_name, dst_name);
+		if (err < 0) {
+			print_error("Can't move file\n");
+			goto failure;
+		}
+
+		size = get_file_size(dst_name);
+		if (size != file->size) {
+			ksft_print_msg("Wrong size %lld of %s.\n",
+				size, file->name);
+			goto failure;
+		}
+		free(src_name);
+		free(dst_name);
+	}
+
+	/* +2 because there are 2 subdirs */
+	if (!iterate_directory(mount_dir, true, file_num + 2))
+		goto failure;
+
+	/* Open and close all files from the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *path = concat_file_name(mount_dir, file->name);
+		int fd;
+
+		fd = open(path, O_RDWR | O_CLOEXEC);
+		free(path);
+		if (fd <= 0) {
+			print_error("Can't open file");
+			goto failure;
+		}
+		if (close(fd)) {
+			print_error("Can't close file");
+			goto failure;
+		}
+	}
+
+	/* Delete all files from the mount dir */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *path = concat_file_name(mount_dir, file->name);
+
+		err = unlink(path);
+		free(path);
+		if (err < 0) {
+			print_error("Can't unlink file");
+			goto failure;
+		}
+	}
+
+	err = delete_dir_tree(subdir1);
+	if (err) {
+		ksft_print_msg("Error deleting subdir1 %d", err);
+		goto failure;
+	}
+
+	err = rmdir(subdir2);
+	if (err) {
+		print_error("Error deleting subdir2");
+		goto failure;
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int dynamic_files_and_data_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int missing_file_idx = 5;
+	int cmd_fd = -1;
+	char *backing_dir;
+	int i;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Check that test files don't exist in the filesystem. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg(
+				"File %s somehow already exists in a clean FS.\n",
+				filename);
+			goto failure;
+		}
+		free(filename);
+	}
+
+	/* Write test data into the command file. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+		if (res < 0) {
+			ksft_print_msg("Error %s emiting file %s.\n",
+				       strerror(-res), file->name);
+			goto failure;
+		}
+
+		/* Skip writing data to one file so we can check */
+		/* that it's missing later. */
+		if (i == missing_file_idx)
+			continue;
+
+		res = emit_test_file_data(mount_dir, file);
+		if (res) {
+			ksft_print_msg("Error %s emiting data for %s.\n",
+				       strerror(-res), file->name);
+			goto failure;
+		}
+	}
+
+	/* Validate contents of the FS */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == missing_file_idx) {
+			/* No data has been written to this file. */
+			/* Check for read error; */
+			uint8_t buf;
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res = read_test_file(&buf, 1, filename, 0);
+
+			free(filename);
+			if (res > 0) {
+				ksft_print_msg(
+					"Data present, even though never writtern.\n");
+				goto failure;
+			}
+			if (res != -ETIME) {
+				ksft_print_msg("Wrong error code: %d.\n", res);
+				goto failure;
+			}
+		} else {
+			if (validate_test_file_content(mount_dir, file) < 0)
+				goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int concurrent_reads_and_writes_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	/* Validate each file from that many child processes. */
+	const int child_multiplier = 3;
+	int cmd_fd = -1;
+	char *backing_dir;
+	int status;
+	int i;
+	pid_t producer_pid;
+	pid_t *child_pids = alloca(child_multiplier * file_num * sizeof(pid_t));
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+	free(backing_dir);
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+		if (res)
+			goto failure;
+	}
+
+	/* Start child processes acessing data in the files */
+	for (i = 0; i < file_num * child_multiplier; i++) {
+		struct test_file *file = &test.files[i / child_multiplier];
+		pid_t child_pid = flush_and_fork();
+
+		if (child_pid == 0) {
+			/* This is a child process, do the data validation. */
+			int ret = validate_test_file_content_with_seed(
+				mount_dir, file, i);
+			if (ret >= 0) {
+				/* Zero exit status if data is valid. */
+				exit(0);
+			}
+
+			/* Positive status if validation error found. */
+			exit(-ret);
+		} else if (child_pid > 0) {
+			child_pids[i] = child_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	producer_pid = flush_and_fork();
+	if (producer_pid == 0) {
+		int ret;
+		/*
+		 * This is a child that should provide data to
+		 * pending reads.
+		 */
+
+		ret = data_producer(mount_dir, &test);
+		exit(-ret);
+	} else {
+		status = wait_for_process(producer_pid);
+		if (status != 0) {
+			ksft_print_msg("Data produces failed. %d(%s) ", status,
+				       strerror(status));
+			goto failure;
+		}
+	}
+
+	/* Check that all children has finished with 0 exit status */
+	for (i = 0; i < file_num * child_multiplier; i++) {
+		struct test_file *file = &test.files[i / child_multiplier];
+
+		status = wait_for_process(child_pids[i]);
+		if (status != 0) {
+			ksft_print_msg(
+				"Validation for the file %s failed with code %d (%s)\n",
+				file->name, status, strerror(status));
+			goto failure;
+		}
+	}
+
+	/* Check that there are no pending reads left */
+	{
+		struct incfs_pending_read_info prs[1] = {};
+		int timeout = 0;
+		int read_count = wait_for_pending_reads(cmd_fd, timeout, prs,
+							ARRAY_SIZE(prs));
+
+		if (read_count) {
+			ksft_print_msg(
+				"Pending reads pending when all data written\n");
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int work_after_remount_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int file_num_stage1 = file_num / 2;
+	const int file_num_stage2 = file_num;
+	char *backing_dir = NULL;
+	int i = 0;
+	int cmd_fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write first half of the data into the command file. (stage 1) */
+	for (i = 0; i < file_num_stage1; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL))
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Unmount and mount again, to see that data is persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write the second half of the data into the command file. (stage 2) */
+	for (; i < file_num_stage2; i++) {
+		struct test_file *file = &test.files[i];
+		int res = emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+
+		if (res)
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Validate contents of the FS */
+	for (i = 0; i < file_num_stage2; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+	}
+
+	/* Delete all files */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+		char *filename_in_index = get_index_filename(mount_dir,
+							file->id);
+
+		if (access(filename, F_OK) != 0) {
+			ksft_print_msg("File %s is not visible.\n", filename);
+			goto failure;
+		}
+
+		if (access(filename_in_index, F_OK) != 0) {
+			ksft_print_msg("File %s is not visible.\n",
+				filename_in_index);
+			goto failure;
+		}
+
+		unlink(filename);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg("File %s is still present.\n", filename);
+			goto failure;
+		}
+
+		if (access(filename_in_index, F_OK) != -1) {
+			ksft_print_msg("File %s is still present.\n",
+				filename_in_index);
+			goto failure;
+		}
+		free(filename);
+		free(filename_in_index);
+	}
+
+	/* Unmount and mount again, to see that deleted files stay deleted. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Validate all deleted files are still deleted. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+
+		if (access(filename, F_OK) != -1) {
+			ksft_print_msg("File %s is still visible.\n", filename);
+			goto failure;
+		}
+		free(filename);
+	}
+
+	/* Final unmount */
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int attribute_test(const char *mount_dir)
+{
+	char file_attr[] = "metadata123123";
+	char attr_buf[INCFS_MAX_FILE_ATTR_SIZE] = {};
+	int cmd_fd = -1;
+	incfs_uuid_t file_id;
+	int attr_res = 0;
+	char *backing_dir;
+
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "file", &file_id, 12, file_attr))
+		goto failure;
+
+	/* Test attribute values */
+	attr_res = get_file_attr(mount_dir, file_id, attr_buf,
+		ARRAY_SIZE(attr_buf));
+	if (attr_res != strlen(file_attr)) {
+		ksft_print_msg("Get file attr error: %d\n", attr_res);
+		goto failure;
+	}
+	if (strcmp(attr_buf, file_attr) != 0) {
+		ksft_print_msg("Incorrect file attr value: '%s'", attr_buf);
+		goto failure;
+	}
+
+	/* Unmount and mount again, to see that attributes are persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Test attribute values again after remount*/
+	attr_res = get_file_attr(mount_dir, file_id, attr_buf,
+		ARRAY_SIZE(attr_buf));
+	if (attr_res != strlen(file_attr)) {
+		ksft_print_msg("Get dir attr error: %d\n", attr_res);
+		goto failure;
+	}
+	if (strcmp(attr_buf, file_attr) != 0) {
+		ksft_print_msg("Incorrect file attr value: '%s'", attr_buf);
+		goto failure;
+	}
+
+	/* Final unmount */
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int child_procs_waiting_for_data_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	int cmd_fd = -1;
+	int i;
+	pid_t *child_pids = alloca(file_num * sizeof(pid_t));
+	char *backing_dir;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file.  (10s wait time) */
+	if (mount_fs(mount_dir, backing_dir, 10000) != 0)
+		goto failure;
+
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL);
+	}
+
+	/* Start child processes acessing data in the files */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		pid_t child_pid = flush_and_fork();
+
+		if (child_pid == 0) {
+			/* This is a child process, do the data validation. */
+			int ret = validate_test_file_content(mount_dir, file);
+
+			if (ret >= 0) {
+				/* Zero exit status if data is valid. */
+				exit(0);
+			}
+
+			/* Positive status if validation error found. */
+			exit(-ret);
+		} else if (child_pid > 0) {
+			child_pids[i] = child_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	/* Write test data into the command file. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	/* Check that all children has finished with 0 exit status */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int status = wait_for_process(child_pids[i]);
+
+		if (status != 0) {
+			ksft_print_msg(
+				"Validation for the file %s failed with code %d (%s)\n",
+				file->name, status, strerror(status));
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int multiple_providers_test(const char *mount_dir)
+{
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int producer_count = 5;
+	int cmd_fd = -1;
+	int status;
+	int i;
+	pid_t *producer_pids = alloca(producer_count * sizeof(pid_t));
+	char *backing_dir;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file.  (10s wait time) */
+	if (mount_fs_opt(mount_dir, backing_dir,
+			 "read_timeout_ms=10000,report_uid", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Tell FS about the files, without actually providing the data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL) < 0)
+			goto failure;
+	}
+
+	/* Start producer processes */
+	for (i = 0; i < producer_count; i++) {
+		pid_t producer_pid = flush_and_fork();
+
+		if (producer_pid == 0) {
+			int ret;
+			/*
+			 * This is a child that should provide data to
+			 * pending reads.
+			 */
+
+			ret = data_producer2(mount_dir, &test);
+			exit(-ret);
+		} else if (producer_pid > 0) {
+			producer_pids[i] = producer_pid;
+		} else {
+			print_error("Fork error");
+			goto failure;
+		}
+	}
+
+	/* Validate FS content */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		char *filename = concat_file_name(mount_dir, file->name);
+		loff_t read_result = read_whole_file(filename);
+
+		free(filename);
+		if (read_result != file->size) {
+			ksft_print_msg(
+				"Error validating file %s. Result: %ld\n",
+				file->name, read_result);
+			goto failure;
+		}
+	}
+
+	/* Check that all producers has finished with 0 exit status */
+	for (i = 0; i < producer_count; i++) {
+		status = wait_for_process(producer_pids[i]);
+		if (status != 0) {
+			ksft_print_msg("Producer %d failed with code (%s)\n", i,
+				       strerror(status));
+			goto failure;
+		}
+	}
+
+	close(cmd_fd);
+	free(backing_dir);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return TEST_FAILURE;
+}
+
+static int validate_hash_tree(const char *mount_dir, struct test_file *file)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	int fd = -1;
+	unsigned char *buf;
+	int i, err;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TEST(buf = malloc(INCFS_DATA_FILE_BLOCK_SIZE * 8), buf);
+
+	for (i = 0; i < file->mtree_block_count; ) {
+		int blocks_to_read = i % 7 + 1;
+		struct fsverity_read_metadata_arg args = {
+			.metadata_type = FS_VERITY_METADATA_TYPE_MERKLE_TREE,
+			.offset = i * INCFS_DATA_FILE_BLOCK_SIZE,
+			.length = blocks_to_read * INCFS_DATA_FILE_BLOCK_SIZE,
+			.buf_ptr = ptr_to_u64(buf),
+		};
+
+		TEST(err = ioctl(fd, FS_IOC_READ_VERITY_METADATA, &args),
+		     err == min(args.length, (file->mtree_block_count - i) *
+					     INCFS_DATA_FILE_BLOCK_SIZE));
+		TESTEQUAL(memcmp(buf, file->mtree[i].data, err), 0);
+
+		i += blocks_to_read;
+	}
+
+	result = TEST_SUCCESS;
+
+out:
+	free(buf);
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int hash_tree_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	const int corrupted_file_idx = 5;
+	int i = 0;
+	int cmd_fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	/* Mount FS and release the backing file. */
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write hashes and data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+		int res;
+
+		build_mtree(file);
+		res = crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				       file->size, file->root_hash,
+				       file->sig.add_data);
+
+		if (i == corrupted_file_idx) {
+			/* Corrupt third blocks hash */
+			file->mtree[0].data[2 * SHA256_DIGEST_SIZE] ^= 0xff;
+		}
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+
+		res = load_hash_tree(mount_dir, file);
+		if (res) {
+			ksft_print_msg("Can't load hashes for %s. error: %s\n",
+				file->name, strerror(-res));
+			goto failure;
+		}
+	}
+
+	/* Validate data */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == corrupted_file_idx) {
+			uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res;
+
+			res = read_test_file(data, INCFS_DATA_FILE_BLOCK_SIZE,
+					     filename, 2);
+			free(filename);
+			if (res != -EBADMSG) {
+				ksft_print_msg("Hash violation missed1. %d\n",
+					       res);
+				goto failure;
+			}
+		} else if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+		else if (validate_hash_tree(mount_dir, file) < 0)
+			goto failure;
+	}
+
+	/* Unmount and mount again, to that hashes are persistent. */
+	close(cmd_fd);
+	cmd_fd = -1;
+	if (umount(mount_dir) != 0) {
+		print_error("Can't unmout FS");
+		goto failure;
+	}
+	if (mount_fs(mount_dir, backing_dir, 50) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Validate data again */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (i == corrupted_file_idx) {
+			uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+			char *filename =
+				concat_file_name(mount_dir, file->name);
+			int res;
+
+			res = read_test_file(data, INCFS_DATA_FILE_BLOCK_SIZE,
+					     filename, 2);
+			free(filename);
+			if (res != -EBADMSG) {
+				ksft_print_msg("Hash violation missed2. %d\n",
+					       res);
+				goto failure;
+			}
+		} else if (validate_test_file_content(mount_dir, file) < 0)
+			goto failure;
+	}
+	result = TEST_SUCCESS;
+
+failure:
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		free(file->mtree);
+	}
+
+	close(cmd_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return result;
+}
+
+enum expected_log { FULL_LOG, NO_LOG, PARTIAL_LOG };
+
+static int validate_logs(const char *mount_dir, int log_fd,
+			 struct test_file *file,
+			 enum expected_log expected_log,
+			 bool report_uid, bool expect_data)
+{
+	int result = TEST_FAILURE;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+	struct incfs_pending_read_info prs[2048] = {};
+	struct incfs_pending_read_info2 prs2[2048] = {};
+	struct incfs_pending_read_info *previous_record = NULL;
+	int prs_size = ARRAY_SIZE(prs);
+	int block_count = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int expected_read_count, read_count, block_index, read_index;
+	char *filename = NULL;
+	int fd = -1;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	if (block_count > prs_size)
+		block_count = prs_size;
+	expected_read_count = block_count;
+
+	for (block_index = 0; block_index < block_count; block_index++) {
+		int result = pread(fd, data, sizeof(data),
+			    INCFS_DATA_FILE_BLOCK_SIZE * block_index);
+
+		/* Make some read logs of type SAME_FILE_NEXT_BLOCK */
+		if (block_index % 100 == 10)
+			usleep(20000);
+
+		/* Skip some blocks to make logs of type SAME_FILE */
+		if (block_index % 10 == 5) {
+			++block_index;
+			--expected_read_count;
+		}
+
+		if (expect_data)
+			TESTCOND(result > 0);
+
+		if (!expect_data)
+			TESTEQUAL(result, -1);
+	}
+
+	if (report_uid)
+		read_count = wait_for_pending_reads2(log_fd,
+				expected_log == NO_LOG ? 10 : 0,
+				prs2, prs_size);
+	else
+		read_count = wait_for_pending_reads(log_fd,
+				expected_log == NO_LOG ? 10 : 0,
+				prs, prs_size);
+
+	if (expected_log == NO_LOG)
+		TESTEQUAL(read_count, 0);
+
+	if (expected_log == PARTIAL_LOG)
+		TESTCOND(read_count > 0 &&
+			 read_count <= expected_read_count);
+
+	if (expected_log == FULL_LOG)
+		TESTEQUAL(read_count, expected_read_count);
+
+	/* If read less than expected, advance block_index appropriately */
+	for (block_index = 0, read_index = 0;
+	     read_index < expected_read_count - read_count;
+	     block_index++, read_index++)
+		if (block_index % 10 == 5)
+			++block_index;
+
+	for (read_index = 0; read_index < read_count;
+	     block_index++, read_index++) {
+		struct incfs_pending_read_info *record = report_uid ?
+			(struct incfs_pending_read_info *) &prs2[read_index] :
+			&prs[read_index];
+
+		TESTCOND(same_id(&record->file_id, &file->id));
+		TESTEQUAL(record->block_index, block_index);
+		TESTNE(record->timestamp_us, 0);
+		if (previous_record)
+			TESTEQUAL(record->serial_number,
+				  previous_record->serial_number + 1);
+
+		previous_record = record;
+		if (block_index % 10 == 5)
+			++block_index;
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int read_log_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	int i = 0;
+	int cmd_fd = -1, log_fd = -1;
+	char *backing_dir = NULL;
+
+	/* Create files */
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,report_uid,read_timeout_ms=0",
+				 false), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				    file->size, NULL), 0);
+	}
+	close(cmd_fd);
+	cmd_fd = -1;
+
+	/* Validate logs */
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, true, false), 0);
+
+	/* Unmount and mount again without report_uid */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,read_timeout_ms=0", false), 0);
+
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, false), 0);
+
+	/* No read log to make sure poll doesn't crash */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=0,read_timeout_ms=0",
+			       false), 0);
+
+	TEST(log_fd = open_log_file(mount_dir), log_fd != -1);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					NO_LOG, false, false), 0);
+
+	/* Remount and check that logs start working again */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=1,read_timeout_ms=0",
+			       true), 0);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					PARTIAL_LOG, false, false), 0);
+
+	/* Remount and check that logs continue working */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "readahead=0,rlog_pages=4,read_timeout_ms=0",
+			       true), 0);
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, false), 0);
+
+	/* Check logs work with data */
+	for (i = 0; i < file_num; i++) {
+		TESTEQUAL(emit_test_file_data(mount_dir, &test.files[i]), 0);
+		TESTEQUAL(validate_logs(mount_dir, log_fd, &test.files[i],
+					FULL_LOG, false, true), 0);
+	}
+
+	/* Final unmount */
+	close(log_fd);
+	log_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	close(log_fd);
+	free(backing_dir);
+	umount(mount_dir);
+	return result;
+}
+
+static int emit_partial_test_file_data(const char *mount_dir,
+				       struct test_file *file)
+{
+	int i, j;
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	int *block_indexes = NULL;
+	int result = 0;
+	int blocks_written = 0;
+	int bw_fd = -1;
+	char buffer[20];
+	struct pollfd pollfd;
+	long blocks_written_total, blocks_written_new_total;
+
+	if (file->size == 0)
+		return 0;
+
+	bw_fd = open_blocks_written_file(mount_dir);
+	if (bw_fd == -1)
+		return -errno;
+
+	result = read(bw_fd, buffer, sizeof(buffer));
+	if (result <= 0) {
+		result = -EIO;
+		goto out;
+	}
+
+	buffer[result] = 0;
+	blocks_written_total = strtol(buffer, NULL, 10);
+	result = 0;
+
+	pollfd = (struct pollfd) {
+		.fd = bw_fd,
+		.events = POLLIN,
+	};
+
+	result = poll(&pollfd, 1, 0);
+	if (result) {
+		result = -EIO;
+		goto out;
+	}
+
+	/* Emit 2 blocks, skip 2 blocks etc*/
+	block_indexes = calloc(block_cnt, sizeof(*block_indexes));
+	for (i = 0, j = 0; i < block_cnt; ++i)
+		if ((i & 2) == 0) {
+			block_indexes[j] = i;
+			++j;
+		}
+
+	for (i = 0; i < j; i += blocks_written) {
+		blocks_written = emit_test_blocks(mount_dir, file,
+						  block_indexes + i, j - i);
+		if (blocks_written < 0) {
+			result = blocks_written;
+			goto out;
+		}
+		if (blocks_written == 0) {
+			result = -EIO;
+			goto out;
+		}
+
+		result = poll(&pollfd, 1, 0);
+		if (result != 1 || pollfd.revents != POLLIN) {
+			result = -EIO;
+			goto out;
+		}
+
+		result = read(bw_fd, buffer, sizeof(buffer));
+		buffer[result] = 0;
+		blocks_written_new_total = strtol(buffer, NULL, 10);
+
+		if (blocks_written_new_total - blocks_written_total
+		    != blocks_written) {
+			result = -EIO;
+			goto out;
+		}
+
+		blocks_written_total = blocks_written_new_total;
+		result = 0;
+	}
+out:
+	free(block_indexes);
+	close(bw_fd);
+	return result;
+}
+
+static int validate_ranges(const char *mount_dir, struct test_file *file)
+{
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int error = TEST_SUCCESS;
+	int i;
+	int range_cnt;
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	free(filename);
+	if (fd <= 0)
+		return TEST_FAILURE;
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error != -1 || errno != EPERM) {
+		ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n");
+		error = -EPERM;
+		goto out;
+	}
+
+	cmd_fd = open_commands_file(mount_dir);
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("INCFS_IOC_PERMIT_FILL failed");
+		return -EPERM;
+		goto out;
+	}
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error && errno != ERANGE)
+		goto out;
+
+	if (error && errno == ERANGE && block_cnt < 509)
+		goto out;
+
+	if (!error && block_cnt >= 509) {
+		error = -ERANGE;
+		goto out;
+	}
+
+	if (fba.total_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.data_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	range_cnt = (block_cnt + 3) / 4;
+	if (range_cnt > 128)
+		range_cnt = 128;
+	if (range_cnt != fba.range_buffer_size_out / sizeof(*ranges)) {
+		error = -ERANGE;
+		goto out;
+	}
+
+	error = TEST_SUCCESS;
+	for (i = 0; i < fba.range_buffer_size_out / sizeof(*ranges) - 1; ++i)
+		if (ranges[i].begin != i * 4 || ranges[i].end != i * 4 + 2) {
+			error = -EINVAL;
+			goto out;
+		}
+
+	if (ranges[i].begin != i * 4 ||
+	    (ranges[i].end != i * 4 + 1 && ranges[i].end != i * 4 + 2)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	for (i = 0; i < 64; ++i) {
+		fba.start_index = i * 2;
+		fba.end_index = i * 2 + 2;
+		error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+		if (error)
+			goto out;
+
+		if (fba.total_blocks_out != block_cnt) {
+			error = -EINVAL;
+			goto out;
+		}
+
+		if (fba.start_index >= block_cnt) {
+			if (fba.index_out != fba.start_index) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			break;
+		}
+
+		if (i % 2) {
+			if (fba.range_buffer_size_out != 0) {
+				error = -EINVAL;
+				goto out;
+			}
+		} else {
+			if (fba.range_buffer_size_out != sizeof(*ranges)) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			if (ranges[0].begin != i * 2) {
+				error = -EINVAL;
+				goto out;
+			}
+
+			if (ranges[0].end != i * 2 + 1 &&
+			    ranges[0].end != i * 2 + 2) {
+				error = -EINVAL;
+				goto out;
+			}
+		}
+	}
+
+out:
+	close(fd);
+	close(cmd_fd);
+	return error;
+}
+
+static int get_blocks_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	/* Write data. */
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id, file->size,
+			      NULL))
+			goto failure;
+
+		if (emit_partial_test_file_data(mount_dir, file))
+			goto failure;
+	}
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_ranges(mount_dir, file))
+			goto failure;
+
+		/*
+		 * The smallest files are filled completely, so this checks that
+		 * the fast get_filled_blocks path is not causing issues
+		 */
+		if (validate_ranges(mount_dir, file))
+			goto failure;
+	}
+
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_FAILURE;
+}
+
+static int emit_partial_test_file_hash(const char *mount_dir,
+				       struct test_file *file)
+{
+	int err;
+	int fd;
+	struct incfs_fill_blocks fill_blocks = {
+		.count = 1,
+	};
+	struct incfs_fill_block *fill_block_array =
+		calloc(fill_blocks.count, sizeof(struct incfs_fill_block));
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+
+	if (file->size <= 4096 / 32 * 4096)
+		return 0;
+
+	if (!fill_block_array)
+		return -ENOMEM;
+	fill_blocks.fill_blocks = ptr_to_u64(fill_block_array);
+
+	rnd_buf(data, sizeof(data), 0);
+
+	fill_block_array[0] =
+		(struct incfs_fill_block){ .block_index = 1,
+					   .data_len =
+						   INCFS_DATA_FILE_BLOCK_SIZE,
+					   .data = ptr_to_u64(data),
+					   .flags = INCFS_BLOCK_FLAGS_HASH };
+
+	fd = open_file_by_id(mount_dir, file->id, true);
+	if (fd < 0) {
+		err = errno;
+		goto failure;
+	}
+
+	err = ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks);
+	close(fd);
+	if (err < fill_blocks.count)
+		err = errno;
+	else
+		err = 0;
+
+failure:
+	free(fill_block_array);
+	return err;
+}
+
+static int validate_hash_ranges(const char *mount_dir, struct test_file *file)
+{
+	int block_cnt = 1 + (file->size - 1) / INCFS_DATA_FILE_BLOCK_SIZE;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int error = TEST_SUCCESS;
+	int file_blocks = (file->size + INCFS_DATA_FILE_BLOCK_SIZE - 1) /
+			  INCFS_DATA_FILE_BLOCK_SIZE;
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	if (file->size <= 4096 / 32 * 4096)
+		return 0;
+
+	fd = open(filename, O_RDONLY | O_CLOEXEC);
+	free(filename);
+	if (fd <= 0)
+		return TEST_FAILURE;
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error != -1 || errno != EPERM) {
+		ksft_print_msg("INCFS_IOC_GET_FILLED_BLOCKS not blocked\n");
+		error = -EPERM;
+		goto out;
+	}
+
+	cmd_fd = open_commands_file(mount_dir);
+	permit_fill.file_descriptor = fd;
+	if (ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill)) {
+		print_error("INCFS_IOC_PERMIT_FILL failed");
+		return -EPERM;
+		goto out;
+	}
+
+	error = ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+	if (error)
+		goto out;
+
+	if (fba.total_blocks_out <= block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.data_blocks_out != block_cnt) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (fba.range_buffer_size_out != sizeof(struct incfs_filled_range)) {
+		error = -EINVAL;
+		goto out;
+	}
+
+	if (ranges[0].begin != file_blocks + 1 ||
+	    ranges[0].end != file_blocks + 2) {
+		error = -EINVAL;
+		goto out;
+	}
+
+out:
+	close(cmd_fd);
+	close(fd);
+	return error;
+}
+
+static int get_hash_blocks_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, file->root_hash,
+				     file->sig.add_data))
+			goto failure;
+
+		if (emit_partial_test_file_hash(mount_dir, file))
+			goto failure;
+	}
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		if (validate_hash_ranges(mount_dir, file))
+			goto failure;
+	}
+
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_SUCCESS;
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return TEST_FAILURE;
+}
+
+static int large_file_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	int result = TEST_FAILURE;
+	uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE] = {};
+	int block_count = 3LL * 1024 * 1024 * 1024 / INCFS_DATA_FILE_BLOCK_SIZE;
+	struct incfs_fill_block *block_buf =
+		calloc(block_count, sizeof(struct incfs_fill_block));
+	struct incfs_fill_blocks fill_blocks = {
+		.count = block_count,
+		.fill_blocks = ptr_to_u64(block_buf),
+	};
+	incfs_uuid_t id;
+	int fd = -1;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "very_large_file", &id,
+		      (uint64_t)block_count * INCFS_DATA_FILE_BLOCK_SIZE,
+		      NULL) < 0)
+		goto failure;
+
+	for (i = 0; i < block_count; i++) {
+		block_buf[i].compression = COMPRESSION_NONE;
+		block_buf[i].block_index = i;
+		block_buf[i].data_len = INCFS_DATA_FILE_BLOCK_SIZE;
+		block_buf[i].data = ptr_to_u64(data);
+	}
+
+	fd = open_file_by_id(mount_dir, id, true);
+	if (fd < 0)
+		goto failure;
+
+	if (ioctl(fd, INCFS_IOC_FILL_BLOCKS, &fill_blocks) != block_count)
+		goto failure;
+
+	if (emit_file(cmd_fd, NULL, "very_very_large_file", &id, 1LL << 40,
+		      NULL) < 0)
+		goto failure;
+
+	result = TEST_SUCCESS;
+
+failure:
+	close(fd);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int validate_mapped_file(const char *orig_name, const char *name,
+				size_t size, size_t offset)
+{
+	struct stat st;
+	int orig_fd = -1, fd = -1;
+	size_t block;
+	int result = TEST_FAILURE;
+
+	if (stat(name, &st)) {
+		ksft_print_msg("Failed to stat %s with error %s\n",
+			       name, strerror(errno));
+		goto failure;
+	}
+
+	if (size != st.st_size) {
+		ksft_print_msg("Mismatched file sizes for file %s - expected %llu, got %llu\n",
+				   name, size, st.st_size);
+		goto failure;
+	}
+
+	fd = open(name, O_RDONLY | O_CLOEXEC);
+	if (fd == -1) {
+		ksft_print_msg("Failed to open %s with error %s\n", name,
+			       strerror(errno));
+		goto failure;
+	}
+
+	orig_fd = open(orig_name, O_RDONLY | O_CLOEXEC);
+	if (orig_fd == -1) {
+		ksft_print_msg("Failed to open %s with error %s\n", orig_name,
+			       strerror(errno));
+		goto failure;
+	}
+
+	for (block = 0; block < size; block += INCFS_DATA_FILE_BLOCK_SIZE) {
+		uint8_t orig_data[INCFS_DATA_FILE_BLOCK_SIZE];
+		uint8_t data[INCFS_DATA_FILE_BLOCK_SIZE];
+		ssize_t orig_read, mapped_read;
+
+		orig_read = pread(orig_fd, orig_data,
+				 INCFS_DATA_FILE_BLOCK_SIZE, block + offset);
+		mapped_read = pread(fd, data, INCFS_DATA_FILE_BLOCK_SIZE,
+				    block);
+
+		if (orig_read < mapped_read ||
+		    mapped_read != min(size - block,
+				       INCFS_DATA_FILE_BLOCK_SIZE)) {
+			ksft_print_msg("Failed to read enough data: %llu %llu %llu %lld %lld\n",
+				       block, size, offset, orig_read,
+				       mapped_read);
+			goto failure;
+		}
+
+		if (memcmp(orig_data, data, mapped_read)) {
+			ksft_print_msg("Data doesn't match: %llu %llu %llu %lld %lld\n",
+				       block, size, offset, orig_read,
+				       mapped_read);
+			goto failure;
+		}
+	}
+
+	result = TEST_SUCCESS;
+
+failure:
+	close(orig_fd);
+	close(fd);
+	return result;
+}
+
+static int mapped_file_test(const char *mount_dir)
+{
+	char *backing_dir;
+	int result = TEST_FAILURE;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	backing_dir = create_backing_dir(mount_dir);
+	if (!backing_dir)
+		goto failure;
+
+	if (mount_fs_opt(mount_dir, backing_dir, "readahead=0", false) != 0)
+		goto failure;
+
+	cmd_fd = open_commands_file(mount_dir);
+	if (cmd_fd < 0)
+		goto failure;
+
+	for (i = 0; i < file_num; ++i) {
+		struct test_file *file = &test.files[i];
+		size_t blocks = file->size / INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t mapped_offset = blocks / 4 *
+			INCFS_DATA_FILE_BLOCK_SIZE;
+		size_t mapped_size = file->size / 4 * 3 - mapped_offset;
+		struct incfs_create_mapped_file_args mfa;
+		char mapped_file_name[FILENAME_MAX];
+		char orig_file_path[PATH_MAX];
+		char mapped_file_path[PATH_MAX];
+
+		if (emit_file(cmd_fd, NULL, file->name, &file->id, file->size,
+					NULL) < 0)
+			goto failure;
+
+		if (emit_test_file_data(mount_dir, file))
+			goto failure;
+
+		if (snprintf(mapped_file_name, ARRAY_SIZE(mapped_file_name),
+					"%s.mapped", file->name) < 0)
+			goto failure;
+
+		mfa = (struct incfs_create_mapped_file_args) {
+			.size = mapped_size,
+			.mode = 0664,
+			.file_name = ptr_to_u64(mapped_file_name),
+			.source_file_id = file->id,
+			.source_offset = mapped_offset,
+		};
+
+		result = ioctl(cmd_fd, INCFS_IOC_CREATE_MAPPED_FILE, &mfa);
+		if (result) {
+			ksft_print_msg(
+				"Failed to create mapped file with error %d\n",
+				result);
+			goto failure;
+		}
+
+		result = snprintf(orig_file_path,
+				  ARRAY_SIZE(orig_file_path), "%s/%s",
+				  mount_dir, file->name);
+
+		if (result < 0 || result >= ARRAY_SIZE(mapped_file_path)) {
+			result = TEST_FAILURE;
+			goto failure;
+		}
+
+		result = snprintf(mapped_file_path,
+				  ARRAY_SIZE(mapped_file_path), "%s/%s",
+				  mount_dir, mapped_file_name);
+
+		if (result < 0 || result >= ARRAY_SIZE(mapped_file_path)) {
+			result = TEST_FAILURE;
+			goto failure;
+		}
+
+		result = validate_mapped_file(orig_file_path, mapped_file_path,
+					      mapped_size, mapped_offset);
+		if (result)
+			goto failure;
+	}
+
+failure:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static const char v1_file[] = {
+	/* Header */
+	/* 0x00: Magic number */
+	0x49, 0x4e, 0x43, 0x46, 0x53, 0x00, 0x00, 0x00,
+	/* 0x08: Version */
+	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x10: Header size */
+	0x38, 0x00,
+	/* 0x12: Block size */
+	0x00, 0x10,
+	/* 0x14: Flags */
+	0x00, 0x00, 0x00, 0x00,
+	/* 0x18: First md offset */
+	0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x20: File size */
+	0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x28: UUID */
+	0x8c, 0x7d, 0xd9, 0x22, 0xad, 0x47, 0x49, 0x4f,
+	0xc0, 0x2c, 0x38, 0x8e, 0x12, 0xc0, 0x0e, 0xac,
+
+	/* 0x38: Attribute */
+	0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
+	0x31, 0x32, 0x33, 0x31, 0x32, 0x33,
+
+	/* Attribute md record */
+	/* 0x46: Type */
+	0x02,
+	/* 0x47: Size */
+	0x25, 0x00,
+	/* 0x49: CRC */
+	0x9a, 0xef, 0xef, 0x72,
+	/* 0x4d: Next md offset */
+	0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x55: Prev md offset */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x5d: fa_offset */
+	0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x65: fa_size */
+	0x0e, 0x00,
+	/* 0x67: fa_crc */
+	0xfb, 0x5e, 0x72, 0x89,
+
+	/* Blockmap table */
+	/* 0x6b: First 10-byte entry */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+
+	/* Blockmap md record */
+	/* 0x75: Type */
+	0x01,
+	/* 0x76: Size */
+	0x23, 0x00,
+	/* 0x78: CRC */
+	0x74, 0x45, 0xd3, 0xb9,
+	/* 0x7c: Next md offset */
+	0x00, 0x00, 0x00, 0x00,	0x00, 0x00, 0x00, 0x00,
+	/* 0x84: Prev md offset */
+	0x46, 0x00, 0x00, 0x00,	0x00, 0x00, 0x00, 0x00,
+	/* 0x8c: blockmap offset */
+	0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* 0x94: blockmap count */
+	0x01, 0x00, 0x00, 0x00,
+};
+
+static int compatibility_test(const char *mount_dir)
+{
+	static const char *name = "file";
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	char *filename = NULL;
+	int fd = -1;
+	uint64_t size = 0x0c;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TEST(filename = concat_file_name(backing_dir, name), filename);
+	TEST(fd = open(filename, O_CREAT | O_WRONLY | O_CLOEXEC, 0777),
+	     fd != -1);
+	TESTEQUAL(write(fd, v1_file, sizeof(v1_file)), sizeof(v1_file));
+	TESTEQUAL(fsetxattr(fd, INCFS_XATTR_SIZE_NAME, &size, sizeof(size), 0),
+		  0);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 50), 0);
+	free(filename);
+	TEST(filename = concat_file_name(mount_dir, name), filename);
+	close(fd);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	umount(mount_dir);
+	free(backing_dir);
+	free(filename);
+	return result;
+}
+
+static int zero_blocks_written_count(int fd, uint32_t data_blocks_written,
+				     uint32_t hash_blocks_written)
+{
+	int test_result = TEST_FAILURE;
+	uint64_t offset;
+	uint8_t type;
+	uint32_t bw;
+
+	/* Get first md record */
+	TESTEQUAL(pread(fd, &offset, sizeof(offset), 24), sizeof(offset));
+
+	/* Find status md record */
+	for (;;) {
+		TESTNE(offset, 0);
+		TESTEQUAL(pread(fd, &type, sizeof(type), le64_to_cpu(offset)),
+			  sizeof(type));
+		if (type == 4)
+			break;
+		TESTEQUAL(pread(fd, &offset, sizeof(offset),
+				le64_to_cpu(offset) + 7),
+			  sizeof(offset));
+	}
+
+	/* Read blocks_written */
+	offset = le64_to_cpu(offset);
+	TESTEQUAL(pread(fd, &bw, sizeof(bw), offset + 23), sizeof(bw));
+	TESTEQUAL(le32_to_cpu(bw), data_blocks_written);
+	TESTEQUAL(pread(fd, &bw, sizeof(bw), offset + 27), sizeof(bw));
+	TESTEQUAL(le32_to_cpu(bw), hash_blocks_written);
+
+	/* Write out zero */
+	bw = 0;
+	TESTEQUAL(pwrite(fd, &bw, sizeof(bw), offset + 23), sizeof(bw));
+	TESTEQUAL(pwrite(fd, &bw, sizeof(bw), offset + 27), sizeof(bw));
+
+	test_result = TEST_SUCCESS;
+out:
+	return test_result;
+}
+
+static int validate_block_count(const char *mount_dir, const char *backing_dir,
+				struct test_file *file,
+				int total_data_blocks, int filled_data_blocks,
+				int total_hash_blocks, int filled_hash_blocks)
+{
+	char *filename = NULL;
+	char *backing_filename = NULL;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+	int test_result = TEST_FAILURE;
+	struct incfs_filled_range ranges[128];
+	struct incfs_get_filled_blocks_args fba = {
+		.range_buffer = ptr_to_u64(ranges),
+		.range_buffer_size = sizeof(ranges),
+	};
+	int cmd_fd = -1;
+	struct incfs_permit_fill permit_fill;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(backing_filename = concat_file_name(backing_dir, file->name),
+	     backing_filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+
+	close(fd);
+	TESTEQUAL(umount(mount_dir), 0);
+	TEST(fd = open(backing_filename, O_RDWR | O_CLOEXEC), fd != -1);
+	TESTEQUAL(zero_blocks_written_count(fd, filled_data_blocks,
+					    filled_hash_blocks),
+		  TEST_SUCCESS);
+	close(fd);
+	fd = -1;
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	permit_fill.file_descriptor = fd;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_PERMIT_FILL, &permit_fill), 0);
+	do {
+		ioctl(fd, INCFS_IOC_GET_FILLED_BLOCKS, &fba);
+		fba.start_index = fba.index_out + 1;
+	} while (fba.index_out < fba.total_blocks_out);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+
+	test_result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	close(fd);
+	free(filename);
+	free(backing_filename);
+	return test_result;
+}
+
+
+
+static int validate_data_block_count(const char *mount_dir,
+				     const char *backing_dir,
+				     struct test_file *file)
+{
+	const int total_data_blocks = 1 + (file->size - 1) /
+						INCFS_DATA_FILE_BLOCK_SIZE;
+	const int filled_data_blocks = (total_data_blocks + 1) / 2;
+
+	int test_result = TEST_FAILURE;
+	char *filename = NULL;
+	char *incomplete_filename = NULL;
+	struct stat stat_buf_incomplete, stat_buf_file;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+	int i;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(incomplete_filename = get_incomplete_filename(mount_dir, file->id),
+	     incomplete_filename);
+
+	TESTEQUAL(stat(filename, &stat_buf_file), 0);
+	TESTEQUAL(stat(incomplete_filename, &stat_buf_incomplete), 0);
+	TESTEQUAL(stat_buf_file.st_ino, stat_buf_incomplete.st_ino);
+	TESTEQUAL(stat_buf_file.st_nlink, 3);
+
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, 0);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	for (i = 0; i < total_data_blocks; i += 2)
+		TESTEQUAL(emit_test_block(mount_dir, file, i), 0);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, filled_data_blocks);
+	TESTEQUAL(bca.total_hash_blocks_out, 0);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+	close(fd);
+	fd = -1;
+
+	TESTEQUAL(validate_block_count(mount_dir, backing_dir, file,
+				       total_data_blocks, filled_data_blocks,
+				       0, 0),
+		  0);
+
+	for (i = 1; i < total_data_blocks; i += 2)
+		TESTEQUAL(emit_test_block(mount_dir, file, i), 0);
+
+	TESTEQUAL(stat(incomplete_filename, &stat_buf_incomplete), -1);
+	TESTEQUAL(errno, ENOENT);
+
+	test_result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(incomplete_filename);
+	free(filename);
+	return test_result;
+}
+
+static int data_block_count_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+
+	for (i = 0; i < test.files_count; ++i) {
+		struct test_file *file = &test.files[i];
+
+		TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+		TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				    file->size,	NULL),
+			  0);
+		close(cmd_fd);
+		cmd_fd = -1;
+
+		TESTEQUAL(validate_data_block_count(mount_dir, backing_dir,
+						    file),
+			  0);
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int validate_hash_block_count(const char *mount_dir,
+				     const char *backing_dir,
+				     struct test_file *file)
+{
+	const int digest_size = SHA256_DIGEST_SIZE;
+	const int hash_per_block = INCFS_DATA_FILE_BLOCK_SIZE / digest_size;
+	const int total_data_blocks = 1 + (file->size - 1) /
+					INCFS_DATA_FILE_BLOCK_SIZE;
+
+	int result = TEST_FAILURE;
+	int hash_layer = total_data_blocks;
+	int total_hash_blocks = 0;
+	int filled_hash_blocks;
+	char *filename = NULL;
+	int fd = -1;
+	struct incfs_get_block_count_args bca = {};
+
+	while (hash_layer > 1) {
+		hash_layer = (hash_layer + hash_per_block - 1) / hash_per_block;
+		total_hash_blocks += hash_layer;
+	}
+	filled_hash_blocks = total_hash_blocks > 1 ? 1 : 0;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, 0);
+
+	TESTEQUAL(emit_partial_test_file_hash(mount_dir, file), 0);
+
+	TESTEQUAL(ioctl(fd, INCFS_IOC_GET_BLOCK_COUNT, &bca), 0);
+	TESTEQUAL(bca.total_data_blocks_out, total_data_blocks);
+	TESTEQUAL(bca.filled_data_blocks_out, 0);
+	TESTEQUAL(bca.total_hash_blocks_out, total_hash_blocks);
+	TESTEQUAL(bca.filled_hash_blocks_out, filled_hash_blocks);
+	close(fd);
+	fd = -1;
+
+	if (filled_hash_blocks)
+		TESTEQUAL(validate_block_count(mount_dir, backing_dir, file,
+				       total_data_blocks, 0,
+				       total_hash_blocks, filled_hash_blocks),
+		  0);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int hash_block_count_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+
+	for (i = 0; i < test.files_count; i++) {
+		struct test_file *file = &test.files[i];
+
+		TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+		TESTEQUAL(crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, file->root_hash,
+				     file->sig.add_data),
+			  0);
+		close(cmd_fd);
+		cmd_fd = -1;
+
+		TESTEQUAL(validate_hash_block_count(mount_dir, backing_dir,
+						    &test.files[i]),
+			  0);
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int is_close(struct timespec *start, int expected_ms)
+{
+	const int allowed_variance = 100;
+	int result = TEST_FAILURE;
+	struct timespec finish;
+	int diff;
+
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &finish), 0);
+	diff = (finish.tv_sec - start->tv_sec) * 1000 +
+		(finish.tv_nsec - start->tv_nsec) / 1000000;
+
+	TESTCOND(diff >= expected_ms - allowed_variance);
+	TESTCOND(diff <= expected_ms + allowed_variance);
+	result = TEST_SUCCESS;
+out:
+	return result;
+}
+
+static int per_uid_read_timeouts_test(const char *mount_dir)
+{
+	struct test_file file = {
+		.name = "file",
+		.size = 16 * INCFS_DATA_FILE_BLOCK_SIZE
+	};
+
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int pid = -1;
+	int cmd_fd = -1;
+	char *filename = NULL;
+	int fd = -1;
+	struct timespec start;
+	char buffer[4096];
+	struct incfs_per_uid_read_timeouts purt_get[1];
+	struct incfs_get_read_timeouts_args grt = {
+		ptr_to_u64(purt_get),
+		sizeof(purt_get)
+	};
+	struct incfs_per_uid_read_timeouts purt_set[] = {
+		{
+			.uid = 0,
+			.min_time_us = 1000000,
+			.min_pending_time_us = 2000000,
+			.max_pending_time_us = 3000000,
+		},
+	};
+	struct incfs_set_read_timeouts_args srt = {
+		ptr_to_u64(purt_set),
+		sizeof(purt_set)
+	};
+	int status;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "read_timeout_ms=1000,readahead=0", false), 0);
+
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size,
+			    NULL), 0);
+
+	TEST(filename = concat_file_name(mount_dir, file.name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC), 0);
+
+	/* Default mount options read failure is 1000 */
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	grt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, 0);
+
+	/* Set it to 3000 */
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 3000), 0);
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), -1);
+	TESTEQUAL(errno, E2BIG);
+	TESTEQUAL(grt.timeouts_array_size_out, sizeof(purt_get));
+	grt.timeouts_array_size = sizeof(purt_get);
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, sizeof(purt_get));
+	TESTEQUAL(purt_get[0].uid, purt_set[0].uid);
+	TESTEQUAL(purt_get[0].min_time_us, purt_set[0].min_time_us);
+	TESTEQUAL(purt_get[0].min_pending_time_us,
+		  purt_set[0].min_pending_time_us);
+	TESTEQUAL(purt_get[0].max_pending_time_us,
+		  purt_set[0].max_pending_time_us);
+
+	/* Still 1000 in UID 2 */
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(setuid(2), 0);
+		TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+		exit(0);
+	}
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(WEXITSTATUS(status), 0);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Set it to default */
+	purt_set[0].max_pending_time_us = UINT32_MAX;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), -1);
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Test min read time */
+	TESTEQUAL(emit_test_block(mount_dir, &file, 0), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TESTEQUAL(pread(fd, buffer, sizeof(buffer), 0), sizeof(buffer));
+	TESTEQUAL(is_close(&start, 1000), 0);
+
+	/* Test min pending time */
+	purt_set[0].uid = 2;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(clock_gettime(CLOCK_MONOTONIC, &start), 0);
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(setuid(2), 0);
+		TESTEQUAL(pread(fd, buffer, sizeof(buffer), sizeof(buffer)),
+			  sizeof(buffer));
+		exit(0);
+	}
+	sleep(1);
+	TESTEQUAL(emit_test_block(mount_dir, &file, 1), 0);
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(WEXITSTATUS(status), 0);
+	TESTEQUAL(is_close(&start, 2000), 0);
+
+	/* Clear timeouts */
+	srt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	grt.timeouts_array_size = 0;
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_READ_TIMEOUTS, &grt), 0);
+	TESTEQUAL(grt.timeouts_array_size_out, 0);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+
+	if (pid == 0)
+		exit(result);
+
+	free(filename);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+#define DIRS 3
+static int inotify_test(const char *mount_dir)
+{
+	const char *mapped_file_name = "mapped_name";
+	struct test_file file = {
+		.name = "file",
+		.size = 16 * INCFS_DATA_FILE_BLOCK_SIZE
+	};
+
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL, *index_dir = NULL, *incomplete_dir = NULL;
+	char *file_name = NULL;
+	int cmd_fd = -1;
+	int notify_fd = -1;
+	int wds[DIRS];
+	char buffer[DIRS * (sizeof(struct inotify_event) + NAME_MAX + 1)];
+	char *ptr = buffer;
+	struct inotify_event *event;
+	struct inotify_event *events[DIRS] = {};
+	const char *names[DIRS] = {};
+	int res;
+	char id[sizeof(incfs_uuid_t) * 2 + 1];
+	struct incfs_create_mapped_file_args mfa;
+
+	/* File creation triggers inotify events in .index and .incomplete? */
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TEST(index_dir = concat_file_name(mount_dir, ".index"), index_dir);
+	TEST(incomplete_dir = concat_file_name(mount_dir, ".incomplete"),
+	     incomplete_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 50), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TEST(notify_fd = inotify_init1(IN_NONBLOCK | IN_CLOEXEC),
+	     notify_fd != -1);
+	TEST(wds[0] = inotify_add_watch(notify_fd, mount_dir,
+					IN_CREATE | IN_DELETE),
+	     wds[0] != -1);
+	TEST(wds[1] = inotify_add_watch(notify_fd, index_dir,
+					IN_CREATE | IN_DELETE),
+	     wds[1] != -1);
+	TEST(wds[2] = inotify_add_watch(notify_fd, incomplete_dir,
+					IN_CREATE | IN_DELETE),
+	     wds[2] != -1);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size,
+			   NULL), 0);
+	TEST(res = read(notify_fd, buffer, sizeof(buffer)), res != -1);
+
+	while (ptr < buffer + res) {
+		int i;
+
+		event = (struct inotify_event *) ptr;
+		TESTCOND(ptr + sizeof(*event) <= buffer + res);
+		for (i = 0; i < DIRS; ++i)
+			if (event->wd == wds[i]) {
+				TESTEQUAL(events[i], NULL);
+				events[i] = event;
+				ptr += sizeof(*event);
+				names[i] = ptr;
+				ptr += events[i]->len;
+				TESTCOND(ptr <= buffer + res);
+				break;
+			}
+		TESTCOND(i < DIRS);
+	}
+
+	TESTNE(events[0], NULL);
+	TESTNE(events[1], NULL);
+	TESTNE(events[2], NULL);
+
+	bin2hex(id, file.id.bytes, sizeof(incfs_uuid_t));
+
+	TESTEQUAL(events[0]->mask, IN_CREATE);
+	TESTEQUAL(events[1]->mask, IN_CREATE);
+	TESTEQUAL(events[2]->mask, IN_CREATE);
+	TESTEQUAL(strcmp(names[0], file.name), 0);
+	TESTEQUAL(strcmp(names[1], id), 0);
+	TESTEQUAL(strcmp(names[2], id), 0);
+
+	/* Creating a mapped file triggers inotify event */
+	mfa = (struct incfs_create_mapped_file_args) {
+		.size = INCFS_DATA_FILE_BLOCK_SIZE,
+		.mode = 0664,
+		.file_name = ptr_to_u64(mapped_file_name),
+		.source_file_id = file.id,
+		.source_offset = INCFS_DATA_FILE_BLOCK_SIZE,
+	};
+
+	TEST(res = ioctl(cmd_fd, INCFS_IOC_CREATE_MAPPED_FILE, &mfa),
+	     res != -1);
+	TEST(res = read(notify_fd, buffer, sizeof(buffer)), res != -1);
+	event = (struct inotify_event *) buffer;
+	TESTEQUAL(event->wd, wds[0]);
+	TESTEQUAL(event->mask, IN_CREATE);
+	TESTEQUAL(strcmp(event->name, mapped_file_name), 0);
+
+	/* File completion triggers inotify event in .incomplete? */
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TEST(res = read(notify_fd, buffer, sizeof(buffer)), res != -1);
+	event = (struct inotify_event *) buffer;
+	TESTEQUAL(event->wd, wds[2]);
+	TESTEQUAL(event->mask, IN_DELETE);
+	TESTEQUAL(strcmp(event->name, id), 0);
+
+	/* File unlinking triggers inotify event in .index? */
+	TEST(file_name = concat_file_name(mount_dir, file.name), file_name);
+	TESTEQUAL(unlink(file_name), 0);
+	TEST(res = read(notify_fd, buffer, sizeof(buffer)), res != -1);
+	memset(events, 0, sizeof(events));
+	memset(names, 0, sizeof(names));
+	for (ptr = buffer; ptr < buffer + res;) {
+		event = (struct inotify_event *) ptr;
+		int i;
+
+		TESTCOND(ptr + sizeof(*event) <= buffer + res);
+		for (i = 0; i < DIRS; ++i)
+			if (event->wd == wds[i]) {
+				TESTEQUAL(events[i], NULL);
+				events[i] = event;
+				ptr += sizeof(*event);
+				names[i] = ptr;
+				ptr += events[i]->len;
+				TESTCOND(ptr <= buffer + res);
+				break;
+			}
+		TESTCOND(i < DIRS);
+	}
+
+	TESTNE(events[0], NULL);
+	TESTNE(events[1], NULL);
+	TESTEQUAL(events[2], NULL);
+
+	TESTEQUAL(events[0]->mask, IN_DELETE);
+	TESTEQUAL(events[1]->mask, IN_DELETE);
+	TESTEQUAL(strcmp(names[0], file.name), 0);
+	TESTEQUAL(strcmp(names[1], id), 0);
+
+	result = TEST_SUCCESS;
+out:
+	free(file_name);
+	close(notify_fd);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	free(index_dir);
+	free(incomplete_dir);
+	return result;
+}
+
+static EVP_PKEY *create_key(void)
+{
+	EVP_PKEY *pkey = NULL;
+	RSA *rsa = NULL;
+	BIGNUM *bn = NULL;
+
+	pkey = EVP_PKEY_new();
+	if (!pkey)
+		goto fail;
+
+	bn = BN_new();
+	BN_set_word(bn, RSA_F4);
+
+	rsa = RSA_new();
+	if (!rsa)
+		goto fail;
+
+	RSA_generate_key_ex(rsa, 4096, bn, NULL);
+	EVP_PKEY_assign_RSA(pkey, rsa);
+
+	BN_free(bn);
+	return pkey;
+
+fail:
+	BN_free(bn);
+	EVP_PKEY_free(pkey);
+	return NULL;
+}
+
+static X509 *get_cert(EVP_PKEY *key)
+{
+	X509 *x509 = NULL;
+	X509_NAME *name = NULL;
+
+	x509 = X509_new();
+	if (!x509)
+		return NULL;
+
+	ASN1_INTEGER_set(X509_get_serialNumber(x509), 1);
+	X509_gmtime_adj(X509_get_notBefore(x509), 0);
+	X509_gmtime_adj(X509_get_notAfter(x509), 31536000L);
+	X509_set_pubkey(x509, key);
+
+	name = X509_get_subject_name(x509);
+	X509_NAME_add_entry_by_txt(name, "C", MBSTRING_ASC,
+		   (const unsigned char *)"US", -1, -1, 0);
+	X509_NAME_add_entry_by_txt(name, "ST", MBSTRING_ASC,
+		   (const unsigned char *)"CA", -1, -1, 0);
+	X509_NAME_add_entry_by_txt(name, "L", MBSTRING_ASC,
+		   (const unsigned char *)"San Jose", -1, -1, 0);
+	X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC,
+		   (const unsigned char *)"Example", -1, -1, 0);
+	X509_NAME_add_entry_by_txt(name, "OU", MBSTRING_ASC,
+		   (const unsigned char *)"Org", -1, -1, 0);
+	X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC,
+		   (const unsigned char *)"www.example.com", -1, -1, 0);
+	X509_set_issuer_name(x509, name);
+
+	if (!X509_sign(x509, key, EVP_sha256()))
+		return NULL;
+
+	return x509;
+}
+
+static int sign(EVP_PKEY *key, X509 *cert, const char *data, size_t len,
+		unsigned char **sig, size_t *sig_len)
+{
+	const int pkcs7_flags = PKCS7_BINARY | PKCS7_NOATTR | PKCS7_PARTIAL |
+			  PKCS7_DETACHED;
+	const EVP_MD *md = EVP_sha256();
+
+	int result = TEST_FAILURE;
+
+	BIO *bio = NULL;
+	PKCS7 *p7 = NULL;
+	unsigned char *bio_buffer;
+
+	TEST(bio = BIO_new_mem_buf(data, len), bio);
+	TEST(p7 = PKCS7_sign(NULL, NULL, NULL, bio, pkcs7_flags), p7);
+	TESTNE(PKCS7_sign_add_signer(p7, cert, key, md, pkcs7_flags), 0);
+	TESTEQUAL(PKCS7_final(p7, bio, pkcs7_flags), 1);
+	TEST(*sig_len = i2d_PKCS7(p7, NULL), *sig_len);
+	TEST(bio_buffer = malloc(*sig_len), bio_buffer);
+	*sig = bio_buffer;
+	TEST(*sig_len = i2d_PKCS7(p7, &bio_buffer), *sig_len);
+	TESTEQUAL(PKCS7_verify(p7, NULL, NULL, bio, NULL,
+			 pkcs7_flags | PKCS7_NOVERIFY | PKCS7_NOSIGS), 1);
+
+	result = TEST_SUCCESS;
+out:
+	PKCS7_free(p7);
+	BIO_free(bio);
+	return result;
+}
+
+static int verity_installed(const char *mount_dir, int cmd_fd, bool *installed)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	int fd = -1;
+	struct test_file *file = &get_test_files_set().files[0];
+
+	TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id, file->size,
+			    NULL), 0);
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, FS_IOC_ENABLE_VERITY, NULL), -1);
+	*installed = errno != EOPNOTSUPP;
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	if (filename)
+		remove(filename);
+	free(filename);
+	return result;
+}
+
+static int enable_verity(const char *mount_dir, struct test_file *file,
+			   EVP_PKEY *key, X509 *cert, bool use_signatures)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	int fd = -1;
+	struct fsverity_enable_arg fear = {
+		.version = 1,
+		.hash_algorithm = FS_VERITY_HASH_ALG_SHA256,
+		.block_size = INCFS_DATA_FILE_BLOCK_SIZE,
+		.sig_size = 0,
+		.sig_ptr = 0,
+	};
+	struct {
+		__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 */
+	} __packed fsverity_descriptor = {
+		.version = 1,
+		.hash_algorithm = 1,
+		.log_blocksize = 12,
+		.data_size = file->size,
+	};
+	struct {
+		char magic[8];                  /* must be "FSVerity" */
+		__le16 digest_algorithm;
+		__le16 digest_size;
+		__u8 digest[32];
+	} __packed fsverity_signed_digest =  {
+		.digest_algorithm = 1,
+		.digest_size = 32
+	};
+	unsigned char *sig = NULL;
+	size_t sig_size = 0;
+	uint64_t flags;
+	struct statx statxbuf = {};
+
+	memcpy(fsverity_signed_digest.magic, "FSVerity", 8);
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TESTEQUAL(syscall(__NR_statx, AT_FDCWD, filename, 0, STATX_ALL,
+			  &statxbuf), 0);
+	TESTEQUAL(statxbuf.stx_attributes_mask & STATX_ATTR_VERITY,
+		  STATX_ATTR_VERITY);
+	TESTEQUAL(statxbuf.stx_attributes & STATX_ATTR_VERITY, 0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, FS_IOC_GETFLAGS, &flags), 0);
+	TESTEQUAL(flags & FS_VERITY_FL, 0);
+
+	/* First try to enable verity with random digest */
+	if (key) {
+		TESTEQUAL(sign(key, cert, (void *)&fsverity_signed_digest,
+			    sizeof(fsverity_signed_digest), &sig, &sig_size),
+			  0);
+
+		fear.sig_size = sig_size;
+		fear.sig_ptr = ptr_to_u64(sig);
+		TESTEQUAL(ioctl(fd, FS_IOC_ENABLE_VERITY, &fear), -1);
+	}
+
+	/* Now try with correct digest */
+	memcpy(fsverity_descriptor.root_hash, file->root_hash, 32);
+	sha256((char *)&fsverity_descriptor, sizeof(fsverity_descriptor),
+	       (char *)fsverity_signed_digest.digest);
+
+	if (ioctl(fd, FS_IOC_ENABLE_VERITY, NULL) == -1 &&
+	    errno == EOPNOTSUPP) {
+		result = TEST_SUCCESS;
+		goto out;
+	}
+
+	free(sig);
+	sig = NULL;
+
+	if (key)
+		TESTEQUAL(sign(key, cert, (void *)&fsverity_signed_digest,
+			       sizeof(fsverity_signed_digest),
+			       &sig, &sig_size),
+		  0);
+
+	if (use_signatures) {
+		fear.sig_size = sig_size;
+		file->verity_sig_size = sig_size;
+		fear.sig_ptr = ptr_to_u64(sig);
+		file->verity_sig = sig;
+		sig = NULL;
+	} else {
+		fear.sig_size = 0;
+		fear.sig_ptr = 0;
+	}
+	TESTEQUAL(ioctl(fd, FS_IOC_ENABLE_VERITY, &fear), 0);
+
+	result = TEST_SUCCESS;
+out:
+	free(sig);
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int memzero(const unsigned char *buf, size_t size)
+{
+	size_t i;
+
+	for (i = 0; i < size; ++i)
+		if (buf[i])
+			return -1;
+	return 0;
+}
+
+static int validate_verity(const char *mount_dir, struct test_file *file)
+{
+	int result = TEST_FAILURE;
+	char *filename = concat_file_name(mount_dir, file->name);
+	int fd = -1;
+	uint64_t flags;
+	struct fsverity_digest *digest;
+	struct statx statxbuf = {};
+	struct fsverity_read_metadata_arg frma = {};
+	uint8_t *buf = NULL;
+	struct fsverity_descriptor desc;
+
+	TEST(digest = malloc(sizeof(struct fsverity_digest) +
+			     INCFS_MAX_HASH_SIZE), digest != NULL);
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TESTEQUAL(syscall(__NR_statx, AT_FDCWD, filename, 0, STATX_ALL,
+			  &statxbuf), 0);
+	TESTEQUAL(statxbuf.stx_attributes & STATX_ATTR_VERITY,
+		  STATX_ATTR_VERITY);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, FS_IOC_GETFLAGS, &flags), 0);
+	TESTEQUAL(flags & FS_VERITY_FL, FS_VERITY_FL);
+	digest->digest_size = INCFS_MAX_HASH_SIZE;
+	TESTEQUAL(ioctl(fd, FS_IOC_MEASURE_VERITY, digest), 0);
+	TESTEQUAL(digest->digest_algorithm, FS_VERITY_HASH_ALG_SHA256);
+	TESTEQUAL(digest->digest_size, 32);
+
+	if (file->verity_sig) {
+		TEST(buf = malloc(file->verity_sig_size), buf);
+		frma = (struct fsverity_read_metadata_arg) {
+			.metadata_type = FS_VERITY_METADATA_TYPE_SIGNATURE,
+			.length = file->verity_sig_size,
+			.buf_ptr = ptr_to_u64(buf),
+		};
+		TESTEQUAL(ioctl(fd, FS_IOC_READ_VERITY_METADATA, &frma),
+			  file->verity_sig_size);
+		TESTEQUAL(memcmp(buf, file->verity_sig, file->verity_sig_size),
+			  0);
+	} else {
+		frma = (struct fsverity_read_metadata_arg) {
+			.metadata_type = FS_VERITY_METADATA_TYPE_SIGNATURE,
+		};
+		TESTEQUAL(ioctl(fd, FS_IOC_READ_VERITY_METADATA, &frma), -1);
+		TESTEQUAL(errno, ENODATA);
+	}
+
+	frma = (struct fsverity_read_metadata_arg) {
+		.metadata_type = FS_VERITY_METADATA_TYPE_DESCRIPTOR,
+		.length = sizeof(desc),
+		.buf_ptr = ptr_to_u64(&desc),
+	};
+	TESTEQUAL(ioctl(fd, FS_IOC_READ_VERITY_METADATA, &frma),
+		  sizeof(desc));
+	TESTEQUAL(desc.version, 1);
+	TESTEQUAL(desc.hash_algorithm, FS_VERITY_HASH_ALG_SHA256);
+	TESTEQUAL(desc.log_blocksize, ilog2(INCFS_DATA_FILE_BLOCK_SIZE));
+	TESTEQUAL(desc.salt_size, 0);
+	TESTEQUAL(desc.__reserved_0x04, 0);
+	TESTEQUAL(desc.data_size, file->size);
+	TESTEQUAL(memcmp(desc.root_hash, file->root_hash, SHA256_DIGEST_SIZE),
+		  0);
+	TESTEQUAL(memzero(desc.root_hash + SHA256_DIGEST_SIZE,
+			  sizeof(desc.root_hash) - SHA256_DIGEST_SIZE), 0);
+	TESTEQUAL(memzero(desc.salt, sizeof(desc.salt)), 0);
+	TESTEQUAL(memzero(desc.__reserved, sizeof(desc.__reserved)), 0);
+
+	result = TEST_SUCCESS;
+out:
+	free(buf);
+	close(fd);
+	free(filename);
+	free(digest);
+	return result;
+}
+
+static int verity_test_optional_sigs(const char *mount_dir, bool use_signatures)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	bool installed;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+	EVP_PKEY *key = NULL;
+	X509 *cert = NULL;
+	BIO *mem = NULL;
+	long len;
+	void *ptr;
+	FILE *proc_key_fd = NULL;
+	char *line = NULL;
+	size_t read = 0;
+	int key_id = -1;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(verity_installed(mount_dir, cmd_fd, &installed), 0);
+	if (!installed) {
+		result = TEST_SUCCESS;
+		goto out;
+	}
+	TEST(key = create_key(), key);
+	TEST(cert = get_cert(key), cert);
+
+	TEST(proc_key_fd = fopen("/proc/keys", "r"), proc_key_fd != NULL);
+	while (getline(&line, &read, proc_key_fd) != -1)
+		if (strstr(line, ".fs-verity"))
+			key_id = strtol(line, NULL, 16);
+
+	TEST(mem = BIO_new(BIO_s_mem()), mem != NULL);
+	TESTEQUAL(i2d_X509_bio(mem, cert), 1);
+	TEST(len = BIO_get_mem_data(mem, &ptr), len != 0);
+	TESTCOND(key_id == -1
+		 || syscall(__NR_add_key, "asymmetric", "test:key", ptr, len,
+			    key_id) != -1);
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		build_mtree(file);
+		TESTEQUAL(crypto_emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, file->root_hash,
+				     file->sig.add_data), 0);
+
+		TESTEQUAL(load_hash_tree(mount_dir, file), 0);
+		TESTEQUAL(enable_verity(mount_dir, file, key, cert,
+					use_signatures),
+			  0);
+	}
+
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_verity(mount_dir, &test.files[i]), 0);
+
+	close(cmd_fd);
+	cmd_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "readahead=0", false),
+		  0);
+
+	for (i = 0; i < file_num; i++)
+		TESTEQUAL(validate_verity(mount_dir, &test.files[i]), 0);
+
+	result = TEST_SUCCESS;
+out:
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		free(file->mtree);
+		free(file->verity_sig);
+
+		file->mtree = NULL;
+		file->verity_sig = NULL;
+	}
+
+	free(line);
+	BIO_free(mem);
+	X509_free(cert);
+	EVP_PKEY_free(key);
+	fclose(proc_key_fd);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int verity_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+
+	TESTEQUAL(verity_test_optional_sigs(mount_dir, true), TEST_SUCCESS);
+	TESTEQUAL(verity_test_optional_sigs(mount_dir, false), TEST_SUCCESS);
+	result = TEST_SUCCESS;
+out:
+	return result;
+}
+
+static int verity_file_valid(const char *mount_dir, struct test_file *file)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	int fd = -1;
+	uint8_t buffer[INCFS_DATA_FILE_BLOCK_SIZE];
+	struct incfs_get_file_sig_args gfsa = {
+		.file_signature = ptr_to_u64(buffer),
+		.file_signature_buf_size = sizeof(buffer),
+	};
+	int i;
+
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl(fd, INCFS_IOC_READ_FILE_SIGNATURE, &gfsa), 0);
+	for (i = 0; i < file->size; i += sizeof(buffer))
+		TESTEQUAL(pread(fd, buffer, sizeof(buffer), i),
+			  file->size - i > sizeof(buffer) ?
+				sizeof(buffer) : file->size - i);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(filename);
+	return result;
+}
+
+static int enable_verity_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	bool installed;
+	int cmd_fd = -1;
+	struct test_files_set test = get_test_files_set();
+	int i;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(verity_installed(mount_dir, cmd_fd, &installed), 0);
+	if (!installed) {
+		result = TEST_SUCCESS;
+		goto out;
+	}
+	for (i = 0; i < test.files_count; ++i) {
+		struct test_file *file = &test.files[i];
+
+		TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL), 0);
+		TESTEQUAL(emit_test_file_data(mount_dir, file), 0);
+		TESTEQUAL(enable_verity(mount_dir, file, NULL, NULL, false), 0);
+	}
+
+	/* Check files are valid on disk */
+	close(cmd_fd);
+	cmd_fd = -1;
+	TESTEQUAL(umount(mount_dir), 0);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	for (i = 0; i < test.files_count; ++i)
+		TESTEQUAL(verity_file_valid(mount_dir, &test.files[i]), 0);
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int mmap_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int cmd_fd = -1;
+	/*
+	 * File is big enough to have a two layer tree with two hashes in the
+	 * higher level, so we can corrupt the second one
+	 */
+	int shas_per_block = INCFS_DATA_FILE_BLOCK_SIZE / SHA256_DIGEST_SIZE;
+	struct test_file file = {
+		  .name = "file",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE * shas_per_block * 2,
+	};
+	char *filename = NULL;
+	int fd = -1;
+	char *addr = (void *)-1;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+
+	TESTEQUAL(build_mtree(&file), 0);
+	file.mtree[1].data[INCFS_DATA_FILE_BLOCK_SIZE] ^= 0xff;
+	TESTEQUAL(crypto_emit_file(cmd_fd, NULL, file.name, &file.id,
+			       file.size, file.root_hash,
+			       file.sig.add_data), 0);
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTEQUAL(load_hash_tree(mount_dir, &file), 0);
+	TEST(filename = concat_file_name(mount_dir, file.name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TEST(addr = mmap(NULL, file.size, PROT_READ, MAP_PRIVATE, fd, 0),
+	     addr != (void *) -1);
+	TESTEQUAL(mlock(addr, INCFS_DATA_FILE_BLOCK_SIZE), 0);
+	TESTEQUAL(munlock(addr, INCFS_DATA_FILE_BLOCK_SIZE), 0);
+	TESTEQUAL(mlock(addr + shas_per_block * INCFS_DATA_FILE_BLOCK_SIZE,
+			INCFS_DATA_FILE_BLOCK_SIZE), -1);
+	TESTEQUAL(mlock(addr + (shas_per_block - 1) *
+			       INCFS_DATA_FILE_BLOCK_SIZE,
+			INCFS_DATA_FILE_BLOCK_SIZE), 0);
+	TESTEQUAL(munlock(addr + (shas_per_block - 1) *
+				 INCFS_DATA_FILE_BLOCK_SIZE,
+			  INCFS_DATA_FILE_BLOCK_SIZE), 0);
+	TESTEQUAL(mlock(addr + (shas_per_block - 1) *
+			       INCFS_DATA_FILE_BLOCK_SIZE,
+			INCFS_DATA_FILE_BLOCK_SIZE * 2), -1);
+	TESTEQUAL(munmap(addr, file.size), 0);
+
+	result = TEST_SUCCESS;
+out:
+	free(file.mtree);
+	close(fd);
+	free(filename);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int truncate_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int cmd_fd = -1;
+	struct test_file file = {
+		  .name = "file",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE,
+	};
+	char *backing_file = NULL;
+	int fd = -1;
+	struct stat st;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size, NULL),
+		  0);
+	TEST(backing_file = concat_file_name(backing_dir, file.name),
+	     backing_file);
+	TEST(fd = open(backing_file, O_RDWR | O_CLOEXEC), fd != -1);
+	TESTEQUAL(stat(backing_file, &st), 0);
+	TESTCOND(st.st_blocks < 128);
+	TESTEQUAL(fallocate(fd, FALLOC_FL_KEEP_SIZE, 0, 1 << 24), 0);
+	TESTEQUAL(stat(backing_file, &st), 0);
+	TESTCOND(st.st_blocks > 32768);
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTEQUAL(stat(backing_file, &st), 0);
+	TESTCOND(st.st_blocks < 128);
+
+	result = TEST_SUCCESS;
+out:
+	close(fd);
+	free(backing_file);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int stat_file_test(const char *mount_dir, int cmd_fd,
+			  struct test_file *file)
+{
+	int result = TEST_FAILURE;
+	struct stat st;
+	char *filename = NULL;
+
+	TESTEQUAL(emit_file(cmd_fd, NULL, file->name, &file->id,
+				     file->size, NULL), 0);
+	TEST(filename = concat_file_name(mount_dir, file->name), filename);
+	TESTEQUAL(stat(filename, &st), 0);
+	TESTCOND(st.st_blocks < 32);
+	TESTEQUAL(emit_test_file_data(mount_dir, file), 0);
+	TESTEQUAL(stat(filename, &st), 0);
+	TESTCOND(st.st_blocks > file->size / 512);
+
+	result = TEST_SUCCESS;
+out:
+	free(filename);
+	return result;
+}
+
+static int stat_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int cmd_fd = -1;
+	int i;
+	struct test_files_set test = get_test_files_set();
+	const int file_num = test.files_count;
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+
+	for (i = 0; i < file_num; i++) {
+		struct test_file *file = &test.files[i];
+
+		TESTEQUAL(stat_file_test(mount_dir, cmd_fd, file), 0);
+	}
+
+	result = TEST_SUCCESS;
+out:
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+#define SYSFS_DIR "/sys/fs/incremental-fs/instances/test_node/"
+
+static int sysfs_test_value(const char *name, uint64_t value)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	FILE *file = NULL;
+	uint64_t res;
+
+	TEST(filename = concat_file_name(SYSFS_DIR, name), filename);
+	TEST(file = fopen(filename, "re"), file);
+	TESTEQUAL(fscanf(file, "%lu", &res), 1);
+	TESTEQUAL(res, value);
+
+	result = TEST_SUCCESS;
+out:
+	if (file)
+		fclose(file);
+	free(filename);
+	return result;
+}
+
+static int sysfs_test_value_range(const char *name, uint64_t low, uint64_t high)
+{
+	int result = TEST_FAILURE;
+	char *filename = NULL;
+	FILE *file = NULL;
+	uint64_t res;
+
+	TEST(filename = concat_file_name(SYSFS_DIR, name), filename);
+	TEST(file = fopen(filename, "re"), file);
+	TESTEQUAL(fscanf(file, "%lu", &res), 1);
+	TESTCOND(res >= low && res <= high);
+
+	result = TEST_SUCCESS;
+out:
+	if (file)
+		fclose(file);
+	free(filename);
+	return result;
+}
+
+static int ioctl_test_last_error(int cmd_fd, const incfs_uuid_t *file_id,
+				 int page, int error)
+{
+	int result = TEST_FAILURE;
+	struct incfs_get_last_read_error_args glre;
+
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_GET_LAST_READ_ERROR, &glre), 0);
+	if (file_id)
+		TESTEQUAL(memcmp(&glre.file_id_out, file_id, sizeof(*file_id)),
+			  0);
+
+	TESTEQUAL(glre.page_out, page);
+	TESTEQUAL(glre.errno_out, error);
+	result = TEST_SUCCESS;
+out:
+	return result;
+}
+
+static int sysfs_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	int cmd_fd = -1;
+	struct test_file file = {
+		  .name = "file",
+		  .size = INCFS_DATA_FILE_BLOCK_SIZE,
+	};
+	char *filename = NULL;
+	int fd = -1;
+	int pid = -1;
+	char buffer[32];
+	int status;
+	struct incfs_per_uid_read_timeouts purt_set[] = {
+		{
+			.uid = 0,
+			.min_time_us = 1000000,
+			.min_pending_time_us = 1000000,
+			.max_pending_time_us = 2000000,
+		},
+	};
+	struct incfs_set_read_timeouts_args srt = {
+		ptr_to_u64(purt_set),
+		sizeof(purt_set)
+	};
+
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "sysfs_name=test_node",
+			       false),
+		  0);
+	TEST(cmd_fd = open_commands_file(mount_dir), cmd_fd != -1);
+	TESTEQUAL(build_mtree(&file), 0);
+	file.root_hash[0] ^= 0xff;
+	TESTEQUAL(crypto_emit_file(cmd_fd, NULL, file.name, &file.id, file.size,
+				   file.root_hash, file.sig.add_data),
+		  0);
+	TEST(filename = concat_file_name(mount_dir, file.name), filename);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(ioctl_test_last_error(cmd_fd, NULL, 0, 0), 0);
+	TESTEQUAL(sysfs_test_value("reads_failed_timed_out", 0), 0);
+	TEST(read(fd, NULL, 1), -1);
+	TESTEQUAL(ioctl_test_last_error(cmd_fd, &file.id, 0, -ETIME), 0);
+	TESTEQUAL(sysfs_test_value("reads_failed_timed_out", 2), 0);
+
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTEQUAL(sysfs_test_value("reads_failed_hash_verification", 0), 0);
+	TESTEQUAL(read(fd, NULL, 1), -1);
+	TESTEQUAL(sysfs_test_value("reads_failed_hash_verification", 1), 0);
+	TESTSYSCALL(close(fd));
+	fd = -1;
+
+	TESTSYSCALL(unlink(filename));
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir,
+			       "read_timeout_ms=10000,sysfs_name=test_node",
+			       true),
+		  0);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size, NULL),
+		  0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTSYSCALL(fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC));
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(read(fd, buffer, sizeof(buffer)), sizeof(buffer));
+		exit(0);
+	}
+	sleep(1);
+	TESTEQUAL(sysfs_test_value("reads_delayed_pending", 0), 0);
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(status, 0);
+	TESTEQUAL(sysfs_test_value("reads_delayed_pending", 1), 0);
+	/* Allow +/- 10% */
+	TESTEQUAL(sysfs_test_value_range("reads_delayed_pending_us", 900000, 1100000),
+		  0);
+
+	TESTSYSCALL(close(fd));
+	fd = -1;
+
+	TESTSYSCALL(unlink(filename));
+	TESTEQUAL(ioctl(cmd_fd, INCFS_IOC_SET_READ_TIMEOUTS, &srt), 0);
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size, NULL),
+		  0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(sysfs_test_value("reads_delayed_min", 0), 0);
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTEQUAL(read(fd, buffer, sizeof(buffer)), sizeof(buffer));
+	TESTEQUAL(sysfs_test_value("reads_delayed_min", 1), 0);
+	/* This should be exact */
+	TESTEQUAL(sysfs_test_value("reads_delayed_min_us", 1000000), 0);
+
+	TESTSYSCALL(close(fd));
+	fd = -1;
+
+	TESTSYSCALL(unlink(filename));
+	TESTEQUAL(emit_file(cmd_fd, NULL, file.name, &file.id, file.size, NULL),
+		  0);
+	TEST(fd = open(filename, O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTSYSCALL(fcntl(fd, F_SETFD, fcntl(fd, F_GETFD) | FD_CLOEXEC));
+	TEST(pid = fork(), pid != -1);
+	if (pid == 0) {
+		TESTEQUAL(read(fd, buffer, sizeof(buffer)), sizeof(buffer));
+		exit(0);
+	}
+	usleep(500000);
+	TESTEQUAL(sysfs_test_value("reads_delayed_pending", 1), 0);
+	TESTEQUAL(sysfs_test_value("reads_delayed_min", 1), 0);
+	TESTEQUAL(emit_test_file_data(mount_dir, &file), 0);
+	TESTNE(wait(&status), -1);
+	TESTEQUAL(status, 0);
+	TESTEQUAL(sysfs_test_value("reads_delayed_pending", 2), 0);
+	TESTEQUAL(sysfs_test_value("reads_delayed_min", 2), 0);
+	/* Exact 1000000 plus 500000 +/- 10% */
+	TESTEQUAL(sysfs_test_value_range("reads_delayed_min_us", 1450000, 1550000), 0);
+	/* Allow +/- 10% */
+	TESTEQUAL(sysfs_test_value_range("reads_delayed_pending_us", 1350000, 1650000),
+		  0);
+
+	result = TEST_SUCCESS;
+out:
+	if (pid == 0)
+		exit(result);
+	free(file.mtree);
+	free(filename);
+	close(fd);
+	close(cmd_fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static int sysfs_test_directories(bool one_present, bool two_present)
+{
+	int result = TEST_FAILURE;
+	struct stat st;
+
+	TESTEQUAL(stat("/sys/fs/incremental-fs/instances/1", &st),
+		  one_present ? 0 : -1);
+	if (one_present)
+		TESTCOND(S_ISDIR(st.st_mode));
+	else
+		TESTEQUAL(errno, ENOENT);
+	TESTEQUAL(stat("/sys/fs/incremental-fs/instances/2", &st),
+		  two_present ? 0 : -1);
+	if (two_present)
+		TESTCOND(S_ISDIR(st.st_mode));
+	else
+		TESTEQUAL(errno, ENOENT);
+
+	result = TEST_SUCCESS;
+out:
+	return result;
+}
+
+static int sysfs_rename_test(const char *mount_dir)
+{
+	int result = TEST_FAILURE;
+	char *backing_dir = NULL;
+	char *mount_dir2 = NULL;
+	int fd = -1;
+	char c;
+
+	/* Mount with no node */
+	TEST(backing_dir = create_backing_dir(mount_dir), backing_dir);
+	TESTEQUAL(mount_fs(mount_dir, backing_dir, 0), 0);
+	TESTEQUAL(sysfs_test_directories(false, false), 0);
+
+	/* Remount with node */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "sysfs_name=1", true),
+		  0);
+	TESTEQUAL(sysfs_test_directories(true, false), 0);
+	TEST(fd = open("/sys/fs/incremental-fs/instances/1/reads_delayed_min",
+		       O_RDONLY | O_CLOEXEC), fd != -1);
+	TESTEQUAL(pread(fd, &c, 1, 0), 1);
+	TESTEQUAL(c, '0');
+	TESTEQUAL(pread(fd, &c, 1, 0), 1);
+	TESTEQUAL(c, '0');
+
+	/* Rename node */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "sysfs_name=2", true),
+		  0);
+	TESTEQUAL(sysfs_test_directories(false, true), 0);
+	TESTEQUAL(pread(fd, &c, 1, 0), -1);
+
+	/* Try mounting another instance with same node name */
+	TEST(mount_dir2 = concat_file_name(backing_dir, "incfs-mount-dir2"),
+	     mount_dir2);
+	rmdir(mount_dir2); /* In case we crashed before */
+	TESTSYSCALL(mkdir(mount_dir2, 0777));
+	TEST(mount_fs_opt(mount_dir2, backing_dir, "sysfs_name=2", false),
+		  -1);
+
+	/* Try mounting another instance then remounting with existing name */
+	TESTEQUAL(mount_fs(mount_dir2, backing_dir, 0), 0);
+	TESTEQUAL(mount_fs_opt(mount_dir2, backing_dir, "sysfs_name=2", true),
+		  -1);
+
+	/* Remount with no node */
+	TESTEQUAL(mount_fs_opt(mount_dir, backing_dir, "", true),
+		  0);
+	TESTEQUAL(sysfs_test_directories(false, false), 0);
+
+	result = TEST_SUCCESS;
+out:
+	umount(mount_dir2);
+	rmdir(mount_dir2);
+	free(mount_dir2);
+	close(fd);
+	umount(mount_dir);
+	free(backing_dir);
+	return result;
+}
+
+static char *setup_mount_dir()
+{
+	struct stat st;
+	char *current_dir = getcwd(NULL, 0);
+	char *mount_dir = concat_file_name(current_dir, "incfs-mount-dir");
+
+	free(current_dir);
+	if (stat(mount_dir, &st) == 0) {
+		if (S_ISDIR(st.st_mode))
+			return mount_dir;
+
+		ksft_print_msg("%s is a file, not a dir.\n", mount_dir);
+		return NULL;
+	}
+
+	if (mkdir(mount_dir, 0777)) {
+		print_error("Can't create mount dir.");
+		return NULL;
+	}
+
+	return mount_dir;
+}
+
+int parse_options(int argc, char *const *argv)
+{
+	signed char c;
+
+	while ((c = getopt(argc, argv, "f:t:v")) != -1)
+		switch (c) {
+		case 'f':
+			options.file = strtol(optarg, NULL, 10);
+			break;
+
+		case 't':
+			options.test = strtol(optarg, NULL, 10);
+			break;
+
+		case 'v':
+			options.verbose = true;
+			break;
+
+		default:
+			return -EINVAL;
+		}
+
+	return 0;
+}
+
+struct test_case {
+	int (*pfunc)(const char *dir);
+	const char *name;
+};
+
+void run_one_test(const char *mount_dir, struct test_case *test_case)
+{
+	ksft_print_msg("Running %s\n", test_case->name);
+	if (test_case->pfunc(mount_dir) == TEST_SUCCESS)
+		ksft_test_result_pass("%s\n", test_case->name);
+	else
+		ksft_test_result_fail("%s\n", test_case->name);
+}
+
+int main(int argc, char *argv[])
+{
+	char *mount_dir = NULL;
+	int i;
+	int fd, count;
+
+	if (parse_options(argc, argv))
+		ksft_exit_fail_msg("Bad options\n");
+
+	// Seed randomness pool for testing on QEMU
+	// NOTE - this abuses the concept of randomness - do *not* ever do this
+	// on a machine for production use - the device will think it has good
+	// randomness when it does not.
+	fd = open("/dev/urandom", O_WRONLY | O_CLOEXEC);
+	count = 4096;
+	for (int i = 0; i < 128; ++i)
+		ioctl(fd, RNDADDTOENTCNT, &count);
+	close(fd);
+
+	ksft_print_header();
+
+	if (geteuid() != 0)
+		ksft_print_msg("Not a root, might fail to mount.\n");
+
+	mount_dir = setup_mount_dir();
+	if (mount_dir == NULL)
+		ksft_exit_fail_msg("Can't create a mount dir\n");
+
+#define MAKE_TEST(test)                                                        \
+	{                                                                      \
+		test, #test                                                    \
+	}
+	struct test_case cases[] = {
+		MAKE_TEST(basic_file_ops_test),
+		MAKE_TEST(cant_touch_index_test),
+		MAKE_TEST(dynamic_files_and_data_test),
+		MAKE_TEST(concurrent_reads_and_writes_test),
+		MAKE_TEST(attribute_test),
+		MAKE_TEST(work_after_remount_test),
+		MAKE_TEST(child_procs_waiting_for_data_test),
+		MAKE_TEST(multiple_providers_test),
+		MAKE_TEST(hash_tree_test),
+		MAKE_TEST(read_log_test),
+		MAKE_TEST(get_blocks_test),
+		MAKE_TEST(get_hash_blocks_test),
+		MAKE_TEST(large_file_test),
+		MAKE_TEST(mapped_file_test),
+		MAKE_TEST(compatibility_test),
+		MAKE_TEST(data_block_count_test),
+		MAKE_TEST(hash_block_count_test),
+		MAKE_TEST(per_uid_read_timeouts_test),
+		MAKE_TEST(inotify_test),
+		MAKE_TEST(verity_test),
+		MAKE_TEST(enable_verity_test),
+		MAKE_TEST(mmap_test),
+		MAKE_TEST(truncate_test),
+		MAKE_TEST(stat_test),
+		MAKE_TEST(sysfs_test),
+		MAKE_TEST(sysfs_rename_test),
+	};
+#undef MAKE_TEST
+
+	if (options.test) {
+		if (options.test <= 0 || options.test > ARRAY_SIZE(cases))
+			ksft_exit_fail_msg("Invalid test\n");
+
+		ksft_set_plan(1);
+		run_one_test(mount_dir, &cases[options.test - 1]);
+	} else {
+		ksft_set_plan(ARRAY_SIZE(cases));
+		for (i = 0; i < ARRAY_SIZE(cases); ++i)
+			run_one_test(mount_dir, &cases[i]);
+	}
+
+	umount2(mount_dir, MNT_FORCE);
+	rmdir(mount_dir);
+	return !ksft_get_fail_cnt() ? ksft_exit_pass() : ksft_exit_fail();
+}
diff --git a/tools/testing/selftests/filesystems/incfs/utils.c b/tools/testing/selftests/filesystems/incfs/utils.c
new file mode 100644
index 0000000..e60b0d3
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.c
@@ -0,0 +1,378 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright 2018 Google LLC
+ */
+#include <dirent.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <poll.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <sys/ioctl.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <openssl/sha.h>
+#include <openssl/md5.h>
+
+#include "utils.h"
+
+#ifndef __S_IFREG
+#define __S_IFREG S_IFREG
+#endif
+
+unsigned int rnd(unsigned int max, unsigned int *seed)
+{
+	return rand_r(seed) * ((uint64_t)max + 1) / RAND_MAX;
+}
+
+int remove_dir(const char *dir)
+{
+	int err = rmdir(dir);
+
+	if (err && errno == ENOTEMPTY) {
+		err = delete_dir_tree(dir);
+		if (err)
+			return err;
+		return 0;
+	}
+
+	if (err && errno != ENOENT)
+		return -errno;
+
+	return 0;
+}
+
+int drop_caches(void)
+{
+	int drop_caches =
+		open("/proc/sys/vm/drop_caches", O_WRONLY | O_CLOEXEC);
+	int i;
+
+	if (drop_caches == -1)
+		return -errno;
+	i = write(drop_caches, "3", 1);
+	close(drop_caches);
+
+	if (i != 1)
+		return -errno;
+
+	return 0;
+}
+
+int mount_fs(const char *mount_dir, const char *backing_dir,
+	     int read_timeout_ms)
+{
+	static const char fs_name[] = INCFS_NAME;
+	char mount_options[512];
+	int result;
+
+	snprintf(mount_options, ARRAY_SIZE(mount_options),
+		 "read_timeout_ms=%u",
+		  read_timeout_ms);
+
+	result = mount(backing_dir, mount_dir, fs_name, 0, mount_options);
+	if (result != 0)
+		perror("Error mounting fs.");
+	return result;
+}
+
+int mount_fs_opt(const char *mount_dir, const char *backing_dir,
+		 const char *opt, bool remount)
+{
+	static const char fs_name[] = INCFS_NAME;
+	int result;
+
+	result = mount(backing_dir, mount_dir, fs_name,
+		       remount ? MS_REMOUNT : 0, opt);
+	if (result != 0)
+		perror("Error mounting fs.");
+	return result;
+}
+
+struct hash_section {
+	uint32_t algorithm;
+	uint8_t log2_blocksize;
+	uint32_t salt_size;
+	/* no salt */
+	uint32_t hash_size;
+	uint8_t hash[SHA256_DIGEST_SIZE];
+} __packed;
+
+struct signature_blob {
+	uint32_t version;
+	uint32_t hash_section_size;
+	struct hash_section hash_section;
+	uint32_t signing_section_size;
+	uint8_t signing_section[];
+} __packed;
+
+size_t format_signature(void **buf, const char *root_hash, const char *add_data)
+{
+	size_t size = sizeof(struct signature_blob) + strlen(add_data) + 1;
+	struct signature_blob *sb = malloc(size);
+
+	*sb = (struct signature_blob){
+		.version = INCFS_SIGNATURE_VERSION,
+		.hash_section_size = sizeof(struct hash_section),
+		.hash_section =
+			(struct hash_section){
+				.algorithm = INCFS_HASH_TREE_SHA256,
+				.log2_blocksize = 12,
+				.salt_size = 0,
+				.hash_size = SHA256_DIGEST_SIZE,
+			},
+		.signing_section_size = sizeof(uint32_t) + strlen(add_data) + 1,
+	};
+
+	memcpy(sb->hash_section.hash, root_hash, SHA256_DIGEST_SIZE);
+	memcpy((char *)sb->signing_section, add_data, strlen(add_data) + 1);
+	*buf = sb;
+	return size;
+}
+
+int crypto_emit_file(int fd, const char *dir, const char *filename,
+		     incfs_uuid_t *id_out, size_t size, const char *root_hash,
+		     const char *add_data)
+{
+	int mode = __S_IFREG | 0555;
+	void *signature;
+	int error = 0;
+
+	struct incfs_new_file_args args = {
+			.size = size,
+			.mode = mode,
+			.file_name = ptr_to_u64(filename),
+			.directory_path = ptr_to_u64(dir),
+			.file_attr = 0,
+			.file_attr_len = 0
+	};
+
+	args.signature_size = format_signature(&signature, root_hash, add_data);
+	args.signature_info = ptr_to_u64(signature);
+
+	md5(filename, strlen(filename), (char *)args.file_id.bytes);
+
+	if (ioctl(fd, INCFS_IOC_CREATE_FILE, &args) != 0) {
+		error = -errno;
+		goto out;
+	}
+
+	*id_out = args.file_id;
+
+out:
+	free(signature);
+	return error;
+}
+
+int emit_file(int fd, const char *dir, const char *filename,
+	      incfs_uuid_t *id_out, size_t size, const char *attr)
+{
+	int mode = __S_IFREG | 0555;
+	struct incfs_new_file_args args = { .size = size,
+					    .mode = mode,
+					    .file_name = ptr_to_u64(filename),
+					    .directory_path = ptr_to_u64(dir),
+					    .signature_info = ptr_to_u64(NULL),
+					    .signature_size = 0,
+					    .file_attr = ptr_to_u64(attr),
+					    .file_attr_len =
+						    attr ? strlen(attr) : 0 };
+
+	md5(filename, strlen(filename), (char *)args.file_id.bytes);
+
+	if (ioctl(fd, INCFS_IOC_CREATE_FILE, &args) != 0)
+		return -errno;
+
+	*id_out = args.file_id;
+	return 0;
+}
+
+int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size)
+{
+	return 0;
+}
+
+int get_file_signature(int fd, unsigned char *buf, int buf_size)
+{
+	struct incfs_get_file_sig_args args = {
+		.file_signature = ptr_to_u64(buf),
+		.file_signature_buf_size = buf_size
+	};
+
+	if (ioctl(fd, INCFS_IOC_READ_FILE_SIGNATURE, &args) == 0)
+		return args.file_signature_len_out;
+	return -errno;
+}
+
+loff_t get_file_size(const char *name)
+{
+	struct stat st;
+
+	if (stat(name, &st) == 0)
+		return st.st_size;
+	return -ENOENT;
+}
+
+int open_commands_file(const char *mount_dir)
+{
+	char cmd_file[255];
+	int cmd_fd;
+
+	snprintf(cmd_file, ARRAY_SIZE(cmd_file),
+			"%s/%s", mount_dir, INCFS_PENDING_READS_FILENAME);
+	cmd_fd = open(cmd_file, O_RDONLY | O_CLOEXEC);
+
+	if (cmd_fd < 0)
+		perror("Can't open commands file");
+	return cmd_fd;
+}
+
+int open_log_file(const char *mount_dir)
+{
+	char file[255];
+	int fd;
+
+	snprintf(file, ARRAY_SIZE(file), "%s/.log", mount_dir);
+	fd = open(file, O_RDWR | O_CLOEXEC);
+	if (fd < 0)
+		perror("Can't open log file");
+	return fd;
+}
+
+int open_blocks_written_file(const char *mount_dir)
+{
+	char file[255];
+	int fd;
+
+	snprintf(file, ARRAY_SIZE(file),
+			"%s/%s", mount_dir, INCFS_BLOCKS_WRITTEN_FILENAME);
+	fd = open(file, O_RDONLY | O_CLOEXEC);
+
+	if (fd < 0)
+		perror("Can't open blocks_written file");
+	return fd;
+}
+
+int wait_for_pending_reads(int fd, int timeout_ms,
+	struct incfs_pending_read_info *prs, int prs_count)
+{
+	ssize_t read_res = 0;
+
+	if (timeout_ms > 0) {
+		int poll_res = 0;
+		struct pollfd pollfd = {
+			.fd = fd,
+			.events = POLLIN
+		};
+
+		poll_res = poll(&pollfd, 1, timeout_ms);
+		if (poll_res < 0)
+			return -errno;
+		if (poll_res == 0)
+			return 0;
+		if (!(pollfd.revents | POLLIN))
+			return 0;
+	}
+
+	read_res = read(fd, prs, prs_count * sizeof(*prs));
+	if (read_res < 0)
+		return -errno;
+
+	return read_res / sizeof(*prs);
+}
+
+int wait_for_pending_reads2(int fd, int timeout_ms,
+	struct incfs_pending_read_info2 *prs, int prs_count)
+{
+	ssize_t read_res = 0;
+
+	if (timeout_ms > 0) {
+		int poll_res = 0;
+		struct pollfd pollfd = {
+			.fd = fd,
+			.events = POLLIN
+		};
+
+		poll_res = poll(&pollfd, 1, timeout_ms);
+		if (poll_res < 0)
+			return -errno;
+		if (poll_res == 0)
+			return 0;
+		if (!(pollfd.revents | POLLIN))
+			return 0;
+	}
+
+	read_res = read(fd, prs, prs_count * sizeof(*prs));
+	if (read_res < 0)
+		return -errno;
+
+	return read_res / sizeof(*prs);
+}
+
+char *concat_file_name(const char *dir, const char *file)
+{
+	char full_name[FILENAME_MAX] = "";
+
+	if (snprintf(full_name, ARRAY_SIZE(full_name), "%s/%s", dir, file) < 0)
+		return NULL;
+	return strdup(full_name);
+}
+
+int delete_dir_tree(const char *dir_path)
+{
+	DIR *dir = NULL;
+	struct dirent *dp;
+	int result = 0;
+
+	dir = opendir(dir_path);
+	if (!dir) {
+		result = -errno;
+		goto out;
+	}
+
+	while ((dp = readdir(dir))) {
+		char *full_path;
+
+		if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
+			continue;
+
+		full_path = concat_file_name(dir_path, dp->d_name);
+		if (dp->d_type == DT_DIR)
+			result = delete_dir_tree(full_path);
+		else
+			result = unlink(full_path);
+		free(full_path);
+		if (result)
+			goto out;
+	}
+
+out:
+	if (dir)
+		closedir(dir);
+	if (!result)
+		rmdir(dir_path);
+	return result;
+}
+
+void sha256(const char *data, size_t dsize, char *hash)
+{
+	SHA256_CTX ctx;
+
+	SHA256_Init(&ctx);
+	SHA256_Update(&ctx, data, dsize);
+	SHA256_Final((unsigned char *)hash, &ctx);
+}
+
+void md5(const char *data, size_t dsize, char *hash)
+{
+	MD5_CTX ctx;
+
+	MD5_Init(&ctx);
+	MD5_Update(&ctx, data, dsize);
+	MD5_Final((unsigned char *)hash, &ctx);
+}
diff --git a/tools/testing/selftests/filesystems/incfs/utils.h b/tools/testing/selftests/filesystems/incfs/utils.h
new file mode 100644
index 0000000..f5ed8dc
--- /dev/null
+++ b/tools/testing/selftests/filesystems/incfs/utils.h
@@ -0,0 +1,69 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright 2019 Google LLC
+ */
+#include <stdbool.h>
+#include <sys/stat.h>
+
+#include <include/uapi/linux/incrementalfs.h>
+
+#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
+
+#define __packed __attribute__((__packed__))
+
+#ifdef __LP64__
+#define ptr_to_u64(p) ((__u64)p)
+#else
+#define ptr_to_u64(p) ((__u64)(__u32)p)
+#endif
+
+#define SHA256_DIGEST_SIZE 32
+#define INCFS_MAX_MTREE_LEVELS 8
+
+unsigned int rnd(unsigned int max, unsigned int *seed);
+
+int remove_dir(const char *dir);
+
+int drop_caches(void);
+
+int mount_fs(const char *mount_dir, const char *backing_dir,
+	     int read_timeout_ms);
+
+int mount_fs_opt(const char *mount_dir, const char *backing_dir,
+		 const char *opt, bool remount);
+
+int get_file_bmap(int cmd_fd, int ino, unsigned char *buf, int buf_size);
+
+int get_file_signature(int fd, unsigned char *buf, int buf_size);
+
+int emit_node(int fd, char *filename, int *ino_out, int parent_ino,
+		size_t size, mode_t mode, char *attr);
+
+int emit_file(int fd, const char *dir, const char *filename,
+	      incfs_uuid_t *id_out, size_t size, const char *attr);
+
+int crypto_emit_file(int fd, const char *dir, const char *filename,
+		     incfs_uuid_t *id_out, size_t size, const char *root_hash,
+		     const char *add_data);
+
+loff_t get_file_size(const char *name);
+
+int open_commands_file(const char *mount_dir);
+
+int open_log_file(const char *mount_dir);
+
+int open_blocks_written_file(const char *mount_dir);
+
+int wait_for_pending_reads(int fd, int timeout_ms,
+	struct incfs_pending_read_info *prs, int prs_count);
+
+int wait_for_pending_reads2(int fd, int timeout_ms,
+	struct incfs_pending_read_info2 *prs, int prs_count);
+
+char *concat_file_name(const char *dir, const char *file);
+
+void sha256(const char *data, size_t dsize, char *hash);
+
+void md5(const char *data, size_t dsize, char *hash);
+
+int delete_dir_tree(const char *path);
diff --git a/tools/testing/selftests/kselftest_module.h b/tools/testing/selftests/kselftest_module.h
index e8eafaf..e2ea41d 100644
--- a/tools/testing/selftests/kselftest_module.h
+++ b/tools/testing/selftests/kselftest_module.h
@@ -11,7 +11,8 @@
 
 #define KSTM_MODULE_GLOBALS()			\
 static unsigned int total_tests __initdata;	\
-static unsigned int failed_tests __initdata
+static unsigned int failed_tests __initdata;	\
+static unsigned int skipped_tests __initdata
 
 #define KSTM_CHECK_ZERO(x) do {						\
 	total_tests++;							\
@@ -21,11 +22,16 @@
 	}								\
 } while (0)
 
-static inline int kstm_report(unsigned int total_tests, unsigned int failed_tests)
+static inline int kstm_report(unsigned int total_tests, unsigned int failed_tests,
+			      unsigned int skipped_tests)
 {
-	if (failed_tests == 0)
-		pr_info("all %u tests passed\n", total_tests);
-	else
+	if (failed_tests == 0) {
+		if (skipped_tests) {
+			pr_info("skipped %u tests\n", skipped_tests);
+			pr_info("remaining %u tests passed\n", total_tests);
+		} else
+			pr_info("all %u tests passed\n", total_tests);
+	} else
 		pr_warn("failed %u out of %u tests\n", failed_tests, total_tests);
 
 	return failed_tests ? -EINVAL : 0;
@@ -36,7 +42,7 @@
 {							\
 	pr_info("loaded.\n");				\
 	selftest();					\
-	return kstm_report(total_tests, failed_tests);	\
+	return kstm_report(total_tests, failed_tests, skipped_tests);	\
 }							\
 static void __exit __module##_exit(void)		\
 {							\
diff --git a/tools/testing/selftests/pstore/pstore_tests b/tools/testing/selftests/pstore/pstore_tests
index 1cef544..2aa9a38 100755
--- a/tools/testing/selftests/pstore/pstore_tests
+++ b/tools/testing/selftests/pstore/pstore_tests
@@ -10,7 +10,7 @@
 . ./common_tests
 
 prlog -n "Checking pstore console is registered ... "
-dmesg | grep -q "console \[pstore"
+dmesg | grep -Eq "console \[(pstore|${backend})"
 show_result $?
 
 prlog -n "Checking /dev/pmsg0 exists ... "
diff --git a/tools/testing/selftests/seccomp/seccomp_benchmark.c b/tools/testing/selftests/seccomp/seccomp_benchmark.c
index 5838c869..fcc8065 100644
--- a/tools/testing/selftests/seccomp/seccomp_benchmark.c
+++ b/tools/testing/selftests/seccomp/seccomp_benchmark.c
@@ -4,12 +4,16 @@
  */
 #define _GNU_SOURCE
 #include <assert.h>
+#include <limits.h>
+#include <stdbool.h>
+#include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
 #include <linux/filter.h>
 #include <linux/seccomp.h>
+#include <sys/param.h>
 #include <sys/prctl.h>
 #include <sys/syscall.h>
 #include <sys/types.h>
@@ -18,9 +22,9 @@
 
 unsigned long long timing(clockid_t clk_id, unsigned long long samples)
 {
-	pid_t pid, ret;
-	unsigned long long i;
 	struct timespec start, finish;
+	unsigned long long i;
+	pid_t pid, ret;
 
 	pid = getpid();
 	assert(clock_gettime(clk_id, &start) == 0);
@@ -31,69 +35,208 @@
 	assert(clock_gettime(clk_id, &finish) == 0);
 
 	i = finish.tv_sec - start.tv_sec;
-	i *= 1000000000;
+	i *= 1000000000ULL;
 	i += finish.tv_nsec - start.tv_nsec;
 
-	printf("%lu.%09lu - %lu.%09lu = %llu\n",
+	printf("%lu.%09lu - %lu.%09lu = %llu (%.1fs)\n",
 		finish.tv_sec, finish.tv_nsec,
 		start.tv_sec, start.tv_nsec,
-		i);
+		i, (double)i / 1000000000.0);
 
 	return i;
 }
 
 unsigned long long calibrate(void)
 {
-	unsigned long long i;
+	struct timespec start, finish;
+	unsigned long long i, samples, step = 9973;
+	pid_t pid, ret;
+	int seconds = 15;
 
-	printf("Calibrating reasonable sample size...\n");
+	printf("Calibrating sample size for %d seconds worth of syscalls ...\n", seconds);
 
-	for (i = 5; ; i++) {
-		unsigned long long samples = 1 << i;
+	samples = 0;
+	pid = getpid();
+	assert(clock_gettime(CLOCK_MONOTONIC, &start) == 0);
+	do {
+		for (i = 0; i < step; i++) {
+			ret = syscall(__NR_getpid);
+			assert(pid == ret);
+		}
+		assert(clock_gettime(CLOCK_MONOTONIC, &finish) == 0);
 
-		/* Find something that takes more than 5 seconds to run. */
-		if (timing(CLOCK_REALTIME, samples) / 1000000000ULL > 5)
-			return samples;
+		samples += step;
+		i = finish.tv_sec - start.tv_sec;
+		i *= 1000000000ULL;
+		i += finish.tv_nsec - start.tv_nsec;
+	} while (i < 1000000000ULL);
+
+	return samples * seconds;
+}
+
+bool approx(int i_one, int i_two)
+{
+	double one = i_one, one_bump = one * 0.01;
+	double two = i_two, two_bump = two * 0.01;
+
+	one_bump = one + MAX(one_bump, 2.0);
+	two_bump = two + MAX(two_bump, 2.0);
+
+	/* Equal to, or within 1% or 2 digits */
+	if (one == two ||
+	    (one > two && one <= two_bump) ||
+	    (two > one && two <= one_bump))
+		return true;
+	return false;
+}
+
+bool le(int i_one, int i_two)
+{
+	if (i_one <= i_two)
+		return true;
+	return false;
+}
+
+long compare(const char *name_one, const char *name_eval, const char *name_two,
+	     unsigned long long one, bool (*eval)(int, int), unsigned long long two)
+{
+	bool good;
+
+	printf("\t%s %s %s (%lld %s %lld): ", name_one, name_eval, name_two,
+	       (long long)one, name_eval, (long long)two);
+	if (one > INT_MAX) {
+		printf("Miscalculation! Measurement went negative: %lld\n", (long long)one);
+		return 1;
 	}
+	if (two > INT_MAX) {
+		printf("Miscalculation! Measurement went negative: %lld\n", (long long)two);
+		return 1;
+	}
+
+	good = eval(one, two);
+	printf("%s\n", good ? "✔️" : "❌");
+
+	return good ? 0 : 1;
 }
 
 int main(int argc, char *argv[])
 {
+	struct sock_filter bitmap_filter[] = {
+		BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, nr)),
+		BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
+	};
+	struct sock_fprog bitmap_prog = {
+		.len = (unsigned short)ARRAY_SIZE(bitmap_filter),
+		.filter = bitmap_filter,
+	};
 	struct sock_filter filter[] = {
+		BPF_STMT(BPF_LD|BPF_W|BPF_ABS, offsetof(struct seccomp_data, args[0])),
 		BPF_STMT(BPF_RET|BPF_K, SECCOMP_RET_ALLOW),
 	};
 	struct sock_fprog prog = {
 		.len = (unsigned short)ARRAY_SIZE(filter),
 		.filter = filter,
 	};
-	long ret;
-	unsigned long long samples;
-	unsigned long long native, filtered;
+
+	long ret, bits;
+	unsigned long long samples, calc;
+	unsigned long long native, filter1, filter2, bitmap1, bitmap2;
+	unsigned long long entry, per_filter1, per_filter2;
+
+	printf("Current BPF sysctl settings:\n");
+	system("sysctl net.core.bpf_jit_enable");
+	system("sysctl net.core.bpf_jit_harden");
 
 	if (argc > 1)
 		samples = strtoull(argv[1], NULL, 0);
 	else
 		samples = calibrate();
 
-	printf("Benchmarking %llu samples...\n", samples);
+	printf("Benchmarking %llu syscalls...\n", samples);
 
+	/* Native call */
 	native = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
 	printf("getpid native: %llu ns\n", native);
 
 	ret = prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
 	assert(ret == 0);
 
+	/* One filter resulting in a bitmap */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
+
+	bitmap1 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 1 filter (bitmap): %llu ns\n", bitmap1);
+
+	/* Second filter resulting in a bitmap */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
+
+	bitmap2 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 2 filters (bitmap): %llu ns\n", bitmap2);
+
+	/* Third filter, can no longer be converted to bitmap */
 	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog);
 	assert(ret == 0);
 
-	filtered = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
-	printf("getpid RET_ALLOW: %llu ns\n", filtered);
+	filter1 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 3 filters (full): %llu ns\n", filter1);
 
-	printf("Estimated seccomp overhead per syscall: %llu ns\n",
-		filtered - native);
+	/* Fourth filter, can not be converted to bitmap because of filter 3 */
+	ret = prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &bitmap_prog);
+	assert(ret == 0);
 
-	if (filtered == native)
-		printf("Trying running again with more samples.\n");
+	filter2 = timing(CLOCK_PROCESS_CPUTIME_ID, samples) / samples;
+	printf("getpid RET_ALLOW 4 filters (full): %llu ns\n", filter2);
 
+	/* Estimations */
+#define ESTIMATE(fmt, var, what)	do {			\
+		var = (what);					\
+		printf("Estimated " fmt ": %llu ns\n", var);	\
+		if (var > INT_MAX)				\
+			goto more_samples;			\
+	} while (0)
+
+	ESTIMATE("total seccomp overhead for 1 bitmapped filter", calc,
+		 bitmap1 - native);
+	ESTIMATE("total seccomp overhead for 2 bitmapped filters", calc,
+		 bitmap2 - native);
+	ESTIMATE("total seccomp overhead for 3 full filters", calc,
+		 filter1 - native);
+	ESTIMATE("total seccomp overhead for 4 full filters", calc,
+		 filter2 - native);
+	ESTIMATE("seccomp entry overhead", entry,
+		 bitmap1 - native - (bitmap2 - bitmap1));
+	ESTIMATE("seccomp per-filter overhead (last 2 diff)", per_filter1,
+		 filter2 - filter1);
+	ESTIMATE("seccomp per-filter overhead (filters / 4)", per_filter2,
+		 (filter2 - native - entry) / 4);
+
+	printf("Expectations:\n");
+	ret |= compare("native", "≤", "1 bitmap", native, le, bitmap1);
+	bits = compare("native", "≤", "1 filter", native, le, filter1);
+	if (bits)
+		goto more_samples;
+
+	ret |= compare("per-filter (last 2 diff)", "≈", "per-filter (filters / 4)",
+			per_filter1, approx, per_filter2);
+
+	bits = compare("1 bitmapped", "≈", "2 bitmapped",
+			bitmap1 - native, approx, bitmap2 - native);
+	if (bits) {
+		printf("Skipping constant action bitmap expectations: they appear unsupported.\n");
+		goto out;
+	}
+
+	ret |= compare("entry", "≈", "1 bitmapped", entry, approx, bitmap1 - native);
+	ret |= compare("entry", "≈", "2 bitmapped", entry, approx, bitmap2 - native);
+	ret |= compare("native + entry + (per filter * 4)", "≈", "4 filters total",
+			entry + (per_filter1 * 4) + native, approx, filter2);
+	if (ret == 0)
+		goto out;
+
+more_samples:
+	printf("Saw unexpected benchmark result. Try running again with more samples?\n");
+out:
 	return 0;
 }
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c
index 19c7351..64d4d6d 100644
--- a/tools/testing/selftests/seccomp/seccomp_bpf.c
+++ b/tools/testing/selftests/seccomp/seccomp_bpf.c
@@ -3501,7 +3501,6 @@
 
 /*
  * TODO:
- * - add microbenchmarks
  * - expand NNP testing
  * - better arch-specific TRACE and TRAP handlers.
  * - endianness checking when appropriate
@@ -3509,7 +3508,6 @@
  * - arch value testing (x86 modes especially)
  * - verify that FILTER_FLAG_LOG filters generate log messages
  * - verify that RET_LOG generates log messages
- * - ...
  */
 
 TEST_HARNESS_MAIN
diff --git a/tools/testing/selftests/seccomp/settings b/tools/testing/selftests/seccomp/settings
new file mode 100644
index 0000000..6091b45
--- /dev/null
+++ b/tools/testing/selftests/seccomp/settings
@@ -0,0 +1 @@
+timeout=120
diff --git a/tools/testing/selftests/vm/.gitignore b/tools/testing/selftests/vm/.gitignore
index 31b3c98..2f02183 100644
--- a/tools/testing/selftests/vm/.gitignore
+++ b/tools/testing/selftests/vm/.gitignore
@@ -5,6 +5,7 @@
 thuge-gen
 compaction_test
 mlock2-tests
+mremap_dontunmap
 on-fault-limit
 transhuge-stress
 userfaultfd
diff --git a/tools/testing/selftests/vm/Makefile b/tools/testing/selftests/vm/Makefile
index 9534dc2..4b2b969 100644
--- a/tools/testing/selftests/vm/Makefile
+++ b/tools/testing/selftests/vm/Makefile
@@ -12,6 +12,7 @@
 TEST_GEN_FILES += map_populate
 TEST_GEN_FILES += mlock-random-test
 TEST_GEN_FILES += mlock2-tests
+TEST_GEN_FILES += mremap_dontunmap
 TEST_GEN_FILES += on-fault-limit
 TEST_GEN_FILES += thuge-gen
 TEST_GEN_FILES += transhuge-stress
diff --git a/tools/testing/selftests/vm/mremap_dontunmap.c b/tools/testing/selftests/vm/mremap_dontunmap.c
new file mode 100644
index 0000000..d32b708
--- /dev/null
+++ b/tools/testing/selftests/vm/mremap_dontunmap.c
@@ -0,0 +1,365 @@
+// SPDX-License-Identifier: GPL-2.0
+
+/*
+ * Tests for mremap w/ MREMAP_DONTUNMAP.
+ *
+ * Copyright 2020, Brian Geffon <bgeffon@google.com>
+ */
+#define _GNU_SOURCE
+#include <sys/mman.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#include "../kselftest.h"
+
+#ifndef MREMAP_DONTUNMAP
+#define MREMAP_DONTUNMAP 4
+#endif
+
+unsigned long page_size;
+char *page_buffer;
+
+static void dump_maps(void)
+{
+	char cmd[32];
+
+	snprintf(cmd, sizeof(cmd), "cat /proc/%d/maps", getpid());
+	system(cmd);
+}
+
+#define BUG_ON(condition, description)					      \
+	do {								      \
+		if (condition) {					      \
+			fprintf(stderr, "[FAIL]\t%s():%d\t%s:%s\n", __func__, \
+				__LINE__, (description), strerror(errno));    \
+			dump_maps();					  \
+			exit(1);					      \
+		} 							      \
+	} while (0)
+
+// Try a simple operation for to "test" for kernel support this prevents
+// reporting tests as failed when it's run on an older kernel.
+static int kernel_support_for_mremap_dontunmap()
+{
+	int ret = 0;
+	unsigned long num_pages = 1;
+	void *source_mapping = mmap(NULL, num_pages * page_size, PROT_NONE,
+				    MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+
+	// This simple remap should only fail if MREMAP_DONTUNMAP isn't
+	// supported.
+	void *dest_mapping =
+	    mremap(source_mapping, num_pages * page_size, num_pages * page_size,
+		   MREMAP_DONTUNMAP | MREMAP_MAYMOVE, 0);
+	if (dest_mapping == MAP_FAILED) {
+		ret = errno;
+	} else {
+		BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1,
+		       "unable to unmap destination mapping");
+	}
+
+	BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+	       "unable to unmap source mapping");
+	return ret;
+}
+
+// This helper will just validate that an entire mapping contains the expected
+// byte.
+static int check_region_contains_byte(void *addr, unsigned long size, char byte)
+{
+	BUG_ON(size & (page_size - 1),
+	       "check_region_contains_byte expects page multiples");
+	BUG_ON((unsigned long)addr & (page_size - 1),
+	       "check_region_contains_byte expects page alignment");
+
+	memset(page_buffer, byte, page_size);
+
+	unsigned long num_pages = size / page_size;
+	unsigned long i;
+
+	// Compare each page checking that it contains our expected byte.
+	for (i = 0; i < num_pages; ++i) {
+		int ret =
+		    memcmp(addr + (i * page_size), page_buffer, page_size);
+		if (ret) {
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+// this test validates that MREMAP_DONTUNMAP moves the pagetables while leaving
+// the source mapping mapped.
+static void mremap_dontunmap_simple()
+{
+	unsigned long num_pages = 5;
+
+	void *source_mapping =
+	    mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+
+	memset(source_mapping, 'a', num_pages * page_size);
+
+	// Try to just move the whole mapping anywhere (not fixed).
+	void *dest_mapping =
+	    mremap(source_mapping, num_pages * page_size, num_pages * page_size,
+		   MREMAP_DONTUNMAP | MREMAP_MAYMOVE, NULL);
+	BUG_ON(dest_mapping == MAP_FAILED, "mremap");
+
+	// Validate that the pages have been moved, we know they were moved if
+	// the dest_mapping contains a's.
+	BUG_ON(check_region_contains_byte
+	       (dest_mapping, num_pages * page_size, 'a') != 0,
+	       "pages did not migrate");
+	BUG_ON(check_region_contains_byte
+	       (source_mapping, num_pages * page_size, 0) != 0,
+	       "source should have no ptes");
+
+	BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1,
+	       "unable to unmap destination mapping");
+	BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+	       "unable to unmap source mapping");
+}
+
+// This test validates that MREMAP_DONTUNMAP on a shared mapping works as expected.
+static void mremap_dontunmap_simple_shmem()
+{
+	unsigned long num_pages = 5;
+
+	int mem_fd = memfd_create("memfd", MFD_CLOEXEC);
+	BUG_ON(mem_fd < 0, "memfd_create");
+
+	BUG_ON(ftruncate(mem_fd, num_pages * page_size) < 0,
+			"ftruncate");
+
+	void *source_mapping =
+	    mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE,
+		 MAP_FILE | MAP_SHARED, mem_fd, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+
+	BUG_ON(close(mem_fd) < 0, "close");
+
+	memset(source_mapping, 'a', num_pages * page_size);
+
+	// Try to just move the whole mapping anywhere (not fixed).
+	void *dest_mapping =
+	    mremap(source_mapping, num_pages * page_size, num_pages * page_size,
+		   MREMAP_DONTUNMAP | MREMAP_MAYMOVE, NULL);
+	if (dest_mapping == MAP_FAILED && errno == EINVAL) {
+		// Old kernel which doesn't support MREMAP_DONTUNMAP on shmem.
+		BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+			"unable to unmap source mapping");
+		return;
+	}
+
+	BUG_ON(dest_mapping == MAP_FAILED, "mremap");
+
+	// Validate that the pages have been moved, we know they were moved if
+	// the dest_mapping contains a's.
+	BUG_ON(check_region_contains_byte
+	       (dest_mapping, num_pages * page_size, 'a') != 0,
+	       "pages did not migrate");
+
+	// Because the region is backed by shmem, we will actually see the same
+	// memory at the source location still.
+	BUG_ON(check_region_contains_byte
+	       (source_mapping, num_pages * page_size, 'a') != 0,
+	       "source should have no ptes");
+
+	BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1,
+	       "unable to unmap destination mapping");
+	BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+	       "unable to unmap source mapping");
+}
+
+// This test validates MREMAP_DONTUNMAP will move page tables to a specific
+// destination using MREMAP_FIXED, also while validating that the source
+// remains intact.
+static void mremap_dontunmap_simple_fixed()
+{
+	unsigned long num_pages = 5;
+
+	// Since we want to guarantee that we can remap to a point, we will
+	// create a mapping up front.
+	void *dest_mapping =
+	    mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(dest_mapping == MAP_FAILED, "mmap");
+	memset(dest_mapping, 'X', num_pages * page_size);
+
+	void *source_mapping =
+	    mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+	memset(source_mapping, 'a', num_pages * page_size);
+
+	void *remapped_mapping =
+	    mremap(source_mapping, num_pages * page_size, num_pages * page_size,
+		   MREMAP_FIXED | MREMAP_DONTUNMAP | MREMAP_MAYMOVE,
+		   dest_mapping);
+	BUG_ON(remapped_mapping == MAP_FAILED, "mremap");
+	BUG_ON(remapped_mapping != dest_mapping,
+	       "mremap should have placed the remapped mapping at dest_mapping");
+
+	// The dest mapping will have been unmap by mremap so we expect the Xs
+	// to be gone and replaced with a's.
+	BUG_ON(check_region_contains_byte
+	       (dest_mapping, num_pages * page_size, 'a') != 0,
+	       "pages did not migrate");
+
+	// And the source mapping will have had its ptes dropped.
+	BUG_ON(check_region_contains_byte
+	       (source_mapping, num_pages * page_size, 0) != 0,
+	       "source should have no ptes");
+
+	BUG_ON(munmap(dest_mapping, num_pages * page_size) == -1,
+	       "unable to unmap destination mapping");
+	BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+	       "unable to unmap source mapping");
+}
+
+// This test validates that we can MREMAP_DONTUNMAP for a portion of an
+// existing mapping.
+static void mremap_dontunmap_partial_mapping()
+{
+	/*
+	 *  source mapping:
+	 *  --------------
+	 *  | aaaaaaaaaa |
+	 *  --------------
+	 *  to become:
+	 *  --------------
+	 *  | aaaaa00000 |
+	 *  --------------
+	 *  With the destination mapping containing 5 pages of As.
+	 *  ---------
+	 *  | aaaaa |
+	 *  ---------
+	 */
+	unsigned long num_pages = 10;
+	void *source_mapping =
+	    mmap(NULL, num_pages * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+	memset(source_mapping, 'a', num_pages * page_size);
+
+	// We will grab the last 5 pages of the source and move them.
+	void *dest_mapping =
+	    mremap(source_mapping + (5 * page_size), 5 * page_size,
+		   5 * page_size,
+		   MREMAP_DONTUNMAP | MREMAP_MAYMOVE, NULL);
+	BUG_ON(dest_mapping == MAP_FAILED, "mremap");
+
+	// We expect the first 5 pages of the source to contain a's and the
+	// final 5 pages to contain zeros.
+	BUG_ON(check_region_contains_byte(source_mapping, 5 * page_size, 'a') !=
+	       0, "first 5 pages of source should have original pages");
+	BUG_ON(check_region_contains_byte
+	       (source_mapping + (5 * page_size), 5 * page_size, 0) != 0,
+	       "final 5 pages of source should have no ptes");
+
+	// Finally we expect the destination to have 5 pages worth of a's.
+	BUG_ON(check_region_contains_byte(dest_mapping, 5 * page_size, 'a') !=
+	       0, "dest mapping should contain ptes from the source");
+
+	BUG_ON(munmap(dest_mapping, 5 * page_size) == -1,
+	       "unable to unmap destination mapping");
+	BUG_ON(munmap(source_mapping, num_pages * page_size) == -1,
+	       "unable to unmap source mapping");
+}
+
+// This test validates that we can remap over only a portion of a mapping.
+static void mremap_dontunmap_partial_mapping_overwrite(void)
+{
+	/*
+	 *  source mapping:
+	 *  ---------
+	 *  |aaaaa|
+	 *  ---------
+	 *  dest mapping initially:
+	 *  -----------
+	 *  |XXXXXXXXXX|
+	 *  ------------
+	 *  Source to become:
+	 *  ---------
+	 *  |00000|
+	 *  ---------
+	 *  With the destination mapping containing 5 pages of As.
+	 *  ------------
+	 *  |aaaaaXXXXX|
+	 *  ------------
+	 */
+	void *source_mapping =
+	    mmap(NULL, 5 * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(source_mapping == MAP_FAILED, "mmap");
+	memset(source_mapping, 'a', 5 * page_size);
+
+	void *dest_mapping =
+	    mmap(NULL, 10 * page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(dest_mapping == MAP_FAILED, "mmap");
+	memset(dest_mapping, 'X', 10 * page_size);
+
+	// We will grab the last 5 pages of the source and move them.
+	void *remapped_mapping =
+	    mremap(source_mapping, 5 * page_size,
+		   5 * page_size,
+		   MREMAP_DONTUNMAP | MREMAP_MAYMOVE | MREMAP_FIXED, dest_mapping);
+	BUG_ON(dest_mapping == MAP_FAILED, "mremap");
+	BUG_ON(dest_mapping != remapped_mapping, "expected to remap to dest_mapping");
+
+	BUG_ON(check_region_contains_byte(source_mapping, 5 * page_size, 0) !=
+	       0, "first 5 pages of source should have no ptes");
+
+	// Finally we expect the destination to have 5 pages worth of a's.
+	BUG_ON(check_region_contains_byte(dest_mapping, 5 * page_size, 'a') != 0,
+			"dest mapping should contain ptes from the source");
+
+	// Finally the last 5 pages shouldn't have been touched.
+	BUG_ON(check_region_contains_byte(dest_mapping + (5 * page_size),
+				5 * page_size, 'X') != 0,
+			"dest mapping should have retained the last 5 pages");
+
+	BUG_ON(munmap(dest_mapping, 10 * page_size) == -1,
+	       "unable to unmap destination mapping");
+	BUG_ON(munmap(source_mapping, 5 * page_size) == -1,
+	       "unable to unmap source mapping");
+}
+
+int main(void)
+{
+	page_size = sysconf(_SC_PAGE_SIZE);
+
+	// test for kernel support for MREMAP_DONTUNMAP skipping the test if
+	// not.
+	if (kernel_support_for_mremap_dontunmap() != 0) {
+		printf("No kernel support for MREMAP_DONTUNMAP\n");
+		return KSFT_SKIP;
+	}
+
+	// Keep a page sized buffer around for when we need it.
+	page_buffer =
+	    mmap(NULL, page_size, PROT_READ | PROT_WRITE,
+		 MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	BUG_ON(page_buffer == MAP_FAILED, "unable to mmap a page.");
+
+	mremap_dontunmap_simple();
+	mremap_dontunmap_simple_shmem();
+	mremap_dontunmap_simple_fixed();
+	mremap_dontunmap_partial_mapping();
+	mremap_dontunmap_partial_mapping_overwrite();
+
+	BUG_ON(munmap(page_buffer, page_size) == -1,
+	       "unable to unmap page buffer");
+
+	printf("OK\n");
+	return 0;
+}
diff --git a/tools/testing/selftests/vm/run_vmtests b/tools/testing/selftests/vm/run_vmtests
index 951c507..d380b95 100755
--- a/tools/testing/selftests/vm/run_vmtests
+++ b/tools/testing/selftests/vm/run_vmtests
@@ -227,4 +227,19 @@
 	exitcode=1
 fi
 
+echo "------------------------------------"
+echo "running MREMAP_DONTUNMAP smoke test"
+echo "------------------------------------"
+./mremap_dontunmap
+ret_val=$?
+
+if [ $ret_val -eq 0 ]; then
+	echo "[PASS]"
+elif [ $ret_val -eq $ksft_skip ]; then
+	 echo "[SKIP]"
+	 exitcode=$ksft_skip
+else
+	echo "[FAIL]"
+	exitcode=1
+fi
 exit $exitcode
diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c
index 9ba7fef..65f98ff 100644
--- a/tools/testing/selftests/vm/userfaultfd.c
+++ b/tools/testing/selftests/vm/userfaultfd.c
@@ -76,16 +76,27 @@
 #define ALARM_INTERVAL_SECS 10
 static volatile bool test_uffdio_copy_eexist = true;
 static volatile bool test_uffdio_zeropage_eexist = true;
+/* Whether to test uffd minor faults */
+static bool test_uffdio_minor = false;
 
 static bool map_shared;
+static int shm_fd;
 static int huge_fd;
 static char *huge_fd_off0;
 static unsigned long long *count_verify;
-static int uffd, uffd_flags, finished, *pipefd;
+static int uffd = -1;
+static int uffd_flags, finished, *pipefd;
 static char *area_src, *area_src_alias, *area_dst, *area_dst_alias;
 static char *zeropage;
 pthread_attr_t attr;
 
+/* Userfaultfd test statistics */
+struct uffd_stats {
+	int cpu;
+	unsigned long missing_faults;
+	unsigned long minor_faults;
+};
+
 /* pthread_mutex_t starts at page offset 0 */
 #define area_mutex(___area, ___nr)					\
 	((pthread_mutex_t *) ((___area) + (___nr)*page_size))
@@ -125,46 +136,82 @@
 	exit(1);
 }
 
-static int anon_release_pages(char *rel_area)
-{
-	int ret = 0;
+#define _err(fmt, ...)						\
+	do {							\
+		int ret = errno;				\
+		fprintf(stderr, "ERROR: " fmt, ##__VA_ARGS__);	\
+		fprintf(stderr, " (errno=%d, line=%d)\n",	\
+			ret, __LINE__);				\
+	} while (0)
 
-	if (madvise(rel_area, nr_pages * page_size, MADV_DONTNEED)) {
-		perror("madvise");
-		ret = 1;
+#define err(fmt, ...)				\
+	do {					\
+		_err(fmt, ##__VA_ARGS__);	\
+		exit(1);			\
+	} while (0)
+
+static void uffd_stats_reset(struct uffd_stats *uffd_stats,
+			     unsigned long n_cpus)
+{
+	int i;
+
+	for (i = 0; i < n_cpus; i++) {
+		uffd_stats[i].cpu = i;
+		uffd_stats[i].missing_faults = 0;
+		uffd_stats[i].minor_faults = 0;
+	}
+}
+
+static void uffd_stats_report(struct uffd_stats *stats, int n_cpus)
+{
+	int i;
+	unsigned long long miss_total = 0, minor_total = 0;
+
+	for (i = 0; i < n_cpus; i++) {
+		miss_total += stats[i].missing_faults;
+		minor_total += stats[i].minor_faults;
 	}
 
-	return ret;
+	printf("userfaults: ");
+	if (miss_total) {
+		printf("%llu missing (", miss_total);
+		for (i = 0; i < n_cpus; i++)
+			printf("%lu+", stats[i].missing_faults);
+		printf("\b) ");
+	}
+	if (minor_total) {
+		printf("%llu minor (", minor_total);
+		for (i = 0; i < n_cpus; i++)
+			printf("%lu+", stats[i].minor_faults);
+		printf("\b)");
+	}
+	printf("\n");
+}
+
+static void anon_release_pages(char *rel_area)
+{
+	if (madvise(rel_area, nr_pages * page_size, MADV_DONTNEED))
+		err("madvise(MADV_DONTNEED) failed");
 }
 
 static void anon_allocate_area(void **alloc_area)
 {
 	*alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,
 			   MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
-	if (*alloc_area == MAP_FAILED) {
-		fprintf(stderr, "mmap of anonymous memory failed");
-		*alloc_area = NULL;
-	}
+	if (*alloc_area == MAP_FAILED)
+		err("posix_memalign() failed");
 }
 
 static void noop_alias_mapping(__u64 *start, size_t len, unsigned long offset)
 {
 }
 
-/* HugeTLB memory */
-static int hugetlb_release_pages(char *rel_area)
+static void hugetlb_release_pages(char *rel_area)
 {
-	int ret = 0;
-
 	if (fallocate(huge_fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE,
-				rel_area == huge_fd_off0 ? 0 :
-				nr_pages * page_size,
-				nr_pages * page_size)) {
-		perror("fallocate");
-		ret = 1;
-	}
-
-	return ret;
+		      rel_area == huge_fd_off0 ? 0 : nr_pages * page_size,
+		      nr_pages * page_size))
+		err("fallocate() failed");
 }
 
 
@@ -177,22 +224,16 @@
 			   MAP_HUGETLB,
 			   huge_fd, *alloc_area == area_src ? 0 :
 			   nr_pages * page_size);
-	if (*alloc_area == MAP_FAILED) {
-		fprintf(stderr, "mmap of hugetlbfs file failed\n");
-		*alloc_area = NULL;
-	}
+	if (*alloc_area == MAP_FAILED)
+		err("mmap of hugetlbfs file failed");
 
 	if (map_shared) {
 		area_alias = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,
 				  MAP_SHARED | MAP_HUGETLB,
 				  huge_fd, *alloc_area == area_src ? 0 :
 				  nr_pages * page_size);
-		if (area_alias == MAP_FAILED) {
-			if (munmap(*alloc_area, nr_pages * page_size) < 0)
-				perror("hugetlb munmap"), exit(1);
-			*alloc_area = NULL;
-			return;
-		}
+		if (area_alias == MAP_FAILED)
+			err("mmap of hugetlb file alias failed");
 	}
 	if (*alloc_area == area_src) {
 		huge_fd_off0 = *alloc_area;
@@ -217,33 +258,43 @@
 	*start = (unsigned long) area_dst_alias + offset;
 }
 
-/* Shared memory */
-static int shmem_release_pages(char *rel_area)
+static void shmem_release_pages(char *rel_area)
 {
-	int ret = 0;
-
-	if (madvise(rel_area, nr_pages * page_size, MADV_REMOVE)) {
-		perror("madvise");
-		ret = 1;
-	}
-
-	return ret;
+	if (madvise(rel_area, nr_pages * page_size, MADV_REMOVE))
+		err("madvise(MADV_REMOVE) failed");
 }
 
 static void shmem_allocate_area(void **alloc_area)
 {
+	void *area_alias = NULL;
+	bool is_src = alloc_area == (void **)&area_src;
+	unsigned long offset = is_src ? 0 : nr_pages * page_size;
+
 	*alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,
-			   MAP_ANONYMOUS | MAP_SHARED, -1, 0);
-	if (*alloc_area == MAP_FAILED) {
-		fprintf(stderr, "shared memory mmap failed\n");
-		*alloc_area = NULL;
-	}
+			   MAP_SHARED, shm_fd, offset);
+	if (*alloc_area == MAP_FAILED)
+		err("mmap of memfd failed");
+
+	area_alias = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE,
+			  MAP_SHARED, shm_fd, offset);
+	if (area_alias == MAP_FAILED)
+		err("mmap of memfd alias failed");
+
+	if (is_src)
+		area_src_alias = area_alias;
+	else
+		area_dst_alias = area_alias;
+}
+
+static void shmem_alias_mapping(__u64 *start, size_t len, unsigned long offset)
+{
+	*start = (unsigned long)area_dst_alias + offset;
 }
 
 struct uffd_test_ops {
 	unsigned long expected_ioctls;
 	void (*allocate_area)(void **alloc_area);
-	int (*release_pages)(char *rel_area);
+	void (*release_pages)(char *rel_area);
 	void (*alias_mapping)(__u64 *start, size_t len, unsigned long offset);
 };
 
@@ -262,11 +313,11 @@
 	.expected_ioctls = ANON_EXPECTED_IOCTLS,
 	.allocate_area	= shmem_allocate_area,
 	.release_pages	= shmem_release_pages,
-	.alias_mapping = noop_alias_mapping,
+	.alias_mapping = shmem_alias_mapping,
 };
 
 static struct uffd_test_ops hugetlb_uffd_test_ops = {
-	.expected_ioctls = UFFD_API_RANGE_IOCTLS_BASIC,
+	.expected_ioctls = UFFD_API_RANGE_IOCTLS_BASIC & ~(1 << _UFFDIO_CONTINUE),
 	.allocate_area	= hugetlb_allocate_area,
 	.release_pages	= hugetlb_release_pages,
 	.alias_mapping = hugetlb_alias_mapping,
@@ -274,6 +325,111 @@
 
 static struct uffd_test_ops *uffd_test_ops;
 
+static void userfaultfd_open(uint64_t *features)
+{
+	struct uffdio_api uffdio_api;
+
+	uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK | UFFD_USER_MODE_ONLY);
+	if (uffd < 0)
+		err("userfaultfd syscall not available in this kernel");
+	uffd_flags = fcntl(uffd, F_GETFD, NULL);
+
+	uffdio_api.api = UFFD_API;
+	uffdio_api.features = *features;
+	if (ioctl(uffd, UFFDIO_API, &uffdio_api))
+		err("UFFDIO_API failed.\nPlease make sure to "
+		    "run with either root or ptrace capability.");
+	if (uffdio_api.api != UFFD_API)
+		err("UFFDIO_API error: %" PRIu64, (uint64_t)uffdio_api.api);
+
+	*features = uffdio_api.features;
+}
+
+static inline void munmap_area(void **area)
+{
+	if (*area)
+		if (munmap(*area, nr_pages * page_size))
+			err("munmap");
+
+	*area = NULL;
+}
+
+static void uffd_test_ctx_clear(void)
+{
+	size_t i;
+
+	if (pipefd) {
+		for (i = 0; i < nr_cpus * 2; ++i) {
+			if (close(pipefd[i]))
+				err("close pipefd");
+		}
+		free(pipefd);
+		pipefd = NULL;
+	}
+
+	if (count_verify) {
+		free(count_verify);
+		count_verify = NULL;
+	}
+
+	if (uffd != -1) {
+		if (close(uffd))
+			err("close uffd");
+		uffd = -1;
+	}
+
+	huge_fd_off0 = NULL;
+	munmap_area((void **)&area_src);
+	munmap_area((void **)&area_src_alias);
+	munmap_area((void **)&area_dst);
+	munmap_area((void **)&area_dst_alias);
+}
+
+static void uffd_test_ctx_init_ext(uint64_t *features)
+{
+	unsigned long nr, cpu;
+
+	uffd_test_ctx_clear();
+
+	uffd_test_ops->allocate_area((void **)&area_src);
+	uffd_test_ops->allocate_area((void **)&area_dst);
+
+	uffd_test_ops->release_pages(area_src);
+	uffd_test_ops->release_pages(area_dst);
+
+	userfaultfd_open(features);
+
+	count_verify = malloc(nr_pages * sizeof(unsigned long long));
+	if (!count_verify)
+		err("count_verify");
+
+	for (nr = 0; nr < nr_pages; nr++) {
+		*area_mutex(area_src, nr) =
+			(pthread_mutex_t)PTHREAD_MUTEX_INITIALIZER;
+		count_verify[nr] = *area_count(area_src, nr) = 1;
+		/*
+		 * In the transition between 255 to 256, powerpc will
+		 * read out of order in my_bcmp and see both bytes as
+		 * zero, so leave a placeholder below always non-zero
+		 * after the count, to avoid my_bcmp to trigger false
+		 * positives.
+		 */
+		*(area_count(area_src, nr) + 1) = 1;
+	}
+
+	pipefd = malloc(sizeof(int) * nr_cpus * 2);
+	if (!pipefd)
+		err("pipefd");
+	for (cpu = 0; cpu < nr_cpus; cpu++)
+		if (pipe2(&pipefd[cpu * 2], O_CLOEXEC | O_NONBLOCK))
+			err("pipe");
+}
+
+static inline void uffd_test_ctx_init(uint64_t features)
+{
+	uffd_test_ctx_init_ext(&features);
+}
+
 static int my_bcmp(char *str1, char *str2, size_t n)
 {
 	unsigned long i;
@@ -283,6 +439,31 @@
 	return 0;
 }
 
+static void continue_range(int ufd, __u64 start, __u64 len)
+{
+	struct uffdio_continue req;
+	int ret;
+
+	req.range.start = start;
+	req.range.len = len;
+	req.mode = 0;
+
+	if (ioctl(ufd, UFFDIO_CONTINUE, &req))
+		err("UFFDIO_CONTINUE failed for address 0x%" PRIx64,
+		    (uint64_t)start);
+
+	/*
+	 * Error handling within the kernel for continue is subtly different
+	 * from copy or zeropage, so it may be a source of bugs. Trigger an
+	 * error (-EEXIST) on purpose, to verify doing so doesn't cause a BUG.
+	 */
+	req.mapped = 0;
+	ret = ioctl(ufd, UFFDIO_CONTINUE, &req);
+	if (ret >= 0 || req.mapped != -EEXIST)
+		err("failed to exercise UFFDIO_CONTINUE error handling, ret=%d, mapped=%" PRId64,
+		    ret, (int64_t) req.mapped);
+}
+
 static void *locking_thread(void *arg)
 {
 	unsigned long cpu = (unsigned long) arg;
@@ -292,7 +473,6 @@
 	unsigned long long count;
 	char randstate[64];
 	unsigned int seed;
-	time_t start;
 
 	if (bounces & BOUNCE_RANDOM) {
 		seed = (unsigned int) time(NULL) - bounces;
@@ -301,7 +481,7 @@
 		bzero(&rand, sizeof(rand));
 		bzero(&randstate, sizeof(randstate));
 		if (initstate_r(seed, randstate, sizeof(randstate), &rand))
-			fprintf(stderr, "srandom_r error\n"), exit(1);
+			err("initstate_r failed");
 	} else {
 		page_nr = -bounces;
 		if (!(bounces & BOUNCE_RACINGFAULTS))
@@ -311,84 +491,25 @@
 	while (!finished) {
 		if (bounces & BOUNCE_RANDOM) {
 			if (random_r(&rand, &rand_nr))
-				fprintf(stderr, "random_r 1 error\n"), exit(1);
+				err("random_r failed");
 			page_nr = rand_nr;
 			if (sizeof(page_nr) > sizeof(rand_nr)) {
 				if (random_r(&rand, &rand_nr))
-					fprintf(stderr, "random_r 2 error\n"), exit(1);
+					err("random_r failed");
 				page_nr |= (((unsigned long) rand_nr) << 16) <<
 					   16;
 			}
 		} else
 			page_nr += 1;
 		page_nr %= nr_pages;
-
-		start = time(NULL);
-		if (bounces & BOUNCE_VERIFY) {
-			count = *area_count(area_dst, page_nr);
-			if (!count)
-				fprintf(stderr,
-					"page_nr %lu wrong count %Lu %Lu\n",
-					page_nr, count,
-					count_verify[page_nr]), exit(1);
-
-
-			/*
-			 * We can't use bcmp (or memcmp) because that
-			 * returns 0 erroneously if the memory is
-			 * changing under it (even if the end of the
-			 * page is never changing and always
-			 * different).
-			 */
-#if 1
-			if (!my_bcmp(area_dst + page_nr * page_size, zeropage,
-				     page_size))
-				fprintf(stderr,
-					"my_bcmp page_nr %lu wrong count %Lu %Lu\n",
-					page_nr, count,
-					count_verify[page_nr]), exit(1);
-#else
-			unsigned long loops;
-
-			loops = 0;
-			/* uncomment the below line to test with mutex */
-			/* pthread_mutex_lock(area_mutex(area_dst, page_nr)); */
-			while (!bcmp(area_dst + page_nr * page_size, zeropage,
-				     page_size)) {
-				loops += 1;
-				if (loops > 10)
-					break;
-			}
-			/* uncomment below line to test with mutex */
-			/* pthread_mutex_unlock(area_mutex(area_dst, page_nr)); */
-			if (loops) {
-				fprintf(stderr,
-					"page_nr %lu all zero thread %lu %p %lu\n",
-					page_nr, cpu, area_dst + page_nr * page_size,
-					loops);
-				if (loops > 10)
-					exit(1);
-			}
-#endif
-		}
-
 		pthread_mutex_lock(area_mutex(area_dst, page_nr));
 		count = *area_count(area_dst, page_nr);
-		if (count != count_verify[page_nr]) {
-			fprintf(stderr,
-				"page_nr %lu memory corruption %Lu %Lu\n",
-				page_nr, count,
-				count_verify[page_nr]), exit(1);
-		}
+		if (count != count_verify[page_nr])
+			err("page_nr %lu memory corruption %llu %llu",
+			    page_nr, count, count_verify[page_nr]);
 		count++;
 		*area_count(area_dst, page_nr) = count_verify[page_nr] = count;
 		pthread_mutex_unlock(area_mutex(area_dst, page_nr));
-
-		if (time(NULL) - start > 1)
-			fprintf(stderr,
-				"userfault too slow %ld "
-				"possible false positive with overcommit\n",
-				time(NULL) - start);
 	}
 
 	return NULL;
@@ -403,11 +524,11 @@
 	if (ioctl(ufd, UFFDIO_COPY, uffdio_copy)) {
 		/* real retval in ufdio_copy.copy */
 		if (uffdio_copy->copy != -EEXIST)
-			fprintf(stderr, "UFFDIO_COPY retry error %Ld\n",
-				uffdio_copy->copy), exit(1);
+			err("UFFDIO_COPY retry error: %"PRId64,
+			    (int64_t)uffdio_copy->copy);
 	} else {
-		fprintf(stderr,	"UFFDIO_COPY retry unexpected %Ld\n",
-			uffdio_copy->copy), exit(1);
+		err("UFFDIO_COPY retry unexpected: %"PRId64,
+		    (int64_t)uffdio_copy->copy);
 	}
 }
 
@@ -416,8 +537,7 @@
 	struct uffdio_copy uffdio_copy;
 
 	if (offset >= nr_pages * page_size)
-		fprintf(stderr, "unexpected offset %lu\n",
-			offset), exit(1);
+		err("unexpected offset %lu\n", offset);
 	uffdio_copy.dst = (unsigned long) area_dst + offset;
 	uffdio_copy.src = (unsigned long) area_src + offset;
 	uffdio_copy.len = page_size;
@@ -426,11 +546,10 @@
 	if (ioctl(ufd, UFFDIO_COPY, &uffdio_copy)) {
 		/* real retval in ufdio_copy.copy */
 		if (uffdio_copy.copy != -EEXIST)
-			fprintf(stderr, "UFFDIO_COPY error %Ld\n",
-				uffdio_copy.copy), exit(1);
+			err("UFFDIO_COPY error: %"PRId64,
+			    (int64_t)uffdio_copy.copy);
 	} else if (uffdio_copy.copy != page_size) {
-		fprintf(stderr, "UFFDIO_COPY unexpected copy %Ld\n",
-			uffdio_copy.copy), exit(1);
+		err("UFFDIO_COPY error: %"PRId64, (int64_t)uffdio_copy.copy);
 	} else {
 		if (test_uffdio_copy_eexist && retry) {
 			test_uffdio_copy_eexist = false;
@@ -459,44 +578,68 @@
 		if (ret < 0) {
 			if (errno == EAGAIN)
 				return 1;
-			else
-				perror("blocking read error"), exit(1);
+			err("blocking read error");
 		} else {
-			fprintf(stderr, "short read\n"), exit(1);
+			err("short read");
 		}
 	}
 
 	return 0;
 }
 
-/* Return 1 if page fault handled by us; otherwise 0 */
-static int uffd_handle_page_fault(struct uffd_msg *msg)
+static void uffd_handle_page_fault(struct uffd_msg *msg,
+				   struct uffd_stats *stats)
 {
 	unsigned long offset;
 
 	if (msg->event != UFFD_EVENT_PAGEFAULT)
-		fprintf(stderr, "unexpected msg event %u\n",
-			msg->event), exit(1);
+		err("unexpected msg event %u", msg->event);
 
-	if (bounces & BOUNCE_VERIFY &&
-	    msg->arg.pagefault.flags & UFFD_PAGEFAULT_FLAG_WRITE)
-		fprintf(stderr, "unexpected write fault\n"), exit(1);
+	if (msg->arg.pagefault.flags & UFFD_PAGEFAULT_FLAG_MINOR) {
+		uint8_t *area;
+		int b;
 
-	offset = (char *)(unsigned long)msg->arg.pagefault.address - area_dst;
-	offset &= ~(page_size-1);
+		/*
+		 * Minor page faults
+		 *
+		 * To prove we can modify the original range for testing
+		 * purposes, we're going to bit flip this range before
+		 * continuing.
+		 *
+		 * Note that this requires all minor page fault tests operate on
+		 * area_dst (non-UFFD-registered) and area_dst_alias
+		 * (UFFD-registered).
+		 */
 
-	return copy_page(uffd, offset);
+		area = (uint8_t *)(area_dst +
+				   ((char *)msg->arg.pagefault.address -
+				    area_dst_alias));
+		for (b = 0; b < page_size; ++b)
+			area[b] = ~area[b];
+		continue_range(uffd, msg->arg.pagefault.address, page_size);
+		stats->minor_faults++;
+	} else {
+		/* Missing page faults */
+		if (msg->arg.pagefault.flags & UFFD_PAGEFAULT_FLAG_WRITE)
+			err("unexpected write fault");
+
+		offset = (char *)(unsigned long)msg->arg.pagefault.address - area_dst;
+		offset &= ~(page_size-1);
+
+		if (copy_page(uffd, offset))
+			stats->missing_faults++;
+	}
 }
 
 static void *uffd_poll_thread(void *arg)
 {
-	unsigned long cpu = (unsigned long) arg;
+	struct uffd_stats *stats = (struct uffd_stats *)arg;
+	unsigned long cpu = stats->cpu;
 	struct pollfd pollfd[2];
 	struct uffd_msg msg;
 	struct uffdio_register uffd_reg;
 	int ret;
 	char tmp_chr;
-	unsigned long userfaults = 0;
 
 	pollfd[0].fd = uffd;
 	pollfd[0].events = POLLIN;
@@ -505,28 +648,23 @@
 
 	for (;;) {
 		ret = poll(pollfd, 2, -1);
-		if (!ret)
-			fprintf(stderr, "poll error %d\n", ret), exit(1);
-		if (ret < 0)
-			perror("poll"), exit(1);
+		if (ret <= 0)
+			err("poll error: %d", ret);
 		if (pollfd[1].revents & POLLIN) {
 			if (read(pollfd[1].fd, &tmp_chr, 1) != 1)
-				fprintf(stderr, "read pipefd error\n"),
-					exit(1);
+				err("read pipefd error");
 			break;
 		}
 		if (!(pollfd[0].revents & POLLIN))
-			fprintf(stderr, "pollfd[0].revents %d\n",
-				pollfd[0].revents), exit(1);
+			err("pollfd[0].revents %d", pollfd[0].revents);
 		if (uffd_read_msg(uffd, &msg))
 			continue;
 		switch (msg.event) {
 		default:
-			fprintf(stderr, "unexpected msg event %u\n",
-				msg.event), exit(1);
+			err("unexpected msg event %u\n", msg.event);
 			break;
 		case UFFD_EVENT_PAGEFAULT:
-			userfaults += uffd_handle_page_fault(&msg);
+			uffd_handle_page_fault(&msg, stats);
 			break;
 		case UFFD_EVENT_FORK:
 			close(uffd);
@@ -538,35 +676,34 @@
 			uffd_reg.range.len = msg.arg.remove.end -
 				msg.arg.remove.start;
 			if (ioctl(uffd, UFFDIO_UNREGISTER, &uffd_reg.range))
-				fprintf(stderr, "remove failure\n"), exit(1);
+				err("remove failure");
 			break;
 		case UFFD_EVENT_REMAP:
 			area_dst = (char *)(unsigned long)msg.arg.remap.to;
 			break;
 		}
 	}
-	return (void *)userfaults;
+
+	return NULL;
 }
 
 pthread_mutex_t uffd_read_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void *uffd_read_thread(void *arg)
 {
-	unsigned long *this_cpu_userfaults;
+	struct uffd_stats *stats = (struct uffd_stats *)arg;
 	struct uffd_msg msg;
 
-	this_cpu_userfaults = (unsigned long *) arg;
-	*this_cpu_userfaults = 0;
-
 	pthread_mutex_unlock(&uffd_read_mutex);
 	/* from here cancellation is ok */
 
 	for (;;) {
 		if (uffd_read_msg(uffd, &msg))
 			continue;
-		(*this_cpu_userfaults) += uffd_handle_page_fault(&msg);
+		uffd_handle_page_fault(&msg, stats);
 	}
-	return (void *)NULL;
+
+	return NULL;
 }
 
 static void *background_thread(void *arg)
@@ -582,13 +719,12 @@
 	return NULL;
 }
 
-static int stress(unsigned long *userfaults)
+static int stress(struct uffd_stats *uffd_stats)
 {
 	unsigned long cpu;
 	pthread_t locking_threads[nr_cpus];
 	pthread_t uffd_threads[nr_cpus];
 	pthread_t background_threads[nr_cpus];
-	void **_userfaults = (void **) userfaults;
 
 	finished = 0;
 	for (cpu = 0; cpu < nr_cpus; cpu++) {
@@ -597,12 +733,13 @@
 			return 1;
 		if (bounces & BOUNCE_POLL) {
 			if (pthread_create(&uffd_threads[cpu], &attr,
-					   uffd_poll_thread, (void *)cpu))
+					   uffd_poll_thread,
+					   (void *)&uffd_stats[cpu]))
 				return 1;
 		} else {
 			if (pthread_create(&uffd_threads[cpu], &attr,
 					   uffd_read_thread,
-					   &_userfaults[cpu]))
+					   (void *)&uffd_stats[cpu]))
 				return 1;
 			pthread_mutex_lock(&uffd_read_mutex);
 		}
@@ -623,9 +760,7 @@
 	 * UFFDIO_COPY without writing zero pages into area_dst
 	 * because the background threads already completed).
 	 */
-	if (uffd_test_ops->release_pages(area_src))
-		return 1;
-
+	uffd_test_ops->release_pages(area_src);
 
 	finished = 1;
 	for (cpu = 0; cpu < nr_cpus; cpu++)
@@ -635,11 +770,10 @@
 	for (cpu = 0; cpu < nr_cpus; cpu++) {
 		char c;
 		if (bounces & BOUNCE_POLL) {
-			if (write(pipefd[cpu*2+1], &c, 1) != 1) {
-				fprintf(stderr, "pipefd write error\n");
-				return 1;
-			}
-			if (pthread_join(uffd_threads[cpu], &_userfaults[cpu]))
+			if (write(pipefd[cpu*2+1], &c, 1) != 1)
+				err("pipefd write error");
+			if (pthread_join(uffd_threads[cpu],
+					 (void *)&uffd_stats[cpu]))
 				return 1;
 		} else {
 			if (pthread_cancel(uffd_threads[cpu]))
@@ -652,32 +786,6 @@
 	return 0;
 }
 
-static int userfaultfd_open(int features)
-{
-	struct uffdio_api uffdio_api;
-
-	uffd = syscall(__NR_userfaultfd, O_CLOEXEC | O_NONBLOCK);
-	if (uffd < 0) {
-		fprintf(stderr,
-			"userfaultfd syscall not available in this kernel\n");
-		return 1;
-	}
-	uffd_flags = fcntl(uffd, F_GETFD, NULL);
-
-	uffdio_api.api = UFFD_API;
-	uffdio_api.features = features;
-	if (ioctl(uffd, UFFDIO_API, &uffdio_api)) {
-		fprintf(stderr, "UFFDIO_API\n");
-		return 1;
-	}
-	if (uffdio_api.api != UFFD_API) {
-		fprintf(stderr, "UFFDIO_API error %Lu\n", uffdio_api.api);
-		return 1;
-	}
-
-	return 0;
-}
-
 sigjmp_buf jbuf, *sigbuf;
 
 static void sighndl(int sig, siginfo_t *siginfo, void *ptr)
@@ -729,20 +837,16 @@
 		memset(&act, 0, sizeof(act));
 		act.sa_sigaction = sighndl;
 		act.sa_flags = SA_SIGINFO;
-		if (sigaction(SIGBUS, &act, 0)) {
-			perror("sigaction");
-			return 1;
-		}
+		if (sigaction(SIGBUS, &act, 0))
+			err("sigaction");
 		lastnr = (unsigned long)-1;
 	}
 
 	for (nr = 0; nr < split_nr_pages; nr++) {
 		if (signal_test) {
 			if (sigsetjmp(*sigbuf, 1) != 0) {
-				if (nr == lastnr) {
-					fprintf(stderr, "Signal repeated\n");
-					return 1;
-				}
+				if (nr == lastnr)
+					err("Signal repeated");
 
 				lastnr = nr;
 				if (signal_test == 1) {
@@ -756,12 +860,9 @@
 		}
 
 		count = *area_count(area_dst, nr);
-		if (count != count_verify[nr]) {
-			fprintf(stderr,
-				"nr %lu memory corruption %Lu %Lu\n",
-				nr, count,
-				count_verify[nr]), exit(1);
-		}
+		if (count != count_verify[nr])
+			err("nr %lu memory corruption %llu %llu\n",
+			    nr, count, count_verify[nr]);
 	}
 
 	if (signal_test)
@@ -773,25 +874,23 @@
 	area_dst = mremap(area_dst, nr_pages * page_size,  nr_pages * page_size,
 			  MREMAP_MAYMOVE | MREMAP_FIXED, area_src);
 	if (area_dst == MAP_FAILED)
-		perror("mremap"), exit(1);
+		err("mremap");
+	/* Reset area_src since we just clobbered it */
+	area_src = NULL;
 
 	for (; nr < nr_pages; nr++) {
 		count = *area_count(area_dst, nr);
 		if (count != count_verify[nr]) {
-			fprintf(stderr,
-				"nr %lu memory corruption %Lu %Lu\n",
-				nr, count,
-				count_verify[nr]), exit(1);
+			err("nr %lu memory corruption %llu %llu\n",
+			    nr, count, count_verify[nr]);
 		}
 	}
 
-	if (uffd_test_ops->release_pages(area_dst))
-		return 1;
+	uffd_test_ops->release_pages(area_dst);
 
-	for (nr = 0; nr < nr_pages; nr++) {
+	for (nr = 0; nr < nr_pages; nr++)
 		if (my_bcmp(area_dst + nr * page_size, zeropage, page_size))
-			fprintf(stderr, "nr %lu is not zero\n", nr), exit(1);
-	}
+			err("nr %lu is not zero", nr);
 
 	return 0;
 }
@@ -805,11 +904,11 @@
 				     offset);
 	if (ioctl(ufd, UFFDIO_ZEROPAGE, uffdio_zeropage)) {
 		if (uffdio_zeropage->zeropage != -EEXIST)
-			fprintf(stderr, "UFFDIO_ZEROPAGE retry error %Ld\n",
-				uffdio_zeropage->zeropage), exit(1);
+			err("UFFDIO_ZEROPAGE error: %"PRId64,
+			    (int64_t)uffdio_zeropage->zeropage);
 	} else {
-		fprintf(stderr, "UFFDIO_ZEROPAGE retry unexpected %Ld\n",
-			uffdio_zeropage->zeropage), exit(1);
+		err("UFFDIO_ZEROPAGE error: %"PRId64,
+		    (int64_t)uffdio_zeropage->zeropage);
 	}
 }
 
@@ -818,35 +917,26 @@
 	struct uffdio_zeropage uffdio_zeropage;
 	int ret;
 	unsigned long has_zeropage;
+	__s64 res;
 
 	has_zeropage = uffd_test_ops->expected_ioctls & (1 << _UFFDIO_ZEROPAGE);
 
 	if (offset >= nr_pages * page_size)
-		fprintf(stderr, "unexpected offset %lu\n",
-			offset), exit(1);
+		err("unexpected offset %lu", offset);
 	uffdio_zeropage.range.start = (unsigned long) area_dst + offset;
 	uffdio_zeropage.range.len = page_size;
 	uffdio_zeropage.mode = 0;
 	ret = ioctl(ufd, UFFDIO_ZEROPAGE, &uffdio_zeropage);
+	res = uffdio_zeropage.zeropage;
 	if (ret) {
 		/* real retval in ufdio_zeropage.zeropage */
-		if (has_zeropage) {
-			if (uffdio_zeropage.zeropage == -EEXIST)
-				fprintf(stderr, "UFFDIO_ZEROPAGE -EEXIST\n"),
-					exit(1);
-			else
-				fprintf(stderr, "UFFDIO_ZEROPAGE error %Ld\n",
-					uffdio_zeropage.zeropage), exit(1);
-		} else {
-			if (uffdio_zeropage.zeropage != -EINVAL)
-				fprintf(stderr,
-					"UFFDIO_ZEROPAGE not -EINVAL %Ld\n",
-					uffdio_zeropage.zeropage), exit(1);
-		}
+		if (has_zeropage)
+			err("UFFDIO_ZEROPAGE error: %"PRId64, (int64_t)res);
+		else if (res != -EINVAL)
+			err("UFFDIO_ZEROPAGE not -EINVAL");
 	} else if (has_zeropage) {
-		if (uffdio_zeropage.zeropage != page_size) {
-			fprintf(stderr, "UFFDIO_ZEROPAGE unexpected %Ld\n",
-				uffdio_zeropage.zeropage), exit(1);
+		if (res != page_size) {
+			err("UFFDIO_ZEROPAGE unexpected size");
 		} else {
 			if (test_uffdio_zeropage_eexist && retry) {
 				test_uffdio_zeropage_eexist = false;
@@ -855,11 +945,8 @@
 			}
 			return 1;
 		}
-	} else {
-		fprintf(stderr,
-			"UFFDIO_ZEROPAGE succeeded %Ld\n",
-			uffdio_zeropage.zeropage), exit(1);
-	}
+	} else
+		err("UFFDIO_ZEROPAGE succeeded");
 
 	return 0;
 }
@@ -878,30 +965,22 @@
 	printf("testing UFFDIO_ZEROPAGE: ");
 	fflush(stdout);
 
-	if (uffd_test_ops->release_pages(area_dst))
-		return 1;
+	uffd_test_ctx_init(0);
 
-	if (userfaultfd_open(0) < 0)
-		return 1;
 	uffdio_register.range.start = (unsigned long) area_dst;
 	uffdio_register.range.len = nr_pages * page_size;
 	uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
 	if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
-		fprintf(stderr, "register failure\n"), exit(1);
+		err("register failure");
 
 	expected_ioctls = uffd_test_ops->expected_ioctls;
-	if ((uffdio_register.ioctls & expected_ioctls) !=
-	    expected_ioctls)
-		fprintf(stderr,
-			"unexpected missing ioctl for anon memory\n"),
-			exit(1);
+	if ((uffdio_register.ioctls & expected_ioctls) != expected_ioctls)
+		err("unexpected missing ioctl for anon memory");
 
-	if (uffdio_zeropage(uffd, 0)) {
+	if (uffdio_zeropage(uffd, 0))
 		if (my_bcmp(area_dst, zeropage, page_size))
-			fprintf(stderr, "zeropage is not zero\n"), exit(1);
-	}
+			err("zeropage is not zero");
 
-	close(uffd);
 	printf("done.\n");
 	return 0;
 }
@@ -910,60 +989,52 @@
 {
 	struct uffdio_register uffdio_register;
 	unsigned long expected_ioctls;
-	unsigned long userfaults;
 	pthread_t uffd_mon;
 	int err, features;
 	pid_t pid;
 	char c;
+	struct uffd_stats stats = { 0 };
 
 	printf("testing events (fork, remap, remove): ");
 	fflush(stdout);
 
-	if (uffd_test_ops->release_pages(area_dst))
-		return 1;
-
 	features = UFFD_FEATURE_EVENT_FORK | UFFD_FEATURE_EVENT_REMAP |
 		UFFD_FEATURE_EVENT_REMOVE;
-	if (userfaultfd_open(features) < 0)
-		return 1;
+	uffd_test_ctx_init(features);
+
 	fcntl(uffd, F_SETFL, uffd_flags | O_NONBLOCK);
 
 	uffdio_register.range.start = (unsigned long) area_dst;
 	uffdio_register.range.len = nr_pages * page_size;
 	uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
 	if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
-		fprintf(stderr, "register failure\n"), exit(1);
+		err("register failure");
 
 	expected_ioctls = uffd_test_ops->expected_ioctls;
-	if ((uffdio_register.ioctls & expected_ioctls) !=
-	    expected_ioctls)
-		fprintf(stderr,
-			"unexpected missing ioctl for anon memory\n"),
-			exit(1);
+	if ((uffdio_register.ioctls & expected_ioctls) != expected_ioctls)
+		err("unexpected missing ioctl for anon memory");
 
-	if (pthread_create(&uffd_mon, &attr, uffd_poll_thread, NULL))
-		perror("uffd_poll_thread create"), exit(1);
+	if (pthread_create(&uffd_mon, &attr, uffd_poll_thread, &stats))
+		err("uffd_poll_thread create");
 
 	pid = fork();
 	if (pid < 0)
-		perror("fork"), exit(1);
+		err("fork");
 
 	if (!pid)
-		return faulting_process(0);
+		exit(faulting_process(0));
 
 	waitpid(pid, &err, 0);
 	if (err)
-		fprintf(stderr, "faulting process failed\n"), exit(1);
-
+		err("faulting process failed");
 	if (write(pipefd[1], &c, sizeof(c)) != sizeof(c))
-		perror("pipe write"), exit(1);
-	if (pthread_join(uffd_mon, (void **)&userfaults))
+		err("pipe write");
+	if (pthread_join(uffd_mon, NULL))
 		return 1;
 
-	close(uffd);
-	printf("userfaults: %ld\n", userfaults);
+	uffd_stats_report(&stats, 1);
 
-	return userfaults != nr_pages;
+	return stats.missing_faults != nr_pages;
 }
 
 static int userfaultfd_sig_test(void)
@@ -975,119 +1046,153 @@
 	int err, features;
 	pid_t pid;
 	char c;
+	struct uffd_stats stats = { 0 };
 
 	printf("testing signal delivery: ");
 	fflush(stdout);
 
-	if (uffd_test_ops->release_pages(area_dst))
-		return 1;
-
 	features = UFFD_FEATURE_EVENT_FORK|UFFD_FEATURE_SIGBUS;
-	if (userfaultfd_open(features) < 0)
-		return 1;
+	uffd_test_ctx_init(features);
+
 	fcntl(uffd, F_SETFL, uffd_flags | O_NONBLOCK);
 
 	uffdio_register.range.start = (unsigned long) area_dst;
 	uffdio_register.range.len = nr_pages * page_size;
 	uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
 	if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
-		fprintf(stderr, "register failure\n"), exit(1);
+		err("register failure");
 
 	expected_ioctls = uffd_test_ops->expected_ioctls;
-	if ((uffdio_register.ioctls & expected_ioctls) !=
-	    expected_ioctls)
-		fprintf(stderr,
-			"unexpected missing ioctl for anon memory\n"),
-			exit(1);
+	if ((uffdio_register.ioctls & expected_ioctls) != expected_ioctls)
+		err("unexpected missing ioctl for anon memory");
 
 	if (faulting_process(1))
-		fprintf(stderr, "faulting process failed\n"), exit(1);
+		err("faulting process failed");
 
-	if (uffd_test_ops->release_pages(area_dst))
-		return 1;
+	uffd_test_ops->release_pages(area_dst);
 
-	if (pthread_create(&uffd_mon, &attr, uffd_poll_thread, NULL))
-		perror("uffd_poll_thread create"), exit(1);
+	if (pthread_create(&uffd_mon, &attr, uffd_poll_thread, &stats))
+		err("uffd_poll_thread create");
 
 	pid = fork();
 	if (pid < 0)
-		perror("fork"), exit(1);
+		err("fork");
 
 	if (!pid)
 		exit(faulting_process(2));
 
 	waitpid(pid, &err, 0);
 	if (err)
-		fprintf(stderr, "faulting process failed\n"), exit(1);
-
+		err("faulting process failed");
 	if (write(pipefd[1], &c, sizeof(c)) != sizeof(c))
-		perror("pipe write"), exit(1);
+		err("pipe write");
 	if (pthread_join(uffd_mon, (void **)&userfaults))
 		return 1;
 
 	printf("done.\n");
 	if (userfaults)
-		fprintf(stderr, "Signal test failed, userfaults: %ld\n",
-			userfaults);
-	close(uffd);
+		err("Signal test failed, userfaults: %ld", userfaults);
+
 	return userfaults != 0;
 }
+
+static int userfaultfd_minor_test(void)
+{
+	struct uffdio_register uffdio_register;
+	unsigned long expected_ioctls;
+	unsigned long p;
+	pthread_t uffd_mon;
+	uint8_t expected_byte;
+	void *expected_page;
+	char c;
+	struct uffd_stats stats = { 0 };
+	uint64_t req_features, features_out;
+
+	if (!test_uffdio_minor)
+		return 0;
+
+	printf("testing minor faults: ");
+	fflush(stdout);
+
+	if (test_type == TEST_HUGETLB)
+		req_features = UFFD_FEATURE_MINOR_HUGETLBFS;
+	else if (test_type == TEST_SHMEM)
+		req_features = UFFD_FEATURE_MINOR_SHMEM;
+	else
+		return 1;
+
+	features_out = req_features;
+	uffd_test_ctx_init_ext(&features_out);
+	/* If kernel reports required features aren't supported, skip test. */
+	if ((features_out & req_features) != req_features) {
+		printf("skipping test due to lack of feature support\n");
+		fflush(stdout);
+		return 0;
+	}
+
+	uffdio_register.range.start = (unsigned long)area_dst_alias;
+	uffdio_register.range.len = nr_pages * page_size;
+	uffdio_register.mode = UFFDIO_REGISTER_MODE_MINOR;
+	if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
+		err("register failure");
+
+	expected_ioctls = uffd_test_ops->expected_ioctls;
+	expected_ioctls |= 1 << _UFFDIO_CONTINUE;
+	if ((uffdio_register.ioctls & expected_ioctls) != expected_ioctls)
+		err("unexpected missing ioctl(s)");
+
+	/*
+	 * After registering with UFFD, populate the non-UFFD-registered side of
+	 * the shared mapping. This should *not* trigger any UFFD minor faults.
+	 */
+	for (p = 0; p < nr_pages; ++p) {
+		memset(area_dst + (p * page_size), p % ((uint8_t)-1),
+		       page_size);
+	}
+
+	if (pthread_create(&uffd_mon, &attr, uffd_poll_thread, &stats))
+		err("uffd_poll_thread create");
+
+	/*
+	 * Read each of the pages back using the UFFD-registered mapping. We
+	 * expect that the first time we touch a page, it will result in a minor
+	 * fault. uffd_poll_thread will resolve the fault by bit-flipping the
+	 * page's contents, and then issuing a CONTINUE ioctl.
+	 */
+
+	if (posix_memalign(&expected_page, page_size, page_size))
+		err("out of memory");
+
+	for (p = 0; p < nr_pages; ++p) {
+		expected_byte = ~((uint8_t)(p % ((uint8_t)-1)));
+		memset(expected_page, expected_byte, page_size);
+		if (my_bcmp(expected_page, area_dst_alias + (p * page_size),
+			    page_size))
+			err("unexpected page contents after minor fault");
+	}
+
+	if (write(pipefd[1], &c, sizeof(c)) != sizeof(c))
+		err("pipe write");
+	if (pthread_join(uffd_mon, NULL))
+		return 1;
+
+	uffd_stats_report(&stats, 1);
+
+	return stats.missing_faults != 0 || stats.minor_faults != nr_pages;
+}
+
 static int userfaultfd_stress(void)
 {
 	void *area;
 	char *tmp_area;
 	unsigned long nr;
 	struct uffdio_register uffdio_register;
-	unsigned long cpu;
-	int err;
-	unsigned long userfaults[nr_cpus];
+	struct uffd_stats uffd_stats[nr_cpus];
 
-	uffd_test_ops->allocate_area((void **)&area_src);
-	if (!area_src)
-		return 1;
-	uffd_test_ops->allocate_area((void **)&area_dst);
-	if (!area_dst)
-		return 1;
+	uffd_test_ctx_init(0);
 
-	if (userfaultfd_open(0) < 0)
-		return 1;
-
-	count_verify = malloc(nr_pages * sizeof(unsigned long long));
-	if (!count_verify) {
-		perror("count_verify");
-		return 1;
-	}
-
-	for (nr = 0; nr < nr_pages; nr++) {
-		*area_mutex(area_src, nr) = (pthread_mutex_t)
-			PTHREAD_MUTEX_INITIALIZER;
-		count_verify[nr] = *area_count(area_src, nr) = 1;
-		/*
-		 * In the transition between 255 to 256, powerpc will
-		 * read out of order in my_bcmp and see both bytes as
-		 * zero, so leave a placeholder below always non-zero
-		 * after the count, to avoid my_bcmp to trigger false
-		 * positives.
-		 */
-		*(area_count(area_src, nr) + 1) = 1;
-	}
-
-	pipefd = malloc(sizeof(int) * nr_cpus * 2);
-	if (!pipefd) {
-		perror("pipefd");
-		return 1;
-	}
-	for (cpu = 0; cpu < nr_cpus; cpu++) {
-		if (pipe2(&pipefd[cpu*2], O_CLOEXEC | O_NONBLOCK)) {
-			perror("pipe");
-			return 1;
-		}
-	}
-
-	if (posix_memalign(&area, page_size, page_size)) {
-		fprintf(stderr, "out of memory\n");
-		return 1;
-	}
+	if (posix_memalign(&area, page_size, page_size))
+		err("out of memory");
 	zeropage = area;
 	bzero(zeropage, page_size);
 
@@ -1096,7 +1201,6 @@
 	pthread_attr_init(&attr);
 	pthread_attr_setstacksize(&attr, 16*1024*1024);
 
-	err = 0;
 	while (bounces--) {
 		unsigned long expected_ioctls;
 
@@ -1121,25 +1225,18 @@
 		uffdio_register.range.start = (unsigned long) area_dst;
 		uffdio_register.range.len = nr_pages * page_size;
 		uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
-		if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register)) {
-			fprintf(stderr, "register failure\n");
-			return 1;
-		}
+		if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
+			err("register failure");
 		expected_ioctls = uffd_test_ops->expected_ioctls;
 		if ((uffdio_register.ioctls & expected_ioctls) !=
-		    expected_ioctls) {
-			fprintf(stderr,
-				"unexpected missing ioctl for anon memory\n");
-			return 1;
-		}
+		    expected_ioctls)
+			err("unexpected missing ioctl for anon memory");
 
 		if (area_dst_alias) {
 			uffdio_register.range.start = (unsigned long)
 				area_dst_alias;
-			if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register)) {
-				fprintf(stderr, "register failure alias\n");
-				return 1;
-			}
+			if (ioctl(uffd, UFFDIO_REGISTER, &uffdio_register))
+				err("register failure alias");
 		}
 
 		/*
@@ -1166,41 +1263,31 @@
 		 * MADV_DONTNEED only after the UFFDIO_REGISTER, so it's
 		 * required to MADV_DONTNEED here.
 		 */
-		if (uffd_test_ops->release_pages(area_dst))
-			return 1;
+		uffd_test_ops->release_pages(area_dst);
+
+		uffd_stats_reset(uffd_stats, nr_cpus);
 
 		/* bounce pass */
-		if (stress(userfaults))
+		if (stress(uffd_stats))
 			return 1;
 
 		/* unregister */
-		if (ioctl(uffd, UFFDIO_UNREGISTER, &uffdio_register.range)) {
-			fprintf(stderr, "unregister failure\n");
-			return 1;
-		}
+		if (ioctl(uffd, UFFDIO_UNREGISTER, &uffdio_register.range))
+			err("unregister failure");
 		if (area_dst_alias) {
 			uffdio_register.range.start = (unsigned long) area_dst;
 			if (ioctl(uffd, UFFDIO_UNREGISTER,
-				  &uffdio_register.range)) {
-				fprintf(stderr, "unregister failure alias\n");
-				return 1;
-			}
+				  &uffdio_register.range))
+				err("unregister failure alias");
 		}
 
 		/* verification */
-		if (bounces & BOUNCE_VERIFY) {
-			for (nr = 0; nr < nr_pages; nr++) {
-				if (*area_count(area_dst, nr) != count_verify[nr]) {
-					fprintf(stderr,
-						"error area_count %Lu %Lu %lu\n",
-						*area_count(area_src, nr),
-						count_verify[nr],
-						nr);
-					err = 1;
-					bounces = 0;
-				}
-			}
-		}
+		if (bounces & BOUNCE_VERIFY)
+			for (nr = 0; nr < nr_pages; nr++)
+				if (*area_count(area_dst, nr) != count_verify[nr])
+					err("error area_count %llu %llu %lu\n",
+					    *area_count(area_src, nr),
+					    count_verify[nr], nr);
 
 		/* prepare next bounce */
 		tmp_area = area_src;
@@ -1211,18 +1298,11 @@
 		area_src_alias = area_dst_alias;
 		area_dst_alias = tmp_area;
 
-		printf("userfaults:");
-		for (cpu = 0; cpu < nr_cpus; cpu++)
-			printf(" %lu", userfaults[cpu]);
-		printf("\n");
+		uffd_stats_report(uffd_stats, nr_cpus);
 	}
 
-	if (err)
-		return err;
-
-	close(uffd);
 	return userfaultfd_zeropage_test() || userfaultfd_sig_test()
-		|| userfaultfd_events_test();
+		|| userfaultfd_events_test() || userfaultfd_minor_test();
 }
 
 /*
@@ -1261,12 +1341,15 @@
 		map_shared = true;
 		test_type = TEST_HUGETLB;
 		uffd_test_ops = &hugetlb_uffd_test_ops;
+		/* Minor faults require shared hugetlb; only enable here. */
+		test_uffdio_minor = true;
 	} else if (!strcmp(type, "shmem")) {
 		map_shared = true;
 		test_type = TEST_SHMEM;
 		uffd_test_ops = &shmem_uffd_test_ops;
+		test_uffdio_minor = true;
 	} else {
-		fprintf(stderr, "Unknown test type: %s\n", type), exit(1);
+		err("Unknown test type: %s", type);
 	}
 
 	if (test_type == TEST_HUGETLB)
@@ -1275,11 +1358,10 @@
 		page_size = sysconf(_SC_PAGE_SIZE);
 
 	if (!page_size)
-		fprintf(stderr, "Unable to determine page size\n"),
-				exit(2);
+		err("Unable to determine page size");
 	if ((unsigned long) area_count(NULL, 0) + sizeof(unsigned long long) * 2
 	    > page_size)
-		fprintf(stderr, "Impossible to run this test\n"), exit(2);
+		err("Impossible to run this test");
 }
 
 static void sigalrm(int sig)
@@ -1297,7 +1379,7 @@
 		usage();
 
 	if (signal(SIGALRM, sigalrm) == SIG_ERR)
-		fprintf(stderr, "failed to arm SIGALRM"), exit(1);
+		err("failed to arm SIGALRM");
 	alarm(ALARM_INTERVAL_SECS);
 
 	set_test_type(argv[1]);
@@ -1306,13 +1388,13 @@
 	nr_pages_per_cpu = atol(argv[2]) * 1024*1024 / page_size /
 		nr_cpus;
 	if (!nr_pages_per_cpu) {
-		fprintf(stderr, "invalid MiB\n");
+		_err("invalid MiB");
 		usage();
 	}
 
 	bounces = atoi(argv[3]);
 	if (bounces <= 0) {
-		fprintf(stderr, "invalid bounces\n");
+		_err("invalid bounces");
 		usage();
 	}
 	nr_pages = nr_pages_per_cpu * nr_cpus;
@@ -1321,16 +1403,20 @@
 		if (argc < 5)
 			usage();
 		huge_fd = open(argv[4], O_CREAT | O_RDWR, 0755);
-		if (huge_fd < 0) {
-			fprintf(stderr, "Open of %s failed", argv[3]);
-			perror("open");
-			exit(1);
-		}
-		if (ftruncate(huge_fd, 0)) {
-			fprintf(stderr, "ftruncate %s to size 0 failed", argv[3]);
-			perror("ftruncate");
-			exit(1);
-		}
+		if (huge_fd < 0)
+			err("Open of %s failed", argv[4]);
+		if (ftruncate(huge_fd, 0))
+			err("ftruncate %s to size 0 failed", argv[4]);
+	} else if (test_type == TEST_SHMEM) {
+		shm_fd = memfd_create(argv[0], 0);
+		if (shm_fd < 0)
+			err("memfd_create");
+		if (ftruncate(shm_fd, nr_pages * page_size * 2))
+			err("ftruncate");
+		if (fallocate(shm_fd,
+			      FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0,
+			      nr_pages * page_size * 2))
+			err("fallocate");
 	}
 	printf("nr_pages: %lu, nr_pages_per_cpu: %lu\n",
 	       nr_pages, nr_pages_per_cpu);
diff --git a/tools/testing/selftests/wireguard/netns.sh b/tools/testing/selftests/wireguard/netns.sh
new file mode 100755
index 0000000..5c91bd7
--- /dev/null
+++ b/tools/testing/selftests/wireguard/netns.sh
@@ -0,0 +1,628 @@
+#!/bin/bash
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+#
+# This script tests the below topology:
+#
+# ┌─────────────────────┐   ┌──────────────────────────────────┐   ┌─────────────────────┐
+# │   $ns1 namespace    │   │          $ns0 namespace          │   │   $ns2 namespace    │
+# │                     │   │                                  │   │                     │
+# │┌────────┐           │   │            ┌────────┐            │   │           ┌────────┐│
+# ││  wg0   │───────────┼───┼────────────│   lo   │────────────┼───┼───────────│  wg0   ││
+# │├────────┴──────────┐│   │    ┌───────┴────────┴────────┐   │   │┌──────────┴────────┤│
+# ││192.168.241.1/24   ││   │    │(ns1)         (ns2)      │   │   ││192.168.241.2/24   ││
+# ││fd00::1/24         ││   │    │127.0.0.1:1   127.0.0.1:2│   │   ││fd00::2/24         ││
+# │└───────────────────┘│   │    │[::]:1        [::]:2     │   │   │└───────────────────┘│
+# └─────────────────────┘   │    └─────────────────────────┘   │   └─────────────────────┘
+#                           └──────────────────────────────────┘
+#
+# After the topology is prepared we run a series of TCP/UDP iperf3 tests between the
+# wireguard peers in $ns1 and $ns2. Note that $ns0 is the endpoint for the wg0
+# interfaces in $ns1 and $ns2. See https://www.wireguard.com/netns/ for further
+# details on how this is accomplished.
+set -e
+
+exec 3>&1
+export LANG=C
+export WG_HIDE_KEYS=never
+netns0="wg-test-$$-0"
+netns1="wg-test-$$-1"
+netns2="wg-test-$$-2"
+pretty() { echo -e "\x1b[32m\x1b[1m[+] ${1:+NS$1: }${2}\x1b[0m" >&3; }
+pp() { pretty "" "$*"; "$@"; }
+maybe_exec() { if [[ $BASHPID -eq $$ ]]; then "$@"; else exec "$@"; fi; }
+n0() { pretty 0 "$*"; maybe_exec ip netns exec $netns0 "$@"; }
+n1() { pretty 1 "$*"; maybe_exec ip netns exec $netns1 "$@"; }
+n2() { pretty 2 "$*"; maybe_exec ip netns exec $netns2 "$@"; }
+ip0() { pretty 0 "ip $*"; ip -n $netns0 "$@"; }
+ip1() { pretty 1 "ip $*"; ip -n $netns1 "$@"; }
+ip2() { pretty 2 "ip $*"; ip -n $netns2 "$@"; }
+sleep() { read -t "$1" -N 1 || true; }
+waitiperf() { pretty "${1//*-}" "wait for iperf:${3:-5201} pid $2"; while [[ $(ss -N "$1" -tlpH "sport = ${3:-5201}") != *\"iperf3\",pid=$2,fd=* ]]; do sleep 0.1; done; }
+waitncatudp() { pretty "${1//*-}" "wait for udp:1111 pid $2"; while [[ $(ss -N "$1" -ulpH 'sport = 1111') != *\"ncat\",pid=$2,fd=* ]]; do sleep 0.1; done; }
+waitiface() { pretty "${1//*-}" "wait for $2 to come up"; ip netns exec "$1" bash -c "while [[ \$(< \"/sys/class/net/$2/operstate\") != up ]]; do read -t .1 -N 0 || true; done;"; }
+
+cleanup() {
+	set +e
+	exec 2>/dev/null
+	printf "$orig_message_cost" > /proc/sys/net/core/message_cost
+	ip0 link del dev wg0
+	ip0 link del dev wg1
+	ip1 link del dev wg0
+	ip1 link del dev wg1
+	ip2 link del dev wg0
+	ip2 link del dev wg1
+	local to_kill="$(ip netns pids $netns0) $(ip netns pids $netns1) $(ip netns pids $netns2)"
+	[[ -n $to_kill ]] && kill $to_kill
+	pp ip netns del $netns1
+	pp ip netns del $netns2
+	pp ip netns del $netns0
+	exit
+}
+
+orig_message_cost="$(< /proc/sys/net/core/message_cost)"
+trap cleanup EXIT
+printf 0 > /proc/sys/net/core/message_cost
+
+ip netns del $netns0 2>/dev/null || true
+ip netns del $netns1 2>/dev/null || true
+ip netns del $netns2 2>/dev/null || true
+pp ip netns add $netns0
+pp ip netns add $netns1
+pp ip netns add $netns2
+ip0 link set up dev lo
+
+ip0 link add dev wg0 type wireguard
+ip0 link set wg0 netns $netns1
+ip0 link add dev wg0 type wireguard
+ip0 link set wg0 netns $netns2
+key1="$(pp wg genkey)"
+key2="$(pp wg genkey)"
+key3="$(pp wg genkey)"
+key4="$(pp wg genkey)"
+pub1="$(pp wg pubkey <<<"$key1")"
+pub2="$(pp wg pubkey <<<"$key2")"
+pub3="$(pp wg pubkey <<<"$key3")"
+pub4="$(pp wg pubkey <<<"$key4")"
+psk="$(pp wg genpsk)"
+[[ -n $key1 && -n $key2 && -n $psk ]]
+
+configure_peers() {
+	ip1 addr add 192.168.241.1/24 dev wg0
+	ip1 addr add fd00::1/112 dev wg0
+
+	ip2 addr add 192.168.241.2/24 dev wg0
+	ip2 addr add fd00::2/112 dev wg0
+
+	n1 wg set wg0 \
+		private-key <(echo "$key1") \
+		listen-port 1 \
+		peer "$pub2" \
+			preshared-key <(echo "$psk") \
+			allowed-ips 192.168.241.2/32,fd00::2/128
+	n2 wg set wg0 \
+		private-key <(echo "$key2") \
+		listen-port 2 \
+		peer "$pub1" \
+			preshared-key <(echo "$psk") \
+			allowed-ips 192.168.241.1/32,fd00::1/128
+
+	ip1 link set up dev wg0
+	ip2 link set up dev wg0
+}
+configure_peers
+
+tests() {
+	# Ping over IPv4
+	n2 ping -c 10 -f -W 1 192.168.241.1
+	n1 ping -c 10 -f -W 1 192.168.241.2
+
+	# Ping over IPv6
+	n2 ping6 -c 10 -f -W 1 fd00::1
+	n1 ping6 -c 10 -f -W 1 fd00::2
+
+	# TCP over IPv4
+	n2 iperf3 -s -1 -B 192.168.241.2 &
+	waitiperf $netns2 $!
+	n1 iperf3 -Z -t 3 -c 192.168.241.2
+
+	# TCP over IPv6
+	n1 iperf3 -s -1 -B fd00::1 &
+	waitiperf $netns1 $!
+	n2 iperf3 -Z -t 3 -c fd00::1
+
+	# UDP over IPv4
+	n1 iperf3 -s -1 -B 192.168.241.1 &
+	waitiperf $netns1 $!
+	n2 iperf3 -Z -t 3 -b 0 -u -c 192.168.241.1
+
+	# UDP over IPv6
+	n2 iperf3 -s -1 -B fd00::2 &
+	waitiperf $netns2 $!
+	n1 iperf3 -Z -t 3 -b 0 -u -c fd00::2
+
+	# TCP over IPv4, in parallel
+	for max in 4 5 50; do
+		local pids=( )
+		for ((i=0; i < max; ++i)) do
+			n2 iperf3 -p $(( 5200 + i )) -s -1 -B 192.168.241.2 &
+			pids+=( $! ); waitiperf $netns2 $! $(( 5200 + i ))
+		done
+		for ((i=0; i < max; ++i)) do
+			n1 iperf3 -Z -t 3 -p $(( 5200 + i )) -c 192.168.241.2 &
+		done
+		wait "${pids[@]}"
+	done
+}
+
+[[ $(ip1 link show dev wg0) =~ mtu\ ([0-9]+) ]] && orig_mtu="${BASH_REMATCH[1]}"
+big_mtu=$(( 34816 - 1500 + $orig_mtu ))
+
+# Test using IPv4 as outer transport
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n2 wg set wg0 peer "$pub1" endpoint 127.0.0.1:1
+# Before calling tests, we first make sure that the stats counters and timestamper are working
+n2 ping -c 10 -f -W 1 192.168.241.1
+{ read _; read _; read _; read rx_bytes _; read _; read tx_bytes _; } < <(ip2 -stats link show dev wg0)
+(( rx_bytes == 1372 && (tx_bytes == 1428 || tx_bytes == 1460) ))
+{ read _; read _; read _; read rx_bytes _; read _; read tx_bytes _; } < <(ip1 -stats link show dev wg0)
+(( tx_bytes == 1372 && (rx_bytes == 1428 || rx_bytes == 1460) ))
+read _ rx_bytes tx_bytes < <(n2 wg show wg0 transfer)
+(( rx_bytes == 1372 && (tx_bytes == 1428 || tx_bytes == 1460) ))
+read _ rx_bytes tx_bytes < <(n1 wg show wg0 transfer)
+(( tx_bytes == 1372 && (rx_bytes == 1428 || rx_bytes == 1460) ))
+read _ timestamp < <(n1 wg show wg0 latest-handshakes)
+(( timestamp != 0 ))
+
+tests
+ip1 link set wg0 mtu $big_mtu
+ip2 link set wg0 mtu $big_mtu
+tests
+
+ip1 link set wg0 mtu $orig_mtu
+ip2 link set wg0 mtu $orig_mtu
+
+# Test using IPv6 as outer transport
+n1 wg set wg0 peer "$pub2" endpoint [::1]:2
+n2 wg set wg0 peer "$pub1" endpoint [::1]:1
+tests
+ip1 link set wg0 mtu $big_mtu
+ip2 link set wg0 mtu $big_mtu
+tests
+
+# Test that route MTUs work with the padding
+ip1 link set wg0 mtu 1300
+ip2 link set wg0 mtu 1300
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n2 wg set wg0 peer "$pub1" endpoint 127.0.0.1:1
+n0 iptables -A INPUT -m length --length 1360 -j DROP
+n1 ip route add 192.168.241.2/32 dev wg0 mtu 1299
+n2 ip route add 192.168.241.1/32 dev wg0 mtu 1299
+n2 ping -c 1 -W 1 -s 1269 192.168.241.1
+n2 ip route delete 192.168.241.1/32 dev wg0 mtu 1299
+n1 ip route delete 192.168.241.2/32 dev wg0 mtu 1299
+n0 iptables -F INPUT
+
+ip1 link set wg0 mtu $orig_mtu
+ip2 link set wg0 mtu $orig_mtu
+
+# Test using IPv4 that roaming works
+ip0 -4 addr del 127.0.0.1/8 dev lo
+ip0 -4 addr add 127.212.121.99/8 dev lo
+n1 wg set wg0 listen-port 9999
+n1 wg set wg0 peer "$pub2" endpoint 127.0.0.1:2
+n1 ping6 -W 1 -c 1 fd00::2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	127.212.121.99:9999" ]]
+
+# Test using IPv6 that roaming works
+n1 wg set wg0 listen-port 9998
+n1 wg set wg0 peer "$pub2" endpoint [::1]:2
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[::1]:9998" ]]
+
+# Test that crypto-RP filter works
+n1 wg set wg0 peer "$pub2" allowed-ips 192.168.241.0/24
+exec 4< <(n1 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns1 $ncat_pid
+n2 ncat -u 192.168.241.1 1111 <<<"X"
+read -r -N 1 -t 1 out <&4 && [[ $out == "X" ]]
+kill $ncat_pid
+more_specific_key="$(pp wg genkey | pp wg pubkey)"
+n1 wg set wg0 peer "$more_specific_key" allowed-ips 192.168.241.2/32
+n2 wg set wg0 listen-port 9997
+exec 4< <(n1 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns1 $ncat_pid
+n2 ncat -u 192.168.241.1 1111 <<<"X"
+! read -r -N 1 -t 1 out <&4 || false
+kill $ncat_pid
+n1 wg set wg0 peer "$more_specific_key" remove
+[[ $(n1 wg show wg0 endpoints) == "$pub2	[::1]:9997" ]]
+
+# Test that we can change private keys keys and immediately handshake
+n1 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk") allowed-ips 192.168.241.2/32 endpoint 127.0.0.1:2
+n2 wg set wg0 private-key <(echo "$key2") listen-port 2 peer "$pub1" preshared-key <(echo "$psk") allowed-ips 192.168.241.1/32
+n1 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 private-key <(echo "$key3")
+n2 wg set wg0 peer "$pub3" preshared-key <(echo "$psk") allowed-ips 192.168.241.1/32 peer "$pub1" remove
+n1 ping -W 1 -c 1 192.168.241.2
+n2 wg set wg0 peer "$pub3" remove
+
+# Test that we can route wg through wg
+ip1 addr flush dev wg0
+ip2 addr flush dev wg0
+ip1 addr add fd00::5:1/112 dev wg0
+ip2 addr add fd00::5:2/112 dev wg0
+n1 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk") allowed-ips fd00::5:2/128 endpoint 127.0.0.1:2
+n2 wg set wg0 private-key <(echo "$key2") listen-port 2 peer "$pub1" preshared-key <(echo "$psk") allowed-ips fd00::5:1/128 endpoint 127.212.121.99:9998
+ip1 link add wg1 type wireguard
+ip2 link add wg1 type wireguard
+ip1 addr add 192.168.241.1/24 dev wg1
+ip1 addr add fd00::1/112 dev wg1
+ip2 addr add 192.168.241.2/24 dev wg1
+ip2 addr add fd00::2/112 dev wg1
+ip1 link set mtu 1340 up dev wg1
+ip2 link set mtu 1340 up dev wg1
+n1 wg set wg1 listen-port 5 private-key <(echo "$key3") peer "$pub4" allowed-ips 192.168.241.2/32,fd00::2/128 endpoint [fd00::5:2]:5
+n2 wg set wg1 listen-port 5 private-key <(echo "$key4") peer "$pub3" allowed-ips 192.168.241.1/32,fd00::1/128 endpoint [fd00::5:1]:5
+tests
+# Try to set up a routing loop between the two namespaces
+ip1 link set netns $netns0 dev wg1
+ip0 addr add 192.168.241.1/24 dev wg1
+ip0 link set up dev wg1
+n0 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 peer "$pub2" endpoint 192.168.241.2:7
+ip2 link del wg0
+ip2 link del wg1
+! n0 ping -W 1 -c 10 -f 192.168.241.2 || false # Should not crash kernel
+
+ip0 link del wg1
+ip1 link del wg0
+
+# Test using NAT. We now change the topology to this:
+# ┌────────────────────────────────────────┐    ┌────────────────────────────────────────────────┐     ┌────────────────────────────────────────┐
+# │             $ns1 namespace             │    │                 $ns0 namespace                 │     │             $ns2 namespace             │
+# │                                        │    │                                                │     │                                        │
+# │  ┌─────┐             ┌─────┐           │    │    ┌──────┐              ┌──────┐              │     │  ┌─────┐            ┌─────┐            │
+# │  │ wg0 │─────────────│vethc│───────────┼────┼────│vethrc│              │vethrs│──────────────┼─────┼──│veths│────────────│ wg0 │            │
+# │  ├─────┴──────────┐  ├─────┴──────────┐│    │    ├──────┴─────────┐    ├──────┴────────────┐ │     │  ├─────┴──────────┐ ├─────┴──────────┐ │
+# │  │192.168.241.1/24│  │192.168.1.100/24││    │    │192.168.1.1/24  │    │10.0.0.1/24        │ │     │  │10.0.0.100/24   │ │192.168.241.2/24│ │
+# │  │fd00::1/24      │  │                ││    │    │                │    │SNAT:192.168.1.0/24│ │     │  │                │ │fd00::2/24      │ │
+# │  └────────────────┘  └────────────────┘│    │    └────────────────┘    └───────────────────┘ │     │  └────────────────┘ └────────────────┘ │
+# └────────────────────────────────────────┘    └────────────────────────────────────────────────┘     └────────────────────────────────────────┘
+
+ip1 link add dev wg0 type wireguard
+ip2 link add dev wg0 type wireguard
+configure_peers
+
+ip0 link add vethrc type veth peer name vethc
+ip0 link add vethrs type veth peer name veths
+ip0 link set vethc netns $netns1
+ip0 link set veths netns $netns2
+ip0 link set vethrc up
+ip0 link set vethrs up
+ip0 addr add 192.168.1.1/24 dev vethrc
+ip0 addr add 10.0.0.1/24 dev vethrs
+ip1 addr add 192.168.1.100/24 dev vethc
+ip1 link set vethc up
+ip1 route add default via 192.168.1.1
+ip2 addr add 10.0.0.100/24 dev veths
+ip2 link set veths up
+waitiface $netns0 vethrc
+waitiface $netns0 vethrs
+waitiface $netns1 vethc
+waitiface $netns2 veths
+
+n0 bash -c 'printf 1 > /proc/sys/net/ipv4/ip_forward'
+n0 bash -c 'printf 2 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout'
+n0 bash -c 'printf 2 > /proc/sys/net/netfilter/nf_conntrack_udp_timeout_stream'
+n0 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.0.0/24 -j SNAT --to 10.0.0.1
+
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.100:2 persistent-keepalive 1
+n1 ping -W 1 -c 1 192.168.241.2
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+# Demonstrate n2 can still send packets to n1, since persistent-keepalive will prevent connection tracking entry from expiring (to see entries: `n0 conntrack -L`).
+pp sleep 3
+n2 ping -W 1 -c 1 192.168.241.1
+n1 wg set wg0 peer "$pub2" persistent-keepalive 0
+
+# Test that onion routing works, even when it loops
+n1 wg set wg0 peer "$pub3" allowed-ips 192.168.242.2/32 endpoint 192.168.241.2:5
+ip1 addr add 192.168.242.1/24 dev wg0
+ip2 link add wg1 type wireguard
+ip2 addr add 192.168.242.2/24 dev wg1
+n2 wg set wg1 private-key <(echo "$key3") listen-port 5 peer "$pub1" allowed-ips 192.168.242.1/32
+ip2 link set wg1 up
+n1 ping -W 1 -c 1 192.168.242.2
+ip2 link del wg1
+n1 wg set wg0 peer "$pub3" endpoint 192.168.242.2:5
+! n1 ping -W 1 -c 1 192.168.242.2 || false # Should not crash kernel
+n1 wg set wg0 peer "$pub3" remove
+ip1 addr del 192.168.242.1/24 dev wg0
+
+# Do a wg-quick(8)-style policy routing for the default route, making sure vethc has a v6 address to tease out bugs.
+ip1 -6 addr add fc00::9/96 dev vethc
+ip1 -6 route add default via fc00::1
+ip2 -4 addr add 192.168.99.7/32 dev wg0
+ip2 -6 addr add abab::1111/128 dev wg0
+n1 wg set wg0 fwmark 51820 peer "$pub2" allowed-ips 192.168.99.7,abab::1111
+ip1 -6 route add default dev wg0 table 51820
+ip1 -6 rule add not fwmark 51820 table 51820
+ip1 -6 rule add table main suppress_prefixlength 0
+ip1 -4 route add default dev wg0 table 51820
+ip1 -4 rule add not fwmark 51820 table 51820
+ip1 -4 rule add table main suppress_prefixlength 0
+n1 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/vethc/rp_filter'
+# Flood the pings instead of sending just one, to trigger routing table reference counting bugs.
+n1 ping -W 1 -c 100 -f 192.168.99.7
+n1 ping -W 1 -c 100 -f abab::1111
+
+# Have ns2 NAT into wg0 packets from ns0, but return an icmp error along the right route.
+n2 iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -d 192.168.241.0/24 -j SNAT --to 192.168.241.2
+n0 iptables -t filter -A INPUT \! -s 10.0.0.0/24 -i vethrs -j DROP # Manual rpfilter just to be explicit.
+n2 bash -c 'printf 1 > /proc/sys/net/ipv4/ip_forward'
+ip0 -4 route add 192.168.241.1 via 10.0.0.100
+n2 wg set wg0 peer "$pub1" remove
+[[ $(! n0 ping -W 1 -c 1 192.168.241.1 || false) == *"From 10.0.0.100 icmp_seq=1 Destination Host Unreachable"* ]]
+
+n0 iptables -t nat -F
+n0 iptables -t filter -F
+n2 iptables -t nat -F
+ip0 link del vethrc
+ip0 link del vethrs
+ip1 link del wg0
+ip2 link del wg0
+
+# Test that saddr routing is sticky but not too sticky, changing to this topology:
+# ┌────────────────────────────────────────┐    ┌────────────────────────────────────────┐
+# │             $ns1 namespace             │    │             $ns2 namespace             │
+# │                                        │    │                                        │
+# │  ┌─────┐             ┌─────┐           │    │  ┌─────┐            ┌─────┐            │
+# │  │ wg0 │─────────────│veth1│───────────┼────┼──│veth2│────────────│ wg0 │            │
+# │  ├─────┴──────────┐  ├─────┴──────────┐│    │  ├─────┴──────────┐ ├─────┴──────────┐ │
+# │  │192.168.241.1/24│  │10.0.0.1/24     ││    │  │10.0.0.2/24     │ │192.168.241.2/24│ │
+# │  │fd00::1/24      │  │fd00:aa::1/96   ││    │  │fd00:aa::2/96   │ │fd00::2/24      │ │
+# │  └────────────────┘  └────────────────┘│    │  └────────────────┘ └────────────────┘ │
+# └────────────────────────────────────────┘    └────────────────────────────────────────┘
+
+ip1 link add dev wg0 type wireguard
+ip2 link add dev wg0 type wireguard
+configure_peers
+ip1 link add veth1 type veth peer name veth2
+ip1 link set veth2 netns $netns2
+n1 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/all/accept_dad'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/all/accept_dad'
+n1 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/veth1/accept_dad'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv6/conf/veth2/accept_dad'
+n1 bash -c 'printf 1 > /proc/sys/net/ipv4/conf/veth1/promote_secondaries'
+
+# First we check that we aren't overly sticky and can fall over to new IPs when old ones are removed
+ip1 addr add 10.0.0.1/24 dev veth1
+ip1 addr add fd00:aa::1/96 dev veth1
+ip2 addr add 10.0.0.2/24 dev veth2
+ip2 addr add fd00:aa::2/96 dev veth2
+ip1 link set veth1 up
+ip2 link set veth2 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.2:2
+n1 ping -W 1 -c 1 192.168.241.2
+ip1 addr add 10.0.0.10/24 dev veth1
+ip1 addr del 10.0.0.1/24 dev veth1
+n1 ping -W 1 -c 1 192.168.241.2
+n1 wg set wg0 peer "$pub2" endpoint [fd00:aa::2]:2
+n1 ping -W 1 -c 1 192.168.241.2
+ip1 addr add fd00:aa::10/96 dev veth1
+ip1 addr del fd00:aa::1/96 dev veth1
+n1 ping -W 1 -c 1 192.168.241.2
+
+# Now we show that we can successfully do reply to sender routing
+ip1 link set veth1 down
+ip2 link set veth2 down
+ip1 addr flush dev veth1
+ip2 addr flush dev veth2
+ip1 addr add 10.0.0.1/24 dev veth1
+ip1 addr add 10.0.0.2/24 dev veth1
+ip1 addr add fd00:aa::1/96 dev veth1
+ip1 addr add fd00:aa::2/96 dev veth1
+ip2 addr add 10.0.0.3/24 dev veth2
+ip2 addr add fd00:aa::3/96 dev veth2
+ip1 link set veth1 up
+ip2 link set veth2 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+n2 wg set wg0 peer "$pub1" endpoint 10.0.0.1:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint [fd00:aa::1]:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[fd00:aa::1]:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint 10.0.0.2:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.2:1" ]]
+n2 wg set wg0 peer "$pub1" endpoint [fd00:aa::2]:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	[fd00:aa::2]:1" ]]
+
+# What happens if the inbound destination address belongs to a different interface as the default route?
+ip1 link add dummy0 type dummy
+ip1 addr add 10.50.0.1/24 dev dummy0
+ip1 link set dummy0 up
+ip2 route add 10.50.0.0/24 dev veth2
+n2 wg set wg0 peer "$pub1" endpoint 10.50.0.1:1
+n2 ping -W 1 -c 1 192.168.241.1
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.50.0.1:1" ]]
+
+ip1 link del dummy0
+ip1 addr flush dev veth1
+ip2 addr flush dev veth2
+ip1 route flush dev veth1
+ip2 route flush dev veth2
+
+# Now we see what happens if another interface route takes precedence over an ongoing one
+ip1 link add veth3 type veth peer name veth4
+ip1 link set veth4 netns $netns2
+ip1 addr add 10.0.0.1/24 dev veth1
+ip2 addr add 10.0.0.2/24 dev veth2
+ip1 addr add 10.0.0.3/24 dev veth3
+ip1 link set veth1 up
+ip2 link set veth2 up
+ip1 link set veth3 up
+ip2 link set veth4 up
+waitiface $netns1 veth1
+waitiface $netns2 veth2
+waitiface $netns1 veth3
+waitiface $netns2 veth4
+ip1 route flush dev veth1
+ip1 route flush dev veth3
+ip1 route add 10.0.0.0/24 dev veth1 src 10.0.0.1 metric 2
+n1 wg set wg0 peer "$pub2" endpoint 10.0.0.2:2
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.1:1" ]]
+ip1 route add 10.0.0.0/24 dev veth3 src 10.0.0.3 metric 1
+n1 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/veth1/rp_filter'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/veth4/rp_filter'
+n1 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/all/rp_filter'
+n2 bash -c 'printf 0 > /proc/sys/net/ipv4/conf/all/rp_filter'
+n1 ping -W 1 -c 1 192.168.241.2
+[[ $(n2 wg show wg0 endpoints) == "$pub1	10.0.0.3:1" ]]
+
+ip1 link del veth1
+ip1 link del veth3
+ip1 link del wg0
+ip2 link del wg0
+
+# We test that Netlink/IPC is working properly by doing things that usually cause split responses
+ip0 link add dev wg0 type wireguard
+config=( "[Interface]" "PrivateKey=$(wg genkey)" "[Peer]" "PublicKey=$(wg genkey)" )
+for a in {1..255}; do
+	for b in {0..255}; do
+		config+=( "AllowedIPs=$a.$b.0.0/16,$a::$b/128" )
+	done
+done
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+i=0
+for ip in $(n0 wg show wg0 allowed-ips); do
+	((++i))
+done
+((i == 255*256*2+1))
+ip0 link del wg0
+ip0 link add dev wg0 type wireguard
+config=( "[Interface]" "PrivateKey=$(wg genkey)" )
+for a in {1..40}; do
+	config+=( "[Peer]" "PublicKey=$(wg genkey)" )
+	for b in {1..52}; do
+		config+=( "AllowedIPs=$a.$b.0.0/16" )
+	done
+done
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+i=0
+while read -r line; do
+	j=0
+	for ip in $line; do
+		((++j))
+	done
+	((j == 53))
+	((++i))
+done < <(n0 wg show wg0 allowed-ips)
+((i == 40))
+ip0 link del wg0
+ip0 link add wg0 type wireguard
+config=( )
+for i in {1..29}; do
+	config+=( "[Peer]" "PublicKey=$(wg genkey)" )
+done
+config+=( "[Peer]" "PublicKey=$(wg genkey)" "AllowedIPs=255.2.3.4/32,abcd::255/128" )
+n0 wg setconf wg0 <(printf '%s\n' "${config[@]}")
+n0 wg showconf wg0 > /dev/null
+ip0 link del wg0
+
+allowedips=( )
+for i in {1..197}; do
+        allowedips+=( abcd::$i )
+done
+saved_ifs="$IFS"
+IFS=,
+allowedips="${allowedips[*]}"
+IFS="$saved_ifs"
+ip0 link add wg0 type wireguard
+n0 wg set wg0 peer "$pub1"
+n0 wg set wg0 peer "$pub2" allowed-ips "$allowedips"
+{
+	read -r pub allowedips
+	[[ $pub == "$pub1" && $allowedips == "(none)" ]]
+	read -r pub allowedips
+	[[ $pub == "$pub2" ]]
+	i=0
+	for _ in $allowedips; do
+		((++i))
+	done
+	((i == 197))
+} < <(n0 wg show wg0 allowed-ips)
+ip0 link del wg0
+
+! n0 wg show doesnotexist || false
+
+ip0 link add wg0 type wireguard
+n0 wg set wg0 private-key <(echo "$key1") peer "$pub2" preshared-key <(echo "$psk")
+[[ $(n0 wg show wg0 private-key) == "$key1" ]]
+[[ $(n0 wg show wg0 preshared-keys) == "$pub2	$psk" ]]
+n0 wg set wg0 private-key /dev/null peer "$pub2" preshared-key /dev/null
+[[ $(n0 wg show wg0 private-key) == "(none)" ]]
+[[ $(n0 wg show wg0 preshared-keys) == "$pub2	(none)" ]]
+n0 wg set wg0 peer "$pub2"
+n0 wg set wg0 private-key <(echo "$key2")
+[[ $(n0 wg show wg0 public-key) == "$pub2" ]]
+[[ -z $(n0 wg show wg0 peers) ]]
+n0 wg set wg0 peer "$pub2"
+[[ -z $(n0 wg show wg0 peers) ]]
+n0 wg set wg0 private-key <(echo "$key1")
+n0 wg set wg0 peer "$pub2"
+[[ $(n0 wg show wg0 peers) == "$pub2" ]]
+n0 wg set wg0 private-key <(echo "/${key1:1}")
+[[ $(n0 wg show wg0 private-key) == "+${key1:1}" ]]
+n0 wg set wg0 peer "$pub2" allowed-ips 0.0.0.0/0,10.0.0.0/8,100.0.0.0/10,172.16.0.0/12,192.168.0.0/16
+n0 wg set wg0 peer "$pub2" allowed-ips 0.0.0.0/0
+n0 wg set wg0 peer "$pub2" allowed-ips ::/0,1700::/111,5000::/4,e000::/37,9000::/75
+n0 wg set wg0 peer "$pub2" allowed-ips ::/0
+n0 wg set wg0 peer "$pub2" remove
+for low_order_point in AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 4Ot6fDtBuK4WVuP68Z/EatoJjeucMrH9hmIFFl9JuAA= X5yVvKNQjCSx0LFVnIPvWwREXMRYHI6G2CJO3dCfEVc= 7P///////////////////////////////////////38= 7f///////////////////////////////////////38= 7v///////////////////////////////////////38=; do
+	n0 wg set wg0 peer "$low_order_point" persistent-keepalive 1 endpoint 127.0.0.1:1111
+done
+[[ -n $(n0 wg show wg0 peers) ]]
+exec 4< <(n0 ncat -l -u -p 1111)
+ncat_pid=$!
+waitncatudp $netns0 $ncat_pid
+ip0 link set wg0 up
+! read -r -n 1 -t 2 <&4 || false
+kill $ncat_pid
+ip0 link del wg0
+
+# Ensure there aren't circular reference loops
+ip1 link add wg1 type wireguard
+ip2 link add wg2 type wireguard
+ip1 link set wg1 netns $netns2
+ip2 link set wg2 netns $netns1
+pp ip netns delete $netns1
+pp ip netns delete $netns2
+pp ip netns add $netns1
+pp ip netns add $netns2
+
+sleep 2 # Wait for cleanup and grace periods
+declare -A objects
+while read -t 0.1 -r line 2>/dev/null || [[ $? -ne 142 ]]; do
+	[[ $line =~ .*(wg[0-9]+:\ [A-Z][a-z]+\ ?[0-9]*)\ .*(created|destroyed).* ]] || continue
+	objects["${BASH_REMATCH[1]}"]+="${BASH_REMATCH[2]}"
+done < /dev/kmsg
+alldeleted=1
+for object in "${!objects[@]}"; do
+	if [[ ${objects["$object"]} != *createddestroyed ]]; then
+		echo "Error: $object: merely ${objects["$object"]}" >&3
+		alldeleted=0
+	fi
+done
+[[ $alldeleted -eq 1 ]]
+pretty "" "Objects that were created were also destroyed."
diff --git a/tools/testing/selftests/wireguard/qemu/.gitignore b/tools/testing/selftests/wireguard/qemu/.gitignore
new file mode 100644
index 0000000..415b542
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/.gitignore
@@ -0,0 +1,2 @@
+build/
+distfiles/
diff --git a/tools/testing/selftests/wireguard/qemu/Makefile b/tools/testing/selftests/wireguard/qemu/Makefile
new file mode 100644
index 0000000..2dab4f5
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/Makefile
@@ -0,0 +1,377 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+
+PWD := $(shell pwd)
+
+CHOST := $(shell gcc -dumpmachine)
+HOST_ARCH := $(firstword $(subst -, ,$(CHOST)))
+ifneq (,$(ARCH))
+CBUILD := $(subst -gcc,,$(lastword $(subst /, ,$(firstword $(wildcard $(foreach bindir,$(subst :, ,$(PATH)),$(bindir)/$(ARCH)-*-gcc))))))
+ifeq (,$(CBUILD))
+$(error The toolchain for $(ARCH) is not installed)
+endif
+else
+CBUILD := $(CHOST)
+ARCH := $(firstword $(subst -, ,$(CBUILD)))
+endif
+
+# Set these from the environment to override
+KERNEL_PATH ?= $(PWD)/../../../../..
+BUILD_PATH ?= $(PWD)/build/$(ARCH)
+DISTFILES_PATH ?= $(PWD)/distfiles
+NR_CPUS ?= 4
+
+MIRROR := https://download.wireguard.com/qemu-test/distfiles/
+
+default: qemu
+
+# variable name, tarball project name, version, tarball extension, default URI base
+define tar_download =
+$(1)_VERSION := $(3)
+$(1)_NAME := $(2)-$$($(1)_VERSION)
+$(1)_TAR := $(DISTFILES_PATH)/$$($(1)_NAME)$(4)
+$(1)_PATH := $(BUILD_PATH)/$$($(1)_NAME)
+$(call file_download,$$($(1)_NAME)$(4),$(5),$(6))
+endef
+
+define file_download =
+$(DISTFILES_PATH)/$(1):
+	mkdir -p $(DISTFILES_PATH)
+	flock -x $$@.lock -c '[ -f $$@ ] && exit 0; wget -O $$@.tmp $(MIRROR)$(1) || wget -O $$@.tmp $(2)$(1) || rm -f $$@.tmp; [ -f $$@.tmp ] || exit 1; if echo "$(3)  $$@.tmp" | sha256sum -c -; then mv $$@.tmp $$@; else rm -f $$@.tmp; exit 71; fi'
+endef
+
+$(eval $(call tar_download,MUSL,musl,1.1.24,.tar.gz,https://www.musl-libc.org/releases/,1370c9a812b2cf2a7d92802510cca0058cc37e66a7bedd70051f0a34015022a3))
+$(eval $(call tar_download,IPERF,iperf,3.7,.tar.gz,https://downloads.es.net/pub/iperf/,d846040224317caf2f75c843d309a950a7db23f9b44b94688ccbe557d6d1710c))
+$(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d))
+$(eval $(call tar_download,IPROUTE2,iproute2,5.6.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,1b5b0e25ce6e23da7526ea1da044e814ad85ba761b10dd29c2b027c056b04692))
+$(eval $(call tar_download,IPTABLES,iptables,1.8.4,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,993a3a5490a544c2cbf2ef15cf7e7ed21af1845baf228318d5c36ef8827e157c))
+$(eval $(call tar_download,NMAP,nmap,7.80,.tar.bz2,https://nmap.org/dist/,fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa))
+$(eval $(call tar_download,IPUTILS,iputils,s20190709,.tar.gz,https://github.com/iputils/iputils/archive/s20190709.tar.gz/#,a15720dd741d7538dd2645f9f516d193636ae4300ff7dbc8bfca757bf166490a))
+$(eval $(call tar_download,WIREGUARD_TOOLS,wireguard-tools,1.0.20200206,.tar.xz,https://git.zx2c4.com/wireguard-tools/snapshot/,f5207248c6a3c3e3bfc9ab30b91c1897b00802ed861e1f9faaed873366078c64))
+
+KERNEL_BUILD_PATH := $(BUILD_PATH)/kernel$(if $(findstring yes,$(DEBUG_KERNEL)),-debug)
+rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d))
+WIREGUARD_SOURCES := $(call rwildcard,$(KERNEL_PATH)/drivers/net/wireguard/,*)
+
+export CFLAGS ?= -O3 -pipe
+export LDFLAGS ?=
+export CPPFLAGS := -I$(BUILD_PATH)/include
+
+ifeq ($(HOST_ARCH),$(ARCH))
+CROSS_COMPILE_FLAG := --host=$(CHOST)
+CFLAGS += -march=native
+STRIP := strip
+else
+$(info Cross compilation: building for $(CBUILD) using $(CHOST))
+CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST)
+export CROSS_COMPILE=$(CBUILD)-
+STRIP := $(CBUILD)-strip
+endif
+ifeq ($(ARCH),aarch64)
+QEMU_ARCH := aarch64
+KERNEL_ARCH := arm64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a53 -machine virt
+CFLAGS += -march=armv8-a -mtune=cortex-a53
+endif
+else ifeq ($(ARCH),aarch64_be)
+QEMU_ARCH := aarch64
+KERNEL_ARCH := arm64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a53 -machine virt
+CFLAGS += -march=armv8-a -mtune=cortex-a53
+endif
+else ifeq ($(ARCH),arm)
+QEMU_ARCH := arm
+KERNEL_ARCH := arm
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a15 -machine virt
+CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux
+endif
+else ifeq ($(ARCH),armeb)
+QEMU_ARCH := arm
+KERNEL_ARCH := arm
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm
+else
+QEMU_MACHINE := -cpu cortex-a15 -machine virt
+CFLAGS += -march=armv7-a -mabi=aapcs-linux # We don't pass -mtune=cortex-a15 due to a compiler bug on big endian.
+LDFLAGS += -Wl,--be8
+endif
+else ifeq ($(ARCH),x86_64)
+QEMU_ARCH := x86_64
+KERNEL_ARCH := x86_64
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine q35,accel=kvm
+else
+QEMU_MACHINE := -cpu Skylake-Server -machine q35
+CFLAGS += -march=skylake-avx512
+endif
+else ifeq ($(ARCH),i686)
+QEMU_ARCH := i386
+KERNEL_ARCH := x86
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage
+ifeq ($(subst x86_64,i686,$(HOST_ARCH)),$(ARCH))
+QEMU_MACHINE := -cpu host -machine q35,accel=kvm
+else
+QEMU_MACHINE := -cpu coreduo -machine q35
+CFLAGS += -march=prescott
+endif
+else ifeq ($(ARCH),mips64)
+QEMU_ARCH := mips64
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EB
+else
+QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
+CFLAGS += -march=mips64r2 -EB
+endif
+else ifeq ($(ARCH),mips64el)
+QEMU_ARCH := mips64el
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EL
+else
+QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1
+CFLAGS += -march=mips64r2 -EL
+endif
+else ifeq ($(ARCH),mips)
+QEMU_ARCH := mips
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EB
+else
+QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
+CFLAGS += -march=mips32r2 -EB
+endif
+else ifeq ($(ARCH),mipsel)
+QEMU_ARCH := mipsel
+KERNEL_ARCH := mips
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host -machine malta,accel=kvm
+CFLAGS += -EL
+else
+QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1
+CFLAGS += -march=mips32r2 -EL
+endif
+else ifeq ($(ARCH),powerpc64le)
+QEMU_ARCH := ppc64
+KERNEL_ARCH := powerpc
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine pseries
+else
+QEMU_MACHINE := -machine pseries
+endif
+CFLAGS += -mcpu=powerpc64le -mlong-double-64
+else ifeq ($(ARCH),powerpc)
+QEMU_ARCH := ppc
+KERNEL_ARCH := powerpc
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/powerpc/boot/uImage
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine ppce500
+else
+QEMU_MACHINE := -machine ppce500
+endif
+CFLAGS += -mcpu=powerpc -mlong-double-64 -msecure-plt
+else ifeq ($(ARCH),m68k)
+QEMU_ARCH := m68k
+KERNEL_ARCH := m68k
+KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux
+KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMDLINE=\(.*\)/\1/p' arch/m68k.config)
+ifeq ($(HOST_ARCH),$(ARCH))
+QEMU_MACHINE := -cpu host,accel=kvm -machine q800 -smp 1 -append $(KERNEL_CMDLINE)
+else
+QEMU_MACHINE := -machine q800 -smp 1 -append $(KERNEL_CMDLINE)
+endif
+else
+$(error I only build: x86_64, i686, arm, armeb, aarch64, aarch64_be, mips, mipsel, mips64, mips64el, powerpc64le, powerpc, m68k)
+endif
+
+REAL_CC := $(CBUILD)-gcc
+MUSL_CC := $(BUILD_PATH)/musl-gcc
+export CC := $(MUSL_CC)
+USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed
+
+build: $(KERNEL_BZIMAGE)
+qemu: $(KERNEL_BZIMAGE)
+	rm -f $(BUILD_PATH)/result
+	timeout --foreground 20m qemu-system-$(QEMU_ARCH) \
+		-nodefaults \
+		-nographic \
+		-smp $(NR_CPUS) \
+		$(QEMU_MACHINE) \
+		-m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_BUILD_PATH)/.config && echo 1G || echo 256M) \
+		-serial stdio \
+		-serial file:$(BUILD_PATH)/result \
+		-no-reboot \
+		-monitor none \
+		-kernel $<
+	grep -Fq success $(BUILD_PATH)/result
+
+$(BUILD_PATH)/init-cpio-spec.txt:
+	mkdir -p $(BUILD_PATH)
+	echo "file /init $(BUILD_PATH)/init 755 0 0" > $@
+	echo "file /init.sh $(PWD)/../netns.sh 755 0 0" >> $@
+	echo "dir /dev 755 0 0" >> $@
+	echo "nod /dev/console 644 0 0 c 5 1" >> $@
+	echo "dir /bin 755 0 0" >> $@
+	echo "file /bin/iperf3 $(IPERF_PATH)/src/iperf3 755 0 0" >> $@
+	echo "file /bin/wg $(WIREGUARD_TOOLS_PATH)/src/wg 755 0 0" >> $@
+	echo "file /bin/bash $(BASH_PATH)/bash 755 0 0" >> $@
+	echo "file /bin/ip $(IPROUTE2_PATH)/ip/ip 755 0 0" >> $@
+	echo "file /bin/ss $(IPROUTE2_PATH)/misc/ss 755 0 0" >> $@
+	echo "file /bin/ping $(IPUTILS_PATH)/ping 755 0 0" >> $@
+	echo "file /bin/ncat $(NMAP_PATH)/ncat/ncat 755 0 0" >> $@
+	echo "file /bin/xtables-legacy-multi $(IPTABLES_PATH)/iptables/xtables-legacy-multi 755 0 0" >> $@
+	echo "slink /bin/iptables xtables-legacy-multi 777 0 0" >> $@
+	echo "slink /bin/ping6 ping 777 0 0" >> $@
+	echo "dir /lib 755 0 0" >> $@
+	echo "file /lib/libc.so $(MUSL_PATH)/lib/libc.so 755 0 0" >> $@
+	echo "slink /lib/ld-linux.so.1 libc.so 777 0 0" >> $@
+
+$(KERNEL_BUILD_PATH)/.config: kernel.config arch/$(ARCH).config
+	mkdir -p $(KERNEL_BUILD_PATH)
+	cp kernel.config $(KERNEL_BUILD_PATH)/minimal.config
+	printf 'CONFIG_NR_CPUS=$(NR_CPUS)\nCONFIG_INITRAMFS_SOURCE="$(BUILD_PATH)/init-cpio-spec.txt"\n' >> $(KERNEL_BUILD_PATH)/minimal.config
+	cat arch/$(ARCH).config >> $(KERNEL_BUILD_PATH)/minimal.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) allnoconfig
+	cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config $(KERNEL_BUILD_PATH)/minimal.config
+	$(if $(findstring yes,$(DEBUG_KERNEL)),cp debug.config $(KERNEL_BUILD_PATH) && cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config debug.config,)
+
+$(KERNEL_BZIMAGE): $(KERNEL_BUILD_PATH)/.config $(BUILD_PATH)/init-cpio-spec.txt $(MUSL_PATH)/lib/libc.so $(IPERF_PATH)/src/iperf3 $(IPUTILS_PATH)/ping $(BASH_PATH)/bash $(IPROUTE2_PATH)/misc/ss $(IPROUTE2_PATH)/ip/ip $(IPTABLES_PATH)/iptables/xtables-legacy-multi $(NMAP_PATH)/ncat/ncat $(WIREGUARD_TOOLS_PATH)/src/wg $(BUILD_PATH)/init ../netns.sh $(WIREGUARD_SOURCES)
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE)
+
+$(BUILD_PATH)/include/linux/.installed: | $(KERNEL_BUILD_PATH)/.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) INSTALL_HDR_PATH=$(BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) headers_install
+	touch $@
+
+$(MUSL_PATH)/lib/libc.so: $(MUSL_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	cd $(MUSL_PATH) && CC=$(REAL_CC) ./configure --prefix=/ --disable-static --build=$(CBUILD)
+	$(MAKE) -C $(MUSL_PATH)
+	$(STRIP) -s $@
+
+$(BUILD_PATH)/include/.installed: $(MUSL_PATH)/lib/libc.so
+	$(MAKE) -C $(MUSL_PATH) DESTDIR=$(BUILD_PATH) install-headers
+	touch $@
+
+$(MUSL_CC): $(MUSL_PATH)/lib/libc.so
+	sh $(MUSL_PATH)/tools/musl-gcc.specs.sh $(BUILD_PATH)/include $(MUSL_PATH)/lib /lib/ld-linux.so.1 > $(BUILD_PATH)/musl-gcc.specs
+	printf '#!/bin/sh\nexec "$(REAL_CC)" --specs="$(BUILD_PATH)/musl-gcc.specs" "$$@"\n' > $(BUILD_PATH)/musl-gcc
+	chmod +x $(BUILD_PATH)/musl-gcc
+
+$(IPERF_PATH)/.installed: $(IPERF_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	sed -i '1s/^/#include <stdint.h>/' $(IPERF_PATH)/src/cjson.h $(IPERF_PATH)/src/timer.h
+	sed -i -r 's/-p?g//g' $(IPERF_PATH)/src/Makefile*
+	touch $@
+
+$(IPERF_PATH)/src/iperf3: | $(IPERF_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(IPERF_PATH) && CFLAGS="$(CFLAGS) -D_GNU_SOURCE" ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --with-openssl=no
+	$(MAKE) -C $(IPERF_PATH)
+	$(STRIP) -s $@
+
+$(WIREGUARD_TOOLS_PATH)/.installed: $(WIREGUARD_TOOLS_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(WIREGUARD_TOOLS_PATH)/src/wg: | $(WIREGUARD_TOOLS_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(WIREGUARD_TOOLS_PATH)/src wg
+	$(STRIP) -s $@
+
+$(BUILD_PATH)/init: init.c | $(USERSPACE_DEPS)
+	mkdir -p $(BUILD_PATH)
+	$(MUSL_CC) -o $@ $(CFLAGS) $(LDFLAGS) -std=gnu11 $<
+	$(STRIP) -s $@
+
+$(IPUTILS_PATH)/.installed: $(IPUTILS_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(IPUTILS_PATH)/ping: | $(IPUTILS_PATH)/.installed $(USERSPACE_DEPS)
+	sed -i /atexit/d $(IPUTILS_PATH)/ping.c
+	cd $(IPUTILS_PATH) && $(CC) $(CFLAGS) -std=c99 -o $@ ping.c ping_common.c ping6_common.c iputils_common.c -D_GNU_SOURCE -D'IPUTILS_VERSION(f)=f' -lresolv $(LDFLAGS)
+	$(STRIP) -s $@
+
+$(BASH_PATH)/.installed: $(BASH_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(BASH_PATH)/bash: | $(BASH_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(BASH_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --without-bash-malloc --disable-debugger --disable-help-builtin --disable-history --disable-multibyte --disable-progcomp --disable-readline --disable-mem-scramble
+	$(MAKE) -C $(BASH_PATH)
+	$(STRIP) -s $@
+
+$(IPROUTE2_PATH)/.installed: $(IPROUTE2_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	printf 'CC:=$(CC)\nPKG_CONFIG:=pkg-config\nTC_CONFIG_XT:=n\nTC_CONFIG_ATM:=n\nTC_CONFIG_IPSET:=n\nIP_CONFIG_SETNS:=y\nHAVE_ELF:=n\nHAVE_MNL:=n\nHAVE_BERKELEY_DB:=n\nHAVE_LATEX:=n\nHAVE_PDFLATEX:=n\nCFLAGS+=-DHAVE_SETNS\n' > $(IPROUTE2_PATH)/config.mk
+	printf 'lib: snapshot\n\t$$(MAKE) -C lib\nip/ip: lib\n\t$$(MAKE) -C ip ip\nmisc/ss: lib\n\t$$(MAKE) -C misc ss\n' >> $(IPROUTE2_PATH)/Makefile
+	touch $@
+
+$(IPROUTE2_PATH)/ip/ip: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ ip/ip
+	$(STRIP) -s $@
+
+$(IPROUTE2_PATH)/misc/ss: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS)
+	$(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ misc/ss
+	$(STRIP) -s $@
+
+$(IPTABLES_PATH)/.installed: $(IPTABLES_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	sed -i -e "/nfnetlink=[01]/s:=[01]:=0:" -e "/nfconntrack=[01]/s:=[01]:=0:" $(IPTABLES_PATH)/configure
+	touch $@
+
+$(IPTABLES_PATH)/iptables/xtables-legacy-multi: | $(IPTABLES_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(IPTABLES_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --disable-nftables --disable-bpf-compiler --disable-nfsynproxy --disable-libipq --disable-connlabel --with-kernel=$(BUILD_PATH)/include
+	$(MAKE) -C $(IPTABLES_PATH)
+	$(STRIP) -s $@
+
+$(NMAP_PATH)/.installed: $(NMAP_TAR)
+	mkdir -p $(BUILD_PATH)
+	flock -s $<.lock tar -C $(BUILD_PATH) -xf $<
+	touch $@
+
+$(NMAP_PATH)/ncat/ncat: | $(NMAP_PATH)/.installed $(USERSPACE_DEPS)
+	cd $(NMAP_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --without-ndiff --without-zenmap --without-nping --with-libpcap=included --with-libpcre=included --with-libdnet=included --without-liblua --with-liblinear=included --without-nmap-update --without-openssl --with-pcap=linux --without-libssh
+	$(MAKE) -C $(NMAP_PATH)/libpcap
+	$(MAKE) -C $(NMAP_PATH)/ncat
+	$(STRIP) -s $@
+
+clean:
+	rm -rf $(BUILD_PATH)
+
+distclean: clean
+	rm -rf $(DISTFILES_PATH)
+
+menuconfig: $(KERNEL_BUILD_PATH)/.config
+	$(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) menuconfig
+
+.PHONY: qemu build clean distclean menuconfig
+.DELETE_ON_ERROR:
diff --git a/tools/testing/selftests/wireguard/qemu/arch/aarch64.config b/tools/testing/selftests/wireguard/qemu/arch/aarch64.config
new file mode 100644
index 0000000..3d063bb
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/aarch64.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config b/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config
new file mode 100644
index 0000000..dbdc7e4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/aarch64_be.config
@@ -0,0 +1,6 @@
+CONFIG_CPU_BIG_ENDIAN=y
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/arm.config b/tools/testing/selftests/wireguard/qemu/arch/arm.config
new file mode 100644
index 0000000..148f499
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/arm.config
@@ -0,0 +1,9 @@
+CONFIG_MMU=y
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_VIRT=y
+CONFIG_THUMB2_KERNEL=n
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/armeb.config b/tools/testing/selftests/wireguard/qemu/arch/armeb.config
new file mode 100644
index 0000000..bd76b07
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/armeb.config
@@ -0,0 +1,10 @@
+CONFIG_MMU=y
+CONFIG_ARCH_MULTI_V7=y
+CONFIG_ARCH_VIRT=y
+CONFIG_THUMB2_KERNEL=n
+CONFIG_SERIAL_AMBA_PL011=y
+CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyAMA0 wg.success=ttyAMA1"
+CONFIG_CPU_BIG_ENDIAN=y
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/i686.config b/tools/testing/selftests/wireguard/qemu/arch/i686.config
new file mode 100644
index 0000000..a85025d
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/i686.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/m68k.config b/tools/testing/selftests/wireguard/qemu/arch/m68k.config
new file mode 100644
index 0000000..62a15bd
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/m68k.config
@@ -0,0 +1,9 @@
+CONFIG_MMU=y
+CONFIG_M68KCLASSIC=y
+CONFIG_M68040=y
+CONFIG_MAC=y
+CONFIG_SERIAL_PMACZILOG=y
+CONFIG_SERIAL_PMACZILOG_TTYS=y
+CONFIG_SERIAL_PMACZILOG_CONSOLE=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips.config b/tools/testing/selftests/wireguard/qemu/arch/mips.config
new file mode 100644
index 0000000..df71d6b9
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips.config
@@ -0,0 +1,11 @@
+CONFIG_CPU_MIPS32_R2=y
+CONFIG_MIPS_MALTA=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips64.config b/tools/testing/selftests/wireguard/qemu/arch/mips64.config
new file mode 100644
index 0000000..90c783f
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips64.config
@@ -0,0 +1,14 @@
+CONFIG_64BIT=y
+CONFIG_CPU_MIPS64_R2=y
+CONFIG_MIPS32_N32=y
+CONFIG_CPU_HAS_MSA=y
+CONFIG_MIPS_MALTA=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mips64el.config b/tools/testing/selftests/wireguard/qemu/arch/mips64el.config
new file mode 100644
index 0000000..435b0b4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mips64el.config
@@ -0,0 +1,15 @@
+CONFIG_64BIT=y
+CONFIG_CPU_MIPS64_R2=y
+CONFIG_MIPS32_N32=y
+CONFIG_CPU_HAS_MSA=y
+CONFIG_MIPS_MALTA=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/arch/mipsel.config b/tools/testing/selftests/wireguard/qemu/arch/mipsel.config
new file mode 100644
index 0000000..62bb50c
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/mipsel.config
@@ -0,0 +1,12 @@
+CONFIG_CPU_MIPS32_R2=y
+CONFIG_MIPS_MALTA=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_MIPS_CPS=y
+CONFIG_MIPS_FP_SUPPORT=y
+CONFIG_POWER_RESET=y
+CONFIG_POWER_RESET_SYSCON=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/powerpc.config b/tools/testing/selftests/wireguard/qemu/arch/powerpc.config
new file mode 100644
index 0000000..5795709
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/powerpc.config
@@ -0,0 +1,10 @@
+CONFIG_PPC_QEMU_E500=y
+CONFIG_FSL_SOC_BOOKE=y
+CONFIG_PPC_85xx=y
+CONFIG_PHYS_64BIT=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_MATH_EMULATION=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1024
diff --git a/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config b/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config
new file mode 100644
index 0000000..f52f1e2
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/powerpc64le.config
@@ -0,0 +1,13 @@
+CONFIG_PPC64=y
+CONFIG_PPC_PSERIES=y
+CONFIG_ALTIVEC=y
+CONFIG_VSX=y
+CONFIG_PPC_OF_BOOT_TRAMPOLINE=y
+CONFIG_PPC_RADIX_MMU=y
+CONFIG_HVC_CONSOLE=y
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=hvc0 wg.success=hvc1"
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
+CONFIG_FRAME_WARN=1280
+CONFIG_THREAD_SHIFT=14
diff --git a/tools/testing/selftests/wireguard/qemu/arch/x86_64.config b/tools/testing/selftests/wireguard/qemu/arch/x86_64.config
new file mode 100644
index 0000000..00a1ef4
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/arch/x86_64.config
@@ -0,0 +1,5 @@
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttyS0 wg.success=ttyS1"
+CONFIG_FRAME_WARN=1280
diff --git a/tools/testing/selftests/wireguard/qemu/debug.config b/tools/testing/selftests/wireguard/qemu/debug.config
new file mode 100644
index 0000000..70065d3
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/debug.config
@@ -0,0 +1,66 @@
+CONFIG_LOCALVERSION="-debug"
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_POINTER=y
+CONFIG_STACK_VALIDATION=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_INFO_DWARF4=y
+CONFIG_PAGE_EXTENSION=y
+CONFIG_PAGE_POISONING=y
+CONFIG_DEBUG_OBJECTS=y
+CONFIG_DEBUG_OBJECTS_FREE=y
+CONFIG_DEBUG_OBJECTS_TIMERS=y
+CONFIG_DEBUG_OBJECTS_WORK=y
+CONFIG_DEBUG_OBJECTS_RCU_HEAD=y
+CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y
+CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1
+CONFIG_SLUB_DEBUG_ON=y
+CONFIG_DEBUG_VM=y
+CONFIG_DEBUG_MEMORY_INIT=y
+CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
+CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_HAVE_ARCH_KMEMCHECK=y
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_KASAN=y
+CONFIG_KASAN_INLINE=y
+CONFIG_UBSAN=y
+CONFIG_UBSAN_SANITIZE_ALL=y
+CONFIG_UBSAN_NULL=y
+CONFIG_DEBUG_KMEMLEAK=y
+CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=8192
+CONFIG_DEBUG_STACK_USAGE=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_WQ_WATCHDOG=y
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHED_INFO=y
+CONFIG_SCHEDSTATS=y
+CONFIG_SCHED_STACK_END_CHECK=y
+CONFIG_DEBUG_TIMEKEEPING=y
+CONFIG_TIMER_STATS=y
+CONFIG_DEBUG_PREEMPT=y
+CONFIG_DEBUG_RT_MUTEXES=y
+CONFIG_DEBUG_SPINLOCK=y
+CONFIG_DEBUG_MUTEXES=y
+CONFIG_DEBUG_LOCK_ALLOC=y
+CONFIG_PROVE_LOCKING=y
+CONFIG_LOCKDEP=y
+CONFIG_DEBUG_ATOMIC_SLEEP=y
+CONFIG_TRACE_IRQFLAGS=y
+CONFIG_DEBUG_BUGVERBOSE=y
+CONFIG_DEBUG_LIST=y
+CONFIG_DEBUG_PI_LIST=y
+CONFIG_PROVE_RCU=y
+CONFIG_SPARSE_RCU_POINTER=y
+CONFIG_RCU_CPU_STALL_TIMEOUT=21
+CONFIG_RCU_TRACE=y
+CONFIG_RCU_EQS_DEBUG=y
+CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_DEBUG_SG=y
+CONFIG_DEBUG_NOTIFIERS=y
+CONFIG_DOUBLEFAULT=y
+CONFIG_X86_DEBUG_FPU=y
+CONFIG_DEBUG_SECTION_MISMATCH=y
+CONFIG_DEBUG_PAGEALLOC=y
+CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y
+CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y
diff --git a/tools/testing/selftests/wireguard/qemu/init.c b/tools/testing/selftests/wireguard/qemu/init.c
new file mode 100644
index 0000000..c969812
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/init.c
@@ -0,0 +1,284 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
+ */
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <fcntl.h>
+#include <sys/wait.h>
+#include <sys/mount.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/io.h>
+#include <sys/ioctl.h>
+#include <sys/reboot.h>
+#include <sys/utsname.h>
+#include <sys/sendfile.h>
+#include <sys/sysmacros.h>
+#include <linux/random.h>
+#include <linux/version.h>
+
+__attribute__((noreturn)) static void poweroff(void)
+{
+	fflush(stdout);
+	fflush(stderr);
+	reboot(RB_AUTOBOOT);
+	sleep(30);
+	fprintf(stderr, "\x1b[37m\x1b[41m\x1b[1mFailed to power off!!!\x1b[0m\n");
+	exit(1);
+}
+
+static void panic(const char *what)
+{
+	fprintf(stderr, "\n\n\x1b[37m\x1b[41m\x1b[1mSOMETHING WENT HORRIBLY WRONG\x1b[0m\n\n    \x1b[31m\x1b[1m%s: %s\x1b[0m\n\n\x1b[37m\x1b[44m\x1b[1mPower off...\x1b[0m\n\n", what, strerror(errno));
+	poweroff();
+}
+
+#define pretty_message(msg) puts("\x1b[32m\x1b[1m" msg "\x1b[0m")
+
+static void print_banner(void)
+{
+	struct utsname utsname;
+	int len;
+
+	if (uname(&utsname) < 0)
+		panic("uname");
+
+	len = strlen("    WireGuard Test Suite on       ") + strlen(utsname.sysname) + strlen(utsname.release) + strlen(utsname.machine);
+	printf("\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\x1b[45m\x1b[33m\x1b[1m    WireGuard Test Suite on %s %s %s    \x1b[0m\n\x1b[45m\x1b[33m\x1b[1m%*.s\x1b[0m\n\n", len, "", utsname.sysname, utsname.release, utsname.machine, len, "");
+}
+
+static void seed_rng(void)
+{
+	int fd;
+	struct {
+		int entropy_count;
+		int buffer_size;
+		unsigned char buffer[256];
+	} entropy = {
+		.entropy_count = sizeof(entropy.buffer) * 8,
+		.buffer_size = sizeof(entropy.buffer),
+		.buffer = "Adding real entropy is not actually important for these tests. Don't try this at home, kids!"
+	};
+
+	if (mknod("/dev/urandom", S_IFCHR | 0644, makedev(1, 9)))
+		panic("mknod(/dev/urandom)");
+	fd = open("/dev/urandom", O_WRONLY);
+	if (fd < 0)
+		panic("open(urandom)");
+	for (int i = 0; i < 256; ++i) {
+		if (ioctl(fd, RNDADDENTROPY, &entropy) < 0)
+			panic("ioctl(urandom)");
+	}
+	close(fd);
+}
+
+static void mount_filesystems(void)
+{
+	pretty_message("[+] Mounting filesystems...");
+	mkdir("/dev", 0755);
+	mkdir("/proc", 0755);
+	mkdir("/sys", 0755);
+	mkdir("/tmp", 0755);
+	mkdir("/run", 0755);
+	mkdir("/var", 0755);
+	if (mount("none", "/dev", "devtmpfs", 0, NULL))
+		panic("devtmpfs mount");
+	if (mount("none", "/proc", "proc", 0, NULL))
+		panic("procfs mount");
+	if (mount("none", "/sys", "sysfs", 0, NULL))
+		panic("sysfs mount");
+	if (mount("none", "/tmp", "tmpfs", 0, NULL))
+		panic("tmpfs mount");
+	if (mount("none", "/run", "tmpfs", 0, NULL))
+		panic("tmpfs mount");
+	if (mount("none", "/sys/kernel/debug", "debugfs", 0, NULL))
+		; /* Not a problem if it fails.*/
+	if (symlink("/run", "/var/run"))
+		panic("run symlink");
+	if (symlink("/proc/self/fd", "/dev/fd"))
+		panic("fd symlink");
+}
+
+static void enable_logging(void)
+{
+	int fd;
+	pretty_message("[+] Enabling logging...");
+	fd = open("/proc/sys/kernel/printk", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "9\n", 2) != 2)
+			panic("write(printk)");
+		close(fd);
+	}
+	fd = open("/proc/sys/debug/exception-trace", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "1\n", 2) != 2)
+			panic("write(exception-trace)");
+		close(fd);
+	}
+	fd = open("/proc/sys/kernel/panic_on_warn", O_WRONLY);
+	if (fd >= 0) {
+		if (write(fd, "1\n", 2) != 2)
+			panic("write(panic_on_warn)");
+		close(fd);
+	}
+}
+
+static void kmod_selftests(void)
+{
+	FILE *file;
+	char line[2048], *start, *pass;
+	bool success = true;
+	pretty_message("[+] Module self-tests:");
+	file = fopen("/proc/kmsg", "r");
+	if (!file)
+		panic("fopen(kmsg)");
+	if (fcntl(fileno(file), F_SETFL, O_NONBLOCK) < 0)
+		panic("fcntl(kmsg, nonblock)");
+	while (fgets(line, sizeof(line), file)) {
+		start = strstr(line, "wireguard: ");
+		if (!start)
+			continue;
+		start += 11;
+		*strchrnul(start, '\n') = '\0';
+		if (strstr(start, "www.wireguard.com"))
+			break;
+		pass = strstr(start, ": pass");
+		if (!pass || pass[6] != '\0') {
+			success = false;
+			printf(" \x1b[31m*  %s\x1b[0m\n", start);
+		} else
+			printf(" \x1b[32m*  %s\x1b[0m\n", start);
+	}
+	fclose(file);
+	if (!success) {
+		puts("\x1b[31m\x1b[1m[-] Tests failed! \u2639\x1b[0m");
+		poweroff();
+	}
+}
+
+static void launch_tests(void)
+{
+	char cmdline[4096], *success_dev;
+	int status, fd;
+	pid_t pid;
+
+	pretty_message("[+] Launching tests...");
+	pid = fork();
+	if (pid == -1)
+		panic("fork");
+	else if (pid == 0) {
+		execl("/init.sh", "init", NULL);
+		panic("exec");
+	}
+	if (waitpid(pid, &status, 0) < 0)
+		panic("waitpid");
+	if (WIFEXITED(status) && WEXITSTATUS(status) == 0) {
+		pretty_message("[+] Tests successful! :-)");
+		fd = open("/proc/cmdline", O_RDONLY);
+		if (fd < 0)
+			panic("open(/proc/cmdline)");
+		if (read(fd, cmdline, sizeof(cmdline) - 1) <= 0)
+			panic("read(/proc/cmdline)");
+		cmdline[sizeof(cmdline) - 1] = '\0';
+		for (success_dev = strtok(cmdline, " \n"); success_dev; success_dev = strtok(NULL, " \n")) {
+			if (strncmp(success_dev, "wg.success=", 11))
+				continue;
+			memcpy(success_dev + 11 - 5, "/dev/", 5);
+			success_dev += 11 - 5;
+			break;
+		}
+		if (!success_dev || !strlen(success_dev))
+			panic("Unable to find success device");
+
+		fd = open(success_dev, O_WRONLY);
+		if (fd < 0)
+			panic("open(success_dev)");
+		if (write(fd, "success\n", 8) != 8)
+			panic("write(success_dev)");
+		close(fd);
+	} else {
+		const char *why = "unknown cause";
+		int what = -1;
+
+		if (WIFEXITED(status)) {
+			why = "exit code";
+			what = WEXITSTATUS(status);
+		} else if (WIFSIGNALED(status)) {
+			why = "signal";
+			what = WTERMSIG(status);
+		}
+		printf("\x1b[31m\x1b[1m[-] Tests failed with %s %d! \u2639\x1b[0m\n", why, what);
+	}
+}
+
+static void ensure_console(void)
+{
+	for (unsigned int i = 0; i < 1000; ++i) {
+		int fd = open("/dev/console", O_RDWR);
+		if (fd < 0) {
+			usleep(50000);
+			continue;
+		}
+		dup2(fd, 0);
+		dup2(fd, 1);
+		dup2(fd, 2);
+		close(fd);
+		if (write(1, "\0\0\0\0\n", 5) == 5)
+			return;
+	}
+	panic("Unable to open console device");
+}
+
+static void clear_leaks(void)
+{
+	int fd;
+
+	fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
+	if (fd < 0)
+		return;
+	pretty_message("[+] Starting memory leak detection...");
+	write(fd, "clear\n", 5);
+	close(fd);
+}
+
+static void check_leaks(void)
+{
+	int fd;
+
+	fd = open("/sys/kernel/debug/kmemleak", O_WRONLY);
+	if (fd < 0)
+		return;
+	pretty_message("[+] Scanning for memory leaks...");
+	sleep(2); /* Wait for any grace periods. */
+	write(fd, "scan\n", 5);
+	close(fd);
+
+	fd = open("/sys/kernel/debug/kmemleak", O_RDONLY);
+	if (fd < 0)
+		return;
+	if (sendfile(1, fd, NULL, 0x7ffff000) > 0)
+		panic("Memory leaks encountered");
+	close(fd);
+}
+
+int main(int argc, char *argv[])
+{
+	seed_rng();
+	ensure_console();
+	print_banner();
+	mount_filesystems();
+	kmod_selftests();
+	enable_logging();
+	clear_leaks();
+	launch_tests();
+	check_leaks();
+	poweroff();
+	return 1;
+}
diff --git a/tools/testing/selftests/wireguard/qemu/kernel.config b/tools/testing/selftests/wireguard/qemu/kernel.config
new file mode 100644
index 0000000..cf05dde
--- /dev/null
+++ b/tools/testing/selftests/wireguard/qemu/kernel.config
@@ -0,0 +1,87 @@
+CONFIG_LOCALVERSION=""
+CONFIG_NET=y
+CONFIG_NETDEVICES=y
+CONFIG_NET_CORE=y
+CONFIG_NET_IPIP=y
+CONFIG_DUMMY=y
+CONFIG_VETH=y
+CONFIG_MULTIUSER=y
+CONFIG_NAMESPACES=y
+CONFIG_NET_NS=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IPV6=y
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_NAT=y
+CONFIG_NETFILTER_XTABLES=y
+CONFIG_NETFILTER_XT_NAT=y
+CONFIG_NETFILTER_XT_MATCH_LENGTH=y
+CONFIG_NF_NAT_IPV4=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_NAT=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_TTY=y
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_SCRIPT=y
+CONFIG_VDSO=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_HYPERVISOR_GUEST=y
+CONFIG_PARAVIRT=y
+CONFIG_KVM_GUEST=y
+CONFIG_PARAVIRT_SPINLOCKS=y
+CONFIG_PRINTK=y
+CONFIG_KALLSYMS=y
+CONFIG_BUG=y
+CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
+CONFIG_JUMP_LABEL=y
+CONFIG_EMBEDDED=n
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_SHMEM=y
+CONFIG_SLUB=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_SMP=y
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_NUMA=y
+CONFIG_PREEMPT=y
+CONFIG_NO_HZ=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_NO_HZ_FULL=n
+CONFIG_HZ_PERIODIC=n
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_COMPAT_32BIT_TIME=y
+CONFIG_ARCH_RANDOM=y
+CONFIG_FILE_LOCKING=y
+CONFIG_POSIX_TIMERS=y
+CONFIG_DEVTMPFS=y
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=15
+CONFIG_PRINTK_TIME=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_LEGACY_VSYSCALL_NONE=y
+CONFIG_KERNEL_GZIP=y
+CONFIG_PANIC_ON_OOPS=y
+CONFIG_BUG_ON_DATA_CORRUPTION=y
+CONFIG_LOCKUP_DETECTOR=y
+CONFIG_SOFTLOCKUP_DETECTOR=y
+CONFIG_HARDLOCKUP_DETECTOR=y
+CONFIG_WQ_WATCHDOG=y
+CONFIG_DETECT_HUNG_TASK=y
+CONFIG_BOOTPARAM_HARDLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC=y
+CONFIG_PANIC_TIMEOUT=-1
+CONFIG_STACKTRACE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_GDB_SCRIPTS=y
+CONFIG_WIREGUARD=y
+CONFIG_WIREGUARD_DEBUG=y